Index: /issm/oecreview/Archive/15392-16133/Date.tex
===================================================================
--- /issm/oecreview/Archive/15392-16133/Date.tex	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/Date.tex	(revision 16134)
@@ -0,0 +1,1 @@
+Sep-16-2013
Index: /issm/oecreview/Archive/15392-16133/ISSM-15397-15398.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15397-15398.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15397-15398.diff	(revision 16134)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/dox/issm.dox
+===================================================================
+--- ../trunk-jpl/src/dox/issm.dox	(revision 15397)
++++ ../trunk-jpl/src/dox/issm.dox	(revision 15398)
+@@ -46,43 +46,37 @@
+ <th  bgcolor=#7AA9DD style="text-align:left;">Language</th><th  bgcolor=#7AA9DD style="text-align:right;">files</th><th  bgcolor=#7AA9DD style="text-align:right;">blank</th><th  bgcolor=#7AA9DD style="text-align:right;">comment</th><th  bgcolor=#7AA9DD style="text-align:right;">code</th><th  bgcolor=#7AA9DD style="text-align:right;">Total</th>
+ </th>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> C++ </th><td  bgcolor=#FFFFFF style="text-align:right;">469</td><td  bgcolor=#FFFFFF style="text-align:right;">14505</td><td  bgcolor=#FFFFFF style="text-align:right;">16993</td><td  bgcolor=#FFFFFF style="text-align:right;">58467</td><td  bgcolor=#FFFFFF style="text-align:right;">89965</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> C++ </th><td  bgcolor=#FFFFFF style="text-align:right;">478</td><td  bgcolor=#FFFFFF style="text-align:right;">14993</td><td  bgcolor=#FFFFFF style="text-align:right;">17509</td><td  bgcolor=#FFFFFF style="text-align:right;">60128</td><td  bgcolor=#FFFFFF style="text-align:right;">92630</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> MATLAB </th><td  bgcolor=#C6E2FF style="text-align:right;">959</td><td  bgcolor=#C6E2FF style="text-align:right;">6773</td><td  bgcolor=#C6E2FF style="text-align:right;">13598</td><td  bgcolor=#C6E2FF style="text-align:right;">31759</td><td  bgcolor=#C6E2FF style="text-align:right;">52130</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> MATLAB </th><td  bgcolor=#C6E2FF style="text-align:right;">1037</td><td  bgcolor=#C6E2FF style="text-align:right;">7053</td><td  bgcolor=#C6E2FF style="text-align:right;">14331</td><td  bgcolor=#C6E2FF style="text-align:right;">33157</td><td  bgcolor=#C6E2FF style="text-align:right;">54541</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> C/C++  Header </th><td  bgcolor=#FFFFFF style="text-align:right;">365</td><td  bgcolor=#FFFFFF style="text-align:right;">2786</td><td  bgcolor=#FFFFFF style="text-align:right;">2931</td><td  bgcolor=#FFFFFF style="text-align:right;">12036</td><td  bgcolor=#FFFFFF style="text-align:right;">17753</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> C/C++  Header </th><td  bgcolor=#FFFFFF style="text-align:right;">381</td><td  bgcolor=#FFFFFF style="text-align:right;">3146</td><td  bgcolor=#FFFFFF style="text-align:right;">3358</td><td  bgcolor=#FFFFFF style="text-align:right;">13275</td><td  bgcolor=#FFFFFF style="text-align:right;">19779</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> Python </th><td  bgcolor=#C6E2FF style="text-align:right;">113</td><td  bgcolor=#C6E2FF style="text-align:right;">3445</td><td  bgcolor=#C6E2FF style="text-align:right;">4852</td><td  bgcolor=#C6E2FF style="text-align:right;">7316</td><td  bgcolor=#C6E2FF style="text-align:right;">15613</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> Python </th><td  bgcolor=#C6E2FF style="text-align:right;">115</td><td  bgcolor=#C6E2FF style="text-align:right;">4054</td><td  bgcolor=#C6E2FF style="text-align:right;">6697</td><td  bgcolor=#C6E2FF style="text-align:right;">7601</td><td  bgcolor=#C6E2FF style="text-align:right;">18352</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> Java </th><td  bgcolor=#FFFFFF style="text-align:right;">23</td><td  bgcolor=#FFFFFF style="text-align:right;">460</td><td  bgcolor=#FFFFFF style="text-align:right;">416</td><td  bgcolor=#FFFFFF style="text-align:right;">4061</td><td  bgcolor=#FFFFFF style="text-align:right;">4937</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> m4 </th><td  bgcolor=#FFFFFF style="text-align:right;">2</td><td  bgcolor=#FFFFFF style="text-align:right;">213</td><td  bgcolor=#FFFFFF style="text-align:right;">6</td><td  bgcolor=#FFFFFF style="text-align:right;">1512</td><td  bgcolor=#FFFFFF style="text-align:right;">1731</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> m4 </th><td  bgcolor=#C6E2FF style="text-align:right;">2</td><td  bgcolor=#C6E2FF style="text-align:right;">197</td><td  bgcolor=#C6E2FF style="text-align:right;">6</td><td  bgcolor=#C6E2FF style="text-align:right;">1401</td><td  bgcolor=#C6E2FF style="text-align:right;">1604</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> CMake </th><td  bgcolor=#C6E2FF style="text-align:right;">158</td><td  bgcolor=#C6E2FF style="text-align:right;">0</td><td  bgcolor=#C6E2FF style="text-align:right;">835</td><td  bgcolor=#C6E2FF style="text-align:right;">598</td><td  bgcolor=#C6E2FF style="text-align:right;">1433</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> XML </th><td  bgcolor=#FFFFFF style="text-align:right;">38</td><td  bgcolor=#FFFFFF style="text-align:right;">89</td><td  bgcolor=#FFFFFF style="text-align:right;">10</td><td  bgcolor=#FFFFFF style="text-align:right;">783</td><td  bgcolor=#FFFFFF style="text-align:right;">882</td>
+-</tr>
+-<tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> CMake </th><td  bgcolor=#C6E2FF style="text-align:right;">163</td><td  bgcolor=#C6E2FF style="text-align:right;">0</td><td  bgcolor=#C6E2FF style="text-align:right;">871</td><td  bgcolor=#C6E2FF style="text-align:right;">631</td><td  bgcolor=#C6E2FF style="text-align:right;">1502</td>
+-</tr>
+-<tr>
+ <th  bgcolor=#FFFFFF style="text-align:left;"> Objective  C </th><td  bgcolor=#FFFFFF style="text-align:right;">9</td><td  bgcolor=#FFFFFF style="text-align:right;">96</td><td  bgcolor=#FFFFFF style="text-align:right;">0</td><td  bgcolor=#FFFFFF style="text-align:right;">370</td><td  bgcolor=#FFFFFF style="text-align:right;">466</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> Bourne  Shell </th><td  bgcolor=#C6E2FF style="text-align:right;">3</td><td  bgcolor=#C6E2FF style="text-align:right;">56</td><td  bgcolor=#C6E2FF style="text-align:right;">73</td><td  bgcolor=#C6E2FF style="text-align:right;">248</td><td  bgcolor=#C6E2FF style="text-align:right;">377</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> Fortran </th><td  bgcolor=#C6E2FF style="text-align:right;">77</td><td  bgcolor=#C6E2FF style="text-align:right;">7</td><td  bgcolor=#C6E2FF style="text-align:right;">4</td><td  bgcolor=#C6E2FF style="text-align:right;">302</td><td  bgcolor=#C6E2FF style="text-align:right;">365</td><td  bgcolor=#C6E2FF style="text-align:right;">678</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> Perl </th><td  bgcolor=#FFFFFF style="text-align:right;">1</td><td  bgcolor=#FFFFFF style="text-align:right;">6</td><td  bgcolor=#FFFFFF style="text-align:right;">9</td><td  bgcolor=#FFFFFF style="text-align:right;">196</td><td  bgcolor=#FFFFFF style="text-align:right;">211</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> Bourne  Shell </th><td  bgcolor=#FFFFFF style="text-align:right;">2</td><td  bgcolor=#FFFFFF style="text-align:right;">58</td><td  bgcolor=#FFFFFF style="text-align:right;">71</td><td  bgcolor=#FFFFFF style="text-align:right;">252</td><td  bgcolor=#FFFFFF style="text-align:right;">381</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> C </th><td  bgcolor=#C6E2FF style="text-align:right;">2</td><td  bgcolor=#C6E2FF style="text-align:right;">10</td><td  bgcolor=#C6E2FF style="text-align:right;">3</td><td  bgcolor=#C6E2FF style="text-align:right;">81</td><td  bgcolor=#C6E2FF style="text-align:right;">94</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> Perl </th><td  bgcolor=#C6E2FF style="text-align:right;">1</td><td  bgcolor=#C6E2FF style="text-align:right;">6</td><td  bgcolor=#C6E2FF style="text-align:right;">9</td><td  bgcolor=#C6E2FF style="text-align:right;">196</td><td  bgcolor=#C6E2FF style="text-align:right;">211</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> SUM: </th><td  bgcolor=#FFFFFF style="text-align:right;">2147</td><td  bgcolor=#FFFFFF style="text-align:right;">28423</td><td  bgcolor=#FFFFFF style="text-align:right;">39762</td><td  bgcolor=#FFFFFF style="text-align:right;">117349</td><td  bgcolor=#FFFFFF style="text-align:right;">185534</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> SUM: </th><td  bgcolor=#FFFFFF style="text-align:right;">2190</td><td  bgcolor=#FFFFFF style="text-align:right;">29623</td><td  bgcolor=#FFFFFF style="text-align:right;">43118</td><td  bgcolor=#FFFFFF style="text-align:right;">117454</td><td  bgcolor=#FFFFFF style="text-align:right;">190195</td>
+ </tr>
+ </table>
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15398-15399.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15398-15399.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15398-15399.diff	(revision 16134)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/m/plot/plot_gridded.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_gridded.m	(revision 15398)
++++ ../trunk-jpl/src/m/plot/plot_gridded.m	(revision 15399)
+@@ -22,6 +22,7 @@
+ 
+ %Interpolating data on grid
+ [x_m y_m data_grid]=InterpFromMeshToGrid(elements,x,y,data,xlim(1),ylim(2),post,post,round(diff(ylim)/post),round(diff(xlim)/post),NaN);
++data_grid_save = data_grid;
+ if size(data_grid,1)<3 | size(data_grid,2)<3,
+ 	error('data_grid size too small in plot_gridded, check posting and units');
+ end
+@@ -33,6 +34,7 @@
+ options=changefieldvalue(options,'colormap',map);
+ 
+ %Process data_grid: add white in NaN and correct caxis accordingly
++[data_nani data_nanj]=find(isnan(data_grid) | data_grid==-9999);
+ if exist(options,'caxis'),
+ 	caxis_opt=getfieldvalue(options,'caxis');
+ 	data_grid(find(data_grid<caxis_opt(1)))=caxis_opt(1);
+@@ -43,21 +45,42 @@
+ 	data_min=min(data_grid(:));
+ 	data_max=max(data_grid(:));
+ end
+-options = changefieldvalue(options,'cbYLim',[data_min data_max]);
+-white   = data_min - (data_max-data_min)/(lenmap);
+-options = changefieldvalue(options,'caxis',[white data_max]);
+-data_grid(isnan(data_grid))=white;
+ 
+ %Select plot area 
+ subplotmodel(plotlines,plotcols,i,options);
+ 
+ %shading interp;
+-if exist(options,'forcecolormap'),
+-	image_rgb = ind2rgb(uint16((data_grid - data_min)*(length(map)/(data_max-data_min))),map);
+-	h=imagesc(xlim,ylim,image_rgb);
+-else
+-	h=imagesc(xlim,ylim,data_grid);
++image_rgb = ind2rgb(uint16((data_grid - data_min)*(length(map)/(data_max-data_min))),map);
++if exist(options,'shaded'),
++	a    = -45;
++	scut = 0.2;
++	c    = 1;
++	% computes lighting from elevation gradient
++	[fx,fy] = gradient(data_grid_save,x_m,y_m);
++	fxy = -fx*sind(a) - fy*cosd(a);
++	clear fx fy % free some memory...
++	fxy(isnan(fxy)) = 0;
++
++	% computes maximum absolute gradient (median-style), normalizes, saturates and duplicates in 3-D matrix
++	r = repmat(max(min(fxy/nmedian(abs(fxy),1 - scut/100),1),-1),[1,1,3]);
++
++	% applies contrast using exponent
++	rp = (1 - abs(r)).^c;
++	image_rgb = image_rgb.*rp;
++
++	% lighter for positive gradient
++	k = find(r > 0);
++	image_rgb(k) = image_rgb(k) + (1 - rp(k));
+ end
++
++% set novalues / NaN to black color
++if ~isempty(data_nani)
++	nancolor=getfieldvalue(options,'nancolor',[0 0 0]);
++	image_rgb(sub2ind(size(image_rgb),repmat(data_nani,1,3),repmat(data_nanj,1,3),repmat(1:3,size(data_nani,1),1))) = repmat(nancolor,size(data_nani,1),1);
++end
++
++%plot grid
++h=imagesc(xlim,ylim,image_rgb);
+ axis xy
+ 
+ %last step: mesh gridded?
+@@ -67,4 +90,8 @@
+ end
+ 
+ %Apply options
++if ~isnan(data_min),
++	options=changefieldvalue(options,'caxis',[data_min data_max]); % force caxis so that the colorbar is ready
++end
++options=addfielddefault(options,'axis','xy equal off'); % default axis
+ applyoptions(md,data,options);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15399-15400.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15399-15400.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15399-15400.diff	(revision 16134)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/src/m/plot/plot_gridded.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_gridded.m	(revision 15399)
++++ ../trunk-jpl/src/m/plot/plot_gridded.m	(revision 15400)
+@@ -27,12 +27,6 @@
+ 	error('data_grid size too small in plot_gridded, check posting and units');
+ end
+ 
+-%Get and change colormap
+-map    = getcolormap(options);
+-lenmap = size(map,1);
+-map    = [1 1 1; map];
+-options=changefieldvalue(options,'colormap',map);
+-
+ %Process data_grid: add white in NaN and correct caxis accordingly
+ [data_nani data_nanj]=find(isnan(data_grid) | data_grid==-9999);
+ if exist(options,'caxis'),
+@@ -50,6 +44,7 @@
+ subplotmodel(plotlines,plotcols,i,options);
+ 
+ %shading interp;
++map    = getcolormap(options);
+ image_rgb = ind2rgb(uint16((data_grid - data_min)*(length(map)/(data_max-data_min))),map);
+ if exist(options,'shaded'),
+ 	a    = -45;
+@@ -75,7 +70,7 @@
+ 
+ % set novalues / NaN to black color
+ if ~isempty(data_nani)
+-	nancolor=getfieldvalue(options,'nancolor',[0 0 0]);
++	nancolor=getfieldvalue(options,'nancolor',[1 1 1]);
+ 	image_rgb(sub2ind(size(image_rgb),repmat(data_nani,1,3),repmat(data_nanj,1,3),repmat(1:3,size(data_nani,1),1))) = repmat(nancolor,size(data_nani,1),1);
+ end
+ 
+@@ -93,5 +88,5 @@
+ if ~isnan(data_min),
+ 	options=changefieldvalue(options,'caxis',[data_min data_max]); % force caxis so that the colorbar is ready
+ end
+-options=addfielddefault(options,'axis','xy equal off'); % default axis
++options=addfielddefault(options,'axis','xy equal'); % default axis
+ applyoptions(md,data,options);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15400-15401.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15400-15401.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15400-15401.diff	(revision 16134)
@@ -0,0 +1,387 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15400)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15401)
+@@ -143,6 +143,7 @@
+ 	MaskVertexonfloatingiceEnum,
+ 	MaskVertexongroundediceEnum,
+ 	MaskVertexonwaterEnum,
++	IcelevelsetEnum,
+ 	MaterialsBetaEnum,
+ 	MaterialsHeatcapacityEnum,
+ 	MaterialsLatentheatEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15400)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15401)
+@@ -151,6 +151,7 @@
+ 		case MaskVertexonfloatingiceEnum : return "MaskVertexonfloatingice";
+ 		case MaskVertexongroundediceEnum : return "MaskVertexongroundedice";
+ 		case MaskVertexonwaterEnum : return "MaskVertexonwater";
++		case IcelevelsetEnum : return "Icelevelset";
+ 		case MaterialsBetaEnum : return "MaterialsBeta";
+ 		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
+ 		case MaterialsLatentheatEnum : return "MaterialsLatentheat";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15400)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15401)
+@@ -154,6 +154,7 @@
+ 	      else if (strcmp(name,"MaskVertexonfloatingice")==0) return MaskVertexonfloatingiceEnum;
+ 	      else if (strcmp(name,"MaskVertexongroundedice")==0) return MaskVertexongroundediceEnum;
+ 	      else if (strcmp(name,"MaskVertexonwater")==0) return MaskVertexonwaterEnum;
++	      else if (strcmp(name,"Icelevelset")==0) return IcelevelsetEnum;
+ 	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
+ 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
+ 	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+-	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+-	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
++	      if (strcmp(name,"Segment")==0) return SegmentEnum;
++	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+-	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
++	      if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
++	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"Patch")==0) return PatchEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15400)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15401)
+@@ -91,7 +91,7 @@
+ 	/*Create vertices: */
+ 
+ 	/*Fetch data:*/
+-	iomodel->FetchData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
++	iomodel->FetchData(7,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
+ 	CreateNumberNodeToElementConnectivity(iomodel);
+ 
+ 	for (i=0;i<numberofvertices;i++){
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15400)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15401)
+@@ -124,6 +124,89 @@
+ }
+ 
+ /*}}}*/
++/*FUNCTION Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type) {{{*/
++Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in,int in_icefront_type,  int in_analysis_type){
++
++	int segment_width;
++	int element;
++	int numnodes; 
++	int numvertices; 
++	int dim;
++	int numberofelements;
++
++	/*icefront constructor data: */
++	int  icefront_eid;
++	int  icefront_mparid;
++	int  icefront_node_ids[NUMVERTICESQUA]; //initialize with largest size
++	int  icefront_vertex_ids[NUMVERTICESQUA]; //initialize with largest size
++
++//	/*find parameters: */
++//	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
++//
++	/*First, retrieve element index and element type: */
++	if(strcmp(element_type_in,"2d")==0){
++		segment_width=4;
++	}
++	else{
++		segment_width=6;
++	}
++//	element=reCast<int,IssmDouble>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill)
++//
++//	/*Build ids for hook constructors: */
++//	icefront_eid=reCast<int,IssmDouble>( *(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)); //matlab indexing
++//	icefront_mparid=numberofelements+1; //matlab indexing
++//
++	if (in_icefront_type==MacAyeal2dIceFrontEnum || in_icefront_type==MacAyeal3dIceFrontEnum){
++//		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
++//		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
++//		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
++//		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
++	}
++	else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
++//		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
++//		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
++//		icefront_node_ids[2]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
++//		icefront_node_ids[3]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+3));
++//		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
++//		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
++//		icefront_vertex_ids[2]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
++//		icefront_vertex_ids[3]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+3));
++	}
++	else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!");
++
++	if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
++		numnodes=4;
++		numvertices=4;
++	}
++	else{
++		numnodes=2;
++		numvertices=2;
++	}
++
++	/*Ok, we have everything to build the object: */
++	this->id=1;
++	this->analysis_type=in_analysis_type;
++
++	/*Hooks: */
++	this->hnodes=new Hook(icefront_node_ids,numnodes);
++	this->hvertices=new Hook(icefront_vertex_ids,numvertices);
++	this->helement=new Hook(&icefront_eid,1);
++	this->hmatpar=new Hook(&icefront_mparid,1);
++
++	//intialize  and add as many inputs per element as requested: 
++	this->inputs=inputs_in;
++	this->inputs->AddInput(new IntInput(FillEnum,1)); //We always consider we have water, if above sea level, only air will be applied
++	this->inputs->AddInput(new IntInput(IceFrontTypeEnum,in_icefront_type)); 
++
++	//parameters and hooked fields: we still can't point to them, they may not even exist. Configure will handle this.
++	this->parameters = NULL;
++	this->nodes      = NULL;
++	this->vertices   = NULL;
++	this->element    = NULL;
++	this->matpar     = matpar_in;
++}
++
++/*}}}*/
+ /*FUNCTION Icefront::~Icefront() {{{*/
+ Icefront::~Icefront(){
+ 	delete inputs;
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15400)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15401)
+@@ -44,6 +44,7 @@
+ 		/*Icefront constructors, destructors: {{{*/
+ 		Icefront();
+ 		Icefront(int icefront_id,int i, IoModel* iomodel,int in_icefront_type, int analysis_type);
++		Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type);
+ 		~Icefront();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15400)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15401)
+@@ -1732,6 +1732,7 @@
+ 				name==BathymetryEnum ||
+ 				name==BedEnum ||
+ 				name==GLlevelsetEnum ||
++				name==IcelevelsetEnum ||
+ 				name==SurfaceSlopeXEnum ||
+ 				name==SurfaceSlopeYEnum ||
+ 				name==BasalforcingsMeltingRateEnum ||
+@@ -2941,12 +2942,27 @@
+ /*FUNCTION Tria::CreatePVectorDiagnosticMacAyeal {{{*/
+ ElementVector* Tria::CreatePVectorDiagnosticMacAyeal(){
+ 
++	/*compute all load vectors for this element*/
++	ElementVector* pe1=CreatePVectorDiagnosticMacAyealDrivingStress();
++	ElementVector* pe2=CreatePVectorDiagnosticMacAyealFront();
++	ElementVector* pe =new ElementVector(pe1,pe2);
++
++	/*clean-up and return*/
++	delete pe1;
++	delete pe2;
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Tria::CreatePVectorDiagnosticMacAyealDrivingStress {{{*/
++ElementVector* Tria::CreatePVectorDiagnosticMacAyealDrivingStress(){
++
+ 	/*Intermediaries */
+ 	int            i,j;
+ 	IssmDouble     driving_stress_baseline,thickness;
+ 	IssmDouble     Jdet;
+ 	IssmDouble     xyz_list[NUMVERTICES][3];
+ 	IssmDouble     slope[2];
++	IssmDouble     icefrontlevel[3];
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -2962,6 +2978,7 @@
+ 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input); 
+ 	Input* surface_input=inputs->GetInput(SurfaceEnum);     _assert_(surface_input);
+ 	Input* drag_input=inputs->GetInput(FrictionCoefficientEnum);_assert_(drag_input);
++	GetInputListOnVertices(&icefrontlevel[0],BedEnum);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -2992,6 +3009,43 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreatePVectorDiagnosticMacAyealFront {{{*/
++ElementVector* Tria::CreatePVectorDiagnosticMacAyealFront(){
++
++	/*Intermediaries */
++	int            i,j;
++	IssmDouble     ls[3];
++	IssmDouble     xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
++	Icefront *icefront=NULL;
++
++	return NULL;
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
++	GaussTria*     gauss  = new GaussTria(2);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Create Ice Front if necessary*/
++	if(ls[0]>0. || ls[1]>0. || ls[2]>0.){
++		if(ls[0]*ls[1]<0. || ls[0]*ls[2]<0. || (ls[0]*ls[1]+ls[0]*ls[2]+ls[1]*ls[2]==0.)){
++			//icefront=new Icefront("2d",inputs,matpar,MacAyealApproximationEnum,analysis_type);
++		}
++	}
++
++	/*Transform coordinate system*/
++	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYEnum);
++
++	/*Clean up and return*/
++	delete gauss;
++	xDelete<IssmDouble>(basis);
++	return pe;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreatePVectorDiagnosticHutter{{{*/
+ ElementVector* Tria::CreatePVectorDiagnosticHutter(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15400)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15401)
+@@ -223,6 +223,8 @@
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyealFriction(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticHutter(void);
+ 		ElementVector* CreatePVectorDiagnosticMacAyeal(void);
++		ElementVector* CreatePVectorDiagnosticMacAyealDrivingStress(void);
++		ElementVector* CreatePVectorDiagnosticMacAyealFront(void);
+ 		ElementVector* CreatePVectorDiagnosticHutter(void);
+ 		ElementMatrix* CreateJacobianDiagnosticMacayeal(void);
+ 		void	  GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15400)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15401)
+@@ -2177,6 +2177,7 @@
+ 				name==WaterfractionEnum||
+ 				name==FrictionCoefficientEnum ||
+ 				name==GLlevelsetEnum ||
++				name==IcelevelsetEnum ||
+ 				name==GradientEnum ||
+ 				name==OldGradientEnum  ||
+ 				name==ConvergedEnum || 
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15400)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15401)
+@@ -53,6 +53,10 @@
+ 			WriteData(fid,'object',obj,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','vertexonwater','format','DoubleMat','mattype',1);
++			icelevelset=ones(md.mesh.numberofvertices,1);
++			pos=md.diagnostic.icefront(:,1:end-1);
++			icelevelset(pos(:))=0;
++			WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum());
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/enum/IcelevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/IcelevelsetEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/IcelevelsetEnum.m	(revision 15401)
+@@ -0,0 +1,11 @@
++function macro=IcelevelsetEnum()
++%ICELEVELSETENUM - Enum of Icelevelset
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=IcelevelsetEnum()
++
++macro=StringToEnum('Icelevelset');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15400)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15401)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=560;
++macro=561;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15400)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15401)
+@@ -1898,6 +1898,20 @@
+ 
+ 	return StringToEnum('MaskVertexonwater')[0]
+ 
++def IcelevelsetEnum():
++	"""
++	ICELEVELSETENUM - Enum of Icelevelset
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=IcelevelsetEnum()
++	"""
++
++	return StringToEnum('Icelevelset')[0]
++
+ def MaterialsBetaEnum():
+ 	"""
+ 	MATERIALSBETAENUM - Enum of MaterialsBeta
+@@ -7860,5 +7874,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 560
++	return 561
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15403-15404.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15403-15404.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15403-15404.diff	(revision 16134)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/m/classes/clusters/cloud.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 15403)
++++ ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 15404)
+@@ -54,7 +54,7 @@
+ 			fprintf(fid,'#!/bin/bash\n');
+ 			if cluster.interactive
+ 				fprintf(fid,'source %s%s\n',cluster.codepath,'/../etc/environment.sh');
+-				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname);
++				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s 2> %s.errlog > /dev/stdout | tee %s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+ 			else
+ 				fprintf(fid,'source %s%s\n',cluster.codepath,'/../etc/environment.sh');
+ 				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15403)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15404)
+@@ -18,7 +18,7 @@
+ 		 processor      = 'neh';
+ 		 codepath       = '';
+ 		 executionpath  = '';
+-		 grouplist     = 's1010';
++		 grouplist     = 'g26209';
+ 		 interactive    = 0;
+ 		 bbftp          = 0;
+ 		 numstreams     = 8;
+@@ -117,7 +117,8 @@
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp-intel/2013.1.117\n');
++			 fprintf(fid,'module load comp-intel/2011.2\n');
++			 %fprintf(fid,'module load comp-intel/2013.1.117\n');
+ 			 fprintf(fid,'module load mpi-sgi/mpt.2.06rp16\n');
+ 			 fprintf(fid,'module load math/intel_mkl_64_10.0.011\n\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15404-15405.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15404-15405.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15404-15405.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15404)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15405)
+@@ -18,7 +18,7 @@
+ 		 processor      = 'neh';
+ 		 codepath       = '';
+ 		 executionpath  = '';
+-		 grouplist     = 'g26209';
++		 grouplist     = 's1010';
+ 		 interactive    = 0;
+ 		 bbftp          = 0;
+ 		 numstreams     = 8;
+@@ -117,8 +117,7 @@
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp-intel/2011.2\n');
+-			 %fprintf(fid,'module load comp-intel/2013.1.117\n');
++			 fprintf(fid,'module load comp-intel/2013.1.117\n');
+ 			 fprintf(fid,'module load mpi-sgi/mpt.2.06rp16\n');
+ 			 fprintf(fid,'module load math/intel_mkl_64_10.0.011\n\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15405-15406.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15405-15406.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15405-15406.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15405)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15406)
+@@ -56,7 +56,7 @@
+ 		WriteData(fid,'object',self,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexonwater','format','DoubleMat','mattype',1)
+ 		icelevelset=numpy.ones(md.mesh.numberofvertices,int)
+-		pos=md.diagnostic.icefront[:,0:-1]
+-		icelevelset[pos[:]]=0;
++		#pos=md.diagnostic.icefront[:,:-2]
++		#icelevelset[pos[:]]=0;
+ 		WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum())
+ 	# }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15406-15407.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15406-15407.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15406-15407.diff	(revision 16134)
@@ -0,0 +1,151 @@
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15406)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15407)
+@@ -9,15 +9,18 @@
+ 
+ void solutionsequence_hydro_nonlinear(FemModel* femmodel){
+ 	/*solution : */
+-	Vector<IssmDouble>* ug_sed=NULL;
++	Vector<IssmDouble>* ug_sed=NULL; 
++	Vector<IssmDouble>* uf_sed=NULL; 
++	Vector<IssmDouble>* uf_sed_sub_iter=NULL; 
++	Vector<IssmDouble>* ug_sed_main_iter=NULL;
++
+ 	Vector<IssmDouble>* ug_epl=NULL; 
+-	Vector<IssmDouble>* uf=NULL;
+-	Vector<IssmDouble>* uf_int_iter=NULL; 
+-	Vector<IssmDouble>* ug_sed_main_iter=NULL; 
+-	Vector<IssmDouble>* ug_epl_main_iter=NULL; 
++	Vector<IssmDouble>* uf_epl=NULL;
++	Vector<IssmDouble>* uf_epl_sub_iter=NULL; 
++	Vector<IssmDouble>* ug_epl_main_iter=NULL;
++ 
+ 	Vector<IssmDouble>* ys=NULL; 
+-	Vector<IssmDouble>* dug=NULL; 
+-	Vector<IssmDouble>* old_ug=NULL; 
++	Vector<IssmDouble>* dug=NULL;
+ 	
+ 	Matrix<IssmDouble>* Kff=NULL;
+ 	Matrix<IssmDouble>* Kfs=NULL;
+@@ -46,9 +49,11 @@
+ 	/*Iteration on the two layers*/
+ 	femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+ 	GetSolutionFromInputsx(&ug_sed, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++	Reducevectorgtofx(&uf_sed, ug_sed, femmodel->nodes,femmodel->parameters);
+ 	if(isefficientlayer) {
+ 		femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
+ 		GetSolutionFromInputsx(&ug_epl, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++	Reducevectorgtofx(&uf_epl, ug_epl, femmodel->nodes,femmodel->parameters);
+ 	}
+ 
+ 	hydroconverged=false;
+@@ -57,10 +62,14 @@
+ 		eplcount=1;
+ 		//save pointer to old velocity
+ 		delete ug_sed_main_iter;
++		delete uf_sed_sub_iter;
+ 		ug_sed_main_iter=ug_sed;
++		uf_sed_sub_iter=uf_sed;
+ 		if(isefficientlayer){
+ 			delete ug_epl_main_iter;
++			delete uf_sed_sub_iter;
+ 			ug_epl_main_iter=ug_epl;
++			uf_sed_sub_iter=uf_epl;
+ 		}
+ 
+ 		femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+@@ -73,16 +82,18 @@
+ 		sedconverged=false;
+ 		for(;;){
+ 			femmodel->HydrologyTransferx();
+-			femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df, &sediment_kmax);
++			femmodel->SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax);
+ 			CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum);
+ 			Reduceloadx(pf,Kfs,ys); delete Kfs;
+-			delete uf;
+-			Solverx(&uf, Kff, pf,uf_int_iter, df, femmodel->parameters);
+-			delete uf_int_iter; uf_int_iter=uf->Duplicate();
++			if(sedcount>1)delete uf_sed;
++			Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters);
++			delete uf_sed_sub_iter; 
++			uf_sed_sub_iter=uf_sed->Duplicate();
++			uf_sed->Copy(uf_sed_sub_iter);
+ 			if(sedcount>1)delete ug_sed; /*Not on first time to avoid deleting ug_sed_main_iter*/
+ 			delete Kff; delete pf; delete df;
+ 
+-			Mergesolutionfromftogx(&ug_sed,uf,ys,femmodel->nodes,femmodel->parameters); delete ys;
++			Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 			InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);
+ 			ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 
+@@ -115,16 +126,18 @@
+ 			/*Iteration on the EPL layer*/
+ 			for(;;){
+ 				femmodel->HydrologyTransferx();
+-				femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df,NULL);
++				femmodel->SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL);
+ 				CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
+ 				Reduceloadx(pf,Kfs,ys); delete Kfs;
+-				delete uf;
+-				Solverx(&uf, Kff, pf,uf_int_iter, df, femmodel->parameters);
+-				delete uf_int_iter; uf_int_iter=uf->Duplicate();
++				if(eplcount>1) delete uf_epl;
++				Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters);
++				delete uf_epl_sub_iter;
++				uf_epl_sub_iter=uf_epl->Duplicate();
++				uf_epl->Copy(uf_epl_sub_iter);
+ 				if(eplcount>1) delete ug_epl; 
+ 				delete Kff;delete pf;
+ 				delete df;
+-				Mergesolutionfromftogx(&ug_epl,uf,ys,femmodel->nodes,femmodel->parameters); delete ys;
++				Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);
+ 				ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 				femmodel->HydrologyEPLupdateDomainx();			
+@@ -199,8 +212,10 @@
+ 	/*Free ressources: */
+ 	delete ug_epl;
+ 	delete ug_sed;
+-	delete uf;
+-	delete uf_int_iter;
++	delete uf_sed;
++	//	delete uf_epl;
++	delete uf_sed_sub_iter;
++	delete uf_epl_sub_iter;
+ 	delete ug_sed_main_iter;
+ 	delete ug_epl_main_iter;
+ 	delete dug;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15406)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15407)
+@@ -6035,11 +6035,11 @@
+ 				residual[i]=0.0;
+ 			}
+ 		}
++		this->inputs->AddInput(new TriaInput(SedimentHeadResidualEnum,residual,P1Enum));
+ 	}
+ 
+ 	/*Add input to the element: */
+ 	this->inputs->AddInput(new TriaInput(SedimentHeadEnum,values,P1Enum));
+-	this->inputs->AddInput(new TriaInput(SedimentHeadResidualEnum,residual,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15406)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15407)
+@@ -9335,9 +9335,11 @@
+ 			tria->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
+ 			if(values[i]>h_max){
+ 				residual[i]=kappa*(values[i]-h_max);
++				residual[i+numdof2d]=residual[i];
+ 			}
+ 			else{
+ 				residual[i]=0.0;
++				residual[i+numdof2d]=residual[i];
+ 			}
+ 		}
+ 		delete tria->material; delete tria;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15407-15408.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15407-15408.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15407-15408.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15407)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15408)
+@@ -56,7 +56,7 @@
+ 		WriteData(fid,'object',self,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexonwater','format','DoubleMat','mattype',1)
+ 		icelevelset=numpy.ones(md.mesh.numberofvertices,int)
+-		#pos=md.diagnostic.icefront[:,:-2]
+-		#icelevelset[pos[:]]=0;
++		pos=md.diagnostic.icefront[:,:-2]
++		icelevelset[pos[:]-1]=0;
+ 		WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum())
+ 	# }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15408-15409.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15408-15409.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15408-15409.diff	(revision 16134)
@@ -0,0 +1,111 @@
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15408)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15409)
+@@ -39,37 +39,37 @@
+ 	IssmDouble ndu_epl,nu_epl;
+ 
+ 	/*Recover parameters: */
+-	femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);//FIXME
++	femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+ 	femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	femmodel->parameters->FindParam(&eps_hyd,HydrologydcRelTolEnum);
+ 	femmodel->parameters->FindParam(&time,TimeEnum);
+ 	hydro_maxiter=150;
+ 	hydrocount=1;
++	hydroconverged=false;
+ 
+-	/*Iteration on the two layers*/
+-	femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
++	/*Retrieve inputs as the initial state for the non linear iteration*/
++	//femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+ 	GetSolutionFromInputsx(&ug_sed, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+ 	Reducevectorgtofx(&uf_sed, ug_sed, femmodel->nodes,femmodel->parameters);
++	
+ 	if(isefficientlayer) {
+ 		femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
+ 		GetSolutionFromInputsx(&ug_epl, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+-	Reducevectorgtofx(&uf_epl, ug_epl, femmodel->nodes,femmodel->parameters);
++		Reducevectorgtofx(&uf_epl, ug_epl, femmodel->nodes,femmodel->parameters);
+ 	}
+ 
+-	hydroconverged=false;
++	/*Iteration on the two layers*/
+ 	for(;;){
+ 		sedcount=1;
+ 		eplcount=1;
+ 		//save pointer to old velocity
+-		delete ug_sed_main_iter;
+ 		delete uf_sed_sub_iter;
+ 		ug_sed_main_iter=ug_sed;
+ 		uf_sed_sub_iter=uf_sed;
+ 		if(isefficientlayer){
+-			delete ug_epl_main_iter;
+-			delete uf_sed_sub_iter;
++			delete uf_epl_sub_iter;
+ 			ug_epl_main_iter=ug_epl;
+-			uf_sed_sub_iter=uf_epl;
++			uf_epl_sub_iter=uf_epl;
+ 		}
+ 
+ 		femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+@@ -87,12 +87,10 @@
+ 			Reduceloadx(pf,Kfs,ys); delete Kfs;
+ 			if(sedcount>1)delete uf_sed;
+ 			Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters);
+-			delete uf_sed_sub_iter; 
++			delete Kff; delete pf; delete uf_sed_sub_iter; delete df;
+ 			uf_sed_sub_iter=uf_sed->Duplicate();
+ 			uf_sed->Copy(uf_sed_sub_iter);
+ 			if(sedcount>1)delete ug_sed; /*Not on first time to avoid deleting ug_sed_main_iter*/
+-			delete Kff; delete pf; delete df;
+-
+ 			Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 			InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);
+ 			ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+@@ -122,21 +120,20 @@
+ 			InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);
+ 			femmodel->HydrologyEPLupdateDomainx();
+ 			femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
++
++			/*Iteration on the EPL layer*/
+ 			eplconverged = false;
+-			/*Iteration on the EPL layer*/
+ 			for(;;){
+ 				femmodel->HydrologyTransferx();
+ 				femmodel->SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL);
+ 				CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
+ 				Reduceloadx(pf,Kfs,ys); delete Kfs;
+-				if(eplcount>1) delete uf_epl;
++				if(sedcount>1) delete uf_epl;
+ 				Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters);
+-				delete uf_epl_sub_iter;
++				delete Kff; delete pf; delete uf_epl_sub_iter; delete df; 
+ 				uf_epl_sub_iter=uf_epl->Duplicate();
+ 				uf_epl->Copy(uf_epl_sub_iter);
+ 				if(eplcount>1) delete ug_epl; 
+-				delete Kff;delete pf;
+-				delete df;
+ 				Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);
+ 				ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+@@ -206,6 +203,7 @@
+ 		hydrocount++;
+ 		if(hydroconverged)break;
+ 	}
++	
+ 	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_sed);
+ 	if(isefficientlayer)InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_epl);
+ 
+@@ -213,10 +211,8 @@
+ 	delete ug_epl;
+ 	delete ug_sed;
+ 	delete uf_sed;
+-	//	delete uf_epl;
++	delete uf_epl;
+ 	delete uf_sed_sub_iter;
+ 	delete uf_epl_sub_iter;
+-	delete ug_sed_main_iter;
+-	delete ug_epl_main_iter;
+ 	delete dug;
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15409-15410.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15409-15410.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15409-15410.diff	(revision 16134)
@@ -0,0 +1,87 @@
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15409)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15410)
+@@ -50,12 +50,10 @@
+ 	/*Retrieve inputs as the initial state for the non linear iteration*/
+ 	//femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+ 	GetSolutionFromInputsx(&ug_sed, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+-	Reducevectorgtofx(&uf_sed, ug_sed, femmodel->nodes,femmodel->parameters);
+ 	
+ 	if(isefficientlayer) {
+ 		femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
+ 		GetSolutionFromInputsx(&ug_epl, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+-		Reducevectorgtofx(&uf_epl, ug_epl, femmodel->nodes,femmodel->parameters);
+ 	}
+ 
+ 	/*Iteration on the two layers*/
+@@ -63,13 +61,9 @@
+ 		sedcount=1;
+ 		eplcount=1;
+ 		//save pointer to old velocity
+-		delete uf_sed_sub_iter;
+ 		ug_sed_main_iter=ug_sed;
+-		uf_sed_sub_iter=uf_sed;
+ 		if(isefficientlayer){
+-			delete uf_epl_sub_iter;
+ 			ug_epl_main_iter=ug_epl;
+-			uf_epl_sub_iter=uf_epl;
+ 		}
+ 
+ 		femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+@@ -85,12 +79,13 @@
+ 			femmodel->SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax);
+ 			CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum);
+ 			Reduceloadx(pf,Kfs,ys); delete Kfs;
+-			if(sedcount>1)delete uf_sed;
++			delete uf_sed;
+ 			Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters);
+-			delete Kff; delete pf; delete uf_sed_sub_iter; delete df;
++			delete Kff; delete pf; delete df;
++			if(sedcount>1) delete uf_sed_sub_iter;
+ 			uf_sed_sub_iter=uf_sed->Duplicate();
+ 			uf_sed->Copy(uf_sed_sub_iter);
+-			if(sedcount>1)delete ug_sed; /*Not on first time to avoid deleting ug_sed_main_iter*/
++			if(sedcount>1) delete ug_sed; /*Not on first time to avoid deleting ug_sed_main_iter*/
+ 			Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 			InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);
+ 			ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+@@ -128,9 +123,10 @@
+ 				femmodel->SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL);
+ 				CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
+ 				Reduceloadx(pf,Kfs,ys); delete Kfs;
+-				if(sedcount>1) delete uf_epl;
++				delete uf_epl;
+ 				Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters);
+-				delete Kff; delete pf; delete uf_epl_sub_iter; delete df; 
++				delete Kff; delete pf; delete df;
++				if(eplcount>1) delete uf_epl_sub_iter; 
+ 				uf_epl_sub_iter=uf_epl->Duplicate();
+ 				uf_epl->Copy(uf_epl_sub_iter);
+ 				if(eplcount>1) delete ug_epl; 
+@@ -162,7 +158,9 @@
+ 			dug=ug_sed->Duplicate(); _assert_(dug);
+ 			ug_sed_main_iter->Copy(dug);	
+ 			dug->AYPX(ug_sed,-1.0);
+-			ndu_sed=dug->Norm(NORM_TWO); nu_sed=ug_sed_main_iter->Norm(NORM_TWO);
++			ndu_sed=dug->Norm(NORM_TWO); 
++			delete dug;
++			nu_sed=ug_sed_main_iter->Norm(NORM_TWO);
+ 			if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("Sed convergence criterion is NaN!");
+ 			if (!xIsNan<IssmDouble>(eps_hyd)){
+ 				if (!isefficientlayer){
+@@ -180,6 +178,7 @@
+ 					ug_epl_main_iter->Copy(dug);_assert_(ug_epl_main_iter); 
+ 					dug->AYPX(ug_epl,-1.0);
+ 					ndu_epl=dug->Norm(NORM_TWO); 
++					delete dug;
+ 					nu_epl=ug_epl_main_iter->Norm(NORM_TWO);
+ 
+ 					if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("EPL convergence criterion is NaN!");
+@@ -214,5 +213,5 @@
+ 	delete uf_epl;
+ 	delete uf_sed_sub_iter;
+ 	delete uf_epl_sub_iter;
+-	delete dug;
++	//delete dug;
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15410-15411.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15410-15411.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15410-15411.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15410)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15411)
+@@ -55,8 +55,9 @@
+ 		WriteData(fid,'object',self,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexonwater','format','DoubleMat','mattype',1)
+-		icelevelset=numpy.ones(md.mesh.numberofvertices,int)
+-		pos=md.diagnostic.icefront[:,:-2]
+-		icelevelset[pos[:]-1]=0;
++		icelevelset=numpy.ones(md.mesh.numberofvertices,float)
++		if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.icefront))):
++			pos=md.diagnostic.icefront[:,:-2]
++			icelevelset[pos[:]-1]=0;
+ 		WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum())
+ 	# }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15411-15412.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15411-15412.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15411-15412.diff	(revision 16134)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15411)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15412)
+@@ -61,9 +61,11 @@
+ 		sedcount=1;
+ 		eplcount=1;
+ 		//save pointer to old velocity
+-		ug_sed_main_iter=ug_sed;
++		ug_sed_main_iter=ug_sed->Duplicate();
++		ug_sed->Copy(ug_sed_main_iter);
+ 		if(isefficientlayer){
+-			ug_epl_main_iter=ug_epl;
++			ug_epl_main_iter=ug_epl->Duplicate();
++			ug_epl->Copy(ug_epl_main_iter);
+ 		}
+ 
+ 		femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+@@ -82,10 +84,10 @@
+ 			delete uf_sed;
+ 			Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters);
+ 			delete Kff; delete pf; delete df;
+-			if(sedcount>1) delete uf_sed_sub_iter;
++			delete uf_sed_sub_iter;
+ 			uf_sed_sub_iter=uf_sed->Duplicate();
+ 			uf_sed->Copy(uf_sed_sub_iter);
+-			if(sedcount>1) delete ug_sed; /*Not on first time to avoid deleting ug_sed_main_iter*/
++			delete ug_sed;
+ 			Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 			InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);
+ 			ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+@@ -126,10 +128,10 @@
+ 				delete uf_epl;
+ 				Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters);
+ 				delete Kff; delete pf; delete df;
+-				if(eplcount>1) delete uf_epl_sub_iter; 
++				delete uf_epl_sub_iter; 
+ 				uf_epl_sub_iter=uf_epl->Duplicate();
+ 				uf_epl->Copy(uf_epl_sub_iter);
+-				if(eplcount>1) delete ug_epl; 
++				delete ug_epl; 
+ 				Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);
+ 				ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+@@ -161,6 +163,7 @@
+ 			ndu_sed=dug->Norm(NORM_TWO); 
+ 			delete dug;
+ 			nu_sed=ug_sed_main_iter->Norm(NORM_TWO);
++			delete ug_sed_main_iter;
+ 			if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("Sed convergence criterion is NaN!");
+ 			if (!xIsNan<IssmDouble>(eps_hyd)){
+ 				if (!isefficientlayer){
+@@ -180,7 +183,7 @@
+ 					ndu_epl=dug->Norm(NORM_TWO); 
+ 					delete dug;
+ 					nu_epl=ug_epl_main_iter->Norm(NORM_TWO);
+-
++					delete ug_epl_main_iter;
+ 					if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("EPL convergence criterion is NaN!");
+ 					if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/
+ 					if ((ndu_epl/nu_epl)<eps_hyd && (ndu_sed/nu_sed)<(eps_hyd*10)){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15412-15413.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15412-15413.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15412-15413.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15412)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15413)
+@@ -54,7 +54,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','vertexonwater','format','DoubleMat','mattype',1);
+ 			icelevelset=ones(md.mesh.numberofvertices,1);
+-			pos=md.diagnostic.icefront(:,1:end-1);
++			pos=md.diagnostic.icefront(:,1:end-2);
+ 			icelevelset(pos(:))=0;
+ 			WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum());
+ 		end % }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15413-15414.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15413-15414.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15413-15414.diff	(revision 16134)
@@ -0,0 +1,275 @@
+Index: ../trunk-jpl/src/m/classes/hydrologydc.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 15413)
++++ ../trunk-jpl/src/m/classes/hydrologydc.m	(revision 15414)
+@@ -28,7 +28,8 @@
+ 		epl_transmitivity        = 0;
+   end
+ 	methods
+-		function obj = hydrologydc(varargin) % {{{ 
++		% {{{ function obj = hydrologydc(varargin) 
++		function obj = hydrologydc(varargin) 
+ 			switch nargin
+ 				case 0
+ 					obj=setdefaultparameters(obj);
+Index: ../trunk-jpl/src/m/contrib/paraview/writeVTKcell.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/paraview/writeVTKcell.m	(revision 15413)
++++ ../trunk-jpl/src/m/contrib/paraview/writeVTKcell.m	(revision 15414)
+@@ -1,122 +0,0 @@
+-function writeVTKcell(filename,model,Solution)
+-% vtk export
+-% function writeVTKcell(filename,model,Solution)
+-% creates a vtk-file filename.vtk containing simplicial mesh data
+-% (only work for triangle now)
+-% and additional cell data
+-%
+-% input: filename   destination 
+-%                   (string)
+-%------------------------------------------------------------------
+-%        model      this is md 
+-%------------------------------------------------------------------
+-%        Solution   Put on the enum of the solution you want 
+-%	                  to plot         
+-% Basile de Fleurian, modified from:
+-% (c) Daniel Peterseim, 2009-11-07
+-
+-[path,name,ext]=fileparts(filename);
+-separator=filesep;
+-mkdir(filename);
+-
+-points=[model.mesh.x model.mesh.y model.mesh.z];
+-[num_of_points,dim]=size(points);
+-[num_of_elt]=size(model.mesh.elements,1);
+-[point_per_elt]=size(model.mesh.elements,2);
+-sol_enum=EnumToString(Solution);
+-
+-sol_struct=model.results.(sol_enum);
+-
+-%Select the type of element function of the number of nodes per elements
+-if point_per_elt==3;
+-	celltype=5; %triangles
+-elseif point_per_elt==6;
+-	celltype=13; %wedges
+-else
+-	error('Your Element definition is not taken into account \n');
+-end
+-
+-%looking for multiple time steps
+-num_of_timesteps=size(sol_struct,2);
+-
+-%getting the number of fields in the solution
+-fieldnames=fields(sol_struct(1));
+-num_of_fields=length(fieldnames);
+-
+-if num_of_timesteps==1; %just one timestep only write one file
+-
+-	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk'),'w+');
+-	fprintf(FID,'# vtk DataFile Version 2.0 \n');
+-	fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
+-	fprintf(FID,'ASCII \n');
+-	fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
+-
+-	fprintf(FID,'POINTS %d float\n',num_of_points);
+-	s='%f %f %f \n';
+-	P=[points zeros(num_of_points,3-dim)];
+-	fprintf(FID,s,P');
+-
+-	fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
+-	s='%d';
+-	for k=1:point_per_elt
+-    s=horzcat(s,{' %d'});
+-  end
+-	s=cell2mat(horzcat(s,{'\n'}));
+-	fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
+-
+-	fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
+-	s='%d\n';
+-	fprintf(FID,s,celltype*ones(num_of_elt,1));
+-
+-	%check which field is a real result and print	
+-	fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
+-	for j=1:num_of_fields
+-
+-		if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
+-			fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
+-			fprintf(FID,'LOOKUP_TABLE default\n');
+-			s='%e\n';
+-			fprintf(FID,s,sol_struct.(fieldnames{j}));
+-	  end
+-  end
+-		fclose(FID);
+-else
+-	for i=1:num_of_timesteps;
+-		timestep=sol_struct(i).step;
+-		FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
+-		fprintf(FID,'# vtk DataFile Version 2.0 \n');
+-		fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
+-		fprintf(FID,'ASCII \n');
+-		fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
+-
+-		fprintf(FID,'POINTS %d float\n',num_of_points);
+-		s='%f %f %f \n';
+-		P=[points zeros(num_of_points,3-dim)];
+-		fprintf(FID,s,P');
+-
+-		fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
+-		s='%d';
+-		for k=1:point_per_elt
+-			s=horzcat(s,{' %d'});
+-  	end
+-		s=cell2mat(horzcat(s,{'\n'}));
+-		fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
+-
+-		fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
+-		s='%d\n';
+-		fprintf(FID,s,celltype*ones(num_of_elt,1));
+-
+-		%check which field is a real result and print
+-		fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
+-		for j=1:num_of_fields
+-
+-			if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
+-				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
+-				fprintf(FID,'LOOKUP_TABLE default\n');
+-				s='%e\n';
+-				fprintf(FID,s,sol_struct(i).(fieldnames{j}));
+-	    end		
+-    end 
+-		fclose(FID);
+-  end
+-end
+Index: ../trunk-jpl/src/m/contrib/paraview/exportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 0)
++++ ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 15414)
+@@ -0,0 +1,129 @@
++function exportVTK(filename,model,Solution)
++% vtk export
++% function exportVTK(filename,model,Solution)
++% creates a directory with the vtk files for you simulation
++% (only work for triangle and wedges based on their number of nodes)
++% and additional cell data
++%
++% input: filename   destination 
++%                   (string)
++%------------------------------------------------------------------
++%        model      this is md 
++%------------------------------------------------------------------
++%        Solution   Put on the enum of the solution you want 
++%	                  to plot         
++% Basile de Fleurian:
++
++[path,name,ext]=fileparts(filename);
++separator=filesep;
++mkdir(filename);
++
++points=[model.mesh.x model.mesh.y model.mesh.z];
++[num_of_points,dim]=size(points);
++[num_of_elt]=size(model.mesh.elements,1);
++[point_per_elt]=size(model.mesh.elements,2);
++sol_enum=EnumToString(Solution);
++
++sol_struct=model.results.(sol_enum);
++
++%Select the type of element function of the number of nodes per elements
++if point_per_elt==3;
++	celltype=5; %triangles
++elseif point_per_elt==6;
++	celltype=13; %wedges
++else
++	error('Your Element definition is not taken into account \n');
++end
++
++%looking for multiple time steps
++num_of_timesteps=size(sol_struct,2);
++
++%getting the number of fields in the solution
++fieldnames=fields(sol_struct(1));
++num_of_fields=length(fieldnames);
++
++if num_of_timesteps==1; %just one timestep only write one file
++
++	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk'),'w+');
++	fprintf(FID,'# vtk DataFile Version 2.0 \n');
++	fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
++	fprintf(FID,'ASCII \n');
++	fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
++
++	fprintf(FID,'POINTS %d float\n',num_of_points);
++	if(dim==3);
++		s='%f %f %f \n';
++	elseif(dim==2);
++		s='%f %f \n';
++  end
++	P=[points zeros(num_of_points,3-dim)];
++	fprintf(FID,s,P');
++
++	fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
++	s='%d';
++	for k=1:point_per_elt
++    s=horzcat(s,{' %d'});
++  end
++	s=cell2mat(horzcat(s,{'\n'}));
++	fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
++
++	fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
++	s='%d\n';
++	fprintf(FID,s,celltype*ones(num_of_elt,1));
++
++	%check which field is a real result and print	
++	fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
++	for j=1:num_of_fields
++
++		if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
++			fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
++			fprintf(FID,'LOOKUP_TABLE default\n');
++			s='%e\n';
++			fprintf(FID,s,sol_struct.(fieldnames{j}));
++	  end
++  end
++		fclose(FID);
++else
++	for i=1:num_of_timesteps;
++		timestep=sol_struct(i).step;
++		FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
++		fprintf(FID,'# vtk DataFile Version 2.0 \n');
++		fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
++		fprintf(FID,'ASCII \n');
++		fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
++
++		fprintf(FID,'POINTS %d float\n',num_of_points);
++		if(dim==3);
++			s='%f %f %f \n';
++		elseif(dim==2);
++			s='%f %f \n';
++   end
++		P=[points zeros(num_of_points,3-dim)];
++		fprintf(FID,s,P');
++
++		fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
++		s='%d';
++		for k=1:point_per_elt
++			s=horzcat(s,{' %d'});
++  	end
++		s=cell2mat(horzcat(s,{'\n'}));
++		fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
++
++		fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
++		s='%d\n';
++		fprintf(FID,s,celltype*ones(num_of_elt,1));
++
++		%check which field is a real result and print
++		fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
++		for j=1:num_of_fields
++
++			if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
++				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
++				fprintf(FID,'LOOKUP_TABLE default\n');
++				s='%e\n';
++				fprintf(FID,s,sol_struct(i).(fieldnames{j}));
++	    end		
++    end 
++		fclose(FID);
++  end
++end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15414-15415.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15414-15415.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15414-15415.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15414)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15415)
+@@ -105,7 +105,7 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
++	iomodel->DeleteData(7,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pelements=elements;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15415-15416.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15415-15416.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15415-15416.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/scripts/tai
+===================================================================
+--- ../trunk-jpl/scripts/tai	(revision 15415)
++++ ../trunk-jpl/scripts/tai	(revision 15416)
+@@ -1,4 +1,8 @@
+ #!/bin/bash
++if [ ! -z $EXECUTION_DIR ];
++then
++	EXECUTION_DIR=$ISSM_DIR/execution
++fi
+ 
+ cd $EXECUTION_DIR
+ DIR=$(ls -lrtd *"/" | awk '{line= $0} END {print line}' | awk '{printf("%s\n",$9);}')
+Index: ../trunk-jpl/scripts/vil
+===================================================================
+--- ../trunk-jpl/scripts/vil	(revision 15415)
++++ ../trunk-jpl/scripts/vil	(revision 15416)
+@@ -1,5 +1,4 @@
+ #!/bin/bash
+-
+ if [ ! -z $EXECUTION_DIR ];
+ then
+ 	EXECUTION_DIR=$ISSM_DIR/execution
Index: /issm/oecreview/Archive/15392-16133/ISSM-15416-15417.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15416-15417.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15416-15417.diff	(revision 16134)
@@ -0,0 +1,2504 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15416)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15417)
+@@ -369,7 +369,7 @@
+ 	PengridEnum,
+ 	PenpairEnum,
+ 	PentaEnum,
+-	PentaP1InputEnum,
++	PentaInputEnum,
+ 	ProfilerEnum,
+ 	MatrixParamEnum,
+ 	NodeSIdEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15417)
+@@ -369,7 +369,7 @@
+ 		case PengridEnum : return "Pengrid";
+ 		case PenpairEnum : return "Penpair";
+ 		case PentaEnum : return "Penta";
+-		case PentaP1InputEnum : return "PentaP1Input";
++		case PentaInputEnum : return "PentaInput";
+ 		case ProfilerEnum : return "Profiler";
+ 		case MatrixParamEnum : return "MatrixParam";
+ 		case NodeSIdEnum : return "NodeSId";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15417)
+@@ -375,7 +375,7 @@
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+-	      else if (strcmp(name,"PentaP1Input")==0) return PentaP1InputEnum;
++	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15416)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15417)
+@@ -532,8 +532,8 @@
+ 				     ./classes/gauss/GaussPenta.cpp\
+ 				     ./classes/ElementResults/PentaP1ElementResult.h\
+ 				     ./classes/ElementResults/PentaP1ElementResult.cpp\
+-				     ./classes/Inputs/PentaP1Input.h\
+-				     ./classes/Inputs/PentaP1Input.cpp\
++				     ./classes/Inputs/PentaInput.h\
++				     ./classes/Inputs/PentaInput.cpp\
+ 				     ./classes/Elements/Penta.h\
+ 				     ./classes/Elements/Penta.cpp\
+ 				     ./classes/Elements/PentaRef.h\
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15417)
+@@ -816,19 +816,19 @@
+ 		/*Get B*/
+ 		if (iomodel->Data(MaterialsRheologyBEnum)) {
+ 			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
+-			this->inputs->AddInput(new PentaP1Input(MaterialsRheologyBEnum,nodeinputs));
++			this->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Get n*/
+ 		if (iomodel->Data(MaterialsRheologyNEnum)) {
+ 			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyNEnum)[index];
+-			this->inputs->AddInput(new PentaP1Input(MaterialsRheologyNEnum,nodeinputs));
++			this->inputs->AddInput(new PentaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Get Z*/
+ 		if (iomodel->Data(MaterialsRheologyZEnum)) {
+ 			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
+-			this->inputs->AddInput(new PentaP1Input(MaterialsRheologyZEnum,nodeinputs));
++			this->inputs->AddInput(new PentaInput(MaterialsRheologyZEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Control Inputs*/
+@@ -842,7 +842,7 @@
+ 							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 					case MaterialsRheologyZbarEnum:
+@@ -851,7 +851,7 @@
+ 							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyZEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(MaterialsRheologyZEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 				}
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15417)
+@@ -13,7 +13,7 @@
+ #include "../Inputs/Input.h"
+ #include "../Inputs/Inputs.h"
+ #include "../Inputs/TriaInput.h"
+-#include "../Inputs/PentaP1Input.h"
++#include "../Inputs/PentaInput.h"
+ #include "../Inputs/ControlInput.h"
+ #include "../Elements/Element.h"
+ #include "../Elements/Tria.h"
+@@ -570,7 +570,7 @@
+ 				case PentaEnum: {
+ 					IssmDouble valuesp[6];
+ 					for (int i=0;i<6;i++) valuesp[i]=vector[((Penta*)element)->vertices[i]->Sid()]; //use sid list, to index into serial oriented vector
+-					this->inputs->AddInput(new PentaP1Input(name,valuesp));
++					this->inputs->AddInput(new PentaInput(name,valuesp,P1Enum));
+ 					return;
+ 				}
+ 			  	#endif
+@@ -636,7 +636,7 @@
+ 				case PentaEnum:{
+ 					IssmDouble valuesp[6];
+ 					for (int i=0;i<6;i++) valuesp[i]=vector[((Penta*)element)->vertices[i]->Sid()]; //use sid list, to index into serial oriented vector
+-					this->inputs->AddInput(new PentaP1Input(name,valuesp));
++					this->inputs->AddInput(new PentaInput(name,valuesp,P1Enum));
+ 					return;
+ 				}
+ 				# endif
+@@ -750,13 +750,13 @@
+ 		/*Get B*/
+ 		if (iomodel->Data(MaterialsRheologyBEnum)) {
+ 			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
+-			this->inputs->AddInput(new PentaP1Input(MaterialsRheologyBEnum,nodeinputs));
++			this->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Get n*/
+ 		if (iomodel->Data(MaterialsRheologyNEnum)) {
+ 			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyNEnum)[index];
+-			this->inputs->AddInput(new PentaP1Input(MaterialsRheologyNEnum,nodeinputs));
++			this->inputs->AddInput(new PentaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Control Inputs*/
+@@ -770,7 +770,7 @@
+ 							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 				}
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 15416)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 15417)
+@@ -55,7 +55,7 @@
+ #include "./Inputs/BoolInput.h"
+ #include "./Inputs/DoubleInput.h"
+ #include "./Inputs/IntInput.h"
+-#include "./Inputs/PentaP1Input.h"
++#include "./Inputs/PentaInput.h"
+ #include "./Inputs/TriaInput.h"
+ #include "./Inputs/ControlInput.h"
+ #include "./Inputs/DatasetInput.h"
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15417)
+@@ -181,7 +181,7 @@
+ 	/* Basal friction can only be found at the base of an ice sheet: */
+ 	if (!IsOnBed() || IsFloating()){
+ 		//empty friction: 
+-		this->inputs->AddInput(new PentaP1Input(BasalFrictionEnum,&basalfriction[0]));
++		this->inputs->AddInput(new PentaInput(BasalFrictionEnum,&basalfriction[0],P1Enum));
+ 		return;
+ 	}
+ 
+@@ -208,7 +208,7 @@
+ 	}
+ 
+ 	/*Create PentaVertex input, which will hold the basal friction:*/
+-	this->inputs->AddInput(new PentaP1Input(BasalFrictionEnum,&basalfriction[0]));
++	this->inputs->AddInput(new PentaInput(BasalFrictionEnum,&basalfriction[0],P1Enum));
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -353,12 +353,12 @@
+ 	}
+ 
+ 	/*Add Stress tensor components into inputs*/
+-	this->inputs->AddInput(new PentaP1Input(StressTensorxxEnum,&sigma_xx[0]));
+-	this->inputs->AddInput(new PentaP1Input(StressTensorxyEnum,&sigma_xy[0]));
+-	this->inputs->AddInput(new PentaP1Input(StressTensorxzEnum,&sigma_xz[0]));
+-	this->inputs->AddInput(new PentaP1Input(StressTensoryyEnum,&sigma_yy[0]));
+-	this->inputs->AddInput(new PentaP1Input(StressTensoryzEnum,&sigma_yz[0]));
+-	this->inputs->AddInput(new PentaP1Input(StressTensorzzEnum,&sigma_zz[0]));
++	this->inputs->AddInput(new PentaInput(StressTensorxxEnum,&sigma_xx[0],P1Enum));
++	this->inputs->AddInput(new PentaInput(StressTensorxyEnum,&sigma_xy[0],P1Enum));
++	this->inputs->AddInput(new PentaInput(StressTensorxzEnum,&sigma_xz[0],P1Enum));
++	this->inputs->AddInput(new PentaInput(StressTensoryyEnum,&sigma_yy[0],P1Enum));
++	this->inputs->AddInput(new PentaInput(StressTensoryzEnum,&sigma_yz[0],P1Enum));
++	this->inputs->AddInput(new PentaInput(StressTensorzzEnum,&sigma_zz[0],P1Enum));
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -762,11 +762,11 @@
+ 	TransientInput* NewPrecipitationInput = new TransientInput(SurfaceforcingsPrecipitationEnum);
+ 	for (int imonth=0;imonth<12;imonth++) {
+ 		for(i=0;i<NUMVERTICES;i++) tmp[i]=monthlytemperatures[i][imonth];
+-		PentaP1Input* newmonthinput1 = new PentaP1Input(SurfaceforcingsMonthlytemperaturesEnum,&tmp[0]);
++		PentaInput* newmonthinput1 = new PentaInput(SurfaceforcingsMonthlytemperaturesEnum,&tmp[0],P1Enum);
+ 		NewTemperatureInput->AddTimeInput(newmonthinput1,time+imonth/12.*yts);
+ 
+ 		for(i=0;i<NUMVERTICES;i++) tmp[i]=monthlyprec[i][imonth];
+-		PentaP1Input* newmonthinput2 = new PentaP1Input(SurfaceforcingsPrecipitationEnum,&tmp[0]);
++		PentaInput* newmonthinput2 = new PentaInput(SurfaceforcingsPrecipitationEnum,&tmp[0],P1Enum);
+ 		NewPrecipitationInput->AddTimeInput(newmonthinput2,time+imonth/12.*yts);
+ 	}
+ 
+@@ -1419,7 +1419,7 @@
+ 			for(i=0;i<6;i++)nodeinputs[i]=(IssmDouble)vector[penta_vertex_ids[i]-1];
+ 
+ 			/*create static input: */
+-			this->inputs->AddInput(new PentaP1Input(vector_enum,nodeinputs));
++			this->inputs->AddInput(new PentaInput(vector_enum,nodeinputs,P1Enum));
+ 		}
+ 		else if(M==numberofvertices+1){
+ 			/*create transient input: */
+@@ -1435,7 +1435,7 @@
+ 				time=(IssmDouble)vector[(M-1)*N+t]*yts;
+ 
+ 				if(t==0)transientinput=new TransientInput(vector_enum);
+-				transientinput->AddTimeInput(new PentaP1Input(vector_enum,nodeinputs),time);
++				transientinput->AddTimeInput(new PentaInput(vector_enum,nodeinputs,P1Enum),time);
+ 			}
+ 			this->inputs->AddInput(transientinput);
+ 		}
+@@ -1489,7 +1489,7 @@
+ 	if(!IsOnBed()) return;
+ 
+ 	/*OK, we are on bed. Initialize global inputs as 0*/
+-	total_thickness_input =new PentaP1Input(ThicknessEnum,zeros_list);
++	total_thickness_input =new PentaInput(ThicknessEnum,zeros_list,P1Enum);
+ 
+ 	/*Now follow all the upper element from the base to the surface to integrate the input*/
+ 	penta=this;
+@@ -1507,10 +1507,10 @@
+ 
+ 		/*If first time, initialize total_integrated_input*/
+ 		if (step==0){
+-			if (original_input->ObjectEnum()==PentaP1InputEnum)
+-			 total_integrated_input=new PentaP1Input(average_enum_type,zeros_list);
++			if (original_input->ObjectEnum()==PentaInputEnum)
++			 total_integrated_input=new PentaInput(average_enum_type,zeros_list,P1Enum);
+ 			else if (original_input->ObjectEnum()==ControlInputEnum)
+-			 total_integrated_input=new PentaP1Input(average_enum_type,zeros_list);
++			 total_integrated_input=new PentaInput(average_enum_type,zeros_list,P1Enum);
+ 			else if (original_input->ObjectEnum()==DoubleInputEnum)
+ 			 total_integrated_input=new DoubleInput(average_enum_type,0.0);
+ 			else
+@@ -1523,7 +1523,7 @@
+ 			Helem_list[i]=xyz_list[i+3][2]-xyz_list[i][2];
+ 			Helem_list[i+3]=Helem_list[i];
+ 		}
+-		element_thickness_input=new PentaP1Input(ThicknessEnum,Helem_list);
++		element_thickness_input=new PentaInput(ThicknessEnum,Helem_list,P1Enum);
+ 
+ 		/*Step3: Vertically integrate A COPY of the original*/
+ 		element_integrated_input=(Input*)original_input->copy();
+@@ -1751,7 +1751,7 @@
+ 						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(BalancethicknessThickeningRateEnum)[penta_vertex_ids[j]-1]/yts;
+ 						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 					}
+ 					break;
+ 				case VxEnum:
+@@ -1759,7 +1759,7 @@
+ 						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(VxEnum)[penta_vertex_ids[j]-1]/yts;
+ 						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(VxEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(VxEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 					}
+ 					break;
+ 				case VyEnum:
+@@ -1767,7 +1767,7 @@
+ 						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(VyEnum)[penta_vertex_ids[j]-1]/yts;
+ 						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+ 						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+-						this->inputs->AddInput(new ControlInput(VyEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(VyEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 					}
+ 					break;
+ 				case FrictionCoefficientEnum:
+@@ -1775,7 +1775,7 @@
+ 						for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(FrictionCoefficientEnum)[penta_vertex_ids[j]-1];
+ 						for(j=0;j<6;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
+ 						for(j=0;j<6;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
+-						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaP1InputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 					}
+ 					break;
+ 				case MaterialsRheologyBbarEnum:
+@@ -1829,7 +1829,7 @@
+ 		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
+ 		for(i=0;i<num_cm_responses;i++){
+ 			for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(penta_vertex_ids[j]-1)*num_cm_responses+i];
+-			datasetinput->inputs->AddObject(new PentaP1Input(InversionCostFunctionsCoefficientsEnum,nodeinputs));
++			datasetinput->inputs->AddObject(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Add datasetinput to element inputs*/
+@@ -1982,9 +1982,9 @@
+ 	penta=this;
+ 	for(;;){
+ 		/*Add input to the element: */
+-		penta->inputs->AddInput(new PentaP1Input(ThicknessEnum,newthickness));
+-		penta->inputs->AddInput(new PentaP1Input(SurfaceEnum,newsurface));
+-		penta->inputs->AddInput(new PentaP1Input(BedEnum,newbed));
++		penta->inputs->AddInput(new PentaInput(ThicknessEnum,newthickness,P1Enum));
++		penta->inputs->AddInput(new PentaInput(SurfaceEnum,newsurface,P1Enum));
++		penta->inputs->AddInput(new PentaInput(BedEnum,newbed,P1Enum));
+ 
+ 		/*Stop if we have reached the surface*/
+ 		if (penta->IsOnSurface()) break;
+@@ -2015,7 +2015,7 @@
+ 	}
+ 
+ 	/*Add input to the element: */
+-	this->inputs->AddInput(new PentaP1Input(enum_type,values));
++	this->inputs->AddInput(new PentaInput(enum_type,values,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+@@ -2048,7 +2048,7 @@
+ 	penta=this;
+ 	for(;;){
+ 		/*Add input to the element: */
+-		penta->inputs->AddInput(new PentaP1Input(enum_type,values));
++		penta->inputs->AddInput(new PentaInput(enum_type,values,P1Enum));
+ 
+ 		/*Stop if we have reached the surface*/
+ 		if (penta->IsOnSurface()) break;
+@@ -2078,10 +2078,10 @@
+ 			}
+ 			/*update input*/
+ 			if (name==MaterialsRheologyZEnum || name==MaterialsRheologyZbarEnum){
+-				material->inputs->AddInput(new PentaP1Input(name,values));
++				material->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 			}
+ 			else{
+-				this->inputs->AddInput(new PentaP1Input(name,values));
++				this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 			}
+ 			return;
+ 
+@@ -2091,10 +2091,10 @@
+ 			}
+ 			/*update input*/
+ 			if (name==MaterialsRheologyZEnum || name==MaterialsRheologyZbarEnum){
+-				material->inputs->AddInput(new PentaP1Input(name,values));
++				material->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 			}
+ 			else{
+-				this->inputs->AddInput(new PentaP1Input(name,values));
++				this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 			}
+ 			return;
+ 
+@@ -2108,7 +2108,7 @@
+ 				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+ 			}
+ 			/*Add input to the element: */
+-			this->inputs->AddInput(new PentaP1Input(name,values));
++			this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 
+ 			/*Free ressources:*/
+ 			xDelete<int>(doflist);
+@@ -2120,7 +2120,7 @@
+ 				if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+ 			}
+ 			/*Add input to the element: */
+-			this->inputs->AddInput(new PentaP1Input(name,values));
++			this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 			
+ 			/*Free ressources:*/
+ 			xDelete<int>(doflist);
+@@ -2463,7 +2463,7 @@
+    }
+ 
+    /*Update inputs*/    
+-   this->inputs->AddInput(new PentaP1Input(SurfaceforcingsMassBalanceEnum,&agd[0]));
++   this->inputs->AddInput(new PentaInput(SurfaceforcingsMassBalanceEnum,&agd[0],P1Enum));
+    //this->inputs->AddInput(new PentaVertexInput(ThermalSpcTemperatureEnum,&Tsurf[0]));
+    this->InputExtrude(SurfaceforcingsMassBalanceEnum,ElementEnum);
+ 
+@@ -2799,7 +2799,7 @@
+ 	  smb[i]=smb[i]/rho_ice;      // SMB in m/y ice		
+ 	}  //end of the loop over the vertices
+ 	  /*Update inputs*/
+-	  this->inputs->AddInput(new PentaP1Input(SurfaceforcingsMassBalanceEnum,&smb[0]));
++	  this->inputs->AddInput(new PentaInput(SurfaceforcingsMassBalanceEnum,&smb[0],P1Enum));
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SurfaceArea {{{*/
+@@ -2973,56 +2973,56 @@
+ 			/*default vx,vy and vz: either observation or 0 */
+ 			if(!iomodel->Data(VxEnum)){
+ 				for(i=0;i<6;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new PentaP1Input(VxEnum,nodeinputs));
+-				if(dakota_analysis) this->inputs->AddInput(new PentaP1Input(QmuVxEnum,nodeinputs));
++				this->inputs->AddInput(new PentaInput(VxEnum,nodeinputs,P1Enum));
++				if(dakota_analysis) this->inputs->AddInput(new PentaInput(QmuVxEnum,nodeinputs,P1Enum));
+ 			}
+ 			if(!iomodel->Data(VyEnum)){
+ 				for(i=0;i<6;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new PentaP1Input(VyEnum,nodeinputs));
+-				if(dakota_analysis) this->inputs->AddInput(new PentaP1Input(QmuVyEnum,nodeinputs));
++				this->inputs->AddInput(new PentaInput(VyEnum,nodeinputs,P1Enum));
++				if(dakota_analysis) this->inputs->AddInput(new PentaInput(QmuVyEnum,nodeinputs,P1Enum));
+ 			}
+ 			if(!iomodel->Data(VzEnum)){
+ 				for(i=0;i<6;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new PentaP1Input(VzEnum,nodeinputs));
+-				if(dakota_analysis) this->inputs->AddInput(new PentaP1Input(QmuVzEnum,nodeinputs));
++				this->inputs->AddInput(new PentaInput(VzEnum,nodeinputs,P1Enum));
++				if(dakota_analysis) this->inputs->AddInput(new PentaInput(QmuVzEnum,nodeinputs,P1Enum));
+ 			}
+ 			if(!iomodel->Data(PressureEnum)){
+ 				for(i=0;i<6;i++)nodeinputs[i]=0;
+ 				if(dakota_analysis){
+-					this->inputs->AddInput(new PentaP1Input(PressureEnum,nodeinputs));
+-					this->inputs->AddInput(new PentaP1Input(QmuPressureEnum,nodeinputs));
++					this->inputs->AddInput(new PentaInput(PressureEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(QmuPressureEnum,nodeinputs,P1Enum));
+ 				}
+ 				if(isstokes){
+-					this->inputs->AddInput(new PentaP1Input(PressureEnum,nodeinputs));
+-					this->inputs->AddInput(new PentaP1Input(PressurePicardEnum,nodeinputs));
++					this->inputs->AddInput(new PentaInput(PressureEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(PressurePicardEnum,nodeinputs,P1Enum));
+ 				}
+ 			}
+ 			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==PattynStokesApproximationEnum){
+ 				/*Create VzPattyn and VzStokes Enums*/
+ 				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderstokesEnum)){
+ 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1];
+-					this->inputs->AddInput(new PentaP1Input(VzStokesEnum,nodeinputs));
++					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
+ 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1]);
+-					this->inputs->AddInput(new PentaP1Input(VzPattynEnum,nodeinputs));
++					this->inputs->AddInput(new PentaInput(VzPattynEnum,nodeinputs,P1Enum));
+ 				}
+ 				else{
+ 					for(i=0;i<6;i++)nodeinputs[i]=0;
+-					this->inputs->AddInput(new PentaP1Input(VzStokesEnum,nodeinputs));
+-					this->inputs->AddInput(new PentaP1Input(VzPattynEnum,nodeinputs));
++					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(VzPattynEnum,nodeinputs,P1Enum));
+ 				}
+ 			}
+ 			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==MacAyealStokesApproximationEnum){
+ 				/*Create VzMacAyeal and VzStokes Enums*/
+ 				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderstokesEnum)){
+ 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1];
+-					this->inputs->AddInput(new PentaP1Input(VzStokesEnum,nodeinputs));
++					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
+ 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1]);
+-					this->inputs->AddInput(new PentaP1Input(VzMacAyealEnum,nodeinputs));
++					this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum));
+ 				}
+ 				else{
+ 					for(i=0;i<6;i++)nodeinputs[i]=0;
+-					this->inputs->AddInput(new PentaP1Input(VzStokesEnum,nodeinputs));
+-					this->inputs->AddInput(new PentaP1Input(VzMacAyealEnum,nodeinputs));
++					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum));
+ 				}
+ 			}
+ 			break;
+@@ -3030,22 +3030,22 @@
+ 		case ThermalAnalysisEnum:
+ 			/*Initialize mesh velocity*/
+ 			for(i=0;i<6;i++)nodeinputs[i]=0;
+-			this->inputs->AddInput(new PentaP1Input(VxMeshEnum,nodeinputs));
+-			this->inputs->AddInput(new PentaP1Input(VyMeshEnum,nodeinputs));
+-			this->inputs->AddInput(new PentaP1Input(VzMeshEnum,nodeinputs));
++			this->inputs->AddInput(new PentaInput(VxMeshEnum,nodeinputs,P1Enum));
++			this->inputs->AddInput(new PentaInput(VyMeshEnum,nodeinputs,P1Enum));
++			this->inputs->AddInput(new PentaInput(VzMeshEnum,nodeinputs,P1Enum));
+ 			if(dakota_analysis){
+-				this->inputs->AddInput(new PentaP1Input(QmuVxMeshEnum,nodeinputs));
+-				this->inputs->AddInput(new PentaP1Input(QmuVyMeshEnum,nodeinputs));
+-				this->inputs->AddInput(new PentaP1Input(QmuVzMeshEnum,nodeinputs));
++				this->inputs->AddInput(new PentaInput(QmuVxMeshEnum,nodeinputs,P1Enum));
++				this->inputs->AddInput(new PentaInput(QmuVyMeshEnum,nodeinputs,P1Enum));
++				this->inputs->AddInput(new PentaInput(QmuVzMeshEnum,nodeinputs,P1Enum));
+ 			}
+ 			break;
+ 
+ 		case EnthalpyAnalysisEnum:
+ 			/*Initialize mesh velocity*/
+ 			for(i=0;i<6;i++)nodeinputs[i]=0;
+-			this->inputs->AddInput(new PentaP1Input(VxMeshEnum,nodeinputs));
+-			this->inputs->AddInput(new PentaP1Input(VyMeshEnum,nodeinputs));
+-			this->inputs->AddInput(new PentaP1Input(VzMeshEnum,nodeinputs));
++			this->inputs->AddInput(new PentaInput(VxMeshEnum,nodeinputs,P1Enum));
++			this->inputs->AddInput(new PentaInput(VyMeshEnum,nodeinputs,P1Enum));
++			this->inputs->AddInput(new PentaInput(VzMeshEnum,nodeinputs,P1Enum));
+ 			if (iomodel->Data(TemperatureEnum) && iomodel->Data(WaterfractionEnum) && iomodel->Data(PressureEnum)) {
+ 				for(i=0;i<6;i++){
+ 					if(iomodel->Data(TemperatureEnum)[penta_vertex_ids[i]-1] < meltingpoint-beta*iomodel->Data(PressureEnum)[penta_vertex_ids[i]-1]){
+@@ -3055,7 +3055,7 @@
+ 					 (meltingpoint-beta*iomodel->Data(PressureEnum)[penta_vertex_ids[i]-1]-referencetemperature)
+ 						+latentheat*iomodel->Data(WaterfractionEnum)[penta_vertex_ids[i]-1];
+ 				}
+-				this->inputs->AddInput(new PentaP1Input(EnthalpyEnum,nodeinputs));
++				this->inputs->AddInput(new PentaInput(EnthalpyEnum,nodeinputs,P1Enum));
+ 			}
+ 			else _error_("temperature and waterfraction required for the enthalpy solution");
+ 			break;
+@@ -3113,7 +3113,7 @@
+ 	}
+ 
+ 	/*Create PentaVertex input, which will hold the basal friction:*/
+-	this->inputs->AddInput(new PentaP1Input(ViscousHeatingEnum,&viscousheating[0]));
++	this->inputs->AddInput(new PentaInput(ViscousHeatingEnum,&viscousheating[0],P1Enum));
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -4398,7 +4398,7 @@
+ 
+ 	this->inputs->GetInputValue(&converged,ConvergedEnum);
+ 	if(converged){
+-		this->inputs->AddInput(new PentaP1Input(TemperatureEnum,values));
++		this->inputs->AddInput(new PentaInput(TemperatureEnum,values,P1Enum));
+ 
+ 		/*Update Rheology only if converged (we must make sure that the temperature is below melting point
+ 		 * otherwise the rheology could be negative*/
+@@ -4410,7 +4410,7 @@
+ 			case PatersonEnum:
+ 				B_average=Paterson((values[0]+values[1]+values[2]+values[3]+values[4]+values[5])/6.0);
+ 				for(i=0;i<numdof;i++) B[i]=B_average;
+-				this->material->inputs->AddInput(new PentaP1Input(MaterialsRheologyBEnum,B));
++				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
+ 				break;
+ 			case ArrheniusEnum:
+ 				surface_input->GetInputAverage(&s_average);
+@@ -4418,7 +4418,7 @@
+ 							s_average-((xyz_list[0][2]+xyz_list[1][2]+xyz_list[2][2]+xyz_list[3][2]+xyz_list[4][2]+xyz_list[5][2])/6.0),
+ 							material->GetN());
+ 				for(i=0;i<numdof;i++) B[i]=B_average;
+-				this->material->inputs->AddInput(new PentaP1Input(MaterialsRheologyBEnum,B));
++				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
+ 				break;
+ 			default:
+ 				_error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet");
+@@ -4426,7 +4426,7 @@
+ 		}
+ 	}
+ 	else{
+-		this->inputs->AddInput(new PentaP1Input(TemperaturePicardEnum,values));
++		this->inputs->AddInput(new PentaInput(TemperaturePicardEnum,values,P1Enum));
+ 	}
+ 
+ 	/*Free ressources:*/
+@@ -4474,9 +4474,9 @@
+ 			//if(waterfraction[i]>1) _error_("Water fraction >1 found in solution vector");
+ 		}
+ 
+-		this->inputs->AddInput(new PentaP1Input(EnthalpyEnum,values));
+-		this->inputs->AddInput(new PentaP1Input(WaterfractionEnum,waterfraction));
+-		this->inputs->AddInput(new PentaP1Input(TemperatureEnum,temperatures));
++		this->inputs->AddInput(new PentaInput(EnthalpyEnum,values,P1Enum));
++		this->inputs->AddInput(new PentaInput(WaterfractionEnum,waterfraction,P1Enum));
++		this->inputs->AddInput(new PentaInput(TemperatureEnum,temperatures,P1Enum));
+ 
+ 		/*Update Rheology only if converged (we must make sure that the temperature is below melting point
+ 		 * otherwise the rheology could be negative*/
+@@ -4488,7 +4488,7 @@
+ 			case PatersonEnum:
+ 				B_average=Paterson((temperatures[0]+temperatures[1]+temperatures[2]+temperatures[3]+temperatures[4]+temperatures[5])/6.0);
+ 				for(i=0;i<numdof;i++) B[i]=B_average;
+-				this->material->inputs->AddInput(new PentaP1Input(MaterialsRheologyBEnum,B));
++				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
+ 				break;
+ 			case ArrheniusEnum:
+ 				surface_input->GetInputAverage(&s_average);
+@@ -4496,7 +4496,7 @@
+ 							s_average-((xyz_list[0][2]+xyz_list[1][2]+xyz_list[2][2]+xyz_list[3][2]+xyz_list[4][2]+xyz_list[5][2])/6.0),
+ 							material->GetN());
+ 				for(i=0;i<numdof;i++) B[i]=B_average;
+-				this->material->inputs->AddInput(new PentaP1Input(MaterialsRheologyBEnum,B));
++				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
+ 				break;
+ 			default:
+ 				_error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet");
+@@ -4504,7 +4504,7 @@
+ 		}
+ 	}
+ 	else{
+-		this->inputs->AddInput(new PentaP1Input(EnthalpyPicardEnum,values));
++		this->inputs->AddInput(new PentaInput(EnthalpyPicardEnum,values,P1Enum));
+ 	}
+ 
+ 	/*Free ressources:*/
+@@ -4580,7 +4580,7 @@
+ 
+ 	GradientIndexing(&vertexpidlist[0],control_index);
+ 	for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[vertexpidlist[i]];
+-	grad_input=new PentaP1Input(GradientEnum,grad_list);
++	grad_input=new PentaInput(GradientEnum,grad_list,P1Enum);
+ 	((ControlInput*)input)->SetGradient(grad_input);
+ 
+ }/*}}}*/
+@@ -5254,10 +5254,10 @@
+ 	}
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new PentaP1Input(AdjointxEnum,lambdax));
+-	this->inputs->AddInput(new PentaP1Input(AdjointyEnum,lambday));
+-	this->inputs->AddInput(new PentaP1Input(AdjointzEnum,lambdaz));
+-	this->inputs->AddInput(new PentaP1Input(AdjointpEnum,lambdap));
++	this->inputs->AddInput(new PentaInput(AdjointxEnum,lambdax,P1Enum));
++	this->inputs->AddInput(new PentaInput(AdjointyEnum,lambday,P1Enum));
++	this->inputs->AddInput(new PentaInput(AdjointzEnum,lambdaz,P1Enum));
++	this->inputs->AddInput(new PentaInput(AdjointpEnum,lambdap,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+@@ -5291,8 +5291,8 @@
+ 	}
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new PentaP1Input(AdjointxEnum,lambdax));
+-	this->inputs->AddInput(new PentaP1Input(AdjointyEnum,lambday));
++	this->inputs->AddInput(new PentaInput(AdjointxEnum,lambdax,P1Enum));
++	this->inputs->AddInput(new PentaInput(AdjointyEnum,lambday,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+@@ -5582,7 +5582,7 @@
+ 	for (int i=0;i<NUMVERTICES;i++){
+ 		values[i]=vector[vertexpidlist[i]];
+ 	}
+-	new_input = new PentaP1Input(control_enum,values);
++	new_input = new PentaInput(control_enum,values,P1Enum);
+ 
+ 	if(control_enum==MaterialsRheologyBbarEnum){
+ 		input=(Input*)material->inputs->GetInput(control_enum); _assert_(input);
+@@ -5613,7 +5613,7 @@
+ 
+ 		case VertexEnum:
+ 
+-			/*New PentaP1Input*/
++			/*New PentaInput*/
+ 			IssmDouble values[6];
+ 
+ 			/*Get values on the 6 vertices*/
+@@ -5686,14 +5686,14 @@
+ 					}
+ 
+ 					/*Add new inputs: */
+-					this->inputs->AddInput(new PentaP1Input(ThicknessEnum,thickness));
+-					this->inputs->AddInput(new PentaP1Input(BedEnum,bed));
+-					this->inputs->AddInput(new PentaP1Input(SurfaceEnum,surface));
++					this->inputs->AddInput(new PentaInput(ThicknessEnum,thickness,P1Enum));
++					this->inputs->AddInput(new PentaInput(BedEnum,bed,P1Enum));
++					this->inputs->AddInput(new PentaInput(SurfaceEnum,surface,P1Enum));
+ 
+ 					/*}}}*/
+ 					break;
+ 				default:
+-					this->inputs->AddInput(new PentaP1Input(name,values));
++					this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 			}
+ 			break;
+ 
+@@ -5746,7 +5746,7 @@
+ 				time=(IssmDouble)matrix[(nrows-1)*ncols+t]*yts;
+ 
+ 				if(t==0) transientinput=new TransientInput(name);
+-				transientinput->AddTimeInput(new PentaP1Input(name,values),time);
++				transientinput->AddTimeInput(new PentaInput(name,values,P1Enum),time);
+ 				transientinput->Configure(parameters);
+ 			}
+ 			this->inputs->AddInput(transientinput);
+@@ -8438,10 +8438,10 @@
+ 		penta->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 
+ 		/*Add vx and vy as inputs to the tria element: */
+-		penta->inputs->AddInput(new PentaP1Input(VxEnum,vx));
+-		penta->inputs->AddInput(new PentaP1Input(VyEnum,vy));
+-		penta->inputs->AddInput(new PentaP1Input(VelEnum,vel));
+-		penta->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++		penta->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
++		penta->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
++		penta->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
++		penta->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 		/*Stop if we have reached the surface*/
+ 		if (penta->IsOnSurface()) break;
+@@ -8528,10 +8528,10 @@
+ 	this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new PentaP1Input(VxEnum,vx));
+-	this->inputs->AddInput(new PentaP1Input(VyEnum,vy));
+-	this->inputs->AddInput(new PentaP1Input(VelEnum,vel));
+-	this->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++	this->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
++	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
++	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
++	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflistp);
+@@ -8603,7 +8603,7 @@
+ 	/*Get Vz*/
+ 	Input* vzmacayeal_input=inputs->GetInput(VzMacAyealEnum);
+ 	if (vzmacayeal_input){
+-		if (vzmacayeal_input->ObjectEnum()!=PentaP1InputEnum){
++		if (vzmacayeal_input->ObjectEnum()!=PentaInputEnum){
+ 			_error_("Cannot compute Vel as VzMacAyeal is of type " << EnumToStringx(vzmacayeal_input->ObjectEnum()));
+ 		}
+ 		GetInputListOnVertices(&vzmacayeal[0],VzMacAyealEnum);
+@@ -8626,12 +8626,12 @@
+ 	this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new PentaP1Input(VxEnum,vx));
+-	this->inputs->AddInput(new PentaP1Input(VyEnum,vy));
+-	this->inputs->AddInput(new PentaP1Input(VzEnum,vz));
+-	this->inputs->AddInput(new PentaP1Input(VzStokesEnum,vzstokes));
+-	this->inputs->AddInput(new PentaP1Input(VelEnum,vel));
+-	this->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++	this->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
++	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
++	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
++	this->inputs->AddInput(new PentaInput(VzStokesEnum,vzstokes,P1Enum));
++	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
++	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflistm);
+@@ -8703,10 +8703,10 @@
+ 		penta->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 
+ 		/*Add vx and vy as inputs to the tria element: */
+-		penta->inputs->AddInput(new PentaP1Input(VxEnum,vx));
+-		penta->inputs->AddInput(new PentaP1Input(VyEnum,vy));
+-		penta->inputs->AddInput(new PentaP1Input(VelEnum,vel));
+-		penta->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++		penta->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
++		penta->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
++		penta->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
++		penta->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 		/*Stop if we have reached the surface*/
+ 		if (penta->IsOnSurface()) break;
+@@ -8784,10 +8784,10 @@
+ 	this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new PentaP1Input(VxEnum,vx));
+-	this->inputs->AddInput(new PentaP1Input(VyEnum,vy));
+-	this->inputs->AddInput(new PentaP1Input(VelEnum,vel));
+-	this->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++	this->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
++	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
++	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
++	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+@@ -8852,7 +8852,7 @@
+ 	/*Get Vz*/
+ 	Input* vzpattyn_input=inputs->GetInput(VzPattynEnum);
+ 	if (vzpattyn_input){
+-		if (vzpattyn_input->ObjectEnum()!=PentaP1InputEnum){
++		if (vzpattyn_input->ObjectEnum()!=PentaInputEnum){
+ 			_error_("Cannot compute Vel as VzPattyn is of type " << EnumToStringx(vzpattyn_input->ObjectEnum()));
+ 		}
+ 		GetInputListOnVertices(&vzpattyn[0],VzPattynEnum);
+@@ -8875,12 +8875,12 @@
+ 	this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new PentaP1Input(VxEnum,vx));
+-	this->inputs->AddInput(new PentaP1Input(VyEnum,vy));
+-	this->inputs->AddInput(new PentaP1Input(VzEnum,vz));
+-	this->inputs->AddInput(new PentaP1Input(VzStokesEnum,vzstokes));
+-	this->inputs->AddInput(new PentaP1Input(VelEnum,vel));
+-	this->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++	this->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
++	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
++	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
++	this->inputs->AddInput(new PentaInput(VzStokesEnum,vzstokes,P1Enum));
++	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
++	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflistp);
+@@ -8941,10 +8941,10 @@
+ 	this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new PentaP1Input(VxEnum,vx));
+-	this->inputs->AddInput(new PentaP1Input(VyEnum,vy));
+-	this->inputs->AddInput(new PentaP1Input(VelEnum,vel));
+-	this->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++	this->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
++	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
++	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
++	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+@@ -8998,7 +8998,7 @@
+ 	if(approximation==PattynStokesApproximationEnum){
+ 		Input* vzstokes_input=inputs->GetInput(VzStokesEnum);
+ 		if (vzstokes_input){
+-			if (vzstokes_input->ObjectEnum()!=PentaP1InputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));
++			if (vzstokes_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));
+ 			GetInputListOnVertices(&vzstokes[0],VzStokesEnum);
+ 		}
+ 		else _error_("Cannot compute Vz as VzStokes in not present in PattynStokes element");
+@@ -9010,7 +9010,7 @@
+ 	else if(approximation==MacAyealStokesApproximationEnum){
+ 		Input* vzstokes_input=inputs->GetInput(VzStokesEnum);
+ 		if (vzstokes_input){
+-			if (vzstokes_input->ObjectEnum()!=PentaP1InputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));
++			if (vzstokes_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));
+ 			GetInputListOnVertices(&vzstokes[0],VzStokesEnum);
+ 		}
+ 		else _error_("Cannot compute Vz as VzStokes in not present in MacAyealStokes element");
+@@ -9038,16 +9038,16 @@
+ 
+ 	if(approximation!=PattynStokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum){
+ 		this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+-		this->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++		this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 	}
+ 	else if(approximation==PattynStokesApproximationEnum){
+-		this->inputs->AddInput(new PentaP1Input(VzPattynEnum,vzpattyn));
++		this->inputs->AddInput(new PentaInput(VzPattynEnum,vzpattyn,P1Enum));
+ 	}
+ 	else if(approximation==MacAyealStokesApproximationEnum){
+-		this->inputs->AddInput(new PentaP1Input(VzMacAyealEnum,vzmacayeal));
++		this->inputs->AddInput(new PentaInput(VzMacAyealEnum,vzmacayeal,P1Enum));
+ 	}
+-	this->inputs->AddInput(new PentaP1Input(VzEnum,vz));
+-	this->inputs->AddInput(new PentaP1Input(VelEnum,vel));
++	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
++	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+@@ -9104,11 +9104,11 @@
+ 	this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new PentaP1Input(VxEnum,vx));
+-	this->inputs->AddInput(new PentaP1Input(VyEnum,vy));
+-	this->inputs->AddInput(new PentaP1Input(VzEnum,vz));
+-	this->inputs->AddInput(new PentaP1Input(VelEnum,vel));
+-	this->inputs->AddInput(new PentaP1Input(PressureEnum,pressure));
++	this->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
++	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
++	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
++	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
++	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+@@ -9349,8 +9349,8 @@
+ 	penta=this;
+ 	for(;;){
+ 		/*Add input to the element: */
+-		penta->inputs->AddInput(new PentaP1Input(SedimentHeadEnum,values));
+-		penta->inputs->AddInput(new PentaP1Input(SedimentHeadResidualEnum,residual));
++		penta->inputs->AddInput(new PentaInput(SedimentHeadEnum,values,P1Enum));
++		penta->inputs->AddInput(new PentaInput(SedimentHeadResidualEnum,residual,P1Enum));
+ 
+ 		/*Stop if we have reached the surface*/
+ 		if (penta->IsOnSurface()) break;
+@@ -9450,18 +9450,18 @@
+    /*Add basal melting rate if element just ungrounded*/
+ 	if(!this->IsFloating() && floatingelement==true){
+ 		for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
+-		this->inputs->AddInput(new PentaP1Input(BasalforcingsMeltingRateEnum,&melting[0]));
++		this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum,&melting[0],P1Enum));
+ 	} 
+ 
+ 	/*Update inputs*/
+-	this->inputs->AddInput(new PentaP1Input(SurfaceEnum,&s[0]));
+-	this->inputs->AddInput(new PentaP1Input(BedEnum,&b[0]));
++	this->inputs->AddInput(new PentaInput(SurfaceEnum,&s[0],P1Enum));
++	this->inputs->AddInput(new PentaInput(BedEnum,&b[0],P1Enum));
+    this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
+ 
+ 	/*Recalculate phi*/
+ 	if(migration_style==SubelementMigrationEnum){
+ 		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+ba[i]/density;
+-		this->inputs->AddInput(new PentaP1Input(GLlevelsetEnum,&phi[0]));
++		this->inputs->AddInput(new PentaInput(GLlevelsetEnum,&phi[0],P1Enum));
+ 		this->InputExtrude(GLlevelsetEnum,ElementEnum);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp	(revision 15417)
+@@ -1,600 +0,0 @@
+-/*!\file PentaP1Input.c
+- * \brief: implementation of the PentaP1Input object
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../classes.h"
+-#include "../../shared/shared.h"
+-
+-/*PentaP1Input constructors and destructor*/
+-/*FUNCTION PentaP1Input::PentaP1Input(){{{*/
+-PentaP1Input::PentaP1Input(){
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::PentaP1Input(int in_enum_type,IssmDouble* values){{{*/
+-PentaP1Input::PentaP1Input(int in_enum_type,IssmDouble* in_values)
+-		:PentaRef(1)
+-{
+-
+-	/*Set PentaRef*/
+-	this->SetElementType(P1Enum,0);
+-	this->element_type=P1Enum;
+-
+-	enum_type=in_enum_type;
+-	values[0]=in_values[0];
+-	values[1]=in_values[1];
+-	values[2]=in_values[2];
+-	values[3]=in_values[3];
+-	values[4]=in_values[4];
+-	values[5]=in_values[5];
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::~PentaP1Input(){{{*/
+-PentaP1Input::~PentaP1Input(){
+-	return;
+-}
+-/*}}}*/
+-
+-/*Object virtual functions definitions:*/
+-/*FUNCTION PentaP1Input::Echo {{{*/
+-void PentaP1Input::Echo(void){
+-	this->DeepEcho();
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::DeepEcho{{{*/
+-void PentaP1Input::DeepEcho(void){
+-
+-	_printf_("PentaP1Input:\n");
+-	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << " " << this->values[3] << " " << this->values[4] << " " << this->values[5] << "]\n");
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::Id{{{*/
+-int    PentaP1Input::Id(void){ return -1; }
+-/*}}}*/
+-/*FUNCTION PentaP1Input::ObjectEnum{{{*/
+-int PentaP1Input::ObjectEnum(void){
+-
+-	return PentaP1InputEnum;
+-
+-}
+-/*}}}*/
+-
+-/*PentaP1Input management*/
+-/*FUNCTION PentaP1Input::copy{{{*/
+-Object* PentaP1Input::copy() {
+-
+-	return new PentaP1Input(this->enum_type,this->values);
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::InstanceEnum{{{*/
+-int PentaP1Input::InstanceEnum(void){
+-
+-	return this->enum_type;
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::SpawnTriaInput{{{*/
+-Input* PentaP1Input::SpawnTriaInput(int* indices){
+-
+-	/*output*/
+-	TriaInput* outinput=NULL;
+-	IssmDouble newvalues[3];
+-
+-	/*Loop over the new indices*/
+-	for(int i=0;i<3;i++){
+-
+-		/*Check index value*/
+-		_assert_(indices[i]>=0 && indices[i]<6);
+-
+-		/*Assign value to new input*/
+-		newvalues[i]=this->values[indices[i]];
+-	}
+-
+-	/*Create new Tria input*/
+-	outinput=new TriaInput(this->enum_type,&newvalues[0],P1Enum);
+-
+-	/*Assign output*/
+-	return outinput;
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::SpawnResult{{{*/
+-ElementResult* PentaP1Input::SpawnResult(int step, IssmDouble time){
+-
+-	return new PentaP1ElementResult(this->enum_type,this->values,step,time);
+-
+-}
+-/*}}}*/
+-
+-/*Object functions*/
+-/*FUNCTION PentaP1Input::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
+-void PentaP1Input::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){
+-
+-	/*Call PentaRef function*/
+-	PentaRef::GetInputValue(pvalue,&values[0],gauss);
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::GetInputDerivativeValue(IssmDouble* p, IssmDouble* xyz_list, GaussPenta* gauss){{{*/
+-void PentaP1Input::GetInputDerivativeValue(IssmDouble* p, IssmDouble* xyz_list, GaussPenta* gauss){
+-
+-	/*Call PentaRef function*/
+-	PentaRef::GetInputDerivativeValue(p,&values[0],xyz_list,gauss);
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::GetVxStrainRate3d{{{*/
+-void PentaP1Input::GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+-	int i,j;
+-
+-	const int numnodes=6;
+-	const int DOFVELOCITY=3;
+-	IssmDouble B[8][27];
+-	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
+-	IssmDouble velocity[numnodes][DOFVELOCITY];
+-
+-	/*Get B matrix: */
+-	GetBStokes(&B[0][0], xyz_list, gauss);
+-	/*Create a reduced matrix of B to get rid of pressure */
+-	for (i=0;i<6;i++){
+-		for (j=0;j<3;j++){
+-			B_reduced[i][j]=B[i][j];
+-		}
+-		for (j=4;j<7;j++){
+-			B_reduced[i][j-1]=B[i][j];
+-		}
+-		for (j=8;j<11;j++){
+-			B_reduced[i][j-2]=B[i][j];
+-		}
+-		for (j=12;j<15;j++){
+-			B_reduced[i][j-3]=B[i][j];
+-		}
+-		for (j=16;j<19;j++){
+-			B_reduced[i][j-4]=B[i][j];
+-		}
+-		for (j=20;j<23;j++){
+-			B_reduced[i][j-5]=B[i][j];
+-		}
+-	}
+-
+-	/*Here, we are computing the strain rate of (vx,0,0)*/
+-	for(i=0;i<numnodes;i++){
+-		velocity[i][0]=this->values[i];
+-		velocity[i][1]=0.0;
+-		velocity[i][2]=0.0;
+-	}
+-	/*Multiply B by velocity, to get strain rate: */
+-	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvx,0);
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::GetVyStrainRate3d{{{*/
+-void PentaP1Input::GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
+-	int i,j;
+-
+-	const int numnodes=6;
+-	const int DOFVELOCITY=3;
+-	IssmDouble B[8][27];
+-	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
+-	IssmDouble velocity[numnodes][DOFVELOCITY];
+-
+-	/*Get B matrix: */
+-	GetBStokes(&B[0][0], xyz_list, gauss);
+-	/*Create a reduced matrix of B to get rid of pressure */
+-	for (i=0;i<6;i++){
+-		for (j=0;j<3;j++){
+-			B_reduced[i][j]=B[i][j];
+-		}
+-		for (j=4;j<7;j++){
+-			B_reduced[i][j-1]=B[i][j];
+-		}
+-		for (j=8;j<11;j++){
+-			B_reduced[i][j-2]=B[i][j];
+-		}
+-		for (j=12;j<15;j++){
+-			B_reduced[i][j-3]=B[i][j];
+-		}
+-		for (j=16;j<19;j++){
+-			B_reduced[i][j-4]=B[i][j];
+-		}
+-		for (j=20;j<23;j++){
+-			B_reduced[i][j-5]=B[i][j];
+-		}
+-	}
+-
+-	/*Here, we are computing the strain rate of (0,vy,0)*/
+-	for(i=0;i<numnodes;i++){
+-		velocity[i][0]=0.0;
+-		velocity[i][1]=this->values[i];
+-		velocity[i][2]=0.0;
+-	}
+-	/*Multiply B by velocity, to get strain rate: */
+-	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvy,0);
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::GetVzStrainRate3d{{{*/
+-void PentaP1Input::GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){
+-	int i,j;
+-
+-	const int numnodes=6;
+-	const int DOFVELOCITY=3;
+-	IssmDouble B[8][27];
+-	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
+-	IssmDouble velocity[numnodes][DOFVELOCITY];
+-
+-	/*Get B matrix: */
+-	GetBStokes(&B[0][0], xyz_list, gauss);
+-	/*Create a reduced matrix of B to get rid of pressure */
+-	for (i=0;i<6;i++){
+-		for (j=0;j<3;j++){
+-			B_reduced[i][j]=B[i][j];
+-		}
+-		for (j=4;j<7;j++){
+-			B_reduced[i][j-1]=B[i][j];
+-		}
+-		for (j=8;j<11;j++){
+-			B_reduced[i][j-2]=B[i][j];
+-		}
+-		for (j=12;j<15;j++){
+-			B_reduced[i][j-3]=B[i][j];
+-		}
+-		for (j=16;j<19;j++){
+-			B_reduced[i][j-4]=B[i][j];
+-		}
+-		for (j=20;j<23;j++){
+-			B_reduced[i][j-5]=B[i][j];
+-		}
+-	}
+-
+-	/*Here, we are computing the strain rate of (0,0,vz)*/
+-	for(i=0;i<numnodes;i++){
+-		velocity[i][0]=0.0;
+-		velocity[i][1]=0.0;
+-		velocity[i][2]=this->values[i];
+-	}
+-
+-	/*Multiply B by velocity, to get strain rate: */
+-	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvz,0);
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::GetVxStrainRate3dPattyn{{{*/
+-void PentaP1Input::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+-
+-	int i;
+-	const int numnodes=6;
+-	IssmDouble B[5][NDOF2*numnodes];
+-	IssmDouble velocity[numnodes][NDOF2];
+-
+-	/*Get B matrix: */
+-	GetBPattyn(&B[0][0], xyz_list, gauss);
+-
+-	/*Here, we are computing the strain rate of (vx,0)*/
+-	for(i=0;i<numnodes;i++){
+-		velocity[i][0]=this->values[i];
+-		velocity[i][1]=0.0;
+-	}
+-
+-	/*Multiply B by velocity, to get strain rate: */
+-	MatrixMultiply( &B[0][0],5,NDOF2*numnodes,0,
+-				&velocity[0][0],NDOF2*numnodes,1,0,
+-				epsilonvx,0);
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::GetVyStrainRate3dPattyn{{{*/
+-void PentaP1Input::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
+-
+-	int i;
+-	const int numnodes=6;
+-	IssmDouble B[5][NDOF2*numnodes];
+-	IssmDouble velocity[numnodes][NDOF2];
+-
+-	/*Get B matrix: */
+-	GetBPattyn(&B[0][0], xyz_list, gauss);
+-
+-	/*Here, we are computing the strain rate of (0,vy)*/
+-	for(i=0;i<numnodes;i++){
+-		velocity[i][0]=0.0;
+-		velocity[i][1]=this->values[i];
+-	}
+-
+-	/*Multiply B by velocity, to get strain rate: */
+-	MatrixMultiply( &B[0][0],5,NDOF2*numnodes,0,
+-				&velocity[0][0],NDOF2*numnodes,1,0,
+-				epsilonvy,0);
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::ChangeEnum{{{*/
+-void PentaP1Input::ChangeEnum(int newenumtype){
+-	this->enum_type=newenumtype;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::GetInputAverage{{{*/
+-void PentaP1Input::GetInputAverage(IssmDouble* pvalue){
+-	*pvalue=1./6.*(values[0]+values[1]+values[2]+values[3]+values[4]+values[5]);
+-}
+-/*}}}*/
+-
+-/*Intermediary*/
+-/*FUNCTION PentaP1Input::SquareMin{{{*/
+-void PentaP1Input::SquareMin(IssmDouble* psquaremin,Parameters* parameters){
+-
+-	int i;
+-	const int numnodes=6;
+-	IssmDouble valuescopy[numnodes];
+-	IssmDouble squaremin;
+-
+-	/*First,  copy values, to process units if requested: */
+-	for(i=0;i<numnodes;i++)valuescopy[i]=this->values[i];
+-
+-	/*Now, figure out minimum of valuescopy: */
+-	squaremin=pow(valuescopy[0],2);
+-	for(i=1;i<numnodes;i++){
+-		if(pow(valuescopy[i],2)<squaremin)squaremin=pow(valuescopy[i],2);
+-	}
+-	/*Assign output pointers:*/
+-	*psquaremin=squaremin;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::ConstrainMin{{{*/
+-void PentaP1Input::ConstrainMin(IssmDouble minimum){
+-
+-	int i;
+-	const int numnodes=6;
+-
+-	for(i=0;i<numnodes;i++) if (values[i]<minimum) values[i]=minimum;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::InfinityNorm{{{*/
+-IssmDouble PentaP1Input::InfinityNorm(void){
+-
+-	/*Output*/
+-	const int numnodes=6;
+-	IssmDouble norm=0;
+-
+-	for(int i=0;i<numnodes;i++) if(fabs(values[i])>norm) norm=fabs(values[i]);
+-	return norm;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::Max{{{*/
+-IssmDouble PentaP1Input::Max(void){
+-
+-	const int numnodes=6;
+-	IssmDouble    max=values[0];
+-
+-	for(int i=1;i<numnodes;i++){
+-		if(values[i]>max) max=values[i];
+-	}
+-	return max;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::MaxAbs{{{*/
+-IssmDouble PentaP1Input::MaxAbs(void){
+-
+-	const int numnodes=6;
+-	IssmDouble    max=fabs(values[0]);
+-
+-	for(int i=1;i<numnodes;i++){
+-		if(fabs(values[i])>max) max=fabs(values[i]);
+-	}
+-	return max;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::Min{{{*/
+-IssmDouble PentaP1Input::Min(void){
+-
+-	const int numnodes=6;
+-	IssmDouble    min=values[0];
+-
+-	for(int i=1;i<numnodes;i++){
+-		if(values[i]<min) min=values[i];
+-	}
+-	return min;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::MinAbs{{{*/
+-IssmDouble PentaP1Input::MinAbs(void){
+-
+-	const int numnodes=6;
+-	IssmDouble    min=fabs(values[0]);
+-
+-	for(int i=1;i<numnodes;i++){
+-		if(fabs(values[i])<min) min=fabs(values[i]);
+-	}
+-	return min;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::Scale{{{*/
+-void PentaP1Input::Scale(IssmDouble scale_factor){
+-
+-	int i;
+-	const int numnodes=6;
+-
+-	for(i=0;i<numnodes;i++)values[i]=values[i]*scale_factor;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::AXPY{{{*/
+-void PentaP1Input::AXPY(Input* xinput,IssmDouble scalar){
+-
+-	int i;
+-	const int numnodes=6;
+-
+-	/*xinput is of the same type, so cast it: */
+-
+-	/*Carry out the AXPY operation depending on type:*/
+-	switch(xinput->ObjectEnum()){
+-
+-		case PentaP1InputEnum:{
+-			PentaP1Input* cast_input=(PentaP1Input*)xinput;
+-			for(i=0;i<numnodes;i++)this->values[i]=this->values[i]+scalar*(cast_input->values[i]);}
+-			return;
+-		case ControlInputEnum:{
+-			ControlInput* cont_input=(ControlInput*)xinput;
+-			if(cont_input->values->ObjectEnum()!=PentaP1InputEnum) _error_("not supported yet");
+-			PentaP1Input* cast_input=(PentaP1Input*)cont_input->values;
+-			for(i=0;i<numnodes;i++)this->values[i]=this->values[i]+scalar*(cast_input->values[i]);}
+-			return;
+-		default:
+-			_error_("not implemented yet");
+-	}
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::Constrain{{{*/
+-void PentaP1Input::Constrain(IssmDouble cm_min, IssmDouble cm_max){
+-
+-	int i;
+-	const int numnodes=6;
+-
+-	if(!xIsNan<IssmDouble>(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
+-	if(!xIsNan<IssmDouble>(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::Extrude{{{*/
+-void PentaP1Input::Extrude(void){
+-
+-	int i;
+-
+-	/*First 3 values copied on 3 last values*/
+-	for(i=0;i<3;i++) this->values[3+i]=this->values[i];
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::VerticallyIntegrate{{{*/
+-void PentaP1Input::VerticallyIntegrate(Input* thickness_input){
+-
+-	IssmDouble thickness;
+-
+-	/*Check that input provided is a thickness*/
+-	if (thickness_input->InstanceEnum()!=ThicknessEnum) _error_("Input provided is not a Thickness (enum_type is " << EnumToStringx(thickness_input->InstanceEnum()) << ")");
+-
+-	/*vertically integrate depending on type:*/
+-	switch(thickness_input->ObjectEnum()){
+-
+-		case PentaP1InputEnum:{
+-			GaussPenta *gauss=new GaussPenta();
+-			for(int iv=0;iv<3;iv++){
+-				gauss->GaussVertex(iv);
+-				thickness_input->GetInputValue(&thickness,gauss);
+-				this->values[iv]=0.5*(this->values[iv]+this->values[iv+3]) * thickness;
+-				this->values[iv+3]=this->values[iv];
+-			}
+-			delete gauss;
+-			return; }
+-
+-		default:
+-			_error_("not implemented yet");
+-	}
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::PointwiseDivide{{{*/
+-Input* PentaP1Input::PointwiseDivide(Input* inputB){
+-
+-	/*Ouput*/
+-	PentaP1Input* outinput=NULL;
+-
+-	/*Intermediaries*/
+-	PentaP1Input *xinputB  = NULL;
+-	const int     numnodes = 6;
+-	IssmDouble    AdotBvalues[numnodes];
+-
+-	/*Check that inputB is of the same type*/
+-	if (inputB->ObjectEnum()!=PentaP1InputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
+-	xinputB=(PentaP1Input*)inputB;
+-
+-	/*Create point wise sum*/
+-	for(int i=0;i<numnodes;i++){
+-		_assert_(xinputB->values[i]!=0);
+-		AdotBvalues[i]=this->values[i]/xinputB->values[i];
+-	}
+-
+-	/*Create new Penta vertex input (copy of current input)*/
+-	outinput=new PentaP1Input(this->enum_type,&AdotBvalues[0]);
+-
+-	/*Return output pointer*/
+-	return outinput;
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::PointwiseMin{{{*/
+-Input* PentaP1Input::PointwiseMin(Input* inputB){
+-
+-	/*Ouput*/
+-	PentaP1Input* outinput=NULL;
+-
+-	/*Intermediaries*/
+-	int               i;
+-	PentaP1Input *xinputB     = NULL;
+-	const int         numnodes    = 6;
+-	IssmDouble            minvalues[numnodes];
+-
+-	/*Check that inputB is of the same type*/
+-	if (inputB->ObjectEnum()!=PentaP1InputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
+-	xinputB=(PentaP1Input*)inputB;
+-
+-	/*Create point wise min*/
+-	for(i=0;i<numnodes;i++){
+-		if(this->values[i] > xinputB->values[i]) minvalues[i]=xinputB->values[i];
+-		else minvalues[i]=this->values[i];
+-	}
+-
+-	/*Create new Penta vertex input (copy of current input)*/
+-	outinput=new PentaP1Input(this->enum_type,&minvalues[0]);
+-
+-	/*Return output pointer*/
+-	return outinput;
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::PointwiseMax{{{*/
+-Input* PentaP1Input::PointwiseMax(Input* inputB){
+-
+-	/*Ouput*/
+-	PentaP1Input* outinput=NULL;
+-
+-	/*Intermediaries*/
+-	int               i;
+-	PentaP1Input *xinputB     = NULL;
+-	const int         numnodes    = 6;
+-	IssmDouble            maxvalues[numnodes];
+-
+-	/*Check that inputB is of the same type*/
+-	if (inputB->ObjectEnum()!=PentaP1InputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
+-	xinputB=(PentaP1Input*)inputB;
+-
+-	/*Create point wise max*/
+-	for(i=0;i<numnodes;i++){
+-		if(this->values[i] < xinputB->values[i]) maxvalues[i]=xinputB->values[i];
+-		else maxvalues[i]=this->values[i];
+-	}
+-
+-	/*Create new Penta vertex input (copy of current input)*/
+-	outinput=new PentaP1Input(this->enum_type,&maxvalues[0]);
+-
+-	/*Return output pointer*/
+-	return outinput;
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1Input::GetVectorFromInputs{{{*/
+-void PentaP1Input::GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){
+-
+-	const int numvertices=6;
+-	vector->SetValues(numvertices,doflist,this->values,INS_VAL);
+-
+-} /*}}}*/
+-/*FUNCTION PentaP1Input::Configure{{{*/
+-void PentaP1Input::Configure(Parameters* parameters){
+-	/*do nothing: */
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaP1Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaP1Input.h	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaP1Input.h	(revision 15417)
+@@ -1,87 +0,0 @@
+-/*! \file PentaP1Input.h 
+- *  \brief: header file for PentaP1Input object
+- */
+-
+-#ifndef _PENTAP1INPUT_H_
+-#define _PENTAP1INPUT_H_
+-
+-/*Headers:*/
+-/*{{{*/
+-#include "./Input.h"
+-#include "../Elements/PentaRef.h"
+-class GaussTria;
+-class GaussPenta;
+-/*}}}*/
+-
+-class PentaP1Input: public Input, public PentaRef{
+-
+-	public:
+-		/*just hold 6 values for 6 vertices: */
+-		int        enum_type;
+-		IssmDouble values[6];
+-
+-		/*PentaP1Input constructors, destructors: {{{*/
+-		PentaP1Input();
+-		PentaP1Input(int enum_type,IssmDouble* values);
+-		~PentaP1Input();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
+-		void    Echo();
+-		void    DeepEcho();
+-		int     Id();
+-		int     ObjectEnum();
+-		Object *copy();
+-		/*}}}*/
+-		/*PentaP1Input management: {{{*/
+-		int   InstanceEnum();
+-		Input* SpawnTriaInput(int* indices);
+-		Input* PointwiseDivide(Input* inputB);
+-		Input* PointwiseMin(Input* inputB);
+-		Input* PointwiseMax(Input* inputB);
+-		ElementResult* SpawnResult(int step, IssmDouble time);
+-		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+-		void Configure(Parameters* parameters);
+-		/*}}}*/
+-		/*numerics: {{{*/
+-		void GetInputValue(bool* pvalue){_error_("not implemented yet");};
+-		void GetInputValue(int* pvalue){_error_("not implemented yet");};
+-		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");};
+-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
+-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
+-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+-		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
+-		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+-		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetInputAverage(IssmDouble* pvalue);
+-		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
+-		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+-
+-		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+-		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+-		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void ChangeEnum(int newenumtype);
+-
+-		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+-		void ConstrainMin(IssmDouble minimum);
+-		void Scale(IssmDouble scale_factor);
+-		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+-		void AXPY(Input* xinput,IssmDouble scalar);
+-		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
+-		IssmDouble InfinityNorm(void);
+-		IssmDouble Max(void);
+-		IssmDouble MaxAbs(void);
+-		IssmDouble Min(void);
+-		IssmDouble MinAbs(void);
+-		void Extrude(void);
+-		void VerticallyIntegrate(Input* thickness_input);
+-		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+-		/*}}}*/
+-
+-};
+-#endif  /* _PENTAP1INPUT_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 15417)
+@@ -35,11 +35,11 @@
+ 			minvalues  =new TriaInput(enum_type,pmin,P1Enum);
+ 			maxvalues  =new TriaInput(enum_type,pmax,P1Enum);
+ 			break;
+-		case PentaP1InputEnum:
+-			values     =new PentaP1Input(enum_type,pvalues);
+-			savedvalues=new PentaP1Input(enum_type,pvalues);
+-			minvalues  =new PentaP1Input(enum_type,pmin);
+-			maxvalues  =new PentaP1Input(enum_type,pmax);
++		case PentaInputEnum:
++			values     =new PentaInput(enum_type,pvalues,P1Enum);
++			savedvalues=new PentaInput(enum_type,pvalues,P1Enum);
++			minvalues  =new PentaInput(enum_type,pmin,P1Enum);
++			maxvalues  =new PentaInput(enum_type,pmax,P1Enum);
+ 			break;
+ 		default:
+ 			_error_("Input of Enum " << EnumToStringx(enum_input) << " not supported yet by ControlInput");
+@@ -114,6 +114,10 @@
+ /*}}}*/
+ 
+ /*Object functions*/
++/*FUNCTION ControlInput::AXPY(){{{*/
++void ControlInput::AXPY(Input* xinput,IssmDouble scalar){
++	values->AXPY(xinput,scalar);
++}/*}}}*/
+ /*FUNCTION ControlInput::Constrain(){{{*/
+ void ControlInput::Constrain(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 15417)
+@@ -73,7 +73,7 @@
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+-		void AXPY(Input* xinput,IssmDouble scalar){_error_("not implemented yet");};
++		void AXPY(Input* xinput,IssmDouble scalar);
+ 		void Constrain(void);
+ 		void Constrain(IssmDouble min,IssmDouble max);
+ 		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 15417)
+@@ -37,7 +37,6 @@
+ /*FUNCTION TriaInput::~TriaInput(){{{*/
+ TriaInput::~TriaInput(){
+ 	xDelete<IssmDouble>(this->values);
+-	return;
+ }
+ /*}}}*/
+ 
+@@ -251,7 +250,7 @@
+ /*FUNCTION TriaInput::ContrainMin{{{*/
+ void TriaInput::ConstrainMin(IssmDouble minimum){
+ 
+-	const int numnodes = this->NumberofNodes();
++	int numnodes = this->NumberofNodes();
+ 	for(int i=0;i<numnodes;i++) if (values[i]<minimum) values[i]=minimum;
+ }
+ /*}}}*/
+@@ -259,8 +258,8 @@
+ IssmDouble TriaInput::InfinityNorm(void){
+ 
+ 	/*Output*/
+-	IssmDouble norm=0;
+-	const int numnodes=this->NumberofNodes();
++	IssmDouble norm=0.;
++	int numnodes=this->NumberofNodes();
+ 
+ 	for(int i=0;i<numnodes;i++) if(fabs(values[i])>norm) norm=fabs(values[i]);
+ 	return norm;
+@@ -269,7 +268,7 @@
+ /*FUNCTION TriaInput::Max{{{*/
+ IssmDouble TriaInput::Max(void){
+ 
+-	const int  numnodes=this->NumberofNodes();
++	int  numnodes=this->NumberofNodes();
+ 	IssmDouble max=values[0];
+ 
+ 	for(int i=1;i<numnodes;i++){
+@@ -281,7 +280,7 @@
+ /*FUNCTION TriaInput::MaxAbs{{{*/
+ IssmDouble TriaInput::MaxAbs(void){
+ 
+-	const int  numnodes=this->NumberofNodes();
++	int  numnodes=this->NumberofNodes();
+ 	IssmDouble max=fabs(values[0]);
+ 
+ 	for(int i=1;i<numnodes;i++){
+@@ -318,7 +317,6 @@
+ void TriaInput::Scale(IssmDouble scale_factor){
+ 
+ 	const int numnodes=this->NumberofNodes();
+-
+ 	for(int i=0;i<numnodes;i++)values[i]=values[i]*scale_factor;
+ }
+ /*}}}*/
+@@ -341,17 +339,16 @@
+ /*FUNCTION TriaInput::AXPY{{{*/
+ void TriaInput::AXPY(Input* xinput,IssmDouble scalar){
+ 
+-	int i;
+ 	const int numnodes=this->NumberofNodes();
+-	TriaInput*  xtriavertexinput=NULL;
++	TriaInput*  xtriainput=NULL;
+ 
+ 	/*xinput is of the same type, so cast it: */
+ 	if(xinput->ObjectEnum()!=TriaInputEnum) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+-	xtriavertexinput=(TriaInput*)xinput;
+-	if(xtriavertexinput->element_type!=this->element_type) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
++	xtriainput=(TriaInput*)xinput;
++	if(xtriainput->element_type!=this->element_type) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+ 
+ 	/*Carry out the AXPY operation depending on type:*/
+-	for(i=0;i<numnodes;i++)this->values[i]=this->values[i]+scalar*xtriavertexinput->values[i];
++	for(int i=0;i<numnodes;i++)this->values[i]=this->values[i]+scalar*xtriainput->values[i];
+ 
+ }
+ /*}}}*/
+@@ -386,9 +383,9 @@
+ 	IssmDouble *minvalues = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Check that inputB is of the same type*/
+-	if(inputB->ObjectEnum()!=TriaInputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
++	if(inputB->ObjectEnum()!=TriaInputEnum)       _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
+ 	xinputB=(TriaInput*)inputB;
+-	if(xinputB->element_type!=this->element_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
++	if(xinputB->element_type!=this->element_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->element_type));
+ 
+ 	/*Create point wise min*/
+ 	for(i=0;i<numnodes;i++){
+@@ -420,7 +417,7 @@
+ 	/*Check that inputB is of the same type*/
+ 	if(inputB->ObjectEnum()!=TriaInputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
+ 	xinputB=(TriaInput*)inputB;
+-	if(xinputB->element_type!=this->element_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
++	if(xinputB->element_type!=this->element_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->element_type));
+ 
+ 	/*Create point wise max*/
+ 	for(i=0;i<numnodes;i++){
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 15417)
+@@ -79,7 +79,6 @@
+ 		void Extrude(void){_error_("not supported yet");};
+ 		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+-		/*}}}*/
+ 
+ };
+ #endif  /* _TRIAINPUT_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15417)
+@@ -0,0 +1,616 @@
++/*!\file PentaInput.c
++ * \brief: implementation of the PentaInput object
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../classes.h"
++#include "../../shared/shared.h"
++
++/*PentaInput constructors and destructor*/
++/*FUNCTION PentaInput::PentaInput(){{{*/
++PentaInput::PentaInput(){
++	values = NULL;
++}
++/*}}}*/
++/*FUNCTION PentaInput::PentaInput(int in_enum_type,IssmDouble* values,int element_type){{{*/
++PentaInput::PentaInput(int in_enum_type,IssmDouble* in_values,int element_type_in)
++		:PentaRef(1)
++{
++
++	/*Set PentaRef*/
++	this->SetElementType(element_type_in,0);
++	this->element_type=element_type_in;
++
++	/*Set Enum*/
++	enum_type=in_enum_type;
++
++	/*Set values*/
++	this->values=xNew<IssmDouble>(this->NumberofNodes());
++	for(int i=0;i<this->NumberofNodes();i++) values[i]=in_values[i];
++}
++/*}}}*/
++/*FUNCTION PentaInput::~PentaInput(){{{*/
++PentaInput::~PentaInput(){
++	xDelete<IssmDouble>(this->values);
++}
++/*}}}*/
++
++/*Object virtual functions definitions:*/
++/*FUNCTION PentaInput::Echo {{{*/
++void PentaInput::Echo(void){
++	this->DeepEcho();
++}
++/*}}}*/
++/*FUNCTION PentaInput::DeepEcho{{{*/
++void PentaInput::DeepEcho(void){
++
++	_printf_("PentaInput:\n");
++	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
++	_printf_("   values: [");
++	for(int i=0;i<this->NumberofNodes();i++) _printf_(" "<<this->values[i]);
++	_printf_("]\n");
++}
++/*}}}*/
++/*FUNCTION PentaInput::Id{{{*/
++int    PentaInput::Id(void){ return -1; }
++/*}}}*/
++/*FUNCTION PentaInput::ObjectEnum{{{*/
++int PentaInput::ObjectEnum(void){
++
++	return PentaInputEnum;
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::copy{{{*/
++Object* PentaInput::copy() {
++
++	return new PentaInput(this->enum_type,this->values,this->element_type);
++
++}
++/*}}}*/
++
++/*PentaInput management*/
++/*FUNCTION PentaInput::InstanceEnum{{{*/
++int PentaInput::InstanceEnum(void){
++
++	return this->enum_type;
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::SpawnTriaInput{{{*/
++Input* PentaInput::SpawnTriaInput(int* indices){
++
++	/*output*/
++	TriaInput* outinput=NULL;
++	IssmDouble newvalues[3]; //Assume P1 interpolation only for now
++
++	/*Loop over the new indices*/
++	for(int i=0;i<3;i++){
++
++		/*Check index value*/
++		_assert_(indices[i]>=0 && indices[i]<6);
++
++		/*Assign value to new input*/
++		newvalues[i]=this->values[indices[i]];
++	}
++
++	/*Create new Tria input*/
++	outinput=new TriaInput(this->enum_type,&newvalues[0],P1Enum);
++
++	/*Assign output*/
++	return outinput;
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::SpawnResult{{{*/
++ElementResult* PentaInput::SpawnResult(int step, IssmDouble time){
++
++	return new PentaP1ElementResult(this->enum_type,this->values,step,time);
++
++}
++/*}}}*/
++
++/*Object functions*/
++/*FUNCTION PentaInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
++void PentaInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){
++
++	/*Call PentaRef function*/
++	PentaRef::GetInputValue(pvalue,&values[0],gauss);
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::GetInputDerivativeValue(IssmDouble* p, IssmDouble* xyz_list, GaussPenta* gauss){{{*/
++void PentaInput::GetInputDerivativeValue(IssmDouble* p, IssmDouble* xyz_list, GaussPenta* gauss){
++
++	/*Call PentaRef function*/
++	PentaRef::GetInputDerivativeValue(p,&values[0],xyz_list,gauss);
++}
++/*}}}*/
++/*FUNCTION PentaInput::GetVxStrainRate3d{{{*/
++void PentaInput::GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
++	int i,j;
++
++	const int numnodes=6;
++	const int DOFVELOCITY=3;
++	IssmDouble B[8][27];
++	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
++	IssmDouble velocity[numnodes][DOFVELOCITY];
++
++	_assert_(this->NumberofNodes()==6); //Check Tria too
++
++	/*Get B matrix: */
++	GetBStokes(&B[0][0], xyz_list, gauss);
++
++	/*Create a reduced matrix of B to get rid of pressure */
++	for (i=0;i<6;i++){
++		for (j=0;j<3;j++){
++			B_reduced[i][j]=B[i][j];
++		}
++		for (j=4;j<7;j++){
++			B_reduced[i][j-1]=B[i][j];
++		}
++		for (j=8;j<11;j++){
++			B_reduced[i][j-2]=B[i][j];
++		}
++		for (j=12;j<15;j++){
++			B_reduced[i][j-3]=B[i][j];
++		}
++		for (j=16;j<19;j++){
++			B_reduced[i][j-4]=B[i][j];
++		}
++		for (j=20;j<23;j++){
++			B_reduced[i][j-5]=B[i][j];
++		}
++	}
++
++	/*Here, we are computing the strain rate of (vx,0,0)*/
++	for(i=0;i<numnodes;i++){
++		velocity[i][0]=this->values[i];
++		velocity[i][1]=0.0;
++		velocity[i][2]=0.0;
++	}
++	/*Multiply B by velocity, to get strain rate: */
++	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvx,0);
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::GetVyStrainRate3d{{{*/
++void PentaInput::GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
++	int i,j;
++
++	const int numnodes=6;
++	const int DOFVELOCITY=3;
++	IssmDouble B[8][27];
++	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
++	IssmDouble velocity[numnodes][DOFVELOCITY];
++
++	_assert_(this->NumberofNodes()==6); //Check Tria too
++
++	/*Get B matrix: */
++	GetBStokes(&B[0][0], xyz_list, gauss);
++	/*Create a reduced matrix of B to get rid of pressure */
++	for (i=0;i<6;i++){
++		for (j=0;j<3;j++){
++			B_reduced[i][j]=B[i][j];
++		}
++		for (j=4;j<7;j++){
++			B_reduced[i][j-1]=B[i][j];
++		}
++		for (j=8;j<11;j++){
++			B_reduced[i][j-2]=B[i][j];
++		}
++		for (j=12;j<15;j++){
++			B_reduced[i][j-3]=B[i][j];
++		}
++		for (j=16;j<19;j++){
++			B_reduced[i][j-4]=B[i][j];
++		}
++		for (j=20;j<23;j++){
++			B_reduced[i][j-5]=B[i][j];
++		}
++	}
++
++	/*Here, we are computing the strain rate of (0,vy,0)*/
++	for(i=0;i<numnodes;i++){
++		velocity[i][0]=0.0;
++		velocity[i][1]=this->values[i];
++		velocity[i][2]=0.0;
++	}
++	/*Multiply B by velocity, to get strain rate: */
++	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvy,0);
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::GetVzStrainRate3d{{{*/
++void PentaInput::GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){
++	int i,j;
++
++	const int numnodes=6;
++	const int DOFVELOCITY=3;
++	IssmDouble B[8][27];
++	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
++	IssmDouble velocity[numnodes][DOFVELOCITY];
++
++	/*Get B matrix: */
++	GetBStokes(&B[0][0], xyz_list, gauss);
++
++	_assert_(this->NumberofNodes()==6); //Check Tria too
++
++	/*Create a reduced matrix of B to get rid of pressure */
++	for (i=0;i<6;i++){
++		for (j=0;j<3;j++){
++			B_reduced[i][j]=B[i][j];
++		}
++		for (j=4;j<7;j++){
++			B_reduced[i][j-1]=B[i][j];
++		}
++		for (j=8;j<11;j++){
++			B_reduced[i][j-2]=B[i][j];
++		}
++		for (j=12;j<15;j++){
++			B_reduced[i][j-3]=B[i][j];
++		}
++		for (j=16;j<19;j++){
++			B_reduced[i][j-4]=B[i][j];
++		}
++		for (j=20;j<23;j++){
++			B_reduced[i][j-5]=B[i][j];
++		}
++	}
++
++	/*Here, we are computing the strain rate of (0,0,vz)*/
++	for(i=0;i<numnodes;i++){
++		velocity[i][0]=0.0;
++		velocity[i][1]=0.0;
++		velocity[i][2]=this->values[i];
++	}
++
++	/*Multiply B by velocity, to get strain rate: */
++	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvz,0);
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::GetVxStrainRate3dPattyn{{{*/
++void PentaInput::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
++
++	int i;
++	const int numnodes=6;
++	IssmDouble B[5][NDOF2*numnodes];
++	IssmDouble velocity[numnodes][NDOF2];
++
++	/*Get B matrix: */
++	GetBPattyn(&B[0][0], xyz_list, gauss);
++
++	_assert_(this->NumberofNodes()==6); //Check Tria too
++
++
++	/*Here, we are computing the strain rate of (vx,0)*/
++	for(i=0;i<numnodes;i++){
++		velocity[i][0]=this->values[i];
++		velocity[i][1]=0.0;
++	}
++
++	/*Multiply B by velocity, to get strain rate: */
++	MatrixMultiply( &B[0][0],5,NDOF2*numnodes,0,
++				&velocity[0][0],NDOF2*numnodes,1,0,
++				epsilonvx,0);
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::GetVyStrainRate3dPattyn{{{*/
++void PentaInput::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
++
++	int i;
++	const int numnodes=6;
++	IssmDouble B[5][NDOF2*numnodes];
++	IssmDouble velocity[numnodes][NDOF2];
++
++	/*Get B matrix: */
++	GetBPattyn(&B[0][0], xyz_list, gauss);
++
++	_assert_(this->NumberofNodes()==6); //Check Tria too
++
++
++	/*Here, we are computing the strain rate of (0,vy)*/
++	for(i=0;i<numnodes;i++){
++		velocity[i][0]=0.0;
++		velocity[i][1]=this->values[i];
++	}
++
++	/*Multiply B by velocity, to get strain rate: */
++	MatrixMultiply( &B[0][0],5,NDOF2*numnodes,0,
++				&velocity[0][0],NDOF2*numnodes,1,0,
++				epsilonvy,0);
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::ChangeEnum{{{*/
++void PentaInput::ChangeEnum(int newenumtype){
++	this->enum_type=newenumtype;
++}
++/*}}}*/
++/*FUNCTION PentaInput::GetInputAverage{{{*/
++void PentaInput::GetInputAverage(IssmDouble* pvalue){
++
++	int        numnodes  = this->NumberofNodes();
++	IssmDouble numnodesd = reCast<int,IssmDouble>(numnodes);
++	IssmDouble value     = 0.;
++
++	for(int i=0;i<numnodes;i++) value+=values[i];
++	value = value/numnodesd;
++
++	*pvalue=value;
++}
++/*}}}*/
++
++/*Intermediary*/
++/*FUNCTION PentaInput::SquareMin{{{*/
++void PentaInput::SquareMin(IssmDouble* psquaremin,Parameters* parameters){
++
++	int        numnodes=this->NumberofNodes();
++	IssmDouble squaremin;
++
++	/*Now, figure out minimum of valuescopy: */
++	squaremin=pow(this->values[0],2);
++	for(int i=1;i<numnodes;i++){
++		if(pow(this->values[i],2)<squaremin)squaremin=pow(this->values[i],2);
++	}
++	/*Assign output pointers:*/
++	*psquaremin=squaremin;
++}
++/*}}}*/
++/*FUNCTION PentaInput::ConstrainMin{{{*/
++void PentaInput::ConstrainMin(IssmDouble minimum){
++
++	int numnodes = this->NumberofNodes();
++	for(int i=0;i<numnodes;i++) if (values[i]<minimum) values[i]=minimum;
++}
++/*}}}*/
++/*FUNCTION PentaInput::InfinityNorm{{{*/
++IssmDouble PentaInput::InfinityNorm(void){
++
++	/*Output*/
++	IssmDouble norm=0.;
++	int numnodes=this->NumberofNodes();
++
++	for(int i=0;i<numnodes;i++) if(fabs(values[i])>norm) norm=fabs(values[i]);
++	return norm;
++}
++/*}}}*/
++/*FUNCTION PentaInput::Max{{{*/
++IssmDouble PentaInput::Max(void){
++
++	int  numnodes=this->NumberofNodes();
++	IssmDouble max=values[0];
++
++	for(int i=1;i<numnodes;i++){
++		if(values[i]>max) max=values[i];
++	}
++	return max;
++}
++/*}}}*/
++/*FUNCTION PentaInput::MaxAbs{{{*/
++IssmDouble PentaInput::MaxAbs(void){
++
++	int  numnodes=this->NumberofNodes();
++	IssmDouble max=fabs(values[0]);
++
++	for(int i=1;i<numnodes;i++){
++		if(fabs(values[i])>max) max=fabs(values[i]);
++	}
++	return max;
++}
++/*}}}*/
++/*FUNCTION PentaInput::Min{{{*/
++IssmDouble PentaInput::Min(void){
++
++	const int  numnodes=this->NumberofNodes();
++	IssmDouble min=values[0];
++
++	for(int i=1;i<numnodes;i++){
++		if(values[i]<min) min=values[i];
++	}
++	return min;
++}
++/*}}}*/
++/*FUNCTION PentaInput::MinAbs{{{*/
++IssmDouble PentaInput::MinAbs(void){
++
++	const int  numnodes=this->NumberofNodes();
++	IssmDouble min=fabs(values[0]);
++
++	for(int i=1;i<numnodes;i++){
++		if(fabs(values[i])<min) min=fabs(values[i]);
++	}
++	return min;
++}
++/*}}}*/
++/*FUNCTION PentaInput::Scale{{{*/
++void PentaInput::Scale(IssmDouble scale_factor){
++
++	const int numnodes=this->NumberofNodes();
++	for(int i=0;i<numnodes;i++)values[i]=values[i]*scale_factor;
++}
++/*}}}*/
++/*FUNCTION PentaInput::AXPY{{{*/
++void PentaInput::AXPY(Input* xinput,IssmDouble scalar){
++
++	const int numnodes=this->NumberofNodes();
++	PentaInput* xpentainput=NULL;
++
++	/*If xinput is a ControlInput, take its values directly*/
++	if(xinput->ObjectEnum()==ControlInputEnum){
++		xinput=((ControlInput*)xinput)->values;
++	}
++
++	/*xinput is of the same type, so cast it: */
++	if(xinput->ObjectEnum()!=PentaInputEnum)
++	  _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
++	xpentainput=(PentaInput*)xinput;
++	if(xpentainput->element_type!=this->element_type) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xpentainput->element_type));
++
++	/*Carry out the AXPY operation depending on type:*/
++	for(int i=0;i<numnodes;i++)this->values[i]=this->values[i]+scalar*xpentainput->values[i];
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::Constrain{{{*/
++void PentaInput::Constrain(IssmDouble cm_min, IssmDouble cm_max){
++
++	int i;
++	const int numnodes=this->NumberofNodes();
++
++	if(!xIsNan<IssmDouble>(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
++	if(!xIsNan<IssmDouble>(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::Extrude{{{*/
++void PentaInput::Extrude(void){
++
++	switch(this->element_type){
++		case P1Enum:
++			for(int i=0;i<3;i++) this->values[3+i]=this->values[i];
++			break;
++		default:
++			_error_("not supported yet for type "<<EnumToStringx(this->element_type));
++	}
++}
++/*}}}*/
++/*FUNCTION PentaInput::VerticallyIntegrate{{{*/
++void PentaInput::VerticallyIntegrate(Input* thickness_input){
++
++	IssmDouble thickness;
++
++	/*Check that input provided is a thickness*/
++	if (thickness_input->InstanceEnum()!=ThicknessEnum) _error_("Input provided is not a Thickness (enum_type is " << EnumToStringx(thickness_input->InstanceEnum()) << ")");
++
++	/*vertically integrate depending on type:*/
++	switch(this->element_type){
++		case P1Enum:{
++			GaussPenta *gauss=new GaussPenta();
++			for(int iv=0;iv<3;iv++){
++				gauss->GaussVertex(iv);
++				thickness_input->GetInputValue(&thickness,gauss);
++				this->values[iv]=0.5*(this->values[iv]+this->values[iv+3]) * thickness;
++				this->values[iv+3]=this->values[iv];
++			}
++			delete gauss;
++			return; }
++		default:
++			_error_("not supported yet for type "<<EnumToStringx(this->element_type));
++	}
++}
++/*}}}*/
++/*FUNCTION PentaInput::PointwiseDivide{{{*/
++Input* PentaInput::PointwiseDivide(Input* inputB){
++
++	/*Ouput*/
++	PentaInput* outinput=NULL;
++
++	/*Intermediaries*/
++	PentaInput *xinputB  = NULL;
++	const int   numnodes = this->NumberofNodes();
++
++	/*Check that inputB is of the same type*/
++	if(inputB->ObjectEnum()!=PentaInputEnum)     _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
++	xinputB=(PentaInput*)inputB;
++	if(xinputB->element_type!=this->element_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->element_type));
++
++	/*Allocate intermediary*/
++	IssmDouble* AdotBvalues=xNew<IssmDouble>(numnodes);
++
++	/*Create point wise sum*/
++	for(int i=0;i<numnodes;i++){
++		_assert_(xinputB->values[i]!=0);
++		AdotBvalues[i]=this->values[i]/xinputB->values[i];
++	}
++
++	/*Create new Penta vertex input (copy of current input)*/
++	outinput=new PentaInput(this->enum_type,AdotBvalues,this->element_type);
++
++	/*Return output pointer*/
++	xDelete<IssmDouble>(AdotBvalues);
++	return outinput;
++
++}
++/*}}}*/
++/*FUNCTION PentaInput::PointwiseMin{{{*/
++Input* PentaInput::PointwiseMin(Input* inputB){
++
++	/*Ouput*/
++	PentaInput* outinput=NULL;
++
++	/*Intermediaries*/
++	int         i;
++	PentaInput  *xinputB   = NULL;
++	const int   numnodes  = this->NumberofNodes();
++	IssmDouble *minvalues = xNew<IssmDouble>(numnodes);
++
++	/*Check that inputB is of the same type*/
++	if(inputB->ObjectEnum()!=PentaInputEnum)       _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
++	xinputB=(PentaInput*)inputB;
++	if(xinputB->element_type!=this->element_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->element_type));
++
++	/*Create point wise min*/
++	for(i=0;i<numnodes;i++){
++		if(this->values[i] > xinputB->values[i]) minvalues[i]=xinputB->values[i];
++		else minvalues[i]=this->values[i];
++	}
++
++	/*Create new Penta vertex input (copy of current input)*/
++	outinput=new PentaInput(this->enum_type,&minvalues[0],this->element_type);
++
++	/*Return output pointer*/
++	xDelete<IssmDouble>(minvalues);
++	return outinput;
++}
++/*}}}*/
++/*FUNCTION PentaInput::PointwiseMax{{{*/
++Input* PentaInput::PointwiseMax(Input* inputB){
++
++	/*Ouput*/
++	PentaInput* outinput=NULL;
++
++	/*Intermediaries*/
++	int         i;
++	PentaInput  *xinputB   = NULL;
++	const int   numnodes  = this->NumberofNodes();
++	IssmDouble *maxvalues = xNew<IssmDouble>(numnodes);
++
++	/*Check that inputB is of the same type*/
++	if(inputB->ObjectEnum()!=PentaInputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
++	xinputB=(PentaInput*)inputB;
++	if(xinputB->element_type!=this->element_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->element_type));
++
++	/*Create point wise max*/
++	for(i=0;i<numnodes;i++){
++		if(this->values[i] < xinputB->values[i]) maxvalues[i]=xinputB->values[i];
++		else maxvalues[i]=this->values[i];
++	}
++
++	/*Create new Penta vertex input (copy of current input)*/
++	outinput=new PentaInput(this->enum_type,&maxvalues[0],this->element_type);
++
++	/*Return output pointer*/
++	xDelete<IssmDouble>(maxvalues);
++	return outinput;
++}
++/*}}}*/
++/*FUNCTION PentaInput::GetVectorFromInputs{{{*/
++void PentaInput::GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){
++
++	const int numnodes=this->NumberofNodes();
++	vector->SetValues(numnodes,doflist,this->values,INS_VAL);
++
++} /*}}}*/
++/*FUNCTION PentaInput::Configure{{{*/
++void PentaInput::Configure(Parameters* parameters){
++	/*do nothing: */
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 15417)
+@@ -262,7 +262,7 @@
+ 	/*vertically integrate depending on type:*/
+ 	switch(thickness_input->ObjectEnum()){
+ 
+-		case PentaP1InputEnum:
++		case PentaInputEnum:
+ 			thickness_input->GetInputAverage(&thickness_value);
+ 			this->value=this->value*thickness_value;
+ 			return;
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 15417)
+@@ -0,0 +1,84 @@
++/*! \file PentaInput.h 
++ *  \brief: header file for PentaInput object
++ */
++
++#ifndef _PENTAINPUT_H_
++#define _PENTAINPUT_H_
++
++/*Headers:*/
++/*{{{*/
++#include "./Input.h"
++#include "../Elements/PentaRef.h"
++class GaussTria;
++class GaussPenta;
++/*}}}*/
++
++class PentaInput: public Input, public PentaRef{
++
++	public:
++		int        enum_type;
++		IssmDouble* values;
++
++		/*PentaInput constructors, destructors*/
++		PentaInput();
++		PentaInput(int enum_type,IssmDouble* values,int element_type_in);
++		~PentaInput();
++
++		/*Object virtual functions definitions */
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy();
++
++		/*PentaInput management*/
++		int   InstanceEnum();
++		Input* SpawnTriaInput(int* indices);
++		Input* PointwiseDivide(Input* inputB);
++		Input* PointwiseMin(Input* inputB);
++		Input* PointwiseMax(Input* inputB);
++		ElementResult* SpawnResult(int step, IssmDouble time);
++		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
++		void Configure(Parameters* parameters);
++		/*numerics*/
++		void GetInputValue(bool* pvalue){_error_("not implemented yet");};
++		void GetInputValue(int* pvalue){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
++		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetInputAverage(IssmDouble* pvalue);
++		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
++		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
++
++		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
++		void ChangeEnum(int newenumtype);
++
++		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
++		void ConstrainMin(IssmDouble minimum);
++		void Scale(IssmDouble scale_factor);
++		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
++		void AXPY(Input* xinput,IssmDouble scalar);
++		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
++		IssmDouble InfinityNorm(void);
++		IssmDouble Max(void);
++		IssmDouble MaxAbs(void);
++		IssmDouble Min(void);
++		IssmDouble MinAbs(void);
++		void Extrude(void);
++		void VerticallyIntegrate(Input* thickness_input);
++		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
++
++};
++#endif  /* _PENTAINPUT_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/CMakeLists.txt	(revision 15416)
++++ ../trunk-jpl/src/c/classes/Inputs/CMakeLists.txt	(revision 15417)
+@@ -12,5 +12,5 @@
+                $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/TriaP1Input.cpp PARENT_SCOPE)
+ # }}}
+ # THREED_SOURCES {{{
+-set(THREED_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/PentaP1Input.cpp PARENT_SCOPE)
++set(THREED_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/PentaInput.cpp PARENT_SCOPE)
+ # }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15417-15418.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15417-15418.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15417-15418.diff	(revision 16134)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/src/m/enum/QmuVzMeshEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuVzMeshEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuVzMeshEnum.m	(revision 15418)
+@@ -0,0 +1,11 @@
++function macro=QmuVzMeshEnum()
++%QMUVZMESHENUM - Enum of QmuVzMesh
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=QmuVzMeshEnum()
++
++macro=StringToEnum('QmuVzMesh');
+Index: ../trunk-jpl/src/m/enum/QmuMaterialsRheologyBEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuMaterialsRheologyBEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuMaterialsRheologyBEnum.m	(revision 15418)
+@@ -0,0 +1,11 @@
++function macro=QmuMaterialsRheologyBEnum()
++%QMUMATERIALSRHEOLOGYBENUM - Enum of QmuMaterialsRheologyB
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=QmuMaterialsRheologyBEnum()
++
++macro=StringToEnum('QmuMaterialsRheologyB');
+Index: ../trunk-jpl/src/m/enum/QmuVxMeshEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuVxMeshEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuVxMeshEnum.m	(revision 15418)
+@@ -0,0 +1,11 @@
++function macro=QmuVxMeshEnum()
++%QMUVXMESHENUM - Enum of QmuVxMesh
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=QmuVxMeshEnum()
++
++macro=StringToEnum('QmuVxMesh');
+Index: ../trunk-jpl/src/m/enum/PentaInputEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PentaInputEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/PentaInputEnum.m	(revision 15418)
+@@ -0,0 +1,11 @@
++function macro=PentaInputEnum()
++%PENTAINPUTENUM - Enum of PentaInput
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=PentaInputEnum()
++
++macro=StringToEnum('PentaInput');
+Index: ../trunk-jpl/src/m/enum/QmuVyMeshEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuVyMeshEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuVyMeshEnum.m	(revision 15418)
+@@ -0,0 +1,11 @@
++function macro=QmuVyMeshEnum()
++%QMUVYMESHENUM - Enum of QmuVyMesh
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=QmuVyMeshEnum()
++
++macro=StringToEnum('QmuVyMesh');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15417)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15418)
+@@ -4950,19 +4950,19 @@
+ 
+ 	return StringToEnum('Penta')[0]
+ 
+-def PentaP1InputEnum():
++def PentaInputEnum():
+ 	"""
+-	PENTAP1INPUTENUM - Enum of PentaP1Input
++	PENTAINPUTENUM - Enum of PentaInput
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=PentaP1InputEnum()
++	      macro=PentaInputEnum()
+ 	"""
+ 
+-	return StringToEnum('PentaP1Input')[0]
++	return StringToEnum('PentaInput')[0]
+ 
+ def ProfilerEnum():
+ 	"""
Index: /issm/oecreview/Archive/15392-16133/ISSM-15418-15419.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15418-15419.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15418-15419.diff	(revision 16134)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 15418)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 15419)
+@@ -30,7 +30,10 @@
+ 		bool *my_nodes;
+ 		int  *my_vertices;
+ 
+-		/*Connectivity tables*/
++		/*Mesh properties and connectivity tables*/
++		int   dim;
++		int  *elements;
++		int  *edges;
+ 		int  *singlenodetoelementconnectivity;
+ 		int  *numbernodetoelementconnectivity;
+ 
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15418)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15419)
+@@ -30,6 +30,8 @@
+ 	this->my_nodes=NULL;
+ 	this->my_vertices=NULL;
+ 
++	this->elements=NULL;
++	this->edges=NULL;
+ 	this->singlenodetoelementconnectivity=NULL;
+ 	this->numbernodetoelementconnectivity=NULL;
+ 
+@@ -65,6 +67,9 @@
+ 	this->my_nodes=NULL;
+ 	this->my_vertices=NULL;
+ 
++	FetchData(&this->dim,MeshDimensionEnum);
++	this->elements=NULL;
++	this->edges=NULL;
+ 	this->singlenodetoelementconnectivity=NULL;
+ 	this->numbernodetoelementconnectivity=NULL;
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15419-15420.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15419-15420.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15419-15420.diff	(revision 16134)
@@ -0,0 +1,245 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15419)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15420)
+@@ -70,6 +70,7 @@
+ 	FlowequationIsl1l2Enum,
+ 	FlowequationIsmacayealpattynEnum,
+ 	FlowequationIsstokesEnum,
++	FlowequationFeStokesEnum,
+ 	FlowequationVertexEquationEnum,
+ 	FrictionCoefficientEnum,
+ 	FrictionPEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15419)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15420)
+@@ -78,6 +78,7 @@
+ 		case FlowequationIsl1l2Enum : return "FlowequationIsl1l2";
+ 		case FlowequationIsmacayealpattynEnum : return "FlowequationIsmacayealpattyn";
+ 		case FlowequationIsstokesEnum : return "FlowequationIsstokes";
++		case FlowequationFeStokesEnum : return "FlowequationFeStokes";
+ 		case FlowequationVertexEquationEnum : return "FlowequationVertexEquation";
+ 		case FrictionCoefficientEnum : return "FrictionCoefficient";
+ 		case FrictionPEnum : return "FrictionP";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15419)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15420)
+@@ -78,6 +78,7 @@
+ 	      else if (strcmp(name,"FlowequationIsl1l2")==0) return FlowequationIsl1l2Enum;
+ 	      else if (strcmp(name,"FlowequationIsmacayealpattyn")==0) return FlowequationIsmacayealpattynEnum;
+ 	      else if (strcmp(name,"FlowequationIsstokes")==0) return FlowequationIsstokesEnum;
++	      else if (strcmp(name,"FlowequationFeStokes")==0) return FlowequationFeStokesEnum;
+ 	      else if (strcmp(name,"FlowequationVertexEquation")==0) return FlowequationVertexEquationEnum;
+ 	      else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
+ 	      else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+ 	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+ 	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+-	      else if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
++	      if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
++	      else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
+ 	      else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum;
+ 	      else if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum;
+ 	      else if (strcmp(name,"InversionStepThreshold")==0) return InversionStepThresholdEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+-	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
++	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+ 	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+-	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Segment")==0) return SegmentEnum;
++	      if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
++	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+-	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
++	      if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
++	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15419)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15420)
+@@ -48,6 +48,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsmacayealpattynEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsl1l2Enum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsstokesEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeStokesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticRestolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticReltolEnum));
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15419)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15420)
+@@ -6821,15 +6821,34 @@
+ /*FUNCTION Penta::CreateKMatrixDiagnosticStokes{{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticStokes(void){
+ 
+-	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticStokesViscous();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticStokesFriction();
+-	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
++	int fe_stokes;
++	ElementMatrix* Ke1;
++	ElementMatrix* Ke2;
++	ElementMatrix* Ke;
++	parameters->FindParam(&fe_stokes,FlowequationFeStokesEnum);
+ 
++	switch(fe_stokes){
++		case 0:
++			/*compute all stiffness matrices for this element*/
++			Ke1=CreateKMatrixDiagnosticStokesViscous();
++			Ke2=CreateKMatrixDiagnosticStokesFriction();
++			Ke =new ElementMatrix(Ke1,Ke2);
++
++		case 1:
++			/*compute all stiffness matrices for this element*/
++			Ke1=CreateKMatrixDiagnosticStokesViscous();
++			Ke2=CreateKMatrixDiagnosticStokesFriction();
++			Ke =new ElementMatrix(Ke1,Ke2);
++
++		default:
++			_error_("Finite element" << fe_stokes << " not supported yet");
++	}
++
+ 	/*clean-up and return*/
+ 	delete Ke1;
+ 	delete Ke2;
+ 	return Ke;
++
+ }
+ /*}}}*/
+ /*FUNCTION Penta::CreateKMatrixDiagnosticStokesViscous {{{*/
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15419)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15420)
+@@ -19,6 +19,7 @@
+ 		self.ishutter             = 0
+ 		self.isl1l2               = 0
+ 		self.isstokes             = 0
++		self.fe_stokes            = 0
+ 		self.vertex_equation      = float('NaN')
+ 		self.element_equation     = float('NaN')
+ 		self.bordermacayeal       = float('NaN')
+@@ -77,6 +78,7 @@
+ 		WriteData(fid,'object',self,'fieldname','ishutter','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isl1l2','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isstokes','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','fe_stokes','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','bordermacayeal','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderpattyn','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderstokes','format','DoubleMat','mattype',1)
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15419)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15420)
+@@ -9,6 +9,7 @@
+ 		ishutter             = 0;
+ 		isl1l2               = 0;
+ 		isstokes             = 0;
++		fe_stokes            = 0;
+ 		vertex_equation      = NaN;
+ 		element_equation     = NaN;
+ 		bordermacayeal       = NaN;
+@@ -77,6 +78,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','ishutter','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isl1l2','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isstokes','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','fe_stokes','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','bordermacayeal','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','borderpattyn','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','borderstokes','format','DoubleMat','mattype',1);
+Index: ../trunk-jpl/src/m/enum/FlowequationFeStokesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationFeStokesEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationFeStokesEnum.m	(revision 15420)
+@@ -0,0 +1,11 @@
++function macro=FlowequationFeStokesEnum()
++%FLOWEQUATIONFESTOKESENUM - Enum of FlowequationFeStokes
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationFeStokesEnum()
++
++macro=StringToEnum('FlowequationFeStokes');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15419)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15420)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=561;
++macro=562;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15419)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15420)
+@@ -876,6 +876,20 @@
+ 
+ 	return StringToEnum('FlowequationIsstokes')[0]
+ 
++def FlowequationFeStokesEnum():
++	"""
++	FLOWEQUATIONFESTOKESENUM - Enum of FlowequationFeStokes
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=FlowequationFeStokesEnum()
++	"""
++
++	return StringToEnum('FlowequationFeStokes')[0]
++
+ def FlowequationVertexEquationEnum():
+ 	"""
+ 	FLOWEQUATIONVERTEXEQUATIONENUM - Enum of FlowequationVertexEquation
+@@ -7874,5 +7888,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 561
++	return 562
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15420-15421.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15420-15421.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15420-15421.diff	(revision 16134)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15420)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15421)
+@@ -5,7 +5,6 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../../classes/classes.h"
+ #include "../../shared/shared.h"
+-#include "../MeshPartitionx/MeshPartitionx.h"
+ #include "./ModelProcessorx.h"
+ 
+ void	CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels){
+@@ -39,9 +38,6 @@
+ 	vertices  = new Vertices();
+ 	materials = new Materials();
+ 
+-	/*First, partition elements and vertices. Nodes will partitioned on a per analysis_type basis. If partitining already done, ignore: */
+-	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
+-
+ 	iomodel->FetchData(2,MeshElementsEnum,MeshElementconnectivityEnum);
+ 	#ifdef _HAVE_3D_
+ 	if(dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15420)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15421)
+@@ -10,6 +10,7 @@
+ 
+ #include "../../classes/classes.h"
+ #include "../../shared/shared.h"
++#include "../MeshPartitionx/MeshPartitionx.h"
+ #include "./ModelProcessorx.h"
+ 
+ void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
+@@ -19,6 +20,11 @@
+ 	Materials  *materials  = NULL;
+ 	Parameters *parameters = NULL;
+ 
++	/*Process Finite Element Mesh*/
++
++	/*Partition Elements and Nodes*/
++	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
++
+ 	/*Create elements, vertices and materials, independent of analysis_type: */
+ 	CreateElementsVerticesAndMaterials(pelements, pvertices, pmaterials, iomodel,nummodels);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15421-15422.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15421-15422.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15421-15422.diff	(revision 16134)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15421)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15422)
+@@ -6829,17 +6829,18 @@
+ 
+ 	switch(fe_stokes){
+ 		case 0:
++			printf("fe %i\n",fe_stokes);
+ 			/*compute all stiffness matrices for this element*/
+ 			Ke1=CreateKMatrixDiagnosticStokesViscous();
+ 			Ke2=CreateKMatrixDiagnosticStokesFriction();
+ 			Ke =new ElementMatrix(Ke1,Ke2);
+-
++			break;
+ 		case 1:
+ 			/*compute all stiffness matrices for this element*/
+ 			Ke1=CreateKMatrixDiagnosticStokesViscous();
+ 			Ke2=CreateKMatrixDiagnosticStokesFriction();
+ 			Ke =new ElementMatrix(Ke1,Ke2);
+-
++			break;
+ 		default:
+ 			_error_("Finite element" << fe_stokes << " not supported yet");
+ 	}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15422-15423.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15422-15423.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15422-15423.diff	(revision 16134)
@@ -0,0 +1,975 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 15423)
+@@ -19,9 +19,8 @@
+ 	int i,j;
+ 	int vertexid;
+ 	int elementswidth;
+-	int    dim;
+-	int    numberofelements;
+-	int    numberofvertices;
++	int numberofelements;
++	int numberofvertices;
+ 	IssmDouble* elements=NULL;
+ 
+ 	/*output*/
+@@ -31,7 +30,6 @@
+ 	if(iomodel->numbernodetoelementconnectivity) return;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	elements=iomodel->Data(MeshElementsEnum);
+@@ -45,7 +43,7 @@
+ 	connectivity=xNewZeroInit<int>(numberofvertices);
+ 
+ 	/*Get element width (3 or 6)*/
+-	if (dim==2){
++	if (iomodel->dim==2){
+ 		elementswidth=3;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15423)
+@@ -58,13 +58,10 @@
+ 	 * the nodes and the vertices. The vertices are similar to continuous galerkin, but the nodes partitioning involves edges, which mess up sorting of 
+ 	 * ids. */
+ 
+-	int i,j;
+-	int    dim;
+-
+ 	/*output: */
+ 	bool*   my_nodes=NULL;
+ 
+-	int  i1,i2;
++	int  i,i1,i2;
+ 	int  cols;
+ 	int  e1,e2;
+ 	int  pos;
+@@ -72,9 +69,6 @@
+ 	int *edges         = NULL;
+ 	int *elements      = NULL;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+-
+ 	/*Build discontinuous node partitioning
+ 	 *  - there are three nodes per element (discontinous)
+ 	 *  - for each element present of each partition, its three nodes will be in this partition
+@@ -88,7 +82,7 @@
+ 	my_nodes=xNewZeroInit<bool>(3*numberofelements);
+ 
+ 	/*First: add all the nodes of all the elements belonging to this cpu*/
+-	if (dim==2){
++	if (iomodel->dim==2){
+ 		for (i=0;i<numberofelements;i++){
+ 			if (my_elements[i]){
+ 				my_nodes[3*i+0]=true;
+@@ -128,7 +122,7 @@
+ 
+ 			/*2: Get the column where these ids are located in the index*/
+ 			pos=UNDEF;
+-			for(j=0;j<3;j++){
++			for(int j=0;j<3;j++){
+ 				if (elements[3*e2+j]==i1) pos=j;
+ 			}
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 15423)
+@@ -12,7 +12,6 @@
+ 	/*Intermediary*/
+ 	int    i,j;
+ 	int    count;
+-	int    dim;
+ 	int    M,N;
+ 	int    numberofvertices;
+ 	bool   spcpresent=false;
+@@ -25,7 +24,6 @@
+ 	IssmDouble* values=NULL;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum);
+ 	iomodel->Constant(&referencetemperature,ConstantsReferencetemperatureEnum);
+@@ -37,7 +35,7 @@
+ 	if(!constraints) constraints = new Constraints();
+ 
+ 	/*return if 2d mesh*/
+-	if (dim==2){
++	if (iomodel->dim==2){
+ 		*pconstraints=constraints;
+ 		return;
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15423)
+@@ -10,15 +10,13 @@
+ 
+ void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
+ 	int    numberofelements;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+-	if(dim==2)return;
++	if(iomodel->dim==2)return;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(4,MeshElementsEnum,TemperatureEnum,WaterfractionEnum,PressureEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15423)
+@@ -11,13 +11,11 @@
+ 
+ 	/*Intermediary*/
+ 	int i;
+-	int dim;
+ 	int count;
+ 	IssmDouble yts;
+ 	int    numberofvertices;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+@@ -28,7 +26,7 @@
+ 	if(!constraints) constraints = new Constraints();
+ 
+ 	/*return if 2d mesh*/
+-	if(dim==2){
++	if(iomodel->dim==2){
+ 		*pconstraints=constraints;
+ 		return;
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15423)
+@@ -13,11 +13,9 @@
+ 	/*Intermediary*/
+ 	int i;
+ 	bool continuous_galerkin=true;
+-	int    dim;
+ 	int    numberofvertices;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+@@ -27,7 +25,7 @@
+ 	if(!nodes) nodes = new Nodes();
+ 
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if (dim==2){
++	if(iomodel->dim==2){
+ 		*pnodes=nodes;
+ 		return;
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15423)
+@@ -10,16 +10,14 @@
+ 
+ void	UpdateElementsDiagnosticVert(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if (iomodel->dim==2)return;
++
+ 	int    numberofelements;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (dim==2)return;
+-
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(1,MeshElementsEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15423)
+@@ -16,13 +16,11 @@
+ 	int  vertex_id;
+ 	int  io_index;
+ 	bool continuous_galerkin=true;
+-	int  dim;
+ 	int    numberofelements;
+ 	int    numberofvertices;
+ 	int    stabilization;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+@@ -38,7 +36,7 @@
+ 	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+ 
+ 	/*Check in 3d*/
+-	if(stabilization==3 && dim==3) _error_("DG 3d not implemented yet");
++	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+ 	iomodel->FetchData(7,MeshElementsEnum,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15423)
+@@ -10,7 +10,6 @@
+ 
+ void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
+ 	int    numberofelements;
+ 	int    stabilization;
+ 	bool   dakota_analysis;
+@@ -19,7 +18,6 @@
+ 	bool   isdelta18o;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+@@ -62,7 +60,7 @@
+ 		elements->InputDuplicate(VyEnum,QmuVyEnum);
+ 	}
+ 
+-	if (dim==3){
++	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 		iomodel->FetchDataToInput(elements,PressureEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15423)
+@@ -10,11 +10,9 @@
+ 
+ void	UpdateElementsSurfaceSlope(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
+ 	int    numberofelements;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->FetchData(1,MeshElementsEnum);
+ 
+@@ -32,7 +30,7 @@
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 
+-	if (dim==3){
++	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 15423)
+@@ -9,23 +9,20 @@
+ void	CreateLoadsThermal(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int      dim;
+ 	int      numberofvertices;
+ 	Pengrid *pengrid          = NULL;
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
++	if(iomodel->dim==2) _error_("2d meshes not supported yet");
++
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+ 
+-	/*return if 2d mesh*/
+-	if (dim==2) _error_("2d meshes not supported yet");
+-
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+ 	iomodel->FetchData(2,ThermalSpctemperatureEnum,MeshElementsEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 15423)
+@@ -10,10 +10,6 @@
+ 
+ void	CreateConstraintsThermal(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Fetch parameters: */
+-	int    dim;
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+-
+ 	/*Recover pointer: */
+ 	Constraints* constraints=*pconstraints;
+ 
+@@ -21,7 +17,7 @@
+ 	if(!constraints) constraints = new Constraints();
+ 
+ 	/*Only 3d mesh supported*/
+-	if (dim==3){
++	if(iomodel->dim==3){
+ 		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15423)
+@@ -10,18 +10,16 @@
+ 
+ void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
+ 	int    numberofelements;
+ 	bool   dakota_analysis;
+ 
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if(iomodel->dim==2)return;
++
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (dim==2)return;
+-
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(1,MeshElementsEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15423)
+@@ -10,11 +10,9 @@
+ 
+ void	UpdateElementsBedSlope(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
+ 	int    numberofelements;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->FetchData(1,MeshElementsEnum);
+ 
+@@ -32,7 +30,7 @@
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 
+-	if (dim==3){
++	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15423)
+@@ -10,15 +10,13 @@
+ 
+ void	UpdateElementsMelting(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
+ 	int    numberofelements;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (dim==2)return;
++	if(iomodel->dim==2)return;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(1,MeshElementsEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 15423)
+@@ -9,13 +9,11 @@
+ void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int dim;
+ 	int numberofvertices;
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*if 2d: Error*/
+-	if (dim==2) _error_("2d meshes not supported yet");
++	if(iomodel->dim==2) _error_("2d meshes not supported yet");
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15423)
+@@ -15,7 +15,7 @@
+ 
+ void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim,materials_type;
++	int    materials_type;
+ 	int    numberofelements;
+ 	bool   ismacayealpattyn;
+ 	bool   isl1l2;
+@@ -27,7 +27,6 @@
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+ 	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+ 	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+@@ -68,7 +67,7 @@
+ 	if(materials_type==MatdamageiceEnum){
+ 		iomodel->FetchDataToInput(elements,MaterialsRheologyZEnum);
+ 	}
+-	if (dim==3){
++	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 		iomodel->FetchDataToInput(elements,VzEnum);
+@@ -96,7 +95,7 @@
+ 	elements->InputDuplicate(VyEnum,InversionVyObsEnum);
+ 	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
+ 
+-	if(dim==3){
++	if(iomodel->dim==3){
+ 		elements->InputDuplicate(VzEnum,VzPicardEnum);
+ 		elements->InputDuplicate(VzEnum,InversionVzObsEnum);
+ 		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15423)
+@@ -18,7 +18,6 @@
+ 	int i;
+ 	int count=0;
+ 	int penpair_ids[2];
+-	int dim;
+ 	int numberofvertices;
+ 	bool ismacayealpattyn,isstokes,isl1l2;
+ 	int  numpenalties,numberofpressureloads,numrifts,numriftsegments;
+@@ -33,7 +32,6 @@
+ 	IssmDouble *penalties      = NULL;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+@@ -65,7 +63,7 @@
+ 	for (i=0;i<numberofpressureloads;i++){
+ 
+ 		/*Retrieve element to which this icefront belongs: */
+-		if (dim==2) segment_width=4; 
++		if(iomodel->dim==2) segment_width=4; 
+ 		else segment_width=6;
+ 		element=reCast<int,IssmDouble>(*(pressureload+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill)
+ 
+@@ -76,11 +74,11 @@
+ 		if (reCast<int,IssmDouble>(*(elements_type+element))==HutterApproximationEnum) continue;
+ 
+ 		/*Create and  add load: */
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && dim==2){
++		if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && iomodel->dim==2){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal2dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+ 		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && dim==3){
++		else if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && iomodel->dim==3){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15423)
+@@ -40,11 +40,9 @@
+ 	/*Output*/
+ 	Constraints *constraints      = NULL;
+ 	SpcStatic   *spcstatic        = NULL;
+-	int          dim;
+ 	int          numberofvertices;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&g,ConstantsGEnum);
+@@ -71,10 +69,10 @@
+ 	iomodel->FetchData(&spcvy,&My,&Ny,DiagnosticSpcvyEnum);
+ 	iomodel->FetchData(&spcvz,&Mz,&Nz,DiagnosticSpcvzEnum);
+ 	iomodel->FetchData(&nodeonmacayeal,NULL,NULL,FlowequationBordermacayealEnum);
+-	if(dim==3)iomodel->FetchData(&nodeonpattyn,NULL,NULL,FlowequationBorderpattynEnum);
+-	if(dim==3)iomodel->FetchData(&nodeonstokes,NULL,NULL,FlowequationBorderstokesEnum);
+-	if(dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-	if(dim==3)iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonpattyn,NULL,NULL,FlowequationBorderpattynEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonstokes,NULL,NULL,FlowequationBorderstokesEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
+ 	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+ 	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+ 	iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+@@ -294,7 +292,7 @@
+ 			}
+ 
+ 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			if (dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonstokes[i])){
++			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonstokes[i])){
+ 				 switch(reCast<int,IssmDouble>(vertices_type[i])){
+ 					case MacAyealStokesApproximationEnum:
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,DiagnosticHorizAnalysisEnum));
+@@ -319,10 +317,10 @@
+ 	iomodel->DeleteData(spcvy,DiagnosticSpcvyEnum);
+ 	iomodel->DeleteData(spcvz,DiagnosticSpcvzEnum);
+ 	iomodel->DeleteData(nodeonmacayeal,FlowequationBordermacayealEnum);
+-	if(dim==3)iomodel->DeleteData(nodeonpattyn,FlowequationBorderpattynEnum);
+-	if(dim==3)iomodel->DeleteData(nodeonstokes,FlowequationBorderstokesEnum);
+-	if(dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-	if(dim==3)iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonpattyn,FlowequationBorderpattynEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonstokes,FlowequationBorderstokesEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
+ 	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+ 	iomodel->DeleteData(surface,SurfaceEnum);
+ 	iomodel->DeleteData(z,MeshZEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 15423)
+@@ -10,11 +10,9 @@
+ 
+ void	UpdateElementsGia(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
+ 	int    numberofelements;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 
+ 	/*Fetch data needed: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15423)
+@@ -16,13 +16,11 @@
+ 	int  vertex_id;
+ 	int  io_index;
+ 	bool continuous_galerkin=true;
+-	int    dim;
+ 	int    numberofelements;
+ 	int    numberofvertices;
+ 	int    stabilization;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+@@ -38,7 +36,7 @@
+ 	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+ 
+ 	/*Check in 3d*/
+-	if(stabilization==3 && dim==3) _error_("DG 3d not implemented yet");
++	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+ 	iomodel->FetchData(7,MeshElementsEnum,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15423)
+@@ -10,11 +10,9 @@
+ 
+ void	UpdateElementsBalancethickness(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    dim;
+ 	int    numberofelements;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->FetchData(1,MeshElementsEnum);
+ 
+@@ -39,7 +37,7 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
+ 
+-	if (dim==3){
++	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 15423)
+@@ -19,7 +19,6 @@
+ 	int i,j;
+ 	int vertexid;
+ 	int elementswidth;
+-	int    dim;
+ 	int    numberofelements;
+ 	int    numberofvertices;
+ 	IssmDouble* elements=NULL;
+@@ -31,7 +30,6 @@
+ 	if(iomodel->singlenodetoelementconnectivity) return;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	elements=iomodel->Data(MeshElementsEnum);
+@@ -46,7 +44,7 @@
+ 	connectivity=xNewZeroInit<int>(numberofvertices);
+ 
+ 	/*Get element width (3 or 6)*/
+-	if (dim==2){
++	if(iomodel->dim==2){
+ 		elementswidth=3;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15423)
+@@ -14,7 +14,7 @@
+ 
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){
+ 
+-	int   i,analysis_type,dim,verbose;
++	int   i,analysis_type,verbose;
+ 	bool  isthermal,isprognostic,isdiagnostic,isgroundingline,isenthalpy;
+ 
+ 	/*output: */
+@@ -30,7 +30,6 @@
+ 	IoModel* iomodel = new IoModel(IOMODEL);
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&verbose,VerboseEnum);
+ 	iomodel->Constant(&isthermal,TransientIsthermalEnum);
+ 	iomodel->Constant(&isenthalpy,ThermalIsenthalpyEnum);
+@@ -47,9 +46,9 @@
+ 		analysis_type=analysis_type_list[i];
+ 
+ 		/*Hack for trasient runs (FIXME: to be improved)*/
+-		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && dim==2) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && dim==2) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && dim==2) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum  && iomodel->dim==2) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum  && iomodel->dim==2) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && iomodel->dim==2) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isthermal==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isthermal==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isthermal==false) continue;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15423)
+@@ -11,7 +11,7 @@
+ 
+ 	/*Intermediary*/
+ 	int i;
+-	int dim,materials_type;
++	int materials_type;
+ 	int numberofelements;
+ 	int numberofvertices;
+ 	bool control_analysis;
+@@ -23,7 +23,6 @@
+ 	Materials *materials = NULL;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+@@ -40,7 +39,7 @@
+ 
+ 	iomodel->FetchData(2,MeshElementsEnum,MeshElementconnectivityEnum);
+ 	#ifdef _HAVE_3D_
+-	if(dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
++	if(iomodel->dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+ 	#endif
+ 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+ 
+@@ -49,7 +48,7 @@
+ 		if(iomodel->my_elements[i]){
+ 
+ 			/*Create and add tria element to elements dataset: */
+-			if(dim==2) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
++			if(iomodel->dim==2) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
+ 	        #ifdef _HAVE_3D_
+ 			else       elements->AddObject(new Penta(i+1,i,i,iomodel,nummodels));
+ 	        #endif
+@@ -62,7 +61,7 @@
+ 			iomodel->FetchData(2,MaterialsRheologyBEnum,MaterialsRheologyNEnum);
+ 			for (i=0;i<numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
+ 			if(dakota_analysis){
+-				if(dim==2) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
++				if(iomodel->dim==2) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
+            #ifdef _HAVE_3D_
+ 				else       materials->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum); 
+            #endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15423)
+@@ -37,7 +37,6 @@
+ 	int* npart=NULL; //node partitioning.
+ 	int  elements_width; //number of columns in elements (2d->3, 3d->6)
+ 	int  el1,el2;
+-	int    dim;
+ 	IssmDouble* elements=NULL;
+ 	IssmDouble* elements2d=NULL;
+ 	IssmDouble* riftinfo=NULL;
+@@ -48,7 +47,6 @@
+ 	num_procs=IssmComm::GetSize();
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&numberofelements2d,MeshNumberofelements2dEnum);
+@@ -60,20 +58,17 @@
+ 	if (*pmy_elements)return;
+ 
+ 	/*Number of vertices per elements, needed to correctly retrieve data: */
+-	if(dim==2) elements_width=3; //tria elements
+-	else elements_width=6; //penta elements
+-
+ 	/*Determine parallel partitioning of elements: we use Metis for now. First load the data, then partition*/
+-	if(dim==2){
+-		/*load elements: */
++	if(iomodel->dim==2){
++		elements_width=3; //tria elements
+ 		iomodel->FetchData(&elements,NULL,NULL,MeshElementsEnum);
+ 	}
+ 	else{
+-		/*load elements2d: */
++		elements_width=6; //penta elements
+ 		iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
+ 	}
+ 
+-	MeshPartitionx(&epart, &npart,numberofelements,numberofvertices,elements, numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width, dim,num_procs);
++	MeshPartitionx(&epart, &npart,numberofelements,numberofvertices,elements, numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->dim,num_procs);
+ 
+ 	/*Free elements and elements2d: */
+ 	iomodel->DeleteData(elements,MeshElementsEnum);
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15423)
+@@ -669,27 +669,27 @@
+ 			switch(element->ObjectEnum()){
+ 
+ 				case TriaEnum: {
+-					IssmDouble values[3];
+-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->vertices[i]->Sid()]; //use sid list, to index into serial oriented vector 
+-					this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+-					/*Special case for rheology B in 2D: Pourave land for this solution{{{*/
+-					if(name==MaterialsRheologyBEnum){
+-						/*Are we in 2D?:*/
+-						if(element->ObjectEnum()==TriaEnum){
+-							parameters=((Tria*)(element))->parameters;
+-						}
+-						else{
+-							parameters=((Penta*)(element))->parameters;
+-						}
+-						parameters->FindParam(&dim,MeshDimensionEnum);
+-						if(dim==2){
+-							/*Dupliacte rheology input: */
+-							this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));
+-						}
+-					}
+-					/*}}}*/
+-					return;
+-				}
++										IssmDouble values[3];
++										for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->vertices[i]->Sid()]; //use sid list, to index into serial oriented vector 
++										this->inputs->AddInput(new TriaInput(name,values,P1Enum));
++										/*Special case for rheology B in 2D: Pourave land for this solution{{{*/
++										if(name==MaterialsRheologyBEnum){
++											/*Are we in 2D?:*/
++											if(element->ObjectEnum()==TriaEnum){
++												parameters=((Tria*)(element))->parameters;
++											}
++											else{
++												parameters=((Penta*)(element))->parameters;
++											}
++											parameters->FindParam(&dim,MeshDimensionEnum);
++											if(dim==2){
++												/*Dupliacte rheology input: */
++												this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));
++											}
++										}
++										/*}}}*/
++										return;
++									}
+ 				default: _error_("element " << EnumToStringx(element->ObjectEnum()) << " not implemented yet");
+ 			}
+ 		default: _error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+@@ -736,18 +736,14 @@
+ void Matdamageice::InputUpdateFromIoModel(int index, IoModel* iomodel){
+ 
+ 	int i,j;
+-
+-	int    dim;
+ 	bool   control_analysis;
+ 	int    num_control_type;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
+ 
+-	/*if 2d*/
+-	if(dim==2){
++	if(iomodel->dim==2){
+ 
+ 		/*Intermediaries*/
+ 		const int num_vertices = 3; //Tria has 3 vertices
+@@ -805,7 +801,7 @@
+ 
+ 	/*if 3d*/
+ 	#ifdef _HAVE_3D_
+-	else if(dim==3){
++	else if(iomodel->dim==3){
+ 
+ 		/*Intermediaries*/
+ 		const int num_vertices = 6; //Penta has 6 vertices
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15423)
+@@ -686,18 +686,14 @@
+ void Matice::InputUpdateFromIoModel(int index, IoModel* iomodel){
+ 
+ 	int i,j;
+-
+-	int    dim;
+ 	bool   control_analysis;
+ 	int    num_control_type;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
+ 
+-	/*if 2d*/
+-	if(dim==2){
++	if(iomodel->dim==2){
+ 
+ 		/*Intermediaries*/
+ 		const int num_vertices = 3; //Tria has 3 vertices
+@@ -739,7 +735,7 @@
+ 
+ 	/*if 3d*/
+ 	#ifdef _HAVE_3D_
+-	else if(dim==3){
++	else if(iomodel->dim==3){
+ 
+ 		/*Intermediaries*/
+ 		const int num_vertices = 6; //Penta has 6 vertices
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15423)
+@@ -42,7 +42,6 @@
+ 	int element;
+ 	int numnodes; 
+ 	int numvertices; 
+-	int dim;
+ 	int numberofelements;
+ 
+ 	/*icefront constructor data: */
+@@ -53,11 +52,10 @@
+ 	int  icefront_fill;
+ 
+ 	/*find parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 
+ 	/*First, retrieve element index and element type: */
+-	if (dim==2){
++	if(iomodel->dim==2){
+ 		segment_width=4;
+ 	}
+ 	else{
+@@ -131,7 +129,6 @@
+ 	int element;
+ 	int numnodes; 
+ 	int numvertices; 
+-	int dim;
+ 	int numberofelements;
+ 
+ 	/*icefront constructor data: */
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15422)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15423)
+@@ -28,11 +28,7 @@
+ 	/*Intermediary*/
+ 	int k,l;
+ 	int gsize;
+-	int dim;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+-
+ 	/*id: */
+ 	this->id            = node_id;
+ 	this->sid           = node_sid;
+@@ -78,7 +74,7 @@
+ 		_assert_(iomodel->Data(DiagnosticReferentialEnum)); 
+ 		XZvectorsToCoordinateSystem(&this->coord_system[0][0],iomodel->Data(DiagnosticReferentialEnum)+io_index*6);
+ 
+-		if (dim==3){
++		if(iomodel->dim==3){
+ 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum)); 
+ 			_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+@@ -125,7 +121,7 @@
+ 				analysis_type==HydrologyDCInefficientAnalysisEnum ||
+ 				analysis_type==HydrologyDCEfficientAnalysisEnum
+ 				){
+-		if (dim==3){
++		if(iomodel->dim==3){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum));
+ 			if (!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15423-15424.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15423-15424.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15423-15424.diff	(revision 16134)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-macosx64.sh	(revision 15423)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-macosx64.sh	(revision 15424)
+@@ -2,16 +2,16 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.1 src
++rm -rf install petsc-3.4.2 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.1.tar.gz' 'petsc-3.4.1.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.1.tar.gz
+-mv petsc-3.4.1/* src/
+-rm -rf petsc-3.4.1
++tar -zxvf  petsc-3.4.2.tar.gz
++mv petsc-3.4.2/* src/
++rm -rf petsc-3.4.2
+ 
+ #configure
+ cd src
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-linux64.sh	(revision 15423)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-linux64.sh	(revision 15424)
+@@ -2,16 +2,16 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.1 src
++rm -rf install petsc-3.4.2 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.1.tar.gz' 'petsc-3.4.1.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.1.tar.gz
+-mv petsc-3.4.1/* src/
+-rm -rf petsc-3.4.1
++tar -zxvf  petsc-3.4.2.tar.gz
++mv petsc-3.4.2/* src/
++rm -rf petsc-3.4.2
+ 
+ #configure
+ cd src
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades.sh	(revision 15423)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades.sh	(revision 15424)
+@@ -1,16 +1,16 @@
+ #!/bin/bash
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.1 src
++rm -rf install petsc-3.4.2 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.1.tar.gz' 'petsc-3.4.1.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.1.tar.gz
+-mv petsc-3.4.1/* src/
+-rm -rf petsc-3.4.1
++tar -zxvf  petsc-3.4.2.tar.gz
++mv petsc-3.4.2/* src/
++rm -rf petsc-3.4.2
+ 
+ #configure
+ cd src
Index: /issm/oecreview/Archive/15392-16133/ISSM-15424-15425.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15424-15425.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15424-15425.diff	(revision 16134)
@@ -0,0 +1,349 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15424)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15425)
+@@ -313,6 +313,73 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION PentaRef::GetBStokesGLS {{{*/
++void PentaRef::GetBStokesGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++
++	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*NDOF4. 
++	 * For node i, Bi can be expressed in the actual coordinate system
++	 * by: 		Bi=[ dh/dx          0              0       0  ]
++	 *					[   0           dh/dy           0       0  ]
++	 *					[   0             0           dh/dy     0  ]
++	 *					[ 1/2*dh/dy    1/2*dh/dx        0       0  ]
++	 *					[ 1/2*dh/dz       0         1/2*dh/dx   0  ]
++	 *					[   0          1/2*dh/dz    1/2*dh/dy   0  ]
++	 *					[   0             0             0       h  ]
++	 *					[ dh/dx         dh/dy         dh/dz     0  ]
++	 *	where h is the interpolation function for node i.
++	 *	Same thing for Bb except the last column that does not exist.
++	 */
++
++	int i;
++
++	IssmDouble dh1dh6[3][NUMNODESP1];
++	IssmDouble l1l6[NUMNODESP1];
++
++	/*Get dh1dh7 in actual coordinate system: */
++	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
++	GetNodalFunctionsP1(l1l6, gauss);
++
++	/*Build B: */
++	for (i=0;i<NUMNODESP1;i++){
++		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh6[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
++		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh6[1][i];
++		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh6[2][i];
++		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=.5*dh1dh6[1][i]; 
++		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=.5*dh1dh6[0][i]; 
++		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=.5*dh1dh6[2][i];
++		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=.5*dh1dh6[0][i];
++		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=.5*dh1dh6[2][i];
++		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=.5*dh1dh6[1][i];
++		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=dh1dh6[0][i];
++		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=dh1dh6[1][i];
++		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=dh1dh6[2][i];
++	}
++
++	for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
++		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3)=0.;
++		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3)=l1l6[i];
++		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3)=0.;
++	}
++
++}
++/*}}}*/
+ /*FUNCTION PentaRef::GetBprimeStokes {{{*/
+ void PentaRef::GetBprimeStokes(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*	Compute B'  matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 
+@@ -380,6 +447,73 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION PentaRef::GetBprimeStokesGLS {{{*/
++void PentaRef::GetBprimeStokesGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
++	/*	Compute B'  matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 
++	 *	For node i, Bi' can be expressed in the actual coordinate system
++	 *	by: 
++	 *				Bi'=[  dh/dx   0          0       0]
++	 *					 [   0      dh/dy      0       0]
++	 *					 [   0      0         dh/dz    0]
++	 *					 [  dh/dy   dh/dx      0       0]
++	 *					 [  dh/dz   0        dh/dx     0]
++	 *					 [   0      dh/dz    dh/dy     0]
++	 *					 [  dh/dx   dh/dy    dh/dz     0]
++	 *					 [   0      0          0       h]
++	 *	where h is the interpolation function for node i.
++	 *
++	 * 	Same thing for the bubble fonction except that there is no fourth column
++	 */
++
++	int i;
++	IssmDouble dh1dh6[3][NUMNODESP1];
++	IssmDouble l1l6[NUMNODESP1];
++
++	/*Get dh1dh7 in actual coordinate system: */
++	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
++	GetNodalFunctionsP1(l1l6, gauss);
++
++	/*B_primeuild B_prime: */
++	for (i=0;i<NUMNODESP1;i++){
++		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh6[0][i]; //B_prime[0][NDOF4*i]=dh1dh6[0][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh6[1][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh6[2][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=dh1dh6[1][i]; 
++		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=dh1dh6[0][i]; 
++		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=dh1dh6[2][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=dh1dh6[0][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=dh1dh6[2][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=dh1dh6[1][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=dh1dh6[0][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=dh1dh6[1][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=dh1dh6[2][i];
++		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=0.;
++	}
++
++	for (i=0;i<NUMNODESP1;i++){ //last column 
++		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3)=l1l6[i];
++	}
++
++}
++/*}}}*/
+ /*FUNCTION PentaRef::GetBAdvec{{{*/
+ void PentaRef::GetBAdvec(IssmDouble* B_advec, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF1. 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15424)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15425)
+@@ -6829,7 +6829,6 @@
+ 
+ 	switch(fe_stokes){
+ 		case 0:
+-			printf("fe %i\n",fe_stokes);
+ 			/*compute all stiffness matrices for this element*/
+ 			Ke1=CreateKMatrixDiagnosticStokesViscous();
+ 			Ke2=CreateKMatrixDiagnosticStokesFriction();
+@@ -6837,8 +6836,8 @@
+ 			break;
+ 		case 1:
+ 			/*compute all stiffness matrices for this element*/
+-			Ke1=CreateKMatrixDiagnosticStokesViscous();
+-			Ke2=CreateKMatrixDiagnosticStokesFriction();
++			Ke1=CreateKMatrixDiagnosticStokesGLSViscous();
++			Ke2=CreateKMatrixDiagnosticStokesGLSFriction();
+ 			Ke =new ElementMatrix(Ke1,Ke2);
+ 			break;
+ 		default:
+@@ -6913,6 +6912,64 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Penta::CreateKMatrixDiagnosticStokesGLSViscous {{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSViscous(void){
++
++	/*Intermediaries */
++	int        i,approximation;
++	IssmDouble Jdet,viscosity,stokesreconditioning;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble B[8][24];
++	IssmDouble B_prime[8][24];
++	IssmDouble D_scalar;
++	IssmDouble D[8][8]={0.0};
++	IssmDouble Ke_temp[24][24]={1.0}; //for the six nodes
++	GaussPenta *gauss=NULL;
++
++	/*If on water or not Stokes, skip stiffness: */
++	inputs->GetInputValue(&approximation,ApproximationEnum);
++	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussPenta(5,5);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetBStokesGLS(&B[0][0],&xyz_list[0][0],gauss); 
++		GetBprimeStokesGLS(&B_prime[0][0],&xyz_list[0][0],gauss); 
++
++		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
++		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++
++		D_scalar=gauss->weight*Jdet;
++		for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity;
++		for (i=6;i<8;i++) D[i][i]=-D_scalar*stokesreconditioning;
++
++		TripleMultiply( &B[0][0],8,24,1,
++					&D[0][0],8,8,0,
++					&B_prime[0][0],8,24,0,
++					&Ke_temp[0][0],1);
++	}
++
++	/*Transform Coordinate System*/
++	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
++
++	/*Clean up and return*/
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Penta::CreateKMatrixDiagnosticStokesFriction{{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticStokesFriction(void){
+ 
+@@ -6965,6 +7022,78 @@
+ 
+ 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
+ 
++		DLStokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
++		DLStokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
++
++		TripleMultiply( &LStokes[0][0],2,numdof2d,1,
++					&DLStokes[0][0],2,2,0,
++					&LStokes[0][0],2,numdof2d,0,
++					&Ke_drag_gaussian[0][0],0);
++
++		for(i=0;i<numdof2d;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdof+j]+=Ke_drag_gaussian[i][j];
++	}
++
++	/*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
++	//TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
++
++	/*Clean up and return*/
++	delete gauss;
++	delete friction;
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Penta::CreateKMatrixDiagnosticStokesGLSFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSFriction(void){
++
++	/*Constants*/
++	const int numdof=NUMVERTICES*NDOF4;
++	const int numdof2d=NUMVERTICES2D*NDOF4;
++
++	/*Intermediaries */
++	int        i,j;
++	int        analysis_type,approximation;
++	IssmDouble alpha2,Jdet2d;
++	IssmDouble stokesreconditioning,viscosity;
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble LStokes[2][numdof2d];
++	IssmDouble DLStokes[2][2]={0.0};
++	IssmDouble Ke_drag_gaussian[numdof2d][numdof2d];
++	Friction*  friction=NULL;
++	GaussPenta *gauss=NULL;
++
++	/*If on water or not Stokes, skip stiffness: */
++	inputs->GetInputValue(&approximation,ApproximationEnum);
++	if(IsFloating() || !IsOnBed() || (approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum)) return NULL;
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++
++	/*build friction object, used later on: */
++	friction=new Friction("3d",inputs,matpar,analysis_type);
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussPenta(0,1,2,2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
++		GetLStokes(&LStokes[0][0], gauss);
++
++		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
++		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++
++		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
++
+ 		DLStokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
+ 		DLStokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15424)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15425)
+@@ -41,9 +41,11 @@
+ 		void GetBMacAyealStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBStokesGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimePattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeStokes(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBprimeStokesGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBAdvec(IssmDouble* B_advec, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBConduct(IssmDouble* B_conduct, IssmDouble* xyz_list, GaussPenta* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15424)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15425)
+@@ -248,7 +248,9 @@
+ 		ElementMatrix* CreateKMatrixDiagnosticPattynStokes(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticStokes(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticStokesViscous(void);
++		ElementMatrix* CreateKMatrixDiagnosticStokesGLSViscous(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticStokesFriction(void);
++		ElementMatrix* CreateKMatrixDiagnosticStokesGLSFriction(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVert(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVertVolume(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVertSurface(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15425-15426.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15425-15426.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15425-15426.diff	(revision 16134)
@@ -0,0 +1,2691 @@
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/Contents.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/Contents.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/Contents.m	(revision 15426)
+@@ -1,16 +0,0 @@
+-% Utilities for coloring with MATLAB by Carlos Vargas.
+-%
+-% COLORMAP utilites:
+-%   cmapping - Colormap linear mapping/interpolation.                        v1.1    (Sep 02, 2009)
+-%   cmfit    - Sets the COLORMAP and CAXIS to specific color bands.          v1.0    (Jun 08, 2009)
+-%   cmjoin   - Joins colormaps at certain levels.                            v2.0    (Jun 08, 2009)
+-%   cmlines  - Change the color of plotted lines using the colormap.         v1.0    (Jun 08, 2009)
+-%
+-% COLORBAR utilities:
+-%   cbfit    - Draws a colorbar with specific color bands between its ticks. v2.1    (Sep 30, 2009)
+-%   cbfreeze - Freezes the colormap of a colorbar.                           v1.1    (Sep 02, 2009)
+-%   cbhandle - Handle of current colorbar axes.                              v1.1    (Aug 20, 2009)
+-%   cblabel  - Adds a label to the colorbar.                                 v2.0    (Jun 08, 2009)
+-%   cbunits  - Adds units to the colorbar ticklabels.                        v3.0    (Sep 30, 2009)
+-%
+-% Sep 30, 2009
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmapping.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmapping.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmapping.m	(revision 15426)
+@@ -1,515 +0,0 @@
+-function RGB = cmapping(varargin)
+-%CMAPPING   Colormap linear mapping/interpolation.
+-%
+-%   SYNTAX:
+-%           cmapping
+-%           cmapping(U)
+-%           cmapping(U,CMAP)
+-%           cmapping(U,CMAP,...,CNAN)
+-%           cmapping(U,CMAP,...,TYPE)
+-%           cmapping(U,CMAP,...,MODE)
+-%           cmapping(U,CMAP,...,MAPS)
+-%           cmapping(U,CMAP,...,CLIM)
+-%           cmapping(AX,...)
+-%     RGB = cmapping(...);
+-%
+-%   INPUT:
+-%     U     - May be one of the following options:
+-%              a) An scalar specifying the output M number of colors.
+-%              b) A vector of length M specifying the values at which
+-%                 the function CMAP(IMAP) will be mapped.
+-%              c) A matrix of size M-by-N specifying intensities to be
+-%                 mapped to an RGB (3-dim) image. May have NaNs elements. 
+-%             DEFAULT: Current colormap length.
+-%     CMAP  - A COLORMAP defined by its name or handle-function or RGB
+-%             matrix (with 3 columns) or by a combination of colors chars
+-%             specifiers ('kbcw', for example) to be mapped. See NOTE below
+-%             for more options.
+-%             DEFAULT: Current colormap
+-%     CNAN  - Color for NaNs values on U, specified by a 1-by-3 RGB color
+-%             or a char specifier.
+-%             DEFAULT: Current axes background (white color: [1 1 1])
+-%     TYPE  - String specifying the result type. One of:
+-%               'colormap'  Forces a RGB colormap matrix result (3 columns)
+-%               'image'     Forces a RGB image result (3 dimensions)
+-%             DEFAULT: 'image' if U is a matrix, otherwise is 'colormap'
+-%     MODE  - Defines the mapping way. One of:
+-%               'discrete'     For discrete colors
+-%               'continuous'   For continuous color (interpolates)
+-%             DEFAULT: 'continuous' (interpolates between colors)
+-%     MAPS  - Specifies the mapping type. One of (see NOTES below):
+-%               'scaled'   Scales mapping, also by using CLIM (as IMAGESC).
+-%               'direct'   Do not scales the mapping (as IMAGE).
+-%             DEFAULT: 'scaled' (uses CLIM)
+-%     CLIM  - Two element vector that, if given, scales the mapping within
+-%             this color limits. Ignored if 'direct' is specified.
+-%             DEFAULT: [0 size(CMAP,1)] or [0 1].
+-%     AX    - Uses specified axes or figure handle to set/get the colormap.
+-%             If used, must be the first input.
+-%             DEFAULT: gca
+-%
+-%   OUTPUT (all optional):
+-%     RGB - If U is not a matrix, this is an M-by-3 colormap matrix with
+-%           RGB colors in its rows, otherwise is an RGB image: M-by-N-by-3,
+-%           with the color red intensities defined by RGB(:,:,1), the green
+-%           ones by RGB(:,:,2) and the blue ones by RGB(:,:,3).
+-%
+-%   DESCRIPTION:
+-%     This functions has various functionalities like: colormap generator,
+-%     colormap expansion/contraction, color mapping/interpolation, matrix
+-%     intensities convertion to RGB image, etc.
+-%
+-%     The basic idea is a linear mapping between the CMAP columns
+-%     [red green blue] and the U data, ignoring its NaNs.
+-%
+-%   NOTE:
+-%     * Optional inputs use its DEFAULT value when not given or [].
+-%     * Optional outputs may or not be called.
+-%     * If a single value of U is required for interpolation, use [U U].
+-%     * If the char '-' is used before the CMAP name, the colors will be
+-%       flipped. The same occurs if U is a negative integer.
+-%
+-%   EXAMPLE:
+-%     % Colormaps:
+-%       figure, cmapping( 256,'krgby')            , colorbar
+-%       figure, cmapping(-256,'krgby' ,'discrete'), colorbar
+-%       figure, cmapping(log(1:100),[],'discrete'), colorbar
+-%     % Images:
+-%       u = random('chi2',2,20,30); u(15:16,7:9) = NaN;
+-%       u = peaks(30);  u(15:16,7:9) = NaN;
+-%       v = cmapping(u,jet(64),'discrete','k');
+-%       w = cmapping(u,cmapping(log(0:63),'jet','discrete'),'discrete');
+-%       figure, imagesc(u), cmapping(64,'jet'), colorbar
+-%        title('u')
+-%       figure, imagesc(v), cmapping(64,'jet'), colorbar
+-%        title('u transformed to RGB (look the colored NaNs)')
+-%       figure, imagesc(w) ,cmapping(64,'jet'), colorbar
+-%        title('u mapped with log(colormap)')
+-%       figure, imagesc(u), cmapping(log(0:63),'jet','discrete'), colorbar
+-%        title('u with log(colormap)')
+-%    
+-%   SEE ALSO:
+-%     COLORMAP, IND2RGB
+-%     and
+-%     CMJOIN by Carlos Vargas
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cmapping.m
+-%   VERSION: 1.1 (Sep 02, 2009) (<a href="matlab:web('http://www.mathworks.com/matlabcentral/fileexchange/authors/11258')">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0      Released. (Jun 08, 2009)
+-%   1.0.1    Fixed little bug with 'm' magenta color. (Jun 30, 2009)
+-%   1.1      Fixed BUG with empty CMAP, thanks to Andrea Rumazza. (Sep 02,
+-%            2009) 
+-
+-%   DISCLAIMER:
+-%   cmapping.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2009 Carlos Adrian Vargas Aguilera
+-
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Sets defaults:
+-AX     = {};                     % Calculated inside.
+-U      = [];                     % Calculated inside.
+-CMAP   = [];                     % Calculated inside.
+-TYPE   = 'colormap';             % Changes to 'image' if U is a matrix.
+-CLIM   = [];                     % To use in scaling
+-CNAN   = [1 1 1];                % White 'w'
+-MODE   = 'continuous';           % Scaling to CLIM
+-MAPS   = 'scaled';               % Scaled mapping
+-method = 'linear';               % Interpolation method
+-mflip  = false;                  % Flip the colormap
+-
+-% Gets figure handle and axes handle (just in case the default colormap or
+-% background color axes will be used.
+-HF     = get(0,'CurrentFigure');
+-HA     = [];
+-if ~isempty(HF)
+- HA    = get(HF,'CurrentAxes');
+- if ~isempty(HA)
+-  CNAN = get(HA,'Color');        % NaNs colors
+- end
+-end
+-
+-% Checks inputs:
+-if nargin>8
+- error('CVARGAS:cmapping:tooManyInputs', ...
+-  'At most 8 inputs are allowed.')
+-elseif nargout>1
+- error('CVARGAS:cmapping:tooManyOutputs', ...
+-  'At most 1 output is allowed.')
+-end
+-
+-% Checks AX:
+-if (~isempty(varargin)) && ~isempty(varargin{1}) && ...
+-  (numel(varargin{1})==1) && ishandle(varargin{1}) && ...
+-  strcmp(get(varargin{1},'Type'),'axes')
+- % Gets AX and moves all other inputs to the left:
+- AX          = varargin(1);
+- HA          = AX{1};
+- CNAN        = get(HA,'Color');
+- varargin(1) = [];
+-end
+-
+-% Checks U:
+-Nargin = length(varargin);
+-if ~isempty(varargin)
+- U           = varargin{1};
+- varargin(1) = [];
+-end
+-
+-% Checks CMAP:
+-if ~isempty(varargin)
+- CMAP        = varargin{1};
+- varargin(1) = []; 
+-end
+-
+-% Checks input U, if not given uses as default colormap length:
+-% Note: it is not converted to a vector in case CMAP is a function and IMAP
+-%       was not given.
+-if isempty(U)
+- % Gets default COLORMAP length:
+- if ~isempty(HA)
+-  U = size(colormap(HA),1);
+- else
+-  U = size(get(0,'DefaultFigureColormap'),1);
+- end
+-elseif ndims(U)>2
+- error('CVARGAS:cmapping:incorrectXInput', ...
+-  'U must be an scalar, a vector or a 2-dimensional matrix.')
+-end
+-
+-% Checks input CMAP:
+-if isempty(CMAP)
+- % CMAP empty, then uses default:
+- if ~isempty(HA)
+-  CMAP = colormap(HA);
+-  if isempty(CMAP) % Fixed BUG, Sep 2009.
+-   CMAP = get(0,'DefaultFigureColormap');
+-   if isempty(CMAP)
+-    CMAP = jet(64);
+-   end
+-  end
+- else
+-  CMAP = get(0,'DefaultFigureColormap');
+-  if isempty(CMAP)
+-   CMAP = jet(64);
+-  end
+- end
+- Ncmap = size(CMAP,1);
+-elseif isnumeric(CMAP)
+- % CMAP as an [R G B] colormap:
+- Ncmap = size(CMAP,1);
+- if (size(CMAP,2)~=3) || ...
+-  ((min(CMAP(:))<0) || (max(CMAP(:))>1)) || any(~isfinite(CMAP(:)))
+-  error('CVARGAS:cmapping:incorrectCmapInput', ...
+-        'CMAP is an incorrect 3 columns RGB colors.')
+- end
+-elseif ischar(CMAP)
+- % String CMAP
+- % Checks first character:
+- switch CMAP(1)
+-  case '-'
+-   mflip = ~mflip;
+-   CMAP(1) = [];
+-   if isempty(CMAP)
+-    error('CVARGAS:cmapping:emptyCmapInput',...
+-     'CMAP function is empty.')
+-   end
+- end
+- if ~((exist(CMAP,'file')==2) || (exist(CMAP,'builtin')==5))
+-  % CMAP as a combination of color char specifiers:
+-  CMAP  = lower(CMAP);
+-  iy    = (CMAP=='y');
+-  im    = (CMAP=='m');
+-  ic    = (CMAP=='c');
+-  ir    = (CMAP=='r');
+-  ig    = (CMAP=='g');
+-  ib    = (CMAP=='b');
+-  iw    = (CMAP=='w');
+-  ik    = (CMAP=='k');
+-  Ncmap = length(CMAP);
+-  if (sum([iy im ic ir ig ib iw ik])~=Ncmap)
+-   error('CVARGAS:cmapping:incorrectCmapStringInput', ...
+-   ['String CMAP must be a valid colormap name or a combination of '...
+-    '''ymcrgbwk''.'])
+-  end
+-  % Convertion to [R G B]:
+-  CMAP       = zeros(Ncmap,3);
+-  CMAP(iy,:) = repmat([1 1 0],sum(iy),1);
+-  CMAP(im,:) = repmat([1 0 1],sum(im),1); % BUG fixed Jun 2009
+-  CMAP(ic,:) = repmat([0 1 1],sum(ic),1);
+-  CMAP(ir,:) = repmat([1 0 0],sum(ir),1);
+-  CMAP(ig,:) = repmat([0 1 0],sum(ig),1);
+-  CMAP(ib,:) = repmat([0 0 1],sum(ib),1);
+-  CMAP(iw,:) = repmat([1 1 1],sum(iw),1);
+-  CMAP(ik,:) = repmat([0 0 0],sum(ik),1);
+- else
+-  % CMAP as a function name
+-  % Changes function name to handle:
+-  CMAP = str2func(CMAP);
+-  Ncmap = []; % This indicates a CMAP function input
+- end
+-elseif isa(CMAP,'function_handle')
+- Ncmap = []; % This indicates a CMAP function input
+-else
+- % CMAP input unrecognized:
+- error('CVARGAS:cmapping:incorrectCmapInput', ...
+-  'Not recognized CMAP input.') 
+-end
+-
+-% Checks CMAP function handle:
+-if isempty(Ncmap)
+- % Generates the COLORMAP from function:
+- try
+-  temp = CMAP(2);
+-  if ~all(size(temp)==[2 3]) || any(~isfinite(temp(:))), error(''), end
+-  clear temp
+- catch
+-  error('CVARGAS:cmapping:incorrectCmapFunction', ...
+-   ['CMAP function ''' func2str(CMAP) ''' must result in RGB colors.'])
+- end
+-end
+-
+-% Checks varargin:
+-while ~isempty(varargin)
+- if     isempty(varargin{1})
+-  % continue
+- elseif ischar(varargin{1})
+-  % string input
+-  switch lower(varargin{1})
+-   % CNAN:
+-   case 'y'         , CNAN = [1 1 0];
+-   case 'm'         , CNAN = [1 0 0];
+-   case 'c'         , CNAN = [0 1 1];
+-   case 'r'         , CNAN = [1 0 0];
+-   case 'g'         , CNAN = [0 1 0];
+-   case 'b'         , CNAN = [0 0 1];
+-   case 'w'         , CNAN = [1 1 1];
+-   case 'k'         , CNAN = [0 0 0];
+-   % MODE:
+-   case 'discrete'  , MODE = 'discrete';
+-   case 'continuous', MODE = 'continuous';
+-   % TYPE:
+-   case 'colormap'  , TYPE = 'colormap';
+-   case 'image'     , TYPE = 'image';
+-   % MAPS:
+-   case 'direct'    , MAPS = 'direct';
+-   case 'scaled'    , MAPS = 'scaled';
+-   % Incorrect input:
+-   otherwise
+-    error('CVARGAS:cmapping:incorrectStringInput',...
+-     ['Not recognized optional string input: ''' varargin{1} '''.'])
+-  end
+- elseif isnumeric(varargin{1}) && all(isfinite(varargin{1}(:)))
+-  % numeric input
+-  nv = numel(varargin{1});
+-  if (nv==3) && (size(varargin{1},1)==1)
+-   % CNAN:
+-   CNAN = varargin{1}(:)';
+-   if (max(CNAN)>1) || (min(CNAN)<0)
+-    error('CVARGAS:cmapping:incorrectCnanInput',...
+-     'CNAN elements must be between 0 and 1.')
+-   end
+-  elseif (nv==2) && (size(varargin{1},1)==1)
+-   % CLIM:
+-   CLIM = sort(varargin{1},'ascend');
+-   if (diff(CLIM)==0)
+-    error('CVARGAS:cmapping:incorrectClimValues',...
+-     'CLIM must have 2 distint elements.')
+-   end
+-  else
+-   error('CVARGAS:cmapping:incorrectNumericInput',...
+-   'Not recognized numeric input.')
+-  end
+- else
+-  error('CVARGAS:cmapping:incorrectInput',...
+-   'Not recognized input.')
+- end
+- % Clears current optional input:
+- varargin(1) = [];
+-end % while
+-
+-
+-% -------------------------------------------------------------------------
+-% MAIN
+-% -------------------------------------------------------------------------
+-
+-% U size:
+-[m,n] = size(U);
+-mn    = m*n;
+-
+-% Checks TYPE:
+-if ~any([m n]==1)
+- % Forces image TYPE if U is a matrix:
+- TYPE = 'image';
+-elseif strcmp(TYPE,'colormap') && ~nargout && isempty(AX)
+- % Changes the colormap on the specified or current axes if no output
+- % argument:
+- AX = {gca};
+-end
+-
+-% Forces positive integer if U is an scalar, and flips CMAP if is negative:
+-if (mn==1)
+- U = round(U);
+- if (U==0)
+-  if ~nargout && strcmp(TYPE,'colormap')
+-   warning('CVARGAS:cmapping:incorrectUInput',...
+-    'U was zero and produces no colormap')
+-  else
+-   RGB = [];
+-  end
+-  return
+- elseif (U<0)
+-  mflip = ~mflip;
+-  U     = abs(U);
+- end
+-end
+-
+-% Gets CMAP from function handle:
+-if isempty(Ncmap)
+- if (mn==1)
+-  % From U:
+-  Ncmap = U(1);
+- else
+-  % From default colormap:
+-  if ~isempty(HA)
+-   Ncmap = size(colormap(HA),1);
+-  else
+-   Ncmap = size(get(0,'DefaultFigureColormap'),1);
+-  end
+- end
+- CMAP = CMAP(Ncmap);
+-end
+-
+-% Flips the colormap
+-if mflip
+- CMAP = flipud(CMAP);
+-end
+-
+-% Check CMAP when U is an scalar::
+-if (mn==1) && (U==Ncmap)
+- % Finishes:
+- if ~nargout && strcmp(TYPE,'colormap')
+-  if Nargin==0
+-   RGB = colormap(AX{:},CMAP);
+-  else
+-   colormap(AX{:},CMAP)
+-  end
+- else
+-  RGB = CMAP;
+-  if strcmp(TYPE,'image')
+-   RGB = reshape(RGB,Ncmap,1,3);
+-  end
+- end
+- return
+-end
+-
+-% Sets scales:
+-if strcmp(MAPS,'scaled')
+- % Scaled mapping:
+- if ~isempty(CLIM)
+-  if (mn==1)
+-   mn = U;
+-   U = linspace(CLIM(1),CLIM(2),mn)';
+-  else
+-   % Continue  
+-  end
+- else
+-  CLIM = [0 1];
+-  if (mn==1)
+-   mn = U;
+-   U = linspace(CLIM(1),CLIM(2),mn)';
+-  else
+-   % Scales U to [0 1]:
+-   U = U-min(U(isfinite(U(:))));
+-   U = U/max(U(isfinite(U(:))));
+-   % Scales U to CLIM:
+-   U = U*diff(CLIM)+CLIM(1);
+-  end
+- end
+-else
+- % Direct mapping:
+- CLIM = [1 Ncmap];
+-end
+-
+-% Do not extrapolates:
+-U(U<CLIM(1)) = CLIM(1);
+-U(U>CLIM(2)) = CLIM(2);
+-
+-% Sets CMAP argument:
+-umap = linspace(CLIM(1),CLIM(2),Ncmap)';
+-
+-% Sets U:
+-if (mn==2) && (U(1)==U(2))
+- % U = [Uo Uo] implicates U = Uo:
+- U(2) = [];
+- mn   = 1;
+- m    = 1;
+- n    = 1;
+-end
+-
+-% Sets discretization:
+-if strcmp(MODE,'discrete')
+- umap2 = linspace(umap(1),umap(end),Ncmap+1)';
+- for k = 1:Ncmap
+-  U((U>umap2(k)) & (U<=umap2(k+1))) = umap(k);
+- end
+- clear umap2
+-end
+-
+-% Forces column vector:
+-U = U(:);
+-
+-% Gets finite data:
+-inan = ~isfinite(U);
+-
+-% Initializes:
+-RGB  = repmat(reshape(CNAN,[1 1 3]),[mn 1 1]);
+-
+-% Interpolates:
+-if (Ncmap>1) && (sum(~inan)>1)
+- [Utemp,a,b]    = unique(U(~inan));
+- RGBtemp = [...
+-  interp1(umap,CMAP(:,1),Utemp,method) ...
+-  interp1(umap,CMAP(:,2),Utemp,method) ...
+-  interp1(umap,CMAP(:,3),Utemp,method) ...
+-  ];
+- RGB(~inan,:) = RGBtemp(b,:);
+-else
+- % single color:
+- RGB(~inan,1,:) = repmat(reshape(CMAP,[1 1 3]),[sum(~inan) 1 1]);
+-end
+-
+-% Just in case
+-RGB(RGB>1) = 1; 
+-RGB(RGB<0) = 0;
+-
+-% OUTPUTS CHECK-OUT
+-% -------------------------------------------------------------------------
+-
+-% Output type:
+-if strcmp(TYPE,'colormap')
+- RGB = reshape(RGB,mn,3);
+- if ~isempty(AX)
+-  colormap(AX{:},RGB)
+-  if ~nargout 
+-   clear RGB
+-  end
+- end
+-else
+- RGB = reshape(RGB,[m n 3]);
+-end
+-
+-
+-% [EOF]   cmapping.m
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmjoin.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmjoin.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmjoin.m	(revision 15426)
+@@ -1,462 +0,0 @@
+-function [CMAP,LEV,WID,CLIM] = cmjoin(varargin)
+-%CMJOIN   Joins colormaps at certain levels.
+-%
+-%   SYNTAX:
+-%                           cmjoin(CMAPS)
+-%                           cmjoin(CMAPS,LEV)
+-%                           cmjoin(CMAPS,LEV,WID)
+-%                           cmjoin(CMAPS,LEV,WID,CLIM)
+-%                           cmjoin(AX,...)
+-%     [CMAP,LEV,WID,CLIM] = cmjoin(...);
+-%
+-%   INPUT:
+-%     CMAPS - Cell with the N colormaps handles, names or RGB colors to be
+-%             joined. See NOTE below.
+-%     LEV   - One of:
+-%               a) N-1 scalars specifying the color levels where the
+-%                  colormaps will be joined (uses CAXIS). See NOTE below.
+-%               b) N integers specifying the number of colors for each
+-%                  colormap.
+-%               c) N+1 scalars specifying the color limits for each
+-%                  colormap (sets CAXIS). See NOTE below.
+-%             DEFAULT: Tries to generate a CMAP with default length.
+-%     WID   - May be one (or N) positive scalar specifying the width for
+-%             every (or each) color band. See NOTE below.
+-%             DEFAULT: uses CAXIS and LEV to estimate it.  
+-%     CLIM  - 2 elements row vector specifying the color limits values. May
+-%             be changed at the end, because of the discretization of the
+-%             colormaps.
+-%             DEFAULT: uses CAXIS or [0 1] if there are no axes.
+-%     AX    - Uses the specified axes handle to get/set the CMAPS. If used,
+-%             must be the first input.
+-%             DEFAULT: gca
+-%
+-%   OUTPUT (all optional):
+-%     CMAP - RGB colormap output matrix, M-by-3.
+-%     LEV  - Final levels used.
+-%     WID  - Final widths used.
+-%     CLIM - Final color limits used.
+-%
+-%   DESCRIPTION:
+-%     This function join two colormaps at specific level. Useful for
+-%     joining colormaps at zero (for example) and distinguish from positive
+-%     and negative values.
+-%
+-%   NOTE:
+-%     * Optional inputs use its DEFAULT value when not given or [].
+-%     * Optional outputs may or not be called.
+-%     * If no output is required or an axes handle were given, the current
+-%       COLORMAP and CAXIS are changed.
+-%     * If any of the inputs on CMAPS is a function name, 'jet', for
+-%       example, it can be used backwards (because CMAPPING is used) if
+-%       added a '-' at the beggining of its name: '-jet'.
+-%     * When LEV is type b) and WID is specifyed, the latter is taken as
+-%       relative colorbans widths between colormaps.
+-%
+-%   EXAMPLE:
+-%     figure(1), clf, surf(peaks)
+-%     cmjoin({'copper','-summer'},2.5)
+-%      shading interp, colorbar, axis tight, zlabel('Meters')
+-%      title('Union at 2.5 m')
+-%     %
+-%     figure(2), clf, surf(peaks) 
+-%     cmjoin({'copper','-summer'},2.5,0.5)
+-%      shading interp, colorbar, axis tight, zlabel('Meters')
+-%      title('Union at 2.5 m and different color for each 0.5 m band')
+-%     %
+-%     figure(3), clf, surf(peaks)
+-%     cmjoin({'copper','summer'},2.5,[2 0.5])
+-%      shading interp, colorbar, axis tight, zlabel('Metros')
+-%      title('Union at 2.5 m with lengths 2 and 0.5')
+-%     %
+-%     figure(4), clf, surf(peaks)
+-%     cmjoin({'copper','summer'},[-10 2.5 10],[2 0.5])
+-%      shading interp, colorbar, axis tight, zlabel('Metros')
+-%      title('Union at 2.5 m with lengths 2 and 0.5 and specified levels')
+-%     %
+-%     figure(5), clf, surf(peaks)
+-%     cmjoin({'copper','summer'},[10 8],[4 1])
+-%      shading interp, colorbar, axis tight, zlabel('Metros')
+-%      title('Union at 2.5 m with specified levels number of colors and widths 4:1')
+-%    
+-%   SEE ALSO:
+-%     COLORMAP, COLORMAPEDITOR
+-%     and
+-%     CMAPPING by Carlos Vargas
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cmjoin.m
+-%   VERSION: 2.0 (Jun 08, 2009) (<a href="matlab:web('http://www.mathworks.com/matlabcentral/fileexchange/authors/11258')">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0       Released as SETCOLORMAP. (Nov 07, 2006)
+-%   1.1       English translation. (Nov 11, 2006)
+-%   2.0       Rewritten and renamed code (from SETCOLORMAPS to CMJOIN. Now
+-%             joins multiple colormaps. Inputs changed. (Jun 08, 2009)
+-
+-%   DISCLAIMER:
+-%   cmjoin.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2006,2009 Carlos Adrian Vargas Aguilera
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Parameters:
+-tol  = 1;            % When rounding the levels.
+-
+-% Checks inputs and outputs number:
+-if nargin<1
+- error('CVARGAS:cmjoin:notEnoughInputs',...
+-  'At least 1 input is required.')
+-end
+-if nargin>5
+- error('CVARGAS:cmjoin:tooManyInputs',...
+-  'At most 5 inputs are allowed.')
+-end
+-if nargout>4
+- error('CVARGAS:cmjoin:tooManyOutputs',...
+-  'At most 4 outputs are allowed.')
+-end
+-
+-% Checks AX:
+-AX = {get(get(0,'CurrentFigure'),'CurrentAxes')};
+-if isempty(AX{1})
+- AX = {};
+-end
+-if (length(varargin{1})==1) && ishandle(varargin{1}) && ...
+-  strcmp(get(varargin{1},'Type'),'axes')
+- AX = varargin(1);
+- varargin(1) = [];
+- if isempty(varargin)
+-  error('CVARGAS:cmjoin:notEnoughInputs',...
+-   'CMAPS input must be given.')
+- end
+-end
+-
+-% Checks CMAPS:
+-CMAPS  = varargin{1};
+-Ncmaps = length(CMAPS);
+-if ~iscell(CMAPS) || (Ncmaps<2)
+- error('CVARGAS:cmjoin:incorrectCmapsType',...
+-  'CMAPS must be a cell input with at least 2 colormaps.')
+-end
+-varargin(1) = [];
+-Nopt        = length(varargin);
+-
+-% Checks LEV and sets Ncol and Jlev:
+-Ncol = []; % Number of colors for each colormap.
+-Jlev = []; % Join levels.
+-LEV  = []; % Levels at which each CMAPS begins and ends.
+-if (Nopt<1) || isempty(varargin{1})
+- % continue as empty
+-elseif ~all(isfinite(varargin{1}(:)))
+- error('CVARGAS:cmjoin:incorrectLevValue',...
+-  'LEV must be integers or scalars.')
+-else
+- Nopt1 = length(varargin{1}(:));
+- if (Nopt1==Ncmaps)
+-  % Specifies number of colors:
+-  Ncol = varargin{1}(:);
+-  if ~all(Ncol==round(Ncol))
+-   error('CVARGAS:cmjoin:incorrectLevInput',...
+-    'LEV must be integers when defines number of colors.')
+-  end
+- elseif ~all(sort(varargin{1})==varargin{1})
+-  error('CVARGAS:cmjoin:incorrectLevInput',...
+-   'LEV must be monotonically increasing.')
+- elseif Nopt1==(Ncmaps-1) 
+-  Jlev = varargin{1}(:);
+- elseif Nopt1==(Ncmaps+1)
+-  LEV = varargin{1}(:);
+- else
+-  error('CVARGAS:cmjoin:incorrectLevLength',...
+-   'LEV must have any of length(CMAPS)+[-1 0 1] elements.')
+- end
+-end
+-
+-% Checks WID:
+-Tcol = []; % Total number of colors for output colormap.
+-if (Nopt<2) || isempty(varargin{2})
+- % Tries to generate a colormap with default length with every colorband
+- % of the same width:
+- WID = [];
+- if ~isempty(AX)
+-  Tcol = size(colormap(AX{:}),1);
+- else
+-  Tcol = size(get(0,'DefaultFigureColormap'),1);
+- end
+-else
+- WID = varargin{2}(:);
+- WID(~isfinite(WID) | (WID<0)) = 0;
+- if ~any(WID>0)
+-  error('CVARGAS:cmjoin:incorrectWidInput',...
+-   'At least one WID must be positive.')
+- end
+- if length(WID)==1
+-  WID = repmat(abs(varargin{2}),Ncmaps,1);
+- elseif length(WID)~=Ncmaps
+-  error('CVARGAS:cmjoin:incorrectWidLength',...
+-   'WID must have length 1 or same as CMAPS.')
+- end
+-end
+-
+-% Checks CLIM:
+-if (Nopt<3) || isempty(varargin{3})
+- % Sets default CLIM:
+- if ~isempty(LEV)
+-  CLIM = [LEV(1) LEV(end)];
+- elseif ~isempty(AX)
+-  CLIM = caxis(AX{:});
+- else
+-  CLIM = [0 1];
+- end
+-else
+- CLIM = varargin{3}(:).';
+- if (length(CLIM)==2) && (diff(CLIM)>0) && isfinite(diff(CLIM))
+-  % continue
+- else
+-  error('CVARGAS:cmjoin:incorrectClimInput',...
+-   'CLIM must be a valid color limits. See CAXIS for details.')
+- end
+-end
+-
+-
+-% -------------------------------------------------------------------------
+-% MAIN
+-% -------------------------------------------------------------------------
+-
+-% Gets rounding precision:
+-temp = warning('off','MATLAB:log:logOfZero');
+-if ~isempty(WID)
+- tempp               = WID;
+- precision           = floor(log10(abs(tempp)));
+- precision(tempp==0) = 0;
+- precision           = min(precision)-tol;
+- % Rounds:
+- WID   = round(WID*10^(-precision))*10^precision;
+- if ~isempty(LEV)
+-  LEV(1)        = floor(LEV(1)       *10^(-precision))*10^precision;
+-  LEV(2:end-1)  = round(LEV(2:end-1) *10^(-precision))*10^precision;
+-  LEV(end)      = ceil(LEV(end)      *10^(-precision))*10^precision;
+- elseif ~isempty(Jlev)
+-  Jlev(1)       = floor(Jlev(1)      *10^(-precision))*10^precision;
+-  Jlev(2:end-1) = round(Jlev(2:end-1)*10^(-precision))*10^precision;
+-  Jlev(end)     = ceil(Jlev(end)     *10^(-precision))*10^precision;
+- end
+-elseif ~isempty(LEV)
+- tempp               = diff(LEV);
+- precision           = floor(log10(abs(tempp)));
+- precision(tempp==0) = 0;
+- precision           = min(precision)-tol;
+- % Rounds:
+- LEV(1)       = floor(LEV(1)      *10^(-precision))*10^precision;
+- LEV(2:end-1) = round(LEV(2:end-1)*10^(-precision))*10^precision;
+- LEV(end)     = ceil(LEV(end)     *10^(-precision))*10^precision;
+-elseif ~isempty(Jlev)
+- tempp               = diff(Jlev);
+- if isempty(tempp)
+-  tempp              = Jlev;
+- end
+- precision           = floor(log10(abs(tempp)));
+- precision(tempp==0) = 0;
+- precision           = min(precision)-tol;
+- % Rounds:
+- if length(Jlev)==1
+-  Jlev          = round(Jlev*10^(-precision))*10^precision;
+- else
+-  Jlev(1)       = floor(Jlev(1)      *10^(-precision))*10^precision;
+-  Jlev(2:end-1) = round(Jlev(2:end-1)*10^(-precision))*10^precision;
+-  Jlev(end)     = ceil(Jlev(end)     *10^(-precision))*10^precision;
+- end
+-else
+- tempp               = CLIM;
+- precision           = floor(log10(abs(tempp)));
+- precision(tempp==0) = 0;
+- precision           = min(precision)-tol;
+-end
+-% Rounds:
+-CLIM(1) = floor(CLIM(1)*10^(-precision))*10^precision;
+-CLIM(2) =  ceil(CLIM(2)*10^(-precision))*10^precision;
+-warning(temp.state,'MATLAB:log:logOfZero')
+-
+-% Completes levels when only join levels are specified:
+-if ~isempty(Jlev)
+- cedge = CLIM;
+- % First limit:
+- if cedge(1)<=Jlev(1)
+-  if ~isempty(WID)
+-   cedge(1) = Jlev(1);
+-   if WID(1)~=0
+-    cedge(1) = cedge(1) - WID(1)*ceil((Jlev(1)-CLIM(1))/WID(1));
+-   end
+-  else
+-   % continue
+-  end
+- else
+-  if (Ncmaps==2)
+-   cedge(1) = Jlev(1);
+-  else
+-   for k = 2:length(Jlev)
+-    if cedge(1)<=Jlev(k)
+-     cedge(1) = Jlev(k-1);
+-     break
+-    else
+-     Jlev(k-1) = Jlev(k);
+-    end
+-   end
+-  end
+- end
+- % Last limit:
+- if cedge(2)>=Jlev(end)
+-  if ~isempty(WID)
+-   cedge(2) = Jlev(end);
+-   if WID(end)~=0
+-    cedge(2) = cedge(2) + WID(end)*ceil((CLIM(2)-Jlev(end))/WID(end));
+-   end
+-  else
+-   % continue
+-  end
+- else
+-  if (Ncmaps==2)
+-   cedge(2) = Jlev(end);
+-  else
+-   for k = length(Jlev)-1:-1:1
+-    if cedge(2)>=Jlev(k)
+-     cedge(2) = Jlev(k+1);
+-     break
+-    else
+-     Jlev(k+1) = Jlev(k);
+-    end
+-   end
+-  end
+- end
+- % New Levels:
+- LEV = [cedge(1); Jlev; cedge(2)];
+- 
+-end
+-
+-% Gets colorband width and sets WID:
+-if ~isempty(Ncol)
+- if isempty(WID)
+-  % Treats all colorbands with equal widths:
+-  Cwid = diff(CLIM)/sum(abs(Ncol));
+-  Cwid = round(Cwid*10^(-(precision-1)))*10^(precision-1);
+-  WID  = repmat(Cwid,Ncmaps,1);
+-  LEV  = [CLIM(1); CLIM(1)+cumsum(abs(Ncol))*Cwid];
+- else
+-  % Treats WID as colorbands withs relations:
+-  WID   = WID/min(WID(WID~=0));
+-  Ncol2 = WID.*Ncol;
+-  Cwid  = diff(CLIM)/sum(abs(Ncol2));
+-  Cwid  = round(Cwid*10^(-(precision-1)))*10^(precision-1);
+-  WID   = WID*Cwid;
+-  LEV   = [CLIM(1); CLIM(1)+cumsum(abs(Ncol2))*Cwid];
+- end
+-elseif ~isempty(WID)
+- % Gets colorband width:
+- Cwid  = WID(1)*10^(-precision);
+- for k = 2:Ncmaps
+-  Cwid = gcd(Cwid,WID(k)*10^(-precision));
+- end
+- Cwid  = Cwid*10^precision;
+-else
+- % Gets relation between colomaps width:
+- if isempty(LEV)
+-  r    = ones(Ncmaps,1);
+-  d    = diff(CLIM);
+- else
+-  r         = diff(LEV);
+-  temp      = warning('off','MATLAB:log:logOfZero');
+-  precision = floor(log10(abs(r))); % r = Str.XXX x 10^precision.
+-  precision(r==0) = 0; % precision=0 if Ncol=0.
+-  warning(temp.state,'MATLAB:log:logOfZero')
+-  precision = min(precision)-tol;
+-  r  = round(r*10^(-precision));
+-  rgcd  = r(1);
+-  for k = 2:Ncmaps
+-   rgcd = gcd(rgcd,r(k));
+-  end
+-  r = r/rgcd;
+-  d = (LEV(end)-LEV(1));
+- end
+- % Gets colorband width:
+- r    = r*ceil(Tcol/sum(r));
+- Cwid = d/sum(r);
+- WID  = repmat(Cwid,Ncmaps,1);
+-end
+-
+-% Sets LEV when empty:
+-if isempty(LEV)
+- LEV = linspace(CLIM(1),CLIM(2),Ncmaps+1)';
+-end
+-
+-% Gets number of colors for each colormap:
+-Ncol2 = round(diff(LEV)/Cwid);
+-if ~isempty(Ncol)
+- % continue
+-else
+- Ncol = round(diff(LEV)./WID);
+- Ncol(~isfinite(Ncol)) = 0;
+- if ~all(Ncol==round(Ncol))
+-  error('CVARGAS:cmjoin:incorrectWidColor',...
+-   'Colorband do not match each colormap width. Modify LEV or WID.')
+- end
+-end
+-
+-% Generates the colormaps:
+-CMAP  = zeros(sum(abs(Ncol2)),3);
+-xband = zeros(sum(abs(Ncol2))+1,1);
+-tempr = [];
+-for k = 1:Ncmaps
+- if Ncol(k)
+-  r          = sum(abs(Ncol2(1:k-1)))+(1:abs(Ncol2(k)));
+-  if Ncol(k)~=Ncol2(k)
+-   CMAP(r,:) = cmapping(Ncol2(k),cmapping(Ncol(k),CMAPS{k}),'discrete');
+-  else
+-   CMAP(r,:) = cmapping(Ncol(k),CMAPS{k});
+-  end
+-  tempr      = linspace(LEV(k),LEV(k+1),abs(Ncol2(k))+1)';
+-  xband(r)   = tempr(1:end-1); 
+- end
+-end
+-if ~isempty(tempr)
+- xband(end) = tempr(end);
+-end
+-
+-% Cuts edges:
+-ind = find((xband>=CLIM(1)) & (xband<=CLIM(2)));
+-if (ind(1)~=1) && ~(any(xband==CLIM(1)))
+- ind = [ind(1)-1; ind];
+-end
+-if (ind(end)~=length(ind)) && ~(any(xband==CLIM(2)))
+- ind = [ind; ind(end)+1];
+-end
+-CMAP  = CMAP(ind(1:end-1),:);
+-clim2 = xband(ind([1 end]));
+-
+-
+-% OUTPUTS CHECK-OUT
+-% -------------------------------------------------------------------------
+-
+-if ~nargout
+- colormap(AX{:},CMAP)
+- caxis(AX{:},clim2(:)');
+- clear CMAP
+-else
+- if ~isempty(AX)
+-  colormap(AX{:},CMAP)
+-  caxis(AX{:},clim2(:)');
+- end
+- CLIM = clim2;
+- WID  = diff(LEV)./max([Ncol ones(Ncmaps,1)],[],2);
+-end
+-
+-
+-% [EOF]   cmjoin.m
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbhandle.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbhandle.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbhandle.m	(revision 15426)
+@@ -1,93 +0,0 @@
+-function CBH = cbhandle(varargin)
+-%CBHANDLE   Handle of current colorbar axes.
+-%
+-%   SYNTAX:
+-%     CBH = cbhandle;
+-%     CBH = cbhandle(H);
+-%
+-%   INPUT:
+-%     H - Handles axes, figures or uipanels to look for colorbars.
+-%         DEFAULT: gca (current axes)
+-%
+-%   OUTPUT:
+-%     CBH - Color bar handle(s).
+-%
+-%   DESCRIPTION:
+-%     By default, color bars are hidden objects. This function searches for
+-%     them by its 'axes' type and 'Colorbar' tag.
+-%    
+-%   SEE ALSO:
+-%     COLORBAR
+-%     and
+-%     CBUNITS, CBLABEL, CBFREEZE by Carlos Vargas
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cbhandle.m
+-%   VERSION: 1.1 (Aug 20, 2009) (<a href="matlab:web('http://www.mathworks.com/matlabcentral/fileexchange/authors/11258')">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0      Released. (Jun 08, 2009)
+-%   1.1      Fixed bug with colorbar handle input. (Aug 20, 2009)
+-
+-%   DISCLAIMER:
+-%   cbhandle.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2009 Carlos Adrian Vargas Aguilera
+-
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Parameters:
+-axappname = 'FrozenColorbar'; % Peer axes application data with frozen
+-                              % colorbar handle.
+-
+-% Sets default:
+-H = get(get(0,'CurrentFigure'),'CurrentAxes');
+-
+-if nargin && ~isempty(varargin{1}) && all(ishandle(varargin{1}))
+- H = varargin{1};
+-end
+-
+-% -------------------------------------------------------------------------
+-% MAIN
+-% -------------------------------------------------------------------------
+-
+-% Looks for CBH:
+-CBH = [];
+-% set(0,'ShowHiddenHandles','on')
+-for k = 1:length(H)
+- switch get(H(k),'type')
+-  case {'figure','uipanel'}
+-   % Parents axes?:
+-   CBH = [CBH; ...
+-    findobj(H(k),'-depth',1,'Tag','Colorbar','-and','Type','axes')];
+-  case 'axes'
+-   % Peer axes?:
+-   hin  = double(getappdata(H(k),'LegendColorbarInnerList'));
+-   hout = double(getappdata(H(k),'LegendColorbarOuterList'));
+-   if     (~isempty(hin)  && ishandle(hin))
+-    CBH = [CBH; hin];
+-   elseif (~isempty(hout) && ishandle(hout))
+-    CBH = [CBH; hout];
+-   elseif isappdata(H(k),axappname)
+-    % Peer from frozen axes?:
+-    CBH = [CBH; double(getappdata(H(k),axappname))];
+-   elseif strcmp(get(H(k),'Tag'),'Colorbar') % Fixed BUG Aug 2009
+-    % Colorbar axes?
+-    CBH = [CBH; H(k)];
+-   end
+-  otherwise
+-   % continue
+- end
+-end
+-% set(0,'ShowHiddenHandles','off')
+-
+-
+-% [EOF]   cbhandle.m
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmfit.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmfit.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmfit.m	(revision 15426)
+@@ -1,360 +0,0 @@
+-function [CMAP,CLIM,WIDTH,REF,LEVELS] = ...
+-                                 cmfit(CMAP,CLIM,WIDTH,REF,CENTER,varargin) 
+-%CMFIT   Sets the COLORMAP and CAXIS to specific color bands. 
+-%
+-%   SYNTAX:
+-%                                      cmfit
+-%                                      cmfit(CMAP)
+-%                                      cmfit(CMAP,CLIM)
+-%                                      cmfit(CMAP,CLIM,WIDTH or LEVELS)
+-%                                      cmfit(CMAP,CLIM,WIDTH,REF)
+-%                                      cmfit(CMAP,CLIM,WIDTH,REF,CENTER)
+-%                                      cmfit(AX,...)
+-%     [CMAPF,CLIMF,WIDTHF,REFF,LEVF] = cmfit(...);
+-%
+-%   INPUT:
+-%     CMAP   - Fits the specified colormap function or RGB colors. 
+-%              DEFAULT: (current figure colormap)
+-%     CLIM   - 2 element vector spacifying the limits of CMAP. 
+-%              DEFAULT: (limits of a COLORBAR)
+-%     WIDTH  - Color band width (limits are computed with CAXIS) for each
+-%     or       band or a row vector specifying the LEVELS on each band (see
+-%     LEVELS   NOTE below).
+-%              DEFAULT: (fills the ticks of a COLORBAR)
+-%     REF    - Reference level to start any of the color bands.
+-%              DEFAULT: (generally the middle of CLIM)
+-%     CENTER - Logical specifying weather the colormap should be center in
+-%              the REF value or not.
+-%              DEFAULT: false (do not centers)
+-%     AX     - Uses the specified figure or axes handle.
+-%
+-%   OUTPUT (all optional):
+-%     CMAPF  - RGB fitted color map (with 3 columns).
+-%     CLIMF  - Limits of CMAPF.
+-%     WIDTHF - Width of fitted colorbands.
+-%     REFF   - Reference of fitted colorbands.
+-%     LEVF   - Levels for the color bands.
+-%
+-%   DESCRIPTION:
+-%     This program sets the current figure colormap with specified
+-%     band-widths of colors taking the CAXIS limits as reference. When the 
+-%     optional input argument CENTER is true, the colormap is moved and
+-%     expanded so its middle color will be right at REF. This will help for
+-%     distinguish between positive and negative values (REF=0).
+-%
+-%   NOTE:
+-%     * Optional inputs use its DEFAULT value when not given or [].
+-%     * Optional outputs may or not be called.
+-%     * When one of the first two inputs is missing, they are automatically
+-%       calculated by using a COLORBAR (created temporarly if necesary). In
+-%       this case CBHANDLE is necesary.
+-%     * When CMAP is used as output, the current figure colormap won't be
+-%       modificated. Use 
+-%         >> colormap(CMAP)
+-%       after this function, if necesary.
+-%     * When LEVELS are used instead of band WINDTH, it shoud be
+-%       monotonically increasing free of NaNs and of length equal to the
+-%       number of colors minus one, on the output colormap.
+-% 
+-%   SEE ALSO:
+-%     COLORMAP
+-%     and 
+-%     CMAPPING, CBFIT by Caros Vargas
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cmfit.m
+-%   VERSION: 1.0 (Jun 08, 2009) (<a href="matlab:web('http://www.mathworks.com/matlabcentral/fileexchange/authors/11258')">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0      Released. (Jun 08, 2009)
+-
+-%   DISCLAIMER:
+-%   cmfit.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2008,2009 Carlos Adrian Vargas Aguilera
+-
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Sets defaults: 
+-AX  = {};    % Axes input
+-tol = 1;     % Adds this tolerance to the decimal precision
+-hfig = {get(0,'CurrentFigure')};
+-if ~isempty(hfig)
+- hax = {get(hfig{1},'CurrentAxes')};
+- if isempty(hax{1}), hax = {}; end
+-else
+- hfig = {};
+- hax  = {};
+-end
+-
+-% Checks inputs:
+-if nargin>6
+- error('CVARGAS:cmfit:tooManyInputs', ...
+-  'At most 6 inputs are allowed.')
+-end
+-if nargin>5
+- error('CVARGAS:cmfit:tooManyOutputs', ...
+-  'At most 5 outputs are allowed.')
+-end
+-
+-% Saves number of arguments:
+-Nargin = nargin;
+-
+-% Checks AX input:
+-if (Nargin>0) && ~isempty(CMAP) && (numel(CMAP)==1) && ...
+-  ishandle(CMAP)
+- % Gets AX and moves all other inputs to the left:
+- AX = {CMAP};
+- switch get(AX{1},'Type')
+-  case 'axes'
+-   hax  = AX;
+-   hfig = {get(hax{1},'Parent')};
+-  case {'figure','uipanel'}
+-   hfig = {AX{1}};
+-   hax  = {get(hfig{1},'CurrentAxes')};
+-   if isempty(hax{1}), hax = {}; end
+-  otherwise
+-   error('CVARGAS:cmfit:incorrectAxHandle',...
+-    'AX must be a valid axes or figure handle.')
+- end
+- if (Nargin>1)
+-  CMAP = CLIM;
+-  if (Nargin>2)
+-   CLIM = WIDTH;
+-   if (Nargin>3)
+-    WIDTH = REF;
+-    if (Nargin>4)
+-     REF = CENTER;
+-     if (Nargin>5)
+-      CENTER = varargin{1};
+-     end
+-    end
+-   end
+-  end
+- end
+- Nargin = Nargin-1;
+-end
+-
+-% Checks CMAP input:
+-if Nargin<1 || isempty(CMAP)
+- if ~isempty(hax)
+-  CMAP = colormap(hax{1});
+- else
+-  CMAP = get(0,'DefaultFigureColormap');
+- end
+-end
+-
+-% Checks CLIM input:
+-if Nargin<2
+- CLIM = [];
+-end
+-
+-% Checks WIDTH input:
+-if Nargin<3
+- WIDTH = [];
+-end
+-
+-% Checks REf input:
+-if Nargin<4
+- REF = [];
+-end
+-
+-% Checks CENTER input:
+-if Nargin<5 || isempty(CENTER)
+- CENTER = false;
+-end
+-
+-% Look for WIDTH and REF from a (temporarly) colorbar:
+-if isempty(WIDTH) || (length(WIDTH)==1 && (isempty(REF) || ...
+-  (isempty(CLIM) && (isempty(hax) || ...
+-  ~strcmp(get(hax{1},'CLimMode'),'manual')))))
+- if ~isempty(CLIM)
+-  caxis(hax{:},CLIM)
+- end
+- if ~isempty(AX) && ~isempty(cbhandle(AX{1}))
+-  h = cbhandle(AX{1}); doclear = false; h = h(1);
+- elseif ~isempty(hax) && ~isempty(cbhandle(hax{1}))
+-  h = cbhandle(hax{1}); doclear = false; h = h(1);
+- elseif ~isempty(hfig) && ~isempty(cbhandle(hfig{1}))
+-  h = cbhandle(hfig{1}); doclear = false; h = h(1);
+- else
+-  h = colorbar; doclear = true;
+- end
+- ticks = get(h,'XTick');
+- lim   = get(h,'XLim');
+- if isempty(ticks)
+-  ticks = get(h,'YTick');
+-  lim   = get(h,'YLim');
+- end
+- if isempty(WIDTH)
+-  WIDTH = diff(ticks(1:2));
+- end
+- if isempty(CLIM)
+-  CLIM = lim;
+- end
+- if isempty(REF) && ~CENTER
+-  REF = ticks(1);
+- end
+- if doclear
+-  delete(h)
+- end
+-end
+-
+-% Centers at the middle:
+-if CENTER && isempty(REF)
+- REF = 0;
+-end 
+-
+-% -------------------------------------------------------------------------
+-% MAIN
+-% -------------------------------------------------------------------------
+-
+-
+-% Gets minimum width from specified levels:
+-NL = length(WIDTH); 
+-if (NL>1)
+- 
+- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+- % NONLINEAR CASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+- 
+- LEVELS = sort(WIDTH);
+- 
+- % Gets LEVELS width:
+- wLEVELS = diff(LEVELS);
+- 
+- % Scales to CLIM:
+- if ~isempty(CLIM)
+-  % Scales to [0 1]
+-  LEVELS = LEVELS-LEVELS(1);
+-  LEVELS = LEVELS/LEVELS(end);
+-  % Scales to CLIM:
+-  LEVELS = LEVELS*diff(CLIM)+CLIM(1);
+- else
+-  CLIM  = [LEVELS(1) LEVELS(end)]; 
+- end
+- 
+- % Gets precision:
+- if isinteger(wLEVELS) % Allows integer input: uint8, etc. 
+-  wLEVELS = double(wLEVELS);
+- end
+- temp = warning('off','MATLAB:log:logOfZero');
+- precision = floor(log10(abs(wLEVELS))); % wLEVELS = Str.XXX x 10^precision.
+- precision(wLEVELS==0) = 0; % M=0 if x=0.
+- warning(temp.state,'MATLAB:log:logOfZero')
+- precision = min(precision)-tol;
+- 
+- % Sets levels up to precision:
+- wLEVELS = round(wLEVELS*10^(-precision));
+- 
+- % Gets COLORMAP for each LEVEL:
+- if CENTER
+-  % Centers the colormap:
+-  ind = (REF==LEVELS);
+-  if ~any(ind)
+-   error('CVARGAS:cmfit:uncorrectRefLevel',...
+-    'When CENTER, REF level must be on of the specifyied LEVELS.')
+-  end
+-  Nl     = sum(~ind(1:find(ind)));
+-  [Nl,l] = max([Nl (NL-1-Nl)]);
+-  wCMAP  = cmapping(2*Nl,CMAP);
+-  if l==1
+-   wCMAP = wCMAP(1:NL-1,:);
+-  else
+-   wCMAP = wCMAP(end-NL+2:end,:);
+-  end
+- else
+-  wCMAP  = cmapping(NL-1,CMAP);
+- end
+- 
+- % Gets minimum band width:
+- WIDTH = wLEVELS(1);
+- for k = 1:NL-1
+-  wlev    = wLEVELS;
+-  wlev(k) = [];
+-  WIDTH   = min(min(gcd(wLEVELS(k),wlev)),WIDTH);
+- end
+- 
+- % Gets number of bands:
+- wLEVELS = wLEVELS/WIDTH;
+- 
+- % Gets new CMAP:
+- N = sum(wLEVELS);
+- try
+-  CMAP = repmat(wCMAP(1,:),N,1);
+- catch
+-  error('CVARGAS:cmfit:memoryError',...
+-   ['The number of colors (N=' int2str(N) ') for the new colormap ' ...
+-    'is extremely large. Try other LEVELS.'])
+- end
+- ko = wLEVELS(1);
+- for k = 2:NL-1;
+-  CMAP(ko+(1:wLEVELS(k)),:) = repmat(wCMAP(k,:),wLEVELS(k),1);
+-  ko = ko+wLEVELS(k);
+- end
+- 
+-else
+- 
+- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+- % LINEAR CASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+- 
+- % Gets CLIM:
+- if isempty(CLIM)
+-  CLIM = caxis(hax{:});
+- end
+-
+- % Sets color limits to be a multipler of WIDTH passing through REF:
+- N1   = ceil((+REF-CLIM(1))/WIDTH);
+- N2   = ceil((-REF+CLIM(2))/WIDTH);
+- CLIM = REF + [-N1 N2]*WIDTH;
+-
+- % Sets colormap with NC bands:
+- Nc = round(diff(CLIM)/WIDTH);
+- if CENTER
+-  % Necesary colorbands number to be centered:
+-  Nmin        = [N1 N2];
+-  [Nmax,imax] = max(Nmin);
+-  Nmin(imax)  = [];
+-  Nc2         = Nc + Nmax - Nmin;
+-  % Generate a colormap with this size:
+-  CMAP = cmapping(Nc2,CMAP);
+-  if imax==1
+-   CMAP = CMAP(1:Nc,:);
+-  else
+-   CMAP = flipud(CMAP);
+-   CMAP = CMAP(1:Nc,:);
+-   CMAP = flipud(CMAP);
+-  end
+- else
+-  CMAP = cmapping(Nc,CMAP);
+- end
+- 
+- % Sets levels:
+- LEVELS = linspace(CLIM(1),CLIM(2),size(CMAP,1))';
+-end
+-
+-% OUTPUTS CHECK-OUT
+-% -------------------------------------------------------------------------
+-if ~isempty(AX)
+- colormap(AX{:},CMAP)
+- caxis(AX{:},CLIM)
+-end
+-if ~nargout
+- if isempty(AX)
+-  colormap(CMAP)
+-  caxis(CLIM)
+- end
+- clear CMAP
+-end
+-
+-
+-% [EOF]   cmfit.m
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cblabel.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cblabel.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cblabel.m	(revision 15426)
+@@ -1,160 +0,0 @@
+-function CBLH = cblabel(varargin)
+-%CBLABEL   Adds a label to the colorbar.
+-%
+-%   SYNTAX:
+-%            cblabel(LABEL)
+-%            cblabel(LABEL,..,TP,TV);
+-%            cblabel(H,...)
+-%     CBLH = cblabel(...);
+-%
+-%   INPUT:
+-%     LABEL - String (or cell of strings) specifying the colorbar label.
+-%     TP,TV - Optional text property/property value arguments (in pairs).
+-%             DEFAULT:  (none)
+-%     H     - Color bar or peer axes (see COLORBAR) or figure handle(s) to
+-%             search for a single color bar handle.
+-%             DEFAULT: gca (current axes color bar)
+-%
+-%   OUTPUT (all optional):
+-%     CBLH  - Returns the colorbar label handle(s).
+-%           - Labels modified on the colorbar of the current figure or
+-%             the one(s) specified by CBH.
+-%
+-%   DESCRIPTION:
+-%     This function sets the label of the colorbar(s) in the current
+-%     figure.
+-%
+-%   NOTE:
+-%     * Optional inputs use its DEFAULT value when not given or [].
+-%     * Optional outputs may or not be called.
+-%
+-%   EXAMPLE:
+-%     figure, colorbar, cblabel(['           T, °C'],'Rotation',0)
+-%     figure
+-%      subplot(211), h1 = colorbar;
+-%      subplot(212), h2 = colorbar('Location','south');
+-%      cblabel([h1 h2],{'$1-\alpha$','$\beta^3$'},'Interpreter','latex')   
+-%
+-%   SEE ALSO: 
+-%     COLORBAR
+-%     and 
+-%     CBUNITS, CBHANDLE, CBFREEZE by Carlos Vargas
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cblabel.m
+-%   VERSION: 2.0 (Jun 08, 2009) (<a href="matlab:web('http://www.mathworks.com/matlabcentral/fileexchange/authors/11258')">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0      Released. (Aug 21, 2008)
+-%   2.0      Minor changes. Added CBHANDLE dependency. (Jun 08, 2009)
+-
+-%   DISCLAIMER:
+-%   cblabel.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2008,2009 Carlos Adrian Vargas Aguilera
+-
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Parameters:
+-cbappname = 'Frozen';         % Colorbar application data with fields:
+-                              % 'Location' from colorbar
+-                              % 'Position' from peer axes befor colorbar
+-                              % 'pax'      handle from peer axes.
+-
+-% Sets defaults:
+-H     = get(get(0,'CurrentFigure'),'CurrentAxes');
+-LABEL = '';
+-TOPT  = {};
+-CBLH  = [];
+-
+-% Number of inputs:
+-if nargin<1
+- error('CVARGAS:cblabel:incorrectNumberOfInputs',...
+-        'At least one input is required.')
+-end
+-
+-% Looks for H:
+-if nargin && ~isempty(varargin{1}) && all(ishandle(varargin{1}))
+- H = varargin{1};
+- varargin(1) = [];
+-end
+-
+-% Looks for CBH:
+-CBH = cbhandle(H);
+-if isempty(CBH), if ~nargout, clear CBLH, end, return, end
+-
+-% Looks for LABEL:
+-if ~isempty(varargin) && (ischar(varargin{1}) || iscellstr(varargin{1}))  
+- LABEL = varargin{1};
+- varargin(1) = [];
+-end
+-
+-% Forces cell of strings:
+-if ischar(LABEL)
+- % Same label to all the color bars:
+- LABEL = repmat({LABEL},length(CBH),1);
+-elseif iscellstr(LABEL) && (length(LABEL)==length(CBH))
+-  % Continue...
+-else
+- error('CVARGAS:cblabel:incorrectInputLabel',...
+-        ['LABEL must be a string or cell of strings of equal size as ' ...
+-         'the color bar handles: ' int2str(length(CBH)) '.'])
+-end
+-
+-% OPTIONAL arguments:
+-if ~isempty(varargin)
+- TOPT = varargin;
+-end
+-if length(TOPT)==1
+- TOPT = repmat({TOPT},size(CBH));
+-end
+-
+-% -------------------------------------------------------------------------
+-% MAIN
+-% -------------------------------------------------------------------------
+-% NOTE: Only CBH, LABEL and TOPT are needed.
+-
+-% Applies to each colorbar:
+-CBLH = repmat(NaN,size(CBH));
+-for icb = 1:length(CBH)
+- 
+- % Searches for label location:
+- try 
+-  % Normal colorbar:
+-  location = get(CBH(icb),'Location');
+- catch
+-  % Frozen colorbar:
+-  location = getappdata(CBH(icb),cbappname);
+-  location = location.Location;
+- end
+- switch location(1)
+-  case 'E', as  = 'Y';
+-  case 'W', as  = 'Y';
+-  case 'N', as  = 'X';
+-  case 'S', as  = 'X';
+- end
+- % Gets label handle:
+- CBLH(icb) = get(CBH(icb),[as 'Label']);
+- % Updates label:
+- set(CBLH(icb),'String',LABEL{icb},TOPT{:});
+- 
+-end
+-
+-% OUTPUTS CHECK-OUT
+-% -------------------------------------------------------------------------
+-
+-% Sets output:
+-if ~nargout
+- clear CBLH
+-end
+-
+-
+-% [EOF]   cblabel.m
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbfreeze.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbfreeze.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbfreeze.m	(revision 15426)
+@@ -1,382 +0,0 @@
+-function CBH = cbfreeze(varargin)
+-%CBFREEZE   Freezes the colormap of a colorbar.
+-%
+-%   SYNTAX:
+-%           cbfreeze
+-%           cbfreeze('off')
+-%           cbfreeze(H,...)
+-%     CBH = cbfreeze(...);
+-%
+-%   INPUT:
+-%     H     - Handles of colorbars to be freezed, or from figures to search
+-%             for them or from peer axes (see COLORBAR).
+-%             DEFAULT: gcf (freezes all colorbars from the current figure)
+-%     'off' - Unfreezes the colorbars, other options are:
+-%               'on'    Freezes
+-%               'un'    same as 'off'
+-%               'del'   Deletes the colormap(s).
+-%             DEFAULT: 'on' (of course)
+-%
+-%   OUTPUT (all optional):
+-%     CBH - Color bar handle(s).
+-%
+-%   DESCRIPTION:
+-%     MATLAB works with a unique COLORMAP by figure which is a big
+-%     limitation. Function FREEZECOLORS by John Iversen allows to use
+-%     different COLORMAPs in a single figure, but it fails freezing the
+-%     COLORBAR. This program handles this problem.
+-%
+-%   NOTE:
+-%     * Optional inputs use its DEFAULT value when not given or [].
+-%     * Optional outputs may or not be called.
+-%     * If no colorbar is found, one is created.
+-%     * The new frozen colorbar is an axes object and does not behaves
+-%       as normally colorbars when resizing the peer axes. Although, some
+-%       time the normal behavior is not that good.
+-%     * Besides, it does not have the 'Location' property anymore.
+-%     * But, it does acts normally: no ZOOM, no PAN, no ROTATE3D and no
+-%       mouse selectable.
+-%     * No need to say that CAXIS and COLORMAP must be defined before using
+-%       this function. Besides, the colorbar location. Anyway, 'off' or
+-%       'del' may help.
+-%     * The 'del' functionality may be used whether or not the colorbar(s)
+-%       is(are) froozen. The peer axes are resized back. Try: 
+-%        >> colorbar, cbfreeze del
+-%
+-%   EXAMPLE:
+-%     surf(peaks(30))
+-%     colormap jet
+-%     cbfreeze
+-%     colormap gray
+-%     title('What...?')
+-%
+-%   SEE ALSO:
+-%     COLORMAP, COLORBAR, CAXIS
+-%     and
+-%     FREEZECOLORS by John Iversen
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cbfreeze.m
+-%   VERSION: 1.1 (Sep 02, 2009) (<a href="matlab:web('http://www.mathworks.com/matlabcentral/fileexchange/authors/11258')">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0      Released. (Jun 08, 2009)
+-%   1.1      Fixed BUG with image handle on MATLAB R2009a. Thanks to Sergio
+-%            Muniz. (Sep 02, 2009)
+-
+-%   DISCLAIMER:
+-%   cbfreeze.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2009 Carlos Adrian Vargas Aguilera
+-
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Parameters:
+-cbappname = 'Frozen';         % Colorbar application data with fields:
+-                              % 'Location' from colorbar
+-                              % 'Position' from peer axes befor colorbar
+-                              % 'pax'      handle from peer axes.
+-axappname = 'FrozenColorbar'; % Peer axes application data with frozen
+-                              % colorbar handle.
+- 
+-% Set defaults:
+-S = 'on';                   Sopt = {'on','un','off','del'};
+-H = get(0,'CurrentFig');
+-
+-% Check inputs:
+-if nargin==2 && (~isempty(varargin{1}) && all(ishandle(varargin{1})) && ...
+-  isempty(varargin{2}))
+- 
+- % Check for CallBacks functionalities:
+- % ------------------------------------
+- 
+- varargin{1} = double(varargin{1});
+- 
+- if strcmp(get(varargin{1},'BeingDelete'),'on') 
+-  % Working as DeletFcn:
+-
+-  if (ishandle(get(varargin{1},'Parent')) && ...
+-      ~strcmpi(get(get(varargin{1},'Parent'),'BeingDeleted'),'on'))
+-    % The handle input is being deleted so do the colorbar:
+-    S = 'del'; 
+-    
+-   if ~isempty(getappdata(varargin{1},cbappname))
+-    % The frozen colorbar is being deleted:
+-    H = varargin{1};
+-   else
+-    % The peer axes is being deleted:
+-    H = ancestor(varargin{1},{'figure','uipanel'}); 
+-   end
+-   
+-  else
+-   % The figure is getting close:
+-   return
+-  end
+-  
+- elseif (gca==varargin{1} && ...
+-                     gcf==ancestor(varargin{1},{'figure','uipanel'}))
+-  % Working as ButtonDownFcn:
+-  
+-  cbfreezedata = getappdata(varargin{1},cbappname);
+-  if ~isempty(cbfreezedata) 
+-   if ishandle(cbfreezedata.ax)
+-    % Turns the peer axes as current (ignores mouse click-over):
+-    set(gcf,'CurrentAxes',cbfreezedata.ax);
+-    return
+-   end
+-  else
+-   % Clears application data:
+-   rmappdata(varargin{1},cbappname) 
+-  end
+-  H = varargin{1};
+- end
+- 
+-else
+- 
+- % Checks for normal calling:
+- % --------------------------
+- 
+- % Looks for H:
+- if nargin && ~isempty(varargin{1}) && all(ishandle(varargin{1}))
+-  H = varargin{1};
+-  varargin(1) = [];
+- end
+-
+- % Looks for S:
+- if ~isempty(varargin) && (isempty(varargin{1}) || ischar(varargin{1}))
+-  S = varargin{1};
+- end
+-end
+-
+-% Checks S:
+-if isempty(S)
+- S = 'on';
+-end
+-S = lower(S);
+-iS = strmatch(S,Sopt);
+-if isempty(iS)
+- error('CVARGAS:cbfreeze:IncorrectStringOption',...
+-  ['Unrecognized ''' S ''' argument.' ])
+-else
+- S = Sopt{iS};
+-end
+-
+-% Looks for CBH:
+-CBH = cbhandle(H);
+-
+-if ~strcmp(S,'del') && isempty(CBH)
+- % Creates a colorbar and peer axes:
+- pax = gca;
+- CBH = colorbar('peer',pax);
+-else
+- pax = [];
+-end
+-
+-
+-% -------------------------------------------------------------------------
+-% MAIN 
+-% -------------------------------------------------------------------------
+-% Note: only CBH and S are necesary, but I use pax to avoid the use of the
+-%       "hidden" 'Axes' COLORBAR's property. Why... ¿?
+-
+-% Saves current position:
+-fig = get(  0,'CurrentFigure');
+-cax = get(fig,'CurrentAxes');
+-
+-% Works on every colorbar:
+-for icb = 1:length(CBH)
+- 
+- % Colorbar axes handle:
+- h  = double(CBH(icb));
+- 
+- % This application data:
+- cbfreezedata = getappdata(h,cbappname);
+- 
+- % Gets peer axes:
+- if ~isempty(cbfreezedata)
+-  pax = cbfreezedata.pax;
+-  if ~ishandle(pax) % just in case
+-   rmappdata(h,cbappname)
+-   continue
+-  end
+- elseif isempty(pax) % not generated
+-  try
+-   pax = double(get(h,'Axes'));  % NEW feature in COLORBARs
+-  catch
+-   continue
+-  end
+- end
+- 
+- % Choose functionality:
+- switch S
+-  
+-  case 'del'
+-   % Deletes:
+-   if ~isempty(cbfreezedata)
+-    % Returns axes to previous size:
+-    oldunits = get(pax,'Units');
+-    set(pax,'Units','Normalized');
+-    set(pax,'Position',cbfreezedata.Position)
+-    set(pax,'Units',oldunits)
+-    set(pax,'DeleteFcn','')
+-    if isappdata(pax,axappname)
+-     rmappdata(pax,axappname)
+-    end
+-   end
+-   if strcmp(get(h,'BeingDelete'),'off') 
+-    delete(h)
+-   end
+-   
+-  case {'un','off'}
+-   % Unfrozes:
+-   if ~isempty(cbfreezedata)
+-    delete(h);
+-    set(pax,'DeleteFcn','')
+-    if isappdata(pax,axappname)
+-     rmappdata(pax,axappname)
+-    end
+-    oldunits = get(pax,'Units');
+-    set(pax,'Units','Normalized')
+-    set(pax,'Position',cbfreezedata.Position)
+-    set(pax,'Units',oldunits)
+-    CBH(icb) = colorbar(...
+-     'peer'    ,pax,...
+-     'Location',cbfreezedata.Location);
+-   end
+- 
+-  otherwise % 'on'
+-   % Freezes:
+- 
+-   % Gets colorbar axes properties:
+-   cb_prop  = get(h);
+-   
+-   % Gets colorbar image handle. Fixed BUG, Sep 2009
+-   hi = findobj(h,'Type','image');
+-    
+-   % Gets image data and transform it in a RGB:
+-   CData = get(hi,'CData'); 
+-   if size(CData,3)~=1
+-    % It's already frozen:
+-    continue
+-   end
+-  
+-   % Gets image tag:
+-   Tag = get(hi,'Tag');
+-  
+-   % Deletes previous colorbar preserving peer axes position:
+-   oldunits = get(pax,'Units');
+-              set(pax,'Units','Normalized')
+-   Position = get(pax,'Position');
+-   delete(h)
+-   cbfreezedata.Position = get(pax,'Position');
+-              set(pax,'Position',Position)
+-              set(pax,'Units',oldunits)
+-  
+-   % Generates new colorbar axes:
+-   % NOTE: this is needed because each time COLORMAP or CAXIS is used,
+-   %       MATLAB generates a new COLORBAR! This eliminates that behaviour
+-   %       and is the central point on this function.
+-   h = axes(...
+-    'Parent'  ,cb_prop.Parent,...
+-    'Units'   ,'Normalized',...
+-    'Position',cb_prop.Position...
+-   );
+-  
+-   % Save location for future call:
+-   cbfreezedata.Location = cb_prop.Location;
+-  
+-   % Move ticks because IMAGE draws centered pixels:
+-   XLim = cb_prop.XLim;
+-   YLim = cb_prop.YLim;
+-   if     isempty(cb_prop.XTick)
+-    % Vertical:
+-    X = XLim(1) + diff(XLim)/2;
+-    Y = YLim    + diff(YLim)/(2*length(CData))*[+1 -1];
+-   else % isempty(YTick)
+-    % Horizontal:
+-    Y = YLim(1) + diff(YLim)/2;
+-    X = XLim    + diff(XLim)/(2*length(CData))*[+1 -1];
+-   end
+-  
+-   % Draws a new RGB image:
+-   image(X,Y,ind2rgb(CData,colormap),...
+-    'Parent'            ,h,...
+-    'HitTest'           ,'off',...
+-    'Interruptible'     ,'off',...
+-    'SelectionHighlight','off',...
+-    'Tag'               ,Tag...
+-   )  
+-
+-   % Removes all   '...Mode'   properties:
+-   cb_fields = fieldnames(cb_prop);
+-   indmode   = strfind(cb_fields,'Mode');
+-   for k=1:length(indmode)
+-    if ~isempty(indmode{k})
+-     cb_prop = rmfield(cb_prop,cb_fields{k});
+-    end
+-   end
+-   
+-   % Removes special COLORBARs properties:
+-   cb_prop = rmfield(cb_prop,{...
+-    'CurrentPoint','TightInset','BeingDeleted','Type',...       % read-only
+-    'Title','XLabel','YLabel','ZLabel','Parent','Children',...  % handles
+-    'UIContextMenu','Location',...                              % colorbars
+-    'ButtonDownFcn','DeleteFcn',...                             % callbacks
+-    'CameraPosition','CameraTarget','CameraUpVector','CameraViewAngle',...
+-    'PlotBoxAspectRatio','DataAspectRatio','Position',... 
+-    'XLim','YLim','ZLim'});
+-   
+-   % And now, set new axes properties almost equal to the unfrozen
+-   % colorbar:
+-   set(h,cb_prop)
+-
+-   % CallBack features:
+-   set(h,...
+-    'ActivePositionProperty','position',...
+-    'ButtonDownFcn'         ,@cbfreeze,...  % mhh...
+-    'DeleteFcn'             ,@cbfreeze)     % again
+-   set(pax,'DeleteFcn'      ,@cbfreeze)     % and again!  
+-  
+-   % Do not zoom or pan or rotate:
+-   setAllowAxesZoom  (zoom    ,h,false)
+-   setAllowAxesPan   (pan     ,h,false)
+-   setAllowAxesRotate(rotate3d,h,false)
+-   
+-   % Updates data:
+-   CBH(icb) = h;   
+-
+-   % Saves data for future undo:
+-   cbfreezedata.pax       = pax;
+-   setappdata(  h,cbappname,cbfreezedata);
+-   setappdata(pax,axappname,h);
+-   
+- end % switch functionality   
+-
+-end  % MAIN loop
+-
+-
+-% OUTPUTS CHECK-OUT
+-% -------------------------------------------------------------------------
+-
+-% Output?:
+-if ~nargout
+- clear CBH
+-else
+- CBH(~ishandle(CBH)) = [];
+-end
+-
+-% Returns current axes:
+-if ishandle(cax) 
+- set(fig,'CurrentAxes',cax)
+-end
+-
+-
+-% [EOF]   cbfreeze.m
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbfit.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbfit.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbfit.m	(revision 15426)
+@@ -1,252 +0,0 @@
+-function CBH = cbfit(varargin)
+-%CBFIT   Draws a colorbar with specific color bands between its ticks.
+-% 
+-%   SYNTAX:
+-%           cbfit
+-%           cbfit(NBANDS)               % May be LBANDS instead of NBANDS
+-%           cbfit(NBANDS,CENTER)
+-%           cbfit(...,MODE)
+-%           cbfit(...,OPT)
+-%           cbfit(CBH,...)
+-%     CBH = cbfit(...);
+-%
+-%   INPUT:
+-%     NBANDS - Draws a colorbar with NBANDS bands colors between each tick
+-%      or      mark or a colorband between the specifies level bands
+-%     LBANDS   (LBANDS=NBANDS).
+-%              DEFAULT: 5     
+-%     CENTER - Center the colormap to this CENTER reference.
+-%              DEFAULT: [] (do not centers)
+-%     MODE   - Specifies the ticks mode (should be before AP,AV). One of:
+-%                'manual' - Forces color ticks on the new bands. 
+-%                'auto'   - Do not forces
+-%              DEFAULT: 'auto'
+-%     OPT    - Normal optional arguments of the COLORBAR function (should
+-%              be the last arguments).
+-%              DEFAULT: none.
+-%     CBH    - Uses this colorbar handle instead of current one.
+-%
+-%   OUTPUT (all optional):
+-%     CBH  - Returns the colorbar axes handle.
+-%
+-%   DESCRIPTION:
+-%     Draws a colorbar with specified number of color bands between its
+-%     ticks by modifying the current colormap and caxis.
+-%
+-%   NOTE:
+-%     * Optional inputs use its DEFAULT value when not given or [].
+-%     * Optional outputs may or not be called.
+-%     * Sets the color limits, CAXIS, and color map, COLORMAP, before using
+-%       this function. Use them after this function to get the
+-%       modifications.
+-%
+-%   EXAMPLE:
+-%     figure, surf(peaks+2), colormap(jet(14)), colorbar
+-%      title('Normal colorbar.m')
+-%     figure, surf(peaks+2),                    cbfit(2,0)
+-%      title('Fitted 2 color bands and centered on zero')
+-%     figure, surf(peaks+2), caxis([0 10]),     cbfit(4,8)
+-%      title('Fitted 4 color bands and centered at 8')
+-%
+-%   SEE ALSO:
+-%     COLORBAR
+-%     and
+-%     CBFREEZE, CMFIT by Carlos Vargas
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cbfit.m
+-%   VERSION: 2.1 (Sep 30, 2009) (<a href="matlab:web('http://www.mathworks.com/matlabcentral/fileexchange/authors/11258')">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0      Released as COLORBARFIT.M. (Mar 11, 2008)
+-%   1.1      Fixed bug when CAXIS is used before this function. (Jul 01,
+-%            2008)
+-%   1.2      Works properly when CAXIS is used before this function. Bug
+-%            fixed on subfunction and rewritten code. (Aug 21, 2008)
+-%   2.0      Rewritten code. Instead of the COLORBAND subfunction, now uses
+-%            the CMFIT function. Changed its name from COLORBARFIT to
+-%            CBFIT. (Jun 08, 2008)
+-%   2.1      Fixed bug and help with CBH input. (Sep 30, 2009)
+-
+-%   DISCLAIMER:
+-%   cbfit.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2008,2009 Carlos Adrian Vargas Aguilera
+-
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Sets defaults:
+-NBANDS = 5;
+-CENTER = [];
+-MODE   = 'auto';            
+-CBH    = [];
+-pax    = [];        % Peer axes
+-
+-% Checks if first argument is a handle: Fixed bug Sep 2009
+-if (~isempty(varargin) && (length(varargin{1})==1) && ...
+-  ishandle(varargin{1})) && strcmp(get(varargin{1},'Type'),'axes')
+- if strcmp(get(varargin{1},'Tag'),'Colorbar')
+-  CBH = varargin{1};
+- else
+-  warning('CVARGAS:cbfit:incorrectHInput',...
+-   'Unrecognized first input handle.')
+- end
+- varargin(1) = [];
+-end
+- 
+-% Reads NBANDS and CENTER:
+-if ~isempty(varargin) && isnumeric(varargin{1})
+- if ~isempty(varargin{1})
+-  NBANDS = varargin{1};
+- end
+- if (length(varargin)>1) && isnumeric(varargin{2})
+-  CENTER = varargin{2};
+-  varargin(2) = [];
+- end
+- varargin(1) = [];
+-end
+-
+-% Reads MODE:
+-if (~isempty(varargin) && (rem(length(varargin),2)==1))
+- if (~isempty(varargin{1}) && ischar(varargin{1}))
+-  switch lower(varargin{1})
+-   case 'auto'  , MODE = 'auto';
+-   case 'manual', MODE = 'manual';
+-   otherwise % 'off', 'hide' and 'delete'
+-    warning('CVARGAS:cbfit:incorrectStringInput',...
+-     'No pair string input must be one of ''auto'' or ''manual''.')
+-  end
+- end
+- varargin(1) = [];
+-end
+-
+-% Reads peer axes:
+-for k = 1:2:length(varargin)
+- if ~isempty(varargin{k})
+-  switch lower(varargin{k})
+-   case 'peer', pax = varargin{k+1}; break
+-  end
+- end
+-end
+-if isempty(pax)
+- pax = gca;
+-end
+-
+-% -------------------------------------------------------------------------
+-% MAIN
+-% -------------------------------------------------------------------------
+-
+-% Generates a preliminary colorbar:
+-if isempty(CBH)
+- CBH = colorbar(varargin{:});
+-end
+-
+-% Gets limits and orientation:
+-s     = 'Y';
+-ticks = get(CBH,[s 'Tick']);
+-if isempty(ticks)             
+- s     = 'X';
+- ticks = get(CBH,[s 'Tick']);
+-end
+-zlim = get(CBH,[s 'Lim']);
+-
+-% Gets width and ref:
+-if ~isempty(NBANDS)
+-
+- NL = length(NBANDS);
+- 
+- if (NL==1)
+-  
+-  % Force positive integers:
+-  NBANDS = round(abs(NBANDS));
+- 
+-  % Ignores ticks outside the limits:
+-  if zlim(1)>ticks(1)
+-   ticks(1) = [];
+-  end
+-  if zlim(2)<ticks(end)
+-   ticks(end) = [];
+-  end
+-
+-  % Get the ticks step and colorband:
+-  tstep = ticks(2)-ticks(1);
+-  WIDTH = tstep/NBANDS;
+-  
+-  % Sets color limits
+-  if strcmp(get(pax,'CLimMode'),'auto')
+-   caxis(zlim);
+-  end
+-  
+-  % Forces old colorbar ticks: 
+-  set(CBH,[s 'Lim'],zlim,[s 'Tick'],ticks)
+-  
+-  % Levels:
+-  if strcmp(MODE,'manual')
+-   LBANDS = [fliplr(ticks(1)-WIDTH:-WIDTH:zlim(1)) ticks(1):WIDTH:zlim(2)];
+-  end
+-  
+- else
+-  
+-  % Nonlinear colorbar:
+-  ticks = NBANDS;
+-  WIDTH = ticks;
+-  
+-  % Scales to CLIM:
+-  if strcmp(get(pax,'CLimMode'),'manual')
+-   ticks = ticks-ticks(1);
+-   ticks = ticks/ticks(end);
+-   ticks = ticks*diff(zlim) + zlim(1);
+-  end
+-  zlim = [ticks(1) ticks(end)];
+-  caxis(pax,zlim)
+-  CBIH = get(CBH,'Children');
+-  
+-  % Change ticks:
+-  set(CBIH,[s 'Data'],ticks)
+-  
+-  % Sets limits:
+-  set(CBH,[s 'Lim'],zlim)
+-  
+-  % Levels:
+-  if strcmp(MODE,'manual')
+-   LBANDS = NBANDS;
+-  end
+-  
+- end
+- 
+- % Get reference mark
+- if ~isempty(CENTER)
+-  REF    = CENTER;
+-  CENTER = true;
+- else
+-  REF    = ticks(1);
+-  CENTER = false;
+- end
+-  
+-end
+-
+-% Fits the colormap and limits:
+-cmfit(get(get(pax,'Parent'),'Colormap'),zlim,WIDTH,REF,CENTER)
+-
+-% Sets ticks:
+-if strcmp(MODE,'manual')
+- set(CBH,[s 'Tick'],LBANDS)
+-end
+-
+-% OUTPUTS CHECK-OUT
+-% -------------------------------------------------------------------------
+-
+-if ~nargout
+- clear CBH
+-end
+-
+-
+-% [EOF]   cbfit.m
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbunits.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbunits.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cbunits.m	(revision 15426)
+@@ -1,235 +0,0 @@
+-function CBH = cbunits(varargin)
+-%CBUNITS   Adds units to the colorbar ticklabels.
+-%
+-%   SYNTAX:
+-%           cbunits(UNITS)
+-%           cbunits(UNITS,SPACE)
+-%           cbunits -clear
+-%           cbunits(H,...)
+-%     CBH = cbunits(...);
+-%
+-%   INPUT:
+-%     UNITS - String (or cell of strings) with the colorbar(s) units or
+-%             '-clear' to eliminate any unit. 
+-%     SPACE - Logical indicating whether an space should be put between
+-%             quantity and units. Useful when using '3°C', for example.
+-%             DEFAULT: true (use an space)
+-%     H     - Colorbar, or peer axes (see COLORBAR) or figure handle(s) to
+-%             search for color bars. 
+-%             DEFAULT: gca (current axes color bar)
+-%
+-%   OUTPUT (all optional):
+-%     CBH   - Returns the colorbar handle(s).
+-%             DEFAULT: Not returned if not required.
+-%           - Ticklabels modified on the colorbar of the current axes or
+-%             the one(s) specified by CBH.
+-%
+-%   DESCRIPTION:
+-%     This function adds units to the current colorbar, by writting them
+-%     after the biggest ticklabel.
+-%
+-%   NOTE:
+-%     * Optional inputs use its DEFAULT value when not given or [].
+-%     * Optional outputs may or not be called.
+-%     * Scientific notation is included in the units (if any).
+-%     * When more than one colorbar handle is given or founded and a single
+-%       UNITS string is given, it is applied to all of them.
+-%     * Use a cell of strings for UNITS when more than one colorbar handles
+-%       are given in order to give to each one their proper units. This
+-%       also works when the handlesare founded but the units order is
+-%       confusing and not recommended.
+-%     * Once applied, CAXIS shouldn't be used.
+-%     * To undo sets the ticklabelmode to 'auto'.
+-%
+-%   EXAMPLE:
+-%     % Easy to use:
+-%       figure, caxis([1e2 1e8]), colorbar, cbunits('°F',false)
+-%     % Vectorized:
+-%       figure
+-%       subplot(211), h1 = colorbar;
+-%       subplot(212), h2 = colorbar;
+-%       cbunits([h1;h2],{'°C','dollars'},[false true])
+-%     % Handle input:
+-%       figure
+-%       subplot(211), colorbar;
+-%       subplot(212), colorbar('Location','North');
+-%       caxis([1e2 1e8])
+-%       cbunits(gcf,'m/s')
+-%
+-%   SEE ALSO: 
+-%     COLORBAR
+-%     and
+-%     CBLABEL, CBHANDLE, CBFREEZE by Carlos Vargas
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cbunits.m
+-%   VERSION: 3.0 (Sep 30, 2009) (<a href="matlab:web('http://www.mathworks.com/matlabcentral/fileexchange/authors/11258')">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0      Released. (Aug 21, 2008)
+-%   2.0      Minor changes. Added 'clear' option and CBHANDLE dependency.
+-%            (Jun 08, 2009)
+-%   3.0      Fixed bug when inserting units on lower tick and ticklabel
+-%            justification. Added SPACE option. (Sep 30, 2009)
+-
+-%   DISCLAIMER:
+-%   cbunits.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2008,2009 Carlos Adrian Vargas Aguilera
+-
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Sets defaults:
+-H     = get(get(0,'CurrentFigure'),'CurrentAxes');
+-UNITS = '';
+-SPACE = true;
+-
+-% Checks inputs/outputs number:
+-if     nargin<1
+- error('CVARGAS:cbunits:notEnoughInputs',...
+-  'At least 1 input is required.')
+-elseif nargin>3
+- error('CVARGAS:cbunits:tooManyInputs',...
+-  'At most 3 inputs are allowed.')
+-elseif nargout>1
+- error('CVARGAS:cbunits:tooManyOutputs',...
+-  'At most 1 output is allowed.')
+-end
+-
+-% Looks for H:
+-if nargin && ~isempty(varargin{1}) && all(ishandle(varargin{1}))
+- H = varargin{1};
+- varargin(1) = [];
+-end
+-
+-% Looks for CBH:
+-CBH = cbhandle(H);
+-if isempty(CBH), if ~nargout, clear CBH, end, return, end
+-
+-% Looks for UNITS:
+-if ~isempty(varargin) && ~isempty(varargin{1}) && ...
+-  (ischar(varargin{1}) || iscellstr(varargin{1}))  
+- UNITS = varargin{1};
+- varargin(1) = [];
+-end
+-if isempty(UNITS), if ~nargout, clear CBH, end, return, end
+-
+-% Forces cell of strings:
+-if ischar(UNITS)
+- if numel(UNITS)~=size(UNITS,2)
+-  error('CVARGAS:cbunits:IncorrectUnitsString',...
+-        'UNITS string must be a row vector.')
+- end
+- % Same units to all the color bars:
+- UNITS = repmat({UNITS},length(CBH),1);
+-elseif iscellstr(UNITS) && (length(UNITS)==length(CBH))
+-  % Continue...
+-else
+- error('CVARGAS:cbunits:IncorrectInputUnits',...
+-        ['UNITS must be a string or cell of strings of equal size as ' ...
+-         'the color bar handles: ' int2str(length(CBH)) '.'])
+-end
+-
+-% Looks for SPACE:
+-Nunits = length(UNITS);
+-if ~isempty(varargin) && ~isempty(varargin{1}) && ...
+-  ((length(varargin{1})==1) || (length(varargin{1})==Nunits))  
+- SPACE = varargin{1};
+-end
+-SPACE = logical(SPACE);
+-
+-% Forces equal size of SPACE and UNITS.
+-if (length(SPACE)==1) && (Nunits~=1)
+- SPACE = repmat(SPACE,Nunits,1);
+-end
+-
+-
+-% -------------------------------------------------------------------------
+-% MAIN
+-% -------------------------------------------------------------------------
+-% Note: Only CBH and UNITS are required.
+-
+-% Applies to each colorbar:
+-for icb = 1:length(CBH)
+- 
+- units  = UNITS{icb};
+- space  = SPACE(icb);
+- cbh    = CBH(icb);
+- append = [];
+- 
+- % Gets tick labels:
+- as  = 'Y';
+- at  = get(cbh,[as 'Tick']);
+- if isempty(at)
+-  as = 'X';
+-  at = get(cbh,[as 'Tick']);
+- end
+- 
+- % Checks for elimitation:
+- if strcmpi(units,'-clear')
+-  set(cbh,[as 'TickLabelMode'],'auto')
+-  continue
+- end
+-
+-             set(cbh,[as 'TickLabelMode'],'manual');
+- old_ticks = get(cbh,[as 'TickLabel']);
+-
+- % Adds scientific notation:
+- if strcmp(get(cbh,[as 'Scale']),'linear')
+-  ind = 1;
+-  if at(ind)==0
+-   ind = 2;
+-  end
+-  o  = log10(abs(at(ind)/str2double(old_ticks(ind,:))));
+-  sg = '';
+-  if at(ind)<0, sg = '-'; end
+-  if o>0
+-   append = [' e' sg int2str(o) ''];
+-  end
+- end
+- 
+- % Updates ticklabels:
+- Nu = length(units);
+- Na = length(append);
+- Nt = size(old_ticks,1);
+- loc = Nt; % Fixed bug, Sep 2009
+- if (strcmp(as,'Y') && ((abs(at(1))>abs(at(Nt))) && ...
+-    (length(fliplr(deblank(fliplr(old_ticks( 1,:))))) > ...
+-     length(fliplr(deblank(fliplr(old_ticks(Nt,:)))))))) || ...
+-     (strcmp(as,'X') && strcmp(get(cbh,[as 'Dir']),'reverse'))
+-  loc = 1; 
+- end
+- new_ticks  = [old_ticks repmat(' ',Nt,Nu+(Na-(Na>0))+space)];
+- new_ticks(loc,end-Nu-Na-space+1:end) = [append repmat(' ',1,space) units];
+- if strcmp(as,'Y') % Fixed bug, Sep 2009
+-  if strcmp(get(cbh,[as 'AxisLocation']),'right')
+-   new_ticks = strjust(new_ticks,'left');
+-  else
+-   new_ticks = strjust(new_ticks,'right');
+-  end
+- else
+-  new_ticks = strjust(new_ticks,'center');
+- end
+- set(cbh,[as 'TickLabel'],new_ticks)
+- 
+-end % MAIN LOOP
+-
+-
+-% OUTPUTS CHECK-OUT
+-% -------------------------------------------------------------------------
+-
+-% Sets output:
+-if ~nargout
+- clear CBH
+-end
+-
+-
+-% [EOF]   cbunits.m
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cm_and_cb_utilities.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmlines.m
+===================================================================
+--- ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmlines.m	(revision 15425)
++++ ../trunk-jpl/externalpackages/cm_and_cb_utilities/cmlines.m	(revision 15426)
+@@ -1,152 +0,0 @@
+-function [HL,CLIN] = cmlines(varargin)
+-% CMLINES   Change the color of plotted lines using the colormap.
+-%
+-%   SYNTAX:
+-%                 cmlines
+-%                 cmlines(CMAP)
+-%                 cmlines(H,...)
+-%     [HL,CLIN] = cmlines(...);
+-%   
+-%   INPUT:
+-%     CMAP - Color map name or handle to be used, or a Nx3 matrix of colors
+-%            to be used for each of the N lines or color char specifiers.
+-%            DEFAULT: jet.
+-%     H    - Handles of lines or from a axes to search for lines or from
+-%            figures to search for exes. If used, must be the first input.
+-%            DEFAULT: gca (sets colors for lines in current axes)
+-%
+-%   OUTPUT (all optional):
+-%     HL   - Returns the handles of lines. Is a cell array if several axes
+-%            handle were used as input.
+-%     CLIN - Returns the RGB colors of the lines. Is a cell array if
+-%            several axes handle were used as input.
+-%
+-%   DESCRIPTION:
+-%     Ths function colored the specified lines with the spectrum of the
+-%     given colormap. Ideal for lines on the same axes which means increase
+-%     (or decrease) monotonically.
+-%
+-%   EXAMPLE:
+-%     plot(reshape((1:10).^2,2,5))
+-%     cmlines
+-%
+-%   NOTE:
+-%     * Optional inputs use its DEFAULT value when not given or [].
+-%     * Optional outputs may or not be called.
+-%    
+-%   SEE ALSO:
+-%     PLOT and COLORMAP.
+-%     and
+-%     CMAPPING
+-%     at http://www.mathworks.com/matlabcentral/fileexchange
+-%
+-%
+-%   ---
+-%   MFILE:   cmlines.m
+-%   VERSION: 1.0 (Jun 08, 2009) (<a href="matlab:web(['www.mathworks.com/matlabcentral/fileexchange/loadAuthor.do',char(63),'objectType',char(61),'author',char(38),'objectId=1093874'])">download</a>) 
+-%   MATLAB:  7.7.0.471 (R2008b)
+-%   AUTHOR:  Carlos Adrian Vargas Aguilera (MEXICO)
+-%   CONTACT: nubeobscura@hotmail.com
+-
+-%   REVISIONS:
+-%   1.0      Released. (Jun 08, 2009)
+-
+-%   DISCLAIMER:
+-%   cmlines.m is provided "as is" without warranty of any kind, under the
+-%   revised BSD license.
+-
+-%   Copyright (c) 2009 Carlos Adrian Vargas Aguilera
+-
+-% INPUTS CHECK-IN
+-% -------------------------------------------------------------------------
+-
+-% Set defaults:
+-HL   = {};
+-Ha   = gca;
+-CMAP = colormap;
+-
+-% Checks number of inputs:
+-if nargin>2
+- error('CVARGAS:cmlines:tooManyInputs', ...
+-  'At most 2 inputs are allowed.')
+-end
+-if nargout>2
+- error('CVARGAS:cmlines:tooManyOutputs', ...
+-  'At most 2 outputs are allowed.')
+-end
+-
+-% Checks handles of lines, axes or figure inputs:
+-Hl = [];
+-if (nargin~=0) && ~isempty(varargin{1}) && all(ishandle(varargin{1}(:))) ...
+- && ((length(varargin{1})>1) || ~isa(varargin{1},'function_handle'))
+- Ha = [];
+- for k = 1:length(varargin{1})
+-  switch get(varargin{1}(k),'Type')
+-   case 'line'
+-    Hl = [Hl varargin{1}(k)];
+-   case 'axes'
+-    Ha = [Ha varargin{1}(k)];
+-   case {'figure','uipanel'}
+-    Ha = [Ha findobj(varargin{1}(k),'-depth',1,'Type','axes',...
+-                      '-not',{'Tag','Colorbar','-or','Tag','legend'})];
+-   otherwise
+-     warning('CVARGAS:cmlines:unrecognizedHandleInput',...
+-      'Ignored handle input.')
+-  end
+- end
+- varargin(1) = [];
+-end
+-
+-% Looks for CMAP input:
+-if nargin && ~isempty(varargin) && ~isempty(varargin{1})
+- CMAP = varargin{1};
+-end
+-
+-% Gets line handles:
+-if ~isempty(Hl)
+- HL{1} = Hl;
+-end
+-if ~isempty(Ha)
+- for k = 1:length(Ha)
+-  Hl = findobj(Ha(k),'Type','line');
+-  if ~isempty(Hl)
+-   HL{end+1} = Hl;
+-  end
+- end
+-end
+-if isempty(HL)
+- if ~nargout
+-  clear HL
+- end
+- return
+-end
+-
+-% -------------------------------------------------------------------------
+-% MAIN
+-% -------------------------------------------------------------------------
+-
+-% Sets color lines for each set of lines:
+-Nlines = length(HL);
+-CLIN   = cell(1,Nlines);
+-for k  = 1:length(HL)
+- 
+- % Interpolates the color map:
+- CLIN{k} = cmapping(length(HL{k}),CMAP);
+-
+- % Changes lines colors:
+- set(HL{k},{'Color'},mat2cell(CLIN{k},ones(1,size(CLIN{k},1)),3))
+- 
+-end
+-
+-% OUTPUTS CHECK-OUT
+-% -------------------------------------------------------------------------
+-
+-if ~nargout
+- clear HL
+-elseif Nlines==1
+- HL   = HL{1};
+- CLIN = CLIN{1};
+-end
+-
+-
+-% [EOF]   cmlines.m
+\ No newline at end of file
Index: /issm/oecreview/Archive/15392-16133/ISSM-15426-15427.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15426-15427.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15426-15427.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/verbose.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/verbose.m	(revision 15426)
++++ ../trunk-jpl/src/m/classes/verbose.m	(revision 15427)
+@@ -13,6 +13,7 @@
+ %   Usage:
+ %      verbose=verbose();
+ %      verbose=verbose(3);
++%      verbose=verbose('all');
+ %      verbose=verbose('001100');
+ %      verbose=verbose('module',true,'solver',false);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15427-15428.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15427-15428.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15427-15428.diff	(revision 16134)
@@ -0,0 +1,2419 @@
+Index: ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 15427)
++++ ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 15428)
+@@ -9,7 +9,7 @@
+ 
+ /* local prototypes: */
+ template <class doubletype> 
+-int MeshPartitionx(int** pepart, int** pnpart, int numberofelements,int numberofnodes,doubletype* elements,
++int MeshPartitionx(int** pepart, int** pnpart, int numberofelements,int numberofnodes,int* elements,
+ 		int numberofelements2d,int numberofnodes2d,doubletype* elements2d,int numlayers,int elements_width, int dim,int num_procs){
+ 
+ 	int noerr=1;
+@@ -36,7 +36,7 @@
+ 		index=xNew<int>(elements_width*numberofelements);
+ 		for (i=0;i<numberofelements;i++){
+ 			for (j=0;j<elements_width;j++){
+-				*(index+elements_width*i+j)=reCast<int>(*(elements+elements_width*i+j))-1; //-1 for C indexing in Metis
++				*(index+elements_width*i+j)=(*(elements+elements_width*i+j))-1; //-1 for C indexing in Metis
+ 			}
+ 		}
+ 
+@@ -117,5 +117,5 @@
+ 	xDelete<int>(npart2d);
+ 	xDelete<int>(index2d);
+ 	return noerr;
+-}	
++}
+ #endif /* _MESHPARTITIONX_H */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 15428)
+@@ -19,9 +19,6 @@
+ 	int i,j;
+ 	int vertexid;
+ 	int elementswidth;
+-	int numberofelements;
+-	int numberofvertices;
+-	IssmDouble* elements=NULL;
+ 
+ 	/*output*/
+ 	int* connectivity=NULL;
+@@ -29,21 +26,16 @@
+ 	/*Check that this has not been done yet*/
+ 	if(iomodel->numbernodetoelementconnectivity) return;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-	elements=iomodel->Data(MeshElementsEnum);
+-
+ 	/*Some checks if debugging*/
+-	_assert_(numberofvertices);
+-	_assert_(numberofelements);
+-	_assert_(elements);
++	_assert_(iomodel->numberofvertices);
++	_assert_(iomodel->numberofelements);
++	_assert_(iomodel->elements);
+ 
+ 	/*Allocate ouput*/
+-	connectivity=xNewZeroInit<int>(numberofvertices);
++	connectivity=xNewZeroInit<int>(iomodel->numberofvertices);
+ 
+ 	/*Get element width (3 or 6)*/
+-	if (iomodel->dim==2){
++	if(iomodel->dim==2){
+ 		elementswidth=3;
+ 	}
+ 	else{
+@@ -51,16 +43,14 @@
+ 	}
+ 
+ 	/*Create connectivity table*/
+-	for (i=0;i<numberofelements;i++){
++	for (i=0;i<iomodel->numberofelements;i++){
+ 		for (j=0;j<elementswidth;j++){
+-			vertexid=reCast<int>(elements[elementswidth*i+j]);
+-			_assert_(vertexid>0 && vertexid-1<numberofvertices);
++			vertexid=iomodel->elements[elementswidth*i+j];
++			_assert_(vertexid>0 && vertexid-1<iomodel->numberofvertices);
+ 			connectivity[vertexid-1]+=1;
+ 		}
+ 	}
+ 
+ 	/*Assign to iomodel*/
+ 	iomodel->numbernodetoelementconnectivity=connectivity;
+-
+-	/*Do not free connectivity!!!*/
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 15428)
+@@ -28,7 +28,6 @@
+ 	if (!control_analysis) return;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->FetchData(1,MeshElementsEnum);
+ 	iomodel->FetchDataToInput(elements,InversionVxObsEnum);
+ 	iomodel->FetchDataToInput(elements,InversionVyObsEnum); 
+ 	iomodel->FetchDataToInput(elements,InversionThicknessObsEnum);
+@@ -61,5 +60,5 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(1+4+6,MeshElementsEnum,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
++	iomodel->DeleteData(4+6,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15428)
+@@ -20,7 +20,7 @@
+ 	/*Now, is the flag hutter on? otherwise, do nothing: */
+ 	if (!ishutter)return;
+ 
+-	iomodel->FetchData(2,MeshElementsEnum,FlowequationElementEquationEnum);
++	iomodel->FetchData(1,FlowequationElementEquationEnum);
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+@@ -36,5 +36,5 @@
+ 	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(2,MeshElementsEnum,FlowequationElementEquationEnum);
++	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15428)
+@@ -10,11 +10,9 @@
+ void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+-	int count;
++	int        count;
+ 	IssmDouble yts;
+-	int    numberofvertices;
+-	bool   ishutter;
++	bool       ishutter;
+ 
+ 	/*Output*/
+ 	Constraints* constraints = NULL;
+@@ -25,7 +23,6 @@
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+ 
+ 	/*Create constraints if they do not exist yet*/
+@@ -44,7 +41,7 @@
+ 	count=0;
+ 
+ 	/*vx and vy are spc'd if we are not on nodeonhutter: */
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		/*keep only this partition's nodes:*/
+ 		if((iomodel->my_vertices[i])){
+ 			if (!reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])==HutterApproximationEnum){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15428)
+@@ -11,13 +11,10 @@
+ void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+-	bool continuous_galerkin=true;
+-	int    numberofvertices;
+-	bool   ishutter;
++	bool continuous_galerkin = true;
++	bool ishutter;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+ 
+ 	/*Recover pointer: */
+@@ -36,9 +33,9 @@
+ 	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+ 
+ 	/*First fetch data: */
+-	iomodel->FetchData(7,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MeshElementsEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Add node to nodes dataset: */
+@@ -48,7 +45,7 @@
+ 	}
+ 
+ 	/*Clean fetched data: */
+-	iomodel->DeleteData(7,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MeshElementsEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15428)
+@@ -31,29 +31,16 @@
+ 
+ void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel){
+ 
+-	/*as many nodes as there are vertices */
+-	int    numberofvertices;
+-
+ 	/*output: */
+-	bool* my_nodes=NULL;
++	bool* my_nodes=xNew<bool>(iomodel->numberofvertices);
++	for(int i=0;i<iomodel->numberofvertices;i++) my_nodes[i]=(bool)my_vertices[i];
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+-	my_nodes=xNew<bool>(numberofvertices);
+-	for(int i=0;i<numberofvertices;i++) my_nodes[i]=(bool)my_vertices[i];
+-
+ 	/*Assign output pointers:*/
+ 	*pmy_nodes=my_nodes;
+ }
+ 
+ void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel){
+ 
+-	int    numberofelements;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-
+ 	/*each element has it own nodes (as many as vertices) + additional nodes from neighbouring elements for each edge. This yields to a very different partition for 
+ 	 * the nodes and the vertices. The vertices are similar to continuous galerkin, but the nodes partitioning involves edges, which mess up sorting of 
+ 	 * ids. */
+@@ -79,11 +66,11 @@
+ 	 */
+ 
+ 	/*Allocate*/
+-	my_nodes=xNewZeroInit<bool>(3*numberofelements);
++	my_nodes=xNewZeroInit<bool>(3*iomodel->numberofelements);
+ 
+ 	/*First: add all the nodes of all the elements belonging to this cpu*/
+ 	if (iomodel->dim==2){
+-		for (i=0;i<numberofelements;i++){
++		for (i=0;i<iomodel->numberofelements;i++){
+ 			if (my_elements[i]){
+ 				my_nodes[3*i+0]=true;
+ 				my_nodes[3*i+1]=true;
+@@ -99,7 +86,6 @@
+ 
+ 	/*Get edges and elements*/
+ 	iomodel->FetchData(&edges,&numberofedges,&cols,MeshEdgesEnum);
+-	iomodel->FetchData(&elements,NULL,NULL,MeshElementsEnum);
+ 	if (cols!=4) _error_("field edges should have 4 columns");
+ 
+ 	/*!All elements have been partitioned above, only create elements for this CPU: */
+@@ -123,7 +109,7 @@
+ 			/*2: Get the column where these ids are located in the index*/
+ 			pos=UNDEF;
+ 			for(int j=0;j<3;j++){
+-				if (elements[3*e2+j]==i1) pos=j;
++				if(iomodel->elements[3*e2+j]==i1) pos=j;
+ 			}
+ 
+ 			/*3: We have the id of the elements and the position of the vertices in the index
+@@ -147,7 +133,6 @@
+ 	}
+ 
+ 	/*Free data: */
+-	xDelete<int>(elements);
+ 	xDelete<int>(edges);
+ 
+ 	/*Assign output pointers:*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 15428)
+@@ -10,11 +10,10 @@
+ void	CreateConstraintsEnthalpy(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int    i,j;
+-	int    count;
+-	int    M,N;
+-	int    numberofvertices;
+-	bool   spcpresent=false;
++	int        i,j;
++	int        count;
++	int        M,N;
++	bool       spcpresent = false;
+ 	IssmDouble heatcapacity;
+ 	IssmDouble referencetemperature;
+ 
+@@ -24,7 +23,6 @@
+ 	IssmDouble* values=NULL;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum);
+ 	iomodel->Constant(&referencetemperature,ConstantsReferencetemperatureEnum);
+ 
+@@ -35,7 +33,7 @@
+ 	if(!constraints) constraints = new Constraints();
+ 
+ 	/*return if 2d mesh*/
+-	if (iomodel->dim==2){
++	if(iomodel->dim==2){
+ 		*pconstraints=constraints;
+ 		return;
+ 	}
+@@ -45,11 +43,11 @@
+ 
+ 	//FIX ME: SHOULD USE IOMODELCREATECONSTRAINTS 
+ 	/*Transient or static?:*/
+-	if(M==numberofvertices){
++	if(M==iomodel->numberofvertices){
+ 		/*static: just create Constraints objects*/
+ 		count=0;
+ 
+-		for (i=0;i<numberofvertices;i++){
++		for(int i=0;i<iomodel->numberofvertices;i++){
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+ 
+@@ -62,19 +60,19 @@
+ 			}
+ 		}
+ 	}
+-	else if (M==(numberofvertices+1)){
++	else if (M==(iomodel->numberofvertices+1)){
+ 		/*transient: create transient SpcTransient objects. Same logic, except we need to retrieve 
+ 		 * various times and values to initialize an SpcTransient object: */
+ 		count=0;
+ 
+ 		/*figure out times: */
+ 		times=xNew<IssmDouble>(N);
+-		for(j=0;j<N;j++){
++		for(int j=0;j<N;j++){
+ 			times[j]=spcvector[(M-1)*N+j];
+ 		}
+ 
+ 		/*Create constraints from x,y,z: */
+-		for (i=0;i<numberofvertices;i++){
++		for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+@@ -82,7 +80,7 @@
+ 				/*figure out times and values: */
+ 				values=xNew<IssmDouble>(N);
+ 				spcpresent=false;
+-				for(j=0;j<N;j++){
++				for(int j=0;j<N;j++){
+ 					values[j]=heatcapacity*(spcvector[i*N+j]-referencetemperature);
+ 					if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+ 				}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15428)
+@@ -11,13 +11,8 @@
+ void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	bool continuous_galerkin=true;
+-	int    numberofvertices;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -30,7 +25,7 @@
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15428)
+@@ -19,7 +19,7 @@
+ 	if(iomodel->dim==2)return;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->FetchData(4,MeshElementsEnum,TemperatureEnum,WaterfractionEnum,PressureEnum);
++	iomodel->FetchData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+@@ -53,5 +53,5 @@
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(4,MeshElementsEnum,TemperatureEnum,WaterfractionEnum,PressureEnum);
++	iomodel->DeleteData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15428)
+@@ -10,14 +10,11 @@
+ void	CreateConstraintsDiagnosticVert(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	int count;
+ 	IssmDouble yts;
+-	int    numberofvertices;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+ 	Constraints* constraints=*pconstraints;
+@@ -38,7 +35,7 @@
+ 	count=0;
+ 
+ 	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		/*keep only this partition's nodes:*/
+ 		if(iomodel->my_vertices[i]){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15428)
+@@ -11,13 +11,8 @@
+ void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	bool continuous_galerkin=true;
+-	int    numberofvertices;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -36,7 +31,7 @@
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15428)
+@@ -13,17 +13,9 @@
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+ 	if (iomodel->dim==2)return;
+ 
+-	int    numberofelements;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-
+-	/*Fetch data needed: */
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -43,8 +35,4 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+-
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15428)
+@@ -16,11 +16,9 @@
+ 	int stabilization;
+ 	int numberofedges;
+ 	int numvertex_pairing;
+-	int numberofelements;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&numberofedges,MeshNumberofedgesEnum);
+ 
+ 	/*Recover pointer: */
+@@ -33,7 +31,7 @@
+ 	if (stabilization==3){
+ 
+ 		/*Get edges and elements*/
+-		iomodel->FetchData(3,MeshEdgesEnum,MeshElementsEnum,ThicknessEnum);
++		iomodel->FetchData(2,MeshEdgesEnum,ThicknessEnum);
+ 
+ 		/*First load data:*/
+ 		for (i=0;i<numberofedges;i++){
+@@ -49,7 +47,7 @@
+ 		}
+ 
+ 		/*Free data: */
+-		iomodel->DeleteData(3,MeshEdgesEnum,MeshElementsEnum,ThicknessEnum);
++		iomodel->DeleteData(2,MeshEdgesEnum,ThicknessEnum);
+ 	}
+ 
+ 	/*Create Penpair for vertex_pairing: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15428)
+@@ -16,13 +16,9 @@
+ 	int  vertex_id;
+ 	int  io_index;
+ 	bool continuous_galerkin=true;
+-	int    numberofelements;
+-	int    numberofvertices;
+-	int    stabilization;
++	int  stabilization;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 
+ 	/*Recover pointer: */
+@@ -39,11 +35,11 @@
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+-	iomodel->FetchData(7,MeshElementsEnum,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 	if(continuous_galerkin){
+ 
+ 		/*Build Nodes dataset (Continuous Galerkin)*/
+-		for (i=0;i<numberofvertices;i++){
++		for (i=0;i<iomodel->numberofvertices;i++){
+ 
+ 			if(iomodel->my_vertices[i]){
+ 
+@@ -56,15 +52,15 @@
+ 	else{
+ 
+ 		/*Build Nodes dataset -> 3 for each element (Discontinuous Galerkin)*/
+-		for (i=0;i<numberofelements;i++){
++		for (i=0;i<iomodel->numberofelements;i++){
+ 			for (j=0;j<3;j++){
+ 
+ 				if(iomodel->my_nodes[3*i+j]){ 
+ 
+ 					//Get index of the vertex on which the current node is located
+-					vertex_id=reCast<int>(*(iomodel->Data(MeshElementsEnum)+3*i+j)); //(Matlab indexing)
+-					io_index=vertex_id-1;                      //(C indexing)
+-					_assert_(vertex_id>0 && vertex_id<=numberofvertices);
++					vertex_id=iomodel->elements[+3*i+j]; //(Matlab indexing)
++					io_index=vertex_id-1;                //(C indexing)
++					_assert_(vertex_id>0 && vertex_id<=iomodel->numberofvertices);
+ 
+ 					//Compute Node id
+ 					node_id=iomodel->nodecounter+3*i+j+1;
+@@ -78,7 +74,7 @@
+ 	}
+ 
+ 	/*Clean fetched data: */
+-	iomodel->DeleteData(7,MeshElementsEnum,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15428)
+@@ -24,7 +24,6 @@
+ 	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
+ 	iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+ 	iomodel->Constant(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+-	iomodel->FetchData(1,MeshElementsEnum);
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+@@ -93,7 +92,4 @@
+ 	if(~ispdd & ~issmbgradients){
+ 		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15428)
+@@ -12,11 +12,7 @@
+ 
+ 	/*Intermediary*/
+ 	bool continuous_galerkin=true;
+-	int    numberofvertices;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -29,7 +25,7 @@
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	for(int i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15428)
+@@ -10,15 +10,9 @@
+ 
+ void	UpdateElementsSurfaceSlope(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -34,7 +28,4 @@
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15428)
+@@ -10,15 +10,12 @@
+ 
+ 	/*Intermediary*/
+ 	int      hydrology_model;
+-	int      numberofvertices;
+-	Pengrid *pengrid = NULL;
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+@@ -29,16 +26,13 @@
+ 	}
+ 
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+-	iomodel->FetchData(1,MeshElementsEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+-
+-	for(int i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		/*keep only this partition's nodes:*/
+ 		if((iomodel->my_vertices[i]==1)){
+ 			loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
+ 		}
+ 	}
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*ploads=loads;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15428)
+@@ -11,13 +11,10 @@
+ void	CreateNodesHydrologyDCInefficient(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int  i;
+ 	bool continuous_galerkin=true;
+ 	int  hydrology_model;
+-	int  numberofvertices;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 
+ 	/*Recover pointer: */
+@@ -37,7 +34,7 @@
+ 
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		if(iomodel->my_vertices[i]){
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15428)
+@@ -12,22 +12,19 @@
+ 
+ 	bool   isefficientlayer;
+ 	int    hydrology_model;
+-	int    numberofelements;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 
+ 	/*Now, do we really want DC?*/
+ 	if(hydrology_model!=HydrologydcEnum) return;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	iomodel->FetchData(1,MeshElementsEnum);
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -45,7 +42,4 @@
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,SedimentHeadEnum);
+ 	if(isefficientlayer)iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveEnum);
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 15428)
+@@ -8,26 +8,19 @@
+ 
+ void	CreateLoadsThermal(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int      numberofvertices;
+-	Pengrid *pengrid          = NULL;
+-
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+ 	if(iomodel->dim==2) _error_("2d meshes not supported yet");
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+ 
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+-	iomodel->FetchData(2,ThermalSpctemperatureEnum,MeshElementsEnum);
++	iomodel->FetchData(1,ThermalSpctemperatureEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 
+-	for(int i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		/*keep only this partition's nodes:*/
+ 		if((iomodel->my_vertices[i]==1)){
+@@ -36,7 +29,7 @@
+ 			}
+ 		}
+ 	}
+-	iomodel->DeleteData(2,ThermalSpctemperatureEnum,MeshElementsEnum);
++	iomodel->DeleteData(1,ThermalSpctemperatureEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*ploads=loads;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15428)
+@@ -13,10 +13,6 @@
+ 	/*Intermediary*/
+ 	bool continuous_galerkin=true;
+ 
+-	/*Fetch parameters: */
+-	int    numberofvertices;
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -29,7 +25,7 @@
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	for(int i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 			/*Add node to nodes dataset: */
+ 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,ThermalAnalysisEnum));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15428)
+@@ -10,22 +10,12 @@
+ 
+ void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
+-	bool   dakota_analysis;
+-
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+ 	if(iomodel->dim==2)return;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-
+-	/*Fetch data needed: */
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -53,12 +43,11 @@
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+ 
++	bool dakota_analysis;
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	if(dakota_analysis){
+ 		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+ 		elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+ 		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
+ 	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15428)
+@@ -11,13 +11,10 @@
+ void	CreateNodesHydrologyShreve(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int  i;
+ 	int  hydrology_model;
+ 	bool continuous_galerkin=true;
+-	int  numberofvertices;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 
+ 	/*Recover pointer: */
+@@ -37,7 +34,7 @@
+ 
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		if(iomodel->my_vertices[i]){
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15428)
+@@ -11,21 +11,16 @@
+ void	UpdateElementsHydrologyShreve(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	int    hydrology_model;
+-	int    numberofelements;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 
+ 	/*Now, do we really want Shreve?*/
+ 	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+-	/*Fetch data needed: */
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -45,6 +40,4 @@
+ 
+ 	elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
+ 
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15428)
+@@ -11,13 +11,8 @@
+ void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	bool continuous_galerkin=true;
+ 
+-	/*Fetch parameters: */
+-	int    numberofvertices;
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -30,7 +25,7 @@
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15428)
+@@ -10,15 +10,9 @@
+ 
+ void	UpdateElementsBedSlope(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -29,12 +23,8 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+-
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15428)
+@@ -10,20 +10,12 @@
+ 
+ void	UpdateElementsMelting(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+ 	if(iomodel->dim==2)return;
+ 
+-	/*Fetch data needed: */
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -47,7 +39,4 @@
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,PressureEnum);
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 15428)
+@@ -8,10 +8,6 @@
+ 
+ void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int numberofvertices;
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*if 2d: Error*/
+ 	if(iomodel->dim==2) _error_("2d meshes not supported yet");
+ 
+@@ -22,17 +18,17 @@
+ 	if(!loads) loads = new Loads();
+ 
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshElementsEnum);
++	iomodel->FetchData(1,MeshVertexonbedEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 
+-	for(int i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if((iomodel->my_vertices[i]==1)){
+ 			if (reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
+ 			}
+ 		}
+ 	}
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshElementsEnum);
++	iomodel->DeleteData(1,MeshVertexonbedEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*ploads=loads;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15428)
+@@ -11,13 +11,8 @@
+ void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	bool continuous_galerkin=true;
+-	int    numberofvertices;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -29,7 +24,7 @@
+ 
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		if(iomodel->my_vertices[i]){
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15428)
+@@ -16,7 +16,6 @@
+ void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	int    materials_type;
+-	int    numberofelements;
+ 	bool   ismacayealpattyn;
+ 	bool   isl1l2;
+ 	bool   isstokes;
+@@ -27,7 +26,6 @@
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+ 	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+ 	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&materials_type,MaterialsEnum);
+@@ -36,11 +34,11 @@
+ 	if(!ismacayealpattyn & !isstokes &!isl1l2) return;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->FetchData(2,MeshElementsEnum,FlowequationElementEquationEnum);
++	iomodel->FetchData(1,FlowequationElementEquationEnum);
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -102,5 +100,5 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(2,MeshElementsEnum,FlowequationElementEquationEnum);
++	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15428)
+@@ -18,7 +18,6 @@
+ 	int i;
+ 	int count=0;
+ 	int penpair_ids[2];
+-	int numberofvertices;
+ 	bool ismacayealpattyn,isstokes,isl1l2;
+ 	int  numpenalties,numberofpressureloads,numrifts,numriftsegments;
+ 	IssmDouble *pressureload   = NULL;
+@@ -32,7 +31,6 @@
+ 	IssmDouble *penalties      = NULL;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+ 	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15428)
+@@ -40,11 +40,9 @@
+ 	/*Output*/
+ 	Constraints *constraints      = NULL;
+ 	SpcStatic   *spcstatic        = NULL;
+-	int          numberofvertices;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&g,ConstantsGEnum);
+ 	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+ 	iomodel->Constant(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+@@ -97,7 +95,7 @@
+ 	}
+ 
+ 	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+-	for (i=0;i<numberofvertices;i++){
++	for(i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Start with adding spcs of coupling: zero at the border macayeal/pattyn for the appropriate dofs*/
+@@ -217,11 +215,11 @@
+ 			}
+ 			/*Now add the regular spcs*/
+ 			else{
+-				if (Mx==numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
++				if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 					count++;
+ 				}
+-				else if (Mx==numberofvertices+1) {
++				else if (Mx==iomodel->numberofvertices+1) {
+ 					/*figure out times and values: */
+ 					values=xNew<IssmDouble>(Nx);
+ 					spcpresent=false;
+@@ -241,11 +239,11 @@
+ 					count++;
+ 				}
+ 
+-				if (My==numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
++				if (My==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
+ 					count++;
+ 				}
+-				else if (My==numberofvertices+1){
++				else if (My==iomodel->numberofvertices+1){
+ 					/*figure out times and values: */
+ 					values=xNew<IssmDouble>(Ny);
+ 					spcpresent=false;
+@@ -265,11 +263,11 @@
+ 				}
+ 
+ 				if (reCast<int,IssmDouble>(vertices_type[i])==StokesApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
+-					if (Mz==numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
++					if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+ 						count++;
+ 					}
+-					else if (Mz==numberofvertices+1){
++					else if (Mz==iomodel->numberofvertices+1){
+ 						/*figure out times and values: */
+ 						values=xNew<IssmDouble>(Nz);
+ 						spcpresent=false;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15428)
+@@ -11,13 +11,10 @@
+ void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	bool   continuous_galerkin=true;
+-	int    numberofvertices;
+ 	bool   isstokes,isl1l2,ismacayealpattyn;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+ 	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+ 	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+@@ -41,7 +38,7 @@
+ 	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		if(iomodel->my_vertices[i]){
+ 
+@@ -58,7 +55,7 @@
+ 
+ 		iomodel->Constant(&numberofedges,MeshNumberofedgesEnum);
+ 
+-		for (i=0;i<numberofedges;i++){
++		for(int i=0;i<numberofedges;i++){
+ 
+ 			/*Get left and right elements*/
+ 			element1=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+2])-1; //edges are [node1 node2 elem1 elem2]
+@@ -72,7 +69,7 @@
+ 
+ 			/*Add node on edge*/
+ 			if(my_edge){
+-				nodes->AddObject(new Node(iomodel->nodecounter+numberofvertices+i+1,numberofvertices+i,numberofvertices+i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
++				nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,iomodel->numberofvertices+i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 15428)
+@@ -10,17 +10,9 @@
+ 
+ void	UpdateElementsGia(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-
+-	/*Fetch data needed: */
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -32,7 +24,4 @@
+ 	iomodel->FetchDataToInput(elements,GiaMantleViscosityEnum);
+ 	iomodel->FetchDataToInput(elements,GiaLithosphereThicknessEnum);
+ 
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+-
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 15428)
+@@ -11,13 +11,8 @@
+ void	CreateNodesGia(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	bool continuous_galerkin=true;
+ 
+-	/*Fetch parameters: */
+-	int    numberofvertices;
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -31,7 +26,7 @@
+ 	iomodel->FetchData(1,MaskVertexonwaterEnum);
+ 
+ 	/*First fetch data: */
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15428)
+@@ -16,13 +16,9 @@
+ 	int  vertex_id;
+ 	int  io_index;
+ 	bool continuous_galerkin=true;
+-	int    numberofelements;
+-	int    numberofvertices;
+-	int    stabilization;
++	int  stabilization;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 
+ 	/*Recover pointer: */
+@@ -39,12 +35,12 @@
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+-	iomodel->FetchData(7,MeshElementsEnum,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+ 	if(continuous_galerkin){
+ 
+ 		/*Build Nodes dataset (Continuous Galerkin)*/
+-		for (i=0;i<numberofvertices;i++){
++		for (i=0;i<iomodel->numberofvertices;i++){
+ 			if(iomodel->my_vertices[i]){
+ 
+ 				/*Add node to nodes dataset: */
+@@ -56,15 +52,15 @@
+ 	else{
+ 
+ 		/*Build Nodes dataset -> 3 for each element (Discontinuous Galerkin)*/
+-		for (i=0;i<numberofelements;i++){
++		for (i=0;i<iomodel->numberofelements;i++){
+ 			for (j=0;j<3;j++){
+ 
+ 				if(iomodel->my_nodes[3*i+j]){ 
+ 
+ 					//Get index of the vertex on which the current node is located
+-					vertex_id=reCast<int,IssmDouble>(*(iomodel->Data(MeshElementsEnum)+3*i+j)); //(Matlab indexing)
+-					io_index=vertex_id-1;                      //(C indexing)
+-					_assert_(vertex_id>0 && vertex_id<=numberofvertices);
++					vertex_id=iomodel->elements[3*i+j]; //(Matlab indexing)
++					io_index=vertex_id-1;               //(C indexing)
++					_assert_(vertex_id>0 && vertex_id<=iomodel->numberofvertices);
+ 
+ 					//Compute Node id
+ 					node_id=iomodel->nodecounter+3*i+j+1;
+@@ -78,7 +74,7 @@
+ 	}
+ 
+ 	/*Clean fetched data: */
+-	iomodel->DeleteData(7,MeshElementsEnum,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15428)
+@@ -10,15 +10,9 @@
+ 
+ void	UpdateElementsBalancethickness(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -41,6 +35,4 @@
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15428)
+@@ -27,7 +27,7 @@
+ 	if (stabilization==3){
+ 
+ 		/*Get edges and elements*/
+-		iomodel->FetchData(3,MeshEdgesEnum,MeshElementsEnum,ThicknessEnum);
++		iomodel->FetchData(2,MeshEdgesEnum,ThicknessEnum);
+ 
+ 		/*First load data:*/
+ 		for (int i=0;i<numberofedges;i++){
+@@ -43,7 +43,7 @@
+ 		}
+ 
+ 		/*Free data: */
+-		iomodel->DeleteData(3,MeshEdgesEnum,MeshElementsEnum,ThicknessEnum);
++		iomodel->DeleteData(2,MeshEdgesEnum,ThicknessEnum);
+ 	}
+ 
+ 	/*Assign output pointer: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 15428)
+@@ -35,7 +35,6 @@
+ 	bool     dakota_analysis=false;
+ 	char*    name=NULL;
+ 	int      numberofresponses;
+-	int      numberofvertices;
+ 	int      nrows;
+ 	int      ncols;
+ 
+@@ -51,7 +50,6 @@
+ 
+ 		iomodel->Constant(&name,MiscellaneousNameEnum);
+ 		iomodel->Constant(&numberofresponses,QmuNumberofresponsesEnum);
+-		iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 		/*name of qmu input, error and output files:{{{*/
+ 		qmuinname=xNew<char>((strlen(rootpath)+strlen(name)+strlen(".qmu.in")+1));
+@@ -91,10 +89,10 @@
+ 			/*Partition elements and vertices and nodes: */
+ 			ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
+ 
+-			dpart=xNew<double>(numberofvertices);
+-			for(i=0;i<numberofvertices;i++)dpart[i]=iomodel->my_vertices[i];
++			dpart=xNew<double>(iomodel->numberofvertices);
++			for(i=0;i<iomodel->numberofvertices;i++)dpart[i]=iomodel->my_vertices[i];
+ 		}
+-		parameters->AddObject(new DoubleVecParam(QmuPartitionEnum,dpart,numberofvertices));
++		parameters->AddObject(new DoubleVecParam(QmuPartitionEnum,dpart,iomodel->numberofvertices));
+ 		/*}}}*/
+ 		/*Deal with data needed because of qmu variables: {{{*/
+ 
+@@ -108,7 +106,7 @@
+ 				iomodel->FetchData(&dakota_parameter,&nrows,&ncols,StringToEnumx(tag));
+ 
+ 				/*Add to parameters: */
+-				if(nrows==numberofvertices){
++				if(nrows==iomodel->numberofvertices){
+ 					parameters->AddObject(new DoubleMatParam(StringToEnumx(tag),dakota_parameter,nrows,ncols));
+ 				}
+ 				else{
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15428)
+@@ -11,15 +11,10 @@
+ void	CreateNodesHydrologyDCEfficient(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int  i;
+ 	bool isefficientlayer;
+ 	bool continuous_galerkin=true;
+ 	int  hydrology_model;
+-	int  numberofvertices;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -45,7 +40,7 @@
+ 
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		if(iomodel->my_vertices[i]){
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15428)
+@@ -12,11 +12,7 @@
+ 
+ 	bool   isefficientlayer;
+ 	int    hydrology_model;
+-	int    numberofelements;
+ 
+-	/*Fetch data needed: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-
+ 	/*Now, do we really want DC?*/
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 	if(hydrology_model!=HydrologydcEnum) return;
+@@ -25,12 +21,9 @@
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	if(!isefficientlayer) return;
+ 
+-	/*Fetch data needed: */
+-	iomodel->FetchData(1,MeshElementsEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+@@ -47,7 +40,4 @@
+ 	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,EplHeadEnum);
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp	(revision 15428)
+@@ -9,17 +9,12 @@
+ void	CreateLoadsHydrologyDCEfficient(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	bool     isefficientlayer;
+-	int      hydrology_model;
+-	int      numberofvertices;
+-	Pengrid *pengrid = NULL;
++	bool isefficientlayer;
++	int  hydrology_model;
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 15428)
+@@ -12,7 +12,6 @@
+ 
+ 	bool        isgl;
+ 	int         migration_style;
+-	int         i,numberofvertices;
+ 	IssmDouble  rho_ice,rho_water;
+ 	IssmDouble *phi   = NULL;
+ 
+@@ -25,25 +24,24 @@
+ 		/*get parameters and constants: */
+ 		iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+ 		iomodel->Constant(&rho_water,MaterialsRhoWaterEnum);
+-		iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-		iomodel->FetchData(3,MeshElementsEnum,ThicknessEnum,BathymetryEnum);
++		iomodel->FetchData(2,ThicknessEnum,BathymetryEnum);
+ 
+ 		/*Create phi vector */
+-		phi=xNew<IssmDouble>(numberofvertices);
+-		for (i=0;i<numberofvertices;i++){
++		phi=xNew<IssmDouble>(iomodel->numberofvertices);
++		for(int i=0;i<iomodel->numberofvertices;i++){
+ 			if(iomodel->my_vertices[i]){
+ 				phi[i] = iomodel->Data(ThicknessEnum)[i] + rho_water/rho_ice * iomodel->Data(BathymetryEnum)[i];
+ 			}
+ 		}
+ 
+ 		/*Update elements: */
+-		for(i=0;i<elements->Size();i++){
++		for(int i=0;i<elements->Size();i++){
+ 			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-			element->InputCreate(phi,element->Sid(),iomodel,numberofvertices,1,1,GLlevelsetEnum,1);
++			element->InputCreate(phi,element->Sid(),iomodel,iomodel->numberofvertices,1,1,GLlevelsetEnum,1);
+ 		}
+ 
+ 		/*Free ressources:*/
+-		iomodel->DeleteData(3,MeshElementsEnum,ThicknessEnum,BathymetryEnum);
++		iomodel->DeleteData(2,ThicknessEnum,BathymetryEnum);
+ 		xDelete<IssmDouble>(phi);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 15428)
+@@ -16,12 +16,8 @@
+ void CreateSingleNodeToElementConnectivity(IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i,j;
+ 	int vertexid;
+ 	int elementswidth;
+-	int    numberofelements;
+-	int    numberofvertices;
+-	IssmDouble* elements=NULL;
+ 
+ 	/*output*/
+ 	int* connectivity=NULL;
+@@ -29,19 +25,14 @@
+ 	/*Return if connectivity already present*/
+ 	if(iomodel->singlenodetoelementconnectivity) return;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-	elements=iomodel->Data(MeshElementsEnum);
+-
+ 	/*Some checks if debugging*/
+-	_assert_(numberofvertices);
+-	_assert_(numberofelements);
++	_assert_(iomodel->numberofvertices);
++	_assert_(iomodel->numberofelements);
+ 	_assert_(iomodel->my_elements);
+-	_assert_(elements);
++	_assert_(iomodel->elements);
+ 
+ 	/*Allocate ouput*/
+-	connectivity=xNewZeroInit<int>(numberofvertices);
++	connectivity=xNewZeroInit<int>(iomodel->numberofvertices);
+ 
+ 	/*Get element width (3 or 6)*/
+ 	if(iomodel->dim==2){
+@@ -52,12 +43,12 @@
+ 	}
+ 
+ 	/*Create connectivity table*/
+-	for (i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		/*!! in parallel we do not want the vertex to be connected to an element that is not in its partition!!*/
+ 		if(iomodel->my_elements[i]){
+-			for (j=0;j<elementswidth;j++){
+-				vertexid=reCast<int>(elements[elementswidth*i+j]);
+-				_assert_(vertexid>0 && vertexid-1<numberofvertices);
++			for(int j=0;j<elementswidth;j++){
++				vertexid=iomodel->elements[elementswidth*i+j];
++				_assert_(vertexid>0 && vertexid-1<iomodel->numberofvertices);
+ 				connectivity[vertexid-1]=i+1;
+ 			}
+ 		}
+@@ -65,6 +56,4 @@
+ 
+ 	/*Assign to iomodel*/
+ 	iomodel->singlenodetoelementconnectivity=connectivity;
+-
+-	/*Do not free connectivity!!!*/
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15428)
+@@ -12,8 +12,6 @@
+ 	/*Intermediary*/
+ 	int i;
+ 	int materials_type;
+-	int numberofelements;
+-	int numberofvertices;
+ 	bool control_analysis;
+ 	bool dakota_analysis;
+ 
+@@ -23,8 +21,6 @@
+ 	Materials *materials = NULL;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&materials_type,MaterialsEnum);
+@@ -37,14 +33,14 @@
+ 	vertices  = new Vertices();
+ 	materials = new Materials();
+ 
+-	iomodel->FetchData(2,MeshElementsEnum,MeshElementconnectivityEnum);
++	iomodel->FetchData(1,MeshElementconnectivityEnum);
+ 	#ifdef _HAVE_3D_
+ 	if(iomodel->dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+ 	#endif
+ 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+ 
+ 	/*Create elements*/
+-	for (i=0;i<numberofelements;i++){
++	for(i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 
+ 			/*Create and add tria element to elements dataset: */
+@@ -59,7 +55,7 @@
+ 	switch(materials_type){
+ 		case MaticeEnum:
+ 			iomodel->FetchData(2,MaterialsRheologyBEnum,MaterialsRheologyNEnum);
+-			for (i=0;i<numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
++			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
+ 			if(dakota_analysis){
+ 				if(iomodel->dim==2) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
+            #ifdef _HAVE_3D_
+@@ -69,27 +65,27 @@
+ 			break;
+ 		case MatdamageiceEnum:
+ 			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum);
+-			for (i=0;i<numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matdamageice(i+1,i,iomodel));
++			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matdamageice(i+1,i,iomodel));
+ 			break;
+ 		default:
+ 			_error_("Materials "<<EnumToStringx(materials_type)<<" not supported");
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(10,MeshElementsEnum,MeshElementconnectivityEnum,MeshUpperelementsEnum,MeshLowerelementsEnum,
++	iomodel->DeleteData(9,MeshElementconnectivityEnum,MeshUpperelementsEnum,MeshLowerelementsEnum,
+ 				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum,InversionControlParametersEnum,InversionMinParametersEnum,
+ 				InversionMaxParametersEnum);
+ 
+ 	/*Add new constant material property to materials, at the end: */
+-	materials->AddObject(new Matpar(numberofelements+1,iomodel));//put it at the end of the materials
++	materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));//put it at the end of the materials
+ 
+ 	/*Create vertices: */
+ 
+ 	/*Fetch data:*/
+-	iomodel->FetchData(7,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
++	iomodel->FetchData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
+ 	CreateNumberNodeToElementConnectivity(iomodel);
+ 
+-	for (i=0;i<numberofvertices;i++){
++	for(i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		/*vertices and nodes (same number, as we are running continuous galerkin formulation): */
+ 		if(iomodel->my_vertices[i]){
+@@ -100,7 +96,7 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(7,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
++	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pelements=elements;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15428)
+@@ -20,8 +20,6 @@
+ 
+ 	int my_rank;
+ 	int num_procs;
+-	int    numberofelements;
+-	int    numberofvertices;
+ 	int    numberofelements2d;
+ 	int    numberofvertices2d;
+ 	int    numlayers;
+@@ -37,18 +35,15 @@
+ 	int* npart=NULL; //node partitioning.
+ 	int  elements_width; //number of columns in elements (2d->3, 3d->6)
+ 	int  el1,el2;
+-	IssmDouble* elements=NULL;
+-	IssmDouble* elements2d=NULL;
++	int* elements2d=NULL;
++	int* vertex_pairing=NULL;
+ 	IssmDouble* riftinfo=NULL;
+-	IssmDouble* vertex_pairing=NULL;
+ 
+ 	/*Get my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-	num_procs=IssmComm::GetSize();
++	my_rank   = IssmComm::GetRank();
++	num_procs = IssmComm::GetSize();
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&numberofelements2d,MeshNumberofelements2dEnum);
+ 	iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
+ 	iomodel->Constant(&numlayers,MeshNumberoflayersEnum);
+@@ -61,18 +56,16 @@
+ 	/*Determine parallel partitioning of elements: we use Metis for now. First load the data, then partition*/
+ 	if(iomodel->dim==2){
+ 		elements_width=3; //tria elements
+-		iomodel->FetchData(&elements,NULL,NULL,MeshElementsEnum);
+ 	}
+ 	else{
+ 		elements_width=6; //penta elements
+ 		iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
+ 	}
+ 
+-	MeshPartitionx(&epart, &npart,numberofelements,numberofvertices,elements, numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->dim,num_procs);
++	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->dim,num_procs);
+ 
+-	/*Free elements and elements2d: */
+-	iomodel->DeleteData(elements,MeshElementsEnum);
+-	iomodel->DeleteData(elements2d,MeshElements2dEnum);
++	/*Free elements2d: */
++	xDelete<int>(elements2d);
+ 
+ 	/*Deal with rifts, they have to be included into one partition only, not several: */
+ 	if(numrifts){
+@@ -86,12 +79,11 @@
+ 	}
+ 
+ 	/*Used later on: */
+-	my_vertices=xNewZeroInit<int>(numberofvertices);
+-	my_elements=xNewZeroInit<bool>(numberofelements);
++	my_vertices=xNewZeroInit<int>(iomodel->numberofvertices);
++	my_elements=xNewZeroInit<bool>(iomodel->numberofelements);
+ 
+ 	/*Start figuring out, out of the partition, which elements belong to this cpu: */
+-	iomodel->FetchData(&elements,NULL,NULL,MeshElementsEnum);
+-	for (i=0;i<numberofelements;i++){
++	for (i=0;i<iomodel->numberofelements;i++){
+ 
+ 		/*!All elements have been partitioned above, only deal with elements for this cpu: */
+ 		if(my_rank==epart[i]){ 
+@@ -102,37 +94,35 @@
+ 			 *the  element index to do this. For each element n, we know index[n][0:2] holds the indices (matlab indexing) 
+ 			 into the vertices coordinates. If we start plugging 1 into my_vertices for each index[n][i] (i=0:2), then my_vertices 
+ 			 will hold which vertices belong to this partition*/
+-			my_vertices[reCast<int>(*(elements+elements_width*i+0))-1]=1;
+-			my_vertices[reCast<int>(*(elements+elements_width*i+1))-1]=1;
+-			my_vertices[reCast<int>(*(elements+elements_width*i+2))-1]=1;
++			my_vertices[iomodel->elements[elements_width*i+0]-1]=1;
++			my_vertices[iomodel->elements[elements_width*i+1]-1]=1;
++			my_vertices[iomodel->elements[elements_width*i+2]-1]=1;
+ 
+ 			if(elements_width==6){
+-				my_vertices[reCast<int>(*(elements+elements_width*i+3))-1]=1;
+-				my_vertices[reCast<int>(*(elements+elements_width*i+4))-1]=1;
+-				my_vertices[reCast<int>(*(elements+elements_width*i+5))-1]=1;
++				my_vertices[iomodel->elements[elements_width*i+3]-1]=1;
++				my_vertices[iomodel->elements[elements_width*i+4]-1]=1;
++				my_vertices[iomodel->elements[elements_width*i+5]-1]=1;
+ 			}
+ 		}
+-	}//for (i=0;i<numberofelements;i++)
+-	/*Free data : */
+-	iomodel->DeleteData(elements,MeshElementsEnum);
++	}
+ 
+ 	/*We might have vertex_pairing in which case, some vertices have to be cloned:
+ 	 * penpair has 2 nodes that are poointing toward 2 vertices.
+ 	 * The 2 vertices must be in the same cpu as the penpair*/
+ 	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,DiagnosticVertexPairingEnum);
+ 	for(i=0;i<numvertex_pairing;i++){
+-		if(my_vertices[reCast<int>(vertex_pairing[2*i+0])-1] && !my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]){
+-			my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]=2; //to know that these elements are not on the partition
++		if(my_vertices[vertex_pairing[2*i+0]-1] && !my_vertices[vertex_pairing[2*i+1]-1]){
++			my_vertices[vertex_pairing[2*i+1]-1]=2; //to know that these elements are not on the partition
+ 		}
+ 	}
+-	iomodel->DeleteData(vertex_pairing,DiagnosticVertexPairingEnum);
++	xDelete<int>(vertex_pairing);
+ 	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,PrognosticVertexPairingEnum);
+ 	for(i=0;i<numvertex_pairing;i++){
+-		if(my_vertices[reCast<int>(vertex_pairing[2*i+0])-1] && !my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]){
+-			my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]=2; //to know that these elements are not on the partition
++		if(my_vertices[vertex_pairing[2*i+0]-1] && !my_vertices[vertex_pairing[2*i+1]-1]){
++			my_vertices[vertex_pairing[2*i+1]-1]=2; //to know that these elements are not on the partition
+ 		}
+ 	}
+-	iomodel->DeleteData(vertex_pairing,PrognosticVertexPairingEnum);
++	xDelete<int>(vertex_pairing);
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(npart);
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15428)
+@@ -19,14 +19,12 @@
+ 	IssmDouble *values           = NULL;
+ 	bool        spcpresent       = false;
+ 	int         count            = 0;
+-	int         numberofvertices;
+ 
+ 	/*variables being fetched: */
+ 	IssmDouble *IssmDoublevector  = NULL;
+ 	int     M,N;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 
+ 	/*First of, find the record for the enum, and get code  of data type: */
+@@ -39,12 +37,12 @@
+ 	iomodel->FetchData(&IssmDoublevector,&M,&N,vector_enum);
+ 
+ 	/*Transient or static?:*/
+-	if(M==numberofvertices){
++	if(M==iomodel->numberofvertices){
+ 		/*static: just create Constraints objects*/
+ 		count=0;
+ 
+ 		/*Create Constraints from x,y,z: */
+-		for (i=0;i<numberofvertices;i++){
++		for (i=0;i<iomodel->numberofvertices;i++){
+ 
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+@@ -57,7 +55,7 @@
+ 			}
+ 		}
+ 	}
+-	else if (M==(numberofvertices+1)){
++	else if (M==(iomodel->numberofvertices+1)){
+ 		/*transient: create transient SpcTransient objects. Same logic, except we need to retrieve 
+ 		 * various times and values to initialize an SpcTransient object: */
+ 		count=0;
+@@ -69,7 +67,7 @@
+ 		}
+ 
+ 		/*Create constraints from x,y,z: */
+-		for (i=0;i<numberofvertices;i++){
++		for (i=0;i<iomodel->numberofvertices;i++){
+ 
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15428)
+@@ -753,7 +753,7 @@
+ 
+ 		/*Get B*/
+ 		if (iomodel->Data(MaterialsRheologyBEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+i]-1];
+ 			this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,nodeinputs,P1Enum));
+ 		}
+ 
+@@ -765,7 +765,7 @@
+ 
+ 		/*Get Z*/
+ 		if (iomodel->Data(MaterialsRheologyZEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[iomodel->elements[num_vertices*index+i]-1];
+ 			this->inputs->AddInput(new TriaInput(MaterialsRheologyZbarEnum,nodeinputs,P1Enum));
+ 		}
+ 
+@@ -777,18 +777,18 @@
+ 					case MaterialsRheologyBbarEnum:
+ 						if (iomodel->Data(MaterialsRheologyBEnum)){
+ 							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+j]-1];
++							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 					case MaterialsRheologyZbarEnum:
+ 						if (iomodel->Data(MaterialsRheologyZEnum)){
+ 							_assert_(iomodel->Data(MaterialsRheologyZEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[iomodel->elements[num_vertices*index+j]-1];
++							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyZbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+@@ -811,7 +811,7 @@
+ 
+ 		/*Get B*/
+ 		if (iomodel->Data(MaterialsRheologyBEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+i]-1];
+ 			this->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,nodeinputs,P1Enum));
+ 		}
+ 
+@@ -823,7 +823,7 @@
+ 
+ 		/*Get Z*/
+ 		if (iomodel->Data(MaterialsRheologyZEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[iomodel->elements[num_vertices*index+i]-1];
+ 			this->inputs->AddInput(new PentaInput(MaterialsRheologyZEnum,nodeinputs,P1Enum));
+ 		}
+ 
+@@ -835,18 +835,18 @@
+ 					case MaterialsRheologyBbarEnum:
+ 						if (iomodel->Data(MaterialsRheologyBEnum)){
+ 							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+j]-1];
++							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 					case MaterialsRheologyZbarEnum:
+ 						if (iomodel->Data(MaterialsRheologyZEnum)){
+ 							_assert_(iomodel->Data(MaterialsRheologyZEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[iomodel->elements[num_vertices*index+j]-1];
++							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyZEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15428)
+@@ -703,7 +703,7 @@
+ 
+ 		/*Get B*/
+ 		if (iomodel->Data(MaterialsRheologyBEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+i]-1];
+ 			this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,nodeinputs,P1Enum));
+ 		}
+ 
+@@ -721,9 +721,9 @@
+ 					case MaterialsRheologyBbarEnum:
+ 						if (iomodel->Data(MaterialsRheologyBEnum)){
+ 							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+j]-1];
++							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+@@ -738,14 +738,14 @@
+ 	else if(iomodel->dim==3){
+ 
+ 		/*Intermediaries*/
+-		const int num_vertices = 6; //Penta has 6 vertices
+-		IssmDouble    nodeinputs[num_vertices];
+-		IssmDouble    cmmininputs[num_vertices];
+-		IssmDouble    cmmaxinputs[num_vertices];
++		const int  num_vertices = 6; //Penta has 6 vertices
++		IssmDouble nodeinputs[num_vertices];
++		IssmDouble cmmininputs[num_vertices];
++		IssmDouble cmmaxinputs[num_vertices];
+ 
+ 		/*Get B*/
+ 		if (iomodel->Data(MaterialsRheologyBEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+i]-1)];
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+i]-1];
+ 			this->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,nodeinputs,P1Enum));
+ 		}
+ 
+@@ -763,9 +763,9 @@
+ 					case MaterialsRheologyBbarEnum:
+ 						if (iomodel->Data(MaterialsRheologyBEnum)){
+ 							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+j]-1];
++							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15428)
+@@ -92,10 +92,10 @@
+ 		/*2: Get the column where these ids are located in the index*/
+ 		pos1=pos2=pos3=pos4=UNDEF;
+ 		for(j=0;j<3;j++){
+-			if (iomodel->Data(MeshElementsEnum)[3*(e1-1)+j]==i1) pos1=j+1;
+-			if (iomodel->Data(MeshElementsEnum)[3*(e1-1)+j]==i2) pos2=j+1;
+-			if (iomodel->Data(MeshElementsEnum)[3*(e2-1)+j]==i1) pos3=j+1;
+-			if (iomodel->Data(MeshElementsEnum)[3*(e2-1)+j]==i2) pos4=j+1;
++			if (iomodel->elements[3*(e1-1)+j]==i1) pos1=j+1;
++			if (iomodel->elements[3*(e1-1)+j]==i2) pos2=j+1;
++			if (iomodel->elements[3*(e2-1)+j]==i1) pos3=j+1;
++			if (iomodel->elements[3*(e2-1)+j]==i2) pos4=j+1;
+ 		}
+ 		_assert_(pos1!=UNDEF && pos2!=UNDEF && pos3!=UNDEF && pos4!=UNDEF);
+ 
+@@ -111,8 +111,8 @@
+ 		/*2: Get the column where these ids are located in the index*/
+ 		pos1=pos2=UNDEF;
+ 		for(j=0;j<3;j++){
+-			if (iomodel->Data(MeshElementsEnum)[3*(e1-1)+j]==i1) pos1=j+1;
+-			if (iomodel->Data(MeshElementsEnum)[3*(e1-1)+j]==i2) pos2=j+1;
++			if (iomodel->elements[3*(e1-1)+j]==i1) pos1=j+1;
++			if (iomodel->elements[3*(e1-1)+j]==i2) pos2=j+1;
+ 		}
+ 		_assert_(pos1!=UNDEF && pos2!=UNDEF);
+ 
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15428)
+@@ -42,16 +42,9 @@
+ 	int pengrid_matpar_id;
+ 	int pengrid_element_id;
+ 
+-	int numberofvertices;
+-	int numberofelements;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-
+ 	/*Some checks if debugging activated*/
+ 	_assert_(iomodel->singlenodetoelementconnectivity);
+-	_assert_(index>=0 && index<numberofvertices);
++	_assert_(index>=0 && index<iomodel->numberofvertices);
+ 	_assert_(id);
+ 
+ 	/*id: */
+@@ -62,7 +55,7 @@
+ 	pengrid_node_id=iomodel->nodecounter+index+1;
+ 	pengrid_element_id=iomodel->singlenodetoelementconnectivity[index];
+ 	_assert_(pengrid_element_id);
+-	pengrid_matpar_id=numberofelements+1; //refers to the constant material parameters object
++	pengrid_matpar_id=iomodel->numberofelements+1; //refers to the constant material parameters object
+ 
+ 	this->hnode=new Hook(&pengrid_node_id,1);
+ 	this->helement=new Hook(&pengrid_element_id,1);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15428)
+@@ -1316,7 +1316,7 @@
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<3;i++){ 
+-		tria_vertex_ids[i]=reCast<int>(iomodel->Data(MeshElementsEnum)[3*index+i]); //ids for vertices are in the elements array from Matlab
++		tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
+ 	}
+ 
+ 	/*Control Inputs*/
+@@ -1650,13 +1650,9 @@
+ 	IssmDouble nodeinputs[3];
+ 	IssmDouble time;
+ 	TransientInput* transientinput=NULL;
+-	int    numberofvertices;
+-	int    numberofelements;
+ 	IssmDouble yts;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 
+ 	/*Branch on type of vector: nodal or elementary: */
+@@ -1664,12 +1660,12 @@
+ 
+ 		/*Recover vertices ids needed to initialize inputs*/
+ 		for(i=0;i<3;i++){ 
+-			_assert_(iomodel->Data(MeshElementsEnum));
+-			tria_vertex_ids[i]=reCast<int>(iomodel->Data(MeshElementsEnum)[3*index+i]); //ids for vertices are in the elements array from Matlab
++			_assert_(iomodel->elements);
++			tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
+ 		}
+ 
+ 		/*Are we in transient or static? */
+-		if(M==numberofvertices){
++		if(M==iomodel->numberofvertices){
+ 
+ 			/*create input values: */
+ 			for(i=0;i<3;i++)nodeinputs[i]=(IssmDouble)vector[tria_vertex_ids[i]-1];
+@@ -1677,7 +1673,7 @@
+ 			/*create static input: */
+ 			this->inputs->AddInput(new TriaInput(vector_enum,nodeinputs,P1Enum));
+ 		}
+-		else if(M==numberofvertices+1){
++		else if(M==iomodel->numberofvertices+1){
+ 			/*create transient input: */
+ 			for(t=0;t<N;t++){ //N is the number of times
+ 
+@@ -1695,11 +1691,11 @@
+ 			}
+ 			this->inputs->AddInput(transientinput);
+ 		}
+-		else _error_("nodal vector is either numberofnodes or numberofnodes+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long");
++		else _error_("nodal vector is either numberofvertices or numberofvertices+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long");
+ 	}
+ 	else if(vector_type==2){ //element vector
+ 		/*Are we in transient or static? */
+-		if(M==numberofelements){
++		if(M==iomodel->numberofelements){
+ 
+ 			/*static mode: create an input out of the element value: */
+ 
+@@ -2218,7 +2214,7 @@
+ 
+ 	/*Checks if debuging*/
+ 	/*{{{*/
+-	_assert_(iomodel->Data(MeshElementsEnum));
++	_assert_(iomodel->elements);
+ 	/*}}}*/
+ 
+ 	/*Fetch parameters: */
+@@ -2240,7 +2236,7 @@
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<3;i++){ 
+-		tria_vertex_ids[i]=reCast<int>(iomodel->Data(MeshElementsEnum)[3*index+i]); //ids for vertices are in the elements array from Matlab
++		tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
+ 	}
+ 
+ 	/*Recover nodes ids needed to initialize the node hook.*/
+@@ -2253,7 +2249,7 @@
+ 	else{
+ 		/*Continuous Galerkin*/
+ 		for(i=0;i<3;i++){ 
+-			tria_node_ids[i]=iomodel->nodecounter+reCast<int,IssmDouble>(*(iomodel->Data(MeshElementsEnum)+3*index+i)); //ids for vertices are in the elements array from Matlab
++			tria_node_ids[i]=iomodel->nodecounter+reCast<int,IssmDouble>(*(iomodel->elements+3*index+i)); //ids for vertices are in the elements array from Matlab
+ 		}
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15428)
+@@ -1394,13 +1394,9 @@
+ 	IssmDouble time;
+ 	TransientInput* transientinput=NULL;
+ 
+-	int    numberofvertices;
+-	int    numberofelements;
+ 	IssmDouble yts;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 
+ 	/*Branch on type of vector: nodal or elementary: */
+@@ -1408,12 +1404,12 @@
+ 
+ 		/*Recover vertices ids needed to initialize inputs*/
+ 		for(i=0;i<6;i++){ 
+-			_assert_(iomodel->Data(MeshElementsEnum));
+-			penta_vertex_ids[i]=reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[6*index+i]); //ids for vertices are in the elements array from Matlab
++			_assert_(iomodel->elements);
++			penta_vertex_ids[i]=iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
+ 		}
+ 
+ 		/*Are we in transient or static? */
+-		if(M==numberofvertices){
++		if(M==iomodel->numberofvertices){
+ 
+ 			/*create input values: */
+ 			for(i=0;i<6;i++)nodeinputs[i]=(IssmDouble)vector[penta_vertex_ids[i]-1];
+@@ -1421,7 +1417,7 @@
+ 			/*create static input: */
+ 			this->inputs->AddInput(new PentaInput(vector_enum,nodeinputs,P1Enum));
+ 		}
+-		else if(M==numberofvertices+1){
++		else if(M==iomodel->numberofvertices+1){
+ 			/*create transient input: */
+ 			for(t=0;t<N;t++){ //N is the number of times
+ 
+@@ -1439,11 +1435,11 @@
+ 			}
+ 			this->inputs->AddInput(transientinput);
+ 		}
+-		else _error_("nodal vector is either numberofnodes (" << numberofvertices << "), or numberofnodes+1 long. Field provided is " << M << " long. Enum " << EnumToStringx(vector_enum));
++		else _error_("nodal vector is either numberofvertices (" << iomodel->numberofvertices << "), or numberofvertices+1 long. Field provided is " << M << " long. Enum " << EnumToStringx(vector_enum));
+ 	}
+ 	else if(vector_type==2){ //element vector
+ 		/*Are we in transient or static? */
+-		if(M==numberofelements){
++		if(M==iomodel->numberofelements){
+ 
+ 			/*static mode: create an input out of the element value: */
+ 
+@@ -1733,12 +1729,12 @@
+ 
+ 	/*Checks if debuging*/
+ 	/*{{{*/
+-	_assert_(iomodel->Data(MeshElementsEnum));
++	_assert_(iomodel->elements);
+ 	/*}}}*/
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<6;i++){ 
+-		penta_vertex_ids[i]=reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[6*index+i]); //ids for vertices are in the elements array from Matlab
++		penta_vertex_ids[i]=iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
+ 	}
+ 
+ 	/*Control Inputs*/
+@@ -2935,7 +2931,7 @@
+ 
+ 	/*Checks if debuging*/
+ 	/*{{{*/
+-	_assert_(iomodel->Data(MeshElementsEnum));
++	_assert_(iomodel->elements);
+ 	/*}}}*/
+ 
+ 	/*Recover element type*/
+@@ -2950,13 +2946,13 @@
+ 	this->SetElementType(penta_type,analysis_counter);
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+-	for(i=0;i<6;i++) penta_vertex_ids[i]=reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[6*index+i]); //ids for vertices are in the elements array from Matlab
++	for(i=0;i<6;i++) penta_vertex_ids[i]=iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
+ 
+ 	/*Recover nodes ids needed to initialize the node hook.*/
+ 	for(i=0;i<6;i++){ 
+ 		//go recover node ids, needed to initialize the node hook.
+ 		//WARNING: We assume P1 elements here!!!!!
+-		penta_node_ids[i]=iomodel->nodecounter+reCast<int,IssmDouble>(iomodel->Data(MeshElementsEnum)[6*index+i]); //ids for vertices are in the elements array from Matlab
++		penta_node_ids[i]=iomodel->nodecounter+iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
+ 	}
+ 
+ 	/*hooks: */
+Index: ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 15428)
+@@ -56,7 +56,7 @@
+ 	/*retrieve vertices ids*/
+ 	int* vertex_ids = xNew<int>(numvertices);
+ 	for(int i=0;i<numvertices;i++){ 
+-		vertex_ids[i]=reCast<int>(iomodel->Data(MeshElementsEnum)[(element_id-1)*numvertices+i]);
++		vertex_ids[i]=reCast<int>(iomodel->elements[(element_id-1)*numvertices+i]);
+ 	}
+ 
+ 	this->numanalyses = in_numanalyses;
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 15427)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 15428)
+@@ -32,6 +32,8 @@
+ 
+ 		/*Mesh properties and connectivity tables*/
+ 		int   dim;
++		int   numberofvertices;
++		int   numberofelements;
+ 		int  *elements;
+ 		int  *edges;
+ 		int  *singlenodetoelementconnectivity;
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15427)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15428)
+@@ -68,7 +68,9 @@
+ 	this->my_vertices=NULL;
+ 
+ 	FetchData(&this->dim,MeshDimensionEnum);
+-	this->elements=NULL;
++	FetchData(&this->numberofvertices,MeshNumberofverticesEnum);
++	FetchData(&this->numberofelements,MeshNumberofelementsEnum);
++	FetchData(&this->elements,NULL,NULL,MeshElementsEnum);
+ 	this->edges=NULL;
+ 	this->singlenodetoelementconnectivity=NULL;
+ 	this->numbernodetoelementconnectivity=NULL;
+@@ -100,6 +102,8 @@
+ 	xDelete<bool>(this->my_elements);
+ 	xDelete<bool>(this->my_nodes);
+ 	xDelete<int>(this->my_vertices);
++	xDelete<int>(this->elements);
++	xDelete<int>(this->edges);
+ 	xDelete<int>(this->singlenodetoelementconnectivity);
+ 	xDelete<int>(this->numbernodetoelementconnectivity);
+ }
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 15427)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 15428)
+@@ -21,12 +21,12 @@
+ 	int     dim;
+ 	int     numberofelements;
+ 	int     numberofvertices;
+-	double *elements         = NULL;
++	int    *elements         = NULL;
+ 	int     elements_width;
+ 
+ 	int numberofelements2d;
+ 	int numberofvertices2d;
+-	double* elements2d=NULL;
++	int* elements2d=NULL;
+ 
+ 	int numberoflayers;
+ 	int numareas=1;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15428-15429.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15428-15429.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15428-15429.diff	(revision 16134)
@@ -0,0 +1,157 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15428)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15429)
+@@ -342,9 +342,9 @@
+ 		solution_flops=profiler->DeltaFlops(StartCore,FinishCore);
+ 		solution_memory=profiler->Memory(FinishCore);
+ 
+-		_printf0_("Solution elapsed time    : " << solution_time   << " Seconds\n");
+-		_printf0_("Solution number of flops : " << solution_flops  << " Flops\n");
+-		_printf0_("Solution memory used     : " << solution_memory << " Bytes\n");
++		_printf0_("Core solution elapsed time    : " << solution_time   << " Seconds\n");
++		_printf0_("Core solution number of flops : " << solution_flops  << " Flops\n");
++		_printf0_("Core solution memory used     : " << solution_memory << " Bytes\n");
+ 		
+ 		/*Add to results: */
+ 		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
+@@ -672,9 +672,9 @@
+ 	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,vz,VzMeshEnum,VertexPIdEnum);
+ 
+ 	/*Free ressources:*/
++	delete vz;
++	xDelete<IssmDouble>(bed);
+ 	xDelete<IssmDouble>(thickness);
+-	xDelete<IssmDouble>(bed);
+-	delete vz;
+ 	return 1;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15428)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15429)
+@@ -2820,9 +2820,9 @@
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+-	xDelete<IssmDouble>(B);
+ 	xDelete<IssmDouble>(D);
+ 	xDelete<IssmDouble>(Bprime);
++	xDelete<IssmDouble>(B);
+ 	return Ke;
+ }
+ /*}}}*/
+@@ -2909,8 +2909,8 @@
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	delete friction;
++	xDelete<IssmDouble>(D);
+ 	xDelete<IssmDouble>(B);
+-	xDelete<IssmDouble>(D);
+ 	return Ke;
+ }
+ /*}}}*/
+@@ -3000,8 +3000,8 @@
+ 	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYEnum);
+ 
+ 	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
+ 	delete gauss;
+-	xDelete<IssmDouble>(basis);
+ 	return pe;
+ }
+ /*}}}*/
+@@ -3037,8 +3037,8 @@
+ 	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYEnum);
+ 
+ 	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
+ 	delete gauss;
+-	xDelete<IssmDouble>(basis);
+ 	return pe;
+ }
+ /*}}}*/
+@@ -3154,8 +3154,8 @@
+ 	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
+ 
+ 	/*Clean up and return*/
++	delete gauss;
+ 	xDelete<IssmDouble>(dphi);
+-	delete gauss;
+ 	return Ke;
+ }
+ /*}}}*/
+@@ -3196,8 +3196,8 @@
+ 
+ 	/*Free ressources:*/
+ 	delete gauss;
++	xDelete<IssmDouble>(values);
+ 	xDelete<int>(doflist);
+-	xDelete<IssmDouble>(values);
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GetSolutionFromInputsDiagnosticHutter{{{*/
+@@ -3300,14 +3300,16 @@
+ 	this->inputs->AddInput(new TriaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
++	xDelete<IssmDouble>(thickness);
++	xDelete<IssmDouble>(pressure);
++	xDelete<IssmDouble>(vel);
++	xDelete<IssmDouble>(vz);
++	xDelete<IssmDouble>(vy);
++	xDelete<IssmDouble>(vx);
++	xDelete<IssmDouble>(values);
+ 	xDelete<int>(doflist);
+-	xDelete<IssmDouble>(values);
+-	xDelete<IssmDouble>(vx);
+-	xDelete<IssmDouble>(vy);
+-	xDelete<IssmDouble>(vz);
+-	xDelete<IssmDouble>(vel);
+-	xDelete<IssmDouble>(pressure);
+-	xDelete<IssmDouble>(thickness);
++	
++
+ }
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromSolutionDiagnosticHutter {{{*/
+@@ -3371,14 +3373,14 @@
+ 	this->inputs->AddInput(new TriaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
++	xDelete<IssmDouble>(thickness);
++	xDelete<IssmDouble>(pressure);
++	xDelete<IssmDouble>(vel);
++	xDelete<IssmDouble>(vz);
++	xDelete<IssmDouble>(vy);
++	xDelete<IssmDouble>(vx);
++	xDelete<IssmDouble>(values);
+ 	xDelete<int>(doflist);
+-	xDelete<IssmDouble>(values);
+-	xDelete<IssmDouble>(vx);
+-	xDelete<IssmDouble>(vy);
+-	xDelete<IssmDouble>(vz);
+-	xDelete<IssmDouble>(vel);
+-	xDelete<IssmDouble>(pressure);
+-	xDelete<IssmDouble>(thickness);
+ }
+ /*}}}*/
+ #endif
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 15428)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 15429)
+@@ -259,9 +259,10 @@
+ /*FUNCTION GaussTria::~GaussTria(){{{*/
+ GaussTria::~GaussTria(){
+ 	xDelete<IssmDouble>(weights);
++	xDelete<IssmDouble>(coords3);
++	xDelete<IssmDouble>(coords2);
+ 	xDelete<IssmDouble>(coords1);
+-	xDelete<IssmDouble>(coords2);
+-	xDelete<IssmDouble>(coords3);
++
+ }
+ /*}}}*/
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15429-15430.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15429-15430.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15429-15430.diff	(revision 16134)
@@ -0,0 +1,694 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15429)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15430)
+@@ -9,17 +9,14 @@
+ void	CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediaries*/
+-	int i;
+ 	int element;
+ 	int penpair_ids[2];
+ 	int count=0;
+ 	int stabilization;
+-	int numberofedges;
+ 	int numvertex_pairing;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+-	iomodel->Constant(&numberofedges,MeshNumberofedgesEnum);
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+@@ -31,23 +28,24 @@
+ 	if (stabilization==3){
+ 
+ 		/*Get edges and elements*/
+-		iomodel->FetchData(2,MeshEdgesEnum,ThicknessEnum);
++		ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
++		iomodel->FetchData(1,ThicknessEnum);
+ 
+ 		/*First load data:*/
+-		for (i=0;i<numberofedges;i++){
++		for(int i=0;i<iomodel->numberofedges;i++){
+ 
+ 			/*Get left and right elements*/
+-			element=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+2])-1; //edges are [node1 node2 elem1 elem2]
++			element=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
+ 
+ 			/*Now, if this element is not in the partition, pass: */
+ 			if(!iomodel->my_elements[element]) continue;
+ 
+ 			/* Add load */
+-			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,iomodel,PrognosticAnalysisEnum));
++			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,PrognosticAnalysisEnum));
+ 		}
+ 
+ 		/*Free data: */
+-		iomodel->DeleteData(2,MeshEdgesEnum,ThicknessEnum);
++		iomodel->DeleteData(1,ThicknessEnum);
+ 	}
+ 
+ 	/*Create Penpair for vertex_pairing: */
+@@ -56,7 +54,7 @@
+ 	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,PrognosticVertexPairingEnum);
+ 	iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+ 
+-	for(i=0;i<numvertex_pairing;i++){
++	for(int i=0;i<numvertex_pairing;i++){
+ 
+ 		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15429)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15430)
+@@ -48,18 +48,17 @@
+ 	}
+ 
+ 	if(false){
++
+ 		/*Quadratic element*/
+-		int numberofedges;
++		ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
+ 		int  element1,element2;
+ 		bool my_edge;
+ 
+-		iomodel->Constant(&numberofedges,MeshNumberofedgesEnum);
++		for(int i=0;i<iomodel->numberofedges;i++){
+ 
+-		for(int i=0;i<numberofedges;i++){
+-
+ 			/*Get left and right elements*/
+-			element1=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+2])-1; //edges are [node1 node2 elem1 elem2]
+-			element2=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+3])-1; //edges are [node1 node2 elem1 elem2]
++			element1=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
++			element2=iomodel->edges[4*i+3]-1; //edges are [node1 node2 elem1 elem2]
+ 
+ 			/*Check whether we should include this edge (element2 is -2 for boundary edges)*/
+ 			my_edge = iomodel->my_elements[element1];
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15429)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15430)
+@@ -11,11 +11,9 @@
+ 	/*Intermediary*/
+ 	int element;
+ 	int stabilization;
+-	int numberofedges;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+-	iomodel->Constant(&numberofedges,MeshNumberofedgesEnum);
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+@@ -27,23 +25,24 @@
+ 	if (stabilization==3){
+ 
+ 		/*Get edges and elements*/
+-		iomodel->FetchData(2,MeshEdgesEnum,ThicknessEnum);
++		ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
++		iomodel->FetchData(1,ThicknessEnum);
+ 
+ 		/*First load data:*/
+-		for (int i=0;i<numberofedges;i++){
++		for(int i=0;i<iomodel->numberofedges;i++){
+ 
+ 			/*Get left and right elements*/
+-			element=reCast<int,IssmDouble>(iomodel->Data(MeshEdgesEnum)[4*i+2])-1; //edges are [node1 node2 elem1 elem2]
++			element=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
+ 
+ 			/*Now, if this element is not in the partition, pass: */
+ 			if(!iomodel->my_elements[element]) continue;
+ 
+ 			/* Add load */
+-			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,iomodel,BalancethicknessAnalysisEnum));
++			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,BalancethicknessAnalysisEnum));
+ 		}
+ 
+ 		/*Free data: */
+-		iomodel->DeleteData(2,MeshEdgesEnum,ThicknessEnum);
++		iomodel->DeleteData(1,ThicknessEnum);
+ 	}
+ 
+ 	/*Assign output pointer: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15429)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15430)
+@@ -12,24 +12,24 @@
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
+ 
+ /*Creation of fem datasets: general drivers*/
+-void  CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
+-void  CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels);
+-void  CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,int analysis_counter);
+-void  CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void  CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type);
+-void  CreateParametersHydrologyShreve(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void  CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void  CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void  UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
++void CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
++void CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels);
++void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,int analysis_counter);
++void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
++void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
++void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type);
++void CreateParametersHydrologyShreve(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
++void CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
++void CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
++void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
+ 
+ /*Creation of fem datasets: specialised drivers: */
+ 
+ /*diagnostic horizontal*/
+-void	CreateNodesDiagnosticHoriz(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsDiagnosticHoriz(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesDiagnosticHoriz(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsDiagnosticHoriz(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel);
++void UpdateElementsDiagnosticHoriz(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*diagnostic vertical*/
+ void	CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel);
+@@ -70,55 +70,56 @@
+ void	UpdateElementsThermal(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*enthalpy:*/
+-void	CreateNodesEnthalpy(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsEnthalpy(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsEnthalpy(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesEnthalpy(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsEnthalpy(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel);
++void UpdateElementsEnthalpy(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*hydrology Shreve:*/
+-void	CreateNodesHydrologyShreve(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsHydrologyShreve(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsHydrologyShreve(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsHydrologyShreve(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesHydrologyShreve(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsHydrologyShreve(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsHydrologyShreve(Loads** ploads, IoModel* iomodel);
++void UpdateElementsHydrologyShreve(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*hydrology DC:*/
+-void	CreateNodesHydrologyDCInefficient(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsHydrologyDCInefficient(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsHydrologyDCInefficient(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsHydrologyDCInefficient(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-void	CreateNodesHydrologyDCEfficient(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsHydrologyDCEfficient(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsHydrologyDCEfficient(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsHydrologyDCEfficient(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesHydrologyDCInefficient(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsHydrologyDCInefficient(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsHydrologyDCInefficient(Loads** ploads, IoModel* iomodel);
++void UpdateElementsHydrologyDCInefficient(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesHydrologyDCEfficient(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsHydrologyDCEfficient(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsHydrologyDCEfficient(Loads** ploads, IoModel* iomodel);
++void UpdateElementsHydrologyDCEfficient(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*melting:*/
+-void	CreateNodesMelting(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsMelting(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsMelting(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsMelting(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesMelting(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsMelting(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsMelting(Loads** ploads, IoModel* iomodel);
++void UpdateElementsMelting(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*prognostic:*/
+-void	CreateNodesPrognostic(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsPrognostic(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsPrognostic(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesPrognostic(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsPrognostic(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel);
++void UpdateElementsPrognostic(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*balancedthickness:*/
+-void	CreateNodesBalancethickness(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsBalancethickness(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsBalancethickness(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesBalancethickness(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsBalancethickness(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel);
++void UpdateElementsBalancethickness(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*transient: */
+-void	UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type);
++void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*partitioning: */
+-void  ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel);
+-void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, bool continuous);
++void ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel);
++void NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, bool continuous);
+ 
+ /*Connectivity*/
+-void  CreateSingleNodeToElementConnectivity(IoModel* iomodel);
+-void  CreateNumberNodeToElementConnectivity(IoModel* iomodel);
++void ProcessMesh2d(int**,int*,int**,int* index,int numberofelements,int numberofvertices);
++void CreateSingleNodeToElementConnectivity(IoModel* iomodel);
++void CreateNumberNodeToElementConnectivity(IoModel* iomodel);
+ 
+ /*Diverse: */
+ void  SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15429)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15430)
+@@ -19,7 +19,9 @@
+ 
+ void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, bool continuous){
+ 
+-	/*First thing, this is a new partition for a new analysis_type, therefore, to avoid a leak, erase the nodes partition that might come through pmy_nodes: */
++	/*First thing, this is a new partition for a new analysis_type, therefore,
++	 * to avoid a leak, erase the nodes partition that might come through
++	 * pmy_nodes: */
+ 	xDelete<bool>(*pmy_nodes);
+ 
+ 	/*Now, depending on whether we are running galerkin discontinous or continuous elements, carry out a different partition of the nodes: */
+@@ -41,21 +43,22 @@
+ 
+ void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel){
+ 
+-	/*each element has it own nodes (as many as vertices) + additional nodes from neighbouring elements for each edge. This yields to a very different partition for 
+-	 * the nodes and the vertices. The vertices are similar to continuous galerkin, but the nodes partitioning involves edges, which mess up sorting of 
+-	 * ids. */
++	/* Each element has it own nodes (as many as vertices) + additional nodes
++	 * from neighboring elements for each edge. This yields to a very different
++	 * partition for the nodes and the vertices. The vertices are similar to
++	 * continuous galerkin, but the nodes partitioning involves edges, which
++	 * mess up sorting of ids. */
+ 
+-	/*output: */
+-	bool*   my_nodes=NULL;
+ 
++	/*Intermediaries*/
+ 	int  i,i1,i2;
+ 	int  cols;
+ 	int  e1,e2;
+ 	int  pos;
+-	int  numberofedges;
+-	int *edges         = NULL;
+-	int *elements      = NULL;
+ 
++	/*Get edges and elements*/
++	ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
++
+ 	/*Build discontinuous node partitioning
+ 	 *  - there are three nodes per element (discontinous)
+ 	 *  - for each element present of each partition, its three nodes will be in this partition
+@@ -66,7 +69,7 @@
+ 	 */
+ 
+ 	/*Allocate*/
+-	my_nodes=xNewZeroInit<bool>(3*iomodel->numberofelements);
++	bool* my_nodes=xNewZeroInit<bool>(3*iomodel->numberofelements);
+ 
+ 	/*First: add all the nodes of all the elements belonging to this cpu*/
+ 	if (iomodel->dim==2){
+@@ -85,15 +88,14 @@
+ 	/*Second: add all missing nodes*/
+ 
+ 	/*Get edges and elements*/
+-	iomodel->FetchData(&edges,&numberofedges,&cols,MeshEdgesEnum);
+-	if (cols!=4) _error_("field edges should have 4 columns");
++	ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
+ 
+ 	/*!All elements have been partitioned above, only create elements for this CPU: */
+-	for (i=0;i<numberofedges;i++){
++	for(int i=0;i<iomodel->numberofedges;i++){
+ 
+ 		/*Get left and right elements*/
+-		e1=edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
+-		e2=edges[4*i+3]-1; //edges are [node1 node2 elem1 elem2]
++		e1=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
++		e2=iomodel->edges[4*i+3]-1; //edges are [node1 node2 elem1 elem2]
+ 
+ 		/* 1) If the element e1 is in the current partition
+ 		 * 2) and if the edge of the element is shared by another element (internal edge)
+@@ -103,8 +105,8 @@
+ 		if(my_elements[e1] && e2!=-2 && !my_elements[e2]){
+ 
+ 			/*1: Get vertices ids*/
+-			i1=edges[4*i+0];
+-			i2=edges[4*i+1];
++			i1=iomodel->edges[4*i+0];
++			i2=iomodel->edges[4*i+1];
+ 
+ 			/*2: Get the column where these ids are located in the index*/
+ 			pos=UNDEF;
+@@ -114,7 +116,7 @@
+ 
+ 			/*3: We have the id of the elements and the position of the vertices in the index
+ 			 * we can now create the corresponding nodes:*/
+-			if (pos==0){
++			if(pos==0){
+ 				my_nodes[e2*3+0]=true;
+ 				my_nodes[e2*3+2]=true;
+ 			}
+@@ -122,7 +124,7 @@
+ 				my_nodes[e2*3+1]=true;
+ 				my_nodes[e2*3+0]=true;
+ 			}
+-			else if (pos==2){
++			else if(pos==2){
+ 				my_nodes[e2*3+2]=true;
+ 				my_nodes[e2*3+1]=true;
+ 			}
+@@ -132,9 +134,6 @@
+ 		}
+ 	}
+ 
+-	/*Free data: */
+-	xDelete<int>(edges);
+-
+-	/*Assign output pointers:*/
++	/*Free data and assign output pointers */
+ 	*pmy_nodes=my_nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp	(revision 15430)
+@@ -0,0 +1,116 @@
++/*!\file:  ProcessMesh2d.cpp
++ * \brief: create connectivity tables from index
++ */ 
++
++#include "../../shared/shared.h"
++
++void ProcessMesh2d(int** pedges,int* pnumberofedges,int** pelement_edge_connectivity,int* index,int numberofelements,int numberofvertices){
++
++	/*If mesh already processed, return*/
++	if(*pedges) return;
++
++	/*Intermediaries*/
++	bool exist;
++	int  i,j,v1,v2,v3;
++	int  maxnbe,nbe;
++
++	/*Checks in debugging mode*/
++	_assert_(index);
++
++	/*Maximum number of edges*/
++	maxnbe = 3*numberofelements;
++
++	/*Initialize intermediaries*/
++	int*  edgestemp = xNew<int>(maxnbe*4); /*vertex1 vertex2 element1 element2*/
++	bool* exchange  = xNewZeroInit<bool>(maxnbe);  
++	int*  element_edge_connectivity = xNew<int>(numberofelements*3);   /*edge1   edge2   edge3*/
++	for(i=0;i<maxnbe;i++) edgestemp[i*4+3]=-1;
++
++	/*Initialize chain*/
++	int* head_minv = xNew<int>(numberofvertices);
++	int* next_edge = xNew<int>(maxnbe);
++	for(i=0;i<numberofvertices;i++) head_minv[i]=-1;
++
++	/*Initialize number of edges*/
++	nbe = 0;
++
++	for(i=0;i<numberofelements;i++){
++		for(j=0;j<3;j++){
++
++			/*Get the two indices of the edge number j of the ith triangle*/
++			v1 = index[i*3+j];
++			if(j==2)
++			 v2 = index[i*3+0];
++			else
++			 v2 = index[i*3+j+1];
++
++			/*v1 and v2 must be sorted*/
++			if(v2<v1){
++				v3=v2; v2=v1; v1=v3;
++			}
++
++			/*This edge a priori has not been processed yet*/
++			exist = false;
++
++			/*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/
++			_assert_(v1>=0 & v1<numberofvertices);
++			for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
++				if(edgestemp[e*4+1]==v2){
++					exist = true;
++					edgestemp[e*4+3]=i+1;
++					element_edge_connectivity[i*3+j]=e;
++					break;
++				}
++			}
++
++			/*If this edge is new, add it to the lists*/
++			if(!exist){
++				_assert_(nbe<maxnbe);
++
++				/*Update edges and element_edge_connectivity*/
++				edgestemp[nbe*4+0] = v1;
++				edgestemp[nbe*4+1] = v2;
++				edgestemp[nbe*4+2] = i+1;
++				element_edge_connectivity[i*3+j]=nbe;
++				if(v1!=index[i*3+j]) exchange[nbe]=true;
++
++				/*Update chain*/
++				next_edge[nbe] = head_minv[v1];
++				head_minv[v1]  = nbe;
++
++				/*Increase number of edges*/
++				nbe++;
++			}
++		}
++	}
++
++	/*Clean up*/
++	xDelete<int>(head_minv);
++	xDelete<int>(next_edge);
++
++	/*Create final edges*/
++	int* edges = xNew<int>(nbe*4); /*vertex1 vertex2 element1 element2*/
++	for(int i=0;i<nbe;i++){
++		if(exchange[i]){
++			edges[i*4+0]=edgestemp[i*4+1];
++			edges[i*4+1]=edgestemp[i*4+0];
++		}
++		else{
++			edges[i*4+0]=edgestemp[i*4+0];
++			edges[i*4+1]=edgestemp[i*4+1];
++		}
++		edges[i*4+2]=edgestemp[i*4+2];
++		edges[i*4+3]=edgestemp[i*4+3];
++	}
++	xDelete<int>(edgestemp);
++	xDelete<bool>(exchange);
++
++	/*Assign output pointers*/
++	if(pedges) *pedges = edges;
++	else xDelete<int>(edges);
++
++	if(pnumberofedges) *pnumberofedges = nbe;
++
++	if(pelement_edge_connectivity) *pelement_edge_connectivity = element_edge_connectivity;
++	else xDelete<int>(element_edge_connectivity);
++}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15429)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15430)
+@@ -242,6 +242,7 @@
+ 					./modules/ModelProcessorx/DistributeNumDofs.cpp\
+ 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp\
++					./modules/ModelProcessorx/ProcessMesh2d.cpp\
+ 					./modules/ModelProcessorx/SortDataSets.cpp\
+ 					./modules/ModelProcessorx/UpdateCounters.cpp\
+ 					./modules/ModelProcessorx/CreateDataSets.cpp\
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15429)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15430)
+@@ -32,11 +32,9 @@
+ }
+ /*}}}*/
+ /*FUNCTION Numericalflux::Numericalflux(int id, int i, IoModel* iomodel, int analysis_type) {{{*/
+-Numericalflux::Numericalflux(int numericalflux_id,int i, IoModel* iomodel, int in_analysis_type){
++Numericalflux::Numericalflux(int numericalflux_id,int i,int index,IoModel* iomodel, int in_analysis_type){
+ 
+ 	/* Intermediary */
+-	int  e1,e2;
+-	int  i1,i2;
+ 	int  j;
+ 	int  pos1,pos2,pos3,pos4;
+ 	int  num_nodes;
+@@ -49,38 +47,31 @@
+ 	int   numericalflux_node_ids[4];
+ 	int   numericalflux_type;
+ 
+-	int    numberofelements;
++	/* Get MatPar id */
++	numericalflux_mparid=iomodel->numberofelements+1; //matlab indexing
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
++	/*Get edge*/
++	int i1 = iomodel->edges[4*index+0];
++	int i2 = iomodel->edges[4*index+1];
++	int e1 = iomodel->edges[4*index+2];
++	int e2 = iomodel->edges[4*index+3];
+ 
+-	/* Get MatPar id */
+-	numericalflux_mparid=numberofelements+1; //matlab indexing
+-
+ 	/*First, see wether this is an internal or boundary edge (if e2=-1)*/
+-	if (iomodel->Data(MeshEdgesEnum)[4*i+3]==-1.){ //edges are [node1 node2 elem1 elem2]
++	if(e2==-1){
+ 		/* Boundary edge, only one element */
+-		e1=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+2]);
+-		e2=reCast<int>(UNDEF);
+-		num_elems=1;
+-		num_nodes=2;
++		num_elems=1; num_nodes=2;
+ 		numericalflux_type=BoundaryEnum;
+ 		numericalflux_elem_ids[0]=e1;
+ 	}
+ 	else{
+ 		/* internal edge: connected to 2 elements */
+-		e1=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+2]);
+-		e2=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+3]);
+-		num_elems=2;
+-		num_nodes=4;
++		num_elems=2; num_nodes=4;
+ 		numericalflux_type=InternalEnum;
+ 		numericalflux_elem_ids[0]=e1;
+ 		numericalflux_elem_ids[1]=e2;
+ 	}
+ 
+ 	/*1: Get vertices ids*/
+-	i1=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+0]);
+-	i2=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+1]);
+ 	numericalflux_vertex_ids[0]=i1;
+ 	numericalflux_vertex_ids[1]=i2;
+ 
+@@ -92,10 +83,10 @@
+ 		/*2: Get the column where these ids are located in the index*/
+ 		pos1=pos2=pos3=pos4=UNDEF;
+ 		for(j=0;j<3;j++){
+-			if (iomodel->elements[3*(e1-1)+j]==i1) pos1=j+1;
+-			if (iomodel->elements[3*(e1-1)+j]==i2) pos2=j+1;
+-			if (iomodel->elements[3*(e2-1)+j]==i1) pos3=j+1;
+-			if (iomodel->elements[3*(e2-1)+j]==i2) pos4=j+1;
++			if(iomodel->elements[3*(e1-1)+j]==i1) pos1=j+1;
++			if(iomodel->elements[3*(e1-1)+j]==i2) pos2=j+1;
++			if(iomodel->elements[3*(e2-1)+j]==i1) pos3=j+1;
++			if(iomodel->elements[3*(e2-1)+j]==i2) pos4=j+1;
+ 		}
+ 		_assert_(pos1!=UNDEF && pos2!=UNDEF && pos3!=UNDEF && pos4!=UNDEF);
+ 
+@@ -111,8 +102,8 @@
+ 		/*2: Get the column where these ids are located in the index*/
+ 		pos1=pos2=UNDEF;
+ 		for(j=0;j<3;j++){
+-			if (iomodel->elements[3*(e1-1)+j]==i1) pos1=j+1;
+-			if (iomodel->elements[3*(e1-1)+j]==i2) pos2=j+1;
++			if(iomodel->elements[3*(e1-1)+j]==i1) pos1=j+1;
++			if(iomodel->elements[3*(e1-1)+j]==i2) pos2=j+1;
+ 		}
+ 		_assert_(pos1!=UNDEF && pos2!=UNDEF);
+ 
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 15429)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 15430)
+@@ -36,7 +36,7 @@
+ 
+ 		/*Numericalflux constructors,destructors {{{*/
+ 		Numericalflux();
+-		Numericalflux(int numericalflux_id,int i, IoModel* iomodel,int analysis_type);
++		Numericalflux(int numericalflux_id,int i,int index,IoModel* iomodel,int analysis_type);
+ 		~Numericalflux();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 15429)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 15430)
+@@ -34,8 +34,10 @@
+ 		int   dim;
+ 		int   numberofvertices;
+ 		int   numberofelements;
++		int   numberofedges;
+ 		int  *elements;
+ 		int  *edges;
++		int  *elementedgeconnectivity;
+ 		int  *singlenodetoelementconnectivity;
+ 		int  *numbernodetoelementconnectivity;
+ 
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15429)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15430)
+@@ -63,17 +63,17 @@
+ 	this->FetchConstants(); /*this routine goes through the input file, and fetches bools, ints, IssmDoubles and strings only, nothing memory intensive*/
+ 
+ 	/*Initialize permanent data: */
+-	this->my_elements=NULL;
+-	this->my_nodes=NULL;
+-	this->my_vertices=NULL;
+-
++	this->my_elements = NULL;
++	this->my_nodes    = NULL;
++	this->my_vertices = NULL;
+ 	FetchData(&this->dim,MeshDimensionEnum);
+ 	FetchData(&this->numberofvertices,MeshNumberofverticesEnum);
+ 	FetchData(&this->numberofelements,MeshNumberofelementsEnum);
+ 	FetchData(&this->elements,NULL,NULL,MeshElementsEnum);
+-	this->edges=NULL;
+-	this->singlenodetoelementconnectivity=NULL;
+-	this->numbernodetoelementconnectivity=NULL;
++	this->edges                           = NULL;
++	this->elementedgeconnectivity         = NULL;
++	this->singlenodetoelementconnectivity = NULL;
++	this->numbernodetoelementconnectivity = NULL;
+ 
+ 	this->nodecounter=0;
+ 	this->loadcounter=0;
+@@ -83,8 +83,6 @@
+ /*FUNCTION IoModel::~IoModel(){{{*/
+ IoModel::~IoModel(){
+ 
+-	if(this->constants) delete this->constants;
+-
+ 	/*Some checks in debugging mode*/
+ 	#ifdef _ISSM_DEBUG_
+ 	if(this->data){
+@@ -96,14 +94,19 @@
+ 	}
+ 	#endif
+ 
++	if(this->constants) delete this->constants;
++
+ 	xDelete<IssmDouble*>(this->data);
+ 	xDelete<bool>(this->independents);
+ 	if(this->independent_objects)delete this->independent_objects;
++
+ 	xDelete<bool>(this->my_elements);
+ 	xDelete<bool>(this->my_nodes);
+ 	xDelete<int>(this->my_vertices);
++
+ 	xDelete<int>(this->elements);
+ 	xDelete<int>(this->edges);
++	xDelete<int>(this->elementedgeconnectivity);
+ 	xDelete<int>(this->singlenodetoelementconnectivity);
+ 	xDelete<int>(this->numbernodetoelementconnectivity);
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15430-15431.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15430-15431.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15430-15431.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 15430)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 15431)
+@@ -34,6 +34,7 @@
+ 					if isa(varargin{1},'taoinversion'),
+ 						disp('converting taoinversion to inversion');
+ 						in=varargin{1};
++						obj=inversion();
+ 						obj.iscontrol                   = in.iscontrol;
+ 						obj.tao                         = 1;
+ 						obj.incomplete_adjoint          = in.incomplete_adjoint;
+@@ -53,6 +54,10 @@
+ 						obj.vz_obs                      = in.vz_obs;
+ 						obj.vel_obs                     = in.vel_obs;
+ 						obj.thickness_obs               = in.thickness_obs;
++					elseif isa(varargin{1},'inversion'),
++						obj = varargin{1};
++					else
++						error('constructor not supported');
+ 					end
+ 				otherwise
+ 					error('constructor not supported');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15431-15432.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15431-15432.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15431-15432.diff	(revision 16134)
@@ -0,0 +1,294 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15431)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15432)
+@@ -168,14 +168,12 @@
+ 	MaterialsMantleDensityEnum,
+ 	MeshAverageVertexConnectivityEnum,
+ 	MeshDimensionEnum,
+-	MeshEdgesEnum,
+ 	MeshElementconnectivityEnum,
+ 	MeshElementonbedEnum,
+ 	MeshElementonsurfaceEnum,
+ 	MeshElements2dEnum,
+ 	MeshElementsEnum,
+ 	MeshLowerelementsEnum,
+-	MeshNumberofedgesEnum,
+ 	MeshNumberofelements2dEnum,
+ 	MeshNumberofelementsEnum,
+ 	MeshNumberoflayersEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15431)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15432)
+@@ -176,14 +176,12 @@
+ 		case MaterialsMantleDensityEnum : return "MaterialsMantleDensity";
+ 		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
+ 		case MeshDimensionEnum : return "MeshDimension";
+-		case MeshEdgesEnum : return "MeshEdges";
+ 		case MeshElementconnectivityEnum : return "MeshElementconnectivity";
+ 		case MeshElementonbedEnum : return "MeshElementonbed";
+ 		case MeshElementonsurfaceEnum : return "MeshElementonsurface";
+ 		case MeshElements2dEnum : return "MeshElements2d";
+ 		case MeshElementsEnum : return "MeshElements";
+ 		case MeshLowerelementsEnum : return "MeshLowerelements";
+-		case MeshNumberofedgesEnum : return "MeshNumberofedges";
+ 		case MeshNumberofelements2dEnum : return "MeshNumberofelements2d";
+ 		case MeshNumberofelementsEnum : return "MeshNumberofelements";
+ 		case MeshNumberoflayersEnum : return "MeshNumberoflayers";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15431)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15432)
+@@ -179,14 +179,12 @@
+ 	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
+ 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
+ 	      else if (strcmp(name,"MeshDimension")==0) return MeshDimensionEnum;
+-	      else if (strcmp(name,"MeshEdges")==0) return MeshEdgesEnum;
+ 	      else if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
+ 	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+ 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+ 	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+ 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+ 	      else if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum;
+-	      else if (strcmp(name,"MeshNumberofedges")==0) return MeshNumberofedgesEnum;
+ 	      else if (strcmp(name,"MeshNumberofelements2d")==0) return MeshNumberofelements2dEnum;
+ 	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
+ 	      else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum;
+@@ -259,12 +257,12 @@
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
++	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
++	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+-	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+@@ -382,12 +380,12 @@
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
++	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+-	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+-	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
++	      if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+@@ -505,12 +503,12 @@
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
++	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
++	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+-	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+-	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
++	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"Patch")==0) return PatchEnum;
+Index: ../trunk-jpl/src/m/classes/mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.py	(revision 15431)
++++ ../trunk-jpl/src/m/classes/mesh.py	(revision 15432)
+@@ -152,18 +152,12 @@
+ 		if   solution==PrognosticSolutionEnum():
+ 			if md.prognostic.stabilization==3:
+ 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
+-				md = checkfield(md,'mesh.edges','size',[float('NaN'),4])
+-				md = checkfield(md,'mesh.edges[:,1:3]','>',0)
+ 		elif solution==BalancethicknessSolutionEnum():
+ 			if md.balancethickness.stabilization==3:
+ 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
+-				md = checkfield(md,'mesh.edges','size',[float('NaN'),4])
+-				md = checkfield(md,'mesh.edges[:,1:3]','>',0)
+ 		elif solution==TransientSolutionEnum():
+ 			if md.transient.isprognostic and md.prognostic.stabilization==3:
+ 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
+-				md = checkfield(md,'mesh.edges','size',[float('NaN'),4])
+-				md = checkfield(md,'mesh.edges[:,1:3]','>',0)
+ 		elif solution==ThermalSolutionEnum():
+ 			md = checkfield(md,'mesh.dimension','values',3,'message','thermal solution only supported on 3d meshes')
+ 
+@@ -178,14 +172,12 @@
+ 		WriteData(fid,'object',self,'fieldname','numberoflayers','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','numberofelements','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','numberofvertices','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','numberofedges','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','elementonbed','format','BooleanMat','mattype',2)
+ 		WriteData(fid,'object',self,'fieldname','elementonsurface','format','BooleanMat','mattype',2)
+ 		WriteData(fid,'object',self,'fieldname','vertexonbed','format','BooleanMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexonsurface','format','BooleanMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','lowerelements','format','DoubleMat','mattype',2)
+ 		WriteData(fid,'object',self,'fieldname','upperelements','format','DoubleMat','mattype',2)
+-		WriteData(fid,'object',self,'fieldname','edges','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','elementconnectivity','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','average_vertex_connectivity','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','elements2d','format','DoubleMat','mattype',3)
+Index: ../trunk-jpl/src/m/classes/mesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.m	(revision 15431)
++++ ../trunk-jpl/src/m/classes/mesh.m	(revision 15432)
+@@ -115,20 +115,14 @@
+ 				case PrognosticSolutionEnum(),
+ 					if md.prognostic.stabilization==3,
+ 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
+-						md = checkfield(md,'mesh.edges','size',[NaN 4]);
+-						md = checkfield(md,'mesh.edges(:,1:3)','>',0);
+ 					end
+ 				case BalancethicknessSolutionEnum(),
+ 					if md.balancethickness.stabilization==3,
+ 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
+-						md = checkfield(md,'mesh.edges','size',[NaN 4]);
+-						md = checkfield(md,'mesh.edges(:,1:3)','>',0);
+ 					end
+ 				case TransientSolutionEnum(),
+ 					if md.transient.isprognostic & md.prognostic.stabilization==3,
+ 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
+-						md = checkfield(md,'mesh.edges','size',[NaN 4]);
+-						md = checkfield(md,'mesh.edges(:,1:3)','>',0);
+ 					end
+ 				case ThermalSolutionEnum(),
+ 					md = checkfield(md,'mesh.dimension','values',3,'message','thermal solution only supported on 3d meshes');
+@@ -195,14 +189,12 @@
+ 			WriteData(fid,'object',obj,'fieldname','numberoflayers','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','numberofelements','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','numberofvertices','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','numberofedges','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','elementonbed','format','BooleanMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','elementonsurface','format','BooleanMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','vertexonbed','format','BooleanMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','vertexonsurface','format','BooleanMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','lowerelements','format','DoubleMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','upperelements','format','DoubleMat','mattype',2);
+-			WriteData(fid,'object',obj,'fieldname','edges','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','elementconnectivity','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','average_vertex_connectivity','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','elements2d','format','DoubleMat','mattype',3);
+Index: ../trunk-jpl/src/m/enum/PentaP1InputEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PentaP1InputEnum.m	(revision 15431)
++++ ../trunk-jpl/src/m/enum/PentaP1InputEnum.m	(revision 15432)
+@@ -1,11 +0,0 @@
+-function macro=PentaP1InputEnum()
+-%PENTAP1INPUTENUM - Enum of PentaP1Input
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PentaP1InputEnum()
+-
+-macro=StringToEnum('PentaP1Input');
+Index: ../trunk-jpl/src/m/enum/MeshNumberofedgesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MeshNumberofedgesEnum.m	(revision 15431)
++++ ../trunk-jpl/src/m/enum/MeshNumberofedgesEnum.m	(revision 15432)
+@@ -1,11 +0,0 @@
+-function macro=MeshNumberofedgesEnum()
+-%MESHNUMBEROFEDGESENUM - Enum of MeshNumberofedges
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MeshNumberofedgesEnum()
+-
+-macro=StringToEnum('MeshNumberofedges');
+Index: ../trunk-jpl/src/m/enum/MeshEdgesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MeshEdgesEnum.m	(revision 15431)
++++ ../trunk-jpl/src/m/enum/MeshEdgesEnum.m	(revision 15432)
+@@ -1,11 +0,0 @@
+-function macro=MeshEdgesEnum()
+-%MESHEDGESENUM - Enum of MeshEdges
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MeshEdgesEnum()
+-
+-macro=StringToEnum('MeshEdges');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15431)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15432)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=562;
++macro=560;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15431)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15432)
+@@ -2248,20 +2248,6 @@
+ 
+ 	return StringToEnum('MeshDimension')[0]
+ 
+-def MeshEdgesEnum():
+-	"""
+-	MESHEDGESENUM - Enum of MeshEdges
+-
+-	WARNING: DO NOT MODIFY THIS FILE
+-				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-				Please read src/c/shared/Enum/README for more information
+-
+-	   Usage:
+-	      macro=MeshEdgesEnum()
+-	"""
+-
+-	return StringToEnum('MeshEdges')[0]
+-
+ def MeshElementconnectivityEnum():
+ 	"""
+ 	MESHELEMENTCONNECTIVITYENUM - Enum of MeshElementconnectivity
+@@ -2346,20 +2332,6 @@
+ 
+ 	return StringToEnum('MeshLowerelements')[0]
+ 
+-def MeshNumberofedgesEnum():
+-	"""
+-	MESHNUMBEROFEDGESENUM - Enum of MeshNumberofedges
+-
+-	WARNING: DO NOT MODIFY THIS FILE
+-				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-				Please read src/c/shared/Enum/README for more information
+-
+-	   Usage:
+-	      macro=MeshNumberofedgesEnum()
+-	"""
+-
+-	return StringToEnum('MeshNumberofedges')[0]
+-
+ def MeshNumberofelements2dEnum():
+ 	"""
+ 	MESHNUMBEROFELEMENTS2DENUM - Enum of MeshNumberofelements2d
+@@ -7888,5 +7860,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 562
++	return 560
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15432-15433.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15432-15433.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15432-15433.diff	(revision 16134)
@@ -0,0 +1,374 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15432)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15433)
+@@ -168,7 +168,6 @@
+ 	MaterialsMantleDensityEnum,
+ 	MeshAverageVertexConnectivityEnum,
+ 	MeshDimensionEnum,
+-	MeshElementconnectivityEnum,
+ 	MeshElementonbedEnum,
+ 	MeshElementonsurfaceEnum,
+ 	MeshElements2dEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15432)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15433)
+@@ -176,7 +176,6 @@
+ 		case MaterialsMantleDensityEnum : return "MaterialsMantleDensity";
+ 		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
+ 		case MeshDimensionEnum : return "MeshDimension";
+-		case MeshElementconnectivityEnum : return "MeshElementconnectivity";
+ 		case MeshElementonbedEnum : return "MeshElementonbed";
+ 		case MeshElementonsurfaceEnum : return "MeshElementonsurface";
+ 		case MeshElements2dEnum : return "MeshElements2d";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15432)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15433)
+@@ -179,7 +179,6 @@
+ 	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
+ 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
+ 	      else if (strcmp(name,"MeshDimension")==0) return MeshDimensionEnum;
+-	      else if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
+ 	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+ 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+ 	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+@@ -259,11 +258,11 @@
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+-	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
++	      if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+@@ -382,11 +381,11 @@
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
++	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+-	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
++	      if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+ 	      else if (strcmp(name,"StokesIceFront")==0) return StokesIceFrontEnum;
+@@ -505,11 +504,11 @@
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
++	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+-	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
++	      if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"Patch")==0) return PatchEnum;
+ 	      else if (strcmp(name,"PatchNodes")==0) return PatchNodesEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15432)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15433)
+@@ -33,7 +33,6 @@
+ 	vertices  = new Vertices();
+ 	materials = new Materials();
+ 
+-	iomodel->FetchData(1,MeshElementconnectivityEnum);
+ 	#ifdef _HAVE_3D_
+ 	if(iomodel->dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+ 	#endif
+@@ -72,7 +71,7 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(9,MeshElementconnectivityEnum,MeshUpperelementsEnum,MeshLowerelementsEnum,
++	iomodel->DeleteData(8,MeshUpperelementsEnum,MeshLowerelementsEnum,
+ 				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum,InversionControlParametersEnum,InversionMinParametersEnum,
+ 				InversionMaxParametersEnum);
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15432)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15433)
+@@ -74,7 +74,6 @@
+ 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum)=0;
+ 		virtual void   GetVectorFromResults(Vector<IssmDouble>* vector,int id,int enum_in,int interp)=0;
+ 		virtual void   InputArtificialNoise(int enum_type,IssmDouble min,IssmDouble max)=0;
+-		virtual int*   GetHorizontalNeighboorSids(void)=0;
+ 		virtual IssmDouble TimeAdapt()=0;
+ 		virtual void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0;
+ 		virtual void   Delta18oParameterization(void)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15432)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15433)
+@@ -30,7 +30,6 @@
+ 	this->vertices = NULL;
+ 	this->material = NULL;
+ 	this->matpar   = NULL;
+-	for(i=0;i<3;i++)this->horizontalneighborsids[i]=UNDEF;
+ 	this->inputs     = NULL;
+ 	this->parameters = NULL;
+ 	this->results    = NULL;
+@@ -49,10 +48,6 @@
+ 		//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+ 		this->parameters=NULL;
+ 
+-		/*Build horizontalneighborsids list: */
+-		_assert_(iomodel->Data(MeshElementconnectivityEnum));
+-		//for (i=0;i<3;i++) this->horizontalneighborsids[i]=(int)iomodel->elementconnectivity[3*index+i]-1;
+-
+ 		/*intialize inputs and results: */
+ 		this->inputs=new Inputs();
+ 		this->results=new Results();
+@@ -117,9 +112,6 @@
+ 	tria->material=(Material*)tria->hmaterial->delivers();
+ 	tria->matpar=(Matpar*)tria->hmatpar->delivers();
+ 
+-	/*neighbors: */
+-	for(i=0;i<3;i++)tria->horizontalneighborsids[i]=this->horizontalneighborsids[i];
+-
+ 	return tria;
+ }
+ /*}}}*/
+@@ -560,9 +552,6 @@
+ 	if (results) results->DeepEcho();
+ 	else _printf_("results=NULL\n");
+ 
+-	_printf_("neighboor sids: \n");
+-	_printf_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2] << "\n");
+-
+ 	return;
+ }
+ /*}}}*/
+@@ -671,9 +660,6 @@
+ 
+ 	if (results) results->Echo();
+ 	else _printf_("results=NULL\n");
+-
+-	_printf_("neighboor sids: \n");
+-	_printf_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2] << "\n");
+ }
+ /*}}}*/
+ /*FUNCTION Tria::ObjectEnum{{{*/
+@@ -731,14 +717,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetHorizontalNeighboorSids {{{*/
+-int* Tria::GetHorizontalNeighboorSids(){
+-
+-	/*return TriaRef field*/
+-	return &this->horizontalneighborsids[0];
+-
+-}
+-/*}}}*/
+ /*FUNCTION Tria::GetGroundedPortion{{{*/
+ IssmDouble Tria::GetGroundedPortion(IssmDouble* xyz_list){
+ 	/*Computeportion of the element that is grounded*/ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15432)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15433)
+@@ -36,7 +36,6 @@
+ 		Vertex     **vertices;                    // 3 vertices
+ 		Material    *material;                    // 1 material ice
+ 		Matpar      *matpar;                      // 1 material parameter
+-		int          horizontalneighborsids[3];
+ 
+ 		Parameters  *parameters;                  //pointer to solution parameters
+ 		Inputs      *inputs;
+@@ -114,7 +113,6 @@
+ 		IssmDouble SurfaceArea(void);
+ 		void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type);
+ 		IssmDouble TimeAdapt();
+-		int*   GetHorizontalNeighboorSids(void);
+ 
+ 		#ifdef _HAVE_RESPONSES_
+ 		void   AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15432)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15433)
+@@ -30,7 +30,6 @@
+ 	this->inputs            = NULL;
+ 	this->parameters        = NULL;
+ 	this->results           = NULL;
+-	for(int i=0;i<3;i++)this->horizontalneighborsids[i]=UNDEF;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::~Penta(){{{*/
+@@ -66,10 +65,6 @@
+ 	else                                    penta_elements_ids[0]=reCast<int,IssmDouble>((iomodel->Data(MeshLowerelementsEnum)[index]));
+ 	this->InitHookNeighbors(penta_elements_ids);
+ 
+-	/*Build horizontalneighborsids list: */
+-	_assert_(iomodel->Data(MeshElementconnectivityEnum));
+-	for(i=0;i<3;i++) this->horizontalneighborsids[i]=reCast<int,IssmDouble>(iomodel->Data(MeshElementconnectivityEnum)[3*index+i])-1;
+-
+ 	//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+ 	this->parameters=NULL;
+ 
+@@ -133,9 +128,6 @@
+ 	penta->matpar=(Matpar*)penta->hmatpar->delivers();
+ 	penta->verticalneighbors=(Penta**)penta->hneighbors->deliverp();
+ 
+-	/*neighbors: */
+-	for(i=0;i<3;i++)penta->horizontalneighborsids[i]=this->horizontalneighborsids[i];
+-
+ 	return penta;
+ }
+ /*}}}*/
+@@ -695,8 +687,6 @@
+ 	inputs->DeepEcho();
+ 	_printf_("   results\n");
+ 	results->DeepEcho();
+-	_printf_("neighboor sids: \n");
+-	_printf_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2] << "\n");
+ }
+ /*}}}*/
+ /*FUNCTION Penta::DeleteResults {{{*/
+@@ -993,14 +983,6 @@
+ 	*hz=zmax-zmin;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetHorizontalNeighboorSids {{{*/
+-int* Penta::GetHorizontalNeighboorSids(){
+-
+-	/*return PentaRef field*/
+-	return &this->horizontalneighborsids[0];
+-
+-}
+-/*}}}*/
+ /*FUNCTION Penta::GetLowerElement{{{*/
+ Penta* Penta::GetLowerElement(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15432)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15433)
+@@ -39,7 +39,6 @@
+ 		Material    *material;                    // 1 material ice
+ 		Matpar      *matpar;                      // 1 material parameter
+ 		Penta      **verticalneighbors;           // 2 neighbors: first one under, second one above
+-		int          horizontalneighborsids[3];
+ 
+ 		Parameters  *parameters;                  //pointer to solution parameters
+ 		Inputs      *inputs;
+@@ -115,7 +114,6 @@
+ 		void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type);
+ 		int    NodalValue(IssmDouble* pvalue, int index, int natureofdataenum);
+ 		IssmDouble TimeAdapt();
+-		int*   GetHorizontalNeighboorSids(void);
+ 		void   ViscousHeatingCreateInput(void);
+ 
+ 		 #ifdef _HAVE_RESPONSES_
+Index: ../trunk-jpl/src/m/classes/mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.py	(revision 15432)
++++ ../trunk-jpl/src/m/classes/mesh.py	(revision 15433)
+@@ -146,7 +146,6 @@
+ 			md = checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
+ 		else:
+ 			md = checkfield(md,'mesh.average_vertex_connectivity','>=',24,'message',"'mesh.average_vertex_connectivity' should be at least 24 in 3d")
+-		md = checkfield(md,'mesh.elementconnectivity','size',[md.mesh.numberofelements,3],'NaN',1)
+ 
+ 		#Solution specific checks
+ 		if   solution==PrognosticSolutionEnum():
+@@ -178,7 +177,6 @@
+ 		WriteData(fid,'object',self,'fieldname','vertexonsurface','format','BooleanMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','lowerelements','format','DoubleMat','mattype',2)
+ 		WriteData(fid,'object',self,'fieldname','upperelements','format','DoubleMat','mattype',2)
+-		WriteData(fid,'object',self,'fieldname','elementconnectivity','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','average_vertex_connectivity','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','elements2d','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','numberofvertices2d','format','Integer')
+Index: ../trunk-jpl/src/m/classes/mesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.m	(revision 15432)
++++ ../trunk-jpl/src/m/classes/mesh.m	(revision 15433)
+@@ -108,7 +108,6 @@
+ 			else
+ 				md = checkfield(md,'mesh.average_vertex_connectivity','>=',24,'message','''mesh.average_vertex_connectivity'' should be at least 24 in 3d');
+ 			end
+-			md = checkfield(md,'mesh.elementconnectivity','size',[md.mesh.numberofelements 3],'NaN',1);
+ 
+ 			%Solution specific checks
+ 			switch(solution),
+@@ -195,7 +194,6 @@
+ 			WriteData(fid,'object',obj,'fieldname','vertexonsurface','format','BooleanMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','lowerelements','format','DoubleMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','upperelements','format','DoubleMat','mattype',2);
+-			WriteData(fid,'object',obj,'fieldname','elementconnectivity','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','average_vertex_connectivity','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','elements2d','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','numberofvertices2d','format','Integer');
+Index: ../trunk-jpl/src/m/enum/MeshElementconnectivityEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MeshElementconnectivityEnum.m	(revision 15432)
++++ ../trunk-jpl/src/m/enum/MeshElementconnectivityEnum.m	(revision 15433)
+@@ -1,11 +0,0 @@
+-function macro=MeshElementconnectivityEnum()
+-%MESHELEMENTCONNECTIVITYENUM - Enum of MeshElementconnectivity
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MeshElementconnectivityEnum()
+-
+-macro=StringToEnum('MeshElementconnectivity');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15432)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15433)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=560;
++macro=559;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15432)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15433)
+@@ -2248,20 +2248,6 @@
+ 
+ 	return StringToEnum('MeshDimension')[0]
+ 
+-def MeshElementconnectivityEnum():
+-	"""
+-	MESHELEMENTCONNECTIVITYENUM - Enum of MeshElementconnectivity
+-
+-	WARNING: DO NOT MODIFY THIS FILE
+-				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-				Please read src/c/shared/Enum/README for more information
+-
+-	   Usage:
+-	      macro=MeshElementconnectivityEnum()
+-	"""
+-
+-	return StringToEnum('MeshElementconnectivity')[0]
+-
+ def MeshElementonbedEnum():
+ 	"""
+ 	MESHELEMENTONBEDENUM - Enum of MeshElementonbed
+@@ -7860,5 +7846,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 560
++	return 559
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15433-15434.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15433-15434.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15433-15434.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15433)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15434)
+@@ -58,6 +58,6 @@
+ 		icelevelset=numpy.ones(md.mesh.numberofvertices,float)
+ 		if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.icefront))):
+ 			pos=md.diagnostic.icefront[:,:-2]
+-			icelevelset[pos[:]-1]=0;
++			icelevelset[pos[:].astype(int)-1]=0;
+ 		WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum())
+ 	# }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15434-15435.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15434-15435.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15434-15435.diff	(revision 16134)
@@ -0,0 +1,466 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp	(revision 15434)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp	(revision 15435)
+@@ -1,116 +0,0 @@
+-/*!\file:  ProcessMesh2d.cpp
+- * \brief: create connectivity tables from index
+- */ 
+-
+-#include "../../shared/shared.h"
+-
+-void ProcessMesh2d(int** pedges,int* pnumberofedges,int** pelement_edge_connectivity,int* index,int numberofelements,int numberofvertices){
+-
+-	/*If mesh already processed, return*/
+-	if(*pedges) return;
+-
+-	/*Intermediaries*/
+-	bool exist;
+-	int  i,j,v1,v2,v3;
+-	int  maxnbe,nbe;
+-
+-	/*Checks in debugging mode*/
+-	_assert_(index);
+-
+-	/*Maximum number of edges*/
+-	maxnbe = 3*numberofelements;
+-
+-	/*Initialize intermediaries*/
+-	int*  edgestemp = xNew<int>(maxnbe*4); /*vertex1 vertex2 element1 element2*/
+-	bool* exchange  = xNewZeroInit<bool>(maxnbe);  
+-	int*  element_edge_connectivity = xNew<int>(numberofelements*3);   /*edge1   edge2   edge3*/
+-	for(i=0;i<maxnbe;i++) edgestemp[i*4+3]=-1;
+-
+-	/*Initialize chain*/
+-	int* head_minv = xNew<int>(numberofvertices);
+-	int* next_edge = xNew<int>(maxnbe);
+-	for(i=0;i<numberofvertices;i++) head_minv[i]=-1;
+-
+-	/*Initialize number of edges*/
+-	nbe = 0;
+-
+-	for(i=0;i<numberofelements;i++){
+-		for(j=0;j<3;j++){
+-
+-			/*Get the two indices of the edge number j of the ith triangle*/
+-			v1 = index[i*3+j];
+-			if(j==2)
+-			 v2 = index[i*3+0];
+-			else
+-			 v2 = index[i*3+j+1];
+-
+-			/*v1 and v2 must be sorted*/
+-			if(v2<v1){
+-				v3=v2; v2=v1; v1=v3;
+-			}
+-
+-			/*This edge a priori has not been processed yet*/
+-			exist = false;
+-
+-			/*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/
+-			_assert_(v1>=0 & v1<numberofvertices);
+-			for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
+-				if(edgestemp[e*4+1]==v2){
+-					exist = true;
+-					edgestemp[e*4+3]=i+1;
+-					element_edge_connectivity[i*3+j]=e;
+-					break;
+-				}
+-			}
+-
+-			/*If this edge is new, add it to the lists*/
+-			if(!exist){
+-				_assert_(nbe<maxnbe);
+-
+-				/*Update edges and element_edge_connectivity*/
+-				edgestemp[nbe*4+0] = v1;
+-				edgestemp[nbe*4+1] = v2;
+-				edgestemp[nbe*4+2] = i+1;
+-				element_edge_connectivity[i*3+j]=nbe;
+-				if(v1!=index[i*3+j]) exchange[nbe]=true;
+-
+-				/*Update chain*/
+-				next_edge[nbe] = head_minv[v1];
+-				head_minv[v1]  = nbe;
+-
+-				/*Increase number of edges*/
+-				nbe++;
+-			}
+-		}
+-	}
+-
+-	/*Clean up*/
+-	xDelete<int>(head_minv);
+-	xDelete<int>(next_edge);
+-
+-	/*Create final edges*/
+-	int* edges = xNew<int>(nbe*4); /*vertex1 vertex2 element1 element2*/
+-	for(int i=0;i<nbe;i++){
+-		if(exchange[i]){
+-			edges[i*4+0]=edgestemp[i*4+1];
+-			edges[i*4+1]=edgestemp[i*4+0];
+-		}
+-		else{
+-			edges[i*4+0]=edgestemp[i*4+0];
+-			edges[i*4+1]=edgestemp[i*4+1];
+-		}
+-		edges[i*4+2]=edgestemp[i*4+2];
+-		edges[i*4+3]=edgestemp[i*4+3];
+-	}
+-	xDelete<int>(edgestemp);
+-	xDelete<bool>(exchange);
+-
+-	/*Assign output pointers*/
+-	if(pedges) *pedges = edges;
+-	else xDelete<int>(edges);
+-
+-	if(pnumberofedges) *pnumberofedges = nbe;
+-
+-	if(pelement_edge_connectivity) *pelement_edge_connectivity = element_edge_connectivity;
+-	else xDelete<int>(element_edge_connectivity);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15434)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15435)
+@@ -28,7 +28,7 @@
+ 	if (stabilization==3){
+ 
+ 		/*Get edges and elements*/
+-		ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
++		CreateEdges(iomodel);
+ 		iomodel->FetchData(1,ThicknessEnum);
+ 
+ 		/*First load data:*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15435)
+@@ -0,0 +1,111 @@
++/*!\file:  CreateEdges.cpp
++ * \brief: create edges from 2d mesh
++ */ 
++
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++
++void CreateEdges(IoModel* iomodel){
++
++	/*If edges are already present, exit*/
++	if(iomodel->edges) return;
++
++	/*Check Iomodel properties*/
++	if(iomodel->dim!=2)             _error_("only 2d model are supported");
++	if(iomodel->numberofvertices<3) _error_("not enough elements in mesh");
++	_assert_(iomodel->elements);
++
++	/*Intermediaries*/
++	bool exist;
++	int  i,j,v1,v2,v3;
++	int  maxnbe,nbe;
++
++	/*Maximum number of edges*/
++	maxnbe = 3*iomodel->numberofelements;
++
++	/*Initialize intermediaries*/
++	int*  edgestemp = xNew<int>(maxnbe*4);         /*format: [vertex1 vertex2 element1 element2]                */
++	bool* exchange  = xNewZeroInit<bool>(maxnbe);  /*Edges are ordered, we need to keep track of vertex swapping*/
++	for(i=0;i<maxnbe;i++) edgestemp[i*4+3]=-1;     /*Initialize last column of edges as -1 (boundary edge)      */
++
++	/*Initialize chain*/
++	int* head_minv = xNew<int>(iomodel->numberofvertices);
++	int* next_edge = xNew<int>(maxnbe);
++	for(i=0;i<iomodel->numberofvertices;i++) head_minv[i]=-1;
++
++	/*Initialize number of edges*/
++	nbe = 0;
++
++	for(i=0;i<iomodel->numberofelements;i++){
++		for(j=0;j<3;j++){
++
++			/*Get the two indices of the edge number j of the ith triangle*/
++			v1 = iomodel->elements[i*3+j];
++			if(j==2)
++			 v2 = iomodel->elements[i*3+0];
++			else
++			 v2 = iomodel->elements[i*3+j+1];
++
++			/*v1 and v2 must be sorted*/
++			if(v2<v1){
++				v3=v2; v2=v1; v1=v3;
++			}
++
++			/*This edge a priori has not been processed yet*/
++			exist = false;
++
++			/*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/
++			_assert_(v1>=0 & v1<iomodel->numberofvertices);
++			for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
++				if(edgestemp[e*4+1]==v2){
++					exist = true;
++					edgestemp[e*4+3]=i+1;
++					break;
++				}
++			}
++
++			/*If this edge is new, add it to the lists*/
++			if(!exist){
++				_assert_(nbe<maxnbe);
++
++				/*Update edges*/
++				edgestemp[nbe*4+0] = v1;
++				edgestemp[nbe*4+1] = v2;
++				edgestemp[nbe*4+2] = i+1;
++				if(v1!=iomodel->elements[i*3+j]) exchange[nbe]=true;
++
++				/*Update chain*/
++				next_edge[nbe] = head_minv[v1];
++				head_minv[v1]  = nbe;
++
++				/*Increase number of edges*/
++				nbe++;
++			}
++		}
++	}
++
++	/*Clean up*/
++	xDelete<int>(head_minv);
++	xDelete<int>(next_edge);
++
++	/*Create final edges*/
++	int* edges = xNew<int>(nbe*4); /*vertex1 vertex2 element1 element2*/
++	for(int i=0;i<nbe;i++){
++		if(exchange[i]){
++			edges[i*4+0]=edgestemp[i*4+1];
++			edges[i*4+1]=edgestemp[i*4+0];
++		}
++		else{
++			edges[i*4+0]=edgestemp[i*4+0];
++			edges[i*4+1]=edgestemp[i*4+1];
++		}
++		edges[i*4+2]=edgestemp[i*4+2];
++		edges[i*4+3]=edgestemp[i*4+3];
++	}
++	xDelete<int>(edgestemp);
++	xDelete<bool>(exchange);
++
++	/*Assign output pointers*/
++	iomodel->edges         = edges;
++	iomodel->numberofedges = nbe;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15434)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15435)
+@@ -50,7 +50,7 @@
+ 	if(false){
+ 
+ 		/*Quadratic element*/
+-		ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
++		CreateEdges(iomodel);
+ 		int  element1,element2;
+ 		bool my_edge;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15434)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15435)
+@@ -25,7 +25,7 @@
+ 	if (stabilization==3){
+ 
+ 		/*Get edges and elements*/
+-		ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
++		CreateEdges(iomodel);
+ 		iomodel->FetchData(1,ThicknessEnum);
+ 
+ 		/*First load data:*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 15434)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 15435)
+@@ -2,12 +2,6 @@
+  * \brief: create connectivity table
+  */ 
+ 
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+ #include "../../shared/shared.h"
+ #include "../../shared/io/io.h"
+ #include "../../classes/classes.h"
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15434)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15435)
+@@ -117,7 +117,8 @@
+ void NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, bool continuous);
+ 
+ /*Connectivity*/
+-void ProcessMesh2d(int**,int*,int**,int* index,int numberofelements,int numberofvertices);
++void CreateEdges(IoModel* iomodel);
++void CreateElementToEdgeConnectivity(IoModel* iomodel);
+ void CreateSingleNodeToElementConnectivity(IoModel* iomodel);
+ void CreateNumberNodeToElementConnectivity(IoModel* iomodel);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15434)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15435)
+@@ -57,7 +57,7 @@
+ 	int  pos;
+ 
+ 	/*Get edges and elements*/
+-	ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
++	CreateEdges(iomodel);
+ 
+ 	/*Build discontinuous node partitioning
+ 	 *  - there are three nodes per element (discontinous)
+@@ -88,7 +88,7 @@
+ 	/*Second: add all missing nodes*/
+ 
+ 	/*Get edges and elements*/
+-	ProcessMesh2d(&iomodel->edges,&iomodel->numberofedges,NULL,iomodel->elements,iomodel->numberofelements,iomodel->numberofvertices);
++	CreateEdges(iomodel);
+ 
+ 	/*!All elements have been partitioned above, only create elements for this CPU: */
+ 	for(int i=0;i<iomodel->numberofedges;i++){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp	(revision 15435)
+@@ -0,0 +1,58 @@
++/*!\file:  CreateElementToEdgeConnectivity.cpp
++ * \brief: create connectivity tables from index
++ */ 
++
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++#include "./ModelProcessorx.h"
++
++void CreateElementToEdgeConnectivity(IoModel* iomodel){
++
++	/*Intermediaries*/
++	int v1,v2,v3,e1,e2;
++
++	/*If connectivity is already present, exit*/
++	if(iomodel->elementtoedgeconnectivity) return;
++
++	/*Check Iomodel properties*/
++	if(iomodel->dim!=2)             _error_("only 2d model are supported");
++	if(iomodel->numberofvertices<3) _error_("not enough elements in mesh");
++	_assert_(iomodel->elements);
++
++	/*First, we need to have edges*/
++	CreateEdges(iomodel);
++	_assert_(iomodel->numberofedges>2);
++
++	/*Initialize intermediaries*/
++	int*  element_edge_connectivity = xNew<int>(iomodel->numberofelements*3);   /*edge1   edge2   edge3*/
++
++
++	/*Go through all edges and create connectivity table*/
++	for(int i=0;i<iomodel->numberofedges;i++){
++
++		/*Get the two vertices of current edge*/
++		v1 = iomodel->edges[i*4+0]; _assert_(v1>=0 && v1<iomodel->numberofvertices);
++		v2 = iomodel->edges[i*4+1]; _assert_(v2>=0 && v2<iomodel->numberofvertices);
++		e1 = iomodel->edges[i*4+2]; _assert_(e1>=0 && e1<iomodel->numberofelements);
++		e2 = iomodel->edges[i*4+3]; _assert_(e2>=0 && e2<iomodel->numberofelements);
++
++		/*Process element by element*/
++		for(int j=0;j<3;j++){
++			v3 = iomodel->elements[e1*3+j];
++			if(v1!=v3 && v2!=v3){
++				element_edge_connectivity[e1*3+j]=i;
++				break;
++			}
++		}
++		for(int j=0;j<3;j++){
++			v3 = iomodel->elements[e2*3+j];
++			if(v1!=v3 && v2!=v3){
++				element_edge_connectivity[e2*3+j]=i;
++				break;
++			}
++		}
++	}
++
++	/*Assign output pointers*/
++	iomodel->elementtoedgeconnectivity = element_edge_connectivity;
++}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15434)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15435)
+@@ -242,12 +242,13 @@
+ 					./modules/ModelProcessorx/DistributeNumDofs.cpp\
+ 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp\
+-					./modules/ModelProcessorx/ProcessMesh2d.cpp\
+ 					./modules/ModelProcessorx/SortDataSets.cpp\
+ 					./modules/ModelProcessorx/UpdateCounters.cpp\
+ 					./modules/ModelProcessorx/CreateDataSets.cpp\
+ 					./modules/ModelProcessorx/CreateParameters.cpp\
+ 					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
++					./modules/ModelProcessorx/CreateEdges.cpp\
++					./modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 15434)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 15435)
+@@ -37,7 +37,7 @@
+ 		int   numberofedges;
+ 		int  *elements;
+ 		int  *edges;
+-		int  *elementedgeconnectivity;
++		int  *elementtoedgeconnectivity;
+ 		int  *singlenodetoelementconnectivity;
+ 		int  *numbernodetoelementconnectivity;
+ 
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15434)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15435)
+@@ -30,8 +30,13 @@
+ 	this->my_nodes=NULL;
+ 	this->my_vertices=NULL;
+ 
++	this->dim=-1;
++	this->numberofvertices=-1;
++	this->numberofelements=-1;
++	this->numberofedges=-1;
+ 	this->elements=NULL;
+ 	this->edges=NULL;
++	this->elementtoedgeconnectivity      =NULL;
+ 	this->singlenodetoelementconnectivity=NULL;
+ 	this->numbernodetoelementconnectivity=NULL;
+ 
+@@ -66,12 +71,13 @@
+ 	this->my_elements = NULL;
+ 	this->my_nodes    = NULL;
+ 	this->my_vertices = NULL;
++
+ 	FetchData(&this->dim,MeshDimensionEnum);
+ 	FetchData(&this->numberofvertices,MeshNumberofverticesEnum);
+ 	FetchData(&this->numberofelements,MeshNumberofelementsEnum);
+ 	FetchData(&this->elements,NULL,NULL,MeshElementsEnum);
+ 	this->edges                           = NULL;
+-	this->elementedgeconnectivity         = NULL;
++	this->elementtoedgeconnectivity       = NULL;
+ 	this->singlenodetoelementconnectivity = NULL;
+ 	this->numbernodetoelementconnectivity = NULL;
+ 
+@@ -106,7 +112,7 @@
+ 
+ 	xDelete<int>(this->elements);
+ 	xDelete<int>(this->edges);
+-	xDelete<int>(this->elementedgeconnectivity);
++	xDelete<int>(this->elementtoedgeconnectivity);
+ 	xDelete<int>(this->singlenodetoelementconnectivity);
+ 	xDelete<int>(this->numbernodetoelementconnectivity);
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15435-15436.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15435-15436.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15435-15436.diff	(revision 16134)
@@ -0,0 +1,525 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15435)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15436)
+@@ -274,30 +274,30 @@
+ 
+ 	/*Build B: */
+ 	for (i=0;i<NUMNODESMINI;i++){
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh7[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh7[1][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh7[2][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=(float).5*dh1dh7[1][i]; 
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=(float).5*dh1dh7[0][i]; 
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=(float).5*dh1dh7[2][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=(float).5*dh1dh7[0][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=(float).5*dh1dh7[2][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=(float).5*dh1dh7[1][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=dh1dh7[0][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=dh1dh7[1][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=dh1dh7[2][i];
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dh1dh7[0][i+0]; //B[0][NDOF4*i+0] = dh1dh6[0][i+0];
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dh1dh7[1][i+0];
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = dh1dh7[2][i+0];
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = (float).5*dh1dh7[1][i+0];
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = (float).5*dh1dh7[0][i+0];
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+0] = (float).5*dh1dh7[2][i+0];
++		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2] = (float).5*dh1dh7[0][i+0];
++		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1] = (float).5*dh1dh7[2][i+0];
++		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2] = (float).5*dh1dh7[1][i+0];
++		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+0] = dh1dh7[0][i+0];
++		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1] = dh1dh7[1][i+0];
++		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2] = dh1dh7[2][i+0];
+ 	}
+ 
+ 	for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+@@ -337,45 +337,47 @@
+ 
+ 	/*Get dh1dh7 in actual coordinate system: */
+ 	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
+-	GetNodalFunctionsP1(l1l6, gauss);
++	GetNodalFunctionsP1(&l1l6[0], gauss);
+ 
+ 	/*Build B: */
+ 	for (i=0;i<NUMNODESP1;i++){
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh6[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh6[1][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh6[2][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=.5*dh1dh6[1][i]; 
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=.5*dh1dh6[0][i]; 
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=.5*dh1dh6[2][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=.5*dh1dh6[0][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=.5*dh1dh6[2][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=.5*dh1dh6[1][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=dh1dh6[0][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=dh1dh6[1][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=dh1dh6[2][i];
++		*(B+(NDOF4*NUMNODESP1)*0+NDOF4*i)=dh1dh6[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
++		*(B+(NDOF4*NUMNODESP1)*0+NDOF4*i+1)=0.;
++		*(B+(NDOF4*NUMNODESP1)*0+NDOF4*i+2)=0.;
++		*(B+(NDOF4*NUMNODESP1)*1+NDOF4*i)=0.;
++		*(B+(NDOF4*NUMNODESP1)*1+NDOF4*i+1)=dh1dh6[1][i];
++		*(B+(NDOF4*NUMNODESP1)*1+NDOF4*i+2)=0.;
++		*(B+(NDOF4*NUMNODESP1)*2+NDOF4*i)=0.;
++		*(B+(NDOF4*NUMNODESP1)*2+NDOF4*i+1)=0.;
++		*(B+(NDOF4*NUMNODESP1)*2+NDOF4*i+2)=dh1dh6[2][i];
++		*(B+(NDOF4*NUMNODESP1)*3+NDOF4*i)=.5*dh1dh6[1][i]; 
++		*(B+(NDOF4*NUMNODESP1)*3+NDOF4*i+1)=.5*dh1dh6[0][i]; 
++		*(B+(NDOF4*NUMNODESP1)*3+NDOF4*i+2)=0.;
++		*(B+(NDOF4*NUMNODESP1)*4+NDOF4*i)=.5*dh1dh6[2][i];
++		*(B+(NDOF4*NUMNODESP1)*4+NDOF4*i+1)=0.;
++		*(B+(NDOF4*NUMNODESP1)*4+NDOF4*i+2)=.5*dh1dh6[0][i];
++		*(B+(NDOF4*NUMNODESP1)*5+NDOF4*i)=0.;
++		*(B+(NDOF4*NUMNODESP1)*5+NDOF4*i+1)=.5*dh1dh6[2][i];
++		*(B+(NDOF4*NUMNODESP1)*5+NDOF4*i+2)=.5*dh1dh6[1][i];
++		*(B+(NDOF4*NUMNODESP1)*6+NDOF4*i)=0.;
++		*(B+(NDOF4*NUMNODESP1)*6+NDOF4*i+1)=0.;
++		*(B+(NDOF4*NUMNODESP1)*6+NDOF4*i+2)=0.;
++		*(B+(NDOF4*NUMNODESP1)*7+NDOF4*i)=dh1dh6[0][i];
++		*(B+(NDOF4*NUMNODESP1)*7+NDOF4*i+1)=dh1dh6[1][i];
++		*(B+(NDOF4*NUMNODESP1)*7+NDOF4*i+2)=dh1dh6[2][i];
++		_assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
+ 	}
+ 
+ 	for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3)=0.;
+-		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3)=l1l6[i];
+-		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3)=0.;
++		B[(NDOF4*NUMNODESP1)*0+NDOF4*i+3]=0.;
++		B[(NDOF4*NUMNODESP1)*1+NDOF4*i+3]=0.;
++		B[(NDOF4*NUMNODESP1)*2+NDOF4*i+3]=0.;
++		B[(NDOF4*NUMNODESP1)*3+NDOF4*i+3]=0.;
++		B[(NDOF4*NUMNODESP1)*4+NDOF4*i+3]=0.;
++		B[(NDOF4*NUMNODESP1)*5+NDOF4*i+3]=0.;
++		B[(NDOF4*NUMNODESP1)*6+NDOF4*i+3]=l1l6[i];
++		B[(NDOF4*NUMNODESP1)*7+NDOF4*i+3]=0.;
++		_assert_(((NDOF4*NUMNODESP1)*7+NDOF4*i+3)<8*24);
+ 	}
+ 
+ }
+@@ -475,41 +477,43 @@
+ 
+ 	/*B_primeuild B_prime: */
+ 	for (i=0;i<NUMNODESP1;i++){
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh6[0][i]; //B_prime[0][NDOF4*i]=dh1dh6[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh6[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh6[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=dh1dh6[1][i]; 
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=dh1dh6[0][i]; 
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=dh1dh6[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=dh1dh6[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=dh1dh6[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=dh1dh6[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=dh1dh6[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=dh1dh6[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=dh1dh6[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i)=dh1dh6[0][i]; //B_prime[0][NDOF4*i]=dh1dh6[0][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+1)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+2)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+1)=dh1dh6[1][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+2)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+1)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+2)=dh1dh6[2][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i)=dh1dh6[1][i]; 
++		*(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+1)=dh1dh6[0][i]; 
++		*(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+2)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i)=dh1dh6[2][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+1)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+2)=dh1dh6[0][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+1)=dh1dh6[2][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+2)=dh1dh6[1][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i)=dh1dh6[0][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+1)=dh1dh6[1][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+2)=dh1dh6[2][i];
++		*(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+1)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+2)=0.;
++		_assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
+ 	}
+ 
+ 	for (i=0;i<NUMNODESP1;i++){ //last column 
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3)=l1l6[i];
++		*(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+3)=0.;
++		*(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+3)=l1l6[i];
++		_assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
+ 	}
+ 
+ }
+@@ -1086,7 +1090,7 @@
+ 	*Jdet=SQRT3/6.0*pow(pow(((y2-y1)*(z3-z1)-(z2-z1)*(y3-y1)),2.0)+pow(((z2-z1)*(x3-x1)-(x2-x1)*(z3-z1)),2.0)+pow(((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)),2.0),0.5);
+ 	if(*Jdet<0) _error_("negative jacobian determinant!");
+ }
+-/*}}}*/
++/*}}}*
+ /*FUNCTION PentaRef::GetSegmentJacobianDeterminant{{{*/
+ void PentaRef::GetSegmentJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss){
+ 	/*The Jacobian determinant is constant over the element, discard the gaussian points. 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15435)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15436)
+@@ -6815,7 +6815,7 @@
+ 		case 1:
+ 			/*compute all stiffness matrices for this element*/
+ 			Ke1=CreateKMatrixDiagnosticStokesGLSViscous();
+-			Ke2=CreateKMatrixDiagnosticStokesGLSFriction();
++			Ke2=CreateKMatrixDiagnosticStokesFriction();
+ 			Ke =new ElementMatrix(Ke1,Ke2);
+ 			break;
+ 		default:
+@@ -6893,8 +6893,10 @@
+ /*FUNCTION Penta::CreateKMatrixDiagnosticStokesGLSViscous {{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSViscous(void){
+ 
++	int        numdof = NDOF4*NUMVERTICES;
++
+ 	/*Intermediaries */
+-	int        i,approximation;
++	int        i,j,approximation;
+ 	IssmDouble Jdet,viscosity,stokesreconditioning;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+@@ -6902,7 +6904,7 @@
+ 	IssmDouble B_prime[8][24];
+ 	IssmDouble D_scalar;
+ 	IssmDouble D[8][8]={0.0};
+-	IssmDouble Ke_temp[24][24]={1.0}; //for the six nodes
++	IssmDouble Ke_temp[24][24]={0.0}; //for the six nodes
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*If on water or not Stokes, skip stiffness: */
+@@ -6938,6 +6940,8 @@
+ 					&D[0][0],8,8,0,
+ 					&B_prime[0][0],8,24,0,
+ 					&Ke_temp[0][0],1);
++
++		for(i=0;i<numdof;i++) for(j=0;j<numdof;j++) Ke->values[i*numdof+j]+=Ke_temp[i][j];
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+@@ -7020,78 +7024,6 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticStokesGLSFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSFriction(void){
+-
+-	/*Constants*/
+-	const int numdof=NUMVERTICES*NDOF4;
+-	const int numdof2d=NUMVERTICES2D*NDOF4;
+-
+-	/*Intermediaries */
+-	int        i,j;
+-	int        analysis_type,approximation;
+-	IssmDouble alpha2,Jdet2d;
+-	IssmDouble stokesreconditioning,viscosity;
+-	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble LStokes[2][numdof2d];
+-	IssmDouble DLStokes[2][2]={0.0};
+-	IssmDouble Ke_drag_gaussian[numdof2d][numdof2d];
+-	Friction*  friction=NULL;
+-	GaussPenta *gauss=NULL;
+-
+-	/*If on water or not Stokes, skip stiffness: */
+-	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(IsFloating() || !IsOnBed() || (approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum)) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+-
+-	/*Retrieve all inputs and parameters*/
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+-	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+-	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+-
+-	/*build friction object, used later on: */
+-	friction=new Friction("3d",inputs,matpar,analysis_type);
+-
+-	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(0,1,2,2);
+-	for(int ig=gauss->begin();ig<gauss->end();ig++){
+-
+-		gauss->GaussPoint(ig);
+-
+-		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
+-		GetLStokes(&LStokes[0][0], gauss);
+-
+-		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+-
+-		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
+-
+-		DLStokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
+-		DLStokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
+-
+-		TripleMultiply( &LStokes[0][0],2,numdof2d,1,
+-					&DLStokes[0][0],2,2,0,
+-					&LStokes[0][0],2,numdof2d,0,
+-					&Ke_drag_gaussian[0][0],0);
+-
+-		for(i=0;i<numdof2d;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdof+j]+=Ke_drag_gaussian[i][j];
+-	}
+-
+-	/*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
+-	//TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
+-
+-	/*Clean up and return*/
+-	delete gauss;
+-	delete friction;
+-	return Ke;
+-}
+-/*}}}*/
+ /*FUNCTION Penta::CreateKMatrixDiagnosticVert {{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticVert(void){
+ 
+@@ -7739,11 +7671,30 @@
+ /*FUNCTION Penta::CreatePVectorDiagnosticStokes {{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticStokes(void){
+ 
+-	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticStokesViscous();
+-	ElementVector* pe2=CreatePVectorDiagnosticStokesShelf();
+-	ElementVector* pe =new ElementVector(pe1,pe2);
++	int fe_stokes;
++	ElementVector* pe1;
++	ElementVector* pe2;
++	ElementVector* pe;
++	parameters->FindParam(&fe_stokes,FlowequationFeStokesEnum);
+ 
++	switch(fe_stokes){
++		case 0:
++			/*compute all stiffness matrices for this element*/
++			pe1=CreatePVectorDiagnosticStokesViscous();
++			pe2=CreatePVectorDiagnosticStokesShelf();
++			pe =new ElementVector(pe1,pe2);
++			break;
++		case 1:
++			/*compute all stiffness matrices for this element*/
++			pe1=CreatePVectorDiagnosticStokesGLSViscous();
++			pe2=CreatePVectorDiagnosticStokesShelf();
++			pe =new ElementVector(pe1,pe2);
++			break;
++		default:
++			_error_("Finite element" << fe_stokes << " not supported yet");
++	}
++
++
+ 	/*clean-up and return*/
+ 	delete pe1;
+ 	delete pe2;
+@@ -7829,6 +7780,59 @@
+ 					&Ke_temp[0][0],1);
+ 	}
+ 
++	if(IsOnBed() || IsOnSurface()){
++		IssmDouble	xyz_list_tria[NUMVERTICES2D][3];
++		IssmDouble  pi=3.141592653589793;
++		IssmDouble  x,y,z;
++		IssmDouble  basis[6]; //for the six nodes of the penta
++		GaussPenta *gauss=NULL;
++		Input* x_input=inputs->GetInput(MeshXEnum);   _assert_(x_input);
++		Input* y_input=inputs->GetInput(MeshYEnum);   _assert_(y_input);
++		Input* z_input=inputs->GetInput(MeshZEnum);   _assert_(z_input);
++
++
++		if(IsOnBed()){ 
++			for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++			gauss=new GaussPenta(0,1,2,2);
++		}
++		if(IsOnSurface()){
++			for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i+3][j];
++			gauss=new GaussPenta(3,4,5,2);
++		}
++
++
++		for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++			gauss->GaussPoint(ig);
++
++			GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0], gauss);
++			GetNodalFunctionsP1(basis, gauss);
++			x_input->GetInputValue(&x, gauss);
++			y_input->GetInputValue(&y, gauss);
++			z_input->GetInputValue(&z, gauss);
++			
++
++			forcex=-((cos(2*pi*z)-1)*2*pi*sin(2*pi*y)*cos(2*pi*x)-2*(cos(2*pi*x)-1)*2*pi*sin(2*pi*y)*cos(2*pi*z))*1;
++			forcey=-((cos(2*pi*z)-1)*2*pi*sin(2*pi*x)*cos(2*pi*y)+(cos(2*pi*y)-1)*2*pi*sin(2*pi*x)*cos(2*pi*z))*1;
++			forcez=-(-2*pi*2*sin(2*pi*x)*sin(2*pi*y)*sin(2*pi*z)+sin(2*pi*x)*sin(2*pi*y)*sin(2*pi*z));
++
++			if(IsOnBed()){
++				for(i=0;i<3;i++){
++					Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*basis[i]*-1.;
++					Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*basis[i]*-1.;
++					Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*basis[i]*-1.;
++				}
++			}
++			if(IsOnSurface()){
++				for(i=3;i<6;i++){
++					Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*basis[i]*1.;
++					Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*basis[i]*1.;
++					Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*basis[i]*1.;
++				}
++			}
++		}
++	}
++
+ 	/*Condensation*/
+ 	ReduceVectorStokes(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);
+ 
+@@ -7840,6 +7844,70 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Penta::CreatePVectorDiagnosticStokesGLSViscous {{{*/
++ElementVector* Penta::CreatePVectorDiagnosticStokesGLSViscous(void){
++
++	/*Constants*/
++	const int numdof=NDOF4*NUMVERTICES;
++
++	/*Intermediaries*/
++	int        i,j;
++	int        approximation;
++	IssmDouble Jdet,gravity,rho_ice;
++	IssmDouble forcex,forcey,forcez;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble l1l6[6]; //for the six nodes and the bubble 
++	IssmDouble Pe_gaussian[numdof]={0.0}; //for the six nodes and the bubble 
++	GaussPenta *gauss=NULL;
++
++	/*Initialize Element vector and return if necessary*/
++	inputs->GetInputValue(&approximation,ApproximationEnum);
++	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++
++	/*Retrieve all inputs and parameters*/
++	rho_ice=matpar->GetRhoIce();
++	gravity=matpar->GetG();
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* vx_input=inputs->GetInput(VxEnum);   _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum);   _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum);   _assert_(vz_input);
++	Input* loadingforcex_input=inputs->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
++	Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
++	Input* loadingforcez_input=inputs->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussPenta(5,5);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctionsP1(&l1l6[0], gauss);
++
++		loadingforcex_input->GetInputValue(&forcex, gauss);
++		loadingforcey_input->GetInputValue(&forcey, gauss);
++		loadingforcez_input->GetInputValue(&forcez, gauss);
++
++		for(i=0;i<NUMVERTICES;i++){
++			Pe_gaussian[i*NDOF4+2]+=-rho_ice*gravity*Jdet*gauss->weight*l1l6[i];
++			Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*l1l6[i];
++			Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*l1l6[i];
++			Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*l1l6[i];
++		}
++	}
++
++	for(i=0;i<NUMVERTICES;i++) for(j=0;j<3;j++) pe->values[i*NDOF4+j]+=Pe_gaussian[i*NDOF4+j];
++
++	/*Transform coordinate system*/
++	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
++
++	/*Clean up and return*/
++	delete gauss;
++	return pe;
++}
++/*}}}*/
+ /*FUNCTION Penta::CreatePVectorDiagnosticStokesShelf{{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticStokesShelf(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15435)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15436)
+@@ -286,6 +286,7 @@
+ 		ElementVector* CreatePVectorDiagnosticPattynStokes(void);
+ 		ElementVector* CreatePVectorDiagnosticStokes(void);
+ 		ElementVector* CreatePVectorDiagnosticStokesViscous(void);
++		ElementVector* CreatePVectorDiagnosticStokesGLSViscous(void);
+ 		ElementVector* CreatePVectorDiagnosticStokesShelf(void);
+ 		ElementVector* CreatePVectorDiagnosticVert(void);
+ 		ElementVector* CreatePVectorDiagnosticVertVolume(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15436-15437.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15436-15437.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15436-15437.diff	(revision 16134)
@@ -0,0 +1,210 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15436)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15437)
+@@ -71,6 +71,7 @@
+ 	FlowequationIsmacayealpattynEnum,
+ 	FlowequationIsstokesEnum,
+ 	FlowequationFeStokesEnum,
++	FlowequationFeSsaEnum,
+ 	FlowequationVertexEquationEnum,
+ 	FrictionCoefficientEnum,
+ 	FrictionPEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15436)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15437)
+@@ -79,6 +79,7 @@
+ 		case FlowequationIsmacayealpattynEnum : return "FlowequationIsmacayealpattyn";
+ 		case FlowequationIsstokesEnum : return "FlowequationIsstokes";
+ 		case FlowequationFeStokesEnum : return "FlowequationFeStokes";
++		case FlowequationFeSsaEnum : return "FlowequationFeSsa";
+ 		case FlowequationVertexEquationEnum : return "FlowequationVertexEquation";
+ 		case FrictionCoefficientEnum : return "FrictionCoefficient";
+ 		case FrictionPEnum : return "FrictionP";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15436)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15437)
+@@ -79,6 +79,7 @@
+ 	      else if (strcmp(name,"FlowequationIsmacayealpattyn")==0) return FlowequationIsmacayealpattynEnum;
+ 	      else if (strcmp(name,"FlowequationIsstokes")==0) return FlowequationIsstokesEnum;
+ 	      else if (strcmp(name,"FlowequationFeStokes")==0) return FlowequationFeStokesEnum;
++	      else if (strcmp(name,"FlowequationFeSsa")==0) return FlowequationFeSsaEnum;
+ 	      else if (strcmp(name,"FlowequationVertexEquation")==0) return FlowequationVertexEquationEnum;
+ 	      else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
+ 	      else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+ 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+ 	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+-	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
++	      if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
++	      else if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
+ 	      else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
+ 	      else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum;
+ 	      else if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
++	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+-	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
++	      if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
++	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+ 	      else if (strcmp(name,"StokesIceFront")==0) return StokesIceFrontEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+-	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
++	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
++	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"Patch")==0) return PatchEnum;
+ 	      else if (strcmp(name,"PatchNodes")==0) return PatchNodesEnum;
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15436)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15437)
+@@ -15,16 +15,17 @@
+ 
+ 	def __init__(self): # {{{
+ 		
+-		self.ismacayealpattyn     = 0
+-		self.ishutter             = 0
+-		self.isl1l2               = 0
+-		self.isstokes             = 0
+-		self.fe_stokes            = 0
+-		self.vertex_equation      = float('NaN')
+-		self.element_equation     = float('NaN')
+-		self.bordermacayeal       = float('NaN')
+-		self.borderpattyn         = float('NaN')
+-		self.borderstokes         = float('NaN')
++		self.ismacayealpattyn = 0
++		self.ishutter         = 0
++		self.isl1l2           = 0
++		self.isstokes         = 0
++		self.fe_stokes        = 0
++		self.fe_ssa           = 0
++		self.vertex_equation  = float('NaN')
++		self.element_equation = float('NaN')
++		self.bordermacayeal   = float('NaN')
++		self.borderpattyn     = float('NaN')
++		self.borderstokes     = float('NaN')
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -79,6 +80,7 @@
+ 		WriteData(fid,'object',self,'fieldname','isl1l2','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isstokes','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','fe_stokes','format','Integer')
++		WriteData(fid,'object',self,'fieldname','fe_ssa','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','bordermacayeal','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderpattyn','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderstokes','format','DoubleMat','mattype',1)
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15436)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15437)
+@@ -10,6 +10,7 @@
+ 		isl1l2               = 0;
+ 		isstokes             = 0;
+ 		fe_stokes            = 0;
++		fe_ssa               = 0;
+ 		vertex_equation      = NaN;
+ 		element_equation     = NaN;
+ 		bordermacayeal       = NaN;
+@@ -79,6 +80,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','isl1l2','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isstokes','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','fe_stokes','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','fe_ssa','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','bordermacayeal','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','borderpattyn','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','borderstokes','format','DoubleMat','mattype',1);
+Index: ../trunk-jpl/src/m/enum/FlowequationFeSsaEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationFeSsaEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationFeSsaEnum.m	(revision 15437)
+@@ -0,0 +1,11 @@
++function macro=FlowequationFeSsaEnum()
++%FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSsa
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationFeSsaEnum()
++
++macro=StringToEnum('FlowequationFeSsa');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15436)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15437)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=559;
++macro=560;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15436)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15437)
+@@ -890,6 +890,20 @@
+ 
+ 	return StringToEnum('FlowequationFeStokes')[0]
+ 
++def FlowequationFeSsaEnum():
++	"""
++	FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSsa
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=FlowequationFeSsaEnum()
++	"""
++
++	return StringToEnum('FlowequationFeSsa')[0]
++
+ def FlowequationVertexEquationEnum():
+ 	"""
+ 	FLOWEQUATIONVERTEXEQUATIONENUM - Enum of FlowequationVertexEquation
+@@ -7846,5 +7860,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 559
++	return 560
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15437-15438.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15437-15438.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15437-15438.diff	(revision 16134)
@@ -0,0 +1,180 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15437)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15438)
+@@ -6893,18 +6893,22 @@
+ /*FUNCTION Penta::CreateKMatrixDiagnosticStokesGLSViscous {{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSViscous(void){
+ 
+-	int        numdof = NDOF4*NUMVERTICES;
++	int        numdof  = NUMVERTICES*NDOF4;
++	int        numvert = NUMVERTICES;
+ 
+ 	/*Intermediaries */
+ 	int        i,j,approximation;
+-	IssmDouble Jdet,viscosity,stokesreconditioning;
++	IssmDouble Jdet,viscosity,stokesreconditioning,diameter,rigidity;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble B[8][24];
+ 	IssmDouble B_prime[8][24];
+-	IssmDouble D_scalar;
++	IssmDouble B_stab[3][numvert];
++	IssmDouble D_scalar,D_scalar_stab;
+ 	IssmDouble D[8][8]={0.0};
++	IssmDouble D_stab[3][3]={0.0};
+ 	IssmDouble Ke_temp[24][24]={0.0}; //for the six nodes
++	IssmDouble Ke_temp_stab[6][6]={0.0}; //for the six nodes
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*If on water or not Stokes, skip stiffness: */
+@@ -6919,6 +6923,10 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+ 
++	/*Find minimal length and B*/
++	rigidity=material->GetB();
++	diameter=MinEdgeLength(xyz_list);
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -6942,6 +6950,22 @@
+ 					&Ke_temp[0][0],1);
+ 
+ 		for(i=0;i<numdof;i++) for(j=0;j<numdof;j++) Ke->values[i*numdof+j]+=Ke_temp[i][j];
++
++		/*Add stabilization*/
++		D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2.)/(4.*1000*rigidity)*stokesreconditioning;
++		GetBConduct(&B_stab[0][0],&xyz_list[0][0],gauss); 
++
++		D_stab[0][0]=D_scalar_stab; D_stab[0][1]=0;             D_stab[0][2]=0;
++		D_stab[1][0]=0;             D_stab[1][1]=D_scalar_stab; D_stab[1][2]=0;
++		D_stab[2][0]=0;             D_stab[2][1]=0;             D_stab[2][2]=D_scalar_stab;
++
++		TripleMultiply(&B_stab[0][0],3,numvert,1,
++					&D_stab[0][0],3,3,0,
++					&B_stab[0][0],3,numvert,0,
++					&Ke_temp_stab[0][0],1);
++
++		for(i=0;i<numvert;i++) for(j=0;j<numvert;j++) Ke->values[i*numdof*4+3+j*4+3]+=Ke_temp_stab[i][j];
++
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+@@ -7780,59 +7804,6 @@
+ 					&Ke_temp[0][0],1);
+ 	}
+ 
+-	if(IsOnBed() || IsOnSurface()){
+-		IssmDouble	xyz_list_tria[NUMVERTICES2D][3];
+-		IssmDouble  pi=3.141592653589793;
+-		IssmDouble  x,y,z;
+-		IssmDouble  basis[6]; //for the six nodes of the penta
+-		GaussPenta *gauss=NULL;
+-		Input* x_input=inputs->GetInput(MeshXEnum);   _assert_(x_input);
+-		Input* y_input=inputs->GetInput(MeshYEnum);   _assert_(y_input);
+-		Input* z_input=inputs->GetInput(MeshZEnum);   _assert_(z_input);
+-
+-
+-		if(IsOnBed()){ 
+-			for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+-			gauss=new GaussPenta(0,1,2,2);
+-		}
+-		if(IsOnSurface()){
+-			for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i+3][j];
+-			gauss=new GaussPenta(3,4,5,2);
+-		}
+-
+-
+-		for(int ig=gauss->begin();ig<gauss->end();ig++){
+-
+-			gauss->GaussPoint(ig);
+-
+-			GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0], gauss);
+-			GetNodalFunctionsP1(basis, gauss);
+-			x_input->GetInputValue(&x, gauss);
+-			y_input->GetInputValue(&y, gauss);
+-			z_input->GetInputValue(&z, gauss);
+-			
+-
+-			forcex=-((cos(2*pi*z)-1)*2*pi*sin(2*pi*y)*cos(2*pi*x)-2*(cos(2*pi*x)-1)*2*pi*sin(2*pi*y)*cos(2*pi*z))*1;
+-			forcey=-((cos(2*pi*z)-1)*2*pi*sin(2*pi*x)*cos(2*pi*y)+(cos(2*pi*y)-1)*2*pi*sin(2*pi*x)*cos(2*pi*z))*1;
+-			forcez=-(-2*pi*2*sin(2*pi*x)*sin(2*pi*y)*sin(2*pi*z)+sin(2*pi*x)*sin(2*pi*y)*sin(2*pi*z));
+-
+-			if(IsOnBed()){
+-				for(i=0;i<3;i++){
+-					Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*basis[i]*-1.;
+-					Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*basis[i]*-1.;
+-					Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*basis[i]*-1.;
+-				}
+-			}
+-			if(IsOnSurface()){
+-				for(i=3;i<6;i++){
+-					Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*basis[i]*1.;
+-					Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*basis[i]*1.;
+-					Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*basis[i]*1.;
+-				}
+-			}
+-		}
+-	}
+-
+ 	/*Condensation*/
+ 	ReduceVectorStokes(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);
+ 
+@@ -7853,22 +7824,25 @@
+ 	/*Intermediaries*/
+ 	int        i,j;
+ 	int        approximation;
+-	IssmDouble Jdet,gravity,rho_ice;
+-	IssmDouble forcex,forcey,forcez;
++	IssmDouble Jdet,gravity,rho_ice,B,D_scalar_stab;
++	IssmDouble forcex,forcey,forcez,diameter,stokesreconditioning;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble l1l6[6]; //for the six nodes and the bubble 
++	IssmDouble dh1dh6[3][NUMVERTICES];
+ 	IssmDouble Pe_gaussian[numdof]={0.0}; //for the six nodes and the bubble 
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
++	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+ 	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	rho_ice=matpar->GetRhoIce();
+ 	gravity=matpar->GetG();
++	B=material->GetB();
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	Input* vx_input=inputs->GetInput(VxEnum);   _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);   _assert_(vy_input);
+@@ -7877,6 +7851,9 @@
+ 	Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
+ 	Input* loadingforcez_input=inputs->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
+ 
++	/*Find minimal length*/
++	diameter=MinEdgeLength(xyz_list);
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -7896,6 +7873,17 @@
+ 			Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*l1l6[i];
+ 			Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*l1l6[i];
+ 		}
++
++		/*Add stabilization*/
++		D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2.)/(4.*1000*B)*stokesreconditioning;
++		GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],&xyz_list[0][0],gauss);
++
++		for(i=0;i<NUMVERTICES;i++){
++			Pe_gaussian[i*NDOF4+3]+=-rho_ice*gravity*D_scalar_stab*dh1dh6[2][i];
++			Pe_gaussian[i*NDOF4+3]+=forcex*D_scalar_stab*dh1dh6[0][i];
++			Pe_gaussian[i*NDOF4+3]+=forcey*D_scalar_stab*dh1dh6[1][i];
++			Pe_gaussian[i*NDOF4+3]+=forcez*D_scalar_stab*dh1dh6[2][i];
++		}
+ 	}
+ 
+ 	for(i=0;i<NUMVERTICES;i++) for(j=0;j<3;j++) pe->values[i*NDOF4+j]+=Pe_gaussian[i*NDOF4+j];
Index: /issm/oecreview/Archive/15392-16133/ISSM-15438-15439.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15438-15439.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15438-15439.diff	(revision 16134)
@@ -0,0 +1,525 @@
+Index: ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 15439)
+@@ -34,14 +34,6 @@
+ 			load->Configure(elements,loads,nodes,vertices,materials,parameters);
+ 		}
+ 	}
+-	if(VerboseMProcessor()) _printf0_("      Configuring nodes...\n");
+-	for (i=0;i<nodes->Size();i++){
+-		node=(Node*)nodes->GetObjectByOffset(i);
+-		if(node->InAnalysis(configuration_type)){
+-			node->Configure(nodes,vertices);
+-		}
+-	}
+-
+ 	if(VerboseMProcessor()) _printf0_("      Configuring materials...\n");
+ 	for (i=0;i<materials->Size();i++){
+ 		material=(Material*)materials->GetObjectByOffset(i);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15439)
+@@ -13,11 +13,13 @@
+ 	/*Intermediary*/
+ 	bool   continuous_galerkin=true;
+ 	bool   isstokes,isl1l2,ismacayealpattyn;
++	int    finiteelementssa;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+ 	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+ 	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
++	iomodel->Constant(&finiteelementssa,FlowequationFeSsaEnum);
+ 
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+@@ -47,10 +49,11 @@
+ 		}
+ 	}
+ 
+-	if(false){
++	if(finiteelementssa==1){
+ 
+ 		/*Quadratic element*/
+ 		CreateEdges(iomodel);
++		CreateElementToEdgeConnectivity(iomodel);
+ 		int  element1,element2;
+ 		bool my_edge;
+ 
+@@ -68,7 +71,7 @@
+ 
+ 			/*Add node on edge*/
+ 			if(my_edge){
+-				nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,iomodel->numberofvertices+i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
++				nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,0,iomodel,DiagnosticHorizAnalysisEnum));
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp	(revision 15439)
+@@ -26,29 +26,30 @@
+ 	/*Initialize intermediaries*/
+ 	int*  element_edge_connectivity = xNew<int>(iomodel->numberofelements*3);   /*edge1   edge2   edge3*/
+ 
+-
+ 	/*Go through all edges and create connectivity table*/
+ 	for(int i=0;i<iomodel->numberofedges;i++){
+ 
+ 		/*Get the two vertices of current edge*/
+-		v1 = iomodel->edges[i*4+0]; _assert_(v1>=0 && v1<iomodel->numberofvertices);
+-		v2 = iomodel->edges[i*4+1]; _assert_(v2>=0 && v2<iomodel->numberofvertices);
+-		e1 = iomodel->edges[i*4+2]; _assert_(e1>=0 && e1<iomodel->numberofelements);
+-		e2 = iomodel->edges[i*4+3]; _assert_(e2>=0 && e2<iomodel->numberofelements);
++		v1 = iomodel->edges[i*4+0]-1; _assert_(v1>=0 && v1<iomodel->numberofvertices);
++		v2 = iomodel->edges[i*4+1]-1; _assert_(v2>=0 && v2<iomodel->numberofvertices);
++		e1 = iomodel->edges[i*4+2]-1; _assert_(e1>=0 && e1<iomodel->numberofelements);
++		e2 = iomodel->edges[i*4+3]-1; _assert_(e2>=-2 && e2<iomodel->numberofelements);
+ 
+ 		/*Process element by element*/
+ 		for(int j=0;j<3;j++){
+-			v3 = iomodel->elements[e1*3+j];
++			v3 = iomodel->elements[e1*3+j]-1;
+ 			if(v1!=v3 && v2!=v3){
+ 				element_edge_connectivity[e1*3+j]=i;
+ 				break;
+ 			}
+ 		}
+-		for(int j=0;j<3;j++){
+-			v3 = iomodel->elements[e2*3+j];
+-			if(v1!=v3 && v2!=v3){
+-				element_edge_connectivity[e2*3+j]=i;
+-				break;
++		if(e2>-1){
++			for(int j=0;j<3;j++){
++				v3 = iomodel->elements[e2*3+j]-1;
++				if(v1!=v3 && v2!=v3){
++					element_edge_connectivity[e2*3+j]=i;
++					break;
++				}
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/classes/Nodes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodes.h	(revision 15438)
++++ ../trunk-jpl/src/c/classes/Nodes.h	(revision 15439)
+@@ -24,7 +24,6 @@
+ 		~Nodes();
+ 
+ 		/*numerics*/
+-		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+ 		void  DistributeDofs(int analysis_type,int SETENUM);
+ 		void  FlagClones(int analysis_type);
+ 		int   MaxNumDofs(int analysis_type,int setenum);
+@@ -33,7 +32,6 @@
+ 		int   NumberOfNodes(int analysis_type);
+ 		int   NumberOfNodes(void);
+ 		void  Ranks(int* ranks,int analysis_type);
+-		void  SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+ 
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15439)
+@@ -287,7 +287,6 @@
+ 
+ 	/*configure elements, loads and nodes, for this new analysis: */
+ 	this->elements->SetCurrentConfiguration(elements,loads, nodes,vertices, materials,parameters);
+-	this->nodes->SetCurrentConfiguration(elements,loads, nodes,vertices, materials,parameters);
+ 	this->loads->SetCurrentConfiguration(elements, loads, nodes,vertices, materials,parameters);
+ 
+ 	/*take care of toolkits options, that depend on this analysis type (present only after model processor)*/
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 15438)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 15439)
+@@ -33,7 +33,6 @@
+ 		int sid;   //"serial" id (rank of this node if the dataset was serial on 1 cpu)
+ 
+ 		DofIndexing  indexing;
+-		Hook        *hvertex;
+ 		Inputs      *inputs;               //properties of this node
+ 		int          analysis_type;
+ 		IssmDouble   coord_system[3][3];
+@@ -65,7 +64,6 @@
+ 		void  InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("Not implemented yet!");}
+ 		/*}}}*/
+ 		/*Node numerical routines {{{*/
+-		void   Configure(DataSet* nodes,Vertices* vertices);
+ 		void   CreateNodalConstraints(Vector<IssmDouble>* ys);
+ 		void   SetCurrentConfiguration(DataSet* nodes,Vertices* vertices);
+ 		int    Sid(void); 
+@@ -82,7 +80,6 @@
+ 		void   DofInFSet(int dof);
+ 		int    GetDof(int dofindex,int setenum);
+ 		void   CreateVecSets(Vector<IssmDouble>* pv_g,Vector<IssmDouble>* pv_f,Vector<IssmDouble>* pv_s);
+-		int    GetConnectivity();
+ 		void   GetDofList(int* poutdoflist,int approximation_enum,int setenum);
+ 		void   GetLocalDofList(int* poutdoflist,int approximation_enum,int setenum);
+ 		void   FreezeDof(int dof);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15439)
+@@ -689,18 +689,19 @@
+ /*FUNCTION Tria::GetDofList {{{*/
+ void  Tria::GetDofList(int** pdoflist, int approximation_enum,int setenum){
+ 
+-	int i,j;
+-	int count=0;
+-	int numberofdofs=0;
+-	int* doflist=NULL;
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
+ 	/*First, figure out size of doflist and create it: */
+-	for(i=0;i<3;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+-	doflist=xNew<int>(numberofdofs);
++	int numberofdofs=0;
++	for(int i=0;i<numnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+ 
++	/*Allocate output*/
++	int* doflist=xNew<int>(numberofdofs);
++
+ 	/*Populate: */
+-	count=0;
+-	for(i=0;i<3;i++){
++	int count=0;
++	for(int i=0;i<numnodes;i++){
+ 		nodes[i]->GetDofList(doflist+count,approximation_enum,setenum);
+ 		count+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+ 	}
+@@ -905,6 +906,8 @@
+ 			return 3;
+ 		case P1DGEnum:
+ 			return 3;
++		case P2Enum:
++			return 6;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+@@ -1043,7 +1046,7 @@
+ /*}}}*/
+ /*FUNCTION Tria::GetConnectivityList {{{*/
+ void  Tria::GetConnectivityList(int* connectivity){
+-	for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity();
++	for(int i=0;i<NUMVERTICES;i++) connectivity[i]=vertices[i]->Connectivity();
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GetSolutionFromInputs{{{*/
+@@ -2181,14 +2184,16 @@
+ void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type){ //i is the element index
+ 
+ 	/*Intermediaries*/
+-	int        i                   ,j;
+-	int        tria_node_ids[3];
++	int        i,j;
+ 	int        tria_vertex_ids[3];
+ 	int        tria_type;
+ 	IssmDouble nodeinputs[3];
+ 	IssmDouble yts;
+ 	int        progstabilization,balancestabilization;
++	int        fe_ssa;
+ 	bool       dakota_analysis;
++	int        numnodes;
++	int*       tria_node_ids = NULL;
+ 
+ 	/*Checks if debuging*/
+ 	/*{{{*/
+@@ -2199,15 +2204,17 @@
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&progstabilization,PrognosticStabilizationEnum);
+ 	iomodel->Constant(&balancestabilization,BalancethicknessStabilizationEnum);
++	iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 
+ 	/*Recover element type*/
+ 	if ((analysis_type==PrognosticAnalysisEnum && progstabilization==3) || (analysis_type==BalancethicknessAnalysisEnum && balancestabilization==3)){
+-		/*P1 Discontinuous Galerkin*/
+ 		tria_type=P1DGEnum;
+ 	}
++	else if(analysis_type==DiagnosticHorizAnalysisEnum && fe_ssa==1){
++		tria_type=P2Enum;
++	}
+ 	else{
+-		/*P1 Continuous Galerkin*/
+ 		tria_type=P1Enum;
+ 	}
+ 	this->SetElementType(tria_type,analysis_counter);
+@@ -2218,21 +2225,38 @@
+ 	}
+ 
+ 	/*Recover nodes ids needed to initialize the node hook.*/
+-	if (tria_type==P1DGEnum){
+-		/*Discontinuous Galerkin*/
+-		tria_node_ids[0]=iomodel->nodecounter+3*index+1;
+-		tria_node_ids[1]=iomodel->nodecounter+3*index+2;
+-		tria_node_ids[2]=iomodel->nodecounter+3*index+3;
++	switch(tria_type){
++		case P1Enum:
++			numnodes        = 3;
++			tria_node_ids   = xNew<int>(numnodes);
++			tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
++			tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
++			tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
++			break;
++		case P1DGEnum:
++			numnodes        = 3;
++			tria_node_ids   = xNew<int>(numnodes);
++			tria_node_ids[0]=iomodel->nodecounter+3*index+1;
++			tria_node_ids[1]=iomodel->nodecounter+3*index+2;
++			tria_node_ids[2]=iomodel->nodecounter+3*index+3;
++			break;
++		case P2Enum:
++			numnodes        = 6;
++			tria_node_ids   = xNew<int>(numnodes);
++			tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
++			tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
++			tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
++			tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0];
++			tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1];
++			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2];
++			break;
++		default:
++			_error_("Finite element "<<EnumToStringx(tria_type)<<" not supported yet");
+ 	}
+-	else{
+-		/*Continuous Galerkin*/
+-		for(i=0;i<3;i++){ 
+-			tria_node_ids[i]=iomodel->nodecounter+reCast<int,IssmDouble>(*(iomodel->elements+3*index+i)); //ids for vertices are in the elements array from Matlab
+-		}
+-	}
+ 
+ 	/*hooks: */
+-	this->SetHookNodes(tria_node_ids,3,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
++	this->SetHookNodes(tria_node_ids,numnodes,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
++	xDelete<int>(tria_node_ids);
+ 
+ 	/*Fill with IoModel*/
+ 	this->InputUpdateFromIoModel(index,iomodel);
+@@ -2904,7 +2928,7 @@
+ 
+ 	/*Create Element matrix*/
+ 	for(i=0;i<NUMVERTICES;i++){
+-		connectivity=nodes[i]->GetConnectivity();
++		connectivity=vertices[i]->Connectivity();
+ 		Ke->values[(2*i)*numdof  +(2*i)  ]=1/(IssmDouble)connectivity;
+ 		Ke->values[(2*i+1)*numdof+(2*i+1)]=1/(IssmDouble)connectivity;
+ 	}
+@@ -3049,7 +3073,7 @@
+ 
+ 		gauss->GaussVertex(i);
+ 
+-		connectivity=nodes[i]->GetConnectivity();
++		connectivity=vertices[i]->Connectivity();
+ 
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 		slopex_input->GetInputValue(&slope[0],gauss);
+@@ -5901,7 +5925,7 @@
+ 	for(int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+ 
+-		connectivity = IssmDouble(nodes[iv]->GetConnectivity());
++		connectivity = IssmDouble(vertices[iv]->Connectivity());
+ 		residual_input->GetInputValue(&residual,gauss);
+ 		pe->values[iv]+=residual/connectivity;
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15439)
+@@ -946,7 +946,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::GetConnectivityList {{{*/
+ void  Penta::GetConnectivityList(int* connectivity){
+-	for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity();
++	for(int i=0;i<NUMVERTICES;i++) connectivity[i]=vertices[i]->Connectivity();
+ }
+ /*}}}*/
+ /*FUNCTION Penta::GetElementType {{{*/
+@@ -6307,8 +6307,8 @@
+ 		j1=2*(i+3)+1;
+ 
+ 		/*Find connectivity for the two nodes*/
+-		connectivity[0]=nodes[i]->GetConnectivity();
+-		connectivity[1]=nodes[i+3]->GetConnectivity();
++		connectivity[0]=vertices[i]->Connectivity();
++		connectivity[1]=vertices[i+3]->Connectivity();
+ 		one0=1/(IssmDouble)connectivity[0];
+ 		one1=1/(IssmDouble)connectivity[1];
+ 
+@@ -7573,8 +7573,8 @@
+ 			xyz_list_segment[1][j]=xyz_list[node1][j];
+ 		}
+ 
+-		connectivity[0]=nodes[node0]->GetConnectivity();
+-		connectivity[1]=nodes[node1]->GetConnectivity();
++		connectivity[0]=vertices[node0]->Connectivity();
++		connectivity[1]=vertices[node1]->Connectivity();
+ 
+ 		/*Loop on the Gauss points: */
+ 		gauss=new GaussPenta(node0,node1,3);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15439)
+@@ -42,7 +42,7 @@
+ /*FUNCTION TriaRef::SetElementType{{{*/
+ void TriaRef::SetElementType(int type,int type_counter){
+ 
+-	_assert_(type==P1Enum || type==P1DGEnum);
++	_assert_(type==P1Enum || type==P1DGEnum || type==P2Enum);
+ 
+ 	/*initialize element type*/
+ 	this->element_type_list[type_counter]=type;
+Index: ../trunk-jpl/src/c/classes/Hook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Hook.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/classes/Hook.cpp	(revision 15439)
+@@ -62,13 +62,13 @@
+ /*Some of the Object functionality: */
+ /*FUNCTION Hook::Echo{{{*/
+ void Hook::Echo(void){
+-
++	_assert_(this);
+ 	int i;
+ 	if (num){
+ 		_printf_("   Hook: \n");
+ 		_printf_("      num=" << this->num << "\n");
+ 		_printf_("      ids: ");
+-		for (i=0;i<this->num;i++) _printf_(this->ids[i] << " ");
++		for(i=0;i<this->num;i++) _printf_(this->ids[i] << " ");
+ 		_printf_("\n");
+ 		_printf_("      offsets: ");
+ 		for (i=0;i<this->num;i++) _printf_(this->offsets[i] << " ");
+Index: ../trunk-jpl/src/c/classes/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15439)
+@@ -31,21 +31,6 @@
+ /*}}}*/
+ 
+ /*Numerics*/
+-/*FUNCTION Nodes::Configure{{{*/
+-void Nodes::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+-
+-	vector<Object*>::iterator object;
+-	Node* node=NULL;
+-
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		node=dynamic_cast<Node*>(*object);
+-		node->Configure(nodes,vertices);
+-
+-	}
+-
+-}
+-/*}}}*/
+ /*FUNCTION Nodes::DistributeDofs{{{*/
+ void  Nodes::DistributeDofs(int analysis_type,int setenum){
+ 
+@@ -339,17 +324,3 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Nodes::SetCurrentConfiguration{{{*/
+-void Nodes::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+-
+-	vector<Object*>::iterator object;
+-	Node* node=NULL;
+-
+-	for (object=objects.begin() ; object < objects.end(); object++ ){
+-
+-		node=dynamic_cast<Node*>(*object);
+-		node->SetCurrentConfiguration(nodes,vertices);
+-
+-	}
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15438)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15439)
+@@ -19,7 +19,6 @@
+ Node::Node(){
+ 	this->approximation=0;
+ 	this->inputs=NULL;
+-	this->hvertex=NULL;
+ }
+ /*}}}*/
+ /*FUNCTION Node::Node(int node_id,int node_sid,int vertex_id,int io_index, IoModel* iomodel,int analysis_type) {{{*/
+@@ -42,9 +41,6 @@
+ 	DistributeNumDofs(&this->indexing,analysis_type,iomodel->Data(FlowequationVertexEquationEnum)+io_index); //number of dofs per node
+ 	gsize=this->indexing.gsize;
+ 
+-	/*Hooks*/
+-	this->hvertex=new Hook(&vertex_id,1); //node id is the same as the vertex id, continuous galerkin!
+-
+ 	if (analysis_type==DiagnosticHorizAnalysisEnum)
+ 	 this->approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index]);
+ 	else
+@@ -135,7 +131,6 @@
+ /*FUNCTION Node::~Node(){{{*/
+ Node::~Node(){
+ 	delete inputs;
+-	delete hvertex;
+ 	return;
+ }
+ /*}}}*/
+@@ -149,7 +144,6 @@
+ 	_printf_("   sid: " << sid << "\n");
+ 	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+ 	indexing.Echo();
+-	_printf_("   hvertex:     not displayed\n");
+ 	_printf_("   inputs:      " << inputs << "\n");
+ 
+ }
+@@ -162,8 +156,6 @@
+ 	_printf_("   sid: " << sid << "\n");
+ 	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+ 	indexing.DeepEcho();
+-	_printf_("Vertex:\n");
+-	hvertex->DeepEcho();
+ 	_printf_("   inputs\n");
+ 
+ }
+@@ -180,18 +172,6 @@
+ /*}}}*/
+ 
+ /*Node management:*/
+-/*FUNCTION Node::Configure {{{*/
+-void  Node::Configure(DataSet* nodesin,Vertices* verticesin){
+-
+-	/*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 
+-	 * datasets, using internal ids and off_sets hidden in hooks: */
+-	hvertex->configure(verticesin);
+-
+-}/*}}}*/
+-/*FUNCTION Node::SetCurrentConfiguration {{{*/
+-void  Node::SetCurrentConfiguration(DataSet* nodesin,Vertices* verticesin){
+-
+-}/*}}}*/
+ /*FUNCTION Node::GetDof {{{*/
+ int   Node::GetDof(int dofindex,int setenum){
+ 
+@@ -516,14 +496,6 @@
+ 	return approximation;
+ }
+ /*}}}*/
+-/*FUNCTION Node::GetConnectivity {{{*/
+-int Node::GetConnectivity(){
+-
+-	Vertex*  vertex=NULL;
+-	vertex=(Vertex*)hvertex->delivers();
+-	return vertex->connectivity;
+-}
+-/*}}}*/
+ /*FUNCTION Node::GetNumberOfDofs{{{*/
+ int   Node::GetNumberOfDofs(int approximation_enum,int setenum){
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15439-15440.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15439-15440.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15439-15440.diff	(revision 16134)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15439)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15440)
+@@ -119,7 +119,8 @@
+ AM_CXXFLAGS +=  -D_HAVE_MATLAB_MODULES_  -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread 
+ 
+ if SHAREDLIBS
+-deps += ../../c/libISSMModules.la ../../c/libISSMCore.la ./libISSMApi.la ./libISSMMatlab.a
++deps += ./libISSMMatlab.la ../../c/libISSMModules.la ../../c/libISSMCore.la ./libISSMApi.la
++
+ else
+ deps += ./libISSMMatlab.a ../../c/libISSMModules.a ../../c/libISSMCore.a ./libISSMApi.a
+ if ADOLC
+@@ -134,11 +135,11 @@
+ AM_CXXFLAGS += $(CXXOPTFLAGS) 
+ #}}}
+ # Module sources and dependencies {{{
+-libISSMMatlab_la_LIBADD = $(MPILIB) $(PETSCLIB) $(GSLLIB) $(MATHLIB) $(MEXLIB) ./../../c/libISSMCore.la
+-libISSMMatlab_la_LDFLAGS = -module
++libISSMMatlab_la_LIBADD = ./../../c/libISSMCore.la ./../../c/libISSMModules.la $(MPILIB) $(PETSCLIB) $(GSLLIB) $(MATHLIB) $(MEXLIB) 
++libISSMMatlab_la_LDFLAGS = -module -export-dynamic
+ 
+ libISSMApi_la_LIBADD = $(MPILIB) $(PETSCLIB) $(GSLLIB) $(MATHLIB) $(MEXLIB)
+-libISSMApi_la_LDFLAGS = -module
++libISSMApi_la_LDFLAGS = -module -export-dynamic
+ 
+ AverageFilter_la_SOURCES = ../AverageFilter/AverageFilter.cpp\
+ 									../AverageFilter/AverageFilter.h
Index: /issm/oecreview/Archive/15392-16133/ISSM-15440-15441.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15440-15441.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15440-15441.diff	(revision 16134)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15440)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15441)
+@@ -120,12 +120,15 @@
+ /*FUNCTION Tria::SetwiseNodeConnectivity{{{*/
+ void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
++	/*Intermediaries*/
++	const int numnodes = this->GetNumberOfNodes();
++
+ 	/*Output */
+ 	int d_nz = 0;
+ 	int o_nz = 0;
+ 
+ 	/*Loop over all nodes*/
+-	for(int i=0;i<3;i++){
++	for(int i=0;i<numnodes;i++){
+ 
+ 		if(!flags[this->nodes[i]->Sid()]){
+ 
+@@ -890,8 +893,9 @@
+ 
+ 	_assert_(sidlist);
+ 	_assert_(nodes);
++	int numnodes = this->GetNumberOfNodes();
+ 
+-	for(int i=0;i<NUMVERTICES;i++){
++	for(int i=0;i<numnodes;i++){
+ 		sidlist[i]=nodes[i]->Sid();
+ 	}
+ }
+@@ -2818,7 +2822,7 @@
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -2906,7 +2910,7 @@
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -2967,7 +2971,7 @@
+ 	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element vector and vectors*/
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,MacAyealApproximationEnum);
+ 	GaussTria*     gauss  = new GaussTria(2);
+ 	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+@@ -2992,14 +2996,14 @@
+ 
+ 		/*Build load vector: */
+ 		for (i=0;i<numnodes;i++){
+-			for (j=0;j<NDOF2;j++){
++			for(j=0;j<NDOF2;j++){
+ 				pe->values[i*NDOF2+j]+=-driving_stress_baseline*slope[j]*Jdet*gauss->weight*basis[i];
+ 			}
+ 		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYEnum);
++	TransformLoadVectorCoord(pe,nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(basis);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15440)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15441)
+@@ -1010,8 +1010,9 @@
+ 
+ 	_assert_(sidlist);
+ 	_assert_(nodes);
++	int numnodes = this->GetNumberOfNodes();
+ 
+-	for(int i=0;i<NUMVERTICES;i++){
++	for(int i=0;i<numnodes;i++){
+ 		sidlist[i]=nodes[i]->Sid();
+ 	}
+ }
+@@ -2629,12 +2630,15 @@
+ /*FUNCTION Penta::SetwiseNodeConnectivity{{{*/
+ void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
++	/*Intermediaries*/
++	const int numnodes = this->GetNumberOfNodes();
++
+ 	/*Output */
+ 	int d_nz = 0;
+ 	int o_nz = 0;
+ 
+ 	/*Loop over all nodes*/
+-	for(int i=0;i<6;i++){
++	for(int i=0;i<numnodes;i++){
+ 
+ 		if(!flags[this->nodes[i]->Sid()]){
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15441-15442.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15441-15442.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15441-15442.diff	(revision 16134)
@@ -0,0 +1,2455 @@
+Index: ../trunk-jpl/src/c/analyses/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/analyses/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/analyses/CMakeLists.txt	(revision 15442)
+@@ -1,60 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/solutions)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/solutions/ad_core.cpp
+-   $ENV{ISSM_DIR}/src/c/solutions/AnalysisConfiguration.cpp
+-             $ENV{ISSM_DIR}/src/c/solutions/convergence.cpp
+-$ENV{ISSM_DIR}/src/c/solutions/CorePointerFromSolutionEnum.cpp
+-     $ENV{ISSM_DIR}/src/c/solutions/EnvironmentFinalize.cpp
+-         $ENV{ISSM_DIR}/src/c/solutions/EnvironmentInit.cpp
+-        $ENV{ISSM_DIR}/src/c/solutions/ProcessArguments.cpp
+- $ENV{ISSM_DIR}/src/c/solutions/ResetBoundaryConditions.cpp
+-$ENV{ISSM_DIR}/src/c/solutions/WrapperCorePointerFromSolutionEnum.cpp PARENT_SCOPE)
+-# }}}
+-# DAKOTA_SOURCES {{{
+-set(DAKOTA_SOURCES $ENV{ISSM_DIR}/src/c/solutions/dakota_core.cpp
+-               $ENV{ISSM_DIR}/src/c/solutions/DakotaSpawnCore.cpp PARENT_SCOPE)
+-# }}}
+-# TRANSIENT_SOURCES {{{
+-set(TRANSIENT_SOURCES $ENV{ISSM_DIR}/src/c/solutions/transient_core.cpp PARENT_SCOPE)
+-# }}}
+-# STEADYSTATE_SOURCES {{{
+-set(STEADYSTATE_SOURCES $ENV{ISSM_DIR}/src/c/solutions/steadystate_core.cpp PARENT_SCOPE)
+-# }}}
+-# PROGNOSTIC_SOURCES {{{
+-set(PROGNOSTIC_SOURCES $ENV{ISSM_DIR}/src/c/solutions/prognostic_core.cpp PARENT_SCOPE)
+-# }}}
+-# THERMAL_SOURCES {{{
+-set(THERMAL_SOURCES $ENV{ISSM_DIR}/src/c/solutions/enthalpy_core.cpp
+-                     $ENV{ISSM_DIR}/src/c/solutions/thermal_core.cpp PARENT_SCOPE)
+-# }}}
+-# HYDROLOGY_SOURCES {{{
+-set(HYDROLOGY_SOURCES $ENV{ISSM_DIR}/src/c/solutions/hydrology_core.cpp
+-                 $ENV{ISSM_DIR}/src/c/solutions/hydrology_core_step.cpp PARENT_SCOPE)
+-# }}}
+-# DIAGNOSTIC_SOURCES {{{
+-set(DIAGNOSTIC_SOURCES $ENV{ISSM_DIR}/src/c/solutions/diagnostic_core.cpp PARENT_SCOPE)
+-# }}}
+-# BALANCED_SOURCES {{{
+-set(BALANCED_SOURCES $ENV{ISSM_DIR}/src/c/solutions/balancethickness_core.cpp
+-                                $ENV{ISSM_DIR}/src/c/solutions/dummy_core.cpp PARENT_SCOPE)
+-# }}}
+-# SLOPE_SOURCES {{{
+-set(SLOPE_SOURCES $ENV{ISSM_DIR}/src/c/solutions/bedslope_core.cpp
+-              $ENV{ISSM_DIR}/src/c/solutions/surfaceslope_core.cpp PARENT_SCOPE)
+-# }}}
+-# LIBISSM_LA_SOURCES {{{
+-set(LIBISSM_LA_SOURCES $ENV{ISSM_DIR}/src/c/solutions/issm.cpp PARENT_SCOPE)
+-# }}}
+-# ISSM_SOURCES {{{
+-set(ISSM_SOURCES $ENV{ISSM_DIR}/src/c/solutions/issm.cpp PARENT_SCOPE)
+-# }}}
+-# KRIGING_SOURCES {{{
+-set(KRIGING_SOURCES $ENV{ISSM_DIR}/src/c/solutions/kriging.cpp PARENT_SCOPE)
+-# }}}
+-# ISSMROSE_EXE_SOURCES {{{
+-set(ISSMROSE_EXE_SOURCES $ENV{ISSM_DIR}/src/c/main/issm.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/kml/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/kml/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/kml/CMakeLists.txt	(revision 15442)
+@@ -1,34 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/KML)
+-# }}}
+-# KML_SOURCES {{{
+-set(KML_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Attribute.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_ColorStyle.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Comment.cpp
+-                $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Container.cpp
+-                 $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Document.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Feature.cpp
+-                     $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_File.cpp
+-                   $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Folder.cpp
+-                 $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Geometry.cpp
+-            $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_GroundOverlay.cpp
+-                     $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Icon.cpp
+-                $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_LatLonBox.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_LinearRing.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_LineString.cpp
+-                $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_LineStyle.cpp
+-            $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_MultiGeometry.cpp
+-                   $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Object.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Overlay.cpp
+-                $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Placemark.cpp
+-                    $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Point.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Polygon.cpp
+-                $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_PolyStyle.cpp
+-                    $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Style.cpp
+-            $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_StyleSelector.cpp
+-                 $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_SubStyle.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/KML/KML_Unknown.cpp
+-             $ENV{ISSM_DIR}/src/c/classes/objects/KML/KMLFileReadUtils.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/bamg/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/bamg/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/bamg/CMakeLists.txt	(revision 15442)
+@@ -1,31 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/bamg)
+-# }}}
+-# BAMG_SOURCES {{{
+-set(BAMG_SOURCES $ENV{ISSM_DIR}/src/c/classes/bamg/AdjacentTriangle.cpp
+-                         $ENV{ISSM_DIR}/src/c/classes/bamg/BamgGeom.cpp
+-                         $ENV{ISSM_DIR}/src/c/classes/bamg/BamgMesh.cpp
+-                         $ENV{ISSM_DIR}/src/c/classes/bamg/BamgOpts.cpp
+-                     $ENV{ISSM_DIR}/src/c/classes/bamg/BamgQuadtree.cpp
+-                       $ENV{ISSM_DIR}/src/c/classes/bamg/BamgVertex.cpp
+-                      $ENV{ISSM_DIR}/src/c/classes/bamg/CrackedEdge.cpp
+-                            $ENV{ISSM_DIR}/src/c/classes/bamg/Curve.cpp
+-                        $ENV{ISSM_DIR}/src/c/classes/bamg/Direction.cpp
+-                             $ENV{ISSM_DIR}/src/c/classes/bamg/Edge.cpp
+-                      $ENV{ISSM_DIR}/src/c/classes/bamg/EigenMetric.cpp
+-                         $ENV{ISSM_DIR}/src/c/classes/bamg/GeomEdge.cpp
+-                         $ENV{ISSM_DIR}/src/c/classes/bamg/Geometry.cpp
+-                    $ENV{ISSM_DIR}/src/c/classes/bamg/GeomSubDomain.cpp
+-                       $ENV{ISSM_DIR}/src/c/classes/bamg/GeomVertex.cpp
+-      $ENV{ISSM_DIR}/src/c/classes/bamg/ListofIntersectionTriangles.cpp
+-                             $ENV{ISSM_DIR}/src/c/classes/bamg/Mesh.cpp
+-                           $ENV{ISSM_DIR}/src/c/classes/bamg/Metric.cpp
+-                          $ENV{ISSM_DIR}/src/c/classes/bamg/SetOfE4.cpp
+-                        $ENV{ISSM_DIR}/src/c/classes/bamg/SubDomain.cpp
+-                         $ENV{ISSM_DIR}/src/c/classes/bamg/Triangle.cpp
+-                     $ENV{ISSM_DIR}/src/c/classes/bamg/VertexOnEdge.cpp
+-                     $ENV{ISSM_DIR}/src/c/classes/bamg/VertexOnGeom.cpp
+-                   $ENV{ISSM_DIR}/src/c/classes/bamg/VertexOnVertex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/CMakeLists.txt	(revision 15442)
+@@ -1,17 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(Alloc)
+-add_subdirectory(Bamg)
+-add_subdirectory(Elements)
+-add_subdirectory(Exceptions)
+-add_subdirectory(Exp)
+-add_subdirectory(Matrix)
+-add_subdirectory(MemOps)
+-add_subdirectory(Numerics)
+-add_subdirectory(Sorting)
+-add_subdirectory(String)
+-add_subdirectory(Threads)
+-add_subdirectory(TriMesh)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/MemOps/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/MemOps/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/MemOps/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/MemOps)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Exceptions/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Exceptions/CMakeLists.txt	(revision 15442)
+@@ -1,9 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/Exceptions)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/shared/Exceptions/Exceptions.cpp
+-                   $ENV{ISSM_DIR}/src/c/shared/Exceptions/exprintf.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Enum/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Enum/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/EnumDefinitions)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Matrix/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Matrix/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Matrix/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/Matrix)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/shared/Matrix/MatrixUtils.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Numerics/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Numerics/CMakeLists.txt	(revision 15442)
+@@ -1,15 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/Numerics)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/shared/Numerics/cross.cpp
+-                 $ENV{ISSM_DIR}/src/c/shared/Numerics/cubic.cpp
+-               $ENV{ISSM_DIR}/src/c/shared/Numerics/extrema.cpp
+-           $ENV{ISSM_DIR}/src/c/shared/Numerics/GaussPoints.cpp
+-                 $ENV{ISSM_DIR}/src/c/shared/Numerics/isnan.cpp
+-   $ENV{ISSM_DIR}/src/c/shared/Numerics/OptionsFromAnalysis.cpp
+-             $ENV{ISSM_DIR}/src/c/shared/Numerics/Verbosity.cpp
+-$ENV{ISSM_DIR}/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Sorting/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Sorting/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/Sorting)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/shared/Sorting/binary_search.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Bamg/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Bamg/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Bamg/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/Bamg)
+-# }}}
+-# BAMG_SOURCES {{{
+-set(BAMG_SOURCES $ENV{ISSM_DIR}/src/c/shared/Bamg/BigPrimeNumber.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/String/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/String/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/String/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/String)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/shared/String/DescriptorIndex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/io/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/io/CMakeLists.txt	(revision 15442)
+@@ -1,9 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(Disk)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/io)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/io/PrintfFunction.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/io/Disk/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Disk/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/io/Disk/CMakeLists.txt	(revision 15442)
+@@ -1,10 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/io/Disk)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/io/Disk/pfclose.cpp
+-                  $ENV{ISSM_DIR}/src/c/io/Disk/pfopen.cpp
+-           $ENV{ISSM_DIR}/src/c/io/Disk/WriteLockFile.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Threads/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Threads/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Threads/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/Threads)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/TriMesh/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/TriMesh/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/TriMesh)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Elements/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Elements/CMakeLists.txt	(revision 15442)
+@@ -1,23 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/Elements)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/shared/Elements/Arrhenius.cpp
+-$ENV{ISSM_DIR}/src/c/shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp
+-          $ENV{ISSM_DIR}/src/c/shared/Elements/GetGlobalDofList.cpp
+-           $ENV{ISSM_DIR}/src/c/shared/Elements/GetLocalDofList.cpp
+-           $ENV{ISSM_DIR}/src/c/shared/Elements/GetNumberOfDofs.cpp
+-    $ENV{ISSM_DIR}/src/c/shared/Elements/GetVerticesCoordinates.cpp
+-                  $ENV{ISSM_DIR}/src/c/shared/Elements/Paterson.cpp
+-     $ENV{ISSM_DIR}/src/c/shared/Elements/PddSurfaceMassBalance.cpp
+-               $ENV{ISSM_DIR}/src/c/shared/Elements/PrintArrays.cpp PARENT_SCOPE)
+-# }}}
+-# DIAGNOSTIC_SOURCES {{{
+-set(DIAGNOSTIC_SOURCES $ENV{ISSM_DIR}/src/c/shared/Elements/CoordinateSystemTransform.cpp
+-                $ENV{ISSM_DIR}/src/c/shared/Elements/TransformInvStiffnessMatrixCoord.cpp
+-                        $ENV{ISSM_DIR}/src/c/shared/Elements/TransformLoadVectorCoord.cpp
+-                          $ENV{ISSM_DIR}/src/c/shared/Elements/TransformSolutionCoord.cpp
+-                   $ENV{ISSM_DIR}/src/c/shared/Elements/TransformStiffnessMatrixCoord.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/shared/Exp/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/shared/Exp/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/shared/Exp)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/CMakeLists.txt	(revision 15442)
+@@ -1,99 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(AverageFilterx)
+-add_subdirectory(AverageOntoPartitionx)
+-add_subdirectory(BamgConvertMeshx)
+-add_subdirectory(BamgTriangulatex)
+-add_subdirectory(Bamgx)
+-add_subdirectory(Chacox)
+-add_subdirectory(ComputeBasalStressx)
+-add_subdirectory(ComputeStrainRatex)
+-add_subdirectory(ConfigureObjectsx)
+-add_subdirectory(ConstraintsStatex)
+-add_subdirectory(ContourToMeshx)
+-add_subdirectory(ContourToNodesx)
+-add_subdirectory(ControlInputGetGradientx)
+-add_subdirectory(ControlInputScaleGradientx)
+-add_subdirectory(ControlInputSetGradientx)
+-add_subdirectory(CreateNodalConstraintsx)
+-add_subdirectory(Delta18oParameterizationx)
+-add_subdirectory(DragCoefficientAbsGradientx)
+-add_subdirectory(ElementConnectivityx)
+-add_subdirectory(EnumToStringx)
+-add_subdirectory(Exp2Kmlx)
+-add_subdirectory(GetSolutionFromInputsx)
+-add_subdirectory(GetVectorFromControlInputsx)
+-add_subdirectory(GetVectorFromInputsx)
+-add_subdirectory(Gradjx)
+-add_subdirectory(GroundinglineMigrationx)
+-add_subdirectory(HoleFillerx)
+-add_subdirectory(InputArtificialNoisex)
+-add_subdirectory(InputControlUpdatex)
+-add_subdirectory(InputDuplicatex)
+-add_subdirectory(InputScalex)
+-add_subdirectory(InputToResultx)
+-add_subdirectory(InputUpdateFromConstantx)
+-add_subdirectory(InputUpdateFromDakotax)
+-add_subdirectory(InputUpdateFromMatrixDakotax)
+-add_subdirectory(InputUpdateFromSolutionx)
+-add_subdirectory(InputUpdateFromVectorDakotax)
+-add_subdirectory(InputUpdateFromVectorx)
+-add_subdirectory(InterpFromGridToMeshx)
+-add_subdirectory(InterpFromMesh2dx)
+-add_subdirectory(InterpFromMeshToGridx)
+-add_subdirectory(InterpFromMeshToMesh2dx)
+-add_subdirectory(InterpFromMeshToMesh3dx)
+-add_subdirectory(IoModelToConstraintsx)
+-add_subdirectory(Kml2Expx)
+-add_subdirectory(KMLFileReadx)
+-add_subdirectory(KMLMeshWritex)
+-add_subdirectory(KMLOverlayx)
+-add_subdirectory(Krigingx)
+-add_subdirectory(Ll2xyx)
+-add_subdirectory(Mergesolutionfromftogx)
+-add_subdirectory(MeshPartitionx)
+-add_subdirectory(MeshProfileIntersectionx)
+-add_subdirectory(ModelProcessorx)
+-add_subdirectory(NodalValuex)
+-add_subdirectory(NodeConnectivityx)
+-add_subdirectory(NodesDofx)
+-add_subdirectory(Orthx)
+-add_subdirectory(OutputResultsx)
+-add_subdirectory(OutputRiftsx)
+-add_subdirectory(ParsePetscOptionsx)
+-add_subdirectory(PointCloudFindNeighborsx)
+-add_subdirectory(PositiveDegreeDayx)
+-add_subdirectory(PropagateFlagsFromConnectivityx)
+-add_subdirectory(Reduceloadx)
+-add_subdirectory(Reducevectorgtofx)
+-add_subdirectory(Reducevectorgtosx)
+-add_subdirectory(ResetConstraintsx)
+-add_subdirectory(ResetCoordinateSystemx)
+-add_subdirectory(RheologyBbarAbsGradientx)
+-add_subdirectory(Scotchx)
+-add_subdirectory(SetControlInputsFromVectorx)
+-add_subdirectory(Shp2Expx)
+-add_subdirectory(Shp2Kmlx)
+-add_subdirectory(SmbGradientsx)
+-add_subdirectory(Solverx)
+-add_subdirectory(SpcNodesx)
+-add_subdirectory(StringToEnumx)
+-add_subdirectory(SurfaceAbsVelMisfitx)
+-add_subdirectory(SurfaceAreax)
+-add_subdirectory(SurfaceAverageVelMisfitx)
+-add_subdirectory(SurfaceLogVelMisfitx)
+-add_subdirectory(SurfaceLogVxVyMisfitx)
+-add_subdirectory(SurfaceRelVelMisfitx)
+-add_subdirectory(ThicknessAbsMisfitx)
+-add_subdirectory(ThicknessAcrossGradientx)
+-add_subdirectory(ThicknessAlongGradientx)
+-add_subdirectory(TriaSearchx)
+-add_subdirectory(TriMeshProcessRiftsx)
+-add_subdirectory(TriMeshx)
+-add_subdirectory(UpdateDynamicConstraintsx)
+-add_subdirectory(VecMergex)
+-add_subdirectory(VerticesDofx)
+-add_subdirectory(Xy2llx)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InterpFromMesh2dx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Shp2Expx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Expx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Shp2Expx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Shp2Expx)
+-# }}}
+-# KML_SOURCES {{{
+-set(KML_SOURCES $ENV{ISSM_DIR}/src/c/modules/Shp2Expx/Shp2Expx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ControlInputSetGradientx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputSetGradientx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ControlInputSetGradientx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ControlInputSetGradientx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromMatrixDakotax)
+-# }}}
+-# DAKOTA_SOURCES {{{
+-set(DAKOTA_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/EdgeDetectionx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/EdgeDetectionx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/EdgeDetectionx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/EdgeDetectionx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/AverageOntoPartitionx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageOntoPartitionx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/AverageOntoPartitionx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/AverageOntoPartitionx)
+-# }}}
+-# DAKOTA_SOURCES {{{
+-set(DAKOTA_SOURCES $ENV{ISSM_DIR}/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InterpFromMeshToMesh2dx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtofx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtofx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtofx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Reducevectorgtofx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InterpFromMeshToGridx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/GroundinglineMigrationx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ParseToolkitsOptionsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SmbGradientsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmbGradientsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SmbGradientsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SmbGradientsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/SmbGradientsx/SmbGradientsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/BamgConvertMeshx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/BamgConvertMeshx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/BamgConvertMeshx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/BamgConvertMeshx)
+-# }}}
+-# BAMG_SOURCES {{{
+-set(BAMG_SOURCES $ENV{ISSM_DIR}/src/c/modules/BamgConvertMeshx/BamgConvertMeshx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputDuplicatex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputDuplicatex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputDuplicatex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputDuplicatex)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputDuplicatex/InputDuplicatex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/GetVectorFromControlInputsx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/GetSolutionFromInputsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/MeshProfileIntersectionx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/GiaDeflectionCorex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/GiaDeflectionCorex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/GiaDeflectionCorex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SurfaceAreax)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SurfaceAverageVelMisfitx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputScalex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputScalex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputScalex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputScalex)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputScalex/InputScalex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Reduceloadx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reduceloadx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Reduceloadx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Reduceloadx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/Reduceloadx/Reduceloadx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/OutputRiftsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputRiftsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/OutputRiftsx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/OutputRiftsx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ComputeStrainRatex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeStrainRatex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ComputeStrainRatex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ComputeStrainRatex)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromDakotax)
+-# }}}
+-# DAKOTA_SOURCES {{{
+-set(DAKOTA_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/CMakeLists.txt	(revision 15442)
+@@ -1,11 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ResetConstraintsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp PARENT_SCOPE)
+-# }}}
+-# THERMAL_SOURCES {{{
+-set(THERMAL_SOURCES $ENV{ISSM_DIR}/src/c/modules/ResetConstraintsx/ThermalConstraintsReset.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/PositiveDegreeDayx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/PositiveDegreeDayx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/PositiveDegreeDayx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/PositiveDegreeDayx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Chacox/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Chacox/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Chacox/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Chacox)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SpcNodesx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SpcNodesx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SpcNodesx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SpcNodesx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/SpcNodesx/SpcNodesx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/AverageFilterx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageFilterx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/AverageFilterx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/AverageFilterx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SurfaceAreax)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/SurfaceAreax/SurfaceAreax.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Exp2Kmlx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Exp2Kmlx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Exp2Kmlx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Exp2Kmlx)
+-# }}}
+-# KML_SOURCES {{{
+-set(KML_SOURCES $ENV{ISSM_DIR}/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Kml2Expx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Kml2Expx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Kml2Expx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Kml2Expx)
+-# }}}
+-# KML_SOURCES {{{
+-set(KML_SOURCES $ENV{ISSM_DIR}/src/c/modules/Kml2Expx/Kml2Expx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/OutputResultsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/OutputResultsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/OutputResultsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/OutputResultsx/OutputResultsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/PropagateFlagsFromConnectivityx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Scotchx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Scotchx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Scotchx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Scotchx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ComputeBasalStressx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeBasalStressx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ComputeBasalStressx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ComputeBasalStressx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromSolutionx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/HoleFillerx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/HoleFillerx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/HoleFillerx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/HoleFillerx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ContourToNodesx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToNodesx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ContourToNodesx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ContourToNodesx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/KMLOverlayx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLOverlayx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/KMLOverlayx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/KMLOverlayx)
+-# }}}
+-# KML_SOURCES {{{
+-set(KML_SOURCES $ENV{ISSM_DIR}/src/c/modules/KMLOverlayx/KMLOverlayx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/MeshPartitionx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshPartitionx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/MeshPartitionx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/MeshPartitionx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtosx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtosx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtosx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Reducevectorgtosx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ElementConnectivityx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementConnectivityx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ElementConnectivityx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ElementConnectivityx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/GetVectorFromInputsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ThicknessAlongGradientx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Krigingx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Krigingx/CMakeLists.txt	(revision 15442)
+@@ -1,11 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Krigingx)
+-# }}}
+-# KRIGING_SOURCES {{{
+-set(KRIGING_SOURCES $ENV{ISSM_DIR}/src/c/modules/Krigingx/Krigingx.cpp PARENT_SCOPE)
+-# }}}
+-# PKRIGING_SOURCES {{{
+-set(PKRIGING_SOURCES $ENV{ISSM_DIR}/src/c/modules/Krigingx/pKrigingx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/NodalValuex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/NodalValuex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/NodalValuex)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/NodalValuex/NodalValuex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ConfigureObjectsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConfigureObjectsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ConfigureObjectsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ConfigureObjectsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ThicknessAbsMisfitx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorDakotax)
+-# }}}
+-# DAKOTA_SOURCES {{{
+-set(DAKOTA_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CMakeLists.txt	(revision 15442)
+@@ -1,33 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(Autodiff)
+-add_subdirectory(Balancethickness)
+-add_subdirectory(BedSlope)
+-add_subdirectory(Control)
+-add_subdirectory(Dakota)
+-add_subdirectory(DiagnosticHoriz)
+-add_subdirectory(DiagnosticHutter)
+-add_subdirectory(DiagnosticVert)
+-add_subdirectory(Enthalpy)
+-add_subdirectory(Hydrology)
+-add_subdirectory(Melting)
+-add_subdirectory(Prognostic)
+-add_subdirectory(SurfaceSlope)
+-add_subdirectory(Thermal)
+-add_subdirectory(Transient)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+-$ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+-$ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
+-               $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/CreateParameters.cpp
+-$ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
+-              $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+-$ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+-                $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+-              $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+-                   $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/SortDataSets.cpp
+-                 $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/UpdateCounters.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# DIAGNOSTIC_SOURCES {{{
+-set(DIAGNOSTIC_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
+-                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
+-                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# THERMAL_SOURCES {{{
+-set(THERMAL_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+-                       $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# DIAGNOSTIC_SOURCES {{{
+-set(DIAGNOSTIC_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
+-                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
+-                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# PROGNOSTIC_SOURCES {{{
+-set(PROGNOSTIC_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
+-                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+-                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# HYDROLOGY_SOURCES {{{
+-set(HYDROLOGY_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp
+-                            $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp
+-                            $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+-                         $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# SLOPE_SOURCES {{{
+-set(SLOPE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
+-                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp
+-                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+-                     $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# DIAGNOSTIC_SOURCES {{{
+-set(DIAGNOSTIC_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+-                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+-                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# BALANCED_SOURCES {{{
+-set(BALANCED_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
+-                           $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+-                           $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+-                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# HYDROLOGY_SOURCES {{{
+-set(HYDROLOGY_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp
+-                         $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp
+-                         $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
+-                         $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# TRANSIENT_SOURCES {{{
+-set(TRANSIENT_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CMakeLists.txt	(revision 15442)
+@@ -1,2 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# HYDROLOGY_SOURCES {{{
+-set(HYDROLOGY_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp
+-                         $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+-                         $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+-                         $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# SLOPE_SOURCES {{{
+-set(SLOPE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
+-                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
+-                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+-                     $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# THERMAL_SOURCES {{{
+-set(THERMAL_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+-                       $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# THERMAL_SOURCES {{{
+-set(THERMAL_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+-                       $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# SLOPE_SOURCES {{{
+-set(SLOPE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp
+-                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp
+-                        $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
+-                     $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# DAKOTA_SOURCES {{{
+-set(DAKOTA_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputToResultx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputToResultx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputToResultx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputToResultx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputToResultx/InputToResultx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/NodesDofx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodesDofx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/NodesDofx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/NodesDofx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/NodesDofx/NodesDofx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SurfaceLogVxVyMisfitx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputControlUpdatex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputControlUpdatex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputControlUpdatex/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputControlUpdatex)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SetControlInputsFromVectorx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/BamgTriangulatex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/BamgTriangulatex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/BamgTriangulatex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/BamgTriangulatex)
+-# }}}
+-# BAMG_SOURCES {{{
+-set(BAMG_SOURCES $ENV{ISSM_DIR}/src/c/modules/BamgTriangulatex/BamgTriangulatex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/CMakeLists.txt	(revision 15442)
+@@ -1,15 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp PARENT_SCOPE)
+-# }}}
+-# THERMAL_SOURCES {{{
+-set(THERMAL_SOURCES $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp
+-                           $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp PARENT_SCOPE)
+-# }}}
+-# RIFTS_SOURCES {{{
+-set(RIFTS_SOURCES $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InterpFromMeshToMesh3dx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Solverx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Solverx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Solverx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/Solverx/Solverx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InterpFromGridToMeshx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Orthx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Orthx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Orthx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Orthx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SurfaceLogVelMisfitx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/VerticesDofx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/VerticesDofx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/VerticesDofx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/VerticesDofx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/VerticesDofx/VerticesDofx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SurfaceRelVelMisfitx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/KMLFileReadx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLFileReadx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/KMLFileReadx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/KMLFileReadx)
+-# }}}
+-# KML_SOURCES {{{
+-set(KML_SOURCES $ENV{ISSM_DIR}/src/c/modules/KMLFileReadx/KMLFileReadx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Delta18oParameterizationx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Delta18oParameterizationx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Delta18oParameterizationx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Delta18oParameterizationx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/NodeConnectivityx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodeConnectivityx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/NodeConnectivityx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/NodeConnectivityx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/TriaSearchx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriaSearchx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/TriaSearchx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/TriaSearchx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Gradjx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Gradjx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Gradjx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Gradjx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/VecMergex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/VecMergex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/VecMergex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/VecMergex)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/VecMergex/VecMergex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ResetCoordinateSystemx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Mergesolutionfromftogx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromConstantx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/SurfaceAbsVelMisfitx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Bamgx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Bamgx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Bamgx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Bamgx)
+-# }}}
+-# BAMG_SOURCES {{{
+-set(BAMG_SOURCES $ENV{ISSM_DIR}/src/c/modules/Bamgx/Bamgx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/VertexCoordinatesx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/VertexCoordinatesx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/VertexCoordinatesx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/VerticesDofx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/VerticesDofx/VerticesDofx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/CreateNodalConstraintsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ContourToMeshx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToMeshx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ContourToMeshx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ContourToMeshx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/KMLMeshWritex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLMeshWritex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/KMLMeshWritex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/KMLMeshWritex)
+-# }}}
+-# KML_SOURCES {{{
+-set(KML_SOURCES $ENV{ISSM_DIR}/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/TriMeshx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/TriMeshx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/TriMeshx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ControlInputGetGradientx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputGetGradientx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ControlInputGetGradientx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ControlInputGetGradientx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/UpdateDynamicConstraintsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/DragCoefficientAbsGradientx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/Shp2Kmlx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Kmlx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/Shp2Kmlx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/Shp2Kmlx)
+-# }}}
+-# KML_SOURCES {{{
+-set(KML_SOURCES $ENV{ISSM_DIR}/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/PointCloudFindNeighborsx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/TriMeshProcessRiftsx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/IoModelToConstraintsx)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/RheologyBbarAbsGradientx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ThicknessAcrossGradientx)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/InputArtificialNoisex/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputArtificialNoisex/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/InputArtificialNoisex/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/InputArtificialNoisex)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/modules/ControlInputScaleGradientx/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputScaleGradientx/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/modules/ControlInputScaleGradientx/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/modules/ControlInputScaleGradientx)
+-# }}}
+Index: ../trunk-jpl/src/c/solutionsequences/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/solutionsequences/CMakeLists.txt	(revision 15442)
+@@ -1,16 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/solutionsequences)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/solutionsequences/solutionsequence_linear.cpp
+-                 $ENV{ISSM_DIR}/src/c/solutionsequences/solutionsequence_newton.cpp
+-              $ENV{ISSM_DIR}/src/c/solutionsequences/solutionsequence_nonlinear.cpp PARENT_SCOPE)
+-# }}}
+-# THERMAL_SOURCES {{{
+-set(THERMAL_SOURCES $ENV{ISSM_DIR}/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp PARENT_SCOPE)
+-# }}}
+-# DIAGNOSTIC_SOURCES {{{
+-set(DIAGNOSTIC_SOURCES $ENV{ISSM_DIR}/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/CMakeLists.txt	(revision 15442)
+@@ -1,12 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(issm)
+-add_subdirectory(metis)
+-add_subdirectory(mpi)
+-add_subdirectory(petsc)
+-add_subdirectory(plapack)
+-add_subdirectory(scalapack)
+-add_subdirectory(triangle)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/metis/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/metis/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/metis/CMakeLists.txt	(revision 15442)
+@@ -1,6 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(patches)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/metis)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/metis/patches/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/metis/patches/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/metis/patches/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/metis/patches)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/scalapack/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/scalapack/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/scalapack/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/scalapack)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/mpi/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/mpi/CMakeLists.txt	(revision 15442)
+@@ -1,6 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(patches)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/mpi)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/mpi/patches)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/triangle/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/triangle/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/triangle/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/triangle)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/issm/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/issm/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/issm)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/plapack/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/plapack/CMakeLists.txt	(revision 15442)
+@@ -1,6 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(patches)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/plapack)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/plapack/patches)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/petsc/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/petsc/CMakeLists.txt	(revision 15442)
+@@ -1,7 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(objects)
+-add_subdirectory(patches)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/petsc)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/petsc/patches)
+-# }}}
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/toolkits/petsc/objects)
+-# }}}
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 15442)
+@@ -1,15 +1,234 @@
+-# Subdirectories {{{
+-add_subdirectory(classes)
+-add_subdirectory(Container)
+-add_subdirectory(EnumDefinitions)
+-add_subdirectory(include)
+-add_subdirectory(io)
+-add_subdirectory(modules)
+-add_subdirectory(shared)
+-add_subdirectory(solutions)
+-add_subdirectory(solvers)
+-add_subdirectory(toolkits)
+-# }}}
+ # Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c)
++include_directories(AFTER $ENV{ISSM_DIR}/src/c \
++                          $ENV{ISSM_DIR}/src/c/main \
++                          $ENV{ISSM_DIR}/src/c/datastructure \
++                          $ENV{ISSM_DIR}/src/c/classes \
++                          $ENV{ISSM_DIR}/src/c/classes/Options \
++                          $ENV{ISSM_DIR}/src/c/classes/ElementResults \
++                          $ENV{ISSM_DIR}/src/c/classes/ExternalResults \
++                          $ENV{ISSM_DIR}/src/c/classes/Elements \
++                          $ENV{ISSM_DIR}/src/c/classes/Inputs \
++                          $ENV{ISSM_DIR}/src/c/classes/Materials \
++                          $ENV{ISSM_DIR}/src/c/classes/Constraints \
++                          $ENV{ISSM_DIR}/src/c/classes/Loads \
++                          $ENV{ISSM_DIR}/src/c/classes/matrix \
++                          $ENV{ISSM_DIR}/src/c/classes/Params \
++                          $ENV{ISSM_DIR}/src/c/classes/Params \
++                          $ENV{ISSM_DIR}/src/c/shared \
++                          $ENV{ISSM_DIR}/src/c/shared/MemOps \
++                          $ENV{ISSM_DIR}/src/c/shared/Matrix \
++                          $ENV{ISSM_DIR}/src/c/shared/io \
++                          $ENV{ISSM_DIR}/src/c/shared/io/Disk \
++                          $ENV{ISSM_DIR}/src/c/shared/io/Print \
++                          $ENV{ISSM_DIR}/src/c/shared/io/Comm \
++                          $ENV{ISSM_DIR}/src/c/shared/LatLong \
++                          $ENV{ISSM_DIR}/src/c/shared/Enum \
++                          $ENV{ISSM_DIR}/src/c/shared/Numerics \
++                          $ENV{ISSM_DIR}/src/c/shared/Exceptions \
++                          $ENV{ISSM_DIR}/src/c/shared/Sorting \
++                          $ENV{ISSM_DIR}/src/c/shared/Elements \
++                          $ENV{ISSM_DIR}/src/c/shared/String \
++                          $ENV{ISSM_DIR}/src/c/toolkits \
++                          $ENV{ISSM_DIR}/src/c/toolkits/metis \
++                          $ENV{ISSM_DIR}/src/c/toolkits/issm \
++                          $ENV{ISSM_DIR}/src/c/toolkits/adolc \
++                          $ENV{ISSM_DIR}/src/c/toolkits/triangle \
++                          $ENV{ISSM_DIR}/src/c/toolkits/objects \
++                          $ENV{ISSM_DIR}/src/c/modules \
++                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx \
++                          $ENV{ISSM_DIR}/src/c/modules/ParseToolkitsOptionsx \
++                          $ENV{ISSM_DIR}/src/c/modules/NodesDofx \
++                          $ENV{ISSM_DIR}/src/c/modules/NodalValuex \
++                          $ENV{ISSM_DIR}/src/c/modules/VerticesDofx \
++                          $ENV{ISSM_DIR}/src/c/modules/VertexCoordinatesx \
++                          $ENV{ISSM_DIR}/src/c/modules/OutputResultsx \
++                          $ENV{ISSM_DIR}/src/c/modules/InputDuplicatex \
++                          $ENV{ISSM_DIR}/src/c/modules/InputScalex \
++                          $ENV{ISSM_DIR}/src/c/modules/SurfaceAreax \
++                          $ENV{ISSM_DIR}/src/c/modules/CreateNodalConstraintsx \
++                          $ENV{ISSM_DIR}/src/c/modules/UpdateDynamicConstraintsx \
++                          $ENV{ISSM_DIR}/src/c/modules/IoModelToConstraintsx \
++                          $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromConstantx \
++                          $ENV{ISSM_DIR}/src/c/modules/GetSolutionFromInputsx \
++                          $ENV{ISSM_DIR}/src/c/modules/GetVectorFromInputsx \
++                          $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorx \
++                          $ENV{ISSM_DIR}/src/c/modules/InputArtificialNoisex \
++                          $ENV{ISSM_DIR}/src/c/modules/ConfigureObjectsx \
++                          $ENV{ISSM_DIR}/src/c/modules/ComputeBasalStressx \
++                          $ENV{ISSM_DIR}/src/c/modules/ComputeStrainRatex \
++                          $ENV{ISSM_DIR}/src/c/modules/SpcNodesx \
++                          $ENV{ISSM_DIR}/src/c/modules/PositiveDegreeDayx \
++                          $ENV{ISSM_DIR}/src/c/modules/Delta18oParameterizationx \
++                          $ENV{ISSM_DIR}/src/c/modules/SmbGradientsx \
++                          $ENV{ISSM_DIR}/src/c/modules/MeshPartitionx \
++                          $ENV{ISSM_DIR}/src/c/modules/Reducevectorgtofx \
++                          $ENV{ISSM_DIR}/src/c/modules/Reduceloadx \
++                          $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex \
++                          $ENV{ISSM_DIR}/src/c/modules/ResetConstraintsx \
++                          $ENV{ISSM_DIR}/src/c/modules/ResetCoordinateSystemx \
++                          $ENV{ISSM_DIR}/src/c/modules/Solverx \
++                          $ENV{ISSM_DIR}/src/c/modules/VecMergex \
++                          $ENV{ISSM_DIR}/src/c/modules/Mergesolutionfromftogx \
++                          $ENV{ISSM_DIR}/src/c/modules/InputToResultx \
++                          $ENV{ISSM_DIR}/src/c/analyses \
++                          $ENV{ISSM_DIR}/src/c/solutionsequences \
++                          $ENV{ISSM_DIR}/src/c/solutionsequences \
+ # }}}
++# Core Sources{{{
++set(core_sources   	./datastructures/DataSet.cpp\
++					./classes/gauss/GaussTria.cpp\
++					./classes/FemModel.cpp\
++					./classes/Loads/Friction.cpp\
++					./classes/Inputs/TransientInput.cpp\
++					./classes/Constraints/SpcTransient.cpp\
++					./classes/IndependentObject.cpp\
++					./classes/DependentObject.cpp\
++					./classes/DofIndexing.cpp\
++					./classes/IoModel.cpp\
++					./classes/Contours.cpp\
++					./classes/Nodes.cpp\
++					./classes/Vertices.cpp\
++					./classes/Node.cpp\
++					./classes/Vertex.cpp\
++					./classes/Hook.cpp\
++					./classes/Patch.cpp\
++					./classes/ElementResults/DoubleElementResult.cpp\
++					./classes/ElementResults/TriaP1ElementResult.cpp\
++					./classes/ElementResults/BoolElementResult.cpp\
++					./classes/ExternalResults/Results.cpp\
++					./classes/Elements/Elements.cpp\
++					./classes/Elements/ElementHook.cpp\
++					./classes/Elements/Tria.cpp\
++					./classes/Elements/TriaRef.cpp\
++					./classes/Inputs/Inputs.cpp\
++					./classes/Inputs/TriaInput.cpp\
++					./classes/Inputs/BoolInput.cpp\
++					./classes/Inputs/IntInput.cpp\
++					./classes/Inputs/DoubleInput.cpp\
++					./classes/Inputs/DatasetInput.cpp\
++					./classes/Materials/Materials.cpp\
++					./classes/Materials/Matice.cpp\
++					./classes/Materials/Matdamageice.cpp\
++					./classes/Materials/Matpar.cpp\
++					./classes/Constraints/Constraints.cpp\
++					./classes/Constraints/SpcStatic.cpp\
++					./classes/Constraints/SpcDynamic.cpp\
++					./classes/Loads/Loads.cpp\
++					./classes/Loads/Penpair.cpp\
++					./classes/Loads/Pengrid.cpp\
++					./classes/Loads/Icefront.cpp\
++					./classes/Loads/Numericalflux.cpp\
++					./classes/matrix/ElementMatrix.cpp\
++					./classes/matrix/ElementVector.cpp\
++					./classes/Params/Parameters.cpp\
++					./classes/Params/BoolParam.cpp\
++					./classes/Params/IntParam.cpp\
++					./classes/Params/IntVecParam.cpp\
++					./classes/Params/IntMatParam.cpp\
++					./classes/Params/DoubleParam.cpp\
++					./classes/Params/FileParam.cpp\
++					./classes/Params/StringArrayParam.cpp\
++					./classes/Params/DoubleMatParam.cpp\
++					./classes/Params/DoubleTransientMatParam.cpp\
++					./classes/Params/DoubleMatArrayParam.cpp\
++					./classes/Params/DoubleVecParam.cpp\
++					./classes/Params/StringParam.cpp\
++					./classes/Params/MatrixParam.cpp\
++					./classes/Params/VectorParam.cpp\
++					./classes/Params/TransientParam.cpp\
++					./classes/Params/DataSetParam.cpp\
++					./classes/Profiler.cpp\
++					./shared/Matrix/MatrixUtils.cpp\
++					./shared/io/Disk/pfopen.cpp\
++					./shared/io/Disk/pfclose.cpp\
++					./shared/io/Disk/WriteLockFile.cpp\
++					./shared/io/Print/PrintfFunction.cpp\
++					./shared/io/Comm/IssmComm.cpp\
++					./shared/LatLong/Ll2xyx.cpp\
++					./shared/LatLong/Xy2llx.cpp\
++					./shared/Enum/EnumToStringx.cpp\
++					./shared/Enum/StringToEnumx.cpp\
++					./shared/Numerics/Verbosity.cpp\
++					./shared/Numerics/GaussPoints.cpp\
++					./shared/Numerics/cross.cpp\
++					./shared/Numerics/isnan.cpp\
++					./shared/Numerics/cubic.cpp\
++					./shared/Numerics/extrema.cpp\
++					./shared/Numerics/XZvectorsToCoordinateSystem.cpp\
++					./shared/Exceptions/Exceptions.cpp\
++					./shared/Exceptions/exprintf.cpp\
++					./shared/Sorting/binary_search.cpp\
++					./shared/Elements/Paterson.cpp\
++					./shared/Elements/Arrhenius.cpp\
++					./shared/Elements/PrintArrays.cpp\
++					./shared/Elements/PddSurfaceMassBalance.cpp\
++					./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\
++					./shared/String/DescriptorIndex.cpp\
++					./toolkits/issm/IssmToolkitUtils.cpp\
++					./toolkits/issm/IssmSolver.cpp\
++					./toolkits/ToolkitOptions.cpp\
++					./modules/ModelProcessorx/ModelProcessorx.cpp\
++					./modules/ModelProcessorx/DistributeNumDofs.cpp\
++					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
++					./modules/ModelProcessorx/NodesPartitioning.cpp\
++					./modules/ModelProcessorx/SortDataSets.cpp\
++					./modules/ModelProcessorx/UpdateCounters.cpp\
++					./modules/ModelProcessorx/CreateDataSets.cpp\
++					./modules/ModelProcessorx/CreateParameters.cpp\
++					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
++					./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp\
++					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
++					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\
++					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp\
++					./modules/NodesDofx/NodesDofx.cpp\
++					./modules/NodalValuex/NodalValuex.cpp\
++					./modules/VerticesDofx/VerticesDofx.cpp\
++					./modules/VertexCoordinatesx/VertexCoordinatesx.cpp\
++					./modules/OutputResultsx/OutputResultsx.cpp\
++					./modules/InputDuplicatex/InputDuplicatex.cpp\
++					./modules/InputScalex/InputScalex.cpp\
++					./modules/SurfaceAreax/SurfaceAreax.cpp\
++					./modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp\
++					./modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp\
++					./modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp\
++					./modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp\
++					./modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp\
++					./modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp\
++					./modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp\
++					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp\
++					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
++					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp\
++					./modules/ComputeBasalStressx/ComputeBasalStressx.cpp\
++					./modules/ComputeStrainRatex/ComputeStrainRatex.cpp\
++					./modules/SpcNodesx/SpcNodesx.cpp\
++					./modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp\
++					./modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp\
++					./modules/SmbGradientsx/SmbGradientsx.cpp\
++					./modules/Reducevectorgtofx/Reducevectorgtofx.cpp\
++					./modules/Reduceloadx/Reduceloadx.cpp\
++					./modules/ConstraintsStatex/ConstraintsStatex.cpp\
++					./modules/ResetConstraintsx/ResetConstraintsx.cpp\
++					./modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp\
++					./modules/Solverx/Solverx.cpp\
++					./modules/VecMergex/VecMergex.cpp\
++					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp\
++					./modules/InputToResultx/InputToResultx.cpp\
++					./analyses/ProcessArguments.cpp\
++					./analyses/ResetBoundaryConditions.cpp\
++					./analyses/AnalysisConfiguration.cpp\
++					./analyses/WrapperCorePointerFromSolutionEnum.cpp\
++					./analyses/CorePointerFromSolutionEnum.cpp\
++					./analyses/EnvironmentInit.cpp\
++					./analyses/EnvironmentFinalize.cpp\
++					./analyses/ad_core.cpp\
++					./solutionsequences/solutionsequence_linear.cpp\
++					./solutionsequences/solutionsequence_nonlinear.cpp\
++					./solutionsequences/solutionsequence_newton.cpp\
++					./solutionsequences/convergence.cpp\
++					./classes/Options/Options.cpp\
++					./classes/Options/OptionUtilities.cpp\
++					./classes/RiftStruct.cpp\
++# }}}
++
++add_library(ISSMCore STATIC ${core_sources})
++add_executable(issm ./main/issm.cpp)
+Index: ../trunk-jpl/src/c/classes/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/CMakeLists.txt	(revision 15442)
+@@ -1,20 +0,0 @@
+-# Subdirectories {{{
+-add_subdirectory(bamg)
+-add_subdirectory(dakota)
+-add_subdirectory(gauss)
+-add_subdirectory(kriging)
+-add_subdirectory(matrix)
+-add_subdirectory(objects)
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/DofIndexing.cpp
+-                    $ENV{ISSM_DIR}/src/c/classes/FemModel.cpp
+-                        $ENV{ISSM_DIR}/src/c/classes/Hook.cpp
+-                     $ENV{ISSM_DIR}/src/c/classes/IoModel.cpp
+-                    $ENV{ISSM_DIR}/src/c/classes/IssmComm.cpp
+-                       $ENV{ISSM_DIR}/src/c/classes/Patch.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/RiftStruct.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/Materials/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/Materials/CMakeLists.txt	(revision 15442)
+@@ -1,10 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/Materials)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Materials/Matdamageice.cpp
+-                       $ENV{ISSM_DIR}/src/c/classes/objects/Materials/Matice.cpp
+-                       $ENV{ISSM_DIR}/src/c/classes/objects/Materials/Matpar.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/Params/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/Params/CMakeLists.txt	(revision 15442)
+@@ -1,23 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/Params)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Params/BoolParam.cpp
+-              $ENV{ISSM_DIR}/src/c/classes/objects/Params/DataSetParam.cpp
+-       $ENV{ISSM_DIR}/src/c/classes/objects/Params/DoubleMatArrayParam.cpp
+-            $ENV{ISSM_DIR}/src/c/classes/objects/Params/DoubleMatParam.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Params/DoubleParam.cpp
+-   $ENV{ISSM_DIR}/src/c/classes/objects/Params/DoubleTransientMatParam.cpp
+-            $ENV{ISSM_DIR}/src/c/classes/objects/Params/DoubleVecParam.cpp
+-                 $ENV{ISSM_DIR}/src/c/classes/objects/Params/FileParam.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Params/IntMatParam.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/Params/IntParam.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Params/IntVecParam.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Params/MatrixParam.cpp
+-          $ENV{ISSM_DIR}/src/c/classes/objects/Params/StringArrayParam.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Params/StringParam.cpp
+-            $ENV{ISSM_DIR}/src/c/classes/objects/Params/TransientParam.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Params/VectorParam.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/kriging/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/kriging/CMakeLists.txt	(revision 15442)
+@@ -1,21 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/kriging)
+-# }}}
+-# KRIGING_SOURCES {{{
+-set(KRIGING_SOURCES $ENV{ISSM_DIR}/src/c/classes/kriging/ExponentialVariogram.cpp
+-                       $ENV{ISSM_DIR}/src/c/classes/kriging/GaussianVariogram.cpp
+-                             $ENV{ISSM_DIR}/src/c/classes/kriging/Observation.cpp
+-                          $ENV{ISSM_DIR}/src/c/classes/kriging/PowerVariogram.cpp
+-                                $ENV{ISSM_DIR}/src/c/classes/kriging/Quadtree.cpp
+-                      $ENV{ISSM_DIR}/src/c/classes/kriging/SphericalVariogram.cpp PARENT_SCOPE)
+-# }}}
+-# PKRIGING_SOURCES {{{
+-set(PKRIGING_SOURCES $ENV{ISSM_DIR}/src/c/classes/kriging/ExponentialVariogram.cpp
+-                        $ENV{ISSM_DIR}/src/c/classes/kriging/GaussianVariogram.cpp
+-                              $ENV{ISSM_DIR}/src/c/classes/kriging/Observation.cpp
+-                           $ENV{ISSM_DIR}/src/c/classes/kriging/PowerVariogram.cpp
+-                                 $ENV{ISSM_DIR}/src/c/classes/kriging/Quadtree.cpp
+-                       $ENV{ISSM_DIR}/src/c/classes/kriging/SphericalVariogram.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/Options/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/Options/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/Options/CMakeLists.txt	(revision 15442)
+@@ -1,8 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/Options)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Options/OptionUtilities.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/Loads/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/Loads/CMakeLists.txt	(revision 15442)
+@@ -1,15 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/Loads)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Loads/Friction.cpp
+-                 $ENV{ISSM_DIR}/src/c/classes/objects/Loads/Icefront.cpp
+-            $ENV{ISSM_DIR}/src/c/classes/objects/Loads/Numericalflux.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/Loads/Pengrid.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/Loads/Penpair.cpp PARENT_SCOPE)
+-# }}}
+-# RIFTS_SOURCES {{{
+-set(RIFTS_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Loads/Riftfront.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/matrix/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/matrix/CMakeLists.txt	(revision 15442)
+@@ -1,9 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/matrix)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/matrix/ElementMatrix.cpp
+-                 $ENV{ISSM_DIR}/src/c/classes/matrix/ElementVector.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/ExternalResults/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/ExternalResults/CMakeLists.txt	(revision 15442)
+@@ -1,5 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/ExternalResults)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/ElementResults/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/ElementResults/CMakeLists.txt	(revision 15442)
+@@ -1,13 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/ElementResults)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/ElementResults/BoolElementResult.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/ElementResults/DoubleElementResult.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp PARENT_SCOPE)
+-# }}}
+-# THREED_SOURCES {{{
+-set(THREED_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/Elements/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/Elements/CMakeLists.txt	(revision 15442)
+@@ -1,15 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/Elements)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Elements/Tria.cpp
+-             $ENV{ISSM_DIR}/src/c/classes/objects/Elements/TriaHook.cpp
+-              $ENV{ISSM_DIR}/src/c/classes/objects/Elements/TriaRef.cpp PARENT_SCOPE)
+-# }}}
+-# THREED_SOURCES {{{
+-set(THREED_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Elements/Penta.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Elements/PentaHook.cpp
+-                $ENV{ISSM_DIR}/src/c/classes/objects/Elements/PentaRef.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/gauss/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/gauss/CMakeLists.txt	(revision 15442)
+@@ -1,11 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/gauss)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/gauss/GaussTria.cpp PARENT_SCOPE)
+-# }}}
+-# THREED_SOURCES {{{
+-set(THREED_SOURCES $ENV{ISSM_DIR}/src/c/classes/gauss/GaussPenta.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/Inputs/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/Inputs/CMakeLists.txt	(revision 15442)
+@@ -1,16 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/Inputs)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/BoolInput.cpp
+-              $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/DatasetInput.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/DoubleInput.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/IntInput.cpp
+-            $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/TransientInput.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/TriaP1Input.cpp PARENT_SCOPE)
+-# }}}
+-# THREED_SOURCES {{{
+-set(THREED_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Inputs/PentaInput.cpp PARENT_SCOPE)
+-# }}}
+Index: ../trunk-jpl/src/c/classes/Constraints/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/CMakeLists.txt	(revision 15441)
++++ ../trunk-jpl/src/c/classes/Constraints/CMakeLists.txt	(revision 15442)
+@@ -1,10 +0,0 @@
+-# Subdirectories {{{
+-# }}}
+-# Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c/classes/objects/Constraints)
+-# }}}
+-# CORE_SOURCES {{{
+-set(CORE_SOURCES $ENV{ISSM_DIR}/src/c/classes/objects/Constraints/SpcDynamic.cpp
+-                  $ENV{ISSM_DIR}/src/c/classes/objects/Constraints/SpcStatic.cpp
+-               $ENV{ISSM_DIR}/src/c/classes/objects/Constraints/SpcTransient.cpp PARENT_SCOPE)
+-# }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15442-15443.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15442-15443.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15442-15443.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15442)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15443)
+@@ -2250,9 +2250,9 @@
+ 			tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
+ 			tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
+ 			tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
+-			tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0];
+-			tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1];
+-			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2];
++			tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
++			tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
++			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
+ 			break;
+ 		default:
+ 			_error_("Finite element "<<EnumToStringx(tria_type)<<" not supported yet");
Index: /issm/oecreview/Archive/15392-16133/ISSM-15443-15444.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15443-15444.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15443-15444.diff	(revision 16134)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15443)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15444)
+@@ -365,7 +365,6 @@
+ 			}
+ }
+ /*}}}*/
+-
+ /*Modules:*/
+ void FemModel::AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf){ /*{{{*/
+ 
+@@ -1674,7 +1673,6 @@
+ 
+ 	/*Update Inputs*/
+ 	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,transferg,WaterTransferEnum,NodesEnum);
+-
+ 	delete transferg;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15443)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15444)
+@@ -6141,7 +6141,7 @@
+ 						if(sed_head[i]>=h_max)wh_trans=0.0;
+ 					}
+ 					/*EPL head lower than sediment head, transfer from the sediment to the epl*/
+-					else if(epl_head[i]<sed_head[i]){
++					else if(epl_head[i]<=sed_head[i]){
+ 						wh_trans=sedstoring[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick);				
+ 					}
+ 				}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15444-15445.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15444-15445.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15444-15445.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/diagnostic.m	(revision 15444)
++++ ../trunk-jpl/src/m/classes/diagnostic.m	(revision 15445)
+@@ -113,6 +113,7 @@
+ 				if any(~isnan(md.diagnostic.referential(pos,:))),
+ 					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+ 				end
++				md = checkfield(md,'diagnostic.stokesreconditioning','>',0);
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
Index: /issm/oecreview/Archive/15392-16133/ISSM-15445-15446.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15445-15446.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15445-15446.diff	(revision 16134)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15445)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15446)
+@@ -991,16 +991,16 @@
+ 	int    numnodes = this->NumberofNodes();
+ 
+ 	/* Start looping on the number of vertices: */
+-	if (input){
++	if(input){
+ 		GaussTria* gauss=new GaussTria();
+-		for (int iv=0;iv<this->NumberofNodes();iv++){
++		for(int iv=0;iv<this->NumberofNodes();iv++){
+ 			gauss->GaussNode(numnodes,iv);
+ 			input->GetInputValue(&pvalue[iv],gauss);
+ 		}
+ 		delete gauss;
+ 	}
+ 	else{
+-		for (int iv=0;iv<numnodes;iv++) pvalue[iv]=defaultvalue;
++		for(int iv=0;iv<numnodes;iv++) pvalue[iv]=defaultvalue;
+ 	}
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15445)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15446)
+@@ -540,7 +540,7 @@
+ 			dbasis[NUMNODESP2*0+0]=-2.*gauss->coord1 + 0.5;
+ 			dbasis[NUMNODESP2*1+0]=-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.;
+ 			/*Nodal function 2*/
+-			dbasis[NUMNODESP2*0+1]=+2.*gauss->coord2 + 0.5;
++			dbasis[NUMNODESP2*0+1]=+2.*gauss->coord2 - 0.5;
+ 			dbasis[NUMNODESP2*1+1]=-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.;
+ 			/*Nodal function 3*/
+ 			dbasis[NUMNODESP2*0+2]=0.;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15446-15447.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15446-15447.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15446-15447.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15446)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15447)
+@@ -6968,7 +6968,7 @@
+ 					&B_stab[0][0],3,numvert,0,
+ 					&Ke_temp_stab[0][0],1);
+ 
+-		for(i=0;i<numvert;i++) for(j=0;j<numvert;j++) Ke->values[i*numdof*4+3+j*4+3]+=Ke_temp_stab[i][j];
++		for(i=0;i<numvert;i++) for(j=0;j<numvert;j++) Ke->values[numdof*(i*4+3)+j*4+3]+=Ke_temp_stab[i][j];
+ 
+ 	}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15447-15448.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15447-15448.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15447-15448.diff	(revision 16134)
@@ -0,0 +1,97 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15447)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15448)
+@@ -17,6 +17,7 @@
+ 	IssmDouble  rho_ice;
+ 	IssmDouble  stokesreconditioning;
+ 	bool    isstokes,isl1l2,ismacayealpattyn;
++	int     fe_ssa;
+    bool    spcpresent=false;
+ 	int Mx,Nx;
+ 	int My,Ny;
+@@ -49,6 +50,7 @@
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+ 	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+ 	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
++	iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum);
+ 
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+@@ -218,6 +220,7 @@
+ 				if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 					count++;
++
+ 				}
+ 				else if (Mx==iomodel->numberofvertices+1) {
+ 					/*figure out times and values: */
+@@ -310,6 +313,47 @@
+ 		}
+ 	}
+ 
++	/*SPC Quadratic elements*/
++	if(ismacayealpattyn&& fe_ssa==1){
++
++		int v1,v2,el1,el2;
++		bool my_edge;
++
++		if(Mx!=iomodel->numberofvertices) _error_("transient spc not supported yet");
++		CreateEdges(iomodel);
++
++		for(i=0;i<iomodel->numberofedges;i++){
++
++			v1 = iomodel->edges[4*i+0]-1;
++			v2 = iomodel->edges[4*i+1]-1;
++			el1= iomodel->edges[4*i+2]-1;
++			el2= iomodel->edges[4*i+3]-1;
++
++			my_edge = iomodel->my_elements[el1];
++			if(!my_edge && el2>=0){
++				my_edge = iomodel->my_elements[el2];
++			}
++
++			if(my_edge){
++				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++									1,(spcvx[v1]+spcvx[v2])/yts,DiagnosticHorizAnalysisEnum));
++					count++;
++				}
++				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++									2,(spcvy[v1]+spcvy[v2])/yts,DiagnosticHorizAnalysisEnum));
++					count++;
++				}
++				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++									3,(spcvz[v1]+spcvz[v2])/yts,DiagnosticHorizAnalysisEnum));
++					count++;
++				}
++			}
++		}
++	}
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(spcvx,DiagnosticSpcvxEnum);
+ 	iomodel->DeleteData(spcvy,DiagnosticSpcvyEnum);
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 15447)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 15448)
+@@ -21,11 +21,11 @@
+ /*FUNCTION SpcStatic::SpcStatic(int spc_sid,int spc_nodeid,...){{{*/
+ SpcStatic::SpcStatic(int spc_sid,int spc_nodeid, int spc_dof,IssmDouble spc_value,int spc_analysis_type){
+ 
+-	sid=spc_sid;
+-	nodeid=spc_nodeid;
+-	dof=spc_dof;
+-	value=spc_value;
+-	analysis_type=spc_analysis_type;
++	sid           = spc_sid;
++	nodeid        = spc_nodeid;
++	dof           = spc_dof;
++	value         = spc_value;
++	analysis_type = spc_analysis_type;
+ 
+ 	return;
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15448-15449.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15448-15449.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15448-15449.diff	(revision 16134)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15448)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15449)
+@@ -9,13 +9,16 @@
+ void	CreateLoadsHydrologyDCInefficient(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int      hydrology_model;
++	int hydrology_model;
++	int dim;   
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++	iomodel->Constant(&dim,MeshDimensionEnum);
++	iomodel->FetchData(1,MeshVertexonbedEnum);
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+@@ -28,12 +31,19 @@
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+-		/*keep only this partition's nodes:*/
+-		if((iomodel->my_vertices[i]==1)){
+-			loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
++		if (!dim==3){
++			/*keep only this partition's nodes:*/
++			if((iomodel->my_vertices[i]==1)){
++				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
++			}
+ 		}
++		else if(reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
++			if((iomodel->my_vertices[i]==1)){
++				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
++			}	
++		}
+ 	}
+-
+ 	/*Assign output pointer: */
+ 	*ploads=loads;
++	iomodel->DeleteData(1,MeshVertexonbedEnum);
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15449-15450.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15449-15450.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15449-15450.diff	(revision 16134)
@@ -0,0 +1,233 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15449)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15450)
+@@ -10,11 +10,8 @@
+ 
+ void	UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
++	/*Fetch data needed: */
+ 	bool   ishutter;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+ 
+ 	/*Now, is the flag hutter on? otherwise, do nothing: */
+@@ -24,7 +21,7 @@
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15449)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15450)
+@@ -10,11 +10,6 @@
+ 
+ void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+ 	if(iomodel->dim==2)return;
+ 
+@@ -23,7 +18,7 @@
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15449)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15450)
+@@ -10,7 +10,6 @@
+ 
+ void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    numberofelements;
+ 	int    stabilization;
+ 	bool   dakota_analysis;
+ 	bool   issmbgradients;
+@@ -18,7 +17,6 @@
+ 	bool   isdelta18o;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
+@@ -27,7 +25,7 @@
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+-	for(int i=0;i<numberofelements;i++){
++	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 15449)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 15450)
+@@ -15,12 +15,10 @@
+ 	int       counter;
+ 	Element  *element = NULL;
+ 	Material *material = NULL;
+-	int    numberofelements;
+ 	int    num_control_type;
+ 	bool   control_analysis;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
+ 
+@@ -48,7 +46,7 @@
+ 
+ 	/*Update elements and materials: */
+ 	counter=0;
+-	for (i=0;i<numberofelements;i++){
++	for (i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			element=(Element*)elements->GetObjectByOffset(counter);
+ 			element->InputUpdateFromIoModel(i,iomodel); //we need i to index into elements.
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15449)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15450)
+@@ -42,18 +42,14 @@
+ 	int element;
+ 	int numnodes; 
+ 	int numvertices; 
+-	int numberofelements;
+ 
+ 	/*icefront constructor data: */
+ 	int  icefront_eid;
+ 	int  icefront_mparid;
+-	int  icefront_node_ids[NUMVERTICESQUA]; //initialize with largest size
+-	int  icefront_vertex_ids[NUMVERTICESQUA]; //initialize with largest size
+ 	int  icefront_fill;
++	int *icefront_node_ids   = NULL;
++	int *icefront_vertex_ids = NULL;
+ 
+-	/*find parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-
+ 	/*First, retrieve element index and element type: */
+ 	if(iomodel->dim==2){
+ 		segment_width=4;
+@@ -62,19 +58,27 @@
+ 		segment_width=6;
+ 	}
+ 	_assert_(iomodel->Data(DiagnosticIcefrontEnum));
+-	element=reCast<int,IssmDouble>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill)
++	element=reCast<int,IssmDouble>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]-1);
+ 
+ 	/*Build ids for hook constructors: */
+-	icefront_eid=reCast<int,IssmDouble>( *(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)); //matlab indexing
+-	icefront_mparid=numberofelements+1; //matlab indexing
++	icefront_eid    = reCast<int,IssmDouble>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]); //matlab indexing
++	icefront_mparid = iomodel->numberofelements+1;
+ 
+ 	if (in_icefront_type==MacAyeal2dIceFrontEnum || in_icefront_type==MacAyeal3dIceFrontEnum){
++		numnodes    = 2;
++		numvertices = 2;
++		icefront_node_ids   = xNew<int>(numnodes);
++		icefront_vertex_ids = xNew<int>(numvertices);
+ 		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+ 		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+ 		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+ 		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+ 	}
+ 	else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
++		numnodes    = 4;
++		numvertices = 4;
++		icefront_node_ids   = xNew<int>(numnodes);
++		icefront_vertex_ids = xNew<int>(numvertices);
+ 		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+ 		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+ 		icefront_node_ids[2]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
+@@ -86,15 +90,6 @@
+ 	}
+ 	else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!");
+ 
+-	if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
+-		numnodes=4;
+-		numvertices=4;
+-	}
+-	else{
+-		numnodes=2;
+-		numvertices=2;
+-	}
+-
+ 	/*Fill*/
+ 	icefront_fill=reCast<int>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-1]);
+ 
+@@ -119,8 +114,11 @@
+ 	this->vertices   = NULL;
+ 	this->element    = NULL;
+ 	this->matpar     = NULL;
++
++	/*Clean up*/
++	xDelete<int>(icefront_node_ids);
++	xDelete<int>(icefront_vertex_ids);
+ }
+-
+ /*}}}*/
+ /*FUNCTION Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type) {{{*/
+ Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in,int in_icefront_type,  int in_analysis_type){
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15449)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15450)
+@@ -43,7 +43,6 @@
+ 	IssmDouble riftfront_friction;
+ 	IssmDouble riftfront_fractionincrement;
+ 	bool   riftfront_shelf;
+-	int    numberofelements;
+ 	int    penalty_lock;
+ 
+ 	/*intermediary: */
+@@ -51,7 +50,6 @@
+ 	int node1  ,node2;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&penalty_lock,DiagnosticRiftPenaltyLockEnum);
+ 
+ 	/*Ok, retrieve all the data needed to add a penalty between the two nodes: */
+@@ -70,7 +68,7 @@
+ 	riftfront_node_ids[1]=iomodel->nodecounter+node2;
+ 	riftfront_elem_ids[0]=el1;
+ 	riftfront_elem_ids[1]=el2;
+-	riftfront_matpar_id=numberofelements+1; //matlab indexing
++	riftfront_matpar_id=iomodel->numberofelements+1; //matlab indexing
+ 
+ 	/*Hooks: */
+ 	this->hnodes=new Hook(riftfront_node_ids,2);
+Index: ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 15449)
++++ ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 15450)
+@@ -48,7 +48,7 @@
+ 	int material_id;
+ 
+ 	/*retrieve material_id: */
+-	iomodel->Constant(&matpar_id,MeshNumberofelementsEnum); matpar_id++;
++	matpar_id = iomodel->numberofelements+1;
+ 
+ 	/*retrieve material_id*/
+ 	material_id = element_id;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15450-15451.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15450-15451.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15450-15451.diff	(revision 16134)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15450)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15451)
+@@ -340,15 +340,17 @@
+ 									1,(spcvx[v1]+spcvx[v2])/yts,DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+-				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
++				if(!xIsNan<IssmDouble>(spcvy[v1]) && !xIsNan<IssmDouble>(spcvy[v2])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+ 									2,(spcvy[v1]+spcvy[v2])/yts,DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+-				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-									3,(spcvz[v1]+spcvz[v2])/yts,DiagnosticHorizAnalysisEnum));
+-					count++;
++				if (reCast<int,IssmDouble>(vertices_type[v1])==StokesApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){
++					if(!xIsNan<IssmDouble>(spcvz[v1]) && !xIsNan<IssmDouble>(spcvz[v2])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++										3,(spcvz[v1]+spcvz[v2])/yts,DiagnosticHorizAnalysisEnum));
++						count++;
++					}
+ 				}
+ 			}
+ 		}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15451-15452.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15451-15452.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15451-15452.diff	(revision 16134)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15451)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15452)
+@@ -590,12 +590,11 @@
+ 	if(tria->IsOnWater()) return NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+-	//int numnodes = this->NumberofNodes();
+-	int numnodes = 2; 
++	int numnodes = tria->NumberofNodes();
+ 	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element vector and vectors*/
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICESSEG,this->parameters,MacAyealApproximationEnum);
++	ElementVector* pe=new ElementVector(tria->nodes,numnodes,this->parameters,MacAyealApproximationEnum);
+ 	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -640,7 +639,7 @@
+ 		pressure = ice_pressure + water_pressure + air_pressure;
+ 
+ 		tria->GetSegmentJacobianDeterminant(&Jdet,&xyz_list[0][0],gauss);
+-		tria->GetSegmentNodalFunctions(&basis[0],gauss,index1,index2);
++		tria->GetNodalFunctions(basis,gauss);
+ 
+ 		for (int i=0;i<numnodes;i++){
+ 			pe->values[2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
+@@ -649,7 +648,7 @@
+ 	}
+ 
+ 	/*Transform load vector*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICESSEG,XYEnum);
++	TransformLoadVectorCoord(pe,tria->nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(basis);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15452-15453.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15452-15453.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15452-15453.diff	(revision 16134)
@@ -0,0 +1,157 @@
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15452)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15453)
+@@ -72,8 +72,8 @@
+ 		Reduceloadx(pf,Kfs,ys);delete Kfs;
+ 
+ 		pJf=pf->Duplicate();
+-		Kff->MatMult(uf,pJf);// delete Kff);
+-		pJf->Scale(-1.0); pJf->AXPY(pf,+1.0);     //delete pf);
++		Kff->MatMult(uf,pJf);
++		pJf->Scale(-1.0); pJf->AXPY(pf,+1.0);
+ 
+ 		femmodel->CreateJacobianMatrixx(&Jff,kmax);
+ 		Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); delete Jff; delete pJf;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15452)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15453)
+@@ -3118,7 +3118,7 @@
+ 
+ 	/*Initialize Element matrix, vectors and Gaussian points*/
+ 	ElementMatrix* Ke=CreateKMatrixDiagnosticMacAyeal(); //Initialize Jacobian with regular MacAyeal (first part of the Gateau derivative)
+-	IssmDouble*    dphi   = xNew<IssmDouble>(2*numnodes);
++	IssmDouble*    dbasis = xNew<IssmDouble>(2*numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -3133,7 +3133,7 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetNodalFunctionsDerivatives(dphi,&xyz_list[0][0],gauss);
++		GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
+ 
+ 		thickness_input->GetInputValue(&thickness, gauss);
+ 		this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+@@ -3143,10 +3143,10 @@
+ 
+ 		for(i=0;i<numnodes;i++){
+ 			for(j=0;j<numnodes;j++){
+-				eps1dotdphii=eps1[0]*dphi[0*numnodes+i]+eps1[1]*dphi[1*numnodes+i];
+-				eps1dotdphij=eps1[0]*dphi[0*numnodes+j]+eps1[1]*dphi[1*numnodes+j];
+-				eps2dotdphii=eps2[0]*dphi[0*numnodes+i]+eps2[1]*dphi[1*numnodes+i];
+-				eps2dotdphij=eps2[0]*dphi[0*numnodes+j]+eps2[1]*dphi[1*numnodes+j];
++				eps1dotdphii=eps1[0]*dbasis[0*numnodes+i]+eps1[1]*dbasis[1*numnodes+i];
++				eps1dotdphij=eps1[0]*dbasis[0*numnodes+j]+eps1[1]*dbasis[1*numnodes+j];
++				eps2dotdphii=eps2[0]*dbasis[0*numnodes+i]+eps2[1]*dbasis[1*numnodes+i];
++				eps2dotdphij=eps2[0]*dbasis[0*numnodes+j]+eps2[1]*dbasis[1*numnodes+j];
+ 
+ 				Ke->values[2*numnodes*(2*i+0)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps1dotdphii;
+ 				Ke->values[2*numnodes*(2*i+0)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps1dotdphii;
+@@ -3157,11 +3157,11 @@
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
++	xDelete<IssmDouble>(dbasis);
+ 	delete gauss;
+-	xDelete<IssmDouble>(dphi);
+ 	return Ke;
+ }
+ /*}}}*/
+@@ -5213,20 +5213,20 @@
+ ElementMatrix* Tria::CreateKMatrixAdjointMacAyeal(void){
+ 
+ 	/*Constants*/
+-	const int    numdof=NDOF2*NUMVERTICES;
++	const int numnodes = this->GetNumberOfNodes();
++	const int numdof   = NDOF2*numnodes;
+ 
+ 	/*Intermediaries */
+-	int        i,j;
+-	bool       incomplete_adjoint;
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble Jdet,thickness;
+-	IssmDouble eps1dotdphii,eps1dotdphij;
+-	IssmDouble eps2dotdphii,eps2dotdphij;
+-	IssmDouble mu_prime;
+-	IssmDouble epsilon[3];/* epsilon=[exx,eyy,exy];*/
+-	IssmDouble eps1[2],eps2[2];
+-	IssmDouble dphi[2][NUMVERTICES];
+-	GaussTria *gauss=NULL;
++	int         i,j;
++	bool        incomplete_adjoint;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  Jdet,thickness;
++	IssmDouble  eps1dotdphii,eps1dotdphij;
++	IssmDouble  eps2dotdphii,eps2dotdphij;
++	IssmDouble  mu_prime;
++	IssmDouble  epsilon[3];/* epsilon=[exx,eyy,exy];*/
++	IssmDouble  eps1[2],eps2[2];
++	GaussTria  *gauss=NULL;
+ 
+ 	/*Initialize Jacobian with regular MacAyeal (first part of the Gateau derivative)*/
+ 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
+@@ -5239,6 +5239,9 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 
++	/*Allocate dbasis*/
++	IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -5246,7 +5249,7 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetNodalFunctionsDerivatives(&dphi[0][0],&xyz_list[0][0],gauss);
++		GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
+ 
+ 		thickness_input->GetInputValue(&thickness, gauss);
+ 		this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+@@ -5254,26 +5257,27 @@
+ 		eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
+ 		eps1[1]=epsilon[2];                eps2[1]=epsilon[0]+2*epsilon[1];
+ 
+-		for(i=0;i<3;i++){
+-			for(j=0;j<3;j++){
+-				eps1dotdphii=eps1[0]*dphi[0][i]+eps1[1]*dphi[1][i];
+-				eps1dotdphij=eps1[0]*dphi[0][j]+eps1[1]*dphi[1][j];
+-				eps2dotdphii=eps2[0]*dphi[0][i]+eps2[1]*dphi[1][i];
+-				eps2dotdphij=eps2[0]*dphi[0][j]+eps2[1]*dphi[1][j];
++		for(i=0;i<numnodes;i++){
++			for(j=0;j<numnodes;j++){
++				eps1dotdphii=eps1[0]*dbasis[0*numnodes+i]+eps1[1]*dbasis[1*numnodes+i];
++				eps1dotdphij=eps1[0]*dbasis[0*numnodes+j]+eps1[1]*dbasis[1*numnodes+j];
++				eps2dotdphii=eps2[0]*dbasis[0*numnodes+i]+eps2[1]*dbasis[1*numnodes+i];
++				eps2dotdphij=eps2[0]*dbasis[0*numnodes+j]+eps2[1]*dbasis[1*numnodes+j];
+ 
+-				Ke->values[6*(2*i+0)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps1dotdphii;
+-				Ke->values[6*(2*i+0)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps1dotdphii;
+-				Ke->values[6*(2*i+1)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps2dotdphii;
+-				Ke->values[6*(2*i+1)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps2dotdphii;
++				Ke->values[2*numnodes*(2*i+0)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps1dotdphii;
++				Ke->values[2*numnodes*(2*i+0)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps1dotdphii;
++				Ke->values[2*numnodes*(2*i+1)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps2dotdphii;
++				Ke->values[2*numnodes*(2*i+1)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps2dotdphii;
+ 			}
+ 		}
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<IssmDouble>(dbasis);
+ 	//Ke->Transpose();
+ 	return Ke;
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15453-15454.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15453-15454.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15453-15454.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15453)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15454)
+@@ -3040,7 +3040,7 @@
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYEnum);
++	TransformLoadVectorCoord(pe,nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(basis);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15454-15455.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15454-15455.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15454-15455.diff	(revision 16134)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15454)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15455)
+@@ -38,6 +38,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'ishutter',"is the shallow ice approximation used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isl1l2',"are l1l2 equations used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isstokes',"are the Full-Stokes equations used ?"))
++		string="%s\n%s"%(string,fielddisplay(self,'fe_ssa',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vertex_equation',"flow equation for each vertex"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'element_equation',"flow equation for each element"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'bordermacayeal',"vertices on MacAyeal's border (for tiling)"))
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15454)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15455)
+@@ -67,6 +67,7 @@
+ 			fielddisplay(obj,'ishutter','is the shallow ice approximation used ?');
+ 			fielddisplay(obj,'isl1l2','is the l1l2 approximation used ?');
+ 			fielddisplay(obj,'isstokes','are the Full-Stokes equations used ?');
++			fielddisplay(obj,'fe_ssa','Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
+ 			fielddisplay(obj,'vertex_equation','flow equation for each vertex');
+ 			fielddisplay(obj,'element_equation','flow equation for each element');
+ 			fielddisplay(obj,'bordermacayeal','vertices on MacAyeal''s border (for tiling)');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15455-15456.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15455-15456.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15455-15456.diff	(revision 16134)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15455)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15456)
+@@ -10,15 +10,12 @@
+ 
+ 	/*Intermediary*/
+ 	int hydrology_model;
+-	int dim;   
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	iomodel->Constant(&dim,MeshDimensionEnum);
+-	iomodel->FetchData(1,MeshVertexonbedEnum);
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+@@ -27,11 +24,13 @@
+ 		*ploads=loads;
+ 		return;
+ 	}
++	
++	iomodel->FetchData(1,MeshVertexonbedEnum);
+ 
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if (!dim==3){
++		if (iomodel->dim==3){
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i]==1)){
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
Index: /issm/oecreview/Archive/15392-16133/ISSM-15456-15457.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15456-15457.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15456-15457.diff	(revision 16134)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 15456)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 15457)
+@@ -46,11 +46,11 @@
+ 
+ 	for(;;){
+ 
++		delete tf_old; tf_old=tf;
+ 		femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+-		Reduceloadx(pf, Kfs, ys); delete Kfs; delete tf;
++		Reduceloadx(pf, Kfs, ys); delete Kfs;
+ 		Solverx(&tf, Kff, pf,tf_old, df, femmodel->parameters);
+-		delete tf_old; tf_old=tf->Duplicate();
+ 		delete Kff;delete pf;delete tg; delete df;
+ 		Mergesolutionfromftogx(&tg, tf,ys,femmodel->nodes,femmodel->parameters); delete ys;
+ 		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,tg);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15457-15458.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15457-15458.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15457-15458.diff	(revision 16134)
@@ -0,0 +1,260 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15457)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15458)
+@@ -1194,8 +1194,6 @@
+ 	_assert_(dbasis && gauss);
+ 
+ 	/*Get current coordinates in reference element*/
+-	IssmDouble r=gauss->coord2-gauss->coord1;
+-	IssmDouble s=-3.0/SQRT3*(gauss->coord1+gauss->coord2-2.0/3.0);
+ 	IssmDouble zeta=gauss->coord4;
+ 
+ 	switch(this->element_type){
+@@ -1203,55 +1201,55 @@
+ 			/*Nodal function 1*/
+ 			dbasis[NUMNODESP1*0+0]=-0.5*(1.0-zeta)/2.0;
+ 			dbasis[NUMNODESP1*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESP1*2+0]=-0.5*(-0.5*r-SQRT3/6.0*s+ONETHIRD);
++			dbasis[NUMNODESP1*2+0]=-0.5*gauss->coord1;
+ 			/*Nodal function 2*/
+ 			dbasis[NUMNODESP1*0+1]=0.5*(1.0-zeta)/2.0;
+ 			dbasis[NUMNODESP1*1+1]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESP1*2+1]=-0.5*(0.5*r-SQRT3/6.0*s+ONETHIRD);
++			dbasis[NUMNODESP1*2+1]=-0.5*gauss->coord2;
+ 			/*Nodal function 3*/
+-			dbasis[NUMNODESP1*0+2]=0;
++			dbasis[NUMNODESP1*0+2]=0.;
+ 			dbasis[NUMNODESP1*1+2]=SQRT3/3.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESP1*2+2]=-0.5*(SQRT3/3.0*s+ONETHIRD);
++			dbasis[NUMNODESP1*2+2]=-0.5*gauss->coord3;
+ 			/*Nodal function 4*/
+ 			dbasis[NUMNODESP1*0+3]=-0.5*(1.0+zeta)/2.0;
+ 			dbasis[NUMNODESP1*1+3]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESP1*2+3]=0.5*(-0.5*r-SQRT3/6.0*s+ONETHIRD);
++			dbasis[NUMNODESP1*2+3]=0.5*gauss->coord1;
+ 			/*Nodal function 5*/
+ 			dbasis[NUMNODESP1*0+4]=0.5*(1.0+zeta)/2.0;
+ 			dbasis[NUMNODESP1*1+4]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESP1*2+4]=0.5*(0.5*r-SQRT3/6.0*s+ONETHIRD);
++			dbasis[NUMNODESP1*2+4]=0.5*gauss->coord2;
+ 			/*Nodal function 6*/
+-			dbasis[NUMNODESP1*0+5]=0;
++			dbasis[NUMNODESP1*0+5]=0.;
+ 			dbasis[NUMNODESP1*1+5]=SQRT3/3.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESP1*2+5]=0.5*(SQRT3/3.0*s+ONETHIRD);
++			dbasis[NUMNODESP1*2+5]=0.5*gauss->coord3;
+ 		case MINIEnum:
+ 			/*Nodal function 1*/
+ 			dbasis[NUMNODESMINI*0+0]=-0.5*(1.0-zeta)/2.0;
+ 			dbasis[NUMNODESMINI*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+0]=-0.5*(-0.5*r-SQRT3/6.0*s+ONETHIRD);
++			dbasis[NUMNODESMINI*2+0]=-0.5*gauss->coord1;
+ 			/*Nodal function 2*/
+ 			dbasis[NUMNODESMINI*0+1]=0.5*(1.0-zeta)/2.0;
+ 			dbasis[NUMNODESMINI*1+1]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+1]=-0.5*(0.5*r-SQRT3/6.0*s+ONETHIRD);
++			dbasis[NUMNODESMINI*2+1]=-0.5*gauss->coord2;
+ 			/*Nodal function 3*/
+-			dbasis[NUMNODESMINI*0+2]=0;
++			dbasis[NUMNODESMINI*0+2]=0.;
+ 			dbasis[NUMNODESMINI*1+2]=SQRT3/3.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+2]=-0.5*(SQRT3/3.0*s+ONETHIRD);
++			dbasis[NUMNODESMINI*2+2]=-0.5*gauss->coord3;
+ 			/*Nodal function 4*/
+ 			dbasis[NUMNODESMINI*0+3]=-0.5*(1.0+zeta)/2.0;
+ 			dbasis[NUMNODESMINI*1+3]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+3]=0.5*(-0.5*r-SQRT3/6.0*s+ONETHIRD);
++			dbasis[NUMNODESMINI*2+3]=0.5*gauss->coord1;
+ 			/*Nodal function 5*/
+ 			dbasis[NUMNODESMINI*0+4]=0.5*(1.0+zeta)/2.0;
+ 			dbasis[NUMNODESMINI*1+4]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+4]=0.5*(0.5*r-SQRT3/6.0*s+ONETHIRD);
++			dbasis[NUMNODESMINI*2+4]=0.5*gauss->coord2;
+ 			/*Nodal function 6*/
+-			dbasis[NUMNODESMINI*0+5]=0;
++			dbasis[NUMNODESMINI*0+5]=0.;
+ 			dbasis[NUMNODESMINI*1+5]=SQRT3/3.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+5]=0.5*(SQRT3/3.0*s+ONETHIRD);
++			dbasis[NUMNODESMINI*2+5]=0.5*gauss->coord3;
+ 			/*Nodal function 7*/
+-			dbasis[NUMNODESMINI*0+6]=9.0/2.0*r*(1.0+zeta)*(zeta-1.0)*(SQRT3*s+1.0);
+-			dbasis[NUMNODESMINI*1+6]=9.0/4.0*(1+zeta)*(1-zeta)*(SQRT3*pow(s,2.0)-2.0*s-SQRT3*pow(r,2.0));
++			dbasis[NUMNODESMINI*0+6]=27.*(1.+zeta)*(1.-zeta)*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);
++			dbasis[NUMNODESMINI*1+6]=27.*(1.+zeta)*(1.-zeta)*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
+ 			dbasis[NUMNODESMINI*2+6]=27*gauss->coord1*gauss->coord2*gauss->coord3*(-2.0*zeta);
+ 			return;
+ 		default:
+@@ -1281,7 +1279,6 @@
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
+ 	 * actual coordinate system): */
+ 
+-	int       i;
+ 	IssmDouble    dh1dh7_ref[3][NUMNODESMINI];
+ 	IssmDouble    Jinv[3][3];
+ 
+@@ -1298,7 +1295,7 @@
+ 	 * [dhi/dz]        [dhi/dzeta]
+ 	 */
+ 
+-	for (i=0;i<NUMNODESMINI;i++){
++	for(int i=0;i<NUMNODESMINI;i++){
+ 		*(dh1dh7+NUMNODESMINI*0+i)=Jinv[0][0]*dh1dh7_ref[0][i]+Jinv[0][1]*dh1dh7_ref[1][i]+Jinv[0][2]*dh1dh7_ref[2][i];
+ 		*(dh1dh7+NUMNODESMINI*1+i)=Jinv[1][0]*dh1dh7_ref[0][i]+Jinv[1][1]*dh1dh7_ref[1][i]+Jinv[1][2]*dh1dh7_ref[2][i];
+ 		*(dh1dh7+NUMNODESMINI*2+i)=Jinv[2][0]*dh1dh7_ref[0][i]+Jinv[2][1]*dh1dh7_ref[1][i]+Jinv[2][2]*dh1dh7_ref[2][i];
+@@ -1307,49 +1304,40 @@
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsMINIDerivativesReference{{{*/
+-void PentaRef::GetNodalFunctionsMINIDerivativesReference(IssmDouble* dl1dl7,GaussPenta* gauss){
++void PentaRef::GetNodalFunctionsMINIDerivativesReference(IssmDouble* dbasis,GaussPenta* gauss){
+ 
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
+ 	 * natural coordinate system) at the gaussian point. */
+-	IssmDouble r=gauss->coord2-gauss->coord1;
+-	IssmDouble s=-3.0/SQRT3*(gauss->coord1+gauss->coord2-2.0/3.0);
+ 	IssmDouble zeta=gauss->coord4;
+ 
+-	/*First nodal function: */
+-	*(dl1dl7+NUMNODESMINI*0+0)=-0.5*(1.0-zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*1+0)=-SQRT3/6.0*(1.0-zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*2+0)=-0.5*(-0.5*r-SQRT3/6.0*s+ONETHIRD);
+-
+-	/*Second nodal function: */
+-	*(dl1dl7+NUMNODESMINI*0+1)=0.5*(1.0-zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*1+1)=-SQRT3/6.0*(1.0-zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*2+1)=-0.5*(0.5*r-SQRT3/6.0*s+ONETHIRD);
+-
+-	/*Third nodal function: */
+-	*(dl1dl7+NUMNODESMINI*0+2)=0;
+-	*(dl1dl7+NUMNODESMINI*1+2)=SQRT3/3.0*(1.0-zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*2+2)=-0.5*(SQRT3/3.0*s+ONETHIRD);
+-
+-	/*Fourth nodal function: */
+-	*(dl1dl7+NUMNODESMINI*0+3)=-0.5*(1.0+zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*1+3)=-SQRT3/6.0*(1.0+zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*2+3)=0.5*(-0.5*r-SQRT3/6.0*s+ONETHIRD);
+-
+-	/*Fith nodal function: */
+-	*(dl1dl7+NUMNODESMINI*0+4)=0.5*(1.0+zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*1+4)=-SQRT3/6.0*(1.0+zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*2+4)=0.5*(0.5*r-SQRT3/6.0*s+ONETHIRD);
+-
+-	/*Sixth nodal function: */
+-	*(dl1dl7+NUMNODESMINI*0+5)=0;
+-	*(dl1dl7+NUMNODESMINI*1+5)=SQRT3/3.0*(1.0+zeta)/2.0;
+-	*(dl1dl7+NUMNODESMINI*2+5)=0.5*(SQRT3/3.0*s+ONETHIRD);
+-
+-	/*Seventh nodal function: */
+-	*(dl1dl7+NUMNODESMINI*0+6)=9.0/2.0*r*(1.0+zeta)*(zeta-1.0)*(SQRT3*s+1.0);
+-	*(dl1dl7+NUMNODESMINI*1+6)=9.0/4.0*(1+zeta)*(1-zeta)*(SQRT3*pow(s,2.0)-2.0*s-SQRT3*pow(r,2.0));
+-	*(dl1dl7+NUMNODESMINI*2+6)=27*gauss->coord1*gauss->coord2*gauss->coord3*(-2.0*zeta);
+-
++	/*Nodal function 1*/
++	dbasis[NUMNODESMINI*0+0]=-0.5*(1.0-zeta)/2.0;
++	dbasis[NUMNODESMINI*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESMINI*2+0]=-0.5*gauss->coord1;
++	/*Nodal function 2*/
++	dbasis[NUMNODESMINI*0+1]=0.5*(1.0-zeta)/2.0;
++	dbasis[NUMNODESMINI*1+1]=-SQRT3/6.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESMINI*2+1]=-0.5*gauss->coord2;
++	/*Nodal function 3*/
++	dbasis[NUMNODESMINI*0+2]=0.;
++	dbasis[NUMNODESMINI*1+2]=SQRT3/3.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESMINI*2+2]=-0.5*gauss->coord3;
++	/*Nodal function 4*/
++	dbasis[NUMNODESMINI*0+3]=-0.5*(1.0+zeta)/2.0;
++	dbasis[NUMNODESMINI*1+3]=-SQRT3/6.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESMINI*2+3]=0.5*gauss->coord1;
++	/*Nodal function 5*/
++	dbasis[NUMNODESMINI*0+4]=0.5*(1.0+zeta)/2.0;
++	dbasis[NUMNODESMINI*1+4]=-SQRT3/6.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESMINI*2+4]=0.5*gauss->coord2;
++	/*Nodal function 6*/
++	dbasis[NUMNODESMINI*0+5]=0.;
++	dbasis[NUMNODESMINI*1+5]=SQRT3/3.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESMINI*2+5]=0.5*gauss->coord3;
++	/*Nodal function 7*/
++	dbasis[NUMNODESMINI*0+6]=27.*(1.+zeta)*(1.-zeta)*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);
++	dbasis[NUMNODESMINI*1+6]=27.*(1.+zeta)*(1.-zeta)*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
++	dbasis[NUMNODESMINI*2+6]=27*gauss->coord1*gauss->coord2*gauss->coord3*(-2.0*zeta);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsP1 {{{*/
+@@ -1395,50 +1383,37 @@
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsP1DerivativesReference {{{*/
+-void PentaRef::GetNodalFunctionsP1DerivativesReference(IssmDouble* dl1dl6,GaussPenta* gauss){
++void PentaRef::GetNodalFunctionsP1DerivativesReference(IssmDouble* dbasis,GaussPenta* gauss){
+ 
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
+ 	 * natural coordinate system) at the gaussian point. Those values vary along xi,eta,z */
+ 
+-	IssmDouble A1,A2,A3,z;
++	IssmDouble zeta=gauss->coord4;
+ 
+-	A1=gauss->coord1; _assert_(A1>=0 && A1<=1);//first area coordinate value. In term of xi and eta: A1=(1-xi)/2-eta/(2*SQRT3);
+-	A2=gauss->coord2; _assert_(A2>=0 && A2<=1);//second area coordinate value In term of xi and eta: A2=(1+xi)/2-eta/(2*SQRT3);
+-	A3=gauss->coord3; _assert_(A3>=0 && A3<=1);//third area coordinate value  In term of xi and eta: A3=y/SQRT3;
+-	z =gauss->coord4; _assert_(z>=-1 &&  z<=1);//fourth vertical coordinate value. Corresponding nodal function: (1-z)/2 and (1+z)/2
+-
+-	/*First nodal function derivatives. The corresponding nodal function is N=A1*(1-z)/2. Its derivatives follow*/
+-	*(dl1dl6+NUMNODESP1*0+0)=-0.5*(1.0-z)/2.0;
+-	*(dl1dl6+NUMNODESP1*1+0)=-0.5/SQRT3*(1.0-z)/2.0;
+-	*(dl1dl6+NUMNODESP1*2+0)=-0.5*A1;
+-	//dbasis[NUMNODESP1*0+0]=-0.5*(1.0-zeta)/2.0;
+-	//dbasis[NUMNODESP1*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-	//dbasis[NUMNODESP1*2+0]=-0.5*(-0.5*r-SQRT3/6.0*s+ONETHIRD);
+-
+-	/*Second nodal function: The corresponding nodal function is N=A2*(1-z)/2. Its derivatives follow*/
+-	*(dl1dl6+NUMNODESP1*0+1)=0.5*(1.0-z)/2.0;
+-	*(dl1dl6+NUMNODESP1*1+1)=-0.5/SQRT3*(1.0-z)/2.0;
+-	*(dl1dl6+NUMNODESP1*2+1)=-0.5*A2;
+-
+-	/*Third nodal function: The corresponding nodal function is N=A3*(1-z)/2. Its derivatives follow*/
+-	*(dl1dl6+NUMNODESP1*0+2)=0.0;
+-	*(dl1dl6+NUMNODESP1*1+2)=1.0/SQRT3*(1.0-z)/2.0;
+-	*(dl1dl6+NUMNODESP1*2+2)=-0.5*A3;
+-
+-	/*Fourth nodal function: The corresponding nodal function is N=A1*(1+z)/2. Its derivatives follow*/
+-	*(dl1dl6+NUMNODESP1*0+3)=-0.5*(1.0+z)/2.0;
+-	*(dl1dl6+NUMNODESP1*1+3)=-0.5/SQRT3*(1.0+z)/2.0;
+-	*(dl1dl6+NUMNODESP1*2+3)=0.5*A1;
+-
+-	/*Fifth nodal function: The corresponding nodal function is N=A2*(1+z)/2. Its derivatives follow*/
+-	*(dl1dl6+NUMNODESP1*0+4)=0.5*(1.0+z)/2.0;
+-	*(dl1dl6+NUMNODESP1*1+4)=-0.5/SQRT3*(1.0+z)/2.0;
+-	*(dl1dl6+NUMNODESP1*2+4)=0.5*A2;
+-
+-	/*Sixth nodal function: The corresponding nodal function is N=A3*(1+z)/2. Its derivatives follow*/
+-	*(dl1dl6+NUMNODESP1*0+5)=0.0;
+-	*(dl1dl6+NUMNODESP1*1+5)=1.0/SQRT3*(1.0+z)/2.0;
+-	*(dl1dl6+NUMNODESP1*2+5)=0.5*A3;
++	/*Nodal function 1*/
++	dbasis[NUMNODESP1*0+0]=-0.5*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1*2+0]=-0.5*gauss->coord1;
++	/*Nodal function 2*/
++	dbasis[NUMNODESP1*0+1]=0.5*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1*1+1]=-SQRT3/6.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1*2+1]=-0.5*gauss->coord2;
++	/*Nodal function 3*/
++	dbasis[NUMNODESP1*0+2]=0.;
++	dbasis[NUMNODESP1*1+2]=SQRT3/3.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1*2+2]=-0.5*gauss->coord3;
++	/*Nodal function 4*/
++	dbasis[NUMNODESP1*0+3]=-0.5*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1*1+3]=-SQRT3/6.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1*2+3]=0.5*gauss->coord1;
++	/*Nodal function 5*/
++	dbasis[NUMNODESP1*0+4]=0.5*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1*1+4]=-SQRT3/6.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1*2+4]=0.5*gauss->coord2;
++	/*Nodal function 6*/
++	dbasis[NUMNODESP1*0+5]=0.;
++	dbasis[NUMNODESP1*1+5]=SQRT3/3.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1*2+5]=0.5*gauss->coord3;
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetQuadNodalFunctions {{{*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15458-15459.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15458-15459.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15458-15459.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15458)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15459)
+@@ -221,7 +221,9 @@
+ 			md.mask.vertexongroundedice=project2d(md,md.mask.vertexongroundedice,1);
+ 			md.mask.elementonwater=project2d(md,md.mask.elementonwater,1);
+ 			md.mask.vertexonwater=project2d(md,md.mask.vertexonwater,1);
+-			%md.mask.vertexonrock=project2d(md,md.mask.vertexonrock,1);
++			if ~isnan(md.mask.vertexonrock)
++				md.mask.vertexonrock=project2d(md,md.mask.vertexonrock,1);
++			end
+ 
+ 			%lat long
+ 			if numel(md.mesh.lat) ==md.mesh.numberofvertices,  md.mesh.lat=project2d(md,md.mesh.lat,1); end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15459-15460.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15459-15460.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15459-15460.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 15459)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 15460)
+@@ -25,7 +25,7 @@
+ field_names     =['Enthalpy1','Waterfraction1','Temperature1',\
+ 	'Enthalpy2','Waterfraction2','Temperature2',\
+ 	'Enthalpy3','Waterfraction3','Temperature3']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-10,1e-13]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-9,1e-13]
+ field_values=[\
+ 	md.results.TransientSolution[0].Enthalpy,\
+ 	md.results.TransientSolution[0].Waterfraction,\
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 15459)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 15460)
+@@ -16,7 +16,7 @@
+ field_names     ={'Enthalpy1','Waterfraction1','Temperature1',...
+ 	'Enthalpy2','Waterfraction2','Temperature2',...
+ 	'Enthalpy3','Waterfraction3','Temperature3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-10,1e-13};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-9,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Enthalpy),...
+ 	(md.results.TransientSolution(1).Waterfraction),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15460-15461.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15460-15461.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15460-15461.diff	(revision 16134)
@@ -0,0 +1,584 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15461)
+@@ -11,7 +11,6 @@
+ void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	bool continuous_galerkin = true;
+ 	bool ishutter;
+ 
+ 	/*Fetch parameters: */
+@@ -29,9 +28,6 @@
+ 		return;
+ 	}
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15461)
+@@ -10,18 +10,12 @@
+ 
+ void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool continuous_galerkin=true;
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15461)
+@@ -10,9 +10,6 @@
+ 
+ void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool continuous_galerkin=true;
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+@@ -25,9 +22,6 @@
+ 		return;
+ 	}
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15461)
+@@ -15,8 +15,8 @@
+ 	int  node_id;
+ 	int  vertex_id;
+ 	int  io_index;
+-	bool continuous_galerkin=true;
+ 	int  stabilization;
++	bool *my_nodes = NULL;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+@@ -27,16 +27,12 @@
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	/*Create partition of nodes: */
+-	if(stabilization==3) continuous_galerkin=false;
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*Check in 3d*/
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	if(continuous_galerkin){
++	if(stabilization!=3){
+ 
+ 		/*Build Nodes dataset (Continuous Galerkin)*/
+ 		for (i=0;i<iomodel->numberofvertices;i++){
+@@ -52,10 +48,11 @@
+ 	else{
+ 
+ 		/*Build Nodes dataset -> 3 for each element (Discontinuous Galerkin)*/
++		NodesPartitioning(&my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,false);
+ 		for (i=0;i<iomodel->numberofelements;i++){
+ 			for (j=0;j<3;j++){
+ 
+-				if(iomodel->my_nodes[3*i+j]){ 
++				if(my_nodes[3*i+j]){ 
+ 
+ 					//Get index of the vertex on which the current node is located
+ 					vertex_id=iomodel->elements[+3*i+j]; //(Matlab indexing)
+@@ -75,6 +72,7 @@
+ 
+ 	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	xDelete<bool>(my_nodes);
+ 
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15461)
+@@ -12,7 +12,6 @@
+ 
+ 	/*Intermediary*/
+ 	int  hydrology_model;
+-	bool continuous_galerkin=true;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+@@ -29,9 +28,6 @@
+ 		return;
+ 	}
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15461)
+@@ -10,18 +10,12 @@
+ 
+ void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool continuous_galerkin=true;
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15461)
+@@ -316,25 +316,19 @@
+ 	/*SPC Quadratic elements*/
+ 	if(ismacayealpattyn&& fe_ssa==1){
+ 
+-		int v1,v2,el1,el2;
+-		bool my_edge;
++		int   v1,v2;
++		bool *my_edges = NULL;
+ 
+ 		if(Mx!=iomodel->numberofvertices) _error_("transient spc not supported yet");
+-		CreateEdges(iomodel);
++		EdgesPartitioning(&my_edges,iomodel);
+ 
+ 		for(i=0;i<iomodel->numberofedges;i++){
+ 
+-			v1 = iomodel->edges[4*i+0]-1;
+-			v2 = iomodel->edges[4*i+1]-1;
+-			el1= iomodel->edges[4*i+2]-1;
+-			el2= iomodel->edges[4*i+3]-1;
++			if(my_edges[i]){
+ 
+-			my_edge = iomodel->my_elements[el1];
+-			if(!my_edge && el2>=0){
+-				my_edge = iomodel->my_elements[el2];
+-			}
++				v1 = iomodel->edges[4*i+0]-1;
++				v2 = iomodel->edges[4*i+1]-1;
+ 
+-			if(my_edge){
+ 				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+ 									1,(spcvx[v1]+spcvx[v2])/yts,DiagnosticHorizAnalysisEnum));
+@@ -354,6 +348,9 @@
+ 				}
+ 			}
+ 		}
++
++		/*Clean up*/
++		xDelete<bool>(my_edges);
+ 	}
+ 
+ 	/*Free data: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15461)
+@@ -11,7 +11,6 @@
+ void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	bool   continuous_galerkin=true;
+ 	bool   isstokes,isl1l2,ismacayealpattyn;
+ 	int    finiteelementssa;
+ 
+@@ -33,9 +32,6 @@
+ 		return;
+ 	}
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*Create nodes: */
+ 	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+@@ -52,28 +48,17 @@
+ 	if(finiteelementssa==1){
+ 
+ 		/*Quadratic element*/
+-		CreateEdges(iomodel);
++		bool *my_edges = NULL;
++		EdgesPartitioning(&my_edges,iomodel);
+ 		CreateElementToEdgeConnectivity(iomodel);
+-		int  element1,element2;
+-		bool my_edge;
+ 
+ 		for(int i=0;i<iomodel->numberofedges;i++){
+-
+-			/*Get left and right elements*/
+-			element1=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
+-			element2=iomodel->edges[4*i+3]-1; //edges are [node1 node2 elem1 elem2]
+-
+-			/*Check whether we should include this edge (element2 is -2 for boundary edges)*/
+-			my_edge = iomodel->my_elements[element1];
+-			if(!my_edge && element2>=0){
+-				my_edge = iomodel->my_elements[element2];
+-			}
+-
+-			/*Add node on edge*/
+-			if(my_edge){
++			if(my_edges[i]){
+ 				nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,0,iomodel,DiagnosticHorizAnalysisEnum));
+ 			}
+ 		}
++		/*Clean up*/
++		xDelete<bool>(my_edges);
+ 	}
+ 
+ 	/*Clean fetched data: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15461)
+@@ -15,8 +15,8 @@
+ 	int  node_id;
+ 	int  vertex_id;
+ 	int  io_index;
+-	bool continuous_galerkin=true;
+ 	int  stabilization;
++	bool *my_nodes=NULL;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+@@ -27,17 +27,13 @@
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	if(stabilization==3) continuous_galerkin=false;
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*Check in 3d*/
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	if(continuous_galerkin){
++	if(stabilization!=3){
+ 
+ 		/*Build Nodes dataset (Continuous Galerkin)*/
+ 		for (i=0;i<iomodel->numberofvertices;i++){
+@@ -52,10 +48,11 @@
+ 	else{
+ 
+ 		/*Build Nodes dataset -> 3 for each element (Discontinuous Galerkin)*/
++		NodesPartitioning(&my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,false);
+ 		for (i=0;i<iomodel->numberofelements;i++){
+ 			for (j=0;j<3;j++){
+ 
+-				if(iomodel->my_nodes[3*i+j]){ 
++				if(my_nodes[3*i+j]){ 
+ 
+ 					//Get index of the vertex on which the current node is located
+ 					vertex_id=iomodel->elements[3*i+j]; //(Matlab indexing)
+@@ -75,6 +72,7 @@
+ 
+ 	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	xDelete<bool>(my_nodes);
+ 
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15461)
+@@ -12,7 +12,6 @@
+ 
+ 	/*Intermediary*/
+ 	bool isefficientlayer;
+-	bool continuous_galerkin=true;
+ 	int  hydrology_model;
+ 
+ 	/*Recover pointer: */
+@@ -35,9 +34,6 @@
+ 		return;
+ 	}
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15461)
+@@ -115,6 +115,7 @@
+ /*partitioning: */
+ void ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel);
+ void NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, bool continuous);
++void EdgesPartitioning(bool** pmy_nodes,IoModel* iomodel);
+ 
+ /*Connectivity*/
+ void CreateEdges(IoModel* iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15461)
+@@ -19,12 +19,6 @@
+ 
+ void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, bool continuous){
+ 
+-	/*First thing, this is a new partition for a new analysis_type, therefore,
+-	 * to avoid a leak, erase the nodes partition that might come through
+-	 * pmy_nodes: */
+-	xDelete<bool>(*pmy_nodes);
+-
+-	/*Now, depending on whether we are running galerkin discontinous or continuous elements, carry out a different partition of the nodes: */
+ 	if(continuous==true)
+ 		ContinuousGalerkinNodesPartitioning(pmy_nodes,my_elements, my_vertices, iomodel);
+ 	else
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15461)
+@@ -11,7 +11,6 @@
+ void	CreateNodesHydrologyDCInefficient(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	bool continuous_galerkin=true;
+ 	int  hydrology_model;
+ 
+ 	/*Fetch parameters: */
+@@ -29,9 +28,6 @@
+ 		return;
+ 	}
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15461)
+@@ -10,18 +10,12 @@
+ 
+ void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool continuous_galerkin=true;
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15461)
+@@ -10,18 +10,12 @@
+ 
+ void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool continuous_galerkin=true;
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15461)
+@@ -10,18 +10,12 @@
+ 
+ void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool continuous_galerkin=true;
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 15461)
+@@ -0,0 +1,39 @@
++/*!\file:  EdgesPartitioning.cpp
++ * \brief: partition elements and nodes and vertices
++ */ 
++
++#include <string.h>
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++#include "./ModelProcessorx.h"
++
++void EdgesPartitioning(bool** pmy_edges,IoModel* iomodel){
++
++	/*Intermediaries*/
++	int  el1,el2;
++	bool my_edge;
++
++	/*Get edges and elements*/
++	CreateEdges(iomodel);
++
++	/*output: */
++	bool* my_edges=xNew<bool>(iomodel->numberofedges);
++
++	for(int i=0;i<iomodel->numberofedges;i++){
++
++		/*Get left and right elements*/
++		el1=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
++		el2=iomodel->edges[4*i+3]-1; //edges are [node1 node2 elem1 elem2]
++
++		/*Check whether we should include this edge (el2 is -2 for boundary edges)*/
++		my_edge = iomodel->my_elements[el1];
++		if(!my_edge && el2>=0){
++			my_edge = iomodel->my_elements[el2];
++		}
++
++		my_edges[i] = my_edge;
++	}
++
++	/*Free data and assign output pointers */
++	*pmy_edges=my_edges;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 15461)
+@@ -10,18 +10,12 @@
+ 
+ void	CreateNodesGia(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool continuous_galerkin=true;
+-
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	/*Continuous Galerkin partition of nodes: */
+-	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-
+ 	/*First fetch data: */
+ 	iomodel->FetchData(1,MaskVertexonwaterEnum);
+ 
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15460)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15461)
+@@ -242,6 +242,7 @@
+ 					./modules/ModelProcessorx/DistributeNumDofs.cpp\
+ 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp\
++					./modules/ModelProcessorx/EdgesPartitioning.cpp\
+ 					./modules/ModelProcessorx/SortDataSets.cpp\
+ 					./modules/ModelProcessorx/UpdateCounters.cpp\
+ 					./modules/ModelProcessorx/CreateDataSets.cpp\
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 15460)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 15461)
+@@ -27,7 +27,6 @@
+ 
+ 		/*Partitioning*/
+ 		bool *my_elements;
+-		bool *my_nodes;
+ 		int  *my_vertices;
+ 
+ 		/*Mesh properties and connectivity tables*/
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15460)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15461)
+@@ -27,7 +27,6 @@
+ 	this->constants=NULL;
+ 
+ 	this->my_elements=NULL;
+-	this->my_nodes=NULL;
+ 	this->my_vertices=NULL;
+ 
+ 	this->dim=-1;
+@@ -69,7 +68,6 @@
+ 
+ 	/*Initialize permanent data: */
+ 	this->my_elements = NULL;
+-	this->my_nodes    = NULL;
+ 	this->my_vertices = NULL;
+ 
+ 	FetchData(&this->dim,MeshDimensionEnum);
+@@ -107,7 +105,6 @@
+ 	if(this->independent_objects)delete this->independent_objects;
+ 
+ 	xDelete<bool>(this->my_elements);
+-	xDelete<bool>(this->my_nodes);
+ 	xDelete<int>(this->my_vertices);
+ 
+ 	xDelete<int>(this->elements);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15461-15462.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15461-15462.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15461-15462.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15461)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15462)
+@@ -7848,9 +7848,6 @@
+ 	gravity=matpar->GetG();
+ 	B=material->GetB();
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* vx_input=inputs->GetInput(VxEnum);   _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum);   _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum);   _assert_(vz_input);
+ 	Input* loadingforcex_input=inputs->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
+ 	Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
+ 	Input* loadingforcez_input=inputs->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15462-15463.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15462-15463.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15462-15463.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15462)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15463)
+@@ -7887,7 +7887,7 @@
+ 		}
+ 	}
+ 
+-	for(i=0;i<NUMVERTICES;i++) for(j=0;j<3;j++) pe->values[i*NDOF4+j]+=Pe_gaussian[i*NDOF4+j];
++	for(i=0;i<numdof;i++) pe->values[i]+=Pe_gaussian[i];
+ 
+ 	/*Transform coordinate system*/
+ 	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15463-15464.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15463-15464.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15463-15464.diff	(revision 16134)
@@ -0,0 +1,910 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15464)
+@@ -10,39 +10,14 @@
+ 
+ void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
++	/*Fetch parameters: */
+ 	bool ishutter;
+-
+-	/*Fetch parameters: */
+ 	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+ 	/*Now, is the flag ishutter on? otherwise, do nothing: */
+-	if(!ishutter){
+-		*pnodes=nodes;
+-		return;
+-	}
++	if(!ishutter) return;
+ 
+-	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,DiagnosticHutterAnalysisEnum));
+-
+-		}
+-	}
+-
+-	/*Clean fetched data: */
++	CreateNodes(pnodes,iomodel,DiagnosticHutterAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15464)
+@@ -10,27 +10,7 @@
+ 
+ void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+-	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,EnthalpyAnalysisEnum));
+-
+-		}
+-	}
+-
+-	/*Clean fetched data: */
++	CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15464)
+@@ -10,33 +10,10 @@
+ 
+ void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(iomodel->dim==2){
+-		*pnodes=nodes;
+-		return;
+-	}
++	if(iomodel->dim==2) return;
+ 
+-	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,DiagnosticVertAnalysisEnum));
+-
+-		}
+-	}
+-
+-	/*Clean fetched data: */
++	CreateNodes(pnodes,iomodel,DiagnosticVertAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15464)
+@@ -10,70 +10,20 @@
+ 
+ void	CreateNodesPrognostic(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int  i,j;
+-	int  node_id;
+-	int  vertex_id;
+-	int  io_index;
++	/*Fetch parameters: */
+ 	int  stabilization;
+-	bool *my_nodes = NULL;
+-
+-	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+ 	/*Check in 3d*/
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+-	/*First fetch data: */
++	/*Create Nodes either DG or CG depending on stabilization*/
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 	if(stabilization!=3){
+-
+-		/*Build Nodes dataset (Continuous Galerkin)*/
+-		for (i=0;i<iomodel->numberofvertices;i++){
+-
+-			if(iomodel->my_vertices[i]){
+-
+-				/*Add node to nodes dataset: */
+-				nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,PrognosticAnalysisEnum));
+-
+-			}
+-		}
++		CreateNodes(pnodes,iomodel,PrognosticAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+-
+-		/*Build Nodes dataset -> 3 for each element (Discontinuous Galerkin)*/
+-		NodesPartitioning(&my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,false);
+-		for (i=0;i<iomodel->numberofelements;i++){
+-			for (j=0;j<3;j++){
+-
+-				if(my_nodes[3*i+j]){ 
+-
+-					//Get index of the vertex on which the current node is located
+-					vertex_id=iomodel->elements[+3*i+j]; //(Matlab indexing)
+-					io_index=vertex_id-1;                //(C indexing)
+-					_assert_(vertex_id>0 && vertex_id<=iomodel->numberofvertices);
+-
+-					//Compute Node id
+-					node_id=iomodel->nodecounter+3*i+j+1;
+-
+-					/*Add node to nodes dataset: */
+-					nodes->AddObject(new Node(node_id,node_id-1,vertex_id,io_index,iomodel,PrognosticAnalysisEnum));
+-
+-				}
+-			}
+-		}
++		CreateNodes(pnodes,iomodel,PrognosticAnalysisEnum,P1DGEnum);
+ 	}
+-
+-	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	xDelete<bool>(my_nodes);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15464)
+@@ -10,35 +10,14 @@
+ 
+ void	CreateNodesHydrologyShreve(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
++	/*Fetch parameters: */
+ 	int  hydrology_model;
+-
+-	/*Fetch parameters: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+ 	/*Now, do we really want Shreve?*/
+-	if(hydrology_model!=HydrologyshreveEnum){
+-		*pnodes=nodes;
+-		return;
+-	}
++	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+-	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		if(iomodel->my_vertices[i]){
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,HydrologyShreveAnalysisEnum));
+-		}
+-	}
++	CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15464)
+@@ -10,27 +10,7 @@
+ 
+ void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+-	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,BedSlopeAnalysisEnum));
+-
+-		}
+-	}
+-
+-	/*Clean fetched data: */
++	CreateNodes(pnodes,iomodel,BedSlopeAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15464)
+@@ -20,51 +20,21 @@
+ 	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+ 	iomodel->Constant(&finiteelementssa,FlowequationFeSsaEnum);
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*First create nodes*/
+-	if(!nodes) nodes = new Nodes();
+-
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayealpattyn & !isstokes & !isl1l2){
+-		*pnodes=nodes;
+-		return;
+-	}
++	if(!ismacayealpattyn & !isstokes & !isl1l2) return;
+ 
+ 	/*Create nodes: */
+ 	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
+-		}
++	if(finiteelementssa==0){
++		CreateNodes(pnodes,iomodel,DiagnosticHorizAnalysisEnum,P1Enum);
+ 	}
+-
+-	if(finiteelementssa==1){
+-
+-		/*Quadratic element*/
+-		bool *my_edges = NULL;
+-		EdgesPartitioning(&my_edges,iomodel);
+-		CreateElementToEdgeConnectivity(iomodel);
+-
+-		for(int i=0;i<iomodel->numberofedges;i++){
+-			if(my_edges[i]){
+-				nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,0,iomodel,DiagnosticHorizAnalysisEnum));
+-			}
+-		}
+-		/*Clean up*/
+-		xDelete<bool>(my_edges);
++	else if(finiteelementssa==1){
++		CreateNodes(pnodes,iomodel,DiagnosticHorizAnalysisEnum,P2Enum);
+ 	}
+-
+-	/*Clean fetched data: */
++	else{
++		_error_("finite element not supported yet");
++	}
+ 	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15464)
+@@ -10,70 +10,20 @@
+ 
+ void	CreateNodesBalancethickness(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int  i,j;
+-	int  node_id;
+-	int  vertex_id;
+-	int  io_index;
++	/*Fetch parameters: */
+ 	int  stabilization;
+-	bool *my_nodes=NULL;
+-
+-	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+ 	/*Check in 3d*/
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+ 	if(stabilization!=3){
+-
+-		/*Build Nodes dataset (Continuous Galerkin)*/
+-		for (i=0;i<iomodel->numberofvertices;i++){
+-			if(iomodel->my_vertices[i]){
+-
+-				/*Add node to nodes dataset: */
+-				nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,BalancethicknessAnalysisEnum));
+-
+-			}
+-		}
++		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+-
+-		/*Build Nodes dataset -> 3 for each element (Discontinuous Galerkin)*/
+-		NodesPartitioning(&my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,false);
+-		for (i=0;i<iomodel->numberofelements;i++){
+-			for (j=0;j<3;j++){
+-
+-				if(my_nodes[3*i+j]){ 
+-
+-					//Get index of the vertex on which the current node is located
+-					vertex_id=iomodel->elements[3*i+j]; //(Matlab indexing)
+-					io_index=vertex_id-1;               //(C indexing)
+-					_assert_(vertex_id>0 && vertex_id<=iomodel->numberofvertices);
+-
+-					//Compute Node id
+-					node_id=iomodel->nodecounter+3*i+j+1;
+-
+-					/*Add node to nodes dataset: */
+-					nodes->AddObject(new Node(node_id,node_id-1,vertex_id,io_index,iomodel,BalancethicknessAnalysisEnum));
+-
+-				}
+-			}
+-		}
++		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
+ 	}
+-
+-	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	xDelete<bool>(my_nodes);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15464)
+@@ -10,42 +10,17 @@
+ 
+ void	CreateNodesHydrologyDCEfficient(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool isefficientlayer;
++	/*Now, do we really want DC?*/
+ 	int  hydrology_model;
+-
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+-	/*Now, do we really want DC?*/
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum){
+-		*pnodes=nodes;
+-		return;
+-	}
++	if(hydrology_model!=HydrologydcEnum) return;
+ 
+ 	/*Do we want an efficient layer*/
++	bool isefficientlayer;
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer){
+-		*pnodes=nodes;
+-		return;
+-	}
++	if(!isefficientlayer) return;
+ 
+-	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		if(iomodel->my_vertices[i]){
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,HydrologyDCEfficientAnalysisEnum));
+-
+-		}
+-	}
++	CreateNodes(pnodes,iomodel,HydrologyDCEfficientAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15464)
+@@ -22,6 +22,7 @@
+ void CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
++void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element);
+ 
+ /*Creation of fem datasets: specialised drivers: */
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15464)
+@@ -10,36 +10,14 @@
+ 
+ void	CreateNodesHydrologyDCInefficient(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Intermediary*/
++	/*Fetch parameters: */
+ 	int  hydrology_model;
+-
+-	/*Fetch parameters: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+ 	/*Now, do we really want DC?*/
+-	if(hydrology_model!=HydrologydcEnum){
+-		*pnodes=nodes;
+-		return;
+-	}
++	if(hydrology_model!=HydrologydcEnum) return;
+ 
+-	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		if(iomodel->my_vertices[i]){
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
+-
+-		}
+-	}
++	CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15464)
+@@ -10,27 +10,7 @@
+ 
+ void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+-	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,SurfaceSlopeAnalysisEnum));
+-
+-		}
+-	}
+-
+-	/*Clean fetched data: */
++	CreateNodes(pnodes,iomodel,SurfaceSlopeAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15464)
+@@ -10,26 +10,7 @@
+ 
+ void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+-	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,ThermalAnalysisEnum));
+-
+-		}
+-	}
+-
+-	/*Clean fetched data: */
++	CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15464)
+@@ -10,25 +10,7 @@
+ 
+ void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+-	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,MeltingAnalysisEnum));
+-
+-		}
+-	}
++	CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 15464)
+@@ -10,28 +10,7 @@
+ 
+ void	CreateNodesGia(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*Create nodes if they do not exist yet*/
+-	if(!nodes) nodes = new Nodes();
+-
+-	/*First fetch data: */
+ 	iomodel->FetchData(1,MaskVertexonwaterEnum);
+-
+-	/*First fetch data: */
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add node to nodes dataset: */
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,GiaAnalysisEnum));
+-
+-		}
+-	}
+-
+-	/*Clean fetched data: */
++	CreateNodes(pnodes,iomodel,GiaAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(1,MaskVertexonwaterEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp	(revision 15464)
+@@ -14,32 +14,32 @@
+ 
+ void SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters){
+ 
+-	Elements* elements=NULL;
+-	Nodes* nodes=NULL;
+-	Vertices* vertices=NULL;
+-	Loads* loads=NULL;
+-	Materials* materials=NULL;
+-	Constraints* constraints=NULL;
+-	Parameters* parameters=NULL;
++	Elements    *elements    = NULL;
++	Nodes       *nodes       = NULL;
++	Vertices    *vertices    = NULL;
++	Loads       *loads       = NULL;
++	Materials   *materials   = NULL;
++	Constraints *constraints = NULL;
++	Parameters  *parameters  = NULL;
+ 
+ 	/*Recover pointers: */
+-	elements=*pelements;
+-	nodes=*pnodes;
+-	vertices=*pvertices;
+-	loads=*ploads;
+-	materials=*pmaterials;
+-	constraints=*pconstraints;
+-	parameters=*pparameters;
++	elements    = *pelements;
++	nodes       = *pnodes;
++	vertices    = *pvertices;
++	loads       = *ploads;
++	materials   = *pmaterials;
++	constraints = *pconstraints;
++	parameters  = *pparameters;
+ 
+-	/*All our datasets are already ordered by ids. Set presort flag so that later on, when sorting is requested on these 
+-	 * datasets, it will not be redone: */
++	/*All our datasets are already ordered by ids. Set presort flag so that
++	 * later on, when sorting is requested on these datasets, it will not be
++	 * redone: */
++	if(elements)    elements->Presort();
++	if(nodes)       nodes->Presort();
++	if(vertices)    vertices->Presort();
++	if(loads)       loads->Presort();
++	if(materials)   materials->Presort();
++	if(constraints) constraints->Presort();
++	if(parameters)  parameters->Presort();
+ 
+-	if(elements)elements->Presort();
+-	if(nodes)nodes->Presort();
+-	if(vertices)vertices->Presort();
+-	if(loads)loads->Presort();
+-	if(materials)materials->Presort();
+-	if(constraints)constraints->Presort();
+-	if(parameters)parameters->Presort();
+-
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15464)
+@@ -20,24 +20,24 @@
+ 
+ 	int my_rank;
+ 	int num_procs;
+-	int    numberofelements2d;
+-	int    numberofvertices2d;
+-	int    numlayers;
+-	int    numrifts;
+-	int    numvertex_pairing;
++	int numberofelements2d;
++	int numberofvertices2d;
++	int numlayers;
++	int numrifts;
++	int numvertex_pairing;
+ 
+ 	/*output: */
+-	bool* my_elements=NULL;
+-	int* my_vertices=NULL;
++	bool *my_elements = NULL;
++	int  *my_vertices = NULL;
+ 
+ 	/*intermediary: */
+-	int* epart=NULL; //element partitioning.
+-	int* npart=NULL; //node partitioning.
+-	int  elements_width; //number of columns in elements (2d->3, 3d->6)
+-	int  el1,el2;
+-	int* elements2d=NULL;
+-	int* vertex_pairing=NULL;
+-	IssmDouble* riftinfo=NULL;
++	int        *epart          = NULL; //element partitioning.
++	int        *npart          = NULL; //node partitioning.
++	int         elements_width;        //number of columns in elements (2d->3, 3d->6)
++	int         el1,el2;
++	int        *elements2d     = NULL;
++	int        *vertex_pairing = NULL;
++	IssmDouble *riftinfo       = NULL;
+ 
+ 	/*Get my_rank:*/
+ 	my_rank   = IssmComm::GetRank();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15464)
+@@ -15,7 +15,6 @@
+ 
+ void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
+ 
+-	bool        continuous = true;
+ 	Elements   *elements   = NULL;
+ 	Materials  *materials  = NULL;
+ 	Parameters *parameters = NULL;
+@@ -29,9 +28,12 @@
+ 	CreateElementsVerticesAndMaterials(pelements, pvertices, pmaterials, iomodel,nummodels);
+ 
+ 	/*Recover elements and materials, for future update: */
+-	elements=*pelements;
+-	materials=*pmaterials;
++	elements  = *pelements;
++	materials = *pmaterials;
+ 
++	/*Creates Nodes dataset if empty*/
++	if(!*pnodes) *pnodes = new Nodes();
++
+ 	/*Now, branch onto analysis dependent model generation: */
+ 	switch(analysis_type){
+ 
+@@ -168,7 +170,8 @@
+ 	/*Sort datasets: */
+ 	SortDataSets(pelements,pnodes,pvertices, ploads, pmaterials, pconstraints, pparameters);
+ 
+-	/*Update counters, because we have created more nodes, loads and constraints, and ids for objects created in next call to CreateDataSets
++	/* Update counters, because we have created more nodes, loads and
++	 * constraints, and ids for objects created in next call to CreateDataSets
+ 	 * will need to start at the end of the updated counters: */
+ 	UpdateCounters(iomodel,pnodes,ploads,pconstraints);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15464)
+@@ -0,0 +1,69 @@
++/*
++ * CreateNodes.c:
++ */
++
++#include "../../toolkits/toolkits.h"
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++#include "../MeshPartitionx/MeshPartitionx.h"
++#include "./ModelProcessorx.h"
++
++void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element){
++
++	/*Intermediaries*/
++	int   i,j;
++	bool *my_edges = NULL;
++	bool *my_nodes = NULL;
++
++	/*Recover pointer: */
++	Nodes* nodes=*pnodes;
++
++	/*First create nodes*/
++	if(!nodes) nodes = new Nodes();
++
++	switch(finite_element){
++		case P1Enum:
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis));
++				}
++			}
++			break;
++
++		case P1DGEnum:
++			NodesPartitioning(&my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,false);
++			for(i=0;i<iomodel->numberofelements;i++){
++				for(j=0;j<3;j++){
++					if(my_nodes[3*i+j]){ 
++						nodes->AddObject(new Node(iomodel->nodecounter+3*i+j+1,iomodel->nodecounter+3*i+j,iomodel->elements[+3*i+j]-1,iomodel,analysis));
++
++					}
++				}
++			}
++			break;
++
++		case P2Enum:
++			EdgesPartitioning(&my_edges,iomodel);
++			CreateElementToEdgeConnectivity(iomodel);
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis));
++				}
++			}
++			for(i=0;i<iomodel->numberofedges;i++){
++				if(my_edges[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis));
++				}
++			}
++			break;
++
++		default:
++			_error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet");
++	}
++
++	/*Clean up*/
++	xDelete<bool>(my_edges);
++
++	/*Assign output pointer: */
++	*pnodes=nodes;
++}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15463)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15464)
+@@ -253,6 +253,7 @@
+ 					./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\
++					./modules/ModelProcessorx/CreateNodes.cpp\
+ 					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.h\
+ 					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp\
+ 					./modules/NodesDofx/NodesDofx.h\
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 15463)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 15464)
+@@ -39,7 +39,7 @@
+ 
+ 		/*Node constructors, destructors {{{*/
+ 		Node();
+-		Node(int node_id,int node_sid, int vertex_id,int io_index, IoModel* iomodel,int analysis_type);
++		Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type);
+ 		~Node();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15463)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15464)
+@@ -21,8 +21,8 @@
+ 	this->inputs=NULL;
+ }
+ /*}}}*/
+-/*FUNCTION Node::Node(int node_id,int node_sid,int vertex_id,int io_index, IoModel* iomodel,int analysis_type) {{{*/
+-Node::Node(int node_id,int node_sid,int vertex_id,int io_index, IoModel* iomodel,int analysis_type){
++/*FUNCTION Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type) {{{*/
++Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type){
+ 
+ 	/*Intermediary*/
+ 	int k,l;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15464-15465.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15464-15465.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15464-15465.diff	(revision 16134)
@@ -0,0 +1,570 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 15465)
+@@ -8,12 +8,5 @@
+ 
+ void	CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
++	/*No loads*/
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15465)
+@@ -25,14 +25,8 @@
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+ 	/*Now, is the flag ishutter on? otherwise, do nothing: */
+-	if (!ishutter){
+-		*pconstraints=constraints;
+-		return;
+-	}
++	if (!ishutter) return;
+ 
+ 	/*Fetch data: */
+ 	iomodel->FetchData(3,DiagnosticSpcvxEnum,DiagnosticSpcvyEnum,FlowequationVertexEquationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 15465)
+@@ -29,14 +29,8 @@
+ 	/*Recover pointer: */
+ 	Constraints* constraints=*pconstraints;
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+ 	/*return if 2d mesh*/
+-	if(iomodel->dim==2){
+-		*pconstraints=constraints;
+-		return;
+-	}
++	if(iomodel->dim==2) return;
+ 
+ 	/*Fetch data: */
+ 	iomodel->FetchData(&spcvector,&M,&N,ThermalSpctemperatureEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 15465)
+@@ -8,12 +8,5 @@
+ 
+ void	CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
++	/*No loads */
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15465)
+@@ -19,14 +19,8 @@
+ 	/*Recover pointer: */
+ 	Constraints* constraints=*pconstraints;
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+ 	/*return if 2d mesh*/
+-	if(iomodel->dim==2){
+-		*pconstraints=constraints;
+-		return;
+-	}
++	if(iomodel->dim==2) *pconstraints=constraints;
+ 
+ 	/*Fetch data: */
+ 	iomodel->FetchData(2,DiagnosticSpcvzEnum,FlowequationBorderstokesEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 15465)
+@@ -8,12 +8,6 @@
+ 
+ void	CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
++	/*No loads*/
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15465)
+@@ -21,9 +21,6 @@
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+ 	/*Loads only in DG*/
+ 	if (stabilization==3){
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 15465)
+@@ -13,9 +13,6 @@
+ 	/*Recover pointer: */
+ 	Constraints* constraints=*pconstraints;
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+ 	/*Do not add constraints in DG, they are weakly imposed*/
+ 	if(stabilization!=3){
+ 		IoModelToConstraintsx(constraints,iomodel,PrognosticSpcthicknessEnum,PrognosticAnalysisEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp	(revision 15465)
+@@ -8,16 +8,6 @@
+ 
+ void	CreateLoadsHydrologyShreve(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int      numberofvertices;
+-	Pengrid *pengrid = NULL;
++	/*No loads*/
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp	(revision 15465)
+@@ -11,21 +11,14 @@
+ void	CreateConstraintsHydrologyShreve(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Recover pointer: */
+-	int          hydrology_model;
+-	bool         isefficientlayer;
+ 	Constraints* constraints=*pconstraints;
+ 
+ 	/*retrieve some parameters: */
++	int          hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
++	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+-	if(hydrology_model!=HydrologyshreveEnum){
+-		*pconstraints=constraints;
+-		return;
+-	}
+-
+ 	IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyShreveAnalysisEnum);
+ 
+ 	/*Assign output pointer: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 15465)
+@@ -8,12 +8,6 @@
+ 
+ void	CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
++	/*No loads*/
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 15465)
+@@ -9,12 +9,6 @@
+ 
+ void	CreateConstraintsBedSlope(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
++	/*No constraints*/
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15465)
+@@ -39,14 +39,8 @@
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayealpattyn & !isstokes & !isl1l2){
+-		*ploads=loads;
+-		return;
+-	}
++	if(!ismacayealpattyn & !isstokes & !isl1l2) return;
+ 
+ 	/*Create pressure loads as boundary conditions. Pay attention to the partitioning if we are running in parallel (the nodes
+ 	 * referenced by a certain load must belong to the cluster node): */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15465)
+@@ -55,9 +55,6 @@
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+ 	if(!ismacayealpattyn & !isstokes & !isl1l2){
+ 		*pconstraints=constraints;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15465)
+@@ -18,9 +18,6 @@
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+ 	/*Loads only in DG*/
+ 	if (stabilization==3){
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 15465)
+@@ -13,9 +13,6 @@
+ 	/*Recover pointer: */
+ 	Constraints* constraints=*pconstraints;
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+ 	/*Do not add constraints in DG*/
+ 	if(stabilization!=3){
+ 		IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancethicknessAnalysisEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp	(revision 15465)
+@@ -11,26 +11,17 @@
+ void	CreateConstraintsHydrologyDCEfficient(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Recover pointer: */
+-	bool         isefficientlayer;
+-	int          hydrology_model;
+ 	Constraints* constraints=*pconstraints;
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+ 	/*Do we really want DC?*/
++	int  hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum){
+-		*pconstraints=constraints;
+-		return;
+-	}
++	if(hydrology_model!=HydrologydcEnum) return;
+ 
+ 	/*Do we want an efficient layer*/
++	bool isefficientlayer;
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer){
+-		*pconstraints=constraints;
+-		return;
+-	}
++	if(!isefficientlayer) return;
+ 
+ 	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpceplHeadEnum,HydrologyDCEfficientAnalysisEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp	(revision 15465)
+@@ -8,29 +8,18 @@
+ 
+ void	CreateLoadsHydrologyDCEfficient(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	bool isefficientlayer;
+-	int  hydrology_model;
+-
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+ 	/*Do we really want DC?*/
++	int  hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum){
+-		*ploads=loads;
+-		return;
+-	}
++	if(hydrology_model!=HydrologydcEnum) return;
+ 
+ 	/*Do we want an efficient layer*/
++	bool isefficientlayer;
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer){
+-		*ploads=loads;
+-		return;
+-	}
++	if(!isefficientlayer) return;
+ 
+ 	/*Nothing for now*/
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15465)
+@@ -8,22 +8,13 @@
+ 
+ void	CreateLoadsHydrologyDCInefficient(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int hydrology_model;
+-
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+ 	/*Fetch parameters: */
++	int hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	if(hydrology_model!=HydrologydcEnum){
+-		*ploads=loads;
+-		return;
+-	}
++	if(hydrology_model!=HydrologydcEnum) return;
+ 	
+ 	iomodel->FetchData(1,MeshVertexonbedEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp	(revision 15465)
+@@ -11,20 +11,13 @@
+ void	CreateConstraintsHydrologyDCInefficient(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Recover pointer: */
+-	int          hydrology_model;
+ 	Constraints* constraints=*pconstraints;
+ 
+ 	/*retrieve some parameters: */
++	int hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++	if(hydrology_model!=HydrologydcEnum) return;
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+-	if(hydrology_model!=HydrologydcEnum){
+-		*pconstraints=constraints;
+-		return;
+-	}
+-
+ 	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyDCInefficientAnalysisEnum);
+ 
+ 	/*Assign output pointer: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 15465)
+@@ -8,12 +8,6 @@
+ 
+ void	CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
++	/*No loads*/
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 15465)
+@@ -9,12 +9,5 @@
+ 
+ void	CreateConstraintsSurfaceSlope(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
++	/*No constraints*/
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 15465)
+@@ -13,10 +13,7 @@
+ 
+ 	if(iomodel->dim==2) _error_("2d meshes not supported yet");
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	//create penalties for nodes: no node can have a temperature over the melting point
++	/*create penalties for nodes: no node can have a temperature over the melting point*/
+ 	iomodel->FetchData(1,ThermalSpctemperatureEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 15465)
+@@ -13,9 +13,6 @@
+ 	/*Recover pointer: */
+ 	Constraints* constraints=*pconstraints;
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+ 	/*Only 3d mesh supported*/
+ 	if(iomodel->dim==3){
+ 		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 15465)
+@@ -14,9 +14,6 @@
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+ 	iomodel->FetchData(1,MeshVertexonbedEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 15465)
+@@ -9,12 +9,6 @@
+ 
+ void	CreateConstraintsMelting(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
++	/*No constraints*/
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp	(revision 15465)
+@@ -8,12 +8,6 @@
+ 
+ void	CreateLoadsGia(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
++	/*No loads*/
+ 
+-	/*Create loads if they do not exist yet*/
+-	if(!loads) loads = new Loads();
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp	(revision 15465)
+@@ -9,12 +9,6 @@
+ 
+ void	CreateConstraintsGia(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
++	/*No constraints*/
+ 
+-	/*Create constraints if they do not exist yet*/
+-	if(!constraints) constraints = new Constraints();
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15464)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15465)
+@@ -31,8 +31,10 @@
+ 	elements  = *pelements;
+ 	materials = *pmaterials;
+ 
+-	/*Creates Nodes dataset if empty*/
+-	if(!*pnodes) *pnodes = new Nodes();
++	/*Creates Nodes and constraints datasets if empty*/
++	if(!*pnodes)       *pnodes       = new Nodes();
++	if(!*pconstraints) *pconstraints = new Constraints();
++	if(!*ploads)       *ploads       = new Loads();
+ 
+ 	/*Now, branch onto analysis dependent model generation: */
+ 	switch(analysis_type){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15465-15466.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15465-15466.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15465-15466.diff	(revision 16134)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15465)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15466)
+@@ -6898,7 +6898,6 @@
+ ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSViscous(void){
+ 
+ 	int        numdof  = NUMVERTICES*NDOF4;
+-	int        numvert = NUMVERTICES;
+ 
+ 	/*Intermediaries */
+ 	int        i,j,approximation;
+@@ -6968,7 +6967,7 @@
+ 					&B_stab[0][0],3,numvert,0,
+ 					&Ke_temp_stab[0][0],1);
+ 
+-		for(i=0;i<numvert;i++) for(j=0;j<numvert;j++) Ke->values[numdof*(i*4+3)+j*4+3]+=Ke_temp_stab[i][j];
++		for(i=0;i<NUMVERTICES;i++) for(j=0;j<NUMVERTICES;j++) Ke->values[numdof*(i*4+3)+j*4+3]+=Ke_temp_stab[i][j];
+ 
+ 	}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15466-15467.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15466-15467.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15466-15467.diff	(revision 16134)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15466)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15467)
+@@ -6906,7 +6906,7 @@
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble B[8][24];
+ 	IssmDouble B_prime[8][24];
+-	IssmDouble B_stab[3][numvert];
++	IssmDouble B_stab[3][NUMVERTICES];
+ 	IssmDouble D_scalar,D_scalar_stab;
+ 	IssmDouble D[8][8]={0.0};
+ 	IssmDouble D_stab[3][3]={0.0};
+@@ -6962,9 +6962,9 @@
+ 		D_stab[1][0]=0;             D_stab[1][1]=D_scalar_stab; D_stab[1][2]=0;
+ 		D_stab[2][0]=0;             D_stab[2][1]=0;             D_stab[2][2]=D_scalar_stab;
+ 
+-		TripleMultiply(&B_stab[0][0],3,numvert,1,
++		TripleMultiply(&B_stab[0][0],3,6,1,
+ 					&D_stab[0][0],3,3,0,
+-					&B_stab[0][0],3,numvert,0,
++					&B_stab[0][0],3,6,0,
+ 					&Ke_temp_stab[0][0],1);
+ 
+ 		for(i=0;i<NUMVERTICES;i++) for(j=0;j<NUMVERTICES;j++) Ke->values[numdof*(i*4+3)+j*4+3]+=Ke_temp_stab[i][j];
Index: /issm/oecreview/Archive/15392-16133/ISSM-15467-15468.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15467-15468.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15467-15468.diff	(revision 16134)
@@ -0,0 +1,934 @@
+Index: ../trunk-jpl/m4/issm_options.cmake
+===================================================================
+--- ../trunk-jpl/m4/issm_options.cmake	(revision 0)
++++ ../trunk-jpl/m4/issm_options.cmake	(revision 15468)
+@@ -0,0 +1 @@
++option(threed "Compile with 3D capabilities (Default is yes)." ON)
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 15467)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 15468)
+@@ -1,234 +1,678 @@
+ # Include Directory {{{
+-include_directories(AFTER $ENV{ISSM_DIR}/src/c \
+-                          $ENV{ISSM_DIR}/src/c/main \
+-                          $ENV{ISSM_DIR}/src/c/datastructure \
+-                          $ENV{ISSM_DIR}/src/c/classes \
+-                          $ENV{ISSM_DIR}/src/c/classes/Options \
+-                          $ENV{ISSM_DIR}/src/c/classes/ElementResults \
+-                          $ENV{ISSM_DIR}/src/c/classes/ExternalResults \
+-                          $ENV{ISSM_DIR}/src/c/classes/Elements \
+-                          $ENV{ISSM_DIR}/src/c/classes/Inputs \
+-                          $ENV{ISSM_DIR}/src/c/classes/Materials \
+-                          $ENV{ISSM_DIR}/src/c/classes/Constraints \
+-                          $ENV{ISSM_DIR}/src/c/classes/Loads \
+-                          $ENV{ISSM_DIR}/src/c/classes/matrix \
+-                          $ENV{ISSM_DIR}/src/c/classes/Params \
+-                          $ENV{ISSM_DIR}/src/c/classes/Params \
+-                          $ENV{ISSM_DIR}/src/c/shared \
+-                          $ENV{ISSM_DIR}/src/c/shared/MemOps \
+-                          $ENV{ISSM_DIR}/src/c/shared/Matrix \
+-                          $ENV{ISSM_DIR}/src/c/shared/io \
+-                          $ENV{ISSM_DIR}/src/c/shared/io/Disk \
+-                          $ENV{ISSM_DIR}/src/c/shared/io/Print \
+-                          $ENV{ISSM_DIR}/src/c/shared/io/Comm \
+-                          $ENV{ISSM_DIR}/src/c/shared/LatLong \
+-                          $ENV{ISSM_DIR}/src/c/shared/Enum \
+-                          $ENV{ISSM_DIR}/src/c/shared/Numerics \
+-                          $ENV{ISSM_DIR}/src/c/shared/Exceptions \
+-                          $ENV{ISSM_DIR}/src/c/shared/Sorting \
+-                          $ENV{ISSM_DIR}/src/c/shared/Elements \
+-                          $ENV{ISSM_DIR}/src/c/shared/String \
+-                          $ENV{ISSM_DIR}/src/c/toolkits \
+-                          $ENV{ISSM_DIR}/src/c/toolkits/metis \
+-                          $ENV{ISSM_DIR}/src/c/toolkits/issm \
+-                          $ENV{ISSM_DIR}/src/c/toolkits/adolc \
+-                          $ENV{ISSM_DIR}/src/c/toolkits/triangle \
+-                          $ENV{ISSM_DIR}/src/c/toolkits/objects \
+-                          $ENV{ISSM_DIR}/src/c/modules \
+-                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx \
+-                          $ENV{ISSM_DIR}/src/c/modules/ParseToolkitsOptionsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/NodesDofx \
+-                          $ENV{ISSM_DIR}/src/c/modules/NodalValuex \
+-                          $ENV{ISSM_DIR}/src/c/modules/VerticesDofx \
+-                          $ENV{ISSM_DIR}/src/c/modules/VertexCoordinatesx \
+-                          $ENV{ISSM_DIR}/src/c/modules/OutputResultsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/InputDuplicatex \
+-                          $ENV{ISSM_DIR}/src/c/modules/InputScalex \
+-                          $ENV{ISSM_DIR}/src/c/modules/SurfaceAreax \
+-                          $ENV{ISSM_DIR}/src/c/modules/CreateNodalConstraintsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/UpdateDynamicConstraintsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/IoModelToConstraintsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromConstantx \
+-                          $ENV{ISSM_DIR}/src/c/modules/GetSolutionFromInputsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/GetVectorFromInputsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorx \
+-                          $ENV{ISSM_DIR}/src/c/modules/InputArtificialNoisex \
+-                          $ENV{ISSM_DIR}/src/c/modules/ConfigureObjectsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/ComputeBasalStressx \
+-                          $ENV{ISSM_DIR}/src/c/modules/ComputeStrainRatex \
+-                          $ENV{ISSM_DIR}/src/c/modules/SpcNodesx \
+-                          $ENV{ISSM_DIR}/src/c/modules/PositiveDegreeDayx \
+-                          $ENV{ISSM_DIR}/src/c/modules/Delta18oParameterizationx \
+-                          $ENV{ISSM_DIR}/src/c/modules/SmbGradientsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/MeshPartitionx \
+-                          $ENV{ISSM_DIR}/src/c/modules/Reducevectorgtofx \
+-                          $ENV{ISSM_DIR}/src/c/modules/Reduceloadx \
+-                          $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex \
+-                          $ENV{ISSM_DIR}/src/c/modules/ResetConstraintsx \
+-                          $ENV{ISSM_DIR}/src/c/modules/ResetCoordinateSystemx \
+-                          $ENV{ISSM_DIR}/src/c/modules/Solverx \
+-                          $ENV{ISSM_DIR}/src/c/modules/VecMergex \
+-                          $ENV{ISSM_DIR}/src/c/modules/Mergesolutionfromftogx \
+-                          $ENV{ISSM_DIR}/src/c/modules/InputToResultx \
+-                          $ENV{ISSM_DIR}/src/c/analyses \
+-                          $ENV{ISSM_DIR}/src/c/solutionsequences \
+-                          $ENV{ISSM_DIR}/src/c/solutionsequences \
++include_directories(AFTER $ENV{ISSM_DIR}/ 
++                          $ENV{ISSM_DIR}/src/c 
++                          $ENV{ISSM_DIR}/src/c/main 
++                          $ENV{ISSM_DIR}/src/c/datastructure 
++                          $ENV{ISSM_DIR}/src/c/classes 
++                          $ENV{ISSM_DIR}/src/c/classes/Options 
++                          $ENV{ISSM_DIR}/src/c/classes/ElementResults 
++                          $ENV{ISSM_DIR}/src/c/classes/ExternalResults 
++                          $ENV{ISSM_DIR}/src/c/classes/Elements 
++                          $ENV{ISSM_DIR}/src/c/classes/Inputs 
++                          $ENV{ISSM_DIR}/src/c/classes/Materials 
++                          $ENV{ISSM_DIR}/src/c/classes/Constraints 
++                          $ENV{ISSM_DIR}/src/c/classes/Loads 
++                          $ENV{ISSM_DIR}/src/c/classes/matrix 
++                          $ENV{ISSM_DIR}/src/c/classes/Params 
++                          $ENV{ISSM_DIR}/src/c/classes/Params 
++                          $ENV{ISSM_DIR}/src/c/shared 
++                          $ENV{ISSM_DIR}/src/c/shared/MemOps 
++                          $ENV{ISSM_DIR}/src/c/shared/Matrix 
++                          $ENV{ISSM_DIR}/src/c/shared/io 
++                          $ENV{ISSM_DIR}/src/c/shared/io/Disk 
++                          $ENV{ISSM_DIR}/src/c/shared/io/Print 
++                          $ENV{ISSM_DIR}/src/c/shared/io/Comm 
++                          $ENV{ISSM_DIR}/src/c/shared/LatLong 
++                          $ENV{ISSM_DIR}/src/c/shared/Enum 
++                          $ENV{ISSM_DIR}/src/c/shared/Numerics 
++                          $ENV{ISSM_DIR}/src/c/shared/Exceptions 
++                          $ENV{ISSM_DIR}/src/c/shared/Sorting 
++                          $ENV{ISSM_DIR}/src/c/shared/Elements 
++                          $ENV{ISSM_DIR}/src/c/shared/String 
++                          $ENV{ISSM_DIR}/src/c/toolkits 
++                          $ENV{ISSM_DIR}/src/c/toolkits/metis 
++                          $ENV{ISSM_DIR}/src/c/toolkits/issm 
++                          $ENV{ISSM_DIR}/src/c/toolkits/adolc 
++                          $ENV{ISSM_DIR}/src/c/toolkits/triangle 
++                          $ENV{ISSM_DIR}/src/c/toolkits/objects 
++                          $ENV{ISSM_DIR}/src/c/modules 
++                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx 
++                          $ENV{ISSM_DIR}/src/c/modules/ParseToolkitsOptionsx 
++                          $ENV{ISSM_DIR}/src/c/modules/NodesDofx 
++                          $ENV{ISSM_DIR}/src/c/modules/NodalValuex 
++                          $ENV{ISSM_DIR}/src/c/modules/VerticesDofx 
++                          $ENV{ISSM_DIR}/src/c/modules/VertexCoordinatesx 
++                          $ENV{ISSM_DIR}/src/c/modules/OutputResultsx 
++                          $ENV{ISSM_DIR}/src/c/modules/InputDuplicatex 
++                          $ENV{ISSM_DIR}/src/c/modules/InputScalex 
++                          $ENV{ISSM_DIR}/src/c/modules/SurfaceAreax 
++                          $ENV{ISSM_DIR}/src/c/modules/CreateNodalConstraintsx 
++                          $ENV{ISSM_DIR}/src/c/modules/UpdateDynamicConstraintsx 
++                          $ENV{ISSM_DIR}/src/c/modules/IoModelToConstraintsx 
++                          $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromConstantx 
++                          $ENV{ISSM_DIR}/src/c/modules/GetSolutionFromInputsx 
++                          $ENV{ISSM_DIR}/src/c/modules/GetVectorFromInputsx 
++                          $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorx 
++                          $ENV{ISSM_DIR}/src/c/modules/InputArtificialNoisex 
++                          $ENV{ISSM_DIR}/src/c/modules/ConfigureObjectsx 
++                          $ENV{ISSM_DIR}/src/c/modules/ComputeBasalStressx 
++                          $ENV{ISSM_DIR}/src/c/modules/ComputeStrainRatex 
++                          $ENV{ISSM_DIR}/src/c/modules/SpcNodesx 
++                          $ENV{ISSM_DIR}/src/c/modules/PositiveDegreeDayx 
++                          $ENV{ISSM_DIR}/src/c/modules/Delta18oParameterizationx 
++                          $ENV{ISSM_DIR}/src/c/modules/SmbGradientsx 
++                          $ENV{ISSM_DIR}/src/c/modules/MeshPartitionx 
++                          $ENV{ISSM_DIR}/src/c/modules/Reducevectorgtofx 
++                          $ENV{ISSM_DIR}/src/c/modules/Reduceloadx 
++                          $ENV{ISSM_DIR}/src/c/modules/ConstraintsStatex 
++                          $ENV{ISSM_DIR}/src/c/modules/ResetConstraintsx 
++                          $ENV{ISSM_DIR}/src/c/modules/ResetCoordinateSystemx 
++                          $ENV{ISSM_DIR}/src/c/modules/Solverx 
++                          $ENV{ISSM_DIR}/src/c/modules/VecMergex 
++                          $ENV{ISSM_DIR}/src/c/modules/Mergesolutionfromftogx 
++                          $ENV{ISSM_DIR}/src/c/modules/InputToResultx 
++                          $ENV{ISSM_DIR}/src/c/analyses 
++                          $ENV{ISSM_DIR}/src/c/solutionsequences 
++                          $ENV{ISSM_DIR}/src/c/solutionsequences)
+ # }}}
+-# Core Sources{{{
+-set(core_sources   	./datastructures/DataSet.cpp\
+-					./classes/gauss/GaussTria.cpp\
+-					./classes/FemModel.cpp\
+-					./classes/Loads/Friction.cpp\
+-					./classes/Inputs/TransientInput.cpp\
+-					./classes/Constraints/SpcTransient.cpp\
+-					./classes/IndependentObject.cpp\
+-					./classes/DependentObject.cpp\
+-					./classes/DofIndexing.cpp\
+-					./classes/IoModel.cpp\
+-					./classes/Contours.cpp\
+-					./classes/Nodes.cpp\
+-					./classes/Vertices.cpp\
+-					./classes/Node.cpp\
+-					./classes/Vertex.cpp\
+-					./classes/Hook.cpp\
+-					./classes/Patch.cpp\
+-					./classes/ElementResults/DoubleElementResult.cpp\
+-					./classes/ElementResults/TriaP1ElementResult.cpp\
+-					./classes/ElementResults/BoolElementResult.cpp\
+-					./classes/ExternalResults/Results.cpp\
+-					./classes/Elements/Elements.cpp\
+-					./classes/Elements/ElementHook.cpp\
+-					./classes/Elements/Tria.cpp\
+-					./classes/Elements/TriaRef.cpp\
+-					./classes/Inputs/Inputs.cpp\
+-					./classes/Inputs/TriaInput.cpp\
+-					./classes/Inputs/BoolInput.cpp\
+-					./classes/Inputs/IntInput.cpp\
+-					./classes/Inputs/DoubleInput.cpp\
+-					./classes/Inputs/DatasetInput.cpp\
+-					./classes/Materials/Materials.cpp\
+-					./classes/Materials/Matice.cpp\
+-					./classes/Materials/Matdamageice.cpp\
+-					./classes/Materials/Matpar.cpp\
+-					./classes/Constraints/Constraints.cpp\
+-					./classes/Constraints/SpcStatic.cpp\
+-					./classes/Constraints/SpcDynamic.cpp\
+-					./classes/Loads/Loads.cpp\
+-					./classes/Loads/Penpair.cpp\
+-					./classes/Loads/Pengrid.cpp\
+-					./classes/Loads/Icefront.cpp\
+-					./classes/Loads/Numericalflux.cpp\
+-					./classes/matrix/ElementMatrix.cpp\
+-					./classes/matrix/ElementVector.cpp\
+-					./classes/Params/Parameters.cpp\
+-					./classes/Params/BoolParam.cpp\
+-					./classes/Params/IntParam.cpp\
+-					./classes/Params/IntVecParam.cpp\
+-					./classes/Params/IntMatParam.cpp\
+-					./classes/Params/DoubleParam.cpp\
+-					./classes/Params/FileParam.cpp\
+-					./classes/Params/StringArrayParam.cpp\
+-					./classes/Params/DoubleMatParam.cpp\
+-					./classes/Params/DoubleTransientMatParam.cpp\
+-					./classes/Params/DoubleMatArrayParam.cpp\
+-					./classes/Params/DoubleVecParam.cpp\
+-					./classes/Params/StringParam.cpp\
+-					./classes/Params/MatrixParam.cpp\
+-					./classes/Params/VectorParam.cpp\
+-					./classes/Params/TransientParam.cpp\
+-					./classes/Params/DataSetParam.cpp\
+-					./classes/Profiler.cpp\
+-					./shared/Matrix/MatrixUtils.cpp\
+-					./shared/io/Disk/pfopen.cpp\
+-					./shared/io/Disk/pfclose.cpp\
+-					./shared/io/Disk/WriteLockFile.cpp\
+-					./shared/io/Print/PrintfFunction.cpp\
+-					./shared/io/Comm/IssmComm.cpp\
+-					./shared/LatLong/Ll2xyx.cpp\
+-					./shared/LatLong/Xy2llx.cpp\
+-					./shared/Enum/EnumToStringx.cpp\
+-					./shared/Enum/StringToEnumx.cpp\
+-					./shared/Numerics/Verbosity.cpp\
+-					./shared/Numerics/GaussPoints.cpp\
+-					./shared/Numerics/cross.cpp\
+-					./shared/Numerics/isnan.cpp\
+-					./shared/Numerics/cubic.cpp\
+-					./shared/Numerics/extrema.cpp\
+-					./shared/Numerics/XZvectorsToCoordinateSystem.cpp\
+-					./shared/Exceptions/Exceptions.cpp\
+-					./shared/Exceptions/exprintf.cpp\
+-					./shared/Sorting/binary_search.cpp\
+-					./shared/Elements/Paterson.cpp\
+-					./shared/Elements/Arrhenius.cpp\
+-					./shared/Elements/PrintArrays.cpp\
+-					./shared/Elements/PddSurfaceMassBalance.cpp\
+-					./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\
+-					./shared/String/DescriptorIndex.cpp\
+-					./toolkits/issm/IssmToolkitUtils.cpp\
+-					./toolkits/issm/IssmSolver.cpp\
+-					./toolkits/ToolkitOptions.cpp\
+-					./modules/ModelProcessorx/ModelProcessorx.cpp\
+-					./modules/ModelProcessorx/DistributeNumDofs.cpp\
+-					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
+-					./modules/ModelProcessorx/NodesPartitioning.cpp\
+-					./modules/ModelProcessorx/SortDataSets.cpp\
+-					./modules/ModelProcessorx/UpdateCounters.cpp\
+-					./modules/ModelProcessorx/CreateDataSets.cpp\
+-					./modules/ModelProcessorx/CreateParameters.cpp\
+-					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
+-					./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp\
+-					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
+-					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\
+-					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp\
+-					./modules/NodesDofx/NodesDofx.cpp\
+-					./modules/NodalValuex/NodalValuex.cpp\
+-					./modules/VerticesDofx/VerticesDofx.cpp\
+-					./modules/VertexCoordinatesx/VertexCoordinatesx.cpp\
+-					./modules/OutputResultsx/OutputResultsx.cpp\
+-					./modules/InputDuplicatex/InputDuplicatex.cpp\
+-					./modules/InputScalex/InputScalex.cpp\
+-					./modules/SurfaceAreax/SurfaceAreax.cpp\
+-					./modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp\
+-					./modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp\
+-					./modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp\
+-					./modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp\
+-					./modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp\
+-					./modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp\
+-					./modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp\
+-					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp\
+-					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
+-					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp\
+-					./modules/ComputeBasalStressx/ComputeBasalStressx.cpp\
+-					./modules/ComputeStrainRatex/ComputeStrainRatex.cpp\
+-					./modules/SpcNodesx/SpcNodesx.cpp\
+-					./modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp\
+-					./modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp\
+-					./modules/SmbGradientsx/SmbGradientsx.cpp\
+-					./modules/Reducevectorgtofx/Reducevectorgtofx.cpp\
+-					./modules/Reduceloadx/Reduceloadx.cpp\
+-					./modules/ConstraintsStatex/ConstraintsStatex.cpp\
+-					./modules/ResetConstraintsx/ResetConstraintsx.cpp\
+-					./modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp\
+-					./modules/Solverx/Solverx.cpp\
+-					./modules/VecMergex/VecMergex.cpp\
+-					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp\
+-					./modules/InputToResultx/InputToResultx.cpp\
+-					./analyses/ProcessArguments.cpp\
+-					./analyses/ResetBoundaryConditions.cpp\
+-					./analyses/AnalysisConfiguration.cpp\
+-					./analyses/WrapperCorePointerFromSolutionEnum.cpp\
+-					./analyses/CorePointerFromSolutionEnum.cpp\
+-					./analyses/EnvironmentInit.cpp\
+-					./analyses/EnvironmentFinalize.cpp\
+-					./analyses/ad_core.cpp\
+-					./solutionsequences/solutionsequence_linear.cpp\
+-					./solutionsequences/solutionsequence_nonlinear.cpp\
+-					./solutionsequences/solutionsequence_newton.cpp\
+-					./solutionsequences/convergence.cpp\
+-					./classes/Options/Options.cpp\
+-					./classes/Options/OptionUtilities.cpp\
+-					./classes/RiftStruct.cpp\
++
++# Core Sources {{{
++set(core_sources    ./datastructures/DataSet.cpp
++					./classes/gauss/GaussTria.cpp
++					./classes/FemModel.cpp
++					./classes/Loads/Friction.cpp
++					./classes/Inputs/TransientInput.cpp
++					./classes/Constraints/SpcTransient.cpp
++					./classes/IndependentObject.cpp
++					./classes/DependentObject.cpp
++					./classes/DofIndexing.cpp
++					./classes/IoModel.cpp
++					./classes/Contours.cpp
++					./classes/Nodes.cpp
++					./classes/Vertices.cpp
++					./classes/Node.cpp
++					./classes/Vertex.cpp
++					./classes/Hook.cpp
++					./classes/Patch.cpp
++					./classes/ElementResults/DoubleElementResult.cpp
++					./classes/ElementResults/TriaP1ElementResult.cpp
++					./classes/ElementResults/BoolElementResult.cpp
++					./classes/ExternalResults/Results.cpp
++					./classes/Elements/Elements.cpp
++					./classes/Elements/ElementHook.cpp
++					./classes/Elements/Tria.cpp
++					./classes/Elements/TriaRef.cpp
++					./classes/Inputs/Inputs.cpp
++					./classes/Inputs/TriaInput.cpp
++					./classes/Inputs/BoolInput.cpp
++					./classes/Inputs/IntInput.cpp
++					./classes/Inputs/DoubleInput.cpp
++					./classes/Inputs/DatasetInput.cpp
++					./classes/Materials/Materials.cpp
++					./classes/Materials/Matice.cpp
++					./classes/Materials/Matdamageice.cpp
++					./classes/Materials/Matpar.cpp
++					./classes/Constraints/Constraints.cpp
++					./classes/Constraints/SpcStatic.cpp
++					./classes/Constraints/SpcDynamic.cpp
++					./classes/Loads/Loads.cpp
++					./classes/Loads/Penpair.cpp
++					./classes/Loads/Pengrid.cpp
++					./classes/Loads/Icefront.cpp
++					./classes/Loads/Numericalflux.cpp
++					./classes/matrix/ElementMatrix.cpp
++					./classes/matrix/ElementVector.cpp
++					./classes/Params/Parameters.cpp
++					./classes/Params/BoolParam.cpp
++					./classes/Params/IntParam.cpp
++					./classes/Params/IntVecParam.cpp
++					./classes/Params/IntMatParam.cpp
++					./classes/Params/DoubleParam.cpp
++					./classes/Params/FileParam.cpp
++					./classes/Params/StringArrayParam.cpp
++					./classes/Params/DoubleMatParam.cpp
++					./classes/Params/DoubleTransientMatParam.cpp
++					./classes/Params/DoubleMatArrayParam.cpp
++					./classes/Params/DoubleVecParam.cpp
++					./classes/Params/StringParam.cpp
++					./classes/Params/MatrixParam.cpp
++					./classes/Params/VectorParam.cpp
++					./classes/Params/TransientParam.cpp
++					./classes/Params/DataSetParam.cpp
++					./classes/Profiler.cpp
++					./shared/Matrix/MatrixUtils.cpp
++					./shared/io/Disk/pfopen.cpp
++					./shared/io/Disk/pfclose.cpp
++					./shared/io/Disk/WriteLockFile.cpp
++					./shared/io/Print/PrintfFunction.cpp
++					./shared/io/Comm/IssmComm.cpp
++					./shared/LatLong/Ll2xyx.cpp
++					./shared/LatLong/Xy2llx.cpp
++					./shared/Enum/EnumToStringx.cpp
++					./shared/Enum/StringToEnumx.cpp
++					./shared/Numerics/Verbosity.cpp
++					./shared/Numerics/GaussPoints.cpp
++					./shared/Numerics/cross.cpp
++					./shared/Numerics/isnan.cpp
++					./shared/Numerics/cubic.cpp
++					./shared/Numerics/extrema.cpp
++					./shared/Numerics/XZvectorsToCoordinateSystem.cpp
++					./shared/Exceptions/Exceptions.cpp
++					./shared/Exceptions/exprintf.cpp
++					./shared/Sorting/binary_search.cpp
++					./shared/Elements/Paterson.cpp
++					./shared/Elements/Arrhenius.cpp
++					./shared/Elements/PrintArrays.cpp
++					./shared/Elements/PddSurfaceMassBalance.cpp
++					./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp
++					./shared/String/DescriptorIndex.cpp
++					./toolkits/issm/IssmToolkitUtils.cpp
++					./toolkits/issm/IssmSolver.cpp
++					./toolkits/ToolkitOptions.cpp
++					./modules/ModelProcessorx/ModelProcessorx.cpp
++					./modules/ModelProcessorx/DistributeNumDofs.cpp
++					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
++					./modules/ModelProcessorx/NodesPartitioning.cpp
++					./modules/ModelProcessorx/SortDataSets.cpp
++					./modules/ModelProcessorx/UpdateCounters.cpp
++					./modules/ModelProcessorx/CreateDataSets.cpp
++					./modules/ModelProcessorx/CreateParameters.cpp
++					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
++					./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
++					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
++					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
++					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp
++					./modules/NodesDofx/NodesDofx.cpp
++					./modules/NodalValuex/NodalValuex.cpp
++					./modules/VerticesDofx/VerticesDofx.cpp
++					./modules/VertexCoordinatesx/VertexCoordinatesx.cpp
++					./modules/OutputResultsx/OutputResultsx.cpp
++					./modules/InputDuplicatex/InputDuplicatex.cpp
++					./modules/InputScalex/InputScalex.cpp
++					./modules/SurfaceAreax/SurfaceAreax.cpp
++					./modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp
++					./modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp
++					./modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
++					./modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
++					./modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp
++					./modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
++					./modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
++					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp
++					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp
++					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp
++					./modules/ComputeBasalStressx/ComputeBasalStressx.cpp
++					./modules/ComputeStrainRatex/ComputeStrainRatex.cpp
++					./modules/SpcNodesx/SpcNodesx.cpp
++					./modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp
++					./modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp
++					./modules/SmbGradientsx/SmbGradientsx.cpp
++					./modules/Reducevectorgtofx/Reducevectorgtofx.cpp
++					./modules/Reduceloadx/Reduceloadx.cpp
++					./modules/ConstraintsStatex/ConstraintsStatex.cpp
++					./modules/ResetConstraintsx/ResetConstraintsx.cpp
++					./modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp
++					./modules/Solverx/Solverx.cpp
++					./modules/VecMergex/VecMergex.cpp
++					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp
++					./modules/InputToResultx/InputToResultx.cpp
++					./analyses/ProcessArguments.cpp
++					./analyses/ResetBoundaryConditions.cpp
++					./analyses/AnalysisConfiguration.cpp
++					./analyses/WrapperCorePointerFromSolutionEnum.cpp
++					./analyses/CorePointerFromSolutionEnum.cpp
++					./analyses/EnvironmentInit.cpp
++					./analyses/EnvironmentFinalize.cpp
++					./analyses/ad_core.cpp
++					./solutionsequences/solutionsequence_linear.cpp
++					./solutionsequences/solutionsequence_nonlinear.cpp
++					./solutionsequences/solutionsequence_newton.cpp
++					./solutionsequences/convergence.cpp
++					./classes/Options/Options.cpp
++					./classes/Options/OptionUtilities.cpp)
++set(issm_sources ${core_sources})
+ # }}}
+ 
+-add_library(ISSMCore STATIC ${core_sources})
++#DAKOTA sources  {{{
++set(dakota_sources 				  ./modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
++					  				  ./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
++					  				  ./modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp
++					  ./modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp
++					  				  ./modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
++					  ./analyses/dakota_core.cpp
++					  				  ./analyses/DakotaSpawnCore.cpp)
++#}}}
++#Transient sources  {{{
++set(transient_sources ./modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp 
++							./analyses/transient_core.cpp)
++#}}}
++#Steadystate sources  {{{
++set(steadystate_sources ./analyses/steadystate_core.cpp)
++#}}}
++#Prognostic sources  {{{
++set(prognostic_sources ./modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
++					      ./modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
++					      ./modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
++					      ./modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
++							./analyses/prognostic_core.cpp)
++#}}}
++#Thermal sources  {{{
++set(thermal_sources ./modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
++					   ./modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
++					   ./modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
++					   ./modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
++					   ./modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
++					   ./modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
++					   ./modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
++					   ./modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp
++					   ./modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
++					   ./modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
++					   ./modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
++					   ./modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
++					   ./modules/ConstraintsStatex/ThermalConstraintsState.cpp
++					   ./modules/ConstraintsStatex/ThermalIsPresent.cpp
++					   ./modules/ResetConstraintsx/ThermalConstraintsReset.cpp 
++					   ./analyses/thermal_core.cpp
++					   ./analyses/enthalpy_core.cpp
++					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp)
++#}}}
++#Control sources  {{{
++set(control_sources ./modules/ControlInputGetGradientx/ControlInputGetGradientx.cpp
++					  				  ./modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp
++					  				  ./modules/ControlInputScaleGradientx/ControlInputScaleGradientx.cpp
++					  				  ./modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp
++					  				  ./modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp
++					  				  ./modules/ModelProcessorx/Control/CreateParametersControl.cpp
++					  ./modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
++					  				  ./modules/InputControlUpdatex/InputControlUpdatex.cpp
++					  				  ./modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
++					  				  ./modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
++					  				  ./modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
++					  				  ./modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
++					  				  ./modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
++					  				  ./modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp
++					  				  ./modules/Orthx/Orthx.cpp
++					  				  ./modules/Gradjx/Gradjx.cpp
++					  ./modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
++					  				  ./modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp
++					  				  ./modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp
++					  				  ./modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
++					  				  				  ./classes/Inputs/ControlInput.cpp
++					  ./shared/Numerics/BrentSearch.cpp
++					  ./shared/Numerics/OptimalSearch.cpp 
++					  ./analyses/control_core.cpp
++					  ./analyses/controltao_core.cpp
++					  ./analyses/objectivefunction.cpp
++					  ./analyses/gradient_core.cpp
++					  ./analyses/adjointdiagnostic_core.cpp
++					  ./analyses/adjointbalancethickness_core.cpp
++					  ./analyses/AdjointCorePointerFromSolutionEnum.cpp
++					  ./solutionsequences/solutionsequence_adjoint_linear.cpp)
++#}}}
++#Hydrology sources  {{{
++set(hydrology_sources  ./modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
++					      ./modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
++					      ./modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp
++					      ./modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp 
++							./modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp 
++							./modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
++							./modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
++							./modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp
++							./modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp 
++							./modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp 
++							./modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
++							./modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
++							./modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp
++							./modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp 
++							./modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp 
++							./analyses/hydrology_core.cpp
++							./solutionsequences/solutionsequence_hydro_nonlinear.cpp)
++#}}}
++#Diagnostic sources  {{{
++set(diagnostic_sources ./modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
++					      ./modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp 
++					      ./modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp 
++					      ./modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
++					      ./modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
++					      ./modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp 
++					      ./modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp 
++					      ./modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
++					      ./modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
++					      ./modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp 
++					      ./modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp 
++							./modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp 
++							./analyses/diagnostic_core.cpp
++							./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp)
++#}}}
++#Balanced sources  {{{
++set(balanced_sources ./modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
++					    ./modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
++					    ./modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
++						 ./modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
++						 ./analyses/balancethickness_core.cpp 
++						 ./analyses/dummy_core.cpp)
++#}}}
++#Slope sources  {{{
++set(slope_sources  ./modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
++					  ./modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp 
++					  ./modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
++					  ./modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp
++					  ./modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
++					  ./modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp 
++					  ./modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
++					  ./modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
++					  ./analyses/surfaceslope_core.cpp
++					  ./analyses/bedslope_core.cpp)
++#}}}
++#Gia sources  {{{
++set(gia_sources  ./analyses/gia_core.cpp
++					./modules/ModelProcessorx/Gia/UpdateElementsGia.cpp
++					./modules/ModelProcessorx/Gia/CreateNodesGia.cpp 
++					./modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp
++					./modules/ModelProcessorx/Gia/CreateLoadsGia.cpp
++					./modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp
++									./modules/GiaDeflectionCorex/distme.f
++					./modules/GiaDeflectionCorex/freed.f
++					./modules/GiaDeflectionCorex/ojrule.f
++					./modules/GiaDeflectionCorex/pwise.f
++					./modules/GiaDeflectionCorex/qwise.f
++					./modules/GiaDeflectionCorex/stot.f
++					./modules/GiaDeflectionCorex/what0.f
++					)
++#}}}
++#Groundingline sources  {{{
++set(groundingline_sources ./modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
++					        )
++#}}}
++#Rifts sources  {{{
++set(rifts_sources ./classes/Loads/Riftfront.cpp
++				    			    ./modules/ConstraintsStatex/RiftConstraintsState.cpp)
++#}}}
++#Android sources  {{{
++set(android_sources )
++#}}}
++#3D sources  {{{
++set(threed_sources 			     ./classes/gauss/GaussPenta.cpp
++				     			     ./classes/ElementResults/PentaP1ElementResult.cpp
++				     			     ./classes/Inputs/PentaInput.cpp
++				     			     ./classes/Elements/Penta.cpp
++				     			     ./classes/Elements/PentaRef.cpp)
++#}}}
++#Bamg sources  {{{
++set(bamg_sources  						./bamg/BamgGeom.cpp
++							./bamg/BamgMesh.cpp
++							./bamg/BamgOpts.cpp
++							./bamg/CrackedEdge.cpp
++							./bamg/Curve.cpp
++							./bamg/Direction.cpp
++										./bamg/Edge.cpp
++							./bamg/GeomEdge.cpp
++							./bamg/GeomSubDomain.cpp
++							./bamg/GeomVertex.cpp
++				./bamg/Geometry.cpp
++							./bamg/ListofIntersectionTriangles.cpp
++							./bamg/EigenMetric.cpp
++				./bamg/Metric.cpp
++							./bamg/BamgQuadtree.cpp
++										./bamg/SetOfE4.cpp
++										./bamg/SubDomain.cpp
++							./bamg/AdjacentTriangle.cpp
++				./bamg/Triangle.cpp
++				./bamg/det.h 
++							./bamg/BamgVertex.cpp
++										./bamg/VertexOnEdge.cpp
++							./bamg/VertexOnGeom.cpp
++							./bamg/VertexOnVertex.cpp
++				./bamg/Mesh.cpp
++							./shared/Bamg/Abs.h 
++							./shared/Bamg/BigPrimeNumber.cpp
++				./shared/Bamg/BinaryRand.h 
++				./shared/Bamg/Exchange.h 
++				./shared/Bamg/extrema.h 
++				./shared/Bamg/HeapSort.h 
++				./shared/Bamg/OppositeAngle.h 
++				./modules/Bamgx/Bamgx.cpp
++							./modules/BamgConvertMeshx/BamgConvertMeshx.cpp
++							./modules/BamgTriangulatex/BamgTriangulatex.cpp
++				)
++#}}}
++#Kriging sources  {{{
++set(kriging_sources 					./classes/kriging/Observations.cpp
++						./classes/kriging/Variogram.h 
++											./classes/kriging/GaussianVariogram.cpp
++											./classes/kriging/ExponentialVariogram.cpp
++											./classes/kriging/SphericalVariogram.cpp
++											./classes/kriging/PowerVariogram.cpp
++											./classes/kriging/Quadtree.cpp
++											./classes/kriging/Observation.cpp
++						./modules/Krigingx/Krigingx.cpp
++						./modules/Krigingx/Kriging
++#For parallel kriging, only difference is ./modules/Krigingx/pKrigingx.cpp with no multithreading
++set(pkriging_sources 					./classes/kriging/Observations.cpp
++						./classes/kriging/Variogram.h 
++											./classes/kriging/GaussianVariogram.cpp
++											./classes/kriging/ExponentialVariogram.cpp
++											./classes/kriging/SphericalVariogram.cpp
++											./classes/kriging/PowerVariogram.cpp
++											./classes/kriging/Quadtree.cpp
++											./classes/kriging/Observation.cpp
++						./modules/Krigingx/pKrigingx.cpp
++						)
++#}}}
++#Kml sources  {{{
++set(kml_sources 		     ./modules/Exp2Kmlx/Exp2Kmlx.cpp
++			     		     ./modules/Kml2Expx/Kml2Expx.cpp
++			     		     ./modules/Shp2Expx/Shp2Expx.cpp
++			     		     ./modules/Shp2Kmlx/Shp2Kmlx.cpp
++			     		     ./modules/KMLFileReadx/KMLFileReadx.cpp
++			     		     ./modules/KMLMeshWritex/KMLMeshWritex.cpp
++			     		     ./modules/KMLOverlayx/KMLOverlayx.cpp
++			     		     ./kml/KML_Attribute.cpp
++			     		     ./kml/KML_Comment.cpp
++			     		     ./kml/KML_ColorStyle.cpp
++			     		     ./kml/KML_Container.cpp
++			     		     ./kml/KML_Document.cpp
++			     		     ./kml/KML_Feature.cpp
++			     		     ./kml/KML_File.cpp
++			     		     ./kml/KML_Folder.cpp
++			     		     ./kml/KML_Geometry.cpp
++			     		     ./kml/KML_GroundOverlay.cpp
++			     		     ./kml/KML_Icon.cpp
++			     		     ./kml/KML_LatLonBox.cpp
++		  	     		     ./kml/KML_LinearRing.cpp
++			     		     ./kml/KML_LineString.cpp
++			     		     ./kml/KML_LineStyle.cpp
++			     		     ./kml/KML_MultiGeometry.cpp
++			     		     ./kml/KML_Object.cpp
++			     		     ./kml/KML_Overlay.cpp
++			     		     ./kml/KML_Point.cpp
++			     		     ./kml/KML_Placemark.cpp
++			     		     ./kml/KML_Polygon.cpp
++			     		     ./kml/KML_PolyStyle.cpp
++			     		     ./kml/KML_Style.cpp
++			     		     ./kml/KML_StyleSelector.cpp
++			     		     ./kml/KML_SubStyle.cpp
++			     		     ./kml/KML_Unknown.cpp
++			     		     ./kml/KMLFileReadUtils.cpp
++			     )
++#}}}
++#Petsc sources  {{{
++petsc_sources= ./toolkits/petsc
++					./toolkits/petsc/patches
++													./toolkits/petsc/patches/VecToMPISerial.cpp
++					./toolkits/petsc/patches/MatToSerial.cpp
++					./toolkits/petsc/patches/VecMerge.cpp
++					./toolkits/petsc/patches/NewVec.cpp
++					./toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp
++					./toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp
++					./toolkits/petsc/patches/NewMat.cpp
++					./toolkits/petsc/patches/VecFree.cpp
++					./toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp
++					./toolkits/petsc/patches/PetscVectorToDoubleVector.cpp
++					./toolkits/petsc/patches/VecDuplicatePatch.cpp
++					./toolkits/petsc/patches/KSPFree.cpp
++					./toolkits/petsc/patches/MatFree.cpp
++					./toolkits/petsc/patches/MatMultPatch.cpp
++					./toolkits/petsc/patches/ISSMToPetscMatrixType.cpp
++					./toolkits/petsc/patches/ISSMToPetscInsertMode.cpp
++					./toolkits/petsc/patches/ISSMToPetscNormMode.cpp
++													./toolkits/petsc/objects/PetscMat.cpp
++									./toolkits/petsc/objects/PetscVec.cpp
++					./toolkits/petsc/objects/PetscSolver.cpp
++									)
++#}}}
++#Mumps sources  {{{
++set(mumps_sources      ./toolkits/mumps
++									./toolkits/mumps/MpiDenseMumpsSolve.cpp)
++#}}}
++#Gsl sources  {{{
++set(gsl_sources   ./toolkits/gsl/DenseGslSolve.cpp)
++#}}}
++#Mpi sources  {{{
++set(mpi_sources 						./toolkits/mpi/patches/DetermineLocalSize.cpp
++				./toolkits/mpi/patches/DetermineGlobalSize.cpp
++				./toolkits/mpi/patches/DetermineRowRankFromLocalSize.cpp
++				./toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp
++							)
++#}}}
++#Metis sources  {{{
++set(metis_sources 				./toolkits/metis/patches/METIS_PartMeshNodalPatch.cpp)
++#}}}
++# Modules Sources {{{
++set(modules_sources ./shared/Threads/LaunchThread.cpp
++			./shared/Threads/PartitionRange.cpp
++			./shared/Exp/exp.cpp
++			./shared/TriMesh/AssociateSegmentToElement.cpp
++			./shared/TriMesh/GridInsideHole.cpp
++			./shared/TriMesh/OrderSegments.cpp
++			./shared/TriMesh/SplitMeshForRifts.cpp
++			./shared/TriMesh/TriMeshUtils.cpp
++			./modules/Chacox/Chacox.cpp
++			./modules/Chacox/input_parse.cpp
++			./modules/Chacox/chaco_seconds.cpp
++			./modules/Chacox/user_params.cpp
++			./modules/TriaSearchx/TriaSearchx.cpp
++			./modules/TriMeshx/TriMeshx.cpp
++			./modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp
++			./modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp
++			./modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp
++			./modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp
++			./modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp
++			./modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp
++			./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
++			./modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp
++			./modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp
++			./modules/HoleFillerx/HoleFillerx.cpp
++			./modules/EdgeDetectionx/EdgeDetectionx.cpp
++			./modules/AverageFilterx/AverageFilterx.cpp
++			./modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp
++			./modules/ContourToMeshx/ContourToMeshx.cpp
++			./modules/ContourToMeshx/ContourToMeshxt.cpp
++			./modules/ContourToNodesx/ContourToNodesx.cpp
++			./modules/Reducevectorgtosx/Reducevectorgtosx.cpp
++			./modules/NodeConnectivityx/NodeConnectivityx.cpp
++			./modules/ElementConnectivityx/ElementConnectivityx.cpp
++			./modules/Scotchx/Scotchx.cpp
++			./modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp)
++# }}}
++
++#{{{ Conditional build-up of sources
++#ISSM sources are a combination of core sources and sources related to specific capabilities.
++
++if DAKOTA
++issm_sources  +=  $(dakota_sources)
++endif
++
++if PETSC
++issm_sources  +=  $(petsc_sources)
++endif
++
++if MUMPS
++issm_sources  +=  $(mumps_sources)
++endif
++
++if GSL
++issm_sources  +=  $(gsl_sources)
++endif
++
++if TRANSIENT
++issm_sources  +=  $(transient_sources)
++endif
++
++if STEADYSTATE
++issm_sources  +=  $(steadystate_sources)
++endif
++
++if PROGNOSTIC
++issm_sources  +=  $(prognostic_sources)
++endif
++
++if THERMAL
++issm_sources  +=  $(thermal_sources)
++endif
++
++if GIA
++issm_sources  +=  $(gia_sources)
++endif
++
++if CONTROL
++issm_sources  +=  $(control_sources)
++endif
++
++if HYDROLOGY
++issm_sources  +=  $(hydrology_sources)
++endif
++
++if DIAGNOSTIC
++issm_sources  +=  $(diagnostic_sources)
++endif
++
++if BALANCED
++issm_sources  +=  $(balanced_sources)
++endif
++
++if SLOPE
++issm_sources  +=  $(slope_sources)
++endif
++
++if GROUNDINGLINE
++issm_sources +=  $(groundingline_sources)
++endif
++
++if RIFTS
++issm_sources +=  $(rifts_sources)
++endif
++
++if ANDROID
++issm_sources +=  $(android_sources)
++endif
++
++if THREED
++issm_sources +=  $(threed_sources)
++endif
++
++if MPI
++issm_sources +=  $(mpi_sources)
++endif
++
++if METIS
++issm_sources +=  $(metis_sources)
++endif
++
++if KRIGING
++issm_sources +=  $(pkriging_sources)
++endif
++#}}}
++
++add_library(ISSMCore STATIC ${issm_sources})
++add_library(ISSMModules STATIC ${modules_sources})
+ add_executable(issm ./main/issm.cpp)
++
++# Definitions {{{
++add_definitions(-DHAVE_CONFIG_H)
++# }}}
++# Compilation Flags {{{
++# }}}
++# Linking Flags {{{
++link_directories($ENV{ISSM_DIR}/src/c)
++target_link_libraries(issm ISSMCore ISSMModules)
++# }}}
+Index: ../trunk-jpl/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/CMakeLists.txt	(revision 15467)
++++ ../trunk-jpl/CMakeLists.txt	(revision 15468)
+@@ -12,6 +12,11 @@
+ set(ISSM_WEBSITE "http://issm.jpl.nasa.gov")
+ # }}}
+ 
++# CMake Modules {{{
++include(CheckLanguage)
++include(./m4/issm_options.cmake)
++# }}}
++
+ # Environment Variables {{{
+ # Out of source build can be done here.
+ set(CMAKE_BINARY_DIR ${ISSM_DIR})
Index: /issm/oecreview/Archive/15392-16133/ISSM-15468-15469.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15468-15469.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15468-15469.diff	(revision 16134)
@@ -0,0 +1,93 @@
+Index: ../trunk-jpl/test/NightlyRun/test280.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test280.py	(revision 15469)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++from ContourToMesh import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.flowequation.fe_ssa=1
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15468)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15469)
+@@ -67,6 +67,7 @@
+ 	case 270, name='SquareShelfDiagM2dDamage';
+ 	case 272, name='SquareShelfCMZM2dDamage';
+ 	case 274, name='SquareShelfDiagM2dDamageRift';
++	case 280, name='SquareShelfDiagM2dP2';
+ 	case 301, name='SquareSheetConstrainedDiagM2d';
+ 	case 302, name='SquareSheetConstrainedDiagH2d';
+ 	case 303, name='SquareSheetConstrainedDiagHM2d';
+Index: ../trunk-jpl/test/NightlyRun/test280.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test280.m	(revision 15469)
+@@ -0,0 +1,17 @@
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelf.par');
++md=setflowequation(md,'macayeal','all');
++md.flowequation.fe_ssa=1;
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,DiagnosticSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.DiagnosticSolution.Vx),...
++	(md.results.DiagnosticSolution.Vy),...
++	(md.results.DiagnosticSolution.Vel),...
++	(md.results.DiagnosticSolution.Pressure),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15468)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15469)
+@@ -68,6 +68,7 @@
+ 		235 : 'SquareShelfTranForceNeg2dDakotaLocal',
+ 		236 : 'SquareShelfTranIspddIsdeltaM2d',
+ 		237 : 'SquareShelfTranIspddIsdeltaM3d',
++		280 : 'SquareShelfDiagM2dP2',
+ 		301 : 'SquareSheetConstrainedDiagM2d',
+ 		302 : 'SquareSheetConstrainedDiagH2d',
+ 		303 : 'SquareSheetConstrainedDiagHM2d',
+Index: ../trunk-jpl/test/Archives/Archive280.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive280.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive280.nc	(revision 15468)
++++ ../trunk-jpl/test/Archives/Archive280.nc	(revision 15469)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive280.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15469-15470.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15469-15470.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15469-15470.diff	(revision 16134)
@@ -0,0 +1,1589 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15469)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15470)
+@@ -70,15 +70,15 @@
+ 	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss);
+ 
+ 	/*Build B: */
+-	for (int i=0;i<NUMNODESP1;i++){
+-		*(B+NDOF2*NUMNODESP1*0+NDOF2*i)=dbasis[0][i]; 
+-		*(B+NDOF2*NUMNODESP1*0+NDOF2*i+1)=0.0;
++	for(int i=0;i<NUMNODESP1;i++){
++		B[NDOF2*NUMNODESP1*0+NDOF2*i+0] = dbasis[0][i];
++		B[NDOF2*NUMNODESP1*0+NDOF2*i+1] = 0.;
+ 
+-		*(B+NDOF2*NUMNODESP1*1+NDOF2*i)=0.0;
+-		*(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=dbasis[1][i];
++		B[NDOF2*NUMNODESP1*1+NDOF2*i+0] = 0.;
++		B[NDOF2*NUMNODESP1*1+NDOF2*i+1] = dbasis[1][i];
+ 
+-		*(B+NDOF2*NUMNODESP1*2+NDOF2*i)=(float).5*dbasis[1][i]; 
+-		*(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=(float).5*dbasis[0][i]; 
++		B[NDOF2*NUMNODESP1*2+NDOF2*i+0] = .5*dbasis[1][i];
++		B[NDOF2*NUMNODESP1*2+NDOF2*i+1] = .5*dbasis[0][i];
+ 	}
+ }
+ /*}}}*/
+@@ -96,35 +96,35 @@
+ 	 * We assume B has been allocated already, of size: 5x(NDOF2*NUMNODESP1)
+ 	 */
+ 
+-	int    i;
+-	IssmDouble dh1dh7[3][NUMNODESMINI];
+-	IssmDouble l1l6[NUMNODESP1];
++	int i;
++	IssmDouble dbasismini[3][NUMNODESMINI];
++	IssmDouble basis[NUMNODESP1];
+ 
+-	/*Get dh1dh6 in actual coordinate system: */
+-	GetNodalFunctionsMINIDerivatives(&dh1dh7[0][0],xyz_list, gauss);
+-	GetNodalFunctionsP1(l1l6, gauss);
++	/*Get dbasis in actual coordinate system: */
++	GetNodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss);
++	GetNodalFunctionsP1(basis,gauss);
+ 
+ 	/*Build B: */
+-	for (i=0;i<NUMNODESMINI;i++){
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh7[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh7[1][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0.5*dh1dh7[1][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0.5*dh1dh7[0][i];
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0;
++	for(i=0;i<NUMNODESMINI;i++){
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i];
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dbasismini[1][i];
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.5*dbasismini[1][i];
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.5*dbasismini[0][i];
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.;
+ 	}
+ 
+-	for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=l1l6[i];
++	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3] = 0;
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3] = 0;
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3] = 0;
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3] = basis[i];
+ 	}
+ }
+ /*}}}*/
+@@ -150,20 +150,20 @@
+ 
+ 	/*Build B: */
+ 	for (int i=0;i<NUMNODESP1;i++){
+-		*(B+NDOF2*NUMNODESP1*0+NDOF2*i)=dbasis[0][i]; 
+-		*(B+NDOF2*NUMNODESP1*0+NDOF2*i+1)=0.0;
++		B[NDOF2*NUMNODESP1*0+NDOF2*i+0] = dbasis[0][i];
++		B[NDOF2*NUMNODESP1*0+NDOF2*i+1] = 0.;
+ 
+-		*(B+NDOF2*NUMNODESP1*1+NDOF2*i)=0.0;
+-		*(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=dbasis[1][i];
++		B[NDOF2*NUMNODESP1*1+NDOF2*i+0] = 0.;
++		B[NDOF2*NUMNODESP1*1+NDOF2*i+1] = dbasis[1][i];
+ 
+-		*(B+NDOF2*NUMNODESP1*2+NDOF2*i)=(float).5*dbasis[1][i]; 
+-		*(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=(float).5*dbasis[0][i]; 
++		B[NDOF2*NUMNODESP1*2+NDOF2*i+0] = .5*dbasis[1][i];
++		B[NDOF2*NUMNODESP1*2+NDOF2*i+1] = .5*dbasis[0][i];
+ 
+-		*(B+NDOF2*NUMNODESP1*3+NDOF2*i)=(float).5*dbasis[2][i]; 
+-		*(B+NDOF2*NUMNODESP1*3+NDOF2*i+1)=0.0;
++		B[NDOF2*NUMNODESP1*3+NDOF2*i+0] = .5*dbasis[2][i];
++		B[NDOF2*NUMNODESP1*3+NDOF2*i+1] = 0.;
+ 
+-		*(B+NDOF2*NUMNODESP1*4+NDOF2*i)=0.0;
+-		*(B+NDOF2*NUMNODESP1*4+NDOF2*i+1)=(float).5*dbasis[2][i]; 
++		B[NDOF2*NUMNODESP1*4+NDOF2*i+0] = 0.;
++		B[NDOF2*NUMNODESP1*4+NDOF2*i+1] = .5*dbasis[2][i];
+ 	}
+ 
+ }
+@@ -188,21 +188,21 @@
+ 	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss_coord);
+ 
+ 	/*Build BPrime: */
+-	for (int i=0;i<NUMNODESP1;i++){
+-		*(B+NDOF2*NUMNODESP1*0+NDOF2*i)=2.0*dbasis[0][i]; 
+-		*(B+NDOF2*NUMNODESP1*0+NDOF2*i+1)=dbasis[1][i];
++	for(int i=0;i<NUMNODESP1;i++){
++		B[NDOF2*NUMNODESP1*0+NDOF2*i+0]=2.*dbasis[0][i]; 
++		B[NDOF2*NUMNODESP1*0+NDOF2*i+1]=dbasis[1][i];
+ 
+-		*(B+NDOF2*NUMNODESP1*1+NDOF2*i)=dbasis[0][i];
+-		*(B+NDOF2*NUMNODESP1*1+NDOF2*i+1)=2.0*dbasis[1][i];
++		B[NDOF2*NUMNODESP1*1+NDOF2*i+0]=dbasis[0][i];
++		B[NDOF2*NUMNODESP1*1+NDOF2*i+1]=2.*dbasis[1][i];
+ 
+-		*(B+NDOF2*NUMNODESP1*2+NDOF2*i)=dbasis[1][i]; 
+-		*(B+NDOF2*NUMNODESP1*2+NDOF2*i+1)=dbasis[0][i]; 
++		B[NDOF2*NUMNODESP1*2+NDOF2*i+0]=dbasis[1][i]; 
++		B[NDOF2*NUMNODESP1*2+NDOF2*i+1]=dbasis[0][i]; 
+ 
+-		*(B+NDOF2*NUMNODESP1*3+NDOF2*i)=dbasis[2][i]; 
+-		*(B+NDOF2*NUMNODESP1*3+NDOF2*i+1)=0.0;
++		B[NDOF2*NUMNODESP1*3+NDOF2*i+0]=dbasis[2][i]; 
++		B[NDOF2*NUMNODESP1*3+NDOF2*i+1]=0.;
+ 
+-		*(B+NDOF2*NUMNODESP1*4+NDOF2*i)=0.0;
+-		*(B+NDOF2*NUMNODESP1*4+NDOF2*i+1)=dbasis[2][i]; 
++		B[NDOF2*NUMNODESP1*4+NDOF2*i+0]=0.;
++		B[NDOF2*NUMNODESP1*4+NDOF2*i+1]=dbasis[2][i]; 
+ 	}
+ }
+ /*}}}*/
+@@ -220,28 +220,28 @@
+ 	 */
+ 
+ 	int    i;
+-	IssmDouble dh1dh7[3][NUMNODESMINI];
++	IssmDouble dbasismini[3][NUMNODESMINI];
+ 
+-	/*Get dh1dh6 in actual coordinate system: */
+-	GetNodalFunctionsMINIDerivatives(&dh1dh7[0][0],xyz_list, gauss);
++	/*Get dbasis in actual coordinate system: */
++	GetNodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss);
+ 
+ 	/*Build Bprime: */
+-	for (i=0;i<NUMNODESMINI;i++){
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=2*dh1dh7[0][i]; //Bprime[0][NDOF4*i]=dh1dh6[0][i];
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=dh1dh7[1][i];
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0;
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=dh1dh7[0][i];
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=2*dh1dh7[1][i];
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0;
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=dh1dh7[1][i];
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=dh1dh7[0][i];
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=0;
++	for(i=0;i<NUMNODESMINI;i++){
++		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = 2.*dbasismini[0][i];
++		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = dbasismini[1][i];
++		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
++		Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = dbasismini[0][i];
++		Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = 2.*dbasismini[1][i];
++		Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
++		Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = dbasismini[1][i];
++		Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = dbasismini[0][i];
++		Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = 0.;
+ 	}
+ 
+-	for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0;
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0;
+-		*(Bprime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0;
++	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
++		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3] = 0.;
++		Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3] = 0.;
++		Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3] = 0.;
+ 	}
+ 
+ }
+@@ -265,50 +265,50 @@
+ 
+ 	int i;
+ 
+-	IssmDouble dh1dh7[3][NUMNODESMINI];
+-	IssmDouble l1l6[NUMNODESP1];
++	IssmDouble dbasismini[3][NUMNODESMINI];
++	IssmDouble basis[NUMNODESP1];
+ 
+-	/*Get dh1dh7 in actual coordinate system: */
+-	GetNodalFunctionsMINIDerivatives(&dh1dh7[0][0],xyz_list, gauss);
+-	GetNodalFunctionsP1(l1l6, gauss);
++	/*Get dbasismini in actual coordinate system: */
++	GetNodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss);
++	GetNodalFunctionsP1(basis, gauss);
+ 
+ 	/*Build B: */
+-	for (i=0;i<NUMNODESMINI;i++){
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dh1dh7[0][i+0]; //B[0][NDOF4*i+0] = dh1dh6[0][i+0];
++	for(i=0;i<NUMNODESMINI;i++){
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i+0]; //B[0][NDOF4*i+0] = dbasis[0][i+0];
+ 		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
+ 		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+ 		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dh1dh7[1][i+0];
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dbasismini[1][i+0];
+ 		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
+ 		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.;
+ 		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = dh1dh7[2][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = (float).5*dh1dh7[1][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = (float).5*dh1dh7[0][i+0];
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = dbasismini[2][i+0];
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = .5*dbasismini[1][i+0];
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = .5*dbasismini[0][i+0];
+ 		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+0] = (float).5*dh1dh7[2][i+0];
++		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+0] = .5*dbasismini[2][i+0];
+ 		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2] = (float).5*dh1dh7[0][i+0];
++		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2] = .5*dbasismini[0][i+0];
+ 		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+0] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1] = (float).5*dh1dh7[2][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2] = (float).5*dh1dh7[1][i+0];
++		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1] = .5*dbasismini[2][i+0];
++		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2] = .5*dbasismini[1][i+0];
+ 		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+0] = 0.;
+ 		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1] = 0.;
+ 		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+0] = dh1dh7[0][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1] = dh1dh7[1][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2] = dh1dh7[2][i+0];
++		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+0] = dbasismini[0][i+0];
++		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1] = dbasismini[1][i+0];
++		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2] = dbasismini[2][i+0];
+ 	}
+ 
+-	for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		*(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3)=0;
+-		*(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3)=l1l6[i];
+-		*(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3)=0;
++	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
++		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3] = basis[i];
++		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3] = 0.;
+ 	}
+ 
+ }
+@@ -331,53 +331,50 @@
+ 	 */
+ 
+ 	int i;
++	IssmDouble dbasis[3][NUMNODESP1];
++	IssmDouble basis[NUMNODESP1];
+ 
+-	IssmDouble dh1dh6[3][NUMNODESP1];
+-	IssmDouble l1l6[NUMNODESP1];
++	/*Get dbasismini in actual coordinate system: */
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss);
++	GetNodalFunctionsP1(&basis[0], gauss);
+ 
+-	/*Get dh1dh7 in actual coordinate system: */
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
+-	GetNodalFunctionsP1(&l1l6[0], gauss);
+-
+ 	/*Build B: */
+-	for (i=0;i<NUMNODESP1;i++){
+-		*(B+(NDOF4*NUMNODESP1)*0+NDOF4*i)=dh1dh6[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
+-		*(B+(NDOF4*NUMNODESP1)*0+NDOF4*i+1)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*0+NDOF4*i+2)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*1+NDOF4*i)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*1+NDOF4*i+1)=dh1dh6[1][i];
+-		*(B+(NDOF4*NUMNODESP1)*1+NDOF4*i+2)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*2+NDOF4*i)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*2+NDOF4*i+1)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*2+NDOF4*i+2)=dh1dh6[2][i];
+-		*(B+(NDOF4*NUMNODESP1)*3+NDOF4*i)=.5*dh1dh6[1][i]; 
+-		*(B+(NDOF4*NUMNODESP1)*3+NDOF4*i+1)=.5*dh1dh6[0][i]; 
+-		*(B+(NDOF4*NUMNODESP1)*3+NDOF4*i+2)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*4+NDOF4*i)=.5*dh1dh6[2][i];
+-		*(B+(NDOF4*NUMNODESP1)*4+NDOF4*i+1)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*4+NDOF4*i+2)=.5*dh1dh6[0][i];
+-		*(B+(NDOF4*NUMNODESP1)*5+NDOF4*i)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*5+NDOF4*i+1)=.5*dh1dh6[2][i];
+-		*(B+(NDOF4*NUMNODESP1)*5+NDOF4*i+2)=.5*dh1dh6[1][i];
+-		*(B+(NDOF4*NUMNODESP1)*6+NDOF4*i)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*6+NDOF4*i+1)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*6+NDOF4*i+2)=0.;
+-		*(B+(NDOF4*NUMNODESP1)*7+NDOF4*i)=dh1dh6[0][i];
+-		*(B+(NDOF4*NUMNODESP1)*7+NDOF4*i+1)=dh1dh6[1][i];
+-		*(B+(NDOF4*NUMNODESP1)*7+NDOF4*i+2)=dh1dh6[2][i];
+-		_assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
++	for(i=0;i<NUMNODESP1;i++){
++		B[(NDOF4*NUMNODESP1)*0+NDOF4*i+0] = dbasis[0][i];
++		B[(NDOF4*NUMNODESP1)*0+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1)*0+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1)*1+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1)*1+NDOF4*i+1] = dbasis[1][i];
++		B[(NDOF4*NUMNODESP1)*1+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1)*2+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1)*2+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1)*2+NDOF4*i+2] = dbasis[2][i];
++		B[(NDOF4*NUMNODESP1)*3+NDOF4*i+0] = .5*dbasis[1][i];
++		B[(NDOF4*NUMNODESP1)*3+NDOF4*i+1] = .5*dbasis[0][i];
++		B[(NDOF4*NUMNODESP1)*3+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1)*4+NDOF4*i+0] = .5*dbasis[2][i];
++		B[(NDOF4*NUMNODESP1)*4+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1)*4+NDOF4*i+2] = .5*dbasis[0][i];
++		B[(NDOF4*NUMNODESP1)*5+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1)*5+NDOF4*i+1] = .5*dbasis[2][i];
++		B[(NDOF4*NUMNODESP1)*5+NDOF4*i+2] = .5*dbasis[1][i];
++		B[(NDOF4*NUMNODESP1)*6+NDOF4*i+0] = 0.;
++		B[(NDOF4*NUMNODESP1)*6+NDOF4*i+1] = 0.;
++		B[(NDOF4*NUMNODESP1)*6+NDOF4*i+2] = 0.;
++		B[(NDOF4*NUMNODESP1)*7+NDOF4*i+0] = dbasis[0][i];
++		B[(NDOF4*NUMNODESP1)*7+NDOF4*i+1] = dbasis[1][i];
++		B[(NDOF4*NUMNODESP1)*7+NDOF4*i+2] = dbasis[2][i];
+ 	}
+ 
+-	for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		B[(NDOF4*NUMNODESP1)*0+NDOF4*i+3]=0.;
+-		B[(NDOF4*NUMNODESP1)*1+NDOF4*i+3]=0.;
+-		B[(NDOF4*NUMNODESP1)*2+NDOF4*i+3]=0.;
+-		B[(NDOF4*NUMNODESP1)*3+NDOF4*i+3]=0.;
+-		B[(NDOF4*NUMNODESP1)*4+NDOF4*i+3]=0.;
+-		B[(NDOF4*NUMNODESP1)*5+NDOF4*i+3]=0.;
+-		B[(NDOF4*NUMNODESP1)*6+NDOF4*i+3]=l1l6[i];
+-		B[(NDOF4*NUMNODESP1)*7+NDOF4*i+3]=0.;
+-		_assert_(((NDOF4*NUMNODESP1)*7+NDOF4*i+3)<8*24);
++	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
++		B[(NDOF4*NUMNODESP1)*0+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1)*1+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1)*2+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1)*3+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1)*4+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1)*5+NDOF4*i+3] = 0.;
++		B[(NDOF4*NUMNODESP1)*6+NDOF4*i+3] = basis[i];
++		B[(NDOF4*NUMNODESP1)*7+NDOF4*i+3] = 0.;
+ 	}
+ 
+ }
+@@ -401,50 +398,50 @@
+ 	 */
+ 
+ 	int i;
+-	IssmDouble dh1dh7[3][NUMNODESMINI];
+-	IssmDouble l1l6[NUMNODESP1];
++	IssmDouble dbasismini[3][NUMNODESMINI];
++	IssmDouble basis[NUMNODESP1];
+ 
+-	/*Get dh1dh7 in actual coordinate system: */
+-	GetNodalFunctionsMINIDerivatives(&dh1dh7[0][0],xyz_list, gauss);
+-	GetNodalFunctionsP1(l1l6, gauss);
++	/*Get dbasismini in actual coordinate system: */
++	GetNodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss);
++	GetNodalFunctionsP1(basis, gauss);
+ 
+ 	/*B_primeuild B_prime: */
+-	for (i=0;i<NUMNODESMINI;i++){
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh7[0][i]; //B_prime[0][NDOF4*i]=dh1dh6[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh7[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh7[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=dh1dh7[1][i]; 
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=dh1dh7[0][i]; 
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=dh1dh7[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=dh1dh7[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=dh1dh7[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=dh1dh7[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=dh1dh7[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=dh1dh7[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=dh1dh7[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=0;
++	for(i=0;i<NUMNODESMINI;i++){
++		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dbasismini[1][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = dbasismini[2][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = dbasismini[1][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = dbasismini[0][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+0] = dbasismini[2][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2] = dbasismini[0][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+0] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1] = dbasismini[2][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2] = dbasismini[1][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+0] = dbasismini[0][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1] = dbasismini[1][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2] = dbasismini[2][i];
++		B_prime[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+0] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2] = 0.;
+ 	}
+ 
+-	for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3)=0;
+-		*(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3)=l1l6[i];
++	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
++		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3] = basis[i];
+ 	}
+ 
+ }
+@@ -468,52 +465,50 @@
+ 	 */
+ 
+ 	int i;
+-	IssmDouble dh1dh6[3][NUMNODESP1];
+-	IssmDouble l1l6[NUMNODESP1];
++	IssmDouble dbasis[3][NUMNODESP1];
++	IssmDouble basis[NUMNODESP1];
+ 
+-	/*Get dh1dh7 in actual coordinate system: */
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
+-	GetNodalFunctionsP1(l1l6, gauss);
++	/*Get dbasismini in actual coordinate system: */
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss);
++	GetNodalFunctionsP1(basis, gauss);
+ 
+ 	/*B_primeuild B_prime: */
+-	for (i=0;i<NUMNODESP1;i++){
+-		*(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i)=dh1dh6[0][i]; //B_prime[0][NDOF4*i]=dh1dh6[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+1)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+2)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+1)=dh1dh6[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+2)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+1)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+2)=dh1dh6[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i)=dh1dh6[1][i]; 
+-		*(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+1)=dh1dh6[0][i]; 
+-		*(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+2)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i)=dh1dh6[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+1)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+2)=dh1dh6[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+1)=dh1dh6[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+2)=dh1dh6[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i)=dh1dh6[0][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+1)=dh1dh6[1][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+2)=dh1dh6[2][i];
+-		*(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+1)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+2)=0.;
+-		_assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
++	for(i=0;i<NUMNODESP1;i++){
++		B_prime[(NDOF4*NUMNODESP1)*0+NDOF4*i+0] = dbasis[0][i];
++		B_prime[(NDOF4*NUMNODESP1)*0+NDOF4*i+1] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*0+NDOF4*i+2] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*1+NDOF4*i+0] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*1+NDOF4*i+1] = dbasis[1][i];
++		B_prime[(NDOF4*NUMNODESP1)*1+NDOF4*i+2] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*2+NDOF4*i+0] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*2+NDOF4*i+1] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*2+NDOF4*i+2] = dbasis[2][i];
++		B_prime[(NDOF4*NUMNODESP1)*3+NDOF4*i+0] = dbasis[1][i];
++		B_prime[(NDOF4*NUMNODESP1)*3+NDOF4*i+1] = dbasis[0][i];
++		B_prime[(NDOF4*NUMNODESP1)*3+NDOF4*i+2] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*4+NDOF4*i+0] = dbasis[2][i];
++		B_prime[(NDOF4*NUMNODESP1)*4+NDOF4*i+1] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*4+NDOF4*i+2] = dbasis[0][i];
++		B_prime[(NDOF4*NUMNODESP1)*5+NDOF4*i+0] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*5+NDOF4*i+1] = dbasis[2][i];
++		B_prime[(NDOF4*NUMNODESP1)*5+NDOF4*i+2] = dbasis[1][i];
++		B_prime[(NDOF4*NUMNODESP1)*6+NDOF4*i+0] = dbasis[0][i];
++		B_prime[(NDOF4*NUMNODESP1)*6+NDOF4*i+1] = dbasis[1][i];
++		B_prime[(NDOF4*NUMNODESP1)*6+NDOF4*i+2] = dbasis[2][i];
++		B_prime[(NDOF4*NUMNODESP1)*7+NDOF4*i+0] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*7+NDOF4*i+1] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*7+NDOF4*i+2] = 0.;
+ 	}
+ 
+-	for (i=0;i<NUMNODESP1;i++){ //last column 
+-		*(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+3)=0.;
+-		*(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+3)=l1l6[i];
+-		_assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
++	for(i=0;i<NUMNODESP1;i++){ //last column 
++		B_prime[(NDOF4*NUMNODESP1)*0+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*1+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*2+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*3+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*4+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*5+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*6+NDOF4*i+3] = 0.;
++		B_prime[(NDOF4*NUMNODESP1)*7+NDOF4*i+3] = basis[i];
+ 	}
+ 
+ }
+@@ -532,16 +527,16 @@
+ 	 */
+ 
+ 	/*Same thing in the actual coordinate system: */
+-	IssmDouble l1l6[6];
++	IssmDouble basis[6];
+ 
+ 	/*Get dh1dh2dh3 in actual coordinates system : */
+-	GetNodalFunctionsP1(l1l6, gauss);
++	GetNodalFunctionsP1(basis, gauss);
+ 
+ 	/*Build B': */
+-	for (int i=0;i<NUMNODESP1;i++){
+-		*(B_advec+NDOF1*NUMNODESP1*0+NDOF1*i)=l1l6[i]; 
+-		*(B_advec+NDOF1*NUMNODESP1*1+NDOF1*i)=l1l6[i]; 
+-		*(B_advec+NDOF1*NUMNODESP1*2+NDOF1*i)=l1l6[i]; 
++	for(int i=0;i<NUMNODESP1;i++){
++		B_advec[NDOF1*NUMNODESP1*0+NDOF1*i] = basis[i];
++		B_advec[NDOF1*NUMNODESP1*1+NDOF1*i] = basis[i];
++		B_advec[NDOF1*NUMNODESP1*2+NDOF1*i] = basis[i];
+ 	}
+ }
+ /*}}}*/
+@@ -559,16 +554,16 @@
+ 	 */
+ 
+ 	/*Same thing in the actual coordinate system: */
+-	IssmDouble dh1dh6[3][NUMNODESP1];
++	IssmDouble dbasis[3][NUMNODESP1];
+ 
+ 	/*Get dh1dh2dh3 in actual coordinates system : */
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list,gauss);
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
+ 
+ 	/*Build B': */
+-	for (int i=0;i<NUMNODESP1;i++){
+-		*(B_conduct+NDOF1*NUMNODESP1*0+NDOF1*i)=dh1dh6[0][i]; 
+-		*(B_conduct+NDOF1*NUMNODESP1*1+NDOF1*i)=dh1dh6[1][i]; 
+-		*(B_conduct+NDOF1*NUMNODESP1*2+NDOF1*i)=dh1dh6[2][i]; 
++	for(int i=0;i<NUMNODESP1;i++){
++		B_conduct[NDOF1*NUMNODESP1*0+NDOF1*i] = dbasis[0][i];
++		B_conduct[NDOF1*NUMNODESP1*1+NDOF1*i] = dbasis[1][i];
++		B_conduct[NDOF1*NUMNODESP1*2+NDOF1*i] = dbasis[2][i];
+ 	}
+ }
+ /*}}}*/
+@@ -577,15 +572,13 @@
+ 	/*	Compute B  matrix. B=[dh1/dz dh2/dz dh3/dz dh4/dz dh5/dz dh6/dz];
+ 		where hi is the interpolation function for node i.*/
+ 
+-	int i;
+-	IssmDouble dh1dh6[3][NUMNODESP1];
++	/*Get dbasis in actual coordinate system: */
++	IssmDouble dbasis[3][NUMNODESP1];
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss);
+ 
+-	/*Get dh1dh6 in actual coordinate system: */
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
+-
+ 	/*Build B: */
+-	for (i=0;i<NUMNODESP1;i++){
+-		B[i]=dh1dh6[2][i];  
++	for(int i=0;i<NUMNODESP1;i++){
++		B[i] = dbasis[2][i];  
+ 	}
+ 
+ }
+@@ -603,23 +596,20 @@
+ 	 * We assume B has been allocated already, of size: 3x(NDOF1*NUMNODESP1)
+ 	 */
+ 
+-	/*Same thing in the actual coordinate system: */
+-	IssmDouble dh1dh6[3][NUMNODESP1];
++	/*Get nodal function derivatives in actual coordinates system : */
++	IssmDouble dbasis[3][NUMNODESP1];
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
+ 
+-	/*Get dh1dh2dh3 in actual coordinates system : */
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list,gauss);
+-
+ 	/*Build B': */
+-	for (int i=0;i<NUMNODESP1;i++){
+-		*(Bprime_advec+NDOF1*NUMNODESP1*0+NDOF1*i)=dh1dh6[0][i]; 
+-		*(Bprime_advec+NDOF1*NUMNODESP1*1+NDOF1*i)=dh1dh6[1][i]; 
+-		*(Bprime_advec+NDOF1*NUMNODESP1*2+NDOF1*i)=dh1dh6[2][i]; 
++	for(int i=0;i<NUMNODESP1;i++){
++		Bprime_advec[NDOF1*NUMNODESP1*0+NDOF1*i] = dbasis[0][i];
++		Bprime_advec[NDOF1*NUMNODESP1*1+NDOF1*i] = dbasis[1][i];
++		Bprime_advec[NDOF1*NUMNODESP1*2+NDOF1*i] = dbasis[2][i];
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBprimeVert{{{*/
+ void PentaRef::GetBprimeVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+-	/* Compute Bprime  matrix. Bprime=[L1 L2 L3 L4 L5 L6] where Li is the nodal function for node i*/
+ 
+ 	GetNodalFunctionsP1(B, gauss);
+ 
+@@ -637,23 +627,21 @@
+ 	 ** We assume B has been allocated already, of size: 2 (2 x numnodes)
+ 	 **/
+ 
++	/*Get basis in actual coordinate system: */
+ 	IssmDouble basis[6];
+-
+-	/*Get l1l6 in actual coordinate system: */
+ 	GetNodalFunctionsP1(&basis[0],gauss);
+ 
+ 	for(int i=0;i<NUMNODESP1;i++){
+-		B[2*NUMNODESP1*0+2*i+0]=basis[i]; 
+-		B[2*NUMNODESP1*0+2*i+1]=0.;
+-		B[2*NUMNODESP1*1+2*i+0]=0.;
+-		B[2*NUMNODESP1*1+2*i+1]=basis[i];
++		B[2*NUMNODESP1*0+2*i+0] = basis[i];
++		B[2*NUMNODESP1*0+2*i+1] = 0.;
++		B[2*NUMNODESP1*1+2*i+0] = 0.;
++		B[2*NUMNODESP1*1+2*i+1] = basis[i];
+ 	}
+ } 
+ /*}}}*/
+ /*FUNCTION PentaRef::GetLStokes{{{*/
+ void PentaRef::GetLStokes(IssmDouble* LStokes, GaussPenta* gauss){
+-	/*
+-	 * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
++	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+ 	 * by: 
+ 	 *       Li=[ h 0 ]
+@@ -672,24 +660,22 @@
+ 	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+ 	/*Build LStokes: */
+-	for (int i=0;i<3;i++){
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+0)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0.;
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0.;
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0.;
++	for(int i=0;i<3;i++){
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+ 
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+0)=0.;
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0.;
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0.;
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetLprimeStokes {{{*/
+ void PentaRef::GetLprimeStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
+-
+-	/*
+-	 * Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
++	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
+ 	 * For node i, Lpi can be expressed in the actual coordinate system
+ 	 * by: 
+ 	 *       Lpi=[ h    0    0   0]1
+@@ -727,73 +713,73 @@
+ 	int num_dof=4;
+ 
+ 	IssmDouble l1l2l3[NUMNODESP1_2d];
+-	IssmDouble dh1dh6[3][NUMNODESP1];
++	IssmDouble dbasis[3][NUMNODESP1];
+ 
+ 	/*Get l1l2l3 in actual coordinate system: */
+ 	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+ 	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+ 	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list,gauss);
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
+ 
+ 	/*Build LprimeStokes: */
+-	for (i=0;i<3;i++){
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i)=l1l2l3[i]; //LprimeStokes[0][NDOF2*i]=dh1dh3[0][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*4+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+2)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*5+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+2)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*6+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+2)=dh1dh6[2][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*7+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+2)=dh1dh6[2][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*8+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*8+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*8+num_dof*i+2)=dh1dh6[2][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*8+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*9+num_dof*i)=dh1dh6[2][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*9+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*9+num_dof*i+2)=dh1dh6[0][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*9+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*10+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*10+num_dof*i+1)=dh1dh6[2][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*10+num_dof*i+2)=dh1dh6[1][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*10+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*11+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*11+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*11+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*11+num_dof*i+3)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*12+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*12+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*12+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*12+num_dof*i+3)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*13+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*13+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*13+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*13+num_dof*i+3)=l1l2l3[i];
++	for(int i=0;i<3;i++){
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0]  = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1]  = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0]  = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1]  = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+2]  = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+2]  = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+2]  = dbasis[2][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+2]  = dbasis[2][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+0]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+1]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+2]  = dbasis[2][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+0]  = dbasis[2][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+1]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+2]  = dbasis[0][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+3]  = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+1] = dbasis[2][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+2] = dbasis[1][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+3] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+2] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+3] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+2] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+3] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+1] = 0;
++		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+2] = 0;
++		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+3] = l1l2l3[i];
+ 	}
+ }
+ /*}}}*/
+@@ -814,9 +800,7 @@
+ 	 * where h is the interpolation function for node i.
+ 	 */
+ 
+-	int i;
+ 	int num_dof=2;
+-
+ 	IssmDouble l1l2l3[NUMNODESP1_2d];
+ 
+ 	/*Get l1l2l3 in actual coordinate system: */
+@@ -825,32 +809,29 @@
+ 	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+ 	/*Build LStokes: */
+-	for (i=0;i<3;i++){
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*4+num_dof*i)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+1)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*5+num_dof*i)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+1)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*6+num_dof*i)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+1)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*7+num_dof*i)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+1)=l1l2l3[i];
+-
++	for(int i=0;i<3;i++){
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0;
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0;
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0;
++		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0;
++		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0;
++		LStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0;
++		LStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0;
++		LStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0;
++		LStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = l1l2l3[i];
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetLprimeMacAyealStokes {{{*/
+ void PentaRef::GetLprimeMacAyealStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
+-
+-	/*
+-	 * Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
++	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
+ 	 * For node i, Lpi can be expressed in the actual coordinate system
+ 	 * by: 
+ 	 *       Lpi=[ h    0    0   0]
+@@ -863,60 +844,57 @@
+ 	 *           [ 0    0    0   h]
+ 	 * where h is the interpolation function for node i.
+ 	 */
+-	int i;
+ 	int num_dof=4;
+-
+ 	IssmDouble l1l2l3[NUMNODESP1_2d];
+-	IssmDouble dh1dh6[3][NUMNODESP1];
++	IssmDouble dbasis[3][NUMNODESP1];
+ 
+ 	/*Get l1l2l3 in actual coordinate system: */
+ 	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+ 	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+ 	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list,gauss);
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
+ 
+ 	/*Build LprimeStokes: */
+-	for (i=0;i<3;i++){
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i)=l1l2l3[i]; //LprimeStokes[0][NDOF2*i]=dh1dh3[0][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+2)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+2)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*4+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+2)=dh1dh6[2][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*5+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+2)=dh1dh6[2][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+3)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*6+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+3)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*7+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+2)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+3)=l1l2l3[i];
++	for(int i=0;i<3;i++){
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = dbasis[2][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = dbasis[2][i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = l1l2l3[i];
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetLStokesMacAyeal {{{*/
+ void PentaRef::GetLStokesMacAyeal(IssmDouble* LStokes, GaussPenta* gauss){
+-	/*
+-	 * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
++	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+ 	 * by: 
+ 	 *       Li=[ h    0    0   0]
+@@ -926,9 +904,7 @@
+ 	 * where h is the interpolation function for node i.
+ 	 */
+ 
+-	int i;
+ 	int num_dof=4;
+-
+ 	IssmDouble l1l2l3[NUMNODESP1_2d];
+ 
+ 	/*Get l1l2l3 in actual coordinate system: */
+@@ -937,32 +913,29 @@
+ 	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+ 	/*Build LStokes: */
+-	for (i=0;i<3;i++){
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+2)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+3)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=0;
+-		*(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+2)=l1l2l3[i];
+-		*(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+3)=0;
+-
++	for(int i=0;i<3;i++){
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
++		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = l1l2l3[i];
++		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetLprimeStokesMacAyeal {{{*/
+ void PentaRef::GetLprimeStokesMacAyeal(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
+-
+-	/*
+-	 * Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
++	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
+ 	 * For node i, Lpi can be expressed in the actual coordinate system
+ 	 * by: 
+ 	 *       Lpi=[ h    0 ]
+@@ -971,87 +944,80 @@
+ 	 *		       [ 0    h ]
+ 	 * where h is the interpolation function for node i.
+ 	 */
+-	int i;
+ 	int num_dof=2;
+-
+ 	IssmDouble l1l2l3[NUMNODESP1_2d];
+-	IssmDouble dh1dh6[3][NUMNODESP1];
++	IssmDouble dbasis[3][NUMNODESP1];
+ 
+ 	/*Get l1l2l3 in actual coordinate system: */
+ 	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+ 	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+ 	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
+ 
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list,gauss);
+-
+ 	/*Build LprimeStokes: */
+-	for (i=0;i<3;i++){
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i)=l1l2l3[i]; //LprimeStokes[0][NDOF2*i]=dh1dh3[0][i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i)=l1l2l3[i];
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i)=0;
+-		*(LprimeStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=l1l2l3[i];
++	for(int i=0;i<3;i++){
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];
++		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
++		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetJacobian {{{*/
+ void PentaRef::GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussPenta* gauss){
+-
+ 	/*The Jacobian is constant over the element, discard the gaussian points. 
+ 	 * J is assumed to have been allocated of size NDOF2xNDOF2.*/
+ 
+-	IssmDouble A1,A2,A3; //area coordinates
+-	IssmDouble xi,eta,zi; //parametric coordinates
+-
++	IssmDouble A1,A2,A3;  // area coordinates
++	IssmDouble xi,eta,zi; // parametric coordinates
+ 	IssmDouble x1,x2,x3,x4,x5,x6;
+ 	IssmDouble y1,y2,y3,y4,y5,y6;
+ 	IssmDouble z1,z2,z3,z4,z5,z6;
+ 
+ 	/*Figure out xi,eta and zi (parametric coordinates), for this gaussian point: */
+-	A1=gauss->coord1;
+-	A2=gauss->coord2;
+-	A3=gauss->coord3;
+-
++	A1  = gauss->coord1;
++	A2  = gauss->coord2;
++	A3  = gauss->coord3;
+ 	xi  = A2-A1;
+ 	eta = SQRT3*A3;
+ 	zi  = gauss->coord4;
+ 
+-	x1=*(xyz_list+3*0+0);
+-	x2=*(xyz_list+3*1+0);
+-	x3=*(xyz_list+3*2+0);
+-	x4=*(xyz_list+3*3+0);
+-	x5=*(xyz_list+3*4+0);
+-	x6=*(xyz_list+3*5+0);
++	x1=xyz_list[3*0+0];
++	x2=xyz_list[3*1+0];
++	x3=xyz_list[3*2+0];
++	x4=xyz_list[3*3+0];
++	x5=xyz_list[3*4+0];
++	x6=xyz_list[3*5+0];
+ 
+-	y1=*(xyz_list+3*0+1);
+-	y2=*(xyz_list+3*1+1);
+-	y3=*(xyz_list+3*2+1);
+-	y4=*(xyz_list+3*3+1);
+-	y5=*(xyz_list+3*4+1);
+-	y6=*(xyz_list+3*5+1);
++	y1=xyz_list[3*0+1];
++	y2=xyz_list[3*1+1];
++	y3=xyz_list[3*2+1];
++	y4=xyz_list[3*3+1];
++	y5=xyz_list[3*4+1];
++	y6=xyz_list[3*5+1];
+ 
+-	z1=*(xyz_list+3*0+2);
+-	z2=*(xyz_list+3*1+2);
+-	z3=*(xyz_list+3*2+2);
+-	z4=*(xyz_list+3*3+2);
+-	z5=*(xyz_list+3*4+2);
+-	z6=*(xyz_list+3*5+2);
++	z1=xyz_list[3*0+2];
++	z2=xyz_list[3*1+2];
++	z3=xyz_list[3*2+2];
++	z4=xyz_list[3*3+2];
++	z5=xyz_list[3*4+2];
++	z6=xyz_list[3*5+2];
+ 
+-	*(J+NDOF3*0+0)=0.25*(x1-x2-x4+x5)*zi+0.25*(-x1+x2-x4+x5);
+-	*(J+NDOF3*1+0)=SQRT3/12.0*(x1+x2-2*x3-x4-x5+2*x6)*zi+SQRT3/12.0*(-x1-x2+2*x3-x4-x5+2*x6);
+-	*(J+NDOF3*2+0)=SQRT3/12.0*(x1+x2-2*x3-x4-x5+2*x6)*eta+1/4*(x1-x2-x4+x5)*xi +0.25*(-x1+x5-x2+x4);
++	J[NDOF3*0+0] = 0.25*(x1-x2-x4+x5)*zi+0.25*(-x1+x2-x4+x5);
++	J[NDOF3*1+0] = SQRT3/12.0*(x1+x2-2*x3-x4-x5+2*x6)*zi+SQRT3/12.0*(-x1-x2+2*x3-x4-x5+2*x6);
++	J[NDOF3*2+0] = SQRT3/12.0*(x1+x2-2*x3-x4-x5+2*x6)*eta+1/4*(x1-x2-x4+x5)*xi +0.25*(-x1+x5-x2+x4);
+ 
+-	*(J+NDOF3*0+1)=0.25*(y1-y2-y4+y5)*zi+0.25*(-y1+y2-y4+y5);
+-	*(J+NDOF3*1+1)=SQRT3/12.0*(y1+y2-2*y3-y4-y5+2*y6)*zi+SQRT3/12.0*(-y1-y2+2*y3-y4-y5+2*y6);
+-	*(J+NDOF3*2+1)=SQRT3/12.0*(y1+y2-2*y3-y4-y5+2*y6)*eta+0.25*(y1-y2-y4+y5)*xi+0.25*(y4-y1+y5-y2);
++	J[NDOF3*0+1] = 0.25*(y1-y2-y4+y5)*zi+0.25*(-y1+y2-y4+y5);
++	J[NDOF3*1+1] = SQRT3/12.0*(y1+y2-2*y3-y4-y5+2*y6)*zi+SQRT3/12.0*(-y1-y2+2*y3-y4-y5+2*y6);
++	J[NDOF3*2+1] = SQRT3/12.0*(y1+y2-2*y3-y4-y5+2*y6)*eta+0.25*(y1-y2-y4+y5)*xi+0.25*(y4-y1+y5-y2);
+ 
+-	*(J+NDOF3*0+2)=0.25*(z1-z2-z4+z5)*zi+0.25*(-z1+z2-z4+z5);
+-	*(J+NDOF3*1+2)=SQRT3/12.0*(z1+z2-2*z3-z4-z5+2*z6)*zi+SQRT3/12.0*(-z1-z2+2*z3-z4-z5+2*z6);
+-	*(J+NDOF3*2+2)=SQRT3/12.0*(z1+z2-2*z3-z4-z5+2*z6)*eta+0.25*(z1-z2-z4+z5)*xi+0.25*(-z1+z5-z2+z4);
+-
++	J[NDOF3*0+2] = 0.25*(z1-z2-z4+z5)*zi+0.25*(-z1+z2-z4+z5);
++	J[NDOF3*1+2] = SQRT3/12.0*(z1+z2-2*z3-z4-z5+2*z6)*zi+SQRT3/12.0*(-z1-z2+2*z3-z4-z5+2*z6);
++	J[NDOF3*2+2] = SQRT3/12.0*(z1+z2-2*z3-z4-z5+2*z6)*eta+0.25*(z1-z2-z4+z5)*xi+0.25*(-z1+z5-z2+z4);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetJacobianDeterminant {{{*/
+@@ -1074,20 +1040,18 @@
+ 	/*The Jacobian determinant is constant over the element, discard the gaussian points. 
+ 	 * J is assumed to have been allocated of size NDOF2xNDOF2.*/
+ 
+-	IssmDouble x1,x2,x3,y1,y2,y3,z1,z2,z3;
++	IssmDouble x1=xyz_list[3*0+0];
++	IssmDouble y1=xyz_list[3*0+1];
++	IssmDouble z1=xyz_list[3*0+2];
++	IssmDouble x2=xyz_list[3*1+0];
++	IssmDouble y2=xyz_list[3*1+1];
++	IssmDouble z2=xyz_list[3*1+2];
++	IssmDouble x3=xyz_list[3*2+0];
++	IssmDouble y3=xyz_list[3*2+1];
++	IssmDouble z3=xyz_list[3*2+2];
+ 
+-	x1=*(xyz_list+3*0+0);
+-	y1=*(xyz_list+3*0+1);
+-	z1=*(xyz_list+3*0+2);
+-	x2=*(xyz_list+3*1+0);
+-	y2=*(xyz_list+3*1+1);
+-	z2=*(xyz_list+3*1+2);
+-	x3=*(xyz_list+3*2+0);
+-	y3=*(xyz_list+3*2+1);
+-	z3=*(xyz_list+3*2+2);
+-
+ 	/*Jdet = norm( AB ^ AC ) / (2 * area of the reference triangle), with areaRef=sqrt(3) */
+-	*Jdet=SQRT3/6.0*pow(pow(((y2-y1)*(z3-z1)-(z2-z1)*(y3-y1)),2.0)+pow(((z2-z1)*(x3-x1)-(x2-x1)*(z3-z1)),2.0)+pow(((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)),2.0),0.5);
++	*Jdet=SQRT3/6.*pow(pow(((y2-y1)*(z3-z1)-(z2-z1)*(y3-y1)),2)+pow(((z2-z1)*(x3-x1)-(x2-x1)*(z3-z1)),2)+pow(((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)),2),0.5);
+ 	if(*Jdet<0) _error_("negative jacobian determinant!");
+ }
+ /*}}}*
+@@ -1096,16 +1060,14 @@
+ 	/*The Jacobian determinant is constant over the element, discard the gaussian points. 
+ 	 * J is assumed to have been allocated of size NDOF2xNDOF2.*/
+ 
+-	IssmDouble x1,x2,y1,y2,z1,z2;
++	IssmDouble x1=xyz_list[3*0+0];
++	IssmDouble y1=xyz_list[3*0+1];
++	IssmDouble z1=xyz_list[3*0+2];
++	IssmDouble x2=xyz_list[3*1+0];
++	IssmDouble y2=xyz_list[3*1+1];
++	IssmDouble z2=xyz_list[3*1+2];
+ 
+-	x1=*(xyz_list+3*0+0);
+-	y1=*(xyz_list+3*0+1);
+-	z1=*(xyz_list+3*0+2);
+-	x2=*(xyz_list+3*1+0);
+-	y2=*(xyz_list+3*1+1);
+-	z2=*(xyz_list+3*1+2);
+-
+-	*Jdet=1.0/2.0*sqrt(pow(x2-x1,2.) + pow(y2-y1,2.) + pow(z2-z1,2.));
++	*Jdet=.5*sqrt(pow(x2-x1,2) + pow(y2-y1,2) + pow(z2-z1,2));
+ 	if(*Jdet<0) _error_("negative jacobian determinant!");
+ 
+ }
+@@ -1274,21 +1236,21 @@
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsMINIDerivatives{{{*/
+-void PentaRef::GetNodalFunctionsMINIDerivatives(IssmDouble* dh1dh7,IssmDouble* xyz_list, GaussPenta* gauss){
++void PentaRef::GetNodalFunctionsMINIDerivatives(IssmDouble* dbasismini,IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
+ 	 * actual coordinate system): */
+ 
+-	IssmDouble    dh1dh7_ref[3][NUMNODESMINI];
++	IssmDouble    dbasismini_ref[3][NUMNODESMINI];
+ 	IssmDouble    Jinv[3][3];
+ 
+ 	/*Get derivative values with respect to parametric coordinate system: */
+-	GetNodalFunctionsMINIDerivativesReference(&dh1dh7_ref[0][0], gauss); 
++	GetNodalFunctionsMINIDerivativesReference(&dbasismini_ref[0][0], gauss); 
+ 
+ 	/*Get Jacobian invert: */
+ 	GetJacobianInvert(&Jinv[0][0], xyz_list, gauss);
+ 
+-	/*Build dh1dh6: 
++	/*Build dbasis: 
+ 	 *
+ 	 * [dhi/dx]= Jinv'*[dhi/dr]
+ 	 * [dhi/dy]        [dhi/ds]
+@@ -1296,9 +1258,9 @@
+ 	 */
+ 
+ 	for(int i=0;i<NUMNODESMINI;i++){
+-		*(dh1dh7+NUMNODESMINI*0+i)=Jinv[0][0]*dh1dh7_ref[0][i]+Jinv[0][1]*dh1dh7_ref[1][i]+Jinv[0][2]*dh1dh7_ref[2][i];
+-		*(dh1dh7+NUMNODESMINI*1+i)=Jinv[1][0]*dh1dh7_ref[0][i]+Jinv[1][1]*dh1dh7_ref[1][i]+Jinv[1][2]*dh1dh7_ref[2][i];
+-		*(dh1dh7+NUMNODESMINI*2+i)=Jinv[2][0]*dh1dh7_ref[0][i]+Jinv[2][1]*dh1dh7_ref[1][i]+Jinv[2][2]*dh1dh7_ref[2][i];
++		*(dbasismini+NUMNODESMINI*0+i)=Jinv[0][0]*dbasismini_ref[0][i]+Jinv[0][1]*dbasismini_ref[1][i]+Jinv[0][2]*dbasismini_ref[2][i];
++		*(dbasismini+NUMNODESMINI*1+i)=Jinv[1][0]*dbasismini_ref[0][i]+Jinv[1][1]*dbasismini_ref[1][i]+Jinv[1][2]*dbasismini_ref[2][i];
++		*(dbasismini+NUMNODESMINI*2+i)=Jinv[2][0]*dbasismini_ref[0][i]+Jinv[2][1]*dbasismini_ref[1][i]+Jinv[2][2]*dbasismini_ref[2][i];
+ 	}
+ 
+ }
+@@ -1341,28 +1303,28 @@
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsP1 {{{*/
+-void PentaRef::GetNodalFunctionsP1(IssmDouble* l1l6, GaussPenta* gauss){
++void PentaRef::GetNodalFunctionsP1(IssmDouble* basis, GaussPenta* gauss){
+ 	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+ 
+-	l1l6[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+-	l1l6[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+-	l1l6[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+-	l1l6[3]=gauss->coord1*(1+gauss->coord4)/2.0;
+-	l1l6[4]=gauss->coord2*(1+gauss->coord4)/2.0;
+-	l1l6[5]=gauss->coord3*(1+gauss->coord4)/2.0;
++	basis[0]=gauss->coord1*(1-gauss->coord4)/2.0;
++	basis[1]=gauss->coord2*(1-gauss->coord4)/2.0;
++	basis[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	basis[3]=gauss->coord1*(1+gauss->coord4)/2.0;
++	basis[4]=gauss->coord2*(1+gauss->coord4)/2.0;
++	basis[5]=gauss->coord3*(1+gauss->coord4)/2.0;
+ 
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsP1Derivatives {{{*/
+-void PentaRef::GetNodalFunctionsP1Derivatives(IssmDouble* dh1dh6,IssmDouble* xyz_list, GaussPenta* gauss){
++void PentaRef::GetNodalFunctionsP1Derivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
+ 	 * actual coordinate system): */
+-	IssmDouble    dh1dh6_ref[NDOF3][NUMNODESP1];
++	IssmDouble    dbasis_ref[NDOF3][NUMNODESP1];
+ 	IssmDouble    Jinv[NDOF3][NDOF3];
+ 
+ 	/*Get derivative values with respect to parametric coordinate system: */
+-	GetNodalFunctionsP1DerivativesReference(&dh1dh6_ref[0][0], gauss); 
++	GetNodalFunctionsP1DerivativesReference(&dbasis_ref[0][0], gauss); 
+ 
+ 	/*Get Jacobian invert: */
+ 	GetJacobianInvert(&Jinv[0][0], xyz_list, gauss);
+@@ -1375,9 +1337,9 @@
+ 	 */
+ 
+ 	for (int i=0;i<NUMNODESP1;i++){
+-		*(dh1dh6+NUMNODESP1*0+i)=Jinv[0][0]*dh1dh6_ref[0][i]+Jinv[0][1]*dh1dh6_ref[1][i]+Jinv[0][2]*dh1dh6_ref[2][i];
+-		*(dh1dh6+NUMNODESP1*1+i)=Jinv[1][0]*dh1dh6_ref[0][i]+Jinv[1][1]*dh1dh6_ref[1][i]+Jinv[1][2]*dh1dh6_ref[2][i];
+-		*(dh1dh6+NUMNODESP1*2+i)=Jinv[2][0]*dh1dh6_ref[0][i]+Jinv[2][1]*dh1dh6_ref[1][i]+Jinv[2][2]*dh1dh6_ref[2][i];
++		*(dbasis+NUMNODESP1*0+i)=Jinv[0][0]*dbasis_ref[0][i]+Jinv[0][1]*dbasis_ref[1][i]+Jinv[0][2]*dbasis_ref[2][i];
++		*(dbasis+NUMNODESP1*1+i)=Jinv[1][0]*dbasis_ref[0][i]+Jinv[1][1]*dbasis_ref[1][i]+Jinv[1][2]*dbasis_ref[2][i];
++		*(dbasis+NUMNODESP1*2+i)=Jinv[2][0]*dbasis_ref[0][i]+Jinv[2][1]*dbasis_ref[1][i]+Jinv[2][2]*dbasis_ref[2][i];
+ 	}
+ 
+ }
+@@ -1467,34 +1429,36 @@
+ 	/*P1 interpolation on Gauss point*/
+ 
+ 	/*intermediary*/
+-	IssmDouble l1l6[6];
++	IssmDouble basis[6];
+ 
+ 	/*nodal functions: */
+-	GetNodalFunctionsP1(&l1l6[0],gauss);
++	GetNodalFunctionsP1(&basis[0],gauss);
+ 
+ 	/*Assign output pointers:*/
+-	*pvalue=l1l6[0]*plist[0]+l1l6[1]*plist[1]+l1l6[2]*plist[2]+l1l6[3]*plist[3]+l1l6[4]*plist[4]+l1l6[5]*plist[5];
++	*pvalue=basis[0]*plist[0]+basis[1]*plist[1]+basis[2]*plist[2]+basis[3]*plist[3]+basis[4]*plist[4]+basis[5]*plist[5];
+ 
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetInputDerivativeValue{{{*/
+ void PentaRef::GetInputDerivativeValue(IssmDouble* p, IssmDouble* plist,IssmDouble* xyz_list, GaussPenta* gauss){
+-	/*From node values of parameter p (p_list[0], p_list[1], p_list[2], p_list[3], p_list[4] and p_list[4]), return parameter derivative value at gaussian point specified by gauss_coord:
++	/*From node values of parameter p (p_list[0], p_list[1], p_list[2],
++	 * p_list[3], p_list[4] and p_list[4]), return parameter derivative value at
++	 * gaussian point specified by gauss_coord:
+ 	 *   dp/dx=p_list[0]*dh1/dx+p_list[1]*dh2/dx+p_list[2]*dh3/dx+p_list[3]*dh4/dx+p_list[4]*dh5/dx+p_list[5]*dh6/dx;
+ 	 *   dp/dy=p_list[0]*dh1/dy+p_list[1]*dh2/dy+p_list[2]*dh3/dy+p_list[3]*dh4/dy+p_list[4]*dh5/dy+p_list[5]*dh6/dy;
+ 	 *   dp/dz=p_list[0]*dh1/dz+p_list[1]*dh2/dz+p_list[2]*dh3/dz+p_list[3]*dh4/dz+p_list[4]*dh5/dz+p_list[5]*dh6/dz;
+ 	 *
+ 	 *   p is a vector of size 3x1 already allocated.
+ 	 */
+-	IssmDouble dh1dh6[3][NUMNODESP1];
++	IssmDouble dbasis[3][NUMNODESP1];
+ 
+ 	/*Get nodal funnctions derivatives in actual coordinate system: */
+-	GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
++	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss);
+ 
+ 	/*Assign output*/
+-	p[0]=plist[0]*dh1dh6[0][0]+plist[1]*dh1dh6[0][1]+plist[2]*dh1dh6[0][2]+plist[3]*dh1dh6[0][3]+plist[4]*dh1dh6[0][4]+plist[5]*dh1dh6[0][5];
+-	p[1]=plist[0]*dh1dh6[1][0]+plist[1]*dh1dh6[1][1]+plist[2]*dh1dh6[1][2]+plist[3]*dh1dh6[1][3]+plist[4]*dh1dh6[1][4]+plist[5]*dh1dh6[1][5];
+-	p[2]=plist[0]*dh1dh6[2][0]+plist[1]*dh1dh6[2][1]+plist[2]*dh1dh6[2][2]+plist[3]*dh1dh6[2][3]+plist[4]*dh1dh6[2][4]+plist[5]*dh1dh6[2][5];
++	p[0]=plist[0]*dbasis[0][0]+plist[1]*dbasis[0][1]+plist[2]*dbasis[0][2]+plist[3]*dbasis[0][3]+plist[4]*dbasis[0][4]+plist[5]*dbasis[0][5];
++	p[1]=plist[0]*dbasis[1][0]+plist[1]*dbasis[1][1]+plist[2]*dbasis[1][2]+plist[3]*dbasis[1][3]+plist[4]*dbasis[1][4]+plist[5]*dbasis[1][5];
++	p[2]=plist[0]*dbasis[2][0]+plist[1]*dbasis[2][1]+plist[2]*dbasis[2][2]+plist[3]*dbasis[2][3]+plist[4]*dbasis[2][4]+plist[5]*dbasis[2][5];
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15469)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15470)
+@@ -71,8 +71,8 @@
+ 
+ 	/*Build B: */
+ 	for(int i=0;i<numnodes;i++){
+-		B[numnodes*0+i]=dbasis[0*numnodes+i]; 
+-		B[numnodes*1+i]=dbasis[1*numnodes+i]; 
++		B[numnodes*0+i] = dbasis[0*numnodes+i];
++		B[numnodes*1+i] = dbasis[1*numnodes+i];
+ 	}
+ 
+ 	/*Clean-up*/
+@@ -101,12 +101,12 @@
+ 
+ 	/*Build B: */
+ 	for(int i=0;i<numnodes;i++){
+-		B[NDOF2*numnodes*0+NDOF2*i+0]=dbasis[0*numnodes+i];
+-		B[NDOF2*numnodes*0+NDOF2*i+1]=0.;
+-		B[NDOF2*numnodes*1+NDOF2*i+0]=0.;
+-		B[NDOF2*numnodes*1+NDOF2*i+1]=dbasis[1*numnodes+i];
+-		B[NDOF2*numnodes*2+NDOF2*i+0]=.5*dbasis[1*numnodes+i]; 
+-		B[NDOF2*numnodes*2+NDOF2*i+1]=.5*dbasis[0*numnodes+i]; 
++		B[NDOF2*numnodes*0+NDOF2*i+0] = dbasis[0*numnodes+i];
++		B[NDOF2*numnodes*0+NDOF2*i+1] = 0.;
++		B[NDOF2*numnodes*1+NDOF2*i+0] = 0.;
++		B[NDOF2*numnodes*1+NDOF2*i+1] = dbasis[1*numnodes+i];
++		B[NDOF2*numnodes*2+NDOF2*i+0] = .5*dbasis[1*numnodes+i];
++		B[NDOF2*numnodes*2+NDOF2*i+1] = .5*dbasis[0*numnodes+i];
+ 	}
+ 
+ 	/*Clean-up*/
+@@ -135,13 +135,13 @@
+ 	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
+ 	/*Build B': */
+-	for (int i=0;i<numnodes;i++){
+-		B[NDOF2*numnodes*0+NDOF2*i+0]=dbasis[0*numnodes+i]; 
+-		B[NDOF2*numnodes*0+NDOF2*i+1]=0.; 
+-		B[NDOF2*numnodes*1+NDOF2*i+0]=0.; 
+-		B[NDOF2*numnodes*1+NDOF2*i+1]=dbasis[1*numnodes+i]; 
+-		B[NDOF2*numnodes*2+NDOF2*i+0]=0.5*dbasis[1*numnodes+i]; 
+-		B[NDOF2*numnodes*2+NDOF2*i+1]=0.5*dbasis[0*numnodes+i]; 
++	for(int i=0;i<numnodes;i++){
++		B[NDOF2*numnodes*0+NDOF2*i+0] = dbasis[0*numnodes+i];
++		B[NDOF2*numnodes*0+NDOF2*i+1] = 0.;
++		B[NDOF2*numnodes*1+NDOF2*i+0] = 0.;
++		B[NDOF2*numnodes*1+NDOF2*i+1] = dbasis[1*numnodes+i];
++		B[NDOF2*numnodes*2+NDOF2*i+0] = 0.5*dbasis[1*numnodes+i];
++		B[NDOF2*numnodes*2+NDOF2*i+1] = 0.5*dbasis[0*numnodes+i];
+ 	}
+ 
+ 	/*Clean-up*/
+@@ -220,9 +220,9 @@
+ 	GetNodalFunctions(basis,gauss);
+ 
+ 	/*Build B: */
+-	for (int i=0;i<numnodes;i++){
+-		B[numnodes*0+i]=basis[i];
+-		B[numnodes*1+i]=basis[i];
++	for(int i=0;i<numnodes;i++){
++		B[numnodes*0+i] = basis[i];
++		B[numnodes*1+i] = basis[i];
+ 	}
+ 
+ 	/*Clean-up*/
+@@ -251,7 +251,7 @@
+ 	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
+ 	/*Build B': */
+-	for (int i=0;i<numnodes;i++){
++	for(int i=0;i<numnodes;i++){
+ 		Bprime[NDOF2*numnodes*0+NDOF2*i+0] = 2.*dbasis[0*numnodes+i];
+ 		Bprime[NDOF2*numnodes*0+NDOF2*i+1] =    dbasis[1*numnodes+i];
+ 		Bprime[NDOF2*numnodes*1+NDOF2*i+0] =    dbasis[0*numnodes+i];
+@@ -287,14 +287,14 @@
+ 
+ 	/*Build Bprime: */
+ 	for(int i=0;i<numnodes;i++){
+-		Bprime[NDOF2*numnodes*0+NDOF2*i+0]=dbasis[0*numnodes+i]; 
+-		Bprime[NDOF2*numnodes*0+NDOF2*i+1]=0.; 
+-		Bprime[NDOF2*numnodes*1+NDOF2*i+0]=0.; 
+-		Bprime[NDOF2*numnodes*1+NDOF2*i+1]=dbasis[1*numnodes+i]; 
+-		Bprime[NDOF2*numnodes*2+NDOF2*i+0]=dbasis[1*numnodes+i]; 
+-		Bprime[NDOF2*numnodes*2+NDOF2*i+1]=dbasis[0*numnodes+i]; 
+-		Bprime[NDOF2*numnodes*3+NDOF2*i+0]=dbasis[0*numnodes+i]; 
+-		Bprime[NDOF2*numnodes*3+NDOF2*i+1]=dbasis[1*numnodes+i]; 
++		Bprime[NDOF2*numnodes*0+NDOF2*i+0] = dbasis[0*numnodes+i];
++		Bprime[NDOF2*numnodes*0+NDOF2*i+1] = 0.;
++		Bprime[NDOF2*numnodes*1+NDOF2*i+0] = 0.;
++		Bprime[NDOF2*numnodes*1+NDOF2*i+1] = dbasis[1*numnodes+i];
++		Bprime[NDOF2*numnodes*2+NDOF2*i+0] = dbasis[1*numnodes+i];
++		Bprime[NDOF2*numnodes*2+NDOF2*i+1] = dbasis[0*numnodes+i];
++		Bprime[NDOF2*numnodes*3+NDOF2*i+0] = dbasis[0*numnodes+i];
++		Bprime[NDOF2*numnodes*3+NDOF2*i+1] = dbasis[1*numnodes+i];
+ 	}
+ 
+ 	/*Clean-up*/
+@@ -322,8 +322,8 @@
+ 
+ 	/*Build B': */
+ 	for(int i=0;i<numnodes;i++){
+-		Bprime[numnodes*0+i]=dbasis[0*numnodes+i]; 
+-		Bprime[numnodes*1+i]=dbasis[1*numnodes+i]; 
++		Bprime[numnodes*0+i] = dbasis[0*numnodes+i];
++		Bprime[numnodes*1+i] = dbasis[1*numnodes+i];
+ 	}
+ 
+ 	/*Clean-up*/
+@@ -351,10 +351,10 @@
+ 
+ 	/*Build L: */
+ 	for(int i=0;i<numnodes;i++){
+-		B[2*numnodes*0+2*i+0]=basis[i];
+-		B[2*numnodes*0+2*i+1]=0.;
+-		B[2*numnodes*1+2*i+0]=0.;
+-		B[2*numnodes*1+2*i+1]=basis[i];
++		B[2*numnodes*0+2*i+0] = basis[i];
++		B[2*numnodes*0+2*i+1] = 0.;
++		B[2*numnodes*1+2*i+0] = 0.;
++		B[2*numnodes*1+2*i+1] = basis[i];
+ 	}
+ 
+ 	/*Clean-up*/
+@@ -507,8 +507,8 @@
+ 	 * [dhi/dy]       [dhi/ds]
+ 	 */
+ 	for(int i=0;i<numnodes;i++){
+-		dbasis[numnodes*0+i]=Jinv[0][0]*dbasis_ref[0*numnodes+i]+Jinv[0][1]*dbasis_ref[1*numnodes+i];
+-		dbasis[numnodes*1+i]=Jinv[1][0]*dbasis_ref[0*numnodes+i]+Jinv[1][1]*dbasis_ref[1*numnodes+i];
++		dbasis[numnodes*0+i] = Jinv[0][0]*dbasis_ref[0*numnodes+i]+Jinv[0][1]*dbasis_ref[1*numnodes+i];
++		dbasis[numnodes*1+i] = Jinv[1][0]*dbasis_ref[0*numnodes+i]+Jinv[1][1]*dbasis_ref[1*numnodes+i];
+ 	}
+ 
+ 	/*Clean up*/
+@@ -526,34 +526,34 @@
+ 	switch(this->element_type){
+ 		case P1Enum: case P1DGEnum:
+ 			/*Nodal function 1*/
+-			dbasis[NUMNODESP1*0+0]=-0.5; 
+-			dbasis[NUMNODESP1*1+0]=-1.0/(2.0*SQRT3);
++			dbasis[NUMNODESP1*0+0] = -0.5;
++			dbasis[NUMNODESP1*1+0] = -1.0/(2.0*SQRT3);
+ 			/*Nodal function 2*/
+-			dbasis[NUMNODESP1*0+1]=0.5;
+-			dbasis[NUMNODESP1*1+1]=-1.0/(2.0*SQRT3);
++			dbasis[NUMNODESP1*0+1] = 0.5;
++			dbasis[NUMNODESP1*1+1] = -1.0/(2.0*SQRT3);
+ 			/*Nodal function 3*/
+-			dbasis[NUMNODESP1*0+2]=0;
+-			dbasis[NUMNODESP1*1+2]=1.0/SQRT3;
++			dbasis[NUMNODESP1*0+2] = 0;
++			dbasis[NUMNODESP1*1+2] = 1.0/SQRT3;
+ 			return;
+ 		case P2Enum:
+ 			/*Nodal function 1*/
+-			dbasis[NUMNODESP2*0+0]=-2.*gauss->coord1 + 0.5;
+-			dbasis[NUMNODESP2*1+0]=-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.;
++			dbasis[NUMNODESP2*0+0] = -2.*gauss->coord1 + 0.5;
++			dbasis[NUMNODESP2*1+0] = -2.*SQRT3/3.*gauss->coord1 + SQRT3/6.;
+ 			/*Nodal function 2*/
+-			dbasis[NUMNODESP2*0+1]=+2.*gauss->coord2 - 0.5;
+-			dbasis[NUMNODESP2*1+1]=-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.;
++			dbasis[NUMNODESP2*0+1] = +2.*gauss->coord2 - 0.5;
++			dbasis[NUMNODESP2*1+1] = -2.*SQRT3/3.*gauss->coord2 + SQRT3/6.;
+ 			/*Nodal function 3*/
+-			dbasis[NUMNODESP2*0+2]=0.;
+-			dbasis[NUMNODESP2*1+2]=+4.*SQRT3/3.*gauss->coord3 - SQRT3/3.;
++			dbasis[NUMNODESP2*0+2] = 0.;
++			dbasis[NUMNODESP2*1+2] = +4.*SQRT3/3.*gauss->coord3 - SQRT3/3.;
+ 			/*Nodal function 4*/
+-			dbasis[NUMNODESP2*0+3]=+2.*gauss->coord3;
+-			dbasis[NUMNODESP2*1+3]=+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3;
++			dbasis[NUMNODESP2*0+3] = +2.*gauss->coord3;
++			dbasis[NUMNODESP2*1+3] = +4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3;
+ 			/*Nodal function 5*/
+-			dbasis[NUMNODESP2*0+4]=-2.*gauss->coord3;
+-			dbasis[NUMNODESP2*1+4]=+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3;
++			dbasis[NUMNODESP2*0+4] = -2.*gauss->coord3;
++			dbasis[NUMNODESP2*1+4] = +4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3;
+ 			/*Nodal function 6*/
+-			dbasis[NUMNODESP2*0+5]=2.*(gauss->coord1-gauss->coord2);
+-			dbasis[NUMNODESP2*1+5]=-2.*SQRT3/3.*(gauss->coord1+gauss->coord2);
++			dbasis[NUMNODESP2*0+5] = 2.*(gauss->coord1-gauss->coord2);
++			dbasis[NUMNODESP2*1+5] = -2.*SQRT3/3.*(gauss->coord1+gauss->coord2);
+ 			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+@@ -589,8 +589,8 @@
+ 
+ 	/*Assign values*/
+ 	xDelete<IssmDouble>(dbasis);
+-	*(p+0)=dpx;
+-	*(p+1)=dpy;
++	p[0]=dpx;
++	p[1]=dpy;
+ 
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15470-15471.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15470-15471.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15470-15471.diff	(revision 16134)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/configs/config-macosx64-nicole.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-nicole.sh	(revision 15470)
++++ ../trunk-jpl/configs/config-macosx64-nicole.sh	(revision 15471)
+@@ -1,21 +1,20 @@
+ #!/bin/sh
+ 
+-#petsc 3.2
+-#mpich 1.4
++#petsc 3.4
++#mpich 3.0.4
+ export F77='/usr/local/gfortran/bin/x86_64-apple-darwin10-gfortran'
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-matlab-dir=$MATLAB_DIR \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
++	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+ 	--with-mpi-libflags=" $ISSM_DIR/externalpackages/mpich/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpl.a " \
+ 	--with-petsc-arch=$ISSM_ARCH \
+ 	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
Index: /issm/oecreview/Archive/15392-16133/ISSM-15471-15472.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15471-15472.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15471-15472.diff	(revision 16134)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/configs/config-macosx64-nicole.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-nicole.sh	(revision 15471)
++++ ../trunk-jpl/configs/config-macosx64-nicole.sh	(revision 15472)
+@@ -1,25 +0,0 @@
+-#!/bin/sh
+-
+-#petsc 3.4
+-#mpich 3.0.4
+-export F77='/usr/local/gfortran/bin/x86_64-apple-darwin10-gfortran'
+-
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--with-matlab-dir=$MATLAB_DIR \
+-	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+-	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-	--with-mpi-libflags=" $ISSM_DIR/externalpackages/mpich/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpl.a " \
+-	--with-petsc-arch=$ISSM_ARCH \
+-	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+-	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+-	--with-fortran-lib="/usr/local/gfortran/lib/gcc/x86_64-apple-darwin10/4.6.2/libgfortran.a" \
+-	--with-math-lib="/usr/lib/libm.dylib" \
+-	--with-graphics-lib="/usr/X11/lib/libX11.dylib" \
+-	--with-cxxoptflags=" -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -mmacosx-version-min=10.5  -O3 -DNDEBUG -w "\
+-	--with-numthreads=8
+Index: ../trunk-jpl/configs/config-macosx64.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64.sh	(revision 15471)
++++ ../trunk-jpl/configs/config-macosx64.sh	(revision 15472)
+@@ -1,27 +1,25 @@
+ #!/bin/sh
+ 
+-#petsc 3.2
+-#mpich 1.4
+-#python 2.7
++#petsc 3.4
++#mpich 3.0.4
++export F77='/usr/local/gfortran/bin/x86_64-apple-darwin10-gfortran'
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+-	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+-	--with-python-dir="$ISSM_DIR/externalpackages/python/install" \
+-	--with-python-numpy-dir="$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy" \
+-	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+-	--with-metis-dir="$ISSM_DIR/externalpackages/metis/install" \
+-	--with-mpi-include="$ISSM_DIR/externalpackages/mpich/install/include" \
++	--with-matlab-dir=$MATLAB_DIR \
++	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
++	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
++	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+ 	--with-mpi-libflags=" $ISSM_DIR/externalpackages/mpich/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpl.a " \
++	--with-petsc-arch=$ISSM_ARCH \
++	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
++	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+-	--with-fortran-lib="/usr/local/gfortran/lib/libgfortran.a" \
++	--with-fortran-lib="/usr/local/gfortran/lib/gcc/x86_64-apple-darwin10/4.6.2/libgfortran.a" \
+ 	--with-math-lib="/usr/lib/libm.dylib" \
+ 	--with-graphics-lib="/usr/X11/lib/libX11.dylib" \
+-	--with-numthreads=8 \
+-	--with-petsc-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-petsc-arch="$ISSM_ARCH" \
+-	--with-blas-lapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+-	--with-blacs-dir="$ISSM_DIR/externalpackages/petsc/install/" \
+-	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install/" \
+-	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install/" \
+-	--with-dakota-dir="$ISSM_DIR/externalpackages/dakota/install" 
++	--with-cxxoptflags=" -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -mmacosx-version-min=10.5  -O3 -DNDEBUG -w "\
++	--with-numthreads=8
Index: /issm/oecreview/Archive/15392-16133/ISSM-15472-15473.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15472-15473.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15472-15473.diff	(revision 16134)
@@ -0,0 +1,302 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15472)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15473)
+@@ -2307,7 +2307,7 @@
+ 		node1=edges[i][1];
+ 
+ 		/*Compute the length of this edge and compare it to the minimal length*/
+-		length=pow(pow(xyz_list[node0][0]-xyz_list[node1][0],2.0)+pow(xyz_list[node0][1]-xyz_list[node1][1],2.0)+pow(xyz_list[node0][2]-xyz_list[node1][2],2.0),0.5);
++		length=sqrt(pow(xyz_list[node0][0]-xyz_list[node1][0],2)+pow(xyz_list[node0][1]-xyz_list[node1][1],2)+pow(xyz_list[node0][2]-xyz_list[node1][2],2));
+ 		if(length<minlength || minlength<0) minlength=length;
+ 	}
+ 
+@@ -6885,6 +6885,8 @@
+ 
+ 	/*Condensation*/
+ 	ReduceMatrixStokes(Ke->values, &Ke_temp[0][0]);
++	//Ke->Echo();
++	//_error_("stop");
+ 
+ 	/*Transform Coordinate System*/
+ 	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
+@@ -6914,6 +6916,17 @@
+ 	IssmDouble Ke_temp_stab[6][6]={0.0}; //for the six nodes
+ 	GaussPenta *gauss=NULL;
+ 
++	/*Stabilization*/
++	bool       stabilization = false;
++	IssmDouble dbasis[3][6];
++	IssmDouble dmu[3];
++	IssmDouble mu;
++	IssmDouble dnodalbasis[6][6][3];
++	IssmDouble SU[6][4][4];
++	IssmDouble SW[6][4][4];
++	int p,q,ii;
++	int c=3; //index of pressure
++
+ 	/*If on water or not Stokes, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
+@@ -6931,7 +6944,7 @@
+ 	diameter=MinEdgeLength(xyz_list);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(5,5);
++	gauss=new GaussPenta(3,2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+@@ -6950,29 +6963,93 @@
+ 		TripleMultiply( &B[0][0],8,24,1,
+ 					&D[0][0],8,8,0,
+ 					&B_prime[0][0],8,24,0,
+-					&Ke_temp[0][0],1);
++					&Ke_temp[0][0],0);
+ 
+ 		for(i=0;i<numdof;i++) for(j=0;j<numdof;j++) Ke->values[i*numdof+j]+=Ke_temp[i][j];
+ 
+ 		/*Add stabilization*/
+-		D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2.)/(4.*1000*rigidity)*stokesreconditioning;
+-		GetBConduct(&B_stab[0][0],&xyz_list[0][0],gauss); 
++		if(stabilization){
++			GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
++			dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
++			mu = viscosity;
++			for(i=0;i<6;i++){
++				for(p=0;p<6;p++){
++					for(j=0;j<3;j++){
++						dnodalbasis[i][p][j] = dbasis[j][p];
++					}
++				}
++			}
++			for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
++				SU[p][i][j]=0.;
++				SW[p][i][j]=0.;
++			}
++			for(p=0;p<6;p++){
++				for(i=0;i<3;i++){
++					SU[p][i][c] += dbasis[i][p];
++					SW[p][c][i] += dbasis[i][p];
++					for(j=0;j<3;j++){
++						SU[p][i][i] += -dmu[j]*dbasis[j][p];
++						SU[p][i][j] += -dmu[i]*dbasis[i][p];
++						for(ii=0;ii<6;ii++){
++							SU[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
++							SU[p][i][j] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
++						}
++						SW[p][i][i] += -dmu[j]*dbasis[j][p];
++						SW[p][j][i] += -dmu[j]*dbasis[i][p];
++						for(ii=0;ii<6;ii++){
++							SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
++							SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
++						}
++					}
++				}
++			}
++			IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
++			for(p=0;p<6;p++){
++				for(q=0;q<6;q++){
++					for(i=0;i<4;i++){
++						for(j=0;j<4;j++){
++							Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][0]*SU[q][0][j];
++							Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][1]*SU[q][1][j];
++							Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][2]*SU[q][2][j];
++						}
++					}
++				}
++			}
+ 
+-		D_stab[0][0]=D_scalar_stab; D_stab[0][1]=0;             D_stab[0][2]=0;
+-		D_stab[1][0]=0;             D_stab[1][1]=D_scalar_stab; D_stab[1][2]=0;
+-		D_stab[2][0]=0;             D_stab[2][1]=0;             D_stab[2][2]=D_scalar_stab;
++		}
+ 
+-		TripleMultiply(&B_stab[0][0],3,6,1,
+-					&D_stab[0][0],3,3,0,
+-					&B_stab[0][0],3,6,0,
+-					&Ke_temp_stab[0][0],1);
+ 
+-		for(i=0;i<NUMVERTICES;i++) for(j=0;j<NUMVERTICES;j++) Ke->values[numdof*(i*4+3)+j*4+3]+=Ke_temp_stab[i][j];
++		//viscosity = 1000*rigidity;
++		//D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2)/(8.*2.*viscosity)*stokesreconditioning;
++		//if(id==24){
++		//printf("tau %g\n",1./3.*pow(diameter,2)/(8.*2.*viscosity));
++		//}
++		//GetBConduct(&B_stab[0][0],&xyz_list[0][0],gauss); 
+ 
++		//D_stab[0][0]=D_scalar_stab; D_stab[0][1]=0;             D_stab[0][2]=0;
++		//D_stab[1][0]=0;             D_stab[1][1]=D_scalar_stab; D_stab[1][2]=0;
++		//D_stab[2][0]=0;             D_stab[2][1]=0;             D_stab[2][2]=D_scalar_stab;
++
++		//TripleMultiply(&B_stab[0][0],3,6,1,
++		//			&D_stab[0][0],3,3,0,
++		//			&B_stab[0][0],3,6,0,
++		//			&Ke_temp_stab[0][0],0);
++
++		//for(i=0;i<NUMVERTICES;i++) for(j=0;j<NUMVERTICES;j++) Ke->values[numdof*(i*4+3)+j*4+3]+=Ke_temp_stab[i][j];
++
+ 	}
+ 
++//	if(id==24){
++//		_error_("");
++//	}
++
++	//Ke->Echo();
++	//_error_("stop");
+ 	/*Transform Coordinate System*/
+ 	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
++	if(id==24){
++		//printarray(Ke->values,24,24);
++	}
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -7789,9 +7866,9 @@
+ 
+ 		for(i=0;i<NUMVERTICES+1;i++){
+ 			Pe_gaussian[i*NDOF4+2]+=-rho_ice*gravity*Jdet*gauss->weight*l1l7[i];
+-			Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*l1l7[i];
+-			Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*l1l7[i];
+-			Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*l1l7[i];
++			Pe_gaussian[i*NDOF4+0]+=rho_ice*forcex*Jdet*gauss->weight*l1l7[i];
++			Pe_gaussian[i*NDOF4+1]+=rho_ice*forcey*Jdet*gauss->weight*l1l7[i];
++			Pe_gaussian[i*NDOF4+2]+=rho_ice*forcez*Jdet*gauss->weight*l1l7[i];
+ 		}
+ 
+ 		/*Get bubble part of Bprime */
+@@ -7827,15 +7904,24 @@
+ 	/*Intermediaries*/
+ 	int        i,j;
+ 	int        approximation;
+-	IssmDouble Jdet,gravity,rho_ice,B,D_scalar_stab;
++	IssmDouble Jdet,gravity,rho_ice,B,D_scalar_stab,viscosity;
+ 	IssmDouble forcex,forcey,forcez,diameter,stokesreconditioning;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble l1l6[6]; //for the six nodes and the bubble 
+ 	IssmDouble dh1dh6[3][NUMVERTICES];
+-	IssmDouble Pe_gaussian[numdof]={0.0}; //for the six nodes and the bubble 
+ 	GaussPenta *gauss=NULL;
+ 
++	/*Stabilization*/
++	bool       stabilization = false;
++	IssmDouble dbasis[3][6];
++	IssmDouble dmu[3];
++	IssmDouble mu;
++	IssmDouble dnodalbasis[6][6][3];
++	IssmDouble SW[6][4][4];
++	int p,q,ii;
++	int c=3; //index of pressure
++
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
+@@ -7850,47 +7936,93 @@
+ 	Input* loadingforcex_input=inputs->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
+ 	Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
+ 	Input* loadingforcez_input=inputs->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+ 
+ 	/*Find minimal length*/
+ 	diameter=MinEdgeLength(xyz_list);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(5,5);
++	gauss=new GaussPenta(2,3);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctionsP1(&l1l6[0], gauss);
++		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
++		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+ 
+ 		loadingforcex_input->GetInputValue(&forcex, gauss);
+ 		loadingforcey_input->GetInputValue(&forcey, gauss);
+ 		loadingforcez_input->GetInputValue(&forcez, gauss);
+ 
+ 		for(i=0;i<NUMVERTICES;i++){
+-			Pe_gaussian[i*NDOF4+2]+=-rho_ice*gravity*Jdet*gauss->weight*l1l6[i];
+-			Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*l1l6[i];
+-			Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*l1l6[i];
+-			Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*l1l6[i];
++			pe->values[i*NDOF4+2]+=-rho_ice*gravity*Jdet*gauss->weight*l1l6[i];
++			pe->values[i*NDOF4+0]+=rho_ice*forcex*Jdet*gauss->weight*l1l6[i];
++			pe->values[i*NDOF4+1]+=rho_ice*forcey*Jdet*gauss->weight*l1l6[i];
++			pe->values[i*NDOF4+2]+=rho_ice*forcez*Jdet*gauss->weight*l1l6[i];
+ 		}
+ 
+ 		/*Add stabilization*/
+-		D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2.)/(4.*1000*B)*stokesreconditioning;
+-		GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],&xyz_list[0][0],gauss);
++		if(stabilization){
++			GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
++			dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
++			mu = viscosity;
++			for(i=0;i<6;i++){
++				for(p=0;p<6;p++){
++					for(j=0;j<3;j++){
++						dnodalbasis[i][p][j] = dbasis[j][p];
++					}
++				}
++			}
++			for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
++				SW[p][i][j]=0.;
++			}
++			for(p=0;p<6;p++){
++				for(i=0;i<3;i++){
++					SW[p][c][i] += dbasis[i][p];
++					for(j=0;j<3;j++){
++						SW[p][i][i] += -dmu[j]*dbasis[j][p];
++						SW[p][j][i] += -dmu[j]*dbasis[i][p];
++						for(ii=0;ii<6;ii++){
++							SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
++							SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
++						}
++					}
++				}
++			}
++			IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
++			for(p=0;p<6;p++){
++				for(j=0;j<4;j++){
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*forcex*SW[p][j][0];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*forcey*SW[p][j][1];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*(forcez-rho_ice*gravity)*SW[p][j][2];
++				}
++			}
+ 
+-		for(i=0;i<NUMVERTICES;i++){
+-			Pe_gaussian[i*NDOF4+3]+=-rho_ice*gravity*D_scalar_stab*dh1dh6[2][i];
+-			Pe_gaussian[i*NDOF4+3]+=forcex*D_scalar_stab*dh1dh6[0][i];
+-			Pe_gaussian[i*NDOF4+3]+=forcey*D_scalar_stab*dh1dh6[1][i];
+-			Pe_gaussian[i*NDOF4+3]+=forcez*D_scalar_stab*dh1dh6[2][i];
+ 		}
++		///*Add stabilization*/
++		//D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2)/(8.*2.*viscosity)*stokesreconditioning;
++		//GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],&xyz_list[0][0],gauss);
++
++		//for(i=0;i<NUMVERTICES;i++){
++		//	Pe_gaussian[i*NDOF4+3]+=-rho_ice*gravity*D_scalar_stab*dh1dh6[2][i];
++		//	Pe_gaussian[i*NDOF4+3]+=forcex*D_scalar_stab*dh1dh6[0][i];
++		//	Pe_gaussian[i*NDOF4+3]+=forcey*D_scalar_stab*dh1dh6[1][i];
++		//	Pe_gaussian[i*NDOF4+3]+=forcez*D_scalar_stab*dh1dh6[2][i];
++		//}
+ 	}
+ 
+-	for(i=0;i<numdof;i++) pe->values[i]+=Pe_gaussian[i];
+-
+ 	/*Transform coordinate system*/
+ 	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
+ 
++	if(id==24){
++		printarray(pe->values,24,1);
++		_error_("STOP");
++	}
++
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	return pe;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15473-15474.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15473-15474.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15473-15474.diff	(revision 16134)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15473)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15474)
+@@ -6975,7 +6975,7 @@
+ 			for(i=0;i<6;i++){
+ 				for(p=0;p<6;p++){
+ 					for(j=0;j<3;j++){
+-						dnodalbasis[i][p][j] = dbasis[j][p];
++						dnodalbasis[i][p][j] = dbasis[j][i];
+ 					}
+ 				}
+ 			}
+@@ -7913,7 +7913,7 @@
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Stabilization*/
+-	bool       stabilization = false;
++	bool       stabilization = true;
+ 	IssmDouble dbasis[3][6];
+ 	IssmDouble dmu[3];
+ 	IssmDouble mu;
+@@ -7973,10 +7973,11 @@
+ 			for(i=0;i<6;i++){
+ 				for(p=0;p<6;p++){
+ 					for(j=0;j<3;j++){
+-						dnodalbasis[i][p][j] = dbasis[j][p];
++						dnodalbasis[i][p][j] = dbasis[j][i];
+ 					}
+ 				}
+ 			}
++			//dNodalBasisdx(1:n,p,:) = dBasisdx(1:n,:)
+ 			for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
+ 				SW[p][i][j]=0.;
+ 			}
+@@ -7987,8 +7988,10 @@
+ 						SW[p][i][i] += -dmu[j]*dbasis[j][p];
+ 						SW[p][j][i] += -dmu[j]*dbasis[i][p];
+ 						for(ii=0;ii<6;ii++){
+-							SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
+-							SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
++							//SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
++							//SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
++							SW[p][i][i] += -mu*dnodalbasis[p][ii][j];
++							SW[p][j][i] += -mu*dnodalbasis[p][ii][i];
+ 						}
+ 					}
+ 				}
+@@ -7996,9 +7999,9 @@
+ 			IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
+ 			for(p=0;p<6;p++){
+ 				for(j=0;j<4;j++){
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*forcex*SW[p][j][0];
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*forcey*SW[p][j][1];
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*(forcez-rho_ice*gravity)*SW[p][j][2];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcex*SW[p][j][0];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcey*SW[p][j][1];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*(forcez-gravity)*SW[p][j][2];
+ 				}
+ 			}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15474-15475.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15474-15475.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15474-15475.diff	(revision 16134)
@@ -0,0 +1,166 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15474)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15475)
+@@ -6917,7 +6917,7 @@
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Stabilization*/
+-	bool       stabilization = false;
++	bool       stabilization = true;
+ 	IssmDouble dbasis[3][6];
+ 	IssmDouble dmu[3];
+ 	IssmDouble mu;
+@@ -6943,6 +6943,20 @@
+ 	rigidity=material->GetB();
+ 	diameter=MinEdgeLength(xyz_list);
+ 
++	if(stabilization){
++		gauss=new GaussPenta();
++		for(int iv=0;iv<6;iv++){
++			gauss->GaussVertex(iv);
++			GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
++			for(i=0;i<6;i++){
++				for(j=0;j<3;j++){
++					dnodalbasis[i][iv][j] = dbasis[j][i];
++				}
++			}
++		}
++		delete gauss;
++	}
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(3,2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -6971,14 +6985,7 @@
+ 		if(stabilization){
+ 			GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
+ 			dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
+-			mu = viscosity;
+-			for(i=0;i<6;i++){
+-				for(p=0;p<6;p++){
+-					for(j=0;j<3;j++){
+-						dnodalbasis[i][p][j] = dbasis[j][i];
+-					}
+-				}
+-			}
++			mu = 2.*viscosity;
+ 			for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
+ 				SU[p][i][j]=0.;
+ 				SW[p][i][j]=0.;
+@@ -7017,34 +7024,8 @@
+ 			}
+ 
+ 		}
+-
+-
+-		//viscosity = 1000*rigidity;
+-		//D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2)/(8.*2.*viscosity)*stokesreconditioning;
+-		//if(id==24){
+-		//printf("tau %g\n",1./3.*pow(diameter,2)/(8.*2.*viscosity));
+-		//}
+-		//GetBConduct(&B_stab[0][0],&xyz_list[0][0],gauss); 
+-
+-		//D_stab[0][0]=D_scalar_stab; D_stab[0][1]=0;             D_stab[0][2]=0;
+-		//D_stab[1][0]=0;             D_stab[1][1]=D_scalar_stab; D_stab[1][2]=0;
+-		//D_stab[2][0]=0;             D_stab[2][1]=0;             D_stab[2][2]=D_scalar_stab;
+-
+-		//TripleMultiply(&B_stab[0][0],3,6,1,
+-		//			&D_stab[0][0],3,3,0,
+-		//			&B_stab[0][0],3,6,0,
+-		//			&Ke_temp_stab[0][0],0);
+-
+-		//for(i=0;i<NUMVERTICES;i++) for(j=0;j<NUMVERTICES;j++) Ke->values[numdof*(i*4+3)+j*4+3]+=Ke_temp_stab[i][j];
+-
+ 	}
+ 
+-//	if(id==24){
+-//		_error_("");
+-//	}
+-
+-	//Ke->Echo();
+-	//_error_("stop");
+ 	/*Transform Coordinate System*/
+ 	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
+ 	if(id==24){
+@@ -7943,8 +7924,22 @@
+ 	/*Find minimal length*/
+ 	diameter=MinEdgeLength(xyz_list);
+ 
++	if(stabilization){
++		gauss=new GaussPenta();
++		for(int iv=0;iv<6;iv++){
++			gauss->GaussVertex(iv);
++			GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
++			for(i=0;i<6;i++){
++				for(j=0;j<3;j++){
++					dnodalbasis[i][iv][j] = dbasis[j][i];
++				}
++			}
++		}
++		delete gauss;
++	}
++
+ 	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(2,3);
++	gauss=new GaussPenta(3,2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+@@ -7969,15 +7964,7 @@
+ 		if(stabilization){
+ 			GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
+ 			dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
+-			mu = viscosity;
+-			for(i=0;i<6;i++){
+-				for(p=0;p<6;p++){
+-					for(j=0;j<3;j++){
+-						dnodalbasis[i][p][j] = dbasis[j][i];
+-					}
+-				}
+-			}
+-			//dNodalBasisdx(1:n,p,:) = dBasisdx(1:n,:)
++			mu = 2.*viscosity;
+ 			for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
+ 				SW[p][i][j]=0.;
+ 			}
+@@ -7988,10 +7975,8 @@
+ 						SW[p][i][i] += -dmu[j]*dbasis[j][p];
+ 						SW[p][j][i] += -dmu[j]*dbasis[i][p];
+ 						for(ii=0;ii<6;ii++){
+-							//SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
+-							//SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
+-							SW[p][i][i] += -mu*dnodalbasis[p][ii][j];
+-							SW[p][j][i] += -mu*dnodalbasis[p][ii][i];
++							SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
++							SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
+ 						}
+ 					}
+ 				}
+@@ -8006,26 +7991,11 @@
+ 			}
+ 
+ 		}
+-		///*Add stabilization*/
+-		//D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2)/(8.*2.*viscosity)*stokesreconditioning;
+-		//GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],&xyz_list[0][0],gauss);
+-
+-		//for(i=0;i<NUMVERTICES;i++){
+-		//	Pe_gaussian[i*NDOF4+3]+=-rho_ice*gravity*D_scalar_stab*dh1dh6[2][i];
+-		//	Pe_gaussian[i*NDOF4+3]+=forcex*D_scalar_stab*dh1dh6[0][i];
+-		//	Pe_gaussian[i*NDOF4+3]+=forcey*D_scalar_stab*dh1dh6[1][i];
+-		//	Pe_gaussian[i*NDOF4+3]+=forcez*D_scalar_stab*dh1dh6[2][i];
+-		//}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+ 	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
+ 
+-	if(id==24){
+-		printarray(pe->values,24,1);
+-		_error_("STOP");
+-	}
+-
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	return pe;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15475-15476.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15475-15476.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15475-15476.diff	(revision 16134)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15475)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15476)
+@@ -508,7 +508,7 @@
+ 		B_prime[(NDOF4*NUMNODESP1)*4+NDOF4*i+3] = 0.;
+ 		B_prime[(NDOF4*NUMNODESP1)*5+NDOF4*i+3] = 0.;
+ 		B_prime[(NDOF4*NUMNODESP1)*6+NDOF4*i+3] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1)*7+NDOF4*i+3] = basis[i];
++		B_prime[(NDOF4*NUMNODESP1)*7+NDOF4*i+3] = - basis[i];
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15475)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15476)
+@@ -7028,9 +7028,6 @@
+ 
+ 	/*Transform Coordinate System*/
+ 	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
+-	if(id==24){
+-		//printarray(Ke->values,24,24);
+-	}
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -7984,9 +7981,9 @@
+ 			IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
+ 			for(p=0;p<6;p++){
+ 				for(j=0;j<4;j++){
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcex*SW[p][j][0];
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcey*SW[p][j][1];
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*(forcez-gravity)*SW[p][j][2];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*forcex*SW[p][j][0];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*forcey*SW[p][j][1];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*(forcez-rho_ice*gravity)*SW[p][j][2];
+ 				}
+ 			}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15476-15477.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15476-15477.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15476-15477.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15476)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15477)
+@@ -7981,9 +7981,9 @@
+ 			IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
+ 			for(p=0;p<6;p++){
+ 				for(j=0;j<4;j++){
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*forcex*SW[p][j][0];
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*forcey*SW[p][j][1];
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*(forcez-rho_ice*gravity)*SW[p][j][2];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcex*SW[p][j][0];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcey*SW[p][j][1];
++					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*(forcez-gravity)*SW[p][j][2];
+ 				}
+ 			}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15477-15478.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15477-15478.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15477-15478.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15477)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15478)
+@@ -6971,7 +6971,7 @@
+ 		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+ 
+ 		D_scalar=gauss->weight*Jdet;
+-		for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity;
++		for (i=0;i<6;i++) D[i][i]=D_scalar*2.*2.*viscosity;
+ 		for (i=6;i<8;i++) D[i][i]=-D_scalar*stokesreconditioning;
+ 
+ 		TripleMultiply( &B[0][0],8,24,1,
+@@ -7028,7 +7028,7 @@
+ 
+ 	/*Transform Coordinate System*/
+ 	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
+-
++	
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	return Ke;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15478-15479.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15478-15479.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15478-15479.diff	(revision 16134)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/configs/config-macosx64.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64.sh	(revision 15478)
++++ ../trunk-jpl/configs/config-macosx64.sh	(revision 15479)
+@@ -2,7 +2,6 @@
+ 
+ #petsc 3.4
+ #mpich 3.0.4
+-export F77='/usr/local/gfortran/bin/x86_64-apple-darwin10-gfortran'
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+@@ -18,7 +17,7 @@
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+-	--with-fortran-lib="/usr/local/gfortran/lib/gcc/x86_64-apple-darwin10/4.6.2/libgfortran.a" \
++	--with-fortran-lib="/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64/libgfortran.a" \
+ 	--with-math-lib="/usr/lib/libm.dylib" \
+ 	--with-graphics-lib="/usr/X11/lib/libX11.dylib" \
+ 	--with-cxxoptflags=" -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -mmacosx-version-min=10.5  -O3 -DNDEBUG -w "\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15479-15480.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15479-15480.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15479-15480.diff	(revision 16134)
@@ -0,0 +1,363 @@
+Index: ../trunk-jpl/m4/issm_options.cmake
+===================================================================
+--- ../trunk-jpl/m4/issm_options.cmake	(revision 15479)
++++ ../trunk-jpl/m4/issm_options.cmake	(revision 15480)
+@@ -1 +1,37 @@
+-option(threed "Compile with 3D capabilities (Default is yes)." ON)
++# ISSM Options {{{
++option(DAKOTA "DAKOTA" OFF)
++option(PETSC "PETSC" OFF)
++option(MUMPS "MUMPS" OFF)
++#option(GSL "GSL" OFF)
++option(TRANSIENT "TRANSIENT" ON)
++option(STEADYSTATE "STEADYSTATE" ON)
++option(PROGNOSTIC "PROGNOSTIC" ON)
++option(THERMAL "THERMAL" ON)
++option(GIA "GIA" OFF)
++option(CONTROL "CONTROL" ON)
++option(HYDROLOGY "HYDROLOGY" ON)
++option(DIAGNOSTIC "DIAGNOSTIC" ON)
++option(BALANCED "BALANCED" ON)
++option(SLOPE "SLOPE" ON)
++option(GROUNDINGLINE "GROUNDINGLINE" ON)
++option(RIFTS "RIFTS" ON)
++option(ANDROID "ANDROID" OFF)
++option(THREED "THREED" ON)
++option(MPI "MPI" OFF)
++option(METIS "METIS" OFF)
++option(KRIGING "KRIGING" OFF)
++# }}}
++
++if(NOT GSL_DIR)
++    message(FATAL_ERROR "Non GSL build not supported")
++else(NOT GSL_DIR)
++    find_path(GSL lib ${GSL_DIR})
++
++    if(GSL)
++        message("Found GSL: ${GSL_DIR}")
++        set(GSL_INC_DIR ${GSL_DIR}/include)
++        set(GSL_LIB_DIR ${GSL_DIR}/lib)
++    else(GSL)
++        message(FATAL_ERROR "GSL installation directory not found!")
++    endif(GSL)
++endif(NOT GSL_DIR)
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 15479)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 15480)
+@@ -1,3 +1,6 @@
++# config.h {{{
++set(CPP_FLAGS -DHAVE_CONFIG_H)
++# }}}
+ # Include Directory {{{
+ include_directories(AFTER $ENV{ISSM_DIR}/ 
+                           $ENV{ISSM_DIR}/src/c 
+@@ -77,7 +80,7 @@
+ # }}}
+ 
+ # Core Sources {{{
+-set(core_sources    ./datastructures/DataSet.cpp
++set(core_sources   	./datastructures/DataSet.cpp
+ 					./classes/gauss/GaussTria.cpp
+ 					./classes/FemModel.cpp
+ 					./classes/Loads/Friction.cpp
+@@ -173,14 +176,18 @@
+ 					./modules/ModelProcessorx/DistributeNumDofs.cpp
+ 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp
++					./modules/ModelProcessorx/EdgesPartitioning.cpp
+ 					./modules/ModelProcessorx/SortDataSets.cpp
+ 					./modules/ModelProcessorx/UpdateCounters.cpp
+ 					./modules/ModelProcessorx/CreateDataSets.cpp
+ 					./modules/ModelProcessorx/CreateParameters.cpp
+ 					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
++					./modules/ModelProcessorx/CreateEdges.cpp
++					./modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp
+ 					./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
+ 					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
+ 					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
++					./modules/ModelProcessorx/CreateNodes.cpp
+ 					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp
+ 					./modules/NodesDofx/NodesDofx.cpp
+ 					./modules/NodalValuex/NodalValuex.cpp
+@@ -228,11 +235,12 @@
+ 					./solutionsequences/solutionsequence_newton.cpp
+ 					./solutionsequences/convergence.cpp
+ 					./classes/Options/Options.cpp
+-					./classes/Options/OptionUtilities.cpp)
++					./classes/Options/OptionUtilities.cpp
++					./classes/RiftStruct.cpp)
+ set(issm_sources ${core_sources})
+ # }}}
+ 
+-#DAKOTA sources  {{{
++# DAKOTA sources  {{{
+ set(dakota_sources 				  ./modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
+ 					  				  ./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
+ 					  				  ./modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp
+@@ -537,6 +545,17 @@
+ #Metis sources  {{{
+ set(metis_sources 				./toolkits/metis/patches/METIS_PartMeshNodalPatch.cpp)
+ #}}}
++
++# API Print {{{
++if(NOT PYTHON AND NOT MATLAB)
++    add_library(ISSMOverload STATIC ./shared/String/stricmp.cpp
++            ./shared/String/ApiPrintf.cpp)
++    list(APPEND issm_deps ISSMOverload)
++else(NOT PYTHON AND NOT MATLAB)
++    message(FATAL_ERROR "Python and Matlab are not supported yet.")
++endif(NOT PYTHON AND NOT MATLAB)
++# }}}
++
+ # Modules Sources {{{
+ set(modules_sources ./shared/Threads/LaunchThread.cpp
+ 			./shared/Threads/PartitionRange.cpp
+@@ -578,101 +597,148 @@
+ #{{{ Conditional build-up of sources
+ #ISSM sources are a combination of core sources and sources related to specific capabilities.
+ 
+-if DAKOTA
+-issm_sources  +=  $(dakota_sources)
+-endif
++if(DAKOTA)
++list(APPEND CPP_FLAGS '-D_HAVE_DAKOTA_')
++list(APPEND issm_sources ${dakota_sources})
++endif(DAKOTA)
+ 
+-if PETSC
+-issm_sources  +=  $(petsc_sources)
+-endif
++if(PETSC)
++list(APPEND CPP_FLAGS '-D_HAVE_PETSC_')
++list(APPEND issm_sources ${petsc_sources})
++endif(PETSC)
+ 
+-if MUMPS
+-issm_sources  +=  $(mumps_sources)
+-endif
++if(MUMPS)
++list(APPEND CPP_FLAGS '-D_HAVE_MUMPS_')
++list(APPEND issm_sources ${mumps_sources})
++endif(MUMPS)
+ 
+-if GSL
+-issm_sources  +=  $(gsl_sources)
+-endif
++if(GSL)
++list(APPEND CPP_FLAGS '-D_HAVE_GSL_')
++list(APPEND issm_sources ${gsl_sources})
++list(APPEND issm_deps gsl gslcblas)
++list(APPEND issm_lib_paths ${GSL_LIB_DIR})
++include_directories(AFTER ${GSL_INC_DIR})
++message("GSL_INC: ${GSL_INC_DIR}")
++message("GSL_LIB: ${GSL_LIB_DIR}")
++endif(GSL)
+ 
+-if TRANSIENT
+-issm_sources  +=  $(transient_sources)
+-endif
++if(TRANSIENT)
++list(APPEND CPP_FLAGS '-D_HAVE_TRANSIENT_')
++list(APPEND issm_sources ${transient_sources})
++endif(TRANSIENT)
+ 
+-if STEADYSTATE
+-issm_sources  +=  $(steadystate_sources)
+-endif
++if(STEADYSTATE)
++list(APPEND CPP_FLAGS '-D_HAVE_STEADYSTATE_')
++list(APPEND issm_sources ${steadystate_sources})
++endif(STEADYSTATE)
+ 
+-if PROGNOSTIC
+-issm_sources  +=  $(prognostic_sources)
+-endif
++if(PROGNOSTIC)
++list(APPEND CPP_FLAGS '-D_HAVE_PROGNOSTIC_')
++list(APPEND issm_sources ${prognostic_sources})
++endif(PROGNOSTIC)
+ 
+-if THERMAL
+-issm_sources  +=  $(thermal_sources)
+-endif
++if(THERMAL)
++list(APPEND CPP_FLAGS '-D_HAVE_THERMAL_')
++list(APPEND issm_sources ${thermal_sources})
++endif(THERMAL)
+ 
+-if GIA
+-issm_sources  +=  $(gia_sources)
+-endif
++if(GIA)
++list(APPEND CPP_FLAGS '-D_HAVE_GIA_')
++list(APPEND issm_sources ${gia_sources})
++endif(GIA)
+ 
+-if CONTROL
+-issm_sources  +=  $(control_sources)
+-endif
++if(CONTROL)
++list(APPEND CPP_FLAGS '-D_HAVE_CONTROL_')
++list(APPEND issm_sources ${control_sources})
++endif(CONTROL)
+ 
+-if HYDROLOGY
+-issm_sources  +=  $(hydrology_sources)
+-endif
++if(HYDROLOGY)
++list(APPEND CPP_FLAGS '-D_HAVE_HYDROLOGY_')
++list(APPEND issm_sources ${hydrology_sources})
++endif(HYDROLOGY)
+ 
+-if DIAGNOSTIC
+-issm_sources  +=  $(diagnostic_sources)
+-endif
++if(DIAGNOSTIC)
++list(APPEND CPP_FLAGS '-D_HAVE_DIAGNOSTIC_')
++list(APPEND issm_sources ${diagnostic_sources})
++endif(DIAGNOSTIC)
+ 
+-if BALANCED
+-issm_sources  +=  $(balanced_sources)
+-endif
++if(BALANCED)
++list(APPEND CPP_FLAGS '-D_HAVE_BALANCED_')
++list(APPEND issm_sources ${balanced_sources})
++endif(BALANCED)
+ 
+-if SLOPE
+-issm_sources  +=  $(slope_sources)
+-endif
++if(SLOPE)
++list(APPEND CPP_FLAGS '-D_HAVE_SLOPE_')
++list(APPEND issm_sources ${slope_sources})
++endif(SLOPE)
+ 
+-if GROUNDINGLINE
+-issm_sources +=  $(groundingline_sources)
+-endif
++if(GROUNDINGLINE)
++list(APPEND CPP_FLAGS '-D_HAVE_GROUNDINGLINE_')
++list(APPEND issm_sources ${groundingline_sources})
++endif(GROUNDINGLINE)
+ 
+-if RIFTS
+-issm_sources +=  $(rifts_sources)
+-endif
++if(RIFTS)
++list(APPEND CPP_FLAGS '-D_HAVE_RIFTS_')
++list(APPEND issm_sources ${rifts_sources})
++endif(RIFTS)
+ 
+-if ANDROID
+-issm_sources +=  $(android_sources)
+-endif
++if(ANDROID)
++list(APPEND CPP_FLAGS '-D_HAVE_ANDROID_')
++list(APPEND issm_sources ${android_sources})
++endif(ANDROID)
+ 
+-if THREED
+-issm_sources +=  $(threed_sources)
+-endif
++if(THREED)
++list(APPEND CPP_FLAGS '-D_HAVE_THREED_')
++list(APPEND issm_sources ${threed_sources})
++endif(THREED)
+ 
+-if MPI
+-issm_sources +=  $(mpi_sources)
+-endif
++if(MPI)
++list(APPEND CPP_FLAGS '-D_HAVE_MPI_')
++list(APPEND issm_sources ${mpi_sources})
++endif(MPI)
+ 
+-if METIS
+-issm_sources +=  $(metis_sources)
+-endif
++if(METIS)
++list(APPEND CPP_FLAGS '-D_HAVE_METIS_')
++list(APPEND issm_sources ${metis_sources})
++endif(METIS)
+ 
+-if KRIGING
+-issm_sources +=  $(pkriging_sources)
+-endif
++if(KRIGING)
++list(APPEND CPP_FLAGS '-D_HAVE_KRIGING_')
++list(APPEND issm_sources ${pkriging_sources})
++endif(KRIGING)
+ #}}}
+ 
+ add_library(ISSMCore STATIC ${issm_sources})
+ add_library(ISSMModules STATIC ${modules_sources})
++
++list(INSERT issm_deps 0 ISSMCore ISSMModules)
+ add_executable(issm ./main/issm.cpp)
+ 
+ # Definitions {{{
+-add_definitions(-DHAVE_CONFIG_H)
++add_definitions(${CPP_FLAGS})
+ # }}}
+ # Compilation Flags {{{
+ # }}}
+ # Linking Flags {{{
+-link_directories($ENV{ISSM_DIR}/src/c)
+-target_link_libraries(issm ISSMCore ISSMModules)
++link_directories($ENV{ISSM_DIR}/src/c )
++target_link_libraries(issm ${issm_deps})
++message("ISSM_DEPS: ${issm_deps}")
+ # }}}
++
++# Install Targets {{{
++# Install 'issm.exe'
++install(TARGETS issm RUNTIME DESTINATION $ENV{ISSM_DIR}/bin)
++
++# Install 'libISSMCore.a' and 'libISSMOverload.a'
++install(TARGETS ISSMCore
++                ISSMModules
++                ISSMOverload
++        ARCHIVE DESTINATION $ENV{ISSM_DIR}/lib)
++# }}}
++# Optional Install {{{
++#if(${SHARED_LIBS} IS ON)
++#   install(TARGETS ISSMCore
++#                   ISSMOverload
++#           LIBRARY)
++#endif(${SHARED_LIBS} IS ON)
++# }}}
+Index: ../trunk-jpl/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/CMakeLists.txt	(revision 15479)
++++ ../trunk-jpl/CMakeLists.txt	(revision 15480)
+@@ -17,28 +17,6 @@
+ include(./m4/issm_options.cmake)
+ # }}}
+ 
+-# Environment Variables {{{
+-# Out of source build can be done here.
+-set(CMAKE_BINARY_DIR ${ISSM_DIR})
+-# }}}
+-
+-# Install Targets {{{
+-# Install 'issm.exe'
+-#install(TARGETS issm RUNTIME)
+-
+-# Install 'libISSMCore.a' and 'libISSMOverload.a'
+-# install(TARGETS ISSMCore
+-#                ISSMOverload
+-#        ARCHIVE)
+-# }}}
+-# Optional Install {{{
+-#if(${SHARED_LIBS} IS ON)
+-#   install(TARGETS ISSMCore
+-#                   ISSMOverload
+-#           LIBRARY)
+-#endif(${SHARED_LIBS} IS ON)
+-# }}}
+-
+ # Language Checks {{{
+ 
+ # 'C' language check.
Index: /issm/oecreview/Archive/15392-16133/ISSM-15480-15481.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15480-15481.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15480-15481.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/configs/config-linux64-cmake.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-cmake.sh	(revision 0)
++++ ../trunk-jpl/configs/config-linux64-cmake.sh	(revision 15481)
+@@ -0,0 +1,2 @@
++rm $ISSM_DIR/CMakeCache.txt
++cmake -D GSL_DIR=${GSL_DIR} ${ISSM_DIR}
+
+Property changes on: ../trunk-jpl/configs/config-linux64-cmake.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15481-15482.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15481-15482.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15481-15482.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/classes/taoinversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/taoinversion.m	(revision 15481)
++++ ../trunk-jpl/src/m/classes/taoinversion.m	(revision 15482)
+@@ -116,6 +116,8 @@
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 
++			yts=365.0*24.0*3600.0;
++
+ 			WriteData(fid,'object',obj,'class','inversion','fieldname','iscontrol','format','Boolean');
+ 			WriteData(fid,'enum',InversionTaoEnum(),'data',true,'format','Boolean');
+ 			if ~obj.iscontrol, return; end
+@@ -124,9 +126,9 @@
+ 			WriteData(fid,'object',obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+-			WriteData(fid,'object',obj,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,'object',obj,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
++			WriteData(fid,'object',obj,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			WriteData(fid,'object',obj,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1);
+ 
+ 			%process control parameters
Index: /issm/oecreview/Archive/15392-16133/ISSM-15482-15483.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15482-15483.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15482-15483.diff	(revision 16134)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 15482)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 15483)
+@@ -33,7 +33,7 @@
+ 	IssmDouble *cm_jump        = NULL;
+ 
+ 	/*intermediary: */
+-	IssmDouble search_scalar = 1;
++	IssmDouble search_scalar = 1.;
+ 	OptArgs    optargs;
+ 	OptPars    optpars;
+ 
+@@ -89,7 +89,7 @@
+ 
+ 		if(VerboseControl()) _printf0_("   compute adjoint state:\n");
+ 		adjointcore(femmodel);
+-		gradient_core(femmodel,n,search_scalar==0);
++		gradient_core(femmodel,n,search_scalar==0.);
+ 
+ 		/*Return gradient if asked: */
+ 		if (cm_gradient){
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15482)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15483)
+@@ -4264,7 +4264,7 @@
+ /*FUNCTION Tria::SurfaceLogVelMisfit {{{*/
+ IssmDouble Tria::SurfaceLogVelMisfit(int weight_index){
+ 
+-	IssmDouble Jelem=0;
++	IssmDouble Jelem=0.;
+ 	IssmDouble misfit,Jdet;
+ 	IssmDouble epsvel=2.220446049250313e-16;
+ 	IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15483-15484.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15483-15484.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15483-15484.diff	(revision 16134)
@@ -0,0 +1,299 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 15483)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 15484)
+@@ -15,7 +15,7 @@
+ 
+ 	/*Do not add constraints in DG, they are weakly imposed*/
+ 	if(stabilization!=3){
+-		IoModelToConstraintsx(constraints,iomodel,PrognosticSpcthicknessEnum,PrognosticAnalysisEnum);
++		IoModelToConstraintsx(constraints,iomodel,PrognosticSpcthicknessEnum,PrognosticAnalysisEnum,P1Enum);
+ 	}
+ 
+ 	/*Assign output pointer: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp	(revision 15483)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp	(revision 15484)
+@@ -19,7 +19,7 @@
+ 
+ 	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+-	IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyShreveAnalysisEnum);
++	IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyShreveAnalysisEnum,P1Enum);
+ 
+ 	/*Assign output pointer: */
+ 	*pconstraints=constraints;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15483)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15484)
+@@ -10,18 +10,18 @@
+ void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int     i,j;
+-	int     count;
+-	IssmDouble  yts;
+-	IssmDouble  g;
+-	IssmDouble  rho_ice;
+-	IssmDouble  stokesreconditioning;
+-	bool    isstokes,isl1l2,ismacayealpattyn;
+-	int     fe_ssa;
+-   bool    spcpresent=false;
+-	int Mx,Nx;
+-	int My,Ny;
+-	int Mz,Nz;
++	int        i,j;
++	int        count;
++	IssmDouble yts;
++	IssmDouble g;
++	IssmDouble rho_ice;
++	IssmDouble stokesreconditioning;
++	bool       isstokes,isl1l2,ismacayealpattyn;
++	int        fe_ssa;
++	bool       spcpresent = false;
++	int        Mx,Nx;
++	int        My,Ny;
++	int        Mz,Nz;
+ 	IssmDouble *spcvx          = NULL;
+ 	IssmDouble *spcvy          = NULL;
+ 	IssmDouble *spcvz          = NULL;
+@@ -328,18 +328,18 @@
+ 
+ 				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-									1,(spcvx[v1]+spcvx[v2])/yts,DiagnosticHorizAnalysisEnum));
++									1,(spcvx[v1]+spcvx[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+ 				if(!xIsNan<IssmDouble>(spcvy[v1]) && !xIsNan<IssmDouble>(spcvy[v2])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-									2,(spcvy[v1]+spcvy[v2])/yts,DiagnosticHorizAnalysisEnum));
++									2,(spcvy[v1]+spcvy[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+ 				if (reCast<int,IssmDouble>(vertices_type[v1])==StokesApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){
+ 					if(!xIsNan<IssmDouble>(spcvz[v1]) && !xIsNan<IssmDouble>(spcvz[v2])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-										3,(spcvz[v1]+spcvz[v2])/yts,DiagnosticHorizAnalysisEnum));
++										3,(spcvz[v1]+spcvz[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
+ 						count++;
+ 					}
+ 				}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 15483)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 15484)
+@@ -15,7 +15,7 @@
+ 
+ 	/*Do not add constraints in DG*/
+ 	if(stabilization!=3){
+-		IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancethicknessAnalysisEnum);
++		IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancethicknessAnalysisEnum,P1Enum);
+ 	}
+ 
+ 	/*Assign output pointer: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp	(revision 15483)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp	(revision 15484)
+@@ -23,7 +23,7 @@
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	if(!isefficientlayer) return;
+ 
+-	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpceplHeadEnum,HydrologyDCEfficientAnalysisEnum);
++	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpceplHeadEnum,HydrologyDCEfficientAnalysisEnum,P1Enum);
+ 
+ 	/*Assign output pointer: */
+ 	*pconstraints=constraints;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp	(revision 15483)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp	(revision 15484)
+@@ -18,7 +18,7 @@
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 	if(hydrology_model!=HydrologydcEnum) return;
+ 
+-	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyDCInefficientAnalysisEnum);
++	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyDCInefficientAnalysisEnum,P1Enum);
+ 
+ 	/*Assign output pointer: */
+ 	*pconstraints=constraints;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 15483)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 15484)
+@@ -15,7 +15,7 @@
+ 
+ 	/*Only 3d mesh supported*/
+ 	if(iomodel->dim==3){
+-		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum);
++		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,P1Enum);
+ 	}
+ 
+ 	/*Assign output pointer: */
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 15483)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 15484)
+@@ -7,6 +7,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type);
++void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element);
+ 
+ #endif  /* _IOMODELTOELEMENTINPUTX_H */
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15483)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15484)
+@@ -5,55 +5,67 @@
+ #include "./IoModelToConstraintsx.h"
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
++#include "../ModelProcessorx/ModelProcessorx.h"
+ 
+-void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type){
++void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element){
+ 
+ 	/*intermediary: */
+-	int     i,j;
+-	IssmDouble yts;
+-	bool        transient        = false;
++	int         i,j,count;
++	IssmDouble  yts;
+ 	FILE       *fid              = NULL;
+-	int         code             = 0;
+-	int         vector_layout    = 0;
++	int         code,vector_layout;
+ 	IssmDouble *times            = NULL;
+ 	IssmDouble *values           = NULL;
+ 	bool        spcpresent       = false;
+-	int         count            = 0;
+ 
++	/*P2 finite elements*/
++	int   v1,v2;
++	bool *my_edges = NULL;
++
+ 	/*variables being fetched: */
+-	IssmDouble *IssmDoublevector  = NULL;
+-	int     M,N;
++	IssmDouble *spcdata = NULL;
++	int         M,N;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 
+ 	/*First of, find the record for the enum, and get code  of data type: */
+ 	fid=iomodel->SetFilePointerToData(&code, &vector_layout,vector_enum);
+-
+ 	if(code!=7)_error_("expecting a IssmDouble vector for constraints with enum " << EnumToStringx(vector_enum));
+ 	if(vector_layout!=1)_error_("expecting a nodal vector for constraints with enum " << EnumToStringx(vector_enum));
+ 
+ 	/*Fetch vector:*/
+-	iomodel->FetchData(&IssmDoublevector,&M,&N,vector_enum);
++	iomodel->FetchData(&spcdata,&M,&N,vector_enum);
+ 
+-	/*Transient or static?:*/
++	/*Partition edges if we are using P2 finite elements*/
++	if(finite_element==P2Enum){
++		EdgesPartitioning(&my_edges,iomodel);
++	}
++
+ 	if(M==iomodel->numberofvertices){
+-		/*static: just create Constraints objects*/
++		/*Static constraint*/
+ 		count=0;
+-
+-		/*Create Constraints from x,y,z: */
+ 		for (i=0;i<iomodel->numberofvertices;i++){
+-
+-			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+-
+-				if (!xIsNan<IssmDouble>(IssmDoublevector[i])){
+-
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,IssmDoublevector[i],analysis_type));
++				if (!xIsNan<IssmDouble>(spcdata[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcdata[i],analysis_type));
+ 					count++;
+ 				}
+ 			}
+ 		}
++		if(finite_element==P2Enum){
++			for(i=0;i<iomodel->numberofedges;i++){
++				if(my_edges[i]){
++					v1 = iomodel->edges[4*i+0]-1;
++					v2 = iomodel->edges[4*i+1]-1;
++					if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++										1,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
++						count++;
++					}
++				}
++			}
++		}
+ 	}
+ 	else if (M==(iomodel->numberofvertices+1)){
+ 		/*transient: create transient SpcTransient objects. Same logic, except we need to retrieve 
+@@ -62,21 +74,17 @@
+ 
+ 		/*figure out times: */
+ 		times=xNew<IssmDouble>(N);
+-		for(j=0;j<N;j++){
+-			times[j]=IssmDoublevector[(M-1)*N+j]*yts;
+-		}
++		for(j=0;j<N;j++) times[j]=spcdata[(M-1)*N+j]*yts;
+ 
+-		/*Create constraints from x,y,z: */
++		/*Create constraints: */
+ 		for (i=0;i<iomodel->numberofvertices;i++){
+-
+-			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+ 
+ 				/*figure out times and values: */
+ 				values=xNew<IssmDouble>(N);
+ 				spcpresent=false;
+ 				for(j=0;j<N;j++){
+-					values[j]=IssmDoublevector[i*N+j];
++					values[j]=spcdata[i*N+j];
+ 					if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+ 				}
+ 
+@@ -87,13 +95,32 @@
+ 				xDelete<IssmDouble>(values);
+ 			}
+ 		}
++		if(finite_element==P2Enum){
++			for(i=0;i<iomodel->numberofedges;i++){
++				if(my_edges[i]){
++					v1 = iomodel->edges[4*i+0]-1;
++					v2 = iomodel->edges[4*i+1]-1;
++					values=xNew<IssmDouble>(N);
++					spcpresent=false;
++					for(j=0;j<N;j++){
++						values[j]=(spcdata[v1*N+j]+spcdata[v2*N+j])/2.;
++						if(!xIsNan<IssmDouble>(values[j])) spcpresent=true; //NaN means no spc by default
++					}
++					if(spcpresent){
++						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,1,
++										N,times,values,analysis_type));
++						count++;
++					}
++				}
++			}
++		}
+ 	}
+ 	else{
+ 		_error_("Size of field " << EnumToStringx(vector_enum) << " not supported");
+ 	}
+ 
+ 	/*Free ressources:*/
+-	xDelete<IssmDouble>(IssmDoublevector);
++	xDelete<IssmDouble>(spcdata);
+ 	xDelete<IssmDouble>(times);
+ 	xDelete<IssmDouble>(values);
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15484-15485.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15484-15485.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15484-15485.diff	(revision 16134)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15484)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15485)
+@@ -240,38 +240,40 @@
+ /*FUNCTION Tria::CreateMassMatrix {{{*/
+ ElementMatrix* Tria::CreateMassMatrix(void){
+ 
+-	/*constants: */
+-	const int    numdof=NDOF1*NUMVERTICES;
+-
+ 	/* Intermediaries */
+ 	IssmDouble  D,Jdet;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+-	IssmDouble  basis[numdof];
+-	GaussTria  *gauss = NULL;
+ 
+-	/*Initialize Element matrix*/
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,NoneApproximationEnum);
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
+ 
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke    = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis = xNew<IssmDouble>(numdof);
++
++	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	/* Start looping on the number of gaussian points: */
+-	gauss=new GaussTria(2);
++	GaussTria* gauss=new GaussTria(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetNodalFunctions(&basis[0],gauss);
++		GetNodalFunctions(basis,gauss);
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		D=gauss->weight*Jdet;
+ 
+-		TripleMultiply(&basis[0],1,3,1,
++		TripleMultiply(basis,1,numnodes,1,
+ 					&D,1,1,0,
+-					&basis[0],1,3,0,
++					basis,1,numnodes,0,
+ 					&Ke->values[0],1);
+ 	}
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<IssmDouble>(basis);
+ 	return Ke;
+ }
+ /*}}}*/
+@@ -2780,7 +2782,7 @@
+ 	int numnodes = this->NumberofNodes();
+ 	int numdof   = numnodes*NDOF2;
+ 
+-	/*Initialize Element matrix, vectors and Gaussian points*/
++	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,MacAyealApproximationEnum);
+ 	IssmDouble*    B      = xNew<IssmDouble>(3*numdof);
+ 	IssmDouble*    Bprime = xNew<IssmDouble>(3*numdof);
+@@ -2796,7 +2798,7 @@
+ 	this->parameters->FindParam(&viscosity_overshoot,DiagnosticViscosityOvershootEnum);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+-	GaussTria*     gauss  = new GaussTria(2);
++	GaussTria* gauss  = new GaussTria(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15485-15486.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15485-15486.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15485-15486.diff	(revision 16134)
@@ -0,0 +1,258 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15485)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15486)
+@@ -246,11 +246,11 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF2;
++	int numdof   = numnodes*NDOF1;
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke    = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
+-	IssmDouble*    basis = xNew<IssmDouble>(numdof);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -265,9 +265,9 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		D=gauss->weight*Jdet;
+ 
+-		TripleMultiply(basis,1,numnodes,1,
++		TripleMultiply(basis,1,numdof,1,
+ 					&D,1,1,0,
+-					basis,1,numnodes,0,
++					basis,1,numdof,0,
+ 					&Ke->values[0],1);
+ 	}
+ 
+@@ -6243,7 +6243,7 @@
+ ElementMatrix* Tria::CreateKMatrixPrognostic(void){
+ 
+ 	switch(GetElementType()){
+-		case P1Enum:
++		case P1Enum: case P2Enum:
+ 			return CreateKMatrixPrognostic_CG();
+ 		case P1DGEnum:
+ 			return CreateKMatrixPrognostic_DG();
+@@ -6255,28 +6255,26 @@
+ /*FUNCTION Tria::CreateKMatrixPrognostic_CG {{{*/
+ ElementMatrix* Tria::CreateKMatrixPrognostic_CG(void){
+ 
+-	/*Constants*/
+-	const int    numdof=NDOF1*NUMVERTICES;
+-
+ 	/*Intermediaries */
+ 	int        stabilization;
+ 	int        dim;
+-	IssmDouble Jdettria,DL_scalar,dt,h;
++	IssmDouble Jdettria,D_scalar,dt,h;
+ 	IssmDouble vel,vx,vy,dvxdx,dvydy;
+ 	IssmDouble dvx[2],dvy[2];
+ 	IssmDouble v_gauss[2]={0.0};
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble basis[NUMVERTICES];
+-	IssmDouble B[2][NUMVERTICES];
+-	IssmDouble Bprime[2][NUMVERTICES];
+-	IssmDouble K[2][2]                        ={0.0};
+-	IssmDouble KDL[2][2]                      ={0.0};
+-	IssmDouble DL[2][2]                        ={0.0};
+-	IssmDouble DLprime[2][2]                   ={0.0};
+ 
+-	/*Initialize Element matrix*/
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,NoneApproximationEnum);
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF1;
+ 
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    B      = xNew<IssmDouble>(2*numdof);
++	IssmDouble*    Bprime = xNew<IssmDouble>(2*numdof);
++	IssmDouble     D[2][2];
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+@@ -6301,73 +6299,77 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+-		GetNodalFunctions(&basis[0],gauss);
++		GetNodalFunctions(basis,gauss);
+ 
+ 		vxaverage_input->GetInputValue(&vx,gauss);
+ 		vyaverage_input->GetInputValue(&vy,gauss);
+ 		vxaverage_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
+ 		vyaverage_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
+ 
+-		DL_scalar=gauss->weight*Jdettria;
++		D_scalar=gauss->weight*Jdettria;
+ 
+-		TripleMultiply(&basis[0],1,numdof,1,
+-					&DL_scalar,1,1,0,
+-					&basis[0],1,numdof,0,
++		TripleMultiply(basis,1,numdof,1,
++					&D_scalar,1,1,0,
++					basis,1,numdof,0,
+ 					&Ke->values[0],1);
+ 
+-		GetBPrognostic(&B[0][0], &xyz_list[0][0], gauss);
+-		GetBprimePrognostic(&Bprime[0][0], &xyz_list[0][0], gauss);
++		GetBPrognostic(B,&xyz_list[0][0],gauss);
++		GetBprimePrognostic(Bprime,&xyz_list[0][0],gauss);
+ 
+ 		dvxdx=dvx[0];
+ 		dvydy=dvy[1];
+-		DL_scalar=dt*gauss->weight*Jdettria;
++		D_scalar=dt*gauss->weight*Jdettria;
+ 
+-		DL[0][0]=DL_scalar*dvxdx;
+-		DL[1][1]=DL_scalar*dvydy;
+-		DLprime[0][0]=DL_scalar*vx;
+-		DLprime[1][1]=DL_scalar*vy;
+-
+-		TripleMultiply( &B[0][0],2,numdof,1,
+-					&DL[0][0],2,2,0,
+-					&B[0][0],2,numdof,0,
++		D[0][0]=D_scalar*dvxdx;
++		D[0][1]=0.;
++		D[1][1]=D_scalar*dvydy;
++		D[1][0]=0.;
++		TripleMultiply(B,2,numdof,1,
++					&D[0][0],2,2,0,
++					B,2,numdof,0,
+ 					&Ke->values[0],1);
+ 
+-		TripleMultiply( &B[0][0],2,numdof,1,
+-					&DLprime[0][0],2,2,0,
+-					&Bprime[0][0],2,numdof,0,
++		D[0][0]=D_scalar*vx;
++		D[1][1]=D_scalar*vy;
++		TripleMultiply(B,2,numdof,1,
++					&D[0][0],2,2,0,
++					Bprime,2,numdof,0,
+ 					&Ke->values[0],1);
+ 
+ 		if(stabilization==2){
+ 			/*Streamline upwinding*/
+ 			vel=sqrt(vx*vx+vy*vy)+1.e-8;
+-			K[0][0]=h/(2*vel)*vx*vx;
+-			K[1][0]=h/(2*vel)*vy*vx;
+-			K[0][1]=h/(2*vel)*vx*vy;
+-			K[1][1]=h/(2*vel)*vy*vy;
++			D[0][0]=h/(2*vel)*vx*vx;
++			D[1][0]=h/(2*vel)*vy*vx;
++			D[0][1]=h/(2*vel)*vx*vy;
++			D[1][1]=h/(2*vel)*vy*vy;
+ 		}
+ 		else if(stabilization==1){
+ 			/*MacAyeal*/
+ 			vxaverage_input->GetInputAverage(&vx);
+ 			vyaverage_input->GetInputAverage(&vy);
+-			K[0][0]=h/2.0*fabs(vx);
+-			K[0][1]=0.;
+-			K[1][0]=0.;
+-			K[1][1]=h/2.0*fabs(vy);
++			D[0][0]=h/2.0*fabs(vx);
++			D[0][1]=0.;
++			D[1][0]=0.;
++			D[1][1]=h/2.0*fabs(vy);
+ 		}
+ 		if(stabilization==1 || stabilization==2){
+-			KDL[0][0]=DL_scalar*K[0][0];
+-			KDL[1][0]=DL_scalar*K[1][0];
+-			KDL[0][1]=DL_scalar*K[0][1];
+-			KDL[1][1]=DL_scalar*K[1][1];
+-			TripleMultiply( &Bprime[0][0],2,numdof,1,
+-						&KDL[0][0],2,2,0,
+-						&Bprime[0][0],2,numdof,0,
++			D[0][0]=D_scalar*D[0][0];
++			D[1][0]=D_scalar*D[1][0];
++			D[0][1]=D_scalar*D[0][1];
++			D[1][1]=D_scalar*D[1][1];
++			TripleMultiply(Bprime,2,numdof,1,
++						&D[0][0],2,2,0,
++						Bprime,2,numdof,0,
+ 						&Ke->values[0],1);
+ 		}
+ 	}
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(Bprime);
+ 	return Ke;
+ }
+ /*}}}*/
+@@ -6450,7 +6452,7 @@
+ ElementVector* Tria::CreatePVectorPrognostic(void){
+ 
+ 	switch(GetElementType()){
+-		case P1Enum:
++		case P1Enum: case P2Enum:
+ 			return CreatePVectorPrognostic_CG();
+ 		case P1DGEnum:
+ 			return CreatePVectorPrognostic_DG();
+@@ -6462,36 +6464,36 @@
+ /*FUNCTION Tria::CreatePVectorPrognostic_CG {{{*/
+ ElementVector* Tria::CreatePVectorPrognostic_CG(void){
+ 
+-	/*Constants*/
+-	const int    numdof=NDOF1*NUMVERTICES;
+-
+ 	/*Intermediaries */
+ 	IssmDouble Jdettria,dt;
+ 	IssmDouble surface_mass_balance_g,basal_melting_g,basal_melting_correction_g,thickness_g;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble basis[NUMVERTICES];
+-	GaussTria* gauss=NULL;
+ 
+-	/*Initialize Element vector*/
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters);
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF1;
+ 
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+-	Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum);          _assert_(basal_melting_input);
+-	Input* basal_melting_correction_input=inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum);
+-	Input* thickness_input=inputs->GetInput(ThicknessEnum);                             _assert_(thickness_input);
++	Input* surface_mass_balance_input     = inputs->GetInput(SurfaceforcingsMassBalanceEnum);         _assert_(surface_mass_balance_input);
++	Input* basal_melting_input            = inputs->GetInput(BasalforcingsMeltingRateEnum);           _assert_(basal_melting_input);
++	Input* basal_melting_correction_input = inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum);
++	Input* thickness_input                = inputs->GetInput(ThicknessEnum);                          _assert_(thickness_input);
+ 
+ 	/*Initialize basal_melting_correction_g to 0, do not forget!:*/
+ 	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussTria(2);
++	GaussTria* gauss=new GaussTria(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+-		GetNodalFunctions(&basis[0],gauss);
++		GetNodalFunctions(basis,gauss);
+ 
+ 		surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss);
+ 		basal_melting_input->GetInputValue(&basal_melting_g,gauss);
+@@ -6506,6 +6508,7 @@
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<IssmDouble>(basis);
+ 	return pe;
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15486-15487.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15486-15487.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15486-15487.diff	(revision 16134)
@@ -0,0 +1,227893 @@
+Index: ../trunk-jpl/src/mobile/web/gallery.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/gallery.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/gallery.html	(revision 15487)
+@@ -0,0 +1,75 @@
++<html>
++
++<head>
++<title>ISSM Web APP &mdash; Testing</title>
++<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
++
++
++<!-- CSS -->
++<link rel="stylesheet" href="css/animate.css"/>
++<link rel="stylesheet" href="css/jquery.ui.all.css"/>
++<link rel="stylesheet" href="css/mystyle.css"/>
++<link rel="stylesheet" type="text/css" href="js/sidebar/css/blue-glass/sidebar.css" />
++<link rel="stylesheet" href="js/imageslider/themes/default/default.css" type="text/css" media="screen" />
++<link rel="stylesheet" href="js/imageslider/themes/light/light.css" type="text/css" media="screen" />
++<link rel="stylesheet" href="js/imageslider/themes/dark/dark.css" type="text/css" media="screen" />
++<link rel="stylesheet" href="js/imageslider/themes/bar/bar.css" type="text/css" media="screen" />
++<link rel="stylesheet" href="js/imageslider/nivo-slider.css" type="text/css" media="screen" />
++<link rel="stylesheet" href="js/imageslider/style.css" type="text/css" media="screen" />
++
++
++<!-- JavaScript -->
++<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
++<script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
++<script type="text/javascript" src="js/sidebar/src/jquery.sidebar.js"></script>
++<script type="text/javascript" src="js/imageslider/jquery.nivo.slider.js"></script>
++
++<script type="text/javascript">
++    $(window).load(function() {
++        $('#slider').nivoSlider();
++    });
++</script>
++
++
++
++</head>
++
++<body onload="webGLStart();">
++	<div id="frame" style="position: relative; left: 0; top: 0;" >
++		<img src="images/ISSMJPLTOP.png" class="imageBorder" width="750" height="120" style="top: 0; left: 0;">
++		<img src="images/ISSMlogo.png" width="500" height="70" style="position: absolute; top: 30; left: 250;">
++         <ul id="sidebar" >
++            <li><a href="gallery.html" >Gallery</a></li>
++            <li><a href="ISSM.html" >Simulator</a></li>
++            <li><a href="http://issm.jpl.nasa.gov/" >Visit Us</a></li>
++        </ul>  
++        <script type="text/javascript">
++            $("ul#sidebar").sidebar();
++        </script>  
++
++        <div class="slider-wrapper theme-default">
++            <div id="slider" class="nivoSlider">
++                <img src="images/issm_img/img1.png" data-thumb="images/issm_img/img1.png" alt="" />
++                <img src="images/issm_img/img2.png" data-thumb="images/issm_img/img2.png" alt="" />
++                <img src="images/issm_img/img3.png" data-thumb="images/issm_img/img3.png" alt="" />
++                <img src="images/issm_img/img4.png" data-thumb="images/issm_img/img4.png" alt="" />
++                <img src="images/issm_img/img5.png" data-thumb="images/issm_img/img5.png" alt="" />
++                <img src="images/issm_img/img6.png" data-thumb="images/issm_img/img6.png" alt="" />
++                <img src="images/issm_img/img7.png" data-thumb="images/issm_img/img7.png" alt="" />
++                <img src="images/issm_img/img8.png" data-thumb="images/issm_img/img8.png" alt="" />
++                <img src="images/issm_img/img9.png" data-thumb="images/issm_img/img9.png" alt="" />
++                <img src="images/issm_img/img10.png" data-thumb="images/issm_img/img10.png" alt="" />
++                <img src="images/issm_img/img11.png" data-thumb="images/issm_img/img11.png" alt="" />
++                <img src="images/issm_img/img12.png" data-thumb="images/issm_img/img12.png" alt="" />
++                <img src="images/issm_img/img13.png" data-thumb="images/issm_img/img13.png" alt="" />
++                <img src="images/issm_img/img14.png" data-thumb="images/issm_img/img14.png" alt="" />
++                <img src="images/issm_img/img15.png" data-thumb="images/issm_img/img15.png" alt="" />
++                <img src="images/issm_img/img16.png" data-thumb="images/issm_img/img16.png" alt="" />
++                <img src="images/issm_img/img17.png" data-thumb="images/issm_img/img17.png" alt="" />
++            </div>
++        </div>
++    </div>      
++	<a href="ISSM.htm" target="_blank"><img src="images/globe.png" alt="globe" height="350" width="500" align="right"></a>
++</body>
++
++</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/images/ISSMlogo.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ISSMlogo.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ISSMlogo.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ISSMlogo.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ISSMlogo.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_18_b81900_40x40.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_18_b81900_40x40.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/greenland.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/greenland.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/greenland.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/greenland.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/greenland.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ffffff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ffffff_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-icons_ffffff_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-icons_ffffff_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-icons_ffffff_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_75_ffe45c_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_75_ffe45c_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ISSMJPLTOP.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ISSMJPLTOP.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ISSMJPLTOP.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ISSMJPLTOP.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ISSMJPLTOP.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_65_ffffff_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_100_eeeeee_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_100_eeeeee_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_222222_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-icons_222222_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-icons_222222_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-icons_222222_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_gloss-wave_35_f6a828_500x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_gloss-wave_35_f6a828_500x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ef8c08_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ef8c08_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-icons_ef8c08_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-icons_ef8c08_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-icons_ef8c08_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/animated-overlay.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/animated-overlay.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/animated-overlay.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/animated-overlay.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img1.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img1.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img1.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img1.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img1.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img2.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img2.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img2.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img2.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img2.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img3.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img3.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img3.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img3.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img3.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img4.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img4.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img4.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img4.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img4.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img5.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img5.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img5.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img5.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img5.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img6.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img6.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img6.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img6.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img6.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img7.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img7.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img7.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img7.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img7.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img8.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img8.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img8.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img8.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img8.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img9.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img9.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img9.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img9.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img9.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img10.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img10.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img10.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img10.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img10.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img11.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img11.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img11.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img11.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img11.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img12.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img12.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img12.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img12.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img12.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img13.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img13.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img13.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img13.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img13.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img14.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img14.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img14.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img14.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img14.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img15.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img15.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img15.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img15.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img15.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img16.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img16.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img16.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img16.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img16.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img17.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img17.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/issm_img/img17.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/issm_img/img17.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/issm_img/img17.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_flat_10_000000_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_flat_10_000000_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_flat_10_000000_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_fdf5ce_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_fdf5ce_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_fdf5ce_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_20_666666_40x40.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_20_666666_40x40.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_20_666666_40x40.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_228ef1_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_228ef1_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-icons_228ef1_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-icons_228ef1_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-icons_228ef1_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/globe.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/globe.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/globe.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/globe.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/globe.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ffd27a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ffd27a_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-icons_ffd27a_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-icons_ffd27a_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-icons_ffd27a_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_f6f6f6_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_f6f6f6_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_f6f6f6_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/src/coordinate.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/coordinate.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/src/coordinate.js	(revision 15487)
+@@ -0,0 +1,253 @@
++var coordinate = [ 
++0.1722815,-0.6249968,0.0,0.028602958,-0.59071255,0.0,0.07361174,-0.66233075,0.0     ,
++-0.97861487,0.47404182,0.0,-1.0188555,0.49031258,0.0,-0.99149925,0.46910655,0.0     ,
++-0.16846454,-0.65885043,0.0,0.07361174,-0.66233075,0.0,0.028602958,-0.59071255,0.0  ,
++-0.49141604,0.28358424,0.0,-0.7172656,0.3111843,0.0,-0.71527505,0.25273192,0.0      ,
++0.7866467,0.1019814,0.0,0.61278033,0.15770888,0.0,0.68886554,0.066627026,0.0        ,
++0.1722815,-0.6249968,0.0,0.2330749,-0.5733323,0.0,0.15787399,-0.5458735,0.0         ,
++0.15787399,-0.5458735,0.0,0.028602958,-0.59071255,0.0,0.1722815,-0.6249968,0.0      ,
++0.6919304,-0.27098197,0.0,0.8031138,-0.36101806,0.0,0.88863707,-0.32047856,0.0      ,
++-0.82303256,0.39813554,0.0,-0.6723132,0.39743114,0.0,-0.7951531,0.43768227,0.0      ,
++-0.50945973,-0.6791605,0.0,-0.31120718,-0.74901634,0.0,-0.16846454,-0.65885043,0.0  ,
++-0.90793777,0.38406122,0.0,-0.79631823,0.35794616,0.0,-0.82303256,0.39813554,0.0    ,
++0.029369593,-0.7232344,0.0,-0.10685843,-0.79375434,0.0,0.013136864,-0.7805554,0.0   ,
++0.8245338,0.15600598,0.0,0.9128773,0.2109667,0.0,0.7759683,0.2296145,0.0            ,
++0.48667216,0.65818167,0.0,0.31415915,0.7068391,0.0,0.14486158,0.6431035,0.0         ,
++-0.66352123,0.19767356,0.0,-0.49141604,0.28358424,0.0,-0.71527505,0.25273192,0.0    ,
++-0.52258784,-0.5863955,0.0,-0.69702816,-0.64494777,0.0,-0.50945973,-0.6791605,0.0   ,
++-0.2523167,-0.9805183,0.0,-0.14696288,-0.9495336,0.0,-0.1924783,-0.8969807,0.0      ,
++0.61278033,0.15770888,0.0,0.7759683,0.2296145,0.0,0.6630316,0.26985943,0.0          ,
++-0.8231783,0.4837699,0.0,-0.63187575,0.48362064,0.0,-0.77416193,0.53749883,0.0      ,
++-0.18770391,-0.8363681,0.0,-0.49923497,-0.8415496,0.0,-0.37126845,-0.9161034,0.0    ,
++-0.14729428,0.5239761,0.0,-0.23570663,0.42825544,0.0,0.066693306,0.47821677,0.0     ,
++-0.37126845,-0.9161034,0.0,-0.2523167,-0.9805183,0.0,-0.1924783,-0.8969807,0.0      ,
++-0.46721613,-0.7685304,0.0,-0.49923497,-0.8415496,0.0,-0.31120718,-0.74901634,0.0   ,
++-0.39459217,-1.0,0.0,-0.29496747,-1.0340356,0.0,-0.2523167,-0.9805183,0.0           ,
++-0.39459217,-1.0,0.0,-0.2523167,-0.9805183,0.0,-0.37126845,-0.9161034,0.0           ,
++-0.22433949,-0.25822878,0.0,-0.4276088,-0.24063492,0.0,-0.40343392,-0.3059004,0.0   ,
++-0.51540923,0.009509206,0.0,-0.5501056,0.11640835,0.0,-0.6668889,0.08406842,0.0     ,
++-0.37126845,-0.9161034,0.0,-0.52700067,-0.994104,0.0,-0.39459217,-1.0,0.0           ,
++-0.6462797,-0.97818947,0.0,-0.52700067,-0.994104,0.0,-0.65169054,-0.9217171,0.0     ,
++-0.31965226,-0.17364204,0.0,-0.54482484,-0.20234817,0.0,-0.4276088,-0.24063492,0.0  ,
++0.6387942,0.50387466,0.0,0.5045388,0.33103216,0.0,0.79156303,0.43412304,0.0         ,
++-0.65169054,-0.9217171,0.0,-0.52700067,-0.994104,0.0,-0.37126845,-0.9161034,0.0     ,
++-0.65169054,-0.9217171,0.0,-0.49923497,-0.8415496,0.0,-0.7201228,-0.87319046,0.0    ,
++-0.6133511,-0.8003795,0.0,-0.7541798,-0.8161504,0.0,-0.7201228,-0.87319046,0.0      ,
++-0.14749932,-0.07488638,0.0,-0.40625852,-0.11763275,0.0,-0.31965226,-0.17364204,0.0 ,
++-0.6133511,-0.8003795,0.0,-0.7201228,-0.87319046,0.0,-0.49923497,-0.8415496,0.0     ,
++-0.7541798,-0.8161504,0.0,-0.6133511,-0.8003795,0.0,-0.7295215,-0.7604479,0.0       ,
++-0.6133511,-0.8003795,0.0,-0.46721613,-0.7685304,0.0,-0.7049238,-0.7021444,0.0      ,
++0.6630316,0.26985943,0.0,0.71094215,0.33645523,0.0,0.5045388,0.33103216,0.0         ,
++-0.7049238,-0.7021444,0.0,-0.7295215,-0.7604479,0.0,-0.6133511,-0.8003795,0.0       ,
++-0.7049238,-0.7021444,0.0,-0.50945973,-0.6791605,0.0,-0.69702816,-0.64494777,0.0    ,
++-0.7951531,0.43768227,0.0,-0.8748502,0.46837437,0.0,-0.8944029,0.42357707,0.0       ,
++0.38599896,0.4090873,0.0,0.6387942,0.50387466,0.0,0.494058,0.5507779,0.0            ,
++-0.69702816,-0.64494777,0.0,-0.52258784,-0.5863955,0.0,-0.6903474,-0.5873822,0.0    ,
++-0.49141604,0.28358424,0.0,-0.6723132,0.39743114,0.0,-0.7172656,0.3111843,0.0       ,
++-0.6903474,-0.5873822,0.0,-0.6667415,-0.5468402,0.0,-0.79450804,-0.55195713,0.0     ,
++-0.6667415,-0.5468402,0.0,-0.52258784,-0.5863955,0.0,-0.62953156,-0.49027336,0.0    ,
++-0.4414333,-0.47731763,0.0,-0.62953156,-0.49027336,0.0,-0.52258784,-0.5863955,0.0   ,
++0.7076447,-0.100810766,0.0,0.64160895,-0.04644382,0.0,0.46548855,-0.12757361,0.0    ,
++-0.6054545,-0.43295234,0.0,-0.4414333,-0.47731763,0.0,-0.39712143,-0.3920853,0.0    ,
++-0.8944029,0.42357707,0.0,-0.82303256,0.39813554,0.0,-0.7951531,0.43768227,0.0      ,
++0.2330749,-0.5733323,0.0,0.2531271,-0.55117697,0.0,0.15787399,-0.5458735,0.0        ,
++0.494058,0.5507779,0.0,0.6643573,0.5729065,0.0,0.59051406,0.6191362,0.0             ,
++-0.39712143,-0.3920853,0.0,-0.621089,-0.3767627,0.0,-0.6054545,-0.43295234,0.0      ,
++-0.07924831,-0.46268785,0.0,0.15787399,-0.5458735,0.0,0.22590232,-0.47071034,0.0    ,
++-0.09364933,0.69693434,0.0,-0.14648539,0.7489834,0.0,-0.17767781,0.6913909,0.0      ,
++-0.6723132,0.39743114,0.0,-0.79631823,0.35794616,0.0,-0.7172656,0.3111843,0.0       ,
++0.6059511,-0.42446738,0.0,0.48391414,-0.41054082,0.0,0.52064955,-0.4659497,0.0      ,
++0.64160895,-0.04644382,0.0,0.7197397,0.004403591,0.0,0.55547774,0.019833326,0.0     ,
++-0.56392217,-0.26155484,0.0,-0.40343392,-0.3059004,0.0,-0.4276088,-0.24063492,0.0   ,
++0.36244297,-0.3196875,0.0,0.08679438,-0.3363713,0.0,0.34073508,-0.38852262,0.0      ,
++0.7759683,0.2296145,0.0,0.9128773,0.2109667,0.0,0.8920522,0.26791072,0.0            ,
++-0.67580104,0.14063537,0.0,-0.6668889,0.08406842,0.0,-0.5501056,0.11640835,0.0      ,
++-0.62953156,-0.49027336,0.0,-0.4414333,-0.47731763,0.0,-0.6054545,-0.43295234,0.0   ,
++0.55547774,0.019833326,0.0,0.7197397,0.004403591,0.0,0.68886554,0.066627026,0.0     ,
++-0.3819729,-0.0047768354,0.0,-0.5394139,-0.08657479,0.0,-0.40625852,-0.11763275,0.0 ,
++-0.5394139,-0.08657479,0.0,-0.54418826,-0.14389586,0.0,-0.40625852,-0.11763275,0.0  ,
++-0.8944029,0.42357707,0.0,-1.0,0.41589725,0.0,-0.9818319,0.39157045,0.0             ,
++-0.8748502,0.46837437,0.0,-0.9265223,0.4529786,0.0,-0.8944029,0.42357707,0.0        ,
++-0.3819729,-0.0047768354,0.0,-0.51540923,0.009509206,0.0,-0.5394139,-0.08657479,0.0 ,
++-1.0,0.41589725,0.0,-1.0341103,0.39688313,0.0,-0.9818319,0.39157045,0.0             ,
++-0.4502468,0.15912282,0.0,-0.66352123,0.19767356,0.0,-0.5501056,0.11640835,0.0      ,
++0.64160895,-0.04644382,0.0,0.55547774,0.019833326,0.0,0.47039258,-0.048672557,0.0   ,
++-0.49141604,0.28358424,0.0,-0.66352123,0.19767356,0.0,-0.4502468,0.15912282,0.0     ,
++-0.9265223,0.4529786,0.0,-0.97861487,0.47404182,0.0,-0.99149925,0.46910655,0.0      ,
++-0.40625852,-0.11763275,0.0,-0.14749932,-0.07488638,0.0,-0.3819729,-0.0047768354,0.0,
++-0.6667415,-0.5468402,0.0,-0.6903474,-0.5873822,0.0,-0.52258784,-0.5863955,0.0      ,
++-0.99149925,0.46910655,0.0,-0.95512664,0.44091082,0.0,-0.9265223,0.4529786,0.0      ,
++-0.8748502,0.46837437,0.0,-0.7951531,0.43768227,0.0,-0.8231783,0.4837699,0.0        ,
++-0.4502468,0.15912282,0.0,-0.5501056,0.11640835,0.0,-0.38387418,0.0800246,0.0       ,
++-0.16846454,-0.65885043,0.0,-0.31120718,-0.74901634,0.0,-0.10685843,-0.79375434,0.0 ,
++-0.8944029,0.42357707,0.0,-0.95512664,0.44091082,0.0,-1.0,0.41589725,0.0            ,
++0.68372,-0.3432938,0.0,0.574661,-0.30440927,0.0,0.56902957,-0.36790055,0.0          ,
++-0.90793777,0.38406122,0.0,-0.8944029,0.42357707,0.0,-0.9818319,0.39157045,0.0      ,
++-0.90793777,0.38406122,0.0,-0.82303256,0.39813554,0.0,-0.8944029,0.42357707,0.0     ,
++-0.38387418,0.0800246,0.0,-0.1826595,0.16134393,0.0,-0.4502468,0.15912282,0.0       ,
++-0.28274482,0.630533,0.0,-0.368652,0.5123328,0.0,-0.14729428,0.5239761,0.0          ,
++0.5045388,0.33103216,0.0,0.71094215,0.33645523,0.0,0.79156303,0.43412304,0.0        ,
++-0.8231783,0.4837699,0.0,-0.7951531,0.43768227,0.0,-0.63187575,0.48362064,0.0       ,
++-0.95512664,0.44091082,0.0,-0.8944029,0.42357707,0.0,-0.9265223,0.4529786,0.0       ,
++-0.87085134,0.575071,0.0,-0.9939028,0.56997836,0.0,-0.9127836,0.52632856,0.0        ,
++0.6919304,-0.27098197,0.0,0.5478718,-0.2240535,0.0,0.574661,-0.30440927,0.0         ,
++-0.16846454,-0.65885043,0.0,-0.07924831,-0.46268785,0.0,-0.4414333,-0.47731763,0.0  ,
++-0.8231783,0.4837699,0.0,-0.77416193,0.53749883,0.0,-0.9127836,0.52632856,0.0       ,
++0.47039258,-0.048672557,0.0,0.16675663,-0.08414775,0.0,0.46548855,-0.12757361,0.0   ,
++-0.56392217,-0.26155484,0.0,-0.4276088,-0.24063492,0.0,-0.54482484,-0.20234817,0.0  ,
++0.48391414,-0.41054082,0.0,0.36244297,-0.3196875,0.0,0.34073508,-0.38852262,0.0     ,
++-0.9127836,0.52632856,0.0,-0.77416193,0.53749883,0.0,-0.87085134,0.575071,0.0       ,
++-0.77416193,0.53749883,0.0,-0.754539,0.59507716,0.0,-0.87085134,0.575071,0.0        ,
++-0.62201965,0.55598676,0.0,-0.754539,0.59507716,0.0,-0.77416193,0.53749883,0.0      ,
++0.15787399,-0.5458735,0.0,-0.07924831,-0.46268785,0.0,0.028602958,-0.59071255,0.0   ,
++0.37535036,-0.5432576,0.0,0.37237883,-0.45653516,0.0,0.22590232,-0.47071034,0.0     ,
++0.48391414,-0.41054082,0.0,0.56902957,-0.36790055,0.0,0.36244297,-0.3196875,0.0     ,
++-0.62201965,0.55598676,0.0,-0.64771193,0.63114166,0.0,-0.754539,0.59507716,0.0      ,
++-0.28274482,0.630533,0.0,-0.47297096,0.69339406,0.0,-0.51403034,0.6374332,0.0       ,
++-0.40286767,0.7442751,0.0,-0.47297096,0.69339406,0.0,-0.2956041,0.70807576,0.0      ,
++-0.09825462,-0.1743601,0.0,0.08679438,-0.3363713,0.0,0.3089533,-0.21166879,0.0      ,
++0.574661,-0.30440927,0.0,0.5478718,-0.2240535,0.0,0.36244297,-0.3196875,0.0         ,
++0.46548855,-0.12757361,0.0,0.71599984,-0.19942552,0.0,0.7076447,-0.100810766,0.0    ,
++-0.28274482,0.630533,0.0,-0.2956041,0.70807576,0.0,-0.47297096,0.69339406,0.0       ,
++-0.2956041,0.70807576,0.0,-0.28274482,0.630533,0.0,-0.17767781,0.6913909,0.0        ,
++0.68372,-0.3432938,0.0,0.6919304,-0.27098197,0.0,0.574661,-0.30440927,0.0           ,
++0.52064955,-0.4659497,0.0,0.48391414,-0.41054082,0.0,0.37237883,-0.45653516,0.0     ,
++0.45038712,0.7146003,0.0,0.31415915,0.7068391,0.0,0.48667216,0.65818167,0.0         ,
++-0.51540923,0.009509206,0.0,-0.64906466,0.023353457,0.0,-0.6089602,-0.036607325,0.0 ,
++-0.11433816,0.62551737,0.0,-0.09364933,0.69693434,0.0,-0.17767781,0.6913909,0.0     ,
++0.017433643,0.7249608,0.0,0.018481731,0.6633153,0.0,0.14486158,0.6431035,0.0        ,
++0.10193956,0.7677351,0.0,0.017433643,0.7249608,0.0,0.21206772,0.7389668,0.0         ,
++0.5478718,-0.2240535,0.0,0.3089533,-0.21166879,0.0,0.36244297,-0.3196875,0.0        ,
++-0.64906466,0.023353457,0.0,-0.51540923,0.009509206,0.0,-0.6668889,0.08406842,0.0   ,
++0.5478718,-0.2240535,0.0,0.6919304,-0.27098197,0.0,0.71599984,-0.19942552,0.0       ,
++0.21206772,0.7389668,0.0,0.017433643,0.7249608,0.0,0.14486158,0.6431035,0.0         ,
++-0.09364933,0.69693434,0.0,0.018481731,0.6633153,0.0,0.017433643,0.7249608,0.0      ,
++-0.15414602,0.038713098,0.0,-0.1826595,0.16134393,0.0,-0.38387418,0.0800246,0.0     ,
++0.22590232,-0.47071034,0.0,0.37237883,-0.45653516,0.0,0.34073508,-0.38852262,0.0    ,
++0.59051406,0.6191362,0.0,0.48667216,0.65818167,0.0,0.494058,0.5507779,0.0           ,
++-0.6089602,-0.036607325,0.0,-0.5394139,-0.08657479,0.0,-0.51540923,0.009509206,0.0  ,
++0.31415915,0.7068391,0.0,0.21206772,0.7389668,0.0,0.14486158,0.6431035,0.0          ,
++0.36244297,-0.3196875,0.0,0.56902957,-0.36790055,0.0,0.574661,-0.30440927,0.0       ,
++0.6643573,0.5729065,0.0,0.494058,0.5507779,0.0,0.6387942,0.50387466,0.0             ,
++0.77128017,0.60570896,0.0,0.6643573,0.5729065,0.0,0.7547418,0.5491421,0.0           ,
++0.7759683,0.2296145,0.0,0.61278033,0.15770888,0.0,0.8245338,0.15600598,0.0          ,
++0.71599984,-0.19942552,0.0,0.46548855,-0.12757361,0.0,0.5478718,-0.2240535,0.0      ,
++0.37237883,-0.45653516,0.0,0.48391414,-0.41054082,0.0,0.34073508,-0.38852262,0.0    ,
++-0.54418826,-0.14389586,0.0,-0.54482484,-0.20234817,0.0,-0.31965226,-0.17364204,0.0 ,
++0.6643573,0.5729065,0.0,0.6387942,0.50387466,0.0,0.7547418,0.5491421,0.0            ,
++0.78937876,0.49446082,0.0,0.7547418,0.5491421,0.0,0.6387942,0.50387466,0.0          ,
++-0.62201965,0.55598676,0.0,-0.63187575,0.48362064,0.0,-0.368652,0.5123328,0.0       ,
++-0.368652,0.5123328,0.0,-0.51403034,0.6374332,0.0,-0.62201965,0.55598676,0.0        ,
++0.6630316,0.26985943,0.0,0.86050856,0.32334626,0.0,0.71094215,0.33645523,0.0        ,
++0.86050856,0.32334626,0.0,0.83110833,0.3795359,0.0,0.71094215,0.33645523,0.0        ,
++-0.16846454,-0.65885043,0.0,-0.10685843,-0.79375434,0.0,0.029369593,-0.7232344,0.0  ,
++-0.14729428,0.5239761,0.0,-0.11433816,0.62551737,0.0,-0.28274482,0.630533,0.0       ,
++0.83110833,0.3795359,0.0,0.79156303,0.43412304,0.0,0.71094215,0.33645523,0.0        ,
++0.6630316,0.26985943,0.0,0.7759683,0.2296145,0.0,0.86050856,0.32334626,0.0          ,
++-0.16846454,-0.65885043,0.0,0.028602958,-0.59071255,0.0,-0.07924831,-0.46268785,0.0 ,
++0.5478718,-0.2240535,0.0,0.46548855,-0.12757361,0.0,0.3089533,-0.21166879,0.0       ,
++-0.31965226,-0.17364204,0.0,-0.40625852,-0.11763275,0.0,-0.54418826,-0.14389586,0.0 ,
++-0.51403034,0.6374332,0.0,-0.64771193,0.63114166,0.0,-0.62201965,0.55598676,0.0     ,
++0.9542211,0.15628552,0.0,0.9128773,0.2109667,0.0,0.8245338,0.15600598,0.0           ,
++0.7759683,0.2296145,0.0,0.8920522,0.26791072,0.0,0.86050856,0.32334626,0.0          ,
++-0.67580104,0.14063537,0.0,-0.5501056,0.11640835,0.0,-0.66352123,0.19767356,0.0     ,
++-0.31120718,-0.74901634,0.0,-0.49923497,-0.8415496,0.0,-0.18770391,-0.8363681,0.0   ,
++0.7866467,0.1019814,0.0,0.8245338,0.15600598,0.0,0.61278033,0.15770888,0.0          ,
++0.77607703,-0.05291754,0.0,0.7197397,0.004403591,0.0,0.64160895,-0.04644382,0.0     ,
++-0.62201965,0.55598676,0.0,-0.77416193,0.53749883,0.0,-0.63187575,0.48362064,0.0    ,
++-0.368652,0.5123328,0.0,-0.28274482,0.630533,0.0,-0.51403034,0.6374332,0.0          ,
++0.018481731,0.6633153,0.0,0.0308038,0.5856633,0.0,0.14486158,0.6431035,0.0          ,
++-0.40343392,-0.3059004,0.0,-0.5884305,-0.31887585,0.0,-0.39712143,-0.3920853,0.0    ,
++0.8422811,-0.0038929582,0.0,0.7197397,0.004403591,0.0,0.77607703,-0.05291754,0.0    ,
++0.55547774,0.019833326,0.0,0.68886554,0.066627026,0.0,0.61278033,0.15770888,0.0     ,
++-0.5884305,-0.31887585,0.0,-0.40343392,-0.3059004,0.0,-0.56392217,-0.26155484,0.0   ,
++0.78411376,-0.14776129,0.0,0.7076447,-0.100810766,0.0,0.71599984,-0.19942552,0.0    ,
++-0.63187575,0.48362064,0.0,-0.7951531,0.43768227,0.0,-0.6723132,0.39743114,0.0      ,
++0.029369593,-0.7232344,0.0,0.07361174,-0.66233075,0.0,-0.16846454,-0.65885043,0.0   ,
++0.7076447,-0.100810766,0.0,0.77607703,-0.05291754,0.0,0.64160895,-0.04644382,0.0    ,
++0.6919304,-0.27098197,0.0,0.88863707,-0.32047856,0.0,0.82199025,-0.2303487,0.0      ,
++0.93943906,-0.20809925,0.0,1.0524786,-0.2390225,0.0,1.0524786,-0.18207848,0.0       ,
++-0.09364933,0.69693434,0.0,-0.11433816,0.62551737,0.0,0.018481731,0.6633153,0.0     ,
++0.6059511,-0.42446738,0.0,0.56902957,-0.36790055,0.0,0.48391414,-0.41054082,0.0     ,
++1.0,-0.29068673,0.0,0.93943906,-0.20809925,0.0,0.82199025,-0.2303487,0.0            ,
++-0.18770391,-0.8363681,0.0,-0.37126845,-0.9161034,0.0,-0.1924783,-0.8969807,0.0     ,
++-0.46721613,-0.7685304,0.0,-0.6133511,-0.8003795,0.0,-0.49923497,-0.8415496,0.0     ,
++0.22590232,-0.47071034,0.0,0.08679438,-0.3363713,0.0,-0.07924831,-0.46268785,0.0    ,
++-0.37126845,-0.9161034,0.0,-0.49923497,-0.8415496,0.0,-0.65169054,-0.9217171,0.0    ,
++1.0,-0.29068673,0.0,1.0524786,-0.2390225,0.0,0.93943906,-0.20809925,0.0             ,
++-0.16846454,-0.65885043,0.0,-0.4414333,-0.47731763,0.0,-0.52258784,-0.5863955,0.0   ,
++1.0,-0.29068673,0.0,0.82199025,-0.2303487,0.0,0.88863707,-0.32047856,0.0            ,
++0.71599984,-0.19942552,0.0,0.6919304,-0.27098197,0.0,0.82199025,-0.2303487,0.0      ,
++-0.46097404,0.42148364,0.0,-0.368652,0.5123328,0.0,-0.63187575,0.48362064,0.0       ,
++0.6387942,0.50387466,0.0,0.38599896,0.4090873,0.0,0.5045388,0.33103216,0.0          ,
++-0.22433949,-0.25822878,0.0,-0.31965226,-0.17364204,0.0,-0.4276088,-0.24063492,0.0  ,
++-0.6723132,0.39743114,0.0,-0.82303256,0.39813554,0.0,-0.79631823,0.35794616,0.0     ,
++0.6919304,-0.27098197,0.0,0.68372,-0.3432938,0.0,0.8031138,-0.36101806,0.0          ,
++0.2531271,-0.55117697,0.0,0.37535036,-0.5432576,0.0,0.22590232,-0.47071034,0.0      ,
++-0.28274482,0.630533,0.0,-0.11433816,0.62551737,0.0,-0.17767781,0.6913909,0.0       ,
++-0.10685843,-0.79375434,0.0,-0.31120718,-0.74901634,0.0,-0.18770391,-0.8363681,0.0  ,
++0.14486158,0.6431035,0.0,0.0308038,0.5856633,0.0,0.25395918,0.54432976,0.0          ,
++0.52064955,-0.4659497,0.0,0.37237883,-0.45653516,0.0,0.49932408,-0.5274189,0.0      ,
++0.14486158,0.6431035,0.0,0.25395918,0.54432976,0.0,0.48667216,0.65818167,0.0        ,
++0.0308038,0.5856633,0.0,0.018481731,0.6633153,0.0,-0.11433816,0.62551737,0.0        ,
++0.37237883,-0.45653516,0.0,0.37535036,-0.5432576,0.0,0.49932408,-0.5274189,0.0      ,
++0.6387942,0.50387466,0.0,0.79156303,0.43412304,0.0,0.78937876,0.49446082,0.0        ,
++0.2531271,-0.55117697,0.0,0.22590232,-0.47071034,0.0,0.15787399,-0.5458735,0.0      ,
++-0.621089,-0.3767627,0.0,-0.39712143,-0.3920853,0.0,-0.5884305,-0.31887585,0.0      ,
++-0.50945973,-0.6791605,0.0,-0.16846454,-0.65885043,0.0,-0.52258784,-0.5863955,0.0   ,
++-0.31120718,-0.74901634,0.0,-0.50945973,-0.6791605,0.0,-0.46721613,-0.7685304,0.0   ,
++-0.7049238,-0.7021444,0.0,-0.46721613,-0.7685304,0.0,-0.50945973,-0.6791605,0.0     ,
++-0.39712143,-0.3920853,0.0,-0.23325467,-0.34639496,0.0,-0.40343392,-0.3059004,0.0   ,
++0.08679438,-0.3363713,0.0,0.36244297,-0.3196875,0.0,0.3089533,-0.21166879,0.0       ,
++-0.15414602,0.038713098,0.0,-0.3819729,-0.0047768354,0.0,-0.14749932,-0.07488638,0.0,
++-0.3819729,-0.0047768354,0.0,-0.15414602,0.038713098,0.0,-0.38387418,0.0800246,0.0  ,
++-0.3819729,-0.0047768354,0.0,-0.38387418,0.0800246,0.0,-0.51540923,0.009509206,0.0  ,
++-0.5501056,0.11640835,0.0,-0.51540923,0.009509206,0.0,-0.38387418,0.0800246,0.0     ,  
++-0.09825462,-0.1743601,0.0,-0.31965226,-0.17364204,0.0,-0.22433949,-0.25822878,0.0  ,
++0.47039258,-0.048672557,0.0,0.46548855,-0.12757361,0.0,0.64160895,-0.04644382,0.0   ,
++-0.22433949,-0.25822878,0.0,-0.40343392,-0.3059004,0.0,-0.23325467,-0.34639496,0.0  ,
++0.22590232,-0.47071034,0.0,0.34073508,-0.38852262,0.0,0.08679438,-0.3363713,0.0     ,
++-0.46097404,0.42148364,0.0,-0.63187575,0.48362064,0.0,-0.6723132,0.39743114,0.0     ,
++-0.1826595,0.16134393,0.0,0.11466038,0.17841125,0.0,-0.06773716,0.29468977,0.0      ,
++0.25395918,0.54432976,0.0,0.494058,0.5507779,0.0,0.48667216,0.65818167,0.0          ,
++0.0308038,0.5856633,0.0,-0.11433816,0.62551737,0.0,-0.14729428,0.5239761,0.0        ,
++0.066693306,0.47821677,0.0,0.0308038,0.5856633,0.0,-0.14729428,0.5239761,0.0        ,
++0.38599896,0.4090873,0.0,0.494058,0.5507779,0.0,0.25395918,0.54432976,0.0           ,
++0.24940693,0.05508876,0.0,0.47039258,-0.048672557,0.0,0.55547774,0.019833326,0.0    ,
++0.47039258,-0.048672557,0.0,0.24940693,0.05508876,0.0,0.16675663,-0.08414775,0.0    ,
++-0.23325467,-0.34639496,0.0,0.08679438,-0.3363713,0.0,-0.22433949,-0.25822878,0.0   ,
++-0.4414333,-0.47731763,0.0,-0.07924831,-0.46268785,0.0,-0.39712143,-0.3920853,0.0   ,
++-0.368652,0.5123328,0.0,-0.46097404,0.42148364,0.0,-0.23570663,0.42825544,0.0       ,
++0.0308038,0.5856633,0.0,0.066693306,0.47821677,0.0,0.25395918,0.54432976,0.0        ,
++-0.4502468,0.15912282,0.0,-0.1826595,0.16134393,0.0,-0.49141604,0.28358424,0.0      ,
++0.6630316,0.26985943,0.0,0.5045388,0.33103216,0.0,0.45748365,0.23095214,0.0         ,
++0.61278033,0.15770888,0.0,0.3969196,0.13209689,0.0,0.55547774,0.019833326,0.0       ,
++0.45748365,0.23095214,0.0,0.61278033,0.15770888,0.0,0.6630316,0.26985943,0.0        ,
++-0.15414602,0.038713098,0.0,0.16675663,-0.08414775,0.0,0.24940693,0.05508876,0.0    ,
++-0.14749932,-0.07488638,0.0,-0.31965226,-0.17364204,0.0,-0.09825462,-0.1743601,0.0  ,
++-0.39712143,-0.3920853,0.0,-0.07924831,-0.46268785,0.0,-0.23325467,-0.34639496,0.0  ,
++0.08679438,-0.3363713,0.0,-0.23325467,-0.34639496,0.0,-0.07924831,-0.46268785,0.0   ,
++0.08679438,-0.3363713,0.0,-0.09825462,-0.1743601,0.0,-0.22433949,-0.25822878,0.0    ,
++0.16675663,-0.08414775,0.0,-0.14749932,-0.07488638,0.0,-0.09825462,-0.1743601,0.0   ,
++0.16675663,-0.08414775,0.0,-0.15414602,0.038713098,0.0,-0.14749932,-0.07488638,0.0  ,
++-0.15414602,0.038713098,0.0,0.11466038,0.17841125,0.0,-0.1826595,0.16134393,0.0     ,
++-0.6723132,0.39743114,0.0,-0.49141604,0.28358424,0.0,-0.46097404,0.42148364,0.0     ,
++0.066693306,0.47821677,0.0,-0.23570663,0.42825544,0.0,-0.06773716,0.29468977,0.0    ,
++0.2428385,0.30477345,0.0,0.5045388,0.33103216,0.0,0.38599896,0.4090873,0.0          ,
++0.55547774,0.019833326,0.0,0.3969196,0.13209689,0.0,0.24940693,0.05508876,0.0       ,
++0.11466038,0.17841125,0.0,-0.15414602,0.038713098,0.0,0.24940693,0.05508876,0.0     ,
++0.45748365,0.23095214,0.0,0.5045388,0.33103216,0.0,0.2428385,0.30477345,0.0         ,
++0.2428385,0.30477345,0.0,0.38599896,0.4090873,0.0,0.066693306,0.47821677,0.0        ,
++0.11466038,0.17841125,0.0,0.24940693,0.05508876,0.0,0.3969196,0.13209689,0.0        ,
++0.46548855,-0.12757361,0.0,0.16675663,-0.08414775,0.0,0.3089533,-0.21166879,0.0     ,
++0.3089533,-0.21166879,0.0,0.16675663,-0.08414775,0.0,-0.09825462,-0.1743601,0.0     ,
++-0.368652,0.5123328,0.0,-0.23570663,0.42825544,0.0,-0.14729428,0.5239761,0.0        ,
++0.38599896,0.4090873,0.0,0.25395918,0.54432976,0.0,0.066693306,0.47821677,0.0       ,
++-0.46097404,0.42148364,0.0,-0.49141604,0.28358424,0.0,-0.23570663,0.42825544,0.0    ,
++-0.06773716,0.29468977,0.0,-0.49141604,0.28358424,0.0,-0.1826595,0.16134393,0.0     ,
++0.61278033,0.15770888,0.0,0.45748365,0.23095214,0.0,0.3969196,0.13209689,0.0        ,
++0.11466038,0.17841125,0.0,0.45748365,0.23095214,0.0,0.2428385,0.30477345,0.0        ,
++0.45748365,0.23095214,0.0,0.11466038,0.17841125,0.0,0.3969196,0.13209689,0.0        ,
++-0.06773716,0.29468977,0.0,0.11466038,0.17841125,0.0,0.2428385,0.30477345,0.0       ,
++0.066693306,0.47821677,0.0,-0.06773716,0.29468977,0.0,0.2428385,0.30477345,0.0      ,
++-0.49141604,0.28358424,0.0,-0.06773716,0.29468977,0.0,-0.23570663,0.42825544,0.0    ];
+Index: ../trunk-jpl/src/mobile/web/src/greenland.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/src/greenland.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/greenland.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/src/greenland.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/src/greenland.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/src/color.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/color.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/src/color.js	(revision 15487)
+@@ -0,0 +1,253 @@
++var color = [
++1.0,0.0469,0.0,1.0,0.89065,0.0,0.01565,1.0,0.03125,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,0.01565,1.0,0.03125,1.0,0.89065,0.0,
++1.0,0.32815,0.0,1.0,0.0,0.0938,0.0,0.4844,1.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
++1.0,0.51565,0.0,1.0,0.89065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.51565,0.0,1.0,0.14065,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,0.45315,1.0,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++0.07815,0.0,1.0,1.0,0.32815,0.0,0.0,0.4844,1.0,
++1.0,0.70315,0.0,1.0,0.6094,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.4219,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.70315,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.4219,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.70315,0.0,0.82815,1.0,0.0,0.0,1.0,0.20315,
++1.0,0.6094,0.0,0.0,1.0,0.4844,0.0,1.0,0.95315,
++1.0,0.0469,0.0,1.0,0.0,0.0,1.0,0.0,0.0,
++1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.14065,0.0,
++0.64065,1.0,0.0,1.0,0.4219,0.0,0.82815,1.0,0.0,
++0.26565,1.0,0.0,1.0,0.32815,0.0,1.0,0.2344,0.0,
++1.0,0.14065,0.0,1.0,0.0,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.70315,0.0,0.64065,1.0,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.2344,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.2344,0.0,1.0,0.14065,0.0,1.0,0.6094,0.0,
++1.0,0.14065,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,0.26565,1.0,0.0,1.0,0.4219,0.0,
++1.0,0.6094,0.0,1.0,0.70315,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.51565,0.0,1.0,0.0,0.0938,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.14065,0.0,
++1.0,0.14065,0.0,1.0,0.70315,0.0,1.0,0.0469,0.0,
++1.0,0.51565,0.0,1.0,0.0469,0.0,1.0,0.70315,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.51565,0.0,1.0,0.51565,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
++1.0,0.4219,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.51565,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.51565,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.51565,0.0,0.45315,1.0,0.0,1.0,0.0,0.0938,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.4219,0.0,0.0,1.0,0.20315,0.82815,1.0,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.89065,0.0,0.0,1.0,0.95315,0.0,1.0,0.4844,
++1.0,0.0469,0.0,1.0,0.51565,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.70315,0.0,
++1.0,0.14065,0.0,0.7344,1.0,0.0,1.0,0.70315,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.6094,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.89065,0.0,0.07815,0.0,1.0,0.0,1.0,0.4844,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,0.07815,0.0,1.0,1.0,0.89065,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.70315,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.70315,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.14065,0.0,1.0,0.70315,0.0,
++1.0,0.89065,0.0,0.0,1.0,0.4844,1.0,0.32815,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.6094,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.89065,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
++1.0,0.70315,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
++1.0,0.70315,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.4219,0.0,0.82815,1.0,0.0,1.0,0.4219,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.51565,0.0,1.0,0.0469,0.0,1.0,0.89065,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.6094,0.0,1.0,0.14065,0.0,
++1.0,0.2344,0.0,1.0,0.7969,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.6094,0.0,1.0,0.14065,0.0,1.0,0.14065,0.0,
++1.0,0.4219,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.14065,0.0,1.0,0.6094,0.0,0.0,1.0,0.95315,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.4219,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.6094,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.6094,0.0,1.0,0.14065,0.0,
++1.0,0.14065,0.0,1.0,0.4219,0.0,0.26565,1.0,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++0.7344,1.0,0.0,1.0,0.4219,0.0,0.64065,1.0,0.0,
++1.0,0.14065,0.0,0.26565,1.0,0.0,1.0,0.32815,0.0,
++1.0,0.4219,0.0,1.0,0.32815,0.0,0.26565,1.0,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.89065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++0.64065,1.0,0.0,1.0,0.70315,0.0,0.7344,1.0,0.0,
++1.0,0.0469,0.0,1.0,0.7969,0.0,1.0,0.2344,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.89065,0.0,0.0,1.0,0.4844,0.07815,0.0,1.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++0.0,1.0,0.20315,0.1719,1.0,0.0,1.0,0.51565,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++0.1719,1.0,0.0,0.0,1.0,0.20315,1.0,0.4219,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.51565,0.0,
++1.0,0.0469,0.0,0.01565,1.0,0.03125,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.2344,0.0,
++1.0,0.14065,0.0,1.0,0.6094,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.4219,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.51565,0.0,1.0,0.70315,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++0.26565,1.0,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.70315,0.0,0.64065,1.0,0.0,0.82815,1.0,0.0,
++1.0,0.51565,0.0,1.0,0.0469,0.0,0.45315,1.0,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.4219,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.4219,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++0.26565,1.0,0.0,1.0,0.2344,0.0,1.0,0.4219,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
++1.0,0.2344,0.0,1.0,0.51565,0.0,0.1719,1.0,0.0,
++1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.70315,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.14065,0.0,
++1.0,0.2344,0.0,1.0,0.14065,0.0,1.0,0.14065,0.0,
++1.0,0.51565,0.0,1.0,0.32815,0.0,0.0,1.0,0.20315,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.6094,0.0,
++0.0,1.0,0.4844,1.0,0.6094,0.0,1.0,0.32815,0.0,
++1.0,0.2344,0.0,0.64065,1.0,0.0,1.0,0.70315,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.70315,0.0,0.0,1.0,0.20315,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.70315,0.0,
++1.0,0.51565,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.89065,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.14065,0.0,0.64065,1.0,0.0,1.0,0.2344,0.0,
++1.0,0.51565,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.70315,0.0,
++1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.2344,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.51565,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
++1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
++1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0];
+Index: ../trunk-jpl/src/mobile/web/src/webgl-utils.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/webgl-utils.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/src/webgl-utils.js	(revision 15487)
+@@ -0,0 +1,174 @@
++/*
++ * Copyright 2010, Google Inc.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are
++ * met:
++ *
++ *     * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *     * Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following disclaimer
++ * in the documentation and/or other materials provided with the
++ * distribution.
++ *     * Neither the name of Google Inc. nor the names of its
++ * contributors may be used to endorse or promote products derived from
++ * this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++
++/**
++ * @fileoverview This file contains functions every webgl program will need
++ * a version of one way or another.
++ *
++ * Instead of setting up a context manually it is recommended to
++ * use. This will check for success or failure. On failure it
++ * will attempt to present an approriate message to the user.
++ *
++ *       gl = WebGLUtils.setupWebGL(canvas);
++ *
++ * For animated WebGL apps use of setTimeout or setInterval are
++ * discouraged. It is recommended you structure your rendering
++ * loop like this.
++ *
++ *       function render() {
++ *         window.requestAnimFrame(render, canvas);
++ *
++ *         // do rendering
++ *         ...
++ *       }
++ *       render();
++ *
++ * This will call your rendering function up to the refresh rate
++ * of your display but will stop rendering if your app is not
++ * visible.
++ */
++
++WebGLUtils = function() {
++
++/**
++ * Creates the HTLM for a failure message
++ * @param {string} canvasContainerId id of container of th
++ *        canvas.
++ * @return {string} The html.
++ */
++var makeFailHTML = function(msg) {
++  return '' +
++    '<table style="background-color: #8CE; width: 100%; height: 100%;"><tr>' +
++    '<td align="center">' +
++    '<div style="display: table-cell; vertical-align: middle;">' +
++    '<div style="">' + msg + '</div>' +
++    '</div>' +
++    '</td></tr></table>';
++};
++
++/**
++ * Mesasge for getting a webgl browser
++ * @type {string}
++ */
++var GET_A_WEBGL_BROWSER = '' +
++  'This page requires a browser that supports WebGL.<br/>' +
++  '<a href="http://get.webgl.org">Click here to upgrade your browser.</a>';
++
++/**
++ * Mesasge for need better hardware
++ * @type {string}
++ */
++var OTHER_PROBLEM = '' +
++  "It doesn't appear your computer can support WebGL.<br/>" +
++  '<a href="http://get.webgl.org/troubleshooting/">Click here for more information.</a>';
++
++/**
++ * Creates a webgl context. If creation fails it will
++ * change the contents of the container of the <canvas>
++ * tag to an error message with the correct links for WebGL.
++ * @param {Element} canvas. The canvas element to create a
++ *     context from.
++ * @param {WebGLContextCreationAttirbutes} opt_attribs Any
++ *     creation attributes you want to pass in.
++ * @param {function:(msg)} opt_onError An function to call
++ *     if there is an error during creation.
++ * @return {WebGLRenderingContext} The created context.
++ */
++var setupWebGL = function(canvas, opt_attribs, opt_onError) {
++  function handleCreationError(msg) {
++    var container = canvas.parentNode;
++    if (container) {
++      var str = window.WebGLRenderingContext ?
++           OTHER_PROBLEM :
++           GET_A_WEBGL_BROWSER;
++      if (msg) {
++        str += "<br/><br/>Status: " + msg;
++      }
++      container.innerHTML = makeFailHTML(str);
++    }
++  };
++
++  opt_onError = opt_onError || handleCreationError;
++
++  if (canvas.addEventListener) {
++    canvas.addEventListener("webglcontextcreationerror", function(event) {
++          opt_onError(event.statusMessage);
++        }, false);
++  }
++  var context = create3DContext(canvas, opt_attribs);
++  if (!context) {
++    if (!window.WebGLRenderingContext) {
++      opt_onError("");
++    }
++  }
++  return context;
++};
++
++/**
++ * Creates a webgl context.
++ * @param {!Canvas} canvas The canvas tag to get context
++ *     from. If one is not passed in one will be created.
++ * @return {!WebGLContext} The created context.
++ */
++var create3DContext = function(canvas, opt_attribs) {
++  var names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];
++  var context = null;
++  for (var ii = 0; ii < names.length; ++ii) {
++    try {
++      context = canvas.getContext(names[ii], opt_attribs);
++    } catch(e) {}
++    if (context) {
++      break;
++    }
++  }
++  return context;
++}
++
++return {
++  create3DContext: create3DContext,
++  setupWebGL: setupWebGL
++};
++}();
++
++/**
++ * Provides requestAnimationFrame in a cross browser way.
++ */
++window.requestAnimFrame = (function() {
++  return window.requestAnimationFrame ||
++         window.webkitRequestAnimationFrame ||
++         window.mozRequestAnimationFrame ||
++         window.oRequestAnimationFrame ||
++         window.msRequestAnimationFrame ||
++         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
++           window.setTimeout(callback, 1000/60);
++         };
++})();
+Index: ../trunk-jpl/src/mobile/web/src/glMatrix-0.9.5.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/glMatrix-0.9.5.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/src/glMatrix-0.9.5.min.js	(revision 15487)
+@@ -0,0 +1,32 @@
++// glMatrix v0.9.5
++glMatrixArrayType=typeof Float32Array!="undefined"?Float32Array:typeof WebGLFloatArray!="undefined"?WebGLFloatArray:Array;var vec3={};vec3.create=function(a){var b=new glMatrixArrayType(3);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2]}return b};vec3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];return b};vec3.add=function(a,b,c){if(!c||a==c){a[0]+=b[0];a[1]+=b[1];a[2]+=b[2];return a}c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];return c};
++vec3.subtract=function(a,b,c){if(!c||a==c){a[0]-=b[0];a[1]-=b[1];a[2]-=b[2];return a}c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];return c};vec3.negate=function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];return b};vec3.scale=function(a,b,c){if(!c||a==c){a[0]*=b;a[1]*=b;a[2]*=b;return a}c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;return c};
++vec3.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=Math.sqrt(c*c+d*d+e*e);if(g){if(g==1){b[0]=c;b[1]=d;b[2]=e;return b}}else{b[0]=0;b[1]=0;b[2]=0;return b}g=1/g;b[0]=c*g;b[1]=d*g;b[2]=e*g;return b};vec3.cross=function(a,b,c){c||(c=a);var d=a[0],e=a[1];a=a[2];var g=b[0],f=b[1];b=b[2];c[0]=e*b-a*f;c[1]=a*g-d*b;c[2]=d*f-e*g;return c};vec3.length=function(a){var b=a[0],c=a[1];a=a[2];return Math.sqrt(b*b+c*c+a*a)};vec3.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]};
++vec3.direction=function(a,b,c){c||(c=a);var d=a[0]-b[0],e=a[1]-b[1];a=a[2]-b[2];b=Math.sqrt(d*d+e*e+a*a);if(!b){c[0]=0;c[1]=0;c[2]=0;return c}b=1/b;c[0]=d*b;c[1]=e*b;c[2]=a*b;return c};vec3.lerp=function(a,b,c,d){d||(d=a);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);d[2]=a[2]+c*(b[2]-a[2]);return d};vec3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var mat3={};
++mat3.create=function(a){var b=new glMatrixArrayType(9);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9]}return b};mat3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return b};mat3.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a};
++mat3.transpose=function(a,b){if(!b||a==b){var c=a[1],d=a[2],e=a[5];a[1]=a[3];a[2]=a[6];a[3]=c;a[5]=a[7];a[6]=d;a[7]=e;return a}b[0]=a[0];b[1]=a[3];b[2]=a[6];b[3]=a[1];b[4]=a[4];b[5]=a[7];b[6]=a[2];b[7]=a[5];b[8]=a[8];return b};mat3.toMat4=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=0;b[4]=a[3];b[5]=a[4];b[6]=a[5];b[7]=0;b[8]=a[6];b[9]=a[7];b[10]=a[8];b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};
++mat3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+"]"};var mat4={};mat4.create=function(a){var b=new glMatrixArrayType(16);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15]}return b};
++mat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b};mat4.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a};
++mat4.transpose=function(a,b){if(!b||a==b){var c=a[1],d=a[2],e=a[3],g=a[6],f=a[7],h=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=c;a[6]=a[9];a[7]=a[13];a[8]=d;a[9]=g;a[11]=a[14];a[12]=e;a[13]=f;a[14]=h;return a}b[0]=a[0];b[1]=a[4];b[2]=a[8];b[3]=a[12];b[4]=a[1];b[5]=a[5];b[6]=a[9];b[7]=a[13];b[8]=a[2];b[9]=a[6];b[10]=a[10];b[11]=a[14];b[12]=a[3];b[13]=a[7];b[14]=a[11];b[15]=a[15];return b};
++mat4.determinant=function(a){var b=a[0],c=a[1],d=a[2],e=a[3],g=a[4],f=a[5],h=a[6],i=a[7],j=a[8],k=a[9],l=a[10],o=a[11],m=a[12],n=a[13],p=a[14];a=a[15];return m*k*h*e-j*n*h*e-m*f*l*e+g*n*l*e+j*f*p*e-g*k*p*e-m*k*d*i+j*n*d*i+m*c*l*i-b*n*l*i-j*c*p*i+b*k*p*i+m*f*d*o-g*n*d*o-m*c*h*o+b*n*h*o+g*c*p*o-b*f*p*o-j*f*d*a+g*k*d*a+j*c*h*a-b*k*h*a-g*c*l*a+b*f*l*a};
++mat4.inverse=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=a[4],h=a[5],i=a[6],j=a[7],k=a[8],l=a[9],o=a[10],m=a[11],n=a[12],p=a[13],r=a[14],s=a[15],A=c*h-d*f,B=c*i-e*f,t=c*j-g*f,u=d*i-e*h,v=d*j-g*h,w=e*j-g*i,x=k*p-l*n,y=k*r-o*n,z=k*s-m*n,C=l*r-o*p,D=l*s-m*p,E=o*s-m*r,q=1/(A*E-B*D+t*C+u*z-v*y+w*x);b[0]=(h*E-i*D+j*C)*q;b[1]=(-d*E+e*D-g*C)*q;b[2]=(p*w-r*v+s*u)*q;b[3]=(-l*w+o*v-m*u)*q;b[4]=(-f*E+i*z-j*y)*q;b[5]=(c*E-e*z+g*y)*q;b[6]=(-n*w+r*t-s*B)*q;b[7]=(k*w-o*t+m*B)*q;b[8]=(f*D-h*z+j*x)*q;
++b[9]=(-c*D+d*z-g*x)*q;b[10]=(n*v-p*t+s*A)*q;b[11]=(-k*v+l*t-m*A)*q;b[12]=(-f*C+h*y-i*x)*q;b[13]=(c*C-d*y+e*x)*q;b[14]=(-n*u+p*B-r*A)*q;b[15]=(k*u-l*B+o*A)*q;return b};mat4.toRotationMat=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};
++mat4.toMat3=function(a,b){b||(b=mat3.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[4];b[4]=a[5];b[5]=a[6];b[6]=a[8];b[7]=a[9];b[8]=a[10];return b};mat4.toInverseMat3=function(a,b){var c=a[0],d=a[1],e=a[2],g=a[4],f=a[5],h=a[6],i=a[8],j=a[9],k=a[10],l=k*f-h*j,o=-k*g+h*i,m=j*g-f*i,n=c*l+d*o+e*m;if(!n)return null;n=1/n;b||(b=mat3.create());b[0]=l*n;b[1]=(-k*d+e*j)*n;b[2]=(h*d-e*f)*n;b[3]=o*n;b[4]=(k*c-e*i)*n;b[5]=(-h*c+e*g)*n;b[6]=m*n;b[7]=(-j*c+d*i)*n;b[8]=(f*c-d*g)*n;return b};
++mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],f=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],o=a[9],m=a[10],n=a[11],p=a[12],r=a[13],s=a[14];a=a[15];var A=b[0],B=b[1],t=b[2],u=b[3],v=b[4],w=b[5],x=b[6],y=b[7],z=b[8],C=b[9],D=b[10],E=b[11],q=b[12],F=b[13],G=b[14];b=b[15];c[0]=A*d+B*h+t*l+u*p;c[1]=A*e+B*i+t*o+u*r;c[2]=A*g+B*j+t*m+u*s;c[3]=A*f+B*k+t*n+u*a;c[4]=v*d+w*h+x*l+y*p;c[5]=v*e+w*i+x*o+y*r;c[6]=v*g+w*j+x*m+y*s;c[7]=v*f+w*k+x*n+y*a;c[8]=z*d+C*h+D*l+E*p;c[9]=z*e+C*i+D*o+E*r;c[10]=z*
++g+C*j+D*m+E*s;c[11]=z*f+C*k+D*n+E*a;c[12]=q*d+F*h+G*l+b*p;c[13]=q*e+F*i+G*o+b*r;c[14]=q*g+F*j+G*m+b*s;c[15]=q*f+F*k+G*n+b*a;return c};mat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1];b=b[2];c[0]=a[0]*d+a[4]*e+a[8]*b+a[12];c[1]=a[1]*d+a[5]*e+a[9]*b+a[13];c[2]=a[2]*d+a[6]*e+a[10]*b+a[14];return c};
++mat4.multiplyVec4=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2];b=b[3];c[0]=a[0]*d+a[4]*e+a[8]*g+a[12]*b;c[1]=a[1]*d+a[5]*e+a[9]*g+a[13]*b;c[2]=a[2]*d+a[6]*e+a[10]*g+a[14]*b;c[3]=a[3]*d+a[7]*e+a[11]*g+a[15]*b;return c};
++mat4.translate=function(a,b,c){var d=b[0],e=b[1];b=b[2];if(!c||a==c){a[12]=a[0]*d+a[4]*e+a[8]*b+a[12];a[13]=a[1]*d+a[5]*e+a[9]*b+a[13];a[14]=a[2]*d+a[6]*e+a[10]*b+a[14];a[15]=a[3]*d+a[7]*e+a[11]*b+a[15];return a}var g=a[0],f=a[1],h=a[2],i=a[3],j=a[4],k=a[5],l=a[6],o=a[7],m=a[8],n=a[9],p=a[10],r=a[11];c[0]=g;c[1]=f;c[2]=h;c[3]=i;c[4]=j;c[5]=k;c[6]=l;c[7]=o;c[8]=m;c[9]=n;c[10]=p;c[11]=r;c[12]=g*d+j*e+m*b+a[12];c[13]=f*d+k*e+n*b+a[13];c[14]=h*d+l*e+p*b+a[14];c[15]=i*d+o*e+r*b+a[15];return c};
++mat4.scale=function(a,b,c){var d=b[0],e=b[1];b=b[2];if(!c||a==c){a[0]*=d;a[1]*=d;a[2]*=d;a[3]*=d;a[4]*=e;a[5]*=e;a[6]*=e;a[7]*=e;a[8]*=b;a[9]*=b;a[10]*=b;a[11]*=b;return a}c[0]=a[0]*d;c[1]=a[1]*d;c[2]=a[2]*d;c[3]=a[3]*d;c[4]=a[4]*e;c[5]=a[5]*e;c[6]=a[6]*e;c[7]=a[7]*e;c[8]=a[8]*b;c[9]=a[9]*b;c[10]=a[10]*b;c[11]=a[11]*b;c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15];return c};
++mat4.rotate=function(a,b,c,d){var e=c[0],g=c[1];c=c[2];var f=Math.sqrt(e*e+g*g+c*c);if(!f)return null;if(f!=1){f=1/f;e*=f;g*=f;c*=f}var h=Math.sin(b),i=Math.cos(b),j=1-i;b=a[0];f=a[1];var k=a[2],l=a[3],o=a[4],m=a[5],n=a[6],p=a[7],r=a[8],s=a[9],A=a[10],B=a[11],t=e*e*j+i,u=g*e*j+c*h,v=c*e*j-g*h,w=e*g*j-c*h,x=g*g*j+i,y=c*g*j+e*h,z=e*c*j+g*h;e=g*c*j-e*h;g=c*c*j+i;if(d){if(a!=d){d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15]}}else d=a;d[0]=b*t+o*u+r*v;d[1]=f*t+m*u+s*v;d[2]=k*t+n*u+A*v;d[3]=l*t+p*u+B*
++v;d[4]=b*w+o*x+r*y;d[5]=f*w+m*x+s*y;d[6]=k*w+n*x+A*y;d[7]=l*w+p*x+B*y;d[8]=b*z+o*e+r*g;d[9]=f*z+m*e+s*g;d[10]=k*z+n*e+A*g;d[11]=l*z+p*e+B*g;return d};mat4.rotateX=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[4],g=a[5],f=a[6],h=a[7],i=a[8],j=a[9],k=a[10],l=a[11];if(c){if(a!=c){c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[4]=e*b+i*d;c[5]=g*b+j*d;c[6]=f*b+k*d;c[7]=h*b+l*d;c[8]=e*-d+i*b;c[9]=g*-d+j*b;c[10]=f*-d+k*b;c[11]=h*-d+l*b;return c};
++mat4.rotateY=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[0],g=a[1],f=a[2],h=a[3],i=a[8],j=a[9],k=a[10],l=a[11];if(c){if(a!=c){c[4]=a[4];c[5]=a[5];c[6]=a[6];c[7]=a[7];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[0]=e*b+i*-d;c[1]=g*b+j*-d;c[2]=f*b+k*-d;c[3]=h*b+l*-d;c[8]=e*d+i*b;c[9]=g*d+j*b;c[10]=f*d+k*b;c[11]=h*d+l*b;return c};
++mat4.rotateZ=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[0],g=a[1],f=a[2],h=a[3],i=a[4],j=a[5],k=a[6],l=a[7];if(c){if(a!=c){c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[0]=e*b+i*d;c[1]=g*b+j*d;c[2]=f*b+k*d;c[3]=h*b+l*d;c[4]=e*-d+i*b;c[5]=g*-d+j*b;c[6]=f*-d+k*b;c[7]=h*-d+l*b;return c};
++mat4.frustum=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=e*2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=e*2/i;f[6]=0;f[7]=0;f[8]=(b+a)/h;f[9]=(d+c)/i;f[10]=-(g+e)/j;f[11]=-1;f[12]=0;f[13]=0;f[14]=-(g*e*2)/j;f[15]=0;return f};mat4.perspective=function(a,b,c,d,e){a=c*Math.tan(a*Math.PI/360);b=a*b;return mat4.frustum(-b,b,-a,a,c,d,e)};
++mat4.ortho=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=2/i;f[6]=0;f[7]=0;f[8]=0;f[9]=0;f[10]=-2/j;f[11]=0;f[12]=-(a+b)/h;f[13]=-(d+c)/i;f[14]=-(g+e)/j;f[15]=1;return f};
++mat4.lookAt=function(a,b,c,d){d||(d=mat4.create());var e=a[0],g=a[1];a=a[2];var f=c[0],h=c[1],i=c[2];c=b[1];var j=b[2];if(e==b[0]&&g==c&&a==j)return mat4.identity(d);var k,l,o,m;c=e-b[0];j=g-b[1];b=a-b[2];m=1/Math.sqrt(c*c+j*j+b*b);c*=m;j*=m;b*=m;k=h*b-i*j;i=i*c-f*b;f=f*j-h*c;if(m=Math.sqrt(k*k+i*i+f*f)){m=1/m;k*=m;i*=m;f*=m}else f=i=k=0;h=j*f-b*i;l=b*k-c*f;o=c*i-j*k;if(m=Math.sqrt(h*h+l*l+o*o)){m=1/m;h*=m;l*=m;o*=m}else o=l=h=0;d[0]=k;d[1]=h;d[2]=c;d[3]=0;d[4]=i;d[5]=l;d[6]=j;d[7]=0;d[8]=f;d[9]=
++o;d[10]=b;d[11]=0;d[12]=-(k*e+i*g+f*a);d[13]=-(h*e+l*g+o*a);d[14]=-(c*e+j*g+b*a);d[15]=1;return d};mat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"};quat4={};quat4.create=function(a){var b=new glMatrixArrayType(4);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3]}return b};quat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b};
++quat4.calculateW=function(a,b){var c=a[0],d=a[1],e=a[2];if(!b||a==b){a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return a}b[0]=c;b[1]=d;b[2]=e;b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return b};quat4.inverse=function(a,b){if(!b||a==b){a[0]*=1;a[1]*=1;a[2]*=1;return a}b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=a[3];return b};quat4.length=function(a){var b=a[0],c=a[1],d=a[2];a=a[3];return Math.sqrt(b*b+c*c+d*d+a*a)};
++quat4.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=Math.sqrt(c*c+d*d+e*e+g*g);if(f==0){b[0]=0;b[1]=0;b[2]=0;b[3]=0;return b}f=1/f;b[0]=c*f;b[1]=d*f;b[2]=e*f;b[3]=g*f;return b};quat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2];a=a[3];var f=b[0],h=b[1],i=b[2];b=b[3];c[0]=d*b+a*f+e*i-g*h;c[1]=e*b+a*h+g*f-d*i;c[2]=g*b+a*i+d*h-e*f;c[3]=a*b-d*f-e*h-g*i;return c};
++quat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2];b=a[0];var f=a[1],h=a[2];a=a[3];var i=a*d+f*g-h*e,j=a*e+h*d-b*g,k=a*g+b*e-f*d;d=-b*d-f*e-h*g;c[0]=i*a+d*-b+j*-h-k*-f;c[1]=j*a+d*-f+k*-b-i*-h;c[2]=k*a+d*-h+i*-f-j*-b;return c};quat4.toMat3=function(a,b){b||(b=mat3.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c=c*i;var l=d*h;d=d*i;e=e*i;f=g*f;h=g*h;g=g*i;b[0]=1-(l+e);b[1]=k-g;b[2]=c+h;b[3]=k+g;b[4]=1-(j+e);b[5]=d-f;b[6]=c-h;b[7]=d+f;b[8]=1-(j+l);return b};
++quat4.toMat4=function(a,b){b||(b=mat4.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c=c*i;var l=d*h;d=d*i;e=e*i;f=g*f;h=g*h;g=g*i;b[0]=1-(l+e);b[1]=k-g;b[2]=c+h;b[3]=0;b[4]=k+g;b[5]=1-(j+e);b[6]=d-f;b[7]=0;b[8]=c-h;b[9]=d+f;b[10]=1-(j+l);b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};quat4.slerp=function(a,b,c,d){d||(d=a);var e=c;if(a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]<0)e=-1*c;d[0]=1-c*a[0]+e*b[0];d[1]=1-c*a[1]+e*b[1];d[2]=1-c*a[2]+e*b[2];d[3]=1-c*a[3]+e*b[3];return d};
++quat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"};
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.dialog.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.dialog.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.dialog.css	(revision 15487)
+@@ -0,0 +1,69 @@
++/*!
++ * jQuery UI Dialog 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Dialog#theming
++ */
++.ui-dialog {
++	position: absolute;
++	top: 0;
++	left: 0;
++	padding: .2em;
++	outline: 0;
++}
++.ui-dialog .ui-dialog-titlebar {
++	padding: .4em 1em;
++	position: relative;
++}
++.ui-dialog .ui-dialog-title {
++	float: left;
++	margin: .1em 0;
++	white-space: nowrap;
++	width: 90%;
++	overflow: hidden;
++	text-overflow: ellipsis;
++}
++.ui-dialog .ui-dialog-titlebar-close {
++	position: absolute;
++	right: .3em;
++	top: 50%;
++	width: 21px;
++	margin: -10px 0 0 0;
++	padding: 1px;
++	height: 20px;
++}
++.ui-dialog .ui-dialog-content {
++	position: relative;
++	border: 0;
++	padding: .5em 1em;
++	background: none;
++	overflow: auto;
++}
++.ui-dialog .ui-dialog-buttonpane {
++	text-align: left;
++	border-width: 1px 0 0 0;
++	background-image: none;
++	margin-top: .5em;
++	padding: .3em 1em .5em .4em;
++}
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
++	float: right;
++}
++.ui-dialog .ui-dialog-buttonpane button {
++	margin: .5em .4em .5em 0;
++	cursor: pointer;
++}
++.ui-dialog .ui-resizable-se {
++	width: 12px;
++	height: 12px;
++	right: -5px;
++	bottom: -5px;
++	background-position: 16px 16px;
++}
++.ui-draggable .ui-dialog-titlebar {
++	cursor: move;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery-ui.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery-ui.css	(revision 15487)
+@@ -0,0 +1,1176 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden {
++	display: none;
++}
++.ui-helper-hidden-accessible {
++	border: 0;
++	clip: rect(0 0 0 0);
++	height: 1px;
++	margin: -1px;
++	overflow: hidden;
++	padding: 0;
++	position: absolute;
++	width: 1px;
++}
++.ui-helper-reset {
++	margin: 0;
++	padding: 0;
++	border: 0;
++	outline: 0;
++	line-height: 1.3;
++	text-decoration: none;
++	font-size: 100%;
++	list-style: none;
++}
++.ui-helper-clearfix:before,
++.ui-helper-clearfix:after {
++	content: "";
++	display: table;
++	border-collapse: collapse;
++}
++.ui-helper-clearfix:after {
++	clear: both;
++}
++.ui-helper-clearfix {
++	min-height: 0; /* support: IE7 */
++}
++.ui-helper-zfix {
++	width: 100%;
++	height: 100%;
++	top: 0;
++	left: 0;
++	position: absolute;
++	opacity: 0;
++	filter:Alpha(Opacity=0);
++}
++
++.ui-front {
++	z-index: 100;
++}
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled {
++	cursor: default !important;
++}
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	display: block;
++	text-indent: -99999px;
++	overflow: hidden;
++	background-repeat: no-repeat;
++}
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay {
++	position: fixed;
++	top: 0;
++	left: 0;
++	width: 100%;
++	height: 100%;
++}
++.ui-resizable {
++	position: relative;
++}
++.ui-resizable-handle {
++	position: absolute;
++	font-size: 0.1px;
++	display: block;
++}
++.ui-resizable-disabled .ui-resizable-handle,
++.ui-resizable-autohide .ui-resizable-handle {
++	display: none;
++}
++.ui-resizable-n {
++	cursor: n-resize;
++	height: 7px;
++	width: 100%;
++	top: -5px;
++	left: 0;
++}
++.ui-resizable-s {
++	cursor: s-resize;
++	height: 7px;
++	width: 100%;
++	bottom: -5px;
++	left: 0;
++}
++.ui-resizable-e {
++	cursor: e-resize;
++	width: 7px;
++	right: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-w {
++	cursor: w-resize;
++	width: 7px;
++	left: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-se {
++	cursor: se-resize;
++	width: 12px;
++	height: 12px;
++	right: 1px;
++	bottom: 1px;
++}
++.ui-resizable-sw {
++	cursor: sw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	bottom: -5px;
++}
++.ui-resizable-nw {
++	cursor: nw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	top: -5px;
++}
++.ui-resizable-ne {
++	cursor: ne-resize;
++	width: 9px;
++	height: 9px;
++	right: -5px;
++	top: -5px;
++}
++.ui-selectable-helper {
++	position: absolute;
++	z-index: 100;
++	border: 1px dotted black;
++}
++.ui-accordion .ui-accordion-header {
++	display: block;
++	cursor: pointer;
++	position: relative;
++	margin-top: 2px;
++	padding: .5em .5em .5em .7em;
++	min-height: 0; /* support: IE7 */
++}
++.ui-accordion .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-noicons {
++	padding-left: .7em;
++}
++.ui-accordion .ui-accordion-icons .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
++	position: absolute;
++	left: .5em;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-accordion .ui-accordion-content {
++	padding: 1em 2.2em;
++	border-top: 0;
++	overflow: auto;
++}
++.ui-autocomplete {
++	position: absolute;
++	top: 0;
++	left: 0;
++	cursor: default;
++}
++.ui-button {
++	display: inline-block;
++	position: relative;
++	padding: 0;
++	line-height: normal;
++	margin-right: .1em;
++	cursor: pointer;
++	vertical-align: middle;
++	text-align: center;
++	overflow: visible; /* removes extra width in IE */
++}
++.ui-button,
++.ui-button:link,
++.ui-button:visited,
++.ui-button:hover,
++.ui-button:active {
++	text-decoration: none;
++}
++/* to make room for the icon, a width needs to be set here */
++.ui-button-icon-only {
++	width: 2.2em;
++}
++/* button elements seem to need a little more width */
++button.ui-button-icon-only {
++	width: 2.4em;
++}
++.ui-button-icons-only {
++	width: 3.4em;
++}
++button.ui-button-icons-only {
++	width: 3.7em;
++}
++
++/* button text element */
++.ui-button .ui-button-text {
++	display: block;
++	line-height: normal;
++}
++.ui-button-text-only .ui-button-text {
++	padding: .4em 1em;
++}
++.ui-button-icon-only .ui-button-text,
++.ui-button-icons-only .ui-button-text {
++	padding: .4em;
++	text-indent: -9999999px;
++}
++.ui-button-text-icon-primary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 1em .4em 2.1em;
++}
++.ui-button-text-icon-secondary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 2.1em .4em 1em;
++}
++.ui-button-text-icons .ui-button-text {
++	padding-left: 2.1em;
++	padding-right: 2.1em;
++}
++/* no icon support for input elements, provide padding by default */
++input.ui-button {
++	padding: .4em 1em;
++}
++
++/* button icon element(s) */
++.ui-button-icon-only .ui-icon,
++.ui-button-text-icon-primary .ui-icon,
++.ui-button-text-icon-secondary .ui-icon,
++.ui-button-text-icons .ui-icon,
++.ui-button-icons-only .ui-icon {
++	position: absolute;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-button-icon-only .ui-icon {
++	left: 50%;
++	margin-left: -8px;
++}
++.ui-button-text-icon-primary .ui-button-icon-primary,
++.ui-button-text-icons .ui-button-icon-primary,
++.ui-button-icons-only .ui-button-icon-primary {
++	left: .5em;
++}
++.ui-button-text-icon-secondary .ui-button-icon-secondary,
++.ui-button-text-icons .ui-button-icon-secondary,
++.ui-button-icons-only .ui-button-icon-secondary {
++	right: .5em;
++}
++
++/* button sets */
++.ui-buttonset {
++	margin-right: 7px;
++}
++.ui-buttonset .ui-button {
++	margin-left: 0;
++	margin-right: -.3em;
++}
++
++/* workarounds */
++/* reset extra padding in Firefox, see h5bp.com/l */
++input.ui-button::-moz-focus-inner,
++button.ui-button::-moz-focus-inner {
++	border: 0;
++	padding: 0;
++}
++.ui-datepicker {
++	width: 17em;
++	padding: .2em .2em 0;
++	display: none;
++}
++.ui-datepicker .ui-datepicker-header {
++	position: relative;
++	padding: .2em 0;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-next {
++	position: absolute;
++	top: 2px;
++	width: 1.8em;
++	height: 1.8em;
++}
++.ui-datepicker .ui-datepicker-prev-hover,
++.ui-datepicker .ui-datepicker-next-hover {
++	top: 1px;
++}
++.ui-datepicker .ui-datepicker-prev {
++	left: 2px;
++}
++.ui-datepicker .ui-datepicker-next {
++	right: 2px;
++}
++.ui-datepicker .ui-datepicker-prev-hover {
++	left: 1px;
++}
++.ui-datepicker .ui-datepicker-next-hover {
++	right: 1px;
++}
++.ui-datepicker .ui-datepicker-prev span,
++.ui-datepicker .ui-datepicker-next span {
++	display: block;
++	position: absolute;
++	left: 50%;
++	margin-left: -8px;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-datepicker .ui-datepicker-title {
++	margin: 0 2.3em;
++	line-height: 1.8em;
++	text-align: center;
++}
++.ui-datepicker .ui-datepicker-title select {
++	font-size: 1em;
++	margin: 1px 0;
++}
++.ui-datepicker select.ui-datepicker-month-year {
++	width: 100%;
++}
++.ui-datepicker select.ui-datepicker-month,
++.ui-datepicker select.ui-datepicker-year {
++	width: 49%;
++}
++.ui-datepicker table {
++	width: 100%;
++	font-size: .9em;
++	border-collapse: collapse;
++	margin: 0 0 .4em;
++}
++.ui-datepicker th {
++	padding: .7em .3em;
++	text-align: center;
++	font-weight: bold;
++	border: 0;
++}
++.ui-datepicker td {
++	border: 0;
++	padding: 1px;
++}
++.ui-datepicker td span,
++.ui-datepicker td a {
++	display: block;
++	padding: .2em;
++	text-align: right;
++	text-decoration: none;
++}
++.ui-datepicker .ui-datepicker-buttonpane {
++	background-image: none;
++	margin: .7em 0 0 0;
++	padding: 0 .2em;
++	border-left: 0;
++	border-right: 0;
++	border-bottom: 0;
++}
++.ui-datepicker .ui-datepicker-buttonpane button {
++	float: right;
++	margin: .5em .2em .4em;
++	cursor: pointer;
++	padding: .2em .6em .3em .6em;
++	width: auto;
++	overflow: visible;
++}
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
++	float: left;
++}
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi {
++	width: auto;
++}
++.ui-datepicker-multi .ui-datepicker-group {
++	float: left;
++}
++.ui-datepicker-multi .ui-datepicker-group table {
++	width: 95%;
++	margin: 0 auto .4em;
++}
++.ui-datepicker-multi-2 .ui-datepicker-group {
++	width: 50%;
++}
++.ui-datepicker-multi-3 .ui-datepicker-group {
++	width: 33.3%;
++}
++.ui-datepicker-multi-4 .ui-datepicker-group {
++	width: 25%;
++}
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
++	border-left-width: 0;
++}
++.ui-datepicker-multi .ui-datepicker-buttonpane {
++	clear: left;
++}
++.ui-datepicker-row-break {
++	clear: both;
++	width: 100%;
++	font-size: 0;
++}
++
++/* RTL support */
++.ui-datepicker-rtl {
++	direction: rtl;
++}
++.ui-datepicker-rtl .ui-datepicker-prev {
++	right: 2px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next {
++	left: 2px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-prev:hover {
++	right: 1px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next:hover {
++	left: 1px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane {
++	clear: right;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button {
++	float: left;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
++.ui-datepicker-rtl .ui-datepicker-group {
++	float: right;
++}
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
++	border-right-width: 0;
++	border-left-width: 1px;
++}
++.ui-dialog {
++	position: absolute;
++	top: 0;
++	left: 0;
++	padding: .2em;
++	outline: 0;
++}
++.ui-dialog .ui-dialog-titlebar {
++	padding: .4em 1em;
++	position: relative;
++}
++.ui-dialog .ui-dialog-title {
++	float: left;
++	margin: .1em 0;
++	white-space: nowrap;
++	width: 90%;
++	overflow: hidden;
++	text-overflow: ellipsis;
++}
++.ui-dialog .ui-dialog-titlebar-close {
++	position: absolute;
++	right: .3em;
++	top: 50%;
++	width: 21px;
++	margin: -10px 0 0 0;
++	padding: 1px;
++	height: 20px;
++}
++.ui-dialog .ui-dialog-content {
++	position: relative;
++	border: 0;
++	padding: .5em 1em;
++	background: none;
++	overflow: auto;
++}
++.ui-dialog .ui-dialog-buttonpane {
++	text-align: left;
++	border-width: 1px 0 0 0;
++	background-image: none;
++	margin-top: .5em;
++	padding: .3em 1em .5em .4em;
++}
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
++	float: right;
++}
++.ui-dialog .ui-dialog-buttonpane button {
++	margin: .5em .4em .5em 0;
++	cursor: pointer;
++}
++.ui-dialog .ui-resizable-se {
++	width: 12px;
++	height: 12px;
++	right: -5px;
++	bottom: -5px;
++	background-position: 16px 16px;
++}
++.ui-draggable .ui-dialog-titlebar {
++	cursor: move;
++}
++.ui-menu {
++	list-style: none;
++	padding: 2px;
++	margin: 0;
++	display: block;
++	outline: none;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++	position: absolute;
++}
++.ui-menu .ui-menu-item {
++	margin: 0;
++	padding: 0;
++	width: 100%;
++	/* support: IE10, see #8844 */
++	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
++}
++.ui-menu .ui-menu-divider {
++	margin: 5px -2px 5px -2px;
++	height: 0;
++	font-size: 0;
++	line-height: 0;
++	border-width: 1px 0 0 0;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration: none;
++	display: block;
++	padding: 2px .4em;
++	line-height: 1.5;
++	min-height: 0; /* support: IE7 */
++	font-weight: normal;
++}
++.ui-menu .ui-menu-item a.ui-state-focus,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++
++.ui-menu .ui-state-disabled {
++	font-weight: normal;
++	margin: .4em 0 .2em;
++	line-height: 1.5;
++}
++.ui-menu .ui-state-disabled a {
++	cursor: default;
++}
++
++/* icon support */
++.ui-menu-icons {
++	position: relative;
++}
++.ui-menu-icons .ui-menu-item a {
++	position: relative;
++	padding-left: 2em;
++}
++
++/* left-aligned */
++.ui-menu .ui-icon {
++	position: absolute;
++	top: .2em;
++	left: .2em;
++}
++
++/* right-aligned */
++.ui-menu .ui-menu-icon {
++	position: static;
++	float: right;
++}
++.ui-progressbar {
++	height: 2em;
++	text-align: left;
++	overflow: hidden;
++}
++.ui-progressbar .ui-progressbar-value {
++	margin: -1px;
++	height: 100%;
++}
++.ui-progressbar .ui-progressbar-overlay {
++	background: url("images/animated-overlay.gif");
++	height: 100%;
++	filter: alpha(opacity=25);
++	opacity: 0.25;
++}
++.ui-progressbar-indeterminate .ui-progressbar-value {
++	background-image: none;
++}
++.ui-slider {
++	position: relative;
++	text-align: left;
++}
++.ui-slider .ui-slider-handle {
++	position: absolute;
++	z-index: 2;
++	width: 1.2em;
++	height: 1.2em;
++	cursor: default;
++}
++.ui-slider .ui-slider-range {
++	position: absolute;
++	z-index: 1;
++	font-size: .7em;
++	display: block;
++	border: 0;
++	background-position: 0 0;
++}
++
++/* For IE8 - See #6727 */
++.ui-slider.ui-state-disabled .ui-slider-handle,
++.ui-slider.ui-state-disabled .ui-slider-range {
++	filter: inherit;
++}
++
++.ui-slider-horizontal {
++	height: .8em;
++}
++.ui-slider-horizontal .ui-slider-handle {
++	top: -.3em;
++	margin-left: -.6em;
++}
++.ui-slider-horizontal .ui-slider-range {
++	top: 0;
++	height: 100%;
++}
++.ui-slider-horizontal .ui-slider-range-min {
++	left: 0;
++}
++.ui-slider-horizontal .ui-slider-range-max {
++	right: 0;
++}
++
++.ui-slider-vertical {
++	width: .8em;
++	height: 100px;
++}
++.ui-slider-vertical .ui-slider-handle {
++	left: -.3em;
++	margin-left: 0;
++	margin-bottom: -.6em;
++}
++.ui-slider-vertical .ui-slider-range {
++	left: 0;
++	width: 100%;
++}
++.ui-slider-vertical .ui-slider-range-min {
++	bottom: 0;
++}
++.ui-slider-vertical .ui-slider-range-max {
++	top: 0;
++}
++.ui-spinner {
++	position: relative;
++	display: inline-block;
++	overflow: hidden;
++	padding: 0;
++	vertical-align: middle;
++}
++.ui-spinner-input {
++	border: none;
++	background: none;
++	color: inherit;
++	padding: 0;
++	margin: .2em 0;
++	vertical-align: middle;
++	margin-left: .4em;
++	margin-right: 22px;
++}
++.ui-spinner-button {
++	width: 16px;
++	height: 50%;
++	font-size: .5em;
++	padding: 0;
++	margin: 0;
++	text-align: center;
++	position: absolute;
++	cursor: default;
++	display: block;
++	overflow: hidden;
++	right: 0;
++}
++/* more specificity required here to overide default borders */
++.ui-spinner a.ui-spinner-button {
++	border-top: none;
++	border-bottom: none;
++	border-right: none;
++}
++/* vertical centre icon */
++.ui-spinner .ui-icon {
++	position: absolute;
++	margin-top: -8px;
++	top: 50%;
++	left: 0;
++}
++.ui-spinner-up {
++	top: 0;
++}
++.ui-spinner-down {
++	bottom: 0;
++}
++
++/* TR overrides */
++.ui-spinner .ui-icon-triangle-1-s {
++	/* need to fix icons sprite */
++	background-position: -65px -16px;
++}
++.ui-tabs {
++	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++	padding: .2em;
++}
++.ui-tabs .ui-tabs-nav {
++	margin: 0;
++	padding: .2em .2em 0;
++}
++.ui-tabs .ui-tabs-nav li {
++	list-style: none;
++	float: left;
++	position: relative;
++	top: 0;
++	margin: 1px .2em 0 0;
++	border-bottom-width: 0;
++	padding: 0;
++	white-space: nowrap;
++}
++.ui-tabs .ui-tabs-nav li a {
++	float: left;
++	padding: .5em 1em;
++	text-decoration: none;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active {
++	margin-bottom: -1px;
++	padding-bottom: 1px;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
++.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
++.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
++	cursor: text;
++}
++.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
++	cursor: pointer;
++}
++.ui-tabs .ui-tabs-panel {
++	display: block;
++	border-width: 0;
++	padding: 1em 1.4em;
++	background: none;
++}
++.ui-tooltip {
++	padding: 8px;
++	position: absolute;
++	z-index: 9999;
++	max-width: 300px;
++	-webkit-box-shadow: 0 0 5px #aaa;
++	box-shadow: 0 0 5px #aaa;
++}
++body .ui-tooltip {
++	border-width: 2px;
++}
++
++/* Component containers
++----------------------------------*/
++.ui-widget {
++	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
++	font-size: 1.1em/*{fsDefault}*/;
++}
++.ui-widget .ui-widget {
++	font-size: 1em;
++}
++.ui-widget input,
++.ui-widget select,
++.ui-widget textarea,
++.ui-widget button {
++	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
++	font-size: 1em;
++}
++.ui-widget-content {
++	border: 1px solid #aaaaaa/*{borderColorContent}*/;
++	background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
++	color: #222222/*{fcContent}*/;
++}
++.ui-widget-content a {
++	color: #222222/*{fcContent}*/;
++}
++.ui-widget-header {
++	border: 1px solid #aaaaaa/*{borderColorHeader}*/;
++	background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
++	color: #222222/*{fcHeader}*/;
++	font-weight: bold;
++}
++.ui-widget-header a {
++	color: #222222/*{fcHeader}*/;
++}
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default,
++.ui-widget-content .ui-state-default,
++.ui-widget-header .ui-state-default {
++	border: 1px solid #d3d3d3/*{borderColorDefault}*/;
++	background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #555555/*{fcDefault}*/;
++}
++.ui-state-default a,
++.ui-state-default a:link,
++.ui-state-default a:visited {
++	color: #555555/*{fcDefault}*/;
++	text-decoration: none;
++}
++.ui-state-hover,
++.ui-widget-content .ui-state-hover,
++.ui-widget-header .ui-state-hover,
++.ui-state-focus,
++.ui-widget-content .ui-state-focus,
++.ui-widget-header .ui-state-focus {
++	border: 1px solid #999999/*{borderColorHover}*/;
++	background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #212121/*{fcHover}*/;
++}
++.ui-state-hover a,
++.ui-state-hover a:hover,
++.ui-state-hover a:link,
++.ui-state-hover a:visited {
++	color: #212121/*{fcHover}*/;
++	text-decoration: none;
++}
++.ui-state-active,
++.ui-widget-content .ui-state-active,
++.ui-widget-header .ui-state-active {
++	border: 1px solid #aaaaaa/*{borderColorActive}*/;
++	background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #212121/*{fcActive}*/;
++}
++.ui-state-active a,
++.ui-state-active a:link,
++.ui-state-active a:visited {
++	color: #212121/*{fcActive}*/;
++	text-decoration: none;
++}
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight,
++.ui-widget-content .ui-state-highlight,
++.ui-widget-header .ui-state-highlight {
++	border: 1px solid #fcefa1/*{borderColorHighlight}*/;
++	background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
++	color: #363636/*{fcHighlight}*/;
++}
++.ui-state-highlight a,
++.ui-widget-content .ui-state-highlight a,
++.ui-widget-header .ui-state-highlight a {
++	color: #363636/*{fcHighlight}*/;
++}
++.ui-state-error,
++.ui-widget-content .ui-state-error,
++.ui-widget-header .ui-state-error {
++	border: 1px solid #cd0a0a/*{borderColorError}*/;
++	background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-state-error a,
++.ui-widget-content .ui-state-error a,
++.ui-widget-header .ui-state-error a {
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-state-error-text,
++.ui-widget-content .ui-state-error-text,
++.ui-widget-header .ui-state-error-text {
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-priority-primary,
++.ui-widget-content .ui-priority-primary,
++.ui-widget-header .ui-priority-primary {
++	font-weight: bold;
++}
++.ui-priority-secondary,
++.ui-widget-content .ui-priority-secondary,
++.ui-widget-header .ui-priority-secondary {
++	opacity: .7;
++	filter:Alpha(Opacity=70);
++	font-weight: normal;
++}
++.ui-state-disabled,
++.ui-widget-content .ui-state-disabled,
++.ui-widget-header .ui-state-disabled {
++	opacity: .35;
++	filter:Alpha(Opacity=35);
++	background-image: none;
++}
++.ui-state-disabled .ui-icon {
++	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
++}
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	width: 16px;
++	height: 16px;
++}
++.ui-icon,
++.ui-widget-content .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
++}
++.ui-widget-header .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
++}
++.ui-state-default .ui-icon {
++	background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
++}
++.ui-state-hover .ui-icon,
++.ui-state-focus .ui-icon {
++	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
++}
++.ui-state-active .ui-icon {
++	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
++}
++.ui-state-highlight .ui-icon {
++	background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
++}
++.ui-state-error .ui-icon,
++.ui-state-error-text .ui-icon {
++	background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
++}
++
++/* positioning */
++.ui-icon-blank { background-position: 16px 16px; }
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-on { background-position: -96px -144px; }
++.ui-icon-radio-off { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-left,
++.ui-corner-tl {
++	border-top-left-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-right,
++.ui-corner-tr {
++	border-top-right-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-left,
++.ui-corner-bl {
++	border-bottom-left-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-right,
++.ui-corner-br {
++	border-bottom-right-radius: 4px/*{cornerRadius}*/;
++}
++
++/* Overlays */
++.ui-widget-overlay {
++	background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
++	opacity: .3/*{opacityOverlay}*/;
++	filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
++}
++.ui-widget-shadow {
++	margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
++	padding: 8px/*{thicknessShadow}*/;
++	background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
++	opacity: .3/*{opacityShadow}*/;
++	filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
++	border-radius: 8px/*{cornerRadiusShadow}*/;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.accordion.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.accordion.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.accordion.css	(revision 15487)
+@@ -0,0 +1,38 @@
++/*!
++ * jQuery UI Accordion 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Accordion#theming
++ */
++.ui-accordion .ui-accordion-header {
++	display: block;
++	cursor: pointer;
++	position: relative;
++	margin-top: 2px;
++	padding: .5em .5em .5em .7em;
++	min-height: 0; /* support: IE7 */
++}
++.ui-accordion .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-noicons {
++	padding-left: .7em;
++}
++.ui-accordion .ui-accordion-icons .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
++	position: absolute;
++	left: .5em;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-accordion .ui-accordion-content {
++	padding: 1em 2.2em;
++	border-top: 0;
++	overflow: auto;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.autocomplete.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.autocomplete.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.autocomplete.css	(revision 15487)
+@@ -0,0 +1,16 @@
++/*!
++ * jQuery UI Autocomplete 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Autocomplete#theming
++ */
++.ui-autocomplete {
++	position: absolute;
++	top: 0;
++	left: 0;
++	cursor: default;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.theme.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.theme.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.theme.css	(revision 15487)
+@@ -0,0 +1,406 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ *
++ * To view and modify this theme, visit http://jqueryui.com/themeroller/
++ */
++
++
++/* Component containers
++----------------------------------*/
++.ui-widget {
++	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
++	font-size: 1.1em/*{fsDefault}*/;
++}
++.ui-widget .ui-widget {
++	font-size: 1em;
++}
++.ui-widget input,
++.ui-widget select,
++.ui-widget textarea,
++.ui-widget button {
++	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
++	font-size: 1em;
++}
++.ui-widget-content {
++	border: 1px solid #aaaaaa/*{borderColorContent}*/;
++	background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
++	color: #222222/*{fcContent}*/;
++}
++.ui-widget-content a {
++	color: #222222/*{fcContent}*/;
++}
++.ui-widget-header {
++	border: 1px solid #aaaaaa/*{borderColorHeader}*/;
++	background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
++	color: #222222/*{fcHeader}*/;
++	font-weight: bold;
++}
++.ui-widget-header a {
++	color: #222222/*{fcHeader}*/;
++}
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default,
++.ui-widget-content .ui-state-default,
++.ui-widget-header .ui-state-default {
++	border: 1px solid #d3d3d3/*{borderColorDefault}*/;
++	background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #555555/*{fcDefault}*/;
++}
++.ui-state-default a,
++.ui-state-default a:link,
++.ui-state-default a:visited {
++	color: #555555/*{fcDefault}*/;
++	text-decoration: none;
++}
++.ui-state-hover,
++.ui-widget-content .ui-state-hover,
++.ui-widget-header .ui-state-hover,
++.ui-state-focus,
++.ui-widget-content .ui-state-focus,
++.ui-widget-header .ui-state-focus {
++	border: 1px solid #999999/*{borderColorHover}*/;
++	background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #212121/*{fcHover}*/;
++}
++.ui-state-hover a,
++.ui-state-hover a:hover,
++.ui-state-hover a:link,
++.ui-state-hover a:visited {
++	color: #212121/*{fcHover}*/;
++	text-decoration: none;
++}
++.ui-state-active,
++.ui-widget-content .ui-state-active,
++.ui-widget-header .ui-state-active {
++	border: 1px solid #aaaaaa/*{borderColorActive}*/;
++	background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #212121/*{fcActive}*/;
++}
++.ui-state-active a,
++.ui-state-active a:link,
++.ui-state-active a:visited {
++	color: #212121/*{fcActive}*/;
++	text-decoration: none;
++}
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight,
++.ui-widget-content .ui-state-highlight,
++.ui-widget-header .ui-state-highlight {
++	border: 1px solid #fcefa1/*{borderColorHighlight}*/;
++	background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
++	color: #363636/*{fcHighlight}*/;
++}
++.ui-state-highlight a,
++.ui-widget-content .ui-state-highlight a,
++.ui-widget-header .ui-state-highlight a {
++	color: #363636/*{fcHighlight}*/;
++}
++.ui-state-error,
++.ui-widget-content .ui-state-error,
++.ui-widget-header .ui-state-error {
++	border: 1px solid #cd0a0a/*{borderColorError}*/;
++	background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-state-error a,
++.ui-widget-content .ui-state-error a,
++.ui-widget-header .ui-state-error a {
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-state-error-text,
++.ui-widget-content .ui-state-error-text,
++.ui-widget-header .ui-state-error-text {
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-priority-primary,
++.ui-widget-content .ui-priority-primary,
++.ui-widget-header .ui-priority-primary {
++	font-weight: bold;
++}
++.ui-priority-secondary,
++.ui-widget-content .ui-priority-secondary,
++.ui-widget-header .ui-priority-secondary {
++	opacity: .7;
++	filter:Alpha(Opacity=70);
++	font-weight: normal;
++}
++.ui-state-disabled,
++.ui-widget-content .ui-state-disabled,
++.ui-widget-header .ui-state-disabled {
++	opacity: .35;
++	filter:Alpha(Opacity=35);
++	background-image: none;
++}
++.ui-state-disabled .ui-icon {
++	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
++}
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	width: 16px;
++	height: 16px;
++}
++.ui-icon,
++.ui-widget-content .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
++}
++.ui-widget-header .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
++}
++.ui-state-default .ui-icon {
++	background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
++}
++.ui-state-hover .ui-icon,
++.ui-state-focus .ui-icon {
++	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
++}
++.ui-state-active .ui-icon {
++	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
++}
++.ui-state-highlight .ui-icon {
++	background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
++}
++.ui-state-error .ui-icon,
++.ui-state-error-text .ui-icon {
++	background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
++}
++
++/* positioning */
++.ui-icon-blank { background-position: 16px 16px; }
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-on { background-position: -96px -144px; }
++.ui-icon-radio-off { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-left,
++.ui-corner-tl {
++	border-top-left-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-right,
++.ui-corner-tr {
++	border-top-right-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-left,
++.ui-corner-bl {
++	border-bottom-left-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-right,
++.ui-corner-br {
++	border-bottom-right-radius: 4px/*{cornerRadius}*/;
++}
++
++/* Overlays */
++.ui-widget-overlay {
++	background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
++	opacity: .3/*{opacityOverlay}*/;
++	filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
++}
++.ui-widget-shadow {
++	margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
++	padding: 8px/*{thicknessShadow}*/;
++	background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
++	opacity: .3/*{opacityShadow}*/;
++	filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
++	border-radius: 8px/*{cornerRadiusShadow}*/;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.selectable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.selectable.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.selectable.css	(revision 15487)
+@@ -0,0 +1,15 @@
++/*!
++ * jQuery UI Selectable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Selectable#theming
++ */
++.ui-selectable-helper {
++	position: absolute;
++	z-index: 100;
++	border: 1px dotted black;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.menu.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.menu.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.menu.css	(revision 15487)
+@@ -0,0 +1,79 @@
++/*!
++ * jQuery UI Menu 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Menu#theming
++ */
++.ui-menu {
++	list-style: none;
++	padding: 2px;
++	margin: 0;
++	display: block;
++	outline: none;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++	position: absolute;
++}
++.ui-menu .ui-menu-item {
++	margin: 0;
++	padding: 0;
++	width: 100%;
++	/* support: IE10, see #8844 */
++	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
++}
++.ui-menu .ui-menu-divider {
++	margin: 5px -2px 5px -2px;
++	height: 0;
++	font-size: 0;
++	line-height: 0;
++	border-width: 1px 0 0 0;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration: none;
++	display: block;
++	padding: 2px .4em;
++	line-height: 1.5;
++	min-height: 0; /* support: IE7 */
++	font-weight: normal;
++}
++.ui-menu .ui-menu-item a.ui-state-focus,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++
++.ui-menu .ui-state-disabled {
++	font-weight: normal;
++	margin: .4em 0 .2em;
++	line-height: 1.5;
++}
++.ui-menu .ui-state-disabled a {
++	cursor: default;
++}
++
++/* icon support */
++.ui-menu-icons {
++	position: relative;
++}
++.ui-menu-icons .ui-menu-item a {
++	position: relative;
++	padding-left: 2em;
++}
++
++/* left-aligned */
++.ui-menu .ui-icon {
++	position: absolute;
++	top: .2em;
++	left: .2em;
++}
++
++/* right-aligned */
++.ui-menu .ui-menu-icon {
++	position: static;
++	float: right;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.all.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.all.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.all.css	(revision 15487)
+@@ -0,0 +1,12 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming
++ */
++@import "jquery.ui.base.css";
++@import "jquery.ui.theme.css";
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.base.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.base.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.base.css	(revision 15487)
+@@ -0,0 +1,25 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming
++ */
++@import url("jquery.ui.core.css");
++
++@import url("jquery.ui.accordion.css");
++@import url("jquery.ui.autocomplete.css");
++@import url("jquery.ui.button.css");
++@import url("jquery.ui.datepicker.css");
++@import url("jquery.ui.dialog.css");
++@import url("jquery.ui.menu.css");
++@import url("jquery.ui.progressbar.css");
++@import url("jquery.ui.resizable.css");
++@import url("jquery.ui.selectable.css");
++@import url("jquery.ui.slider.css");
++@import url("jquery.ui.spinner.css");
++@import url("jquery.ui.tabs.css");
++@import url("jquery.ui.tooltip.css");
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.button.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.button.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.button.css	(revision 15487)
+@@ -0,0 +1,114 @@
++/*!
++ * jQuery UI Button 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Button#theming
++ */
++.ui-button {
++	display: inline-block;
++	position: relative;
++	padding: 0;
++	line-height: normal;
++	margin-right: .1em;
++	cursor: pointer;
++	vertical-align: middle;
++	text-align: center;
++	overflow: visible; /* removes extra width in IE */
++}
++.ui-button,
++.ui-button:link,
++.ui-button:visited,
++.ui-button:hover,
++.ui-button:active {
++	text-decoration: none;
++}
++/* to make room for the icon, a width needs to be set here */
++.ui-button-icon-only {
++	width: 2.2em;
++}
++/* button elements seem to need a little more width */
++button.ui-button-icon-only {
++	width: 2.4em;
++}
++.ui-button-icons-only {
++	width: 3.4em;
++}
++button.ui-button-icons-only {
++	width: 3.7em;
++}
++
++/* button text element */
++.ui-button .ui-button-text {
++	display: block;
++	line-height: normal;
++}
++.ui-button-text-only .ui-button-text {
++	padding: .4em 1em;
++}
++.ui-button-icon-only .ui-button-text,
++.ui-button-icons-only .ui-button-text {
++	padding: .4em;
++	text-indent: -9999999px;
++}
++.ui-button-text-icon-primary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 1em .4em 2.1em;
++}
++.ui-button-text-icon-secondary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 2.1em .4em 1em;
++}
++.ui-button-text-icons .ui-button-text {
++	padding-left: 2.1em;
++	padding-right: 2.1em;
++}
++/* no icon support for input elements, provide padding by default */
++input.ui-button {
++	padding: .4em 1em;
++}
++
++/* button icon element(s) */
++.ui-button-icon-only .ui-icon,
++.ui-button-text-icon-primary .ui-icon,
++.ui-button-text-icon-secondary .ui-icon,
++.ui-button-text-icons .ui-icon,
++.ui-button-icons-only .ui-icon {
++	position: absolute;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-button-icon-only .ui-icon {
++	left: 50%;
++	margin-left: -8px;
++}
++.ui-button-text-icon-primary .ui-button-icon-primary,
++.ui-button-text-icons .ui-button-icon-primary,
++.ui-button-icons-only .ui-button-icon-primary {
++	left: .5em;
++}
++.ui-button-text-icon-secondary .ui-button-icon-secondary,
++.ui-button-text-icons .ui-button-icon-secondary,
++.ui-button-icons-only .ui-button-icon-secondary {
++	right: .5em;
++}
++
++/* button sets */
++.ui-buttonset {
++	margin-right: 7px;
++}
++.ui-buttonset .ui-button {
++	margin-left: 0;
++	margin-right: -.3em;
++}
++
++/* workarounds */
++/* reset extra padding in Firefox, see h5bp.com/l */
++input.ui-button::-moz-focus-inner,
++button.ui-button::-moz-focus-inner {
++	border: 0;
++	padding: 0;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.datepicker.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.datepicker.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.datepicker.css	(revision 15487)
+@@ -0,0 +1,178 @@
++/*!
++ * jQuery UI Datepicker 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Datepicker#theming
++ */
++.ui-datepicker {
++	width: 17em;
++	padding: .2em .2em 0;
++	display: none;
++}
++.ui-datepicker .ui-datepicker-header {
++	position: relative;
++	padding: .2em 0;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-next {
++	position: absolute;
++	top: 2px;
++	width: 1.8em;
++	height: 1.8em;
++}
++.ui-datepicker .ui-datepicker-prev-hover,
++.ui-datepicker .ui-datepicker-next-hover {
++	top: 1px;
++}
++.ui-datepicker .ui-datepicker-prev {
++	left: 2px;
++}
++.ui-datepicker .ui-datepicker-next {
++	right: 2px;
++}
++.ui-datepicker .ui-datepicker-prev-hover {
++	left: 1px;
++}
++.ui-datepicker .ui-datepicker-next-hover {
++	right: 1px;
++}
++.ui-datepicker .ui-datepicker-prev span,
++.ui-datepicker .ui-datepicker-next span {
++	display: block;
++	position: absolute;
++	left: 50%;
++	margin-left: -8px;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-datepicker .ui-datepicker-title {
++	margin: 0 2.3em;
++	line-height: 1.8em;
++	text-align: center;
++}
++.ui-datepicker .ui-datepicker-title select {
++	font-size: 1em;
++	margin: 1px 0;
++}
++.ui-datepicker select.ui-datepicker-month-year {
++	width: 100%;
++}
++.ui-datepicker select.ui-datepicker-month,
++.ui-datepicker select.ui-datepicker-year {
++	width: 49%;
++}
++.ui-datepicker table {
++	width: 100%;
++	font-size: .9em;
++	border-collapse: collapse;
++	margin: 0 0 .4em;
++}
++.ui-datepicker th {
++	padding: .7em .3em;
++	text-align: center;
++	font-weight: bold;
++	border: 0;
++}
++.ui-datepicker td {
++	border: 0;
++	padding: 1px;
++}
++.ui-datepicker td span,
++.ui-datepicker td a {
++	display: block;
++	padding: .2em;
++	text-align: right;
++	text-decoration: none;
++}
++.ui-datepicker .ui-datepicker-buttonpane {
++	background-image: none;
++	margin: .7em 0 0 0;
++	padding: 0 .2em;
++	border-left: 0;
++	border-right: 0;
++	border-bottom: 0;
++}
++.ui-datepicker .ui-datepicker-buttonpane button {
++	float: right;
++	margin: .5em .2em .4em;
++	cursor: pointer;
++	padding: .2em .6em .3em .6em;
++	width: auto;
++	overflow: visible;
++}
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
++	float: left;
++}
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi {
++	width: auto;
++}
++.ui-datepicker-multi .ui-datepicker-group {
++	float: left;
++}
++.ui-datepicker-multi .ui-datepicker-group table {
++	width: 95%;
++	margin: 0 auto .4em;
++}
++.ui-datepicker-multi-2 .ui-datepicker-group {
++	width: 50%;
++}
++.ui-datepicker-multi-3 .ui-datepicker-group {
++	width: 33.3%;
++}
++.ui-datepicker-multi-4 .ui-datepicker-group {
++	width: 25%;
++}
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
++	border-left-width: 0;
++}
++.ui-datepicker-multi .ui-datepicker-buttonpane {
++	clear: left;
++}
++.ui-datepicker-row-break {
++	clear: both;
++	width: 100%;
++	font-size: 0;
++}
++
++/* RTL support */
++.ui-datepicker-rtl {
++	direction: rtl;
++}
++.ui-datepicker-rtl .ui-datepicker-prev {
++	right: 2px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next {
++	left: 2px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-prev:hover {
++	right: 1px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next:hover {
++	left: 1px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane {
++	clear: right;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button {
++	float: left;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
++.ui-datepicker-rtl .ui-datepicker-group {
++	float: right;
++}
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
++	border-right-width: 0;
++	border-left-width: 1px;
++}
+Index: ../trunk-jpl/src/mobile/web/css/mystyle.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/mystyle.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/mystyle.css	(revision 15487)
+@@ -0,0 +1,48 @@
++#frame {
++	width: 760px;
++	height: 550px;
++	margin: 0px auto;
++} 
++
++#canvasframe {
++	width: 700px;
++	height: 580px;
++	margin: 0px auto;
++	border: double orange 1em;
++	border-image: url("images/border.png") 27 round stretch;
++} 
++
++body
++{
++	background-image: -webkit-gradient(radial, right bottom, 0, right bottom, 1012, color-stop(0, #FFFFFF), color-stop(1, #658fd5));
++	background-image: -moz-linear-gradient(bottom right, #FFFFFF 0%, #658fd5 100%);
++}
++
++a:hover, a:active {
++	color:#000;
++	text-decoration:none;
++}
++
++#sliderTable
++{
++	border: 0;
++	width : 700px;
++}
++
++.imageBorder
++{	
++	box-sizing: border-box;
++	border-radius: 2em 0.5em 2em 0.5em;
++}
++.sliderLabel
++{
++	font:italic bold 12px/30px Georgia,serif;
++}
++
++.borderText
++{
++	box-sizing: border-box;
++	width: 2em;
++	height: 2em;
++	border-radius: 0.5em 2em 0.5em 2em
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.spinner.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.spinner.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.spinner.css	(revision 15487)
+@@ -0,0 +1,65 @@
++/*!
++ * jQuery UI Spinner 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Spinner#theming
++ */
++.ui-spinner {
++	position: relative;
++	display: inline-block;
++	overflow: hidden;
++	padding: 0;
++	vertical-align: middle;
++}
++.ui-spinner-input {
++	border: none;
++	background: none;
++	color: inherit;
++	padding: 0;
++	margin: .2em 0;
++	vertical-align: middle;
++	margin-left: .4em;
++	margin-right: 22px;
++}
++.ui-spinner-button {
++	width: 16px;
++	height: 50%;
++	font-size: .5em;
++	padding: 0;
++	margin: 0;
++	text-align: center;
++	position: absolute;
++	cursor: default;
++	display: block;
++	overflow: hidden;
++	right: 0;
++}
++/* more specificity required here to overide default borders */
++.ui-spinner a.ui-spinner-button {
++	border-top: none;
++	border-bottom: none;
++	border-right: none;
++}
++/* vertical centre icon */
++.ui-spinner .ui-icon {
++	position: absolute;
++	margin-top: -8px;
++	top: 50%;
++	left: 0;
++}
++.ui-spinner-up {
++	top: 0;
++}
++.ui-spinner-down {
++	bottom: 0;
++}
++
++/* TR overrides */
++.ui-spinner .ui-icon-triangle-1-s {
++	/* need to fix icons sprite */
++	background-position: -65px -16px;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery-ui-1.10.3.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery-ui-1.10.3.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery-ui-1.10.3.css	(revision 15487)
+@@ -0,0 +1,1177 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
++* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden {
++	display: none;
++}
++.ui-helper-hidden-accessible {
++	border: 0;
++	clip: rect(0 0 0 0);
++	height: 1px;
++	margin: -1px;
++	overflow: hidden;
++	padding: 0;
++	position: absolute;
++	width: 1px;
++}
++.ui-helper-reset {
++	margin: 0;
++	padding: 0;
++	border: 0;
++	outline: 0;
++	line-height: 1.3;
++	text-decoration: none;
++	font-size: 100%;
++	list-style: none;
++}
++.ui-helper-clearfix:before,
++.ui-helper-clearfix:after {
++	content: "";
++	display: table;
++	border-collapse: collapse;
++}
++.ui-helper-clearfix:after {
++	clear: both;
++}
++.ui-helper-clearfix {
++	min-height: 0; /* support: IE7 */
++}
++.ui-helper-zfix {
++	width: 100%;
++	height: 100%;
++	top: 0;
++	left: 0;
++	position: absolute;
++	opacity: 0;
++	filter:Alpha(Opacity=0);
++}
++
++.ui-front {
++	z-index: 100;
++}
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled {
++	cursor: default !important;
++}
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	display: block;
++	text-indent: -99999px;
++	overflow: hidden;
++	background-repeat: no-repeat;
++}
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay {
++	position: fixed;
++	top: 0;
++	left: 0;
++	width: 100%;
++	height: 100%;
++}
++.ui-resizable {
++	position: relative;
++}
++.ui-resizable-handle {
++	position: absolute;
++	font-size: 0.1px;
++	display: block;
++}
++.ui-resizable-disabled .ui-resizable-handle,
++.ui-resizable-autohide .ui-resizable-handle {
++	display: none;
++}
++.ui-resizable-n {
++	cursor: n-resize;
++	height: 7px;
++	width: 100%;
++	top: -5px;
++	left: 0;
++}
++.ui-resizable-s {
++	cursor: s-resize;
++	height: 7px;
++	width: 100%;
++	bottom: -5px;
++	left: 0;
++}
++.ui-resizable-e {
++	cursor: e-resize;
++	width: 7px;
++	right: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-w {
++	cursor: w-resize;
++	width: 7px;
++	left: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-se {
++	cursor: se-resize;
++	width: 12px;
++	height: 12px;
++	right: 1px;
++	bottom: 1px;
++}
++.ui-resizable-sw {
++	cursor: sw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	bottom: -5px;
++}
++.ui-resizable-nw {
++	cursor: nw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	top: -5px;
++}
++.ui-resizable-ne {
++	cursor: ne-resize;
++	width: 9px;
++	height: 9px;
++	right: -5px;
++	top: -5px;
++}
++.ui-selectable-helper {
++	position: absolute;
++	z-index: 100;
++	border: 1px dotted black;
++}
++.ui-accordion .ui-accordion-header {
++	display: block;
++	cursor: pointer;
++	position: relative;
++	margin-top: 2px;
++	padding: .5em .5em .5em .7em;
++	min-height: 0; /* support: IE7 */
++}
++.ui-accordion .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-noicons {
++	padding-left: .7em;
++}
++.ui-accordion .ui-accordion-icons .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
++	position: absolute;
++	left: .5em;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-accordion .ui-accordion-content {
++	padding: 1em 2.2em;
++	border-top: 0;
++	overflow: auto;
++}
++.ui-autocomplete {
++	position: absolute;
++	top: 0;
++	left: 0;
++	cursor: default;
++}
++.ui-button {
++	display: inline-block;
++	position: relative;
++	padding: 0;
++	line-height: normal;
++	margin-right: .1em;
++	cursor: pointer;
++	vertical-align: middle;
++	text-align: center;
++	overflow: visible; /* removes extra width in IE */
++}
++.ui-button,
++.ui-button:link,
++.ui-button:visited,
++.ui-button:hover,
++.ui-button:active {
++	text-decoration: none;
++}
++/* to make room for the icon, a width needs to be set here */
++.ui-button-icon-only {
++	width: 2.2em;
++}
++/* button elements seem to need a little more width */
++button.ui-button-icon-only {
++	width: 2.4em;
++}
++.ui-button-icons-only {
++	width: 3.4em;
++}
++button.ui-button-icons-only {
++	width: 3.7em;
++}
++
++/* button text element */
++.ui-button .ui-button-text {
++	display: block;
++	line-height: normal;
++}
++.ui-button-text-only .ui-button-text {
++	padding: .4em 1em;
++}
++.ui-button-icon-only .ui-button-text,
++.ui-button-icons-only .ui-button-text {
++	padding: .4em;
++	text-indent: -9999999px;
++}
++.ui-button-text-icon-primary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 1em .4em 2.1em;
++}
++.ui-button-text-icon-secondary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 2.1em .4em 1em;
++}
++.ui-button-text-icons .ui-button-text {
++	padding-left: 2.1em;
++	padding-right: 2.1em;
++}
++/* no icon support for input elements, provide padding by default */
++input.ui-button {
++	padding: .4em 1em;
++}
++
++/* button icon element(s) */
++.ui-button-icon-only .ui-icon,
++.ui-button-text-icon-primary .ui-icon,
++.ui-button-text-icon-secondary .ui-icon,
++.ui-button-text-icons .ui-icon,
++.ui-button-icons-only .ui-icon {
++	position: absolute;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-button-icon-only .ui-icon {
++	left: 50%;
++	margin-left: -8px;
++}
++.ui-button-text-icon-primary .ui-button-icon-primary,
++.ui-button-text-icons .ui-button-icon-primary,
++.ui-button-icons-only .ui-button-icon-primary {
++	left: .5em;
++}
++.ui-button-text-icon-secondary .ui-button-icon-secondary,
++.ui-button-text-icons .ui-button-icon-secondary,
++.ui-button-icons-only .ui-button-icon-secondary {
++	right: .5em;
++}
++
++/* button sets */
++.ui-buttonset {
++	margin-right: 7px;
++}
++.ui-buttonset .ui-button {
++	margin-left: 0;
++	margin-right: -.3em;
++}
++
++/* workarounds */
++/* reset extra padding in Firefox, see h5bp.com/l */
++input.ui-button::-moz-focus-inner,
++button.ui-button::-moz-focus-inner {
++	border: 0;
++	padding: 0;
++}
++.ui-datepicker {
++	width: 17em;
++	padding: .2em .2em 0;
++	display: none;
++}
++.ui-datepicker .ui-datepicker-header {
++	position: relative;
++	padding: .2em 0;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-next {
++	position: absolute;
++	top: 2px;
++	width: 1.8em;
++	height: 1.8em;
++}
++.ui-datepicker .ui-datepicker-prev-hover,
++.ui-datepicker .ui-datepicker-next-hover {
++	top: 1px;
++}
++.ui-datepicker .ui-datepicker-prev {
++	left: 2px;
++}
++.ui-datepicker .ui-datepicker-next {
++	right: 2px;
++}
++.ui-datepicker .ui-datepicker-prev-hover {
++	left: 1px;
++}
++.ui-datepicker .ui-datepicker-next-hover {
++	right: 1px;
++}
++.ui-datepicker .ui-datepicker-prev span,
++.ui-datepicker .ui-datepicker-next span {
++	display: block;
++	position: absolute;
++	left: 50%;
++	margin-left: -8px;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-datepicker .ui-datepicker-title {
++	margin: 0 2.3em;
++	line-height: 1.8em;
++	text-align: center;
++}
++.ui-datepicker .ui-datepicker-title select {
++	font-size: 1em;
++	margin: 1px 0;
++}
++.ui-datepicker select.ui-datepicker-month-year {
++	width: 100%;
++}
++.ui-datepicker select.ui-datepicker-month,
++.ui-datepicker select.ui-datepicker-year {
++	width: 49%;
++}
++.ui-datepicker table {
++	width: 100%;
++	font-size: .9em;
++	border-collapse: collapse;
++	margin: 0 0 .4em;
++}
++.ui-datepicker th {
++	padding: .7em .3em;
++	text-align: center;
++	font-weight: bold;
++	border: 0;
++}
++.ui-datepicker td {
++	border: 0;
++	padding: 1px;
++}
++.ui-datepicker td span,
++.ui-datepicker td a {
++	display: block;
++	padding: .2em;
++	text-align: right;
++	text-decoration: none;
++}
++.ui-datepicker .ui-datepicker-buttonpane {
++	background-image: none;
++	margin: .7em 0 0 0;
++	padding: 0 .2em;
++	border-left: 0;
++	border-right: 0;
++	border-bottom: 0;
++}
++.ui-datepicker .ui-datepicker-buttonpane button {
++	float: right;
++	margin: .5em .2em .4em;
++	cursor: pointer;
++	padding: .2em .6em .3em .6em;
++	width: auto;
++	overflow: visible;
++}
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
++	float: left;
++}
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi {
++	width: auto;
++}
++.ui-datepicker-multi .ui-datepicker-group {
++	float: left;
++}
++.ui-datepicker-multi .ui-datepicker-group table {
++	width: 95%;
++	margin: 0 auto .4em;
++}
++.ui-datepicker-multi-2 .ui-datepicker-group {
++	width: 50%;
++}
++.ui-datepicker-multi-3 .ui-datepicker-group {
++	width: 33.3%;
++}
++.ui-datepicker-multi-4 .ui-datepicker-group {
++	width: 25%;
++}
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
++	border-left-width: 0;
++}
++.ui-datepicker-multi .ui-datepicker-buttonpane {
++	clear: left;
++}
++.ui-datepicker-row-break {
++	clear: both;
++	width: 100%;
++	font-size: 0;
++}
++
++/* RTL support */
++.ui-datepicker-rtl {
++	direction: rtl;
++}
++.ui-datepicker-rtl .ui-datepicker-prev {
++	right: 2px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next {
++	left: 2px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-prev:hover {
++	right: 1px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next:hover {
++	left: 1px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane {
++	clear: right;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button {
++	float: left;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
++.ui-datepicker-rtl .ui-datepicker-group {
++	float: right;
++}
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
++	border-right-width: 0;
++	border-left-width: 1px;
++}
++.ui-dialog {
++	position: absolute;
++	top: 0;
++	left: 0;
++	padding: .2em;
++	outline: 0;
++}
++.ui-dialog .ui-dialog-titlebar {
++	padding: .4em 1em;
++	position: relative;
++}
++.ui-dialog .ui-dialog-title {
++	float: left;
++	margin: .1em 0;
++	white-space: nowrap;
++	width: 90%;
++	overflow: hidden;
++	text-overflow: ellipsis;
++}
++.ui-dialog .ui-dialog-titlebar-close {
++	position: absolute;
++	right: .3em;
++	top: 50%;
++	width: 21px;
++	margin: -10px 0 0 0;
++	padding: 1px;
++	height: 20px;
++}
++.ui-dialog .ui-dialog-content {
++	position: relative;
++	border: 0;
++	padding: .5em 1em;
++	background: none;
++	overflow: auto;
++}
++.ui-dialog .ui-dialog-buttonpane {
++	text-align: left;
++	border-width: 1px 0 0 0;
++	background-image: none;
++	margin-top: .5em;
++	padding: .3em 1em .5em .4em;
++}
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
++	float: right;
++}
++.ui-dialog .ui-dialog-buttonpane button {
++	margin: .5em .4em .5em 0;
++	cursor: pointer;
++}
++.ui-dialog .ui-resizable-se {
++	width: 12px;
++	height: 12px;
++	right: -5px;
++	bottom: -5px;
++	background-position: 16px 16px;
++}
++.ui-draggable .ui-dialog-titlebar {
++	cursor: move;
++}
++.ui-menu {
++	list-style: none;
++	padding: 2px;
++	margin: 0;
++	display: block;
++	outline: none;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++	position: absolute;
++}
++.ui-menu .ui-menu-item {
++	margin: 0;
++	padding: 0;
++	width: 100%;
++	/* support: IE10, see #8844 */
++	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
++}
++.ui-menu .ui-menu-divider {
++	margin: 5px -2px 5px -2px;
++	height: 0;
++	font-size: 0;
++	line-height: 0;
++	border-width: 1px 0 0 0;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration: none;
++	display: block;
++	padding: 2px .4em;
++	line-height: 1.5;
++	min-height: 0; /* support: IE7 */
++	font-weight: normal;
++}
++.ui-menu .ui-menu-item a.ui-state-focus,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++
++.ui-menu .ui-state-disabled {
++	font-weight: normal;
++	margin: .4em 0 .2em;
++	line-height: 1.5;
++}
++.ui-menu .ui-state-disabled a {
++	cursor: default;
++}
++
++/* icon support */
++.ui-menu-icons {
++	position: relative;
++}
++.ui-menu-icons .ui-menu-item a {
++	position: relative;
++	padding-left: 2em;
++}
++
++/* left-aligned */
++.ui-menu .ui-icon {
++	position: absolute;
++	top: .2em;
++	left: .2em;
++}
++
++/* right-aligned */
++.ui-menu .ui-menu-icon {
++	position: static;
++	float: right;
++}
++.ui-progressbar {
++	height: 2em;
++	text-align: left;
++	overflow: hidden;
++}
++.ui-progressbar .ui-progressbar-value {
++	margin: -1px;
++	height: 100%;
++}
++.ui-progressbar .ui-progressbar-overlay {
++	background: url("images/animated-overlay.gif");
++	height: 100%;
++	filter: alpha(opacity=25);
++	opacity: 0.25;
++}
++.ui-progressbar-indeterminate .ui-progressbar-value {
++	background-image: none;
++}
++.ui-slider {
++	position: relative;
++	text-align: left;
++}
++.ui-slider .ui-slider-handle {
++	position: absolute;
++	z-index: 2;
++	width: 1.2em;
++	height: 1.2em;
++	cursor: default;
++}
++.ui-slider .ui-slider-range {
++	position: absolute;
++	z-index: 1;
++	font-size: .7em;
++	display: block;
++	border: 0;
++	background-position: 0 0;
++}
++
++/* For IE8 - See #6727 */
++.ui-slider.ui-state-disabled .ui-slider-handle,
++.ui-slider.ui-state-disabled .ui-slider-range {
++	filter: inherit;
++}
++
++.ui-slider-horizontal {
++	height: .8em;
++}
++.ui-slider-horizontal .ui-slider-handle {
++	top: -.3em;
++	margin-left: -.6em;
++}
++.ui-slider-horizontal .ui-slider-range {
++	top: 0;
++	height: 100%;
++}
++.ui-slider-horizontal .ui-slider-range-min {
++	left: 0;
++}
++.ui-slider-horizontal .ui-slider-range-max {
++	right: 0;
++}
++
++.ui-slider-vertical {
++	width: .8em;
++	height: 100px;
++}
++.ui-slider-vertical .ui-slider-handle {
++	left: -.3em;
++	margin-left: 0;
++	margin-bottom: -.6em;
++}
++.ui-slider-vertical .ui-slider-range {
++	left: 0;
++	width: 100%;
++}
++.ui-slider-vertical .ui-slider-range-min {
++	bottom: 0;
++}
++.ui-slider-vertical .ui-slider-range-max {
++	top: 0;
++}
++.ui-spinner {
++	position: relative;
++	display: inline-block;
++	overflow: hidden;
++	padding: 0;
++	vertical-align: middle;
++}
++.ui-spinner-input {
++	border: none;
++	background: none;
++	color: inherit;
++	padding: 0;
++	margin: .2em 0;
++	vertical-align: middle;
++	margin-left: .4em;
++	margin-right: 22px;
++}
++.ui-spinner-button {
++	width: 16px;
++	height: 50%;
++	font-size: .5em;
++	padding: 0;
++	margin: 0;
++	text-align: center;
++	position: absolute;
++	cursor: default;
++	display: block;
++	overflow: hidden;
++	right: 0;
++}
++/* more specificity required here to overide default borders */
++.ui-spinner a.ui-spinner-button {
++	border-top: none;
++	border-bottom: none;
++	border-right: none;
++}
++/* vertical centre icon */
++.ui-spinner .ui-icon {
++	position: absolute;
++	margin-top: -8px;
++	top: 50%;
++	left: 0;
++}
++.ui-spinner-up {
++	top: 0;
++}
++.ui-spinner-down {
++	bottom: 0;
++}
++
++/* TR overrides */
++.ui-spinner .ui-icon-triangle-1-s {
++	/* need to fix icons sprite */
++	background-position: -65px -16px;
++}
++.ui-tabs {
++	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++	padding: .2em;
++}
++.ui-tabs .ui-tabs-nav {
++	margin: 0;
++	padding: .2em .2em 0;
++}
++.ui-tabs .ui-tabs-nav li {
++	list-style: none;
++	float: left;
++	position: relative;
++	top: 0;
++	margin: 1px .2em 0 0;
++	border-bottom-width: 0;
++	padding: 0;
++	white-space: nowrap;
++}
++.ui-tabs .ui-tabs-nav li a {
++	float: left;
++	padding: .5em 1em;
++	text-decoration: none;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active {
++	margin-bottom: -1px;
++	padding-bottom: 1px;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
++.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
++.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
++	cursor: text;
++}
++.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
++	cursor: pointer;
++}
++.ui-tabs .ui-tabs-panel {
++	display: block;
++	border-width: 0;
++	padding: 1em 1.4em;
++	background: none;
++}
++.ui-tooltip {
++	padding: 8px;
++	position: absolute;
++	z-index: 9999;
++	max-width: 300px;
++	-webkit-box-shadow: 0 0 5px #aaa;
++	box-shadow: 0 0 5px #aaa;
++}
++body .ui-tooltip {
++	border-width: 2px;
++}
++
++/* Component containers
++----------------------------------*/
++.ui-widget {
++	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
++	font-size: 1.1em;
++}
++.ui-widget .ui-widget {
++	font-size: 1em;
++}
++.ui-widget input,
++.ui-widget select,
++.ui-widget textarea,
++.ui-widget button {
++	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
++	font-size: 1em;
++}
++.ui-widget-content {
++	border: 1px solid #dddddd;
++	background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
++	color: #333333;
++}
++.ui-widget-content a {
++	color: #333333;
++}
++.ui-widget-header {
++	border: 1px solid #e78f08;
++	background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
++	color: #ffffff;
++	font-weight: bold;
++}
++.ui-widget-header a {
++	color: #ffffff;
++}
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default,
++.ui-widget-content .ui-state-default,
++.ui-widget-header .ui-state-default {
++	border: 1px solid #cccccc;
++	background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #1c94c4;
++}
++.ui-state-default a,
++.ui-state-default a:link,
++.ui-state-default a:visited {
++	color: #1c94c4;
++	text-decoration: none;
++}
++.ui-state-hover,
++.ui-widget-content .ui-state-hover,
++.ui-widget-header .ui-state-hover,
++.ui-state-focus,
++.ui-widget-content .ui-state-focus,
++.ui-widget-header .ui-state-focus {
++	border: 1px solid #fbcb09;
++	background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #c77405;
++}
++.ui-state-hover a,
++.ui-state-hover a:hover,
++.ui-state-hover a:link,
++.ui-state-hover a:visited {
++	color: #c77405;
++	text-decoration: none;
++}
++.ui-state-active,
++.ui-widget-content .ui-state-active,
++.ui-widget-header .ui-state-active {
++	border: 1px solid #fbd850;
++	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #eb8f00;
++}
++.ui-state-active a,
++.ui-state-active a:link,
++.ui-state-active a:visited {
++	color: #eb8f00;
++	text-decoration: none;
++}
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight,
++.ui-widget-content .ui-state-highlight,
++.ui-widget-header .ui-state-highlight {
++	border: 1px solid #fed22f;
++	background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
++	color: #363636;
++}
++.ui-state-highlight a,
++.ui-widget-content .ui-state-highlight a,
++.ui-widget-header .ui-state-highlight a {
++	color: #363636;
++}
++.ui-state-error,
++.ui-widget-content .ui-state-error,
++.ui-widget-header .ui-state-error {
++	border: 1px solid #cd0a0a;
++	background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
++	color: #ffffff;
++}
++.ui-state-error a,
++.ui-widget-content .ui-state-error a,
++.ui-widget-header .ui-state-error a {
++	color: #ffffff;
++}
++.ui-state-error-text,
++.ui-widget-content .ui-state-error-text,
++.ui-widget-header .ui-state-error-text {
++	color: #ffffff;
++}
++.ui-priority-primary,
++.ui-widget-content .ui-priority-primary,
++.ui-widget-header .ui-priority-primary {
++	font-weight: bold;
++}
++.ui-priority-secondary,
++.ui-widget-content .ui-priority-secondary,
++.ui-widget-header .ui-priority-secondary {
++	opacity: .7;
++	filter:Alpha(Opacity=70);
++	font-weight: normal;
++}
++.ui-state-disabled,
++.ui-widget-content .ui-state-disabled,
++.ui-widget-header .ui-state-disabled {
++	opacity: .35;
++	filter:Alpha(Opacity=35);
++	background-image: none;
++}
++.ui-state-disabled .ui-icon {
++	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
++}
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	width: 16px;
++	height: 16px;
++}
++.ui-icon,
++.ui-widget-content .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png);
++}
++.ui-widget-header .ui-icon {
++	background-image: url(images/ui-icons_ffffff_256x240.png);
++}
++.ui-state-default .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-hover .ui-icon,
++.ui-state-focus .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-active .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-highlight .ui-icon {
++	background-image: url(images/ui-icons_228ef1_256x240.png);
++}
++.ui-state-error .ui-icon,
++.ui-state-error-text .ui-icon {
++	background-image: url(images/ui-icons_ffd27a_256x240.png);
++}
++
++/* positioning */
++.ui-icon-blank { background-position: 16px 16px; }
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-on { background-position: -96px -144px; }
++.ui-icon-radio-off { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-left,
++.ui-corner-tl {
++	border-top-left-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-right,
++.ui-corner-tr {
++	border-top-right-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-left,
++.ui-corner-bl {
++	border-bottom-left-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-right,
++.ui-corner-br {
++	border-bottom-right-radius: 4px;
++}
++
++/* Overlays */
++.ui-widget-overlay {
++	background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
++	opacity: .5;
++	filter: Alpha(Opacity=50);
++}
++.ui-widget-shadow {
++	margin: -5px 0 0 -5px;
++	padding: 5px;
++	background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
++	opacity: .2;
++	filter: Alpha(Opacity=20);
++	border-radius: 5px;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.resizable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.resizable.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.resizable.css	(revision 15487)
+@@ -0,0 +1,78 @@
++/*!
++ * jQuery UI Resizable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Resizable#theming
++ */
++.ui-resizable {
++	position: relative;
++}
++.ui-resizable-handle {
++	position: absolute;
++	font-size: 0.1px;
++	display: block;
++}
++.ui-resizable-disabled .ui-resizable-handle,
++.ui-resizable-autohide .ui-resizable-handle {
++	display: none;
++}
++.ui-resizable-n {
++	cursor: n-resize;
++	height: 7px;
++	width: 100%;
++	top: -5px;
++	left: 0;
++}
++.ui-resizable-s {
++	cursor: s-resize;
++	height: 7px;
++	width: 100%;
++	bottom: -5px;
++	left: 0;
++}
++.ui-resizable-e {
++	cursor: e-resize;
++	width: 7px;
++	right: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-w {
++	cursor: w-resize;
++	width: 7px;
++	left: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-se {
++	cursor: se-resize;
++	width: 12px;
++	height: 12px;
++	right: 1px;
++	bottom: 1px;
++}
++.ui-resizable-sw {
++	cursor: sw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	bottom: -5px;
++}
++.ui-resizable-nw {
++	cursor: nw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	top: -5px;
++}
++.ui-resizable-ne {
++	cursor: ne-resize;
++	width: 9px;
++	height: 9px;
++	right: -5px;
++	top: -5px;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.slider.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.slider.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.slider.css	(revision 15487)
+@@ -0,0 +1,73 @@
++/*!
++ * jQuery UI Slider 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Slider#theming
++ */
++.ui-slider {
++	position: relative;
++	text-align: left;
++}
++.ui-slider .ui-slider-handle {
++	position: absolute;
++	z-index: 2;
++	width: 1.2em;
++	height: 1.2em;
++	cursor: default;
++}
++.ui-slider .ui-slider-range {
++	position: absolute;
++	z-index: 1;
++	font-size: .7em;
++	display: block;
++	border: 0;
++	background-position: 0 0;
++}
++
++/* For IE8 - See #6727 */
++.ui-slider.ui-state-disabled .ui-slider-handle,
++.ui-slider.ui-state-disabled .ui-slider-range {
++	filter: inherit;
++}
++
++.ui-slider-horizontal {
++	height: .8em;
++}
++.ui-slider-horizontal .ui-slider-handle {
++	top: -.3em;
++	margin-left: -.6em;
++}
++.ui-slider-horizontal .ui-slider-range {
++	top: 0;
++	height: 100%;
++}
++.ui-slider-horizontal .ui-slider-range-min {
++	left: 0;
++}
++.ui-slider-horizontal .ui-slider-range-max {
++	right: 0;
++}
++
++.ui-slider-vertical {
++	width: .8em;
++	height: 100px;
++}
++.ui-slider-vertical .ui-slider-handle {
++	left: -.3em;
++	margin-left: 0;
++	margin-bottom: -.6em;
++}
++.ui-slider-vertical .ui-slider-range {
++	left: 0;
++	width: 100%;
++}
++.ui-slider-vertical .ui-slider-range-min {
++	bottom: 0;
++}
++.ui-slider-vertical .ui-slider-range-max {
++	top: 0;
++}
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffffff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffffff_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffffff_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffffff_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffffff_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_75_ffffff_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_75_ffffff_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_75_ffffff_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_65_ffffff_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_cd0a0a_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_cd0a0a_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_cd0a0a_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_0_aaaaaa_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_0_aaaaaa_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_0_aaaaaa_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_222222_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_222222_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_222222_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_222222_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ef8c08_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ef8c08_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_ef8c08_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_ef8c08_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ef8c08_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_2e83ff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_2e83ff_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_2e83ff_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_2e83ff_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_2e83ff_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/border.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/border.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/border.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/border.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/border.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_95_fef1ec_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_95_fef1ec_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_95_fef1ec_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_888888_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_888888_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_888888_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_888888_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_888888_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_dadada_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_dadada_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_dadada_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_55_fbf9ee_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_55_fbf9ee_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_55_fbf9ee_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/animated-overlay.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/animated-overlay.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/animated-overlay.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/animated-overlay.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_e6e6e6_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_e6e6e6_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_e6e6e6_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_fdf5ce_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_fdf5ce_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_fdf5ce_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_10_000000_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_10_000000_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_10_000000_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_20_666666_40x40.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_20_666666_40x40.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_20_666666_40x40.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_228ef1_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_228ef1_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_228ef1_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_228ef1_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_228ef1_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/globe.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/globe.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/globe.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/globe.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/globe.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffd27a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffd27a_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffd27a_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffd27a_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffd27a_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_454545_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_454545_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-icons_454545_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-icons_454545_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-icons_454545_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_f6f6f6_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_f6f6f6_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_f6f6f6_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/css/animate.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/animate.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/animate.css	(revision 15487)
+@@ -0,0 +1,3202 @@
++.animated{-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;}.animated.hinge{-webkit-animation-duration:2s;-moz-animation-duration:2s;-ms-animation-duration:2s;-o-animation-duration:2s;animation-duration:2s;}@-webkit-keyframes flash {
++	0%, 50%, 100% {opacity: 1;}	25%, 75% {opacity: 0;}
++}
++
++@-moz-keyframes flash {
++	0%, 50%, 100% {opacity: 1;}	
++	25%, 75% {opacity: 0;}
++}
++
++@-o-keyframes flash {
++	0%, 50%, 100% {opacity: 1;}	
++	25%, 75% {opacity: 0;}
++}
++
++@keyframes flash {
++	0%, 50%, 100% {opacity: 1;}	
++	25%, 75% {opacity: 0;}
++}
++
++.flash {
++	-webkit-animation-name: flash;
++	-moz-animation-name: flash;
++	-o-animation-name: flash;
++	animation-name: flash;
++}
++@-webkit-keyframes shake {
++	0%, 100% {-webkit-transform: translateX(0);}
++	10%, 30%, 50%, 70%, 90% {-webkit-transform: translateX(-10px);}
++	20%, 40%, 60%, 80% {-webkit-transform: translateX(10px);}
++}
++
++@-moz-keyframes shake {
++	0%, 100% {-moz-transform: translateX(0);}
++	10%, 30%, 50%, 70%, 90% {-moz-transform: translateX(-10px);}
++	20%, 40%, 60%, 80% {-moz-transform: translateX(10px);}
++}
++
++@-o-keyframes shake {
++	0%, 100% {-o-transform: translateX(0);}
++	10%, 30%, 50%, 70%, 90% {-o-transform: translateX(-10px);}
++	20%, 40%, 60%, 80% {-o-transform: translateX(10px);}
++}
++
++@keyframes shake {
++	0%, 100% {transform: translateX(0);}
++	10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);}
++	20%, 40%, 60%, 80% {transform: translateX(10px);}
++}
++
++.shake {
++	-webkit-animation-name: shake;
++	-moz-animation-name: shake;
++	-o-animation-name: shake;
++	animation-name: shake;
++}
++@-webkit-keyframes bounce {
++	0%, 20%, 50%, 80%, 100% {-webkit-transform: translateY(0);}
++	40% {-webkit-transform: translateY(-30px);}
++	60% {-webkit-transform: translateY(-15px);}
++}
++
++@-moz-keyframes bounce {
++	0%, 20%, 50%, 80%, 100% {-moz-transform: translateY(0);}
++	40% {-moz-transform: translateY(-30px);}
++	60% {-moz-transform: translateY(-15px);}
++}
++
++@-o-keyframes bounce {
++	0%, 20%, 50%, 80%, 100% {-o-transform: translateY(0);}
++	40% {-o-transform: translateY(-30px);}
++	60% {-o-transform: translateY(-15px);}
++}
++@keyframes bounce {
++	0%, 20%, 50%, 80%, 100% {transform: translateY(0);}
++	40% {transform: translateY(-30px);}
++	60% {transform: translateY(-15px);}
++}
++
++.bounce {
++	-webkit-animation-name: bounce;
++	-moz-animation-name: bounce;
++	-o-animation-name: bounce;
++	animation-name: bounce;
++}
++@-webkit-keyframes tada {
++	0% {-webkit-transform: scale(1);}	
++	10%, 20% {-webkit-transform: scale(0.9) rotate(-3deg);}
++	30%, 50%, 70%, 90% {-webkit-transform: scale(1.1) rotate(3deg);}
++	40%, 60%, 80% {-webkit-transform: scale(1.1) rotate(-3deg);}
++	100% {-webkit-transform: scale(1) rotate(0);}
++}
++
++@-moz-keyframes tada {
++	0% {-moz-transform: scale(1);}	
++	10%, 20% {-moz-transform: scale(0.9) rotate(-3deg);}
++	30%, 50%, 70%, 90% {-moz-transform: scale(1.1) rotate(3deg);}
++	40%, 60%, 80% {-moz-transform: scale(1.1) rotate(-3deg);}
++	100% {-moz-transform: scale(1) rotate(0);}
++}
++
++@-o-keyframes tada {
++	0% {-o-transform: scale(1);}	
++	10%, 20% {-o-transform: scale(0.9) rotate(-3deg);}
++	30%, 50%, 70%, 90% {-o-transform: scale(1.1) rotate(3deg);}
++	40%, 60%, 80% {-o-transform: scale(1.1) rotate(-3deg);}
++	100% {-o-transform: scale(1) rotate(0);}
++}
++
++@keyframes tada {
++	0% {transform: scale(1);}	
++	10%, 20% {transform: scale(0.9) rotate(-3deg);}
++	30%, 50%, 70%, 90% {transform: scale(1.1) rotate(3deg);}
++	40%, 60%, 80% {transform: scale(1.1) rotate(-3deg);}
++	100% {transform: scale(1) rotate(0);}
++}
++
++.tada {
++	-webkit-animation-name: tada;
++	-moz-animation-name: tada;
++	-o-animation-name: tada;
++	animation-name: tada;
++}
++@-webkit-keyframes swing {
++	20%, 40%, 60%, 80%, 100% { -webkit-transform-origin: top center; }
++	20% { -webkit-transform: rotate(15deg); }	
++	40% { -webkit-transform: rotate(-10deg); }
++	60% { -webkit-transform: rotate(5deg); }	
++	80% { -webkit-transform: rotate(-5deg); }	
++	100% { -webkit-transform: rotate(0deg); }
++}
++
++@-moz-keyframes swing {
++	20% { -moz-transform: rotate(15deg); }	
++	40% { -moz-transform: rotate(-10deg); }
++	60% { -moz-transform: rotate(5deg); }	
++	80% { -moz-transform: rotate(-5deg); }	
++	100% { -moz-transform: rotate(0deg); }
++}
++
++@-o-keyframes swing {
++	20% { -o-transform: rotate(15deg); }	
++	40% { -o-transform: rotate(-10deg); }
++	60% { -o-transform: rotate(5deg); }	
++	80% { -o-transform: rotate(-5deg); }	
++	100% { -o-transform: rotate(0deg); }
++}
++
++@keyframes swing {
++	20% { transform: rotate(15deg); }	
++	40% { transform: rotate(-10deg); }
++	60% { transform: rotate(5deg); }	
++	80% { transform: rotate(-5deg); }	
++	100% { transform: rotate(0deg); }
++}
++
++.swing {
++	-webkit-transform-origin: top center;
++	-moz-transform-origin: top center;
++	-o-transform-origin: top center;
++	transform-origin: top center;
++	-webkit-animation-name: swing;
++	-moz-animation-name: swing;
++	-o-animation-name: swing;
++	animation-name: swing;
++}
++/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
++
++@-webkit-keyframes wobble {
++  0% { -webkit-transform: translateX(0%); }
++  15% { -webkit-transform: translateX(-25%) rotate(-5deg); }
++  30% { -webkit-transform: translateX(20%) rotate(3deg); }
++  45% { -webkit-transform: translateX(-15%) rotate(-3deg); }
++  60% { -webkit-transform: translateX(10%) rotate(2deg); }
++  75% { -webkit-transform: translateX(-5%) rotate(-1deg); }
++  100% { -webkit-transform: translateX(0%); }
++}
++
++@-moz-keyframes wobble {
++  0% { -moz-transform: translateX(0%); }
++  15% { -moz-transform: translateX(-25%) rotate(-5deg); }
++  30% { -moz-transform: translateX(20%) rotate(3deg); }
++  45% { -moz-transform: translateX(-15%) rotate(-3deg); }
++  60% { -moz-transform: translateX(10%) rotate(2deg); }
++  75% { -moz-transform: translateX(-5%) rotate(-1deg); }
++  100% { -moz-transform: translateX(0%); }
++}
++
++@-o-keyframes wobble {
++  0% { -o-transform: translateX(0%); }
++  15% { -o-transform: translateX(-25%) rotate(-5deg); }
++  30% { -o-transform: translateX(20%) rotate(3deg); }
++  45% { -o-transform: translateX(-15%) rotate(-3deg); }
++  60% { -o-transform: translateX(10%) rotate(2deg); }
++  75% { -o-transform: translateX(-5%) rotate(-1deg); }
++  100% { -o-transform: translateX(0%); }
++}
++
++@keyframes wobble {
++  0% { transform: translateX(0%); }
++  15% { transform: translateX(-25%) rotate(-5deg); }
++  30% { transform: translateX(20%) rotate(3deg); }
++  45% { transform: translateX(-15%) rotate(-3deg); }
++  60% { transform: translateX(10%) rotate(2deg); }
++  75% { transform: translateX(-5%) rotate(-1deg); }
++  100% { transform: translateX(0%); }
++}
++
++.wobble {
++	-webkit-animation-name: wobble;
++	-moz-animation-name: wobble;
++	-o-animation-name: wobble;
++	animation-name: wobble;
++}
++@-webkit-keyframes wiggle {
++    0% { -webkit-transform: skewX(9deg); }
++    10% { -webkit-transform: skewX(-8deg); }
++    20% { -webkit-transform: skewX(7deg); }
++    30% { -webkit-transform: skewX(-6deg); }
++    40% { -webkit-transform: skewX(5deg); }
++    50% { -webkit-transform: skewX(-4deg); }
++    60% { -webkit-transform: skewX(3deg); }
++    70% { -webkit-transform: skewX(-2deg); }
++    80% { -webkit-transform: skewX(1deg); }
++    90% { -webkit-transform: skewX(0deg); }
++	100% { -webkit-transform: skewX(0deg); }
++}
++
++@-moz-keyframes wiggle {
++    0% { -moz-transform: skewX(9deg); }
++    10% { -moz-transform: skewX(-8deg); }
++    20% { -moz-transform: skewX(7deg); }
++    30% { -moz-transform: skewX(-6deg); }
++    40% { -moz-transform: skewX(5deg); }
++    50% { -moz-transform: skewX(-4deg); }
++    60% { -moz-transform: skewX(3deg); }
++    70% { -moz-transform: skewX(-2deg); }
++    80% { -moz-transform: skewX(1deg); }
++    90% { -moz-transform: skewX(0deg); }
++	100% { -moz-transform: skewX(0deg); }
++}
++
++@-o-keyframes wiggle {
++    0% { -o-transform: skewX(9deg); }
++    10% { -o-transform: skewX(-8deg); }
++    20% { -o-transform: skewX(7deg); }
++    30% { -o-transform: skewX(-6deg); }
++    40% { -o-transform: skewX(5deg); }
++    50% { -o-transform: skewX(-4deg); }
++    60% { -o-transform: skewX(3deg); }
++    70% { -o-transform: skewX(-2deg); }
++    80% { -o-transform: skewX(1deg); }
++    90% { -o-transform: skewX(0deg); }
++	100% { -o-transform: skewX(0deg); }
++}
++
++@keyframes wiggle {
++    0% { transform: skewX(9deg); }
++    10% { transform: skewX(-8deg); }
++    20% { transform: skewX(7deg); }
++    30% { transform: skewX(-6deg); }
++    40% { transform: skewX(5deg); }
++    50% { transform: skewX(-4deg); }
++    60% { transform: skewX(3deg); }
++    70% { transform: skewX(-2deg); }
++    80% { transform: skewX(1deg); }
++    90% { transform: skewX(0deg); }
++	100% { transform: skewX(0deg); }
++}
++
++.wiggle {
++    -webkit-animation-name: wiggle;
++    -moz-animation-name: wiggle;
++    -o-animation-name: wiggle;
++    animation-name: wiggle;
++
++    -webkit-animation-timing-function: ease-in;
++    -moz-animation-timing-function: ease-in;
++    -o-animation-timing-function: ease-in;
++    animation-timing-function: ease-in;
++}
++/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
++
++@-webkit-keyframes pulse {
++    0% { -webkit-transform: scale(1); }	
++	50% { -webkit-transform: scale(1.1); }
++    100% { -webkit-transform: scale(1); }
++}
++@-moz-keyframes pulse {
++    0% { -moz-transform: scale(1); }	
++	50% { -moz-transform: scale(1.1); }
++    100% { -moz-transform: scale(1); }
++}
++@-o-keyframes pulse {
++    0% { -o-transform: scale(1); }	
++	50% { -o-transform: scale(1.1); }
++    100% { -o-transform: scale(1); }
++}
++@keyframes pulse {
++    0% { transform: scale(1); }	
++	50% { transform: scale(1.1); }
++    100% { transform: scale(1); }
++}
++
++.pulse {
++	-webkit-animation-name: pulse;
++	-moz-animation-name: pulse;
++	-o-animation-name: pulse;
++	animation-name: pulse;
++}
++@-webkit-keyframes flip {
++	0% {
++		-webkit-transform: perspective(400px) rotateY(0);
++		-webkit-animation-timing-function: ease-out;
++	}
++	40% {
++		-webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg);
++		-webkit-animation-timing-function: ease-out;
++	}
++	50% {
++		-webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
++		-webkit-animation-timing-function: ease-in;
++	}
++	80% {
++		-webkit-transform: perspective(400px) rotateY(360deg) scale(.95);
++		-webkit-animation-timing-function: ease-in;
++	}
++	100% {
++		-webkit-transform: perspective(400px) scale(1);
++		-webkit-animation-timing-function: ease-in;
++	}
++}
++@-moz-keyframes flip {
++	0% {
++		-moz-transform: perspective(400px) rotateY(0);
++		-moz-animation-timing-function: ease-out;
++	}
++	40% {
++		-moz-transform: perspective(400px) translateZ(150px) rotateY(170deg);
++		-moz-animation-timing-function: ease-out;
++	}
++	50% {
++		-moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
++		-moz-animation-timing-function: ease-in;
++	}
++	80% {
++		-moz-transform: perspective(400px) rotateY(360deg) scale(.95);
++		-moz-animation-timing-function: ease-in;
++	}
++	100% {
++		-moz-transform: perspective(400px) scale(1);
++		-moz-animation-timing-function: ease-in;
++	}
++}
++@-o-keyframes flip {
++	0% {
++		-o-transform: perspective(400px) rotateY(0);
++		-o-animation-timing-function: ease-out;
++	}
++	40% {
++		-o-transform: perspective(400px) translateZ(150px) rotateY(170deg);
++		-o-animation-timing-function: ease-out;
++	}
++	50% {
++		-o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
++		-o-animation-timing-function: ease-in;
++	}
++	80% {
++		-o-transform: perspective(400px) rotateY(360deg) scale(.95);
++		-o-animation-timing-function: ease-in;
++	}
++	100% {
++		-o-transform: perspective(400px) scale(1);
++		-o-animation-timing-function: ease-in;
++	}
++}
++@keyframes flip {
++	0% {
++		transform: perspective(400px) rotateY(0);
++		animation-timing-function: ease-out;
++	}
++	40% {
++		transform: perspective(400px) translateZ(150px) rotateY(170deg);
++		animation-timing-function: ease-out;
++	}
++	50% {
++		transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
++		animation-timing-function: ease-in;
++	}
++	80% {
++		transform: perspective(400px) rotateY(360deg) scale(.95);
++		animation-timing-function: ease-in;
++	}
++	100% {
++		transform: perspective(400px) scale(1);
++		animation-timing-function: ease-in;
++	}
++}
++
++.flip {
++	-webkit-transform-style: preserve-3d;
++	-moz-transform-style: preserve-3d;
++	-o-transform-style: preserve-3d;
++	transform-style: preserve-3d;
++	-webkit-backface-visibility: visible !important;
++	-webkit-animation-name: flip;
++	-moz-backface-visibility: visible !important;
++	-moz-animation-name: flip;
++	-o-backface-visibility: visible !important;
++	-o-animation-name: flip;
++	backface-visibility: visible !important;
++	animation-name: flip;
++}
++@-webkit-keyframes flipInX {
++    0% {
++        -webkit-transform: perspective(400px) rotateX(90deg);
++        opacity: 0;
++    }
++    
++    40% {
++        -webkit-transform: perspective(400px) rotateX(-10deg);
++    }
++    
++    70% {
++        -webkit-transform: perspective(400px) rotateX(10deg);
++    }
++    
++    100% {
++        -webkit-transform: perspective(400px) rotateX(0deg);
++        opacity: 1;
++    }
++}
++@-moz-keyframes flipInX {
++    0% {
++        -moz-transform: perspective(400px) rotateX(90deg);
++        opacity: 0;
++    }
++    
++    40% {
++        -moz-transform: perspective(400px) rotateX(-10deg);
++    }
++    
++    70% {
++        -moz-transform: perspective(400px) rotateX(10deg);
++    }
++    
++    100% {
++        -moz-transform: perspective(400px) rotateX(0deg);
++        opacity: 1;
++    }
++}
++@-o-keyframes flipInX {
++    0% {
++        -o-transform: perspective(400px) rotateX(90deg);
++        opacity: 0;
++    }
++    
++    40% {
++        -o-transform: perspective(400px) rotateX(-10deg);
++    }
++    
++    70% {
++        -o-transform: perspective(400px) rotateX(10deg);
++    }
++    
++    100% {
++        -o-transform: perspective(400px) rotateX(0deg);
++        opacity: 1;
++    }
++}
++@keyframes flipInX {
++    0% {
++        transform: perspective(400px) rotateX(90deg);
++        opacity: 0;
++    }
++    
++    40% {
++        transform: perspective(400px) rotateX(-10deg);
++    }
++    
++    70% {
++        transform: perspective(400px) rotateX(10deg);
++    }
++    
++    100% {
++        transform: perspective(400px) rotateX(0deg);
++        opacity: 1;
++    }
++}
++
++.flipInX {
++	-webkit-backface-visibility: visible !important;
++	-webkit-animation-name: flipInX;
++	-moz-backface-visibility: visible !important;
++	-moz-animation-name: flipInX;
++	-o-backface-visibility: visible !important;
++	-o-animation-name: flipInX;
++	backface-visibility: visible !important;
++	animation-name: flipInX;
++}
++@-webkit-keyframes flipOutX {
++    0% {
++        -webkit-transform: perspective(400px) rotateX(0deg);
++        opacity: 1;
++    }
++	100% {
++        -webkit-transform: perspective(400px) rotateX(90deg);
++        opacity: 0;
++    }
++}
++
++@-moz-keyframes flipOutX {
++    0% {
++        -moz-transform: perspective(400px) rotateX(0deg);
++        opacity: 1;
++    }
++	100% {
++        -moz-transform: perspective(400px) rotateX(90deg);
++        opacity: 0;
++    }
++}
++
++@-o-keyframes flipOutX {
++    0% {
++        -o-transform: perspective(400px) rotateX(0deg);
++        opacity: 1;
++    }
++	100% {
++        -o-transform: perspective(400px) rotateX(90deg);
++        opacity: 0;
++    }
++}
++
++@keyframes flipOutX {
++    0% {
++        transform: perspective(400px) rotateX(0deg);
++        opacity: 1;
++    }
++	100% {
++        transform: perspective(400px) rotateX(90deg);
++        opacity: 0;
++    }
++}
++
++.flipOutX {
++	-webkit-animation-name: flipOutX;
++	-webkit-backface-visibility: visible !important;
++	-moz-animation-name: flipOutX;
++	-moz-backface-visibility: visible !important;
++	-o-animation-name: flipOutX;
++	-o-backface-visibility: visible !important;
++	animation-name: flipOutX;
++	backface-visibility: visible !important;
++}
++@-webkit-keyframes flipInY {
++    0% {
++        -webkit-transform: perspective(400px) rotateY(90deg);
++        opacity: 0;
++    }
++    
++    40% {
++        -webkit-transform: perspective(400px) rotateY(-10deg);
++    }
++    
++    70% {
++        -webkit-transform: perspective(400px) rotateY(10deg);
++    }
++    
++    100% {
++        -webkit-transform: perspective(400px) rotateY(0deg);
++        opacity: 1;
++    }
++}
++@-moz-keyframes flipInY {
++    0% {
++        -moz-transform: perspective(400px) rotateY(90deg);
++        opacity: 0;
++    }
++    
++    40% {
++        -moz-transform: perspective(400px) rotateY(-10deg);
++    }
++    
++    70% {
++        -moz-transform: perspective(400px) rotateY(10deg);
++    }
++    
++    100% {
++        -moz-transform: perspective(400px) rotateY(0deg);
++        opacity: 1;
++    }
++}
++@-o-keyframes flipInY {
++    0% {
++        -o-transform: perspective(400px) rotateY(90deg);
++        opacity: 0;
++    }
++    
++    40% {
++        -o-transform: perspective(400px) rotateY(-10deg);
++    }
++    
++    70% {
++        -o-transform: perspective(400px) rotateY(10deg);
++    }
++    
++    100% {
++        -o-transform: perspective(400px) rotateY(0deg);
++        opacity: 1;
++    }
++}
++@keyframes flipInY {
++    0% {
++        transform: perspective(400px) rotateY(90deg);
++        opacity: 0;
++    }
++    
++    40% {
++        transform: perspective(400px) rotateY(-10deg);
++    }
++    
++    70% {
++        transform: perspective(400px) rotateY(10deg);
++    }
++    
++    100% {
++        transform: perspective(400px) rotateY(0deg);
++        opacity: 1;
++    }
++}
++
++.flipInY {
++	-webkit-backface-visibility: visible !important;
++	-webkit-animation-name: flipInY;
++	-moz-backface-visibility: visible !important;
++	-moz-animation-name: flipInY;
++	-o-backface-visibility: visible !important;
++	-o-animation-name: flipInY;
++	backface-visibility: visible !important;
++	animation-name: flipInY;
++}
++@-webkit-keyframes flipOutY {
++    0% {
++        -webkit-transform: perspective(400px) rotateY(0deg);
++        opacity: 1;
++    }
++	100% {
++        -webkit-transform: perspective(400px) rotateY(90deg);
++        opacity: 0;
++    }
++}
++@-moz-keyframes flipOutY {
++    0% {
++        -moz-transform: perspective(400px) rotateY(0deg);
++        opacity: 1;
++    }
++	100% {
++        -moz-transform: perspective(400px) rotateY(90deg);
++        opacity: 0;
++    }
++}
++@-o-keyframes flipOutY {
++    0% {
++        -o-transform: perspective(400px) rotateY(0deg);
++        opacity: 1;
++    }
++	100% {
++        -o-transform: perspective(400px) rotateY(90deg);
++        opacity: 0;
++    }
++}
++@keyframes flipOutY {
++    0% {
++        transform: perspective(400px) rotateY(0deg);
++        opacity: 1;
++    }
++	100% {
++        transform: perspective(400px) rotateY(90deg);
++        opacity: 0;
++    }
++}
++
++.flipOutY {
++	-webkit-backface-visibility: visible !important;
++	-webkit-animation-name: flipOutY;
++	-moz-backface-visibility: visible !important;
++	-moz-animation-name: flipOutY;
++	-o-backface-visibility: visible !important;
++	-o-animation-name: flipOutY;
++	backface-visibility: visible !important;
++	animation-name: flipOutY;
++}
++@-webkit-keyframes fadeIn {
++	0% {opacity: 0;}	
++	100% {opacity: 1;}
++}
++
++@-moz-keyframes fadeIn {
++	0% {opacity: 0;}	
++	100% {opacity: 1;}
++}
++
++@-o-keyframes fadeIn {
++	0% {opacity: 0;}	
++	100% {opacity: 1;}
++}
++
++@keyframes fadeIn {
++	0% {opacity: 0;}	
++	100% {opacity: 1;}
++}
++
++.fadeIn {
++	-webkit-animation-name: fadeIn;
++	-moz-animation-name: fadeIn;
++	-o-animation-name: fadeIn;
++	animation-name: fadeIn;
++}
++@-webkit-keyframes fadeInUp {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateY(20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-webkit-transform: translateY(0);
++	}
++}
++
++@-moz-keyframes fadeInUp {
++	0% {
++		opacity: 0;
++		-moz-transform: translateY(20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-moz-transform: translateY(0);
++	}
++}
++
++@-o-keyframes fadeInUp {
++	0% {
++		opacity: 0;
++		-o-transform: translateY(20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-o-transform: translateY(0);
++	}
++}
++
++@keyframes fadeInUp {
++	0% {
++		opacity: 0;
++		transform: translateY(20px);
++	}
++	
++	100% {
++		opacity: 1;
++		transform: translateY(0);
++	}
++}
++
++.fadeInUp {
++	-webkit-animation-name: fadeInUp;
++	-moz-animation-name: fadeInUp;
++	-o-animation-name: fadeInUp;
++	animation-name: fadeInUp;
++}
++@-webkit-keyframes fadeInDown {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateY(-20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-webkit-transform: translateY(0);
++	}
++}
++
++@-moz-keyframes fadeInDown {
++	0% {
++		opacity: 0;
++		-moz-transform: translateY(-20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-moz-transform: translateY(0);
++	}
++}
++
++@-o-keyframes fadeInDown {
++	0% {
++		opacity: 0;
++		-o-transform: translateY(-20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-o-transform: translateY(0);
++	}
++}
++
++@keyframes fadeInDown {
++	0% {
++		opacity: 0;
++		transform: translateY(-20px);
++	}
++	
++	100% {
++		opacity: 1;
++		transform: translateY(0);
++	}
++}
++
++.fadeInDown {
++	-webkit-animation-name: fadeInDown;
++	-moz-animation-name: fadeInDown;
++	-o-animation-name: fadeInDown;
++	animation-name: fadeInDown;
++}
++@-webkit-keyframes fadeInLeft {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateX(-20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-webkit-transform: translateX(0);
++	}
++}
++
++@-moz-keyframes fadeInLeft {
++	0% {
++		opacity: 0;
++		-moz-transform: translateX(-20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-moz-transform: translateX(0);
++	}
++}
++
++@-o-keyframes fadeInLeft {
++	0% {
++		opacity: 0;
++		-o-transform: translateX(-20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-o-transform: translateX(0);
++	}
++}
++
++@keyframes fadeInLeft {
++	0% {
++		opacity: 0;
++		transform: translateX(-20px);
++	}
++	
++	100% {
++		opacity: 1;
++		transform: translateX(0);
++	}
++}
++
++.fadeInLeft {
++	-webkit-animation-name: fadeInLeft;
++	-moz-animation-name: fadeInLeft;
++	-o-animation-name: fadeInLeft;
++	animation-name: fadeInLeft;
++}
++@-webkit-keyframes fadeInRight {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateX(20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-webkit-transform: translateX(0);
++	}
++}
++
++@-moz-keyframes fadeInRight {
++	0% {
++		opacity: 0;
++		-moz-transform: translateX(20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-moz-transform: translateX(0);
++	}
++}
++
++@-o-keyframes fadeInRight {
++	0% {
++		opacity: 0;
++		-o-transform: translateX(20px);
++	}
++	
++	100% {
++		opacity: 1;
++		-o-transform: translateX(0);
++	}
++}
++
++@keyframes fadeInRight {
++	0% {
++		opacity: 0;
++		transform: translateX(20px);
++	}
++	
++	100% {
++		opacity: 1;
++		transform: translateX(0);
++	}
++}
++
++.fadeInRight {
++	-webkit-animation-name: fadeInRight;
++	-moz-animation-name: fadeInRight;
++	-o-animation-name: fadeInRight;
++	animation-name: fadeInRight;
++}
++@-webkit-keyframes fadeInUpBig {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateY(2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-webkit-transform: translateY(0);
++	}
++}
++
++@-moz-keyframes fadeInUpBig {
++	0% {
++		opacity: 0;
++		-moz-transform: translateY(2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-moz-transform: translateY(0);
++	}
++}
++
++@-o-keyframes fadeInUpBig {
++	0% {
++		opacity: 0;
++		-o-transform: translateY(2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-o-transform: translateY(0);
++	}
++}
++
++@keyframes fadeInUpBig {
++	0% {
++		opacity: 0;
++		transform: translateY(2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		transform: translateY(0);
++	}
++}
++
++.fadeInUpBig {
++	-webkit-animation-name: fadeInUpBig;
++	-moz-animation-name: fadeInUpBig;
++	-o-animation-name: fadeInUpBig;
++	animation-name: fadeInUpBig;
++}
++@-webkit-keyframes fadeInDownBig {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateY(-2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-webkit-transform: translateY(0);
++	}
++}
++
++@-moz-keyframes fadeInDownBig {
++	0% {
++		opacity: 0;
++		-moz-transform: translateY(-2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-moz-transform: translateY(0);
++	}
++}
++
++@-o-keyframes fadeInDownBig {
++	0% {
++		opacity: 0;
++		-o-transform: translateY(-2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-o-transform: translateY(0);
++	}
++}
++
++@keyframes fadeInDownBig {
++	0% {
++		opacity: 0;
++		transform: translateY(-2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		transform: translateY(0);
++	}
++}
++
++.fadeInDownBig {
++	-webkit-animation-name: fadeInDownBig;
++	-moz-animation-name: fadeInDownBig;
++	-o-animation-name: fadeInDownBig;
++	animation-name: fadeInDownBig;
++}
++@-webkit-keyframes fadeInLeftBig {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateX(-2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-webkit-transform: translateX(0);
++	}
++}
++@-moz-keyframes fadeInLeftBig {
++	0% {
++		opacity: 0;
++		-moz-transform: translateX(-2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-moz-transform: translateX(0);
++	}
++}
++@-o-keyframes fadeInLeftBig {
++	0% {
++		opacity: 0;
++		-o-transform: translateX(-2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-o-transform: translateX(0);
++	}
++}
++@keyframes fadeInLeftBig {
++	0% {
++		opacity: 0;
++		transform: translateX(-2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		transform: translateX(0);
++	}
++}
++
++.fadeInLeftBig {
++	-webkit-animation-name: fadeInLeftBig;
++	-moz-animation-name: fadeInLeftBig;
++	-o-animation-name: fadeInLeftBig;
++	animation-name: fadeInLeftBig;
++}
++@-webkit-keyframes fadeInRightBig {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateX(2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-webkit-transform: translateX(0);
++	}
++}
++
++@-moz-keyframes fadeInRightBig {
++	0% {
++		opacity: 0;
++		-moz-transform: translateX(2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-moz-transform: translateX(0);
++	}
++}
++
++@-o-keyframes fadeInRightBig {
++	0% {
++		opacity: 0;
++		-o-transform: translateX(2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		-o-transform: translateX(0);
++	}
++}
++
++@keyframes fadeInRightBig {
++	0% {
++		opacity: 0;
++		transform: translateX(2000px);
++	}
++	
++	100% {
++		opacity: 1;
++		transform: translateX(0);
++	}
++}
++
++.fadeInRightBig {
++	-webkit-animation-name: fadeInRightBig;
++	-moz-animation-name: fadeInRightBig;
++	-o-animation-name: fadeInRightBig;
++	animation-name: fadeInRightBig;
++}
++@-webkit-keyframes fadeOut {
++	0% {opacity: 1;}
++	100% {opacity: 0;}
++}
++
++@-moz-keyframes fadeOut {
++	0% {opacity: 1;}
++	100% {opacity: 0;}
++}
++
++@-o-keyframes fadeOut {
++	0% {opacity: 1;}
++	100% {opacity: 0;}
++}
++
++@keyframes fadeOut {
++	0% {opacity: 1;}
++	100% {opacity: 0;}
++}
++
++.fadeOut {
++	-webkit-animation-name: fadeOut;
++	-moz-animation-name: fadeOut;
++	-o-animation-name: fadeOut;
++	animation-name: fadeOut;
++}
++@-webkit-keyframes fadeOutUp {
++	0% {
++		opacity: 1;
++		-webkit-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateY(-20px);
++	}
++}
++@-moz-keyframes fadeOutUp {
++	0% {
++		opacity: 1;
++		-moz-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateY(-20px);
++	}
++}
++@-o-keyframes fadeOutUp {
++	0% {
++		opacity: 1;
++		-o-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateY(-20px);
++	}
++}
++@keyframes fadeOutUp {
++	0% {
++		opacity: 1;
++		transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateY(-20px);
++	}
++}
++
++.fadeOutUp {
++	-webkit-animation-name: fadeOutUp;
++	-moz-animation-name: fadeOutUp;
++	-o-animation-name: fadeOutUp;
++	animation-name: fadeOutUp;
++}
++@-webkit-keyframes fadeOutDown {
++	0% {
++		opacity: 1;
++		-webkit-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateY(20px);
++	}
++}
++
++@-moz-keyframes fadeOutDown {
++	0% {
++		opacity: 1;
++		-moz-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateY(20px);
++	}
++}
++
++@-o-keyframes fadeOutDown {
++	0% {
++		opacity: 1;
++		-o-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateY(20px);
++	}
++}
++
++@keyframes fadeOutDown {
++	0% {
++		opacity: 1;
++		transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateY(20px);
++	}
++}
++
++.fadeOutDown {
++	-webkit-animation-name: fadeOutDown;
++	-moz-animation-name: fadeOutDown;
++	-o-animation-name: fadeOutDown;
++	animation-name: fadeOutDown;
++}
++@-webkit-keyframes fadeOutLeft {
++	0% {
++		opacity: 1;
++		-webkit-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateX(-20px);
++	}
++}
++
++@-moz-keyframes fadeOutLeft {
++	0% {
++		opacity: 1;
++		-moz-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateX(-20px);
++	}
++}
++
++@-o-keyframes fadeOutLeft {
++	0% {
++		opacity: 1;
++		-o-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateX(-20px);
++	}
++}
++
++@keyframes fadeOutLeft {
++	0% {
++		opacity: 1;
++		transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateX(-20px);
++	}
++}
++
++.fadeOutLeft {
++	-webkit-animation-name: fadeOutLeft;
++	-moz-animation-name: fadeOutLeft;
++	-o-animation-name: fadeOutLeft;
++	animation-name: fadeOutLeft;
++}
++@-webkit-keyframes fadeOutRight {
++	0% {
++		opacity: 1;
++		-webkit-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateX(20px);
++	}
++}
++
++@-moz-keyframes fadeOutRight {
++	0% {
++		opacity: 1;
++		-moz-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateX(20px);
++	}
++}
++
++@-o-keyframes fadeOutRight {
++	0% {
++		opacity: 1;
++		-o-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateX(20px);
++	}
++}
++
++@keyframes fadeOutRight {
++	0% {
++		opacity: 1;
++		transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateX(20px);
++	}
++}
++
++.fadeOutRight {
++	-webkit-animation-name: fadeOutRight;
++	-moz-animation-name: fadeOutRight;
++	-o-animation-name: fadeOutRight;
++	animation-name: fadeOutRight;
++}
++@-webkit-keyframes fadeOutUpBig {
++	0% {
++		opacity: 1;
++		-webkit-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateY(-2000px);
++	}
++}
++
++@-moz-keyframes fadeOutUpBig {
++	0% {
++		opacity: 1;
++		-moz-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateY(-2000px);
++	}
++}
++
++@-o-keyframes fadeOutUpBig {
++	0% {
++		opacity: 1;
++		-o-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateY(-2000px);
++	}
++}
++
++@keyframes fadeOutUpBig {
++	0% {
++		opacity: 1;
++		transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateY(-2000px);
++	}
++}
++
++.fadeOutUpBig {
++	-webkit-animation-name: fadeOutUpBig;
++	-moz-animation-name: fadeOutUpBig;
++	-o-animation-name: fadeOutUpBig;
++	animation-name: fadeOutUpBig;
++}
++@-webkit-keyframes fadeOutDownBig {
++	0% {
++		opacity: 1;
++		-webkit-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateY(2000px);
++	}
++}
++
++@-moz-keyframes fadeOutDownBig {
++	0% {
++		opacity: 1;
++		-moz-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateY(2000px);
++	}
++}
++
++@-o-keyframes fadeOutDownBig {
++	0% {
++		opacity: 1;
++		-o-transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateY(2000px);
++	}
++}
++
++@keyframes fadeOutDownBig {
++	0% {
++		opacity: 1;
++		transform: translateY(0);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateY(2000px);
++	}
++}
++
++.fadeOutDownBig {
++	-webkit-animation-name: fadeOutDownBig;
++	-moz-animation-name: fadeOutDownBig;
++	-o-animation-name: fadeOutDownBig;
++	animation-name: fadeOutDownBig;
++}
++@-webkit-keyframes fadeOutLeftBig {
++	0% {
++		opacity: 1;
++		-webkit-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateX(-2000px);
++	}
++}
++
++@-moz-keyframes fadeOutLeftBig {
++	0% {
++		opacity: 1;
++		-moz-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateX(-2000px);
++	}
++}
++
++@-o-keyframes fadeOutLeftBig {
++	0% {
++		opacity: 1;
++		-o-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateX(-2000px);
++	}
++}
++
++@keyframes fadeOutLeftBig {
++	0% {
++		opacity: 1;
++		transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateX(-2000px);
++	}
++}
++
++.fadeOutLeftBig {
++	-webkit-animation-name: fadeOutLeftBig;
++	-moz-animation-name: fadeOutLeftBig;
++	-o-animation-name: fadeOutLeftBig;
++	animation-name: fadeOutLeftBig;
++}
++@-webkit-keyframes fadeOutRightBig {
++	0% {
++		opacity: 1;
++		-webkit-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateX(2000px);
++	}
++}
++@-moz-keyframes fadeOutRightBig {
++	0% {
++		opacity: 1;
++		-moz-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateX(2000px);
++	}
++}
++@-o-keyframes fadeOutRightBig {
++	0% {
++		opacity: 1;
++		-o-transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateX(2000px);
++	}
++}
++@keyframes fadeOutRightBig {
++	0% {
++		opacity: 1;
++		transform: translateX(0);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateX(2000px);
++	}
++}
++
++.fadeOutRightBig {
++	-webkit-animation-name: fadeOutRightBig;
++	-moz-animation-name: fadeOutRightBig;
++	-o-animation-name: fadeOutRightBig;
++	animation-name: fadeOutRightBig;
++}
++@-webkit-keyframes bounceIn {
++	0% {
++		opacity: 0;
++		-webkit-transform: scale(.3);
++	}
++	
++	50% {
++		opacity: 1;
++		-webkit-transform: scale(1.05);
++	}
++	
++	70% {
++		-webkit-transform: scale(.9);
++	}
++	
++	100% {
++		-webkit-transform: scale(1);
++	}
++}
++
++@-moz-keyframes bounceIn {
++	0% {
++		opacity: 0;
++		-moz-transform: scale(.3);
++	}
++	
++	50% {
++		opacity: 1;
++		-moz-transform: scale(1.05);
++	}
++	
++	70% {
++		-moz-transform: scale(.9);
++	}
++	
++	100% {
++		-moz-transform: scale(1);
++	}
++}
++
++@-o-keyframes bounceIn {
++	0% {
++		opacity: 0;
++		-o-transform: scale(.3);
++	}
++	
++	50% {
++		opacity: 1;
++		-o-transform: scale(1.05);
++	}
++	
++	70% {
++		-o-transform: scale(.9);
++	}
++	
++	100% {
++		-o-transform: scale(1);
++	}
++}
++
++@keyframes bounceIn {
++	0% {
++		opacity: 0;
++		transform: scale(.3);
++	}
++	
++	50% {
++		opacity: 1;
++		transform: scale(1.05);
++	}
++	
++	70% {
++		transform: scale(.9);
++	}
++	
++	100% {
++		transform: scale(1);
++	}
++}
++
++.bounceIn {
++	-webkit-animation-name: bounceIn;
++	-moz-animation-name: bounceIn;
++	-o-animation-name: bounceIn;
++	animation-name: bounceIn;
++}
++@-webkit-keyframes bounceInUp {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateY(2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-webkit-transform: translateY(-30px);
++	}
++	
++	80% {
++		-webkit-transform: translateY(10px);
++	}
++	
++	100% {
++		-webkit-transform: translateY(0);
++	}
++}
++@-moz-keyframes bounceInUp {
++	0% {
++		opacity: 0;
++		-moz-transform: translateY(2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-moz-transform: translateY(-30px);
++	}
++	
++	80% {
++		-moz-transform: translateY(10px);
++	}
++	
++	100% {
++		-moz-transform: translateY(0);
++	}
++}
++
++@-o-keyframes bounceInUp {
++	0% {
++		opacity: 0;
++		-o-transform: translateY(2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-o-transform: translateY(-30px);
++	}
++	
++	80% {
++		-o-transform: translateY(10px);
++	}
++	
++	100% {
++		-o-transform: translateY(0);
++	}
++}
++
++@keyframes bounceInUp {
++	0% {
++		opacity: 0;
++		transform: translateY(2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		transform: translateY(-30px);
++	}
++	
++	80% {
++		transform: translateY(10px);
++	}
++	
++	100% {
++		transform: translateY(0);
++	}
++}
++
++.bounceInUp {
++	-webkit-animation-name: bounceInUp;
++	-moz-animation-name: bounceInUp;
++	-o-animation-name: bounceInUp;
++	animation-name: bounceInUp;
++}
++@-webkit-keyframes bounceInDown {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateY(-2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-webkit-transform: translateY(30px);
++	}
++	
++	80% {
++		-webkit-transform: translateY(-10px);
++	}
++	
++	100% {
++		-webkit-transform: translateY(0);
++	}
++}
++
++@-moz-keyframes bounceInDown {
++	0% {
++		opacity: 0;
++		-moz-transform: translateY(-2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-moz-transform: translateY(30px);
++	}
++	
++	80% {
++		-moz-transform: translateY(-10px);
++	}
++	
++	100% {
++		-moz-transform: translateY(0);
++	}
++}
++
++@-o-keyframes bounceInDown {
++	0% {
++		opacity: 0;
++		-o-transform: translateY(-2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-o-transform: translateY(30px);
++	}
++	
++	80% {
++		-o-transform: translateY(-10px);
++	}
++	
++	100% {
++		-o-transform: translateY(0);
++	}
++}
++
++@keyframes bounceInDown {
++	0% {
++		opacity: 0;
++		transform: translateY(-2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		transform: translateY(30px);
++	}
++	
++	80% {
++		transform: translateY(-10px);
++	}
++	
++	100% {
++		transform: translateY(0);
++	}
++}
++
++.bounceInDown {
++	-webkit-animation-name: bounceInDown;
++	-moz-animation-name: bounceInDown;
++	-o-animation-name: bounceInDown;
++	animation-name: bounceInDown;
++}
++@-webkit-keyframes bounceInLeft {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateX(-2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-webkit-transform: translateX(30px);
++	}
++	
++	80% {
++		-webkit-transform: translateX(-10px);
++	}
++	
++	100% {
++		-webkit-transform: translateX(0);
++	}
++}
++
++@-moz-keyframes bounceInLeft {
++	0% {
++		opacity: 0;
++		-moz-transform: translateX(-2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-moz-transform: translateX(30px);
++	}
++	
++	80% {
++		-moz-transform: translateX(-10px);
++	}
++	
++	100% {
++		-moz-transform: translateX(0);
++	}
++}
++
++@-o-keyframes bounceInLeft {
++	0% {
++		opacity: 0;
++		-o-transform: translateX(-2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-o-transform: translateX(30px);
++	}
++	
++	80% {
++		-o-transform: translateX(-10px);
++	}
++	
++	100% {
++		-o-transform: translateX(0);
++	}
++}
++
++@keyframes bounceInLeft {
++	0% {
++		opacity: 0;
++		transform: translateX(-2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		transform: translateX(30px);
++	}
++	
++	80% {
++		transform: translateX(-10px);
++	}
++	
++	100% {
++		transform: translateX(0);
++	}
++}
++
++.bounceInLeft {
++	-webkit-animation-name: bounceInLeft;
++	-moz-animation-name: bounceInLeft;
++	-o-animation-name: bounceInLeft;
++	animation-name: bounceInLeft;
++}
++@-webkit-keyframes bounceInRight {
++	0% {
++		opacity: 0;
++		-webkit-transform: translateX(2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-webkit-transform: translateX(-30px);
++	}
++	
++	80% {
++		-webkit-transform: translateX(10px);
++	}
++	
++	100% {
++		-webkit-transform: translateX(0);
++	}
++}
++
++@-moz-keyframes bounceInRight {
++	0% {
++		opacity: 0;
++		-moz-transform: translateX(2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-moz-transform: translateX(-30px);
++	}
++	
++	80% {
++		-moz-transform: translateX(10px);
++	}
++	
++	100% {
++		-moz-transform: translateX(0);
++	}
++}
++
++@-o-keyframes bounceInRight {
++	0% {
++		opacity: 0;
++		-o-transform: translateX(2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		-o-transform: translateX(-30px);
++	}
++	
++	80% {
++		-o-transform: translateX(10px);
++	}
++	
++	100% {
++		-o-transform: translateX(0);
++	}
++}
++
++@keyframes bounceInRight {
++	0% {
++		opacity: 0;
++		transform: translateX(2000px);
++	}
++	
++	60% {
++		opacity: 1;
++		transform: translateX(-30px);
++	}
++	
++	80% {
++		transform: translateX(10px);
++	}
++	
++	100% {
++		transform: translateX(0);
++	}
++}
++
++.bounceInRight {
++	-webkit-animation-name: bounceInRight;
++	-moz-animation-name: bounceInRight;
++	-o-animation-name: bounceInRight;
++	animation-name: bounceInRight;
++}
++@-webkit-keyframes bounceOut {
++	0% {
++		-webkit-transform: scale(1);
++	}
++	
++	25% {
++		-webkit-transform: scale(.95);
++	}
++	
++	50% {
++		opacity: 1;
++		-webkit-transform: scale(1.1);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: scale(.3);
++	}	
++}
++
++@-moz-keyframes bounceOut {
++	0% {
++		-moz-transform: scale(1);
++	}
++	
++	25% {
++		-moz-transform: scale(.95);
++	}
++	
++	50% {
++		opacity: 1;
++		-moz-transform: scale(1.1);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: scale(.3);
++	}	
++}
++
++@-o-keyframes bounceOut {
++	0% {
++		-o-transform: scale(1);
++	}
++	
++	25% {
++		-o-transform: scale(.95);
++	}
++	
++	50% {
++		opacity: 1;
++		-o-transform: scale(1.1);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: scale(.3);
++	}	
++}
++
++@keyframes bounceOut {
++	0% {
++		transform: scale(1);
++	}
++	
++	25% {
++		transform: scale(.95);
++	}
++	
++	50% {
++		opacity: 1;
++		transform: scale(1.1);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: scale(.3);
++	}	
++}
++
++.bounceOut {
++	-webkit-animation-name: bounceOut;
++	-moz-animation-name: bounceOut;
++	-o-animation-name: bounceOut;
++	animation-name: bounceOut;
++}
++@-webkit-keyframes bounceOutUp {
++	0% {
++		-webkit-transform: translateY(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-webkit-transform: translateY(20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateY(-2000px);
++	}
++}
++
++@-moz-keyframes bounceOutUp {
++	0% {
++		-moz-transform: translateY(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-moz-transform: translateY(20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateY(-2000px);
++	}
++}
++
++@-o-keyframes bounceOutUp {
++	0% {
++		-o-transform: translateY(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-o-transform: translateY(20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateY(-2000px);
++	}
++}
++
++@keyframes bounceOutUp {
++	0% {
++		transform: translateY(0);
++	}
++	
++	20% {
++		opacity: 1;
++		transform: translateY(20px);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateY(-2000px);
++	}
++}
++
++.bounceOutUp {
++	-webkit-animation-name: bounceOutUp;
++	-moz-animation-name: bounceOutUp;
++	-o-animation-name: bounceOutUp;
++	animation-name: bounceOutUp;
++}
++@-webkit-keyframes bounceOutDown {
++	0% {
++		-webkit-transform: translateY(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-webkit-transform: translateY(-20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateY(2000px);
++	}
++}
++
++@-moz-keyframes bounceOutDown {
++	0% {
++		-moz-transform: translateY(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-moz-transform: translateY(-20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateY(2000px);
++	}
++}
++
++@-o-keyframes bounceOutDown {
++	0% {
++		-o-transform: translateY(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-o-transform: translateY(-20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateY(2000px);
++	}
++}
++
++@keyframes bounceOutDown {
++	0% {
++		transform: translateY(0);
++	}
++	
++	20% {
++		opacity: 1;
++		transform: translateY(-20px);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateY(2000px);
++	}
++}
++
++.bounceOutDown {
++	-webkit-animation-name: bounceOutDown;
++	-moz-animation-name: bounceOutDown;
++	-o-animation-name: bounceOutDown;
++	animation-name: bounceOutDown;
++}
++@-webkit-keyframes bounceOutLeft {
++	0% {
++		-webkit-transform: translateX(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-webkit-transform: translateX(20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateX(-2000px);
++	}
++}
++
++@-moz-keyframes bounceOutLeft {
++	0% {
++		-moz-transform: translateX(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-moz-transform: translateX(20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateX(-2000px);
++	}
++}
++
++@-o-keyframes bounceOutLeft {
++	0% {
++		-o-transform: translateX(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-o-transform: translateX(20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateX(-2000px);
++	}
++}
++
++@keyframes bounceOutLeft {
++	0% {
++		transform: translateX(0);
++	}
++	
++	20% {
++		opacity: 1;
++		transform: translateX(20px);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateX(-2000px);
++	}
++}
++
++.bounceOutLeft {
++	-webkit-animation-name: bounceOutLeft;
++	-moz-animation-name: bounceOutLeft;
++	-o-animation-name: bounceOutLeft;
++	animation-name: bounceOutLeft;
++}
++@-webkit-keyframes bounceOutRight {
++	0% {
++		-webkit-transform: translateX(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-webkit-transform: translateX(-20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-webkit-transform: translateX(2000px);
++	}
++}
++
++@-moz-keyframes bounceOutRight {
++	0% {
++		-moz-transform: translateX(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-moz-transform: translateX(-20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-moz-transform: translateX(2000px);
++	}
++}
++
++@-o-keyframes bounceOutRight {
++	0% {
++		-o-transform: translateX(0);
++	}
++	
++	20% {
++		opacity: 1;
++		-o-transform: translateX(-20px);
++	}
++	
++	100% {
++		opacity: 0;
++		-o-transform: translateX(2000px);
++	}
++}
++
++@keyframes bounceOutRight {
++	0% {
++		transform: translateX(0);
++	}
++	
++	20% {
++		opacity: 1;
++		transform: translateX(-20px);
++	}
++	
++	100% {
++		opacity: 0;
++		transform: translateX(2000px);
++	}
++}
++
++.bounceOutRight {
++	-webkit-animation-name: bounceOutRight;
++	-moz-animation-name: bounceOutRight;
++	-o-animation-name: bounceOutRight;
++	animation-name: bounceOutRight;
++}
++@-webkit-keyframes rotateIn {
++	0% {
++		-webkit-transform-origin: center center;
++		-webkit-transform: rotate(-200deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-webkit-transform-origin: center center;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++}
++@-moz-keyframes rotateIn {
++	0% {
++		-moz-transform-origin: center center;
++		-moz-transform: rotate(-200deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-moz-transform-origin: center center;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++}
++@-o-keyframes rotateIn {
++	0% {
++		-o-transform-origin: center center;
++		-o-transform: rotate(-200deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-o-transform-origin: center center;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++}
++@keyframes rotateIn {
++	0% {
++		transform-origin: center center;
++		transform: rotate(-200deg);
++		opacity: 0;
++	}
++	
++	100% {
++		transform-origin: center center;
++		transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++.rotateIn {
++	-webkit-animation-name: rotateIn;
++	-moz-animation-name: rotateIn;
++	-o-animation-name: rotateIn;
++	animation-name: rotateIn;
++}
++@-webkit-keyframes rotateInUpLeft {
++	0% {
++		-webkit-transform-origin: left bottom;
++		-webkit-transform: rotate(90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-webkit-transform-origin: left bottom;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@-moz-keyframes rotateInUpLeft {
++	0% {
++		-moz-transform-origin: left bottom;
++		-moz-transform: rotate(90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-moz-transform-origin: left bottom;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@-o-keyframes rotateInUpLeft {
++	0% {
++		-o-transform-origin: left bottom;
++		-o-transform: rotate(90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-o-transform-origin: left bottom;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@keyframes rotateInUpLeft {
++	0% {
++		transform-origin: left bottom;
++		transform: rotate(90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		transform-origin: left bottom;
++		transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++.rotateInUpLeft {
++	-webkit-animation-name: rotateInUpLeft;
++	-moz-animation-name: rotateInUpLeft;
++	-o-animation-name: rotateInUpLeft;
++	animation-name: rotateInUpLeft;
++}
++@-webkit-keyframes rotateInDownLeft {
++	0% {
++		-webkit-transform-origin: left bottom;
++		-webkit-transform: rotate(-90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-webkit-transform-origin: left bottom;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@-moz-keyframes rotateInDownLeft {
++	0% {
++		-moz-transform-origin: left bottom;
++		-moz-transform: rotate(-90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-moz-transform-origin: left bottom;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@-o-keyframes rotateInDownLeft {
++	0% {
++		-o-transform-origin: left bottom;
++		-o-transform: rotate(-90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-o-transform-origin: left bottom;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@keyframes rotateInDownLeft {
++	0% {
++		transform-origin: left bottom;
++		transform: rotate(-90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		transform-origin: left bottom;
++		transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++.rotateInDownLeft {
++	-webkit-animation-name: rotateInDownLeft;
++	-moz-animation-name: rotateInDownLeft;
++	-o-animation-name: rotateInDownLeft;
++	animation-name: rotateInDownLeft;
++}
++@-webkit-keyframes rotateInUpRight {
++	0% {
++		-webkit-transform-origin: right bottom;
++		-webkit-transform: rotate(-90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-webkit-transform-origin: right bottom;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@-moz-keyframes rotateInUpRight {
++	0% {
++		-moz-transform-origin: right bottom;
++		-moz-transform: rotate(-90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-moz-transform-origin: right bottom;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@-o-keyframes rotateInUpRight {
++	0% {
++		-o-transform-origin: right bottom;
++		-o-transform: rotate(-90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-o-transform-origin: right bottom;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@keyframes rotateInUpRight {
++	0% {
++		transform-origin: right bottom;
++		transform: rotate(-90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		transform-origin: right bottom;
++		transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++.rotateInUpRight {
++	-webkit-animation-name: rotateInUpRight;
++	-moz-animation-name: rotateInUpRight;
++	-o-animation-name: rotateInUpRight;
++	animation-name: rotateInUpRight;
++}
++@-webkit-keyframes rotateInDownRight {
++	0% {
++		-webkit-transform-origin: right bottom;
++		-webkit-transform: rotate(90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-webkit-transform-origin: right bottom;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@-moz-keyframes rotateInDownRight {
++	0% {
++		-moz-transform-origin: right bottom;
++		-moz-transform: rotate(90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-moz-transform-origin: right bottom;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@-o-keyframes rotateInDownRight {
++	0% {
++		-o-transform-origin: right bottom;
++		-o-transform: rotate(90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		-o-transform-origin: right bottom;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++@keyframes rotateInDownRight {
++	0% {
++		transform-origin: right bottom;
++		transform: rotate(90deg);
++		opacity: 0;
++	}
++	
++	100% {
++		transform-origin: right bottom;
++		transform: rotate(0);
++		opacity: 1;
++	}
++}
++
++.rotateInDownRight {
++	-webkit-animation-name: rotateInDownRight;
++	-moz-animation-name: rotateInDownRight;
++	-o-animation-name: rotateInDownRight;
++	animation-name: rotateInDownRight;
++}
++@-webkit-keyframes rotateOut {
++	0% {
++		-webkit-transform-origin: center center;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-webkit-transform-origin: center center;
++		-webkit-transform: rotate(200deg);
++		opacity: 0;
++	}
++}
++
++@-moz-keyframes rotateOut {
++	0% {
++		-moz-transform-origin: center center;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-moz-transform-origin: center center;
++		-moz-transform: rotate(200deg);
++		opacity: 0;
++	}
++}
++
++@-o-keyframes rotateOut {
++	0% {
++		-o-transform-origin: center center;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-o-transform-origin: center center;
++		-o-transform: rotate(200deg);
++		opacity: 0;
++	}
++}
++
++@keyframes rotateOut {
++	0% {
++		transform-origin: center center;
++		transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		transform-origin: center center;
++		transform: rotate(200deg);
++		opacity: 0;
++	}
++}
++
++.rotateOut {
++	-webkit-animation-name: rotateOut;
++	-moz-animation-name: rotateOut;
++	-o-animation-name: rotateOut;
++	animation-name: rotateOut;
++}
++@-webkit-keyframes rotateOutUpLeft {
++	0% {
++		-webkit-transform-origin: left bottom;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-webkit-transform-origin: left bottom;
++		-webkit-transform: rotate(-90deg);
++		opacity: 0;
++	}
++}
++
++@-moz-keyframes rotateOutUpLeft {
++	0% {
++		-moz-transform-origin: left bottom;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-moz-transform-origin: left bottom;
++		-moz-transform: rotate(-90deg);
++		opacity: 0;
++	}
++}
++
++@-o-keyframes rotateOutUpLeft {
++	0% {
++		-o-transform-origin: left bottom;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-o-transform-origin: left bottom;
++		-o-transform: rotate(-90deg);
++		opacity: 0;
++	}
++}
++
++@keyframes rotateOutUpLeft {
++	0% {
++		transform-origin: left bottom;
++		transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-transform-origin: left bottom;
++		-transform: rotate(-90deg);
++		opacity: 0;
++	}
++}
++
++.rotateOutUpLeft {
++	-webkit-animation-name: rotateOutUpLeft;
++	-moz-animation-name: rotateOutUpLeft;
++	-o-animation-name: rotateOutUpLeft;
++	animation-name: rotateOutUpLeft;
++}
++@-webkit-keyframes rotateOutDownLeft {
++	0% {
++		-webkit-transform-origin: left bottom;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-webkit-transform-origin: left bottom;
++		-webkit-transform: rotate(90deg);
++		opacity: 0;
++	}
++}
++
++@-moz-keyframes rotateOutDownLeft {
++	0% {
++		-moz-transform-origin: left bottom;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-moz-transform-origin: left bottom;
++		-moz-transform: rotate(90deg);
++		opacity: 0;
++	}
++}
++
++@-o-keyframes rotateOutDownLeft {
++	0% {
++		-o-transform-origin: left bottom;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-o-transform-origin: left bottom;
++		-o-transform: rotate(90deg);
++		opacity: 0;
++	}
++}
++
++@keyframes rotateOutDownLeft {
++	0% {
++		transform-origin: left bottom;
++		transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		transform-origin: left bottom;
++		transform: rotate(90deg);
++		opacity: 0;
++	}
++}
++
++.rotateOutDownLeft {
++	-webkit-animation-name: rotateOutDownLeft;
++	-moz-animation-name: rotateOutDownLeft;
++	-o-animation-name: rotateOutDownLeft;
++	animation-name: rotateOutDownLeft;
++}
++@-webkit-keyframes rotateOutUpRight {
++	0% {
++		-webkit-transform-origin: right bottom;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-webkit-transform-origin: right bottom;
++		-webkit-transform: rotate(90deg);
++		opacity: 0;
++	}
++}
++
++@-moz-keyframes rotateOutUpRight {
++	0% {
++		-moz-transform-origin: right bottom;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-moz-transform-origin: right bottom;
++		-moz-transform: rotate(90deg);
++		opacity: 0;
++	}
++}
++
++@-o-keyframes rotateOutUpRight {
++	0% {
++		-o-transform-origin: right bottom;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-o-transform-origin: right bottom;
++		-o-transform: rotate(90deg);
++		opacity: 0;
++	}
++}
++
++@keyframes rotateOutUpRight {
++	0% {
++		transform-origin: right bottom;
++		transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		transform-origin: right bottom;
++		transform: rotate(90deg);
++		opacity: 0;
++	}
++}
++
++.rotateOutUpRight {
++	-webkit-animation-name: rotateOutUpRight;
++	-moz-animation-name: rotateOutUpRight;
++	-o-animation-name: rotateOutUpRight;
++	animation-name: rotateOutUpRight;
++}
++@-webkit-keyframes rotateOutDownRight {
++	0% {
++		-webkit-transform-origin: right bottom;
++		-webkit-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-webkit-transform-origin: right bottom;
++		-webkit-transform: rotate(-90deg);
++		opacity: 0;
++	}
++}
++
++@-moz-keyframes rotateOutDownRight {
++	0% {
++		-moz-transform-origin: right bottom;
++		-moz-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-moz-transform-origin: right bottom;
++		-moz-transform: rotate(-90deg);
++		opacity: 0;
++	}
++}
++
++@-o-keyframes rotateOutDownRight {
++	0% {
++		-o-transform-origin: right bottom;
++		-o-transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		-o-transform-origin: right bottom;
++		-o-transform: rotate(-90deg);
++		opacity: 0;
++	}
++}
++
++@keyframes rotateOutDownRight {
++	0% {
++		transform-origin: right bottom;
++		transform: rotate(0);
++		opacity: 1;
++	}
++	
++	100% {
++		transform-origin: right bottom;
++		transform: rotate(-90deg);
++		opacity: 0;
++	}
++}
++
++.rotateOutDownRight {
++	-webkit-animation-name: rotateOutDownRight;
++	-moz-animation-name: rotateOutDownRight;
++	-o-animation-name: rotateOutDownRight;
++	animation-name: rotateOutDownRight;
++}
++@-webkit-keyframes lightSpeedIn {
++	0% { -webkit-transform: translateX(100%) skewX(-30deg); opacity: 0; }
++	60% { -webkit-transform: translateX(-20%) skewX(30deg); opacity: 1; }
++	80% { -webkit-transform: translateX(0%) skewX(-15deg); opacity: 1; }
++	100% { -webkit-transform: translateX(0%) skewX(0deg); opacity: 1; }
++}
++
++@-moz-keyframes lightSpeedIn {
++	0% { -moz-transform: translateX(100%) skewX(-30deg); opacity: 0; }
++	60% { -moz-transform: translateX(-20%) skewX(30deg); opacity: 1; }
++	80% { -moz-transform: translateX(0%) skewX(-15deg); opacity: 1; }
++	100% { -moz-transform: translateX(0%) skewX(0deg); opacity: 1; }
++}
++
++@-o-keyframes lightSpeedIn {
++	0% { -o-transform: translateX(100%) skewX(-30deg); opacity: 0; }
++	60% { -o-transform: translateX(-20%) skewX(30deg); opacity: 1; }
++	80% { -o-transform: translateX(0%) skewX(-15deg); opacity: 1; }
++	100% { -o-transform: translateX(0%) skewX(0deg); opacity: 1; }
++}
++
++@keyframes lightSpeedIn {
++	0% { transform: translateX(100%) skewX(-30deg); opacity: 0; }
++	60% { transform: translateX(-20%) skewX(30deg); opacity: 1; }
++	80% { transform: translateX(0%) skewX(-15deg); opacity: 1; }
++	100% { transform: translateX(0%) skewX(0deg); opacity: 1; }
++}
++
++.lightSpeedIn {
++    -webkit-animation-name: lightSpeedIn;
++    -moz-animation-name: lightSpeedIn;
++    -o-animation-name: lightSpeedIn;
++    animation-name: lightSpeedIn;
++
++    -webkit-animation-timing-function: ease-out;
++    -moz-animation-timing-function: ease-out;
++    -o-animation-timing-function: ease-out;
++    animation-timing-function: ease-out;
++}
++@-webkit-keyframes lightSpeedOut {
++    0% { -webkit-transform: translateX(0%) skewX(0deg); opacity: 1; }
++	100% { -webkit-transform: translateX(100%) skewX(-30deg); opacity: 0; }
++}
++
++@-moz-keyframes lightSpeedOut {
++	0% { -moz-transform: translateX(0%) skewX(0deg); opacity: 1; }
++	100% { -moz-transform: translateX(100%) skewX(-30deg); opacity: 0; }
++}
++
++@-o-keyframes lightSpeedOut {
++	0% { -o-transform: translateX(0%) skewX(0deg); opacity: 1; }
++	100% { -o-transform: translateX(100%) skewX(-30deg); opacity: 0; }
++}
++
++@keyframes lightSpeedOut {
++	0% { transform: translateX(0%) skewX(0deg); opacity: 1; }
++	100% { transform: translateX(100%) skewX(-30deg); opacity: 0; }
++}
++
++.lightSpeedOut {
++    -webkit-animation-name: lightSpeedOut;
++    -moz-animation-name: lightSpeedOut;
++    -o-animation-name: lightSpeedOut;
++    animation-name: lightSpeedOut;
++
++    -webkit-animation-timing-function: ease-in;
++    -moz-animation-timing-function: ease-in;
++    -o-animation-timing-function: ease-in;
++    animation-timing-function: ease-in;
++}
++@-webkit-keyframes hinge {
++	0% { -webkit-transform: rotate(0); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }	
++	20%, 60% { -webkit-transform: rotate(80deg); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }	
++	40% { -webkit-transform: rotate(60deg); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }	
++	80% { -webkit-transform: rotate(60deg) translateY(0); opacity: 1; -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }	
++	100% { -webkit-transform: translateY(700px); opacity: 0; }
++}
++
++@-moz-keyframes hinge {
++	0% { -moz-transform: rotate(0); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; }	
++	20%, 60% { -moz-transform: rotate(80deg); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; }	
++	40% { -moz-transform: rotate(60deg); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; }	
++	80% { -moz-transform: rotate(60deg) translateY(0); opacity: 1; -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; }	
++	100% { -moz-transform: translateY(700px); opacity: 0; }
++}
++
++@-o-keyframes hinge {
++	0% { -o-transform: rotate(0); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; }	
++	20%, 60% { -o-transform: rotate(80deg); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; }	
++	40% { -o-transform: rotate(60deg); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; }	
++	80% { -o-transform: rotate(60deg) translateY(0); opacity: 1; -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; }	
++	100% { -o-transform: translateY(700px); opacity: 0; }
++}
++
++@keyframes hinge {
++	0% { transform: rotate(0); transform-origin: top left; animation-timing-function: ease-in-out; }	
++	20%, 60% { transform: rotate(80deg); transform-origin: top left; animation-timing-function: ease-in-out; }	
++	40% { transform: rotate(60deg); transform-origin: top left; animation-timing-function: ease-in-out; }	
++	80% { transform: rotate(60deg) translateY(0); opacity: 1; transform-origin: top left; animation-timing-function: ease-in-out; }	
++	100% { transform: translateY(700px); opacity: 0; }
++}
++
++.hinge {
++	-webkit-animation-name: hinge;
++	-moz-animation-name: hinge;
++	-o-animation-name: hinge;
++	animation-name: hinge;
++}
++/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
++
++@-webkit-keyframes rollIn {
++	0% { opacity: 0; -webkit-transform: translateX(-100%) rotate(-120deg); }
++	100% { opacity: 1; -webkit-transform: translateX(0px) rotate(0deg); }
++}
++
++@-moz-keyframes rollIn {
++	0% { opacity: 0; -moz-transform: translateX(-100%) rotate(-120deg); }
++	100% { opacity: 1; -moz-transform: translateX(0px) rotate(0deg); }
++}
++
++@-o-keyframes rollIn {
++	0% { opacity: 0; -o-transform: translateX(-100%) rotate(-120deg); }
++	100% { opacity: 1; -o-transform: translateX(0px) rotate(0deg); }
++}
++
++@keyframes rollIn {
++	0% { opacity: 0; transform: translateX(-100%) rotate(-120deg); }
++	100% { opacity: 1; transform: translateX(0px) rotate(0deg); }
++}
++
++.rollIn {
++	-webkit-animation-name: rollIn;
++	-moz-animation-name: rollIn;
++	-o-animation-name: rollIn;
++	animation-name: rollIn;
++}
++/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
++
++@-webkit-keyframes rollOut {
++    0% {
++		opacity: 1;
++		-webkit-transform: translateX(0px) rotate(0deg);
++	}
++
++    100% {
++		opacity: 0;
++		-webkit-transform: translateX(100%) rotate(120deg);
++	}
++}
++
++@-moz-keyframes rollOut {
++    0% {
++		opacity: 1;
++		-moz-transform: translateX(0px) rotate(0deg);
++	}
++
++    100% {
++		opacity: 0;
++		-moz-transform: translateX(100%) rotate(120deg);
++	}
++}
++
++@-o-keyframes rollOut {
++    0% {
++		opacity: 1;
++		-o-transform: translateX(0px) rotate(0deg);
++	}
++
++    100% {
++		opacity: 0;
++		-o-transform: translateX(100%) rotate(120deg);
++	}
++}
++
++@keyframes rollOut {
++    0% {
++		opacity: 1;
++		transform: translateX(0px) rotate(0deg);
++	}
++
++    100% {
++		opacity: 0;
++		transform: translateX(100%) rotate(120deg);
++	}
++}
++
++.rollOut {
++	-webkit-animation-name: rollOut;
++	-moz-animation-name: rollOut;
++	-o-animation-name: rollOut;
++	animation-name: rollOut;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.core.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.core.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.core.css	(revision 15487)
+@@ -0,0 +1,93 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden {
++	display: none;
++}
++.ui-helper-hidden-accessible {
++	border: 0;
++	clip: rect(0 0 0 0);
++	height: 1px;
++	margin: -1px;
++	overflow: hidden;
++	padding: 0;
++	position: absolute;
++	width: 1px;
++}
++.ui-helper-reset {
++	margin: 0;
++	padding: 0;
++	border: 0;
++	outline: 0;
++	line-height: 1.3;
++	text-decoration: none;
++	font-size: 100%;
++	list-style: none;
++}
++.ui-helper-clearfix:before,
++.ui-helper-clearfix:after {
++	content: "";
++	display: table;
++	border-collapse: collapse;
++}
++.ui-helper-clearfix:after {
++	clear: both;
++}
++.ui-helper-clearfix {
++	min-height: 0; /* support: IE7 */
++}
++.ui-helper-zfix {
++	width: 100%;
++	height: 100%;
++	top: 0;
++	left: 0;
++	position: absolute;
++	opacity: 0;
++	filter:Alpha(Opacity=0);
++}
++
++.ui-front {
++	z-index: 100;
++}
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled {
++	cursor: default !important;
++}
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	display: block;
++	text-indent: -99999px;
++	overflow: hidden;
++	background-repeat: no-repeat;
++}
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay {
++	position: fixed;
++	top: 0;
++	left: 0;
++	width: 100%;
++	height: 100%;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.progressbar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.progressbar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.progressbar.css	(revision 15487)
+@@ -0,0 +1,28 @@
++/*!
++ * jQuery UI Progressbar 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Progressbar#theming
++ */
++.ui-progressbar {
++	height: 2em;
++	text-align: left;
++	overflow: hidden;
++}
++.ui-progressbar .ui-progressbar-value {
++	margin: -1px;
++	height: 100%;
++}
++.ui-progressbar .ui-progressbar-overlay {
++	background: url("images/animated-overlay.gif");
++	height: 100%;
++	filter: alpha(opacity=25);
++	opacity: 0.25;
++}
++.ui-progressbar-indeterminate .ui-progressbar-value {
++	background-image: none;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.tabs.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.tabs.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.tabs.css	(revision 15487)
+@@ -0,0 +1,52 @@
++/*!
++ * jQuery UI Tabs 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Tabs#theming
++ */
++.ui-tabs {
++	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++	padding: .2em;
++}
++.ui-tabs .ui-tabs-nav {
++	margin: 0;
++	padding: .2em .2em 0;
++}
++.ui-tabs .ui-tabs-nav li {
++	list-style: none;
++	float: left;
++	position: relative;
++	top: 0;
++	margin: 1px .2em 0 0;
++	border-bottom-width: 0;
++	padding: 0;
++	white-space: nowrap;
++}
++.ui-tabs .ui-tabs-nav li a {
++	float: left;
++	padding: .5em 1em;
++	text-decoration: none;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active {
++	margin-bottom: -1px;
++	padding-bottom: 1px;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
++.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
++.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
++	cursor: text;
++}
++.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
++	cursor: pointer;
++}
++.ui-tabs .ui-tabs-panel {
++	display: block;
++	border-width: 0;
++	padding: 1em 1.4em;
++	background: none;
++}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.tooltip.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.tooltip.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.tooltip.css	(revision 15487)
+@@ -0,0 +1,19 @@
++/*!
++ * jQuery UI Tooltip 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ */
++.ui-tooltip {
++	padding: 8px;
++	position: absolute;
++	z-index: 9999;
++	max-width: 300px;
++	-webkit-box-shadow: 0 0 5px #aaa;
++	box-shadow: 0 0 5px #aaa;
++}
++body .ui-tooltip {
++	border-width: 2px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.datepicker.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.datepicker.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.datepicker.js	(revision 15487)
+@@ -0,0 +1,2038 @@
++/*!
++ * jQuery UI Datepicker 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/datepicker/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ */
++(function( $, undefined ) {
++
++$.extend($.ui, { datepicker: { version: "1.10.3" } });
++
++var PROP_NAME = "datepicker",
++	instActive;
++
++/* Date picker manager.
++   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
++   Settings for (groups of) date pickers are maintained in an instance object,
++   allowing multiple different settings on the same page. */
++
++function Datepicker() {
++	this._curInst = null; // The current instance in use
++	this._keyEvent = false; // If the last event was a key event
++	this._disabledInputs = []; // List of date picker inputs that have been disabled
++	this._datepickerShowing = false; // True if the popup picker is showing , false if not
++	this._inDialog = false; // True if showing within a "dialog", false if not
++	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
++	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
++	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
++	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
++	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
++	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
++	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
++	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
++	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
++	this.regional = []; // Available regional settings, indexed by language code
++	this.regional[""] = { // Default regional settings
++		closeText: "Done", // Display text for close link
++		prevText: "Prev", // Display text for previous month link
++		nextText: "Next", // Display text for next month link
++		currentText: "Today", // Display text for current month link
++		monthNames: ["January","February","March","April","May","June",
++			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
++		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
++		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
++		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
++		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
++		weekHeader: "Wk", // Column header for week of the year
++		dateFormat: "mm/dd/yy", // See format options on parseDate
++		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
++		isRTL: false, // True if right-to-left language, false if left-to-right
++		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
++		yearSuffix: "" // Additional text to append to the year in the month headers
++	};
++	this._defaults = { // Global defaults for all the date picker instances
++		showOn: "focus", // "focus" for popup on focus,
++			// "button" for trigger button, or "both" for either
++		showAnim: "fadeIn", // Name of jQuery animation for popup
++		showOptions: {}, // Options for enhanced animations
++		defaultDate: null, // Used when field is blank: actual date,
++			// +/-number for offset from today, null for today
++		appendText: "", // Display text following the input box, e.g. showing the format
++		buttonText: "...", // Text for trigger button
++		buttonImage: "", // URL for trigger button image
++		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
++		hideIfNoPrevNext: false, // True to hide next/previous month links
++			// if not applicable, false to just disable them
++		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
++		gotoCurrent: false, // True if today link goes back to current selection instead
++		changeMonth: false, // True if month can be selected directly, false if only prev/next
++		changeYear: false, // True if year can be selected directly, false if only prev/next
++		yearRange: "c-10:c+10", // Range of years to display in drop-down,
++			// either relative to today's year (-nn:+nn), relative to currently displayed year
++			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
++		showOtherMonths: false, // True to show dates in other months, false to leave blank
++		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
++		showWeek: false, // True to show week of the year, false to not show it
++		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
++			// takes a Date and returns the number of the week for it
++		shortYearCutoff: "+10", // Short year values < this are in the current century,
++			// > this are in the previous century,
++			// string value starting with "+" for current year + value
++		minDate: null, // The earliest selectable date, or null for no limit
++		maxDate: null, // The latest selectable date, or null for no limit
++		duration: "fast", // Duration of display/closure
++		beforeShowDay: null, // Function that takes a date and returns an array with
++			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
++			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
++		beforeShow: null, // Function that takes an input field and
++			// returns a set of custom settings for the date picker
++		onSelect: null, // Define a callback function when a date is selected
++		onChangeMonthYear: null, // Define a callback function when the month or year is changed
++		onClose: null, // Define a callback function when the datepicker is closed
++		numberOfMonths: 1, // Number of months to show at a time
++		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
++		stepMonths: 1, // Number of months to step back/forward
++		stepBigMonths: 12, // Number of months to step back/forward for the big links
++		altField: "", // Selector for an alternate field to store selected dates into
++		altFormat: "", // The date format to use for the alternate field
++		constrainInput: true, // The input is constrained by the current date format
++		showButtonPanel: false, // True to show button panel, false to not show it
++		autoSize: false, // True to size the input for the date format, false to leave as is
++		disabled: false // The initial disabled state
++	};
++	$.extend(this._defaults, this.regional[""]);
++	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
++}
++
++$.extend(Datepicker.prototype, {
++	/* Class name added to elements to indicate already configured with a date picker. */
++	markerClassName: "hasDatepicker",
++
++	//Keep track of the maximum number of rows displayed (see #7043)
++	maxRows: 4,
++
++	// TODO rename to "widget" when switching to widget factory
++	_widgetDatepicker: function() {
++		return this.dpDiv;
++	},
++
++	/* Override the default settings for all instances of the date picker.
++	 * @param  settings  object - the new settings to use as defaults (anonymous object)
++	 * @return the manager object
++	 */
++	setDefaults: function(settings) {
++		extendRemove(this._defaults, settings || {});
++		return this;
++	},
++
++	/* Attach the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
++	 */
++	_attachDatepicker: function(target, settings) {
++		var nodeName, inline, inst;
++		nodeName = target.nodeName.toLowerCase();
++		inline = (nodeName === "div" || nodeName === "span");
++		if (!target.id) {
++			this.uuid += 1;
++			target.id = "dp" + this.uuid;
++		}
++		inst = this._newInst($(target), inline);
++		inst.settings = $.extend({}, settings || {});
++		if (nodeName === "input") {
++			this._connectDatepicker(target, inst);
++		} else if (inline) {
++			this._inlineDatepicker(target, inst);
++		}
++	},
++
++	/* Create a new instance object. */
++	_newInst: function(target, inline) {
++		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
++		return {id: id, input: target, // associated target
++			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
++			drawMonth: 0, drawYear: 0, // month being drawn
++			inline: inline, // is datepicker inline or not
++			dpDiv: (!inline ? this.dpDiv : // presentation div
++			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
++	},
++
++	/* Attach the date picker to an input field. */
++	_connectDatepicker: function(target, inst) {
++		var input = $(target);
++		inst.append = $([]);
++		inst.trigger = $([]);
++		if (input.hasClass(this.markerClassName)) {
++			return;
++		}
++		this._attachments(input, inst);
++		input.addClass(this.markerClassName).keydown(this._doKeyDown).
++			keypress(this._doKeyPress).keyup(this._doKeyUp);
++		this._autoSize(inst);
++		$.data(target, PROP_NAME, inst);
++		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++	},
++
++	/* Make attachments based on settings. */
++	_attachments: function(input, inst) {
++		var showOn, buttonText, buttonImage,
++			appendText = this._get(inst, "appendText"),
++			isRTL = this._get(inst, "isRTL");
++
++		if (inst.append) {
++			inst.append.remove();
++		}
++		if (appendText) {
++			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
++			input[isRTL ? "before" : "after"](inst.append);
++		}
++
++		input.unbind("focus", this._showDatepicker);
++
++		if (inst.trigger) {
++			inst.trigger.remove();
++		}
++
++		showOn = this._get(inst, "showOn");
++		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
++			input.focus(this._showDatepicker);
++		}
++		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
++			buttonText = this._get(inst, "buttonText");
++			buttonImage = this._get(inst, "buttonImage");
++			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
++				$("<img/>").addClass(this._triggerClass).
++					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
++				$("<button type='button'></button>").addClass(this._triggerClass).
++					html(!buttonImage ? buttonText : $("<img/>").attr(
++					{ src:buttonImage, alt:buttonText, title:buttonText })));
++			input[isRTL ? "before" : "after"](inst.trigger);
++			inst.trigger.click(function() {
++				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
++					$.datepicker._hideDatepicker();
++				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
++					$.datepicker._hideDatepicker();
++					$.datepicker._showDatepicker(input[0]);
++				} else {
++					$.datepicker._showDatepicker(input[0]);
++				}
++				return false;
++			});
++		}
++	},
++
++	/* Apply the maximum length for the date format. */
++	_autoSize: function(inst) {
++		if (this._get(inst, "autoSize") && !inst.inline) {
++			var findMax, max, maxI, i,
++				date = new Date(2009, 12 - 1, 20), // Ensure double digits
++				dateFormat = this._get(inst, "dateFormat");
++
++			if (dateFormat.match(/[DM]/)) {
++				findMax = function(names) {
++					max = 0;
++					maxI = 0;
++					for (i = 0; i < names.length; i++) {
++						if (names[i].length > max) {
++							max = names[i].length;
++							maxI = i;
++						}
++					}
++					return maxI;
++				};
++				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
++					"monthNames" : "monthNamesShort"))));
++				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
++					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
++			}
++			inst.input.attr("size", this._formatDate(inst, date).length);
++		}
++	},
++
++	/* Attach an inline date picker to a div. */
++	_inlineDatepicker: function(target, inst) {
++		var divSpan = $(target);
++		if (divSpan.hasClass(this.markerClassName)) {
++			return;
++		}
++		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
++		$.data(target, PROP_NAME, inst);
++		this._setDate(inst, this._getDefaultDate(inst), true);
++		this._updateDatepicker(inst);
++		this._updateAlternate(inst);
++		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
++		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
++		inst.dpDiv.css( "display", "block" );
++	},
++
++	/* Pop-up the date picker in a "dialog" box.
++	 * @param  input element - ignored
++	 * @param  date	string or Date - the initial date to display
++	 * @param  onSelect  function - the function to call when a date is selected
++	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
++	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
++	 *					event - with x/y coordinates or
++	 *					leave empty for default (screen centre)
++	 * @return the manager object
++	 */
++	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
++		var id, browserWidth, browserHeight, scrollX, scrollY,
++			inst = this._dialogInst; // internal instance
++
++		if (!inst) {
++			this.uuid += 1;
++			id = "dp" + this.uuid;
++			this._dialogInput = $("<input type='text' id='" + id +
++				"' style='position: absolute; top: -100px; width: 0px;'/>");
++			this._dialogInput.keydown(this._doKeyDown);
++			$("body").append(this._dialogInput);
++			inst = this._dialogInst = this._newInst(this._dialogInput, false);
++			inst.settings = {};
++			$.data(this._dialogInput[0], PROP_NAME, inst);
++		}
++		extendRemove(inst.settings, settings || {});
++		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
++		this._dialogInput.val(date);
++
++		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
++		if (!this._pos) {
++			browserWidth = document.documentElement.clientWidth;
++			browserHeight = document.documentElement.clientHeight;
++			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
++			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
++			this._pos = // should use actual width/height below
++				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
++		}
++
++		// move input on screen for focus, but hidden behind dialog
++		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
++		inst.settings.onSelect = onSelect;
++		this._inDialog = true;
++		this.dpDiv.addClass(this._dialogClass);
++		this._showDatepicker(this._dialogInput[0]);
++		if ($.blockUI) {
++			$.blockUI(this.dpDiv);
++		}
++		$.data(this._dialogInput[0], PROP_NAME, inst);
++		return this;
++	},
++
++	/* Detach a datepicker from its control.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_destroyDatepicker: function(target) {
++		var nodeName,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		$.removeData(target, PROP_NAME);
++		if (nodeName === "input") {
++			inst.append.remove();
++			inst.trigger.remove();
++			$target.removeClass(this.markerClassName).
++				unbind("focus", this._showDatepicker).
++				unbind("keydown", this._doKeyDown).
++				unbind("keypress", this._doKeyPress).
++				unbind("keyup", this._doKeyUp);
++		} else if (nodeName === "div" || nodeName === "span") {
++			$target.removeClass(this.markerClassName).empty();
++		}
++	},
++
++	/* Enable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_enableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = false;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = false; }).end().
++				filter("img").css({opacity: "1.0", cursor: ""});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().removeClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", false);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++	},
++
++	/* Disable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_disableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = true;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = true; }).end().
++				filter("img").css({opacity: "0.5", cursor: "default"});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().addClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", true);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++		this._disabledInputs[this._disabledInputs.length] = target;
++	},
++
++	/* Is the first field in a jQuery collection disabled as a datepicker?
++	 * @param  target	element - the target input field or division or span
++	 * @return boolean - true if disabled, false if enabled
++	 */
++	_isDisabledDatepicker: function(target) {
++		if (!target) {
++			return false;
++		}
++		for (var i = 0; i < this._disabledInputs.length; i++) {
++			if (this._disabledInputs[i] === target) {
++				return true;
++			}
++		}
++		return false;
++	},
++
++	/* Retrieve the instance data for the target control.
++	 * @param  target  element - the target input field or division or span
++	 * @return  object - the associated instance data
++	 * @throws  error if a jQuery problem getting data
++	 */
++	_getInst: function(target) {
++		try {
++			return $.data(target, PROP_NAME);
++		}
++		catch (err) {
++			throw "Missing instance data for this datepicker";
++		}
++	},
++
++	/* Update or retrieve the settings for a date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 * @param  name	object - the new settings to update or
++	 *				string - the name of the setting to change or retrieve,
++	 *				when retrieving also "all" for all instance settings or
++	 *				"defaults" for all global defaults
++	 * @param  value   any - the new value for the setting
++	 *				(omit if above is an object or to retrieve a value)
++	 */
++	_optionDatepicker: function(target, name, value) {
++		var settings, date, minDate, maxDate,
++			inst = this._getInst(target);
++
++		if (arguments.length === 2 && typeof name === "string") {
++			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
++				(inst ? (name === "all" ? $.extend({}, inst.settings) :
++				this._get(inst, name)) : null));
++		}
++
++		settings = name || {};
++		if (typeof name === "string") {
++			settings = {};
++			settings[name] = value;
++		}
++
++		if (inst) {
++			if (this._curInst === inst) {
++				this._hideDatepicker();
++			}
++
++			date = this._getDateDatepicker(target, true);
++			minDate = this._getMinMaxDate(inst, "min");
++			maxDate = this._getMinMaxDate(inst, "max");
++			extendRemove(inst.settings, settings);
++			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
++			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
++				inst.settings.minDate = this._formatDate(inst, minDate);
++			}
++			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
++				inst.settings.maxDate = this._formatDate(inst, maxDate);
++			}
++			if ( "disabled" in settings ) {
++				if ( settings.disabled ) {
++					this._disableDatepicker(target);
++				} else {
++					this._enableDatepicker(target);
++				}
++			}
++			this._attachments($(target), inst);
++			this._autoSize(inst);
++			this._setDate(inst, date);
++			this._updateAlternate(inst);
++			this._updateDatepicker(inst);
++		}
++	},
++
++	// change method deprecated
++	_changeDatepicker: function(target, name, value) {
++		this._optionDatepicker(target, name, value);
++	},
++
++	/* Redraw the date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 */
++	_refreshDatepicker: function(target) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._updateDatepicker(inst);
++		}
++	},
++
++	/* Set the dates for a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  date	Date - the new date
++	 */
++	_setDateDatepicker: function(target, date) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._setDate(inst, date);
++			this._updateDatepicker(inst);
++			this._updateAlternate(inst);
++		}
++	},
++
++	/* Get the date(s) for the first entry in a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  noDefault boolean - true if no default date is to be used
++	 * @return Date - the current date
++	 */
++	_getDateDatepicker: function(target, noDefault) {
++		var inst = this._getInst(target);
++		if (inst && !inst.inline) {
++			this._setDateFromField(inst, noDefault);
++		}
++		return (inst ? this._getDate(inst) : null);
++	},
++
++	/* Handle keystrokes. */
++	_doKeyDown: function(event) {
++		var onSelect, dateStr, sel,
++			inst = $.datepicker._getInst(event.target),
++			handled = true,
++			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
++
++		inst._keyEvent = true;
++		if ($.datepicker._datepickerShowing) {
++			switch (event.keyCode) {
++				case 9: $.datepicker._hideDatepicker();
++						handled = false;
++						break; // hide on tab out
++				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
++									$.datepicker._currentClass + ")", inst.dpDiv);
++						if (sel[0]) {
++							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
++						}
++
++						onSelect = $.datepicker._get(inst, "onSelect");
++						if (onSelect) {
++							dateStr = $.datepicker._formatDate(inst);
++
++							// trigger custom callback
++							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++						} else {
++							$.datepicker._hideDatepicker();
++						}
++
++						return false; // don't submit the form
++				case 27: $.datepicker._hideDatepicker();
++						break; // hide on escape
++				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							-$.datepicker._get(inst, "stepBigMonths") :
++							-$.datepicker._get(inst, "stepMonths")), "M");
++						break; // previous month/year on page up/+ ctrl
++				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							+$.datepicker._get(inst, "stepBigMonths") :
++							+$.datepicker._get(inst, "stepMonths")), "M");
++						break; // next month/year on page down/+ ctrl
++				case 35: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._clearDate(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // clear on ctrl or command +end
++				case 36: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._gotoToday(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // current on ctrl or command +home
++				case 37: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// -1 day on ctrl or command +left
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								-$.datepicker._get(inst, "stepBigMonths") :
++								-$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +left on Mac
++						break;
++				case 38: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, -7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // -1 week on ctrl or command +up
++				case 39: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// +1 day on ctrl or command +right
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								+$.datepicker._get(inst, "stepBigMonths") :
++								+$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +right
++						break;
++				case 40: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, +7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // +1 week on ctrl or command +down
++				default: handled = false;
++			}
++		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
++			$.datepicker._showDatepicker(this);
++		} else {
++			handled = false;
++		}
++
++		if (handled) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++	},
++
++	/* Filter entered characters - based on date format. */
++	_doKeyPress: function(event) {
++		var chars, chr,
++			inst = $.datepicker._getInst(event.target);
++
++		if ($.datepicker._get(inst, "constrainInput")) {
++			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
++			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
++			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
++		}
++	},
++
++	/* Synchronise manual entry and field/alternate field. */
++	_doKeyUp: function(event) {
++		var date,
++			inst = $.datepicker._getInst(event.target);
++
++		if (inst.input.val() !== inst.lastVal) {
++			try {
++				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++					(inst.input ? inst.input.val() : null),
++					$.datepicker._getFormatConfig(inst));
++
++				if (date) { // only if valid
++					$.datepicker._setDateFromField(inst);
++					$.datepicker._updateAlternate(inst);
++					$.datepicker._updateDatepicker(inst);
++				}
++			}
++			catch (err) {
++			}
++		}
++		return true;
++	},
++
++	/* Pop-up the date picker for a given input field.
++	 * If false returned from beforeShow event handler do not show.
++	 * @param  input  element - the input field attached to the date picker or
++	 *					event - if triggered by focus
++	 */
++	_showDatepicker: function(input) {
++		input = input.target || input;
++		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
++			input = $("input", input.parentNode)[0];
++		}
++
++		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
++			return;
++		}
++
++		var inst, beforeShow, beforeShowSettings, isFixed,
++			offset, showAnim, duration;
++
++		inst = $.datepicker._getInst(input);
++		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
++			$.datepicker._curInst.dpDiv.stop(true, true);
++			if ( inst && $.datepicker._datepickerShowing ) {
++				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
++			}
++		}
++
++		beforeShow = $.datepicker._get(inst, "beforeShow");
++		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
++		if(beforeShowSettings === false){
++			return;
++		}
++		extendRemove(inst.settings, beforeShowSettings);
++
++		inst.lastVal = null;
++		$.datepicker._lastInput = input;
++		$.datepicker._setDateFromField(inst);
++
++		if ($.datepicker._inDialog) { // hide cursor
++			input.value = "";
++		}
++		if (!$.datepicker._pos) { // position below input
++			$.datepicker._pos = $.datepicker._findPos(input);
++			$.datepicker._pos[1] += input.offsetHeight; // add the height
++		}
++
++		isFixed = false;
++		$(input).parents().each(function() {
++			isFixed |= $(this).css("position") === "fixed";
++			return !isFixed;
++		});
++
++		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
++		$.datepicker._pos = null;
++		//to avoid flashes on Firefox
++		inst.dpDiv.empty();
++		// determine sizing offscreen
++		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
++		$.datepicker._updateDatepicker(inst);
++		// fix width for dynamic number of date pickers
++		// and adjust position before showing
++		offset = $.datepicker._checkOffset(inst, offset, isFixed);
++		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
++			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
++			left: offset.left + "px", top: offset.top + "px"});
++
++		if (!inst.inline) {
++			showAnim = $.datepicker._get(inst, "showAnim");
++			duration = $.datepicker._get(inst, "duration");
++			inst.dpDiv.zIndex($(input).zIndex()+1);
++			$.datepicker._datepickerShowing = true;
++
++			if ( $.effects && $.effects.effect[ showAnim ] ) {
++				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
++			} else {
++				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
++			}
++
++			if ( $.datepicker._shouldFocusInput( inst ) ) {
++				inst.input.focus();
++			}
++
++			$.datepicker._curInst = inst;
++		}
++	},
++
++	/* Generate the date picker content. */
++	_updateDatepicker: function(inst) {
++		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
++		instActive = inst; // for delegate hover events
++		inst.dpDiv.empty().append(this._generateHTML(inst));
++		this._attachHandlers(inst);
++		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
++
++		var origyearshtml,
++			numMonths = this._getNumberOfMonths(inst),
++			cols = numMonths[1],
++			width = 17;
++
++		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
++		if (cols > 1) {
++			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
++		}
++		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
++			"Class"]("ui-datepicker-multi");
++		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
++			"Class"]("ui-datepicker-rtl");
++
++		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
++			inst.input.focus();
++		}
++
++		// deffered render of the years select (to avoid flashes on Firefox)
++		if( inst.yearshtml ){
++			origyearshtml = inst.yearshtml;
++			setTimeout(function(){
++				//assure that inst.yearshtml didn't change.
++				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
++					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
++				}
++				origyearshtml = inst.yearshtml = null;
++			}, 0);
++		}
++	},
++
++	// #6694 - don't focus the input if it's already focused
++	// this breaks the change event in IE
++	// Support: IE and jQuery <1.9
++	_shouldFocusInput: function( inst ) {
++		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
++	},
++
++	/* Check positioning to remain on screen. */
++	_checkOffset: function(inst, offset, isFixed) {
++		var dpWidth = inst.dpDiv.outerWidth(),
++			dpHeight = inst.dpDiv.outerHeight(),
++			inputWidth = inst.input ? inst.input.outerWidth() : 0,
++			inputHeight = inst.input ? inst.input.outerHeight() : 0,
++			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
++			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
++
++		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
++		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
++		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
++
++		// now check if datepicker is showing outside window viewport - move to a better place if so.
++		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
++			Math.abs(offset.left + dpWidth - viewWidth) : 0);
++		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
++			Math.abs(dpHeight + inputHeight) : 0);
++
++		return offset;
++	},
++
++	/* Find an object's position on the screen. */
++	_findPos: function(obj) {
++		var position,
++			inst = this._getInst(obj),
++			isRTL = this._get(inst, "isRTL");
++
++		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
++			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
++		}
++
++		position = $(obj).offset();
++		return [position.left, position.top];
++	},
++
++	/* Hide the date picker from view.
++	 * @param  input  element - the input field attached to the date picker
++	 */
++	_hideDatepicker: function(input) {
++		var showAnim, duration, postProcess, onClose,
++			inst = this._curInst;
++
++		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
++			return;
++		}
++
++		if (this._datepickerShowing) {
++			showAnim = this._get(inst, "showAnim");
++			duration = this._get(inst, "duration");
++			postProcess = function() {
++				$.datepicker._tidyDialog(inst);
++			};
++
++			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
++			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
++				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
++			} else {
++				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
++					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
++			}
++
++			if (!showAnim) {
++				postProcess();
++			}
++			this._datepickerShowing = false;
++
++			onClose = this._get(inst, "onClose");
++			if (onClose) {
++				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
++			}
++
++			this._lastInput = null;
++			if (this._inDialog) {
++				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
++				if ($.blockUI) {
++					$.unblockUI();
++					$("body").append(this.dpDiv);
++				}
++			}
++			this._inDialog = false;
++		}
++	},
++
++	/* Tidy up after a dialog display. */
++	_tidyDialog: function(inst) {
++		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
++	},
++
++	/* Close date picker if clicked elsewhere. */
++	_checkExternalClick: function(event) {
++		if (!$.datepicker._curInst) {
++			return;
++		}
++
++		var $target = $(event.target),
++			inst = $.datepicker._getInst($target[0]);
++
++		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
++				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
++				!$target.hasClass($.datepicker.markerClassName) &&
++				!$target.closest("." + $.datepicker._triggerClass).length &&
++				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
++			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
++				$.datepicker._hideDatepicker();
++		}
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustDate: function(id, offset, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		this._adjustInstDate(inst, offset +
++			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
++			period);
++		this._updateDatepicker(inst);
++	},
++
++	/* Action for current link. */
++	_gotoToday: function(id) {
++		var date,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
++			inst.selectedDay = inst.currentDay;
++			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
++			inst.drawYear = inst.selectedYear = inst.currentYear;
++		} else {
++			date = new Date();
++			inst.selectedDay = date.getDate();
++			inst.drawMonth = inst.selectedMonth = date.getMonth();
++			inst.drawYear = inst.selectedYear = date.getFullYear();
++		}
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a new month/year. */
++	_selectMonthYear: function(id, select, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		inst["selected" + (period === "M" ? "Month" : "Year")] =
++		inst["draw" + (period === "M" ? "Month" : "Year")] =
++			parseInt(select.options[select.selectedIndex].value,10);
++
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a day. */
++	_selectDay: function(id, month, year, td) {
++		var inst,
++			target = $(id);
++
++		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++
++		inst = this._getInst(target[0]);
++		inst.selectedDay = inst.currentDay = $("a", td).html();
++		inst.selectedMonth = inst.currentMonth = month;
++		inst.selectedYear = inst.currentYear = year;
++		this._selectDate(id, this._formatDate(inst,
++			inst.currentDay, inst.currentMonth, inst.currentYear));
++	},
++
++	/* Erase the input field and hide the date picker. */
++	_clearDate: function(id) {
++		var target = $(id);
++		this._selectDate(target, "");
++	},
++
++	/* Update the input field with the selected date. */
++	_selectDate: function(id, dateStr) {
++		var onSelect,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
++		if (inst.input) {
++			inst.input.val(dateStr);
++		}
++		this._updateAlternate(inst);
++
++		onSelect = this._get(inst, "onSelect");
++		if (onSelect) {
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
++		} else if (inst.input) {
++			inst.input.trigger("change"); // fire the change event
++		}
++
++		if (inst.inline){
++			this._updateDatepicker(inst);
++		} else {
++			this._hideDatepicker();
++			this._lastInput = inst.input[0];
++			if (typeof(inst.input[0]) !== "object") {
++				inst.input.focus(); // restore focus
++			}
++			this._lastInput = null;
++		}
++	},
++
++	/* Update any alternate field to synchronise with the main field. */
++	_updateAlternate: function(inst) {
++		var altFormat, date, dateStr,
++			altField = this._get(inst, "altField");
++
++		if (altField) { // update alternate field too
++			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
++			date = this._getDate(inst);
++			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
++			$(altField).each(function() { $(this).val(dateStr); });
++		}
++	},
++
++	/* Set as beforeShowDay function to prevent selection of weekends.
++	 * @param  date  Date - the date to customise
++	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
++	 */
++	noWeekends: function(date) {
++		var day = date.getDay();
++		return [(day > 0 && day < 6), ""];
++	},
++
++	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++	 * @param  date  Date - the date to get the week for
++	 * @return  number - the number of the week within the year that contains this date
++	 */
++	iso8601Week: function(date) {
++		var time,
++			checkDate = new Date(date.getTime());
++
++		// Find Thursday of this week starting on Monday
++		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++
++		time = checkDate.getTime();
++		checkDate.setMonth(0); // Compare with Jan 1
++		checkDate.setDate(1);
++		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++	},
++
++	/* Parse a string value into a date object.
++	 * See formatDate below for the possible formats.
++	 *
++	 * @param  format string - the expected format of the date
++	 * @param  value string - the date in the above format
++	 * @param  settings Object - attributes include:
++	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  Date - the extracted date value or null if value is blank
++	 */
++	parseDate: function (format, value, settings) {
++		if (format == null || value == null) {
++			throw "Invalid arguments";
++		}
++
++		value = (typeof value === "object" ? value.toString() : value + "");
++		if (value === "") {
++			return null;
++		}
++
++		var iFormat, dim, extra,
++			iValue = 0,
++			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
++			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
++				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			year = -1,
++			month = -1,
++			day = -1,
++			doy = -1,
++			literal = false,
++			date,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Extract a number from the string value
++			getNumber = function(match) {
++				var isDoubled = lookAhead(match),
++					size = (match === "@" ? 14 : (match === "!" ? 20 :
++					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
++					digits = new RegExp("^\\d{1," + size + "}"),
++					num = value.substring(iValue).match(digits);
++				if (!num) {
++					throw "Missing number at position " + iValue;
++				}
++				iValue += num[0].length;
++				return parseInt(num[0], 10);
++			},
++			// Extract a name from the string value and convert to an index
++			getName = function(match, shortNames, longNames) {
++				var index = -1,
++					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
++						return [ [k, v] ];
++					}).sort(function (a, b) {
++						return -(a[1].length - b[1].length);
++					});
++
++				$.each(names, function (i, pair) {
++					var name = pair[1];
++					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
++						index = pair[0];
++						iValue += name.length;
++						return false;
++					}
++				});
++				if (index !== -1) {
++					return index + 1;
++				} else {
++					throw "Unknown name at position " + iValue;
++				}
++			},
++			// Confirm that a literal character matches the string value
++			checkLiteral = function() {
++				if (value.charAt(iValue) !== format.charAt(iFormat)) {
++					throw "Unexpected literal at position " + iValue;
++				}
++				iValue++;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					checkLiteral();
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d":
++						day = getNumber("d");
++						break;
++					case "D":
++						getName("D", dayNamesShort, dayNames);
++						break;
++					case "o":
++						doy = getNumber("o");
++						break;
++					case "m":
++						month = getNumber("m");
++						break;
++					case "M":
++						month = getName("M", monthNamesShort, monthNames);
++						break;
++					case "y":
++						year = getNumber("y");
++						break;
++					case "@":
++						date = new Date(getNumber("@"));
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "!":
++						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "'":
++						if (lookAhead("'")){
++							checkLiteral();
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						checkLiteral();
++				}
++			}
++		}
++
++		if (iValue < value.length){
++			extra = value.substr(iValue);
++			if (!/^\s+/.test(extra)) {
++				throw "Extra/unparsed characters found in date: " + extra;
++			}
++		}
++
++		if (year === -1) {
++			year = new Date().getFullYear();
++		} else if (year < 100) {
++			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
++				(year <= shortYearCutoff ? 0 : -100);
++		}
++
++		if (doy > -1) {
++			month = 1;
++			day = doy;
++			do {
++				dim = this._getDaysInMonth(year, month - 1);
++				if (day <= dim) {
++					break;
++				}
++				month++;
++				day -= dim;
++			} while (true);
++		}
++
++		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
++		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
++			throw "Invalid date"; // E.g. 31/02/00
++		}
++		return date;
++	},
++
++	/* Standard date formats. */
++	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
++	COOKIE: "D, dd M yy",
++	ISO_8601: "yy-mm-dd",
++	RFC_822: "D, d M y",
++	RFC_850: "DD, dd-M-y",
++	RFC_1036: "D, d M y",
++	RFC_1123: "D, d M yy",
++	RFC_2822: "D, d M yy",
++	RSS: "D, d M y", // RFC 822
++	TICKS: "!",
++	TIMESTAMP: "@",
++	W3C: "yy-mm-dd", // ISO 8601
++
++	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
++		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
++
++	/* Format a date object into a string value.
++	 * The format can be combinations of the following:
++	 * d  - day of month (no leading zero)
++	 * dd - day of month (two digit)
++	 * o  - day of year (no leading zeros)
++	 * oo - day of year (three digit)
++	 * D  - day name short
++	 * DD - day name long
++	 * m  - month of year (no leading zero)
++	 * mm - month of year (two digit)
++	 * M  - month name short
++	 * MM - month name long
++	 * y  - year (two digit)
++	 * yy - year (four digit)
++	 * @ - Unix timestamp (ms since 01/01/1970)
++	 * ! - Windows ticks (100ns since 01/01/0001)
++	 * "..." - literal text
++	 * '' - single quote
++	 *
++	 * @param  format string - the desired format of the date
++	 * @param  date Date - the date value to format
++	 * @param  settings Object - attributes include:
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  string - the date in the above format
++	 */
++	formatDate: function (format, date, settings) {
++		if (!date) {
++			return "";
++		}
++
++		var iFormat,
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Format a number, with leading zero if necessary
++			formatNumber = function(match, value, len) {
++				var num = "" + value;
++				if (lookAhead(match)) {
++					while (num.length < len) {
++						num = "0" + num;
++					}
++				}
++				return num;
++			},
++			// Format a name, short or long as requested
++			formatName = function(match, value, shortNames, longNames) {
++				return (lookAhead(match) ? longNames[value] : shortNames[value]);
++			},
++			output = "",
++			literal = false;
++
++		if (date) {
++			for (iFormat = 0; iFormat < format.length; iFormat++) {
++				if (literal) {
++					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++						literal = false;
++					} else {
++						output += format.charAt(iFormat);
++					}
++				} else {
++					switch (format.charAt(iFormat)) {
++						case "d":
++							output += formatNumber("d", date.getDate(), 2);
++							break;
++						case "D":
++							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
++							break;
++						case "o":
++							output += formatNumber("o",
++								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
++							break;
++						case "m":
++							output += formatNumber("m", date.getMonth() + 1, 2);
++							break;
++						case "M":
++							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
++							break;
++						case "y":
++							output += (lookAhead("y") ? date.getFullYear() :
++								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
++							break;
++						case "@":
++							output += date.getTime();
++							break;
++						case "!":
++							output += date.getTime() * 10000 + this._ticksTo1970;
++							break;
++						case "'":
++							if (lookAhead("'")) {
++								output += "'";
++							} else {
++								literal = true;
++							}
++							break;
++						default:
++							output += format.charAt(iFormat);
++					}
++				}
++			}
++		}
++		return output;
++	},
++
++	/* Extract all possible characters from the date format. */
++	_possibleChars: function (format) {
++		var iFormat,
++			chars = "",
++			literal = false,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					chars += format.charAt(iFormat);
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d": case "m": case "y": case "@":
++						chars += "0123456789";
++						break;
++					case "D": case "M":
++						return null; // Accept anything
++					case "'":
++						if (lookAhead("'")) {
++							chars += "'";
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						chars += format.charAt(iFormat);
++				}
++			}
++		}
++		return chars;
++	},
++
++	/* Get a setting value, defaulting if necessary. */
++	_get: function(inst, name) {
++		return inst.settings[name] !== undefined ?
++			inst.settings[name] : this._defaults[name];
++	},
++
++	/* Parse existing date and initialise date picker. */
++	_setDateFromField: function(inst, noDefault) {
++		if (inst.input.val() === inst.lastVal) {
++			return;
++		}
++
++		var dateFormat = this._get(inst, "dateFormat"),
++			dates = inst.lastVal = inst.input ? inst.input.val() : null,
++			defaultDate = this._getDefaultDate(inst),
++			date = defaultDate,
++			settings = this._getFormatConfig(inst);
++
++		try {
++			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
++		} catch (event) {
++			dates = (noDefault ? "" : dates);
++		}
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		inst.currentDay = (dates ? date.getDate() : 0);
++		inst.currentMonth = (dates ? date.getMonth() : 0);
++		inst.currentYear = (dates ? date.getFullYear() : 0);
++		this._adjustInstDate(inst);
++	},
++
++	/* Retrieve the default date shown on opening. */
++	_getDefaultDate: function(inst) {
++		return this._restrictMinMax(inst,
++			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
++	},
++
++	/* A date may be specified as an exact value or a relative one. */
++	_determineDate: function(inst, date, defaultDate) {
++		var offsetNumeric = function(offset) {
++				var date = new Date();
++				date.setDate(date.getDate() + offset);
++				return date;
++			},
++			offsetString = function(offset) {
++				try {
++					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++						offset, $.datepicker._getFormatConfig(inst));
++				}
++				catch (e) {
++					// Ignore
++				}
++
++				var date = (offset.toLowerCase().match(/^c/) ?
++					$.datepicker._getDate(inst) : null) || new Date(),
++					year = date.getFullYear(),
++					month = date.getMonth(),
++					day = date.getDate(),
++					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
++					matches = pattern.exec(offset);
++
++				while (matches) {
++					switch (matches[2] || "d") {
++						case "d" : case "D" :
++							day += parseInt(matches[1],10); break;
++						case "w" : case "W" :
++							day += parseInt(matches[1],10) * 7; break;
++						case "m" : case "M" :
++							month += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++						case "y": case "Y" :
++							year += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++					}
++					matches = pattern.exec(offset);
++				}
++				return new Date(year, month, day);
++			},
++			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
++				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
++
++		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
++		if (newDate) {
++			newDate.setHours(0);
++			newDate.setMinutes(0);
++			newDate.setSeconds(0);
++			newDate.setMilliseconds(0);
++		}
++		return this._daylightSavingAdjust(newDate);
++	},
++
++	/* Handle switch to/from daylight saving.
++	 * Hours may be non-zero on daylight saving cut-over:
++	 * > 12 when midnight changeover, but then cannot generate
++	 * midnight datetime, so jump to 1AM, otherwise reset.
++	 * @param  date  (Date) the date to check
++	 * @return  (Date) the corrected date
++	 */
++	_daylightSavingAdjust: function(date) {
++		if (!date) {
++			return null;
++		}
++		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
++		return date;
++	},
++
++	/* Set the date(s) directly. */
++	_setDate: function(inst, date, noChange) {
++		var clear = !date,
++			origMonth = inst.selectedMonth,
++			origYear = inst.selectedYear,
++			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
++
++		inst.selectedDay = inst.currentDay = newDate.getDate();
++		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
++		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
++		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
++			this._notifyChange(inst);
++		}
++		this._adjustInstDate(inst);
++		if (inst.input) {
++			inst.input.val(clear ? "" : this._formatDate(inst));
++		}
++	},
++
++	/* Retrieve the date(s) directly. */
++	_getDate: function(inst) {
++		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
++			this._daylightSavingAdjust(new Date(
++			inst.currentYear, inst.currentMonth, inst.currentDay)));
++			return startDate;
++	},
++
++	/* Attach the onxxx handlers.  These are declared statically so
++	 * they work with static code transformers like Caja.
++	 */
++	_attachHandlers: function(inst) {
++		var stepMonths = this._get(inst, "stepMonths"),
++			id = "#" + inst.id.replace( /\\\\/g, "\\" );
++		inst.dpDiv.find("[data-handler]").map(function () {
++			var handler = {
++				prev: function () {
++					$.datepicker._adjustDate(id, -stepMonths, "M");
++				},
++				next: function () {
++					$.datepicker._adjustDate(id, +stepMonths, "M");
++				},
++				hide: function () {
++					$.datepicker._hideDatepicker();
++				},
++				today: function () {
++					$.datepicker._gotoToday(id);
++				},
++				selectDay: function () {
++					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
++					return false;
++				},
++				selectMonth: function () {
++					$.datepicker._selectMonthYear(id, this, "M");
++					return false;
++				},
++				selectYear: function () {
++					$.datepicker._selectMonthYear(id, this, "Y");
++					return false;
++				}
++			};
++			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
++		});
++	},
++
++	/* Generate the HTML for the current state of the date picker. */
++	_generateHTML: function(inst) {
++		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
++			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
++			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
++			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
++			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
++			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
++			tempDate = new Date(),
++			today = this._daylightSavingAdjust(
++				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
++			isRTL = this._get(inst, "isRTL"),
++			showButtonPanel = this._get(inst, "showButtonPanel"),
++			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
++			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
++			numMonths = this._getNumberOfMonths(inst),
++			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
++			stepMonths = this._get(inst, "stepMonths"),
++			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
++			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
++				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			drawMonth = inst.drawMonth - showCurrentAtPos,
++			drawYear = inst.drawYear;
++
++		if (drawMonth < 0) {
++			drawMonth += 12;
++			drawYear--;
++		}
++		if (maxDate) {
++			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
++				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
++			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
++			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
++				drawMonth--;
++				if (drawMonth < 0) {
++					drawMonth = 11;
++					drawYear--;
++				}
++			}
++		}
++		inst.drawMonth = drawMonth;
++		inst.drawYear = drawYear;
++
++		prevText = this._get(inst, "prevText");
++		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
++			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
++
++		nextText = this._get(inst, "nextText");
++		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
++			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
++
++		currentText = this._get(inst, "currentText");
++		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
++		currentText = (!navigationAsDateFormat ? currentText :
++			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
++
++		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
++			this._get(inst, "closeText") + "</button>" : "");
++
++		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
++			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
++			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
++
++		firstDay = parseInt(this._get(inst, "firstDay"),10);
++		firstDay = (isNaN(firstDay) ? 0 : firstDay);
++
++		showWeek = this._get(inst, "showWeek");
++		dayNames = this._get(inst, "dayNames");
++		dayNamesMin = this._get(inst, "dayNamesMin");
++		monthNames = this._get(inst, "monthNames");
++		monthNamesShort = this._get(inst, "monthNamesShort");
++		beforeShowDay = this._get(inst, "beforeShowDay");
++		showOtherMonths = this._get(inst, "showOtherMonths");
++		selectOtherMonths = this._get(inst, "selectOtherMonths");
++		defaultDate = this._getDefaultDate(inst);
++		html = "";
++		dow;
++		for (row = 0; row < numMonths[0]; row++) {
++			group = "";
++			this.maxRows = 4;
++			for (col = 0; col < numMonths[1]; col++) {
++				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
++				cornerClass = " ui-corner-all";
++				calender = "";
++				if (isMultiMonth) {
++					calender += "<div class='ui-datepicker-group";
++					if (numMonths[1] > 1) {
++						switch (col) {
++							case 0: calender += " ui-datepicker-group-first";
++								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
++							case numMonths[1]-1: calender += " ui-datepicker-group-last";
++								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
++							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
++						}
++					}
++					calender += "'>";
++				}
++				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
++					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
++					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
++					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
++					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
++					"</div><table class='ui-datepicker-calendar'><thead>" +
++					"<tr>";
++				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
++				for (dow = 0; dow < 7; dow++) { // days of the week
++					day = (dow + firstDay) % 7;
++					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
++						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
++				}
++				calender += thead + "</tr></thead><tbody>";
++				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
++				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
++					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
++				}
++				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
++				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
++				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
++				this.maxRows = numRows;
++				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
++				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
++					calender += "<tr>";
++					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
++						this._get(inst, "calculateWeek")(printDate) + "</td>");
++					for (dow = 0; dow < 7; dow++) { // create date picker days
++						daySettings = (beforeShowDay ?
++							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
++						otherMonth = (printDate.getMonth() !== drawMonth);
++						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
++							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
++						tbody += "<td class='" +
++							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
++							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
++							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
++							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
++							// or defaultDate is current printedDate and defaultDate is selectedDate
++							" " + this._dayOverClass : "") + // highlight selected day
++							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
++							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
++							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
++							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
++							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
++							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
++							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
++							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
++							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
++							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
++							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
++							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
++						printDate.setDate(printDate.getDate() + 1);
++						printDate = this._daylightSavingAdjust(printDate);
++					}
++					calender += tbody + "</tr>";
++				}
++				drawMonth++;
++				if (drawMonth > 11) {
++					drawMonth = 0;
++					drawYear++;
++				}
++				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
++							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
++				group += calender;
++			}
++			html += group;
++		}
++		html += buttonPanel;
++		inst._keyEvent = false;
++		return html;
++	},
++
++	/* Generate the month and year header. */
++	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
++			secondary, monthNames, monthNamesShort) {
++
++		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
++			changeMonth = this._get(inst, "changeMonth"),
++			changeYear = this._get(inst, "changeYear"),
++			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
++			html = "<div class='ui-datepicker-title'>",
++			monthHtml = "";
++
++		// month selection
++		if (secondary || !changeMonth) {
++			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
++		} else {
++			inMinYear = (minDate && minDate.getFullYear() === drawYear);
++			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
++			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
++			for ( month = 0; month < 12; month++) {
++				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
++					monthHtml += "<option value='" + month + "'" +
++						(month === drawMonth ? " selected='selected'" : "") +
++						">" + monthNamesShort[month] + "</option>";
++				}
++			}
++			monthHtml += "</select>";
++		}
++
++		if (!showMonthAfterYear) {
++			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
++		}
++
++		// year selection
++		if ( !inst.yearshtml ) {
++			inst.yearshtml = "";
++			if (secondary || !changeYear) {
++				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
++			} else {
++				// determine range of years to display
++				years = this._get(inst, "yearRange").split(":");
++				thisYear = new Date().getFullYear();
++				determineYear = function(value) {
++					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
++						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
++						parseInt(value, 10)));
++					return (isNaN(year) ? thisYear : year);
++				};
++				year = determineYear(years[0]);
++				endYear = Math.max(year, determineYear(years[1] || ""));
++				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
++				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
++				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
++				for (; year <= endYear; year++) {
++					inst.yearshtml += "<option value='" + year + "'" +
++						(year === drawYear ? " selected='selected'" : "") +
++						">" + year + "</option>";
++				}
++				inst.yearshtml += "</select>";
++
++				html += inst.yearshtml;
++				inst.yearshtml = null;
++			}
++		}
++
++		html += this._get(inst, "yearSuffix");
++		if (showMonthAfterYear) {
++			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
++		}
++		html += "</div>"; // Close datepicker_header
++		return html;
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustInstDate: function(inst, offset, period) {
++		var year = inst.drawYear + (period === "Y" ? offset : 0),
++			month = inst.drawMonth + (period === "M" ? offset : 0),
++			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
++			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
++
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		if (period === "M" || period === "Y") {
++			this._notifyChange(inst);
++		}
++	},
++
++	/* Ensure a date is within any min/max bounds. */
++	_restrictMinMax: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			newDate = (minDate && date < minDate ? minDate : date);
++		return (maxDate && newDate > maxDate ? maxDate : newDate);
++	},
++
++	/* Notify change of month/year. */
++	_notifyChange: function(inst) {
++		var onChange = this._get(inst, "onChangeMonthYear");
++		if (onChange) {
++			onChange.apply((inst.input ? inst.input[0] : null),
++				[inst.selectedYear, inst.selectedMonth + 1, inst]);
++		}
++	},
++
++	/* Determine the number of months to show. */
++	_getNumberOfMonths: function(inst) {
++		var numMonths = this._get(inst, "numberOfMonths");
++		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
++	},
++
++	/* Determine the current maximum date - ensure no time components are set. */
++	_getMinMaxDate: function(inst, minMax) {
++		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
++	},
++
++	/* Find the number of days in a given month. */
++	_getDaysInMonth: function(year, month) {
++		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
++	},
++
++	/* Find the day of the week of the first of a month. */
++	_getFirstDayOfMonth: function(year, month) {
++		return new Date(year, month, 1).getDay();
++	},
++
++	/* Determines if we should allow a "next/prev" month display change. */
++	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
++		var numMonths = this._getNumberOfMonths(inst),
++			date = this._daylightSavingAdjust(new Date(curYear,
++			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
++
++		if (offset < 0) {
++			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
++		}
++		return this._isInRange(inst, date);
++	},
++
++	/* Is the given date in the accepted range? */
++	_isInRange: function(inst, date) {
++		var yearSplit, currentYear,
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			minYear = null,
++			maxYear = null,
++			years = this._get(inst, "yearRange");
++			if (years){
++				yearSplit = years.split(":");
++				currentYear = new Date().getFullYear();
++				minYear = parseInt(yearSplit[0], 10);
++				maxYear = parseInt(yearSplit[1], 10);
++				if ( yearSplit[0].match(/[+\-].*/) ) {
++					minYear += currentYear;
++				}
++				if ( yearSplit[1].match(/[+\-].*/) ) {
++					maxYear += currentYear;
++				}
++			}
++
++		return ((!minDate || date.getTime() >= minDate.getTime()) &&
++			(!maxDate || date.getTime() <= maxDate.getTime()) &&
++			(!minYear || date.getFullYear() >= minYear) &&
++			(!maxYear || date.getFullYear() <= maxYear));
++	},
++
++	/* Provide the configuration settings for formatting/parsing. */
++	_getFormatConfig: function(inst) {
++		var shortYearCutoff = this._get(inst, "shortYearCutoff");
++		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
++			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		return {shortYearCutoff: shortYearCutoff,
++			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
++			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
++	},
++
++	/* Format the given date for display. */
++	_formatDate: function(inst, day, month, year) {
++		if (!day) {
++			inst.currentDay = inst.selectedDay;
++			inst.currentMonth = inst.selectedMonth;
++			inst.currentYear = inst.selectedYear;
++		}
++		var date = (day ? (typeof day === "object" ? day :
++			this._daylightSavingAdjust(new Date(year, month, day))) :
++			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
++	}
++});
++
++/*
++ * Bind hover events for datepicker elements.
++ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
++ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
++ */
++function bindHover(dpDiv) {
++	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
++	return dpDiv.delegate(selector, "mouseout", function() {
++			$(this).removeClass("ui-state-hover");
++			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++				$(this).removeClass("ui-datepicker-prev-hover");
++			}
++			if (this.className.indexOf("ui-datepicker-next") !== -1) {
++				$(this).removeClass("ui-datepicker-next-hover");
++			}
++		})
++		.delegate(selector, "mouseover", function(){
++			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
++				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
++				$(this).addClass("ui-state-hover");
++				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++					$(this).addClass("ui-datepicker-prev-hover");
++				}
++				if (this.className.indexOf("ui-datepicker-next") !== -1) {
++					$(this).addClass("ui-datepicker-next-hover");
++				}
++			}
++		});
++}
++
++/* jQuery extend now ignores nulls! */
++function extendRemove(target, props) {
++	$.extend(target, props);
++	for (var name in props) {
++		if (props[name] == null) {
++			target[name] = props[name];
++		}
++	}
++	return target;
++}
++
++/* Invoke the datepicker functionality.
++   @param  options  string - a command, optionally followed by additional parameters or
++					Object - settings for attaching new datepicker functionality
++   @return  jQuery object */
++$.fn.datepicker = function(options){
++
++	/* Verify an empty collection wasn't passed - Fixes #6976 */
++	if ( !this.length ) {
++		return this;
++	}
++
++	/* Initialise the date picker. */
++	if (!$.datepicker.initialized) {
++		$(document).mousedown($.datepicker._checkExternalClick);
++		$.datepicker.initialized = true;
++	}
++
++	/* Append datepicker main container to body if not exist. */
++	if ($("#"+$.datepicker._mainDivId).length === 0) {
++		$("body").append($.datepicker.dpDiv);
++	}
++
++	var otherArgs = Array.prototype.slice.call(arguments, 1);
++	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	return this.each(function() {
++		typeof options === "string" ?
++			$.datepicker["_" + options + "Datepicker"].
++				apply($.datepicker, [this].concat(otherArgs)) :
++			$.datepicker._attachDatepicker(this, options);
++	});
++};
++
++$.datepicker = new Datepicker(); // singleton instance
++$.datepicker.initialized = false;
++$.datepicker.uuid = new Date().getTime();
++$.datepicker.version = "1.10.3";
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.sortable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.sortable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.sortable.js	(revision 15487)
+@@ -0,0 +1,1285 @@
++/*!
++ * jQuery UI Sortable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/sortable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++/*jshint loopfunc: true */
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++function isFloating(item) {
++	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
++}
++
++$.widget("ui.sortable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "sort",
++	ready: false,
++	options: {
++		appendTo: "parent",
++		axis: false,
++		connectWith: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		dropOnEmpty: true,
++		forcePlaceholderSize: false,
++		forceHelperSize: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		items: "> *",
++		opacity: false,
++		placeholder: false,
++		revert: false,
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		scope: "default",
++		tolerance: "intersect",
++		zIndex: 1000,
++
++		// callbacks
++		activate: null,
++		beforeStop: null,
++		change: null,
++		deactivate: null,
++		out: null,
++		over: null,
++		receive: null,
++		remove: null,
++		sort: null,
++		start: null,
++		stop: null,
++		update: null
++	},
++	_create: function() {
++
++		var o = this.options;
++		this.containerCache = {};
++		this.element.addClass("ui-sortable");
++
++		//Get the items
++		this.refresh();
++
++		//Let's determine if the items are being displayed horizontally
++		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
++
++		//Let's determine the parent's offset
++		this.offset = this.element.offset();
++
++		//Initialize mouse events for interaction
++		this._mouseInit();
++
++		//We're ready to go
++		this.ready = true;
++
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass("ui-sortable ui-sortable-disabled");
++		this._mouseDestroy();
++
++		for ( var i = this.items.length - 1; i >= 0; i-- ) {
++			this.items[i].item.removeData(this.widgetName + "-item");
++		}
++
++		return this;
++	},
++
++	_setOption: function(key, value){
++		if ( key === "disabled" ) {
++			this.options[ key ] = value;
++
++			this.widget().toggleClass( "ui-sortable-disabled", !!value );
++		} else {
++			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
++			$.Widget.prototype._setOption.apply(this, arguments);
++		}
++	},
++
++	_mouseCapture: function(event, overrideHandle) {
++		var currentItem = null,
++			validHandle = false,
++			that = this;
++
++		if (this.reverting) {
++			return false;
++		}
++
++		if(this.options.disabled || this.options.type === "static") {
++			return false;
++		}
++
++		//We have to refresh the items data once first
++		this._refreshItems(event);
++
++		//Find out if the clicked node (or one of its parents) is a actual item in this.items
++		$(event.target).parents().each(function() {
++			if($.data(this, that.widgetName + "-item") === that) {
++				currentItem = $(this);
++				return false;
++			}
++		});
++		if($.data(event.target, that.widgetName + "-item") === that) {
++			currentItem = $(event.target);
++		}
++
++		if(!currentItem) {
++			return false;
++		}
++		if(this.options.handle && !overrideHandle) {
++			$(this.options.handle, currentItem).find("*").addBack().each(function() {
++				if(this === event.target) {
++					validHandle = true;
++				}
++			});
++			if(!validHandle) {
++				return false;
++			}
++		}
++
++		this.currentItem = currentItem;
++		this._removeCurrentsFromItems();
++		return true;
++
++	},
++
++	_mouseStart: function(event, overrideHandle, noActivation) {
++
++		var i, body,
++			o = this.options;
++
++		this.currentContainer = this;
++
++		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
++		this.refreshPositions();
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Get the next scrolling parent
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.currentItem.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		// Only after we got the offset, we can change the helper's position to absolute
++		// TODO: Still need to figure out a way to make relative sorting possible
++		this.helper.css("position", "absolute");
++		this.cssPosition = this.helper.css("position");
++
++		//Generate the original position
++		this.originalPosition = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Cache the former DOM position
++		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
++
++		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.currentItem.hide();
++		}
++
++		//Create the placeholder
++		this._createPlaceholder();
++
++		//Set a containment if given in the options
++		if(o.containment) {
++			this._setContainment();
++		}
++
++		if( o.cursor && o.cursor !== "auto" ) { // cursor option
++			body = this.document.find( "body" );
++
++			// support: IE
++			this.storedCursor = body.css( "cursor" );
++			body.css( "cursor", o.cursor );
++
++			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
++		}
++
++		if(o.opacity) { // opacity option
++			if (this.helper.css("opacity")) {
++				this._storedOpacity = this.helper.css("opacity");
++			}
++			this.helper.css("opacity", o.opacity);
++		}
++
++		if(o.zIndex) { // zIndex option
++			if (this.helper.css("zIndex")) {
++				this._storedZIndex = this.helper.css("zIndex");
++			}
++			this.helper.css("zIndex", o.zIndex);
++		}
++
++		//Prepare scrolling
++		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++			this.overflowOffset = this.scrollParent.offset();
++		}
++
++		//Call callbacks
++		this._trigger("start", event, this._uiHash());
++
++		//Recache the helper size
++		if(!this._preserveHelperProportions) {
++			this._cacheHelperProportions();
++		}
++
++
++		//Post "activate" events to possible containers
++		if( !noActivation ) {
++			for ( i = this.containers.length - 1; i >= 0; i-- ) {
++				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
++			}
++		}
++
++		//Prepare possible droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++		this.dragging = true;
++
++		this.helper.addClass("ui-sortable-helper");
++		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		return true;
++
++	},
++
++	_mouseDrag: function(event) {
++		var i, item, itemElement, intersection,
++			o = this.options,
++			scrolled = false;
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		if (!this.lastPositionAbs) {
++			this.lastPositionAbs = this.positionAbs;
++		}
++
++		//Do scrolling
++		if(this.options.scroll) {
++			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++
++				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++
++				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++
++			} else {
++
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++
++			}
++
++			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++				$.ui.ddmanager.prepareOffsets(this, event);
++			}
++		}
++
++		//Regenerate the absolute position used for position checks
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Set the helper position
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++
++		//Rearrange
++		for (i = this.items.length - 1; i >= 0; i--) {
++
++			//Cache variables and intersection, continue if no intersection
++			item = this.items[i];
++			itemElement = item.item[0];
++			intersection = this._intersectsWithPointer(item);
++			if (!intersection) {
++				continue;
++			}
++
++			// Only put the placeholder inside the current Container, skip all
++			// items form other containers. This works because when moving
++			// an item from one container to another the
++			// currentContainer is switched before the placeholder is moved.
++			//
++			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
++			// beetween the outer and inner container.
++			if (item.instance !== this.currentContainer) {
++				continue;
++			}
++
++			// cannot intersect with itself
++			// no useless actions that have been done before
++			// no action if the item moved is the parent of the item checked
++			if (itemElement !== this.currentItem[0] &&
++				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
++				!$.contains(this.placeholder[0], itemElement) &&
++				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
++			) {
++
++				this.direction = intersection === 1 ? "down" : "up";
++
++				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
++					this._rearrange(event, item);
++				} else {
++					break;
++				}
++
++				this._trigger("change", event, this._uiHash());
++				break;
++			}
++		}
++
++		//Post events to containers
++		this._contactContainers(event);
++
++		//Interconnect with droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		//Call callbacks
++		this._trigger("sort", event, this._uiHash());
++
++		this.lastPositionAbs = this.positionAbs;
++		return false;
++
++	},
++
++	_mouseStop: function(event, noPropagation) {
++
++		if(!event) {
++			return;
++		}
++
++		//If we are using droppables, inform the manager about the drop
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			$.ui.ddmanager.drop(this, event);
++		}
++
++		if(this.options.revert) {
++			var that = this,
++				cur = this.placeholder.offset(),
++				axis = this.options.axis,
++				animation = {};
++
++			if ( !axis || axis === "x" ) {
++				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
++			}
++			if ( !axis || axis === "y" ) {
++				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
++			}
++			this.reverting = true;
++			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
++				that._clear(event);
++			});
++		} else {
++			this._clear(event, noPropagation);
++		}
++
++		return false;
++
++	},
++
++	cancel: function() {
++
++		if(this.dragging) {
++
++			this._mouseUp({ target: null });
++
++			if(this.options.helper === "original") {
++				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++			} else {
++				this.currentItem.show();
++			}
++
++			//Post deactivating events to containers
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", null, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		if (this.placeholder) {
++			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++			if(this.placeholder[0].parentNode) {
++				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++			}
++			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
++				this.helper.remove();
++			}
++
++			$.extend(this, {
++				helper: null,
++				dragging: false,
++				reverting: false,
++				_noFinalSort: null
++			});
++
++			if(this.domPosition.prev) {
++				$(this.domPosition.prev).after(this.currentItem);
++			} else {
++				$(this.domPosition.parent).prepend(this.currentItem);
++			}
++		}
++
++		return this;
++
++	},
++
++	serialize: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			str = [];
++		o = o || {};
++
++		$(items).each(function() {
++			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
++			if (res) {
++				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
++			}
++		});
++
++		if(!str.length && o.key) {
++			str.push(o.key + "=");
++		}
++
++		return str.join("&");
++
++	},
++
++	toArray: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			ret = [];
++
++		o = o || {};
++
++		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
++		return ret;
++
++	},
++
++	/* Be careful with the following core functions */
++	_intersectsWith: function(item) {
++
++		var x1 = this.positionAbs.left,
++			x2 = x1 + this.helperProportions.width,
++			y1 = this.positionAbs.top,
++			y2 = y1 + this.helperProportions.height,
++			l = item.left,
++			r = l + item.width,
++			t = item.top,
++			b = t + item.height,
++			dyClick = this.offset.click.top,
++			dxClick = this.offset.click.left,
++			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
++			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
++			isOverElement = isOverElementHeight && isOverElementWidth;
++
++		if ( this.options.tolerance === "pointer" ||
++			this.options.forcePointerForContainers ||
++			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
++		) {
++			return isOverElement;
++		} else {
++
++			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
++				x2 - (this.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
++				y2 - (this.helperProportions.height / 2) < b ); // Top Half
++
++		}
++	},
++
++	_intersectsWithPointer: function(item) {
++
++		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
++			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
++			isOverElement = isOverElementHeight && isOverElementWidth,
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (!isOverElement) {
++			return false;
++		}
++
++		return this.floating ?
++			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
++			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
++
++	},
++
++	_intersectsWithSides: function(item) {
++
++		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
++			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (this.floating && horizontalDirection) {
++			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
++		} else {
++			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
++		}
++
++	},
++
++	_getDragVerticalDirection: function() {
++		var delta = this.positionAbs.top - this.lastPositionAbs.top;
++		return delta !== 0 && (delta > 0 ? "down" : "up");
++	},
++
++	_getDragHorizontalDirection: function() {
++		var delta = this.positionAbs.left - this.lastPositionAbs.left;
++		return delta !== 0 && (delta > 0 ? "right" : "left");
++	},
++
++	refresh: function(event) {
++		this._refreshItems(event);
++		this.refreshPositions();
++		return this;
++	},
++
++	_connectWith: function() {
++		var options = this.options;
++		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
++	},
++
++	_getItemsAsjQuery: function(connected) {
++
++		var i, j, cur, inst,
++			items = [],
++			queries = [],
++			connectWith = this._connectWith();
++
++		if(connectWith && connected) {
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for ( j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
++					}
++				}
++			}
++		}
++
++		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
++
++		for (i = queries.length - 1; i >= 0; i--){
++			queries[i][0].each(function() {
++				items.push(this);
++			});
++		}
++
++		return $(items);
++
++	},
++
++	_removeCurrentsFromItems: function() {
++
++		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
++
++		this.items = $.grep(this.items, function (item) {
++			for (var j=0; j < list.length; j++) {
++				if(list[j] === item.item[0]) {
++					return false;
++				}
++			}
++			return true;
++		});
++
++	},
++
++	_refreshItems: function(event) {
++
++		this.items = [];
++		this.containers = [this];
++
++		var i, j, cur, inst, targetData, _queries, item, queriesLength,
++			items = this.items,
++			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
++			connectWith = this._connectWith();
++
++		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for (j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
++						this.containers.push(inst);
++					}
++				}
++			}
++		}
++
++		for (i = queries.length - 1; i >= 0; i--) {
++			targetData = queries[i][1];
++			_queries = queries[i][0];
++
++			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
++				item = $(_queries[j]);
++
++				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
++
++				items.push({
++					item: item,
++					instance: targetData,
++					width: 0, height: 0,
++					left: 0, top: 0
++				});
++			}
++		}
++
++	},
++
++	refreshPositions: function(fast) {
++
++		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
++		if(this.offsetParent && this.helper) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		var i, item, t, p;
++
++		for (i = this.items.length - 1; i >= 0; i--){
++			item = this.items[i];
++
++			//We ignore calculating positions of all connected containers when we're not over them
++			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
++				continue;
++			}
++
++			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
++
++			if (!fast) {
++				item.width = t.outerWidth();
++				item.height = t.outerHeight();
++			}
++
++			p = t.offset();
++			item.left = p.left;
++			item.top = p.top;
++		}
++
++		if(this.options.custom && this.options.custom.refreshContainers) {
++			this.options.custom.refreshContainers.call(this);
++		} else {
++			for (i = this.containers.length - 1; i >= 0; i--){
++				p = this.containers[i].element.offset();
++				this.containers[i].containerCache.left = p.left;
++				this.containers[i].containerCache.top = p.top;
++				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
++				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
++			}
++		}
++
++		return this;
++	},
++
++	_createPlaceholder: function(that) {
++		that = that || this;
++		var className,
++			o = that.options;
++
++		if(!o.placeholder || o.placeholder.constructor === String) {
++			className = o.placeholder;
++			o.placeholder = {
++				element: function() {
++
++					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
++						element = $( "<" + nodeName + ">", that.document[0] )
++							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
++							.removeClass("ui-sortable-helper");
++
++					if ( nodeName === "tr" ) {
++						that.currentItem.children().each(function() {
++							$( "<td>&#160;</td>", that.document[0] )
++								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
++								.appendTo( element );
++						});
++					} else if ( nodeName === "img" ) {
++						element.attr( "src", that.currentItem.attr( "src" ) );
++					}
++
++					if ( !className ) {
++						element.css( "visibility", "hidden" );
++					}
++
++					return element;
++				},
++				update: function(container, p) {
++
++					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
++					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
++					if(className && !o.forcePlaceholderSize) {
++						return;
++					}
++
++					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
++					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
++					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
++				}
++			};
++		}
++
++		//Create the placeholder
++		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
++
++		//Append it after the actual current item
++		that.currentItem.after(that.placeholder);
++
++		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
++		o.placeholder.update(that, that.placeholder);
++
++	},
++
++	_contactContainers: function(event) {
++		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
++			innermostContainer = null,
++			innermostIndex = null;
++
++		// get innermost container that intersects with item
++		for (i = this.containers.length - 1; i >= 0; i--) {
++
++			// never consider a container that's located within the item itself
++			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
++				continue;
++			}
++
++			if(this._intersectsWith(this.containers[i].containerCache)) {
++
++				// if we've already found a container and it's more "inner" than this, then continue
++				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
++					continue;
++				}
++
++				innermostContainer = this.containers[i];
++				innermostIndex = i;
++
++			} else {
++				// container doesn't intersect. trigger "out" event if necessary
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", event, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		// if no intersecting containers found, return
++		if(!innermostContainer) {
++			return;
++		}
++
++		// move the item into the container if it's not there already
++		if(this.containers.length === 1) {
++			if (!this.containers[innermostIndex].containerCache.over) {
++				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++				this.containers[innermostIndex].containerCache.over = 1;
++			}
++		} else {
++
++			//When entering a new container, we will find the item with the least distance and append our item near it
++			dist = 10000;
++			itemWithLeastDistance = null;
++			floating = innermostContainer.floating || isFloating(this.currentItem);
++			posProperty = floating ? "left" : "top";
++			sizeProperty = floating ? "width" : "height";
++			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
++			for (j = this.items.length - 1; j >= 0; j--) {
++				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
++					continue;
++				}
++				if(this.items[j].item[0] === this.currentItem[0]) {
++					continue;
++				}
++				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
++					continue;
++				}
++				cur = this.items[j].item.offset()[posProperty];
++				nearBottom = false;
++				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
++					nearBottom = true;
++					cur += this.items[j][sizeProperty];
++				}
++
++				if(Math.abs(cur - base) < dist) {
++					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
++					this.direction = nearBottom ? "up": "down";
++				}
++			}
++
++			//Check if dropOnEmpty is enabled
++			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
++				return;
++			}
++
++			if(this.currentContainer === this.containers[innermostIndex]) {
++				return;
++			}
++
++			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
++			this._trigger("change", event, this._uiHash());
++			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
++			this.currentContainer = this.containers[innermostIndex];
++
++			//Update the placeholder
++			this.options.placeholder.update(this.currentContainer, this.placeholder);
++
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++			this.containers[innermostIndex].containerCache.over = 1;
++		}
++
++
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
++
++		//Add the helper to the DOM if that didn't happen already
++		if(!helper.parents("body").length) {
++			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
++		}
++
++		if(helper[0] === this.currentItem[0]) {
++			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
++		}
++
++		if(!helper[0].style.width || o.forceHelperSize) {
++			helper.width(this.currentItem.width());
++		}
++		if(!helper[0].style.height || o.forceHelperSize) {
++			helper.height(this.currentItem.height());
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		// This needs to be actually done for all browsers, since pageX/pageY includes this information
++		// with an ugly IE fix
++		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.currentItem.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
++			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var ce, co, over,
++			o = this.options;
++		if(o.containment === "parent") {
++			o.containment = this.helper[0].parentNode;
++		}
++		if(o.containment === "document" || o.containment === "window") {
++			this.containment = [
++				0 - this.offset.relative.left - this.offset.parent.left,
++				0 - this.offset.relative.top - this.offset.parent.top,
++				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
++				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++		if(!(/^(document|window|parent)$/).test(o.containment)) {
++			ce = $(o.containment)[0];
++			co = $(o.containment).offset();
++			over = ($(ce).css("overflow") !== "hidden");
++
++			this.containment = [
++				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
++				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
++				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
++				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
++			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var top, left,
++			o = this.options,
++			pageX = event.pageX,
++			pageY = event.pageY,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		// This is another very weird special case that only happens for relative elements:
++		// 1. If the css position is relative
++		// 2. and the scroll parent is the document or similar to the offset parent
++		// we have to refresh the relative offset during the scroll so there are no jumps
++		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
++			this.offset.relative = this._getRelativeOffset();
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++
++			if(this.containment) {
++				if(event.pageX - this.offset.click.left < this.containment[0]) {
++					pageX = this.containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < this.containment[1]) {
++					pageY = this.containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > this.containment[2]) {
++					pageX = this.containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > this.containment[3]) {
++					pageY = this.containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
++				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
++				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																// The absolute mouse position
++				this.offset.click.top -													// Click offset (relative to the element)
++				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX -																// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_rearrange: function(event, i, a, hardRefresh) {
++
++		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
++
++		//Various things done here to improve the performance:
++		// 1. we create a setTimeout, that calls refreshPositions
++		// 2. on the instance, we have a counter variable, that get's higher after every append
++		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
++		// 4. this lets only the last addition to the timeout stack through
++		this.counter = this.counter ? ++this.counter : 1;
++		var counter = this.counter;
++
++		this._delay(function() {
++			if(counter === this.counter) {
++				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
++			}
++		});
++
++	},
++
++	_clear: function(event, noPropagation) {
++
++		this.reverting = false;
++		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
++		// everything else normalized again
++		var i,
++			delayedTriggers = [];
++
++		// We first have to update the dom position of the actual currentItem
++		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
++		if(!this._noFinalSort && this.currentItem.parent().length) {
++			this.placeholder.before(this.currentItem);
++		}
++		this._noFinalSort = null;
++
++		if(this.helper[0] === this.currentItem[0]) {
++			for(i in this._storedCSS) {
++				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
++					this._storedCSS[i] = "";
++				}
++			}
++			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++		} else {
++			this.currentItem.show();
++		}
++
++		if(this.fromOutside && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
++		}
++		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
++		}
++
++		// Check if the items Container has Changed and trigger appropriate
++		// events.
++		if (this !== this.currentContainer) {
++			if(!noPropagation) {
++				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
++			}
++		}
++
++
++		//Post events to containers
++		for (i = this.containers.length - 1; i >= 0; i--){
++			if(!noPropagation) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++			}
++			if(this.containers[i].containerCache.over) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++				this.containers[i].containerCache.over = 0;
++			}
++		}
++
++		//Do what was originally in plugins
++		if ( this.storedCursor ) {
++			this.document.find( "body" ).css( "cursor", this.storedCursor );
++			this.storedStylesheet.remove();
++		}
++		if(this._storedOpacity) {
++			this.helper.css("opacity", this._storedOpacity);
++		}
++		if(this._storedZIndex) {
++			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
++		}
++
++		this.dragging = false;
++		if(this.cancelHelperRemoval) {
++			if(!noPropagation) {
++				this._trigger("beforeStop", event, this._uiHash());
++				for (i=0; i < delayedTriggers.length; i++) {
++					delayedTriggers[i].call(this, event);
++				} //Trigger all delayed events
++				this._trigger("stop", event, this._uiHash());
++			}
++
++			this.fromOutside = false;
++			return false;
++		}
++
++		if(!noPropagation) {
++			this._trigger("beforeStop", event, this._uiHash());
++		}
++
++		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.helper.remove();
++		}
++		this.helper = null;
++
++		if(!noPropagation) {
++			for (i=0; i < delayedTriggers.length; i++) {
++				delayedTriggers[i].call(this, event);
++			} //Trigger all delayed events
++			this._trigger("stop", event, this._uiHash());
++		}
++
++		this.fromOutside = false;
++		return true;
++
++	},
++
++	_trigger: function() {
++		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
++			this.cancel();
++		}
++	},
++
++	_uiHash: function(_inst) {
++		var inst = _inst || this;
++		return {
++			helper: inst.helper,
++			placeholder: inst.placeholder || $([]),
++			position: inst.position,
++			originalPosition: inst.originalPosition,
++			offset: inst.positionAbs,
++			item: inst.currentItem,
++			sender: _inst ? _inst.element : null
++		};
++	}
++
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-transfer.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-transfer.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-transfer.js	(revision 15487)
+@@ -0,0 +1,47 @@
++/*!
++ * jQuery UI Effects Transfer 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/transfer-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.transfer = function( o, done ) {
++	var elem = $( this ),
++		target = $( o.to ),
++		targetFixed = target.css( "position" ) === "fixed",
++		body = $("body"),
++		fixTop = targetFixed ? body.scrollTop() : 0,
++		fixLeft = targetFixed ? body.scrollLeft() : 0,
++		endPosition = target.offset(),
++		animation = {
++			top: endPosition.top - fixTop ,
++			left: endPosition.left - fixLeft ,
++			height: target.innerHeight(),
++			width: target.innerWidth()
++		},
++		startPosition = elem.offset(),
++		transfer = $( "<div class='ui-effects-transfer'></div>" )
++			.appendTo( document.body )
++			.addClass( o.className )
++			.css({
++				top: startPosition.top - fixTop ,
++				left: startPosition.left - fixLeft ,
++				height: elem.innerHeight(),
++				width: elem.innerWidth(),
++				position: targetFixed ? "fixed" : "absolute"
++			})
++			.animate( animation, o.duration, o.easing, function() {
++				transfer.remove();
++				done();
++			});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-scale.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-scale.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-scale.js	(revision 15487)
+@@ -0,0 +1,318 @@
++/*!
++ * jQuery UI Effects Scale 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/scale-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.puff = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "hide" ),
++		hide = mode === "hide",
++		percent = parseInt( o.percent, 10 ) || 150,
++		factor = percent / 100,
++		original = {
++			height: elem.height(),
++			width: elem.width(),
++			outerHeight: elem.outerHeight(),
++			outerWidth: elem.outerWidth()
++		};
++
++	$.extend( o, {
++		effect: "scale",
++		queue: false,
++		fade: true,
++		mode: mode,
++		complete: done,
++		percent: hide ? percent : 100,
++		from: hide ?
++			original :
++			{
++				height: original.height * factor,
++				width: original.width * factor,
++				outerHeight: original.outerHeight * factor,
++				outerWidth: original.outerWidth * factor
++			}
++	});
++
++	elem.effect( o );
++};
++
++$.effects.effect.scale = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		options = $.extend( true, {}, o ),
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		percent = parseInt( o.percent, 10 ) ||
++			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
++		direction = o.direction || "both",
++		origin = o.origin,
++		original = {
++			height: el.height(),
++			width: el.width(),
++			outerHeight: el.outerHeight(),
++			outerWidth: el.outerWidth()
++		},
++		factor = {
++			y: direction !== "horizontal" ? (percent / 100) : 1,
++			x: direction !== "vertical" ? (percent / 100) : 1
++		};
++
++	// We are going to pass this effect to the size effect:
++	options.effect = "size";
++	options.queue = false;
++	options.complete = done;
++
++	// Set default origin and restore for show/hide
++	if ( mode !== "effect" ) {
++		options.origin = origin || ["middle","center"];
++		options.restore = true;
++	}
++
++	options.from = o.from || ( mode === "show" ? {
++		height: 0,
++		width: 0,
++		outerHeight: 0,
++		outerWidth: 0
++	} : original );
++	options.to = {
++		height: original.height * factor.y,
++		width: original.width * factor.x,
++		outerHeight: original.outerHeight * factor.y,
++		outerWidth: original.outerWidth * factor.x
++	};
++
++	// Fade option to support puff
++	if ( options.fade ) {
++		if ( mode === "show" ) {
++			options.from.opacity = 0;
++			options.to.opacity = 1;
++		}
++		if ( mode === "hide" ) {
++			options.from.opacity = 1;
++			options.to.opacity = 0;
++		}
++	}
++
++	// Animate
++	el.effect( options );
++
++};
++
++$.effects.effect.size = function( o, done ) {
++
++	// Create element
++	var original, baseline, factor,
++		el = $( this ),
++		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
++
++		// Always restore
++		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
++
++		// Copy for children
++		props2 = [ "width", "height", "overflow" ],
++		cProps = [ "fontSize" ],
++		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
++		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
++
++		// Set options
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		restore = o.restore || mode !== "effect",
++		scale = o.scale || "both",
++		origin = o.origin || [ "middle", "center" ],
++		position = el.css( "position" ),
++		props = restore ? props0 : props1,
++		zero = {
++			height: 0,
++			width: 0,
++			outerHeight: 0,
++			outerWidth: 0
++		};
++
++	if ( mode === "show" ) {
++		el.show();
++	}
++	original = {
++		height: el.height(),
++		width: el.width(),
++		outerHeight: el.outerHeight(),
++		outerWidth: el.outerWidth()
++	};
++
++	if ( o.mode === "toggle" && mode === "show" ) {
++		el.from = o.to || zero;
++		el.to = o.from || original;
++	} else {
++		el.from = o.from || ( mode === "show" ? zero : original );
++		el.to = o.to || ( mode === "hide" ? zero : original );
++	}
++
++	// Set scaling factor
++	factor = {
++		from: {
++			y: el.from.height / original.height,
++			x: el.from.width / original.width
++		},
++		to: {
++			y: el.to.height / original.height,
++			x: el.to.width / original.width
++		}
++	};
++
++	// Scale the css box
++	if ( scale === "box" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( vProps );
++			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
++		}
++
++		// Horizontal props scaling
++		if ( factor.from.x !== factor.to.x ) {
++			props = props.concat( hProps );
++			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
++			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
++		}
++	}
++
++	// Scale the content
++	if ( scale === "content" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( cProps ).concat( props2 );
++			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
++		}
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++	el.css( "overflow", "hidden" ).css( el.from );
++
++	// Adjust
++	if (origin) { // Calculate baseline shifts
++		baseline = $.effects.getBaseline( origin, original );
++		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
++		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
++		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
++		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
++	}
++	el.css( el.from ); // set top & left
++
++	// Animate
++	if ( scale === "content" || scale === "both" ) { // Scale the children
++
++		// Add margins/font-size
++		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
++		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
++		props2 = props0.concat(vProps).concat(hProps);
++
++		el.find( "*[width]" ).each( function(){
++			var child = $( this ),
++				c_original = {
++					height: child.height(),
++					width: child.width(),
++					outerHeight: child.outerHeight(),
++					outerWidth: child.outerWidth()
++				};
++			if (restore) {
++				$.effects.save(child, props2);
++			}
++
++			child.from = {
++				height: c_original.height * factor.from.y,
++				width: c_original.width * factor.from.x,
++				outerHeight: c_original.outerHeight * factor.from.y,
++				outerWidth: c_original.outerWidth * factor.from.x
++			};
++			child.to = {
++				height: c_original.height * factor.to.y,
++				width: c_original.width * factor.to.x,
++				outerHeight: c_original.height * factor.to.y,
++				outerWidth: c_original.width * factor.to.x
++			};
++
++			// Vertical props scaling
++			if ( factor.from.y !== factor.to.y ) {
++				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
++				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
++			}
++
++			// Horizontal props scaling
++			if ( factor.from.x !== factor.to.x ) {
++				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
++				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
++			}
++
++			// Animate children
++			child.css( child.from );
++			child.animate( child.to, o.duration, o.easing, function() {
++
++				// Restore children
++				if ( restore ) {
++					$.effects.restore( child, props2 );
++				}
++			});
++		});
++	}
++
++	// Animate
++	el.animate( el.to, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( el.to.opacity === 0 ) {
++				el.css( "opacity", el.from.opacity );
++			}
++			if( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			if ( !restore ) {
++
++				// we need to calculate our new positioning based on the scaling
++				if ( position === "static" ) {
++					el.css({
++						position: "relative",
++						top: el.to.top,
++						left: el.to.left
++					});
++				} else {
++					$.each([ "top", "left" ], function( idx, pos ) {
++						el.css( pos, function( _, str ) {
++							var val = parseInt( str, 10 ),
++								toRef = idx ? el.to.left : el.to.top;
++
++							// if original was "auto", recalculate the new value from wrapper
++							if ( str === "auto" ) {
++								return toRef + "px";
++							}
++
++							return val + toRef + "px";
++						});
++					});
++				}
++			}
++
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-clip.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-clip.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-clip.js	(revision 15487)
+@@ -0,0 +1,67 @@
++/*!
++ * jQuery UI Effects Clip 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/clip-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.clip = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "vertical",
++		vert = direction === "vertical",
++		size = vert ? "height" : "width",
++		position = vert ? "top" : "left",
++		animation = {},
++		wrapper, animate, distance;
++
++	// Save & Show
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
++	distance = animate[ size ]();
++
++	// Shift
++	if ( show ) {
++		animate.css( size, 0 );
++		animate.css( position, distance / 2 );
++	}
++
++	// Create Animation Object:
++	animation[ size ] = show ? distance : 0;
++	animation[ position ] = show ? 0 : distance / 2;
++
++	// Animate
++	animate.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( !show ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-blind.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-blind.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-blind.js	(revision 15487)
+@@ -0,0 +1,82 @@
++/*!
++ * jQuery UI Effects Blind 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/blind-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++var rvertical = /up|down|vertical/,
++	rpositivemotion = /up|left|vertical|horizontal/;
++
++$.effects.effect.blind = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		direction = o.direction || "up",
++		vertical = rvertical.test( direction ),
++		ref = vertical ? "height" : "width",
++		ref2 = vertical ? "top" : "left",
++		motion = rpositivemotion.test( direction ),
++		animation = {},
++		show = mode === "show",
++		wrapper, distance, margin;
++
++	// if already wrapped, the wrapper's properties are my property. #6245
++	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
++		$.effects.save( el.parent(), props );
++	} else {
++		$.effects.save( el, props );
++	}
++	el.show();
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	distance = wrapper[ ref ]();
++	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
++
++	animation[ ref ] = show ? distance : 0;
++	if ( !motion ) {
++		el
++			.css( vertical ? "bottom" : "right", 0 )
++			.css( vertical ? "top" : "left", "auto" )
++			.css({ position: "absolute" });
++
++		animation[ ref2 ] = show ? margin : distance + margin;
++	}
++
++	// start at 0 if we are showing
++	if ( show ) {
++		wrapper.css( ref, 0 );
++		if ( ! motion ) {
++			wrapper.css( ref2, margin + distance );
++		}
++	}
++
++	// Animate
++	wrapper.animate( animation, {
++		duration: o.duration,
++		easing: o.easing,
++		queue: false,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-shake.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-shake.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-shake.js	(revision 15487)
+@@ -0,0 +1,74 @@
++/*!
++ * jQuery UI Effects Shake 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/shake-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.shake = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		direction = o.direction || "left",
++		distance = o.distance || 20,
++		times = o.times || 3,
++		anims = times * 2 + 1,
++		speed = Math.round(o.duration/anims),
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		animation = {},
++		animation1 = {},
++		animation2 = {},
++		i,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	// Animation
++	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
++	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
++	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
++
++	// Animate
++	el.animate( animation, speed, o.easing );
++
++	// Shakes
++	for ( i = 1; i < times; i++ ) {
++		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
++	}
++	el
++		.animate( animation1, speed, o.easing )
++		.animate( animation, speed / 2, o.easing )
++		.queue(function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.core.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.core.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.core.js	(revision 15487)
+@@ -0,0 +1,320 @@
++/*!
++ * jQuery UI Core 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/category/ui-core/
++ */
++(function( $, undefined ) {
++
++var uuid = 0,
++	runiqueId = /^ui-id-\d+$/;
++
++// $.ui might exist from components with no dependencies, e.g., $.ui.position
++$.ui = $.ui || {};
++
++$.extend( $.ui, {
++	version: "1.10.3",
++
++	keyCode: {
++		BACKSPACE: 8,
++		COMMA: 188,
++		DELETE: 46,
++		DOWN: 40,
++		END: 35,
++		ENTER: 13,
++		ESCAPE: 27,
++		HOME: 36,
++		LEFT: 37,
++		NUMPAD_ADD: 107,
++		NUMPAD_DECIMAL: 110,
++		NUMPAD_DIVIDE: 111,
++		NUMPAD_ENTER: 108,
++		NUMPAD_MULTIPLY: 106,
++		NUMPAD_SUBTRACT: 109,
++		PAGE_DOWN: 34,
++		PAGE_UP: 33,
++		PERIOD: 190,
++		RIGHT: 39,
++		SPACE: 32,
++		TAB: 9,
++		UP: 38
++	}
++});
++
++// plugins
++$.fn.extend({
++	focus: (function( orig ) {
++		return function( delay, fn ) {
++			return typeof delay === "number" ?
++				this.each(function() {
++					var elem = this;
++					setTimeout(function() {
++						$( elem ).focus();
++						if ( fn ) {
++							fn.call( elem );
++						}
++					}, delay );
++				}) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.focus ),
++
++	scrollParent: function() {
++		var scrollParent;
++		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
++			scrollParent = this.parents().filter(function() {
++				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		} else {
++			scrollParent = this.parents().filter(function() {
++				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		}
++
++		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
++	},
++
++	zIndex: function( zIndex ) {
++		if ( zIndex !== undefined ) {
++			return this.css( "zIndex", zIndex );
++		}
++
++		if ( this.length ) {
++			var elem = $( this[ 0 ] ), position, value;
++			while ( elem.length && elem[ 0 ] !== document ) {
++				// Ignore z-index if position is set to a value where z-index is ignored by the browser
++				// This makes behavior of this function consistent across browsers
++				// WebKit always returns auto if the element is positioned
++				position = elem.css( "position" );
++				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
++					// IE returns 0 when zIndex is not specified
++					// other browsers return a string
++					// we ignore the case of nested elements with an explicit value of 0
++					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
++					value = parseInt( elem.css( "zIndex" ), 10 );
++					if ( !isNaN( value ) && value !== 0 ) {
++						return value;
++					}
++				}
++				elem = elem.parent();
++			}
++		}
++
++		return 0;
++	},
++
++	uniqueId: function() {
++		return this.each(function() {
++			if ( !this.id ) {
++				this.id = "ui-id-" + (++uuid);
++			}
++		});
++	},
++
++	removeUniqueId: function() {
++		return this.each(function() {
++			if ( runiqueId.test( this.id ) ) {
++				$( this ).removeAttr( "id" );
++			}
++		});
++	}
++});
++
++// selectors
++function focusable( element, isTabIndexNotNaN ) {
++	var map, mapName, img,
++		nodeName = element.nodeName.toLowerCase();
++	if ( "area" === nodeName ) {
++		map = element.parentNode;
++		mapName = map.name;
++		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
++			return false;
++		}
++		img = $( "img[usemap=#" + mapName + "]" )[0];
++		return !!img && visible( img );
++	}
++	return ( /input|select|textarea|button|object/.test( nodeName ) ?
++		!element.disabled :
++		"a" === nodeName ?
++			element.href || isTabIndexNotNaN :
++			isTabIndexNotNaN) &&
++		// the element and all of its ancestors must be visible
++		visible( element );
++}
++
++function visible( element ) {
++	return $.expr.filters.visible( element ) &&
++		!$( element ).parents().addBack().filter(function() {
++			return $.css( this, "visibility" ) === "hidden";
++		}).length;
++}
++
++$.extend( $.expr[ ":" ], {
++	data: $.expr.createPseudo ?
++		$.expr.createPseudo(function( dataName ) {
++			return function( elem ) {
++				return !!$.data( elem, dataName );
++			};
++		}) :
++		// support: jQuery <1.8
++		function( elem, i, match ) {
++			return !!$.data( elem, match[ 3 ] );
++		},
++
++	focusable: function( element ) {
++		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
++	},
++
++	tabbable: function( element ) {
++		var tabIndex = $.attr( element, "tabindex" ),
++			isTabIndexNaN = isNaN( tabIndex );
++		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
++	}
++});
++
++// support: jQuery <1.8
++if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
++	$.each( [ "Width", "Height" ], function( i, name ) {
++		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
++			type = name.toLowerCase(),
++			orig = {
++				innerWidth: $.fn.innerWidth,
++				innerHeight: $.fn.innerHeight,
++				outerWidth: $.fn.outerWidth,
++				outerHeight: $.fn.outerHeight
++			};
++
++		function reduce( elem, size, border, margin ) {
++			$.each( side, function() {
++				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
++				if ( border ) {
++					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
++				}
++				if ( margin ) {
++					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
++				}
++			});
++			return size;
++		}
++
++		$.fn[ "inner" + name ] = function( size ) {
++			if ( size === undefined ) {
++				return orig[ "inner" + name ].call( this );
++			}
++
++			return this.each(function() {
++				$( this ).css( type, reduce( this, size ) + "px" );
++			});
++		};
++
++		$.fn[ "outer" + name] = function( size, margin ) {
++			if ( typeof size !== "number" ) {
++				return orig[ "outer" + name ].call( this, size );
++			}
++
++			return this.each(function() {
++				$( this).css( type, reduce( this, size, true, margin ) + "px" );
++			});
++		};
++	});
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
++if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
++	$.fn.removeData = (function( removeData ) {
++		return function( key ) {
++			if ( arguments.length ) {
++				return removeData.call( this, $.camelCase( key ) );
++			} else {
++				return removeData.call( this );
++			}
++		};
++	})( $.fn.removeData );
++}
++
++
++
++
++
++// deprecated
++$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
++
++$.support.selectstart = "onselectstart" in document.createElement( "div" );
++$.fn.extend({
++	disableSelection: function() {
++		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
++			".ui-disableSelection", function( event ) {
++				event.preventDefault();
++			});
++	},
++
++	enableSelection: function() {
++		return this.unbind( ".ui-disableSelection" );
++	}
++});
++
++$.extend( $.ui, {
++	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
++	plugin: {
++		add: function( module, option, set ) {
++			var i,
++				proto = $.ui[ module ].prototype;
++			for ( i in set ) {
++				proto.plugins[ i ] = proto.plugins[ i ] || [];
++				proto.plugins[ i ].push( [ option, set[ i ] ] );
++			}
++		},
++		call: function( instance, name, args ) {
++			var i,
++				set = instance.plugins[ name ];
++			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
++				return;
++			}
++
++			for ( i = 0; i < set.length; i++ ) {
++				if ( instance.options[ set[ i ][ 0 ] ] ) {
++					set[ i ][ 1 ].apply( instance.element, args );
++				}
++			}
++		}
++	},
++
++	// only used by resizable
++	hasScroll: function( el, a ) {
++
++		//If overflow is hidden, the element might have extra content, but the user wants to hide it
++		if ( $( el ).css( "overflow" ) === "hidden") {
++			return false;
++		}
++
++		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
++			has = false;
++
++		if ( el[ scroll ] > 0 ) {
++			return true;
++		}
++
++		// TODO: determine which cases actually cause this to happen
++		// if the element doesn't have the scroll set, see if it's possible to
++		// set the scroll
++		el[ scroll ] = 1;
++		has = ( el[ scroll ] > 0 );
++		el[ scroll ] = 0;
++		return has;
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery-1.9.1.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery-1.9.1.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery-1.9.1.js	(revision 15487)
+@@ -0,0 +1,9597 @@
++/*!
++ * jQuery JavaScript Library v1.9.1
++ * http://jquery.com/
++ *
++ * Includes Sizzle.js
++ * http://sizzlejs.com/
++ *
++ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
++ * Released under the MIT license
++ * http://jquery.org/license
++ *
++ * Date: 2013-2-4
++ */
++(function( window, undefined ) {
++
++// Can't do this because several apps including ASP.NET trace
++// the stack via arguments.caller.callee and Firefox dies if
++// you try to trace through "use strict" call chains. (#13335)
++// Support: Firefox 18+
++//"use strict";
++var
++	// The deferred used on DOM ready
++	readyList,
++
++	// A central reference to the root jQuery(document)
++	rootjQuery,
++
++	// Support: IE<9
++	// For `typeof node.method` instead of `node.method !== undefined`
++	core_strundefined = typeof undefined,
++
++	// Use the correct document accordingly with window argument (sandbox)
++	document = window.document,
++	location = window.location,
++
++	// Map over jQuery in case of overwrite
++	_jQuery = window.jQuery,
++
++	// Map over the $ in case of overwrite
++	_$ = window.$,
++
++	// [[Class]] -> type pairs
++	class2type = {},
++
++	// List of deleted data cache ids, so we can reuse them
++	core_deletedIds = [],
++
++	core_version = "1.9.1",
++
++	// Save a reference to some core methods
++	core_concat = core_deletedIds.concat,
++	core_push = core_deletedIds.push,
++	core_slice = core_deletedIds.slice,
++	core_indexOf = core_deletedIds.indexOf,
++	core_toString = class2type.toString,
++	core_hasOwn = class2type.hasOwnProperty,
++	core_trim = core_version.trim,
++
++	// Define a local copy of jQuery
++	jQuery = function( selector, context ) {
++		// The jQuery object is actually just the init constructor 'enhanced'
++		return new jQuery.fn.init( selector, context, rootjQuery );
++	},
++
++	// Used for matching numbers
++	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
++
++	// Used for splitting on whitespace
++	core_rnotwhite = /\S+/g,
++
++	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
++	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
++
++	// A simple way to check for HTML strings
++	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
++	// Strict HTML recognition (#11290: must start with <)
++	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
++
++	// Match a standalone tag
++	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
++
++	// JSON RegExp
++	rvalidchars = /^[\],:{}\s]*$/,
++	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
++	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
++	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
++
++	// Matches dashed string for camelizing
++	rmsPrefix = /^-ms-/,
++	rdashAlpha = /-([\da-z])/gi,
++
++	// Used by jQuery.camelCase as callback to replace()
++	fcamelCase = function( all, letter ) {
++		return letter.toUpperCase();
++	},
++
++	// The ready event handler
++	completed = function( event ) {
++
++		// readyState === "complete" is good enough for us to call the dom ready in oldIE
++		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
++			detach();
++			jQuery.ready();
++		}
++	},
++	// Clean-up method for dom ready events
++	detach = function() {
++		if ( document.addEventListener ) {
++			document.removeEventListener( "DOMContentLoaded", completed, false );
++			window.removeEventListener( "load", completed, false );
++
++		} else {
++			document.detachEvent( "onreadystatechange", completed );
++			window.detachEvent( "onload", completed );
++		}
++	};
++
++jQuery.fn = jQuery.prototype = {
++	// The current version of jQuery being used
++	jquery: core_version,
++
++	constructor: jQuery,
++	init: function( selector, context, rootjQuery ) {
++		var match, elem;
++
++		// HANDLE: $(""), $(null), $(undefined), $(false)
++		if ( !selector ) {
++			return this;
++		}
++
++		// Handle HTML strings
++		if ( typeof selector === "string" ) {
++			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
++				// Assume that strings that start and end with <> are HTML and skip the regex check
++				match = [ null, selector, null ];
++
++			} else {
++				match = rquickExpr.exec( selector );
++			}
++
++			// Match html or make sure no context is specified for #id
++			if ( match && (match[1] || !context) ) {
++
++				// HANDLE: $(html) -> $(array)
++				if ( match[1] ) {
++					context = context instanceof jQuery ? context[0] : context;
++
++					// scripts is true for back-compat
++					jQuery.merge( this, jQuery.parseHTML(
++						match[1],
++						context && context.nodeType ? context.ownerDocument || context : document,
++						true
++					) );
++
++					// HANDLE: $(html, props)
++					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
++						for ( match in context ) {
++							// Properties of context are called as methods if possible
++							if ( jQuery.isFunction( this[ match ] ) ) {
++								this[ match ]( context[ match ] );
++
++							// ...and otherwise set as attributes
++							} else {
++								this.attr( match, context[ match ] );
++							}
++						}
++					}
++
++					return this;
++
++				// HANDLE: $(#id)
++				} else {
++					elem = document.getElementById( match[2] );
++
++					// Check parentNode to catch when Blackberry 4.6 returns
++					// nodes that are no longer in the document #6963
++					if ( elem && elem.parentNode ) {
++						// Handle the case where IE and Opera return items
++						// by name instead of ID
++						if ( elem.id !== match[2] ) {
++							return rootjQuery.find( selector );
++						}
++
++						// Otherwise, we inject the element directly into the jQuery object
++						this.length = 1;
++						this[0] = elem;
++					}
++
++					this.context = document;
++					this.selector = selector;
++					return this;
++				}
++
++			// HANDLE: $(expr, $(...))
++			} else if ( !context || context.jquery ) {
++				return ( context || rootjQuery ).find( selector );
++
++			// HANDLE: $(expr, context)
++			// (which is just equivalent to: $(context).find(expr)
++			} else {
++				return this.constructor( context ).find( selector );
++			}
++
++		// HANDLE: $(DOMElement)
++		} else if ( selector.nodeType ) {
++			this.context = this[0] = selector;
++			this.length = 1;
++			return this;
++
++		// HANDLE: $(function)
++		// Shortcut for document ready
++		} else if ( jQuery.isFunction( selector ) ) {
++			return rootjQuery.ready( selector );
++		}
++
++		if ( selector.selector !== undefined ) {
++			this.selector = selector.selector;
++			this.context = selector.context;
++		}
++
++		return jQuery.makeArray( selector, this );
++	},
++
++	// Start with an empty selector
++	selector: "",
++
++	// The default length of a jQuery object is 0
++	length: 0,
++
++	// The number of elements contained in the matched element set
++	size: function() {
++		return this.length;
++	},
++
++	toArray: function() {
++		return core_slice.call( this );
++	},
++
++	// Get the Nth element in the matched element set OR
++	// Get the whole matched element set as a clean array
++	get: function( num ) {
++		return num == null ?
++
++			// Return a 'clean' array
++			this.toArray() :
++
++			// Return just the object
++			( num < 0 ? this[ this.length + num ] : this[ num ] );
++	},
++
++	// Take an array of elements and push it onto the stack
++	// (returning the new matched element set)
++	pushStack: function( elems ) {
++
++		// Build a new jQuery matched element set
++		var ret = jQuery.merge( this.constructor(), elems );
++
++		// Add the old object onto the stack (as a reference)
++		ret.prevObject = this;
++		ret.context = this.context;
++
++		// Return the newly-formed element set
++		return ret;
++	},
++
++	// Execute a callback for every element in the matched set.
++	// (You can seed the arguments with an array of args, but this is
++	// only used internally.)
++	each: function( callback, args ) {
++		return jQuery.each( this, callback, args );
++	},
++
++	ready: function( fn ) {
++		// Add the callback
++		jQuery.ready.promise().done( fn );
++
++		return this;
++	},
++
++	slice: function() {
++		return this.pushStack( core_slice.apply( this, arguments ) );
++	},
++
++	first: function() {
++		return this.eq( 0 );
++	},
++
++	last: function() {
++		return this.eq( -1 );
++	},
++
++	eq: function( i ) {
++		var len = this.length,
++			j = +i + ( i < 0 ? len : 0 );
++		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
++	},
++
++	map: function( callback ) {
++		return this.pushStack( jQuery.map(this, function( elem, i ) {
++			return callback.call( elem, i, elem );
++		}));
++	},
++
++	end: function() {
++		return this.prevObject || this.constructor(null);
++	},
++
++	// For internal use only.
++	// Behaves like an Array's method, not like a jQuery method.
++	push: core_push,
++	sort: [].sort,
++	splice: [].splice
++};
++
++// Give the init function the jQuery prototype for later instantiation
++jQuery.fn.init.prototype = jQuery.fn;
++
++jQuery.extend = jQuery.fn.extend = function() {
++	var src, copyIsArray, copy, name, options, clone,
++		target = arguments[0] || {},
++		i = 1,
++		length = arguments.length,
++		deep = false;
++
++	// Handle a deep copy situation
++	if ( typeof target === "boolean" ) {
++		deep = target;
++		target = arguments[1] || {};
++		// skip the boolean and the target
++		i = 2;
++	}
++
++	// Handle case when target is a string or something (possible in deep copy)
++	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
++		target = {};
++	}
++
++	// extend jQuery itself if only one argument is passed
++	if ( length === i ) {
++		target = this;
++		--i;
++	}
++
++	for ( ; i < length; i++ ) {
++		// Only deal with non-null/undefined values
++		if ( (options = arguments[ i ]) != null ) {
++			// Extend the base object
++			for ( name in options ) {
++				src = target[ name ];
++				copy = options[ name ];
++
++				// Prevent never-ending loop
++				if ( target === copy ) {
++					continue;
++				}
++
++				// Recurse if we're merging plain objects or arrays
++				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
++					if ( copyIsArray ) {
++						copyIsArray = false;
++						clone = src && jQuery.isArray(src) ? src : [];
++
++					} else {
++						clone = src && jQuery.isPlainObject(src) ? src : {};
++					}
++
++					// Never move original objects, clone them
++					target[ name ] = jQuery.extend( deep, clone, copy );
++
++				// Don't bring in undefined values
++				} else if ( copy !== undefined ) {
++					target[ name ] = copy;
++				}
++			}
++		}
++	}
++
++	// Return the modified object
++	return target;
++};
++
++jQuery.extend({
++	noConflict: function( deep ) {
++		if ( window.$ === jQuery ) {
++			window.$ = _$;
++		}
++
++		if ( deep && window.jQuery === jQuery ) {
++			window.jQuery = _jQuery;
++		}
++
++		return jQuery;
++	},
++
++	// Is the DOM ready to be used? Set to true once it occurs.
++	isReady: false,
++
++	// A counter to track how many items to wait for before
++	// the ready event fires. See #6781
++	readyWait: 1,
++
++	// Hold (or release) the ready event
++	holdReady: function( hold ) {
++		if ( hold ) {
++			jQuery.readyWait++;
++		} else {
++			jQuery.ready( true );
++		}
++	},
++
++	// Handle when the DOM is ready
++	ready: function( wait ) {
++
++		// Abort if there are pending holds or we're already ready
++		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
++			return;
++		}
++
++		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
++		if ( !document.body ) {
++			return setTimeout( jQuery.ready );
++		}
++
++		// Remember that the DOM is ready
++		jQuery.isReady = true;
++
++		// If a normal DOM Ready event fired, decrement, and wait if need be
++		if ( wait !== true && --jQuery.readyWait > 0 ) {
++			return;
++		}
++
++		// If there are functions bound, to execute
++		readyList.resolveWith( document, [ jQuery ] );
++
++		// Trigger any bound ready events
++		if ( jQuery.fn.trigger ) {
++			jQuery( document ).trigger("ready").off("ready");
++		}
++	},
++
++	// See test/unit/core.js for details concerning isFunction.
++	// Since version 1.3, DOM methods and functions like alert
++	// aren't supported. They return false on IE (#2968).
++	isFunction: function( obj ) {
++		return jQuery.type(obj) === "function";
++	},
++
++	isArray: Array.isArray || function( obj ) {
++		return jQuery.type(obj) === "array";
++	},
++
++	isWindow: function( obj ) {
++		return obj != null && obj == obj.window;
++	},
++
++	isNumeric: function( obj ) {
++		return !isNaN( parseFloat(obj) ) && isFinite( obj );
++	},
++
++	type: function( obj ) {
++		if ( obj == null ) {
++			return String( obj );
++		}
++		return typeof obj === "object" || typeof obj === "function" ?
++			class2type[ core_toString.call(obj) ] || "object" :
++			typeof obj;
++	},
++
++	isPlainObject: function( obj ) {
++		// Must be an Object.
++		// Because of IE, we also have to check the presence of the constructor property.
++		// Make sure that DOM nodes and window objects don't pass through, as well
++		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
++			return false;
++		}
++
++		try {
++			// Not own constructor property must be Object
++			if ( obj.constructor &&
++				!core_hasOwn.call(obj, "constructor") &&
++				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
++				return false;
++			}
++		} catch ( e ) {
++			// IE8,9 Will throw exceptions on certain host objects #9897
++			return false;
++		}
++
++		// Own properties are enumerated firstly, so to speed up,
++		// if last one is own, then all properties are own.
++
++		var key;
++		for ( key in obj ) {}
++
++		return key === undefined || core_hasOwn.call( obj, key );
++	},
++
++	isEmptyObject: function( obj ) {
++		var name;
++		for ( name in obj ) {
++			return false;
++		}
++		return true;
++	},
++
++	error: function( msg ) {
++		throw new Error( msg );
++	},
++
++	// data: string of html
++	// context (optional): If specified, the fragment will be created in this context, defaults to document
++	// keepScripts (optional): If true, will include scripts passed in the html string
++	parseHTML: function( data, context, keepScripts ) {
++		if ( !data || typeof data !== "string" ) {
++			return null;
++		}
++		if ( typeof context === "boolean" ) {
++			keepScripts = context;
++			context = false;
++		}
++		context = context || document;
++
++		var parsed = rsingleTag.exec( data ),
++			scripts = !keepScripts && [];
++
++		// Single tag
++		if ( parsed ) {
++			return [ context.createElement( parsed[1] ) ];
++		}
++
++		parsed = jQuery.buildFragment( [ data ], context, scripts );
++		if ( scripts ) {
++			jQuery( scripts ).remove();
++		}
++		return jQuery.merge( [], parsed.childNodes );
++	},
++
++	parseJSON: function( data ) {
++		// Attempt to parse using the native JSON parser first
++		if ( window.JSON && window.JSON.parse ) {
++			return window.JSON.parse( data );
++		}
++
++		if ( data === null ) {
++			return data;
++		}
++
++		if ( typeof data === "string" ) {
++
++			// Make sure leading/trailing whitespace is removed (IE can't handle it)
++			data = jQuery.trim( data );
++
++			if ( data ) {
++				// Make sure the incoming data is actual JSON
++				// Logic borrowed from http://json.org/json2.js
++				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
++					.replace( rvalidtokens, "]" )
++					.replace( rvalidbraces, "")) ) {
++
++					return ( new Function( "return " + data ) )();
++				}
++			}
++		}
++
++		jQuery.error( "Invalid JSON: " + data );
++	},
++
++	// Cross-browser xml parsing
++	parseXML: function( data ) {
++		var xml, tmp;
++		if ( !data || typeof data !== "string" ) {
++			return null;
++		}
++		try {
++			if ( window.DOMParser ) { // Standard
++				tmp = new DOMParser();
++				xml = tmp.parseFromString( data , "text/xml" );
++			} else { // IE
++				xml = new ActiveXObject( "Microsoft.XMLDOM" );
++				xml.async = "false";
++				xml.loadXML( data );
++			}
++		} catch( e ) {
++			xml = undefined;
++		}
++		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
++			jQuery.error( "Invalid XML: " + data );
++		}
++		return xml;
++	},
++
++	noop: function() {},
++
++	// Evaluates a script in a global context
++	// Workarounds based on findings by Jim Driscoll
++	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
++	globalEval: function( data ) {
++		if ( data && jQuery.trim( data ) ) {
++			// We use execScript on Internet Explorer
++			// We use an anonymous function so that context is window
++			// rather than jQuery in Firefox
++			( window.execScript || function( data ) {
++				window[ "eval" ].call( window, data );
++			} )( data );
++		}
++	},
++
++	// Convert dashed to camelCase; used by the css and data modules
++	// Microsoft forgot to hump their vendor prefix (#9572)
++	camelCase: function( string ) {
++		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
++	},
++
++	nodeName: function( elem, name ) {
++		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
++	},
++
++	// args is for internal usage only
++	each: function( obj, callback, args ) {
++		var value,
++			i = 0,
++			length = obj.length,
++			isArray = isArraylike( obj );
++
++		if ( args ) {
++			if ( isArray ) {
++				for ( ; i < length; i++ ) {
++					value = callback.apply( obj[ i ], args );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( i in obj ) {
++					value = callback.apply( obj[ i ], args );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			}
++
++		// A special, fast, case for the most common use of each
++		} else {
++			if ( isArray ) {
++				for ( ; i < length; i++ ) {
++					value = callback.call( obj[ i ], i, obj[ i ] );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( i in obj ) {
++					value = callback.call( obj[ i ], i, obj[ i ] );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			}
++		}
++
++		return obj;
++	},
++
++	// Use native String.trim function wherever possible
++	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
++		function( text ) {
++			return text == null ?
++				"" :
++				core_trim.call( text );
++		} :
++
++		// Otherwise use our own trimming functionality
++		function( text ) {
++			return text == null ?
++				"" :
++				( text + "" ).replace( rtrim, "" );
++		},
++
++	// results is for internal usage only
++	makeArray: function( arr, results ) {
++		var ret = results || [];
++
++		if ( arr != null ) {
++			if ( isArraylike( Object(arr) ) ) {
++				jQuery.merge( ret,
++					typeof arr === "string" ?
++					[ arr ] : arr
++				);
++			} else {
++				core_push.call( ret, arr );
++			}
++		}
++
++		return ret;
++	},
++
++	inArray: function( elem, arr, i ) {
++		var len;
++
++		if ( arr ) {
++			if ( core_indexOf ) {
++				return core_indexOf.call( arr, elem, i );
++			}
++
++			len = arr.length;
++			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
++
++			for ( ; i < len; i++ ) {
++				// Skip accessing in sparse arrays
++				if ( i in arr && arr[ i ] === elem ) {
++					return i;
++				}
++			}
++		}
++
++		return -1;
++	},
++
++	merge: function( first, second ) {
++		var l = second.length,
++			i = first.length,
++			j = 0;
++
++		if ( typeof l === "number" ) {
++			for ( ; j < l; j++ ) {
++				first[ i++ ] = second[ j ];
++			}
++		} else {
++			while ( second[j] !== undefined ) {
++				first[ i++ ] = second[ j++ ];
++			}
++		}
++
++		first.length = i;
++
++		return first;
++	},
++
++	grep: function( elems, callback, inv ) {
++		var retVal,
++			ret = [],
++			i = 0,
++			length = elems.length;
++		inv = !!inv;
++
++		// Go through the array, only saving the items
++		// that pass the validator function
++		for ( ; i < length; i++ ) {
++			retVal = !!callback( elems[ i ], i );
++			if ( inv !== retVal ) {
++				ret.push( elems[ i ] );
++			}
++		}
++
++		return ret;
++	},
++
++	// arg is for internal usage only
++	map: function( elems, callback, arg ) {
++		var value,
++			i = 0,
++			length = elems.length,
++			isArray = isArraylike( elems ),
++			ret = [];
++
++		// Go through the array, translating each of the items to their
++		if ( isArray ) {
++			for ( ; i < length; i++ ) {
++				value = callback( elems[ i ], i, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++
++		// Go through every key on the object,
++		} else {
++			for ( i in elems ) {
++				value = callback( elems[ i ], i, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++		}
++
++		// Flatten any nested arrays
++		return core_concat.apply( [], ret );
++	},
++
++	// A global GUID counter for objects
++	guid: 1,
++
++	// Bind a function to a context, optionally partially applying any
++	// arguments.
++	proxy: function( fn, context ) {
++		var args, proxy, tmp;
++
++		if ( typeof context === "string" ) {
++			tmp = fn[ context ];
++			context = fn;
++			fn = tmp;
++		}
++
++		// Quick check to determine if target is callable, in the spec
++		// this throws a TypeError, but we will just return undefined.
++		if ( !jQuery.isFunction( fn ) ) {
++			return undefined;
++		}
++
++		// Simulated bind
++		args = core_slice.call( arguments, 2 );
++		proxy = function() {
++			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
++		};
++
++		// Set the guid of unique handler to the same of original handler, so it can be removed
++		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
++
++		return proxy;
++	},
++
++	// Multifunctional method to get and set values of a collection
++	// The value/s can optionally be executed if it's a function
++	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
++		var i = 0,
++			length = elems.length,
++			bulk = key == null;
++
++		// Sets many values
++		if ( jQuery.type( key ) === "object" ) {
++			chainable = true;
++			for ( i in key ) {
++				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
++			}
++
++		// Sets one value
++		} else if ( value !== undefined ) {
++			chainable = true;
++
++			if ( !jQuery.isFunction( value ) ) {
++				raw = true;
++			}
++
++			if ( bulk ) {
++				// Bulk operations run against the entire set
++				if ( raw ) {
++					fn.call( elems, value );
++					fn = null;
++
++				// ...except when executing function values
++				} else {
++					bulk = fn;
++					fn = function( elem, key, value ) {
++						return bulk.call( jQuery( elem ), value );
++					};
++				}
++			}
++
++			if ( fn ) {
++				for ( ; i < length; i++ ) {
++					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
++				}
++			}
++		}
++
++		return chainable ?
++			elems :
++
++			// Gets
++			bulk ?
++				fn.call( elems ) :
++				length ? fn( elems[0], key ) : emptyGet;
++	},
++
++	now: function() {
++		return ( new Date() ).getTime();
++	}
++});
++
++jQuery.ready.promise = function( obj ) {
++	if ( !readyList ) {
++
++		readyList = jQuery.Deferred();
++
++		// Catch cases where $(document).ready() is called after the browser event has already occurred.
++		// we once tried to use readyState "interactive" here, but it caused issues like the one
++		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
++		if ( document.readyState === "complete" ) {
++			// Handle it asynchronously to allow scripts the opportunity to delay ready
++			setTimeout( jQuery.ready );
++
++		// Standards-based browsers support DOMContentLoaded
++		} else if ( document.addEventListener ) {
++			// Use the handy event callback
++			document.addEventListener( "DOMContentLoaded", completed, false );
++
++			// A fallback to window.onload, that will always work
++			window.addEventListener( "load", completed, false );
++
++		// If IE event model is used
++		} else {
++			// Ensure firing before onload, maybe late but safe also for iframes
++			document.attachEvent( "onreadystatechange", completed );
++
++			// A fallback to window.onload, that will always work
++			window.attachEvent( "onload", completed );
++
++			// If IE and not a frame
++			// continually check to see if the document is ready
++			var top = false;
++
++			try {
++				top = window.frameElement == null && document.documentElement;
++			} catch(e) {}
++
++			if ( top && top.doScroll ) {
++				(function doScrollCheck() {
++					if ( !jQuery.isReady ) {
++
++						try {
++							// Use the trick by Diego Perini
++							// http://javascript.nwbox.com/IEContentLoaded/
++							top.doScroll("left");
++						} catch(e) {
++							return setTimeout( doScrollCheck, 50 );
++						}
++
++						// detach all dom ready events
++						detach();
++
++						// and execute any waiting functions
++						jQuery.ready();
++					}
++				})();
++			}
++		}
++	}
++	return readyList.promise( obj );
++};
++
++// Populate the class2type map
++jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
++	class2type[ "[object " + name + "]" ] = name.toLowerCase();
++});
++
++function isArraylike( obj ) {
++	var length = obj.length,
++		type = jQuery.type( obj );
++
++	if ( jQuery.isWindow( obj ) ) {
++		return false;
++	}
++
++	if ( obj.nodeType === 1 && length ) {
++		return true;
++	}
++
++	return type === "array" || type !== "function" &&
++		( length === 0 ||
++		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
++}
++
++// All jQuery objects should point back to these
++rootjQuery = jQuery(document);
++// String to Object options format cache
++var optionsCache = {};
++
++// Convert String-formatted options into Object-formatted ones and store in cache
++function createOptions( options ) {
++	var object = optionsCache[ options ] = {};
++	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
++		object[ flag ] = true;
++	});
++	return object;
++}
++
++/*
++ * Create a callback list using the following parameters:
++ *
++ *	options: an optional list of space-separated options that will change how
++ *			the callback list behaves or a more traditional option object
++ *
++ * By default a callback list will act like an event callback list and can be
++ * "fired" multiple times.
++ *
++ * Possible options:
++ *
++ *	once:			will ensure the callback list can only be fired once (like a Deferred)
++ *
++ *	memory:			will keep track of previous values and will call any callback added
++ *					after the list has been fired right away with the latest "memorized"
++ *					values (like a Deferred)
++ *
++ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
++ *
++ *	stopOnFalse:	interrupt callings when a callback returns false
++ *
++ */
++jQuery.Callbacks = function( options ) {
++
++	// Convert options from String-formatted to Object-formatted if needed
++	// (we check in cache first)
++	options = typeof options === "string" ?
++		( optionsCache[ options ] || createOptions( options ) ) :
++		jQuery.extend( {}, options );
++
++	var // Flag to know if list is currently firing
++		firing,
++		// Last fire value (for non-forgettable lists)
++		memory,
++		// Flag to know if list was already fired
++		fired,
++		// End of the loop when firing
++		firingLength,
++		// Index of currently firing callback (modified by remove if needed)
++		firingIndex,
++		// First callback to fire (used internally by add and fireWith)
++		firingStart,
++		// Actual callback list
++		list = [],
++		// Stack of fire calls for repeatable lists
++		stack = !options.once && [],
++		// Fire callbacks
++		fire = function( data ) {
++			memory = options.memory && data;
++			fired = true;
++			firingIndex = firingStart || 0;
++			firingStart = 0;
++			firingLength = list.length;
++			firing = true;
++			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
++				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
++					memory = false; // To prevent further calls using add
++					break;
++				}
++			}
++			firing = false;
++			if ( list ) {
++				if ( stack ) {
++					if ( stack.length ) {
++						fire( stack.shift() );
++					}
++				} else if ( memory ) {
++					list = [];
++				} else {
++					self.disable();
++				}
++			}
++		},
++		// Actual Callbacks object
++		self = {
++			// Add a callback or a collection of callbacks to the list
++			add: function() {
++				if ( list ) {
++					// First, we save the current length
++					var start = list.length;
++					(function add( args ) {
++						jQuery.each( args, function( _, arg ) {
++							var type = jQuery.type( arg );
++							if ( type === "function" ) {
++								if ( !options.unique || !self.has( arg ) ) {
++									list.push( arg );
++								}
++							} else if ( arg && arg.length && type !== "string" ) {
++								// Inspect recursively
++								add( arg );
++							}
++						});
++					})( arguments );
++					// Do we need to add the callbacks to the
++					// current firing batch?
++					if ( firing ) {
++						firingLength = list.length;
++					// With memory, if we're not firing then
++					// we should call right away
++					} else if ( memory ) {
++						firingStart = start;
++						fire( memory );
++					}
++				}
++				return this;
++			},
++			// Remove a callback from the list
++			remove: function() {
++				if ( list ) {
++					jQuery.each( arguments, function( _, arg ) {
++						var index;
++						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
++							list.splice( index, 1 );
++							// Handle firing indexes
++							if ( firing ) {
++								if ( index <= firingLength ) {
++									firingLength--;
++								}
++								if ( index <= firingIndex ) {
++									firingIndex--;
++								}
++							}
++						}
++					});
++				}
++				return this;
++			},
++			// Check if a given callback is in the list.
++			// If no argument is given, return whether or not list has callbacks attached.
++			has: function( fn ) {
++				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
++			},
++			// Remove all callbacks from the list
++			empty: function() {
++				list = [];
++				return this;
++			},
++			// Have the list do nothing anymore
++			disable: function() {
++				list = stack = memory = undefined;
++				return this;
++			},
++			// Is it disabled?
++			disabled: function() {
++				return !list;
++			},
++			// Lock the list in its current state
++			lock: function() {
++				stack = undefined;
++				if ( !memory ) {
++					self.disable();
++				}
++				return this;
++			},
++			// Is it locked?
++			locked: function() {
++				return !stack;
++			},
++			// Call all callbacks with the given context and arguments
++			fireWith: function( context, args ) {
++				args = args || [];
++				args = [ context, args.slice ? args.slice() : args ];
++				if ( list && ( !fired || stack ) ) {
++					if ( firing ) {
++						stack.push( args );
++					} else {
++						fire( args );
++					}
++				}
++				return this;
++			},
++			// Call all the callbacks with the given arguments
++			fire: function() {
++				self.fireWith( this, arguments );
++				return this;
++			},
++			// To know if the callbacks have already been called at least once
++			fired: function() {
++				return !!fired;
++			}
++		};
++
++	return self;
++};
++jQuery.extend({
++
++	Deferred: function( func ) {
++		var tuples = [
++				// action, add listener, listener list, final state
++				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
++				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
++				[ "notify", "progress", jQuery.Callbacks("memory") ]
++			],
++			state = "pending",
++			promise = {
++				state: function() {
++					return state;
++				},
++				always: function() {
++					deferred.done( arguments ).fail( arguments );
++					return this;
++				},
++				then: function( /* fnDone, fnFail, fnProgress */ ) {
++					var fns = arguments;
++					return jQuery.Deferred(function( newDefer ) {
++						jQuery.each( tuples, function( i, tuple ) {
++							var action = tuple[ 0 ],
++								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
++							// deferred[ done | fail | progress ] for forwarding actions to newDefer
++							deferred[ tuple[1] ](function() {
++								var returned = fn && fn.apply( this, arguments );
++								if ( returned && jQuery.isFunction( returned.promise ) ) {
++									returned.promise()
++										.done( newDefer.resolve )
++										.fail( newDefer.reject )
++										.progress( newDefer.notify );
++								} else {
++									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
++								}
++							});
++						});
++						fns = null;
++					}).promise();
++				},
++				// Get a promise for this deferred
++				// If obj is provided, the promise aspect is added to the object
++				promise: function( obj ) {
++					return obj != null ? jQuery.extend( obj, promise ) : promise;
++				}
++			},
++			deferred = {};
++
++		// Keep pipe for back-compat
++		promise.pipe = promise.then;
++
++		// Add list-specific methods
++		jQuery.each( tuples, function( i, tuple ) {
++			var list = tuple[ 2 ],
++				stateString = tuple[ 3 ];
++
++			// promise[ done | fail | progress ] = list.add
++			promise[ tuple[1] ] = list.add;
++
++			// Handle state
++			if ( stateString ) {
++				list.add(function() {
++					// state = [ resolved | rejected ]
++					state = stateString;
++
++				// [ reject_list | resolve_list ].disable; progress_list.lock
++				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
++			}
++
++			// deferred[ resolve | reject | notify ]
++			deferred[ tuple[0] ] = function() {
++				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
++				return this;
++			};
++			deferred[ tuple[0] + "With" ] = list.fireWith;
++		});
++
++		// Make the deferred a promise
++		promise.promise( deferred );
++
++		// Call given func if any
++		if ( func ) {
++			func.call( deferred, deferred );
++		}
++
++		// All done!
++		return deferred;
++	},
++
++	// Deferred helper
++	when: function( subordinate /* , ..., subordinateN */ ) {
++		var i = 0,
++			resolveValues = core_slice.call( arguments ),
++			length = resolveValues.length,
++
++			// the count of uncompleted subordinates
++			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
++
++			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
++			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
++
++			// Update function for both resolve and progress values
++			updateFunc = function( i, contexts, values ) {
++				return function( value ) {
++					contexts[ i ] = this;
++					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
++					if( values === progressValues ) {
++						deferred.notifyWith( contexts, values );
++					} else if ( !( --remaining ) ) {
++						deferred.resolveWith( contexts, values );
++					}
++				};
++			},
++
++			progressValues, progressContexts, resolveContexts;
++
++		// add listeners to Deferred subordinates; treat others as resolved
++		if ( length > 1 ) {
++			progressValues = new Array( length );
++			progressContexts = new Array( length );
++			resolveContexts = new Array( length );
++			for ( ; i < length; i++ ) {
++				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
++					resolveValues[ i ].promise()
++						.done( updateFunc( i, resolveContexts, resolveValues ) )
++						.fail( deferred.reject )
++						.progress( updateFunc( i, progressContexts, progressValues ) );
++				} else {
++					--remaining;
++				}
++			}
++		}
++
++		// if we're not waiting on anything, resolve the master
++		if ( !remaining ) {
++			deferred.resolveWith( resolveContexts, resolveValues );
++		}
++
++		return deferred.promise();
++	}
++});
++jQuery.support = (function() {
++
++	var support, all, a,
++		input, select, fragment,
++		opt, eventName, isSupported, i,
++		div = document.createElement("div");
++
++	// Setup
++	div.setAttribute( "className", "t" );
++	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
++
++	// Support tests won't run in some limited or non-browser environments
++	all = div.getElementsByTagName("*");
++	a = div.getElementsByTagName("a")[ 0 ];
++	if ( !all || !a || !all.length ) {
++		return {};
++	}
++
++	// First batch of tests
++	select = document.createElement("select");
++	opt = select.appendChild( document.createElement("option") );
++	input = div.getElementsByTagName("input")[ 0 ];
++
++	a.style.cssText = "top:1px;float:left;opacity:.5";
++	support = {
++		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
++		getSetAttribute: div.className !== "t",
++
++		// IE strips leading whitespace when .innerHTML is used
++		leadingWhitespace: div.firstChild.nodeType === 3,
++
++		// Make sure that tbody elements aren't automatically inserted
++		// IE will insert them into empty tables
++		tbody: !div.getElementsByTagName("tbody").length,
++
++		// Make sure that link elements get serialized correctly by innerHTML
++		// This requires a wrapper element in IE
++		htmlSerialize: !!div.getElementsByTagName("link").length,
++
++		// Get the style information from getAttribute
++		// (IE uses .cssText instead)
++		style: /top/.test( a.getAttribute("style") ),
++
++		// Make sure that URLs aren't manipulated
++		// (IE normalizes it by default)
++		hrefNormalized: a.getAttribute("href") === "/a",
++
++		// Make sure that element opacity exists
++		// (IE uses filter instead)
++		// Use a regex to work around a WebKit issue. See #5145
++		opacity: /^0.5/.test( a.style.opacity ),
++
++		// Verify style float existence
++		// (IE uses styleFloat instead of cssFloat)
++		cssFloat: !!a.style.cssFloat,
++
++		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
++		checkOn: !!input.value,
++
++		// Make sure that a selected-by-default option has a working selected property.
++		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
++		optSelected: opt.selected,
++
++		// Tests for enctype support on a form (#6743)
++		enctype: !!document.createElement("form").enctype,
++
++		// Makes sure cloning an html5 element does not cause problems
++		// Where outerHTML is undefined, this still works
++		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
++
++		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
++		boxModel: document.compatMode === "CSS1Compat",
++
++		// Will be defined later
++		deleteExpando: true,
++		noCloneEvent: true,
++		inlineBlockNeedsLayout: false,
++		shrinkWrapBlocks: false,
++		reliableMarginRight: true,
++		boxSizingReliable: true,
++		pixelPosition: false
++	};
++
++	// Make sure checked status is properly cloned
++	input.checked = true;
++	support.noCloneChecked = input.cloneNode( true ).checked;
++
++	// Make sure that the options inside disabled selects aren't marked as disabled
++	// (WebKit marks them as disabled)
++	select.disabled = true;
++	support.optDisabled = !opt.disabled;
++
++	// Support: IE<9
++	try {
++		delete div.test;
++	} catch( e ) {
++		support.deleteExpando = false;
++	}
++
++	// Check if we can trust getAttribute("value")
++	input = document.createElement("input");
++	input.setAttribute( "value", "" );
++	support.input = input.getAttribute( "value" ) === "";
++
++	// Check if an input maintains its value after becoming a radio
++	input.value = "t";
++	input.setAttribute( "type", "radio" );
++	support.radioValue = input.value === "t";
++
++	// #11217 - WebKit loses check when the name is after the checked attribute
++	input.setAttribute( "checked", "t" );
++	input.setAttribute( "name", "t" );
++
++	fragment = document.createDocumentFragment();
++	fragment.appendChild( input );
++
++	// Check if a disconnected checkbox will retain its checked
++	// value of true after appended to the DOM (IE6/7)
++	support.appendChecked = input.checked;
++
++	// WebKit doesn't clone checked state correctly in fragments
++	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
++
++	// Support: IE<9
++	// Opera does not clone events (and typeof div.attachEvent === undefined).
++	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
++	if ( div.attachEvent ) {
++		div.attachEvent( "onclick", function() {
++			support.noCloneEvent = false;
++		});
++
++		div.cloneNode( true ).click();
++	}
++
++	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
++	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
++	for ( i in { submit: true, change: true, focusin: true }) {
++		div.setAttribute( eventName = "on" + i, "t" );
++
++		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
++	}
++
++	div.style.backgroundClip = "content-box";
++	div.cloneNode( true ).style.backgroundClip = "";
++	support.clearCloneStyle = div.style.backgroundClip === "content-box";
++
++	// Run tests that need a body at doc ready
++	jQuery(function() {
++		var container, marginDiv, tds,
++			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
++			body = document.getElementsByTagName("body")[0];
++
++		if ( !body ) {
++			// Return for frameset docs that don't have a body
++			return;
++		}
++
++		container = document.createElement("div");
++		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
++
++		body.appendChild( container ).appendChild( div );
++
++		// Support: IE8
++		// Check if table cells still have offsetWidth/Height when they are set
++		// to display:none and there are still other visible table cells in a
++		// table row; if so, offsetWidth/Height are not reliable for use when
++		// determining if an element has been hidden directly using
++		// display:none (it is still safe to use offsets if a parent element is
++		// hidden; don safety goggles and see bug #4512 for more information).
++		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
++		tds = div.getElementsByTagName("td");
++		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
++		isSupported = ( tds[ 0 ].offsetHeight === 0 );
++
++		tds[ 0 ].style.display = "";
++		tds[ 1 ].style.display = "none";
++
++		// Support: IE8
++		// Check if empty table cells still have offsetWidth/Height
++		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
++
++		// Check box-sizing and margin behavior
++		div.innerHTML = "";
++		div.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%;";
++		support.boxSizing = ( div.offsetWidth === 4 );
++		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
++
++		// Use window.getComputedStyle because jsdom on node.js will break without it.
++		if ( window.getComputedStyle ) {
++			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
++			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
++
++			// Check if div with explicit width and no margin-right incorrectly
++			// gets computed margin-right based on width of container. (#3333)
++			// Fails in WebKit before Feb 2011 nightlies
++			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++			marginDiv = div.appendChild( document.createElement("div") );
++			marginDiv.style.cssText = div.style.cssText = divReset;
++			marginDiv.style.marginRight = marginDiv.style.width = "0";
++			div.style.width = "1px";
++
++			support.reliableMarginRight =
++				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
++		}
++
++		if ( typeof div.style.zoom !== core_strundefined ) {
++			// Support: IE<8
++			// Check if natively block-level elements act like inline-block
++			// elements when setting their display to 'inline' and giving
++			// them layout
++			div.innerHTML = "";
++			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
++			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
++
++			// Support: IE6
++			// Check if elements with layout shrink-wrap their children
++			div.style.display = "block";
++			div.innerHTML = "<div></div>";
++			div.firstChild.style.width = "5px";
++			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
++
++			if ( support.inlineBlockNeedsLayout ) {
++				// Prevent IE 6 from affecting layout for positioned elements #11048
++				// Prevent IE from shrinking the body in IE 7 mode #12869
++				// Support: IE<8
++				body.style.zoom = 1;
++			}
++		}
++
++		body.removeChild( container );
++
++		// Null elements to avoid leaks in IE
++		container = div = tds = marginDiv = null;
++	});
++
++	// Null elements to avoid leaks in IE
++	all = select = fragment = opt = a = input = null;
++
++	return support;
++})();
++
++var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
++	rmultiDash = /([A-Z])/g;
++
++function internalData( elem, name, data, pvt /* Internal Use Only */ ){
++	if ( !jQuery.acceptData( elem ) ) {
++		return;
++	}
++
++	var thisCache, ret,
++		internalKey = jQuery.expando,
++		getByName = typeof name === "string",
++
++		// We have to handle DOM nodes and JS objects differently because IE6-7
++		// can't GC object references properly across the DOM-JS boundary
++		isNode = elem.nodeType,
++
++		// Only DOM nodes need the global jQuery cache; JS object data is
++		// attached directly to the object so GC can occur automatically
++		cache = isNode ? jQuery.cache : elem,
++
++		// Only defining an ID for JS objects if its cache already exists allows
++		// the code to shortcut on the same path as a DOM node with no cache
++		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
++
++	// Avoid doing any more work than we need to when trying to get data on an
++	// object that has no data at all
++	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
++		return;
++	}
++
++	if ( !id ) {
++		// Only DOM nodes need a new unique ID for each element since their data
++		// ends up in the global cache
++		if ( isNode ) {
++			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
++		} else {
++			id = internalKey;
++		}
++	}
++
++	if ( !cache[ id ] ) {
++		cache[ id ] = {};
++
++		// Avoids exposing jQuery metadata on plain JS objects when the object
++		// is serialized using JSON.stringify
++		if ( !isNode ) {
++			cache[ id ].toJSON = jQuery.noop;
++		}
++	}
++
++	// An object can be passed to jQuery.data instead of a key/value pair; this gets
++	// shallow copied over onto the existing cache
++	if ( typeof name === "object" || typeof name === "function" ) {
++		if ( pvt ) {
++			cache[ id ] = jQuery.extend( cache[ id ], name );
++		} else {
++			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
++		}
++	}
++
++	thisCache = cache[ id ];
++
++	// jQuery data() is stored in a separate object inside the object's internal data
++	// cache in order to avoid key collisions between internal data and user-defined
++	// data.
++	if ( !pvt ) {
++		if ( !thisCache.data ) {
++			thisCache.data = {};
++		}
++
++		thisCache = thisCache.data;
++	}
++
++	if ( data !== undefined ) {
++		thisCache[ jQuery.camelCase( name ) ] = data;
++	}
++
++	// Check for both converted-to-camel and non-converted data property names
++	// If a data property was specified
++	if ( getByName ) {
++
++		// First Try to find as-is property data
++		ret = thisCache[ name ];
++
++		// Test for null|undefined property data
++		if ( ret == null ) {
++
++			// Try to find the camelCased property
++			ret = thisCache[ jQuery.camelCase( name ) ];
++		}
++	} else {
++		ret = thisCache;
++	}
++
++	return ret;
++}
++
++function internalRemoveData( elem, name, pvt ) {
++	if ( !jQuery.acceptData( elem ) ) {
++		return;
++	}
++
++	var i, l, thisCache,
++		isNode = elem.nodeType,
++
++		// See jQuery.data for more information
++		cache = isNode ? jQuery.cache : elem,
++		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
++
++	// If there is already no cache entry for this object, there is no
++	// purpose in continuing
++	if ( !cache[ id ] ) {
++		return;
++	}
++
++	if ( name ) {
++
++		thisCache = pvt ? cache[ id ] : cache[ id ].data;
++
++		if ( thisCache ) {
++
++			// Support array or space separated string names for data keys
++			if ( !jQuery.isArray( name ) ) {
++
++				// try the string as a key before any manipulation
++				if ( name in thisCache ) {
++					name = [ name ];
++				} else {
++
++					// split the camel cased version by spaces unless a key with the spaces exists
++					name = jQuery.camelCase( name );
++					if ( name in thisCache ) {
++						name = [ name ];
++					} else {
++						name = name.split(" ");
++					}
++				}
++			} else {
++				// If "name" is an array of keys...
++				// When data is initially created, via ("key", "val") signature,
++				// keys will be converted to camelCase.
++				// Since there is no way to tell _how_ a key was added, remove
++				// both plain key and camelCase key. #12786
++				// This will only penalize the array argument path.
++				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
++			}
++
++			for ( i = 0, l = name.length; i < l; i++ ) {
++				delete thisCache[ name[i] ];
++			}
++
++			// If there is no data left in the cache, we want to continue
++			// and let the cache object itself get destroyed
++			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
++				return;
++			}
++		}
++	}
++
++	// See jQuery.data for more information
++	if ( !pvt ) {
++		delete cache[ id ].data;
++
++		// Don't destroy the parent cache unless the internal data object
++		// had been the only thing left in it
++		if ( !isEmptyDataObject( cache[ id ] ) ) {
++			return;
++		}
++	}
++
++	// Destroy the cache
++	if ( isNode ) {
++		jQuery.cleanData( [ elem ], true );
++
++	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
++	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
++		delete cache[ id ];
++
++	// When all else fails, null
++	} else {
++		cache[ id ] = null;
++	}
++}
++
++jQuery.extend({
++	cache: {},
++
++	// Unique for each copy of jQuery on the page
++	// Non-digits removed to match rinlinejQuery
++	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
++
++	// The following elements throw uncatchable exceptions if you
++	// attempt to add expando properties to them.
++	noData: {
++		"embed": true,
++		// Ban all objects except for Flash (which handle expandos)
++		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
++		"applet": true
++	},
++
++	hasData: function( elem ) {
++		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
++		return !!elem && !isEmptyDataObject( elem );
++	},
++
++	data: function( elem, name, data ) {
++		return internalData( elem, name, data );
++	},
++
++	removeData: function( elem, name ) {
++		return internalRemoveData( elem, name );
++	},
++
++	// For internal use only.
++	_data: function( elem, name, data ) {
++		return internalData( elem, name, data, true );
++	},
++
++	_removeData: function( elem, name ) {
++		return internalRemoveData( elem, name, true );
++	},
++
++	// A method for determining if a DOM node can handle the data expando
++	acceptData: function( elem ) {
++		// Do not set data on non-element because it will not be cleared (#8335).
++		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
++			return false;
++		}
++
++		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
++
++		// nodes accept data unless otherwise specified; rejection can be conditional
++		return !noData || noData !== true && elem.getAttribute("classid") === noData;
++	}
++});
++
++jQuery.fn.extend({
++	data: function( key, value ) {
++		var attrs, name,
++			elem = this[0],
++			i = 0,
++			data = null;
++
++		// Gets all values
++		if ( key === undefined ) {
++			if ( this.length ) {
++				data = jQuery.data( elem );
++
++				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
++					attrs = elem.attributes;
++					for ( ; i < attrs.length; i++ ) {
++						name = attrs[i].name;
++
++						if ( !name.indexOf( "data-" ) ) {
++							name = jQuery.camelCase( name.slice(5) );
++
++							dataAttr( elem, name, data[ name ] );
++						}
++					}
++					jQuery._data( elem, "parsedAttrs", true );
++				}
++			}
++
++			return data;
++		}
++
++		// Sets multiple values
++		if ( typeof key === "object" ) {
++			return this.each(function() {
++				jQuery.data( this, key );
++			});
++		}
++
++		return jQuery.access( this, function( value ) {
++
++			if ( value === undefined ) {
++				// Try to fetch any internally stored data first
++				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
++			}
++
++			this.each(function() {
++				jQuery.data( this, key, value );
++			});
++		}, null, value, arguments.length > 1, null, true );
++	},
++
++	removeData: function( key ) {
++		return this.each(function() {
++			jQuery.removeData( this, key );
++		});
++	}
++});
++
++function dataAttr( elem, key, data ) {
++	// If nothing was found internally, try to fetch any
++	// data from the HTML5 data-* attribute
++	if ( data === undefined && elem.nodeType === 1 ) {
++
++		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
++
++		data = elem.getAttribute( name );
++
++		if ( typeof data === "string" ) {
++			try {
++				data = data === "true" ? true :
++					data === "false" ? false :
++					data === "null" ? null :
++					// Only convert to a number if it doesn't change the string
++					+data + "" === data ? +data :
++					rbrace.test( data ) ? jQuery.parseJSON( data ) :
++						data;
++			} catch( e ) {}
++
++			// Make sure we set the data so it isn't changed later
++			jQuery.data( elem, key, data );
++
++		} else {
++			data = undefined;
++		}
++	}
++
++	return data;
++}
++
++// checks a cache object for emptiness
++function isEmptyDataObject( obj ) {
++	var name;
++	for ( name in obj ) {
++
++		// if the public data object is empty, the private is still empty
++		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
++			continue;
++		}
++		if ( name !== "toJSON" ) {
++			return false;
++		}
++	}
++
++	return true;
++}
++jQuery.extend({
++	queue: function( elem, type, data ) {
++		var queue;
++
++		if ( elem ) {
++			type = ( type || "fx" ) + "queue";
++			queue = jQuery._data( elem, type );
++
++			// Speed up dequeue by getting out quickly if this is just a lookup
++			if ( data ) {
++				if ( !queue || jQuery.isArray(data) ) {
++					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
++				} else {
++					queue.push( data );
++				}
++			}
++			return queue || [];
++		}
++	},
++
++	dequeue: function( elem, type ) {
++		type = type || "fx";
++
++		var queue = jQuery.queue( elem, type ),
++			startLength = queue.length,
++			fn = queue.shift(),
++			hooks = jQuery._queueHooks( elem, type ),
++			next = function() {
++				jQuery.dequeue( elem, type );
++			};
++
++		// If the fx queue is dequeued, always remove the progress sentinel
++		if ( fn === "inprogress" ) {
++			fn = queue.shift();
++			startLength--;
++		}
++
++		hooks.cur = fn;
++		if ( fn ) {
++
++			// Add a progress sentinel to prevent the fx queue from being
++			// automatically dequeued
++			if ( type === "fx" ) {
++				queue.unshift( "inprogress" );
++			}
++
++			// clear up the last queue stop function
++			delete hooks.stop;
++			fn.call( elem, next, hooks );
++		}
++
++		if ( !startLength && hooks ) {
++			hooks.empty.fire();
++		}
++	},
++
++	// not intended for public consumption - generates a queueHooks object, or returns the current one
++	_queueHooks: function( elem, type ) {
++		var key = type + "queueHooks";
++		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
++			empty: jQuery.Callbacks("once memory").add(function() {
++				jQuery._removeData( elem, type + "queue" );
++				jQuery._removeData( elem, key );
++			})
++		});
++	}
++});
++
++jQuery.fn.extend({
++	queue: function( type, data ) {
++		var setter = 2;
++
++		if ( typeof type !== "string" ) {
++			data = type;
++			type = "fx";
++			setter--;
++		}
++
++		if ( arguments.length < setter ) {
++			return jQuery.queue( this[0], type );
++		}
++
++		return data === undefined ?
++			this :
++			this.each(function() {
++				var queue = jQuery.queue( this, type, data );
++
++				// ensure a hooks for this queue
++				jQuery._queueHooks( this, type );
++
++				if ( type === "fx" && queue[0] !== "inprogress" ) {
++					jQuery.dequeue( this, type );
++				}
++			});
++	},
++	dequeue: function( type ) {
++		return this.each(function() {
++			jQuery.dequeue( this, type );
++		});
++	},
++	// Based off of the plugin by Clint Helfers, with permission.
++	// http://blindsignals.com/index.php/2009/07/jquery-delay/
++	delay: function( time, type ) {
++		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
++		type = type || "fx";
++
++		return this.queue( type, function( next, hooks ) {
++			var timeout = setTimeout( next, time );
++			hooks.stop = function() {
++				clearTimeout( timeout );
++			};
++		});
++	},
++	clearQueue: function( type ) {
++		return this.queue( type || "fx", [] );
++	},
++	// Get a promise resolved when queues of a certain type
++	// are emptied (fx is the type by default)
++	promise: function( type, obj ) {
++		var tmp,
++			count = 1,
++			defer = jQuery.Deferred(),
++			elements = this,
++			i = this.length,
++			resolve = function() {
++				if ( !( --count ) ) {
++					defer.resolveWith( elements, [ elements ] );
++				}
++			};
++
++		if ( typeof type !== "string" ) {
++			obj = type;
++			type = undefined;
++		}
++		type = type || "fx";
++
++		while( i-- ) {
++			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
++			if ( tmp && tmp.empty ) {
++				count++;
++				tmp.empty.add( resolve );
++			}
++		}
++		resolve();
++		return defer.promise( obj );
++	}
++});
++var nodeHook, boolHook,
++	rclass = /[\t\r\n]/g,
++	rreturn = /\r/g,
++	rfocusable = /^(?:input|select|textarea|button|object)$/i,
++	rclickable = /^(?:a|area)$/i,
++	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
++	ruseDefault = /^(?:checked|selected)$/i,
++	getSetAttribute = jQuery.support.getSetAttribute,
++	getSetInput = jQuery.support.input;
++
++jQuery.fn.extend({
++	attr: function( name, value ) {
++		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
++	},
++
++	removeAttr: function( name ) {
++		return this.each(function() {
++			jQuery.removeAttr( this, name );
++		});
++	},
++
++	prop: function( name, value ) {
++		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
++	},
++
++	removeProp: function( name ) {
++		name = jQuery.propFix[ name ] || name;
++		return this.each(function() {
++			// try/catch handles cases where IE balks (such as removing a property on window)
++			try {
++				this[ name ] = undefined;
++				delete this[ name ];
++			} catch( e ) {}
++		});
++	},
++
++	addClass: function( value ) {
++		var classes, elem, cur, clazz, j,
++			i = 0,
++			len = this.length,
++			proceed = typeof value === "string" && value;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).addClass( value.call( this, j, this.className ) );
++			});
++		}
++
++		if ( proceed ) {
++			// The disjunction here is for better compressibility (see removeClass)
++			classes = ( value || "" ).match( core_rnotwhite ) || [];
++
++			for ( ; i < len; i++ ) {
++				elem = this[ i ];
++				cur = elem.nodeType === 1 && ( elem.className ?
++					( " " + elem.className + " " ).replace( rclass, " " ) :
++					" "
++				);
++
++				if ( cur ) {
++					j = 0;
++					while ( (clazz = classes[j++]) ) {
++						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
++							cur += clazz + " ";
++						}
++					}
++					elem.className = jQuery.trim( cur );
++
++				}
++			}
++		}
++
++		return this;
++	},
++
++	removeClass: function( value ) {
++		var classes, elem, cur, clazz, j,
++			i = 0,
++			len = this.length,
++			proceed = arguments.length === 0 || typeof value === "string" && value;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).removeClass( value.call( this, j, this.className ) );
++			});
++		}
++		if ( proceed ) {
++			classes = ( value || "" ).match( core_rnotwhite ) || [];
++
++			for ( ; i < len; i++ ) {
++				elem = this[ i ];
++				// This expression is here for better compressibility (see addClass)
++				cur = elem.nodeType === 1 && ( elem.className ?
++					( " " + elem.className + " " ).replace( rclass, " " ) :
++					""
++				);
++
++				if ( cur ) {
++					j = 0;
++					while ( (clazz = classes[j++]) ) {
++						// Remove *all* instances
++						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
++							cur = cur.replace( " " + clazz + " ", " " );
++						}
++					}
++					elem.className = value ? jQuery.trim( cur ) : "";
++				}
++			}
++		}
++
++		return this;
++	},
++
++	toggleClass: function( value, stateVal ) {
++		var type = typeof value,
++			isBool = typeof stateVal === "boolean";
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( i ) {
++				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
++			});
++		}
++
++		return this.each(function() {
++			if ( type === "string" ) {
++				// toggle individual class names
++				var className,
++					i = 0,
++					self = jQuery( this ),
++					state = stateVal,
++					classNames = value.match( core_rnotwhite ) || [];
++
++				while ( (className = classNames[ i++ ]) ) {
++					// check each className given, space separated list
++					state = isBool ? state : !self.hasClass( className );
++					self[ state ? "addClass" : "removeClass" ]( className );
++				}
++
++			// Toggle whole class name
++			} else if ( type === core_strundefined || type === "boolean" ) {
++				if ( this.className ) {
++					// store className if set
++					jQuery._data( this, "__className__", this.className );
++				}
++
++				// If the element has a class name or if we're passed "false",
++				// then remove the whole classname (if there was one, the above saved it).
++				// Otherwise bring back whatever was previously saved (if anything),
++				// falling back to the empty string if nothing was stored.
++				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
++			}
++		});
++	},
++
++	hasClass: function( selector ) {
++		var className = " " + selector + " ",
++			i = 0,
++			l = this.length;
++		for ( ; i < l; i++ ) {
++			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
++				return true;
++			}
++		}
++
++		return false;
++	},
++
++	val: function( value ) {
++		var ret, hooks, isFunction,
++			elem = this[0];
++
++		if ( !arguments.length ) {
++			if ( elem ) {
++				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
++
++				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
++					return ret;
++				}
++
++				ret = elem.value;
++
++				return typeof ret === "string" ?
++					// handle most common string cases
++					ret.replace(rreturn, "") :
++					// handle cases where value is null/undef or number
++					ret == null ? "" : ret;
++			}
++
++			return;
++		}
++
++		isFunction = jQuery.isFunction( value );
++
++		return this.each(function( i ) {
++			var val,
++				self = jQuery(this);
++
++			if ( this.nodeType !== 1 ) {
++				return;
++			}
++
++			if ( isFunction ) {
++				val = value.call( this, i, self.val() );
++			} else {
++				val = value;
++			}
++
++			// Treat null/undefined as ""; convert numbers to string
++			if ( val == null ) {
++				val = "";
++			} else if ( typeof val === "number" ) {
++				val += "";
++			} else if ( jQuery.isArray( val ) ) {
++				val = jQuery.map(val, function ( value ) {
++					return value == null ? "" : value + "";
++				});
++			}
++
++			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
++
++			// If set returns undefined, fall back to normal setting
++			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
++				this.value = val;
++			}
++		});
++	}
++});
++
++jQuery.extend({
++	valHooks: {
++		option: {
++			get: function( elem ) {
++				// attributes.value is undefined in Blackberry 4.7 but
++				// uses .value. See #6932
++				var val = elem.attributes.value;
++				return !val || val.specified ? elem.value : elem.text;
++			}
++		},
++		select: {
++			get: function( elem ) {
++				var value, option,
++					options = elem.options,
++					index = elem.selectedIndex,
++					one = elem.type === "select-one" || index < 0,
++					values = one ? null : [],
++					max = one ? index + 1 : options.length,
++					i = index < 0 ?
++						max :
++						one ? index : 0;
++
++				// Loop through all the selected options
++				for ( ; i < max; i++ ) {
++					option = options[ i ];
++
++					// oldIE doesn't update selected after form reset (#2551)
++					if ( ( option.selected || i === index ) &&
++							// Don't return options that are disabled or in a disabled optgroup
++							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
++							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
++
++						// Get the specific value for the option
++						value = jQuery( option ).val();
++
++						// We don't need an array for one selects
++						if ( one ) {
++							return value;
++						}
++
++						// Multi-Selects return an array
++						values.push( value );
++					}
++				}
++
++				return values;
++			},
++
++			set: function( elem, value ) {
++				var values = jQuery.makeArray( value );
++
++				jQuery(elem).find("option").each(function() {
++					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
++				});
++
++				if ( !values.length ) {
++					elem.selectedIndex = -1;
++				}
++				return values;
++			}
++		}
++	},
++
++	attr: function( elem, name, value ) {
++		var hooks, notxml, ret,
++			nType = elem.nodeType;
++
++		// don't get/set attributes on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return;
++		}
++
++		// Fallback to prop when attributes are not supported
++		if ( typeof elem.getAttribute === core_strundefined ) {
++			return jQuery.prop( elem, name, value );
++		}
++
++		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		// All attributes are lowercase
++		// Grab necessary hook if one is defined
++		if ( notxml ) {
++			name = name.toLowerCase();
++			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
++		}
++
++		if ( value !== undefined ) {
++
++			if ( value === null ) {
++				jQuery.removeAttr( elem, name );
++
++			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				elem.setAttribute( name, value + "" );
++				return value;
++			}
++
++		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
++			return ret;
++
++		} else {
++
++			// In IE9+, Flash objects don't have .getAttribute (#12945)
++			// Support: IE9+
++			if ( typeof elem.getAttribute !== core_strundefined ) {
++				ret =  elem.getAttribute( name );
++			}
++
++			// Non-existent attributes return null, we normalize to undefined
++			return ret == null ?
++				undefined :
++				ret;
++		}
++	},
++
++	removeAttr: function( elem, value ) {
++		var name, propName,
++			i = 0,
++			attrNames = value && value.match( core_rnotwhite );
++
++		if ( attrNames && elem.nodeType === 1 ) {
++			while ( (name = attrNames[i++]) ) {
++				propName = jQuery.propFix[ name ] || name;
++
++				// Boolean attributes get special treatment (#10870)
++				if ( rboolean.test( name ) ) {
++					// Set corresponding property to false for boolean attributes
++					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
++					if ( !getSetAttribute && ruseDefault.test( name ) ) {
++						elem[ jQuery.camelCase( "default-" + name ) ] =
++							elem[ propName ] = false;
++					} else {
++						elem[ propName ] = false;
++					}
++
++				// See #9699 for explanation of this approach (setting first, then removal)
++				} else {
++					jQuery.attr( elem, name, "" );
++				}
++
++				elem.removeAttribute( getSetAttribute ? name : propName );
++			}
++		}
++	},
++
++	attrHooks: {
++		type: {
++			set: function( elem, value ) {
++				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
++					// Setting the type on a radio button after the value resets the value in IE6-9
++					// Reset value to default in case type is set after value during creation
++					var val = elem.value;
++					elem.setAttribute( "type", value );
++					if ( val ) {
++						elem.value = val;
++					}
++					return value;
++				}
++			}
++		}
++	},
++
++	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( elem, name, value ) {
++		var ret, hooks, notxml,
++			nType = elem.nodeType;
++
++		// don't get/set properties on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return;
++		}
++
++		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		if ( notxml ) {
++			// Fix name and attach hooks
++			name = jQuery.propFix[ name ] || name;
++			hooks = jQuery.propHooks[ name ];
++		}
++
++		if ( value !== undefined ) {
++			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				return ( elem[ name ] = value );
++			}
++
++		} else {
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
++				return ret;
++
++			} else {
++				return elem[ name ];
++			}
++		}
++	},
++
++	propHooks: {
++		tabIndex: {
++			get: function( elem ) {
++				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
++				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
++				var attributeNode = elem.getAttributeNode("tabindex");
++
++				return attributeNode && attributeNode.specified ?
++					parseInt( attributeNode.value, 10 ) :
++					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
++						0 :
++						undefined;
++			}
++		}
++	}
++});
++
++// Hook for boolean attributes
++boolHook = {
++	get: function( elem, name ) {
++		var
++			// Use .prop to determine if this attribute is understood as boolean
++			prop = jQuery.prop( elem, name ),
++
++			// Fetch it accordingly
++			attr = typeof prop === "boolean" && elem.getAttribute( name ),
++			detail = typeof prop === "boolean" ?
++
++				getSetInput && getSetAttribute ?
++					attr != null :
++					// oldIE fabricates an empty string for missing boolean attributes
++					// and conflates checked/selected into attroperties
++					ruseDefault.test( name ) ?
++						elem[ jQuery.camelCase( "default-" + name ) ] :
++						!!attr :
++
++				// fetch an attribute node for properties not recognized as boolean
++				elem.getAttributeNode( name );
++
++		return detail && detail.value !== false ?
++			name.toLowerCase() :
++			undefined;
++	},
++	set: function( elem, value, name ) {
++		if ( value === false ) {
++			// Remove boolean attributes when set to false
++			jQuery.removeAttr( elem, name );
++		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
++			// IE<8 needs the *property* name
++			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
++
++		// Use defaultChecked and defaultSelected for oldIE
++		} else {
++			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
++		}
++
++		return name;
++	}
++};
++
++// fix oldIE value attroperty
++if ( !getSetInput || !getSetAttribute ) {
++	jQuery.attrHooks.value = {
++		get: function( elem, name ) {
++			var ret = elem.getAttributeNode( name );
++			return jQuery.nodeName( elem, "input" ) ?
++
++				// Ignore the value *property* by using defaultValue
++				elem.defaultValue :
++
++				ret && ret.specified ? ret.value : undefined;
++		},
++		set: function( elem, value, name ) {
++			if ( jQuery.nodeName( elem, "input" ) ) {
++				// Does not return so that setAttribute is also used
++				elem.defaultValue = value;
++			} else {
++				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
++				return nodeHook && nodeHook.set( elem, value, name );
++			}
++		}
++	};
++}
++
++// IE6/7 do not support getting/setting some attributes with get/setAttribute
++if ( !getSetAttribute ) {
++
++	// Use this for any attribute in IE6/7
++	// This fixes almost every IE6/7 issue
++	nodeHook = jQuery.valHooks.button = {
++		get: function( elem, name ) {
++			var ret = elem.getAttributeNode( name );
++			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
++				ret.value :
++				undefined;
++		},
++		set: function( elem, value, name ) {
++			// Set the existing or create a new attribute node
++			var ret = elem.getAttributeNode( name );
++			if ( !ret ) {
++				elem.setAttributeNode(
++					(ret = elem.ownerDocument.createAttribute( name ))
++				);
++			}
++
++			ret.value = value += "";
++
++			// Break association with cloned elements by also using setAttribute (#9646)
++			return name === "value" || value === elem.getAttribute( name ) ?
++				value :
++				undefined;
++		}
++	};
++
++	// Set contenteditable to false on removals(#10429)
++	// Setting to empty string throws an error as an invalid value
++	jQuery.attrHooks.contenteditable = {
++		get: nodeHook.get,
++		set: function( elem, value, name ) {
++			nodeHook.set( elem, value === "" ? false : value, name );
++		}
++	};
++
++	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
++	// This is for removals
++	jQuery.each([ "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			set: function( elem, value ) {
++				if ( value === "" ) {
++					elem.setAttribute( name, "auto" );
++					return value;
++				}
++			}
++		});
++	});
++}
++
++
++// Some attributes require a special call on IE
++// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
++if ( !jQuery.support.hrefNormalized ) {
++	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			get: function( elem ) {
++				var ret = elem.getAttribute( name, 2 );
++				return ret == null ? undefined : ret;
++			}
++		});
++	});
++
++	// href/src property should get the full normalized URL (#10299/#12915)
++	jQuery.each([ "href", "src" ], function( i, name ) {
++		jQuery.propHooks[ name ] = {
++			get: function( elem ) {
++				return elem.getAttribute( name, 4 );
++			}
++		};
++	});
++}
++
++if ( !jQuery.support.style ) {
++	jQuery.attrHooks.style = {
++		get: function( elem ) {
++			// Return undefined in the case of empty string
++			// Note: IE uppercases css property names, but if we were to .toLowerCase()
++			// .cssText, that would destroy case senstitivity in URL's, like in "background"
++			return elem.style.cssText || undefined;
++		},
++		set: function( elem, value ) {
++			return ( elem.style.cssText = value + "" );
++		}
++	};
++}
++
++// Safari mis-reports the default selected property of an option
++// Accessing the parent's selectedIndex property fixes it
++if ( !jQuery.support.optSelected ) {
++	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
++		get: function( elem ) {
++			var parent = elem.parentNode;
++
++			if ( parent ) {
++				parent.selectedIndex;
++
++				// Make sure that it also works with optgroups, see #5701
++				if ( parent.parentNode ) {
++					parent.parentNode.selectedIndex;
++				}
++			}
++			return null;
++		}
++	});
++}
++
++// IE6/7 call enctype encoding
++if ( !jQuery.support.enctype ) {
++	jQuery.propFix.enctype = "encoding";
++}
++
++// Radios and checkboxes getter/setter
++if ( !jQuery.support.checkOn ) {
++	jQuery.each([ "radio", "checkbox" ], function() {
++		jQuery.valHooks[ this ] = {
++			get: function( elem ) {
++				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
++				return elem.getAttribute("value") === null ? "on" : elem.value;
++			}
++		};
++	});
++}
++jQuery.each([ "radio", "checkbox" ], function() {
++	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
++		set: function( elem, value ) {
++			if ( jQuery.isArray( value ) ) {
++				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
++			}
++		}
++	});
++});
++var rformElems = /^(?:input|select|textarea)$/i,
++	rkeyEvent = /^key/,
++	rmouseEvent = /^(?:mouse|contextmenu)|click/,
++	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
++	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
++
++function returnTrue() {
++	return true;
++}
++
++function returnFalse() {
++	return false;
++}
++
++/*
++ * Helper functions for managing events -- not part of the public interface.
++ * Props to Dean Edwards' addEvent library for many of the ideas.
++ */
++jQuery.event = {
++
++	global: {},
++
++	add: function( elem, types, handler, data, selector ) {
++		var tmp, events, t, handleObjIn,
++			special, eventHandle, handleObj,
++			handlers, type, namespaces, origType,
++			elemData = jQuery._data( elem );
++
++		// Don't attach events to noData or text/comment nodes (but allow plain objects)
++		if ( !elemData ) {
++			return;
++		}
++
++		// Caller can pass in an object of custom data in lieu of the handler
++		if ( handler.handler ) {
++			handleObjIn = handler;
++			handler = handleObjIn.handler;
++			selector = handleObjIn.selector;
++		}
++
++		// Make sure that the handler has a unique ID, used to find/remove it later
++		if ( !handler.guid ) {
++			handler.guid = jQuery.guid++;
++		}
++
++		// Init the element's event structure and main handler, if this is the first
++		if ( !(events = elemData.events) ) {
++			events = elemData.events = {};
++		}
++		if ( !(eventHandle = elemData.handle) ) {
++			eventHandle = elemData.handle = function( e ) {
++				// Discard the second event of a jQuery.event.trigger() and
++				// when an event is called after a page has unloaded
++				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
++					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
++					undefined;
++			};
++			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
++			eventHandle.elem = elem;
++		}
++
++		// Handle multiple events separated by a space
++		// jQuery(...).bind("mouseover mouseout", fn);
++		types = ( types || "" ).match( core_rnotwhite ) || [""];
++		t = types.length;
++		while ( t-- ) {
++			tmp = rtypenamespace.exec( types[t] ) || [];
++			type = origType = tmp[1];
++			namespaces = ( tmp[2] || "" ).split( "." ).sort();
++
++			// If event changes its type, use the special event handlers for the changed type
++			special = jQuery.event.special[ type ] || {};
++
++			// If selector defined, determine special event api type, otherwise given type
++			type = ( selector ? special.delegateType : special.bindType ) || type;
++
++			// Update special based on newly reset type
++			special = jQuery.event.special[ type ] || {};
++
++			// handleObj is passed to all event handlers
++			handleObj = jQuery.extend({
++				type: type,
++				origType: origType,
++				data: data,
++				handler: handler,
++				guid: handler.guid,
++				selector: selector,
++				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
++				namespace: namespaces.join(".")
++			}, handleObjIn );
++
++			// Init the event handler queue if we're the first
++			if ( !(handlers = events[ type ]) ) {
++				handlers = events[ type ] = [];
++				handlers.delegateCount = 0;
++
++				// Only use addEventListener/attachEvent if the special events handler returns false
++				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
++					// Bind the global event handler to the element
++					if ( elem.addEventListener ) {
++						elem.addEventListener( type, eventHandle, false );
++
++					} else if ( elem.attachEvent ) {
++						elem.attachEvent( "on" + type, eventHandle );
++					}
++				}
++			}
++
++			if ( special.add ) {
++				special.add.call( elem, handleObj );
++
++				if ( !handleObj.handler.guid ) {
++					handleObj.handler.guid = handler.guid;
++				}
++			}
++
++			// Add to the element's handler list, delegates in front
++			if ( selector ) {
++				handlers.splice( handlers.delegateCount++, 0, handleObj );
++			} else {
++				handlers.push( handleObj );
++			}
++
++			// Keep track of which events have ever been used, for event optimization
++			jQuery.event.global[ type ] = true;
++		}
++
++		// Nullify elem to prevent memory leaks in IE
++		elem = null;
++	},
++
++	// Detach an event or set of events from an element
++	remove: function( elem, types, handler, selector, mappedTypes ) {
++		var j, handleObj, tmp,
++			origCount, t, events,
++			special, handlers, type,
++			namespaces, origType,
++			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
++
++		if ( !elemData || !(events = elemData.events) ) {
++			return;
++		}
++
++		// Once for each type.namespace in types; type may be omitted
++		types = ( types || "" ).match( core_rnotwhite ) || [""];
++		t = types.length;
++		while ( t-- ) {
++			tmp = rtypenamespace.exec( types[t] ) || [];
++			type = origType = tmp[1];
++			namespaces = ( tmp[2] || "" ).split( "." ).sort();
++
++			// Unbind all events (on this namespace, if provided) for the element
++			if ( !type ) {
++				for ( type in events ) {
++					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
++				}
++				continue;
++			}
++
++			special = jQuery.event.special[ type ] || {};
++			type = ( selector ? special.delegateType : special.bindType ) || type;
++			handlers = events[ type ] || [];
++			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
++
++			// Remove matching events
++			origCount = j = handlers.length;
++			while ( j-- ) {
++				handleObj = handlers[ j ];
++
++				if ( ( mappedTypes || origType === handleObj.origType ) &&
++					( !handler || handler.guid === handleObj.guid ) &&
++					( !tmp || tmp.test( handleObj.namespace ) ) &&
++					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
++					handlers.splice( j, 1 );
++
++					if ( handleObj.selector ) {
++						handlers.delegateCount--;
++					}
++					if ( special.remove ) {
++						special.remove.call( elem, handleObj );
++					}
++				}
++			}
++
++			// Remove generic event handler if we removed something and no more handlers exist
++			// (avoids potential for endless recursion during removal of special event handlers)
++			if ( origCount && !handlers.length ) {
++				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
++					jQuery.removeEvent( elem, type, elemData.handle );
++				}
++
++				delete events[ type ];
++			}
++		}
++
++		// Remove the expando if it's no longer used
++		if ( jQuery.isEmptyObject( events ) ) {
++			delete elemData.handle;
++
++			// removeData also checks for emptiness and clears the expando if empty
++			// so use it instead of delete
++			jQuery._removeData( elem, "events" );
++		}
++	},
++
++	trigger: function( event, data, elem, onlyHandlers ) {
++		var handle, ontype, cur,
++			bubbleType, special, tmp, i,
++			eventPath = [ elem || document ],
++			type = core_hasOwn.call( event, "type" ) ? event.type : event,
++			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
++
++		cur = tmp = elem = elem || document;
++
++		// Don't do events on text and comment nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		// focus/blur morphs to focusin/out; ensure we're not firing them right now
++		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
++			return;
++		}
++
++		if ( type.indexOf(".") >= 0 ) {
++			// Namespaced trigger; create a regexp to match event type in handle()
++			namespaces = type.split(".");
++			type = namespaces.shift();
++			namespaces.sort();
++		}
++		ontype = type.indexOf(":") < 0 && "on" + type;
++
++		// Caller can pass in a jQuery.Event object, Object, or just an event type string
++		event = event[ jQuery.expando ] ?
++			event :
++			new jQuery.Event( type, typeof event === "object" && event );
++
++		event.isTrigger = true;
++		event.namespace = namespaces.join(".");
++		event.namespace_re = event.namespace ?
++			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
++			null;
++
++		// Clean up the event in case it is being reused
++		event.result = undefined;
++		if ( !event.target ) {
++			event.target = elem;
++		}
++
++		// Clone any incoming data and prepend the event, creating the handler arg list
++		data = data == null ?
++			[ event ] :
++			jQuery.makeArray( data, [ event ] );
++
++		// Allow special events to draw outside the lines
++		special = jQuery.event.special[ type ] || {};
++		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
++			return;
++		}
++
++		// Determine event propagation path in advance, per W3C events spec (#9951)
++		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
++		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
++
++			bubbleType = special.delegateType || type;
++			if ( !rfocusMorph.test( bubbleType + type ) ) {
++				cur = cur.parentNode;
++			}
++			for ( ; cur; cur = cur.parentNode ) {
++				eventPath.push( cur );
++				tmp = cur;
++			}
++
++			// Only add window if we got to document (e.g., not plain obj or detached DOM)
++			if ( tmp === (elem.ownerDocument || document) ) {
++				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
++			}
++		}
++
++		// Fire handlers on the event path
++		i = 0;
++		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
++
++			event.type = i > 1 ?
++				bubbleType :
++				special.bindType || type;
++
++			// jQuery handler
++			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
++			if ( handle ) {
++				handle.apply( cur, data );
++			}
++
++			// Native handler
++			handle = ontype && cur[ ontype ];
++			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
++				event.preventDefault();
++			}
++		}
++		event.type = type;
++
++		// If nobody prevented the default action, do it now
++		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
++
++			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
++				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
++
++				// Call a native DOM method on the target with the same name name as the event.
++				// Can't use an .isFunction() check here because IE6/7 fails that test.
++				// Don't do default actions on window, that's where global variables be (#6170)
++				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
++
++					// Don't re-trigger an onFOO event when we call its FOO() method
++					tmp = elem[ ontype ];
++
++					if ( tmp ) {
++						elem[ ontype ] = null;
++					}
++
++					// Prevent re-triggering of the same event, since we already bubbled it above
++					jQuery.event.triggered = type;
++					try {
++						elem[ type ]();
++					} catch ( e ) {
++						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
++						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
++					}
++					jQuery.event.triggered = undefined;
++
++					if ( tmp ) {
++						elem[ ontype ] = tmp;
++					}
++				}
++			}
++		}
++
++		return event.result;
++	},
++
++	dispatch: function( event ) {
++
++		// Make a writable jQuery.Event from the native event object
++		event = jQuery.event.fix( event );
++
++		var i, ret, handleObj, matched, j,
++			handlerQueue = [],
++			args = core_slice.call( arguments ),
++			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
++			special = jQuery.event.special[ event.type ] || {};
++
++		// Use the fix-ed jQuery.Event rather than the (read-only) native event
++		args[0] = event;
++		event.delegateTarget = this;
++
++		// Call the preDispatch hook for the mapped type, and let it bail if desired
++		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
++			return;
++		}
++
++		// Determine handlers
++		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
++
++		// Run delegates first; they may want to stop propagation beneath us
++		i = 0;
++		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
++			event.currentTarget = matched.elem;
++
++			j = 0;
++			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
++
++				// Triggered event must either 1) have no namespace, or
++				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
++				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
++
++					event.handleObj = handleObj;
++					event.data = handleObj.data;
++
++					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
++							.apply( matched.elem, args );
++
++					if ( ret !== undefined ) {
++						if ( (event.result = ret) === false ) {
++							event.preventDefault();
++							event.stopPropagation();
++						}
++					}
++				}
++			}
++		}
++
++		// Call the postDispatch hook for the mapped type
++		if ( special.postDispatch ) {
++			special.postDispatch.call( this, event );
++		}
++
++		return event.result;
++	},
++
++	handlers: function( event, handlers ) {
++		var sel, handleObj, matches, i,
++			handlerQueue = [],
++			delegateCount = handlers.delegateCount,
++			cur = event.target;
++
++		// Find delegate handlers
++		// Black-hole SVG <use> instance trees (#13180)
++		// Avoid non-left-click bubbling in Firefox (#3861)
++		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
++
++			for ( ; cur != this; cur = cur.parentNode || this ) {
++
++				// Don't check non-elements (#13208)
++				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
++				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
++					matches = [];
++					for ( i = 0; i < delegateCount; i++ ) {
++						handleObj = handlers[ i ];
++
++						// Don't conflict with Object.prototype properties (#13203)
++						sel = handleObj.selector + " ";
++
++						if ( matches[ sel ] === undefined ) {
++							matches[ sel ] = handleObj.needsContext ?
++								jQuery( sel, this ).index( cur ) >= 0 :
++								jQuery.find( sel, this, null, [ cur ] ).length;
++						}
++						if ( matches[ sel ] ) {
++							matches.push( handleObj );
++						}
++					}
++					if ( matches.length ) {
++						handlerQueue.push({ elem: cur, handlers: matches });
++					}
++				}
++			}
++		}
++
++		// Add the remaining (directly-bound) handlers
++		if ( delegateCount < handlers.length ) {
++			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
++		}
++
++		return handlerQueue;
++	},
++
++	fix: function( event ) {
++		if ( event[ jQuery.expando ] ) {
++			return event;
++		}
++
++		// Create a writable copy of the event object and normalize some properties
++		var i, prop, copy,
++			type = event.type,
++			originalEvent = event,
++			fixHook = this.fixHooks[ type ];
++
++		if ( !fixHook ) {
++			this.fixHooks[ type ] = fixHook =
++				rmouseEvent.test( type ) ? this.mouseHooks :
++				rkeyEvent.test( type ) ? this.keyHooks :
++				{};
++		}
++		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
++
++		event = new jQuery.Event( originalEvent );
++
++		i = copy.length;
++		while ( i-- ) {
++			prop = copy[ i ];
++			event[ prop ] = originalEvent[ prop ];
++		}
++
++		// Support: IE<9
++		// Fix target property (#1925)
++		if ( !event.target ) {
++			event.target = originalEvent.srcElement || document;
++		}
++
++		// Support: Chrome 23+, Safari?
++		// Target should not be a text node (#504, #13143)
++		if ( event.target.nodeType === 3 ) {
++			event.target = event.target.parentNode;
++		}
++
++		// Support: IE<9
++		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
++		event.metaKey = !!event.metaKey;
++
++		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
++	},
++
++	// Includes some event props shared by KeyEvent and MouseEvent
++	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
++
++	fixHooks: {},
++
++	keyHooks: {
++		props: "char charCode key keyCode".split(" "),
++		filter: function( event, original ) {
++
++			// Add which for key events
++			if ( event.which == null ) {
++				event.which = original.charCode != null ? original.charCode : original.keyCode;
++			}
++
++			return event;
++		}
++	},
++
++	mouseHooks: {
++		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
++		filter: function( event, original ) {
++			var body, eventDoc, doc,
++				button = original.button,
++				fromElement = original.fromElement;
++
++			// Calculate pageX/Y if missing and clientX/Y available
++			if ( event.pageX == null && original.clientX != null ) {
++				eventDoc = event.target.ownerDocument || document;
++				doc = eventDoc.documentElement;
++				body = eventDoc.body;
++
++				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
++				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
++			}
++
++			// Add relatedTarget, if necessary
++			if ( !event.relatedTarget && fromElement ) {
++				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
++			}
++
++			// Add which for click: 1 === left; 2 === middle; 3 === right
++			// Note: button is not normalized, so don't use it
++			if ( !event.which && button !== undefined ) {
++				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
++			}
++
++			return event;
++		}
++	},
++
++	special: {
++		load: {
++			// Prevent triggered image.load events from bubbling to window.load
++			noBubble: true
++		},
++		click: {
++			// For checkbox, fire native event so checked state will be right
++			trigger: function() {
++				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
++					this.click();
++					return false;
++				}
++			}
++		},
++		focus: {
++			// Fire native event if possible so blur/focus sequence is correct
++			trigger: function() {
++				if ( this !== document.activeElement && this.focus ) {
++					try {
++						this.focus();
++						return false;
++					} catch ( e ) {
++						// Support: IE<9
++						// If we error on focus to hidden element (#1486, #12518),
++						// let .trigger() run the handlers
++					}
++				}
++			},
++			delegateType: "focusin"
++		},
++		blur: {
++			trigger: function() {
++				if ( this === document.activeElement && this.blur ) {
++					this.blur();
++					return false;
++				}
++			},
++			delegateType: "focusout"
++		},
++
++		beforeunload: {
++			postDispatch: function( event ) {
++
++				// Even when returnValue equals to undefined Firefox will still show alert
++				if ( event.result !== undefined ) {
++					event.originalEvent.returnValue = event.result;
++				}
++			}
++		}
++	},
++
++	simulate: function( type, elem, event, bubble ) {
++		// Piggyback on a donor event to simulate a different one.
++		// Fake originalEvent to avoid donor's stopPropagation, but if the
++		// simulated event prevents default then we do the same on the donor.
++		var e = jQuery.extend(
++			new jQuery.Event(),
++			event,
++			{ type: type,
++				isSimulated: true,
++				originalEvent: {}
++			}
++		);
++		if ( bubble ) {
++			jQuery.event.trigger( e, null, elem );
++		} else {
++			jQuery.event.dispatch.call( elem, e );
++		}
++		if ( e.isDefaultPrevented() ) {
++			event.preventDefault();
++		}
++	}
++};
++
++jQuery.removeEvent = document.removeEventListener ?
++	function( elem, type, handle ) {
++		if ( elem.removeEventListener ) {
++			elem.removeEventListener( type, handle, false );
++		}
++	} :
++	function( elem, type, handle ) {
++		var name = "on" + type;
++
++		if ( elem.detachEvent ) {
++
++			// #8545, #7054, preventing memory leaks for custom events in IE6-8
++			// detachEvent needed property on element, by name of that event, to properly expose it to GC
++			if ( typeof elem[ name ] === core_strundefined ) {
++				elem[ name ] = null;
++			}
++
++			elem.detachEvent( name, handle );
++		}
++	};
++
++jQuery.Event = function( src, props ) {
++	// Allow instantiation without the 'new' keyword
++	if ( !(this instanceof jQuery.Event) ) {
++		return new jQuery.Event( src, props );
++	}
++
++	// Event object
++	if ( src && src.type ) {
++		this.originalEvent = src;
++		this.type = src.type;
++
++		// Events bubbling up the document may have been marked as prevented
++		// by a handler lower down the tree; reflect the correct value.
++		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
++			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
++
++	// Event type
++	} else {
++		this.type = src;
++	}
++
++	// Put explicitly provided properties onto the event object
++	if ( props ) {
++		jQuery.extend( this, props );
++	}
++
++	// Create a timestamp if incoming event doesn't have one
++	this.timeStamp = src && src.timeStamp || jQuery.now();
++
++	// Mark it as fixed
++	this[ jQuery.expando ] = true;
++};
++
++// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
++// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
++jQuery.Event.prototype = {
++	isDefaultPrevented: returnFalse,
++	isPropagationStopped: returnFalse,
++	isImmediatePropagationStopped: returnFalse,
++
++	preventDefault: function() {
++		var e = this.originalEvent;
++
++		this.isDefaultPrevented = returnTrue;
++		if ( !e ) {
++			return;
++		}
++
++		// If preventDefault exists, run it on the original event
++		if ( e.preventDefault ) {
++			e.preventDefault();
++
++		// Support: IE
++		// Otherwise set the returnValue property of the original event to false
++		} else {
++			e.returnValue = false;
++		}
++	},
++	stopPropagation: function() {
++		var e = this.originalEvent;
++
++		this.isPropagationStopped = returnTrue;
++		if ( !e ) {
++			return;
++		}
++		// If stopPropagation exists, run it on the original event
++		if ( e.stopPropagation ) {
++			e.stopPropagation();
++		}
++
++		// Support: IE
++		// Set the cancelBubble property of the original event to true
++		e.cancelBubble = true;
++	},
++	stopImmediatePropagation: function() {
++		this.isImmediatePropagationStopped = returnTrue;
++		this.stopPropagation();
++	}
++};
++
++// Create mouseenter/leave events using mouseover/out and event-time checks
++jQuery.each({
++	mouseenter: "mouseover",
++	mouseleave: "mouseout"
++}, function( orig, fix ) {
++	jQuery.event.special[ orig ] = {
++		delegateType: fix,
++		bindType: fix,
++
++		handle: function( event ) {
++			var ret,
++				target = this,
++				related = event.relatedTarget,
++				handleObj = event.handleObj;
++
++			// For mousenter/leave call the handler if related is outside the target.
++			// NB: No relatedTarget if the mouse left/entered the browser window
++			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
++				event.type = handleObj.origType;
++				ret = handleObj.handler.apply( this, arguments );
++				event.type = fix;
++			}
++			return ret;
++		}
++	};
++});
++
++// IE submit delegation
++if ( !jQuery.support.submitBubbles ) {
++
++	jQuery.event.special.submit = {
++		setup: function() {
++			// Only need this for delegated form submit events
++			if ( jQuery.nodeName( this, "form" ) ) {
++				return false;
++			}
++
++			// Lazy-add a submit handler when a descendant form may potentially be submitted
++			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
++				// Node name check avoids a VML-related crash in IE (#9807)
++				var elem = e.target,
++					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
++				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
++					jQuery.event.add( form, "submit._submit", function( event ) {
++						event._submit_bubble = true;
++					});
++					jQuery._data( form, "submitBubbles", true );
++				}
++			});
++			// return undefined since we don't need an event listener
++		},
++
++		postDispatch: function( event ) {
++			// If form was submitted by the user, bubble the event up the tree
++			if ( event._submit_bubble ) {
++				delete event._submit_bubble;
++				if ( this.parentNode && !event.isTrigger ) {
++					jQuery.event.simulate( "submit", this.parentNode, event, true );
++				}
++			}
++		},
++
++		teardown: function() {
++			// Only need this for delegated form submit events
++			if ( jQuery.nodeName( this, "form" ) ) {
++				return false;
++			}
++
++			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
++			jQuery.event.remove( this, "._submit" );
++		}
++	};
++}
++
++// IE change delegation and checkbox/radio fix
++if ( !jQuery.support.changeBubbles ) {
++
++	jQuery.event.special.change = {
++
++		setup: function() {
++
++			if ( rformElems.test( this.nodeName ) ) {
++				// IE doesn't fire change on a check/radio until blur; trigger it on click
++				// after a propertychange. Eat the blur-change in special.change.handle.
++				// This still fires onchange a second time for check/radio after blur.
++				if ( this.type === "checkbox" || this.type === "radio" ) {
++					jQuery.event.add( this, "propertychange._change", function( event ) {
++						if ( event.originalEvent.propertyName === "checked" ) {
++							this._just_changed = true;
++						}
++					});
++					jQuery.event.add( this, "click._change", function( event ) {
++						if ( this._just_changed && !event.isTrigger ) {
++							this._just_changed = false;
++						}
++						// Allow triggered, simulated change events (#11500)
++						jQuery.event.simulate( "change", this, event, true );
++					});
++				}
++				return false;
++			}
++			// Delegated event; lazy-add a change handler on descendant inputs
++			jQuery.event.add( this, "beforeactivate._change", function( e ) {
++				var elem = e.target;
++
++				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
++					jQuery.event.add( elem, "change._change", function( event ) {
++						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
++							jQuery.event.simulate( "change", this.parentNode, event, true );
++						}
++					});
++					jQuery._data( elem, "changeBubbles", true );
++				}
++			});
++		},
++
++		handle: function( event ) {
++			var elem = event.target;
++
++			// Swallow native change events from checkbox/radio, we already triggered them above
++			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
++				return event.handleObj.handler.apply( this, arguments );
++			}
++		},
++
++		teardown: function() {
++			jQuery.event.remove( this, "._change" );
++
++			return !rformElems.test( this.nodeName );
++		}
++	};
++}
++
++// Create "bubbling" focus and blur events
++if ( !jQuery.support.focusinBubbles ) {
++	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
++
++		// Attach a single capturing handler while someone wants focusin/focusout
++		var attaches = 0,
++			handler = function( event ) {
++				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
++			};
++
++		jQuery.event.special[ fix ] = {
++			setup: function() {
++				if ( attaches++ === 0 ) {
++					document.addEventListener( orig, handler, true );
++				}
++			},
++			teardown: function() {
++				if ( --attaches === 0 ) {
++					document.removeEventListener( orig, handler, true );
++				}
++			}
++		};
++	});
++}
++
++jQuery.fn.extend({
++
++	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
++		var type, origFn;
++
++		// Types can be a map of types/handlers
++		if ( typeof types === "object" ) {
++			// ( types-Object, selector, data )
++			if ( typeof selector !== "string" ) {
++				// ( types-Object, data )
++				data = data || selector;
++				selector = undefined;
++			}
++			for ( type in types ) {
++				this.on( type, selector, data, types[ type ], one );
++			}
++			return this;
++		}
++
++		if ( data == null && fn == null ) {
++			// ( types, fn )
++			fn = selector;
++			data = selector = undefined;
++		} else if ( fn == null ) {
++			if ( typeof selector === "string" ) {
++				// ( types, selector, fn )
++				fn = data;
++				data = undefined;
++			} else {
++				// ( types, data, fn )
++				fn = data;
++				data = selector;
++				selector = undefined;
++			}
++		}
++		if ( fn === false ) {
++			fn = returnFalse;
++		} else if ( !fn ) {
++			return this;
++		}
++
++		if ( one === 1 ) {
++			origFn = fn;
++			fn = function( event ) {
++				// Can use an empty set, since event contains the info
++				jQuery().off( event );
++				return origFn.apply( this, arguments );
++			};
++			// Use same guid so caller can remove using origFn
++			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
++		}
++		return this.each( function() {
++			jQuery.event.add( this, types, fn, data, selector );
++		});
++	},
++	one: function( types, selector, data, fn ) {
++		return this.on( types, selector, data, fn, 1 );
++	},
++	off: function( types, selector, fn ) {
++		var handleObj, type;
++		if ( types && types.preventDefault && types.handleObj ) {
++			// ( event )  dispatched jQuery.Event
++			handleObj = types.handleObj;
++			jQuery( types.delegateTarget ).off(
++				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
++				handleObj.selector,
++				handleObj.handler
++			);
++			return this;
++		}
++		if ( typeof types === "object" ) {
++			// ( types-object [, selector] )
++			for ( type in types ) {
++				this.off( type, selector, types[ type ] );
++			}
++			return this;
++		}
++		if ( selector === false || typeof selector === "function" ) {
++			// ( types [, fn] )
++			fn = selector;
++			selector = undefined;
++		}
++		if ( fn === false ) {
++			fn = returnFalse;
++		}
++		return this.each(function() {
++			jQuery.event.remove( this, types, fn, selector );
++		});
++	},
++
++	bind: function( types, data, fn ) {
++		return this.on( types, null, data, fn );
++	},
++	unbind: function( types, fn ) {
++		return this.off( types, null, fn );
++	},
++
++	delegate: function( selector, types, data, fn ) {
++		return this.on( types, selector, data, fn );
++	},
++	undelegate: function( selector, types, fn ) {
++		// ( namespace ) or ( selector, types [, fn] )
++		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
++	},
++
++	trigger: function( type, data ) {
++		return this.each(function() {
++			jQuery.event.trigger( type, data, this );
++		});
++	},
++	triggerHandler: function( type, data ) {
++		var elem = this[0];
++		if ( elem ) {
++			return jQuery.event.trigger( type, data, elem, true );
++		}
++	}
++});
++/*!
++ * Sizzle CSS Selector Engine
++ * Copyright 2012 jQuery Foundation and other contributors
++ * Released under the MIT license
++ * http://sizzlejs.com/
++ */
++(function( window, undefined ) {
++
++var i,
++	cachedruns,
++	Expr,
++	getText,
++	isXML,
++	compile,
++	hasDuplicate,
++	outermostContext,
++
++	// Local document vars
++	setDocument,
++	document,
++	docElem,
++	documentIsXML,
++	rbuggyQSA,
++	rbuggyMatches,
++	matches,
++	contains,
++	sortOrder,
++
++	// Instance-specific data
++	expando = "sizzle" + -(new Date()),
++	preferredDoc = window.document,
++	support = {},
++	dirruns = 0,
++	done = 0,
++	classCache = createCache(),
++	tokenCache = createCache(),
++	compilerCache = createCache(),
++
++	// General-purpose constants
++	strundefined = typeof undefined,
++	MAX_NEGATIVE = 1 << 31,
++
++	// Array methods
++	arr = [],
++	pop = arr.pop,
++	push = arr.push,
++	slice = arr.slice,
++	// Use a stripped-down indexOf if we can't use a native one
++	indexOf = arr.indexOf || function( elem ) {
++		var i = 0,
++			len = this.length;
++		for ( ; i < len; i++ ) {
++			if ( this[i] === elem ) {
++				return i;
++			}
++		}
++		return -1;
++	},
++
++
++	// Regular expressions
++
++	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
++	whitespace = "[\\x20\\t\\r\\n\\f]",
++	// http://www.w3.org/TR/css3-syntax/#characters
++	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
++
++	// Loosely modeled on CSS identifier characters
++	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
++	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
++	identifier = characterEncoding.replace( "w", "w#" ),
++
++	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
++	operators = "([*^$|!~]?=)",
++	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
++		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
++
++	// Prefer arguments quoted,
++	//   then not containing pseudos/brackets,
++	//   then attribute selectors/non-parenthetical expressions,
++	//   then anything else
++	// These preferences are here to reduce the number of selectors
++	//   needing tokenize in the PSEUDO preFilter
++	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
++
++	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
++	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
++
++	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
++	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
++	rpseudo = new RegExp( pseudos ),
++	ridentifier = new RegExp( "^" + identifier + "$" ),
++
++	matchExpr = {
++		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
++		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
++		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
++		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
++		"ATTR": new RegExp( "^" + attributes ),
++		"PSEUDO": new RegExp( "^" + pseudos ),
++		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
++			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
++			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
++		// For use in libraries implementing .is()
++		// We use this for POS matching in `select`
++		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
++			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
++	},
++
++	rsibling = /[\x20\t\r\n\f]*[+~]/,
++
++	rnative = /^[^{]+\{\s*\[native code/,
++
++	// Easily-parseable/retrievable ID or TAG or CLASS selectors
++	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
++
++	rinputs = /^(?:input|select|textarea|button)$/i,
++	rheader = /^h\d$/i,
++
++	rescape = /'|\\/g,
++	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
++
++	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
++	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
++	funescape = function( _, escaped ) {
++		var high = "0x" + escaped - 0x10000;
++		// NaN means non-codepoint
++		return high !== high ?
++			escaped :
++			// BMP codepoint
++			high < 0 ?
++				String.fromCharCode( high + 0x10000 ) :
++				// Supplemental Plane codepoint (surrogate pair)
++				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
++	};
++
++// Use a stripped-down slice if we can't use a native one
++try {
++	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
++} catch ( e ) {
++	slice = function( i ) {
++		var elem,
++			results = [];
++		while ( (elem = this[i++]) ) {
++			results.push( elem );
++		}
++		return results;
++	};
++}
++
++/**
++ * For feature detection
++ * @param {Function} fn The function to test for native support
++ */
++function isNative( fn ) {
++	return rnative.test( fn + "" );
++}
++
++/**
++ * Create key-value caches of limited size
++ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
++ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
++ *	deleting the oldest entry
++ */
++function createCache() {
++	var cache,
++		keys = [];
++
++	return (cache = function( key, value ) {
++		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
++		if ( keys.push( key += " " ) > Expr.cacheLength ) {
++			// Only keep the most recent entries
++			delete cache[ keys.shift() ];
++		}
++		return (cache[ key ] = value);
++	});
++}
++
++/**
++ * Mark a function for special use by Sizzle
++ * @param {Function} fn The function to mark
++ */
++function markFunction( fn ) {
++	fn[ expando ] = true;
++	return fn;
++}
++
++/**
++ * Support testing using an element
++ * @param {Function} fn Passed the created div and expects a boolean result
++ */
++function assert( fn ) {
++	var div = document.createElement("div");
++
++	try {
++		return fn( div );
++	} catch (e) {
++		return false;
++	} finally {
++		// release memory in IE
++		div = null;
++	}
++}
++
++function Sizzle( selector, context, results, seed ) {
++	var match, elem, m, nodeType,
++		// QSA vars
++		i, groups, old, nid, newContext, newSelector;
++
++	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
++		setDocument( context );
++	}
++
++	context = context || document;
++	results = results || [];
++
++	if ( !selector || typeof selector !== "string" ) {
++		return results;
++	}
++
++	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
++		return [];
++	}
++
++	if ( !documentIsXML && !seed ) {
++
++		// Shortcuts
++		if ( (match = rquickExpr.exec( selector )) ) {
++			// Speed-up: Sizzle("#ID")
++			if ( (m = match[1]) ) {
++				if ( nodeType === 9 ) {
++					elem = context.getElementById( m );
++					// Check parentNode to catch when Blackberry 4.6 returns
++					// nodes that are no longer in the document #6963
++					if ( elem && elem.parentNode ) {
++						// Handle the case where IE, Opera, and Webkit return items
++						// by name instead of ID
++						if ( elem.id === m ) {
++							results.push( elem );
++							return results;
++						}
++					} else {
++						return results;
++					}
++				} else {
++					// Context is not a document
++					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
++						contains( context, elem ) && elem.id === m ) {
++						results.push( elem );
++						return results;
++					}
++				}
++
++			// Speed-up: Sizzle("TAG")
++			} else if ( match[2] ) {
++				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
++				return results;
++
++			// Speed-up: Sizzle(".CLASS")
++			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
++				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
++				return results;
++			}
++		}
++
++		// QSA path
++		if ( support.qsa && !rbuggyQSA.test(selector) ) {
++			old = true;
++			nid = expando;
++			newContext = context;
++			newSelector = nodeType === 9 && selector;
++
++			// qSA works strangely on Element-rooted queries
++			// We can work around this by specifying an extra ID on the root
++			// and working up from there (Thanks to Andrew Dupont for the technique)
++			// IE 8 doesn't work on object elements
++			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
++				groups = tokenize( selector );
++
++				if ( (old = context.getAttribute("id")) ) {
++					nid = old.replace( rescape, "\\$&" );
++				} else {
++					context.setAttribute( "id", nid );
++				}
++				nid = "[id='" + nid + "'] ";
++
++				i = groups.length;
++				while ( i-- ) {
++					groups[i] = nid + toSelector( groups[i] );
++				}
++				newContext = rsibling.test( selector ) && context.parentNode || context;
++				newSelector = groups.join(",");
++			}
++
++			if ( newSelector ) {
++				try {
++					push.apply( results, slice.call( newContext.querySelectorAll(
++						newSelector
++					), 0 ) );
++					return results;
++				} catch(qsaError) {
++				} finally {
++					if ( !old ) {
++						context.removeAttribute("id");
++					}
++				}
++			}
++		}
++	}
++
++	// All others
++	return select( selector.replace( rtrim, "$1" ), context, results, seed );
++}
++
++/**
++ * Detect xml
++ * @param {Element|Object} elem An element or a document
++ */
++isXML = Sizzle.isXML = function( elem ) {
++	// documentElement is verified for cases where it doesn't yet exist
++	// (such as loading iframes in IE - #4833)
++	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
++	return documentElement ? documentElement.nodeName !== "HTML" : false;
++};
++
++/**
++ * Sets document-related variables once based on the current document
++ * @param {Element|Object} [doc] An element or document object to use to set the document
++ * @returns {Object} Returns the current document
++ */
++setDocument = Sizzle.setDocument = function( node ) {
++	var doc = node ? node.ownerDocument || node : preferredDoc;
++
++	// If no document and documentElement is available, return
++	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
++		return document;
++	}
++
++	// Set our document
++	document = doc;
++	docElem = doc.documentElement;
++
++	// Support tests
++	documentIsXML = isXML( doc );
++
++	// Check if getElementsByTagName("*") returns only elements
++	support.tagNameNoComments = assert(function( div ) {
++		div.appendChild( doc.createComment("") );
++		return !div.getElementsByTagName("*").length;
++	});
++
++	// Check if attributes should be retrieved by attribute nodes
++	support.attributes = assert(function( div ) {
++		div.innerHTML = "<select></select>";
++		var type = typeof div.lastChild.getAttribute("multiple");
++		// IE8 returns a string for some attributes even when not present
++		return type !== "boolean" && type !== "string";
++	});
++
++	// Check if getElementsByClassName can be trusted
++	support.getByClassName = assert(function( div ) {
++		// Opera can't find a second classname (in 9.6)
++		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
++		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
++			return false;
++		}
++
++		// Safari 3.2 caches class attributes and doesn't catch changes
++		div.lastChild.className = "e";
++		return div.getElementsByClassName("e").length === 2;
++	});
++
++	// Check if getElementById returns elements by name
++	// Check if getElementsByName privileges form controls or returns elements by ID
++	support.getByName = assert(function( div ) {
++		// Inject content
++		div.id = expando + 0;
++		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
++		docElem.insertBefore( div, docElem.firstChild );
++
++		// Test
++		var pass = doc.getElementsByName &&
++			// buggy browsers will return fewer than the correct 2
++			doc.getElementsByName( expando ).length === 2 +
++			// buggy browsers will return more than the correct 0
++			doc.getElementsByName( expando + 0 ).length;
++		support.getIdNotName = !doc.getElementById( expando );
++
++		// Cleanup
++		docElem.removeChild( div );
++
++		return pass;
++	});
++
++	// IE6/7 return modified attributes
++	Expr.attrHandle = assert(function( div ) {
++		div.innerHTML = "<a href='#'></a>";
++		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
++			div.firstChild.getAttribute("href") === "#";
++	}) ?
++		{} :
++		{
++			"href": function( elem ) {
++				return elem.getAttribute( "href", 2 );
++			},
++			"type": function( elem ) {
++				return elem.getAttribute("type");
++			}
++		};
++
++	// ID find and filter
++	if ( support.getIdNotName ) {
++		Expr.find["ID"] = function( id, context ) {
++			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
++				var m = context.getElementById( id );
++				// Check parentNode to catch when Blackberry 4.6 returns
++				// nodes that are no longer in the document #6963
++				return m && m.parentNode ? [m] : [];
++			}
++		};
++		Expr.filter["ID"] = function( id ) {
++			var attrId = id.replace( runescape, funescape );
++			return function( elem ) {
++				return elem.getAttribute("id") === attrId;
++			};
++		};
++	} else {
++		Expr.find["ID"] = function( id, context ) {
++			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
++				var m = context.getElementById( id );
++
++				return m ?
++					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
++						[m] :
++						undefined :
++					[];
++			}
++		};
++		Expr.filter["ID"] =  function( id ) {
++			var attrId = id.replace( runescape, funescape );
++			return function( elem ) {
++				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
++				return node && node.value === attrId;
++			};
++		};
++	}
++
++	// Tag
++	Expr.find["TAG"] = support.tagNameNoComments ?
++		function( tag, context ) {
++			if ( typeof context.getElementsByTagName !== strundefined ) {
++				return context.getElementsByTagName( tag );
++			}
++		} :
++		function( tag, context ) {
++			var elem,
++				tmp = [],
++				i = 0,
++				results = context.getElementsByTagName( tag );
++
++			// Filter out possible comments
++			if ( tag === "*" ) {
++				while ( (elem = results[i++]) ) {
++					if ( elem.nodeType === 1 ) {
++						tmp.push( elem );
++					}
++				}
++
++				return tmp;
++			}
++			return results;
++		};
++
++	// Name
++	Expr.find["NAME"] = support.getByName && function( tag, context ) {
++		if ( typeof context.getElementsByName !== strundefined ) {
++			return context.getElementsByName( name );
++		}
++	};
++
++	// Class
++	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
++		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
++			return context.getElementsByClassName( className );
++		}
++	};
++
++	// QSA and matchesSelector support
++
++	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
++	rbuggyMatches = [];
++
++	// qSa(:focus) reports false when true (Chrome 21),
++	// no need to also add to buggyMatches since matches checks buggyQSA
++	// A support test would require too much code (would include document ready)
++	rbuggyQSA = [ ":focus" ];
++
++	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
++		// Build QSA regex
++		// Regex strategy adopted from Diego Perini
++		assert(function( div ) {
++			// Select is set to empty string on purpose
++			// This is to test IE's treatment of not explictly
++			// setting a boolean content attribute,
++			// since its presence should be enough
++			// http://bugs.jquery.com/ticket/12359
++			div.innerHTML = "<select><option selected=''></option></select>";
++
++			// IE8 - Some boolean attributes are not treated correctly
++			if ( !div.querySelectorAll("[selected]").length ) {
++				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
++			}
++
++			// Webkit/Opera - :checked should return selected option elements
++			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
++			// IE8 throws error here and will not see later tests
++			if ( !div.querySelectorAll(":checked").length ) {
++				rbuggyQSA.push(":checked");
++			}
++		});
++
++		assert(function( div ) {
++
++			// Opera 10-12/IE8 - ^= $= *= and empty values
++			// Should not select anything
++			div.innerHTML = "<input type='hidden' i=''/>";
++			if ( div.querySelectorAll("[i^='']").length ) {
++				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
++			}
++
++			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
++			// IE8 throws error here and will not see later tests
++			if ( !div.querySelectorAll(":enabled").length ) {
++				rbuggyQSA.push( ":enabled", ":disabled" );
++			}
++
++			// Opera 10-11 does not throw on post-comma invalid pseudos
++			div.querySelectorAll("*,:x");
++			rbuggyQSA.push(",.*:");
++		});
++	}
++
++	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
++		docElem.mozMatchesSelector ||
++		docElem.webkitMatchesSelector ||
++		docElem.oMatchesSelector ||
++		docElem.msMatchesSelector) )) ) {
++
++		assert(function( div ) {
++			// Check to see if it's possible to do matchesSelector
++			// on a disconnected node (IE 9)
++			support.disconnectedMatch = matches.call( div, "div" );
++
++			// This should fail with an exception
++			// Gecko does not error, returns false instead
++			matches.call( div, "[s!='']:x" );
++			rbuggyMatches.push( "!=", pseudos );
++		});
++	}
++
++	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
++	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
++
++	// Element contains another
++	// Purposefully does not implement inclusive descendent
++	// As in, an element does not contain itself
++	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
++		function( a, b ) {
++			var adown = a.nodeType === 9 ? a.documentElement : a,
++				bup = b && b.parentNode;
++			return a === bup || !!( bup && bup.nodeType === 1 && (
++				adown.contains ?
++					adown.contains( bup ) :
++					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
++			));
++		} :
++		function( a, b ) {
++			if ( b ) {
++				while ( (b = b.parentNode) ) {
++					if ( b === a ) {
++						return true;
++					}
++				}
++			}
++			return false;
++		};
++
++	// Document order sorting
++	sortOrder = docElem.compareDocumentPosition ?
++	function( a, b ) {
++		var compare;
++
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++		}
++
++		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
++			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
++				if ( a === doc || contains( preferredDoc, a ) ) {
++					return -1;
++				}
++				if ( b === doc || contains( preferredDoc, b ) ) {
++					return 1;
++				}
++				return 0;
++			}
++			return compare & 4 ? -1 : 1;
++		}
++
++		return a.compareDocumentPosition ? -1 : 1;
++	} :
++	function( a, b ) {
++		var cur,
++			i = 0,
++			aup = a.parentNode,
++			bup = b.parentNode,
++			ap = [ a ],
++			bp = [ b ];
++
++		// Exit early if the nodes are identical
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++
++		// Parentless nodes are either documents or disconnected
++		} else if ( !aup || !bup ) {
++			return a === doc ? -1 :
++				b === doc ? 1 :
++				aup ? -1 :
++				bup ? 1 :
++				0;
++
++		// If the nodes are siblings, we can do a quick check
++		} else if ( aup === bup ) {
++			return siblingCheck( a, b );
++		}
++
++		// Otherwise we need full lists of their ancestors for comparison
++		cur = a;
++		while ( (cur = cur.parentNode) ) {
++			ap.unshift( cur );
++		}
++		cur = b;
++		while ( (cur = cur.parentNode) ) {
++			bp.unshift( cur );
++		}
++
++		// Walk down the tree looking for a discrepancy
++		while ( ap[i] === bp[i] ) {
++			i++;
++		}
++
++		return i ?
++			// Do a sibling check if the nodes have a common ancestor
++			siblingCheck( ap[i], bp[i] ) :
++
++			// Otherwise nodes in our document sort first
++			ap[i] === preferredDoc ? -1 :
++			bp[i] === preferredDoc ? 1 :
++			0;
++	};
++
++	// Always assume the presence of duplicates if sort doesn't
++	// pass them to our comparison function (as in Google Chrome).
++	hasDuplicate = false;
++	[0, 0].sort( sortOrder );
++	support.detectDuplicates = hasDuplicate;
++
++	return document;
++};
++
++Sizzle.matches = function( expr, elements ) {
++	return Sizzle( expr, null, null, elements );
++};
++
++Sizzle.matchesSelector = function( elem, expr ) {
++	// Set document vars if needed
++	if ( ( elem.ownerDocument || elem ) !== document ) {
++		setDocument( elem );
++	}
++
++	// Make sure that attribute selectors are quoted
++	expr = expr.replace( rattributeQuotes, "='$1']" );
++
++	// rbuggyQSA always contains :focus, so no need for an existence check
++	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
++		try {
++			var ret = matches.call( elem, expr );
++
++			// IE 9's matchesSelector returns false on disconnected nodes
++			if ( ret || support.disconnectedMatch ||
++					// As well, disconnected nodes are said to be in a document
++					// fragment in IE 9
++					elem.document && elem.document.nodeType !== 11 ) {
++				return ret;
++			}
++		} catch(e) {}
++	}
++
++	return Sizzle( expr, document, null, [elem] ).length > 0;
++};
++
++Sizzle.contains = function( context, elem ) {
++	// Set document vars if needed
++	if ( ( context.ownerDocument || context ) !== document ) {
++		setDocument( context );
++	}
++	return contains( context, elem );
++};
++
++Sizzle.attr = function( elem, name ) {
++	var val;
++
++	// Set document vars if needed
++	if ( ( elem.ownerDocument || elem ) !== document ) {
++		setDocument( elem );
++	}
++
++	if ( !documentIsXML ) {
++		name = name.toLowerCase();
++	}
++	if ( (val = Expr.attrHandle[ name ]) ) {
++		return val( elem );
++	}
++	if ( documentIsXML || support.attributes ) {
++		return elem.getAttribute( name );
++	}
++	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
++		name :
++		val && val.specified ? val.value : null;
++};
++
++Sizzle.error = function( msg ) {
++	throw new Error( "Syntax error, unrecognized expression: " + msg );
++};
++
++// Document sorting and removing duplicates
++Sizzle.uniqueSort = function( results ) {
++	var elem,
++		duplicates = [],
++		i = 1,
++		j = 0;
++
++	// Unless we *know* we can detect duplicates, assume their presence
++	hasDuplicate = !support.detectDuplicates;
++	results.sort( sortOrder );
++
++	if ( hasDuplicate ) {
++		for ( ; (elem = results[i]); i++ ) {
++			if ( elem === results[ i - 1 ] ) {
++				j = duplicates.push( i );
++			}
++		}
++		while ( j-- ) {
++			results.splice( duplicates[ j ], 1 );
++		}
++	}
++
++	return results;
++};
++
++function siblingCheck( a, b ) {
++	var cur = b && a,
++		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
++
++	// Use IE sourceIndex if available on both nodes
++	if ( diff ) {
++		return diff;
++	}
++
++	// Check if b follows a
++	if ( cur ) {
++		while ( (cur = cur.nextSibling) ) {
++			if ( cur === b ) {
++				return -1;
++			}
++		}
++	}
++
++	return a ? 1 : -1;
++}
++
++// Returns a function to use in pseudos for input types
++function createInputPseudo( type ) {
++	return function( elem ) {
++		var name = elem.nodeName.toLowerCase();
++		return name === "input" && elem.type === type;
++	};
++}
++
++// Returns a function to use in pseudos for buttons
++function createButtonPseudo( type ) {
++	return function( elem ) {
++		var name = elem.nodeName.toLowerCase();
++		return (name === "input" || name === "button") && elem.type === type;
++	};
++}
++
++// Returns a function to use in pseudos for positionals
++function createPositionalPseudo( fn ) {
++	return markFunction(function( argument ) {
++		argument = +argument;
++		return markFunction(function( seed, matches ) {
++			var j,
++				matchIndexes = fn( [], seed.length, argument ),
++				i = matchIndexes.length;
++
++			// Match elements found at the specified indexes
++			while ( i-- ) {
++				if ( seed[ (j = matchIndexes[i]) ] ) {
++					seed[j] = !(matches[j] = seed[j]);
++				}
++			}
++		});
++	});
++}
++
++/**
++ * Utility function for retrieving the text value of an array of DOM nodes
++ * @param {Array|Element} elem
++ */
++getText = Sizzle.getText = function( elem ) {
++	var node,
++		ret = "",
++		i = 0,
++		nodeType = elem.nodeType;
++
++	if ( !nodeType ) {
++		// If no nodeType, this is expected to be an array
++		for ( ; (node = elem[i]); i++ ) {
++			// Do not traverse comment nodes
++			ret += getText( node );
++		}
++	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
++		// Use textContent for elements
++		// innerText usage removed for consistency of new lines (see #11153)
++		if ( typeof elem.textContent === "string" ) {
++			return elem.textContent;
++		} else {
++			// Traverse its children
++			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
++				ret += getText( elem );
++			}
++		}
++	} else if ( nodeType === 3 || nodeType === 4 ) {
++		return elem.nodeValue;
++	}
++	// Do not include comment or processing instruction nodes
++
++	return ret;
++};
++
++Expr = Sizzle.selectors = {
++
++	// Can be adjusted by the user
++	cacheLength: 50,
++
++	createPseudo: markFunction,
++
++	match: matchExpr,
++
++	find: {},
++
++	relative: {
++		">": { dir: "parentNode", first: true },
++		" ": { dir: "parentNode" },
++		"+": { dir: "previousSibling", first: true },
++		"~": { dir: "previousSibling" }
++	},
++
++	preFilter: {
++		"ATTR": function( match ) {
++			match[1] = match[1].replace( runescape, funescape );
++
++			// Move the given value to match[3] whether quoted or unquoted
++			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
++
++			if ( match[2] === "~=" ) {
++				match[3] = " " + match[3] + " ";
++			}
++
++			return match.slice( 0, 4 );
++		},
++
++		"CHILD": function( match ) {
++			/* matches from matchExpr["CHILD"]
++				1 type (only|nth|...)
++				2 what (child|of-type)
++				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
++				4 xn-component of xn+y argument ([+-]?\d*n|)
++				5 sign of xn-component
++				6 x of xn-component
++				7 sign of y-component
++				8 y of y-component
++			*/
++			match[1] = match[1].toLowerCase();
++
++			if ( match[1].slice( 0, 3 ) === "nth" ) {
++				// nth-* requires argument
++				if ( !match[3] ) {
++					Sizzle.error( match[0] );
++				}
++
++				// numeric x and y parameters for Expr.filter.CHILD
++				// remember that false/true cast respectively to 0/1
++				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
++				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
++
++			// other types prohibit arguments
++			} else if ( match[3] ) {
++				Sizzle.error( match[0] );
++			}
++
++			return match;
++		},
++
++		"PSEUDO": function( match ) {
++			var excess,
++				unquoted = !match[5] && match[2];
++
++			if ( matchExpr["CHILD"].test( match[0] ) ) {
++				return null;
++			}
++
++			// Accept quoted arguments as-is
++			if ( match[4] ) {
++				match[2] = match[4];
++
++			// Strip excess characters from unquoted arguments
++			} else if ( unquoted && rpseudo.test( unquoted ) &&
++				// Get excess from tokenize (recursively)
++				(excess = tokenize( unquoted, true )) &&
++				// advance to the next closing parenthesis
++				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
++
++				// excess is a negative index
++				match[0] = match[0].slice( 0, excess );
++				match[2] = unquoted.slice( 0, excess );
++			}
++
++			// Return only captures needed by the pseudo filter method (type and argument)
++			return match.slice( 0, 3 );
++		}
++	},
++
++	filter: {
++
++		"TAG": function( nodeName ) {
++			if ( nodeName === "*" ) {
++				return function() { return true; };
++			}
++
++			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
++			return function( elem ) {
++				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
++			};
++		},
++
++		"CLASS": function( className ) {
++			var pattern = classCache[ className + " " ];
++
++			return pattern ||
++				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
++				classCache( className, function( elem ) {
++					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
++				});
++		},
++
++		"ATTR": function( name, operator, check ) {
++			return function( elem ) {
++				var result = Sizzle.attr( elem, name );
++
++				if ( result == null ) {
++					return operator === "!=";
++				}
++				if ( !operator ) {
++					return true;
++				}
++
++				result += "";
++
++				return operator === "=" ? result === check :
++					operator === "!=" ? result !== check :
++					operator === "^=" ? check && result.indexOf( check ) === 0 :
++					operator === "*=" ? check && result.indexOf( check ) > -1 :
++					operator === "$=" ? check && result.slice( -check.length ) === check :
++					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
++					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
++					false;
++			};
++		},
++
++		"CHILD": function( type, what, argument, first, last ) {
++			var simple = type.slice( 0, 3 ) !== "nth",
++				forward = type.slice( -4 ) !== "last",
++				ofType = what === "of-type";
++
++			return first === 1 && last === 0 ?
++
++				// Shortcut for :nth-*(n)
++				function( elem ) {
++					return !!elem.parentNode;
++				} :
++
++				function( elem, context, xml ) {
++					var cache, outerCache, node, diff, nodeIndex, start,
++						dir = simple !== forward ? "nextSibling" : "previousSibling",
++						parent = elem.parentNode,
++						name = ofType && elem.nodeName.toLowerCase(),
++						useCache = !xml && !ofType;
++
++					if ( parent ) {
++
++						// :(first|last|only)-(child|of-type)
++						if ( simple ) {
++							while ( dir ) {
++								node = elem;
++								while ( (node = node[ dir ]) ) {
++									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
++										return false;
++									}
++								}
++								// Reverse direction for :only-* (if we haven't yet done so)
++								start = dir = type === "only" && !start && "nextSibling";
++							}
++							return true;
++						}
++
++						start = [ forward ? parent.firstChild : parent.lastChild ];
++
++						// non-xml :nth-child(...) stores cache data on `parent`
++						if ( forward && useCache ) {
++							// Seek `elem` from a previously-cached index
++							outerCache = parent[ expando ] || (parent[ expando ] = {});
++							cache = outerCache[ type ] || [];
++							nodeIndex = cache[0] === dirruns && cache[1];
++							diff = cache[0] === dirruns && cache[2];
++							node = nodeIndex && parent.childNodes[ nodeIndex ];
++
++							while ( (node = ++nodeIndex && node && node[ dir ] ||
++
++								// Fallback to seeking `elem` from the start
++								(diff = nodeIndex = 0) || start.pop()) ) {
++
++								// When found, cache indexes on `parent` and break
++								if ( node.nodeType === 1 && ++diff && node === elem ) {
++									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
++									break;
++								}
++							}
++
++						// Use previously-cached element index if available
++						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
++							diff = cache[1];
++
++						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
++						} else {
++							// Use the same loop as above to seek `elem` from the start
++							while ( (node = ++nodeIndex && node && node[ dir ] ||
++								(diff = nodeIndex = 0) || start.pop()) ) {
++
++								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
++									// Cache the index of each encountered element
++									if ( useCache ) {
++										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
++									}
++
++									if ( node === elem ) {
++										break;
++									}
++								}
++							}
++						}
++
++						// Incorporate the offset, then check against cycle size
++						diff -= last;
++						return diff === first || ( diff % first === 0 && diff / first >= 0 );
++					}
++				};
++		},
++
++		"PSEUDO": function( pseudo, argument ) {
++			// pseudo-class names are case-insensitive
++			// http://www.w3.org/TR/selectors/#pseudo-classes
++			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
++			// Remember that setFilters inherits from pseudos
++			var args,
++				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
++					Sizzle.error( "unsupported pseudo: " + pseudo );
++
++			// The user may use createPseudo to indicate that
++			// arguments are needed to create the filter function
++			// just as Sizzle does
++			if ( fn[ expando ] ) {
++				return fn( argument );
++			}
++
++			// But maintain support for old signatures
++			if ( fn.length > 1 ) {
++				args = [ pseudo, pseudo, "", argument ];
++				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
++					markFunction(function( seed, matches ) {
++						var idx,
++							matched = fn( seed, argument ),
++							i = matched.length;
++						while ( i-- ) {
++							idx = indexOf.call( seed, matched[i] );
++							seed[ idx ] = !( matches[ idx ] = matched[i] );
++						}
++					}) :
++					function( elem ) {
++						return fn( elem, 0, args );
++					};
++			}
++
++			return fn;
++		}
++	},
++
++	pseudos: {
++		// Potentially complex pseudos
++		"not": markFunction(function( selector ) {
++			// Trim the selector passed to compile
++			// to avoid treating leading and trailing
++			// spaces as combinators
++			var input = [],
++				results = [],
++				matcher = compile( selector.replace( rtrim, "$1" ) );
++
++			return matcher[ expando ] ?
++				markFunction(function( seed, matches, context, xml ) {
++					var elem,
++						unmatched = matcher( seed, null, xml, [] ),
++						i = seed.length;
++
++					// Match elements unmatched by `matcher`
++					while ( i-- ) {
++						if ( (elem = unmatched[i]) ) {
++							seed[i] = !(matches[i] = elem);
++						}
++					}
++				}) :
++				function( elem, context, xml ) {
++					input[0] = elem;
++					matcher( input, null, xml, results );
++					return !results.pop();
++				};
++		}),
++
++		"has": markFunction(function( selector ) {
++			return function( elem ) {
++				return Sizzle( selector, elem ).length > 0;
++			};
++		}),
++
++		"contains": markFunction(function( text ) {
++			return function( elem ) {
++				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
++			};
++		}),
++
++		// "Whether an element is represented by a :lang() selector
++		// is based solely on the element's language value
++		// being equal to the identifier C,
++		// or beginning with the identifier C immediately followed by "-".
++		// The matching of C against the element's language value is performed case-insensitively.
++		// The identifier C does not have to be a valid language name."
++		// http://www.w3.org/TR/selectors/#lang-pseudo
++		"lang": markFunction( function( lang ) {
++			// lang value must be a valid identifider
++			if ( !ridentifier.test(lang || "") ) {
++				Sizzle.error( "unsupported lang: " + lang );
++			}
++			lang = lang.replace( runescape, funescape ).toLowerCase();
++			return function( elem ) {
++				var elemLang;
++				do {
++					if ( (elemLang = documentIsXML ?
++						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
++						elem.lang) ) {
++
++						elemLang = elemLang.toLowerCase();
++						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
++					}
++				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
++				return false;
++			};
++		}),
++
++		// Miscellaneous
++		"target": function( elem ) {
++			var hash = window.location && window.location.hash;
++			return hash && hash.slice( 1 ) === elem.id;
++		},
++
++		"root": function( elem ) {
++			return elem === docElem;
++		},
++
++		"focus": function( elem ) {
++			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
++		},
++
++		// Boolean properties
++		"enabled": function( elem ) {
++			return elem.disabled === false;
++		},
++
++		"disabled": function( elem ) {
++			return elem.disabled === true;
++		},
++
++		"checked": function( elem ) {
++			// In CSS3, :checked should return both checked and selected elements
++			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
++			var nodeName = elem.nodeName.toLowerCase();
++			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
++		},
++
++		"selected": function( elem ) {
++			// Accessing this property makes selected-by-default
++			// options in Safari work properly
++			if ( elem.parentNode ) {
++				elem.parentNode.selectedIndex;
++			}
++
++			return elem.selected === true;
++		},
++
++		// Contents
++		"empty": function( elem ) {
++			// http://www.w3.org/TR/selectors/#empty-pseudo
++			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
++			//   not comment, processing instructions, or others
++			// Thanks to Diego Perini for the nodeName shortcut
++			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
++			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
++				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
++					return false;
++				}
++			}
++			return true;
++		},
++
++		"parent": function( elem ) {
++			return !Expr.pseudos["empty"]( elem );
++		},
++
++		// Element/input types
++		"header": function( elem ) {
++			return rheader.test( elem.nodeName );
++		},
++
++		"input": function( elem ) {
++			return rinputs.test( elem.nodeName );
++		},
++
++		"button": function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return name === "input" && elem.type === "button" || name === "button";
++		},
++
++		"text": function( elem ) {
++			var attr;
++			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
++			// use getAttribute instead to test this case
++			return elem.nodeName.toLowerCase() === "input" &&
++				elem.type === "text" &&
++				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
++		},
++
++		// Position-in-collection
++		"first": createPositionalPseudo(function() {
++			return [ 0 ];
++		}),
++
++		"last": createPositionalPseudo(function( matchIndexes, length ) {
++			return [ length - 1 ];
++		}),
++
++		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			return [ argument < 0 ? argument + length : argument ];
++		}),
++
++		"even": createPositionalPseudo(function( matchIndexes, length ) {
++			var i = 0;
++			for ( ; i < length; i += 2 ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"odd": createPositionalPseudo(function( matchIndexes, length ) {
++			var i = 1;
++			for ( ; i < length; i += 2 ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			var i = argument < 0 ? argument + length : argument;
++			for ( ; --i >= 0; ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			var i = argument < 0 ? argument + length : argument;
++			for ( ; ++i < length; ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		})
++	}
++};
++
++// Add button/input type pseudos
++for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
++	Expr.pseudos[ i ] = createInputPseudo( i );
++}
++for ( i in { submit: true, reset: true } ) {
++	Expr.pseudos[ i ] = createButtonPseudo( i );
++}
++
++function tokenize( selector, parseOnly ) {
++	var matched, match, tokens, type,
++		soFar, groups, preFilters,
++		cached = tokenCache[ selector + " " ];
++
++	if ( cached ) {
++		return parseOnly ? 0 : cached.slice( 0 );
++	}
++
++	soFar = selector;
++	groups = [];
++	preFilters = Expr.preFilter;
++
++	while ( soFar ) {
++
++		// Comma and first run
++		if ( !matched || (match = rcomma.exec( soFar )) ) {
++			if ( match ) {
++				// Don't consume trailing commas as valid
++				soFar = soFar.slice( match[0].length ) || soFar;
++			}
++			groups.push( tokens = [] );
++		}
++
++		matched = false;
++
++		// Combinators
++		if ( (match = rcombinators.exec( soFar )) ) {
++			matched = match.shift();
++			tokens.push( {
++				value: matched,
++				// Cast descendant combinators to space
++				type: match[0].replace( rtrim, " " )
++			} );
++			soFar = soFar.slice( matched.length );
++		}
++
++		// Filters
++		for ( type in Expr.filter ) {
++			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
++				(match = preFilters[ type ]( match ))) ) {
++				matched = match.shift();
++				tokens.push( {
++					value: matched,
++					type: type,
++					matches: match
++				} );
++				soFar = soFar.slice( matched.length );
++			}
++		}
++
++		if ( !matched ) {
++			break;
++		}
++	}
++
++	// Return the length of the invalid excess
++	// if we're just parsing
++	// Otherwise, throw an error or return tokens
++	return parseOnly ?
++		soFar.length :
++		soFar ?
++			Sizzle.error( selector ) :
++			// Cache the tokens
++			tokenCache( selector, groups ).slice( 0 );
++}
++
++function toSelector( tokens ) {
++	var i = 0,
++		len = tokens.length,
++		selector = "";
++	for ( ; i < len; i++ ) {
++		selector += tokens[i].value;
++	}
++	return selector;
++}
++
++function addCombinator( matcher, combinator, base ) {
++	var dir = combinator.dir,
++		checkNonElements = base && dir === "parentNode",
++		doneName = done++;
++
++	return combinator.first ?
++		// Check against closest ancestor/preceding element
++		function( elem, context, xml ) {
++			while ( (elem = elem[ dir ]) ) {
++				if ( elem.nodeType === 1 || checkNonElements ) {
++					return matcher( elem, context, xml );
++				}
++			}
++		} :
++
++		// Check against all ancestor/preceding elements
++		function( elem, context, xml ) {
++			var data, cache, outerCache,
++				dirkey = dirruns + " " + doneName;
++
++			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
++			if ( xml ) {
++				while ( (elem = elem[ dir ]) ) {
++					if ( elem.nodeType === 1 || checkNonElements ) {
++						if ( matcher( elem, context, xml ) ) {
++							return true;
++						}
++					}
++				}
++			} else {
++				while ( (elem = elem[ dir ]) ) {
++					if ( elem.nodeType === 1 || checkNonElements ) {
++						outerCache = elem[ expando ] || (elem[ expando ] = {});
++						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
++							if ( (data = cache[1]) === true || data === cachedruns ) {
++								return data === true;
++							}
++						} else {
++							cache = outerCache[ dir ] = [ dirkey ];
++							cache[1] = matcher( elem, context, xml ) || cachedruns;
++							if ( cache[1] === true ) {
++								return true;
++							}
++						}
++					}
++				}
++			}
++		};
++}
++
++function elementMatcher( matchers ) {
++	return matchers.length > 1 ?
++		function( elem, context, xml ) {
++			var i = matchers.length;
++			while ( i-- ) {
++				if ( !matchers[i]( elem, context, xml ) ) {
++					return false;
++				}
++			}
++			return true;
++		} :
++		matchers[0];
++}
++
++function condense( unmatched, map, filter, context, xml ) {
++	var elem,
++		newUnmatched = [],
++		i = 0,
++		len = unmatched.length,
++		mapped = map != null;
++
++	for ( ; i < len; i++ ) {
++		if ( (elem = unmatched[i]) ) {
++			if ( !filter || filter( elem, context, xml ) ) {
++				newUnmatched.push( elem );
++				if ( mapped ) {
++					map.push( i );
++				}
++			}
++		}
++	}
++
++	return newUnmatched;
++}
++
++function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
++	if ( postFilter && !postFilter[ expando ] ) {
++		postFilter = setMatcher( postFilter );
++	}
++	if ( postFinder && !postFinder[ expando ] ) {
++		postFinder = setMatcher( postFinder, postSelector );
++	}
++	return markFunction(function( seed, results, context, xml ) {
++		var temp, i, elem,
++			preMap = [],
++			postMap = [],
++			preexisting = results.length,
++
++			// Get initial elements from seed or context
++			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
++
++			// Prefilter to get matcher input, preserving a map for seed-results synchronization
++			matcherIn = preFilter && ( seed || !selector ) ?
++				condense( elems, preMap, preFilter, context, xml ) :
++				elems,
++
++			matcherOut = matcher ?
++				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
++				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
++
++					// ...intermediate processing is necessary
++					[] :
++
++					// ...otherwise use results directly
++					results :
++				matcherIn;
++
++		// Find primary matches
++		if ( matcher ) {
++			matcher( matcherIn, matcherOut, context, xml );
++		}
++
++		// Apply postFilter
++		if ( postFilter ) {
++			temp = condense( matcherOut, postMap );
++			postFilter( temp, [], context, xml );
++
++			// Un-match failing elements by moving them back to matcherIn
++			i = temp.length;
++			while ( i-- ) {
++				if ( (elem = temp[i]) ) {
++					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
++				}
++			}
++		}
++
++		if ( seed ) {
++			if ( postFinder || preFilter ) {
++				if ( postFinder ) {
++					// Get the final matcherOut by condensing this intermediate into postFinder contexts
++					temp = [];
++					i = matcherOut.length;
++					while ( i-- ) {
++						if ( (elem = matcherOut[i]) ) {
++							// Restore matcherIn since elem is not yet a final match
++							temp.push( (matcherIn[i] = elem) );
++						}
++					}
++					postFinder( null, (matcherOut = []), temp, xml );
++				}
++
++				// Move matched elements from seed to results to keep them synchronized
++				i = matcherOut.length;
++				while ( i-- ) {
++					if ( (elem = matcherOut[i]) &&
++						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
++
++						seed[temp] = !(results[temp] = elem);
++					}
++				}
++			}
++
++		// Add elements to results, through postFinder if defined
++		} else {
++			matcherOut = condense(
++				matcherOut === results ?
++					matcherOut.splice( preexisting, matcherOut.length ) :
++					matcherOut
++			);
++			if ( postFinder ) {
++				postFinder( null, results, matcherOut, xml );
++			} else {
++				push.apply( results, matcherOut );
++			}
++		}
++	});
++}
++
++function matcherFromTokens( tokens ) {
++	var checkContext, matcher, j,
++		len = tokens.length,
++		leadingRelative = Expr.relative[ tokens[0].type ],
++		implicitRelative = leadingRelative || Expr.relative[" "],
++		i = leadingRelative ? 1 : 0,
++
++		// The foundational matcher ensures that elements are reachable from top-level context(s)
++		matchContext = addCombinator( function( elem ) {
++			return elem === checkContext;
++		}, implicitRelative, true ),
++		matchAnyContext = addCombinator( function( elem ) {
++			return indexOf.call( checkContext, elem ) > -1;
++		}, implicitRelative, true ),
++		matchers = [ function( elem, context, xml ) {
++			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
++				(checkContext = context).nodeType ?
++					matchContext( elem, context, xml ) :
++					matchAnyContext( elem, context, xml ) );
++		} ];
++
++	for ( ; i < len; i++ ) {
++		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
++			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
++		} else {
++			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
++
++			// Return special upon seeing a positional matcher
++			if ( matcher[ expando ] ) {
++				// Find the next relative operator (if any) for proper handling
++				j = ++i;
++				for ( ; j < len; j++ ) {
++					if ( Expr.relative[ tokens[j].type ] ) {
++						break;
++					}
++				}
++				return setMatcher(
++					i > 1 && elementMatcher( matchers ),
++					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
++					matcher,
++					i < j && matcherFromTokens( tokens.slice( i, j ) ),
++					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
++					j < len && toSelector( tokens )
++				);
++			}
++			matchers.push( matcher );
++		}
++	}
++
++	return elementMatcher( matchers );
++}
++
++function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
++	// A counter to specify which element is currently being matched
++	var matcherCachedRuns = 0,
++		bySet = setMatchers.length > 0,
++		byElement = elementMatchers.length > 0,
++		superMatcher = function( seed, context, xml, results, expandContext ) {
++			var elem, j, matcher,
++				setMatched = [],
++				matchedCount = 0,
++				i = "0",
++				unmatched = seed && [],
++				outermost = expandContext != null,
++				contextBackup = outermostContext,
++				// We must always have either seed elements or context
++				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
++				// Use integer dirruns iff this is the outermost matcher
++				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
++
++			if ( outermost ) {
++				outermostContext = context !== document && context;
++				cachedruns = matcherCachedRuns;
++			}
++
++			// Add elements passing elementMatchers directly to results
++			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
++			for ( ; (elem = elems[i]) != null; i++ ) {
++				if ( byElement && elem ) {
++					j = 0;
++					while ( (matcher = elementMatchers[j++]) ) {
++						if ( matcher( elem, context, xml ) ) {
++							results.push( elem );
++							break;
++						}
++					}
++					if ( outermost ) {
++						dirruns = dirrunsUnique;
++						cachedruns = ++matcherCachedRuns;
++					}
++				}
++
++				// Track unmatched elements for set filters
++				if ( bySet ) {
++					// They will have gone through all possible matchers
++					if ( (elem = !matcher && elem) ) {
++						matchedCount--;
++					}
++
++					// Lengthen the array for every element, matched or not
++					if ( seed ) {
++						unmatched.push( elem );
++					}
++				}
++			}
++
++			// Apply set filters to unmatched elements
++			matchedCount += i;
++			if ( bySet && i !== matchedCount ) {
++				j = 0;
++				while ( (matcher = setMatchers[j++]) ) {
++					matcher( unmatched, setMatched, context, xml );
++				}
++
++				if ( seed ) {
++					// Reintegrate element matches to eliminate the need for sorting
++					if ( matchedCount > 0 ) {
++						while ( i-- ) {
++							if ( !(unmatched[i] || setMatched[i]) ) {
++								setMatched[i] = pop.call( results );
++							}
++						}
++					}
++
++					// Discard index placeholder values to get only actual matches
++					setMatched = condense( setMatched );
++				}
++
++				// Add matches to results
++				push.apply( results, setMatched );
++
++				// Seedless set matches succeeding multiple successful matchers stipulate sorting
++				if ( outermost && !seed && setMatched.length > 0 &&
++					( matchedCount + setMatchers.length ) > 1 ) {
++
++					Sizzle.uniqueSort( results );
++				}
++			}
++
++			// Override manipulation of globals by nested matchers
++			if ( outermost ) {
++				dirruns = dirrunsUnique;
++				outermostContext = contextBackup;
++			}
++
++			return unmatched;
++		};
++
++	return bySet ?
++		markFunction( superMatcher ) :
++		superMatcher;
++}
++
++compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
++	var i,
++		setMatchers = [],
++		elementMatchers = [],
++		cached = compilerCache[ selector + " " ];
++
++	if ( !cached ) {
++		// Generate a function of recursive functions that can be used to check each element
++		if ( !group ) {
++			group = tokenize( selector );
++		}
++		i = group.length;
++		while ( i-- ) {
++			cached = matcherFromTokens( group[i] );
++			if ( cached[ expando ] ) {
++				setMatchers.push( cached );
++			} else {
++				elementMatchers.push( cached );
++			}
++		}
++
++		// Cache the compiled function
++		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
++	}
++	return cached;
++};
++
++function multipleContexts( selector, contexts, results ) {
++	var i = 0,
++		len = contexts.length;
++	for ( ; i < len; i++ ) {
++		Sizzle( selector, contexts[i], results );
++	}
++	return results;
++}
++
++function select( selector, context, results, seed ) {
++	var i, tokens, token, type, find,
++		match = tokenize( selector );
++
++	if ( !seed ) {
++		// Try to minimize operations if there is only one group
++		if ( match.length === 1 ) {
++
++			// Take a shortcut and set the context if the root selector is an ID
++			tokens = match[0] = match[0].slice( 0 );
++			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
++					context.nodeType === 9 && !documentIsXML &&
++					Expr.relative[ tokens[1].type ] ) {
++
++				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
++				if ( !context ) {
++					return results;
++				}
++
++				selector = selector.slice( tokens.shift().value.length );
++			}
++
++			// Fetch a seed set for right-to-left matching
++			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
++			while ( i-- ) {
++				token = tokens[i];
++
++				// Abort if we hit a combinator
++				if ( Expr.relative[ (type = token.type) ] ) {
++					break;
++				}
++				if ( (find = Expr.find[ type ]) ) {
++					// Search, expanding context for leading sibling combinators
++					if ( (seed = find(
++						token.matches[0].replace( runescape, funescape ),
++						rsibling.test( tokens[0].type ) && context.parentNode || context
++					)) ) {
++
++						// If seed is empty or no tokens remain, we can return early
++						tokens.splice( i, 1 );
++						selector = seed.length && toSelector( tokens );
++						if ( !selector ) {
++							push.apply( results, slice.call( seed, 0 ) );
++							return results;
++						}
++
++						break;
++					}
++				}
++			}
++		}
++	}
++
++	// Compile and execute a filtering function
++	// Provide `match` to avoid retokenization if we modified the selector above
++	compile( selector, match )(
++		seed,
++		context,
++		documentIsXML,
++		results,
++		rsibling.test( selector )
++	);
++	return results;
++}
++
++// Deprecated
++Expr.pseudos["nth"] = Expr.pseudos["eq"];
++
++// Easy API for creating new setFilters
++function setFilters() {}
++Expr.filters = setFilters.prototype = Expr.pseudos;
++Expr.setFilters = new setFilters();
++
++// Initialize with the default document
++setDocument();
++
++// Override sizzle attribute retrieval
++Sizzle.attr = jQuery.attr;
++jQuery.find = Sizzle;
++jQuery.expr = Sizzle.selectors;
++jQuery.expr[":"] = jQuery.expr.pseudos;
++jQuery.unique = Sizzle.uniqueSort;
++jQuery.text = Sizzle.getText;
++jQuery.isXMLDoc = Sizzle.isXML;
++jQuery.contains = Sizzle.contains;
++
++
++})( window );
++var runtil = /Until$/,
++	rparentsprev = /^(?:parents|prev(?:Until|All))/,
++	isSimple = /^.[^:#\[\.,]*$/,
++	rneedsContext = jQuery.expr.match.needsContext,
++	// methods guaranteed to produce a unique set when starting from a unique set
++	guaranteedUnique = {
++		children: true,
++		contents: true,
++		next: true,
++		prev: true
++	};
++
++jQuery.fn.extend({
++	find: function( selector ) {
++		var i, ret, self,
++			len = this.length;
++
++		if ( typeof selector !== "string" ) {
++			self = this;
++			return this.pushStack( jQuery( selector ).filter(function() {
++				for ( i = 0; i < len; i++ ) {
++					if ( jQuery.contains( self[ i ], this ) ) {
++						return true;
++					}
++				}
++			}) );
++		}
++
++		ret = [];
++		for ( i = 0; i < len; i++ ) {
++			jQuery.find( selector, this[ i ], ret );
++		}
++
++		// Needed because $( selector, context ) becomes $( context ).find( selector )
++		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
++		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
++		return ret;
++	},
++
++	has: function( target ) {
++		var i,
++			targets = jQuery( target, this ),
++			len = targets.length;
++
++		return this.filter(function() {
++			for ( i = 0; i < len; i++ ) {
++				if ( jQuery.contains( this, targets[i] ) ) {
++					return true;
++				}
++			}
++		});
++	},
++
++	not: function( selector ) {
++		return this.pushStack( winnow(this, selector, false) );
++	},
++
++	filter: function( selector ) {
++		return this.pushStack( winnow(this, selector, true) );
++	},
++
++	is: function( selector ) {
++		return !!selector && (
++			typeof selector === "string" ?
++				// If this is a positional/relative selector, check membership in the returned set
++				// so $("p:first").is("p:last") won't return true for a doc with two "p".
++				rneedsContext.test( selector ) ?
++					jQuery( selector, this.context ).index( this[0] ) >= 0 :
++					jQuery.filter( selector, this ).length > 0 :
++				this.filter( selector ).length > 0 );
++	},
++
++	closest: function( selectors, context ) {
++		var cur,
++			i = 0,
++			l = this.length,
++			ret = [],
++			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
++				jQuery( selectors, context || this.context ) :
++				0;
++
++		for ( ; i < l; i++ ) {
++			cur = this[i];
++
++			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
++				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
++					ret.push( cur );
++					break;
++				}
++				cur = cur.parentNode;
++			}
++		}
++
++		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
++	},
++
++	// Determine the position of an element within
++	// the matched set of elements
++	index: function( elem ) {
++
++		// No argument, return index in parent
++		if ( !elem ) {
++			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
++		}
++
++		// index in selector
++		if ( typeof elem === "string" ) {
++			return jQuery.inArray( this[0], jQuery( elem ) );
++		}
++
++		// Locate the position of the desired element
++		return jQuery.inArray(
++			// If it receives a jQuery object, the first element is used
++			elem.jquery ? elem[0] : elem, this );
++	},
++
++	add: function( selector, context ) {
++		var set = typeof selector === "string" ?
++				jQuery( selector, context ) :
++				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
++			all = jQuery.merge( this.get(), set );
++
++		return this.pushStack( jQuery.unique(all) );
++	},
++
++	addBack: function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter(selector)
++		);
++	}
++});
++
++jQuery.fn.andSelf = jQuery.fn.addBack;
++
++function sibling( cur, dir ) {
++	do {
++		cur = cur[ dir ];
++	} while ( cur && cur.nodeType !== 1 );
++
++	return cur;
++}
++
++jQuery.each({
++	parent: function( elem ) {
++		var parent = elem.parentNode;
++		return parent && parent.nodeType !== 11 ? parent : null;
++	},
++	parents: function( elem ) {
++		return jQuery.dir( elem, "parentNode" );
++	},
++	parentsUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "parentNode", until );
++	},
++	next: function( elem ) {
++		return sibling( elem, "nextSibling" );
++	},
++	prev: function( elem ) {
++		return sibling( elem, "previousSibling" );
++	},
++	nextAll: function( elem ) {
++		return jQuery.dir( elem, "nextSibling" );
++	},
++	prevAll: function( elem ) {
++		return jQuery.dir( elem, "previousSibling" );
++	},
++	nextUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "nextSibling", until );
++	},
++	prevUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "previousSibling", until );
++	},
++	siblings: function( elem ) {
++		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
++	},
++	children: function( elem ) {
++		return jQuery.sibling( elem.firstChild );
++	},
++	contents: function( elem ) {
++		return jQuery.nodeName( elem, "iframe" ) ?
++			elem.contentDocument || elem.contentWindow.document :
++			jQuery.merge( [], elem.childNodes );
++	}
++}, function( name, fn ) {
++	jQuery.fn[ name ] = function( until, selector ) {
++		var ret = jQuery.map( this, fn, until );
++
++		if ( !runtil.test( name ) ) {
++			selector = until;
++		}
++
++		if ( selector && typeof selector === "string" ) {
++			ret = jQuery.filter( selector, ret );
++		}
++
++		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
++
++		if ( this.length > 1 && rparentsprev.test( name ) ) {
++			ret = ret.reverse();
++		}
++
++		return this.pushStack( ret );
++	};
++});
++
++jQuery.extend({
++	filter: function( expr, elems, not ) {
++		if ( not ) {
++			expr = ":not(" + expr + ")";
++		}
++
++		return elems.length === 1 ?
++			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
++			jQuery.find.matches(expr, elems);
++	},
++
++	dir: function( elem, dir, until ) {
++		var matched = [],
++			cur = elem[ dir ];
++
++		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
++			if ( cur.nodeType === 1 ) {
++				matched.push( cur );
++			}
++			cur = cur[dir];
++		}
++		return matched;
++	},
++
++	sibling: function( n, elem ) {
++		var r = [];
++
++		for ( ; n; n = n.nextSibling ) {
++			if ( n.nodeType === 1 && n !== elem ) {
++				r.push( n );
++			}
++		}
++
++		return r;
++	}
++});
++
++// Implement the identical functionality for filter and not
++function winnow( elements, qualifier, keep ) {
++
++	// Can't pass null or undefined to indexOf in Firefox 4
++	// Set to 0 to skip string check
++	qualifier = qualifier || 0;
++
++	if ( jQuery.isFunction( qualifier ) ) {
++		return jQuery.grep(elements, function( elem, i ) {
++			var retVal = !!qualifier.call( elem, i, elem );
++			return retVal === keep;
++		});
++
++	} else if ( qualifier.nodeType ) {
++		return jQuery.grep(elements, function( elem ) {
++			return ( elem === qualifier ) === keep;
++		});
++
++	} else if ( typeof qualifier === "string" ) {
++		var filtered = jQuery.grep(elements, function( elem ) {
++			return elem.nodeType === 1;
++		});
++
++		if ( isSimple.test( qualifier ) ) {
++			return jQuery.filter(qualifier, filtered, !keep);
++		} else {
++			qualifier = jQuery.filter( qualifier, filtered );
++		}
++	}
++
++	return jQuery.grep(elements, function( elem ) {
++		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
++	});
++}
++function createSafeFragment( document ) {
++	var list = nodeNames.split( "|" ),
++		safeFrag = document.createDocumentFragment();
++
++	if ( safeFrag.createElement ) {
++		while ( list.length ) {
++			safeFrag.createElement(
++				list.pop()
++			);
++		}
++	}
++	return safeFrag;
++}
++
++var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
++		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
++	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
++	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
++	rleadingWhitespace = /^\s+/,
++	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
++	rtagName = /<([\w:]+)/,
++	rtbody = /<tbody/i,
++	rhtml = /<|&#?\w+;/,
++	rnoInnerhtml = /<(?:script|style|link)/i,
++	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
++	// checked="checked" or checked
++	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
++	rscriptType = /^$|\/(?:java|ecma)script/i,
++	rscriptTypeMasked = /^true\/(.*)/,
++	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
++
++	// We have to close these tags to support XHTML (#13200)
++	wrapMap = {
++		option: [ 1, "<select multiple='multiple'>", "</select>" ],
++		legend: [ 1, "<fieldset>", "</fieldset>" ],
++		area: [ 1, "<map>", "</map>" ],
++		param: [ 1, "<object>", "</object>" ],
++		thead: [ 1, "<table>", "</table>" ],
++		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
++		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
++		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
++
++		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
++		// unless wrapped in a div with non-breaking characters in front of it.
++		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
++	},
++	safeFragment = createSafeFragment( document ),
++	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
++
++wrapMap.optgroup = wrapMap.option;
++wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
++wrapMap.th = wrapMap.td;
++
++jQuery.fn.extend({
++	text: function( value ) {
++		return jQuery.access( this, function( value ) {
++			return value === undefined ?
++				jQuery.text( this ) :
++				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
++		}, null, value, arguments.length );
++	},
++
++	wrapAll: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapAll( html.call(this, i) );
++			});
++		}
++
++		if ( this[0] ) {
++			// The elements to wrap the target around
++			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
++
++			if ( this[0].parentNode ) {
++				wrap.insertBefore( this[0] );
++			}
++
++			wrap.map(function() {
++				var elem = this;
++
++				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
++					elem = elem.firstChild;
++				}
++
++				return elem;
++			}).append( this );
++		}
++
++		return this;
++	},
++
++	wrapInner: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapInner( html.call(this, i) );
++			});
++		}
++
++		return this.each(function() {
++			var self = jQuery( this ),
++				contents = self.contents();
++
++			if ( contents.length ) {
++				contents.wrapAll( html );
++
++			} else {
++				self.append( html );
++			}
++		});
++	},
++
++	wrap: function( html ) {
++		var isFunction = jQuery.isFunction( html );
++
++		return this.each(function(i) {
++			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
++		});
++	},
++
++	unwrap: function() {
++		return this.parent().each(function() {
++			if ( !jQuery.nodeName( this, "body" ) ) {
++				jQuery( this ).replaceWith( this.childNodes );
++			}
++		}).end();
++	},
++
++	append: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
++				this.appendChild( elem );
++			}
++		});
++	},
++
++	prepend: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
++				this.insertBefore( elem, this.firstChild );
++			}
++		});
++	},
++
++	before: function() {
++		return this.domManip( arguments, false, function( elem ) {
++			if ( this.parentNode ) {
++				this.parentNode.insertBefore( elem, this );
++			}
++		});
++	},
++
++	after: function() {
++		return this.domManip( arguments, false, function( elem ) {
++			if ( this.parentNode ) {
++				this.parentNode.insertBefore( elem, this.nextSibling );
++			}
++		});
++	},
++
++	// keepData is for internal use only--do not document
++	remove: function( selector, keepData ) {
++		var elem,
++			i = 0;
++
++		for ( ; (elem = this[i]) != null; i++ ) {
++			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
++				if ( !keepData && elem.nodeType === 1 ) {
++					jQuery.cleanData( getAll( elem ) );
++				}
++
++				if ( elem.parentNode ) {
++					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
++						setGlobalEval( getAll( elem, "script" ) );
++					}
++					elem.parentNode.removeChild( elem );
++				}
++			}
++		}
++
++		return this;
++	},
++
++	empty: function() {
++		var elem,
++			i = 0;
++
++		for ( ; (elem = this[i]) != null; i++ ) {
++			// Remove element nodes and prevent memory leaks
++			if ( elem.nodeType === 1 ) {
++				jQuery.cleanData( getAll( elem, false ) );
++			}
++
++			// Remove any remaining nodes
++			while ( elem.firstChild ) {
++				elem.removeChild( elem.firstChild );
++			}
++
++			// If this is a select, ensure that it displays empty (#12336)
++			// Support: IE<9
++			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
++				elem.options.length = 0;
++			}
++		}
++
++		return this;
++	},
++
++	clone: function( dataAndEvents, deepDataAndEvents ) {
++		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
++		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
++
++		return this.map( function () {
++			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
++		});
++	},
++
++	html: function( value ) {
++		return jQuery.access( this, function( value ) {
++			var elem = this[0] || {},
++				i = 0,
++				l = this.length;
++
++			if ( value === undefined ) {
++				return elem.nodeType === 1 ?
++					elem.innerHTML.replace( rinlinejQuery, "" ) :
++					undefined;
++			}
++
++			// See if we can take a shortcut and just use innerHTML
++			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
++				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
++				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
++				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
++
++				value = value.replace( rxhtmlTag, "<$1></$2>" );
++
++				try {
++					for (; i < l; i++ ) {
++						// Remove element nodes and prevent memory leaks
++						elem = this[i] || {};
++						if ( elem.nodeType === 1 ) {
++							jQuery.cleanData( getAll( elem, false ) );
++							elem.innerHTML = value;
++						}
++					}
++
++					elem = 0;
++
++				// If using innerHTML throws an exception, use the fallback method
++				} catch(e) {}
++			}
++
++			if ( elem ) {
++				this.empty().append( value );
++			}
++		}, null, value, arguments.length );
++	},
++
++	replaceWith: function( value ) {
++		var isFunc = jQuery.isFunction( value );
++
++		// Make sure that the elements are removed from the DOM before they are inserted
++		// this can help fix replacing a parent with child elements
++		if ( !isFunc && typeof value !== "string" ) {
++			value = jQuery( value ).not( this ).detach();
++		}
++
++		return this.domManip( [ value ], true, function( elem ) {
++			var next = this.nextSibling,
++				parent = this.parentNode;
++
++			if ( parent ) {
++				jQuery( this ).remove();
++				parent.insertBefore( elem, next );
++			}
++		});
++	},
++
++	detach: function( selector ) {
++		return this.remove( selector, true );
++	},
++
++	domManip: function( args, table, callback ) {
++
++		// Flatten any nested arrays
++		args = core_concat.apply( [], args );
++
++		var first, node, hasScripts,
++			scripts, doc, fragment,
++			i = 0,
++			l = this.length,
++			set = this,
++			iNoClone = l - 1,
++			value = args[0],
++			isFunction = jQuery.isFunction( value );
++
++		// We can't cloneNode fragments that contain checked, in WebKit
++		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
++			return this.each(function( index ) {
++				var self = set.eq( index );
++				if ( isFunction ) {
++					args[0] = value.call( this, index, table ? self.html() : undefined );
++				}
++				self.domManip( args, table, callback );
++			});
++		}
++
++		if ( l ) {
++			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
++			first = fragment.firstChild;
++
++			if ( fragment.childNodes.length === 1 ) {
++				fragment = first;
++			}
++
++			if ( first ) {
++				table = table && jQuery.nodeName( first, "tr" );
++				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
++				hasScripts = scripts.length;
++
++				// Use the original fragment for the last item instead of the first because it can end up
++				// being emptied incorrectly in certain situations (#8070).
++				for ( ; i < l; i++ ) {
++					node = fragment;
++
++					if ( i !== iNoClone ) {
++						node = jQuery.clone( node, true, true );
++
++						// Keep references to cloned scripts for later restoration
++						if ( hasScripts ) {
++							jQuery.merge( scripts, getAll( node, "script" ) );
++						}
++					}
++
++					callback.call(
++						table && jQuery.nodeName( this[i], "table" ) ?
++							findOrAppend( this[i], "tbody" ) :
++							this[i],
++						node,
++						i
++					);
++				}
++
++				if ( hasScripts ) {
++					doc = scripts[ scripts.length - 1 ].ownerDocument;
++
++					// Reenable scripts
++					jQuery.map( scripts, restoreScript );
++
++					// Evaluate executable scripts on first document insertion
++					for ( i = 0; i < hasScripts; i++ ) {
++						node = scripts[ i ];
++						if ( rscriptType.test( node.type || "" ) &&
++							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
++
++							if ( node.src ) {
++								// Hope ajax is available...
++								jQuery.ajax({
++									url: node.src,
++									type: "GET",
++									dataType: "script",
++									async: false,
++									global: false,
++									"throws": true
++								});
++							} else {
++								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
++							}
++						}
++					}
++				}
++
++				// Fix #11809: Avoid leaking memory
++				fragment = first = null;
++			}
++		}
++
++		return this;
++	}
++});
++
++function findOrAppend( elem, tag ) {
++	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
++}
++
++// Replace/restore the type attribute of script elements for safe DOM manipulation
++function disableScript( elem ) {
++	var attr = elem.getAttributeNode("type");
++	elem.type = ( attr && attr.specified ) + "/" + elem.type;
++	return elem;
++}
++function restoreScript( elem ) {
++	var match = rscriptTypeMasked.exec( elem.type );
++	if ( match ) {
++		elem.type = match[1];
++	} else {
++		elem.removeAttribute("type");
++	}
++	return elem;
++}
++
++// Mark scripts as having already been evaluated
++function setGlobalEval( elems, refElements ) {
++	var elem,
++		i = 0;
++	for ( ; (elem = elems[i]) != null; i++ ) {
++		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
++	}
++}
++
++function cloneCopyEvent( src, dest ) {
++
++	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
++		return;
++	}
++
++	var type, i, l,
++		oldData = jQuery._data( src ),
++		curData = jQuery._data( dest, oldData ),
++		events = oldData.events;
++
++	if ( events ) {
++		delete curData.handle;
++		curData.events = {};
++
++		for ( type in events ) {
++			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
++				jQuery.event.add( dest, type, events[ type ][ i ] );
++			}
++		}
++	}
++
++	// make the cloned public data object a copy from the original
++	if ( curData.data ) {
++		curData.data = jQuery.extend( {}, curData.data );
++	}
++}
++
++function fixCloneNodeIssues( src, dest ) {
++	var nodeName, e, data;
++
++	// We do not need to do anything for non-Elements
++	if ( dest.nodeType !== 1 ) {
++		return;
++	}
++
++	nodeName = dest.nodeName.toLowerCase();
++
++	// IE6-8 copies events bound via attachEvent when using cloneNode.
++	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
++		data = jQuery._data( dest );
++
++		for ( e in data.events ) {
++			jQuery.removeEvent( dest, e, data.handle );
++		}
++
++		// Event data gets referenced instead of copied if the expando gets copied too
++		dest.removeAttribute( jQuery.expando );
++	}
++
++	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
++	if ( nodeName === "script" && dest.text !== src.text ) {
++		disableScript( dest ).text = src.text;
++		restoreScript( dest );
++
++	// IE6-10 improperly clones children of object elements using classid.
++	// IE10 throws NoModificationAllowedError if parent is null, #12132.
++	} else if ( nodeName === "object" ) {
++		if ( dest.parentNode ) {
++			dest.outerHTML = src.outerHTML;
++		}
++
++		// This path appears unavoidable for IE9. When cloning an object
++		// element in IE9, the outerHTML strategy above is not sufficient.
++		// If the src has innerHTML and the destination does not,
++		// copy the src.innerHTML into the dest.innerHTML. #10324
++		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
++			dest.innerHTML = src.innerHTML;
++		}
++
++	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
++		// IE6-8 fails to persist the checked state of a cloned checkbox
++		// or radio button. Worse, IE6-7 fail to give the cloned element
++		// a checked appearance if the defaultChecked value isn't also set
++
++		dest.defaultChecked = dest.checked = src.checked;
++
++		// IE6-7 get confused and end up setting the value of a cloned
++		// checkbox/radio button to an empty string instead of "on"
++		if ( dest.value !== src.value ) {
++			dest.value = src.value;
++		}
++
++	// IE6-8 fails to return the selected option to the default selected
++	// state when cloning options
++	} else if ( nodeName === "option" ) {
++		dest.defaultSelected = dest.selected = src.defaultSelected;
++
++	// IE6-8 fails to set the defaultValue to the correct value when
++	// cloning other types of input fields
++	} else if ( nodeName === "input" || nodeName === "textarea" ) {
++		dest.defaultValue = src.defaultValue;
++	}
++}
++
++jQuery.each({
++	appendTo: "append",
++	prependTo: "prepend",
++	insertBefore: "before",
++	insertAfter: "after",
++	replaceAll: "replaceWith"
++}, function( name, original ) {
++	jQuery.fn[ name ] = function( selector ) {
++		var elems,
++			i = 0,
++			ret = [],
++			insert = jQuery( selector ),
++			last = insert.length - 1;
++
++		for ( ; i <= last; i++ ) {
++			elems = i === last ? this : this.clone(true);
++			jQuery( insert[i] )[ original ]( elems );
++
++			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
++			core_push.apply( ret, elems.get() );
++		}
++
++		return this.pushStack( ret );
++	};
++});
++
++function getAll( context, tag ) {
++	var elems, elem,
++		i = 0,
++		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
++			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
++			undefined;
++
++	if ( !found ) {
++		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
++			if ( !tag || jQuery.nodeName( elem, tag ) ) {
++				found.push( elem );
++			} else {
++				jQuery.merge( found, getAll( elem, tag ) );
++			}
++		}
++	}
++
++	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
++		jQuery.merge( [ context ], found ) :
++		found;
++}
++
++// Used in buildFragment, fixes the defaultChecked property
++function fixDefaultChecked( elem ) {
++	if ( manipulation_rcheckableType.test( elem.type ) ) {
++		elem.defaultChecked = elem.checked;
++	}
++}
++
++jQuery.extend({
++	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
++		var destElements, node, clone, i, srcElements,
++			inPage = jQuery.contains( elem.ownerDocument, elem );
++
++		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
++			clone = elem.cloneNode( true );
++
++		// IE<=8 does not properly clone detached, unknown element nodes
++		} else {
++			fragmentDiv.innerHTML = elem.outerHTML;
++			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
++		}
++
++		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
++				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
++
++			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
++			destElements = getAll( clone );
++			srcElements = getAll( elem );
++
++			// Fix all IE cloning issues
++			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
++				// Ensure that the destination node is not null; Fixes #9587
++				if ( destElements[i] ) {
++					fixCloneNodeIssues( node, destElements[i] );
++				}
++			}
++		}
++
++		// Copy the events from the original to the clone
++		if ( dataAndEvents ) {
++			if ( deepDataAndEvents ) {
++				srcElements = srcElements || getAll( elem );
++				destElements = destElements || getAll( clone );
++
++				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
++					cloneCopyEvent( node, destElements[i] );
++				}
++			} else {
++				cloneCopyEvent( elem, clone );
++			}
++		}
++
++		// Preserve script evaluation history
++		destElements = getAll( clone, "script" );
++		if ( destElements.length > 0 ) {
++			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
++		}
++
++		destElements = srcElements = node = null;
++
++		// Return the cloned set
++		return clone;
++	},
++
++	buildFragment: function( elems, context, scripts, selection ) {
++		var j, elem, contains,
++			tmp, tag, tbody, wrap,
++			l = elems.length,
++
++			// Ensure a safe fragment
++			safe = createSafeFragment( context ),
++
++			nodes = [],
++			i = 0;
++
++		for ( ; i < l; i++ ) {
++			elem = elems[ i ];
++
++			if ( elem || elem === 0 ) {
++
++				// Add nodes directly
++				if ( jQuery.type( elem ) === "object" ) {
++					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
++
++				// Convert non-html into a text node
++				} else if ( !rhtml.test( elem ) ) {
++					nodes.push( context.createTextNode( elem ) );
++
++				// Convert html into DOM nodes
++				} else {
++					tmp = tmp || safe.appendChild( context.createElement("div") );
++
++					// Deserialize a standard representation
++					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
++					wrap = wrapMap[ tag ] || wrapMap._default;
++
++					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
++
++					// Descend through wrappers to the right content
++					j = wrap[0];
++					while ( j-- ) {
++						tmp = tmp.lastChild;
++					}
++
++					// Manually add leading whitespace removed by IE
++					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
++						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
++					}
++
++					// Remove IE's autoinserted <tbody> from table fragments
++					if ( !jQuery.support.tbody ) {
++
++						// String was a <table>, *may* have spurious <tbody>
++						elem = tag === "table" && !rtbody.test( elem ) ?
++							tmp.firstChild :
++
++							// String was a bare <thead> or <tfoot>
++							wrap[1] === "<table>" && !rtbody.test( elem ) ?
++								tmp :
++								0;
++
++						j = elem && elem.childNodes.length;
++						while ( j-- ) {
++							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
++								elem.removeChild( tbody );
++							}
++						}
++					}
++
++					jQuery.merge( nodes, tmp.childNodes );
++
++					// Fix #12392 for WebKit and IE > 9
++					tmp.textContent = "";
++
++					// Fix #12392 for oldIE
++					while ( tmp.firstChild ) {
++						tmp.removeChild( tmp.firstChild );
++					}
++
++					// Remember the top-level container for proper cleanup
++					tmp = safe.lastChild;
++				}
++			}
++		}
++
++		// Fix #11356: Clear elements from fragment
++		if ( tmp ) {
++			safe.removeChild( tmp );
++		}
++
++		// Reset defaultChecked for any radios and checkboxes
++		// about to be appended to the DOM in IE 6/7 (#8060)
++		if ( !jQuery.support.appendChecked ) {
++			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
++		}
++
++		i = 0;
++		while ( (elem = nodes[ i++ ]) ) {
++
++			// #4087 - If origin and destination elements are the same, and this is
++			// that element, do not do anything
++			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
++				continue;
++			}
++
++			contains = jQuery.contains( elem.ownerDocument, elem );
++
++			// Append to fragment
++			tmp = getAll( safe.appendChild( elem ), "script" );
++
++			// Preserve script evaluation history
++			if ( contains ) {
++				setGlobalEval( tmp );
++			}
++
++			// Capture executables
++			if ( scripts ) {
++				j = 0;
++				while ( (elem = tmp[ j++ ]) ) {
++					if ( rscriptType.test( elem.type || "" ) ) {
++						scripts.push( elem );
++					}
++				}
++			}
++		}
++
++		tmp = null;
++
++		return safe;
++	},
++
++	cleanData: function( elems, /* internal */ acceptData ) {
++		var elem, type, id, data,
++			i = 0,
++			internalKey = jQuery.expando,
++			cache = jQuery.cache,
++			deleteExpando = jQuery.support.deleteExpando,
++			special = jQuery.event.special;
++
++		for ( ; (elem = elems[i]) != null; i++ ) {
++
++			if ( acceptData || jQuery.acceptData( elem ) ) {
++
++				id = elem[ internalKey ];
++				data = id && cache[ id ];
++
++				if ( data ) {
++					if ( data.events ) {
++						for ( type in data.events ) {
++							if ( special[ type ] ) {
++								jQuery.event.remove( elem, type );
++
++							// This is a shortcut to avoid jQuery.event.remove's overhead
++							} else {
++								jQuery.removeEvent( elem, type, data.handle );
++							}
++						}
++					}
++
++					// Remove cache only if it was not already removed by jQuery.event.remove
++					if ( cache[ id ] ) {
++
++						delete cache[ id ];
++
++						// IE does not allow us to delete expando properties from nodes,
++						// nor does it have a removeAttribute function on Document nodes;
++						// we must handle all of these cases
++						if ( deleteExpando ) {
++							delete elem[ internalKey ];
++
++						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
++							elem.removeAttribute( internalKey );
++
++						} else {
++							elem[ internalKey ] = null;
++						}
++
++						core_deletedIds.push( id );
++					}
++				}
++			}
++		}
++	}
++});
++var iframe, getStyles, curCSS,
++	ralpha = /alpha\([^)]*\)/i,
++	ropacity = /opacity\s*=\s*([^)]*)/,
++	rposition = /^(top|right|bottom|left)$/,
++	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
++	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
++	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
++	rmargin = /^margin/,
++	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
++	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
++	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
++	elemdisplay = { BODY: "block" },
++
++	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
++	cssNormalTransform = {
++		letterSpacing: 0,
++		fontWeight: 400
++	},
++
++	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
++	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
++
++// return a css property mapped to a potentially vendor prefixed property
++function vendorPropName( style, name ) {
++
++	// shortcut for names that are not vendor prefixed
++	if ( name in style ) {
++		return name;
++	}
++
++	// check for vendor prefixed names
++	var capName = name.charAt(0).toUpperCase() + name.slice(1),
++		origName = name,
++		i = cssPrefixes.length;
++
++	while ( i-- ) {
++		name = cssPrefixes[ i ] + capName;
++		if ( name in style ) {
++			return name;
++		}
++	}
++
++	return origName;
++}
++
++function isHidden( elem, el ) {
++	// isHidden might be called from jQuery#filter function;
++	// in that case, element will be second argument
++	elem = el || elem;
++	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
++}
++
++function showHide( elements, show ) {
++	var display, elem, hidden,
++		values = [],
++		index = 0,
++		length = elements.length;
++
++	for ( ; index < length; index++ ) {
++		elem = elements[ index ];
++		if ( !elem.style ) {
++			continue;
++		}
++
++		values[ index ] = jQuery._data( elem, "olddisplay" );
++		display = elem.style.display;
++		if ( show ) {
++			// Reset the inline display of this element to learn if it is
++			// being hidden by cascaded rules or not
++			if ( !values[ index ] && display === "none" ) {
++				elem.style.display = "";
++			}
++
++			// Set elements which have been overridden with display: none
++			// in a stylesheet to whatever the default browser style is
++			// for such an element
++			if ( elem.style.display === "" && isHidden( elem ) ) {
++				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
++			}
++		} else {
++
++			if ( !values[ index ] ) {
++				hidden = isHidden( elem );
++
++				if ( display && display !== "none" || !hidden ) {
++					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
++				}
++			}
++		}
++	}
++
++	// Set the display of most of the elements in a second loop
++	// to avoid the constant reflow
++	for ( index = 0; index < length; index++ ) {
++		elem = elements[ index ];
++		if ( !elem.style ) {
++			continue;
++		}
++		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
++			elem.style.display = show ? values[ index ] || "" : "none";
++		}
++	}
++
++	return elements;
++}
++
++jQuery.fn.extend({
++	css: function( name, value ) {
++		return jQuery.access( this, function( elem, name, value ) {
++			var len, styles,
++				map = {},
++				i = 0;
++
++			if ( jQuery.isArray( name ) ) {
++				styles = getStyles( elem );
++				len = name.length;
++
++				for ( ; i < len; i++ ) {
++					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
++				}
++
++				return map;
++			}
++
++			return value !== undefined ?
++				jQuery.style( elem, name, value ) :
++				jQuery.css( elem, name );
++		}, name, value, arguments.length > 1 );
++	},
++	show: function() {
++		return showHide( this, true );
++	},
++	hide: function() {
++		return showHide( this );
++	},
++	toggle: function( state ) {
++		var bool = typeof state === "boolean";
++
++		return this.each(function() {
++			if ( bool ? state : isHidden( this ) ) {
++				jQuery( this ).show();
++			} else {
++				jQuery( this ).hide();
++			}
++		});
++	}
++});
++
++jQuery.extend({
++	// Add in style property hooks for overriding the default
++	// behavior of getting and setting a style property
++	cssHooks: {
++		opacity: {
++			get: function( elem, computed ) {
++				if ( computed ) {
++					// We should always get a number back from opacity
++					var ret = curCSS( elem, "opacity" );
++					return ret === "" ? "1" : ret;
++				}
++			}
++		}
++	},
++
++	// Exclude the following css properties to add px
++	cssNumber: {
++		"columnCount": true,
++		"fillOpacity": true,
++		"fontWeight": true,
++		"lineHeight": true,
++		"opacity": true,
++		"orphans": true,
++		"widows": true,
++		"zIndex": true,
++		"zoom": true
++	},
++
++	// Add in properties whose names you wish to fix before
++	// setting or getting the value
++	cssProps: {
++		// normalize float css property
++		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
++	},
++
++	// Get and set the style property on a DOM Node
++	style: function( elem, name, value, extra ) {
++		// Don't set styles on text and comment nodes
++		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
++			return;
++		}
++
++		// Make sure that we're working with the right name
++		var ret, type, hooks,
++			origName = jQuery.camelCase( name ),
++			style = elem.style;
++
++		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
++
++		// gets hook for the prefixed version
++		// followed by the unprefixed version
++		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
++
++		// Check if we're setting a value
++		if ( value !== undefined ) {
++			type = typeof value;
++
++			// convert relative number strings (+= or -=) to relative numbers. #7345
++			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
++				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
++				// Fixes bug #9237
++				type = "number";
++			}
++
++			// Make sure that NaN and null values aren't set. See: #7116
++			if ( value == null || type === "number" && isNaN( value ) ) {
++				return;
++			}
++
++			// If a number was passed in, add 'px' to the (except for certain CSS properties)
++			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
++				value += "px";
++			}
++
++			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
++			// but it would mean to define eight (for every problematic property) identical functions
++			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
++				style[ name ] = "inherit";
++			}
++
++			// If a hook was provided, use that value, otherwise just set the specified value
++			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
++
++				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
++				// Fixes bug #5509
++				try {
++					style[ name ] = value;
++				} catch(e) {}
++			}
++
++		} else {
++			// If a hook was provided get the non-computed value from there
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
++				return ret;
++			}
++
++			// Otherwise just get the value from the style object
++			return style[ name ];
++		}
++	},
++
++	css: function( elem, name, extra, styles ) {
++		var num, val, hooks,
++			origName = jQuery.camelCase( name );
++
++		// Make sure that we're working with the right name
++		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
++
++		// gets hook for the prefixed version
++		// followed by the unprefixed version
++		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
++
++		// If a hook was provided get the computed value from there
++		if ( hooks && "get" in hooks ) {
++			val = hooks.get( elem, true, extra );
++		}
++
++		// Otherwise, if a way to get the computed value exists, use that
++		if ( val === undefined ) {
++			val = curCSS( elem, name, styles );
++		}
++
++		//convert "normal" to computed value
++		if ( val === "normal" && name in cssNormalTransform ) {
++			val = cssNormalTransform[ name ];
++		}
++
++		// Return, converting to number if forced or a qualifier was provided and val looks numeric
++		if ( extra === "" || extra ) {
++			num = parseFloat( val );
++			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
++		}
++		return val;
++	},
++
++	// A method for quickly swapping in/out CSS properties to get correct calculations
++	swap: function( elem, options, callback, args ) {
++		var ret, name,
++			old = {};
++
++		// Remember the old values, and insert the new ones
++		for ( name in options ) {
++			old[ name ] = elem.style[ name ];
++			elem.style[ name ] = options[ name ];
++		}
++
++		ret = callback.apply( elem, args || [] );
++
++		// Revert the old values
++		for ( name in options ) {
++			elem.style[ name ] = old[ name ];
++		}
++
++		return ret;
++	}
++});
++
++// NOTE: we've included the "window" in window.getComputedStyle
++// because jsdom on node.js will break without it.
++if ( window.getComputedStyle ) {
++	getStyles = function( elem ) {
++		return window.getComputedStyle( elem, null );
++	};
++
++	curCSS = function( elem, name, _computed ) {
++		var width, minWidth, maxWidth,
++			computed = _computed || getStyles( elem ),
++
++			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
++			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
++			style = elem.style;
++
++		if ( computed ) {
++
++			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
++				ret = jQuery.style( elem, name );
++			}
++
++			// A tribute to the "awesome hack by Dean Edwards"
++			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
++			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
++			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
++			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
++
++				// Remember the original values
++				width = style.width;
++				minWidth = style.minWidth;
++				maxWidth = style.maxWidth;
++
++				// Put in the new values to get a computed value out
++				style.minWidth = style.maxWidth = style.width = ret;
++				ret = computed.width;
++
++				// Revert the changed values
++				style.width = width;
++				style.minWidth = minWidth;
++				style.maxWidth = maxWidth;
++			}
++		}
++
++		return ret;
++	};
++} else if ( document.documentElement.currentStyle ) {
++	getStyles = function( elem ) {
++		return elem.currentStyle;
++	};
++
++	curCSS = function( elem, name, _computed ) {
++		var left, rs, rsLeft,
++			computed = _computed || getStyles( elem ),
++			ret = computed ? computed[ name ] : undefined,
++			style = elem.style;
++
++		// Avoid setting ret to empty string here
++		// so we don't default to auto
++		if ( ret == null && style && style[ name ] ) {
++			ret = style[ name ];
++		}
++
++		// From the awesome hack by Dean Edwards
++		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
++
++		// If we're not dealing with a regular pixel number
++		// but a number that has a weird ending, we need to convert it to pixels
++		// but not position css attributes, as those are proportional to the parent element instead
++		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
++		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
++
++			// Remember the original values
++			left = style.left;
++			rs = elem.runtimeStyle;
++			rsLeft = rs && rs.left;
++
++			// Put in the new values to get a computed value out
++			if ( rsLeft ) {
++				rs.left = elem.currentStyle.left;
++			}
++			style.left = name === "fontSize" ? "1em" : ret;
++			ret = style.pixelLeft + "px";
++
++			// Revert the changed values
++			style.left = left;
++			if ( rsLeft ) {
++				rs.left = rsLeft;
++			}
++		}
++
++		return ret === "" ? "auto" : ret;
++	};
++}
++
++function setPositiveNumber( elem, value, subtract ) {
++	var matches = rnumsplit.exec( value );
++	return matches ?
++		// Guard against undefined "subtract", e.g., when used as in cssHooks
++		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
++		value;
++}
++
++function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
++	var i = extra === ( isBorderBox ? "border" : "content" ) ?
++		// If we already have the right measurement, avoid augmentation
++		4 :
++		// Otherwise initialize for horizontal or vertical properties
++		name === "width" ? 1 : 0,
++
++		val = 0;
++
++	for ( ; i < 4; i += 2 ) {
++		// both box models exclude margin, so add it if we want it
++		if ( extra === "margin" ) {
++			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
++		}
++
++		if ( isBorderBox ) {
++			// border-box includes padding, so remove it if we want content
++			if ( extra === "content" ) {
++				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
++			}
++
++			// at this point, extra isn't border nor margin, so remove border
++			if ( extra !== "margin" ) {
++				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
++			}
++		} else {
++			// at this point, extra isn't content, so add padding
++			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
++
++			// at this point, extra isn't content nor padding, so add border
++			if ( extra !== "padding" ) {
++				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
++			}
++		}
++	}
++
++	return val;
++}
++
++function getWidthOrHeight( elem, name, extra ) {
++
++	// Start with offset property, which is equivalent to the border-box value
++	var valueIsBorderBox = true,
++		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
++		styles = getStyles( elem ),
++		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
++
++	// some non-html elements return undefined for offsetWidth, so check for null/undefined
++	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
++	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
++	if ( val <= 0 || val == null ) {
++		// Fall back to computed then uncomputed css if necessary
++		val = curCSS( elem, name, styles );
++		if ( val < 0 || val == null ) {
++			val = elem.style[ name ];
++		}
++
++		// Computed unit is not pixels. Stop here and return.
++		if ( rnumnonpx.test(val) ) {
++			return val;
++		}
++
++		// we need the check for style in case a browser which returns unreliable values
++		// for getComputedStyle silently falls back to the reliable elem.style
++		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
++
++		// Normalize "", auto, and prepare for extra
++		val = parseFloat( val ) || 0;
++	}
++
++	// use the active box-sizing model to add/subtract irrelevant styles
++	return ( val +
++		augmentWidthOrHeight(
++			elem,
++			name,
++			extra || ( isBorderBox ? "border" : "content" ),
++			valueIsBorderBox,
++			styles
++		)
++	) + "px";
++}
++
++// Try to determine the default display value of an element
++function css_defaultDisplay( nodeName ) {
++	var doc = document,
++		display = elemdisplay[ nodeName ];
++
++	if ( !display ) {
++		display = actualDisplay( nodeName, doc );
++
++		// If the simple way fails, read from inside an iframe
++		if ( display === "none" || !display ) {
++			// Use the already-created iframe if possible
++			iframe = ( iframe ||
++				jQuery("<iframe frameborder='0' width='0' height='0'/>")
++				.css( "cssText", "display:block !important" )
++			).appendTo( doc.documentElement );
++
++			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
++			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
++			doc.write("<!doctype html><html><body>");
++			doc.close();
++
++			display = actualDisplay( nodeName, doc );
++			iframe.detach();
++		}
++
++		// Store the correct default display
++		elemdisplay[ nodeName ] = display;
++	}
++
++	return display;
++}
++
++// Called ONLY from within css_defaultDisplay
++function actualDisplay( name, doc ) {
++	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
++		display = jQuery.css( elem[0], "display" );
++	elem.remove();
++	return display;
++}
++
++jQuery.each([ "height", "width" ], function( i, name ) {
++	jQuery.cssHooks[ name ] = {
++		get: function( elem, computed, extra ) {
++			if ( computed ) {
++				// certain elements can have dimension info if we invisibly show them
++				// however, it must have a current display style that would benefit from this
++				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
++					jQuery.swap( elem, cssShow, function() {
++						return getWidthOrHeight( elem, name, extra );
++					}) :
++					getWidthOrHeight( elem, name, extra );
++			}
++		},
++
++		set: function( elem, value, extra ) {
++			var styles = extra && getStyles( elem );
++			return setPositiveNumber( elem, value, extra ?
++				augmentWidthOrHeight(
++					elem,
++					name,
++					extra,
++					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
++					styles
++				) : 0
++			);
++		}
++	};
++});
++
++if ( !jQuery.support.opacity ) {
++	jQuery.cssHooks.opacity = {
++		get: function( elem, computed ) {
++			// IE uses filters for opacity
++			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
++				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
++				computed ? "1" : "";
++		},
++
++		set: function( elem, value ) {
++			var style = elem.style,
++				currentStyle = elem.currentStyle,
++				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
++				filter = currentStyle && currentStyle.filter || style.filter || "";
++
++			// IE has trouble with opacity if it does not have layout
++			// Force it by setting the zoom level
++			style.zoom = 1;
++
++			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
++			// if value === "", then remove inline opacity #12685
++			if ( ( value >= 1 || value === "" ) &&
++					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
++					style.removeAttribute ) {
++
++				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
++				// if "filter:" is present at all, clearType is disabled, we want to avoid this
++				// style.removeAttribute is IE Only, but so apparently is this code path...
++				style.removeAttribute( "filter" );
++
++				// if there is no filter style applied in a css rule or unset inline opacity, we are done
++				if ( value === "" || currentStyle && !currentStyle.filter ) {
++					return;
++				}
++			}
++
++			// otherwise, set new filter values
++			style.filter = ralpha.test( filter ) ?
++				filter.replace( ralpha, opacity ) :
++				filter + " " + opacity;
++		}
++	};
++}
++
++// These hooks cannot be added until DOM ready because the support test
++// for it is not run until after DOM ready
++jQuery(function() {
++	if ( !jQuery.support.reliableMarginRight ) {
++		jQuery.cssHooks.marginRight = {
++			get: function( elem, computed ) {
++				if ( computed ) {
++					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++					// Work around by temporarily setting element display to inline-block
++					return jQuery.swap( elem, { "display": "inline-block" },
++						curCSS, [ elem, "marginRight" ] );
++				}
++			}
++		};
++	}
++
++	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
++	// getComputedStyle returns percent when specified for top/left/bottom/right
++	// rather than make the css module depend on the offset module, we just check for it here
++	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
++		jQuery.each( [ "top", "left" ], function( i, prop ) {
++			jQuery.cssHooks[ prop ] = {
++				get: function( elem, computed ) {
++					if ( computed ) {
++						computed = curCSS( elem, prop );
++						// if curCSS returns percentage, fallback to offset
++						return rnumnonpx.test( computed ) ?
++							jQuery( elem ).position()[ prop ] + "px" :
++							computed;
++					}
++				}
++			};
++		});
++	}
++
++});
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.hidden = function( elem ) {
++		// Support: Opera <= 12.12
++		// Opera reports offsetWidths and offsetHeights less than zero on some elements
++		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
++			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
++	};
++
++	jQuery.expr.filters.visible = function( elem ) {
++		return !jQuery.expr.filters.hidden( elem );
++	};
++}
++
++// These hooks are used by animate to expand properties
++jQuery.each({
++	margin: "",
++	padding: "",
++	border: "Width"
++}, function( prefix, suffix ) {
++	jQuery.cssHooks[ prefix + suffix ] = {
++		expand: function( value ) {
++			var i = 0,
++				expanded = {},
++
++				// assumes a single number if not a string
++				parts = typeof value === "string" ? value.split(" ") : [ value ];
++
++			for ( ; i < 4; i++ ) {
++				expanded[ prefix + cssExpand[ i ] + suffix ] =
++					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
++			}
++
++			return expanded;
++		}
++	};
++
++	if ( !rmargin.test( prefix ) ) {
++		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
++	}
++});
++var r20 = /%20/g,
++	rbracket = /\[\]$/,
++	rCRLF = /\r?\n/g,
++	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
++	rsubmittable = /^(?:input|select|textarea|keygen)/i;
++
++jQuery.fn.extend({
++	serialize: function() {
++		return jQuery.param( this.serializeArray() );
++	},
++	serializeArray: function() {
++		return this.map(function(){
++			// Can add propHook for "elements" to filter or add form elements
++			var elements = jQuery.prop( this, "elements" );
++			return elements ? jQuery.makeArray( elements ) : this;
++		})
++		.filter(function(){
++			var type = this.type;
++			// Use .is(":disabled") so that fieldset[disabled] works
++			return this.name && !jQuery( this ).is( ":disabled" ) &&
++				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
++				( this.checked || !manipulation_rcheckableType.test( type ) );
++		})
++		.map(function( i, elem ){
++			var val = jQuery( this ).val();
++
++			return val == null ?
++				null :
++				jQuery.isArray( val ) ?
++					jQuery.map( val, function( val ){
++						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++					}) :
++					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++		}).get();
++	}
++});
++
++//Serialize an array of form elements or a set of
++//key/values into a query string
++jQuery.param = function( a, traditional ) {
++	var prefix,
++		s = [],
++		add = function( key, value ) {
++			// If value is a function, invoke it and return its value
++			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
++			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
++		};
++
++	// Set traditional to true for jQuery <= 1.3.2 behavior.
++	if ( traditional === undefined ) {
++		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
++	}
++
++	// If an array was passed in, assume that it is an array of form elements.
++	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
++		// Serialize the form elements
++		jQuery.each( a, function() {
++			add( this.name, this.value );
++		});
++
++	} else {
++		// If traditional, encode the "old" way (the way 1.3.2 or older
++		// did it), otherwise encode params recursively.
++		for ( prefix in a ) {
++			buildParams( prefix, a[ prefix ], traditional, add );
++		}
++	}
++
++	// Return the resulting serialization
++	return s.join( "&" ).replace( r20, "+" );
++};
++
++function buildParams( prefix, obj, traditional, add ) {
++	var name;
++
++	if ( jQuery.isArray( obj ) ) {
++		// Serialize array item.
++		jQuery.each( obj, function( i, v ) {
++			if ( traditional || rbracket.test( prefix ) ) {
++				// Treat each array item as a scalar.
++				add( prefix, v );
++
++			} else {
++				// Item is non-scalar (array or object), encode its numeric index.
++				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
++			}
++		});
++
++	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
++		// Serialize object item.
++		for ( name in obj ) {
++			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
++		}
++
++	} else {
++		// Serialize scalar item.
++		add( prefix, obj );
++	}
++}
++jQuery.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( i, name ) {
++
++	// Handle event binding
++	jQuery.fn[ name ] = function( data, fn ) {
++		return arguments.length > 0 ?
++			this.on( name, null, data, fn ) :
++			this.trigger( name );
++	};
++});
++
++jQuery.fn.hover = function( fnOver, fnOut ) {
++	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
++};
++var
++	// Document location
++	ajaxLocParts,
++	ajaxLocation,
++	ajax_nonce = jQuery.now(),
++
++	ajax_rquery = /\?/,
++	rhash = /#.*$/,
++	rts = /([?&])_=[^&]*/,
++	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
++	// #7653, #8125, #8152: local protocol detection
++	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
++	rnoContent = /^(?:GET|HEAD)$/,
++	rprotocol = /^\/\//,
++	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
++
++	// Keep a copy of the old load method
++	_load = jQuery.fn.load,
++
++	/* Prefilters
++	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
++	 * 2) These are called:
++	 *    - BEFORE asking for a transport
++	 *    - AFTER param serialization (s.data is a string if s.processData is true)
++	 * 3) key is the dataType
++	 * 4) the catchall symbol "*" can be used
++	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
++	 */
++	prefilters = {},
++
++	/* Transports bindings
++	 * 1) key is the dataType
++	 * 2) the catchall symbol "*" can be used
++	 * 3) selection will start with transport dataType and THEN go to "*" if needed
++	 */
++	transports = {},
++
++	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
++	allTypes = "*/".concat("*");
++
++// #8138, IE may throw an exception when accessing
++// a field from window.location if document.domain has been set
++try {
++	ajaxLocation = location.href;
++} catch( e ) {
++	// Use the href attribute of an A element
++	// since IE will modify it given document.location
++	ajaxLocation = document.createElement( "a" );
++	ajaxLocation.href = "";
++	ajaxLocation = ajaxLocation.href;
++}
++
++// Segment location into parts
++ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
++
++// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
++function addToPrefiltersOrTransports( structure ) {
++
++	// dataTypeExpression is optional and defaults to "*"
++	return function( dataTypeExpression, func ) {
++
++		if ( typeof dataTypeExpression !== "string" ) {
++			func = dataTypeExpression;
++			dataTypeExpression = "*";
++		}
++
++		var dataType,
++			i = 0,
++			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
++
++		if ( jQuery.isFunction( func ) ) {
++			// For each dataType in the dataTypeExpression
++			while ( (dataType = dataTypes[i++]) ) {
++				// Prepend if requested
++				if ( dataType[0] === "+" ) {
++					dataType = dataType.slice( 1 ) || "*";
++					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
++
++				// Otherwise append
++				} else {
++					(structure[ dataType ] = structure[ dataType ] || []).push( func );
++				}
++			}
++		}
++	};
++}
++
++// Base inspection function for prefilters and transports
++function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
++
++	var inspected = {},
++		seekingTransport = ( structure === transports );
++
++	function inspect( dataType ) {
++		var selected;
++		inspected[ dataType ] = true;
++		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
++			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
++			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
++				options.dataTypes.unshift( dataTypeOrTransport );
++				inspect( dataTypeOrTransport );
++				return false;
++			} else if ( seekingTransport ) {
++				return !( selected = dataTypeOrTransport );
++			}
++		});
++		return selected;
++	}
++
++	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
++}
++
++// A special extend for ajax options
++// that takes "flat" options (not to be deep extended)
++// Fixes #9887
++function ajaxExtend( target, src ) {
++	var deep, key,
++		flatOptions = jQuery.ajaxSettings.flatOptions || {};
++
++	for ( key in src ) {
++		if ( src[ key ] !== undefined ) {
++			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
++		}
++	}
++	if ( deep ) {
++		jQuery.extend( true, target, deep );
++	}
++
++	return target;
++}
++
++jQuery.fn.load = function( url, params, callback ) {
++	if ( typeof url !== "string" && _load ) {
++		return _load.apply( this, arguments );
++	}
++
++	var selector, response, type,
++		self = this,
++		off = url.indexOf(" ");
++
++	if ( off >= 0 ) {
++		selector = url.slice( off, url.length );
++		url = url.slice( 0, off );
++	}
++
++	// If it's a function
++	if ( jQuery.isFunction( params ) ) {
++
++		// We assume that it's the callback
++		callback = params;
++		params = undefined;
++
++	// Otherwise, build a param string
++	} else if ( params && typeof params === "object" ) {
++		type = "POST";
++	}
++
++	// If we have elements to modify, make the request
++	if ( self.length > 0 ) {
++		jQuery.ajax({
++			url: url,
++
++			// if "type" variable is undefined, then "GET" method will be used
++			type: type,
++			dataType: "html",
++			data: params
++		}).done(function( responseText ) {
++
++			// Save response for use in complete callback
++			response = arguments;
++
++			self.html( selector ?
++
++				// If a selector was specified, locate the right elements in a dummy div
++				// Exclude scripts to avoid IE 'Permission Denied' errors
++				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
++
++				// Otherwise use the full result
++				responseText );
++
++		}).complete( callback && function( jqXHR, status ) {
++			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
++		});
++	}
++
++	return this;
++};
++
++// Attach a bunch of functions for handling common AJAX events
++jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
++	jQuery.fn[ type ] = function( fn ){
++		return this.on( type, fn );
++	};
++});
++
++jQuery.each( [ "get", "post" ], function( i, method ) {
++	jQuery[ method ] = function( url, data, callback, type ) {
++		// shift arguments if data argument was omitted
++		if ( jQuery.isFunction( data ) ) {
++			type = type || callback;
++			callback = data;
++			data = undefined;
++		}
++
++		return jQuery.ajax({
++			url: url,
++			type: method,
++			dataType: type,
++			data: data,
++			success: callback
++		});
++	};
++});
++
++jQuery.extend({
++
++	// Counter for holding the number of active queries
++	active: 0,
++
++	// Last-Modified header cache for next request
++	lastModified: {},
++	etag: {},
++
++	ajaxSettings: {
++		url: ajaxLocation,
++		type: "GET",
++		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
++		global: true,
++		processData: true,
++		async: true,
++		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
++		/*
++		timeout: 0,
++		data: null,
++		dataType: null,
++		username: null,
++		password: null,
++		cache: null,
++		throws: false,
++		traditional: false,
++		headers: {},
++		*/
++
++		accepts: {
++			"*": allTypes,
++			text: "text/plain",
++			html: "text/html",
++			xml: "application/xml, text/xml",
++			json: "application/json, text/javascript"
++		},
++
++		contents: {
++			xml: /xml/,
++			html: /html/,
++			json: /json/
++		},
++
++		responseFields: {
++			xml: "responseXML",
++			text: "responseText"
++		},
++
++		// Data converters
++		// Keys separate source (or catchall "*") and destination types with a single space
++		converters: {
++
++			// Convert anything to text
++			"* text": window.String,
++
++			// Text to html (true = no transformation)
++			"text html": true,
++
++			// Evaluate text as a json expression
++			"text json": jQuery.parseJSON,
++
++			// Parse text as xml
++			"text xml": jQuery.parseXML
++		},
++
++		// For options that shouldn't be deep extended:
++		// you can add your own custom options here if
++		// and when you create one that shouldn't be
++		// deep extended (see ajaxExtend)
++		flatOptions: {
++			url: true,
++			context: true
++		}
++	},
++
++	// Creates a full fledged settings object into target
++	// with both ajaxSettings and settings fields.
++	// If target is omitted, writes into ajaxSettings.
++	ajaxSetup: function( target, settings ) {
++		return settings ?
++
++			// Building a settings object
++			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
++
++			// Extending ajaxSettings
++			ajaxExtend( jQuery.ajaxSettings, target );
++	},
++
++	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
++	ajaxTransport: addToPrefiltersOrTransports( transports ),
++
++	// Main method
++	ajax: function( url, options ) {
++
++		// If url is an object, simulate pre-1.5 signature
++		if ( typeof url === "object" ) {
++			options = url;
++			url = undefined;
++		}
++
++		// Force options to be an object
++		options = options || {};
++
++		var // Cross-domain detection vars
++			parts,
++			// Loop variable
++			i,
++			// URL without anti-cache param
++			cacheURL,
++			// Response headers as string
++			responseHeadersString,
++			// timeout handle
++			timeoutTimer,
++
++			// To know if global events are to be dispatched
++			fireGlobals,
++
++			transport,
++			// Response headers
++			responseHeaders,
++			// Create the final options object
++			s = jQuery.ajaxSetup( {}, options ),
++			// Callbacks context
++			callbackContext = s.context || s,
++			// Context for global events is callbackContext if it is a DOM node or jQuery collection
++			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
++				jQuery( callbackContext ) :
++				jQuery.event,
++			// Deferreds
++			deferred = jQuery.Deferred(),
++			completeDeferred = jQuery.Callbacks("once memory"),
++			// Status-dependent callbacks
++			statusCode = s.statusCode || {},
++			// Headers (they are sent all at once)
++			requestHeaders = {},
++			requestHeadersNames = {},
++			// The jqXHR state
++			state = 0,
++			// Default abort message
++			strAbort = "canceled",
++			// Fake xhr
++			jqXHR = {
++				readyState: 0,
++
++				// Builds headers hashtable if needed
++				getResponseHeader: function( key ) {
++					var match;
++					if ( state === 2 ) {
++						if ( !responseHeaders ) {
++							responseHeaders = {};
++							while ( (match = rheaders.exec( responseHeadersString )) ) {
++								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
++							}
++						}
++						match = responseHeaders[ key.toLowerCase() ];
++					}
++					return match == null ? null : match;
++				},
++
++				// Raw string
++				getAllResponseHeaders: function() {
++					return state === 2 ? responseHeadersString : null;
++				},
++
++				// Caches the header
++				setRequestHeader: function( name, value ) {
++					var lname = name.toLowerCase();
++					if ( !state ) {
++						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
++						requestHeaders[ name ] = value;
++					}
++					return this;
++				},
++
++				// Overrides response content-type header
++				overrideMimeType: function( type ) {
++					if ( !state ) {
++						s.mimeType = type;
++					}
++					return this;
++				},
++
++				// Status-dependent callbacks
++				statusCode: function( map ) {
++					var code;
++					if ( map ) {
++						if ( state < 2 ) {
++							for ( code in map ) {
++								// Lazy-add the new callback in a way that preserves old ones
++								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
++							}
++						} else {
++							// Execute the appropriate callbacks
++							jqXHR.always( map[ jqXHR.status ] );
++						}
++					}
++					return this;
++				},
++
++				// Cancel the request
++				abort: function( statusText ) {
++					var finalText = statusText || strAbort;
++					if ( transport ) {
++						transport.abort( finalText );
++					}
++					done( 0, finalText );
++					return this;
++				}
++			};
++
++		// Attach deferreds
++		deferred.promise( jqXHR ).complete = completeDeferred.add;
++		jqXHR.success = jqXHR.done;
++		jqXHR.error = jqXHR.fail;
++
++		// Remove hash character (#7531: and string promotion)
++		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
++		// Handle falsy url in the settings object (#10093: consistency with old signature)
++		// We also use the url parameter if available
++		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
++
++		// Alias method option to type as per ticket #12004
++		s.type = options.method || options.type || s.method || s.type;
++
++		// Extract dataTypes list
++		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
++
++		// A cross-domain request is in order when we have a protocol:host:port mismatch
++		if ( s.crossDomain == null ) {
++			parts = rurl.exec( s.url.toLowerCase() );
++			s.crossDomain = !!( parts &&
++				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
++					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
++						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
++			);
++		}
++
++		// Convert data if not already a string
++		if ( s.data && s.processData && typeof s.data !== "string" ) {
++			s.data = jQuery.param( s.data, s.traditional );
++		}
++
++		// Apply prefilters
++		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
++
++		// If request was aborted inside a prefilter, stop there
++		if ( state === 2 ) {
++			return jqXHR;
++		}
++
++		// We can fire global events as of now if asked to
++		fireGlobals = s.global;
++
++		// Watch for a new set of requests
++		if ( fireGlobals && jQuery.active++ === 0 ) {
++			jQuery.event.trigger("ajaxStart");
++		}
++
++		// Uppercase the type
++		s.type = s.type.toUpperCase();
++
++		// Determine if request has content
++		s.hasContent = !rnoContent.test( s.type );
++
++		// Save the URL in case we're toying with the If-Modified-Since
++		// and/or If-None-Match header later on
++		cacheURL = s.url;
++
++		// More options handling for requests with no content
++		if ( !s.hasContent ) {
++
++			// If data is available, append data to url
++			if ( s.data ) {
++				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
++				// #9682: remove data so that it's not used in an eventual retry
++				delete s.data;
++			}
++
++			// Add anti-cache in url if needed
++			if ( s.cache === false ) {
++				s.url = rts.test( cacheURL ) ?
++
++					// If there is already a '_' parameter, set its value
++					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
++
++					// Otherwise add one to the end
++					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
++			}
++		}
++
++		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++		if ( s.ifModified ) {
++			if ( jQuery.lastModified[ cacheURL ] ) {
++				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
++			}
++			if ( jQuery.etag[ cacheURL ] ) {
++				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
++			}
++		}
++
++		// Set the correct header, if data is being sent
++		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
++			jqXHR.setRequestHeader( "Content-Type", s.contentType );
++		}
++
++		// Set the Accepts header for the server, depending on the dataType
++		jqXHR.setRequestHeader(
++			"Accept",
++			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
++				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
++				s.accepts[ "*" ]
++		);
++
++		// Check for headers option
++		for ( i in s.headers ) {
++			jqXHR.setRequestHeader( i, s.headers[ i ] );
++		}
++
++		// Allow custom headers/mimetypes and early abort
++		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
++			// Abort if not done already and return
++			return jqXHR.abort();
++		}
++
++		// aborting is no longer a cancellation
++		strAbort = "abort";
++
++		// Install callbacks on deferreds
++		for ( i in { success: 1, error: 1, complete: 1 } ) {
++			jqXHR[ i ]( s[ i ] );
++		}
++
++		// Get transport
++		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
++
++		// If no transport, we auto-abort
++		if ( !transport ) {
++			done( -1, "No Transport" );
++		} else {
++			jqXHR.readyState = 1;
++
++			// Send global event
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
++			}
++			// Timeout
++			if ( s.async && s.timeout > 0 ) {
++				timeoutTimer = setTimeout(function() {
++					jqXHR.abort("timeout");
++				}, s.timeout );
++			}
++
++			try {
++				state = 1;
++				transport.send( requestHeaders, done );
++			} catch ( e ) {
++				// Propagate exception as error if not done
++				if ( state < 2 ) {
++					done( -1, e );
++				// Simply rethrow otherwise
++				} else {
++					throw e;
++				}
++			}
++		}
++
++		// Callback for when everything is done
++		function done( status, nativeStatusText, responses, headers ) {
++			var isSuccess, success, error, response, modified,
++				statusText = nativeStatusText;
++
++			// Called once
++			if ( state === 2 ) {
++				return;
++			}
++
++			// State is "done" now
++			state = 2;
++
++			// Clear timeout if it exists
++			if ( timeoutTimer ) {
++				clearTimeout( timeoutTimer );
++			}
++
++			// Dereference transport for early garbage collection
++			// (no matter how long the jqXHR object will be used)
++			transport = undefined;
++
++			// Cache response headers
++			responseHeadersString = headers || "";
++
++			// Set readyState
++			jqXHR.readyState = status > 0 ? 4 : 0;
++
++			// Get response data
++			if ( responses ) {
++				response = ajaxHandleResponses( s, jqXHR, responses );
++			}
++
++			// If successful, handle type chaining
++			if ( status >= 200 && status < 300 || status === 304 ) {
++
++				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++				if ( s.ifModified ) {
++					modified = jqXHR.getResponseHeader("Last-Modified");
++					if ( modified ) {
++						jQuery.lastModified[ cacheURL ] = modified;
++					}
++					modified = jqXHR.getResponseHeader("etag");
++					if ( modified ) {
++						jQuery.etag[ cacheURL ] = modified;
++					}
++				}
++
++				// if no content
++				if ( status === 204 ) {
++					isSuccess = true;
++					statusText = "nocontent";
++
++				// if not modified
++				} else if ( status === 304 ) {
++					isSuccess = true;
++					statusText = "notmodified";
++
++				// If we have data, let's convert it
++				} else {
++					isSuccess = ajaxConvert( s, response );
++					statusText = isSuccess.state;
++					success = isSuccess.data;
++					error = isSuccess.error;
++					isSuccess = !error;
++				}
++			} else {
++				// We extract error from statusText
++				// then normalize statusText and status for non-aborts
++				error = statusText;
++				if ( status || !statusText ) {
++					statusText = "error";
++					if ( status < 0 ) {
++						status = 0;
++					}
++				}
++			}
++
++			// Set data for the fake xhr object
++			jqXHR.status = status;
++			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
++
++			// Success/Error
++			if ( isSuccess ) {
++				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
++			} else {
++				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
++			}
++
++			// Status-dependent callbacks
++			jqXHR.statusCode( statusCode );
++			statusCode = undefined;
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
++					[ jqXHR, s, isSuccess ? success : error ] );
++			}
++
++			// Complete
++			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
++				// Handle the global AJAX counter
++				if ( !( --jQuery.active ) ) {
++					jQuery.event.trigger("ajaxStop");
++				}
++			}
++		}
++
++		return jqXHR;
++	},
++
++	getScript: function( url, callback ) {
++		return jQuery.get( url, undefined, callback, "script" );
++	},
++
++	getJSON: function( url, data, callback ) {
++		return jQuery.get( url, data, callback, "json" );
++	}
++});
++
++/* Handles responses to an ajax request:
++ * - sets all responseXXX fields accordingly
++ * - finds the right dataType (mediates between content-type and expected dataType)
++ * - returns the corresponding response
++ */
++function ajaxHandleResponses( s, jqXHR, responses ) {
++	var firstDataType, ct, finalDataType, type,
++		contents = s.contents,
++		dataTypes = s.dataTypes,
++		responseFields = s.responseFields;
++
++	// Fill responseXXX fields
++	for ( type in responseFields ) {
++		if ( type in responses ) {
++			jqXHR[ responseFields[type] ] = responses[ type ];
++		}
++	}
++
++	// Remove auto dataType and get content-type in the process
++	while( dataTypes[ 0 ] === "*" ) {
++		dataTypes.shift();
++		if ( ct === undefined ) {
++			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
++		}
++	}
++
++	// Check if we're dealing with a known content-type
++	if ( ct ) {
++		for ( type in contents ) {
++			if ( contents[ type ] && contents[ type ].test( ct ) ) {
++				dataTypes.unshift( type );
++				break;
++			}
++		}
++	}
++
++	// Check to see if we have a response for the expected dataType
++	if ( dataTypes[ 0 ] in responses ) {
++		finalDataType = dataTypes[ 0 ];
++	} else {
++		// Try convertible dataTypes
++		for ( type in responses ) {
++			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
++				finalDataType = type;
++				break;
++			}
++			if ( !firstDataType ) {
++				firstDataType = type;
++			}
++		}
++		// Or just use first one
++		finalDataType = finalDataType || firstDataType;
++	}
++
++	// If we found a dataType
++	// We add the dataType to the list if needed
++	// and return the corresponding response
++	if ( finalDataType ) {
++		if ( finalDataType !== dataTypes[ 0 ] ) {
++			dataTypes.unshift( finalDataType );
++		}
++		return responses[ finalDataType ];
++	}
++}
++
++// Chain conversions given the request and the original response
++function ajaxConvert( s, response ) {
++	var conv2, current, conv, tmp,
++		converters = {},
++		i = 0,
++		// Work with a copy of dataTypes in case we need to modify it for conversion
++		dataTypes = s.dataTypes.slice(),
++		prev = dataTypes[ 0 ];
++
++	// Apply the dataFilter if provided
++	if ( s.dataFilter ) {
++		response = s.dataFilter( response, s.dataType );
++	}
++
++	// Create converters map with lowercased keys
++	if ( dataTypes[ 1 ] ) {
++		for ( conv in s.converters ) {
++			converters[ conv.toLowerCase() ] = s.converters[ conv ];
++		}
++	}
++
++	// Convert to each sequential dataType, tolerating list modification
++	for ( ; (current = dataTypes[++i]); ) {
++
++		// There's only work to do if current dataType is non-auto
++		if ( current !== "*" ) {
++
++			// Convert response if prev dataType is non-auto and differs from current
++			if ( prev !== "*" && prev !== current ) {
++
++				// Seek a direct converter
++				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
++
++				// If none found, seek a pair
++				if ( !conv ) {
++					for ( conv2 in converters ) {
++
++						// If conv2 outputs current
++						tmp = conv2.split(" ");
++						if ( tmp[ 1 ] === current ) {
++
++							// If prev can be converted to accepted input
++							conv = converters[ prev + " " + tmp[ 0 ] ] ||
++								converters[ "* " + tmp[ 0 ] ];
++							if ( conv ) {
++								// Condense equivalence converters
++								if ( conv === true ) {
++									conv = converters[ conv2 ];
++
++								// Otherwise, insert the intermediate dataType
++								} else if ( converters[ conv2 ] !== true ) {
++									current = tmp[ 0 ];
++									dataTypes.splice( i--, 0, current );
++								}
++
++								break;
++							}
++						}
++					}
++				}
++
++				// Apply converter (if not an equivalence)
++				if ( conv !== true ) {
++
++					// Unless errors are allowed to bubble, catch and return them
++					if ( conv && s["throws"] ) {
++						response = conv( response );
++					} else {
++						try {
++							response = conv( response );
++						} catch ( e ) {
++							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
++						}
++					}
++				}
++			}
++
++			// Update prev for next iteration
++			prev = current;
++		}
++	}
++
++	return { state: "success", data: response };
++}
++// Install script dataType
++jQuery.ajaxSetup({
++	accepts: {
++		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
++	},
++	contents: {
++		script: /(?:java|ecma)script/
++	},
++	converters: {
++		"text script": function( text ) {
++			jQuery.globalEval( text );
++			return text;
++		}
++	}
++});
++
++// Handle cache's special case and global
++jQuery.ajaxPrefilter( "script", function( s ) {
++	if ( s.cache === undefined ) {
++		s.cache = false;
++	}
++	if ( s.crossDomain ) {
++		s.type = "GET";
++		s.global = false;
++	}
++});
++
++// Bind script tag hack transport
++jQuery.ajaxTransport( "script", function(s) {
++
++	// This transport only deals with cross domain requests
++	if ( s.crossDomain ) {
++
++		var script,
++			head = document.head || jQuery("head")[0] || document.documentElement;
++
++		return {
++
++			send: function( _, callback ) {
++
++				script = document.createElement("script");
++
++				script.async = true;
++
++				if ( s.scriptCharset ) {
++					script.charset = s.scriptCharset;
++				}
++
++				script.src = s.url;
++
++				// Attach handlers for all browsers
++				script.onload = script.onreadystatechange = function( _, isAbort ) {
++
++					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
++
++						// Handle memory leak in IE
++						script.onload = script.onreadystatechange = null;
++
++						// Remove the script
++						if ( script.parentNode ) {
++							script.parentNode.removeChild( script );
++						}
++
++						// Dereference the script
++						script = null;
++
++						// Callback if not abort
++						if ( !isAbort ) {
++							callback( 200, "success" );
++						}
++					}
++				};
++
++				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
++				// Use native DOM manipulation to avoid our domManip AJAX trickery
++				head.insertBefore( script, head.firstChild );
++			},
++
++			abort: function() {
++				if ( script ) {
++					script.onload( undefined, true );
++				}
++			}
++		};
++	}
++});
++var oldCallbacks = [],
++	rjsonp = /(=)\?(?=&|$)|\?\?/;
++
++// Default jsonp settings
++jQuery.ajaxSetup({
++	jsonp: "callback",
++	jsonpCallback: function() {
++		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
++		this[ callback ] = true;
++		return callback;
++	}
++});
++
++// Detect, normalize options and install callbacks for jsonp requests
++jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
++
++	var callbackName, overwritten, responseContainer,
++		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
++			"url" :
++			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
++		);
++
++	// Handle iff the expected data type is "jsonp" or we have a parameter to set
++	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
++
++		// Get callback name, remembering preexisting value associated with it
++		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
++			s.jsonpCallback() :
++			s.jsonpCallback;
++
++		// Insert callback into url or form data
++		if ( jsonProp ) {
++			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
++		} else if ( s.jsonp !== false ) {
++			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
++		}
++
++		// Use data converter to retrieve json after script execution
++		s.converters["script json"] = function() {
++			if ( !responseContainer ) {
++				jQuery.error( callbackName + " was not called" );
++			}
++			return responseContainer[ 0 ];
++		};
++
++		// force json dataType
++		s.dataTypes[ 0 ] = "json";
++
++		// Install callback
++		overwritten = window[ callbackName ];
++		window[ callbackName ] = function() {
++			responseContainer = arguments;
++		};
++
++		// Clean-up function (fires after converters)
++		jqXHR.always(function() {
++			// Restore preexisting value
++			window[ callbackName ] = overwritten;
++
++			// Save back as free
++			if ( s[ callbackName ] ) {
++				// make sure that re-using the options doesn't screw things around
++				s.jsonpCallback = originalSettings.jsonpCallback;
++
++				// save the callback name for future use
++				oldCallbacks.push( callbackName );
++			}
++
++			// Call if it was a function and we have a response
++			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
++				overwritten( responseContainer[ 0 ] );
++			}
++
++			responseContainer = overwritten = undefined;
++		});
++
++		// Delegate to script
++		return "script";
++	}
++});
++var xhrCallbacks, xhrSupported,
++	xhrId = 0,
++	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
++	xhrOnUnloadAbort = window.ActiveXObject && function() {
++		// Abort all pending requests
++		var key;
++		for ( key in xhrCallbacks ) {
++			xhrCallbacks[ key ]( undefined, true );
++		}
++	};
++
++// Functions to create xhrs
++function createStandardXHR() {
++	try {
++		return new window.XMLHttpRequest();
++	} catch( e ) {}
++}
++
++function createActiveXHR() {
++	try {
++		return new window.ActiveXObject("Microsoft.XMLHTTP");
++	} catch( e ) {}
++}
++
++// Create the request object
++// (This is still attached to ajaxSettings for backward compatibility)
++jQuery.ajaxSettings.xhr = window.ActiveXObject ?
++	/* Microsoft failed to properly
++	 * implement the XMLHttpRequest in IE7 (can't request local files),
++	 * so we use the ActiveXObject when it is available
++	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
++	 * we need a fallback.
++	 */
++	function() {
++		return !this.isLocal && createStandardXHR() || createActiveXHR();
++	} :
++	// For all other browsers, use the standard XMLHttpRequest object
++	createStandardXHR;
++
++// Determine support properties
++xhrSupported = jQuery.ajaxSettings.xhr();
++jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
++xhrSupported = jQuery.support.ajax = !!xhrSupported;
++
++// Create transport if the browser can provide an xhr
++if ( xhrSupported ) {
++
++	jQuery.ajaxTransport(function( s ) {
++		// Cross domain only allowed if supported through XMLHttpRequest
++		if ( !s.crossDomain || jQuery.support.cors ) {
++
++			var callback;
++
++			return {
++				send: function( headers, complete ) {
++
++					// Get a new xhr
++					var handle, i,
++						xhr = s.xhr();
++
++					// Open the socket
++					// Passing null username, generates a login popup on Opera (#2865)
++					if ( s.username ) {
++						xhr.open( s.type, s.url, s.async, s.username, s.password );
++					} else {
++						xhr.open( s.type, s.url, s.async );
++					}
++
++					// Apply custom fields if provided
++					if ( s.xhrFields ) {
++						for ( i in s.xhrFields ) {
++							xhr[ i ] = s.xhrFields[ i ];
++						}
++					}
++
++					// Override mime type if needed
++					if ( s.mimeType && xhr.overrideMimeType ) {
++						xhr.overrideMimeType( s.mimeType );
++					}
++
++					// X-Requested-With header
++					// For cross-domain requests, seeing as conditions for a preflight are
++					// akin to a jigsaw puzzle, we simply never set it to be sure.
++					// (it can always be set on a per-request basis or even using ajaxSetup)
++					// For same-domain requests, won't change header if already provided.
++					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
++						headers["X-Requested-With"] = "XMLHttpRequest";
++					}
++
++					// Need an extra try/catch for cross domain requests in Firefox 3
++					try {
++						for ( i in headers ) {
++							xhr.setRequestHeader( i, headers[ i ] );
++						}
++					} catch( err ) {}
++
++					// Do send the request
++					// This may raise an exception which is actually
++					// handled in jQuery.ajax (so no try/catch here)
++					xhr.send( ( s.hasContent && s.data ) || null );
++
++					// Listener
++					callback = function( _, isAbort ) {
++						var status, responseHeaders, statusText, responses;
++
++						// Firefox throws exceptions when accessing properties
++						// of an xhr when a network error occurred
++						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
++						try {
++
++							// Was never called and is aborted or complete
++							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
++
++								// Only called once
++								callback = undefined;
++
++								// Do not keep as active anymore
++								if ( handle ) {
++									xhr.onreadystatechange = jQuery.noop;
++									if ( xhrOnUnloadAbort ) {
++										delete xhrCallbacks[ handle ];
++									}
++								}
++
++								// If it's an abort
++								if ( isAbort ) {
++									// Abort it manually if needed
++									if ( xhr.readyState !== 4 ) {
++										xhr.abort();
++									}
++								} else {
++									responses = {};
++									status = xhr.status;
++									responseHeaders = xhr.getAllResponseHeaders();
++
++									// When requesting binary data, IE6-9 will throw an exception
++									// on any attempt to access responseText (#11426)
++									if ( typeof xhr.responseText === "string" ) {
++										responses.text = xhr.responseText;
++									}
++
++									// Firefox throws an exception when accessing
++									// statusText for faulty cross-domain requests
++									try {
++										statusText = xhr.statusText;
++									} catch( e ) {
++										// We normalize with Webkit giving an empty statusText
++										statusText = "";
++									}
++
++									// Filter status for non standard behaviors
++
++									// If the request is local and we have data: assume a success
++									// (success with no data won't get notified, that's the best we
++									// can do given current implementations)
++									if ( !status && s.isLocal && !s.crossDomain ) {
++										status = responses.text ? 200 : 404;
++									// IE - #1450: sometimes returns 1223 when it should be 204
++									} else if ( status === 1223 ) {
++										status = 204;
++									}
++								}
++							}
++						} catch( firefoxAccessException ) {
++							if ( !isAbort ) {
++								complete( -1, firefoxAccessException );
++							}
++						}
++
++						// Call complete if needed
++						if ( responses ) {
++							complete( status, statusText, responses, responseHeaders );
++						}
++					};
++
++					if ( !s.async ) {
++						// if we're in sync mode we fire the callback
++						callback();
++					} else if ( xhr.readyState === 4 ) {
++						// (IE6 & IE7) if it's in cache and has been
++						// retrieved directly we need to fire the callback
++						setTimeout( callback );
++					} else {
++						handle = ++xhrId;
++						if ( xhrOnUnloadAbort ) {
++							// Create the active xhrs callbacks list if needed
++							// and attach the unload handler
++							if ( !xhrCallbacks ) {
++								xhrCallbacks = {};
++								jQuery( window ).unload( xhrOnUnloadAbort );
++							}
++							// Add to list of active xhrs callbacks
++							xhrCallbacks[ handle ] = callback;
++						}
++						xhr.onreadystatechange = callback;
++					}
++				},
++
++				abort: function() {
++					if ( callback ) {
++						callback( undefined, true );
++					}
++				}
++			};
++		}
++	});
++}
++var fxNow, timerId,
++	rfxtypes = /^(?:toggle|show|hide)$/,
++	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
++	rrun = /queueHooks$/,
++	animationPrefilters = [ defaultPrefilter ],
++	tweeners = {
++		"*": [function( prop, value ) {
++			var end, unit,
++				tween = this.createTween( prop, value ),
++				parts = rfxnum.exec( value ),
++				target = tween.cur(),
++				start = +target || 0,
++				scale = 1,
++				maxIterations = 20;
++
++			if ( parts ) {
++				end = +parts[2];
++				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
++
++				// We need to compute starting value
++				if ( unit !== "px" && start ) {
++					// Iteratively approximate from a nonzero starting point
++					// Prefer the current property, because this process will be trivial if it uses the same units
++					// Fallback to end or a simple constant
++					start = jQuery.css( tween.elem, prop, true ) || end || 1;
++
++					do {
++						// If previous iteration zeroed out, double until we get *something*
++						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
++						scale = scale || ".5";
++
++						// Adjust and apply
++						start = start / scale;
++						jQuery.style( tween.elem, prop, start + unit );
++
++					// Update scale, tolerating zero or NaN from tween.cur()
++					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
++					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
++				}
++
++				tween.unit = unit;
++				tween.start = start;
++				// If a +=/-= token was provided, we're doing a relative animation
++				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
++			}
++			return tween;
++		}]
++	};
++
++// Animations created synchronously will run synchronously
++function createFxNow() {
++	setTimeout(function() {
++		fxNow = undefined;
++	});
++	return ( fxNow = jQuery.now() );
++}
++
++function createTweens( animation, props ) {
++	jQuery.each( props, function( prop, value ) {
++		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
++			index = 0,
++			length = collection.length;
++		for ( ; index < length; index++ ) {
++			if ( collection[ index ].call( animation, prop, value ) ) {
++
++				// we're done with this property
++				return;
++			}
++		}
++	});
++}
++
++function Animation( elem, properties, options ) {
++	var result,
++		stopped,
++		index = 0,
++		length = animationPrefilters.length,
++		deferred = jQuery.Deferred().always( function() {
++			// don't match elem in the :animated selector
++			delete tick.elem;
++		}),
++		tick = function() {
++			if ( stopped ) {
++				return false;
++			}
++			var currentTime = fxNow || createFxNow(),
++				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
++				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
++				temp = remaining / animation.duration || 0,
++				percent = 1 - temp,
++				index = 0,
++				length = animation.tweens.length;
++
++			for ( ; index < length ; index++ ) {
++				animation.tweens[ index ].run( percent );
++			}
++
++			deferred.notifyWith( elem, [ animation, percent, remaining ]);
++
++			if ( percent < 1 && length ) {
++				return remaining;
++			} else {
++				deferred.resolveWith( elem, [ animation ] );
++				return false;
++			}
++		},
++		animation = deferred.promise({
++			elem: elem,
++			props: jQuery.extend( {}, properties ),
++			opts: jQuery.extend( true, { specialEasing: {} }, options ),
++			originalProperties: properties,
++			originalOptions: options,
++			startTime: fxNow || createFxNow(),
++			duration: options.duration,
++			tweens: [],
++			createTween: function( prop, end ) {
++				var tween = jQuery.Tween( elem, animation.opts, prop, end,
++						animation.opts.specialEasing[ prop ] || animation.opts.easing );
++				animation.tweens.push( tween );
++				return tween;
++			},
++			stop: function( gotoEnd ) {
++				var index = 0,
++					// if we are going to the end, we want to run all the tweens
++					// otherwise we skip this part
++					length = gotoEnd ? animation.tweens.length : 0;
++				if ( stopped ) {
++					return this;
++				}
++				stopped = true;
++				for ( ; index < length ; index++ ) {
++					animation.tweens[ index ].run( 1 );
++				}
++
++				// resolve when we played the last frame
++				// otherwise, reject
++				if ( gotoEnd ) {
++					deferred.resolveWith( elem, [ animation, gotoEnd ] );
++				} else {
++					deferred.rejectWith( elem, [ animation, gotoEnd ] );
++				}
++				return this;
++			}
++		}),
++		props = animation.props;
++
++	propFilter( props, animation.opts.specialEasing );
++
++	for ( ; index < length ; index++ ) {
++		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
++		if ( result ) {
++			return result;
++		}
++	}
++
++	createTweens( animation, props );
++
++	if ( jQuery.isFunction( animation.opts.start ) ) {
++		animation.opts.start.call( elem, animation );
++	}
++
++	jQuery.fx.timer(
++		jQuery.extend( tick, {
++			elem: elem,
++			anim: animation,
++			queue: animation.opts.queue
++		})
++	);
++
++	// attach callbacks from options
++	return animation.progress( animation.opts.progress )
++		.done( animation.opts.done, animation.opts.complete )
++		.fail( animation.opts.fail )
++		.always( animation.opts.always );
++}
++
++function propFilter( props, specialEasing ) {
++	var value, name, index, easing, hooks;
++
++	// camelCase, specialEasing and expand cssHook pass
++	for ( index in props ) {
++		name = jQuery.camelCase( index );
++		easing = specialEasing[ name ];
++		value = props[ index ];
++		if ( jQuery.isArray( value ) ) {
++			easing = value[ 1 ];
++			value = props[ index ] = value[ 0 ];
++		}
++
++		if ( index !== name ) {
++			props[ name ] = value;
++			delete props[ index ];
++		}
++
++		hooks = jQuery.cssHooks[ name ];
++		if ( hooks && "expand" in hooks ) {
++			value = hooks.expand( value );
++			delete props[ name ];
++
++			// not quite $.extend, this wont overwrite keys already present.
++			// also - reusing 'index' from above because we have the correct "name"
++			for ( index in value ) {
++				if ( !( index in props ) ) {
++					props[ index ] = value[ index ];
++					specialEasing[ index ] = easing;
++				}
++			}
++		} else {
++			specialEasing[ name ] = easing;
++		}
++	}
++}
++
++jQuery.Animation = jQuery.extend( Animation, {
++
++	tweener: function( props, callback ) {
++		if ( jQuery.isFunction( props ) ) {
++			callback = props;
++			props = [ "*" ];
++		} else {
++			props = props.split(" ");
++		}
++
++		var prop,
++			index = 0,
++			length = props.length;
++
++		for ( ; index < length ; index++ ) {
++			prop = props[ index ];
++			tweeners[ prop ] = tweeners[ prop ] || [];
++			tweeners[ prop ].unshift( callback );
++		}
++	},
++
++	prefilter: function( callback, prepend ) {
++		if ( prepend ) {
++			animationPrefilters.unshift( callback );
++		} else {
++			animationPrefilters.push( callback );
++		}
++	}
++});
++
++function defaultPrefilter( elem, props, opts ) {
++	/*jshint validthis:true */
++	var prop, index, length,
++		value, dataShow, toggle,
++		tween, hooks, oldfire,
++		anim = this,
++		style = elem.style,
++		orig = {},
++		handled = [],
++		hidden = elem.nodeType && isHidden( elem );
++
++	// handle queue: false promises
++	if ( !opts.queue ) {
++		hooks = jQuery._queueHooks( elem, "fx" );
++		if ( hooks.unqueued == null ) {
++			hooks.unqueued = 0;
++			oldfire = hooks.empty.fire;
++			hooks.empty.fire = function() {
++				if ( !hooks.unqueued ) {
++					oldfire();
++				}
++			};
++		}
++		hooks.unqueued++;
++
++		anim.always(function() {
++			// doing this makes sure that the complete handler will be called
++			// before this completes
++			anim.always(function() {
++				hooks.unqueued--;
++				if ( !jQuery.queue( elem, "fx" ).length ) {
++					hooks.empty.fire();
++				}
++			});
++		});
++	}
++
++	// height/width overflow pass
++	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
++		// Make sure that nothing sneaks out
++		// Record all 3 overflow attributes because IE does not
++		// change the overflow attribute when overflowX and
++		// overflowY are set to the same value
++		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
++
++		// Set display property to inline-block for height/width
++		// animations on inline elements that are having width/height animated
++		if ( jQuery.css( elem, "display" ) === "inline" &&
++				jQuery.css( elem, "float" ) === "none" ) {
++
++			// inline-level elements accept inline-block;
++			// block-level elements need to be inline with layout
++			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
++				style.display = "inline-block";
++
++			} else {
++				style.zoom = 1;
++			}
++		}
++	}
++
++	if ( opts.overflow ) {
++		style.overflow = "hidden";
++		if ( !jQuery.support.shrinkWrapBlocks ) {
++			anim.always(function() {
++				style.overflow = opts.overflow[ 0 ];
++				style.overflowX = opts.overflow[ 1 ];
++				style.overflowY = opts.overflow[ 2 ];
++			});
++		}
++	}
++
++
++	// show/hide pass
++	for ( index in props ) {
++		value = props[ index ];
++		if ( rfxtypes.exec( value ) ) {
++			delete props[ index ];
++			toggle = toggle || value === "toggle";
++			if ( value === ( hidden ? "hide" : "show" ) ) {
++				continue;
++			}
++			handled.push( index );
++		}
++	}
++
++	length = handled.length;
++	if ( length ) {
++		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
++		if ( "hidden" in dataShow ) {
++			hidden = dataShow.hidden;
++		}
++
++		// store state if its toggle - enables .stop().toggle() to "reverse"
++		if ( toggle ) {
++			dataShow.hidden = !hidden;
++		}
++		if ( hidden ) {
++			jQuery( elem ).show();
++		} else {
++			anim.done(function() {
++				jQuery( elem ).hide();
++			});
++		}
++		anim.done(function() {
++			var prop;
++			jQuery._removeData( elem, "fxshow" );
++			for ( prop in orig ) {
++				jQuery.style( elem, prop, orig[ prop ] );
++			}
++		});
++		for ( index = 0 ; index < length ; index++ ) {
++			prop = handled[ index ];
++			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
++			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
++
++			if ( !( prop in dataShow ) ) {
++				dataShow[ prop ] = tween.start;
++				if ( hidden ) {
++					tween.end = tween.start;
++					tween.start = prop === "width" || prop === "height" ? 1 : 0;
++				}
++			}
++		}
++	}
++}
++
++function Tween( elem, options, prop, end, easing ) {
++	return new Tween.prototype.init( elem, options, prop, end, easing );
++}
++jQuery.Tween = Tween;
++
++Tween.prototype = {
++	constructor: Tween,
++	init: function( elem, options, prop, end, easing, unit ) {
++		this.elem = elem;
++		this.prop = prop;
++		this.easing = easing || "swing";
++		this.options = options;
++		this.start = this.now = this.cur();
++		this.end = end;
++		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
++	},
++	cur: function() {
++		var hooks = Tween.propHooks[ this.prop ];
++
++		return hooks && hooks.get ?
++			hooks.get( this ) :
++			Tween.propHooks._default.get( this );
++	},
++	run: function( percent ) {
++		var eased,
++			hooks = Tween.propHooks[ this.prop ];
++
++		if ( this.options.duration ) {
++			this.pos = eased = jQuery.easing[ this.easing ](
++				percent, this.options.duration * percent, 0, 1, this.options.duration
++			);
++		} else {
++			this.pos = eased = percent;
++		}
++		this.now = ( this.end - this.start ) * eased + this.start;
++
++		if ( this.options.step ) {
++			this.options.step.call( this.elem, this.now, this );
++		}
++
++		if ( hooks && hooks.set ) {
++			hooks.set( this );
++		} else {
++			Tween.propHooks._default.set( this );
++		}
++		return this;
++	}
++};
++
++Tween.prototype.init.prototype = Tween.prototype;
++
++Tween.propHooks = {
++	_default: {
++		get: function( tween ) {
++			var result;
++
++			if ( tween.elem[ tween.prop ] != null &&
++				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
++				return tween.elem[ tween.prop ];
++			}
++
++			// passing an empty string as a 3rd parameter to .css will automatically
++			// attempt a parseFloat and fallback to a string if the parse fails
++			// so, simple values such as "10px" are parsed to Float.
++			// complex values such as "rotate(1rad)" are returned as is.
++			result = jQuery.css( tween.elem, tween.prop, "" );
++			// Empty strings, null, undefined and "auto" are converted to 0.
++			return !result || result === "auto" ? 0 : result;
++		},
++		set: function( tween ) {
++			// use step hook for back compat - use cssHook if its there - use .style if its
++			// available and use plain properties where available
++			if ( jQuery.fx.step[ tween.prop ] ) {
++				jQuery.fx.step[ tween.prop ]( tween );
++			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
++				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
++			} else {
++				tween.elem[ tween.prop ] = tween.now;
++			}
++		}
++	}
++};
++
++// Remove in 2.0 - this supports IE8's panic based approach
++// to setting things on disconnected nodes
++
++Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
++	set: function( tween ) {
++		if ( tween.elem.nodeType && tween.elem.parentNode ) {
++			tween.elem[ tween.prop ] = tween.now;
++		}
++	}
++};
++
++jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
++	var cssFn = jQuery.fn[ name ];
++	jQuery.fn[ name ] = function( speed, easing, callback ) {
++		return speed == null || typeof speed === "boolean" ?
++			cssFn.apply( this, arguments ) :
++			this.animate( genFx( name, true ), speed, easing, callback );
++	};
++});
++
++jQuery.fn.extend({
++	fadeTo: function( speed, to, easing, callback ) {
++
++		// show any hidden elements after setting opacity to 0
++		return this.filter( isHidden ).css( "opacity", 0 ).show()
++
++			// animate to the value specified
++			.end().animate({ opacity: to }, speed, easing, callback );
++	},
++	animate: function( prop, speed, easing, callback ) {
++		var empty = jQuery.isEmptyObject( prop ),
++			optall = jQuery.speed( speed, easing, callback ),
++			doAnimation = function() {
++				// Operate on a copy of prop so per-property easing won't be lost
++				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
++				doAnimation.finish = function() {
++					anim.stop( true );
++				};
++				// Empty animations, or finishing resolves immediately
++				if ( empty || jQuery._data( this, "finish" ) ) {
++					anim.stop( true );
++				}
++			};
++			doAnimation.finish = doAnimation;
++
++		return empty || optall.queue === false ?
++			this.each( doAnimation ) :
++			this.queue( optall.queue, doAnimation );
++	},
++	stop: function( type, clearQueue, gotoEnd ) {
++		var stopQueue = function( hooks ) {
++			var stop = hooks.stop;
++			delete hooks.stop;
++			stop( gotoEnd );
++		};
++
++		if ( typeof type !== "string" ) {
++			gotoEnd = clearQueue;
++			clearQueue = type;
++			type = undefined;
++		}
++		if ( clearQueue && type !== false ) {
++			this.queue( type || "fx", [] );
++		}
++
++		return this.each(function() {
++			var dequeue = true,
++				index = type != null && type + "queueHooks",
++				timers = jQuery.timers,
++				data = jQuery._data( this );
++
++			if ( index ) {
++				if ( data[ index ] && data[ index ].stop ) {
++					stopQueue( data[ index ] );
++				}
++			} else {
++				for ( index in data ) {
++					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
++						stopQueue( data[ index ] );
++					}
++				}
++			}
++
++			for ( index = timers.length; index--; ) {
++				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
++					timers[ index ].anim.stop( gotoEnd );
++					dequeue = false;
++					timers.splice( index, 1 );
++				}
++			}
++
++			// start the next in the queue if the last step wasn't forced
++			// timers currently will call their complete callbacks, which will dequeue
++			// but only if they were gotoEnd
++			if ( dequeue || !gotoEnd ) {
++				jQuery.dequeue( this, type );
++			}
++		});
++	},
++	finish: function( type ) {
++		if ( type !== false ) {
++			type = type || "fx";
++		}
++		return this.each(function() {
++			var index,
++				data = jQuery._data( this ),
++				queue = data[ type + "queue" ],
++				hooks = data[ type + "queueHooks" ],
++				timers = jQuery.timers,
++				length = queue ? queue.length : 0;
++
++			// enable finishing flag on private data
++			data.finish = true;
++
++			// empty the queue first
++			jQuery.queue( this, type, [] );
++
++			if ( hooks && hooks.cur && hooks.cur.finish ) {
++				hooks.cur.finish.call( this );
++			}
++
++			// look for any active animations, and finish them
++			for ( index = timers.length; index--; ) {
++				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
++					timers[ index ].anim.stop( true );
++					timers.splice( index, 1 );
++				}
++			}
++
++			// look for any animations in the old queue and finish them
++			for ( index = 0; index < length; index++ ) {
++				if ( queue[ index ] && queue[ index ].finish ) {
++					queue[ index ].finish.call( this );
++				}
++			}
++
++			// turn off finishing flag
++			delete data.finish;
++		});
++	}
++});
++
++// Generate parameters to create a standard animation
++function genFx( type, includeWidth ) {
++	var which,
++		attrs = { height: type },
++		i = 0;
++
++	// if we include width, step value is 1 to do all cssExpand values,
++	// if we don't include width, step value is 2 to skip over Left and Right
++	includeWidth = includeWidth? 1 : 0;
++	for( ; i < 4 ; i += 2 - includeWidth ) {
++		which = cssExpand[ i ];
++		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
++	}
++
++	if ( includeWidth ) {
++		attrs.opacity = attrs.width = type;
++	}
++
++	return attrs;
++}
++
++// Generate shortcuts for custom animations
++jQuery.each({
++	slideDown: genFx("show"),
++	slideUp: genFx("hide"),
++	slideToggle: genFx("toggle"),
++	fadeIn: { opacity: "show" },
++	fadeOut: { opacity: "hide" },
++	fadeToggle: { opacity: "toggle" }
++}, function( name, props ) {
++	jQuery.fn[ name ] = function( speed, easing, callback ) {
++		return this.animate( props, speed, easing, callback );
++	};
++});
++
++jQuery.speed = function( speed, easing, fn ) {
++	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
++		complete: fn || !fn && easing ||
++			jQuery.isFunction( speed ) && speed,
++		duration: speed,
++		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
++	};
++
++	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
++		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
++
++	// normalize opt.queue - true/undefined/null -> "fx"
++	if ( opt.queue == null || opt.queue === true ) {
++		opt.queue = "fx";
++	}
++
++	// Queueing
++	opt.old = opt.complete;
++
++	opt.complete = function() {
++		if ( jQuery.isFunction( opt.old ) ) {
++			opt.old.call( this );
++		}
++
++		if ( opt.queue ) {
++			jQuery.dequeue( this, opt.queue );
++		}
++	};
++
++	return opt;
++};
++
++jQuery.easing = {
++	linear: function( p ) {
++		return p;
++	},
++	swing: function( p ) {
++		return 0.5 - Math.cos( p*Math.PI ) / 2;
++	}
++};
++
++jQuery.timers = [];
++jQuery.fx = Tween.prototype.init;
++jQuery.fx.tick = function() {
++	var timer,
++		timers = jQuery.timers,
++		i = 0;
++
++	fxNow = jQuery.now();
++
++	for ( ; i < timers.length; i++ ) {
++		timer = timers[ i ];
++		// Checks the timer has not already been removed
++		if ( !timer() && timers[ i ] === timer ) {
++			timers.splice( i--, 1 );
++		}
++	}
++
++	if ( !timers.length ) {
++		jQuery.fx.stop();
++	}
++	fxNow = undefined;
++};
++
++jQuery.fx.timer = function( timer ) {
++	if ( timer() && jQuery.timers.push( timer ) ) {
++		jQuery.fx.start();
++	}
++};
++
++jQuery.fx.interval = 13;
++
++jQuery.fx.start = function() {
++	if ( !timerId ) {
++		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
++	}
++};
++
++jQuery.fx.stop = function() {
++	clearInterval( timerId );
++	timerId = null;
++};
++
++jQuery.fx.speeds = {
++	slow: 600,
++	fast: 200,
++	// Default speed
++	_default: 400
++};
++
++// Back Compat <1.8 extension point
++jQuery.fx.step = {};
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.animated = function( elem ) {
++		return jQuery.grep(jQuery.timers, function( fn ) {
++			return elem === fn.elem;
++		}).length;
++	};
++}
++jQuery.fn.offset = function( options ) {
++	if ( arguments.length ) {
++		return options === undefined ?
++			this :
++			this.each(function( i ) {
++				jQuery.offset.setOffset( this, options, i );
++			});
++	}
++
++	var docElem, win,
++		box = { top: 0, left: 0 },
++		elem = this[ 0 ],
++		doc = elem && elem.ownerDocument;
++
++	if ( !doc ) {
++		return;
++	}
++
++	docElem = doc.documentElement;
++
++	// Make sure it's not a disconnected DOM node
++	if ( !jQuery.contains( docElem, elem ) ) {
++		return box;
++	}
++
++	// If we don't have gBCR, just use 0,0 rather than error
++	// BlackBerry 5, iOS 3 (original iPhone)
++	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
++		box = elem.getBoundingClientRect();
++	}
++	win = getWindow( doc );
++	return {
++		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
++		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
++	};
++};
++
++jQuery.offset = {
++
++	setOffset: function( elem, options, i ) {
++		var position = jQuery.css( elem, "position" );
++
++		// set position first, in-case top/left are set even on static elem
++		if ( position === "static" ) {
++			elem.style.position = "relative";
++		}
++
++		var curElem = jQuery( elem ),
++			curOffset = curElem.offset(),
++			curCSSTop = jQuery.css( elem, "top" ),
++			curCSSLeft = jQuery.css( elem, "left" ),
++			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
++			props = {}, curPosition = {}, curTop, curLeft;
++
++		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
++		if ( calculatePosition ) {
++			curPosition = curElem.position();
++			curTop = curPosition.top;
++			curLeft = curPosition.left;
++		} else {
++			curTop = parseFloat( curCSSTop ) || 0;
++			curLeft = parseFloat( curCSSLeft ) || 0;
++		}
++
++		if ( jQuery.isFunction( options ) ) {
++			options = options.call( elem, i, curOffset );
++		}
++
++		if ( options.top != null ) {
++			props.top = ( options.top - curOffset.top ) + curTop;
++		}
++		if ( options.left != null ) {
++			props.left = ( options.left - curOffset.left ) + curLeft;
++		}
++
++		if ( "using" in options ) {
++			options.using.call( elem, props );
++		} else {
++			curElem.css( props );
++		}
++	}
++};
++
++
++jQuery.fn.extend({
++
++	position: function() {
++		if ( !this[ 0 ] ) {
++			return;
++		}
++
++		var offsetParent, offset,
++			parentOffset = { top: 0, left: 0 },
++			elem = this[ 0 ];
++
++		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
++		if ( jQuery.css( elem, "position" ) === "fixed" ) {
++			// we assume that getBoundingClientRect is available when computed position is fixed
++			offset = elem.getBoundingClientRect();
++		} else {
++			// Get *real* offsetParent
++			offsetParent = this.offsetParent();
++
++			// Get correct offsets
++			offset = this.offset();
++			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
++				parentOffset = offsetParent.offset();
++			}
++
++			// Add offsetParent borders
++			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
++			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
++		}
++
++		// Subtract parent offsets and element margins
++		// note: when an element has margin: auto the offsetLeft and marginLeft
++		// are the same in Safari causing offset.left to incorrectly be 0
++		return {
++			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
++			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
++		};
++	},
++
++	offsetParent: function() {
++		return this.map(function() {
++			var offsetParent = this.offsetParent || document.documentElement;
++			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
++				offsetParent = offsetParent.offsetParent;
++			}
++			return offsetParent || document.documentElement;
++		});
++	}
++});
++
++
++// Create scrollLeft and scrollTop methods
++jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
++	var top = /Y/.test( prop );
++
++	jQuery.fn[ method ] = function( val ) {
++		return jQuery.access( this, function( elem, method, val ) {
++			var win = getWindow( elem );
++
++			if ( val === undefined ) {
++				return win ? (prop in win) ? win[ prop ] :
++					win.document.documentElement[ method ] :
++					elem[ method ];
++			}
++
++			if ( win ) {
++				win.scrollTo(
++					!top ? val : jQuery( win ).scrollLeft(),
++					top ? val : jQuery( win ).scrollTop()
++				);
++
++			} else {
++				elem[ method ] = val;
++			}
++		}, method, val, arguments.length, null );
++	};
++});
++
++function getWindow( elem ) {
++	return jQuery.isWindow( elem ) ?
++		elem :
++		elem.nodeType === 9 ?
++			elem.defaultView || elem.parentWindow :
++			false;
++}
++// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
++jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
++	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
++		// margin is only for outerHeight, outerWidth
++		jQuery.fn[ funcName ] = function( margin, value ) {
++			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
++				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
++
++			return jQuery.access( this, function( elem, type, value ) {
++				var doc;
++
++				if ( jQuery.isWindow( elem ) ) {
++					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
++					// isn't a whole lot we can do. See pull request at this URL for discussion:
++					// https://github.com/jquery/jquery/pull/764
++					return elem.document.documentElement[ "client" + name ];
++				}
++
++				// Get document width or height
++				if ( elem.nodeType === 9 ) {
++					doc = elem.documentElement;
++
++					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
++					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
++					return Math.max(
++						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
++						elem.body[ "offset" + name ], doc[ "offset" + name ],
++						doc[ "client" + name ]
++					);
++				}
++
++				return value === undefined ?
++					// Get width or height on the element, requesting but not forcing parseFloat
++					jQuery.css( elem, type, extra ) :
++
++					// Set width or height on the element
++					jQuery.style( elem, type, value, extra );
++			}, type, chainable ? margin : undefined, chainable, null );
++		};
++	});
++});
++// Limit scope pollution from any deprecated API
++// (function() {
++
++// })();
++// Expose jQuery to the global object
++window.jQuery = window.$ = jQuery;
++
++// Expose jQuery as an AMD module, but only for AMD loaders that
++// understand the issues with loading multiple versions of jQuery
++// in a page that all might call define(). The loader will indicate
++// they have special allowances for multiple jQuery versions by
++// specifying define.amd.jQuery = true. Register as a named module,
++// since jQuery can be concatenated with other files that may use define,
++// but not use a proper concatenation script that understands anonymous
++// AMD modules. A named AMD is safest and most robust way to register.
++// Lowercase jquery is used because AMD module names are derived from
++// file names, and jQuery is normally delivered in a lowercase file name.
++// Do this after creating the global so that if an AMD module wants to call
++// noConflict to hide this version of jQuery, it will work.
++if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
++	define( "jquery", [], function () { return jQuery; } );
++}
++
++})( window );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.progressbar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.progressbar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.progressbar.js	(revision 15487)
+@@ -0,0 +1,145 @@
++/*!
++ * jQuery UI Progressbar 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/progressbar/
++ *
++ * Depends:
++ *   jquery.ui.core.js
++ *   jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget( "ui.progressbar", {
++	version: "1.10.3",
++	options: {
++		max: 100,
++		value: 0,
++
++		change: null,
++		complete: null
++	},
++
++	min: 0,
++
++	_create: function() {
++		// Constrain initial value
++		this.oldValue = this.options.value = this._constrainedValue();
++
++		this.element
++			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.attr({
++				// Only set static values, aria-valuenow and aria-valuemax are
++				// set inside _refreshValue()
++				role: "progressbar",
++				"aria-valuemin": this.min
++			});
++
++		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
++			.appendTo( this.element );
++
++		this._refreshValue();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++
++		this.valueDiv.remove();
++	},
++
++	value: function( newValue ) {
++		if ( newValue === undefined ) {
++			return this.options.value;
++		}
++
++		this.options.value = this._constrainedValue( newValue );
++		this._refreshValue();
++	},
++
++	_constrainedValue: function( newValue ) {
++		if ( newValue === undefined ) {
++			newValue = this.options.value;
++		}
++
++		this.indeterminate = newValue === false;
++
++		// sanitize value
++		if ( typeof newValue !== "number" ) {
++			newValue = 0;
++		}
++
++		return this.indeterminate ? false :
++			Math.min( this.options.max, Math.max( this.min, newValue ) );
++	},
++
++	_setOptions: function( options ) {
++		// Ensure "value" option is set after other values (like max)
++		var value = options.value;
++		delete options.value;
++
++		this._super( options );
++
++		this.options.value = this._constrainedValue( value );
++		this._refreshValue();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "max" ) {
++			// Don't allow a max less than min
++			value = Math.max( this.min, value );
++		}
++
++		this._super( key, value );
++	},
++
++	_percentage: function() {
++		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
++	},
++
++	_refreshValue: function() {
++		var value = this.options.value,
++			percentage = this._percentage();
++
++		this.valueDiv
++			.toggle( this.indeterminate || value > this.min )
++			.toggleClass( "ui-corner-right", value === this.options.max )
++			.width( percentage.toFixed(0) + "%" );
++
++		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
++
++		if ( this.indeterminate ) {
++			this.element.removeAttr( "aria-valuenow" );
++			if ( !this.overlayDiv ) {
++				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
++			}
++		} else {
++			this.element.attr({
++				"aria-valuemax": this.options.max,
++				"aria-valuenow": value
++			});
++			if ( this.overlayDiv ) {
++				this.overlayDiv.remove();
++				this.overlayDiv = null;
++			}
++		}
++
++		if ( this.oldValue !== value ) {
++			this.oldValue = value;
++			this._trigger( "change" );
++		}
++		if ( value === this.options.max ) {
++			this._trigger( "complete" );
++		}
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.tabs.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.tabs.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.tabs.js	(revision 15487)
+@@ -0,0 +1,846 @@
++/*!
++ * jQuery UI Tabs 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/tabs/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var tabId = 0,
++	rhash = /#.*$/;
++
++function getNextTabId() {
++	return ++tabId;
++}
++
++function isLocal( anchor ) {
++	return anchor.hash.length > 1 &&
++		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
++			decodeURIComponent( location.href.replace( rhash, "" ) );
++}
++
++$.widget( "ui.tabs", {
++	version: "1.10.3",
++	delay: 300,
++	options: {
++		active: null,
++		collapsible: false,
++		event: "click",
++		heightStyle: "content",
++		hide: null,
++		show: null,
++
++		// callbacks
++		activate: null,
++		beforeActivate: null,
++		beforeLoad: null,
++		load: null
++	},
++
++	_create: function() {
++		var that = this,
++			options = this.options;
++
++		this.running = false;
++
++		this.element
++			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-tabs-collapsible", options.collapsible )
++			// Prevent users from focusing disabled tabs via click
++			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
++				if ( $( this ).is( ".ui-state-disabled" ) ) {
++					event.preventDefault();
++				}
++			})
++			// support: IE <9
++			// Preventing the default action in mousedown doesn't prevent IE
++			// from focusing the element, so if the anchor gets focused, blur.
++			// We don't have to worry about focusing the previously focused
++			// element since clicking on a non-focusable element should focus
++			// the body anyway.
++			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
++				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
++					this.blur();
++				}
++			});
++
++		this._processTabs();
++		options.active = this._initialActive();
++
++		// Take disabling tabs via class attribute from HTML
++		// into account and update option properly.
++		if ( $.isArray( options.disabled ) ) {
++			options.disabled = $.unique( options.disabled.concat(
++				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
++					return that.tabs.index( li );
++				})
++			) ).sort();
++		}
++
++		// check for length avoids error when initializing empty list
++		if ( this.options.active !== false && this.anchors.length ) {
++			this.active = this._findActive( options.active );
++		} else {
++			this.active = $();
++		}
++
++		this._refresh();
++
++		if ( this.active.length ) {
++			this.load( options.active );
++		}
++	},
++
++	_initialActive: function() {
++		var active = this.options.active,
++			collapsible = this.options.collapsible,
++			locationHash = location.hash.substring( 1 );
++
++		if ( active === null ) {
++			// check the fragment identifier in the URL
++			if ( locationHash ) {
++				this.tabs.each(function( i, tab ) {
++					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
++						active = i;
++						return false;
++					}
++				});
++			}
++
++			// check for a tab marked active via a class
++			if ( active === null ) {
++				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
++			}
++
++			// no active tab, set to false
++			if ( active === null || active === -1 ) {
++				active = this.tabs.length ? 0 : false;
++			}
++		}
++
++		// handle numbers: negative, out of range
++		if ( active !== false ) {
++			active = this.tabs.index( this.tabs.eq( active ) );
++			if ( active === -1 ) {
++				active = collapsible ? false : 0;
++			}
++		}
++
++		// don't allow collapsible: false and active: false
++		if ( !collapsible && active === false && this.anchors.length ) {
++			active = 0;
++		}
++
++		return active;
++	},
++
++	_getCreateEventData: function() {
++		return {
++			tab: this.active,
++			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
++		};
++	},
++
++	_tabKeydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
++			selectedIndex = this.tabs.index( focusedTab ),
++			goingForward = true;
++
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		switch ( event.keyCode ) {
++			case $.ui.keyCode.RIGHT:
++			case $.ui.keyCode.DOWN:
++				selectedIndex++;
++				break;
++			case $.ui.keyCode.UP:
++			case $.ui.keyCode.LEFT:
++				goingForward = false;
++				selectedIndex--;
++				break;
++			case $.ui.keyCode.END:
++				selectedIndex = this.anchors.length - 1;
++				break;
++			case $.ui.keyCode.HOME:
++				selectedIndex = 0;
++				break;
++			case $.ui.keyCode.SPACE:
++				// Activate only, no collapsing
++				event.preventDefault();
++				clearTimeout( this.activating );
++				this._activate( selectedIndex );
++				return;
++			case $.ui.keyCode.ENTER:
++				// Toggle (cancel delayed activation, allow collapsing)
++				event.preventDefault();
++				clearTimeout( this.activating );
++				// Determine if we should collapse or activate
++				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
++				return;
++			default:
++				return;
++		}
++
++		// Focus the appropriate tab, based on which key was pressed
++		event.preventDefault();
++		clearTimeout( this.activating );
++		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
++
++		// Navigating with control key will prevent automatic activation
++		if ( !event.ctrlKey ) {
++			// Update aria-selected immediately so that AT think the tab is already selected.
++			// Otherwise AT may confuse the user by stating that they need to activate the tab,
++			// but the tab will already be activated by the time the announcement finishes.
++			focusedTab.attr( "aria-selected", "false" );
++			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
++
++			this.activating = this._delay(function() {
++				this.option( "active", selectedIndex );
++			}, this.delay );
++		}
++	},
++
++	_panelKeydown: function( event ) {
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		// Ctrl+up moves focus to the current tab
++		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
++			event.preventDefault();
++			this.active.focus();
++		}
++	},
++
++	// Alt+page up/down moves focus to the previous/next tab (and activates)
++	_handlePageNav: function( event ) {
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
++			this._activate( this._focusNextTab( this.options.active - 1, false ) );
++			return true;
++		}
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
++			this._activate( this._focusNextTab( this.options.active + 1, true ) );
++			return true;
++		}
++	},
++
++	_findNextTab: function( index, goingForward ) {
++		var lastTabIndex = this.tabs.length - 1;
++
++		function constrain() {
++			if ( index > lastTabIndex ) {
++				index = 0;
++			}
++			if ( index < 0 ) {
++				index = lastTabIndex;
++			}
++			return index;
++		}
++
++		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
++			index = goingForward ? index + 1 : index - 1;
++		}
++
++		return index;
++	},
++
++	_focusNextTab: function( index, goingForward ) {
++		index = this._findNextTab( index, goingForward );
++		this.tabs.eq( index ).focus();
++		return index;
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "disabled" ) {
++			// don't use the widget factory's disabled handling
++			this._setupDisabled( value );
++			return;
++		}
++
++		this._super( key, value);
++
++		if ( key === "collapsible" ) {
++			this.element.toggleClass( "ui-tabs-collapsible", value );
++			// Setting collapsible: false while collapsed; open first panel
++			if ( !value && this.options.active === false ) {
++				this._activate( 0 );
++			}
++		}
++
++		if ( key === "event" ) {
++			this._setupEvents( value );
++		}
++
++		if ( key === "heightStyle" ) {
++			this._setupHeightStyle( value );
++		}
++	},
++
++	_tabId: function( tab ) {
++		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
++	},
++
++	_sanitizeSelector: function( hash ) {
++		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
++	},
++
++	refresh: function() {
++		var options = this.options,
++			lis = this.tablist.children( ":has(a[href])" );
++
++		// get disabled tabs from class attribute from HTML
++		// this will get converted to a boolean if needed in _refresh()
++		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
++			return lis.index( tab );
++		});
++
++		this._processTabs();
++
++		// was collapsed or no tabs
++		if ( options.active === false || !this.anchors.length ) {
++			options.active = false;
++			this.active = $();
++		// was active, but active tab is gone
++		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining tabs are disabled
++			if ( this.tabs.length === options.disabled.length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous tab
++			} else {
++				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
++			}
++		// was active, active tab still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.tabs.index( this.active );
++		}
++
++		this._refresh();
++	},
++
++	_refresh: function() {
++		this._setupDisabled( this.options.disabled );
++		this._setupEvents( this.options.event );
++		this._setupHeightStyle( this.options.heightStyle );
++
++		this.tabs.not( this.active ).attr({
++			"aria-selected": "false",
++			tabIndex: -1
++		});
++		this.panels.not( this._getPanelForTab( this.active ) )
++			.hide()
++			.attr({
++				"aria-expanded": "false",
++				"aria-hidden": "true"
++			});
++
++		// Make sure one tab is in the tab order
++		if ( !this.active.length ) {
++			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active
++				.addClass( "ui-tabs-active ui-state-active" )
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++			this._getPanelForTab( this.active )
++				.show()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++	},
++
++	_processTabs: function() {
++		var that = this;
++
++		this.tablist = this._getList()
++			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.attr( "role", "tablist" );
++
++		this.tabs = this.tablist.find( "> li:has(a[href])" )
++			.addClass( "ui-state-default ui-corner-top" )
++			.attr({
++				role: "tab",
++				tabIndex: -1
++			});
++
++		this.anchors = this.tabs.map(function() {
++				return $( "a", this )[ 0 ];
++			})
++			.addClass( "ui-tabs-anchor" )
++			.attr({
++				role: "presentation",
++				tabIndex: -1
++			});
++
++		this.panels = $();
++
++		this.anchors.each(function( i, anchor ) {
++			var selector, panel, panelId,
++				anchorId = $( anchor ).uniqueId().attr( "id" ),
++				tab = $( anchor ).closest( "li" ),
++				originalAriaControls = tab.attr( "aria-controls" );
++
++			// inline tab
++			if ( isLocal( anchor ) ) {
++				selector = anchor.hash;
++				panel = that.element.find( that._sanitizeSelector( selector ) );
++			// remote tab
++			} else {
++				panelId = that._tabId( tab );
++				selector = "#" + panelId;
++				panel = that.element.find( selector );
++				if ( !panel.length ) {
++					panel = that._createPanel( panelId );
++					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
++				}
++				panel.attr( "aria-live", "polite" );
++			}
++
++			if ( panel.length) {
++				that.panels = that.panels.add( panel );
++			}
++			if ( originalAriaControls ) {
++				tab.data( "ui-tabs-aria-controls", originalAriaControls );
++			}
++			tab.attr({
++				"aria-controls": selector.substring( 1 ),
++				"aria-labelledby": anchorId
++			});
++			panel.attr( "aria-labelledby", anchorId );
++		});
++
++		this.panels
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.attr( "role", "tabpanel" );
++	},
++
++	// allow overriding how to find the list for rare usage scenarios (#7715)
++	_getList: function() {
++		return this.element.find( "ol,ul" ).eq( 0 );
++	},
++
++	_createPanel: function( id ) {
++		return $( "<div>" )
++			.attr( "id", id )
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.data( "ui-tabs-destroy", true );
++	},
++
++	_setupDisabled: function( disabled ) {
++		if ( $.isArray( disabled ) ) {
++			if ( !disabled.length ) {
++				disabled = false;
++			} else if ( disabled.length === this.anchors.length ) {
++				disabled = true;
++			}
++		}
++
++		// disable tabs
++		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
++			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
++				$( li )
++					.addClass( "ui-state-disabled" )
++					.attr( "aria-disabled", "true" );
++			} else {
++				$( li )
++					.removeClass( "ui-state-disabled" )
++					.removeAttr( "aria-disabled" );
++			}
++		}
++
++		this.options.disabled = disabled;
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			click: function( event ) {
++				event.preventDefault();
++			}
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
++		this._on( this.anchors, events );
++		this._on( this.tabs, { keydown: "_tabKeydown" } );
++		this._on( this.panels, { keydown: "_panelKeydown" } );
++
++		this._focusable( this.tabs );
++		this._hoverable( this.tabs );
++	},
++
++	_setupHeightStyle: function( heightStyle ) {
++		var maxHeight,
++			parent = this.element.parent();
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			maxHeight -= this.element.outerHeight() - this.element.height();
++
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.element.children().not( this.panels ).each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.panels.each(function() {
++				$( this ).height( Math.max( 0, maxHeight -
++					$( this ).innerHeight() + $( this ).height() ) );
++			})
++			.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.panels.each(function() {
++				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
++			}).height( maxHeight );
++		}
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			anchor = $( event.currentTarget ),
++			tab = anchor.closest( "li" ),
++			clickedIsActive = tab[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : this._getPanelForTab( tab ),
++			toHide = !active.length ? $() : this._getPanelForTab( active ),
++			eventData = {
++				oldTab: active,
++				oldPanel: toHide,
++				newTab: collapsing ? $() : tab,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if ( tab.hasClass( "ui-state-disabled" ) ||
++				// tab is already loading
++				tab.hasClass( "ui-tabs-loading" ) ||
++				// can't switch durning an animation
++				this.running ||
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.tabs.index( tab );
++
++		this.active = clickedIsActive ? $() : tab;
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		if ( !toHide.length && !toShow.length ) {
++			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
++		}
++
++		if ( toShow.length ) {
++			this.load( this.tabs.index( tab ), event );
++		}
++		this._toggle( event, eventData );
++	},
++
++	// handles show/hide for selecting tabs
++	_toggle: function( event, eventData ) {
++		var that = this,
++			toShow = eventData.newPanel,
++			toHide = eventData.oldPanel;
++
++		this.running = true;
++
++		function complete() {
++			that.running = false;
++			that._trigger( "activate", event, eventData );
++		}
++
++		function show() {
++			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
++
++			if ( toShow.length && that.options.show ) {
++				that._show( toShow, that.options.show, complete );
++			} else {
++				toShow.show();
++				complete();
++			}
++		}
++
++		// start out by hiding, then showing, then completing
++		if ( toHide.length && this.options.hide ) {
++			this._hide( toHide, this.options.hide, function() {
++				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++				show();
++			});
++		} else {
++			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++			toHide.hide();
++			show();
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		eventData.oldTab.attr( "aria-selected", "false" );
++		// If we're switching tabs, remove the old tab from the tab order.
++		// If we're opening from collapsed state, remove the previous tab from the tab order.
++		// If we're collapsing, then keep the collapsing tab in the tab order.
++		if ( toShow.length && toHide.length ) {
++			eventData.oldTab.attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.tabs.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow.attr({
++			"aria-expanded": "true",
++			"aria-hidden": "false"
++		});
++		eventData.newTab.attr({
++			"aria-selected": "true",
++			tabIndex: 0
++		});
++	},
++
++	_activate: function( index ) {
++		var anchor,
++			active = this._findActive( index );
++
++		// trying to activate the already active panel
++		if ( active[ 0 ] === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the current active header
++		if ( !active.length ) {
++			active = this.active;
++		}
++
++		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
++		this._eventHandler({
++			target: anchor,
++			currentTarget: anchor,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( index ) {
++		return index === false ? $() : this.tabs.eq( index );
++	},
++
++	_getIndex: function( index ) {
++		// meta-function to give users option to provide a href string instead of a numerical index.
++		if ( typeof index === "string" ) {
++			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
++		}
++
++		return index;
++	},
++
++	_destroy: function() {
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
++
++		this.tablist
++			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.removeAttr( "role" );
++
++		this.anchors
++			.removeClass( "ui-tabs-anchor" )
++			.removeAttr( "role" )
++			.removeAttr( "tabIndex" )
++			.removeUniqueId();
++
++		this.tabs.add( this.panels ).each(function() {
++			if ( $.data( this, "ui-tabs-destroy" ) ) {
++				$( this ).remove();
++			} else {
++				$( this )
++					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
++						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
++					.removeAttr( "tabIndex" )
++					.removeAttr( "aria-live" )
++					.removeAttr( "aria-busy" )
++					.removeAttr( "aria-selected" )
++					.removeAttr( "aria-labelledby" )
++					.removeAttr( "aria-hidden" )
++					.removeAttr( "aria-expanded" )
++					.removeAttr( "role" );
++			}
++		});
++
++		this.tabs.each(function() {
++			var li = $( this ),
++				prev = li.data( "ui-tabs-aria-controls" );
++			if ( prev ) {
++				li
++					.attr( "aria-controls", prev )
++					.removeData( "ui-tabs-aria-controls" );
++			} else {
++				li.removeAttr( "aria-controls" );
++			}
++		});
++
++		this.panels.show();
++
++		if ( this.options.heightStyle !== "content" ) {
++			this.panels.css( "height", "" );
++		}
++	},
++
++	enable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === false ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = false;
++		} else {
++			index = this._getIndex( index );
++			if ( $.isArray( disabled ) ) {
++				disabled = $.map( disabled, function( num ) {
++					return num !== index ? num : null;
++				});
++			} else {
++				disabled = $.map( this.tabs, function( li, num ) {
++					return num !== index ? num : null;
++				});
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	disable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === true ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = true;
++		} else {
++			index = this._getIndex( index );
++			if ( $.inArray( index, disabled ) !== -1 ) {
++				return;
++			}
++			if ( $.isArray( disabled ) ) {
++				disabled = $.merge( [ index ], disabled ).sort();
++			} else {
++				disabled = [ index ];
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	load: function( index, event ) {
++		index = this._getIndex( index );
++		var that = this,
++			tab = this.tabs.eq( index ),
++			anchor = tab.find( ".ui-tabs-anchor" ),
++			panel = this._getPanelForTab( tab ),
++			eventData = {
++				tab: tab,
++				panel: panel
++			};
++
++		// not remote
++		if ( isLocal( anchor[ 0 ] ) ) {
++			return;
++		}
++
++		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
++
++		// support: jQuery <1.8
++		// jQuery <1.8 returns false if the request is canceled in beforeSend,
++		// but as of 1.8, $.ajax() always returns a jqXHR object.
++		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
++			tab.addClass( "ui-tabs-loading" );
++			panel.attr( "aria-busy", "true" );
++
++			this.xhr
++				.success(function( response ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						panel.html( response );
++						that._trigger( "load", event, eventData );
++					}, 1 );
++				})
++				.complete(function( jqXHR, status ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						if ( status === "abort" ) {
++							that.panels.stop( false, true );
++						}
++
++						tab.removeClass( "ui-tabs-loading" );
++						panel.removeAttr( "aria-busy" );
++
++						if ( jqXHR === that.xhr ) {
++							delete that.xhr;
++						}
++					}, 1 );
++				});
++		}
++	},
++
++	_ajaxSettings: function( anchor, event, eventData ) {
++		var that = this;
++		return {
++			url: anchor.attr( "href" ),
++			beforeSend: function( jqXHR, settings ) {
++				return that._trigger( "beforeLoad", event,
++					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
++			}
++		};
++	},
++
++	_getPanelForTab: function( tab ) {
++		var id = $( tab ).attr( "aria-controls" );
++		return this.element.find( this._sanitizeSelector( "#" + id ) );
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-slide.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-slide.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-slide.js	(revision 15487)
+@@ -0,0 +1,64 @@
++/*!
++ * jQuery UI Effects Slide 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/slide-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.slide = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
++		mode = $.effects.setMode( el, o.mode || "show" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		distance,
++		animation = {};
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
++
++	$.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	if ( show ) {
++		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( positiveMotion ? "+=" : "-=") :
++		( positiveMotion ? "-=" : "+=")) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.tooltip.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.tooltip.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.tooltip.js	(revision 15487)
+@@ -0,0 +1,402 @@
++/*!
++ * jQuery UI Tooltip 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/tooltip/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.position.js
++ */
++(function( $ ) {
++
++var increments = 0;
++
++function addDescribedBy( elem, id ) {
++	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
++	describedby.push( id );
++	elem
++		.data( "ui-tooltip-id", id )
++		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
++}
++
++function removeDescribedBy( elem ) {
++	var id = elem.data( "ui-tooltip-id" ),
++		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
++		index = $.inArray( id, describedby );
++	if ( index !== -1 ) {
++		describedby.splice( index, 1 );
++	}
++
++	elem.removeData( "ui-tooltip-id" );
++	describedby = $.trim( describedby.join( " " ) );
++	if ( describedby ) {
++		elem.attr( "aria-describedby", describedby );
++	} else {
++		elem.removeAttr( "aria-describedby" );
++	}
++}
++
++$.widget( "ui.tooltip", {
++	version: "1.10.3",
++	options: {
++		content: function() {
++			// support: IE<9, Opera in jQuery <1.7
++			// .text() can't accept undefined, so coerce to a string
++			var title = $( this ).attr( "title" ) || "";
++			// Escape title, since we're going from an attribute to raw HTML
++			return $( "<a>" ).text( title ).html();
++		},
++		hide: true,
++		// Disabled elements have inconsistent behavior across browsers (#8661)
++		items: "[title]:not([disabled])",
++		position: {
++			my: "left top+15",
++			at: "left bottom",
++			collision: "flipfit flip"
++		},
++		show: true,
++		tooltipClass: null,
++		track: false,
++
++		// callbacks
++		close: null,
++		open: null
++	},
++
++	_create: function() {
++		this._on({
++			mouseover: "open",
++			focusin: "open"
++		});
++
++		// IDs of generated tooltips, needed for destroy
++		this.tooltips = {};
++		// IDs of parent tooltips where we removed the title attribute
++		this.parents = {};
++
++		if ( this.options.disabled ) {
++			this._disable();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var that = this;
++
++		if ( key === "disabled" ) {
++			this[ value ? "_disable" : "_enable" ]();
++			this.options[ key ] = value;
++			// disable element style changes
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "content" ) {
++			$.each( this.tooltips, function( id, element ) {
++				that._updateContent( element );
++			});
++		}
++	},
++
++	_disable: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++		});
++
++		// remove title attributes to prevent native tooltips
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.is( "[title]" ) ) {
++				element
++					.data( "ui-tooltip-title", element.attr( "title" ) )
++					.attr( "title", "" );
++			}
++		});
++	},
++
++	_enable: function() {
++		// restore title attributes
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++			}
++		});
++	},
++
++	open: function( event ) {
++		var that = this,
++			target = $( event ? event.target : this.element )
++				// we need closest here due to mouseover bubbling,
++				// but always pointing at the same event target
++				.closest( this.options.items );
++
++		// No element to show a tooltip for or the tooltip is already open
++		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
++			return;
++		}
++
++		if ( target.attr( "title" ) ) {
++			target.data( "ui-tooltip-title", target.attr( "title" ) );
++		}
++
++		target.data( "ui-tooltip-open", true );
++
++		// kill parent tooltips, custom or native, for hover
++		if ( event && event.type === "mouseover" ) {
++			target.parents().each(function() {
++				var parent = $( this ),
++					blurEvent;
++				if ( parent.data( "ui-tooltip-open" ) ) {
++					blurEvent = $.Event( "blur" );
++					blurEvent.target = blurEvent.currentTarget = this;
++					that.close( blurEvent, true );
++				}
++				if ( parent.attr( "title" ) ) {
++					parent.uniqueId();
++					that.parents[ this.id ] = {
++						element: this,
++						title: parent.attr( "title" )
++					};
++					parent.attr( "title", "" );
++				}
++			});
++		}
++
++		this._updateContent( target, event );
++	},
++
++	_updateContent: function( target, event ) {
++		var content,
++			contentOption = this.options.content,
++			that = this,
++			eventType = event ? event.type : null;
++
++		if ( typeof contentOption === "string" ) {
++			return this._open( event, target, contentOption );
++		}
++
++		content = contentOption.call( target[0], function( response ) {
++			// ignore async response if tooltip was closed already
++			if ( !target.data( "ui-tooltip-open" ) ) {
++				return;
++			}
++			// IE may instantly serve a cached response for ajax requests
++			// delay this call to _open so the other call to _open runs first
++			that._delay(function() {
++				// jQuery creates a special event for focusin when it doesn't
++				// exist natively. To improve performance, the native event
++				// object is reused and the type is changed. Therefore, we can't
++				// rely on the type being correct after the event finished
++				// bubbling, so we set it back to the previous value. (#8740)
++				if ( event ) {
++					event.type = eventType;
++				}
++				this._open( event, target, response );
++			});
++		});
++		if ( content ) {
++			this._open( event, target, content );
++		}
++	},
++
++	_open: function( event, target, content ) {
++		var tooltip, events, delayedShow,
++			positionOption = $.extend( {}, this.options.position );
++
++		if ( !content ) {
++			return;
++		}
++
++		// Content can be updated multiple times. If the tooltip already
++		// exists, then just update the content and bail.
++		tooltip = this._find( target );
++		if ( tooltip.length ) {
++			tooltip.find( ".ui-tooltip-content" ).html( content );
++			return;
++		}
++
++		// if we have a title, clear it to prevent the native tooltip
++		// we have to check first to avoid defining a title if none exists
++		// (we don't want to cause an element to start matching [title])
++		//
++		// We use removeAttr only for key events, to allow IE to export the correct
++		// accessible attributes. For mouse events, set to empty string to avoid
++		// native tooltip showing up (happens only when removing inside mouseover).
++		if ( target.is( "[title]" ) ) {
++			if ( event && event.type === "mouseover" ) {
++				target.attr( "title", "" );
++			} else {
++				target.removeAttr( "title" );
++			}
++		}
++
++		tooltip = this._tooltip( target );
++		addDescribedBy( target, tooltip.attr( "id" ) );
++		tooltip.find( ".ui-tooltip-content" ).html( content );
++
++		function position( event ) {
++			positionOption.of = event;
++			if ( tooltip.is( ":hidden" ) ) {
++				return;
++			}
++			tooltip.position( positionOption );
++		}
++		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
++			this._on( this.document, {
++				mousemove: position
++			});
++			// trigger once to override element-relative positioning
++			position( event );
++		} else {
++			tooltip.position( $.extend({
++				of: target
++			}, this.options.position ) );
++		}
++
++		tooltip.hide();
++
++		this._show( tooltip, this.options.show );
++		// Handle tracking tooltips that are shown with a delay (#8644). As soon
++		// as the tooltip is visible, position the tooltip using the most recent
++		// event.
++		if ( this.options.show && this.options.show.delay ) {
++			delayedShow = this.delayedShow = setInterval(function() {
++				if ( tooltip.is( ":visible" ) ) {
++					position( positionOption.of );
++					clearInterval( delayedShow );
++				}
++			}, $.fx.interval );
++		}
++
++		this._trigger( "open", event, { tooltip: tooltip } );
++
++		events = {
++			keyup: function( event ) {
++				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
++					var fakeEvent = $.Event(event);
++					fakeEvent.currentTarget = target[0];
++					this.close( fakeEvent, true );
++				}
++			},
++			remove: function() {
++				this._removeTooltip( tooltip );
++			}
++		};
++		if ( !event || event.type === "mouseover" ) {
++			events.mouseleave = "close";
++		}
++		if ( !event || event.type === "focusin" ) {
++			events.focusout = "close";
++		}
++		this._on( true, target, events );
++	},
++
++	close: function( event ) {
++		var that = this,
++			target = $( event ? event.currentTarget : this.element ),
++			tooltip = this._find( target );
++
++		// disabling closes the tooltip, so we need to track when we're closing
++		// to avoid an infinite loop in case the tooltip becomes disabled on close
++		if ( this.closing ) {
++			return;
++		}
++
++		// Clear the interval for delayed tracking tooltips
++		clearInterval( this.delayedShow );
++
++		// only set title if we had one before (see comment in _open())
++		if ( target.data( "ui-tooltip-title" ) ) {
++			target.attr( "title", target.data( "ui-tooltip-title" ) );
++		}
++
++		removeDescribedBy( target );
++
++		tooltip.stop( true );
++		this._hide( tooltip, this.options.hide, function() {
++			that._removeTooltip( $( this ) );
++		});
++
++		target.removeData( "ui-tooltip-open" );
++		this._off( target, "mouseleave focusout keyup" );
++		// Remove 'remove' binding only on delegated targets
++		if ( target[0] !== this.element[0] ) {
++			this._off( target, "remove" );
++		}
++		this._off( this.document, "mousemove" );
++
++		if ( event && event.type === "mouseleave" ) {
++			$.each( this.parents, function( id, parent ) {
++				$( parent.element ).attr( "title", parent.title );
++				delete that.parents[ id ];
++			});
++		}
++
++		this.closing = true;
++		this._trigger( "close", event, { tooltip: tooltip } );
++		this.closing = false;
++	},
++
++	_tooltip: function( element ) {
++		var id = "ui-tooltip-" + increments++,
++			tooltip = $( "<div>" )
++				.attr({
++					id: id,
++					role: "tooltip"
++				})
++				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
++					( this.options.tooltipClass || "" ) );
++		$( "<div>" )
++			.addClass( "ui-tooltip-content" )
++			.appendTo( tooltip );
++		tooltip.appendTo( this.document[0].body );
++		this.tooltips[ id ] = element;
++		return tooltip;
++	},
++
++	_find: function( target ) {
++		var id = target.data( "ui-tooltip-id" );
++		return id ? $( "#" + id ) : $();
++	},
++
++	_removeTooltip: function( tooltip ) {
++		tooltip.remove();
++		delete this.tooltips[ tooltip.attr( "id" ) ];
++	},
++
++	_destroy: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			// Delegate to close method to handle common cleanup
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++
++			// Remove immediately; destroying an open tooltip doesn't use the
++			// hide animation
++			$( "#" + id ).remove();
++
++			// Restore the title
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++				element.removeData( "ui-tooltip-title" );
++			}
++		});
++	}
++});
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-drop.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-drop.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-drop.js	(revision 15487)
+@@ -0,0 +1,65 @@
++/*!
++ * jQuery UI Effects Drop 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/drop-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.drop = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
++		animation = {
++			opacity: show ? 1 : 0
++		},
++		distance;
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
++
++	if ( show ) {
++		el
++			.css( "opacity", 0 )
++			.css( ref, motion === "pos" ? -distance : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( motion === "pos" ? "+=" : "-=" ) :
++		( motion === "pos" ? "-=" : "+=" ) ) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.dialog.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.dialog.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.dialog.js	(revision 15487)
+@@ -0,0 +1,808 @@
++/*!
++ * jQuery UI Dialog 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/dialog/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *  jquery.ui.button.js
++ *	jquery.ui.draggable.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.position.js
++ *	jquery.ui.resizable.js
++ */
++(function( $, undefined ) {
++
++var sizeRelatedOptions = {
++		buttons: true,
++		height: true,
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true,
++		width: true
++	},
++	resizableRelatedOptions = {
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true
++	};
++
++$.widget( "ui.dialog", {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoOpen: true,
++		buttons: [],
++		closeOnEscape: true,
++		closeText: "close",
++		dialogClass: "",
++		draggable: true,
++		hide: null,
++		height: "auto",
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 150,
++		minWidth: 150,
++		modal: false,
++		position: {
++			my: "center",
++			at: "center",
++			of: window,
++			collision: "fit",
++			// Ensure the titlebar is always visible
++			using: function( pos ) {
++				var topOffset = $( this ).css( pos ).offset().top;
++				if ( topOffset < 0 ) {
++					$( this ).css( "top", pos.top - topOffset );
++				}
++			}
++		},
++		resizable: true,
++		show: null,
++		title: null,
++		width: 300,
++
++		// callbacks
++		beforeClose: null,
++		close: null,
++		drag: null,
++		dragStart: null,
++		dragStop: null,
++		focus: null,
++		open: null,
++		resize: null,
++		resizeStart: null,
++		resizeStop: null
++	},
++
++	_create: function() {
++		this.originalCss = {
++			display: this.element[0].style.display,
++			width: this.element[0].style.width,
++			minHeight: this.element[0].style.minHeight,
++			maxHeight: this.element[0].style.maxHeight,
++			height: this.element[0].style.height
++		};
++		this.originalPosition = {
++			parent: this.element.parent(),
++			index: this.element.parent().children().index( this.element )
++		};
++		this.originalTitle = this.element.attr("title");
++		this.options.title = this.options.title || this.originalTitle;
++
++		this._createWrapper();
++
++		this.element
++			.show()
++			.removeAttr("title")
++			.addClass("ui-dialog-content ui-widget-content")
++			.appendTo( this.uiDialog );
++
++		this._createTitlebar();
++		this._createButtonPane();
++
++		if ( this.options.draggable && $.fn.draggable ) {
++			this._makeDraggable();
++		}
++		if ( this.options.resizable && $.fn.resizable ) {
++			this._makeResizable();
++		}
++
++		this._isOpen = false;
++	},
++
++	_init: function() {
++		if ( this.options.autoOpen ) {
++			this.open();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++		if ( element && (element.jquery || element.nodeType) ) {
++			return $( element );
++		}
++		return this.document.find( element || "body" ).eq( 0 );
++	},
++
++	_destroy: function() {
++		var next,
++			originalPosition = this.originalPosition;
++
++		this._destroyOverlay();
++
++		this.element
++			.removeUniqueId()
++			.removeClass("ui-dialog-content ui-widget-content")
++			.css( this.originalCss )
++			// Without detaching first, the following becomes really slow
++			.detach();
++
++		this.uiDialog.stop( true, true ).remove();
++
++		if ( this.originalTitle ) {
++			this.element.attr( "title", this.originalTitle );
++		}
++
++		next = originalPosition.parent.children().eq( originalPosition.index );
++		// Don't try to place the dialog next to itself (#8613)
++		if ( next.length && next[0] !== this.element[0] ) {
++			next.before( this.element );
++		} else {
++			originalPosition.parent.append( this.element );
++		}
++	},
++
++	widget: function() {
++		return this.uiDialog;
++	},
++
++	disable: $.noop,
++	enable: $.noop,
++
++	close: function( event ) {
++		var that = this;
++
++		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
++			return;
++		}
++
++		this._isOpen = false;
++		this._destroyOverlay();
++
++		if ( !this.opener.filter(":focusable").focus().length ) {
++			// Hiding a focused element doesn't trigger blur in WebKit
++			// so in case we have nothing to focus on, explicitly blur the active element
++			// https://bugs.webkit.org/show_bug.cgi?id=47182
++			$( this.document[0].activeElement ).blur();
++		}
++
++		this._hide( this.uiDialog, this.options.hide, function() {
++			that._trigger( "close", event );
++		});
++	},
++
++	isOpen: function() {
++		return this._isOpen;
++	},
++
++	moveToTop: function() {
++		this._moveToTop();
++	},
++
++	_moveToTop: function( event, silent ) {
++		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
++		if ( moved && !silent ) {
++			this._trigger( "focus", event );
++		}
++		return moved;
++	},
++
++	open: function() {
++		var that = this;
++		if ( this._isOpen ) {
++			if ( this._moveToTop() ) {
++				this._focusTabbable();
++			}
++			return;
++		}
++
++		this._isOpen = true;
++		this.opener = $( this.document[0].activeElement );
++
++		this._size();
++		this._position();
++		this._createOverlay();
++		this._moveToTop( null, true );
++		this._show( this.uiDialog, this.options.show, function() {
++			that._focusTabbable();
++			that._trigger("focus");
++		});
++
++		this._trigger("open");
++	},
++
++	_focusTabbable: function() {
++		// Set focus to the first match:
++		// 1. First element inside the dialog matching [autofocus]
++		// 2. Tabbable element inside the content element
++		// 3. Tabbable element inside the buttonpane
++		// 4. The close button
++		// 5. The dialog itself
++		var hasFocus = this.element.find("[autofocus]");
++		if ( !hasFocus.length ) {
++			hasFocus = this.element.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogButtonPane.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialog;
++		}
++		hasFocus.eq( 0 ).focus();
++	},
++
++	_keepFocus: function( event ) {
++		function checkFocus() {
++			var activeElement = this.document[0].activeElement,
++				isActive = this.uiDialog[0] === activeElement ||
++					$.contains( this.uiDialog[0], activeElement );
++			if ( !isActive ) {
++				this._focusTabbable();
++			}
++		}
++		event.preventDefault();
++		checkFocus.call( this );
++		// support: IE
++		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
++		// so we check again later
++		this._delay( checkFocus );
++	},
++
++	_createWrapper: function() {
++		this.uiDialog = $("<div>")
++			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
++				this.options.dialogClass )
++			.hide()
++			.attr({
++				// Setting tabIndex makes the div focusable
++				tabIndex: -1,
++				role: "dialog"
++			})
++			.appendTo( this._appendTo() );
++
++		this._on( this.uiDialog, {
++			keydown: function( event ) {
++				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
++						event.keyCode === $.ui.keyCode.ESCAPE ) {
++					event.preventDefault();
++					this.close( event );
++					return;
++				}
++
++				// prevent tabbing out of dialogs
++				if ( event.keyCode !== $.ui.keyCode.TAB ) {
++					return;
++				}
++				var tabbables = this.uiDialog.find(":tabbable"),
++					first = tabbables.filter(":first"),
++					last  = tabbables.filter(":last");
++
++				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
++					first.focus( 1 );
++					event.preventDefault();
++				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
++					last.focus( 1 );
++					event.preventDefault();
++				}
++			},
++			mousedown: function( event ) {
++				if ( this._moveToTop( event ) ) {
++					this._focusTabbable();
++				}
++			}
++		});
++
++		// We assume that any existing aria-describedby attribute means
++		// that the dialog content is marked up properly
++		// otherwise we brute force the content as the description
++		if ( !this.element.find("[aria-describedby]").length ) {
++			this.uiDialog.attr({
++				"aria-describedby": this.element.uniqueId().attr("id")
++			});
++		}
++	},
++
++	_createTitlebar: function() {
++		var uiDialogTitle;
++
++		this.uiDialogTitlebar = $("<div>")
++			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
++			.prependTo( this.uiDialog );
++		this._on( this.uiDialogTitlebar, {
++			mousedown: function( event ) {
++				// Don't prevent click on close button (#8838)
++				// Focusing a dialog that is partially scrolled out of view
++				// causes the browser to scroll it into view, preventing the click event
++				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
++					// Dialog isn't getting focus when dragging (#8063)
++					this.uiDialog.focus();
++				}
++			}
++		});
++
++		this.uiDialogTitlebarClose = $("<button></button>")
++			.button({
++				label: this.options.closeText,
++				icons: {
++					primary: "ui-icon-closethick"
++				},
++				text: false
++			})
++			.addClass("ui-dialog-titlebar-close")
++			.appendTo( this.uiDialogTitlebar );
++		this._on( this.uiDialogTitlebarClose, {
++			click: function( event ) {
++				event.preventDefault();
++				this.close( event );
++			}
++		});
++
++		uiDialogTitle = $("<span>")
++			.uniqueId()
++			.addClass("ui-dialog-title")
++			.prependTo( this.uiDialogTitlebar );
++		this._title( uiDialogTitle );
++
++		this.uiDialog.attr({
++			"aria-labelledby": uiDialogTitle.attr("id")
++		});
++	},
++
++	_title: function( title ) {
++		if ( !this.options.title ) {
++			title.html("&#160;");
++		}
++		title.text( this.options.title );
++	},
++
++	_createButtonPane: function() {
++		this.uiDialogButtonPane = $("<div>")
++			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
++
++		this.uiButtonSet = $("<div>")
++			.addClass("ui-dialog-buttonset")
++			.appendTo( this.uiDialogButtonPane );
++
++		this._createButtons();
++	},
++
++	_createButtons: function() {
++		var that = this,
++			buttons = this.options.buttons;
++
++		// if we already have a button pane, remove it
++		this.uiDialogButtonPane.remove();
++		this.uiButtonSet.empty();
++
++		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
++			this.uiDialog.removeClass("ui-dialog-buttons");
++			return;
++		}
++
++		$.each( buttons, function( name, props ) {
++			var click, buttonOptions;
++			props = $.isFunction( props ) ?
++				{ click: props, text: name } :
++				props;
++			// Default to a non-submitting button
++			props = $.extend( { type: "button" }, props );
++			// Change the context for the click callback to be the main element
++			click = props.click;
++			props.click = function() {
++				click.apply( that.element[0], arguments );
++			};
++			buttonOptions = {
++				icons: props.icons,
++				text: props.showText
++			};
++			delete props.icons;
++			delete props.showText;
++			$( "<button></button>", props )
++				.button( buttonOptions )
++				.appendTo( that.uiButtonSet );
++		});
++		this.uiDialog.addClass("ui-dialog-buttons");
++		this.uiDialogButtonPane.appendTo( this.uiDialog );
++	},
++
++	_makeDraggable: function() {
++		var that = this,
++			options = this.options;
++
++		function filteredUi( ui ) {
++			return {
++				position: ui.position,
++				offset: ui.offset
++			};
++		}
++
++		this.uiDialog.draggable({
++			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
++			handle: ".ui-dialog-titlebar",
++			containment: "document",
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-dragging");
++				that._blockFrames();
++				that._trigger( "dragStart", event, filteredUi( ui ) );
++			},
++			drag: function( event, ui ) {
++				that._trigger( "drag", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.position = [
++					ui.position.left - that.document.scrollLeft(),
++					ui.position.top - that.document.scrollTop()
++				];
++				$( this ).removeClass("ui-dialog-dragging");
++				that._unblockFrames();
++				that._trigger( "dragStop", event, filteredUi( ui ) );
++			}
++		});
++	},
++
++	_makeResizable: function() {
++		var that = this,
++			options = this.options,
++			handles = options.resizable,
++			// .ui-resizable has position: relative defined in the stylesheet
++			// but dialogs have to use absolute or fixed positioning
++			position = this.uiDialog.css("position"),
++			resizeHandles = typeof handles === "string" ?
++				handles	:
++				"n,e,s,w,se,sw,ne,nw";
++
++		function filteredUi( ui ) {
++			return {
++				originalPosition: ui.originalPosition,
++				originalSize: ui.originalSize,
++				position: ui.position,
++				size: ui.size
++			};
++		}
++
++		this.uiDialog.resizable({
++			cancel: ".ui-dialog-content",
++			containment: "document",
++			alsoResize: this.element,
++			maxWidth: options.maxWidth,
++			maxHeight: options.maxHeight,
++			minWidth: options.minWidth,
++			minHeight: this._minHeight(),
++			handles: resizeHandles,
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-resizing");
++				that._blockFrames();
++				that._trigger( "resizeStart", event, filteredUi( ui ) );
++			},
++			resize: function( event, ui ) {
++				that._trigger( "resize", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.height = $( this ).height();
++				options.width = $( this ).width();
++				$( this ).removeClass("ui-dialog-resizing");
++				that._unblockFrames();
++				that._trigger( "resizeStop", event, filteredUi( ui ) );
++			}
++		})
++		.css( "position", position );
++	},
++
++	_minHeight: function() {
++		var options = this.options;
++
++		return options.height === "auto" ?
++			options.minHeight :
++			Math.min( options.minHeight, options.height );
++	},
++
++	_position: function() {
++		// Need to show the dialog to get the actual offset in the position plugin
++		var isVisible = this.uiDialog.is(":visible");
++		if ( !isVisible ) {
++			this.uiDialog.show();
++		}
++		this.uiDialog.position( this.options.position );
++		if ( !isVisible ) {
++			this.uiDialog.hide();
++		}
++	},
++
++	_setOptions: function( options ) {
++		var that = this,
++			resize = false,
++			resizableOptions = {};
++
++		$.each( options, function( key, value ) {
++			that._setOption( key, value );
++
++			if ( key in sizeRelatedOptions ) {
++				resize = true;
++			}
++			if ( key in resizableRelatedOptions ) {
++				resizableOptions[ key ] = value;
++			}
++		});
++
++		if ( resize ) {
++			this._size();
++			this._position();
++		}
++		if ( this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", resizableOptions );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		/*jshint maxcomplexity:15*/
++		var isDraggable, isResizable,
++			uiDialog = this.uiDialog;
++
++		if ( key === "dialogClass" ) {
++			uiDialog
++				.removeClass( this.options.dialogClass )
++				.addClass( value );
++		}
++
++		if ( key === "disabled" ) {
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "appendTo" ) {
++			this.uiDialog.appendTo( this._appendTo() );
++		}
++
++		if ( key === "buttons" ) {
++			this._createButtons();
++		}
++
++		if ( key === "closeText" ) {
++			this.uiDialogTitlebarClose.button({
++				// Ensure that we always pass a string
++				label: "" + value
++			});
++		}
++
++		if ( key === "draggable" ) {
++			isDraggable = uiDialog.is(":data(ui-draggable)");
++			if ( isDraggable && !value ) {
++				uiDialog.draggable("destroy");
++			}
++
++			if ( !isDraggable && value ) {
++				this._makeDraggable();
++			}
++		}
++
++		if ( key === "position" ) {
++			this._position();
++		}
++
++		if ( key === "resizable" ) {
++			// currently resizable, becoming non-resizable
++			isResizable = uiDialog.is(":data(ui-resizable)");
++			if ( isResizable && !value ) {
++				uiDialog.resizable("destroy");
++			}
++
++			// currently resizable, changing handles
++			if ( isResizable && typeof value === "string" ) {
++				uiDialog.resizable( "option", "handles", value );
++			}
++
++			// currently non-resizable, becoming resizable
++			if ( !isResizable && value !== false ) {
++				this._makeResizable();
++			}
++		}
++
++		if ( key === "title" ) {
++			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
++		}
++	},
++
++	_size: function() {
++		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
++		// divs will both have width and height set, so we need to reset them
++		var nonContentHeight, minContentHeight, maxContentHeight,
++			options = this.options;
++
++		// Reset content sizing
++		this.element.show().css({
++			width: "auto",
++			minHeight: 0,
++			maxHeight: "none",
++			height: 0
++		});
++
++		if ( options.minWidth > options.width ) {
++			options.width = options.minWidth;
++		}
++
++		// reset wrapper sizing
++		// determine the height of all the non-content elements
++		nonContentHeight = this.uiDialog.css({
++				height: "auto",
++				width: options.width
++			})
++			.outerHeight();
++		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
++		maxContentHeight = typeof options.maxHeight === "number" ?
++			Math.max( 0, options.maxHeight - nonContentHeight ) :
++			"none";
++
++		if ( options.height === "auto" ) {
++			this.element.css({
++				minHeight: minContentHeight,
++				maxHeight: maxContentHeight,
++				height: "auto"
++			});
++		} else {
++			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
++		}
++
++		if (this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
++		}
++	},
++
++	_blockFrames: function() {
++		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
++			var iframe = $( this );
++
++			return $( "<div>" )
++				.css({
++					position: "absolute",
++					width: iframe.outerWidth(),
++					height: iframe.outerHeight()
++				})
++				.appendTo( iframe.parent() )
++				.offset( iframe.offset() )[0];
++		});
++	},
++
++	_unblockFrames: function() {
++		if ( this.iframeBlocks ) {
++			this.iframeBlocks.remove();
++			delete this.iframeBlocks;
++		}
++	},
++
++	_allowInteraction: function( event ) {
++		if ( $( event.target ).closest(".ui-dialog").length ) {
++			return true;
++		}
++
++		// TODO: Remove hack when datepicker implements
++		// the .ui-front logic (#8989)
++		return !!$( event.target ).closest(".ui-datepicker").length;
++	},
++
++	_createOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		var that = this,
++			widgetFullName = this.widgetFullName;
++		if ( !$.ui.dialog.overlayInstances ) {
++			// Prevent use of anchors and inputs.
++			// We use a delay in case the overlay is created from an
++			// event that we're going to be cancelling. (#2804)
++			this._delay(function() {
++				// Handle .dialog().dialog("close") (#4065)
++				if ( $.ui.dialog.overlayInstances ) {
++					this.document.bind( "focusin.dialog", function( event ) {
++						if ( !that._allowInteraction( event ) ) {
++							event.preventDefault();
++							$(".ui-dialog:visible:last .ui-dialog-content")
++								.data( widgetFullName )._focusTabbable();
++						}
++					});
++				}
++			});
++		}
++
++		this.overlay = $("<div>")
++			.addClass("ui-widget-overlay ui-front")
++			.appendTo( this._appendTo() );
++		this._on( this.overlay, {
++			mousedown: "_keepFocus"
++		});
++		$.ui.dialog.overlayInstances++;
++	},
++
++	_destroyOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		if ( this.overlay ) {
++			$.ui.dialog.overlayInstances--;
++
++			if ( !$.ui.dialog.overlayInstances ) {
++				this.document.unbind( "focusin.dialog" );
++			}
++			this.overlay.remove();
++			this.overlay = null;
++		}
++	}
++});
++
++$.ui.dialog.overlayInstances = 0;
++
++// DEPRECATED
++if ( $.uiBackCompat !== false ) {
++	// position option with array notation
++	// just override with old implementation
++	$.widget( "ui.dialog", $.ui.dialog, {
++		_position: function() {
++			var position = this.options.position,
++				myAt = [],
++				offset = [ 0, 0 ],
++				isVisible;
++
++			if ( position ) {
++				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
++					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
++					if ( myAt.length === 1 ) {
++						myAt[1] = myAt[0];
++					}
++
++					$.each( [ "left", "top" ], function( i, offsetPosition ) {
++						if ( +myAt[ i ] === myAt[ i ] ) {
++							offset[ i ] = myAt[ i ];
++							myAt[ i ] = offsetPosition;
++						}
++					});
++
++					position = {
++						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
++							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
++						at: myAt.join(" ")
++					};
++				}
++
++				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
++			} else {
++				position = $.ui.dialog.prototype.options.position;
++			}
++
++			// need to show the dialog to get the actual offset in the position plugin
++			isVisible = this.uiDialog.is(":visible");
++			if ( !isVisible ) {
++				this.uiDialog.show();
++			}
++			this.uiDialog.position( position );
++			if ( !isVisible ) {
++				this.uiDialog.hide();
++			}
++		}
++	});
++}
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.autocomplete.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.autocomplete.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.autocomplete.js	(revision 15487)
+@@ -0,0 +1,610 @@
++/*!
++ * jQuery UI Autocomplete 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/autocomplete/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.position.js
++ *	jquery.ui.menu.js
++ */
++(function( $, undefined ) {
++
++// used to prevent race conditions with remote data sources
++var requestIndex = 0;
++
++$.widget( "ui.autocomplete", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	options: {
++		appendTo: null,
++		autoFocus: false,
++		delay: 300,
++		minLength: 1,
++		position: {
++			my: "left top",
++			at: "left bottom",
++			collision: "none"
++		},
++		source: null,
++
++		// callbacks
++		change: null,
++		close: null,
++		focus: null,
++		open: null,
++		response: null,
++		search: null,
++		select: null
++	},
++
++	pending: 0,
++
++	_create: function() {
++		// Some browsers only repeat keydown events, not keypress events,
++		// so we use the suppressKeyPress flag to determine if we've already
++		// handled the keydown event. #7269
++		// Unfortunately the code for & in keypress is the same as the up arrow,
++		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
++		// events when we know the keydown event was used to modify the
++		// search term. #7799
++		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
++			nodeName = this.element[0].nodeName.toLowerCase(),
++			isTextarea = nodeName === "textarea",
++			isInput = nodeName === "input";
++
++		this.isMultiLine =
++			// Textareas are always multi-line
++			isTextarea ? true :
++			// Inputs are always single-line, even if inside a contentEditable element
++			// IE also treats inputs as contentEditable
++			isInput ? false :
++			// All other element types are determined by whether or not they're contentEditable
++			this.element.prop( "isContentEditable" );
++
++		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
++		this.isNewMenu = true;
++
++		this.element
++			.addClass( "ui-autocomplete-input" )
++			.attr( "autocomplete", "off" );
++
++		this._on( this.element, {
++			keydown: function( event ) {
++				/*jshint maxcomplexity:15*/
++				if ( this.element.prop( "readOnly" ) ) {
++					suppressKeyPress = true;
++					suppressInput = true;
++					suppressKeyPressRepeat = true;
++					return;
++				}
++
++				suppressKeyPress = false;
++				suppressInput = false;
++				suppressKeyPressRepeat = false;
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					suppressKeyPress = true;
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					suppressKeyPress = true;
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					suppressKeyPress = true;
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					suppressKeyPress = true;
++					this._keyEvent( "next", event );
++					break;
++				case keyCode.ENTER:
++				case keyCode.NUMPAD_ENTER:
++					// when menu is open and has focus
++					if ( this.menu.active ) {
++						// #6055 - Opera still allows the keypress to occur
++						// which causes forms to submit
++						suppressKeyPress = true;
++						event.preventDefault();
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.TAB:
++					if ( this.menu.active ) {
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.ESCAPE:
++					if ( this.menu.element.is( ":visible" ) ) {
++						this._value( this.term );
++						this.close( event );
++						// Different browsers have different default behavior for escape
++						// Single press can mean undo or clear
++						// Double press in IE means clear the whole form
++						event.preventDefault();
++					}
++					break;
++				default:
++					suppressKeyPressRepeat = true;
++					// search timeout should be triggered before the input value is changed
++					this._searchTimeout( event );
++					break;
++				}
++			},
++			keypress: function( event ) {
++				if ( suppressKeyPress ) {
++					suppressKeyPress = false;
++					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++						event.preventDefault();
++					}
++					return;
++				}
++				if ( suppressKeyPressRepeat ) {
++					return;
++				}
++
++				// replicate some key handlers to allow them to repeat in Firefox and Opera
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					this._keyEvent( "next", event );
++					break;
++				}
++			},
++			input: function( event ) {
++				if ( suppressInput ) {
++					suppressInput = false;
++					event.preventDefault();
++					return;
++				}
++				this._searchTimeout( event );
++			},
++			focus: function() {
++				this.selectedItem = null;
++				this.previous = this._value();
++			},
++			blur: function( event ) {
++				if ( this.cancelBlur ) {
++					delete this.cancelBlur;
++					return;
++				}
++
++				clearTimeout( this.searching );
++				this.close( event );
++				this._change( event );
++			}
++		});
++
++		this._initSource();
++		this.menu = $( "<ul>" )
++			.addClass( "ui-autocomplete ui-front" )
++			.appendTo( this._appendTo() )
++			.menu({
++				// disable ARIA support, the live region takes care of that
++				role: null
++			})
++			.hide()
++			.data( "ui-menu" );
++
++		this._on( this.menu.element, {
++			mousedown: function( event ) {
++				// prevent moving focus out of the text field
++				event.preventDefault();
++
++				// IE doesn't prevent moving focus even with event.preventDefault()
++				// so we set a flag to know when we should ignore the blur event
++				this.cancelBlur = true;
++				this._delay(function() {
++					delete this.cancelBlur;
++				});
++
++				// clicking on the scrollbar causes focus to shift to the body
++				// but we can't detect a mouseup or a click immediately afterward
++				// so we have to track the next mousedown and close the menu if
++				// the user clicks somewhere outside of the autocomplete
++				var menuElement = this.menu.element[ 0 ];
++				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
++					this._delay(function() {
++						var that = this;
++						this.document.one( "mousedown", function( event ) {
++							if ( event.target !== that.element[ 0 ] &&
++									event.target !== menuElement &&
++									!$.contains( menuElement, event.target ) ) {
++								that.close();
++							}
++						});
++					});
++				}
++			},
++			menufocus: function( event, ui ) {
++				// support: Firefox
++				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
++				if ( this.isNewMenu ) {
++					this.isNewMenu = false;
++					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
++						this.menu.blur();
++
++						this.document.one( "mousemove", function() {
++							$( event.target ).trigger( event.originalEvent );
++						});
++
++						return;
++					}
++				}
++
++				var item = ui.item.data( "ui-autocomplete-item" );
++				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
++					// use value to match what will end up in the input, if it was a key event
++					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
++						this._value( item.value );
++					}
++				} else {
++					// Normally the input is populated with the item's value as the
++					// menu is navigated, causing screen readers to notice a change and
++					// announce the item. Since the focus event was canceled, this doesn't
++					// happen, so we update the live region so that screen readers can
++					// still notice the change and announce it.
++					this.liveRegion.text( item.value );
++				}
++			},
++			menuselect: function( event, ui ) {
++				var item = ui.item.data( "ui-autocomplete-item" ),
++					previous = this.previous;
++
++				// only trigger when focus was lost (click on menu)
++				if ( this.element[0] !== this.document[0].activeElement ) {
++					this.element.focus();
++					this.previous = previous;
++					// #6109 - IE triggers two focus events and the second
++					// is asynchronous, so we need to reset the previous
++					// term synchronously and asynchronously :-(
++					this._delay(function() {
++						this.previous = previous;
++						this.selectedItem = item;
++					});
++				}
++
++				if ( false !== this._trigger( "select", event, { item: item } ) ) {
++					this._value( item.value );
++				}
++				// reset the term after the select event
++				// this allows custom select handling to work properly
++				this.term = this._value();
++
++				this.close( event );
++				this.selectedItem = item;
++			}
++		});
++
++		this.liveRegion = $( "<span>", {
++				role: "status",
++				"aria-live": "polite"
++			})
++			.addClass( "ui-helper-hidden-accessible" )
++			.insertBefore( this.element );
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_destroy: function() {
++		clearTimeout( this.searching );
++		this.element
++			.removeClass( "ui-autocomplete-input" )
++			.removeAttr( "autocomplete" );
++		this.menu.element.remove();
++		this.liveRegion.remove();
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "source" ) {
++			this._initSource();
++		}
++		if ( key === "appendTo" ) {
++			this.menu.element.appendTo( this._appendTo() );
++		}
++		if ( key === "disabled" && value && this.xhr ) {
++			this.xhr.abort();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++
++		if ( element ) {
++			element = element.jquery || element.nodeType ?
++				$( element ) :
++				this.document.find( element ).eq( 0 );
++		}
++
++		if ( !element ) {
++			element = this.element.closest( ".ui-front" );
++		}
++
++		if ( !element.length ) {
++			element = this.document[0].body;
++		}
++
++		return element;
++	},
++
++	_initSource: function() {
++		var array, url,
++			that = this;
++		if ( $.isArray(this.options.source) ) {
++			array = this.options.source;
++			this.source = function( request, response ) {
++				response( $.ui.autocomplete.filter( array, request.term ) );
++			};
++		} else if ( typeof this.options.source === "string" ) {
++			url = this.options.source;
++			this.source = function( request, response ) {
++				if ( that.xhr ) {
++					that.xhr.abort();
++				}
++				that.xhr = $.ajax({
++					url: url,
++					data: request,
++					dataType: "json",
++					success: function( data ) {
++						response( data );
++					},
++					error: function() {
++						response( [] );
++					}
++				});
++			};
++		} else {
++			this.source = this.options.source;
++		}
++	},
++
++	_searchTimeout: function( event ) {
++		clearTimeout( this.searching );
++		this.searching = this._delay(function() {
++			// only search if the value has changed
++			if ( this.term !== this._value() ) {
++				this.selectedItem = null;
++				this.search( null, event );
++			}
++		}, this.options.delay );
++	},
++
++	search: function( value, event ) {
++		value = value != null ? value : this._value();
++
++		// always save the actual value, not the one passed as an argument
++		this.term = this._value();
++
++		if ( value.length < this.options.minLength ) {
++			return this.close( event );
++		}
++
++		if ( this._trigger( "search", event ) === false ) {
++			return;
++		}
++
++		return this._search( value );
++	},
++
++	_search: function( value ) {
++		this.pending++;
++		this.element.addClass( "ui-autocomplete-loading" );
++		this.cancelSearch = false;
++
++		this.source( { term: value }, this._response() );
++	},
++
++	_response: function() {
++		var that = this,
++			index = ++requestIndex;
++
++		return function( content ) {
++			if ( index === requestIndex ) {
++				that.__response( content );
++			}
++
++			that.pending--;
++			if ( !that.pending ) {
++				that.element.removeClass( "ui-autocomplete-loading" );
++			}
++		};
++	},
++
++	__response: function( content ) {
++		if ( content ) {
++			content = this._normalize( content );
++		}
++		this._trigger( "response", null, { content: content } );
++		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
++			this._suggest( content );
++			this._trigger( "open" );
++		} else {
++			// use ._close() instead of .close() so we don't cancel future searches
++			this._close();
++		}
++	},
++
++	close: function( event ) {
++		this.cancelSearch = true;
++		this._close( event );
++	},
++
++	_close: function( event ) {
++		if ( this.menu.element.is( ":visible" ) ) {
++			this.menu.element.hide();
++			this.menu.blur();
++			this.isNewMenu = true;
++			this._trigger( "close", event );
++		}
++	},
++
++	_change: function( event ) {
++		if ( this.previous !== this._value() ) {
++			this._trigger( "change", event, { item: this.selectedItem } );
++		}
++	},
++
++	_normalize: function( items ) {
++		// assume all items have the right format when the first item is complete
++		if ( items.length && items[0].label && items[0].value ) {
++			return items;
++		}
++		return $.map( items, function( item ) {
++			if ( typeof item === "string" ) {
++				return {
++					label: item,
++					value: item
++				};
++			}
++			return $.extend({
++				label: item.label || item.value,
++				value: item.value || item.label
++			}, item );
++		});
++	},
++
++	_suggest: function( items ) {
++		var ul = this.menu.element.empty();
++		this._renderMenu( ul, items );
++		this.isNewMenu = true;
++		this.menu.refresh();
++
++		// size and position menu
++		ul.show();
++		this._resizeMenu();
++		ul.position( $.extend({
++			of: this.element
++		}, this.options.position ));
++
++		if ( this.options.autoFocus ) {
++			this.menu.next();
++		}
++	},
++
++	_resizeMenu: function() {
++		var ul = this.menu.element;
++		ul.outerWidth( Math.max(
++			// Firefox wraps long text (possibly a rounding bug)
++			// so we add 1px to avoid the wrapping (#7513)
++			ul.width( "" ).outerWidth() + 1,
++			this.element.outerWidth()
++		) );
++	},
++
++	_renderMenu: function( ul, items ) {
++		var that = this;
++		$.each( items, function( index, item ) {
++			that._renderItemData( ul, item );
++		});
++	},
++
++	_renderItemData: function( ul, item ) {
++		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
++	},
++
++	_renderItem: function( ul, item ) {
++		return $( "<li>" )
++			.append( $( "<a>" ).text( item.label ) )
++			.appendTo( ul );
++	},
++
++	_move: function( direction, event ) {
++		if ( !this.menu.element.is( ":visible" ) ) {
++			this.search( null, event );
++			return;
++		}
++		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
++				this.menu.isLastItem() && /^next/.test( direction ) ) {
++			this._value( this.term );
++			this.menu.blur();
++			return;
++		}
++		this.menu[ direction ]( event );
++	},
++
++	widget: function() {
++		return this.menu.element;
++	},
++
++	_value: function() {
++		return this.valueMethod.apply( this.element, arguments );
++	},
++
++	_keyEvent: function( keyEvent, event ) {
++		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++			this._move( keyEvent, event );
++
++			// prevents moving cursor to beginning/end of the text field in some browsers
++			event.preventDefault();
++		}
++	}
++});
++
++$.extend( $.ui.autocomplete, {
++	escapeRegex: function( value ) {
++		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
++	},
++	filter: function(array, term) {
++		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
++		return $.grep( array, function(value) {
++			return matcher.test( value.label || value.value || value );
++		});
++	}
++});
++
++
++// live region extension, adding a `messages` option
++// NOTE: This is an experimental API. We are still investigating
++// a full solution for string manipulation and internationalization.
++$.widget( "ui.autocomplete", $.ui.autocomplete, {
++	options: {
++		messages: {
++			noResults: "No search results.",
++			results: function( amount ) {
++				return amount + ( amount > 1 ? " results are" : " result is" ) +
++					" available, use up and down arrow keys to navigate.";
++			}
++		}
++	},
++
++	__response: function( content ) {
++		var message;
++		this._superApply( arguments );
++		if ( this.options.disabled || this.cancelSearch ) {
++			return;
++		}
++		if ( content && content.length ) {
++			message = this.options.messages.results( content.length );
++		} else {
++			message = this.options.messages.noResults;
++		}
++		this.liveRegion.text( message );
++	}
++});
++
++}( jQuery ));
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-highlight.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-highlight.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-highlight.js	(revision 15487)
+@@ -0,0 +1,50 @@
++/*!
++ * jQuery UI Effects Highlight 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/highlight-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.highlight = function( o, done ) {
++	var elem = $( this ),
++		props = [ "backgroundImage", "backgroundColor", "opacity" ],
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		animation = {
++			backgroundColor: elem.css( "backgroundColor" )
++		};
++
++	if (mode === "hide") {
++		animation.opacity = 0;
++	}
++
++	$.effects.save( elem, props );
++
++	elem
++		.show()
++		.css({
++			backgroundImage: "none",
++			backgroundColor: o.color || "#ffff99"
++		})
++		.animate( animation, {
++			queue: false,
++			duration: o.duration,
++			easing: o.easing,
++			complete: function() {
++				if ( mode === "hide" ) {
++					elem.hide();
++				}
++				$.effects.restore( elem, props );
++				done();
++			}
++		});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.selectable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.selectable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.selectable.js	(revision 15487)
+@@ -0,0 +1,277 @@
++/*!
++ * jQuery UI Selectable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/selectable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.selectable", $.ui.mouse, {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoRefresh: true,
++		distance: 0,
++		filter: "*",
++		tolerance: "touch",
++
++		// callbacks
++		selected: null,
++		selecting: null,
++		start: null,
++		stop: null,
++		unselected: null,
++		unselecting: null
++	},
++	_create: function() {
++		var selectees,
++			that = this;
++
++		this.element.addClass("ui-selectable");
++
++		this.dragged = false;
++
++		// cache selectee children based on filter
++		this.refresh = function() {
++			selectees = $(that.options.filter, that.element[0]);
++			selectees.addClass("ui-selectee");
++			selectees.each(function() {
++				var $this = $(this),
++					pos = $this.offset();
++				$.data(this, "selectable-item", {
++					element: this,
++					$element: $this,
++					left: pos.left,
++					top: pos.top,
++					right: pos.left + $this.outerWidth(),
++					bottom: pos.top + $this.outerHeight(),
++					startselected: false,
++					selected: $this.hasClass("ui-selected"),
++					selecting: $this.hasClass("ui-selecting"),
++					unselecting: $this.hasClass("ui-unselecting")
++				});
++			});
++		};
++		this.refresh();
++
++		this.selectees = selectees.addClass("ui-selectee");
++
++		this._mouseInit();
++
++		this.helper = $("<div class='ui-selectable-helper'></div>");
++	},
++
++	_destroy: function() {
++		this.selectees
++			.removeClass("ui-selectee")
++			.removeData("selectable-item");
++		this.element
++			.removeClass("ui-selectable ui-selectable-disabled");
++		this._mouseDestroy();
++	},
++
++	_mouseStart: function(event) {
++		var that = this,
++			options = this.options;
++
++		this.opos = [event.pageX, event.pageY];
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		this.selectees = $(options.filter, this.element[0]);
++
++		this._trigger("start", event);
++
++		$(options.appendTo).append(this.helper);
++		// position helper (lasso)
++		this.helper.css({
++			"left": event.pageX,
++			"top": event.pageY,
++			"width": 0,
++			"height": 0
++		});
++
++		if (options.autoRefresh) {
++			this.refresh();
++		}
++
++		this.selectees.filter(".ui-selected").each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.startselected = true;
++			if (!event.metaKey && !event.ctrlKey) {
++				selectee.$element.removeClass("ui-selected");
++				selectee.selected = false;
++				selectee.$element.addClass("ui-unselecting");
++				selectee.unselecting = true;
++				// selectable UNSELECTING callback
++				that._trigger("unselecting", event, {
++					unselecting: selectee.element
++				});
++			}
++		});
++
++		$(event.target).parents().addBack().each(function() {
++			var doSelect,
++				selectee = $.data(this, "selectable-item");
++			if (selectee) {
++				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
++				selectee.$element
++					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
++					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
++				selectee.unselecting = !doSelect;
++				selectee.selecting = doSelect;
++				selectee.selected = doSelect;
++				// selectable (UN)SELECTING callback
++				if (doSelect) {
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				} else {
++					that._trigger("unselecting", event, {
++						unselecting: selectee.element
++					});
++				}
++				return false;
++			}
++		});
++
++	},
++
++	_mouseDrag: function(event) {
++
++		this.dragged = true;
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		var tmp,
++			that = this,
++			options = this.options,
++			x1 = this.opos[0],
++			y1 = this.opos[1],
++			x2 = event.pageX,
++			y2 = event.pageY;
++
++		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
++		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
++		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
++
++		this.selectees.each(function() {
++			var selectee = $.data(this, "selectable-item"),
++				hit = false;
++
++			//prevent helper from being selected if appendTo: selectable
++			if (!selectee || selectee.element === that.element[0]) {
++				return;
++			}
++
++			if (options.tolerance === "touch") {
++				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
++			} else if (options.tolerance === "fit") {
++				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
++			}
++
++			if (hit) {
++				// SELECT
++				if (selectee.selected) {
++					selectee.$element.removeClass("ui-selected");
++					selectee.selected = false;
++				}
++				if (selectee.unselecting) {
++					selectee.$element.removeClass("ui-unselecting");
++					selectee.unselecting = false;
++				}
++				if (!selectee.selecting) {
++					selectee.$element.addClass("ui-selecting");
++					selectee.selecting = true;
++					// selectable SELECTING callback
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				}
++			} else {
++				// UNSELECT
++				if (selectee.selecting) {
++					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						selectee.$element.addClass("ui-selected");
++						selectee.selected = true;
++					} else {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						if (selectee.startselected) {
++							selectee.$element.addClass("ui-unselecting");
++							selectee.unselecting = true;
++						}
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++				if (selectee.selected) {
++					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
++						selectee.$element.removeClass("ui-selected");
++						selectee.selected = false;
++
++						selectee.$element.addClass("ui-unselecting");
++						selectee.unselecting = true;
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++			}
++		});
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++		var that = this;
++
++		this.dragged = false;
++
++		$(".ui-unselecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-unselecting");
++			selectee.unselecting = false;
++			selectee.startselected = false;
++			that._trigger("unselected", event, {
++				unselected: selectee.element
++			});
++		});
++		$(".ui-selecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
++			selectee.selecting = false;
++			selectee.selected = true;
++			selectee.startselected = true;
++			that._trigger("selected", event, {
++				selected: selectee.element
++			});
++		});
++		this._trigger("stop", event);
++
++		this.helper.remove();
++
++		return false;
++	}
++
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.menu.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.menu.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.menu.js	(revision 15487)
+@@ -0,0 +1,621 @@
++/*!
++ * jQuery UI Menu 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/menu/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.position.js
++ */
++(function( $, undefined ) {
++
++$.widget( "ui.menu", {
++	version: "1.10.3",
++	defaultElement: "<ul>",
++	delay: 300,
++	options: {
++		icons: {
++			submenu: "ui-icon-carat-1-e"
++		},
++		menus: "ul",
++		position: {
++			my: "left top",
++			at: "right top"
++		},
++		role: "menu",
++
++		// callbacks
++		blur: null,
++		focus: null,
++		select: null
++	},
++
++	_create: function() {
++		this.activeMenu = this.element;
++		// flag used to prevent firing of the click handler
++		// as the event bubbles up through nested menus
++		this.mouseHandled = false;
++		this.element
++			.uniqueId()
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
++			.attr({
++				role: this.options.role,
++				tabIndex: 0
++			})
++			// need to catch all clicks on disabled menu
++			// not possible through _on
++			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
++				if ( this.options.disabled ) {
++					event.preventDefault();
++				}
++			}, this ));
++
++		if ( this.options.disabled ) {
++			this.element
++				.addClass( "ui-state-disabled" )
++				.attr( "aria-disabled", "true" );
++		}
++
++		this._on({
++			// Prevent focus from sticking to links inside menu after clicking
++			// them (focus should always stay on UL during navigation).
++			"mousedown .ui-menu-item > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-state-disabled > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-menu-item:has(a)": function( event ) {
++				var target = $( event.target ).closest( ".ui-menu-item" );
++				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
++					this.mouseHandled = true;
++
++					this.select( event );
++					// Open submenu on click
++					if ( target.has( ".ui-menu" ).length ) {
++						this.expand( event );
++					} else if ( !this.element.is( ":focus" ) ) {
++						// Redirect focus to the menu
++						this.element.trigger( "focus", [ true ] );
++
++						// If the active item is on the top level, let it stay active.
++						// Otherwise, blur the active item since it is no longer visible.
++						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
++							clearTimeout( this.timer );
++						}
++					}
++				}
++			},
++			"mouseenter .ui-menu-item": function( event ) {
++				var target = $( event.currentTarget );
++				// Remove ui-state-active class from siblings of the newly focused menu item
++				// to avoid a jump caused by adjacent elements both having a class with a border
++				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
++				this.focus( event, target );
++			},
++			mouseleave: "collapseAll",
++			"mouseleave .ui-menu": "collapseAll",
++			focus: function( event, keepActiveItem ) {
++				// If there's already an active item, keep it active
++				// If not, activate the first item
++				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
++
++				if ( !keepActiveItem ) {
++					this.focus( event, item );
++				}
++			},
++			blur: function( event ) {
++				this._delay(function() {
++					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
++						this.collapseAll( event );
++					}
++				});
++			},
++			keydown: "_keydown"
++		});
++
++		this.refresh();
++
++		// Clicks outside of a menu collapse any open menus
++		this._on( this.document, {
++			click: function( event ) {
++				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
++					this.collapseAll( event );
++				}
++
++				// Reset the mouseHandled flag
++				this.mouseHandled = false;
++			}
++		});
++	},
++
++	_destroy: function() {
++		// Destroy (sub)menus
++		this.element
++			.removeAttr( "aria-activedescendant" )
++			.find( ".ui-menu" ).addBack()
++				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
++				.removeAttr( "role" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "aria-labelledby" )
++				.removeAttr( "aria-expanded" )
++				.removeAttr( "aria-hidden" )
++				.removeAttr( "aria-disabled" )
++				.removeUniqueId()
++				.show();
++
++		// Destroy menu items
++		this.element.find( ".ui-menu-item" )
++			.removeClass( "ui-menu-item" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-disabled" )
++			.children( "a" )
++				.removeUniqueId()
++				.removeClass( "ui-corner-all ui-state-hover" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "role" )
++				.removeAttr( "aria-haspopup" )
++				.children().each( function() {
++					var elem = $( this );
++					if ( elem.data( "ui-menu-submenu-carat" ) ) {
++						elem.remove();
++					}
++				});
++
++		// Destroy menu dividers
++		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:20*/
++		var match, prev, character, skip, regex,
++			preventDefault = true;
++
++		function escape( value ) {
++			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
++		}
++
++		switch ( event.keyCode ) {
++		case $.ui.keyCode.PAGE_UP:
++			this.previousPage( event );
++			break;
++		case $.ui.keyCode.PAGE_DOWN:
++			this.nextPage( event );
++			break;
++		case $.ui.keyCode.HOME:
++			this._move( "first", "first", event );
++			break;
++		case $.ui.keyCode.END:
++			this._move( "last", "last", event );
++			break;
++		case $.ui.keyCode.UP:
++			this.previous( event );
++			break;
++		case $.ui.keyCode.DOWN:
++			this.next( event );
++			break;
++		case $.ui.keyCode.LEFT:
++			this.collapse( event );
++			break;
++		case $.ui.keyCode.RIGHT:
++			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
++				this.expand( event );
++			}
++			break;
++		case $.ui.keyCode.ENTER:
++		case $.ui.keyCode.SPACE:
++			this._activate( event );
++			break;
++		case $.ui.keyCode.ESCAPE:
++			this.collapse( event );
++			break;
++		default:
++			preventDefault = false;
++			prev = this.previousFilter || "";
++			character = String.fromCharCode( event.keyCode );
++			skip = false;
++
++			clearTimeout( this.filterTimer );
++
++			if ( character === prev ) {
++				skip = true;
++			} else {
++				character = prev + character;
++			}
++
++			regex = new RegExp( "^" + escape( character ), "i" );
++			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++				return regex.test( $( this ).children( "a" ).text() );
++			});
++			match = skip && match.index( this.active.next() ) !== -1 ?
++				this.active.nextAll( ".ui-menu-item" ) :
++				match;
++
++			// If no matches on the current filter, reset to the last character pressed
++			// to move down the menu to the first item that starts with that character
++			if ( !match.length ) {
++				character = String.fromCharCode( event.keyCode );
++				regex = new RegExp( "^" + escape( character ), "i" );
++				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++					return regex.test( $( this ).children( "a" ).text() );
++				});
++			}
++
++			if ( match.length ) {
++				this.focus( event, match );
++				if ( match.length > 1 ) {
++					this.previousFilter = character;
++					this.filterTimer = this._delay(function() {
++						delete this.previousFilter;
++					}, 1000 );
++				} else {
++					delete this.previousFilter;
++				}
++			} else {
++				delete this.previousFilter;
++			}
++		}
++
++		if ( preventDefault ) {
++			event.preventDefault();
++		}
++	},
++
++	_activate: function( event ) {
++		if ( !this.active.is( ".ui-state-disabled" ) ) {
++			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
++				this.expand( event );
++			} else {
++				this.select( event );
++			}
++		}
++	},
++
++	refresh: function() {
++		var menus,
++			icon = this.options.icons.submenu,
++			submenus = this.element.find( this.options.menus );
++
++		// Initialize nested menus
++		submenus.filter( ":not(.ui-menu)" )
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.hide()
++			.attr({
++				role: this.options.role,
++				"aria-hidden": "true",
++				"aria-expanded": "false"
++			})
++			.each(function() {
++				var menu = $( this ),
++					item = menu.prev( "a" ),
++					submenuCarat = $( "<span>" )
++						.addClass( "ui-menu-icon ui-icon " + icon )
++						.data( "ui-menu-submenu-carat", true );
++
++				item
++					.attr( "aria-haspopup", "true" )
++					.prepend( submenuCarat );
++				menu.attr( "aria-labelledby", item.attr( "id" ) );
++			});
++
++		menus = submenus.add( this.element );
++
++		// Don't refresh list items that are already adapted
++		menus.children( ":not(.ui-menu-item):has(a)" )
++			.addClass( "ui-menu-item" )
++			.attr( "role", "presentation" )
++			.children( "a" )
++				.uniqueId()
++				.addClass( "ui-corner-all" )
++				.attr({
++					tabIndex: -1,
++					role: this._itemRole()
++				});
++
++		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
++		menus.children( ":not(.ui-menu-item)" ).each(function() {
++			var item = $( this );
++			// hyphen, em dash, en dash
++			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
++				item.addClass( "ui-widget-content ui-menu-divider" );
++			}
++		});
++
++		// Add aria-disabled attribute to any disabled menu item
++		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
++
++		// If the active item has been removed, blur the menu
++		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			this.blur();
++		}
++	},
++
++	_itemRole: function() {
++		return {
++			menu: "menuitem",
++			listbox: "option"
++		}[ this.options.role ];
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "icons" ) {
++			this.element.find( ".ui-menu-icon" )
++				.removeClass( this.options.icons.submenu )
++				.addClass( value.submenu );
++		}
++		this._super( key, value );
++	},
++
++	focus: function( event, item ) {
++		var nested, focused;
++		this.blur( event, event && event.type === "focus" );
++
++		this._scrollIntoView( item );
++
++		this.active = item.first();
++		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
++		// Only update aria-activedescendant if there's a role
++		// otherwise we assume focus is managed elsewhere
++		if ( this.options.role ) {
++			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
++		}
++
++		// Highlight active parent menu item, if any
++		this.active
++			.parent()
++			.closest( ".ui-menu-item" )
++			.children( "a:first" )
++			.addClass( "ui-state-active" );
++
++		if ( event && event.type === "keydown" ) {
++			this._close();
++		} else {
++			this.timer = this._delay(function() {
++				this._close();
++			}, this.delay );
++		}
++
++		nested = item.children( ".ui-menu" );
++		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
++			this._startOpening(nested);
++		}
++		this.activeMenu = item.parent();
++
++		this._trigger( "focus", event, { item: item } );
++	},
++
++	_scrollIntoView: function( item ) {
++		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
++		if ( this._hasScroll() ) {
++			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
++			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
++			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
++			scroll = this.activeMenu.scrollTop();
++			elementHeight = this.activeMenu.height();
++			itemHeight = item.height();
++
++			if ( offset < 0 ) {
++				this.activeMenu.scrollTop( scroll + offset );
++			} else if ( offset + itemHeight > elementHeight ) {
++				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
++			}
++		}
++	},
++
++	blur: function( event, fromFocus ) {
++		if ( !fromFocus ) {
++			clearTimeout( this.timer );
++		}
++
++		if ( !this.active ) {
++			return;
++		}
++
++		this.active.children( "a" ).removeClass( "ui-state-focus" );
++		this.active = null;
++
++		this._trigger( "blur", event, { item: this.active } );
++	},
++
++	_startOpening: function( submenu ) {
++		clearTimeout( this.timer );
++
++		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
++		// shift in the submenu position when mousing over the carat icon
++		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
++			return;
++		}
++
++		this.timer = this._delay(function() {
++			this._close();
++			this._open( submenu );
++		}, this.delay );
++	},
++
++	_open: function( submenu ) {
++		var position = $.extend({
++			of: this.active
++		}, this.options.position );
++
++		clearTimeout( this.timer );
++		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
++			.hide()
++			.attr( "aria-hidden", "true" );
++
++		submenu
++			.show()
++			.removeAttr( "aria-hidden" )
++			.attr( "aria-expanded", "true" )
++			.position( position );
++	},
++
++	collapseAll: function( event, all ) {
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			// If we were passed an event, look for the submenu that contains the event
++			var currentMenu = all ? this.element :
++				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
++
++			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
++			if ( !currentMenu.length ) {
++				currentMenu = this.element;
++			}
++
++			this._close( currentMenu );
++
++			this.blur( event );
++			this.activeMenu = currentMenu;
++		}, this.delay );
++	},
++
++	// With no arguments, closes the currently active menu - if nothing is active
++	// it closes all menus.  If passed an argument, it will search for menus BELOW
++	_close: function( startMenu ) {
++		if ( !startMenu ) {
++			startMenu = this.active ? this.active.parent() : this.element;
++		}
++
++		startMenu
++			.find( ".ui-menu" )
++				.hide()
++				.attr( "aria-hidden", "true" )
++				.attr( "aria-expanded", "false" )
++			.end()
++			.find( "a.ui-state-active" )
++				.removeClass( "ui-state-active" );
++	},
++
++	collapse: function( event ) {
++		var newItem = this.active &&
++			this.active.parent().closest( ".ui-menu-item", this.element );
++		if ( newItem && newItem.length ) {
++			this._close();
++			this.focus( event, newItem );
++		}
++	},
++
++	expand: function( event ) {
++		var newItem = this.active &&
++			this.active
++				.children( ".ui-menu " )
++				.children( ".ui-menu-item" )
++				.first();
++
++		if ( newItem && newItem.length ) {
++			this._open( newItem.parent() );
++
++			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
++			this._delay(function() {
++				this.focus( event, newItem );
++			});
++		}
++	},
++
++	next: function( event ) {
++		this._move( "next", "first", event );
++	},
++
++	previous: function( event ) {
++		this._move( "prev", "last", event );
++	},
++
++	isFirstItem: function() {
++		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
++	},
++
++	isLastItem: function() {
++		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
++	},
++
++	_move: function( direction, filter, event ) {
++		var next;
++		if ( this.active ) {
++			if ( direction === "first" || direction === "last" ) {
++				next = this.active
++					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
++					.eq( -1 );
++			} else {
++				next = this.active
++					[ direction + "All" ]( ".ui-menu-item" )
++					.eq( 0 );
++			}
++		}
++		if ( !next || !next.length || !this.active ) {
++			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
++		}
++
++		this.focus( event, next );
++	},
++
++	nextPage: function( event ) {
++		var item, base, height;
++
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isLastItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.nextAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base - height < 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
++				[ !this.active ? "first" : "last" ]() );
++		}
++	},
++
++	previousPage: function( event ) {
++		var item, base, height;
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isFirstItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.prevAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base + height > 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
++		}
++	},
++
++	_hasScroll: function() {
++		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
++	},
++
++	select: function( event ) {
++		// TODO: It should never be possible to not have an active item at this
++		// point, but the tests don't trigger mouseenter before click.
++		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
++		var ui = { item: this.active };
++		if ( !this.active.has( ".ui-menu" ).length ) {
++			this.collapseAll( event, true );
++		}
++		this._trigger( "select", event, ui );
++	}
++});
++
++}( jQuery ));
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-bounce.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-bounce.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-bounce.js	(revision 15487)
+@@ -0,0 +1,113 @@
++/*!
++ * jQuery UI Effects Bounce 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/bounce-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.bounce = function( o, done ) {
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++
++		// defaults:
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		hide = mode === "hide",
++		show = mode === "show",
++		direction = o.direction || "up",
++		distance = o.distance,
++		times = o.times || 5,
++
++		// number of internal animations
++		anims = times * 2 + ( show || hide ? 1 : 0 ),
++		speed = o.duration / anims,
++		easing = o.easing,
++
++		// utility:
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ),
++		i,
++		upAnim,
++		downAnim,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	// Avoid touching opacity to prevent clearType and PNG issues in IE
++	if ( show || hide ) {
++		props.push( "opacity" );
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el ); // Create Wrapper
++
++	// default distance for the BIGGEST bounce is the outer Distance / 3
++	if ( !distance ) {
++		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
++	}
++
++	if ( show ) {
++		downAnim = { opacity: 1 };
++		downAnim[ ref ] = 0;
++
++		// if we are showing, force opacity 0 and set the initial position
++		// then do the "first" animation
++		el.css( "opacity", 0 )
++			.css( ref, motion ? -distance * 2 : distance * 2 )
++			.animate( downAnim, speed, easing );
++	}
++
++	// start at the smallest distance if we are hiding
++	if ( hide ) {
++		distance = distance / Math.pow( 2, times - 1 );
++	}
++
++	downAnim = {};
++	downAnim[ ref ] = 0;
++	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
++	for ( i = 0; i < times; i++ ) {
++		upAnim = {};
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing )
++			.animate( downAnim, speed, easing );
++
++		distance = hide ? distance * 2 : distance / 2;
++	}
++
++	// Last Bounce when Hiding
++	if ( hide ) {
++		upAnim = { opacity: 0 };
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing );
++	}
++
++	el.queue(function() {
++		if ( hide ) {
++			el.hide();
++		}
++		$.effects.restore( el, props );
++		$.effects.removeWrapper( el );
++		done();
++	});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.js	(revision 15487)
+@@ -0,0 +1,14971 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++(function( $, undefined ) {
++
++var uuid = 0,
++	runiqueId = /^ui-id-\d+$/;
++
++// $.ui might exist from components with no dependencies, e.g., $.ui.position
++$.ui = $.ui || {};
++
++$.extend( $.ui, {
++	version: "1.10.3",
++
++	keyCode: {
++		BACKSPACE: 8,
++		COMMA: 188,
++		DELETE: 46,
++		DOWN: 40,
++		END: 35,
++		ENTER: 13,
++		ESCAPE: 27,
++		HOME: 36,
++		LEFT: 37,
++		NUMPAD_ADD: 107,
++		NUMPAD_DECIMAL: 110,
++		NUMPAD_DIVIDE: 111,
++		NUMPAD_ENTER: 108,
++		NUMPAD_MULTIPLY: 106,
++		NUMPAD_SUBTRACT: 109,
++		PAGE_DOWN: 34,
++		PAGE_UP: 33,
++		PERIOD: 190,
++		RIGHT: 39,
++		SPACE: 32,
++		TAB: 9,
++		UP: 38
++	}
++});
++
++// plugins
++$.fn.extend({
++	focus: (function( orig ) {
++		return function( delay, fn ) {
++			return typeof delay === "number" ?
++				this.each(function() {
++					var elem = this;
++					setTimeout(function() {
++						$( elem ).focus();
++						if ( fn ) {
++							fn.call( elem );
++						}
++					}, delay );
++				}) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.focus ),
++
++	scrollParent: function() {
++		var scrollParent;
++		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
++			scrollParent = this.parents().filter(function() {
++				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		} else {
++			scrollParent = this.parents().filter(function() {
++				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		}
++
++		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
++	},
++
++	zIndex: function( zIndex ) {
++		if ( zIndex !== undefined ) {
++			return this.css( "zIndex", zIndex );
++		}
++
++		if ( this.length ) {
++			var elem = $( this[ 0 ] ), position, value;
++			while ( elem.length && elem[ 0 ] !== document ) {
++				// Ignore z-index if position is set to a value where z-index is ignored by the browser
++				// This makes behavior of this function consistent across browsers
++				// WebKit always returns auto if the element is positioned
++				position = elem.css( "position" );
++				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
++					// IE returns 0 when zIndex is not specified
++					// other browsers return a string
++					// we ignore the case of nested elements with an explicit value of 0
++					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
++					value = parseInt( elem.css( "zIndex" ), 10 );
++					if ( !isNaN( value ) && value !== 0 ) {
++						return value;
++					}
++				}
++				elem = elem.parent();
++			}
++		}
++
++		return 0;
++	},
++
++	uniqueId: function() {
++		return this.each(function() {
++			if ( !this.id ) {
++				this.id = "ui-id-" + (++uuid);
++			}
++		});
++	},
++
++	removeUniqueId: function() {
++		return this.each(function() {
++			if ( runiqueId.test( this.id ) ) {
++				$( this ).removeAttr( "id" );
++			}
++		});
++	}
++});
++
++// selectors
++function focusable( element, isTabIndexNotNaN ) {
++	var map, mapName, img,
++		nodeName = element.nodeName.toLowerCase();
++	if ( "area" === nodeName ) {
++		map = element.parentNode;
++		mapName = map.name;
++		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
++			return false;
++		}
++		img = $( "img[usemap=#" + mapName + "]" )[0];
++		return !!img && visible( img );
++	}
++	return ( /input|select|textarea|button|object/.test( nodeName ) ?
++		!element.disabled :
++		"a" === nodeName ?
++			element.href || isTabIndexNotNaN :
++			isTabIndexNotNaN) &&
++		// the element and all of its ancestors must be visible
++		visible( element );
++}
++
++function visible( element ) {
++	return $.expr.filters.visible( element ) &&
++		!$( element ).parents().addBack().filter(function() {
++			return $.css( this, "visibility" ) === "hidden";
++		}).length;
++}
++
++$.extend( $.expr[ ":" ], {
++	data: $.expr.createPseudo ?
++		$.expr.createPseudo(function( dataName ) {
++			return function( elem ) {
++				return !!$.data( elem, dataName );
++			};
++		}) :
++		// support: jQuery <1.8
++		function( elem, i, match ) {
++			return !!$.data( elem, match[ 3 ] );
++		},
++
++	focusable: function( element ) {
++		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
++	},
++
++	tabbable: function( element ) {
++		var tabIndex = $.attr( element, "tabindex" ),
++			isTabIndexNaN = isNaN( tabIndex );
++		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
++	}
++});
++
++// support: jQuery <1.8
++if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
++	$.each( [ "Width", "Height" ], function( i, name ) {
++		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
++			type = name.toLowerCase(),
++			orig = {
++				innerWidth: $.fn.innerWidth,
++				innerHeight: $.fn.innerHeight,
++				outerWidth: $.fn.outerWidth,
++				outerHeight: $.fn.outerHeight
++			};
++
++		function reduce( elem, size, border, margin ) {
++			$.each( side, function() {
++				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
++				if ( border ) {
++					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
++				}
++				if ( margin ) {
++					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
++				}
++			});
++			return size;
++		}
++
++		$.fn[ "inner" + name ] = function( size ) {
++			if ( size === undefined ) {
++				return orig[ "inner" + name ].call( this );
++			}
++
++			return this.each(function() {
++				$( this ).css( type, reduce( this, size ) + "px" );
++			});
++		};
++
++		$.fn[ "outer" + name] = function( size, margin ) {
++			if ( typeof size !== "number" ) {
++				return orig[ "outer" + name ].call( this, size );
++			}
++
++			return this.each(function() {
++				$( this).css( type, reduce( this, size, true, margin ) + "px" );
++			});
++		};
++	});
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
++if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
++	$.fn.removeData = (function( removeData ) {
++		return function( key ) {
++			if ( arguments.length ) {
++				return removeData.call( this, $.camelCase( key ) );
++			} else {
++				return removeData.call( this );
++			}
++		};
++	})( $.fn.removeData );
++}
++
++
++
++
++
++// deprecated
++$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
++
++$.support.selectstart = "onselectstart" in document.createElement( "div" );
++$.fn.extend({
++	disableSelection: function() {
++		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
++			".ui-disableSelection", function( event ) {
++				event.preventDefault();
++			});
++	},
++
++	enableSelection: function() {
++		return this.unbind( ".ui-disableSelection" );
++	}
++});
++
++$.extend( $.ui, {
++	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
++	plugin: {
++		add: function( module, option, set ) {
++			var i,
++				proto = $.ui[ module ].prototype;
++			for ( i in set ) {
++				proto.plugins[ i ] = proto.plugins[ i ] || [];
++				proto.plugins[ i ].push( [ option, set[ i ] ] );
++			}
++		},
++		call: function( instance, name, args ) {
++			var i,
++				set = instance.plugins[ name ];
++			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
++				return;
++			}
++
++			for ( i = 0; i < set.length; i++ ) {
++				if ( instance.options[ set[ i ][ 0 ] ] ) {
++					set[ i ][ 1 ].apply( instance.element, args );
++				}
++			}
++		}
++	},
++
++	// only used by resizable
++	hasScroll: function( el, a ) {
++
++		//If overflow is hidden, the element might have extra content, but the user wants to hide it
++		if ( $( el ).css( "overflow" ) === "hidden") {
++			return false;
++		}
++
++		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
++			has = false;
++
++		if ( el[ scroll ] > 0 ) {
++			return true;
++		}
++
++		// TODO: determine which cases actually cause this to happen
++		// if the element doesn't have the scroll set, see if it's possible to
++		// set the scroll
++		el[ scroll ] = 1;
++		has = ( el[ scroll ] > 0 );
++		el[ scroll ] = 0;
++		return has;
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++var uuid = 0,
++	slice = Array.prototype.slice,
++	_cleanData = $.cleanData;
++$.cleanData = function( elems ) {
++	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++		try {
++			$( elem ).triggerHandler( "remove" );
++		// http://bugs.jquery.com/ticket/8235
++		} catch( e ) {}
++	}
++	_cleanData( elems );
++};
++
++$.widget = function( name, base, prototype ) {
++	var fullName, existingConstructor, constructor, basePrototype,
++		// proxiedPrototype allows the provided prototype to remain unmodified
++		// so that it can be used as a mixin for multiple widgets (#8876)
++		proxiedPrototype = {},
++		namespace = name.split( "." )[ 0 ];
++
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
++		return !!$.data( elem, fullName );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	existingConstructor = $[ namespace ][ name ];
++	constructor = $[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without "new" keyword
++		if ( !this._createWidget ) {
++			return new constructor( options, element );
++		}
++
++		// allow instantiation without initializing for simple inheritance
++		// must use "new" keyword (the code above always passes args)
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++	// extend with the existing constructor to carry over any static properties
++	$.extend( constructor, existingConstructor, {
++		version: prototype.version,
++		// copy the object used to create the prototype in case we need to
++		// redefine the widget later
++		_proto: $.extend( {}, prototype ),
++		// track widgets that inherit from this widget in case this widget is
++		// redefined after a widget inherits from it
++		_childConstructors: []
++	});
++
++	basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++	basePrototype.options = $.widget.extend( {}, basePrototype.options );
++	$.each( prototype, function( prop, value ) {
++		if ( !$.isFunction( value ) ) {
++			proxiedPrototype[ prop ] = value;
++			return;
++		}
++		proxiedPrototype[ prop ] = (function() {
++			var _super = function() {
++					return base.prototype[ prop ].apply( this, arguments );
++				},
++				_superApply = function( args ) {
++					return base.prototype[ prop ].apply( this, args );
++				};
++			return function() {
++				var __super = this._super,
++					__superApply = this._superApply,
++					returnValue;
++
++				this._super = _super;
++				this._superApply = _superApply;
++
++				returnValue = value.apply( this, arguments );
++
++				this._super = __super;
++				this._superApply = __superApply;
++
++				return returnValue;
++			};
++		})();
++	});
++	constructor.prototype = $.widget.extend( basePrototype, {
++		// TODO: remove support for widgetEventPrefix
++		// always use the name + a colon as the prefix, e.g., draggable:start
++		// don't prefix for widgets that aren't DOM-based
++		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
++	}, proxiedPrototype, {
++		constructor: constructor,
++		namespace: namespace,
++		widgetName: name,
++		widgetFullName: fullName
++	});
++
++	// If this widget is being redefined then we need to find all widgets that
++	// are inheriting from it and redefine all of them so that they inherit from
++	// the new version of this widget. We're essentially trying to replace one
++	// level in the prototype chain.
++	if ( existingConstructor ) {
++		$.each( existingConstructor._childConstructors, function( i, child ) {
++			var childPrototype = child.prototype;
++
++			// redefine the child widget using the same prototype that was
++			// originally used, but inherit from the new version of the base
++			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
++		});
++		// remove the list of existing child constructors from the old constructor
++		// so the old child constructors can be garbage collected
++		delete existingConstructor._childConstructors;
++	} else {
++		base._childConstructors.push( constructor );
++	}
++
++	$.widget.bridge( name, constructor );
++};
++
++$.widget.extend = function( target ) {
++	var input = slice.call( arguments, 1 ),
++		inputIndex = 0,
++		inputLength = input.length,
++		key,
++		value;
++	for ( ; inputIndex < inputLength; inputIndex++ ) {
++		for ( key in input[ inputIndex ] ) {
++			value = input[ inputIndex ][ key ];
++			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
++				// Clone objects
++				if ( $.isPlainObject( value ) ) {
++					target[ key ] = $.isPlainObject( target[ key ] ) ?
++						$.widget.extend( {}, target[ key ], value ) :
++						// Don't extend strings, arrays, etc. with objects
++						$.widget.extend( {}, value );
++				// Copy everything else by reference
++				} else {
++					target[ key ] = value;
++				}
++			}
++		}
++	}
++	return target;
++};
++
++$.widget.bridge = function( name, object ) {
++	var fullName = object.prototype.widgetFullName || name;
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.widget.extend.apply( null, [ options ].concat(args) ) :
++			options;
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var methodValue,
++					instance = $.data( this, fullName );
++				if ( !instance ) {
++					return $.error( "cannot call methods on " + name + " prior to initialization; " +
++						"attempted to call method '" + options + "'" );
++				}
++				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
++					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
++				}
++				methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue && methodValue.jquery ?
++						returnValue.pushStack( methodValue.get() ) :
++						methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, fullName );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					$.data( this, fullName, new object( options, this ) );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( /* options, element */ ) {};
++$.Widget._childConstructors = [];
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	defaultElement: "<div>",
++	options: {
++		disabled: false,
++
++		// callbacks
++		create: null
++	},
++	_createWidget: function( options, element ) {
++		element = $( element || this.defaultElement || this )[ 0 ];
++		this.element = $( element );
++		this.uuid = uuid++;
++		this.eventNamespace = "." + this.widgetName + this.uuid;
++		this.options = $.widget.extend( {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		this.bindings = $();
++		this.hoverable = $();
++		this.focusable = $();
++
++		if ( element !== this ) {
++			$.data( element, this.widgetFullName, this );
++			this._on( true, this.element, {
++				remove: function( event ) {
++					if ( event.target === element ) {
++						this.destroy();
++					}
++				}
++			});
++			this.document = $( element.style ?
++				// element within the document
++				element.ownerDocument :
++				// element is window or document
++				element.document || element );
++			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
++		}
++
++		this._create();
++		this._trigger( "create", null, this._getCreateEventData() );
++		this._init();
++	},
++	_getCreateOptions: $.noop,
++	_getCreateEventData: $.noop,
++	_create: $.noop,
++	_init: $.noop,
++
++	destroy: function() {
++		this._destroy();
++		// we can probably remove the unbind calls in 2.0
++		// all event bindings should go through this._on()
++		this.element
++			.unbind( this.eventNamespace )
++			// 1.9 BC for #7810
++			// TODO remove dual storage
++			.removeData( this.widgetName )
++			.removeData( this.widgetFullName )
++			// support: jquery <1.6.3
++			// http://bugs.jquery.com/ticket/9413
++			.removeData( $.camelCase( this.widgetFullName ) );
++		this.widget()
++			.unbind( this.eventNamespace )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetFullName + "-disabled " +
++				"ui-state-disabled" );
++
++		// clean up events and states
++		this.bindings.unbind( this.eventNamespace );
++		this.hoverable.removeClass( "ui-state-hover" );
++		this.focusable.removeClass( "ui-state-focus" );
++	},
++	_destroy: $.noop,
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key,
++			parts,
++			curOption,
++			i;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.widget.extend( {}, this.options );
++		}
++
++		if ( typeof key === "string" ) {
++			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
++			options = {};
++			parts = key.split( "." );
++			key = parts.shift();
++			if ( parts.length ) {
++				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
++				for ( i = 0; i < parts.length - 1; i++ ) {
++					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
++					curOption = curOption[ parts[ i ] ];
++				}
++				key = parts.pop();
++				if ( value === undefined ) {
++					return curOption[ key ] === undefined ? null : curOption[ key ];
++				}
++				curOption[ key ] = value;
++			} else {
++				if ( value === undefined ) {
++					return this.options[ key ] === undefined ? null : this.options[ key ];
++				}
++				options[ key ] = value;
++			}
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var key;
++
++		for ( key in options ) {
++			this._setOption( key, options[ key ] );
++		}
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
++				.attr( "aria-disabled", value );
++			this.hoverable.removeClass( "ui-state-hover" );
++			this.focusable.removeClass( "ui-state-focus" );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_on: function( suppressDisabledCheck, element, handlers ) {
++		var delegateElement,
++			instance = this;
++
++		// no suppressDisabledCheck flag, shuffle arguments
++		if ( typeof suppressDisabledCheck !== "boolean" ) {
++			handlers = element;
++			element = suppressDisabledCheck;
++			suppressDisabledCheck = false;
++		}
++
++		// no element argument, shuffle and use this.element
++		if ( !handlers ) {
++			handlers = element;
++			element = this.element;
++			delegateElement = this.widget();
++		} else {
++			// accept selectors, DOM elements
++			element = delegateElement = $( element );
++			this.bindings = this.bindings.add( element );
++		}
++
++		$.each( handlers, function( event, handler ) {
++			function handlerProxy() {
++				// allow widgets to customize the disabled handling
++				// - disabled as an array instead of boolean
++				// - disabled class as method for disabling individual parts
++				if ( !suppressDisabledCheck &&
++						( instance.options.disabled === true ||
++							$( this ).hasClass( "ui-state-disabled" ) ) ) {
++					return;
++				}
++				return ( typeof handler === "string" ? instance[ handler ] : handler )
++					.apply( instance, arguments );
++			}
++
++			// copy the guid so direct unbinding works
++			if ( typeof handler !== "string" ) {
++				handlerProxy.guid = handler.guid =
++					handler.guid || handlerProxy.guid || $.guid++;
++			}
++
++			var match = event.match( /^(\w+)\s*(.*)$/ ),
++				eventName = match[1] + instance.eventNamespace,
++				selector = match[2];
++			if ( selector ) {
++				delegateElement.delegate( selector, eventName, handlerProxy );
++			} else {
++				element.bind( eventName, handlerProxy );
++			}
++		});
++	},
++
++	_off: function( element, eventName ) {
++		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
++		element.unbind( eventName ).undelegate( eventName );
++	},
++
++	_delay: function( handler, delay ) {
++		function handlerProxy() {
++			return ( typeof handler === "string" ? instance[ handler ] : handler )
++				.apply( instance, arguments );
++		}
++		var instance = this;
++		return setTimeout( handlerProxy, delay || 0 );
++	},
++
++	_hoverable: function( element ) {
++		this.hoverable = this.hoverable.add( element );
++		this._on( element, {
++			mouseenter: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-hover" );
++			},
++			mouseleave: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-hover" );
++			}
++		});
++	},
++
++	_focusable: function( element ) {
++		this.focusable = this.focusable.add( element );
++		this._on( element, {
++			focusin: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-focus" );
++			},
++			focusout: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-focus" );
++			}
++		});
++	},
++
++	_trigger: function( type, event, data ) {
++		var prop, orig,
++			callback = this.options[ type ];
++
++		data = data || {};
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		// the original event may come from any element
++		// so we need to reset the target on the new event
++		event.target = this.element[ 0 ];
++
++		// copy original event properties over to the new event
++		orig = event.originalEvent;
++		if ( orig ) {
++			for ( prop in orig ) {
++				if ( !( prop in event ) ) {
++					event[ prop ] = orig[ prop ];
++				}
++			}
++		}
++
++		this.element.trigger( event, data );
++		return !( $.isFunction( callback ) &&
++			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
++	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
++		if ( typeof options === "string" ) {
++			options = { effect: options };
++		}
++		var hasOptions,
++			effectName = !options ?
++				method :
++				options === true || typeof options === "number" ?
++					defaultEffect :
++					options.effect || defaultEffect;
++		options = options || {};
++		if ( typeof options === "number" ) {
++			options = { duration: options };
++		}
++		hasOptions = !$.isEmptyObject( options );
++		options.complete = callback;
++		if ( options.delay ) {
++			element.delay( options.delay );
++		}
++		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
++			element[ method ]( options );
++		} else if ( effectName !== method && element[ effectName ] ) {
++			element[ effectName ]( options.duration, options.easing, callback );
++		} else {
++			element.queue(function( next ) {
++				$( this )[ method ]();
++				if ( callback ) {
++					callback.call( element[ 0 ] );
++				}
++				next();
++			});
++		}
++	};
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++var mouseHandled = false;
++$( document ).mouseup( function() {
++	mouseHandled = false;
++});
++
++$.widget("ui.mouse", {
++	version: "1.10.3",
++	options: {
++		cancel: "input,textarea,button,select,option",
++		distance: 1,
++		delay: 0
++	},
++	_mouseInit: function() {
++		var that = this;
++
++		this.element
++			.bind("mousedown."+this.widgetName, function(event) {
++				return that._mouseDown(event);
++			})
++			.bind("click."+this.widgetName, function(event) {
++				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
++					$.removeData(event.target, that.widgetName + ".preventClickEvent");
++					event.stopImmediatePropagation();
++					return false;
++				}
++			});
++
++		this.started = false;
++	},
++
++	// TODO: make sure destroying one instance of mouse doesn't mess with
++	// other instances of mouse
++	_mouseDestroy: function() {
++		this.element.unbind("."+this.widgetName);
++		if ( this._mouseMoveDelegate ) {
++			$(document)
++				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++		}
++	},
++
++	_mouseDown: function(event) {
++		// don't let more than one widget handle mouseStart
++		if( mouseHandled ) { return; }
++
++		// we may have missed mouseup (out of window)
++		(this._mouseStarted && this._mouseUp(event));
++
++		this._mouseDownEvent = event;
++
++		var that = this,
++			btnIsLeft = (event.which === 1),
++			// event.target.nodeName works around a bug in IE 8 with
++			// disabled inputs (#7620)
++			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
++		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
++			return true;
++		}
++
++		this.mouseDelayMet = !this.options.delay;
++		if (!this.mouseDelayMet) {
++			this._mouseDelayTimer = setTimeout(function() {
++				that.mouseDelayMet = true;
++			}, this.options.delay);
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted = (this._mouseStart(event) !== false);
++			if (!this._mouseStarted) {
++				event.preventDefault();
++				return true;
++			}
++		}
++
++		// Click event may never have fired (Gecko & Opera)
++		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
++			$.removeData(event.target, this.widgetName + ".preventClickEvent");
++		}
++
++		// these delegates are required to keep context
++		this._mouseMoveDelegate = function(event) {
++			return that._mouseMove(event);
++		};
++		this._mouseUpDelegate = function(event) {
++			return that._mouseUp(event);
++		};
++		$(document)
++			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		event.preventDefault();
++
++		mouseHandled = true;
++		return true;
++	},
++
++	_mouseMove: function(event) {
++		// IE mouseup check - mouseup happened when mouse was out of window
++		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
++			return this._mouseUp(event);
++		}
++
++		if (this._mouseStarted) {
++			this._mouseDrag(event);
++			return event.preventDefault();
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted =
++				(this._mouseStart(this._mouseDownEvent, event) !== false);
++			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
++		}
++
++		return !this._mouseStarted;
++	},
++
++	_mouseUp: function(event) {
++		$(document)
++			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		if (this._mouseStarted) {
++			this._mouseStarted = false;
++
++			if (event.target === this._mouseDownEvent.target) {
++				$.data(event.target, this.widgetName + ".preventClickEvent", true);
++			}
++
++			this._mouseStop(event);
++		}
++
++		return false;
++	},
++
++	_mouseDistanceMet: function(event) {
++		return (Math.max(
++				Math.abs(this._mouseDownEvent.pageX - event.pageX),
++				Math.abs(this._mouseDownEvent.pageY - event.pageY)
++			) >= this.options.distance
++		);
++	},
++
++	_mouseDelayMet: function(/* event */) {
++		return this.mouseDelayMet;
++	},
++
++	// These are placeholder methods, to be overriden by extending plugin
++	_mouseStart: function(/* event */) {},
++	_mouseDrag: function(/* event */) {},
++	_mouseStop: function(/* event */) {},
++	_mouseCapture: function(/* event */) { return true; }
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.ui = $.ui || {};
++
++var cachedScrollbarWidth,
++	max = Math.max,
++	abs = Math.abs,
++	round = Math.round,
++	rhorizontal = /left|center|right/,
++	rvertical = /top|center|bottom/,
++	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
++	rposition = /^\w+/,
++	rpercent = /%$/,
++	_position = $.fn.position;
++
++function getOffsets( offsets, width, height ) {
++	return [
++		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
++		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
++	];
++}
++
++function parseCss( element, property ) {
++	return parseInt( $.css( element, property ), 10 ) || 0;
++}
++
++function getDimensions( elem ) {
++	var raw = elem[0];
++	if ( raw.nodeType === 9 ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: 0, left: 0 }
++		};
++	}
++	if ( $.isWindow( raw ) ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
++		};
++	}
++	if ( raw.preventDefault ) {
++		return {
++			width: 0,
++			height: 0,
++			offset: { top: raw.pageY, left: raw.pageX }
++		};
++	}
++	return {
++		width: elem.outerWidth(),
++		height: elem.outerHeight(),
++		offset: elem.offset()
++	};
++}
++
++$.position = {
++	scrollbarWidth: function() {
++		if ( cachedScrollbarWidth !== undefined ) {
++			return cachedScrollbarWidth;
++		}
++		var w1, w2,
++			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
++			innerDiv = div.children()[0];
++
++		$( "body" ).append( div );
++		w1 = innerDiv.offsetWidth;
++		div.css( "overflow", "scroll" );
++
++		w2 = innerDiv.offsetWidth;
++
++		if ( w1 === w2 ) {
++			w2 = div[0].clientWidth;
++		}
++
++		div.remove();
++
++		return (cachedScrollbarWidth = w1 - w2);
++	},
++	getScrollInfo: function( within ) {
++		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
++			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
++			hasOverflowX = overflowX === "scroll" ||
++				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
++			hasOverflowY = overflowY === "scroll" ||
++				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
++		return {
++			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
++			height: hasOverflowX ? $.position.scrollbarWidth() : 0
++		};
++	},
++	getWithinInfo: function( element ) {
++		var withinElement = $( element || window ),
++			isWindow = $.isWindow( withinElement[0] );
++		return {
++			element: withinElement,
++			isWindow: isWindow,
++			offset: withinElement.offset() || { left: 0, top: 0 },
++			scrollLeft: withinElement.scrollLeft(),
++			scrollTop: withinElement.scrollTop(),
++			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
++			height: isWindow ? withinElement.height() : withinElement.outerHeight()
++		};
++	}
++};
++
++$.fn.position = function( options ) {
++	if ( !options || !options.of ) {
++		return _position.apply( this, arguments );
++	}
++
++	// make a copy, we don't want to modify arguments
++	options = $.extend( {}, options );
++
++	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
++		target = $( options.of ),
++		within = $.position.getWithinInfo( options.within ),
++		scrollInfo = $.position.getScrollInfo( within ),
++		collision = ( options.collision || "flip" ).split( " " ),
++		offsets = {};
++
++	dimensions = getDimensions( target );
++	if ( target[0].preventDefault ) {
++		// force left top to allow flipping
++		options.at = "left top";
++	}
++	targetWidth = dimensions.width;
++	targetHeight = dimensions.height;
++	targetOffset = dimensions.offset;
++	// clone to reuse original targetOffset later
++	basePosition = $.extend( {}, targetOffset );
++
++	// force my and at to have valid horizontal and vertical positions
++	// if a value is missing or invalid, it will be converted to center
++	$.each( [ "my", "at" ], function() {
++		var pos = ( options[ this ] || "" ).split( " " ),
++			horizontalOffset,
++			verticalOffset;
++
++		if ( pos.length === 1) {
++			pos = rhorizontal.test( pos[ 0 ] ) ?
++				pos.concat( [ "center" ] ) :
++				rvertical.test( pos[ 0 ] ) ?
++					[ "center" ].concat( pos ) :
++					[ "center", "center" ];
++		}
++		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
++		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
++
++		// calculate offsets
++		horizontalOffset = roffset.exec( pos[ 0 ] );
++		verticalOffset = roffset.exec( pos[ 1 ] );
++		offsets[ this ] = [
++			horizontalOffset ? horizontalOffset[ 0 ] : 0,
++			verticalOffset ? verticalOffset[ 0 ] : 0
++		];
++
++		// reduce to just the positions without the offsets
++		options[ this ] = [
++			rposition.exec( pos[ 0 ] )[ 0 ],
++			rposition.exec( pos[ 1 ] )[ 0 ]
++		];
++	});
++
++	// normalize collision option
++	if ( collision.length === 1 ) {
++		collision[ 1 ] = collision[ 0 ];
++	}
++
++	if ( options.at[ 0 ] === "right" ) {
++		basePosition.left += targetWidth;
++	} else if ( options.at[ 0 ] === "center" ) {
++		basePosition.left += targetWidth / 2;
++	}
++
++	if ( options.at[ 1 ] === "bottom" ) {
++		basePosition.top += targetHeight;
++	} else if ( options.at[ 1 ] === "center" ) {
++		basePosition.top += targetHeight / 2;
++	}
++
++	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
++	basePosition.left += atOffset[ 0 ];
++	basePosition.top += atOffset[ 1 ];
++
++	return this.each(function() {
++		var collisionPosition, using,
++			elem = $( this ),
++			elemWidth = elem.outerWidth(),
++			elemHeight = elem.outerHeight(),
++			marginLeft = parseCss( this, "marginLeft" ),
++			marginTop = parseCss( this, "marginTop" ),
++			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
++			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
++			position = $.extend( {}, basePosition ),
++			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
++
++		if ( options.my[ 0 ] === "right" ) {
++			position.left -= elemWidth;
++		} else if ( options.my[ 0 ] === "center" ) {
++			position.left -= elemWidth / 2;
++		}
++
++		if ( options.my[ 1 ] === "bottom" ) {
++			position.top -= elemHeight;
++		} else if ( options.my[ 1 ] === "center" ) {
++			position.top -= elemHeight / 2;
++		}
++
++		position.left += myOffset[ 0 ];
++		position.top += myOffset[ 1 ];
++
++		// if the browser doesn't support fractions, then round for consistent results
++		if ( !$.support.offsetFractions ) {
++			position.left = round( position.left );
++			position.top = round( position.top );
++		}
++
++		collisionPosition = {
++			marginLeft: marginLeft,
++			marginTop: marginTop
++		};
++
++		$.each( [ "left", "top" ], function( i, dir ) {
++			if ( $.ui.position[ collision[ i ] ] ) {
++				$.ui.position[ collision[ i ] ][ dir ]( position, {
++					targetWidth: targetWidth,
++					targetHeight: targetHeight,
++					elemWidth: elemWidth,
++					elemHeight: elemHeight,
++					collisionPosition: collisionPosition,
++					collisionWidth: collisionWidth,
++					collisionHeight: collisionHeight,
++					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
++					my: options.my,
++					at: options.at,
++					within: within,
++					elem : elem
++				});
++			}
++		});
++
++		if ( options.using ) {
++			// adds feedback as second argument to using callback, if present
++			using = function( props ) {
++				var left = targetOffset.left - position.left,
++					right = left + targetWidth - elemWidth,
++					top = targetOffset.top - position.top,
++					bottom = top + targetHeight - elemHeight,
++					feedback = {
++						target: {
++							element: target,
++							left: targetOffset.left,
++							top: targetOffset.top,
++							width: targetWidth,
++							height: targetHeight
++						},
++						element: {
++							element: elem,
++							left: position.left,
++							top: position.top,
++							width: elemWidth,
++							height: elemHeight
++						},
++						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
++						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
++					};
++				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
++					feedback.horizontal = "center";
++				}
++				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
++					feedback.vertical = "middle";
++				}
++				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
++					feedback.important = "horizontal";
++				} else {
++					feedback.important = "vertical";
++				}
++				options.using.call( this, props, feedback );
++			};
++		}
++
++		elem.offset( $.extend( position, { using: using } ) );
++	});
++};
++
++$.ui.position = {
++	fit: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
++				outerWidth = within.width,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = withinOffset - collisionPosLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
++				newOverRight;
++
++			// element is wider than within
++			if ( data.collisionWidth > outerWidth ) {
++				// element is initially over the left side of within
++				if ( overLeft > 0 && overRight <= 0 ) {
++					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
++					position.left += overLeft - newOverRight;
++				// element is initially over right side of within
++				} else if ( overRight > 0 && overLeft <= 0 ) {
++					position.left = withinOffset;
++				// element is initially over both left and right sides of within
++				} else {
++					if ( overLeft > overRight ) {
++						position.left = withinOffset + outerWidth - data.collisionWidth;
++					} else {
++						position.left = withinOffset;
++					}
++				}
++			// too far left -> align with left edge
++			} else if ( overLeft > 0 ) {
++				position.left += overLeft;
++			// too far right -> align with right edge
++			} else if ( overRight > 0 ) {
++				position.left -= overRight;
++			// adjust based on position and margin
++			} else {
++				position.left = max( position.left - collisionPosLeft, position.left );
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
++				outerHeight = data.within.height,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = withinOffset - collisionPosTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
++				newOverBottom;
++
++			// element is taller than within
++			if ( data.collisionHeight > outerHeight ) {
++				// element is initially over the top of within
++				if ( overTop > 0 && overBottom <= 0 ) {
++					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
++					position.top += overTop - newOverBottom;
++				// element is initially over bottom of within
++				} else if ( overBottom > 0 && overTop <= 0 ) {
++					position.top = withinOffset;
++				// element is initially over both top and bottom of within
++				} else {
++					if ( overTop > overBottom ) {
++						position.top = withinOffset + outerHeight - data.collisionHeight;
++					} else {
++						position.top = withinOffset;
++					}
++				}
++			// too far up -> align with top
++			} else if ( overTop > 0 ) {
++				position.top += overTop;
++			// too far down -> align with bottom edge
++			} else if ( overBottom > 0 ) {
++				position.top -= overBottom;
++			// adjust based on position and margin
++			} else {
++				position.top = max( position.top - collisionPosTop, position.top );
++			}
++		}
++	},
++	flip: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.left + within.scrollLeft,
++				outerWidth = within.width,
++				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = collisionPosLeft - offsetLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
++				myOffset = data.my[ 0 ] === "left" ?
++					-data.elemWidth :
++					data.my[ 0 ] === "right" ?
++						data.elemWidth :
++						0,
++				atOffset = data.at[ 0 ] === "left" ?
++					data.targetWidth :
++					data.at[ 0 ] === "right" ?
++						-data.targetWidth :
++						0,
++				offset = -2 * data.offset[ 0 ],
++				newOverRight,
++				newOverLeft;
++
++			if ( overLeft < 0 ) {
++				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
++				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overRight > 0 ) {
++				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
++				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.top + within.scrollTop,
++				outerHeight = within.height,
++				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = collisionPosTop - offsetTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
++				top = data.my[ 1 ] === "top",
++				myOffset = top ?
++					-data.elemHeight :
++					data.my[ 1 ] === "bottom" ?
++						data.elemHeight :
++						0,
++				atOffset = data.at[ 1 ] === "top" ?
++					data.targetHeight :
++					data.at[ 1 ] === "bottom" ?
++						-data.targetHeight :
++						0,
++				offset = -2 * data.offset[ 1 ],
++				newOverTop,
++				newOverBottom;
++			if ( overTop < 0 ) {
++				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
++				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overBottom > 0 ) {
++				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
++				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++		}
++	},
++	flipfit: {
++		left: function() {
++			$.ui.position.flip.left.apply( this, arguments );
++			$.ui.position.fit.left.apply( this, arguments );
++		},
++		top: function() {
++			$.ui.position.flip.top.apply( this, arguments );
++			$.ui.position.fit.top.apply( this, arguments );
++		}
++	}
++};
++
++// fraction support test
++(function () {
++	var testElement, testElementParent, testElementStyle, offsetLeft, i,
++		body = document.getElementsByTagName( "body" )[ 0 ],
++		div = document.createElement( "div" );
++
++	//Create a "fake body" for testing based on method used in jQuery.support
++	testElement = document.createElement( body ? "div" : "body" );
++	testElementStyle = {
++		visibility: "hidden",
++		width: 0,
++		height: 0,
++		border: 0,
++		margin: 0,
++		background: "none"
++	};
++	if ( body ) {
++		$.extend( testElementStyle, {
++			position: "absolute",
++			left: "-1000px",
++			top: "-1000px"
++		});
++	}
++	for ( i in testElementStyle ) {
++		testElement.style[ i ] = testElementStyle[ i ];
++	}
++	testElement.appendChild( div );
++	testElementParent = body || document.documentElement;
++	testElementParent.insertBefore( testElement, testElementParent.firstChild );
++
++	div.style.cssText = "position: absolute; left: 10.7432222px;";
++
++	offsetLeft = $( div ).offset().left;
++	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
++
++	testElement.innerHTML = "";
++	testElementParent.removeChild( testElement );
++})();
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.widget("ui.draggable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "drag",
++	options: {
++		addClasses: true,
++		appendTo: "parent",
++		axis: false,
++		connectToSortable: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		iframeFix: false,
++		opacity: false,
++		refreshPositions: false,
++		revert: false,
++		revertDuration: 500,
++		scope: "default",
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		snap: false,
++		snapMode: "both",
++		snapTolerance: 20,
++		stack: false,
++		zIndex: false,
++
++		// callbacks
++		drag: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
++			this.element[0].style.position = "relative";
++		}
++		if (this.options.addClasses){
++			this.element.addClass("ui-draggable");
++		}
++		if (this.options.disabled){
++			this.element.addClass("ui-draggable-disabled");
++		}
++
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function(event) {
++
++		var o = this.options;
++
++		// among others, prevent a drag on a resizable-handle
++		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
++			return false;
++		}
++
++		//Quit if we're not on a valid handle
++		this.handle = this._getHandle(event);
++		if (!this.handle) {
++			return false;
++		}
++
++		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
++			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
++			.css({
++				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
++				position: "absolute", opacity: "0.001", zIndex: 1000
++			})
++			.css($(this).offset())
++			.appendTo("body");
++		});
++
++		return true;
++
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options;
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		this.helper.addClass("ui-draggable-dragging");
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		//If ddmanager is used for droppables, set the global draggable
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Store the helper's css position
++		this.cssPosition = this.helper.css( "position" );
++		this.scrollParent = this.helper.scrollParent();
++		this.offsetParent = this.helper.offsetParent();
++		this.offsetParentCssPosition = this.offsetParent.css( "position" );
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.positionAbs = this.element.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		//Reset scroll cache
++		this.offset.scroll = false;
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this.position = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Set a containment if given in the options
++		this._setContainment();
++
++		//Trigger event + callbacks
++		if(this._trigger("start", event) === false) {
++			this._clear();
++			return false;
++		}
++
++		//Recache the helper size
++		this._cacheHelperProportions();
++
++		//Prepare the droppable offsets
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++
++		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
++		if ( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStart(this, event);
++		}
++
++		return true;
++	},
++
++	_mouseDrag: function(event, noPropagation) {
++		// reset any necessary cached properties (see #5009)
++		if ( this.offsetParentCssPosition === "fixed" ) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Call plugins and callbacks and use the resulting position if something is returned
++		if (!noPropagation) {
++			var ui = this._uiHash();
++			if(this._trigger("drag", event, ui) === false) {
++				this._mouseUp({});
++				return false;
++			}
++			this.position = ui.position;
++		}
++
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		//If we are using droppables, inform the manager about the drop
++		var that = this,
++			dropped = false;
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			dropped = $.ui.ddmanager.drop(this, event);
++		}
++
++		//if a drop comes from outside (a sortable)
++		if(this.dropped) {
++			dropped = this.dropped;
++			this.dropped = false;
++		}
++
++		//if the original element is no longer in the DOM don't bother to continue (see #8269)
++		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
++			return false;
++		}
++
++		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
++			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
++				if(that._trigger("stop", event) !== false) {
++					that._clear();
++				}
++			});
++		} else {
++			if(this._trigger("stop", event) !== false) {
++				this._clear();
++			}
++		}
++
++		return false;
++	},
++
++	_mouseUp: function(event) {
++		//Remove frame helpers
++		$("div.ui-draggable-iframeFix").each(function() {
++			this.parentNode.removeChild(this);
++		});
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
++		if( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStop(this, event);
++		}
++
++		return $.ui.mouse.prototype._mouseUp.call(this, event);
++	},
++
++	cancel: function() {
++
++		if(this.helper.is(".ui-draggable-dragging")) {
++			this._mouseUp({});
++		} else {
++			this._clear();
++		}
++
++		return this;
++
++	},
++
++	_getHandle: function(event) {
++		return this.options.handle ?
++			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
++			true;
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
++
++		if(!helper.parents("body").length) {
++			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
++		}
++
++		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
++			helper.css("position", "absolute");
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++		//Get the offsetParent and cache its position
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		//This needs to be actually done for all browsers, since pageX/pageY includes this information
++		//Ugly IE fix
++		if((this.offsetParent[0] === document.body) ||
++			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.element.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.element.css("marginLeft"),10) || 0),
++			top: (parseInt(this.element.css("marginTop"),10) || 0),
++			right: (parseInt(this.element.css("marginRight"),10) || 0),
++			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var over, c, ce,
++			o = this.options;
++
++		if ( !o.containment ) {
++			this.containment = null;
++			return;
++		}
++
++		if ( o.containment === "window" ) {
++			this.containment = [
++				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
++				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
++				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
++				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment === "document") {
++			this.containment = [
++				0,
++				0,
++				$( document ).width() - this.helperProportions.width - this.margins.left,
++				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment.constructor === Array ) {
++			this.containment = o.containment;
++			return;
++		}
++
++		if ( o.containment === "parent" ) {
++			o.containment = this.helper[ 0 ].parentNode;
++		}
++
++		c = $( o.containment );
++		ce = c[ 0 ];
++
++		if( !ce ) {
++			return;
++		}
++
++		over = c.css( "overflow" ) !== "hidden";
++
++		this.containment = [
++			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
++			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
++			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
++			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
++		];
++		this.relative_container = c;
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var containment, co, top, left,
++			o = this.options,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
++			pageX = event.pageX,
++			pageY = event.pageY;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		// If we are not dragging yet, we won't check for options
++		if ( this.originalPosition ) {
++			if ( this.containment ) {
++				if ( this.relative_container ){
++					co = this.relative_container.offset();
++					containment = [
++						this.containment[ 0 ] + co.left,
++						this.containment[ 1 ] + co.top,
++						this.containment[ 2 ] + co.left,
++						this.containment[ 3 ] + co.top
++					];
++				}
++				else {
++					containment = this.containment;
++				}
++
++				if(event.pageX - this.offset.click.left < containment[0]) {
++					pageX = containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < containment[1]) {
++					pageY = containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > containment[2]) {
++					pageX = containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > containment[3]) {
++					pageY = containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
++				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
++				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
++				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																	// The absolute mouse position
++				this.offset.click.top	-												// Click offset (relative to the element)
++				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
++			),
++			left: (
++				pageX -																	// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
++			)
++		};
++
++	},
++
++	_clear: function() {
++		this.helper.removeClass("ui-draggable-dragging");
++		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
++			this.helper.remove();
++		}
++		this.helper = null;
++		this.cancelHelperRemoval = false;
++	},
++
++	// From now on bulk stuff - mainly helpers
++
++	_trigger: function(type, event, ui) {
++		ui = ui || this._uiHash();
++		$.ui.plugin.call(this, type, [event, ui]);
++		//The absolute position has to be recalculated after plugins
++		if(type === "drag") {
++			this.positionAbs = this._convertPositionTo("absolute");
++		}
++		return $.Widget.prototype._trigger.call(this, type, event, ui);
++	},
++
++	plugins: {},
++
++	_uiHash: function() {
++		return {
++			helper: this.helper,
++			position: this.position,
++			originalPosition: this.originalPosition,
++			offset: this.positionAbs
++		};
++	}
++
++});
++
++$.ui.plugin.add("draggable", "connectToSortable", {
++	start: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), o = inst.options,
++			uiSortable = $.extend({}, ui, { item: inst.element });
++		inst.sortables = [];
++		$(o.connectToSortable).each(function() {
++			var sortable = $.data(this, "ui-sortable");
++			if (sortable && !sortable.options.disabled) {
++				inst.sortables.push({
++					instance: sortable,
++					shouldRevert: sortable.options.revert
++				});
++				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
++				sortable._trigger("activate", event, uiSortable);
++			}
++		});
++
++	},
++	stop: function(event, ui) {
++
++		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
++		var inst = $(this).data("ui-draggable"),
++			uiSortable = $.extend({}, ui, { item: inst.element });
++
++		$.each(inst.sortables, function() {
++			if(this.instance.isOver) {
++
++				this.instance.isOver = 0;
++
++				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
++				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
++
++				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
++				if(this.shouldRevert) {
++					this.instance.options.revert = this.shouldRevert;
++				}
++
++				//Trigger the stop of the sortable
++				this.instance._mouseStop(event);
++
++				this.instance.options.helper = this.instance.options._helper;
++
++				//If the helper has been the original item, restore properties in the sortable
++				if(inst.options.helper === "original") {
++					this.instance.currentItem.css({ top: "auto", left: "auto" });
++				}
++
++			} else {
++				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
++				this.instance._trigger("deactivate", event, uiSortable);
++			}
++
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), that = this;
++
++		$.each(inst.sortables, function() {
++
++			var innermostIntersecting = false,
++				thisSortable = this;
++
++			//Copy over some variables to allow calling the sortable's native _intersectsWith
++			this.instance.positionAbs = inst.positionAbs;
++			this.instance.helperProportions = inst.helperProportions;
++			this.instance.offset.click = inst.offset.click;
++
++			if(this.instance._intersectsWith(this.instance.containerCache)) {
++				innermostIntersecting = true;
++				$.each(inst.sortables, function () {
++					this.instance.positionAbs = inst.positionAbs;
++					this.instance.helperProportions = inst.helperProportions;
++					this.instance.offset.click = inst.offset.click;
++					if (this !== thisSortable &&
++						this.instance._intersectsWith(this.instance.containerCache) &&
++						$.contains(thisSortable.instance.element[0], this.instance.element[0])
++					) {
++						innermostIntersecting = false;
++					}
++					return innermostIntersecting;
++				});
++			}
++
++
++			if(innermostIntersecting) {
++				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
++				if(!this.instance.isOver) {
++
++					this.instance.isOver = 1;
++					//Now we fake the start of dragging for the sortable instance,
++					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
++					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
++					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
++					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
++					this.instance.options.helper = function() { return ui.helper[0]; };
++
++					event.target = this.instance.currentItem[0];
++					this.instance._mouseCapture(event, true);
++					this.instance._mouseStart(event, true, true);
++
++					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
++					this.instance.offset.click.top = inst.offset.click.top;
++					this.instance.offset.click.left = inst.offset.click.left;
++					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
++					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
++
++					inst._trigger("toSortable", event);
++					inst.dropped = this.instance.element; //draggable revert needs that
++					//hack so receive/update callbacks work (mostly)
++					inst.currentItem = inst.element;
++					this.instance.fromOutside = inst;
++
++				}
++
++				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
++				if(this.instance.currentItem) {
++					this.instance._mouseDrag(event);
++				}
++
++			} else {
++
++				//If it doesn't intersect with the sortable, and it intersected before,
++				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
++				if(this.instance.isOver) {
++
++					this.instance.isOver = 0;
++					this.instance.cancelHelperRemoval = true;
++
++					//Prevent reverting on this forced stop
++					this.instance.options.revert = false;
++
++					// The out event needs to be triggered independently
++					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
++
++					this.instance._mouseStop(event, true);
++					this.instance.options.helper = this.instance.options._helper;
++
++					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
++					this.instance.currentItem.remove();
++					if(this.instance.placeholder) {
++						this.instance.placeholder.remove();
++					}
++
++					inst._trigger("fromSortable", event);
++					inst.dropped = false; //draggable revert needs that
++				}
++
++			}
++
++		});
++
++	}
++});
++
++$.ui.plugin.add("draggable", "cursor", {
++	start: function() {
++		var t = $("body"), o = $(this).data("ui-draggable").options;
++		if (t.css("cursor")) {
++			o._cursor = t.css("cursor");
++		}
++		t.css("cursor", o.cursor);
++	},
++	stop: function() {
++		var o = $(this).data("ui-draggable").options;
++		if (o._cursor) {
++			$("body").css("cursor", o._cursor);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "opacity", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("opacity")) {
++			o._opacity = t.css("opacity");
++		}
++		t.css("opacity", o.opacity);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._opacity) {
++			$(ui.helper).css("opacity", o._opacity);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "scroll", {
++	start: function() {
++		var i = $(this).data("ui-draggable");
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++			i.overflowOffset = i.scrollParent.offset();
++		}
++	},
++	drag: function( event ) {
++
++		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
++
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++
++			if(!o.axis || o.axis !== "x") {
++				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++			}
++
++		} else {
++
++			if(!o.axis || o.axis !== "x") {
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++			}
++
++		}
++
++		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(i, event);
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "snap", {
++	start: function() {
++
++		var i = $(this).data("ui-draggable"),
++			o = i.options;
++
++		i.snapElements = [];
++
++		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
++			var $t = $(this),
++				$o = $t.offset();
++			if(this !== i.element[0]) {
++				i.snapElements.push({
++					item: this,
++					width: $t.outerWidth(), height: $t.outerHeight(),
++					top: $o.top, left: $o.left
++				});
++			}
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var ts, bs, ls, rs, l, r, t, b, i, first,
++			inst = $(this).data("ui-draggable"),
++			o = inst.options,
++			d = o.snapTolerance,
++			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
++			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
++
++		for (i = inst.snapElements.length - 1; i >= 0; i--){
++
++			l = inst.snapElements[i].left;
++			r = l + inst.snapElements[i].width;
++			t = inst.snapElements[i].top;
++			b = t + inst.snapElements[i].height;
++
++			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
++				if(inst.snapElements[i].snapping) {
++					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++				}
++				inst.snapElements[i].snapping = false;
++				continue;
++			}
++
++			if(o.snapMode !== "inner") {
++				ts = Math.abs(t - y2) <= d;
++				bs = Math.abs(b - y1) <= d;
++				ls = Math.abs(l - x2) <= d;
++				rs = Math.abs(r - x1) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
++				}
++			}
++
++			first = (ts || bs || ls || rs);
++
++			if(o.snapMode !== "outer") {
++				ts = Math.abs(t - y1) <= d;
++				bs = Math.abs(b - y2) <= d;
++				ls = Math.abs(l - x1) <= d;
++				rs = Math.abs(r - x2) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
++				}
++			}
++
++			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
++				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++			}
++			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
++
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "stack", {
++	start: function() {
++		var min,
++			o = this.data("ui-draggable").options,
++			group = $.makeArray($(o.stack)).sort(function(a,b) {
++				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
++			});
++
++		if (!group.length) { return; }
++
++		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
++		$(group).each(function(i) {
++			$(this).css("zIndex", min + i);
++		});
++		this.css("zIndex", (min + group.length));
++	}
++});
++
++$.ui.plugin.add("draggable", "zIndex", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("zIndex")) {
++			o._zIndex = t.css("zIndex");
++		}
++		t.css("zIndex", o.zIndex);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._zIndex) {
++			$(ui.helper).css("zIndex", o._zIndex);
++		}
++	}
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++$.widget("ui.droppable", {
++	version: "1.10.3",
++	widgetEventPrefix: "drop",
++	options: {
++		accept: "*",
++		activeClass: false,
++		addClasses: true,
++		greedy: false,
++		hoverClass: false,
++		scope: "default",
++		tolerance: "intersect",
++
++		// callbacks
++		activate: null,
++		deactivate: null,
++		drop: null,
++		out: null,
++		over: null
++	},
++	_create: function() {
++
++		var o = this.options,
++			accept = o.accept;
++
++		this.isover = false;
++		this.isout = true;
++
++		this.accept = $.isFunction(accept) ? accept : function(d) {
++			return d.is(accept);
++		};
++
++		//Store the droppable's proportions
++		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
++
++		// Add the reference and positions to the manager
++		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
++		$.ui.ddmanager.droppables[o.scope].push(this);
++
++		(o.addClasses && this.element.addClass("ui-droppable"));
++
++	},
++
++	_destroy: function() {
++		var i = 0,
++			drop = $.ui.ddmanager.droppables[this.options.scope];
++
++		for ( ; i < drop.length; i++ ) {
++			if ( drop[i] === this ) {
++				drop.splice(i, 1);
++			}
++		}
++
++		this.element.removeClass("ui-droppable ui-droppable-disabled");
++	},
++
++	_setOption: function(key, value) {
++
++		if(key === "accept") {
++			this.accept = $.isFunction(value) ? value : function(d) {
++				return d.is(value);
++			};
++		}
++		$.Widget.prototype._setOption.apply(this, arguments);
++	},
++
++	_activate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.addClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("activate", event, this.ui(draggable));
++		}
++	},
++
++	_deactivate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.removeClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("deactivate", event, this.ui(draggable));
++		}
++	},
++
++	_over: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.addClass(this.options.hoverClass);
++			}
++			this._trigger("over", event, this.ui(draggable));
++		}
++
++	},
++
++	_out: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("out", event, this.ui(draggable));
++		}
++
++	},
++
++	_drop: function(event,custom) {
++
++		var draggable = custom || $.ui.ddmanager.current,
++			childrenIntersection = false;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return false;
++		}
++
++		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
++			var inst = $.data(this, "ui-droppable");
++			if(
++				inst.options.greedy &&
++				!inst.options.disabled &&
++				inst.options.scope === draggable.options.scope &&
++				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
++				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
++			) { childrenIntersection = true; return false; }
++		});
++		if(childrenIntersection) {
++			return false;
++		}
++
++		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.activeClass) {
++				this.element.removeClass(this.options.activeClass);
++			}
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("drop", event, this.ui(draggable));
++			return this.element;
++		}
++
++		return false;
++
++	},
++
++	ui: function(c) {
++		return {
++			draggable: (c.currentItem || c.element),
++			helper: c.helper,
++			position: c.position,
++			offset: c.positionAbs
++		};
++	}
++
++});
++
++$.ui.intersect = function(draggable, droppable, toleranceMode) {
++
++	if (!droppable.offset) {
++		return false;
++	}
++
++	var draggableLeft, draggableTop,
++		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
++		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
++		l = droppable.offset.left, r = l + droppable.proportions.width,
++		t = droppable.offset.top, b = t + droppable.proportions.height;
++
++	switch (toleranceMode) {
++		case "fit":
++			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
++		case "intersect":
++			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
++				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
++				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
++		case "pointer":
++			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
++			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
++			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
++		case "touch":
++			return (
++				(y1 >= t && y1 <= b) ||	// Top edge touching
++				(y2 >= t && y2 <= b) ||	// Bottom edge touching
++				(y1 < t && y2 > b)		// Surrounded vertically
++			) && (
++				(x1 >= l && x1 <= r) ||	// Left edge touching
++				(x2 >= l && x2 <= r) ||	// Right edge touching
++				(x1 < l && x2 > r)		// Surrounded horizontally
++			);
++		default:
++			return false;
++		}
++
++};
++
++/*
++	This manager tracks offsets of draggables and droppables
++*/
++$.ui.ddmanager = {
++	current: null,
++	droppables: { "default": [] },
++	prepareOffsets: function(t, event) {
++
++		var i, j,
++			m = $.ui.ddmanager.droppables[t.options.scope] || [],
++			type = event ? event.type : null, // workaround for #2317
++			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
++
++		droppablesLoop: for (i = 0; i < m.length; i++) {
++
++			//No disabled and non-accepted
++			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
++				continue;
++			}
++
++			// Filter out elements in the current dragged item
++			for (j=0; j < list.length; j++) {
++				if(list[j] === m[i].element[0]) {
++					m[i].proportions.height = 0;
++					continue droppablesLoop;
++				}
++			}
++
++			m[i].visible = m[i].element.css("display") !== "none";
++			if(!m[i].visible) {
++				continue;
++			}
++
++			//Activate the droppable if used directly from draggables
++			if(type === "mousedown") {
++				m[i]._activate.call(m[i], event);
++			}
++
++			m[i].offset = m[i].element.offset();
++			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
++
++		}
++
++	},
++	drop: function(draggable, event) {
++
++		var dropped = false;
++		// Create a copy of the droppables in case the list changes during the drop (#9116)
++		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
++
++			if(!this.options) {
++				return;
++			}
++			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
++				dropped = this._drop.call(this, event) || dropped;
++			}
++
++			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++				this.isout = true;
++				this.isover = false;
++				this._deactivate.call(this, event);
++			}
++
++		});
++		return dropped;
++
++	},
++	dragStart: function( draggable, event ) {
++		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
++		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
++			if( !draggable.options.refreshPositions ) {
++				$.ui.ddmanager.prepareOffsets( draggable, event );
++			}
++		});
++	},
++	drag: function(draggable, event) {
++
++		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
++		if(draggable.options.refreshPositions) {
++			$.ui.ddmanager.prepareOffsets(draggable, event);
++		}
++
++		//Run through all droppables and check their positions based on specific tolerance options
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(this.options.disabled || this.greedyChild || !this.visible) {
++				return;
++			}
++
++			var parentInstance, scope, parent,
++				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
++				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
++			if(!c) {
++				return;
++			}
++
++			if (this.options.greedy) {
++				// find droppable parents with same scope
++				scope = this.options.scope;
++				parent = this.element.parents(":data(ui-droppable)").filter(function () {
++					return $.data(this, "ui-droppable").options.scope === scope;
++				});
++
++				if (parent.length) {
++					parentInstance = $.data(parent[0], "ui-droppable");
++					parentInstance.greedyChild = (c === "isover");
++				}
++			}
++
++			// we just moved into a greedy child
++			if (parentInstance && c === "isover") {
++				parentInstance.isover = false;
++				parentInstance.isout = true;
++				parentInstance._out.call(parentInstance, event);
++			}
++
++			this[c] = true;
++			this[c === "isout" ? "isover" : "isout"] = false;
++			this[c === "isover" ? "_over" : "_out"].call(this, event);
++
++			// we just moved out of a greedy child
++			if (parentInstance && c === "isout") {
++				parentInstance.isout = false;
++				parentInstance.isover = true;
++				parentInstance._over.call(parentInstance, event);
++			}
++		});
++
++	},
++	dragStop: function( draggable, event ) {
++		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
++		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
++		if( !draggable.options.refreshPositions ) {
++			$.ui.ddmanager.prepareOffsets( draggable, event );
++		}
++	}
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++function num(v) {
++	return parseInt(v, 10) || 0;
++}
++
++function isNumber(value) {
++	return !isNaN(parseInt(value, 10));
++}
++
++$.widget("ui.resizable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "resize",
++	options: {
++		alsoResize: false,
++		animate: false,
++		animateDuration: "slow",
++		animateEasing: "swing",
++		aspectRatio: false,
++		autoHide: false,
++		containment: false,
++		ghost: false,
++		grid: false,
++		handles: "e,s,se",
++		helper: false,
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 10,
++		minWidth: 10,
++		// See #7960
++		zIndex: 90,
++
++		// callbacks
++		resize: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		var n, i, handle, axis, hname,
++			that = this,
++			o = this.options;
++		this.element.addClass("ui-resizable");
++
++		$.extend(this, {
++			_aspectRatio: !!(o.aspectRatio),
++			aspectRatio: o.aspectRatio,
++			originalElement: this.element,
++			_proportionallyResizeElements: [],
++			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
++		});
++
++		//Wrap the element if it cannot hold child nodes
++		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
++
++			//Create a wrapper element and set the wrapper to the new current internal element
++			this.element.wrap(
++				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
++					position: this.element.css("position"),
++					width: this.element.outerWidth(),
++					height: this.element.outerHeight(),
++					top: this.element.css("top"),
++					left: this.element.css("left")
++				})
++			);
++
++			//Overwrite the original this.element
++			this.element = this.element.parent().data(
++				"ui-resizable", this.element.data("ui-resizable")
++			);
++
++			this.elementIsWrapper = true;
++
++			//Move margins to the wrapper
++			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
++			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
++
++			//Prevent Safari textarea resize
++			this.originalResizeStyle = this.originalElement.css("resize");
++			this.originalElement.css("resize", "none");
++
++			//Push the actual element to our proportionallyResize internal array
++			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
++
++			// avoid IE jump (hard set the margin)
++			this.originalElement.css({ margin: this.originalElement.css("margin") });
++
++			// fix handlers offset
++			this._proportionallyResize();
++
++		}
++
++		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
++		if(this.handles.constructor === String) {
++
++			if ( this.handles === "all") {
++				this.handles = "n,e,s,w,se,sw,ne,nw";
++			}
++
++			n = this.handles.split(",");
++			this.handles = {};
++
++			for(i = 0; i < n.length; i++) {
++
++				handle = $.trim(n[i]);
++				hname = "ui-resizable-"+handle;
++				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
++
++				// Apply zIndex to all handles - see #7960
++				axis.css({ zIndex: o.zIndex });
++
++				//TODO : What's going on here?
++				if ("se" === handle) {
++					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
++				}
++
++				//Insert into internal handles object and append to element
++				this.handles[handle] = ".ui-resizable-"+handle;
++				this.element.append(axis);
++			}
++
++		}
++
++		this._renderAxis = function(target) {
++
++			var i, axis, padPos, padWrapper;
++
++			target = target || this.element;
++
++			for(i in this.handles) {
++
++				if(this.handles[i].constructor === String) {
++					this.handles[i] = $(this.handles[i], this.element).show();
++				}
++
++				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
++				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
++
++					axis = $(this.handles[i], this.element);
++
++					//Checking the correct pad and border
++					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
++
++					//The padding type i have to apply...
++					padPos = [ "padding",
++						/ne|nw|n/.test(i) ? "Top" :
++						/se|sw|s/.test(i) ? "Bottom" :
++						/^e$/.test(i) ? "Right" : "Left" ].join("");
++
++					target.css(padPos, padWrapper);
++
++					this._proportionallyResize();
++
++				}
++
++				//TODO: What's that good for? There's not anything to be executed left
++				if(!$(this.handles[i]).length) {
++					continue;
++				}
++			}
++		};
++
++		//TODO: make renderAxis a prototype function
++		this._renderAxis(this.element);
++
++		this._handles = $(".ui-resizable-handle", this.element)
++			.disableSelection();
++
++		//Matching axis name
++		this._handles.mouseover(function() {
++			if (!that.resizing) {
++				if (this.className) {
++					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
++				}
++				//Axis, default = se
++				that.axis = axis && axis[1] ? axis[1] : "se";
++			}
++		});
++
++		//If we want to auto hide the elements
++		if (o.autoHide) {
++			this._handles.hide();
++			$(this.element)
++				.addClass("ui-resizable-autohide")
++				.mouseenter(function() {
++					if (o.disabled) {
++						return;
++					}
++					$(this).removeClass("ui-resizable-autohide");
++					that._handles.show();
++				})
++				.mouseleave(function(){
++					if (o.disabled) {
++						return;
++					}
++					if (!that.resizing) {
++						$(this).addClass("ui-resizable-autohide");
++						that._handles.hide();
++					}
++				});
++		}
++
++		//Initialize the mouse interaction
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++
++		this._mouseDestroy();
++
++		var wrapper,
++			_destroy = function(exp) {
++				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
++					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
++			};
++
++		//TODO: Unwrap at same DOM position
++		if (this.elementIsWrapper) {
++			_destroy(this.element);
++			wrapper = this.element;
++			this.originalElement.css({
++				position: wrapper.css("position"),
++				width: wrapper.outerWidth(),
++				height: wrapper.outerHeight(),
++				top: wrapper.css("top"),
++				left: wrapper.css("left")
++			}).insertAfter( wrapper );
++			wrapper.remove();
++		}
++
++		this.originalElement.css("resize", this.originalResizeStyle);
++		_destroy(this.originalElement);
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++		var i, handle,
++			capture = false;
++
++		for (i in this.handles) {
++			handle = $(this.handles[i])[0];
++			if (handle === event.target || $.contains(handle, event.target)) {
++				capture = true;
++			}
++		}
++
++		return !this.options.disabled && capture;
++	},
++
++	_mouseStart: function(event) {
++
++		var curleft, curtop, cursor,
++			o = this.options,
++			iniPos = this.element.position(),
++			el = this.element;
++
++		this.resizing = true;
++
++		// bugfix for http://dev.jquery.com/ticket/1749
++		if ( (/absolute/).test( el.css("position") ) ) {
++			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
++		} else if (el.is(".ui-draggable")) {
++			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
++		}
++
++		this._renderProxy();
++
++		curleft = num(this.helper.css("left"));
++		curtop = num(this.helper.css("top"));
++
++		if (o.containment) {
++			curleft += $(o.containment).scrollLeft() || 0;
++			curtop += $(o.containment).scrollTop() || 0;
++		}
++
++		//Store needed variables
++		this.offset = this.helper.offset();
++		this.position = { left: curleft, top: curtop };
++		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalPosition = { left: curleft, top: curtop };
++		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
++		this.originalMousePosition = { left: event.pageX, top: event.pageY };
++
++		//Aspect Ratio
++		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
++
++		cursor = $(".ui-resizable-" + this.axis).css("cursor");
++		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
++
++		el.addClass("ui-resizable-resizing");
++		this._propagate("start", event);
++		return true;
++	},
++
++	_mouseDrag: function(event) {
++
++		//Increase performance, avoid regex
++		var data,
++			el = this.helper, props = {},
++			smp = this.originalMousePosition,
++			a = this.axis,
++			prevTop = this.position.top,
++			prevLeft = this.position.left,
++			prevWidth = this.size.width,
++			prevHeight = this.size.height,
++			dx = (event.pageX-smp.left)||0,
++			dy = (event.pageY-smp.top)||0,
++			trigger = this._change[a];
++
++		if (!trigger) {
++			return false;
++		}
++
++		// Calculate the attrs that will be change
++		data = trigger.apply(this, [event, dx, dy]);
++
++		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
++		this._updateVirtualBoundaries(event.shiftKey);
++		if (this._aspectRatio || event.shiftKey) {
++			data = this._updateRatio(data, event);
++		}
++
++		data = this._respectSize(data, event);
++
++		this._updateCache(data);
++
++		// plugins callbacks need to be called first
++		this._propagate("resize", event);
++
++		if (this.position.top !== prevTop) {
++			props.top = this.position.top + "px";
++		}
++		if (this.position.left !== prevLeft) {
++			props.left = this.position.left + "px";
++		}
++		if (this.size.width !== prevWidth) {
++			props.width = this.size.width + "px";
++		}
++		if (this.size.height !== prevHeight) {
++			props.height = this.size.height + "px";
++		}
++		el.css(props);
++
++		if (!this._helper && this._proportionallyResizeElements.length) {
++			this._proportionallyResize();
++		}
++
++		// Call the user callback if the element was resized
++		if ( ! $.isEmptyObject(props) ) {
++			this._trigger("resize", event, this.ui());
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		this.resizing = false;
++		var pr, ista, soffseth, soffsetw, s, left, top,
++			o = this.options, that = this;
++
++		if(this._helper) {
++
++			pr = this._proportionallyResizeElements;
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
++			soffsetw = ista ? 0 : that.sizeDiff.width;
++
++			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++			if (!o.animate) {
++				this.element.css($.extend(s, { top: top, left: left }));
++			}
++
++			that.helper.height(that.size.height);
++			that.helper.width(that.size.width);
++
++			if (this._helper && !o.animate) {
++				this._proportionallyResize();
++			}
++		}
++
++		$("body").css("cursor", "auto");
++
++		this.element.removeClass("ui-resizable-resizing");
++
++		this._propagate("stop", event);
++
++		if (this._helper) {
++			this.helper.remove();
++		}
++
++		return false;
++
++	},
++
++	_updateVirtualBoundaries: function(forceAspectRatio) {
++		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
++			o = this.options;
++
++		b = {
++			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
++			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
++			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
++			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
++		};
++
++		if(this._aspectRatio || forceAspectRatio) {
++			// We want to create an enclosing box whose aspect ration is the requested one
++			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
++			pMinWidth = b.minHeight * this.aspectRatio;
++			pMinHeight = b.minWidth / this.aspectRatio;
++			pMaxWidth = b.maxHeight * this.aspectRatio;
++			pMaxHeight = b.maxWidth / this.aspectRatio;
++
++			if(pMinWidth > b.minWidth) {
++				b.minWidth = pMinWidth;
++			}
++			if(pMinHeight > b.minHeight) {
++				b.minHeight = pMinHeight;
++			}
++			if(pMaxWidth < b.maxWidth) {
++				b.maxWidth = pMaxWidth;
++			}
++			if(pMaxHeight < b.maxHeight) {
++				b.maxHeight = pMaxHeight;
++			}
++		}
++		this._vBoundaries = b;
++	},
++
++	_updateCache: function(data) {
++		this.offset = this.helper.offset();
++		if (isNumber(data.left)) {
++			this.position.left = data.left;
++		}
++		if (isNumber(data.top)) {
++			this.position.top = data.top;
++		}
++		if (isNumber(data.height)) {
++			this.size.height = data.height;
++		}
++		if (isNumber(data.width)) {
++			this.size.width = data.width;
++		}
++	},
++
++	_updateRatio: function( data ) {
++
++		var cpos = this.position,
++			csize = this.size,
++			a = this.axis;
++
++		if (isNumber(data.height)) {
++			data.width = (data.height * this.aspectRatio);
++		} else if (isNumber(data.width)) {
++			data.height = (data.width / this.aspectRatio);
++		}
++
++		if (a === "sw") {
++			data.left = cpos.left + (csize.width - data.width);
++			data.top = null;
++		}
++		if (a === "nw") {
++			data.top = cpos.top + (csize.height - data.height);
++			data.left = cpos.left + (csize.width - data.width);
++		}
++
++		return data;
++	},
++
++	_respectSize: function( data ) {
++
++		var o = this._vBoundaries,
++			a = this.axis,
++			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
++			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
++			dw = this.originalPosition.left + this.originalSize.width,
++			dh = this.position.top + this.size.height,
++			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
++		if (isminw) {
++			data.width = o.minWidth;
++		}
++		if (isminh) {
++			data.height = o.minHeight;
++		}
++		if (ismaxw) {
++			data.width = o.maxWidth;
++		}
++		if (ismaxh) {
++			data.height = o.maxHeight;
++		}
++
++		if (isminw && cw) {
++			data.left = dw - o.minWidth;
++		}
++		if (ismaxw && cw) {
++			data.left = dw - o.maxWidth;
++		}
++		if (isminh && ch) {
++			data.top = dh - o.minHeight;
++		}
++		if (ismaxh && ch) {
++			data.top = dh - o.maxHeight;
++		}
++
++		// fixing jump error on top/left - bug #2330
++		if (!data.width && !data.height && !data.left && data.top) {
++			data.top = null;
++		} else if (!data.width && !data.height && !data.top && data.left) {
++			data.left = null;
++		}
++
++		return data;
++	},
++
++	_proportionallyResize: function() {
++
++		if (!this._proportionallyResizeElements.length) {
++			return;
++		}
++
++		var i, j, borders, paddings, prel,
++			element = this.helper || this.element;
++
++		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
++
++			prel = this._proportionallyResizeElements[i];
++
++			if (!this.borderDif) {
++				this.borderDif = [];
++				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
++				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
++
++				for ( j = 0; j < borders.length; j++ ) {
++					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
++				}
++			}
++
++			prel.css({
++				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
++				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
++			});
++
++		}
++
++	},
++
++	_renderProxy: function() {
++
++		var el = this.element, o = this.options;
++		this.elementOffset = el.offset();
++
++		if(this._helper) {
++
++			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
++
++			this.helper.addClass(this._helper).css({
++				width: this.element.outerWidth() - 1,
++				height: this.element.outerHeight() - 1,
++				position: "absolute",
++				left: this.elementOffset.left +"px",
++				top: this.elementOffset.top +"px",
++				zIndex: ++o.zIndex //TODO: Don't modify option
++			});
++
++			this.helper
++				.appendTo("body")
++				.disableSelection();
++
++		} else {
++			this.helper = this.element;
++		}
++
++	},
++
++	_change: {
++		e: function(event, dx) {
++			return { width: this.originalSize.width + dx };
++		},
++		w: function(event, dx) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { left: sp.left + dx, width: cs.width - dx };
++		},
++		n: function(event, dx, dy) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { top: sp.top + dy, height: cs.height - dy };
++		},
++		s: function(event, dx, dy) {
++			return { height: this.originalSize.height + dy };
++		},
++		se: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		sw: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		},
++		ne: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		nw: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		}
++	},
++
++	_propagate: function(n, event) {
++		$.ui.plugin.call(this, n, [event, this.ui()]);
++		(n !== "resize" && this._trigger(n, event, this.ui()));
++	},
++
++	plugins: {},
++
++	ui: function() {
++		return {
++			originalElement: this.originalElement,
++			element: this.element,
++			helper: this.helper,
++			position: this.position,
++			size: this.size,
++			originalSize: this.originalSize,
++			originalPosition: this.originalPosition
++		};
++	}
++
++});
++
++/*
++ * Resizable Extensions
++ */
++
++$.ui.plugin.add("resizable", "animate", {
++
++	stop: function( event ) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			pr = that._proportionallyResizeElements,
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
++			soffsetw = ista ? 0 : that.sizeDiff.width,
++			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++		that.element.animate(
++			$.extend(style, top && left ? { top: top, left: left } : {}), {
++				duration: o.animateDuration,
++				easing: o.animateEasing,
++				step: function() {
++
++					var data = {
++						width: parseInt(that.element.css("width"), 10),
++						height: parseInt(that.element.css("height"), 10),
++						top: parseInt(that.element.css("top"), 10),
++						left: parseInt(that.element.css("left"), 10)
++					};
++
++					if (pr && pr.length) {
++						$(pr[0]).css({ width: data.width, height: data.height });
++					}
++
++					// propagating resize, and updating values for each animation step
++					that._updateCache(data);
++					that._propagate("resize", event);
++
++				}
++			}
++		);
++	}
++
++});
++
++$.ui.plugin.add("resizable", "containment", {
++
++	start: function() {
++		var element, p, co, ch, cw, width, height,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			el = that.element,
++			oc = o.containment,
++			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
++
++		if (!ce) {
++			return;
++		}
++
++		that.containerElement = $(ce);
++
++		if (/document/.test(oc) || oc === document) {
++			that.containerOffset = { left: 0, top: 0 };
++			that.containerPosition = { left: 0, top: 0 };
++
++			that.parentData = {
++				element: $(document), left: 0, top: 0,
++				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
++			};
++		}
++
++		// i'm a node, so compute top, left, right, bottom
++		else {
++			element = $(ce);
++			p = [];
++			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
++
++			that.containerOffset = element.offset();
++			that.containerPosition = element.position();
++			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
++
++			co = that.containerOffset;
++			ch = that.containerSize.height;
++			cw = that.containerSize.width;
++			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
++			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
++
++			that.parentData = {
++				element: ce, left: co.left, top: co.top, width: width, height: height
++			};
++		}
++	},
++
++	resize: function( event ) {
++		var woset, hoset, isParent, isOffsetRelative,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset, cp = that.position,
++			pRatio = that._aspectRatio || event.shiftKey,
++			cop = { top:0, left:0 }, ce = that.containerElement;
++
++		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
++			cop = co;
++		}
++
++		if (cp.left < (that._helper ? co.left : 0)) {
++			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++			that.position.left = o.helper ? co.left : 0;
++		}
++
++		if (cp.top < (that._helper ? co.top : 0)) {
++			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++			that.position.top = that._helper ? co.top : 0;
++		}
++
++		that.offset.left = that.parentData.left+that.position.left;
++		that.offset.top = that.parentData.top+that.position.top;
++
++		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
++		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
++
++		isParent = that.containerElement.get(0) === that.element.parent().get(0);
++		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
++
++		if(isParent && isOffsetRelative) {
++			woset -= that.parentData.left;
++		}
++
++		if (woset + that.size.width >= that.parentData.width) {
++			that.size.width = that.parentData.width - woset;
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++		}
++
++		if (hoset + that.size.height >= that.parentData.height) {
++			that.size.height = that.parentData.height - hoset;
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++		}
++	},
++
++	stop: function(){
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset,
++			cop = that.containerPosition,
++			ce = that.containerElement,
++			helper = $(that.helper),
++			ho = helper.offset(),
++			w = helper.outerWidth() - that.sizeDiff.width,
++			h = helper.outerHeight() - that.sizeDiff.height;
++
++		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++	}
++});
++
++$.ui.plugin.add("resizable", "alsoResize", {
++
++	start: function () {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			_store = function (exp) {
++				$(exp).each(function() {
++					var el = $(this);
++					el.data("ui-resizable-alsoresize", {
++						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
++						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
++					});
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
++			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
++			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
++		}else{
++			_store(o.alsoResize);
++		}
++	},
++
++	resize: function (event, ui) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			os = that.originalSize,
++			op = that.originalPosition,
++			delta = {
++				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
++				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
++			},
++
++			_alsoResize = function (exp, c) {
++				$(exp).each(function() {
++					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
++						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
++
++					$.each(css, function (i, prop) {
++						var sum = (start[prop]||0) + (delta[prop]||0);
++						if (sum && sum >= 0) {
++							style[prop] = sum || null;
++						}
++					});
++
++					el.css(style);
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
++			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
++		}else{
++			_alsoResize(o.alsoResize);
++		}
++	},
++
++	stop: function () {
++		$(this).removeData("resizable-alsoresize");
++	}
++});
++
++$.ui.plugin.add("resizable", "ghost", {
++
++	start: function() {
++
++		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
++
++		that.ghost = that.originalElement.clone();
++		that.ghost
++			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
++			.addClass("ui-resizable-ghost")
++			.addClass(typeof o.ghost === "string" ? o.ghost : "");
++
++		that.ghost.appendTo(that.helper);
++
++	},
++
++	resize: function(){
++		var that = $(this).data("ui-resizable");
++		if (that.ghost) {
++			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
++		}
++	},
++
++	stop: function() {
++		var that = $(this).data("ui-resizable");
++		if (that.ghost && that.helper) {
++			that.helper.get(0).removeChild(that.ghost.get(0));
++		}
++	}
++
++});
++
++$.ui.plugin.add("resizable", "grid", {
++
++	resize: function() {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			cs = that.size,
++			os = that.originalSize,
++			op = that.originalPosition,
++			a = that.axis,
++			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
++			gridX = (grid[0]||1),
++			gridY = (grid[1]||1),
++			ox = Math.round((cs.width - os.width) / gridX) * gridX,
++			oy = Math.round((cs.height - os.height) / gridY) * gridY,
++			newWidth = os.width + ox,
++			newHeight = os.height + oy,
++			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
++			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
++			isMinWidth = o.minWidth && (o.minWidth > newWidth),
++			isMinHeight = o.minHeight && (o.minHeight > newHeight);
++
++		o.grid = grid;
++
++		if (isMinWidth) {
++			newWidth = newWidth + gridX;
++		}
++		if (isMinHeight) {
++			newHeight = newHeight + gridY;
++		}
++		if (isMaxWidth) {
++			newWidth = newWidth - gridX;
++		}
++		if (isMaxHeight) {
++			newHeight = newHeight - gridY;
++		}
++
++		if (/^(se|s|e)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++		} else if (/^(ne)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++		} else if (/^(sw)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.left = op.left - ox;
++		} else {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++			that.position.left = op.left - ox;
++		}
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.widget("ui.selectable", $.ui.mouse, {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoRefresh: true,
++		distance: 0,
++		filter: "*",
++		tolerance: "touch",
++
++		// callbacks
++		selected: null,
++		selecting: null,
++		start: null,
++		stop: null,
++		unselected: null,
++		unselecting: null
++	},
++	_create: function() {
++		var selectees,
++			that = this;
++
++		this.element.addClass("ui-selectable");
++
++		this.dragged = false;
++
++		// cache selectee children based on filter
++		this.refresh = function() {
++			selectees = $(that.options.filter, that.element[0]);
++			selectees.addClass("ui-selectee");
++			selectees.each(function() {
++				var $this = $(this),
++					pos = $this.offset();
++				$.data(this, "selectable-item", {
++					element: this,
++					$element: $this,
++					left: pos.left,
++					top: pos.top,
++					right: pos.left + $this.outerWidth(),
++					bottom: pos.top + $this.outerHeight(),
++					startselected: false,
++					selected: $this.hasClass("ui-selected"),
++					selecting: $this.hasClass("ui-selecting"),
++					unselecting: $this.hasClass("ui-unselecting")
++				});
++			});
++		};
++		this.refresh();
++
++		this.selectees = selectees.addClass("ui-selectee");
++
++		this._mouseInit();
++
++		this.helper = $("<div class='ui-selectable-helper'></div>");
++	},
++
++	_destroy: function() {
++		this.selectees
++			.removeClass("ui-selectee")
++			.removeData("selectable-item");
++		this.element
++			.removeClass("ui-selectable ui-selectable-disabled");
++		this._mouseDestroy();
++	},
++
++	_mouseStart: function(event) {
++		var that = this,
++			options = this.options;
++
++		this.opos = [event.pageX, event.pageY];
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		this.selectees = $(options.filter, this.element[0]);
++
++		this._trigger("start", event);
++
++		$(options.appendTo).append(this.helper);
++		// position helper (lasso)
++		this.helper.css({
++			"left": event.pageX,
++			"top": event.pageY,
++			"width": 0,
++			"height": 0
++		});
++
++		if (options.autoRefresh) {
++			this.refresh();
++		}
++
++		this.selectees.filter(".ui-selected").each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.startselected = true;
++			if (!event.metaKey && !event.ctrlKey) {
++				selectee.$element.removeClass("ui-selected");
++				selectee.selected = false;
++				selectee.$element.addClass("ui-unselecting");
++				selectee.unselecting = true;
++				// selectable UNSELECTING callback
++				that._trigger("unselecting", event, {
++					unselecting: selectee.element
++				});
++			}
++		});
++
++		$(event.target).parents().addBack().each(function() {
++			var doSelect,
++				selectee = $.data(this, "selectable-item");
++			if (selectee) {
++				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
++				selectee.$element
++					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
++					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
++				selectee.unselecting = !doSelect;
++				selectee.selecting = doSelect;
++				selectee.selected = doSelect;
++				// selectable (UN)SELECTING callback
++				if (doSelect) {
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				} else {
++					that._trigger("unselecting", event, {
++						unselecting: selectee.element
++					});
++				}
++				return false;
++			}
++		});
++
++	},
++
++	_mouseDrag: function(event) {
++
++		this.dragged = true;
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		var tmp,
++			that = this,
++			options = this.options,
++			x1 = this.opos[0],
++			y1 = this.opos[1],
++			x2 = event.pageX,
++			y2 = event.pageY;
++
++		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
++		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
++		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
++
++		this.selectees.each(function() {
++			var selectee = $.data(this, "selectable-item"),
++				hit = false;
++
++			//prevent helper from being selected if appendTo: selectable
++			if (!selectee || selectee.element === that.element[0]) {
++				return;
++			}
++
++			if (options.tolerance === "touch") {
++				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
++			} else if (options.tolerance === "fit") {
++				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
++			}
++
++			if (hit) {
++				// SELECT
++				if (selectee.selected) {
++					selectee.$element.removeClass("ui-selected");
++					selectee.selected = false;
++				}
++				if (selectee.unselecting) {
++					selectee.$element.removeClass("ui-unselecting");
++					selectee.unselecting = false;
++				}
++				if (!selectee.selecting) {
++					selectee.$element.addClass("ui-selecting");
++					selectee.selecting = true;
++					// selectable SELECTING callback
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				}
++			} else {
++				// UNSELECT
++				if (selectee.selecting) {
++					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						selectee.$element.addClass("ui-selected");
++						selectee.selected = true;
++					} else {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						if (selectee.startselected) {
++							selectee.$element.addClass("ui-unselecting");
++							selectee.unselecting = true;
++						}
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++				if (selectee.selected) {
++					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
++						selectee.$element.removeClass("ui-selected");
++						selectee.selected = false;
++
++						selectee.$element.addClass("ui-unselecting");
++						selectee.unselecting = true;
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++			}
++		});
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++		var that = this;
++
++		this.dragged = false;
++
++		$(".ui-unselecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-unselecting");
++			selectee.unselecting = false;
++			selectee.startselected = false;
++			that._trigger("unselected", event, {
++				unselected: selectee.element
++			});
++		});
++		$(".ui-selecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
++			selectee.selecting = false;
++			selectee.selected = true;
++			selectee.startselected = true;
++			that._trigger("selected", event, {
++				selected: selectee.element
++			});
++		});
++		this._trigger("stop", event);
++
++		this.helper.remove();
++
++		return false;
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++/*jshint loopfunc: true */
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++function isFloating(item) {
++	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
++}
++
++$.widget("ui.sortable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "sort",
++	ready: false,
++	options: {
++		appendTo: "parent",
++		axis: false,
++		connectWith: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		dropOnEmpty: true,
++		forcePlaceholderSize: false,
++		forceHelperSize: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		items: "> *",
++		opacity: false,
++		placeholder: false,
++		revert: false,
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		scope: "default",
++		tolerance: "intersect",
++		zIndex: 1000,
++
++		// callbacks
++		activate: null,
++		beforeStop: null,
++		change: null,
++		deactivate: null,
++		out: null,
++		over: null,
++		receive: null,
++		remove: null,
++		sort: null,
++		start: null,
++		stop: null,
++		update: null
++	},
++	_create: function() {
++
++		var o = this.options;
++		this.containerCache = {};
++		this.element.addClass("ui-sortable");
++
++		//Get the items
++		this.refresh();
++
++		//Let's determine if the items are being displayed horizontally
++		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
++
++		//Let's determine the parent's offset
++		this.offset = this.element.offset();
++
++		//Initialize mouse events for interaction
++		this._mouseInit();
++
++		//We're ready to go
++		this.ready = true;
++
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass("ui-sortable ui-sortable-disabled");
++		this._mouseDestroy();
++
++		for ( var i = this.items.length - 1; i >= 0; i-- ) {
++			this.items[i].item.removeData(this.widgetName + "-item");
++		}
++
++		return this;
++	},
++
++	_setOption: function(key, value){
++		if ( key === "disabled" ) {
++			this.options[ key ] = value;
++
++			this.widget().toggleClass( "ui-sortable-disabled", !!value );
++		} else {
++			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
++			$.Widget.prototype._setOption.apply(this, arguments);
++		}
++	},
++
++	_mouseCapture: function(event, overrideHandle) {
++		var currentItem = null,
++			validHandle = false,
++			that = this;
++
++		if (this.reverting) {
++			return false;
++		}
++
++		if(this.options.disabled || this.options.type === "static") {
++			return false;
++		}
++
++		//We have to refresh the items data once first
++		this._refreshItems(event);
++
++		//Find out if the clicked node (or one of its parents) is a actual item in this.items
++		$(event.target).parents().each(function() {
++			if($.data(this, that.widgetName + "-item") === that) {
++				currentItem = $(this);
++				return false;
++			}
++		});
++		if($.data(event.target, that.widgetName + "-item") === that) {
++			currentItem = $(event.target);
++		}
++
++		if(!currentItem) {
++			return false;
++		}
++		if(this.options.handle && !overrideHandle) {
++			$(this.options.handle, currentItem).find("*").addBack().each(function() {
++				if(this === event.target) {
++					validHandle = true;
++				}
++			});
++			if(!validHandle) {
++				return false;
++			}
++		}
++
++		this.currentItem = currentItem;
++		this._removeCurrentsFromItems();
++		return true;
++
++	},
++
++	_mouseStart: function(event, overrideHandle, noActivation) {
++
++		var i, body,
++			o = this.options;
++
++		this.currentContainer = this;
++
++		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
++		this.refreshPositions();
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Get the next scrolling parent
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.currentItem.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		// Only after we got the offset, we can change the helper's position to absolute
++		// TODO: Still need to figure out a way to make relative sorting possible
++		this.helper.css("position", "absolute");
++		this.cssPosition = this.helper.css("position");
++
++		//Generate the original position
++		this.originalPosition = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Cache the former DOM position
++		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
++
++		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.currentItem.hide();
++		}
++
++		//Create the placeholder
++		this._createPlaceholder();
++
++		//Set a containment if given in the options
++		if(o.containment) {
++			this._setContainment();
++		}
++
++		if( o.cursor && o.cursor !== "auto" ) { // cursor option
++			body = this.document.find( "body" );
++
++			// support: IE
++			this.storedCursor = body.css( "cursor" );
++			body.css( "cursor", o.cursor );
++
++			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
++		}
++
++		if(o.opacity) { // opacity option
++			if (this.helper.css("opacity")) {
++				this._storedOpacity = this.helper.css("opacity");
++			}
++			this.helper.css("opacity", o.opacity);
++		}
++
++		if(o.zIndex) { // zIndex option
++			if (this.helper.css("zIndex")) {
++				this._storedZIndex = this.helper.css("zIndex");
++			}
++			this.helper.css("zIndex", o.zIndex);
++		}
++
++		//Prepare scrolling
++		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++			this.overflowOffset = this.scrollParent.offset();
++		}
++
++		//Call callbacks
++		this._trigger("start", event, this._uiHash());
++
++		//Recache the helper size
++		if(!this._preserveHelperProportions) {
++			this._cacheHelperProportions();
++		}
++
++
++		//Post "activate" events to possible containers
++		if( !noActivation ) {
++			for ( i = this.containers.length - 1; i >= 0; i-- ) {
++				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
++			}
++		}
++
++		//Prepare possible droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++		this.dragging = true;
++
++		this.helper.addClass("ui-sortable-helper");
++		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		return true;
++
++	},
++
++	_mouseDrag: function(event) {
++		var i, item, itemElement, intersection,
++			o = this.options,
++			scrolled = false;
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		if (!this.lastPositionAbs) {
++			this.lastPositionAbs = this.positionAbs;
++		}
++
++		//Do scrolling
++		if(this.options.scroll) {
++			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++
++				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++
++				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++
++			} else {
++
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++
++			}
++
++			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++				$.ui.ddmanager.prepareOffsets(this, event);
++			}
++		}
++
++		//Regenerate the absolute position used for position checks
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Set the helper position
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++
++		//Rearrange
++		for (i = this.items.length - 1; i >= 0; i--) {
++
++			//Cache variables and intersection, continue if no intersection
++			item = this.items[i];
++			itemElement = item.item[0];
++			intersection = this._intersectsWithPointer(item);
++			if (!intersection) {
++				continue;
++			}
++
++			// Only put the placeholder inside the current Container, skip all
++			// items form other containers. This works because when moving
++			// an item from one container to another the
++			// currentContainer is switched before the placeholder is moved.
++			//
++			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
++			// beetween the outer and inner container.
++			if (item.instance !== this.currentContainer) {
++				continue;
++			}
++
++			// cannot intersect with itself
++			// no useless actions that have been done before
++			// no action if the item moved is the parent of the item checked
++			if (itemElement !== this.currentItem[0] &&
++				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
++				!$.contains(this.placeholder[0], itemElement) &&
++				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
++			) {
++
++				this.direction = intersection === 1 ? "down" : "up";
++
++				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
++					this._rearrange(event, item);
++				} else {
++					break;
++				}
++
++				this._trigger("change", event, this._uiHash());
++				break;
++			}
++		}
++
++		//Post events to containers
++		this._contactContainers(event);
++
++		//Interconnect with droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		//Call callbacks
++		this._trigger("sort", event, this._uiHash());
++
++		this.lastPositionAbs = this.positionAbs;
++		return false;
++
++	},
++
++	_mouseStop: function(event, noPropagation) {
++
++		if(!event) {
++			return;
++		}
++
++		//If we are using droppables, inform the manager about the drop
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			$.ui.ddmanager.drop(this, event);
++		}
++
++		if(this.options.revert) {
++			var that = this,
++				cur = this.placeholder.offset(),
++				axis = this.options.axis,
++				animation = {};
++
++			if ( !axis || axis === "x" ) {
++				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
++			}
++			if ( !axis || axis === "y" ) {
++				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
++			}
++			this.reverting = true;
++			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
++				that._clear(event);
++			});
++		} else {
++			this._clear(event, noPropagation);
++		}
++
++		return false;
++
++	},
++
++	cancel: function() {
++
++		if(this.dragging) {
++
++			this._mouseUp({ target: null });
++
++			if(this.options.helper === "original") {
++				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++			} else {
++				this.currentItem.show();
++			}
++
++			//Post deactivating events to containers
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", null, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		if (this.placeholder) {
++			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++			if(this.placeholder[0].parentNode) {
++				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++			}
++			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
++				this.helper.remove();
++			}
++
++			$.extend(this, {
++				helper: null,
++				dragging: false,
++				reverting: false,
++				_noFinalSort: null
++			});
++
++			if(this.domPosition.prev) {
++				$(this.domPosition.prev).after(this.currentItem);
++			} else {
++				$(this.domPosition.parent).prepend(this.currentItem);
++			}
++		}
++
++		return this;
++
++	},
++
++	serialize: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			str = [];
++		o = o || {};
++
++		$(items).each(function() {
++			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
++			if (res) {
++				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
++			}
++		});
++
++		if(!str.length && o.key) {
++			str.push(o.key + "=");
++		}
++
++		return str.join("&");
++
++	},
++
++	toArray: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			ret = [];
++
++		o = o || {};
++
++		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
++		return ret;
++
++	},
++
++	/* Be careful with the following core functions */
++	_intersectsWith: function(item) {
++
++		var x1 = this.positionAbs.left,
++			x2 = x1 + this.helperProportions.width,
++			y1 = this.positionAbs.top,
++			y2 = y1 + this.helperProportions.height,
++			l = item.left,
++			r = l + item.width,
++			t = item.top,
++			b = t + item.height,
++			dyClick = this.offset.click.top,
++			dxClick = this.offset.click.left,
++			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
++			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
++			isOverElement = isOverElementHeight && isOverElementWidth;
++
++		if ( this.options.tolerance === "pointer" ||
++			this.options.forcePointerForContainers ||
++			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
++		) {
++			return isOverElement;
++		} else {
++
++			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
++				x2 - (this.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
++				y2 - (this.helperProportions.height / 2) < b ); // Top Half
++
++		}
++	},
++
++	_intersectsWithPointer: function(item) {
++
++		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
++			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
++			isOverElement = isOverElementHeight && isOverElementWidth,
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (!isOverElement) {
++			return false;
++		}
++
++		return this.floating ?
++			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
++			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
++
++	},
++
++	_intersectsWithSides: function(item) {
++
++		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
++			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (this.floating && horizontalDirection) {
++			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
++		} else {
++			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
++		}
++
++	},
++
++	_getDragVerticalDirection: function() {
++		var delta = this.positionAbs.top - this.lastPositionAbs.top;
++		return delta !== 0 && (delta > 0 ? "down" : "up");
++	},
++
++	_getDragHorizontalDirection: function() {
++		var delta = this.positionAbs.left - this.lastPositionAbs.left;
++		return delta !== 0 && (delta > 0 ? "right" : "left");
++	},
++
++	refresh: function(event) {
++		this._refreshItems(event);
++		this.refreshPositions();
++		return this;
++	},
++
++	_connectWith: function() {
++		var options = this.options;
++		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
++	},
++
++	_getItemsAsjQuery: function(connected) {
++
++		var i, j, cur, inst,
++			items = [],
++			queries = [],
++			connectWith = this._connectWith();
++
++		if(connectWith && connected) {
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for ( j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
++					}
++				}
++			}
++		}
++
++		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
++
++		for (i = queries.length - 1; i >= 0; i--){
++			queries[i][0].each(function() {
++				items.push(this);
++			});
++		}
++
++		return $(items);
++
++	},
++
++	_removeCurrentsFromItems: function() {
++
++		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
++
++		this.items = $.grep(this.items, function (item) {
++			for (var j=0; j < list.length; j++) {
++				if(list[j] === item.item[0]) {
++					return false;
++				}
++			}
++			return true;
++		});
++
++	},
++
++	_refreshItems: function(event) {
++
++		this.items = [];
++		this.containers = [this];
++
++		var i, j, cur, inst, targetData, _queries, item, queriesLength,
++			items = this.items,
++			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
++			connectWith = this._connectWith();
++
++		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for (j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
++						this.containers.push(inst);
++					}
++				}
++			}
++		}
++
++		for (i = queries.length - 1; i >= 0; i--) {
++			targetData = queries[i][1];
++			_queries = queries[i][0];
++
++			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
++				item = $(_queries[j]);
++
++				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
++
++				items.push({
++					item: item,
++					instance: targetData,
++					width: 0, height: 0,
++					left: 0, top: 0
++				});
++			}
++		}
++
++	},
++
++	refreshPositions: function(fast) {
++
++		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
++		if(this.offsetParent && this.helper) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		var i, item, t, p;
++
++		for (i = this.items.length - 1; i >= 0; i--){
++			item = this.items[i];
++
++			//We ignore calculating positions of all connected containers when we're not over them
++			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
++				continue;
++			}
++
++			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
++
++			if (!fast) {
++				item.width = t.outerWidth();
++				item.height = t.outerHeight();
++			}
++
++			p = t.offset();
++			item.left = p.left;
++			item.top = p.top;
++		}
++
++		if(this.options.custom && this.options.custom.refreshContainers) {
++			this.options.custom.refreshContainers.call(this);
++		} else {
++			for (i = this.containers.length - 1; i >= 0; i--){
++				p = this.containers[i].element.offset();
++				this.containers[i].containerCache.left = p.left;
++				this.containers[i].containerCache.top = p.top;
++				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
++				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
++			}
++		}
++
++		return this;
++	},
++
++	_createPlaceholder: function(that) {
++		that = that || this;
++		var className,
++			o = that.options;
++
++		if(!o.placeholder || o.placeholder.constructor === String) {
++			className = o.placeholder;
++			o.placeholder = {
++				element: function() {
++
++					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
++						element = $( "<" + nodeName + ">", that.document[0] )
++							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
++							.removeClass("ui-sortable-helper");
++
++					if ( nodeName === "tr" ) {
++						that.currentItem.children().each(function() {
++							$( "<td>&#160;</td>", that.document[0] )
++								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
++								.appendTo( element );
++						});
++					} else if ( nodeName === "img" ) {
++						element.attr( "src", that.currentItem.attr( "src" ) );
++					}
++
++					if ( !className ) {
++						element.css( "visibility", "hidden" );
++					}
++
++					return element;
++				},
++				update: function(container, p) {
++
++					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
++					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
++					if(className && !o.forcePlaceholderSize) {
++						return;
++					}
++
++					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
++					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
++					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
++				}
++			};
++		}
++
++		//Create the placeholder
++		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
++
++		//Append it after the actual current item
++		that.currentItem.after(that.placeholder);
++
++		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
++		o.placeholder.update(that, that.placeholder);
++
++	},
++
++	_contactContainers: function(event) {
++		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
++			innermostContainer = null,
++			innermostIndex = null;
++
++		// get innermost container that intersects with item
++		for (i = this.containers.length - 1; i >= 0; i--) {
++
++			// never consider a container that's located within the item itself
++			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
++				continue;
++			}
++
++			if(this._intersectsWith(this.containers[i].containerCache)) {
++
++				// if we've already found a container and it's more "inner" than this, then continue
++				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
++					continue;
++				}
++
++				innermostContainer = this.containers[i];
++				innermostIndex = i;
++
++			} else {
++				// container doesn't intersect. trigger "out" event if necessary
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", event, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		// if no intersecting containers found, return
++		if(!innermostContainer) {
++			return;
++		}
++
++		// move the item into the container if it's not there already
++		if(this.containers.length === 1) {
++			if (!this.containers[innermostIndex].containerCache.over) {
++				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++				this.containers[innermostIndex].containerCache.over = 1;
++			}
++		} else {
++
++			//When entering a new container, we will find the item with the least distance and append our item near it
++			dist = 10000;
++			itemWithLeastDistance = null;
++			floating = innermostContainer.floating || isFloating(this.currentItem);
++			posProperty = floating ? "left" : "top";
++			sizeProperty = floating ? "width" : "height";
++			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
++			for (j = this.items.length - 1; j >= 0; j--) {
++				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
++					continue;
++				}
++				if(this.items[j].item[0] === this.currentItem[0]) {
++					continue;
++				}
++				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
++					continue;
++				}
++				cur = this.items[j].item.offset()[posProperty];
++				nearBottom = false;
++				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
++					nearBottom = true;
++					cur += this.items[j][sizeProperty];
++				}
++
++				if(Math.abs(cur - base) < dist) {
++					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
++					this.direction = nearBottom ? "up": "down";
++				}
++			}
++
++			//Check if dropOnEmpty is enabled
++			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
++				return;
++			}
++
++			if(this.currentContainer === this.containers[innermostIndex]) {
++				return;
++			}
++
++			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
++			this._trigger("change", event, this._uiHash());
++			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
++			this.currentContainer = this.containers[innermostIndex];
++
++			//Update the placeholder
++			this.options.placeholder.update(this.currentContainer, this.placeholder);
++
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++			this.containers[innermostIndex].containerCache.over = 1;
++		}
++
++
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
++
++		//Add the helper to the DOM if that didn't happen already
++		if(!helper.parents("body").length) {
++			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
++		}
++
++		if(helper[0] === this.currentItem[0]) {
++			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
++		}
++
++		if(!helper[0].style.width || o.forceHelperSize) {
++			helper.width(this.currentItem.width());
++		}
++		if(!helper[0].style.height || o.forceHelperSize) {
++			helper.height(this.currentItem.height());
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		// This needs to be actually done for all browsers, since pageX/pageY includes this information
++		// with an ugly IE fix
++		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.currentItem.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
++			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var ce, co, over,
++			o = this.options;
++		if(o.containment === "parent") {
++			o.containment = this.helper[0].parentNode;
++		}
++		if(o.containment === "document" || o.containment === "window") {
++			this.containment = [
++				0 - this.offset.relative.left - this.offset.parent.left,
++				0 - this.offset.relative.top - this.offset.parent.top,
++				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
++				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++		if(!(/^(document|window|parent)$/).test(o.containment)) {
++			ce = $(o.containment)[0];
++			co = $(o.containment).offset();
++			over = ($(ce).css("overflow") !== "hidden");
++
++			this.containment = [
++				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
++				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
++				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
++				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
++			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var top, left,
++			o = this.options,
++			pageX = event.pageX,
++			pageY = event.pageY,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		// This is another very weird special case that only happens for relative elements:
++		// 1. If the css position is relative
++		// 2. and the scroll parent is the document or similar to the offset parent
++		// we have to refresh the relative offset during the scroll so there are no jumps
++		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
++			this.offset.relative = this._getRelativeOffset();
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++
++			if(this.containment) {
++				if(event.pageX - this.offset.click.left < this.containment[0]) {
++					pageX = this.containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < this.containment[1]) {
++					pageY = this.containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > this.containment[2]) {
++					pageX = this.containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > this.containment[3]) {
++					pageY = this.containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
++				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
++				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																// The absolute mouse position
++				this.offset.click.top -													// Click offset (relative to the element)
++				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX -																// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_rearrange: function(event, i, a, hardRefresh) {
++
++		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
++
++		//Various things done here to improve the performance:
++		// 1. we create a setTimeout, that calls refreshPositions
++		// 2. on the instance, we have a counter variable, that get's higher after every append
++		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
++		// 4. this lets only the last addition to the timeout stack through
++		this.counter = this.counter ? ++this.counter : 1;
++		var counter = this.counter;
++
++		this._delay(function() {
++			if(counter === this.counter) {
++				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
++			}
++		});
++
++	},
++
++	_clear: function(event, noPropagation) {
++
++		this.reverting = false;
++		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
++		// everything else normalized again
++		var i,
++			delayedTriggers = [];
++
++		// We first have to update the dom position of the actual currentItem
++		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
++		if(!this._noFinalSort && this.currentItem.parent().length) {
++			this.placeholder.before(this.currentItem);
++		}
++		this._noFinalSort = null;
++
++		if(this.helper[0] === this.currentItem[0]) {
++			for(i in this._storedCSS) {
++				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
++					this._storedCSS[i] = "";
++				}
++			}
++			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++		} else {
++			this.currentItem.show();
++		}
++
++		if(this.fromOutside && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
++		}
++		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
++		}
++
++		// Check if the items Container has Changed and trigger appropriate
++		// events.
++		if (this !== this.currentContainer) {
++			if(!noPropagation) {
++				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
++			}
++		}
++
++
++		//Post events to containers
++		for (i = this.containers.length - 1; i >= 0; i--){
++			if(!noPropagation) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++			}
++			if(this.containers[i].containerCache.over) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++				this.containers[i].containerCache.over = 0;
++			}
++		}
++
++		//Do what was originally in plugins
++		if ( this.storedCursor ) {
++			this.document.find( "body" ).css( "cursor", this.storedCursor );
++			this.storedStylesheet.remove();
++		}
++		if(this._storedOpacity) {
++			this.helper.css("opacity", this._storedOpacity);
++		}
++		if(this._storedZIndex) {
++			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
++		}
++
++		this.dragging = false;
++		if(this.cancelHelperRemoval) {
++			if(!noPropagation) {
++				this._trigger("beforeStop", event, this._uiHash());
++				for (i=0; i < delayedTriggers.length; i++) {
++					delayedTriggers[i].call(this, event);
++				} //Trigger all delayed events
++				this._trigger("stop", event, this._uiHash());
++			}
++
++			this.fromOutside = false;
++			return false;
++		}
++
++		if(!noPropagation) {
++			this._trigger("beforeStop", event, this._uiHash());
++		}
++
++		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.helper.remove();
++		}
++		this.helper = null;
++
++		if(!noPropagation) {
++			for (i=0; i < delayedTriggers.length; i++) {
++				delayedTriggers[i].call(this, event);
++			} //Trigger all delayed events
++			this._trigger("stop", event, this._uiHash());
++		}
++
++		this.fromOutside = false;
++		return true;
++
++	},
++
++	_trigger: function() {
++		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
++			this.cancel();
++		}
++	},
++
++	_uiHash: function(_inst) {
++		var inst = _inst || this;
++		return {
++			helper: inst.helper,
++			placeholder: inst.placeholder || $([]),
++			position: inst.position,
++			originalPosition: inst.originalPosition,
++			offset: inst.positionAbs,
++			item: inst.currentItem,
++			sender: _inst ? _inst.element : null
++		};
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++var uid = 0,
++	hideProps = {},
++	showProps = {};
++
++hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
++	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
++showProps.height = showProps.paddingTop = showProps.paddingBottom =
++	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
++
++$.widget( "ui.accordion", {
++	version: "1.10.3",
++	options: {
++		active: 0,
++		animate: {},
++		collapsible: false,
++		event: "click",
++		header: "> li > :first-child,> :not(li):even",
++		heightStyle: "auto",
++		icons: {
++			activeHeader: "ui-icon-triangle-1-s",
++			header: "ui-icon-triangle-1-e"
++		},
++
++		// callbacks
++		activate: null,
++		beforeActivate: null
++	},
++
++	_create: function() {
++		var options = this.options;
++		this.prevShow = this.prevHide = $();
++		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
++			// ARIA
++			.attr( "role", "tablist" );
++
++		// don't allow collapsible: false and active: false / null
++		if ( !options.collapsible && (options.active === false || options.active == null) ) {
++			options.active = 0;
++		}
++
++		this._processPanels();
++		// handle negative values
++		if ( options.active < 0 ) {
++			options.active += this.headers.length;
++		}
++		this._refresh();
++	},
++
++	_getCreateEventData: function() {
++		return {
++			header: this.active,
++			panel: !this.active.length ? $() : this.active.next(),
++			content: !this.active.length ? $() : this.active.next()
++		};
++	},
++
++	_createIcons: function() {
++		var icons = this.options.icons;
++		if ( icons ) {
++			$( "<span>" )
++				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
++				.prependTo( this.headers );
++			this.active.children( ".ui-accordion-header-icon" )
++				.removeClass( icons.header )
++				.addClass( icons.activeHeader );
++			this.headers.addClass( "ui-accordion-icons" );
++		}
++	},
++
++	_destroyIcons: function() {
++		this.headers
++			.removeClass( "ui-accordion-icons" )
++			.children( ".ui-accordion-header-icon" )
++				.remove();
++	},
++
++	_destroy: function() {
++		var contents;
++
++		// clean up main element
++		this.element
++			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
++			.removeAttr( "role" );
++
++		// clean up headers
++		this.headers
++			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-selected" )
++			.removeAttr( "aria-controls" )
++			.removeAttr( "tabIndex" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		this._destroyIcons();
++
++		// clean up content panels
++		contents = this.headers.next()
++			.css( "display", "" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-expanded" )
++			.removeAttr( "aria-hidden" )
++			.removeAttr( "aria-labelledby" )
++			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		if ( this.options.heightStyle !== "content" ) {
++			contents.css( "height", "" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "event" ) {
++			if ( this.options.event ) {
++				this._off( this.headers, this.options.event );
++			}
++			this._setupEvents( value );
++		}
++
++		this._super( key, value );
++
++		// setting collapsible: false while collapsed; open first panel
++		if ( key === "collapsible" && !value && this.options.active === false ) {
++			this._activate( 0 );
++		}
++
++		if ( key === "icons" ) {
++			this._destroyIcons();
++			if ( value ) {
++				this._createIcons();
++			}
++		}
++
++		// #5332 - opacity doesn't cascade to positioned elements in IE
++		// so we need to add the disabled class to the headers and panels
++		if ( key === "disabled" ) {
++			this.headers.add( this.headers.next() )
++				.toggleClass( "ui-state-disabled", !!value );
++		}
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		if ( event.altKey || event.ctrlKey ) {
++			return;
++		}
++
++		var keyCode = $.ui.keyCode,
++			length = this.headers.length,
++			currentIndex = this.headers.index( event.target ),
++			toFocus = false;
++
++		switch ( event.keyCode ) {
++			case keyCode.RIGHT:
++			case keyCode.DOWN:
++				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
++				break;
++			case keyCode.LEFT:
++			case keyCode.UP:
++				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
++				break;
++			case keyCode.SPACE:
++			case keyCode.ENTER:
++				this._eventHandler( event );
++				break;
++			case keyCode.HOME:
++				toFocus = this.headers[ 0 ];
++				break;
++			case keyCode.END:
++				toFocus = this.headers[ length - 1 ];
++				break;
++		}
++
++		if ( toFocus ) {
++			$( event.target ).attr( "tabIndex", -1 );
++			$( toFocus ).attr( "tabIndex", 0 );
++			toFocus.focus();
++			event.preventDefault();
++		}
++	},
++
++	_panelKeyDown : function( event ) {
++		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
++			$( event.currentTarget ).prev().focus();
++		}
++	},
++
++	refresh: function() {
++		var options = this.options;
++		this._processPanels();
++
++		// was collapsed or no panel
++		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
++			options.active = false;
++			this.active = $();
++		// active false only when collapsible is true
++		} else if ( options.active === false ) {
++			this._activate( 0 );
++		// was active, but active panel is gone
++		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining panel are disabled
++			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous panel
++			} else {
++				this._activate( Math.max( 0, options.active - 1 ) );
++			}
++		// was active, active panel still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.headers.index( this.active );
++		}
++
++		this._destroyIcons();
++
++		this._refresh();
++	},
++
++	_processPanels: function() {
++		this.headers = this.element.find( this.options.header )
++			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
++
++		this.headers.next()
++			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
++			.filter(":not(.ui-accordion-content-active)")
++			.hide();
++	},
++
++	_refresh: function() {
++		var maxHeight,
++			options = this.options,
++			heightStyle = options.heightStyle,
++			parent = this.element.parent(),
++			accordionId = this.accordionId = "ui-accordion-" +
++				(this.element.attr( "id" ) || ++uid);
++
++		this.active = this._findActive( options.active )
++			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
++			.removeClass( "ui-corner-all" );
++		this.active.next()
++			.addClass( "ui-accordion-content-active" )
++			.show();
++
++		this.headers
++			.attr( "role", "tab" )
++			.each(function( i ) {
++				var header = $( this ),
++					headerId = header.attr( "id" ),
++					panel = header.next(),
++					panelId = panel.attr( "id" );
++				if ( !headerId ) {
++					headerId = accordionId + "-header-" + i;
++					header.attr( "id", headerId );
++				}
++				if ( !panelId ) {
++					panelId = accordionId + "-panel-" + i;
++					panel.attr( "id", panelId );
++				}
++				header.attr( "aria-controls", panelId );
++				panel.attr( "aria-labelledby", headerId );
++			})
++			.next()
++				.attr( "role", "tabpanel" );
++
++		this.headers
++			.not( this.active )
++			.attr({
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.next()
++				.attr({
++					"aria-expanded": "false",
++					"aria-hidden": "true"
++				})
++				.hide();
++
++		// make sure at least one header is in the tab order
++		if ( !this.active.length ) {
++			this.headers.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active.attr({
++				"aria-selected": "true",
++				tabIndex: 0
++			})
++			.next()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++
++		this._createIcons();
++
++		this._setupEvents( options.event );
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.headers.each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.headers.next()
++				.each(function() {
++					$( this ).height( Math.max( 0, maxHeight -
++						$( this ).innerHeight() + $( this ).height() ) );
++				})
++				.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.headers.next()
++				.each(function() {
++					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
++				})
++				.height( maxHeight );
++		}
++	},
++
++	_activate: function( index ) {
++		var active = this._findActive( index )[ 0 ];
++
++		// trying to activate the already active panel
++		if ( active === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the currently active header
++		active = active || this.active[ 0 ];
++
++		this._eventHandler({
++			target: active,
++			currentTarget: active,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( selector ) {
++		return typeof selector === "number" ? this.headers.eq( selector ) : $();
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			keydown: "_keydown"
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.headers.add( this.headers.next() ) );
++		this._on( this.headers, events );
++		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
++		this._hoverable( this.headers );
++		this._focusable( this.headers );
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			clicked = $( event.currentTarget ),
++			clickedIsActive = clicked[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : clicked.next(),
++			toHide = active.next(),
++			eventData = {
++				oldHeader: active,
++				oldPanel: toHide,
++				newHeader: collapsing ? $() : clicked,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if (
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.headers.index( clicked );
++
++		// when the call to ._toggle() comes after the class changes
++		// it causes a very odd bug in IE 8 (see #6720)
++		this.active = clickedIsActive ? $() : clicked;
++		this._toggle( eventData );
++
++		// switch classes
++		// corner classes on the previously active header stay after the animation
++		active.removeClass( "ui-accordion-header-active ui-state-active" );
++		if ( options.icons ) {
++			active.children( ".ui-accordion-header-icon" )
++				.removeClass( options.icons.activeHeader )
++				.addClass( options.icons.header );
++		}
++
++		if ( !clickedIsActive ) {
++			clicked
++				.removeClass( "ui-corner-all" )
++				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
++			if ( options.icons ) {
++				clicked.children( ".ui-accordion-header-icon" )
++					.removeClass( options.icons.header )
++					.addClass( options.icons.activeHeader );
++			}
++
++			clicked
++				.next()
++				.addClass( "ui-accordion-content-active" );
++		}
++	},
++
++	_toggle: function( data ) {
++		var toShow = data.newPanel,
++			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
++
++		// handle activating a panel during the animation for another activation
++		this.prevShow.add( this.prevHide ).stop( true, true );
++		this.prevShow = toShow;
++		this.prevHide = toHide;
++
++		if ( this.options.animate ) {
++			this._animate( toShow, toHide, data );
++		} else {
++			toHide.hide();
++			toShow.show();
++			this._toggleComplete( data );
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		toHide.prev().attr( "aria-selected", "false" );
++		// if we're switching panels, remove the old header from the tab order
++		// if we're opening from collapsed state, remove the previous header from the tab order
++		// if we're collapsing, then keep the collapsing header in the tab order
++		if ( toShow.length && toHide.length ) {
++			toHide.prev().attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.headers.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow
++			.attr({
++				"aria-expanded": "true",
++				"aria-hidden": "false"
++			})
++			.prev()
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++	},
++
++	_animate: function( toShow, toHide, data ) {
++		var total, easing, duration,
++			that = this,
++			adjust = 0,
++			down = toShow.length &&
++				( !toHide.length || ( toShow.index() < toHide.index() ) ),
++			animate = this.options.animate || {},
++			options = down && animate.down || animate,
++			complete = function() {
++				that._toggleComplete( data );
++			};
++
++		if ( typeof options === "number" ) {
++			duration = options;
++		}
++		if ( typeof options === "string" ) {
++			easing = options;
++		}
++		// fall back from options to animation in case of partial down settings
++		easing = easing || options.easing || animate.easing;
++		duration = duration || options.duration || animate.duration;
++
++		if ( !toHide.length ) {
++			return toShow.animate( showProps, duration, easing, complete );
++		}
++		if ( !toShow.length ) {
++			return toHide.animate( hideProps, duration, easing, complete );
++		}
++
++		total = toShow.show().outerHeight();
++		toHide.animate( hideProps, {
++			duration: duration,
++			easing: easing,
++			step: function( now, fx ) {
++				fx.now = Math.round( now );
++			}
++		});
++		toShow
++			.hide()
++			.animate( showProps, {
++				duration: duration,
++				easing: easing,
++				complete: complete,
++				step: function( now, fx ) {
++					fx.now = Math.round( now );
++					if ( fx.prop !== "height" ) {
++						adjust += fx.now;
++					} else if ( that.options.heightStyle !== "content" ) {
++						fx.now = Math.round( total - toHide.outerHeight() - adjust );
++						adjust = 0;
++					}
++				}
++			});
++	},
++
++	_toggleComplete: function( data ) {
++		var toHide = data.oldPanel;
++
++		toHide
++			.removeClass( "ui-accordion-content-active" )
++			.prev()
++				.removeClass( "ui-corner-top" )
++				.addClass( "ui-corner-all" );
++
++		// Work around for rendering bug in IE (#5421)
++		if ( toHide.length ) {
++			toHide.parent()[0].className = toHide.parent()[0].className;
++		}
++
++		this._trigger( "activate", null, data );
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++// used to prevent race conditions with remote data sources
++var requestIndex = 0;
++
++$.widget( "ui.autocomplete", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	options: {
++		appendTo: null,
++		autoFocus: false,
++		delay: 300,
++		minLength: 1,
++		position: {
++			my: "left top",
++			at: "left bottom",
++			collision: "none"
++		},
++		source: null,
++
++		// callbacks
++		change: null,
++		close: null,
++		focus: null,
++		open: null,
++		response: null,
++		search: null,
++		select: null
++	},
++
++	pending: 0,
++
++	_create: function() {
++		// Some browsers only repeat keydown events, not keypress events,
++		// so we use the suppressKeyPress flag to determine if we've already
++		// handled the keydown event. #7269
++		// Unfortunately the code for & in keypress is the same as the up arrow,
++		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
++		// events when we know the keydown event was used to modify the
++		// search term. #7799
++		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
++			nodeName = this.element[0].nodeName.toLowerCase(),
++			isTextarea = nodeName === "textarea",
++			isInput = nodeName === "input";
++
++		this.isMultiLine =
++			// Textareas are always multi-line
++			isTextarea ? true :
++			// Inputs are always single-line, even if inside a contentEditable element
++			// IE also treats inputs as contentEditable
++			isInput ? false :
++			// All other element types are determined by whether or not they're contentEditable
++			this.element.prop( "isContentEditable" );
++
++		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
++		this.isNewMenu = true;
++
++		this.element
++			.addClass( "ui-autocomplete-input" )
++			.attr( "autocomplete", "off" );
++
++		this._on( this.element, {
++			keydown: function( event ) {
++				/*jshint maxcomplexity:15*/
++				if ( this.element.prop( "readOnly" ) ) {
++					suppressKeyPress = true;
++					suppressInput = true;
++					suppressKeyPressRepeat = true;
++					return;
++				}
++
++				suppressKeyPress = false;
++				suppressInput = false;
++				suppressKeyPressRepeat = false;
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					suppressKeyPress = true;
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					suppressKeyPress = true;
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					suppressKeyPress = true;
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					suppressKeyPress = true;
++					this._keyEvent( "next", event );
++					break;
++				case keyCode.ENTER:
++				case keyCode.NUMPAD_ENTER:
++					// when menu is open and has focus
++					if ( this.menu.active ) {
++						// #6055 - Opera still allows the keypress to occur
++						// which causes forms to submit
++						suppressKeyPress = true;
++						event.preventDefault();
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.TAB:
++					if ( this.menu.active ) {
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.ESCAPE:
++					if ( this.menu.element.is( ":visible" ) ) {
++						this._value( this.term );
++						this.close( event );
++						// Different browsers have different default behavior for escape
++						// Single press can mean undo or clear
++						// Double press in IE means clear the whole form
++						event.preventDefault();
++					}
++					break;
++				default:
++					suppressKeyPressRepeat = true;
++					// search timeout should be triggered before the input value is changed
++					this._searchTimeout( event );
++					break;
++				}
++			},
++			keypress: function( event ) {
++				if ( suppressKeyPress ) {
++					suppressKeyPress = false;
++					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++						event.preventDefault();
++					}
++					return;
++				}
++				if ( suppressKeyPressRepeat ) {
++					return;
++				}
++
++				// replicate some key handlers to allow them to repeat in Firefox and Opera
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					this._keyEvent( "next", event );
++					break;
++				}
++			},
++			input: function( event ) {
++				if ( suppressInput ) {
++					suppressInput = false;
++					event.preventDefault();
++					return;
++				}
++				this._searchTimeout( event );
++			},
++			focus: function() {
++				this.selectedItem = null;
++				this.previous = this._value();
++			},
++			blur: function( event ) {
++				if ( this.cancelBlur ) {
++					delete this.cancelBlur;
++					return;
++				}
++
++				clearTimeout( this.searching );
++				this.close( event );
++				this._change( event );
++			}
++		});
++
++		this._initSource();
++		this.menu = $( "<ul>" )
++			.addClass( "ui-autocomplete ui-front" )
++			.appendTo( this._appendTo() )
++			.menu({
++				// disable ARIA support, the live region takes care of that
++				role: null
++			})
++			.hide()
++			.data( "ui-menu" );
++
++		this._on( this.menu.element, {
++			mousedown: function( event ) {
++				// prevent moving focus out of the text field
++				event.preventDefault();
++
++				// IE doesn't prevent moving focus even with event.preventDefault()
++				// so we set a flag to know when we should ignore the blur event
++				this.cancelBlur = true;
++				this._delay(function() {
++					delete this.cancelBlur;
++				});
++
++				// clicking on the scrollbar causes focus to shift to the body
++				// but we can't detect a mouseup or a click immediately afterward
++				// so we have to track the next mousedown and close the menu if
++				// the user clicks somewhere outside of the autocomplete
++				var menuElement = this.menu.element[ 0 ];
++				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
++					this._delay(function() {
++						var that = this;
++						this.document.one( "mousedown", function( event ) {
++							if ( event.target !== that.element[ 0 ] &&
++									event.target !== menuElement &&
++									!$.contains( menuElement, event.target ) ) {
++								that.close();
++							}
++						});
++					});
++				}
++			},
++			menufocus: function( event, ui ) {
++				// support: Firefox
++				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
++				if ( this.isNewMenu ) {
++					this.isNewMenu = false;
++					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
++						this.menu.blur();
++
++						this.document.one( "mousemove", function() {
++							$( event.target ).trigger( event.originalEvent );
++						});
++
++						return;
++					}
++				}
++
++				var item = ui.item.data( "ui-autocomplete-item" );
++				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
++					// use value to match what will end up in the input, if it was a key event
++					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
++						this._value( item.value );
++					}
++				} else {
++					// Normally the input is populated with the item's value as the
++					// menu is navigated, causing screen readers to notice a change and
++					// announce the item. Since the focus event was canceled, this doesn't
++					// happen, so we update the live region so that screen readers can
++					// still notice the change and announce it.
++					this.liveRegion.text( item.value );
++				}
++			},
++			menuselect: function( event, ui ) {
++				var item = ui.item.data( "ui-autocomplete-item" ),
++					previous = this.previous;
++
++				// only trigger when focus was lost (click on menu)
++				if ( this.element[0] !== this.document[0].activeElement ) {
++					this.element.focus();
++					this.previous = previous;
++					// #6109 - IE triggers two focus events and the second
++					// is asynchronous, so we need to reset the previous
++					// term synchronously and asynchronously :-(
++					this._delay(function() {
++						this.previous = previous;
++						this.selectedItem = item;
++					});
++				}
++
++				if ( false !== this._trigger( "select", event, { item: item } ) ) {
++					this._value( item.value );
++				}
++				// reset the term after the select event
++				// this allows custom select handling to work properly
++				this.term = this._value();
++
++				this.close( event );
++				this.selectedItem = item;
++			}
++		});
++
++		this.liveRegion = $( "<span>", {
++				role: "status",
++				"aria-live": "polite"
++			})
++			.addClass( "ui-helper-hidden-accessible" )
++			.insertBefore( this.element );
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_destroy: function() {
++		clearTimeout( this.searching );
++		this.element
++			.removeClass( "ui-autocomplete-input" )
++			.removeAttr( "autocomplete" );
++		this.menu.element.remove();
++		this.liveRegion.remove();
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "source" ) {
++			this._initSource();
++		}
++		if ( key === "appendTo" ) {
++			this.menu.element.appendTo( this._appendTo() );
++		}
++		if ( key === "disabled" && value && this.xhr ) {
++			this.xhr.abort();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++
++		if ( element ) {
++			element = element.jquery || element.nodeType ?
++				$( element ) :
++				this.document.find( element ).eq( 0 );
++		}
++
++		if ( !element ) {
++			element = this.element.closest( ".ui-front" );
++		}
++
++		if ( !element.length ) {
++			element = this.document[0].body;
++		}
++
++		return element;
++	},
++
++	_initSource: function() {
++		var array, url,
++			that = this;
++		if ( $.isArray(this.options.source) ) {
++			array = this.options.source;
++			this.source = function( request, response ) {
++				response( $.ui.autocomplete.filter( array, request.term ) );
++			};
++		} else if ( typeof this.options.source === "string" ) {
++			url = this.options.source;
++			this.source = function( request, response ) {
++				if ( that.xhr ) {
++					that.xhr.abort();
++				}
++				that.xhr = $.ajax({
++					url: url,
++					data: request,
++					dataType: "json",
++					success: function( data ) {
++						response( data );
++					},
++					error: function() {
++						response( [] );
++					}
++				});
++			};
++		} else {
++			this.source = this.options.source;
++		}
++	},
++
++	_searchTimeout: function( event ) {
++		clearTimeout( this.searching );
++		this.searching = this._delay(function() {
++			// only search if the value has changed
++			if ( this.term !== this._value() ) {
++				this.selectedItem = null;
++				this.search( null, event );
++			}
++		}, this.options.delay );
++	},
++
++	search: function( value, event ) {
++		value = value != null ? value : this._value();
++
++		// always save the actual value, not the one passed as an argument
++		this.term = this._value();
++
++		if ( value.length < this.options.minLength ) {
++			return this.close( event );
++		}
++
++		if ( this._trigger( "search", event ) === false ) {
++			return;
++		}
++
++		return this._search( value );
++	},
++
++	_search: function( value ) {
++		this.pending++;
++		this.element.addClass( "ui-autocomplete-loading" );
++		this.cancelSearch = false;
++
++		this.source( { term: value }, this._response() );
++	},
++
++	_response: function() {
++		var that = this,
++			index = ++requestIndex;
++
++		return function( content ) {
++			if ( index === requestIndex ) {
++				that.__response( content );
++			}
++
++			that.pending--;
++			if ( !that.pending ) {
++				that.element.removeClass( "ui-autocomplete-loading" );
++			}
++		};
++	},
++
++	__response: function( content ) {
++		if ( content ) {
++			content = this._normalize( content );
++		}
++		this._trigger( "response", null, { content: content } );
++		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
++			this._suggest( content );
++			this._trigger( "open" );
++		} else {
++			// use ._close() instead of .close() so we don't cancel future searches
++			this._close();
++		}
++	},
++
++	close: function( event ) {
++		this.cancelSearch = true;
++		this._close( event );
++	},
++
++	_close: function( event ) {
++		if ( this.menu.element.is( ":visible" ) ) {
++			this.menu.element.hide();
++			this.menu.blur();
++			this.isNewMenu = true;
++			this._trigger( "close", event );
++		}
++	},
++
++	_change: function( event ) {
++		if ( this.previous !== this._value() ) {
++			this._trigger( "change", event, { item: this.selectedItem } );
++		}
++	},
++
++	_normalize: function( items ) {
++		// assume all items have the right format when the first item is complete
++		if ( items.length && items[0].label && items[0].value ) {
++			return items;
++		}
++		return $.map( items, function( item ) {
++			if ( typeof item === "string" ) {
++				return {
++					label: item,
++					value: item
++				};
++			}
++			return $.extend({
++				label: item.label || item.value,
++				value: item.value || item.label
++			}, item );
++		});
++	},
++
++	_suggest: function( items ) {
++		var ul = this.menu.element.empty();
++		this._renderMenu( ul, items );
++		this.isNewMenu = true;
++		this.menu.refresh();
++
++		// size and position menu
++		ul.show();
++		this._resizeMenu();
++		ul.position( $.extend({
++			of: this.element
++		}, this.options.position ));
++
++		if ( this.options.autoFocus ) {
++			this.menu.next();
++		}
++	},
++
++	_resizeMenu: function() {
++		var ul = this.menu.element;
++		ul.outerWidth( Math.max(
++			// Firefox wraps long text (possibly a rounding bug)
++			// so we add 1px to avoid the wrapping (#7513)
++			ul.width( "" ).outerWidth() + 1,
++			this.element.outerWidth()
++		) );
++	},
++
++	_renderMenu: function( ul, items ) {
++		var that = this;
++		$.each( items, function( index, item ) {
++			that._renderItemData( ul, item );
++		});
++	},
++
++	_renderItemData: function( ul, item ) {
++		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
++	},
++
++	_renderItem: function( ul, item ) {
++		return $( "<li>" )
++			.append( $( "<a>" ).text( item.label ) )
++			.appendTo( ul );
++	},
++
++	_move: function( direction, event ) {
++		if ( !this.menu.element.is( ":visible" ) ) {
++			this.search( null, event );
++			return;
++		}
++		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
++				this.menu.isLastItem() && /^next/.test( direction ) ) {
++			this._value( this.term );
++			this.menu.blur();
++			return;
++		}
++		this.menu[ direction ]( event );
++	},
++
++	widget: function() {
++		return this.menu.element;
++	},
++
++	_value: function() {
++		return this.valueMethod.apply( this.element, arguments );
++	},
++
++	_keyEvent: function( keyEvent, event ) {
++		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++			this._move( keyEvent, event );
++
++			// prevents moving cursor to beginning/end of the text field in some browsers
++			event.preventDefault();
++		}
++	}
++});
++
++$.extend( $.ui.autocomplete, {
++	escapeRegex: function( value ) {
++		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
++	},
++	filter: function(array, term) {
++		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
++		return $.grep( array, function(value) {
++			return matcher.test( value.label || value.value || value );
++		});
++	}
++});
++
++
++// live region extension, adding a `messages` option
++// NOTE: This is an experimental API. We are still investigating
++// a full solution for string manipulation and internationalization.
++$.widget( "ui.autocomplete", $.ui.autocomplete, {
++	options: {
++		messages: {
++			noResults: "No search results.",
++			results: function( amount ) {
++				return amount + ( amount > 1 ? " results are" : " result is" ) +
++					" available, use up and down arrow keys to navigate.";
++			}
++		}
++	},
++
++	__response: function( content ) {
++		var message;
++		this._superApply( arguments );
++		if ( this.options.disabled || this.cancelSearch ) {
++			return;
++		}
++		if ( content && content.length ) {
++			message = this.options.messages.results( content.length );
++		} else {
++			message = this.options.messages.noResults;
++		}
++		this.liveRegion.text( message );
++	}
++});
++
++}( jQuery ));
++(function( $, undefined ) {
++
++var lastActive, startXPos, startYPos, clickDragged,
++	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
++	stateClasses = "ui-state-hover ui-state-active ",
++	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
++	formResetHandler = function() {
++		var form = $( this );
++		setTimeout(function() {
++			form.find( ":ui-button" ).button( "refresh" );
++		}, 1 );
++	},
++	radioGroup = function( radio ) {
++		var name = radio.name,
++			form = radio.form,
++			radios = $( [] );
++		if ( name ) {
++			name = name.replace( /'/g, "\\'" );
++			if ( form ) {
++				radios = $( form ).find( "[name='" + name + "']" );
++			} else {
++				radios = $( "[name='" + name + "']", radio.ownerDocument )
++					.filter(function() {
++						return !this.form;
++					});
++			}
++		}
++		return radios;
++	};
++
++$.widget( "ui.button", {
++	version: "1.10.3",
++	defaultElement: "<button>",
++	options: {
++		disabled: null,
++		text: true,
++		label: null,
++		icons: {
++			primary: null,
++			secondary: null
++		}
++	},
++	_create: function() {
++		this.element.closest( "form" )
++			.unbind( "reset" + this.eventNamespace )
++			.bind( "reset" + this.eventNamespace, formResetHandler );
++
++		if ( typeof this.options.disabled !== "boolean" ) {
++			this.options.disabled = !!this.element.prop( "disabled" );
++		} else {
++			this.element.prop( "disabled", this.options.disabled );
++		}
++
++		this._determineButtonType();
++		this.hasTitle = !!this.buttonElement.attr( "title" );
++
++		var that = this,
++			options = this.options,
++			toggleButton = this.type === "checkbox" || this.type === "radio",
++			activeClass = !toggleButton ? "ui-state-active" : "",
++			focusClass = "ui-state-focus";
++
++		if ( options.label === null ) {
++			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
++		}
++
++		this._hoverable( this.buttonElement );
++
++		this.buttonElement
++			.addClass( baseClasses )
++			.attr( "role", "button" )
++			.bind( "mouseenter" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				if ( this === lastActive ) {
++					$( this ).addClass( "ui-state-active" );
++				}
++			})
++			.bind( "mouseleave" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( activeClass );
++			})
++			.bind( "click" + this.eventNamespace, function( event ) {
++				if ( options.disabled ) {
++					event.preventDefault();
++					event.stopImmediatePropagation();
++				}
++			});
++
++		this.element
++			.bind( "focus" + this.eventNamespace, function() {
++				// no need to check disabled, focus won't be triggered anyway
++				that.buttonElement.addClass( focusClass );
++			})
++			.bind( "blur" + this.eventNamespace, function() {
++				that.buttonElement.removeClass( focusClass );
++			});
++
++		if ( toggleButton ) {
++			this.element.bind( "change" + this.eventNamespace, function() {
++				if ( clickDragged ) {
++					return;
++				}
++				that.refresh();
++			});
++			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
++			// prevents issue where button state changes but checkbox/radio checked state
++			// does not in Firefox (see ticket #6970)
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					clickDragged = false;
++					startXPos = event.pageX;
++					startYPos = event.pageY;
++				})
++				.bind( "mouseup" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
++						clickDragged = true;
++					}
++			});
++		}
++
++		if ( this.type === "checkbox" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++			});
++		} else if ( this.type === "radio" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).addClass( "ui-state-active" );
++				that.buttonElement.attr( "aria-pressed", "true" );
++
++				var radio = that.element[ 0 ];
++				radioGroup( radio )
++					.not( radio )
++					.map(function() {
++						return $( this ).button( "widget" )[ 0 ];
++					})
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			});
++		} else {
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).addClass( "ui-state-active" );
++					lastActive = this;
++					that.document.one( "mouseup", function() {
++						lastActive = null;
++					});
++				})
++				.bind( "mouseup" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).removeClass( "ui-state-active" );
++				})
++				.bind( "keydown" + this.eventNamespace, function(event) {
++					if ( options.disabled ) {
++						return false;
++					}
++					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
++						$( this ).addClass( "ui-state-active" );
++					}
++				})
++				// see #8559, we bind to blur here in case the button element loses
++				// focus between keydown and keyup, it would be left in an "active" state
++				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
++					$( this ).removeClass( "ui-state-active" );
++				});
++
++			if ( this.buttonElement.is("a") ) {
++				this.buttonElement.keyup(function(event) {
++					if ( event.keyCode === $.ui.keyCode.SPACE ) {
++						// TODO pass through original event correctly (just as 2nd argument doesn't work)
++						$( this ).click();
++					}
++				});
++			}
++		}
++
++		// TODO: pull out $.Widget's handling for the disabled option into
++		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
++		// be overridden by individual plugins
++		this._setOption( "disabled", options.disabled );
++		this._resetButton();
++	},
++
++	_determineButtonType: function() {
++		var ancestor, labelSelector, checked;
++
++		if ( this.element.is("[type=checkbox]") ) {
++			this.type = "checkbox";
++		} else if ( this.element.is("[type=radio]") ) {
++			this.type = "radio";
++		} else if ( this.element.is("input") ) {
++			this.type = "input";
++		} else {
++			this.type = "button";
++		}
++
++		if ( this.type === "checkbox" || this.type === "radio" ) {
++			// we don't search against the document in case the element
++			// is disconnected from the DOM
++			ancestor = this.element.parents().last();
++			labelSelector = "label[for='" + this.element.attr("id") + "']";
++			this.buttonElement = ancestor.find( labelSelector );
++			if ( !this.buttonElement.length ) {
++				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
++				this.buttonElement = ancestor.filter( labelSelector );
++				if ( !this.buttonElement.length ) {
++					this.buttonElement = ancestor.find( labelSelector );
++				}
++			}
++			this.element.addClass( "ui-helper-hidden-accessible" );
++
++			checked = this.element.is( ":checked" );
++			if ( checked ) {
++				this.buttonElement.addClass( "ui-state-active" );
++			}
++			this.buttonElement.prop( "aria-pressed", checked );
++		} else {
++			this.buttonElement = this.element;
++		}
++	},
++
++	widget: function() {
++		return this.buttonElement;
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-helper-hidden-accessible" );
++		this.buttonElement
++			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
++			.removeAttr( "role" )
++			.removeAttr( "aria-pressed" )
++			.html( this.buttonElement.find(".ui-button-text").html() );
++
++		if ( !this.hasTitle ) {
++			this.buttonElement.removeAttr( "title" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++			} else {
++				this.element.prop( "disabled", false );
++			}
++			return;
++		}
++		this._resetButton();
++	},
++
++	refresh: function() {
++		//See #8237 & #8828
++		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
++
++		if ( isDisabled !== this.options.disabled ) {
++			this._setOption( "disabled", isDisabled );
++		}
++		if ( this.type === "radio" ) {
++			radioGroup( this.element[0] ).each(function() {
++				if ( $( this ).is( ":checked" ) ) {
++					$( this ).button( "widget" )
++						.addClass( "ui-state-active" )
++						.attr( "aria-pressed", "true" );
++				} else {
++					$( this ).button( "widget" )
++						.removeClass( "ui-state-active" )
++						.attr( "aria-pressed", "false" );
++				}
++			});
++		} else if ( this.type === "checkbox" ) {
++			if ( this.element.is( ":checked" ) ) {
++				this.buttonElement
++					.addClass( "ui-state-active" )
++					.attr( "aria-pressed", "true" );
++			} else {
++				this.buttonElement
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			}
++		}
++	},
++
++	_resetButton: function() {
++		if ( this.type === "input" ) {
++			if ( this.options.label ) {
++				this.element.val( this.options.label );
++			}
++			return;
++		}
++		var buttonElement = this.buttonElement.removeClass( typeClasses ),
++			buttonText = $( "<span></span>", this.document[0] )
++				.addClass( "ui-button-text" )
++				.html( this.options.label )
++				.appendTo( buttonElement.empty() )
++				.text(),
++			icons = this.options.icons,
++			multipleIcons = icons.primary && icons.secondary,
++			buttonClasses = [];
++
++		if ( icons.primary || icons.secondary ) {
++			if ( this.options.text ) {
++				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
++			}
++
++			if ( icons.primary ) {
++				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
++			}
++
++			if ( icons.secondary ) {
++				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
++			}
++
++			if ( !this.options.text ) {
++				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
++
++				if ( !this.hasTitle ) {
++					buttonElement.attr( "title", $.trim( buttonText ) );
++				}
++			}
++		} else {
++			buttonClasses.push( "ui-button-text-only" );
++		}
++		buttonElement.addClass( buttonClasses.join( " " ) );
++	}
++});
++
++$.widget( "ui.buttonset", {
++	version: "1.10.3",
++	options: {
++		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
++	},
++
++	_create: function() {
++		this.element.addClass( "ui-buttonset" );
++	},
++
++	_init: function() {
++		this.refresh();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "disabled" ) {
++			this.buttons.button( "option", key, value );
++		}
++
++		this._super( key, value );
++	},
++
++	refresh: function() {
++		var rtl = this.element.css( "direction" ) === "rtl";
++
++		this.buttons = this.element.find( this.options.items )
++			.filter( ":ui-button" )
++				.button( "refresh" )
++			.end()
++			.not( ":ui-button" )
++				.button()
++			.end()
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
++				.filter( ":first" )
++					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
++				.end()
++				.filter( ":last" )
++					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
++				.end()
++			.end();
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-buttonset" );
++		this.buttons
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-left ui-corner-right" )
++			.end()
++			.button( "destroy" );
++	}
++});
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.extend($.ui, { datepicker: { version: "1.10.3" } });
++
++var PROP_NAME = "datepicker",
++	instActive;
++
++/* Date picker manager.
++   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
++   Settings for (groups of) date pickers are maintained in an instance object,
++   allowing multiple different settings on the same page. */
++
++function Datepicker() {
++	this._curInst = null; // The current instance in use
++	this._keyEvent = false; // If the last event was a key event
++	this._disabledInputs = []; // List of date picker inputs that have been disabled
++	this._datepickerShowing = false; // True if the popup picker is showing , false if not
++	this._inDialog = false; // True if showing within a "dialog", false if not
++	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
++	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
++	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
++	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
++	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
++	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
++	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
++	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
++	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
++	this.regional = []; // Available regional settings, indexed by language code
++	this.regional[""] = { // Default regional settings
++		closeText: "Done", // Display text for close link
++		prevText: "Prev", // Display text for previous month link
++		nextText: "Next", // Display text for next month link
++		currentText: "Today", // Display text for current month link
++		monthNames: ["January","February","March","April","May","June",
++			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
++		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
++		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
++		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
++		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
++		weekHeader: "Wk", // Column header for week of the year
++		dateFormat: "mm/dd/yy", // See format options on parseDate
++		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
++		isRTL: false, // True if right-to-left language, false if left-to-right
++		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
++		yearSuffix: "" // Additional text to append to the year in the month headers
++	};
++	this._defaults = { // Global defaults for all the date picker instances
++		showOn: "focus", // "focus" for popup on focus,
++			// "button" for trigger button, or "both" for either
++		showAnim: "fadeIn", // Name of jQuery animation for popup
++		showOptions: {}, // Options for enhanced animations
++		defaultDate: null, // Used when field is blank: actual date,
++			// +/-number for offset from today, null for today
++		appendText: "", // Display text following the input box, e.g. showing the format
++		buttonText: "...", // Text for trigger button
++		buttonImage: "", // URL for trigger button image
++		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
++		hideIfNoPrevNext: false, // True to hide next/previous month links
++			// if not applicable, false to just disable them
++		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
++		gotoCurrent: false, // True if today link goes back to current selection instead
++		changeMonth: false, // True if month can be selected directly, false if only prev/next
++		changeYear: false, // True if year can be selected directly, false if only prev/next
++		yearRange: "c-10:c+10", // Range of years to display in drop-down,
++			// either relative to today's year (-nn:+nn), relative to currently displayed year
++			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
++		showOtherMonths: false, // True to show dates in other months, false to leave blank
++		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
++		showWeek: false, // True to show week of the year, false to not show it
++		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
++			// takes a Date and returns the number of the week for it
++		shortYearCutoff: "+10", // Short year values < this are in the current century,
++			// > this are in the previous century,
++			// string value starting with "+" for current year + value
++		minDate: null, // The earliest selectable date, or null for no limit
++		maxDate: null, // The latest selectable date, or null for no limit
++		duration: "fast", // Duration of display/closure
++		beforeShowDay: null, // Function that takes a date and returns an array with
++			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
++			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
++		beforeShow: null, // Function that takes an input field and
++			// returns a set of custom settings for the date picker
++		onSelect: null, // Define a callback function when a date is selected
++		onChangeMonthYear: null, // Define a callback function when the month or year is changed
++		onClose: null, // Define a callback function when the datepicker is closed
++		numberOfMonths: 1, // Number of months to show at a time
++		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
++		stepMonths: 1, // Number of months to step back/forward
++		stepBigMonths: 12, // Number of months to step back/forward for the big links
++		altField: "", // Selector for an alternate field to store selected dates into
++		altFormat: "", // The date format to use for the alternate field
++		constrainInput: true, // The input is constrained by the current date format
++		showButtonPanel: false, // True to show button panel, false to not show it
++		autoSize: false, // True to size the input for the date format, false to leave as is
++		disabled: false // The initial disabled state
++	};
++	$.extend(this._defaults, this.regional[""]);
++	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
++}
++
++$.extend(Datepicker.prototype, {
++	/* Class name added to elements to indicate already configured with a date picker. */
++	markerClassName: "hasDatepicker",
++
++	//Keep track of the maximum number of rows displayed (see #7043)
++	maxRows: 4,
++
++	// TODO rename to "widget" when switching to widget factory
++	_widgetDatepicker: function() {
++		return this.dpDiv;
++	},
++
++	/* Override the default settings for all instances of the date picker.
++	 * @param  settings  object - the new settings to use as defaults (anonymous object)
++	 * @return the manager object
++	 */
++	setDefaults: function(settings) {
++		extendRemove(this._defaults, settings || {});
++		return this;
++	},
++
++	/* Attach the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
++	 */
++	_attachDatepicker: function(target, settings) {
++		var nodeName, inline, inst;
++		nodeName = target.nodeName.toLowerCase();
++		inline = (nodeName === "div" || nodeName === "span");
++		if (!target.id) {
++			this.uuid += 1;
++			target.id = "dp" + this.uuid;
++		}
++		inst = this._newInst($(target), inline);
++		inst.settings = $.extend({}, settings || {});
++		if (nodeName === "input") {
++			this._connectDatepicker(target, inst);
++		} else if (inline) {
++			this._inlineDatepicker(target, inst);
++		}
++	},
++
++	/* Create a new instance object. */
++	_newInst: function(target, inline) {
++		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
++		return {id: id, input: target, // associated target
++			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
++			drawMonth: 0, drawYear: 0, // month being drawn
++			inline: inline, // is datepicker inline or not
++			dpDiv: (!inline ? this.dpDiv : // presentation div
++			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
++	},
++
++	/* Attach the date picker to an input field. */
++	_connectDatepicker: function(target, inst) {
++		var input = $(target);
++		inst.append = $([]);
++		inst.trigger = $([]);
++		if (input.hasClass(this.markerClassName)) {
++			return;
++		}
++		this._attachments(input, inst);
++		input.addClass(this.markerClassName).keydown(this._doKeyDown).
++			keypress(this._doKeyPress).keyup(this._doKeyUp);
++		this._autoSize(inst);
++		$.data(target, PROP_NAME, inst);
++		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++	},
++
++	/* Make attachments based on settings. */
++	_attachments: function(input, inst) {
++		var showOn, buttonText, buttonImage,
++			appendText = this._get(inst, "appendText"),
++			isRTL = this._get(inst, "isRTL");
++
++		if (inst.append) {
++			inst.append.remove();
++		}
++		if (appendText) {
++			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
++			input[isRTL ? "before" : "after"](inst.append);
++		}
++
++		input.unbind("focus", this._showDatepicker);
++
++		if (inst.trigger) {
++			inst.trigger.remove();
++		}
++
++		showOn = this._get(inst, "showOn");
++		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
++			input.focus(this._showDatepicker);
++		}
++		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
++			buttonText = this._get(inst, "buttonText");
++			buttonImage = this._get(inst, "buttonImage");
++			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
++				$("<img/>").addClass(this._triggerClass).
++					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
++				$("<button type='button'></button>").addClass(this._triggerClass).
++					html(!buttonImage ? buttonText : $("<img/>").attr(
++					{ src:buttonImage, alt:buttonText, title:buttonText })));
++			input[isRTL ? "before" : "after"](inst.trigger);
++			inst.trigger.click(function() {
++				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
++					$.datepicker._hideDatepicker();
++				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
++					$.datepicker._hideDatepicker();
++					$.datepicker._showDatepicker(input[0]);
++				} else {
++					$.datepicker._showDatepicker(input[0]);
++				}
++				return false;
++			});
++		}
++	},
++
++	/* Apply the maximum length for the date format. */
++	_autoSize: function(inst) {
++		if (this._get(inst, "autoSize") && !inst.inline) {
++			var findMax, max, maxI, i,
++				date = new Date(2009, 12 - 1, 20), // Ensure double digits
++				dateFormat = this._get(inst, "dateFormat");
++
++			if (dateFormat.match(/[DM]/)) {
++				findMax = function(names) {
++					max = 0;
++					maxI = 0;
++					for (i = 0; i < names.length; i++) {
++						if (names[i].length > max) {
++							max = names[i].length;
++							maxI = i;
++						}
++					}
++					return maxI;
++				};
++				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
++					"monthNames" : "monthNamesShort"))));
++				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
++					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
++			}
++			inst.input.attr("size", this._formatDate(inst, date).length);
++		}
++	},
++
++	/* Attach an inline date picker to a div. */
++	_inlineDatepicker: function(target, inst) {
++		var divSpan = $(target);
++		if (divSpan.hasClass(this.markerClassName)) {
++			return;
++		}
++		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
++		$.data(target, PROP_NAME, inst);
++		this._setDate(inst, this._getDefaultDate(inst), true);
++		this._updateDatepicker(inst);
++		this._updateAlternate(inst);
++		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
++		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
++		inst.dpDiv.css( "display", "block" );
++	},
++
++	/* Pop-up the date picker in a "dialog" box.
++	 * @param  input element - ignored
++	 * @param  date	string or Date - the initial date to display
++	 * @param  onSelect  function - the function to call when a date is selected
++	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
++	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
++	 *					event - with x/y coordinates or
++	 *					leave empty for default (screen centre)
++	 * @return the manager object
++	 */
++	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
++		var id, browserWidth, browserHeight, scrollX, scrollY,
++			inst = this._dialogInst; // internal instance
++
++		if (!inst) {
++			this.uuid += 1;
++			id = "dp" + this.uuid;
++			this._dialogInput = $("<input type='text' id='" + id +
++				"' style='position: absolute; top: -100px; width: 0px;'/>");
++			this._dialogInput.keydown(this._doKeyDown);
++			$("body").append(this._dialogInput);
++			inst = this._dialogInst = this._newInst(this._dialogInput, false);
++			inst.settings = {};
++			$.data(this._dialogInput[0], PROP_NAME, inst);
++		}
++		extendRemove(inst.settings, settings || {});
++		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
++		this._dialogInput.val(date);
++
++		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
++		if (!this._pos) {
++			browserWidth = document.documentElement.clientWidth;
++			browserHeight = document.documentElement.clientHeight;
++			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
++			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
++			this._pos = // should use actual width/height below
++				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
++		}
++
++		// move input on screen for focus, but hidden behind dialog
++		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
++		inst.settings.onSelect = onSelect;
++		this._inDialog = true;
++		this.dpDiv.addClass(this._dialogClass);
++		this._showDatepicker(this._dialogInput[0]);
++		if ($.blockUI) {
++			$.blockUI(this.dpDiv);
++		}
++		$.data(this._dialogInput[0], PROP_NAME, inst);
++		return this;
++	},
++
++	/* Detach a datepicker from its control.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_destroyDatepicker: function(target) {
++		var nodeName,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		$.removeData(target, PROP_NAME);
++		if (nodeName === "input") {
++			inst.append.remove();
++			inst.trigger.remove();
++			$target.removeClass(this.markerClassName).
++				unbind("focus", this._showDatepicker).
++				unbind("keydown", this._doKeyDown).
++				unbind("keypress", this._doKeyPress).
++				unbind("keyup", this._doKeyUp);
++		} else if (nodeName === "div" || nodeName === "span") {
++			$target.removeClass(this.markerClassName).empty();
++		}
++	},
++
++	/* Enable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_enableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = false;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = false; }).end().
++				filter("img").css({opacity: "1.0", cursor: ""});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().removeClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", false);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++	},
++
++	/* Disable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_disableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = true;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = true; }).end().
++				filter("img").css({opacity: "0.5", cursor: "default"});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().addClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", true);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++		this._disabledInputs[this._disabledInputs.length] = target;
++	},
++
++	/* Is the first field in a jQuery collection disabled as a datepicker?
++	 * @param  target	element - the target input field or division or span
++	 * @return boolean - true if disabled, false if enabled
++	 */
++	_isDisabledDatepicker: function(target) {
++		if (!target) {
++			return false;
++		}
++		for (var i = 0; i < this._disabledInputs.length; i++) {
++			if (this._disabledInputs[i] === target) {
++				return true;
++			}
++		}
++		return false;
++	},
++
++	/* Retrieve the instance data for the target control.
++	 * @param  target  element - the target input field or division or span
++	 * @return  object - the associated instance data
++	 * @throws  error if a jQuery problem getting data
++	 */
++	_getInst: function(target) {
++		try {
++			return $.data(target, PROP_NAME);
++		}
++		catch (err) {
++			throw "Missing instance data for this datepicker";
++		}
++	},
++
++	/* Update or retrieve the settings for a date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 * @param  name	object - the new settings to update or
++	 *				string - the name of the setting to change or retrieve,
++	 *				when retrieving also "all" for all instance settings or
++	 *				"defaults" for all global defaults
++	 * @param  value   any - the new value for the setting
++	 *				(omit if above is an object or to retrieve a value)
++	 */
++	_optionDatepicker: function(target, name, value) {
++		var settings, date, minDate, maxDate,
++			inst = this._getInst(target);
++
++		if (arguments.length === 2 && typeof name === "string") {
++			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
++				(inst ? (name === "all" ? $.extend({}, inst.settings) :
++				this._get(inst, name)) : null));
++		}
++
++		settings = name || {};
++		if (typeof name === "string") {
++			settings = {};
++			settings[name] = value;
++		}
++
++		if (inst) {
++			if (this._curInst === inst) {
++				this._hideDatepicker();
++			}
++
++			date = this._getDateDatepicker(target, true);
++			minDate = this._getMinMaxDate(inst, "min");
++			maxDate = this._getMinMaxDate(inst, "max");
++			extendRemove(inst.settings, settings);
++			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
++			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
++				inst.settings.minDate = this._formatDate(inst, minDate);
++			}
++			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
++				inst.settings.maxDate = this._formatDate(inst, maxDate);
++			}
++			if ( "disabled" in settings ) {
++				if ( settings.disabled ) {
++					this._disableDatepicker(target);
++				} else {
++					this._enableDatepicker(target);
++				}
++			}
++			this._attachments($(target), inst);
++			this._autoSize(inst);
++			this._setDate(inst, date);
++			this._updateAlternate(inst);
++			this._updateDatepicker(inst);
++		}
++	},
++
++	// change method deprecated
++	_changeDatepicker: function(target, name, value) {
++		this._optionDatepicker(target, name, value);
++	},
++
++	/* Redraw the date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 */
++	_refreshDatepicker: function(target) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._updateDatepicker(inst);
++		}
++	},
++
++	/* Set the dates for a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  date	Date - the new date
++	 */
++	_setDateDatepicker: function(target, date) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._setDate(inst, date);
++			this._updateDatepicker(inst);
++			this._updateAlternate(inst);
++		}
++	},
++
++	/* Get the date(s) for the first entry in a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  noDefault boolean - true if no default date is to be used
++	 * @return Date - the current date
++	 */
++	_getDateDatepicker: function(target, noDefault) {
++		var inst = this._getInst(target);
++		if (inst && !inst.inline) {
++			this._setDateFromField(inst, noDefault);
++		}
++		return (inst ? this._getDate(inst) : null);
++	},
++
++	/* Handle keystrokes. */
++	_doKeyDown: function(event) {
++		var onSelect, dateStr, sel,
++			inst = $.datepicker._getInst(event.target),
++			handled = true,
++			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
++
++		inst._keyEvent = true;
++		if ($.datepicker._datepickerShowing) {
++			switch (event.keyCode) {
++				case 9: $.datepicker._hideDatepicker();
++						handled = false;
++						break; // hide on tab out
++				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
++									$.datepicker._currentClass + ")", inst.dpDiv);
++						if (sel[0]) {
++							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
++						}
++
++						onSelect = $.datepicker._get(inst, "onSelect");
++						if (onSelect) {
++							dateStr = $.datepicker._formatDate(inst);
++
++							// trigger custom callback
++							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++						} else {
++							$.datepicker._hideDatepicker();
++						}
++
++						return false; // don't submit the form
++				case 27: $.datepicker._hideDatepicker();
++						break; // hide on escape
++				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							-$.datepicker._get(inst, "stepBigMonths") :
++							-$.datepicker._get(inst, "stepMonths")), "M");
++						break; // previous month/year on page up/+ ctrl
++				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							+$.datepicker._get(inst, "stepBigMonths") :
++							+$.datepicker._get(inst, "stepMonths")), "M");
++						break; // next month/year on page down/+ ctrl
++				case 35: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._clearDate(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // clear on ctrl or command +end
++				case 36: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._gotoToday(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // current on ctrl or command +home
++				case 37: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// -1 day on ctrl or command +left
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								-$.datepicker._get(inst, "stepBigMonths") :
++								-$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +left on Mac
++						break;
++				case 38: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, -7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // -1 week on ctrl or command +up
++				case 39: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// +1 day on ctrl or command +right
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								+$.datepicker._get(inst, "stepBigMonths") :
++								+$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +right
++						break;
++				case 40: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, +7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // +1 week on ctrl or command +down
++				default: handled = false;
++			}
++		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
++			$.datepicker._showDatepicker(this);
++		} else {
++			handled = false;
++		}
++
++		if (handled) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++	},
++
++	/* Filter entered characters - based on date format. */
++	_doKeyPress: function(event) {
++		var chars, chr,
++			inst = $.datepicker._getInst(event.target);
++
++		if ($.datepicker._get(inst, "constrainInput")) {
++			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
++			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
++			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
++		}
++	},
++
++	/* Synchronise manual entry and field/alternate field. */
++	_doKeyUp: function(event) {
++		var date,
++			inst = $.datepicker._getInst(event.target);
++
++		if (inst.input.val() !== inst.lastVal) {
++			try {
++				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++					(inst.input ? inst.input.val() : null),
++					$.datepicker._getFormatConfig(inst));
++
++				if (date) { // only if valid
++					$.datepicker._setDateFromField(inst);
++					$.datepicker._updateAlternate(inst);
++					$.datepicker._updateDatepicker(inst);
++				}
++			}
++			catch (err) {
++			}
++		}
++		return true;
++	},
++
++	/* Pop-up the date picker for a given input field.
++	 * If false returned from beforeShow event handler do not show.
++	 * @param  input  element - the input field attached to the date picker or
++	 *					event - if triggered by focus
++	 */
++	_showDatepicker: function(input) {
++		input = input.target || input;
++		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
++			input = $("input", input.parentNode)[0];
++		}
++
++		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
++			return;
++		}
++
++		var inst, beforeShow, beforeShowSettings, isFixed,
++			offset, showAnim, duration;
++
++		inst = $.datepicker._getInst(input);
++		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
++			$.datepicker._curInst.dpDiv.stop(true, true);
++			if ( inst && $.datepicker._datepickerShowing ) {
++				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
++			}
++		}
++
++		beforeShow = $.datepicker._get(inst, "beforeShow");
++		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
++		if(beforeShowSettings === false){
++			return;
++		}
++		extendRemove(inst.settings, beforeShowSettings);
++
++		inst.lastVal = null;
++		$.datepicker._lastInput = input;
++		$.datepicker._setDateFromField(inst);
++
++		if ($.datepicker._inDialog) { // hide cursor
++			input.value = "";
++		}
++		if (!$.datepicker._pos) { // position below input
++			$.datepicker._pos = $.datepicker._findPos(input);
++			$.datepicker._pos[1] += input.offsetHeight; // add the height
++		}
++
++		isFixed = false;
++		$(input).parents().each(function() {
++			isFixed |= $(this).css("position") === "fixed";
++			return !isFixed;
++		});
++
++		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
++		$.datepicker._pos = null;
++		//to avoid flashes on Firefox
++		inst.dpDiv.empty();
++		// determine sizing offscreen
++		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
++		$.datepicker._updateDatepicker(inst);
++		// fix width for dynamic number of date pickers
++		// and adjust position before showing
++		offset = $.datepicker._checkOffset(inst, offset, isFixed);
++		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
++			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
++			left: offset.left + "px", top: offset.top + "px"});
++
++		if (!inst.inline) {
++			showAnim = $.datepicker._get(inst, "showAnim");
++			duration = $.datepicker._get(inst, "duration");
++			inst.dpDiv.zIndex($(input).zIndex()+1);
++			$.datepicker._datepickerShowing = true;
++
++			if ( $.effects && $.effects.effect[ showAnim ] ) {
++				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
++			} else {
++				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
++			}
++
++			if ( $.datepicker._shouldFocusInput( inst ) ) {
++				inst.input.focus();
++			}
++
++			$.datepicker._curInst = inst;
++		}
++	},
++
++	/* Generate the date picker content. */
++	_updateDatepicker: function(inst) {
++		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
++		instActive = inst; // for delegate hover events
++		inst.dpDiv.empty().append(this._generateHTML(inst));
++		this._attachHandlers(inst);
++		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
++
++		var origyearshtml,
++			numMonths = this._getNumberOfMonths(inst),
++			cols = numMonths[1],
++			width = 17;
++
++		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
++		if (cols > 1) {
++			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
++		}
++		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
++			"Class"]("ui-datepicker-multi");
++		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
++			"Class"]("ui-datepicker-rtl");
++
++		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
++			inst.input.focus();
++		}
++
++		// deffered render of the years select (to avoid flashes on Firefox)
++		if( inst.yearshtml ){
++			origyearshtml = inst.yearshtml;
++			setTimeout(function(){
++				//assure that inst.yearshtml didn't change.
++				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
++					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
++				}
++				origyearshtml = inst.yearshtml = null;
++			}, 0);
++		}
++	},
++
++	// #6694 - don't focus the input if it's already focused
++	// this breaks the change event in IE
++	// Support: IE and jQuery <1.9
++	_shouldFocusInput: function( inst ) {
++		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
++	},
++
++	/* Check positioning to remain on screen. */
++	_checkOffset: function(inst, offset, isFixed) {
++		var dpWidth = inst.dpDiv.outerWidth(),
++			dpHeight = inst.dpDiv.outerHeight(),
++			inputWidth = inst.input ? inst.input.outerWidth() : 0,
++			inputHeight = inst.input ? inst.input.outerHeight() : 0,
++			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
++			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
++
++		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
++		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
++		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
++
++		// now check if datepicker is showing outside window viewport - move to a better place if so.
++		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
++			Math.abs(offset.left + dpWidth - viewWidth) : 0);
++		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
++			Math.abs(dpHeight + inputHeight) : 0);
++
++		return offset;
++	},
++
++	/* Find an object's position on the screen. */
++	_findPos: function(obj) {
++		var position,
++			inst = this._getInst(obj),
++			isRTL = this._get(inst, "isRTL");
++
++		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
++			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
++		}
++
++		position = $(obj).offset();
++		return [position.left, position.top];
++	},
++
++	/* Hide the date picker from view.
++	 * @param  input  element - the input field attached to the date picker
++	 */
++	_hideDatepicker: function(input) {
++		var showAnim, duration, postProcess, onClose,
++			inst = this._curInst;
++
++		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
++			return;
++		}
++
++		if (this._datepickerShowing) {
++			showAnim = this._get(inst, "showAnim");
++			duration = this._get(inst, "duration");
++			postProcess = function() {
++				$.datepicker._tidyDialog(inst);
++			};
++
++			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
++			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
++				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
++			} else {
++				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
++					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
++			}
++
++			if (!showAnim) {
++				postProcess();
++			}
++			this._datepickerShowing = false;
++
++			onClose = this._get(inst, "onClose");
++			if (onClose) {
++				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
++			}
++
++			this._lastInput = null;
++			if (this._inDialog) {
++				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
++				if ($.blockUI) {
++					$.unblockUI();
++					$("body").append(this.dpDiv);
++				}
++			}
++			this._inDialog = false;
++		}
++	},
++
++	/* Tidy up after a dialog display. */
++	_tidyDialog: function(inst) {
++		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
++	},
++
++	/* Close date picker if clicked elsewhere. */
++	_checkExternalClick: function(event) {
++		if (!$.datepicker._curInst) {
++			return;
++		}
++
++		var $target = $(event.target),
++			inst = $.datepicker._getInst($target[0]);
++
++		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
++				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
++				!$target.hasClass($.datepicker.markerClassName) &&
++				!$target.closest("." + $.datepicker._triggerClass).length &&
++				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
++			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
++				$.datepicker._hideDatepicker();
++		}
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustDate: function(id, offset, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		this._adjustInstDate(inst, offset +
++			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
++			period);
++		this._updateDatepicker(inst);
++	},
++
++	/* Action for current link. */
++	_gotoToday: function(id) {
++		var date,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
++			inst.selectedDay = inst.currentDay;
++			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
++			inst.drawYear = inst.selectedYear = inst.currentYear;
++		} else {
++			date = new Date();
++			inst.selectedDay = date.getDate();
++			inst.drawMonth = inst.selectedMonth = date.getMonth();
++			inst.drawYear = inst.selectedYear = date.getFullYear();
++		}
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a new month/year. */
++	_selectMonthYear: function(id, select, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		inst["selected" + (period === "M" ? "Month" : "Year")] =
++		inst["draw" + (period === "M" ? "Month" : "Year")] =
++			parseInt(select.options[select.selectedIndex].value,10);
++
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a day. */
++	_selectDay: function(id, month, year, td) {
++		var inst,
++			target = $(id);
++
++		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++
++		inst = this._getInst(target[0]);
++		inst.selectedDay = inst.currentDay = $("a", td).html();
++		inst.selectedMonth = inst.currentMonth = month;
++		inst.selectedYear = inst.currentYear = year;
++		this._selectDate(id, this._formatDate(inst,
++			inst.currentDay, inst.currentMonth, inst.currentYear));
++	},
++
++	/* Erase the input field and hide the date picker. */
++	_clearDate: function(id) {
++		var target = $(id);
++		this._selectDate(target, "");
++	},
++
++	/* Update the input field with the selected date. */
++	_selectDate: function(id, dateStr) {
++		var onSelect,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
++		if (inst.input) {
++			inst.input.val(dateStr);
++		}
++		this._updateAlternate(inst);
++
++		onSelect = this._get(inst, "onSelect");
++		if (onSelect) {
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
++		} else if (inst.input) {
++			inst.input.trigger("change"); // fire the change event
++		}
++
++		if (inst.inline){
++			this._updateDatepicker(inst);
++		} else {
++			this._hideDatepicker();
++			this._lastInput = inst.input[0];
++			if (typeof(inst.input[0]) !== "object") {
++				inst.input.focus(); // restore focus
++			}
++			this._lastInput = null;
++		}
++	},
++
++	/* Update any alternate field to synchronise with the main field. */
++	_updateAlternate: function(inst) {
++		var altFormat, date, dateStr,
++			altField = this._get(inst, "altField");
++
++		if (altField) { // update alternate field too
++			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
++			date = this._getDate(inst);
++			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
++			$(altField).each(function() { $(this).val(dateStr); });
++		}
++	},
++
++	/* Set as beforeShowDay function to prevent selection of weekends.
++	 * @param  date  Date - the date to customise
++	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
++	 */
++	noWeekends: function(date) {
++		var day = date.getDay();
++		return [(day > 0 && day < 6), ""];
++	},
++
++	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++	 * @param  date  Date - the date to get the week for
++	 * @return  number - the number of the week within the year that contains this date
++	 */
++	iso8601Week: function(date) {
++		var time,
++			checkDate = new Date(date.getTime());
++
++		// Find Thursday of this week starting on Monday
++		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++
++		time = checkDate.getTime();
++		checkDate.setMonth(0); // Compare with Jan 1
++		checkDate.setDate(1);
++		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++	},
++
++	/* Parse a string value into a date object.
++	 * See formatDate below for the possible formats.
++	 *
++	 * @param  format string - the expected format of the date
++	 * @param  value string - the date in the above format
++	 * @param  settings Object - attributes include:
++	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  Date - the extracted date value or null if value is blank
++	 */
++	parseDate: function (format, value, settings) {
++		if (format == null || value == null) {
++			throw "Invalid arguments";
++		}
++
++		value = (typeof value === "object" ? value.toString() : value + "");
++		if (value === "") {
++			return null;
++		}
++
++		var iFormat, dim, extra,
++			iValue = 0,
++			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
++			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
++				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			year = -1,
++			month = -1,
++			day = -1,
++			doy = -1,
++			literal = false,
++			date,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Extract a number from the string value
++			getNumber = function(match) {
++				var isDoubled = lookAhead(match),
++					size = (match === "@" ? 14 : (match === "!" ? 20 :
++					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
++					digits = new RegExp("^\\d{1," + size + "}"),
++					num = value.substring(iValue).match(digits);
++				if (!num) {
++					throw "Missing number at position " + iValue;
++				}
++				iValue += num[0].length;
++				return parseInt(num[0], 10);
++			},
++			// Extract a name from the string value and convert to an index
++			getName = function(match, shortNames, longNames) {
++				var index = -1,
++					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
++						return [ [k, v] ];
++					}).sort(function (a, b) {
++						return -(a[1].length - b[1].length);
++					});
++
++				$.each(names, function (i, pair) {
++					var name = pair[1];
++					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
++						index = pair[0];
++						iValue += name.length;
++						return false;
++					}
++				});
++				if (index !== -1) {
++					return index + 1;
++				} else {
++					throw "Unknown name at position " + iValue;
++				}
++			},
++			// Confirm that a literal character matches the string value
++			checkLiteral = function() {
++				if (value.charAt(iValue) !== format.charAt(iFormat)) {
++					throw "Unexpected literal at position " + iValue;
++				}
++				iValue++;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					checkLiteral();
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d":
++						day = getNumber("d");
++						break;
++					case "D":
++						getName("D", dayNamesShort, dayNames);
++						break;
++					case "o":
++						doy = getNumber("o");
++						break;
++					case "m":
++						month = getNumber("m");
++						break;
++					case "M":
++						month = getName("M", monthNamesShort, monthNames);
++						break;
++					case "y":
++						year = getNumber("y");
++						break;
++					case "@":
++						date = new Date(getNumber("@"));
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "!":
++						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "'":
++						if (lookAhead("'")){
++							checkLiteral();
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						checkLiteral();
++				}
++			}
++		}
++
++		if (iValue < value.length){
++			extra = value.substr(iValue);
++			if (!/^\s+/.test(extra)) {
++				throw "Extra/unparsed characters found in date: " + extra;
++			}
++		}
++
++		if (year === -1) {
++			year = new Date().getFullYear();
++		} else if (year < 100) {
++			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
++				(year <= shortYearCutoff ? 0 : -100);
++		}
++
++		if (doy > -1) {
++			month = 1;
++			day = doy;
++			do {
++				dim = this._getDaysInMonth(year, month - 1);
++				if (day <= dim) {
++					break;
++				}
++				month++;
++				day -= dim;
++			} while (true);
++		}
++
++		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
++		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
++			throw "Invalid date"; // E.g. 31/02/00
++		}
++		return date;
++	},
++
++	/* Standard date formats. */
++	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
++	COOKIE: "D, dd M yy",
++	ISO_8601: "yy-mm-dd",
++	RFC_822: "D, d M y",
++	RFC_850: "DD, dd-M-y",
++	RFC_1036: "D, d M y",
++	RFC_1123: "D, d M yy",
++	RFC_2822: "D, d M yy",
++	RSS: "D, d M y", // RFC 822
++	TICKS: "!",
++	TIMESTAMP: "@",
++	W3C: "yy-mm-dd", // ISO 8601
++
++	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
++		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
++
++	/* Format a date object into a string value.
++	 * The format can be combinations of the following:
++	 * d  - day of month (no leading zero)
++	 * dd - day of month (two digit)
++	 * o  - day of year (no leading zeros)
++	 * oo - day of year (three digit)
++	 * D  - day name short
++	 * DD - day name long
++	 * m  - month of year (no leading zero)
++	 * mm - month of year (two digit)
++	 * M  - month name short
++	 * MM - month name long
++	 * y  - year (two digit)
++	 * yy - year (four digit)
++	 * @ - Unix timestamp (ms since 01/01/1970)
++	 * ! - Windows ticks (100ns since 01/01/0001)
++	 * "..." - literal text
++	 * '' - single quote
++	 *
++	 * @param  format string - the desired format of the date
++	 * @param  date Date - the date value to format
++	 * @param  settings Object - attributes include:
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  string - the date in the above format
++	 */
++	formatDate: function (format, date, settings) {
++		if (!date) {
++			return "";
++		}
++
++		var iFormat,
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Format a number, with leading zero if necessary
++			formatNumber = function(match, value, len) {
++				var num = "" + value;
++				if (lookAhead(match)) {
++					while (num.length < len) {
++						num = "0" + num;
++					}
++				}
++				return num;
++			},
++			// Format a name, short or long as requested
++			formatName = function(match, value, shortNames, longNames) {
++				return (lookAhead(match) ? longNames[value] : shortNames[value]);
++			},
++			output = "",
++			literal = false;
++
++		if (date) {
++			for (iFormat = 0; iFormat < format.length; iFormat++) {
++				if (literal) {
++					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++						literal = false;
++					} else {
++						output += format.charAt(iFormat);
++					}
++				} else {
++					switch (format.charAt(iFormat)) {
++						case "d":
++							output += formatNumber("d", date.getDate(), 2);
++							break;
++						case "D":
++							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
++							break;
++						case "o":
++							output += formatNumber("o",
++								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
++							break;
++						case "m":
++							output += formatNumber("m", date.getMonth() + 1, 2);
++							break;
++						case "M":
++							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
++							break;
++						case "y":
++							output += (lookAhead("y") ? date.getFullYear() :
++								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
++							break;
++						case "@":
++							output += date.getTime();
++							break;
++						case "!":
++							output += date.getTime() * 10000 + this._ticksTo1970;
++							break;
++						case "'":
++							if (lookAhead("'")) {
++								output += "'";
++							} else {
++								literal = true;
++							}
++							break;
++						default:
++							output += format.charAt(iFormat);
++					}
++				}
++			}
++		}
++		return output;
++	},
++
++	/* Extract all possible characters from the date format. */
++	_possibleChars: function (format) {
++		var iFormat,
++			chars = "",
++			literal = false,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					chars += format.charAt(iFormat);
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d": case "m": case "y": case "@":
++						chars += "0123456789";
++						break;
++					case "D": case "M":
++						return null; // Accept anything
++					case "'":
++						if (lookAhead("'")) {
++							chars += "'";
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						chars += format.charAt(iFormat);
++				}
++			}
++		}
++		return chars;
++	},
++
++	/* Get a setting value, defaulting if necessary. */
++	_get: function(inst, name) {
++		return inst.settings[name] !== undefined ?
++			inst.settings[name] : this._defaults[name];
++	},
++
++	/* Parse existing date and initialise date picker. */
++	_setDateFromField: function(inst, noDefault) {
++		if (inst.input.val() === inst.lastVal) {
++			return;
++		}
++
++		var dateFormat = this._get(inst, "dateFormat"),
++			dates = inst.lastVal = inst.input ? inst.input.val() : null,
++			defaultDate = this._getDefaultDate(inst),
++			date = defaultDate,
++			settings = this._getFormatConfig(inst);
++
++		try {
++			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
++		} catch (event) {
++			dates = (noDefault ? "" : dates);
++		}
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		inst.currentDay = (dates ? date.getDate() : 0);
++		inst.currentMonth = (dates ? date.getMonth() : 0);
++		inst.currentYear = (dates ? date.getFullYear() : 0);
++		this._adjustInstDate(inst);
++	},
++
++	/* Retrieve the default date shown on opening. */
++	_getDefaultDate: function(inst) {
++		return this._restrictMinMax(inst,
++			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
++	},
++
++	/* A date may be specified as an exact value or a relative one. */
++	_determineDate: function(inst, date, defaultDate) {
++		var offsetNumeric = function(offset) {
++				var date = new Date();
++				date.setDate(date.getDate() + offset);
++				return date;
++			},
++			offsetString = function(offset) {
++				try {
++					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++						offset, $.datepicker._getFormatConfig(inst));
++				}
++				catch (e) {
++					// Ignore
++				}
++
++				var date = (offset.toLowerCase().match(/^c/) ?
++					$.datepicker._getDate(inst) : null) || new Date(),
++					year = date.getFullYear(),
++					month = date.getMonth(),
++					day = date.getDate(),
++					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
++					matches = pattern.exec(offset);
++
++				while (matches) {
++					switch (matches[2] || "d") {
++						case "d" : case "D" :
++							day += parseInt(matches[1],10); break;
++						case "w" : case "W" :
++							day += parseInt(matches[1],10) * 7; break;
++						case "m" : case "M" :
++							month += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++						case "y": case "Y" :
++							year += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++					}
++					matches = pattern.exec(offset);
++				}
++				return new Date(year, month, day);
++			},
++			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
++				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
++
++		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
++		if (newDate) {
++			newDate.setHours(0);
++			newDate.setMinutes(0);
++			newDate.setSeconds(0);
++			newDate.setMilliseconds(0);
++		}
++		return this._daylightSavingAdjust(newDate);
++	},
++
++	/* Handle switch to/from daylight saving.
++	 * Hours may be non-zero on daylight saving cut-over:
++	 * > 12 when midnight changeover, but then cannot generate
++	 * midnight datetime, so jump to 1AM, otherwise reset.
++	 * @param  date  (Date) the date to check
++	 * @return  (Date) the corrected date
++	 */
++	_daylightSavingAdjust: function(date) {
++		if (!date) {
++			return null;
++		}
++		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
++		return date;
++	},
++
++	/* Set the date(s) directly. */
++	_setDate: function(inst, date, noChange) {
++		var clear = !date,
++			origMonth = inst.selectedMonth,
++			origYear = inst.selectedYear,
++			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
++
++		inst.selectedDay = inst.currentDay = newDate.getDate();
++		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
++		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
++		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
++			this._notifyChange(inst);
++		}
++		this._adjustInstDate(inst);
++		if (inst.input) {
++			inst.input.val(clear ? "" : this._formatDate(inst));
++		}
++	},
++
++	/* Retrieve the date(s) directly. */
++	_getDate: function(inst) {
++		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
++			this._daylightSavingAdjust(new Date(
++			inst.currentYear, inst.currentMonth, inst.currentDay)));
++			return startDate;
++	},
++
++	/* Attach the onxxx handlers.  These are declared statically so
++	 * they work with static code transformers like Caja.
++	 */
++	_attachHandlers: function(inst) {
++		var stepMonths = this._get(inst, "stepMonths"),
++			id = "#" + inst.id.replace( /\\\\/g, "\\" );
++		inst.dpDiv.find("[data-handler]").map(function () {
++			var handler = {
++				prev: function () {
++					$.datepicker._adjustDate(id, -stepMonths, "M");
++				},
++				next: function () {
++					$.datepicker._adjustDate(id, +stepMonths, "M");
++				},
++				hide: function () {
++					$.datepicker._hideDatepicker();
++				},
++				today: function () {
++					$.datepicker._gotoToday(id);
++				},
++				selectDay: function () {
++					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
++					return false;
++				},
++				selectMonth: function () {
++					$.datepicker._selectMonthYear(id, this, "M");
++					return false;
++				},
++				selectYear: function () {
++					$.datepicker._selectMonthYear(id, this, "Y");
++					return false;
++				}
++			};
++			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
++		});
++	},
++
++	/* Generate the HTML for the current state of the date picker. */
++	_generateHTML: function(inst) {
++		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
++			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
++			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
++			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
++			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
++			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
++			tempDate = new Date(),
++			today = this._daylightSavingAdjust(
++				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
++			isRTL = this._get(inst, "isRTL"),
++			showButtonPanel = this._get(inst, "showButtonPanel"),
++			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
++			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
++			numMonths = this._getNumberOfMonths(inst),
++			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
++			stepMonths = this._get(inst, "stepMonths"),
++			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
++			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
++				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			drawMonth = inst.drawMonth - showCurrentAtPos,
++			drawYear = inst.drawYear;
++
++		if (drawMonth < 0) {
++			drawMonth += 12;
++			drawYear--;
++		}
++		if (maxDate) {
++			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
++				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
++			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
++			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
++				drawMonth--;
++				if (drawMonth < 0) {
++					drawMonth = 11;
++					drawYear--;
++				}
++			}
++		}
++		inst.drawMonth = drawMonth;
++		inst.drawYear = drawYear;
++
++		prevText = this._get(inst, "prevText");
++		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
++			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
++
++		nextText = this._get(inst, "nextText");
++		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
++			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
++
++		currentText = this._get(inst, "currentText");
++		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
++		currentText = (!navigationAsDateFormat ? currentText :
++			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
++
++		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
++			this._get(inst, "closeText") + "</button>" : "");
++
++		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
++			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
++			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
++
++		firstDay = parseInt(this._get(inst, "firstDay"),10);
++		firstDay = (isNaN(firstDay) ? 0 : firstDay);
++
++		showWeek = this._get(inst, "showWeek");
++		dayNames = this._get(inst, "dayNames");
++		dayNamesMin = this._get(inst, "dayNamesMin");
++		monthNames = this._get(inst, "monthNames");
++		monthNamesShort = this._get(inst, "monthNamesShort");
++		beforeShowDay = this._get(inst, "beforeShowDay");
++		showOtherMonths = this._get(inst, "showOtherMonths");
++		selectOtherMonths = this._get(inst, "selectOtherMonths");
++		defaultDate = this._getDefaultDate(inst);
++		html = "";
++		dow;
++		for (row = 0; row < numMonths[0]; row++) {
++			group = "";
++			this.maxRows = 4;
++			for (col = 0; col < numMonths[1]; col++) {
++				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
++				cornerClass = " ui-corner-all";
++				calender = "";
++				if (isMultiMonth) {
++					calender += "<div class='ui-datepicker-group";
++					if (numMonths[1] > 1) {
++						switch (col) {
++							case 0: calender += " ui-datepicker-group-first";
++								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
++							case numMonths[1]-1: calender += " ui-datepicker-group-last";
++								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
++							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
++						}
++					}
++					calender += "'>";
++				}
++				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
++					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
++					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
++					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
++					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
++					"</div><table class='ui-datepicker-calendar'><thead>" +
++					"<tr>";
++				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
++				for (dow = 0; dow < 7; dow++) { // days of the week
++					day = (dow + firstDay) % 7;
++					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
++						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
++				}
++				calender += thead + "</tr></thead><tbody>";
++				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
++				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
++					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
++				}
++				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
++				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
++				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
++				this.maxRows = numRows;
++				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
++				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
++					calender += "<tr>";
++					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
++						this._get(inst, "calculateWeek")(printDate) + "</td>");
++					for (dow = 0; dow < 7; dow++) { // create date picker days
++						daySettings = (beforeShowDay ?
++							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
++						otherMonth = (printDate.getMonth() !== drawMonth);
++						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
++							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
++						tbody += "<td class='" +
++							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
++							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
++							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
++							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
++							// or defaultDate is current printedDate and defaultDate is selectedDate
++							" " + this._dayOverClass : "") + // highlight selected day
++							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
++							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
++							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
++							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
++							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
++							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
++							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
++							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
++							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
++							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
++							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
++							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
++						printDate.setDate(printDate.getDate() + 1);
++						printDate = this._daylightSavingAdjust(printDate);
++					}
++					calender += tbody + "</tr>";
++				}
++				drawMonth++;
++				if (drawMonth > 11) {
++					drawMonth = 0;
++					drawYear++;
++				}
++				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
++							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
++				group += calender;
++			}
++			html += group;
++		}
++		html += buttonPanel;
++		inst._keyEvent = false;
++		return html;
++	},
++
++	/* Generate the month and year header. */
++	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
++			secondary, monthNames, monthNamesShort) {
++
++		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
++			changeMonth = this._get(inst, "changeMonth"),
++			changeYear = this._get(inst, "changeYear"),
++			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
++			html = "<div class='ui-datepicker-title'>",
++			monthHtml = "";
++
++		// month selection
++		if (secondary || !changeMonth) {
++			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
++		} else {
++			inMinYear = (minDate && minDate.getFullYear() === drawYear);
++			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
++			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
++			for ( month = 0; month < 12; month++) {
++				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
++					monthHtml += "<option value='" + month + "'" +
++						(month === drawMonth ? " selected='selected'" : "") +
++						">" + monthNamesShort[month] + "</option>";
++				}
++			}
++			monthHtml += "</select>";
++		}
++
++		if (!showMonthAfterYear) {
++			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
++		}
++
++		// year selection
++		if ( !inst.yearshtml ) {
++			inst.yearshtml = "";
++			if (secondary || !changeYear) {
++				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
++			} else {
++				// determine range of years to display
++				years = this._get(inst, "yearRange").split(":");
++				thisYear = new Date().getFullYear();
++				determineYear = function(value) {
++					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
++						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
++						parseInt(value, 10)));
++					return (isNaN(year) ? thisYear : year);
++				};
++				year = determineYear(years[0]);
++				endYear = Math.max(year, determineYear(years[1] || ""));
++				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
++				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
++				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
++				for (; year <= endYear; year++) {
++					inst.yearshtml += "<option value='" + year + "'" +
++						(year === drawYear ? " selected='selected'" : "") +
++						">" + year + "</option>";
++				}
++				inst.yearshtml += "</select>";
++
++				html += inst.yearshtml;
++				inst.yearshtml = null;
++			}
++		}
++
++		html += this._get(inst, "yearSuffix");
++		if (showMonthAfterYear) {
++			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
++		}
++		html += "</div>"; // Close datepicker_header
++		return html;
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustInstDate: function(inst, offset, period) {
++		var year = inst.drawYear + (period === "Y" ? offset : 0),
++			month = inst.drawMonth + (period === "M" ? offset : 0),
++			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
++			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
++
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		if (period === "M" || period === "Y") {
++			this._notifyChange(inst);
++		}
++	},
++
++	/* Ensure a date is within any min/max bounds. */
++	_restrictMinMax: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			newDate = (minDate && date < minDate ? minDate : date);
++		return (maxDate && newDate > maxDate ? maxDate : newDate);
++	},
++
++	/* Notify change of month/year. */
++	_notifyChange: function(inst) {
++		var onChange = this._get(inst, "onChangeMonthYear");
++		if (onChange) {
++			onChange.apply((inst.input ? inst.input[0] : null),
++				[inst.selectedYear, inst.selectedMonth + 1, inst]);
++		}
++	},
++
++	/* Determine the number of months to show. */
++	_getNumberOfMonths: function(inst) {
++		var numMonths = this._get(inst, "numberOfMonths");
++		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
++	},
++
++	/* Determine the current maximum date - ensure no time components are set. */
++	_getMinMaxDate: function(inst, minMax) {
++		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
++	},
++
++	/* Find the number of days in a given month. */
++	_getDaysInMonth: function(year, month) {
++		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
++	},
++
++	/* Find the day of the week of the first of a month. */
++	_getFirstDayOfMonth: function(year, month) {
++		return new Date(year, month, 1).getDay();
++	},
++
++	/* Determines if we should allow a "next/prev" month display change. */
++	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
++		var numMonths = this._getNumberOfMonths(inst),
++			date = this._daylightSavingAdjust(new Date(curYear,
++			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
++
++		if (offset < 0) {
++			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
++		}
++		return this._isInRange(inst, date);
++	},
++
++	/* Is the given date in the accepted range? */
++	_isInRange: function(inst, date) {
++		var yearSplit, currentYear,
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			minYear = null,
++			maxYear = null,
++			years = this._get(inst, "yearRange");
++			if (years){
++				yearSplit = years.split(":");
++				currentYear = new Date().getFullYear();
++				minYear = parseInt(yearSplit[0], 10);
++				maxYear = parseInt(yearSplit[1], 10);
++				if ( yearSplit[0].match(/[+\-].*/) ) {
++					minYear += currentYear;
++				}
++				if ( yearSplit[1].match(/[+\-].*/) ) {
++					maxYear += currentYear;
++				}
++			}
++
++		return ((!minDate || date.getTime() >= minDate.getTime()) &&
++			(!maxDate || date.getTime() <= maxDate.getTime()) &&
++			(!minYear || date.getFullYear() >= minYear) &&
++			(!maxYear || date.getFullYear() <= maxYear));
++	},
++
++	/* Provide the configuration settings for formatting/parsing. */
++	_getFormatConfig: function(inst) {
++		var shortYearCutoff = this._get(inst, "shortYearCutoff");
++		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
++			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		return {shortYearCutoff: shortYearCutoff,
++			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
++			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
++	},
++
++	/* Format the given date for display. */
++	_formatDate: function(inst, day, month, year) {
++		if (!day) {
++			inst.currentDay = inst.selectedDay;
++			inst.currentMonth = inst.selectedMonth;
++			inst.currentYear = inst.selectedYear;
++		}
++		var date = (day ? (typeof day === "object" ? day :
++			this._daylightSavingAdjust(new Date(year, month, day))) :
++			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
++	}
++});
++
++/*
++ * Bind hover events for datepicker elements.
++ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
++ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
++ */
++function bindHover(dpDiv) {
++	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
++	return dpDiv.delegate(selector, "mouseout", function() {
++			$(this).removeClass("ui-state-hover");
++			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++				$(this).removeClass("ui-datepicker-prev-hover");
++			}
++			if (this.className.indexOf("ui-datepicker-next") !== -1) {
++				$(this).removeClass("ui-datepicker-next-hover");
++			}
++		})
++		.delegate(selector, "mouseover", function(){
++			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
++				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
++				$(this).addClass("ui-state-hover");
++				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++					$(this).addClass("ui-datepicker-prev-hover");
++				}
++				if (this.className.indexOf("ui-datepicker-next") !== -1) {
++					$(this).addClass("ui-datepicker-next-hover");
++				}
++			}
++		});
++}
++
++/* jQuery extend now ignores nulls! */
++function extendRemove(target, props) {
++	$.extend(target, props);
++	for (var name in props) {
++		if (props[name] == null) {
++			target[name] = props[name];
++		}
++	}
++	return target;
++}
++
++/* Invoke the datepicker functionality.
++   @param  options  string - a command, optionally followed by additional parameters or
++					Object - settings for attaching new datepicker functionality
++   @return  jQuery object */
++$.fn.datepicker = function(options){
++
++	/* Verify an empty collection wasn't passed - Fixes #6976 */
++	if ( !this.length ) {
++		return this;
++	}
++
++	/* Initialise the date picker. */
++	if (!$.datepicker.initialized) {
++		$(document).mousedown($.datepicker._checkExternalClick);
++		$.datepicker.initialized = true;
++	}
++
++	/* Append datepicker main container to body if not exist. */
++	if ($("#"+$.datepicker._mainDivId).length === 0) {
++		$("body").append($.datepicker.dpDiv);
++	}
++
++	var otherArgs = Array.prototype.slice.call(arguments, 1);
++	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	return this.each(function() {
++		typeof options === "string" ?
++			$.datepicker["_" + options + "Datepicker"].
++				apply($.datepicker, [this].concat(otherArgs)) :
++			$.datepicker._attachDatepicker(this, options);
++	});
++};
++
++$.datepicker = new Datepicker(); // singleton instance
++$.datepicker.initialized = false;
++$.datepicker.uuid = new Date().getTime();
++$.datepicker.version = "1.10.3";
++
++})(jQuery);
++(function( $, undefined ) {
++
++var sizeRelatedOptions = {
++		buttons: true,
++		height: true,
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true,
++		width: true
++	},
++	resizableRelatedOptions = {
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true
++	};
++
++$.widget( "ui.dialog", {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoOpen: true,
++		buttons: [],
++		closeOnEscape: true,
++		closeText: "close",
++		dialogClass: "",
++		draggable: true,
++		hide: null,
++		height: "auto",
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 150,
++		minWidth: 150,
++		modal: false,
++		position: {
++			my: "center",
++			at: "center",
++			of: window,
++			collision: "fit",
++			// Ensure the titlebar is always visible
++			using: function( pos ) {
++				var topOffset = $( this ).css( pos ).offset().top;
++				if ( topOffset < 0 ) {
++					$( this ).css( "top", pos.top - topOffset );
++				}
++			}
++		},
++		resizable: true,
++		show: null,
++		title: null,
++		width: 300,
++
++		// callbacks
++		beforeClose: null,
++		close: null,
++		drag: null,
++		dragStart: null,
++		dragStop: null,
++		focus: null,
++		open: null,
++		resize: null,
++		resizeStart: null,
++		resizeStop: null
++	},
++
++	_create: function() {
++		this.originalCss = {
++			display: this.element[0].style.display,
++			width: this.element[0].style.width,
++			minHeight: this.element[0].style.minHeight,
++			maxHeight: this.element[0].style.maxHeight,
++			height: this.element[0].style.height
++		};
++		this.originalPosition = {
++			parent: this.element.parent(),
++			index: this.element.parent().children().index( this.element )
++		};
++		this.originalTitle = this.element.attr("title");
++		this.options.title = this.options.title || this.originalTitle;
++
++		this._createWrapper();
++
++		this.element
++			.show()
++			.removeAttr("title")
++			.addClass("ui-dialog-content ui-widget-content")
++			.appendTo( this.uiDialog );
++
++		this._createTitlebar();
++		this._createButtonPane();
++
++		if ( this.options.draggable && $.fn.draggable ) {
++			this._makeDraggable();
++		}
++		if ( this.options.resizable && $.fn.resizable ) {
++			this._makeResizable();
++		}
++
++		this._isOpen = false;
++	},
++
++	_init: function() {
++		if ( this.options.autoOpen ) {
++			this.open();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++		if ( element && (element.jquery || element.nodeType) ) {
++			return $( element );
++		}
++		return this.document.find( element || "body" ).eq( 0 );
++	},
++
++	_destroy: function() {
++		var next,
++			originalPosition = this.originalPosition;
++
++		this._destroyOverlay();
++
++		this.element
++			.removeUniqueId()
++			.removeClass("ui-dialog-content ui-widget-content")
++			.css( this.originalCss )
++			// Without detaching first, the following becomes really slow
++			.detach();
++
++		this.uiDialog.stop( true, true ).remove();
++
++		if ( this.originalTitle ) {
++			this.element.attr( "title", this.originalTitle );
++		}
++
++		next = originalPosition.parent.children().eq( originalPosition.index );
++		// Don't try to place the dialog next to itself (#8613)
++		if ( next.length && next[0] !== this.element[0] ) {
++			next.before( this.element );
++		} else {
++			originalPosition.parent.append( this.element );
++		}
++	},
++
++	widget: function() {
++		return this.uiDialog;
++	},
++
++	disable: $.noop,
++	enable: $.noop,
++
++	close: function( event ) {
++		var that = this;
++
++		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
++			return;
++		}
++
++		this._isOpen = false;
++		this._destroyOverlay();
++
++		if ( !this.opener.filter(":focusable").focus().length ) {
++			// Hiding a focused element doesn't trigger blur in WebKit
++			// so in case we have nothing to focus on, explicitly blur the active element
++			// https://bugs.webkit.org/show_bug.cgi?id=47182
++			$( this.document[0].activeElement ).blur();
++		}
++
++		this._hide( this.uiDialog, this.options.hide, function() {
++			that._trigger( "close", event );
++		});
++	},
++
++	isOpen: function() {
++		return this._isOpen;
++	},
++
++	moveToTop: function() {
++		this._moveToTop();
++	},
++
++	_moveToTop: function( event, silent ) {
++		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
++		if ( moved && !silent ) {
++			this._trigger( "focus", event );
++		}
++		return moved;
++	},
++
++	open: function() {
++		var that = this;
++		if ( this._isOpen ) {
++			if ( this._moveToTop() ) {
++				this._focusTabbable();
++			}
++			return;
++		}
++
++		this._isOpen = true;
++		this.opener = $( this.document[0].activeElement );
++
++		this._size();
++		this._position();
++		this._createOverlay();
++		this._moveToTop( null, true );
++		this._show( this.uiDialog, this.options.show, function() {
++			that._focusTabbable();
++			that._trigger("focus");
++		});
++
++		this._trigger("open");
++	},
++
++	_focusTabbable: function() {
++		// Set focus to the first match:
++		// 1. First element inside the dialog matching [autofocus]
++		// 2. Tabbable element inside the content element
++		// 3. Tabbable element inside the buttonpane
++		// 4. The close button
++		// 5. The dialog itself
++		var hasFocus = this.element.find("[autofocus]");
++		if ( !hasFocus.length ) {
++			hasFocus = this.element.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogButtonPane.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialog;
++		}
++		hasFocus.eq( 0 ).focus();
++	},
++
++	_keepFocus: function( event ) {
++		function checkFocus() {
++			var activeElement = this.document[0].activeElement,
++				isActive = this.uiDialog[0] === activeElement ||
++					$.contains( this.uiDialog[0], activeElement );
++			if ( !isActive ) {
++				this._focusTabbable();
++			}
++		}
++		event.preventDefault();
++		checkFocus.call( this );
++		// support: IE
++		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
++		// so we check again later
++		this._delay( checkFocus );
++	},
++
++	_createWrapper: function() {
++		this.uiDialog = $("<div>")
++			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
++				this.options.dialogClass )
++			.hide()
++			.attr({
++				// Setting tabIndex makes the div focusable
++				tabIndex: -1,
++				role: "dialog"
++			})
++			.appendTo( this._appendTo() );
++
++		this._on( this.uiDialog, {
++			keydown: function( event ) {
++				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
++						event.keyCode === $.ui.keyCode.ESCAPE ) {
++					event.preventDefault();
++					this.close( event );
++					return;
++				}
++
++				// prevent tabbing out of dialogs
++				if ( event.keyCode !== $.ui.keyCode.TAB ) {
++					return;
++				}
++				var tabbables = this.uiDialog.find(":tabbable"),
++					first = tabbables.filter(":first"),
++					last  = tabbables.filter(":last");
++
++				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
++					first.focus( 1 );
++					event.preventDefault();
++				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
++					last.focus( 1 );
++					event.preventDefault();
++				}
++			},
++			mousedown: function( event ) {
++				if ( this._moveToTop( event ) ) {
++					this._focusTabbable();
++				}
++			}
++		});
++
++		// We assume that any existing aria-describedby attribute means
++		// that the dialog content is marked up properly
++		// otherwise we brute force the content as the description
++		if ( !this.element.find("[aria-describedby]").length ) {
++			this.uiDialog.attr({
++				"aria-describedby": this.element.uniqueId().attr("id")
++			});
++		}
++	},
++
++	_createTitlebar: function() {
++		var uiDialogTitle;
++
++		this.uiDialogTitlebar = $("<div>")
++			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
++			.prependTo( this.uiDialog );
++		this._on( this.uiDialogTitlebar, {
++			mousedown: function( event ) {
++				// Don't prevent click on close button (#8838)
++				// Focusing a dialog that is partially scrolled out of view
++				// causes the browser to scroll it into view, preventing the click event
++				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
++					// Dialog isn't getting focus when dragging (#8063)
++					this.uiDialog.focus();
++				}
++			}
++		});
++
++		this.uiDialogTitlebarClose = $("<button></button>")
++			.button({
++				label: this.options.closeText,
++				icons: {
++					primary: "ui-icon-closethick"
++				},
++				text: false
++			})
++			.addClass("ui-dialog-titlebar-close")
++			.appendTo( this.uiDialogTitlebar );
++		this._on( this.uiDialogTitlebarClose, {
++			click: function( event ) {
++				event.preventDefault();
++				this.close( event );
++			}
++		});
++
++		uiDialogTitle = $("<span>")
++			.uniqueId()
++			.addClass("ui-dialog-title")
++			.prependTo( this.uiDialogTitlebar );
++		this._title( uiDialogTitle );
++
++		this.uiDialog.attr({
++			"aria-labelledby": uiDialogTitle.attr("id")
++		});
++	},
++
++	_title: function( title ) {
++		if ( !this.options.title ) {
++			title.html("&#160;");
++		}
++		title.text( this.options.title );
++	},
++
++	_createButtonPane: function() {
++		this.uiDialogButtonPane = $("<div>")
++			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
++
++		this.uiButtonSet = $("<div>")
++			.addClass("ui-dialog-buttonset")
++			.appendTo( this.uiDialogButtonPane );
++
++		this._createButtons();
++	},
++
++	_createButtons: function() {
++		var that = this,
++			buttons = this.options.buttons;
++
++		// if we already have a button pane, remove it
++		this.uiDialogButtonPane.remove();
++		this.uiButtonSet.empty();
++
++		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
++			this.uiDialog.removeClass("ui-dialog-buttons");
++			return;
++		}
++
++		$.each( buttons, function( name, props ) {
++			var click, buttonOptions;
++			props = $.isFunction( props ) ?
++				{ click: props, text: name } :
++				props;
++			// Default to a non-submitting button
++			props = $.extend( { type: "button" }, props );
++			// Change the context for the click callback to be the main element
++			click = props.click;
++			props.click = function() {
++				click.apply( that.element[0], arguments );
++			};
++			buttonOptions = {
++				icons: props.icons,
++				text: props.showText
++			};
++			delete props.icons;
++			delete props.showText;
++			$( "<button></button>", props )
++				.button( buttonOptions )
++				.appendTo( that.uiButtonSet );
++		});
++		this.uiDialog.addClass("ui-dialog-buttons");
++		this.uiDialogButtonPane.appendTo( this.uiDialog );
++	},
++
++	_makeDraggable: function() {
++		var that = this,
++			options = this.options;
++
++		function filteredUi( ui ) {
++			return {
++				position: ui.position,
++				offset: ui.offset
++			};
++		}
++
++		this.uiDialog.draggable({
++			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
++			handle: ".ui-dialog-titlebar",
++			containment: "document",
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-dragging");
++				that._blockFrames();
++				that._trigger( "dragStart", event, filteredUi( ui ) );
++			},
++			drag: function( event, ui ) {
++				that._trigger( "drag", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.position = [
++					ui.position.left - that.document.scrollLeft(),
++					ui.position.top - that.document.scrollTop()
++				];
++				$( this ).removeClass("ui-dialog-dragging");
++				that._unblockFrames();
++				that._trigger( "dragStop", event, filteredUi( ui ) );
++			}
++		});
++	},
++
++	_makeResizable: function() {
++		var that = this,
++			options = this.options,
++			handles = options.resizable,
++			// .ui-resizable has position: relative defined in the stylesheet
++			// but dialogs have to use absolute or fixed positioning
++			position = this.uiDialog.css("position"),
++			resizeHandles = typeof handles === "string" ?
++				handles	:
++				"n,e,s,w,se,sw,ne,nw";
++
++		function filteredUi( ui ) {
++			return {
++				originalPosition: ui.originalPosition,
++				originalSize: ui.originalSize,
++				position: ui.position,
++				size: ui.size
++			};
++		}
++
++		this.uiDialog.resizable({
++			cancel: ".ui-dialog-content",
++			containment: "document",
++			alsoResize: this.element,
++			maxWidth: options.maxWidth,
++			maxHeight: options.maxHeight,
++			minWidth: options.minWidth,
++			minHeight: this._minHeight(),
++			handles: resizeHandles,
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-resizing");
++				that._blockFrames();
++				that._trigger( "resizeStart", event, filteredUi( ui ) );
++			},
++			resize: function( event, ui ) {
++				that._trigger( "resize", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.height = $( this ).height();
++				options.width = $( this ).width();
++				$( this ).removeClass("ui-dialog-resizing");
++				that._unblockFrames();
++				that._trigger( "resizeStop", event, filteredUi( ui ) );
++			}
++		})
++		.css( "position", position );
++	},
++
++	_minHeight: function() {
++		var options = this.options;
++
++		return options.height === "auto" ?
++			options.minHeight :
++			Math.min( options.minHeight, options.height );
++	},
++
++	_position: function() {
++		// Need to show the dialog to get the actual offset in the position plugin
++		var isVisible = this.uiDialog.is(":visible");
++		if ( !isVisible ) {
++			this.uiDialog.show();
++		}
++		this.uiDialog.position( this.options.position );
++		if ( !isVisible ) {
++			this.uiDialog.hide();
++		}
++	},
++
++	_setOptions: function( options ) {
++		var that = this,
++			resize = false,
++			resizableOptions = {};
++
++		$.each( options, function( key, value ) {
++			that._setOption( key, value );
++
++			if ( key in sizeRelatedOptions ) {
++				resize = true;
++			}
++			if ( key in resizableRelatedOptions ) {
++				resizableOptions[ key ] = value;
++			}
++		});
++
++		if ( resize ) {
++			this._size();
++			this._position();
++		}
++		if ( this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", resizableOptions );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		/*jshint maxcomplexity:15*/
++		var isDraggable, isResizable,
++			uiDialog = this.uiDialog;
++
++		if ( key === "dialogClass" ) {
++			uiDialog
++				.removeClass( this.options.dialogClass )
++				.addClass( value );
++		}
++
++		if ( key === "disabled" ) {
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "appendTo" ) {
++			this.uiDialog.appendTo( this._appendTo() );
++		}
++
++		if ( key === "buttons" ) {
++			this._createButtons();
++		}
++
++		if ( key === "closeText" ) {
++			this.uiDialogTitlebarClose.button({
++				// Ensure that we always pass a string
++				label: "" + value
++			});
++		}
++
++		if ( key === "draggable" ) {
++			isDraggable = uiDialog.is(":data(ui-draggable)");
++			if ( isDraggable && !value ) {
++				uiDialog.draggable("destroy");
++			}
++
++			if ( !isDraggable && value ) {
++				this._makeDraggable();
++			}
++		}
++
++		if ( key === "position" ) {
++			this._position();
++		}
++
++		if ( key === "resizable" ) {
++			// currently resizable, becoming non-resizable
++			isResizable = uiDialog.is(":data(ui-resizable)");
++			if ( isResizable && !value ) {
++				uiDialog.resizable("destroy");
++			}
++
++			// currently resizable, changing handles
++			if ( isResizable && typeof value === "string" ) {
++				uiDialog.resizable( "option", "handles", value );
++			}
++
++			// currently non-resizable, becoming resizable
++			if ( !isResizable && value !== false ) {
++				this._makeResizable();
++			}
++		}
++
++		if ( key === "title" ) {
++			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
++		}
++	},
++
++	_size: function() {
++		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
++		// divs will both have width and height set, so we need to reset them
++		var nonContentHeight, minContentHeight, maxContentHeight,
++			options = this.options;
++
++		// Reset content sizing
++		this.element.show().css({
++			width: "auto",
++			minHeight: 0,
++			maxHeight: "none",
++			height: 0
++		});
++
++		if ( options.minWidth > options.width ) {
++			options.width = options.minWidth;
++		}
++
++		// reset wrapper sizing
++		// determine the height of all the non-content elements
++		nonContentHeight = this.uiDialog.css({
++				height: "auto",
++				width: options.width
++			})
++			.outerHeight();
++		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
++		maxContentHeight = typeof options.maxHeight === "number" ?
++			Math.max( 0, options.maxHeight - nonContentHeight ) :
++			"none";
++
++		if ( options.height === "auto" ) {
++			this.element.css({
++				minHeight: minContentHeight,
++				maxHeight: maxContentHeight,
++				height: "auto"
++			});
++		} else {
++			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
++		}
++
++		if (this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
++		}
++	},
++
++	_blockFrames: function() {
++		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
++			var iframe = $( this );
++
++			return $( "<div>" )
++				.css({
++					position: "absolute",
++					width: iframe.outerWidth(),
++					height: iframe.outerHeight()
++				})
++				.appendTo( iframe.parent() )
++				.offset( iframe.offset() )[0];
++		});
++	},
++
++	_unblockFrames: function() {
++		if ( this.iframeBlocks ) {
++			this.iframeBlocks.remove();
++			delete this.iframeBlocks;
++		}
++	},
++
++	_allowInteraction: function( event ) {
++		if ( $( event.target ).closest(".ui-dialog").length ) {
++			return true;
++		}
++
++		// TODO: Remove hack when datepicker implements
++		// the .ui-front logic (#8989)
++		return !!$( event.target ).closest(".ui-datepicker").length;
++	},
++
++	_createOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		var that = this,
++			widgetFullName = this.widgetFullName;
++		if ( !$.ui.dialog.overlayInstances ) {
++			// Prevent use of anchors and inputs.
++			// We use a delay in case the overlay is created from an
++			// event that we're going to be cancelling. (#2804)
++			this._delay(function() {
++				// Handle .dialog().dialog("close") (#4065)
++				if ( $.ui.dialog.overlayInstances ) {
++					this.document.bind( "focusin.dialog", function( event ) {
++						if ( !that._allowInteraction( event ) ) {
++							event.preventDefault();
++							$(".ui-dialog:visible:last .ui-dialog-content")
++								.data( widgetFullName )._focusTabbable();
++						}
++					});
++				}
++			});
++		}
++
++		this.overlay = $("<div>")
++			.addClass("ui-widget-overlay ui-front")
++			.appendTo( this._appendTo() );
++		this._on( this.overlay, {
++			mousedown: "_keepFocus"
++		});
++		$.ui.dialog.overlayInstances++;
++	},
++
++	_destroyOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		if ( this.overlay ) {
++			$.ui.dialog.overlayInstances--;
++
++			if ( !$.ui.dialog.overlayInstances ) {
++				this.document.unbind( "focusin.dialog" );
++			}
++			this.overlay.remove();
++			this.overlay = null;
++		}
++	}
++});
++
++$.ui.dialog.overlayInstances = 0;
++
++// DEPRECATED
++if ( $.uiBackCompat !== false ) {
++	// position option with array notation
++	// just override with old implementation
++	$.widget( "ui.dialog", $.ui.dialog, {
++		_position: function() {
++			var position = this.options.position,
++				myAt = [],
++				offset = [ 0, 0 ],
++				isVisible;
++
++			if ( position ) {
++				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
++					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
++					if ( myAt.length === 1 ) {
++						myAt[1] = myAt[0];
++					}
++
++					$.each( [ "left", "top" ], function( i, offsetPosition ) {
++						if ( +myAt[ i ] === myAt[ i ] ) {
++							offset[ i ] = myAt[ i ];
++							myAt[ i ] = offsetPosition;
++						}
++					});
++
++					position = {
++						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
++							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
++						at: myAt.join(" ")
++					};
++				}
++
++				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
++			} else {
++				position = $.ui.dialog.prototype.options.position;
++			}
++
++			// need to show the dialog to get the actual offset in the position plugin
++			isVisible = this.uiDialog.is(":visible");
++			if ( !isVisible ) {
++				this.uiDialog.show();
++			}
++			this.uiDialog.position( position );
++			if ( !isVisible ) {
++				this.uiDialog.hide();
++			}
++		}
++	});
++}
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.widget( "ui.menu", {
++	version: "1.10.3",
++	defaultElement: "<ul>",
++	delay: 300,
++	options: {
++		icons: {
++			submenu: "ui-icon-carat-1-e"
++		},
++		menus: "ul",
++		position: {
++			my: "left top",
++			at: "right top"
++		},
++		role: "menu",
++
++		// callbacks
++		blur: null,
++		focus: null,
++		select: null
++	},
++
++	_create: function() {
++		this.activeMenu = this.element;
++		// flag used to prevent firing of the click handler
++		// as the event bubbles up through nested menus
++		this.mouseHandled = false;
++		this.element
++			.uniqueId()
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
++			.attr({
++				role: this.options.role,
++				tabIndex: 0
++			})
++			// need to catch all clicks on disabled menu
++			// not possible through _on
++			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
++				if ( this.options.disabled ) {
++					event.preventDefault();
++				}
++			}, this ));
++
++		if ( this.options.disabled ) {
++			this.element
++				.addClass( "ui-state-disabled" )
++				.attr( "aria-disabled", "true" );
++		}
++
++		this._on({
++			// Prevent focus from sticking to links inside menu after clicking
++			// them (focus should always stay on UL during navigation).
++			"mousedown .ui-menu-item > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-state-disabled > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-menu-item:has(a)": function( event ) {
++				var target = $( event.target ).closest( ".ui-menu-item" );
++				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
++					this.mouseHandled = true;
++
++					this.select( event );
++					// Open submenu on click
++					if ( target.has( ".ui-menu" ).length ) {
++						this.expand( event );
++					} else if ( !this.element.is( ":focus" ) ) {
++						// Redirect focus to the menu
++						this.element.trigger( "focus", [ true ] );
++
++						// If the active item is on the top level, let it stay active.
++						// Otherwise, blur the active item since it is no longer visible.
++						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
++							clearTimeout( this.timer );
++						}
++					}
++				}
++			},
++			"mouseenter .ui-menu-item": function( event ) {
++				var target = $( event.currentTarget );
++				// Remove ui-state-active class from siblings of the newly focused menu item
++				// to avoid a jump caused by adjacent elements both having a class with a border
++				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
++				this.focus( event, target );
++			},
++			mouseleave: "collapseAll",
++			"mouseleave .ui-menu": "collapseAll",
++			focus: function( event, keepActiveItem ) {
++				// If there's already an active item, keep it active
++				// If not, activate the first item
++				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
++
++				if ( !keepActiveItem ) {
++					this.focus( event, item );
++				}
++			},
++			blur: function( event ) {
++				this._delay(function() {
++					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
++						this.collapseAll( event );
++					}
++				});
++			},
++			keydown: "_keydown"
++		});
++
++		this.refresh();
++
++		// Clicks outside of a menu collapse any open menus
++		this._on( this.document, {
++			click: function( event ) {
++				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
++					this.collapseAll( event );
++				}
++
++				// Reset the mouseHandled flag
++				this.mouseHandled = false;
++			}
++		});
++	},
++
++	_destroy: function() {
++		// Destroy (sub)menus
++		this.element
++			.removeAttr( "aria-activedescendant" )
++			.find( ".ui-menu" ).addBack()
++				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
++				.removeAttr( "role" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "aria-labelledby" )
++				.removeAttr( "aria-expanded" )
++				.removeAttr( "aria-hidden" )
++				.removeAttr( "aria-disabled" )
++				.removeUniqueId()
++				.show();
++
++		// Destroy menu items
++		this.element.find( ".ui-menu-item" )
++			.removeClass( "ui-menu-item" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-disabled" )
++			.children( "a" )
++				.removeUniqueId()
++				.removeClass( "ui-corner-all ui-state-hover" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "role" )
++				.removeAttr( "aria-haspopup" )
++				.children().each( function() {
++					var elem = $( this );
++					if ( elem.data( "ui-menu-submenu-carat" ) ) {
++						elem.remove();
++					}
++				});
++
++		// Destroy menu dividers
++		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:20*/
++		var match, prev, character, skip, regex,
++			preventDefault = true;
++
++		function escape( value ) {
++			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
++		}
++
++		switch ( event.keyCode ) {
++		case $.ui.keyCode.PAGE_UP:
++			this.previousPage( event );
++			break;
++		case $.ui.keyCode.PAGE_DOWN:
++			this.nextPage( event );
++			break;
++		case $.ui.keyCode.HOME:
++			this._move( "first", "first", event );
++			break;
++		case $.ui.keyCode.END:
++			this._move( "last", "last", event );
++			break;
++		case $.ui.keyCode.UP:
++			this.previous( event );
++			break;
++		case $.ui.keyCode.DOWN:
++			this.next( event );
++			break;
++		case $.ui.keyCode.LEFT:
++			this.collapse( event );
++			break;
++		case $.ui.keyCode.RIGHT:
++			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
++				this.expand( event );
++			}
++			break;
++		case $.ui.keyCode.ENTER:
++		case $.ui.keyCode.SPACE:
++			this._activate( event );
++			break;
++		case $.ui.keyCode.ESCAPE:
++			this.collapse( event );
++			break;
++		default:
++			preventDefault = false;
++			prev = this.previousFilter || "";
++			character = String.fromCharCode( event.keyCode );
++			skip = false;
++
++			clearTimeout( this.filterTimer );
++
++			if ( character === prev ) {
++				skip = true;
++			} else {
++				character = prev + character;
++			}
++
++			regex = new RegExp( "^" + escape( character ), "i" );
++			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++				return regex.test( $( this ).children( "a" ).text() );
++			});
++			match = skip && match.index( this.active.next() ) !== -1 ?
++				this.active.nextAll( ".ui-menu-item" ) :
++				match;
++
++			// If no matches on the current filter, reset to the last character pressed
++			// to move down the menu to the first item that starts with that character
++			if ( !match.length ) {
++				character = String.fromCharCode( event.keyCode );
++				regex = new RegExp( "^" + escape( character ), "i" );
++				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++					return regex.test( $( this ).children( "a" ).text() );
++				});
++			}
++
++			if ( match.length ) {
++				this.focus( event, match );
++				if ( match.length > 1 ) {
++					this.previousFilter = character;
++					this.filterTimer = this._delay(function() {
++						delete this.previousFilter;
++					}, 1000 );
++				} else {
++					delete this.previousFilter;
++				}
++			} else {
++				delete this.previousFilter;
++			}
++		}
++
++		if ( preventDefault ) {
++			event.preventDefault();
++		}
++	},
++
++	_activate: function( event ) {
++		if ( !this.active.is( ".ui-state-disabled" ) ) {
++			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
++				this.expand( event );
++			} else {
++				this.select( event );
++			}
++		}
++	},
++
++	refresh: function() {
++		var menus,
++			icon = this.options.icons.submenu,
++			submenus = this.element.find( this.options.menus );
++
++		// Initialize nested menus
++		submenus.filter( ":not(.ui-menu)" )
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.hide()
++			.attr({
++				role: this.options.role,
++				"aria-hidden": "true",
++				"aria-expanded": "false"
++			})
++			.each(function() {
++				var menu = $( this ),
++					item = menu.prev( "a" ),
++					submenuCarat = $( "<span>" )
++						.addClass( "ui-menu-icon ui-icon " + icon )
++						.data( "ui-menu-submenu-carat", true );
++
++				item
++					.attr( "aria-haspopup", "true" )
++					.prepend( submenuCarat );
++				menu.attr( "aria-labelledby", item.attr( "id" ) );
++			});
++
++		menus = submenus.add( this.element );
++
++		// Don't refresh list items that are already adapted
++		menus.children( ":not(.ui-menu-item):has(a)" )
++			.addClass( "ui-menu-item" )
++			.attr( "role", "presentation" )
++			.children( "a" )
++				.uniqueId()
++				.addClass( "ui-corner-all" )
++				.attr({
++					tabIndex: -1,
++					role: this._itemRole()
++				});
++
++		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
++		menus.children( ":not(.ui-menu-item)" ).each(function() {
++			var item = $( this );
++			// hyphen, em dash, en dash
++			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
++				item.addClass( "ui-widget-content ui-menu-divider" );
++			}
++		});
++
++		// Add aria-disabled attribute to any disabled menu item
++		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
++
++		// If the active item has been removed, blur the menu
++		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			this.blur();
++		}
++	},
++
++	_itemRole: function() {
++		return {
++			menu: "menuitem",
++			listbox: "option"
++		}[ this.options.role ];
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "icons" ) {
++			this.element.find( ".ui-menu-icon" )
++				.removeClass( this.options.icons.submenu )
++				.addClass( value.submenu );
++		}
++		this._super( key, value );
++	},
++
++	focus: function( event, item ) {
++		var nested, focused;
++		this.blur( event, event && event.type === "focus" );
++
++		this._scrollIntoView( item );
++
++		this.active = item.first();
++		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
++		// Only update aria-activedescendant if there's a role
++		// otherwise we assume focus is managed elsewhere
++		if ( this.options.role ) {
++			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
++		}
++
++		// Highlight active parent menu item, if any
++		this.active
++			.parent()
++			.closest( ".ui-menu-item" )
++			.children( "a:first" )
++			.addClass( "ui-state-active" );
++
++		if ( event && event.type === "keydown" ) {
++			this._close();
++		} else {
++			this.timer = this._delay(function() {
++				this._close();
++			}, this.delay );
++		}
++
++		nested = item.children( ".ui-menu" );
++		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
++			this._startOpening(nested);
++		}
++		this.activeMenu = item.parent();
++
++		this._trigger( "focus", event, { item: item } );
++	},
++
++	_scrollIntoView: function( item ) {
++		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
++		if ( this._hasScroll() ) {
++			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
++			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
++			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
++			scroll = this.activeMenu.scrollTop();
++			elementHeight = this.activeMenu.height();
++			itemHeight = item.height();
++
++			if ( offset < 0 ) {
++				this.activeMenu.scrollTop( scroll + offset );
++			} else if ( offset + itemHeight > elementHeight ) {
++				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
++			}
++		}
++	},
++
++	blur: function( event, fromFocus ) {
++		if ( !fromFocus ) {
++			clearTimeout( this.timer );
++		}
++
++		if ( !this.active ) {
++			return;
++		}
++
++		this.active.children( "a" ).removeClass( "ui-state-focus" );
++		this.active = null;
++
++		this._trigger( "blur", event, { item: this.active } );
++	},
++
++	_startOpening: function( submenu ) {
++		clearTimeout( this.timer );
++
++		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
++		// shift in the submenu position when mousing over the carat icon
++		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
++			return;
++		}
++
++		this.timer = this._delay(function() {
++			this._close();
++			this._open( submenu );
++		}, this.delay );
++	},
++
++	_open: function( submenu ) {
++		var position = $.extend({
++			of: this.active
++		}, this.options.position );
++
++		clearTimeout( this.timer );
++		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
++			.hide()
++			.attr( "aria-hidden", "true" );
++
++		submenu
++			.show()
++			.removeAttr( "aria-hidden" )
++			.attr( "aria-expanded", "true" )
++			.position( position );
++	},
++
++	collapseAll: function( event, all ) {
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			// If we were passed an event, look for the submenu that contains the event
++			var currentMenu = all ? this.element :
++				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
++
++			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
++			if ( !currentMenu.length ) {
++				currentMenu = this.element;
++			}
++
++			this._close( currentMenu );
++
++			this.blur( event );
++			this.activeMenu = currentMenu;
++		}, this.delay );
++	},
++
++	// With no arguments, closes the currently active menu - if nothing is active
++	// it closes all menus.  If passed an argument, it will search for menus BELOW
++	_close: function( startMenu ) {
++		if ( !startMenu ) {
++			startMenu = this.active ? this.active.parent() : this.element;
++		}
++
++		startMenu
++			.find( ".ui-menu" )
++				.hide()
++				.attr( "aria-hidden", "true" )
++				.attr( "aria-expanded", "false" )
++			.end()
++			.find( "a.ui-state-active" )
++				.removeClass( "ui-state-active" );
++	},
++
++	collapse: function( event ) {
++		var newItem = this.active &&
++			this.active.parent().closest( ".ui-menu-item", this.element );
++		if ( newItem && newItem.length ) {
++			this._close();
++			this.focus( event, newItem );
++		}
++	},
++
++	expand: function( event ) {
++		var newItem = this.active &&
++			this.active
++				.children( ".ui-menu " )
++				.children( ".ui-menu-item" )
++				.first();
++
++		if ( newItem && newItem.length ) {
++			this._open( newItem.parent() );
++
++			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
++			this._delay(function() {
++				this.focus( event, newItem );
++			});
++		}
++	},
++
++	next: function( event ) {
++		this._move( "next", "first", event );
++	},
++
++	previous: function( event ) {
++		this._move( "prev", "last", event );
++	},
++
++	isFirstItem: function() {
++		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
++	},
++
++	isLastItem: function() {
++		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
++	},
++
++	_move: function( direction, filter, event ) {
++		var next;
++		if ( this.active ) {
++			if ( direction === "first" || direction === "last" ) {
++				next = this.active
++					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
++					.eq( -1 );
++			} else {
++				next = this.active
++					[ direction + "All" ]( ".ui-menu-item" )
++					.eq( 0 );
++			}
++		}
++		if ( !next || !next.length || !this.active ) {
++			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
++		}
++
++		this.focus( event, next );
++	},
++
++	nextPage: function( event ) {
++		var item, base, height;
++
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isLastItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.nextAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base - height < 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
++				[ !this.active ? "first" : "last" ]() );
++		}
++	},
++
++	previousPage: function( event ) {
++		var item, base, height;
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isFirstItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.prevAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base + height > 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
++		}
++	},
++
++	_hasScroll: function() {
++		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
++	},
++
++	select: function( event ) {
++		// TODO: It should never be possible to not have an active item at this
++		// point, but the tests don't trigger mouseenter before click.
++		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
++		var ui = { item: this.active };
++		if ( !this.active.has( ".ui-menu" ).length ) {
++			this.collapseAll( event, true );
++		}
++		this._trigger( "select", event, ui );
++	}
++});
++
++}( jQuery ));
++(function( $, undefined ) {
++
++$.widget( "ui.progressbar", {
++	version: "1.10.3",
++	options: {
++		max: 100,
++		value: 0,
++
++		change: null,
++		complete: null
++	},
++
++	min: 0,
++
++	_create: function() {
++		// Constrain initial value
++		this.oldValue = this.options.value = this._constrainedValue();
++
++		this.element
++			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.attr({
++				// Only set static values, aria-valuenow and aria-valuemax are
++				// set inside _refreshValue()
++				role: "progressbar",
++				"aria-valuemin": this.min
++			});
++
++		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
++			.appendTo( this.element );
++
++		this._refreshValue();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++
++		this.valueDiv.remove();
++	},
++
++	value: function( newValue ) {
++		if ( newValue === undefined ) {
++			return this.options.value;
++		}
++
++		this.options.value = this._constrainedValue( newValue );
++		this._refreshValue();
++	},
++
++	_constrainedValue: function( newValue ) {
++		if ( newValue === undefined ) {
++			newValue = this.options.value;
++		}
++
++		this.indeterminate = newValue === false;
++
++		// sanitize value
++		if ( typeof newValue !== "number" ) {
++			newValue = 0;
++		}
++
++		return this.indeterminate ? false :
++			Math.min( this.options.max, Math.max( this.min, newValue ) );
++	},
++
++	_setOptions: function( options ) {
++		// Ensure "value" option is set after other values (like max)
++		var value = options.value;
++		delete options.value;
++
++		this._super( options );
++
++		this.options.value = this._constrainedValue( value );
++		this._refreshValue();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "max" ) {
++			// Don't allow a max less than min
++			value = Math.max( this.min, value );
++		}
++
++		this._super( key, value );
++	},
++
++	_percentage: function() {
++		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
++	},
++
++	_refreshValue: function() {
++		var value = this.options.value,
++			percentage = this._percentage();
++
++		this.valueDiv
++			.toggle( this.indeterminate || value > this.min )
++			.toggleClass( "ui-corner-right", value === this.options.max )
++			.width( percentage.toFixed(0) + "%" );
++
++		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
++
++		if ( this.indeterminate ) {
++			this.element.removeAttr( "aria-valuenow" );
++			if ( !this.overlayDiv ) {
++				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
++			}
++		} else {
++			this.element.attr({
++				"aria-valuemax": this.options.max,
++				"aria-valuenow": value
++			});
++			if ( this.overlayDiv ) {
++				this.overlayDiv.remove();
++				this.overlayDiv = null;
++			}
++		}
++
++		if ( this.oldValue !== value ) {
++			this.oldValue = value;
++			this._trigger( "change" );
++		}
++		if ( value === this.options.max ) {
++			this._trigger( "complete" );
++		}
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++// number of pages in a slider
++// (how many times can you page up/down to go through the whole range)
++var numPages = 5;
++
++$.widget( "ui.slider", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "slide",
++
++	options: {
++		animate: false,
++		distance: 0,
++		max: 100,
++		min: 0,
++		orientation: "horizontal",
++		range: false,
++		step: 1,
++		value: 0,
++		values: null,
++
++		// callbacks
++		change: null,
++		slide: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		this._keySliding = false;
++		this._mouseSliding = false;
++		this._animateOff = true;
++		this._handleIndex = null;
++		this._detectOrientation();
++		this._mouseInit();
++
++		this.element
++			.addClass( "ui-slider" +
++				" ui-slider-" + this.orientation +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all");
++
++		this._refresh();
++		this._setOption( "disabled", this.options.disabled );
++
++		this._animateOff = false;
++	},
++
++	_refresh: function() {
++		this._createRange();
++		this._createHandles();
++		this._setupEvents();
++		this._refreshValue();
++	},
++
++	_createHandles: function() {
++		var i, handleCount,
++			options = this.options,
++			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
++			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
++			handles = [];
++
++		handleCount = ( options.values && options.values.length ) || 1;
++
++		if ( existingHandles.length > handleCount ) {
++			existingHandles.slice( handleCount ).remove();
++			existingHandles = existingHandles.slice( 0, handleCount );
++		}
++
++		for ( i = existingHandles.length; i < handleCount; i++ ) {
++			handles.push( handle );
++		}
++
++		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
++
++		this.handle = this.handles.eq( 0 );
++
++		this.handles.each(function( i ) {
++			$( this ).data( "ui-slider-handle-index", i );
++		});
++	},
++
++	_createRange: function() {
++		var options = this.options,
++			classes = "";
++
++		if ( options.range ) {
++			if ( options.range === true ) {
++				if ( !options.values ) {
++					options.values = [ this._valueMin(), this._valueMin() ];
++				} else if ( options.values.length && options.values.length !== 2 ) {
++					options.values = [ options.values[0], options.values[0] ];
++				} else if ( $.isArray( options.values ) ) {
++					options.values = options.values.slice(0);
++				}
++			}
++
++			if ( !this.range || !this.range.length ) {
++				this.range = $( "<div></div>" )
++					.appendTo( this.element );
++
++				classes = "ui-slider-range" +
++				// note: this isn't the most fittingly semantic framework class for this element,
++				// but worked best visually with a variety of themes
++				" ui-widget-header ui-corner-all";
++			} else {
++				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
++					// Handle range switching from true to min/max
++					.css({
++						"left": "",
++						"bottom": ""
++					});
++			}
++
++			this.range.addClass( classes +
++				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
++		} else {
++			this.range = $([]);
++		}
++	},
++
++	_setupEvents: function() {
++		var elements = this.handles.add( this.range ).filter( "a" );
++		this._off( elements );
++		this._on( elements, this._handleEvents );
++		this._hoverable( elements );
++		this._focusable( elements );
++	},
++
++	_destroy: function() {
++		this.handles.remove();
++		this.range.remove();
++
++		this.element
++			.removeClass( "ui-slider" +
++				" ui-slider-horizontal" +
++				" ui-slider-vertical" +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" );
++
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function( event ) {
++		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
++			that = this,
++			o = this.options;
++
++		if ( o.disabled ) {
++			return false;
++		}
++
++		this.elementSize = {
++			width: this.element.outerWidth(),
++			height: this.element.outerHeight()
++		};
++		this.elementOffset = this.element.offset();
++
++		position = { x: event.pageX, y: event.pageY };
++		normValue = this._normValueFromMouse( position );
++		distance = this._valueMax() - this._valueMin() + 1;
++		this.handles.each(function( i ) {
++			var thisDistance = Math.abs( normValue - that.values(i) );
++			if (( distance > thisDistance ) ||
++				( distance === thisDistance &&
++					(i === that._lastChangedValue || that.values(i) === o.min ))) {
++				distance = thisDistance;
++				closestHandle = $( this );
++				index = i;
++			}
++		});
++
++		allowed = this._start( event, index );
++		if ( allowed === false ) {
++			return false;
++		}
++		this._mouseSliding = true;
++
++		this._handleIndex = index;
++
++		closestHandle
++			.addClass( "ui-state-active" )
++			.focus();
++
++		offset = closestHandle.offset();
++		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
++		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
++			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
++			top: event.pageY - offset.top -
++				( closestHandle.height() / 2 ) -
++				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
++				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
++				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
++		};
++
++		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
++			this._slide( event, index, normValue );
++		}
++		this._animateOff = true;
++		return true;
++	},
++
++	_mouseStart: function() {
++		return true;
++	},
++
++	_mouseDrag: function( event ) {
++		var position = { x: event.pageX, y: event.pageY },
++			normValue = this._normValueFromMouse( position );
++
++		this._slide( event, this._handleIndex, normValue );
++
++		return false;
++	},
++
++	_mouseStop: function( event ) {
++		this.handles.removeClass( "ui-state-active" );
++		this._mouseSliding = false;
++
++		this._stop( event, this._handleIndex );
++		this._change( event, this._handleIndex );
++
++		this._handleIndex = null;
++		this._clickOffset = null;
++		this._animateOff = false;
++
++		return false;
++	},
++
++	_detectOrientation: function() {
++		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
++	},
++
++	_normValueFromMouse: function( position ) {
++		var pixelTotal,
++			pixelMouse,
++			percentMouse,
++			valueTotal,
++			valueMouse;
++
++		if ( this.orientation === "horizontal" ) {
++			pixelTotal = this.elementSize.width;
++			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
++		} else {
++			pixelTotal = this.elementSize.height;
++			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
++		}
++
++		percentMouse = ( pixelMouse / pixelTotal );
++		if ( percentMouse > 1 ) {
++			percentMouse = 1;
++		}
++		if ( percentMouse < 0 ) {
++			percentMouse = 0;
++		}
++		if ( this.orientation === "vertical" ) {
++			percentMouse = 1 - percentMouse;
++		}
++
++		valueTotal = this._valueMax() - this._valueMin();
++		valueMouse = this._valueMin() + percentMouse * valueTotal;
++
++		return this._trimAlignValue( valueMouse );
++	},
++
++	_start: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++		return this._trigger( "start", event, uiHash );
++	},
++
++	_slide: function( event, index, newVal ) {
++		var otherVal,
++			newValues,
++			allowed;
++
++		if ( this.options.values && this.options.values.length ) {
++			otherVal = this.values( index ? 0 : 1 );
++
++			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
++					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
++				) {
++				newVal = otherVal;
++			}
++
++			if ( newVal !== this.values( index ) ) {
++				newValues = this.values();
++				newValues[ index ] = newVal;
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal,
++					values: newValues
++				} );
++				otherVal = this.values( index ? 0 : 1 );
++				if ( allowed !== false ) {
++					this.values( index, newVal, true );
++				}
++			}
++		} else {
++			if ( newVal !== this.value() ) {
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal
++				} );
++				if ( allowed !== false ) {
++					this.value( newVal );
++				}
++			}
++		}
++	},
++
++	_stop: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++
++		this._trigger( "stop", event, uiHash );
++	},
++
++	_change: function( event, index ) {
++		if ( !this._keySliding && !this._mouseSliding ) {
++			var uiHash = {
++				handle: this.handles[ index ],
++				value: this.value()
++			};
++			if ( this.options.values && this.options.values.length ) {
++				uiHash.value = this.values( index );
++				uiHash.values = this.values();
++			}
++
++			//store the last changed value index for reference when handles overlap
++			this._lastChangedValue = index;
++
++			this._trigger( "change", event, uiHash );
++		}
++	},
++
++	value: function( newValue ) {
++		if ( arguments.length ) {
++			this.options.value = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, 0 );
++			return;
++		}
++
++		return this._value();
++	},
++
++	values: function( index, newValue ) {
++		var vals,
++			newValues,
++			i;
++
++		if ( arguments.length > 1 ) {
++			this.options.values[ index ] = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, index );
++			return;
++		}
++
++		if ( arguments.length ) {
++			if ( $.isArray( arguments[ 0 ] ) ) {
++				vals = this.options.values;
++				newValues = arguments[ 0 ];
++				for ( i = 0; i < vals.length; i += 1 ) {
++					vals[ i ] = this._trimAlignValue( newValues[ i ] );
++					this._change( null, i );
++				}
++				this._refreshValue();
++			} else {
++				if ( this.options.values && this.options.values.length ) {
++					return this._values( index );
++				} else {
++					return this.value();
++				}
++			}
++		} else {
++			return this._values();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var i,
++			valsLength = 0;
++
++		if ( key === "range" && this.options.range === true ) {
++			if ( value === "min" ) {
++				this.options.value = this._values( 0 );
++				this.options.values = null;
++			} else if ( value === "max" ) {
++				this.options.value = this._values( this.options.values.length-1 );
++				this.options.values = null;
++			}
++		}
++
++		if ( $.isArray( this.options.values ) ) {
++			valsLength = this.options.values.length;
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++
++		switch ( key ) {
++			case "orientation":
++				this._detectOrientation();
++				this.element
++					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
++					.addClass( "ui-slider-" + this.orientation );
++				this._refreshValue();
++				break;
++			case "value":
++				this._animateOff = true;
++				this._refreshValue();
++				this._change( null, 0 );
++				this._animateOff = false;
++				break;
++			case "values":
++				this._animateOff = true;
++				this._refreshValue();
++				for ( i = 0; i < valsLength; i += 1 ) {
++					this._change( null, i );
++				}
++				this._animateOff = false;
++				break;
++			case "min":
++			case "max":
++				this._animateOff = true;
++				this._refreshValue();
++				this._animateOff = false;
++				break;
++			case "range":
++				this._animateOff = true;
++				this._refresh();
++				this._animateOff = false;
++				break;
++		}
++	},
++
++	//internal value getter
++	// _value() returns value trimmed by min and max, aligned by step
++	_value: function() {
++		var val = this.options.value;
++		val = this._trimAlignValue( val );
++
++		return val;
++	},
++
++	//internal values getter
++	// _values() returns array of values trimmed by min and max, aligned by step
++	// _values( index ) returns single value trimmed by min and max, aligned by step
++	_values: function( index ) {
++		var val,
++			vals,
++			i;
++
++		if ( arguments.length ) {
++			val = this.options.values[ index ];
++			val = this._trimAlignValue( val );
++
++			return val;
++		} else if ( this.options.values && this.options.values.length ) {
++			// .slice() creates a copy of the array
++			// this copy gets trimmed by min and max and then returned
++			vals = this.options.values.slice();
++			for ( i = 0; i < vals.length; i+= 1) {
++				vals[ i ] = this._trimAlignValue( vals[ i ] );
++			}
++
++			return vals;
++		} else {
++			return [];
++		}
++	},
++
++	// returns the step-aligned value that val is closest to, between (inclusive) min and max
++	_trimAlignValue: function( val ) {
++		if ( val <= this._valueMin() ) {
++			return this._valueMin();
++		}
++		if ( val >= this._valueMax() ) {
++			return this._valueMax();
++		}
++		var step = ( this.options.step > 0 ) ? this.options.step : 1,
++			valModStep = (val - this._valueMin()) % step,
++			alignValue = val - valModStep;
++
++		if ( Math.abs(valModStep) * 2 >= step ) {
++			alignValue += ( valModStep > 0 ) ? step : ( -step );
++		}
++
++		// Since JavaScript has problems with large floats, round
++		// the final value to 5 digits after the decimal point (see #4124)
++		return parseFloat( alignValue.toFixed(5) );
++	},
++
++	_valueMin: function() {
++		return this.options.min;
++	},
++
++	_valueMax: function() {
++		return this.options.max;
++	},
++
++	_refreshValue: function() {
++		var lastValPercent, valPercent, value, valueMin, valueMax,
++			oRange = this.options.range,
++			o = this.options,
++			that = this,
++			animate = ( !this._animateOff ) ? o.animate : false,
++			_set = {};
++
++		if ( this.options.values && this.options.values.length ) {
++			this.handles.each(function( i ) {
++				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
++				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++				if ( that.options.range === true ) {
++					if ( that.orientation === "horizontal" ) {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					} else {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					}
++				}
++				lastValPercent = valPercent;
++			});
++		} else {
++			value = this.value();
++			valueMin = this._valueMin();
++			valueMax = this._valueMax();
++			valPercent = ( valueMax !== valueMin ) ?
++					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
++					0;
++			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++
++			if ( oRange === "min" && this.orientation === "horizontal" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "horizontal" ) {
++				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++			if ( oRange === "min" && this.orientation === "vertical" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "vertical" ) {
++				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++		}
++	},
++
++	_handleEvents: {
++		keydown: function( event ) {
++			/*jshint maxcomplexity:25*/
++			var allowed, curVal, newVal, step,
++				index = $( event.target ).data( "ui-slider-handle-index" );
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++				case $.ui.keyCode.END:
++				case $.ui.keyCode.PAGE_UP:
++				case $.ui.keyCode.PAGE_DOWN:
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					event.preventDefault();
++					if ( !this._keySliding ) {
++						this._keySliding = true;
++						$( event.target ).addClass( "ui-state-active" );
++						allowed = this._start( event, index );
++						if ( allowed === false ) {
++							return;
++						}
++					}
++					break;
++			}
++
++			step = this.options.step;
++			if ( this.options.values && this.options.values.length ) {
++				curVal = newVal = this.values( index );
++			} else {
++				curVal = newVal = this.value();
++			}
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++					newVal = this._valueMin();
++					break;
++				case $.ui.keyCode.END:
++					newVal = this._valueMax();
++					break;
++				case $.ui.keyCode.PAGE_UP:
++					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.PAGE_DOWN:
++					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++					if ( curVal === this._valueMax() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal + step );
++					break;
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					if ( curVal === this._valueMin() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal - step );
++					break;
++			}
++
++			this._slide( event, index, newVal );
++		},
++		click: function( event ) {
++			event.preventDefault();
++		},
++		keyup: function( event ) {
++			var index = $( event.target ).data( "ui-slider-handle-index" );
++
++			if ( this._keySliding ) {
++				this._keySliding = false;
++				this._stop( event, index );
++				this._change( event, index );
++				$( event.target ).removeClass( "ui-state-active" );
++			}
++		}
++	}
++
++});
++
++}(jQuery));
++(function( $ ) {
++
++function modifier( fn ) {
++	return function() {
++		var previous = this.element.val();
++		fn.apply( this, arguments );
++		this._refresh();
++		if ( previous !== this.element.val() ) {
++			this._trigger( "change" );
++		}
++	};
++}
++
++$.widget( "ui.spinner", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	widgetEventPrefix: "spin",
++	options: {
++		culture: null,
++		icons: {
++			down: "ui-icon-triangle-1-s",
++			up: "ui-icon-triangle-1-n"
++		},
++		incremental: true,
++		max: null,
++		min: null,
++		numberFormat: null,
++		page: 10,
++		step: 1,
++
++		change: null,
++		spin: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		// handle string values that need to be parsed
++		this._setOption( "max", this.options.max );
++		this._setOption( "min", this.options.min );
++		this._setOption( "step", this.options.step );
++
++		// format the value, but don't constrain
++		this._value( this.element.val(), true );
++
++		this._draw();
++		this._on( this._events );
++		this._refresh();
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_getCreateOptions: function() {
++		var options = {},
++			element = this.element;
++
++		$.each( [ "min", "max", "step" ], function( i, option ) {
++			var value = element.attr( option );
++			if ( value !== undefined && value.length ) {
++				options[ option ] = value;
++			}
++		});
++
++		return options;
++	},
++
++	_events: {
++		keydown: function( event ) {
++			if ( this._start( event ) && this._keydown( event ) ) {
++				event.preventDefault();
++			}
++		},
++		keyup: "_stop",
++		focus: function() {
++			this.previous = this.element.val();
++		},
++		blur: function( event ) {
++			if ( this.cancelBlur ) {
++				delete this.cancelBlur;
++				return;
++			}
++
++			this._stop();
++			this._refresh();
++			if ( this.previous !== this.element.val() ) {
++				this._trigger( "change", event );
++			}
++		},
++		mousewheel: function( event, delta ) {
++			if ( !delta ) {
++				return;
++			}
++			if ( !this.spinning && !this._start( event ) ) {
++				return false;
++			}
++
++			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
++			clearTimeout( this.mousewheelTimer );
++			this.mousewheelTimer = this._delay(function() {
++				if ( this.spinning ) {
++					this._stop( event );
++				}
++			}, 100 );
++			event.preventDefault();
++		},
++		"mousedown .ui-spinner-button": function( event ) {
++			var previous;
++
++			// We never want the buttons to have focus; whenever the user is
++			// interacting with the spinner, the focus should be on the input.
++			// If the input is focused then this.previous is properly set from
++			// when the input first received focus. If the input is not focused
++			// then we need to set this.previous based on the value before spinning.
++			previous = this.element[0] === this.document[0].activeElement ?
++				this.previous : this.element.val();
++			function checkFocus() {
++				var isActive = this.element[0] === this.document[0].activeElement;
++				if ( !isActive ) {
++					this.element.focus();
++					this.previous = previous;
++					// support: IE
++					// IE sets focus asynchronously, so we need to check if focus
++					// moved off of the input because the user clicked on the button.
++					this._delay(function() {
++						this.previous = previous;
++					});
++				}
++			}
++
++			// ensure focus is on (or stays on) the text field
++			event.preventDefault();
++			checkFocus.call( this );
++
++			// support: IE
++			// IE doesn't prevent moving focus even with event.preventDefault()
++			// so we set a flag to know when we should ignore the blur event
++			// and check (again) if focus moved off of the input.
++			this.cancelBlur = true;
++			this._delay(function() {
++				delete this.cancelBlur;
++				checkFocus.call( this );
++			});
++
++			if ( this._start( event ) === false ) {
++				return;
++			}
++
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		"mouseup .ui-spinner-button": "_stop",
++		"mouseenter .ui-spinner-button": function( event ) {
++			// button will add ui-state-active if mouse was down while mouseleave and kept down
++			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
++				return;
++			}
++
++			if ( this._start( event ) === false ) {
++				return false;
++			}
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		// TODO: do we really want to consider this a stop?
++		// shouldn't we just stop the repeater and wait until mouseup before
++		// we trigger the stop event?
++		"mouseleave .ui-spinner-button": "_stop"
++	},
++
++	_draw: function() {
++		var uiSpinner = this.uiSpinner = this.element
++			.addClass( "ui-spinner-input" )
++			.attr( "autocomplete", "off" )
++			.wrap( this._uiSpinnerHtml() )
++			.parent()
++				// add buttons
++				.append( this._buttonHtml() );
++
++		this.element.attr( "role", "spinbutton" );
++
++		// button bindings
++		this.buttons = uiSpinner.find( ".ui-spinner-button" )
++			.attr( "tabIndex", -1 )
++			.button()
++			.removeClass( "ui-corner-all" );
++
++		// IE 6 doesn't understand height: 50% for the buttons
++		// unless the wrapper has an explicit height
++		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
++				uiSpinner.height() > 0 ) {
++			uiSpinner.height( uiSpinner.height() );
++		}
++
++		// disable spinner if element was already disabled
++		if ( this.options.disabled ) {
++			this.disable();
++		}
++	},
++
++	_keydown: function( event ) {
++		var options = this.options,
++			keyCode = $.ui.keyCode;
++
++		switch ( event.keyCode ) {
++		case keyCode.UP:
++			this._repeat( null, 1, event );
++			return true;
++		case keyCode.DOWN:
++			this._repeat( null, -1, event );
++			return true;
++		case keyCode.PAGE_UP:
++			this._repeat( null, options.page, event );
++			return true;
++		case keyCode.PAGE_DOWN:
++			this._repeat( null, -options.page, event );
++			return true;
++		}
++
++		return false;
++	},
++
++	_uiSpinnerHtml: function() {
++		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
++	},
++
++	_buttonHtml: function() {
++		return "" +
++			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
++				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
++			"</a>" +
++			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
++				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
++			"</a>";
++	},
++
++	_start: function( event ) {
++		if ( !this.spinning && this._trigger( "start", event ) === false ) {
++			return false;
++		}
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++		this.spinning = true;
++		return true;
++	},
++
++	_repeat: function( i, steps, event ) {
++		i = i || 500;
++
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			this._repeat( 40, steps, event );
++		}, i );
++
++		this._spin( steps * this.options.step, event );
++	},
++
++	_spin: function( step, event ) {
++		var value = this.value() || 0;
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++
++		value = this._adjustValue( value + step * this._increment( this.counter ) );
++
++		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
++			this._value( value );
++			this.counter++;
++		}
++	},
++
++	_increment: function( i ) {
++		var incremental = this.options.incremental;
++
++		if ( incremental ) {
++			return $.isFunction( incremental ) ?
++				incremental( i ) :
++				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
++		}
++
++		return 1;
++	},
++
++	_precision: function() {
++		var precision = this._precisionOf( this.options.step );
++		if ( this.options.min !== null ) {
++			precision = Math.max( precision, this._precisionOf( this.options.min ) );
++		}
++		return precision;
++	},
++
++	_precisionOf: function( num ) {
++		var str = num.toString(),
++			decimal = str.indexOf( "." );
++		return decimal === -1 ? 0 : str.length - decimal - 1;
++	},
++
++	_adjustValue: function( value ) {
++		var base, aboveMin,
++			options = this.options;
++
++		// make sure we're at a valid step
++		// - find out where we are relative to the base (min or 0)
++		base = options.min !== null ? options.min : 0;
++		aboveMin = value - base;
++		// - round to the nearest step
++		aboveMin = Math.round(aboveMin / options.step) * options.step;
++		// - rounding is based on 0, so adjust back to our base
++		value = base + aboveMin;
++
++		// fix precision from bad JS floating point math
++		value = parseFloat( value.toFixed( this._precision() ) );
++
++		// clamp the value
++		if ( options.max !== null && value > options.max) {
++			return options.max;
++		}
++		if ( options.min !== null && value < options.min ) {
++			return options.min;
++		}
++
++		return value;
++	},
++
++	_stop: function( event ) {
++		if ( !this.spinning ) {
++			return;
++		}
++
++		clearTimeout( this.timer );
++		clearTimeout( this.mousewheelTimer );
++		this.counter = 0;
++		this.spinning = false;
++		this._trigger( "stop", event );
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "culture" || key === "numberFormat" ) {
++			var prevValue = this._parse( this.element.val() );
++			this.options[ key ] = value;
++			this.element.val( this._format( prevValue ) );
++			return;
++		}
++
++		if ( key === "max" || key === "min" || key === "step" ) {
++			if ( typeof value === "string" ) {
++				value = this._parse( value );
++			}
++		}
++		if ( key === "icons" ) {
++			this.buttons.first().find( ".ui-icon" )
++				.removeClass( this.options.icons.up )
++				.addClass( value.up );
++			this.buttons.last().find( ".ui-icon" )
++				.removeClass( this.options.icons.down )
++				.addClass( value.down );
++		}
++
++		this._super( key, value );
++
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++				this.buttons.button( "disable" );
++			} else {
++				this.element.prop( "disabled", false );
++				this.buttons.button( "enable" );
++			}
++		}
++	},
++
++	_setOptions: modifier(function( options ) {
++		this._super( options );
++		this._value( this.element.val() );
++	}),
++
++	_parse: function( val ) {
++		if ( typeof val === "string" && val !== "" ) {
++			val = window.Globalize && this.options.numberFormat ?
++				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
++		}
++		return val === "" || isNaN( val ) ? null : val;
++	},
++
++	_format: function( value ) {
++		if ( value === "" ) {
++			return "";
++		}
++		return window.Globalize && this.options.numberFormat ?
++			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
++			value;
++	},
++
++	_refresh: function() {
++		this.element.attr({
++			"aria-valuemin": this.options.min,
++			"aria-valuemax": this.options.max,
++			// TODO: what should we do with values that can't be parsed?
++			"aria-valuenow": this._parse( this.element.val() )
++		});
++	},
++
++	// update the value without triggering change
++	_value: function( value, allowAny ) {
++		var parsed;
++		if ( value !== "" ) {
++			parsed = this._parse( value );
++			if ( parsed !== null ) {
++				if ( !allowAny ) {
++					parsed = this._adjustValue( parsed );
++				}
++				value = this._format( parsed );
++			}
++		}
++		this.element.val( value );
++		this._refresh();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-spinner-input" )
++			.prop( "disabled", false )
++			.removeAttr( "autocomplete" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++		this.uiSpinner.replaceWith( this.element );
++	},
++
++	stepUp: modifier(function( steps ) {
++		this._stepUp( steps );
++	}),
++	_stepUp: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * this.options.step );
++			this._stop();
++		}
++	},
++
++	stepDown: modifier(function( steps ) {
++		this._stepDown( steps );
++	}),
++	_stepDown: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * -this.options.step );
++			this._stop();
++		}
++	},
++
++	pageUp: modifier(function( pages ) {
++		this._stepUp( (pages || 1) * this.options.page );
++	}),
++
++	pageDown: modifier(function( pages ) {
++		this._stepDown( (pages || 1) * this.options.page );
++	}),
++
++	value: function( newVal ) {
++		if ( !arguments.length ) {
++			return this._parse( this.element.val() );
++		}
++		modifier( this._value ).call( this, newVal );
++	},
++
++	widget: function() {
++		return this.uiSpinner;
++	}
++});
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++var tabId = 0,
++	rhash = /#.*$/;
++
++function getNextTabId() {
++	return ++tabId;
++}
++
++function isLocal( anchor ) {
++	return anchor.hash.length > 1 &&
++		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
++			decodeURIComponent( location.href.replace( rhash, "" ) );
++}
++
++$.widget( "ui.tabs", {
++	version: "1.10.3",
++	delay: 300,
++	options: {
++		active: null,
++		collapsible: false,
++		event: "click",
++		heightStyle: "content",
++		hide: null,
++		show: null,
++
++		// callbacks
++		activate: null,
++		beforeActivate: null,
++		beforeLoad: null,
++		load: null
++	},
++
++	_create: function() {
++		var that = this,
++			options = this.options;
++
++		this.running = false;
++
++		this.element
++			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-tabs-collapsible", options.collapsible )
++			// Prevent users from focusing disabled tabs via click
++			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
++				if ( $( this ).is( ".ui-state-disabled" ) ) {
++					event.preventDefault();
++				}
++			})
++			// support: IE <9
++			// Preventing the default action in mousedown doesn't prevent IE
++			// from focusing the element, so if the anchor gets focused, blur.
++			// We don't have to worry about focusing the previously focused
++			// element since clicking on a non-focusable element should focus
++			// the body anyway.
++			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
++				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
++					this.blur();
++				}
++			});
++
++		this._processTabs();
++		options.active = this._initialActive();
++
++		// Take disabling tabs via class attribute from HTML
++		// into account and update option properly.
++		if ( $.isArray( options.disabled ) ) {
++			options.disabled = $.unique( options.disabled.concat(
++				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
++					return that.tabs.index( li );
++				})
++			) ).sort();
++		}
++
++		// check for length avoids error when initializing empty list
++		if ( this.options.active !== false && this.anchors.length ) {
++			this.active = this._findActive( options.active );
++		} else {
++			this.active = $();
++		}
++
++		this._refresh();
++
++		if ( this.active.length ) {
++			this.load( options.active );
++		}
++	},
++
++	_initialActive: function() {
++		var active = this.options.active,
++			collapsible = this.options.collapsible,
++			locationHash = location.hash.substring( 1 );
++
++		if ( active === null ) {
++			// check the fragment identifier in the URL
++			if ( locationHash ) {
++				this.tabs.each(function( i, tab ) {
++					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
++						active = i;
++						return false;
++					}
++				});
++			}
++
++			// check for a tab marked active via a class
++			if ( active === null ) {
++				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
++			}
++
++			// no active tab, set to false
++			if ( active === null || active === -1 ) {
++				active = this.tabs.length ? 0 : false;
++			}
++		}
++
++		// handle numbers: negative, out of range
++		if ( active !== false ) {
++			active = this.tabs.index( this.tabs.eq( active ) );
++			if ( active === -1 ) {
++				active = collapsible ? false : 0;
++			}
++		}
++
++		// don't allow collapsible: false and active: false
++		if ( !collapsible && active === false && this.anchors.length ) {
++			active = 0;
++		}
++
++		return active;
++	},
++
++	_getCreateEventData: function() {
++		return {
++			tab: this.active,
++			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
++		};
++	},
++
++	_tabKeydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
++			selectedIndex = this.tabs.index( focusedTab ),
++			goingForward = true;
++
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		switch ( event.keyCode ) {
++			case $.ui.keyCode.RIGHT:
++			case $.ui.keyCode.DOWN:
++				selectedIndex++;
++				break;
++			case $.ui.keyCode.UP:
++			case $.ui.keyCode.LEFT:
++				goingForward = false;
++				selectedIndex--;
++				break;
++			case $.ui.keyCode.END:
++				selectedIndex = this.anchors.length - 1;
++				break;
++			case $.ui.keyCode.HOME:
++				selectedIndex = 0;
++				break;
++			case $.ui.keyCode.SPACE:
++				// Activate only, no collapsing
++				event.preventDefault();
++				clearTimeout( this.activating );
++				this._activate( selectedIndex );
++				return;
++			case $.ui.keyCode.ENTER:
++				// Toggle (cancel delayed activation, allow collapsing)
++				event.preventDefault();
++				clearTimeout( this.activating );
++				// Determine if we should collapse or activate
++				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
++				return;
++			default:
++				return;
++		}
++
++		// Focus the appropriate tab, based on which key was pressed
++		event.preventDefault();
++		clearTimeout( this.activating );
++		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
++
++		// Navigating with control key will prevent automatic activation
++		if ( !event.ctrlKey ) {
++			// Update aria-selected immediately so that AT think the tab is already selected.
++			// Otherwise AT may confuse the user by stating that they need to activate the tab,
++			// but the tab will already be activated by the time the announcement finishes.
++			focusedTab.attr( "aria-selected", "false" );
++			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
++
++			this.activating = this._delay(function() {
++				this.option( "active", selectedIndex );
++			}, this.delay );
++		}
++	},
++
++	_panelKeydown: function( event ) {
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		// Ctrl+up moves focus to the current tab
++		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
++			event.preventDefault();
++			this.active.focus();
++		}
++	},
++
++	// Alt+page up/down moves focus to the previous/next tab (and activates)
++	_handlePageNav: function( event ) {
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
++			this._activate( this._focusNextTab( this.options.active - 1, false ) );
++			return true;
++		}
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
++			this._activate( this._focusNextTab( this.options.active + 1, true ) );
++			return true;
++		}
++	},
++
++	_findNextTab: function( index, goingForward ) {
++		var lastTabIndex = this.tabs.length - 1;
++
++		function constrain() {
++			if ( index > lastTabIndex ) {
++				index = 0;
++			}
++			if ( index < 0 ) {
++				index = lastTabIndex;
++			}
++			return index;
++		}
++
++		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
++			index = goingForward ? index + 1 : index - 1;
++		}
++
++		return index;
++	},
++
++	_focusNextTab: function( index, goingForward ) {
++		index = this._findNextTab( index, goingForward );
++		this.tabs.eq( index ).focus();
++		return index;
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "disabled" ) {
++			// don't use the widget factory's disabled handling
++			this._setupDisabled( value );
++			return;
++		}
++
++		this._super( key, value);
++
++		if ( key === "collapsible" ) {
++			this.element.toggleClass( "ui-tabs-collapsible", value );
++			// Setting collapsible: false while collapsed; open first panel
++			if ( !value && this.options.active === false ) {
++				this._activate( 0 );
++			}
++		}
++
++		if ( key === "event" ) {
++			this._setupEvents( value );
++		}
++
++		if ( key === "heightStyle" ) {
++			this._setupHeightStyle( value );
++		}
++	},
++
++	_tabId: function( tab ) {
++		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
++	},
++
++	_sanitizeSelector: function( hash ) {
++		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
++	},
++
++	refresh: function() {
++		var options = this.options,
++			lis = this.tablist.children( ":has(a[href])" );
++
++		// get disabled tabs from class attribute from HTML
++		// this will get converted to a boolean if needed in _refresh()
++		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
++			return lis.index( tab );
++		});
++
++		this._processTabs();
++
++		// was collapsed or no tabs
++		if ( options.active === false || !this.anchors.length ) {
++			options.active = false;
++			this.active = $();
++		// was active, but active tab is gone
++		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining tabs are disabled
++			if ( this.tabs.length === options.disabled.length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous tab
++			} else {
++				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
++			}
++		// was active, active tab still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.tabs.index( this.active );
++		}
++
++		this._refresh();
++	},
++
++	_refresh: function() {
++		this._setupDisabled( this.options.disabled );
++		this._setupEvents( this.options.event );
++		this._setupHeightStyle( this.options.heightStyle );
++
++		this.tabs.not( this.active ).attr({
++			"aria-selected": "false",
++			tabIndex: -1
++		});
++		this.panels.not( this._getPanelForTab( this.active ) )
++			.hide()
++			.attr({
++				"aria-expanded": "false",
++				"aria-hidden": "true"
++			});
++
++		// Make sure one tab is in the tab order
++		if ( !this.active.length ) {
++			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active
++				.addClass( "ui-tabs-active ui-state-active" )
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++			this._getPanelForTab( this.active )
++				.show()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++	},
++
++	_processTabs: function() {
++		var that = this;
++
++		this.tablist = this._getList()
++			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.attr( "role", "tablist" );
++
++		this.tabs = this.tablist.find( "> li:has(a[href])" )
++			.addClass( "ui-state-default ui-corner-top" )
++			.attr({
++				role: "tab",
++				tabIndex: -1
++			});
++
++		this.anchors = this.tabs.map(function() {
++				return $( "a", this )[ 0 ];
++			})
++			.addClass( "ui-tabs-anchor" )
++			.attr({
++				role: "presentation",
++				tabIndex: -1
++			});
++
++		this.panels = $();
++
++		this.anchors.each(function( i, anchor ) {
++			var selector, panel, panelId,
++				anchorId = $( anchor ).uniqueId().attr( "id" ),
++				tab = $( anchor ).closest( "li" ),
++				originalAriaControls = tab.attr( "aria-controls" );
++
++			// inline tab
++			if ( isLocal( anchor ) ) {
++				selector = anchor.hash;
++				panel = that.element.find( that._sanitizeSelector( selector ) );
++			// remote tab
++			} else {
++				panelId = that._tabId( tab );
++				selector = "#" + panelId;
++				panel = that.element.find( selector );
++				if ( !panel.length ) {
++					panel = that._createPanel( panelId );
++					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
++				}
++				panel.attr( "aria-live", "polite" );
++			}
++
++			if ( panel.length) {
++				that.panels = that.panels.add( panel );
++			}
++			if ( originalAriaControls ) {
++				tab.data( "ui-tabs-aria-controls", originalAriaControls );
++			}
++			tab.attr({
++				"aria-controls": selector.substring( 1 ),
++				"aria-labelledby": anchorId
++			});
++			panel.attr( "aria-labelledby", anchorId );
++		});
++
++		this.panels
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.attr( "role", "tabpanel" );
++	},
++
++	// allow overriding how to find the list for rare usage scenarios (#7715)
++	_getList: function() {
++		return this.element.find( "ol,ul" ).eq( 0 );
++	},
++
++	_createPanel: function( id ) {
++		return $( "<div>" )
++			.attr( "id", id )
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.data( "ui-tabs-destroy", true );
++	},
++
++	_setupDisabled: function( disabled ) {
++		if ( $.isArray( disabled ) ) {
++			if ( !disabled.length ) {
++				disabled = false;
++			} else if ( disabled.length === this.anchors.length ) {
++				disabled = true;
++			}
++		}
++
++		// disable tabs
++		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
++			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
++				$( li )
++					.addClass( "ui-state-disabled" )
++					.attr( "aria-disabled", "true" );
++			} else {
++				$( li )
++					.removeClass( "ui-state-disabled" )
++					.removeAttr( "aria-disabled" );
++			}
++		}
++
++		this.options.disabled = disabled;
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			click: function( event ) {
++				event.preventDefault();
++			}
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
++		this._on( this.anchors, events );
++		this._on( this.tabs, { keydown: "_tabKeydown" } );
++		this._on( this.panels, { keydown: "_panelKeydown" } );
++
++		this._focusable( this.tabs );
++		this._hoverable( this.tabs );
++	},
++
++	_setupHeightStyle: function( heightStyle ) {
++		var maxHeight,
++			parent = this.element.parent();
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			maxHeight -= this.element.outerHeight() - this.element.height();
++
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.element.children().not( this.panels ).each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.panels.each(function() {
++				$( this ).height( Math.max( 0, maxHeight -
++					$( this ).innerHeight() + $( this ).height() ) );
++			})
++			.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.panels.each(function() {
++				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
++			}).height( maxHeight );
++		}
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			anchor = $( event.currentTarget ),
++			tab = anchor.closest( "li" ),
++			clickedIsActive = tab[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : this._getPanelForTab( tab ),
++			toHide = !active.length ? $() : this._getPanelForTab( active ),
++			eventData = {
++				oldTab: active,
++				oldPanel: toHide,
++				newTab: collapsing ? $() : tab,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if ( tab.hasClass( "ui-state-disabled" ) ||
++				// tab is already loading
++				tab.hasClass( "ui-tabs-loading" ) ||
++				// can't switch durning an animation
++				this.running ||
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.tabs.index( tab );
++
++		this.active = clickedIsActive ? $() : tab;
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		if ( !toHide.length && !toShow.length ) {
++			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
++		}
++
++		if ( toShow.length ) {
++			this.load( this.tabs.index( tab ), event );
++		}
++		this._toggle( event, eventData );
++	},
++
++	// handles show/hide for selecting tabs
++	_toggle: function( event, eventData ) {
++		var that = this,
++			toShow = eventData.newPanel,
++			toHide = eventData.oldPanel;
++
++		this.running = true;
++
++		function complete() {
++			that.running = false;
++			that._trigger( "activate", event, eventData );
++		}
++
++		function show() {
++			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
++
++			if ( toShow.length && that.options.show ) {
++				that._show( toShow, that.options.show, complete );
++			} else {
++				toShow.show();
++				complete();
++			}
++		}
++
++		// start out by hiding, then showing, then completing
++		if ( toHide.length && this.options.hide ) {
++			this._hide( toHide, this.options.hide, function() {
++				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++				show();
++			});
++		} else {
++			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++			toHide.hide();
++			show();
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		eventData.oldTab.attr( "aria-selected", "false" );
++		// If we're switching tabs, remove the old tab from the tab order.
++		// If we're opening from collapsed state, remove the previous tab from the tab order.
++		// If we're collapsing, then keep the collapsing tab in the tab order.
++		if ( toShow.length && toHide.length ) {
++			eventData.oldTab.attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.tabs.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow.attr({
++			"aria-expanded": "true",
++			"aria-hidden": "false"
++		});
++		eventData.newTab.attr({
++			"aria-selected": "true",
++			tabIndex: 0
++		});
++	},
++
++	_activate: function( index ) {
++		var anchor,
++			active = this._findActive( index );
++
++		// trying to activate the already active panel
++		if ( active[ 0 ] === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the current active header
++		if ( !active.length ) {
++			active = this.active;
++		}
++
++		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
++		this._eventHandler({
++			target: anchor,
++			currentTarget: anchor,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( index ) {
++		return index === false ? $() : this.tabs.eq( index );
++	},
++
++	_getIndex: function( index ) {
++		// meta-function to give users option to provide a href string instead of a numerical index.
++		if ( typeof index === "string" ) {
++			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
++		}
++
++		return index;
++	},
++
++	_destroy: function() {
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
++
++		this.tablist
++			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.removeAttr( "role" );
++
++		this.anchors
++			.removeClass( "ui-tabs-anchor" )
++			.removeAttr( "role" )
++			.removeAttr( "tabIndex" )
++			.removeUniqueId();
++
++		this.tabs.add( this.panels ).each(function() {
++			if ( $.data( this, "ui-tabs-destroy" ) ) {
++				$( this ).remove();
++			} else {
++				$( this )
++					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
++						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
++					.removeAttr( "tabIndex" )
++					.removeAttr( "aria-live" )
++					.removeAttr( "aria-busy" )
++					.removeAttr( "aria-selected" )
++					.removeAttr( "aria-labelledby" )
++					.removeAttr( "aria-hidden" )
++					.removeAttr( "aria-expanded" )
++					.removeAttr( "role" );
++			}
++		});
++
++		this.tabs.each(function() {
++			var li = $( this ),
++				prev = li.data( "ui-tabs-aria-controls" );
++			if ( prev ) {
++				li
++					.attr( "aria-controls", prev )
++					.removeData( "ui-tabs-aria-controls" );
++			} else {
++				li.removeAttr( "aria-controls" );
++			}
++		});
++
++		this.panels.show();
++
++		if ( this.options.heightStyle !== "content" ) {
++			this.panels.css( "height", "" );
++		}
++	},
++
++	enable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === false ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = false;
++		} else {
++			index = this._getIndex( index );
++			if ( $.isArray( disabled ) ) {
++				disabled = $.map( disabled, function( num ) {
++					return num !== index ? num : null;
++				});
++			} else {
++				disabled = $.map( this.tabs, function( li, num ) {
++					return num !== index ? num : null;
++				});
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	disable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === true ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = true;
++		} else {
++			index = this._getIndex( index );
++			if ( $.inArray( index, disabled ) !== -1 ) {
++				return;
++			}
++			if ( $.isArray( disabled ) ) {
++				disabled = $.merge( [ index ], disabled ).sort();
++			} else {
++				disabled = [ index ];
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	load: function( index, event ) {
++		index = this._getIndex( index );
++		var that = this,
++			tab = this.tabs.eq( index ),
++			anchor = tab.find( ".ui-tabs-anchor" ),
++			panel = this._getPanelForTab( tab ),
++			eventData = {
++				tab: tab,
++				panel: panel
++			};
++
++		// not remote
++		if ( isLocal( anchor[ 0 ] ) ) {
++			return;
++		}
++
++		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
++
++		// support: jQuery <1.8
++		// jQuery <1.8 returns false if the request is canceled in beforeSend,
++		// but as of 1.8, $.ajax() always returns a jqXHR object.
++		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
++			tab.addClass( "ui-tabs-loading" );
++			panel.attr( "aria-busy", "true" );
++
++			this.xhr
++				.success(function( response ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						panel.html( response );
++						that._trigger( "load", event, eventData );
++					}, 1 );
++				})
++				.complete(function( jqXHR, status ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						if ( status === "abort" ) {
++							that.panels.stop( false, true );
++						}
++
++						tab.removeClass( "ui-tabs-loading" );
++						panel.removeAttr( "aria-busy" );
++
++						if ( jqXHR === that.xhr ) {
++							delete that.xhr;
++						}
++					}, 1 );
++				});
++		}
++	},
++
++	_ajaxSettings: function( anchor, event, eventData ) {
++		var that = this;
++		return {
++			url: anchor.attr( "href" ),
++			beforeSend: function( jqXHR, settings ) {
++				return that._trigger( "beforeLoad", event,
++					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
++			}
++		};
++	},
++
++	_getPanelForTab: function( tab ) {
++		var id = $( tab ).attr( "aria-controls" );
++		return this.element.find( this._sanitizeSelector( "#" + id ) );
++	}
++});
++
++})( jQuery );
++(function( $ ) {
++
++var increments = 0;
++
++function addDescribedBy( elem, id ) {
++	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
++	describedby.push( id );
++	elem
++		.data( "ui-tooltip-id", id )
++		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
++}
++
++function removeDescribedBy( elem ) {
++	var id = elem.data( "ui-tooltip-id" ),
++		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
++		index = $.inArray( id, describedby );
++	if ( index !== -1 ) {
++		describedby.splice( index, 1 );
++	}
++
++	elem.removeData( "ui-tooltip-id" );
++	describedby = $.trim( describedby.join( " " ) );
++	if ( describedby ) {
++		elem.attr( "aria-describedby", describedby );
++	} else {
++		elem.removeAttr( "aria-describedby" );
++	}
++}
++
++$.widget( "ui.tooltip", {
++	version: "1.10.3",
++	options: {
++		content: function() {
++			// support: IE<9, Opera in jQuery <1.7
++			// .text() can't accept undefined, so coerce to a string
++			var title = $( this ).attr( "title" ) || "";
++			// Escape title, since we're going from an attribute to raw HTML
++			return $( "<a>" ).text( title ).html();
++		},
++		hide: true,
++		// Disabled elements have inconsistent behavior across browsers (#8661)
++		items: "[title]:not([disabled])",
++		position: {
++			my: "left top+15",
++			at: "left bottom",
++			collision: "flipfit flip"
++		},
++		show: true,
++		tooltipClass: null,
++		track: false,
++
++		// callbacks
++		close: null,
++		open: null
++	},
++
++	_create: function() {
++		this._on({
++			mouseover: "open",
++			focusin: "open"
++		});
++
++		// IDs of generated tooltips, needed for destroy
++		this.tooltips = {};
++		// IDs of parent tooltips where we removed the title attribute
++		this.parents = {};
++
++		if ( this.options.disabled ) {
++			this._disable();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var that = this;
++
++		if ( key === "disabled" ) {
++			this[ value ? "_disable" : "_enable" ]();
++			this.options[ key ] = value;
++			// disable element style changes
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "content" ) {
++			$.each( this.tooltips, function( id, element ) {
++				that._updateContent( element );
++			});
++		}
++	},
++
++	_disable: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++		});
++
++		// remove title attributes to prevent native tooltips
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.is( "[title]" ) ) {
++				element
++					.data( "ui-tooltip-title", element.attr( "title" ) )
++					.attr( "title", "" );
++			}
++		});
++	},
++
++	_enable: function() {
++		// restore title attributes
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++			}
++		});
++	},
++
++	open: function( event ) {
++		var that = this,
++			target = $( event ? event.target : this.element )
++				// we need closest here due to mouseover bubbling,
++				// but always pointing at the same event target
++				.closest( this.options.items );
++
++		// No element to show a tooltip for or the tooltip is already open
++		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
++			return;
++		}
++
++		if ( target.attr( "title" ) ) {
++			target.data( "ui-tooltip-title", target.attr( "title" ) );
++		}
++
++		target.data( "ui-tooltip-open", true );
++
++		// kill parent tooltips, custom or native, for hover
++		if ( event && event.type === "mouseover" ) {
++			target.parents().each(function() {
++				var parent = $( this ),
++					blurEvent;
++				if ( parent.data( "ui-tooltip-open" ) ) {
++					blurEvent = $.Event( "blur" );
++					blurEvent.target = blurEvent.currentTarget = this;
++					that.close( blurEvent, true );
++				}
++				if ( parent.attr( "title" ) ) {
++					parent.uniqueId();
++					that.parents[ this.id ] = {
++						element: this,
++						title: parent.attr( "title" )
++					};
++					parent.attr( "title", "" );
++				}
++			});
++		}
++
++		this._updateContent( target, event );
++	},
++
++	_updateContent: function( target, event ) {
++		var content,
++			contentOption = this.options.content,
++			that = this,
++			eventType = event ? event.type : null;
++
++		if ( typeof contentOption === "string" ) {
++			return this._open( event, target, contentOption );
++		}
++
++		content = contentOption.call( target[0], function( response ) {
++			// ignore async response if tooltip was closed already
++			if ( !target.data( "ui-tooltip-open" ) ) {
++				return;
++			}
++			// IE may instantly serve a cached response for ajax requests
++			// delay this call to _open so the other call to _open runs first
++			that._delay(function() {
++				// jQuery creates a special event for focusin when it doesn't
++				// exist natively. To improve performance, the native event
++				// object is reused and the type is changed. Therefore, we can't
++				// rely on the type being correct after the event finished
++				// bubbling, so we set it back to the previous value. (#8740)
++				if ( event ) {
++					event.type = eventType;
++				}
++				this._open( event, target, response );
++			});
++		});
++		if ( content ) {
++			this._open( event, target, content );
++		}
++	},
++
++	_open: function( event, target, content ) {
++		var tooltip, events, delayedShow,
++			positionOption = $.extend( {}, this.options.position );
++
++		if ( !content ) {
++			return;
++		}
++
++		// Content can be updated multiple times. If the tooltip already
++		// exists, then just update the content and bail.
++		tooltip = this._find( target );
++		if ( tooltip.length ) {
++			tooltip.find( ".ui-tooltip-content" ).html( content );
++			return;
++		}
++
++		// if we have a title, clear it to prevent the native tooltip
++		// we have to check first to avoid defining a title if none exists
++		// (we don't want to cause an element to start matching [title])
++		//
++		// We use removeAttr only for key events, to allow IE to export the correct
++		// accessible attributes. For mouse events, set to empty string to avoid
++		// native tooltip showing up (happens only when removing inside mouseover).
++		if ( target.is( "[title]" ) ) {
++			if ( event && event.type === "mouseover" ) {
++				target.attr( "title", "" );
++			} else {
++				target.removeAttr( "title" );
++			}
++		}
++
++		tooltip = this._tooltip( target );
++		addDescribedBy( target, tooltip.attr( "id" ) );
++		tooltip.find( ".ui-tooltip-content" ).html( content );
++
++		function position( event ) {
++			positionOption.of = event;
++			if ( tooltip.is( ":hidden" ) ) {
++				return;
++			}
++			tooltip.position( positionOption );
++		}
++		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
++			this._on( this.document, {
++				mousemove: position
++			});
++			// trigger once to override element-relative positioning
++			position( event );
++		} else {
++			tooltip.position( $.extend({
++				of: target
++			}, this.options.position ) );
++		}
++
++		tooltip.hide();
++
++		this._show( tooltip, this.options.show );
++		// Handle tracking tooltips that are shown with a delay (#8644). As soon
++		// as the tooltip is visible, position the tooltip using the most recent
++		// event.
++		if ( this.options.show && this.options.show.delay ) {
++			delayedShow = this.delayedShow = setInterval(function() {
++				if ( tooltip.is( ":visible" ) ) {
++					position( positionOption.of );
++					clearInterval( delayedShow );
++				}
++			}, $.fx.interval );
++		}
++
++		this._trigger( "open", event, { tooltip: tooltip } );
++
++		events = {
++			keyup: function( event ) {
++				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
++					var fakeEvent = $.Event(event);
++					fakeEvent.currentTarget = target[0];
++					this.close( fakeEvent, true );
++				}
++			},
++			remove: function() {
++				this._removeTooltip( tooltip );
++			}
++		};
++		if ( !event || event.type === "mouseover" ) {
++			events.mouseleave = "close";
++		}
++		if ( !event || event.type === "focusin" ) {
++			events.focusout = "close";
++		}
++		this._on( true, target, events );
++	},
++
++	close: function( event ) {
++		var that = this,
++			target = $( event ? event.currentTarget : this.element ),
++			tooltip = this._find( target );
++
++		// disabling closes the tooltip, so we need to track when we're closing
++		// to avoid an infinite loop in case the tooltip becomes disabled on close
++		if ( this.closing ) {
++			return;
++		}
++
++		// Clear the interval for delayed tracking tooltips
++		clearInterval( this.delayedShow );
++
++		// only set title if we had one before (see comment in _open())
++		if ( target.data( "ui-tooltip-title" ) ) {
++			target.attr( "title", target.data( "ui-tooltip-title" ) );
++		}
++
++		removeDescribedBy( target );
++
++		tooltip.stop( true );
++		this._hide( tooltip, this.options.hide, function() {
++			that._removeTooltip( $( this ) );
++		});
++
++		target.removeData( "ui-tooltip-open" );
++		this._off( target, "mouseleave focusout keyup" );
++		// Remove 'remove' binding only on delegated targets
++		if ( target[0] !== this.element[0] ) {
++			this._off( target, "remove" );
++		}
++		this._off( this.document, "mousemove" );
++
++		if ( event && event.type === "mouseleave" ) {
++			$.each( this.parents, function( id, parent ) {
++				$( parent.element ).attr( "title", parent.title );
++				delete that.parents[ id ];
++			});
++		}
++
++		this.closing = true;
++		this._trigger( "close", event, { tooltip: tooltip } );
++		this.closing = false;
++	},
++
++	_tooltip: function( element ) {
++		var id = "ui-tooltip-" + increments++,
++			tooltip = $( "<div>" )
++				.attr({
++					id: id,
++					role: "tooltip"
++				})
++				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
++					( this.options.tooltipClass || "" ) );
++		$( "<div>" )
++			.addClass( "ui-tooltip-content" )
++			.appendTo( tooltip );
++		tooltip.appendTo( this.document[0].body );
++		this.tooltips[ id ] = element;
++		return tooltip;
++	},
++
++	_find: function( target ) {
++		var id = target.data( "ui-tooltip-id" );
++		return id ? $( "#" + id ) : $();
++	},
++
++	_removeTooltip: function( tooltip ) {
++		tooltip.remove();
++		delete this.tooltips[ tooltip.attr( "id" ) ];
++	},
++
++	_destroy: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			// Delegate to close method to handle common cleanup
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++
++			// Remove immediately; destroying an open tooltip doesn't use the
++			// hide animation
++			$( "#" + id ).remove();
++
++			// Restore the title
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++				element.removeData( "ui-tooltip-title" );
++			}
++		});
++	}
++});
++
++}( jQuery ) );
++(function($, undefined) {
++
++var dataSpace = "ui-effects-";
++
++$.effects = {
++	effect: {}
++};
++
++/*!
++ * jQuery Color Animations v2.1.2
++ * https://github.com/jquery/jquery-color
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * Date: Wed Jan 16 08:47:09 2013 -0600
++ */
++(function( jQuery, undefined ) {
++
++	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
++
++	// plusequals test for += 100 -= 100
++	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
++	// a set of RE's that can match strings and generate color tuples.
++	stringParsers = [{
++			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ],
++					execResult[ 3 ],
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ] * 2.55,
++					execResult[ 2 ] * 2.55,
++					execResult[ 3 ] * 2.55,
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			space: "hsla",
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ] / 100,
++					execResult[ 3 ] / 100,
++					execResult[ 4 ]
++				];
++			}
++		}],
++
++	// jQuery.Color( )
++	color = jQuery.Color = function( color, green, blue, alpha ) {
++		return new jQuery.Color.fn.parse( color, green, blue, alpha );
++	},
++	spaces = {
++		rgba: {
++			props: {
++				red: {
++					idx: 0,
++					type: "byte"
++				},
++				green: {
++					idx: 1,
++					type: "byte"
++				},
++				blue: {
++					idx: 2,
++					type: "byte"
++				}
++			}
++		},
++
++		hsla: {
++			props: {
++				hue: {
++					idx: 0,
++					type: "degrees"
++				},
++				saturation: {
++					idx: 1,
++					type: "percent"
++				},
++				lightness: {
++					idx: 2,
++					type: "percent"
++				}
++			}
++		}
++	},
++	propTypes = {
++		"byte": {
++			floor: true,
++			max: 255
++		},
++		"percent": {
++			max: 1
++		},
++		"degrees": {
++			mod: 360,
++			floor: true
++		}
++	},
++	support = color.support = {},
++
++	// element for support tests
++	supportElem = jQuery( "<p>" )[ 0 ],
++
++	// colors = jQuery.Color.names
++	colors,
++
++	// local aliases of functions called often
++	each = jQuery.each;
++
++// determine rgba support immediately
++supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
++support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
++
++// define cache name and alpha properties
++// for rgba and hsla spaces
++each( spaces, function( spaceName, space ) {
++	space.cache = "_" + spaceName;
++	space.props.alpha = {
++		idx: 3,
++		type: "percent",
++		def: 1
++	};
++});
++
++function clamp( value, prop, allowEmpty ) {
++	var type = propTypes[ prop.type ] || {};
++
++	if ( value == null ) {
++		return (allowEmpty || !prop.def) ? null : prop.def;
++	}
++
++	// ~~ is an short way of doing floor for positive numbers
++	value = type.floor ? ~~value : parseFloat( value );
++
++	// IE will pass in empty strings as value for alpha,
++	// which will hit this case
++	if ( isNaN( value ) ) {
++		return prop.def;
++	}
++
++	if ( type.mod ) {
++		// we add mod before modding to make sure that negatives values
++		// get converted properly: -10 -> 350
++		return (value + type.mod) % type.mod;
++	}
++
++	// for now all property types without mod have min and max
++	return 0 > value ? 0 : type.max < value ? type.max : value;
++}
++
++function stringParse( string ) {
++	var inst = color(),
++		rgba = inst._rgba = [];
++
++	string = string.toLowerCase();
++
++	each( stringParsers, function( i, parser ) {
++		var parsed,
++			match = parser.re.exec( string ),
++			values = match && parser.parse( match ),
++			spaceName = parser.space || "rgba";
++
++		if ( values ) {
++			parsed = inst[ spaceName ]( values );
++
++			// if this was an rgba parse the assignment might happen twice
++			// oh well....
++			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
++			rgba = inst._rgba = parsed._rgba;
++
++			// exit each( stringParsers ) here because we matched
++			return false;
++		}
++	});
++
++	// Found a stringParser that handled it
++	if ( rgba.length ) {
++
++		// if this came from a parsed string, force "transparent" when alpha is 0
++		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
++		if ( rgba.join() === "0,0,0,0" ) {
++			jQuery.extend( rgba, colors.transparent );
++		}
++		return inst;
++	}
++
++	// named colors
++	return colors[ string ];
++}
++
++color.fn = jQuery.extend( color.prototype, {
++	parse: function( red, green, blue, alpha ) {
++		if ( red === undefined ) {
++			this._rgba = [ null, null, null, null ];
++			return this;
++		}
++		if ( red.jquery || red.nodeType ) {
++			red = jQuery( red ).css( green );
++			green = undefined;
++		}
++
++		var inst = this,
++			type = jQuery.type( red ),
++			rgba = this._rgba = [];
++
++		// more than 1 argument specified - assume ( red, green, blue, alpha )
++		if ( green !== undefined ) {
++			red = [ red, green, blue, alpha ];
++			type = "array";
++		}
++
++		if ( type === "string" ) {
++			return this.parse( stringParse( red ) || colors._default );
++		}
++
++		if ( type === "array" ) {
++			each( spaces.rgba.props, function( key, prop ) {
++				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
++			});
++			return this;
++		}
++
++		if ( type === "object" ) {
++			if ( red instanceof color ) {
++				each( spaces, function( spaceName, space ) {
++					if ( red[ space.cache ] ) {
++						inst[ space.cache ] = red[ space.cache ].slice();
++					}
++				});
++			} else {
++				each( spaces, function( spaceName, space ) {
++					var cache = space.cache;
++					each( space.props, function( key, prop ) {
++
++						// if the cache doesn't exist, and we know how to convert
++						if ( !inst[ cache ] && space.to ) {
++
++							// if the value was null, we don't need to copy it
++							// if the key was alpha, we don't need to copy it either
++							if ( key === "alpha" || red[ key ] == null ) {
++								return;
++							}
++							inst[ cache ] = space.to( inst._rgba );
++						}
++
++						// this is the only case where we allow nulls for ALL properties.
++						// call clamp with alwaysAllowEmpty
++						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
++					});
++
++					// everything defined but alpha?
++					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
++						// use the default of 1
++						inst[ cache ][ 3 ] = 1;
++						if ( space.from ) {
++							inst._rgba = space.from( inst[ cache ] );
++						}
++					}
++				});
++			}
++			return this;
++		}
++	},
++	is: function( compare ) {
++		var is = color( compare ),
++			same = true,
++			inst = this;
++
++		each( spaces, function( _, space ) {
++			var localCache,
++				isCache = is[ space.cache ];
++			if (isCache) {
++				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
++				each( space.props, function( _, prop ) {
++					if ( isCache[ prop.idx ] != null ) {
++						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
++						return same;
++					}
++				});
++			}
++			return same;
++		});
++		return same;
++	},
++	_space: function() {
++		var used = [],
++			inst = this;
++		each( spaces, function( spaceName, space ) {
++			if ( inst[ space.cache ] ) {
++				used.push( spaceName );
++			}
++		});
++		return used.pop();
++	},
++	transition: function( other, distance ) {
++		var end = color( other ),
++			spaceName = end._space(),
++			space = spaces[ spaceName ],
++			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
++			start = startColor[ space.cache ] || space.to( startColor._rgba ),
++			result = start.slice();
++
++		end = end[ space.cache ];
++		each( space.props, function( key, prop ) {
++			var index = prop.idx,
++				startValue = start[ index ],
++				endValue = end[ index ],
++				type = propTypes[ prop.type ] || {};
++
++			// if null, don't override start value
++			if ( endValue === null ) {
++				return;
++			}
++			// if null - use end
++			if ( startValue === null ) {
++				result[ index ] = endValue;
++			} else {
++				if ( type.mod ) {
++					if ( endValue - startValue > type.mod / 2 ) {
++						startValue += type.mod;
++					} else if ( startValue - endValue > type.mod / 2 ) {
++						startValue -= type.mod;
++					}
++				}
++				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
++			}
++		});
++		return this[ spaceName ]( result );
++	},
++	blend: function( opaque ) {
++		// if we are already opaque - return ourself
++		if ( this._rgba[ 3 ] === 1 ) {
++			return this;
++		}
++
++		var rgb = this._rgba.slice(),
++			a = rgb.pop(),
++			blend = color( opaque )._rgba;
++
++		return color( jQuery.map( rgb, function( v, i ) {
++			return ( 1 - a ) * blend[ i ] + a * v;
++		}));
++	},
++	toRgbaString: function() {
++		var prefix = "rgba(",
++			rgba = jQuery.map( this._rgba, function( v, i ) {
++				return v == null ? ( i > 2 ? 1 : 0 ) : v;
++			});
++
++		if ( rgba[ 3 ] === 1 ) {
++			rgba.pop();
++			prefix = "rgb(";
++		}
++
++		return prefix + rgba.join() + ")";
++	},
++	toHslaString: function() {
++		var prefix = "hsla(",
++			hsla = jQuery.map( this.hsla(), function( v, i ) {
++				if ( v == null ) {
++					v = i > 2 ? 1 : 0;
++				}
++
++				// catch 1 and 2
++				if ( i && i < 3 ) {
++					v = Math.round( v * 100 ) + "%";
++				}
++				return v;
++			});
++
++		if ( hsla[ 3 ] === 1 ) {
++			hsla.pop();
++			prefix = "hsl(";
++		}
++		return prefix + hsla.join() + ")";
++	},
++	toHexString: function( includeAlpha ) {
++		var rgba = this._rgba.slice(),
++			alpha = rgba.pop();
++
++		if ( includeAlpha ) {
++			rgba.push( ~~( alpha * 255 ) );
++		}
++
++		return "#" + jQuery.map( rgba, function( v ) {
++
++			// default to 0 when nulls exist
++			v = ( v || 0 ).toString( 16 );
++			return v.length === 1 ? "0" + v : v;
++		}).join("");
++	},
++	toString: function() {
++		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
++	}
++});
++color.fn.parse.prototype = color.fn;
++
++// hsla conversions adapted from:
++// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
++
++function hue2rgb( p, q, h ) {
++	h = ( h + 1 ) % 1;
++	if ( h * 6 < 1 ) {
++		return p + (q - p) * h * 6;
++	}
++	if ( h * 2 < 1) {
++		return q;
++	}
++	if ( h * 3 < 2 ) {
++		return p + (q - p) * ((2/3) - h) * 6;
++	}
++	return p;
++}
++
++spaces.hsla.to = function ( rgba ) {
++	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
++		return [ null, null, null, rgba[ 3 ] ];
++	}
++	var r = rgba[ 0 ] / 255,
++		g = rgba[ 1 ] / 255,
++		b = rgba[ 2 ] / 255,
++		a = rgba[ 3 ],
++		max = Math.max( r, g, b ),
++		min = Math.min( r, g, b ),
++		diff = max - min,
++		add = max + min,
++		l = add * 0.5,
++		h, s;
++
++	if ( min === max ) {
++		h = 0;
++	} else if ( r === max ) {
++		h = ( 60 * ( g - b ) / diff ) + 360;
++	} else if ( g === max ) {
++		h = ( 60 * ( b - r ) / diff ) + 120;
++	} else {
++		h = ( 60 * ( r - g ) / diff ) + 240;
++	}
++
++	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
++	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
++	if ( diff === 0 ) {
++		s = 0;
++	} else if ( l <= 0.5 ) {
++		s = diff / add;
++	} else {
++		s = diff / ( 2 - add );
++	}
++	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
++};
++
++spaces.hsla.from = function ( hsla ) {
++	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
++		return [ null, null, null, hsla[ 3 ] ];
++	}
++	var h = hsla[ 0 ] / 360,
++		s = hsla[ 1 ],
++		l = hsla[ 2 ],
++		a = hsla[ 3 ],
++		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
++		p = 2 * l - q;
++
++	return [
++		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
++		Math.round( hue2rgb( p, q, h ) * 255 ),
++		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
++		a
++	];
++};
++
++
++each( spaces, function( spaceName, space ) {
++	var props = space.props,
++		cache = space.cache,
++		to = space.to,
++		from = space.from;
++
++	// makes rgba() and hsla()
++	color.fn[ spaceName ] = function( value ) {
++
++		// generate a cache for this space if it doesn't exist
++		if ( to && !this[ cache ] ) {
++			this[ cache ] = to( this._rgba );
++		}
++		if ( value === undefined ) {
++			return this[ cache ].slice();
++		}
++
++		var ret,
++			type = jQuery.type( value ),
++			arr = ( type === "array" || type === "object" ) ? value : arguments,
++			local = this[ cache ].slice();
++
++		each( props, function( key, prop ) {
++			var val = arr[ type === "object" ? key : prop.idx ];
++			if ( val == null ) {
++				val = local[ prop.idx ];
++			}
++			local[ prop.idx ] = clamp( val, prop );
++		});
++
++		if ( from ) {
++			ret = color( from( local ) );
++			ret[ cache ] = local;
++			return ret;
++		} else {
++			return color( local );
++		}
++	};
++
++	// makes red() green() blue() alpha() hue() saturation() lightness()
++	each( props, function( key, prop ) {
++		// alpha is included in more than one space
++		if ( color.fn[ key ] ) {
++			return;
++		}
++		color.fn[ key ] = function( value ) {
++			var vtype = jQuery.type( value ),
++				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
++				local = this[ fn ](),
++				cur = local[ prop.idx ],
++				match;
++
++			if ( vtype === "undefined" ) {
++				return cur;
++			}
++
++			if ( vtype === "function" ) {
++				value = value.call( this, cur );
++				vtype = jQuery.type( value );
++			}
++			if ( value == null && prop.empty ) {
++				return this;
++			}
++			if ( vtype === "string" ) {
++				match = rplusequals.exec( value );
++				if ( match ) {
++					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
++				}
++			}
++			local[ prop.idx ] = value;
++			return this[ fn ]( local );
++		};
++	});
++});
++
++// add cssHook and .fx.step function for each named hook.
++// accept a space separated string of properties
++color.hook = function( hook ) {
++	var hooks = hook.split( " " );
++	each( hooks, function( i, hook ) {
++		jQuery.cssHooks[ hook ] = {
++			set: function( elem, value ) {
++				var parsed, curElem,
++					backgroundColor = "";
++
++				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
++					value = color( parsed || value );
++					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
++						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
++						while (
++							(backgroundColor === "" || backgroundColor === "transparent") &&
++							curElem && curElem.style
++						) {
++							try {
++								backgroundColor = jQuery.css( curElem, "backgroundColor" );
++								curElem = curElem.parentNode;
++							} catch ( e ) {
++							}
++						}
++
++						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
++							backgroundColor :
++							"_default" );
++					}
++
++					value = value.toRgbaString();
++				}
++				try {
++					elem.style[ hook ] = value;
++				} catch( e ) {
++					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
++				}
++			}
++		};
++		jQuery.fx.step[ hook ] = function( fx ) {
++			if ( !fx.colorInit ) {
++				fx.start = color( fx.elem, hook );
++				fx.end = color( fx.end );
++				fx.colorInit = true;
++			}
++			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
++		};
++	});
++
++};
++
++color.hook( stepHooks );
++
++jQuery.cssHooks.borderColor = {
++	expand: function( value ) {
++		var expanded = {};
++
++		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
++			expanded[ "border" + part + "Color" ] = value;
++		});
++		return expanded;
++	}
++};
++
++// Basic color names only.
++// Usage of any of the other color names requires adding yourself or including
++// jquery.color.svg-names.js.
++colors = jQuery.Color.names = {
++	// 4.1. Basic color keywords
++	aqua: "#00ffff",
++	black: "#000000",
++	blue: "#0000ff",
++	fuchsia: "#ff00ff",
++	gray: "#808080",
++	green: "#008000",
++	lime: "#00ff00",
++	maroon: "#800000",
++	navy: "#000080",
++	olive: "#808000",
++	purple: "#800080",
++	red: "#ff0000",
++	silver: "#c0c0c0",
++	teal: "#008080",
++	white: "#ffffff",
++	yellow: "#ffff00",
++
++	// 4.2.3. "transparent" color keyword
++	transparent: [ null, null, null, 0 ],
++
++	_default: "#ffffff"
++};
++
++})( jQuery );
++
++
++/******************************************************************************/
++/****************************** CLASS ANIMATIONS ******************************/
++/******************************************************************************/
++(function() {
++
++var classAnimationActions = [ "add", "remove", "toggle" ],
++	shorthandStyles = {
++		border: 1,
++		borderBottom: 1,
++		borderColor: 1,
++		borderLeft: 1,
++		borderRight: 1,
++		borderTop: 1,
++		borderWidth: 1,
++		margin: 1,
++		padding: 1
++	};
++
++$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
++	$.fx.step[ prop ] = function( fx ) {
++		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
++			jQuery.style( fx.elem, prop, fx.end );
++			fx.setAttr = true;
++		}
++	};
++});
++
++function getElementStyles( elem ) {
++	var key, len,
++		style = elem.ownerDocument.defaultView ?
++			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
++			elem.currentStyle,
++		styles = {};
++
++	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
++		len = style.length;
++		while ( len-- ) {
++			key = style[ len ];
++			if ( typeof style[ key ] === "string" ) {
++				styles[ $.camelCase( key ) ] = style[ key ];
++			}
++		}
++	// support: Opera, IE <9
++	} else {
++		for ( key in style ) {
++			if ( typeof style[ key ] === "string" ) {
++				styles[ key ] = style[ key ];
++			}
++		}
++	}
++
++	return styles;
++}
++
++
++function styleDifference( oldStyle, newStyle ) {
++	var diff = {},
++		name, value;
++
++	for ( name in newStyle ) {
++		value = newStyle[ name ];
++		if ( oldStyle[ name ] !== value ) {
++			if ( !shorthandStyles[ name ] ) {
++				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
++					diff[ name ] = value;
++				}
++			}
++		}
++	}
++
++	return diff;
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++$.effects.animateClass = function( value, duration, easing, callback ) {
++	var o = $.speed( duration, easing, callback );
++
++	return this.queue( function() {
++		var animated = $( this ),
++			baseClass = animated.attr( "class" ) || "",
++			applyClassChange,
++			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
++
++		// map the animated objects to store the original styles.
++		allAnimations = allAnimations.map(function() {
++			var el = $( this );
++			return {
++				el: el,
++				start: getElementStyles( this )
++			};
++		});
++
++		// apply class change
++		applyClassChange = function() {
++			$.each( classAnimationActions, function(i, action) {
++				if ( value[ action ] ) {
++					animated[ action + "Class" ]( value[ action ] );
++				}
++			});
++		};
++		applyClassChange();
++
++		// map all animated objects again - calculate new styles and diff
++		allAnimations = allAnimations.map(function() {
++			this.end = getElementStyles( this.el[ 0 ] );
++			this.diff = styleDifference( this.start, this.end );
++			return this;
++		});
++
++		// apply original class
++		animated.attr( "class", baseClass );
++
++		// map all animated objects again - this time collecting a promise
++		allAnimations = allAnimations.map(function() {
++			var styleInfo = this,
++				dfd = $.Deferred(),
++				opts = $.extend({}, o, {
++					queue: false,
++					complete: function() {
++						dfd.resolve( styleInfo );
++					}
++				});
++
++			this.el.animate( this.diff, opts );
++			return dfd.promise();
++		});
++
++		// once all animations have completed:
++		$.when.apply( $, allAnimations.get() ).done(function() {
++
++			// set the final class
++			applyClassChange();
++
++			// for each animated element,
++			// clear all css properties that were animated
++			$.each( arguments, function() {
++				var el = this.el;
++				$.each( this.diff, function(key) {
++					el.css( key, "" );
++				});
++			});
++
++			// this is guarnteed to be there if you use jQuery.speed()
++			// it also handles dequeuing the next anim...
++			o.complete.call( animated[ 0 ] );
++		});
++	});
++};
++
++$.fn.extend({
++	addClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return speed ?
++				$.effects.animateClass.call( this,
++					{ add: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.addClass ),
++
++	removeClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return arguments.length > 1 ?
++				$.effects.animateClass.call( this,
++					{ remove: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.removeClass ),
++
++	toggleClass: (function( orig ) {
++		return function( classNames, force, speed, easing, callback ) {
++			if ( typeof force === "boolean" || force === undefined ) {
++				if ( !speed ) {
++					// without speed parameter
++					return orig.apply( this, arguments );
++				} else {
++					return $.effects.animateClass.call( this,
++						(force ? { add: classNames } : { remove: classNames }),
++						speed, easing, callback );
++				}
++			} else {
++				// without force parameter
++				return $.effects.animateClass.call( this,
++					{ toggle: classNames }, force, speed, easing );
++			}
++		};
++	})( $.fn.toggleClass ),
++
++	switchClass: function( remove, add, speed, easing, callback) {
++		return $.effects.animateClass.call( this, {
++			add: add,
++			remove: remove
++		}, speed, easing, callback );
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EFFECTS **********************************/
++/******************************************************************************/
++
++(function() {
++
++$.extend( $.effects, {
++	version: "1.10.3",
++
++	// Saves a set of properties in a data storage
++	save: function( element, set ) {
++		for( var i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
++			}
++		}
++	},
++
++	// Restores a set of previously saved properties from a data storage
++	restore: function( element, set ) {
++		var val, i;
++		for( i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				val = element.data( dataSpace + set[ i ] );
++				// support: jQuery 1.6.2
++				// http://bugs.jquery.com/ticket/9917
++				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
++				// We can't differentiate between "" and 0 here, so we just assume
++				// empty string since it's likely to be a more common value...
++				if ( val === undefined ) {
++					val = "";
++				}
++				element.css( set[ i ], val );
++			}
++		}
++	},
++
++	setMode: function( el, mode ) {
++		if (mode === "toggle") {
++			mode = el.is( ":hidden" ) ? "show" : "hide";
++		}
++		return mode;
++	},
++
++	// Translates a [top,left] array into a baseline value
++	// this should be a little more flexible in the future to handle a string & hash
++	getBaseline: function( origin, original ) {
++		var y, x;
++		switch ( origin[ 0 ] ) {
++			case "top": y = 0; break;
++			case "middle": y = 0.5; break;
++			case "bottom": y = 1; break;
++			default: y = origin[ 0 ] / original.height;
++		}
++		switch ( origin[ 1 ] ) {
++			case "left": x = 0; break;
++			case "center": x = 0.5; break;
++			case "right": x = 1; break;
++			default: x = origin[ 1 ] / original.width;
++		}
++		return {
++			x: x,
++			y: y
++		};
++	},
++
++	// Wraps the element around a wrapper that copies position properties
++	createWrapper: function( element ) {
++
++		// if the element is already wrapped, return it
++		if ( element.parent().is( ".ui-effects-wrapper" )) {
++			return element.parent();
++		}
++
++		// wrap the element
++		var props = {
++				width: element.outerWidth(true),
++				height: element.outerHeight(true),
++				"float": element.css( "float" )
++			},
++			wrapper = $( "<div></div>" )
++				.addClass( "ui-effects-wrapper" )
++				.css({
++					fontSize: "100%",
++					background: "transparent",
++					border: "none",
++					margin: 0,
++					padding: 0
++				}),
++			// Store the size in case width/height are defined in % - Fixes #5245
++			size = {
++				width: element.width(),
++				height: element.height()
++			},
++			active = document.activeElement;
++
++		// support: Firefox
++		// Firefox incorrectly exposes anonymous content
++		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
++		try {
++			active.id;
++		} catch( e ) {
++			active = document.body;
++		}
++
++		element.wrap( wrapper );
++
++		// Fixes #7595 - Elements lose focus when wrapped.
++		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++			$( active ).focus();
++		}
++
++		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
++
++		// transfer positioning properties to the wrapper
++		if ( element.css( "position" ) === "static" ) {
++			wrapper.css({ position: "relative" });
++			element.css({ position: "relative" });
++		} else {
++			$.extend( props, {
++				position: element.css( "position" ),
++				zIndex: element.css( "z-index" )
++			});
++			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
++				props[ pos ] = element.css( pos );
++				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
++					props[ pos ] = "auto";
++				}
++			});
++			element.css({
++				position: "relative",
++				top: 0,
++				left: 0,
++				right: "auto",
++				bottom: "auto"
++			});
++		}
++		element.css(size);
++
++		return wrapper.css( props ).show();
++	},
++
++	removeWrapper: function( element ) {
++		var active = document.activeElement;
++
++		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
++			element.parent().replaceWith( element );
++
++			// Fixes #7595 - Elements lose focus when wrapped.
++			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++				$( active ).focus();
++			}
++		}
++
++
++		return element;
++	},
++
++	setTransition: function( element, list, factor, value ) {
++		value = value || {};
++		$.each( list, function( i, x ) {
++			var unit = element.cssUnit( x );
++			if ( unit[ 0 ] > 0 ) {
++				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
++			}
++		});
++		return value;
++	}
++});
++
++// return an effect options object for the given parameters:
++function _normalizeArguments( effect, options, speed, callback ) {
++
++	// allow passing all options as the first parameter
++	if ( $.isPlainObject( effect ) ) {
++		options = effect;
++		effect = effect.effect;
++	}
++
++	// convert to an object
++	effect = { effect: effect };
++
++	// catch (effect, null, ...)
++	if ( options == null ) {
++		options = {};
++	}
++
++	// catch (effect, callback)
++	if ( $.isFunction( options ) ) {
++		callback = options;
++		speed = null;
++		options = {};
++	}
++
++	// catch (effect, speed, ?)
++	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
++		callback = speed;
++		speed = options;
++		options = {};
++	}
++
++	// catch (effect, options, callback)
++	if ( $.isFunction( speed ) ) {
++		callback = speed;
++		speed = null;
++	}
++
++	// add options to effect
++	if ( options ) {
++		$.extend( effect, options );
++	}
++
++	speed = speed || options.duration;
++	effect.duration = $.fx.off ? 0 :
++		typeof speed === "number" ? speed :
++		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
++		$.fx.speeds._default;
++
++	effect.complete = callback || options.complete;
++
++	return effect;
++}
++
++function standardAnimationOption( option ) {
++	// Valid standard speeds (nothing, number, named speed)
++	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
++		return true;
++	}
++
++	// Invalid strings - treat as "normal" speed
++	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
++		return true;
++	}
++
++	// Complete callback
++	if ( $.isFunction( option ) ) {
++		return true;
++	}
++
++	// Options hash (but not naming an effect)
++	if ( typeof option === "object" && !option.effect ) {
++		return true;
++	}
++
++	// Didn't match any standard API
++	return false;
++}
++
++$.fn.extend({
++	effect: function( /* effect, options, speed, callback */ ) {
++		var args = _normalizeArguments.apply( this, arguments ),
++			mode = args.mode,
++			queue = args.queue,
++			effectMethod = $.effects.effect[ args.effect ];
++
++		if ( $.fx.off || !effectMethod ) {
++			// delegate to the original method (e.g., .show()) if possible
++			if ( mode ) {
++				return this[ mode ]( args.duration, args.complete );
++			} else {
++				return this.each( function() {
++					if ( args.complete ) {
++						args.complete.call( this );
++					}
++				});
++			}
++		}
++
++		function run( next ) {
++			var elem = $( this ),
++				complete = args.complete,
++				mode = args.mode;
++
++			function done() {
++				if ( $.isFunction( complete ) ) {
++					complete.call( elem[0] );
++				}
++				if ( $.isFunction( next ) ) {
++					next();
++				}
++			}
++
++			// If the element already has the correct final state, delegate to
++			// the core methods so the internal tracking of "olddisplay" works.
++			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
++				elem[ mode ]();
++				done();
++			} else {
++				effectMethod.call( elem[0], args, done );
++			}
++		}
++
++		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
++	},
++
++	show: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "show";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.show ),
++
++	hide: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "hide";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.hide ),
++
++	toggle: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "toggle";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.toggle ),
++
++	// helper functions
++	cssUnit: function(key) {
++		var style = this.css( key ),
++			val = [];
++
++		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
++			if ( style.indexOf( unit ) > 0 ) {
++				val = [ parseFloat( style ), unit ];
++			}
++		});
++		return val;
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EASING ***********************************/
++/******************************************************************************/
++
++(function() {
++
++// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
++
++var baseEasings = {};
++
++$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
++	baseEasings[ name ] = function( p ) {
++		return Math.pow( p, i + 2 );
++	};
++});
++
++$.extend( baseEasings, {
++	Sine: function ( p ) {
++		return 1 - Math.cos( p * Math.PI / 2 );
++	},
++	Circ: function ( p ) {
++		return 1 - Math.sqrt( 1 - p * p );
++	},
++	Elastic: function( p ) {
++		return p === 0 || p === 1 ? p :
++			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
++	},
++	Back: function( p ) {
++		return p * p * ( 3 * p - 2 );
++	},
++	Bounce: function ( p ) {
++		var pow2,
++			bounce = 4;
++
++		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
++		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
++	}
++});
++
++$.each( baseEasings, function( name, easeIn ) {
++	$.easing[ "easeIn" + name ] = easeIn;
++	$.easing[ "easeOut" + name ] = function( p ) {
++		return 1 - easeIn( 1 - p );
++	};
++	$.easing[ "easeInOut" + name ] = function( p ) {
++		return p < 0.5 ?
++			easeIn( p * 2 ) / 2 :
++			1 - easeIn( p * -2 + 2 ) / 2;
++	};
++});
++
++})();
++
++})(jQuery);
++(function( $, undefined ) {
++
++var rvertical = /up|down|vertical/,
++	rpositivemotion = /up|left|vertical|horizontal/;
++
++$.effects.effect.blind = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		direction = o.direction || "up",
++		vertical = rvertical.test( direction ),
++		ref = vertical ? "height" : "width",
++		ref2 = vertical ? "top" : "left",
++		motion = rpositivemotion.test( direction ),
++		animation = {},
++		show = mode === "show",
++		wrapper, distance, margin;
++
++	// if already wrapped, the wrapper's properties are my property. #6245
++	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
++		$.effects.save( el.parent(), props );
++	} else {
++		$.effects.save( el, props );
++	}
++	el.show();
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	distance = wrapper[ ref ]();
++	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
++
++	animation[ ref ] = show ? distance : 0;
++	if ( !motion ) {
++		el
++			.css( vertical ? "bottom" : "right", 0 )
++			.css( vertical ? "top" : "left", "auto" )
++			.css({ position: "absolute" });
++
++		animation[ ref2 ] = show ? margin : distance + margin;
++	}
++
++	// start at 0 if we are showing
++	if ( show ) {
++		wrapper.css( ref, 0 );
++		if ( ! motion ) {
++			wrapper.css( ref2, margin + distance );
++		}
++	}
++
++	// Animate
++	wrapper.animate( animation, {
++		duration: o.duration,
++		easing: o.easing,
++		queue: false,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.bounce = function( o, done ) {
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++
++		// defaults:
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		hide = mode === "hide",
++		show = mode === "show",
++		direction = o.direction || "up",
++		distance = o.distance,
++		times = o.times || 5,
++
++		// number of internal animations
++		anims = times * 2 + ( show || hide ? 1 : 0 ),
++		speed = o.duration / anims,
++		easing = o.easing,
++
++		// utility:
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ),
++		i,
++		upAnim,
++		downAnim,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	// Avoid touching opacity to prevent clearType and PNG issues in IE
++	if ( show || hide ) {
++		props.push( "opacity" );
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el ); // Create Wrapper
++
++	// default distance for the BIGGEST bounce is the outer Distance / 3
++	if ( !distance ) {
++		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
++	}
++
++	if ( show ) {
++		downAnim = { opacity: 1 };
++		downAnim[ ref ] = 0;
++
++		// if we are showing, force opacity 0 and set the initial position
++		// then do the "first" animation
++		el.css( "opacity", 0 )
++			.css( ref, motion ? -distance * 2 : distance * 2 )
++			.animate( downAnim, speed, easing );
++	}
++
++	// start at the smallest distance if we are hiding
++	if ( hide ) {
++		distance = distance / Math.pow( 2, times - 1 );
++	}
++
++	downAnim = {};
++	downAnim[ ref ] = 0;
++	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
++	for ( i = 0; i < times; i++ ) {
++		upAnim = {};
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing )
++			.animate( downAnim, speed, easing );
++
++		distance = hide ? distance * 2 : distance / 2;
++	}
++
++	// Last Bounce when Hiding
++	if ( hide ) {
++		upAnim = { opacity: 0 };
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing );
++	}
++
++	el.queue(function() {
++		if ( hide ) {
++			el.hide();
++		}
++		$.effects.restore( el, props );
++		$.effects.removeWrapper( el );
++		done();
++	});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.clip = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "vertical",
++		vert = direction === "vertical",
++		size = vert ? "height" : "width",
++		position = vert ? "top" : "left",
++		animation = {},
++		wrapper, animate, distance;
++
++	// Save & Show
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
++	distance = animate[ size ]();
++
++	// Shift
++	if ( show ) {
++		animate.css( size, 0 );
++		animate.css( position, distance / 2 );
++	}
++
++	// Create Animation Object:
++	animation[ size ] = show ? distance : 0;
++	animation[ position ] = show ? 0 : distance / 2;
++
++	// Animate
++	animate.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( !show ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.drop = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
++		animation = {
++			opacity: show ? 1 : 0
++		},
++		distance;
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
++
++	if ( show ) {
++		el
++			.css( "opacity", 0 )
++			.css( ref, motion === "pos" ? -distance : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( motion === "pos" ? "+=" : "-=" ) :
++		( motion === "pos" ? "-=" : "+=" ) ) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.explode = function( o, done ) {
++
++	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
++		cells = rows,
++		el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++
++		// show and then visibility:hidden the element before calculating offset
++		offset = el.show().css( "visibility", "hidden" ).offset(),
++
++		// width and height of a piece
++		width = Math.ceil( el.outerWidth() / cells ),
++		height = Math.ceil( el.outerHeight() / rows ),
++		pieces = [],
++
++		// loop
++		i, j, left, top, mx, my;
++
++	// children animate complete:
++	function childComplete() {
++		pieces.push( this );
++		if ( pieces.length === rows * cells ) {
++			animComplete();
++		}
++	}
++
++	// clone the element for each row and cell.
++	for( i = 0; i < rows ; i++ ) { // ===>
++		top = offset.top + i * height;
++		my = i - ( rows - 1 ) / 2 ;
++
++		for( j = 0; j < cells ; j++ ) { // |||
++			left = offset.left + j * width;
++			mx = j - ( cells - 1 ) / 2 ;
++
++			// Create a clone of the now hidden main element that will be absolute positioned
++			// within a wrapper div off the -left and -top equal to size of our pieces
++			el
++				.clone()
++				.appendTo( "body" )
++				.wrap( "<div></div>" )
++				.css({
++					position: "absolute",
++					visibility: "visible",
++					left: -j * width,
++					top: -i * height
++				})
++
++			// select the wrapper - make it overflow: hidden and absolute positioned based on
++			// where the original was located +left and +top equal to the size of pieces
++				.parent()
++				.addClass( "ui-effects-explode" )
++				.css({
++					position: "absolute",
++					overflow: "hidden",
++					width: width,
++					height: height,
++					left: left + ( show ? mx * width : 0 ),
++					top: top + ( show ? my * height : 0 ),
++					opacity: show ? 0 : 1
++				}).animate({
++					left: left + ( show ? 0 : mx * width ),
++					top: top + ( show ? 0 : my * height ),
++					opacity: show ? 1 : 0
++				}, o.duration || 500, o.easing, childComplete );
++		}
++	}
++
++	function animComplete() {
++		el.css({
++			visibility: "visible"
++		});
++		$( pieces ).remove();
++		if ( !show ) {
++			el.hide();
++		}
++		done();
++	}
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.fade = function( o, done ) {
++	var el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "toggle" );
++
++	el.animate({
++		opacity: mode
++	}, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: done
++	});
++};
++
++})( jQuery );
++(function( $, undefined ) {
++
++$.effects.effect.fold = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		size = o.size || 15,
++		percent = /([0-9]+)%/.exec( size ),
++		horizFirst = !!o.horizFirst,
++		widthFirst = show !== horizFirst,
++		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
++		duration = o.duration / 2,
++		wrapper, distance,
++		animation1 = {},
++		animation2 = {};
++
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	distance = widthFirst ?
++		[ wrapper.width(), wrapper.height() ] :
++		[ wrapper.height(), wrapper.width() ];
++
++	if ( percent ) {
++		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
++	}
++	if ( show ) {
++		wrapper.css( horizFirst ? {
++			height: 0,
++			width: size
++		} : {
++			height: size,
++			width: 0
++		});
++	}
++
++	// Animation
++	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
++	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
++
++	// Animate
++	wrapper
++		.animate( animation1, duration, o.easing )
++		.animate( animation2, duration, o.easing, function() {
++			if ( hide ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.highlight = function( o, done ) {
++	var elem = $( this ),
++		props = [ "backgroundImage", "backgroundColor", "opacity" ],
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		animation = {
++			backgroundColor: elem.css( "backgroundColor" )
++		};
++
++	if (mode === "hide") {
++		animation.opacity = 0;
++	}
++
++	$.effects.save( elem, props );
++
++	elem
++		.show()
++		.css({
++			backgroundImage: "none",
++			backgroundColor: o.color || "#ffff99"
++		})
++		.animate( animation, {
++			queue: false,
++			duration: o.duration,
++			easing: o.easing,
++			complete: function() {
++				if ( mode === "hide" ) {
++					elem.hide();
++				}
++				$.effects.restore( elem, props );
++				done();
++			}
++		});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.pulsate = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		showhide = ( show || mode === "hide" ),
++
++		// showing or hiding leaves of the "last" animation
++		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
++		duration = o.duration / anims,
++		animateTo = 0,
++		queue = elem.queue(),
++		queuelen = queue.length,
++		i;
++
++	if ( show || !elem.is(":visible")) {
++		elem.css( "opacity", 0 ).show();
++		animateTo = 1;
++	}
++
++	// anims - 1 opacity "toggles"
++	for ( i = 1; i < anims; i++ ) {
++		elem.animate({
++			opacity: animateTo
++		}, duration, o.easing );
++		animateTo = 1 - animateTo;
++	}
++
++	elem.animate({
++		opacity: animateTo
++	}, duration, o.easing);
++
++	elem.queue(function() {
++		if ( hide ) {
++			elem.hide();
++		}
++		done();
++	});
++
++	// We just queued up "anims" animations, we need to put them next in the queue
++	if ( queuelen > 1 ) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	elem.dequeue();
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.puff = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "hide" ),
++		hide = mode === "hide",
++		percent = parseInt( o.percent, 10 ) || 150,
++		factor = percent / 100,
++		original = {
++			height: elem.height(),
++			width: elem.width(),
++			outerHeight: elem.outerHeight(),
++			outerWidth: elem.outerWidth()
++		};
++
++	$.extend( o, {
++		effect: "scale",
++		queue: false,
++		fade: true,
++		mode: mode,
++		complete: done,
++		percent: hide ? percent : 100,
++		from: hide ?
++			original :
++			{
++				height: original.height * factor,
++				width: original.width * factor,
++				outerHeight: original.outerHeight * factor,
++				outerWidth: original.outerWidth * factor
++			}
++	});
++
++	elem.effect( o );
++};
++
++$.effects.effect.scale = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		options = $.extend( true, {}, o ),
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		percent = parseInt( o.percent, 10 ) ||
++			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
++		direction = o.direction || "both",
++		origin = o.origin,
++		original = {
++			height: el.height(),
++			width: el.width(),
++			outerHeight: el.outerHeight(),
++			outerWidth: el.outerWidth()
++		},
++		factor = {
++			y: direction !== "horizontal" ? (percent / 100) : 1,
++			x: direction !== "vertical" ? (percent / 100) : 1
++		};
++
++	// We are going to pass this effect to the size effect:
++	options.effect = "size";
++	options.queue = false;
++	options.complete = done;
++
++	// Set default origin and restore for show/hide
++	if ( mode !== "effect" ) {
++		options.origin = origin || ["middle","center"];
++		options.restore = true;
++	}
++
++	options.from = o.from || ( mode === "show" ? {
++		height: 0,
++		width: 0,
++		outerHeight: 0,
++		outerWidth: 0
++	} : original );
++	options.to = {
++		height: original.height * factor.y,
++		width: original.width * factor.x,
++		outerHeight: original.outerHeight * factor.y,
++		outerWidth: original.outerWidth * factor.x
++	};
++
++	// Fade option to support puff
++	if ( options.fade ) {
++		if ( mode === "show" ) {
++			options.from.opacity = 0;
++			options.to.opacity = 1;
++		}
++		if ( mode === "hide" ) {
++			options.from.opacity = 1;
++			options.to.opacity = 0;
++		}
++	}
++
++	// Animate
++	el.effect( options );
++
++};
++
++$.effects.effect.size = function( o, done ) {
++
++	// Create element
++	var original, baseline, factor,
++		el = $( this ),
++		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
++
++		// Always restore
++		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
++
++		// Copy for children
++		props2 = [ "width", "height", "overflow" ],
++		cProps = [ "fontSize" ],
++		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
++		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
++
++		// Set options
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		restore = o.restore || mode !== "effect",
++		scale = o.scale || "both",
++		origin = o.origin || [ "middle", "center" ],
++		position = el.css( "position" ),
++		props = restore ? props0 : props1,
++		zero = {
++			height: 0,
++			width: 0,
++			outerHeight: 0,
++			outerWidth: 0
++		};
++
++	if ( mode === "show" ) {
++		el.show();
++	}
++	original = {
++		height: el.height(),
++		width: el.width(),
++		outerHeight: el.outerHeight(),
++		outerWidth: el.outerWidth()
++	};
++
++	if ( o.mode === "toggle" && mode === "show" ) {
++		el.from = o.to || zero;
++		el.to = o.from || original;
++	} else {
++		el.from = o.from || ( mode === "show" ? zero : original );
++		el.to = o.to || ( mode === "hide" ? zero : original );
++	}
++
++	// Set scaling factor
++	factor = {
++		from: {
++			y: el.from.height / original.height,
++			x: el.from.width / original.width
++		},
++		to: {
++			y: el.to.height / original.height,
++			x: el.to.width / original.width
++		}
++	};
++
++	// Scale the css box
++	if ( scale === "box" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( vProps );
++			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
++		}
++
++		// Horizontal props scaling
++		if ( factor.from.x !== factor.to.x ) {
++			props = props.concat( hProps );
++			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
++			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
++		}
++	}
++
++	// Scale the content
++	if ( scale === "content" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( cProps ).concat( props2 );
++			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
++		}
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++	el.css( "overflow", "hidden" ).css( el.from );
++
++	// Adjust
++	if (origin) { // Calculate baseline shifts
++		baseline = $.effects.getBaseline( origin, original );
++		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
++		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
++		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
++		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
++	}
++	el.css( el.from ); // set top & left
++
++	// Animate
++	if ( scale === "content" || scale === "both" ) { // Scale the children
++
++		// Add margins/font-size
++		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
++		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
++		props2 = props0.concat(vProps).concat(hProps);
++
++		el.find( "*[width]" ).each( function(){
++			var child = $( this ),
++				c_original = {
++					height: child.height(),
++					width: child.width(),
++					outerHeight: child.outerHeight(),
++					outerWidth: child.outerWidth()
++				};
++			if (restore) {
++				$.effects.save(child, props2);
++			}
++
++			child.from = {
++				height: c_original.height * factor.from.y,
++				width: c_original.width * factor.from.x,
++				outerHeight: c_original.outerHeight * factor.from.y,
++				outerWidth: c_original.outerWidth * factor.from.x
++			};
++			child.to = {
++				height: c_original.height * factor.to.y,
++				width: c_original.width * factor.to.x,
++				outerHeight: c_original.height * factor.to.y,
++				outerWidth: c_original.width * factor.to.x
++			};
++
++			// Vertical props scaling
++			if ( factor.from.y !== factor.to.y ) {
++				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
++				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
++			}
++
++			// Horizontal props scaling
++			if ( factor.from.x !== factor.to.x ) {
++				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
++				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
++			}
++
++			// Animate children
++			child.css( child.from );
++			child.animate( child.to, o.duration, o.easing, function() {
++
++				// Restore children
++				if ( restore ) {
++					$.effects.restore( child, props2 );
++				}
++			});
++		});
++	}
++
++	// Animate
++	el.animate( el.to, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( el.to.opacity === 0 ) {
++				el.css( "opacity", el.from.opacity );
++			}
++			if( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			if ( !restore ) {
++
++				// we need to calculate our new positioning based on the scaling
++				if ( position === "static" ) {
++					el.css({
++						position: "relative",
++						top: el.to.top,
++						left: el.to.left
++					});
++				} else {
++					$.each([ "top", "left" ], function( idx, pos ) {
++						el.css( pos, function( _, str ) {
++							var val = parseInt( str, 10 ),
++								toRef = idx ? el.to.left : el.to.top;
++
++							// if original was "auto", recalculate the new value from wrapper
++							if ( str === "auto" ) {
++								return toRef + "px";
++							}
++
++							return val + toRef + "px";
++						});
++					});
++				}
++			}
++
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.shake = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		direction = o.direction || "left",
++		distance = o.distance || 20,
++		times = o.times || 3,
++		anims = times * 2 + 1,
++		speed = Math.round(o.duration/anims),
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		animation = {},
++		animation1 = {},
++		animation2 = {},
++		i,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	// Animation
++	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
++	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
++	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
++
++	// Animate
++	el.animate( animation, speed, o.easing );
++
++	// Shakes
++	for ( i = 1; i < times; i++ ) {
++		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
++	}
++	el
++		.animate( animation1, speed, o.easing )
++		.animate( animation, speed / 2, o.easing )
++		.queue(function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.slide = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
++		mode = $.effects.setMode( el, o.mode || "show" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		distance,
++		animation = {};
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
++
++	$.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	if ( show ) {
++		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( positiveMotion ? "+=" : "-=") :
++		( positiveMotion ? "-=" : "+=")) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.transfer = function( o, done ) {
++	var elem = $( this ),
++		target = $( o.to ),
++		targetFixed = target.css( "position" ) === "fixed",
++		body = $("body"),
++		fixTop = targetFixed ? body.scrollTop() : 0,
++		fixLeft = targetFixed ? body.scrollLeft() : 0,
++		endPosition = target.offset(),
++		animation = {
++			top: endPosition.top - fixTop ,
++			left: endPosition.left - fixLeft ,
++			height: target.innerHeight(),
++			width: target.innerWidth()
++		},
++		startPosition = elem.offset(),
++		transfer = $( "<div class='ui-effects-transfer'></div>" )
++			.appendTo( document.body )
++			.addClass( o.className )
++			.css({
++				top: startPosition.top - fixTop ,
++				left: startPosition.left - fixLeft ,
++				height: elem.innerHeight(),
++				width: elem.innerWidth(),
++				position: targetFixed ? "fixed" : "absolute"
++			})
++			.animate( animation, o.duration, o.easing, function() {
++				transfer.remove();
++				done();
++			});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/js/jquery-1.9.1.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/js/jquery-1.9.1.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/js/jquery-1.9.1.js	(revision 15487)
+@@ -0,0 +1,9597 @@
++/*!
++ * jQuery JavaScript Library v1.9.1
++ * http://jquery.com/
++ *
++ * Includes Sizzle.js
++ * http://sizzlejs.com/
++ *
++ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
++ * Released under the MIT license
++ * http://jquery.org/license
++ *
++ * Date: 2013-2-4
++ */
++(function( window, undefined ) {
++
++// Can't do this because several apps including ASP.NET trace
++// the stack via arguments.caller.callee and Firefox dies if
++// you try to trace through "use strict" call chains. (#13335)
++// Support: Firefox 18+
++//"use strict";
++var
++	// The deferred used on DOM ready
++	readyList,
++
++	// A central reference to the root jQuery(document)
++	rootjQuery,
++
++	// Support: IE<9
++	// For `typeof node.method` instead of `node.method !== undefined`
++	core_strundefined = typeof undefined,
++
++	// Use the correct document accordingly with window argument (sandbox)
++	document = window.document,
++	location = window.location,
++
++	// Map over jQuery in case of overwrite
++	_jQuery = window.jQuery,
++
++	// Map over the $ in case of overwrite
++	_$ = window.$,
++
++	// [[Class]] -> type pairs
++	class2type = {},
++
++	// List of deleted data cache ids, so we can reuse them
++	core_deletedIds = [],
++
++	core_version = "1.9.1",
++
++	// Save a reference to some core methods
++	core_concat = core_deletedIds.concat,
++	core_push = core_deletedIds.push,
++	core_slice = core_deletedIds.slice,
++	core_indexOf = core_deletedIds.indexOf,
++	core_toString = class2type.toString,
++	core_hasOwn = class2type.hasOwnProperty,
++	core_trim = core_version.trim,
++
++	// Define a local copy of jQuery
++	jQuery = function( selector, context ) {
++		// The jQuery object is actually just the init constructor 'enhanced'
++		return new jQuery.fn.init( selector, context, rootjQuery );
++	},
++
++	// Used for matching numbers
++	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
++
++	// Used for splitting on whitespace
++	core_rnotwhite = /\S+/g,
++
++	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
++	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
++
++	// A simple way to check for HTML strings
++	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
++	// Strict HTML recognition (#11290: must start with <)
++	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
++
++	// Match a standalone tag
++	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
++
++	// JSON RegExp
++	rvalidchars = /^[\],:{}\s]*$/,
++	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
++	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
++	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
++
++	// Matches dashed string for camelizing
++	rmsPrefix = /^-ms-/,
++	rdashAlpha = /-([\da-z])/gi,
++
++	// Used by jQuery.camelCase as callback to replace()
++	fcamelCase = function( all, letter ) {
++		return letter.toUpperCase();
++	},
++
++	// The ready event handler
++	completed = function( event ) {
++
++		// readyState === "complete" is good enough for us to call the dom ready in oldIE
++		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
++			detach();
++			jQuery.ready();
++		}
++	},
++	// Clean-up method for dom ready events
++	detach = function() {
++		if ( document.addEventListener ) {
++			document.removeEventListener( "DOMContentLoaded", completed, false );
++			window.removeEventListener( "load", completed, false );
++
++		} else {
++			document.detachEvent( "onreadystatechange", completed );
++			window.detachEvent( "onload", completed );
++		}
++	};
++
++jQuery.fn = jQuery.prototype = {
++	// The current version of jQuery being used
++	jquery: core_version,
++
++	constructor: jQuery,
++	init: function( selector, context, rootjQuery ) {
++		var match, elem;
++
++		// HANDLE: $(""), $(null), $(undefined), $(false)
++		if ( !selector ) {
++			return this;
++		}
++
++		// Handle HTML strings
++		if ( typeof selector === "string" ) {
++			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
++				// Assume that strings that start and end with <> are HTML and skip the regex check
++				match = [ null, selector, null ];
++
++			} else {
++				match = rquickExpr.exec( selector );
++			}
++
++			// Match html or make sure no context is specified for #id
++			if ( match && (match[1] || !context) ) {
++
++				// HANDLE: $(html) -> $(array)
++				if ( match[1] ) {
++					context = context instanceof jQuery ? context[0] : context;
++
++					// scripts is true for back-compat
++					jQuery.merge( this, jQuery.parseHTML(
++						match[1],
++						context && context.nodeType ? context.ownerDocument || context : document,
++						true
++					) );
++
++					// HANDLE: $(html, props)
++					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
++						for ( match in context ) {
++							// Properties of context are called as methods if possible
++							if ( jQuery.isFunction( this[ match ] ) ) {
++								this[ match ]( context[ match ] );
++
++							// ...and otherwise set as attributes
++							} else {
++								this.attr( match, context[ match ] );
++							}
++						}
++					}
++
++					return this;
++
++				// HANDLE: $(#id)
++				} else {
++					elem = document.getElementById( match[2] );
++
++					// Check parentNode to catch when Blackberry 4.6 returns
++					// nodes that are no longer in the document #6963
++					if ( elem && elem.parentNode ) {
++						// Handle the case where IE and Opera return items
++						// by name instead of ID
++						if ( elem.id !== match[2] ) {
++							return rootjQuery.find( selector );
++						}
++
++						// Otherwise, we inject the element directly into the jQuery object
++						this.length = 1;
++						this[0] = elem;
++					}
++
++					this.context = document;
++					this.selector = selector;
++					return this;
++				}
++
++			// HANDLE: $(expr, $(...))
++			} else if ( !context || context.jquery ) {
++				return ( context || rootjQuery ).find( selector );
++
++			// HANDLE: $(expr, context)
++			// (which is just equivalent to: $(context).find(expr)
++			} else {
++				return this.constructor( context ).find( selector );
++			}
++
++		// HANDLE: $(DOMElement)
++		} else if ( selector.nodeType ) {
++			this.context = this[0] = selector;
++			this.length = 1;
++			return this;
++
++		// HANDLE: $(function)
++		// Shortcut for document ready
++		} else if ( jQuery.isFunction( selector ) ) {
++			return rootjQuery.ready( selector );
++		}
++
++		if ( selector.selector !== undefined ) {
++			this.selector = selector.selector;
++			this.context = selector.context;
++		}
++
++		return jQuery.makeArray( selector, this );
++	},
++
++	// Start with an empty selector
++	selector: "",
++
++	// The default length of a jQuery object is 0
++	length: 0,
++
++	// The number of elements contained in the matched element set
++	size: function() {
++		return this.length;
++	},
++
++	toArray: function() {
++		return core_slice.call( this );
++	},
++
++	// Get the Nth element in the matched element set OR
++	// Get the whole matched element set as a clean array
++	get: function( num ) {
++		return num == null ?
++
++			// Return a 'clean' array
++			this.toArray() :
++
++			// Return just the object
++			( num < 0 ? this[ this.length + num ] : this[ num ] );
++	},
++
++	// Take an array of elements and push it onto the stack
++	// (returning the new matched element set)
++	pushStack: function( elems ) {
++
++		// Build a new jQuery matched element set
++		var ret = jQuery.merge( this.constructor(), elems );
++
++		// Add the old object onto the stack (as a reference)
++		ret.prevObject = this;
++		ret.context = this.context;
++
++		// Return the newly-formed element set
++		return ret;
++	},
++
++	// Execute a callback for every element in the matched set.
++	// (You can seed the arguments with an array of args, but this is
++	// only used internally.)
++	each: function( callback, args ) {
++		return jQuery.each( this, callback, args );
++	},
++
++	ready: function( fn ) {
++		// Add the callback
++		jQuery.ready.promise().done( fn );
++
++		return this;
++	},
++
++	slice: function() {
++		return this.pushStack( core_slice.apply( this, arguments ) );
++	},
++
++	first: function() {
++		return this.eq( 0 );
++	},
++
++	last: function() {
++		return this.eq( -1 );
++	},
++
++	eq: function( i ) {
++		var len = this.length,
++			j = +i + ( i < 0 ? len : 0 );
++		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
++	},
++
++	map: function( callback ) {
++		return this.pushStack( jQuery.map(this, function( elem, i ) {
++			return callback.call( elem, i, elem );
++		}));
++	},
++
++	end: function() {
++		return this.prevObject || this.constructor(null);
++	},
++
++	// For internal use only.
++	// Behaves like an Array's method, not like a jQuery method.
++	push: core_push,
++	sort: [].sort,
++	splice: [].splice
++};
++
++// Give the init function the jQuery prototype for later instantiation
++jQuery.fn.init.prototype = jQuery.fn;
++
++jQuery.extend = jQuery.fn.extend = function() {
++	var src, copyIsArray, copy, name, options, clone,
++		target = arguments[0] || {},
++		i = 1,
++		length = arguments.length,
++		deep = false;
++
++	// Handle a deep copy situation
++	if ( typeof target === "boolean" ) {
++		deep = target;
++		target = arguments[1] || {};
++		// skip the boolean and the target
++		i = 2;
++	}
++
++	// Handle case when target is a string or something (possible in deep copy)
++	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
++		target = {};
++	}
++
++	// extend jQuery itself if only one argument is passed
++	if ( length === i ) {
++		target = this;
++		--i;
++	}
++
++	for ( ; i < length; i++ ) {
++		// Only deal with non-null/undefined values
++		if ( (options = arguments[ i ]) != null ) {
++			// Extend the base object
++			for ( name in options ) {
++				src = target[ name ];
++				copy = options[ name ];
++
++				// Prevent never-ending loop
++				if ( target === copy ) {
++					continue;
++				}
++
++				// Recurse if we're merging plain objects or arrays
++				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
++					if ( copyIsArray ) {
++						copyIsArray = false;
++						clone = src && jQuery.isArray(src) ? src : [];
++
++					} else {
++						clone = src && jQuery.isPlainObject(src) ? src : {};
++					}
++
++					// Never move original objects, clone them
++					target[ name ] = jQuery.extend( deep, clone, copy );
++
++				// Don't bring in undefined values
++				} else if ( copy !== undefined ) {
++					target[ name ] = copy;
++				}
++			}
++		}
++	}
++
++	// Return the modified object
++	return target;
++};
++
++jQuery.extend({
++	noConflict: function( deep ) {
++		if ( window.$ === jQuery ) {
++			window.$ = _$;
++		}
++
++		if ( deep && window.jQuery === jQuery ) {
++			window.jQuery = _jQuery;
++		}
++
++		return jQuery;
++	},
++
++	// Is the DOM ready to be used? Set to true once it occurs.
++	isReady: false,
++
++	// A counter to track how many items to wait for before
++	// the ready event fires. See #6781
++	readyWait: 1,
++
++	// Hold (or release) the ready event
++	holdReady: function( hold ) {
++		if ( hold ) {
++			jQuery.readyWait++;
++		} else {
++			jQuery.ready( true );
++		}
++	},
++
++	// Handle when the DOM is ready
++	ready: function( wait ) {
++
++		// Abort if there are pending holds or we're already ready
++		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
++			return;
++		}
++
++		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
++		if ( !document.body ) {
++			return setTimeout( jQuery.ready );
++		}
++
++		// Remember that the DOM is ready
++		jQuery.isReady = true;
++
++		// If a normal DOM Ready event fired, decrement, and wait if need be
++		if ( wait !== true && --jQuery.readyWait > 0 ) {
++			return;
++		}
++
++		// If there are functions bound, to execute
++		readyList.resolveWith( document, [ jQuery ] );
++
++		// Trigger any bound ready events
++		if ( jQuery.fn.trigger ) {
++			jQuery( document ).trigger("ready").off("ready");
++		}
++	},
++
++	// See test/unit/core.js for details concerning isFunction.
++	// Since version 1.3, DOM methods and functions like alert
++	// aren't supported. They return false on IE (#2968).
++	isFunction: function( obj ) {
++		return jQuery.type(obj) === "function";
++	},
++
++	isArray: Array.isArray || function( obj ) {
++		return jQuery.type(obj) === "array";
++	},
++
++	isWindow: function( obj ) {
++		return obj != null && obj == obj.window;
++	},
++
++	isNumeric: function( obj ) {
++		return !isNaN( parseFloat(obj) ) && isFinite( obj );
++	},
++
++	type: function( obj ) {
++		if ( obj == null ) {
++			return String( obj );
++		}
++		return typeof obj === "object" || typeof obj === "function" ?
++			class2type[ core_toString.call(obj) ] || "object" :
++			typeof obj;
++	},
++
++	isPlainObject: function( obj ) {
++		// Must be an Object.
++		// Because of IE, we also have to check the presence of the constructor property.
++		// Make sure that DOM nodes and window objects don't pass through, as well
++		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
++			return false;
++		}
++
++		try {
++			// Not own constructor property must be Object
++			if ( obj.constructor &&
++				!core_hasOwn.call(obj, "constructor") &&
++				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
++				return false;
++			}
++		} catch ( e ) {
++			// IE8,9 Will throw exceptions on certain host objects #9897
++			return false;
++		}
++
++		// Own properties are enumerated firstly, so to speed up,
++		// if last one is own, then all properties are own.
++
++		var key;
++		for ( key in obj ) {}
++
++		return key === undefined || core_hasOwn.call( obj, key );
++	},
++
++	isEmptyObject: function( obj ) {
++		var name;
++		for ( name in obj ) {
++			return false;
++		}
++		return true;
++	},
++
++	error: function( msg ) {
++		throw new Error( msg );
++	},
++
++	// data: string of html
++	// context (optional): If specified, the fragment will be created in this context, defaults to document
++	// keepScripts (optional): If true, will include scripts passed in the html string
++	parseHTML: function( data, context, keepScripts ) {
++		if ( !data || typeof data !== "string" ) {
++			return null;
++		}
++		if ( typeof context === "boolean" ) {
++			keepScripts = context;
++			context = false;
++		}
++		context = context || document;
++
++		var parsed = rsingleTag.exec( data ),
++			scripts = !keepScripts && [];
++
++		// Single tag
++		if ( parsed ) {
++			return [ context.createElement( parsed[1] ) ];
++		}
++
++		parsed = jQuery.buildFragment( [ data ], context, scripts );
++		if ( scripts ) {
++			jQuery( scripts ).remove();
++		}
++		return jQuery.merge( [], parsed.childNodes );
++	},
++
++	parseJSON: function( data ) {
++		// Attempt to parse using the native JSON parser first
++		if ( window.JSON && window.JSON.parse ) {
++			return window.JSON.parse( data );
++		}
++
++		if ( data === null ) {
++			return data;
++		}
++
++		if ( typeof data === "string" ) {
++
++			// Make sure leading/trailing whitespace is removed (IE can't handle it)
++			data = jQuery.trim( data );
++
++			if ( data ) {
++				// Make sure the incoming data is actual JSON
++				// Logic borrowed from http://json.org/json2.js
++				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
++					.replace( rvalidtokens, "]" )
++					.replace( rvalidbraces, "")) ) {
++
++					return ( new Function( "return " + data ) )();
++				}
++			}
++		}
++
++		jQuery.error( "Invalid JSON: " + data );
++	},
++
++	// Cross-browser xml parsing
++	parseXML: function( data ) {
++		var xml, tmp;
++		if ( !data || typeof data !== "string" ) {
++			return null;
++		}
++		try {
++			if ( window.DOMParser ) { // Standard
++				tmp = new DOMParser();
++				xml = tmp.parseFromString( data , "text/xml" );
++			} else { // IE
++				xml = new ActiveXObject( "Microsoft.XMLDOM" );
++				xml.async = "false";
++				xml.loadXML( data );
++			}
++		} catch( e ) {
++			xml = undefined;
++		}
++		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
++			jQuery.error( "Invalid XML: " + data );
++		}
++		return xml;
++	},
++
++	noop: function() {},
++
++	// Evaluates a script in a global context
++	// Workarounds based on findings by Jim Driscoll
++	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
++	globalEval: function( data ) {
++		if ( data && jQuery.trim( data ) ) {
++			// We use execScript on Internet Explorer
++			// We use an anonymous function so that context is window
++			// rather than jQuery in Firefox
++			( window.execScript || function( data ) {
++				window[ "eval" ].call( window, data );
++			} )( data );
++		}
++	},
++
++	// Convert dashed to camelCase; used by the css and data modules
++	// Microsoft forgot to hump their vendor prefix (#9572)
++	camelCase: function( string ) {
++		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
++	},
++
++	nodeName: function( elem, name ) {
++		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
++	},
++
++	// args is for internal usage only
++	each: function( obj, callback, args ) {
++		var value,
++			i = 0,
++			length = obj.length,
++			isArray = isArraylike( obj );
++
++		if ( args ) {
++			if ( isArray ) {
++				for ( ; i < length; i++ ) {
++					value = callback.apply( obj[ i ], args );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( i in obj ) {
++					value = callback.apply( obj[ i ], args );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			}
++
++		// A special, fast, case for the most common use of each
++		} else {
++			if ( isArray ) {
++				for ( ; i < length; i++ ) {
++					value = callback.call( obj[ i ], i, obj[ i ] );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( i in obj ) {
++					value = callback.call( obj[ i ], i, obj[ i ] );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			}
++		}
++
++		return obj;
++	},
++
++	// Use native String.trim function wherever possible
++	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
++		function( text ) {
++			return text == null ?
++				"" :
++				core_trim.call( text );
++		} :
++
++		// Otherwise use our own trimming functionality
++		function( text ) {
++			return text == null ?
++				"" :
++				( text + "" ).replace( rtrim, "" );
++		},
++
++	// results is for internal usage only
++	makeArray: function( arr, results ) {
++		var ret = results || [];
++
++		if ( arr != null ) {
++			if ( isArraylike( Object(arr) ) ) {
++				jQuery.merge( ret,
++					typeof arr === "string" ?
++					[ arr ] : arr
++				);
++			} else {
++				core_push.call( ret, arr );
++			}
++		}
++
++		return ret;
++	},
++
++	inArray: function( elem, arr, i ) {
++		var len;
++
++		if ( arr ) {
++			if ( core_indexOf ) {
++				return core_indexOf.call( arr, elem, i );
++			}
++
++			len = arr.length;
++			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
++
++			for ( ; i < len; i++ ) {
++				// Skip accessing in sparse arrays
++				if ( i in arr && arr[ i ] === elem ) {
++					return i;
++				}
++			}
++		}
++
++		return -1;
++	},
++
++	merge: function( first, second ) {
++		var l = second.length,
++			i = first.length,
++			j = 0;
++
++		if ( typeof l === "number" ) {
++			for ( ; j < l; j++ ) {
++				first[ i++ ] = second[ j ];
++			}
++		} else {
++			while ( second[j] !== undefined ) {
++				first[ i++ ] = second[ j++ ];
++			}
++		}
++
++		first.length = i;
++
++		return first;
++	},
++
++	grep: function( elems, callback, inv ) {
++		var retVal,
++			ret = [],
++			i = 0,
++			length = elems.length;
++		inv = !!inv;
++
++		// Go through the array, only saving the items
++		// that pass the validator function
++		for ( ; i < length; i++ ) {
++			retVal = !!callback( elems[ i ], i );
++			if ( inv !== retVal ) {
++				ret.push( elems[ i ] );
++			}
++		}
++
++		return ret;
++	},
++
++	// arg is for internal usage only
++	map: function( elems, callback, arg ) {
++		var value,
++			i = 0,
++			length = elems.length,
++			isArray = isArraylike( elems ),
++			ret = [];
++
++		// Go through the array, translating each of the items to their
++		if ( isArray ) {
++			for ( ; i < length; i++ ) {
++				value = callback( elems[ i ], i, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++
++		// Go through every key on the object,
++		} else {
++			for ( i in elems ) {
++				value = callback( elems[ i ], i, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++		}
++
++		// Flatten any nested arrays
++		return core_concat.apply( [], ret );
++	},
++
++	// A global GUID counter for objects
++	guid: 1,
++
++	// Bind a function to a context, optionally partially applying any
++	// arguments.
++	proxy: function( fn, context ) {
++		var args, proxy, tmp;
++
++		if ( typeof context === "string" ) {
++			tmp = fn[ context ];
++			context = fn;
++			fn = tmp;
++		}
++
++		// Quick check to determine if target is callable, in the spec
++		// this throws a TypeError, but we will just return undefined.
++		if ( !jQuery.isFunction( fn ) ) {
++			return undefined;
++		}
++
++		// Simulated bind
++		args = core_slice.call( arguments, 2 );
++		proxy = function() {
++			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
++		};
++
++		// Set the guid of unique handler to the same of original handler, so it can be removed
++		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
++
++		return proxy;
++	},
++
++	// Multifunctional method to get and set values of a collection
++	// The value/s can optionally be executed if it's a function
++	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
++		var i = 0,
++			length = elems.length,
++			bulk = key == null;
++
++		// Sets many values
++		if ( jQuery.type( key ) === "object" ) {
++			chainable = true;
++			for ( i in key ) {
++				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
++			}
++
++		// Sets one value
++		} else if ( value !== undefined ) {
++			chainable = true;
++
++			if ( !jQuery.isFunction( value ) ) {
++				raw = true;
++			}
++
++			if ( bulk ) {
++				// Bulk operations run against the entire set
++				if ( raw ) {
++					fn.call( elems, value );
++					fn = null;
++
++				// ...except when executing function values
++				} else {
++					bulk = fn;
++					fn = function( elem, key, value ) {
++						return bulk.call( jQuery( elem ), value );
++					};
++				}
++			}
++
++			if ( fn ) {
++				for ( ; i < length; i++ ) {
++					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
++				}
++			}
++		}
++
++		return chainable ?
++			elems :
++
++			// Gets
++			bulk ?
++				fn.call( elems ) :
++				length ? fn( elems[0], key ) : emptyGet;
++	},
++
++	now: function() {
++		return ( new Date() ).getTime();
++	}
++});
++
++jQuery.ready.promise = function( obj ) {
++	if ( !readyList ) {
++
++		readyList = jQuery.Deferred();
++
++		// Catch cases where $(document).ready() is called after the browser event has already occurred.
++		// we once tried to use readyState "interactive" here, but it caused issues like the one
++		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
++		if ( document.readyState === "complete" ) {
++			// Handle it asynchronously to allow scripts the opportunity to delay ready
++			setTimeout( jQuery.ready );
++
++		// Standards-based browsers support DOMContentLoaded
++		} else if ( document.addEventListener ) {
++			// Use the handy event callback
++			document.addEventListener( "DOMContentLoaded", completed, false );
++
++			// A fallback to window.onload, that will always work
++			window.addEventListener( "load", completed, false );
++
++		// If IE event model is used
++		} else {
++			// Ensure firing before onload, maybe late but safe also for iframes
++			document.attachEvent( "onreadystatechange", completed );
++
++			// A fallback to window.onload, that will always work
++			window.attachEvent( "onload", completed );
++
++			// If IE and not a frame
++			// continually check to see if the document is ready
++			var top = false;
++
++			try {
++				top = window.frameElement == null && document.documentElement;
++			} catch(e) {}
++
++			if ( top && top.doScroll ) {
++				(function doScrollCheck() {
++					if ( !jQuery.isReady ) {
++
++						try {
++							// Use the trick by Diego Perini
++							// http://javascript.nwbox.com/IEContentLoaded/
++							top.doScroll("left");
++						} catch(e) {
++							return setTimeout( doScrollCheck, 50 );
++						}
++
++						// detach all dom ready events
++						detach();
++
++						// and execute any waiting functions
++						jQuery.ready();
++					}
++				})();
++			}
++		}
++	}
++	return readyList.promise( obj );
++};
++
++// Populate the class2type map
++jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
++	class2type[ "[object " + name + "]" ] = name.toLowerCase();
++});
++
++function isArraylike( obj ) {
++	var length = obj.length,
++		type = jQuery.type( obj );
++
++	if ( jQuery.isWindow( obj ) ) {
++		return false;
++	}
++
++	if ( obj.nodeType === 1 && length ) {
++		return true;
++	}
++
++	return type === "array" || type !== "function" &&
++		( length === 0 ||
++		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
++}
++
++// All jQuery objects should point back to these
++rootjQuery = jQuery(document);
++// String to Object options format cache
++var optionsCache = {};
++
++// Convert String-formatted options into Object-formatted ones and store in cache
++function createOptions( options ) {
++	var object = optionsCache[ options ] = {};
++	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
++		object[ flag ] = true;
++	});
++	return object;
++}
++
++/*
++ * Create a callback list using the following parameters:
++ *
++ *	options: an optional list of space-separated options that will change how
++ *			the callback list behaves or a more traditional option object
++ *
++ * By default a callback list will act like an event callback list and can be
++ * "fired" multiple times.
++ *
++ * Possible options:
++ *
++ *	once:			will ensure the callback list can only be fired once (like a Deferred)
++ *
++ *	memory:			will keep track of previous values and will call any callback added
++ *					after the list has been fired right away with the latest "memorized"
++ *					values (like a Deferred)
++ *
++ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
++ *
++ *	stopOnFalse:	interrupt callings when a callback returns false
++ *
++ */
++jQuery.Callbacks = function( options ) {
++
++	// Convert options from String-formatted to Object-formatted if needed
++	// (we check in cache first)
++	options = typeof options === "string" ?
++		( optionsCache[ options ] || createOptions( options ) ) :
++		jQuery.extend( {}, options );
++
++	var // Flag to know if list is currently firing
++		firing,
++		// Last fire value (for non-forgettable lists)
++		memory,
++		// Flag to know if list was already fired
++		fired,
++		// End of the loop when firing
++		firingLength,
++		// Index of currently firing callback (modified by remove if needed)
++		firingIndex,
++		// First callback to fire (used internally by add and fireWith)
++		firingStart,
++		// Actual callback list
++		list = [],
++		// Stack of fire calls for repeatable lists
++		stack = !options.once && [],
++		// Fire callbacks
++		fire = function( data ) {
++			memory = options.memory && data;
++			fired = true;
++			firingIndex = firingStart || 0;
++			firingStart = 0;
++			firingLength = list.length;
++			firing = true;
++			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
++				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
++					memory = false; // To prevent further calls using add
++					break;
++				}
++			}
++			firing = false;
++			if ( list ) {
++				if ( stack ) {
++					if ( stack.length ) {
++						fire( stack.shift() );
++					}
++				} else if ( memory ) {
++					list = [];
++				} else {
++					self.disable();
++				}
++			}
++		},
++		// Actual Callbacks object
++		self = {
++			// Add a callback or a collection of callbacks to the list
++			add: function() {
++				if ( list ) {
++					// First, we save the current length
++					var start = list.length;
++					(function add( args ) {
++						jQuery.each( args, function( _, arg ) {
++							var type = jQuery.type( arg );
++							if ( type === "function" ) {
++								if ( !options.unique || !self.has( arg ) ) {
++									list.push( arg );
++								}
++							} else if ( arg && arg.length && type !== "string" ) {
++								// Inspect recursively
++								add( arg );
++							}
++						});
++					})( arguments );
++					// Do we need to add the callbacks to the
++					// current firing batch?
++					if ( firing ) {
++						firingLength = list.length;
++					// With memory, if we're not firing then
++					// we should call right away
++					} else if ( memory ) {
++						firingStart = start;
++						fire( memory );
++					}
++				}
++				return this;
++			},
++			// Remove a callback from the list
++			remove: function() {
++				if ( list ) {
++					jQuery.each( arguments, function( _, arg ) {
++						var index;
++						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
++							list.splice( index, 1 );
++							// Handle firing indexes
++							if ( firing ) {
++								if ( index <= firingLength ) {
++									firingLength--;
++								}
++								if ( index <= firingIndex ) {
++									firingIndex--;
++								}
++							}
++						}
++					});
++				}
++				return this;
++			},
++			// Check if a given callback is in the list.
++			// If no argument is given, return whether or not list has callbacks attached.
++			has: function( fn ) {
++				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
++			},
++			// Remove all callbacks from the list
++			empty: function() {
++				list = [];
++				return this;
++			},
++			// Have the list do nothing anymore
++			disable: function() {
++				list = stack = memory = undefined;
++				return this;
++			},
++			// Is it disabled?
++			disabled: function() {
++				return !list;
++			},
++			// Lock the list in its current state
++			lock: function() {
++				stack = undefined;
++				if ( !memory ) {
++					self.disable();
++				}
++				return this;
++			},
++			// Is it locked?
++			locked: function() {
++				return !stack;
++			},
++			// Call all callbacks with the given context and arguments
++			fireWith: function( context, args ) {
++				args = args || [];
++				args = [ context, args.slice ? args.slice() : args ];
++				if ( list && ( !fired || stack ) ) {
++					if ( firing ) {
++						stack.push( args );
++					} else {
++						fire( args );
++					}
++				}
++				return this;
++			},
++			// Call all the callbacks with the given arguments
++			fire: function() {
++				self.fireWith( this, arguments );
++				return this;
++			},
++			// To know if the callbacks have already been called at least once
++			fired: function() {
++				return !!fired;
++			}
++		};
++
++	return self;
++};
++jQuery.extend({
++
++	Deferred: function( func ) {
++		var tuples = [
++				// action, add listener, listener list, final state
++				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
++				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
++				[ "notify", "progress", jQuery.Callbacks("memory") ]
++			],
++			state = "pending",
++			promise = {
++				state: function() {
++					return state;
++				},
++				always: function() {
++					deferred.done( arguments ).fail( arguments );
++					return this;
++				},
++				then: function( /* fnDone, fnFail, fnProgress */ ) {
++					var fns = arguments;
++					return jQuery.Deferred(function( newDefer ) {
++						jQuery.each( tuples, function( i, tuple ) {
++							var action = tuple[ 0 ],
++								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
++							// deferred[ done | fail | progress ] for forwarding actions to newDefer
++							deferred[ tuple[1] ](function() {
++								var returned = fn && fn.apply( this, arguments );
++								if ( returned && jQuery.isFunction( returned.promise ) ) {
++									returned.promise()
++										.done( newDefer.resolve )
++										.fail( newDefer.reject )
++										.progress( newDefer.notify );
++								} else {
++									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
++								}
++							});
++						});
++						fns = null;
++					}).promise();
++				},
++				// Get a promise for this deferred
++				// If obj is provided, the promise aspect is added to the object
++				promise: function( obj ) {
++					return obj != null ? jQuery.extend( obj, promise ) : promise;
++				}
++			},
++			deferred = {};
++
++		// Keep pipe for back-compat
++		promise.pipe = promise.then;
++
++		// Add list-specific methods
++		jQuery.each( tuples, function( i, tuple ) {
++			var list = tuple[ 2 ],
++				stateString = tuple[ 3 ];
++
++			// promise[ done | fail | progress ] = list.add
++			promise[ tuple[1] ] = list.add;
++
++			// Handle state
++			if ( stateString ) {
++				list.add(function() {
++					// state = [ resolved | rejected ]
++					state = stateString;
++
++				// [ reject_list | resolve_list ].disable; progress_list.lock
++				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
++			}
++
++			// deferred[ resolve | reject | notify ]
++			deferred[ tuple[0] ] = function() {
++				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
++				return this;
++			};
++			deferred[ tuple[0] + "With" ] = list.fireWith;
++		});
++
++		// Make the deferred a promise
++		promise.promise( deferred );
++
++		// Call given func if any
++		if ( func ) {
++			func.call( deferred, deferred );
++		}
++
++		// All done!
++		return deferred;
++	},
++
++	// Deferred helper
++	when: function( subordinate /* , ..., subordinateN */ ) {
++		var i = 0,
++			resolveValues = core_slice.call( arguments ),
++			length = resolveValues.length,
++
++			// the count of uncompleted subordinates
++			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
++
++			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
++			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
++
++			// Update function for both resolve and progress values
++			updateFunc = function( i, contexts, values ) {
++				return function( value ) {
++					contexts[ i ] = this;
++					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
++					if( values === progressValues ) {
++						deferred.notifyWith( contexts, values );
++					} else if ( !( --remaining ) ) {
++						deferred.resolveWith( contexts, values );
++					}
++				};
++			},
++
++			progressValues, progressContexts, resolveContexts;
++
++		// add listeners to Deferred subordinates; treat others as resolved
++		if ( length > 1 ) {
++			progressValues = new Array( length );
++			progressContexts = new Array( length );
++			resolveContexts = new Array( length );
++			for ( ; i < length; i++ ) {
++				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
++					resolveValues[ i ].promise()
++						.done( updateFunc( i, resolveContexts, resolveValues ) )
++						.fail( deferred.reject )
++						.progress( updateFunc( i, progressContexts, progressValues ) );
++				} else {
++					--remaining;
++				}
++			}
++		}
++
++		// if we're not waiting on anything, resolve the master
++		if ( !remaining ) {
++			deferred.resolveWith( resolveContexts, resolveValues );
++		}
++
++		return deferred.promise();
++	}
++});
++jQuery.support = (function() {
++
++	var support, all, a,
++		input, select, fragment,
++		opt, eventName, isSupported, i,
++		div = document.createElement("div");
++
++	// Setup
++	div.setAttribute( "className", "t" );
++	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
++
++	// Support tests won't run in some limited or non-browser environments
++	all = div.getElementsByTagName("*");
++	a = div.getElementsByTagName("a")[ 0 ];
++	if ( !all || !a || !all.length ) {
++		return {};
++	}
++
++	// First batch of tests
++	select = document.createElement("select");
++	opt = select.appendChild( document.createElement("option") );
++	input = div.getElementsByTagName("input")[ 0 ];
++
++	a.style.cssText = "top:1px;float:left;opacity:.5";
++	support = {
++		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
++		getSetAttribute: div.className !== "t",
++
++		// IE strips leading whitespace when .innerHTML is used
++		leadingWhitespace: div.firstChild.nodeType === 3,
++
++		// Make sure that tbody elements aren't automatically inserted
++		// IE will insert them into empty tables
++		tbody: !div.getElementsByTagName("tbody").length,
++
++		// Make sure that link elements get serialized correctly by innerHTML
++		// This requires a wrapper element in IE
++		htmlSerialize: !!div.getElementsByTagName("link").length,
++
++		// Get the style information from getAttribute
++		// (IE uses .cssText instead)
++		style: /top/.test( a.getAttribute("style") ),
++
++		// Make sure that URLs aren't manipulated
++		// (IE normalizes it by default)
++		hrefNormalized: a.getAttribute("href") === "/a",
++
++		// Make sure that element opacity exists
++		// (IE uses filter instead)
++		// Use a regex to work around a WebKit issue. See #5145
++		opacity: /^0.5/.test( a.style.opacity ),
++
++		// Verify style float existence
++		// (IE uses styleFloat instead of cssFloat)
++		cssFloat: !!a.style.cssFloat,
++
++		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
++		checkOn: !!input.value,
++
++		// Make sure that a selected-by-default option has a working selected property.
++		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
++		optSelected: opt.selected,
++
++		// Tests for enctype support on a form (#6743)
++		enctype: !!document.createElement("form").enctype,
++
++		// Makes sure cloning an html5 element does not cause problems
++		// Where outerHTML is undefined, this still works
++		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
++
++		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
++		boxModel: document.compatMode === "CSS1Compat",
++
++		// Will be defined later
++		deleteExpando: true,
++		noCloneEvent: true,
++		inlineBlockNeedsLayout: false,
++		shrinkWrapBlocks: false,
++		reliableMarginRight: true,
++		boxSizingReliable: true,
++		pixelPosition: false
++	};
++
++	// Make sure checked status is properly cloned
++	input.checked = true;
++	support.noCloneChecked = input.cloneNode( true ).checked;
++
++	// Make sure that the options inside disabled selects aren't marked as disabled
++	// (WebKit marks them as disabled)
++	select.disabled = true;
++	support.optDisabled = !opt.disabled;
++
++	// Support: IE<9
++	try {
++		delete div.test;
++	} catch( e ) {
++		support.deleteExpando = false;
++	}
++
++	// Check if we can trust getAttribute("value")
++	input = document.createElement("input");
++	input.setAttribute( "value", "" );
++	support.input = input.getAttribute( "value" ) === "";
++
++	// Check if an input maintains its value after becoming a radio
++	input.value = "t";
++	input.setAttribute( "type", "radio" );
++	support.radioValue = input.value === "t";
++
++	// #11217 - WebKit loses check when the name is after the checked attribute
++	input.setAttribute( "checked", "t" );
++	input.setAttribute( "name", "t" );
++
++	fragment = document.createDocumentFragment();
++	fragment.appendChild( input );
++
++	// Check if a disconnected checkbox will retain its checked
++	// value of true after appended to the DOM (IE6/7)
++	support.appendChecked = input.checked;
++
++	// WebKit doesn't clone checked state correctly in fragments
++	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
++
++	// Support: IE<9
++	// Opera does not clone events (and typeof div.attachEvent === undefined).
++	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
++	if ( div.attachEvent ) {
++		div.attachEvent( "onclick", function() {
++			support.noCloneEvent = false;
++		});
++
++		div.cloneNode( true ).click();
++	}
++
++	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
++	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
++	for ( i in { submit: true, change: true, focusin: true }) {
++		div.setAttribute( eventName = "on" + i, "t" );
++
++		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
++	}
++
++	div.style.backgroundClip = "content-box";
++	div.cloneNode( true ).style.backgroundClip = "";
++	support.clearCloneStyle = div.style.backgroundClip === "content-box";
++
++	// Run tests that need a body at doc ready
++	jQuery(function() {
++		var container, marginDiv, tds,
++			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
++			body = document.getElementsByTagName("body")[0];
++
++		if ( !body ) {
++			// Return for frameset docs that don't have a body
++			return;
++		}
++
++		container = document.createElement("div");
++		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
++
++		body.appendChild( container ).appendChild( div );
++
++		// Support: IE8
++		// Check if table cells still have offsetWidth/Height when they are set
++		// to display:none and there are still other visible table cells in a
++		// table row; if so, offsetWidth/Height are not reliable for use when
++		// determining if an element has been hidden directly using
++		// display:none (it is still safe to use offsets if a parent element is
++		// hidden; don safety goggles and see bug #4512 for more information).
++		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
++		tds = div.getElementsByTagName("td");
++		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
++		isSupported = ( tds[ 0 ].offsetHeight === 0 );
++
++		tds[ 0 ].style.display = "";
++		tds[ 1 ].style.display = "none";
++
++		// Support: IE8
++		// Check if empty table cells still have offsetWidth/Height
++		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
++
++		// Check box-sizing and margin behavior
++		div.innerHTML = "";
++		div.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%;";
++		support.boxSizing = ( div.offsetWidth === 4 );
++		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
++
++		// Use window.getComputedStyle because jsdom on node.js will break without it.
++		if ( window.getComputedStyle ) {
++			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
++			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
++
++			// Check if div with explicit width and no margin-right incorrectly
++			// gets computed margin-right based on width of container. (#3333)
++			// Fails in WebKit before Feb 2011 nightlies
++			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++			marginDiv = div.appendChild( document.createElement("div") );
++			marginDiv.style.cssText = div.style.cssText = divReset;
++			marginDiv.style.marginRight = marginDiv.style.width = "0";
++			div.style.width = "1px";
++
++			support.reliableMarginRight =
++				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
++		}
++
++		if ( typeof div.style.zoom !== core_strundefined ) {
++			// Support: IE<8
++			// Check if natively block-level elements act like inline-block
++			// elements when setting their display to 'inline' and giving
++			// them layout
++			div.innerHTML = "";
++			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
++			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
++
++			// Support: IE6
++			// Check if elements with layout shrink-wrap their children
++			div.style.display = "block";
++			div.innerHTML = "<div></div>";
++			div.firstChild.style.width = "5px";
++			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
++
++			if ( support.inlineBlockNeedsLayout ) {
++				// Prevent IE 6 from affecting layout for positioned elements #11048
++				// Prevent IE from shrinking the body in IE 7 mode #12869
++				// Support: IE<8
++				body.style.zoom = 1;
++			}
++		}
++
++		body.removeChild( container );
++
++		// Null elements to avoid leaks in IE
++		container = div = tds = marginDiv = null;
++	});
++
++	// Null elements to avoid leaks in IE
++	all = select = fragment = opt = a = input = null;
++
++	return support;
++})();
++
++var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
++	rmultiDash = /([A-Z])/g;
++
++function internalData( elem, name, data, pvt /* Internal Use Only */ ){
++	if ( !jQuery.acceptData( elem ) ) {
++		return;
++	}
++
++	var thisCache, ret,
++		internalKey = jQuery.expando,
++		getByName = typeof name === "string",
++
++		// We have to handle DOM nodes and JS objects differently because IE6-7
++		// can't GC object references properly across the DOM-JS boundary
++		isNode = elem.nodeType,
++
++		// Only DOM nodes need the global jQuery cache; JS object data is
++		// attached directly to the object so GC can occur automatically
++		cache = isNode ? jQuery.cache : elem,
++
++		// Only defining an ID for JS objects if its cache already exists allows
++		// the code to shortcut on the same path as a DOM node with no cache
++		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
++
++	// Avoid doing any more work than we need to when trying to get data on an
++	// object that has no data at all
++	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
++		return;
++	}
++
++	if ( !id ) {
++		// Only DOM nodes need a new unique ID for each element since their data
++		// ends up in the global cache
++		if ( isNode ) {
++			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
++		} else {
++			id = internalKey;
++		}
++	}
++
++	if ( !cache[ id ] ) {
++		cache[ id ] = {};
++
++		// Avoids exposing jQuery metadata on plain JS objects when the object
++		// is serialized using JSON.stringify
++		if ( !isNode ) {
++			cache[ id ].toJSON = jQuery.noop;
++		}
++	}
++
++	// An object can be passed to jQuery.data instead of a key/value pair; this gets
++	// shallow copied over onto the existing cache
++	if ( typeof name === "object" || typeof name === "function" ) {
++		if ( pvt ) {
++			cache[ id ] = jQuery.extend( cache[ id ], name );
++		} else {
++			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
++		}
++	}
++
++	thisCache = cache[ id ];
++
++	// jQuery data() is stored in a separate object inside the object's internal data
++	// cache in order to avoid key collisions between internal data and user-defined
++	// data.
++	if ( !pvt ) {
++		if ( !thisCache.data ) {
++			thisCache.data = {};
++		}
++
++		thisCache = thisCache.data;
++	}
++
++	if ( data !== undefined ) {
++		thisCache[ jQuery.camelCase( name ) ] = data;
++	}
++
++	// Check for both converted-to-camel and non-converted data property names
++	// If a data property was specified
++	if ( getByName ) {
++
++		// First Try to find as-is property data
++		ret = thisCache[ name ];
++
++		// Test for null|undefined property data
++		if ( ret == null ) {
++
++			// Try to find the camelCased property
++			ret = thisCache[ jQuery.camelCase( name ) ];
++		}
++	} else {
++		ret = thisCache;
++	}
++
++	return ret;
++}
++
++function internalRemoveData( elem, name, pvt ) {
++	if ( !jQuery.acceptData( elem ) ) {
++		return;
++	}
++
++	var i, l, thisCache,
++		isNode = elem.nodeType,
++
++		// See jQuery.data for more information
++		cache = isNode ? jQuery.cache : elem,
++		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
++
++	// If there is already no cache entry for this object, there is no
++	// purpose in continuing
++	if ( !cache[ id ] ) {
++		return;
++	}
++
++	if ( name ) {
++
++		thisCache = pvt ? cache[ id ] : cache[ id ].data;
++
++		if ( thisCache ) {
++
++			// Support array or space separated string names for data keys
++			if ( !jQuery.isArray( name ) ) {
++
++				// try the string as a key before any manipulation
++				if ( name in thisCache ) {
++					name = [ name ];
++				} else {
++
++					// split the camel cased version by spaces unless a key with the spaces exists
++					name = jQuery.camelCase( name );
++					if ( name in thisCache ) {
++						name = [ name ];
++					} else {
++						name = name.split(" ");
++					}
++				}
++			} else {
++				// If "name" is an array of keys...
++				// When data is initially created, via ("key", "val") signature,
++				// keys will be converted to camelCase.
++				// Since there is no way to tell _how_ a key was added, remove
++				// both plain key and camelCase key. #12786
++				// This will only penalize the array argument path.
++				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
++			}
++
++			for ( i = 0, l = name.length; i < l; i++ ) {
++				delete thisCache[ name[i] ];
++			}
++
++			// If there is no data left in the cache, we want to continue
++			// and let the cache object itself get destroyed
++			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
++				return;
++			}
++		}
++	}
++
++	// See jQuery.data for more information
++	if ( !pvt ) {
++		delete cache[ id ].data;
++
++		// Don't destroy the parent cache unless the internal data object
++		// had been the only thing left in it
++		if ( !isEmptyDataObject( cache[ id ] ) ) {
++			return;
++		}
++	}
++
++	// Destroy the cache
++	if ( isNode ) {
++		jQuery.cleanData( [ elem ], true );
++
++	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
++	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
++		delete cache[ id ];
++
++	// When all else fails, null
++	} else {
++		cache[ id ] = null;
++	}
++}
++
++jQuery.extend({
++	cache: {},
++
++	// Unique for each copy of jQuery on the page
++	// Non-digits removed to match rinlinejQuery
++	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
++
++	// The following elements throw uncatchable exceptions if you
++	// attempt to add expando properties to them.
++	noData: {
++		"embed": true,
++		// Ban all objects except for Flash (which handle expandos)
++		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
++		"applet": true
++	},
++
++	hasData: function( elem ) {
++		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
++		return !!elem && !isEmptyDataObject( elem );
++	},
++
++	data: function( elem, name, data ) {
++		return internalData( elem, name, data );
++	},
++
++	removeData: function( elem, name ) {
++		return internalRemoveData( elem, name );
++	},
++
++	// For internal use only.
++	_data: function( elem, name, data ) {
++		return internalData( elem, name, data, true );
++	},
++
++	_removeData: function( elem, name ) {
++		return internalRemoveData( elem, name, true );
++	},
++
++	// A method for determining if a DOM node can handle the data expando
++	acceptData: function( elem ) {
++		// Do not set data on non-element because it will not be cleared (#8335).
++		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
++			return false;
++		}
++
++		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
++
++		// nodes accept data unless otherwise specified; rejection can be conditional
++		return !noData || noData !== true && elem.getAttribute("classid") === noData;
++	}
++});
++
++jQuery.fn.extend({
++	data: function( key, value ) {
++		var attrs, name,
++			elem = this[0],
++			i = 0,
++			data = null;
++
++		// Gets all values
++		if ( key === undefined ) {
++			if ( this.length ) {
++				data = jQuery.data( elem );
++
++				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
++					attrs = elem.attributes;
++					for ( ; i < attrs.length; i++ ) {
++						name = attrs[i].name;
++
++						if ( !name.indexOf( "data-" ) ) {
++							name = jQuery.camelCase( name.slice(5) );
++
++							dataAttr( elem, name, data[ name ] );
++						}
++					}
++					jQuery._data( elem, "parsedAttrs", true );
++				}
++			}
++
++			return data;
++		}
++
++		// Sets multiple values
++		if ( typeof key === "object" ) {
++			return this.each(function() {
++				jQuery.data( this, key );
++			});
++		}
++
++		return jQuery.access( this, function( value ) {
++
++			if ( value === undefined ) {
++				// Try to fetch any internally stored data first
++				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
++			}
++
++			this.each(function() {
++				jQuery.data( this, key, value );
++			});
++		}, null, value, arguments.length > 1, null, true );
++	},
++
++	removeData: function( key ) {
++		return this.each(function() {
++			jQuery.removeData( this, key );
++		});
++	}
++});
++
++function dataAttr( elem, key, data ) {
++	// If nothing was found internally, try to fetch any
++	// data from the HTML5 data-* attribute
++	if ( data === undefined && elem.nodeType === 1 ) {
++
++		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
++
++		data = elem.getAttribute( name );
++
++		if ( typeof data === "string" ) {
++			try {
++				data = data === "true" ? true :
++					data === "false" ? false :
++					data === "null" ? null :
++					// Only convert to a number if it doesn't change the string
++					+data + "" === data ? +data :
++					rbrace.test( data ) ? jQuery.parseJSON( data ) :
++						data;
++			} catch( e ) {}
++
++			// Make sure we set the data so it isn't changed later
++			jQuery.data( elem, key, data );
++
++		} else {
++			data = undefined;
++		}
++	}
++
++	return data;
++}
++
++// checks a cache object for emptiness
++function isEmptyDataObject( obj ) {
++	var name;
++	for ( name in obj ) {
++
++		// if the public data object is empty, the private is still empty
++		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
++			continue;
++		}
++		if ( name !== "toJSON" ) {
++			return false;
++		}
++	}
++
++	return true;
++}
++jQuery.extend({
++	queue: function( elem, type, data ) {
++		var queue;
++
++		if ( elem ) {
++			type = ( type || "fx" ) + "queue";
++			queue = jQuery._data( elem, type );
++
++			// Speed up dequeue by getting out quickly if this is just a lookup
++			if ( data ) {
++				if ( !queue || jQuery.isArray(data) ) {
++					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
++				} else {
++					queue.push( data );
++				}
++			}
++			return queue || [];
++		}
++	},
++
++	dequeue: function( elem, type ) {
++		type = type || "fx";
++
++		var queue = jQuery.queue( elem, type ),
++			startLength = queue.length,
++			fn = queue.shift(),
++			hooks = jQuery._queueHooks( elem, type ),
++			next = function() {
++				jQuery.dequeue( elem, type );
++			};
++
++		// If the fx queue is dequeued, always remove the progress sentinel
++		if ( fn === "inprogress" ) {
++			fn = queue.shift();
++			startLength--;
++		}
++
++		hooks.cur = fn;
++		if ( fn ) {
++
++			// Add a progress sentinel to prevent the fx queue from being
++			// automatically dequeued
++			if ( type === "fx" ) {
++				queue.unshift( "inprogress" );
++			}
++
++			// clear up the last queue stop function
++			delete hooks.stop;
++			fn.call( elem, next, hooks );
++		}
++
++		if ( !startLength && hooks ) {
++			hooks.empty.fire();
++		}
++	},
++
++	// not intended for public consumption - generates a queueHooks object, or returns the current one
++	_queueHooks: function( elem, type ) {
++		var key = type + "queueHooks";
++		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
++			empty: jQuery.Callbacks("once memory").add(function() {
++				jQuery._removeData( elem, type + "queue" );
++				jQuery._removeData( elem, key );
++			})
++		});
++	}
++});
++
++jQuery.fn.extend({
++	queue: function( type, data ) {
++		var setter = 2;
++
++		if ( typeof type !== "string" ) {
++			data = type;
++			type = "fx";
++			setter--;
++		}
++
++		if ( arguments.length < setter ) {
++			return jQuery.queue( this[0], type );
++		}
++
++		return data === undefined ?
++			this :
++			this.each(function() {
++				var queue = jQuery.queue( this, type, data );
++
++				// ensure a hooks for this queue
++				jQuery._queueHooks( this, type );
++
++				if ( type === "fx" && queue[0] !== "inprogress" ) {
++					jQuery.dequeue( this, type );
++				}
++			});
++	},
++	dequeue: function( type ) {
++		return this.each(function() {
++			jQuery.dequeue( this, type );
++		});
++	},
++	// Based off of the plugin by Clint Helfers, with permission.
++	// http://blindsignals.com/index.php/2009/07/jquery-delay/
++	delay: function( time, type ) {
++		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
++		type = type || "fx";
++
++		return this.queue( type, function( next, hooks ) {
++			var timeout = setTimeout( next, time );
++			hooks.stop = function() {
++				clearTimeout( timeout );
++			};
++		});
++	},
++	clearQueue: function( type ) {
++		return this.queue( type || "fx", [] );
++	},
++	// Get a promise resolved when queues of a certain type
++	// are emptied (fx is the type by default)
++	promise: function( type, obj ) {
++		var tmp,
++			count = 1,
++			defer = jQuery.Deferred(),
++			elements = this,
++			i = this.length,
++			resolve = function() {
++				if ( !( --count ) ) {
++					defer.resolveWith( elements, [ elements ] );
++				}
++			};
++
++		if ( typeof type !== "string" ) {
++			obj = type;
++			type = undefined;
++		}
++		type = type || "fx";
++
++		while( i-- ) {
++			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
++			if ( tmp && tmp.empty ) {
++				count++;
++				tmp.empty.add( resolve );
++			}
++		}
++		resolve();
++		return defer.promise( obj );
++	}
++});
++var nodeHook, boolHook,
++	rclass = /[\t\r\n]/g,
++	rreturn = /\r/g,
++	rfocusable = /^(?:input|select|textarea|button|object)$/i,
++	rclickable = /^(?:a|area)$/i,
++	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
++	ruseDefault = /^(?:checked|selected)$/i,
++	getSetAttribute = jQuery.support.getSetAttribute,
++	getSetInput = jQuery.support.input;
++
++jQuery.fn.extend({
++	attr: function( name, value ) {
++		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
++	},
++
++	removeAttr: function( name ) {
++		return this.each(function() {
++			jQuery.removeAttr( this, name );
++		});
++	},
++
++	prop: function( name, value ) {
++		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
++	},
++
++	removeProp: function( name ) {
++		name = jQuery.propFix[ name ] || name;
++		return this.each(function() {
++			// try/catch handles cases where IE balks (such as removing a property on window)
++			try {
++				this[ name ] = undefined;
++				delete this[ name ];
++			} catch( e ) {}
++		});
++	},
++
++	addClass: function( value ) {
++		var classes, elem, cur, clazz, j,
++			i = 0,
++			len = this.length,
++			proceed = typeof value === "string" && value;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).addClass( value.call( this, j, this.className ) );
++			});
++		}
++
++		if ( proceed ) {
++			// The disjunction here is for better compressibility (see removeClass)
++			classes = ( value || "" ).match( core_rnotwhite ) || [];
++
++			for ( ; i < len; i++ ) {
++				elem = this[ i ];
++				cur = elem.nodeType === 1 && ( elem.className ?
++					( " " + elem.className + " " ).replace( rclass, " " ) :
++					" "
++				);
++
++				if ( cur ) {
++					j = 0;
++					while ( (clazz = classes[j++]) ) {
++						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
++							cur += clazz + " ";
++						}
++					}
++					elem.className = jQuery.trim( cur );
++
++				}
++			}
++		}
++
++		return this;
++	},
++
++	removeClass: function( value ) {
++		var classes, elem, cur, clazz, j,
++			i = 0,
++			len = this.length,
++			proceed = arguments.length === 0 || typeof value === "string" && value;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).removeClass( value.call( this, j, this.className ) );
++			});
++		}
++		if ( proceed ) {
++			classes = ( value || "" ).match( core_rnotwhite ) || [];
++
++			for ( ; i < len; i++ ) {
++				elem = this[ i ];
++				// This expression is here for better compressibility (see addClass)
++				cur = elem.nodeType === 1 && ( elem.className ?
++					( " " + elem.className + " " ).replace( rclass, " " ) :
++					""
++				);
++
++				if ( cur ) {
++					j = 0;
++					while ( (clazz = classes[j++]) ) {
++						// Remove *all* instances
++						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
++							cur = cur.replace( " " + clazz + " ", " " );
++						}
++					}
++					elem.className = value ? jQuery.trim( cur ) : "";
++				}
++			}
++		}
++
++		return this;
++	},
++
++	toggleClass: function( value, stateVal ) {
++		var type = typeof value,
++			isBool = typeof stateVal === "boolean";
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( i ) {
++				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
++			});
++		}
++
++		return this.each(function() {
++			if ( type === "string" ) {
++				// toggle individual class names
++				var className,
++					i = 0,
++					self = jQuery( this ),
++					state = stateVal,
++					classNames = value.match( core_rnotwhite ) || [];
++
++				while ( (className = classNames[ i++ ]) ) {
++					// check each className given, space separated list
++					state = isBool ? state : !self.hasClass( className );
++					self[ state ? "addClass" : "removeClass" ]( className );
++				}
++
++			// Toggle whole class name
++			} else if ( type === core_strundefined || type === "boolean" ) {
++				if ( this.className ) {
++					// store className if set
++					jQuery._data( this, "__className__", this.className );
++				}
++
++				// If the element has a class name or if we're passed "false",
++				// then remove the whole classname (if there was one, the above saved it).
++				// Otherwise bring back whatever was previously saved (if anything),
++				// falling back to the empty string if nothing was stored.
++				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
++			}
++		});
++	},
++
++	hasClass: function( selector ) {
++		var className = " " + selector + " ",
++			i = 0,
++			l = this.length;
++		for ( ; i < l; i++ ) {
++			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
++				return true;
++			}
++		}
++
++		return false;
++	},
++
++	val: function( value ) {
++		var ret, hooks, isFunction,
++			elem = this[0];
++
++		if ( !arguments.length ) {
++			if ( elem ) {
++				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
++
++				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
++					return ret;
++				}
++
++				ret = elem.value;
++
++				return typeof ret === "string" ?
++					// handle most common string cases
++					ret.replace(rreturn, "") :
++					// handle cases where value is null/undef or number
++					ret == null ? "" : ret;
++			}
++
++			return;
++		}
++
++		isFunction = jQuery.isFunction( value );
++
++		return this.each(function( i ) {
++			var val,
++				self = jQuery(this);
++
++			if ( this.nodeType !== 1 ) {
++				return;
++			}
++
++			if ( isFunction ) {
++				val = value.call( this, i, self.val() );
++			} else {
++				val = value;
++			}
++
++			// Treat null/undefined as ""; convert numbers to string
++			if ( val == null ) {
++				val = "";
++			} else if ( typeof val === "number" ) {
++				val += "";
++			} else if ( jQuery.isArray( val ) ) {
++				val = jQuery.map(val, function ( value ) {
++					return value == null ? "" : value + "";
++				});
++			}
++
++			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
++
++			// If set returns undefined, fall back to normal setting
++			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
++				this.value = val;
++			}
++		});
++	}
++});
++
++jQuery.extend({
++	valHooks: {
++		option: {
++			get: function( elem ) {
++				// attributes.value is undefined in Blackberry 4.7 but
++				// uses .value. See #6932
++				var val = elem.attributes.value;
++				return !val || val.specified ? elem.value : elem.text;
++			}
++		},
++		select: {
++			get: function( elem ) {
++				var value, option,
++					options = elem.options,
++					index = elem.selectedIndex,
++					one = elem.type === "select-one" || index < 0,
++					values = one ? null : [],
++					max = one ? index + 1 : options.length,
++					i = index < 0 ?
++						max :
++						one ? index : 0;
++
++				// Loop through all the selected options
++				for ( ; i < max; i++ ) {
++					option = options[ i ];
++
++					// oldIE doesn't update selected after form reset (#2551)
++					if ( ( option.selected || i === index ) &&
++							// Don't return options that are disabled or in a disabled optgroup
++							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
++							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
++
++						// Get the specific value for the option
++						value = jQuery( option ).val();
++
++						// We don't need an array for one selects
++						if ( one ) {
++							return value;
++						}
++
++						// Multi-Selects return an array
++						values.push( value );
++					}
++				}
++
++				return values;
++			},
++
++			set: function( elem, value ) {
++				var values = jQuery.makeArray( value );
++
++				jQuery(elem).find("option").each(function() {
++					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
++				});
++
++				if ( !values.length ) {
++					elem.selectedIndex = -1;
++				}
++				return values;
++			}
++		}
++	},
++
++	attr: function( elem, name, value ) {
++		var hooks, notxml, ret,
++			nType = elem.nodeType;
++
++		// don't get/set attributes on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return;
++		}
++
++		// Fallback to prop when attributes are not supported
++		if ( typeof elem.getAttribute === core_strundefined ) {
++			return jQuery.prop( elem, name, value );
++		}
++
++		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		// All attributes are lowercase
++		// Grab necessary hook if one is defined
++		if ( notxml ) {
++			name = name.toLowerCase();
++			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
++		}
++
++		if ( value !== undefined ) {
++
++			if ( value === null ) {
++				jQuery.removeAttr( elem, name );
++
++			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				elem.setAttribute( name, value + "" );
++				return value;
++			}
++
++		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
++			return ret;
++
++		} else {
++
++			// In IE9+, Flash objects don't have .getAttribute (#12945)
++			// Support: IE9+
++			if ( typeof elem.getAttribute !== core_strundefined ) {
++				ret =  elem.getAttribute( name );
++			}
++
++			// Non-existent attributes return null, we normalize to undefined
++			return ret == null ?
++				undefined :
++				ret;
++		}
++	},
++
++	removeAttr: function( elem, value ) {
++		var name, propName,
++			i = 0,
++			attrNames = value && value.match( core_rnotwhite );
++
++		if ( attrNames && elem.nodeType === 1 ) {
++			while ( (name = attrNames[i++]) ) {
++				propName = jQuery.propFix[ name ] || name;
++
++				// Boolean attributes get special treatment (#10870)
++				if ( rboolean.test( name ) ) {
++					// Set corresponding property to false for boolean attributes
++					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
++					if ( !getSetAttribute && ruseDefault.test( name ) ) {
++						elem[ jQuery.camelCase( "default-" + name ) ] =
++							elem[ propName ] = false;
++					} else {
++						elem[ propName ] = false;
++					}
++
++				// See #9699 for explanation of this approach (setting first, then removal)
++				} else {
++					jQuery.attr( elem, name, "" );
++				}
++
++				elem.removeAttribute( getSetAttribute ? name : propName );
++			}
++		}
++	},
++
++	attrHooks: {
++		type: {
++			set: function( elem, value ) {
++				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
++					// Setting the type on a radio button after the value resets the value in IE6-9
++					// Reset value to default in case type is set after value during creation
++					var val = elem.value;
++					elem.setAttribute( "type", value );
++					if ( val ) {
++						elem.value = val;
++					}
++					return value;
++				}
++			}
++		}
++	},
++
++	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( elem, name, value ) {
++		var ret, hooks, notxml,
++			nType = elem.nodeType;
++
++		// don't get/set properties on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return;
++		}
++
++		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		if ( notxml ) {
++			// Fix name and attach hooks
++			name = jQuery.propFix[ name ] || name;
++			hooks = jQuery.propHooks[ name ];
++		}
++
++		if ( value !== undefined ) {
++			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				return ( elem[ name ] = value );
++			}
++
++		} else {
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
++				return ret;
++
++			} else {
++				return elem[ name ];
++			}
++		}
++	},
++
++	propHooks: {
++		tabIndex: {
++			get: function( elem ) {
++				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
++				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
++				var attributeNode = elem.getAttributeNode("tabindex");
++
++				return attributeNode && attributeNode.specified ?
++					parseInt( attributeNode.value, 10 ) :
++					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
++						0 :
++						undefined;
++			}
++		}
++	}
++});
++
++// Hook for boolean attributes
++boolHook = {
++	get: function( elem, name ) {
++		var
++			// Use .prop to determine if this attribute is understood as boolean
++			prop = jQuery.prop( elem, name ),
++
++			// Fetch it accordingly
++			attr = typeof prop === "boolean" && elem.getAttribute( name ),
++			detail = typeof prop === "boolean" ?
++
++				getSetInput && getSetAttribute ?
++					attr != null :
++					// oldIE fabricates an empty string for missing boolean attributes
++					// and conflates checked/selected into attroperties
++					ruseDefault.test( name ) ?
++						elem[ jQuery.camelCase( "default-" + name ) ] :
++						!!attr :
++
++				// fetch an attribute node for properties not recognized as boolean
++				elem.getAttributeNode( name );
++
++		return detail && detail.value !== false ?
++			name.toLowerCase() :
++			undefined;
++	},
++	set: function( elem, value, name ) {
++		if ( value === false ) {
++			// Remove boolean attributes when set to false
++			jQuery.removeAttr( elem, name );
++		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
++			// IE<8 needs the *property* name
++			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
++
++		// Use defaultChecked and defaultSelected for oldIE
++		} else {
++			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
++		}
++
++		return name;
++	}
++};
++
++// fix oldIE value attroperty
++if ( !getSetInput || !getSetAttribute ) {
++	jQuery.attrHooks.value = {
++		get: function( elem, name ) {
++			var ret = elem.getAttributeNode( name );
++			return jQuery.nodeName( elem, "input" ) ?
++
++				// Ignore the value *property* by using defaultValue
++				elem.defaultValue :
++
++				ret && ret.specified ? ret.value : undefined;
++		},
++		set: function( elem, value, name ) {
++			if ( jQuery.nodeName( elem, "input" ) ) {
++				// Does not return so that setAttribute is also used
++				elem.defaultValue = value;
++			} else {
++				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
++				return nodeHook && nodeHook.set( elem, value, name );
++			}
++		}
++	};
++}
++
++// IE6/7 do not support getting/setting some attributes with get/setAttribute
++if ( !getSetAttribute ) {
++
++	// Use this for any attribute in IE6/7
++	// This fixes almost every IE6/7 issue
++	nodeHook = jQuery.valHooks.button = {
++		get: function( elem, name ) {
++			var ret = elem.getAttributeNode( name );
++			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
++				ret.value :
++				undefined;
++		},
++		set: function( elem, value, name ) {
++			// Set the existing or create a new attribute node
++			var ret = elem.getAttributeNode( name );
++			if ( !ret ) {
++				elem.setAttributeNode(
++					(ret = elem.ownerDocument.createAttribute( name ))
++				);
++			}
++
++			ret.value = value += "";
++
++			// Break association with cloned elements by also using setAttribute (#9646)
++			return name === "value" || value === elem.getAttribute( name ) ?
++				value :
++				undefined;
++		}
++	};
++
++	// Set contenteditable to false on removals(#10429)
++	// Setting to empty string throws an error as an invalid value
++	jQuery.attrHooks.contenteditable = {
++		get: nodeHook.get,
++		set: function( elem, value, name ) {
++			nodeHook.set( elem, value === "" ? false : value, name );
++		}
++	};
++
++	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
++	// This is for removals
++	jQuery.each([ "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			set: function( elem, value ) {
++				if ( value === "" ) {
++					elem.setAttribute( name, "auto" );
++					return value;
++				}
++			}
++		});
++	});
++}
++
++
++// Some attributes require a special call on IE
++// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
++if ( !jQuery.support.hrefNormalized ) {
++	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			get: function( elem ) {
++				var ret = elem.getAttribute( name, 2 );
++				return ret == null ? undefined : ret;
++			}
++		});
++	});
++
++	// href/src property should get the full normalized URL (#10299/#12915)
++	jQuery.each([ "href", "src" ], function( i, name ) {
++		jQuery.propHooks[ name ] = {
++			get: function( elem ) {
++				return elem.getAttribute( name, 4 );
++			}
++		};
++	});
++}
++
++if ( !jQuery.support.style ) {
++	jQuery.attrHooks.style = {
++		get: function( elem ) {
++			// Return undefined in the case of empty string
++			// Note: IE uppercases css property names, but if we were to .toLowerCase()
++			// .cssText, that would destroy case senstitivity in URL's, like in "background"
++			return elem.style.cssText || undefined;
++		},
++		set: function( elem, value ) {
++			return ( elem.style.cssText = value + "" );
++		}
++	};
++}
++
++// Safari mis-reports the default selected property of an option
++// Accessing the parent's selectedIndex property fixes it
++if ( !jQuery.support.optSelected ) {
++	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
++		get: function( elem ) {
++			var parent = elem.parentNode;
++
++			if ( parent ) {
++				parent.selectedIndex;
++
++				// Make sure that it also works with optgroups, see #5701
++				if ( parent.parentNode ) {
++					parent.parentNode.selectedIndex;
++				}
++			}
++			return null;
++		}
++	});
++}
++
++// IE6/7 call enctype encoding
++if ( !jQuery.support.enctype ) {
++	jQuery.propFix.enctype = "encoding";
++}
++
++// Radios and checkboxes getter/setter
++if ( !jQuery.support.checkOn ) {
++	jQuery.each([ "radio", "checkbox" ], function() {
++		jQuery.valHooks[ this ] = {
++			get: function( elem ) {
++				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
++				return elem.getAttribute("value") === null ? "on" : elem.value;
++			}
++		};
++	});
++}
++jQuery.each([ "radio", "checkbox" ], function() {
++	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
++		set: function( elem, value ) {
++			if ( jQuery.isArray( value ) ) {
++				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
++			}
++		}
++	});
++});
++var rformElems = /^(?:input|select|textarea)$/i,
++	rkeyEvent = /^key/,
++	rmouseEvent = /^(?:mouse|contextmenu)|click/,
++	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
++	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
++
++function returnTrue() {
++	return true;
++}
++
++function returnFalse() {
++	return false;
++}
++
++/*
++ * Helper functions for managing events -- not part of the public interface.
++ * Props to Dean Edwards' addEvent library for many of the ideas.
++ */
++jQuery.event = {
++
++	global: {},
++
++	add: function( elem, types, handler, data, selector ) {
++		var tmp, events, t, handleObjIn,
++			special, eventHandle, handleObj,
++			handlers, type, namespaces, origType,
++			elemData = jQuery._data( elem );
++
++		// Don't attach events to noData or text/comment nodes (but allow plain objects)
++		if ( !elemData ) {
++			return;
++		}
++
++		// Caller can pass in an object of custom data in lieu of the handler
++		if ( handler.handler ) {
++			handleObjIn = handler;
++			handler = handleObjIn.handler;
++			selector = handleObjIn.selector;
++		}
++
++		// Make sure that the handler has a unique ID, used to find/remove it later
++		if ( !handler.guid ) {
++			handler.guid = jQuery.guid++;
++		}
++
++		// Init the element's event structure and main handler, if this is the first
++		if ( !(events = elemData.events) ) {
++			events = elemData.events = {};
++		}
++		if ( !(eventHandle = elemData.handle) ) {
++			eventHandle = elemData.handle = function( e ) {
++				// Discard the second event of a jQuery.event.trigger() and
++				// when an event is called after a page has unloaded
++				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
++					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
++					undefined;
++			};
++			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
++			eventHandle.elem = elem;
++		}
++
++		// Handle multiple events separated by a space
++		// jQuery(...).bind("mouseover mouseout", fn);
++		types = ( types || "" ).match( core_rnotwhite ) || [""];
++		t = types.length;
++		while ( t-- ) {
++			tmp = rtypenamespace.exec( types[t] ) || [];
++			type = origType = tmp[1];
++			namespaces = ( tmp[2] || "" ).split( "." ).sort();
++
++			// If event changes its type, use the special event handlers for the changed type
++			special = jQuery.event.special[ type ] || {};
++
++			// If selector defined, determine special event api type, otherwise given type
++			type = ( selector ? special.delegateType : special.bindType ) || type;
++
++			// Update special based on newly reset type
++			special = jQuery.event.special[ type ] || {};
++
++			// handleObj is passed to all event handlers
++			handleObj = jQuery.extend({
++				type: type,
++				origType: origType,
++				data: data,
++				handler: handler,
++				guid: handler.guid,
++				selector: selector,
++				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
++				namespace: namespaces.join(".")
++			}, handleObjIn );
++
++			// Init the event handler queue if we're the first
++			if ( !(handlers = events[ type ]) ) {
++				handlers = events[ type ] = [];
++				handlers.delegateCount = 0;
++
++				// Only use addEventListener/attachEvent if the special events handler returns false
++				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
++					// Bind the global event handler to the element
++					if ( elem.addEventListener ) {
++						elem.addEventListener( type, eventHandle, false );
++
++					} else if ( elem.attachEvent ) {
++						elem.attachEvent( "on" + type, eventHandle );
++					}
++				}
++			}
++
++			if ( special.add ) {
++				special.add.call( elem, handleObj );
++
++				if ( !handleObj.handler.guid ) {
++					handleObj.handler.guid = handler.guid;
++				}
++			}
++
++			// Add to the element's handler list, delegates in front
++			if ( selector ) {
++				handlers.splice( handlers.delegateCount++, 0, handleObj );
++			} else {
++				handlers.push( handleObj );
++			}
++
++			// Keep track of which events have ever been used, for event optimization
++			jQuery.event.global[ type ] = true;
++		}
++
++		// Nullify elem to prevent memory leaks in IE
++		elem = null;
++	},
++
++	// Detach an event or set of events from an element
++	remove: function( elem, types, handler, selector, mappedTypes ) {
++		var j, handleObj, tmp,
++			origCount, t, events,
++			special, handlers, type,
++			namespaces, origType,
++			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
++
++		if ( !elemData || !(events = elemData.events) ) {
++			return;
++		}
++
++		// Once for each type.namespace in types; type may be omitted
++		types = ( types || "" ).match( core_rnotwhite ) || [""];
++		t = types.length;
++		while ( t-- ) {
++			tmp = rtypenamespace.exec( types[t] ) || [];
++			type = origType = tmp[1];
++			namespaces = ( tmp[2] || "" ).split( "." ).sort();
++
++			// Unbind all events (on this namespace, if provided) for the element
++			if ( !type ) {
++				for ( type in events ) {
++					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
++				}
++				continue;
++			}
++
++			special = jQuery.event.special[ type ] || {};
++			type = ( selector ? special.delegateType : special.bindType ) || type;
++			handlers = events[ type ] || [];
++			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
++
++			// Remove matching events
++			origCount = j = handlers.length;
++			while ( j-- ) {
++				handleObj = handlers[ j ];
++
++				if ( ( mappedTypes || origType === handleObj.origType ) &&
++					( !handler || handler.guid === handleObj.guid ) &&
++					( !tmp || tmp.test( handleObj.namespace ) ) &&
++					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
++					handlers.splice( j, 1 );
++
++					if ( handleObj.selector ) {
++						handlers.delegateCount--;
++					}
++					if ( special.remove ) {
++						special.remove.call( elem, handleObj );
++					}
++				}
++			}
++
++			// Remove generic event handler if we removed something and no more handlers exist
++			// (avoids potential for endless recursion during removal of special event handlers)
++			if ( origCount && !handlers.length ) {
++				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
++					jQuery.removeEvent( elem, type, elemData.handle );
++				}
++
++				delete events[ type ];
++			}
++		}
++
++		// Remove the expando if it's no longer used
++		if ( jQuery.isEmptyObject( events ) ) {
++			delete elemData.handle;
++
++			// removeData also checks for emptiness and clears the expando if empty
++			// so use it instead of delete
++			jQuery._removeData( elem, "events" );
++		}
++	},
++
++	trigger: function( event, data, elem, onlyHandlers ) {
++		var handle, ontype, cur,
++			bubbleType, special, tmp, i,
++			eventPath = [ elem || document ],
++			type = core_hasOwn.call( event, "type" ) ? event.type : event,
++			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
++
++		cur = tmp = elem = elem || document;
++
++		// Don't do events on text and comment nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		// focus/blur morphs to focusin/out; ensure we're not firing them right now
++		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
++			return;
++		}
++
++		if ( type.indexOf(".") >= 0 ) {
++			// Namespaced trigger; create a regexp to match event type in handle()
++			namespaces = type.split(".");
++			type = namespaces.shift();
++			namespaces.sort();
++		}
++		ontype = type.indexOf(":") < 0 && "on" + type;
++
++		// Caller can pass in a jQuery.Event object, Object, or just an event type string
++		event = event[ jQuery.expando ] ?
++			event :
++			new jQuery.Event( type, typeof event === "object" && event );
++
++		event.isTrigger = true;
++		event.namespace = namespaces.join(".");
++		event.namespace_re = event.namespace ?
++			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
++			null;
++
++		// Clean up the event in case it is being reused
++		event.result = undefined;
++		if ( !event.target ) {
++			event.target = elem;
++		}
++
++		// Clone any incoming data and prepend the event, creating the handler arg list
++		data = data == null ?
++			[ event ] :
++			jQuery.makeArray( data, [ event ] );
++
++		// Allow special events to draw outside the lines
++		special = jQuery.event.special[ type ] || {};
++		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
++			return;
++		}
++
++		// Determine event propagation path in advance, per W3C events spec (#9951)
++		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
++		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
++
++			bubbleType = special.delegateType || type;
++			if ( !rfocusMorph.test( bubbleType + type ) ) {
++				cur = cur.parentNode;
++			}
++			for ( ; cur; cur = cur.parentNode ) {
++				eventPath.push( cur );
++				tmp = cur;
++			}
++
++			// Only add window if we got to document (e.g., not plain obj or detached DOM)
++			if ( tmp === (elem.ownerDocument || document) ) {
++				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
++			}
++		}
++
++		// Fire handlers on the event path
++		i = 0;
++		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
++
++			event.type = i > 1 ?
++				bubbleType :
++				special.bindType || type;
++
++			// jQuery handler
++			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
++			if ( handle ) {
++				handle.apply( cur, data );
++			}
++
++			// Native handler
++			handle = ontype && cur[ ontype ];
++			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
++				event.preventDefault();
++			}
++		}
++		event.type = type;
++
++		// If nobody prevented the default action, do it now
++		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
++
++			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
++				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
++
++				// Call a native DOM method on the target with the same name name as the event.
++				// Can't use an .isFunction() check here because IE6/7 fails that test.
++				// Don't do default actions on window, that's where global variables be (#6170)
++				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
++
++					// Don't re-trigger an onFOO event when we call its FOO() method
++					tmp = elem[ ontype ];
++
++					if ( tmp ) {
++						elem[ ontype ] = null;
++					}
++
++					// Prevent re-triggering of the same event, since we already bubbled it above
++					jQuery.event.triggered = type;
++					try {
++						elem[ type ]();
++					} catch ( e ) {
++						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
++						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
++					}
++					jQuery.event.triggered = undefined;
++
++					if ( tmp ) {
++						elem[ ontype ] = tmp;
++					}
++				}
++			}
++		}
++
++		return event.result;
++	},
++
++	dispatch: function( event ) {
++
++		// Make a writable jQuery.Event from the native event object
++		event = jQuery.event.fix( event );
++
++		var i, ret, handleObj, matched, j,
++			handlerQueue = [],
++			args = core_slice.call( arguments ),
++			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
++			special = jQuery.event.special[ event.type ] || {};
++
++		// Use the fix-ed jQuery.Event rather than the (read-only) native event
++		args[0] = event;
++		event.delegateTarget = this;
++
++		// Call the preDispatch hook for the mapped type, and let it bail if desired
++		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
++			return;
++		}
++
++		// Determine handlers
++		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
++
++		// Run delegates first; they may want to stop propagation beneath us
++		i = 0;
++		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
++			event.currentTarget = matched.elem;
++
++			j = 0;
++			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
++
++				// Triggered event must either 1) have no namespace, or
++				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
++				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
++
++					event.handleObj = handleObj;
++					event.data = handleObj.data;
++
++					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
++							.apply( matched.elem, args );
++
++					if ( ret !== undefined ) {
++						if ( (event.result = ret) === false ) {
++							event.preventDefault();
++							event.stopPropagation();
++						}
++					}
++				}
++			}
++		}
++
++		// Call the postDispatch hook for the mapped type
++		if ( special.postDispatch ) {
++			special.postDispatch.call( this, event );
++		}
++
++		return event.result;
++	},
++
++	handlers: function( event, handlers ) {
++		var sel, handleObj, matches, i,
++			handlerQueue = [],
++			delegateCount = handlers.delegateCount,
++			cur = event.target;
++
++		// Find delegate handlers
++		// Black-hole SVG <use> instance trees (#13180)
++		// Avoid non-left-click bubbling in Firefox (#3861)
++		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
++
++			for ( ; cur != this; cur = cur.parentNode || this ) {
++
++				// Don't check non-elements (#13208)
++				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
++				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
++					matches = [];
++					for ( i = 0; i < delegateCount; i++ ) {
++						handleObj = handlers[ i ];
++
++						// Don't conflict with Object.prototype properties (#13203)
++						sel = handleObj.selector + " ";
++
++						if ( matches[ sel ] === undefined ) {
++							matches[ sel ] = handleObj.needsContext ?
++								jQuery( sel, this ).index( cur ) >= 0 :
++								jQuery.find( sel, this, null, [ cur ] ).length;
++						}
++						if ( matches[ sel ] ) {
++							matches.push( handleObj );
++						}
++					}
++					if ( matches.length ) {
++						handlerQueue.push({ elem: cur, handlers: matches });
++					}
++				}
++			}
++		}
++
++		// Add the remaining (directly-bound) handlers
++		if ( delegateCount < handlers.length ) {
++			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
++		}
++
++		return handlerQueue;
++	},
++
++	fix: function( event ) {
++		if ( event[ jQuery.expando ] ) {
++			return event;
++		}
++
++		// Create a writable copy of the event object and normalize some properties
++		var i, prop, copy,
++			type = event.type,
++			originalEvent = event,
++			fixHook = this.fixHooks[ type ];
++
++		if ( !fixHook ) {
++			this.fixHooks[ type ] = fixHook =
++				rmouseEvent.test( type ) ? this.mouseHooks :
++				rkeyEvent.test( type ) ? this.keyHooks :
++				{};
++		}
++		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
++
++		event = new jQuery.Event( originalEvent );
++
++		i = copy.length;
++		while ( i-- ) {
++			prop = copy[ i ];
++			event[ prop ] = originalEvent[ prop ];
++		}
++
++		// Support: IE<9
++		// Fix target property (#1925)
++		if ( !event.target ) {
++			event.target = originalEvent.srcElement || document;
++		}
++
++		// Support: Chrome 23+, Safari?
++		// Target should not be a text node (#504, #13143)
++		if ( event.target.nodeType === 3 ) {
++			event.target = event.target.parentNode;
++		}
++
++		// Support: IE<9
++		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
++		event.metaKey = !!event.metaKey;
++
++		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
++	},
++
++	// Includes some event props shared by KeyEvent and MouseEvent
++	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
++
++	fixHooks: {},
++
++	keyHooks: {
++		props: "char charCode key keyCode".split(" "),
++		filter: function( event, original ) {
++
++			// Add which for key events
++			if ( event.which == null ) {
++				event.which = original.charCode != null ? original.charCode : original.keyCode;
++			}
++
++			return event;
++		}
++	},
++
++	mouseHooks: {
++		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
++		filter: function( event, original ) {
++			var body, eventDoc, doc,
++				button = original.button,
++				fromElement = original.fromElement;
++
++			// Calculate pageX/Y if missing and clientX/Y available
++			if ( event.pageX == null && original.clientX != null ) {
++				eventDoc = event.target.ownerDocument || document;
++				doc = eventDoc.documentElement;
++				body = eventDoc.body;
++
++				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
++				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
++			}
++
++			// Add relatedTarget, if necessary
++			if ( !event.relatedTarget && fromElement ) {
++				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
++			}
++
++			// Add which for click: 1 === left; 2 === middle; 3 === right
++			// Note: button is not normalized, so don't use it
++			if ( !event.which && button !== undefined ) {
++				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
++			}
++
++			return event;
++		}
++	},
++
++	special: {
++		load: {
++			// Prevent triggered image.load events from bubbling to window.load
++			noBubble: true
++		},
++		click: {
++			// For checkbox, fire native event so checked state will be right
++			trigger: function() {
++				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
++					this.click();
++					return false;
++				}
++			}
++		},
++		focus: {
++			// Fire native event if possible so blur/focus sequence is correct
++			trigger: function() {
++				if ( this !== document.activeElement && this.focus ) {
++					try {
++						this.focus();
++						return false;
++					} catch ( e ) {
++						// Support: IE<9
++						// If we error on focus to hidden element (#1486, #12518),
++						// let .trigger() run the handlers
++					}
++				}
++			},
++			delegateType: "focusin"
++		},
++		blur: {
++			trigger: function() {
++				if ( this === document.activeElement && this.blur ) {
++					this.blur();
++					return false;
++				}
++			},
++			delegateType: "focusout"
++		},
++
++		beforeunload: {
++			postDispatch: function( event ) {
++
++				// Even when returnValue equals to undefined Firefox will still show alert
++				if ( event.result !== undefined ) {
++					event.originalEvent.returnValue = event.result;
++				}
++			}
++		}
++	},
++
++	simulate: function( type, elem, event, bubble ) {
++		// Piggyback on a donor event to simulate a different one.
++		// Fake originalEvent to avoid donor's stopPropagation, but if the
++		// simulated event prevents default then we do the same on the donor.
++		var e = jQuery.extend(
++			new jQuery.Event(),
++			event,
++			{ type: type,
++				isSimulated: true,
++				originalEvent: {}
++			}
++		);
++		if ( bubble ) {
++			jQuery.event.trigger( e, null, elem );
++		} else {
++			jQuery.event.dispatch.call( elem, e );
++		}
++		if ( e.isDefaultPrevented() ) {
++			event.preventDefault();
++		}
++	}
++};
++
++jQuery.removeEvent = document.removeEventListener ?
++	function( elem, type, handle ) {
++		if ( elem.removeEventListener ) {
++			elem.removeEventListener( type, handle, false );
++		}
++	} :
++	function( elem, type, handle ) {
++		var name = "on" + type;
++
++		if ( elem.detachEvent ) {
++
++			// #8545, #7054, preventing memory leaks for custom events in IE6-8
++			// detachEvent needed property on element, by name of that event, to properly expose it to GC
++			if ( typeof elem[ name ] === core_strundefined ) {
++				elem[ name ] = null;
++			}
++
++			elem.detachEvent( name, handle );
++		}
++	};
++
++jQuery.Event = function( src, props ) {
++	// Allow instantiation without the 'new' keyword
++	if ( !(this instanceof jQuery.Event) ) {
++		return new jQuery.Event( src, props );
++	}
++
++	// Event object
++	if ( src && src.type ) {
++		this.originalEvent = src;
++		this.type = src.type;
++
++		// Events bubbling up the document may have been marked as prevented
++		// by a handler lower down the tree; reflect the correct value.
++		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
++			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
++
++	// Event type
++	} else {
++		this.type = src;
++	}
++
++	// Put explicitly provided properties onto the event object
++	if ( props ) {
++		jQuery.extend( this, props );
++	}
++
++	// Create a timestamp if incoming event doesn't have one
++	this.timeStamp = src && src.timeStamp || jQuery.now();
++
++	// Mark it as fixed
++	this[ jQuery.expando ] = true;
++};
++
++// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
++// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
++jQuery.Event.prototype = {
++	isDefaultPrevented: returnFalse,
++	isPropagationStopped: returnFalse,
++	isImmediatePropagationStopped: returnFalse,
++
++	preventDefault: function() {
++		var e = this.originalEvent;
++
++		this.isDefaultPrevented = returnTrue;
++		if ( !e ) {
++			return;
++		}
++
++		// If preventDefault exists, run it on the original event
++		if ( e.preventDefault ) {
++			e.preventDefault();
++
++		// Support: IE
++		// Otherwise set the returnValue property of the original event to false
++		} else {
++			e.returnValue = false;
++		}
++	},
++	stopPropagation: function() {
++		var e = this.originalEvent;
++
++		this.isPropagationStopped = returnTrue;
++		if ( !e ) {
++			return;
++		}
++		// If stopPropagation exists, run it on the original event
++		if ( e.stopPropagation ) {
++			e.stopPropagation();
++		}
++
++		// Support: IE
++		// Set the cancelBubble property of the original event to true
++		e.cancelBubble = true;
++	},
++	stopImmediatePropagation: function() {
++		this.isImmediatePropagationStopped = returnTrue;
++		this.stopPropagation();
++	}
++};
++
++// Create mouseenter/leave events using mouseover/out and event-time checks
++jQuery.each({
++	mouseenter: "mouseover",
++	mouseleave: "mouseout"
++}, function( orig, fix ) {
++	jQuery.event.special[ orig ] = {
++		delegateType: fix,
++		bindType: fix,
++
++		handle: function( event ) {
++			var ret,
++				target = this,
++				related = event.relatedTarget,
++				handleObj = event.handleObj;
++
++			// For mousenter/leave call the handler if related is outside the target.
++			// NB: No relatedTarget if the mouse left/entered the browser window
++			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
++				event.type = handleObj.origType;
++				ret = handleObj.handler.apply( this, arguments );
++				event.type = fix;
++			}
++			return ret;
++		}
++	};
++});
++
++// IE submit delegation
++if ( !jQuery.support.submitBubbles ) {
++
++	jQuery.event.special.submit = {
++		setup: function() {
++			// Only need this for delegated form submit events
++			if ( jQuery.nodeName( this, "form" ) ) {
++				return false;
++			}
++
++			// Lazy-add a submit handler when a descendant form may potentially be submitted
++			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
++				// Node name check avoids a VML-related crash in IE (#9807)
++				var elem = e.target,
++					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
++				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
++					jQuery.event.add( form, "submit._submit", function( event ) {
++						event._submit_bubble = true;
++					});
++					jQuery._data( form, "submitBubbles", true );
++				}
++			});
++			// return undefined since we don't need an event listener
++		},
++
++		postDispatch: function( event ) {
++			// If form was submitted by the user, bubble the event up the tree
++			if ( event._submit_bubble ) {
++				delete event._submit_bubble;
++				if ( this.parentNode && !event.isTrigger ) {
++					jQuery.event.simulate( "submit", this.parentNode, event, true );
++				}
++			}
++		},
++
++		teardown: function() {
++			// Only need this for delegated form submit events
++			if ( jQuery.nodeName( this, "form" ) ) {
++				return false;
++			}
++
++			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
++			jQuery.event.remove( this, "._submit" );
++		}
++	};
++}
++
++// IE change delegation and checkbox/radio fix
++if ( !jQuery.support.changeBubbles ) {
++
++	jQuery.event.special.change = {
++
++		setup: function() {
++
++			if ( rformElems.test( this.nodeName ) ) {
++				// IE doesn't fire change on a check/radio until blur; trigger it on click
++				// after a propertychange. Eat the blur-change in special.change.handle.
++				// This still fires onchange a second time for check/radio after blur.
++				if ( this.type === "checkbox" || this.type === "radio" ) {
++					jQuery.event.add( this, "propertychange._change", function( event ) {
++						if ( event.originalEvent.propertyName === "checked" ) {
++							this._just_changed = true;
++						}
++					});
++					jQuery.event.add( this, "click._change", function( event ) {
++						if ( this._just_changed && !event.isTrigger ) {
++							this._just_changed = false;
++						}
++						// Allow triggered, simulated change events (#11500)
++						jQuery.event.simulate( "change", this, event, true );
++					});
++				}
++				return false;
++			}
++			// Delegated event; lazy-add a change handler on descendant inputs
++			jQuery.event.add( this, "beforeactivate._change", function( e ) {
++				var elem = e.target;
++
++				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
++					jQuery.event.add( elem, "change._change", function( event ) {
++						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
++							jQuery.event.simulate( "change", this.parentNode, event, true );
++						}
++					});
++					jQuery._data( elem, "changeBubbles", true );
++				}
++			});
++		},
++
++		handle: function( event ) {
++			var elem = event.target;
++
++			// Swallow native change events from checkbox/radio, we already triggered them above
++			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
++				return event.handleObj.handler.apply( this, arguments );
++			}
++		},
++
++		teardown: function() {
++			jQuery.event.remove( this, "._change" );
++
++			return !rformElems.test( this.nodeName );
++		}
++	};
++}
++
++// Create "bubbling" focus and blur events
++if ( !jQuery.support.focusinBubbles ) {
++	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
++
++		// Attach a single capturing handler while someone wants focusin/focusout
++		var attaches = 0,
++			handler = function( event ) {
++				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
++			};
++
++		jQuery.event.special[ fix ] = {
++			setup: function() {
++				if ( attaches++ === 0 ) {
++					document.addEventListener( orig, handler, true );
++				}
++			},
++			teardown: function() {
++				if ( --attaches === 0 ) {
++					document.removeEventListener( orig, handler, true );
++				}
++			}
++		};
++	});
++}
++
++jQuery.fn.extend({
++
++	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
++		var type, origFn;
++
++		// Types can be a map of types/handlers
++		if ( typeof types === "object" ) {
++			// ( types-Object, selector, data )
++			if ( typeof selector !== "string" ) {
++				// ( types-Object, data )
++				data = data || selector;
++				selector = undefined;
++			}
++			for ( type in types ) {
++				this.on( type, selector, data, types[ type ], one );
++			}
++			return this;
++		}
++
++		if ( data == null && fn == null ) {
++			// ( types, fn )
++			fn = selector;
++			data = selector = undefined;
++		} else if ( fn == null ) {
++			if ( typeof selector === "string" ) {
++				// ( types, selector, fn )
++				fn = data;
++				data = undefined;
++			} else {
++				// ( types, data, fn )
++				fn = data;
++				data = selector;
++				selector = undefined;
++			}
++		}
++		if ( fn === false ) {
++			fn = returnFalse;
++		} else if ( !fn ) {
++			return this;
++		}
++
++		if ( one === 1 ) {
++			origFn = fn;
++			fn = function( event ) {
++				// Can use an empty set, since event contains the info
++				jQuery().off( event );
++				return origFn.apply( this, arguments );
++			};
++			// Use same guid so caller can remove using origFn
++			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
++		}
++		return this.each( function() {
++			jQuery.event.add( this, types, fn, data, selector );
++		});
++	},
++	one: function( types, selector, data, fn ) {
++		return this.on( types, selector, data, fn, 1 );
++	},
++	off: function( types, selector, fn ) {
++		var handleObj, type;
++		if ( types && types.preventDefault && types.handleObj ) {
++			// ( event )  dispatched jQuery.Event
++			handleObj = types.handleObj;
++			jQuery( types.delegateTarget ).off(
++				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
++				handleObj.selector,
++				handleObj.handler
++			);
++			return this;
++		}
++		if ( typeof types === "object" ) {
++			// ( types-object [, selector] )
++			for ( type in types ) {
++				this.off( type, selector, types[ type ] );
++			}
++			return this;
++		}
++		if ( selector === false || typeof selector === "function" ) {
++			// ( types [, fn] )
++			fn = selector;
++			selector = undefined;
++		}
++		if ( fn === false ) {
++			fn = returnFalse;
++		}
++		return this.each(function() {
++			jQuery.event.remove( this, types, fn, selector );
++		});
++	},
++
++	bind: function( types, data, fn ) {
++		return this.on( types, null, data, fn );
++	},
++	unbind: function( types, fn ) {
++		return this.off( types, null, fn );
++	},
++
++	delegate: function( selector, types, data, fn ) {
++		return this.on( types, selector, data, fn );
++	},
++	undelegate: function( selector, types, fn ) {
++		// ( namespace ) or ( selector, types [, fn] )
++		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
++	},
++
++	trigger: function( type, data ) {
++		return this.each(function() {
++			jQuery.event.trigger( type, data, this );
++		});
++	},
++	triggerHandler: function( type, data ) {
++		var elem = this[0];
++		if ( elem ) {
++			return jQuery.event.trigger( type, data, elem, true );
++		}
++	}
++});
++/*!
++ * Sizzle CSS Selector Engine
++ * Copyright 2012 jQuery Foundation and other contributors
++ * Released under the MIT license
++ * http://sizzlejs.com/
++ */
++(function( window, undefined ) {
++
++var i,
++	cachedruns,
++	Expr,
++	getText,
++	isXML,
++	compile,
++	hasDuplicate,
++	outermostContext,
++
++	// Local document vars
++	setDocument,
++	document,
++	docElem,
++	documentIsXML,
++	rbuggyQSA,
++	rbuggyMatches,
++	matches,
++	contains,
++	sortOrder,
++
++	// Instance-specific data
++	expando = "sizzle" + -(new Date()),
++	preferredDoc = window.document,
++	support = {},
++	dirruns = 0,
++	done = 0,
++	classCache = createCache(),
++	tokenCache = createCache(),
++	compilerCache = createCache(),
++
++	// General-purpose constants
++	strundefined = typeof undefined,
++	MAX_NEGATIVE = 1 << 31,
++
++	// Array methods
++	arr = [],
++	pop = arr.pop,
++	push = arr.push,
++	slice = arr.slice,
++	// Use a stripped-down indexOf if we can't use a native one
++	indexOf = arr.indexOf || function( elem ) {
++		var i = 0,
++			len = this.length;
++		for ( ; i < len; i++ ) {
++			if ( this[i] === elem ) {
++				return i;
++			}
++		}
++		return -1;
++	},
++
++
++	// Regular expressions
++
++	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
++	whitespace = "[\\x20\\t\\r\\n\\f]",
++	// http://www.w3.org/TR/css3-syntax/#characters
++	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
++
++	// Loosely modeled on CSS identifier characters
++	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
++	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
++	identifier = characterEncoding.replace( "w", "w#" ),
++
++	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
++	operators = "([*^$|!~]?=)",
++	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
++		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
++
++	// Prefer arguments quoted,
++	//   then not containing pseudos/brackets,
++	//   then attribute selectors/non-parenthetical expressions,
++	//   then anything else
++	// These preferences are here to reduce the number of selectors
++	//   needing tokenize in the PSEUDO preFilter
++	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
++
++	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
++	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
++
++	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
++	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
++	rpseudo = new RegExp( pseudos ),
++	ridentifier = new RegExp( "^" + identifier + "$" ),
++
++	matchExpr = {
++		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
++		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
++		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
++		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
++		"ATTR": new RegExp( "^" + attributes ),
++		"PSEUDO": new RegExp( "^" + pseudos ),
++		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
++			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
++			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
++		// For use in libraries implementing .is()
++		// We use this for POS matching in `select`
++		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
++			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
++	},
++
++	rsibling = /[\x20\t\r\n\f]*[+~]/,
++
++	rnative = /^[^{]+\{\s*\[native code/,
++
++	// Easily-parseable/retrievable ID or TAG or CLASS selectors
++	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
++
++	rinputs = /^(?:input|select|textarea|button)$/i,
++	rheader = /^h\d$/i,
++
++	rescape = /'|\\/g,
++	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
++
++	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
++	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
++	funescape = function( _, escaped ) {
++		var high = "0x" + escaped - 0x10000;
++		// NaN means non-codepoint
++		return high !== high ?
++			escaped :
++			// BMP codepoint
++			high < 0 ?
++				String.fromCharCode( high + 0x10000 ) :
++				// Supplemental Plane codepoint (surrogate pair)
++				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
++	};
++
++// Use a stripped-down slice if we can't use a native one
++try {
++	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
++} catch ( e ) {
++	slice = function( i ) {
++		var elem,
++			results = [];
++		while ( (elem = this[i++]) ) {
++			results.push( elem );
++		}
++		return results;
++	};
++}
++
++/**
++ * For feature detection
++ * @param {Function} fn The function to test for native support
++ */
++function isNative( fn ) {
++	return rnative.test( fn + "" );
++}
++
++/**
++ * Create key-value caches of limited size
++ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
++ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
++ *	deleting the oldest entry
++ */
++function createCache() {
++	var cache,
++		keys = [];
++
++	return (cache = function( key, value ) {
++		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
++		if ( keys.push( key += " " ) > Expr.cacheLength ) {
++			// Only keep the most recent entries
++			delete cache[ keys.shift() ];
++		}
++		return (cache[ key ] = value);
++	});
++}
++
++/**
++ * Mark a function for special use by Sizzle
++ * @param {Function} fn The function to mark
++ */
++function markFunction( fn ) {
++	fn[ expando ] = true;
++	return fn;
++}
++
++/**
++ * Support testing using an element
++ * @param {Function} fn Passed the created div and expects a boolean result
++ */
++function assert( fn ) {
++	var div = document.createElement("div");
++
++	try {
++		return fn( div );
++	} catch (e) {
++		return false;
++	} finally {
++		// release memory in IE
++		div = null;
++	}
++}
++
++function Sizzle( selector, context, results, seed ) {
++	var match, elem, m, nodeType,
++		// QSA vars
++		i, groups, old, nid, newContext, newSelector;
++
++	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
++		setDocument( context );
++	}
++
++	context = context || document;
++	results = results || [];
++
++	if ( !selector || typeof selector !== "string" ) {
++		return results;
++	}
++
++	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
++		return [];
++	}
++
++	if ( !documentIsXML && !seed ) {
++
++		// Shortcuts
++		if ( (match = rquickExpr.exec( selector )) ) {
++			// Speed-up: Sizzle("#ID")
++			if ( (m = match[1]) ) {
++				if ( nodeType === 9 ) {
++					elem = context.getElementById( m );
++					// Check parentNode to catch when Blackberry 4.6 returns
++					// nodes that are no longer in the document #6963
++					if ( elem && elem.parentNode ) {
++						// Handle the case where IE, Opera, and Webkit return items
++						// by name instead of ID
++						if ( elem.id === m ) {
++							results.push( elem );
++							return results;
++						}
++					} else {
++						return results;
++					}
++				} else {
++					// Context is not a document
++					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
++						contains( context, elem ) && elem.id === m ) {
++						results.push( elem );
++						return results;
++					}
++				}
++
++			// Speed-up: Sizzle("TAG")
++			} else if ( match[2] ) {
++				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
++				return results;
++
++			// Speed-up: Sizzle(".CLASS")
++			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
++				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
++				return results;
++			}
++		}
++
++		// QSA path
++		if ( support.qsa && !rbuggyQSA.test(selector) ) {
++			old = true;
++			nid = expando;
++			newContext = context;
++			newSelector = nodeType === 9 && selector;
++
++			// qSA works strangely on Element-rooted queries
++			// We can work around this by specifying an extra ID on the root
++			// and working up from there (Thanks to Andrew Dupont for the technique)
++			// IE 8 doesn't work on object elements
++			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
++				groups = tokenize( selector );
++
++				if ( (old = context.getAttribute("id")) ) {
++					nid = old.replace( rescape, "\\$&" );
++				} else {
++					context.setAttribute( "id", nid );
++				}
++				nid = "[id='" + nid + "'] ";
++
++				i = groups.length;
++				while ( i-- ) {
++					groups[i] = nid + toSelector( groups[i] );
++				}
++				newContext = rsibling.test( selector ) && context.parentNode || context;
++				newSelector = groups.join(",");
++			}
++
++			if ( newSelector ) {
++				try {
++					push.apply( results, slice.call( newContext.querySelectorAll(
++						newSelector
++					), 0 ) );
++					return results;
++				} catch(qsaError) {
++				} finally {
++					if ( !old ) {
++						context.removeAttribute("id");
++					}
++				}
++			}
++		}
++	}
++
++	// All others
++	return select( selector.replace( rtrim, "$1" ), context, results, seed );
++}
++
++/**
++ * Detect xml
++ * @param {Element|Object} elem An element or a document
++ */
++isXML = Sizzle.isXML = function( elem ) {
++	// documentElement is verified for cases where it doesn't yet exist
++	// (such as loading iframes in IE - #4833)
++	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
++	return documentElement ? documentElement.nodeName !== "HTML" : false;
++};
++
++/**
++ * Sets document-related variables once based on the current document
++ * @param {Element|Object} [doc] An element or document object to use to set the document
++ * @returns {Object} Returns the current document
++ */
++setDocument = Sizzle.setDocument = function( node ) {
++	var doc = node ? node.ownerDocument || node : preferredDoc;
++
++	// If no document and documentElement is available, return
++	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
++		return document;
++	}
++
++	// Set our document
++	document = doc;
++	docElem = doc.documentElement;
++
++	// Support tests
++	documentIsXML = isXML( doc );
++
++	// Check if getElementsByTagName("*") returns only elements
++	support.tagNameNoComments = assert(function( div ) {
++		div.appendChild( doc.createComment("") );
++		return !div.getElementsByTagName("*").length;
++	});
++
++	// Check if attributes should be retrieved by attribute nodes
++	support.attributes = assert(function( div ) {
++		div.innerHTML = "<select></select>";
++		var type = typeof div.lastChild.getAttribute("multiple");
++		// IE8 returns a string for some attributes even when not present
++		return type !== "boolean" && type !== "string";
++	});
++
++	// Check if getElementsByClassName can be trusted
++	support.getByClassName = assert(function( div ) {
++		// Opera can't find a second classname (in 9.6)
++		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
++		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
++			return false;
++		}
++
++		// Safari 3.2 caches class attributes and doesn't catch changes
++		div.lastChild.className = "e";
++		return div.getElementsByClassName("e").length === 2;
++	});
++
++	// Check if getElementById returns elements by name
++	// Check if getElementsByName privileges form controls or returns elements by ID
++	support.getByName = assert(function( div ) {
++		// Inject content
++		div.id = expando + 0;
++		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
++		docElem.insertBefore( div, docElem.firstChild );
++
++		// Test
++		var pass = doc.getElementsByName &&
++			// buggy browsers will return fewer than the correct 2
++			doc.getElementsByName( expando ).length === 2 +
++			// buggy browsers will return more than the correct 0
++			doc.getElementsByName( expando + 0 ).length;
++		support.getIdNotName = !doc.getElementById( expando );
++
++		// Cleanup
++		docElem.removeChild( div );
++
++		return pass;
++	});
++
++	// IE6/7 return modified attributes
++	Expr.attrHandle = assert(function( div ) {
++		div.innerHTML = "<a href='#'></a>";
++		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
++			div.firstChild.getAttribute("href") === "#";
++	}) ?
++		{} :
++		{
++			"href": function( elem ) {
++				return elem.getAttribute( "href", 2 );
++			},
++			"type": function( elem ) {
++				return elem.getAttribute("type");
++			}
++		};
++
++	// ID find and filter
++	if ( support.getIdNotName ) {
++		Expr.find["ID"] = function( id, context ) {
++			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
++				var m = context.getElementById( id );
++				// Check parentNode to catch when Blackberry 4.6 returns
++				// nodes that are no longer in the document #6963
++				return m && m.parentNode ? [m] : [];
++			}
++		};
++		Expr.filter["ID"] = function( id ) {
++			var attrId = id.replace( runescape, funescape );
++			return function( elem ) {
++				return elem.getAttribute("id") === attrId;
++			};
++		};
++	} else {
++		Expr.find["ID"] = function( id, context ) {
++			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
++				var m = context.getElementById( id );
++
++				return m ?
++					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
++						[m] :
++						undefined :
++					[];
++			}
++		};
++		Expr.filter["ID"] =  function( id ) {
++			var attrId = id.replace( runescape, funescape );
++			return function( elem ) {
++				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
++				return node && node.value === attrId;
++			};
++		};
++	}
++
++	// Tag
++	Expr.find["TAG"] = support.tagNameNoComments ?
++		function( tag, context ) {
++			if ( typeof context.getElementsByTagName !== strundefined ) {
++				return context.getElementsByTagName( tag );
++			}
++		} :
++		function( tag, context ) {
++			var elem,
++				tmp = [],
++				i = 0,
++				results = context.getElementsByTagName( tag );
++
++			// Filter out possible comments
++			if ( tag === "*" ) {
++				while ( (elem = results[i++]) ) {
++					if ( elem.nodeType === 1 ) {
++						tmp.push( elem );
++					}
++				}
++
++				return tmp;
++			}
++			return results;
++		};
++
++	// Name
++	Expr.find["NAME"] = support.getByName && function( tag, context ) {
++		if ( typeof context.getElementsByName !== strundefined ) {
++			return context.getElementsByName( name );
++		}
++	};
++
++	// Class
++	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
++		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
++			return context.getElementsByClassName( className );
++		}
++	};
++
++	// QSA and matchesSelector support
++
++	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
++	rbuggyMatches = [];
++
++	// qSa(:focus) reports false when true (Chrome 21),
++	// no need to also add to buggyMatches since matches checks buggyQSA
++	// A support test would require too much code (would include document ready)
++	rbuggyQSA = [ ":focus" ];
++
++	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
++		// Build QSA regex
++		// Regex strategy adopted from Diego Perini
++		assert(function( div ) {
++			// Select is set to empty string on purpose
++			// This is to test IE's treatment of not explictly
++			// setting a boolean content attribute,
++			// since its presence should be enough
++			// http://bugs.jquery.com/ticket/12359
++			div.innerHTML = "<select><option selected=''></option></select>";
++
++			// IE8 - Some boolean attributes are not treated correctly
++			if ( !div.querySelectorAll("[selected]").length ) {
++				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
++			}
++
++			// Webkit/Opera - :checked should return selected option elements
++			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
++			// IE8 throws error here and will not see later tests
++			if ( !div.querySelectorAll(":checked").length ) {
++				rbuggyQSA.push(":checked");
++			}
++		});
++
++		assert(function( div ) {
++
++			// Opera 10-12/IE8 - ^= $= *= and empty values
++			// Should not select anything
++			div.innerHTML = "<input type='hidden' i=''/>";
++			if ( div.querySelectorAll("[i^='']").length ) {
++				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
++			}
++
++			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
++			// IE8 throws error here and will not see later tests
++			if ( !div.querySelectorAll(":enabled").length ) {
++				rbuggyQSA.push( ":enabled", ":disabled" );
++			}
++
++			// Opera 10-11 does not throw on post-comma invalid pseudos
++			div.querySelectorAll("*,:x");
++			rbuggyQSA.push(",.*:");
++		});
++	}
++
++	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
++		docElem.mozMatchesSelector ||
++		docElem.webkitMatchesSelector ||
++		docElem.oMatchesSelector ||
++		docElem.msMatchesSelector) )) ) {
++
++		assert(function( div ) {
++			// Check to see if it's possible to do matchesSelector
++			// on a disconnected node (IE 9)
++			support.disconnectedMatch = matches.call( div, "div" );
++
++			// This should fail with an exception
++			// Gecko does not error, returns false instead
++			matches.call( div, "[s!='']:x" );
++			rbuggyMatches.push( "!=", pseudos );
++		});
++	}
++
++	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
++	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
++
++	// Element contains another
++	// Purposefully does not implement inclusive descendent
++	// As in, an element does not contain itself
++	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
++		function( a, b ) {
++			var adown = a.nodeType === 9 ? a.documentElement : a,
++				bup = b && b.parentNode;
++			return a === bup || !!( bup && bup.nodeType === 1 && (
++				adown.contains ?
++					adown.contains( bup ) :
++					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
++			));
++		} :
++		function( a, b ) {
++			if ( b ) {
++				while ( (b = b.parentNode) ) {
++					if ( b === a ) {
++						return true;
++					}
++				}
++			}
++			return false;
++		};
++
++	// Document order sorting
++	sortOrder = docElem.compareDocumentPosition ?
++	function( a, b ) {
++		var compare;
++
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++		}
++
++		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
++			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
++				if ( a === doc || contains( preferredDoc, a ) ) {
++					return -1;
++				}
++				if ( b === doc || contains( preferredDoc, b ) ) {
++					return 1;
++				}
++				return 0;
++			}
++			return compare & 4 ? -1 : 1;
++		}
++
++		return a.compareDocumentPosition ? -1 : 1;
++	} :
++	function( a, b ) {
++		var cur,
++			i = 0,
++			aup = a.parentNode,
++			bup = b.parentNode,
++			ap = [ a ],
++			bp = [ b ];
++
++		// Exit early if the nodes are identical
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++
++		// Parentless nodes are either documents or disconnected
++		} else if ( !aup || !bup ) {
++			return a === doc ? -1 :
++				b === doc ? 1 :
++				aup ? -1 :
++				bup ? 1 :
++				0;
++
++		// If the nodes are siblings, we can do a quick check
++		} else if ( aup === bup ) {
++			return siblingCheck( a, b );
++		}
++
++		// Otherwise we need full lists of their ancestors for comparison
++		cur = a;
++		while ( (cur = cur.parentNode) ) {
++			ap.unshift( cur );
++		}
++		cur = b;
++		while ( (cur = cur.parentNode) ) {
++			bp.unshift( cur );
++		}
++
++		// Walk down the tree looking for a discrepancy
++		while ( ap[i] === bp[i] ) {
++			i++;
++		}
++
++		return i ?
++			// Do a sibling check if the nodes have a common ancestor
++			siblingCheck( ap[i], bp[i] ) :
++
++			// Otherwise nodes in our document sort first
++			ap[i] === preferredDoc ? -1 :
++			bp[i] === preferredDoc ? 1 :
++			0;
++	};
++
++	// Always assume the presence of duplicates if sort doesn't
++	// pass them to our comparison function (as in Google Chrome).
++	hasDuplicate = false;
++	[0, 0].sort( sortOrder );
++	support.detectDuplicates = hasDuplicate;
++
++	return document;
++};
++
++Sizzle.matches = function( expr, elements ) {
++	return Sizzle( expr, null, null, elements );
++};
++
++Sizzle.matchesSelector = function( elem, expr ) {
++	// Set document vars if needed
++	if ( ( elem.ownerDocument || elem ) !== document ) {
++		setDocument( elem );
++	}
++
++	// Make sure that attribute selectors are quoted
++	expr = expr.replace( rattributeQuotes, "='$1']" );
++
++	// rbuggyQSA always contains :focus, so no need for an existence check
++	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
++		try {
++			var ret = matches.call( elem, expr );
++
++			// IE 9's matchesSelector returns false on disconnected nodes
++			if ( ret || support.disconnectedMatch ||
++					// As well, disconnected nodes are said to be in a document
++					// fragment in IE 9
++					elem.document && elem.document.nodeType !== 11 ) {
++				return ret;
++			}
++		} catch(e) {}
++	}
++
++	return Sizzle( expr, document, null, [elem] ).length > 0;
++};
++
++Sizzle.contains = function( context, elem ) {
++	// Set document vars if needed
++	if ( ( context.ownerDocument || context ) !== document ) {
++		setDocument( context );
++	}
++	return contains( context, elem );
++};
++
++Sizzle.attr = function( elem, name ) {
++	var val;
++
++	// Set document vars if needed
++	if ( ( elem.ownerDocument || elem ) !== document ) {
++		setDocument( elem );
++	}
++
++	if ( !documentIsXML ) {
++		name = name.toLowerCase();
++	}
++	if ( (val = Expr.attrHandle[ name ]) ) {
++		return val( elem );
++	}
++	if ( documentIsXML || support.attributes ) {
++		return elem.getAttribute( name );
++	}
++	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
++		name :
++		val && val.specified ? val.value : null;
++};
++
++Sizzle.error = function( msg ) {
++	throw new Error( "Syntax error, unrecognized expression: " + msg );
++};
++
++// Document sorting and removing duplicates
++Sizzle.uniqueSort = function( results ) {
++	var elem,
++		duplicates = [],
++		i = 1,
++		j = 0;
++
++	// Unless we *know* we can detect duplicates, assume their presence
++	hasDuplicate = !support.detectDuplicates;
++	results.sort( sortOrder );
++
++	if ( hasDuplicate ) {
++		for ( ; (elem = results[i]); i++ ) {
++			if ( elem === results[ i - 1 ] ) {
++				j = duplicates.push( i );
++			}
++		}
++		while ( j-- ) {
++			results.splice( duplicates[ j ], 1 );
++		}
++	}
++
++	return results;
++};
++
++function siblingCheck( a, b ) {
++	var cur = b && a,
++		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
++
++	// Use IE sourceIndex if available on both nodes
++	if ( diff ) {
++		return diff;
++	}
++
++	// Check if b follows a
++	if ( cur ) {
++		while ( (cur = cur.nextSibling) ) {
++			if ( cur === b ) {
++				return -1;
++			}
++		}
++	}
++
++	return a ? 1 : -1;
++}
++
++// Returns a function to use in pseudos for input types
++function createInputPseudo( type ) {
++	return function( elem ) {
++		var name = elem.nodeName.toLowerCase();
++		return name === "input" && elem.type === type;
++	};
++}
++
++// Returns a function to use in pseudos for buttons
++function createButtonPseudo( type ) {
++	return function( elem ) {
++		var name = elem.nodeName.toLowerCase();
++		return (name === "input" || name === "button") && elem.type === type;
++	};
++}
++
++// Returns a function to use in pseudos for positionals
++function createPositionalPseudo( fn ) {
++	return markFunction(function( argument ) {
++		argument = +argument;
++		return markFunction(function( seed, matches ) {
++			var j,
++				matchIndexes = fn( [], seed.length, argument ),
++				i = matchIndexes.length;
++
++			// Match elements found at the specified indexes
++			while ( i-- ) {
++				if ( seed[ (j = matchIndexes[i]) ] ) {
++					seed[j] = !(matches[j] = seed[j]);
++				}
++			}
++		});
++	});
++}
++
++/**
++ * Utility function for retrieving the text value of an array of DOM nodes
++ * @param {Array|Element} elem
++ */
++getText = Sizzle.getText = function( elem ) {
++	var node,
++		ret = "",
++		i = 0,
++		nodeType = elem.nodeType;
++
++	if ( !nodeType ) {
++		// If no nodeType, this is expected to be an array
++		for ( ; (node = elem[i]); i++ ) {
++			// Do not traverse comment nodes
++			ret += getText( node );
++		}
++	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
++		// Use textContent for elements
++		// innerText usage removed for consistency of new lines (see #11153)
++		if ( typeof elem.textContent === "string" ) {
++			return elem.textContent;
++		} else {
++			// Traverse its children
++			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
++				ret += getText( elem );
++			}
++		}
++	} else if ( nodeType === 3 || nodeType === 4 ) {
++		return elem.nodeValue;
++	}
++	// Do not include comment or processing instruction nodes
++
++	return ret;
++};
++
++Expr = Sizzle.selectors = {
++
++	// Can be adjusted by the user
++	cacheLength: 50,
++
++	createPseudo: markFunction,
++
++	match: matchExpr,
++
++	find: {},
++
++	relative: {
++		">": { dir: "parentNode", first: true },
++		" ": { dir: "parentNode" },
++		"+": { dir: "previousSibling", first: true },
++		"~": { dir: "previousSibling" }
++	},
++
++	preFilter: {
++		"ATTR": function( match ) {
++			match[1] = match[1].replace( runescape, funescape );
++
++			// Move the given value to match[3] whether quoted or unquoted
++			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
++
++			if ( match[2] === "~=" ) {
++				match[3] = " " + match[3] + " ";
++			}
++
++			return match.slice( 0, 4 );
++		},
++
++		"CHILD": function( match ) {
++			/* matches from matchExpr["CHILD"]
++				1 type (only|nth|...)
++				2 what (child|of-type)
++				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
++				4 xn-component of xn+y argument ([+-]?\d*n|)
++				5 sign of xn-component
++				6 x of xn-component
++				7 sign of y-component
++				8 y of y-component
++			*/
++			match[1] = match[1].toLowerCase();
++
++			if ( match[1].slice( 0, 3 ) === "nth" ) {
++				// nth-* requires argument
++				if ( !match[3] ) {
++					Sizzle.error( match[0] );
++				}
++
++				// numeric x and y parameters for Expr.filter.CHILD
++				// remember that false/true cast respectively to 0/1
++				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
++				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
++
++			// other types prohibit arguments
++			} else if ( match[3] ) {
++				Sizzle.error( match[0] );
++			}
++
++			return match;
++		},
++
++		"PSEUDO": function( match ) {
++			var excess,
++				unquoted = !match[5] && match[2];
++
++			if ( matchExpr["CHILD"].test( match[0] ) ) {
++				return null;
++			}
++
++			// Accept quoted arguments as-is
++			if ( match[4] ) {
++				match[2] = match[4];
++
++			// Strip excess characters from unquoted arguments
++			} else if ( unquoted && rpseudo.test( unquoted ) &&
++				// Get excess from tokenize (recursively)
++				(excess = tokenize( unquoted, true )) &&
++				// advance to the next closing parenthesis
++				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
++
++				// excess is a negative index
++				match[0] = match[0].slice( 0, excess );
++				match[2] = unquoted.slice( 0, excess );
++			}
++
++			// Return only captures needed by the pseudo filter method (type and argument)
++			return match.slice( 0, 3 );
++		}
++	},
++
++	filter: {
++
++		"TAG": function( nodeName ) {
++			if ( nodeName === "*" ) {
++				return function() { return true; };
++			}
++
++			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
++			return function( elem ) {
++				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
++			};
++		},
++
++		"CLASS": function( className ) {
++			var pattern = classCache[ className + " " ];
++
++			return pattern ||
++				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
++				classCache( className, function( elem ) {
++					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
++				});
++		},
++
++		"ATTR": function( name, operator, check ) {
++			return function( elem ) {
++				var result = Sizzle.attr( elem, name );
++
++				if ( result == null ) {
++					return operator === "!=";
++				}
++				if ( !operator ) {
++					return true;
++				}
++
++				result += "";
++
++				return operator === "=" ? result === check :
++					operator === "!=" ? result !== check :
++					operator === "^=" ? check && result.indexOf( check ) === 0 :
++					operator === "*=" ? check && result.indexOf( check ) > -1 :
++					operator === "$=" ? check && result.slice( -check.length ) === check :
++					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
++					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
++					false;
++			};
++		},
++
++		"CHILD": function( type, what, argument, first, last ) {
++			var simple = type.slice( 0, 3 ) !== "nth",
++				forward = type.slice( -4 ) !== "last",
++				ofType = what === "of-type";
++
++			return first === 1 && last === 0 ?
++
++				// Shortcut for :nth-*(n)
++				function( elem ) {
++					return !!elem.parentNode;
++				} :
++
++				function( elem, context, xml ) {
++					var cache, outerCache, node, diff, nodeIndex, start,
++						dir = simple !== forward ? "nextSibling" : "previousSibling",
++						parent = elem.parentNode,
++						name = ofType && elem.nodeName.toLowerCase(),
++						useCache = !xml && !ofType;
++
++					if ( parent ) {
++
++						// :(first|last|only)-(child|of-type)
++						if ( simple ) {
++							while ( dir ) {
++								node = elem;
++								while ( (node = node[ dir ]) ) {
++									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
++										return false;
++									}
++								}
++								// Reverse direction for :only-* (if we haven't yet done so)
++								start = dir = type === "only" && !start && "nextSibling";
++							}
++							return true;
++						}
++
++						start = [ forward ? parent.firstChild : parent.lastChild ];
++
++						// non-xml :nth-child(...) stores cache data on `parent`
++						if ( forward && useCache ) {
++							// Seek `elem` from a previously-cached index
++							outerCache = parent[ expando ] || (parent[ expando ] = {});
++							cache = outerCache[ type ] || [];
++							nodeIndex = cache[0] === dirruns && cache[1];
++							diff = cache[0] === dirruns && cache[2];
++							node = nodeIndex && parent.childNodes[ nodeIndex ];
++
++							while ( (node = ++nodeIndex && node && node[ dir ] ||
++
++								// Fallback to seeking `elem` from the start
++								(diff = nodeIndex = 0) || start.pop()) ) {
++
++								// When found, cache indexes on `parent` and break
++								if ( node.nodeType === 1 && ++diff && node === elem ) {
++									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
++									break;
++								}
++							}
++
++						// Use previously-cached element index if available
++						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
++							diff = cache[1];
++
++						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
++						} else {
++							// Use the same loop as above to seek `elem` from the start
++							while ( (node = ++nodeIndex && node && node[ dir ] ||
++								(diff = nodeIndex = 0) || start.pop()) ) {
++
++								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
++									// Cache the index of each encountered element
++									if ( useCache ) {
++										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
++									}
++
++									if ( node === elem ) {
++										break;
++									}
++								}
++							}
++						}
++
++						// Incorporate the offset, then check against cycle size
++						diff -= last;
++						return diff === first || ( diff % first === 0 && diff / first >= 0 );
++					}
++				};
++		},
++
++		"PSEUDO": function( pseudo, argument ) {
++			// pseudo-class names are case-insensitive
++			// http://www.w3.org/TR/selectors/#pseudo-classes
++			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
++			// Remember that setFilters inherits from pseudos
++			var args,
++				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
++					Sizzle.error( "unsupported pseudo: " + pseudo );
++
++			// The user may use createPseudo to indicate that
++			// arguments are needed to create the filter function
++			// just as Sizzle does
++			if ( fn[ expando ] ) {
++				return fn( argument );
++			}
++
++			// But maintain support for old signatures
++			if ( fn.length > 1 ) {
++				args = [ pseudo, pseudo, "", argument ];
++				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
++					markFunction(function( seed, matches ) {
++						var idx,
++							matched = fn( seed, argument ),
++							i = matched.length;
++						while ( i-- ) {
++							idx = indexOf.call( seed, matched[i] );
++							seed[ idx ] = !( matches[ idx ] = matched[i] );
++						}
++					}) :
++					function( elem ) {
++						return fn( elem, 0, args );
++					};
++			}
++
++			return fn;
++		}
++	},
++
++	pseudos: {
++		// Potentially complex pseudos
++		"not": markFunction(function( selector ) {
++			// Trim the selector passed to compile
++			// to avoid treating leading and trailing
++			// spaces as combinators
++			var input = [],
++				results = [],
++				matcher = compile( selector.replace( rtrim, "$1" ) );
++
++			return matcher[ expando ] ?
++				markFunction(function( seed, matches, context, xml ) {
++					var elem,
++						unmatched = matcher( seed, null, xml, [] ),
++						i = seed.length;
++
++					// Match elements unmatched by `matcher`
++					while ( i-- ) {
++						if ( (elem = unmatched[i]) ) {
++							seed[i] = !(matches[i] = elem);
++						}
++					}
++				}) :
++				function( elem, context, xml ) {
++					input[0] = elem;
++					matcher( input, null, xml, results );
++					return !results.pop();
++				};
++		}),
++
++		"has": markFunction(function( selector ) {
++			return function( elem ) {
++				return Sizzle( selector, elem ).length > 0;
++			};
++		}),
++
++		"contains": markFunction(function( text ) {
++			return function( elem ) {
++				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
++			};
++		}),
++
++		// "Whether an element is represented by a :lang() selector
++		// is based solely on the element's language value
++		// being equal to the identifier C,
++		// or beginning with the identifier C immediately followed by "-".
++		// The matching of C against the element's language value is performed case-insensitively.
++		// The identifier C does not have to be a valid language name."
++		// http://www.w3.org/TR/selectors/#lang-pseudo
++		"lang": markFunction( function( lang ) {
++			// lang value must be a valid identifider
++			if ( !ridentifier.test(lang || "") ) {
++				Sizzle.error( "unsupported lang: " + lang );
++			}
++			lang = lang.replace( runescape, funescape ).toLowerCase();
++			return function( elem ) {
++				var elemLang;
++				do {
++					if ( (elemLang = documentIsXML ?
++						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
++						elem.lang) ) {
++
++						elemLang = elemLang.toLowerCase();
++						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
++					}
++				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
++				return false;
++			};
++		}),
++
++		// Miscellaneous
++		"target": function( elem ) {
++			var hash = window.location && window.location.hash;
++			return hash && hash.slice( 1 ) === elem.id;
++		},
++
++		"root": function( elem ) {
++			return elem === docElem;
++		},
++
++		"focus": function( elem ) {
++			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
++		},
++
++		// Boolean properties
++		"enabled": function( elem ) {
++			return elem.disabled === false;
++		},
++
++		"disabled": function( elem ) {
++			return elem.disabled === true;
++		},
++
++		"checked": function( elem ) {
++			// In CSS3, :checked should return both checked and selected elements
++			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
++			var nodeName = elem.nodeName.toLowerCase();
++			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
++		},
++
++		"selected": function( elem ) {
++			// Accessing this property makes selected-by-default
++			// options in Safari work properly
++			if ( elem.parentNode ) {
++				elem.parentNode.selectedIndex;
++			}
++
++			return elem.selected === true;
++		},
++
++		// Contents
++		"empty": function( elem ) {
++			// http://www.w3.org/TR/selectors/#empty-pseudo
++			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
++			//   not comment, processing instructions, or others
++			// Thanks to Diego Perini for the nodeName shortcut
++			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
++			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
++				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
++					return false;
++				}
++			}
++			return true;
++		},
++
++		"parent": function( elem ) {
++			return !Expr.pseudos["empty"]( elem );
++		},
++
++		// Element/input types
++		"header": function( elem ) {
++			return rheader.test( elem.nodeName );
++		},
++
++		"input": function( elem ) {
++			return rinputs.test( elem.nodeName );
++		},
++
++		"button": function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return name === "input" && elem.type === "button" || name === "button";
++		},
++
++		"text": function( elem ) {
++			var attr;
++			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
++			// use getAttribute instead to test this case
++			return elem.nodeName.toLowerCase() === "input" &&
++				elem.type === "text" &&
++				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
++		},
++
++		// Position-in-collection
++		"first": createPositionalPseudo(function() {
++			return [ 0 ];
++		}),
++
++		"last": createPositionalPseudo(function( matchIndexes, length ) {
++			return [ length - 1 ];
++		}),
++
++		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			return [ argument < 0 ? argument + length : argument ];
++		}),
++
++		"even": createPositionalPseudo(function( matchIndexes, length ) {
++			var i = 0;
++			for ( ; i < length; i += 2 ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"odd": createPositionalPseudo(function( matchIndexes, length ) {
++			var i = 1;
++			for ( ; i < length; i += 2 ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			var i = argument < 0 ? argument + length : argument;
++			for ( ; --i >= 0; ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			var i = argument < 0 ? argument + length : argument;
++			for ( ; ++i < length; ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		})
++	}
++};
++
++// Add button/input type pseudos
++for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
++	Expr.pseudos[ i ] = createInputPseudo( i );
++}
++for ( i in { submit: true, reset: true } ) {
++	Expr.pseudos[ i ] = createButtonPseudo( i );
++}
++
++function tokenize( selector, parseOnly ) {
++	var matched, match, tokens, type,
++		soFar, groups, preFilters,
++		cached = tokenCache[ selector + " " ];
++
++	if ( cached ) {
++		return parseOnly ? 0 : cached.slice( 0 );
++	}
++
++	soFar = selector;
++	groups = [];
++	preFilters = Expr.preFilter;
++
++	while ( soFar ) {
++
++		// Comma and first run
++		if ( !matched || (match = rcomma.exec( soFar )) ) {
++			if ( match ) {
++				// Don't consume trailing commas as valid
++				soFar = soFar.slice( match[0].length ) || soFar;
++			}
++			groups.push( tokens = [] );
++		}
++
++		matched = false;
++
++		// Combinators
++		if ( (match = rcombinators.exec( soFar )) ) {
++			matched = match.shift();
++			tokens.push( {
++				value: matched,
++				// Cast descendant combinators to space
++				type: match[0].replace( rtrim, " " )
++			} );
++			soFar = soFar.slice( matched.length );
++		}
++
++		// Filters
++		for ( type in Expr.filter ) {
++			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
++				(match = preFilters[ type ]( match ))) ) {
++				matched = match.shift();
++				tokens.push( {
++					value: matched,
++					type: type,
++					matches: match
++				} );
++				soFar = soFar.slice( matched.length );
++			}
++		}
++
++		if ( !matched ) {
++			break;
++		}
++	}
++
++	// Return the length of the invalid excess
++	// if we're just parsing
++	// Otherwise, throw an error or return tokens
++	return parseOnly ?
++		soFar.length :
++		soFar ?
++			Sizzle.error( selector ) :
++			// Cache the tokens
++			tokenCache( selector, groups ).slice( 0 );
++}
++
++function toSelector( tokens ) {
++	var i = 0,
++		len = tokens.length,
++		selector = "";
++	for ( ; i < len; i++ ) {
++		selector += tokens[i].value;
++	}
++	return selector;
++}
++
++function addCombinator( matcher, combinator, base ) {
++	var dir = combinator.dir,
++		checkNonElements = base && dir === "parentNode",
++		doneName = done++;
++
++	return combinator.first ?
++		// Check against closest ancestor/preceding element
++		function( elem, context, xml ) {
++			while ( (elem = elem[ dir ]) ) {
++				if ( elem.nodeType === 1 || checkNonElements ) {
++					return matcher( elem, context, xml );
++				}
++			}
++		} :
++
++		// Check against all ancestor/preceding elements
++		function( elem, context, xml ) {
++			var data, cache, outerCache,
++				dirkey = dirruns + " " + doneName;
++
++			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
++			if ( xml ) {
++				while ( (elem = elem[ dir ]) ) {
++					if ( elem.nodeType === 1 || checkNonElements ) {
++						if ( matcher( elem, context, xml ) ) {
++							return true;
++						}
++					}
++				}
++			} else {
++				while ( (elem = elem[ dir ]) ) {
++					if ( elem.nodeType === 1 || checkNonElements ) {
++						outerCache = elem[ expando ] || (elem[ expando ] = {});
++						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
++							if ( (data = cache[1]) === true || data === cachedruns ) {
++								return data === true;
++							}
++						} else {
++							cache = outerCache[ dir ] = [ dirkey ];
++							cache[1] = matcher( elem, context, xml ) || cachedruns;
++							if ( cache[1] === true ) {
++								return true;
++							}
++						}
++					}
++				}
++			}
++		};
++}
++
++function elementMatcher( matchers ) {
++	return matchers.length > 1 ?
++		function( elem, context, xml ) {
++			var i = matchers.length;
++			while ( i-- ) {
++				if ( !matchers[i]( elem, context, xml ) ) {
++					return false;
++				}
++			}
++			return true;
++		} :
++		matchers[0];
++}
++
++function condense( unmatched, map, filter, context, xml ) {
++	var elem,
++		newUnmatched = [],
++		i = 0,
++		len = unmatched.length,
++		mapped = map != null;
++
++	for ( ; i < len; i++ ) {
++		if ( (elem = unmatched[i]) ) {
++			if ( !filter || filter( elem, context, xml ) ) {
++				newUnmatched.push( elem );
++				if ( mapped ) {
++					map.push( i );
++				}
++			}
++		}
++	}
++
++	return newUnmatched;
++}
++
++function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
++	if ( postFilter && !postFilter[ expando ] ) {
++		postFilter = setMatcher( postFilter );
++	}
++	if ( postFinder && !postFinder[ expando ] ) {
++		postFinder = setMatcher( postFinder, postSelector );
++	}
++	return markFunction(function( seed, results, context, xml ) {
++		var temp, i, elem,
++			preMap = [],
++			postMap = [],
++			preexisting = results.length,
++
++			// Get initial elements from seed or context
++			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
++
++			// Prefilter to get matcher input, preserving a map for seed-results synchronization
++			matcherIn = preFilter && ( seed || !selector ) ?
++				condense( elems, preMap, preFilter, context, xml ) :
++				elems,
++
++			matcherOut = matcher ?
++				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
++				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
++
++					// ...intermediate processing is necessary
++					[] :
++
++					// ...otherwise use results directly
++					results :
++				matcherIn;
++
++		// Find primary matches
++		if ( matcher ) {
++			matcher( matcherIn, matcherOut, context, xml );
++		}
++
++		// Apply postFilter
++		if ( postFilter ) {
++			temp = condense( matcherOut, postMap );
++			postFilter( temp, [], context, xml );
++
++			// Un-match failing elements by moving them back to matcherIn
++			i = temp.length;
++			while ( i-- ) {
++				if ( (elem = temp[i]) ) {
++					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
++				}
++			}
++		}
++
++		if ( seed ) {
++			if ( postFinder || preFilter ) {
++				if ( postFinder ) {
++					// Get the final matcherOut by condensing this intermediate into postFinder contexts
++					temp = [];
++					i = matcherOut.length;
++					while ( i-- ) {
++						if ( (elem = matcherOut[i]) ) {
++							// Restore matcherIn since elem is not yet a final match
++							temp.push( (matcherIn[i] = elem) );
++						}
++					}
++					postFinder( null, (matcherOut = []), temp, xml );
++				}
++
++				// Move matched elements from seed to results to keep them synchronized
++				i = matcherOut.length;
++				while ( i-- ) {
++					if ( (elem = matcherOut[i]) &&
++						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
++
++						seed[temp] = !(results[temp] = elem);
++					}
++				}
++			}
++
++		// Add elements to results, through postFinder if defined
++		} else {
++			matcherOut = condense(
++				matcherOut === results ?
++					matcherOut.splice( preexisting, matcherOut.length ) :
++					matcherOut
++			);
++			if ( postFinder ) {
++				postFinder( null, results, matcherOut, xml );
++			} else {
++				push.apply( results, matcherOut );
++			}
++		}
++	});
++}
++
++function matcherFromTokens( tokens ) {
++	var checkContext, matcher, j,
++		len = tokens.length,
++		leadingRelative = Expr.relative[ tokens[0].type ],
++		implicitRelative = leadingRelative || Expr.relative[" "],
++		i = leadingRelative ? 1 : 0,
++
++		// The foundational matcher ensures that elements are reachable from top-level context(s)
++		matchContext = addCombinator( function( elem ) {
++			return elem === checkContext;
++		}, implicitRelative, true ),
++		matchAnyContext = addCombinator( function( elem ) {
++			return indexOf.call( checkContext, elem ) > -1;
++		}, implicitRelative, true ),
++		matchers = [ function( elem, context, xml ) {
++			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
++				(checkContext = context).nodeType ?
++					matchContext( elem, context, xml ) :
++					matchAnyContext( elem, context, xml ) );
++		} ];
++
++	for ( ; i < len; i++ ) {
++		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
++			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
++		} else {
++			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
++
++			// Return special upon seeing a positional matcher
++			if ( matcher[ expando ] ) {
++				// Find the next relative operator (if any) for proper handling
++				j = ++i;
++				for ( ; j < len; j++ ) {
++					if ( Expr.relative[ tokens[j].type ] ) {
++						break;
++					}
++				}
++				return setMatcher(
++					i > 1 && elementMatcher( matchers ),
++					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
++					matcher,
++					i < j && matcherFromTokens( tokens.slice( i, j ) ),
++					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
++					j < len && toSelector( tokens )
++				);
++			}
++			matchers.push( matcher );
++		}
++	}
++
++	return elementMatcher( matchers );
++}
++
++function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
++	// A counter to specify which element is currently being matched
++	var matcherCachedRuns = 0,
++		bySet = setMatchers.length > 0,
++		byElement = elementMatchers.length > 0,
++		superMatcher = function( seed, context, xml, results, expandContext ) {
++			var elem, j, matcher,
++				setMatched = [],
++				matchedCount = 0,
++				i = "0",
++				unmatched = seed && [],
++				outermost = expandContext != null,
++				contextBackup = outermostContext,
++				// We must always have either seed elements or context
++				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
++				// Use integer dirruns iff this is the outermost matcher
++				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
++
++			if ( outermost ) {
++				outermostContext = context !== document && context;
++				cachedruns = matcherCachedRuns;
++			}
++
++			// Add elements passing elementMatchers directly to results
++			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
++			for ( ; (elem = elems[i]) != null; i++ ) {
++				if ( byElement && elem ) {
++					j = 0;
++					while ( (matcher = elementMatchers[j++]) ) {
++						if ( matcher( elem, context, xml ) ) {
++							results.push( elem );
++							break;
++						}
++					}
++					if ( outermost ) {
++						dirruns = dirrunsUnique;
++						cachedruns = ++matcherCachedRuns;
++					}
++				}
++
++				// Track unmatched elements for set filters
++				if ( bySet ) {
++					// They will have gone through all possible matchers
++					if ( (elem = !matcher && elem) ) {
++						matchedCount--;
++					}
++
++					// Lengthen the array for every element, matched or not
++					if ( seed ) {
++						unmatched.push( elem );
++					}
++				}
++			}
++
++			// Apply set filters to unmatched elements
++			matchedCount += i;
++			if ( bySet && i !== matchedCount ) {
++				j = 0;
++				while ( (matcher = setMatchers[j++]) ) {
++					matcher( unmatched, setMatched, context, xml );
++				}
++
++				if ( seed ) {
++					// Reintegrate element matches to eliminate the need for sorting
++					if ( matchedCount > 0 ) {
++						while ( i-- ) {
++							if ( !(unmatched[i] || setMatched[i]) ) {
++								setMatched[i] = pop.call( results );
++							}
++						}
++					}
++
++					// Discard index placeholder values to get only actual matches
++					setMatched = condense( setMatched );
++				}
++
++				// Add matches to results
++				push.apply( results, setMatched );
++
++				// Seedless set matches succeeding multiple successful matchers stipulate sorting
++				if ( outermost && !seed && setMatched.length > 0 &&
++					( matchedCount + setMatchers.length ) > 1 ) {
++
++					Sizzle.uniqueSort( results );
++				}
++			}
++
++			// Override manipulation of globals by nested matchers
++			if ( outermost ) {
++				dirruns = dirrunsUnique;
++				outermostContext = contextBackup;
++			}
++
++			return unmatched;
++		};
++
++	return bySet ?
++		markFunction( superMatcher ) :
++		superMatcher;
++}
++
++compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
++	var i,
++		setMatchers = [],
++		elementMatchers = [],
++		cached = compilerCache[ selector + " " ];
++
++	if ( !cached ) {
++		// Generate a function of recursive functions that can be used to check each element
++		if ( !group ) {
++			group = tokenize( selector );
++		}
++		i = group.length;
++		while ( i-- ) {
++			cached = matcherFromTokens( group[i] );
++			if ( cached[ expando ] ) {
++				setMatchers.push( cached );
++			} else {
++				elementMatchers.push( cached );
++			}
++		}
++
++		// Cache the compiled function
++		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
++	}
++	return cached;
++};
++
++function multipleContexts( selector, contexts, results ) {
++	var i = 0,
++		len = contexts.length;
++	for ( ; i < len; i++ ) {
++		Sizzle( selector, contexts[i], results );
++	}
++	return results;
++}
++
++function select( selector, context, results, seed ) {
++	var i, tokens, token, type, find,
++		match = tokenize( selector );
++
++	if ( !seed ) {
++		// Try to minimize operations if there is only one group
++		if ( match.length === 1 ) {
++
++			// Take a shortcut and set the context if the root selector is an ID
++			tokens = match[0] = match[0].slice( 0 );
++			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
++					context.nodeType === 9 && !documentIsXML &&
++					Expr.relative[ tokens[1].type ] ) {
++
++				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
++				if ( !context ) {
++					return results;
++				}
++
++				selector = selector.slice( tokens.shift().value.length );
++			}
++
++			// Fetch a seed set for right-to-left matching
++			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
++			while ( i-- ) {
++				token = tokens[i];
++
++				// Abort if we hit a combinator
++				if ( Expr.relative[ (type = token.type) ] ) {
++					break;
++				}
++				if ( (find = Expr.find[ type ]) ) {
++					// Search, expanding context for leading sibling combinators
++					if ( (seed = find(
++						token.matches[0].replace( runescape, funescape ),
++						rsibling.test( tokens[0].type ) && context.parentNode || context
++					)) ) {
++
++						// If seed is empty or no tokens remain, we can return early
++						tokens.splice( i, 1 );
++						selector = seed.length && toSelector( tokens );
++						if ( !selector ) {
++							push.apply( results, slice.call( seed, 0 ) );
++							return results;
++						}
++
++						break;
++					}
++				}
++			}
++		}
++	}
++
++	// Compile and execute a filtering function
++	// Provide `match` to avoid retokenization if we modified the selector above
++	compile( selector, match )(
++		seed,
++		context,
++		documentIsXML,
++		results,
++		rsibling.test( selector )
++	);
++	return results;
++}
++
++// Deprecated
++Expr.pseudos["nth"] = Expr.pseudos["eq"];
++
++// Easy API for creating new setFilters
++function setFilters() {}
++Expr.filters = setFilters.prototype = Expr.pseudos;
++Expr.setFilters = new setFilters();
++
++// Initialize with the default document
++setDocument();
++
++// Override sizzle attribute retrieval
++Sizzle.attr = jQuery.attr;
++jQuery.find = Sizzle;
++jQuery.expr = Sizzle.selectors;
++jQuery.expr[":"] = jQuery.expr.pseudos;
++jQuery.unique = Sizzle.uniqueSort;
++jQuery.text = Sizzle.getText;
++jQuery.isXMLDoc = Sizzle.isXML;
++jQuery.contains = Sizzle.contains;
++
++
++})( window );
++var runtil = /Until$/,
++	rparentsprev = /^(?:parents|prev(?:Until|All))/,
++	isSimple = /^.[^:#\[\.,]*$/,
++	rneedsContext = jQuery.expr.match.needsContext,
++	// methods guaranteed to produce a unique set when starting from a unique set
++	guaranteedUnique = {
++		children: true,
++		contents: true,
++		next: true,
++		prev: true
++	};
++
++jQuery.fn.extend({
++	find: function( selector ) {
++		var i, ret, self,
++			len = this.length;
++
++		if ( typeof selector !== "string" ) {
++			self = this;
++			return this.pushStack( jQuery( selector ).filter(function() {
++				for ( i = 0; i < len; i++ ) {
++					if ( jQuery.contains( self[ i ], this ) ) {
++						return true;
++					}
++				}
++			}) );
++		}
++
++		ret = [];
++		for ( i = 0; i < len; i++ ) {
++			jQuery.find( selector, this[ i ], ret );
++		}
++
++		// Needed because $( selector, context ) becomes $( context ).find( selector )
++		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
++		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
++		return ret;
++	},
++
++	has: function( target ) {
++		var i,
++			targets = jQuery( target, this ),
++			len = targets.length;
++
++		return this.filter(function() {
++			for ( i = 0; i < len; i++ ) {
++				if ( jQuery.contains( this, targets[i] ) ) {
++					return true;
++				}
++			}
++		});
++	},
++
++	not: function( selector ) {
++		return this.pushStack( winnow(this, selector, false) );
++	},
++
++	filter: function( selector ) {
++		return this.pushStack( winnow(this, selector, true) );
++	},
++
++	is: function( selector ) {
++		return !!selector && (
++			typeof selector === "string" ?
++				// If this is a positional/relative selector, check membership in the returned set
++				// so $("p:first").is("p:last") won't return true for a doc with two "p".
++				rneedsContext.test( selector ) ?
++					jQuery( selector, this.context ).index( this[0] ) >= 0 :
++					jQuery.filter( selector, this ).length > 0 :
++				this.filter( selector ).length > 0 );
++	},
++
++	closest: function( selectors, context ) {
++		var cur,
++			i = 0,
++			l = this.length,
++			ret = [],
++			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
++				jQuery( selectors, context || this.context ) :
++				0;
++
++		for ( ; i < l; i++ ) {
++			cur = this[i];
++
++			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
++				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
++					ret.push( cur );
++					break;
++				}
++				cur = cur.parentNode;
++			}
++		}
++
++		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
++	},
++
++	// Determine the position of an element within
++	// the matched set of elements
++	index: function( elem ) {
++
++		// No argument, return index in parent
++		if ( !elem ) {
++			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
++		}
++
++		// index in selector
++		if ( typeof elem === "string" ) {
++			return jQuery.inArray( this[0], jQuery( elem ) );
++		}
++
++		// Locate the position of the desired element
++		return jQuery.inArray(
++			// If it receives a jQuery object, the first element is used
++			elem.jquery ? elem[0] : elem, this );
++	},
++
++	add: function( selector, context ) {
++		var set = typeof selector === "string" ?
++				jQuery( selector, context ) :
++				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
++			all = jQuery.merge( this.get(), set );
++
++		return this.pushStack( jQuery.unique(all) );
++	},
++
++	addBack: function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter(selector)
++		);
++	}
++});
++
++jQuery.fn.andSelf = jQuery.fn.addBack;
++
++function sibling( cur, dir ) {
++	do {
++		cur = cur[ dir ];
++	} while ( cur && cur.nodeType !== 1 );
++
++	return cur;
++}
++
++jQuery.each({
++	parent: function( elem ) {
++		var parent = elem.parentNode;
++		return parent && parent.nodeType !== 11 ? parent : null;
++	},
++	parents: function( elem ) {
++		return jQuery.dir( elem, "parentNode" );
++	},
++	parentsUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "parentNode", until );
++	},
++	next: function( elem ) {
++		return sibling( elem, "nextSibling" );
++	},
++	prev: function( elem ) {
++		return sibling( elem, "previousSibling" );
++	},
++	nextAll: function( elem ) {
++		return jQuery.dir( elem, "nextSibling" );
++	},
++	prevAll: function( elem ) {
++		return jQuery.dir( elem, "previousSibling" );
++	},
++	nextUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "nextSibling", until );
++	},
++	prevUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "previousSibling", until );
++	},
++	siblings: function( elem ) {
++		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
++	},
++	children: function( elem ) {
++		return jQuery.sibling( elem.firstChild );
++	},
++	contents: function( elem ) {
++		return jQuery.nodeName( elem, "iframe" ) ?
++			elem.contentDocument || elem.contentWindow.document :
++			jQuery.merge( [], elem.childNodes );
++	}
++}, function( name, fn ) {
++	jQuery.fn[ name ] = function( until, selector ) {
++		var ret = jQuery.map( this, fn, until );
++
++		if ( !runtil.test( name ) ) {
++			selector = until;
++		}
++
++		if ( selector && typeof selector === "string" ) {
++			ret = jQuery.filter( selector, ret );
++		}
++
++		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
++
++		if ( this.length > 1 && rparentsprev.test( name ) ) {
++			ret = ret.reverse();
++		}
++
++		return this.pushStack( ret );
++	};
++});
++
++jQuery.extend({
++	filter: function( expr, elems, not ) {
++		if ( not ) {
++			expr = ":not(" + expr + ")";
++		}
++
++		return elems.length === 1 ?
++			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
++			jQuery.find.matches(expr, elems);
++	},
++
++	dir: function( elem, dir, until ) {
++		var matched = [],
++			cur = elem[ dir ];
++
++		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
++			if ( cur.nodeType === 1 ) {
++				matched.push( cur );
++			}
++			cur = cur[dir];
++		}
++		return matched;
++	},
++
++	sibling: function( n, elem ) {
++		var r = [];
++
++		for ( ; n; n = n.nextSibling ) {
++			if ( n.nodeType === 1 && n !== elem ) {
++				r.push( n );
++			}
++		}
++
++		return r;
++	}
++});
++
++// Implement the identical functionality for filter and not
++function winnow( elements, qualifier, keep ) {
++
++	// Can't pass null or undefined to indexOf in Firefox 4
++	// Set to 0 to skip string check
++	qualifier = qualifier || 0;
++
++	if ( jQuery.isFunction( qualifier ) ) {
++		return jQuery.grep(elements, function( elem, i ) {
++			var retVal = !!qualifier.call( elem, i, elem );
++			return retVal === keep;
++		});
++
++	} else if ( qualifier.nodeType ) {
++		return jQuery.grep(elements, function( elem ) {
++			return ( elem === qualifier ) === keep;
++		});
++
++	} else if ( typeof qualifier === "string" ) {
++		var filtered = jQuery.grep(elements, function( elem ) {
++			return elem.nodeType === 1;
++		});
++
++		if ( isSimple.test( qualifier ) ) {
++			return jQuery.filter(qualifier, filtered, !keep);
++		} else {
++			qualifier = jQuery.filter( qualifier, filtered );
++		}
++	}
++
++	return jQuery.grep(elements, function( elem ) {
++		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
++	});
++}
++function createSafeFragment( document ) {
++	var list = nodeNames.split( "|" ),
++		safeFrag = document.createDocumentFragment();
++
++	if ( safeFrag.createElement ) {
++		while ( list.length ) {
++			safeFrag.createElement(
++				list.pop()
++			);
++		}
++	}
++	return safeFrag;
++}
++
++var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
++		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
++	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
++	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
++	rleadingWhitespace = /^\s+/,
++	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
++	rtagName = /<([\w:]+)/,
++	rtbody = /<tbody/i,
++	rhtml = /<|&#?\w+;/,
++	rnoInnerhtml = /<(?:script|style|link)/i,
++	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
++	// checked="checked" or checked
++	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
++	rscriptType = /^$|\/(?:java|ecma)script/i,
++	rscriptTypeMasked = /^true\/(.*)/,
++	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
++
++	// We have to close these tags to support XHTML (#13200)
++	wrapMap = {
++		option: [ 1, "<select multiple='multiple'>", "</select>" ],
++		legend: [ 1, "<fieldset>", "</fieldset>" ],
++		area: [ 1, "<map>", "</map>" ],
++		param: [ 1, "<object>", "</object>" ],
++		thead: [ 1, "<table>", "</table>" ],
++		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
++		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
++		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
++
++		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
++		// unless wrapped in a div with non-breaking characters in front of it.
++		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
++	},
++	safeFragment = createSafeFragment( document ),
++	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
++
++wrapMap.optgroup = wrapMap.option;
++wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
++wrapMap.th = wrapMap.td;
++
++jQuery.fn.extend({
++	text: function( value ) {
++		return jQuery.access( this, function( value ) {
++			return value === undefined ?
++				jQuery.text( this ) :
++				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
++		}, null, value, arguments.length );
++	},
++
++	wrapAll: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapAll( html.call(this, i) );
++			});
++		}
++
++		if ( this[0] ) {
++			// The elements to wrap the target around
++			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
++
++			if ( this[0].parentNode ) {
++				wrap.insertBefore( this[0] );
++			}
++
++			wrap.map(function() {
++				var elem = this;
++
++				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
++					elem = elem.firstChild;
++				}
++
++				return elem;
++			}).append( this );
++		}
++
++		return this;
++	},
++
++	wrapInner: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapInner( html.call(this, i) );
++			});
++		}
++
++		return this.each(function() {
++			var self = jQuery( this ),
++				contents = self.contents();
++
++			if ( contents.length ) {
++				contents.wrapAll( html );
++
++			} else {
++				self.append( html );
++			}
++		});
++	},
++
++	wrap: function( html ) {
++		var isFunction = jQuery.isFunction( html );
++
++		return this.each(function(i) {
++			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
++		});
++	},
++
++	unwrap: function() {
++		return this.parent().each(function() {
++			if ( !jQuery.nodeName( this, "body" ) ) {
++				jQuery( this ).replaceWith( this.childNodes );
++			}
++		}).end();
++	},
++
++	append: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
++				this.appendChild( elem );
++			}
++		});
++	},
++
++	prepend: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
++				this.insertBefore( elem, this.firstChild );
++			}
++		});
++	},
++
++	before: function() {
++		return this.domManip( arguments, false, function( elem ) {
++			if ( this.parentNode ) {
++				this.parentNode.insertBefore( elem, this );
++			}
++		});
++	},
++
++	after: function() {
++		return this.domManip( arguments, false, function( elem ) {
++			if ( this.parentNode ) {
++				this.parentNode.insertBefore( elem, this.nextSibling );
++			}
++		});
++	},
++
++	// keepData is for internal use only--do not document
++	remove: function( selector, keepData ) {
++		var elem,
++			i = 0;
++
++		for ( ; (elem = this[i]) != null; i++ ) {
++			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
++				if ( !keepData && elem.nodeType === 1 ) {
++					jQuery.cleanData( getAll( elem ) );
++				}
++
++				if ( elem.parentNode ) {
++					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
++						setGlobalEval( getAll( elem, "script" ) );
++					}
++					elem.parentNode.removeChild( elem );
++				}
++			}
++		}
++
++		return this;
++	},
++
++	empty: function() {
++		var elem,
++			i = 0;
++
++		for ( ; (elem = this[i]) != null; i++ ) {
++			// Remove element nodes and prevent memory leaks
++			if ( elem.nodeType === 1 ) {
++				jQuery.cleanData( getAll( elem, false ) );
++			}
++
++			// Remove any remaining nodes
++			while ( elem.firstChild ) {
++				elem.removeChild( elem.firstChild );
++			}
++
++			// If this is a select, ensure that it displays empty (#12336)
++			// Support: IE<9
++			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
++				elem.options.length = 0;
++			}
++		}
++
++		return this;
++	},
++
++	clone: function( dataAndEvents, deepDataAndEvents ) {
++		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
++		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
++
++		return this.map( function () {
++			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
++		});
++	},
++
++	html: function( value ) {
++		return jQuery.access( this, function( value ) {
++			var elem = this[0] || {},
++				i = 0,
++				l = this.length;
++
++			if ( value === undefined ) {
++				return elem.nodeType === 1 ?
++					elem.innerHTML.replace( rinlinejQuery, "" ) :
++					undefined;
++			}
++
++			// See if we can take a shortcut and just use innerHTML
++			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
++				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
++				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
++				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
++
++				value = value.replace( rxhtmlTag, "<$1></$2>" );
++
++				try {
++					for (; i < l; i++ ) {
++						// Remove element nodes and prevent memory leaks
++						elem = this[i] || {};
++						if ( elem.nodeType === 1 ) {
++							jQuery.cleanData( getAll( elem, false ) );
++							elem.innerHTML = value;
++						}
++					}
++
++					elem = 0;
++
++				// If using innerHTML throws an exception, use the fallback method
++				} catch(e) {}
++			}
++
++			if ( elem ) {
++				this.empty().append( value );
++			}
++		}, null, value, arguments.length );
++	},
++
++	replaceWith: function( value ) {
++		var isFunc = jQuery.isFunction( value );
++
++		// Make sure that the elements are removed from the DOM before they are inserted
++		// this can help fix replacing a parent with child elements
++		if ( !isFunc && typeof value !== "string" ) {
++			value = jQuery( value ).not( this ).detach();
++		}
++
++		return this.domManip( [ value ], true, function( elem ) {
++			var next = this.nextSibling,
++				parent = this.parentNode;
++
++			if ( parent ) {
++				jQuery( this ).remove();
++				parent.insertBefore( elem, next );
++			}
++		});
++	},
++
++	detach: function( selector ) {
++		return this.remove( selector, true );
++	},
++
++	domManip: function( args, table, callback ) {
++
++		// Flatten any nested arrays
++		args = core_concat.apply( [], args );
++
++		var first, node, hasScripts,
++			scripts, doc, fragment,
++			i = 0,
++			l = this.length,
++			set = this,
++			iNoClone = l - 1,
++			value = args[0],
++			isFunction = jQuery.isFunction( value );
++
++		// We can't cloneNode fragments that contain checked, in WebKit
++		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
++			return this.each(function( index ) {
++				var self = set.eq( index );
++				if ( isFunction ) {
++					args[0] = value.call( this, index, table ? self.html() : undefined );
++				}
++				self.domManip( args, table, callback );
++			});
++		}
++
++		if ( l ) {
++			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
++			first = fragment.firstChild;
++
++			if ( fragment.childNodes.length === 1 ) {
++				fragment = first;
++			}
++
++			if ( first ) {
++				table = table && jQuery.nodeName( first, "tr" );
++				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
++				hasScripts = scripts.length;
++
++				// Use the original fragment for the last item instead of the first because it can end up
++				// being emptied incorrectly in certain situations (#8070).
++				for ( ; i < l; i++ ) {
++					node = fragment;
++
++					if ( i !== iNoClone ) {
++						node = jQuery.clone( node, true, true );
++
++						// Keep references to cloned scripts for later restoration
++						if ( hasScripts ) {
++							jQuery.merge( scripts, getAll( node, "script" ) );
++						}
++					}
++
++					callback.call(
++						table && jQuery.nodeName( this[i], "table" ) ?
++							findOrAppend( this[i], "tbody" ) :
++							this[i],
++						node,
++						i
++					);
++				}
++
++				if ( hasScripts ) {
++					doc = scripts[ scripts.length - 1 ].ownerDocument;
++
++					// Reenable scripts
++					jQuery.map( scripts, restoreScript );
++
++					// Evaluate executable scripts on first document insertion
++					for ( i = 0; i < hasScripts; i++ ) {
++						node = scripts[ i ];
++						if ( rscriptType.test( node.type || "" ) &&
++							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
++
++							if ( node.src ) {
++								// Hope ajax is available...
++								jQuery.ajax({
++									url: node.src,
++									type: "GET",
++									dataType: "script",
++									async: false,
++									global: false,
++									"throws": true
++								});
++							} else {
++								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
++							}
++						}
++					}
++				}
++
++				// Fix #11809: Avoid leaking memory
++				fragment = first = null;
++			}
++		}
++
++		return this;
++	}
++});
++
++function findOrAppend( elem, tag ) {
++	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
++}
++
++// Replace/restore the type attribute of script elements for safe DOM manipulation
++function disableScript( elem ) {
++	var attr = elem.getAttributeNode("type");
++	elem.type = ( attr && attr.specified ) + "/" + elem.type;
++	return elem;
++}
++function restoreScript( elem ) {
++	var match = rscriptTypeMasked.exec( elem.type );
++	if ( match ) {
++		elem.type = match[1];
++	} else {
++		elem.removeAttribute("type");
++	}
++	return elem;
++}
++
++// Mark scripts as having already been evaluated
++function setGlobalEval( elems, refElements ) {
++	var elem,
++		i = 0;
++	for ( ; (elem = elems[i]) != null; i++ ) {
++		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
++	}
++}
++
++function cloneCopyEvent( src, dest ) {
++
++	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
++		return;
++	}
++
++	var type, i, l,
++		oldData = jQuery._data( src ),
++		curData = jQuery._data( dest, oldData ),
++		events = oldData.events;
++
++	if ( events ) {
++		delete curData.handle;
++		curData.events = {};
++
++		for ( type in events ) {
++			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
++				jQuery.event.add( dest, type, events[ type ][ i ] );
++			}
++		}
++	}
++
++	// make the cloned public data object a copy from the original
++	if ( curData.data ) {
++		curData.data = jQuery.extend( {}, curData.data );
++	}
++}
++
++function fixCloneNodeIssues( src, dest ) {
++	var nodeName, e, data;
++
++	// We do not need to do anything for non-Elements
++	if ( dest.nodeType !== 1 ) {
++		return;
++	}
++
++	nodeName = dest.nodeName.toLowerCase();
++
++	// IE6-8 copies events bound via attachEvent when using cloneNode.
++	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
++		data = jQuery._data( dest );
++
++		for ( e in data.events ) {
++			jQuery.removeEvent( dest, e, data.handle );
++		}
++
++		// Event data gets referenced instead of copied if the expando gets copied too
++		dest.removeAttribute( jQuery.expando );
++	}
++
++	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
++	if ( nodeName === "script" && dest.text !== src.text ) {
++		disableScript( dest ).text = src.text;
++		restoreScript( dest );
++
++	// IE6-10 improperly clones children of object elements using classid.
++	// IE10 throws NoModificationAllowedError if parent is null, #12132.
++	} else if ( nodeName === "object" ) {
++		if ( dest.parentNode ) {
++			dest.outerHTML = src.outerHTML;
++		}
++
++		// This path appears unavoidable for IE9. When cloning an object
++		// element in IE9, the outerHTML strategy above is not sufficient.
++		// If the src has innerHTML and the destination does not,
++		// copy the src.innerHTML into the dest.innerHTML. #10324
++		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
++			dest.innerHTML = src.innerHTML;
++		}
++
++	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
++		// IE6-8 fails to persist the checked state of a cloned checkbox
++		// or radio button. Worse, IE6-7 fail to give the cloned element
++		// a checked appearance if the defaultChecked value isn't also set
++
++		dest.defaultChecked = dest.checked = src.checked;
++
++		// IE6-7 get confused and end up setting the value of a cloned
++		// checkbox/radio button to an empty string instead of "on"
++		if ( dest.value !== src.value ) {
++			dest.value = src.value;
++		}
++
++	// IE6-8 fails to return the selected option to the default selected
++	// state when cloning options
++	} else if ( nodeName === "option" ) {
++		dest.defaultSelected = dest.selected = src.defaultSelected;
++
++	// IE6-8 fails to set the defaultValue to the correct value when
++	// cloning other types of input fields
++	} else if ( nodeName === "input" || nodeName === "textarea" ) {
++		dest.defaultValue = src.defaultValue;
++	}
++}
++
++jQuery.each({
++	appendTo: "append",
++	prependTo: "prepend",
++	insertBefore: "before",
++	insertAfter: "after",
++	replaceAll: "replaceWith"
++}, function( name, original ) {
++	jQuery.fn[ name ] = function( selector ) {
++		var elems,
++			i = 0,
++			ret = [],
++			insert = jQuery( selector ),
++			last = insert.length - 1;
++
++		for ( ; i <= last; i++ ) {
++			elems = i === last ? this : this.clone(true);
++			jQuery( insert[i] )[ original ]( elems );
++
++			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
++			core_push.apply( ret, elems.get() );
++		}
++
++		return this.pushStack( ret );
++	};
++});
++
++function getAll( context, tag ) {
++	var elems, elem,
++		i = 0,
++		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
++			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
++			undefined;
++
++	if ( !found ) {
++		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
++			if ( !tag || jQuery.nodeName( elem, tag ) ) {
++				found.push( elem );
++			} else {
++				jQuery.merge( found, getAll( elem, tag ) );
++			}
++		}
++	}
++
++	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
++		jQuery.merge( [ context ], found ) :
++		found;
++}
++
++// Used in buildFragment, fixes the defaultChecked property
++function fixDefaultChecked( elem ) {
++	if ( manipulation_rcheckableType.test( elem.type ) ) {
++		elem.defaultChecked = elem.checked;
++	}
++}
++
++jQuery.extend({
++	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
++		var destElements, node, clone, i, srcElements,
++			inPage = jQuery.contains( elem.ownerDocument, elem );
++
++		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
++			clone = elem.cloneNode( true );
++
++		// IE<=8 does not properly clone detached, unknown element nodes
++		} else {
++			fragmentDiv.innerHTML = elem.outerHTML;
++			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
++		}
++
++		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
++				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
++
++			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
++			destElements = getAll( clone );
++			srcElements = getAll( elem );
++
++			// Fix all IE cloning issues
++			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
++				// Ensure that the destination node is not null; Fixes #9587
++				if ( destElements[i] ) {
++					fixCloneNodeIssues( node, destElements[i] );
++				}
++			}
++		}
++
++		// Copy the events from the original to the clone
++		if ( dataAndEvents ) {
++			if ( deepDataAndEvents ) {
++				srcElements = srcElements || getAll( elem );
++				destElements = destElements || getAll( clone );
++
++				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
++					cloneCopyEvent( node, destElements[i] );
++				}
++			} else {
++				cloneCopyEvent( elem, clone );
++			}
++		}
++
++		// Preserve script evaluation history
++		destElements = getAll( clone, "script" );
++		if ( destElements.length > 0 ) {
++			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
++		}
++
++		destElements = srcElements = node = null;
++
++		// Return the cloned set
++		return clone;
++	},
++
++	buildFragment: function( elems, context, scripts, selection ) {
++		var j, elem, contains,
++			tmp, tag, tbody, wrap,
++			l = elems.length,
++
++			// Ensure a safe fragment
++			safe = createSafeFragment( context ),
++
++			nodes = [],
++			i = 0;
++
++		for ( ; i < l; i++ ) {
++			elem = elems[ i ];
++
++			if ( elem || elem === 0 ) {
++
++				// Add nodes directly
++				if ( jQuery.type( elem ) === "object" ) {
++					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
++
++				// Convert non-html into a text node
++				} else if ( !rhtml.test( elem ) ) {
++					nodes.push( context.createTextNode( elem ) );
++
++				// Convert html into DOM nodes
++				} else {
++					tmp = tmp || safe.appendChild( context.createElement("div") );
++
++					// Deserialize a standard representation
++					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
++					wrap = wrapMap[ tag ] || wrapMap._default;
++
++					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
++
++					// Descend through wrappers to the right content
++					j = wrap[0];
++					while ( j-- ) {
++						tmp = tmp.lastChild;
++					}
++
++					// Manually add leading whitespace removed by IE
++					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
++						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
++					}
++
++					// Remove IE's autoinserted <tbody> from table fragments
++					if ( !jQuery.support.tbody ) {
++
++						// String was a <table>, *may* have spurious <tbody>
++						elem = tag === "table" && !rtbody.test( elem ) ?
++							tmp.firstChild :
++
++							// String was a bare <thead> or <tfoot>
++							wrap[1] === "<table>" && !rtbody.test( elem ) ?
++								tmp :
++								0;
++
++						j = elem && elem.childNodes.length;
++						while ( j-- ) {
++							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
++								elem.removeChild( tbody );
++							}
++						}
++					}
++
++					jQuery.merge( nodes, tmp.childNodes );
++
++					// Fix #12392 for WebKit and IE > 9
++					tmp.textContent = "";
++
++					// Fix #12392 for oldIE
++					while ( tmp.firstChild ) {
++						tmp.removeChild( tmp.firstChild );
++					}
++
++					// Remember the top-level container for proper cleanup
++					tmp = safe.lastChild;
++				}
++			}
++		}
++
++		// Fix #11356: Clear elements from fragment
++		if ( tmp ) {
++			safe.removeChild( tmp );
++		}
++
++		// Reset defaultChecked for any radios and checkboxes
++		// about to be appended to the DOM in IE 6/7 (#8060)
++		if ( !jQuery.support.appendChecked ) {
++			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
++		}
++
++		i = 0;
++		while ( (elem = nodes[ i++ ]) ) {
++
++			// #4087 - If origin and destination elements are the same, and this is
++			// that element, do not do anything
++			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
++				continue;
++			}
++
++			contains = jQuery.contains( elem.ownerDocument, elem );
++
++			// Append to fragment
++			tmp = getAll( safe.appendChild( elem ), "script" );
++
++			// Preserve script evaluation history
++			if ( contains ) {
++				setGlobalEval( tmp );
++			}
++
++			// Capture executables
++			if ( scripts ) {
++				j = 0;
++				while ( (elem = tmp[ j++ ]) ) {
++					if ( rscriptType.test( elem.type || "" ) ) {
++						scripts.push( elem );
++					}
++				}
++			}
++		}
++
++		tmp = null;
++
++		return safe;
++	},
++
++	cleanData: function( elems, /* internal */ acceptData ) {
++		var elem, type, id, data,
++			i = 0,
++			internalKey = jQuery.expando,
++			cache = jQuery.cache,
++			deleteExpando = jQuery.support.deleteExpando,
++			special = jQuery.event.special;
++
++		for ( ; (elem = elems[i]) != null; i++ ) {
++
++			if ( acceptData || jQuery.acceptData( elem ) ) {
++
++				id = elem[ internalKey ];
++				data = id && cache[ id ];
++
++				if ( data ) {
++					if ( data.events ) {
++						for ( type in data.events ) {
++							if ( special[ type ] ) {
++								jQuery.event.remove( elem, type );
++
++							// This is a shortcut to avoid jQuery.event.remove's overhead
++							} else {
++								jQuery.removeEvent( elem, type, data.handle );
++							}
++						}
++					}
++
++					// Remove cache only if it was not already removed by jQuery.event.remove
++					if ( cache[ id ] ) {
++
++						delete cache[ id ];
++
++						// IE does not allow us to delete expando properties from nodes,
++						// nor does it have a removeAttribute function on Document nodes;
++						// we must handle all of these cases
++						if ( deleteExpando ) {
++							delete elem[ internalKey ];
++
++						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
++							elem.removeAttribute( internalKey );
++
++						} else {
++							elem[ internalKey ] = null;
++						}
++
++						core_deletedIds.push( id );
++					}
++				}
++			}
++		}
++	}
++});
++var iframe, getStyles, curCSS,
++	ralpha = /alpha\([^)]*\)/i,
++	ropacity = /opacity\s*=\s*([^)]*)/,
++	rposition = /^(top|right|bottom|left)$/,
++	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
++	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
++	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
++	rmargin = /^margin/,
++	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
++	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
++	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
++	elemdisplay = { BODY: "block" },
++
++	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
++	cssNormalTransform = {
++		letterSpacing: 0,
++		fontWeight: 400
++	},
++
++	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
++	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
++
++// return a css property mapped to a potentially vendor prefixed property
++function vendorPropName( style, name ) {
++
++	// shortcut for names that are not vendor prefixed
++	if ( name in style ) {
++		return name;
++	}
++
++	// check for vendor prefixed names
++	var capName = name.charAt(0).toUpperCase() + name.slice(1),
++		origName = name,
++		i = cssPrefixes.length;
++
++	while ( i-- ) {
++		name = cssPrefixes[ i ] + capName;
++		if ( name in style ) {
++			return name;
++		}
++	}
++
++	return origName;
++}
++
++function isHidden( elem, el ) {
++	// isHidden might be called from jQuery#filter function;
++	// in that case, element will be second argument
++	elem = el || elem;
++	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
++}
++
++function showHide( elements, show ) {
++	var display, elem, hidden,
++		values = [],
++		index = 0,
++		length = elements.length;
++
++	for ( ; index < length; index++ ) {
++		elem = elements[ index ];
++		if ( !elem.style ) {
++			continue;
++		}
++
++		values[ index ] = jQuery._data( elem, "olddisplay" );
++		display = elem.style.display;
++		if ( show ) {
++			// Reset the inline display of this element to learn if it is
++			// being hidden by cascaded rules or not
++			if ( !values[ index ] && display === "none" ) {
++				elem.style.display = "";
++			}
++
++			// Set elements which have been overridden with display: none
++			// in a stylesheet to whatever the default browser style is
++			// for such an element
++			if ( elem.style.display === "" && isHidden( elem ) ) {
++				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
++			}
++		} else {
++
++			if ( !values[ index ] ) {
++				hidden = isHidden( elem );
++
++				if ( display && display !== "none" || !hidden ) {
++					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
++				}
++			}
++		}
++	}
++
++	// Set the display of most of the elements in a second loop
++	// to avoid the constant reflow
++	for ( index = 0; index < length; index++ ) {
++		elem = elements[ index ];
++		if ( !elem.style ) {
++			continue;
++		}
++		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
++			elem.style.display = show ? values[ index ] || "" : "none";
++		}
++	}
++
++	return elements;
++}
++
++jQuery.fn.extend({
++	css: function( name, value ) {
++		return jQuery.access( this, function( elem, name, value ) {
++			var len, styles,
++				map = {},
++				i = 0;
++
++			if ( jQuery.isArray( name ) ) {
++				styles = getStyles( elem );
++				len = name.length;
++
++				for ( ; i < len; i++ ) {
++					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
++				}
++
++				return map;
++			}
++
++			return value !== undefined ?
++				jQuery.style( elem, name, value ) :
++				jQuery.css( elem, name );
++		}, name, value, arguments.length > 1 );
++	},
++	show: function() {
++		return showHide( this, true );
++	},
++	hide: function() {
++		return showHide( this );
++	},
++	toggle: function( state ) {
++		var bool = typeof state === "boolean";
++
++		return this.each(function() {
++			if ( bool ? state : isHidden( this ) ) {
++				jQuery( this ).show();
++			} else {
++				jQuery( this ).hide();
++			}
++		});
++	}
++});
++
++jQuery.extend({
++	// Add in style property hooks for overriding the default
++	// behavior of getting and setting a style property
++	cssHooks: {
++		opacity: {
++			get: function( elem, computed ) {
++				if ( computed ) {
++					// We should always get a number back from opacity
++					var ret = curCSS( elem, "opacity" );
++					return ret === "" ? "1" : ret;
++				}
++			}
++		}
++	},
++
++	// Exclude the following css properties to add px
++	cssNumber: {
++		"columnCount": true,
++		"fillOpacity": true,
++		"fontWeight": true,
++		"lineHeight": true,
++		"opacity": true,
++		"orphans": true,
++		"widows": true,
++		"zIndex": true,
++		"zoom": true
++	},
++
++	// Add in properties whose names you wish to fix before
++	// setting or getting the value
++	cssProps: {
++		// normalize float css property
++		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
++	},
++
++	// Get and set the style property on a DOM Node
++	style: function( elem, name, value, extra ) {
++		// Don't set styles on text and comment nodes
++		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
++			return;
++		}
++
++		// Make sure that we're working with the right name
++		var ret, type, hooks,
++			origName = jQuery.camelCase( name ),
++			style = elem.style;
++
++		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
++
++		// gets hook for the prefixed version
++		// followed by the unprefixed version
++		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
++
++		// Check if we're setting a value
++		if ( value !== undefined ) {
++			type = typeof value;
++
++			// convert relative number strings (+= or -=) to relative numbers. #7345
++			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
++				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
++				// Fixes bug #9237
++				type = "number";
++			}
++
++			// Make sure that NaN and null values aren't set. See: #7116
++			if ( value == null || type === "number" && isNaN( value ) ) {
++				return;
++			}
++
++			// If a number was passed in, add 'px' to the (except for certain CSS properties)
++			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
++				value += "px";
++			}
++
++			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
++			// but it would mean to define eight (for every problematic property) identical functions
++			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
++				style[ name ] = "inherit";
++			}
++
++			// If a hook was provided, use that value, otherwise just set the specified value
++			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
++
++				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
++				// Fixes bug #5509
++				try {
++					style[ name ] = value;
++				} catch(e) {}
++			}
++
++		} else {
++			// If a hook was provided get the non-computed value from there
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
++				return ret;
++			}
++
++			// Otherwise just get the value from the style object
++			return style[ name ];
++		}
++	},
++
++	css: function( elem, name, extra, styles ) {
++		var num, val, hooks,
++			origName = jQuery.camelCase( name );
++
++		// Make sure that we're working with the right name
++		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
++
++		// gets hook for the prefixed version
++		// followed by the unprefixed version
++		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
++
++		// If a hook was provided get the computed value from there
++		if ( hooks && "get" in hooks ) {
++			val = hooks.get( elem, true, extra );
++		}
++
++		// Otherwise, if a way to get the computed value exists, use that
++		if ( val === undefined ) {
++			val = curCSS( elem, name, styles );
++		}
++
++		//convert "normal" to computed value
++		if ( val === "normal" && name in cssNormalTransform ) {
++			val = cssNormalTransform[ name ];
++		}
++
++		// Return, converting to number if forced or a qualifier was provided and val looks numeric
++		if ( extra === "" || extra ) {
++			num = parseFloat( val );
++			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
++		}
++		return val;
++	},
++
++	// A method for quickly swapping in/out CSS properties to get correct calculations
++	swap: function( elem, options, callback, args ) {
++		var ret, name,
++			old = {};
++
++		// Remember the old values, and insert the new ones
++		for ( name in options ) {
++			old[ name ] = elem.style[ name ];
++			elem.style[ name ] = options[ name ];
++		}
++
++		ret = callback.apply( elem, args || [] );
++
++		// Revert the old values
++		for ( name in options ) {
++			elem.style[ name ] = old[ name ];
++		}
++
++		return ret;
++	}
++});
++
++// NOTE: we've included the "window" in window.getComputedStyle
++// because jsdom on node.js will break without it.
++if ( window.getComputedStyle ) {
++	getStyles = function( elem ) {
++		return window.getComputedStyle( elem, null );
++	};
++
++	curCSS = function( elem, name, _computed ) {
++		var width, minWidth, maxWidth,
++			computed = _computed || getStyles( elem ),
++
++			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
++			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
++			style = elem.style;
++
++		if ( computed ) {
++
++			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
++				ret = jQuery.style( elem, name );
++			}
++
++			// A tribute to the "awesome hack by Dean Edwards"
++			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
++			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
++			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
++			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
++
++				// Remember the original values
++				width = style.width;
++				minWidth = style.minWidth;
++				maxWidth = style.maxWidth;
++
++				// Put in the new values to get a computed value out
++				style.minWidth = style.maxWidth = style.width = ret;
++				ret = computed.width;
++
++				// Revert the changed values
++				style.width = width;
++				style.minWidth = minWidth;
++				style.maxWidth = maxWidth;
++			}
++		}
++
++		return ret;
++	};
++} else if ( document.documentElement.currentStyle ) {
++	getStyles = function( elem ) {
++		return elem.currentStyle;
++	};
++
++	curCSS = function( elem, name, _computed ) {
++		var left, rs, rsLeft,
++			computed = _computed || getStyles( elem ),
++			ret = computed ? computed[ name ] : undefined,
++			style = elem.style;
++
++		// Avoid setting ret to empty string here
++		// so we don't default to auto
++		if ( ret == null && style && style[ name ] ) {
++			ret = style[ name ];
++		}
++
++		// From the awesome hack by Dean Edwards
++		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
++
++		// If we're not dealing with a regular pixel number
++		// but a number that has a weird ending, we need to convert it to pixels
++		// but not position css attributes, as those are proportional to the parent element instead
++		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
++		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
++
++			// Remember the original values
++			left = style.left;
++			rs = elem.runtimeStyle;
++			rsLeft = rs && rs.left;
++
++			// Put in the new values to get a computed value out
++			if ( rsLeft ) {
++				rs.left = elem.currentStyle.left;
++			}
++			style.left = name === "fontSize" ? "1em" : ret;
++			ret = style.pixelLeft + "px";
++
++			// Revert the changed values
++			style.left = left;
++			if ( rsLeft ) {
++				rs.left = rsLeft;
++			}
++		}
++
++		return ret === "" ? "auto" : ret;
++	};
++}
++
++function setPositiveNumber( elem, value, subtract ) {
++	var matches = rnumsplit.exec( value );
++	return matches ?
++		// Guard against undefined "subtract", e.g., when used as in cssHooks
++		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
++		value;
++}
++
++function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
++	var i = extra === ( isBorderBox ? "border" : "content" ) ?
++		// If we already have the right measurement, avoid augmentation
++		4 :
++		// Otherwise initialize for horizontal or vertical properties
++		name === "width" ? 1 : 0,
++
++		val = 0;
++
++	for ( ; i < 4; i += 2 ) {
++		// both box models exclude margin, so add it if we want it
++		if ( extra === "margin" ) {
++			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
++		}
++
++		if ( isBorderBox ) {
++			// border-box includes padding, so remove it if we want content
++			if ( extra === "content" ) {
++				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
++			}
++
++			// at this point, extra isn't border nor margin, so remove border
++			if ( extra !== "margin" ) {
++				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
++			}
++		} else {
++			// at this point, extra isn't content, so add padding
++			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
++
++			// at this point, extra isn't content nor padding, so add border
++			if ( extra !== "padding" ) {
++				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
++			}
++		}
++	}
++
++	return val;
++}
++
++function getWidthOrHeight( elem, name, extra ) {
++
++	// Start with offset property, which is equivalent to the border-box value
++	var valueIsBorderBox = true,
++		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
++		styles = getStyles( elem ),
++		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
++
++	// some non-html elements return undefined for offsetWidth, so check for null/undefined
++	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
++	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
++	if ( val <= 0 || val == null ) {
++		// Fall back to computed then uncomputed css if necessary
++		val = curCSS( elem, name, styles );
++		if ( val < 0 || val == null ) {
++			val = elem.style[ name ];
++		}
++
++		// Computed unit is not pixels. Stop here and return.
++		if ( rnumnonpx.test(val) ) {
++			return val;
++		}
++
++		// we need the check for style in case a browser which returns unreliable values
++		// for getComputedStyle silently falls back to the reliable elem.style
++		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
++
++		// Normalize "", auto, and prepare for extra
++		val = parseFloat( val ) || 0;
++	}
++
++	// use the active box-sizing model to add/subtract irrelevant styles
++	return ( val +
++		augmentWidthOrHeight(
++			elem,
++			name,
++			extra || ( isBorderBox ? "border" : "content" ),
++			valueIsBorderBox,
++			styles
++		)
++	) + "px";
++}
++
++// Try to determine the default display value of an element
++function css_defaultDisplay( nodeName ) {
++	var doc = document,
++		display = elemdisplay[ nodeName ];
++
++	if ( !display ) {
++		display = actualDisplay( nodeName, doc );
++
++		// If the simple way fails, read from inside an iframe
++		if ( display === "none" || !display ) {
++			// Use the already-created iframe if possible
++			iframe = ( iframe ||
++				jQuery("<iframe frameborder='0' width='0' height='0'/>")
++				.css( "cssText", "display:block !important" )
++			).appendTo( doc.documentElement );
++
++			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
++			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
++			doc.write("<!doctype html><html><body>");
++			doc.close();
++
++			display = actualDisplay( nodeName, doc );
++			iframe.detach();
++		}
++
++		// Store the correct default display
++		elemdisplay[ nodeName ] = display;
++	}
++
++	return display;
++}
++
++// Called ONLY from within css_defaultDisplay
++function actualDisplay( name, doc ) {
++	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
++		display = jQuery.css( elem[0], "display" );
++	elem.remove();
++	return display;
++}
++
++jQuery.each([ "height", "width" ], function( i, name ) {
++	jQuery.cssHooks[ name ] = {
++		get: function( elem, computed, extra ) {
++			if ( computed ) {
++				// certain elements can have dimension info if we invisibly show them
++				// however, it must have a current display style that would benefit from this
++				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
++					jQuery.swap( elem, cssShow, function() {
++						return getWidthOrHeight( elem, name, extra );
++					}) :
++					getWidthOrHeight( elem, name, extra );
++			}
++		},
++
++		set: function( elem, value, extra ) {
++			var styles = extra && getStyles( elem );
++			return setPositiveNumber( elem, value, extra ?
++				augmentWidthOrHeight(
++					elem,
++					name,
++					extra,
++					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
++					styles
++				) : 0
++			);
++		}
++	};
++});
++
++if ( !jQuery.support.opacity ) {
++	jQuery.cssHooks.opacity = {
++		get: function( elem, computed ) {
++			// IE uses filters for opacity
++			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
++				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
++				computed ? "1" : "";
++		},
++
++		set: function( elem, value ) {
++			var style = elem.style,
++				currentStyle = elem.currentStyle,
++				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
++				filter = currentStyle && currentStyle.filter || style.filter || "";
++
++			// IE has trouble with opacity if it does not have layout
++			// Force it by setting the zoom level
++			style.zoom = 1;
++
++			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
++			// if value === "", then remove inline opacity #12685
++			if ( ( value >= 1 || value === "" ) &&
++					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
++					style.removeAttribute ) {
++
++				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
++				// if "filter:" is present at all, clearType is disabled, we want to avoid this
++				// style.removeAttribute is IE Only, but so apparently is this code path...
++				style.removeAttribute( "filter" );
++
++				// if there is no filter style applied in a css rule or unset inline opacity, we are done
++				if ( value === "" || currentStyle && !currentStyle.filter ) {
++					return;
++				}
++			}
++
++			// otherwise, set new filter values
++			style.filter = ralpha.test( filter ) ?
++				filter.replace( ralpha, opacity ) :
++				filter + " " + opacity;
++		}
++	};
++}
++
++// These hooks cannot be added until DOM ready because the support test
++// for it is not run until after DOM ready
++jQuery(function() {
++	if ( !jQuery.support.reliableMarginRight ) {
++		jQuery.cssHooks.marginRight = {
++			get: function( elem, computed ) {
++				if ( computed ) {
++					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++					// Work around by temporarily setting element display to inline-block
++					return jQuery.swap( elem, { "display": "inline-block" },
++						curCSS, [ elem, "marginRight" ] );
++				}
++			}
++		};
++	}
++
++	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
++	// getComputedStyle returns percent when specified for top/left/bottom/right
++	// rather than make the css module depend on the offset module, we just check for it here
++	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
++		jQuery.each( [ "top", "left" ], function( i, prop ) {
++			jQuery.cssHooks[ prop ] = {
++				get: function( elem, computed ) {
++					if ( computed ) {
++						computed = curCSS( elem, prop );
++						// if curCSS returns percentage, fallback to offset
++						return rnumnonpx.test( computed ) ?
++							jQuery( elem ).position()[ prop ] + "px" :
++							computed;
++					}
++				}
++			};
++		});
++	}
++
++});
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.hidden = function( elem ) {
++		// Support: Opera <= 12.12
++		// Opera reports offsetWidths and offsetHeights less than zero on some elements
++		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
++			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
++	};
++
++	jQuery.expr.filters.visible = function( elem ) {
++		return !jQuery.expr.filters.hidden( elem );
++	};
++}
++
++// These hooks are used by animate to expand properties
++jQuery.each({
++	margin: "",
++	padding: "",
++	border: "Width"
++}, function( prefix, suffix ) {
++	jQuery.cssHooks[ prefix + suffix ] = {
++		expand: function( value ) {
++			var i = 0,
++				expanded = {},
++
++				// assumes a single number if not a string
++				parts = typeof value === "string" ? value.split(" ") : [ value ];
++
++			for ( ; i < 4; i++ ) {
++				expanded[ prefix + cssExpand[ i ] + suffix ] =
++					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
++			}
++
++			return expanded;
++		}
++	};
++
++	if ( !rmargin.test( prefix ) ) {
++		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
++	}
++});
++var r20 = /%20/g,
++	rbracket = /\[\]$/,
++	rCRLF = /\r?\n/g,
++	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
++	rsubmittable = /^(?:input|select|textarea|keygen)/i;
++
++jQuery.fn.extend({
++	serialize: function() {
++		return jQuery.param( this.serializeArray() );
++	},
++	serializeArray: function() {
++		return this.map(function(){
++			// Can add propHook for "elements" to filter or add form elements
++			var elements = jQuery.prop( this, "elements" );
++			return elements ? jQuery.makeArray( elements ) : this;
++		})
++		.filter(function(){
++			var type = this.type;
++			// Use .is(":disabled") so that fieldset[disabled] works
++			return this.name && !jQuery( this ).is( ":disabled" ) &&
++				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
++				( this.checked || !manipulation_rcheckableType.test( type ) );
++		})
++		.map(function( i, elem ){
++			var val = jQuery( this ).val();
++
++			return val == null ?
++				null :
++				jQuery.isArray( val ) ?
++					jQuery.map( val, function( val ){
++						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++					}) :
++					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++		}).get();
++	}
++});
++
++//Serialize an array of form elements or a set of
++//key/values into a query string
++jQuery.param = function( a, traditional ) {
++	var prefix,
++		s = [],
++		add = function( key, value ) {
++			// If value is a function, invoke it and return its value
++			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
++			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
++		};
++
++	// Set traditional to true for jQuery <= 1.3.2 behavior.
++	if ( traditional === undefined ) {
++		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
++	}
++
++	// If an array was passed in, assume that it is an array of form elements.
++	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
++		// Serialize the form elements
++		jQuery.each( a, function() {
++			add( this.name, this.value );
++		});
++
++	} else {
++		// If traditional, encode the "old" way (the way 1.3.2 or older
++		// did it), otherwise encode params recursively.
++		for ( prefix in a ) {
++			buildParams( prefix, a[ prefix ], traditional, add );
++		}
++	}
++
++	// Return the resulting serialization
++	return s.join( "&" ).replace( r20, "+" );
++};
++
++function buildParams( prefix, obj, traditional, add ) {
++	var name;
++
++	if ( jQuery.isArray( obj ) ) {
++		// Serialize array item.
++		jQuery.each( obj, function( i, v ) {
++			if ( traditional || rbracket.test( prefix ) ) {
++				// Treat each array item as a scalar.
++				add( prefix, v );
++
++			} else {
++				// Item is non-scalar (array or object), encode its numeric index.
++				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
++			}
++		});
++
++	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
++		// Serialize object item.
++		for ( name in obj ) {
++			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
++		}
++
++	} else {
++		// Serialize scalar item.
++		add( prefix, obj );
++	}
++}
++jQuery.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( i, name ) {
++
++	// Handle event binding
++	jQuery.fn[ name ] = function( data, fn ) {
++		return arguments.length > 0 ?
++			this.on( name, null, data, fn ) :
++			this.trigger( name );
++	};
++});
++
++jQuery.fn.hover = function( fnOver, fnOut ) {
++	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
++};
++var
++	// Document location
++	ajaxLocParts,
++	ajaxLocation,
++	ajax_nonce = jQuery.now(),
++
++	ajax_rquery = /\?/,
++	rhash = /#.*$/,
++	rts = /([?&])_=[^&]*/,
++	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
++	// #7653, #8125, #8152: local protocol detection
++	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
++	rnoContent = /^(?:GET|HEAD)$/,
++	rprotocol = /^\/\//,
++	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
++
++	// Keep a copy of the old load method
++	_load = jQuery.fn.load,
++
++	/* Prefilters
++	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
++	 * 2) These are called:
++	 *    - BEFORE asking for a transport
++	 *    - AFTER param serialization (s.data is a string if s.processData is true)
++	 * 3) key is the dataType
++	 * 4) the catchall symbol "*" can be used
++	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
++	 */
++	prefilters = {},
++
++	/* Transports bindings
++	 * 1) key is the dataType
++	 * 2) the catchall symbol "*" can be used
++	 * 3) selection will start with transport dataType and THEN go to "*" if needed
++	 */
++	transports = {},
++
++	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
++	allTypes = "*/".concat("*");
++
++// #8138, IE may throw an exception when accessing
++// a field from window.location if document.domain has been set
++try {
++	ajaxLocation = location.href;
++} catch( e ) {
++	// Use the href attribute of an A element
++	// since IE will modify it given document.location
++	ajaxLocation = document.createElement( "a" );
++	ajaxLocation.href = "";
++	ajaxLocation = ajaxLocation.href;
++}
++
++// Segment location into parts
++ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
++
++// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
++function addToPrefiltersOrTransports( structure ) {
++
++	// dataTypeExpression is optional and defaults to "*"
++	return function( dataTypeExpression, func ) {
++
++		if ( typeof dataTypeExpression !== "string" ) {
++			func = dataTypeExpression;
++			dataTypeExpression = "*";
++		}
++
++		var dataType,
++			i = 0,
++			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
++
++		if ( jQuery.isFunction( func ) ) {
++			// For each dataType in the dataTypeExpression
++			while ( (dataType = dataTypes[i++]) ) {
++				// Prepend if requested
++				if ( dataType[0] === "+" ) {
++					dataType = dataType.slice( 1 ) || "*";
++					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
++
++				// Otherwise append
++				} else {
++					(structure[ dataType ] = structure[ dataType ] || []).push( func );
++				}
++			}
++		}
++	};
++}
++
++// Base inspection function for prefilters and transports
++function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
++
++	var inspected = {},
++		seekingTransport = ( structure === transports );
++
++	function inspect( dataType ) {
++		var selected;
++		inspected[ dataType ] = true;
++		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
++			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
++			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
++				options.dataTypes.unshift( dataTypeOrTransport );
++				inspect( dataTypeOrTransport );
++				return false;
++			} else if ( seekingTransport ) {
++				return !( selected = dataTypeOrTransport );
++			}
++		});
++		return selected;
++	}
++
++	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
++}
++
++// A special extend for ajax options
++// that takes "flat" options (not to be deep extended)
++// Fixes #9887
++function ajaxExtend( target, src ) {
++	var deep, key,
++		flatOptions = jQuery.ajaxSettings.flatOptions || {};
++
++	for ( key in src ) {
++		if ( src[ key ] !== undefined ) {
++			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
++		}
++	}
++	if ( deep ) {
++		jQuery.extend( true, target, deep );
++	}
++
++	return target;
++}
++
++jQuery.fn.load = function( url, params, callback ) {
++	if ( typeof url !== "string" && _load ) {
++		return _load.apply( this, arguments );
++	}
++
++	var selector, response, type,
++		self = this,
++		off = url.indexOf(" ");
++
++	if ( off >= 0 ) {
++		selector = url.slice( off, url.length );
++		url = url.slice( 0, off );
++	}
++
++	// If it's a function
++	if ( jQuery.isFunction( params ) ) {
++
++		// We assume that it's the callback
++		callback = params;
++		params = undefined;
++
++	// Otherwise, build a param string
++	} else if ( params && typeof params === "object" ) {
++		type = "POST";
++	}
++
++	// If we have elements to modify, make the request
++	if ( self.length > 0 ) {
++		jQuery.ajax({
++			url: url,
++
++			// if "type" variable is undefined, then "GET" method will be used
++			type: type,
++			dataType: "html",
++			data: params
++		}).done(function( responseText ) {
++
++			// Save response for use in complete callback
++			response = arguments;
++
++			self.html( selector ?
++
++				// If a selector was specified, locate the right elements in a dummy div
++				// Exclude scripts to avoid IE 'Permission Denied' errors
++				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
++
++				// Otherwise use the full result
++				responseText );
++
++		}).complete( callback && function( jqXHR, status ) {
++			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
++		});
++	}
++
++	return this;
++};
++
++// Attach a bunch of functions for handling common AJAX events
++jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
++	jQuery.fn[ type ] = function( fn ){
++		return this.on( type, fn );
++	};
++});
++
++jQuery.each( [ "get", "post" ], function( i, method ) {
++	jQuery[ method ] = function( url, data, callback, type ) {
++		// shift arguments if data argument was omitted
++		if ( jQuery.isFunction( data ) ) {
++			type = type || callback;
++			callback = data;
++			data = undefined;
++		}
++
++		return jQuery.ajax({
++			url: url,
++			type: method,
++			dataType: type,
++			data: data,
++			success: callback
++		});
++	};
++});
++
++jQuery.extend({
++
++	// Counter for holding the number of active queries
++	active: 0,
++
++	// Last-Modified header cache for next request
++	lastModified: {},
++	etag: {},
++
++	ajaxSettings: {
++		url: ajaxLocation,
++		type: "GET",
++		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
++		global: true,
++		processData: true,
++		async: true,
++		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
++		/*
++		timeout: 0,
++		data: null,
++		dataType: null,
++		username: null,
++		password: null,
++		cache: null,
++		throws: false,
++		traditional: false,
++		headers: {},
++		*/
++
++		accepts: {
++			"*": allTypes,
++			text: "text/plain",
++			html: "text/html",
++			xml: "application/xml, text/xml",
++			json: "application/json, text/javascript"
++		},
++
++		contents: {
++			xml: /xml/,
++			html: /html/,
++			json: /json/
++		},
++
++		responseFields: {
++			xml: "responseXML",
++			text: "responseText"
++		},
++
++		// Data converters
++		// Keys separate source (or catchall "*") and destination types with a single space
++		converters: {
++
++			// Convert anything to text
++			"* text": window.String,
++
++			// Text to html (true = no transformation)
++			"text html": true,
++
++			// Evaluate text as a json expression
++			"text json": jQuery.parseJSON,
++
++			// Parse text as xml
++			"text xml": jQuery.parseXML
++		},
++
++		// For options that shouldn't be deep extended:
++		// you can add your own custom options here if
++		// and when you create one that shouldn't be
++		// deep extended (see ajaxExtend)
++		flatOptions: {
++			url: true,
++			context: true
++		}
++	},
++
++	// Creates a full fledged settings object into target
++	// with both ajaxSettings and settings fields.
++	// If target is omitted, writes into ajaxSettings.
++	ajaxSetup: function( target, settings ) {
++		return settings ?
++
++			// Building a settings object
++			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
++
++			// Extending ajaxSettings
++			ajaxExtend( jQuery.ajaxSettings, target );
++	},
++
++	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
++	ajaxTransport: addToPrefiltersOrTransports( transports ),
++
++	// Main method
++	ajax: function( url, options ) {
++
++		// If url is an object, simulate pre-1.5 signature
++		if ( typeof url === "object" ) {
++			options = url;
++			url = undefined;
++		}
++
++		// Force options to be an object
++		options = options || {};
++
++		var // Cross-domain detection vars
++			parts,
++			// Loop variable
++			i,
++			// URL without anti-cache param
++			cacheURL,
++			// Response headers as string
++			responseHeadersString,
++			// timeout handle
++			timeoutTimer,
++
++			// To know if global events are to be dispatched
++			fireGlobals,
++
++			transport,
++			// Response headers
++			responseHeaders,
++			// Create the final options object
++			s = jQuery.ajaxSetup( {}, options ),
++			// Callbacks context
++			callbackContext = s.context || s,
++			// Context for global events is callbackContext if it is a DOM node or jQuery collection
++			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
++				jQuery( callbackContext ) :
++				jQuery.event,
++			// Deferreds
++			deferred = jQuery.Deferred(),
++			completeDeferred = jQuery.Callbacks("once memory"),
++			// Status-dependent callbacks
++			statusCode = s.statusCode || {},
++			// Headers (they are sent all at once)
++			requestHeaders = {},
++			requestHeadersNames = {},
++			// The jqXHR state
++			state = 0,
++			// Default abort message
++			strAbort = "canceled",
++			// Fake xhr
++			jqXHR = {
++				readyState: 0,
++
++				// Builds headers hashtable if needed
++				getResponseHeader: function( key ) {
++					var match;
++					if ( state === 2 ) {
++						if ( !responseHeaders ) {
++							responseHeaders = {};
++							while ( (match = rheaders.exec( responseHeadersString )) ) {
++								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
++							}
++						}
++						match = responseHeaders[ key.toLowerCase() ];
++					}
++					return match == null ? null : match;
++				},
++
++				// Raw string
++				getAllResponseHeaders: function() {
++					return state === 2 ? responseHeadersString : null;
++				},
++
++				// Caches the header
++				setRequestHeader: function( name, value ) {
++					var lname = name.toLowerCase();
++					if ( !state ) {
++						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
++						requestHeaders[ name ] = value;
++					}
++					return this;
++				},
++
++				// Overrides response content-type header
++				overrideMimeType: function( type ) {
++					if ( !state ) {
++						s.mimeType = type;
++					}
++					return this;
++				},
++
++				// Status-dependent callbacks
++				statusCode: function( map ) {
++					var code;
++					if ( map ) {
++						if ( state < 2 ) {
++							for ( code in map ) {
++								// Lazy-add the new callback in a way that preserves old ones
++								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
++							}
++						} else {
++							// Execute the appropriate callbacks
++							jqXHR.always( map[ jqXHR.status ] );
++						}
++					}
++					return this;
++				},
++
++				// Cancel the request
++				abort: function( statusText ) {
++					var finalText = statusText || strAbort;
++					if ( transport ) {
++						transport.abort( finalText );
++					}
++					done( 0, finalText );
++					return this;
++				}
++			};
++
++		// Attach deferreds
++		deferred.promise( jqXHR ).complete = completeDeferred.add;
++		jqXHR.success = jqXHR.done;
++		jqXHR.error = jqXHR.fail;
++
++		// Remove hash character (#7531: and string promotion)
++		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
++		// Handle falsy url in the settings object (#10093: consistency with old signature)
++		// We also use the url parameter if available
++		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
++
++		// Alias method option to type as per ticket #12004
++		s.type = options.method || options.type || s.method || s.type;
++
++		// Extract dataTypes list
++		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
++
++		// A cross-domain request is in order when we have a protocol:host:port mismatch
++		if ( s.crossDomain == null ) {
++			parts = rurl.exec( s.url.toLowerCase() );
++			s.crossDomain = !!( parts &&
++				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
++					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
++						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
++			);
++		}
++
++		// Convert data if not already a string
++		if ( s.data && s.processData && typeof s.data !== "string" ) {
++			s.data = jQuery.param( s.data, s.traditional );
++		}
++
++		// Apply prefilters
++		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
++
++		// If request was aborted inside a prefilter, stop there
++		if ( state === 2 ) {
++			return jqXHR;
++		}
++
++		// We can fire global events as of now if asked to
++		fireGlobals = s.global;
++
++		// Watch for a new set of requests
++		if ( fireGlobals && jQuery.active++ === 0 ) {
++			jQuery.event.trigger("ajaxStart");
++		}
++
++		// Uppercase the type
++		s.type = s.type.toUpperCase();
++
++		// Determine if request has content
++		s.hasContent = !rnoContent.test( s.type );
++
++		// Save the URL in case we're toying with the If-Modified-Since
++		// and/or If-None-Match header later on
++		cacheURL = s.url;
++
++		// More options handling for requests with no content
++		if ( !s.hasContent ) {
++
++			// If data is available, append data to url
++			if ( s.data ) {
++				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
++				// #9682: remove data so that it's not used in an eventual retry
++				delete s.data;
++			}
++
++			// Add anti-cache in url if needed
++			if ( s.cache === false ) {
++				s.url = rts.test( cacheURL ) ?
++
++					// If there is already a '_' parameter, set its value
++					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
++
++					// Otherwise add one to the end
++					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
++			}
++		}
++
++		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++		if ( s.ifModified ) {
++			if ( jQuery.lastModified[ cacheURL ] ) {
++				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
++			}
++			if ( jQuery.etag[ cacheURL ] ) {
++				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
++			}
++		}
++
++		// Set the correct header, if data is being sent
++		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
++			jqXHR.setRequestHeader( "Content-Type", s.contentType );
++		}
++
++		// Set the Accepts header for the server, depending on the dataType
++		jqXHR.setRequestHeader(
++			"Accept",
++			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
++				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
++				s.accepts[ "*" ]
++		);
++
++		// Check for headers option
++		for ( i in s.headers ) {
++			jqXHR.setRequestHeader( i, s.headers[ i ] );
++		}
++
++		// Allow custom headers/mimetypes and early abort
++		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
++			// Abort if not done already and return
++			return jqXHR.abort();
++		}
++
++		// aborting is no longer a cancellation
++		strAbort = "abort";
++
++		// Install callbacks on deferreds
++		for ( i in { success: 1, error: 1, complete: 1 } ) {
++			jqXHR[ i ]( s[ i ] );
++		}
++
++		// Get transport
++		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
++
++		// If no transport, we auto-abort
++		if ( !transport ) {
++			done( -1, "No Transport" );
++		} else {
++			jqXHR.readyState = 1;
++
++			// Send global event
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
++			}
++			// Timeout
++			if ( s.async && s.timeout > 0 ) {
++				timeoutTimer = setTimeout(function() {
++					jqXHR.abort("timeout");
++				}, s.timeout );
++			}
++
++			try {
++				state = 1;
++				transport.send( requestHeaders, done );
++			} catch ( e ) {
++				// Propagate exception as error if not done
++				if ( state < 2 ) {
++					done( -1, e );
++				// Simply rethrow otherwise
++				} else {
++					throw e;
++				}
++			}
++		}
++
++		// Callback for when everything is done
++		function done( status, nativeStatusText, responses, headers ) {
++			var isSuccess, success, error, response, modified,
++				statusText = nativeStatusText;
++
++			// Called once
++			if ( state === 2 ) {
++				return;
++			}
++
++			// State is "done" now
++			state = 2;
++
++			// Clear timeout if it exists
++			if ( timeoutTimer ) {
++				clearTimeout( timeoutTimer );
++			}
++
++			// Dereference transport for early garbage collection
++			// (no matter how long the jqXHR object will be used)
++			transport = undefined;
++
++			// Cache response headers
++			responseHeadersString = headers || "";
++
++			// Set readyState
++			jqXHR.readyState = status > 0 ? 4 : 0;
++
++			// Get response data
++			if ( responses ) {
++				response = ajaxHandleResponses( s, jqXHR, responses );
++			}
++
++			// If successful, handle type chaining
++			if ( status >= 200 && status < 300 || status === 304 ) {
++
++				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++				if ( s.ifModified ) {
++					modified = jqXHR.getResponseHeader("Last-Modified");
++					if ( modified ) {
++						jQuery.lastModified[ cacheURL ] = modified;
++					}
++					modified = jqXHR.getResponseHeader("etag");
++					if ( modified ) {
++						jQuery.etag[ cacheURL ] = modified;
++					}
++				}
++
++				// if no content
++				if ( status === 204 ) {
++					isSuccess = true;
++					statusText = "nocontent";
++
++				// if not modified
++				} else if ( status === 304 ) {
++					isSuccess = true;
++					statusText = "notmodified";
++
++				// If we have data, let's convert it
++				} else {
++					isSuccess = ajaxConvert( s, response );
++					statusText = isSuccess.state;
++					success = isSuccess.data;
++					error = isSuccess.error;
++					isSuccess = !error;
++				}
++			} else {
++				// We extract error from statusText
++				// then normalize statusText and status for non-aborts
++				error = statusText;
++				if ( status || !statusText ) {
++					statusText = "error";
++					if ( status < 0 ) {
++						status = 0;
++					}
++				}
++			}
++
++			// Set data for the fake xhr object
++			jqXHR.status = status;
++			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
++
++			// Success/Error
++			if ( isSuccess ) {
++				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
++			} else {
++				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
++			}
++
++			// Status-dependent callbacks
++			jqXHR.statusCode( statusCode );
++			statusCode = undefined;
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
++					[ jqXHR, s, isSuccess ? success : error ] );
++			}
++
++			// Complete
++			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
++				// Handle the global AJAX counter
++				if ( !( --jQuery.active ) ) {
++					jQuery.event.trigger("ajaxStop");
++				}
++			}
++		}
++
++		return jqXHR;
++	},
++
++	getScript: function( url, callback ) {
++		return jQuery.get( url, undefined, callback, "script" );
++	},
++
++	getJSON: function( url, data, callback ) {
++		return jQuery.get( url, data, callback, "json" );
++	}
++});
++
++/* Handles responses to an ajax request:
++ * - sets all responseXXX fields accordingly
++ * - finds the right dataType (mediates between content-type and expected dataType)
++ * - returns the corresponding response
++ */
++function ajaxHandleResponses( s, jqXHR, responses ) {
++	var firstDataType, ct, finalDataType, type,
++		contents = s.contents,
++		dataTypes = s.dataTypes,
++		responseFields = s.responseFields;
++
++	// Fill responseXXX fields
++	for ( type in responseFields ) {
++		if ( type in responses ) {
++			jqXHR[ responseFields[type] ] = responses[ type ];
++		}
++	}
++
++	// Remove auto dataType and get content-type in the process
++	while( dataTypes[ 0 ] === "*" ) {
++		dataTypes.shift();
++		if ( ct === undefined ) {
++			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
++		}
++	}
++
++	// Check if we're dealing with a known content-type
++	if ( ct ) {
++		for ( type in contents ) {
++			if ( contents[ type ] && contents[ type ].test( ct ) ) {
++				dataTypes.unshift( type );
++				break;
++			}
++		}
++	}
++
++	// Check to see if we have a response for the expected dataType
++	if ( dataTypes[ 0 ] in responses ) {
++		finalDataType = dataTypes[ 0 ];
++	} else {
++		// Try convertible dataTypes
++		for ( type in responses ) {
++			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
++				finalDataType = type;
++				break;
++			}
++			if ( !firstDataType ) {
++				firstDataType = type;
++			}
++		}
++		// Or just use first one
++		finalDataType = finalDataType || firstDataType;
++	}
++
++	// If we found a dataType
++	// We add the dataType to the list if needed
++	// and return the corresponding response
++	if ( finalDataType ) {
++		if ( finalDataType !== dataTypes[ 0 ] ) {
++			dataTypes.unshift( finalDataType );
++		}
++		return responses[ finalDataType ];
++	}
++}
++
++// Chain conversions given the request and the original response
++function ajaxConvert( s, response ) {
++	var conv2, current, conv, tmp,
++		converters = {},
++		i = 0,
++		// Work with a copy of dataTypes in case we need to modify it for conversion
++		dataTypes = s.dataTypes.slice(),
++		prev = dataTypes[ 0 ];
++
++	// Apply the dataFilter if provided
++	if ( s.dataFilter ) {
++		response = s.dataFilter( response, s.dataType );
++	}
++
++	// Create converters map with lowercased keys
++	if ( dataTypes[ 1 ] ) {
++		for ( conv in s.converters ) {
++			converters[ conv.toLowerCase() ] = s.converters[ conv ];
++		}
++	}
++
++	// Convert to each sequential dataType, tolerating list modification
++	for ( ; (current = dataTypes[++i]); ) {
++
++		// There's only work to do if current dataType is non-auto
++		if ( current !== "*" ) {
++
++			// Convert response if prev dataType is non-auto and differs from current
++			if ( prev !== "*" && prev !== current ) {
++
++				// Seek a direct converter
++				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
++
++				// If none found, seek a pair
++				if ( !conv ) {
++					for ( conv2 in converters ) {
++
++						// If conv2 outputs current
++						tmp = conv2.split(" ");
++						if ( tmp[ 1 ] === current ) {
++
++							// If prev can be converted to accepted input
++							conv = converters[ prev + " " + tmp[ 0 ] ] ||
++								converters[ "* " + tmp[ 0 ] ];
++							if ( conv ) {
++								// Condense equivalence converters
++								if ( conv === true ) {
++									conv = converters[ conv2 ];
++
++								// Otherwise, insert the intermediate dataType
++								} else if ( converters[ conv2 ] !== true ) {
++									current = tmp[ 0 ];
++									dataTypes.splice( i--, 0, current );
++								}
++
++								break;
++							}
++						}
++					}
++				}
++
++				// Apply converter (if not an equivalence)
++				if ( conv !== true ) {
++
++					// Unless errors are allowed to bubble, catch and return them
++					if ( conv && s["throws"] ) {
++						response = conv( response );
++					} else {
++						try {
++							response = conv( response );
++						} catch ( e ) {
++							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
++						}
++					}
++				}
++			}
++
++			// Update prev for next iteration
++			prev = current;
++		}
++	}
++
++	return { state: "success", data: response };
++}
++// Install script dataType
++jQuery.ajaxSetup({
++	accepts: {
++		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
++	},
++	contents: {
++		script: /(?:java|ecma)script/
++	},
++	converters: {
++		"text script": function( text ) {
++			jQuery.globalEval( text );
++			return text;
++		}
++	}
++});
++
++// Handle cache's special case and global
++jQuery.ajaxPrefilter( "script", function( s ) {
++	if ( s.cache === undefined ) {
++		s.cache = false;
++	}
++	if ( s.crossDomain ) {
++		s.type = "GET";
++		s.global = false;
++	}
++});
++
++// Bind script tag hack transport
++jQuery.ajaxTransport( "script", function(s) {
++
++	// This transport only deals with cross domain requests
++	if ( s.crossDomain ) {
++
++		var script,
++			head = document.head || jQuery("head")[0] || document.documentElement;
++
++		return {
++
++			send: function( _, callback ) {
++
++				script = document.createElement("script");
++
++				script.async = true;
++
++				if ( s.scriptCharset ) {
++					script.charset = s.scriptCharset;
++				}
++
++				script.src = s.url;
++
++				// Attach handlers for all browsers
++				script.onload = script.onreadystatechange = function( _, isAbort ) {
++
++					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
++
++						// Handle memory leak in IE
++						script.onload = script.onreadystatechange = null;
++
++						// Remove the script
++						if ( script.parentNode ) {
++							script.parentNode.removeChild( script );
++						}
++
++						// Dereference the script
++						script = null;
++
++						// Callback if not abort
++						if ( !isAbort ) {
++							callback( 200, "success" );
++						}
++					}
++				};
++
++				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
++				// Use native DOM manipulation to avoid our domManip AJAX trickery
++				head.insertBefore( script, head.firstChild );
++			},
++
++			abort: function() {
++				if ( script ) {
++					script.onload( undefined, true );
++				}
++			}
++		};
++	}
++});
++var oldCallbacks = [],
++	rjsonp = /(=)\?(?=&|$)|\?\?/;
++
++// Default jsonp settings
++jQuery.ajaxSetup({
++	jsonp: "callback",
++	jsonpCallback: function() {
++		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
++		this[ callback ] = true;
++		return callback;
++	}
++});
++
++// Detect, normalize options and install callbacks for jsonp requests
++jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
++
++	var callbackName, overwritten, responseContainer,
++		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
++			"url" :
++			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
++		);
++
++	// Handle iff the expected data type is "jsonp" or we have a parameter to set
++	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
++
++		// Get callback name, remembering preexisting value associated with it
++		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
++			s.jsonpCallback() :
++			s.jsonpCallback;
++
++		// Insert callback into url or form data
++		if ( jsonProp ) {
++			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
++		} else if ( s.jsonp !== false ) {
++			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
++		}
++
++		// Use data converter to retrieve json after script execution
++		s.converters["script json"] = function() {
++			if ( !responseContainer ) {
++				jQuery.error( callbackName + " was not called" );
++			}
++			return responseContainer[ 0 ];
++		};
++
++		// force json dataType
++		s.dataTypes[ 0 ] = "json";
++
++		// Install callback
++		overwritten = window[ callbackName ];
++		window[ callbackName ] = function() {
++			responseContainer = arguments;
++		};
++
++		// Clean-up function (fires after converters)
++		jqXHR.always(function() {
++			// Restore preexisting value
++			window[ callbackName ] = overwritten;
++
++			// Save back as free
++			if ( s[ callbackName ] ) {
++				// make sure that re-using the options doesn't screw things around
++				s.jsonpCallback = originalSettings.jsonpCallback;
++
++				// save the callback name for future use
++				oldCallbacks.push( callbackName );
++			}
++
++			// Call if it was a function and we have a response
++			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
++				overwritten( responseContainer[ 0 ] );
++			}
++
++			responseContainer = overwritten = undefined;
++		});
++
++		// Delegate to script
++		return "script";
++	}
++});
++var xhrCallbacks, xhrSupported,
++	xhrId = 0,
++	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
++	xhrOnUnloadAbort = window.ActiveXObject && function() {
++		// Abort all pending requests
++		var key;
++		for ( key in xhrCallbacks ) {
++			xhrCallbacks[ key ]( undefined, true );
++		}
++	};
++
++// Functions to create xhrs
++function createStandardXHR() {
++	try {
++		return new window.XMLHttpRequest();
++	} catch( e ) {}
++}
++
++function createActiveXHR() {
++	try {
++		return new window.ActiveXObject("Microsoft.XMLHTTP");
++	} catch( e ) {}
++}
++
++// Create the request object
++// (This is still attached to ajaxSettings for backward compatibility)
++jQuery.ajaxSettings.xhr = window.ActiveXObject ?
++	/* Microsoft failed to properly
++	 * implement the XMLHttpRequest in IE7 (can't request local files),
++	 * so we use the ActiveXObject when it is available
++	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
++	 * we need a fallback.
++	 */
++	function() {
++		return !this.isLocal && createStandardXHR() || createActiveXHR();
++	} :
++	// For all other browsers, use the standard XMLHttpRequest object
++	createStandardXHR;
++
++// Determine support properties
++xhrSupported = jQuery.ajaxSettings.xhr();
++jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
++xhrSupported = jQuery.support.ajax = !!xhrSupported;
++
++// Create transport if the browser can provide an xhr
++if ( xhrSupported ) {
++
++	jQuery.ajaxTransport(function( s ) {
++		// Cross domain only allowed if supported through XMLHttpRequest
++		if ( !s.crossDomain || jQuery.support.cors ) {
++
++			var callback;
++
++			return {
++				send: function( headers, complete ) {
++
++					// Get a new xhr
++					var handle, i,
++						xhr = s.xhr();
++
++					// Open the socket
++					// Passing null username, generates a login popup on Opera (#2865)
++					if ( s.username ) {
++						xhr.open( s.type, s.url, s.async, s.username, s.password );
++					} else {
++						xhr.open( s.type, s.url, s.async );
++					}
++
++					// Apply custom fields if provided
++					if ( s.xhrFields ) {
++						for ( i in s.xhrFields ) {
++							xhr[ i ] = s.xhrFields[ i ];
++						}
++					}
++
++					// Override mime type if needed
++					if ( s.mimeType && xhr.overrideMimeType ) {
++						xhr.overrideMimeType( s.mimeType );
++					}
++
++					// X-Requested-With header
++					// For cross-domain requests, seeing as conditions for a preflight are
++					// akin to a jigsaw puzzle, we simply never set it to be sure.
++					// (it can always be set on a per-request basis or even using ajaxSetup)
++					// For same-domain requests, won't change header if already provided.
++					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
++						headers["X-Requested-With"] = "XMLHttpRequest";
++					}
++
++					// Need an extra try/catch for cross domain requests in Firefox 3
++					try {
++						for ( i in headers ) {
++							xhr.setRequestHeader( i, headers[ i ] );
++						}
++					} catch( err ) {}
++
++					// Do send the request
++					// This may raise an exception which is actually
++					// handled in jQuery.ajax (so no try/catch here)
++					xhr.send( ( s.hasContent && s.data ) || null );
++
++					// Listener
++					callback = function( _, isAbort ) {
++						var status, responseHeaders, statusText, responses;
++
++						// Firefox throws exceptions when accessing properties
++						// of an xhr when a network error occurred
++						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
++						try {
++
++							// Was never called and is aborted or complete
++							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
++
++								// Only called once
++								callback = undefined;
++
++								// Do not keep as active anymore
++								if ( handle ) {
++									xhr.onreadystatechange = jQuery.noop;
++									if ( xhrOnUnloadAbort ) {
++										delete xhrCallbacks[ handle ];
++									}
++								}
++
++								// If it's an abort
++								if ( isAbort ) {
++									// Abort it manually if needed
++									if ( xhr.readyState !== 4 ) {
++										xhr.abort();
++									}
++								} else {
++									responses = {};
++									status = xhr.status;
++									responseHeaders = xhr.getAllResponseHeaders();
++
++									// When requesting binary data, IE6-9 will throw an exception
++									// on any attempt to access responseText (#11426)
++									if ( typeof xhr.responseText === "string" ) {
++										responses.text = xhr.responseText;
++									}
++
++									// Firefox throws an exception when accessing
++									// statusText for faulty cross-domain requests
++									try {
++										statusText = xhr.statusText;
++									} catch( e ) {
++										// We normalize with Webkit giving an empty statusText
++										statusText = "";
++									}
++
++									// Filter status for non standard behaviors
++
++									// If the request is local and we have data: assume a success
++									// (success with no data won't get notified, that's the best we
++									// can do given current implementations)
++									if ( !status && s.isLocal && !s.crossDomain ) {
++										status = responses.text ? 200 : 404;
++									// IE - #1450: sometimes returns 1223 when it should be 204
++									} else if ( status === 1223 ) {
++										status = 204;
++									}
++								}
++							}
++						} catch( firefoxAccessException ) {
++							if ( !isAbort ) {
++								complete( -1, firefoxAccessException );
++							}
++						}
++
++						// Call complete if needed
++						if ( responses ) {
++							complete( status, statusText, responses, responseHeaders );
++						}
++					};
++
++					if ( !s.async ) {
++						// if we're in sync mode we fire the callback
++						callback();
++					} else if ( xhr.readyState === 4 ) {
++						// (IE6 & IE7) if it's in cache and has been
++						// retrieved directly we need to fire the callback
++						setTimeout( callback );
++					} else {
++						handle = ++xhrId;
++						if ( xhrOnUnloadAbort ) {
++							// Create the active xhrs callbacks list if needed
++							// and attach the unload handler
++							if ( !xhrCallbacks ) {
++								xhrCallbacks = {};
++								jQuery( window ).unload( xhrOnUnloadAbort );
++							}
++							// Add to list of active xhrs callbacks
++							xhrCallbacks[ handle ] = callback;
++						}
++						xhr.onreadystatechange = callback;
++					}
++				},
++
++				abort: function() {
++					if ( callback ) {
++						callback( undefined, true );
++					}
++				}
++			};
++		}
++	});
++}
++var fxNow, timerId,
++	rfxtypes = /^(?:toggle|show|hide)$/,
++	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
++	rrun = /queueHooks$/,
++	animationPrefilters = [ defaultPrefilter ],
++	tweeners = {
++		"*": [function( prop, value ) {
++			var end, unit,
++				tween = this.createTween( prop, value ),
++				parts = rfxnum.exec( value ),
++				target = tween.cur(),
++				start = +target || 0,
++				scale = 1,
++				maxIterations = 20;
++
++			if ( parts ) {
++				end = +parts[2];
++				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
++
++				// We need to compute starting value
++				if ( unit !== "px" && start ) {
++					// Iteratively approximate from a nonzero starting point
++					// Prefer the current property, because this process will be trivial if it uses the same units
++					// Fallback to end or a simple constant
++					start = jQuery.css( tween.elem, prop, true ) || end || 1;
++
++					do {
++						// If previous iteration zeroed out, double until we get *something*
++						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
++						scale = scale || ".5";
++
++						// Adjust and apply
++						start = start / scale;
++						jQuery.style( tween.elem, prop, start + unit );
++
++					// Update scale, tolerating zero or NaN from tween.cur()
++					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
++					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
++				}
++
++				tween.unit = unit;
++				tween.start = start;
++				// If a +=/-= token was provided, we're doing a relative animation
++				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
++			}
++			return tween;
++		}]
++	};
++
++// Animations created synchronously will run synchronously
++function createFxNow() {
++	setTimeout(function() {
++		fxNow = undefined;
++	});
++	return ( fxNow = jQuery.now() );
++}
++
++function createTweens( animation, props ) {
++	jQuery.each( props, function( prop, value ) {
++		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
++			index = 0,
++			length = collection.length;
++		for ( ; index < length; index++ ) {
++			if ( collection[ index ].call( animation, prop, value ) ) {
++
++				// we're done with this property
++				return;
++			}
++		}
++	});
++}
++
++function Animation( elem, properties, options ) {
++	var result,
++		stopped,
++		index = 0,
++		length = animationPrefilters.length,
++		deferred = jQuery.Deferred().always( function() {
++			// don't match elem in the :animated selector
++			delete tick.elem;
++		}),
++		tick = function() {
++			if ( stopped ) {
++				return false;
++			}
++			var currentTime = fxNow || createFxNow(),
++				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
++				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
++				temp = remaining / animation.duration || 0,
++				percent = 1 - temp,
++				index = 0,
++				length = animation.tweens.length;
++
++			for ( ; index < length ; index++ ) {
++				animation.tweens[ index ].run( percent );
++			}
++
++			deferred.notifyWith( elem, [ animation, percent, remaining ]);
++
++			if ( percent < 1 && length ) {
++				return remaining;
++			} else {
++				deferred.resolveWith( elem, [ animation ] );
++				return false;
++			}
++		},
++		animation = deferred.promise({
++			elem: elem,
++			props: jQuery.extend( {}, properties ),
++			opts: jQuery.extend( true, { specialEasing: {} }, options ),
++			originalProperties: properties,
++			originalOptions: options,
++			startTime: fxNow || createFxNow(),
++			duration: options.duration,
++			tweens: [],
++			createTween: function( prop, end ) {
++				var tween = jQuery.Tween( elem, animation.opts, prop, end,
++						animation.opts.specialEasing[ prop ] || animation.opts.easing );
++				animation.tweens.push( tween );
++				return tween;
++			},
++			stop: function( gotoEnd ) {
++				var index = 0,
++					// if we are going to the end, we want to run all the tweens
++					// otherwise we skip this part
++					length = gotoEnd ? animation.tweens.length : 0;
++				if ( stopped ) {
++					return this;
++				}
++				stopped = true;
++				for ( ; index < length ; index++ ) {
++					animation.tweens[ index ].run( 1 );
++				}
++
++				// resolve when we played the last frame
++				// otherwise, reject
++				if ( gotoEnd ) {
++					deferred.resolveWith( elem, [ animation, gotoEnd ] );
++				} else {
++					deferred.rejectWith( elem, [ animation, gotoEnd ] );
++				}
++				return this;
++			}
++		}),
++		props = animation.props;
++
++	propFilter( props, animation.opts.specialEasing );
++
++	for ( ; index < length ; index++ ) {
++		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
++		if ( result ) {
++			return result;
++		}
++	}
++
++	createTweens( animation, props );
++
++	if ( jQuery.isFunction( animation.opts.start ) ) {
++		animation.opts.start.call( elem, animation );
++	}
++
++	jQuery.fx.timer(
++		jQuery.extend( tick, {
++			elem: elem,
++			anim: animation,
++			queue: animation.opts.queue
++		})
++	);
++
++	// attach callbacks from options
++	return animation.progress( animation.opts.progress )
++		.done( animation.opts.done, animation.opts.complete )
++		.fail( animation.opts.fail )
++		.always( animation.opts.always );
++}
++
++function propFilter( props, specialEasing ) {
++	var value, name, index, easing, hooks;
++
++	// camelCase, specialEasing and expand cssHook pass
++	for ( index in props ) {
++		name = jQuery.camelCase( index );
++		easing = specialEasing[ name ];
++		value = props[ index ];
++		if ( jQuery.isArray( value ) ) {
++			easing = value[ 1 ];
++			value = props[ index ] = value[ 0 ];
++		}
++
++		if ( index !== name ) {
++			props[ name ] = value;
++			delete props[ index ];
++		}
++
++		hooks = jQuery.cssHooks[ name ];
++		if ( hooks && "expand" in hooks ) {
++			value = hooks.expand( value );
++			delete props[ name ];
++
++			// not quite $.extend, this wont overwrite keys already present.
++			// also - reusing 'index' from above because we have the correct "name"
++			for ( index in value ) {
++				if ( !( index in props ) ) {
++					props[ index ] = value[ index ];
++					specialEasing[ index ] = easing;
++				}
++			}
++		} else {
++			specialEasing[ name ] = easing;
++		}
++	}
++}
++
++jQuery.Animation = jQuery.extend( Animation, {
++
++	tweener: function( props, callback ) {
++		if ( jQuery.isFunction( props ) ) {
++			callback = props;
++			props = [ "*" ];
++		} else {
++			props = props.split(" ");
++		}
++
++		var prop,
++			index = 0,
++			length = props.length;
++
++		for ( ; index < length ; index++ ) {
++			prop = props[ index ];
++			tweeners[ prop ] = tweeners[ prop ] || [];
++			tweeners[ prop ].unshift( callback );
++		}
++	},
++
++	prefilter: function( callback, prepend ) {
++		if ( prepend ) {
++			animationPrefilters.unshift( callback );
++		} else {
++			animationPrefilters.push( callback );
++		}
++	}
++});
++
++function defaultPrefilter( elem, props, opts ) {
++	/*jshint validthis:true */
++	var prop, index, length,
++		value, dataShow, toggle,
++		tween, hooks, oldfire,
++		anim = this,
++		style = elem.style,
++		orig = {},
++		handled = [],
++		hidden = elem.nodeType && isHidden( elem );
++
++	// handle queue: false promises
++	if ( !opts.queue ) {
++		hooks = jQuery._queueHooks( elem, "fx" );
++		if ( hooks.unqueued == null ) {
++			hooks.unqueued = 0;
++			oldfire = hooks.empty.fire;
++			hooks.empty.fire = function() {
++				if ( !hooks.unqueued ) {
++					oldfire();
++				}
++			};
++		}
++		hooks.unqueued++;
++
++		anim.always(function() {
++			// doing this makes sure that the complete handler will be called
++			// before this completes
++			anim.always(function() {
++				hooks.unqueued--;
++				if ( !jQuery.queue( elem, "fx" ).length ) {
++					hooks.empty.fire();
++				}
++			});
++		});
++	}
++
++	// height/width overflow pass
++	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
++		// Make sure that nothing sneaks out
++		// Record all 3 overflow attributes because IE does not
++		// change the overflow attribute when overflowX and
++		// overflowY are set to the same value
++		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
++
++		// Set display property to inline-block for height/width
++		// animations on inline elements that are having width/height animated
++		if ( jQuery.css( elem, "display" ) === "inline" &&
++				jQuery.css( elem, "float" ) === "none" ) {
++
++			// inline-level elements accept inline-block;
++			// block-level elements need to be inline with layout
++			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
++				style.display = "inline-block";
++
++			} else {
++				style.zoom = 1;
++			}
++		}
++	}
++
++	if ( opts.overflow ) {
++		style.overflow = "hidden";
++		if ( !jQuery.support.shrinkWrapBlocks ) {
++			anim.always(function() {
++				style.overflow = opts.overflow[ 0 ];
++				style.overflowX = opts.overflow[ 1 ];
++				style.overflowY = opts.overflow[ 2 ];
++			});
++		}
++	}
++
++
++	// show/hide pass
++	for ( index in props ) {
++		value = props[ index ];
++		if ( rfxtypes.exec( value ) ) {
++			delete props[ index ];
++			toggle = toggle || value === "toggle";
++			if ( value === ( hidden ? "hide" : "show" ) ) {
++				continue;
++			}
++			handled.push( index );
++		}
++	}
++
++	length = handled.length;
++	if ( length ) {
++		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
++		if ( "hidden" in dataShow ) {
++			hidden = dataShow.hidden;
++		}
++
++		// store state if its toggle - enables .stop().toggle() to "reverse"
++		if ( toggle ) {
++			dataShow.hidden = !hidden;
++		}
++		if ( hidden ) {
++			jQuery( elem ).show();
++		} else {
++			anim.done(function() {
++				jQuery( elem ).hide();
++			});
++		}
++		anim.done(function() {
++			var prop;
++			jQuery._removeData( elem, "fxshow" );
++			for ( prop in orig ) {
++				jQuery.style( elem, prop, orig[ prop ] );
++			}
++		});
++		for ( index = 0 ; index < length ; index++ ) {
++			prop = handled[ index ];
++			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
++			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
++
++			if ( !( prop in dataShow ) ) {
++				dataShow[ prop ] = tween.start;
++				if ( hidden ) {
++					tween.end = tween.start;
++					tween.start = prop === "width" || prop === "height" ? 1 : 0;
++				}
++			}
++		}
++	}
++}
++
++function Tween( elem, options, prop, end, easing ) {
++	return new Tween.prototype.init( elem, options, prop, end, easing );
++}
++jQuery.Tween = Tween;
++
++Tween.prototype = {
++	constructor: Tween,
++	init: function( elem, options, prop, end, easing, unit ) {
++		this.elem = elem;
++		this.prop = prop;
++		this.easing = easing || "swing";
++		this.options = options;
++		this.start = this.now = this.cur();
++		this.end = end;
++		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
++	},
++	cur: function() {
++		var hooks = Tween.propHooks[ this.prop ];
++
++		return hooks && hooks.get ?
++			hooks.get( this ) :
++			Tween.propHooks._default.get( this );
++	},
++	run: function( percent ) {
++		var eased,
++			hooks = Tween.propHooks[ this.prop ];
++
++		if ( this.options.duration ) {
++			this.pos = eased = jQuery.easing[ this.easing ](
++				percent, this.options.duration * percent, 0, 1, this.options.duration
++			);
++		} else {
++			this.pos = eased = percent;
++		}
++		this.now = ( this.end - this.start ) * eased + this.start;
++
++		if ( this.options.step ) {
++			this.options.step.call( this.elem, this.now, this );
++		}
++
++		if ( hooks && hooks.set ) {
++			hooks.set( this );
++		} else {
++			Tween.propHooks._default.set( this );
++		}
++		return this;
++	}
++};
++
++Tween.prototype.init.prototype = Tween.prototype;
++
++Tween.propHooks = {
++	_default: {
++		get: function( tween ) {
++			var result;
++
++			if ( tween.elem[ tween.prop ] != null &&
++				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
++				return tween.elem[ tween.prop ];
++			}
++
++			// passing an empty string as a 3rd parameter to .css will automatically
++			// attempt a parseFloat and fallback to a string if the parse fails
++			// so, simple values such as "10px" are parsed to Float.
++			// complex values such as "rotate(1rad)" are returned as is.
++			result = jQuery.css( tween.elem, tween.prop, "" );
++			// Empty strings, null, undefined and "auto" are converted to 0.
++			return !result || result === "auto" ? 0 : result;
++		},
++		set: function( tween ) {
++			// use step hook for back compat - use cssHook if its there - use .style if its
++			// available and use plain properties where available
++			if ( jQuery.fx.step[ tween.prop ] ) {
++				jQuery.fx.step[ tween.prop ]( tween );
++			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
++				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
++			} else {
++				tween.elem[ tween.prop ] = tween.now;
++			}
++		}
++	}
++};
++
++// Remove in 2.0 - this supports IE8's panic based approach
++// to setting things on disconnected nodes
++
++Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
++	set: function( tween ) {
++		if ( tween.elem.nodeType && tween.elem.parentNode ) {
++			tween.elem[ tween.prop ] = tween.now;
++		}
++	}
++};
++
++jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
++	var cssFn = jQuery.fn[ name ];
++	jQuery.fn[ name ] = function( speed, easing, callback ) {
++		return speed == null || typeof speed === "boolean" ?
++			cssFn.apply( this, arguments ) :
++			this.animate( genFx( name, true ), speed, easing, callback );
++	};
++});
++
++jQuery.fn.extend({
++	fadeTo: function( speed, to, easing, callback ) {
++
++		// show any hidden elements after setting opacity to 0
++		return this.filter( isHidden ).css( "opacity", 0 ).show()
++
++			// animate to the value specified
++			.end().animate({ opacity: to }, speed, easing, callback );
++	},
++	animate: function( prop, speed, easing, callback ) {
++		var empty = jQuery.isEmptyObject( prop ),
++			optall = jQuery.speed( speed, easing, callback ),
++			doAnimation = function() {
++				// Operate on a copy of prop so per-property easing won't be lost
++				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
++				doAnimation.finish = function() {
++					anim.stop( true );
++				};
++				// Empty animations, or finishing resolves immediately
++				if ( empty || jQuery._data( this, "finish" ) ) {
++					anim.stop( true );
++				}
++			};
++			doAnimation.finish = doAnimation;
++
++		return empty || optall.queue === false ?
++			this.each( doAnimation ) :
++			this.queue( optall.queue, doAnimation );
++	},
++	stop: function( type, clearQueue, gotoEnd ) {
++		var stopQueue = function( hooks ) {
++			var stop = hooks.stop;
++			delete hooks.stop;
++			stop( gotoEnd );
++		};
++
++		if ( typeof type !== "string" ) {
++			gotoEnd = clearQueue;
++			clearQueue = type;
++			type = undefined;
++		}
++		if ( clearQueue && type !== false ) {
++			this.queue( type || "fx", [] );
++		}
++
++		return this.each(function() {
++			var dequeue = true,
++				index = type != null && type + "queueHooks",
++				timers = jQuery.timers,
++				data = jQuery._data( this );
++
++			if ( index ) {
++				if ( data[ index ] && data[ index ].stop ) {
++					stopQueue( data[ index ] );
++				}
++			} else {
++				for ( index in data ) {
++					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
++						stopQueue( data[ index ] );
++					}
++				}
++			}
++
++			for ( index = timers.length; index--; ) {
++				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
++					timers[ index ].anim.stop( gotoEnd );
++					dequeue = false;
++					timers.splice( index, 1 );
++				}
++			}
++
++			// start the next in the queue if the last step wasn't forced
++			// timers currently will call their complete callbacks, which will dequeue
++			// but only if they were gotoEnd
++			if ( dequeue || !gotoEnd ) {
++				jQuery.dequeue( this, type );
++			}
++		});
++	},
++	finish: function( type ) {
++		if ( type !== false ) {
++			type = type || "fx";
++		}
++		return this.each(function() {
++			var index,
++				data = jQuery._data( this ),
++				queue = data[ type + "queue" ],
++				hooks = data[ type + "queueHooks" ],
++				timers = jQuery.timers,
++				length = queue ? queue.length : 0;
++
++			// enable finishing flag on private data
++			data.finish = true;
++
++			// empty the queue first
++			jQuery.queue( this, type, [] );
++
++			if ( hooks && hooks.cur && hooks.cur.finish ) {
++				hooks.cur.finish.call( this );
++			}
++
++			// look for any active animations, and finish them
++			for ( index = timers.length; index--; ) {
++				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
++					timers[ index ].anim.stop( true );
++					timers.splice( index, 1 );
++				}
++			}
++
++			// look for any animations in the old queue and finish them
++			for ( index = 0; index < length; index++ ) {
++				if ( queue[ index ] && queue[ index ].finish ) {
++					queue[ index ].finish.call( this );
++				}
++			}
++
++			// turn off finishing flag
++			delete data.finish;
++		});
++	}
++});
++
++// Generate parameters to create a standard animation
++function genFx( type, includeWidth ) {
++	var which,
++		attrs = { height: type },
++		i = 0;
++
++	// if we include width, step value is 1 to do all cssExpand values,
++	// if we don't include width, step value is 2 to skip over Left and Right
++	includeWidth = includeWidth? 1 : 0;
++	for( ; i < 4 ; i += 2 - includeWidth ) {
++		which = cssExpand[ i ];
++		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
++	}
++
++	if ( includeWidth ) {
++		attrs.opacity = attrs.width = type;
++	}
++
++	return attrs;
++}
++
++// Generate shortcuts for custom animations
++jQuery.each({
++	slideDown: genFx("show"),
++	slideUp: genFx("hide"),
++	slideToggle: genFx("toggle"),
++	fadeIn: { opacity: "show" },
++	fadeOut: { opacity: "hide" },
++	fadeToggle: { opacity: "toggle" }
++}, function( name, props ) {
++	jQuery.fn[ name ] = function( speed, easing, callback ) {
++		return this.animate( props, speed, easing, callback );
++	};
++});
++
++jQuery.speed = function( speed, easing, fn ) {
++	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
++		complete: fn || !fn && easing ||
++			jQuery.isFunction( speed ) && speed,
++		duration: speed,
++		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
++	};
++
++	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
++		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
++
++	// normalize opt.queue - true/undefined/null -> "fx"
++	if ( opt.queue == null || opt.queue === true ) {
++		opt.queue = "fx";
++	}
++
++	// Queueing
++	opt.old = opt.complete;
++
++	opt.complete = function() {
++		if ( jQuery.isFunction( opt.old ) ) {
++			opt.old.call( this );
++		}
++
++		if ( opt.queue ) {
++			jQuery.dequeue( this, opt.queue );
++		}
++	};
++
++	return opt;
++};
++
++jQuery.easing = {
++	linear: function( p ) {
++		return p;
++	},
++	swing: function( p ) {
++		return 0.5 - Math.cos( p*Math.PI ) / 2;
++	}
++};
++
++jQuery.timers = [];
++jQuery.fx = Tween.prototype.init;
++jQuery.fx.tick = function() {
++	var timer,
++		timers = jQuery.timers,
++		i = 0;
++
++	fxNow = jQuery.now();
++
++	for ( ; i < timers.length; i++ ) {
++		timer = timers[ i ];
++		// Checks the timer has not already been removed
++		if ( !timer() && timers[ i ] === timer ) {
++			timers.splice( i--, 1 );
++		}
++	}
++
++	if ( !timers.length ) {
++		jQuery.fx.stop();
++	}
++	fxNow = undefined;
++};
++
++jQuery.fx.timer = function( timer ) {
++	if ( timer() && jQuery.timers.push( timer ) ) {
++		jQuery.fx.start();
++	}
++};
++
++jQuery.fx.interval = 13;
++
++jQuery.fx.start = function() {
++	if ( !timerId ) {
++		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
++	}
++};
++
++jQuery.fx.stop = function() {
++	clearInterval( timerId );
++	timerId = null;
++};
++
++jQuery.fx.speeds = {
++	slow: 600,
++	fast: 200,
++	// Default speed
++	_default: 400
++};
++
++// Back Compat <1.8 extension point
++jQuery.fx.step = {};
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.animated = function( elem ) {
++		return jQuery.grep(jQuery.timers, function( fn ) {
++			return elem === fn.elem;
++		}).length;
++	};
++}
++jQuery.fn.offset = function( options ) {
++	if ( arguments.length ) {
++		return options === undefined ?
++			this :
++			this.each(function( i ) {
++				jQuery.offset.setOffset( this, options, i );
++			});
++	}
++
++	var docElem, win,
++		box = { top: 0, left: 0 },
++		elem = this[ 0 ],
++		doc = elem && elem.ownerDocument;
++
++	if ( !doc ) {
++		return;
++	}
++
++	docElem = doc.documentElement;
++
++	// Make sure it's not a disconnected DOM node
++	if ( !jQuery.contains( docElem, elem ) ) {
++		return box;
++	}
++
++	// If we don't have gBCR, just use 0,0 rather than error
++	// BlackBerry 5, iOS 3 (original iPhone)
++	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
++		box = elem.getBoundingClientRect();
++	}
++	win = getWindow( doc );
++	return {
++		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
++		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
++	};
++};
++
++jQuery.offset = {
++
++	setOffset: function( elem, options, i ) {
++		var position = jQuery.css( elem, "position" );
++
++		// set position first, in-case top/left are set even on static elem
++		if ( position === "static" ) {
++			elem.style.position = "relative";
++		}
++
++		var curElem = jQuery( elem ),
++			curOffset = curElem.offset(),
++			curCSSTop = jQuery.css( elem, "top" ),
++			curCSSLeft = jQuery.css( elem, "left" ),
++			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
++			props = {}, curPosition = {}, curTop, curLeft;
++
++		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
++		if ( calculatePosition ) {
++			curPosition = curElem.position();
++			curTop = curPosition.top;
++			curLeft = curPosition.left;
++		} else {
++			curTop = parseFloat( curCSSTop ) || 0;
++			curLeft = parseFloat( curCSSLeft ) || 0;
++		}
++
++		if ( jQuery.isFunction( options ) ) {
++			options = options.call( elem, i, curOffset );
++		}
++
++		if ( options.top != null ) {
++			props.top = ( options.top - curOffset.top ) + curTop;
++		}
++		if ( options.left != null ) {
++			props.left = ( options.left - curOffset.left ) + curLeft;
++		}
++
++		if ( "using" in options ) {
++			options.using.call( elem, props );
++		} else {
++			curElem.css( props );
++		}
++	}
++};
++
++
++jQuery.fn.extend({
++
++	position: function() {
++		if ( !this[ 0 ] ) {
++			return;
++		}
++
++		var offsetParent, offset,
++			parentOffset = { top: 0, left: 0 },
++			elem = this[ 0 ];
++
++		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
++		if ( jQuery.css( elem, "position" ) === "fixed" ) {
++			// we assume that getBoundingClientRect is available when computed position is fixed
++			offset = elem.getBoundingClientRect();
++		} else {
++			// Get *real* offsetParent
++			offsetParent = this.offsetParent();
++
++			// Get correct offsets
++			offset = this.offset();
++			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
++				parentOffset = offsetParent.offset();
++			}
++
++			// Add offsetParent borders
++			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
++			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
++		}
++
++		// Subtract parent offsets and element margins
++		// note: when an element has margin: auto the offsetLeft and marginLeft
++		// are the same in Safari causing offset.left to incorrectly be 0
++		return {
++			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
++			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
++		};
++	},
++
++	offsetParent: function() {
++		return this.map(function() {
++			var offsetParent = this.offsetParent || document.documentElement;
++			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
++				offsetParent = offsetParent.offsetParent;
++			}
++			return offsetParent || document.documentElement;
++		});
++	}
++});
++
++
++// Create scrollLeft and scrollTop methods
++jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
++	var top = /Y/.test( prop );
++
++	jQuery.fn[ method ] = function( val ) {
++		return jQuery.access( this, function( elem, method, val ) {
++			var win = getWindow( elem );
++
++			if ( val === undefined ) {
++				return win ? (prop in win) ? win[ prop ] :
++					win.document.documentElement[ method ] :
++					elem[ method ];
++			}
++
++			if ( win ) {
++				win.scrollTo(
++					!top ? val : jQuery( win ).scrollLeft(),
++					top ? val : jQuery( win ).scrollTop()
++				);
++
++			} else {
++				elem[ method ] = val;
++			}
++		}, method, val, arguments.length, null );
++	};
++});
++
++function getWindow( elem ) {
++	return jQuery.isWindow( elem ) ?
++		elem :
++		elem.nodeType === 9 ?
++			elem.defaultView || elem.parentWindow :
++			false;
++}
++// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
++jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
++	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
++		// margin is only for outerHeight, outerWidth
++		jQuery.fn[ funcName ] = function( margin, value ) {
++			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
++				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
++
++			return jQuery.access( this, function( elem, type, value ) {
++				var doc;
++
++				if ( jQuery.isWindow( elem ) ) {
++					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
++					// isn't a whole lot we can do. See pull request at this URL for discussion:
++					// https://github.com/jquery/jquery/pull/764
++					return elem.document.documentElement[ "client" + name ];
++				}
++
++				// Get document width or height
++				if ( elem.nodeType === 9 ) {
++					doc = elem.documentElement;
++
++					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
++					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
++					return Math.max(
++						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
++						elem.body[ "offset" + name ], doc[ "offset" + name ],
++						doc[ "client" + name ]
++					);
++				}
++
++				return value === undefined ?
++					// Get width or height on the element, requesting but not forcing parseFloat
++					jQuery.css( elem, type, extra ) :
++
++					// Set width or height on the element
++					jQuery.style( elem, type, value, extra );
++			}, type, chainable ? margin : undefined, chainable, null );
++		};
++	});
++});
++// Limit scope pollution from any deprecated API
++// (function() {
++
++// })();
++// Expose jQuery to the global object
++window.jQuery = window.$ = jQuery;
++
++// Expose jQuery as an AMD module, but only for AMD loaders that
++// understand the issues with loading multiple versions of jQuery
++// in a page that all might call define(). The loader will indicate
++// they have special allowances for multiple jQuery versions by
++// specifying define.amd.jQuery = true. Register as a named module,
++// since jQuery can be concatenated with other files that may use define,
++// but not use a proper concatenation script that understands anonymous
++// AMD modules. A named AMD is safest and most robust way to register.
++// Lowercase jquery is used because AMD module names are derived from
++// file names, and jQuery is normally delivered in a lowercase file name.
++// Do this after creating the global so that if an AMD module wants to call
++// noConflict to hide this version of jQuery, it will work.
++if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
++	define( "jquery", [], function () { return jQuery; } );
++}
++
++})( window );
+Index: ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.min.js	(revision 15487)
+@@ -0,0 +1,7 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td>&#160;</td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);
++return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html("&#160;"),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-pulsate.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-pulsate.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-pulsate.js	(revision 15487)
+@@ -0,0 +1,63 @@
++/*!
++ * jQuery UI Effects Pulsate 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/pulsate-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.pulsate = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		showhide = ( show || mode === "hide" ),
++
++		// showing or hiding leaves of the "last" animation
++		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
++		duration = o.duration / anims,
++		animateTo = 0,
++		queue = elem.queue(),
++		queuelen = queue.length,
++		i;
++
++	if ( show || !elem.is(":visible")) {
++		elem.css( "opacity", 0 ).show();
++		animateTo = 1;
++	}
++
++	// anims - 1 opacity "toggles"
++	for ( i = 1; i < anims; i++ ) {
++		elem.animate({
++			opacity: animateTo
++		}, duration, o.easing );
++		animateTo = 1 - animateTo;
++	}
++
++	elem.animate({
++		opacity: animateTo
++	}, duration, o.easing);
++
++	elem.queue(function() {
++		if ( hide ) {
++			elem.hide();
++		}
++		done();
++	});
++
++	// We just queued up "anims" animations, we need to put them next in the queue
++	if ( queuelen > 1 ) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	elem.dequeue();
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.droppable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.droppable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.droppable.js	(revision 15487)
+@@ -0,0 +1,372 @@
++/*!
++ * jQuery UI Droppable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/droppable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.draggable.js
++ */
++(function( $, undefined ) {
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++$.widget("ui.droppable", {
++	version: "1.10.3",
++	widgetEventPrefix: "drop",
++	options: {
++		accept: "*",
++		activeClass: false,
++		addClasses: true,
++		greedy: false,
++		hoverClass: false,
++		scope: "default",
++		tolerance: "intersect",
++
++		// callbacks
++		activate: null,
++		deactivate: null,
++		drop: null,
++		out: null,
++		over: null
++	},
++	_create: function() {
++
++		var o = this.options,
++			accept = o.accept;
++
++		this.isover = false;
++		this.isout = true;
++
++		this.accept = $.isFunction(accept) ? accept : function(d) {
++			return d.is(accept);
++		};
++
++		//Store the droppable's proportions
++		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
++
++		// Add the reference and positions to the manager
++		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
++		$.ui.ddmanager.droppables[o.scope].push(this);
++
++		(o.addClasses && this.element.addClass("ui-droppable"));
++
++	},
++
++	_destroy: function() {
++		var i = 0,
++			drop = $.ui.ddmanager.droppables[this.options.scope];
++
++		for ( ; i < drop.length; i++ ) {
++			if ( drop[i] === this ) {
++				drop.splice(i, 1);
++			}
++		}
++
++		this.element.removeClass("ui-droppable ui-droppable-disabled");
++	},
++
++	_setOption: function(key, value) {
++
++		if(key === "accept") {
++			this.accept = $.isFunction(value) ? value : function(d) {
++				return d.is(value);
++			};
++		}
++		$.Widget.prototype._setOption.apply(this, arguments);
++	},
++
++	_activate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.addClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("activate", event, this.ui(draggable));
++		}
++	},
++
++	_deactivate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.removeClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("deactivate", event, this.ui(draggable));
++		}
++	},
++
++	_over: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.addClass(this.options.hoverClass);
++			}
++			this._trigger("over", event, this.ui(draggable));
++		}
++
++	},
++
++	_out: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("out", event, this.ui(draggable));
++		}
++
++	},
++
++	_drop: function(event,custom) {
++
++		var draggable = custom || $.ui.ddmanager.current,
++			childrenIntersection = false;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return false;
++		}
++
++		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
++			var inst = $.data(this, "ui-droppable");
++			if(
++				inst.options.greedy &&
++				!inst.options.disabled &&
++				inst.options.scope === draggable.options.scope &&
++				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
++				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
++			) { childrenIntersection = true; return false; }
++		});
++		if(childrenIntersection) {
++			return false;
++		}
++
++		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.activeClass) {
++				this.element.removeClass(this.options.activeClass);
++			}
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("drop", event, this.ui(draggable));
++			return this.element;
++		}
++
++		return false;
++
++	},
++
++	ui: function(c) {
++		return {
++			draggable: (c.currentItem || c.element),
++			helper: c.helper,
++			position: c.position,
++			offset: c.positionAbs
++		};
++	}
++
++});
++
++$.ui.intersect = function(draggable, droppable, toleranceMode) {
++
++	if (!droppable.offset) {
++		return false;
++	}
++
++	var draggableLeft, draggableTop,
++		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
++		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
++		l = droppable.offset.left, r = l + droppable.proportions.width,
++		t = droppable.offset.top, b = t + droppable.proportions.height;
++
++	switch (toleranceMode) {
++		case "fit":
++			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
++		case "intersect":
++			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
++				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
++				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
++		case "pointer":
++			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
++			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
++			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
++		case "touch":
++			return (
++				(y1 >= t && y1 <= b) ||	// Top edge touching
++				(y2 >= t && y2 <= b) ||	// Bottom edge touching
++				(y1 < t && y2 > b)		// Surrounded vertically
++			) && (
++				(x1 >= l && x1 <= r) ||	// Left edge touching
++				(x2 >= l && x2 <= r) ||	// Right edge touching
++				(x1 < l && x2 > r)		// Surrounded horizontally
++			);
++		default:
++			return false;
++		}
++
++};
++
++/*
++	This manager tracks offsets of draggables and droppables
++*/
++$.ui.ddmanager = {
++	current: null,
++	droppables: { "default": [] },
++	prepareOffsets: function(t, event) {
++
++		var i, j,
++			m = $.ui.ddmanager.droppables[t.options.scope] || [],
++			type = event ? event.type : null, // workaround for #2317
++			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
++
++		droppablesLoop: for (i = 0; i < m.length; i++) {
++
++			//No disabled and non-accepted
++			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
++				continue;
++			}
++
++			// Filter out elements in the current dragged item
++			for (j=0; j < list.length; j++) {
++				if(list[j] === m[i].element[0]) {
++					m[i].proportions.height = 0;
++					continue droppablesLoop;
++				}
++			}
++
++			m[i].visible = m[i].element.css("display") !== "none";
++			if(!m[i].visible) {
++				continue;
++			}
++
++			//Activate the droppable if used directly from draggables
++			if(type === "mousedown") {
++				m[i]._activate.call(m[i], event);
++			}
++
++			m[i].offset = m[i].element.offset();
++			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
++
++		}
++
++	},
++	drop: function(draggable, event) {
++
++		var dropped = false;
++		// Create a copy of the droppables in case the list changes during the drop (#9116)
++		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
++
++			if(!this.options) {
++				return;
++			}
++			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
++				dropped = this._drop.call(this, event) || dropped;
++			}
++
++			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++				this.isout = true;
++				this.isover = false;
++				this._deactivate.call(this, event);
++			}
++
++		});
++		return dropped;
++
++	},
++	dragStart: function( draggable, event ) {
++		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
++		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
++			if( !draggable.options.refreshPositions ) {
++				$.ui.ddmanager.prepareOffsets( draggable, event );
++			}
++		});
++	},
++	drag: function(draggable, event) {
++
++		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
++		if(draggable.options.refreshPositions) {
++			$.ui.ddmanager.prepareOffsets(draggable, event);
++		}
++
++		//Run through all droppables and check their positions based on specific tolerance options
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(this.options.disabled || this.greedyChild || !this.visible) {
++				return;
++			}
++
++			var parentInstance, scope, parent,
++				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
++				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
++			if(!c) {
++				return;
++			}
++
++			if (this.options.greedy) {
++				// find droppable parents with same scope
++				scope = this.options.scope;
++				parent = this.element.parents(":data(ui-droppable)").filter(function () {
++					return $.data(this, "ui-droppable").options.scope === scope;
++				});
++
++				if (parent.length) {
++					parentInstance = $.data(parent[0], "ui-droppable");
++					parentInstance.greedyChild = (c === "isover");
++				}
++			}
++
++			// we just moved into a greedy child
++			if (parentInstance && c === "isover") {
++				parentInstance.isover = false;
++				parentInstance.isout = true;
++				parentInstance._out.call(parentInstance, event);
++			}
++
++			this[c] = true;
++			this[c === "isout" ? "isover" : "isout"] = false;
++			this[c === "isover" ? "_over" : "_out"].call(this, event);
++
++			// we just moved out of a greedy child
++			if (parentInstance && c === "isout") {
++				parentInstance.isout = false;
++				parentInstance.isover = true;
++				parentInstance._over.call(parentInstance, event);
++			}
++		});
++
++	},
++	dragStop: function( draggable, event ) {
++		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
++		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
++		if( !draggable.options.refreshPositions ) {
++			$.ui.ddmanager.prepareOffsets( draggable, event );
++		}
++	}
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.draggable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.draggable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.draggable.js	(revision 15487)
+@@ -0,0 +1,958 @@
++/*!
++ * jQuery UI Draggable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/draggable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.draggable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "drag",
++	options: {
++		addClasses: true,
++		appendTo: "parent",
++		axis: false,
++		connectToSortable: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		iframeFix: false,
++		opacity: false,
++		refreshPositions: false,
++		revert: false,
++		revertDuration: 500,
++		scope: "default",
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		snap: false,
++		snapMode: "both",
++		snapTolerance: 20,
++		stack: false,
++		zIndex: false,
++
++		// callbacks
++		drag: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
++			this.element[0].style.position = "relative";
++		}
++		if (this.options.addClasses){
++			this.element.addClass("ui-draggable");
++		}
++		if (this.options.disabled){
++			this.element.addClass("ui-draggable-disabled");
++		}
++
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function(event) {
++
++		var o = this.options;
++
++		// among others, prevent a drag on a resizable-handle
++		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
++			return false;
++		}
++
++		//Quit if we're not on a valid handle
++		this.handle = this._getHandle(event);
++		if (!this.handle) {
++			return false;
++		}
++
++		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
++			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
++			.css({
++				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
++				position: "absolute", opacity: "0.001", zIndex: 1000
++			})
++			.css($(this).offset())
++			.appendTo("body");
++		});
++
++		return true;
++
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options;
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		this.helper.addClass("ui-draggable-dragging");
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		//If ddmanager is used for droppables, set the global draggable
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Store the helper's css position
++		this.cssPosition = this.helper.css( "position" );
++		this.scrollParent = this.helper.scrollParent();
++		this.offsetParent = this.helper.offsetParent();
++		this.offsetParentCssPosition = this.offsetParent.css( "position" );
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.positionAbs = this.element.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		//Reset scroll cache
++		this.offset.scroll = false;
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this.position = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Set a containment if given in the options
++		this._setContainment();
++
++		//Trigger event + callbacks
++		if(this._trigger("start", event) === false) {
++			this._clear();
++			return false;
++		}
++
++		//Recache the helper size
++		this._cacheHelperProportions();
++
++		//Prepare the droppable offsets
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++
++		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
++		if ( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStart(this, event);
++		}
++
++		return true;
++	},
++
++	_mouseDrag: function(event, noPropagation) {
++		// reset any necessary cached properties (see #5009)
++		if ( this.offsetParentCssPosition === "fixed" ) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Call plugins and callbacks and use the resulting position if something is returned
++		if (!noPropagation) {
++			var ui = this._uiHash();
++			if(this._trigger("drag", event, ui) === false) {
++				this._mouseUp({});
++				return false;
++			}
++			this.position = ui.position;
++		}
++
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		//If we are using droppables, inform the manager about the drop
++		var that = this,
++			dropped = false;
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			dropped = $.ui.ddmanager.drop(this, event);
++		}
++
++		//if a drop comes from outside (a sortable)
++		if(this.dropped) {
++			dropped = this.dropped;
++			this.dropped = false;
++		}
++
++		//if the original element is no longer in the DOM don't bother to continue (see #8269)
++		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
++			return false;
++		}
++
++		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
++			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
++				if(that._trigger("stop", event) !== false) {
++					that._clear();
++				}
++			});
++		} else {
++			if(this._trigger("stop", event) !== false) {
++				this._clear();
++			}
++		}
++
++		return false;
++	},
++
++	_mouseUp: function(event) {
++		//Remove frame helpers
++		$("div.ui-draggable-iframeFix").each(function() {
++			this.parentNode.removeChild(this);
++		});
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
++		if( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStop(this, event);
++		}
++
++		return $.ui.mouse.prototype._mouseUp.call(this, event);
++	},
++
++	cancel: function() {
++
++		if(this.helper.is(".ui-draggable-dragging")) {
++			this._mouseUp({});
++		} else {
++			this._clear();
++		}
++
++		return this;
++
++	},
++
++	_getHandle: function(event) {
++		return this.options.handle ?
++			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
++			true;
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
++
++		if(!helper.parents("body").length) {
++			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
++		}
++
++		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
++			helper.css("position", "absolute");
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++		//Get the offsetParent and cache its position
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		//This needs to be actually done for all browsers, since pageX/pageY includes this information
++		//Ugly IE fix
++		if((this.offsetParent[0] === document.body) ||
++			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.element.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.element.css("marginLeft"),10) || 0),
++			top: (parseInt(this.element.css("marginTop"),10) || 0),
++			right: (parseInt(this.element.css("marginRight"),10) || 0),
++			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var over, c, ce,
++			o = this.options;
++
++		if ( !o.containment ) {
++			this.containment = null;
++			return;
++		}
++
++		if ( o.containment === "window" ) {
++			this.containment = [
++				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
++				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
++				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
++				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment === "document") {
++			this.containment = [
++				0,
++				0,
++				$( document ).width() - this.helperProportions.width - this.margins.left,
++				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment.constructor === Array ) {
++			this.containment = o.containment;
++			return;
++		}
++
++		if ( o.containment === "parent" ) {
++			o.containment = this.helper[ 0 ].parentNode;
++		}
++
++		c = $( o.containment );
++		ce = c[ 0 ];
++
++		if( !ce ) {
++			return;
++		}
++
++		over = c.css( "overflow" ) !== "hidden";
++
++		this.containment = [
++			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
++			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
++			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
++			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
++		];
++		this.relative_container = c;
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var containment, co, top, left,
++			o = this.options,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
++			pageX = event.pageX,
++			pageY = event.pageY;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		// If we are not dragging yet, we won't check for options
++		if ( this.originalPosition ) {
++			if ( this.containment ) {
++				if ( this.relative_container ){
++					co = this.relative_container.offset();
++					containment = [
++						this.containment[ 0 ] + co.left,
++						this.containment[ 1 ] + co.top,
++						this.containment[ 2 ] + co.left,
++						this.containment[ 3 ] + co.top
++					];
++				}
++				else {
++					containment = this.containment;
++				}
++
++				if(event.pageX - this.offset.click.left < containment[0]) {
++					pageX = containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < containment[1]) {
++					pageY = containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > containment[2]) {
++					pageX = containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > containment[3]) {
++					pageY = containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
++				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
++				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
++				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																	// The absolute mouse position
++				this.offset.click.top	-												// Click offset (relative to the element)
++				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
++			),
++			left: (
++				pageX -																	// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
++			)
++		};
++
++	},
++
++	_clear: function() {
++		this.helper.removeClass("ui-draggable-dragging");
++		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
++			this.helper.remove();
++		}
++		this.helper = null;
++		this.cancelHelperRemoval = false;
++	},
++
++	// From now on bulk stuff - mainly helpers
++
++	_trigger: function(type, event, ui) {
++		ui = ui || this._uiHash();
++		$.ui.plugin.call(this, type, [event, ui]);
++		//The absolute position has to be recalculated after plugins
++		if(type === "drag") {
++			this.positionAbs = this._convertPositionTo("absolute");
++		}
++		return $.Widget.prototype._trigger.call(this, type, event, ui);
++	},
++
++	plugins: {},
++
++	_uiHash: function() {
++		return {
++			helper: this.helper,
++			position: this.position,
++			originalPosition: this.originalPosition,
++			offset: this.positionAbs
++		};
++	}
++
++});
++
++$.ui.plugin.add("draggable", "connectToSortable", {
++	start: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), o = inst.options,
++			uiSortable = $.extend({}, ui, { item: inst.element });
++		inst.sortables = [];
++		$(o.connectToSortable).each(function() {
++			var sortable = $.data(this, "ui-sortable");
++			if (sortable && !sortable.options.disabled) {
++				inst.sortables.push({
++					instance: sortable,
++					shouldRevert: sortable.options.revert
++				});
++				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
++				sortable._trigger("activate", event, uiSortable);
++			}
++		});
++
++	},
++	stop: function(event, ui) {
++
++		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
++		var inst = $(this).data("ui-draggable"),
++			uiSortable = $.extend({}, ui, { item: inst.element });
++
++		$.each(inst.sortables, function() {
++			if(this.instance.isOver) {
++
++				this.instance.isOver = 0;
++
++				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
++				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
++
++				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
++				if(this.shouldRevert) {
++					this.instance.options.revert = this.shouldRevert;
++				}
++
++				//Trigger the stop of the sortable
++				this.instance._mouseStop(event);
++
++				this.instance.options.helper = this.instance.options._helper;
++
++				//If the helper has been the original item, restore properties in the sortable
++				if(inst.options.helper === "original") {
++					this.instance.currentItem.css({ top: "auto", left: "auto" });
++				}
++
++			} else {
++				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
++				this.instance._trigger("deactivate", event, uiSortable);
++			}
++
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), that = this;
++
++		$.each(inst.sortables, function() {
++
++			var innermostIntersecting = false,
++				thisSortable = this;
++
++			//Copy over some variables to allow calling the sortable's native _intersectsWith
++			this.instance.positionAbs = inst.positionAbs;
++			this.instance.helperProportions = inst.helperProportions;
++			this.instance.offset.click = inst.offset.click;
++
++			if(this.instance._intersectsWith(this.instance.containerCache)) {
++				innermostIntersecting = true;
++				$.each(inst.sortables, function () {
++					this.instance.positionAbs = inst.positionAbs;
++					this.instance.helperProportions = inst.helperProportions;
++					this.instance.offset.click = inst.offset.click;
++					if (this !== thisSortable &&
++						this.instance._intersectsWith(this.instance.containerCache) &&
++						$.contains(thisSortable.instance.element[0], this.instance.element[0])
++					) {
++						innermostIntersecting = false;
++					}
++					return innermostIntersecting;
++				});
++			}
++
++
++			if(innermostIntersecting) {
++				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
++				if(!this.instance.isOver) {
++
++					this.instance.isOver = 1;
++					//Now we fake the start of dragging for the sortable instance,
++					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
++					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
++					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
++					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
++					this.instance.options.helper = function() { return ui.helper[0]; };
++
++					event.target = this.instance.currentItem[0];
++					this.instance._mouseCapture(event, true);
++					this.instance._mouseStart(event, true, true);
++
++					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
++					this.instance.offset.click.top = inst.offset.click.top;
++					this.instance.offset.click.left = inst.offset.click.left;
++					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
++					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
++
++					inst._trigger("toSortable", event);
++					inst.dropped = this.instance.element; //draggable revert needs that
++					//hack so receive/update callbacks work (mostly)
++					inst.currentItem = inst.element;
++					this.instance.fromOutside = inst;
++
++				}
++
++				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
++				if(this.instance.currentItem) {
++					this.instance._mouseDrag(event);
++				}
++
++			} else {
++
++				//If it doesn't intersect with the sortable, and it intersected before,
++				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
++				if(this.instance.isOver) {
++
++					this.instance.isOver = 0;
++					this.instance.cancelHelperRemoval = true;
++
++					//Prevent reverting on this forced stop
++					this.instance.options.revert = false;
++
++					// The out event needs to be triggered independently
++					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
++
++					this.instance._mouseStop(event, true);
++					this.instance.options.helper = this.instance.options._helper;
++
++					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
++					this.instance.currentItem.remove();
++					if(this.instance.placeholder) {
++						this.instance.placeholder.remove();
++					}
++
++					inst._trigger("fromSortable", event);
++					inst.dropped = false; //draggable revert needs that
++				}
++
++			}
++
++		});
++
++	}
++});
++
++$.ui.plugin.add("draggable", "cursor", {
++	start: function() {
++		var t = $("body"), o = $(this).data("ui-draggable").options;
++		if (t.css("cursor")) {
++			o._cursor = t.css("cursor");
++		}
++		t.css("cursor", o.cursor);
++	},
++	stop: function() {
++		var o = $(this).data("ui-draggable").options;
++		if (o._cursor) {
++			$("body").css("cursor", o._cursor);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "opacity", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("opacity")) {
++			o._opacity = t.css("opacity");
++		}
++		t.css("opacity", o.opacity);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._opacity) {
++			$(ui.helper).css("opacity", o._opacity);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "scroll", {
++	start: function() {
++		var i = $(this).data("ui-draggable");
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++			i.overflowOffset = i.scrollParent.offset();
++		}
++	},
++	drag: function( event ) {
++
++		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
++
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++
++			if(!o.axis || o.axis !== "x") {
++				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++			}
++
++		} else {
++
++			if(!o.axis || o.axis !== "x") {
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++			}
++
++		}
++
++		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(i, event);
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "snap", {
++	start: function() {
++
++		var i = $(this).data("ui-draggable"),
++			o = i.options;
++
++		i.snapElements = [];
++
++		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
++			var $t = $(this),
++				$o = $t.offset();
++			if(this !== i.element[0]) {
++				i.snapElements.push({
++					item: this,
++					width: $t.outerWidth(), height: $t.outerHeight(),
++					top: $o.top, left: $o.left
++				});
++			}
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var ts, bs, ls, rs, l, r, t, b, i, first,
++			inst = $(this).data("ui-draggable"),
++			o = inst.options,
++			d = o.snapTolerance,
++			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
++			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
++
++		for (i = inst.snapElements.length - 1; i >= 0; i--){
++
++			l = inst.snapElements[i].left;
++			r = l + inst.snapElements[i].width;
++			t = inst.snapElements[i].top;
++			b = t + inst.snapElements[i].height;
++
++			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
++				if(inst.snapElements[i].snapping) {
++					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++				}
++				inst.snapElements[i].snapping = false;
++				continue;
++			}
++
++			if(o.snapMode !== "inner") {
++				ts = Math.abs(t - y2) <= d;
++				bs = Math.abs(b - y1) <= d;
++				ls = Math.abs(l - x2) <= d;
++				rs = Math.abs(r - x1) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
++				}
++			}
++
++			first = (ts || bs || ls || rs);
++
++			if(o.snapMode !== "outer") {
++				ts = Math.abs(t - y1) <= d;
++				bs = Math.abs(b - y2) <= d;
++				ls = Math.abs(l - x1) <= d;
++				rs = Math.abs(r - x2) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
++				}
++			}
++
++			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
++				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++			}
++			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
++
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "stack", {
++	start: function() {
++		var min,
++			o = this.data("ui-draggable").options,
++			group = $.makeArray($(o.stack)).sort(function(a,b) {
++				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
++			});
++
++		if (!group.length) { return; }
++
++		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
++		$(group).each(function(i) {
++			$(this).css("zIndex", min + i);
++		});
++		this.css("zIndex", (min + group.length));
++	}
++});
++
++$.ui.plugin.add("draggable", "zIndex", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("zIndex")) {
++			o._zIndex = t.css("zIndex");
++		}
++		t.css("zIndex", o.zIndex);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._zIndex) {
++			$(ui.helper).css("zIndex", o._zIndex);
++		}
++	}
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fold.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fold.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fold.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-fold",
++	"title": "jQuery UI Fold Effect",
++	"description": "Folds an element first horizontally and then vertically.",
++	"keywords": [
++		"ui",
++		"fold",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/fold-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.spinner.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.spinner.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.spinner.jquery.json	(revision 15487)
+@@ -0,0 +1,68 @@
++{
++	"name": "ui.spinner",
++	"title": "jQuery UI Spinner",
++	"description": "Displays buttons to easily input numbers via the keyboard or mouse.",
++	"keywords": [
++		"ui",
++		"spinner",
++		"form",
++		"number",
++		"spinbutton",
++		"stepper"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/spinner/",
++	"demo": "http://jqueryui.com/spinner/",
++	"docs": "http://api.jqueryui.com/spinner/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.button": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.resizable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.resizable.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.resizable.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.resizable",
++	"title": "jQuery UI Resizable",
++	"description": "Enables resize functionality for any element.",
++	"keywords": [
++		"ui",
++		"resizable",
++		"resize"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/resizable/",
++	"demo": "http://jqueryui.com/resizable/",
++	"docs": "http://api.jqueryui.com/resizable/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.mouse": "1.10.3"
++	},
++	"category": "interaction"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-scale.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-scale.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-scale.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-scale",
++	"title": "jQuery UI Scale Effect",
++	"description": "Grows or shrinks an element and its content. Restores an elemnt to its original size.",
++	"keywords": [
++		"ui",
++		"scale",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/scale-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-clip.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-clip.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-clip.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-clip",
++	"title": "jQuery UI Clip Effect",
++	"description": "Clips the element on and off like an old TV.",
++	"keywords": [
++		"ui",
++		"clip",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/clip-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.slider.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.slider.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.slider.jquery.json	(revision 15487)
+@@ -0,0 +1,67 @@
++{
++	"name": "ui.slider",
++	"title": "jQuery UI Slider",
++	"description": "Displays a flexible slider with ranges and accessibility via keyboard.",
++	"keywords": [
++		"ui",
++		"slider",
++		"form",
++		"number",
++		"range"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/slider/",
++	"demo": "http://jqueryui.com/slider/",
++	"docs": "http://api.jqueryui.com/slider/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.mouse": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.dialog.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.dialog.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.dialog.css	(revision 15487)
+@@ -0,0 +1,69 @@
++/*!
++ * jQuery UI Dialog 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Dialog#theming
++ */
++.ui-dialog {
++	position: absolute;
++	top: 0;
++	left: 0;
++	padding: .2em;
++	outline: 0;
++}
++.ui-dialog .ui-dialog-titlebar {
++	padding: .4em 1em;
++	position: relative;
++}
++.ui-dialog .ui-dialog-title {
++	float: left;
++	margin: .1em 0;
++	white-space: nowrap;
++	width: 90%;
++	overflow: hidden;
++	text-overflow: ellipsis;
++}
++.ui-dialog .ui-dialog-titlebar-close {
++	position: absolute;
++	right: .3em;
++	top: 50%;
++	width: 21px;
++	margin: -10px 0 0 0;
++	padding: 1px;
++	height: 20px;
++}
++.ui-dialog .ui-dialog-content {
++	position: relative;
++	border: 0;
++	padding: .5em 1em;
++	background: none;
++	overflow: auto;
++}
++.ui-dialog .ui-dialog-buttonpane {
++	text-align: left;
++	border-width: 1px 0 0 0;
++	background-image: none;
++	margin-top: .5em;
++	padding: .3em 1em .5em .4em;
++}
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
++	float: right;
++}
++.ui-dialog .ui-dialog-buttonpane button {
++	margin: .5em .4em .5em 0;
++	cursor: pointer;
++}
++.ui-dialog .ui-resizable-se {
++	width: 12px;
++	height: 12px;
++	right: -5px;
++	bottom: -5px;
++	background-position: 16px 16px;
++}
++.ui-draggable .ui-dialog-titlebar {
++	cursor: move;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery-ui.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery-ui.css	(revision 15487)
+@@ -0,0 +1,1176 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden {
++	display: none;
++}
++.ui-helper-hidden-accessible {
++	border: 0;
++	clip: rect(0 0 0 0);
++	height: 1px;
++	margin: -1px;
++	overflow: hidden;
++	padding: 0;
++	position: absolute;
++	width: 1px;
++}
++.ui-helper-reset {
++	margin: 0;
++	padding: 0;
++	border: 0;
++	outline: 0;
++	line-height: 1.3;
++	text-decoration: none;
++	font-size: 100%;
++	list-style: none;
++}
++.ui-helper-clearfix:before,
++.ui-helper-clearfix:after {
++	content: "";
++	display: table;
++	border-collapse: collapse;
++}
++.ui-helper-clearfix:after {
++	clear: both;
++}
++.ui-helper-clearfix {
++	min-height: 0; /* support: IE7 */
++}
++.ui-helper-zfix {
++	width: 100%;
++	height: 100%;
++	top: 0;
++	left: 0;
++	position: absolute;
++	opacity: 0;
++	filter:Alpha(Opacity=0);
++}
++
++.ui-front {
++	z-index: 100;
++}
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled {
++	cursor: default !important;
++}
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	display: block;
++	text-indent: -99999px;
++	overflow: hidden;
++	background-repeat: no-repeat;
++}
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay {
++	position: fixed;
++	top: 0;
++	left: 0;
++	width: 100%;
++	height: 100%;
++}
++.ui-resizable {
++	position: relative;
++}
++.ui-resizable-handle {
++	position: absolute;
++	font-size: 0.1px;
++	display: block;
++}
++.ui-resizable-disabled .ui-resizable-handle,
++.ui-resizable-autohide .ui-resizable-handle {
++	display: none;
++}
++.ui-resizable-n {
++	cursor: n-resize;
++	height: 7px;
++	width: 100%;
++	top: -5px;
++	left: 0;
++}
++.ui-resizable-s {
++	cursor: s-resize;
++	height: 7px;
++	width: 100%;
++	bottom: -5px;
++	left: 0;
++}
++.ui-resizable-e {
++	cursor: e-resize;
++	width: 7px;
++	right: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-w {
++	cursor: w-resize;
++	width: 7px;
++	left: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-se {
++	cursor: se-resize;
++	width: 12px;
++	height: 12px;
++	right: 1px;
++	bottom: 1px;
++}
++.ui-resizable-sw {
++	cursor: sw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	bottom: -5px;
++}
++.ui-resizable-nw {
++	cursor: nw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	top: -5px;
++}
++.ui-resizable-ne {
++	cursor: ne-resize;
++	width: 9px;
++	height: 9px;
++	right: -5px;
++	top: -5px;
++}
++.ui-selectable-helper {
++	position: absolute;
++	z-index: 100;
++	border: 1px dotted black;
++}
++.ui-accordion .ui-accordion-header {
++	display: block;
++	cursor: pointer;
++	position: relative;
++	margin-top: 2px;
++	padding: .5em .5em .5em .7em;
++	min-height: 0; /* support: IE7 */
++}
++.ui-accordion .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-noicons {
++	padding-left: .7em;
++}
++.ui-accordion .ui-accordion-icons .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
++	position: absolute;
++	left: .5em;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-accordion .ui-accordion-content {
++	padding: 1em 2.2em;
++	border-top: 0;
++	overflow: auto;
++}
++.ui-autocomplete {
++	position: absolute;
++	top: 0;
++	left: 0;
++	cursor: default;
++}
++.ui-button {
++	display: inline-block;
++	position: relative;
++	padding: 0;
++	line-height: normal;
++	margin-right: .1em;
++	cursor: pointer;
++	vertical-align: middle;
++	text-align: center;
++	overflow: visible; /* removes extra width in IE */
++}
++.ui-button,
++.ui-button:link,
++.ui-button:visited,
++.ui-button:hover,
++.ui-button:active {
++	text-decoration: none;
++}
++/* to make room for the icon, a width needs to be set here */
++.ui-button-icon-only {
++	width: 2.2em;
++}
++/* button elements seem to need a little more width */
++button.ui-button-icon-only {
++	width: 2.4em;
++}
++.ui-button-icons-only {
++	width: 3.4em;
++}
++button.ui-button-icons-only {
++	width: 3.7em;
++}
++
++/* button text element */
++.ui-button .ui-button-text {
++	display: block;
++	line-height: normal;
++}
++.ui-button-text-only .ui-button-text {
++	padding: .4em 1em;
++}
++.ui-button-icon-only .ui-button-text,
++.ui-button-icons-only .ui-button-text {
++	padding: .4em;
++	text-indent: -9999999px;
++}
++.ui-button-text-icon-primary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 1em .4em 2.1em;
++}
++.ui-button-text-icon-secondary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 2.1em .4em 1em;
++}
++.ui-button-text-icons .ui-button-text {
++	padding-left: 2.1em;
++	padding-right: 2.1em;
++}
++/* no icon support for input elements, provide padding by default */
++input.ui-button {
++	padding: .4em 1em;
++}
++
++/* button icon element(s) */
++.ui-button-icon-only .ui-icon,
++.ui-button-text-icon-primary .ui-icon,
++.ui-button-text-icon-secondary .ui-icon,
++.ui-button-text-icons .ui-icon,
++.ui-button-icons-only .ui-icon {
++	position: absolute;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-button-icon-only .ui-icon {
++	left: 50%;
++	margin-left: -8px;
++}
++.ui-button-text-icon-primary .ui-button-icon-primary,
++.ui-button-text-icons .ui-button-icon-primary,
++.ui-button-icons-only .ui-button-icon-primary {
++	left: .5em;
++}
++.ui-button-text-icon-secondary .ui-button-icon-secondary,
++.ui-button-text-icons .ui-button-icon-secondary,
++.ui-button-icons-only .ui-button-icon-secondary {
++	right: .5em;
++}
++
++/* button sets */
++.ui-buttonset {
++	margin-right: 7px;
++}
++.ui-buttonset .ui-button {
++	margin-left: 0;
++	margin-right: -.3em;
++}
++
++/* workarounds */
++/* reset extra padding in Firefox, see h5bp.com/l */
++input.ui-button::-moz-focus-inner,
++button.ui-button::-moz-focus-inner {
++	border: 0;
++	padding: 0;
++}
++.ui-datepicker {
++	width: 17em;
++	padding: .2em .2em 0;
++	display: none;
++}
++.ui-datepicker .ui-datepicker-header {
++	position: relative;
++	padding: .2em 0;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-next {
++	position: absolute;
++	top: 2px;
++	width: 1.8em;
++	height: 1.8em;
++}
++.ui-datepicker .ui-datepicker-prev-hover,
++.ui-datepicker .ui-datepicker-next-hover {
++	top: 1px;
++}
++.ui-datepicker .ui-datepicker-prev {
++	left: 2px;
++}
++.ui-datepicker .ui-datepicker-next {
++	right: 2px;
++}
++.ui-datepicker .ui-datepicker-prev-hover {
++	left: 1px;
++}
++.ui-datepicker .ui-datepicker-next-hover {
++	right: 1px;
++}
++.ui-datepicker .ui-datepicker-prev span,
++.ui-datepicker .ui-datepicker-next span {
++	display: block;
++	position: absolute;
++	left: 50%;
++	margin-left: -8px;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-datepicker .ui-datepicker-title {
++	margin: 0 2.3em;
++	line-height: 1.8em;
++	text-align: center;
++}
++.ui-datepicker .ui-datepicker-title select {
++	font-size: 1em;
++	margin: 1px 0;
++}
++.ui-datepicker select.ui-datepicker-month-year {
++	width: 100%;
++}
++.ui-datepicker select.ui-datepicker-month,
++.ui-datepicker select.ui-datepicker-year {
++	width: 49%;
++}
++.ui-datepicker table {
++	width: 100%;
++	font-size: .9em;
++	border-collapse: collapse;
++	margin: 0 0 .4em;
++}
++.ui-datepicker th {
++	padding: .7em .3em;
++	text-align: center;
++	font-weight: bold;
++	border: 0;
++}
++.ui-datepicker td {
++	border: 0;
++	padding: 1px;
++}
++.ui-datepicker td span,
++.ui-datepicker td a {
++	display: block;
++	padding: .2em;
++	text-align: right;
++	text-decoration: none;
++}
++.ui-datepicker .ui-datepicker-buttonpane {
++	background-image: none;
++	margin: .7em 0 0 0;
++	padding: 0 .2em;
++	border-left: 0;
++	border-right: 0;
++	border-bottom: 0;
++}
++.ui-datepicker .ui-datepicker-buttonpane button {
++	float: right;
++	margin: .5em .2em .4em;
++	cursor: pointer;
++	padding: .2em .6em .3em .6em;
++	width: auto;
++	overflow: visible;
++}
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
++	float: left;
++}
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi {
++	width: auto;
++}
++.ui-datepicker-multi .ui-datepicker-group {
++	float: left;
++}
++.ui-datepicker-multi .ui-datepicker-group table {
++	width: 95%;
++	margin: 0 auto .4em;
++}
++.ui-datepicker-multi-2 .ui-datepicker-group {
++	width: 50%;
++}
++.ui-datepicker-multi-3 .ui-datepicker-group {
++	width: 33.3%;
++}
++.ui-datepicker-multi-4 .ui-datepicker-group {
++	width: 25%;
++}
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
++	border-left-width: 0;
++}
++.ui-datepicker-multi .ui-datepicker-buttonpane {
++	clear: left;
++}
++.ui-datepicker-row-break {
++	clear: both;
++	width: 100%;
++	font-size: 0;
++}
++
++/* RTL support */
++.ui-datepicker-rtl {
++	direction: rtl;
++}
++.ui-datepicker-rtl .ui-datepicker-prev {
++	right: 2px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next {
++	left: 2px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-prev:hover {
++	right: 1px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next:hover {
++	left: 1px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane {
++	clear: right;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button {
++	float: left;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
++.ui-datepicker-rtl .ui-datepicker-group {
++	float: right;
++}
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
++	border-right-width: 0;
++	border-left-width: 1px;
++}
++.ui-dialog {
++	position: absolute;
++	top: 0;
++	left: 0;
++	padding: .2em;
++	outline: 0;
++}
++.ui-dialog .ui-dialog-titlebar {
++	padding: .4em 1em;
++	position: relative;
++}
++.ui-dialog .ui-dialog-title {
++	float: left;
++	margin: .1em 0;
++	white-space: nowrap;
++	width: 90%;
++	overflow: hidden;
++	text-overflow: ellipsis;
++}
++.ui-dialog .ui-dialog-titlebar-close {
++	position: absolute;
++	right: .3em;
++	top: 50%;
++	width: 21px;
++	margin: -10px 0 0 0;
++	padding: 1px;
++	height: 20px;
++}
++.ui-dialog .ui-dialog-content {
++	position: relative;
++	border: 0;
++	padding: .5em 1em;
++	background: none;
++	overflow: auto;
++}
++.ui-dialog .ui-dialog-buttonpane {
++	text-align: left;
++	border-width: 1px 0 0 0;
++	background-image: none;
++	margin-top: .5em;
++	padding: .3em 1em .5em .4em;
++}
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
++	float: right;
++}
++.ui-dialog .ui-dialog-buttonpane button {
++	margin: .5em .4em .5em 0;
++	cursor: pointer;
++}
++.ui-dialog .ui-resizable-se {
++	width: 12px;
++	height: 12px;
++	right: -5px;
++	bottom: -5px;
++	background-position: 16px 16px;
++}
++.ui-draggable .ui-dialog-titlebar {
++	cursor: move;
++}
++.ui-menu {
++	list-style: none;
++	padding: 2px;
++	margin: 0;
++	display: block;
++	outline: none;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++	position: absolute;
++}
++.ui-menu .ui-menu-item {
++	margin: 0;
++	padding: 0;
++	width: 100%;
++	/* support: IE10, see #8844 */
++	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
++}
++.ui-menu .ui-menu-divider {
++	margin: 5px -2px 5px -2px;
++	height: 0;
++	font-size: 0;
++	line-height: 0;
++	border-width: 1px 0 0 0;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration: none;
++	display: block;
++	padding: 2px .4em;
++	line-height: 1.5;
++	min-height: 0; /* support: IE7 */
++	font-weight: normal;
++}
++.ui-menu .ui-menu-item a.ui-state-focus,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++
++.ui-menu .ui-state-disabled {
++	font-weight: normal;
++	margin: .4em 0 .2em;
++	line-height: 1.5;
++}
++.ui-menu .ui-state-disabled a {
++	cursor: default;
++}
++
++/* icon support */
++.ui-menu-icons {
++	position: relative;
++}
++.ui-menu-icons .ui-menu-item a {
++	position: relative;
++	padding-left: 2em;
++}
++
++/* left-aligned */
++.ui-menu .ui-icon {
++	position: absolute;
++	top: .2em;
++	left: .2em;
++}
++
++/* right-aligned */
++.ui-menu .ui-menu-icon {
++	position: static;
++	float: right;
++}
++.ui-progressbar {
++	height: 2em;
++	text-align: left;
++	overflow: hidden;
++}
++.ui-progressbar .ui-progressbar-value {
++	margin: -1px;
++	height: 100%;
++}
++.ui-progressbar .ui-progressbar-overlay {
++	background: url("images/animated-overlay.gif");
++	height: 100%;
++	filter: alpha(opacity=25);
++	opacity: 0.25;
++}
++.ui-progressbar-indeterminate .ui-progressbar-value {
++	background-image: none;
++}
++.ui-slider {
++	position: relative;
++	text-align: left;
++}
++.ui-slider .ui-slider-handle {
++	position: absolute;
++	z-index: 2;
++	width: 1.2em;
++	height: 1.2em;
++	cursor: default;
++}
++.ui-slider .ui-slider-range {
++	position: absolute;
++	z-index: 1;
++	font-size: .7em;
++	display: block;
++	border: 0;
++	background-position: 0 0;
++}
++
++/* For IE8 - See #6727 */
++.ui-slider.ui-state-disabled .ui-slider-handle,
++.ui-slider.ui-state-disabled .ui-slider-range {
++	filter: inherit;
++}
++
++.ui-slider-horizontal {
++	height: .8em;
++}
++.ui-slider-horizontal .ui-slider-handle {
++	top: -.3em;
++	margin-left: -.6em;
++}
++.ui-slider-horizontal .ui-slider-range {
++	top: 0;
++	height: 100%;
++}
++.ui-slider-horizontal .ui-slider-range-min {
++	left: 0;
++}
++.ui-slider-horizontal .ui-slider-range-max {
++	right: 0;
++}
++
++.ui-slider-vertical {
++	width: .8em;
++	height: 100px;
++}
++.ui-slider-vertical .ui-slider-handle {
++	left: -.3em;
++	margin-left: 0;
++	margin-bottom: -.6em;
++}
++.ui-slider-vertical .ui-slider-range {
++	left: 0;
++	width: 100%;
++}
++.ui-slider-vertical .ui-slider-range-min {
++	bottom: 0;
++}
++.ui-slider-vertical .ui-slider-range-max {
++	top: 0;
++}
++.ui-spinner {
++	position: relative;
++	display: inline-block;
++	overflow: hidden;
++	padding: 0;
++	vertical-align: middle;
++}
++.ui-spinner-input {
++	border: none;
++	background: none;
++	color: inherit;
++	padding: 0;
++	margin: .2em 0;
++	vertical-align: middle;
++	margin-left: .4em;
++	margin-right: 22px;
++}
++.ui-spinner-button {
++	width: 16px;
++	height: 50%;
++	font-size: .5em;
++	padding: 0;
++	margin: 0;
++	text-align: center;
++	position: absolute;
++	cursor: default;
++	display: block;
++	overflow: hidden;
++	right: 0;
++}
++/* more specificity required here to overide default borders */
++.ui-spinner a.ui-spinner-button {
++	border-top: none;
++	border-bottom: none;
++	border-right: none;
++}
++/* vertical centre icon */
++.ui-spinner .ui-icon {
++	position: absolute;
++	margin-top: -8px;
++	top: 50%;
++	left: 0;
++}
++.ui-spinner-up {
++	top: 0;
++}
++.ui-spinner-down {
++	bottom: 0;
++}
++
++/* TR overrides */
++.ui-spinner .ui-icon-triangle-1-s {
++	/* need to fix icons sprite */
++	background-position: -65px -16px;
++}
++.ui-tabs {
++	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++	padding: .2em;
++}
++.ui-tabs .ui-tabs-nav {
++	margin: 0;
++	padding: .2em .2em 0;
++}
++.ui-tabs .ui-tabs-nav li {
++	list-style: none;
++	float: left;
++	position: relative;
++	top: 0;
++	margin: 1px .2em 0 0;
++	border-bottom-width: 0;
++	padding: 0;
++	white-space: nowrap;
++}
++.ui-tabs .ui-tabs-nav li a {
++	float: left;
++	padding: .5em 1em;
++	text-decoration: none;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active {
++	margin-bottom: -1px;
++	padding-bottom: 1px;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
++.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
++.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
++	cursor: text;
++}
++.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
++	cursor: pointer;
++}
++.ui-tabs .ui-tabs-panel {
++	display: block;
++	border-width: 0;
++	padding: 1em 1.4em;
++	background: none;
++}
++.ui-tooltip {
++	padding: 8px;
++	position: absolute;
++	z-index: 9999;
++	max-width: 300px;
++	-webkit-box-shadow: 0 0 5px #aaa;
++	box-shadow: 0 0 5px #aaa;
++}
++body .ui-tooltip {
++	border-width: 2px;
++}
++
++/* Component containers
++----------------------------------*/
++.ui-widget {
++	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
++	font-size: 1.1em/*{fsDefault}*/;
++}
++.ui-widget .ui-widget {
++	font-size: 1em;
++}
++.ui-widget input,
++.ui-widget select,
++.ui-widget textarea,
++.ui-widget button {
++	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
++	font-size: 1em;
++}
++.ui-widget-content {
++	border: 1px solid #aaaaaa/*{borderColorContent}*/;
++	background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
++	color: #222222/*{fcContent}*/;
++}
++.ui-widget-content a {
++	color: #222222/*{fcContent}*/;
++}
++.ui-widget-header {
++	border: 1px solid #aaaaaa/*{borderColorHeader}*/;
++	background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
++	color: #222222/*{fcHeader}*/;
++	font-weight: bold;
++}
++.ui-widget-header a {
++	color: #222222/*{fcHeader}*/;
++}
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default,
++.ui-widget-content .ui-state-default,
++.ui-widget-header .ui-state-default {
++	border: 1px solid #d3d3d3/*{borderColorDefault}*/;
++	background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #555555/*{fcDefault}*/;
++}
++.ui-state-default a,
++.ui-state-default a:link,
++.ui-state-default a:visited {
++	color: #555555/*{fcDefault}*/;
++	text-decoration: none;
++}
++.ui-state-hover,
++.ui-widget-content .ui-state-hover,
++.ui-widget-header .ui-state-hover,
++.ui-state-focus,
++.ui-widget-content .ui-state-focus,
++.ui-widget-header .ui-state-focus {
++	border: 1px solid #999999/*{borderColorHover}*/;
++	background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #212121/*{fcHover}*/;
++}
++.ui-state-hover a,
++.ui-state-hover a:hover,
++.ui-state-hover a:link,
++.ui-state-hover a:visited {
++	color: #212121/*{fcHover}*/;
++	text-decoration: none;
++}
++.ui-state-active,
++.ui-widget-content .ui-state-active,
++.ui-widget-header .ui-state-active {
++	border: 1px solid #aaaaaa/*{borderColorActive}*/;
++	background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #212121/*{fcActive}*/;
++}
++.ui-state-active a,
++.ui-state-active a:link,
++.ui-state-active a:visited {
++	color: #212121/*{fcActive}*/;
++	text-decoration: none;
++}
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight,
++.ui-widget-content .ui-state-highlight,
++.ui-widget-header .ui-state-highlight {
++	border: 1px solid #fcefa1/*{borderColorHighlight}*/;
++	background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
++	color: #363636/*{fcHighlight}*/;
++}
++.ui-state-highlight a,
++.ui-widget-content .ui-state-highlight a,
++.ui-widget-header .ui-state-highlight a {
++	color: #363636/*{fcHighlight}*/;
++}
++.ui-state-error,
++.ui-widget-content .ui-state-error,
++.ui-widget-header .ui-state-error {
++	border: 1px solid #cd0a0a/*{borderColorError}*/;
++	background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-state-error a,
++.ui-widget-content .ui-state-error a,
++.ui-widget-header .ui-state-error a {
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-state-error-text,
++.ui-widget-content .ui-state-error-text,
++.ui-widget-header .ui-state-error-text {
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-priority-primary,
++.ui-widget-content .ui-priority-primary,
++.ui-widget-header .ui-priority-primary {
++	font-weight: bold;
++}
++.ui-priority-secondary,
++.ui-widget-content .ui-priority-secondary,
++.ui-widget-header .ui-priority-secondary {
++	opacity: .7;
++	filter:Alpha(Opacity=70);
++	font-weight: normal;
++}
++.ui-state-disabled,
++.ui-widget-content .ui-state-disabled,
++.ui-widget-header .ui-state-disabled {
++	opacity: .35;
++	filter:Alpha(Opacity=35);
++	background-image: none;
++}
++.ui-state-disabled .ui-icon {
++	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
++}
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	width: 16px;
++	height: 16px;
++}
++.ui-icon,
++.ui-widget-content .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
++}
++.ui-widget-header .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
++}
++.ui-state-default .ui-icon {
++	background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
++}
++.ui-state-hover .ui-icon,
++.ui-state-focus .ui-icon {
++	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
++}
++.ui-state-active .ui-icon {
++	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
++}
++.ui-state-highlight .ui-icon {
++	background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
++}
++.ui-state-error .ui-icon,
++.ui-state-error-text .ui-icon {
++	background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
++}
++
++/* positioning */
++.ui-icon-blank { background-position: 16px 16px; }
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-on { background-position: -96px -144px; }
++.ui-icon-radio-off { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-left,
++.ui-corner-tl {
++	border-top-left-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-right,
++.ui-corner-tr {
++	border-top-right-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-left,
++.ui-corner-bl {
++	border-bottom-left-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-right,
++.ui-corner-br {
++	border-bottom-right-radius: 4px/*{cornerRadius}*/;
++}
++
++/* Overlays */
++.ui-widget-overlay {
++	background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
++	opacity: .3/*{opacityOverlay}*/;
++	filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
++}
++.ui-widget-shadow {
++	margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
++	padding: 8px/*{thicknessShadow}*/;
++	background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
++	opacity: .3/*{opacityShadow}*/;
++	filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
++	border-radius: 8px/*{cornerRadiusShadow}*/;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.accordion.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.accordion.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.accordion.css	(revision 15487)
+@@ -0,0 +1,38 @@
++/*!
++ * jQuery UI Accordion 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Accordion#theming
++ */
++.ui-accordion .ui-accordion-header {
++	display: block;
++	cursor: pointer;
++	position: relative;
++	margin-top: 2px;
++	padding: .5em .5em .5em .7em;
++	min-height: 0; /* support: IE7 */
++}
++.ui-accordion .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-noicons {
++	padding-left: .7em;
++}
++.ui-accordion .ui-accordion-icons .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
++	position: absolute;
++	left: .5em;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-accordion .ui-accordion-content {
++	padding: 1em 2.2em;
++	border-top: 0;
++	overflow: auto;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.autocomplete.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.autocomplete.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.autocomplete.css	(revision 15487)
+@@ -0,0 +1,16 @@
++/*!
++ * jQuery UI Autocomplete 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Autocomplete#theming
++ */
++.ui-autocomplete {
++	position: absolute;
++	top: 0;
++	left: 0;
++	cursor: default;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.theme.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.theme.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.theme.css	(revision 15487)
+@@ -0,0 +1,406 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ *
++ * To view and modify this theme, visit http://jqueryui.com/themeroller/
++ */
++
++
++/* Component containers
++----------------------------------*/
++.ui-widget {
++	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
++	font-size: 1.1em/*{fsDefault}*/;
++}
++.ui-widget .ui-widget {
++	font-size: 1em;
++}
++.ui-widget input,
++.ui-widget select,
++.ui-widget textarea,
++.ui-widget button {
++	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
++	font-size: 1em;
++}
++.ui-widget-content {
++	border: 1px solid #aaaaaa/*{borderColorContent}*/;
++	background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
++	color: #222222/*{fcContent}*/;
++}
++.ui-widget-content a {
++	color: #222222/*{fcContent}*/;
++}
++.ui-widget-header {
++	border: 1px solid #aaaaaa/*{borderColorHeader}*/;
++	background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
++	color: #222222/*{fcHeader}*/;
++	font-weight: bold;
++}
++.ui-widget-header a {
++	color: #222222/*{fcHeader}*/;
++}
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default,
++.ui-widget-content .ui-state-default,
++.ui-widget-header .ui-state-default {
++	border: 1px solid #d3d3d3/*{borderColorDefault}*/;
++	background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #555555/*{fcDefault}*/;
++}
++.ui-state-default a,
++.ui-state-default a:link,
++.ui-state-default a:visited {
++	color: #555555/*{fcDefault}*/;
++	text-decoration: none;
++}
++.ui-state-hover,
++.ui-widget-content .ui-state-hover,
++.ui-widget-header .ui-state-hover,
++.ui-state-focus,
++.ui-widget-content .ui-state-focus,
++.ui-widget-header .ui-state-focus {
++	border: 1px solid #999999/*{borderColorHover}*/;
++	background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #212121/*{fcHover}*/;
++}
++.ui-state-hover a,
++.ui-state-hover a:hover,
++.ui-state-hover a:link,
++.ui-state-hover a:visited {
++	color: #212121/*{fcHover}*/;
++	text-decoration: none;
++}
++.ui-state-active,
++.ui-widget-content .ui-state-active,
++.ui-widget-header .ui-state-active {
++	border: 1px solid #aaaaaa/*{borderColorActive}*/;
++	background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
++	font-weight: normal/*{fwDefault}*/;
++	color: #212121/*{fcActive}*/;
++}
++.ui-state-active a,
++.ui-state-active a:link,
++.ui-state-active a:visited {
++	color: #212121/*{fcActive}*/;
++	text-decoration: none;
++}
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight,
++.ui-widget-content .ui-state-highlight,
++.ui-widget-header .ui-state-highlight {
++	border: 1px solid #fcefa1/*{borderColorHighlight}*/;
++	background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
++	color: #363636/*{fcHighlight}*/;
++}
++.ui-state-highlight a,
++.ui-widget-content .ui-state-highlight a,
++.ui-widget-header .ui-state-highlight a {
++	color: #363636/*{fcHighlight}*/;
++}
++.ui-state-error,
++.ui-widget-content .ui-state-error,
++.ui-widget-header .ui-state-error {
++	border: 1px solid #cd0a0a/*{borderColorError}*/;
++	background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-state-error a,
++.ui-widget-content .ui-state-error a,
++.ui-widget-header .ui-state-error a {
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-state-error-text,
++.ui-widget-content .ui-state-error-text,
++.ui-widget-header .ui-state-error-text {
++	color: #cd0a0a/*{fcError}*/;
++}
++.ui-priority-primary,
++.ui-widget-content .ui-priority-primary,
++.ui-widget-header .ui-priority-primary {
++	font-weight: bold;
++}
++.ui-priority-secondary,
++.ui-widget-content .ui-priority-secondary,
++.ui-widget-header .ui-priority-secondary {
++	opacity: .7;
++	filter:Alpha(Opacity=70);
++	font-weight: normal;
++}
++.ui-state-disabled,
++.ui-widget-content .ui-state-disabled,
++.ui-widget-header .ui-state-disabled {
++	opacity: .35;
++	filter:Alpha(Opacity=35);
++	background-image: none;
++}
++.ui-state-disabled .ui-icon {
++	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
++}
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	width: 16px;
++	height: 16px;
++}
++.ui-icon,
++.ui-widget-content .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
++}
++.ui-widget-header .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
++}
++.ui-state-default .ui-icon {
++	background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
++}
++.ui-state-hover .ui-icon,
++.ui-state-focus .ui-icon {
++	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
++}
++.ui-state-active .ui-icon {
++	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
++}
++.ui-state-highlight .ui-icon {
++	background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
++}
++.ui-state-error .ui-icon,
++.ui-state-error-text .ui-icon {
++	background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
++}
++
++/* positioning */
++.ui-icon-blank { background-position: 16px 16px; }
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-on { background-position: -96px -144px; }
++.ui-icon-radio-off { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-left,
++.ui-corner-tl {
++	border-top-left-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-right,
++.ui-corner-tr {
++	border-top-right-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-left,
++.ui-corner-bl {
++	border-bottom-left-radius: 4px/*{cornerRadius}*/;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-right,
++.ui-corner-br {
++	border-bottom-right-radius: 4px/*{cornerRadius}*/;
++}
++
++/* Overlays */
++.ui-widget-overlay {
++	background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
++	opacity: .3/*{opacityOverlay}*/;
++	filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
++}
++.ui-widget-shadow {
++	margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
++	padding: 8px/*{thicknessShadow}*/;
++	background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
++	opacity: .3/*{opacityShadow}*/;
++	filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
++	border-radius: 8px/*{cornerRadiusShadow}*/;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.spinner.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.spinner.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.spinner.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.resizable.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.resizable.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.resizable.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.slider.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.slider.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.slider.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.core.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.core.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.core.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.progressbar.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.progressbar.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.progressbar.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tabs.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tabs.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tabs.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tooltip.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tooltip.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tooltip.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.dialog.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.dialog.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.dialog.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery-ui.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery-ui.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery-ui.min.css	(revision 15487)
+@@ -0,0 +1,10 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:400;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.accordion.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.accordion.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.accordion.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.autocomplete.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.autocomplete.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.autocomplete.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_2e83ff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_2e83ff_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_2e83ff_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_2e83ff_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_2e83ff_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_888888_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_888888_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_888888_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_888888_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_888888_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/animated-overlay.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/animated-overlay.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/animated-overlay.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/animated-overlay.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_cd0a0a_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_cd0a0a_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_cd0a0a_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_454545_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_454545_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_454545_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_454545_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_454545_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_222222_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_222222_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_222222_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_222222_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.theme.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.theme.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.theme.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:400;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.selectable.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.selectable.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.selectable.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.menu.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.menu.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.menu.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.datepicker.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.datepicker.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.datepicker.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.button.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.button.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.button.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.selectable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.selectable.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.selectable.css	(revision 15487)
+@@ -0,0 +1,15 @@
++/*!
++ * jQuery UI Selectable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Selectable#theming
++ */
++.ui-selectable-helper {
++	position: absolute;
++	z-index: 100;
++	border: 1px dotted black;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.menu.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.menu.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.menu.css	(revision 15487)
+@@ -0,0 +1,79 @@
++/*!
++ * jQuery UI Menu 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Menu#theming
++ */
++.ui-menu {
++	list-style: none;
++	padding: 2px;
++	margin: 0;
++	display: block;
++	outline: none;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++	position: absolute;
++}
++.ui-menu .ui-menu-item {
++	margin: 0;
++	padding: 0;
++	width: 100%;
++	/* support: IE10, see #8844 */
++	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
++}
++.ui-menu .ui-menu-divider {
++	margin: 5px -2px 5px -2px;
++	height: 0;
++	font-size: 0;
++	line-height: 0;
++	border-width: 1px 0 0 0;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration: none;
++	display: block;
++	padding: 2px .4em;
++	line-height: 1.5;
++	min-height: 0; /* support: IE7 */
++	font-weight: normal;
++}
++.ui-menu .ui-menu-item a.ui-state-focus,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++
++.ui-menu .ui-state-disabled {
++	font-weight: normal;
++	margin: .4em 0 .2em;
++	line-height: 1.5;
++}
++.ui-menu .ui-state-disabled a {
++	cursor: default;
++}
++
++/* icon support */
++.ui-menu-icons {
++	position: relative;
++}
++.ui-menu-icons .ui-menu-item a {
++	position: relative;
++	padding-left: 2em;
++}
++
++/* left-aligned */
++.ui-menu .ui-icon {
++	position: absolute;
++	top: .2em;
++	left: .2em;
++}
++
++/* right-aligned */
++.ui-menu .ui-menu-icon {
++	position: static;
++	float: right;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.all.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.all.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.all.css	(revision 15487)
+@@ -0,0 +1,12 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming
++ */
++@import "jquery.ui.base.css";
++@import "jquery.ui.theme.css";
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.base.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.base.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.base.css	(revision 15487)
+@@ -0,0 +1,25 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming
++ */
++@import url("jquery.ui.core.css");
++
++@import url("jquery.ui.accordion.css");
++@import url("jquery.ui.autocomplete.css");
++@import url("jquery.ui.button.css");
++@import url("jquery.ui.datepicker.css");
++@import url("jquery.ui.dialog.css");
++@import url("jquery.ui.menu.css");
++@import url("jquery.ui.progressbar.css");
++@import url("jquery.ui.resizable.css");
++@import url("jquery.ui.selectable.css");
++@import url("jquery.ui.slider.css");
++@import url("jquery.ui.spinner.css");
++@import url("jquery.ui.tabs.css");
++@import url("jquery.ui.tooltip.css");
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.button.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.button.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.button.css	(revision 15487)
+@@ -0,0 +1,114 @@
++/*!
++ * jQuery UI Button 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Button#theming
++ */
++.ui-button {
++	display: inline-block;
++	position: relative;
++	padding: 0;
++	line-height: normal;
++	margin-right: .1em;
++	cursor: pointer;
++	vertical-align: middle;
++	text-align: center;
++	overflow: visible; /* removes extra width in IE */
++}
++.ui-button,
++.ui-button:link,
++.ui-button:visited,
++.ui-button:hover,
++.ui-button:active {
++	text-decoration: none;
++}
++/* to make room for the icon, a width needs to be set here */
++.ui-button-icon-only {
++	width: 2.2em;
++}
++/* button elements seem to need a little more width */
++button.ui-button-icon-only {
++	width: 2.4em;
++}
++.ui-button-icons-only {
++	width: 3.4em;
++}
++button.ui-button-icons-only {
++	width: 3.7em;
++}
++
++/* button text element */
++.ui-button .ui-button-text {
++	display: block;
++	line-height: normal;
++}
++.ui-button-text-only .ui-button-text {
++	padding: .4em 1em;
++}
++.ui-button-icon-only .ui-button-text,
++.ui-button-icons-only .ui-button-text {
++	padding: .4em;
++	text-indent: -9999999px;
++}
++.ui-button-text-icon-primary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 1em .4em 2.1em;
++}
++.ui-button-text-icon-secondary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 2.1em .4em 1em;
++}
++.ui-button-text-icons .ui-button-text {
++	padding-left: 2.1em;
++	padding-right: 2.1em;
++}
++/* no icon support for input elements, provide padding by default */
++input.ui-button {
++	padding: .4em 1em;
++}
++
++/* button icon element(s) */
++.ui-button-icon-only .ui-icon,
++.ui-button-text-icon-primary .ui-icon,
++.ui-button-text-icon-secondary .ui-icon,
++.ui-button-text-icons .ui-icon,
++.ui-button-icons-only .ui-icon {
++	position: absolute;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-button-icon-only .ui-icon {
++	left: 50%;
++	margin-left: -8px;
++}
++.ui-button-text-icon-primary .ui-button-icon-primary,
++.ui-button-text-icons .ui-button-icon-primary,
++.ui-button-icons-only .ui-button-icon-primary {
++	left: .5em;
++}
++.ui-button-text-icon-secondary .ui-button-icon-secondary,
++.ui-button-text-icons .ui-button-icon-secondary,
++.ui-button-icons-only .ui-button-icon-secondary {
++	right: .5em;
++}
++
++/* button sets */
++.ui-buttonset {
++	margin-right: 7px;
++}
++.ui-buttonset .ui-button {
++	margin-left: 0;
++	margin-right: -.3em;
++}
++
++/* workarounds */
++/* reset extra padding in Firefox, see h5bp.com/l */
++input.ui-button::-moz-focus-inner,
++button.ui-button::-moz-focus-inner {
++	border: 0;
++	padding: 0;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.datepicker.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.datepicker.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.datepicker.css	(revision 15487)
+@@ -0,0 +1,178 @@
++/*!
++ * jQuery UI Datepicker 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Datepicker#theming
++ */
++.ui-datepicker {
++	width: 17em;
++	padding: .2em .2em 0;
++	display: none;
++}
++.ui-datepicker .ui-datepicker-header {
++	position: relative;
++	padding: .2em 0;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-next {
++	position: absolute;
++	top: 2px;
++	width: 1.8em;
++	height: 1.8em;
++}
++.ui-datepicker .ui-datepicker-prev-hover,
++.ui-datepicker .ui-datepicker-next-hover {
++	top: 1px;
++}
++.ui-datepicker .ui-datepicker-prev {
++	left: 2px;
++}
++.ui-datepicker .ui-datepicker-next {
++	right: 2px;
++}
++.ui-datepicker .ui-datepicker-prev-hover {
++	left: 1px;
++}
++.ui-datepicker .ui-datepicker-next-hover {
++	right: 1px;
++}
++.ui-datepicker .ui-datepicker-prev span,
++.ui-datepicker .ui-datepicker-next span {
++	display: block;
++	position: absolute;
++	left: 50%;
++	margin-left: -8px;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-datepicker .ui-datepicker-title {
++	margin: 0 2.3em;
++	line-height: 1.8em;
++	text-align: center;
++}
++.ui-datepicker .ui-datepicker-title select {
++	font-size: 1em;
++	margin: 1px 0;
++}
++.ui-datepicker select.ui-datepicker-month-year {
++	width: 100%;
++}
++.ui-datepicker select.ui-datepicker-month,
++.ui-datepicker select.ui-datepicker-year {
++	width: 49%;
++}
++.ui-datepicker table {
++	width: 100%;
++	font-size: .9em;
++	border-collapse: collapse;
++	margin: 0 0 .4em;
++}
++.ui-datepicker th {
++	padding: .7em .3em;
++	text-align: center;
++	font-weight: bold;
++	border: 0;
++}
++.ui-datepicker td {
++	border: 0;
++	padding: 1px;
++}
++.ui-datepicker td span,
++.ui-datepicker td a {
++	display: block;
++	padding: .2em;
++	text-align: right;
++	text-decoration: none;
++}
++.ui-datepicker .ui-datepicker-buttonpane {
++	background-image: none;
++	margin: .7em 0 0 0;
++	padding: 0 .2em;
++	border-left: 0;
++	border-right: 0;
++	border-bottom: 0;
++}
++.ui-datepicker .ui-datepicker-buttonpane button {
++	float: right;
++	margin: .5em .2em .4em;
++	cursor: pointer;
++	padding: .2em .6em .3em .6em;
++	width: auto;
++	overflow: visible;
++}
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
++	float: left;
++}
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi {
++	width: auto;
++}
++.ui-datepicker-multi .ui-datepicker-group {
++	float: left;
++}
++.ui-datepicker-multi .ui-datepicker-group table {
++	width: 95%;
++	margin: 0 auto .4em;
++}
++.ui-datepicker-multi-2 .ui-datepicker-group {
++	width: 50%;
++}
++.ui-datepicker-multi-3 .ui-datepicker-group {
++	width: 33.3%;
++}
++.ui-datepicker-multi-4 .ui-datepicker-group {
++	width: 25%;
++}
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
++	border-left-width: 0;
++}
++.ui-datepicker-multi .ui-datepicker-buttonpane {
++	clear: left;
++}
++.ui-datepicker-row-break {
++	clear: both;
++	width: 100%;
++	font-size: 0;
++}
++
++/* RTL support */
++.ui-datepicker-rtl {
++	direction: rtl;
++}
++.ui-datepicker-rtl .ui-datepicker-prev {
++	right: 2px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next {
++	left: 2px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-prev:hover {
++	right: 1px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next:hover {
++	left: 1px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane {
++	clear: right;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button {
++	float: left;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
++.ui-datepicker-rtl .ui-datepicker-group {
++	float: right;
++}
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
++	border-right-width: 0;
++	border-left-width: 1px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.spinner.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.spinner.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.spinner.css	(revision 15487)
+@@ -0,0 +1,65 @@
++/*!
++ * jQuery UI Spinner 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Spinner#theming
++ */
++.ui-spinner {
++	position: relative;
++	display: inline-block;
++	overflow: hidden;
++	padding: 0;
++	vertical-align: middle;
++}
++.ui-spinner-input {
++	border: none;
++	background: none;
++	color: inherit;
++	padding: 0;
++	margin: .2em 0;
++	vertical-align: middle;
++	margin-left: .4em;
++	margin-right: 22px;
++}
++.ui-spinner-button {
++	width: 16px;
++	height: 50%;
++	font-size: .5em;
++	padding: 0;
++	margin: 0;
++	text-align: center;
++	position: absolute;
++	cursor: default;
++	display: block;
++	overflow: hidden;
++	right: 0;
++}
++/* more specificity required here to overide default borders */
++.ui-spinner a.ui-spinner-button {
++	border-top: none;
++	border-bottom: none;
++	border-right: none;
++}
++/* vertical centre icon */
++.ui-spinner .ui-icon {
++	position: absolute;
++	margin-top: -8px;
++	top: 50%;
++	left: 0;
++}
++.ui-spinner-up {
++	top: 0;
++}
++.ui-spinner-down {
++	bottom: 0;
++}
++
++/* TR overrides */
++.ui-spinner .ui-icon-triangle-1-s {
++	/* need to fix icons sprite */
++	background-position: -65px -16px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.resizable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.resizable.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.resizable.css	(revision 15487)
+@@ -0,0 +1,78 @@
++/*!
++ * jQuery UI Resizable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Resizable#theming
++ */
++.ui-resizable {
++	position: relative;
++}
++.ui-resizable-handle {
++	position: absolute;
++	font-size: 0.1px;
++	display: block;
++}
++.ui-resizable-disabled .ui-resizable-handle,
++.ui-resizable-autohide .ui-resizable-handle {
++	display: none;
++}
++.ui-resizable-n {
++	cursor: n-resize;
++	height: 7px;
++	width: 100%;
++	top: -5px;
++	left: 0;
++}
++.ui-resizable-s {
++	cursor: s-resize;
++	height: 7px;
++	width: 100%;
++	bottom: -5px;
++	left: 0;
++}
++.ui-resizable-e {
++	cursor: e-resize;
++	width: 7px;
++	right: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-w {
++	cursor: w-resize;
++	width: 7px;
++	left: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-se {
++	cursor: se-resize;
++	width: 12px;
++	height: 12px;
++	right: 1px;
++	bottom: 1px;
++}
++.ui-resizable-sw {
++	cursor: sw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	bottom: -5px;
++}
++.ui-resizable-nw {
++	cursor: nw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	top: -5px;
++}
++.ui-resizable-ne {
++	cursor: ne-resize;
++	width: 9px;
++	height: 9px;
++	right: -5px;
++	top: -5px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.slider.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.slider.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.slider.css	(revision 15487)
+@@ -0,0 +1,73 @@
++/*!
++ * jQuery UI Slider 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Slider#theming
++ */
++.ui-slider {
++	position: relative;
++	text-align: left;
++}
++.ui-slider .ui-slider-handle {
++	position: absolute;
++	z-index: 2;
++	width: 1.2em;
++	height: 1.2em;
++	cursor: default;
++}
++.ui-slider .ui-slider-range {
++	position: absolute;
++	z-index: 1;
++	font-size: .7em;
++	display: block;
++	border: 0;
++	background-position: 0 0;
++}
++
++/* For IE8 - See #6727 */
++.ui-slider.ui-state-disabled .ui-slider-handle,
++.ui-slider.ui-state-disabled .ui-slider-range {
++	filter: inherit;
++}
++
++.ui-slider-horizontal {
++	height: .8em;
++}
++.ui-slider-horizontal .ui-slider-handle {
++	top: -.3em;
++	margin-left: -.6em;
++}
++.ui-slider-horizontal .ui-slider-range {
++	top: 0;
++	height: 100%;
++}
++.ui-slider-horizontal .ui-slider-range-min {
++	left: 0;
++}
++.ui-slider-horizontal .ui-slider-range-max {
++	right: 0;
++}
++
++.ui-slider-vertical {
++	width: .8em;
++	height: 100px;
++}
++.ui-slider-vertical .ui-slider-handle {
++	left: -.3em;
++	margin-left: 0;
++	margin-bottom: -.6em;
++}
++.ui-slider-vertical .ui-slider-range {
++	left: 0;
++	width: 100%;
++}
++.ui-slider-vertical .ui-slider-range-min {
++	bottom: 0;
++}
++.ui-slider-vertical .ui-slider-range-max {
++	top: 0;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_2e83ff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_2e83ff_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_2e83ff_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_2e83ff_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_2e83ff_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_888888_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_888888_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_888888_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_888888_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_888888_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_dadada_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_dadada_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_dadada_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/animated-overlay.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/animated-overlay.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/animated-overlay.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/animated-overlay.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_75_ffffff_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_75_ffffff_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_75_ffffff_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_cd0a0a_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_cd0a0a_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_cd0a0a_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_454545_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_454545_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_454545_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_454545_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_454545_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_222222_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_222222_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_222222_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_222222_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.core.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.core.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.core.css	(revision 15487)
+@@ -0,0 +1,93 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden {
++	display: none;
++}
++.ui-helper-hidden-accessible {
++	border: 0;
++	clip: rect(0 0 0 0);
++	height: 1px;
++	margin: -1px;
++	overflow: hidden;
++	padding: 0;
++	position: absolute;
++	width: 1px;
++}
++.ui-helper-reset {
++	margin: 0;
++	padding: 0;
++	border: 0;
++	outline: 0;
++	line-height: 1.3;
++	text-decoration: none;
++	font-size: 100%;
++	list-style: none;
++}
++.ui-helper-clearfix:before,
++.ui-helper-clearfix:after {
++	content: "";
++	display: table;
++	border-collapse: collapse;
++}
++.ui-helper-clearfix:after {
++	clear: both;
++}
++.ui-helper-clearfix {
++	min-height: 0; /* support: IE7 */
++}
++.ui-helper-zfix {
++	width: 100%;
++	height: 100%;
++	top: 0;
++	left: 0;
++	position: absolute;
++	opacity: 0;
++	filter:Alpha(Opacity=0);
++}
++
++.ui-front {
++	z-index: 100;
++}
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled {
++	cursor: default !important;
++}
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	display: block;
++	text-indent: -99999px;
++	overflow: hidden;
++	background-repeat: no-repeat;
++}
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay {
++	position: fixed;
++	top: 0;
++	left: 0;
++	width: 100%;
++	height: 100%;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.progressbar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.progressbar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.progressbar.css	(revision 15487)
+@@ -0,0 +1,28 @@
++/*!
++ * jQuery UI Progressbar 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Progressbar#theming
++ */
++.ui-progressbar {
++	height: 2em;
++	text-align: left;
++	overflow: hidden;
++}
++.ui-progressbar .ui-progressbar-value {
++	margin: -1px;
++	height: 100%;
++}
++.ui-progressbar .ui-progressbar-overlay {
++	background: url("images/animated-overlay.gif");
++	height: 100%;
++	filter: alpha(opacity=25);
++	opacity: 0.25;
++}
++.ui-progressbar-indeterminate .ui-progressbar-value {
++	background-image: none;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tabs.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tabs.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tabs.css	(revision 15487)
+@@ -0,0 +1,52 @@
++/*!
++ * jQuery UI Tabs 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Tabs#theming
++ */
++.ui-tabs {
++	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++	padding: .2em;
++}
++.ui-tabs .ui-tabs-nav {
++	margin: 0;
++	padding: .2em .2em 0;
++}
++.ui-tabs .ui-tabs-nav li {
++	list-style: none;
++	float: left;
++	position: relative;
++	top: 0;
++	margin: 1px .2em 0 0;
++	border-bottom-width: 0;
++	padding: 0;
++	white-space: nowrap;
++}
++.ui-tabs .ui-tabs-nav li a {
++	float: left;
++	padding: .5em 1em;
++	text-decoration: none;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active {
++	margin-bottom: -1px;
++	padding-bottom: 1px;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
++.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
++.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
++	cursor: text;
++}
++.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
++	cursor: pointer;
++}
++.ui-tabs .ui-tabs-panel {
++	display: block;
++	border-width: 0;
++	padding: 1em 1.4em;
++	background: none;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tooltip.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tooltip.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tooltip.css	(revision 15487)
+@@ -0,0 +1,19 @@
++/*!
++ * jQuery UI Tooltip 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ */
++.ui-tooltip {
++	padding: 8px;
++	position: absolute;
++	z-index: 9999;
++	max-width: 300px;
++	-webkit-box-shadow: 0 0 5px #aaa;
++	box-shadow: 0 0 5px #aaa;
++}
++body .ui-tooltip {
++	border-width: 2px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.dialog.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.dialog.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.dialog.css	(revision 15487)
+@@ -0,0 +1,69 @@
++/*!
++ * jQuery UI Dialog 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Dialog#theming
++ */
++.ui-dialog {
++	position: absolute;
++	top: 0;
++	left: 0;
++	padding: .2em;
++	outline: 0;
++}
++.ui-dialog .ui-dialog-titlebar {
++	padding: .4em 1em;
++	position: relative;
++}
++.ui-dialog .ui-dialog-title {
++	float: left;
++	margin: .1em 0;
++	white-space: nowrap;
++	width: 90%;
++	overflow: hidden;
++	text-overflow: ellipsis;
++}
++.ui-dialog .ui-dialog-titlebar-close {
++	position: absolute;
++	right: .3em;
++	top: 50%;
++	width: 21px;
++	margin: -10px 0 0 0;
++	padding: 1px;
++	height: 20px;
++}
++.ui-dialog .ui-dialog-content {
++	position: relative;
++	border: 0;
++	padding: .5em 1em;
++	background: none;
++	overflow: auto;
++}
++.ui-dialog .ui-dialog-buttonpane {
++	text-align: left;
++	border-width: 1px 0 0 0;
++	background-image: none;
++	margin-top: .5em;
++	padding: .3em 1em .5em .4em;
++}
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
++	float: right;
++}
++.ui-dialog .ui-dialog-buttonpane button {
++	margin: .5em .4em .5em 0;
++	cursor: pointer;
++}
++.ui-dialog .ui-resizable-se {
++	width: 12px;
++	height: 12px;
++	right: -5px;
++	bottom: -5px;
++	background-position: 16px 16px;
++}
++.ui-draggable .ui-dialog-titlebar {
++	cursor: move;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery-ui.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery-ui.css	(revision 15487)
+@@ -0,0 +1,1177 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
++* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden {
++	display: none;
++}
++.ui-helper-hidden-accessible {
++	border: 0;
++	clip: rect(0 0 0 0);
++	height: 1px;
++	margin: -1px;
++	overflow: hidden;
++	padding: 0;
++	position: absolute;
++	width: 1px;
++}
++.ui-helper-reset {
++	margin: 0;
++	padding: 0;
++	border: 0;
++	outline: 0;
++	line-height: 1.3;
++	text-decoration: none;
++	font-size: 100%;
++	list-style: none;
++}
++.ui-helper-clearfix:before,
++.ui-helper-clearfix:after {
++	content: "";
++	display: table;
++	border-collapse: collapse;
++}
++.ui-helper-clearfix:after {
++	clear: both;
++}
++.ui-helper-clearfix {
++	min-height: 0; /* support: IE7 */
++}
++.ui-helper-zfix {
++	width: 100%;
++	height: 100%;
++	top: 0;
++	left: 0;
++	position: absolute;
++	opacity: 0;
++	filter:Alpha(Opacity=0);
++}
++
++.ui-front {
++	z-index: 100;
++}
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled {
++	cursor: default !important;
++}
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	display: block;
++	text-indent: -99999px;
++	overflow: hidden;
++	background-repeat: no-repeat;
++}
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay {
++	position: fixed;
++	top: 0;
++	left: 0;
++	width: 100%;
++	height: 100%;
++}
++.ui-resizable {
++	position: relative;
++}
++.ui-resizable-handle {
++	position: absolute;
++	font-size: 0.1px;
++	display: block;
++}
++.ui-resizable-disabled .ui-resizable-handle,
++.ui-resizable-autohide .ui-resizable-handle {
++	display: none;
++}
++.ui-resizable-n {
++	cursor: n-resize;
++	height: 7px;
++	width: 100%;
++	top: -5px;
++	left: 0;
++}
++.ui-resizable-s {
++	cursor: s-resize;
++	height: 7px;
++	width: 100%;
++	bottom: -5px;
++	left: 0;
++}
++.ui-resizable-e {
++	cursor: e-resize;
++	width: 7px;
++	right: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-w {
++	cursor: w-resize;
++	width: 7px;
++	left: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-se {
++	cursor: se-resize;
++	width: 12px;
++	height: 12px;
++	right: 1px;
++	bottom: 1px;
++}
++.ui-resizable-sw {
++	cursor: sw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	bottom: -5px;
++}
++.ui-resizable-nw {
++	cursor: nw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	top: -5px;
++}
++.ui-resizable-ne {
++	cursor: ne-resize;
++	width: 9px;
++	height: 9px;
++	right: -5px;
++	top: -5px;
++}
++.ui-selectable-helper {
++	position: absolute;
++	z-index: 100;
++	border: 1px dotted black;
++}
++.ui-accordion .ui-accordion-header {
++	display: block;
++	cursor: pointer;
++	position: relative;
++	margin-top: 2px;
++	padding: .5em .5em .5em .7em;
++	min-height: 0; /* support: IE7 */
++}
++.ui-accordion .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-noicons {
++	padding-left: .7em;
++}
++.ui-accordion .ui-accordion-icons .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
++	position: absolute;
++	left: .5em;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-accordion .ui-accordion-content {
++	padding: 1em 2.2em;
++	border-top: 0;
++	overflow: auto;
++}
++.ui-autocomplete {
++	position: absolute;
++	top: 0;
++	left: 0;
++	cursor: default;
++}
++.ui-button {
++	display: inline-block;
++	position: relative;
++	padding: 0;
++	line-height: normal;
++	margin-right: .1em;
++	cursor: pointer;
++	vertical-align: middle;
++	text-align: center;
++	overflow: visible; /* removes extra width in IE */
++}
++.ui-button,
++.ui-button:link,
++.ui-button:visited,
++.ui-button:hover,
++.ui-button:active {
++	text-decoration: none;
++}
++/* to make room for the icon, a width needs to be set here */
++.ui-button-icon-only {
++	width: 2.2em;
++}
++/* button elements seem to need a little more width */
++button.ui-button-icon-only {
++	width: 2.4em;
++}
++.ui-button-icons-only {
++	width: 3.4em;
++}
++button.ui-button-icons-only {
++	width: 3.7em;
++}
++
++/* button text element */
++.ui-button .ui-button-text {
++	display: block;
++	line-height: normal;
++}
++.ui-button-text-only .ui-button-text {
++	padding: .4em 1em;
++}
++.ui-button-icon-only .ui-button-text,
++.ui-button-icons-only .ui-button-text {
++	padding: .4em;
++	text-indent: -9999999px;
++}
++.ui-button-text-icon-primary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 1em .4em 2.1em;
++}
++.ui-button-text-icon-secondary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 2.1em .4em 1em;
++}
++.ui-button-text-icons .ui-button-text {
++	padding-left: 2.1em;
++	padding-right: 2.1em;
++}
++/* no icon support for input elements, provide padding by default */
++input.ui-button {
++	padding: .4em 1em;
++}
++
++/* button icon element(s) */
++.ui-button-icon-only .ui-icon,
++.ui-button-text-icon-primary .ui-icon,
++.ui-button-text-icon-secondary .ui-icon,
++.ui-button-text-icons .ui-icon,
++.ui-button-icons-only .ui-icon {
++	position: absolute;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-button-icon-only .ui-icon {
++	left: 50%;
++	margin-left: -8px;
++}
++.ui-button-text-icon-primary .ui-button-icon-primary,
++.ui-button-text-icons .ui-button-icon-primary,
++.ui-button-icons-only .ui-button-icon-primary {
++	left: .5em;
++}
++.ui-button-text-icon-secondary .ui-button-icon-secondary,
++.ui-button-text-icons .ui-button-icon-secondary,
++.ui-button-icons-only .ui-button-icon-secondary {
++	right: .5em;
++}
++
++/* button sets */
++.ui-buttonset {
++	margin-right: 7px;
++}
++.ui-buttonset .ui-button {
++	margin-left: 0;
++	margin-right: -.3em;
++}
++
++/* workarounds */
++/* reset extra padding in Firefox, see h5bp.com/l */
++input.ui-button::-moz-focus-inner,
++button.ui-button::-moz-focus-inner {
++	border: 0;
++	padding: 0;
++}
++.ui-datepicker {
++	width: 17em;
++	padding: .2em .2em 0;
++	display: none;
++}
++.ui-datepicker .ui-datepicker-header {
++	position: relative;
++	padding: .2em 0;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-next {
++	position: absolute;
++	top: 2px;
++	width: 1.8em;
++	height: 1.8em;
++}
++.ui-datepicker .ui-datepicker-prev-hover,
++.ui-datepicker .ui-datepicker-next-hover {
++	top: 1px;
++}
++.ui-datepicker .ui-datepicker-prev {
++	left: 2px;
++}
++.ui-datepicker .ui-datepicker-next {
++	right: 2px;
++}
++.ui-datepicker .ui-datepicker-prev-hover {
++	left: 1px;
++}
++.ui-datepicker .ui-datepicker-next-hover {
++	right: 1px;
++}
++.ui-datepicker .ui-datepicker-prev span,
++.ui-datepicker .ui-datepicker-next span {
++	display: block;
++	position: absolute;
++	left: 50%;
++	margin-left: -8px;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-datepicker .ui-datepicker-title {
++	margin: 0 2.3em;
++	line-height: 1.8em;
++	text-align: center;
++}
++.ui-datepicker .ui-datepicker-title select {
++	font-size: 1em;
++	margin: 1px 0;
++}
++.ui-datepicker select.ui-datepicker-month-year {
++	width: 100%;
++}
++.ui-datepicker select.ui-datepicker-month,
++.ui-datepicker select.ui-datepicker-year {
++	width: 49%;
++}
++.ui-datepicker table {
++	width: 100%;
++	font-size: .9em;
++	border-collapse: collapse;
++	margin: 0 0 .4em;
++}
++.ui-datepicker th {
++	padding: .7em .3em;
++	text-align: center;
++	font-weight: bold;
++	border: 0;
++}
++.ui-datepicker td {
++	border: 0;
++	padding: 1px;
++}
++.ui-datepicker td span,
++.ui-datepicker td a {
++	display: block;
++	padding: .2em;
++	text-align: right;
++	text-decoration: none;
++}
++.ui-datepicker .ui-datepicker-buttonpane {
++	background-image: none;
++	margin: .7em 0 0 0;
++	padding: 0 .2em;
++	border-left: 0;
++	border-right: 0;
++	border-bottom: 0;
++}
++.ui-datepicker .ui-datepicker-buttonpane button {
++	float: right;
++	margin: .5em .2em .4em;
++	cursor: pointer;
++	padding: .2em .6em .3em .6em;
++	width: auto;
++	overflow: visible;
++}
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
++	float: left;
++}
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi {
++	width: auto;
++}
++.ui-datepicker-multi .ui-datepicker-group {
++	float: left;
++}
++.ui-datepicker-multi .ui-datepicker-group table {
++	width: 95%;
++	margin: 0 auto .4em;
++}
++.ui-datepicker-multi-2 .ui-datepicker-group {
++	width: 50%;
++}
++.ui-datepicker-multi-3 .ui-datepicker-group {
++	width: 33.3%;
++}
++.ui-datepicker-multi-4 .ui-datepicker-group {
++	width: 25%;
++}
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
++	border-left-width: 0;
++}
++.ui-datepicker-multi .ui-datepicker-buttonpane {
++	clear: left;
++}
++.ui-datepicker-row-break {
++	clear: both;
++	width: 100%;
++	font-size: 0;
++}
++
++/* RTL support */
++.ui-datepicker-rtl {
++	direction: rtl;
++}
++.ui-datepicker-rtl .ui-datepicker-prev {
++	right: 2px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next {
++	left: 2px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-prev:hover {
++	right: 1px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next:hover {
++	left: 1px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane {
++	clear: right;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button {
++	float: left;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
++.ui-datepicker-rtl .ui-datepicker-group {
++	float: right;
++}
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
++	border-right-width: 0;
++	border-left-width: 1px;
++}
++.ui-dialog {
++	position: absolute;
++	top: 0;
++	left: 0;
++	padding: .2em;
++	outline: 0;
++}
++.ui-dialog .ui-dialog-titlebar {
++	padding: .4em 1em;
++	position: relative;
++}
++.ui-dialog .ui-dialog-title {
++	float: left;
++	margin: .1em 0;
++	white-space: nowrap;
++	width: 90%;
++	overflow: hidden;
++	text-overflow: ellipsis;
++}
++.ui-dialog .ui-dialog-titlebar-close {
++	position: absolute;
++	right: .3em;
++	top: 50%;
++	width: 21px;
++	margin: -10px 0 0 0;
++	padding: 1px;
++	height: 20px;
++}
++.ui-dialog .ui-dialog-content {
++	position: relative;
++	border: 0;
++	padding: .5em 1em;
++	background: none;
++	overflow: auto;
++}
++.ui-dialog .ui-dialog-buttonpane {
++	text-align: left;
++	border-width: 1px 0 0 0;
++	background-image: none;
++	margin-top: .5em;
++	padding: .3em 1em .5em .4em;
++}
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
++	float: right;
++}
++.ui-dialog .ui-dialog-buttonpane button {
++	margin: .5em .4em .5em 0;
++	cursor: pointer;
++}
++.ui-dialog .ui-resizable-se {
++	width: 12px;
++	height: 12px;
++	right: -5px;
++	bottom: -5px;
++	background-position: 16px 16px;
++}
++.ui-draggable .ui-dialog-titlebar {
++	cursor: move;
++}
++.ui-menu {
++	list-style: none;
++	padding: 2px;
++	margin: 0;
++	display: block;
++	outline: none;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++	position: absolute;
++}
++.ui-menu .ui-menu-item {
++	margin: 0;
++	padding: 0;
++	width: 100%;
++	/* support: IE10, see #8844 */
++	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
++}
++.ui-menu .ui-menu-divider {
++	margin: 5px -2px 5px -2px;
++	height: 0;
++	font-size: 0;
++	line-height: 0;
++	border-width: 1px 0 0 0;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration: none;
++	display: block;
++	padding: 2px .4em;
++	line-height: 1.5;
++	min-height: 0; /* support: IE7 */
++	font-weight: normal;
++}
++.ui-menu .ui-menu-item a.ui-state-focus,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++
++.ui-menu .ui-state-disabled {
++	font-weight: normal;
++	margin: .4em 0 .2em;
++	line-height: 1.5;
++}
++.ui-menu .ui-state-disabled a {
++	cursor: default;
++}
++
++/* icon support */
++.ui-menu-icons {
++	position: relative;
++}
++.ui-menu-icons .ui-menu-item a {
++	position: relative;
++	padding-left: 2em;
++}
++
++/* left-aligned */
++.ui-menu .ui-icon {
++	position: absolute;
++	top: .2em;
++	left: .2em;
++}
++
++/* right-aligned */
++.ui-menu .ui-menu-icon {
++	position: static;
++	float: right;
++}
++.ui-progressbar {
++	height: 2em;
++	text-align: left;
++	overflow: hidden;
++}
++.ui-progressbar .ui-progressbar-value {
++	margin: -1px;
++	height: 100%;
++}
++.ui-progressbar .ui-progressbar-overlay {
++	background: url("images/animated-overlay.gif");
++	height: 100%;
++	filter: alpha(opacity=25);
++	opacity: 0.25;
++}
++.ui-progressbar-indeterminate .ui-progressbar-value {
++	background-image: none;
++}
++.ui-slider {
++	position: relative;
++	text-align: left;
++}
++.ui-slider .ui-slider-handle {
++	position: absolute;
++	z-index: 2;
++	width: 1.2em;
++	height: 1.2em;
++	cursor: default;
++}
++.ui-slider .ui-slider-range {
++	position: absolute;
++	z-index: 1;
++	font-size: .7em;
++	display: block;
++	border: 0;
++	background-position: 0 0;
++}
++
++/* For IE8 - See #6727 */
++.ui-slider.ui-state-disabled .ui-slider-handle,
++.ui-slider.ui-state-disabled .ui-slider-range {
++	filter: inherit;
++}
++
++.ui-slider-horizontal {
++	height: .8em;
++}
++.ui-slider-horizontal .ui-slider-handle {
++	top: -.3em;
++	margin-left: -.6em;
++}
++.ui-slider-horizontal .ui-slider-range {
++	top: 0;
++	height: 100%;
++}
++.ui-slider-horizontal .ui-slider-range-min {
++	left: 0;
++}
++.ui-slider-horizontal .ui-slider-range-max {
++	right: 0;
++}
++
++.ui-slider-vertical {
++	width: .8em;
++	height: 100px;
++}
++.ui-slider-vertical .ui-slider-handle {
++	left: -.3em;
++	margin-left: 0;
++	margin-bottom: -.6em;
++}
++.ui-slider-vertical .ui-slider-range {
++	left: 0;
++	width: 100%;
++}
++.ui-slider-vertical .ui-slider-range-min {
++	bottom: 0;
++}
++.ui-slider-vertical .ui-slider-range-max {
++	top: 0;
++}
++.ui-spinner {
++	position: relative;
++	display: inline-block;
++	overflow: hidden;
++	padding: 0;
++	vertical-align: middle;
++}
++.ui-spinner-input {
++	border: none;
++	background: none;
++	color: inherit;
++	padding: 0;
++	margin: .2em 0;
++	vertical-align: middle;
++	margin-left: .4em;
++	margin-right: 22px;
++}
++.ui-spinner-button {
++	width: 16px;
++	height: 50%;
++	font-size: .5em;
++	padding: 0;
++	margin: 0;
++	text-align: center;
++	position: absolute;
++	cursor: default;
++	display: block;
++	overflow: hidden;
++	right: 0;
++}
++/* more specificity required here to overide default borders */
++.ui-spinner a.ui-spinner-button {
++	border-top: none;
++	border-bottom: none;
++	border-right: none;
++}
++/* vertical centre icon */
++.ui-spinner .ui-icon {
++	position: absolute;
++	margin-top: -8px;
++	top: 50%;
++	left: 0;
++}
++.ui-spinner-up {
++	top: 0;
++}
++.ui-spinner-down {
++	bottom: 0;
++}
++
++/* TR overrides */
++.ui-spinner .ui-icon-triangle-1-s {
++	/* need to fix icons sprite */
++	background-position: -65px -16px;
++}
++.ui-tabs {
++	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++	padding: .2em;
++}
++.ui-tabs .ui-tabs-nav {
++	margin: 0;
++	padding: .2em .2em 0;
++}
++.ui-tabs .ui-tabs-nav li {
++	list-style: none;
++	float: left;
++	position: relative;
++	top: 0;
++	margin: 1px .2em 0 0;
++	border-bottom-width: 0;
++	padding: 0;
++	white-space: nowrap;
++}
++.ui-tabs .ui-tabs-nav li a {
++	float: left;
++	padding: .5em 1em;
++	text-decoration: none;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active {
++	margin-bottom: -1px;
++	padding-bottom: 1px;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
++.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
++.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
++	cursor: text;
++}
++.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
++	cursor: pointer;
++}
++.ui-tabs .ui-tabs-panel {
++	display: block;
++	border-width: 0;
++	padding: 1em 1.4em;
++	background: none;
++}
++.ui-tooltip {
++	padding: 8px;
++	position: absolute;
++	z-index: 9999;
++	max-width: 300px;
++	-webkit-box-shadow: 0 0 5px #aaa;
++	box-shadow: 0 0 5px #aaa;
++}
++body .ui-tooltip {
++	border-width: 2px;
++}
++
++/* Component containers
++----------------------------------*/
++.ui-widget {
++	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
++	font-size: 1.1em;
++}
++.ui-widget .ui-widget {
++	font-size: 1em;
++}
++.ui-widget input,
++.ui-widget select,
++.ui-widget textarea,
++.ui-widget button {
++	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
++	font-size: 1em;
++}
++.ui-widget-content {
++	border: 1px solid #dddddd;
++	background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
++	color: #333333;
++}
++.ui-widget-content a {
++	color: #333333;
++}
++.ui-widget-header {
++	border: 1px solid #e78f08;
++	background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
++	color: #ffffff;
++	font-weight: bold;
++}
++.ui-widget-header a {
++	color: #ffffff;
++}
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default,
++.ui-widget-content .ui-state-default,
++.ui-widget-header .ui-state-default {
++	border: 1px solid #cccccc;
++	background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #1c94c4;
++}
++.ui-state-default a,
++.ui-state-default a:link,
++.ui-state-default a:visited {
++	color: #1c94c4;
++	text-decoration: none;
++}
++.ui-state-hover,
++.ui-widget-content .ui-state-hover,
++.ui-widget-header .ui-state-hover,
++.ui-state-focus,
++.ui-widget-content .ui-state-focus,
++.ui-widget-header .ui-state-focus {
++	border: 1px solid #fbcb09;
++	background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #c77405;
++}
++.ui-state-hover a,
++.ui-state-hover a:hover,
++.ui-state-hover a:link,
++.ui-state-hover a:visited {
++	color: #c77405;
++	text-decoration: none;
++}
++.ui-state-active,
++.ui-widget-content .ui-state-active,
++.ui-widget-header .ui-state-active {
++	border: 1px solid #fbd850;
++	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #eb8f00;
++}
++.ui-state-active a,
++.ui-state-active a:link,
++.ui-state-active a:visited {
++	color: #eb8f00;
++	text-decoration: none;
++}
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight,
++.ui-widget-content .ui-state-highlight,
++.ui-widget-header .ui-state-highlight {
++	border: 1px solid #fed22f;
++	background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
++	color: #363636;
++}
++.ui-state-highlight a,
++.ui-widget-content .ui-state-highlight a,
++.ui-widget-header .ui-state-highlight a {
++	color: #363636;
++}
++.ui-state-error,
++.ui-widget-content .ui-state-error,
++.ui-widget-header .ui-state-error {
++	border: 1px solid #cd0a0a;
++	background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
++	color: #ffffff;
++}
++.ui-state-error a,
++.ui-widget-content .ui-state-error a,
++.ui-widget-header .ui-state-error a {
++	color: #ffffff;
++}
++.ui-state-error-text,
++.ui-widget-content .ui-state-error-text,
++.ui-widget-header .ui-state-error-text {
++	color: #ffffff;
++}
++.ui-priority-primary,
++.ui-widget-content .ui-priority-primary,
++.ui-widget-header .ui-priority-primary {
++	font-weight: bold;
++}
++.ui-priority-secondary,
++.ui-widget-content .ui-priority-secondary,
++.ui-widget-header .ui-priority-secondary {
++	opacity: .7;
++	filter:Alpha(Opacity=70);
++	font-weight: normal;
++}
++.ui-state-disabled,
++.ui-widget-content .ui-state-disabled,
++.ui-widget-header .ui-state-disabled {
++	opacity: .35;
++	filter:Alpha(Opacity=35);
++	background-image: none;
++}
++.ui-state-disabled .ui-icon {
++	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
++}
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	width: 16px;
++	height: 16px;
++}
++.ui-icon,
++.ui-widget-content .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png);
++}
++.ui-widget-header .ui-icon {
++	background-image: url(images/ui-icons_ffffff_256x240.png);
++}
++.ui-state-default .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-hover .ui-icon,
++.ui-state-focus .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-active .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-highlight .ui-icon {
++	background-image: url(images/ui-icons_228ef1_256x240.png);
++}
++.ui-state-error .ui-icon,
++.ui-state-error-text .ui-icon {
++	background-image: url(images/ui-icons_ffd27a_256x240.png);
++}
++
++/* positioning */
++.ui-icon-blank { background-position: 16px 16px; }
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-on { background-position: -96px -144px; }
++.ui-icon-radio-off { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-left,
++.ui-corner-tl {
++	border-top-left-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-right,
++.ui-corner-tr {
++	border-top-right-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-left,
++.ui-corner-bl {
++	border-bottom-left-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-right,
++.ui-corner-br {
++	border-bottom-right-radius: 4px;
++}
++
++/* Overlays */
++.ui-widget-overlay {
++	background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
++	opacity: .5;
++	filter: Alpha(Opacity=50);
++}
++.ui-widget-shadow {
++	margin: -5px 0 0 -5px;
++	padding: 5px;
++	background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
++	opacity: .2;
++	filter: Alpha(Opacity=20);
++	border-radius: 5px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.accordion.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.accordion.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.accordion.css	(revision 15487)
+@@ -0,0 +1,38 @@
++/*!
++ * jQuery UI Accordion 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Accordion#theming
++ */
++.ui-accordion .ui-accordion-header {
++	display: block;
++	cursor: pointer;
++	position: relative;
++	margin-top: 2px;
++	padding: .5em .5em .5em .7em;
++	min-height: 0; /* support: IE7 */
++}
++.ui-accordion .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-noicons {
++	padding-left: .7em;
++}
++.ui-accordion .ui-accordion-icons .ui-accordion-icons {
++	padding-left: 2.2em;
++}
++.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
++	position: absolute;
++	left: .5em;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-accordion .ui-accordion-content {
++	padding: 1em 2.2em;
++	border-top: 0;
++	overflow: auto;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.autocomplete.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.autocomplete.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.autocomplete.css	(revision 15487)
+@@ -0,0 +1,16 @@
++/*!
++ * jQuery UI Autocomplete 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Autocomplete#theming
++ */
++.ui-autocomplete {
++	position: absolute;
++	top: 0;
++	left: 0;
++	cursor: default;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.theme.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.theme.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.theme.css	(revision 15487)
+@@ -0,0 +1,406 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ *
++ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
++ */
++
++
++/* Component containers
++----------------------------------*/
++.ui-widget {
++	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
++	font-size: 1.1em;
++}
++.ui-widget .ui-widget {
++	font-size: 1em;
++}
++.ui-widget input,
++.ui-widget select,
++.ui-widget textarea,
++.ui-widget button {
++	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
++	font-size: 1em;
++}
++.ui-widget-content {
++	border: 1px solid #dddddd;
++	background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
++	color: #333333;
++}
++.ui-widget-content a {
++	color: #333333;
++}
++.ui-widget-header {
++	border: 1px solid #e78f08;
++	background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
++	color: #ffffff;
++	font-weight: bold;
++}
++.ui-widget-header a {
++	color: #ffffff;
++}
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default,
++.ui-widget-content .ui-state-default,
++.ui-widget-header .ui-state-default {
++	border: 1px solid #cccccc;
++	background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #1c94c4;
++}
++.ui-state-default a,
++.ui-state-default a:link,
++.ui-state-default a:visited {
++	color: #1c94c4;
++	text-decoration: none;
++}
++.ui-state-hover,
++.ui-widget-content .ui-state-hover,
++.ui-widget-header .ui-state-hover,
++.ui-state-focus,
++.ui-widget-content .ui-state-focus,
++.ui-widget-header .ui-state-focus {
++	border: 1px solid #fbcb09;
++	background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #c77405;
++}
++.ui-state-hover a,
++.ui-state-hover a:hover,
++.ui-state-hover a:link,
++.ui-state-hover a:visited {
++	color: #c77405;
++	text-decoration: none;
++}
++.ui-state-active,
++.ui-widget-content .ui-state-active,
++.ui-widget-header .ui-state-active {
++	border: 1px solid #fbd850;
++	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
++	font-weight: bold;
++	color: #eb8f00;
++}
++.ui-state-active a,
++.ui-state-active a:link,
++.ui-state-active a:visited {
++	color: #eb8f00;
++	text-decoration: none;
++}
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight,
++.ui-widget-content .ui-state-highlight,
++.ui-widget-header .ui-state-highlight {
++	border: 1px solid #fed22f;
++	background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
++	color: #363636;
++}
++.ui-state-highlight a,
++.ui-widget-content .ui-state-highlight a,
++.ui-widget-header .ui-state-highlight a {
++	color: #363636;
++}
++.ui-state-error,
++.ui-widget-content .ui-state-error,
++.ui-widget-header .ui-state-error {
++	border: 1px solid #cd0a0a;
++	background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
++	color: #ffffff;
++}
++.ui-state-error a,
++.ui-widget-content .ui-state-error a,
++.ui-widget-header .ui-state-error a {
++	color: #ffffff;
++}
++.ui-state-error-text,
++.ui-widget-content .ui-state-error-text,
++.ui-widget-header .ui-state-error-text {
++	color: #ffffff;
++}
++.ui-priority-primary,
++.ui-widget-content .ui-priority-primary,
++.ui-widget-header .ui-priority-primary {
++	font-weight: bold;
++}
++.ui-priority-secondary,
++.ui-widget-content .ui-priority-secondary,
++.ui-widget-header .ui-priority-secondary {
++	opacity: .7;
++	filter:Alpha(Opacity=70);
++	font-weight: normal;
++}
++.ui-state-disabled,
++.ui-widget-content .ui-state-disabled,
++.ui-widget-header .ui-state-disabled {
++	opacity: .35;
++	filter:Alpha(Opacity=35);
++	background-image: none;
++}
++.ui-state-disabled .ui-icon {
++	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
++}
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	width: 16px;
++	height: 16px;
++}
++.ui-icon,
++.ui-widget-content .ui-icon {
++	background-image: url(images/ui-icons_222222_256x240.png);
++}
++.ui-widget-header .ui-icon {
++	background-image: url(images/ui-icons_ffffff_256x240.png);
++}
++.ui-state-default .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-hover .ui-icon,
++.ui-state-focus .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-active .ui-icon {
++	background-image: url(images/ui-icons_ef8c08_256x240.png);
++}
++.ui-state-highlight .ui-icon {
++	background-image: url(images/ui-icons_228ef1_256x240.png);
++}
++.ui-state-error .ui-icon,
++.ui-state-error-text .ui-icon {
++	background-image: url(images/ui-icons_ffd27a_256x240.png);
++}
++
++/* positioning */
++.ui-icon-blank { background-position: 16px 16px; }
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-on { background-position: -96px -144px; }
++.ui-icon-radio-off { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-left,
++.ui-corner-tl {
++	border-top-left-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-top,
++.ui-corner-right,
++.ui-corner-tr {
++	border-top-right-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-left,
++.ui-corner-bl {
++	border-bottom-left-radius: 4px;
++}
++.ui-corner-all,
++.ui-corner-bottom,
++.ui-corner-right,
++.ui-corner-br {
++	border-bottom-right-radius: 4px;
++}
++
++/* Overlays */
++.ui-widget-overlay {
++	background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
++	opacity: .5;
++	filter: Alpha(Opacity=50);
++}
++.ui-widget-shadow {
++	margin: -5px 0 0 -5px;
++	padding: 5px;
++	background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
++	opacity: .2;
++	filter: Alpha(Opacity=20);
++	border-radius: 5px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.spinner.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.spinner.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.spinner.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.resizable.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.resizable.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.resizable.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.slider.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.slider.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.slider.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.core.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.core.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.core.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.progressbar.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.progressbar.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.progressbar.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tabs.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tabs.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tabs.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tooltip.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tooltip.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tooltip.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.dialog.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.dialog.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.dialog.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery-ui.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery-ui.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery-ui.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
++* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.accordion.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.accordion.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.accordion.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.autocomplete.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.autocomplete.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.autocomplete.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_gloss-wave_35_f6a828_500x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_gloss-wave_35_f6a828_500x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ef8c08_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ef8c08_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ef8c08_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ef8c08_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ef8c08_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_18_b81900_40x40.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_18_b81900_40x40.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/animated-overlay.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/animated-overlay.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/animated-overlay.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/animated-overlay.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_75_ffe45c_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_75_ffe45c_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffffff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffffff_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffffff_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffffff_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffffff_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_flat_10_000000_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_flat_10_000000_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_flat_10_000000_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_fdf5ce_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_fdf5ce_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_fdf5ce_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_65_ffffff_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_20_666666_40x40.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_20_666666_40x40.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_20_666666_40x40.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_228ef1_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_228ef1_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_228ef1_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_228ef1_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_228ef1_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_100_eeeeee_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_100_eeeeee_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffd27a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffd27a_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffd27a_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffd27a_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffd27a_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_f6f6f6_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_f6f6f6_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_f6f6f6_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_222222_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_222222_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_222222_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_222222_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.theme.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.theme.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.theme.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.theme.css
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.selectable.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.selectable.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.selectable.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.menu.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.menu.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.menu.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.datepicker.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.datepicker.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.datepicker.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.button.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.button.min.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.button.min.css	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++
++.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.selectable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.selectable.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.selectable.css	(revision 15487)
+@@ -0,0 +1,15 @@
++/*!
++ * jQuery UI Selectable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Selectable#theming
++ */
++.ui-selectable-helper {
++	position: absolute;
++	z-index: 100;
++	border: 1px dotted black;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.menu.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.menu.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.menu.css	(revision 15487)
+@@ -0,0 +1,79 @@
++/*!
++ * jQuery UI Menu 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Menu#theming
++ */
++.ui-menu {
++	list-style: none;
++	padding: 2px;
++	margin: 0;
++	display: block;
++	outline: none;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++	position: absolute;
++}
++.ui-menu .ui-menu-item {
++	margin: 0;
++	padding: 0;
++	width: 100%;
++	/* support: IE10, see #8844 */
++	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
++}
++.ui-menu .ui-menu-divider {
++	margin: 5px -2px 5px -2px;
++	height: 0;
++	font-size: 0;
++	line-height: 0;
++	border-width: 1px 0 0 0;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration: none;
++	display: block;
++	padding: 2px .4em;
++	line-height: 1.5;
++	min-height: 0; /* support: IE7 */
++	font-weight: normal;
++}
++.ui-menu .ui-menu-item a.ui-state-focus,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++
++.ui-menu .ui-state-disabled {
++	font-weight: normal;
++	margin: .4em 0 .2em;
++	line-height: 1.5;
++}
++.ui-menu .ui-state-disabled a {
++	cursor: default;
++}
++
++/* icon support */
++.ui-menu-icons {
++	position: relative;
++}
++.ui-menu-icons .ui-menu-item a {
++	position: relative;
++	padding-left: 2em;
++}
++
++/* left-aligned */
++.ui-menu .ui-icon {
++	position: absolute;
++	top: .2em;
++	left: .2em;
++}
++
++/* right-aligned */
++.ui-menu .ui-menu-icon {
++	position: static;
++	float: right;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.all.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.all.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.all.css	(revision 15487)
+@@ -0,0 +1,12 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming
++ */
++@import "jquery.ui.base.css";
++@import "jquery.ui.theme.css";
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.base.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.base.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.base.css	(revision 15487)
+@@ -0,0 +1,25 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming
++ */
++@import url("jquery.ui.core.css");
++
++@import url("jquery.ui.accordion.css");
++@import url("jquery.ui.autocomplete.css");
++@import url("jquery.ui.button.css");
++@import url("jquery.ui.datepicker.css");
++@import url("jquery.ui.dialog.css");
++@import url("jquery.ui.menu.css");
++@import url("jquery.ui.progressbar.css");
++@import url("jquery.ui.resizable.css");
++@import url("jquery.ui.selectable.css");
++@import url("jquery.ui.slider.css");
++@import url("jquery.ui.spinner.css");
++@import url("jquery.ui.tabs.css");
++@import url("jquery.ui.tooltip.css");
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.button.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.button.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.button.css	(revision 15487)
+@@ -0,0 +1,114 @@
++/*!
++ * jQuery UI Button 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Button#theming
++ */
++.ui-button {
++	display: inline-block;
++	position: relative;
++	padding: 0;
++	line-height: normal;
++	margin-right: .1em;
++	cursor: pointer;
++	vertical-align: middle;
++	text-align: center;
++	overflow: visible; /* removes extra width in IE */
++}
++.ui-button,
++.ui-button:link,
++.ui-button:visited,
++.ui-button:hover,
++.ui-button:active {
++	text-decoration: none;
++}
++/* to make room for the icon, a width needs to be set here */
++.ui-button-icon-only {
++	width: 2.2em;
++}
++/* button elements seem to need a little more width */
++button.ui-button-icon-only {
++	width: 2.4em;
++}
++.ui-button-icons-only {
++	width: 3.4em;
++}
++button.ui-button-icons-only {
++	width: 3.7em;
++}
++
++/* button text element */
++.ui-button .ui-button-text {
++	display: block;
++	line-height: normal;
++}
++.ui-button-text-only .ui-button-text {
++	padding: .4em 1em;
++}
++.ui-button-icon-only .ui-button-text,
++.ui-button-icons-only .ui-button-text {
++	padding: .4em;
++	text-indent: -9999999px;
++}
++.ui-button-text-icon-primary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 1em .4em 2.1em;
++}
++.ui-button-text-icon-secondary .ui-button-text,
++.ui-button-text-icons .ui-button-text {
++	padding: .4em 2.1em .4em 1em;
++}
++.ui-button-text-icons .ui-button-text {
++	padding-left: 2.1em;
++	padding-right: 2.1em;
++}
++/* no icon support for input elements, provide padding by default */
++input.ui-button {
++	padding: .4em 1em;
++}
++
++/* button icon element(s) */
++.ui-button-icon-only .ui-icon,
++.ui-button-text-icon-primary .ui-icon,
++.ui-button-text-icon-secondary .ui-icon,
++.ui-button-text-icons .ui-icon,
++.ui-button-icons-only .ui-icon {
++	position: absolute;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-button-icon-only .ui-icon {
++	left: 50%;
++	margin-left: -8px;
++}
++.ui-button-text-icon-primary .ui-button-icon-primary,
++.ui-button-text-icons .ui-button-icon-primary,
++.ui-button-icons-only .ui-button-icon-primary {
++	left: .5em;
++}
++.ui-button-text-icon-secondary .ui-button-icon-secondary,
++.ui-button-text-icons .ui-button-icon-secondary,
++.ui-button-icons-only .ui-button-icon-secondary {
++	right: .5em;
++}
++
++/* button sets */
++.ui-buttonset {
++	margin-right: 7px;
++}
++.ui-buttonset .ui-button {
++	margin-left: 0;
++	margin-right: -.3em;
++}
++
++/* workarounds */
++/* reset extra padding in Firefox, see h5bp.com/l */
++input.ui-button::-moz-focus-inner,
++button.ui-button::-moz-focus-inner {
++	border: 0;
++	padding: 0;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.datepicker.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.datepicker.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.datepicker.css	(revision 15487)
+@@ -0,0 +1,178 @@
++/*!
++ * jQuery UI Datepicker 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Datepicker#theming
++ */
++.ui-datepicker {
++	width: 17em;
++	padding: .2em .2em 0;
++	display: none;
++}
++.ui-datepicker .ui-datepicker-header {
++	position: relative;
++	padding: .2em 0;
++}
++.ui-datepicker .ui-datepicker-prev,
++.ui-datepicker .ui-datepicker-next {
++	position: absolute;
++	top: 2px;
++	width: 1.8em;
++	height: 1.8em;
++}
++.ui-datepicker .ui-datepicker-prev-hover,
++.ui-datepicker .ui-datepicker-next-hover {
++	top: 1px;
++}
++.ui-datepicker .ui-datepicker-prev {
++	left: 2px;
++}
++.ui-datepicker .ui-datepicker-next {
++	right: 2px;
++}
++.ui-datepicker .ui-datepicker-prev-hover {
++	left: 1px;
++}
++.ui-datepicker .ui-datepicker-next-hover {
++	right: 1px;
++}
++.ui-datepicker .ui-datepicker-prev span,
++.ui-datepicker .ui-datepicker-next span {
++	display: block;
++	position: absolute;
++	left: 50%;
++	margin-left: -8px;
++	top: 50%;
++	margin-top: -8px;
++}
++.ui-datepicker .ui-datepicker-title {
++	margin: 0 2.3em;
++	line-height: 1.8em;
++	text-align: center;
++}
++.ui-datepicker .ui-datepicker-title select {
++	font-size: 1em;
++	margin: 1px 0;
++}
++.ui-datepicker select.ui-datepicker-month-year {
++	width: 100%;
++}
++.ui-datepicker select.ui-datepicker-month,
++.ui-datepicker select.ui-datepicker-year {
++	width: 49%;
++}
++.ui-datepicker table {
++	width: 100%;
++	font-size: .9em;
++	border-collapse: collapse;
++	margin: 0 0 .4em;
++}
++.ui-datepicker th {
++	padding: .7em .3em;
++	text-align: center;
++	font-weight: bold;
++	border: 0;
++}
++.ui-datepicker td {
++	border: 0;
++	padding: 1px;
++}
++.ui-datepicker td span,
++.ui-datepicker td a {
++	display: block;
++	padding: .2em;
++	text-align: right;
++	text-decoration: none;
++}
++.ui-datepicker .ui-datepicker-buttonpane {
++	background-image: none;
++	margin: .7em 0 0 0;
++	padding: 0 .2em;
++	border-left: 0;
++	border-right: 0;
++	border-bottom: 0;
++}
++.ui-datepicker .ui-datepicker-buttonpane button {
++	float: right;
++	margin: .5em .2em .4em;
++	cursor: pointer;
++	padding: .2em .6em .3em .6em;
++	width: auto;
++	overflow: visible;
++}
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
++	float: left;
++}
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi {
++	width: auto;
++}
++.ui-datepicker-multi .ui-datepicker-group {
++	float: left;
++}
++.ui-datepicker-multi .ui-datepicker-group table {
++	width: 95%;
++	margin: 0 auto .4em;
++}
++.ui-datepicker-multi-2 .ui-datepicker-group {
++	width: 50%;
++}
++.ui-datepicker-multi-3 .ui-datepicker-group {
++	width: 33.3%;
++}
++.ui-datepicker-multi-4 .ui-datepicker-group {
++	width: 25%;
++}
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
++	border-left-width: 0;
++}
++.ui-datepicker-multi .ui-datepicker-buttonpane {
++	clear: left;
++}
++.ui-datepicker-row-break {
++	clear: both;
++	width: 100%;
++	font-size: 0;
++}
++
++/* RTL support */
++.ui-datepicker-rtl {
++	direction: rtl;
++}
++.ui-datepicker-rtl .ui-datepicker-prev {
++	right: 2px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next {
++	left: 2px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-prev:hover {
++	right: 1px;
++	left: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-next:hover {
++	left: 1px;
++	right: auto;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane {
++	clear: right;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button {
++	float: left;
++}
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
++.ui-datepicker-rtl .ui-datepicker-group {
++	float: right;
++}
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
++	border-right-width: 0;
++	border-left-width: 1px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.spinner.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.spinner.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.spinner.css	(revision 15487)
+@@ -0,0 +1,65 @@
++/*!
++ * jQuery UI Spinner 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Spinner#theming
++ */
++.ui-spinner {
++	position: relative;
++	display: inline-block;
++	overflow: hidden;
++	padding: 0;
++	vertical-align: middle;
++}
++.ui-spinner-input {
++	border: none;
++	background: none;
++	color: inherit;
++	padding: 0;
++	margin: .2em 0;
++	vertical-align: middle;
++	margin-left: .4em;
++	margin-right: 22px;
++}
++.ui-spinner-button {
++	width: 16px;
++	height: 50%;
++	font-size: .5em;
++	padding: 0;
++	margin: 0;
++	text-align: center;
++	position: absolute;
++	cursor: default;
++	display: block;
++	overflow: hidden;
++	right: 0;
++}
++/* more specificity required here to overide default borders */
++.ui-spinner a.ui-spinner-button {
++	border-top: none;
++	border-bottom: none;
++	border-right: none;
++}
++/* vertical centre icon */
++.ui-spinner .ui-icon {
++	position: absolute;
++	margin-top: -8px;
++	top: 50%;
++	left: 0;
++}
++.ui-spinner-up {
++	top: 0;
++}
++.ui-spinner-down {
++	bottom: 0;
++}
++
++/* TR overrides */
++.ui-spinner .ui-icon-triangle-1-s {
++	/* need to fix icons sprite */
++	background-position: -65px -16px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.resizable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.resizable.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.resizable.css	(revision 15487)
+@@ -0,0 +1,78 @@
++/*!
++ * jQuery UI Resizable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Resizable#theming
++ */
++.ui-resizable {
++	position: relative;
++}
++.ui-resizable-handle {
++	position: absolute;
++	font-size: 0.1px;
++	display: block;
++}
++.ui-resizable-disabled .ui-resizable-handle,
++.ui-resizable-autohide .ui-resizable-handle {
++	display: none;
++}
++.ui-resizable-n {
++	cursor: n-resize;
++	height: 7px;
++	width: 100%;
++	top: -5px;
++	left: 0;
++}
++.ui-resizable-s {
++	cursor: s-resize;
++	height: 7px;
++	width: 100%;
++	bottom: -5px;
++	left: 0;
++}
++.ui-resizable-e {
++	cursor: e-resize;
++	width: 7px;
++	right: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-w {
++	cursor: w-resize;
++	width: 7px;
++	left: -5px;
++	top: 0;
++	height: 100%;
++}
++.ui-resizable-se {
++	cursor: se-resize;
++	width: 12px;
++	height: 12px;
++	right: 1px;
++	bottom: 1px;
++}
++.ui-resizable-sw {
++	cursor: sw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	bottom: -5px;
++}
++.ui-resizable-nw {
++	cursor: nw-resize;
++	width: 9px;
++	height: 9px;
++	left: -5px;
++	top: -5px;
++}
++.ui-resizable-ne {
++	cursor: ne-resize;
++	width: 9px;
++	height: 9px;
++	right: -5px;
++	top: -5px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.slider.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.slider.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.slider.css	(revision 15487)
+@@ -0,0 +1,73 @@
++/*!
++ * jQuery UI Slider 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Slider#theming
++ */
++.ui-slider {
++	position: relative;
++	text-align: left;
++}
++.ui-slider .ui-slider-handle {
++	position: absolute;
++	z-index: 2;
++	width: 1.2em;
++	height: 1.2em;
++	cursor: default;
++}
++.ui-slider .ui-slider-range {
++	position: absolute;
++	z-index: 1;
++	font-size: .7em;
++	display: block;
++	border: 0;
++	background-position: 0 0;
++}
++
++/* For IE8 - See #6727 */
++.ui-slider.ui-state-disabled .ui-slider-handle,
++.ui-slider.ui-state-disabled .ui-slider-range {
++	filter: inherit;
++}
++
++.ui-slider-horizontal {
++	height: .8em;
++}
++.ui-slider-horizontal .ui-slider-handle {
++	top: -.3em;
++	margin-left: -.6em;
++}
++.ui-slider-horizontal .ui-slider-range {
++	top: 0;
++	height: 100%;
++}
++.ui-slider-horizontal .ui-slider-range-min {
++	left: 0;
++}
++.ui-slider-horizontal .ui-slider-range-max {
++	right: 0;
++}
++
++.ui-slider-vertical {
++	width: .8em;
++	height: 100px;
++}
++.ui-slider-vertical .ui-slider-handle {
++	left: -.3em;
++	margin-left: 0;
++	margin-bottom: -.6em;
++}
++.ui-slider-vertical .ui-slider-range {
++	left: 0;
++	width: 100%;
++}
++.ui-slider-vertical .ui-slider-range-min {
++	bottom: 0;
++}
++.ui-slider-vertical .ui-slider-range-max {
++	top: 0;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/animated-overlay.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/animated-overlay.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/animated-overlay.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/animated-overlay.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffffff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffffff_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffffff_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffffff_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffffff_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_228ef1_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_228ef1_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_228ef1_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_228ef1_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_228ef1_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_222222_256x240.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_222222_256x240.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_222222_256x240.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_222222_256x240.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.core.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.core.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.core.css	(revision 15487)
+@@ -0,0 +1,93 @@
++/*!
++ * jQuery UI CSS Framework 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden {
++	display: none;
++}
++.ui-helper-hidden-accessible {
++	border: 0;
++	clip: rect(0 0 0 0);
++	height: 1px;
++	margin: -1px;
++	overflow: hidden;
++	padding: 0;
++	position: absolute;
++	width: 1px;
++}
++.ui-helper-reset {
++	margin: 0;
++	padding: 0;
++	border: 0;
++	outline: 0;
++	line-height: 1.3;
++	text-decoration: none;
++	font-size: 100%;
++	list-style: none;
++}
++.ui-helper-clearfix:before,
++.ui-helper-clearfix:after {
++	content: "";
++	display: table;
++	border-collapse: collapse;
++}
++.ui-helper-clearfix:after {
++	clear: both;
++}
++.ui-helper-clearfix {
++	min-height: 0; /* support: IE7 */
++}
++.ui-helper-zfix {
++	width: 100%;
++	height: 100%;
++	top: 0;
++	left: 0;
++	position: absolute;
++	opacity: 0;
++	filter:Alpha(Opacity=0);
++}
++
++.ui-front {
++	z-index: 100;
++}
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled {
++	cursor: default !important;
++}
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon {
++	display: block;
++	text-indent: -99999px;
++	overflow: hidden;
++	background-repeat: no-repeat;
++}
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay {
++	position: fixed;
++	top: 0;
++	left: 0;
++	width: 100%;
++	height: 100%;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.progressbar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.progressbar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.progressbar.css	(revision 15487)
+@@ -0,0 +1,28 @@
++/*!
++ * jQuery UI Progressbar 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Progressbar#theming
++ */
++.ui-progressbar {
++	height: 2em;
++	text-align: left;
++	overflow: hidden;
++}
++.ui-progressbar .ui-progressbar-value {
++	margin: -1px;
++	height: 100%;
++}
++.ui-progressbar .ui-progressbar-overlay {
++	background: url("images/animated-overlay.gif");
++	height: 100%;
++	filter: alpha(opacity=25);
++	opacity: 0.25;
++}
++.ui-progressbar-indeterminate .ui-progressbar-value {
++	background-image: none;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tabs.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tabs.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tabs.css	(revision 15487)
+@@ -0,0 +1,52 @@
++/*!
++ * jQuery UI Tabs 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Tabs#theming
++ */
++.ui-tabs {
++	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++	padding: .2em;
++}
++.ui-tabs .ui-tabs-nav {
++	margin: 0;
++	padding: .2em .2em 0;
++}
++.ui-tabs .ui-tabs-nav li {
++	list-style: none;
++	float: left;
++	position: relative;
++	top: 0;
++	margin: 1px .2em 0 0;
++	border-bottom-width: 0;
++	padding: 0;
++	white-space: nowrap;
++}
++.ui-tabs .ui-tabs-nav li a {
++	float: left;
++	padding: .5em 1em;
++	text-decoration: none;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active {
++	margin-bottom: -1px;
++	padding-bottom: 1px;
++}
++.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
++.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
++.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
++	cursor: text;
++}
++.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
++	cursor: pointer;
++}
++.ui-tabs .ui-tabs-panel {
++	display: block;
++	border-width: 0;
++	padding: 1em 1.4em;
++	background: none;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tooltip.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tooltip.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tooltip.css	(revision 15487)
+@@ -0,0 +1,19 @@
++/*!
++ * jQuery UI Tooltip 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ */
++.ui-tooltip {
++	padding: 8px;
++	position: absolute;
++	z-index: 9999;
++	max-width: 300px;
++	-webkit-box-shadow: 0 0 5px #aaa;
++	box-shadow: 0 0 5px #aaa;
++}
++body .ui-tooltip {
++	border-width: 2px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-shake.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-shake.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-shake.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-shake",
++	"title": "jQuery UI Shake Effect",
++	"description": "Shakes an element horizontally or vertically n times.",
++	"keywords": [
++		"ui",
++		"shake",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/shake-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/MIT-LICENSE.txt
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/MIT-LICENSE.txt	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/MIT-LICENSE.txt	(revision 15487)
+@@ -0,0 +1,26 @@
++Copyright 2013 jQuery Foundation and other contributors,
++http://jqueryui.com/
++
++This software consists of voluntary contributions made by many
++individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
++contribution history, see the revision history and logs, available
++at http://jquery-ui.googlecode.com/svn/
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++"Software"), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/spinner.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/spinner.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/spinner.html	(revision 15487)
+@@ -0,0 +1,572 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI spinner documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Spinner Widget",
++		"excerpt":
++			"\n\t\tEnhance a text input for entering numeric values, with up/down buttons and arrow key handling.\n\t",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="spinner1" class="entry widget"><h2 class="section-title">
++<span>Spinner Widget</span><span class="version-details">version added: 1.9</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		Enhance a text input for entering numeric values, with up/down buttons and arrow key handling.
++	</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-culture">culture</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-icons">icons</a></div>
++<div><a href="#option-incremental">incremental</a></div>
++<div><a href="#option-max">max</a></div>
++<div><a href="#option-min">min</a></div>
++<div><a href="#option-numberFormat">numberFormat</a></div>
++<div><a href="#option-page">page</a></div>
++<div><a href="#option-step">step</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-pageDown">pageDown</a></div>
++<div><a href="#method-pageUp">pageUp</a></div>
++<div><a href="#method-stepDown">stepDown</a></div>
++<div><a href="#method-stepUp">stepUp</a></div>
++<div><a href="#method-value">value</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-start">start</a></div>
++<div><a href="#event-spin">spin</a></div>
++<div><a href="#event-stop">stop</a></div>
++<div><a href="#event-change">change</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>Spinner, or number stepper, widget is perfect for handling all kinds of numeric input. It allow users to type a value directly or modify an existing value by spinning with the keyboard, mouse or scrollwheel. When combined with Globalize, you can even spin currencies and dates in a variety of locales.</p>
++
++		<p>Spinner wraps a text input, adds two buttons to increment and decrement the current value, along with handling key events for the same purpose. It delegates to <a href="https://github.com/jquery/globalize">Globalize</a> for number formatting and parsing.</p>
++
++		<h3>Keyboard interaction</h3>
++
++		<ul>
++			<li>UP: Increment the value by one step.</li>
++			<li>DOWN: Decrement the value by one step.</li>
++			<li>PAGE UP: Increment the value by one page.</li>
++			<li>PAGE DOWN: Decrement the value by one page.</li>
++		</ul>
++
++		<p>Focus stays in the text field, even after using the mouse to click one of the spin buttons.</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-culture" class="api-item first-item">
++<h3>culture<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Sets the culture to use for parsing and formatting the value. If <code>null</code>, the currently set culture in <code>Globalize</code> is used, see <a href="https://github.com/jquery/globalize">Globalize docs</a> for available cultures. Only relevant if the <a href="#option-numberFormat"><code>numberFormat</code></a> option is set. Requires <a href="https://github.com/jquery/globalize">Globalize</a> to be included.</div>
++<strong>Code examples:</strong><p>Initialize the spinner with the culture option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ culture: </code><code class="string">"fr"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the culture option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">culture = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"culture"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"culture"</code><code class="plain">, </code><code class="string">"fr"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the spinner if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the spinner with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-icons" class="api-item">
++<h3>icons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{ down: "ui-icon-triangle-1-s", up: "ui-icon-triangle-1-n" }</code>
++</div>
++<div>
++				Icons to use for buttons, matching an icon defined by the jQuery UI CSS Framework.
++				<ul>
++					<li>up (string, default: "ui-icon-triangle-1-n")</li>
++					<li>down (string, default: "ui-icon-triangle-1-s")</li>
++				</ul>
++			</div>
++<strong>Code examples:</strong><p>Initialize the spinner with the icons option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ icons: { down: </code><code class="string">"custom-down-icon"</code><code class="plain">, up: </code><code class="string">"custom-up-icon"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the icons option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">icons = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code><code class="plain">, { down: </code><code class="string">"custom-down-icon"</code><code class="plain">, up: </code><code class="string">"custom-up-icon"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-incremental" class="api-item">
++<h3>incremental<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>Controls the number of steps taken when holding down a spin button.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: When set to <code>true</code>, the stepping delta will increase when spun incessantly. When set to <code>false</code>, all steps are equal (as defined by the <a href="#option-step"><code>step</code></a> option).</li>
++<li>
++<strong>Function</strong>: Receives one parameter: the number of spins that have occurred. Must return the number of steps that should occur for the current spin.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the spinner with the incremental option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ incremental: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the incremental option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">incremental = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"incremental"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"incremental"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-max" class="api-item">
++<h3>max<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>The maximum allowed value. The element's <code>max</code> attribute is used if it exists and the option is not explicitly set. If <code>null</code>, there is no maximum enforced.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: The maximum value.</li>
++<li>
++<strong>String</strong>: If <a href="https://github.com/jquery/globalize">Globalize</a> is included, the <code>max</code> option can be passed as a string which will be parsed based on the <a href="#opiton-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options; otherwise it will fall back to the native <code>parseFloat()</code> method.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the spinner with the max option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ max: 50 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the max option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">max = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-min" class="api-item">
++<h3>min<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>The minimum allowed value. The element's <code>min</code> attribute is used if it exists and the option is not explicitly set. If <code>null</code>, there is no minimum enforced.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: The minimum value.</li>
++<li>
++<strong>String</strong>: If <a href="https://github.com/jquery/globalize">Globalize</a> is included, the <code>min</code> option can be passed as a string which will be parsed based on the <a href="#opiton-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options; otherwise it will fall back to the native <code>parseFloat()</code> method.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the spinner with the min option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ min: 0 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the min option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">min = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"min"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"min"</code><code class="plain">, 0 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-numberFormat" class="api-item">
++<h3>numberFormat<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Format of numbers passed to  <a href="https://github.com/jquery/globalize"><code>Globalize</code></a>, if available. Most common are <code>"n"</code> for a decimal number and <code>"C"</code> for a currency value. Also see the <a href="#option-culture"><code>culture</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the spinner with the numberFormat option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ numberFormat: </code><code class="string">"n"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the numberFormat option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">numberFormat = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"numberFormat"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"numberFormat"</code><code class="plain">, </code><code class="string">"n"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-page" class="api-item">
++<h3>page<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>10</code>
++</div>
++<div>The number of steps to take when paging via the <a href="#method-pageUp"><code>pageUp</code></a>/<a href="#method-pageDown"><code>pageDown</code></a> methods.</div>
++<strong>Code examples:</strong><p>Initialize the spinner with the page option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ page: 5 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the page option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">page = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"page"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"page"</code><code class="plain">, 5 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-step" class="api-item">
++<h3>step<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>The size of the step to take when spinning via buttons or via the <a href="#method-stepUp"><code>stepUp()</code></a>/<a href="#method-stepDown"><code>stepDown()</code></a> methods. The element's <code>step</code> attribute is used if it exists and the option is not explicitly set.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: The size of the step.</li>
++<li>
++<strong>String</strong>: If <a href="https://github.com/jquery/globalize">Globalize</a> is included, the <code>step</code> option can be passed as a string which will be parsed based on the <a href="#opiton-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options, otherwise it will fall back to the native <code>parseFloat</code>.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the spinner with the step option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ step: 2 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the step option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">step = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"step"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"step"</code><code class="plain">, 2 );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the spinner functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the spinner.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the spinner.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current spinner options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the spinner option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the spinner.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-pageDown"><div class="api-item">
++<h3>pageDown(  [pages ] )</h3>
++<div>
++				Decrements the value by the specified number of pages, as defined by the <a href="#option-page"><code>page</code></a> option. Without the parameter, a single page is decremented.
++			</div>
++<ul><li>
++<div><strong>pages</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>Number of pages to decrement, defaults to 1.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the pageDown method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"pageDown"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-pageUp"><div class="api-item">
++<h3>pageUp(  [pages ] )</h3>
++<div>
++				Increments the value by the specified number of pages, as defined by the <a href="#option-page"><code>page</code></a> option. Without the parameter, a single page is incremented.
++			</div>
++<ul><li>
++<div><strong>pages</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>Number of pages to increment, defaults to 1.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the pageUp method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"pageUp"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-stepDown"><div class="api-item">
++<h3>stepDown(  [steps ] )</h3>
++<div>
++				Decrements the value by the specified number of steps. Without the parameter, a single step is decremented.
++				<p>If the resulting value is above the max, below the min, or reuslts in a step mismatch, the value will be adjusted to the closest valid value.</p>
++			</div>
++<ul><li>
++<div><strong>steps</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>Number of steps to decrement, defaults to 1.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the stepDown method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"stepDown"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-stepUp"><div class="api-item">
++<h3>stepUp(  [steps ] )</h3>
++<div>
++				Increments the value by the specified number of steps. Without the parameter, a single step is incremented.
++				<p>If the resulting value is above the max, below the min, or reuslts in a step mismatch, the value will be adjusted to the closest valid value.</p>
++			</div>
++<ul><li>
++<div><strong>steps</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>Number of steps to increment, defaults to 1.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the stepUp method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"stepUp"</code><code class="plain">, 5 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-value">
++<div class="api-item">
++<h3>value()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div>Gets the current value as a number. The value is parsed based on the <a href="#option-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">value = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"value"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>value( value )</h3>
++<div></div>
++<ul><li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The value to set. If passed as a string, the value is parsed based on the <a href="#option-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"value"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the generated wrapper.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-change" class="api-item first-item">
++<h3>change( event, ui )<span class="returns">Type: <code>spinchange</code></span>
++</h3>
++<div>
++				Triggered when the value of the spinner has changed and the input is no longer focused.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the spinner with the change callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the spinchange event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spinchange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>spincreate</code></span>
++</h3>
++<div>
++		Triggered when the spinner is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the spinner with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the spincreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spincreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-spin" class="api-item">
++<h3>spin( event, ui )<span class="returns">Type: <code>spin</code></span>
++</h3>
++<div>
++				Triggered during increment/decrement (to determine direction of spin compare current value with <code>ui.value</code>).
++				<p>Can be canceled, preventing the value from being updated.</p>
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The new value to be set, unless the event is cancelled.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the spinner with the spin callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">spin: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the spin event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spin"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-start" class="api-item">
++<h3>start( event, ui )<span class="returns">Type: <code>spinstart</code></span>
++</h3>
++<div>
++				Triggered before a spin. Can be canceled, preventing the spin from occurring.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the spinner with the start callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the spinstart event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spinstart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-stop" class="api-item">
++<h3>stop( event, ui )<span class="returns">Type: <code>spinstop</code></span>
++</h3>
++<div>Triggered after a spin.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the spinner with the stop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the spinstop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spinstop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Plain number spinner</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;spinner demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"spinner"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "#spinner" ).spinner();</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="50"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/fold-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/fold-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/fold-effect.html	(revision 15487)
+@@ -0,0 +1,61 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI fold-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Fold Effect",
++		"excerpt":
++			"\n\t\tThe fold effect hides or shows an element by folding it.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="fold1" class="entry effect"><h2 class="section-title"><span>Fold Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The fold effect hides or shows an element by folding it.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">fold</h4>
++<ul>
++<li>
++<div>
++<strong>size</strong> (default: <code>15</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The size of the "folded" element.</div>
++</li>
++<li>
++<div>
++<strong>horizFirst</strong> (default: <code>false</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Boolean">Boolean</a>
++</div>
++<div>Whether the horizontal direction happens first when hiding. Remember, showing inverts hiding.</div>
++</li>
++</ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the fold effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;fold demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "fold" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/resizable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/resizable.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/resizable.html	(revision 15487)
+@@ -0,0 +1,685 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI resizable documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Resizable Widget",
++		"excerpt":
++			"Change the size of an element using the mouse.",
++		"termSlugs": {
++			"category": [
++				"interactions"
++			]
++		}
++	}</script><article id="resizable1" class="entry widget"><h2 class="section-title">
++<span>Resizable Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Change the size of an element using the mouse.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-alsoResize">alsoResize</a></div>
++<div><a href="#option-animate">animate</a></div>
++<div><a href="#option-animateDuration">animateDuration</a></div>
++<div><a href="#option-animateEasing">animateEasing</a></div>
++<div><a href="#option-aspectRatio">aspectRatio</a></div>
++<div><a href="#option-autoHide">autoHide</a></div>
++<div><a href="#option-cancel">cancel</a></div>
++<div><a href="#option-containment">containment</a></div>
++<div><a href="#option-delay">delay</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-distance">distance</a></div>
++<div><a href="#option-ghost">ghost</a></div>
++<div><a href="#option-grid">grid</a></div>
++<div><a href="#option-handles">handles</a></div>
++<div><a href="#option-helper">helper</a></div>
++<div><a href="#option-maxHeight">maxHeight</a></div>
++<div><a href="#option-maxWidth">maxWidth</a></div>
++<div><a href="#option-minHeight">minHeight</a></div>
++<div><a href="#option-minWidth">minWidth</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-start">start</a></div>
++<div><a href="#event-resize">resize</a></div>
++<div><a href="#event-stop">stop</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>The jQuery UI Resizable plugin makes selected elements resizable (meaning they have draggable resize handles). You can specify one or more handles as well as min and max width and height.</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-alsoResize" class="api-item first-item">
++<h3>alsoResize<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Element">Element</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>One or more elements to resize synchronously with the resizable element.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the alsoResize option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ alsoResize: </code><code class="string">"#mirror"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the alsoResize option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">alsoResize = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"alsoResize"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"alsoResize"</code><code class="plain">, </code><code class="string">"#mirror"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-animate" class="api-item">
++<h3>animate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Animates to the final size after resizing.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the animate option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ animate: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the animate option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animate = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-animateDuration" class="api-item">
++<h3>animateDuration<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"slow"</code>
++</div>
++<div>How long to animate when using the <a href="#option-animate"><code>animate</code></a> option.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: Duration in milliseconds.</li>
++<li>
++<strong>String</strong>: A named duration, such as <code>"slow"</code> or <code>"fast"</code>.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the resizable with the animateDuration option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ animateDuration: </code><code class="string">"fast"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the animateDuration option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animateDuration = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animateDuration"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animateDuration"</code><code class="plain">, </code><code class="string">"fast"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-animateEasing" class="api-item">
++<h3>animateEasing<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"swing"</code>
++</div>
++<div>Which <a href="/easings/">easing</a> to apply when using the <a href="#option-animate"><code>animate</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the animateEasing option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ animateEasing: </code><code class="string">"easeOutBounce"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the animateEasing option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animateEasing = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animateEasing"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animateEasing"</code><code class="plain">, </code><code class="string">"easeOutBounce"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-aspectRatio" class="api-item">
++<h3>aspectRatio<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the element should be constrained to a specific aspect ratio.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: When set to <code>true</code>, the element will maintain its original aspect ratio.</li>
++<li>
++<strong>Number</strong>: Force the element to maintain a specific aspect ratio during resizing.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the resizable with the aspectRatio option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ aspectRatio: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the aspectRatio option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">aspectRatio = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"aspectRatio"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"aspectRatio"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-autoHide" class="api-item">
++<h3>autoHide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the handles should hide when the user is not hovering over the element.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the autoHide option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ autoHide: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the autoHide option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoHide = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoHide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoHide"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-cancel" class="api-item">
++<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"input,textarea,button,select,option"</code>
++</div>
++<div>Prevents resizing from starting on specified elements.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the cancel option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ cancel: </code><code class="string">".cancel"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cancel option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, </code><code class="string">".cancel"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-containment" class="api-item">
++<h3>containment<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Constrains resizing to within the bounds of the specified element or region.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Selector</strong>: The resizable element will be contained to the bounding box of the first element found by the selector. If no element is found, no containment will be set.</li>
++<li>
++<strong>Element</strong>: The resizable element will be contained to the bounding box of this element.</li>
++<li>
++<strong>String</strong>: Possible values: <code>"parent"</code> and <code>"document"</code>.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the resizable with the containment option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ containment: </code><code class="string">"parent"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the containment option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">containment = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code><code class="plain">, </code><code class="string">"parent"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-delay" class="api-item">
++<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>Tolerance, in milliseconds, for when resizing should start. If specified, resizing will not start until after mouse is moved beyond duration. This can help prevent unintended resizing when clicking on an element.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the delay option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ delay: 150 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the delay option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the resizable if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-distance" class="api-item">
++<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>Tolerance, in pixels, for when resizing should start. If specified, resizing will not start until after mouse is moved beyond distance. This can help prevent unintended resizing when clicking on an element.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the distance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ distance: 30 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the distance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 30 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-ghost" class="api-item">
++<h3>ghost<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If set to <code>true</code>, a semi-transparent helper element is shown for resizing.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the ghost option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ ghost: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the ghost option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">ghost = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"ghost"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"ghost"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-grid" class="api-item">
++<h3>grid<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Snaps the resizing element to a grid, every x and y pixels. Array values: <code>[ x, y ]</code>.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the grid option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ grid: [ 20, 10 ] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the grid option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">grid = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code><code class="plain">, [ 20, 10 ] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-handles" class="api-item">
++<h3>handles<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"e, s, se"</code>
++</div>
++<div>Which handles can be used for resizing.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>String</strong>: A comma delimited list of any of the following: n, e, s, w, ne, se, sw, nw, all. The necessary handles will be auto-generated by the plugin.</li>
++<li>
++<strong>Object</strong>: The following keys are supported: { n, e, s, w, ne, se, sw, nw }. The value of any specified should be a jQuery selector matching the child element of the resizable to use as that handle. If the handle is not a child of the resizable, you can pass in the DOMElement or a valid jQuery object directly.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the resizable with the handles option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ handles: </code><code class="string">"n, e, s, w"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the handles option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">handles = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handles"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handles"</code><code class="plain">, </code><code class="string">"n, e, s, w"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-helper" class="api-item">
++<h3>helper<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>A class name that will be added to a proxy element to outline the resize during the drag of the resize handle. Once the resize is complete, the original element is sized.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the helper option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ helper: </code><code class="string">"resizable-helper"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the helper option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">helper = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code><code class="plain">, </code><code class="string">"resizable-helper"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-maxHeight" class="api-item">
++<h3>maxHeight<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>The maximum height the resizable should be allowed to resize to.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the maxHeight option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ maxHeight: 300 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the maxHeight option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxHeight = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxHeight"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxHeight"</code><code class="plain">, 300 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-maxWidth" class="api-item">
++<h3>maxWidth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>The maximum width the resizable should be allowed to resize to.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the maxWidth option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ maxWidth: 300 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the maxWidth option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxWidth = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxWidth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxWidth"</code><code class="plain">, 300 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-minHeight" class="api-item">
++<h3>minHeight<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>10</code>
++</div>
++<div>The minimum height the resizable should be allowed to resize to.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the minHeight option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ minHeight: 150 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the minHeight option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minHeight = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minHeight"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minHeight"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-minWidth" class="api-item">
++<h3>minWidth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>10</code>
++</div>
++<div>The minimum width the resizable should be allowed to resize to.</div>
++<strong>Code examples:</strong><p>Initialize the resizable with the minWidth option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ minWidth: 150 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the minWidth option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minWidth = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minWidth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minWidth"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the resizable functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the resizable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the resizable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current resizable options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the resizable option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the resizable.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the resizable element.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
++<h3>create( event, ui )<span class="returns">Type: <code>resizecreate</code></span>
++</h3>
++<div>
++		Triggered when the resizable is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the resizable with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the resizecreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"resizecreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-resize" class="api-item">
++<h3>resize( event, ui )<span class="returns">Type: <code>resize</code></span>
++</h3>
++<div>This event is triggered during the resize, on the drag of the resize handler.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the element to be resized</div>
++</li>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper that's being resized</div>
++</li>
++<li>
++<div><strong>originalElement</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the original element before it is wrapped</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The position represented as <code>{ left, top }</code> before the resizable is resized</div>
++</li>
++<li>
++<div><strong>originalSize</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The size represented as <code>{ width, height }</code> before the resizable is resized</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position represented as <code>{ left, top }</code>
++</div>
++</li>
++<li>
++<div><strong>size</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current size represented as <code>{ width, height }</code>
++</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the resizable with the resize callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">resize: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the resize event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"resize"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-start" class="api-item">
++<h3>start( event, ui )<span class="returns">Type: <code>resizestart</code></span>
++</h3>
++<div>This event is triggered at the start of a resize operation.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the element to be resized</div>
++</li>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper that's being resized</div>
++</li>
++<li>
++<div><strong>originalElement</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the original element before it is wrapped</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The position represented as <code>{ left, top }</code> before the resizable is resized</div>
++</li>
++<li>
++<div><strong>originalSize</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The size represented as <code>{ width, height }</code> before the resizable is resized</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position represented as <code>{ left, top }</code>
++</div>
++</li>
++<li>
++<div><strong>size</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current size represented as <code>{ width, height }</code>
++</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the resizable with the start callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the resizestart event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"resizestart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-stop" class="api-item">
++<h3>stop( event, ui )<span class="returns">Type: <code>resizestop</code></span>
++</h3>
++<div>This event is triggered at the end of a resize operation.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the element to be resized</div>
++</li>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper that's being resized</div>
++</li>
++<li>
++<div><strong>originalElement</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the original element before it is wrapped</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The position represented as <code>{ left, top }</code> before the resizable is resized</div>
++</li>
++<li>
++<div><strong>originalSize</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The size represented as <code>{ width, height }</code> before the resizable is resized</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position represented as <code>{ left, top }</code>
++</div>
++</li>
++<li>
++<div><strong>size</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current size represented as <code>{ width, height }</code>
++</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the resizable with the stop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the resizestop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"resizestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Resizable.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;resizable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#resizable {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="plain">}&nbsp;&nbsp; &lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"resizable"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="plain">$( "#resizable" ).resizable();</code></div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2">&nbsp;</div><div class="line number24 index23 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/scale-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/scale-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/scale-effect.html	(revision 15487)
+@@ -0,0 +1,82 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI scale-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Scale Effect",
++		"excerpt":
++			"\n\t\tShrink or grow an element by a percentage factor.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="scale1" class="entry effect"><h2 class="section-title"><span>Scale Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		Shrink or grow an element by a percentage factor.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">scale</h4>
++<ul>
++<li>
++<div>
++<strong>direction</strong> (default: <code>"both"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The direction of the effect. Possible values: <code>"both"</code>, <code>"vertical"</code> or <code>"horizontal"</code>.</div>
++</li>
++<li>
++<div>
++<strong>origin</strong> (default: <code>[ "middle", "center" ]</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
++</div>
++<div>The vanishing point.</div>
++</li>
++<li>
++<div><strong>percent</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The percentage to scale to.</div>
++</li>
++<li>
++<div>
++<strong>scale</strong> (default: <code>"both"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>Which areas of the element will be resized: <code>"both"</code>, <code>"box"</code>, <code>"content"</code>. Box resizes the border and padding of the element; content resizes any content inside of the element.</div>
++</li>
++</ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Examples:</h2></header><div class="entry-example" id="example-0">
++<h4>Example: <span class="desc">Toggle a div using the scale effect.</span>
++</h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;scale demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "scale" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div>
++<div class="entry-example" id="example-1">
++<h4>Example: <span class="desc">Toggle a div using the scale effect in just one direction.</span>
++</h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;scale demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle({ effect: "scale", direction: "horizontal" });</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/clip-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/clip-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/clip-effect.html	(revision 15487)
+@@ -0,0 +1,55 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI clip-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Clip Effect",
++		"excerpt":
++			"\n\t\tThe clip effect will hide or show an element by clipping the element vertically or horizontally.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="clip1" class="entry effect"><h2 class="section-title"><span>Clip Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The clip effect will hide or show an element by clipping the element vertically or horizontally.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">clip</h4>
++<ul><li>
++<div>
++<strong>direction</strong> (default: <code>"up"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>
++				<p>The plane in which the clip effect will hide or show its element.</p>
++				<p><code>vertical</code> clips the top and bottom edges, while <code>horizontal</code> clips the right and left edges.</p>
++			</div>
++</li></ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the clip effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;clip demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "clip" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/slider.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/slider.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/slider.html	(revision 15487)
+@@ -0,0 +1,586 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI slider documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Slider Widget",
++		"excerpt":
++			"Drag a handle to select a numeric value.",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="slider1" class="entry widget"><h2 class="section-title">
++<span>Slider Widget</span><span class="version-details">version added: 1.5</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Drag a handle to select a numeric value.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-animate">animate</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-max">max</a></div>
++<div><a href="#option-min">min</a></div>
++<div><a href="#option-orientation">orientation</a></div>
++<div><a href="#option-range">range</a></div>
++<div><a href="#option-step">step</a></div>
++<div><a href="#option-value">value</a></div>
++<div><a href="#option-values">values</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-value">value</a></div>
++<div><a href="#method-values">values</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-start">start</a></div>
++<div><a href="#event-slide">slide</a></div>
++<div><a href="#event-change">change</a></div>
++<div><a href="#event-stop">stop</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>The jQuery UI Slider plugin makes selected elements into sliders. There are various options such as multiple handles and ranges. The handle can be moved with the mouse or the arrow keys.</p>
++
++		<p>The slider widget will create handle elements with the class <code>ui-slider-handle</code> on initialization. You can specify custom handle elements by creating and appending the elements and adding the <code>ui-slider-handle</code> class before initialization. It will only create the number of handles needed to match the length of <a href="#option-value"><code>value</code></a>/<a href="#option-values"><code>values</code></a>. For example, if you specify <code>values: [ 1, 5, 18 ]</code> and create one custom handle, the plugin will create the other two.</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-animate" class="api-item first-item">
++<h3>animate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether to slide the handle smoothly when the user clicks on the slider track. Also accepts any valid <a href="//api.jquery.com/animate/#duration">animation duration</a>.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: When set to <code>true</code>, the handle will animate with the default duration.</li>
++<li>
++<strong>String</strong>: The name of a speed, such as <code>"fast"</code> or <code>"slow"</code>.</li>
++<li>
++<strong>Number</strong>: The duration of the animation, in milliseconds.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the slider with the animate option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ animate: </code><code class="string">"fast"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the animate option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animate = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code><code class="plain">, </code><code class="string">"fast"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the slider if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the slider with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-max" class="api-item">
++<h3>max<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>100</code>
++</div>
++<div>The maximum value of the slider.</div>
++<strong>Code examples:</strong><p>Initialize the slider with the max option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ max: 50 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the max option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">max = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-min" class="api-item">
++<h3>min<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>The minimum value of the slider.</div>
++<strong>Code examples:</strong><p>Initialize the slider with the min option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ min: 10 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the min option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">min = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"min"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"min"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-orientation" class="api-item">
++<h3>orientation<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"horizontal"</code>
++</div>
++<div>Determines whether the slider handles move horizontally (min on left, max on right) or vertically (min on bottom, max on top). Possible values: <code>"horizontal"</code>, <code>"vertical"</code>.</div>
++<strong>Code examples:</strong><p>Initialize the slider with the orientation option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ orientation: </code><code class="string">"vertical"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the orientation option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">orientation = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"orientation"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"orientation"</code><code class="plain">, </code><code class="string">"vertical"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-range" class="api-item">
++<h3>range<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the slider represents a range.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: If set to <code>true</code>, the slider will detect if you have two handles and create a stylable range element between these two.</li>
++<li>
++<strong>String</strong>: Either <code>"min"</code> or <code>"max"</code>. A min range goes from the slider min to one handle. A max range goes from one handle to the slider max.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the slider with the range option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ range: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the range option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">range = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"range"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"range"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-step" class="api-item">
++<h3>step<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>Determines the size or amount of each interval or step the slider takes between the min and max. The full specified value range of the slider (max - min) should be evenly divisible by the step.</div>
++<strong>Code examples:</strong><p>Initialize the slider with the step option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ step: 5 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the step option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">step = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"step"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"step"</code><code class="plain">, 5 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-value" class="api-item">
++<h3>value<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>Determines the value of the slider, if there's only one handle. If there is more than one handle, determines the value of the first handle.</div>
++<strong>Code examples:</strong><p>Initialize the slider with the value option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ value: 10 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the value option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">value = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"value"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"value"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-values" class="api-item">
++<h3>values<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>This option can be used to specify multiple handles. If the <a href="#option-range"><code>range</code></a> option is set to <code>true</code>, the length of <code>values</code> should be 2.</div>
++<strong>Code examples:</strong><p>Initialize the slider with the values option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ values: [ 10, 25 ] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the values option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">values = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"values"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"values"</code><code class="plain">, [ 10, 25 ] );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the slider functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the slider.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the slider.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current slider options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the slider option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the slider.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-value">
++<div class="api-item">
++<h3>value()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div>Get the value of the slider.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">selection = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"value"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>value( value )</h3>
++<div>Set the value of the slider.</div>
++<ul><li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The value to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"value"</code><code class="plain">, 55 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-values">
++<div class="api-item">
++<h3>values()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div>Get the value for all handles.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">values = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"values"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>values( index )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div>Get the value for the specified handle.</div>
++<ul><li>
++<div><strong>index</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
++</div>
++<div>The zero-based index of the handle.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">value = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"values"</code><code class="plain">, 0 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>values( index, value )</h3>
++<div>Set the value for the specified handle.</div>
++<ul>
++<li>
++<div><strong>index</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
++</div>
++<div>The zero-based index of the handle.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The value to set.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"values"</code><code class="plain">, 0, 55 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>values( values )</h3>
++<div>Set the value for all handles.</div>
++<ul><li>
++<div><strong>values</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
++</div>
++<div>The values to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"values"</code><code class="plain">, [ 55, 105 ] );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the slider.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-change" class="api-item first-item">
++<h3>change( event, ui )<span class="returns">Type: <code>slidechange</code></span>
++</h3>
++<div>Triggered after the user slides a handle, if the value has changed; or if the value is changed programmatically via the <a href="#method-value"><code>value</code></a> method.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>handle</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the handle that was changed.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The current value of the slider.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the slider with the change callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the slidechange event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slidechange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>slidecreate</code></span>
++</h3>
++<div>
++		Triggered when the slider is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the slider with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the slidecreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slidecreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-slide" class="api-item">
++<h3>slide( event, ui )<span class="returns">Type: <code>slide</code></span>
++</h3>
++<div>Triggered on every mouse move during slide. The value provided in the event as <code>ui.value</code> represents the value that the handle will have as a result of the current movement. Canceling the event will prevent the handle from moving and the handle will continue to have its previous value.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>handle</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the handle being moved.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The value that the handle will move to if the event is not canceled.</div>
++</li>
++<li>
++<div><strong>values</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
++</div>
++<div>An array of the current values of a multi-handled slider.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the slider with the slide callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">slide: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the slide event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slide"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-start" class="api-item">
++<h3>start( event, ui )<span class="returns">Type: <code>slidestart</code></span>
++</h3>
++<div>Triggered when the user starts sliding.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>handle</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the handle being moved.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The current value of the slider.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the slider with the start callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the slidestart event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slidestart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-stop" class="api-item">
++<h3>stop( event, ui )<span class="returns">Type: <code>slidestop</code></span>
++</h3>
++<div>Triggered after the user slides a handle.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>handle</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the handle that was moved.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The current value of the slider.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the slider with the stop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the slidestop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slidestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Slider.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;slider demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;#slider { margin: 10px; }&nbsp; &lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number12 index11 alt1">&nbsp;</div><div class="line number13 index12 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"slider"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1">&nbsp;</div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">$( "#slider" ).slider();</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="50"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/shake-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/shake-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/shake-effect.html	(revision 15487)
+@@ -0,0 +1,66 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI shake-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Shake Effect",
++		"excerpt":
++			"Shakes the element multiple times, vertically or horizontally.",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="shake1" class="entry effect"><h2 class="section-title"><span>Shake Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Shakes the element multiple times, vertically or horizontally.</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">shake</h4>
++<ul>
++<li>
++<div>
++<strong>direction</strong> (default: <code>"both"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The direction of the effect. Possible values: <code>"left"</code>, <code>"right"</code>, <code>"up"</code>, <code>"down"</code>.</div>
++</li>
++<li>
++<div>
++<strong>distance</strong> (default: <code>20</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>Distance to shake.</div>
++</li>
++<li>
++<div>
++<strong>times</strong> (default: <code>3</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
++</div>
++<div>Times to shake.</div>
++</li>
++</ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Shake a div.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;shake demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to shake the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).effect( "shake" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/mouse.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/mouse.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/mouse.html	(revision 15487)
+@@ -0,0 +1,216 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI mouse documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Mouse Interaction",
++		"excerpt":
++			"The base interaction layer.",
++		"termSlugs": {
++			"category": [
++				"utilities","interactions"
++			]
++		}
++	}</script><article id="jQuery-ui-mouse1" class="entry widget"><h2 class="section-title"><span>Mouse Interaction</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>The base interaction layer.</p>
++<section id="quick-nav"><header><h2>QuickNav</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-cancel">cancel</a></div>
++<div><a href="#option-delay">delay</a></div>
++<div><a href="#option-distance">distance</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-_mouseInit">_mouseInit</a></div>
++<div><a href="#method-_mouseDestroy">_mouseDestroy</a></div>
++<div><a href="#method-_mouseDown">_mouseDown</a></div>
++<div><a href="#method-_mouseMove">_mouseMove</a></div>
++<div><a href="#method-_mouseUp">_mouseUp</a></div>
++<div><a href="#method-_mouseDistanceMet">_mouseDistanceMet</a></div>
++<div><a href="#method-_mouseDelayMet">_mouseDelayMet</a></div>
++<div><a href="#method-_mouseStart">_mouseStart</a></div>
++<div><a href="#method-_mouseDrag">_mouseDrag</a></div>
++<div><a href="#method-_mouseStop">_mouseStop</a></div>
++<div><a href="#method-_mouseCapture">_mouseCapture</a></div>
++</div>
++<div class="quick-nav-section"><h3>Events</h3></div></section><div class="longdesc" id="entry-longdesc">
++		<p>Similar to <a href="/jQuery.Widget#jQuery-Widget2"><code>jQuery.Widget</code></a>, the mouse interaction is not intended to be used directly. It is purely a base layer for other widgets to inherit from. This page only documents what is added to <code>jQuery.Widget</code>, but it does include internal methods that are not intended to be overwritten. The intended public API is <a href="#method-_mouseStart"><code>_mouseStart()</code></a>, <a href="#method-_mouseDrag"><code>_mouseDrag()</code></a>, <a href="#method-_mouseStop"><code>_mouseStop()</code></a>, and <a href="#method-_mouseCapture"><code>_mouseCapture()</code></a>.</p>
++	</div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-cancel" class="api-item first-item">
++<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"input,textarea,button,select,option"</code>
++</div>
++<div>Prevents interactions from starting on specified elements.</div>
++<strong>Code examples:</strong><p>Initialize the jQuery.ui.mouse with the cancel option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse({ cancel: </code><code class="string">".title"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cancel option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, </code><code class="string">".title"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-delay" class="api-item">
++<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>Time in milliseconds after mousedown until the interaction should start. This option can be used to prevent unwanted interactions when clicking on an element.</div>
++<strong>Code examples:</strong><p>Initialize the jQuery.ui.mouse with the delay option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse({ delay: 300 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the delay option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 300 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-distance" class="api-item">
++<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>Distance in pixels after mousedown the mouse must move before the interaction should start. This option can be used to prevent unwanted interactions when clicking on an element.</div>
++<strong>Code examples:</strong><p>Initialize the jQuery.ui.mouse with the distance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse({ distance: 10 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the distance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-_mouseCapture"><div class="api-item first-item">
++<h3>_mouseCapture()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div>
++				Determines whether an interaction should start based on event target of the interaction. The default implementation always returns <code>true</code>.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseCapture method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseCapture"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseDelayMet"><div class="api-item">
++<h3>_mouseDelayMet()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div>
++				Determines whether the <a href="#option-delay"><code>delay</code></a> option has been met for the current interaction.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseDelayMet method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDelayMet"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseDestroy"><div class="api-item">
++<h3>_mouseDestroy()</h3>
++<div>
++				Destroys the interaction event handlers. This must be called from the extending widget's <code>_destroy()</code> method.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseDestroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDestroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseDistanceMet"><div class="api-item">
++<h3>_mouseDistanceMet()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div>
++				Determines whether the <a href="#option-distance"><code>distance</code></a> option has been met for the current interaction.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseDistanceMet method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDistanceMet"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseDown"><div class="api-item">
++<h3>_mouseDown()</h3>
++<div>
++				Handles the beginning of an interaction. Verifies that the event is associated with the primary mouse button and ensures that the <a href="#option-delay"><code>delay</code></a> and <a href="#option-distance"><code>distance</code></a> options are met prior to starting the interaction. When the interaction is ready to start, invokes the <a href="#method-_mouseStart"><code>_mouseStart()</code></a> method for the extending widget to handle.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseDown method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDown"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseDrag"><div class="api-item">
++<h3>_mouseDrag()</h3>
++<div>
++				The extending widget should implement a <code>_mouseDrag()</code> method to handle each movement of an interaction. This method will receive the mouse event associated with the movement.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseDrag method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDrag"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseInit"><div class="api-item">
++<h3>_mouseInit()</h3>
++<div>
++				Initializes the interaction event handlers. This must be called from the extending widget's <code>_create()</code> method.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseInit method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseInit"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseMove"><div class="api-item">
++<h3>_mouseMove()</h3>
++<div>
++				Handles each movement of the interaction. Invokes the <a href="#method-_mouseDrag"><code>mouseDrag()</code></a> method for the extending widget to handle.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseMove method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseMove"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseStart"><div class="api-item">
++<h3>_mouseStart()</h3>
++<div>
++				The extending widget should implement a <code>_mouseStart()</code> method to handle the beginning of an interaction. This method will receive the mouse event associated with the start of the interaction.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseStart method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseStart"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseStop"><div class="api-item">
++<h3>_mouseStop()</h3>
++<div>
++				The extending widget should implement a <code>_mouseStop()</code> method to handle the end of an interaction. This method will receive the mouse event associated with the end of the interaction.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseStop method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseStop"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-_mouseUp"><div class="api-item">
++<h3>_mouseUp()</h3>
++<div>
++				Handles the end of the interaction. Invokes the <a href="#method-_mouseStop"><code>mouseStop()</code></a> method for the extending widget to handle.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the _mouseUp method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseUp"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/puff-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/puff-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/puff-effect.html	(revision 15487)
+@@ -0,0 +1,32 @@
++<script>{
++		"title":
++			"Puff Effect",
++		"excerpt":
++			"\n\t\tCreates a puff effect by scaling the element up and hiding it at the same time.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="puff1" class="entry effect"><h2 class="section-title"><span>Puff Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		Creates a puff effect by scaling the element up and hiding it at the same time.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">puff</h4>
++<ul><li>
++<div>
++<strong>percent</strong> (default: <code>150</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The percentage to scale to.</div>
++</li></ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the puff effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;puff demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "puff" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/explode-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/explode-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/explode-effect.html	(revision 15487)
+@@ -0,0 +1,52 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI explode-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Explode Effect",
++		"excerpt":
++			"\n\t\tThe explode effect hides or shows an element by splitting it into pieces.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="explode1" class="entry effect"><h2 class="section-title"><span>Explode Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The explode effect hides or shows an element by splitting it into pieces.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">explode</h4>
++<ul><li>
++<div>
++<strong>pieces</strong> (default: <code>9</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
++</div>
++<div>The number of pieces to explode, should be a perfect square, any other values are rounded to the nearest square.</div>
++</li></ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the explode effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;explode demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "explode" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/accordion.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/accordion.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/accordion.html	(revision 15487)
+@@ -0,0 +1,488 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI accordion documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Accordion Widget",
++		"excerpt":
++			"Convert a pair of headers and content panels into an accordion.",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="accordion1" class="entry widget"><h2 class="section-title">
++<span>Accordion Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Convert a pair of headers and content panels into an accordion.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-active">active</a></div>
++<div><a href="#option-animate">animate</a></div>
++<div><a href="#option-collapsible">collapsible</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-event">event</a></div>
++<div><a href="#option-header">header</a></div>
++<div><a href="#option-heightStyle">heightStyle</a></div>
++<div><a href="#option-icons">icons</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-refresh">refresh</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-activate">activate</a></div>
++<div><a href="#event-beforeActivate">beforeActivate</a></div>
++<div><a href="#event-create">create</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>The markup of your accordion container needs pairs of headers and content panels:</p>
++
++		<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"accordion"</code><code class="plain">&gt;</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;First header&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;First content panel&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;Second header&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;Second content panel&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++
++		<p>Accordions support arbitrary markup, but each content panel must always be the next sibling after its associated header. See the <a href="#option-header"><code>header</code></a> option for information on how to use custom markup structures.</p>
++		<p>The panels can be activated programmatically by setting the <a href="#option-active"><code>active</code></a> option.</p>
++
++		<h3>Keyboard interaction</h3>
++
++		<p>When focus is on a header, the following key commands are available:</p>
++		<ul>
++			<li>UP/LEFT - Move focus to the previous header. If on first header, moves focus to last header.</li>
++			<li>DOWN/RIGHT - Move focus to the next header. If on last header, moves focus to first header.</li>
++			<li>HOME - Move focus to the first header.</li>
++			<li>END - Move focus to the last header.</li>
++			<li>SPACE/ENTER - Activate panel associated with focused header.</li>
++		</ul>
++
++		<p>When focus is in a panel:</p>
++		<ul>
++			<li>CTRL+UP: Move focus to associated header.</li>
++		</ul>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-active" class="api-item first-item">
++<h3>active<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Integer">Integer</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>
++				Which panel is currently open.
++			</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: Setting <code>active</code> to <code>false</code> will collapse all panels. This requires the <a href="#option-collapsible"><code>collapsible</code></a> option to be <code>true</code>.</li>
++<li>
++<strong>Integer</strong>: The zero-based index of the panel that is active (open). A negative value selects panels going backward from the last panel.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the accordion with the active option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ active: 2 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the active option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">active = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"active"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"active"</code><code class="plain">, 2 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-animate" class="api-item">
++<h3>animate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{}</code>
++</div>
++<div>If and how to animate changing panels.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: A value of <code>false</code> will disable animations.</li>
++<li>
++<strong>Number</strong>: Duration in milliseconds with default easing.</li>
++<li>
++<strong>String</strong>: Name of <a href="/easings/">easing</a> to use with default duration.</li>
++<li>
++<strong>Object</strong>: Animation settings with <code>easing</code> and <code>duration</code> properties.
++					<ul>
++						<li>Can also contain a <code>down</code> property with any of the above options.</li>
++						<li>"Down" animations occur when the panel being activated has a lower index than the currently active panel.</li>
++					</ul>
++				</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the accordion with the animate option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ animate: </code><code class="string">"bounceslide"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the animate option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animate = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code><code class="plain">, </code><code class="string">"bounceslide"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-collapsible" class="api-item">
++<h3>collapsible<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether all the sections can be closed at once. Allows collapsing the active section.</div>
++<strong>Code examples:</strong><p>Initialize the accordion with the collapsible option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ collapsible: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the collapsible option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">collapsible = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"collapsible"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"collapsible"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the accordion if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the accordion with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-event" class="api-item">
++<h3>event<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"click"</code>
++</div>
++<div>The event that accordion headers will react to in order to activate the associated panel. Multiple events can be specificed, separated by a space.</div>
++<strong>Code examples:</strong><p>Initialize the accordion with the event option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ event: </code><code class="string">"mouseover"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the event option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">event = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"event"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"event"</code><code class="plain">, </code><code class="string">"mouseover"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-header" class="api-item">
++<h3>header<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"&gt; li &gt; :first-child,&gt; :not(li):even"</code>
++</div>
++<div>
++				<p>Selector for the header element, applied via <code>.find()</code> on the main accordion element. Content panels must be the sibling immedately after their associated headers.</p>
++			</div>
++<strong>Code examples:</strong><p>Initialize the accordion with the header option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ header: </code><code class="string">"h3"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the header option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">header = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"header"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"header"</code><code class="plain">, </code><code class="string">"h3"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-heightStyle" class="api-item">
++<h3>heightStyle<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"auto"</code>
++</div>
++<div>
++				<p>Controls the height of the accordion and each panel. Possible values:</p>
++				<ul>
++					<li>
++<code>"auto"</code>: All panels will be set to the height of the tallest panel.</li>
++					<li>
++<code>"fill"</code>: Expand to the available height based on the accordion's parent height.</li>
++					<li>
++<code>"content"</code>: Each panel will be only as tall as its content.</li>
++				</ul>
++			</div>
++<strong>Code examples:</strong><p>Initialize the accordion with the heightStyle option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ heightStyle: </code><code class="string">"fill"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the heightStyle option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">heightStyle = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"heightStyle"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"heightStyle"</code><code class="plain">, </code><code class="string">"fill"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-icons" class="api-item">
++<h3>icons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{ "header": "ui-icon-triangle-1-e", "activeHeader": "ui-icon-triangle-1-s" }</code>
++</div>
++<div>
++				<p>Icons to use for headers, matching an icon defined by the jQuery UI CSS Framework. Set to <code>false</code> to have no icons displayed.</p>
++				<ul>
++					<li>header (string, default: "ui-icon-triangle-1-e")</li>
++					<li>activeHeader (string, default: "ui-icon-triangle-1-s")</li>
++				</ul>
++			</div>
++<strong>Code examples:</strong><p>Initialize the accordion with the icons option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ icons: { </code><code class="string">"header"</code><code class="plain">: </code><code class="string">"ui-icon-plus"</code><code class="plain">, </code><code class="string">"headerSelected"</code><code class="plain">: </code><code class="string">"ui-icon-minus"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the icons option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">icons = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code><code class="plain">, { </code><code class="string">"header"</code><code class="plain">: </code><code class="string">"ui-icon-plus"</code><code class="plain">, </code><code class="string">"headerSelected"</code><code class="plain">: </code><code class="string">"ui-icon-minus"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the accordion functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the accordion.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the accordion.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current accordion options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the accordion option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the accordion.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-refresh"><div class="api-item">
++<h3>refresh()</h3>
++<div>Recompute the height of the accordion panels. Results depend on the content and the <a href="#option-heightStyle"><code>heightStyle</code></a> option.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the refresh method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the accordion.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-activate" class="api-item first-item">
++<h3>activate( event, ui )<span class="returns">Type: <code>accordionactivate</code></span>
++</h3>
++<div>Triggered after a panel has been activated (after animation completes). If the accordion was previously collapsed, <code>ui.oldHeader</code> and <code>ui.oldPanel</code> will be empty jQuery objects. If the accordion is collapsing, <code>ui.newHeader</code> and <code>ui.newPanel</code> will be empty jQuery objects.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>newHeader</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The header that was just activated.</div>
++</li>
++<li>
++<div><strong>oldHeader</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The header that was just deactivated.</div>
++</li>
++<li>
++<div><strong>newPanel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel that was just activated.</div>
++</li>
++<li>
++<div><strong>oldPanel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel that was just deactivated.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the accordion with the activate callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">activate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the accordionactivate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"accordionactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-beforeActivate" class="api-item">
++<h3>beforeActivate( event, ui )<span class="returns">Type: <code>accordionbeforeactivate</code></span>
++</h3>
++<div>Triggered directly before a panel is activated. Can be canceled to prevent the panel from activating. If the accordion is currently collapsed, <code>ui.oldHeader</code> and <code>ui.oldPanel</code> will be empty jQuery objects. If the accordion is collapsing, <code>ui.newHeader</code> and <code>ui.newPanel</code> will be empty jQuery objects.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>newHeader</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The header that is about to be activated.</div>
++</li>
++<li>
++<div><strong>oldHeader</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The header that is about to be deactivated.</div>
++</li>
++<li>
++<div><strong>newPanel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel that is about to be activated.</div>
++</li>
++<li>
++<div><strong>oldPanel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel that is about to be deactivated.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the accordion with the beforeActivate callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeActivate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the accordionbeforeactivate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"accordionbeforeactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>accordioncreate</code></span>
++</h3>
++<div>Triggered when the accordion is created. If the accordion is collapsed, <code>ui.header</code> and <code>ui.panel</code> will be empty jQuery objects.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>header</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The active header.</div>
++</li>
++<li>
++<div><strong>panel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The active panel.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the accordion with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the accordioncreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"accordioncreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Accordion</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;accordion demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"accordion"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;Section 1&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Mauris mauris ante, blandit et, ultrices a, suscipit eget.</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Integer ut neque. Vivamus nisi metus, molestie vel, gravida in,</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros.</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Nam mi. Proin viverra leo ut odio.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;Section 2&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Sed non urna. Phasellus eu ligula. Vestibulum sit amet purus.</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Vivamus hendrerit, dolor aliquet laoreet, mauris turpis velit,</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">faucibus interdum tellus libero ac justo.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;Section 3&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Nam enim risus, molestie et, porta ac, aliquam ac, risus.</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Quisque lobortis.Phasellus pellentesque purus in massa.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;List item one&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number32 index31 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;List item two&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number33 index32 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;List item three&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number34 index33 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number35 index34 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number36 index35 alt1"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number37 index36 alt2">&nbsp;</div><div class="line number38 index37 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number39 index38 alt2"><code class="plain">$( "#accordion" ).accordion();</code></div><div class="line number40 index39 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number41 index40 alt2">&nbsp;</div><div class="line number42 index41 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number43 index42 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="350"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/highlight-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/highlight-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/highlight-effect.html	(revision 15487)
+@@ -0,0 +1,52 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI highlight-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Highlight Effect",
++		"excerpt":
++			"\n\t\tThe highlight effect hides or shows an element by animating its background color first.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="highlight1" class="entry effect"><h2 class="section-title"><span>Highlight Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The highlight effect hides or shows an element by animating its background color first.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">highlight</h4>
++<ul><li>
++<div>
++<strong>color</strong> (default: <code>"#ffff99"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The background color used during the animation.</div>
++</li></ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the highlight effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;highlight demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "highlight" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/jQuery.widget.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/jQuery.widget.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/jQuery.widget.html	(revision 15487)
+@@ -0,0 +1,611 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI jQuery documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Widget Factory",
++		"excerpt":
++			"Create stateful jQuery plugins using the same abstraction as all jQuery UI widgets.",
++		"termSlugs": {
++			"category": [
++				"utilities","utilities","widgets"
++			]
++		}
++	}</script><div class="toc">
++<h4><span>Contents:</span></h4>
++<ul class="toc-list">
++<li>
++<a href="#jQuery-widget1">jQuery.widget( name [, base ], prototype )</a><ul><li>jQuery.widget( name [, base ], prototype )</li></ul>
++</li>
++<li><a href="#jQuery-Widget2">jQuery.Widget</a></li>
++</ul>
++</div><article id="jQuery-widget1" class="entry method"><h2 class="section-title"><span class="name">jQuery.widget( name [, base ], prototype )</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Create stateful jQuery plugins using the same abstraction as all jQuery UI widgets.</p>
++<ul class="signatures"><li class="signature" id="jQuery-widget-name-base-prototype">
++<h4 class="name">jQuery.widget( name [, base ], prototype )</h4>
++<ul>
++<li>
++<div><strong>name</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the widget to create, including the namespace.</div>
++</li>
++<li>
++<div><strong>base</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
++<div>The base widget to inherit from. This must be a constructor that can be instantiated with the `new` keyword. Defaults to <code>jQuery.Widget</code>.</div>
++</li>
++<li>
++<div><strong>prototype</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a>
++</div>
++<div>The object to use as a prototype for the widget.</div>
++</li>
++</ul>
++</li></ul>
++<div class="longdesc" id="entry-longdesc">
++			<p>You can create new widgets from scratch, using just the <code>$.Widget</code> object as a base to inherit from, or you can explicitly inherit from existing jQuery UI or third-party widgets. Defining a widget with the same name as you inherit from even allows you to extend widgets in place.</p>
++
++			<p>jQuery UI contains many widgets that maintain state and therefore have a slightly different usage pattern than typical jQuery plugins. All of jQuery UI's widgets use the same patterns, which is defined by the widget factory. So if you learn how to use one widget, then you'll know how to use all of them.</p>
++
++			<p><em>Note: This documentation shows examples using the <a href="/progressbar">progressbar widget</a> but the syntax is the same for every widget.</em></p>
++
++			<h3>Initialization</h3>
++
++			<p>In order to track the state of the widget, we must introduce a full life cycle for the widget. The life cycle starts when the widget is initalized. To initialize a widget, we simply call the plugin on one or more elements.</p>
++
++			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar();</code></div></div></td></tr></tbody></table></div>
++
++			<p>This will initialize each element in the jQuery object, in this case the element with an id of <code>"elem"</code>. Because we called the <code>progressbar()</code> method with no parameters, the widget is initialized with its default options. We can pass a set of options during initialization in order to override the default options.</p>
++
++			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar({ value: 20 });</code></div></div></td></tr></tbody></table></div>
++
++			<p>We can pass as many or as few options as we want during initialization. Any options that we don't pass will just use their default values.</p>
++
++			<p>The options are part of the widget's state, so we can set options after initialization as well. We'll see this later with the option method.</p>
++
++			<h3>Methods</h3>
++
++			<p>Now that the widget is initialized, we can query its state or perform actions on the widget. All actions after initialization take the form of a method call. To call a method on a widget, we pass the name of the method to the jQuery plugin. For example, to call the <code>value()</code> method on our progressbar widget, we would use:</p>
++
++			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar( </code><code class="string">"value"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++
++			<p>If the method accepts parameters, we can pass them after the method name. For example, to pass the parameter <code>40</code> to the <code>value()</code> method, we can use:</p>
++
++			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar( </code><code class="string">"value"</code><code class="plain">, 40 );</code></div></div></td></tr></tbody></table></div>
++
++			<p>Just like other methods in jQuery, most widget methods return the jQuery object for chaining.</p>
++
++			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">)</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.progressbar( </code><code class="string">"value"</code><code class="plain">, 90 )</code></div><div class="line number3 index2 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.addClass( </code><code class="string">"almost-done"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++
++			<p>Each widget will have its own set of methods based on the functionality that the widget provides. However, there are a few methods that exist on all widgets, which are documented below.</p>
++
++			<h3>Events</h3>
++
++			<p>All widgets have events associated with their various behaviors to notify you when the state is changing. For most widgets, when the events are triggered, the names are prefixed with the widget name. For example, we can bind to progressbar's <code>change</code> event which is triggered whenever the value changes.</p>
++
++			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).bind( </code><code class="string">"progressbarchange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">() {</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">alert( </code><code class="string">"The value has changed!"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++
++			<p>Each event has a corresponding callback, which is exposed as an option. We can hook into progressbar's <code>change</code> callback instead of binding to the <code>progressbarchange</code> event, if we want to.</p>
++
++			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">() {</code></div><div class="line number3 index2 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">alert( </code><code class="string">"The value has changed!"</code> <code class="plain">);</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number5 index4 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++
++			<p>All widgets have a <code>create</code> event which is triggered upon instantiation.</p>
++		</div>
++</div></article><article id="jQuery-Widget2" class="entry widget"><h2 class="section-title"><span>Base Widget</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>The base widget used by the widget factory.</p>
++<section id="quick-nav"><header><h2>QuickNav</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-hide">hide</a></div>
++<div><a href="#option-show">show</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++<div><a href="#method-_create">_create</a></div>
++<div><a href="#method-_destroy">_destroy</a></div>
++<div><a href="#method-_getCreateEventData">_getCreateEventData</a></div>
++<div><a href="#method-_getCreateOptions">_getCreateOptions</a></div>
++<div><a href="#method-_init">_init</a></div>
++<div><a href="#method-_setOptions">_setOptions</a></div>
++<div><a href="#method-_setOption">_setOption</a></div>
++<div><a href="#method-_on">_on</a></div>
++<div><a href="#method-_off">_off</a></div>
++<div><a href="#method-_super">_super</a></div>
++<div><a href="#method-_superApply">_superApply</a></div>
++<div><a href="#method-_delay">_delay</a></div>
++<div><a href="#method-_hoverable">_hoverable</a></div>
++<div><a href="#method-_focusable">_focusable</a></div>
++<div><a href="#method-_trigger">_trigger</a></div>
++<div><a href="#method-_show">_show</a></div>
++<div><a href="#method-_hide">_hide</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++</div></section><section id="options"><header><h2 class="underline">Options</h2></header><div id="option-disabled" class="api-item first-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the jQuery.Widget if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the jQuery.Widget with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-hide" class="api-item">
++<h3>hide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>If and how to animate the hiding of the element.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: 
++			When set to <code>false</code>, no animation will be used and the element will be hidden immediately.
++			When set to <code>true</code>, the element will fade out with the default duration and the default easing.
++		</li>
++<li>
++<strong>Number</strong>: 
++			The element will fade out with the specified duration and the default easing.
++		</li>
++<li>
++<strong>String</strong>: 
++			The element will be hidden using the specified effect.
++			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideUp"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
++			In either case the effect will be used with the default duration and the default easing.
++		</li>
++<li>
++<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeOut"</code> will be used.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the jQuery.Widget with the hide option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget({ hide: { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the hide option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hide = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code><code class="plain">, { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-show" class="api-item">
++<h3>show<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>If and how to animate the showing of the element.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: 
++			When set to <code>false</code>, no animation will be used and the element will be shown immediately.
++			When set to <code>true</code>, the element will fade in with the default duration and the default easing.
++		</li>
++<li>
++<strong>Number</strong>: 
++			The element will fade in with the specified duration and the default easing.
++		</li>
++<li>
++<strong>String</strong>: 
++			The element will be shown using the specified effect.
++			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideDown"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
++			In either case the effect will be used with the default duration and the default easing.
++		</li>
++<li>
++<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeIn"</code> will be used.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the jQuery.Widget with the show option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget({ show: { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the show option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">show = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code><code class="plain">, { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-_create"><div class="api-item first-item">
++<h3>_create()</h3>
++<div>
++					The <code>_create()</code> method is the widget's constructor.
++					There are no parameters, but <code>this.element</code> and <code>this.options</code> are already set.
++				</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-_delay"><div class="api-item">
++<h3>_delay( fn [, delay ] )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div>
++					Invokes the provided function after a specified delay. Keeps <code>this</code> context correct. Essentially <code>setTimeout()</code>.
++					<p>Returns the timeout ID for use with <code>clearTimeout()</code>.</p>
++				</div>
++<ul>
++<li>
++<div><strong>fn</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>() or <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The function to invoke. Can also be the name of a method on the widget.</div>
++</li>
++<li>
++<div><strong>delay</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The number of milliseconds to wait before invoking the function. Deafults to <code>0</code>.</div>
++</li>
++</ul>
++</div></div>
++<div id="method-_destroy"><div class="api-item">
++<h3>_destroy()</h3>
++<div>
++					The public <a href="#method-destroy"><code>destroy()</code></a> method cleans up all common data, events, etc. and then delegates out to <code>_destroy()</code> for custom, widget-specific, cleanup.
++				</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-_focusable"><div class="api-item">
++<h3>_focusable( element )</h3>
++<div>
++					Sets up <code>element</code> to apply the <code>ui-state-focus</code> class on focus.
++					<p>The event handlers are automatically cleaned up on destroy.</p>
++				</div>
++<ul><li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The element(s) to apply the focusable behavior to.</div>
++</li></ul>
++</div></div>
++<div id="method-_getCreateEventData"><div class="api-item">
++<h3>_getCreateEventData()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>
++					All widgets trigger the <a href="#event-create"><code>create</code></a> event. By default, no data is provided in the event, but this method can return an object which will be passed as the <code>create</code> event's data.
++				</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-_getCreateOptions"><div class="api-item">
++<h3>_getCreateOptions()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>
++					This method allows the widget to define a custom method for defining options during instantiation. This user-provided options override the options returned by this method which override the default options.
++				</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-_hide"><div class="api-item">
++<h3>_hide( element, option [, callback ] )</h3>
++<div>
++					Hides an element immediately, using built-in animation methods, or using custom effects.
++					See the <a href="#option-hide">hide</a> option for possible <code>option</code> values.
++				</div>
++<ul>
++<li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The element(s) to hide.</div>
++</li>
++<li>
++<div><strong>option</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The settings defining how to hide the element.</div>
++</li>
++<li>
++<div><strong>callback</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
++<div>Callback to invoke after the element has been fully hidden.</div>
++</li>
++</ul>
++</div></div>
++<div id="method-_hoverable"><div class="api-item">
++<h3>_hoverable( element )</h3>
++<div>
++					Sets up <code>element</code> to apply the <code>ui-state-hover</code> class on hover.
++					<p>The event handlers are automatically cleaned up on destroy.</p>
++				</div>
++<ul><li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The element(s) to apply the hoverable behavior to.</div>
++</li></ul>
++</div></div>
++<div id="method-_init"><div class="api-item">
++<h3>_init()</h3>
++<div>
++					Widgets have the concept of initialization that is distinct from creation. Any time the plugin is called with no arguments or with only an option hash, the widget is initialized; this includes when the widget is created.
++
++					<p><em>Note: Initialization should only be handled if there is a logical action to perform on successive calls to the widget with no arguments.</em></p>
++				</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-_off"><div class="api-item">
++<h3>_off( element, eventName )</h3>
++<div>
++					Unbinds event handlers from the specified element(s).
++				</div>
++<ul>
++<li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>
++						The element(s) to unbind the event handlers from. Unlike the <code>_on()</code> method, the elements are required for <code>_off()</code>.
++					</div>
++</li>
++<li>
++<div><strong>eventName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>One or more space-separated event types.</div>
++</li>
++</ul>
++</div></div>
++<div id="method-_on"><div class="api-item">
++<h3>_on(  [element ], handlers )</h3>
++<div>
++					Binds event handlers to the specified element(s). Delegation is supported via selectors inside the event names, e.g., "<code>click .foo</code>". The <code>_on()</code> method provides several benefits of direct event binding:
++					<ul>
++						<li>Maintains proper <code>this</code> context inside the handlers.</li>
++						<li>Automatically handles disabled widgets: If the widget is disabled or the event occurs on an element with the <code>ui-state-disabled</code> class, the event handler is not invoked.</li>
++						<li>Event handlers are automatically namespaced and cleaned up on destroy.</li>
++					</ul>
++				</div>
++<ul>
++<li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>Which element(s) to bind the event handlers to. If no element is provided, <code>this.element</code> is used.</div>
++</li>
++<li>
++<div><strong>handlers</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>
++						A map in which the string keys represent the event type and optional selector for delegation, and the values represent a handler function to be called for the event.
++					</div>
++</li>
++</ul>
++</div></div>
++<div id="method-_setOption"><div class="api-item">
++<h3>_setOption( key, value )</h3>
++<div>
++					Called from the <a href="#method-_setOptions"><code>_setOptions()</code></a> method for each individual option. Widget state should be updated based on changes.
++				</div>
++<ul>
++<li>
++<div><strong>key</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++</div></div>
++<div id="method-_setOptions"><div class="api-item">
++<h3>_setOptions( options )</h3>
++<div>
++					Called whenever the <a href="#method-option"><code>option()</code></a> method is called, regardless of the form in which the <code>option()</code> method was called.
++					<p>Overriding this is useful if you can defer processor-intensive changes for multiple option changes.</p>
++				</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++</div></div>
++<div id="method-_show"><div class="api-item">
++<h3>_show( element, option [, callback ] )</h3>
++<div>
++					Shows an element immediately, using built-in animation methods, or using custom effects.
++					See the <a href="#option-show">show</a> option for possible <code>option</code> values.
++				</div>
++<ul>
++<li>
++<div><strong>element</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The element(s) to show.</div>
++</li>
++<li>
++<div><strong>option</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The settings defining how to show the element.</div>
++</li>
++<li>
++<div><strong>callback</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
++<div>Callback to invoke after the element has been fully shown.</div>
++</li>
++</ul>
++</div></div>
++<div id="method-_super"><div class="api-item">
++<h3>_super()</h3>
++<div>
++					Invokes the method of the same name from the parent widget, with any specified arguments. Essentially <code>.call()</code>.
++				</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-_superApply"><div class="api-item">
++<h3>_superApply( arguments )</h3>
++<div>
++					Invokes the method of the same name from the parent widget, with the array of arguments. Essentially <code>.apply()</code>.
++				</div>
++<ul><li>
++<div><strong>arguments</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
++</div>
++<div>Array of arguments to pass to the parent method.</div>
++</li></ul>
++</div></div>
++<div id="method-_trigger"><div class="api-item">
++<h3>_trigger( type [, event ] [, data ] )</h3>
++<div>
++					Triggers an event and its associated callback.
++					<p>The option with the name equal to type is invoked as the callback.</p>
++					<p>The event name is the widget name + type.</p>
++					<p><em>Note: When providing data, you must provide all three parameters. If there is no event to pass along, just pass <code>null</code>.</em></p>
++				</div>
++<ul>
++<li>
++<div><strong>type</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The <code>type</code> should match the name of a callback option. The full event type will be generated automatically.</div>
++</li>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>The original event that caused this event to occur; useful for providing context to the listener.</div>
++</li>
++<li>
++<div><strong>data</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A hash of data associated with the event.</div>
++</li>
++</ul>
++</div></div>
++<div id="method-destroy"><div class="api-item">
++<h3>destroy()</h3>
++<div>
++		Removes the jQuery.Widget functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the jQuery.Widget.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the jQuery.Widget.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current jQuery.Widget options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the jQuery.Widget option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the jQuery.Widget.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the original element or other relevant generated element.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
++<h3>create( event, ui )<span class="returns">Type: <code>jQuery.Widgetcreate</code></span>
++</h3>
++<div>
++		Triggered when the jQuery.Widget is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the jQuery.Widget with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the jQuery.Widgetcreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"jQuery.Widgetcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/position.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/position.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/position.html	(revision 15487)
+@@ -0,0 +1,116 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI position documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			".position()",
++		"excerpt":
++			"Position an element relative to another.",
++		"termSlugs": {
++			"category": [
++				"methods","overrides","utilities"
++			]
++		}
++	}</script><article id="position1" class="entry method"><h2 class="section-title">
++<span class="name">.position( options )</span><span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span><span class="version-details">version added: 1.8</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Position an element relative to another.</p>
++<ul class="signatures"><li class="signature" id="position-options">
++<h4 class="name">.position( options )</h4>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div>
++<strong>my</strong> (default: <code>"center"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>Defines which position <strong>on the element being positioned</strong> to align with the target element: "horizontal vertical" alignment. A single value such as <code>"right"</code> will be normalized to <code>"right center"</code>, <code>"top"</code> will be normalized to <code>"center top"</code> (following CSS convention). Acceptable horizontal values: <code>"left"</code>, <code>"center"</code>, <code>"right"</code>. Acceptable vertical values: <code>"top"</code>, <code>"center"</code>, <code>"bottom"</code>. Example: <code>"left top"</code> or <code>"center center"</code>. Each dimension can also contain offsets, in pixels or percent, e.g., <code>"right+10 top-25%"</code>. Percentage offsets are relative to the element being positioned.</div>
++</li>
++<li>
++<div>
++<strong>at</strong> (default: <code>"center"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>Defines which position <strong>on the target element</strong> to align the positioned element against: "horizontal vertical" alignment. See the <a href="#option-my"><code>my</code></a> option for full details on possible values. Perecentage offsets are relative to the target element.</div>
++</li>
++<li>
++<div>
++<strong>of</strong> (default: <code>null</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>Which element to position against. If you provide a selector or jQuery object, the first matching element will be used. If you provide an event object, the <code>pageX</code> and <code>pageY</code> properties will be used. Example: <code>"#top-menu"</code>
++</div>
++</li>
++<li>
++<div>
++<strong>collision</strong> (default: <code>"flip"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>
++					<p>When the positioned element overflows the window in some direction, move it to an alternative position. Similar to <a href="#option-my"><code>my</code></a> and <a href="#option-at"><code>at</code></a>, this accepts a single value or a pair for horizontal/vertical, e.g., <code>"flip"</code>, <code>"fit"</code>, <code>"fit flip"</code>, <code>"fit none"</code>.</p>
++					<ul>
++						<li>
++<code>"flip"</code>: Flips the element to the opposite side of the target and the collision detection is run again to see if it will fit. Whichever side allows more of the element to be visible will be used.</li>
++						<li>
++<code>"fit"</code>: Shift the element away from the edge of the window.</li>
++						<li>
++<code>"flipfit"</code>: First applies the flip logic, placing the element on whichever side allows more of the element to be visible. Then the fit logic is applied to ensure as much of the element is visible as possible.</li>
++						<li>
++<code>"none"</code>: Does not apply any collision detection.</li>
++					</ul>
++				</div>
++</li>
++<li>
++<div>
++<strong>using</strong> (default: <code>null</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
++<div>
++					When specified, the actual property setting is delegated to this callback. Receives two parameters: The first is a hash of <code>top</code> and <code>left</code> values for the position that should be set and can be forwarded to <code>.css()</code> or <code>.animate()</code>.
++					<p>The second provides feedback about the position and dimensions of both elements, as well as calculations to their relative position. Both <code>target</code> and <code>element</code> have these properties: <code>element</code>, <code>left</code>, <code>top</code>, <code>width</code>, <code>height</code>. In addition, there's <code>horizontal</code>, <code>vertical</code> and <code>important</code>, giving you twelve potential directions like <code>{ horizontal: "center", vertical: "left", important: "horizontal" }</code>.</p>
++				</div>
++</li>
++<li>
++<div>
++<strong>within</strong> (default: <code>window</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>Element to position within, affecting collision detection. If you provide a selector or jQuery object, the first matching element will be used.</div>
++</li>
++</ul>
++</li></ul>
++</li></ul>
++<div class="longdesc" id="entry-longdesc">
++		<p>The jQuery UI <code>.position()</code> method allows you to position an element relative to the window, document, another element, or the cursor/mouse, without worrying about offset parents.</p>
++		<p><em>Note: jQuery UI does not support positioning hidden elements.</em></p>
++		<p>This is a standalone jQuery plugin and has no dependencies on other jQuery UI components.</p>
++		<p>This plugin extends jQuery's built-in <a href="http://api.jquery.com/position"><code>.position()</code></a> method. If jQuery UI is not loaded, calling the <code>.position()</code> method may not fail directly, as the method still exists. However, the expected behavior will not occur.</p>
++	</div>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Position example.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div><div class="line number44 index43 alt1">44</div><div class="line number45 index44 alt2">45</div><div class="line number46 index45 alt1">46</div><div class="line number47 index46 alt2">47</div><div class="line number48 index47 alt1">48</div><div class="line number49 index48 alt2">49</div><div class="line number50 index49 alt1">50</div><div class="line number51 index50 alt2">51</div><div class="line number52 index51 alt1">52</div><div class="line number53 index52 alt2">53</div><div class="line number54 index53 alt1">54</div><div class="line number55 index54 alt2">55</div><div class="line number56 index55 alt1">56</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;position demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.positionDiv {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">position: absolute;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 75px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 75px;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: green;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"targetElement"</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"positionDiv"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"position1"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"positionDiv"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"position2"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"positionDiv"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"position3"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"positionDiv"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"position4"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1">&nbsp;</div><div class="line number27 index26 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="plain">$( "#position1" ).position({</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">my: "center",</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">at: "center",</code></div><div class="line number31 index30 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">of: "#targetElement"</code></div><div class="line number32 index31 alt1"><code class="plain">});</code></div><div class="line number33 index32 alt2">&nbsp;</div><div class="line number34 index33 alt1"><code class="plain">$( "#position2" ).position({</code></div><div class="line number35 index34 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">my: "left top",</code></div><div class="line number36 index35 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">at: "left top",</code></div><div class="line number37 index36 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">of: "#targetElement"</code></div><div class="line number38 index37 alt1"><code class="plain">});</code></div><div class="line number39 index38 alt2">&nbsp;</div><div class="line number40 index39 alt1"><code class="plain">$( "#position3" ).position({</code></div><div class="line number41 index40 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">my: "right center",</code></div><div class="line number42 index41 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">at: "right bottom",</code></div><div class="line number43 index42 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">of: "#targetElement"</code></div><div class="line number44 index43 alt1"><code class="plain">});</code></div><div class="line number45 index44 alt2">&nbsp;</div><div class="line number46 index45 alt1"><code class="plain">$( document ).mousemove(function( event ) {</code></div><div class="line number47 index46 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#position4" ).position({</code></div><div class="line number48 index47 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">my: "left+3 bottom-3",</code></div><div class="line number49 index48 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">of: event,</code></div><div class="line number50 index49 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">collision: "fit"</code></div><div class="line number51 index50 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">});</code></div><div class="line number52 index51 alt1"><code class="plain">});</code></div><div class="line number53 index52 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number54 index53 alt1">&nbsp;</div><div class="line number55 index54 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number56 index55 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/bounce-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/bounce-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/bounce-effect.html	(revision 15487)
+@@ -0,0 +1,61 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI bounce-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Bounce Effect",
++		"excerpt":
++			"\n\t\tThe bounce effect bounces an element.  When used with hide or show, the last or first bounce will also fade in/out.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="bounce1" class="entry effect"><h2 class="section-title"><span>Bounce Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The bounce effect bounces an element.  When used with hide or show, the last or first bounce will also fade in/out.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">bounce</h4>
++<ul>
++<li>
++<div>
++<strong>distance</strong> (default: <code>20</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The distance of the largest "bounce" in pixels.</div>
++</li>
++<li>
++<div>
++<strong>times</strong> (default: <code>5</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
++</div>
++<div>The number of times the element will bounce. When used with hide or show, there is an extra "half" bounce for the fade in/out.</div>
++</li>
++</ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the bounce effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;bounce demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "bounce", { times: 3 }, "slow" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/pulsate-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/pulsate-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/pulsate-effect.html	(revision 15487)
+@@ -0,0 +1,52 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI pulsate-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Pulsate Effect",
++		"excerpt":
++			"\n\t\tThe pulsate effect hides or shows an element by pulsing it in or out.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="pulsate1" class="entry effect"><h2 class="section-title"><span>Pulsate Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The pulsate effect hides or shows an element by pulsing it in or out.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">pulsate</h4>
++<ul><li>
++<div>
++<strong>times</strong> (default: <code>5</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
++</div>
++<div>The number of times the element should pulse. An extra half pulse is added for hide/show.</div>
++</li></ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the pulsate effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;pulsate demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "pulsate" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/datepicker.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/datepicker.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/datepicker.html	(revision 15487)
+@@ -0,0 +1,946 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI datepicker documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Datepicker Widget",
++		"excerpt":
++			"Select a date from a popup or inline calendar",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="datepicker1" class="entry widget"><h2 class="section-title">
++<span>Datepicker Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Select a date from a popup or inline calendar</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-altField">altField</a></div>
++<div><a href="#option-altFormat">altFormat</a></div>
++<div><a href="#option-appendText">appendText</a></div>
++<div><a href="#option-autoSize">autoSize</a></div>
++<div><a href="#option-buttonImage">buttonImage</a></div>
++<div><a href="#option-buttonImageOnly">buttonImageOnly</a></div>
++<div><a href="#option-buttonText">buttonText</a></div>
++<div><a href="#option-calculateWeek">calculateWeek</a></div>
++<div><a href="#option-changeMonth">changeMonth</a></div>
++<div><a href="#option-changeYear">changeYear</a></div>
++<div><a href="#option-closeText">closeText</a></div>
++<div><a href="#option-constrainInput">constrainInput</a></div>
++<div><a href="#option-currentText">currentText</a></div>
++<div><a href="#option-dateFormat">dateFormat</a></div>
++<div><a href="#option-dayNames">dayNames</a></div>
++<div><a href="#option-dayNamesMin">dayNamesMin</a></div>
++<div><a href="#option-dayNamesShort">dayNamesShort</a></div>
++<div><a href="#option-defaultDate">defaultDate</a></div>
++<div><a href="#option-duration">duration</a></div>
++<div><a href="#option-firstDay">firstDay</a></div>
++<div><a href="#option-gotoCurrent">gotoCurrent</a></div>
++<div><a href="#option-hideIfNoPrevNext">hideIfNoPrevNext</a></div>
++<div><a href="#option-isRTL">isRTL</a></div>
++<div><a href="#option-maxDate">maxDate</a></div>
++<div><a href="#option-minDate">minDate</a></div>
++<div><a href="#option-monthNames">monthNames</a></div>
++<div><a href="#option-monthNamesShort">monthNamesShort</a></div>
++<div><a href="#option-navigationAsDateFormat">navigationAsDateFormat</a></div>
++<div><a href="#option-nextText">nextText</a></div>
++<div><a href="#option-numberOfMonths">numberOfMonths</a></div>
++<div><a href="#option-prevText">prevText</a></div>
++<div><a href="#option-selectOtherMonths">selectOtherMonths</a></div>
++<div><a href="#option-shortYearCutoff">shortYearCutoff</a></div>
++<div><a href="#option-showAnim">showAnim</a></div>
++<div><a href="#option-showButtonPanel">showButtonPanel</a></div>
++<div><a href="#option-showCurrentAtPos">showCurrentAtPos</a></div>
++<div><a href="#option-showMonthAfterYear">showMonthAfterYear</a></div>
++<div><a href="#option-showOn">showOn</a></div>
++<div><a href="#option-showOptions">showOptions</a></div>
++<div><a href="#option-showOtherMonths">showOtherMonths</a></div>
++<div><a href="#option-showWeek">showWeek</a></div>
++<div><a href="#option-stepMonths">stepMonths</a></div>
++<div><a href="#option-weekHeader">weekHeader</a></div>
++<div><a href="#option-yearRange">yearRange</a></div>
++<div><a href="#option-yearSuffix">yearSuffix</a></div>
++<div><a href="#option-beforeShow">beforeShow</a></div>
++<div><a href="#option-beforeShowDay">beforeShowDay</a></div>
++<div><a href="#option-onChangeMonthYear">onChangeMonthYear</a></div>
++<div><a href="#option-onClose">onClose</a></div>
++<div><a href="#option-onSelect">onSelect</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-dialog">dialog</a></div>
++<div><a href="#method-isDisabled">isDisabled</a></div>
++<div><a href="#method-hide">hide</a></div>
++<div><a href="#method-show">show</a></div>
++<div><a href="#method-refresh">refresh</a></div>
++<div><a href="#method-getDate">getDate</a></div>
++<div><a href="#method-setDate">setDate</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section"><h3>Events</h3></div></section><div class="longdesc" id="entry-longdesc">
++		<p>The jQuery UI Datepicker is a highly configurable plugin that adds datepicker functionality to your pages. You can customize the date format and language, restrict the selectable date ranges and add in buttons and other navigation options easily.</p>
++
++		<p>By default, the datepicker calendar opens in a small overlay when the associated text field gains focus. For an inline calendar, simply attach the datepicker to a div or span.</p>
++
++		<h3>Keyboard interaction</h3>
++		<p>While the datepicker is open, the following key commands are available:</p>
++		<ul>
++			<li>PAGE UP: Move to the previous month.</li>
++			<li>PAGE DOWN: Move to the next month.</li>
++			<li>CTRL+PAGE UP: Move to the previous year.</li>
++			<li>CTRL+PAGE DOWN: Move to the next year.</li>
++			<li>CTRL+HOME: Move to the current month. Open the datepicker if closed.</li>
++			<li>CTRL+LEFT: Move to the previous day.</li>
++			<li>CTRL+RIGHT: Move to the next day.</li>
++			<li>CTRL+UP: Move to the previous week.</li>
++			<li>CTRL+DOWN: Move the next week.</li>
++			<li>ENTER: Select the focused date.</li>
++			<li>CTRL+END: Close the datepicker and erase the date.</li>
++			<li>ESCAPE: Close the datepicker without selection.</li>
++		</ul>
++
++		<h3 id="utility-functions">Utility functions</h3>
++		<ul>
++			<li>$.datepicker.setDefaults( settings ) - Set settings for all datepicker instances.</li>
++			<li>$.datepicker.formatDate( format, date, settings ) - Format a date into a string value with a specified format.</li>
++			<li>$.datepicker.parseDate( format, value, settings )  - Extract a date from a string value with a specified format.</li>
++			<li>$.datepicker.iso8601Week( date ) - Determine the week of the year for a given date: 1 to 53.</li>
++			<li>$.datepicker.noWeekends - Set as beforeShowDay function to prevent selection of weekends.</li>
++		</ul>
++
++		<h3>Localization</h3>
++		<p>Datepicker provides support for localizing its content to cater for different languages and date formats. Each localization is contained within its own file with the language code appended to the name, e.g., <code>jquery.ui.datepicker-fr.js</code> for French. The desired localization file should be included after the main datepicker code. Each localization file adds its settings to the set of available localizations and automatically applies them as defaults for all instances.</p>
++		<p>The <code>$.datepicker.regional</code> attribute holds an array of localizations, indexed by language code, with <code>""</code> referring to the default (English). Each entry is an object with the following attributes: <code>closeText</code>, <code>prevText</code>, <code>nextText</code>, <code>currentText</code>, <code>monthNames</code>, <code>monthNamesShort</code>, <code>dayNames</code>, <code>dayNamesShort</code>, <code>dayNamesMin</code>, <code>weekHeader</code>, <code>dateFormat</code>, <code>firstDay</code>, <code>isRTL</code>, <code>showMonthAfterYear</code>, and <code>yearSuffix</code>.</p>
++		<p>You can restore the default localizations with:</p>
++		<code>$.datepicker.setDefaults( $.datepicker.regional[ "" ] );</code>
++		<p>And can then override an individual datepicker for a specific locale:</p>
++		<code>$( selector ).datepicker( $.datepicker.regional[ "fr" ] );</code>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-altField" class="api-item first-item">
++<h3>altField<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Element">Element</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>""</code>
++</div>
++<div>An input element that is to be updated with the selected date from the datepicker. Use the <a href="#option-altFormat"><code>altFormat</code></a> option to change the format of the date within this field. Leave as blank for no alternate field.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the altField option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ altField: </code><code class="string">"#actualDate"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the altField option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">altField = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"altField"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"altField"</code><code class="plain">, </code><code class="string">"#actualDate"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-altFormat" class="api-item">
++<h3>altFormat<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>""</code>
++</div>
++<div>The <a href="#option-dateFormat"><code>dateFormat</code></a> to be used for the <a href="#option-altField"><code>altField</code></a> option. This allows one date format to be shown to the user for selection purposes, while a different format is actually sent behind the scenes. For a full list of the possible formats see the [[UI/Datepicker/formatDate|formatDate]] function</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the altFormat option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ altFormat: </code><code class="string">"yy-mm-dd"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the altFormat option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">altFormat = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"altFormat"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"altFormat"</code><code class="plain">, </code><code class="string">"yy-mm-dd"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-appendText" class="api-item">
++<h3>appendText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>""</code>
++</div>
++<div>The text to display after each date field, e.g., to show the required format.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the appendText option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ appendText: </code><code class="string">"(yyyy-mm-dd)"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the appendText option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendText"</code><code class="plain">, </code><code class="string">"(yyyy-mm-dd)"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-autoSize" class="api-item">
++<h3>autoSize<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Set to <code>true</code> to automatically resize the input field to accommodate dates in the current <a href="#option-dateFormat"><code>dateFormat</code></a>.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the autoSize option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ autoSize: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the autoSize option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoSize = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoSize"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoSize"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-beforeShow" class="api-item">
++<h3>beforeShow<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#Element">Element</a> input, <a href="http://api.jquery.com/Types#Object">Object</a> inst )</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>A function that takes an input field and current datepicker instance and returns an options object to update the datepicker with. It is called just before the datepicker is displayed.</div>
++</div>
++<div id="option-beforeShowDay" class="api-item">
++<h3>beforeShowDay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#Date">Date</a> date )</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>A function takes a date as a parameter and must return an array with <code>[0]</code> equal to <code>true</code>/<code>false</code> indicating whether or not this date is selectable, <code>[1]</code> equal to a CSS class name or <code>""</code> for the default presentation, and <code>[2]</code> an optional popup tooltip for this date. It is called for each day in the datepicker before it is displayed.</div>
++</div>
++<div id="option-buttonImage" class="api-item">
++<h3>buttonImage<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>""</code>
++</div>
++<div>The URL for the popup button image. If set, the <a href="#option-buttonText"><code>buttonText</code></a> option becomes the <code>alt</code> value and is not directly displayed.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the buttonImage option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ buttonImage: </code><code class="string">"/images/datepicker.gif"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the buttonImage option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">buttonImage = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonImage"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonImage"</code><code class="plain">, </code><code class="string">"/images/datepicker.gif"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-buttonImageOnly" class="api-item">
++<h3>buttonImageOnly<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the button image should be rendered by itself instead of inside a button element.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the buttonImageOnly option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ buttonImageOnly: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the buttonImageOnly option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">buttonImageOnly = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonImageOnly"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonImageOnly"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-buttonText" class="api-item">
++<h3>buttonText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"..."</code>
++</div>
++<div>The text to display on the trigger button. Use in conjunction with the <a href="#option-showOn"><code>showOn</code></a> option set to <code>"button"</code> or <code>"both"</code>.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the buttonText option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ buttonText: </code><code class="string">"Choose"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the buttonText option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">buttonText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonText"</code><code class="plain">, </code><code class="string">"Choose"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-calculateWeek" class="api-item">
++<h3>calculateWeek<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>jQuery.datepicker.iso8601Week</code>
++</div>
++<div>A function to calculate the week of the year for a given date. The default implementation uses the ISO 8601 definition: weeks start on a Monday; the first week of the year contains the first Thursday of the year.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the calculateWeek option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ calculateWeek: myWeekCalc });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the calculateWeek option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">calculateWeek = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"calculateWeek"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"calculateWeek"</code><code class="plain">, myWeekCalc );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-changeMonth" class="api-item">
++<h3>changeMonth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the month should be rendered as a dropdown instead of text.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the changeMonth option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ changeMonth: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the changeMonth option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">changeMonth = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"changeMonth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"changeMonth"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-changeYear" class="api-item">
++<h3>changeYear<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the year should be rendered as a dropdown instead of text. Use the <a href="#option-yearRange"><code>yearRange</code></a> option to control which years are made available for selection.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the changeYear option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ changeYear: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the changeYear option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">changeYear = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"changeYear"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"changeYear"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-closeText" class="api-item">
++<h3>closeText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"Done"</code>
++</div>
++<div>The text to display for the close link. Use the <a href="#option-showButtonPanel"><code>showButtonPanel</code></a> option to display this button.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the closeText option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ closeText: </code><code class="string">"Close"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the closeText option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">closeText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeText"</code><code class="plain">, </code><code class="string">"Close"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-constrainInput" class="api-item">
++<h3>constrainInput<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>When <code>true</code>, entry in the input field is constrained to those characters allowed by the current <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the constrainInput option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ constrainInput: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the constrainInput option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">constrainInput = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"constrainInput"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"constrainInput"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-currentText" class="api-item">
++<h3>currentText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"Today"</code>
++</div>
++<div>The text to display for the current day link. Use the <a href="#option-showButtonPanel"><code>showButtonPanel</code></a> option to display this button.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the currentText option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ currentText: </code><code class="string">"Now"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the currentText option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">currentText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"currentText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"currentText"</code><code class="plain">, </code><code class="string">"Now"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-dateFormat" class="api-item">
++<h3>dateFormat<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"mm/dd/yy"</code>
++</div>
++<div>The format for parsed and displayed dates. For a full list of the possible formats see the <code>[[UI/Datepicker/formatDate|formatDate]]</code> function.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the dateFormat option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ dateFormat: </code><code class="string">"yy-mm-dd"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the dateFormat option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dateFormat = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dateFormat"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dateFormat"</code><code class="plain">, </code><code class="string">"yy-mm-dd"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-dayNames" class="api-item">
++<h3>dayNames<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>[ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]</code>
++</div>
++<div>The list of long day names, starting from Sunday, for use as requested via the <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the dayNames option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ dayNames: [ </code><code class="string">"Dimanche"</code><code class="plain">, </code><code class="string">"Lundi"</code><code class="plain">, </code><code class="string">"Mardi"</code><code class="plain">, </code><code class="string">"Mercredi"</code><code class="plain">, </code><code class="string">"Jeudi"</code><code class="plain">, </code><code class="string">"Vendredi"</code><code class="plain">, </code><code class="string">"Samedi"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the dayNames option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dayNames = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNames"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNames"</code><code class="plain">, [ </code><code class="string">"Dimanche"</code><code class="plain">, </code><code class="string">"Lundi"</code><code class="plain">, </code><code class="string">"Mardi"</code><code class="plain">, </code><code class="string">"Mercredi"</code><code class="plain">, </code><code class="string">"Jeudi"</code><code class="plain">, </code><code class="string">"Vendredi"</code><code class="plain">, </code><code class="string">"Samedi"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-dayNamesMin" class="api-item">
++<h3>dayNamesMin<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>[ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ]</code>
++</div>
++<div>The list of minimised day names, starting from Sunday, for use as column headers within the datepicker.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the dayNamesMin option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ dayNamesMin: [ </code><code class="string">"Di"</code><code class="plain">, </code><code class="string">"Lu"</code><code class="plain">, </code><code class="string">"Ma"</code><code class="plain">, </code><code class="string">"Me"</code><code class="plain">, </code><code class="string">"Je"</code><code class="plain">, </code><code class="string">"Ve"</code><code class="plain">, </code><code class="string">"Sa"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the dayNamesMin option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dayNamesMin = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNamesMin"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNamesMin"</code><code class="plain">, [ </code><code class="string">"Di"</code><code class="plain">, </code><code class="string">"Lu"</code><code class="plain">, </code><code class="string">"Ma"</code><code class="plain">, </code><code class="string">"Me"</code><code class="plain">, </code><code class="string">"Je"</code><code class="plain">, </code><code class="string">"Ve"</code><code class="plain">, </code><code class="string">"Sa"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-dayNamesShort" class="api-item">
++<h3>dayNamesShort<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>[ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ]</code>
++</div>
++<div>The list of abbreviated day names, starting from Sunday, for use as requested via the <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the dayNamesShort option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ dayNamesShort: [ </code><code class="string">"Dim"</code><code class="plain">, </code><code class="string">"Lun"</code><code class="plain">, </code><code class="string">"Mar"</code><code class="plain">, </code><code class="string">"Mer"</code><code class="plain">, </code><code class="string">"Jeu"</code><code class="plain">, </code><code class="string">"Ven"</code><code class="plain">, </code><code class="string">"Sam"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the dayNamesShort option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dayNamesShort = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNamesShort"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNamesShort"</code><code class="plain">, [ </code><code class="string">"Dim"</code><code class="plain">, </code><code class="string">"Lun"</code><code class="plain">, </code><code class="string">"Mar"</code><code class="plain">, </code><code class="string">"Mer"</code><code class="plain">, </code><code class="string">"Jeu"</code><code class="plain">, </code><code class="string">"Ven"</code><code class="plain">, </code><code class="string">"Sam"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-defaultDate" class="api-item">
++<h3>defaultDate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Date">Date</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Set the date to highlight on first opening if the field is blank. Specify either an actual date via a Date object or as a string in the current <code>[[UI/Datepicker#option-dateFormat|dateFormat]]</code>, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +7d'), or null for today.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Date</strong>: A date object containing the default date.</li>
++<li>
++<strong>Number</strong>: A number of days from today. For example <code>2</code> represents two days from today and <code>-1</code> represents yesterday.</li>
++<li>
++<strong>String</strong>: A string in the format defined by the <a href="#option-dateFormat"><code>dateFormat</code></a> option, or a relative date. Relative dates must contain value and period pairs; valid periods are <code>"y"</code> for years, <code>"m"</code> for months, <code>"w"</code> for weeks, and <code>"d"</code> for days. For example, <code>"+1m +7d"</code> represents one month and seven days from today.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the datepicker with the defaultDate option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ defaultDate: +7 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the defaultDate option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">defaultDate = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"defaultDate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"defaultDate"</code><code class="plain">, +7 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-duration" class="api-item">
++<h3>duration<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#"></a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"normal"</code>
++</div>
++<div>Control the speed at which the datepicker appears, it may be a time in milliseconds or a string representing one of the three predefined speeds ("slow", "normal", "fast").</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the duration option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ duration: </code><code class="string">"slow"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the duration option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">duration = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"duration"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"duration"</code><code class="plain">, </code><code class="string">"slow"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-firstDay" class="api-item">
++<h3>firstDay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>Set the first day of the week: Sunday is <code>0</code>, Monday is <code>1</code>, etc.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the firstDay option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ firstDay: 1 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the firstDay option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">firstDay = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"firstDay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"firstDay"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-gotoCurrent" class="api-item">
++<h3>gotoCurrent<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>When <code>true</code>, the current day link moves to the currently selected date instead of today.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the gotoCurrent option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ gotoCurrent: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the gotoCurrent option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">gotoCurrent = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"gotoCurrent"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"gotoCurrent"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-hideIfNoPrevNext" class="api-item">
++<h3>hideIfNoPrevNext<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Normally the previous and next links are disabled when not applicable (see the <a href="#option-minDate"><code>minDate</code></a> and <a href="#option-maxDate"><code>maxDate</code></a> options). You can hide them altogether by setting this attribute to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the hideIfNoPrevNext option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ hideIfNoPrevNext: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the hideIfNoPrevNext option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hideIfNoPrevNext = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hideIfNoPrevNext"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hideIfNoPrevNext"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-isRTL" class="api-item">
++<h3>isRTL<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the current language is drawn from right to left.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the isRTL option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ isRTL: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the isRTL option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">isRTL = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"isRTL"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"isRTL"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-maxDate" class="api-item">
++<h3>maxDate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Date">Date</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>The maximum selectable date. When set to <code>null</code>, there is no maximum.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Date</strong>: A date object containing the maximum date.</li>
++<li>
++<strong>Number</strong>: A number of days from today. For example <code>2</code> represents two days from today and <code>-1</code> represents yesterday.</li>
++<li>
++<strong>String</strong>: A string in the format defined by the <a href="#option-dateFormat"><code>dateFormat</code></a> option, or a relative date. Relative dates must contain value and period pairs; valid periods are <code>"y"</code> for years, <code>"m"</code> for months, <code>"w"</code> for weeks, and <code>"d"</code> for days. For example, <code>"+1m +7d"</code> represents one month and seven days from today.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the datepicker with the maxDate option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ maxDate: </code><code class="string">"+1m +1w"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the maxDate option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxDate = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxDate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxDate"</code><code class="plain">, </code><code class="string">"+1m +1w"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-minDate" class="api-item">
++<h3>minDate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Date">Date</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>The minimum selectable date. When set to <code>null</code>, there is no minimum.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Date</strong>: A date object containing the minimum date.</li>
++<li>
++<strong>Number</strong>: A number of days from today. For example <code>2</code> represents two days from today and <code>-1</code> represents yesterday.</li>
++<li>
++<strong>String</strong>: A string in the format defined by the <a href="#option-dateFormat"><code>dateFormat</code></a> option, or a relative date. Relative dates must contain value and period pairs; valid periods are <code>"y"</code> for years, <code>"m"</code> for months, <code>"w"</code> for weeks, and <code>"d"</code> for days. For example, <code>"+1m +7d"</code> represents one month and seven days from today.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the datepicker with the minDate option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ minDate: </code><code class="keyword">new</code> <code class="plain">Date(2007, 1 - 1, 1) });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the minDate option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minDate = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minDate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minDate"</code><code class="plain">, </code><code class="keyword">new</code> <code class="plain">Date(2007, 1 - 1, 1) );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-monthNames" class="api-item">
++<h3>monthNames<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>[ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]</code>
++</div>
++<div>The list of full month names, for use as requested via the <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the monthNames option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ monthNames: [ </code><code class="string">"Januar"</code><code class="plain">, </code><code class="string">"Februar"</code><code class="plain">, </code><code class="string">"Marts"</code><code class="plain">, </code><code class="string">"April"</code><code class="plain">, </code><code class="string">"Maj"</code><code class="plain">, </code><code class="string">"Juni"</code><code class="plain">, </code><code class="string">"Juli"</code><code class="plain">, </code><code class="string">"August"</code><code class="plain">, </code><code class="string">"September"</code><code class="plain">, </code><code class="string">"Oktober"</code><code class="plain">, </code><code class="string">"November"</code><code class="plain">, </code><code class="string">"December"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the monthNames option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">monthNames = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"monthNames"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"monthNames"</code><code class="plain">, [ </code><code class="string">"Januar"</code><code class="plain">, </code><code class="string">"Februar"</code><code class="plain">, </code><code class="string">"Marts"</code><code class="plain">, </code><code class="string">"April"</code><code class="plain">, </code><code class="string">"Maj"</code><code class="plain">, </code><code class="string">"Juni"</code><code class="plain">, </code><code class="string">"Juli"</code><code class="plain">, </code><code class="string">"August"</code><code class="plain">, </code><code class="string">"September"</code><code class="plain">, </code><code class="string">"Oktober"</code><code class="plain">, </code><code class="string">"November"</code><code class="plain">, </code><code class="string">"December"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-monthNamesShort" class="api-item">
++<h3>monthNamesShort<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>[ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]</code>
++</div>
++<div>The list of abbreviated month names, as used in the month header on each datepicker and as requested via the <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the monthNamesShort option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ monthNamesShort: [ </code><code class="string">"Jan"</code><code class="plain">, </code><code class="string">"Feb"</code><code class="plain">, </code><code class="string">"Mar"</code><code class="plain">, </code><code class="string">"Apr"</code><code class="plain">, </code><code class="string">"Maj"</code><code class="plain">, </code><code class="string">"Jun"</code><code class="plain">, </code><code class="string">"Jul"</code><code class="plain">, </code><code class="string">"Aug"</code><code class="plain">, </code><code class="string">"Sep"</code><code class="plain">, </code><code class="string">"Okt"</code><code class="plain">, </code><code class="string">"Nov"</code><code class="plain">, </code><code class="string">"Dec"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the monthNamesShort option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">monthNamesShort = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"monthNamesShort"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"monthNamesShort"</code><code class="plain">, [ </code><code class="string">"Jan"</code><code class="plain">, </code><code class="string">"Feb"</code><code class="plain">, </code><code class="string">"Mar"</code><code class="plain">, </code><code class="string">"Apr"</code><code class="plain">, </code><code class="string">"Maj"</code><code class="plain">, </code><code class="string">"Jun"</code><code class="plain">, </code><code class="string">"Jul"</code><code class="plain">, </code><code class="string">"Aug"</code><code class="plain">, </code><code class="string">"Sep"</code><code class="plain">, </code><code class="string">"Okt"</code><code class="plain">, </code><code class="string">"Nov"</code><code class="plain">, </code><code class="string">"Dec"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-navigationAsDateFormat" class="api-item">
++<h3>navigationAsDateFormat<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the <a href="#option-prevText"><code>prevText</code></a> and <a href="#option-nextText"><code>nextText</code></a> options should be parsed as dates by the <code>[[UI/Datepicker/formatDate|formatDate]]</code> function, allowing them to display the target month names for example.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the navigationAsDateFormat option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ navigationAsDateFormat: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the navigationAsDateFormat option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">navigationAsDateFormat = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"navigationAsDateFormat"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"navigationAsDateFormat"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-nextText" class="api-item">
++<h3>nextText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"Next"</code>
++</div>
++<div>The text to display for the next month link. With the standard ThemeRoller styling, this value is replaced by an icon.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the nextText option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ nextText: </code><code class="string">"Later"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the nextText option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">nextText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"nextText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"nextText"</code><code class="plain">, </code><code class="string">"Later"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-numberOfMonths" class="api-item">
++<h3>numberOfMonths<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>The number of months to show at once.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: The number of months to display in a single row.</li>
++<li>
++<strong>Array</strong>: An array defining the number of rows and columns to display.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the datepicker with the numberOfMonths option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ numberOfMonths: [ 2, 3 ] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the numberOfMonths option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">numberOfMonths = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"numberOfMonths"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"numberOfMonths"</code><code class="plain">, [ 2, 3 ] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-onChangeMonthYear" class="api-item">
++<h3>onChangeMonthYear<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#Integer">Integer</a> year, <a href="http://api.jquery.com/Types#Integer">Integer</a> month, <a href="http://api.jquery.com/Types#Object">Object</a> inst )</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Called when the datepicker moves to a new month and/or year. The function receives the selected year, month (1-12), and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</div>
++</div>
++<div id="option-onClose" class="api-item">
++<h3>onClose<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#String">String</a> dateText, <a href="http://api.jquery.com/Types#Object">Object</a> inst )</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Called when the datepicker is closed, whether or not a date is selected. The function receives the selected date as text (<code>""</code> if none) and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</div>
++</div>
++<div id="option-onSelect" class="api-item">
++<h3>onSelect<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#String">String</a> dateText, <a href="http://api.jquery.com/Types#Object">Object</a> inst )</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Called when the datepicker is selected. The function receives the selected date as text and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</div>
++</div>
++<div id="option-prevText" class="api-item">
++<h3>prevText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"Prev"</code>
++</div>
++<div>The text to display for the previous month link. With the standard ThemeRoller styling, this value is replaced by an icon.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the prevText option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ prevText: </code><code class="string">"Earlier"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the prevText option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">prevText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"prevText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"prevText"</code><code class="plain">, </code><code class="string">"Earlier"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-selectOtherMonths" class="api-item">
++<h3>selectOtherMonths<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether days in other months shown before or after the current month are selectable. This only applies if the <a href="#option-showOtherMonths"><code>showOtherMonths</code></a> option is set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the selectOtherMonths option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ selectOtherMonths: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the selectOtherMonths option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">selectOtherMonths = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"selectOtherMonths"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"selectOtherMonths"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-shortYearCutoff" class="api-item">
++<h3>shortYearCutoff<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"+10"</code>
++</div>
++<div>The cutoff year for determining the century for a date (used in conjunction with <code>[[UI/Datepicker#option-dateFormat|dateFormat]]</code> 'y'). Any dates entered with a year value less than or equal to the cutoff year are considered to be in the current century, while those greater than it are deemed to be in the previous century.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: A value between <code>0</code> and <code>99</code> indicating the cutoff year.</li>
++<li>
++<strong>String</strong>: A relative number of years from the current year, e.g., <code>"+3"</code> or <code>"-5"</code>.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the datepicker with the shortYearCutoff option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ shortYearCutoff: 50 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the shortYearCutoff option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">shortYearCutoff = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"shortYearCutoff"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"shortYearCutoff"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-showAnim" class="api-item">
++<h3>showAnim<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"show"</code>
++</div>
++<div>The name of the animation used to show and hide the datepicker. Use <code>"show"</code> (the default), <code>"slideDown"</code>, <code>"fadeIn"</code>, any of the <a href="/category/effects/">jQuery UI effects</a>. Set to an empty string to disable animation.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the showAnim option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showAnim: </code><code class="string">"fold"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the showAnim option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showAnim = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showAnim"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showAnim"</code><code class="plain">, </code><code class="string">"fold"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-showButtonPanel" class="api-item">
++<h3>showButtonPanel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether to show the button panel.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the showButtonPanel option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showButtonPanel: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the showButtonPanel option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showButtonPanel = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showButtonPanel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showButtonPanel"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-showCurrentAtPos" class="api-item">
++<h3>showCurrentAtPos<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>When displaying multiple months via the <a href="#option-numberOfMonths"><code>numberOfMonths</code></a> option, the <code>showCurrentAtPos</code> option defines which position to display the current month in.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the showCurrentAtPos option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showCurrentAtPos: 3 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the showCurrentAtPos option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showCurrentAtPos = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showCurrentAtPos"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showCurrentAtPos"</code><code class="plain">, 3 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-showMonthAfterYear" class="api-item">
++<h3>showMonthAfterYear<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether to show the month after the year in the header.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the showMonthAfterYear option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showMonthAfterYear: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the showMonthAfterYear option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showMonthAfterYear = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showMonthAfterYear"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showMonthAfterYear"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-showOn" class="api-item">
++<h3>showOn<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"focus"</code>
++</div>
++<div>When the datepicker should appear. The datepicker can appear when the field receives focus (<code>"focus"</code>), when a button is clicked (<code>"button"</code>), or when either event occurs (<code>"both"</code>).</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the showOn option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showOn: </code><code class="string">"both"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the showOn option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showOn = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOn"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOn"</code><code class="plain">, </code><code class="string">"both"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-showOptions" class="api-item">
++<h3>showOptions<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{}</code>
++</div>
++<div>If using one of the jQuery UI effects for the <a href="#option-showAnim"><code>showAnim</code></a> option, you can provide additional settings for that animation via this option.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the showOptions option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showOptions: { direction: </code><code class="string">"up"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the showOptions option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showOptions = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOptions"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOptions"</code><code class="plain">, { direction: </code><code class="string">"up"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-showOtherMonths" class="api-item">
++<h3>showOtherMonths<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether to display dates in other months (non-selectable) at the start or end of the current month. To make these days selectable use the <a href="#option-selectOtherMonths"><code>selectOtherMonths</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the showOtherMonths option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showOtherMonths: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the showOtherMonths option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showOtherMonths = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOtherMonths"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOtherMonths"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-showWeek" class="api-item">
++<h3>showWeek<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>When <code>true</code>, a column is added to show the week of the year. The <a href="#option-calculateWeek"><code>calculateWeek</code></a> option determines how the week of the year is calculated. You may also want to change the <a href="#option-firstDay"><code>firstDay</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the showWeek option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showWeek: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the showWeek option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showWeek = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showWeek"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showWeek"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-stepMonths" class="api-item">
++<h3>stepMonths<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>Set how many months to move when clicking the previous/next links.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the stepMonths option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ stepMonths: 3 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the stepMonths option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">stepMonths = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"stepMonths"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"stepMonths"</code><code class="plain">, 3 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-weekHeader" class="api-item">
++<h3>weekHeader<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"Wk"</code>
++</div>
++<div>The text to display for the week of the year column heading. Use the <a href="#option-showWeek"><code>showWeek</code></a> option to display this column.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the weekHeader option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ weekHeader: </code><code class="string">"W"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the weekHeader option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">weekHeader = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"weekHeader"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"weekHeader"</code><code class="plain">, </code><code class="string">"W"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-yearRange" class="api-item">
++<h3>yearRange<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"c-10:c+10"</code>
++</div>
++<div>The range of years displayed in the year drop-down: either relative to today's year (<code>"-nn:+nn"</code>), relative to the currently selected year (<code>"c-nn:c+nn"</code>), absolute (<code>"nnnn:nnnn"</code>), or combinations of these formats (<code>"nnnn:-nn"</code>). Note that this option only affects what appears in the drop-down, to restrict which dates may be selected use the <a href="#option-minDate"><code>minDate</code></a> and/or <a href="#option-maxDate"><code>maxDate</code></a> options.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the yearRange option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ yearRange: </code><code class="string">"2002:2012"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the yearRange option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">yearRange = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"yearRange"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"yearRange"</code><code class="plain">, </code><code class="string">"2002:2012"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-yearSuffix" class="api-item">
++<h3>yearSuffix<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>""</code>
++</div>
++<div>Additional text to display after the year in the month headers.</div>
++<strong>Code examples:</strong><p>Initialize the datepicker with the yearSuffix option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ yearSuffix: </code><code class="string">"CE"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the yearSuffix option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">yearSuffix = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"yearSuffix"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"yearSuffix"</code><code class="plain">, </code><code class="string">"CE"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the datepicker functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-dialog"><div class="api-item">
++<h3>dialog( date [, onSelect ] [, settings ] [, pos ] )</h3>
++<div>Opens the datepicker in a dialog box.</div>
++<ul>
++<li>
++<div><strong>date</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Date">Date</a>
++</div>
++<div>The initial date.</div>
++</li>
++<li>
++<div><strong>onSelect</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
++<div>A callback function when a date is selected. The function receives the date text and date picker instance as parameters.</div>
++</li>
++<li>
++<div><strong>settings</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Options">Options</a>
++</div>
++<div>The new settings for the date picker.</div>
++</li>
++<li>
++<div><strong>pos</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number%5B2%5D%20or%20MouseEvent">Number[2] or MouseEvent</a>
++</div>
++<div>The position of the top/left of the dialog as <code>[x, y]</code> or a <code>MouseEvent</code> that contains the coordinates. If not specified the dialog is centered on the screen.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the dialog method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"dialog"</code><code class="plain">, </code><code class="string">"10/12/2012"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-getDate"><div class="api-item">
++<h3>getDate()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Date">Date</a></span>
++</h3>
++<div>Returns the current date for the datepicker or <code>null</code> if no date has been selected.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the getDate method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">currentDate = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"getDate"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-hide"><div class="api-item">
++<h3>hide()</h3>
++<div>Close a previously opened date picker.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the hide method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"hide"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-isDisabled"><div class="api-item">
++<h3>isDisabled()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div>Determine whether a date picker has been disabled.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the isDisabled method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"isDisabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current datepicker options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the datepicker option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the datepicker.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-refresh"><div class="api-item">
++<h3>refresh()</h3>
++<div>Redraw the date picker, after having made some external modifications.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the refresh method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-setDate"><div class="api-item">
++<h3>setDate( date )</h3>
++<div>Sets the date for the datepicker. The new date may be a <code>Date</code> object or a string in the current <a href="#option-dateFormat">date format</a> (e.g., <code>"01/26/2009"</code>), a number of days from today (e.g., <code>+7</code>) or a string of values and periods (<code>"y"</code> for years, <code>"m"</code> for months, <code>"w"</code> for weeks, <code>"d"</code> for days, e.g., <code>"+1m +7d"</code>), or <code>null</code> to clear the selected date.</div>
++<ul><li>
++<div><strong>date</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Date">Date</a>
++</div>
++<div>The new date.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the setDate method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"setDate"</code><code class="plain">, </code><code class="string">"10/12/2012"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-show"><div class="api-item">
++<h3>show()</h3>
++<div>Open the date picker. If the datepicker is attached to an input, the input must be visible for the datepicker to be shown.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the show method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"show"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the datepicker.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Datepicker.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;datepicker demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"datepicker"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "#datepicker" ).datepicker();</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="300"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/sortable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/sortable.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/sortable.html	(revision 15487)
+@@ -0,0 +1,1450 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI sortable documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Sortable Widget",
++		"excerpt":
++			"Reorder elements in a list or grid using the mouse.",
++		"termSlugs": {
++			"category": [
++				"interactions"
++			]
++		}
++	}</script><article id="sortable1" class="entry widget"><h2 class="section-title">
++<span>Sortable Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Reorder elements in a list or grid using the mouse.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-appendTo">appendTo</a></div>
++<div><a href="#option-axis">axis</a></div>
++<div><a href="#option-cancel">cancel</a></div>
++<div><a href="#option-connectWith">connectWith</a></div>
++<div><a href="#option-containment">containment</a></div>
++<div><a href="#option-cursor">cursor</a></div>
++<div><a href="#option-cursorAt">cursorAt</a></div>
++<div><a href="#option-delay">delay</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-distance">distance</a></div>
++<div><a href="#option-dropOnEmpty">dropOnEmpty</a></div>
++<div><a href="#option-forceHelperSize">forceHelperSize</a></div>
++<div><a href="#option-forcePlaceholderSize">forcePlaceholderSize</a></div>
++<div><a href="#option-grid">grid</a></div>
++<div><a href="#option-handle">handle</a></div>
++<div><a href="#option-helper">helper</a></div>
++<div><a href="#option-items">items</a></div>
++<div><a href="#option-opacity">opacity</a></div>
++<div><a href="#option-placeholder">placeholder</a></div>
++<div><a href="#option-revert">revert</a></div>
++<div><a href="#option-scroll">scroll</a></div>
++<div><a href="#option-scrollSensitivity">scrollSensitivity</a></div>
++<div><a href="#option-scrollSpeed">scrollSpeed</a></div>
++<div><a href="#option-tolerance">tolerance</a></div>
++<div><a href="#option-zIndex">zIndex</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-cancel">cancel</a></div>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-refresh">refresh</a></div>
++<div><a href="#method-refreshPositions">refreshPositions</a></div>
++<div><a href="#method-serialize">serialize</a></div>
++<div><a href="#method-toArray">toArray</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-start">start</a></div>
++<div><a href="#event-sort">sort</a></div>
++<div><a href="#event-change">change</a></div>
++<div><a href="#event-beforeStop">beforeStop</a></div>
++<div><a href="#event-stop">stop</a></div>
++<div><a href="#event-update">update</a></div>
++<div><a href="#event-receive">receive</a></div>
++<div><a href="#event-remove">remove</a></div>
++<div><a href="#event-over">over</a></div>
++<div><a href="#event-out">out</a></div>
++<div><a href="#event-activate">activate</a></div>
++<div><a href="#event-deactivate">deactivate</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>The jQuery UI Sortable plugin makes selected elements sortable by dragging with the mouse.</p>
++		<p><em>Note: In order to sort table rows, the <code>tbody</code> must be made sortable, not the <code>table</code>.</em></p>
++	</div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-appendTo" class="api-item first-item">
++<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"parent"</code>
++</div>
++<div>Defines where the helper that moves with the mouse is being appended to during the drag (for example, to resolve overlap/zIndex issues).</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>jQuery</strong>: A jQuery object containing the element to append the helper to.</li>
++<li>
++<strong>Element</strong>: The element to append the helper to.</li>
++<li>
++<strong>Selector</strong>: A selector specifying which element to append the helper to.</li>
++<li>
++<strong>String</strong>: The string <code>"parent"</code> will cause the helper to be a sibling of the sortable item.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the sortable with the appendTo option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ appendTo: document.body });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the appendTo option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, document.body );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-axis" class="api-item">
++<h3>axis<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If defined, the items can be dragged only horizontally or vertically. Possible values: <code>"x"</code>, <code>"y"</code>.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the axis option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ axis: </code><code class="string">"x"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the axis option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">axis = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"axis"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"axis"</code><code class="plain">, </code><code class="string">"x"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-cancel" class="api-item">
++<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>":input,button"</code>
++</div>
++<div>Prevents sorting if you start on elements matching the selector.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the cancel option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ cancel: </code><code class="string">"a,button"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cancel option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, </code><code class="string">"a,button"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-connectWith" class="api-item">
++<h3>connectWith<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>A selector of other sortable elements that the items from this list should be connected to. This is a one-way relationship, if you want the items to be connected in both directions, the <code>connectWith</code> option must be set on both sortable elements.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the connectWith option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ connectWith: </code><code class="string">"#shopping-cart"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the connectWith option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">connectWith = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"connectWith"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"connectWith"</code><code class="plain">, </code><code class="string">"#shopping-cart"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-containment" class="api-item">
++<h3>containment<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>
++				<p>Defines a bounding box that the sortable items are contrained to while dragging.</p>
++
++				<p>Note: The element specified for containment must have a calculated width and height (though it need not be explicit). For example, if you have <code>float: left</code> sortable children and specify <code>containment: "parent"</code> be sure to have <code>float: left</code> on the sortable/parent container as well or it will have <code>height: 0</code>, causing undefined behavior.</p>
++			</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Element</strong>: An element to use as the container.</li>
++<li>
++<strong>Selector</strong>: A selector specifying an element to use as the container.</li>
++<li>
++<strong>String</strong>: A string identifying an element to use as the container. Possible values: <code>"parent"</code>, <code>"document"</code>, <code>"window"</code>.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the sortable with the containment option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ containment: </code><code class="string">"parent"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the containment option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">containment = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code><code class="plain">, </code><code class="string">"parent"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-cursor" class="api-item">
++<h3>cursor<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"auto"</code>
++</div>
++<div>Defines the cursor that is being shown while sorting.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the cursor option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ cursor: </code><code class="string">"move"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cursor option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cursor = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursor"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursor"</code><code class="plain">, </code><code class="string">"move"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-cursorAt" class="api-item">
++<h3>cursorAt<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Moves the sorting element or helper so the cursor always appears to drag from the same position. Coordinates can be given as a hash using a combination of one or two keys: <code>{ top, left, right, bottom }</code>.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the cursorAt option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ cursorAt: { left: 5 } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cursorAt option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cursorAt = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursorAt"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursorAt"</code><code class="plain">, { left: 5 } );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-delay" class="api-item">
++<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>Time in milliseconds to define when the sorting should start. Adding a delay helps preventing unwanted drags when clicking on an element.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the delay option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ delay: 150 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the delay option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the sortable if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-distance" class="api-item">
++<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>Tolerance, in pixels, for when sorting should start. If specified, sorting will not start until after mouse is dragged beyond distance. Can be used to allow for clicks on elements within a handle.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the distance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ distance: 5 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the distance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 5 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-dropOnEmpty" class="api-item">
++<h3>dropOnEmpty<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>If <code>false</code>, items from this sortable can't be dropped on an empty connect sortable (see the <a href="#option-connectWith"><code>connectWith</code></a> option.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the dropOnEmpty option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ dropOnEmpty: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the dropOnEmpty option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dropOnEmpty = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dropOnEmpty"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dropOnEmpty"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-forceHelperSize" class="api-item">
++<h3>forceHelperSize<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If <code>true</code>, forces the helper to have a size.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the forceHelperSize option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ forceHelperSize: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the forceHelperSize option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">forceHelperSize = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"forceHelperSize"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"forceHelperSize"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-forcePlaceholderSize" class="api-item">
++<h3>forcePlaceholderSize<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If true, forces the placeholder to have a size.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the forcePlaceholderSize option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ forcePlaceholderSize: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the forcePlaceholderSize option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">forcePlaceholderSize = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"forcePlaceholderSize"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"forcePlaceholderSize"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-grid" class="api-item">
++<h3>grid<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Snaps the sorting element or helper to a grid, every x and y pixels. Array values: <code>[ x, y ]</code>.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the grid option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ grid: [ 20, 10 ] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the grid option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">grid = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code><code class="plain">, [ 20, 10 ] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-handle" class="api-item">
++<h3>handle<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Restricts sort start click to the specified element.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the handle option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ handle: </code><code class="string">".handle"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the handle option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">handle = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handle"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handle"</code><code class="plain">, </code><code class="string">".handle"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-helper" class="api-item">
++<h3>helper<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"original"</code>
++</div>
++<div>Allows for a helper element to be used for dragging display.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>String</strong>: If set to <code>"clone"</code>, then the element will be cloned and the clone will be dragged.</li>
++<li>
++<strong>Function</strong>: A function that will return a DOMElement to use while dragging. The function receives the event and the element being sorted.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the sortable with the helper option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ helper: </code><code class="string">"clone"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the helper option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">helper = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code><code class="plain">, </code><code class="string">"clone"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-items" class="api-item">
++<h3>items<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"&gt; *"</code>
++</div>
++<div>Specifies which items inside the element should be sortable.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the items option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ items: </code><code class="string">"&gt; li"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the items option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">items = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"items"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"items"</code><code class="plain">, </code><code class="string">"&gt; li"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-opacity" class="api-item">
++<h3>opacity<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Defines the opacity of the helper while sorting. From <code>0.01</code> to <code>1</code>.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the opacity option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ opacity: 0.5 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the opacity option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">opacity = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"opacity"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"opacity"</code><code class="plain">, 0.5 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-placeholder" class="api-item">
++<h3>placeholder<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>A class name that gets applied to the otherwise white space.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the placeholder option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ placeholder: </code><code class="string">"sortable-placeholder"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the placeholder option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">placeholder = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"placeholder"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"placeholder"</code><code class="plain">, </code><code class="string">"sortable-placeholder"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-revert" class="api-item">
++<h3>revert<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the sortable items should revert to their new positions using a smooth animation.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: When set to <code>true</code>, the items will animate with the default duration.</li>
++<li>
++<strong>Number</strong>: The duration for the animation, in milliseconds.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the sortable with the revert option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ revert: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the revert option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">revert = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revert"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revert"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-scroll" class="api-item">
++<h3>scroll<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>If set to true, the page scrolls when coming to an edge.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the scroll option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ scroll: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the scroll option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scroll = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scroll"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scroll"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-scrollSensitivity" class="api-item">
++<h3>scrollSensitivity<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>20</code>
++</div>
++<div>Defines how near the mouse must be to an edge to start scrolling.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the scrollSensitivity option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ scrollSensitivity: 10 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the scrollSensitivity option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scrollSensitivity = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSensitivity"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSensitivity"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-scrollSpeed" class="api-item">
++<h3>scrollSpeed<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>20</code>
++</div>
++<div>The speed at which the window should scroll once the mouse pointer gets within the <a href="#option-scrollSensitivity"><code>scrollSensitivity</code></a> distance.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the scrollSpeed option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ scrollSpeed: 40 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the scrollSpeed option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scrollSpeed = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSpeed"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSpeed"</code><code class="plain">, 40 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-tolerance" class="api-item">
++<h3>tolerance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"intersect"</code>
++</div>
++<div>
++				Specifies which mode to use for testing whether the item being moved is hovering over another item. Possible values:
++				<ul>
++					<li>
++<code>"intersect"</code>: The item overlaps the other item by at least 50%.</li>
++					<li>
++<code>"pointer"</code>: The mouse pointer overlaps the other item.</li>
++				</ul>
++			</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the tolerance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ tolerance: </code><code class="string">"pointer"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the tolerance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">tolerance = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code><code class="plain">, </code><code class="string">"pointer"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-zIndex" class="api-item">
++<h3>zIndex<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1000</code>
++</div>
++<div>Z-index for element/helper while being sorted.</div>
++<strong>Code examples:</strong><p>Initialize the sortable with the zIndex option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ zIndex: 9999 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the zIndex option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">zIndex = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"zIndex"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"zIndex"</code><code class="plain">, 9999 );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-cancel"><div class="api-item first-item">
++<h3>cancel()</h3>
++<div>Cancels a change in the current sortable and reverts it to the state prior to when the current sort was started. Useful in the stop and receive callback functions.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the cancel method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"cancel"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-destroy"><div class="api-item">
++<h3>destroy()</h3>
++<div>
++		Removes the sortable functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the sortable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the sortable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current sortable options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the sortable option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the sortable.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-refresh"><div class="api-item">
++<h3>refresh()</h3>
++<div>Refresh the sortable items. Triggers the reloading of all sortable items, causing new items to be recognized.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the refresh method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-refreshPositions"><div class="api-item">
++<h3>refreshPositions()</h3>
++<div>Refresh the cached positions of the sortable items. Calling this method refreshes the cached item positions of all sortables.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the refreshPositions method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"refreshPositions"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-serialize"><div class="api-item">
++<h3>serialize( options )<span class="returns">Returns: <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div>
++				<p>Serializes the sortable's item <code>id</code>s into a form/ajax submittable string. Calling this method produces a hash that can be appended to any url to easily submit a new item order back to the server.</p>
++
++				<p>It works by default by looking at the <code>id</code> of each item in the format <code>"setname_number"</code>, and it spits out a hash like <code>"setname[]=number&amp;setname[]=number"</code>.</p>
++
++				<p><em>Note: If serialize returns an empty string, make sure the <code>id</code> attributes include an underscore.  They must be in the form: <code>"set_number"</code> For example, a 3 element list with <code>id</code> attributes <code>"foo_1"</code>, <code>"foo_5"</code>, <code>"foo_2"</code> will serialize to <code>"foo[]=1&amp;foo[]=5&amp;foo[]=2"</code>. You can use an underscore, equal sign or hyphen to separate the set and number. For example <code>"foo=1"</code>, <code>"foo-1"</code>, and <code>"foo_1"</code> all serialize to <code>"foo[]=1"</code>.</em></p>
++			</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Options to customize the serialization.</div>
++<ul>
++<li>
++<div>
++<strong>key</strong> (default: <code>the part of the attribute in front of the separator</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>Replaces <code>part1[]</code> with the specified value.</div>
++</li>
++<li>
++<div>
++<strong>attribute</strong> (default: <code>"id"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the attribute to use for the values.</div>
++</li>
++<li>
++<div>
++<strong>expression</strong> (default: <code>/(.+)[-=_](.+)/</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#RegExp">RegExp</a>
++</div>
++<div>A regular expression used to split the attribute value into key and value parts.</div>
++</li>
++</ul>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the serialize method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">sorted = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"serialize"</code><code class="plain">, { key: </code><code class="string">"sort"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-toArray"><div class="api-item">
++<h3>toArray()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div>Serializes the sortable's item id's into an array of string.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the toArray method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">sortedIDs = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"toArray"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the sortable element.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-activate" class="api-item first-item">
++<h3>activate( event, ui )<span class="returns">Type: <code>sortactivate</code></span>
++</h3>
++<div>This event is triggered when using connected lists, every connected list on drag start receives it.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the activate callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">activate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortactivate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-beforeStop" class="api-item">
++<h3>beforeStop( event, ui )<span class="returns">Type: <code>sortbeforestop</code></span>
++</h3>
++<div>This event is triggered when sorting stops, but when the placeholder/helper is still available.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the beforeStop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeStop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortbeforestop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortbeforestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-change" class="api-item">
++<h3>change( event, ui )<span class="returns">Type: <code>sortchange</code></span>
++</h3>
++<div>This event is triggered during sorting, but only when the DOM position has changed.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the change callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortchange event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortchange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>sortcreate</code></span>
++</h3>
++<div>
++		Triggered when the sortable is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortcreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-deactivate" class="api-item">
++<h3>deactivate( event, ui )<span class="returns">Type: <code>sortdeactivate</code></span>
++</h3>
++<div>This event is triggered when sorting was stopped, is propagated to all possible connected lists.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the deactivate callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">deactivate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortdeactivate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortdeactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-out" class="api-item">
++<h3>out( event, ui )<span class="returns">Type: <code>sortout</code></span>
++</h3>
++<div>This event is triggered when a sortable item is moved away from a connected list.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the out callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">out: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortout event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortout"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-over" class="api-item">
++<h3>over( event, ui )<span class="returns">Type: <code>sortover</code></span>
++</h3>
++<div>This event is triggered when a sortable item is moved into a connected list.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the over callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">over: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortover event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortover"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-receive" class="api-item">
++<h3>receive( event, ui )<span class="returns">Type: <code>sortreceive</code></span>
++</h3>
++<div>This event is triggered when a connected sortable list has received an item from another list.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the receive callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">receive: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortreceive event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortreceive"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-remove" class="api-item">
++<h3>remove( event, ui )<span class="returns">Type: <code>sortremove</code></span>
++</h3>
++<div>This event is triggered when a sortable item has been dragged out from the list and into another.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the remove callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">remove: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortremove event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortremove"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-sort" class="api-item">
++<h3>sort( event, ui )<span class="returns">Type: <code>sort</code></span>
++</h3>
++<div>This event is triggered during sorting.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the sort callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">sort: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sort event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sort"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-start" class="api-item">
++<h3>start( event, ui )<span class="returns">Type: <code>sortstart</code></span>
++</h3>
++<div>This event is triggered when sorting starts.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the start callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortstart event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortstart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-stop" class="api-item">
++<h3>stop( event, ui )<span class="returns">Type: <code>sortstop</code></span>
++</h3>
++<div>This event is triggered when sorting has stopped.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the stop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortstop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortstop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-update" class="api-item">
++<h3>update( event, ui )<span class="returns">Type: <code>sortupdate</code></span>
++</h3>
++<div>This event is triggered when the user stopped sorting and the DOM position has changed.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper being sorted</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the current dragged element</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current absolute position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current position of the helper represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>originalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The original position of the element represented as <code>{ top, left }</code>
++</div>
++</li>
++<li>
++<div><strong>sender</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The sortable that the item comes from if moving from one sortable to another</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the sortable with the update callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">update: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the sortupdate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortupdate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Sortable.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;sortable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">ul</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"sortable"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 1&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 2&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 3&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 4&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 5&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;$("#sortable").sortable();&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="150"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/transfer-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/transfer-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/transfer-effect.html	(revision 15487)
+@@ -0,0 +1,61 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI transfer-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Transfer Effect",
++		"excerpt":
++			"Transfers the outline of an element to another element",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="transfer1" class="entry effect"><h2 class="section-title"><span>Transfer Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Transfers the outline of an element to another element</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">transfer</h4>
++<ul>
++<li>
++<div><strong>className</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>argumental class name the transfer element will receive.</div>
++</li>
++<li>
++<div><strong>to</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>jQuery selector, the element to transfer to.</div>
++</li>
++</ul>
++</li></ul>
++<div class="longdesc" id="entry-longdesc">
++		<p>Very useful when trying to visualize interaction between two elements.</p>
++		<p>The transfer element iself has the class <code>ui-effects-transfer</code>, and needs to be styled by you, for example by adding a background or border.</p>
++	</div>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Clicking on the green element transfers to the other.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;transfer demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">div.green {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 80px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: green;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">border: 1px solid black;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">position: relative;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">div.red {</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">margin-top: 10px;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 50px;</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 30px;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: red;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">border: 1px solid black;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">position: relative;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.ui-effects-transfer {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">border: 1px dotted black;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number30 index29 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2">&nbsp;</div><div class="line number32 index31 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"green"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number33 index32 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"red"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number34 index33 alt1">&nbsp;</div><div class="line number35 index34 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number36 index35 alt1"><code class="plain">$( "div" ).click(function() {</code></div><div class="line number37 index36 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">var i = 1 - $( "div" ).index( this );</code></div><div class="line number38 index37 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( this ).effect( "transfer", { to: $( "div" ).eq( i ) }, 1000 );</code></div><div class="line number39 index38 alt2"><code class="plain">});</code></div><div class="line number40 index39 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number41 index40 alt2">&nbsp;</div><div class="line number42 index41 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number43 index42 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="150"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/blind-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/blind-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/blind-effect.html	(revision 15487)
+@@ -0,0 +1,58 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI blind-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Blind Effect",
++		"excerpt":
++			"\n\t\tThe blind effect hides or shows an element by wrapping the element in a container, and \"pulling the blinds\"\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="blind1" class="entry effect"><h2 class="section-title"><span>Blind Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The blind effect hides or shows an element by wrapping the element in a container, and "pulling the blinds"
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">blind</h4>
++<ul><li>
++<div>
++<strong>direction</strong> (default: <code>"up"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>
++				<p>The direction the blind will be pulled to hide the element, or the direction from which the element will be revealed.</p>
++				<p>Possible Values: <code>up</code>, <code>down</code>, <code>left</code>, <code>right</code>, <code>vertical</code>, <code>horizontal</code>.</p>
++			</div>
++</li></ul>
++</li></ul>
++<div class="longdesc" id="entry-longdesc">
++		<p>The container has <code>overflow: hidden</code> applied, so height changes affect what's visible.</p>
++	</div>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the blind effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;blind demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "blind" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/fade-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/fade-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/fade-effect.html	(revision 15487)
+@@ -0,0 +1,43 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI fade-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Fade Effect",
++		"excerpt":
++			"\n\t\tThe fade effect hides or shows an element by fading it.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="fade1" class="entry effect"><h2 class="section-title"><span>Fade Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The fade effect hides or shows an element by fading it.
++	</p>
++<ul class="signatures"><li class="signature"><h4 class="name">fade</h4></li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the fade effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;fade demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "fade" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/progressbar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/progressbar.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/progressbar.html	(revision 15487)
+@@ -0,0 +1,337 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI progressbar documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Progressbar Widget",
++		"excerpt":
++			"Display status of a determinate or indeterminate process.",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="progressbar1" class="entry widget"><h2 class="section-title">
++<span>Progressbar Widget</span><span class="version-details">version added: 1.6</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Display status of a determinate or indeterminate process.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-max">max</a></div>
++<div><a href="#option-value">value</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-value">value</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-change">change</a></div>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-complete">complete</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>
++			The progress bar is designed to display the current percent complete for a process. The bar is coded to be flexibly sized through CSS and will scale to fit inside its parent container by default.
++		</p>
++		<p>
++			A determinate progress bar should only be used in situations where the system can accurately update the current status. A determinate progress bar should never fill from left to right, then loop back to empty for a single process — if the actual status cannot be calculated, an indeterminate progress bar should be used to provide user feedback.
++		</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-disabled" class="api-item first-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the progressbar if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the progressbar with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-max" class="api-item">
++<h3>max<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>100</code>
++</div>
++<div>The maximum value of the progressbar.</div>
++<strong>Code examples:</strong><p>Initialize the progressbar with the max option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({ max: 1024 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the max option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">max = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code><code class="plain">, 1024 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-value" class="api-item">
++<h3>value<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>The value of the progressbar.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: 
++					A value between <code>0</code> and the <a href="#option-max"><code>max</code></a>.
++				</li>
++<li>
++<strong>Boolean</strong>: 
++					Value can be set to <code>false</code> to create an indeterminate progressbar.
++				</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the progressbar with the value option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({ value: 25 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the value option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">value = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"value"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"value"</code><code class="plain">, 25 );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the progressbar functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the progressbar.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the progressbar.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current progressbar options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the progressbar option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the progressbar.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-value">
++<div class="api-item">
++<h3>value()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div>Gets the current value of the progressbar.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">progressSoFar = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"value"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>value( value )</h3>
++<div>Sets the current value of the progressbar.</div>
++<ul><li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#Boolean">Boolean</a>
++</div>
++<div>The value to set. See the <a href="#option-value"><code>value</code></a> option for details on valid values.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"value"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the progressbar.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-change" class="api-item first-item">
++<h3>change( event, ui )<span class="returns">Type: <code>progressbarchange</code></span>
++</h3>
++<div>Triggered when the value of the progressbar changes.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the progressbar with the change callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the progressbarchange event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"progressbarchange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-complete" class="api-item">
++<h3>complete( event, ui )<span class="returns">Type: <code>progressbarcomplete</code></span>
++</h3>
++<div>Triggered when the value of the progressbar reaches the maximum value.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the progressbar with the complete callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">complete: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the progressbarcomplete event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"progressbarcomplete"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>progressbarcreate</code></span>
++</h3>
++<div>
++		Triggered when the progressbar is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the progressbar with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the progressbarcreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"progressbarcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Examples:</h2></header><div class="entry-example" id="example-0">
++<h4>Example: <span class="desc">A simple jQuery UI Progressbar</span>
++</h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;progressbar demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"progressbar"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "#progressbar" ).progressbar({</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">value: 37</code></div><div class="line number17 index16 alt2"><code class="plain">});</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="50"></div>
++</div>
++<div class="entry-example" id="example-1">
++<h4>Example: <span class="desc">A simple jQuery UI Indeterminate Progressbar</span>
++</h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;progressbar demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"progressbar"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "#progressbar" ).progressbar({</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">value: false</code></div><div class="line number17 index16 alt2"><code class="plain">});</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="50"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/tabs.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/tabs.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/tabs.html	(revision 15487)
+@@ -0,0 +1,635 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI tabs documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Tabs Widget",
++		"excerpt":
++			"A single content area with multiple panels, each associated with a header in a list.",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="tabs1" class="entry widget"><h2 class="section-title">
++<span>Tabs Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>A single content area with multiple panels, each associated with a header in a list.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-active">active</a></div>
++<div><a href="#option-collapsible">collapsible</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-event">event</a></div>
++<div><a href="#option-heightStyle">heightStyle</a></div>
++<div><a href="#option-hide">hide</a></div>
++<div><a href="#option-show">show</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-load">load</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-refresh">refresh</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-activate">activate</a></div>
++<div><a href="#event-beforeActivate">beforeActivate</a></div>
++<div><a href="#event-beforeLoad">beforeLoad</a></div>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-load">load</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>Tabs are generally used to break content into multiple sections that can be swapped to save space, much like an accordion.</p>
++
++		<p>The content for each tab panel can be defined in-page or can be loaded via Ajax; both are handled automatically based on the <code>href</code> of the anchor associated with the tab. By default tabs are activated on click, but the events can be changed to hover via the <a href="#option-event"><code>event</code></a> option.</p>
++
++		<h3>Keyboard interaction</h3>
++
++		<p>When focus is on a tab, the following key commands are available:</p>
++		<ul>
++			<li>UP/LEFT: Move focus to the previous tab. If on first tab, moves focus to last tab. Activate focused tab after a short delay.</li>
++			<li>DOWN/RIGHT: Move focus to the next tab. If on last tab, moves focus to first tab. Activate focused tab after a short delay.</li>
++			<li>HOME: Move focus to the first tab. Activate focused tab after a short delay.</li>
++			<li>END: Move focus to the last tab. Activate focused tab after a short delay.</li>
++			<li>SPACE: Activate panel associated with focused tab.</li>
++			<li>ENTER: Activate or toggle panel associated with focused tab.</li>
++			<li>ALT+PAGE UP: Move focus to the previous tab and immediately activate.</li>
++			<li>ALT+PAGE DOWN: Move focus to the next tab and immediately activate.</li>
++		</ul>
++
++		<p>When focus is in a panel, the following key commands are available:</p>
++		<ul>
++			<li>CTRL+UP: Move focus to associated tab.</li>
++			<li>ALT+PAGE UP: Move focus to the previous tab and immediately activate.</li>
++			<li>ALT+PAGE DOWN: Move focus to the next tab and immediately activate.</li>
++		</ul>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-active" class="api-item first-item">
++<h3>active<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Integer">Integer</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>
++				Which panel is currently open.
++			</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: Setting <code>active</code> to <code>false</code> will collapse all panels. This requires the <a href="#option-collapsible"><code>collapsible</code></a> option to be <code>true</code>.</li>
++<li>
++<strong>Integer</strong>: The zero-based index of the panel that is active (open). A negative value selects panels going backward from the last panel.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the tabs with the active option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ active: 1 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the active option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">active = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"active"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"active"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-collapsible" class="api-item">
++<h3>collapsible<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>When set to <code>true</code>, the active panel can be closed.</div>
++<strong>Code examples:</strong><p>Initialize the tabs with the collapsible option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ collapsible: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the collapsible option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">collapsible = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"collapsible"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"collapsible"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Which tabs are disabled.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: Enable or disable all tabs.</li>
++<li>
++<strong>Array</strong>: An array containing the zero-based indexes of the tabs that should be disabled, e.g., <code>[ 0, 2 ]</code> would disable the first and third tab.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the tabs with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ disabled: [ 0, 2 ] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, [ 0, 2 ] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-event" class="api-item">
++<h3>event<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"click"</code>
++</div>
++<div>The type of event that the tabs should react to in order to activate the tab. To activate on hover, use <code>"mouseover"</code>.</div>
++<strong>Code examples:</strong><p>Initialize the tabs with the event option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ event: </code><code class="string">"mouseover"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the event option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">event = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"event"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"event"</code><code class="plain">, </code><code class="string">"mouseover"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-heightStyle" class="api-item">
++<h3>heightStyle<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"content"</code>
++</div>
++<div>
++				Controls the height of the tabs widget and each panel. Possible values:
++				<ul>
++					<li>
++<code>"auto"</code>: All panels will be set to the height of the tallest panel.</li>
++					<li>
++<code>"fill"</code>: Expand to the available height based on the tabs' parent height.</li>
++					<li>
++<code>"content"</code>: Each panel will be only as tall as its content.</li>
++				</ul>
++			</div>
++<strong>Code examples:</strong><p>Initialize the tabs with the heightStyle option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ heightStyle: </code><code class="string">"fill"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the heightStyle option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">heightStyle = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"heightStyle"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"heightStyle"</code><code class="plain">, </code><code class="string">"fill"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-hide" class="api-item">
++<h3>hide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>If and how to animate the hiding of the panel.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: 
++			When set to <code>false</code>, no animation will be used and the panel will be hidden immediately.
++			When set to <code>true</code>, the panel will fade out with the default duration and the default easing.
++		</li>
++<li>
++<strong>Number</strong>: 
++			The panel will fade out with the specified duration and the default easing.
++		</li>
++<li>
++<strong>String</strong>: 
++			The panel will be hidden using the specified effect.
++			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideUp"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
++			In either case the effect will be used with the default duration and the default easing.
++		</li>
++<li>
++<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeOut"</code> will be used.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the tabs with the hide option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ hide: { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the hide option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hide = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code><code class="plain">, { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-show" class="api-item">
++<h3>show<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>If and how to animate the showing of the panel.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: 
++			When set to <code>false</code>, no animation will be used and the panel will be shown immediately.
++			When set to <code>true</code>, the panel will fade in with the default duration and the default easing.
++		</li>
++<li>
++<strong>Number</strong>: 
++			The panel will fade in with the specified duration and the default easing.
++		</li>
++<li>
++<strong>String</strong>: 
++			The panel will be shown using the specified effect.
++			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideDown"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
++			In either case the effect will be used with the default duration and the default easing.
++		</li>
++<li>
++<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeIn"</code> will be used.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the tabs with the show option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ show: { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the show option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">show = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code><code class="plain">, { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the tabs functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable">
++<div class="api-item">
++<h3>disable()</h3>
++<div>Disables all tabs.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>disable( index )</h3>
++<div>
++					Disables a tab. The selected tab cannot be disabled. To disable more than one tab at once, set the <a href="#option-disabled"><code>disabled</code></a> option: <code>$( "#tabs" ).tabs( "option", "disabled", [ 1, 2, 3 ] )</code>.
++				</div>
++<ul><li>
++<div><strong>index</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>Which tab to disable.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"disable"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-enable">
++<div class="api-item">
++<h3>enable()</h3>
++<div>Enables all tabs.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>enable( index )</h3>
++<div>Enables a tab. To enable more than one tab at once reset the disabled property like: <code>$( "#example" ).tabs( "option", "disabled", [] );</code>.</div>
++<ul><li>
++<div><strong>index</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>Which tab to enable.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"enable"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-load"><div class="api-item">
++<h3>load( index )</h3>
++<div>Loads the panel content of a remote tab.</div>
++<ul><li>
++<div><strong>index</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>Which tab to load.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the load method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"load"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current tabs options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the tabs option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the tabs.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-refresh"><div class="api-item">
++<h3>refresh()</h3>
++<div>Process any tabs that were added or removed directly in the DOM and recompute the height of the tab panels. Results depend on the content and the <a href="#option-heightStyle"><code>heightStyle</code></a> option.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the refresh method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the tabs container.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-activate" class="api-item first-item">
++<h3>activate( event, ui )<span class="returns">Type: <code>tabsactivate</code></span>
++</h3>
++<div>Triggered after a tab has been activated (after animation completes). If the tabs were previously collapsed, <code>ui.oldTab</code> and <code>ui.oldPanel</code> will be empty jQuery objects. If the tabs are collapsing, <code>ui.newTab</code> and <code>ui.newPanel</code> will be empty jQuery objects.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>newTab</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The tab that was just activated.</div>
++</li>
++<li>
++<div><strong>oldTab</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The tab that was just deactivated.</div>
++</li>
++<li>
++<div><strong>newPanel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel that was just activated.</div>
++</li>
++<li>
++<div><strong>oldPanel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel that was just deactivated.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the tabs with the activate callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">activate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the tabsactivate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabsactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-beforeActivate" class="api-item">
++<h3>beforeActivate( event, ui )<span class="returns">Type: <code>tabsbeforeactivate</code></span>
++</h3>
++<div>Triggered directly after a tab is activated. Can be canceled to prevent the tab from activating. If the tabs are currently collapsed, <code>ui.oldTab</code> and <code>ui.oldPanel</code> will be empty jQuery objects. If the tabs are collapsing, <code>ui.newTab</code> and <code>ui.newPanel</code> will be empty jQuery objects.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>newTab</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The tab that is about to be activated.</div>
++</li>
++<li>
++<div><strong>oldTab</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The tab that is about to be deactivated.</div>
++</li>
++<li>
++<div><strong>newPanel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel that is about to be activated.</div>
++</li>
++<li>
++<div><strong>oldPanel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel that is about to be deactivated.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the tabs with the beforeActivate callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeActivate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the tabsbeforeactivate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabsbeforeactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-beforeLoad" class="api-item">
++<h3>beforeLoad( event, ui )<span class="returns">Type: <code>tabsbeforeload</code></span>
++</h3>
++<div>Triggered when a remote tab is about to be loaded, after the <a href="#event-beforeActivate"><code>beforeActivate</code></a> event. Can be canceled to prevent the tab panel from loading content; though the panel will still be activated. This event is triggered just before the Ajax request is made, so modifications can be made to <code>ui.jqXHR</code> and <code>ui.ajaxSettings</code>.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>tab</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The tab that is being loaded.</div>
++</li>
++<li>
++<div><strong>panel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel which will be populated by the Ajax response.</div>
++</li>
++<li>
++<div><strong>jqXHR</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jqXHR">jqXHR</a>
++</div>
++<div>The <code>jqXHR</code> object that is requesting the content.</div>
++</li>
++<li>
++<div><strong>ajaxSettings</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The settings that will be used by <a href="//api.jquery.com/jQuery.ajax"><code>jQuery.ajax</code></a> to request the content.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the tabs with the beforeLoad callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeLoad: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the tabsbeforeload event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabsbeforeload"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>tabscreate</code></span>
++</h3>
++<div>Triggered when the tabs are created. If the tabs are collapsed, <code>ui.tab</code> and <code>ui.panel</code> will be empty jQuery objects.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>tab</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The active tab.</div>
++</li>
++<li>
++<div><strong>panel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The active panel.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the tabs with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the tabscreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabscreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-load" class="api-item">
++<h3>load( event, ui )<span class="returns">Type: <code>tabsload</code></span>
++</h3>
++<div>Triggered after a remote tab has been loaded.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>tab</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The tab that was just loaded.</div>
++</li>
++<li>
++<div><strong>panel</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The panel which was just populated by the Ajax response.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the tabs with the load callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">load: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the tabsload event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabsload"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Tabs</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;tabs demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"tabs"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#fragment-1"</code><code class="plain">&gt;&lt;</code><code class="keyword">span</code><code class="plain">&gt;One&lt;/</code><code class="keyword">span</code><code class="plain">&gt;&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#fragment-2"</code><code class="plain">&gt;&lt;</code><code class="keyword">span</code><code class="plain">&gt;Two&lt;/</code><code class="keyword">span</code><code class="plain">&gt;&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#fragment-3"</code><code class="plain">&gt;&lt;</code><code class="keyword">span</code><code class="plain">&gt;Three&lt;/</code><code class="keyword">span</code><code class="plain">&gt;&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"fragment-1"</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;First tab is active by default:&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">pre</code><code class="plain">&gt;&lt;</code><code class="keyword">code</code><code class="plain">&gt;$( "#tabs" ).tabs(); &lt;/</code><code class="keyword">code</code><code class="plain">&gt;&lt;/</code><code class="keyword">pre</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"fragment-2"</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"fragment-3"</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number32 index31 alt1">&nbsp;</div><div class="line number33 index32 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number34 index33 alt1"><code class="plain">$( "#tabs" ).tabs();</code></div><div class="line number35 index34 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number36 index35 alt1">&nbsp;</div><div class="line number37 index36 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number38 index37 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/tooltip.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/tooltip.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/tooltip.html	(revision 15487)
+@@ -0,0 +1,465 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI tooltip documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Tooltip Widget",
++		"excerpt":
++			"Customizable, themeable tooltips, replacing native tooltips.",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="tooltip1" class="entry widget"><h2 class="section-title">
++<span>Tooltip Widget</span><span class="version-details">version added: 1.9</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Customizable, themeable tooltips, replacing native tooltips.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-content">content</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-hide">hide</a></div>
++<div><a href="#option-items">items</a></div>
++<div><a href="#option-position">position</a></div>
++<div><a href="#option-show">show</a></div>
++<div><a href="#option-tooltipClass">tooltipClass</a></div>
++<div><a href="#option-track">track</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-close">close</a></div>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-open">open</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-open">open</a></div>
++<div><a href="#event-close">close</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>Tooltip replaces native tooltips, making them themable as well as allowing various customizations:</p>
++
++		<ul>
++			<li>Display other content than just the title, like inline footnotes or extra content retrieved via Ajax.</li>
++			<li>Customize the positioning, e.g., to center the tooltip above elements.</li>
++			<li>Add extra styling to customize the appearance, for warning or error fields.</li>
++		</ul>
++
++		<p>A fade animation is used by default to show and hide the tooltip, making the appearance a bit more organic, compared to just toggling the visiblity. This can be customized with the <a href="#option-show"><code>show</code></a> and <a href="#option-hide"><code>hide</code></a> options.</p>
++
++		<p>The <a href="#option-items"><code>items</code></a> and <a href="#option-content"><code>content</code></a> options need to stay in-sync. If you change one of them, you need to change the other.</p>
++
++		<p>In general, disabled elements do not trigger any DOM events. Therefore, it is not possible to properly control tooltips for disabled elements, since we need to listen to events to determine when to show and hide the tooltip. As a result, jQuery UI does not guarantee any level of support for tooltips attached to disabled elements. Unfortunately, this means that if you require tooltips on disabled elements, you may end up with a mixture of native tooltips and jQuery UI tooltips.</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-content" class="api-item first-item">
++<h3>content<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>() or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>function returning the title attribute</code>
++</div>
++<div>
++				<p>The content of the tooltip.</p>
++
++				<p><em>When changing this option, you likely need to also change the <a href="#option-items"><code>items</code></a> option.</em></p>
++			</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Function</strong>: A callback which can either return the content directly, or call the first argument, passing in the content, e.g., for Ajax content.</li>
++<li>
++<strong>String</strong>: A string of HTML to use for the tooltip content.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the tooltip with the content option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ content: </code><code class="string">"Awesome title!"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the content option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">content = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"content"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"content"</code><code class="plain">, </code><code class="string">"Awesome title!"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the tooltip if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the tooltip with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-hide" class="api-item">
++<h3>hide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>If and how to animate the hiding of the tooltip.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: 
++			When set to <code>false</code>, no animation will be used and the tooltip will be hidden immediately.
++			When set to <code>true</code>, the tooltip will fade out with the default duration and the default easing.
++		</li>
++<li>
++<strong>Number</strong>: 
++			The tooltip will fade out with the specified duration and the default easing.
++		</li>
++<li>
++<strong>String</strong>: 
++			The tooltip will be hidden using the specified effect.
++			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideUp"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
++			In either case the effect will be used with the default duration and the default easing.
++		</li>
++<li>
++<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeOut"</code> will be used.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the tooltip with the hide option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ hide: { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the hide option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hide = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code><code class="plain">, { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-items" class="api-item">
++<h3>items<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>[title]</code>
++</div>
++<div>
++				<p>A selector indicating which items should show tooltips. Customize if you're using something other then the title attribute for the tooltip content, or if you need a different selector for event delegation.</p>
++
++				<p><em>When changing this option, you likely need to also change the <a href="#option-content"><code>content</code></a> option.</em></p>
++			</div>
++<strong>Code examples:</strong><p>Initialize the tooltip with the items option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ items: </code><code class="string">"img[alt]"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the items option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">items = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"items"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"items"</code><code class="plain">, </code><code class="string">"img[alt]"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-position" class="api-item">
++<h3>position<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{ my: "left top+15", at: "left bottom", collision: "flipfit" }</code>
++</div>
++<div>
++				<p>Configuration for the Position utility. The <code>of</code> property defaults to the target element, but can also be overriden.</p>
++
++				<p><em>Note: In 1.9.0, the default value was <code>{ my: "left+15 center", at: "right center", collision: "flipfit" }</code>, but this was changed to more closely match native tooltip positioning.</em></p>
++			</div>
++<strong>Code examples:</strong><p>Initialize the tooltip with the position option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ position: { my: </code><code class="string">"left+15 center"</code><code class="plain">, at: </code><code class="string">"right center"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the position option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">position = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code><code class="plain">, { my: </code><code class="string">"left+15 center"</code><code class="plain">, at: </code><code class="string">"right center"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-show" class="api-item">
++<h3>show<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>If and how to animate the showing of the tooltip.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: 
++			When set to <code>false</code>, no animation will be used and the tooltip will be shown immediately.
++			When set to <code>true</code>, the tooltip will fade in with the default duration and the default easing.
++		</li>
++<li>
++<strong>Number</strong>: 
++			The tooltip will fade in with the specified duration and the default easing.
++		</li>
++<li>
++<strong>String</strong>: 
++			The tooltip will be shown using the specified effect.
++			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideDown"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
++			In either case the effect will be used with the default duration and the default easing.
++		</li>
++<li>
++<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeIn"</code> will be used.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the tooltip with the show option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ show: { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the show option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">show = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code><code class="plain">, { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-tooltipClass" class="api-item">
++<h3>tooltipClass<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>
++				A class to add to the widget, can be used to display various tooltip types, like warnings or errors.
++				<p>This may get replaced by the <a href="http://bugs.jqueryui.com/ticket/7053">classes option</a>.</p>
++			</div>
++<strong>Code examples:</strong><p>Initialize the tooltip with the tooltipClass option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ tooltipClass: </code><code class="string">"custom-tooltip-styling"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the tooltipClass option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">tooltipClass = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tooltipClass"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tooltipClass"</code><code class="plain">, </code><code class="string">"custom-tooltip-styling"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-track" class="api-item">
++<h3>track<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>
++				Whether the tooltip should track (follow) the mouse.
++			</div>
++<strong>Code examples:</strong><p>Initialize the tooltip with the track option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ track: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the track option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">track = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"track"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"track"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-close"><div class="api-item first-item">
++<h3>close()</h3>
++<div>
++				Closes a tooltip. This is only intended to be called for non-delegated tooltips.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the close method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"close"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-destroy"><div class="api-item">
++<h3>destroy()</h3>
++<div>
++		Removes the tooltip functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the tooltip.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the tooltip.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-open"><div class="api-item">
++<h3>open()</h3>
++<div>
++				Programmatically open a tooltip. This is only intended to be called for non-delegated tooltips.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the open method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"open"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current tooltip options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the tooltip option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the tooltip.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the original element.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-close" class="api-item first-item">
++<h3>close( event, ui )<span class="returns">Type: <code>tooltipclose</code></span>
++</h3>
++<div>
++				Triggered when a tooltip is closed, triggered on <code>focusout</code> or <code>mouseleave</code>.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>tooltip</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The generated tooltip element.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the tooltip with the close callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">close: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the tooltipclose event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tooltipclose"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>tooltipcreate</code></span>
++</h3>
++<div>
++		Triggered when the tooltip is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the tooltip with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the tooltipcreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tooltipcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-open" class="api-item">
++<h3>open( event, ui )<span class="returns">Type: <code>tooltipopen</code></span>
++</h3>
++<div>
++				Triggered when a tooltip is shown, triggered on <code>focusin</code> or <code>mouseover</code>.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>tooltip</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The generated tooltip element.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the tooltip with the open callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">open: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the tooltipopen event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tooltipopen"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Create a tooltip on the document, using event delegation for all elements with a title attribute.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;tooltip demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code> <code class="color1">title</code><code class="plain">=</code><code class="string">"Anchor description"</code><code class="plain">&gt;Anchor text&lt;/</code><code class="keyword">a</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">title</code><code class="plain">=</code><code class="string">"Input help"</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( document ).tooltip();</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="80"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/slide-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/slide-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/slide-effect.html	(revision 15487)
+@@ -0,0 +1,59 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI slide-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Slide Effect",
++		"excerpt":
++			"Slides the element out of the viewport.",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="slide1" class="entry effect"><h2 class="section-title"><span>Slide Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Slides the element out of the viewport.</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">slide</h4>
++<ul>
++<li>
++<div>
++<strong>direction</strong> (default: <code>"both"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The direction of the effect. Possible values: <code>"left"</code>, <code>"right"</code>, <code>"up"</code>, <code>"down"</code>.</div>
++</li>
++<li>
++<div>
++<strong>distance</strong> (default: <code>element's outerWidth</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
++</div>
++<div>The distance of the effect. Defaults to either the height or width of the elemenet depending on the <code>direction</code> argument. Can be set to any integer less than the width/height of the element.</div>
++</li>
++</ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the slide effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;slide demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "slide" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/drop-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/drop-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/drop-effect.html	(revision 15487)
+@@ -0,0 +1,55 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI drop-effect documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Drop Effect",
++		"excerpt":
++			"\n\t\tThe drop effect hides or shows an element fading in/out and sliding in a direction.\n\t",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="drop1" class="entry effect"><h2 class="section-title"><span>Drop Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		The drop effect hides or shows an element fading in/out and sliding in a direction.
++	</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">drop</h4>
++<ul><li>
++<div>
++<strong>direction</strong> (default: <code>"left"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>
++				<p>The direction the element will fall to hide the element, or the direction from which the element will be revealed.</p>
++				<p>Possible Values: <code>up</code>, <code>down</code>, <code>left</code>, <code>right</code>.</p>
++			</div>
++</li></ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Toggle a div using the drop effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;drop demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "drop" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/dialog.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/dialog.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/dialog.html	(revision 15487)
+@@ -0,0 +1,892 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI dialog documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Dialog Widget",
++		"excerpt":
++			"Open content in an interactive overlay.",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="dialog1" class="entry widget"><h2 class="section-title">
++<span>Dialog Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Open content in an interactive overlay.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-appendTo">appendTo</a></div>
++<div><a href="#option-autoOpen">autoOpen</a></div>
++<div><a href="#option-buttons">buttons</a></div>
++<div><a href="#option-closeOnEscape">closeOnEscape</a></div>
++<div><a href="#option-closeText">closeText</a></div>
++<div><a href="#option-dialogClass">dialogClass</a></div>
++<div><a href="#option-draggable">draggable</a></div>
++<div><a href="#option-height">height</a></div>
++<div><a href="#option-hide">hide</a></div>
++<div><a href="#option-maxHeight">maxHeight</a></div>
++<div><a href="#option-maxWidth">maxWidth</a></div>
++<div><a href="#option-minHeight">minHeight</a></div>
++<div><a href="#option-minWidth">minWidth</a></div>
++<div><a href="#option-modal">modal</a></div>
++<div><a href="#option-position">position</a></div>
++<div><a href="#option-resizable">resizable</a></div>
++<div><a href="#option-show">show</a></div>
++<div><a href="#option-title">title</a></div>
++<div><a href="#option-width">width</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-close">close</a></div>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-isOpen">isOpen</a></div>
++<div><a href="#method-moveToTop">moveToTop</a></div>
++<div><a href="#method-open">open</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-beforeClose">beforeClose</a></div>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-open">open</a></div>
++<div><a href="#event-focus">focus</a></div>
++<div><a href="#event-dragStart">dragStart</a></div>
++<div><a href="#event-drag">drag</a></div>
++<div><a href="#event-dragStop">dragStop</a></div>
++<div><a href="#event-resizeStart">resizeStart</a></div>
++<div><a href="#event-resize">resize</a></div>
++<div><a href="#event-resizeStop">resizeStop</a></div>
++<div><a href="#event-close">close</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>A dialog is a floating window that contains a title bar and a content area. The dialog window can be moved, resized and closed with the 'x' icon by default.</p>
++
++		<p>If the content length exceeds the maximum height, a scrollbar will automatically appear.</p>
++
++		<p>A bottom button bar and semi-transparent modal overlay layer are common options that can be added.</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-appendTo" class="api-item first-item">
++<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"body"</code>
++</div>
++<div>Which element the dialog should be appended to. Regardless of the value set, the overlay for modal dialogs will always be appended to the body and cover the entire window.<span class="version-details"> (version added: 1.10)</span>
++</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the appendTo option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ appendTo: </code><code class="string">"#someElem"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the appendTo option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, </code><code class="string">"#someElem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-autoOpen" class="api-item">
++<h3>autoOpen<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>If set to <code>true</code>, the dialog will automatically open upon initialization. If <code>false</code>, the dialog will stay hidden until the <a href="#method-open"><code>open()</code></a> method is called.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the autoOpen option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ autoOpen: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the autoOpen option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoOpen = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoOpen"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoOpen"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-buttons" class="api-item">
++<h3>buttons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{}</code>
++</div>
++<div>Specifies which buttons should be displayed on the dialog. The context of the callback is the dialog element; if you need access to the button, it is available as the target of the event object.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Object</strong>: The keys are the button labels and the values are the callbacks for when the associated button is clicked.</li>
++<li>
++<strong>Array</strong>: Each element of the array must be an object defining the attributes, properties, and event handlers to set on the button.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the dialog with the buttons option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ buttons: [ { text: </code><code class="string">"Ok"</code><code class="plain">, click: </code><code class="keyword">function</code><code class="plain">() { $( </code><code class="keyword">this</code> <code class="plain">).dialog( </code><code class="string">"close"</code> <code class="plain">); } ] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the buttons option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">buttons = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttons"</code><code class="plain">, [ { text: </code><code class="string">"Ok"</code><code class="plain">, click: </code><code class="keyword">function</code><code class="plain">() { $( </code><code class="keyword">this</code> <code class="plain">).dialog( </code><code class="string">"close"</code> <code class="plain">); } ] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-closeOnEscape" class="api-item">
++<h3>closeOnEscape<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>Specifies whether the dialog should close when it has focus and the user presses the esacpe (ESC) key.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the closeOnEscape option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ closeOnEscape: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the closeOnEscape option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">closeOnEscape = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeOnEscape"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeOnEscape"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-closeText" class="api-item">
++<h3>closeText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"close"</code>
++</div>
++<div>Specifies the text for the close button. Note that the close text is visibly hidden when using a standard theme.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the closeText option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ closeText: </code><code class="string">"hide"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the closeText option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">closeText = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeText"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-dialogClass" class="api-item">
++<h3>dialogClass<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>""</code>
++</div>
++<div>The specified class name(s) will be added to the dialog, for additional theming.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the dialogClass option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ dialogClass: </code><code class="string">"alert"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the dialogClass option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dialogClass = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dialogClass"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dialogClass"</code><code class="plain">, </code><code class="string">"alert"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-draggable" class="api-item">
++<h3>draggable<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>If set to <code>true</code>, the dialog will be draggable by the title bar. Requires the <a href="/draggable/">jQuery UI Draggable wiget</a> to be included.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the draggable option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ draggable: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the draggable option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">draggable = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"draggable"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"draggable"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-height" class="api-item">
++<h3>height<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"auto"</code>
++</div>
++<div>The height of the dialog.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: The height in pixels.</li>
++<li>
++<strong>String</strong>: The only supported string value is <code>"auto"</code> which will allow the dialog height to adjust based on its content.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the dialog with the height option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ height: 400 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the height option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">height = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"height"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"height"</code><code class="plain">, 400 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-hide" class="api-item">
++<h3>hide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>If and how to animate the hiding of the dialog.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: 
++					The dialog will fade out while animating the height and width for the specified duration.
++				</li>
++<li>
++<strong>String</strong>: 
++					The dialog will be hidden using the specified jQuery UI effect. See the <a href="/category/effects/">list of effects</a> for possible values.
++				</li>
++<li>
++<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. The <code>effect</code> property must be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the dialog with the hide option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ hide: </code><code class="string">"explode"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the hide option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hide = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code><code class="plain">, </code><code class="string">"explode"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-maxHeight" class="api-item">
++<h3>maxHeight<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>The maximum height to which the dialog can be resized, in pixels.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the maxHeight option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ maxHeight: 600 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the maxHeight option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxHeight = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxHeight"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxHeight"</code><code class="plain">, 600 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-maxWidth" class="api-item">
++<h3>maxWidth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>The maximum width to which the dialog can be resized, in pixels.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the maxWidth option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ maxWidth: 600 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the maxWidth option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxWidth = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxWidth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxWidth"</code><code class="plain">, 600 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-minHeight" class="api-item">
++<h3>minHeight<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>150</code>
++</div>
++<div>The minimum height to which the dialog can be resized, in pixels.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the minHeight option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ minHeight: 200 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the minHeight option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minHeight = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minHeight"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minHeight"</code><code class="plain">, 200 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-minWidth" class="api-item">
++<h3>minWidth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>150</code>
++</div>
++<div>The minimum width to which the dialog can be resized, in pixels.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the minWidth option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ minWidth: 200 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the minWidth option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minWidth = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minWidth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minWidth"</code><code class="plain">, 200 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-modal" class="api-item">
++<h3>modal<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If set to <code>true</code>, the dialog will have modal behavior; other items on the page will be disabled, i.e., cannot be interacted with. Modal dialogs create an overlay below the dialog but above other page elements.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the modal option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ modal: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the modal option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">modal = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"modal"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"modal"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-position" class="api-item">
++<h3>position<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{ my: "center", at: "center", of: window }</code>
++</div>
++<div>
++				<p>Specifies where the dialog should be displayed. The dialog will handle collisions such that as much of the dialog is visible as possible.</p>
++				<p><em>Note: The <code>String</code> and <code>Array</code> forms are deprecated.</em></p>
++			</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Object</strong>: Identifies the position of the dialog when opened. The <code>of</code> option defaults to the window, but you can specify another element to position against. You can refer to the <a href="/position">jQuery UI Position</a> utility for more details about the various options.</li>
++<li>
++<strong>String</strong>: A string representing the position within the viewport. Possible values: <code>"center"</code>, <code>"left"</code>, <code>"right"</code>, <code>"top"</code>, <code>"bottom"</code>.</li>
++<li>
++<strong>Array</strong>: An array containing an <em>x, y</em> coordinate pair in pixel offset from the top left corner of the viewport or the name of a possible string value.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the dialog with the position option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ position: { my: </code><code class="string">"left top"</code><code class="plain">, at: </code><code class="string">"left bottom"</code><code class="plain">, of: button } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the position option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">position = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code><code class="plain">, { my: </code><code class="string">"left top"</code><code class="plain">, at: </code><code class="string">"left bottom"</code><code class="plain">, of: button } );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-resizable" class="api-item">
++<h3>resizable<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>If set to <code>true</code>, the dialog will be resizable. Requires the <a href="/resizable/">jQuery UI Resizable widget</a> to be included.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the resizable option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ resizable: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the resizable option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">resizable = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"resizable"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"resizable"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-show" class="api-item">
++<h3>show<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>If and how to animate the showing of the dialog.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Number</strong>: 
++					The dialog will fade in while animating the height and width for the specified duration.
++				</li>
++<li>
++<strong>String</strong>: 
++					The dialog will be shown using the specified jQuery UI effect. See the <a href="/category/effects/">list of effects</a> for possible values.
++				</li>
++<li>
++<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. The <code>effect</code> property must be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the dialog with the show option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ show: </code><code class="string">"slow"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the show option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">show = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code><code class="plain">, </code><code class="string">"slow"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-title" class="api-item">
++<h3>title<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Specifies the title of the dialog. Any valid HTML may be set as the title. The title can also be specified by the <code>title</code> attribute on the dialog source element.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the title option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ title: </code><code class="string">"Dialog Title"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the title option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">title = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"title"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"title"</code><code class="plain">, </code><code class="string">"Dialog Title"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-width" class="api-item">
++<h3>width<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>300</code>
++</div>
++<div>The width of the dialog, in pixels.</div>
++<strong>Code examples:</strong><p>Initialize the dialog with the width option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ width: 500 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the width option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">width = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"width"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"width"</code><code class="plain">, 500 );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-close"><div class="api-item first-item">
++<h3>close()</h3>
++<div>Closes the dialog.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the close method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"close"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-destroy"><div class="api-item">
++<h3>destroy()</h3>
++<div>
++		Removes the dialog functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-isOpen"><div class="api-item">
++<h3>isOpen()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div>Whether the dialog is currently open.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the isOpen method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isOpen = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"isOpen"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-moveToTop"><div class="api-item">
++<h3>moveToTop()</h3>
++<div>Moves the dialog to the top of the dialog stack.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the moveToTop method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"moveToTop"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-open"><div class="api-item">
++<h3>open()</h3>
++<div>Opens the dialog.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the open method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"open"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current dialog options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the dialog option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the dialog.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the generated wrapper.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-beforeClose" class="api-item first-item">
++<h3>beforeClose( event, ui )<span class="returns">Type: <code>dialogbeforeclose</code></span>
++</h3>
++<div>Triggered when a dialog is about to close. If canceled, the dialog will not close.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the beforeClose callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeClose: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogbeforeclose event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogbeforeclose"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-close" class="api-item">
++<h3>close( event, ui )<span class="returns">Type: <code>dialogclose</code></span>
++</h3>
++<div>Triggered when the dialog is closed.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the close callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">close: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogclose event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogclose"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>dialogcreate</code></span>
++</h3>
++<div>
++		Triggered when the dialog is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogcreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-drag" class="api-item">
++<h3>drag( event, ui )<span class="returns">Type: <code>dialogdrag</code></span>
++</h3>
++<div>Triggered while the dialog is being dragged.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current CSS position of the dialog.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current offset position of the dialog.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the drag callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">drag: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogdrag event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogdrag"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-dragStart" class="api-item">
++<h3>dragStart( event, ui )<span class="returns">Type: <code>dialogdragstart</code></span>
++</h3>
++<div>Triggered when the user starts dragging the dialog.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current CSS position of the dialog.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current offset position of the dialog.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the dragStart callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">dragStart: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogdragstart event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogdragstart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-dragStop" class="api-item">
++<h3>dragStop( event, ui )<span class="returns">Type: <code>dialogdragstop</code></span>
++</h3>
++<div>Triggered after the dialog has been dragged.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current CSS position of the dialog.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current offset position of the dialog.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the dragStop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">dragStop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogdragstop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogdragstop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-focus" class="api-item">
++<h3>focus( event, ui )<span class="returns">Type: <code>dialogfocus</code></span>
++</h3>
++<div>Triggered when the dialog gains focus.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the focus callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">focus: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogfocus event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogfocus"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-open" class="api-item">
++<h3>open( event, ui )<span class="returns">Type: <code>dialogopen</code></span>
++</h3>
++<div>Triggered when the dialog is opened.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the open callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">open: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogopen event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogopen"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-resize" class="api-item">
++<h3>resize( event, ui )<span class="returns">Type: <code>dialogresize</code></span>
++</h3>
++<div>Triggered while the dialog is being resized.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>orginalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The CSS position of the dialog prior to being resized.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current CSS position of the dialog.</div>
++</li>
++<li>
++<div><strong>originalSize</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The size of the dialog prior to being resized.</div>
++</li>
++<li>
++<div><strong>size</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current size of the dialog.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the resize callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">resize: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogresize event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogresize"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-resizeStart" class="api-item">
++<h3>resizeStart( event, ui )<span class="returns">Type: <code>dialogresizestart</code></span>
++</h3>
++<div>Triggered when the user starts resizing the dialog.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>orginalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The CSS position of the dialog prior to being resized.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current CSS position of the dialog.</div>
++</li>
++<li>
++<div><strong>originalSize</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The size of the dialog prior to being resized.</div>
++</li>
++<li>
++<div><strong>size</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current size of the dialog.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the resizeStart callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">resizeStart: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogresizestart event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogresizestart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-resizeStop" class="api-item">
++<h3>resizeStop( event, ui )<span class="returns">Type: <code>dialogresizestop</code></span>
++</h3>
++<div>Triggered after the dialog has been resized.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>orginalPosition</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The CSS position of the dialog prior to being resized.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current CSS position of the dialog.</div>
++</li>
++<li>
++<div><strong>originalSize</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The size of the dialog prior to being resized.</div>
++</li>
++<li>
++<div><strong>size</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>The current size of the dialog.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the dialog with the resizeStop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">resizeStop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dialogresizestop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogresizestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Dialog</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;dialog demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">button</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"opener"</code><code class="plain">&gt;open the dialog&lt;/</code><code class="keyword">button</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"dialog"</code> <code class="color1">title</code><code class="plain">=</code><code class="string">"Dialog Title"</code><code class="plain">&gt;I'm a dialog&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1">&nbsp;</div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">$( "#dialog" ).dialog({ autoOpen: false });</code></div><div class="line number17 index16 alt2"><code class="plain">$( "#opener" ).click(function() {</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#dialog" ).dialog( "open" );</code></div><div class="line number19 index18 alt2"><code class="plain">});</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/autocomplete.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/autocomplete.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/autocomplete.html	(revision 15487)
+@@ -0,0 +1,577 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI autocomplete documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Autocomplete Widget",
++		"excerpt":
++			"Autocomplete enables users to quickly find and select from a pre-populated list of values as they type, leveraging searching and filtering.",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="autocomplete1" class="entry widget"><h2 class="section-title">
++<span>Autocomplete Widget</span><span class="version-details">version added: 1.8</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Autocomplete enables users to quickly find and select from a pre-populated list of values as they type, leveraging searching and filtering.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-appendTo">appendTo</a></div>
++<div><a href="#option-autoFocus">autoFocus</a></div>
++<div><a href="#option-delay">delay</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-minLength">minLength</a></div>
++<div><a href="#option-position">position</a></div>
++<div><a href="#option-source">source</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-close">close</a></div>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-search">search</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-change">change</a></div>
++<div><a href="#event-close">close</a></div>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-focus">focus</a></div>
++<div><a href="#event-open">open</a></div>
++<div><a href="#event-response">response</a></div>
++<div><a href="#event-search">search</a></div>
++<div><a href="#event-select">select</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>By giving an Autocomplete field focus or entering something into it, the plugin starts searching for entries that match and displays a list of values to choose from. By entering more characters, the user can filter down the list to better matches.</p>
++
++		<p>This can be used to choose previously selected values, such as entering tags for articles or entering email addresses from an address book. Autocomplete can also be used to populate associated information, such as entering a city name and getting the zip code.</p>
++
++		<p>You can pull data in from a local or remote source: Local is good for small data sets, e.g., an address book with 50 entries; remote is necessary for big data sets, such as a database with hundreds or millions of entries to select from. To find out more about customizing the data soure, see the documentation for the <a href="#option-source"><code>source</code></a> option.</p>
++
++		<h3>Keyboard interaction</h3>
++
++		<p>When the menu is open, the following key commands are available:</p>
++		<ul>
++			<li>UP - Move focus to the previous item. If on first item, move focus to the input. If on the input, move focus to last item.</li>
++			<li>DOWN - Move focus to the next item. If on last item, move focus to the input. If on the input, move focus to the first item.</li>
++			<li>ESCAPE - Close the menu.</li>
++			<li>ENTER - Select the currently focused item and close the menu.</li>
++			<li>TAB - Select the currently focused item, close the menu, and move focus to the next focusable element.</li>
++			<li>PAGE UP/DOWN - Scroll through a page of items (based on height of menu). <em>It's generally a bad idea to display so many items that users need to page.</em>.</li>
++		</ul>
++
++		<p>When the menu is closed, the following key commands are available:</p>
++		<ul>
++			<li>UP/DOWN - Open the menu, if the <a href="#option-minLength"><code>minLength</code></a> has been met.</li>
++		</ul>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-appendTo" class="api-item first-item">
++<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Which element the menu should be appended to. When the value is <code>null</code>, the parents of the input field will be checked for a class of <code>ui-front</code>. If an element with the <code>ui-front</code> class is found, the menu will be appended to that element. Regardless of the value, if no element is found, the menu will be appended to the body.</div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the appendTo option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ appendTo: </code><code class="string">"#someElem"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the appendTo option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, </code><code class="string">"#someElem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-autoFocus" class="api-item">
++<h3>autoFocus<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If set to <code>true</code> the first item will automatically be focused when the menu is shown.</div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the autoFocus option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ autoFocus: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the autoFocus option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoFocus = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoFocus"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoFocus"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-delay" class="api-item">
++<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>300</code>
++</div>
++<div>The delay in milliseconds between when a keystroke occurs and when a search is performed. A zero-delay makes sense for local data (more responsive), but can produce a lot of load for remote data, while being less responsive.</div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the delay option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ delay: 500 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the delay option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 500 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the autocomplete if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-minLength" class="api-item">
++<h3>minLength<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>The minimum number of characters a user must type before a search is performed. Zero is useful for local data with just a few items, but a higher value should be used when a single character search could match a few thousand items.</div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the minLength option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ minLength: 0 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the minLength option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minLength = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minLength"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minLength"</code><code class="plain">, 0 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-position" class="api-item">
++<h3>position<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{ my: "left top", at: "left bottom", collision: "none" }</code>
++</div>
++<div>Identifies the position of the suggestions menu in relation to the associated input element. The <code>of</code> option defaults to the input element, but you can specify another element to position against. You can refer to the <a href="/position">jQuery UI Position</a> utility for more details about the various options.</div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the position option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ position: { my : </code><code class="string">"right top"</code><code class="plain">, at: </code><code class="string">"right bottom"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the position option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">position = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code><code class="plain">, { my : </code><code class="string">"right top"</code><code class="plain">, at: </code><code class="string">"right bottom"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-source" class="api-item">
++<h3>source<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#Object">Object</a> request, <a href="http://api.jquery.com/Types#Function">Function</a> response( <a href="http://api.jquery.com/Types#Object">Object</a> data ) )</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>none; must be specified</code>
++</div>
++<div>
++				Defines the data to use, must be specified.
++				<p>Independent of the variant you use, the label is always treated as text. If you want the label to be treated as html you can use <a href="https://github.com/scottgonzalez/jquery-ui-extensions/blob/master/autocomplete/jquery.ui.autocomplete.html.js">Scott González' html extension</a>. The demos all focus on different variations of the <code>source</code> option - look for one that matches your use case, and check out the code.</p>
++			</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Array</strong>: 
++					An array can be used for local data. There are two supported formats:
++					<ul>
++						<li>An array of strings: <code>[ "Choice1", "Choice2" ]</code>
++</li>
++						<li>An array of objects with <code>label</code> and <code>value</code> properties: <code>[ { label: "Choice1", value: "value1" }, ... ]</code>
++</li>
++					</ul>
++					The label property is displayed in the suggestion menu. The value will be inserted into the input element when a user selects an item. If just one property is specified, it will be used for both, e.g., if you provide only <code>value</code> properties, the value will also be used as the label.
++				</li>
++<li>
++<strong>String</strong>: When a string is used, the Autocomplete plugin expects that string to point to a URL resource that will return JSON data. It can be on the same host or on a different one (must provide JSONP). The Autocomplete plugin does not filter the results, instead a query string is added with a <code>term</code> field, which the server-side script should use for filtering the results. For example, if the <code>source</code> option is set to <code>"http://example.com"</code> and the user types <code>foo</code>, a GET request would be made to <code>http://example.com?term=foo</code>. The data itself can be in the same format as the local data described above.</li>
++<li>
++<strong>Function</strong>: 
++					The third variation, a callback, provides the most flexibility and can be used to connect any data source to Autocomplete. The callback gets two arguments:
++					<ul>
++						<li>A <code>request</code> object, with a single <code>term</code> property, which refers to the value currently in the text input. For example, if the user enters <code>"new yo"</code> in a city field, the Autocomplete term will equal <code>"new yo"</code>.</li>
++						<li>A <code>response</code> callback, which expects a single argument: the data to suggest to the user. This data should be filtered based on the provided term, and can be in any of the formats described above for simple local data. It's important when providing a custom source callback to handle errors during the request. You must always call the <code>response</code> callback even if you encounter an error. This ensures that the widget always has the correct state.</li>
++					</ul>
++					<p>When filtering data locally, you can make use of the built-in <code>$.ui.autocomplete.escapeRegex</code> function. It'll take a single string argument and escape all regex characters, making the result safe to pass to <code>new RegExp()</code>.</p>
++				</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the source option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ source: [ </code><code class="string">"c++"</code><code class="plain">, </code><code class="string">"java"</code><code class="plain">, </code><code class="string">"php"</code><code class="plain">, </code><code class="string">"coldfusion"</code><code class="plain">, </code><code class="string">"javascript"</code><code class="plain">, </code><code class="string">"asp"</code><code class="plain">, </code><code class="string">"ruby"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the source option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">source = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"source"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"source"</code><code class="plain">, [ </code><code class="string">"c++"</code><code class="plain">, </code><code class="string">"java"</code><code class="plain">, </code><code class="string">"php"</code><code class="plain">, </code><code class="string">"coldfusion"</code><code class="plain">, </code><code class="string">"javascript"</code><code class="plain">, </code><code class="string">"asp"</code><code class="plain">, </code><code class="string">"ruby"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-close"><div class="api-item first-item">
++<h3>close()</h3>
++<div>Closes the Autocomplete menu. Useful in combination with the <a href="#method-search"><code>search</code></a> method, to close the open menu.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the close method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"close"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-destroy"><div class="api-item">
++<h3>destroy()</h3>
++<div>
++		Removes the autocomplete functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the autocomplete.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the autocomplete.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current autocomplete options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the autocomplete option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the autocomplete.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-search"><div class="api-item">
++<h3>search(  [value ] )</h3>
++<div>Triggers a <a href="#event-search"><code>search</code></a> event and invokes the data source if the event is not canceled. Can be used by a selectbox-like button to open the suggestions when clicked. When invoked with no parameters, the current input's value is used. Can be called with an empty string and <code>minLength: 0</code> to display all items.</div>
++<ul><li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div></div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the search method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"search"</code><code class="plain">, </code><code class="string">""</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()</h3>
++<div>Returns a <code>jQuery</code> object containing the menu element. Although the menu items are constantly created and destroyed, the menu element itself is created during initialization and is constantly reused.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-change" class="api-item first-item">
++<h3>change( event, ui )<span class="returns">Type: <code>autocompletechange</code></span>
++</h3>
++<div>Triggered when the field is blurred, if the value has changed.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The item selected from the menu, if any. Otherwise the property is <code>null</code>.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the change callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the autocompletechange event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompletechange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-close" class="api-item">
++<h3>close( event, ui )<span class="returns">Type: <code>autocompleteclose</code></span>
++</h3>
++<div>Triggered when the menu is hidden. Not every <code>close</code> event will be accompanied by a <code>change</code> event.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the close callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">close: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the autocompleteclose event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompleteclose"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>autocompletecreate</code></span>
++</h3>
++<div>
++		Triggered when the autocomplete is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the autocompletecreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompletecreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-focus" class="api-item">
++<h3>focus( event, ui )<span class="returns">Type: <code>autocompletefocus</code></span>
++</h3>
++<div>
++				Triggered when focus is moved to an item (not selecting). The default action is to replace the text field's value with the value of the focused item, though only if the event was triggered by a keyboard interaction.
++				<p>Canceling this event prevents the value from being updated, but does not prevent the menu item from being focused.</p>
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The focused item.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the focus callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">focus: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the autocompletefocus event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompletefocus"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-open" class="api-item">
++<h3>open( event, ui )<span class="returns">Type: <code>autocompleteopen</code></span>
++</h3>
++<div>Triggered when the suggestion menu is opened or updated.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the open callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">open: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the autocompleteopen event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompleteopen"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-response" class="api-item">
++<h3>response( event, ui )<span class="returns">Type: <code>autocompleteresponse</code></span>
++</h3>
++<div>Triggered after a search completes, before the menu is shown. Useful for local manipulation of suggestion data, where a custom <a href="#option-source"><code>source</code></a> option callback is not required. This event is always triggered when a search completes, even if the menu will not be shown because there are no results or the Autocomplete is disabled.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>content</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
++</div>
++<div>Contains the response data and can be modified to change the results that will be shown. This data is already normalized, so if you modify the data, make sure to include both <code>value</code> and <code>label</code> properties for each item.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the response callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">response: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the autocompleteresponse event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompleteresponse"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-search" class="api-item">
++<h3>search( event, ui )<span class="returns">Type: <code>autocompletesearch</code></span>
++</h3>
++<div>Triggered before a search is performed, after <a href="#option-minLength"><code>minLength</code></a> and <a href="#option-delay"><code>delay</code></a> are met. If canceled, then no request will be started and no items suggested.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the search callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">search: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the autocompletesearch event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompletesearch"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-select" class="api-item">
++<h3>select( event, ui )<span class="returns">Type: <code>autocompleteselect</code></span>
++</h3>
++<div>
++				Triggered when an item is selected from the menu. The default action is to replace the text field's value with the value of the selected item.
++				<p>Canceling this event prevents the value from being updated, but does not prevent the menu from closing.</p>
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The selected item.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the autocomplete with the select callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">select: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the autocompleteselect event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompleteselect"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Examples:</h2></header><div class="entry-example" id="example-0">
++<h4>Example: <span class="desc">A simple jQuery UI Autocomplete</span>
++</h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;autocomplete demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"autocomplete"</code><code class="plain">&gt;Select a programming language: &lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"autocomplete"</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1">&nbsp;</div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">$( "#autocomplete" ).autocomplete({</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]</code></div><div class="line number18 index17 alt1"><code class="plain">});</code></div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1">&nbsp;</div><div class="line number21 index20 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div>
++<div class="entry-example" id="example-1">
++<h4>Example: <span class="desc">Using a custom source callback to match only the beginning of terms</span>
++</h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;autocomplete demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"autocomplete"</code><code class="plain">&gt;Select a programming language: &lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"autocomplete"</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1">&nbsp;</div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ];</code></div><div class="line number17 index16 alt2"><code class="plain">$( "#autocomplete" ).autocomplete({</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">source: function( request, response ) {</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">response( $.grep( tags, function( item ){</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">return matcher.test( item );</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}) );</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number24 index23 alt1"><code class="plain">});</code></div><div class="line number25 index24 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1">&nbsp;</div><div class="line number27 index26 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/selectable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/selectable.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/selectable.html	(revision 15487)
+@@ -0,0 +1,498 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI selectable documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Selectable Widget",
++		"excerpt":
++			"Use the mouse to select elements, individually or in a group.",
++		"termSlugs": {
++			"category": [
++				"interactions"
++			]
++		}
++	}</script><article id="selectable1" class="entry widget"><h2 class="section-title">
++<span>Selectable Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Use the mouse to select elements, individually or in a group.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-appendTo">appendTo</a></div>
++<div><a href="#option-autoRefresh">autoRefresh</a></div>
++<div><a href="#option-cancel">cancel</a></div>
++<div><a href="#option-delay">delay</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-distance">distance</a></div>
++<div><a href="#option-filter">filter</a></div>
++<div><a href="#option-tolerance">tolerance</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-refresh">refresh</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-selected">selected</a></div>
++<div><a href="#event-selecting">selecting</a></div>
++<div><a href="#event-start">start</a></div>
++<div><a href="#event-stop">stop</a></div>
++<div><a href="#event-unselected">unselected</a></div>
++<div><a href="#event-unselecting">unselecting</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>The jQuery UI Selectable plugin allows for elements to be selected by dragging a box (sometimes called a lasso) with the mouse over the elements. Elements can also be selected via click or drag while holding the ctrl/meta key, allowing for multiple (non-contiguous) selections.</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-appendTo" class="api-item first-item">
++<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"body"</code>
++</div>
++<div>Which element the selection helper (the lasso) should be appended to.</div>
++<strong>Code examples:</strong><p>Initialize the selectable with the appendTo option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ appendTo: </code><code class="string">"#someElem"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the appendTo option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, </code><code class="string">"#someElem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-autoRefresh" class="api-item">
++<h3>autoRefresh<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>This determines whether to refresh (recalculate) the position and size of each selectee at the beginning of each select operation. If you have many items, you may want to set this to false and call the <a href="#method-refresh"><code>refresh()</code></a> method manually.</div>
++<strong>Code examples:</strong><p>Initialize the selectable with the autoRefresh option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ autoRefresh: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the autoRefresh option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoRefresh = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoRefresh"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoRefresh"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-cancel" class="api-item">
++<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"input,textarea,button,select,option"</code>
++</div>
++<div>Prevents selecting if you start on elements matching the selector.</div>
++<strong>Code examples:</strong><p>Initialize the selectable with the cancel option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ cancel: a,.cancel });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cancel option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, a,.cancel );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-delay" class="api-item">
++<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>Time in milliseconds to define when the selecting should start. This helps prevent unwanted selections when clicking on an element.</div>
++<strong>Code examples:</strong><p>Initialize the selectable with the delay option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ delay: 150 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the delay option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the selectable if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the selectable with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-distance" class="api-item">
++<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>Tolerance, in pixels, for when selecting should start. If specified, selecting will not start until the mouse has been dragged beyond the specified distance.</div>
++<strong>Code examples:</strong><p>Initialize the selectable with the distance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ distance: 30 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the distance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 30 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-filter" class="api-item">
++<h3>filter<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"*"</code>
++</div>
++<div>The matching child elements will be made selectees (able to be selected).</div>
++<strong>Code examples:</strong><p>Initialize the selectable with the filter option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ filter: li });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the filter option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">filter = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"filter"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"filter"</code><code class="plain">, li );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-tolerance" class="api-item">
++<h3>tolerance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"touch"</code>
++</div>
++<div>
++				Specifies which mode to use for testing whether the lasso should select an item. Possible values:
++				<ul>
++					<li>
++<code>"fit"</code>: Lasso overlaps the item entirely.</li>
++					<li>
++<code>"touch"</code>: Lasso overlaps the item by any amount.</li>
++				</ul>
++			</div>
++<strong>Code examples:</strong><p>Initialize the selectable with the tolerance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ tolerance: </code><code class="string">"fit"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the tolerance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">tolerance = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code><code class="plain">, </code><code class="string">"fit"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the selectable functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the selectable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the selectable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current selectable options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the selectable option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the selectable.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-refresh"><div class="api-item">
++<h3>refresh()</h3>
++<div>Refresh the position and size of each selectee element. This method can be used to manually recalculate the position and size of each selectee when the <a href="#option-autoRefresh"><code>autoRefresh</code></a> option is set to <code>false</code>.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the refresh method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the selectable element.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
++<h3>create( event, ui )<span class="returns">Type: <code>selectablecreate</code></span>
++</h3>
++<div>
++		Triggered when the selectable is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the selectable with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the selectablecreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectablecreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-selected" class="api-item">
++<h3>selected( event, ui )<span class="returns">Type: <code>selectableselected</code></span>
++</h3>
++<div>Triggered at the end of the select operation, on each element added to the selection.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>selected</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Element">Element</a>
++</div>
++<div>The selectable item that has been selected.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the selectable with the selected callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">selected: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the selectableselected event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectableselected"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-selecting" class="api-item">
++<h3>selecting( event, ui )<span class="returns">Type: <code>selectableselecting</code></span>
++</h3>
++<div>Triggered during the select operation, on each element added to the selection.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>selecting</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Element">Element</a>
++</div>
++<div>The current selectable item being selected.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the selectable with the selecting callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">selecting: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the selectableselecting event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectableselecting"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-start" class="api-item">
++<h3>start( event, ui )<span class="returns">Type: <code>selectablestart</code></span>
++</h3>
++<div>Triggered at the beginning of the select operation.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the selectable with the start callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the selectablestart event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectablestart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-stop" class="api-item">
++<h3>stop( event, ui )<span class="returns">Type: <code>selectablestop</code></span>
++</h3>
++<div>Triggered at the end of the select operation.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the selectable with the stop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the selectablestop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectablestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-unselected" class="api-item">
++<h3>unselected( event, ui )<span class="returns">Type: <code>selectableunselected</code></span>
++</h3>
++<div>Triggered at the end of the select operation, on each element removed from the selection.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>unselected</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Element">Element</a>
++</div>
++<div>The selectable item that has been unselected.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the selectable with the unselected callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">unselected: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the selectableunselected event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectableunselected"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-unselecting" class="api-item">
++<h3>unselecting( event, ui )<span class="returns">Type: <code>selectableunselecting</code></span>
++</h3>
++<div>Triggered during the select operation, on each element removed from the selection.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>unselecting</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Element">Element</a>
++</div>
++<div>The current selectable item being unselected.</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the selectable with the unselecting callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">unselecting: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the selectableunselecting event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectableunselecting"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Selectable.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;selectable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#selectable .ui-selecting {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#selectable .ui-selected {</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #999;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">ul</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"selectable"</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 1&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 2&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 3&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 4&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 5&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">$( "#selectable" ).selectable();</code></div><div class="line number30 index29 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2">&nbsp;</div><div class="line number32 index31 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number33 index32 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="150"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/menu.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/menu.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/menu.html	(revision 15487)
+@@ -0,0 +1,644 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI menu documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Menu Widget",
++		"excerpt":
++			"\n\t\tThemeable menu with mouse and keyboard interactions for navigation.\n\t",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="menu1" class="entry widget"><h2 class="section-title">
++<span>Menu Widget</span><span class="version-details">version added: 1.9</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>
++		Themeable menu with mouse and keyboard interactions for navigation.
++	</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-icons">icons</a></div>
++<div><a href="#option-menus">menus</a></div>
++<div><a href="#option-position">position</a></div>
++<div><a href="#option-role">role</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-blur">blur</a></div>
++<div><a href="#method-collapse">collapse</a></div>
++<div><a href="#method-collapseAll">collapseAll</a></div>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-expand">expand</a></div>
++<div><a href="#method-focus">focus</a></div>
++<div><a href="#method-isFirstItem">isFirstItem</a></div>
++<div><a href="#method-isLastItem">isLastItem</a></div>
++<div><a href="#method-next">next</a></div>
++<div><a href="#method-nextPage">nextPage</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-previous">previous</a></div>
++<div><a href="#method-previousPage">previousPage</a></div>
++<div><a href="#method-refresh">refresh</a></div>
++<div><a href="#method-select">select</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-blur">blur</a></div>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-focus">focus</a></div>
++<div><a href="#event-select">select</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>A menu can be created from any valid markup as long as the elements have a strict parent/child relationship and each menu item has an anchor. The most commonly used element is the unordered list (<code>&lt;ul&gt;</code>):</p>
++
++		<pre>
++&lt;ul id="menu"&gt;
++	&lt;li&gt;&lt;a href="#"&gt;Item 1&lt;/a&gt;&lt;/li&gt;
++	&lt;li&gt;&lt;a href="#"&gt;Item 2&lt;/a&gt;&lt;/li&gt;
++	&lt;li&gt;&lt;a href="#"&gt;Item 3&lt;/a&gt;
++		&lt;ul&gt;
++			&lt;li&gt;&lt;a href="#"&gt;Item 3-1&lt;/a&gt;&lt;/li&gt;
++			&lt;li&gt;&lt;a href="#"&gt;Item 3-2&lt;/a&gt;&lt;/li&gt;
++			&lt;li&gt;&lt;a href="#"&gt;Item 3-3&lt;/a&gt;&lt;/li&gt;
++			&lt;li&gt;&lt;a href="#"&gt;Item 3-4&lt;/a&gt;&lt;/li&gt;
++			&lt;li&gt;&lt;a href="#"&gt;Item 3-5&lt;/a&gt;&lt;/li&gt;
++		&lt;/ul&gt;
++	&lt;/li&gt;
++	&lt;li&gt;&lt;a href="#"&gt;Item 4&lt;/a&gt;&lt;/li&gt;
++	&lt;li&gt;&lt;a href="#"&gt;Item 5&lt;/a&gt;&lt;/li&gt;
++&lt;/ul&gt;
++</pre>
++
++		<p>If you use a structure other than <code>&lt;ul&gt;</code>/<code>&lt;li&gt;</code>, including using the same element for the menu and the menu items, use the <a href="#option-menus"><code>menus</code></a> option to specify a way to differentiate the two elements, e.g., <code>menus: "div.menuElement"</code>.</p>
++
++		<p>Any menu item can be disabled by adding the <code>ui-state-disabled</code> class to that element.</p>
++
++		<p>To add icons to the menu, include them in the markup:</p>
++
++		<pre>
++&lt;ul id="menu"&gt;
++	&lt;li&gt;&lt;a href="#"&gt;&lt;span class="ui-icon ui-icon-disk"&gt;&lt;/span&gt;Save&lt;/a&gt;&lt;/li&gt;
++&lt;/ul&gt;
++</pre>
++		<p>Menu automatically adds the necessary padding to items without icons.</p>
++
++		<h3>Keyboard interaction</h3>
++
++		<ul>
++			<li>ENTER/SPACE: Invoke the focused menu item's action, which may be opening a submenu.</li>
++			<li>UP: Move focus to the previous menu item.</li>
++			<li>DOWN: Move focus to the next menu item.</li>
++			<li>RIGHT: Open the submenu, if available.</li>
++			<li>LEFT: Close the current submenu and move focus to the parent menu item. If not in a submenu, do nothing.</li>
++			<li>ESCAPE: Close the current submenu and move focus to the parent menu item. If not in a submenu, do nothing.</li>
++		</ul>
++
++		<p>Typing a letter moves focus to the first item whose title starts with that character. Repeating the same character cycles through matching items. Typing more characters within the one second timer matches those characters.</p>
++
++		<p>Disabled items can receive keyboard focus, but do not allow any other interaction.</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-disabled" class="api-item first-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the menu if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the menu with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-icons" class="api-item">
++<h3>icons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{ submenu: "ui-icon-carat-1-e" }</code>
++</div>
++<div>
++				Icons to use for submenus, matching an icon defined by the jQuery UI CSS Framework.
++				<ul>
++					<li>submenu (string, default: "ui-icon-carat-1-e")</li>
++				</ul>
++			</div>
++<strong>Code examples:</strong><p>Initialize the menu with the icons option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ icons: { submenu: </code><code class="string">"ui-icon-circle-triangle-e"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the icons option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">icons = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code><code class="plain">, { submenu: </code><code class="string">"ui-icon-circle-triangle-e"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-menus" class="api-item">
++<h3>menus<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"ul"</code>
++</div>
++<div>Selector for the elements that serve as the menu container, including sub-menus.</div>
++<strong>Code examples:</strong><p>Initialize the menu with the menus option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ menus: </code><code class="string">"div"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the menus option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">menus = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"menus"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"menus"</code><code class="plain">, </code><code class="string">"div"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-position" class="api-item">
++<h3>position<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{ my: "left top", at: "right top" }</code>
++</div>
++<div>Identifies the position of submenus in relation to the associated parent menu item. The <code>of</code> option defaults to the parent menu item, but you can specify another element to position against. You can refer to the <a href="/position/">jQuery UI Position</a> utility for more details about the various options.</div>
++<strong>Code examples:</strong><p>Initialize the menu with the position option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ position: { my: </code><code class="string">"left top"</code><code class="plain">, at: </code><code class="string">"right-5 top+5"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the position option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">position = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code><code class="plain">, { my: </code><code class="string">"left top"</code><code class="plain">, at: </code><code class="string">"right-5 top+5"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-role" class="api-item">
++<h3>role<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"menu"</code>
++</div>
++<div>Customize the ARIA roles used for the menu and menu items. The default uses <code>"menuitem"</code> for items. Setting the <code>role</code> option to <code>"listbox"</code> will use <code>"option"</code> for items. If set to <code>null</code>, no roles will be set, which is useful if the menu is being controlled by another element that is maintaining focus.</div>
++<strong>Code examples:</strong><p>Initialize the menu with the role option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ role: </code><code class="keyword">null</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the role option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">role = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"role"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"role"</code><code class="plain">, </code><code class="keyword">null</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-blur"><div class="api-item first-item">
++<h3>blur(  [event ] )</h3>
++<div>
++				Removes focus from a menu, resets any active element styles and triggers the menu's <a href="event-blur"><code>blur</code></a> event.
++			</div>
++<ul><li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the menu to blur.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the blur method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"blur"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-collapse"><div class="api-item">
++<h3>collapse(  [event ] )</h3>
++<div>
++				Closes the currently active sub-menu.
++			</div>
++<ul><li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the menu to collapse.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the collapse method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"collapse"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-collapseAll"><div class="api-item">
++<h3>collapseAll(  [event ] [, all ] )</h3>
++<div>
++				Closes all open sub-menus.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the menu to collapse.</div>
++</li>
++<li>
++<div><strong>all</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Boolean">Boolean</a>
++</div>
++<div>Indicates whether all sub-menus should be closed or only sub-menus below and including the menu that is or contains the target of the triggering event.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the collapseAll method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"collapseAll"</code><code class="plain">, </code><code class="keyword">null</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-destroy"><div class="api-item">
++<h3>destroy()</h3>
++<div>
++		Removes the menu functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the menu.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the menu.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-expand"><div class="api-item">
++<h3>expand(  [event ] )</h3>
++<div>
++				Opens the sub-menu below the currently active item, if one exists.
++			</div>
++<ul><li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the menu to expand.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the expand method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"expand"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-focus"><div class="api-item">
++<h3>focus(  [event ], item )</h3>
++<div>
++				Activates a particular menu item, begins opening any sub-menu if present and triggers the menu's <a href="#event-focus"><code>focus</code></a> event.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the menu item to gain focus.</div>
++</li>
++<li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The menu item to focus/activate.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the focus method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"focus"</code><code class="plain">, </code><code class="keyword">null</code><code class="plain">, menu.find( </code><code class="string">".ui-menu-item:last"</code> <code class="plain">) );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-isFirstItem"><div class="api-item">
++<h3>isFirstItem()</h3>
++<div>
++				Returns a boolean value stating whether or not the currently active item is the first item in the menu.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the isFirstItem method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">firstItem = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"isFirstItem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-isLastItem"><div class="api-item">
++<h3>isLastItem()</h3>
++<div>
++				Returns a boolean value stating whether or not the currently active item is the last item in the menu.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the isLastItem method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">lastItem = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"isLastItem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-next"><div class="api-item">
++<h3>next(  [event ] )</h3>
++<div>
++				Moves active state to next menu item.
++			</div>
++<ul><li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the focus to move.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the next method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"next"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-nextPage"><div class="api-item">
++<h3>nextPage(  [event ] )</h3>
++<div>
++				Moves active state to first menu item below the bottom of a scrollable menu or the last item if not scrollable.
++			</div>
++<ul><li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the focus to move.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the nextPage method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"nextPage"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current menu options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the menu option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the menu.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-previous"><div class="api-item">
++<h3>previous(  [event ] )</h3>
++<div>
++				Moves active state to previous menu item.
++			</div>
++<ul><li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the focus to move.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the previous method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"previous"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-previousPage"><div class="api-item">
++<h3>previousPage(  [event ] )</h3>
++<div>
++				Moves active state to first menu item above the top of a scrollable menu or the first item if not scrollable.
++			</div>
++<ul><li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the focus to move.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the previousPage method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"previousPage"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-refresh"><div class="api-item">
++<h3>refresh()</h3>
++<div>
++				Initializes sub-menus and menu items that have not already been initialized. New menu items, including sub-menus can be added to the menu or all of the contents of the menu can be replaced and then initialized with the <code>refresh()</code> method.
++			</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the refresh method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-select"><div class="api-item">
++<h3>select(  [event ] )</h3>
++<div>
++				Selects the currently active menu item, collapses all sub-menus and triggers the menu's <a href="#event-select"><code>select</code></a> event.
++			</div>
++<ul><li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div>What triggered the selection.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the select method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"select"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the menu.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-blur" class="api-item first-item">
++<h3>blur( event, ui )<span class="returns">Type: <code>menublur</code></span>
++</h3>
++<div>
++				Triggered when the menu loses focus.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>
++						The currently active menu item.
++					</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the menu with the blur callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">blur: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the menublur event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"menublur"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>menucreate</code></span>
++</h3>
++<div>
++		Triggered when the menu is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the menu with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the menucreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"menucreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-focus" class="api-item">
++<h3>focus( event, ui )<span class="returns">Type: <code>menufocus</code></span>
++</h3>
++<div>
++				Triggered when a menu gains focus or when any menu item is activated.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>
++						The currently active menu item.
++					</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the menu with the focus callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">focus: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the menufocus event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"menufocus"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-select" class="api-item">
++<h3>select( event, ui )<span class="returns">Type: <code>menuselect</code></span>
++</h3>
++<div>
++				Triggered when a menu item is selected.
++			</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul><li>
++<div><strong>item</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>
++						The currently active menu item.
++					</div>
++</li></ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the menu with the select callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">select: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the menuselect event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"menuselect"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Menu</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;menu demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.ui-menu {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 200px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1">&nbsp;</div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">ul</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"menu"</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 1&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 2&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3&lt;/</code><code class="keyword">a</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-1&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-2&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-3&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-4&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-5&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 4&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 5&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2"><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number32 index31 alt1">&nbsp;</div><div class="line number33 index32 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number34 index33 alt1"><code class="plain">$( "#menu" ).menu();</code></div><div class="line number35 index34 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number36 index35 alt1">&nbsp;</div><div class="line number37 index36 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number38 index37 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/size-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/size-effect.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/size-effect.html	(revision 15487)
+@@ -0,0 +1,45 @@
++<script>{
++		"title":
++			"Size Effect",
++		"excerpt":
++			"Resize an element to a specified width and height.",
++		"termSlugs": {
++			"category": [
++				"effects"
++			]
++		}
++	}</script><article id="size1" class="entry effect"><h2 class="section-title"><span>Size Effect</span></h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Resize an element to a specified width and height.</p>
++<ul class="signatures"><li class="signature">
++<h4 class="name">size</h4>
++<ul>
++<li>
++<div><strong>to</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Height and width to resize to.</div>
++</li>
++<li>
++<div>
++<strong>origin</strong> (default: <code>[ "top", "left" ]</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
++</div>
++<div>The vanishing point.</div>
++</li>
++<li>
++<div>
++<strong>scale</strong> (default: <code>"both"</code>)</div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>Which areas of the element will be resized: <code>"both"</code>, <code>"box"</code>, <code>"content"</code>. Box resizes the border and padding of the element; content resizes any content inside of the element.</div>
++</li>
++</ul>
++</li></ul>
++<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">Resize the element using the size effect.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;size demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to resize the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).effect( "size", {</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">to: { width: 200, height: 60 }</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}, 1000 );</code></div><div class="line number27 index26 alt2"><code class="plain">});</code></div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2">&nbsp;</div><div class="line number30 index29 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="200"></div>
++</div></section>
++</div></article>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/draggable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/draggable.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/draggable.html	(revision 15487)
+@@ -0,0 +1,741 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI draggable documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Draggable Widget",
++		"excerpt":
++			"Allow elements to be moved using the mouse.",
++		"termSlugs": {
++			"category": [
++				"interactions"
++			]
++		}
++	}</script><article id="draggable1" class="entry widget"><h2 class="section-title">
++<span>Draggable Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Allow elements to be moved using the mouse.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-addClasses">addClasses</a></div>
++<div><a href="#option-appendTo">appendTo</a></div>
++<div><a href="#option-axis">axis</a></div>
++<div><a href="#option-cancel">cancel</a></div>
++<div><a href="#option-connectToSortable">connectToSortable</a></div>
++<div><a href="#option-containment">containment</a></div>
++<div><a href="#option-cursor">cursor</a></div>
++<div><a href="#option-cursorAt">cursorAt</a></div>
++<div><a href="#option-delay">delay</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-distance">distance</a></div>
++<div><a href="#option-grid">grid</a></div>
++<div><a href="#option-handle">handle</a></div>
++<div><a href="#option-helper">helper</a></div>
++<div><a href="#option-iframeFix">iframeFix</a></div>
++<div><a href="#option-opacity">opacity</a></div>
++<div><a href="#option-refreshPositions">refreshPositions</a></div>
++<div><a href="#option-revert">revert</a></div>
++<div><a href="#option-revertDuration">revertDuration</a></div>
++<div><a href="#option-scope">scope</a></div>
++<div><a href="#option-scroll">scroll</a></div>
++<div><a href="#option-scrollSensitivity">scrollSensitivity</a></div>
++<div><a href="#option-scrollSpeed">scrollSpeed</a></div>
++<div><a href="#option-snap">snap</a></div>
++<div><a href="#option-snapMode">snapMode</a></div>
++<div><a href="#option-snapTolerance">snapTolerance</a></div>
++<div><a href="#option-stack">stack</a></div>
++<div><a href="#option-zIndex">zIndex</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-start">start</a></div>
++<div><a href="#event-drag">drag</a></div>
++<div><a href="#event-stop">stop</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>Make the selected elements draggable by mouse. If you want not just drag, but drag &amp; drop, see the <a href="/droppable/">jQuery UI Droppable plugin</a>, which provides a drop target for draggables.</p>
++	</div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-addClasses" class="api-item first-item">
++<h3>addClasses<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>If set to <code>false</code>, will prevent the <code>ui-draggable</code> class from being added. This may be desired as a performance optimization when calling <code>.draggable()</code> on hundreds of elements.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the addClasses option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ addClasses: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the addClasses option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">addClasses = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"addClasses"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"addClasses"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-appendTo" class="api-item">
++<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"parent"</code>
++</div>
++<div>Which element the draggable helper should be appended to while dragging.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>jQuery</strong>: A jQuery object containing the element to append the helper to.</li>
++<li>
++<strong>Element</strong>: The element to append the helper to.</li>
++<li>
++<strong>Selector</strong>: A selector specifying which element to append the helper to.</li>
++<li>
++<strong>String</strong>: The string <code>"parent"</code> will cause the helper to be a sibling of the draggable.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the draggable with the appendTo option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ appendTo: </code><code class="string">"body"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the appendTo option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, </code><code class="string">"body"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-axis" class="api-item">
++<h3>axis<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Constrains dragging to either the horizontal (x) or vertical (y) axis. Possible values: <code>"x"</code>, <code>"y"</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the axis option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ axis: </code><code class="string">"x"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the axis option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">axis = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"axis"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"axis"</code><code class="plain">, </code><code class="string">"x"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-cancel" class="api-item">
++<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"input,textarea,button,select,option"</code>
++</div>
++<div>Prevents dragging from starting on specified elements.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the cancel option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ cancel: </code><code class="string">".title"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cancel option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, </code><code class="string">".title"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-connectToSortable" class="api-item">
++<h3>connectToSortable<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Allows the draggable to be dropped onto the specified sortables. If this option is used, a draggable can be dropped onto a sortable list and then becomes part of it. Note: The <a href="#option-helper"><code>helper</code></a> option must be set to <code>"clone"</code> in order to work flawlessly. Requires the <a href="/sortable/">jQuery UI Sortable plugin</a> to be included.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the connectToSortable option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ connectToSortable: </code><code class="string">"#my-sortable"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the connectToSortable option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">connectToSortable = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"connectToSortable"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"connectToSortable"</code><code class="plain">, </code><code class="string">"#my-sortable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-containment" class="api-item">
++<h3>containment<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Constrains dragging to within the bounds of the specified element or region.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Selector</strong>: The draggable element will be contained to the bounding box of the first element found by the selector. If no element is found, no containment will be set.</li>
++<li>
++<strong>Element</strong>: The draggable element will be contained to the bounding box of this element.</li>
++<li>
++<strong>String</strong>: Possible values: <code>"parent"</code>, <code>"document"</code>, <code>"window"</code>.</li>
++<li>
++<strong>Array</strong>: An array defining a bounding box in the form <code>[ x1, y1, x2, y2 ]</code>.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the draggable with the containment option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ containment: </code><code class="string">"parent"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the containment option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">containment = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code><code class="plain">, </code><code class="string">"parent"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-cursor" class="api-item">
++<h3>cursor<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"auto"</code>
++</div>
++<div>The CSS cursor during the drag operation.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the cursor option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ cursor: </code><code class="string">"crosshair"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cursor option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cursor = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursor"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursor"</code><code class="plain">, </code><code class="string">"crosshair"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-cursorAt" class="api-item">
++<h3>cursorAt<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Sets the offset of the dragging helper relative to the mouse cursor. Coordinates can be given as a hash using a combination of one or two keys: <code>{ top, left, right, bottom }</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the cursorAt option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ cursorAt: { left: 5 } });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the cursorAt option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cursorAt = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursorAt"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursorAt"</code><code class="plain">, { left: 5 } );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-delay" class="api-item">
++<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>0</code>
++</div>
++<div>Time in milliseconds after mousedown until dragging should start. This option can be used to prevent unwanted drags when clicking on an element.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the delay option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ delay: 300 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the delay option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 300 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the draggable if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-distance" class="api-item">
++<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>1</code>
++</div>
++<div>Distance in pixels after mousedown the mouse must move before dragging should start. This option can be used to prevent unwanted drags when clicking on an element.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the distance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ distance: 10 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the distance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-grid" class="api-item">
++<h3>grid<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Snaps the dragging helper to a grid, every x and y pixels. The array must be of the form <code>[ x, y ]</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the grid option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ grid: [ 50, 20 ] });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the grid option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">grid = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code><code class="plain">, [ 50, 20 ] );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-handle" class="api-item">
++<h3>handle<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If specified, restricts dragging from starting unless the mousedown occurs on the specified element(s).</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the handle option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ handle: </code><code class="string">"h2"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the handle option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">handle = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handle"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handle"</code><code class="plain">, </code><code class="string">"h2"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-helper" class="api-item">
++<h3>helper<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"original"</code>
++</div>
++<div>Allows for a helper element to be used for dragging display.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>String</strong>: If set to <code>"clone"</code>, then the element will be cloned and the clone will be dragged.</li>
++<li>
++<strong>Function</strong>: A function that will return a DOMElement to use while dragging.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the draggable with the helper option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ helper: </code><code class="string">"clone"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the helper option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">helper = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code><code class="plain">, </code><code class="string">"clone"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-iframeFix" class="api-item">
++<h3>iframeFix<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Prevent iframes from capturing the mousemove events during a drag. Useful in combination with the <a href="#option-cursorAt"><code>cursorAt</code></a> option, or in any case where the mouse cursor may not be over the helper.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: When set to <code>true</code>, transparent overlays will be placed over all iframes on the page.</li>
++<li>
++<strong>Selector</strong>: Any iframes matching the selector will be covered by transparent overlays.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the draggable with the iframeFix option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ iframeFix: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the iframeFix option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">iframeFix = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"iframeFix"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"iframeFix"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-opacity" class="api-item">
++<h3>opacity<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Opacity for the helper while being dragged.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the opacity option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ opacity: 0.35 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the opacity option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">opacity = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"opacity"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"opacity"</code><code class="plain">, 0.35 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-refreshPositions" class="api-item">
++<h3>refreshPositions<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>
++				If set to <code>true</code>, all droppable positions are calculated on every mousemove.
++				<em>Caution: This solves issues on highly dynamic pages, but dramatically decreases performance.</em>
++			</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the refreshPositions option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ refreshPositions: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the refreshPositions option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">refreshPositions = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"refreshPositions"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"refreshPositions"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-revert" class="api-item">
++<h3>revert<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the element should revert to its start position when dragging stops.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: If set to <code>true</code> the element will always revert.</li>
++<li>
++<strong>String</strong>: If set to <code>"invalid"</code>, revert will only occur if the draggable has not been dropped on a droppable. For <code>"valid"</code>, it's the other way around.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the draggable with the revert option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ revert: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the revert option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">revert = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revert"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revert"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-revertDuration" class="api-item">
++<h3>revertDuration<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>500</code>
++</div>
++<div>The duration of the revert animation, in milliseconds. Ignored if the <a href="#option-revert"><code>revert</code></a> option is <code>false</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the revertDuration option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ revertDuration: 200 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the revertDuration option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">revertDuration = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revertDuration"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revertDuration"</code><code class="plain">, 200 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-scope" class="api-item">
++<h3>scope<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"default"</code>
++</div>
++<div>Used to group sets of draggable and droppable items, in addition to droppable's <a href="/droppable#option-accept"><code>accept</code></a> option. A draggable with the same <code>scope</code> value as a droppable will be accepted by the droppable.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the scope option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ scope: </code><code class="string">"tasks"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the scope option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scope = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scope"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scope"</code><code class="plain">, </code><code class="string">"tasks"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-scroll" class="api-item">
++<h3>scroll<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>If set to <code>true</code>, container auto-scrolls while dragging.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the scroll option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ scroll: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the scroll option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scroll = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scroll"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scroll"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-scrollSensitivity" class="api-item">
++<h3>scrollSensitivity<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>20</code>
++</div>
++<div>Distance in pixels from the edge of the viewport after which the viewport should scroll. Distance is relative to pointer, not the draggable. Ignored if the <a href="#option-scroll"><code>scroll</code></a> option is <code>false</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the scrollSensitivity option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ scrollSensitivity: 100 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the scrollSensitivity option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scrollSensitivity = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSensitivity"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSensitivity"</code><code class="plain">, 100 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-scrollSpeed" class="api-item">
++<h3>scrollSpeed<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>20</code>
++</div>
++<div>The speed at which the window should scroll once the mouse pointer gets within the <a href="#option-scrollSensitivity"><code>scrollSensitivity</code></a> distance. Ignored if the <a href="#option-scroll"><code>scroll</code></a> option is <code>false</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the scrollSpeed option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ scrollSpeed: 100 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the scrollSpeed option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scrollSpeed = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSpeed"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSpeed"</code><code class="plain">, 100 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-snap" class="api-item">
++<h3>snap<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Whether the element should snap to other elements.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Boolean</strong>: When set to <code>true</code>, the element will snap to all other draggable elements.</li>
++<li>
++<strong>Selector</strong>: A selector specifying which elements to snap to.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the draggable with the snap option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ snap: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the snap option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">snap = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snap"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snap"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-snapMode" class="api-item">
++<h3>snapMode<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"both"</code>
++</div>
++<div>Determines which edges of snap elements the draggable will snap to. Ignored if the <a href="#option-snap"><code>snap</code></a> option is <code>false</code>. Possible values: <code>"inner"</code>, <code>"outer"</code>, <code>"both"</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the snapMode option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ snapMode: </code><code class="string">"inner"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the snapMode option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">snapMode = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snapMode"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snapMode"</code><code class="plain">, </code><code class="string">"inner"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-snapTolerance" class="api-item">
++<h3>snapTolerance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>20</code>
++</div>
++<div>The distance in pixels from the snap element edges at which snapping should occur. Ignored if the <a href="#option-snap"><code>snap</code></a> option is <code>false</code>.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the snapTolerance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ snapTolerance: 30 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the snapTolerance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">snapTolerance = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snapTolerance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snapTolerance"</code><code class="plain">, 30 );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-stack" class="api-item">
++<h3>stack<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Controls the z-index of the set of elements that match the selector, always brings the currently dragged item to the front. Very useful in things like window managers.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the stack option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ stack: </code><code class="string">".products"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the stack option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">stack = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"stack"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"stack"</code><code class="plain">, </code><code class="string">".products"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-zIndex" class="api-item">
++<h3>zIndex<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Z-index for the helper while being dragged.</div>
++<strong>Code examples:</strong><p>Initialize the draggable with the zIndex option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ zIndex: 100 });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the zIndex option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">zIndex = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"zIndex"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"zIndex"</code><code class="plain">, 100 );</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the draggable functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the draggable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the draggable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current draggable options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the draggable option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the draggable.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the draggable element.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
++<h3>create( event, ui )<span class="returns">Type: <code>dragcreate</code></span>
++</h3>
++<div>
++		Triggered when the draggable is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the draggable with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dragcreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dragcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-drag" class="api-item">
++<h3>drag( event, ui )<span class="returns">Type: <code>drag</code></span>
++</h3>
++<div>Triggered while the mouse is moved during the dragging.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper that's being dragged.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current CSS position of the helper as <code>{ top, left }</code> object.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current offset position of the helper as <code>{ top, left }</code> object.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the draggable with the drag callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">drag: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the drag event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"drag"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-start" class="api-item">
++<h3>start( event, ui )<span class="returns">Type: <code>dragstart</code></span>
++</h3>
++<div>Triggered when dragging starts.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper that's being dragged.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current CSS position of the helper as <code>{ top, left }</code> object.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current offset position of the helper as <code>{ top, left }</code> object.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the draggable with the start callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dragstart event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dragstart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-stop" class="api-item">
++<h3>stop( event, ui )<span class="returns">Type: <code>dragstop</code></span>
++</h3>
++<div>Triggered when dragging stops.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>The jQuery object representing the helper that's being dragged.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current CSS position of the helper as <code>{ top, left }</code> object.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current offset position of the helper as <code>{ top, left }</code> object.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the draggable with the stop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dragstop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dragstop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A simple jQuery UI Draggable</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;draggable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#draggable {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"draggable"</code><code class="plain">&gt;Drag me&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1">&nbsp;</div><div class="line number21 index20 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="plain">$( "#draggable" ).draggable();</code></div><div class="line number23 index22 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1">&nbsp;</div><div class="line number25 index24 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/droppable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/droppable.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/droppable.html	(revision 15487)
+@@ -0,0 +1,548 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI droppable documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Droppable Widget",
++		"excerpt":
++			"Create targets for draggable elements.",
++		"termSlugs": {
++			"category": [
++				"interactions"
++			]
++		}
++	}</script><article id="droppable1" class="entry widget"><h2 class="section-title">
++<span>Droppable Widget</span><span class="version-details">version added: 1.0</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Create targets for draggable elements.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-accept">accept</a></div>
++<div><a href="#option-activeClass">activeClass</a></div>
++<div><a href="#option-addClasses">addClasses</a></div>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-greedy">greedy</a></div>
++<div><a href="#option-hoverClass">hoverClass</a></div>
++<div><a href="#option-scope">scope</a></div>
++<div><a href="#option-tolerance">tolerance</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++<div><a href="#event-activate">activate</a></div>
++<div><a href="#event-deactivate">deactivate</a></div>
++<div><a href="#event-over">over</a></div>
++<div><a href="#event-out">out</a></div>
++<div><a href="#event-drop">drop</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>The jQuery UI Droppable plugin makes selected elements droppable (meaning they accept being dropped on by <a href="/draggable/">draggables</a>). You can specify which draggables each will accept.</p>
++	</div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-accept" class="api-item first-item">
++<h3>accept<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"*"</code>
++</div>
++<div>Controls which draggable elements are accepted by the droppable.</div>
++<strong>Multiple types supported:</strong><ul>
++<li>
++<strong>Selector</strong>: A selector indicating which draggable elements are accepted.</li>
++<li>
++<strong>Function</strong>: A function that will be called for each draggable on the page (passed as the first argument to the function). The function must return <code>true</code> if the draggable should be accepted.</li>
++</ul>
++<strong>Code examples:</strong><p>Initialize the droppable with the accept option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ accept: </code><code class="string">".special"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the accept option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">accept = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"accept"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"accept"</code><code class="plain">, </code><code class="string">".special"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-activeClass" class="api-item">
++<h3>activeClass<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If specified, the class will be added to the droppable while an acceptable draggable is being dragged.</div>
++<strong>Code examples:</strong><p>Initialize the droppable with the activeClass option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ activeClass: </code><code class="string">"ui-state-highlight"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the activeClass option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">activeClass = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"activeClass"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"activeClass"</code><code class="plain">, </code><code class="string">"ui-state-highlight"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-addClasses" class="api-item">
++<h3>addClasses<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>If set to <code>false</code>, will prevent the <code>ui-droppable</code> class from being added. This may be desired as a performance optimization when calling <code>.droppable()</code> init on hundreds of elements.</div>
++<strong>Code examples:</strong><p>Initialize the droppable with the addClasses option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ addClasses: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the addClasses option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">addClasses = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"addClasses"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"addClasses"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-disabled" class="api-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the droppable if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the droppable with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-greedy" class="api-item">
++<h3>greedy<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>By default, when an element is dropped on nested droppables, each droppable will receive the element. However, by setting this option to <code>true</code>, any parent droppables will not receive the element.</div>
++<strong>Code examples:</strong><p>Initialize the droppable with the greedy option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ greedy: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the greedy option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">greedy = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"greedy"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"greedy"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-hoverClass" class="api-item">
++<h3>hoverClass<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>If specified, the class will be added to the droppable while an acceptable draggable is being hovered over the droppable.</div>
++<strong>Code examples:</strong><p>Initialize the droppable with the hoverClass option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ hoverClass: </code><code class="string">"drop-hover"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the hoverClass option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hoverClass = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hoverClass"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hoverClass"</code><code class="plain">, </code><code class="string">"drop-hover"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-scope" class="api-item">
++<h3>scope<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"default"</code>
++</div>
++<div>Used to group sets of draggable and droppable items, in addition to the <a href="#option-accept"><code>accept</code></a> option. A draggable with the same scope value as a droppable will be accepted.</div>
++<strong>Code examples:</strong><p>Initialize the droppable with the scope option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ scope: </code><code class="string">"tasks"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the scope option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scope = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scope"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scope"</code><code class="plain">, </code><code class="string">"tasks"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-tolerance" class="api-item">
++<h3>tolerance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>"intersect"</code>
++</div>
++<div>
++				Specifies which mode to use for testing whether a draggable is hovering over a droppable. Possible values:
++				<ul>
++					<li>
++<code>"fit"</code>: Draggable overlaps the droppable entirely.</li>
++					<li>
++<code>"intersect"</code>: Draggable overlaps the droppable at least 50% in both directions.</li>
++					<li>
++<code>"pointer"</code>: Mouse pointer overlaps the droppable.</li>
++					<li>
++<code>"touch"</code>: Draggable overlaps the droppable any amount.</li>
++				</ul>
++			</div>
++<strong>Code examples:</strong><p>Initialize the droppable with the tolerance option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ tolerance: </code><code class="string">"fit"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the tolerance option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">tolerance = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code><code class="plain">, </code><code class="string">"fit"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the droppable functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the droppable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the droppable.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current droppable options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the droppable option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the droppable.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the droppable element.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-activate" class="api-item first-item">
++<h3>activate( event, ui )<span class="returns">Type: <code>dropactivate</code></span>
++</h3>
++<div>Triggered when an accepted draggable starts dragging. This can be useful if you want to make the droppable "light up" when it can be dropped on.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>draggable</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>A jQuery object representing the draggable element.</div>
++</li>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>A jQuery object representing the helper that is being dragged.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current CSS position of the draggable helper as <code>{ top, left }</code> object.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current offset position of the draggable helper as <code>{ top, left }</code> object.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the droppable with the activate callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">activate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dropactivate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-create" class="api-item">
++<h3>create( event, ui )<span class="returns">Type: <code>dropcreate</code></span>
++</h3>
++<div>
++		Triggered when the droppable is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the droppable with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dropcreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-deactivate" class="api-item">
++<h3>deactivate( event, ui )<span class="returns">Type: <code>dropdeactivate</code></span>
++</h3>
++<div>Triggered when an accepted draggable stops dragging.</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>draggable</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>A jQuery object representing the draggable element.</div>
++</li>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>A jQuery object representing the helper that is being dragged.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current CSS position of the draggable helper as <code>{ top, left }</code> object.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current offset position of the draggable helper as <code>{ top, left }</code> object.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the droppable with the deactivate callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">deactivate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dropdeactivate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropdeactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-drop" class="api-item">
++<h3>drop( event, ui )<span class="returns">Type: <code>drop</code></span>
++</h3>
++<div>Triggered when an accepted draggable is dropped on the droppable (based on the<a href="#option-tolerance"><code>tolerance</code></a> option).</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>draggable</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>A jQuery object representing the draggable element.</div>
++</li>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>A jQuery object representing the helper that is being dragged.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current CSS position of the draggable helper as <code>{ top, left }</code> object.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current offset position of the draggable helper as <code>{ top, left }</code> object.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the droppable with the drop callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">drop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the drop event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"drop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-out" class="api-item">
++<h3>out( event, ui )<span class="returns">Type: <code>dropout</code></span>
++</h3>
++<div>Triggered when an accepted draggable is dragged out of the droppable (based on the<a href="#option-tolerance"><code>tolerance</code></a> option).</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the droppable with the out callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">out: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dropout event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropout"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div id="event-over" class="api-item">
++<h3>over( event, ui )<span class="returns">Type: <code>dropover</code></span>
++</h3>
++<div>Triggered when an accepted draggable is dragged over the droppable (based on the<a href="#option-tolerance"><code>tolerance</code></a> option).</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++<ul>
++<li>
++<div><strong>draggable</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>A jQuery object representing the draggable element.</div>
++</li>
++<li>
++<div><strong>helper</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
++</div>
++<div>A jQuery object representing the helper that is being dragged.</div>
++</li>
++<li>
++<div><strong>position</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current CSS position of the draggable helper as <code>{ top, left }</code> object.</div>
++</li>
++<li>
++<div><strong>offset</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>Current offset position of the draggable helper as <code>{ top, left }</code> object.</div>
++</li>
++</ul>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the droppable with the over callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">over: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the dropover event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropover"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
++<h4><span class="desc">A pair of draggable and droppable elements.</span></h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;droppable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#draggable {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#droppable {</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">position: absolute;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">left: 250px;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">top: 0;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 125px;</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 125px;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #999;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">color: #fff;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">padding: 10px;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1">&nbsp;</div><div class="line number29 index28 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"droppable"</code><code class="plain">&gt;Drop here&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number30 index29 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"draggable"</code><code class="plain">&gt;Drag me&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2">&nbsp;</div><div class="line number32 index31 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number33 index32 alt2"><code class="plain">$( "#draggable" ).draggable();</code></div><div class="line number34 index33 alt1"><code class="plain">$( "#droppable" ).droppable({</code></div><div class="line number35 index34 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">drop: function() {</code></div><div class="line number36 index35 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">alert( "dropped" );</code></div><div class="line number37 index36 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number38 index37 alt1"><code class="plain">});</code></div><div class="line number39 index38 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number40 index39 alt1">&nbsp;</div><div class="line number41 index40 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number42 index41 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/button.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/button.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/button.html	(revision 15487)
+@@ -0,0 +1,272 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI button documentation</title>
++
++	<style>
++	body {
++		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
++	}
++	.gutter {
++		display: none;
++	}
++	</style>
++</head>
++<body>
++
++<script>{
++		"title":
++			"Button Widget",
++		"excerpt":
++			"Themable buttons and button sets.",
++		"termSlugs": {
++			"category": [
++				"widgets"
++			]
++		}
++	}</script><article id="button1" class="entry widget"><h2 class="section-title">
++<span>Button Widget</span><span class="version-details">version added: 1.8</span>
++</h2>
++<div class="entry-wrapper">
++<p class="desc"><strong>Description: </strong>Themable buttons and button sets.</p>
++<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
++</h2></header><div class="quick-nav-section">
++<h3>Options</h3>
++<div><a href="#option-disabled">disabled</a></div>
++<div><a href="#option-icons">icons</a></div>
++<div><a href="#option-label">label</a></div>
++<div><a href="#option-text">text</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Methods</h3>
++<div><a href="#method-destroy">destroy</a></div>
++<div><a href="#method-disable">disable</a></div>
++<div><a href="#method-enable">enable</a></div>
++<div><a href="#method-refresh">refresh</a></div>
++<div><a href="#method-option">option</a></div>
++<div><a href="#method-widget">widget</a></div>
++</div>
++<div class="quick-nav-section">
++<h3>Events</h3>
++<div><a href="#event-create">create</a></div>
++</div></section><div class="longdesc" id="entry-longdesc">
++		<p>Button enhances standard form elements like buttons, inputs and anchors to themable buttons with appropiate hover and active styles.</p>
++
++		<p>In addition to basic push buttons, radio buttons and checkboxes (inputs of type radio and checkbox) can be converted to buttons. Their associated label is styled to appear as the button, while the underlying input is updated on click. For the association to work properly, give the input an <code>id</code> attribute, and refer to that in the label's <code>for</code> attribute. Don't nest the input inside the label, as that <a href="http://www.paciellogroup.com/blog/2011/07/html5-accessibility-chops-form-control-labeling/">causes accessbility problems</a>.</p>
++
++		<p>In order to group radio buttons, Button also provides an additional widget, called Buttonset. Buttonset is used by selecting a container element (which contains the radio buttons) and calling <code>.buttonset()</code>. Buttonset will also provide visual grouping, and therefore should be used whenever you have a group of buttons. It works by selecting all descendants and applying <code>.button()</code> to them. You can enable and disable a button set, which will enable and disable all contained buttons. Destroying a button set also calls each button's <code>destroy</code> method.</p>
++
++		<p>When using an input of type button, submit or reset, support is limited to plain text labels with no icons.</p>
++	</div>
++<h3>Additional Notes:</h3>
++<div class="longdesc"><ul><li>
++			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
++		</li></ul></div>
++<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-disabled" class="api-item first-item">
++<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>false</code>
++</div>
++<div>Disables the button if set to <code>true</code>.</div>
++<strong>Code examples:</strong><p>Initialize the button with the disabled option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the disabled option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-icons" class="api-item">
++<h3>icons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>{ primary: null, secondary: null }</code>
++</div>
++<div>Icons to display, with or without text (see <a href="#option-text"><code>text</code></a> option). By default, the primary icon is displayed on the left of the label text and the secondary is displayed on the right. The positioning can be controlled via CSS. The value for the <code>primary</code> and <code>secondary</code> properties must be a class name, e.g., <code>"ui-icon-gear"</code>. For using only one icon: <code>icons: { primary: "ui-icon-locked" }</code>. For using two icons: <code>icons: { primary: "ui-icon-gear", secondary: "ui-icon-triangle-1-s" }</code>.</div>
++<strong>Code examples:</strong><p>Initialize the button with the icons option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({ icons: { primary: </code><code class="string">"ui-icon-gear"</code><code class="plain">, secondary: </code><code class="string">"ui-icon-triangle-1-s"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the icons option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">icons = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code><code class="plain">, { primary: </code><code class="string">"ui-icon-gear"</code><code class="plain">, secondary: </code><code class="string">"ui-icon-triangle-1-s"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-label" class="api-item">
++<h3>label<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>null</code>
++</div>
++<div>Text to show in the button. When not specified (<code>null</code>), the element's HTML content is used, or its <code>value</code> attribute if the element is an input element of type submit or reset, or the HTML content of the associated label element if the element is an input of type radio or checkbox.</div>
++<strong>Code examples:</strong><p>Initialize the button with the label option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({ label: </code><code class="string">"custom label"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the label option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">label = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"label"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"label"</code><code class="plain">, </code><code class="string">"custom label"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++<div id="option-text" class="api-item">
++<h3>text<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
++</h3>
++<div class="default">
++<strong>Default: </strong><code>true</code>
++</div>
++<div>Whether to show the label. When set to <code>false</code> no text will be displayed, but the <a href="#options-icons"><code>icons</code></a> option must be enabled, otherwise the <code>text</code> option will be ignored.</div>
++<strong>Code examples:</strong><p>Initialize the button with the text option specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({ text: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Get or set the text option, after initialization:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">text = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"text"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"text"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
++<h3>destroy()</h3>
++<div>
++		Removes the button functionality completely. This will return the element back to its pre-init state.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the destroy method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-disable"><div class="api-item">
++<h3>disable()</h3>
++<div>
++		Disables the button.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the disable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-enable"><div class="api-item">
++<h3>enable()</h3>
++<div>
++		Enables the button.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the enable method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-option">
++<div class="api-item">
++<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
++</h3>
++<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
++<ul><li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to get.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
++</h3>
++<div>Gets an object containing key/value pairs representing the current button options hash.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( optionName, value )</h3>
++<div>Sets the value of the button option associated with the specified <code>optionName</code>.</div>
++<ul>
++<li>
++<div><strong>optionName</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
++</div>
++<div>The name of the option to set.</div>
++</li>
++<li>
++<div><strong>value</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A value to set for the option.</div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++<div class="api-item">
++<h3>option( options )</h3>
++<div>Sets one or more options for the button.</div>
++<ul><li>
++<div><strong>options</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div>A map of option-value pairs to set.</div>
++</li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the  method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div>
++</div>
++<div id="method-refresh"><div class="api-item">
++<h3>refresh()</h3>
++<div>Refreshes the visual state of the button. Useful for updating button state after the native element's checked or disabled state is changed programmatically.</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the refresh method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div>
++<div id="method-widget"><div class="api-item">
++<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
++</h3>
++<div>
++		Returns a <code>jQuery</code> object containing the element visually representing the button.
++	</div>
++<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
++<div>
++<strong>Code examples:</strong><p>Invoke the widget method:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
++<h3>create( event, ui )<span class="returns">Type: <code>buttoncreate</code></span>
++</h3>
++<div>
++		Triggered when the button is created.
++	</div>
++<ul>
++<li>
++<div><strong>event</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
++</div>
++<div></div>
++</li>
++<li>
++<div><strong>ui</strong></div>
++<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
++</div>
++<div></div>
++</li>
++</ul>
++<div>
++<strong>Code examples:</strong><p>Initialize the button with the create callback specified:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
++<p>Bind an event listener to the buttoncreate event:</p>
++<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"buttoncreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
++</div>
++</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Examples:</h2></header><div class="entry-example" id="example-0">
++<h4>Example: <span class="desc">A simple jQuery UI Button</span>
++</h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;button demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">button</code><code class="plain">&gt;Button label&lt;/</code><code class="keyword">button</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "button" ).button();</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="100"></div>
++</div>
++<div class="entry-example" id="example-1">
++<h4>Example: <span class="desc">A simple jQuery UI Buttonset</span>
++</h4>
++<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;button demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"radio"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">type</code><code class="plain">=</code><code class="string">"radio"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"radio1"</code> <code class="color1">name</code><code class="plain">=</code><code class="string">"radio"</code><code class="plain">&gt;&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"radio1"</code><code class="plain">&gt;Choice 1&lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">type</code><code class="plain">=</code><code class="string">"radio"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"radio2"</code> <code class="color1">name</code><code class="plain">=</code><code class="string">"radio"</code> <code class="color1">checked</code><code class="plain">=</code><code class="string">"checked"</code><code class="plain">&gt;&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"radio2"</code><code class="plain">&gt;Choice 2&lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">type</code><code class="plain">=</code><code class="string">"radio"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"radio3"</code> <code class="color1">name</code><code class="plain">=</code><code class="string">"radio"</code><code class="plain">&gt;&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"radio3"</code><code class="plain">&gt;Choice 3&lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="plain">$( "#radio" ).buttonset();</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
++<h4>Demo:</h4>
++<div class="demo code-demo" data-height="100"></div>
++</div></section>
++</div></article>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.mouse.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.mouse.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.mouse.jquery.json	(revision 15487)
+@@ -0,0 +1,64 @@
++{
++	"name": "ui.mouse",
++	"title": "jQuery UI Mouse",
++	"description": "Abstracts mouse-based interactions to assist in creating certain widgets.",
++	"keywords": [
++		"ui",
++		"mouse",
++		"abstraction"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/mouse/",
++	"demo": "http://jqueryui.com/mouse/",
++	"docs": "http://api.jqueryui.com/mouse/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3"
++	},
++	"category": "core"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.progressbar.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.progressbar.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.progressbar.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.progressbar",
++	"title": "jQuery UI Progressbar",
++	"description": "Displays a status indicator for loading state, standard percentage, and other progress indicators.",
++	"keywords": [
++		"ui",
++		"progressbar",
++		"determinate",
++		"status"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/progressbar/",
++	"demo": "http://jqueryui.com/progressbar/",
++	"docs": "http://api.jqueryui.com/progressbar/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.tabs.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.tabs.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.tabs.jquery.json	(revision 15487)
+@@ -0,0 +1,67 @@
++{
++	"name": "ui.tabs",
++	"title": "jQuery UI Tabs",
++	"description": "Transforms a set of container elements into a tab structure.",
++	"keywords": [
++		"ui",
++		"tabs",
++		"navigation",
++		"panel",
++		"collapse",
++		"expand"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/tabs/",
++	"demo": "http://jqueryui.com/tabs/",
++	"docs": "http://api.jqueryui.com/tabs/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-explode.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-explode.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-explode.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-explode",
++	"title": "jQuery UI Explode Effect",
++	"description": "Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.",
++	"keywords": [
++		"ui",
++		"explode",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/explode-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/README.md
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/README.md	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/README.md	(revision 15487)
+@@ -0,0 +1,99 @@
++[jQuery UI](http://jqueryui.com/) - Interactions and Widgets for the web
++================================
++
++jQuery UI provides interactions like Drag and Drop and widgets like Autocomplete, Tabs and Slider and makes these as easy to use as jQuery itself.
++
++If you want to use jQuery UI, go to [jqueryui.com](http://jqueryui.com) to get started. Or visit the [Using jQuery UI Forum](http://forum.jquery.com/using-jquery-ui) for discussions and questions.
++
++If you are interested in helping develop jQuery UI, you are in the right place.
++To discuss development with team members and the community, visit the [Developing jQuery UI Forum](http://forum.jquery.com/developing-jquery-ui) or in #jquery on irc.freednode.net.
++
++
++For contributors
++---
++
++If you want to help and provide a patch for a bugfix or new feature, please take
++a few minutes and look at [our Getting Involved guide](http://wiki.jqueryui.com/w/page/35263114/Getting-Involved).
++In particular check out the [Coding standards](http://wiki.jqueryui.com/w/page/12137737/Coding-standards)
++and [Commit Message Style Guide](http://wiki.jqueryui.com/w/page/25941597/Commit-Message-Style-Guide).
++
++In general, fork the project, create a branch for a specific change and send a
++pull request for that branch. Don't mix unrelated changes. You can use the commit
++message as the description for the pull request.
++
++
++Running the Unit Tests
++---
++
++Run the unit tests with a local server that supports PHP. No database is required. Pre-configured php local servers are available for Windows and Mac. Here are some options:
++
++- Windows: [WAMP download](http://www.wampserver.com/en/)
++- Mac: [MAMP download](http://www.mamp.info/en/index.html)
++- Linux: [Setting up LAMP](https://www.linux.com/learn/tutorials/288158-easy-lamp-server-installation)
++- [Mongoose (most platforms)](http://code.google.com/p/mongoose/)
++
++
++Building jQuery UI
++---
++
++jQuery UI uses the [grunt](http://github.com/cowboy/grunt) build system. Building jQuery UI requires node.js and a command line zip program.
++
++Install grunt.
++
++`npm install grunt -g`
++
++Clone the jQuery UI git repo.
++
++`git clone git://github.com/jquery/jquery-ui.git`
++
++`cd jquery-ui`
++
++Install node modules.
++
++`npm install`
++
++Run grunt.
++
++`grunt build`
++
++There are many other tasks that can be run through grunt. For a list of all tasks:
++
++`grunt --help`
++
++
++For committers
++---
++
++When looking at pull requests, first check for [proper commit messages](http://wiki.jqueryui.com/w/page/12137724/Bug-Fixing-Guide).
++
++Do not merge pull requests directly through GitHub's interface.
++Most pull requests are a single commit; cherry-picking will avoid creating a merge commit.
++It's also common for contributors to make minor fixes in an additional one or two commits.
++These should be squashed before landing in master.
++
++**Make sure the author has a valid name and email address associated with the commit.**
++
++Fetch the remote first:
++
++    git fetch [their-fork.git] [their-branch]
++
++Then cherry-pick the commit(s):
++
++	git cherry-pick [sha-of-commit]
++
++If you need to edit the commit message:
++
++    git cherry-pick -e [sha-of-commit]
++
++If you need to edit the changes:
++
++	git cherry-pick -n [sha-of-commit]
++	# make changes
++	git commit --author="[author-name-and-email]"
++
++If it should go to the stable brach, cherry-pick it to stable:
++
++    git checkout 1-8-stable
++    git cherry-pick -x [sha-of-commit-from-master]
++
++*NOTE: Do not cherry-pick into 1-8-stable until you have pushed the commit from master upstream.*
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect.jquery.json	(revision 15487)
+@@ -0,0 +1,68 @@
++{
++	"name": "ui.effect",
++	"title": "jQuery UI Effects Core",
++	"description": "Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.",
++	"keywords": [
++		"ui",
++		"effect",
++		"animation",
++		"show",
++		"hide",
++		"color",
++		"class",
++		"transition",
++		"easing"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/category/effects-core/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/jquery-1.9.1.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/jquery-1.9.1.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/jquery-1.9.1.js	(revision 15487)
+@@ -0,0 +1,9597 @@
++/*!
++ * jQuery JavaScript Library v1.9.1
++ * http://jquery.com/
++ *
++ * Includes Sizzle.js
++ * http://sizzlejs.com/
++ *
++ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
++ * Released under the MIT license
++ * http://jquery.org/license
++ *
++ * Date: 2013-2-4
++ */
++(function( window, undefined ) {
++
++// Can't do this because several apps including ASP.NET trace
++// the stack via arguments.caller.callee and Firefox dies if
++// you try to trace through "use strict" call chains. (#13335)
++// Support: Firefox 18+
++//"use strict";
++var
++	// The deferred used on DOM ready
++	readyList,
++
++	// A central reference to the root jQuery(document)
++	rootjQuery,
++
++	// Support: IE<9
++	// For `typeof node.method` instead of `node.method !== undefined`
++	core_strundefined = typeof undefined,
++
++	// Use the correct document accordingly with window argument (sandbox)
++	document = window.document,
++	location = window.location,
++
++	// Map over jQuery in case of overwrite
++	_jQuery = window.jQuery,
++
++	// Map over the $ in case of overwrite
++	_$ = window.$,
++
++	// [[Class]] -> type pairs
++	class2type = {},
++
++	// List of deleted data cache ids, so we can reuse them
++	core_deletedIds = [],
++
++	core_version = "1.9.1",
++
++	// Save a reference to some core methods
++	core_concat = core_deletedIds.concat,
++	core_push = core_deletedIds.push,
++	core_slice = core_deletedIds.slice,
++	core_indexOf = core_deletedIds.indexOf,
++	core_toString = class2type.toString,
++	core_hasOwn = class2type.hasOwnProperty,
++	core_trim = core_version.trim,
++
++	// Define a local copy of jQuery
++	jQuery = function( selector, context ) {
++		// The jQuery object is actually just the init constructor 'enhanced'
++		return new jQuery.fn.init( selector, context, rootjQuery );
++	},
++
++	// Used for matching numbers
++	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
++
++	// Used for splitting on whitespace
++	core_rnotwhite = /\S+/g,
++
++	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
++	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
++
++	// A simple way to check for HTML strings
++	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
++	// Strict HTML recognition (#11290: must start with <)
++	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
++
++	// Match a standalone tag
++	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
++
++	// JSON RegExp
++	rvalidchars = /^[\],:{}\s]*$/,
++	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
++	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
++	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
++
++	// Matches dashed string for camelizing
++	rmsPrefix = /^-ms-/,
++	rdashAlpha = /-([\da-z])/gi,
++
++	// Used by jQuery.camelCase as callback to replace()
++	fcamelCase = function( all, letter ) {
++		return letter.toUpperCase();
++	},
++
++	// The ready event handler
++	completed = function( event ) {
++
++		// readyState === "complete" is good enough for us to call the dom ready in oldIE
++		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
++			detach();
++			jQuery.ready();
++		}
++	},
++	// Clean-up method for dom ready events
++	detach = function() {
++		if ( document.addEventListener ) {
++			document.removeEventListener( "DOMContentLoaded", completed, false );
++			window.removeEventListener( "load", completed, false );
++
++		} else {
++			document.detachEvent( "onreadystatechange", completed );
++			window.detachEvent( "onload", completed );
++		}
++	};
++
++jQuery.fn = jQuery.prototype = {
++	// The current version of jQuery being used
++	jquery: core_version,
++
++	constructor: jQuery,
++	init: function( selector, context, rootjQuery ) {
++		var match, elem;
++
++		// HANDLE: $(""), $(null), $(undefined), $(false)
++		if ( !selector ) {
++			return this;
++		}
++
++		// Handle HTML strings
++		if ( typeof selector === "string" ) {
++			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
++				// Assume that strings that start and end with <> are HTML and skip the regex check
++				match = [ null, selector, null ];
++
++			} else {
++				match = rquickExpr.exec( selector );
++			}
++
++			// Match html or make sure no context is specified for #id
++			if ( match && (match[1] || !context) ) {
++
++				// HANDLE: $(html) -> $(array)
++				if ( match[1] ) {
++					context = context instanceof jQuery ? context[0] : context;
++
++					// scripts is true for back-compat
++					jQuery.merge( this, jQuery.parseHTML(
++						match[1],
++						context && context.nodeType ? context.ownerDocument || context : document,
++						true
++					) );
++
++					// HANDLE: $(html, props)
++					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
++						for ( match in context ) {
++							// Properties of context are called as methods if possible
++							if ( jQuery.isFunction( this[ match ] ) ) {
++								this[ match ]( context[ match ] );
++
++							// ...and otherwise set as attributes
++							} else {
++								this.attr( match, context[ match ] );
++							}
++						}
++					}
++
++					return this;
++
++				// HANDLE: $(#id)
++				} else {
++					elem = document.getElementById( match[2] );
++
++					// Check parentNode to catch when Blackberry 4.6 returns
++					// nodes that are no longer in the document #6963
++					if ( elem && elem.parentNode ) {
++						// Handle the case where IE and Opera return items
++						// by name instead of ID
++						if ( elem.id !== match[2] ) {
++							return rootjQuery.find( selector );
++						}
++
++						// Otherwise, we inject the element directly into the jQuery object
++						this.length = 1;
++						this[0] = elem;
++					}
++
++					this.context = document;
++					this.selector = selector;
++					return this;
++				}
++
++			// HANDLE: $(expr, $(...))
++			} else if ( !context || context.jquery ) {
++				return ( context || rootjQuery ).find( selector );
++
++			// HANDLE: $(expr, context)
++			// (which is just equivalent to: $(context).find(expr)
++			} else {
++				return this.constructor( context ).find( selector );
++			}
++
++		// HANDLE: $(DOMElement)
++		} else if ( selector.nodeType ) {
++			this.context = this[0] = selector;
++			this.length = 1;
++			return this;
++
++		// HANDLE: $(function)
++		// Shortcut for document ready
++		} else if ( jQuery.isFunction( selector ) ) {
++			return rootjQuery.ready( selector );
++		}
++
++		if ( selector.selector !== undefined ) {
++			this.selector = selector.selector;
++			this.context = selector.context;
++		}
++
++		return jQuery.makeArray( selector, this );
++	},
++
++	// Start with an empty selector
++	selector: "",
++
++	// The default length of a jQuery object is 0
++	length: 0,
++
++	// The number of elements contained in the matched element set
++	size: function() {
++		return this.length;
++	},
++
++	toArray: function() {
++		return core_slice.call( this );
++	},
++
++	// Get the Nth element in the matched element set OR
++	// Get the whole matched element set as a clean array
++	get: function( num ) {
++		return num == null ?
++
++			// Return a 'clean' array
++			this.toArray() :
++
++			// Return just the object
++			( num < 0 ? this[ this.length + num ] : this[ num ] );
++	},
++
++	// Take an array of elements and push it onto the stack
++	// (returning the new matched element set)
++	pushStack: function( elems ) {
++
++		// Build a new jQuery matched element set
++		var ret = jQuery.merge( this.constructor(), elems );
++
++		// Add the old object onto the stack (as a reference)
++		ret.prevObject = this;
++		ret.context = this.context;
++
++		// Return the newly-formed element set
++		return ret;
++	},
++
++	// Execute a callback for every element in the matched set.
++	// (You can seed the arguments with an array of args, but this is
++	// only used internally.)
++	each: function( callback, args ) {
++		return jQuery.each( this, callback, args );
++	},
++
++	ready: function( fn ) {
++		// Add the callback
++		jQuery.ready.promise().done( fn );
++
++		return this;
++	},
++
++	slice: function() {
++		return this.pushStack( core_slice.apply( this, arguments ) );
++	},
++
++	first: function() {
++		return this.eq( 0 );
++	},
++
++	last: function() {
++		return this.eq( -1 );
++	},
++
++	eq: function( i ) {
++		var len = this.length,
++			j = +i + ( i < 0 ? len : 0 );
++		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
++	},
++
++	map: function( callback ) {
++		return this.pushStack( jQuery.map(this, function( elem, i ) {
++			return callback.call( elem, i, elem );
++		}));
++	},
++
++	end: function() {
++		return this.prevObject || this.constructor(null);
++	},
++
++	// For internal use only.
++	// Behaves like an Array's method, not like a jQuery method.
++	push: core_push,
++	sort: [].sort,
++	splice: [].splice
++};
++
++// Give the init function the jQuery prototype for later instantiation
++jQuery.fn.init.prototype = jQuery.fn;
++
++jQuery.extend = jQuery.fn.extend = function() {
++	var src, copyIsArray, copy, name, options, clone,
++		target = arguments[0] || {},
++		i = 1,
++		length = arguments.length,
++		deep = false;
++
++	// Handle a deep copy situation
++	if ( typeof target === "boolean" ) {
++		deep = target;
++		target = arguments[1] || {};
++		// skip the boolean and the target
++		i = 2;
++	}
++
++	// Handle case when target is a string or something (possible in deep copy)
++	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
++		target = {};
++	}
++
++	// extend jQuery itself if only one argument is passed
++	if ( length === i ) {
++		target = this;
++		--i;
++	}
++
++	for ( ; i < length; i++ ) {
++		// Only deal with non-null/undefined values
++		if ( (options = arguments[ i ]) != null ) {
++			// Extend the base object
++			for ( name in options ) {
++				src = target[ name ];
++				copy = options[ name ];
++
++				// Prevent never-ending loop
++				if ( target === copy ) {
++					continue;
++				}
++
++				// Recurse if we're merging plain objects or arrays
++				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
++					if ( copyIsArray ) {
++						copyIsArray = false;
++						clone = src && jQuery.isArray(src) ? src : [];
++
++					} else {
++						clone = src && jQuery.isPlainObject(src) ? src : {};
++					}
++
++					// Never move original objects, clone them
++					target[ name ] = jQuery.extend( deep, clone, copy );
++
++				// Don't bring in undefined values
++				} else if ( copy !== undefined ) {
++					target[ name ] = copy;
++				}
++			}
++		}
++	}
++
++	// Return the modified object
++	return target;
++};
++
++jQuery.extend({
++	noConflict: function( deep ) {
++		if ( window.$ === jQuery ) {
++			window.$ = _$;
++		}
++
++		if ( deep && window.jQuery === jQuery ) {
++			window.jQuery = _jQuery;
++		}
++
++		return jQuery;
++	},
++
++	// Is the DOM ready to be used? Set to true once it occurs.
++	isReady: false,
++
++	// A counter to track how many items to wait for before
++	// the ready event fires. See #6781
++	readyWait: 1,
++
++	// Hold (or release) the ready event
++	holdReady: function( hold ) {
++		if ( hold ) {
++			jQuery.readyWait++;
++		} else {
++			jQuery.ready( true );
++		}
++	},
++
++	// Handle when the DOM is ready
++	ready: function( wait ) {
++
++		// Abort if there are pending holds or we're already ready
++		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
++			return;
++		}
++
++		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
++		if ( !document.body ) {
++			return setTimeout( jQuery.ready );
++		}
++
++		// Remember that the DOM is ready
++		jQuery.isReady = true;
++
++		// If a normal DOM Ready event fired, decrement, and wait if need be
++		if ( wait !== true && --jQuery.readyWait > 0 ) {
++			return;
++		}
++
++		// If there are functions bound, to execute
++		readyList.resolveWith( document, [ jQuery ] );
++
++		// Trigger any bound ready events
++		if ( jQuery.fn.trigger ) {
++			jQuery( document ).trigger("ready").off("ready");
++		}
++	},
++
++	// See test/unit/core.js for details concerning isFunction.
++	// Since version 1.3, DOM methods and functions like alert
++	// aren't supported. They return false on IE (#2968).
++	isFunction: function( obj ) {
++		return jQuery.type(obj) === "function";
++	},
++
++	isArray: Array.isArray || function( obj ) {
++		return jQuery.type(obj) === "array";
++	},
++
++	isWindow: function( obj ) {
++		return obj != null && obj == obj.window;
++	},
++
++	isNumeric: function( obj ) {
++		return !isNaN( parseFloat(obj) ) && isFinite( obj );
++	},
++
++	type: function( obj ) {
++		if ( obj == null ) {
++			return String( obj );
++		}
++		return typeof obj === "object" || typeof obj === "function" ?
++			class2type[ core_toString.call(obj) ] || "object" :
++			typeof obj;
++	},
++
++	isPlainObject: function( obj ) {
++		// Must be an Object.
++		// Because of IE, we also have to check the presence of the constructor property.
++		// Make sure that DOM nodes and window objects don't pass through, as well
++		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
++			return false;
++		}
++
++		try {
++			// Not own constructor property must be Object
++			if ( obj.constructor &&
++				!core_hasOwn.call(obj, "constructor") &&
++				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
++				return false;
++			}
++		} catch ( e ) {
++			// IE8,9 Will throw exceptions on certain host objects #9897
++			return false;
++		}
++
++		// Own properties are enumerated firstly, so to speed up,
++		// if last one is own, then all properties are own.
++
++		var key;
++		for ( key in obj ) {}
++
++		return key === undefined || core_hasOwn.call( obj, key );
++	},
++
++	isEmptyObject: function( obj ) {
++		var name;
++		for ( name in obj ) {
++			return false;
++		}
++		return true;
++	},
++
++	error: function( msg ) {
++		throw new Error( msg );
++	},
++
++	// data: string of html
++	// context (optional): If specified, the fragment will be created in this context, defaults to document
++	// keepScripts (optional): If true, will include scripts passed in the html string
++	parseHTML: function( data, context, keepScripts ) {
++		if ( !data || typeof data !== "string" ) {
++			return null;
++		}
++		if ( typeof context === "boolean" ) {
++			keepScripts = context;
++			context = false;
++		}
++		context = context || document;
++
++		var parsed = rsingleTag.exec( data ),
++			scripts = !keepScripts && [];
++
++		// Single tag
++		if ( parsed ) {
++			return [ context.createElement( parsed[1] ) ];
++		}
++
++		parsed = jQuery.buildFragment( [ data ], context, scripts );
++		if ( scripts ) {
++			jQuery( scripts ).remove();
++		}
++		return jQuery.merge( [], parsed.childNodes );
++	},
++
++	parseJSON: function( data ) {
++		// Attempt to parse using the native JSON parser first
++		if ( window.JSON && window.JSON.parse ) {
++			return window.JSON.parse( data );
++		}
++
++		if ( data === null ) {
++			return data;
++		}
++
++		if ( typeof data === "string" ) {
++
++			// Make sure leading/trailing whitespace is removed (IE can't handle it)
++			data = jQuery.trim( data );
++
++			if ( data ) {
++				// Make sure the incoming data is actual JSON
++				// Logic borrowed from http://json.org/json2.js
++				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
++					.replace( rvalidtokens, "]" )
++					.replace( rvalidbraces, "")) ) {
++
++					return ( new Function( "return " + data ) )();
++				}
++			}
++		}
++
++		jQuery.error( "Invalid JSON: " + data );
++	},
++
++	// Cross-browser xml parsing
++	parseXML: function( data ) {
++		var xml, tmp;
++		if ( !data || typeof data !== "string" ) {
++			return null;
++		}
++		try {
++			if ( window.DOMParser ) { // Standard
++				tmp = new DOMParser();
++				xml = tmp.parseFromString( data , "text/xml" );
++			} else { // IE
++				xml = new ActiveXObject( "Microsoft.XMLDOM" );
++				xml.async = "false";
++				xml.loadXML( data );
++			}
++		} catch( e ) {
++			xml = undefined;
++		}
++		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
++			jQuery.error( "Invalid XML: " + data );
++		}
++		return xml;
++	},
++
++	noop: function() {},
++
++	// Evaluates a script in a global context
++	// Workarounds based on findings by Jim Driscoll
++	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
++	globalEval: function( data ) {
++		if ( data && jQuery.trim( data ) ) {
++			// We use execScript on Internet Explorer
++			// We use an anonymous function so that context is window
++			// rather than jQuery in Firefox
++			( window.execScript || function( data ) {
++				window[ "eval" ].call( window, data );
++			} )( data );
++		}
++	},
++
++	// Convert dashed to camelCase; used by the css and data modules
++	// Microsoft forgot to hump their vendor prefix (#9572)
++	camelCase: function( string ) {
++		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
++	},
++
++	nodeName: function( elem, name ) {
++		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
++	},
++
++	// args is for internal usage only
++	each: function( obj, callback, args ) {
++		var value,
++			i = 0,
++			length = obj.length,
++			isArray = isArraylike( obj );
++
++		if ( args ) {
++			if ( isArray ) {
++				for ( ; i < length; i++ ) {
++					value = callback.apply( obj[ i ], args );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( i in obj ) {
++					value = callback.apply( obj[ i ], args );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			}
++
++		// A special, fast, case for the most common use of each
++		} else {
++			if ( isArray ) {
++				for ( ; i < length; i++ ) {
++					value = callback.call( obj[ i ], i, obj[ i ] );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( i in obj ) {
++					value = callback.call( obj[ i ], i, obj[ i ] );
++
++					if ( value === false ) {
++						break;
++					}
++				}
++			}
++		}
++
++		return obj;
++	},
++
++	// Use native String.trim function wherever possible
++	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
++		function( text ) {
++			return text == null ?
++				"" :
++				core_trim.call( text );
++		} :
++
++		// Otherwise use our own trimming functionality
++		function( text ) {
++			return text == null ?
++				"" :
++				( text + "" ).replace( rtrim, "" );
++		},
++
++	// results is for internal usage only
++	makeArray: function( arr, results ) {
++		var ret = results || [];
++
++		if ( arr != null ) {
++			if ( isArraylike( Object(arr) ) ) {
++				jQuery.merge( ret,
++					typeof arr === "string" ?
++					[ arr ] : arr
++				);
++			} else {
++				core_push.call( ret, arr );
++			}
++		}
++
++		return ret;
++	},
++
++	inArray: function( elem, arr, i ) {
++		var len;
++
++		if ( arr ) {
++			if ( core_indexOf ) {
++				return core_indexOf.call( arr, elem, i );
++			}
++
++			len = arr.length;
++			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
++
++			for ( ; i < len; i++ ) {
++				// Skip accessing in sparse arrays
++				if ( i in arr && arr[ i ] === elem ) {
++					return i;
++				}
++			}
++		}
++
++		return -1;
++	},
++
++	merge: function( first, second ) {
++		var l = second.length,
++			i = first.length,
++			j = 0;
++
++		if ( typeof l === "number" ) {
++			for ( ; j < l; j++ ) {
++				first[ i++ ] = second[ j ];
++			}
++		} else {
++			while ( second[j] !== undefined ) {
++				first[ i++ ] = second[ j++ ];
++			}
++		}
++
++		first.length = i;
++
++		return first;
++	},
++
++	grep: function( elems, callback, inv ) {
++		var retVal,
++			ret = [],
++			i = 0,
++			length = elems.length;
++		inv = !!inv;
++
++		// Go through the array, only saving the items
++		// that pass the validator function
++		for ( ; i < length; i++ ) {
++			retVal = !!callback( elems[ i ], i );
++			if ( inv !== retVal ) {
++				ret.push( elems[ i ] );
++			}
++		}
++
++		return ret;
++	},
++
++	// arg is for internal usage only
++	map: function( elems, callback, arg ) {
++		var value,
++			i = 0,
++			length = elems.length,
++			isArray = isArraylike( elems ),
++			ret = [];
++
++		// Go through the array, translating each of the items to their
++		if ( isArray ) {
++			for ( ; i < length; i++ ) {
++				value = callback( elems[ i ], i, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++
++		// Go through every key on the object,
++		} else {
++			for ( i in elems ) {
++				value = callback( elems[ i ], i, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++		}
++
++		// Flatten any nested arrays
++		return core_concat.apply( [], ret );
++	},
++
++	// A global GUID counter for objects
++	guid: 1,
++
++	// Bind a function to a context, optionally partially applying any
++	// arguments.
++	proxy: function( fn, context ) {
++		var args, proxy, tmp;
++
++		if ( typeof context === "string" ) {
++			tmp = fn[ context ];
++			context = fn;
++			fn = tmp;
++		}
++
++		// Quick check to determine if target is callable, in the spec
++		// this throws a TypeError, but we will just return undefined.
++		if ( !jQuery.isFunction( fn ) ) {
++			return undefined;
++		}
++
++		// Simulated bind
++		args = core_slice.call( arguments, 2 );
++		proxy = function() {
++			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
++		};
++
++		// Set the guid of unique handler to the same of original handler, so it can be removed
++		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
++
++		return proxy;
++	},
++
++	// Multifunctional method to get and set values of a collection
++	// The value/s can optionally be executed if it's a function
++	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
++		var i = 0,
++			length = elems.length,
++			bulk = key == null;
++
++		// Sets many values
++		if ( jQuery.type( key ) === "object" ) {
++			chainable = true;
++			for ( i in key ) {
++				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
++			}
++
++		// Sets one value
++		} else if ( value !== undefined ) {
++			chainable = true;
++
++			if ( !jQuery.isFunction( value ) ) {
++				raw = true;
++			}
++
++			if ( bulk ) {
++				// Bulk operations run against the entire set
++				if ( raw ) {
++					fn.call( elems, value );
++					fn = null;
++
++				// ...except when executing function values
++				} else {
++					bulk = fn;
++					fn = function( elem, key, value ) {
++						return bulk.call( jQuery( elem ), value );
++					};
++				}
++			}
++
++			if ( fn ) {
++				for ( ; i < length; i++ ) {
++					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
++				}
++			}
++		}
++
++		return chainable ?
++			elems :
++
++			// Gets
++			bulk ?
++				fn.call( elems ) :
++				length ? fn( elems[0], key ) : emptyGet;
++	},
++
++	now: function() {
++		return ( new Date() ).getTime();
++	}
++});
++
++jQuery.ready.promise = function( obj ) {
++	if ( !readyList ) {
++
++		readyList = jQuery.Deferred();
++
++		// Catch cases where $(document).ready() is called after the browser event has already occurred.
++		// we once tried to use readyState "interactive" here, but it caused issues like the one
++		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
++		if ( document.readyState === "complete" ) {
++			// Handle it asynchronously to allow scripts the opportunity to delay ready
++			setTimeout( jQuery.ready );
++
++		// Standards-based browsers support DOMContentLoaded
++		} else if ( document.addEventListener ) {
++			// Use the handy event callback
++			document.addEventListener( "DOMContentLoaded", completed, false );
++
++			// A fallback to window.onload, that will always work
++			window.addEventListener( "load", completed, false );
++
++		// If IE event model is used
++		} else {
++			// Ensure firing before onload, maybe late but safe also for iframes
++			document.attachEvent( "onreadystatechange", completed );
++
++			// A fallback to window.onload, that will always work
++			window.attachEvent( "onload", completed );
++
++			// If IE and not a frame
++			// continually check to see if the document is ready
++			var top = false;
++
++			try {
++				top = window.frameElement == null && document.documentElement;
++			} catch(e) {}
++
++			if ( top && top.doScroll ) {
++				(function doScrollCheck() {
++					if ( !jQuery.isReady ) {
++
++						try {
++							// Use the trick by Diego Perini
++							// http://javascript.nwbox.com/IEContentLoaded/
++							top.doScroll("left");
++						} catch(e) {
++							return setTimeout( doScrollCheck, 50 );
++						}
++
++						// detach all dom ready events
++						detach();
++
++						// and execute any waiting functions
++						jQuery.ready();
++					}
++				})();
++			}
++		}
++	}
++	return readyList.promise( obj );
++};
++
++// Populate the class2type map
++jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
++	class2type[ "[object " + name + "]" ] = name.toLowerCase();
++});
++
++function isArraylike( obj ) {
++	var length = obj.length,
++		type = jQuery.type( obj );
++
++	if ( jQuery.isWindow( obj ) ) {
++		return false;
++	}
++
++	if ( obj.nodeType === 1 && length ) {
++		return true;
++	}
++
++	return type === "array" || type !== "function" &&
++		( length === 0 ||
++		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
++}
++
++// All jQuery objects should point back to these
++rootjQuery = jQuery(document);
++// String to Object options format cache
++var optionsCache = {};
++
++// Convert String-formatted options into Object-formatted ones and store in cache
++function createOptions( options ) {
++	var object = optionsCache[ options ] = {};
++	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
++		object[ flag ] = true;
++	});
++	return object;
++}
++
++/*
++ * Create a callback list using the following parameters:
++ *
++ *	options: an optional list of space-separated options that will change how
++ *			the callback list behaves or a more traditional option object
++ *
++ * By default a callback list will act like an event callback list and can be
++ * "fired" multiple times.
++ *
++ * Possible options:
++ *
++ *	once:			will ensure the callback list can only be fired once (like a Deferred)
++ *
++ *	memory:			will keep track of previous values and will call any callback added
++ *					after the list has been fired right away with the latest "memorized"
++ *					values (like a Deferred)
++ *
++ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
++ *
++ *	stopOnFalse:	interrupt callings when a callback returns false
++ *
++ */
++jQuery.Callbacks = function( options ) {
++
++	// Convert options from String-formatted to Object-formatted if needed
++	// (we check in cache first)
++	options = typeof options === "string" ?
++		( optionsCache[ options ] || createOptions( options ) ) :
++		jQuery.extend( {}, options );
++
++	var // Flag to know if list is currently firing
++		firing,
++		// Last fire value (for non-forgettable lists)
++		memory,
++		// Flag to know if list was already fired
++		fired,
++		// End of the loop when firing
++		firingLength,
++		// Index of currently firing callback (modified by remove if needed)
++		firingIndex,
++		// First callback to fire (used internally by add and fireWith)
++		firingStart,
++		// Actual callback list
++		list = [],
++		// Stack of fire calls for repeatable lists
++		stack = !options.once && [],
++		// Fire callbacks
++		fire = function( data ) {
++			memory = options.memory && data;
++			fired = true;
++			firingIndex = firingStart || 0;
++			firingStart = 0;
++			firingLength = list.length;
++			firing = true;
++			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
++				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
++					memory = false; // To prevent further calls using add
++					break;
++				}
++			}
++			firing = false;
++			if ( list ) {
++				if ( stack ) {
++					if ( stack.length ) {
++						fire( stack.shift() );
++					}
++				} else if ( memory ) {
++					list = [];
++				} else {
++					self.disable();
++				}
++			}
++		},
++		// Actual Callbacks object
++		self = {
++			// Add a callback or a collection of callbacks to the list
++			add: function() {
++				if ( list ) {
++					// First, we save the current length
++					var start = list.length;
++					(function add( args ) {
++						jQuery.each( args, function( _, arg ) {
++							var type = jQuery.type( arg );
++							if ( type === "function" ) {
++								if ( !options.unique || !self.has( arg ) ) {
++									list.push( arg );
++								}
++							} else if ( arg && arg.length && type !== "string" ) {
++								// Inspect recursively
++								add( arg );
++							}
++						});
++					})( arguments );
++					// Do we need to add the callbacks to the
++					// current firing batch?
++					if ( firing ) {
++						firingLength = list.length;
++					// With memory, if we're not firing then
++					// we should call right away
++					} else if ( memory ) {
++						firingStart = start;
++						fire( memory );
++					}
++				}
++				return this;
++			},
++			// Remove a callback from the list
++			remove: function() {
++				if ( list ) {
++					jQuery.each( arguments, function( _, arg ) {
++						var index;
++						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
++							list.splice( index, 1 );
++							// Handle firing indexes
++							if ( firing ) {
++								if ( index <= firingLength ) {
++									firingLength--;
++								}
++								if ( index <= firingIndex ) {
++									firingIndex--;
++								}
++							}
++						}
++					});
++				}
++				return this;
++			},
++			// Check if a given callback is in the list.
++			// If no argument is given, return whether or not list has callbacks attached.
++			has: function( fn ) {
++				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
++			},
++			// Remove all callbacks from the list
++			empty: function() {
++				list = [];
++				return this;
++			},
++			// Have the list do nothing anymore
++			disable: function() {
++				list = stack = memory = undefined;
++				return this;
++			},
++			// Is it disabled?
++			disabled: function() {
++				return !list;
++			},
++			// Lock the list in its current state
++			lock: function() {
++				stack = undefined;
++				if ( !memory ) {
++					self.disable();
++				}
++				return this;
++			},
++			// Is it locked?
++			locked: function() {
++				return !stack;
++			},
++			// Call all callbacks with the given context and arguments
++			fireWith: function( context, args ) {
++				args = args || [];
++				args = [ context, args.slice ? args.slice() : args ];
++				if ( list && ( !fired || stack ) ) {
++					if ( firing ) {
++						stack.push( args );
++					} else {
++						fire( args );
++					}
++				}
++				return this;
++			},
++			// Call all the callbacks with the given arguments
++			fire: function() {
++				self.fireWith( this, arguments );
++				return this;
++			},
++			// To know if the callbacks have already been called at least once
++			fired: function() {
++				return !!fired;
++			}
++		};
++
++	return self;
++};
++jQuery.extend({
++
++	Deferred: function( func ) {
++		var tuples = [
++				// action, add listener, listener list, final state
++				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
++				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
++				[ "notify", "progress", jQuery.Callbacks("memory") ]
++			],
++			state = "pending",
++			promise = {
++				state: function() {
++					return state;
++				},
++				always: function() {
++					deferred.done( arguments ).fail( arguments );
++					return this;
++				},
++				then: function( /* fnDone, fnFail, fnProgress */ ) {
++					var fns = arguments;
++					return jQuery.Deferred(function( newDefer ) {
++						jQuery.each( tuples, function( i, tuple ) {
++							var action = tuple[ 0 ],
++								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
++							// deferred[ done | fail | progress ] for forwarding actions to newDefer
++							deferred[ tuple[1] ](function() {
++								var returned = fn && fn.apply( this, arguments );
++								if ( returned && jQuery.isFunction( returned.promise ) ) {
++									returned.promise()
++										.done( newDefer.resolve )
++										.fail( newDefer.reject )
++										.progress( newDefer.notify );
++								} else {
++									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
++								}
++							});
++						});
++						fns = null;
++					}).promise();
++				},
++				// Get a promise for this deferred
++				// If obj is provided, the promise aspect is added to the object
++				promise: function( obj ) {
++					return obj != null ? jQuery.extend( obj, promise ) : promise;
++				}
++			},
++			deferred = {};
++
++		// Keep pipe for back-compat
++		promise.pipe = promise.then;
++
++		// Add list-specific methods
++		jQuery.each( tuples, function( i, tuple ) {
++			var list = tuple[ 2 ],
++				stateString = tuple[ 3 ];
++
++			// promise[ done | fail | progress ] = list.add
++			promise[ tuple[1] ] = list.add;
++
++			// Handle state
++			if ( stateString ) {
++				list.add(function() {
++					// state = [ resolved | rejected ]
++					state = stateString;
++
++				// [ reject_list | resolve_list ].disable; progress_list.lock
++				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
++			}
++
++			// deferred[ resolve | reject | notify ]
++			deferred[ tuple[0] ] = function() {
++				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
++				return this;
++			};
++			deferred[ tuple[0] + "With" ] = list.fireWith;
++		});
++
++		// Make the deferred a promise
++		promise.promise( deferred );
++
++		// Call given func if any
++		if ( func ) {
++			func.call( deferred, deferred );
++		}
++
++		// All done!
++		return deferred;
++	},
++
++	// Deferred helper
++	when: function( subordinate /* , ..., subordinateN */ ) {
++		var i = 0,
++			resolveValues = core_slice.call( arguments ),
++			length = resolveValues.length,
++
++			// the count of uncompleted subordinates
++			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
++
++			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
++			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
++
++			// Update function for both resolve and progress values
++			updateFunc = function( i, contexts, values ) {
++				return function( value ) {
++					contexts[ i ] = this;
++					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
++					if( values === progressValues ) {
++						deferred.notifyWith( contexts, values );
++					} else if ( !( --remaining ) ) {
++						deferred.resolveWith( contexts, values );
++					}
++				};
++			},
++
++			progressValues, progressContexts, resolveContexts;
++
++		// add listeners to Deferred subordinates; treat others as resolved
++		if ( length > 1 ) {
++			progressValues = new Array( length );
++			progressContexts = new Array( length );
++			resolveContexts = new Array( length );
++			for ( ; i < length; i++ ) {
++				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
++					resolveValues[ i ].promise()
++						.done( updateFunc( i, resolveContexts, resolveValues ) )
++						.fail( deferred.reject )
++						.progress( updateFunc( i, progressContexts, progressValues ) );
++				} else {
++					--remaining;
++				}
++			}
++		}
++
++		// if we're not waiting on anything, resolve the master
++		if ( !remaining ) {
++			deferred.resolveWith( resolveContexts, resolveValues );
++		}
++
++		return deferred.promise();
++	}
++});
++jQuery.support = (function() {
++
++	var support, all, a,
++		input, select, fragment,
++		opt, eventName, isSupported, i,
++		div = document.createElement("div");
++
++	// Setup
++	div.setAttribute( "className", "t" );
++	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
++
++	// Support tests won't run in some limited or non-browser environments
++	all = div.getElementsByTagName("*");
++	a = div.getElementsByTagName("a")[ 0 ];
++	if ( !all || !a || !all.length ) {
++		return {};
++	}
++
++	// First batch of tests
++	select = document.createElement("select");
++	opt = select.appendChild( document.createElement("option") );
++	input = div.getElementsByTagName("input")[ 0 ];
++
++	a.style.cssText = "top:1px;float:left;opacity:.5";
++	support = {
++		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
++		getSetAttribute: div.className !== "t",
++
++		// IE strips leading whitespace when .innerHTML is used
++		leadingWhitespace: div.firstChild.nodeType === 3,
++
++		// Make sure that tbody elements aren't automatically inserted
++		// IE will insert them into empty tables
++		tbody: !div.getElementsByTagName("tbody").length,
++
++		// Make sure that link elements get serialized correctly by innerHTML
++		// This requires a wrapper element in IE
++		htmlSerialize: !!div.getElementsByTagName("link").length,
++
++		// Get the style information from getAttribute
++		// (IE uses .cssText instead)
++		style: /top/.test( a.getAttribute("style") ),
++
++		// Make sure that URLs aren't manipulated
++		// (IE normalizes it by default)
++		hrefNormalized: a.getAttribute("href") === "/a",
++
++		// Make sure that element opacity exists
++		// (IE uses filter instead)
++		// Use a regex to work around a WebKit issue. See #5145
++		opacity: /^0.5/.test( a.style.opacity ),
++
++		// Verify style float existence
++		// (IE uses styleFloat instead of cssFloat)
++		cssFloat: !!a.style.cssFloat,
++
++		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
++		checkOn: !!input.value,
++
++		// Make sure that a selected-by-default option has a working selected property.
++		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
++		optSelected: opt.selected,
++
++		// Tests for enctype support on a form (#6743)
++		enctype: !!document.createElement("form").enctype,
++
++		// Makes sure cloning an html5 element does not cause problems
++		// Where outerHTML is undefined, this still works
++		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
++
++		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
++		boxModel: document.compatMode === "CSS1Compat",
++
++		// Will be defined later
++		deleteExpando: true,
++		noCloneEvent: true,
++		inlineBlockNeedsLayout: false,
++		shrinkWrapBlocks: false,
++		reliableMarginRight: true,
++		boxSizingReliable: true,
++		pixelPosition: false
++	};
++
++	// Make sure checked status is properly cloned
++	input.checked = true;
++	support.noCloneChecked = input.cloneNode( true ).checked;
++
++	// Make sure that the options inside disabled selects aren't marked as disabled
++	// (WebKit marks them as disabled)
++	select.disabled = true;
++	support.optDisabled = !opt.disabled;
++
++	// Support: IE<9
++	try {
++		delete div.test;
++	} catch( e ) {
++		support.deleteExpando = false;
++	}
++
++	// Check if we can trust getAttribute("value")
++	input = document.createElement("input");
++	input.setAttribute( "value", "" );
++	support.input = input.getAttribute( "value" ) === "";
++
++	// Check if an input maintains its value after becoming a radio
++	input.value = "t";
++	input.setAttribute( "type", "radio" );
++	support.radioValue = input.value === "t";
++
++	// #11217 - WebKit loses check when the name is after the checked attribute
++	input.setAttribute( "checked", "t" );
++	input.setAttribute( "name", "t" );
++
++	fragment = document.createDocumentFragment();
++	fragment.appendChild( input );
++
++	// Check if a disconnected checkbox will retain its checked
++	// value of true after appended to the DOM (IE6/7)
++	support.appendChecked = input.checked;
++
++	// WebKit doesn't clone checked state correctly in fragments
++	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
++
++	// Support: IE<9
++	// Opera does not clone events (and typeof div.attachEvent === undefined).
++	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
++	if ( div.attachEvent ) {
++		div.attachEvent( "onclick", function() {
++			support.noCloneEvent = false;
++		});
++
++		div.cloneNode( true ).click();
++	}
++
++	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
++	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
++	for ( i in { submit: true, change: true, focusin: true }) {
++		div.setAttribute( eventName = "on" + i, "t" );
++
++		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
++	}
++
++	div.style.backgroundClip = "content-box";
++	div.cloneNode( true ).style.backgroundClip = "";
++	support.clearCloneStyle = div.style.backgroundClip === "content-box";
++
++	// Run tests that need a body at doc ready
++	jQuery(function() {
++		var container, marginDiv, tds,
++			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
++			body = document.getElementsByTagName("body")[0];
++
++		if ( !body ) {
++			// Return for frameset docs that don't have a body
++			return;
++		}
++
++		container = document.createElement("div");
++		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
++
++		body.appendChild( container ).appendChild( div );
++
++		// Support: IE8
++		// Check if table cells still have offsetWidth/Height when they are set
++		// to display:none and there are still other visible table cells in a
++		// table row; if so, offsetWidth/Height are not reliable for use when
++		// determining if an element has been hidden directly using
++		// display:none (it is still safe to use offsets if a parent element is
++		// hidden; don safety goggles and see bug #4512 for more information).
++		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
++		tds = div.getElementsByTagName("td");
++		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
++		isSupported = ( tds[ 0 ].offsetHeight === 0 );
++
++		tds[ 0 ].style.display = "";
++		tds[ 1 ].style.display = "none";
++
++		// Support: IE8
++		// Check if empty table cells still have offsetWidth/Height
++		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
++
++		// Check box-sizing and margin behavior
++		div.innerHTML = "";
++		div.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%;";
++		support.boxSizing = ( div.offsetWidth === 4 );
++		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
++
++		// Use window.getComputedStyle because jsdom on node.js will break without it.
++		if ( window.getComputedStyle ) {
++			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
++			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
++
++			// Check if div with explicit width and no margin-right incorrectly
++			// gets computed margin-right based on width of container. (#3333)
++			// Fails in WebKit before Feb 2011 nightlies
++			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++			marginDiv = div.appendChild( document.createElement("div") );
++			marginDiv.style.cssText = div.style.cssText = divReset;
++			marginDiv.style.marginRight = marginDiv.style.width = "0";
++			div.style.width = "1px";
++
++			support.reliableMarginRight =
++				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
++		}
++
++		if ( typeof div.style.zoom !== core_strundefined ) {
++			// Support: IE<8
++			// Check if natively block-level elements act like inline-block
++			// elements when setting their display to 'inline' and giving
++			// them layout
++			div.innerHTML = "";
++			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
++			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
++
++			// Support: IE6
++			// Check if elements with layout shrink-wrap their children
++			div.style.display = "block";
++			div.innerHTML = "<div></div>";
++			div.firstChild.style.width = "5px";
++			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
++
++			if ( support.inlineBlockNeedsLayout ) {
++				// Prevent IE 6 from affecting layout for positioned elements #11048
++				// Prevent IE from shrinking the body in IE 7 mode #12869
++				// Support: IE<8
++				body.style.zoom = 1;
++			}
++		}
++
++		body.removeChild( container );
++
++		// Null elements to avoid leaks in IE
++		container = div = tds = marginDiv = null;
++	});
++
++	// Null elements to avoid leaks in IE
++	all = select = fragment = opt = a = input = null;
++
++	return support;
++})();
++
++var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
++	rmultiDash = /([A-Z])/g;
++
++function internalData( elem, name, data, pvt /* Internal Use Only */ ){
++	if ( !jQuery.acceptData( elem ) ) {
++		return;
++	}
++
++	var thisCache, ret,
++		internalKey = jQuery.expando,
++		getByName = typeof name === "string",
++
++		// We have to handle DOM nodes and JS objects differently because IE6-7
++		// can't GC object references properly across the DOM-JS boundary
++		isNode = elem.nodeType,
++
++		// Only DOM nodes need the global jQuery cache; JS object data is
++		// attached directly to the object so GC can occur automatically
++		cache = isNode ? jQuery.cache : elem,
++
++		// Only defining an ID for JS objects if its cache already exists allows
++		// the code to shortcut on the same path as a DOM node with no cache
++		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
++
++	// Avoid doing any more work than we need to when trying to get data on an
++	// object that has no data at all
++	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
++		return;
++	}
++
++	if ( !id ) {
++		// Only DOM nodes need a new unique ID for each element since their data
++		// ends up in the global cache
++		if ( isNode ) {
++			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
++		} else {
++			id = internalKey;
++		}
++	}
++
++	if ( !cache[ id ] ) {
++		cache[ id ] = {};
++
++		// Avoids exposing jQuery metadata on plain JS objects when the object
++		// is serialized using JSON.stringify
++		if ( !isNode ) {
++			cache[ id ].toJSON = jQuery.noop;
++		}
++	}
++
++	// An object can be passed to jQuery.data instead of a key/value pair; this gets
++	// shallow copied over onto the existing cache
++	if ( typeof name === "object" || typeof name === "function" ) {
++		if ( pvt ) {
++			cache[ id ] = jQuery.extend( cache[ id ], name );
++		} else {
++			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
++		}
++	}
++
++	thisCache = cache[ id ];
++
++	// jQuery data() is stored in a separate object inside the object's internal data
++	// cache in order to avoid key collisions between internal data and user-defined
++	// data.
++	if ( !pvt ) {
++		if ( !thisCache.data ) {
++			thisCache.data = {};
++		}
++
++		thisCache = thisCache.data;
++	}
++
++	if ( data !== undefined ) {
++		thisCache[ jQuery.camelCase( name ) ] = data;
++	}
++
++	// Check for both converted-to-camel and non-converted data property names
++	// If a data property was specified
++	if ( getByName ) {
++
++		// First Try to find as-is property data
++		ret = thisCache[ name ];
++
++		// Test for null|undefined property data
++		if ( ret == null ) {
++
++			// Try to find the camelCased property
++			ret = thisCache[ jQuery.camelCase( name ) ];
++		}
++	} else {
++		ret = thisCache;
++	}
++
++	return ret;
++}
++
++function internalRemoveData( elem, name, pvt ) {
++	if ( !jQuery.acceptData( elem ) ) {
++		return;
++	}
++
++	var i, l, thisCache,
++		isNode = elem.nodeType,
++
++		// See jQuery.data for more information
++		cache = isNode ? jQuery.cache : elem,
++		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
++
++	// If there is already no cache entry for this object, there is no
++	// purpose in continuing
++	if ( !cache[ id ] ) {
++		return;
++	}
++
++	if ( name ) {
++
++		thisCache = pvt ? cache[ id ] : cache[ id ].data;
++
++		if ( thisCache ) {
++
++			// Support array or space separated string names for data keys
++			if ( !jQuery.isArray( name ) ) {
++
++				// try the string as a key before any manipulation
++				if ( name in thisCache ) {
++					name = [ name ];
++				} else {
++
++					// split the camel cased version by spaces unless a key with the spaces exists
++					name = jQuery.camelCase( name );
++					if ( name in thisCache ) {
++						name = [ name ];
++					} else {
++						name = name.split(" ");
++					}
++				}
++			} else {
++				// If "name" is an array of keys...
++				// When data is initially created, via ("key", "val") signature,
++				// keys will be converted to camelCase.
++				// Since there is no way to tell _how_ a key was added, remove
++				// both plain key and camelCase key. #12786
++				// This will only penalize the array argument path.
++				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
++			}
++
++			for ( i = 0, l = name.length; i < l; i++ ) {
++				delete thisCache[ name[i] ];
++			}
++
++			// If there is no data left in the cache, we want to continue
++			// and let the cache object itself get destroyed
++			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
++				return;
++			}
++		}
++	}
++
++	// See jQuery.data for more information
++	if ( !pvt ) {
++		delete cache[ id ].data;
++
++		// Don't destroy the parent cache unless the internal data object
++		// had been the only thing left in it
++		if ( !isEmptyDataObject( cache[ id ] ) ) {
++			return;
++		}
++	}
++
++	// Destroy the cache
++	if ( isNode ) {
++		jQuery.cleanData( [ elem ], true );
++
++	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
++	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
++		delete cache[ id ];
++
++	// When all else fails, null
++	} else {
++		cache[ id ] = null;
++	}
++}
++
++jQuery.extend({
++	cache: {},
++
++	// Unique for each copy of jQuery on the page
++	// Non-digits removed to match rinlinejQuery
++	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
++
++	// The following elements throw uncatchable exceptions if you
++	// attempt to add expando properties to them.
++	noData: {
++		"embed": true,
++		// Ban all objects except for Flash (which handle expandos)
++		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
++		"applet": true
++	},
++
++	hasData: function( elem ) {
++		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
++		return !!elem && !isEmptyDataObject( elem );
++	},
++
++	data: function( elem, name, data ) {
++		return internalData( elem, name, data );
++	},
++
++	removeData: function( elem, name ) {
++		return internalRemoveData( elem, name );
++	},
++
++	// For internal use only.
++	_data: function( elem, name, data ) {
++		return internalData( elem, name, data, true );
++	},
++
++	_removeData: function( elem, name ) {
++		return internalRemoveData( elem, name, true );
++	},
++
++	// A method for determining if a DOM node can handle the data expando
++	acceptData: function( elem ) {
++		// Do not set data on non-element because it will not be cleared (#8335).
++		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
++			return false;
++		}
++
++		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
++
++		// nodes accept data unless otherwise specified; rejection can be conditional
++		return !noData || noData !== true && elem.getAttribute("classid") === noData;
++	}
++});
++
++jQuery.fn.extend({
++	data: function( key, value ) {
++		var attrs, name,
++			elem = this[0],
++			i = 0,
++			data = null;
++
++		// Gets all values
++		if ( key === undefined ) {
++			if ( this.length ) {
++				data = jQuery.data( elem );
++
++				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
++					attrs = elem.attributes;
++					for ( ; i < attrs.length; i++ ) {
++						name = attrs[i].name;
++
++						if ( !name.indexOf( "data-" ) ) {
++							name = jQuery.camelCase( name.slice(5) );
++
++							dataAttr( elem, name, data[ name ] );
++						}
++					}
++					jQuery._data( elem, "parsedAttrs", true );
++				}
++			}
++
++			return data;
++		}
++
++		// Sets multiple values
++		if ( typeof key === "object" ) {
++			return this.each(function() {
++				jQuery.data( this, key );
++			});
++		}
++
++		return jQuery.access( this, function( value ) {
++
++			if ( value === undefined ) {
++				// Try to fetch any internally stored data first
++				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
++			}
++
++			this.each(function() {
++				jQuery.data( this, key, value );
++			});
++		}, null, value, arguments.length > 1, null, true );
++	},
++
++	removeData: function( key ) {
++		return this.each(function() {
++			jQuery.removeData( this, key );
++		});
++	}
++});
++
++function dataAttr( elem, key, data ) {
++	// If nothing was found internally, try to fetch any
++	// data from the HTML5 data-* attribute
++	if ( data === undefined && elem.nodeType === 1 ) {
++
++		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
++
++		data = elem.getAttribute( name );
++
++		if ( typeof data === "string" ) {
++			try {
++				data = data === "true" ? true :
++					data === "false" ? false :
++					data === "null" ? null :
++					// Only convert to a number if it doesn't change the string
++					+data + "" === data ? +data :
++					rbrace.test( data ) ? jQuery.parseJSON( data ) :
++						data;
++			} catch( e ) {}
++
++			// Make sure we set the data so it isn't changed later
++			jQuery.data( elem, key, data );
++
++		} else {
++			data = undefined;
++		}
++	}
++
++	return data;
++}
++
++// checks a cache object for emptiness
++function isEmptyDataObject( obj ) {
++	var name;
++	for ( name in obj ) {
++
++		// if the public data object is empty, the private is still empty
++		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
++			continue;
++		}
++		if ( name !== "toJSON" ) {
++			return false;
++		}
++	}
++
++	return true;
++}
++jQuery.extend({
++	queue: function( elem, type, data ) {
++		var queue;
++
++		if ( elem ) {
++			type = ( type || "fx" ) + "queue";
++			queue = jQuery._data( elem, type );
++
++			// Speed up dequeue by getting out quickly if this is just a lookup
++			if ( data ) {
++				if ( !queue || jQuery.isArray(data) ) {
++					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
++				} else {
++					queue.push( data );
++				}
++			}
++			return queue || [];
++		}
++	},
++
++	dequeue: function( elem, type ) {
++		type = type || "fx";
++
++		var queue = jQuery.queue( elem, type ),
++			startLength = queue.length,
++			fn = queue.shift(),
++			hooks = jQuery._queueHooks( elem, type ),
++			next = function() {
++				jQuery.dequeue( elem, type );
++			};
++
++		// If the fx queue is dequeued, always remove the progress sentinel
++		if ( fn === "inprogress" ) {
++			fn = queue.shift();
++			startLength--;
++		}
++
++		hooks.cur = fn;
++		if ( fn ) {
++
++			// Add a progress sentinel to prevent the fx queue from being
++			// automatically dequeued
++			if ( type === "fx" ) {
++				queue.unshift( "inprogress" );
++			}
++
++			// clear up the last queue stop function
++			delete hooks.stop;
++			fn.call( elem, next, hooks );
++		}
++
++		if ( !startLength && hooks ) {
++			hooks.empty.fire();
++		}
++	},
++
++	// not intended for public consumption - generates a queueHooks object, or returns the current one
++	_queueHooks: function( elem, type ) {
++		var key = type + "queueHooks";
++		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
++			empty: jQuery.Callbacks("once memory").add(function() {
++				jQuery._removeData( elem, type + "queue" );
++				jQuery._removeData( elem, key );
++			})
++		});
++	}
++});
++
++jQuery.fn.extend({
++	queue: function( type, data ) {
++		var setter = 2;
++
++		if ( typeof type !== "string" ) {
++			data = type;
++			type = "fx";
++			setter--;
++		}
++
++		if ( arguments.length < setter ) {
++			return jQuery.queue( this[0], type );
++		}
++
++		return data === undefined ?
++			this :
++			this.each(function() {
++				var queue = jQuery.queue( this, type, data );
++
++				// ensure a hooks for this queue
++				jQuery._queueHooks( this, type );
++
++				if ( type === "fx" && queue[0] !== "inprogress" ) {
++					jQuery.dequeue( this, type );
++				}
++			});
++	},
++	dequeue: function( type ) {
++		return this.each(function() {
++			jQuery.dequeue( this, type );
++		});
++	},
++	// Based off of the plugin by Clint Helfers, with permission.
++	// http://blindsignals.com/index.php/2009/07/jquery-delay/
++	delay: function( time, type ) {
++		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
++		type = type || "fx";
++
++		return this.queue( type, function( next, hooks ) {
++			var timeout = setTimeout( next, time );
++			hooks.stop = function() {
++				clearTimeout( timeout );
++			};
++		});
++	},
++	clearQueue: function( type ) {
++		return this.queue( type || "fx", [] );
++	},
++	// Get a promise resolved when queues of a certain type
++	// are emptied (fx is the type by default)
++	promise: function( type, obj ) {
++		var tmp,
++			count = 1,
++			defer = jQuery.Deferred(),
++			elements = this,
++			i = this.length,
++			resolve = function() {
++				if ( !( --count ) ) {
++					defer.resolveWith( elements, [ elements ] );
++				}
++			};
++
++		if ( typeof type !== "string" ) {
++			obj = type;
++			type = undefined;
++		}
++		type = type || "fx";
++
++		while( i-- ) {
++			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
++			if ( tmp && tmp.empty ) {
++				count++;
++				tmp.empty.add( resolve );
++			}
++		}
++		resolve();
++		return defer.promise( obj );
++	}
++});
++var nodeHook, boolHook,
++	rclass = /[\t\r\n]/g,
++	rreturn = /\r/g,
++	rfocusable = /^(?:input|select|textarea|button|object)$/i,
++	rclickable = /^(?:a|area)$/i,
++	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
++	ruseDefault = /^(?:checked|selected)$/i,
++	getSetAttribute = jQuery.support.getSetAttribute,
++	getSetInput = jQuery.support.input;
++
++jQuery.fn.extend({
++	attr: function( name, value ) {
++		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
++	},
++
++	removeAttr: function( name ) {
++		return this.each(function() {
++			jQuery.removeAttr( this, name );
++		});
++	},
++
++	prop: function( name, value ) {
++		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
++	},
++
++	removeProp: function( name ) {
++		name = jQuery.propFix[ name ] || name;
++		return this.each(function() {
++			// try/catch handles cases where IE balks (such as removing a property on window)
++			try {
++				this[ name ] = undefined;
++				delete this[ name ];
++			} catch( e ) {}
++		});
++	},
++
++	addClass: function( value ) {
++		var classes, elem, cur, clazz, j,
++			i = 0,
++			len = this.length,
++			proceed = typeof value === "string" && value;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).addClass( value.call( this, j, this.className ) );
++			});
++		}
++
++		if ( proceed ) {
++			// The disjunction here is for better compressibility (see removeClass)
++			classes = ( value || "" ).match( core_rnotwhite ) || [];
++
++			for ( ; i < len; i++ ) {
++				elem = this[ i ];
++				cur = elem.nodeType === 1 && ( elem.className ?
++					( " " + elem.className + " " ).replace( rclass, " " ) :
++					" "
++				);
++
++				if ( cur ) {
++					j = 0;
++					while ( (clazz = classes[j++]) ) {
++						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
++							cur += clazz + " ";
++						}
++					}
++					elem.className = jQuery.trim( cur );
++
++				}
++			}
++		}
++
++		return this;
++	},
++
++	removeClass: function( value ) {
++		var classes, elem, cur, clazz, j,
++			i = 0,
++			len = this.length,
++			proceed = arguments.length === 0 || typeof value === "string" && value;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).removeClass( value.call( this, j, this.className ) );
++			});
++		}
++		if ( proceed ) {
++			classes = ( value || "" ).match( core_rnotwhite ) || [];
++
++			for ( ; i < len; i++ ) {
++				elem = this[ i ];
++				// This expression is here for better compressibility (see addClass)
++				cur = elem.nodeType === 1 && ( elem.className ?
++					( " " + elem.className + " " ).replace( rclass, " " ) :
++					""
++				);
++
++				if ( cur ) {
++					j = 0;
++					while ( (clazz = classes[j++]) ) {
++						// Remove *all* instances
++						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
++							cur = cur.replace( " " + clazz + " ", " " );
++						}
++					}
++					elem.className = value ? jQuery.trim( cur ) : "";
++				}
++			}
++		}
++
++		return this;
++	},
++
++	toggleClass: function( value, stateVal ) {
++		var type = typeof value,
++			isBool = typeof stateVal === "boolean";
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( i ) {
++				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
++			});
++		}
++
++		return this.each(function() {
++			if ( type === "string" ) {
++				// toggle individual class names
++				var className,
++					i = 0,
++					self = jQuery( this ),
++					state = stateVal,
++					classNames = value.match( core_rnotwhite ) || [];
++
++				while ( (className = classNames[ i++ ]) ) {
++					// check each className given, space separated list
++					state = isBool ? state : !self.hasClass( className );
++					self[ state ? "addClass" : "removeClass" ]( className );
++				}
++
++			// Toggle whole class name
++			} else if ( type === core_strundefined || type === "boolean" ) {
++				if ( this.className ) {
++					// store className if set
++					jQuery._data( this, "__className__", this.className );
++				}
++
++				// If the element has a class name or if we're passed "false",
++				// then remove the whole classname (if there was one, the above saved it).
++				// Otherwise bring back whatever was previously saved (if anything),
++				// falling back to the empty string if nothing was stored.
++				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
++			}
++		});
++	},
++
++	hasClass: function( selector ) {
++		var className = " " + selector + " ",
++			i = 0,
++			l = this.length;
++		for ( ; i < l; i++ ) {
++			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
++				return true;
++			}
++		}
++
++		return false;
++	},
++
++	val: function( value ) {
++		var ret, hooks, isFunction,
++			elem = this[0];
++
++		if ( !arguments.length ) {
++			if ( elem ) {
++				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
++
++				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
++					return ret;
++				}
++
++				ret = elem.value;
++
++				return typeof ret === "string" ?
++					// handle most common string cases
++					ret.replace(rreturn, "") :
++					// handle cases where value is null/undef or number
++					ret == null ? "" : ret;
++			}
++
++			return;
++		}
++
++		isFunction = jQuery.isFunction( value );
++
++		return this.each(function( i ) {
++			var val,
++				self = jQuery(this);
++
++			if ( this.nodeType !== 1 ) {
++				return;
++			}
++
++			if ( isFunction ) {
++				val = value.call( this, i, self.val() );
++			} else {
++				val = value;
++			}
++
++			// Treat null/undefined as ""; convert numbers to string
++			if ( val == null ) {
++				val = "";
++			} else if ( typeof val === "number" ) {
++				val += "";
++			} else if ( jQuery.isArray( val ) ) {
++				val = jQuery.map(val, function ( value ) {
++					return value == null ? "" : value + "";
++				});
++			}
++
++			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
++
++			// If set returns undefined, fall back to normal setting
++			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
++				this.value = val;
++			}
++		});
++	}
++});
++
++jQuery.extend({
++	valHooks: {
++		option: {
++			get: function( elem ) {
++				// attributes.value is undefined in Blackberry 4.7 but
++				// uses .value. See #6932
++				var val = elem.attributes.value;
++				return !val || val.specified ? elem.value : elem.text;
++			}
++		},
++		select: {
++			get: function( elem ) {
++				var value, option,
++					options = elem.options,
++					index = elem.selectedIndex,
++					one = elem.type === "select-one" || index < 0,
++					values = one ? null : [],
++					max = one ? index + 1 : options.length,
++					i = index < 0 ?
++						max :
++						one ? index : 0;
++
++				// Loop through all the selected options
++				for ( ; i < max; i++ ) {
++					option = options[ i ];
++
++					// oldIE doesn't update selected after form reset (#2551)
++					if ( ( option.selected || i === index ) &&
++							// Don't return options that are disabled or in a disabled optgroup
++							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
++							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
++
++						// Get the specific value for the option
++						value = jQuery( option ).val();
++
++						// We don't need an array for one selects
++						if ( one ) {
++							return value;
++						}
++
++						// Multi-Selects return an array
++						values.push( value );
++					}
++				}
++
++				return values;
++			},
++
++			set: function( elem, value ) {
++				var values = jQuery.makeArray( value );
++
++				jQuery(elem).find("option").each(function() {
++					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
++				});
++
++				if ( !values.length ) {
++					elem.selectedIndex = -1;
++				}
++				return values;
++			}
++		}
++	},
++
++	attr: function( elem, name, value ) {
++		var hooks, notxml, ret,
++			nType = elem.nodeType;
++
++		// don't get/set attributes on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return;
++		}
++
++		// Fallback to prop when attributes are not supported
++		if ( typeof elem.getAttribute === core_strundefined ) {
++			return jQuery.prop( elem, name, value );
++		}
++
++		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		// All attributes are lowercase
++		// Grab necessary hook if one is defined
++		if ( notxml ) {
++			name = name.toLowerCase();
++			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
++		}
++
++		if ( value !== undefined ) {
++
++			if ( value === null ) {
++				jQuery.removeAttr( elem, name );
++
++			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				elem.setAttribute( name, value + "" );
++				return value;
++			}
++
++		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
++			return ret;
++
++		} else {
++
++			// In IE9+, Flash objects don't have .getAttribute (#12945)
++			// Support: IE9+
++			if ( typeof elem.getAttribute !== core_strundefined ) {
++				ret =  elem.getAttribute( name );
++			}
++
++			// Non-existent attributes return null, we normalize to undefined
++			return ret == null ?
++				undefined :
++				ret;
++		}
++	},
++
++	removeAttr: function( elem, value ) {
++		var name, propName,
++			i = 0,
++			attrNames = value && value.match( core_rnotwhite );
++
++		if ( attrNames && elem.nodeType === 1 ) {
++			while ( (name = attrNames[i++]) ) {
++				propName = jQuery.propFix[ name ] || name;
++
++				// Boolean attributes get special treatment (#10870)
++				if ( rboolean.test( name ) ) {
++					// Set corresponding property to false for boolean attributes
++					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
++					if ( !getSetAttribute && ruseDefault.test( name ) ) {
++						elem[ jQuery.camelCase( "default-" + name ) ] =
++							elem[ propName ] = false;
++					} else {
++						elem[ propName ] = false;
++					}
++
++				// See #9699 for explanation of this approach (setting first, then removal)
++				} else {
++					jQuery.attr( elem, name, "" );
++				}
++
++				elem.removeAttribute( getSetAttribute ? name : propName );
++			}
++		}
++	},
++
++	attrHooks: {
++		type: {
++			set: function( elem, value ) {
++				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
++					// Setting the type on a radio button after the value resets the value in IE6-9
++					// Reset value to default in case type is set after value during creation
++					var val = elem.value;
++					elem.setAttribute( "type", value );
++					if ( val ) {
++						elem.value = val;
++					}
++					return value;
++				}
++			}
++		}
++	},
++
++	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( elem, name, value ) {
++		var ret, hooks, notxml,
++			nType = elem.nodeType;
++
++		// don't get/set properties on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return;
++		}
++
++		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		if ( notxml ) {
++			// Fix name and attach hooks
++			name = jQuery.propFix[ name ] || name;
++			hooks = jQuery.propHooks[ name ];
++		}
++
++		if ( value !== undefined ) {
++			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				return ( elem[ name ] = value );
++			}
++
++		} else {
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
++				return ret;
++
++			} else {
++				return elem[ name ];
++			}
++		}
++	},
++
++	propHooks: {
++		tabIndex: {
++			get: function( elem ) {
++				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
++				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
++				var attributeNode = elem.getAttributeNode("tabindex");
++
++				return attributeNode && attributeNode.specified ?
++					parseInt( attributeNode.value, 10 ) :
++					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
++						0 :
++						undefined;
++			}
++		}
++	}
++});
++
++// Hook for boolean attributes
++boolHook = {
++	get: function( elem, name ) {
++		var
++			// Use .prop to determine if this attribute is understood as boolean
++			prop = jQuery.prop( elem, name ),
++
++			// Fetch it accordingly
++			attr = typeof prop === "boolean" && elem.getAttribute( name ),
++			detail = typeof prop === "boolean" ?
++
++				getSetInput && getSetAttribute ?
++					attr != null :
++					// oldIE fabricates an empty string for missing boolean attributes
++					// and conflates checked/selected into attroperties
++					ruseDefault.test( name ) ?
++						elem[ jQuery.camelCase( "default-" + name ) ] :
++						!!attr :
++
++				// fetch an attribute node for properties not recognized as boolean
++				elem.getAttributeNode( name );
++
++		return detail && detail.value !== false ?
++			name.toLowerCase() :
++			undefined;
++	},
++	set: function( elem, value, name ) {
++		if ( value === false ) {
++			// Remove boolean attributes when set to false
++			jQuery.removeAttr( elem, name );
++		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
++			// IE<8 needs the *property* name
++			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
++
++		// Use defaultChecked and defaultSelected for oldIE
++		} else {
++			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
++		}
++
++		return name;
++	}
++};
++
++// fix oldIE value attroperty
++if ( !getSetInput || !getSetAttribute ) {
++	jQuery.attrHooks.value = {
++		get: function( elem, name ) {
++			var ret = elem.getAttributeNode( name );
++			return jQuery.nodeName( elem, "input" ) ?
++
++				// Ignore the value *property* by using defaultValue
++				elem.defaultValue :
++
++				ret && ret.specified ? ret.value : undefined;
++		},
++		set: function( elem, value, name ) {
++			if ( jQuery.nodeName( elem, "input" ) ) {
++				// Does not return so that setAttribute is also used
++				elem.defaultValue = value;
++			} else {
++				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
++				return nodeHook && nodeHook.set( elem, value, name );
++			}
++		}
++	};
++}
++
++// IE6/7 do not support getting/setting some attributes with get/setAttribute
++if ( !getSetAttribute ) {
++
++	// Use this for any attribute in IE6/7
++	// This fixes almost every IE6/7 issue
++	nodeHook = jQuery.valHooks.button = {
++		get: function( elem, name ) {
++			var ret = elem.getAttributeNode( name );
++			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
++				ret.value :
++				undefined;
++		},
++		set: function( elem, value, name ) {
++			// Set the existing or create a new attribute node
++			var ret = elem.getAttributeNode( name );
++			if ( !ret ) {
++				elem.setAttributeNode(
++					(ret = elem.ownerDocument.createAttribute( name ))
++				);
++			}
++
++			ret.value = value += "";
++
++			// Break association with cloned elements by also using setAttribute (#9646)
++			return name === "value" || value === elem.getAttribute( name ) ?
++				value :
++				undefined;
++		}
++	};
++
++	// Set contenteditable to false on removals(#10429)
++	// Setting to empty string throws an error as an invalid value
++	jQuery.attrHooks.contenteditable = {
++		get: nodeHook.get,
++		set: function( elem, value, name ) {
++			nodeHook.set( elem, value === "" ? false : value, name );
++		}
++	};
++
++	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
++	// This is for removals
++	jQuery.each([ "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			set: function( elem, value ) {
++				if ( value === "" ) {
++					elem.setAttribute( name, "auto" );
++					return value;
++				}
++			}
++		});
++	});
++}
++
++
++// Some attributes require a special call on IE
++// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
++if ( !jQuery.support.hrefNormalized ) {
++	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			get: function( elem ) {
++				var ret = elem.getAttribute( name, 2 );
++				return ret == null ? undefined : ret;
++			}
++		});
++	});
++
++	// href/src property should get the full normalized URL (#10299/#12915)
++	jQuery.each([ "href", "src" ], function( i, name ) {
++		jQuery.propHooks[ name ] = {
++			get: function( elem ) {
++				return elem.getAttribute( name, 4 );
++			}
++		};
++	});
++}
++
++if ( !jQuery.support.style ) {
++	jQuery.attrHooks.style = {
++		get: function( elem ) {
++			// Return undefined in the case of empty string
++			// Note: IE uppercases css property names, but if we were to .toLowerCase()
++			// .cssText, that would destroy case senstitivity in URL's, like in "background"
++			return elem.style.cssText || undefined;
++		},
++		set: function( elem, value ) {
++			return ( elem.style.cssText = value + "" );
++		}
++	};
++}
++
++// Safari mis-reports the default selected property of an option
++// Accessing the parent's selectedIndex property fixes it
++if ( !jQuery.support.optSelected ) {
++	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
++		get: function( elem ) {
++			var parent = elem.parentNode;
++
++			if ( parent ) {
++				parent.selectedIndex;
++
++				// Make sure that it also works with optgroups, see #5701
++				if ( parent.parentNode ) {
++					parent.parentNode.selectedIndex;
++				}
++			}
++			return null;
++		}
++	});
++}
++
++// IE6/7 call enctype encoding
++if ( !jQuery.support.enctype ) {
++	jQuery.propFix.enctype = "encoding";
++}
++
++// Radios and checkboxes getter/setter
++if ( !jQuery.support.checkOn ) {
++	jQuery.each([ "radio", "checkbox" ], function() {
++		jQuery.valHooks[ this ] = {
++			get: function( elem ) {
++				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
++				return elem.getAttribute("value") === null ? "on" : elem.value;
++			}
++		};
++	});
++}
++jQuery.each([ "radio", "checkbox" ], function() {
++	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
++		set: function( elem, value ) {
++			if ( jQuery.isArray( value ) ) {
++				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
++			}
++		}
++	});
++});
++var rformElems = /^(?:input|select|textarea)$/i,
++	rkeyEvent = /^key/,
++	rmouseEvent = /^(?:mouse|contextmenu)|click/,
++	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
++	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
++
++function returnTrue() {
++	return true;
++}
++
++function returnFalse() {
++	return false;
++}
++
++/*
++ * Helper functions for managing events -- not part of the public interface.
++ * Props to Dean Edwards' addEvent library for many of the ideas.
++ */
++jQuery.event = {
++
++	global: {},
++
++	add: function( elem, types, handler, data, selector ) {
++		var tmp, events, t, handleObjIn,
++			special, eventHandle, handleObj,
++			handlers, type, namespaces, origType,
++			elemData = jQuery._data( elem );
++
++		// Don't attach events to noData or text/comment nodes (but allow plain objects)
++		if ( !elemData ) {
++			return;
++		}
++
++		// Caller can pass in an object of custom data in lieu of the handler
++		if ( handler.handler ) {
++			handleObjIn = handler;
++			handler = handleObjIn.handler;
++			selector = handleObjIn.selector;
++		}
++
++		// Make sure that the handler has a unique ID, used to find/remove it later
++		if ( !handler.guid ) {
++			handler.guid = jQuery.guid++;
++		}
++
++		// Init the element's event structure and main handler, if this is the first
++		if ( !(events = elemData.events) ) {
++			events = elemData.events = {};
++		}
++		if ( !(eventHandle = elemData.handle) ) {
++			eventHandle = elemData.handle = function( e ) {
++				// Discard the second event of a jQuery.event.trigger() and
++				// when an event is called after a page has unloaded
++				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
++					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
++					undefined;
++			};
++			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
++			eventHandle.elem = elem;
++		}
++
++		// Handle multiple events separated by a space
++		// jQuery(...).bind("mouseover mouseout", fn);
++		types = ( types || "" ).match( core_rnotwhite ) || [""];
++		t = types.length;
++		while ( t-- ) {
++			tmp = rtypenamespace.exec( types[t] ) || [];
++			type = origType = tmp[1];
++			namespaces = ( tmp[2] || "" ).split( "." ).sort();
++
++			// If event changes its type, use the special event handlers for the changed type
++			special = jQuery.event.special[ type ] || {};
++
++			// If selector defined, determine special event api type, otherwise given type
++			type = ( selector ? special.delegateType : special.bindType ) || type;
++
++			// Update special based on newly reset type
++			special = jQuery.event.special[ type ] || {};
++
++			// handleObj is passed to all event handlers
++			handleObj = jQuery.extend({
++				type: type,
++				origType: origType,
++				data: data,
++				handler: handler,
++				guid: handler.guid,
++				selector: selector,
++				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
++				namespace: namespaces.join(".")
++			}, handleObjIn );
++
++			// Init the event handler queue if we're the first
++			if ( !(handlers = events[ type ]) ) {
++				handlers = events[ type ] = [];
++				handlers.delegateCount = 0;
++
++				// Only use addEventListener/attachEvent if the special events handler returns false
++				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
++					// Bind the global event handler to the element
++					if ( elem.addEventListener ) {
++						elem.addEventListener( type, eventHandle, false );
++
++					} else if ( elem.attachEvent ) {
++						elem.attachEvent( "on" + type, eventHandle );
++					}
++				}
++			}
++
++			if ( special.add ) {
++				special.add.call( elem, handleObj );
++
++				if ( !handleObj.handler.guid ) {
++					handleObj.handler.guid = handler.guid;
++				}
++			}
++
++			// Add to the element's handler list, delegates in front
++			if ( selector ) {
++				handlers.splice( handlers.delegateCount++, 0, handleObj );
++			} else {
++				handlers.push( handleObj );
++			}
++
++			// Keep track of which events have ever been used, for event optimization
++			jQuery.event.global[ type ] = true;
++		}
++
++		// Nullify elem to prevent memory leaks in IE
++		elem = null;
++	},
++
++	// Detach an event or set of events from an element
++	remove: function( elem, types, handler, selector, mappedTypes ) {
++		var j, handleObj, tmp,
++			origCount, t, events,
++			special, handlers, type,
++			namespaces, origType,
++			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
++
++		if ( !elemData || !(events = elemData.events) ) {
++			return;
++		}
++
++		// Once for each type.namespace in types; type may be omitted
++		types = ( types || "" ).match( core_rnotwhite ) || [""];
++		t = types.length;
++		while ( t-- ) {
++			tmp = rtypenamespace.exec( types[t] ) || [];
++			type = origType = tmp[1];
++			namespaces = ( tmp[2] || "" ).split( "." ).sort();
++
++			// Unbind all events (on this namespace, if provided) for the element
++			if ( !type ) {
++				for ( type in events ) {
++					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
++				}
++				continue;
++			}
++
++			special = jQuery.event.special[ type ] || {};
++			type = ( selector ? special.delegateType : special.bindType ) || type;
++			handlers = events[ type ] || [];
++			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
++
++			// Remove matching events
++			origCount = j = handlers.length;
++			while ( j-- ) {
++				handleObj = handlers[ j ];
++
++				if ( ( mappedTypes || origType === handleObj.origType ) &&
++					( !handler || handler.guid === handleObj.guid ) &&
++					( !tmp || tmp.test( handleObj.namespace ) ) &&
++					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
++					handlers.splice( j, 1 );
++
++					if ( handleObj.selector ) {
++						handlers.delegateCount--;
++					}
++					if ( special.remove ) {
++						special.remove.call( elem, handleObj );
++					}
++				}
++			}
++
++			// Remove generic event handler if we removed something and no more handlers exist
++			// (avoids potential for endless recursion during removal of special event handlers)
++			if ( origCount && !handlers.length ) {
++				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
++					jQuery.removeEvent( elem, type, elemData.handle );
++				}
++
++				delete events[ type ];
++			}
++		}
++
++		// Remove the expando if it's no longer used
++		if ( jQuery.isEmptyObject( events ) ) {
++			delete elemData.handle;
++
++			// removeData also checks for emptiness and clears the expando if empty
++			// so use it instead of delete
++			jQuery._removeData( elem, "events" );
++		}
++	},
++
++	trigger: function( event, data, elem, onlyHandlers ) {
++		var handle, ontype, cur,
++			bubbleType, special, tmp, i,
++			eventPath = [ elem || document ],
++			type = core_hasOwn.call( event, "type" ) ? event.type : event,
++			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
++
++		cur = tmp = elem = elem || document;
++
++		// Don't do events on text and comment nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		// focus/blur morphs to focusin/out; ensure we're not firing them right now
++		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
++			return;
++		}
++
++		if ( type.indexOf(".") >= 0 ) {
++			// Namespaced trigger; create a regexp to match event type in handle()
++			namespaces = type.split(".");
++			type = namespaces.shift();
++			namespaces.sort();
++		}
++		ontype = type.indexOf(":") < 0 && "on" + type;
++
++		// Caller can pass in a jQuery.Event object, Object, or just an event type string
++		event = event[ jQuery.expando ] ?
++			event :
++			new jQuery.Event( type, typeof event === "object" && event );
++
++		event.isTrigger = true;
++		event.namespace = namespaces.join(".");
++		event.namespace_re = event.namespace ?
++			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
++			null;
++
++		// Clean up the event in case it is being reused
++		event.result = undefined;
++		if ( !event.target ) {
++			event.target = elem;
++		}
++
++		// Clone any incoming data and prepend the event, creating the handler arg list
++		data = data == null ?
++			[ event ] :
++			jQuery.makeArray( data, [ event ] );
++
++		// Allow special events to draw outside the lines
++		special = jQuery.event.special[ type ] || {};
++		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
++			return;
++		}
++
++		// Determine event propagation path in advance, per W3C events spec (#9951)
++		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
++		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
++
++			bubbleType = special.delegateType || type;
++			if ( !rfocusMorph.test( bubbleType + type ) ) {
++				cur = cur.parentNode;
++			}
++			for ( ; cur; cur = cur.parentNode ) {
++				eventPath.push( cur );
++				tmp = cur;
++			}
++
++			// Only add window if we got to document (e.g., not plain obj or detached DOM)
++			if ( tmp === (elem.ownerDocument || document) ) {
++				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
++			}
++		}
++
++		// Fire handlers on the event path
++		i = 0;
++		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
++
++			event.type = i > 1 ?
++				bubbleType :
++				special.bindType || type;
++
++			// jQuery handler
++			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
++			if ( handle ) {
++				handle.apply( cur, data );
++			}
++
++			// Native handler
++			handle = ontype && cur[ ontype ];
++			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
++				event.preventDefault();
++			}
++		}
++		event.type = type;
++
++		// If nobody prevented the default action, do it now
++		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
++
++			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
++				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
++
++				// Call a native DOM method on the target with the same name name as the event.
++				// Can't use an .isFunction() check here because IE6/7 fails that test.
++				// Don't do default actions on window, that's where global variables be (#6170)
++				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
++
++					// Don't re-trigger an onFOO event when we call its FOO() method
++					tmp = elem[ ontype ];
++
++					if ( tmp ) {
++						elem[ ontype ] = null;
++					}
++
++					// Prevent re-triggering of the same event, since we already bubbled it above
++					jQuery.event.triggered = type;
++					try {
++						elem[ type ]();
++					} catch ( e ) {
++						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
++						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
++					}
++					jQuery.event.triggered = undefined;
++
++					if ( tmp ) {
++						elem[ ontype ] = tmp;
++					}
++				}
++			}
++		}
++
++		return event.result;
++	},
++
++	dispatch: function( event ) {
++
++		// Make a writable jQuery.Event from the native event object
++		event = jQuery.event.fix( event );
++
++		var i, ret, handleObj, matched, j,
++			handlerQueue = [],
++			args = core_slice.call( arguments ),
++			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
++			special = jQuery.event.special[ event.type ] || {};
++
++		// Use the fix-ed jQuery.Event rather than the (read-only) native event
++		args[0] = event;
++		event.delegateTarget = this;
++
++		// Call the preDispatch hook for the mapped type, and let it bail if desired
++		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
++			return;
++		}
++
++		// Determine handlers
++		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
++
++		// Run delegates first; they may want to stop propagation beneath us
++		i = 0;
++		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
++			event.currentTarget = matched.elem;
++
++			j = 0;
++			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
++
++				// Triggered event must either 1) have no namespace, or
++				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
++				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
++
++					event.handleObj = handleObj;
++					event.data = handleObj.data;
++
++					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
++							.apply( matched.elem, args );
++
++					if ( ret !== undefined ) {
++						if ( (event.result = ret) === false ) {
++							event.preventDefault();
++							event.stopPropagation();
++						}
++					}
++				}
++			}
++		}
++
++		// Call the postDispatch hook for the mapped type
++		if ( special.postDispatch ) {
++			special.postDispatch.call( this, event );
++		}
++
++		return event.result;
++	},
++
++	handlers: function( event, handlers ) {
++		var sel, handleObj, matches, i,
++			handlerQueue = [],
++			delegateCount = handlers.delegateCount,
++			cur = event.target;
++
++		// Find delegate handlers
++		// Black-hole SVG <use> instance trees (#13180)
++		// Avoid non-left-click bubbling in Firefox (#3861)
++		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
++
++			for ( ; cur != this; cur = cur.parentNode || this ) {
++
++				// Don't check non-elements (#13208)
++				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
++				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
++					matches = [];
++					for ( i = 0; i < delegateCount; i++ ) {
++						handleObj = handlers[ i ];
++
++						// Don't conflict with Object.prototype properties (#13203)
++						sel = handleObj.selector + " ";
++
++						if ( matches[ sel ] === undefined ) {
++							matches[ sel ] = handleObj.needsContext ?
++								jQuery( sel, this ).index( cur ) >= 0 :
++								jQuery.find( sel, this, null, [ cur ] ).length;
++						}
++						if ( matches[ sel ] ) {
++							matches.push( handleObj );
++						}
++					}
++					if ( matches.length ) {
++						handlerQueue.push({ elem: cur, handlers: matches });
++					}
++				}
++			}
++		}
++
++		// Add the remaining (directly-bound) handlers
++		if ( delegateCount < handlers.length ) {
++			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
++		}
++
++		return handlerQueue;
++	},
++
++	fix: function( event ) {
++		if ( event[ jQuery.expando ] ) {
++			return event;
++		}
++
++		// Create a writable copy of the event object and normalize some properties
++		var i, prop, copy,
++			type = event.type,
++			originalEvent = event,
++			fixHook = this.fixHooks[ type ];
++
++		if ( !fixHook ) {
++			this.fixHooks[ type ] = fixHook =
++				rmouseEvent.test( type ) ? this.mouseHooks :
++				rkeyEvent.test( type ) ? this.keyHooks :
++				{};
++		}
++		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
++
++		event = new jQuery.Event( originalEvent );
++
++		i = copy.length;
++		while ( i-- ) {
++			prop = copy[ i ];
++			event[ prop ] = originalEvent[ prop ];
++		}
++
++		// Support: IE<9
++		// Fix target property (#1925)
++		if ( !event.target ) {
++			event.target = originalEvent.srcElement || document;
++		}
++
++		// Support: Chrome 23+, Safari?
++		// Target should not be a text node (#504, #13143)
++		if ( event.target.nodeType === 3 ) {
++			event.target = event.target.parentNode;
++		}
++
++		// Support: IE<9
++		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
++		event.metaKey = !!event.metaKey;
++
++		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
++	},
++
++	// Includes some event props shared by KeyEvent and MouseEvent
++	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
++
++	fixHooks: {},
++
++	keyHooks: {
++		props: "char charCode key keyCode".split(" "),
++		filter: function( event, original ) {
++
++			// Add which for key events
++			if ( event.which == null ) {
++				event.which = original.charCode != null ? original.charCode : original.keyCode;
++			}
++
++			return event;
++		}
++	},
++
++	mouseHooks: {
++		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
++		filter: function( event, original ) {
++			var body, eventDoc, doc,
++				button = original.button,
++				fromElement = original.fromElement;
++
++			// Calculate pageX/Y if missing and clientX/Y available
++			if ( event.pageX == null && original.clientX != null ) {
++				eventDoc = event.target.ownerDocument || document;
++				doc = eventDoc.documentElement;
++				body = eventDoc.body;
++
++				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
++				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
++			}
++
++			// Add relatedTarget, if necessary
++			if ( !event.relatedTarget && fromElement ) {
++				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
++			}
++
++			// Add which for click: 1 === left; 2 === middle; 3 === right
++			// Note: button is not normalized, so don't use it
++			if ( !event.which && button !== undefined ) {
++				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
++			}
++
++			return event;
++		}
++	},
++
++	special: {
++		load: {
++			// Prevent triggered image.load events from bubbling to window.load
++			noBubble: true
++		},
++		click: {
++			// For checkbox, fire native event so checked state will be right
++			trigger: function() {
++				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
++					this.click();
++					return false;
++				}
++			}
++		},
++		focus: {
++			// Fire native event if possible so blur/focus sequence is correct
++			trigger: function() {
++				if ( this !== document.activeElement && this.focus ) {
++					try {
++						this.focus();
++						return false;
++					} catch ( e ) {
++						// Support: IE<9
++						// If we error on focus to hidden element (#1486, #12518),
++						// let .trigger() run the handlers
++					}
++				}
++			},
++			delegateType: "focusin"
++		},
++		blur: {
++			trigger: function() {
++				if ( this === document.activeElement && this.blur ) {
++					this.blur();
++					return false;
++				}
++			},
++			delegateType: "focusout"
++		},
++
++		beforeunload: {
++			postDispatch: function( event ) {
++
++				// Even when returnValue equals to undefined Firefox will still show alert
++				if ( event.result !== undefined ) {
++					event.originalEvent.returnValue = event.result;
++				}
++			}
++		}
++	},
++
++	simulate: function( type, elem, event, bubble ) {
++		// Piggyback on a donor event to simulate a different one.
++		// Fake originalEvent to avoid donor's stopPropagation, but if the
++		// simulated event prevents default then we do the same on the donor.
++		var e = jQuery.extend(
++			new jQuery.Event(),
++			event,
++			{ type: type,
++				isSimulated: true,
++				originalEvent: {}
++			}
++		);
++		if ( bubble ) {
++			jQuery.event.trigger( e, null, elem );
++		} else {
++			jQuery.event.dispatch.call( elem, e );
++		}
++		if ( e.isDefaultPrevented() ) {
++			event.preventDefault();
++		}
++	}
++};
++
++jQuery.removeEvent = document.removeEventListener ?
++	function( elem, type, handle ) {
++		if ( elem.removeEventListener ) {
++			elem.removeEventListener( type, handle, false );
++		}
++	} :
++	function( elem, type, handle ) {
++		var name = "on" + type;
++
++		if ( elem.detachEvent ) {
++
++			// #8545, #7054, preventing memory leaks for custom events in IE6-8
++			// detachEvent needed property on element, by name of that event, to properly expose it to GC
++			if ( typeof elem[ name ] === core_strundefined ) {
++				elem[ name ] = null;
++			}
++
++			elem.detachEvent( name, handle );
++		}
++	};
++
++jQuery.Event = function( src, props ) {
++	// Allow instantiation without the 'new' keyword
++	if ( !(this instanceof jQuery.Event) ) {
++		return new jQuery.Event( src, props );
++	}
++
++	// Event object
++	if ( src && src.type ) {
++		this.originalEvent = src;
++		this.type = src.type;
++
++		// Events bubbling up the document may have been marked as prevented
++		// by a handler lower down the tree; reflect the correct value.
++		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
++			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
++
++	// Event type
++	} else {
++		this.type = src;
++	}
++
++	// Put explicitly provided properties onto the event object
++	if ( props ) {
++		jQuery.extend( this, props );
++	}
++
++	// Create a timestamp if incoming event doesn't have one
++	this.timeStamp = src && src.timeStamp || jQuery.now();
++
++	// Mark it as fixed
++	this[ jQuery.expando ] = true;
++};
++
++// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
++// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
++jQuery.Event.prototype = {
++	isDefaultPrevented: returnFalse,
++	isPropagationStopped: returnFalse,
++	isImmediatePropagationStopped: returnFalse,
++
++	preventDefault: function() {
++		var e = this.originalEvent;
++
++		this.isDefaultPrevented = returnTrue;
++		if ( !e ) {
++			return;
++		}
++
++		// If preventDefault exists, run it on the original event
++		if ( e.preventDefault ) {
++			e.preventDefault();
++
++		// Support: IE
++		// Otherwise set the returnValue property of the original event to false
++		} else {
++			e.returnValue = false;
++		}
++	},
++	stopPropagation: function() {
++		var e = this.originalEvent;
++
++		this.isPropagationStopped = returnTrue;
++		if ( !e ) {
++			return;
++		}
++		// If stopPropagation exists, run it on the original event
++		if ( e.stopPropagation ) {
++			e.stopPropagation();
++		}
++
++		// Support: IE
++		// Set the cancelBubble property of the original event to true
++		e.cancelBubble = true;
++	},
++	stopImmediatePropagation: function() {
++		this.isImmediatePropagationStopped = returnTrue;
++		this.stopPropagation();
++	}
++};
++
++// Create mouseenter/leave events using mouseover/out and event-time checks
++jQuery.each({
++	mouseenter: "mouseover",
++	mouseleave: "mouseout"
++}, function( orig, fix ) {
++	jQuery.event.special[ orig ] = {
++		delegateType: fix,
++		bindType: fix,
++
++		handle: function( event ) {
++			var ret,
++				target = this,
++				related = event.relatedTarget,
++				handleObj = event.handleObj;
++
++			// For mousenter/leave call the handler if related is outside the target.
++			// NB: No relatedTarget if the mouse left/entered the browser window
++			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
++				event.type = handleObj.origType;
++				ret = handleObj.handler.apply( this, arguments );
++				event.type = fix;
++			}
++			return ret;
++		}
++	};
++});
++
++// IE submit delegation
++if ( !jQuery.support.submitBubbles ) {
++
++	jQuery.event.special.submit = {
++		setup: function() {
++			// Only need this for delegated form submit events
++			if ( jQuery.nodeName( this, "form" ) ) {
++				return false;
++			}
++
++			// Lazy-add a submit handler when a descendant form may potentially be submitted
++			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
++				// Node name check avoids a VML-related crash in IE (#9807)
++				var elem = e.target,
++					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
++				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
++					jQuery.event.add( form, "submit._submit", function( event ) {
++						event._submit_bubble = true;
++					});
++					jQuery._data( form, "submitBubbles", true );
++				}
++			});
++			// return undefined since we don't need an event listener
++		},
++
++		postDispatch: function( event ) {
++			// If form was submitted by the user, bubble the event up the tree
++			if ( event._submit_bubble ) {
++				delete event._submit_bubble;
++				if ( this.parentNode && !event.isTrigger ) {
++					jQuery.event.simulate( "submit", this.parentNode, event, true );
++				}
++			}
++		},
++
++		teardown: function() {
++			// Only need this for delegated form submit events
++			if ( jQuery.nodeName( this, "form" ) ) {
++				return false;
++			}
++
++			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
++			jQuery.event.remove( this, "._submit" );
++		}
++	};
++}
++
++// IE change delegation and checkbox/radio fix
++if ( !jQuery.support.changeBubbles ) {
++
++	jQuery.event.special.change = {
++
++		setup: function() {
++
++			if ( rformElems.test( this.nodeName ) ) {
++				// IE doesn't fire change on a check/radio until blur; trigger it on click
++				// after a propertychange. Eat the blur-change in special.change.handle.
++				// This still fires onchange a second time for check/radio after blur.
++				if ( this.type === "checkbox" || this.type === "radio" ) {
++					jQuery.event.add( this, "propertychange._change", function( event ) {
++						if ( event.originalEvent.propertyName === "checked" ) {
++							this._just_changed = true;
++						}
++					});
++					jQuery.event.add( this, "click._change", function( event ) {
++						if ( this._just_changed && !event.isTrigger ) {
++							this._just_changed = false;
++						}
++						// Allow triggered, simulated change events (#11500)
++						jQuery.event.simulate( "change", this, event, true );
++					});
++				}
++				return false;
++			}
++			// Delegated event; lazy-add a change handler on descendant inputs
++			jQuery.event.add( this, "beforeactivate._change", function( e ) {
++				var elem = e.target;
++
++				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
++					jQuery.event.add( elem, "change._change", function( event ) {
++						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
++							jQuery.event.simulate( "change", this.parentNode, event, true );
++						}
++					});
++					jQuery._data( elem, "changeBubbles", true );
++				}
++			});
++		},
++
++		handle: function( event ) {
++			var elem = event.target;
++
++			// Swallow native change events from checkbox/radio, we already triggered them above
++			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
++				return event.handleObj.handler.apply( this, arguments );
++			}
++		},
++
++		teardown: function() {
++			jQuery.event.remove( this, "._change" );
++
++			return !rformElems.test( this.nodeName );
++		}
++	};
++}
++
++// Create "bubbling" focus and blur events
++if ( !jQuery.support.focusinBubbles ) {
++	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
++
++		// Attach a single capturing handler while someone wants focusin/focusout
++		var attaches = 0,
++			handler = function( event ) {
++				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
++			};
++
++		jQuery.event.special[ fix ] = {
++			setup: function() {
++				if ( attaches++ === 0 ) {
++					document.addEventListener( orig, handler, true );
++				}
++			},
++			teardown: function() {
++				if ( --attaches === 0 ) {
++					document.removeEventListener( orig, handler, true );
++				}
++			}
++		};
++	});
++}
++
++jQuery.fn.extend({
++
++	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
++		var type, origFn;
++
++		// Types can be a map of types/handlers
++		if ( typeof types === "object" ) {
++			// ( types-Object, selector, data )
++			if ( typeof selector !== "string" ) {
++				// ( types-Object, data )
++				data = data || selector;
++				selector = undefined;
++			}
++			for ( type in types ) {
++				this.on( type, selector, data, types[ type ], one );
++			}
++			return this;
++		}
++
++		if ( data == null && fn == null ) {
++			// ( types, fn )
++			fn = selector;
++			data = selector = undefined;
++		} else if ( fn == null ) {
++			if ( typeof selector === "string" ) {
++				// ( types, selector, fn )
++				fn = data;
++				data = undefined;
++			} else {
++				// ( types, data, fn )
++				fn = data;
++				data = selector;
++				selector = undefined;
++			}
++		}
++		if ( fn === false ) {
++			fn = returnFalse;
++		} else if ( !fn ) {
++			return this;
++		}
++
++		if ( one === 1 ) {
++			origFn = fn;
++			fn = function( event ) {
++				// Can use an empty set, since event contains the info
++				jQuery().off( event );
++				return origFn.apply( this, arguments );
++			};
++			// Use same guid so caller can remove using origFn
++			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
++		}
++		return this.each( function() {
++			jQuery.event.add( this, types, fn, data, selector );
++		});
++	},
++	one: function( types, selector, data, fn ) {
++		return this.on( types, selector, data, fn, 1 );
++	},
++	off: function( types, selector, fn ) {
++		var handleObj, type;
++		if ( types && types.preventDefault && types.handleObj ) {
++			// ( event )  dispatched jQuery.Event
++			handleObj = types.handleObj;
++			jQuery( types.delegateTarget ).off(
++				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
++				handleObj.selector,
++				handleObj.handler
++			);
++			return this;
++		}
++		if ( typeof types === "object" ) {
++			// ( types-object [, selector] )
++			for ( type in types ) {
++				this.off( type, selector, types[ type ] );
++			}
++			return this;
++		}
++		if ( selector === false || typeof selector === "function" ) {
++			// ( types [, fn] )
++			fn = selector;
++			selector = undefined;
++		}
++		if ( fn === false ) {
++			fn = returnFalse;
++		}
++		return this.each(function() {
++			jQuery.event.remove( this, types, fn, selector );
++		});
++	},
++
++	bind: function( types, data, fn ) {
++		return this.on( types, null, data, fn );
++	},
++	unbind: function( types, fn ) {
++		return this.off( types, null, fn );
++	},
++
++	delegate: function( selector, types, data, fn ) {
++		return this.on( types, selector, data, fn );
++	},
++	undelegate: function( selector, types, fn ) {
++		// ( namespace ) or ( selector, types [, fn] )
++		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
++	},
++
++	trigger: function( type, data ) {
++		return this.each(function() {
++			jQuery.event.trigger( type, data, this );
++		});
++	},
++	triggerHandler: function( type, data ) {
++		var elem = this[0];
++		if ( elem ) {
++			return jQuery.event.trigger( type, data, elem, true );
++		}
++	}
++});
++/*!
++ * Sizzle CSS Selector Engine
++ * Copyright 2012 jQuery Foundation and other contributors
++ * Released under the MIT license
++ * http://sizzlejs.com/
++ */
++(function( window, undefined ) {
++
++var i,
++	cachedruns,
++	Expr,
++	getText,
++	isXML,
++	compile,
++	hasDuplicate,
++	outermostContext,
++
++	// Local document vars
++	setDocument,
++	document,
++	docElem,
++	documentIsXML,
++	rbuggyQSA,
++	rbuggyMatches,
++	matches,
++	contains,
++	sortOrder,
++
++	// Instance-specific data
++	expando = "sizzle" + -(new Date()),
++	preferredDoc = window.document,
++	support = {},
++	dirruns = 0,
++	done = 0,
++	classCache = createCache(),
++	tokenCache = createCache(),
++	compilerCache = createCache(),
++
++	// General-purpose constants
++	strundefined = typeof undefined,
++	MAX_NEGATIVE = 1 << 31,
++
++	// Array methods
++	arr = [],
++	pop = arr.pop,
++	push = arr.push,
++	slice = arr.slice,
++	// Use a stripped-down indexOf if we can't use a native one
++	indexOf = arr.indexOf || function( elem ) {
++		var i = 0,
++			len = this.length;
++		for ( ; i < len; i++ ) {
++			if ( this[i] === elem ) {
++				return i;
++			}
++		}
++		return -1;
++	},
++
++
++	// Regular expressions
++
++	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
++	whitespace = "[\\x20\\t\\r\\n\\f]",
++	// http://www.w3.org/TR/css3-syntax/#characters
++	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
++
++	// Loosely modeled on CSS identifier characters
++	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
++	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
++	identifier = characterEncoding.replace( "w", "w#" ),
++
++	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
++	operators = "([*^$|!~]?=)",
++	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
++		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
++
++	// Prefer arguments quoted,
++	//   then not containing pseudos/brackets,
++	//   then attribute selectors/non-parenthetical expressions,
++	//   then anything else
++	// These preferences are here to reduce the number of selectors
++	//   needing tokenize in the PSEUDO preFilter
++	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
++
++	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
++	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
++
++	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
++	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
++	rpseudo = new RegExp( pseudos ),
++	ridentifier = new RegExp( "^" + identifier + "$" ),
++
++	matchExpr = {
++		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
++		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
++		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
++		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
++		"ATTR": new RegExp( "^" + attributes ),
++		"PSEUDO": new RegExp( "^" + pseudos ),
++		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
++			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
++			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
++		// For use in libraries implementing .is()
++		// We use this for POS matching in `select`
++		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
++			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
++	},
++
++	rsibling = /[\x20\t\r\n\f]*[+~]/,
++
++	rnative = /^[^{]+\{\s*\[native code/,
++
++	// Easily-parseable/retrievable ID or TAG or CLASS selectors
++	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
++
++	rinputs = /^(?:input|select|textarea|button)$/i,
++	rheader = /^h\d$/i,
++
++	rescape = /'|\\/g,
++	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
++
++	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
++	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
++	funescape = function( _, escaped ) {
++		var high = "0x" + escaped - 0x10000;
++		// NaN means non-codepoint
++		return high !== high ?
++			escaped :
++			// BMP codepoint
++			high < 0 ?
++				String.fromCharCode( high + 0x10000 ) :
++				// Supplemental Plane codepoint (surrogate pair)
++				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
++	};
++
++// Use a stripped-down slice if we can't use a native one
++try {
++	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
++} catch ( e ) {
++	slice = function( i ) {
++		var elem,
++			results = [];
++		while ( (elem = this[i++]) ) {
++			results.push( elem );
++		}
++		return results;
++	};
++}
++
++/**
++ * For feature detection
++ * @param {Function} fn The function to test for native support
++ */
++function isNative( fn ) {
++	return rnative.test( fn + "" );
++}
++
++/**
++ * Create key-value caches of limited size
++ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
++ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
++ *	deleting the oldest entry
++ */
++function createCache() {
++	var cache,
++		keys = [];
++
++	return (cache = function( key, value ) {
++		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
++		if ( keys.push( key += " " ) > Expr.cacheLength ) {
++			// Only keep the most recent entries
++			delete cache[ keys.shift() ];
++		}
++		return (cache[ key ] = value);
++	});
++}
++
++/**
++ * Mark a function for special use by Sizzle
++ * @param {Function} fn The function to mark
++ */
++function markFunction( fn ) {
++	fn[ expando ] = true;
++	return fn;
++}
++
++/**
++ * Support testing using an element
++ * @param {Function} fn Passed the created div and expects a boolean result
++ */
++function assert( fn ) {
++	var div = document.createElement("div");
++
++	try {
++		return fn( div );
++	} catch (e) {
++		return false;
++	} finally {
++		// release memory in IE
++		div = null;
++	}
++}
++
++function Sizzle( selector, context, results, seed ) {
++	var match, elem, m, nodeType,
++		// QSA vars
++		i, groups, old, nid, newContext, newSelector;
++
++	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
++		setDocument( context );
++	}
++
++	context = context || document;
++	results = results || [];
++
++	if ( !selector || typeof selector !== "string" ) {
++		return results;
++	}
++
++	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
++		return [];
++	}
++
++	if ( !documentIsXML && !seed ) {
++
++		// Shortcuts
++		if ( (match = rquickExpr.exec( selector )) ) {
++			// Speed-up: Sizzle("#ID")
++			if ( (m = match[1]) ) {
++				if ( nodeType === 9 ) {
++					elem = context.getElementById( m );
++					// Check parentNode to catch when Blackberry 4.6 returns
++					// nodes that are no longer in the document #6963
++					if ( elem && elem.parentNode ) {
++						// Handle the case where IE, Opera, and Webkit return items
++						// by name instead of ID
++						if ( elem.id === m ) {
++							results.push( elem );
++							return results;
++						}
++					} else {
++						return results;
++					}
++				} else {
++					// Context is not a document
++					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
++						contains( context, elem ) && elem.id === m ) {
++						results.push( elem );
++						return results;
++					}
++				}
++
++			// Speed-up: Sizzle("TAG")
++			} else if ( match[2] ) {
++				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
++				return results;
++
++			// Speed-up: Sizzle(".CLASS")
++			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
++				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
++				return results;
++			}
++		}
++
++		// QSA path
++		if ( support.qsa && !rbuggyQSA.test(selector) ) {
++			old = true;
++			nid = expando;
++			newContext = context;
++			newSelector = nodeType === 9 && selector;
++
++			// qSA works strangely on Element-rooted queries
++			// We can work around this by specifying an extra ID on the root
++			// and working up from there (Thanks to Andrew Dupont for the technique)
++			// IE 8 doesn't work on object elements
++			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
++				groups = tokenize( selector );
++
++				if ( (old = context.getAttribute("id")) ) {
++					nid = old.replace( rescape, "\\$&" );
++				} else {
++					context.setAttribute( "id", nid );
++				}
++				nid = "[id='" + nid + "'] ";
++
++				i = groups.length;
++				while ( i-- ) {
++					groups[i] = nid + toSelector( groups[i] );
++				}
++				newContext = rsibling.test( selector ) && context.parentNode || context;
++				newSelector = groups.join(",");
++			}
++
++			if ( newSelector ) {
++				try {
++					push.apply( results, slice.call( newContext.querySelectorAll(
++						newSelector
++					), 0 ) );
++					return results;
++				} catch(qsaError) {
++				} finally {
++					if ( !old ) {
++						context.removeAttribute("id");
++					}
++				}
++			}
++		}
++	}
++
++	// All others
++	return select( selector.replace( rtrim, "$1" ), context, results, seed );
++}
++
++/**
++ * Detect xml
++ * @param {Element|Object} elem An element or a document
++ */
++isXML = Sizzle.isXML = function( elem ) {
++	// documentElement is verified for cases where it doesn't yet exist
++	// (such as loading iframes in IE - #4833)
++	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
++	return documentElement ? documentElement.nodeName !== "HTML" : false;
++};
++
++/**
++ * Sets document-related variables once based on the current document
++ * @param {Element|Object} [doc] An element or document object to use to set the document
++ * @returns {Object} Returns the current document
++ */
++setDocument = Sizzle.setDocument = function( node ) {
++	var doc = node ? node.ownerDocument || node : preferredDoc;
++
++	// If no document and documentElement is available, return
++	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
++		return document;
++	}
++
++	// Set our document
++	document = doc;
++	docElem = doc.documentElement;
++
++	// Support tests
++	documentIsXML = isXML( doc );
++
++	// Check if getElementsByTagName("*") returns only elements
++	support.tagNameNoComments = assert(function( div ) {
++		div.appendChild( doc.createComment("") );
++		return !div.getElementsByTagName("*").length;
++	});
++
++	// Check if attributes should be retrieved by attribute nodes
++	support.attributes = assert(function( div ) {
++		div.innerHTML = "<select></select>";
++		var type = typeof div.lastChild.getAttribute("multiple");
++		// IE8 returns a string for some attributes even when not present
++		return type !== "boolean" && type !== "string";
++	});
++
++	// Check if getElementsByClassName can be trusted
++	support.getByClassName = assert(function( div ) {
++		// Opera can't find a second classname (in 9.6)
++		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
++		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
++			return false;
++		}
++
++		// Safari 3.2 caches class attributes and doesn't catch changes
++		div.lastChild.className = "e";
++		return div.getElementsByClassName("e").length === 2;
++	});
++
++	// Check if getElementById returns elements by name
++	// Check if getElementsByName privileges form controls or returns elements by ID
++	support.getByName = assert(function( div ) {
++		// Inject content
++		div.id = expando + 0;
++		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
++		docElem.insertBefore( div, docElem.firstChild );
++
++		// Test
++		var pass = doc.getElementsByName &&
++			// buggy browsers will return fewer than the correct 2
++			doc.getElementsByName( expando ).length === 2 +
++			// buggy browsers will return more than the correct 0
++			doc.getElementsByName( expando + 0 ).length;
++		support.getIdNotName = !doc.getElementById( expando );
++
++		// Cleanup
++		docElem.removeChild( div );
++
++		return pass;
++	});
++
++	// IE6/7 return modified attributes
++	Expr.attrHandle = assert(function( div ) {
++		div.innerHTML = "<a href='#'></a>";
++		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
++			div.firstChild.getAttribute("href") === "#";
++	}) ?
++		{} :
++		{
++			"href": function( elem ) {
++				return elem.getAttribute( "href", 2 );
++			},
++			"type": function( elem ) {
++				return elem.getAttribute("type");
++			}
++		};
++
++	// ID find and filter
++	if ( support.getIdNotName ) {
++		Expr.find["ID"] = function( id, context ) {
++			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
++				var m = context.getElementById( id );
++				// Check parentNode to catch when Blackberry 4.6 returns
++				// nodes that are no longer in the document #6963
++				return m && m.parentNode ? [m] : [];
++			}
++		};
++		Expr.filter["ID"] = function( id ) {
++			var attrId = id.replace( runescape, funescape );
++			return function( elem ) {
++				return elem.getAttribute("id") === attrId;
++			};
++		};
++	} else {
++		Expr.find["ID"] = function( id, context ) {
++			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
++				var m = context.getElementById( id );
++
++				return m ?
++					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
++						[m] :
++						undefined :
++					[];
++			}
++		};
++		Expr.filter["ID"] =  function( id ) {
++			var attrId = id.replace( runescape, funescape );
++			return function( elem ) {
++				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
++				return node && node.value === attrId;
++			};
++		};
++	}
++
++	// Tag
++	Expr.find["TAG"] = support.tagNameNoComments ?
++		function( tag, context ) {
++			if ( typeof context.getElementsByTagName !== strundefined ) {
++				return context.getElementsByTagName( tag );
++			}
++		} :
++		function( tag, context ) {
++			var elem,
++				tmp = [],
++				i = 0,
++				results = context.getElementsByTagName( tag );
++
++			// Filter out possible comments
++			if ( tag === "*" ) {
++				while ( (elem = results[i++]) ) {
++					if ( elem.nodeType === 1 ) {
++						tmp.push( elem );
++					}
++				}
++
++				return tmp;
++			}
++			return results;
++		};
++
++	// Name
++	Expr.find["NAME"] = support.getByName && function( tag, context ) {
++		if ( typeof context.getElementsByName !== strundefined ) {
++			return context.getElementsByName( name );
++		}
++	};
++
++	// Class
++	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
++		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
++			return context.getElementsByClassName( className );
++		}
++	};
++
++	// QSA and matchesSelector support
++
++	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
++	rbuggyMatches = [];
++
++	// qSa(:focus) reports false when true (Chrome 21),
++	// no need to also add to buggyMatches since matches checks buggyQSA
++	// A support test would require too much code (would include document ready)
++	rbuggyQSA = [ ":focus" ];
++
++	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
++		// Build QSA regex
++		// Regex strategy adopted from Diego Perini
++		assert(function( div ) {
++			// Select is set to empty string on purpose
++			// This is to test IE's treatment of not explictly
++			// setting a boolean content attribute,
++			// since its presence should be enough
++			// http://bugs.jquery.com/ticket/12359
++			div.innerHTML = "<select><option selected=''></option></select>";
++
++			// IE8 - Some boolean attributes are not treated correctly
++			if ( !div.querySelectorAll("[selected]").length ) {
++				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
++			}
++
++			// Webkit/Opera - :checked should return selected option elements
++			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
++			// IE8 throws error here and will not see later tests
++			if ( !div.querySelectorAll(":checked").length ) {
++				rbuggyQSA.push(":checked");
++			}
++		});
++
++		assert(function( div ) {
++
++			// Opera 10-12/IE8 - ^= $= *= and empty values
++			// Should not select anything
++			div.innerHTML = "<input type='hidden' i=''/>";
++			if ( div.querySelectorAll("[i^='']").length ) {
++				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
++			}
++
++			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
++			// IE8 throws error here and will not see later tests
++			if ( !div.querySelectorAll(":enabled").length ) {
++				rbuggyQSA.push( ":enabled", ":disabled" );
++			}
++
++			// Opera 10-11 does not throw on post-comma invalid pseudos
++			div.querySelectorAll("*,:x");
++			rbuggyQSA.push(",.*:");
++		});
++	}
++
++	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
++		docElem.mozMatchesSelector ||
++		docElem.webkitMatchesSelector ||
++		docElem.oMatchesSelector ||
++		docElem.msMatchesSelector) )) ) {
++
++		assert(function( div ) {
++			// Check to see if it's possible to do matchesSelector
++			// on a disconnected node (IE 9)
++			support.disconnectedMatch = matches.call( div, "div" );
++
++			// This should fail with an exception
++			// Gecko does not error, returns false instead
++			matches.call( div, "[s!='']:x" );
++			rbuggyMatches.push( "!=", pseudos );
++		});
++	}
++
++	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
++	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
++
++	// Element contains another
++	// Purposefully does not implement inclusive descendent
++	// As in, an element does not contain itself
++	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
++		function( a, b ) {
++			var adown = a.nodeType === 9 ? a.documentElement : a,
++				bup = b && b.parentNode;
++			return a === bup || !!( bup && bup.nodeType === 1 && (
++				adown.contains ?
++					adown.contains( bup ) :
++					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
++			));
++		} :
++		function( a, b ) {
++			if ( b ) {
++				while ( (b = b.parentNode) ) {
++					if ( b === a ) {
++						return true;
++					}
++				}
++			}
++			return false;
++		};
++
++	// Document order sorting
++	sortOrder = docElem.compareDocumentPosition ?
++	function( a, b ) {
++		var compare;
++
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++		}
++
++		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
++			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
++				if ( a === doc || contains( preferredDoc, a ) ) {
++					return -1;
++				}
++				if ( b === doc || contains( preferredDoc, b ) ) {
++					return 1;
++				}
++				return 0;
++			}
++			return compare & 4 ? -1 : 1;
++		}
++
++		return a.compareDocumentPosition ? -1 : 1;
++	} :
++	function( a, b ) {
++		var cur,
++			i = 0,
++			aup = a.parentNode,
++			bup = b.parentNode,
++			ap = [ a ],
++			bp = [ b ];
++
++		// Exit early if the nodes are identical
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++
++		// Parentless nodes are either documents or disconnected
++		} else if ( !aup || !bup ) {
++			return a === doc ? -1 :
++				b === doc ? 1 :
++				aup ? -1 :
++				bup ? 1 :
++				0;
++
++		// If the nodes are siblings, we can do a quick check
++		} else if ( aup === bup ) {
++			return siblingCheck( a, b );
++		}
++
++		// Otherwise we need full lists of their ancestors for comparison
++		cur = a;
++		while ( (cur = cur.parentNode) ) {
++			ap.unshift( cur );
++		}
++		cur = b;
++		while ( (cur = cur.parentNode) ) {
++			bp.unshift( cur );
++		}
++
++		// Walk down the tree looking for a discrepancy
++		while ( ap[i] === bp[i] ) {
++			i++;
++		}
++
++		return i ?
++			// Do a sibling check if the nodes have a common ancestor
++			siblingCheck( ap[i], bp[i] ) :
++
++			// Otherwise nodes in our document sort first
++			ap[i] === preferredDoc ? -1 :
++			bp[i] === preferredDoc ? 1 :
++			0;
++	};
++
++	// Always assume the presence of duplicates if sort doesn't
++	// pass them to our comparison function (as in Google Chrome).
++	hasDuplicate = false;
++	[0, 0].sort( sortOrder );
++	support.detectDuplicates = hasDuplicate;
++
++	return document;
++};
++
++Sizzle.matches = function( expr, elements ) {
++	return Sizzle( expr, null, null, elements );
++};
++
++Sizzle.matchesSelector = function( elem, expr ) {
++	// Set document vars if needed
++	if ( ( elem.ownerDocument || elem ) !== document ) {
++		setDocument( elem );
++	}
++
++	// Make sure that attribute selectors are quoted
++	expr = expr.replace( rattributeQuotes, "='$1']" );
++
++	// rbuggyQSA always contains :focus, so no need for an existence check
++	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
++		try {
++			var ret = matches.call( elem, expr );
++
++			// IE 9's matchesSelector returns false on disconnected nodes
++			if ( ret || support.disconnectedMatch ||
++					// As well, disconnected nodes are said to be in a document
++					// fragment in IE 9
++					elem.document && elem.document.nodeType !== 11 ) {
++				return ret;
++			}
++		} catch(e) {}
++	}
++
++	return Sizzle( expr, document, null, [elem] ).length > 0;
++};
++
++Sizzle.contains = function( context, elem ) {
++	// Set document vars if needed
++	if ( ( context.ownerDocument || context ) !== document ) {
++		setDocument( context );
++	}
++	return contains( context, elem );
++};
++
++Sizzle.attr = function( elem, name ) {
++	var val;
++
++	// Set document vars if needed
++	if ( ( elem.ownerDocument || elem ) !== document ) {
++		setDocument( elem );
++	}
++
++	if ( !documentIsXML ) {
++		name = name.toLowerCase();
++	}
++	if ( (val = Expr.attrHandle[ name ]) ) {
++		return val( elem );
++	}
++	if ( documentIsXML || support.attributes ) {
++		return elem.getAttribute( name );
++	}
++	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
++		name :
++		val && val.specified ? val.value : null;
++};
++
++Sizzle.error = function( msg ) {
++	throw new Error( "Syntax error, unrecognized expression: " + msg );
++};
++
++// Document sorting and removing duplicates
++Sizzle.uniqueSort = function( results ) {
++	var elem,
++		duplicates = [],
++		i = 1,
++		j = 0;
++
++	// Unless we *know* we can detect duplicates, assume their presence
++	hasDuplicate = !support.detectDuplicates;
++	results.sort( sortOrder );
++
++	if ( hasDuplicate ) {
++		for ( ; (elem = results[i]); i++ ) {
++			if ( elem === results[ i - 1 ] ) {
++				j = duplicates.push( i );
++			}
++		}
++		while ( j-- ) {
++			results.splice( duplicates[ j ], 1 );
++		}
++	}
++
++	return results;
++};
++
++function siblingCheck( a, b ) {
++	var cur = b && a,
++		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
++
++	// Use IE sourceIndex if available on both nodes
++	if ( diff ) {
++		return diff;
++	}
++
++	// Check if b follows a
++	if ( cur ) {
++		while ( (cur = cur.nextSibling) ) {
++			if ( cur === b ) {
++				return -1;
++			}
++		}
++	}
++
++	return a ? 1 : -1;
++}
++
++// Returns a function to use in pseudos for input types
++function createInputPseudo( type ) {
++	return function( elem ) {
++		var name = elem.nodeName.toLowerCase();
++		return name === "input" && elem.type === type;
++	};
++}
++
++// Returns a function to use in pseudos for buttons
++function createButtonPseudo( type ) {
++	return function( elem ) {
++		var name = elem.nodeName.toLowerCase();
++		return (name === "input" || name === "button") && elem.type === type;
++	};
++}
++
++// Returns a function to use in pseudos for positionals
++function createPositionalPseudo( fn ) {
++	return markFunction(function( argument ) {
++		argument = +argument;
++		return markFunction(function( seed, matches ) {
++			var j,
++				matchIndexes = fn( [], seed.length, argument ),
++				i = matchIndexes.length;
++
++			// Match elements found at the specified indexes
++			while ( i-- ) {
++				if ( seed[ (j = matchIndexes[i]) ] ) {
++					seed[j] = !(matches[j] = seed[j]);
++				}
++			}
++		});
++	});
++}
++
++/**
++ * Utility function for retrieving the text value of an array of DOM nodes
++ * @param {Array|Element} elem
++ */
++getText = Sizzle.getText = function( elem ) {
++	var node,
++		ret = "",
++		i = 0,
++		nodeType = elem.nodeType;
++
++	if ( !nodeType ) {
++		// If no nodeType, this is expected to be an array
++		for ( ; (node = elem[i]); i++ ) {
++			// Do not traverse comment nodes
++			ret += getText( node );
++		}
++	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
++		// Use textContent for elements
++		// innerText usage removed for consistency of new lines (see #11153)
++		if ( typeof elem.textContent === "string" ) {
++			return elem.textContent;
++		} else {
++			// Traverse its children
++			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
++				ret += getText( elem );
++			}
++		}
++	} else if ( nodeType === 3 || nodeType === 4 ) {
++		return elem.nodeValue;
++	}
++	// Do not include comment or processing instruction nodes
++
++	return ret;
++};
++
++Expr = Sizzle.selectors = {
++
++	// Can be adjusted by the user
++	cacheLength: 50,
++
++	createPseudo: markFunction,
++
++	match: matchExpr,
++
++	find: {},
++
++	relative: {
++		">": { dir: "parentNode", first: true },
++		" ": { dir: "parentNode" },
++		"+": { dir: "previousSibling", first: true },
++		"~": { dir: "previousSibling" }
++	},
++
++	preFilter: {
++		"ATTR": function( match ) {
++			match[1] = match[1].replace( runescape, funescape );
++
++			// Move the given value to match[3] whether quoted or unquoted
++			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
++
++			if ( match[2] === "~=" ) {
++				match[3] = " " + match[3] + " ";
++			}
++
++			return match.slice( 0, 4 );
++		},
++
++		"CHILD": function( match ) {
++			/* matches from matchExpr["CHILD"]
++				1 type (only|nth|...)
++				2 what (child|of-type)
++				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
++				4 xn-component of xn+y argument ([+-]?\d*n|)
++				5 sign of xn-component
++				6 x of xn-component
++				7 sign of y-component
++				8 y of y-component
++			*/
++			match[1] = match[1].toLowerCase();
++
++			if ( match[1].slice( 0, 3 ) === "nth" ) {
++				// nth-* requires argument
++				if ( !match[3] ) {
++					Sizzle.error( match[0] );
++				}
++
++				// numeric x and y parameters for Expr.filter.CHILD
++				// remember that false/true cast respectively to 0/1
++				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
++				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
++
++			// other types prohibit arguments
++			} else if ( match[3] ) {
++				Sizzle.error( match[0] );
++			}
++
++			return match;
++		},
++
++		"PSEUDO": function( match ) {
++			var excess,
++				unquoted = !match[5] && match[2];
++
++			if ( matchExpr["CHILD"].test( match[0] ) ) {
++				return null;
++			}
++
++			// Accept quoted arguments as-is
++			if ( match[4] ) {
++				match[2] = match[4];
++
++			// Strip excess characters from unquoted arguments
++			} else if ( unquoted && rpseudo.test( unquoted ) &&
++				// Get excess from tokenize (recursively)
++				(excess = tokenize( unquoted, true )) &&
++				// advance to the next closing parenthesis
++				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
++
++				// excess is a negative index
++				match[0] = match[0].slice( 0, excess );
++				match[2] = unquoted.slice( 0, excess );
++			}
++
++			// Return only captures needed by the pseudo filter method (type and argument)
++			return match.slice( 0, 3 );
++		}
++	},
++
++	filter: {
++
++		"TAG": function( nodeName ) {
++			if ( nodeName === "*" ) {
++				return function() { return true; };
++			}
++
++			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
++			return function( elem ) {
++				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
++			};
++		},
++
++		"CLASS": function( className ) {
++			var pattern = classCache[ className + " " ];
++
++			return pattern ||
++				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
++				classCache( className, function( elem ) {
++					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
++				});
++		},
++
++		"ATTR": function( name, operator, check ) {
++			return function( elem ) {
++				var result = Sizzle.attr( elem, name );
++
++				if ( result == null ) {
++					return operator === "!=";
++				}
++				if ( !operator ) {
++					return true;
++				}
++
++				result += "";
++
++				return operator === "=" ? result === check :
++					operator === "!=" ? result !== check :
++					operator === "^=" ? check && result.indexOf( check ) === 0 :
++					operator === "*=" ? check && result.indexOf( check ) > -1 :
++					operator === "$=" ? check && result.slice( -check.length ) === check :
++					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
++					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
++					false;
++			};
++		},
++
++		"CHILD": function( type, what, argument, first, last ) {
++			var simple = type.slice( 0, 3 ) !== "nth",
++				forward = type.slice( -4 ) !== "last",
++				ofType = what === "of-type";
++
++			return first === 1 && last === 0 ?
++
++				// Shortcut for :nth-*(n)
++				function( elem ) {
++					return !!elem.parentNode;
++				} :
++
++				function( elem, context, xml ) {
++					var cache, outerCache, node, diff, nodeIndex, start,
++						dir = simple !== forward ? "nextSibling" : "previousSibling",
++						parent = elem.parentNode,
++						name = ofType && elem.nodeName.toLowerCase(),
++						useCache = !xml && !ofType;
++
++					if ( parent ) {
++
++						// :(first|last|only)-(child|of-type)
++						if ( simple ) {
++							while ( dir ) {
++								node = elem;
++								while ( (node = node[ dir ]) ) {
++									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
++										return false;
++									}
++								}
++								// Reverse direction for :only-* (if we haven't yet done so)
++								start = dir = type === "only" && !start && "nextSibling";
++							}
++							return true;
++						}
++
++						start = [ forward ? parent.firstChild : parent.lastChild ];
++
++						// non-xml :nth-child(...) stores cache data on `parent`
++						if ( forward && useCache ) {
++							// Seek `elem` from a previously-cached index
++							outerCache = parent[ expando ] || (parent[ expando ] = {});
++							cache = outerCache[ type ] || [];
++							nodeIndex = cache[0] === dirruns && cache[1];
++							diff = cache[0] === dirruns && cache[2];
++							node = nodeIndex && parent.childNodes[ nodeIndex ];
++
++							while ( (node = ++nodeIndex && node && node[ dir ] ||
++
++								// Fallback to seeking `elem` from the start
++								(diff = nodeIndex = 0) || start.pop()) ) {
++
++								// When found, cache indexes on `parent` and break
++								if ( node.nodeType === 1 && ++diff && node === elem ) {
++									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
++									break;
++								}
++							}
++
++						// Use previously-cached element index if available
++						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
++							diff = cache[1];
++
++						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
++						} else {
++							// Use the same loop as above to seek `elem` from the start
++							while ( (node = ++nodeIndex && node && node[ dir ] ||
++								(diff = nodeIndex = 0) || start.pop()) ) {
++
++								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
++									// Cache the index of each encountered element
++									if ( useCache ) {
++										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
++									}
++
++									if ( node === elem ) {
++										break;
++									}
++								}
++							}
++						}
++
++						// Incorporate the offset, then check against cycle size
++						diff -= last;
++						return diff === first || ( diff % first === 0 && diff / first >= 0 );
++					}
++				};
++		},
++
++		"PSEUDO": function( pseudo, argument ) {
++			// pseudo-class names are case-insensitive
++			// http://www.w3.org/TR/selectors/#pseudo-classes
++			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
++			// Remember that setFilters inherits from pseudos
++			var args,
++				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
++					Sizzle.error( "unsupported pseudo: " + pseudo );
++
++			// The user may use createPseudo to indicate that
++			// arguments are needed to create the filter function
++			// just as Sizzle does
++			if ( fn[ expando ] ) {
++				return fn( argument );
++			}
++
++			// But maintain support for old signatures
++			if ( fn.length > 1 ) {
++				args = [ pseudo, pseudo, "", argument ];
++				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
++					markFunction(function( seed, matches ) {
++						var idx,
++							matched = fn( seed, argument ),
++							i = matched.length;
++						while ( i-- ) {
++							idx = indexOf.call( seed, matched[i] );
++							seed[ idx ] = !( matches[ idx ] = matched[i] );
++						}
++					}) :
++					function( elem ) {
++						return fn( elem, 0, args );
++					};
++			}
++
++			return fn;
++		}
++	},
++
++	pseudos: {
++		// Potentially complex pseudos
++		"not": markFunction(function( selector ) {
++			// Trim the selector passed to compile
++			// to avoid treating leading and trailing
++			// spaces as combinators
++			var input = [],
++				results = [],
++				matcher = compile( selector.replace( rtrim, "$1" ) );
++
++			return matcher[ expando ] ?
++				markFunction(function( seed, matches, context, xml ) {
++					var elem,
++						unmatched = matcher( seed, null, xml, [] ),
++						i = seed.length;
++
++					// Match elements unmatched by `matcher`
++					while ( i-- ) {
++						if ( (elem = unmatched[i]) ) {
++							seed[i] = !(matches[i] = elem);
++						}
++					}
++				}) :
++				function( elem, context, xml ) {
++					input[0] = elem;
++					matcher( input, null, xml, results );
++					return !results.pop();
++				};
++		}),
++
++		"has": markFunction(function( selector ) {
++			return function( elem ) {
++				return Sizzle( selector, elem ).length > 0;
++			};
++		}),
++
++		"contains": markFunction(function( text ) {
++			return function( elem ) {
++				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
++			};
++		}),
++
++		// "Whether an element is represented by a :lang() selector
++		// is based solely on the element's language value
++		// being equal to the identifier C,
++		// or beginning with the identifier C immediately followed by "-".
++		// The matching of C against the element's language value is performed case-insensitively.
++		// The identifier C does not have to be a valid language name."
++		// http://www.w3.org/TR/selectors/#lang-pseudo
++		"lang": markFunction( function( lang ) {
++			// lang value must be a valid identifider
++			if ( !ridentifier.test(lang || "") ) {
++				Sizzle.error( "unsupported lang: " + lang );
++			}
++			lang = lang.replace( runescape, funescape ).toLowerCase();
++			return function( elem ) {
++				var elemLang;
++				do {
++					if ( (elemLang = documentIsXML ?
++						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
++						elem.lang) ) {
++
++						elemLang = elemLang.toLowerCase();
++						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
++					}
++				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
++				return false;
++			};
++		}),
++
++		// Miscellaneous
++		"target": function( elem ) {
++			var hash = window.location && window.location.hash;
++			return hash && hash.slice( 1 ) === elem.id;
++		},
++
++		"root": function( elem ) {
++			return elem === docElem;
++		},
++
++		"focus": function( elem ) {
++			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
++		},
++
++		// Boolean properties
++		"enabled": function( elem ) {
++			return elem.disabled === false;
++		},
++
++		"disabled": function( elem ) {
++			return elem.disabled === true;
++		},
++
++		"checked": function( elem ) {
++			// In CSS3, :checked should return both checked and selected elements
++			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
++			var nodeName = elem.nodeName.toLowerCase();
++			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
++		},
++
++		"selected": function( elem ) {
++			// Accessing this property makes selected-by-default
++			// options in Safari work properly
++			if ( elem.parentNode ) {
++				elem.parentNode.selectedIndex;
++			}
++
++			return elem.selected === true;
++		},
++
++		// Contents
++		"empty": function( elem ) {
++			// http://www.w3.org/TR/selectors/#empty-pseudo
++			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
++			//   not comment, processing instructions, or others
++			// Thanks to Diego Perini for the nodeName shortcut
++			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
++			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
++				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
++					return false;
++				}
++			}
++			return true;
++		},
++
++		"parent": function( elem ) {
++			return !Expr.pseudos["empty"]( elem );
++		},
++
++		// Element/input types
++		"header": function( elem ) {
++			return rheader.test( elem.nodeName );
++		},
++
++		"input": function( elem ) {
++			return rinputs.test( elem.nodeName );
++		},
++
++		"button": function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return name === "input" && elem.type === "button" || name === "button";
++		},
++
++		"text": function( elem ) {
++			var attr;
++			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
++			// use getAttribute instead to test this case
++			return elem.nodeName.toLowerCase() === "input" &&
++				elem.type === "text" &&
++				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
++		},
++
++		// Position-in-collection
++		"first": createPositionalPseudo(function() {
++			return [ 0 ];
++		}),
++
++		"last": createPositionalPseudo(function( matchIndexes, length ) {
++			return [ length - 1 ];
++		}),
++
++		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			return [ argument < 0 ? argument + length : argument ];
++		}),
++
++		"even": createPositionalPseudo(function( matchIndexes, length ) {
++			var i = 0;
++			for ( ; i < length; i += 2 ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"odd": createPositionalPseudo(function( matchIndexes, length ) {
++			var i = 1;
++			for ( ; i < length; i += 2 ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			var i = argument < 0 ? argument + length : argument;
++			for ( ; --i >= 0; ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		}),
++
++		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
++			var i = argument < 0 ? argument + length : argument;
++			for ( ; ++i < length; ) {
++				matchIndexes.push( i );
++			}
++			return matchIndexes;
++		})
++	}
++};
++
++// Add button/input type pseudos
++for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
++	Expr.pseudos[ i ] = createInputPseudo( i );
++}
++for ( i in { submit: true, reset: true } ) {
++	Expr.pseudos[ i ] = createButtonPseudo( i );
++}
++
++function tokenize( selector, parseOnly ) {
++	var matched, match, tokens, type,
++		soFar, groups, preFilters,
++		cached = tokenCache[ selector + " " ];
++
++	if ( cached ) {
++		return parseOnly ? 0 : cached.slice( 0 );
++	}
++
++	soFar = selector;
++	groups = [];
++	preFilters = Expr.preFilter;
++
++	while ( soFar ) {
++
++		// Comma and first run
++		if ( !matched || (match = rcomma.exec( soFar )) ) {
++			if ( match ) {
++				// Don't consume trailing commas as valid
++				soFar = soFar.slice( match[0].length ) || soFar;
++			}
++			groups.push( tokens = [] );
++		}
++
++		matched = false;
++
++		// Combinators
++		if ( (match = rcombinators.exec( soFar )) ) {
++			matched = match.shift();
++			tokens.push( {
++				value: matched,
++				// Cast descendant combinators to space
++				type: match[0].replace( rtrim, " " )
++			} );
++			soFar = soFar.slice( matched.length );
++		}
++
++		// Filters
++		for ( type in Expr.filter ) {
++			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
++				(match = preFilters[ type ]( match ))) ) {
++				matched = match.shift();
++				tokens.push( {
++					value: matched,
++					type: type,
++					matches: match
++				} );
++				soFar = soFar.slice( matched.length );
++			}
++		}
++
++		if ( !matched ) {
++			break;
++		}
++	}
++
++	// Return the length of the invalid excess
++	// if we're just parsing
++	// Otherwise, throw an error or return tokens
++	return parseOnly ?
++		soFar.length :
++		soFar ?
++			Sizzle.error( selector ) :
++			// Cache the tokens
++			tokenCache( selector, groups ).slice( 0 );
++}
++
++function toSelector( tokens ) {
++	var i = 0,
++		len = tokens.length,
++		selector = "";
++	for ( ; i < len; i++ ) {
++		selector += tokens[i].value;
++	}
++	return selector;
++}
++
++function addCombinator( matcher, combinator, base ) {
++	var dir = combinator.dir,
++		checkNonElements = base && dir === "parentNode",
++		doneName = done++;
++
++	return combinator.first ?
++		// Check against closest ancestor/preceding element
++		function( elem, context, xml ) {
++			while ( (elem = elem[ dir ]) ) {
++				if ( elem.nodeType === 1 || checkNonElements ) {
++					return matcher( elem, context, xml );
++				}
++			}
++		} :
++
++		// Check against all ancestor/preceding elements
++		function( elem, context, xml ) {
++			var data, cache, outerCache,
++				dirkey = dirruns + " " + doneName;
++
++			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
++			if ( xml ) {
++				while ( (elem = elem[ dir ]) ) {
++					if ( elem.nodeType === 1 || checkNonElements ) {
++						if ( matcher( elem, context, xml ) ) {
++							return true;
++						}
++					}
++				}
++			} else {
++				while ( (elem = elem[ dir ]) ) {
++					if ( elem.nodeType === 1 || checkNonElements ) {
++						outerCache = elem[ expando ] || (elem[ expando ] = {});
++						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
++							if ( (data = cache[1]) === true || data === cachedruns ) {
++								return data === true;
++							}
++						} else {
++							cache = outerCache[ dir ] = [ dirkey ];
++							cache[1] = matcher( elem, context, xml ) || cachedruns;
++							if ( cache[1] === true ) {
++								return true;
++							}
++						}
++					}
++				}
++			}
++		};
++}
++
++function elementMatcher( matchers ) {
++	return matchers.length > 1 ?
++		function( elem, context, xml ) {
++			var i = matchers.length;
++			while ( i-- ) {
++				if ( !matchers[i]( elem, context, xml ) ) {
++					return false;
++				}
++			}
++			return true;
++		} :
++		matchers[0];
++}
++
++function condense( unmatched, map, filter, context, xml ) {
++	var elem,
++		newUnmatched = [],
++		i = 0,
++		len = unmatched.length,
++		mapped = map != null;
++
++	for ( ; i < len; i++ ) {
++		if ( (elem = unmatched[i]) ) {
++			if ( !filter || filter( elem, context, xml ) ) {
++				newUnmatched.push( elem );
++				if ( mapped ) {
++					map.push( i );
++				}
++			}
++		}
++	}
++
++	return newUnmatched;
++}
++
++function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
++	if ( postFilter && !postFilter[ expando ] ) {
++		postFilter = setMatcher( postFilter );
++	}
++	if ( postFinder && !postFinder[ expando ] ) {
++		postFinder = setMatcher( postFinder, postSelector );
++	}
++	return markFunction(function( seed, results, context, xml ) {
++		var temp, i, elem,
++			preMap = [],
++			postMap = [],
++			preexisting = results.length,
++
++			// Get initial elements from seed or context
++			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
++
++			// Prefilter to get matcher input, preserving a map for seed-results synchronization
++			matcherIn = preFilter && ( seed || !selector ) ?
++				condense( elems, preMap, preFilter, context, xml ) :
++				elems,
++
++			matcherOut = matcher ?
++				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
++				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
++
++					// ...intermediate processing is necessary
++					[] :
++
++					// ...otherwise use results directly
++					results :
++				matcherIn;
++
++		// Find primary matches
++		if ( matcher ) {
++			matcher( matcherIn, matcherOut, context, xml );
++		}
++
++		// Apply postFilter
++		if ( postFilter ) {
++			temp = condense( matcherOut, postMap );
++			postFilter( temp, [], context, xml );
++
++			// Un-match failing elements by moving them back to matcherIn
++			i = temp.length;
++			while ( i-- ) {
++				if ( (elem = temp[i]) ) {
++					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
++				}
++			}
++		}
++
++		if ( seed ) {
++			if ( postFinder || preFilter ) {
++				if ( postFinder ) {
++					// Get the final matcherOut by condensing this intermediate into postFinder contexts
++					temp = [];
++					i = matcherOut.length;
++					while ( i-- ) {
++						if ( (elem = matcherOut[i]) ) {
++							// Restore matcherIn since elem is not yet a final match
++							temp.push( (matcherIn[i] = elem) );
++						}
++					}
++					postFinder( null, (matcherOut = []), temp, xml );
++				}
++
++				// Move matched elements from seed to results to keep them synchronized
++				i = matcherOut.length;
++				while ( i-- ) {
++					if ( (elem = matcherOut[i]) &&
++						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
++
++						seed[temp] = !(results[temp] = elem);
++					}
++				}
++			}
++
++		// Add elements to results, through postFinder if defined
++		} else {
++			matcherOut = condense(
++				matcherOut === results ?
++					matcherOut.splice( preexisting, matcherOut.length ) :
++					matcherOut
++			);
++			if ( postFinder ) {
++				postFinder( null, results, matcherOut, xml );
++			} else {
++				push.apply( results, matcherOut );
++			}
++		}
++	});
++}
++
++function matcherFromTokens( tokens ) {
++	var checkContext, matcher, j,
++		len = tokens.length,
++		leadingRelative = Expr.relative[ tokens[0].type ],
++		implicitRelative = leadingRelative || Expr.relative[" "],
++		i = leadingRelative ? 1 : 0,
++
++		// The foundational matcher ensures that elements are reachable from top-level context(s)
++		matchContext = addCombinator( function( elem ) {
++			return elem === checkContext;
++		}, implicitRelative, true ),
++		matchAnyContext = addCombinator( function( elem ) {
++			return indexOf.call( checkContext, elem ) > -1;
++		}, implicitRelative, true ),
++		matchers = [ function( elem, context, xml ) {
++			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
++				(checkContext = context).nodeType ?
++					matchContext( elem, context, xml ) :
++					matchAnyContext( elem, context, xml ) );
++		} ];
++
++	for ( ; i < len; i++ ) {
++		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
++			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
++		} else {
++			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
++
++			// Return special upon seeing a positional matcher
++			if ( matcher[ expando ] ) {
++				// Find the next relative operator (if any) for proper handling
++				j = ++i;
++				for ( ; j < len; j++ ) {
++					if ( Expr.relative[ tokens[j].type ] ) {
++						break;
++					}
++				}
++				return setMatcher(
++					i > 1 && elementMatcher( matchers ),
++					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
++					matcher,
++					i < j && matcherFromTokens( tokens.slice( i, j ) ),
++					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
++					j < len && toSelector( tokens )
++				);
++			}
++			matchers.push( matcher );
++		}
++	}
++
++	return elementMatcher( matchers );
++}
++
++function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
++	// A counter to specify which element is currently being matched
++	var matcherCachedRuns = 0,
++		bySet = setMatchers.length > 0,
++		byElement = elementMatchers.length > 0,
++		superMatcher = function( seed, context, xml, results, expandContext ) {
++			var elem, j, matcher,
++				setMatched = [],
++				matchedCount = 0,
++				i = "0",
++				unmatched = seed && [],
++				outermost = expandContext != null,
++				contextBackup = outermostContext,
++				// We must always have either seed elements or context
++				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
++				// Use integer dirruns iff this is the outermost matcher
++				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
++
++			if ( outermost ) {
++				outermostContext = context !== document && context;
++				cachedruns = matcherCachedRuns;
++			}
++
++			// Add elements passing elementMatchers directly to results
++			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
++			for ( ; (elem = elems[i]) != null; i++ ) {
++				if ( byElement && elem ) {
++					j = 0;
++					while ( (matcher = elementMatchers[j++]) ) {
++						if ( matcher( elem, context, xml ) ) {
++							results.push( elem );
++							break;
++						}
++					}
++					if ( outermost ) {
++						dirruns = dirrunsUnique;
++						cachedruns = ++matcherCachedRuns;
++					}
++				}
++
++				// Track unmatched elements for set filters
++				if ( bySet ) {
++					// They will have gone through all possible matchers
++					if ( (elem = !matcher && elem) ) {
++						matchedCount--;
++					}
++
++					// Lengthen the array for every element, matched or not
++					if ( seed ) {
++						unmatched.push( elem );
++					}
++				}
++			}
++
++			// Apply set filters to unmatched elements
++			matchedCount += i;
++			if ( bySet && i !== matchedCount ) {
++				j = 0;
++				while ( (matcher = setMatchers[j++]) ) {
++					matcher( unmatched, setMatched, context, xml );
++				}
++
++				if ( seed ) {
++					// Reintegrate element matches to eliminate the need for sorting
++					if ( matchedCount > 0 ) {
++						while ( i-- ) {
++							if ( !(unmatched[i] || setMatched[i]) ) {
++								setMatched[i] = pop.call( results );
++							}
++						}
++					}
++
++					// Discard index placeholder values to get only actual matches
++					setMatched = condense( setMatched );
++				}
++
++				// Add matches to results
++				push.apply( results, setMatched );
++
++				// Seedless set matches succeeding multiple successful matchers stipulate sorting
++				if ( outermost && !seed && setMatched.length > 0 &&
++					( matchedCount + setMatchers.length ) > 1 ) {
++
++					Sizzle.uniqueSort( results );
++				}
++			}
++
++			// Override manipulation of globals by nested matchers
++			if ( outermost ) {
++				dirruns = dirrunsUnique;
++				outermostContext = contextBackup;
++			}
++
++			return unmatched;
++		};
++
++	return bySet ?
++		markFunction( superMatcher ) :
++		superMatcher;
++}
++
++compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
++	var i,
++		setMatchers = [],
++		elementMatchers = [],
++		cached = compilerCache[ selector + " " ];
++
++	if ( !cached ) {
++		// Generate a function of recursive functions that can be used to check each element
++		if ( !group ) {
++			group = tokenize( selector );
++		}
++		i = group.length;
++		while ( i-- ) {
++			cached = matcherFromTokens( group[i] );
++			if ( cached[ expando ] ) {
++				setMatchers.push( cached );
++			} else {
++				elementMatchers.push( cached );
++			}
++		}
++
++		// Cache the compiled function
++		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
++	}
++	return cached;
++};
++
++function multipleContexts( selector, contexts, results ) {
++	var i = 0,
++		len = contexts.length;
++	for ( ; i < len; i++ ) {
++		Sizzle( selector, contexts[i], results );
++	}
++	return results;
++}
++
++function select( selector, context, results, seed ) {
++	var i, tokens, token, type, find,
++		match = tokenize( selector );
++
++	if ( !seed ) {
++		// Try to minimize operations if there is only one group
++		if ( match.length === 1 ) {
++
++			// Take a shortcut and set the context if the root selector is an ID
++			tokens = match[0] = match[0].slice( 0 );
++			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
++					context.nodeType === 9 && !documentIsXML &&
++					Expr.relative[ tokens[1].type ] ) {
++
++				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
++				if ( !context ) {
++					return results;
++				}
++
++				selector = selector.slice( tokens.shift().value.length );
++			}
++
++			// Fetch a seed set for right-to-left matching
++			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
++			while ( i-- ) {
++				token = tokens[i];
++
++				// Abort if we hit a combinator
++				if ( Expr.relative[ (type = token.type) ] ) {
++					break;
++				}
++				if ( (find = Expr.find[ type ]) ) {
++					// Search, expanding context for leading sibling combinators
++					if ( (seed = find(
++						token.matches[0].replace( runescape, funescape ),
++						rsibling.test( tokens[0].type ) && context.parentNode || context
++					)) ) {
++
++						// If seed is empty or no tokens remain, we can return early
++						tokens.splice( i, 1 );
++						selector = seed.length && toSelector( tokens );
++						if ( !selector ) {
++							push.apply( results, slice.call( seed, 0 ) );
++							return results;
++						}
++
++						break;
++					}
++				}
++			}
++		}
++	}
++
++	// Compile and execute a filtering function
++	// Provide `match` to avoid retokenization if we modified the selector above
++	compile( selector, match )(
++		seed,
++		context,
++		documentIsXML,
++		results,
++		rsibling.test( selector )
++	);
++	return results;
++}
++
++// Deprecated
++Expr.pseudos["nth"] = Expr.pseudos["eq"];
++
++// Easy API for creating new setFilters
++function setFilters() {}
++Expr.filters = setFilters.prototype = Expr.pseudos;
++Expr.setFilters = new setFilters();
++
++// Initialize with the default document
++setDocument();
++
++// Override sizzle attribute retrieval
++Sizzle.attr = jQuery.attr;
++jQuery.find = Sizzle;
++jQuery.expr = Sizzle.selectors;
++jQuery.expr[":"] = jQuery.expr.pseudos;
++jQuery.unique = Sizzle.uniqueSort;
++jQuery.text = Sizzle.getText;
++jQuery.isXMLDoc = Sizzle.isXML;
++jQuery.contains = Sizzle.contains;
++
++
++})( window );
++var runtil = /Until$/,
++	rparentsprev = /^(?:parents|prev(?:Until|All))/,
++	isSimple = /^.[^:#\[\.,]*$/,
++	rneedsContext = jQuery.expr.match.needsContext,
++	// methods guaranteed to produce a unique set when starting from a unique set
++	guaranteedUnique = {
++		children: true,
++		contents: true,
++		next: true,
++		prev: true
++	};
++
++jQuery.fn.extend({
++	find: function( selector ) {
++		var i, ret, self,
++			len = this.length;
++
++		if ( typeof selector !== "string" ) {
++			self = this;
++			return this.pushStack( jQuery( selector ).filter(function() {
++				for ( i = 0; i < len; i++ ) {
++					if ( jQuery.contains( self[ i ], this ) ) {
++						return true;
++					}
++				}
++			}) );
++		}
++
++		ret = [];
++		for ( i = 0; i < len; i++ ) {
++			jQuery.find( selector, this[ i ], ret );
++		}
++
++		// Needed because $( selector, context ) becomes $( context ).find( selector )
++		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
++		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
++		return ret;
++	},
++
++	has: function( target ) {
++		var i,
++			targets = jQuery( target, this ),
++			len = targets.length;
++
++		return this.filter(function() {
++			for ( i = 0; i < len; i++ ) {
++				if ( jQuery.contains( this, targets[i] ) ) {
++					return true;
++				}
++			}
++		});
++	},
++
++	not: function( selector ) {
++		return this.pushStack( winnow(this, selector, false) );
++	},
++
++	filter: function( selector ) {
++		return this.pushStack( winnow(this, selector, true) );
++	},
++
++	is: function( selector ) {
++		return !!selector && (
++			typeof selector === "string" ?
++				// If this is a positional/relative selector, check membership in the returned set
++				// so $("p:first").is("p:last") won't return true for a doc with two "p".
++				rneedsContext.test( selector ) ?
++					jQuery( selector, this.context ).index( this[0] ) >= 0 :
++					jQuery.filter( selector, this ).length > 0 :
++				this.filter( selector ).length > 0 );
++	},
++
++	closest: function( selectors, context ) {
++		var cur,
++			i = 0,
++			l = this.length,
++			ret = [],
++			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
++				jQuery( selectors, context || this.context ) :
++				0;
++
++		for ( ; i < l; i++ ) {
++			cur = this[i];
++
++			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
++				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
++					ret.push( cur );
++					break;
++				}
++				cur = cur.parentNode;
++			}
++		}
++
++		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
++	},
++
++	// Determine the position of an element within
++	// the matched set of elements
++	index: function( elem ) {
++
++		// No argument, return index in parent
++		if ( !elem ) {
++			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
++		}
++
++		// index in selector
++		if ( typeof elem === "string" ) {
++			return jQuery.inArray( this[0], jQuery( elem ) );
++		}
++
++		// Locate the position of the desired element
++		return jQuery.inArray(
++			// If it receives a jQuery object, the first element is used
++			elem.jquery ? elem[0] : elem, this );
++	},
++
++	add: function( selector, context ) {
++		var set = typeof selector === "string" ?
++				jQuery( selector, context ) :
++				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
++			all = jQuery.merge( this.get(), set );
++
++		return this.pushStack( jQuery.unique(all) );
++	},
++
++	addBack: function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter(selector)
++		);
++	}
++});
++
++jQuery.fn.andSelf = jQuery.fn.addBack;
++
++function sibling( cur, dir ) {
++	do {
++		cur = cur[ dir ];
++	} while ( cur && cur.nodeType !== 1 );
++
++	return cur;
++}
++
++jQuery.each({
++	parent: function( elem ) {
++		var parent = elem.parentNode;
++		return parent && parent.nodeType !== 11 ? parent : null;
++	},
++	parents: function( elem ) {
++		return jQuery.dir( elem, "parentNode" );
++	},
++	parentsUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "parentNode", until );
++	},
++	next: function( elem ) {
++		return sibling( elem, "nextSibling" );
++	},
++	prev: function( elem ) {
++		return sibling( elem, "previousSibling" );
++	},
++	nextAll: function( elem ) {
++		return jQuery.dir( elem, "nextSibling" );
++	},
++	prevAll: function( elem ) {
++		return jQuery.dir( elem, "previousSibling" );
++	},
++	nextUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "nextSibling", until );
++	},
++	prevUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "previousSibling", until );
++	},
++	siblings: function( elem ) {
++		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
++	},
++	children: function( elem ) {
++		return jQuery.sibling( elem.firstChild );
++	},
++	contents: function( elem ) {
++		return jQuery.nodeName( elem, "iframe" ) ?
++			elem.contentDocument || elem.contentWindow.document :
++			jQuery.merge( [], elem.childNodes );
++	}
++}, function( name, fn ) {
++	jQuery.fn[ name ] = function( until, selector ) {
++		var ret = jQuery.map( this, fn, until );
++
++		if ( !runtil.test( name ) ) {
++			selector = until;
++		}
++
++		if ( selector && typeof selector === "string" ) {
++			ret = jQuery.filter( selector, ret );
++		}
++
++		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
++
++		if ( this.length > 1 && rparentsprev.test( name ) ) {
++			ret = ret.reverse();
++		}
++
++		return this.pushStack( ret );
++	};
++});
++
++jQuery.extend({
++	filter: function( expr, elems, not ) {
++		if ( not ) {
++			expr = ":not(" + expr + ")";
++		}
++
++		return elems.length === 1 ?
++			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
++			jQuery.find.matches(expr, elems);
++	},
++
++	dir: function( elem, dir, until ) {
++		var matched = [],
++			cur = elem[ dir ];
++
++		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
++			if ( cur.nodeType === 1 ) {
++				matched.push( cur );
++			}
++			cur = cur[dir];
++		}
++		return matched;
++	},
++
++	sibling: function( n, elem ) {
++		var r = [];
++
++		for ( ; n; n = n.nextSibling ) {
++			if ( n.nodeType === 1 && n !== elem ) {
++				r.push( n );
++			}
++		}
++
++		return r;
++	}
++});
++
++// Implement the identical functionality for filter and not
++function winnow( elements, qualifier, keep ) {
++
++	// Can't pass null or undefined to indexOf in Firefox 4
++	// Set to 0 to skip string check
++	qualifier = qualifier || 0;
++
++	if ( jQuery.isFunction( qualifier ) ) {
++		return jQuery.grep(elements, function( elem, i ) {
++			var retVal = !!qualifier.call( elem, i, elem );
++			return retVal === keep;
++		});
++
++	} else if ( qualifier.nodeType ) {
++		return jQuery.grep(elements, function( elem ) {
++			return ( elem === qualifier ) === keep;
++		});
++
++	} else if ( typeof qualifier === "string" ) {
++		var filtered = jQuery.grep(elements, function( elem ) {
++			return elem.nodeType === 1;
++		});
++
++		if ( isSimple.test( qualifier ) ) {
++			return jQuery.filter(qualifier, filtered, !keep);
++		} else {
++			qualifier = jQuery.filter( qualifier, filtered );
++		}
++	}
++
++	return jQuery.grep(elements, function( elem ) {
++		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
++	});
++}
++function createSafeFragment( document ) {
++	var list = nodeNames.split( "|" ),
++		safeFrag = document.createDocumentFragment();
++
++	if ( safeFrag.createElement ) {
++		while ( list.length ) {
++			safeFrag.createElement(
++				list.pop()
++			);
++		}
++	}
++	return safeFrag;
++}
++
++var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
++		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
++	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
++	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
++	rleadingWhitespace = /^\s+/,
++	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
++	rtagName = /<([\w:]+)/,
++	rtbody = /<tbody/i,
++	rhtml = /<|&#?\w+;/,
++	rnoInnerhtml = /<(?:script|style|link)/i,
++	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
++	// checked="checked" or checked
++	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
++	rscriptType = /^$|\/(?:java|ecma)script/i,
++	rscriptTypeMasked = /^true\/(.*)/,
++	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
++
++	// We have to close these tags to support XHTML (#13200)
++	wrapMap = {
++		option: [ 1, "<select multiple='multiple'>", "</select>" ],
++		legend: [ 1, "<fieldset>", "</fieldset>" ],
++		area: [ 1, "<map>", "</map>" ],
++		param: [ 1, "<object>", "</object>" ],
++		thead: [ 1, "<table>", "</table>" ],
++		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
++		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
++		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
++
++		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
++		// unless wrapped in a div with non-breaking characters in front of it.
++		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
++	},
++	safeFragment = createSafeFragment( document ),
++	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
++
++wrapMap.optgroup = wrapMap.option;
++wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
++wrapMap.th = wrapMap.td;
++
++jQuery.fn.extend({
++	text: function( value ) {
++		return jQuery.access( this, function( value ) {
++			return value === undefined ?
++				jQuery.text( this ) :
++				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
++		}, null, value, arguments.length );
++	},
++
++	wrapAll: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapAll( html.call(this, i) );
++			});
++		}
++
++		if ( this[0] ) {
++			// The elements to wrap the target around
++			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
++
++			if ( this[0].parentNode ) {
++				wrap.insertBefore( this[0] );
++			}
++
++			wrap.map(function() {
++				var elem = this;
++
++				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
++					elem = elem.firstChild;
++				}
++
++				return elem;
++			}).append( this );
++		}
++
++		return this;
++	},
++
++	wrapInner: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapInner( html.call(this, i) );
++			});
++		}
++
++		return this.each(function() {
++			var self = jQuery( this ),
++				contents = self.contents();
++
++			if ( contents.length ) {
++				contents.wrapAll( html );
++
++			} else {
++				self.append( html );
++			}
++		});
++	},
++
++	wrap: function( html ) {
++		var isFunction = jQuery.isFunction( html );
++
++		return this.each(function(i) {
++			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
++		});
++	},
++
++	unwrap: function() {
++		return this.parent().each(function() {
++			if ( !jQuery.nodeName( this, "body" ) ) {
++				jQuery( this ).replaceWith( this.childNodes );
++			}
++		}).end();
++	},
++
++	append: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
++				this.appendChild( elem );
++			}
++		});
++	},
++
++	prepend: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
++				this.insertBefore( elem, this.firstChild );
++			}
++		});
++	},
++
++	before: function() {
++		return this.domManip( arguments, false, function( elem ) {
++			if ( this.parentNode ) {
++				this.parentNode.insertBefore( elem, this );
++			}
++		});
++	},
++
++	after: function() {
++		return this.domManip( arguments, false, function( elem ) {
++			if ( this.parentNode ) {
++				this.parentNode.insertBefore( elem, this.nextSibling );
++			}
++		});
++	},
++
++	// keepData is for internal use only--do not document
++	remove: function( selector, keepData ) {
++		var elem,
++			i = 0;
++
++		for ( ; (elem = this[i]) != null; i++ ) {
++			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
++				if ( !keepData && elem.nodeType === 1 ) {
++					jQuery.cleanData( getAll( elem ) );
++				}
++
++				if ( elem.parentNode ) {
++					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
++						setGlobalEval( getAll( elem, "script" ) );
++					}
++					elem.parentNode.removeChild( elem );
++				}
++			}
++		}
++
++		return this;
++	},
++
++	empty: function() {
++		var elem,
++			i = 0;
++
++		for ( ; (elem = this[i]) != null; i++ ) {
++			// Remove element nodes and prevent memory leaks
++			if ( elem.nodeType === 1 ) {
++				jQuery.cleanData( getAll( elem, false ) );
++			}
++
++			// Remove any remaining nodes
++			while ( elem.firstChild ) {
++				elem.removeChild( elem.firstChild );
++			}
++
++			// If this is a select, ensure that it displays empty (#12336)
++			// Support: IE<9
++			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
++				elem.options.length = 0;
++			}
++		}
++
++		return this;
++	},
++
++	clone: function( dataAndEvents, deepDataAndEvents ) {
++		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
++		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
++
++		return this.map( function () {
++			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
++		});
++	},
++
++	html: function( value ) {
++		return jQuery.access( this, function( value ) {
++			var elem = this[0] || {},
++				i = 0,
++				l = this.length;
++
++			if ( value === undefined ) {
++				return elem.nodeType === 1 ?
++					elem.innerHTML.replace( rinlinejQuery, "" ) :
++					undefined;
++			}
++
++			// See if we can take a shortcut and just use innerHTML
++			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
++				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
++				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
++				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
++
++				value = value.replace( rxhtmlTag, "<$1></$2>" );
++
++				try {
++					for (; i < l; i++ ) {
++						// Remove element nodes and prevent memory leaks
++						elem = this[i] || {};
++						if ( elem.nodeType === 1 ) {
++							jQuery.cleanData( getAll( elem, false ) );
++							elem.innerHTML = value;
++						}
++					}
++
++					elem = 0;
++
++				// If using innerHTML throws an exception, use the fallback method
++				} catch(e) {}
++			}
++
++			if ( elem ) {
++				this.empty().append( value );
++			}
++		}, null, value, arguments.length );
++	},
++
++	replaceWith: function( value ) {
++		var isFunc = jQuery.isFunction( value );
++
++		// Make sure that the elements are removed from the DOM before they are inserted
++		// this can help fix replacing a parent with child elements
++		if ( !isFunc && typeof value !== "string" ) {
++			value = jQuery( value ).not( this ).detach();
++		}
++
++		return this.domManip( [ value ], true, function( elem ) {
++			var next = this.nextSibling,
++				parent = this.parentNode;
++
++			if ( parent ) {
++				jQuery( this ).remove();
++				parent.insertBefore( elem, next );
++			}
++		});
++	},
++
++	detach: function( selector ) {
++		return this.remove( selector, true );
++	},
++
++	domManip: function( args, table, callback ) {
++
++		// Flatten any nested arrays
++		args = core_concat.apply( [], args );
++
++		var first, node, hasScripts,
++			scripts, doc, fragment,
++			i = 0,
++			l = this.length,
++			set = this,
++			iNoClone = l - 1,
++			value = args[0],
++			isFunction = jQuery.isFunction( value );
++
++		// We can't cloneNode fragments that contain checked, in WebKit
++		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
++			return this.each(function( index ) {
++				var self = set.eq( index );
++				if ( isFunction ) {
++					args[0] = value.call( this, index, table ? self.html() : undefined );
++				}
++				self.domManip( args, table, callback );
++			});
++		}
++
++		if ( l ) {
++			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
++			first = fragment.firstChild;
++
++			if ( fragment.childNodes.length === 1 ) {
++				fragment = first;
++			}
++
++			if ( first ) {
++				table = table && jQuery.nodeName( first, "tr" );
++				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
++				hasScripts = scripts.length;
++
++				// Use the original fragment for the last item instead of the first because it can end up
++				// being emptied incorrectly in certain situations (#8070).
++				for ( ; i < l; i++ ) {
++					node = fragment;
++
++					if ( i !== iNoClone ) {
++						node = jQuery.clone( node, true, true );
++
++						// Keep references to cloned scripts for later restoration
++						if ( hasScripts ) {
++							jQuery.merge( scripts, getAll( node, "script" ) );
++						}
++					}
++
++					callback.call(
++						table && jQuery.nodeName( this[i], "table" ) ?
++							findOrAppend( this[i], "tbody" ) :
++							this[i],
++						node,
++						i
++					);
++				}
++
++				if ( hasScripts ) {
++					doc = scripts[ scripts.length - 1 ].ownerDocument;
++
++					// Reenable scripts
++					jQuery.map( scripts, restoreScript );
++
++					// Evaluate executable scripts on first document insertion
++					for ( i = 0; i < hasScripts; i++ ) {
++						node = scripts[ i ];
++						if ( rscriptType.test( node.type || "" ) &&
++							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
++
++							if ( node.src ) {
++								// Hope ajax is available...
++								jQuery.ajax({
++									url: node.src,
++									type: "GET",
++									dataType: "script",
++									async: false,
++									global: false,
++									"throws": true
++								});
++							} else {
++								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
++							}
++						}
++					}
++				}
++
++				// Fix #11809: Avoid leaking memory
++				fragment = first = null;
++			}
++		}
++
++		return this;
++	}
++});
++
++function findOrAppend( elem, tag ) {
++	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
++}
++
++// Replace/restore the type attribute of script elements for safe DOM manipulation
++function disableScript( elem ) {
++	var attr = elem.getAttributeNode("type");
++	elem.type = ( attr && attr.specified ) + "/" + elem.type;
++	return elem;
++}
++function restoreScript( elem ) {
++	var match = rscriptTypeMasked.exec( elem.type );
++	if ( match ) {
++		elem.type = match[1];
++	} else {
++		elem.removeAttribute("type");
++	}
++	return elem;
++}
++
++// Mark scripts as having already been evaluated
++function setGlobalEval( elems, refElements ) {
++	var elem,
++		i = 0;
++	for ( ; (elem = elems[i]) != null; i++ ) {
++		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
++	}
++}
++
++function cloneCopyEvent( src, dest ) {
++
++	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
++		return;
++	}
++
++	var type, i, l,
++		oldData = jQuery._data( src ),
++		curData = jQuery._data( dest, oldData ),
++		events = oldData.events;
++
++	if ( events ) {
++		delete curData.handle;
++		curData.events = {};
++
++		for ( type in events ) {
++			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
++				jQuery.event.add( dest, type, events[ type ][ i ] );
++			}
++		}
++	}
++
++	// make the cloned public data object a copy from the original
++	if ( curData.data ) {
++		curData.data = jQuery.extend( {}, curData.data );
++	}
++}
++
++function fixCloneNodeIssues( src, dest ) {
++	var nodeName, e, data;
++
++	// We do not need to do anything for non-Elements
++	if ( dest.nodeType !== 1 ) {
++		return;
++	}
++
++	nodeName = dest.nodeName.toLowerCase();
++
++	// IE6-8 copies events bound via attachEvent when using cloneNode.
++	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
++		data = jQuery._data( dest );
++
++		for ( e in data.events ) {
++			jQuery.removeEvent( dest, e, data.handle );
++		}
++
++		// Event data gets referenced instead of copied if the expando gets copied too
++		dest.removeAttribute( jQuery.expando );
++	}
++
++	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
++	if ( nodeName === "script" && dest.text !== src.text ) {
++		disableScript( dest ).text = src.text;
++		restoreScript( dest );
++
++	// IE6-10 improperly clones children of object elements using classid.
++	// IE10 throws NoModificationAllowedError if parent is null, #12132.
++	} else if ( nodeName === "object" ) {
++		if ( dest.parentNode ) {
++			dest.outerHTML = src.outerHTML;
++		}
++
++		// This path appears unavoidable for IE9. When cloning an object
++		// element in IE9, the outerHTML strategy above is not sufficient.
++		// If the src has innerHTML and the destination does not,
++		// copy the src.innerHTML into the dest.innerHTML. #10324
++		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
++			dest.innerHTML = src.innerHTML;
++		}
++
++	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
++		// IE6-8 fails to persist the checked state of a cloned checkbox
++		// or radio button. Worse, IE6-7 fail to give the cloned element
++		// a checked appearance if the defaultChecked value isn't also set
++
++		dest.defaultChecked = dest.checked = src.checked;
++
++		// IE6-7 get confused and end up setting the value of a cloned
++		// checkbox/radio button to an empty string instead of "on"
++		if ( dest.value !== src.value ) {
++			dest.value = src.value;
++		}
++
++	// IE6-8 fails to return the selected option to the default selected
++	// state when cloning options
++	} else if ( nodeName === "option" ) {
++		dest.defaultSelected = dest.selected = src.defaultSelected;
++
++	// IE6-8 fails to set the defaultValue to the correct value when
++	// cloning other types of input fields
++	} else if ( nodeName === "input" || nodeName === "textarea" ) {
++		dest.defaultValue = src.defaultValue;
++	}
++}
++
++jQuery.each({
++	appendTo: "append",
++	prependTo: "prepend",
++	insertBefore: "before",
++	insertAfter: "after",
++	replaceAll: "replaceWith"
++}, function( name, original ) {
++	jQuery.fn[ name ] = function( selector ) {
++		var elems,
++			i = 0,
++			ret = [],
++			insert = jQuery( selector ),
++			last = insert.length - 1;
++
++		for ( ; i <= last; i++ ) {
++			elems = i === last ? this : this.clone(true);
++			jQuery( insert[i] )[ original ]( elems );
++
++			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
++			core_push.apply( ret, elems.get() );
++		}
++
++		return this.pushStack( ret );
++	};
++});
++
++function getAll( context, tag ) {
++	var elems, elem,
++		i = 0,
++		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
++			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
++			undefined;
++
++	if ( !found ) {
++		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
++			if ( !tag || jQuery.nodeName( elem, tag ) ) {
++				found.push( elem );
++			} else {
++				jQuery.merge( found, getAll( elem, tag ) );
++			}
++		}
++	}
++
++	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
++		jQuery.merge( [ context ], found ) :
++		found;
++}
++
++// Used in buildFragment, fixes the defaultChecked property
++function fixDefaultChecked( elem ) {
++	if ( manipulation_rcheckableType.test( elem.type ) ) {
++		elem.defaultChecked = elem.checked;
++	}
++}
++
++jQuery.extend({
++	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
++		var destElements, node, clone, i, srcElements,
++			inPage = jQuery.contains( elem.ownerDocument, elem );
++
++		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
++			clone = elem.cloneNode( true );
++
++		// IE<=8 does not properly clone detached, unknown element nodes
++		} else {
++			fragmentDiv.innerHTML = elem.outerHTML;
++			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
++		}
++
++		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
++				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
++
++			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
++			destElements = getAll( clone );
++			srcElements = getAll( elem );
++
++			// Fix all IE cloning issues
++			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
++				// Ensure that the destination node is not null; Fixes #9587
++				if ( destElements[i] ) {
++					fixCloneNodeIssues( node, destElements[i] );
++				}
++			}
++		}
++
++		// Copy the events from the original to the clone
++		if ( dataAndEvents ) {
++			if ( deepDataAndEvents ) {
++				srcElements = srcElements || getAll( elem );
++				destElements = destElements || getAll( clone );
++
++				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
++					cloneCopyEvent( node, destElements[i] );
++				}
++			} else {
++				cloneCopyEvent( elem, clone );
++			}
++		}
++
++		// Preserve script evaluation history
++		destElements = getAll( clone, "script" );
++		if ( destElements.length > 0 ) {
++			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
++		}
++
++		destElements = srcElements = node = null;
++
++		// Return the cloned set
++		return clone;
++	},
++
++	buildFragment: function( elems, context, scripts, selection ) {
++		var j, elem, contains,
++			tmp, tag, tbody, wrap,
++			l = elems.length,
++
++			// Ensure a safe fragment
++			safe = createSafeFragment( context ),
++
++			nodes = [],
++			i = 0;
++
++		for ( ; i < l; i++ ) {
++			elem = elems[ i ];
++
++			if ( elem || elem === 0 ) {
++
++				// Add nodes directly
++				if ( jQuery.type( elem ) === "object" ) {
++					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
++
++				// Convert non-html into a text node
++				} else if ( !rhtml.test( elem ) ) {
++					nodes.push( context.createTextNode( elem ) );
++
++				// Convert html into DOM nodes
++				} else {
++					tmp = tmp || safe.appendChild( context.createElement("div") );
++
++					// Deserialize a standard representation
++					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
++					wrap = wrapMap[ tag ] || wrapMap._default;
++
++					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
++
++					// Descend through wrappers to the right content
++					j = wrap[0];
++					while ( j-- ) {
++						tmp = tmp.lastChild;
++					}
++
++					// Manually add leading whitespace removed by IE
++					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
++						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
++					}
++
++					// Remove IE's autoinserted <tbody> from table fragments
++					if ( !jQuery.support.tbody ) {
++
++						// String was a <table>, *may* have spurious <tbody>
++						elem = tag === "table" && !rtbody.test( elem ) ?
++							tmp.firstChild :
++
++							// String was a bare <thead> or <tfoot>
++							wrap[1] === "<table>" && !rtbody.test( elem ) ?
++								tmp :
++								0;
++
++						j = elem && elem.childNodes.length;
++						while ( j-- ) {
++							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
++								elem.removeChild( tbody );
++							}
++						}
++					}
++
++					jQuery.merge( nodes, tmp.childNodes );
++
++					// Fix #12392 for WebKit and IE > 9
++					tmp.textContent = "";
++
++					// Fix #12392 for oldIE
++					while ( tmp.firstChild ) {
++						tmp.removeChild( tmp.firstChild );
++					}
++
++					// Remember the top-level container for proper cleanup
++					tmp = safe.lastChild;
++				}
++			}
++		}
++
++		// Fix #11356: Clear elements from fragment
++		if ( tmp ) {
++			safe.removeChild( tmp );
++		}
++
++		// Reset defaultChecked for any radios and checkboxes
++		// about to be appended to the DOM in IE 6/7 (#8060)
++		if ( !jQuery.support.appendChecked ) {
++			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
++		}
++
++		i = 0;
++		while ( (elem = nodes[ i++ ]) ) {
++
++			// #4087 - If origin and destination elements are the same, and this is
++			// that element, do not do anything
++			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
++				continue;
++			}
++
++			contains = jQuery.contains( elem.ownerDocument, elem );
++
++			// Append to fragment
++			tmp = getAll( safe.appendChild( elem ), "script" );
++
++			// Preserve script evaluation history
++			if ( contains ) {
++				setGlobalEval( tmp );
++			}
++
++			// Capture executables
++			if ( scripts ) {
++				j = 0;
++				while ( (elem = tmp[ j++ ]) ) {
++					if ( rscriptType.test( elem.type || "" ) ) {
++						scripts.push( elem );
++					}
++				}
++			}
++		}
++
++		tmp = null;
++
++		return safe;
++	},
++
++	cleanData: function( elems, /* internal */ acceptData ) {
++		var elem, type, id, data,
++			i = 0,
++			internalKey = jQuery.expando,
++			cache = jQuery.cache,
++			deleteExpando = jQuery.support.deleteExpando,
++			special = jQuery.event.special;
++
++		for ( ; (elem = elems[i]) != null; i++ ) {
++
++			if ( acceptData || jQuery.acceptData( elem ) ) {
++
++				id = elem[ internalKey ];
++				data = id && cache[ id ];
++
++				if ( data ) {
++					if ( data.events ) {
++						for ( type in data.events ) {
++							if ( special[ type ] ) {
++								jQuery.event.remove( elem, type );
++
++							// This is a shortcut to avoid jQuery.event.remove's overhead
++							} else {
++								jQuery.removeEvent( elem, type, data.handle );
++							}
++						}
++					}
++
++					// Remove cache only if it was not already removed by jQuery.event.remove
++					if ( cache[ id ] ) {
++
++						delete cache[ id ];
++
++						// IE does not allow us to delete expando properties from nodes,
++						// nor does it have a removeAttribute function on Document nodes;
++						// we must handle all of these cases
++						if ( deleteExpando ) {
++							delete elem[ internalKey ];
++
++						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
++							elem.removeAttribute( internalKey );
++
++						} else {
++							elem[ internalKey ] = null;
++						}
++
++						core_deletedIds.push( id );
++					}
++				}
++			}
++		}
++	}
++});
++var iframe, getStyles, curCSS,
++	ralpha = /alpha\([^)]*\)/i,
++	ropacity = /opacity\s*=\s*([^)]*)/,
++	rposition = /^(top|right|bottom|left)$/,
++	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
++	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
++	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
++	rmargin = /^margin/,
++	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
++	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
++	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
++	elemdisplay = { BODY: "block" },
++
++	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
++	cssNormalTransform = {
++		letterSpacing: 0,
++		fontWeight: 400
++	},
++
++	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
++	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
++
++// return a css property mapped to a potentially vendor prefixed property
++function vendorPropName( style, name ) {
++
++	// shortcut for names that are not vendor prefixed
++	if ( name in style ) {
++		return name;
++	}
++
++	// check for vendor prefixed names
++	var capName = name.charAt(0).toUpperCase() + name.slice(1),
++		origName = name,
++		i = cssPrefixes.length;
++
++	while ( i-- ) {
++		name = cssPrefixes[ i ] + capName;
++		if ( name in style ) {
++			return name;
++		}
++	}
++
++	return origName;
++}
++
++function isHidden( elem, el ) {
++	// isHidden might be called from jQuery#filter function;
++	// in that case, element will be second argument
++	elem = el || elem;
++	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
++}
++
++function showHide( elements, show ) {
++	var display, elem, hidden,
++		values = [],
++		index = 0,
++		length = elements.length;
++
++	for ( ; index < length; index++ ) {
++		elem = elements[ index ];
++		if ( !elem.style ) {
++			continue;
++		}
++
++		values[ index ] = jQuery._data( elem, "olddisplay" );
++		display = elem.style.display;
++		if ( show ) {
++			// Reset the inline display of this element to learn if it is
++			// being hidden by cascaded rules or not
++			if ( !values[ index ] && display === "none" ) {
++				elem.style.display = "";
++			}
++
++			// Set elements which have been overridden with display: none
++			// in a stylesheet to whatever the default browser style is
++			// for such an element
++			if ( elem.style.display === "" && isHidden( elem ) ) {
++				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
++			}
++		} else {
++
++			if ( !values[ index ] ) {
++				hidden = isHidden( elem );
++
++				if ( display && display !== "none" || !hidden ) {
++					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
++				}
++			}
++		}
++	}
++
++	// Set the display of most of the elements in a second loop
++	// to avoid the constant reflow
++	for ( index = 0; index < length; index++ ) {
++		elem = elements[ index ];
++		if ( !elem.style ) {
++			continue;
++		}
++		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
++			elem.style.display = show ? values[ index ] || "" : "none";
++		}
++	}
++
++	return elements;
++}
++
++jQuery.fn.extend({
++	css: function( name, value ) {
++		return jQuery.access( this, function( elem, name, value ) {
++			var len, styles,
++				map = {},
++				i = 0;
++
++			if ( jQuery.isArray( name ) ) {
++				styles = getStyles( elem );
++				len = name.length;
++
++				for ( ; i < len; i++ ) {
++					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
++				}
++
++				return map;
++			}
++
++			return value !== undefined ?
++				jQuery.style( elem, name, value ) :
++				jQuery.css( elem, name );
++		}, name, value, arguments.length > 1 );
++	},
++	show: function() {
++		return showHide( this, true );
++	},
++	hide: function() {
++		return showHide( this );
++	},
++	toggle: function( state ) {
++		var bool = typeof state === "boolean";
++
++		return this.each(function() {
++			if ( bool ? state : isHidden( this ) ) {
++				jQuery( this ).show();
++			} else {
++				jQuery( this ).hide();
++			}
++		});
++	}
++});
++
++jQuery.extend({
++	// Add in style property hooks for overriding the default
++	// behavior of getting and setting a style property
++	cssHooks: {
++		opacity: {
++			get: function( elem, computed ) {
++				if ( computed ) {
++					// We should always get a number back from opacity
++					var ret = curCSS( elem, "opacity" );
++					return ret === "" ? "1" : ret;
++				}
++			}
++		}
++	},
++
++	// Exclude the following css properties to add px
++	cssNumber: {
++		"columnCount": true,
++		"fillOpacity": true,
++		"fontWeight": true,
++		"lineHeight": true,
++		"opacity": true,
++		"orphans": true,
++		"widows": true,
++		"zIndex": true,
++		"zoom": true
++	},
++
++	// Add in properties whose names you wish to fix before
++	// setting or getting the value
++	cssProps: {
++		// normalize float css property
++		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
++	},
++
++	// Get and set the style property on a DOM Node
++	style: function( elem, name, value, extra ) {
++		// Don't set styles on text and comment nodes
++		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
++			return;
++		}
++
++		// Make sure that we're working with the right name
++		var ret, type, hooks,
++			origName = jQuery.camelCase( name ),
++			style = elem.style;
++
++		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
++
++		// gets hook for the prefixed version
++		// followed by the unprefixed version
++		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
++
++		// Check if we're setting a value
++		if ( value !== undefined ) {
++			type = typeof value;
++
++			// convert relative number strings (+= or -=) to relative numbers. #7345
++			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
++				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
++				// Fixes bug #9237
++				type = "number";
++			}
++
++			// Make sure that NaN and null values aren't set. See: #7116
++			if ( value == null || type === "number" && isNaN( value ) ) {
++				return;
++			}
++
++			// If a number was passed in, add 'px' to the (except for certain CSS properties)
++			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
++				value += "px";
++			}
++
++			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
++			// but it would mean to define eight (for every problematic property) identical functions
++			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
++				style[ name ] = "inherit";
++			}
++
++			// If a hook was provided, use that value, otherwise just set the specified value
++			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
++
++				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
++				// Fixes bug #5509
++				try {
++					style[ name ] = value;
++				} catch(e) {}
++			}
++
++		} else {
++			// If a hook was provided get the non-computed value from there
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
++				return ret;
++			}
++
++			// Otherwise just get the value from the style object
++			return style[ name ];
++		}
++	},
++
++	css: function( elem, name, extra, styles ) {
++		var num, val, hooks,
++			origName = jQuery.camelCase( name );
++
++		// Make sure that we're working with the right name
++		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
++
++		// gets hook for the prefixed version
++		// followed by the unprefixed version
++		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
++
++		// If a hook was provided get the computed value from there
++		if ( hooks && "get" in hooks ) {
++			val = hooks.get( elem, true, extra );
++		}
++
++		// Otherwise, if a way to get the computed value exists, use that
++		if ( val === undefined ) {
++			val = curCSS( elem, name, styles );
++		}
++
++		//convert "normal" to computed value
++		if ( val === "normal" && name in cssNormalTransform ) {
++			val = cssNormalTransform[ name ];
++		}
++
++		// Return, converting to number if forced or a qualifier was provided and val looks numeric
++		if ( extra === "" || extra ) {
++			num = parseFloat( val );
++			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
++		}
++		return val;
++	},
++
++	// A method for quickly swapping in/out CSS properties to get correct calculations
++	swap: function( elem, options, callback, args ) {
++		var ret, name,
++			old = {};
++
++		// Remember the old values, and insert the new ones
++		for ( name in options ) {
++			old[ name ] = elem.style[ name ];
++			elem.style[ name ] = options[ name ];
++		}
++
++		ret = callback.apply( elem, args || [] );
++
++		// Revert the old values
++		for ( name in options ) {
++			elem.style[ name ] = old[ name ];
++		}
++
++		return ret;
++	}
++});
++
++// NOTE: we've included the "window" in window.getComputedStyle
++// because jsdom on node.js will break without it.
++if ( window.getComputedStyle ) {
++	getStyles = function( elem ) {
++		return window.getComputedStyle( elem, null );
++	};
++
++	curCSS = function( elem, name, _computed ) {
++		var width, minWidth, maxWidth,
++			computed = _computed || getStyles( elem ),
++
++			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
++			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
++			style = elem.style;
++
++		if ( computed ) {
++
++			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
++				ret = jQuery.style( elem, name );
++			}
++
++			// A tribute to the "awesome hack by Dean Edwards"
++			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
++			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
++			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
++			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
++
++				// Remember the original values
++				width = style.width;
++				minWidth = style.minWidth;
++				maxWidth = style.maxWidth;
++
++				// Put in the new values to get a computed value out
++				style.minWidth = style.maxWidth = style.width = ret;
++				ret = computed.width;
++
++				// Revert the changed values
++				style.width = width;
++				style.minWidth = minWidth;
++				style.maxWidth = maxWidth;
++			}
++		}
++
++		return ret;
++	};
++} else if ( document.documentElement.currentStyle ) {
++	getStyles = function( elem ) {
++		return elem.currentStyle;
++	};
++
++	curCSS = function( elem, name, _computed ) {
++		var left, rs, rsLeft,
++			computed = _computed || getStyles( elem ),
++			ret = computed ? computed[ name ] : undefined,
++			style = elem.style;
++
++		// Avoid setting ret to empty string here
++		// so we don't default to auto
++		if ( ret == null && style && style[ name ] ) {
++			ret = style[ name ];
++		}
++
++		// From the awesome hack by Dean Edwards
++		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
++
++		// If we're not dealing with a regular pixel number
++		// but a number that has a weird ending, we need to convert it to pixels
++		// but not position css attributes, as those are proportional to the parent element instead
++		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
++		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
++
++			// Remember the original values
++			left = style.left;
++			rs = elem.runtimeStyle;
++			rsLeft = rs && rs.left;
++
++			// Put in the new values to get a computed value out
++			if ( rsLeft ) {
++				rs.left = elem.currentStyle.left;
++			}
++			style.left = name === "fontSize" ? "1em" : ret;
++			ret = style.pixelLeft + "px";
++
++			// Revert the changed values
++			style.left = left;
++			if ( rsLeft ) {
++				rs.left = rsLeft;
++			}
++		}
++
++		return ret === "" ? "auto" : ret;
++	};
++}
++
++function setPositiveNumber( elem, value, subtract ) {
++	var matches = rnumsplit.exec( value );
++	return matches ?
++		// Guard against undefined "subtract", e.g., when used as in cssHooks
++		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
++		value;
++}
++
++function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
++	var i = extra === ( isBorderBox ? "border" : "content" ) ?
++		// If we already have the right measurement, avoid augmentation
++		4 :
++		// Otherwise initialize for horizontal or vertical properties
++		name === "width" ? 1 : 0,
++
++		val = 0;
++
++	for ( ; i < 4; i += 2 ) {
++		// both box models exclude margin, so add it if we want it
++		if ( extra === "margin" ) {
++			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
++		}
++
++		if ( isBorderBox ) {
++			// border-box includes padding, so remove it if we want content
++			if ( extra === "content" ) {
++				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
++			}
++
++			// at this point, extra isn't border nor margin, so remove border
++			if ( extra !== "margin" ) {
++				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
++			}
++		} else {
++			// at this point, extra isn't content, so add padding
++			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
++
++			// at this point, extra isn't content nor padding, so add border
++			if ( extra !== "padding" ) {
++				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
++			}
++		}
++	}
++
++	return val;
++}
++
++function getWidthOrHeight( elem, name, extra ) {
++
++	// Start with offset property, which is equivalent to the border-box value
++	var valueIsBorderBox = true,
++		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
++		styles = getStyles( elem ),
++		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
++
++	// some non-html elements return undefined for offsetWidth, so check for null/undefined
++	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
++	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
++	if ( val <= 0 || val == null ) {
++		// Fall back to computed then uncomputed css if necessary
++		val = curCSS( elem, name, styles );
++		if ( val < 0 || val == null ) {
++			val = elem.style[ name ];
++		}
++
++		// Computed unit is not pixels. Stop here and return.
++		if ( rnumnonpx.test(val) ) {
++			return val;
++		}
++
++		// we need the check for style in case a browser which returns unreliable values
++		// for getComputedStyle silently falls back to the reliable elem.style
++		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
++
++		// Normalize "", auto, and prepare for extra
++		val = parseFloat( val ) || 0;
++	}
++
++	// use the active box-sizing model to add/subtract irrelevant styles
++	return ( val +
++		augmentWidthOrHeight(
++			elem,
++			name,
++			extra || ( isBorderBox ? "border" : "content" ),
++			valueIsBorderBox,
++			styles
++		)
++	) + "px";
++}
++
++// Try to determine the default display value of an element
++function css_defaultDisplay( nodeName ) {
++	var doc = document,
++		display = elemdisplay[ nodeName ];
++
++	if ( !display ) {
++		display = actualDisplay( nodeName, doc );
++
++		// If the simple way fails, read from inside an iframe
++		if ( display === "none" || !display ) {
++			// Use the already-created iframe if possible
++			iframe = ( iframe ||
++				jQuery("<iframe frameborder='0' width='0' height='0'/>")
++				.css( "cssText", "display:block !important" )
++			).appendTo( doc.documentElement );
++
++			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
++			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
++			doc.write("<!doctype html><html><body>");
++			doc.close();
++
++			display = actualDisplay( nodeName, doc );
++			iframe.detach();
++		}
++
++		// Store the correct default display
++		elemdisplay[ nodeName ] = display;
++	}
++
++	return display;
++}
++
++// Called ONLY from within css_defaultDisplay
++function actualDisplay( name, doc ) {
++	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
++		display = jQuery.css( elem[0], "display" );
++	elem.remove();
++	return display;
++}
++
++jQuery.each([ "height", "width" ], function( i, name ) {
++	jQuery.cssHooks[ name ] = {
++		get: function( elem, computed, extra ) {
++			if ( computed ) {
++				// certain elements can have dimension info if we invisibly show them
++				// however, it must have a current display style that would benefit from this
++				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
++					jQuery.swap( elem, cssShow, function() {
++						return getWidthOrHeight( elem, name, extra );
++					}) :
++					getWidthOrHeight( elem, name, extra );
++			}
++		},
++
++		set: function( elem, value, extra ) {
++			var styles = extra && getStyles( elem );
++			return setPositiveNumber( elem, value, extra ?
++				augmentWidthOrHeight(
++					elem,
++					name,
++					extra,
++					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
++					styles
++				) : 0
++			);
++		}
++	};
++});
++
++if ( !jQuery.support.opacity ) {
++	jQuery.cssHooks.opacity = {
++		get: function( elem, computed ) {
++			// IE uses filters for opacity
++			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
++				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
++				computed ? "1" : "";
++		},
++
++		set: function( elem, value ) {
++			var style = elem.style,
++				currentStyle = elem.currentStyle,
++				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
++				filter = currentStyle && currentStyle.filter || style.filter || "";
++
++			// IE has trouble with opacity if it does not have layout
++			// Force it by setting the zoom level
++			style.zoom = 1;
++
++			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
++			// if value === "", then remove inline opacity #12685
++			if ( ( value >= 1 || value === "" ) &&
++					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
++					style.removeAttribute ) {
++
++				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
++				// if "filter:" is present at all, clearType is disabled, we want to avoid this
++				// style.removeAttribute is IE Only, but so apparently is this code path...
++				style.removeAttribute( "filter" );
++
++				// if there is no filter style applied in a css rule or unset inline opacity, we are done
++				if ( value === "" || currentStyle && !currentStyle.filter ) {
++					return;
++				}
++			}
++
++			// otherwise, set new filter values
++			style.filter = ralpha.test( filter ) ?
++				filter.replace( ralpha, opacity ) :
++				filter + " " + opacity;
++		}
++	};
++}
++
++// These hooks cannot be added until DOM ready because the support test
++// for it is not run until after DOM ready
++jQuery(function() {
++	if ( !jQuery.support.reliableMarginRight ) {
++		jQuery.cssHooks.marginRight = {
++			get: function( elem, computed ) {
++				if ( computed ) {
++					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++					// Work around by temporarily setting element display to inline-block
++					return jQuery.swap( elem, { "display": "inline-block" },
++						curCSS, [ elem, "marginRight" ] );
++				}
++			}
++		};
++	}
++
++	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
++	// getComputedStyle returns percent when specified for top/left/bottom/right
++	// rather than make the css module depend on the offset module, we just check for it here
++	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
++		jQuery.each( [ "top", "left" ], function( i, prop ) {
++			jQuery.cssHooks[ prop ] = {
++				get: function( elem, computed ) {
++					if ( computed ) {
++						computed = curCSS( elem, prop );
++						// if curCSS returns percentage, fallback to offset
++						return rnumnonpx.test( computed ) ?
++							jQuery( elem ).position()[ prop ] + "px" :
++							computed;
++					}
++				}
++			};
++		});
++	}
++
++});
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.hidden = function( elem ) {
++		// Support: Opera <= 12.12
++		// Opera reports offsetWidths and offsetHeights less than zero on some elements
++		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
++			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
++	};
++
++	jQuery.expr.filters.visible = function( elem ) {
++		return !jQuery.expr.filters.hidden( elem );
++	};
++}
++
++// These hooks are used by animate to expand properties
++jQuery.each({
++	margin: "",
++	padding: "",
++	border: "Width"
++}, function( prefix, suffix ) {
++	jQuery.cssHooks[ prefix + suffix ] = {
++		expand: function( value ) {
++			var i = 0,
++				expanded = {},
++
++				// assumes a single number if not a string
++				parts = typeof value === "string" ? value.split(" ") : [ value ];
++
++			for ( ; i < 4; i++ ) {
++				expanded[ prefix + cssExpand[ i ] + suffix ] =
++					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
++			}
++
++			return expanded;
++		}
++	};
++
++	if ( !rmargin.test( prefix ) ) {
++		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
++	}
++});
++var r20 = /%20/g,
++	rbracket = /\[\]$/,
++	rCRLF = /\r?\n/g,
++	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
++	rsubmittable = /^(?:input|select|textarea|keygen)/i;
++
++jQuery.fn.extend({
++	serialize: function() {
++		return jQuery.param( this.serializeArray() );
++	},
++	serializeArray: function() {
++		return this.map(function(){
++			// Can add propHook for "elements" to filter or add form elements
++			var elements = jQuery.prop( this, "elements" );
++			return elements ? jQuery.makeArray( elements ) : this;
++		})
++		.filter(function(){
++			var type = this.type;
++			// Use .is(":disabled") so that fieldset[disabled] works
++			return this.name && !jQuery( this ).is( ":disabled" ) &&
++				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
++				( this.checked || !manipulation_rcheckableType.test( type ) );
++		})
++		.map(function( i, elem ){
++			var val = jQuery( this ).val();
++
++			return val == null ?
++				null :
++				jQuery.isArray( val ) ?
++					jQuery.map( val, function( val ){
++						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++					}) :
++					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++		}).get();
++	}
++});
++
++//Serialize an array of form elements or a set of
++//key/values into a query string
++jQuery.param = function( a, traditional ) {
++	var prefix,
++		s = [],
++		add = function( key, value ) {
++			// If value is a function, invoke it and return its value
++			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
++			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
++		};
++
++	// Set traditional to true for jQuery <= 1.3.2 behavior.
++	if ( traditional === undefined ) {
++		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
++	}
++
++	// If an array was passed in, assume that it is an array of form elements.
++	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
++		// Serialize the form elements
++		jQuery.each( a, function() {
++			add( this.name, this.value );
++		});
++
++	} else {
++		// If traditional, encode the "old" way (the way 1.3.2 or older
++		// did it), otherwise encode params recursively.
++		for ( prefix in a ) {
++			buildParams( prefix, a[ prefix ], traditional, add );
++		}
++	}
++
++	// Return the resulting serialization
++	return s.join( "&" ).replace( r20, "+" );
++};
++
++function buildParams( prefix, obj, traditional, add ) {
++	var name;
++
++	if ( jQuery.isArray( obj ) ) {
++		// Serialize array item.
++		jQuery.each( obj, function( i, v ) {
++			if ( traditional || rbracket.test( prefix ) ) {
++				// Treat each array item as a scalar.
++				add( prefix, v );
++
++			} else {
++				// Item is non-scalar (array or object), encode its numeric index.
++				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
++			}
++		});
++
++	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
++		// Serialize object item.
++		for ( name in obj ) {
++			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
++		}
++
++	} else {
++		// Serialize scalar item.
++		add( prefix, obj );
++	}
++}
++jQuery.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( i, name ) {
++
++	// Handle event binding
++	jQuery.fn[ name ] = function( data, fn ) {
++		return arguments.length > 0 ?
++			this.on( name, null, data, fn ) :
++			this.trigger( name );
++	};
++});
++
++jQuery.fn.hover = function( fnOver, fnOut ) {
++	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
++};
++var
++	// Document location
++	ajaxLocParts,
++	ajaxLocation,
++	ajax_nonce = jQuery.now(),
++
++	ajax_rquery = /\?/,
++	rhash = /#.*$/,
++	rts = /([?&])_=[^&]*/,
++	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
++	// #7653, #8125, #8152: local protocol detection
++	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
++	rnoContent = /^(?:GET|HEAD)$/,
++	rprotocol = /^\/\//,
++	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
++
++	// Keep a copy of the old load method
++	_load = jQuery.fn.load,
++
++	/* Prefilters
++	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
++	 * 2) These are called:
++	 *    - BEFORE asking for a transport
++	 *    - AFTER param serialization (s.data is a string if s.processData is true)
++	 * 3) key is the dataType
++	 * 4) the catchall symbol "*" can be used
++	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
++	 */
++	prefilters = {},
++
++	/* Transports bindings
++	 * 1) key is the dataType
++	 * 2) the catchall symbol "*" can be used
++	 * 3) selection will start with transport dataType and THEN go to "*" if needed
++	 */
++	transports = {},
++
++	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
++	allTypes = "*/".concat("*");
++
++// #8138, IE may throw an exception when accessing
++// a field from window.location if document.domain has been set
++try {
++	ajaxLocation = location.href;
++} catch( e ) {
++	// Use the href attribute of an A element
++	// since IE will modify it given document.location
++	ajaxLocation = document.createElement( "a" );
++	ajaxLocation.href = "";
++	ajaxLocation = ajaxLocation.href;
++}
++
++// Segment location into parts
++ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
++
++// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
++function addToPrefiltersOrTransports( structure ) {
++
++	// dataTypeExpression is optional and defaults to "*"
++	return function( dataTypeExpression, func ) {
++
++		if ( typeof dataTypeExpression !== "string" ) {
++			func = dataTypeExpression;
++			dataTypeExpression = "*";
++		}
++
++		var dataType,
++			i = 0,
++			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
++
++		if ( jQuery.isFunction( func ) ) {
++			// For each dataType in the dataTypeExpression
++			while ( (dataType = dataTypes[i++]) ) {
++				// Prepend if requested
++				if ( dataType[0] === "+" ) {
++					dataType = dataType.slice( 1 ) || "*";
++					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
++
++				// Otherwise append
++				} else {
++					(structure[ dataType ] = structure[ dataType ] || []).push( func );
++				}
++			}
++		}
++	};
++}
++
++// Base inspection function for prefilters and transports
++function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
++
++	var inspected = {},
++		seekingTransport = ( structure === transports );
++
++	function inspect( dataType ) {
++		var selected;
++		inspected[ dataType ] = true;
++		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
++			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
++			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
++				options.dataTypes.unshift( dataTypeOrTransport );
++				inspect( dataTypeOrTransport );
++				return false;
++			} else if ( seekingTransport ) {
++				return !( selected = dataTypeOrTransport );
++			}
++		});
++		return selected;
++	}
++
++	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
++}
++
++// A special extend for ajax options
++// that takes "flat" options (not to be deep extended)
++// Fixes #9887
++function ajaxExtend( target, src ) {
++	var deep, key,
++		flatOptions = jQuery.ajaxSettings.flatOptions || {};
++
++	for ( key in src ) {
++		if ( src[ key ] !== undefined ) {
++			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
++		}
++	}
++	if ( deep ) {
++		jQuery.extend( true, target, deep );
++	}
++
++	return target;
++}
++
++jQuery.fn.load = function( url, params, callback ) {
++	if ( typeof url !== "string" && _load ) {
++		return _load.apply( this, arguments );
++	}
++
++	var selector, response, type,
++		self = this,
++		off = url.indexOf(" ");
++
++	if ( off >= 0 ) {
++		selector = url.slice( off, url.length );
++		url = url.slice( 0, off );
++	}
++
++	// If it's a function
++	if ( jQuery.isFunction( params ) ) {
++
++		// We assume that it's the callback
++		callback = params;
++		params = undefined;
++
++	// Otherwise, build a param string
++	} else if ( params && typeof params === "object" ) {
++		type = "POST";
++	}
++
++	// If we have elements to modify, make the request
++	if ( self.length > 0 ) {
++		jQuery.ajax({
++			url: url,
++
++			// if "type" variable is undefined, then "GET" method will be used
++			type: type,
++			dataType: "html",
++			data: params
++		}).done(function( responseText ) {
++
++			// Save response for use in complete callback
++			response = arguments;
++
++			self.html( selector ?
++
++				// If a selector was specified, locate the right elements in a dummy div
++				// Exclude scripts to avoid IE 'Permission Denied' errors
++				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
++
++				// Otherwise use the full result
++				responseText );
++
++		}).complete( callback && function( jqXHR, status ) {
++			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
++		});
++	}
++
++	return this;
++};
++
++// Attach a bunch of functions for handling common AJAX events
++jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
++	jQuery.fn[ type ] = function( fn ){
++		return this.on( type, fn );
++	};
++});
++
++jQuery.each( [ "get", "post" ], function( i, method ) {
++	jQuery[ method ] = function( url, data, callback, type ) {
++		// shift arguments if data argument was omitted
++		if ( jQuery.isFunction( data ) ) {
++			type = type || callback;
++			callback = data;
++			data = undefined;
++		}
++
++		return jQuery.ajax({
++			url: url,
++			type: method,
++			dataType: type,
++			data: data,
++			success: callback
++		});
++	};
++});
++
++jQuery.extend({
++
++	// Counter for holding the number of active queries
++	active: 0,
++
++	// Last-Modified header cache for next request
++	lastModified: {},
++	etag: {},
++
++	ajaxSettings: {
++		url: ajaxLocation,
++		type: "GET",
++		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
++		global: true,
++		processData: true,
++		async: true,
++		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
++		/*
++		timeout: 0,
++		data: null,
++		dataType: null,
++		username: null,
++		password: null,
++		cache: null,
++		throws: false,
++		traditional: false,
++		headers: {},
++		*/
++
++		accepts: {
++			"*": allTypes,
++			text: "text/plain",
++			html: "text/html",
++			xml: "application/xml, text/xml",
++			json: "application/json, text/javascript"
++		},
++
++		contents: {
++			xml: /xml/,
++			html: /html/,
++			json: /json/
++		},
++
++		responseFields: {
++			xml: "responseXML",
++			text: "responseText"
++		},
++
++		// Data converters
++		// Keys separate source (or catchall "*") and destination types with a single space
++		converters: {
++
++			// Convert anything to text
++			"* text": window.String,
++
++			// Text to html (true = no transformation)
++			"text html": true,
++
++			// Evaluate text as a json expression
++			"text json": jQuery.parseJSON,
++
++			// Parse text as xml
++			"text xml": jQuery.parseXML
++		},
++
++		// For options that shouldn't be deep extended:
++		// you can add your own custom options here if
++		// and when you create one that shouldn't be
++		// deep extended (see ajaxExtend)
++		flatOptions: {
++			url: true,
++			context: true
++		}
++	},
++
++	// Creates a full fledged settings object into target
++	// with both ajaxSettings and settings fields.
++	// If target is omitted, writes into ajaxSettings.
++	ajaxSetup: function( target, settings ) {
++		return settings ?
++
++			// Building a settings object
++			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
++
++			// Extending ajaxSettings
++			ajaxExtend( jQuery.ajaxSettings, target );
++	},
++
++	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
++	ajaxTransport: addToPrefiltersOrTransports( transports ),
++
++	// Main method
++	ajax: function( url, options ) {
++
++		// If url is an object, simulate pre-1.5 signature
++		if ( typeof url === "object" ) {
++			options = url;
++			url = undefined;
++		}
++
++		// Force options to be an object
++		options = options || {};
++
++		var // Cross-domain detection vars
++			parts,
++			// Loop variable
++			i,
++			// URL without anti-cache param
++			cacheURL,
++			// Response headers as string
++			responseHeadersString,
++			// timeout handle
++			timeoutTimer,
++
++			// To know if global events are to be dispatched
++			fireGlobals,
++
++			transport,
++			// Response headers
++			responseHeaders,
++			// Create the final options object
++			s = jQuery.ajaxSetup( {}, options ),
++			// Callbacks context
++			callbackContext = s.context || s,
++			// Context for global events is callbackContext if it is a DOM node or jQuery collection
++			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
++				jQuery( callbackContext ) :
++				jQuery.event,
++			// Deferreds
++			deferred = jQuery.Deferred(),
++			completeDeferred = jQuery.Callbacks("once memory"),
++			// Status-dependent callbacks
++			statusCode = s.statusCode || {},
++			// Headers (they are sent all at once)
++			requestHeaders = {},
++			requestHeadersNames = {},
++			// The jqXHR state
++			state = 0,
++			// Default abort message
++			strAbort = "canceled",
++			// Fake xhr
++			jqXHR = {
++				readyState: 0,
++
++				// Builds headers hashtable if needed
++				getResponseHeader: function( key ) {
++					var match;
++					if ( state === 2 ) {
++						if ( !responseHeaders ) {
++							responseHeaders = {};
++							while ( (match = rheaders.exec( responseHeadersString )) ) {
++								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
++							}
++						}
++						match = responseHeaders[ key.toLowerCase() ];
++					}
++					return match == null ? null : match;
++				},
++
++				// Raw string
++				getAllResponseHeaders: function() {
++					return state === 2 ? responseHeadersString : null;
++				},
++
++				// Caches the header
++				setRequestHeader: function( name, value ) {
++					var lname = name.toLowerCase();
++					if ( !state ) {
++						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
++						requestHeaders[ name ] = value;
++					}
++					return this;
++				},
++
++				// Overrides response content-type header
++				overrideMimeType: function( type ) {
++					if ( !state ) {
++						s.mimeType = type;
++					}
++					return this;
++				},
++
++				// Status-dependent callbacks
++				statusCode: function( map ) {
++					var code;
++					if ( map ) {
++						if ( state < 2 ) {
++							for ( code in map ) {
++								// Lazy-add the new callback in a way that preserves old ones
++								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
++							}
++						} else {
++							// Execute the appropriate callbacks
++							jqXHR.always( map[ jqXHR.status ] );
++						}
++					}
++					return this;
++				},
++
++				// Cancel the request
++				abort: function( statusText ) {
++					var finalText = statusText || strAbort;
++					if ( transport ) {
++						transport.abort( finalText );
++					}
++					done( 0, finalText );
++					return this;
++				}
++			};
++
++		// Attach deferreds
++		deferred.promise( jqXHR ).complete = completeDeferred.add;
++		jqXHR.success = jqXHR.done;
++		jqXHR.error = jqXHR.fail;
++
++		// Remove hash character (#7531: and string promotion)
++		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
++		// Handle falsy url in the settings object (#10093: consistency with old signature)
++		// We also use the url parameter if available
++		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
++
++		// Alias method option to type as per ticket #12004
++		s.type = options.method || options.type || s.method || s.type;
++
++		// Extract dataTypes list
++		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
++
++		// A cross-domain request is in order when we have a protocol:host:port mismatch
++		if ( s.crossDomain == null ) {
++			parts = rurl.exec( s.url.toLowerCase() );
++			s.crossDomain = !!( parts &&
++				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
++					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
++						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
++			);
++		}
++
++		// Convert data if not already a string
++		if ( s.data && s.processData && typeof s.data !== "string" ) {
++			s.data = jQuery.param( s.data, s.traditional );
++		}
++
++		// Apply prefilters
++		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
++
++		// If request was aborted inside a prefilter, stop there
++		if ( state === 2 ) {
++			return jqXHR;
++		}
++
++		// We can fire global events as of now if asked to
++		fireGlobals = s.global;
++
++		// Watch for a new set of requests
++		if ( fireGlobals && jQuery.active++ === 0 ) {
++			jQuery.event.trigger("ajaxStart");
++		}
++
++		// Uppercase the type
++		s.type = s.type.toUpperCase();
++
++		// Determine if request has content
++		s.hasContent = !rnoContent.test( s.type );
++
++		// Save the URL in case we're toying with the If-Modified-Since
++		// and/or If-None-Match header later on
++		cacheURL = s.url;
++
++		// More options handling for requests with no content
++		if ( !s.hasContent ) {
++
++			// If data is available, append data to url
++			if ( s.data ) {
++				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
++				// #9682: remove data so that it's not used in an eventual retry
++				delete s.data;
++			}
++
++			// Add anti-cache in url if needed
++			if ( s.cache === false ) {
++				s.url = rts.test( cacheURL ) ?
++
++					// If there is already a '_' parameter, set its value
++					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
++
++					// Otherwise add one to the end
++					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
++			}
++		}
++
++		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++		if ( s.ifModified ) {
++			if ( jQuery.lastModified[ cacheURL ] ) {
++				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
++			}
++			if ( jQuery.etag[ cacheURL ] ) {
++				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
++			}
++		}
++
++		// Set the correct header, if data is being sent
++		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
++			jqXHR.setRequestHeader( "Content-Type", s.contentType );
++		}
++
++		// Set the Accepts header for the server, depending on the dataType
++		jqXHR.setRequestHeader(
++			"Accept",
++			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
++				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
++				s.accepts[ "*" ]
++		);
++
++		// Check for headers option
++		for ( i in s.headers ) {
++			jqXHR.setRequestHeader( i, s.headers[ i ] );
++		}
++
++		// Allow custom headers/mimetypes and early abort
++		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
++			// Abort if not done already and return
++			return jqXHR.abort();
++		}
++
++		// aborting is no longer a cancellation
++		strAbort = "abort";
++
++		// Install callbacks on deferreds
++		for ( i in { success: 1, error: 1, complete: 1 } ) {
++			jqXHR[ i ]( s[ i ] );
++		}
++
++		// Get transport
++		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
++
++		// If no transport, we auto-abort
++		if ( !transport ) {
++			done( -1, "No Transport" );
++		} else {
++			jqXHR.readyState = 1;
++
++			// Send global event
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
++			}
++			// Timeout
++			if ( s.async && s.timeout > 0 ) {
++				timeoutTimer = setTimeout(function() {
++					jqXHR.abort("timeout");
++				}, s.timeout );
++			}
++
++			try {
++				state = 1;
++				transport.send( requestHeaders, done );
++			} catch ( e ) {
++				// Propagate exception as error if not done
++				if ( state < 2 ) {
++					done( -1, e );
++				// Simply rethrow otherwise
++				} else {
++					throw e;
++				}
++			}
++		}
++
++		// Callback for when everything is done
++		function done( status, nativeStatusText, responses, headers ) {
++			var isSuccess, success, error, response, modified,
++				statusText = nativeStatusText;
++
++			// Called once
++			if ( state === 2 ) {
++				return;
++			}
++
++			// State is "done" now
++			state = 2;
++
++			// Clear timeout if it exists
++			if ( timeoutTimer ) {
++				clearTimeout( timeoutTimer );
++			}
++
++			// Dereference transport for early garbage collection
++			// (no matter how long the jqXHR object will be used)
++			transport = undefined;
++
++			// Cache response headers
++			responseHeadersString = headers || "";
++
++			// Set readyState
++			jqXHR.readyState = status > 0 ? 4 : 0;
++
++			// Get response data
++			if ( responses ) {
++				response = ajaxHandleResponses( s, jqXHR, responses );
++			}
++
++			// If successful, handle type chaining
++			if ( status >= 200 && status < 300 || status === 304 ) {
++
++				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++				if ( s.ifModified ) {
++					modified = jqXHR.getResponseHeader("Last-Modified");
++					if ( modified ) {
++						jQuery.lastModified[ cacheURL ] = modified;
++					}
++					modified = jqXHR.getResponseHeader("etag");
++					if ( modified ) {
++						jQuery.etag[ cacheURL ] = modified;
++					}
++				}
++
++				// if no content
++				if ( status === 204 ) {
++					isSuccess = true;
++					statusText = "nocontent";
++
++				// if not modified
++				} else if ( status === 304 ) {
++					isSuccess = true;
++					statusText = "notmodified";
++
++				// If we have data, let's convert it
++				} else {
++					isSuccess = ajaxConvert( s, response );
++					statusText = isSuccess.state;
++					success = isSuccess.data;
++					error = isSuccess.error;
++					isSuccess = !error;
++				}
++			} else {
++				// We extract error from statusText
++				// then normalize statusText and status for non-aborts
++				error = statusText;
++				if ( status || !statusText ) {
++					statusText = "error";
++					if ( status < 0 ) {
++						status = 0;
++					}
++				}
++			}
++
++			// Set data for the fake xhr object
++			jqXHR.status = status;
++			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
++
++			// Success/Error
++			if ( isSuccess ) {
++				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
++			} else {
++				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
++			}
++
++			// Status-dependent callbacks
++			jqXHR.statusCode( statusCode );
++			statusCode = undefined;
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
++					[ jqXHR, s, isSuccess ? success : error ] );
++			}
++
++			// Complete
++			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
++				// Handle the global AJAX counter
++				if ( !( --jQuery.active ) ) {
++					jQuery.event.trigger("ajaxStop");
++				}
++			}
++		}
++
++		return jqXHR;
++	},
++
++	getScript: function( url, callback ) {
++		return jQuery.get( url, undefined, callback, "script" );
++	},
++
++	getJSON: function( url, data, callback ) {
++		return jQuery.get( url, data, callback, "json" );
++	}
++});
++
++/* Handles responses to an ajax request:
++ * - sets all responseXXX fields accordingly
++ * - finds the right dataType (mediates between content-type and expected dataType)
++ * - returns the corresponding response
++ */
++function ajaxHandleResponses( s, jqXHR, responses ) {
++	var firstDataType, ct, finalDataType, type,
++		contents = s.contents,
++		dataTypes = s.dataTypes,
++		responseFields = s.responseFields;
++
++	// Fill responseXXX fields
++	for ( type in responseFields ) {
++		if ( type in responses ) {
++			jqXHR[ responseFields[type] ] = responses[ type ];
++		}
++	}
++
++	// Remove auto dataType and get content-type in the process
++	while( dataTypes[ 0 ] === "*" ) {
++		dataTypes.shift();
++		if ( ct === undefined ) {
++			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
++		}
++	}
++
++	// Check if we're dealing with a known content-type
++	if ( ct ) {
++		for ( type in contents ) {
++			if ( contents[ type ] && contents[ type ].test( ct ) ) {
++				dataTypes.unshift( type );
++				break;
++			}
++		}
++	}
++
++	// Check to see if we have a response for the expected dataType
++	if ( dataTypes[ 0 ] in responses ) {
++		finalDataType = dataTypes[ 0 ];
++	} else {
++		// Try convertible dataTypes
++		for ( type in responses ) {
++			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
++				finalDataType = type;
++				break;
++			}
++			if ( !firstDataType ) {
++				firstDataType = type;
++			}
++		}
++		// Or just use first one
++		finalDataType = finalDataType || firstDataType;
++	}
++
++	// If we found a dataType
++	// We add the dataType to the list if needed
++	// and return the corresponding response
++	if ( finalDataType ) {
++		if ( finalDataType !== dataTypes[ 0 ] ) {
++			dataTypes.unshift( finalDataType );
++		}
++		return responses[ finalDataType ];
++	}
++}
++
++// Chain conversions given the request and the original response
++function ajaxConvert( s, response ) {
++	var conv2, current, conv, tmp,
++		converters = {},
++		i = 0,
++		// Work with a copy of dataTypes in case we need to modify it for conversion
++		dataTypes = s.dataTypes.slice(),
++		prev = dataTypes[ 0 ];
++
++	// Apply the dataFilter if provided
++	if ( s.dataFilter ) {
++		response = s.dataFilter( response, s.dataType );
++	}
++
++	// Create converters map with lowercased keys
++	if ( dataTypes[ 1 ] ) {
++		for ( conv in s.converters ) {
++			converters[ conv.toLowerCase() ] = s.converters[ conv ];
++		}
++	}
++
++	// Convert to each sequential dataType, tolerating list modification
++	for ( ; (current = dataTypes[++i]); ) {
++
++		// There's only work to do if current dataType is non-auto
++		if ( current !== "*" ) {
++
++			// Convert response if prev dataType is non-auto and differs from current
++			if ( prev !== "*" && prev !== current ) {
++
++				// Seek a direct converter
++				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
++
++				// If none found, seek a pair
++				if ( !conv ) {
++					for ( conv2 in converters ) {
++
++						// If conv2 outputs current
++						tmp = conv2.split(" ");
++						if ( tmp[ 1 ] === current ) {
++
++							// If prev can be converted to accepted input
++							conv = converters[ prev + " " + tmp[ 0 ] ] ||
++								converters[ "* " + tmp[ 0 ] ];
++							if ( conv ) {
++								// Condense equivalence converters
++								if ( conv === true ) {
++									conv = converters[ conv2 ];
++
++								// Otherwise, insert the intermediate dataType
++								} else if ( converters[ conv2 ] !== true ) {
++									current = tmp[ 0 ];
++									dataTypes.splice( i--, 0, current );
++								}
++
++								break;
++							}
++						}
++					}
++				}
++
++				// Apply converter (if not an equivalence)
++				if ( conv !== true ) {
++
++					// Unless errors are allowed to bubble, catch and return them
++					if ( conv && s["throws"] ) {
++						response = conv( response );
++					} else {
++						try {
++							response = conv( response );
++						} catch ( e ) {
++							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
++						}
++					}
++				}
++			}
++
++			// Update prev for next iteration
++			prev = current;
++		}
++	}
++
++	return { state: "success", data: response };
++}
++// Install script dataType
++jQuery.ajaxSetup({
++	accepts: {
++		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
++	},
++	contents: {
++		script: /(?:java|ecma)script/
++	},
++	converters: {
++		"text script": function( text ) {
++			jQuery.globalEval( text );
++			return text;
++		}
++	}
++});
++
++// Handle cache's special case and global
++jQuery.ajaxPrefilter( "script", function( s ) {
++	if ( s.cache === undefined ) {
++		s.cache = false;
++	}
++	if ( s.crossDomain ) {
++		s.type = "GET";
++		s.global = false;
++	}
++});
++
++// Bind script tag hack transport
++jQuery.ajaxTransport( "script", function(s) {
++
++	// This transport only deals with cross domain requests
++	if ( s.crossDomain ) {
++
++		var script,
++			head = document.head || jQuery("head")[0] || document.documentElement;
++
++		return {
++
++			send: function( _, callback ) {
++
++				script = document.createElement("script");
++
++				script.async = true;
++
++				if ( s.scriptCharset ) {
++					script.charset = s.scriptCharset;
++				}
++
++				script.src = s.url;
++
++				// Attach handlers for all browsers
++				script.onload = script.onreadystatechange = function( _, isAbort ) {
++
++					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
++
++						// Handle memory leak in IE
++						script.onload = script.onreadystatechange = null;
++
++						// Remove the script
++						if ( script.parentNode ) {
++							script.parentNode.removeChild( script );
++						}
++
++						// Dereference the script
++						script = null;
++
++						// Callback if not abort
++						if ( !isAbort ) {
++							callback( 200, "success" );
++						}
++					}
++				};
++
++				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
++				// Use native DOM manipulation to avoid our domManip AJAX trickery
++				head.insertBefore( script, head.firstChild );
++			},
++
++			abort: function() {
++				if ( script ) {
++					script.onload( undefined, true );
++				}
++			}
++		};
++	}
++});
++var oldCallbacks = [],
++	rjsonp = /(=)\?(?=&|$)|\?\?/;
++
++// Default jsonp settings
++jQuery.ajaxSetup({
++	jsonp: "callback",
++	jsonpCallback: function() {
++		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
++		this[ callback ] = true;
++		return callback;
++	}
++});
++
++// Detect, normalize options and install callbacks for jsonp requests
++jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
++
++	var callbackName, overwritten, responseContainer,
++		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
++			"url" :
++			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
++		);
++
++	// Handle iff the expected data type is "jsonp" or we have a parameter to set
++	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
++
++		// Get callback name, remembering preexisting value associated with it
++		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
++			s.jsonpCallback() :
++			s.jsonpCallback;
++
++		// Insert callback into url or form data
++		if ( jsonProp ) {
++			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
++		} else if ( s.jsonp !== false ) {
++			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
++		}
++
++		// Use data converter to retrieve json after script execution
++		s.converters["script json"] = function() {
++			if ( !responseContainer ) {
++				jQuery.error( callbackName + " was not called" );
++			}
++			return responseContainer[ 0 ];
++		};
++
++		// force json dataType
++		s.dataTypes[ 0 ] = "json";
++
++		// Install callback
++		overwritten = window[ callbackName ];
++		window[ callbackName ] = function() {
++			responseContainer = arguments;
++		};
++
++		// Clean-up function (fires after converters)
++		jqXHR.always(function() {
++			// Restore preexisting value
++			window[ callbackName ] = overwritten;
++
++			// Save back as free
++			if ( s[ callbackName ] ) {
++				// make sure that re-using the options doesn't screw things around
++				s.jsonpCallback = originalSettings.jsonpCallback;
++
++				// save the callback name for future use
++				oldCallbacks.push( callbackName );
++			}
++
++			// Call if it was a function and we have a response
++			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
++				overwritten( responseContainer[ 0 ] );
++			}
++
++			responseContainer = overwritten = undefined;
++		});
++
++		// Delegate to script
++		return "script";
++	}
++});
++var xhrCallbacks, xhrSupported,
++	xhrId = 0,
++	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
++	xhrOnUnloadAbort = window.ActiveXObject && function() {
++		// Abort all pending requests
++		var key;
++		for ( key in xhrCallbacks ) {
++			xhrCallbacks[ key ]( undefined, true );
++		}
++	};
++
++// Functions to create xhrs
++function createStandardXHR() {
++	try {
++		return new window.XMLHttpRequest();
++	} catch( e ) {}
++}
++
++function createActiveXHR() {
++	try {
++		return new window.ActiveXObject("Microsoft.XMLHTTP");
++	} catch( e ) {}
++}
++
++// Create the request object
++// (This is still attached to ajaxSettings for backward compatibility)
++jQuery.ajaxSettings.xhr = window.ActiveXObject ?
++	/* Microsoft failed to properly
++	 * implement the XMLHttpRequest in IE7 (can't request local files),
++	 * so we use the ActiveXObject when it is available
++	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
++	 * we need a fallback.
++	 */
++	function() {
++		return !this.isLocal && createStandardXHR() || createActiveXHR();
++	} :
++	// For all other browsers, use the standard XMLHttpRequest object
++	createStandardXHR;
++
++// Determine support properties
++xhrSupported = jQuery.ajaxSettings.xhr();
++jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
++xhrSupported = jQuery.support.ajax = !!xhrSupported;
++
++// Create transport if the browser can provide an xhr
++if ( xhrSupported ) {
++
++	jQuery.ajaxTransport(function( s ) {
++		// Cross domain only allowed if supported through XMLHttpRequest
++		if ( !s.crossDomain || jQuery.support.cors ) {
++
++			var callback;
++
++			return {
++				send: function( headers, complete ) {
++
++					// Get a new xhr
++					var handle, i,
++						xhr = s.xhr();
++
++					// Open the socket
++					// Passing null username, generates a login popup on Opera (#2865)
++					if ( s.username ) {
++						xhr.open( s.type, s.url, s.async, s.username, s.password );
++					} else {
++						xhr.open( s.type, s.url, s.async );
++					}
++
++					// Apply custom fields if provided
++					if ( s.xhrFields ) {
++						for ( i in s.xhrFields ) {
++							xhr[ i ] = s.xhrFields[ i ];
++						}
++					}
++
++					// Override mime type if needed
++					if ( s.mimeType && xhr.overrideMimeType ) {
++						xhr.overrideMimeType( s.mimeType );
++					}
++
++					// X-Requested-With header
++					// For cross-domain requests, seeing as conditions for a preflight are
++					// akin to a jigsaw puzzle, we simply never set it to be sure.
++					// (it can always be set on a per-request basis or even using ajaxSetup)
++					// For same-domain requests, won't change header if already provided.
++					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
++						headers["X-Requested-With"] = "XMLHttpRequest";
++					}
++
++					// Need an extra try/catch for cross domain requests in Firefox 3
++					try {
++						for ( i in headers ) {
++							xhr.setRequestHeader( i, headers[ i ] );
++						}
++					} catch( err ) {}
++
++					// Do send the request
++					// This may raise an exception which is actually
++					// handled in jQuery.ajax (so no try/catch here)
++					xhr.send( ( s.hasContent && s.data ) || null );
++
++					// Listener
++					callback = function( _, isAbort ) {
++						var status, responseHeaders, statusText, responses;
++
++						// Firefox throws exceptions when accessing properties
++						// of an xhr when a network error occurred
++						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
++						try {
++
++							// Was never called and is aborted or complete
++							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
++
++								// Only called once
++								callback = undefined;
++
++								// Do not keep as active anymore
++								if ( handle ) {
++									xhr.onreadystatechange = jQuery.noop;
++									if ( xhrOnUnloadAbort ) {
++										delete xhrCallbacks[ handle ];
++									}
++								}
++
++								// If it's an abort
++								if ( isAbort ) {
++									// Abort it manually if needed
++									if ( xhr.readyState !== 4 ) {
++										xhr.abort();
++									}
++								} else {
++									responses = {};
++									status = xhr.status;
++									responseHeaders = xhr.getAllResponseHeaders();
++
++									// When requesting binary data, IE6-9 will throw an exception
++									// on any attempt to access responseText (#11426)
++									if ( typeof xhr.responseText === "string" ) {
++										responses.text = xhr.responseText;
++									}
++
++									// Firefox throws an exception when accessing
++									// statusText for faulty cross-domain requests
++									try {
++										statusText = xhr.statusText;
++									} catch( e ) {
++										// We normalize with Webkit giving an empty statusText
++										statusText = "";
++									}
++
++									// Filter status for non standard behaviors
++
++									// If the request is local and we have data: assume a success
++									// (success with no data won't get notified, that's the best we
++									// can do given current implementations)
++									if ( !status && s.isLocal && !s.crossDomain ) {
++										status = responses.text ? 200 : 404;
++									// IE - #1450: sometimes returns 1223 when it should be 204
++									} else if ( status === 1223 ) {
++										status = 204;
++									}
++								}
++							}
++						} catch( firefoxAccessException ) {
++							if ( !isAbort ) {
++								complete( -1, firefoxAccessException );
++							}
++						}
++
++						// Call complete if needed
++						if ( responses ) {
++							complete( status, statusText, responses, responseHeaders );
++						}
++					};
++
++					if ( !s.async ) {
++						// if we're in sync mode we fire the callback
++						callback();
++					} else if ( xhr.readyState === 4 ) {
++						// (IE6 & IE7) if it's in cache and has been
++						// retrieved directly we need to fire the callback
++						setTimeout( callback );
++					} else {
++						handle = ++xhrId;
++						if ( xhrOnUnloadAbort ) {
++							// Create the active xhrs callbacks list if needed
++							// and attach the unload handler
++							if ( !xhrCallbacks ) {
++								xhrCallbacks = {};
++								jQuery( window ).unload( xhrOnUnloadAbort );
++							}
++							// Add to list of active xhrs callbacks
++							xhrCallbacks[ handle ] = callback;
++						}
++						xhr.onreadystatechange = callback;
++					}
++				},
++
++				abort: function() {
++					if ( callback ) {
++						callback( undefined, true );
++					}
++				}
++			};
++		}
++	});
++}
++var fxNow, timerId,
++	rfxtypes = /^(?:toggle|show|hide)$/,
++	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
++	rrun = /queueHooks$/,
++	animationPrefilters = [ defaultPrefilter ],
++	tweeners = {
++		"*": [function( prop, value ) {
++			var end, unit,
++				tween = this.createTween( prop, value ),
++				parts = rfxnum.exec( value ),
++				target = tween.cur(),
++				start = +target || 0,
++				scale = 1,
++				maxIterations = 20;
++
++			if ( parts ) {
++				end = +parts[2];
++				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
++
++				// We need to compute starting value
++				if ( unit !== "px" && start ) {
++					// Iteratively approximate from a nonzero starting point
++					// Prefer the current property, because this process will be trivial if it uses the same units
++					// Fallback to end or a simple constant
++					start = jQuery.css( tween.elem, prop, true ) || end || 1;
++
++					do {
++						// If previous iteration zeroed out, double until we get *something*
++						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
++						scale = scale || ".5";
++
++						// Adjust and apply
++						start = start / scale;
++						jQuery.style( tween.elem, prop, start + unit );
++
++					// Update scale, tolerating zero or NaN from tween.cur()
++					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
++					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
++				}
++
++				tween.unit = unit;
++				tween.start = start;
++				// If a +=/-= token was provided, we're doing a relative animation
++				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
++			}
++			return tween;
++		}]
++	};
++
++// Animations created synchronously will run synchronously
++function createFxNow() {
++	setTimeout(function() {
++		fxNow = undefined;
++	});
++	return ( fxNow = jQuery.now() );
++}
++
++function createTweens( animation, props ) {
++	jQuery.each( props, function( prop, value ) {
++		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
++			index = 0,
++			length = collection.length;
++		for ( ; index < length; index++ ) {
++			if ( collection[ index ].call( animation, prop, value ) ) {
++
++				// we're done with this property
++				return;
++			}
++		}
++	});
++}
++
++function Animation( elem, properties, options ) {
++	var result,
++		stopped,
++		index = 0,
++		length = animationPrefilters.length,
++		deferred = jQuery.Deferred().always( function() {
++			// don't match elem in the :animated selector
++			delete tick.elem;
++		}),
++		tick = function() {
++			if ( stopped ) {
++				return false;
++			}
++			var currentTime = fxNow || createFxNow(),
++				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
++				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
++				temp = remaining / animation.duration || 0,
++				percent = 1 - temp,
++				index = 0,
++				length = animation.tweens.length;
++
++			for ( ; index < length ; index++ ) {
++				animation.tweens[ index ].run( percent );
++			}
++
++			deferred.notifyWith( elem, [ animation, percent, remaining ]);
++
++			if ( percent < 1 && length ) {
++				return remaining;
++			} else {
++				deferred.resolveWith( elem, [ animation ] );
++				return false;
++			}
++		},
++		animation = deferred.promise({
++			elem: elem,
++			props: jQuery.extend( {}, properties ),
++			opts: jQuery.extend( true, { specialEasing: {} }, options ),
++			originalProperties: properties,
++			originalOptions: options,
++			startTime: fxNow || createFxNow(),
++			duration: options.duration,
++			tweens: [],
++			createTween: function( prop, end ) {
++				var tween = jQuery.Tween( elem, animation.opts, prop, end,
++						animation.opts.specialEasing[ prop ] || animation.opts.easing );
++				animation.tweens.push( tween );
++				return tween;
++			},
++			stop: function( gotoEnd ) {
++				var index = 0,
++					// if we are going to the end, we want to run all the tweens
++					// otherwise we skip this part
++					length = gotoEnd ? animation.tweens.length : 0;
++				if ( stopped ) {
++					return this;
++				}
++				stopped = true;
++				for ( ; index < length ; index++ ) {
++					animation.tweens[ index ].run( 1 );
++				}
++
++				// resolve when we played the last frame
++				// otherwise, reject
++				if ( gotoEnd ) {
++					deferred.resolveWith( elem, [ animation, gotoEnd ] );
++				} else {
++					deferred.rejectWith( elem, [ animation, gotoEnd ] );
++				}
++				return this;
++			}
++		}),
++		props = animation.props;
++
++	propFilter( props, animation.opts.specialEasing );
++
++	for ( ; index < length ; index++ ) {
++		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
++		if ( result ) {
++			return result;
++		}
++	}
++
++	createTweens( animation, props );
++
++	if ( jQuery.isFunction( animation.opts.start ) ) {
++		animation.opts.start.call( elem, animation );
++	}
++
++	jQuery.fx.timer(
++		jQuery.extend( tick, {
++			elem: elem,
++			anim: animation,
++			queue: animation.opts.queue
++		})
++	);
++
++	// attach callbacks from options
++	return animation.progress( animation.opts.progress )
++		.done( animation.opts.done, animation.opts.complete )
++		.fail( animation.opts.fail )
++		.always( animation.opts.always );
++}
++
++function propFilter( props, specialEasing ) {
++	var value, name, index, easing, hooks;
++
++	// camelCase, specialEasing and expand cssHook pass
++	for ( index in props ) {
++		name = jQuery.camelCase( index );
++		easing = specialEasing[ name ];
++		value = props[ index ];
++		if ( jQuery.isArray( value ) ) {
++			easing = value[ 1 ];
++			value = props[ index ] = value[ 0 ];
++		}
++
++		if ( index !== name ) {
++			props[ name ] = value;
++			delete props[ index ];
++		}
++
++		hooks = jQuery.cssHooks[ name ];
++		if ( hooks && "expand" in hooks ) {
++			value = hooks.expand( value );
++			delete props[ name ];
++
++			// not quite $.extend, this wont overwrite keys already present.
++			// also - reusing 'index' from above because we have the correct "name"
++			for ( index in value ) {
++				if ( !( index in props ) ) {
++					props[ index ] = value[ index ];
++					specialEasing[ index ] = easing;
++				}
++			}
++		} else {
++			specialEasing[ name ] = easing;
++		}
++	}
++}
++
++jQuery.Animation = jQuery.extend( Animation, {
++
++	tweener: function( props, callback ) {
++		if ( jQuery.isFunction( props ) ) {
++			callback = props;
++			props = [ "*" ];
++		} else {
++			props = props.split(" ");
++		}
++
++		var prop,
++			index = 0,
++			length = props.length;
++
++		for ( ; index < length ; index++ ) {
++			prop = props[ index ];
++			tweeners[ prop ] = tweeners[ prop ] || [];
++			tweeners[ prop ].unshift( callback );
++		}
++	},
++
++	prefilter: function( callback, prepend ) {
++		if ( prepend ) {
++			animationPrefilters.unshift( callback );
++		} else {
++			animationPrefilters.push( callback );
++		}
++	}
++});
++
++function defaultPrefilter( elem, props, opts ) {
++	/*jshint validthis:true */
++	var prop, index, length,
++		value, dataShow, toggle,
++		tween, hooks, oldfire,
++		anim = this,
++		style = elem.style,
++		orig = {},
++		handled = [],
++		hidden = elem.nodeType && isHidden( elem );
++
++	// handle queue: false promises
++	if ( !opts.queue ) {
++		hooks = jQuery._queueHooks( elem, "fx" );
++		if ( hooks.unqueued == null ) {
++			hooks.unqueued = 0;
++			oldfire = hooks.empty.fire;
++			hooks.empty.fire = function() {
++				if ( !hooks.unqueued ) {
++					oldfire();
++				}
++			};
++		}
++		hooks.unqueued++;
++
++		anim.always(function() {
++			// doing this makes sure that the complete handler will be called
++			// before this completes
++			anim.always(function() {
++				hooks.unqueued--;
++				if ( !jQuery.queue( elem, "fx" ).length ) {
++					hooks.empty.fire();
++				}
++			});
++		});
++	}
++
++	// height/width overflow pass
++	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
++		// Make sure that nothing sneaks out
++		// Record all 3 overflow attributes because IE does not
++		// change the overflow attribute when overflowX and
++		// overflowY are set to the same value
++		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
++
++		// Set display property to inline-block for height/width
++		// animations on inline elements that are having width/height animated
++		if ( jQuery.css( elem, "display" ) === "inline" &&
++				jQuery.css( elem, "float" ) === "none" ) {
++
++			// inline-level elements accept inline-block;
++			// block-level elements need to be inline with layout
++			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
++				style.display = "inline-block";
++
++			} else {
++				style.zoom = 1;
++			}
++		}
++	}
++
++	if ( opts.overflow ) {
++		style.overflow = "hidden";
++		if ( !jQuery.support.shrinkWrapBlocks ) {
++			anim.always(function() {
++				style.overflow = opts.overflow[ 0 ];
++				style.overflowX = opts.overflow[ 1 ];
++				style.overflowY = opts.overflow[ 2 ];
++			});
++		}
++	}
++
++
++	// show/hide pass
++	for ( index in props ) {
++		value = props[ index ];
++		if ( rfxtypes.exec( value ) ) {
++			delete props[ index ];
++			toggle = toggle || value === "toggle";
++			if ( value === ( hidden ? "hide" : "show" ) ) {
++				continue;
++			}
++			handled.push( index );
++		}
++	}
++
++	length = handled.length;
++	if ( length ) {
++		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
++		if ( "hidden" in dataShow ) {
++			hidden = dataShow.hidden;
++		}
++
++		// store state if its toggle - enables .stop().toggle() to "reverse"
++		if ( toggle ) {
++			dataShow.hidden = !hidden;
++		}
++		if ( hidden ) {
++			jQuery( elem ).show();
++		} else {
++			anim.done(function() {
++				jQuery( elem ).hide();
++			});
++		}
++		anim.done(function() {
++			var prop;
++			jQuery._removeData( elem, "fxshow" );
++			for ( prop in orig ) {
++				jQuery.style( elem, prop, orig[ prop ] );
++			}
++		});
++		for ( index = 0 ; index < length ; index++ ) {
++			prop = handled[ index ];
++			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
++			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
++
++			if ( !( prop in dataShow ) ) {
++				dataShow[ prop ] = tween.start;
++				if ( hidden ) {
++					tween.end = tween.start;
++					tween.start = prop === "width" || prop === "height" ? 1 : 0;
++				}
++			}
++		}
++	}
++}
++
++function Tween( elem, options, prop, end, easing ) {
++	return new Tween.prototype.init( elem, options, prop, end, easing );
++}
++jQuery.Tween = Tween;
++
++Tween.prototype = {
++	constructor: Tween,
++	init: function( elem, options, prop, end, easing, unit ) {
++		this.elem = elem;
++		this.prop = prop;
++		this.easing = easing || "swing";
++		this.options = options;
++		this.start = this.now = this.cur();
++		this.end = end;
++		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
++	},
++	cur: function() {
++		var hooks = Tween.propHooks[ this.prop ];
++
++		return hooks && hooks.get ?
++			hooks.get( this ) :
++			Tween.propHooks._default.get( this );
++	},
++	run: function( percent ) {
++		var eased,
++			hooks = Tween.propHooks[ this.prop ];
++
++		if ( this.options.duration ) {
++			this.pos = eased = jQuery.easing[ this.easing ](
++				percent, this.options.duration * percent, 0, 1, this.options.duration
++			);
++		} else {
++			this.pos = eased = percent;
++		}
++		this.now = ( this.end - this.start ) * eased + this.start;
++
++		if ( this.options.step ) {
++			this.options.step.call( this.elem, this.now, this );
++		}
++
++		if ( hooks && hooks.set ) {
++			hooks.set( this );
++		} else {
++			Tween.propHooks._default.set( this );
++		}
++		return this;
++	}
++};
++
++Tween.prototype.init.prototype = Tween.prototype;
++
++Tween.propHooks = {
++	_default: {
++		get: function( tween ) {
++			var result;
++
++			if ( tween.elem[ tween.prop ] != null &&
++				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
++				return tween.elem[ tween.prop ];
++			}
++
++			// passing an empty string as a 3rd parameter to .css will automatically
++			// attempt a parseFloat and fallback to a string if the parse fails
++			// so, simple values such as "10px" are parsed to Float.
++			// complex values such as "rotate(1rad)" are returned as is.
++			result = jQuery.css( tween.elem, tween.prop, "" );
++			// Empty strings, null, undefined and "auto" are converted to 0.
++			return !result || result === "auto" ? 0 : result;
++		},
++		set: function( tween ) {
++			// use step hook for back compat - use cssHook if its there - use .style if its
++			// available and use plain properties where available
++			if ( jQuery.fx.step[ tween.prop ] ) {
++				jQuery.fx.step[ tween.prop ]( tween );
++			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
++				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
++			} else {
++				tween.elem[ tween.prop ] = tween.now;
++			}
++		}
++	}
++};
++
++// Remove in 2.0 - this supports IE8's panic based approach
++// to setting things on disconnected nodes
++
++Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
++	set: function( tween ) {
++		if ( tween.elem.nodeType && tween.elem.parentNode ) {
++			tween.elem[ tween.prop ] = tween.now;
++		}
++	}
++};
++
++jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
++	var cssFn = jQuery.fn[ name ];
++	jQuery.fn[ name ] = function( speed, easing, callback ) {
++		return speed == null || typeof speed === "boolean" ?
++			cssFn.apply( this, arguments ) :
++			this.animate( genFx( name, true ), speed, easing, callback );
++	};
++});
++
++jQuery.fn.extend({
++	fadeTo: function( speed, to, easing, callback ) {
++
++		// show any hidden elements after setting opacity to 0
++		return this.filter( isHidden ).css( "opacity", 0 ).show()
++
++			// animate to the value specified
++			.end().animate({ opacity: to }, speed, easing, callback );
++	},
++	animate: function( prop, speed, easing, callback ) {
++		var empty = jQuery.isEmptyObject( prop ),
++			optall = jQuery.speed( speed, easing, callback ),
++			doAnimation = function() {
++				// Operate on a copy of prop so per-property easing won't be lost
++				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
++				doAnimation.finish = function() {
++					anim.stop( true );
++				};
++				// Empty animations, or finishing resolves immediately
++				if ( empty || jQuery._data( this, "finish" ) ) {
++					anim.stop( true );
++				}
++			};
++			doAnimation.finish = doAnimation;
++
++		return empty || optall.queue === false ?
++			this.each( doAnimation ) :
++			this.queue( optall.queue, doAnimation );
++	},
++	stop: function( type, clearQueue, gotoEnd ) {
++		var stopQueue = function( hooks ) {
++			var stop = hooks.stop;
++			delete hooks.stop;
++			stop( gotoEnd );
++		};
++
++		if ( typeof type !== "string" ) {
++			gotoEnd = clearQueue;
++			clearQueue = type;
++			type = undefined;
++		}
++		if ( clearQueue && type !== false ) {
++			this.queue( type || "fx", [] );
++		}
++
++		return this.each(function() {
++			var dequeue = true,
++				index = type != null && type + "queueHooks",
++				timers = jQuery.timers,
++				data = jQuery._data( this );
++
++			if ( index ) {
++				if ( data[ index ] && data[ index ].stop ) {
++					stopQueue( data[ index ] );
++				}
++			} else {
++				for ( index in data ) {
++					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
++						stopQueue( data[ index ] );
++					}
++				}
++			}
++
++			for ( index = timers.length; index--; ) {
++				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
++					timers[ index ].anim.stop( gotoEnd );
++					dequeue = false;
++					timers.splice( index, 1 );
++				}
++			}
++
++			// start the next in the queue if the last step wasn't forced
++			// timers currently will call their complete callbacks, which will dequeue
++			// but only if they were gotoEnd
++			if ( dequeue || !gotoEnd ) {
++				jQuery.dequeue( this, type );
++			}
++		});
++	},
++	finish: function( type ) {
++		if ( type !== false ) {
++			type = type || "fx";
++		}
++		return this.each(function() {
++			var index,
++				data = jQuery._data( this ),
++				queue = data[ type + "queue" ],
++				hooks = data[ type + "queueHooks" ],
++				timers = jQuery.timers,
++				length = queue ? queue.length : 0;
++
++			// enable finishing flag on private data
++			data.finish = true;
++
++			// empty the queue first
++			jQuery.queue( this, type, [] );
++
++			if ( hooks && hooks.cur && hooks.cur.finish ) {
++				hooks.cur.finish.call( this );
++			}
++
++			// look for any active animations, and finish them
++			for ( index = timers.length; index--; ) {
++				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
++					timers[ index ].anim.stop( true );
++					timers.splice( index, 1 );
++				}
++			}
++
++			// look for any animations in the old queue and finish them
++			for ( index = 0; index < length; index++ ) {
++				if ( queue[ index ] && queue[ index ].finish ) {
++					queue[ index ].finish.call( this );
++				}
++			}
++
++			// turn off finishing flag
++			delete data.finish;
++		});
++	}
++});
++
++// Generate parameters to create a standard animation
++function genFx( type, includeWidth ) {
++	var which,
++		attrs = { height: type },
++		i = 0;
++
++	// if we include width, step value is 1 to do all cssExpand values,
++	// if we don't include width, step value is 2 to skip over Left and Right
++	includeWidth = includeWidth? 1 : 0;
++	for( ; i < 4 ; i += 2 - includeWidth ) {
++		which = cssExpand[ i ];
++		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
++	}
++
++	if ( includeWidth ) {
++		attrs.opacity = attrs.width = type;
++	}
++
++	return attrs;
++}
++
++// Generate shortcuts for custom animations
++jQuery.each({
++	slideDown: genFx("show"),
++	slideUp: genFx("hide"),
++	slideToggle: genFx("toggle"),
++	fadeIn: { opacity: "show" },
++	fadeOut: { opacity: "hide" },
++	fadeToggle: { opacity: "toggle" }
++}, function( name, props ) {
++	jQuery.fn[ name ] = function( speed, easing, callback ) {
++		return this.animate( props, speed, easing, callback );
++	};
++});
++
++jQuery.speed = function( speed, easing, fn ) {
++	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
++		complete: fn || !fn && easing ||
++			jQuery.isFunction( speed ) && speed,
++		duration: speed,
++		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
++	};
++
++	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
++		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
++
++	// normalize opt.queue - true/undefined/null -> "fx"
++	if ( opt.queue == null || opt.queue === true ) {
++		opt.queue = "fx";
++	}
++
++	// Queueing
++	opt.old = opt.complete;
++
++	opt.complete = function() {
++		if ( jQuery.isFunction( opt.old ) ) {
++			opt.old.call( this );
++		}
++
++		if ( opt.queue ) {
++			jQuery.dequeue( this, opt.queue );
++		}
++	};
++
++	return opt;
++};
++
++jQuery.easing = {
++	linear: function( p ) {
++		return p;
++	},
++	swing: function( p ) {
++		return 0.5 - Math.cos( p*Math.PI ) / 2;
++	}
++};
++
++jQuery.timers = [];
++jQuery.fx = Tween.prototype.init;
++jQuery.fx.tick = function() {
++	var timer,
++		timers = jQuery.timers,
++		i = 0;
++
++	fxNow = jQuery.now();
++
++	for ( ; i < timers.length; i++ ) {
++		timer = timers[ i ];
++		// Checks the timer has not already been removed
++		if ( !timer() && timers[ i ] === timer ) {
++			timers.splice( i--, 1 );
++		}
++	}
++
++	if ( !timers.length ) {
++		jQuery.fx.stop();
++	}
++	fxNow = undefined;
++};
++
++jQuery.fx.timer = function( timer ) {
++	if ( timer() && jQuery.timers.push( timer ) ) {
++		jQuery.fx.start();
++	}
++};
++
++jQuery.fx.interval = 13;
++
++jQuery.fx.start = function() {
++	if ( !timerId ) {
++		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
++	}
++};
++
++jQuery.fx.stop = function() {
++	clearInterval( timerId );
++	timerId = null;
++};
++
++jQuery.fx.speeds = {
++	slow: 600,
++	fast: 200,
++	// Default speed
++	_default: 400
++};
++
++// Back Compat <1.8 extension point
++jQuery.fx.step = {};
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.animated = function( elem ) {
++		return jQuery.grep(jQuery.timers, function( fn ) {
++			return elem === fn.elem;
++		}).length;
++	};
++}
++jQuery.fn.offset = function( options ) {
++	if ( arguments.length ) {
++		return options === undefined ?
++			this :
++			this.each(function( i ) {
++				jQuery.offset.setOffset( this, options, i );
++			});
++	}
++
++	var docElem, win,
++		box = { top: 0, left: 0 },
++		elem = this[ 0 ],
++		doc = elem && elem.ownerDocument;
++
++	if ( !doc ) {
++		return;
++	}
++
++	docElem = doc.documentElement;
++
++	// Make sure it's not a disconnected DOM node
++	if ( !jQuery.contains( docElem, elem ) ) {
++		return box;
++	}
++
++	// If we don't have gBCR, just use 0,0 rather than error
++	// BlackBerry 5, iOS 3 (original iPhone)
++	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
++		box = elem.getBoundingClientRect();
++	}
++	win = getWindow( doc );
++	return {
++		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
++		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
++	};
++};
++
++jQuery.offset = {
++
++	setOffset: function( elem, options, i ) {
++		var position = jQuery.css( elem, "position" );
++
++		// set position first, in-case top/left are set even on static elem
++		if ( position === "static" ) {
++			elem.style.position = "relative";
++		}
++
++		var curElem = jQuery( elem ),
++			curOffset = curElem.offset(),
++			curCSSTop = jQuery.css( elem, "top" ),
++			curCSSLeft = jQuery.css( elem, "left" ),
++			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
++			props = {}, curPosition = {}, curTop, curLeft;
++
++		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
++		if ( calculatePosition ) {
++			curPosition = curElem.position();
++			curTop = curPosition.top;
++			curLeft = curPosition.left;
++		} else {
++			curTop = parseFloat( curCSSTop ) || 0;
++			curLeft = parseFloat( curCSSLeft ) || 0;
++		}
++
++		if ( jQuery.isFunction( options ) ) {
++			options = options.call( elem, i, curOffset );
++		}
++
++		if ( options.top != null ) {
++			props.top = ( options.top - curOffset.top ) + curTop;
++		}
++		if ( options.left != null ) {
++			props.left = ( options.left - curOffset.left ) + curLeft;
++		}
++
++		if ( "using" in options ) {
++			options.using.call( elem, props );
++		} else {
++			curElem.css( props );
++		}
++	}
++};
++
++
++jQuery.fn.extend({
++
++	position: function() {
++		if ( !this[ 0 ] ) {
++			return;
++		}
++
++		var offsetParent, offset,
++			parentOffset = { top: 0, left: 0 },
++			elem = this[ 0 ];
++
++		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
++		if ( jQuery.css( elem, "position" ) === "fixed" ) {
++			// we assume that getBoundingClientRect is available when computed position is fixed
++			offset = elem.getBoundingClientRect();
++		} else {
++			// Get *real* offsetParent
++			offsetParent = this.offsetParent();
++
++			// Get correct offsets
++			offset = this.offset();
++			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
++				parentOffset = offsetParent.offset();
++			}
++
++			// Add offsetParent borders
++			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
++			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
++		}
++
++		// Subtract parent offsets and element margins
++		// note: when an element has margin: auto the offsetLeft and marginLeft
++		// are the same in Safari causing offset.left to incorrectly be 0
++		return {
++			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
++			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
++		};
++	},
++
++	offsetParent: function() {
++		return this.map(function() {
++			var offsetParent = this.offsetParent || document.documentElement;
++			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
++				offsetParent = offsetParent.offsetParent;
++			}
++			return offsetParent || document.documentElement;
++		});
++	}
++});
++
++
++// Create scrollLeft and scrollTop methods
++jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
++	var top = /Y/.test( prop );
++
++	jQuery.fn[ method ] = function( val ) {
++		return jQuery.access( this, function( elem, method, val ) {
++			var win = getWindow( elem );
++
++			if ( val === undefined ) {
++				return win ? (prop in win) ? win[ prop ] :
++					win.document.documentElement[ method ] :
++					elem[ method ];
++			}
++
++			if ( win ) {
++				win.scrollTo(
++					!top ? val : jQuery( win ).scrollLeft(),
++					top ? val : jQuery( win ).scrollTop()
++				);
++
++			} else {
++				elem[ method ] = val;
++			}
++		}, method, val, arguments.length, null );
++	};
++});
++
++function getWindow( elem ) {
++	return jQuery.isWindow( elem ) ?
++		elem :
++		elem.nodeType === 9 ?
++			elem.defaultView || elem.parentWindow :
++			false;
++}
++// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
++jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
++	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
++		// margin is only for outerHeight, outerWidth
++		jQuery.fn[ funcName ] = function( margin, value ) {
++			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
++				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
++
++			return jQuery.access( this, function( elem, type, value ) {
++				var doc;
++
++				if ( jQuery.isWindow( elem ) ) {
++					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
++					// isn't a whole lot we can do. See pull request at this URL for discussion:
++					// https://github.com/jquery/jquery/pull/764
++					return elem.document.documentElement[ "client" + name ];
++				}
++
++				// Get document width or height
++				if ( elem.nodeType === 9 ) {
++					doc = elem.documentElement;
++
++					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
++					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
++					return Math.max(
++						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
++						elem.body[ "offset" + name ], doc[ "offset" + name ],
++						doc[ "client" + name ]
++					);
++				}
++
++				return value === undefined ?
++					// Get width or height on the element, requesting but not forcing parseFloat
++					jQuery.css( elem, type, extra ) :
++
++					// Set width or height on the element
++					jQuery.style( elem, type, value, extra );
++			}, type, chainable ? margin : undefined, chainable, null );
++		};
++	});
++});
++// Limit scope pollution from any deprecated API
++// (function() {
++
++// })();
++// Expose jQuery to the global object
++window.jQuery = window.$ = jQuery;
++
++// Expose jQuery as an AMD module, but only for AMD loaders that
++// understand the issues with loading multiple versions of jQuery
++// in a page that all might call define(). The loader will indicate
++// they have special allowances for multiple jQuery versions by
++// specifying define.amd.jQuery = true. Register as a named module,
++// since jQuery can be concatenated with other files that may use define,
++// but not use a proper concatenation script that understands anonymous
++// AMD modules. A named AMD is safest and most robust way to register.
++// Lowercase jquery is used because AMD module names are derived from
++// file names, and jQuery is normally delivered in a lowercase file name.
++// Do this after creating the global so that if an AMD module wants to call
++// noConflict to hide this version of jQuery, it will work.
++if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
++	define( "jquery", [], function () { return jQuery; } );
++}
++
++})( window );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.dialog.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.dialog.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.dialog.jquery.json	(revision 15487)
+@@ -0,0 +1,70 @@
++{
++	"name": "ui.dialog",
++	"title": "jQuery UI Dialog",
++	"description": "Displays customizable dialog windows.",
++	"keywords": [
++		"ui",
++		"dialog",
++		"modal",
++		"alert",
++		"popup"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/dialog/",
++	"demo": "http://jqueryui.com/dialog/",
++	"docs": "http://api.jqueryui.com/dialog/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.button": "1.10.3",
++		"ui.draggable": "1.10.3",
++		"ui.position": "1.10.3",
++		"ui.resizable": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.autocomplete.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.autocomplete.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.autocomplete.jquery.json	(revision 15487)
+@@ -0,0 +1,69 @@
++{
++	"name": "ui.autocomplete",
++	"title": "jQuery UI Autocomplete",
++	"description": "Lists suggested words as the user is typing.",
++	"keywords": [
++		"ui",
++		"autocomplete",
++		"form",
++		"word",
++		"predict",
++		"suggest"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/autocomplete/",
++	"demo": "http://jqueryui.com/autocomplete/",
++	"docs": "http://api.jqueryui.com/autocomplete/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.menu": "1.10.3",
++		"ui.position": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/AUTHORS.txt
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/AUTHORS.txt	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/AUTHORS.txt	(revision 15487)
+@@ -0,0 +1,245 @@
++Authors ordered by first contribution
++A list of current team members is available at http://jqueryui.com/about
++
++Paul Bakaus <paul.bakaus@googlemail.com>
++Richard Worth <rdworth@gmail.com>
++Yehuda Katz <wycats@gmail.com>
++Sean Catchpole <sean@sunsean.com>
++John Resig <jeresig@gmail.com>
++Tane Piper <piper.tane@gmail.com>
++Dmitri Gaskin <dmitrig01@gmail.com>
++Klaus Hartl <klaus.hartl@googlemail.com>
++Stefan Petre <stefan.petre@gmail.com>
++Gilles van den Hoven <gilles@webunity.nl>
++Micheil Bryan Smith <micheil@brandedcode.com>
++Jörn Zaefferer <joern.zaefferer@gmail.com>
++Marc Grabanski <m@marcgrabanski.com>
++Keith Wood <kbwood.au@gmail.com>
++Brandon Aaron <brandon.aaron@gmail.com>
++Scott González <scott.gonzalez@gmail.com>
++Eduardo Lundgren <eduardolundgren@gmail.com>
++Aaron Eisenberger <aaronchi@gmail.com>
++Joan Piedra <theneojp@gmail.com>
++Bruno Basto <b.basto@gmail.com>
++Remy Sharp <remy@leftlogic.com>
++Bohdan Ganicky <bohdan.ganicky@gmail.com>
++David Bolter <david.bolter@gmail.com>
++Chi Cheng <cloudream@gmail.com>
++Ca-Phun Ung <pazu2k@gmail.com>
++Ariel Flesler <aflesler@gmail.com>
++Maggie Costello Wachs <fg.maggie@gmail.com>
++Scott Jehl <scott@scottjehl.com>
++Todd Parker <fg.todd@gmail.com>
++Andrew Powell <powella@gmail.com>
++Brant Burnett <btburnett3@gmail.com>
++Douglas Neiner <doug@pixelgraphics.us>
++Paul Irish <paul.irish@gmail.com>
++Ralph Whitbeck <ralph.whitbeck@gmail.com>
++Thibault Duplessis <thibault.duplessis@gmail.com>
++Dominique Vincent <dominique.vincent@toitl.com>
++Jack Hsu <jack.hsu@gmail.com>
++Adam Sontag <ajpiano@ajpiano.com>
++Carl Fürstenberg <carl@excito.com>
++Kevin Dalman <development@allpro.net>
++Alberto Fernández Capel <afcapel@gmail.com>
++Jacek Jędrzejewski (http://jacek.jedrzejewski.name)
++Ting Kuei <ting@kuei.com>
++Samuel Cormier-Iijima <sam@chide.it>
++Jon Palmer <jonspalmer@gmail.com>
++Ben Hollis <bhollis@amazon.com>
++Justin MacCarthy <Justin@Rubystars.biz>
++Eyal Kobrigo <kobrigo@hotmail.com>
++Tiago Freire <tiago.freire@gmail.com>
++Diego Tres <diegotres@gmail.com>
++Holger Rüprich <holger@rueprich.de>
++Ziling Zhao <zizhao@cisco.com>
++Mike Alsup <malsup@gmail.com>
++Robson Braga Araujo <robsonbraga@gmail.com>
++Pierre-Henri Ausseil <ph.ausseil@gmail.com>
++Christopher McCulloh <cmcculloh@gmail.com>
++Andrew Newcomb <ext.github@preceptsoftware.co.uk>
++Lim Chee Aun <cheeaun@gmail.com>
++Jorge Barreiro <yortx.barry@gmail.com>
++Daniel Steigerwald <daniel@steigerwald.cz>
++John Firebaugh <john_firebaugh@bigfix.com>
++John Enters <github@darkdark.net>
++Andrey Kapitcyn <ru.m157y@gmail.com>
++Dmitry Petrov <dpetroff@gmail.com>
++Eric Hynds <eric@hynds.net>
++Chairat Sunthornwiphat <pipo@sixhead.com>
++Josh Varner <josh.varner@gmail.com>
++Stéphane Raimbault <stephane.raimbault@gmail.com>
++Jay Merrifield <fracmak@gmail.com>
++J. Ryan Stinnett <jryans@gmail.com>
++Peter Heiberg <peter@heiberg.se>
++Alex Dovenmuehle <adovenmuehle@gmail.com>
++Jamie Gegerson <git@jamiegegerson.com>
++Raymond Schwartz <skeetergraphics@gmail.com>
++Phillip Barnes <philbar@gmail.com>
++Kyle Wilkinson <kai@wikyd.org>
++Khaled AlHourani <me@khaledalhourani.com>
++Marian Rudzynski <mr@impaled.org>
++Jean-Francois Remy <jfremy@virtuoz.com>
++Doug Blood <dougblood@gmail.com>
++Filippo Cavallarin <filippo.cavallarin@codseq.it>
++Heiko Henning <h.henning@educa.ch>
++Aliaksandr Rahalevich <saksmlz@gmail.com>
++Mario Visic <mario@mariovisic.com>
++Xavi Ramirez <xavi.rmz@gmail.com>
++Max Schnur <max.schnur@gmail.com>
++Saji Nediyanchath <saji89@gmail.com>
++Corey Frang <gnarf@gnarf.net>
++Aaron Peterson <aaronp123@yahoo.com>
++Ivan Peters <ivan@ivanpeters.com>
++Mohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>
++Marcos Sousa <falecomigo@marcossousa.com>
++Michael DellaNoce <mdellanoce@mailtrust.com>
++George Marshall <echosx@gmail.com>
++Tobias Brunner <tobias@strongswan.org>
++Martin Solli <msolli@gmail.com>
++David Petersen <public@petersendidit.com>
++Dan Heberden <danheberden@gmail.com>
++William Kevin Manire <williamkmanire@gmail.com>
++Gilmore Davidson <gilmoreorless@gmail.com>
++Michael Wu <michaelmwu@gmail.com>
++Adam Parod <mystic414@gmail.com>
++Guillaume Gautreau <guillaume+github@ghusse.com>
++Marcel Toele <EleotleCram@gmail.com>
++Dan Streetman <ddstreet@ieee.org>
++Matt Hoskins <furlined@cat-basket.org>
++Giovanni Giacobbi <giovanni@giacobbi.net>
++Kyle Florence <kyle.florence@gmail.com>
++Pavol Hluchý <lopo@losys.sk>
++Hans Hillen <hans.hillen@gmail.com>
++Mark Johnson <virgofx@live.com>
++Trey Hunner <treyhunner@gmail.com>
++Shane Whittet <whittet@gmail.com>
++Edward A Faulkner <ef@alum.mit.edu>
++Adam Baratz <adam@adambaratz.com>
++Kato Kazuyoshi <kato.kazuyoshi@gmail.com>
++Eike Send <eike.send@gmail.com>
++Kris Borchers <kris.borchers@gmail.com>
++Eddie Monge <eddie@eddiemonge.com>
++Israel Tsadok <itsadok@gmail.com>
++Carson McDonald <carson@ioncannon.net>
++Jason Davies <jason@jasondavies.com>
++Garrison Locke <gplocke@gmail.com>
++David Murdoch <musicisair@yahoo.com>
++Benjamin Scott Boyle <benjamins.boyle@gmail.com>
++Jesse Baird <jebaird@gmail.com>
++Jonathan Vingiano <jvingiano@gmail.com>
++Dylan Just <dev@ephox.com>
++Hiroshi Tomita <tomykaira@gmail.com>
++Glenn Goodrich <glenn.goodrich@gmail.com>
++Tarafder Ashek-E-Elahi <mail.ashek@gmail.com>
++Ryan Neufeld <ryan@neufeldmail.com>
++Marc Neuwirth <marc.neuwirth@gmail.com>
++Philip Graham <philip.robert.graham@gmail.com>
++Benjamin Sterling <benjamin.sterling@kenzomedia.com>
++Wesley Walser <waw325@gmail.com>
++Kouhei Sutou <kou@clear-code.com>
++Karl Kirch <karlkrch@gmail.com>
++Chris Kelly <ckdake@ckdake.com>
++Jay Oster <jay@loyalize.com>
++Alexander Polomoshnov <alex.polomoshnov@gmail.com>
++David Leal <dgleal@gmail.com>
++Igor Milla <igor.fsp.milla@gmail.com>
++Dave Methvin <dave.methvin@gmail.com>
++Florian Gutmann <f.gutmann@chronimo.com>
++Marwan Al Jubeh <marwan.aljubeh@gmail.com>
++Milan Broum <midlis@googlemail.com>
++Sebastian Sauer <info@dynpages.de>
++Gaëtan Muller <m.gaetan89@gmail.com>
++Michel Weimerskirch <michel@weimerskirch.net>
++William Griffiths <william@ycymro.com>
++Stojce Slavkovski <stojce@gmail.com>
++David Soms <david.soms@gmail.com>
++David De Sloovere <david.desloovere@hotmail.com>
++Michael P. Jung <michael.jung@terreon.de>
++Shannon Pekary <spekary@gmail.com>
++Matthew Edward Hutton <meh@corefiling.co.uk>
++James Khoury <james@jameskhoury.com>
++Rob Loach <robloach@gmail.com>
++Alberto Monteiro <betimbrasil@gmail.com>
++Alex Rhea <alex.rhea@gmail.com>
++Krzysztof Rosiński <rozwell69@gmail.com>
++Ryan Olton <oltonr@gmail.com>
++Genie <386@mail.com>
++Rick Waldron <waldron.rick@gmail.com>
++Ian Simpson <spoonlikesham@gmail.com>
++Lev Kitsis <spam4lev@gmail.com>
++TJ VanToll <tj.vantoll@gmail.com>
++Justin Domnitz <jdomnitz@gmail.com>
++Douglas Cerna <douglascerna@yahoo.com>
++Bert ter Heide <bertjh@hotmail.com>
++Jasvir Nagra <jasvir@gmail.com>
++Petr Hromadko <yuriy@tokyoscale.com>
++Harri Kilpiö <harri.kilpio@gmail.com>
++Lado Lomidze <lado.lomidze@gmail.com>
++Amir E. Aharoni <amir.aharoni@mail.huji.ac.il>
++Simon Sattes <simon.sattes@gmail.com>
++Jo Liss <joliss42@gmail.com>
++Guntupalli Karunakar <karunakarg@yahoo.com>
++Shahyar Ghobadpour <shahyar@gmail.com>
++Lukasz Lipinski <uzza17@gmail.com>
++Timo Tijhof <krinklemail@gmail.com>
++Jason Moon <jmoon@socialcast.com>
++Martin Frost <martinf55@hotmail.com>
++Eneko Illarramendi <eneko@illarra.com>
++EungJun Yi <semtlenori@gmail.com>
++Courtland Allen <courtlandallen@gmail.com>
++Viktar Varvanovich <non4eg@gmail.com>
++Danny Trunk <dtrunk90@gmail.com>
++Pavel Stetina <pavel.stetina@nangu.tv>
++Michael Stay <metaweta@gmail.com>
++Steven Roussey <sroussey@gmail.com>
++Michael Hollis <hollis21@gmail.com>
++Lee Rowlands <lee.rowlands@previousnext.com.au>
++Timmy Willison <timmywillisn@gmail.com>
++Karl Swedberg <kswedberg@gmail.com>
++Baoju Yuan <the_guy_1987@hotmail.com>
++Maciej Mroziński <mrozik87@gmail.com>
++Luis Dalmolin <luis.nh@gmail.com>
++Mark Aaron Shirley <maspwr@gmail.com>
++Martin Hoch <martin@fidion.de>
++Jiayi Yang <tr870829@gmail.com>
++Philipp Benjamin Köppchen <xgxtpbk@gws.ms>
++Sindre Sorhus <sindresorhus@gmail.com>
++Bernhard Sirlinger <bernhard.sirlinger@tele2.de>
++Jared A. Scheel <jared@jaredscheel.com>
++Rafael Xavier de Souza <rxaviers@gmail.com>
++John Chen <zhang.z.chen@intel.com>
++Dale Kocian <dale.kocian@gmail.com>
++Mike Sherov <mike.sherov@gmail.com>
++Andrew Couch <andy@couchand.com>
++Marc-Andre Lafortune <github@marc-andre.ca>
++Nate Eagle <nate.eagle@teamaol.com>
++David Souther <davidsouther@gmail.com>
++Mathias Stenbom <mathias@stenbom.com>
++Sergey Kartashov <ebishkek@yandex.ru>
++Avinash R <nashpapa@gmail.com>
++Ethan Romba <ethanromba@gmail.com>
++Cory Gackenheimer <cory.gack@gmail.com>
++Juan Pablo Kaniefsky <jpkaniefsky@gmail.com>
++Roman Salnikov <bardt.dz@gmail.com>
++Anika Henke <anika@selfthinker.org>
++Samuel Bovée <samycookie2000@yahoo.fr>
++Fabrício Matté <ult_combo@hotmail.com>
++Viktor Kojouharov <vkojouharov@gmail.com>
++Pawel Maruszczyk <lord_t@o2.pl>
++Pavel Selitskas <p.selitskas@gmail.com>
++Bjørn Johansen <bjorn.johansen@metronet.no>
++Matthieu Penant <thieum22@hotmail.com>
++Dominic Barnes <dominic@dbarnes.info>
++David Sullivan <david.sullivan@gmail.com>
++Thomas Jaggi <thomas.jaggi@gmail.com>
++Vahid Sohrabloo <vahid4134@gmail.com>
++Travis Carden <travis.carden@gmail.com>
++Bruno M. Custódio <bruno@brunomcustodio.com>
++Nathanael Silverman <nathanael.silverman@gmail.com>
++Christian Wenz <christian@wenz.org>
++Steve Urmston <steve@urm.st>
++Zaven Muradyan <megalivoithos@gmail.com>
++Woody Gilk <shadowhand@deviantart.com>
++Zbigniew Motyka <zbigniew.motyka@gmail.com>
++Suhail Alkowaileet <xsoh.k7@gmail.com>
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-highlight.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-highlight.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-highlight.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-highlight",
++	"title": "jQuery UI Highlight Effect",
++	"description": "Highlights the background of an element in a defined color for a custom duration.",
++	"keywords": [
++		"ui",
++		"highlight",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/highlight-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.selectable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.selectable.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.selectable.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.selectable",
++	"title": "jQuery UI Selectable",
++	"description": "Allows groups of elements to be selected with the mouse.",
++	"keywords": [
++		"ui",
++		"selectable",
++		"selection"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/selectable/",
++	"demo": "http://jqueryui.com/selectable/",
++	"docs": "http://api.jqueryui.com/selectable/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.mouse": "1.10.3"
++	},
++	"category": "interaction"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.position.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.position.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.position.jquery.json	(revision 15487)
+@@ -0,0 +1,66 @@
++{
++	"name": "ui.position",
++	"title": "jQuery UI Position",
++	"description": "Positions elements relative to other elements.",
++	"keywords": [
++		"ui",
++		"position",
++		"offset",
++		"relative",
++		"absolute",
++		"fixed",
++		"collision"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/position/",
++	"demo": "http://jqueryui.com/position/",
++	"docs": "http://api.jqueryui.com/position/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6"
++	},
++	"category": "core"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/textarea.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/textarea.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/textarea.html	(revision 15487)
+@@ -0,0 +1,34 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Textarea</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-resizable-se {
++		bottom: 17px;
++	}
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			handles: "se"
++		});
++	});
++	</script>
++</head>
++<body>
++
++<textarea id="resizable" rows="5" cols="20"></textarea>
++
++<div class="demo-description">
++<p>Display only an outline of the element while resizing by setting the <code>helper</code> option to a CSS class.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/animate.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/animate.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/animate.html	(revision 15487)
+@@ -0,0 +1,36 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Animate</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable { width: 150px; height: 150px; padding: 0.5em; }
++	#resizable h3 { text-align: center; margin: 0; }
++	.ui-resizable-helper { border: 1px dotted gray; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			animate: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="resizable" class="ui-widget-content">
++	<h3 class="ui-widget-header">Animate</h3>
++</div>
++
++<div class="demo-description">
++<p>Animate the resize action using the <code>animate</code> option (boolean). When this option is set to true, drag the outline to the desired location; the element animates to that size on drag stop.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/helper.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/helper.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/helper.html	(revision 15487)
+@@ -0,0 +1,36 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Helper</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable { width: 150px; height: 150px; padding: 0.5em; }
++	#resizable h3 { text-align: center; margin: 0; }
++	.ui-resizable-helper { border: 2px dotted #00F; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			helper: "ui-resizable-helper"
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="resizable" class="ui-widget-content">
++	<h3 class="ui-widget-header">Helper</h3>
++</div>
++
++<div class="demo-description">
++<p>Display only an outline of the element while resizing by setting the <code>helper</code> option to a CSS class.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/default.html	(revision 15487)
+@@ -0,0 +1,33 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable { width: 150px; height: 150px; padding: 0.5em; }
++	#resizable h3 { text-align: center; margin: 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable();
++	});
++	</script>
++</head>
++<body>
++
++<div id="resizable" class="ui-widget-content">
++	<h3 class="ui-widget-header">Resizable</h3>
++</div>
++
++<div class="demo-description">
++<p>Enable any DOM element to be resizable.  With the cursor grab the right or bottom border and drag to the desired width or height.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/snap-to-grid.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/snap-to-grid.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/snap-to-grid.html	(revision 15487)
+@@ -0,0 +1,35 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Snap to grid</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable { width: 150px; height: 150px; padding: 0.5em; }
++	#resizable h3 { text-align: center; margin: 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			grid: 50
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="resizable" class="ui-widget-content">
++	<h3 class="ui-widget-header">Grid</h3>
++</div>
++
++<div class="demo-description">
++<p>Snap the resizable element to a grid.  Set the dimensions of grid cells (height and width in pixels) with the <code>grid</code> option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/visual-feedback.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/visual-feedback.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/visual-feedback.html	(revision 15487)
+@@ -0,0 +1,36 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Visual feedback</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable { width: 150px; height: 150px; padding: 0.5em; }
++	#resizable h3 { text-align: center; margin: 0; }
++	.ui-resizable-ghost { border: 1px dotted gray; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			ghost: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="resizable" class="ui-widget-content">
++	<h3 class="ui-widget-header">Ghost</h3>
++</div>
++
++<div class="demo-description">
++<p>Instead of showing the actual element during resize, set the <code>ghost</code> option to true to show a semi-transparent part of the element.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/constrain-area.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/constrain-area.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/constrain-area.html	(revision 15487)
+@@ -0,0 +1,40 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Constrain resize area</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#container { width: 300px; height: 300px; }
++	#container h3 { text-align: center; margin: 0; margin-bottom: 10px; }
++	#resizable { background-position: top left; width: 150px; height: 150px; }
++	#resizable, #container { padding: 0.5em; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			containment: "#container"
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="container" class="ui-widget-content">
++	<h3 class="ui-widget-header">Containment</h3>
++	<div id="resizable" class="ui-state-active">
++		<h3 class="ui-widget-header">Resizable</h3>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Define the boundaries of the resizable area. Use the <code>containment</code> option to specify a parent DOM element or a jQuery selector, like 'document.'</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/max-min.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/max-min.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/max-min.html	(revision 15487)
+@@ -0,0 +1,38 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Maximum / minimum size</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable { width: 200px; height: 150px; padding: 5px; }
++	#resizable h3 { text-align: center; margin: 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			maxHeight: 250,
++			maxWidth: 350,
++			minHeight: 150,
++			minWidth: 200
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="resizable" class="ui-widget-content">
++	<h3 class="ui-widget-header">Resize larger / smaller</h3>
++</div>
++
++<div class="demo-description">
++<p>Limit the resizable element to a maximum or minimum height or width using the <code>maxHeight</code>, <code>maxWidth</code>, <code>minHeight</code>, and <code>minWidth</code> options.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/index.html	(revision 15487)
+@@ -0,0 +1,24 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="aspect-ratio.html">Preserve aspect ratio</a></li>
++	<li><a href="max-min.html">Maximum / minimum size</a></li>
++	<li><a href="constrain-area.html">Constrain resize area</a></li>
++	<li><a href="delay-start.html">Delay start</a></li>
++	<li><a href="snap-to-grid.html">Snap to grid</a></li>
++	<li><a href="visual-feedback.html">Visual feedback</a></li>
++	<li><a href="synchronous-resize.html">Synchronous resize</a></li>
++	<li><a href="animate.html">Animate</a></li>
++	<li><a href="helper.html">Resize Helper</a></li>
++	<li><a href="textarea.html">Textarea</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/delay-start.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/delay-start.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/delay-start.html	(revision 15487)
+@@ -0,0 +1,45 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Delay start</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable, #resizable2 { width: 150px; height: 150px; padding: 0.5em; }
++	#resizable h3, #resizable2 h3 { text-align: center; margin: 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			delay: 1000
++		});
++
++		$( "#resizable2" ).resizable({
++			distance: 40
++		});
++	});
++	</script>
++</head>
++<body>
++
++<h3 class="docs">Time delay (ms):</h3>
++<div id="resizable" class="ui-widget-content">
++	<h3 class="ui-widget-header">Time</h3>
++</div>
++
++<h3 class="docs">Distance delay (px):</h3>
++<div id="resizable2" class="ui-widget-content">
++	<h3 class="ui-widget-header">Distance</h3>
++</div>
++
++<div class="demo-description">
++<p>Delay the start of resizng for a number of milliseconds with the <code>delay</code> option; prevent resizing until the cursor is held down and dragged a specifed number of pixels with the <code>distance</code> option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/synchronous-resize.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/synchronous-resize.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/synchronous-resize.html	(revision 15487)
+@@ -0,0 +1,42 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Synchronous resize</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable { background-position: top left; }
++	#resizable, #also { width: 150px; height: 120px; padding: 0.5em; }
++	#resizable h3, #also h3 { text-align: center; margin: 0; }
++	#also { margin-top: 1em; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			alsoResize: "#also"
++		});
++		$( "#also" ).resizable();
++	});
++	</script>
++</head>
++<body>
++
++<div id="resizable" class="ui-widget-header">
++	<h3 class="ui-state-active">Resize</h3>
++</div>
++
++<div id="also" class="ui-widget-content">
++	<h3 class="ui-widget-header">will also resize</h3>
++</div>
++
++<div class="demo-description">
++<p>Resize multiple elements simultaneously by clicking and dragging the sides of one.  Pass a shared selector into the <code>alsoResize</code> option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/aspect-ratio.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/aspect-ratio.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/aspect-ratio.html	(revision 15487)
+@@ -0,0 +1,35 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Resizable - Preserve aspect ratio</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#resizable { width: 160px; height: 90px; padding: 0.5em; }
++	#resizable h3 { text-align: center; margin: 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#resizable" ).resizable({
++			aspectRatio: 16 / 9
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="resizable" class="ui-widget-content">
++	<h3 class="ui-widget-header">Preserve aspect ratio</h3>
++</div>
++
++<div class="demo-description">
++<p>Maintain the existing aspect ratio or set a new one to constrain the proportions on resize. Set the <code>aspectRatio</code> option to true, and optionally pass in a new ratio (i.e., 4/3)</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/colorpicker.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/colorpicker.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/colorpicker.html	(revision 15487)
+@@ -0,0 +1,87 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Colorpicker</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#red, #green, #blue {
++		float: left;
++		clear: left;
++		width: 300px;
++		margin: 15px;
++	}
++	#swatch {
++		width: 120px;
++		height: 100px;
++		margin-top: 18px;
++		margin-left: 350px;
++		background-image: none;
++	}
++	#red .ui-slider-range { background: #ef2929; }
++	#red .ui-slider-handle { border-color: #ef2929; }
++	#green .ui-slider-range { background: #8ae234; }
++	#green .ui-slider-handle { border-color: #8ae234; }
++	#blue .ui-slider-range { background: #729fcf; }
++	#blue .ui-slider-handle { border-color: #729fcf; }
++	</style>
++	<script>
++	function hexFromRGB(r, g, b) {
++		var hex = [
++			r.toString( 16 ),
++			g.toString( 16 ),
++			b.toString( 16 )
++		];
++		$.each( hex, function( nr, val ) {
++			if ( val.length === 1 ) {
++				hex[ nr ] = "0" + val;
++			}
++		});
++		return hex.join( "" ).toUpperCase();
++	}
++	function refreshSwatch() {
++		var red = $( "#red" ).slider( "value" ),
++			green = $( "#green" ).slider( "value" ),
++			blue = $( "#blue" ).slider( "value" ),
++			hex = hexFromRGB( red, green, blue );
++		$( "#swatch" ).css( "background-color", "#" + hex );
++	}
++	$(function() {
++		$( "#red, #green, #blue" ).slider({
++			orientation: "horizontal",
++			range: "min",
++			max: 255,
++			value: 127,
++			slide: refreshSwatch,
++			change: refreshSwatch
++		});
++		$( "#red" ).slider( "value", 255 );
++		$( "#green" ).slider( "value", 140 );
++		$( "#blue" ).slider( "value", 60 );
++	});
++	</script>
++</head>
++<body class="ui-widget-content" style="border:0;">
++
++<p class="ui-state-default ui-corner-all ui-helper-clearfix" style="padding:4px;">
++	<span class="ui-icon ui-icon-pencil" style="float:left; margin:-2px 5px 0 0;"></span>
++	Simple Colorpicker
++</p>
++
++<div id="red"></div>
++<div id="green"></div>
++<div id="blue"></div>
++
++<div id="swatch" class="ui-widget-content ui-corner-all"></div>
++
++<div class="demo-description">
++<p>Combine three sliders to create a simple RGB colorpicker.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range.html	(revision 15487)
+@@ -0,0 +1,42 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Range slider</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#slider-range" ).slider({
++			range: true,
++			min: 0,
++			max: 500,
++			values: [ 75, 300 ],
++			slide: function( event, ui ) {
++				$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
++			}
++		});
++		$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
++			" - $" + $( "#slider-range" ).slider( "values", 1 ) );
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="amount">Price range:</label>
++	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
++</p>
++
++<div id="slider-range"></div>
++
++<div class="demo-description">
++<p>Set the <code>range</code> option to true to capture a range of values with two drag handles.  The space between the handles is filled with a different background color to indicate those values are selected.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/steps.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/steps.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/steps.html	(revision 15487)
+@@ -0,0 +1,41 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Snap to increments</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#slider" ).slider({
++			value:100,
++			min: 0,
++			max: 500,
++			step: 50,
++			slide: function( event, ui ) {
++				$( "#amount" ).val( "$" + ui.value );
++			}
++		});
++		$( "#amount" ).val( "$" + $( "#slider" ).slider( "value" ) );
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="amount">Donation amount ($50 increments):</label>
++	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
++</p>
++
++<div id="slider"></div>
++
++<div class="demo-description">
++<p>Increment slider values with the <code>step</code> option set to an integer, commonly a dividend of the slider's maximum value.  The default increment is 1.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemin.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemin.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemin.html	(revision 15487)
+@@ -0,0 +1,41 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Range with fixed minimum</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#slider-range-min" ).slider({
++			range: "min",
++			value: 37,
++			min: 1,
++			max: 700,
++			slide: function( event, ui ) {
++				$( "#amount" ).val( "$" + ui.value );
++			}
++		});
++		$( "#amount" ).val( "$" + $( "#slider-range-min" ).slider( "value" ) );
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="amount">Maximum price:</label>
++	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
++</p>
++
++<div id="slider-range-min"></div>
++
++<div class="demo-description">
++<p>Fix the minimum value of the range slider so that the user can only select a maximum.  Set the <code>range</code> option to "min."</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/side-scroll.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/side-scroll.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/side-scroll.html	(revision 15487)
+@@ -0,0 +1,131 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Slider scrollbar</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.scroll-pane { overflow: auto; width: 99%; float:left; }
++	.scroll-content { width: 2440px; float: left; }
++	.scroll-content-item { width: 100px; height: 100px; float: left; margin: 10px; font-size: 3em; line-height: 96px; text-align: center; }
++	.scroll-bar-wrap { clear: left; padding: 0 4px 0 2px; margin: 0 -1px -1px -1px; }
++	.scroll-bar-wrap .ui-slider { background: none; border:0; height: 2em; margin: 0 auto;  }
++	.scroll-bar-wrap .ui-handle-helper-parent { position: relative; width: 100%; height: 100%; margin: 0 auto; }
++	.scroll-bar-wrap .ui-slider-handle { top:.2em; height: 1.5em; }
++	.scroll-bar-wrap .ui-slider-handle .ui-icon { margin: -8px auto 0; position: relative; top: 50%; }
++	</style>
++	<script>
++	$(function() {
++		//scrollpane parts
++		var scrollPane = $( ".scroll-pane" ),
++			scrollContent = $( ".scroll-content" );
++
++		//build slider
++		var scrollbar = $( ".scroll-bar" ).slider({
++			slide: function( event, ui ) {
++				if ( scrollContent.width() > scrollPane.width() ) {
++					scrollContent.css( "margin-left", Math.round(
++						ui.value / 100 * ( scrollPane.width() - scrollContent.width() )
++					) + "px" );
++				} else {
++					scrollContent.css( "margin-left", 0 );
++				}
++			}
++		});
++
++		//append icon to handle
++		var handleHelper = scrollbar.find( ".ui-slider-handle" )
++		.mousedown(function() {
++			scrollbar.width( handleHelper.width() );
++		})
++		.mouseup(function() {
++			scrollbar.width( "100%" );
++		})
++		.append( "<span class='ui-icon ui-icon-grip-dotted-vertical'></span>" )
++		.wrap( "<div class='ui-handle-helper-parent'></div>" ).parent();
++
++		//change overflow to hidden now that slider handles the scrolling
++		scrollPane.css( "overflow", "hidden" );
++
++		//size scrollbar and handle proportionally to scroll distance
++		function sizeScrollbar() {
++			var remainder = scrollContent.width() - scrollPane.width();
++			var proportion = remainder / scrollContent.width();
++			var handleSize = scrollPane.width() - ( proportion * scrollPane.width() );
++			scrollbar.find( ".ui-slider-handle" ).css({
++				width: handleSize,
++				"margin-left": -handleSize / 2
++			});
++			handleHelper.width( "" ).width( scrollbar.width() - handleSize );
++		}
++
++		//reset slider value based on scroll content position
++		function resetValue() {
++			var remainder = scrollPane.width() - scrollContent.width();
++			var leftVal = scrollContent.css( "margin-left" ) === "auto" ? 0 :
++				parseInt( scrollContent.css( "margin-left" ) );
++			var percentage = Math.round( leftVal / remainder * 100 );
++			scrollbar.slider( "value", percentage );
++		}
++
++		//if the slider is 100% and window gets larger, reveal content
++		function reflowContent() {
++				var showing = scrollContent.width() + parseInt( scrollContent.css( "margin-left" ), 10 );
++				var gap = scrollPane.width() - showing;
++				if ( gap > 0 ) {
++					scrollContent.css( "margin-left", parseInt( scrollContent.css( "margin-left" ), 10 ) + gap );
++				}
++		}
++
++		//change handle position on window resize
++		$( window ).resize(function() {
++			resetValue();
++			sizeScrollbar();
++			reflowContent();
++		});
++		//init scrollbar size
++		setTimeout( sizeScrollbar, 10 );//safari wants a timeout
++	});
++	</script>
++</head>
++<body>
++
++<div class="scroll-pane ui-widget ui-widget-header ui-corner-all">
++	<div class="scroll-content">
++		<div class="scroll-content-item ui-widget-header">1</div>
++		<div class="scroll-content-item ui-widget-header">2</div>
++		<div class="scroll-content-item ui-widget-header">3</div>
++		<div class="scroll-content-item ui-widget-header">4</div>
++		<div class="scroll-content-item ui-widget-header">5</div>
++		<div class="scroll-content-item ui-widget-header">6</div>
++		<div class="scroll-content-item ui-widget-header">7</div>
++		<div class="scroll-content-item ui-widget-header">8</div>
++		<div class="scroll-content-item ui-widget-header">9</div>
++		<div class="scroll-content-item ui-widget-header">10</div>
++		<div class="scroll-content-item ui-widget-header">11</div>
++		<div class="scroll-content-item ui-widget-header">12</div>
++		<div class="scroll-content-item ui-widget-header">13</div>
++		<div class="scroll-content-item ui-widget-header">14</div>
++		<div class="scroll-content-item ui-widget-header">15</div>
++		<div class="scroll-content-item ui-widget-header">16</div>
++		<div class="scroll-content-item ui-widget-header">17</div>
++		<div class="scroll-content-item ui-widget-header">18</div>
++		<div class="scroll-content-item ui-widget-header">19</div>
++		<div class="scroll-content-item ui-widget-header">20</div>
++	</div>
++	<div class="scroll-bar-wrap ui-widget-content ui-corner-bottom">
++		<div class="scroll-bar"></div>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Use a slider to manipulate the positioning of content on the page. In this case, it acts as a scrollbar with the potential to capture values if needed.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/multiple-vertical.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/multiple-vertical.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/multiple-vertical.html	(revision 15487)
+@@ -0,0 +1,69 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Multiple sliders</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#eq span {
++		height:120px; float:left; margin:15px
++	}
++	</style>
++	<script>
++	$(function() {
++		// setup master volume
++		$( "#master" ).slider({
++			value: 60,
++			orientation: "horizontal",
++			range: "min",
++			animate: true
++		});
++		// setup graphic EQ
++		$( "#eq > span" ).each(function() {
++			// read initial values from markup and remove that
++			var value = parseInt( $( this ).text(), 10 );
++			$( this ).empty().slider({
++				value: value,
++				range: "min",
++				animate: true,
++				orientation: "vertical"
++			});
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p class="ui-state-default ui-corner-all ui-helper-clearfix" style="padding:4px;">
++	<span class="ui-icon ui-icon-volume-on" style="float:left; margin:-2px 5px 0 0;"></span>
++	Master volume
++</p>
++
++<div id="master" style="width:260px; margin:15px;"></div>
++
++<p class="ui-state-default ui-corner-all" style="padding:4px;margin-top:4em;">
++	<span class="ui-icon ui-icon-signal" style="float:left; margin:-2px 5px 0 0;"></span>
++	Graphic EQ
++</p>
++
++<div id="eq">
++	<span>88</span>
++	<span>77</span>
++	<span>55</span>
++	<span>33</span>
++	<span>40</span>
++	<span>45</span>
++	<span>70</span>
++</div>
++
++<div class="demo-description">
++<p>Combine horizontal and vertical sliders, each with their own options, to create the UI for a music player.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemax.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemax.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemax.html	(revision 15487)
+@@ -0,0 +1,40 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Range with fixed maximum</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#slider-range-max" ).slider({
++			range: "max",
++			min: 1,
++			max: 10,
++			value: 2,
++			slide: function( event, ui ) {
++				$( "#amount" ).val( ui.value );
++			}
++		});
++		$( "#amount" ).val( $( "#slider-range-max" ).slider( "value" ) );
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="amount">Minimum number of bedrooms:</label>
++	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
++</p>
++<div id="slider-range-max"></div>
++
++<div class="demo-description">
++<p>Fix the maximum value of the range slider so that the user can only select a minimum.  Set the <code>range</code> option to "max."</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range-vertical.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range-vertical.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range-vertical.html	(revision 15487)
+@@ -0,0 +1,41 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Vertical range slider</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#slider-range" ).slider({
++			orientation: "vertical",
++			range: true,
++			values: [ 17, 67 ],
++			slide: function( event, ui ) {
++				$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
++			}
++		});
++		$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
++			" - $" + $( "#slider-range" ).slider( "values", 1 ) );
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="amount">Target sales goal (Millions):</label>
++	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
++</p>
++
++<div id="slider-range" style="height:250px;"></div>
++
++<div class="demo-description">
++<p>Change the orientation of the range slider to vertical.  Assign a height value via <code>.height()</code> or by setting the height through CSS, and set the <code>orientation</code> option to "vertical."</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/default.html	(revision 15487)
+@@ -0,0 +1,27 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8" >
++	<title>jQuery UI Slider - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#slider" ).slider();
++	});
++	</script>
++</head>
++<body>
++
++<div id="slider"></div>
++
++<div class="demo-description">
++<p>The basic slider is horizontal and has a single handle that can be moved with the mouse or by using the arrow keys.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/index.html	(revision 15487)
+@@ -0,0 +1,24 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="steps.html">Snap to increments</a></li>
++	<li><a href="range.html">Range slider</a></li>
++	<li><a href="rangemin.html">Range with fixed minimum</a></li>
++	<li><a href="hotelrooms.html">Room reservation</a></li>
++	<li><a href="rangemax.html">Range with fixed maximum</a></li>
++	<li><a href="slider-vertical.html">Vertical slider</a></li>
++	<li><a href="range-vertical.html">Vertical range slider</a></li>
++	<li><a href="multiple-vertical.html">Multiple sliders</a></li>
++	<li><a href="colorpicker.html">Simple colorpicker</a></li>
++	<li><a href="side-scroll.html">Simple scrollbar</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/slider-vertical.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/slider-vertical.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/slider-vertical.html	(revision 15487)
+@@ -0,0 +1,42 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Vertical slider</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#slider-vertical" ).slider({
++			orientation: "vertical",
++			range: "min",
++			min: 0,
++			max: 100,
++			value: 60,
++			slide: function( event, ui ) {
++				$( "#amount" ).val( ui.value );
++			}
++		});
++		$( "#amount" ).val( $( "#slider-vertical" ).slider( "value" ) );
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="amount">Volume:</label>
++	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
++</p>
++
++<div id="slider-vertical" style="height:200px;"></div>
++
++<div class="demo-description">
++<p>Change the orientation of the slider to vertical.  Assign a height value via <code>.height()</code> or by setting the height through CSS, and set the <code>orientation</code> option to "vertical."</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/hotelrooms.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/hotelrooms.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/hotelrooms.html	(revision 15487)
+@@ -0,0 +1,49 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Slider - Slider bound to select</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.slider.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		var select = $( "#minbeds" );
++		var slider = $( "<div id='slider'></div>" ).insertAfter( select ).slider({
++			min: 1,
++			max: 6,
++			range: "min",
++			value: select[ 0 ].selectedIndex + 1,
++			slide: function( event, ui ) {
++				select[ 0 ].selectedIndex = ui.value - 1;
++			}
++		});
++		$( "#minbeds" ).change(function() {
++			slider.slider( "value", this.selectedIndex + 1 );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<form id="reservation">
++	<label for="minbeds">Minimum number of beds</label>
++	<select name="minbeds" id="minbeds">
++		<option>1</option>
++		<option>2</option>
++		<option>3</option>
++		<option>4</option>
++		<option>5</option>
++		<option>6</option>
++	</select>
++</form>
++
++<div class="demo-description">
++<p>How to bind a slider to an existing select element. The select stays visible to display the change. When the select is changed, the slider is updated, too.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/widget/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/widget/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/widget/default.html	(revision 15487)
+@@ -0,0 +1,178 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Widget - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.custom-colorize {
++		font-size: 20px;
++		position: relative;
++		width: 75px;
++		height: 75px;
++	}
++	.custom-colorize-changer {
++		font-size: 10px;
++		position: absolute;
++		right: 0;
++		bottom: 0;
++	}
++	</style>
++	<script>
++	$(function() {
++		// the widget definition, where "custom" is the namespace,
++		// "colorize" the widget name
++		$.widget( "custom.colorize", {
++			// default options
++			options: {
++				red: 255,
++				green: 0,
++				blue: 0,
++
++				// callbacks
++				change: null,
++				random: null
++			},
++
++			// the constructor
++			_create: function() {
++				this.element
++					// add a class for theming
++					.addClass( "custom-colorize" )
++					// prevent double click to select text
++					.disableSelection();
++
++				this.changer = $( "<button>", {
++					text: "change",
++					"class": "custom-colorize-changer"
++				})
++				.appendTo( this.element )
++				.button();
++
++				// bind click events on the changer button to the random method
++				this._on( this.changer, {
++					// _on won't call random when widget is disabled
++					click: "random"
++				});
++				this._refresh();
++			},
++
++			// called when created, and later when changing options
++			_refresh: function() {
++				this.element.css( "background-color", "rgb(" +
++					this.options.red +"," +
++					this.options.green + "," +
++					this.options.blue + ")"
++				);
++
++				// trigger a callback/event
++				this._trigger( "change" );
++			},
++
++			// a public method to change the color to a random value
++			// can be called directly via .colorize( "random" )
++			random: function( event ) {
++				var colors = {
++					red: Math.floor( Math.random() * 256 ),
++					green: Math.floor( Math.random() * 256 ),
++					blue: Math.floor( Math.random() * 256 )
++				};
++
++				// trigger an event, check if it's canceled
++				if ( this._trigger( "random", event, colors ) !== false ) {
++					this.option( colors );
++				}
++			},
++
++			// events bound via _on are removed automatically
++			// revert other modifications here
++			_destroy: function() {
++				// remove generated elements
++				this.changer.remove();
++
++				this.element
++					.removeClass( "custom-colorize" )
++					.enableSelection()
++					.css( "background-color", "transparent" );
++			},
++
++			// _setOptions is called with a hash of all options that are changing
++			// always refresh when changing options
++			_setOptions: function() {
++				// _super and _superApply handle keeping the right this-context
++				this._superApply( arguments );
++				this._refresh();
++			},
++
++			// _setOption is called for each individual option that is changing
++			_setOption: function( key, value ) {
++				// prevent invalid color values
++				if ( /red|green|blue/.test(key) && (value < 0 || value > 255) ) {
++					return;
++				}
++				this._super( key, value );
++			}
++		});
++
++		// initialize with default options
++		$( "#my-widget1" ).colorize();
++
++		// initialize with two customized options
++		$( "#my-widget2" ).colorize({
++			red: 60,
++			blue: 60
++		});
++
++		// initialize with custom green value
++		// and a random callback to allow only colors with enough green
++		$( "#my-widget3" ).colorize( {
++			green: 128,
++			random: function( event, ui ) {
++				return ui.green > 128;
++			}
++		});
++
++		// click to toggle enabled/disabled
++		$( "#disable" ).click(function() {
++			// use the custom selector created for each widget to find all instances
++			// all instances are toggled together, so we can check the state from the first
++			if ( $( ":custom-colorize" ).colorize( "option", "disabled" ) ) {
++				$( ":custom-colorize" ).colorize( "enable" );
++			} else {
++				$( ":custom-colorize" ).colorize( "disable" );
++			}
++		});
++
++		// click to set options after initalization
++		$( "#black" ).click( function() {
++			$( ":custom-colorize" ).colorize( "option", {
++				red: 0,
++				green: 0,
++				blue: 0
++			});
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div>
++	<div id="my-widget1">color me</div>
++	<div id="my-widget2">color me</div>
++	<div id="my-widget3">color me</div>
++	<button id="disable">Toggle disabled option</button>
++	<button id="black">Go black</button>
++</div>
++
++<div class="demo-description">
++<p>This demo shows a simple custom widget built using the widget factory (jquery.ui.widget.js).</p>
++<p>The three boxes are initialized in different ways. Clicking them changes their background color. View source to see how it works, its heavily commented</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/widget/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/widget/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/widget/index.html	(revision 15487)
+@@ -0,0 +1,14 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Widget Demo</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content2.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content2.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content2.html	(revision 15487)
+@@ -0,0 +1,4 @@
++<p><strong>This other content was loaded via ajax.</strong></p>
++<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec turpis justo, et facilisis ligula. In congue interdum odio, a scelerisque eros posuere ac. Aenean massa tellus, dictum sit amet laoreet ut, aliquam in orci. Duis eu aliquam ligula. Nullam vel placerat ligula. Fusce venenatis viverra dictum. Phasellus dui dolor, imperdiet in sodales at, mattis sed libero. Morbi ac ipsum ligula. Quisque suscipit dui vel diam pretium nec cursus lacus malesuada. Donec sollicitudin, eros eget dignissim mollis, risus leo feugiat tellus, vel posuere nisl ipsum eu erat. Quisque posuere lacinia imperdiet. Quisque nunc leo, elementum quis ultricies et, vehicula sit amet turpis. Nullam sed nunc nec nibh condimentum mattis. Quisque sed ligula sit amet nisi ultricies bibendum eget id nisi.</p>
++<p>Proin ut erat vel nunc tincidunt commodo. Curabitur feugiat, nisi et vehicula viverra, nisl orci eleifend arcu, sed blandit lectus nisl quis nisi. In hac habitasse platea dictumst. In hac habitasse platea dictumst. Aenean rutrum gravida velit ac imperdiet. Integer vitae arcu risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin tincidunt orci at leo egestas porta. Vivamus ac augue et enim bibendum hendrerit ut id urna. Donec sollicitudin pulvinar turpis vitae scelerisque. Etiam tempor porttitor est sed blandit. Phasellus varius consequat leo eget tincidunt. Aliquam ac dui lectus. In et consectetur orci. Duis posuere nulla ac turpis faucibus vestibulum. Sed ut velit et dolor rhoncus dapibus. Sed sit amet pellentesque est.</p>
++<p>Nam in volutpat orci. Morbi sit amet orci in erat egestas dignissim. Etiam mi sapien, tempus sed iaculis a, adipiscing quis tellus. Suspendisse potenti. Nam malesuada tristique vestibulum. In tempor tellus dignissim neque consectetur eu vestibulum nisl pellentesque. Phasellus ultrices cursus velit, id aliquam nisl fringilla quis. Cras varius elit sed urna ultrices congue. Sed ornare odio sed velit pellentesque id varius nisl sodales. Sed auctor ligula egestas mi pharetra ut consectetur erat pharetra.</p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content4-broken.php
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content4-broken.php	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content4-broken.php	(revision 15487)
+@@ -0,0 +1,3 @@
++<?php 
++header("HTTP/1.0 404 Not Found");
++?>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content3-slow.php
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content3-slow.php	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content3-slow.php	(revision 15487)
+@@ -0,0 +1,7 @@
++<?php
++sleep(1);
++?>
++<p><strong>This content was loaded via ajax, though it took a second.</strong></p>
++<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec turpis justo, et facilisis ligula. In congue interdum odio, a scelerisque eros posuere ac. Aenean massa tellus, dictum sit amet laoreet ut, aliquam in orci. Duis eu aliquam ligula. Nullam vel placerat ligula. Fusce venenatis viverra dictum. Phasellus dui dolor, imperdiet in sodales at, mattis sed libero. Morbi ac ipsum ligula. Quisque suscipit dui vel diam pretium nec cursus lacus malesuada. Donec sollicitudin, eros eget dignissim mollis, risus leo feugiat tellus, vel posuere nisl ipsum eu erat. Quisque posuere lacinia imperdiet. Quisque nunc leo, elementum quis ultricies et, vehicula sit amet turpis. Nullam sed nunc nec nibh condimentum mattis. Quisque sed ligula sit amet nisi ultricies bibendum eget id nisi.</p>
++<p>Proin ut erat vel nunc tincidunt commodo. Curabitur feugiat, nisi et vehicula viverra, nisl orci eleifend arcu, sed blandit lectus nisl quis nisi. In hac habitasse platea dictumst. In hac habitasse platea dictumst. Aenean rutrum gravida velit ac imperdiet. Integer vitae arcu risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin tincidunt orci at leo egestas porta. Vivamus ac augue et enim bibendum hendrerit ut id urna. Donec sollicitudin pulvinar turpis vitae scelerisque. Etiam tempor porttitor est sed blandit. Phasellus varius consequat leo eget tincidunt. Aliquam ac dui lectus. In et consectetur orci. Duis posuere nulla ac turpis faucibus vestibulum. Sed ut velit et dolor rhoncus dapibus. Sed sit amet pellentesque est.</p>
++<p>Nam in volutpat orci. Morbi sit amet orci in erat egestas dignissim. Etiam mi sapien, tempus sed iaculis a, adipiscing quis tellus. Suspendisse potenti. Nam malesuada tristique vestibulum. In tempor tellus dignissim neque consectetur eu vestibulum nisl pellentesque. Phasellus ultrices cursus velit, id aliquam nisl fringilla quis. Cras varius elit sed urna ultrices congue. Sed ornare odio sed velit pellentesque id varius nisl sodales. Sed auctor ligula egestas mi pharetra ut consectetur erat pharetra.</p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content1.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content1.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content1.html	(revision 15487)
+@@ -0,0 +1,4 @@
++<p><strong>This content was loaded via ajax.</strong></p>
++<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++<p>Mauris vitae ante. Curabitur augue. Nulla purus nibh, lobortis ut, feugiat at, aliquam id, purus. Sed venenatis, lorem venenatis volutpat commodo, purus quam lacinia justo, mattis interdum pede pede a odio. Fusce nibh. Morbi nisl mauris, dapibus in, tristique eget, accumsan et, pede. Donec mauris risus, pulvinar ut, faucibus eu, mollis in, nunc. In augue massa, commodo a, cursus vehicula, varius eu, dui. Suspendisse sodales suscipit lorem. Morbi malesuada, eros quis condimentum dignissim, lectus nibh tristique urna, non bibendum diam massa vel risus. Morbi suscipit. Proin egestas, eros at scelerisque scelerisque, dolor lacus fringilla lacus, ut ullamcorper mi magna at quam. Aliquam sed elit. Aliquam turpis purus, congue quis, iaculis id, ullamcorper sit amet, justo. Maecenas sed mauris. Proin magna justo, interdum in, tincidunt eu, viverra eu, turpis. Suspendisse mollis. In magna. Phasellus pellentesque, urna pellentesque convallis pellentesque, augue sem blandit pede, at rhoncus libero nisl a odio.</p>
++<p>Sed vitae nibh non magna semper tempor. Duis dolor. Nam congue laoreet arcu. Fusce lobortis enim quis ligula. Maecenas commodo odio id mi. Maecenas scelerisque tellus eu odio. Etiam dolor purus, lacinia a, imperdiet in, aliquam et, eros. In pellentesque. Nullam ac massa. Integer et turpis. Ut quam augue, congue non, imperdiet id, eleifend ac, nisi. Etiam ac arcu. Cras iaculis accumsan erat. Nullam vulputate sapien nec nisi pretium rhoncus. Aliquam a nibh. Vivamus est ante, fermentum a, tincidunt ut, imperdiet nec, velit. Aenean non tortor. Sed nec mauris eget tellus condimentum rutrum.</p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/manipulation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/manipulation.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/manipulation.html	(revision 15487)
+@@ -0,0 +1,122 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs - Simple manipulation</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<script src="../../ui/jquery.ui.dialog.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#dialog label, #dialog input { display:block; }
++	#dialog label { margin-top: 0.5em; }
++	#dialog input, #dialog textarea { width: 95%; }
++	#tabs { margin-top: 1em; }
++	#tabs li .ui-icon-close { float: left; margin: 0.4em 0.2em 0 0; cursor: pointer; }
++	#add_tab { cursor: pointer; }
++	</style>
++	<script>
++	$(function() {
++		var tabTitle = $( "#tab_title" ),
++			tabContent = $( "#tab_content" ),
++			tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>",
++			tabCounter = 2;
++
++		var tabs = $( "#tabs" ).tabs();
++
++		// modal dialog init: custom buttons and a "close" callback reseting the form inside
++		var dialog = $( "#dialog" ).dialog({
++			autoOpen: false,
++			modal: true,
++			buttons: {
++				Add: function() {
++					addTab();
++					$( this ).dialog( "close" );
++				},
++				Cancel: function() {
++					$( this ).dialog( "close" );
++				}
++			},
++			close: function() {
++				form[ 0 ].reset();
++			}
++		});
++
++		// addTab form: calls addTab function on submit and closes the dialog
++		var form = dialog.find( "form" ).submit(function( event ) {
++			addTab();
++			dialog.dialog( "close" );
++			event.preventDefault();
++		});
++
++		// actual addTab function: adds new tab using the input from the form above
++		function addTab() {
++			var label = tabTitle.val() || "Tab " + tabCounter,
++				id = "tabs-" + tabCounter,
++				li = $( tabTemplate.replace( /#\{href\}/g, "#" + id ).replace( /#\{label\}/g, label ) ),
++				tabContentHtml = tabContent.val() || "Tab " + tabCounter + " content.";
++
++			tabs.find( ".ui-tabs-nav" ).append( li );
++			tabs.append( "<div id='" + id + "'><p>" + tabContentHtml + "</p></div>" );
++			tabs.tabs( "refresh" );
++			tabCounter++;
++		}
++
++		// addTab button: just opens the dialog
++		$( "#add_tab" )
++			.button()
++			.click(function() {
++				dialog.dialog( "open" );
++			});
++
++		// close icon: removing the tab on click
++		tabs.delegate( "span.ui-icon-close", "click", function() {
++			var panelId = $( this ).closest( "li" ).remove().attr( "aria-controls" );
++			$( "#" + panelId ).remove();
++			tabs.tabs( "refresh" );
++		});
++
++		tabs.bind( "keyup", function( event ) {
++			if ( event.altKey && event.keyCode === $.ui.keyCode.BACKSPACE ) {
++				var panelId = tabs.find( ".ui-tabs-active" ).remove().attr( "aria-controls" );
++				$( "#" + panelId ).remove();
++				tabs.tabs( "refresh" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="dialog" title="Tab data">
++	<form>
++		<fieldset class="ui-helper-reset">
++			<label for="tab_title">Title</label>
++			<input type="text" name="tab_title" id="tab_title" value="" class="ui-widget-content ui-corner-all" />
++			<label for="tab_content">Content</label>
++			<textarea name="tab_content" id="tab_content" class="ui-widget-content ui-corner-all"></textarea>
++		</fieldset>
++	</form>
++</div>
++
++<button id="add_tab">Add Tab</button>
++
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">Nunc tincidunt</a> <span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span></li>
++	</ul>
++	<div id="tabs-1">
++		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Simple tabs adding and removing.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax.html	(revision 15487)
+@@ -0,0 +1,46 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs - Content via Ajax</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#tabs" ).tabs({
++			beforeLoad: function( event, ui ) {
++				ui.jqXHR.error(function() {
++					ui.panel.html(
++						"Couldn't load this tab. We'll try to fix this as soon as possible. " +
++						"If this wouldn't be a demo." );
++				});
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">Preloaded</a></li>
++		<li><a href="ajax/content1.html">Tab 1</a></li>
++		<li><a href="ajax/content2.html">Tab 2</a></li>
++		<li><a href="ajax/content3-slow.php">Tab 3 (slow)</a></li>
++		<li><a href="ajax/content4-broken.php">Tab 4 (broken)</a></li>
++	</ul>
++	<div id="tabs-1">
++		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Fetch external content via Ajax for the tabs by setting an href value in the tab links.  While the Ajax request is waiting for a response, the tab label changes to say "Loading...", then returns to the normal label once loaded.</p>
++<p>Tabs 3 and 4 demonstrate slow-loading and broken AJAX tabs, and how to handle serverside errors in those cases. Note: These two require a webserver to interpret PHP. They won't work from the filesystem.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/bottom.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/bottom.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/bottom.html	(revision 15487)
+@@ -0,0 +1,58 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs - Tabs at bottom</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#tabs" ).tabs();
++
++		// fix the classes
++		$( ".tabs-bottom .ui-tabs-nav, .tabs-bottom .ui-tabs-nav > *" )
++			.removeClass( "ui-corner-all ui-corner-top" )
++			.addClass( "ui-corner-bottom" );
++
++		// move the nav to the bottom
++		$( ".tabs-bottom .ui-tabs-nav" ).appendTo( ".tabs-bottom" );
++	});
++	</script>
++	<style>
++	/* force a height so the tabs don't jump as content height changes */
++	#tabs .tabs-spacer { float: left; height: 200px; }
++	.tabs-bottom .ui-tabs-nav { clear: left; padding: 0 .2em .2em .2em; }
++	.tabs-bottom .ui-tabs-nav li { top: auto; bottom: 0; margin: 0 .2em 1px 0; border-bottom: auto; border-top: 0; }
++	.tabs-bottom .ui-tabs-nav li.ui-tabs-active { margin-top: -1px; padding-top: 1px; }
++	</style>
++</head>
++<body>
++
++<div id="tabs" class="tabs-bottom">
++	<ul>
++		<li><a href="#tabs-1">Nunc tincidunt</a></li>
++		<li><a href="#tabs-2">Proin dolor</a></li>
++		<li><a href="#tabs-3">Aenean lacinia</a></li>
++	</ul>
++	<div class="tabs-spacer"></div>
++	<div id="tabs-1">
++		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++	</div>
++	<div id="tabs-2">
++		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
++	</div>
++	<div id="tabs-3">
++		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
++		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>With some additional CSS (for positioning) and JS (to put the right classes on elements) the tabs can be placed below their content.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/default.html	(revision 15487)
+@@ -0,0 +1,42 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#tabs" ).tabs();
++	});
++	</script>
++</head>
++<body>
++
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">Nunc tincidunt</a></li>
++		<li><a href="#tabs-2">Proin dolor</a></li>
++		<li><a href="#tabs-3">Aenean lacinia</a></li>
++	</ul>
++	<div id="tabs-1">
++		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++	</div>
++	<div id="tabs-2">
++		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
++	</div>
++	<div id="tabs-3">
++		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
++		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Click tabs to swap between content that is broken into logical sections.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/mouseover.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/mouseover.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/mouseover.html	(revision 15487)
+@@ -0,0 +1,44 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs - Open on mouseover</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#tabs" ).tabs({
++			event: "mouseover"
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">Nunc tincidunt</a></li>
++		<li><a href="#tabs-2">Proin dolor</a></li>
++		<li><a href="#tabs-3">Aenean lacinia</a></li>
++	</ul>
++	<div id="tabs-1">
++		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++	</div>
++	<div id="tabs-2">
++		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
++	</div>
++	<div id="tabs-3">
++		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
++		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Toggle sections open/closed on mouseover with the <code>event</code> option. The default value for event is "click."</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/index.html	(revision 15487)
+@@ -0,0 +1,20 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="ajax.html">Content via Ajax</a></li>
++	<li><a href="mouseover.html">Open on mouseover</a></li>
++	<li><a href="collapsible.html">Collapse content</a></li>
++	<li><a href="sortable.html">Sortable</a></li>
++	<li><a href="manipulation.html">Simple manipulation</a></li>
++	<li><a href="bottom.html">Tabs below content</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/collapsible.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/collapsible.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/collapsible.html	(revision 15487)
+@@ -0,0 +1,48 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs - Collapse content</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#tabs" ).tabs({
++			collapsible: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">Nunc tincidunt</a></li>
++		<li><a href="#tabs-2">Proin dolor</a></li>
++		<li><a href="#tabs-3">Aenean lacinia</a></li>
++	</ul>
++	<div id="tabs-1">
++		<p><strong>Click this tab again to close the content pane.</strong></p>
++		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++	</div>
++	<div id="tabs-2">
++		<p><strong>Click this tab again to close the content pane.</strong></p>
++		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
++	</div>
++	<div id="tabs-3">
++		<p><strong>Click this tab again to close the content pane.</strong></p>
++		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Click the selected tab to toggle its content closed/open.  To enable this functionality, set the <code>collapsible</code> option to true.</p>
++<pre><code>collapsible: true
++</code></pre>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/vertical.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/vertical.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/vertical.html	(revision 15487)
+@@ -0,0 +1,54 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs - Vertical Tabs functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#tabs" ).tabs().addClass( "ui-tabs-vertical ui-helper-clearfix" );
++		$( "#tabs li" ).removeClass( "ui-corner-top" ).addClass( "ui-corner-left" );
++	});
++	</script>
++	<style>
++	.ui-tabs-vertical { width: 55em; }
++	.ui-tabs-vertical .ui-tabs-nav { padding: .2em .1em .2em .2em; float: left; width: 12em; }
++	.ui-tabs-vertical .ui-tabs-nav li { clear: left; width: 100%; border-bottom-width: 1px !important; border-right-width: 0 !important; margin: 0 -1px .2em 0; }
++	.ui-tabs-vertical .ui-tabs-nav li a { display:block; }
++	.ui-tabs-vertical .ui-tabs-nav li.ui-tabs-active { padding-bottom: 0; padding-right: .1em; border-right-width: 1px; border-right-width: 1px; }
++	.ui-tabs-vertical .ui-tabs-panel { padding: 1em; float: right; width: 40em;}
++	</style>
++</head>
++<body>
++
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">Nunc tincidunt</a></li>
++		<li><a href="#tabs-2">Proin dolor</a></li>
++		<li><a href="#tabs-3">Aenean lacinia</a></li>
++	</ul>
++	<div id="tabs-1">
++		<h2>Content heading 1</h2>
++		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++	</div>
++	<div id="tabs-2">
++		<h2>Content heading 2</h2>
++		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
++	</div>
++	<div id="tabs-3">
++		<h2>Content heading 3</h2>
++		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
++		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Click tabs to swap between content that is broken into logical sections.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/sortable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/sortable.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/sortable.html	(revision 15487)
+@@ -0,0 +1,51 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tabs - Sortable</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		var tabs = $( "#tabs" ).tabs();
++		tabs.find( ".ui-tabs-nav" ).sortable({
++			axis: "x",
++			stop: function() {
++				tabs.tabs( "refresh" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">Nunc tincidunt</a></li>
++		<li><a href="#tabs-2">Proin dolor</a></li>
++		<li><a href="#tabs-3">Aenean lacinia</a></li>
++	</ul>
++	<div id="tabs-1">
++		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
++	</div>
++	<div id="tabs-2">
++		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
++	</div>
++	<div id="tabs-3">
++		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
++		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Drag the tabs above to re-order them.</p>
++<p>Making tabs sortable is as simple as calling <code>.sortable()</code> on the <code>.ui-tabs-nav</code> element.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/label.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/label.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/label.html	(revision 15487)
+@@ -0,0 +1,61 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Progressbar - Custom Label</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.progressbar.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-progressbar {
++		position: relative;
++	}
++	.progress-label {
++		position: absolute;
++		left: 50%;
++		top: 4px;
++		font-weight: bold;
++		text-shadow: 1px 1px 0 #fff;
++	}
++	</style>
++	<script>
++	$(function() {
++		var progressbar = $( "#progressbar" ),
++			progressLabel = $( ".progress-label" );
++
++		progressbar.progressbar({
++			value: false,
++			change: function() {
++				progressLabel.text( progressbar.progressbar( "value" ) + "%" );
++			},
++			complete: function() {
++				progressLabel.text( "Complete!" );
++			}
++		});
++
++		function progress() {
++			var val = progressbar.progressbar( "value" ) || 0;
++
++			progressbar.progressbar( "value", val + 1 );
++
++			if ( val < 99 ) {
++				setTimeout( progress, 100 );
++			}
++		}
++
++		setTimeout( progress, 3000 );
++	});
++	</script>
++</head>
++<body>
++
++<div id="progressbar"><div class="progress-label">Loading...</div></div>
++
++<div class="demo-description">
++<p>Custom updated label demo.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/images/pbar-ani.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/images/pbar-ani.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/images/pbar-ani.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/images/pbar-ani.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/images/pbar-ani.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/default.html	(revision 15487)
+@@ -0,0 +1,28 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Progressbar - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.progressbar.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#progressbar" ).progressbar({
++			value: 37
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="progressbar"></div>
++
++<div class="demo-description">
++<p>Default determinate progress bar.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/index.html	(revision 15487)
+@@ -0,0 +1,16 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Progressbar Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="indeterminate.html">Indeterminate</a></li>
++	<li><a href="label.html">Custom Labels</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/indeterminate.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/indeterminate.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/indeterminate.html	(revision 15487)
+@@ -0,0 +1,53 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Progressbar - Indeterminate Value</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.progressbar.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#progressbar" ).progressbar({
++			value: false
++		});
++		$( "button" ).on( "click", function( event ) {
++			var target = $( event.target ),
++				progressbar = $( "#progressbar" ),
++				progressbarValue = progressbar.find( ".ui-progressbar-value" );
++
++			if ( target.is( "#numButton" ) ) {
++				progressbar.progressbar( "option", {
++					value: Math.floor( Math.random() * 100 )
++				});
++			} else if ( target.is( "#colorButton" ) ) {
++				progressbarValue.css({
++					"background": '#' + Math.floor( Math.random() * 16777215 ).toString( 16 )
++				});
++			} else if ( target.is( "#falseButton" ) ) {
++				progressbar.progressbar( "option", "value", false );
++			}
++		});
++	});
++	</script>
++	<style>
++	#progressbar .ui-progressbar-value {
++		background-color: #ccc;
++	}
++	</style>
++</head>
++<body>
++
++<div id="progressbar"></div>
++<button id="numButton">Random Value - Determinate</button>
++<button id="falseButton">Indeterminate</button>
++<button id="colorButton">Random Color</button>
++
++<div class="demo-description">
++<p>Indeterminate progress bar and switching between determinate and indeterminate styles.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content2.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content2.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content2.html	(revision 15487)
+@@ -0,0 +1 @@
++<p><strong>This other content was loaded via ajax.</strong></p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content1.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content1.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content1.html	(revision 15487)
+@@ -0,0 +1 @@
++<p><strong>This content was loaded via ajax.</strong></p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/video-player.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/video-player.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/video-player.html	(revision 15487)
+@@ -0,0 +1,117 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tooltip - Video Player demo</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.tooltip.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.effect.js"></script>
++	<script src="../../ui/jquery.ui.effect-blind.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.player {
++		width: 500px;
++		height: 300px;
++		border: 2px groove gray;
++		background: rgb(200, 200, 200);
++		text-align: center;
++		line-height: 300px;
++	}
++	.ui-tooltip {
++		border: 1px solid white;
++		background: rgba(20, 20, 20, 1);
++		color: white;
++	}
++	.set {
++		display: inline-block;
++	}
++	.notification {
++		position: absolute;
++		display: inline-block;
++		font-size: 2em;
++		padding: .5em;
++		box-shadow: 2px 2px 5px -2px rgba(0,0,0,0.5);
++	}
++	</style>
++	<script>
++	$(function() {
++		function notify( input ) {
++			var msg = "Selected " + $.trim( input.data( "tooltip-title" ) || input.text() );
++			$( "<div>" )
++				.appendTo( document.body )
++				.text( msg )
++				.addClass( "notification ui-state-default ui-corner-bottom" )
++				.position({
++					my: "center top",
++					at: "center top",
++					of: window
++				})
++				.show({
++					effect: "blind"
++				})
++				.delay( 1000 )
++				.hide({
++					effect: "blind",
++					duration: "slow"
++				}, function() {
++					$( this ).remove();
++				});
++		}
++
++		$( "button" ).each(function() {
++			var button = $( this ).button({
++				icons: {
++					primary: $( this ).data( "icon" )
++				},
++				text: !!$( this ).attr( "title" )
++			});
++			button.click(function() {
++				notify( button );
++			});
++		});
++		$( ".set" ).buttonset({
++			items: "button"
++		});
++
++		$( document ).tooltip({
++			position: {
++				my: "center top",
++				at: "center bottom+5",
++			},
++			show: {
++				duration: "fast"
++			},
++			hide: {
++				effect: "hide"
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="player">Here Be Video (HTML5?)</div>
++<div class="tools">
++	<span class="set">
++		<button data-icon="ui-icon-circle-arrow-n" title="I like this">Like</button>
++		<button data-icon="ui-icon-circle-arrow-s">I dislike this</button>
++	</span>
++	<div class="set">
++		<button data-icon="ui-icon-circle-plus" title="Add to Watch Later">Add to</button>
++		<button class="menu" data-icon="ui-icon-triangle-1-s">Add to favorites or playlist</button>
++	</div>
++	<button title="Share this video">Share</button>
++	<button data-icon="ui-icon-alert">Flag as inappropiate</button>
++</div>
++
++<div class="demo-description">
++<p>A fake video player with like/share/stats button, each with a custom-styled tooltip.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-content.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-content.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-content.html	(revision 15487)
+@@ -0,0 +1,83 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tooltip - Custom content</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.tooltip.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.photo {
++		width: 300px;
++		text-align: center;
++	}
++	.photo .ui-widget-header {
++		margin: 1em 0;
++	}
++	.map {
++		width: 350px;
++		height: 350px;
++	}
++	.ui-tooltip {
++		max-width: 350px;
++	}
++	</style>
++	<script>
++	$(function() {
++		$( document ).tooltip({
++			items: "img, [data-geo], [title]",
++			content: function() {
++				var element = $( this );
++				if ( element.is( "[data-geo]" ) ) {
++					var text = element.text();
++					return "<img class='map' alt='" + text +
++						"' src='http://maps.google.com/maps/api/staticmap?" +
++						"zoom=11&size=350x350&maptype=terrain&sensor=false&center=" +
++						text + "'>";
++				}
++				if ( element.is( "[title]" ) ) {
++					return element.attr( "title" );
++				}
++				if ( element.is( "img" ) ) {
++					return element.attr( "alt" );
++				}
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget photo">
++	<div class="ui-widget-header ui-corner-all">
++		<h2>St. Stephen's Cathedral</h2>
++		<h3><a href="http://maps.google.com/maps?q=vienna,+austria&amp;z=11" data-geo>Vienna, Austria</a></h3>
++	</div>
++	<a href="http://en.wikipedia.org/wiki/File:Wien_Stefansdom_DSC02656.JPG">
++		<img src="images/st-stephens.jpg" alt="St. Stephen's Cathedral" class="ui-corner-all">
++	</a>
++</div>
++
++<div class="ui-widget photo">
++	<div class="ui-widget-header ui-corner-all">
++		<h2>Tower Bridge</h2>
++		<h3><a href="http://maps.google.com/maps?q=london,+england&amp;z=11" data-geo>London, England</a></h3>
++	</div>
++	<a href="http://en.wikipedia.org/wiki/File:Tower_bridge_London_Twilight_-_November_2006.jpg">
++		<img src="images/tower-bridge.jpg" alt="Tower Bridge" class="ui-corner-all">
++	</a>
++</div>
++
++<p>All images are part of <a href="http://commons.wikimedia.org/wiki/Main_Page">Wikimedia Commons</a>
++and are licensed under <a href="http://creativecommons.org/licenses/by-sa/3.0/deed.en" title="Creative Commons Attribution-ShareAlike 3.0">CC BY-SA 3.0</a> by the copyright holder.</p>
++
++<div class="demo-description">
++<p>Shows how to combine different event delegated tooltips into a single instance, by customizing the items and content options.</p>
++<p>We realize you may want to interact with the map tooltips. This is a planned feature for a future version.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/tower-bridge.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/tower-bridge.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/tower-bridge.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/tower-bridge.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/tower-bridge.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/st-stephens.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/st-stephens.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/st-stephens.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/st-stephens.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/st-stephens.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/tracking.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/tracking.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/tracking.html	(revision 15487)
+@@ -0,0 +1,42 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tooltip - Track the mouse</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.tooltip.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	label {
++		display: inline-block;
++		width: 5em;
++	}
++	</style>
++	<script>
++	$(function() {
++		$( document ).tooltip({
++			track: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p><a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
++the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.</p>
++<p>But as it's not a native tooltip, it can be styled. Any themes built with
++<a href="http://themeroller.com" title="ThemeRoller: jQuery UI's theme builder application">ThemeRoller</a>
++will also style tooltips accordingly.</p>
++<p>Tooltips are also useful for form elements, to show some additional information in the context of each field.</p>
++<p><label for="age">Your age:</label><input id="age" title="We ask for your age only for statistical purposes."></p>
++<p>Hover the field to see the tooltip.</p>
++
++<div class="demo-description">
++<p>Here the tooltips are positioned relative to the mouse, and follow the mouse while it moves above the element.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/default.html	(revision 15487)
+@@ -0,0 +1,40 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tooltip - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.tooltip.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( document ).tooltip();
++	});
++	</script>
++	<style>
++	label {
++		display: inline-block;
++		width: 5em;
++	}
++	</style>
++</head>
++<body>
++
++<p><a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
++the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.</p>
++<p>But as it's not a native tooltip, it can be styled. Any themes built with
++<a href="http://themeroller.com" title="ThemeRoller: jQuery UI's theme builder application">ThemeRoller</a>
++will also style tooltips accordingly.</p>
++<p>Tooltips are also useful for form elements, to show some additional information in the context of each field.</p>
++<p><label for="age">Your age:</label><input id="age" title="We ask for your age only for statistical purposes."></p>
++<p>Hover the field to see the tooltip.</p>
++
++<div class="demo-description">
++<p>Hover the links above or use the tab key to cycle the focus on each element.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/forms.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/forms.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/forms.html	(revision 15487)
+@@ -0,0 +1,65 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tooltip - Forms</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.tooltip.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	label {
++		display: inline-block; width: 5em;
++	}
++	fieldset div {
++		margin-bottom: 2em;
++	}
++	fieldset .help {
++		display: inline-block;
++	}
++	.ui-tooltip {
++		width: 210px;
++	}
++	</style>
++	<script>
++	$(function() {
++		var tooltips = $( "[title]" ).tooltip();
++		$( "<button>" )
++			.text( "Show help" )
++			.button()
++			.click(function() {
++				tooltips.tooltip( "open" );
++			})
++			.insertAfter( "form" );
++	});
++	</script>
++</head>
++<body>
++
++<form>
++	<fieldset>
++		<div>
++			<label for="firstname">Firstname</label>
++			<input id="firstname" name="firstname" title="Please provide your firstname.">
++		</div>
++		<div>
++			<label for="lastname">Lastname</label>
++			<input id="lastname" name="lastname" title="Please provide also your lastname.">
++		</div>
++		<div>
++			<label for="address">Address</label>
++			<input id="address" name="address" title="Your home or work address.">
++		</div>
++	</fieldset>
++</form>
++
++<div class="demo-description">
++<p>Use the button below to display the help texts, or just focus or mouseover the indivdual inputs.</p>
++<p>A fixed width is defined in CSS to make the tooltips look consistent when displayed all at once.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-animation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-animation.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-animation.html	(revision 15487)
+@@ -0,0 +1,54 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tooltip - Custom animation demo</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.tooltip.js"></script>
++	<script src="../../ui/jquery.ui.effect.js"></script>
++	<script src="../../ui/jquery.ui.effect-explode.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#show-option" ).tooltip({
++			show: {
++				effect: "slideDown",
++				delay: 250
++			}
++		});
++		$( "#hide-option" ).tooltip({
++			hide: {
++				effect: "explode",
++				delay: 250
++			}
++		});
++		$( "#open-event" ).tooltip({
++			show: null,
++			position: {
++				my: "left top",
++				at: "left bottom"
++			},
++			open: function( event, ui ) {
++				ui.tooltip.animate({ top: ui.tooltip.position().top + 10 }, "fast" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>There are various ways to customize the animation of a tooltip.</p>
++<p>You can use the <a id="show-option" href="http://jqueryui.com/demos/tooltip/#option-show" title="slide down on show">show</a> and
++<a id="hide-option" href="http://jqueryui.com/demos/tooltip/#option-hide" title="explode on hide">hide</a> options.</p>
++<p>You can also use the <a id="open-event" href="http://jqueryui.com/demos/tooltip/#event-open" title="move down on show">open event</a>.</p>
++
++<div class="demo-description">
++<p>This demo shows how to customize animations using the show and hide options,
++as well as the open event.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/index.html	(revision 15487)
+@@ -0,0 +1,20 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tooltip Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="custom-style.html">Custom style with arrow</a></li>
++	<li><a href="forms.html">Forms with tooltips</a></li>
++	<li><a href="tracking.html">Track the mouse</a></li>
++	<li><a href="custom-animation.html">Custom animation</a></li>
++	<li><a href="custom-content.html">Custom content</a></li>
++	<li><a href="video-player.html">Video Player</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-style.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-style.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-style.html	(revision 15487)
+@@ -0,0 +1,95 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Tooltip - Custom Styling</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.tooltip.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.tooltip.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( document ).tooltip({
++			position: {
++				my: "center bottom-20",
++				at: "center top",
++				using: function( position, feedback ) {
++					$( this ).css( position );
++					$( "<div>" )
++						.addClass( "arrow" )
++						.addClass( feedback.vertical )
++						.addClass( feedback.horizontal )
++						.appendTo( this );
++				}
++			}
++		});
++	});
++	</script>
++	<style>
++	.ui-tooltip, .arrow:after {
++		background: black;
++		border: 2px solid white;
++	}
++	.ui-tooltip {
++		padding: 10px 20px;
++		color: white;
++		border-radius: 20px;
++		font: bold 14px "Helvetica Neue", Sans-Serif;
++		text-transform: uppercase;
++		box-shadow: 0 0 7px black;
++	}
++	.arrow {
++		width: 70px;
++		height: 16px;
++		overflow: hidden;
++		position: absolute;
++		left: 50%;
++		margin-left: -35px;
++		bottom: -16px;
++	}
++	.arrow.top {
++		top: -16px;
++		bottom: auto;
++	}
++	.arrow.left {
++		left: 20%;
++	}
++	.arrow:after {
++		content: "";
++		position: absolute;
++		left: 20px;
++		top: -20px;
++		width: 25px;
++		height: 25px;
++		box-shadow: 6px 5px 9px -9px black;
++		-webkit-transform: rotate(45deg);
++		-moz-transform: rotate(45deg);
++		-ms-transform: rotate(45deg);
++		-o-transform: rotate(45deg);
++		tranform: rotate(45deg);
++	}
++	.arrow.top:after {
++		bottom: -20px;
++		top: auto;
++	}
++	</style>
++</head>
++<body>
++
++<p><a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
++the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.</p>
++<p>But as it's not a native tooltip, it can be styled. Any themes built with
++<a href="http://themeroller.com" title="ThemeRoller: jQuery UI's theme builder application">ThemeRoller</a>
++will also style tooltips accordingly.</p>
++<p>Tooltips are also useful for form elements, to show some additional information in the context of each field.</p>
++<p><label for="age">Your age:</label> <input id="age" title="We ask for your age only for statistical purposes."></p>
++<p>Hover the field to see the tooltip.</p>
++
++<div class="demo-description">
++<p>Hover the links above or use the tab key to cycle the focus on each element.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/effect/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/effect/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/effect/default.html	(revision 15487)
+@@ -0,0 +1,102 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Effects - Effect demo</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.effect.js"></script>
++	<script src="../../ui/jquery.ui.effect-blind.js"></script>
++	<script src="../../ui/jquery.ui.effect-bounce.js"></script>
++	<script src="../../ui/jquery.ui.effect-clip.js"></script>
++	<script src="../../ui/jquery.ui.effect-drop.js"></script>
++	<script src="../../ui/jquery.ui.effect-explode.js"></script>
++	<script src="../../ui/jquery.ui.effect-fade.js"></script>
++	<script src="../../ui/jquery.ui.effect-fold.js"></script>
++	<script src="../../ui/jquery.ui.effect-highlight.js"></script>
++	<script src="../../ui/jquery.ui.effect-pulsate.js"></script>
++	<script src="../../ui/jquery.ui.effect-scale.js"></script>
++	<script src="../../ui/jquery.ui.effect-shake.js"></script>
++	<script src="../../ui/jquery.ui.effect-slide.js"></script>
++	<script src="../../ui/jquery.ui.effect-transfer.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++		.toggler { width: 500px; height: 200px; position: relative; }
++		#button { padding: .5em 1em; text-decoration: none; }
++		#effect { width: 240px; height: 135px; padding: 0.4em; position: relative; }
++		#effect h3 { margin: 0; padding: 0.4em; text-align: center; }
++		.ui-effects-transfer { border: 2px dotted gray; }
++	</style>
++	<script>
++	$(function() {
++		// run the currently selected effect
++		function runEffect() {
++			// get effect type from
++			var selectedEffect = $( "#effectTypes" ).val();
++
++			// most effect types need no options passed by default
++			var options = {};
++			// some effects have required parameters
++			if ( selectedEffect === "scale" ) {
++				options = { percent: 0 };
++			} else if ( selectedEffect === "transfer" ) {
++				options = { to: "#button", className: "ui-effects-transfer" };
++			} else if ( selectedEffect === "size" ) {
++				options = { to: { width: 200, height: 60 } };
++			}
++
++			// run the effect
++			$( "#effect" ).effect( selectedEffect, options, 500, callback );
++		};
++
++		// callback function to bring a hidden box back
++		function callback() {
++			setTimeout(function() {
++				$( "#effect" ).removeAttr( "style" ).hide().fadeIn();
++			}, 1000 );
++		};
++
++		// set effect from select menu value
++		$( "#button" ).click(function() {
++			runEffect();
++			return false;
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="toggler">
++	<div id="effect" class="ui-widget-content ui-corner-all">
++		<h3 class="ui-widget-header ui-corner-all">Effect</h3>
++		<p>
++			Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede. Nulla lorem metus, adipiscing ut, luctus sed, hendrerit vitae, mi.
++		</p>
++	</div>
++</div>
++
++<select name="effects" id="effectTypes">
++	<option value="blind">Blind</option>
++	<option value="bounce">Bounce</option>
++	<option value="clip">Clip</option>
++	<option value="drop">Drop</option>
++	<option value="explode">Explode</option>
++	<option value="fade">Fade</option>
++	<option value="fold">Fold</option>
++	<option value="highlight">Highlight</option>
++	<option value="puff">Puff</option>
++	<option value="pulsate">Pulsate</option>
++	<option value="scale">Scale</option>
++	<option value="shake">Shake</option>
++	<option value="size">Size</option>
++	<option value="slide">Slide</option>
++	<option value="transfer">Transfer</option>
++</select>
++
++<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
++
++<div class="demo-description">
++<p>Click the button above to show the effect.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/effect/easing.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/effect/easing.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/effect/easing.html	(revision 15487)
+@@ -0,0 +1,102 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Effects - Easing demo</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.effect.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.graph {
++		float: left;
++		margin-left: 10px;
++	}
++	</style>
++	<script>
++	$(function() {
++		if ( !$( "<canvas>" )[0].getContext ) {
++			$( "<div>" ).text(
++				"Your browser doesn't support canvas, which is required for this demo."
++			).appendTo( "#graphs" );
++			return;
++		}
++
++		var i = 0,
++			width = 100,
++			height = 100;
++
++		$.each( $.easing, function( name, impl ) {
++			var graph = $( "<div>" ).addClass( "graph" ).appendTo( "#graphs" ),
++				text = $( "<div>" ).text( ++i + ". " + name ).appendTo( graph ),
++				wrap = $( "<div>" ).appendTo( graph ).css( 'overflow', 'hidden' ),
++				canvas = $( "<canvas>" ).appendTo( wrap )[ 0 ];
++
++			canvas.width = width;
++			canvas.height = height;
++			var drawHeight = height * 0.8,
++				cradius = 10;
++				ctx = canvas.getContext( "2d" );
++			ctx.fillStyle = "black";
++
++			// draw background
++			ctx.beginPath();
++			ctx.moveTo( cradius, 0 );
++			ctx.quadraticCurveTo( 0, 0, 0, cradius );
++			ctx.lineTo( 0, height - cradius );
++			ctx.quadraticCurveTo( 0, height, cradius, height );
++			ctx.lineTo( width - cradius, height );
++			ctx.quadraticCurveTo( width, height, width, height - cradius );
++			ctx.lineTo( width, 0 );
++			ctx.lineTo( cradius, 0 );
++			ctx.fill();
++
++			// draw bottom line
++			ctx.strokeStyle = "#555";
++			ctx.beginPath();
++			ctx.moveTo( width * 0.1, drawHeight + .5 );
++			ctx.lineTo( width * 0.9, drawHeight + .5 );
++			ctx.stroke();
++
++			// draw top line
++			ctx.strokeStyle = "#555";
++			ctx.beginPath();
++			ctx.moveTo( width * 0.1, drawHeight * .3 - .5 );
++			ctx.lineTo( width * 0.9, drawHeight * .3 - .5 );
++			ctx.stroke();
++
++			// plot easing
++			ctx.strokeStyle = "white";
++			ctx.beginPath();
++			ctx.lineWidth = 2;
++			ctx.moveTo( width * 0.1, drawHeight );
++			$.each( new Array( width ), function( position ) {
++				var state = position / width,
++					val = impl( state, position, 0, 1, width );
++				ctx.lineTo( position * 0.8 + width * 0.1,
++					drawHeight - drawHeight * val * 0.7 );
++			});
++			ctx.stroke();
++
++			// animate on click
++			graph.click(function() {
++				wrap
++					.animate( { height: "hide" }, 2000, name )
++					.delay( 800 )
++					.animate( { height: "show" }, 2000, name );
++			});
++
++			graph.width( width ).height( height + text.height() + 10 );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="graphs"></div>
++
++<div class="demo-description">
++<p><strong>All easings provided by jQuery UI are drawn above, using a HTML canvas element</strong>. Click a diagram to see the easing in action.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/effect/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/effect/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/effect/index.html	(revision 15487)
+@@ -0,0 +1,15 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Effects Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Effect showcase</a></li>
++	<li><a href="easing.html">Easing showcase</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/demos.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/demos.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/demos.css	(revision 15487)
+@@ -0,0 +1,19 @@
++body {
++	font-size: 62.5%;
++	font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif";
++}
++
++table {
++	font-size: 1em;
++}
++
++.demo-description {
++	clear: both;
++	padding: 12px;
++	font-size: 1.3em;
++	line-height: 1.4em;
++}
++
++.ui-draggable, .ui-droppable {
++	background-position: top;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal.html	(revision 15487)
+@@ -0,0 +1,38 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Dialog - Basic modal</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.dialog.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#dialog-modal" ).dialog({
++			height: 140,
++			modal: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="dialog-modal" title="Basic modal dialog">
++	<p>Adding the modal overlay screen makes the dialog look more prominent because it dims out the page content.</p>
++</div>
++
++<p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
++
++<div class="demo-description">
++<p>A modal dialog prevents the user from interacting with the rest of the page until it is closed.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-form.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-form.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-form.html	(revision 15487)
+@@ -0,0 +1,157 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Dialog - Modal form</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.dialog.js"></script>
++	<script src="../../ui/jquery.ui.effect.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++		body { font-size: 62.5%; }
++		label, input { display:block; }
++		input.text { margin-bottom:12px; width:95%; padding: .4em; }
++		fieldset { padding:0; border:0; margin-top:25px; }
++		h1 { font-size: 1.2em; margin: .6em 0; }
++		div#users-contain { width: 350px; margin: 20px 0; }
++		div#users-contain table { margin: 1em 0; border-collapse: collapse; width: 100%; }
++		div#users-contain table td, div#users-contain table th { border: 1px solid #eee; padding: .6em 10px; text-align: left; }
++		.ui-dialog .ui-state-error { padding: .3em; }
++		.validateTips { border: 1px solid transparent; padding: 0.3em; }
++	</style>
++	<script>
++	$(function() {
++		var name = $( "#name" ),
++			email = $( "#email" ),
++			password = $( "#password" ),
++			allFields = $( [] ).add( name ).add( email ).add( password ),
++			tips = $( ".validateTips" );
++
++		function updateTips( t ) {
++			tips
++				.text( t )
++				.addClass( "ui-state-highlight" );
++			setTimeout(function() {
++				tips.removeClass( "ui-state-highlight", 1500 );
++			}, 500 );
++		}
++
++		function checkLength( o, n, min, max ) {
++			if ( o.val().length > max || o.val().length < min ) {
++				o.addClass( "ui-state-error" );
++				updateTips( "Length of " + n + " must be between " +
++					min + " and " + max + "." );
++				return false;
++			} else {
++				return true;
++			}
++		}
++
++		function checkRegexp( o, regexp, n ) {
++			if ( !( regexp.test( o.val() ) ) ) {
++				o.addClass( "ui-state-error" );
++				updateTips( n );
++				return false;
++			} else {
++				return true;
++			}
++		}
++
++		$( "#dialog-form" ).dialog({
++			autoOpen: false,
++			height: 300,
++			width: 350,
++			modal: true,
++			buttons: {
++				"Create an account": function() {
++					var bValid = true;
++					allFields.removeClass( "ui-state-error" );
++
++					bValid = bValid && checkLength( name, "username", 3, 16 );
++					bValid = bValid && checkLength( email, "email", 6, 80 );
++					bValid = bValid && checkLength( password, "password", 5, 16 );
++
++					bValid = bValid && checkRegexp( name, /^[a-z]([0-9a-z_])+$/i, "Username may consist of a-z, 0-9, underscores, begin with a letter." );
++					// From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
++					bValid = bValid && checkRegexp( email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. ui@jquery.com" );
++					bValid = bValid && checkRegexp( password, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9" );
++
++					if ( bValid ) {
++						$( "#users tbody" ).append( "<tr>" +
++							"<td>" + name.val() + "</td>" +
++							"<td>" + email.val() + "</td>" +
++							"<td>" + password.val() + "</td>" +
++						"</tr>" );
++						$( this ).dialog( "close" );
++					}
++				},
++				Cancel: function() {
++					$( this ).dialog( "close" );
++				}
++			},
++			close: function() {
++				allFields.val( "" ).removeClass( "ui-state-error" );
++			}
++		});
++
++		$( "#create-user" )
++			.button()
++			.click(function() {
++				$( "#dialog-form" ).dialog( "open" );
++			});
++	});
++	</script>
++</head>
++<body>
++
++<div id="dialog-form" title="Create new user">
++	<p class="validateTips">All form fields are required.</p>
++
++	<form>
++	<fieldset>
++		<label for="name">Name</label>
++		<input type="text" name="name" id="name" class="text ui-widget-content ui-corner-all" />
++		<label for="email">Email</label>
++		<input type="text" name="email" id="email" value="" class="text ui-widget-content ui-corner-all" />
++		<label for="password">Password</label>
++		<input type="password" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" />
++	</fieldset>
++	</form>
++</div>
++
++
++<div id="users-contain" class="ui-widget">
++	<h1>Existing Users:</h1>
++	<table id="users" class="ui-widget ui-widget-content">
++		<thead>
++			<tr class="ui-widget-header ">
++				<th>Name</th>
++				<th>Email</th>
++				<th>Password</th>
++			</tr>
++		</thead>
++		<tbody>
++			<tr>
++				<td>John Doe</td>
++				<td>john.doe@example.com</td>
++				<td>johndoe1</td>
++			</tr>
++		</tbody>
++	</table>
++</div>
++<button id="create-user">Create new user</button>
++
++<div class="demo-description">
++<p>Use a modal dialog to require that the user enter data during a multi-step process.  Embed form markup in the content area, set the <code>modal</code> option to true, and specify primary and secondary user actions with the <code>buttons</code> option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-message.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-message.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-message.html	(revision 15487)
+@@ -0,0 +1,49 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Dialog - Modal message</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.dialog.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#dialog-message" ).dialog({
++			modal: true,
++			buttons: {
++				Ok: function() {
++					$( this ).dialog( "close" );
++				}
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="dialog-message" title="Download complete">
++	<p>
++		<span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>
++		Your files have downloaded successfully into the My Downloads folder.
++	</p>
++	<p>
++		Currently using <b>36% of your storage space</b>.
++	</p>
++</div>
++
++<p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
++
++<div class="demo-description">
++<p>Use a modal dialog to explicitly acknowledge information or an action before continuing their work.  Set the <code>modal</code> option to true, and specify a primary action (Ok) with the <code>buttons</code> option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/animated.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/animated.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/animated.html	(revision 15487)
+@@ -0,0 +1,52 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Dialog - Animation</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.dialog.js"></script>
++	<script src="../../ui/jquery.ui.effect.js"></script>
++	<script src="../../ui/jquery.ui.effect-blind.js"></script>
++	<script src="../../ui/jquery.ui.effect-explode.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#dialog" ).dialog({
++			autoOpen: false,
++			show: {
++				effect: "blind",
++				duration: 1000
++			},
++			hide: {
++				effect: "explode",
++				duration: 1000
++			}
++		});
++
++		$( "#opener" ).click(function() {
++			$( "#dialog" ).dialog( "open" );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="dialog" title="Basic dialog">
++	<p>This is an animated dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
++</div>
++
++<button id="opener">Open Dialog</button>
++
++<div class="demo-description">
++<p>Dialogs may be animated by specifying an effect for the show and/or hide properties.  You must include the individual effects file for any effects you would like to use.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-confirmation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-confirmation.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-confirmation.html	(revision 15487)
+@@ -0,0 +1,47 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Dialog - Modal confirmation</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.dialog.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#dialog-confirm" ).dialog({
++			resizable: false,
++			height:140,
++			modal: true,
++			buttons: {
++				"Delete all items": function() {
++					$( this ).dialog( "close" );
++				},
++				Cancel: function() {
++					$( this ).dialog( "close" );
++				}
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="dialog-confirm" title="Empty the recycle bin?">
++	<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>These items will be permanently deleted and cannot be recovered. Are you sure?</p>
++</div>
++
++<p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
++
++<div class="demo-description">
++<p>Confirm an action that may be destructive or important.  Set the <code>modal</code> option to true, and specify primary and secondary user actions with the <code>buttons</code> option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/default.html	(revision 15487)
+@@ -0,0 +1,33 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Dialog - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.dialog.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#dialog" ).dialog();
++	});
++	</script>
++</head>
++<body>
++
++<div id="dialog" title="Basic dialog">
++	<p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
++</div>
++
++<div class="demo-description">
++<p>The basic dialog window is an overlay positioned within the viewport and is protected from page content (like select elements) shining through with an iframe.  It has a title bar and a content area, and can be moved, resized and closed with the 'x' icon by default.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/index.html	(revision 15487)
+@@ -0,0 +1,19 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Dialog Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="animated.html">Animated dialog</a></li>
++	<li><a href="modal.html">Modal dialog</a></li>
++	<li><a href="modal-message.html">Modal message</a></li>
++	<li><a href="modal-confirmation.html">Modal confirmation</a></li>
++	<li><a href="modal-form.html">Modal form</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/fillspace.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/fillspace.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/fillspace.html	(revision 15487)
+@@ -0,0 +1,72 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Accordion - Fill space</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<script src="../../ui/jquery.ui.accordion.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#accordion-resizer {
++		padding: 10px;
++		width: 350px;
++		height: 220px;
++	}
++	</style>
++	<script>
++	$(function() {
++		$( "#accordion" ).accordion({
++			heightStyle: "fill"
++		});
++	});
++	$(function() {
++		$( "#accordion-resizer" ).resizable({
++			minHeight: 140,
++			minWidth: 200,
++			resize: function() {
++				$( "#accordion" ).accordion( "refresh" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<h3 class="docs">Resize the outer container:</h3>
++
++<div id="accordion-resizer" class="ui-widget-content">
++	<div id="accordion">
++		<h3>Section 1</h3>
++		<div>
++			<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
++		</div>
++		<h3>Section 2</h3>
++		<div>
++			<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
++		</div>
++		<h3>Section 3</h3>
++		<div>
++			<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
++			<ul>
++				<li>List item one</li>
++				<li>List item two</li>
++				<li>List item three</li>
++			</ul>
++		</div>
++		<h3>Section 4</h3>
++		<div>
++			<p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
++		</div>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Because the accordion is comprised of block-level elements, by default its width fills the available horizontal space. To fill the vertical space allocated by its container, set the <code>heightStyle</code> option to <code>"fill"</code>, and the script will automatically set the dimensions of the accordion to the height of its parent container.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/custom-icons.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/custom-icons.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/custom-icons.html	(revision 15487)
+@@ -0,0 +1,64 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Accordion - Customize icons</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.accordion.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		var icons = {
++			header: "ui-icon-circle-arrow-e",
++			activeHeader: "ui-icon-circle-arrow-s"
++		};
++		$( "#accordion" ).accordion({
++			icons: icons
++		});
++		$( "#toggle" ).button().click(function() {
++			if ( $( "#accordion" ).accordion( "option", "icons" ) ) {
++				$( "#accordion" ).accordion( "option", "icons", null );
++			} else {
++				$( "#accordion" ).accordion( "option", "icons", icons );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="accordion">
++	<h3>Section 1</h3>
++	<div>
++		<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
++	</div>
++	<h3>Section 2</h3>
++	<div>
++		<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
++	</div>
++	<h3>Section 3</h3>
++	<div>
++		<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
++		<ul>
++			<li>List item one</li>
++			<li>List item two</li>
++			<li>List item three</li>
++		</ul>
++	</div>
++	<h3>Section 4</h3>
++	<div>
++		<p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
++	</div>
++</div>
++
++<button id="toggle">Toggle icons</button>
++
++<div class="demo-description">
++<p>Customize the header icons with the <code>icons</code> option, which accepts classes for the header's default and active (open) state.  Use any class from the UI CSS framework, or create custom classes with background images.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/default.html	(revision 15487)
+@@ -0,0 +1,80 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Accordion - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.accordion.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#accordion" ).accordion();
++	});
++	</script>
++</head>
++<body>
++
++<div id="accordion">
++	<h3>Section 1</h3>
++	<div>
++		<p>
++		Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
++		ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
++		amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
++		odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
++		</p>
++	</div>
++	<h3>Section 2</h3>
++	<div>
++		<p>
++		Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
++		purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
++		velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
++		suscipit faucibus urna.
++		</p>
++	</div>
++	<h3>Section 3</h3>
++	<div>
++		<p>
++		Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
++		Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
++		ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
++		lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
++		</p>
++		<ul>
++			<li>List item one</li>
++			<li>List item two</li>
++			<li>List item three</li>
++		</ul>
++	</div>
++	<h3>Section 4</h3>
++	<div>
++		<p>
++		Cras dictum. Pellentesque habitant morbi tristique senectus et netus
++		et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
++		faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
++		mauris vel est.
++		</p>
++		<p>
++		Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
++		Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
++		inceptos himenaeos.
++		</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>
++Click headers to expand/collapse content that is broken into logical sections, much like tabs.
++Optionally, toggle sections open/closed on mouseover.
++</p>
++<p>
++The underlying HTML markup is a series of headers (H3 tags) and content divs so the content is
++usable without JavaScript.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/hoverintent.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/hoverintent.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/hoverintent.html	(revision 15487)
+@@ -0,0 +1,148 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Accordion - Open on hoverintent</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.accordion.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#accordion" ).accordion({
++			event: "click hoverintent"
++		});
++	});
++
++	/*
++	 * hoverIntent | Copyright 2011 Brian Cherne
++	 * http://cherne.net/brian/resources/jquery.hoverIntent.html
++	 * modified by the jQuery UI team
++	 */
++	$.event.special.hoverintent = {
++		setup: function() {
++			$( this ).bind( "mouseover", jQuery.event.special.hoverintent.handler );
++		},
++		teardown: function() {
++			$( this ).unbind( "mouseover", jQuery.event.special.hoverintent.handler );
++		},
++		handler: function( event ) {
++			var currentX, currentY, timeout,
++				args = arguments,
++				target = $( event.target ),
++				previousX = event.pageX,
++				previousY = event.pageY;
++
++			function track( event ) {
++				currentX = event.pageX;
++				currentY = event.pageY;
++			};
++
++			function clear() {
++				target
++					.unbind( "mousemove", track )
++					.unbind( "mouseout", clear );
++				clearTimeout( timeout );
++			}
++
++			function handler() {
++				var prop,
++					orig = event;
++
++				if ( ( Math.abs( previousX - currentX ) +
++						Math.abs( previousY - currentY ) ) < 7 ) {
++					clear();
++
++					event = $.Event( "hoverintent" );
++					for ( prop in orig ) {
++						if ( !( prop in event ) ) {
++							event[ prop ] = orig[ prop ];
++						}
++					}
++					// Prevent accessing the original event since the new event
++					// is fired asynchronously and the old event is no longer
++					// usable (#6028)
++					delete event.originalEvent;
++
++					target.trigger( event );
++				} else {
++					previousX = currentX;
++					previousY = currentY;
++					timeout = setTimeout( handler, 100 );
++				}
++			}
++
++			timeout = setTimeout( handler, 100 );
++			target.bind({
++				mousemove: track,
++				mouseout: clear
++			});
++		}
++	};
++	</script>
++</head>
++<body>
++
++<div id="accordion">
++	<h3>Section 1</h3>
++	<div>
++		<p>
++		Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
++		ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
++		amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
++		odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
++		</p>
++	</div>
++	<h3>Section 2</h3>
++	<div>
++		<p>
++		Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
++		purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
++		velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
++		suscipit faucibus urna.
++		</p>
++	</div>
++	<h3>Section 3</h3>
++	<div>
++		<p>
++		Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
++		Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
++		ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
++		lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
++		</p>
++		<ul>
++			<li>List item one</li>
++			<li>List item two</li>
++			<li>List item three</li>
++		</ul>
++	</div>
++	<h3>Section 4</h3>
++	<div>
++		<p>
++		Cras dictum. Pellentesque habitant morbi tristique senectus et netus
++		et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
++		faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
++		mauris vel est.
++		</p>
++		<p>
++		Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
++		Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
++		inceptos himenaeos.
++		</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>
++Click headers to expand/collapse content that is broken into logical sections, much like tabs.
++Optionally, toggle sections open/closed on mouseover.
++</p>
++<p>
++The underlying HTML markup is a series of headers (H3 tags) and content divs so the content is
++usable without JavaScript.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/index.html	(revision 15487)
+@@ -0,0 +1,20 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Accordion Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="fillspace.html">Fill space</a></li>
++	<li><a href="no-auto-height.html">No auto height</a></li>
++	<li><a href="collapsible.html">Collapse content</a></li>
++	<li><a href="hoverintent.html">Open on hoverintent</a></li>
++	<li><a href="custom-icons.html">Customize icons</a></li>
++	<li><a href="sortable.html">Sortable</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/no-auto-height.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/no-auto-height.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/no-auto-height.html	(revision 15487)
+@@ -0,0 +1,50 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Accordion - No auto height</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.accordion.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#accordion" ).accordion({
++			heightStyle: "content"
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="accordion">
++	<h3>Section 1</h3>
++	<div>
++		<p>Mauris mauris ante, blandit et, ultrices a, susceros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
++	</div>
++	<h3>Section 2</h3>
++	<div>
++		<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
++	</div>
++	<h3>Section 3</h3>
++	<div>
++		<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
++		<ul>
++			<li>List item</li>
++			<li>List item</li>
++			<li>List item</li>
++			<li>List item</li>
++			<li>List item</li>
++			<li>List item</li>
++			<li>List item</li>
++		</ul>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Setting <code>heightStyle: "content"</code> allows the accordion panels to keep their native height.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/collapsible.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/collapsible.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/collapsible.html	(revision 15487)
+@@ -0,0 +1,50 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Accordion - Collapse content</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.accordion.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#accordion" ).accordion({
++			collapsible: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="accordion">
++	<h3>Section 1</h3>
++	<div>
++		<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
++	</div>
++	<h3>Section 2</h3>
++	<div>
++		<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
++	</div>
++	<h3>Section 3</h3>
++	<div>
++		<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
++		<ul>
++			<li>List item one</li>
++			<li>List item two</li>
++			<li>List item three</li>
++		</ul>
++	</div>
++	<h3>Section 4</h3>
++	<div>
++		<p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>By default, accordions always keep one section open. To allow for all sections to be be collapsible, set the <code>collapsible</code> option to true. Click on the currently open section to collapse its content pane.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/sortable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/sortable.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/sortable.html	(revision 15487)
+@@ -0,0 +1,74 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Accordion - Sortable</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<script src="../../ui/jquery.ui.accordion.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	/* IE has layout issues when sorting (see #5413) */
++	.group { zoom: 1 }
++	</style>
++	<script>
++	$(function() {
++		$( "#accordion" )
++			.accordion({
++				header: "> div > h3"
++			})
++			.sortable({
++				axis: "y",
++				handle: "h3",
++				stop: function( event, ui ) {
++					// IE doesn't register the blur when sorting
++					// so trigger focusout handlers to remove .ui-state-focus
++					ui.item.children( "h3" ).triggerHandler( "focusout" );
++				}
++			});
++	});
++	</script>
++</head>
++<body>
++
++<div id="accordion">
++	<div class="group">
++		<h3>Section 1</h3>
++		<div>
++			<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
++		</div>
++	</div>
++	<div class="group">
++		<h3>Section 2</h3>
++		<div>
++			<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
++		</div>
++	</div>
++	<div class="group">
++		<h3>Section 3</h3>
++		<div>
++			<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
++			<ul>
++				<li>List item one</li>
++				<li>List item two</li>
++				<li>List item three</li>
++			</ul>
++		</div>
++	</div>
++	<div class="group">
++		<h3>Section 4</h3>
++		<div>
++			<p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
++		</div>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Drag the header to re-order panels.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/maxheight.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/maxheight.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/maxheight.html	(revision 15487)
+@@ -0,0 +1,71 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Scrollable results</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-autocomplete {
++		max-height: 100px;
++		overflow-y: auto;
++		/* prevent horizontal scrollbar */
++		overflow-x: hidden;
++	}
++	/* IE 6 doesn't support max-height
++	 * we use height instead, but this forces the menu to always be this tall
++	 */
++	* html .ui-autocomplete {
++		height: 100px;
++	}
++	</style>
++	<script>
++	$(function() {
++		var availableTags = [
++			"ActionScript",
++			"AppleScript",
++			"Asp",
++			"BASIC",
++			"C",
++			"C++",
++			"Clojure",
++			"COBOL",
++			"ColdFusion",
++			"Erlang",
++			"Fortran",
++			"Groovy",
++			"Haskell",
++			"Java",
++			"JavaScript",
++			"Lisp",
++			"Perl",
++			"PHP",
++			"Python",
++			"Ruby",
++			"Scala",
++			"Scheme"
++		];
++		$( "#tags" ).autocomplete({
++			source: availableTags
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label for="tags">Tags: </label>
++	<input id="tags">
++</div>
++
++<div class="demo-description">
++<p>When displaying a long list of options, you can simply set the max-height for the autocomplete menu to prevent the menu from growing too large. Try typing "a" or "s" above to get a long list of results that you can scroll through.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/custom-data.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/custom-data.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/custom-data.html	(revision 15487)
+@@ -0,0 +1,90 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Custom data and display</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#project-label {
++		display: block;
++		font-weight: bold;
++		margin-bottom: 1em;
++	}
++	#project-icon {
++		float: left;
++		height: 32px;
++		width: 32px;
++	}
++	#project-description {
++		margin: 0;
++		padding: 0;
++	}
++	</style>
++	<script>
++	$(function() {
++		var projects = [
++			{
++				value: "jquery",
++				label: "jQuery",
++				desc: "the write less, do more, JavaScript library",
++				icon: "jquery_32x32.png"
++			},
++			{
++				value: "jquery-ui",
++				label: "jQuery UI",
++				desc: "the official user interface library for jQuery",
++				icon: "jqueryui_32x32.png"
++			},
++			{
++				value: "sizzlejs",
++				label: "Sizzle JS",
++				desc: "a pure-JavaScript CSS selector engine",
++				icon: "sizzlejs_32x32.png"
++			}
++		];
++
++		$( "#project" ).autocomplete({
++			minLength: 0,
++			source: projects,
++			focus: function( event, ui ) {
++				$( "#project" ).val( ui.item.label );
++				return false;
++			},
++			select: function( event, ui ) {
++				$( "#project" ).val( ui.item.label );
++				$( "#project-id" ).val( ui.item.value );
++				$( "#project-description" ).html( ui.item.desc );
++				$( "#project-icon" ).attr( "src", "images/" + ui.item.icon );
++
++				return false;
++			}
++		})
++		.data( "ui-autocomplete" )._renderItem = function( ul, item ) {
++			return $( "<li>" )
++				.append( "<a>" + item.label + "<br>" + item.desc + "</a>" )
++				.appendTo( ul );
++		};
++	});
++	</script>
++</head>
++<body>
++
++<div id="project-label">Select a project (type "j" for a start):</div>
++<img id="project-icon" src="images/transparent_1x1.png" class="ui-state-default" alt="">
++<input id="project">
++<input type="hidden" id="project-id">
++<p id="project-description"></p>
++
++<div class="demo-description">
++<p>You can use your own custom data formats and displays by simply overriding the default focus and select actions.</p>
++<p>Try typing "j" to get a list of projects or just press the down arrow.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/folding.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/folding.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/folding.html	(revision 15487)
+@@ -0,0 +1,56 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Accent folding</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		var names = [ "Jörn Zaefferer", "Scott González", "John Resig" ];
++
++		var accentMap = {
++			"á": "a",
++			"ö": "o"
++		};
++		var normalize = function( term ) {
++			var ret = "";
++			for ( var i = 0; i < term.length; i++ ) {
++				ret += accentMap[ term.charAt(i) ] || term.charAt(i);
++			}
++			return ret;
++		};
++
++		$( "#developer" ).autocomplete({
++			source: function( request, response ) {
++				var matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
++				response( $.grep( names, function( value ) {
++					value = value.label || value.value || value;
++					return matcher.test( value ) || matcher.test( normalize( value ) );
++				}) );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<form>
++	<label for="developer">Developer: </label>
++	<input id="developer">
++	</form>
++</div>
++
++<div class="demo-description">
++<p>The autocomplete field uses a custom source option which will match results that have accented characters even when the text field doesn't contain accented characters. However if the you type in accented characters in the text field it is smart enough not to show results that aren't accented.</p>
++<p>Try typing "Jo" to see "John" and "Jörn", then type "Jö" to see only "Jörn".</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-jsonp.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-jsonp.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-jsonp.html	(revision 15487)
+@@ -0,0 +1,82 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Remote JSONP datasource</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-autocomplete-loading {
++		background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
++	}
++	#city { width: 25em; }
++	</style>
++	<script>
++	$(function() {
++		function log( message ) {
++			$( "<div>" ).text( message ).prependTo( "#log" );
++			$( "#log" ).scrollTop( 0 );
++		}
++
++		$( "#city" ).autocomplete({
++			source: function( request, response ) {
++				$.ajax({
++					url: "http://ws.geonames.org/searchJSON",
++					dataType: "jsonp",
++					data: {
++						featureClass: "P",
++						style: "full",
++						maxRows: 12,
++						name_startsWith: request.term
++					},
++					success: function( data ) {
++						response( $.map( data.geonames, function( item ) {
++							return {
++								label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
++								value: item.name
++							}
++						}));
++					}
++				});
++			},
++			minLength: 2,
++			select: function( event, ui ) {
++				log( ui.item ?
++					"Selected: " + ui.item.label :
++					"Nothing selected, input was " + this.value);
++			},
++			open: function() {
++				$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
++			},
++			close: function() {
++				$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label for="city">Your city: </label>
++	<input id="city">
++	Powered by <a href="http://geonames.org">geonames.org</a>
++</div>
++
++<div class="ui-widget" style="margin-top:2em; font-family:Arial">
++	Result:
++	<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
++</div>
++
++<div class="demo-description">
++<p>The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are cities, displayed when at least two characters are entered into the field.</p>
++<p>In this case, the datasource is the <a href="http://geonames.org">geonames.org webservice</a>. While only the city name itself ends up in the input after selecting an element, more info is displayed in the suggestions to help find the right entry. That data is also available in callbacks, as illustrated by the Result area below the input.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/default.html	(revision 15487)
+@@ -0,0 +1,58 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		var availableTags = [
++			"ActionScript",
++			"AppleScript",
++			"Asp",
++			"BASIC",
++			"C",
++			"C++",
++			"Clojure",
++			"COBOL",
++			"ColdFusion",
++			"Erlang",
++			"Fortran",
++			"Groovy",
++			"Haskell",
++			"Java",
++			"JavaScript",
++			"Lisp",
++			"Perl",
++			"PHP",
++			"Python",
++			"Ruby",
++			"Scala",
++			"Scheme"
++		];
++		$( "#tags" ).autocomplete({
++			source: availableTags
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label for="tags">Tags: </label>
++	<input id="tags">
++</div>
++
++<div class="demo-description">
++<p>The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are tags for programming languages, give "ja" (for Java or JavaScript) a try.</p>
++<p>The datasource is a simple JavaScript array, provided to the widget using the source-option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple-remote.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple-remote.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple-remote.html	(revision 15487)
+@@ -0,0 +1,80 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Multiple, remote</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-autocomplete-loading {
++		background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
++	}
++	</style>
++	<script>
++	$(function() {
++		function split( val ) {
++			return val.split( /,\s*/ );
++		}
++		function extractLast( term ) {
++			return split( term ).pop();
++		}
++
++		$( "#birds" )
++			// don't navigate away from the field on tab when selecting an item
++			.bind( "keydown", function( event ) {
++				if ( event.keyCode === $.ui.keyCode.TAB &&
++						$( this ).data( "ui-autocomplete" ).menu.active ) {
++					event.preventDefault();
++				}
++			})
++			.autocomplete({
++				source: function( request, response ) {
++					$.getJSON( "search.php", {
++						term: extractLast( request.term )
++					}, response );
++				},
++				search: function() {
++					// custom minLength
++					var term = extractLast( this.value );
++					if ( term.length < 2 ) {
++						return false;
++					}
++				},
++				focus: function() {
++					// prevent value inserted on focus
++					return false;
++				},
++				select: function( event, ui ) {
++					var terms = split( this.value );
++					// remove the current input
++					terms.pop();
++					// add the selected item
++					terms.push( ui.item.value );
++					// add placeholder to get the comma-and-space at the end
++					terms.push( "" );
++					this.value = terms.join( ", " );
++					return false;
++				}
++			});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label for="birds">Birds: </label>
++	<input id="birds" size="50">
++</div>
++
++<div class="demo-description">
++<p>Usage: Enter at least two characters to get bird name suggestions. Select a value to continue adding more names.</p>
++<p>This is an example showing how to use the source-option along with some events to enable autocompleting multiple values into a single field.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/categories.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/categories.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/categories.html	(revision 15487)
+@@ -0,0 +1,67 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Categories</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-autocomplete-category {
++		font-weight: bold;
++		padding: .2em .4em;
++		margin: .8em 0 .2em;
++		line-height: 1.5;
++	}
++	</style>
++	<script>
++	$.widget( "custom.catcomplete", $.ui.autocomplete, {
++		_renderMenu: function( ul, items ) {
++			var that = this,
++				currentCategory = "";
++			$.each( items, function( index, item ) {
++				if ( item.category != currentCategory ) {
++					ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
++					currentCategory = item.category;
++				}
++				that._renderItemData( ul, item );
++			});
++		}
++	});
++	</script>
++	<script>
++	$(function() {
++		var data = [
++			{ label: "anders", category: "" },
++			{ label: "andreas", category: "" },
++			{ label: "antal", category: "" },
++			{ label: "annhhx10", category: "Products" },
++			{ label: "annk K12", category: "Products" },
++			{ label: "annttop C13", category: "Products" },
++			{ label: "anders andersson", category: "People" },
++			{ label: "andreas andersson", category: "People" },
++			{ label: "andreas johnson", category: "People" }
++		];
++
++		$( "#search" ).catcomplete({
++			delay: 0,
++			source: data
++		});
++	});
++	</script>
++</head>
++<body>
++
++<label for="search">Search: </label>
++<input id="search">
++
++<div class="demo-description">
++<p>A categorized search result. Try typing "a" or "n".</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/london.xml
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/london.xml	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/london.xml	(revision 15487)
+@@ -0,0 +1,114 @@
++<?xml version="1.0" encoding="UTF-8" standalone="no"?>
++<geonames style="MEDIUM">
++<totalResultsCount>6987</totalResultsCount>
++<geoname>
++<name>London</name>
++<lat>51.5084152563931</lat>
++<lng>-0.125532746315002</lng>
++<geonameId>2643743</geonameId>
++<countryCode>GB</countryCode>
++<countryName>United Kingdom</countryName>
++
++<fcl>P</fcl>
++<fcode>PPLC</fcode>
++</geoname>
++<geoname>
++<name>London</name>
++<lat>42.983389283</lat>
++<lng>-81.233042387</lng>
++<geonameId>6058560</geonameId>
++<countryCode>CA</countryCode>
++<countryName>Canada</countryName>
++
++<fcl>P</fcl>
++<fcode>PPL</fcode>
++</geoname>
++<geoname>
++<name>East London</name>
++<lat>-33.0152850934643</lat>
++<lng>27.9116249084473</lng>
++<geonameId>1006984</geonameId>
++<countryCode>ZA</countryCode>
++<countryName>South Africa</countryName>
++
++<fcl>P</fcl>
++<fcode>PPL</fcode>
++</geoname>
++<geoname>
++<name>City</name>
++<lat>51.5133363996235</lat>
++<lng>-0.0890064239501953</lng>
++<geonameId>2643744</geonameId>
++<countryCode>GB</countryCode>
++<countryName>United Kingdom</countryName>
++
++<fcl>A</fcl>
++<fcode>ADM2</fcode>
++</geoname>
++<geoname>
++<name>London</name>
++<lat>37.1289771</lat>
++<lng>-84.0832646</lng>
++<geonameId>4298960</geonameId>
++<countryCode>US</countryCode>
++<countryName>United States</countryName>
++
++<fcl>P</fcl>
++<fcode>PPL</fcode>
++</geoname>
++<geoname>
++<name>The Tower of London</name>
++<lat>51.5082349601834</lat>
++<lng>-0.0763034820556641</lng>
++<geonameId>6286786</geonameId>
++<countryCode>GB</countryCode>
++<countryName>United Kingdom</countryName>
++
++<fcl>S</fcl>
++<fcode>CSTL</fcode>
++</geoname>
++<geoname>
++<name>London Reefs</name>
++<lat>8.85</lat>
++<lng>112.5333333</lng>
++<geonameId>1879967</geonameId>
++<countryCode>  </countryCode>
++<countryName>  </countryName>
++
++<fcl>U</fcl>
++<fcode>RFSU</fcode>
++</geoname>
++<geoname>
++<name>Greater London</name>
++<lat>51.5</lat>
++<lng>-0.1666667</lng>
++<geonameId>2648110</geonameId>
++<countryCode>GB</countryCode>
++<countryName>United Kingdom</countryName>
++
++<fcl>A</fcl>
++<fcode>ADM2</fcode>
++</geoname>
++<geoname>
++<name>London</name>
++<lat>46.1666667</lat>
++<lng>6.0166667</lng>
++<geonameId>2661811</geonameId>
++<countryCode>CH</countryCode>
++<countryName>Switzerland</countryName>
++
++<fcl>H</fcl>
++<fcode>STM</fcode>
++</geoname>
++<geoname>
++<name>London Borough of Islington</name>
++<lat>51.5333333</lat>
++<lng>-0.1333333</lng>
++<geonameId>3333156</geonameId>
++<countryCode>GB</countryCode>
++<countryName>United Kingdom</countryName>
++
++<fcl>A</fcl>
++<fcode>ADM2</fcode>
++</geoname>
++</geonames>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/search.php
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/search.php	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/search.php	(revision 15487)
+@@ -0,0 +1,590 @@
++<?php
++
++sleep( 3 );
++// no term passed - just exit early with no response
++if (empty($_GET['term'])) exit ;
++$q = strtolower($_GET["term"]);
++// remove slashes if they were magically added
++if (get_magic_quotes_gpc()) $q = stripslashes($q);
++
++$items = array(
++"Great Bittern"=>"Botaurus stellaris",
++"Little Grebe"=>"Tachybaptus ruficollis",
++"Black-necked Grebe"=>"Podiceps nigricollis",
++"Little Bittern"=>"Ixobrychus minutus",
++"Black-crowned Night Heron"=>"Nycticorax nycticorax",
++"Purple Heron"=>"Ardea purpurea",
++"White Stork"=>"Ciconia ciconia",
++"Spoonbill"=>"Platalea leucorodia",
++"Red-crested Pochard"=>"Netta rufina",
++"Common Eider"=>"Somateria mollissima",
++"Red Kite"=>"Milvus milvus",
++"Hen Harrier"=>"Circus cyaneus",
++"Montagu`s Harrier"=>"Circus pygargus",
++"Black Grouse"=>"Tetrao tetrix",
++"Grey Partridge"=>"Perdix perdix",
++"Spotted Crake"=>"Porzana porzana",
++"Corncrake"=>"Crex crex",
++"Common Crane"=>"Grus grus",
++"Avocet"=>"Recurvirostra avosetta",
++"Stone Curlew"=>"Burhinus oedicnemus",
++"Common Ringed Plover"=>"Charadrius hiaticula",
++"Kentish Plover"=>"Charadrius alexandrinus",
++"Ruff"=>"Philomachus pugnax",
++"Common Snipe"=>"Gallinago gallinago",
++"Black-tailed Godwit"=>"Limosa limosa",
++"Common Redshank"=>"Tringa totanus",
++"Sandwich Tern"=>"Sterna sandvicensis",
++"Common Tern"=>"Sterna hirundo",
++"Arctic Tern"=>"Sterna paradisaea",
++"Little Tern"=>"Sternula albifrons",
++"Black Tern"=>"Chlidonias niger",
++"Barn Owl"=>"Tyto alba",
++"Little Owl"=>"Athene noctua",
++"Short-eared Owl"=>"Asio flammeus",
++"European Nightjar"=>"Caprimulgus europaeus",
++"Common Kingfisher"=>"Alcedo atthis",
++"Eurasian Hoopoe"=>"Upupa epops",
++"Eurasian Wryneck"=>"Jynx torquilla",
++"European Green Woodpecker"=>"Picus viridis",
++"Crested Lark"=>"Galerida cristata",
++"White-headed Duck"=>"Oxyura leucocephala",
++"Pale-bellied Brent Goose"=>"Branta hrota",
++"Tawny Pipit"=>"Anthus campestris",
++"Whinchat"=>"Saxicola rubetra",
++"European Stonechat"=>"Saxicola rubicola",
++"Northern Wheatear"=>"Oenanthe oenanthe",
++"Savi`s Warbler"=>"Locustella luscinioides",
++"Sedge Warbler"=>"Acrocephalus schoenobaenus",
++"Great Reed Warbler"=>"Acrocephalus arundinaceus",
++"Bearded Reedling"=>"Panurus biarmicus",
++"Red-backed Shrike"=>"Lanius collurio",
++"Great Grey Shrike"=>"Lanius excubitor",
++"Woodchat Shrike"=>"Lanius senator",
++"Common Raven"=>"Corvus corax",
++"Yellowhammer"=>"Emberiza citrinella",
++"Ortolan Bunting"=>"Emberiza hortulana",
++"Corn Bunting"=>"Emberiza calandra",
++"Great Cormorant"=>"Phalacrocorax carbo",
++"Hawfinch"=>"Coccothraustes coccothraustes",
++"Common Shelduck"=>"Tadorna tadorna",
++"Bluethroat"=>"Luscinia svecica",
++"Grey Heron"=>"Ardea cinerea",
++"Barn Swallow"=>"Hirundo rustica",
++"Hooded Crow"=>"Corvus cornix",
++"Dunlin"=>"Calidris alpina",
++"Eurasian Pied Flycatcher"=>"Ficedula hypoleuca",
++"Eurasian Nuthatch"=>"Sitta europaea",
++"Short-toed Tree Creeper"=>"Certhia brachydactyla",
++"Wood Lark"=>"Lullula arborea",
++"Tree Pipit"=>"Anthus trivialis",
++"Eurasian Hobby"=>"Falco subbuteo",
++"Marsh Warbler"=>"Acrocephalus palustris",
++"Wood Sandpiper"=>"Tringa glareola",
++"Tawny Owl"=>"Strix aluco",
++"Lesser Whitethroat"=>"Sylvia curruca",
++"Barnacle Goose"=>"Branta leucopsis",
++"Common Goldeneye"=>"Bucephala clangula",
++"Western Marsh Harrier"=>"Circus aeruginosus",
++"Common Buzzard"=>"Buteo buteo",
++"Sanderling"=>"Calidris alba",
++"Little Gull"=>"Larus minutus",
++"Eurasian Magpie"=>"Pica pica",
++"Willow Warbler"=>"Phylloscopus trochilus",
++"Wood Warbler"=>"Phylloscopus sibilatrix",
++"Great Crested Grebe"=>"Podiceps cristatus",
++"Eurasian Jay"=>"Garrulus glandarius",
++"Common Redstart"=>"Phoenicurus phoenicurus",
++"Blue-headed Wagtail"=>"Motacilla flava",
++"Common Swift"=>"Apus apus",
++"Marsh Tit"=>"Poecile palustris",
++"Goldcrest"=>"Regulus regulus",
++"European Golden Plover"=>"Pluvialis apricaria",
++"Eurasian Bullfinch"=>"Pyrrhula pyrrhula",
++"Common Whitethroat"=>"Sylvia communis",
++"Meadow Pipit"=>"Anthus pratensis",
++"Greylag Goose"=>"Anser anser",
++"Spotted Flycatcher"=>"Muscicapa striata",
++"European Greenfinch"=>"Carduelis chloris",
++"Common Greenshank"=>"Tringa nebularia",
++"Great Spotted Woodpecker"=>"Dendrocopos major",
++"Greater Canada Goose"=>"Branta canadensis",
++"Mistle Thrush"=>"Turdus viscivorus",
++"Great Black-backed Gull"=>"Larus marinus",
++"Goosander"=>"Mergus merganser",
++"Great Egret"=>"Casmerodius albus",
++"Northern Goshawk"=>"Accipiter gentilis",
++"Dunnock"=>"Prunella modularis",
++"Stock Dove"=>"Columba oenas",
++"Common Wood Pigeon"=>"Columba palumbus",
++"Eurasian Woodcock"=>"Scolopax rusticola",
++"House Sparrow"=>"Passer domesticus",
++"Common House Martin"=>"Delichon urbicum",
++"Red Knot"=>"Calidris canutus",
++"Western Jackdaw"=>"Corvus monedula",
++"Brambling"=>"Fringilla montifringilla",
++"Northern Lapwing"=>"Vanellus vanellus",
++"European Reed Warbler"=>"Acrocephalus scirpaceus",
++"Lesser Black-backed Gull"=>"Larus fuscus",
++"Little Egret"=>"Egretta garzetta",
++"Little Stint"=>"Calidris minuta",
++"Common Linnet"=>"Carduelis cannabina",
++"Mute Swan"=>"Cygnus olor",
++"Common Cuckoo"=>"Cuculus canorus",
++"Black-headed Gull"=>"Larus ridibundus",
++"Greater White-fronted Goose"=>"Anser albifrons",
++"Great Tit"=>"Parus major",
++"Redwing"=>"Turdus iliacus",
++"Gadwall"=>"Anas strepera",
++"Fieldfare"=>"Turdus pilaris",
++"Tufted Duck"=>"Aythya fuligula",
++"Crested Tit"=>"Lophophanes cristatus",
++"Willow Tit"=>"Poecile montanus",
++"Eurasian Coot"=>"Fulica atra",
++"Common Blackbird"=>"Turdus merula",
++"Smew"=>"Mergus albellus",
++"Common Sandpiper"=>"Actitis hypoleucos",
++"Sand Martin"=>"Riparia riparia",
++"Purple Sandpiper"=>"Calidris maritima",
++"Northern Pintail"=>"Anas acuta",
++"Blue Tit"=>"Cyanistes caeruleus",
++"European Goldfinch"=>"Carduelis carduelis",
++"Eurasian Whimbrel"=>"Numenius phaeopus",
++"Common Reed Bunting"=>"Emberiza schoeniclus",
++"Eurasian Tree Sparrow"=>"Passer montanus",
++"Rook"=>"Corvus frugilegus",
++"European Robin"=>"Erithacus rubecula",
++"Bar-tailed Godwit"=>"Limosa lapponica",
++"Dark-bellied Brent Goose"=>"Branta bernicla",
++"Eurasian Oystercatcher"=>"Haematopus ostralegus",
++"Eurasian Siskin"=>"Carduelis spinus",
++"Northern Shoveler"=>"Anas clypeata",
++"Eurasian Wigeon"=>"Anas penelope",
++"Eurasian Sparrow Hawk"=>"Accipiter nisus",
++"Icterine Warbler"=>"Hippolais icterina",
++"Common Starling"=>"Sturnus vulgaris",
++"Long-tailed Tit"=>"Aegithalos caudatus",
++"Ruddy Turnstone"=>"Arenaria interpres",
++"Mew Gull"=>"Larus canus",
++"Common Pochard"=>"Aythya ferina",
++"Common Chiffchaff"=>"Phylloscopus collybita",
++"Greater Scaup"=>"Aythya marila",
++"Common Kestrel"=>"Falco tinnunculus",
++"Garden Warbler"=>"Sylvia borin",
++"Eurasian Collared Dove"=>"Streptopelia decaocto",
++"Eurasian Skylark"=>"Alauda arvensis",
++"Common Chaffinch"=>"Fringilla coelebs",
++"Common Moorhen"=>"Gallinula chloropus",
++"Water Pipit"=>"Anthus spinoletta",
++"Mallard"=>"Anas platyrhynchos",
++"Winter Wren"=>"Troglodytes troglodytes",
++"Common Teal"=>"Anas crecca",
++"Green Sandpiper"=>"Tringa ochropus",
++"White Wagtail"=>"Motacilla alba",
++"Eurasian Curlew"=>"Numenius arquata",
++"Song Thrush"=>"Turdus philomelos",
++"European Herring Gull"=>"Larus argentatus",
++"Grey Plover"=>"Pluvialis squatarola",
++"Carrion Crow"=>"Corvus corone",
++"Coal Tit"=>"Periparus ater",
++"Spotted Redshank"=>"Tringa erythropus",
++"Blackcap"=>"Sylvia atricapilla",
++"Egyptian Vulture"=>"Neophron percnopterus",
++"Razorbill"=>"Alca torda",
++"Alpine Swift"=>"Apus melba",
++"Long-legged Buzzard"=>"Buteo rufinus",
++"Audouin`s Gull"=>"Larus audouinii",
++"Balearic Shearwater"=>"Puffinus mauretanicus",
++"Upland Sandpiper"=>"Bartramia longicauda",
++"Greater Spotted Eagle"=>"Aquila clanga",
++"Ring Ouzel"=>"Turdus torquatus",
++"Yellow-browed Warbler"=>"Phylloscopus inornatus",
++"Blue Rock Thrush"=>"Monticola solitarius",
++"Buff-breasted Sandpiper"=>"Tryngites subruficollis",
++"Jack Snipe"=>"Lymnocryptes minimus",
++"White-rumped Sandpiper"=>"Calidris fuscicollis",
++"Ruddy Shelduck"=>"Tadorna ferruginea",
++"Cetti's Warbler"=>"Cettia cetti",
++"Citrine Wagtail"=>"Motacilla citreola",
++"Roseate Tern"=>"Sterna dougallii",
++"Black-legged Kittiwake"=>"Rissa tridactyla",
++"Pygmy Cormorant"=>"Phalacrocorax pygmeus",
++"Booted Eagle"=>"Aquila pennata",
++"Lesser White-fronted Goose"=>"Anser erythropus",
++"Little Bunting"=>"Emberiza pusilla",
++"Eleonora's Falcon"=>"Falco eleonorae",
++"European Serin"=>"Serinus serinus",
++"Twite"=>"Carduelis flavirostris",
++"Yellow-legged Gull"=>"Larus michahellis",
++"Gyr Falcon"=>"Falco rusticolus",
++"Greenish Warbler"=>"Phylloscopus trochiloides",
++"Red-necked Phalarope"=>"Phalaropus lobatus",
++"Mealy Redpoll"=>"Carduelis flammea",
++"Glaucous Gull"=>"Larus hyperboreus",
++"Great Skua"=>"Stercorarius skua",
++"Great Bustard"=>"Otis tarda",
++"Velvet Scoter"=>"Melanitta fusca",
++"Pine Grosbeak"=>"Pinicola enucleator",
++"House Crow"=>"Corvus splendens",
++"Hume`s Leaf Warbler"=>"Phylloscopus humei",
++"Great Northern Loon"=>"Gavia immer",
++"Long-tailed Duck"=>"Clangula hyemalis",
++"Lapland Longspur"=>"Calcarius lapponicus",
++"Northern Gannet"=>"Morus bassanus",
++"Eastern Imperial Eagle"=>"Aquila heliaca",
++"Little Auk"=>"Alle alle",
++"Lesser Spotted Woodpecker"=>"Dendrocopos minor",
++"Iceland Gull"=>"Larus glaucoides",
++"Parasitic Jaeger"=>"Stercorarius parasiticus",
++"Bewick`s Swan"=>"Cygnus bewickii",
++"Little Bustard"=>"Tetrax tetrax",
++"Little Crake"=>"Porzana parva",
++"Baillon`s Crake"=>"Porzana pusilla",
++"Long-tailed Jaeger"=>"Stercorarius longicaudus",
++"King Eider"=>"Somateria spectabilis",
++"Greater Short-toed Lark"=>"Calandrella brachydactyla",
++"Houbara Bustard"=>"Chlamydotis undulata",
++"Curlew Sandpiper"=>"Calidris ferruginea",
++"Common Crossbill"=>"Loxia curvirostra",
++"European Shag"=>"Phalacrocorax aristotelis",
++"Horned Grebe"=>"Podiceps auritus",
++"Common Quail"=>"Coturnix coturnix",
++"Bearded Vulture"=>"Gypaetus barbatus",
++"Lanner Falcon"=>"Falco biarmicus",
++"Middle Spotted Woodpecker"=>"Dendrocopos medius",
++"Pomarine Jaeger"=>"Stercorarius pomarinus",
++"Red-breasted Merganser"=>"Mergus serrator",
++"Eurasian Black Vulture"=>"Aegypius monachus",
++"Eurasian Dotterel"=>"Charadrius morinellus",
++"Common Nightingale"=>"Luscinia megarhynchos",
++"Northern willow warbler"=>"Phylloscopus trochilus acredula",
++"Manx Shearwater"=>"Puffinus puffinus",
++"Northern Fulmar"=>"Fulmarus glacialis",
++"Eurasian Eagle Owl"=>"Bubo bubo",
++"Orphean Warbler"=>"Sylvia hortensis",
++"Melodious Warbler"=>"Hippolais polyglotta",
++"Pallas's Leaf Warbler"=>"Phylloscopus proregulus",
++"Atlantic Puffin"=>"Fratercula arctica",
++"Black-throated Loon"=>"Gavia arctica",
++"Bohemian Waxwing"=>"Bombycilla garrulus",
++"Marsh Sandpiper"=>"Tringa stagnatilis",
++"Great Snipe"=>"Gallinago media",
++"Squacco Heron"=>"Ardeola ralloides",
++"Long-eared Owl"=>"Asio otus",
++"Caspian Tern"=>"Hydroprogne caspia",
++"Red-breasted Goose"=>"Branta ruficollis",
++"Red-throated Loon"=>"Gavia stellata",
++"Common Rosefinch"=>"Carpodacus erythrinus",
++"Red-footed Falcon"=>"Falco vespertinus",
++"Ross's Goose"=>"Anser rossii",
++"Red Phalarope"=>"Phalaropus fulicarius",
++"Pied Wagtail"=>"Motacilla yarrellii",
++"Rose-coloured Starling"=>"Sturnus roseus",
++"Rough-legged Buzzard"=>"Buteo lagopus",
++"Saker Falcon"=>"Falco cherrug",
++"European Roller"=>"Coracias garrulus",
++"Short-toed Eagle"=>"Circaetus gallicus",
++"Peregrine Falcon"=>"Falco peregrinus",
++"Merlin"=>"Falco columbarius",
++"Snow Goose"=>"Anser caerulescens",
++"Snowy Owl"=>"Bubo scandiacus",
++"Snow Bunting"=>"Plectrophenax nivalis",
++"Common Grasshopper Warbler"=>"Locustella naevia",
++"Golden Eagle"=>"Aquila chrysaetos",
++"Black-winged Stilt"=>"Himantopus himantopus",
++"Steppe Eagle"=>"Aquila nipalensis",
++"Pallid Harrier"=>"Circus macrourus",
++"European Storm-petrel"=>"Hydrobates pelagicus",
++"Horned Lark"=>"Eremophila alpestris",
++"Eurasian Treecreeper"=>"Certhia familiaris",
++"Taiga Bean Goose"=>"Anser fabalis",
++"Temminck`s Stint"=>"Calidris temminckii",
++"Terek Sandpiper"=>"Xenus cinereus",
++"Tundra Bean Goose"=>"Anser serrirostris",
++"European Turtle Dove"=>"Streptopelia turtur",
++"Leach`s Storm-petrel"=>"Oceanodroma leucorhoa",
++"Eurasian Griffon Vulture"=>"Gyps fulvus",
++"Paddyfield Warbler"=>"Acrocephalus agricola",
++"Osprey"=>"Pandion haliaetus",
++"Firecrest"=>"Regulus ignicapilla",
++"Water Rail"=>"Rallus aquaticus",
++"European Honey Buzzard"=>"Pernis apivorus",
++"Eurasian Golden Oriole"=>"Oriolus oriolus",
++"Whooper Swan"=>"Cygnus cygnus",
++"Two-barred Crossbill"=>"Loxia leucoptera",
++"White-tailed Eagle"=>"Haliaeetus albicilla",
++"Atlantic Murre"=>"Uria aalge",
++"Garganey"=>"Anas querquedula",
++"Black Redstart"=>"Phoenicurus ochruros",
++"Common Scoter"=>"Melanitta nigra",
++"Rock Pipit"=>"Anthus petrosus",
++"Lesser Spotted Eagle"=>"Aquila pomarina",
++"Cattle Egret"=>"Bubulcus ibis",
++"White-winged Black Tern"=>"Chlidonias leucopterus",
++"Black Stork"=>"Ciconia nigra",
++"Mediterranean Gull"=>"Larus melanocephalus",
++"Black Kite"=>"Milvus migrans",
++"Yellow Wagtail"=>"Motacilla flavissima",
++"Red-necked Grebe"=>"Podiceps grisegena",
++"Gull-billed Tern"=>"Gelochelidon nilotica",
++"Pectoral Sandpiper"=>"Calidris melanotos",
++"Barred Warbler"=>"Sylvia nisoria",
++"Red-throated Pipit"=>"Anthus cervinus",
++"Grey Wagtail"=>"Motacilla cinerea",
++"Richard`s Pipit"=>"Anthus richardi",
++"Black Woodpecker"=>"Dryocopus martius",
++"Little Ringed Plover"=>"Charadrius dubius",
++"Whiskered Tern"=>"Chlidonias hybrida",
++"Lesser Redpoll"=>"Carduelis cabaret",
++"Pallas' Bunting"=>"Emberiza pallasi",
++"Ferruginous Duck"=>"Aythya nyroca",
++"Whistling Swan"=>"Cygnus columbianus",
++"Black Brant"=>"Branta nigricans",
++"Marbled Teal"=>"Marmaronetta angustirostris",
++"Canvasback"=>"Aythya valisineria",
++"Redhead"=>"Aythya americana",
++"Lesser Scaup"=>"Aythya affinis",
++"Steller`s Eider"=>"Polysticta stelleri",
++"Spectacled Eider"=>"Somateria fischeri",
++"Harlequin Duck"=>"Histronicus histrionicus",
++"Black Scoter"=>"Melanitta americana",
++"Surf Scoter"=>"Melanitta perspicillata",
++"Barrow`s Goldeneye"=>"Bucephala islandica",
++"Falcated Duck"=>"Anas falcata",
++"American Wigeon"=>"Anas americana",
++"Blue-winged Teal"=>"Anas discors",
++"American Black Duck"=>"Anas rubripes",
++"Baikal Teal"=>"Anas formosa",
++"Green-Winged Teal"=>"Anas carolinensis",
++"Hazel Grouse"=>"Bonasa bonasia",
++"Rock Partridge"=>"Alectoris graeca",
++"Red-legged Partridge"=>"Alectoris rufa",
++"Yellow-billed Loon"=>"Gavia adamsii",
++"Cory`s Shearwater"=>"Calonectris borealis",
++"Madeiran Storm-Petrel"=>"Oceanodroma castro",
++"Great White Pelican"=>"Pelecanus onocrotalus",
++"Dalmatian Pelican"=>"Pelecanus crispus",
++"American Bittern"=>"Botaurus lentiginosus",
++"Glossy Ibis"=>"Plegadis falcinellus",
++"Spanish Imperial Eagle"=>"Aquila adalberti",
++"Lesser Kestrel"=>"Falco naumanni",
++"Houbara Bustard"=>"Chlamydotis undulata",
++"Crab-Plover"=>"Dromas ardeola",
++"Cream-coloured Courser"=>"Cursorius cursor",
++"Collared Pratincole"=>"Glareola pratincola",
++"Black-winged Pratincole"=>"Glareola nordmanni",
++"Killdeer"=>"Charadrius vociferus",
++"Lesser Sand Plover"=>"Charadrius mongolus",
++"Greater Sand Plover"=>"Charadrius leschenaultii",
++"Caspian Plover"=>"Charadrius asiaticus",
++"American Golden Plover"=>"Pluvialis dominica",
++"Pacific Golden Plover"=>"Pluvialis fulva",
++"Sharp-tailed Sandpiper"=>"Calidris acuminata",
++"Broad-billed Sandpiper"=>"Limicola falcinellus",
++"Spoon-Billed Sandpiper"=>"Eurynorhynchus pygmaeus",
++"Short-Billed Dowitcher"=>"Limnodromus griseus",
++"Long-billed Dowitcher"=>"Limnodromus scolopaceus",
++"Hudsonian Godwit"=>"Limosa haemastica",
++"Little Curlew"=>"Numenius minutus",
++"Lesser Yellowlegs"=>"Tringa flavipes",
++"Wilson`s Phalarope"=>"Phalaropus tricolor",
++"Pallas`s Gull"=>"Larus ichthyaetus",
++"Laughing Gull"=>"Larus atricilla",
++"Franklin`s Gull"=>"Larus pipixcan",
++"Bonaparte`s Gull"=>"Larus philadelphia",
++"Ring-billed Gull"=>"Larus delawarensis",
++"American Herring Gull"=>"Larus smithsonianus",
++"Caspian Gull"=>"Larus cachinnans",
++"Ivory Gull"=>"Pagophila eburnea",
++"Royal Tern"=>"Sterna maxima",
++"Brünnich`s Murre"=>"Uria lomvia",
++"Crested Auklet"=>"Aethia cristatella",
++"Parakeet Auklet"=>"Cyclorrhynchus psittacula",
++"Tufted Puffin"=>"Lunda cirrhata",
++"Laughing Dove"=>"Streptopelia senegalensis",
++"Great Spotted Cuckoo"=>"Clamator glandarius",
++"Great Grey Owl"=>"Strix nebulosa",
++"Tengmalm`s Owl"=>"Aegolius funereus",
++"Red-Necked Nightjar"=>"Caprimulgus ruficollis",
++"Chimney Swift"=>"Chaetura pelagica",
++"Green Bea-Eater"=>"Merops orientalis",
++"Grey-headed Woodpecker"=>"Picus canus",
++"Lesser Short-Toed Lark"=>"Calandrella rufescens",
++"Eurasian Crag Martin"=>"Hirundo rupestris",
++"Red-rumped Swallow"=>"Cecropis daurica",
++"Blyth`s Pipit"=>"Anthus godlewskii",
++"Pechora Pipit"=>"Anthus gustavi",
++"Grey-headed Wagtail"=>"Motacilla thunbergi",
++"Yellow-Headed Wagtail"=>"Motacilla lutea",
++"White-throated Dipper"=>"Cinclus cinclus",
++"Rufous-Tailed Scrub Robin"=>"Cercotrichas galactotes",
++"Thrush Nightingale"=>"Luscinia luscinia",
++"White-throated Robin"=>"Irania gutturalis",
++"Caspian Stonechat"=>"Saxicola maura variegata",
++"Western Black-eared Wheatear"=>"Oenanthe hispanica",
++"Rufous-tailed Rock Thrush"=>"Monticola saxatilis",
++"Red-throated Thrush/Black-throated"=>"Turdus ruficollis",
++"American Robin"=>"Turdus migratorius",
++"Zitting Cisticola"=>"Cisticola juncidis",
++"Lanceolated Warbler"=>"Locustella lanceolata",
++"River Warbler"=>"Locustella fluviatilis",
++"Blyth`s Reed Warbler"=>"Acrocephalus dumetorum",
++"Caspian Reed Warbler"=>"Acrocephalus fuscus",
++"Aquatic Warbler"=>"Acrocephalus paludicola",
++"Booted Warbler"=>"Acrocephalus caligatus",
++"Marmora's Warbler"=>"Sylvia sarda",
++"Dartford Warbler"=>"Sylvia undata",
++"Subalpine Warbler"=>"Sylvia cantillans",
++"Ménétries's Warbler"=>"Sylvia mystacea",
++"Rüppel's Warbler"=>"Sylvia rueppelli",
++"Asian Desert Warbler"=>"Sylvia nana",
++"Western Orphean Warbler"=>"Sylvia hortensis hortensis",
++"Arctic Warbler"=>"Phylloscopus borealis",
++"Radde`s Warbler"=>"Phylloscopus schwarzi",
++"Western Bonelli`s Warbler"=>"Phylloscopus bonelli",
++"Red-breasted Flycatcher"=>"Ficedula parva",
++"Eurasian Penduline Tit"=>"Remiz pendulinus",
++"Daurian Shrike"=>"Lanius isabellinus",
++"Long-Tailed Shrike"=>"Lanius schach",
++"Lesser Grey Shrike"=>"Lanius minor",
++"Southern Grey Shrike"=>"Lanius meridionalis",
++"Masked Shrike"=>"Lanius nubicus",
++"Spotted Nutcracker"=>"Nucifraga caryocatactes",
++"Daurian Jackdaw"=>"Corvus dauuricus",
++"Purple-Backed Starling"=>"Sturnus sturninus",
++"Red-Fronted Serin"=>"Serinus pusillus",
++"Arctic Redpoll"=>"Carduelis hornemanni",
++"Scottish Crossbill"=>"Loxia scotica",
++"Parrot Crossbill"=>"Loxia pytyopsittacus",
++"Black-faced Bunting"=>"Emberiza spodocephala",
++"Pink-footed Goose"=>"Anser brachyrhynchus",
++"Black-winged Kite"=>"Elanus caeruleus",
++"European Bee-eater"=>"Merops apiaster",
++"Sabine`s Gull"=>"Larus sabini",
++"Sooty Shearwater"=>"Puffinus griseus",
++"Lesser Canada Goose"=>"Branta hutchinsii",
++"Ring-necked Duck"=>"Aythya collaris",
++"Greater Flamingo"=>"Phoenicopterus roseus",
++"Iberian Chiffchaff"=>"Phylloscopus ibericus",
++"Ashy-headed Wagtail"=>"Motacilla cinereocapilla",
++"Stilt Sandpiper"=>"Calidris himantopus",
++"Siberian Stonechat"=>"Saxicola maurus",
++"Greater Yellowlegs"=>"Tringa melanoleuca",
++"Forster`s Tern"=>"Sterna forsteri",
++"Dusky Warbler"=>"Phylloscopus fuscatus",
++"Cirl Bunting"=>"Emberiza cirlus",
++"Olive-backed Pipit"=>"Anthus hodgsoni",
++"Sociable Lapwing"=>"Vanellus gregarius",
++"Spotted Sandpiper"=>"Actitis macularius",
++"Baird`s Sandpiper"=>"Calidris bairdii",
++"Rustic Bunting"=>"Emberiza rustica",
++"Yellow-browed Bunting"=>"Emberiza chrysophrys",
++"Great Shearwater"=>"Puffinus gravis",
++"Bonelli`s Eagle"=>"Aquila fasciata",
++"Calandra Lark"=>"Melanocorypha calandra",
++"Sardinian Warbler"=>"Sylvia melanocephala",
++"Ross's Gull"=>"Larus roseus",
++"Yellow-Breasted Bunting"=>"Emberiza aureola",
++"Pine Bunting"=>"Emberiza leucocephalos",
++"Black Guillemot"=>"Cepphus grylle",
++"Pied-billed Grebe"=>"Podilymbus podiceps",
++"Soft-plumaged Petrel"=>"Pterodroma mollis",
++"Bulwer's Petrel"=>"Bulweria bulwerii",
++"White-Faced Storm-Petrel"=>"Pelagodroma marina",
++"Pallas’s Fish Eagle"=>"Haliaeetus leucoryphus",
++"Sandhill Crane"=>"Grus canadensis",
++"Macqueen’s Bustard"=>"Chlamydotis macqueenii",
++"White-tailed Lapwing"=>"Vanellus leucurus",
++"Great Knot"=>"Calidris tenuirostris",
++"Semipalmated Sandpiper"=>"Calidris pusilla",
++"Red-necked Stint"=>"Calidris ruficollis",
++"Slender-billed Curlew"=>"Numenius tenuirostris",
++"Bridled Tern"=>"Onychoprion anaethetus",
++"Pallas’s Sandgrouse"=>"Syrrhaptes paradoxus",
++"European Scops Owl"=>"Otus scops",
++"Northern Hawk Owl"=>"Surnia ulula",
++"White-Throated Needletail"=>"Hirundapus caudacutus",
++"Belted Kingfisher"=>"Ceryle alcyon",
++"Blue-cheeked Bee-eater"=>"Merops persicus",
++"Black-headed Wagtail"=>"Motacilla feldegg",
++"Northern Mockingbird"=>"Mimus polyglottos",
++"Alpine Accentor"=>"Prunella collaris",
++"Red-flanked Bluetail"=>"Tarsiger cyanurus",
++"Isabelline Wheatear"=>"Oenanthe isabellina",
++"Pied Wheatear"=>"Oenanthe pleschanka",
++"Eastern Black-eared Wheatear"=>"Oenanthe melanoleuca",
++"Desert Wheatear"=>"Oenanthe deserti",
++"White`s Thrush"=>"Zoothera aurea",
++"Siberian Thrush"=>"Zoothera sibirica",
++"Eyebrowed Thrush"=>"Turdus obscurus",
++"Dusky Thrush"=>"Turdus eunomus",
++"Black-throated Thrush"=>"Turdus atrogularis",
++"Pallas`s Grasshopper Warbler"=>"Locustella certhiola",
++"Spectacled Warbler"=>"Sylvia conspicillata",
++"Two-barred Warbler"=>"Phylloscopus plumbeitarsus",
++"Eastern Bonelli’s Warbler"=>"Phylloscopus orientalis",
++"Collared Flycatcher"=>"Ficedula albicollis",
++"Wallcreeper"=>"Tichodroma muraria",
++"Turkestan Shrike"=>"Lanius phoenicuroides",
++"Steppe Grey Shrike"=>"Lanius pallidirostris",
++"Spanish Sparrow"=>"Passer hispaniolensis",
++"Red-eyed Vireo"=>"Vireo olivaceus",
++"Myrtle Warbler"=>"Dendroica coronata",
++"White-crowned Sparrow"=>"Zonotrichia leucophrys",
++"White-throated Sparrow"=>"Zonotrichia albicollis",
++"Cretzschmar`s Bunting"=>"Emberiza caesia",
++"Chestnut Bunting"=>"Emberiza rutila",
++"Red-headed Bunting"=>"Emberiza bruniceps",
++"Black-headed Bunting"=>"Emberiza melanocephala",
++"Indigo Bunting"=>"Passerina cyanea",
++"Balearic Woodchat Shrike"=>"Lanius senator badius",
++"Demoiselle Crane"=>"Grus virgo",
++"Chough"=>"Pyrrhocorax pyrrhocorax",
++"Red-Billed Chough"=>"Pyrrhocorax graculus",
++"Elegant Tern"=>"Sterna elegans",
++"Chukar"=>"Alectoris chukar",
++"Yellow-Billed Cuckoo"=>"Coccyzus americanus",
++"American Sandwich Tern"=>"Sterna sandvicensis acuflavida",
++"Olive-Tree Warbler"=>"Hippolais olivetorum",
++"Eastern Olivaceous Warbler"=>"Acrocephalus pallidus",
++"Indian Cormorant"=>"Phalacrocorax fuscicollis",
++"Spur-Winged Lapwing"=>"Vanellus spinosus",
++"Yelkouan Shearwater"=>"Puffinus yelkouan",
++"Trumpeter Finch"=>"Bucanetes githagineus",
++"Red Grouse"=>"Lagopus scoticus",
++"Rock Ptarmigan"=>"Lagopus mutus",
++"Long-Tailed Cormorant"=>"Phalacrocorax africanus",
++"Double-crested Cormorant"=>"Phalacrocorax auritus",
++"Magnificent Frigatebird"=>"Fregata magnificens",
++"Naumann's Thrush"=>"Turdus naumanni",
++"Oriental Pratincole"=>"Glareola maldivarum",
++"Bufflehead"=>"Bucephala albeola",
++"Snowfinch"=>"Montifrigilla nivalis",
++"Ural owl"=>"Strix uralensis",
++"Spanish Wagtail"=>"Motacilla iberiae",
++"Song Sparrow"=>"Melospiza melodia",
++"Rock Bunting"=>"Emberiza cia",
++"Siberian Rubythroat"=>"Luscinia calliope",
++"Pallid Swift"=>"Apus pallidus",
++"Eurasian Pygmy Owl"=>"Glaucidium passerinum",
++"Madeira Little Shearwater"=>"Puffinus baroli",
++"House Finch"=>"Carpodacus mexicanus",
++"Green Heron"=>"Butorides virescens",
++"Solitary Sandpiper"=>"Tringa solitaria",
++"Heuglin's Gull"=>"Larus heuglini"
++);
++
++
++$result = array();
++foreach ($items as $key=>$value) {
++	if (strpos(strtolower($key), $q) !== false) {
++		array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key)));
++	}
++	if (count($result) > 11)
++		break;
++}
++
++// json_encode is available in PHP 5.2 and above, or you can install a PECL module in earlier versions
++echo json_encode($result);
++
++?>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple.html	(revision 15487)
+@@ -0,0 +1,93 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Multiple values</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		var availableTags = [
++			"ActionScript",
++			"AppleScript",
++			"Asp",
++			"BASIC",
++			"C",
++			"C++",
++			"Clojure",
++			"COBOL",
++			"ColdFusion",
++			"Erlang",
++			"Fortran",
++			"Groovy",
++			"Haskell",
++			"Java",
++			"JavaScript",
++			"Lisp",
++			"Perl",
++			"PHP",
++			"Python",
++			"Ruby",
++			"Scala",
++			"Scheme"
++		];
++		function split( val ) {
++			return val.split( /,\s*/ );
++		}
++		function extractLast( term ) {
++			return split( term ).pop();
++		}
++
++		$( "#tags" )
++			// don't navigate away from the field on tab when selecting an item
++			.bind( "keydown", function( event ) {
++				if ( event.keyCode === $.ui.keyCode.TAB &&
++						$( this ).data( "ui-autocomplete" ).menu.active ) {
++					event.preventDefault();
++				}
++			})
++			.autocomplete({
++				minLength: 0,
++				source: function( request, response ) {
++					// delegate back to autocomplete, but extract the last term
++					response( $.ui.autocomplete.filter(
++						availableTags, extractLast( request.term ) ) );
++				},
++				focus: function() {
++					// prevent value inserted on focus
++					return false;
++				},
++				select: function( event, ui ) {
++					var terms = split( this.value );
++					// remove the current input
++					terms.pop();
++					// add the selected item
++					terms.push( ui.item.value );
++					// add placeholder to get the comma-and-space at the end
++					terms.push( "" );
++					this.value = terms.join( ", " );
++					return false;
++				}
++			});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label for="tags">Tag programming languages: </label>
++	<input id="tags" size="50">
++</div>
++
++<div class="demo-description">
++<p>Usage: Type something, eg. "j" to see suggestions for tagging with programming languages. Select a value, then continue typing to add more.</p>
++<p>This is an example showing how to use the source-option along with some events to enable autocompleting multiple values into a single field.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote.html	(revision 15487)
+@@ -0,0 +1,55 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Remote datasource</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-autocomplete-loading {
++		background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
++	}
++	</style>
++	<script>
++	$(function() {
++		function log( message ) {
++			$( "<div>" ).text( message ).prependTo( "#log" );
++			$( "#log" ).scrollTop( 0 );
++		}
++
++		$( "#birds" ).autocomplete({
++			source: "search.php",
++			minLength: 2,
++			select: function( event, ui ) {
++				log( ui.item ?
++					"Selected: " + ui.item.value + " aka " + ui.item.id :
++					"Nothing selected, input was " + this.value );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label for="birds">Birds: </label>
++	<input id="birds">
++</div>
++
++<div class="ui-widget" style="margin-top:2em; font-family:Arial">
++	Result:
++	<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
++</div>
++
++<div class="demo-description">
++<p>The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are bird names, displayed when at least two characters are entered into the field.</p>
++<p>The datasource is a server-side script which returns JSON data, specified via a simple URL for the source-option. In addition, the minLength-option is set to 2 to avoid queries that would return too many results and the select-event is used to display some feedback.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/xml.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/xml.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/xml.html	(revision 15487)
+@@ -0,0 +1,66 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - XML data parsed once</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
++	</style>
++	<script>
++	$(function() {
++		function log( message ) {
++			$( "<div/>" ).text( message ).prependTo( "#log" );
++			$( "#log" ).attr( "scrollTop", 0 );
++		}
++
++		$.ajax({
++			url: "london.xml",
++			dataType: "xml",
++			success: function( xmlResponse ) {
++				var data = $( "geoname", xmlResponse ).map(function() {
++					return {
++						value: $( "name", this ).text() + ", " +
++							( $.trim( $( "countryName", this ).text() ) || "(unknown country)" ),
++						id: $( "geonameId", this ).text()
++					};
++				}).get();
++				$( "#birds" ).autocomplete({
++					source: data,
++					minLength: 0,
++					select: function( event, ui ) {
++						log( ui.item ?
++							"Selected: " + ui.item.value + ", geonameId: " + ui.item.id :
++							"Nothing selected, input was " + this.value );
++					}
++				});
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label for="birds">London matches: </label>
++	<input id="birds" />
++</div>
++
++<div class="ui-widget" style="margin-top:2em; font-family:Arial">
++	Result:
++	<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
++</div>
++
++<div class="demo-description">
++<p>This demo shows how to retrieve some XML data, parse it using jQuery's methods, then provide it to the autocomplete as the datasource.</p>
++<p>This should also serve as a reference on how to parse a remote XML datasource - the parsing would just happen for each request within the source-callback.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jqueryui_32x32.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jqueryui_32x32.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jqueryui_32x32.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jqueryui_32x32.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jqueryui_32x32.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/sizzlejs_32x32.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/sizzlejs_32x32.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/sizzlejs_32x32.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/sizzlejs_32x32.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/sizzlejs_32x32.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jquery_32x32.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jquery_32x32.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jquery_32x32.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jquery_32x32.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jquery_32x32.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/ui-anim_basic_16x16.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/ui-anim_basic_16x16.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/ui-anim_basic_16x16.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/ui-anim_basic_16x16.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/ui-anim_basic_16x16.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/transparent_1x1.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/transparent_1x1.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/transparent_1x1.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/transparent_1x1.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/transparent_1x1.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-with-cache.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-with-cache.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-with-cache.html	(revision 15487)
+@@ -0,0 +1,52 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Remote with caching</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.ui-autocomplete-loading {
++		background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
++	}
++	</style>
++	<script>
++	$(function() {
++		var cache = {};
++		$( "#birds" ).autocomplete({
++			minLength: 2,
++			source: function( request, response ) {
++				var term = request.term;
++				if ( term in cache ) {
++					response( cache[ term ] );
++					return;
++				}
++
++				$.getJSON( "search.php", request, function( data, status, xhr ) {
++					cache[ term ] = data;
++					response( data );
++				});
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label for="birds">Birds: </label>
++	<input id="birds">
++</div>
++
++<div class="demo-description">
++<p>The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are bird names, displayed when at least two characters are entered into the field.</p>
++<p>Similar to the remote datasource demo, though this adds some local caching to improve performance. The cache here saves just one query, and could be extended to cache multiple values, one for each term.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/index.html	(revision 15487)
+@@ -0,0 +1,25 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="remote.html">Remote datasource</a></li>
++	<li><a href="remote-with-cache.html">Remote with caching</a></li>
++	<li><a href="remote-jsonp.html">Remote JSONP datasource</a></li>
++	<li><a href="maxheight.html">Scrollable results</a></li>
++	<li><a href="combobox.html">Combobox</a></li>
++	<li><a href="custom-data.html">Custom data and display</a></li>
++	<li><a href="xml.html">XML data parsed once</a></li>
++	<li><a href="categories.html">Categories</a></li>
++	<li><a href="folding.html">Accent folding</a></li>
++	<li><a href="multiple.html">Multiple values</a></li>
++	<li><a href="multiple-remote.html">Multiple, remote</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/combobox.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/combobox.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/combobox.html	(revision 15487)
+@@ -0,0 +1,213 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Autocomplete - Combobox</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<script src="../../ui/jquery.ui.autocomplete.js"></script>
++	<script src="../../ui/jquery.ui.tooltip.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.custom-combobox {
++		position: relative;
++		display: inline-block;
++	}
++	.custom-combobox-toggle {
++		position: absolute;
++		top: 0;
++		bottom: 0;
++		margin-left: -1px;
++		padding: 0;
++		/* support: IE7 */
++		*height: 1.7em;
++		*top: 0.1em;
++	}
++	.custom-combobox-input {
++		margin: 0;
++		padding: 0.3em;
++	}
++	</style>
++	<script>
++	(function( $ ) {
++		$.widget( "custom.combobox", {
++			_create: function() {
++				this.wrapper = $( "<span>" )
++					.addClass( "custom-combobox" )
++					.insertAfter( this.element );
++
++				this.element.hide();
++				this._createAutocomplete();
++				this._createShowAllButton();
++			},
++
++			_createAutocomplete: function() {
++				var selected = this.element.children( ":selected" ),
++					value = selected.val() ? selected.text() : "";
++
++				this.input = $( "<input>" )
++					.appendTo( this.wrapper )
++					.val( value )
++					.attr( "title", "" )
++					.addClass( "custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left" )
++					.autocomplete({
++						delay: 0,
++						minLength: 0,
++						source: $.proxy( this, "_source" )
++					})
++					.tooltip({
++						tooltipClass: "ui-state-highlight"
++					});
++
++				this._on( this.input, {
++					autocompleteselect: function( event, ui ) {
++						ui.item.option.selected = true;
++						this._trigger( "select", event, {
++							item: ui.item.option
++						});
++					},
++
++					autocompletechange: "_removeIfInvalid"
++				});
++			},
++
++			_createShowAllButton: function() {
++				var input = this.input,
++					wasOpen = false;
++
++				$( "<a>" )
++					.attr( "tabIndex", -1 )
++					.attr( "title", "Show All Items" )
++					.tooltip()
++					.appendTo( this.wrapper )
++					.button({
++						icons: {
++							primary: "ui-icon-triangle-1-s"
++						},
++						text: false
++					})
++					.removeClass( "ui-corner-all" )
++					.addClass( "custom-combobox-toggle ui-corner-right" )
++					.mousedown(function() {
++						wasOpen = input.autocomplete( "widget" ).is( ":visible" );
++					})
++					.click(function() {
++						input.focus();
++
++						// Close if already visible
++						if ( wasOpen ) {
++							return;
++						}
++
++						// Pass empty string as value to search for, displaying all results
++						input.autocomplete( "search", "" );
++					});
++			},
++
++			_source: function( request, response ) {
++				var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
++				response( this.element.children( "option" ).map(function() {
++					var text = $( this ).text();
++					if ( this.value && ( !request.term || matcher.test(text) ) )
++						return {
++							label: text,
++							value: text,
++							option: this
++						};
++				}) );
++			},
++
++			_removeIfInvalid: function( event, ui ) {
++
++				// Selected an item, nothing to do
++				if ( ui.item ) {
++					return;
++				}
++
++				// Search for a match (case-insensitive)
++				var value = this.input.val(),
++					valueLowerCase = value.toLowerCase(),
++					valid = false;
++				this.element.children( "option" ).each(function() {
++					if ( $( this ).text().toLowerCase() === valueLowerCase ) {
++						this.selected = valid = true;
++						return false;
++					}
++				});
++
++				// Found a match, nothing to do
++				if ( valid ) {
++					return;
++				}
++
++				// Remove invalid value
++				this.input
++					.val( "" )
++					.attr( "title", value + " didn't match any item" )
++					.tooltip( "open" );
++				this.element.val( "" );
++				this._delay(function() {
++					this.input.tooltip( "close" ).attr( "title", "" );
++				}, 2500 );
++				this.input.data( "ui-autocomplete" ).term = "";
++			},
++
++			_destroy: function() {
++				this.wrapper.remove();
++				this.element.show();
++			}
++		});
++	})( jQuery );
++
++	$(function() {
++		$( "#combobox" ).combobox();
++		$( "#toggle" ).click(function() {
++			$( "#combobox" ).toggle();
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget">
++	<label>Your preferred programming language: </label>
++	<select id="combobox">
++		<option value="">Select one...</option>
++		<option value="ActionScript">ActionScript</option>
++		<option value="AppleScript">AppleScript</option>
++		<option value="Asp">Asp</option>
++		<option value="BASIC">BASIC</option>
++		<option value="C">C</option>
++		<option value="C++">C++</option>
++		<option value="Clojure">Clojure</option>
++		<option value="COBOL">COBOL</option>
++		<option value="ColdFusion">ColdFusion</option>
++		<option value="Erlang">Erlang</option>
++		<option value="Fortran">Fortran</option>
++		<option value="Groovy">Groovy</option>
++		<option value="Haskell">Haskell</option>
++		<option value="Java">Java</option>
++		<option value="JavaScript">JavaScript</option>
++		<option value="Lisp">Lisp</option>
++		<option value="Perl">Perl</option>
++		<option value="PHP">PHP</option>
++		<option value="Python">Python</option>
++		<option value="Ruby">Ruby</option>
++		<option value="Scala">Scala</option>
++		<option value="Scheme">Scheme</option>
++	</select>
++</div>
++<button id="toggle">Show underlying select</button>
++
++<div class="demo-description">
++<p>A custom widget built by composition of Autocomplete and Button. You can either type something into the field to get filtered suggestions based on your input, or use the button to get the full list of selections.</p>
++<p>The input is read from an existing select-element for progressive enhancement, passed to Autocomplete with a customized source-option.</p>
++<p>This is not a supported or even complete widget. Its purely for demoing what autocomplete can do with a bit of customization. <a href="http://www.learningjquery.com/2010/06/a-jquery-ui-combobox-under-the-hood">For a detailed explanation of how the widget works, check out this Learning jQuery article.</a></p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/default.html	(revision 15487)
+@@ -0,0 +1,43 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Selectable - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.selectable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++
++	<style>
++	#feedback { font-size: 1.4em; }
++	#selectable .ui-selecting { background: #FECA40; }
++	#selectable .ui-selected { background: #F39814; color: white; }
++	#selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
++	#selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#selectable" ).selectable();
++	});
++	</script>
++</head>
++<body>
++
++<ol id="selectable">
++	<li class="ui-widget-content">Item 1</li>
++	<li class="ui-widget-content">Item 2</li>
++	<li class="ui-widget-content">Item 3</li>
++	<li class="ui-widget-content">Item 4</li>
++	<li class="ui-widget-content">Item 5</li>
++	<li class="ui-widget-content">Item 6</li>
++	<li class="ui-widget-content">Item 7</li>
++</ol>
++
++<div class="demo-description">
++<p>Enable a DOM element (or group of elements) to be selectable. Draw a box with your cursor to select items. Hold down the Ctrl key to make multiple non-adjacent selections. </p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/index.html	(revision 15487)
+@@ -0,0 +1,16 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Selectable Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="serialize.html">Serialize</a></li>
++	<li><a href="display-grid.html">Display as grid</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/serialize.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/serialize.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/serialize.html	(revision 15487)
+@@ -0,0 +1,54 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Selectable - Serialize</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.selectable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++
++	<style>
++	#feedback { font-size: 1.4em; }
++	#selectable .ui-selecting { background: #FECA40; }
++	#selectable .ui-selected { background: #F39814; color: white; }
++	#selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
++	#selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#selectable" ).selectable({
++			stop: function() {
++				var result = $( "#select-result" ).empty();
++				$( ".ui-selected", this ).each(function() {
++					var index = $( "#selectable li" ).index( this );
++					result.append( " #" + ( index + 1 ) );
++				});
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p id="feedback">
++<span>You've selected:</span> <span id="select-result">none</span>.
++</p>
++
++<ol id="selectable">
++	<li class="ui-widget-content">Item 1</li>
++	<li class="ui-widget-content">Item 2</li>
++	<li class="ui-widget-content">Item 3</li>
++	<li class="ui-widget-content">Item 4</li>
++	<li class="ui-widget-content">Item 5</li>
++	<li class="ui-widget-content">Item 6</li>
++</ol>
++
++<div class="demo-description">
++<p>Write a function that fires on the <code>stop</code> event to collect the index values of selected items.  Present values as feedback, or pass as a data string.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/display-grid.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/display-grid.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/display-grid.html	(revision 15487)
+@@ -0,0 +1,48 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Selectable - Display as grid</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.selectable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++
++	<style>
++	#feedback { font-size: 1.4em; }
++	#selectable .ui-selecting { background: #FECA40; }
++	#selectable .ui-selected { background: #F39814; color: white; }
++	#selectable { list-style-type: none; margin: 0; padding: 0; width: 450px; }
++	#selectable li { margin: 3px; padding: 1px; float: left; width: 100px; height: 80px; font-size: 4em; text-align: center; }
++	</style>
++	<script>
++	$(function() {
++		$( "#selectable" ).selectable();
++	});
++	</script>
++</head>
++<body>
++
++<ol id="selectable">
++	<li class="ui-state-default">1</li>
++	<li class="ui-state-default">2</li>
++	<li class="ui-state-default">3</li>
++	<li class="ui-state-default">4</li>
++	<li class="ui-state-default">5</li>
++	<li class="ui-state-default">6</li>
++	<li class="ui-state-default">7</li>
++	<li class="ui-state-default">8</li>
++	<li class="ui-state-default">9</li>
++	<li class="ui-state-default">10</li>
++	<li class="ui-state-default">11</li>
++	<li class="ui-state-default">12</li>
++</ol>
++
++<div class="demo-description">
++<p>To arrange selectable items as a grid, give them identical dimensions and float them using CSS.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/menu/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/menu/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/menu/default.html	(revision 15487)
+@@ -0,0 +1,67 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Menu - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#menu" ).menu();
++	});
++	</script>
++	<style>
++	.ui-menu { width: 150px; }
++	</style>
++</head>
++<body>
++
++<ul id="menu">
++	<li class="ui-state-disabled"><a href="#">Aberdeen</a></li>
++	<li><a href="#">Ada</a></li>
++	<li><a href="#">Adamsville</a></li>
++	<li><a href="#">Addyston</a></li>
++	<li>
++		<a href="#">Delphi</a>
++		<ul>
++			<li class="ui-state-disabled"><a href="#">Ada</a></li>
++			<li><a href="#">Saarland</a></li>
++			<li><a href="#">Salzburg</a></li>
++		</ul>
++	</li>
++	<li><a href="#">Saarland</a></li>
++	<li>
++		<a href="#">Salzburg</a>
++		<ul>
++			<li>
++				<a href="#">Delphi</a>
++				<ul>
++					<li><a href="#">Ada</a></li>
++					<li><a href="#">Saarland</a></li>
++					<li><a href="#">Salzburg</a></li>
++				</ul>
++			</li>
++			<li>
++				<a href="#">Delphi</a>
++				<ul>
++					<li><a href="#">Ada</a></li>
++					<li><a href="#">Saarland</a></li>
++					<li><a href="#">Salzburg</a></li>
++				</ul>
++			</li>
++			<li><a href="#">Perch</a></li>
++		</ul>
++	</li>
++	<li class="ui-state-disabled"><a href="#">Amesville</a></li>
++</ul>
++
++<div class="demo-description">
++<p>A menu with the default configuration, disabled items and nested menus. A list is transformed, adding theming, mouse and keyboard navigation support. Try to tab to the menu then use the cursor keys to navigate.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/menu/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/menu/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/menu/index.html	(revision 15487)
+@@ -0,0 +1,15 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Menu Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="icons.html">Icons</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/menu/icons.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/menu/icons.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/menu/icons.html	(revision 15487)
+@@ -0,0 +1,44 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Menu - Icons</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#menu" ).menu();
++	});
++	</script>
++	<style>
++	.ui-menu { width: 150px; }
++	</style>
++</head>
++<body>
++
++<ul id="menu">
++	<li><a href="#"><span class="ui-icon ui-icon-disk"></span>Save</a></li>
++	<li><a href="#"><span class="ui-icon ui-icon-zoomin"></span>Zoom In</a></li>
++	<li><a href="#"><span class="ui-icon ui-icon-zoomout"></span>Zoom Out</a></li>
++	<li class="ui-state-disabled"><a href="#"><span class="ui-icon ui-icon-print"></span>Print...</a></li>
++	<li>
++		<a href="#">Playback</a>
++		<ul>
++			<li><a href="#"><span class="ui-icon ui-icon-seek-start"></span>Prev</a></li>
++			<li><a href="#"><span class="ui-icon ui-icon-stop"></span>Stop</a></li>
++			<li><a href="#"><span class="ui-icon ui-icon-play"></span>Play</a></li>
++			<li><a href="#"><span class="ui-icon ui-icon-seek-end"></span>Next</a></li>
++		</ul>
++	</li>
++</ul>
++
++<div class="demo-description">
++<p>A menu with the default configuration, showing how to use a menu with icons.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/cycler.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/cycler.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/cycler.html	(revision 15487)
+@@ -0,0 +1,107 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Position - Image Cycler</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	body {
++		margin: 0;
++	}
++	#container {
++		overflow: hidden;
++		position: relative;
++		height: 400px;
++	}
++
++	img {
++		position: absolute;
++	}
++	</style>
++	<script>
++	$(function() {
++		// TODO refactor into a widget and get rid of these plugin methods
++		$.fn.left = function( using ) {
++			return this.position({
++				my: "right middle",
++				at: "left+25 middle",
++				of: "#container",
++				collision: "none",
++				using: using
++			});
++		};
++		$.fn.right = function( using ) {
++			return this.position({
++				my: "left middle",
++				at: "right-25 middle",
++				of: "#container",
++				collision: "none",
++				using: using
++			});
++		};
++		$.fn.center = function( using ) {
++			return this.position({
++				my: "center middle",
++				at: "center middle",
++				of: "#container",
++				using: using
++			});
++		};
++
++		$( "img:eq(0)" ).left();
++		$( "img:eq(1)" ).center();
++		$( "img:eq(2)" ).right();
++
++		function animate( to ) {
++			$( this ).stop( true, false ).animate( to );
++		}
++		function next( event ) {
++			event.preventDefault();
++			$( "img:eq(2)" ).center( animate );
++			$( "img:eq(1)" ).left( animate )
++			$( "img:eq(0)" ).right().appendTo( "#container" );
++		}
++		function previous( event ) {
++			event.preventDefault();
++			$( "img:eq(0)" ).center( animate );
++			$( "img:eq(1)" ).right( animate );
++			$( "img:eq(2)" ).left().prependTo( "#container" );
++		}
++		$( "#previous" ).click( previous );
++		$( "#next" ).click( next );
++
++		$( "img" ).click(function( event ) {
++			$( "img" ).index( this ) === 0 ? previous( event ) : next( event );
++		});
++
++		$( window ).resize(function() {
++			$( "img:eq(0)" ).left( animate );
++			$( "img:eq(1)" ).center( animate );
++			$( "img:eq(2)" ).right( animate );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="container">
++	<img src="images/earth.jpg" width="458" height="308" alt="earth">
++	<img src="images/flight.jpg" width="512" height="307" alt="flight">
++	<img src="images/rocket.jpg" width="300" height="353" alt="rocket">
++
++	<a id="previous" href="#">Previous</a>
++	<a id="next" href="#">Next</a>
++</div>
++
++<div class="demo-description">
++<p>A photoviewer prototype using Position to place images at the center, left and right and cycle them.
++<br>Use the links at the top to cycle, or click on the images on the left and right.
++<br>Note how the images are repositioned when resizing the window.
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/earth.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/earth.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/earth.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/earth.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/earth.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/rocket.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/rocket.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/rocket.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/rocket.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/rocket.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/flight.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/flight.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/flight.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/flight.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/flight.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/default.html	(revision 15487)
+@@ -0,0 +1,137 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Position - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#parent {
++		width: 60%;
++		height: 40px;
++		margin: 10px auto;
++		padding: 5px;
++		border: 1px solid #777;
++		background-color: #fbca93;
++		text-align: center;
++	}
++	.positionable {
++		position: absolute;
++		display: block;
++		right: 0;
++		bottom: 0;
++		background-color: #bcd5e6;
++		text-align: center;
++	}
++	#positionable1 {
++		width: 75px;
++		height: 75px;
++	}
++	#positionable2 {
++		width: 120px;
++		height: 40px;
++	}
++	select, input {
++		margin-left: 15px;
++	}
++	</style>
++	<script>
++	$(function() {
++		function position() {
++			$( ".positionable" ).position({
++				of: $( "#parent" ),
++				my: $( "#my_horizontal" ).val() + " " + $( "#my_vertical" ).val(),
++				at: $( "#at_horizontal" ).val() + " " + $( "#at_vertical" ).val(),
++				collision: $( "#collision_horizontal" ).val() + " " + $( "#collision_vertical" ).val()
++			});
++		}
++
++		$( ".positionable" ).css( "opacity", 0.5 );
++
++		$( "select, input" ).bind( "click keyup change", position );
++
++		$( "#parent" ).draggable({
++			drag: position
++		});
++
++		position();
++	});
++	</script>
++</head>
++<body>
++
++<div id="parent">
++	<p>
++	This is the position parent element.
++	</p>
++</div>
++
++<div class="positionable" id="positionable1">
++	<p>
++	to position
++	</p>
++</div>
++
++<div class="positionable" id="positionable2">
++	<p>
++	to position 2
++	</p>
++</div>
++
++<div style="padding: 20px; margin-top: 75px;">
++	position...
++	<div style="padding-bottom: 20px;">
++		<b>my:</b>
++		<select id="my_horizontal">
++			<option value="left">left</option>
++			<option value="center">center</option>
++			<option value="right">right</option>
++		</select>
++		<select id="my_vertical">
++			<option value="top">top</option>
++			<option value="middle">center</option>
++			<option value="bottom">bottom</option>
++		</select>
++	</div>
++	<div style="padding-bottom: 20px;">
++		<b>at:</b>
++		<select id="at_horizontal">
++			<option value="left">left</option>
++			<option value="center">center</option>
++			<option value="right">right</option>
++		</select>
++		<select id="at_vertical">
++			<option value="top">top</option>
++			<option value="middle">center</option>
++			<option value="bottom">bottom</option>
++		</select>
++	</div>
++	<div style="padding-bottom: 20px;">
++		<b>collision:</b>
++		<select id="collision_horizontal">
++			<option value="flip">flip</option>
++			<option value="fit">fit</option>
++			<option value="flipfit">flipfit</option>
++			<option value="none">none</option>
++		</select>
++		<select id="collision_vertical">
++			<option value="flip">flip</option>
++			<option value="fit">fit</option>
++			<option value="flipfit">flipfit</option>
++			<option value="none">none</option>
++		</select>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Use the form controls to configure the positioning, or drag the positioned element to modify its offset.
++<br>Drag around the parent element to see collision detection in action.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/index.html	(revision 15487)
+@@ -0,0 +1,15 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Position Demo</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="cycler.html">Cycling images</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on-tile.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on-tile.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on-tile.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on-tile.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on-tile.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-open.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-open.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-open.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-open.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-open.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/icon-docs-info.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/icon-docs-info.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/images/icon-docs-info.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/images/icon-docs-info.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/images/icon-docs-info.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/calendar.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/calendar.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/images/calendar.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/images/calendar.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/images/calendar.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/pbar-ani.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/pbar-ani.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/images/pbar-ani.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/images/pbar-ani.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/images/pbar-ani.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-closed.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-closed.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-closed.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-closed.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-closed.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/shopping-cart.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/shopping-cart.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/shopping-cart.html	(revision 15487)
+@@ -0,0 +1,94 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Droppable - Shopping Cart Demo</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.droppable.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<script src="../../ui/jquery.ui.accordion.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	h1 { padding: .2em; margin: 0; }
++	#products { float:left; width: 500px; margin-right: 2em; }
++	#cart { width: 200px; float: left; margin-top: 1em; }
++	/* style the list to maximize the droppable hitarea */
++	#cart ol { margin: 0; padding: 1em 0 1em 3em; }
++	</style>
++	<script>
++	$(function() {
++		$( "#catalog" ).accordion();
++		$( "#catalog li" ).draggable({
++			appendTo: "body",
++			helper: "clone"
++		});
++		$( "#cart ol" ).droppable({
++			activeClass: "ui-state-default",
++			hoverClass: "ui-state-hover",
++			accept: ":not(.ui-sortable-helper)",
++			drop: function( event, ui ) {
++				$( this ).find( ".placeholder" ).remove();
++				$( "<li></li>" ).text( ui.draggable.text() ).appendTo( this );
++			}
++		}).sortable({
++			items: "li:not(.placeholder)",
++			sort: function() {
++				// gets added unintentionally by droppable interacting with sortable
++				// using connectWithSortable fixes this, but doesn't allow you to customize active/hoverClass options
++				$( this ).removeClass( "ui-state-default" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="products">
++	<h1 class="ui-widget-header">Products</h1>
++	<div id="catalog">
++		<h2><a href="#">T-Shirts</a></h2>
++		<div>
++			<ul>
++				<li>Lolcat Shirt</li>
++				<li>Cheezeburger Shirt</li>
++				<li>Buckit Shirt</li>
++			</ul>
++		</div>
++		<h2><a href="#">Bags</a></h2>
++		<div>
++			<ul>
++				<li>Zebra Striped</li>
++				<li>Black Leather</li>
++				<li>Alligator Leather</li>
++			</ul>
++		</div>
++		<h2><a href="#">Gadgets</a></h2>
++		<div>
++			<ul>
++				<li>iPhone</li>
++				<li>iPod</li>
++				<li>iPad</li>
++			</ul>
++		</div>
++	</div>
++</div>
++
++<div id="cart">
++	<h1 class="ui-widget-header">Shopping Cart</h1>
++	<div class="ui-widget-content">
++		<ol>
++			<li class="placeholder">Add your items here</li>
++		</ol>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Demonstrate how to use an accordion to structure products into a catalog and make use of drag and drop for adding them to a shopping cart, where they are sortable.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/photo-manager.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/photo-manager.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/photo-manager.html	(revision 15487)
+@@ -0,0 +1,182 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Droppable - Simple photo manager</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.droppable.js"></script>
++	<script src="../../ui/jquery.ui.resizable.js"></script>
++	<script src="../../ui/jquery.ui.dialog.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#gallery { float: left; width: 65%; min-height: 12em; }
++	.gallery.custom-state-active { background: #eee; }
++	.gallery li { float: left; width: 96px; padding: 0.4em; margin: 0 0.4em 0.4em 0; text-align: center; }
++	.gallery li h5 { margin: 0 0 0.4em; cursor: move; }
++	.gallery li a { float: right; }
++	.gallery li a.ui-icon-zoomin { float: left; }
++	.gallery li img { width: 100%; cursor: move; }
++
++	#trash { float: right; width: 32%; min-height: 18em; padding: 1%; }
++	#trash h4 { line-height: 16px; margin: 0 0 0.4em; }
++	#trash h4 .ui-icon { float: left; }
++	#trash .gallery h5 { display: none; }
++	</style>
++	<script>
++	$(function() {
++		// there's the gallery and the trash
++		var $gallery = $( "#gallery" ),
++			$trash = $( "#trash" );
++
++		// let the gallery items be draggable
++		$( "li", $gallery ).draggable({
++			cancel: "a.ui-icon", // clicking an icon won't initiate dragging
++			revert: "invalid", // when not dropped, the item will revert back to its initial position
++			containment: "document",
++			helper: "clone",
++			cursor: "move"
++		});
++
++		// let the trash be droppable, accepting the gallery items
++		$trash.droppable({
++			accept: "#gallery > li",
++			activeClass: "ui-state-highlight",
++			drop: function( event, ui ) {
++				deleteImage( ui.draggable );
++			}
++		});
++
++		// let the gallery be droppable as well, accepting items from the trash
++		$gallery.droppable({
++			accept: "#trash li",
++			activeClass: "custom-state-active",
++			drop: function( event, ui ) {
++				recycleImage( ui.draggable );
++			}
++		});
++
++		// image deletion function
++		var recycle_icon = "<a href='link/to/recycle/script/when/we/have/js/off' title='Recycle this image' class='ui-icon ui-icon-refresh'>Recycle image</a>";
++		function deleteImage( $item ) {
++			$item.fadeOut(function() {
++				var $list = $( "ul", $trash ).length ?
++					$( "ul", $trash ) :
++					$( "<ul class='gallery ui-helper-reset'/>" ).appendTo( $trash );
++
++				$item.find( "a.ui-icon-trash" ).remove();
++				$item.append( recycle_icon ).appendTo( $list ).fadeIn(function() {
++					$item
++						.animate({ width: "48px" })
++						.find( "img" )
++							.animate({ height: "36px" });
++				});
++			});
++		}
++
++		// image recycle function
++		var trash_icon = "<a href='link/to/trash/script/when/we/have/js/off' title='Delete this image' class='ui-icon ui-icon-trash'>Delete image</a>";
++		function recycleImage( $item ) {
++			$item.fadeOut(function() {
++				$item
++					.find( "a.ui-icon-refresh" )
++						.remove()
++					.end()
++					.css( "width", "96px")
++					.append( trash_icon )
++					.find( "img" )
++						.css( "height", "72px" )
++					.end()
++					.appendTo( $gallery )
++					.fadeIn();
++			});
++		}
++
++		// image preview function, demonstrating the ui.dialog used as a modal window
++		function viewLargerImage( $link ) {
++			var src = $link.attr( "href" ),
++				title = $link.siblings( "img" ).attr( "alt" ),
++				$modal = $( "img[src$='" + src + "']" );
++
++			if ( $modal.length ) {
++				$modal.dialog( "open" );
++			} else {
++				var img = $( "<img alt='" + title + "' width='384' height='288' style='display: none; padding: 8px;' />" )
++					.attr( "src", src ).appendTo( "body" );
++				setTimeout(function() {
++					img.dialog({
++						title: title,
++						width: 400,
++						modal: true
++					});
++				}, 1 );
++			}
++		}
++
++		// resolve the icons behavior with event delegation
++		$( "ul.gallery > li" ).click(function( event ) {
++			var $item = $( this ),
++				$target = $( event.target );
++
++			if ( $target.is( "a.ui-icon-trash" ) ) {
++				deleteImage( $item );
++			} else if ( $target.is( "a.ui-icon-zoomin" ) ) {
++				viewLargerImage( $target );
++			} else if ( $target.is( "a.ui-icon-refresh" ) ) {
++				recycleImage( $item );
++			}
++
++			return false;
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div class="ui-widget ui-helper-clearfix">
++
++<ul id="gallery" class="gallery ui-helper-reset ui-helper-clearfix">
++	<li class="ui-widget-content ui-corner-tr">
++		<h5 class="ui-widget-header">High Tatras</h5>
++		<img src="images/high_tatras_min.jpg" alt="The peaks of High Tatras" width="96" height="72" />
++		<a href="images/high_tatras.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
++		<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
++	</li>
++	<li class="ui-widget-content ui-corner-tr">
++		<h5 class="ui-widget-header">High Tatras 2</h5>
++		<img src="images/high_tatras2_min.jpg" alt="The chalet at the Green mountain lake" width="96" height="72" />
++		<a href="images/high_tatras2.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
++		<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
++	</li>
++	<li class="ui-widget-content ui-corner-tr">
++		<h5 class="ui-widget-header">High Tatras 3</h5>
++		<img src="images/high_tatras3_min.jpg" alt="Planning the ascent" width="96" height="72" />
++		<a href="images/high_tatras3.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
++		<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
++	</li>
++	<li class="ui-widget-content ui-corner-tr">
++		<h5 class="ui-widget-header">High Tatras 4</h5>
++		<img src="images/high_tatras4_min.jpg" alt="On top of Kozi kopka" width="96" height="72" />
++		<a href="images/high_tatras4.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
++		<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
++	</li>
++</ul>
++
++<div id="trash" class="ui-widget-content ui-state-default">
++	<h4 class="ui-widget-header"><span class="ui-icon ui-icon-trash">Trash</span> Trash</h4>
++</div>
++
++</div>
++
++<div class="demo-description">
++<p>You can delete an image either by dragging it to the Trash or by clicking the trash icon.</p>
++<p>You can "recycle" an image by dragging it back to the gallery or by clicking the recycle icon.</p>
++<p>You can view larger image by clicking the zoom icon. jQuery UI dialog widget is used for the modal window.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/accepted-elements.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/accepted-elements.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/accepted-elements.html	(revision 15487)
+@@ -0,0 +1,53 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Droppable - Accept</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.droppable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
++	#draggable, #draggable-nonvalid { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable, #draggable-nonvalid" ).draggable();
++		$( "#droppable" ).droppable({
++			accept: "#draggable",
++			activeClass: "ui-state-hover",
++			hoverClass: "ui-state-active",
++			drop: function( event, ui ) {
++				$( this )
++					.addClass( "ui-state-highlight" )
++					.find( "p" )
++						.html( "Dropped!" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable-nonvalid" class="ui-widget-content">
++	<p>I'm draggable but can't be dropped</p>
++</div>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Drag me to my target</p>
++</div>
++
++<div id="droppable" class="ui-widget-header">
++	<p>accept: '#draggable'</p>
++</div>
++
++<div class="demo-description">
++<p>Specify using the <code>accept</code> option which element (or group of elements) is accepted by the target droppable.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras_min.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras_min.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras_min.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras_min.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras_min.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2_min.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2_min.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2_min.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2_min.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2_min.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3_min.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3_min.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3_min.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3_min.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3_min.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4_min.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4_min.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4_min.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4_min.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4_min.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/propagation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/propagation.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/propagation.html	(revision 15487)
+@@ -0,0 +1,73 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Droppable - Prevent propagation</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.droppable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable { width: 100px; height: 40px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
++	#droppable, #droppable2 { width: 230px; height: 120px; padding: 0.5em; float: left; margin: 10px; }
++	#droppable-inner, #droppable2-inner { width: 170px; height: 60px; padding: 0.5em; float: left; margin: 10px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable();
++
++		$( "#droppable, #droppable-inner" ).droppable({
++			activeClass: "ui-state-hover",
++			hoverClass: "ui-state-active",
++			drop: function( event, ui ) {
++				$( this )
++					.addClass( "ui-state-highlight" )
++					.find( "> p" )
++						.html( "Dropped!" );
++				return false;
++			}
++		});
++
++		$( "#droppable2, #droppable2-inner" ).droppable({
++			greedy: true,
++			activeClass: "ui-state-hover",
++			hoverClass: "ui-state-active",
++			drop: function( event, ui ) {
++				$( this )
++					.addClass( "ui-state-highlight" )
++					.find( "> p" )
++						.html( "Dropped!" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Drag me to my target</p>
++</div>
++
++<div id="droppable" class="ui-widget-header">
++	<p>Outer droppable</p>
++	<div id="droppable-inner" class="ui-widget-header">
++		<p>Inner droppable (not greedy)</p>
++	</div>
++</div>
++
++<div id="droppable2" class="ui-widget-header">
++	<p>Outer droppable</p>
++	<div id="droppable2-inner" class="ui-widget-header">
++		<p>Inner droppable (greedy)</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>When working with nested droppables &#8212; for example, you may have an editable directory structure displayed as a tree, with folder and document nodes &#8212; the <code>greedy</code> option set to true prevents event propagation when a draggable is dropped on a child node (droppable).</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/default.html	(revision 15487)
+@@ -0,0 +1,46 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Droppable - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.droppable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
++	#droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable();
++		$( "#droppable" ).droppable({
++			drop: function( event, ui ) {
++				$( this )
++					.addClass( "ui-state-highlight" )
++					.find( "p" )
++						.html( "Dropped!" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Drag me to my target</p>
++</div>
++
++<div id="droppable" class="ui-widget-header">
++	<p>Drop here</p>
++</div>
++
++<div class="demo-description">
++<p>Enable any DOM element to be droppable, a target for draggable elements.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/visual-feedback.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/visual-feedback.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/visual-feedback.html	(revision 15487)
+@@ -0,0 +1,72 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Droppable - Visual feedback</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.droppable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable, #draggable2 { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
++	#droppable, #droppable2 { width: 120px; height: 120px; padding: 0.5em; float: left; margin: 10px; }
++	h3 { clear: left; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable();
++		$( "#droppable" ).droppable({
++			hoverClass: "ui-state-active",
++			drop: function( event, ui ) {
++				$( this )
++					.addClass( "ui-state-highlight" )
++					.find( "p" )
++						.html( "Dropped!" );
++			}
++		});
++
++		$( "#draggable2" ).draggable();
++		$( "#droppable2" ).droppable({
++			accept: "#draggable2",
++			activeClass: "ui-state-hover",
++			drop: function( event, ui ) {
++				$( this )
++					.addClass( "ui-state-highlight" )
++					.find( "p" )
++						.html( "Dropped!" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<h3>Feedback on hover:</h3>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Drag me to my target</p>
++</div>
++
++<div id="droppable" class="ui-widget-header">
++	<p>Drop here</p>
++</div>
++
++<h3>Feedback on activating draggable:</h3>
++
++<div id="draggable2" class="ui-widget-content">
++	<p>Drag me to my target</p>
++</div>
++
++<div id="droppable2" class="ui-widget-header">
++	<p>Drop here</p>
++</div>
++
++<div class="demo-description">
++<p>Change the droppable's appearance on hover, or when the droppable is active (an acceptable draggable is dropped on it).  Use the <code>hoverClass</code> or <code>activeClass</code> options to specify respective classes.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/index.html	(revision 15487)
+@@ -0,0 +1,20 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Droppable Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="accepted-elements.html">Accepted elements</a></li>
++	<li><a href="propagation.html">Prevent propagation</a></li>
++	<li><a href="visual-feedback.html">Visual feedback</a></li>
++	<li><a href="revert.html">Revert draggable position</a></li>
++	<li><a href="shopping-cart.html">Shopping Cart</a></li>
++	<li><a href="photo-manager.html">Simple photo manager</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/revert.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/revert.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/revert.html	(revision 15487)
+@@ -0,0 +1,54 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Droppable - Revert draggable position</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.droppable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
++	#droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ revert: "valid" });
++		$( "#draggable2" ).draggable({ revert: "invalid" });
++
++		$( "#droppable" ).droppable({
++			activeClass: "ui-state-hover",
++			hoverClass: "ui-state-active",
++			drop: function( event, ui ) {
++				$( this )
++					.addClass( "ui-state-highlight" )
++					.find( "p" )
++						.html( "Dropped!" );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p>I revert when I'm dropped</p>
++</div>
++
++<div id="draggable2" class="ui-widget-content">
++	<p>I revert when I'm not dropped</p>
++</div>
++
++<div id="droppable" class="ui-widget-header">
++	<p>Drop me here</p>
++</div>
++
++<div class="demo-description">
++<p>Return the draggable (or it's helper) to its original location when dragging stops with the boolean <code>revert</code> option set on the draggable.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/scroll.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/scroll.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/scroll.html	(revision 15487)
+@@ -0,0 +1,44 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Auto-scroll</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable, #draggable2, #draggable3 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ scroll: true });
++		$( "#draggable2" ).draggable({ scroll: true, scrollSensitivity: 100 });
++		$( "#draggable3" ).draggable({ scroll: true, scrollSpeed: 100 });
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Scroll set to true, default settings</p>
++</div>
++
++<div id="draggable2" class="ui-widget-content">
++	<p>scrollSensitivity set to 100</p>
++</div>
++
++<div id="draggable3" class="ui-widget-content">
++	<p>scrollSpeed set to 100</p>
++</div>
++
++<div style='height: 5000px; width: 1px;'></div>
++
++<div class="demo-description">
++<p>Automatically scroll the document when the draggable is moved beyond the viewport. Set the <code>scroll</code> option to true to enable auto-scrolling, and fine-tune when scrolling is triggered and its speed with the <code>scrollSensitivity</code> and <code>scrollSpeed</code> options.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/snap-to.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/snap-to.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/snap-to.html	(revision 15487)
+@@ -0,0 +1,61 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Snap to element or grid</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.draggable { width: 90px; height: 80px; padding: 5px; float: left; margin: 0 10px 10px 0; font-size: .9em; }
++	.ui-widget-header p, .ui-widget-content p { margin: 0; }
++	#snaptarget { height: 140px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ snap: true });
++		$( "#draggable2" ).draggable({ snap: ".ui-widget-header" });
++		$( "#draggable3" ).draggable({ snap: ".ui-widget-header", snapMode: "outer" });
++		$( "#draggable4" ).draggable({ grid: [ 20,20 ] });
++		$( "#draggable5" ).draggable({ grid: [ 80, 80 ] });
++	});
++	</script>
++</head>
++<body>
++
++<div id="snaptarget" class="ui-widget-header">
++	<p>I'm a snap target</p>
++</div>
++
++<br style="clear:both" />
++
++<div id="draggable" class="draggable ui-widget-content">
++	<p>Default (snap: true), snaps to all other draggable elements</p>
++</div>
++
++<div id="draggable2" class="draggable ui-widget-content">
++	<p>I only snap to the big box</p>
++</div>
++
++<div id="draggable3" class="draggable ui-widget-content">
++	<p>I only snap to the outer edges of the big box</p>
++</div>
++
++<div id="draggable4" class="draggable ui-widget-content">
++	<p>I snap to a 20 x 20 grid</p>
++</div>
++
++<div id="draggable5" class="draggable ui-widget-content">
++	<p>I snap to a 80 x 80 grid</p>
++</div>
++
++<div class="demo-description">
++<p>Snap the draggable to the inner or outer boundaries of a DOM element.  Use the <code>snap</code>, <code>snapMode</code> (inner, outer, both), and <code>snapTolerance</code> (distance in pixels the draggable must be from the element when snapping is invoked) options. </p>
++<p>Or snap the draggable to a grid.  Set the dimensions of grid cells (height and width in pixels) with the <code>grid</code> option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/default.html	(revision 15487)
+@@ -0,0 +1,32 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable { width: 150px; height: 150px; padding: 0.5em; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable();
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Drag me around</p>
++</div>
++
++<div class="demo-description">
++<p>Enable draggable functionality on any DOM element. Move the draggable object by clicking on it with the mouse and dragging it anywhere within the viewport.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/events.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/events.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/events.html	(revision 15487)
+@@ -0,0 +1,70 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Events</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable { width: 16em; padding: 0 1em; }
++	#draggable ul li { margin: 1em 0; padding: 0.5em 0; } * html #draggable ul li { height: 1%; }
++	#draggable ul li span.ui-icon { float: left; }
++	#draggable ul li span.count { font-weight: bold; }
++	</style>
++	<script>
++	$(function() {
++		var $start_counter = $( "#event-start" ),
++			$drag_counter = $( "#event-drag" ),
++			$stop_counter = $( "#event-stop" ),
++			counts = [ 0, 0, 0 ];
++
++		$( "#draggable" ).draggable({
++			start: function() {
++				counts[ 0 ]++;
++				updateCounterStatus( $start_counter, counts[ 0 ] );
++			},
++			drag: function() {
++				counts[ 1 ]++;
++				updateCounterStatus( $drag_counter, counts[ 1 ] );
++			},
++			stop: function() {
++				counts[ 2 ]++;
++				updateCounterStatus( $stop_counter, counts[ 2 ] );
++			}
++		});
++
++		function updateCounterStatus( $event_counter, new_count ) {
++			// first update the status visually...
++			if ( !$event_counter.hasClass( "ui-state-hover" ) ) {
++				$event_counter.addClass( "ui-state-hover" )
++					.siblings().removeClass( "ui-state-hover" );
++			}
++			// ...then update the numbers
++			$( "span.count", $event_counter ).text( new_count );
++		}
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget ui-widget-content">
++
++	<p>Drag me to trigger the chain of events.</p>
++
++	<ul class="ui-helper-reset">
++		<li id="event-start" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-play"></span>"start" invoked <span class="count">0</span>x</li>
++		<li id="event-drag" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-arrow-4"></span>"drag" invoked <span class="count">0</span>x</li>
++		<li id="event-stop" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-stop"></span>"stop" invoked <span class="count">0</span>x</li>
++	</ul>
++</div>
++
++<div class="demo-description">
++<p>Layer functionality onto the draggable using the <code>start</code>, <code>drag</code>, and <code>stop</code> events.  Start is fired at the start of the drag; drag during the drag; and stop when dragging stops.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/visual-feedback.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/visual-feedback.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/visual-feedback.html	(revision 15487)
+@@ -0,0 +1,70 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Visual feedback</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable, #draggable2, #draggable3, #set div { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
++	#draggable, #draggable2, #draggable3 { margin-bottom:20px; }
++	#set { clear:both; float:left; width: 368px; height: 120px; }
++	p { clear:both; margin:0; padding:1em 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ helper: "original" });
++		$( "#draggable2" ).draggable({ opacity: 0.7, helper: "clone" });
++		$( "#draggable3" ).draggable({
++			cursor: "move",
++			cursorAt: { top: -12, left: -20 },
++			helper: function( event ) {
++				return $( "<div class='ui-widget-header'>I'm a custom helper</div>" );
++			}
++		});
++		$( "#set div" ).draggable({ stack: "#set div" });
++	});
++	</script>
++</head>
++<body>
++
++<h3 class="docs">With helpers:</h3>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Original</p>
++</div>
++
++<div id="draggable2" class="ui-widget-content">
++	<p>Semi-transparent clone</p>
++</div>
++
++<div id="draggable3" class="ui-widget-content">
++	<p>Custom helper (in combination with cursorAt)</p>
++</div>
++
++<h3 class="docs">Stacked:</h3>
++<div id="set">
++	<div class="ui-widget-content">
++		<p>We are draggables..</p>
++	</div>
++
++	<div class="ui-widget-content">
++		<p>..whose z-indexes are controlled automatically..</p>
++	</div>
++
++	<div class="ui-widget-content">
++		<p>..with the stack option.</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Provide feedback to users as they drag an object in the form of a helper. The <code>helper</code> option accepts the values 'original' (the draggable object moves with the cursor), 'clone' (a duplicate of the draggable moves with the cursor), or a function that returns a DOM element (that element is shown near the cursor during drag). Control the helper's transparency with the <code>opacity</code> option.</p>
++<p>To clarify which draggable is in play, bring the draggable in motion to front. Use the <code>zIndex</code> option to set a higher z-index for the helper, if in play, or use the <code>stack</code> option to ensure that the last item dragged will appear on top of others in the same group on drag stop.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/index.html	(revision 15487)
+@@ -0,0 +1,24 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="events.html">Events</a></li>
++	<li><a href="constrain-movement.html">Constrain movement</a></li>
++	<li><a href="delay-start.html">Delay start</a></li>
++	<li><a href="snap-to.html">Snap to element or grid</a></li>
++	<li><a href="scroll.html">Auto-scroll</a></li>
++	<li><a href="revert.html">Revert position</a></li>
++	<li><a href="visual-feedback.html">Visual feedback</a></li>
++	<li><a href="handle.html">Drag handle</a></li>
++	<li><a href="cursor-style.html">Cursor style</a></li>
++	<li><a href="sortable.html">Draggable + Sortable</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/revert.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/revert.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/revert.html	(revision 15487)
+@@ -0,0 +1,37 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Revert position</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ revert: true });
++		$( "#draggable2" ).draggable({ revert: true, helper: "clone" });
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Revert the original</p>
++</div>
++
++<div id="draggable2" class="ui-widget-content">
++	<p>Revert the helper</p>
++</div>
++
++<div class="demo-description">
++<p>Return the draggable (or it's helper) to its original location when dragging stops with the boolean <code>revert</code> option.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/constrain-movement.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/constrain-movement.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/constrain-movement.html	(revision 15487)
+@@ -0,0 +1,58 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Constrain movement</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	.draggable { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
++	#draggable, #draggable2 { margin-bottom:20px; }
++	#draggable { cursor: n-resize; }
++	#draggable2 { cursor: e-resize; }
++	#containment-wrapper { width: 95%; height:150px; border:2px solid #ccc; padding: 10px; }
++	h3 { clear: left; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ axis: "y" });
++		$( "#draggable2" ).draggable({ axis: "x" });
++
++		$( "#draggable3" ).draggable({ containment: "#containment-wrapper", scroll: false });
++		$( "#draggable5" ).draggable({ containment: "parent" });
++	});
++	</script>
++</head>
++<body>
++
++<h3>Constrain movement along an axis:</h3>
++
++<div id="draggable" class="draggable ui-widget-content">
++	<p>I can be dragged only vertically</p>
++</div>
++
++<div id="draggable2" class="draggable ui-widget-content">
++	<p>I can be dragged only horizontally</p>
++</div>
++
++<h3>Or to within another DOM element:</h3>
++<div id="containment-wrapper">
++	<div id="draggable3" class="draggable ui-widget-content">
++		<p>I'm contained within the box</p>
++	</div>
++
++	<div class="draggable ui-widget-content">
++		<p id="draggable5" class="ui-widget-header">I'm contained within my parent</p>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Constrain the movement of each draggable by defining the boundaries of the draggable area. Set the <code>axis</code> option to limit the draggable's path to the x- or y-axis, or use the <code>containment</code> option to specify a parent DOM element or a jQuery selector, like 'document.'</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/delay-start.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/delay-start.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/delay-start.html	(revision 15487)
+@@ -0,0 +1,38 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Delay start</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable, #draggable2 { width: 120px; height: 120px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ distance: 20 });
++		$( "#draggable2" ).draggable({ delay: 1000 });
++		$( ".ui-draggable" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p>Only if you drag me by 20 pixels, the dragging will start</p>
++</div>
++
++<div id="draggable2" class="ui-widget-content">
++	<p>Regardless of the distance, you have to drag and wait for 1000ms before dragging starts</p>
++</div>
++
++<div class="demo-description">
++<p>Delay the start of dragging for a number of milliseconds with the <code>delay</code> option; prevent dragging until the cursor is held down and dragged a specifed number of pixels with the <code>distance</code> option. </p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/cursor-style.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/cursor-style.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/cursor-style.html	(revision 15487)
+@@ -0,0 +1,42 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Cursor style</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable, #draggable2, #draggable3 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ cursor: "move", cursorAt: { top: 56, left: 56 } });
++		$( "#draggable2" ).draggable({ cursor: "crosshair", cursorAt: { top: -5, left: -5 } });
++		$( "#draggable3" ).draggable({ cursorAt: { bottom: 0 } });
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p>I will always stick to the center (relative to the mouse)</p>
++</div>
++
++<div id="draggable2" class="ui-widget-content">
++	<p>My cursor is at left -5 and top -5</p>
++</div>
++
++<div id="draggable3" class="ui-widget-content">
++	<p>My cursor position is only controlled for the 'bottom' value</p>
++</div>
++
++<div class="demo-description">
++<p>Position the cursor while dragging the object. By default the cursor appears in the center of the dragged object; use the <code>cursorAt</code> option to specify another location relative to the draggable (specify a pixel value from the top, right, bottom, and/or left).  Customize the cursor's appearance by supplying the <code>cursor</code> option with a valid CSS cursor value: default, move, pointer, crosshair, etc.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/handle.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/handle.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/handle.html	(revision 15487)
+@@ -0,0 +1,41 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable - Handles</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
++	#draggable p { cursor: move; }
++	</style>
++	<script>
++	$(function() {
++		$( "#draggable" ).draggable({ handle: "p" });
++		$( "#draggable2" ).draggable({ cancel: "p.ui-widget-header" });
++		$( "div, p" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<div id="draggable" class="ui-widget-content">
++	<p class="ui-widget-header">I can be dragged only by this handle</p>
++</div>
++
++<div id="draggable2" class="ui-widget-content">
++	<p>You can drag me around&hellip;</p>
++	<p class="ui-widget-header">&hellip;but you can't drag me by this handle.</p>
++</div>
++
++<div class="demo-description">
++<p>Allow dragging only when the cursor is over a specific part of the draggable.  Use the <code>handle</code> option to specify the jQuery selector of an element (or group of elements) used to drag the object.</p>
++<p>Or prevent dragging when the cursor is over a specific element (or group of elements) within the draggable.  Use the <code>cancel</code> option to specify a jQuery selector over which to "cancel" draggable functionality.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/sortable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/sortable.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/sortable.html	(revision 15487)
+@@ -0,0 +1,50 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Draggable + Sortable</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.draggable.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	ul { list-style-type: none; margin: 0; padding: 0; margin-bottom: 10px; }
++	li { margin: 5px; padding: 5px; width: 150px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#sortable" ).sortable({
++			revert: true
++		});
++		$( "#draggable" ).draggable({
++			connectToSortable: "#sortable",
++			helper: "clone",
++			revert: "invalid"
++		});
++		$( "ul, li" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<ul>
++	<li id="draggable" class="ui-state-highlight">Drag me down</li>
++</ul>
++
++<ul id="sortable">
++	<li class="ui-state-default">Item 1</li>
++	<li class="ui-state-default">Item 2</li>
++	<li class="ui-state-default">Item 3</li>
++	<li class="ui-state-default">Item 4</li>
++	<li class="ui-state-default">Item 5</li>
++</ul>
++
++<div class="demo-description">
++<p>Draggables are built to interact seamlessly with <a href="http://jqueryui.com/sortable">sortables</a>.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/dropdown-month-year.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/dropdown-month-year.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/dropdown-month-year.html	(revision 15487)
+@@ -0,0 +1,29 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Display month &amp; year menus</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker({
++			changeMonth: true,
++			changeYear: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"></p>
++
++<div class="demo-description">
++<p>Show month and year dropdowns in place of the static month/year header to facilitate navigation through large timeframes.  Add the boolean <code>changeMonth</code> and <code>changeYear</code> options.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-ar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-ar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-ar.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Arabic Translation for jQuery UI date picker plugin. */
++/* Khaled Alhourani -- me@khaledalhourani.com */
++/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
++jQuery(function($){
++	$.datepicker.regional['ar'] = {
++		closeText: 'إغلاق',
++		prevText: '&#x3C;السابق',
++		nextText: 'التالي&#x3E;',
++		currentText: 'اليوم',
++		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
++		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
++		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
++		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
++		weekHeader: 'أسبوع',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 6,
++  		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ar']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/inline.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/inline.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/inline.html	(revision 15487)
+@@ -0,0 +1,26 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Display inline</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker();
++	});
++	</script>
++</head>
++<body>
++
++Date: <div id="datepicker"></div>
++
++<div class="demo-description">
++<p>Display the datepicker embedded in the page instead of in an overlay.  Simply call .datepicker() on a div instead of an input.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/animation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/animation.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/animation.html	(revision 15487)
+@@ -0,0 +1,51 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Animations</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.effect.js"></script>
++	<script src="../../ui/jquery.ui.effect-blind.js"></script>
++	<script src="../../ui/jquery.ui.effect-bounce.js"></script>
++	<script src="../../ui/jquery.ui.effect-clip.js"></script>
++	<script src="../../ui/jquery.ui.effect-drop.js"></script>
++	<script src="../../ui/jquery.ui.effect-fold.js"></script>
++	<script src="../../ui/jquery.ui.effect-slide.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker();
++		$( "#anim" ).change(function() {
++			$( "#datepicker" ).datepicker( "option", "showAnim", $( this ).val() );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker" size="30"/></p>
++
++<p>Animations:<br />
++	<select id="anim">
++		<option value="show">Show (default)</option>
++		<option value="slideDown">Slide down</option>
++		<option value="fadeIn">Fade in</option>
++		<option value="blind">Blind (UI Effect)</option>
++		<option value="bounce">Bounce (UI Effect)</option>
++		<option value="clip">Clip (UI Effect)</option>
++		<option value="drop">Drop (UI Effect)</option>
++		<option value="fold">Fold (UI Effect)</option>
++		<option value="slide">Slide (UI Effect)</option>
++		<option value="">None</option>
++	</select>
++</p>
++
++<div class="demo-description">
++<p>Use different animations when opening or closing the datepicker.  Choose an animation from the dropdown, then click on the input to see its effect.  You can use one of the three standard animations or any of the UI Effects.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-fr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-fr.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-fr.js	(revision 15487)
+@@ -0,0 +1,25 @@
++/* French initialisation for the jQuery UI date picker plugin. */
++/* Written by Keith Wood (kbwood{at}iinet.com.au),
++			  Stéphane Nahmani (sholby@sholby.net),
++			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
++jQuery(function($){
++	$.datepicker.regional['fr'] = {
++		closeText: 'Fermer',
++		prevText: 'Précédent',
++		nextText: 'Suivant',
++		currentText: 'Aujourd\'hui',
++		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
++		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
++		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
++		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
++		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
++		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
++		dayNamesMin: ['D','L','M','M','J','V','S'],
++		weekHeader: 'Sem.',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fr']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/default.html	(revision 15487)
+@@ -0,0 +1,26 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker();
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"></p>
++
++<div class="demo-description">
++<p>The datepicker is tied to a standard form input field.  Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay.  Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input's value.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-zh-TW.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-zh-TW.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-zh-TW.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Chinese initialisation for the jQuery UI date picker plugin. */
++/* Written by Ressol (ressol@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['zh-TW'] = {
++		closeText: '關閉',
++		prevText: '&#x3C;上月',
++		nextText: '下月&#x3E;',
++		currentText: '今天',
++		monthNames: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
++		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
++		dayNamesMin: ['日','一','二','三','四','五','六'],
++		weekHeader: '周',
++		dateFormat: 'yy/mm/dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['zh-TW']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/multiple-calendars.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/multiple-calendars.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/multiple-calendars.html	(revision 15487)
+@@ -0,0 +1,29 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Display multiple months</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker({
++			numberOfMonths: 3,
++			showButtonPanel: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"></p>
++
++<div class="demo-description">
++<p>Set the <code>numberOfMonths</code> option to an integer of 2 or more to show multiple months in a single datepicker.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-formats.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-formats.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-formats.html	(revision 15487)
+@@ -0,0 +1,40 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Format date</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker();
++		$( "#format" ).change(function() {
++			$( "#datepicker" ).datepicker( "option", "dateFormat", $( this ).val() );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker" size="30"/></p>
++
++<p>Format options:<br />
++	<select id="format">
++		<option value="mm/dd/yy">Default - mm/dd/yy</option>
++		<option value="yy-mm-dd">ISO 8601 - yy-mm-dd</option>
++		<option value="d M, y">Short - d M, y</option>
++		<option value="d MM, y">Medium - d MM, y</option>
++		<option value="DD, d MM, yy">Full - DD, d MM, yy</option>
++		<option value="'day' d 'of' MM 'in the year' yy">With text - 'day' d 'of' MM 'in the year' yy</option>
++	</select>
++</p>
++
++<div class="demo-description">
++<p>Display date feedback in a variety of ways.  Choose a date format from the dropdown, then click on the input and select a date to see it in that format.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/other-months.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/other-months.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/other-months.html	(revision 15487)
+@@ -0,0 +1,30 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Dates in other months</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker({
++			showOtherMonths: true,
++			selectOtherMonths: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"></p>
++
++<div class="demo-description">
++<p>The datepicker can show dates that come from other than the main month
++	being displayed. These other dates can also be made selectable.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/localization.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/localization.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/localization.html	(revision 15487)
+@@ -0,0 +1,41 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Localize calendar</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<script src="jquery.ui.datepicker-ar.js"></script>
++	<script src="jquery.ui.datepicker-fr.js"></script>
++	<script src="jquery.ui.datepicker-he.js"></script>
++	<script src="jquery.ui.datepicker-zh-TW.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker( $.datepicker.regional[ "fr" ] );
++		$( "#locale" ).change(function() {
++			$( "#datepicker" ).datepicker( "option",
++				$.datepicker.regional[ $( this ).val() ] );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"/>&nbsp;
++	<select id="locale">
++		<option value="ar">Arabic (&#8235;(&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;</option>
++		<option value="zh-TW">Chinese Traditional (&#32321;&#39636;&#20013;&#25991;)</option>
++		<option value="">English</option>
++		<option value="fr" selected="selected">French (Fran&ccedil;ais)</option>
++		<option value="he">Hebrew (&#8235;(&#1506;&#1489;&#1512;&#1497;&#1514;</option>
++	</select></p>
++
++<div class="demo-description">
++<p>Localize the datepicker calendar language and format (English / Western formatting is the default).  The datepicker includes built-in support for languages that read right-to-left, such as Arabic and Hebrew.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/icon-trigger.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/icon-trigger.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/icon-trigger.html	(revision 15487)
+@@ -0,0 +1,30 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Icon trigger</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker({
++			showOn: "button",
++			buttonImage: "images/calendar.gif",
++			buttonImageOnly: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"></p>
++
++<div class="demo-description">
++<p>Click the icon next to the input field to show the datepicker.  Set the datepicker to open on focus (default behavior), on icon click, or both.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/buttonbar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/buttonbar.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/buttonbar.html	(revision 15487)
+@@ -0,0 +1,28 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Display button bar</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker({
++			showButtonPanel: true
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"></p>
++
++<div class="demo-description">
++<p>Display a button for selecting Today's date and a Done button for closing the calendar with the boolean <code>showButtonPanel</code> option.  Each button is enabled by default when the bar is displayed, but can be turned off with additional options.  Button text is customizable.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/alt-field.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/alt-field.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/alt-field.html	(revision 15487)
+@@ -0,0 +1,29 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Populate alternate field</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker({
++			altField: "#alternate",
++			altFormat: "DD, d MM, yy"
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker">&nbsp;<input type="text" id="alternate" size="30"/></p>
++
++<div class="demo-description">
++<p>Populate an alternate field with its own date format whenever a date is selected using the <code>altField</code> and <code>altFormat</code> options.  This feature could be used to present a human-friendly date for user selection, while passing a more computer-friendly date through for further processing.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/images/calendar.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/images/calendar.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/images/calendar.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/images/calendar.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/images/calendar.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/min-max.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/min-max.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/min-max.html	(revision 15487)
+@@ -0,0 +1,26 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Restrict date range</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker({ minDate: -20, maxDate: "+1M +10D" });
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"></p>
++
++<div class="demo-description">
++<p>Restrict the range of selectable dates with the <code>minDate</code> and <code>maxDate</code> options.  Set the beginning and end dates as actual dates (new Date(2009, 1 - 1, 26)), as a numeric offset from today (-20), or as a string of periods and units ('+1M +10D').  For the last, use 'D' for days, 'W' for weeks, 'M' for months, or 'Y' for years.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-he.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-he.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-he.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Hebrew initialisation for the UI Datepicker extension. */
++/* Written by Amir Hardon (ahardon at gmail dot com). */
++jQuery(function($){
++	$.datepicker.regional['he'] = {
++		closeText: 'סגור',
++		prevText: '&#x3C;הקודם',
++		nextText: 'הבא&#x3E;',
++		currentText: 'היום',
++		monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
++		'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
++		monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני',
++		'יולי','אוג','ספט','אוק','נוב','דצמ'],
++		dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
++		dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
++		dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['he']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/index.html	(revision 15487)
+@@ -0,0 +1,27 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="date-formats.html">Format date</a></li>
++	<li><a href="min-max.html">Restrict date range</a></li>
++	<li><a href="localization.html">Localize calendar</a></li>
++	<li><a href="alt-field.html">Populate alternate field</a></li>
++	<li><a href="inline.html">Display inline</a></li>
++	<li><a href="buttonbar.html">Display button bar</a></li>
++	<li><a href="dropdown-month-year.html">Display month &amp; year menus</a></li>		
++	<li><a href="other-months.html">Dates in other months</a></li>		
++	<li><a href="show-week.html">Show week of the year</a></li>		
++	<li><a href="multiple-calendars.html">Display multiple months</a></li>		
++	<li><a href="icon-trigger.html">Icon trigger</a></li>
++	<li><a href="animation.html">Animations</a></li>
++	<li><a href="date-range.html">Date Range</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-range.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-range.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-range.html	(revision 15487)
+@@ -0,0 +1,44 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Select a Date Range</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#from" ).datepicker({
++			defaultDate: "+1w",
++			changeMonth: true,
++			numberOfMonths: 3,
++			onClose: function( selectedDate ) {
++				$( "#to" ).datepicker( "option", "minDate", selectedDate );
++			}
++		});
++		$( "#to" ).datepicker({
++			defaultDate: "+1w",
++			changeMonth: true,
++			numberOfMonths: 3,
++			onClose: function( selectedDate ) {
++				$( "#from" ).datepicker( "option", "maxDate", selectedDate );
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<label for="from">From</label>
++<input type="text" id="from" name="from"/>
++<label for="to">to</label>
++<input type="text" id="to" name="to"/>
++
++<div class="demo-description">
++<p>Select the date range to search for.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/show-week.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/show-week.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/show-week.html	(revision 15487)
+@@ -0,0 +1,32 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Datepicker - Show week of the year</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.datepicker.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#datepicker" ).datepicker({
++			showWeek: true,
++			firstDay: 1
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>Date: <input type="text" id="datepicker"></p>
++
++<div class="demo-description">
++<p>The datepicker can show the week of the year. The default calculation follows
++	the ISO 8601 definition: the week starts on Monday, the first week of the year
++	contains the first Thursday of the year. This means that some days from one
++	year may be placed into weeks 'belonging' to another year.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/radio.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/radio.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/radio.html	(revision 15487)
+@@ -0,0 +1,32 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Button - Radios</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#radio" ).buttonset();
++	});
++	</script>
++</head>
++<body>
++
++<form>
++	<div id="radio">
++		<input type="radio" id="radio1" name="radio" /><label for="radio1">Choice 1</label>
++		<input type="radio" id="radio2" name="radio" checked="checked" /><label for="radio2">Choice 2</label>
++		<input type="radio" id="radio3" name="radio" /><label for="radio3">Choice 3</label>
++	</div>
++</form>
++
++<div class="demo-description">
++<p>A set of three radio buttons transformed into a button set.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/toolbar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/toolbar.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/toolbar.html	(revision 15487)
+@@ -0,0 +1,118 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Button - Toolbar</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#toolbar {
++		padding: 4px;
++		display: inline-block;
++	}
++	/* support: IE7 */
++	*+html #toolbar {
++		display: inline;
++	}
++	</style>
++	<script>
++	$(function() {
++		$( "#beginning" ).button({
++			text: false,
++			icons: {
++				primary: "ui-icon-seek-start"
++			}
++		});
++		$( "#rewind" ).button({
++			text: false,
++			icons: {
++				primary: "ui-icon-seek-prev"
++			}
++		});
++		$( "#play" ).button({
++			text: false,
++			icons: {
++				primary: "ui-icon-play"
++			}
++		})
++		.click(function() {
++			var options;
++			if ( $( this ).text() === "play" ) {
++				options = {
++					label: "pause",
++					icons: {
++						primary: "ui-icon-pause"
++					}
++				};
++			} else {
++				options = {
++					label: "play",
++					icons: {
++						primary: "ui-icon-play"
++					}
++				};
++			}
++			$( this ).button( "option", options );
++		});
++		$( "#stop" ).button({
++			text: false,
++			icons: {
++				primary: "ui-icon-stop"
++			}
++		})
++		.click(function() {
++			$( "#play" ).button( "option", {
++				label: "play",
++				icons: {
++					primary: "ui-icon-play"
++				}
++			});
++		});
++		$( "#forward" ).button({
++			text: false,
++			icons: {
++				primary: "ui-icon-seek-next"
++			}
++		});
++		$( "#end" ).button({
++			text: false,
++			icons: {
++				primary: "ui-icon-seek-end"
++			}
++		});
++		$( "#shuffle" ).button();
++		$( "#repeat" ).buttonset();
++	});
++	</script>
++</head>
++<body>
++
++<div id="toolbar" class="ui-widget-header ui-corner-all">
++	<button id="beginning">go to beginning</button>
++	<button id="rewind">rewind</button>
++	<button id="play">play</button>
++	<button id="stop">stop</button>
++	<button id="forward">fast forward</button>
++	<button id="end">go to end</button>
++
++	<input type="checkbox" id="shuffle" /><label for="shuffle">Shuffle</label>
++
++	<span id="repeat">
++		<input type="radio" id="repeat0" name="repeat" checked="checked" /><label for="repeat0">No Repeat</label>
++		<input type="radio" id="repeat1" name="repeat" /><label for="repeat1">Once</label>
++		<input type="radio" id="repeatall" name="repeat" /><label for="repeatall">All</label>
++	</span>
++</div>
++
++<div class="demo-description">
++<p>
++	A mediaplayer toolbar. Take a look at the underlying markup: A few button elements,
++	an input of type checkbox for the Shuffle button, and three inputs of type radio for the Repeat options.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/default.html	(revision 15487)
+@@ -0,0 +1,34 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Button - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "input[type=submit], a, button" )
++			.button()
++			.click(function( event ) {
++				event.preventDefault();
++			});
++	});
++	</script>
++</head>
++<body>
++
++<button>A button element</button>
++
++<input type="submit" value="A submit button">
++
++<a href="#">An anchor</a>
++
++<div class="demo-description">
++<p>Examples of the markup that can be used for buttons: A button element, an input of type submit and an anchor.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/checkbox.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/checkbox.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/checkbox.html	(revision 15487)
+@@ -0,0 +1,37 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Button - Checkboxes</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#check" ).button();
++		$( "#format" ).buttonset();
++	});
++	</script>
++	<style>
++	#format { margin-top: 2em; }
++	</style>
++</head>
++<body>
++
++<input type="checkbox" id="check" /><label for="check">Toggle</label>
++
++<div id="format">
++	<input type="checkbox" id="check1" /><label for="check1">B</label>
++	<input type="checkbox" id="check2" /><label for="check2">I</label>
++	<input type="checkbox" id="check3" /><label for="check3">U</label>
++</div>
++
++<div class="demo-description">
++<p>A checkbox is styled as a toggle button with the button widget. The label element associated with the checkbox is used for the button text.</p>
++<p>This demo also demonstrates three checkboxes styled as a button set by calling <code>.buttonset()</code> on a common container.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/index.html	(revision 15487)
+@@ -0,0 +1,19 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Button Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="radio.html">Radios</a></li>
++	<li><a href="checkbox.html">Checkboxes</a></li>
++	<li><a href="icons.html">Icons</a></li>
++	<li><a href="toolbar.html">Toolbar</a></li>
++	<li><a href="splitbutton.html">Split Button</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/splitbutton.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/splitbutton.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/splitbutton.html	(revision 15487)
+@@ -0,0 +1,69 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Button - Split button</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.position.js"></script>
++	<script src="../../ui/jquery.ui.menu.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++		.ui-menu { position: absolute; width: 100px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#rerun" )
++			.button()
++			.click(function() {
++				alert( "Running the last action" );
++			})
++			.next()
++				.button({
++					text: false,
++					icons: {
++						primary: "ui-icon-triangle-1-s"
++					}
++				})
++				.click(function() {
++					var menu = $( this ).parent().next().show().position({
++						my: "left top",
++						at: "left bottom",
++						of: this
++					});
++					$( document ).one( "click", function() {
++						menu.hide();
++					});
++					return false;
++				})
++				.parent()
++					.buttonset()
++					.next()
++						.hide()
++						.menu();
++	});
++	</script>
++</head>
++<body>
++
++<div>
++	<div>
++		<button id="rerun">Run last action</button>
++		<button id="select">Select an action</button>
++	</div>
++	<ul>
++		<li><a href="#">Open...</a></li>
++		<li><a href="#">Save</a></li>
++		<li><a href="#">Delete</a></li>
++	</ul>
++</div>
++
++<div class="demo-description">
++<p>An example of a split button built with two buttons: A plain button with just text, one with only a primary icon
++and no text. Both are grouped together in a set.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/icons.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/icons.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/icons.html	(revision 15487)
+@@ -0,0 +1,49 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Button - Icons</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "button:first" ).button({
++			icons: {
++				primary: "ui-icon-locked"
++			},
++			text: false
++		}).next().button({
++			icons: {
++				primary: "ui-icon-locked"
++			}
++		}).next().button({
++			icons: {
++				primary: "ui-icon-gear",
++				secondary: "ui-icon-triangle-1-s"
++			}
++		}).next().button({
++			icons: {
++				primary: "ui-icon-gear",
++				secondary: "ui-icon-triangle-1-s"
++			},
++			text: false
++		});
++	});
++	</script>
++</head>
++<body>
++
++<button>Button with icon only</button>
++<button>Button with icon on the left</button>
++<button>Button with two icons</button>
++<button>Button with two icons and no text</button>
++
++<div class="demo-description">
++<p>Some buttons with various combinations of text and icons.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/portlets.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/portlets.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/portlets.html	(revision 15487)
+@@ -0,0 +1,91 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Portlets</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	body { min-width: 520px; }
++	.column { width: 170px; float: left; padding-bottom: 100px; }
++	.portlet { margin: 0 1em 1em 0; }
++	.portlet-header { margin: 0.3em; padding-bottom: 4px; padding-left: 0.2em; }
++	.portlet-header .ui-icon { float: right; }
++	.portlet-content { padding: 0.4em; }
++	.ui-sortable-placeholder { border: 1px dotted black; visibility: visible !important; height: 50px !important; }
++	.ui-sortable-placeholder * { visibility: hidden; }
++	</style>
++	<script>
++	$(function() {
++		$( ".column" ).sortable({
++			connectWith: ".column"
++		});
++
++		$( ".portlet" ).addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" )
++			.find( ".portlet-header" )
++				.addClass( "ui-widget-header ui-corner-all" )
++				.prepend( "<span class='ui-icon ui-icon-minusthick'></span>")
++				.end()
++			.find( ".portlet-content" );
++
++		$( ".portlet-header .ui-icon" ).click(function() {
++			$( this ).toggleClass( "ui-icon-minusthick" ).toggleClass( "ui-icon-plusthick" );
++			$( this ).parents( ".portlet:first" ).find( ".portlet-content" ).toggle();
++		});
++
++		$( ".column" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<div class="column">
++
++	<div class="portlet">
++		<div class="portlet-header">Feeds</div>
++		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
++	</div>
++
++	<div class="portlet">
++		<div class="portlet-header">News</div>
++		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
++	</div>
++
++</div>
++
++<div class="column">
++
++	<div class="portlet">
++		<div class="portlet-header">Shopping</div>
++		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
++	</div>
++
++</div>
++
++<div class="column">
++
++	<div class="portlet">
++		<div class="portlet-header">Links</div>
++		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
++	</div>
++
++	<div class="portlet">
++		<div class="portlet-header">Images</div>
++		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
++	</div>
++
++</div>
++
++<div class="demo-description">
++<p>
++	Enable portlets (styled divs) as sortables and use the <code>connectWith</code>
++	option to allow sorting between columns.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/items.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/items.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/items.html	(revision 15487)
+@@ -0,0 +1,64 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Include / exclude items</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0; zoom: 1; }
++	#sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 3px; width: 90%; }
++	</style>
++	<script>
++	$(function() {
++		$( "#sortable1" ).sortable({
++			items: "li:not(.ui-state-disabled)"
++		});
++
++		$( "#sortable2" ).sortable({
++			cancel: ".ui-state-disabled"
++		});
++
++		$( "#sortable1 li, #sortable2 li" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<h3 class="docs">Specify which items are sortable:</h3>
++
++<ul id="sortable1">
++	<li class="ui-state-default">Item 1</li>
++	<li class="ui-state-default ui-state-disabled">(I'm not sortable or a drop target)</li>
++	<li class="ui-state-default ui-state-disabled">(I'm not sortable or a drop target)</li>
++	<li class="ui-state-default">Item 4</li>
++</ul>
++
++<h3 class="docs">Cancel sorting (but keep as drop targets):</h3>
++
++<ul id="sortable2">
++	<li class="ui-state-default">Item 1</li>
++	<li class="ui-state-default ui-state-disabled">(I'm not sortable)</li>
++	<li class="ui-state-default ui-state-disabled">(I'm not sortable)</li>
++	<li class="ui-state-default">Item 4</li>
++</ul>
++
++<div class="demo-description">
++<p>
++	Specify which items are eligible to sort by passing a jQuery selector into
++	the <code>items</code> option. Items excluded from this option are not
++	sortable, nor are they valid targets for sortable items.
++</p>
++<p>
++	To only prevent sorting on certain items, pass a jQuery selector into the
++	<code>cancel</code> option. Cancelled items remain valid sort targets for
++	others.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/placeholder.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/placeholder.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/placeholder.html	(revision 15487)
+@@ -0,0 +1,50 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Drop placeholder</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
++	#sortable li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; height: 1.5em; }
++	html>body #sortable li { height: 1.5em; line-height: 1.2em; }
++	.ui-state-highlight { height: 1.5em; line-height: 1.2em; }
++	</style>
++	<script>
++	$(function() {
++		$( "#sortable" ).sortable({
++			placeholder: "ui-state-highlight"
++		});
++		$( "#sortable" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<ul id="sortable">
++	<li class="ui-state-default">Item 1</li>
++	<li class="ui-state-default">Item 2</li>
++	<li class="ui-state-default">Item 3</li>
++	<li class="ui-state-default">Item 4</li>
++	<li class="ui-state-default">Item 5</li>
++	<li class="ui-state-default">Item 6</li>
++	<li class="ui-state-default">Item 7</li>
++</ul>
++
++<div class="demo-description">
++<p>
++	When dragging a sortable item to a new location, other items will make room
++	for the that item by shifting to allow white space between them. Pass a
++	class into the <code>placeholder</code> option to style that space to
++	be visible.  Use the boolean <code>forcePlaceholderSize</code> option
++	to set dimensions on the placeholder.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/default.html	(revision 15487)
+@@ -0,0 +1,45 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
++	#sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
++	#sortable li span { position: absolute; margin-left: -1.3em; }
++	</style>
++	<script>
++	$(function() {
++		$( "#sortable" ).sortable();
++		$( "#sortable" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<ul id="sortable">
++	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
++	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
++	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
++	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
++	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
++	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
++	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
++</ul>
++
++<div class="demo-description">
++<p>
++	Enable a group of DOM elements to be sortable. Click on and drag an
++	element to a new spot within the list, and the other items will adjust to
++	fit. By default, sortable items share <code>draggable</code> properties.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists.html	(revision 15487)
+@@ -0,0 +1,52 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Connect lists</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0 0 2.5em; float: left; margin-right: 10px; }
++	#sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 120px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#sortable1, #sortable2" ).sortable({
++			connectWith: ".connectedSortable"
++		}).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<ul id="sortable1" class="connectedSortable">
++	<li class="ui-state-default">Item 1</li>
++	<li class="ui-state-default">Item 2</li>
++	<li class="ui-state-default">Item 3</li>
++	<li class="ui-state-default">Item 4</li>
++	<li class="ui-state-default">Item 5</li>
++</ul>
++
++<ul id="sortable2" class="connectedSortable">
++	<li class="ui-state-highlight">Item 1</li>
++	<li class="ui-state-highlight">Item 2</li>
++	<li class="ui-state-highlight">Item 3</li>
++	<li class="ui-state-highlight">Item 4</li>
++	<li class="ui-state-highlight">Item 5</li>
++</ul>
++
++<div class="demo-description">
++<p>
++	Sort items from one list into another and vice versa, by passing a selector into
++	the <code>connectWith</code> option. The simplest way to do this is to
++	group all related lists with a CSS class, and then pass that class into the
++	sortable function (i.e., <code>connectWith: '.myclass'</code>).
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/index.html	(revision 15487)
+@@ -0,0 +1,22 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="placeholder.html">Drop placeholder</a></li>
++	<li><a href="connect-lists.html">Connect lists</a></li>
++	<li><a href="connect-lists-through-tabs.html">Connect lists through tabs</a></li>
++	<li><a href="empty-lists.html">Handle empty lists</a></li>
++	<li><a href="items.html">Include / exclude items</a></li>
++	<li><a href="delay-start.html">Delay start</a></li>
++	<li><a href="display-grid.html">Display as grid</a></li>
++	<li><a href="portlets.html">Portlets</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/display-grid.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/display-grid.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/display-grid.html	(revision 15487)
+@@ -0,0 +1,48 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Display as grid</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#sortable { list-style-type: none; margin: 0; padding: 0; width: 450px; }
++	#sortable li { margin: 3px 3px 3px 0; padding: 1px; float: left; width: 100px; height: 90px; font-size: 4em; text-align: center; }
++	</style>
++	<script>
++	$(function() {
++		$( "#sortable" ).sortable();
++		$( "#sortable" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<ul id="sortable">
++	<li class="ui-state-default">1</li>
++	<li class="ui-state-default">2</li>
++	<li class="ui-state-default">3</li>
++	<li class="ui-state-default">4</li>
++	<li class="ui-state-default">5</li>
++	<li class="ui-state-default">6</li>
++	<li class="ui-state-default">7</li>
++	<li class="ui-state-default">8</li>
++	<li class="ui-state-default">9</li>
++	<li class="ui-state-default">10</li>
++	<li class="ui-state-default">11</li>
++	<li class="ui-state-default">12</li>
++</ul>
++
++<div class="demo-description">
++<p>
++	To arrange sortable items as a grid, give them identical dimensions and
++	float them using CSS.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/delay-start.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/delay-start.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/delay-start.html	(revision 15487)
+@@ -0,0 +1,61 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Delay start</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0; margin-bottom: 15px;zoom: 1; }
++	#sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 95%; }
++	</style>
++	<script>
++	$(function() {
++		$( "#sortable1" ).sortable({
++			delay: 300
++		});
++
++		$( "#sortable2" ).sortable({
++			distance: 15
++		});
++
++		$( "li" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<h3 class="docs">Time delay of 300ms:</h3>
++
++<ul id="sortable1">
++	<li class="ui-state-default">Item 1</li>
++	<li class="ui-state-default">Item 2</li>
++	<li class="ui-state-default">Item 3</li>
++	<li class="ui-state-default">Item 4</li>
++</ul>
++
++<h3 class="docs">Distance delay of 15px:</h3>
++
++<ul id="sortable2">
++	<li class="ui-state-default">Item 1</li>
++	<li class="ui-state-default">Item 2</li>
++	<li class="ui-state-default">Item 3</li>
++	<li class="ui-state-default">Item 4</li>
++</ul>
++
++<div class="demo-description">
++<p>
++	Prevent accidental sorting either by delay (time) or distance. Set a number of
++	milliseconds the element needs to be dragged before sorting starts
++	with the <code>delay</code> option. Set a distance in pixels the element
++	needs to be dragged before sorting starts with the <code>distance</code>
++	option.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists-through-tabs.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists-through-tabs.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists-through-tabs.html	(revision 15487)
+@@ -0,0 +1,72 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Connect lists with Tabs</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<script src="../../ui/jquery.ui.droppable.js"></script>
++	<script src="../../ui/jquery.ui.tabs.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 120px; }
++	</style>
++	<script>
++	$(function() {
++		$( "#sortable1, #sortable2" ).sortable().disableSelection();
++
++		var $tabs = $( "#tabs" ).tabs();
++
++		var $tab_items = $( "ul:first li", $tabs ).droppable({
++			accept: ".connectedSortable li",
++			hoverClass: "ui-state-hover",
++			drop: function( event, ui ) {
++				var $item = $( this );
++				var $list = $( $item.find( "a" ).attr( "href" ) )
++					.find( ".connectedSortable" );
++
++				ui.draggable.hide( "slow", function() {
++					$tabs.tabs( "option", "active", $tab_items.index( $item ) );
++					$( this ).appendTo( $list ).show( "slow" );
++				});
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">Nunc tincidunt</a></li>
++		<li><a href="#tabs-2">Proin dolor</a></li>
++	</ul>
++	<div id="tabs-1">
++		<ul id="sortable1" class="connectedSortable ui-helper-reset">
++			<li class="ui-state-default">Item 1</li>
++			<li class="ui-state-default">Item 2</li>
++			<li class="ui-state-default">Item 3</li>
++			<li class="ui-state-default">Item 4</li>
++			<li class="ui-state-default">Item 5</li>
++		</ul>
++	</div>
++	<div id="tabs-2">
++		<ul id="sortable2" class="connectedSortable ui-helper-reset">
++			<li class="ui-state-highlight">Item 1</li>
++			<li class="ui-state-highlight">Item 2</li>
++			<li class="ui-state-highlight">Item 3</li>
++			<li class="ui-state-highlight">Item 4</li>
++			<li class="ui-state-highlight">Item 5</li>
++		</ul>
++	</div>
++</div>
++
++<div class="demo-description">
++<p>Sort items from one list into another and vice versa, by dropping the list item on the appropriate tab above.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/empty-lists.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/empty-lists.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/empty-lists.html	(revision 15487)
+@@ -0,0 +1,63 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Sortable - Handle empty lists</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.mouse.js"></script>
++	<script src="../../ui/jquery.ui.sortable.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<style>
++	#sortable1, #sortable2, #sortable3 { list-style-type: none; margin: 0; padding: 0; float: left; margin-right: 10px; background: #eee; padding: 5px; width: 143px;}
++	#sortable1 li, #sortable2 li, #sortable3 li { margin: 5px; padding: 5px; font-size: 1.2em; width: 120px; }
++	</style>
++	<script>
++	$(function() {
++		$( "ul.droptrue" ).sortable({
++			connectWith: "ul"
++		});
++
++		$( "ul.dropfalse" ).sortable({
++			connectWith: "ul",
++			dropOnEmpty: false
++		});
++
++		$( "#sortable1, #sortable2, #sortable3" ).disableSelection();
++	});
++	</script>
++</head>
++<body>
++
++<ul id="sortable1" class='droptrue'>
++	<li class="ui-state-default">Can be dropped..</li>
++	<li class="ui-state-default">..on an empty list</li>
++	<li class="ui-state-default">Item 3</li>
++	<li class="ui-state-default">Item 4</li>
++	<li class="ui-state-default">Item 5</li>
++</ul>
++
++<ul id="sortable2" class='dropfalse'>
++	<li class="ui-state-highlight">Cannot be dropped..</li>
++	<li class="ui-state-highlight">..on an empty list</li>
++	<li class="ui-state-highlight">Item 3</li>
++	<li class="ui-state-highlight">Item 4</li>
++	<li class="ui-state-highlight">Item 5</li>
++</ul>
++
++<ul id="sortable3" class='droptrue'>
++</ul>
++
++<br style="clear:both">
++
++<div class="demo-description">
++<p>
++	Prevent all items in a list from being dropped into a separate, empty list
++	using the <code>dropOnEmpty</code> option set to <code>false</code>.  By default,
++	sortable items can be dropped on empty lists.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/decimal.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/decimal.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/decimal.html	(revision 15487)
+@@ -0,0 +1,56 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Spinner - Decimal</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../external/jquery.mousewheel.js"></script>
++	<script src="../../external/globalize.js"></script>
++	<script src="../../external/globalize.culture.de-DE.js"></script>
++	<script src="../../external/globalize.culture.ja-JP.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.spinner.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#spinner" ).spinner({
++			step: 0.01,
++			numberFormat: "n"
++		});
++
++		$( "#culture" ).change(function() {
++			var current = $( "#spinner" ).spinner( "value" );
++			Globalize.culture( $(this).val() );
++			$( "#spinner" ).spinner( "value", current );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="spinner">Decimal spinner:</label>
++	<input id="spinner" name="spinner" value="5.06">
++</p>
++<p>
++	<label for="culture">Select a culture to use for formatting:</label>
++	<select id="culture">
++		<option value="en-EN" selected="selected">English</option>
++		<option value="de-DE">German</option>
++		<option value="ja-JP">Japanese</option>
++	</select>
++</p>
++
++<div class="demo-description">
++<p>
++	Example of a decimal spinner. Step is set to 0.01.
++	<br>The code handling the culture change reads the current spinner value,
++	then changes the culture, then sets the value again, resulting in an updated
++	formatting, based on the new culture.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/time.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/time.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/time.html	(revision 15487)
+@@ -0,0 +1,74 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Spinner - Time</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../external/jquery.mousewheel.js"></script>
++	<script src="../../external/globalize.js"></script>
++	<script src="../../external/globalize.culture.de-DE.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.spinner.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$.widget( "ui.timespinner", $.ui.spinner, {
++		options: {
++			// seconds
++			step: 60 * 1000,
++			// hours
++			page: 60
++		},
++
++		_parse: function( value ) {
++			if ( typeof value === "string" ) {
++				// already a timestamp
++				if ( Number( value ) == value ) {
++					return Number( value );
++				}
++				return +Globalize.parseDate( value );
++			}
++			return value;
++		},
++
++		_format: function( value ) {
++			return Globalize.format( new Date(value), "t" );
++		}
++	});
++
++	$(function() {
++		$( "#spinner" ).timespinner();
++
++		$( "#culture" ).change(function() {
++			var current = $( "#spinner" ).timespinner( "value" );
++			Globalize.culture( $(this).val() );
++			$( "#spinner" ).timespinner( "value", current );
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="spinner">Time spinner:</label>
++	<input id="spinner" name="spinner" value="08:30 PM">
++</p>
++<p>
++	<label for="culture">Select a culture to use for formatting:</label>
++	<select id="culture">
++		<option value="en-EN" selected="selected">English</option>
++		<option value="de-DE">German</option>
++	</select>
++</p>
++
++<div class="demo-description">
++<p>
++	A custom widget extending spinner. Use the Globalization plugin to parse and output
++	a timestamp, with custom step and page options. Cursor up/down spins minutes, page up/down
++	spins hours.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/latlong.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/latlong.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/latlong.html	(revision 15487)
+@@ -0,0 +1,57 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Spinner - Map</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../external/jquery.mousewheel.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.spinner.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		function latlong() {
++			return new google.maps.LatLng( $("#lat").val(), $("#lng").val() );
++		}
++		function position() {
++			map.setCenter( latlong() );
++		}
++		$( "#lat, #lng" ).spinner({
++			step: .001,
++			change: position,
++			stop: position
++		});
++
++		var map = new google.maps.Map( $("#map")[0], {
++			zoom: 8,
++			center: latlong(),
++			mapTypeId: google.maps.MapTypeId.ROADMAP
++		});
++	});
++	</script>
++	<style>
++	#map {
++		width:500px;
++		height:500px;
++	}
++	</style>
++</head>
++<body>
++
++<label for="lat">Latitude</label>
++<input id="lat" name="lat" value="44.797">
++<br>
++<label for="lng">Longitude</label>
++<input id="lng" name="lng" value="-93.278">
++
++<div id="map"></div>
++
++<div class="demo-description">
++<p>Google Maps integration, using spinners to change latidude and longitude.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/overflow.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/overflow.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/overflow.html	(revision 15487)
+@@ -0,0 +1,44 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Spinner - Overflow</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../external/jquery.mousewheel.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.spinner.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#spinner" ).spinner({
++			spin: function( event, ui ) {
++				if ( ui.value > 10 ) {
++					$( this ).spinner( "value", -10 );
++					return false;
++				} else if ( ui.value < -10 ) {
++					$( this ).spinner( "value", 10 );
++					return false;
++				}
++			}
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="spinner">Select a value:</label>
++	<input id="spinner" name="value" />
++</p>
++
++<div class="demo-description">
++<p>
++Overflowing spinner restricted to a range of -10 to 10.
++For anything above 10, it'll overflow to -10, and the other way round.
++</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/default.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/default.html	(revision 15487)
+@@ -0,0 +1,64 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Spinner - Default functionality</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../external/jquery.mousewheel.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.spinner.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		var spinner = $( "#spinner" ).spinner();
++
++		$( "#disable" ).click(function() {
++			if ( spinner.spinner( "option", "disabled" ) ) {
++				spinner.spinner( "enable" );
++			} else {
++				spinner.spinner( "disable" );
++			}
++		});
++		$( "#destroy" ).click(function() {
++			if ( spinner.data( "ui-spinner" ) ) {
++				spinner.spinner( "destroy" );
++			} else {
++				spinner.spinner();
++			}
++		});
++		$( "#getvalue" ).click(function() {
++			alert( spinner.spinner( "value" ) );
++		});
++		$( "#setvalue" ).click(function() {
++			spinner.spinner( "value", 5 );
++		});
++
++		$( "button" ).button();
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="spinner">Select a value:</label>
++	<input id="spinner" name="value">
++</p>
++
++<p>
++	<button id="disable">Toggle disable/enable</button>
++	<button id="destroy">Toggle widget</button>
++</p>
++
++<p>
++	<button id="getvalue">Get value</button>
++	<button id="setvalue">Set value to 5</button>
++</p>
++
++<div class="demo-description">
++<p>Default spinner.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/index.html	(revision 15487)
+@@ -0,0 +1,19 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Spinner Demos</title>
++</head>
++<body>
++
++<ul>
++	<li><a href="default.html">Default functionality</a></li>
++	<li><a href="decimal.html">Decimal</a></li>
++	<li><a href="currency.html">Currency</a></li>
++	<li><a href="latlong.html">Map</a></li>
++	<li><a href="time.html">Time</a></li>
++	<li><a href="overflow.html">Overflow</a></li>
++</ul>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/currency.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/currency.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/currency.html	(revision 15487)
+@@ -0,0 +1,52 @@
++<!doctype html>
++<html lang="en">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Spinner - Currency</title>
++	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
++	<script src="../../jquery-1.9.1.js"></script>
++	<script src="../../external/jquery.mousewheel.js"></script>
++	<script src="../../external/globalize.js"></script>
++	<script src="../../external/globalize.culture.de-DE.js"></script>
++	<script src="../../external/globalize.culture.ja-JP.js"></script>
++	<script src="../../ui/jquery.ui.core.js"></script>
++	<script src="../../ui/jquery.ui.widget.js"></script>
++	<script src="../../ui/jquery.ui.button.js"></script>
++	<script src="../../ui/jquery.ui.spinner.js"></script>
++	<link rel="stylesheet" href="../demos.css">
++	<script>
++	$(function() {
++		$( "#currency" ).change(function() {
++			$( "#spinner" ).spinner( "option", "culture", $( this ).val() );
++		});
++
++		$( "#spinner" ).spinner({
++			min: 5,
++			max: 2500,
++			step: 25,
++			start: 1000,
++			numberFormat: "C"
++		});
++	});
++	</script>
++</head>
++<body>
++
++<p>
++	<label for="currency">Currency to donate</label>
++	<select id="currency" name="currency">
++		<option value="en-US">US $</option>
++		<option value="de-DE">EUR €</option>
++		<option value="ja-JP">YEN ¥</option>
++	</select>
++</p>
++<p>
++	<label for="spinner">Amount to donate:</label>
++	<input id="spinner" name="spinner" value="5">
++</p>
++
++<div class="demo-description">
++<p>Example of a donation form, with currency selection and amount spinner.</p>
++</div>
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-bounce.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-bounce.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-bounce.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-bounce",
++	"title": "jQuery UI Bounce Effect",
++	"description": "Bounces an element horizontally or vertically n times.",
++	"keywords": [
++		"ui",
++		"bounce",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/bounce-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-pulsate.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-pulsate.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-pulsate.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-pulsate",
++	"title": "jQuery UI Pulsate Effect",
++	"description": "Pulsates an element n times by changing the opacity to zero and back.",
++	"keywords": [
++		"ui",
++		"pulsate",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/pulsate-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.button.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.button.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.button.jquery.json	(revision 15487)
+@@ -0,0 +1,66 @@
++{
++	"name": "ui.button",
++	"title": "jQuery UI Button",
++	"description": "Enhances a form with themable buttons.",
++	"keywords": [
++		"ui",
++		"button",
++		"form",
++		"radio",
++		"checkbox"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/button/",
++	"demo": "http://jqueryui.com/button/",
++	"docs": "http://api.jqueryui.com/button/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-transfer.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-transfer.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-transfer.jquery.json	(revision 15487)
+@@ -0,0 +1,63 @@
++{
++	"name": "ui.effect-transfer",
++	"title": "jQuery UI Transfer Effect",
++	"description": "Displays a transfer effect from one element to another.",
++	"keywords": [
++		"ui",
++		"transfer",
++		"effect"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/transfer-effect/",
++	"demo": "http://jqueryui.com/transfer-effect/",
++	"docs": "http://api.jqueryui.com/transfer-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.de-DE.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.de-DE.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.de-DE.js	(revision 15487)
+@@ -0,0 +1,81 @@
++/*
++ * Globalize Culture de-DE
++ *
++ * http://github.com/jquery/globalize
++ *
++ * Copyright Software Freedom Conservancy, Inc.
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * This file was generated by the Globalize Culture Generator
++ * Translation: bugs found in this file need to be fixed in the generator
++ */
++
++(function( window, undefined ) {
++
++var Globalize;
++
++if ( typeof require !== "undefined"
++	&& typeof exports !== "undefined"
++	&& typeof module !== "undefined" ) {
++	// Assume CommonJS
++	Globalize = require( "globalize" );
++} else {
++	// Global variable
++	Globalize = window.Globalize;
++}
++
++Globalize.addCultureInfo( "de-DE", "default", {
++	name: "de-DE",
++	englishName: "German (Germany)",
++	nativeName: "Deutsch (Deutschland)",
++	language: "de",
++	numberFormat: {
++		",": ".",
++		".": ",",
++		NaN: "n. def.",
++		negativeInfinity: "-unendlich",
++		positiveInfinity: "+unendlich",
++		percent: {
++			pattern: ["-n%","n%"],
++			",": ".",
++			".": ","
++		},
++		currency: {
++			pattern: ["-n $","n $"],
++			",": ".",
++			".": ",",
++			symbol: "€"
++		}
++	},
++	calendars: {
++		standard: {
++			"/": ".",
++			firstDay: 1,
++			days: {
++				names: ["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],
++				namesAbbr: ["So","Mo","Di","Mi","Do","Fr","Sa"],
++				namesShort: ["So","Mo","Di","Mi","Do","Fr","Sa"]
++			},
++			months: {
++				names: ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember",""],
++				namesAbbr: ["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez",""]
++			},
++			AM: null,
++			PM: null,
++			eras: [{"name":"n. Chr.","start":null,"offset":0}],
++			patterns: {
++				d: "dd.MM.yyyy",
++				D: "dddd, d. MMMM yyyy",
++				t: "HH:mm",
++				T: "HH:mm:ss",
++				f: "dddd, d. MMMM yyyy HH:mm",
++				F: "dddd, d. MMMM yyyy HH:mm:ss",
++				M: "dd MMMM",
++				Y: "MMMM yyyy"
++			}
++		}
++	}
++});
++
++}( this ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/globalize.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/globalize.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/globalize.js	(revision 15487)
+@@ -0,0 +1,1573 @@
++/*!
++ * Globalize
++ *
++ * http://github.com/jquery/globalize
++ *
++ * Copyright Software Freedom Conservancy, Inc.
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ */
++
++(function( window, undefined ) {
++
++var Globalize,
++	// private variables
++	regexHex,
++	regexInfinity,
++	regexParseFloat,
++	regexTrim,
++	// private JavaScript utility functions
++	arrayIndexOf,
++	endsWith,
++	extend,
++	isArray,
++	isFunction,
++	isObject,
++	startsWith,
++	trim,
++	truncate,
++	zeroPad,
++	// private Globalization utility functions
++	appendPreOrPostMatch,
++	expandFormat,
++	formatDate,
++	formatNumber,
++	getTokenRegExp,
++	getEra,
++	getEraYear,
++	parseExact,
++	parseNegativePattern;
++
++// Global variable (Globalize) or CommonJS module (globalize)
++Globalize = function( cultureSelector ) {
++	return new Globalize.prototype.init( cultureSelector );
++};
++
++if ( typeof require !== "undefined"
++	&& typeof exports !== "undefined"
++	&& typeof module !== "undefined" ) {
++	// Assume CommonJS
++	module.exports = Globalize;
++} else {
++	// Export as global variable
++	window.Globalize = Globalize;
++}
++
++Globalize.cultures = {};
++
++Globalize.prototype = {
++	constructor: Globalize,
++	init: function( cultureSelector ) {
++		this.cultures = Globalize.cultures;
++		this.cultureSelector = cultureSelector;
++
++		return this;
++	}
++};
++Globalize.prototype.init.prototype = Globalize.prototype;
++
++// 1.	 When defining a culture, all fields are required except the ones stated as optional.
++// 2.	 Each culture should have a ".calendars" object with at least one calendar named "standard"
++//		 which serves as the default calendar in use by that culture.
++// 3.	 Each culture should have a ".calendar" object which is the current calendar being used,
++//		 it may be dynamically changed at any time to one of the calendars in ".calendars".
++Globalize.cultures[ "default" ] = {
++	// A unique name for the culture in the form <language code>-<country/region code>
++	name: "en",
++	// the name of the culture in the english language
++	englishName: "English",
++	// the name of the culture in its own language
++	nativeName: "English",
++	// whether the culture uses right-to-left text
++	isRTL: false,
++	// "language" is used for so-called "specific" cultures.
++	// For example, the culture "es-CL" means "Spanish, in Chili".
++	// It represents the Spanish-speaking culture as it is in Chili,
++	// which might have different formatting rules or even translations
++	// than Spanish in Spain. A "neutral" culture is one that is not
++	// specific to a region. For example, the culture "es" is the generic
++	// Spanish culture, which may be a more generalized version of the language
++	// that may or may not be what a specific culture expects.
++	// For a specific culture like "es-CL", the "language" field refers to the
++	// neutral, generic culture information for the language it is using.
++	// This is not always a simple matter of the string before the dash.
++	// For example, the "zh-Hans" culture is netural (Simplified Chinese).
++	// And the "zh-SG" culture is Simplified Chinese in Singapore, whose lanugage
++	// field is "zh-CHS", not "zh".
++	// This field should be used to navigate from a specific culture to it's
++	// more general, neutral culture. If a culture is already as general as it
++	// can get, the language may refer to itself.
++	language: "en",
++	// numberFormat defines general number formatting rules, like the digits in
++	// each grouping, the group separator, and how negative numbers are displayed.
++	numberFormat: {
++		// [negativePattern]
++		// Note, numberFormat.pattern has no "positivePattern" unlike percent and currency,
++		// but is still defined as an array for consistency with them.
++		//   negativePattern: one of "(n)|-n|- n|n-|n -"
++		pattern: [ "-n" ],
++		// number of decimal places normally shown
++		decimals: 2,
++		// string that separates number groups, as in 1,000,000
++		",": ",",
++		// string that separates a number from the fractional portion, as in 1.99
++		".": ".",
++		// array of numbers indicating the size of each number group.
++		// TODO: more detailed description and example
++		groupSizes: [ 3 ],
++		// symbol used for positive numbers
++		"+": "+",
++		// symbol used for negative numbers
++		"-": "-",
++		// symbol used for NaN (Not-A-Number)
++		NaN: "NaN",
++		// symbol used for Negative Infinity
++		negativeInfinity: "-Infinity",
++		// symbol used for Positive Infinity
++		positiveInfinity: "Infinity",
++		percent: {
++			// [negativePattern, positivePattern]
++			//   negativePattern: one of "-n %|-n%|-%n|%-n|%n-|n-%|n%-|-% n|n %-|% n-|% -n|n- %"
++			//   positivePattern: one of "n %|n%|%n|% n"
++			pattern: [ "-n %", "n %" ],
++			// number of decimal places normally shown
++			decimals: 2,
++			// array of numbers indicating the size of each number group.
++			// TODO: more detailed description and example
++			groupSizes: [ 3 ],
++			// string that separates number groups, as in 1,000,000
++			",": ",",
++			// string that separates a number from the fractional portion, as in 1.99
++			".": ".",
++			// symbol used to represent a percentage
++			symbol: "%"
++		},
++		currency: {
++			// [negativePattern, positivePattern]
++			//   negativePattern: one of "($n)|-$n|$-n|$n-|(n$)|-n$|n-$|n$-|-n $|-$ n|n $-|$ n-|$ -n|n- $|($ n)|(n $)"
++			//   positivePattern: one of "$n|n$|$ n|n $"
++			pattern: [ "($n)", "$n" ],
++			// number of decimal places normally shown
++			decimals: 2,
++			// array of numbers indicating the size of each number group.
++			// TODO: more detailed description and example
++			groupSizes: [ 3 ],
++			// string that separates number groups, as in 1,000,000
++			",": ",",
++			// string that separates a number from the fractional portion, as in 1.99
++			".": ".",
++			// symbol used to represent currency
++			symbol: "$"
++		}
++	},
++	// calendars defines all the possible calendars used by this culture.
++	// There should be at least one defined with name "standard", and is the default
++	// calendar used by the culture.
++	// A calendar contains information about how dates are formatted, information about
++	// the calendar's eras, a standard set of the date formats,
++	// translations for day and month names, and if the calendar is not based on the Gregorian
++	// calendar, conversion functions to and from the Gregorian calendar.
++	calendars: {
++		standard: {
++			// name that identifies the type of calendar this is
++			name: "Gregorian_USEnglish",
++			// separator of parts of a date (e.g. "/" in 11/05/1955)
++			"/": "/",
++			// separator of parts of a time (e.g. ":" in 05:44 PM)
++			":": ":",
++			// the first day of the week (0 = Sunday, 1 = Monday, etc)
++			firstDay: 0,
++			days: {
++				// full day names
++				names: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
++				// abbreviated day names
++				namesAbbr: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
++				// shortest day names
++				namesShort: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ]
++			},
++			months: {
++				// full month names (13 months for lunar calendards -- 13th month should be "" if not lunar)
++				names: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" ],
++				// abbreviated month names
++				namesAbbr: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" ]
++			},
++			// AM and PM designators in one of these forms:
++			// The usual view, and the upper and lower case versions
++			//   [ standard, lowercase, uppercase ]
++			// The culture does not use AM or PM (likely all standard date formats use 24 hour time)
++			//   null
++			AM: [ "AM", "am", "AM" ],
++			PM: [ "PM", "pm", "PM" ],
++			eras: [
++				// eras in reverse chronological order.
++				// name: the name of the era in this culture (e.g. A.D., C.E.)
++				// start: when the era starts in ticks (gregorian, gmt), null if it is the earliest supported era.
++				// offset: offset in years from gregorian calendar
++				{
++					"name": "A.D.",
++					"start": null,
++					"offset": 0
++				}
++			],
++			// when a two digit year is given, it will never be parsed as a four digit
++			// year greater than this year (in the appropriate era for the culture)
++			// Set it as a full year (e.g. 2029) or use an offset format starting from
++			// the current year: "+19" would correspond to 2029 if the current year 2010.
++			twoDigitYearMax: 2029,
++			// set of predefined date and time patterns used by the culture
++			// these represent the format someone in this culture would expect
++			// to see given the portions of the date that are shown.
++			patterns: {
++				// short date pattern
++				d: "M/d/yyyy",
++				// long date pattern
++				D: "dddd, MMMM dd, yyyy",
++				// short time pattern
++				t: "h:mm tt",
++				// long time pattern
++				T: "h:mm:ss tt",
++				// long date, short time pattern
++				f: "dddd, MMMM dd, yyyy h:mm tt",
++				// long date, long time pattern
++				F: "dddd, MMMM dd, yyyy h:mm:ss tt",
++				// month/day pattern
++				M: "MMMM dd",
++				// month/year pattern
++				Y: "yyyy MMMM",
++				// S is a sortable format that does not vary by culture
++				S: "yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss"
++			}
++			// optional fields for each calendar:
++			/*
++			monthsGenitive:
++				Same as months but used when the day preceeds the month.
++				Omit if the culture has no genitive distinction in month names.
++				For an explaination of genitive months, see http://blogs.msdn.com/michkap/archive/2004/12/25/332259.aspx
++			convert:
++				Allows for the support of non-gregorian based calendars. This convert object is used to
++				to convert a date to and from a gregorian calendar date to handle parsing and formatting.
++				The two functions:
++					fromGregorian( date )
++						Given the date as a parameter, return an array with parts [ year, month, day ]
++						corresponding to the non-gregorian based year, month, and day for the calendar.
++					toGregorian( year, month, day )
++						Given the non-gregorian year, month, and day, return a new Date() object
++						set to the corresponding date in the gregorian calendar.
++			*/
++		}
++	},
++	// For localized strings
++	messages: {}
++};
++
++Globalize.cultures[ "default" ].calendar = Globalize.cultures[ "default" ].calendars.standard;
++
++Globalize.cultures[ "en" ] = Globalize.cultures[ "default" ];
++
++Globalize.cultureSelector = "en";
++
++//
++// private variables
++//
++
++regexHex = /^0x[a-f0-9]+$/i;
++regexInfinity = /^[+-]?infinity$/i;
++regexParseFloat = /^[+-]?\d*\.?\d*(e[+-]?\d+)?$/;
++regexTrim = /^\s+|\s+$/g;
++
++//
++// private JavaScript utility functions
++//
++
++arrayIndexOf = function( array, item ) {
++	if ( array.indexOf ) {
++		return array.indexOf( item );
++	}
++	for ( var i = 0, length = array.length; i < length; i++ ) {
++		if ( array[i] === item ) {
++			return i;
++		}
++	}
++	return -1;
++};
++
++endsWith = function( value, pattern ) {
++	return value.substr( value.length - pattern.length ) === pattern;
++};
++
++extend = function( deep ) {
++	var options, name, src, copy, copyIsArray, clone,
++		target = arguments[0] || {},
++		i = 1,
++		length = arguments.length,
++		deep = false;
++
++	// Handle a deep copy situation
++	if ( typeof target === "boolean" ) {
++		deep = target;
++		target = arguments[1] || {};
++		// skip the boolean and the target
++		i = 2;
++	}
++
++	// Handle case when target is a string or something (possible in deep copy)
++	if ( typeof target !== "object" && !isFunction(target) ) {
++		target = {};
++	}
++
++	for ( ; i < length; i++ ) {
++		// Only deal with non-null/undefined values
++		if ( (options = arguments[ i ]) != null ) {
++			// Extend the base object
++			for ( name in options ) {
++				src = target[ name ];
++				copy = options[ name ];
++
++				// Prevent never-ending loop
++				if ( target === copy ) {
++					continue;
++				}
++
++				// Recurse if we're merging plain objects or arrays
++				if ( deep && copy && ( isObject(copy) || (copyIsArray = isArray(copy)) ) ) {
++					if ( copyIsArray ) {
++						copyIsArray = false;
++						clone = src && isArray(src) ? src : [];
++
++					} else {
++						clone = src && isObject(src) ? src : {};
++					}
++
++					// Never move original objects, clone them
++					target[ name ] = extend( deep, clone, copy );
++
++				// Don't bring in undefined values
++				} else if ( copy !== undefined ) {
++					target[ name ] = copy;
++				}
++			}
++		}
++	}
++
++	// Return the modified object
++	return target;
++};
++
++isArray = Array.isArray || function( obj ) {
++	return Object.prototype.toString.call( obj ) === "[object Array]";
++};
++
++isFunction = function( obj ) {
++	return Object.prototype.toString.call( obj ) === "[object Function]"
++}
++
++isObject = function( obj ) {
++	return Object.prototype.toString.call( obj ) === "[object Object]";
++};
++
++startsWith = function( value, pattern ) {
++	return value.indexOf( pattern ) === 0;
++};
++
++trim = function( value ) {
++	return ( value + "" ).replace( regexTrim, "" );
++};
++
++truncate = function( value ) {
++	return value | 0;
++};
++
++zeroPad = function( str, count, left ) {
++	var l;
++	for ( l = str.length; l < count; l += 1 ) {
++		str = ( left ? ("0" + str) : (str + "0") );
++	}
++	return str;
++};
++
++//
++// private Globalization utility functions
++//
++
++appendPreOrPostMatch = function( preMatch, strings ) {
++	// appends pre- and post- token match strings while removing escaped characters.
++	// Returns a single quote count which is used to determine if the token occurs
++	// in a string literal.
++	var quoteCount = 0,
++		escaped = false;
++	for ( var i = 0, il = preMatch.length; i < il; i++ ) {
++		var c = preMatch.charAt( i );
++		switch ( c ) {
++			case "\'":
++				if ( escaped ) {
++					strings.push( "\'" );
++				}
++				else {
++					quoteCount++;
++				}
++				escaped = false;
++				break;
++			case "\\":
++				if ( escaped ) {
++					strings.push( "\\" );
++				}
++				escaped = !escaped;
++				break;
++			default:
++				strings.push( c );
++				escaped = false;
++				break;
++		}
++	}
++	return quoteCount;
++};
++
++expandFormat = function( cal, format ) {
++	// expands unspecified or single character date formats into the full pattern.
++	format = format || "F";
++	var pattern,
++		patterns = cal.patterns,
++		len = format.length;
++	if ( len === 1 ) {
++		pattern = patterns[ format ];
++		if ( !pattern ) {
++			throw "Invalid date format string \'" + format + "\'.";
++		}
++		format = pattern;
++	}
++	else if ( len === 2 && format.charAt(0) === "%" ) {
++		// %X escape format -- intended as a custom format string that is only one character, not a built-in format.
++		format = format.charAt( 1 );
++	}
++	return format;
++};
++
++formatDate = function( value, format, culture ) {
++	var cal = culture.calendar,
++		convert = cal.convert;
++
++	if ( !format || !format.length || format === "i" ) {
++		var ret;
++		if ( culture && culture.name.length ) {
++			if ( convert ) {
++				// non-gregorian calendar, so we cannot use built-in toLocaleString()
++				ret = formatDate( value, cal.patterns.F, culture );
++			}
++			else {
++				var eraDate = new Date( value.getTime() ),
++					era = getEra( value, cal.eras );
++				eraDate.setFullYear( getEraYear(value, cal, era) );
++				ret = eraDate.toLocaleString();
++			}
++		}
++		else {
++			ret = value.toString();
++		}
++		return ret;
++	}
++
++	var eras = cal.eras,
++		sortable = format === "s";
++	format = expandFormat( cal, format );
++
++	// Start with an empty string
++	ret = [];
++	var hour,
++		zeros = [ "0", "00", "000" ],
++		foundDay,
++		checkedDay,
++		dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g,
++		quoteCount = 0,
++		tokenRegExp = getTokenRegExp(),
++		converted;
++
++	function padZeros( num, c ) {
++		var r, s = num + "";
++		if ( c > 1 && s.length < c ) {
++			r = ( zeros[c - 2] + s);
++			return r.substr( r.length - c, c );
++		}
++		else {
++			r = s;
++		}
++		return r;
++	}
++
++	function hasDay() {
++		if ( foundDay || checkedDay ) {
++			return foundDay;
++		}
++		foundDay = dayPartRegExp.test( format );
++		checkedDay = true;
++		return foundDay;
++	}
++
++	function getPart( date, part ) {
++		if ( converted ) {
++			return converted[ part ];
++		}
++		switch ( part ) {
++			case 0: return date.getFullYear();
++			case 1: return date.getMonth();
++			case 2: return date.getDate();
++		}
++	}
++
++	if ( !sortable && convert ) {
++		converted = convert.fromGregorian( value );
++	}
++
++	for ( ; ; ) {
++		// Save the current index
++		var index = tokenRegExp.lastIndex,
++			// Look for the next pattern
++			ar = tokenRegExp.exec( format );
++
++		// Append the text before the pattern (or the end of the string if not found)
++		var preMatch = format.slice( index, ar ? ar.index : format.length );
++		quoteCount += appendPreOrPostMatch( preMatch, ret );
++
++		if ( !ar ) {
++			break;
++		}
++
++		// do not replace any matches that occur inside a string literal.
++		if ( quoteCount % 2 ) {
++			ret.push( ar[0] );
++			continue;
++		}
++
++		var current = ar[ 0 ],
++			clength = current.length;
++
++		switch ( current ) {
++			case "ddd":
++				//Day of the week, as a three-letter abbreviation
++			case "dddd":
++				// Day of the week, using the full name
++				var names = ( clength === 3 ) ? cal.days.namesAbbr : cal.days.names;
++				ret.push( names[value.getDay()] );
++				break;
++			case "d":
++				// Day of month, without leading zero for single-digit days
++			case "dd":
++				// Day of month, with leading zero for single-digit days
++				foundDay = true;
++				ret.push(
++					padZeros( getPart(value, 2), clength )
++				);
++				break;
++			case "MMM":
++				// Month, as a three-letter abbreviation
++			case "MMMM":
++				// Month, using the full name
++				var part = getPart( value, 1 );
++				ret.push(
++					( cal.monthsGenitive && hasDay() )
++					?
++					cal.monthsGenitive[ clength === 3 ? "namesAbbr" : "names" ][ part ]
++					:
++					cal.months[ clength === 3 ? "namesAbbr" : "names" ][ part ]
++				);
++				break;
++			case "M":
++				// Month, as digits, with no leading zero for single-digit months
++			case "MM":
++				// Month, as digits, with leading zero for single-digit months
++				ret.push(
++					padZeros( getPart(value, 1) + 1, clength )
++				);
++				break;
++			case "y":
++				// Year, as two digits, but with no leading zero for years less than 10
++			case "yy":
++				// Year, as two digits, with leading zero for years less than 10
++			case "yyyy":
++				// Year represented by four full digits
++				part = converted ? converted[ 0 ] : getEraYear( value, cal, getEra(value, eras), sortable );
++				if ( clength < 4 ) {
++					part = part % 100;
++				}
++				ret.push(
++					padZeros( part, clength )
++				);
++				break;
++			case "h":
++				// Hours with no leading zero for single-digit hours, using 12-hour clock
++			case "hh":
++				// Hours with leading zero for single-digit hours, using 12-hour clock
++				hour = value.getHours() % 12;
++				if ( hour === 0 ) hour = 12;
++				ret.push(
++					padZeros( hour, clength )
++				);
++				break;
++			case "H":
++				// Hours with no leading zero for single-digit hours, using 24-hour clock
++			case "HH":
++				// Hours with leading zero for single-digit hours, using 24-hour clock
++				ret.push(
++					padZeros( value.getHours(), clength )
++				);
++				break;
++			case "m":
++				// Minutes with no leading zero for single-digit minutes
++			case "mm":
++				// Minutes with leading zero for single-digit minutes
++				ret.push(
++					padZeros( value.getMinutes(), clength )
++				);
++				break;
++			case "s":
++				// Seconds with no leading zero for single-digit seconds
++			case "ss":
++				// Seconds with leading zero for single-digit seconds
++				ret.push(
++					padZeros( value.getSeconds(), clength )
++				);
++				break;
++			case "t":
++				// One character am/pm indicator ("a" or "p")
++			case "tt":
++				// Multicharacter am/pm indicator
++				part = value.getHours() < 12 ? ( cal.AM ? cal.AM[0] : " " ) : ( cal.PM ? cal.PM[0] : " " );
++				ret.push( clength === 1 ? part.charAt(0) : part );
++				break;
++			case "f":
++				// Deciseconds
++			case "ff":
++				// Centiseconds
++			case "fff":
++				// Milliseconds
++				ret.push(
++					padZeros( value.getMilliseconds(), 3 ).substr( 0, clength )
++				);
++				break;
++			case "z":
++				// Time zone offset, no leading zero
++			case "zz":
++				// Time zone offset with leading zero
++				hour = value.getTimezoneOffset() / 60;
++				ret.push(
++					( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), clength )
++				);
++				break;
++			case "zzz":
++				// Time zone offset with leading zero
++				hour = value.getTimezoneOffset() / 60;
++				ret.push(
++					( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), 2 )
++					// Hard coded ":" separator, rather than using cal.TimeSeparator
++					// Repeated here for consistency, plus ":" was already assumed in date parsing.
++					+ ":" + padZeros( Math.abs(value.getTimezoneOffset() % 60), 2 )
++				);
++				break;
++			case "g":
++			case "gg":
++				if ( cal.eras ) {
++					ret.push(
++						cal.eras[ getEra(value, eras) ].name
++					);
++				}
++				break;
++		case "/":
++			ret.push( cal["/"] );
++			break;
++		default:
++			throw "Invalid date format pattern \'" + current + "\'.";
++			break;
++		}
++	}
++	return ret.join( "" );
++};
++
++// formatNumber
++(function() {
++	var expandNumber;
++
++	expandNumber = function( number, precision, formatInfo ) {
++		var groupSizes = formatInfo.groupSizes,
++			curSize = groupSizes[ 0 ],
++			curGroupIndex = 1,
++			factor = Math.pow( 10, precision ),
++			rounded = Math.round( number * factor ) / factor;
++
++		if ( !isFinite(rounded) ) {
++			rounded = number;
++		}
++		number = rounded;
++
++		var numberString = number+"",
++			right = "",
++			split = numberString.split( /e/i ),
++			exponent = split.length > 1 ? parseInt( split[1], 10 ) : 0;
++		numberString = split[ 0 ];
++		split = numberString.split( "." );
++		numberString = split[ 0 ];
++		right = split.length > 1 ? split[ 1 ] : "";
++
++		var l;
++		if ( exponent > 0 ) {
++			right = zeroPad( right, exponent, false );
++			numberString += right.slice( 0, exponent );
++			right = right.substr( exponent );
++		}
++		else if ( exponent < 0 ) {
++			exponent = -exponent;
++			numberString = zeroPad( numberString, exponent + 1 );
++			right = numberString.slice( -exponent, numberString.length ) + right;
++			numberString = numberString.slice( 0, -exponent );
++		}
++
++		if ( precision > 0 ) {
++			right = formatInfo[ "." ] +
++				( (right.length > precision) ? right.slice(0, precision) : zeroPad(right, precision) );
++		}
++		else {
++			right = "";
++		}
++
++		var stringIndex = numberString.length - 1,
++			sep = formatInfo[ "," ],
++			ret = "";
++
++		while ( stringIndex >= 0 ) {
++			if ( curSize === 0 || curSize > stringIndex ) {
++				return numberString.slice( 0, stringIndex + 1 ) + ( ret.length ? (sep + ret + right) : right );
++			}
++			ret = numberString.slice( stringIndex - curSize + 1, stringIndex + 1 ) + ( ret.length ? (sep + ret) : "" );
++
++			stringIndex -= curSize;
++
++			if ( curGroupIndex < groupSizes.length ) {
++				curSize = groupSizes[ curGroupIndex ];
++				curGroupIndex++;
++			}
++		}
++
++		return numberString.slice( 0, stringIndex + 1 ) + sep + ret + right;
++	};
++
++	formatNumber = function( value, format, culture ) {
++		if ( !isFinite(value) ) {
++			if ( value === Infinity ) {
++				return culture.numberFormat.positiveInfinity;
++			}
++			if ( value === -Infinity ) {
++				return culture.numberFormat.negativeInfinity;
++			}
++			return culture.numberFormat.NaN;
++		}
++		if ( !format || format === "i" ) {
++			return culture.name.length ? value.toLocaleString() : value.toString();
++		}
++		format = format || "D";
++
++		var nf = culture.numberFormat,
++			number = Math.abs( value ),
++			precision = -1,
++			pattern;
++		if ( format.length > 1 ) precision = parseInt( format.slice(1), 10 );
++
++		var current = format.charAt( 0 ).toUpperCase(),
++			formatInfo;
++
++		switch ( current ) {
++			case "D":
++				pattern = "n";
++				number = truncate( number );
++				if ( precision !== -1 ) {
++					number = zeroPad( "" + number, precision, true );
++				}
++				if ( value < 0 ) number = "-" + number;
++				break;
++			case "N":
++				formatInfo = nf;
++				// fall through
++			case "C":
++				formatInfo = formatInfo || nf.currency;
++				// fall through
++			case "P":
++				formatInfo = formatInfo || nf.percent;
++				pattern = value < 0 ? formatInfo.pattern[ 0 ] : ( formatInfo.pattern[1] || "n" );
++				if ( precision === -1 ) precision = formatInfo.decimals;
++				number = expandNumber( number * (current === "P" ? 100 : 1), precision, formatInfo );
++				break;
++			default:
++				throw "Bad number format specifier: " + current;
++		}
++
++		var patternParts = /n|\$|-|%/g,
++			ret = "";
++		for ( ; ; ) {
++			var index = patternParts.lastIndex,
++				ar = patternParts.exec( pattern );
++
++			ret += pattern.slice( index, ar ? ar.index : pattern.length );
++
++			if ( !ar ) {
++				break;
++			}
++
++			switch ( ar[0] ) {
++				case "n":
++					ret += number;
++					break;
++				case "$":
++					ret += nf.currency.symbol;
++					break;
++				case "-":
++					// don't make 0 negative
++					if ( /[1-9]/.test(number) ) {
++						ret += nf[ "-" ];
++					}
++					break;
++				case "%":
++					ret += nf.percent.symbol;
++					break;
++			}
++		}
++
++		return ret;
++	};
++
++}());
++
++getTokenRegExp = function() {
++	// regular expression for matching date and time tokens in format strings.
++	return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g;
++};
++
++getEra = function( date, eras ) {
++	if ( !eras ) return 0;
++	var start, ticks = date.getTime();
++	for ( var i = 0, l = eras.length; i < l; i++ ) {
++		start = eras[ i ].start;
++		if ( start === null || ticks >= start ) {
++			return i;
++		}
++	}
++	return 0;
++};
++
++getEraYear = function( date, cal, era, sortable ) {
++	var year = date.getFullYear();
++	if ( !sortable && cal.eras ) {
++		// convert normal gregorian year to era-shifted gregorian
++		// year by subtracting the era offset
++		year -= cal.eras[ era ].offset;
++	}
++	return year;
++};
++
++// parseExact
++(function() {
++	var expandYear,
++		getDayIndex,
++		getMonthIndex,
++		getParseRegExp,
++		outOfRange,
++		toUpper,
++		toUpperArray;
++
++	expandYear = function( cal, year ) {
++		// expands 2-digit year into 4 digits.
++		var now = new Date(),
++			era = getEra( now );
++		if ( year < 100 ) {
++			var twoDigitYearMax = cal.twoDigitYearMax;
++			twoDigitYearMax = typeof twoDigitYearMax === "string" ? new Date().getFullYear() % 100 + parseInt( twoDigitYearMax, 10 ) : twoDigitYearMax;
++			var curr = getEraYear( now, cal, era );
++			year += curr - ( curr % 100 );
++			if ( year > twoDigitYearMax ) {
++				year -= 100;
++			}
++		}
++		return year;
++	};
++
++	getDayIndex = function	( cal, value, abbr ) {
++		var ret,
++			days = cal.days,
++			upperDays = cal._upperDays;
++		if ( !upperDays ) {
++			cal._upperDays = upperDays = [
++				toUpperArray( days.names ),
++				toUpperArray( days.namesAbbr ),
++				toUpperArray( days.namesShort )
++			];
++		}
++		value = toUpper( value );
++		if ( abbr ) {
++			ret = arrayIndexOf( upperDays[1], value );
++			if ( ret === -1 ) {
++				ret = arrayIndexOf( upperDays[2], value );
++			}
++		}
++		else {
++			ret = arrayIndexOf( upperDays[0], value );
++		}
++		return ret;
++	};
++
++	getMonthIndex = function( cal, value, abbr ) {
++		var months = cal.months,
++			monthsGen = cal.monthsGenitive || cal.months,
++			upperMonths = cal._upperMonths,
++			upperMonthsGen = cal._upperMonthsGen;
++		if ( !upperMonths ) {
++			cal._upperMonths = upperMonths = [
++				toUpperArray( months.names ),
++				toUpperArray( months.namesAbbr )
++			];
++			cal._upperMonthsGen = upperMonthsGen = [
++				toUpperArray( monthsGen.names ),
++				toUpperArray( monthsGen.namesAbbr )
++			];
++		}
++		value = toUpper( value );
++		var i = arrayIndexOf( abbr ? upperMonths[1] : upperMonths[0], value );
++		if ( i < 0 ) {
++			i = arrayIndexOf( abbr ? upperMonthsGen[1] : upperMonthsGen[0], value );
++		}
++		return i;
++	};
++
++	getParseRegExp = function( cal, format ) {
++		// converts a format string into a regular expression with groups that
++		// can be used to extract date fields from a date string.
++		// check for a cached parse regex.
++		var re = cal._parseRegExp;
++		if ( !re ) {
++			cal._parseRegExp = re = {};
++		}
++		else {
++			var reFormat = re[ format ];
++			if ( reFormat ) {
++				return reFormat;
++			}
++		}
++
++		// expand single digit formats, then escape regular expression characters.
++		var expFormat = expandFormat( cal, format ).replace( /([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1" ),
++			regexp = [ "^" ],
++			groups = [],
++			index = 0,
++			quoteCount = 0,
++			tokenRegExp = getTokenRegExp(),
++			match;
++
++		// iterate through each date token found.
++		while ( (match = tokenRegExp.exec(expFormat)) !== null ) {
++			var preMatch = expFormat.slice( index, match.index );
++			index = tokenRegExp.lastIndex;
++
++			// don't replace any matches that occur inside a string literal.
++			quoteCount += appendPreOrPostMatch( preMatch, regexp );
++			if ( quoteCount % 2 ) {
++				regexp.push( match[0] );
++				continue;
++			}
++
++			// add a regex group for the token.
++			var m = match[ 0 ],
++				len = m.length,
++				add;
++			switch ( m ) {
++				case "dddd": case "ddd":
++				case "MMMM": case "MMM":
++				case "gg": case "g":
++					add = "(\\D+)";
++					break;
++				case "tt": case "t":
++					add = "(\\D*)";
++					break;
++				case "yyyy":
++				case "fff":
++				case "ff":
++				case "f":
++					add = "(\\d{" + len + "})";
++					break;
++				case "dd": case "d":
++				case "MM": case "M":
++				case "yy": case "y":
++				case "HH": case "H":
++				case "hh": case "h":
++				case "mm": case "m":
++				case "ss": case "s":
++					add = "(\\d\\d?)";
++					break;
++				case "zzz":
++					add = "([+-]?\\d\\d?:\\d{2})";
++					break;
++				case "zz": case "z":
++					add = "([+-]?\\d\\d?)";
++					break;
++				case "/":
++					add = "(\\" + cal[ "/" ] + ")";
++					break;
++				default:
++					throw "Invalid date format pattern \'" + m + "\'.";
++					break;
++			}
++			if ( add ) {
++				regexp.push( add );
++			}
++			groups.push( match[0] );
++		}
++		appendPreOrPostMatch( expFormat.slice(index), regexp );
++		regexp.push( "$" );
++
++		// allow whitespace to differ when matching formats.
++		var regexpStr = regexp.join( "" ).replace( /\s+/g, "\\s+" ),
++			parseRegExp = { "regExp": regexpStr, "groups": groups };
++
++		// cache the regex for this format.
++		return re[ format ] = parseRegExp;
++	};
++
++	outOfRange = function( value, low, high ) {
++		return value < low || value > high;
++	};
++
++	toUpper = function( value ) {
++		// "he-IL" has non-breaking space in weekday names.
++		return value.split( "\u00A0" ).join( " " ).toUpperCase();
++	};
++
++	toUpperArray = function( arr ) {
++		var results = [];
++		for ( var i = 0, l = arr.length; i < l; i++ ) {
++			results[ i ] = toUpper( arr[i] );
++		}
++		return results;
++	};
++
++	parseExact = function( value, format, culture ) {
++		// try to parse the date string by matching against the format string
++		// while using the specified culture for date field names.
++		value = trim( value );
++		var cal = culture.calendar,
++			// convert date formats into regular expressions with groupings.
++			// use the regexp to determine the input format and extract the date fields.
++			parseInfo = getParseRegExp( cal, format ),
++			match = new RegExp( parseInfo.regExp ).exec( value );
++		if ( match === null ) {
++			return null;
++		}
++		// found a date format that matches the input.
++		var groups = parseInfo.groups,
++			era = null, year = null, month = null, date = null, weekDay = null,
++			hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null,
++			pmHour = false;
++		// iterate the format groups to extract and set the date fields.
++		for ( var j = 0, jl = groups.length; j < jl; j++ ) {
++			var matchGroup = match[ j + 1 ];
++			if ( matchGroup ) {
++				var current = groups[ j ],
++					clength = current.length,
++					matchInt = parseInt( matchGroup, 10 );
++				switch ( current ) {
++					case "dd": case "d":
++						// Day of month.
++						date = matchInt;
++						// check that date is generally in valid range, also checking overflow below.
++						if ( outOfRange(date, 1, 31) ) return null;
++						break;
++					case "MMM": case "MMMM":
++						month = getMonthIndex( cal, matchGroup, clength === 3 );
++						if ( outOfRange(month, 0, 11) ) return null;
++						break;
++					case "M": case "MM":
++						// Month.
++						month = matchInt - 1;
++						if ( outOfRange(month, 0, 11) ) return null;
++						break;
++					case "y": case "yy":
++					case "yyyy":
++						year = clength < 4 ? expandYear( cal, matchInt ) : matchInt;
++						if ( outOfRange(year, 0, 9999) ) return null;
++						break;
++					case "h": case "hh":
++						// Hours (12-hour clock).
++						hour = matchInt;
++						if ( hour === 12 ) hour = 0;
++						if ( outOfRange(hour, 0, 11) ) return null;
++						break;
++					case "H": case "HH":
++						// Hours (24-hour clock).
++						hour = matchInt;
++						if ( outOfRange(hour, 0, 23) ) return null;
++						break;
++					case "m": case "mm":
++						// Minutes.
++						min = matchInt;
++						if ( outOfRange(min, 0, 59) ) return null;
++						break;
++					case "s": case "ss":
++						// Seconds.
++						sec = matchInt;
++						if ( outOfRange(sec, 0, 59) ) return null;
++						break;
++					case "tt": case "t":
++						// AM/PM designator.
++						// see if it is standard, upper, or lower case PM. If not, ensure it is at least one of
++						// the AM tokens. If not, fail the parse for this format.
++						pmHour = cal.PM && ( matchGroup === cal.PM[0] || matchGroup === cal.PM[1] || matchGroup === cal.PM[2] );
++						if (
++							!pmHour && (
++								!cal.AM || ( matchGroup !== cal.AM[0] && matchGroup !== cal.AM[1] && matchGroup !== cal.AM[2] )
++							)
++						) return null;
++						break;
++					case "f":
++						// Deciseconds.
++					case "ff":
++						// Centiseconds.
++					case "fff":
++						// Milliseconds.
++						msec = matchInt * Math.pow( 10, 3 - clength );
++						if ( outOfRange(msec, 0, 999) ) return null;
++						break;
++					case "ddd":
++						// Day of week.
++					case "dddd":
++						// Day of week.
++						weekDay = getDayIndex( cal, matchGroup, clength === 3 );
++						if ( outOfRange(weekDay, 0, 6) ) return null;
++						break;
++					case "zzz":
++						// Time zone offset in +/- hours:min.
++						var offsets = matchGroup.split( /:/ );
++						if ( offsets.length !== 2 ) return null;
++						hourOffset = parseInt( offsets[0], 10 );
++						if ( outOfRange(hourOffset, -12, 13) ) return null;
++						var minOffset = parseInt( offsets[1], 10 );
++						if ( outOfRange(minOffset, 0, 59) ) return null;
++						tzMinOffset = ( hourOffset * 60 ) + ( startsWith(matchGroup, "-") ? -minOffset : minOffset );
++						break;
++					case "z": case "zz":
++						// Time zone offset in +/- hours.
++						hourOffset = matchInt;
++						if ( outOfRange(hourOffset, -12, 13) ) return null;
++						tzMinOffset = hourOffset * 60;
++						break;
++					case "g": case "gg":
++						var eraName = matchGroup;
++						if ( !eraName || !cal.eras ) return null;
++						eraName = trim( eraName.toLowerCase() );
++						for ( var i = 0, l = cal.eras.length; i < l; i++ ) {
++							if ( eraName === cal.eras[i].name.toLowerCase() ) {
++								era = i;
++								break;
++							}
++						}
++						// could not find an era with that name
++						if ( era === null ) return null;
++						break;
++				}
++			}
++		}
++		var result = new Date(), defaultYear, convert = cal.convert;
++		defaultYear = convert ? convert.fromGregorian( result )[ 0 ] : result.getFullYear();
++		if ( year === null ) {
++			year = defaultYear;
++		}
++		else if ( cal.eras ) {
++			// year must be shifted to normal gregorian year
++			// but not if year was not specified, its already normal gregorian
++			// per the main if clause above.
++			year += cal.eras[( era || 0 )].offset;
++		}
++		// set default day and month to 1 and January, so if unspecified, these are the defaults
++		// instead of the current day/month.
++		if ( month === null ) {
++			month = 0;
++		}
++		if ( date === null ) {
++			date = 1;
++		}
++		// now have year, month, and date, but in the culture's calendar.
++		// convert to gregorian if necessary
++		if ( convert ) {
++			result = convert.toGregorian( year, month, date );
++			// conversion failed, must be an invalid match
++			if ( result === null ) return null;
++		}
++		else {
++			// have to set year, month and date together to avoid overflow based on current date.
++			result.setFullYear( year, month, date );
++			// check to see if date overflowed for specified month (only checked 1-31 above).
++			if ( result.getDate() !== date ) return null;
++			// invalid day of week.
++			if ( weekDay !== null && result.getDay() !== weekDay ) {
++				return null;
++			}
++		}
++		// if pm designator token was found make sure the hours fit the 24-hour clock.
++		if ( pmHour && hour < 12 ) {
++			hour += 12;
++		}
++		result.setHours( hour, min, sec, msec );
++		if ( tzMinOffset !== null ) {
++			// adjust timezone to utc before applying local offset.
++			var adjustedMin = result.getMinutes() - ( tzMinOffset + result.getTimezoneOffset() );
++			// Safari limits hours and minutes to the range of -127 to 127.	 We need to use setHours
++			// to ensure both these fields will not exceed this range.	adjustedMin will range
++			// somewhere between -1440 and 1500, so we only need to split this into hours.
++			result.setHours( result.getHours() + parseInt(adjustedMin / 60, 10), adjustedMin % 60 );
++		}
++		return result;
++	};
++}());
++
++parseNegativePattern = function( value, nf, negativePattern ) {
++	var neg = nf[ "-" ],
++		pos = nf[ "+" ],
++		ret;
++	switch ( negativePattern ) {
++		case "n -":
++			neg = " " + neg;
++			pos = " " + pos;
++			// fall through
++		case "n-":
++			if ( endsWith(value, neg) ) {
++				ret = [ "-", value.substr(0, value.length - neg.length) ];
++			}
++			else if ( endsWith(value, pos) ) {
++				ret = [ "+", value.substr(0, value.length - pos.length) ];
++			}
++			break;
++		case "- n":
++			neg += " ";
++			pos += " ";
++			// fall through
++		case "-n":
++			if ( startsWith(value, neg) ) {
++				ret = [ "-", value.substr(neg.length) ];
++			}
++			else if ( startsWith(value, pos) ) {
++				ret = [ "+", value.substr(pos.length) ];
++			}
++			break;
++		case "(n)":
++			if ( startsWith(value, "(") && endsWith(value, ")") ) {
++				ret = [ "-", value.substr(1, value.length - 2) ];
++			}
++			break;
++	}
++	return ret || [ "", value ];
++};
++
++//
++// public instance functions
++//
++
++Globalize.prototype.findClosestCulture = function( cultureSelector ) {
++	return Globalize.findClosestCulture.call( this, cultureSelector );
++};
++
++Globalize.prototype.format = function( value, format, cultureSelector ) {
++	return Globalize.format.call( this, value, format, cultureSelector );
++};
++
++Globalize.prototype.localize = function( key, cultureSelector ) {
++	return Globalize.localize.call( this, key, cultureSelector );
++};
++
++Globalize.prototype.parseInt = function( value, radix, cultureSelector ) {
++	return Globalize.parseInt.call( this, value, radix, cultureSelector );
++};
++
++Globalize.prototype.parseFloat = function( value, radix, cultureSelector ) {
++	return Globalize.parseFloat.call( this, value, radix, cultureSelector );
++};
++
++Globalize.prototype.culture = function( cultureSelector ) {
++	return Globalize.culture.call( this, cultureSelector );
++};
++
++//
++// public singleton functions
++//
++
++Globalize.addCultureInfo = function( cultureName, baseCultureName, info ) {
++
++	var base = {},
++		isNew = false;
++
++	if ( typeof cultureName !== "string" ) {
++		// cultureName argument is optional string. If not specified, assume info is first
++		// and only argument. Specified info deep-extends current culture.
++		info = cultureName;
++		cultureName = this.culture().name;
++		base = this.cultures[ cultureName ];
++	} else if ( typeof baseCultureName !== "string" ) {
++		// baseCultureName argument is optional string. If not specified, assume info is second
++		// argument. Specified info deep-extends specified culture.
++		// If specified culture does not exist, create by deep-extending default
++		info = baseCultureName;
++		isNew = ( this.cultures[ cultureName ] == null );
++		base = this.cultures[ cultureName ] || this.cultures[ "default" ];
++	} else {
++		// cultureName and baseCultureName specified. Assume a new culture is being created
++		// by deep-extending an specified base culture
++		isNew = true;
++		base = this.cultures[ baseCultureName ];
++	}
++
++	this.cultures[ cultureName ] = extend(true, {},
++		base,
++		info
++	);
++	// Make the standard calendar the current culture if it's a new culture
++	if ( isNew ) {
++		this.cultures[ cultureName ].calendar = this.cultures[ cultureName ].calendars.standard;
++	}
++};
++
++Globalize.findClosestCulture = function( name ) {
++	var match;
++	if ( !name ) {
++		return this.cultures[ this.cultureSelector ] || this.cultures[ "default" ];
++	}
++	if ( typeof name === "string" ) {
++		name = name.split( "," );
++	}
++	if ( isArray(name) ) {
++		var lang,
++			cultures = this.cultures,
++			list = name,
++			i, l = list.length,
++			prioritized = [];
++		for ( i = 0; i < l; i++ ) {
++			name = trim( list[i] );
++			var pri, parts = name.split( ";" );
++			lang = trim( parts[0] );
++			if ( parts.length === 1 ) {
++				pri = 1;
++			}
++			else {
++				name = trim( parts[1] );
++				if ( name.indexOf("q=") === 0 ) {
++					name = name.substr( 2 );
++					pri = parseFloat( name );
++					pri = isNaN( pri ) ? 0 : pri;
++				}
++				else {
++					pri = 1;
++				}
++			}
++			prioritized.push({ lang: lang, pri: pri });
++		}
++		prioritized.sort(function( a, b ) {
++			return a.pri < b.pri ? 1 : -1;
++		});
++
++		// exact match
++		for ( i = 0; i < l; i++ ) {
++			lang = prioritized[ i ].lang;
++			match = cultures[ lang ];
++			if ( match ) {
++				return match;
++			}
++		}
++
++		// neutral language match
++		for ( i = 0; i < l; i++ ) {
++			lang = prioritized[ i ].lang;
++			do {
++				var index = lang.lastIndexOf( "-" );
++				if ( index === -1 ) {
++					break;
++				}
++				// strip off the last part. e.g. en-US => en
++				lang = lang.substr( 0, index );
++				match = cultures[ lang ];
++				if ( match ) {
++					return match;
++				}
++			}
++			while ( 1 );
++		}
++
++		// last resort: match first culture using that language
++		for ( i = 0; i < l; i++ ) {
++			lang = prioritized[ i ].lang;
++			for ( var cultureKey in cultures ) {
++				var culture = cultures[ cultureKey ];
++				if ( culture.language == lang ) {
++					return culture;
++				}
++			}
++		}
++	}
++	else if ( typeof name === "object" ) {
++		return name;
++	}
++	return match || null;
++};
++
++Globalize.format = function( value, format, cultureSelector ) {
++	culture = this.findClosestCulture( cultureSelector );
++	if ( value instanceof Date ) {
++		value = formatDate( value, format, culture );
++	}
++	else if ( typeof value === "number" ) {
++		value = formatNumber( value, format, culture );
++	}
++	return value;
++};
++
++Globalize.localize = function( key, cultureSelector ) {
++	return this.findClosestCulture( cultureSelector ).messages[ key ] ||
++		this.cultures[ "default" ].messages[ key ];
++};
++
++Globalize.parseDate = function( value, formats, culture ) {
++	culture = this.findClosestCulture( culture );
++
++	var date, prop, patterns;
++	if ( formats ) {
++		if ( typeof formats === "string" ) {
++			formats = [ formats ];
++		}
++		if ( formats.length ) {
++			for ( var i = 0, l = formats.length; i < l; i++ ) {
++				var format = formats[ i ];
++				if ( format ) {
++					date = parseExact( value, format, culture );
++					if ( date ) {
++						break;
++					}
++				}
++			}
++		}
++	} else {
++		patterns = culture.calendar.patterns;
++		for ( prop in patterns ) {
++			date = parseExact( value, patterns[prop], culture );
++			if ( date ) {
++				break;
++			}
++		}
++	}
++
++	return date || null;
++};
++
++Globalize.parseInt = function( value, radix, cultureSelector ) {
++	return truncate( Globalize.parseFloat(value, radix, cultureSelector) );
++};
++
++Globalize.parseFloat = function( value, radix, cultureSelector ) {
++	// radix argument is optional
++	if ( typeof radix !== "number" ) {
++		cultureSelector = radix;
++		radix = 10;
++	}
++
++	var culture = this.findClosestCulture( cultureSelector );
++	var ret = NaN,
++		nf = culture.numberFormat;
++
++	if ( value.indexOf(culture.numberFormat.currency.symbol) > -1 ) {
++		// remove currency symbol
++		value = value.replace( culture.numberFormat.currency.symbol, "" );
++		// replace decimal seperator
++		value = value.replace( culture.numberFormat.currency["."], culture.numberFormat["."] );
++	}
++
++	// trim leading and trailing whitespace
++	value = trim( value );
++
++	// allow infinity or hexidecimal
++	if ( regexInfinity.test(value) ) {
++		ret = parseFloat( value );
++	}
++	else if ( !radix && regexHex.test(value) ) {
++		ret = parseInt( value, 16 );
++	}
++	else {
++
++		// determine sign and number
++		var signInfo = parseNegativePattern( value, nf, nf.pattern[0] ),
++			sign = signInfo[ 0 ],
++			num = signInfo[ 1 ];
++
++		// #44 - try parsing as "(n)"
++		if ( sign === "" && nf.pattern[0] !== "(n)" ) {
++			signInfo = parseNegativePattern( value, nf, "(n)" );
++			sign = signInfo[ 0 ];
++			num = signInfo[ 1 ];
++		}
++
++		// try parsing as "-n"
++		if ( sign === "" && nf.pattern[0] !== "-n" ) {
++			signInfo = parseNegativePattern( value, nf, "-n" );
++			sign = signInfo[ 0 ];
++			num = signInfo[ 1 ];
++		}
++
++		sign = sign || "+";
++
++		// determine exponent and number
++		var exponent,
++			intAndFraction,
++			exponentPos = num.indexOf( "e" );
++		if ( exponentPos < 0 ) exponentPos = num.indexOf( "E" );
++		if ( exponentPos < 0 ) {
++			intAndFraction = num;
++			exponent = null;
++		}
++		else {
++			intAndFraction = num.substr( 0, exponentPos );
++			exponent = num.substr( exponentPos + 1 );
++		}
++		// determine decimal position
++		var integer,
++			fraction,
++			decSep = nf[ "." ],
++			decimalPos = intAndFraction.indexOf( decSep );
++		if ( decimalPos < 0 ) {
++			integer = intAndFraction;
++			fraction = null;
++		}
++		else {
++			integer = intAndFraction.substr( 0, decimalPos );
++			fraction = intAndFraction.substr( decimalPos + decSep.length );
++		}
++		// handle groups (e.g. 1,000,000)
++		var groupSep = nf[ "," ];
++		integer = integer.split( groupSep ).join( "" );
++		var altGroupSep = groupSep.replace( /\u00A0/g, " " );
++		if ( groupSep !== altGroupSep ) {
++			integer = integer.split( altGroupSep ).join( "" );
++		}
++		// build a natively parsable number string
++		var p = sign + integer;
++		if ( fraction !== null ) {
++			p += "." + fraction;
++		}
++		if ( exponent !== null ) {
++			// exponent itself may have a number patternd
++			var expSignInfo = parseNegativePattern( exponent, nf, "-n" );
++			p += "e" + ( expSignInfo[0] || "+" ) + expSignInfo[ 1 ];
++		}
++		if ( regexParseFloat.test(p) ) {
++			ret = parseFloat( p );
++		}
++	}
++	return ret;
++};
++
++Globalize.culture = function( cultureSelector ) {
++	// setter
++	if ( typeof cultureSelector !== "undefined" ) {
++		this.cultureSelector = cultureSelector;
++	}
++	// getter
++	return this.findClosestCulture( cultureSelector ) || this.culture[ "default" ];
++};
++
++}( this ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.ja-JP.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.ja-JP.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.ja-JP.js	(revision 15487)
+@@ -0,0 +1,100 @@
++/*
++ * Globalize Culture ja-JP
++ *
++ * http://github.com/jquery/globalize
++ *
++ * Copyright Software Freedom Conservancy, Inc.
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * This file was generated by the Globalize Culture Generator
++ * Translation: bugs found in this file need to be fixed in the generator
++ */
++
++(function( window, undefined ) {
++
++var Globalize;
++
++if ( typeof require !== "undefined"
++	&& typeof exports !== "undefined"
++	&& typeof module !== "undefined" ) {
++	// Assume CommonJS
++	Globalize = require( "globalize" );
++} else {
++	// Global variable
++	Globalize = window.Globalize;
++}
++
++Globalize.addCultureInfo( "ja-JP", "default", {
++	name: "ja-JP",
++	englishName: "Japanese (Japan)",
++	nativeName: "日本語 (日本)",
++	language: "ja",
++	numberFormat: {
++		NaN: "NaN (非数値)",
++		negativeInfinity: "-∞",
++		positiveInfinity: "+∞",
++		percent: {
++			pattern: ["-n%","n%"]
++		},
++		currency: {
++			pattern: ["-$n","$n"],
++			decimals: 0,
++			symbol: "¥"
++		}
++	},
++	calendars: {
++		standard: {
++			days: {
++				names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],
++				namesAbbr: ["日","月","火","水","木","金","土"],
++				namesShort: ["日","月","火","水","木","金","土"]
++			},
++			months: {
++				names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""],
++				namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""]
++			},
++			AM: ["午前","午前","午前"],
++			PM: ["午後","午後","午後"],
++			eras: [{"name":"西暦","start":null,"offset":0}],
++			patterns: {
++				d: "yyyy/MM/dd",
++				D: "yyyy'年'M'月'd'日'",
++				t: "H:mm",
++				T: "H:mm:ss",
++				f: "yyyy'年'M'月'd'日' H:mm",
++				F: "yyyy'年'M'月'd'日' H:mm:ss",
++				M: "M'月'd'日'",
++				Y: "yyyy'年'M'月'"
++			}
++		},
++		Japanese: {
++			name: "Japanese",
++			days: {
++				names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],
++				namesAbbr: ["日","月","火","水","木","金","土"],
++				namesShort: ["日","月","火","水","木","金","土"]
++			},
++			months: {
++				names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""],
++				namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""]
++			},
++			AM: ["午前","午前","午前"],
++			PM: ["午後","午後","午後"],
++			eras: [{"name":"平成","start":null,"offset":1867},{"name":"昭和","start":-1812153600000,"offset":1911},{"name":"大正","start":-1357603200000,"offset":1925},{"name":"明治","start":60022080000,"offset":1988}],
++			twoDigitYearMax: 99,
++			patterns: {
++				d: "gg y/M/d",
++				D: "gg y'年'M'月'd'日'",
++				t: "H:mm",
++				T: "H:mm:ss",
++				f: "gg y'年'M'月'd'日' H:mm",
++				F: "gg y'年'M'月'd'日' H:mm:ss",
++				M: "M'月'd'日'",
++				Y: "gg y'年'M'月'"
++			}
++		}
++	}
++});
++
++}( this ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/jquery.mousewheel.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/jquery.mousewheel.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/jquery.mousewheel.js	(revision 15487)
+@@ -0,0 +1,101 @@
++/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)
++ * Licensed under the MIT License (LICENSE.txt).
++ *
++ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
++ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
++ * Thanks to: Seamus Leahy for adding deltaX and deltaY
++ *
++ * Version: 3.1.0
++ *
++ * Requires: 1.2.2+
++ */
++
++(function (factory) {
++    if (typeof define === 'function' && define.amd) {
++        // AMD. Register as an anonymous module.
++        define(['jquery'], factory);
++    } else {
++        // Browser globals
++        factory(jQuery);
++    }
++}(function ($) {
++
++    var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll'];
++    var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];
++    var lowestDelta, lowestDeltaXY;
++
++    if ($.event.fixHooks) {
++        for ( var i=toFix.length; i; ) {
++            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
++        }
++    }
++
++    $.event.special.mousewheel = {
++        setup: function() {
++            if ( this.addEventListener ) {
++                for ( var i=toBind.length; i; ) {
++                    this.addEventListener( toBind[--i], handler, false );
++                }
++            } else {
++                this.onmousewheel = handler;
++            }
++        },
++
++        teardown: function() {
++            if ( this.removeEventListener ) {
++                for ( var i=toBind.length; i; ) {
++                    this.removeEventListener( toBind[--i], handler, false );
++                }
++            } else {
++                this.onmousewheel = null;
++            }
++        }
++    };
++
++    $.fn.extend({
++        mousewheel: function(fn) {
++            return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
++        },
++
++        unmousewheel: function(fn) {
++            return this.unbind("mousewheel", fn);
++        }
++    });
++
++
++    function handler(event) {
++        var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0;
++        event = $.event.fix(orgEvent);
++        event.type = "mousewheel";
++
++        // Old school scrollwheel delta
++        if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta;  }
++        if ( orgEvent.detail     ) { delta = orgEvent.detail * -1; }
++
++        // New school wheel delta (wheel event)
++        if ( orgEvent.deltaY ) {
++            deltaY = orgEvent.deltaY * -1;
++            delta  = deltaY;
++        }
++        if ( orgEvent.deltaX ) {
++            deltaX = orgEvent.deltaX;
++            delta  = deltaX * -1;
++        }
++
++        // Webkit
++        if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY;      }
++        if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; }
++
++        absDelta = Math.abs(delta);
++        if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; }
++
++        absDeltaXY = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
++        if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; }
++
++        // Add event and delta to the front of the arguments
++        args.unshift(event, Math.floor(delta/lowestDelta), Math.floor(deltaX/lowestDeltaXY), Math.floor(deltaY/lowestDeltaXY));
++
++        return ($.event.dispatch || $.event.handle).apply(this, args);
++    }
++
++}));
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/qunit.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/qunit.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/qunit.css	(revision 15487)
+@@ -0,0 +1,244 @@
++/**
++ * QUnit v1.11.0 - A JavaScript Unit Testing Framework
++ *
++ * http://qunitjs.com
++ *
++ * Copyright 2012 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ */
++
++/** Font Family and Sizes */
++
++#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
++	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
++}
++
++#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
++#qunit-tests { font-size: smaller; }
++
++
++/** Resets */
++
++#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
++	margin: 0;
++	padding: 0;
++}
++
++
++/** Header */
++
++#qunit-header {
++	padding: 0.5em 0 0.5em 1em;
++
++	color: #8699a4;
++	background-color: #0d3349;
++
++	font-size: 1.5em;
++	line-height: 1em;
++	font-weight: normal;
++
++	border-radius: 5px 5px 0 0;
++	-moz-border-radius: 5px 5px 0 0;
++	-webkit-border-top-right-radius: 5px;
++	-webkit-border-top-left-radius: 5px;
++}
++
++#qunit-header a {
++	text-decoration: none;
++	color: #c2ccd1;
++}
++
++#qunit-header a:hover,
++#qunit-header a:focus {
++	color: #fff;
++}
++
++#qunit-testrunner-toolbar label {
++	display: inline-block;
++	padding: 0 .5em 0 .1em;
++}
++
++#qunit-banner {
++	height: 5px;
++}
++
++#qunit-testrunner-toolbar {
++	padding: 0.5em 0 0.5em 2em;
++	color: #5E740B;
++	background-color: #eee;
++	overflow: hidden;
++}
++
++#qunit-userAgent {
++	padding: 0.5em 0 0.5em 2.5em;
++	background-color: #2b81af;
++	color: #fff;
++	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
++}
++
++#qunit-modulefilter-container {
++	float: right;
++}
++
++/** Tests: Pass/Fail */
++
++#qunit-tests {
++	list-style-position: inside;
++}
++
++#qunit-tests li {
++	padding: 0.4em 0.5em 0.4em 2.5em;
++	border-bottom: 1px solid #fff;
++	list-style-position: inside;
++}
++
++#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
++	display: none;
++}
++
++#qunit-tests li strong {
++	cursor: pointer;
++}
++
++#qunit-tests li a {
++	padding: 0.5em;
++	color: #c2ccd1;
++	text-decoration: none;
++}
++#qunit-tests li a:hover,
++#qunit-tests li a:focus {
++	color: #000;
++}
++
++#qunit-tests li .runtime {
++	float: right;
++	font-size: smaller;
++}
++
++.qunit-assert-list {
++	margin-top: 0.5em;
++	padding: 0.5em;
++
++	background-color: #fff;
++
++	border-radius: 5px;
++	-moz-border-radius: 5px;
++	-webkit-border-radius: 5px;
++}
++
++.qunit-collapsed {
++	display: none;
++}
++
++#qunit-tests table {
++	border-collapse: collapse;
++	margin-top: .2em;
++}
++
++#qunit-tests th {
++	text-align: right;
++	vertical-align: top;
++	padding: 0 .5em 0 0;
++}
++
++#qunit-tests td {
++	vertical-align: top;
++}
++
++#qunit-tests pre {
++	margin: 0;
++	white-space: pre-wrap;
++	word-wrap: break-word;
++}
++
++#qunit-tests del {
++	background-color: #e0f2be;
++	color: #374e0c;
++	text-decoration: none;
++}
++
++#qunit-tests ins {
++	background-color: #ffcaca;
++	color: #500;
++	text-decoration: none;
++}
++
++/*** Test Counts */
++
++#qunit-tests b.counts                       { color: black; }
++#qunit-tests b.passed                       { color: #5E740B; }
++#qunit-tests b.failed                       { color: #710909; }
++
++#qunit-tests li li {
++	padding: 5px;
++	background-color: #fff;
++	border-bottom: none;
++	list-style-position: inside;
++}
++
++/*** Passing Styles */
++
++#qunit-tests li li.pass {
++	color: #3c510c;
++	background-color: #fff;
++	border-left: 10px solid #C6E746;
++}
++
++#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
++#qunit-tests .pass .test-name               { color: #366097; }
++
++#qunit-tests .pass .test-actual,
++#qunit-tests .pass .test-expected           { color: #999999; }
++
++#qunit-banner.qunit-pass                    { background-color: #C6E746; }
++
++/*** Failing Styles */
++
++#qunit-tests li li.fail {
++	color: #710909;
++	background-color: #fff;
++	border-left: 10px solid #EE5757;
++	white-space: pre;
++}
++
++#qunit-tests > li:last-child {
++	border-radius: 0 0 5px 5px;
++	-moz-border-radius: 0 0 5px 5px;
++	-webkit-border-bottom-right-radius: 5px;
++	-webkit-border-bottom-left-radius: 5px;
++}
++
++#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
++#qunit-tests .fail .test-name,
++#qunit-tests .fail .module-name             { color: #000000; }
++
++#qunit-tests .fail .test-actual             { color: #EE5757; }
++#qunit-tests .fail .test-expected           { color: green;   }
++
++#qunit-banner.qunit-fail                    { background-color: #EE5757; }
++
++
++/** Result */
++
++#qunit-testresult {
++	padding: 0.5em 0.5em 0.5em 2.5em;
++
++	color: #2b81af;
++	background-color: #D2E0E6;
++
++	border-bottom: 1px solid white;
++}
++#qunit-testresult .module-name {
++	font-weight: bold;
++}
++
++/** Fixture */
++
++#qunit-fixture {
++	position: absolute;
++	top: -10000px;
++	left: -10000px;
++	width: 1000px;
++	height: 1000px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/jshint.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/jshint.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/jshint.js	(revision 15487)
+@@ -0,0 +1,4835 @@
++/*!
++ * JSHint, by JSHint Community.
++ *
++ * This file (and this file only) is licensed under the same slightly modified
++ * MIT license that JSLint is. It stops evil-doers everywhere.
++ *
++ * JSHint is a derivative work of JSLint:
++ *
++ *   Copyright (c) 2002 Douglas Crockford  (www.JSLint.com)
++ *
++ *   Permission is hereby granted, free of charge, to any person obtaining
++ *   a copy of this software and associated documentation files (the "Software"),
++ *   to deal in the Software without restriction, including without limitation
++ *   the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ *   and/or sell copies of the Software, and to permit persons to whom
++ *   the Software is furnished to do so, subject to the following conditions:
++ *
++ *   The above copyright notice and this permission notice shall be included
++ *   in all copies or substantial portions of the Software.
++ *
++ *   The Software shall be used for Good, not Evil.
++ *
++ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ *   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ *   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ *   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ *   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ *   DEALINGS IN THE SOFTWARE.
++ *
++ */
++
++/*
++ JSHINT is a global function. It takes two parameters.
++
++     var myResult = JSHINT(source, option);
++
++ The first parameter is either a string or an array of strings. If it is a
++ string, it will be split on '\n' or '\r'. If it is an array of strings, it
++ is assumed that each string represents one line. The source can be a
++ JavaScript text or a JSON text.
++
++ The second parameter is an optional object of options which control the
++ operation of JSHINT. Most of the options are booleans: They are all
++ optional and have a default value of false. One of the options, predef,
++ can be an array of names, which will be used to declare global variables,
++ or an object whose keys are used as global names, with a boolean value
++ that determines if they are assignable.
++
++ If it checks out, JSHINT returns true. Otherwise, it returns false.
++
++ If false, you can inspect JSHINT.errors to find out the problems.
++ JSHINT.errors is an array of objects containing these members:
++
++ {
++     line      : The line (relative to 1) at which the lint was found
++     character : The character (relative to 1) at which the lint was found
++     reason    : The problem
++     evidence  : The text line in which the problem occurred
++     raw       : The raw message before the details were inserted
++     a         : The first detail
++     b         : The second detail
++     c         : The third detail
++     d         : The fourth detail
++ }
++
++ If a fatal error was found, a null will be the last element of the
++ JSHINT.errors array.
++
++ You can request a data structure which contains JSHint's results.
++
++     var myData = JSHINT.data();
++
++ It returns a structure with this form:
++
++ {
++     errors: [
++         {
++             line: NUMBER,
++             character: NUMBER,
++             reason: STRING,
++             evidence: STRING
++         }
++     ],
++     functions: [
++         name: STRING,
++         line: NUMBER,
++         character: NUMBER,
++         last: NUMBER,
++         lastcharacter: NUMBER,
++         param: [
++             STRING
++         ],
++         closure: [
++             STRING
++         ],
++         var: [
++             STRING
++         ],
++         exception: [
++             STRING
++         ],
++         outer: [
++             STRING
++         ],
++         unused: [
++             STRING
++         ],
++         global: [
++             STRING
++         ],
++         label: [
++             STRING
++         ]
++     ],
++     globals: [
++         STRING
++     ],
++     member: {
++         STRING: NUMBER
++     },
++     unused: [
++         {
++             name: STRING,
++             line: NUMBER
++         }
++     ],
++     implieds: [
++         {
++             name: STRING,
++             line: NUMBER
++         }
++     ],
++     urls: [
++         STRING
++     ],
++     json: BOOLEAN
++ }
++
++ Empty arrays will not be included.
++
++*/
++
++/*jshint
++ evil: true, nomen: false, onevar: false, regexp: false, strict: true, boss: true,
++ undef: true, maxlen: 100, indent: 4, quotmark: double, unused: true
++*/
++
++/*members "\b", "\t", "\n", "\f", "\r", "!=", "!==", "\"", "%", "(begin)",
++ "(breakage)", "(character)", "(context)", "(error)", "(explicitNewcap)", "(global)",
++ "(identifier)", "(last)", "(lastcharacter)", "(line)", "(loopage)", "(metrics)",
++ "(name)", "(onevar)", "(params)", "(scope)", "(statement)", "(verb)", "(tokens)", "(catch)",
++ "*", "+", "++", "-", "--", "\/", "<", "<=", "==",
++ "===", ">", ">=", $, $$, $A, $F, $H, $R, $break, $continue, $w, Abstract, Ajax,
++ __filename, __dirname, ActiveXObject, Array, ArrayBuffer, ArrayBufferView, Audio,
++ Autocompleter, Asset, Boolean, Builder, Buffer, Browser, Blob, COM, CScript, Canvas,
++ CustomAnimation, Class, Control, ComplexityCount, Chain, Color, Cookie, Core, DataView, Date,
++ Debug, Draggable, Draggables, Droppables, Document, DomReady, DOMEvent, DOMReady, DOMParser,
++ Drag, E, Enumerator, Enumerable, Element, Elements, Error, Effect, EvalError, Event,
++ Events, FadeAnimation, Field, Flash, Float32Array, Float64Array, Form,
++ FormField, Frame, FormData, Function, Fx, GetObject, Group, Hash, HotKey,
++ HTMLElement, HTMLAnchorElement, HTMLBaseElement, HTMLBlockquoteElement,
++ HTMLBodyElement, HTMLBRElement, HTMLButtonElement, HTMLCanvasElement, HTMLDirectoryElement,
++ HTMLDivElement, HTMLDListElement, HTMLFieldSetElement,
++ HTMLFontElement, HTMLFormElement, HTMLFrameElement, HTMLFrameSetElement,
++ HTMLHeadElement, HTMLHeadingElement, HTMLHRElement, HTMLHtmlElement,
++ HTMLIFrameElement, HTMLImageElement, HTMLInputElement, HTMLIsIndexElement,
++ HTMLLabelElement, HTMLLayerElement, HTMLLegendElement, HTMLLIElement,
++ HTMLLinkElement, HTMLMapElement, HTMLMenuElement, HTMLMetaElement,
++ HTMLModElement, HTMLObjectElement, HTMLOListElement, HTMLOptGroupElement,
++ HTMLOptionElement, HTMLParagraphElement, HTMLParamElement, HTMLPreElement,
++ HTMLQuoteElement, HTMLScriptElement, HTMLSelectElement, HTMLStyleElement,
++ HtmlTable, HTMLTableCaptionElement, HTMLTableCellElement, HTMLTableColElement,
++ HTMLTableElement, HTMLTableRowElement, HTMLTableSectionElement,
++ HTMLTextAreaElement, HTMLTitleElement, HTMLUListElement, HTMLVideoElement,
++ Iframe, IframeShim, Image, importScripts, Int16Array, Int32Array, Int8Array,
++ Insertion, InputValidator, JSON, Keyboard, Locale, LN10, LN2, LOG10E, LOG2E,
++ MAX_VALUE, MIN_VALUE, Map, Mask, Math, MenuItem, MessageChannel, MessageEvent, MessagePort,
++ MoveAnimation, MooTools, MutationObserver, NaN, Native, NEGATIVE_INFINITY, Node, NodeFilter,
++ Number, Object, ObjectRange,
++ Option, Options, OverText, PI, POSITIVE_INFINITY, PeriodicalExecuter, Point, Position, Prototype,
++ RangeError, Rectangle, ReferenceError, RegExp, ResizeAnimation, Request, RotateAnimation, Set,
++ SQRT1_2, SQRT2, ScrollBar, ScriptEngine, ScriptEngineBuildVersion,
++ ScriptEngineMajorVersion, ScriptEngineMinorVersion, Scriptaculous, Scroller,
++ Slick, Slider, Selector, SharedWorker, String, Style, SyntaxError, Sortable, Sortables,
++ SortableObserver, Sound, Spinner, System, Swiff, Text, TextArea, Template,
++ Timer, Tips, Type, TypeError, Toggle, Try, "use strict", unescape, URI, URIError, URL,
++ VBArray, WeakMap, WSH, WScript, XDomainRequest, Web, Window, XMLDOM, XMLHttpRequest, XMLSerializer,
++ XPathEvaluator, XPathException, XPathExpression, XPathNamespace, XPathNSResolver, XPathResult,
++ "\\", a, abs, addEventListener, address, alert, apply, applicationCache, arguments, arity,
++ asi, atob, b, basic, basicToken, bitwise, blacklist, block, blur, boolOptions, boss,
++ browser, btoa, c, call, callee, caller, camelcase, cases, charAt, charCodeAt, character,
++ clearInterval, clearTimeout, close, closed, closure, comment, complexityCount, condition,
++ confirm, console, constructor, content, couch, create, css, curly, d, data, datalist, dd, debug,
++ decodeURI, decodeURIComponent, defaultStatus, defineClass, deserialize, devel, document,
++ dojo, dijit, dojox, define, else, emit, encodeURI, encodeURIComponent, elem,
++ eqeq, eqeqeq, eqnull, errors, es5, escape, esnext, eval, event, evidence, evil,
++ ex, exception, exec, exps, expr, exports, FileReader, first, floor, focus, forEach,
++ forin, fragment, frames, from, fromCharCode, fud, funcscope, funct, function, functions,
++ g, gc, getComputedStyle, getRow, getter, getterToken, GLOBAL, global, globals, globalstrict,
++ hasOwnProperty, help, history, i, id, identifier, immed, implieds, importPackage, include,
++ indent, indexOf, init, ins, internals, instanceOf, isAlpha, isApplicationRunning, isArray,
++ isDigit, isFinite, isNaN, iterator, java, join, jshint,
++ JSHINT, json, jquery, jQuery, keys, label, labelled, last, lastcharacter, lastsemic, laxbreak,
++ laxcomma, latedef, lbp, led, left, length, line, load, loadClass, localStorage, location,
++ log, loopfunc, m, match, max, maxcomplexity, maxdepth, maxerr, maxlen, maxstatements, maxparams,
++ member, message, meta, module, moveBy, moveTo, mootools, multistr, name, navigator, new, newcap,
++ nestedBlockDepth, noarg, node, noempty, nomen, nonew, nonstandard, nud, onbeforeunload, onblur,
++ onerror, onevar, onecase, onfocus, onload, onresize, onunload, open, openDatabase, openURL,
++ opener, opera, options, outer, param, parent, parseFloat, parseInt, passfail, plusplus,
++ postMessage, pop, predef, print, process, prompt, proto, prototype, prototypejs, provides, push,
++ quit, quotmark, range, raw, reach, reason, regexp, readFile, readUrl, regexdash,
++ removeEventListener, replace, report, require, reserved, resizeBy, resizeTo, resolvePath,
++ resumeUpdates, respond, rhino, right, runCommand, scroll, scope, screen, scripturl, scrollBy,
++ scrollTo, scrollbar, search, seal, self, send, serialize, sessionStorage, setInterval, setTimeout,
++ setter, setterToken, shift, slice, smarttabs, sort, spawn, split, statement, statementCount, stack,
++ status, start, strict, sub, substr, supernew, shadow, supplant, sum, sync, test, toLowerCase,
++ toString, toUpperCase, toint32, token, tokens, top, trailing, type, typeOf, Uint16Array,
++ Uint32Array, Uint8Array, undef, undefs, unused, urls, validthis, value, valueOf, var, vars,
++ version, verifyMaxParametersPerFunction, verifyMaxStatementsPerFunction,
++ verifyMaxComplexityPerFunction, verifyMaxNestedBlockDepthPerFunction, WebSocket, withstmt, white,
++ window, windows, Worker, worker, wsh, yui, YUI, Y, YUI_config*/
++
++/*global exports: false */
++
++// We build the application inside a function so that we produce only a single
++// global variable. That function will be invoked immediately, and its return
++// value is the JSHINT function itself.
++
++var JSHINT = (function () {
++    "use strict";
++
++    var anonname,       // The guessed name for anonymous functions.
++
++// These are operators that should not be used with the ! operator.
++
++        bang = {
++            "<"  : true,
++            "<=" : true,
++            "==" : true,
++            "===": true,
++            "!==": true,
++            "!=" : true,
++            ">"  : true,
++            ">=" : true,
++            "+"  : true,
++            "-"  : true,
++            "*"  : true,
++            "/"  : true,
++            "%"  : true
++        },
++
++        // These are the JSHint boolean options.
++        boolOptions = {
++            asi         : true, // if automatic semicolon insertion should be tolerated
++            bitwise     : true, // if bitwise operators should not be allowed
++            boss        : true, // if advanced usage of assignments should be allowed
++            browser     : true, // if the standard browser globals should be predefined
++            camelcase   : true, // if identifiers should be required in camel case
++            couch       : true, // if CouchDB globals should be predefined
++            curly       : true, // if curly braces around all blocks should be required
++            debug       : true, // if debugger statements should be allowed
++            devel       : true, // if logging globals should be predefined (console,
++                                // alert, etc.)
++            dojo        : true, // if Dojo Toolkit globals should be predefined
++            eqeqeq      : true, // if === should be required
++            eqnull      : true, // if == null comparisons should be tolerated
++            es5         : true, // if ES5 syntax should be allowed
++            esnext      : true, // if es.next specific syntax should be allowed
++            evil        : true, // if eval should be allowed
++            expr        : true, // if ExpressionStatement should be allowed as Programs
++            forin       : true, // if for in statements must filter
++            funcscope   : true, // if only function scope should be used for scope tests
++            globalstrict: true, // if global "use strict"; should be allowed (also
++                                // enables 'strict')
++            immed       : true, // if immediate invocations must be wrapped in parens
++            iterator    : true, // if the `__iterator__` property should be allowed
++            jquery      : true, // if jQuery globals should be predefined
++            lastsemic   : true, // if semicolons may be ommitted for the trailing
++                                // statements inside of a one-line blocks.
++            latedef     : true, // if the use before definition should not be tolerated
++            laxbreak    : true, // if line breaks should not be checked
++            laxcomma    : true, // if line breaks should not be checked around commas
++            loopfunc    : true, // if functions should be allowed to be defined within
++                                // loops
++            mootools    : true, // if MooTools globals should be predefined
++            multistr    : true, // allow multiline strings
++            newcap      : true, // if constructor names must be capitalized
++            noarg       : true, // if arguments.caller and arguments.callee should be
++                                // disallowed
++            node        : true, // if the Node.js environment globals should be
++                                // predefined
++            noempty     : true, // if empty blocks should be disallowed
++            nonew       : true, // if using `new` for side-effects should be disallowed
++            nonstandard : true, // if non-standard (but widely adopted) globals should
++                                // be predefined
++            nomen       : true, // if names should be checked
++            onevar      : true, // if only one var statement per function should be
++                                // allowed
++            onecase     : true, // if one case switch statements should be allowed
++            passfail    : true, // if the scan should stop on first error
++            plusplus    : true, // if increment/decrement should not be allowed
++            proto       : true, // if the `__proto__` property should be allowed
++            prototypejs : true, // if Prototype and Scriptaculous globals should be
++                                // predefined
++            regexdash   : true, // if unescaped first/last dash (-) inside brackets
++                                // should be tolerated
++            regexp      : true, // if the . should not be allowed in regexp literals
++            rhino       : true, // if the Rhino environment globals should be predefined
++            undef       : true, // if variables should be declared before used
++            unused      : true, // if variables should be always used
++            scripturl   : true, // if script-targeted URLs should be tolerated
++            shadow      : true, // if variable shadowing should be tolerated
++            smarttabs   : true, // if smarttabs should be tolerated
++                                // (http://www.emacswiki.org/emacs/SmartTabs)
++            strict      : true, // require the "use strict"; pragma
++            sub         : true, // if all forms of subscript notation are tolerated
++            supernew    : true, // if `new function () { ... };` and `new Object;`
++                                // should be tolerated
++            trailing    : true, // if trailing whitespace rules apply
++            validthis   : true, // if 'this' inside a non-constructor function is valid.
++                                // This is a function scoped option only.
++            withstmt    : true, // if with statements should be allowed
++            white       : true, // if strict whitespace rules apply
++            worker      : true, // if Web Worker script symbols should be allowed
++            wsh         : true, // if the Windows Scripting Host environment globals
++                                // should be predefined
++            yui         : true  // YUI variables should be predefined
++        },
++
++        // These are the JSHint options that can take any value
++        // (we use this object to detect invalid options)
++        valOptions = {
++            maxlen       : false,
++            indent       : false,
++            maxerr       : false,
++            predef       : false,
++            quotmark     : false, //'single'|'double'|true
++            scope        : false,
++            maxstatements: false, // {int} max statements per function
++            maxdepth     : false, // {int} max nested block depth per function
++            maxparams    : false, // {int} max params per function
++            maxcomplexity: false  // {int} max cyclomatic complexity per function
++        },
++
++        // These are JSHint boolean options which are shared with JSLint
++        // where the definition in JSHint is opposite JSLint
++        invertedOptions = {
++            bitwise     : true,
++            forin       : true,
++            newcap      : true,
++            nomen       : true,
++            plusplus    : true,
++            regexp      : true,
++            undef       : true,
++            white       : true,
++
++            // Inverted and renamed, use JSHint name here
++            eqeqeq      : true,
++            onevar      : true
++        },
++
++        // These are JSHint boolean options which are shared with JSLint
++        // where the name has been changed but the effect is unchanged
++        renamedOptions = {
++            eqeq        : "eqeqeq",
++            vars        : "onevar",
++            windows     : "wsh"
++        },
++
++
++        // browser contains a set of global names which are commonly provided by a
++        // web browser environment.
++        browser = {
++            ArrayBuffer              :  false,
++            ArrayBufferView          :  false,
++            Audio                    :  false,
++            Blob                     :  false,
++            addEventListener         :  false,
++            applicationCache         :  false,
++            atob                     :  false,
++            blur                     :  false,
++            btoa                     :  false,
++            clearInterval            :  false,
++            clearTimeout             :  false,
++            close                    :  false,
++            closed                   :  false,
++            DataView                 :  false,
++            DOMParser                :  false,
++            defaultStatus            :  false,
++            document                 :  false,
++            event                    :  false,
++            FileReader               :  false,
++            Float32Array             :  false,
++            Float64Array             :  false,
++            FormData                 :  false,
++            focus                    :  false,
++            frames                   :  false,
++            getComputedStyle         :  false,
++            HTMLElement              :  false,
++            HTMLAnchorElement        :  false,
++            HTMLBaseElement          :  false,
++            HTMLBlockquoteElement    :  false,
++            HTMLBodyElement          :  false,
++            HTMLBRElement            :  false,
++            HTMLButtonElement        :  false,
++            HTMLCanvasElement        :  false,
++            HTMLDirectoryElement     :  false,
++            HTMLDivElement           :  false,
++            HTMLDListElement         :  false,
++            HTMLFieldSetElement      :  false,
++            HTMLFontElement          :  false,
++            HTMLFormElement          :  false,
++            HTMLFrameElement         :  false,
++            HTMLFrameSetElement      :  false,
++            HTMLHeadElement          :  false,
++            HTMLHeadingElement       :  false,
++            HTMLHRElement            :  false,
++            HTMLHtmlElement          :  false,
++            HTMLIFrameElement        :  false,
++            HTMLImageElement         :  false,
++            HTMLInputElement         :  false,
++            HTMLIsIndexElement       :  false,
++            HTMLLabelElement         :  false,
++            HTMLLayerElement         :  false,
++            HTMLLegendElement        :  false,
++            HTMLLIElement            :  false,
++            HTMLLinkElement          :  false,
++            HTMLMapElement           :  false,
++            HTMLMenuElement          :  false,
++            HTMLMetaElement          :  false,
++            HTMLModElement           :  false,
++            HTMLObjectElement        :  false,
++            HTMLOListElement         :  false,
++            HTMLOptGroupElement      :  false,
++            HTMLOptionElement        :  false,
++            HTMLParagraphElement     :  false,
++            HTMLParamElement         :  false,
++            HTMLPreElement           :  false,
++            HTMLQuoteElement         :  false,
++            HTMLScriptElement        :  false,
++            HTMLSelectElement        :  false,
++            HTMLStyleElement         :  false,
++            HTMLTableCaptionElement  :  false,
++            HTMLTableCellElement     :  false,
++            HTMLTableColElement      :  false,
++            HTMLTableElement         :  false,
++            HTMLTableRowElement      :  false,
++            HTMLTableSectionElement  :  false,
++            HTMLTextAreaElement      :  false,
++            HTMLTitleElement         :  false,
++            HTMLUListElement         :  false,
++            HTMLVideoElement         :  false,
++            history                  :  false,
++            Int16Array               :  false,
++            Int32Array               :  false,
++            Int8Array                :  false,
++            Image                    :  false,
++            length                   :  false,
++            localStorage             :  false,
++            location                 :  false,
++            MessageChannel           :  false,
++            MessageEvent             :  false,
++            MessagePort              :  false,
++            moveBy                   :  false,
++            moveTo                   :  false,
++            MutationObserver         :  false,
++            name                     :  false,
++            Node                     :  false,
++            NodeFilter               :  false,
++            navigator                :  false,
++            onbeforeunload           :  true,
++            onblur                   :  true,
++            onerror                  :  true,
++            onfocus                  :  true,
++            onload                   :  true,
++            onresize                 :  true,
++            onunload                 :  true,
++            open                     :  false,
++            openDatabase             :  false,
++            opener                   :  false,
++            Option                   :  false,
++            parent                   :  false,
++            print                    :  false,
++            removeEventListener      :  false,
++            resizeBy                 :  false,
++            resizeTo                 :  false,
++            screen                   :  false,
++            scroll                   :  false,
++            scrollBy                 :  false,
++            scrollTo                 :  false,
++            sessionStorage           :  false,
++            setInterval              :  false,
++            setTimeout               :  false,
++            SharedWorker             :  false,
++            status                   :  false,
++            top                      :  false,
++            Uint16Array              :  false,
++            Uint32Array              :  false,
++            Uint8Array               :  false,
++            WebSocket                :  false,
++            window                   :  false,
++            Worker                   :  false,
++            XMLHttpRequest           :  false,
++            XMLSerializer            :  false,
++            XPathEvaluator           :  false,
++            XPathException           :  false,
++            XPathExpression          :  false,
++            XPathNamespace           :  false,
++            XPathNSResolver          :  false,
++            XPathResult              :  false
++        },
++
++        couch = {
++            "require" : false,
++            respond   : false,
++            getRow    : false,
++            emit      : false,
++            send      : false,
++            start     : false,
++            sum       : false,
++            log       : false,
++            exports   : false,
++            module    : false,
++            provides  : false
++        },
++
++        declared, // Globals that were declared using /*global ... */ syntax.
++
++        devel = {
++            alert   : false,
++            confirm : false,
++            console : false,
++            Debug   : false,
++            opera   : false,
++            prompt  : false
++        },
++
++        dojo = {
++            dojo      : false,
++            dijit     : false,
++            dojox     : false,
++            define    : false,
++            "require" : false
++        },
++
++        funct,          // The current function
++
++        functionicity = [
++            "closure", "exception", "global", "label",
++            "outer", "unused", "var"
++        ],
++
++        functions,      // All of the functions
++
++        global,         // The global scope
++        implied,        // Implied globals
++        inblock,
++        indent,
++        jsonmode,
++
++        jquery = {
++            "$"    : false,
++            jQuery : false
++        },
++
++        lines,
++        lookahead,
++        member,
++        membersOnly,
++
++        mootools = {
++            "$"             : false,
++            "$$"            : false,
++            Asset           : false,
++            Browser         : false,
++            Chain           : false,
++            Class           : false,
++            Color           : false,
++            Cookie          : false,
++            Core            : false,
++            Document        : false,
++            DomReady        : false,
++            DOMEvent        : false,
++            DOMReady        : false,
++            Drag            : false,
++            Element         : false,
++            Elements        : false,
++            Event           : false,
++            Events          : false,
++            Fx              : false,
++            Group           : false,
++            Hash            : false,
++            HtmlTable       : false,
++            Iframe          : false,
++            IframeShim      : false,
++            InputValidator  : false,
++            instanceOf      : false,
++            Keyboard        : false,
++            Locale          : false,
++            Mask            : false,
++            MooTools        : false,
++            Native          : false,
++            Options         : false,
++            OverText        : false,
++            Request         : false,
++            Scroller        : false,
++            Slick           : false,
++            Slider          : false,
++            Sortables       : false,
++            Spinner         : false,
++            Swiff           : false,
++            Tips            : false,
++            Type            : false,
++            typeOf          : false,
++            URI             : false,
++            Window          : false
++        },
++
++        nexttoken,
++
++        node = {
++            __filename    : false,
++            __dirname     : false,
++            Buffer        : false,
++            console       : false,
++            exports       : true,  // In Node it is ok to exports = module.exports = foo();
++            GLOBAL        : false,
++            global        : false,
++            module        : false,
++            process       : false,
++            require       : false,
++            setTimeout    : false,
++            clearTimeout  : false,
++            setInterval   : false,
++            clearInterval : false
++        },
++
++        noreach,
++        option,
++        predefined,     // Global variables defined by option
++        prereg,
++        prevtoken,
++
++        prototypejs = {
++            "$"               : false,
++            "$$"              : false,
++            "$A"              : false,
++            "$F"              : false,
++            "$H"              : false,
++            "$R"              : false,
++            "$break"          : false,
++            "$continue"       : false,
++            "$w"              : false,
++            Abstract          : false,
++            Ajax              : false,
++            Class             : false,
++            Enumerable        : false,
++            Element           : false,
++            Event             : false,
++            Field             : false,
++            Form              : false,
++            Hash              : false,
++            Insertion         : false,
++            ObjectRange       : false,
++            PeriodicalExecuter: false,
++            Position          : false,
++            Prototype         : false,
++            Selector          : false,
++            Template          : false,
++            Toggle            : false,
++            Try               : false,
++            Autocompleter     : false,
++            Builder           : false,
++            Control           : false,
++            Draggable         : false,
++            Draggables        : false,
++            Droppables        : false,
++            Effect            : false,
++            Sortable          : false,
++            SortableObserver  : false,
++            Sound             : false,
++            Scriptaculous     : false
++        },
++
++        quotmark,
++
++        rhino = {
++            defineClass  : false,
++            deserialize  : false,
++            gc           : false,
++            help         : false,
++            importPackage: false,
++            "java"       : false,
++            load         : false,
++            loadClass    : false,
++            print        : false,
++            quit         : false,
++            readFile     : false,
++            readUrl      : false,
++            runCommand   : false,
++            seal         : false,
++            serialize    : false,
++            spawn        : false,
++            sync         : false,
++            toint32      : false,
++            version      : false
++        },
++
++        scope,      // The current scope
++        stack,
++
++        // standard contains the global names that are provided by the
++        // ECMAScript standard.
++        standard = {
++            Array               : false,
++            Boolean             : false,
++            Date                : false,
++            decodeURI           : false,
++            decodeURIComponent  : false,
++            encodeURI           : false,
++            encodeURIComponent  : false,
++            Error               : false,
++            "eval"              : false,
++            EvalError           : false,
++            Function            : false,
++            hasOwnProperty      : false,
++            isFinite            : false,
++            isNaN               : false,
++            JSON                : false,
++            Map                 : false,
++            Math                : false,
++            NaN                 : false,
++            Number              : false,
++            Object              : false,
++            parseInt            : false,
++            parseFloat          : false,
++            RangeError          : false,
++            ReferenceError      : false,
++            RegExp              : false,
++            Set                 : false,
++            String              : false,
++            SyntaxError         : false,
++            TypeError           : false,
++            URIError            : false,
++            WeakMap             : false
++        },
++
++        // widely adopted global names that are not part of ECMAScript standard
++        nonstandard = {
++            escape              : false,
++            unescape            : false
++        },
++
++        directive,
++        syntax = {},
++        tab,
++        token,
++        unuseds,
++        urls,
++        useESNextSyntax,
++        warnings,
++
++        worker = {
++            importScripts       : true,
++            postMessage         : true,
++            self                : true
++        },
++
++        wsh = {
++            ActiveXObject             : true,
++            Enumerator                : true,
++            GetObject                 : true,
++            ScriptEngine              : true,
++            ScriptEngineBuildVersion  : true,
++            ScriptEngineMajorVersion  : true,
++            ScriptEngineMinorVersion  : true,
++            VBArray                   : true,
++            WSH                       : true,
++            WScript                   : true,
++            XDomainRequest            : true
++        },
++
++        yui = {
++            YUI             : false,
++            Y               : false,
++            YUI_config      : false
++        };
++    // Regular expressions. Some of these are stupidly long.
++    var ax, cx, tx, nx, nxg, lx, ix, jx, ft;
++    (function () {
++        /*jshint maxlen:300 */
++
++        // unsafe comment or string
++        ax = /@cc|<\/?|script|\]\s*\]|<\s*!|&lt/i;
++
++        // unsafe characters that are silently deleted by one or more browsers
++        cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
++
++        // token
++        tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/=(?!(\S*\/[gim]?))|\/(\*(jshint|jslint|members?|global)?|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/;
++
++        // characters in strings that need escapement
++        nx = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
++        nxg = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
++
++        // star slash
++        lx = /\*\//;
++
++        // identifier
++        ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;
++
++        // javascript url
++        jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i;
++
++        // catches /* falls through */ comments
++        ft = /^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/;
++    }());
++
++    function F() {}     // Used by Object.create
++
++    function is_own(object, name) {
++        // The object.hasOwnProperty method fails when the property under consideration
++        // is named 'hasOwnProperty'. So we have to use this more convoluted form.
++        return Object.prototype.hasOwnProperty.call(object, name);
++    }
++
++    function checkOption(name, t) {
++        if (valOptions[name] === undefined && boolOptions[name] === undefined) {
++            warning("Bad option: '" + name + "'.", t);
++        }
++    }
++
++    function isString(obj) {
++        return Object.prototype.toString.call(obj) === "[object String]";
++    }
++
++    // Provide critical ES5 functions to ES3.
++
++    if (typeof Array.isArray !== "function") {
++        Array.isArray = function (o) {
++            return Object.prototype.toString.apply(o) === "[object Array]";
++        };
++    }
++
++    if (!Array.prototype.forEach) {
++        Array.prototype.forEach = function (fn, scope) {
++            var len = this.length;
++
++            for (var i = 0; i < len; i++) {
++                fn.call(scope || this, this[i], i, this);
++            }
++        };
++    }
++
++    if (!Array.prototype.indexOf) {
++        Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
++            if (this === null || this === undefined) {
++                throw new TypeError();
++            }
++
++            var t = new Object(this);
++            var len = t.length >>> 0;
++
++            if (len === 0) {
++                return -1;
++            }
++
++            var n = 0;
++            if (arguments.length > 0) {
++                n = Number(arguments[1]);
++                if (n != n) { // shortcut for verifying if it's NaN
++                    n = 0;
++                } else if (n !== 0 && n != Infinity && n != -Infinity) {
++                    n = (n > 0 || -1) * Math.floor(Math.abs(n));
++                }
++            }
++
++            if (n >= len) {
++                return -1;
++            }
++
++            var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
++            for (; k < len; k++) {
++                if (k in t && t[k] === searchElement) {
++                    return k;
++                }
++            }
++
++            return -1;
++        };
++    }
++
++    if (typeof Object.create !== "function") {
++        Object.create = function (o) {
++            F.prototype = o;
++            return new F();
++        };
++    }
++
++    if (typeof Object.keys !== "function") {
++        Object.keys = function (o) {
++            var a = [], k;
++            for (k in o) {
++                if (is_own(o, k)) {
++                    a.push(k);
++                }
++            }
++            return a;
++        };
++    }
++
++    // Non standard methods
++
++    function isAlpha(str) {
++        return (str >= "a" && str <= "z\uffff") ||
++            (str >= "A" && str <= "Z\uffff");
++    }
++
++    function isDigit(str) {
++        return (str >= "0" && str <= "9");
++    }
++
++    function isIdentifier(token, value) {
++        if (!token)
++            return false;
++
++        if (!token.identifier || token.value !== value)
++            return false;
++
++        return true;
++    }
++
++    function supplant(str, data) {
++        return str.replace(/\{([^{}]*)\}/g, function (a, b) {
++            var r = data[b];
++            return typeof r === "string" || typeof r === "number" ? r : a;
++        });
++    }
++
++    function combine(t, o) {
++        var n;
++        for (n in o) {
++            if (is_own(o, n) && !is_own(JSHINT.blacklist, n)) {
++                t[n] = o[n];
++            }
++        }
++    }
++
++    function updatePredefined() {
++        Object.keys(JSHINT.blacklist).forEach(function (key) {
++            delete predefined[key];
++        });
++    }
++
++    function assume() {
++        if (option.couch) {
++            combine(predefined, couch);
++        }
++
++        if (option.rhino) {
++            combine(predefined, rhino);
++        }
++
++        if (option.prototypejs) {
++            combine(predefined, prototypejs);
++        }
++
++        if (option.node) {
++            combine(predefined, node);
++            option.globalstrict = true;
++        }
++
++        if (option.devel) {
++            combine(predefined, devel);
++        }
++
++        if (option.dojo) {
++            combine(predefined, dojo);
++        }
++
++        if (option.browser) {
++            combine(predefined, browser);
++        }
++
++        if (option.nonstandard) {
++            combine(predefined, nonstandard);
++        }
++
++        if (option.jquery) {
++            combine(predefined, jquery);
++        }
++
++        if (option.mootools) {
++            combine(predefined, mootools);
++        }
++
++        if (option.worker) {
++            combine(predefined, worker);
++        }
++
++        if (option.wsh) {
++            combine(predefined, wsh);
++        }
++
++        if (option.esnext) {
++            useESNextSyntax();
++        }
++
++        if (option.globalstrict && option.strict !== false) {
++            option.strict = true;
++        }
++
++        if (option.yui) {
++            combine(predefined, yui);
++        }
++    }
++
++
++    // Produce an error warning.
++    function quit(message, line, chr) {
++        var percentage = Math.floor((line / lines.length) * 100);
++
++        throw {
++            name: "JSHintError",
++            line: line,
++            character: chr,
++            message: message + " (" + percentage + "% scanned).",
++            raw: message
++        };
++    }
++
++    function isundef(scope, m, t, a) {
++        return JSHINT.undefs.push([scope, m, t, a]);
++    }
++
++    function warning(m, t, a, b, c, d) {
++        var ch, l, w;
++        t = t || nexttoken;
++        if (t.id === "(end)") {  // `~
++            t = token;
++        }
++        l = t.line || 0;
++        ch = t.from || 0;
++        w = {
++            id: "(error)",
++            raw: m,
++            evidence: lines[l - 1] || "",
++            line: l,
++            character: ch,
++            scope: JSHINT.scope,
++            a: a,
++            b: b,
++            c: c,
++            d: d
++        };
++        w.reason = supplant(m, w);
++        JSHINT.errors.push(w);
++        if (option.passfail) {
++            quit("Stopping. ", l, ch);
++        }
++        warnings += 1;
++        if (warnings >= option.maxerr) {
++            quit("Too many errors.", l, ch);
++        }
++        return w;
++    }
++
++    function warningAt(m, l, ch, a, b, c, d) {
++        return warning(m, {
++            line: l,
++            from: ch
++        }, a, b, c, d);
++    }
++
++    function error(m, t, a, b, c, d) {
++        warning(m, t, a, b, c, d);
++    }
++
++    function errorAt(m, l, ch, a, b, c, d) {
++        return error(m, {
++            line: l,
++            from: ch
++        }, a, b, c, d);
++    }
++
++    // Tracking of "internal" scripts, like eval containing a static string
++    function addInternalSrc(elem, src) {
++        var i;
++        i = {
++            id: "(internal)",
++            elem: elem,
++            value: src
++        };
++        JSHINT.internals.push(i);
++        return i;
++    }
++
++
++// lexical analysis and token construction
++
++    var lex = (function lex() {
++        var character, from, line, s;
++
++// Private lex methods
++
++        function nextLine() {
++            var at,
++                match,
++                tw; // trailing whitespace check
++
++            if (line >= lines.length)
++                return false;
++
++            character = 1;
++            s = lines[line];
++            line += 1;
++
++            // If smarttabs option is used check for spaces followed by tabs only.
++            // Otherwise check for any occurence of mixed tabs and spaces.
++            // Tabs and one space followed by block comment is allowed.
++            if (option.smarttabs) {
++                // negative look-behind for "//"
++                match = s.match(/(\/\/)? \t/);
++                at = match && !match[1] ? 0 : -1;
++            } else {
++                at = s.search(/ \t|\t [^\*]/);
++            }
++
++            if (at >= 0)
++                warningAt("Mixed spaces and tabs.", line, at + 1);
++
++            s = s.replace(/\t/g, tab);
++            at = s.search(cx);
++
++            if (at >= 0)
++                warningAt("Unsafe character.", line, at);
++
++            if (option.maxlen && option.maxlen < s.length)
++                warningAt("Line too long.", line, s.length);
++
++            // Check for trailing whitespaces
++            tw = option.trailing && s.match(/^(.*?)\s+$/);
++            if (tw && !/^\s+$/.test(s)) {
++                warningAt("Trailing whitespace.", line, tw[1].length + 1);
++            }
++            return true;
++        }
++
++// Produce a token object.  The token inherits from a syntax symbol.
++
++        function it(type, value) {
++            var i, t;
++
++            function checkName(name) {
++                if (!option.proto && name === "__proto__") {
++                    warningAt("The '{a}' property is deprecated.", line, from, name);
++                    return;
++                }
++
++                if (!option.iterator && name === "__iterator__") {
++                    warningAt("'{a}' is only available in JavaScript 1.7.", line, from, name);
++                    return;
++                }
++
++                // Check for dangling underscores unless we're in Node
++                // environment and this identifier represents built-in
++                // Node globals with underscores.
++
++                var hasDangling = /^(_+.*|.*_+)$/.test(name);
++
++                if (option.nomen && hasDangling && name !== "_") {
++                    if (option.node && token.id !== "." && /^(__dirname|__filename)$/.test(name))
++                        return;
++
++                    warningAt("Unexpected {a} in '{b}'.", line, from, "dangling '_'", name);
++                    return;
++                }
++
++                // Check for non-camelcase names. Names like MY_VAR and
++                // _myVar are okay though.
++
++                if (option.camelcase) {
++                    if (name.replace(/^_+/, "").indexOf("_") > -1 && !name.match(/^[A-Z0-9_]*$/)) {
++                        warningAt("Identifier '{a}' is not in camel case.", line, from, value);
++                    }
++                }
++            }
++
++            if (type === "(color)" || type === "(range)") {
++                t = {type: type};
++            } else if (type === "(punctuator)" ||
++                    (type === "(identifier)" && is_own(syntax, value))) {
++                t = syntax[value] || syntax["(error)"];
++            } else {
++                t = syntax[type];
++            }
++
++            t = Object.create(t);
++
++            if (type === "(string)" || type === "(range)") {
++                if (!option.scripturl && jx.test(value)) {
++                    warningAt("Script URL.", line, from);
++                }
++            }
++
++            if (type === "(identifier)") {
++                t.identifier = true;
++                checkName(value);
++            }
++
++            t.value = value;
++            t.line = line;
++            t.character = character;
++            t.from = from;
++            i = t.id;
++            if (i !== "(endline)") {
++                prereg = i &&
++                    (("(,=:[!&|?{};".indexOf(i.charAt(i.length - 1)) >= 0) ||
++                    i === "return" ||
++                    i === "case");
++            }
++            return t;
++        }
++
++        // Public lex methods
++        return {
++            init: function (source) {
++                if (typeof source === "string") {
++                    lines = source
++                        .replace(/\r\n/g, "\n")
++                        .replace(/\r/g, "\n")
++                        .split("\n");
++                } else {
++                    lines = source;
++                }
++
++                // If the first line is a shebang (#!), make it a blank and move on.
++                // Shebangs are used by Node scripts.
++                if (lines[0] && lines[0].substr(0, 2) === "#!")
++                    lines[0] = "";
++
++                line = 0;
++                nextLine();
++                from = 1;
++            },
++
++            range: function (begin, end) {
++                var c, value = "";
++                from = character;
++                if (s.charAt(0) !== begin) {
++                    errorAt("Expected '{a}' and instead saw '{b}'.",
++                            line, character, begin, s.charAt(0));
++                }
++                for (;;) {
++                    s = s.slice(1);
++                    character += 1;
++                    c = s.charAt(0);
++                    switch (c) {
++                    case "":
++                        errorAt("Missing '{a}'.", line, character, c);
++                        break;
++                    case end:
++                        s = s.slice(1);
++                        character += 1;
++                        return it("(range)", value);
++                    case "\\":
++                        warningAt("Unexpected '{a}'.", line, character, c);
++                    }
++                    value += c;
++                }
++
++            },
++
++
++            // token -- this is called by advance to get the next token
++            token: function () {
++                var b, c, captures, d, depth, high, i, l, low, q, t, isLiteral, isInRange, n;
++
++                function match(x) {
++                    var r = x.exec(s), r1;
++
++                    if (r) {
++                        l = r[0].length;
++                        r1 = r[1];
++                        c = r1.charAt(0);
++                        s = s.substr(l);
++                        from = character + l - r1.length;
++                        character += l;
++                        return r1;
++                    }
++                }
++
++                function string(x) {
++                    var c, j, r = "", allowNewLine = false;
++
++                    if (jsonmode && x !== "\"") {
++                        warningAt("Strings must use doublequote.",
++                                line, character);
++                    }
++
++                    if (option.quotmark) {
++                        if (option.quotmark === "single" && x !== "'") {
++                            warningAt("Strings must use singlequote.",
++                                    line, character);
++                        } else if (option.quotmark === "double" && x !== "\"") {
++                            warningAt("Strings must use doublequote.",
++                                    line, character);
++                        } else if (option.quotmark === true) {
++                            quotmark = quotmark || x;
++                            if (quotmark !== x) {
++                                warningAt("Mixed double and single quotes.",
++                                        line, character);
++                            }
++                        }
++                    }
++
++                    function esc(n) {
++                        var i = parseInt(s.substr(j + 1, n), 16);
++                        j += n;
++                        if (i >= 32 && i <= 126 &&
++                                i !== 34 && i !== 92 && i !== 39) {
++                            warningAt("Unnecessary escapement.", line, character);
++                        }
++                        character += n;
++                        c = String.fromCharCode(i);
++                    }
++
++                    j = 0;
++
++unclosedString:
++                    for (;;) {
++                        while (j >= s.length) {
++                            j = 0;
++
++                            var cl = line, cf = from;
++                            if (!nextLine()) {
++                                errorAt("Unclosed string.", cl, cf);
++                                break unclosedString;
++                            }
++
++                            if (allowNewLine) {
++                                allowNewLine = false;
++                            } else {
++                                warningAt("Unclosed string.", cl, cf);
++                            }
++                        }
++
++                        c = s.charAt(j);
++                        if (c === x) {
++                            character += 1;
++                            s = s.substr(j + 1);
++                            return it("(string)", r, x);
++                        }
++
++                        if (c < " ") {
++                            if (c === "\n" || c === "\r") {
++                                break;
++                            }
++                            warningAt("Control character in string: {a}.",
++                                    line, character + j, s.slice(0, j));
++                        } else if (c === "\\") {
++                            j += 1;
++                            character += 1;
++                            c = s.charAt(j);
++                            n = s.charAt(j + 1);
++                            switch (c) {
++                            case "\\":
++                            case "\"":
++                            case "/":
++                                break;
++                            case "\'":
++                                if (jsonmode) {
++                                    warningAt("Avoid \\'.", line, character);
++                                }
++                                break;
++                            case "b":
++                                c = "\b";
++                                break;
++                            case "f":
++                                c = "\f";
++                                break;
++                            case "n":
++                                c = "\n";
++                                break;
++                            case "r":
++                                c = "\r";
++                                break;
++                            case "t":
++                                c = "\t";
++                                break;
++                            case "0":
++                                c = "\0";
++                                // Octal literals fail in strict mode
++                                // check if the number is between 00 and 07
++                                // where 'n' is the token next to 'c'
++                                if (n >= 0 && n <= 7 && directive["use strict"]) {
++                                    warningAt(
++                                    "Octal literals are not allowed in strict mode.",
++                                    line, character);
++                                }
++                                break;
++                            case "u":
++                                esc(4);
++                                break;
++                            case "v":
++                                if (jsonmode) {
++                                    warningAt("Avoid \\v.", line, character);
++                                }
++                                c = "\v";
++                                break;
++                            case "x":
++                                if (jsonmode) {
++                                    warningAt("Avoid \\x-.", line, character);
++                                }
++                                esc(2);
++                                break;
++                            case "":
++                                // last character is escape character
++                                // always allow new line if escaped, but show
++                                // warning if option is not set
++                                allowNewLine = true;
++                                if (option.multistr) {
++                                    if (jsonmode) {
++                                        warningAt("Avoid EOL escapement.", line, character);
++                                    }
++                                    c = "";
++                                    character -= 1;
++                                    break;
++                                }
++                                warningAt("Bad escapement of EOL. Use option multistr if needed.",
++                                    line, character);
++                                break;
++                            case "!":
++                                if (s.charAt(j - 2) === "<")
++                                    break;
++                                /*falls through*/
++                            default:
++                                warningAt("Bad escapement.", line, character);
++                            }
++                        }
++                        r += c;
++                        character += 1;
++                        j += 1;
++                    }
++                }
++
++                for (;;) {
++                    if (!s) {
++                        return it(nextLine() ? "(endline)" : "(end)", "");
++                    }
++
++                    t = match(tx);
++
++                    if (!t) {
++                        t = "";
++                        c = "";
++                        while (s && s < "!") {
++                            s = s.substr(1);
++                        }
++                        if (s) {
++                            errorAt("Unexpected '{a}'.", line, character, s.substr(0, 1));
++                            s = "";
++                        }
++                    } else {
++
++    //      identifier
++
++                        if (isAlpha(c) || c === "_" || c === "$") {
++                            return it("(identifier)", t);
++                        }
++
++    //      number
++
++                        if (isDigit(c)) {
++                            if (!isFinite(Number(t))) {
++                                warningAt("Bad number '{a}'.",
++                                    line, character, t);
++                            }
++                            if (isAlpha(s.substr(0, 1))) {
++                                warningAt("Missing space after '{a}'.",
++                                        line, character, t);
++                            }
++                            if (c === "0") {
++                                d = t.substr(1, 1);
++                                if (isDigit(d)) {
++                                    if (token.id !== ".") {
++                                        warningAt("Don't use extra leading zeros '{a}'.",
++                                            line, character, t);
++                                    }
++                                } else if (jsonmode && (d === "x" || d === "X")) {
++                                    warningAt("Avoid 0x-. '{a}'.",
++                                            line, character, t);
++                                }
++                            }
++                            if (t.substr(t.length - 1) === ".") {
++                                warningAt(
++"A trailing decimal point can be confused with a dot '{a}'.", line, character, t);
++                            }
++                            return it("(number)", t);
++                        }
++                        switch (t) {
++
++    //      string
++
++                        case "\"":
++                        case "'":
++                            return string(t);
++
++    //      // comment
++
++                        case "//":
++                            s = "";
++                            token.comment = true;
++                            break;
++
++    //      /* comment
++
++                        case "/*":
++                            for (;;) {
++                                i = s.search(lx);
++                                if (i >= 0) {
++                                    break;
++                                }
++                                if (!nextLine()) {
++                                    errorAt("Unclosed comment.", line, character);
++                                }
++                            }
++                            s = s.substr(i + 2);
++                            token.comment = true;
++                            break;
++
++    //      /*members /*jshint /*global
++
++                        case "/*members":
++                        case "/*member":
++                        case "/*jshint":
++                        case "/*jslint":
++                        case "/*global":
++                        case "*/":
++                            return {
++                                value: t,
++                                type: "special",
++                                line: line,
++                                character: character,
++                                from: from
++                            };
++
++                        case "":
++                            break;
++    //      /
++                        case "/":
++                            if (s.charAt(0) === "=") {
++                                errorAt("A regular expression literal can be confused with '/='.",
++                                    line, from);
++                            }
++
++                            if (prereg) {
++                                depth = 0;
++                                captures = 0;
++                                l = 0;
++                                for (;;) {
++                                    b = true;
++                                    c = s.charAt(l);
++                                    l += 1;
++                                    switch (c) {
++                                    case "":
++                                        errorAt("Unclosed regular expression.", line, from);
++                                        return quit("Stopping.", line, from);
++                                    case "/":
++                                        if (depth > 0) {
++                                            warningAt("{a} unterminated regular expression " +
++                                                "group(s).", line, from + l, depth);
++                                        }
++                                        c = s.substr(0, l - 1);
++                                        q = {
++                                            g: true,
++                                            i: true,
++                                            m: true
++                                        };
++                                        while (q[s.charAt(l)] === true) {
++                                            q[s.charAt(l)] = false;
++                                            l += 1;
++                                        }
++                                        character += l;
++                                        s = s.substr(l);
++                                        q = s.charAt(0);
++                                        if (q === "/" || q === "*") {
++                                            errorAt("Confusing regular expression.",
++                                                    line, from);
++                                        }
++                                        return it("(regexp)", c);
++                                    case "\\":
++                                        c = s.charAt(l);
++                                        if (c < " ") {
++                                            warningAt(
++"Unexpected control character in regular expression.", line, from + l);
++                                        } else if (c === "<") {
++                                            warningAt(
++"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
++                                        }
++                                        l += 1;
++                                        break;
++                                    case "(":
++                                        depth += 1;
++                                        b = false;
++                                        if (s.charAt(l) === "?") {
++                                            l += 1;
++                                            switch (s.charAt(l)) {
++                                            case ":":
++                                            case "=":
++                                            case "!":
++                                                l += 1;
++                                                break;
++                                            default:
++                                                warningAt(
++"Expected '{a}' and instead saw '{b}'.", line, from + l, ":", s.charAt(l));
++                                            }
++                                        } else {
++                                            captures += 1;
++                                        }
++                                        break;
++                                    case "|":
++                                        b = false;
++                                        break;
++                                    case ")":
++                                        if (depth === 0) {
++                                            warningAt("Unescaped '{a}'.",
++                                                    line, from + l, ")");
++                                        } else {
++                                            depth -= 1;
++                                        }
++                                        break;
++                                    case " ":
++                                        q = 1;
++                                        while (s.charAt(l) === " ") {
++                                            l += 1;
++                                            q += 1;
++                                        }
++                                        if (q > 1) {
++                                            warningAt(
++"Spaces are hard to count. Use {{a}}.", line, from + l, q);
++                                        }
++                                        break;
++                                    case "[":
++                                        c = s.charAt(l);
++                                        if (c === "^") {
++                                            l += 1;
++                                            if (s.charAt(l) === "]") {
++                                                errorAt("Unescaped '{a}'.",
++                                                    line, from + l, "^");
++                                            }
++                                        }
++                                        if (c === "]") {
++                                            warningAt("Empty class.", line,
++                                                    from + l - 1);
++                                        }
++                                        isLiteral = false;
++                                        isInRange = false;
++klass:
++                                        do {
++                                            c = s.charAt(l);
++                                            l += 1;
++                                            switch (c) {
++                                            case "[":
++                                            case "^":
++                                                warningAt("Unescaped '{a}'.",
++                                                        line, from + l, c);
++                                                if (isInRange) {
++                                                    isInRange = false;
++                                                } else {
++                                                    isLiteral = true;
++                                                }
++                                                break;
++                                            case "-":
++                                                if (isLiteral && !isInRange) {
++                                                    isLiteral = false;
++                                                    isInRange = true;
++                                                } else if (isInRange) {
++                                                    isInRange = false;
++                                                } else if (s.charAt(l) === "]") {
++                                                    isInRange = true;
++                                                } else {
++                                                    if (option.regexdash !== (l === 2 || (l === 3 &&
++                                                        s.charAt(1) === "^"))) {
++                                                        warningAt("Unescaped '{a}'.",
++                                                            line, from + l - 1, "-");
++                                                    }
++                                                    isLiteral = true;
++                                                }
++                                                break;
++                                            case "]":
++                                                if (isInRange && !option.regexdash) {
++                                                    warningAt("Unescaped '{a}'.",
++                                                            line, from + l - 1, "-");
++                                                }
++                                                break klass;
++                                            case "\\":
++                                                c = s.charAt(l);
++                                                if (c < " ") {
++                                                    warningAt(
++"Unexpected control character in regular expression.", line, from + l);
++                                                } else if (c === "<") {
++                                                    warningAt(
++"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
++                                                }
++                                                l += 1;
++
++                                                // \w, \s and \d are never part of a character range
++                                                if (/[wsd]/i.test(c)) {
++                                                    if (isInRange) {
++                                                        warningAt("Unescaped '{a}'.",
++                                                            line, from + l, "-");
++                                                        isInRange = false;
++                                                    }
++                                                    isLiteral = false;
++                                                } else if (isInRange) {
++                                                    isInRange = false;
++                                                } else {
++                                                    isLiteral = true;
++                                                }
++                                                break;
++                                            case "/":
++                                                warningAt("Unescaped '{a}'.",
++                                                        line, from + l - 1, "/");
++
++                                                if (isInRange) {
++                                                    isInRange = false;
++                                                } else {
++                                                    isLiteral = true;
++                                                }
++                                                break;
++                                            case "<":
++                                                if (isInRange) {
++                                                    isInRange = false;
++                                                } else {
++                                                    isLiteral = true;
++                                                }
++                                                break;
++                                            default:
++                                                if (isInRange) {
++                                                    isInRange = false;
++                                                } else {
++                                                    isLiteral = true;
++                                                }
++                                            }
++                                        } while (c);
++                                        break;
++                                    case ".":
++                                        if (option.regexp) {
++                                            warningAt("Insecure '{a}'.", line,
++                                                    from + l, c);
++                                        }
++                                        break;
++                                    case "]":
++                                    case "?":
++                                    case "{":
++                                    case "}":
++                                    case "+":
++                                    case "*":
++                                        warningAt("Unescaped '{a}'.", line,
++                                                from + l, c);
++                                    }
++                                    if (b) {
++                                        switch (s.charAt(l)) {
++                                        case "?":
++                                        case "+":
++                                        case "*":
++                                            l += 1;
++                                            if (s.charAt(l) === "?") {
++                                                l += 1;
++                                            }
++                                            break;
++                                        case "{":
++                                            l += 1;
++                                            c = s.charAt(l);
++                                            if (c < "0" || c > "9") {
++                                                warningAt(
++"Expected a number and instead saw '{a}'.", line, from + l, c);
++                                                break; // No reason to continue checking numbers.
++                                            }
++                                            l += 1;
++                                            low = +c;
++                                            for (;;) {
++                                                c = s.charAt(l);
++                                                if (c < "0" || c > "9") {
++                                                    break;
++                                                }
++                                                l += 1;
++                                                low = +c + (low * 10);
++                                            }
++                                            high = low;
++                                            if (c === ",") {
++                                                l += 1;
++                                                high = Infinity;
++                                                c = s.charAt(l);
++                                                if (c >= "0" && c <= "9") {
++                                                    l += 1;
++                                                    high = +c;
++                                                    for (;;) {
++                                                        c = s.charAt(l);
++                                                        if (c < "0" || c > "9") {
++                                                            break;
++                                                        }
++                                                        l += 1;
++                                                        high = +c + (high * 10);
++                                                    }
++                                                }
++                                            }
++                                            if (s.charAt(l) !== "}") {
++                                                warningAt(
++"Expected '{a}' and instead saw '{b}'.", line, from + l, "}", c);
++                                            } else {
++                                                l += 1;
++                                            }
++                                            if (s.charAt(l) === "?") {
++                                                l += 1;
++                                            }
++                                            if (low > high) {
++                                                warningAt(
++"'{a}' should not be greater than '{b}'.", line, from + l, low, high);
++                                            }
++                                        }
++                                    }
++                                }
++                                c = s.substr(0, l - 1);
++                                character += l;
++                                s = s.substr(l);
++                                return it("(regexp)", c);
++                            }
++                            return it("(punctuator)", t);
++
++    //      punctuator
++
++                        case "#":
++                            return it("(punctuator)", t);
++                        default:
++                            return it("(punctuator)", t);
++                        }
++                    }
++                }
++            }
++        };
++    }());
++
++
++    function addlabel(t, type, token) {
++        if (t === "hasOwnProperty") {
++            warning("'hasOwnProperty' is a really bad name.");
++        }
++
++        // Define t in the current function in the current scope.
++        if (type === "exception") {
++            if (is_own(funct["(context)"], t)) {
++                if (funct[t] !== true && !option.node) {
++                    warning("Value of '{a}' may be overwritten in IE.", nexttoken, t);
++                }
++            }
++        }
++
++        if (is_own(funct, t) && !funct["(global)"]) {
++            if (funct[t] === true) {
++                if (option.latedef)
++                    warning("'{a}' was used before it was defined.", nexttoken, t);
++            } else {
++                if (!option.shadow && type !== "exception") {
++                    warning("'{a}' is already defined.", nexttoken, t);
++                }
++            }
++        }
++
++        funct[t] = type;
++
++        if (token) {
++            funct["(tokens)"][t] = token;
++        }
++
++        if (funct["(global)"]) {
++            global[t] = funct;
++            if (is_own(implied, t)) {
++                if (option.latedef)
++                    warning("'{a}' was used before it was defined.", nexttoken, t);
++                delete implied[t];
++            }
++        } else {
++            scope[t] = funct;
++        }
++    }
++
++
++    function doOption() {
++        var nt = nexttoken;
++        var o  = nt.value;
++        var quotmarkValue = option.quotmark;
++        var predef = {};
++        var b, obj, filter, t, tn, v, minus;
++
++        switch (o) {
++        case "*/":
++            error("Unbegun comment.");
++            break;
++        case "/*members":
++        case "/*member":
++            o = "/*members";
++            if (!membersOnly) {
++                membersOnly = {};
++            }
++            obj = membersOnly;
++            option.quotmark = false;
++            break;
++        case "/*jshint":
++        case "/*jslint":
++            obj = option;
++            filter = boolOptions;
++            break;
++        case "/*global":
++            obj = predef;
++            break;
++        default:
++            error("What?");
++        }
++
++        t = lex.token();
++
++loop:
++        for (;;) {
++            minus = false;
++            for (;;) {
++                if (t.type === "special" && t.value === "*/") {
++                    break loop;
++                }
++                if (t.id !== "(endline)" && t.id !== ",") {
++                    break;
++                }
++                t = lex.token();
++            }
++
++            if (o === "/*global" && t.value === "-") {
++                minus = true;
++                t = lex.token();
++            }
++
++            if (t.type !== "(string)" && t.type !== "(identifier)" && o !== "/*members") {
++                error("Bad option.", t);
++            }
++
++            v = lex.token();
++            if (v.id === ":") {
++                v = lex.token();
++
++                if (obj === membersOnly) {
++                    error("Expected '{a}' and instead saw '{b}'.", t, "*/", ":");
++                }
++
++                if (o === "/*jshint") {
++                    checkOption(t.value, t);
++                }
++
++                var numericVals = [
++                    "maxstatements",
++                    "maxparams",
++                    "maxdepth",
++                    "maxcomplexity",
++                    "maxerr",
++                    "maxlen",
++                    "indent"
++                ];
++
++                if (numericVals.indexOf(t.value) > -1 && (o === "/*jshint" || o === "/*jslint")) {
++                    b = +v.value;
++
++                    if (typeof b !== "number" || !isFinite(b) || b <= 0 || Math.floor(b) !== b) {
++                        error("Expected a small integer and instead saw '{a}'.", v, v.value);
++                    }
++
++                    if (t.value === "indent")
++                        obj.white = true;
++
++                    obj[t.value] = b;
++                } else if (t.value === "validthis") {
++                    if (funct["(global)"]) {
++                        error("Option 'validthis' can't be used in a global scope.");
++                    } else {
++                        if (v.value === "true" || v.value === "false")
++                            obj[t.value] = v.value === "true";
++                        else
++                            error("Bad option value.", v);
++                    }
++                } else if (t.value === "quotmark" && (o === "/*jshint")) {
++                    switch (v.value) {
++                    case "true":
++                        obj.quotmark = true;
++                        break;
++                    case "false":
++                        obj.quotmark = false;
++                        break;
++                    case "double":
++                    case "single":
++                        obj.quotmark = v.value;
++                        break;
++                    default:
++                        error("Bad option value.", v);
++                    }
++                } else if (v.value === "true" || v.value === "false") {
++                    if (o === "/*jslint") {
++                        tn = renamedOptions[t.value] || t.value;
++                        obj[tn] = v.value === "true";
++                        if (invertedOptions[tn] !== undefined) {
++                            obj[tn] = !obj[tn];
++                        }
++                    } else {
++                        obj[t.value] = v.value === "true";
++                    }
++
++                    if (t.value === "newcap")
++                        obj["(explicitNewcap)"] = true;
++                } else {
++                    error("Bad option value.", v);
++                }
++                t = lex.token();
++            } else {
++                if (o === "/*jshint" || o === "/*jslint") {
++                    error("Missing option value.", t);
++                }
++
++                obj[t.value] = false;
++
++                if (o === "/*global" && minus === true) {
++                    JSHINT.blacklist[t.value] = t.value;
++                    updatePredefined();
++                }
++
++                t = v;
++            }
++        }
++
++        if (o === "/*members") {
++            option.quotmark = quotmarkValue;
++        }
++
++        combine(predefined, predef);
++
++        for (var key in predef) {
++            if (is_own(predef, key)) {
++                declared[key] = nt;
++            }
++        }
++
++        if (filter) {
++            assume();
++        }
++    }
++
++
++// We need a peek function. If it has an argument, it peeks that much farther
++// ahead. It is used to distinguish
++//     for ( var i in ...
++// from
++//     for ( var i = ...
++
++    function peek(p) {
++        var i = p || 0, j = 0, t;
++
++        while (j <= i) {
++            t = lookahead[j];
++            if (!t) {
++                t = lookahead[j] = lex.token();
++            }
++            j += 1;
++        }
++        return t;
++    }
++
++
++
++// Produce the next token. It looks for programming errors.
++
++    function advance(id, t) {
++        switch (token.id) {
++        case "(number)":
++            if (nexttoken.id === ".") {
++                warning("A dot following a number can be confused with a decimal point.", token);
++            }
++            break;
++        case "-":
++            if (nexttoken.id === "-" || nexttoken.id === "--") {
++                warning("Confusing minusses.");
++            }
++            break;
++        case "+":
++            if (nexttoken.id === "+" || nexttoken.id === "++") {
++                warning("Confusing plusses.");
++            }
++            break;
++        }
++
++        if (token.type === "(string)" || token.identifier) {
++            anonname = token.value;
++        }
++
++        if (id && nexttoken.id !== id) {
++            if (t) {
++                if (nexttoken.id === "(end)") {
++                    warning("Unmatched '{a}'.", t, t.id);
++                } else {
++                    warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
++                            nexttoken, id, t.id, t.line, nexttoken.value);
++                }
++            } else if (nexttoken.type !== "(identifier)" ||
++                            nexttoken.value !== id) {
++                warning("Expected '{a}' and instead saw '{b}'.",
++                        nexttoken, id, nexttoken.value);
++            }
++        }
++
++        prevtoken = token;
++        token = nexttoken;
++        for (;;) {
++            nexttoken = lookahead.shift() || lex.token();
++            if (nexttoken.id === "(end)" || nexttoken.id === "(error)") {
++                return;
++            }
++            if (nexttoken.type === "special") {
++                doOption();
++            } else {
++                if (nexttoken.id !== "(endline)") {
++                    break;
++                }
++            }
++        }
++    }
++
++
++// This is the heart of JSHINT, the Pratt parser. In addition to parsing, it
++// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is
++// like .nud except that it is only used on the first token of a statement.
++// Having .fud makes it much easier to define statement-oriented languages like
++// JavaScript. I retained Pratt's nomenclature.
++
++// .nud     Null denotation
++// .fud     First null denotation
++// .led     Left denotation
++//  lbp     Left binding power
++//  rbp     Right binding power
++
++// They are elements of the parsing method called Top Down Operator Precedence.
++
++    function expression(rbp, initial) {
++        var left, isArray = false, isObject = false;
++
++        if (nexttoken.id === "(end)")
++            error("Unexpected early end of program.", token);
++
++        advance();
++        if (initial) {
++            anonname = "anonymous";
++            funct["(verb)"] = token.value;
++        }
++        if (initial === true && token.fud) {
++            left = token.fud();
++        } else {
++            if (token.nud) {
++                left = token.nud();
++            } else {
++                if (nexttoken.type === "(number)" && token.id === ".") {
++                    warning("A leading decimal point can be confused with a dot: '.{a}'.",
++                            token, nexttoken.value);
++                    advance();
++                    return token;
++                } else {
++                    error("Expected an identifier and instead saw '{a}'.",
++                            token, token.id);
++                }
++            }
++            while (rbp < nexttoken.lbp) {
++                isArray = token.value === "Array";
++                isObject = token.value === "Object";
++
++                // #527, new Foo.Array(), Foo.Array(), new Foo.Object(), Foo.Object()
++                // Line breaks in IfStatement heads exist to satisfy the checkJSHint
++                // "Line too long." error.
++                if (left && (left.value || (left.first && left.first.value))) {
++                    // If the left.value is not "new", or the left.first.value is a "."
++                    // then safely assume that this is not "new Array()" and possibly
++                    // not "new Object()"...
++                    if (left.value !== "new" ||
++                      (left.first && left.first.value && left.first.value === ".")) {
++                        isArray = false;
++                        // ...In the case of Object, if the left.value and token.value
++                        // are not equal, then safely assume that this not "new Object()"
++                        if (left.value !== token.value) {
++                            isObject = false;
++                        }
++                    }
++                }
++
++                advance();
++                if (isArray && token.id === "(" && nexttoken.id === ")")
++                    warning("Use the array literal notation [].", token);
++                if (isObject && token.id === "(" && nexttoken.id === ")")
++                    warning("Use the object literal notation {}.", token);
++                if (token.led) {
++                    left = token.led(left);
++                } else {
++                    error("Expected an operator and instead saw '{a}'.",
++                        token, token.id);
++                }
++            }
++        }
++        return left;
++    }
++
++
++// Functions for conformance of style.
++
++    function adjacent(left, right) {
++        left = left || token;
++        right = right || nexttoken;
++        if (option.white) {
++            if (left.character !== right.from && left.line === right.line) {
++                left.from += (left.character - left.from);
++                warning("Unexpected space after '{a}'.", left, left.value);
++            }
++        }
++    }
++
++    function nobreak(left, right) {
++        left = left || token;
++        right = right || nexttoken;
++        if (option.white && (left.character !== right.from || left.line !== right.line)) {
++            warning("Unexpected space before '{a}'.", right, right.value);
++        }
++    }
++
++    function nospace(left, right) {
++        left = left || token;
++        right = right || nexttoken;
++        if (option.white && !left.comment) {
++            if (left.line === right.line) {
++                adjacent(left, right);
++            }
++        }
++    }
++
++    function nonadjacent(left, right) {
++        if (option.white) {
++            left = left || token;
++            right = right || nexttoken;
++            if (left.value === ";" && right.value === ";") {
++                return;
++            }
++            if (left.line === right.line && left.character === right.from) {
++                left.from += (left.character - left.from);
++                warning("Missing space after '{a}'.",
++                        left, left.value);
++            }
++        }
++    }
++
++    function nobreaknonadjacent(left, right) {
++        left = left || token;
++        right = right || nexttoken;
++        if (!option.laxbreak && left.line !== right.line) {
++            warning("Bad line breaking before '{a}'.", right, right.id);
++        } else if (option.white) {
++            left = left || token;
++            right = right || nexttoken;
++            if (left.character === right.from) {
++                left.from += (left.character - left.from);
++                warning("Missing space after '{a}'.",
++                        left, left.value);
++            }
++        }
++    }
++
++    function indentation(bias) {
++        var i;
++        if (option.white && nexttoken.id !== "(end)") {
++            i = indent + (bias || 0);
++            if (nexttoken.from !== i) {
++                warning(
++"Expected '{a}' to have an indentation at {b} instead at {c}.",
++                        nexttoken, nexttoken.value, i, nexttoken.from);
++            }
++        }
++    }
++
++    function nolinebreak(t) {
++        t = t || token;
++        if (t.line !== nexttoken.line) {
++            warning("Line breaking error '{a}'.", t, t.value);
++        }
++    }
++
++
++    function comma() {
++        if (token.line !== nexttoken.line) {
++            if (!option.laxcomma) {
++                if (comma.first) {
++                    warning("Comma warnings can be turned off with 'laxcomma'");
++                    comma.first = false;
++                }
++                warning("Bad line breaking before '{a}'.", token, nexttoken.id);
++            }
++        } else if (!token.comment && token.character !== nexttoken.from && option.white) {
++            token.from += (token.character - token.from);
++            warning("Unexpected space after '{a}'.", token, token.value);
++        }
++        advance(",");
++        nonadjacent(token, nexttoken);
++    }
++
++
++// Functional constructors for making the symbols that will be inherited by
++// tokens.
++
++    function symbol(s, p) {
++        var x = syntax[s];
++        if (!x || typeof x !== "object") {
++            syntax[s] = x = {
++                id: s,
++                lbp: p,
++                value: s
++            };
++        }
++        return x;
++    }
++
++
++    function delim(s) {
++        return symbol(s, 0);
++    }
++
++
++    function stmt(s, f) {
++        var x = delim(s);
++        x.identifier = x.reserved = true;
++        x.fud = f;
++        return x;
++    }
++
++
++    function blockstmt(s, f) {
++        var x = stmt(s, f);
++        x.block = true;
++        return x;
++    }
++
++
++    function reserveName(x) {
++        var c = x.id.charAt(0);
++        if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) {
++            x.identifier = x.reserved = true;
++        }
++        return x;
++    }
++
++
++    function prefix(s, f) {
++        var x = symbol(s, 150);
++        reserveName(x);
++        x.nud = (typeof f === "function") ? f : function () {
++            this.right = expression(150);
++            this.arity = "unary";
++            if (this.id === "++" || this.id === "--") {
++                if (option.plusplus) {
++                    warning("Unexpected use of '{a}'.", this, this.id);
++                } else if ((!this.right.identifier || this.right.reserved) &&
++                        this.right.id !== "." && this.right.id !== "[") {
++                    warning("Bad operand.", this);
++                }
++            }
++            return this;
++        };
++        return x;
++    }
++
++
++    function type(s, f) {
++        var x = delim(s);
++        x.type = s;
++        x.nud = f;
++        return x;
++    }
++
++
++    function reserve(s, f) {
++        var x = type(s, f);
++        x.identifier = x.reserved = true;
++        return x;
++    }
++
++
++    function reservevar(s, v) {
++        return reserve(s, function () {
++            if (typeof v === "function") {
++                v(this);
++            }
++            return this;
++        });
++    }
++
++
++    function infix(s, f, p, w) {
++        var x = symbol(s, p);
++        reserveName(x);
++        x.led = function (left) {
++            if (!w) {
++                nobreaknonadjacent(prevtoken, token);
++                nonadjacent(token, nexttoken);
++            }
++            if (s === "in" && left.id === "!") {
++                warning("Confusing use of '{a}'.", left, "!");
++            }
++            if (typeof f === "function") {
++                return f(left, this);
++            } else {
++                this.left = left;
++                this.right = expression(p);
++                return this;
++            }
++        };
++        return x;
++    }
++
++
++    function relation(s, f) {
++        var x = symbol(s, 100);
++        x.led = function (left) {
++            nobreaknonadjacent(prevtoken, token);
++            nonadjacent(token, nexttoken);
++            var right = expression(100);
++
++            if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) {
++                warning("Use the isNaN function to compare with NaN.", this);
++            } else if (f) {
++                f.apply(this, [left, right]);
++            }
++            if (left.id === "!") {
++                warning("Confusing use of '{a}'.", left, "!");
++            }
++            if (right.id === "!") {
++                warning("Confusing use of '{a}'.", right, "!");
++            }
++            this.left = left;
++            this.right = right;
++            return this;
++        };
++        return x;
++    }
++
++
++    function isPoorRelation(node) {
++        return node &&
++              ((node.type === "(number)" && +node.value === 0) ||
++               (node.type === "(string)" && node.value === "") ||
++               (node.type === "null" && !option.eqnull) ||
++                node.type === "true" ||
++                node.type === "false" ||
++                node.type === "undefined");
++    }
++
++
++    function assignop(s) {
++        symbol(s, 20).exps = true;
++
++        return infix(s, function (left, that) {
++            that.left = left;
++
++            if (predefined[left.value] === false &&
++                    scope[left.value]["(global)"] === true) {
++                warning("Read only.", left);
++            } else if (left["function"]) {
++                warning("'{a}' is a function.", left, left.value);
++            }
++
++            if (left) {
++                if (option.esnext && funct[left.value] === "const") {
++                    warning("Attempting to override '{a}' which is a constant", left, left.value);
++                }
++
++                if (left.id === "." || left.id === "[") {
++                    if (!left.left || left.left.value === "arguments") {
++                        warning("Bad assignment.", that);
++                    }
++                    that.right = expression(19);
++                    return that;
++                } else if (left.identifier && !left.reserved) {
++                    if (funct[left.value] === "exception") {
++                        warning("Do not assign to the exception parameter.", left);
++                    }
++                    that.right = expression(19);
++                    return that;
++                }
++
++                if (left === syntax["function"]) {
++                    warning(
++"Expected an identifier in an assignment and instead saw a function invocation.",
++                                token);
++                }
++            }
++
++            error("Bad assignment.", that);
++        }, 20);
++    }
++
++
++    function bitwise(s, f, p) {
++        var x = symbol(s, p);
++        reserveName(x);
++        x.led = (typeof f === "function") ? f : function (left) {
++            if (option.bitwise) {
++                warning("Unexpected use of '{a}'.", this, this.id);
++            }
++            this.left = left;
++            this.right = expression(p);
++            return this;
++        };
++        return x;
++    }
++
++
++    function bitwiseassignop(s) {
++        symbol(s, 20).exps = true;
++        return infix(s, function (left, that) {
++            if (option.bitwise) {
++                warning("Unexpected use of '{a}'.", that, that.id);
++            }
++            nonadjacent(prevtoken, token);
++            nonadjacent(token, nexttoken);
++            if (left) {
++                if (left.id === "." || left.id === "[" ||
++                        (left.identifier && !left.reserved)) {
++                    expression(19);
++                    return that;
++                }
++                if (left === syntax["function"]) {
++                    warning(
++"Expected an identifier in an assignment, and instead saw a function invocation.",
++                                token);
++                }
++                return that;
++            }
++            error("Bad assignment.", that);
++        }, 20);
++    }
++
++
++    function suffix(s) {
++        var x = symbol(s, 150);
++        x.led = function (left) {
++            if (option.plusplus) {
++                warning("Unexpected use of '{a}'.", this, this.id);
++            } else if ((!left.identifier || left.reserved) &&
++                    left.id !== "." && left.id !== "[") {
++                warning("Bad operand.", this);
++            }
++            this.left = left;
++            return this;
++        };
++        return x;
++    }
++
++
++    // fnparam means that this identifier is being defined as a function
++    // argument (see identifier())
++    function optionalidentifier(fnparam) {
++        if (nexttoken.identifier) {
++            advance();
++            if (token.reserved && !option.es5) {
++                // `undefined` as a function param is a common pattern to protect
++                // against the case when somebody does `undefined = true` and
++                // help with minification. More info: https://gist.github.com/315916
++                if (!fnparam || token.value !== "undefined") {
++                    warning("Expected an identifier and instead saw '{a}' (a reserved word).",
++                            token, token.id);
++                }
++            }
++            return token.value;
++        }
++    }
++
++    // fnparam means that this identifier is being defined as a function
++    // argument
++    function identifier(fnparam) {
++        var i = optionalidentifier(fnparam);
++        if (i) {
++            return i;
++        }
++        if (token.id === "function" && nexttoken.id === "(") {
++            warning("Missing name in function declaration.");
++        } else {
++            error("Expected an identifier and instead saw '{a}'.",
++                    nexttoken, nexttoken.value);
++        }
++    }
++
++
++    function reachable(s) {
++        var i = 0, t;
++        if (nexttoken.id !== ";" || noreach) {
++            return;
++        }
++        for (;;) {
++            t = peek(i);
++            if (t.reach) {
++                return;
++            }
++            if (t.id !== "(endline)") {
++                if (t.id === "function") {
++                    if (!option.latedef) {
++                        break;
++                    }
++                    warning(
++"Inner functions should be listed at the top of the outer function.", t);
++                    break;
++                }
++                warning("Unreachable '{a}' after '{b}'.", t, t.value, s);
++                break;
++            }
++            i += 1;
++        }
++    }
++
++
++    function statement(noindent) {
++        var i = indent, r, s = scope, t = nexttoken;
++
++        if (t.id === ";") {
++            advance(";");
++            return;
++        }
++
++        // Is this a labelled statement?
++
++        if (t.identifier && !t.reserved && peek().id === ":") {
++            advance();
++            advance(":");
++            scope = Object.create(s);
++            addlabel(t.value, "label");
++
++            if (!nexttoken.labelled && nexttoken.value !== "{") {
++                warning("Label '{a}' on {b} statement.", nexttoken, t.value, nexttoken.value);
++            }
++
++            if (jx.test(t.value + ":")) {
++                warning("Label '{a}' looks like a javascript url.", t, t.value);
++            }
++
++            nexttoken.label = t.value;
++            t = nexttoken;
++        }
++
++        // Is it a lonely block?
++
++        if (t.id === "{") {
++            block(true, true);
++            return;
++        }
++
++        // Parse the statement.
++
++        if (!noindent) {
++            indentation();
++        }
++        r = expression(0, true);
++
++        // Look for the final semicolon.
++
++        if (!t.block) {
++            if (!option.expr && (!r || !r.exps)) {
++                warning("Expected an assignment or function call and instead saw an expression.",
++                    token);
++            } else if (option.nonew && r.id === "(" && r.left.id === "new") {
++                warning("Do not use 'new' for side effects.", t);
++            }
++
++            if (nexttoken.id === ",") {
++                return comma();
++            }
++
++            if (nexttoken.id !== ";") {
++                if (!option.asi) {
++                    // If this is the last statement in a block that ends on
++                    // the same line *and* option lastsemic is on, ignore the warning.
++                    // Otherwise, complain about missing semicolon.
++                    if (!option.lastsemic || nexttoken.id !== "}" ||
++                            nexttoken.line !== token.line) {
++                        warningAt("Missing semicolon.", token.line, token.character);
++                    }
++                }
++            } else {
++                adjacent(token, nexttoken);
++                advance(";");
++                nonadjacent(token, nexttoken);
++            }
++        }
++
++// Restore the indentation.
++
++        indent = i;
++        scope = s;
++        return r;
++    }
++
++
++    function statements(startLine) {
++        var a = [], p;
++
++        while (!nexttoken.reach && nexttoken.id !== "(end)") {
++            if (nexttoken.id === ";") {
++                p = peek();
++                if (!p || p.id !== "(") {
++                    warning("Unnecessary semicolon.");
++                }
++                advance(";");
++            } else {
++                a.push(statement(startLine === nexttoken.line));
++            }
++        }
++        return a;
++    }
++
++
++    /*
++     * read all directives
++     * recognizes a simple form of asi, but always
++     * warns, if it is used
++     */
++    function directives() {
++        var i, p, pn;
++
++        for (;;) {
++            if (nexttoken.id === "(string)") {
++                p = peek(0);
++                if (p.id === "(endline)") {
++                    i = 1;
++                    do {
++                        pn = peek(i);
++                        i = i + 1;
++                    } while (pn.id === "(endline)");
++
++                    if (pn.id !== ";") {
++                        if (pn.id !== "(string)" && pn.id !== "(number)" &&
++                            pn.id !== "(regexp)" && pn.identifier !== true &&
++                            pn.id !== "}") {
++                            break;
++                        }
++                        warning("Missing semicolon.", nexttoken);
++                    } else {
++                        p = pn;
++                    }
++                } else if (p.id === "}") {
++                    // directive with no other statements, warn about missing semicolon
++                    warning("Missing semicolon.", p);
++                } else if (p.id !== ";") {
++                    break;
++                }
++
++                indentation();
++                advance();
++                if (directive[token.value]) {
++                    warning("Unnecessary directive \"{a}\".", token, token.value);
++                }
++
++                if (token.value === "use strict") {
++                    if (!option["(explicitNewcap)"])
++                        option.newcap = true;
++                    option.undef = true;
++                }
++
++                // there's no directive negation, so always set to true
++                directive[token.value] = true;
++
++                if (p.id === ";") {
++                    advance(";");
++                }
++                continue;
++            }
++            break;
++        }
++    }
++
++
++    /*
++     * Parses a single block. A block is a sequence of statements wrapped in
++     * braces.
++     *
++     * ordinary - true for everything but function bodies and try blocks.
++     * stmt     - true if block can be a single statement (e.g. in if/for/while).
++     * isfunc   - true if block is a function body
++     */
++    function block(ordinary, stmt, isfunc) {
++        var a,
++            b = inblock,
++            old_indent = indent,
++            m,
++            s = scope,
++            t,
++            line,
++            d;
++
++        inblock = ordinary;
++
++        if (!ordinary || !option.funcscope)
++            scope = Object.create(scope);
++
++        nonadjacent(token, nexttoken);
++        t = nexttoken;
++
++        var metrics = funct["(metrics)"];
++        metrics.nestedBlockDepth += 1;
++        metrics.verifyMaxNestedBlockDepthPerFunction();
++
++        if (nexttoken.id === "{") {
++            advance("{");
++            line = token.line;
++            if (nexttoken.id !== "}") {
++                indent += option.indent;
++                while (!ordinary && nexttoken.from > indent) {
++                    indent += option.indent;
++                }
++
++                if (isfunc) {
++                    m = {};
++                    for (d in directive) {
++                        if (is_own(directive, d)) {
++                            m[d] = directive[d];
++                        }
++                    }
++                    directives();
++
++                    if (option.strict && funct["(context)"]["(global)"]) {
++                        if (!m["use strict"] && !directive["use strict"]) {
++                            warning("Missing \"use strict\" statement.");
++                        }
++                    }
++                }
++
++                a = statements(line);
++
++                metrics.statementCount += a.length;
++
++                if (isfunc) {
++                    directive = m;
++                }
++
++                indent -= option.indent;
++                if (line !== nexttoken.line) {
++                    indentation();
++                }
++            } else if (line !== nexttoken.line) {
++                indentation();
++            }
++            advance("}", t);
++            indent = old_indent;
++        } else if (!ordinary) {
++            error("Expected '{a}' and instead saw '{b}'.",
++                  nexttoken, "{", nexttoken.value);
++        } else {
++            if (!stmt || option.curly)
++                warning("Expected '{a}' and instead saw '{b}'.",
++                        nexttoken, "{", nexttoken.value);
++
++            noreach = true;
++            indent += option.indent;
++            // test indentation only if statement is in new line
++            a = [statement(nexttoken.line === token.line)];
++            indent -= option.indent;
++            noreach = false;
++        }
++        funct["(verb)"] = null;
++        if (!ordinary || !option.funcscope) scope = s;
++        inblock = b;
++        if (ordinary && option.noempty && (!a || a.length === 0)) {
++            warning("Empty block.");
++        }
++        metrics.nestedBlockDepth -= 1;
++        return a;
++    }
++
++
++    function countMember(m) {
++        if (membersOnly && typeof membersOnly[m] !== "boolean") {
++            warning("Unexpected /*member '{a}'.", token, m);
++        }
++        if (typeof member[m] === "number") {
++            member[m] += 1;
++        } else {
++            member[m] = 1;
++        }
++    }
++
++
++    function note_implied(token) {
++        var name = token.value, line = token.line, a = implied[name];
++        if (typeof a === "function") {
++            a = false;
++        }
++
++        if (!a) {
++            a = [line];
++            implied[name] = a;
++        } else if (a[a.length - 1] !== line) {
++            a.push(line);
++        }
++    }
++
++
++    // Build the syntax table by declaring the syntactic elements of the language.
++
++    type("(number)", function () {
++        return this;
++    });
++
++    type("(string)", function () {
++        return this;
++    });
++
++    syntax["(identifier)"] = {
++        type: "(identifier)",
++        lbp: 0,
++        identifier: true,
++        nud: function () {
++            var v = this.value,
++                s = scope[v],
++                f;
++
++            if (typeof s === "function") {
++                // Protection against accidental inheritance.
++                s = undefined;
++            } else if (typeof s === "boolean") {
++                f = funct;
++                funct = functions[0];
++                addlabel(v, "var");
++                s = funct;
++                funct = f;
++            }
++
++            // The name is in scope and defined in the current function.
++            if (funct === s) {
++                // Change 'unused' to 'var', and reject labels.
++                switch (funct[v]) {
++                case "unused":
++                    funct[v] = "var";
++                    break;
++                case "unction":
++                    funct[v] = "function";
++                    this["function"] = true;
++                    break;
++                case "function":
++                    this["function"] = true;
++                    break;
++                case "label":
++                    warning("'{a}' is a statement label.", token, v);
++                    break;
++                }
++            } else if (funct["(global)"]) {
++                // The name is not defined in the function.  If we are in the global
++                // scope, then we have an undefined variable.
++                //
++                // Operators typeof and delete do not raise runtime errors even if
++                // the base object of a reference is null so no need to display warning
++                // if we're inside of typeof or delete.
++
++                if (option.undef && typeof predefined[v] !== "boolean") {
++                    // Attempting to subscript a null reference will throw an
++                    // error, even within the typeof and delete operators
++                    if (!(anonname === "typeof" || anonname === "delete") ||
++                        (nexttoken && (nexttoken.value === "." || nexttoken.value === "["))) {
++
++                        isundef(funct, "'{a}' is not defined.", token, v);
++                    }
++                }
++
++                note_implied(token);
++            } else {
++                // If the name is already defined in the current
++                // function, but not as outer, then there is a scope error.
++
++                switch (funct[v]) {
++                case "closure":
++                case "function":
++                case "var":
++                case "unused":
++                    warning("'{a}' used out of scope.", token, v);
++                    break;
++                case "label":
++                    warning("'{a}' is a statement label.", token, v);
++                    break;
++                case "outer":
++                case "global":
++                    break;
++                default:
++                    // If the name is defined in an outer function, make an outer entry,
++                    // and if it was unused, make it var.
++                    if (s === true) {
++                        funct[v] = true;
++                    } else if (s === null) {
++                        warning("'{a}' is not allowed.", token, v);
++                        note_implied(token);
++                    } else if (typeof s !== "object") {
++                        // Operators typeof and delete do not raise runtime errors even
++                        // if the base object of a reference is null so no need to
++                        // display warning if we're inside of typeof or delete.
++                        if (option.undef) {
++                            // Attempting to subscript a null reference will throw an
++                            // error, even within the typeof and delete operators
++                            if (!(anonname === "typeof" || anonname === "delete") ||
++                                (nexttoken &&
++                                    (nexttoken.value === "." || nexttoken.value === "["))) {
++
++                                isundef(funct, "'{a}' is not defined.", token, v);
++                            }
++                        }
++                        funct[v] = true;
++                        note_implied(token);
++                    } else {
++                        switch (s[v]) {
++                        case "function":
++                        case "unction":
++                            this["function"] = true;
++                            s[v] = "closure";
++                            funct[v] = s["(global)"] ? "global" : "outer";
++                            break;
++                        case "var":
++                        case "unused":
++                            s[v] = "closure";
++                            funct[v] = s["(global)"] ? "global" : "outer";
++                            break;
++                        case "closure":
++                            funct[v] = s["(global)"] ? "global" : "outer";
++                            break;
++                        case "label":
++                            warning("'{a}' is a statement label.", token, v);
++                        }
++                    }
++                }
++            }
++            return this;
++        },
++        led: function () {
++            error("Expected an operator and instead saw '{a}'.",
++                nexttoken, nexttoken.value);
++        }
++    };
++
++    type("(regexp)", function () {
++        return this;
++    });
++
++
++// ECMAScript parser
++
++    delim("(endline)");
++    delim("(begin)");
++    delim("(end)").reach = true;
++    delim("</").reach = true;
++    delim("<!");
++    delim("<!--");
++    delim("-->");
++    delim("(error)").reach = true;
++    delim("}").reach = true;
++    delim(")");
++    delim("]");
++    delim("\"").reach = true;
++    delim("'").reach = true;
++    delim(";");
++    delim(":").reach = true;
++    delim(",");
++    delim("#");
++    delim("@");
++    reserve("else");
++    reserve("case").reach = true;
++    reserve("catch");
++    reserve("default").reach = true;
++    reserve("finally");
++    reservevar("arguments", function (x) {
++        if (directive["use strict"] && funct["(global)"]) {
++            warning("Strict violation.", x);
++        }
++    });
++    reservevar("eval");
++    reservevar("false");
++    reservevar("Infinity");
++    reservevar("null");
++    reservevar("this", function (x) {
++        if (directive["use strict"] && !option.validthis && ((funct["(statement)"] &&
++                funct["(name)"].charAt(0) > "Z") || funct["(global)"])) {
++            warning("Possible strict violation.", x);
++        }
++    });
++    reservevar("true");
++    reservevar("undefined");
++    assignop("=", "assign", 20);
++    assignop("+=", "assignadd", 20);
++    assignop("-=", "assignsub", 20);
++    assignop("*=", "assignmult", 20);
++    assignop("/=", "assigndiv", 20).nud = function () {
++        error("A regular expression literal can be confused with '/='.");
++    };
++    assignop("%=", "assignmod", 20);
++    bitwiseassignop("&=", "assignbitand", 20);
++    bitwiseassignop("|=", "assignbitor", 20);
++    bitwiseassignop("^=", "assignbitxor", 20);
++    bitwiseassignop("<<=", "assignshiftleft", 20);
++    bitwiseassignop(">>=", "assignshiftright", 20);
++    bitwiseassignop(">>>=", "assignshiftrightunsigned", 20);
++    infix("?", function (left, that) {
++        that.left = left;
++        that.right = expression(10);
++        advance(":");
++        that["else"] = expression(10);
++        return that;
++    }, 30);
++
++    infix("||", "or", 40);
++    infix("&&", "and", 50);
++    bitwise("|", "bitor", 70);
++    bitwise("^", "bitxor", 80);
++    bitwise("&", "bitand", 90);
++    relation("==", function (left, right) {
++        var eqnull = option.eqnull && (left.value === "null" || right.value === "null");
++
++        if (!eqnull && option.eqeqeq)
++            warning("Expected '{a}' and instead saw '{b}'.", this, "===", "==");
++        else if (isPoorRelation(left))
++            warning("Use '{a}' to compare with '{b}'.", this, "===", left.value);
++        else if (isPoorRelation(right))
++            warning("Use '{a}' to compare with '{b}'.", this, "===", right.value);
++
++        return this;
++    });
++    relation("===");
++    relation("!=", function (left, right) {
++        var eqnull = option.eqnull &&
++                (left.value === "null" || right.value === "null");
++
++        if (!eqnull && option.eqeqeq) {
++            warning("Expected '{a}' and instead saw '{b}'.",
++                    this, "!==", "!=");
++        } else if (isPoorRelation(left)) {
++            warning("Use '{a}' to compare with '{b}'.",
++                    this, "!==", left.value);
++        } else if (isPoorRelation(right)) {
++            warning("Use '{a}' to compare with '{b}'.",
++                    this, "!==", right.value);
++        }
++        return this;
++    });
++    relation("!==");
++    relation("<");
++    relation(">");
++    relation("<=");
++    relation(">=");
++    bitwise("<<", "shiftleft", 120);
++    bitwise(">>", "shiftright", 120);
++    bitwise(">>>", "shiftrightunsigned", 120);
++    infix("in", "in", 120);
++    infix("instanceof", "instanceof", 120);
++    infix("+", function (left, that) {
++        var right = expression(130);
++        if (left && right && left.id === "(string)" && right.id === "(string)") {
++            left.value += right.value;
++            left.character = right.character;
++            if (!option.scripturl && jx.test(left.value)) {
++                warning("JavaScript URL.", left);
++            }
++            return left;
++        }
++        that.left = left;
++        that.right = right;
++        return that;
++    }, 130);
++    prefix("+", "num");
++    prefix("+++", function () {
++        warning("Confusing pluses.");
++        this.right = expression(150);
++        this.arity = "unary";
++        return this;
++    });
++    infix("+++", function (left) {
++        warning("Confusing pluses.");
++        this.left = left;
++        this.right = expression(130);
++        return this;
++    }, 130);
++    infix("-", "sub", 130);
++    prefix("-", "neg");
++    prefix("---", function () {
++        warning("Confusing minuses.");
++        this.right = expression(150);
++        this.arity = "unary";
++        return this;
++    });
++    infix("---", function (left) {
++        warning("Confusing minuses.");
++        this.left = left;
++        this.right = expression(130);
++        return this;
++    }, 130);
++    infix("*", "mult", 140);
++    infix("/", "div", 140);
++    infix("%", "mod", 140);
++
++    suffix("++", "postinc");
++    prefix("++", "preinc");
++    syntax["++"].exps = true;
++
++    suffix("--", "postdec");
++    prefix("--", "predec");
++    syntax["--"].exps = true;
++    prefix("delete", function () {
++        var p = expression(0);
++        if (!p || (p.id !== "." && p.id !== "[")) {
++            warning("Variables should not be deleted.");
++        }
++        this.first = p;
++        return this;
++    }).exps = true;
++
++    prefix("~", function () {
++        if (option.bitwise) {
++            warning("Unexpected '{a}'.", this, "~");
++        }
++        expression(150);
++        return this;
++    });
++
++    prefix("!", function () {
++        this.right = expression(150);
++        this.arity = "unary";
++        if (bang[this.right.id] === true) {
++            warning("Confusing use of '{a}'.", this, "!");
++        }
++        return this;
++    });
++    prefix("typeof", "typeof");
++    prefix("new", function () {
++        var c = expression(155), i;
++        if (c && c.id !== "function") {
++            if (c.identifier) {
++                c["new"] = true;
++                switch (c.value) {
++                case "Number":
++                case "String":
++                case "Boolean":
++                case "Math":
++                case "JSON":
++                    warning("Do not use {a} as a constructor.", prevtoken, c.value);
++                    break;
++                case "Function":
++                    if (!option.evil) {
++                        warning("The Function constructor is eval.");
++                    }
++                    break;
++                case "Date":
++                case "RegExp":
++                    break;
++                default:
++                    if (c.id !== "function") {
++                        i = c.value.substr(0, 1);
++                        if (option.newcap && (i < "A" || i > "Z") && !is_own(global, c.value)) {
++                            warning("A constructor name should start with an uppercase letter.",
++                                token);
++                        }
++                    }
++                }
++            } else {
++                if (c.id !== "." && c.id !== "[" && c.id !== "(") {
++                    warning("Bad constructor.", token);
++                }
++            }
++        } else {
++            if (!option.supernew)
++                warning("Weird construction. Delete 'new'.", this);
++        }
++        adjacent(token, nexttoken);
++        if (nexttoken.id !== "(" && !option.supernew) {
++            warning("Missing '()' invoking a constructor.",
++                token, token.value);
++        }
++        this.first = c;
++        return this;
++    });
++    syntax["new"].exps = true;
++
++    prefix("void").exps = true;
++
++    infix(".", function (left, that) {
++        adjacent(prevtoken, token);
++        nobreak();
++        var m = identifier();
++        if (typeof m === "string") {
++            countMember(m);
++        }
++        that.left = left;
++        that.right = m;
++        if (left && left.value === "arguments" && (m === "callee" || m === "caller")) {
++            if (option.noarg)
++                warning("Avoid arguments.{a}.", left, m);
++            else if (directive["use strict"])
++                error("Strict violation.");
++        } else if (!option.evil && left && left.value === "document" &&
++                (m === "write" || m === "writeln")) {
++            warning("document.write can be a form of eval.", left);
++        }
++        if (!option.evil && (m === "eval" || m === "execScript")) {
++            warning("eval is evil.");
++        }
++        return that;
++    }, 160, true);
++
++    infix("(", function (left, that) {
++        if (prevtoken.id !== "}" && prevtoken.id !== ")") {
++            nobreak(prevtoken, token);
++        }
++        nospace();
++        if (option.immed && !left.immed && left.id === "function") {
++            warning("Wrap an immediate function invocation in parentheses " +
++                "to assist the reader in understanding that the expression " +
++                "is the result of a function, and not the function itself.");
++        }
++        var n = 0,
++            p = [];
++        if (left) {
++            if (left.type === "(identifier)") {
++                if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {
++                    if ("Number String Boolean Date Object".indexOf(left.value) === -1) {
++                        if (left.value === "Math") {
++                            warning("Math is not a function.", left);
++                        } else if (option.newcap) {
++                            warning("Missing 'new' prefix when invoking a constructor.", left);
++                        }
++                    }
++                }
++            }
++        }
++        if (nexttoken.id !== ")") {
++            for (;;) {
++                p[p.length] = expression(10);
++                n += 1;
++                if (nexttoken.id !== ",") {
++                    break;
++                }
++                comma();
++            }
++        }
++        advance(")");
++        nospace(prevtoken, token);
++        if (typeof left === "object") {
++            if (left.value === "parseInt" && n === 1) {
++                warning("Missing radix parameter.", token);
++            }
++            if (!option.evil) {
++                if (left.value === "eval" || left.value === "Function" ||
++                        left.value === "execScript") {
++                    warning("eval is evil.", left);
++
++                    if (p[0] && [0].id === "(string)") {
++                        addInternalSrc(left, p[0].value);
++                    }
++                } else if (p[0] && p[0].id === "(string)" &&
++                       (left.value === "setTimeout" ||
++                        left.value === "setInterval")) {
++                    warning(
++    "Implied eval is evil. Pass a function instead of a string.", left);
++                    addInternalSrc(left, p[0].value);
++
++                // window.setTimeout/setInterval
++                } else if (p[0] && p[0].id === "(string)" &&
++                       left.value === "." &&
++                       left.left.value === "window" &&
++                       (left.right === "setTimeout" ||
++                        left.right === "setInterval")) {
++                    warning(
++    "Implied eval is evil. Pass a function instead of a string.", left);
++                    addInternalSrc(left, p[0].value);
++                }
++            }
++            if (!left.identifier && left.id !== "." && left.id !== "[" &&
++                    left.id !== "(" && left.id !== "&&" && left.id !== "||" &&
++                    left.id !== "?") {
++                warning("Bad invocation.", left);
++            }
++        }
++        that.left = left;
++        return that;
++    }, 155, true).exps = true;
++
++    prefix("(", function () {
++        nospace();
++        if (nexttoken.id === "function") {
++            nexttoken.immed = true;
++        }
++        var v = expression(0);
++        advance(")", this);
++        nospace(prevtoken, token);
++        if (option.immed && v.id === "function") {
++            if (nexttoken.id !== "(" &&
++              (nexttoken.id !== "." || (peek().value !== "call" && peek().value !== "apply"))) {
++                warning(
++"Do not wrap function literals in parens unless they are to be immediately invoked.",
++                        this);
++            }
++        }
++
++        return v;
++    });
++
++    infix("[", function (left, that) {
++        nobreak(prevtoken, token);
++        nospace();
++        var e = expression(0), s;
++        if (e && e.type === "(string)") {
++            if (!option.evil && (e.value === "eval" || e.value === "execScript")) {
++                warning("eval is evil.", that);
++            }
++            countMember(e.value);
++            if (!option.sub && ix.test(e.value)) {
++                s = syntax[e.value];
++                if (!s || !s.reserved) {
++                    warning("['{a}'] is better written in dot notation.",
++                            prevtoken, e.value);
++                }
++            }
++        }
++        advance("]", that);
++        nospace(prevtoken, token);
++        that.left = left;
++        that.right = e;
++        return that;
++    }, 160, true);
++
++    prefix("[", function () {
++        var b = token.line !== nexttoken.line;
++        this.first = [];
++        if (b) {
++            indent += option.indent;
++            if (nexttoken.from === indent + option.indent) {
++                indent += option.indent;
++            }
++        }
++        while (nexttoken.id !== "(end)") {
++            while (nexttoken.id === ",") {
++                if (!option.es5)
++                    warning("Extra comma.");
++                advance(",");
++            }
++            if (nexttoken.id === "]") {
++                break;
++            }
++            if (b && token.line !== nexttoken.line) {
++                indentation();
++            }
++            this.first.push(expression(10));
++            if (nexttoken.id === ",") {
++                comma();
++                if (nexttoken.id === "]" && !option.es5) {
++                    warning("Extra comma.", token);
++                    break;
++                }
++            } else {
++                break;
++            }
++        }
++        if (b) {
++            indent -= option.indent;
++            indentation();
++        }
++        advance("]", this);
++        return this;
++    }, 160);
++
++
++    function property_name() {
++        var id = optionalidentifier(true);
++        if (!id) {
++            if (nexttoken.id === "(string)") {
++                id = nexttoken.value;
++                advance();
++            } else if (nexttoken.id === "(number)") {
++                id = nexttoken.value.toString();
++                advance();
++            }
++        }
++        return id;
++    }
++
++
++    function functionparams() {
++        var next   = nexttoken;
++        var params = [];
++        var ident;
++
++        advance("(");
++        nospace();
++
++        if (nexttoken.id === ")") {
++            advance(")");
++            return;
++        }
++
++        for (;;) {
++            ident = identifier(true);
++            params.push(ident);
++            addlabel(ident, "unused", token);
++            if (nexttoken.id === ",") {
++                comma();
++            } else {
++                advance(")", next);
++                nospace(prevtoken, token);
++                return params;
++            }
++        }
++    }
++
++
++    function doFunction(name, statement) {
++        var f;
++        var oldOption = option;
++        var oldScope  = scope;
++
++        option = Object.create(option);
++        scope  = Object.create(scope);
++
++        funct = {
++            "(name)"     : name || "\"" + anonname + "\"",
++            "(line)"     : nexttoken.line,
++            "(character)": nexttoken.character,
++            "(context)"  : funct,
++            "(breakage)" : 0,
++            "(loopage)"  : 0,
++            "(metrics)"  : createMetrics(nexttoken),
++            "(scope)"    : scope,
++            "(statement)": statement,
++            "(tokens)"   : {}
++        };
++
++        f = funct;
++        token.funct = funct;
++
++        functions.push(funct);
++
++        if (name) {
++            addlabel(name, "function");
++        }
++
++        funct["(params)"] = functionparams();
++        funct["(metrics)"].verifyMaxParametersPerFunction(funct["(params)"]);
++
++        block(false, false, true);
++
++        funct["(metrics)"].verifyMaxStatementsPerFunction();
++        funct["(metrics)"].verifyMaxComplexityPerFunction();
++
++        scope = oldScope;
++        option = oldOption;
++        funct["(last)"] = token.line;
++        funct["(lastcharacter)"] = token.character;
++        funct = funct["(context)"];
++
++        return f;
++    }
++
++    function createMetrics(functionStartToken) {
++        return {
++            statementCount: 0,
++            nestedBlockDepth: -1,
++            ComplexityCount: 1,
++            verifyMaxStatementsPerFunction: function () {
++                if (option.maxstatements &&
++                    this.statementCount > option.maxstatements) {
++                    var message = "Too many statements per function (" + this.statementCount + ").";
++                    warning(message, functionStartToken);
++                }
++            },
++
++            verifyMaxParametersPerFunction: function (params) {
++                params = params || [];
++
++                if (option.maxparams && params.length > option.maxparams) {
++                    var message = "Too many parameters per function (" + params.length + ").";
++                    warning(message, functionStartToken);
++                }
++            },
++
++            verifyMaxNestedBlockDepthPerFunction: function () {
++                if (option.maxdepth &&
++                    this.nestedBlockDepth > 0 &&
++                    this.nestedBlockDepth === option.maxdepth + 1) {
++                    var message = "Blocks are nested too deeply (" + this.nestedBlockDepth + ").";
++                    warning(message);
++                }
++            },
++
++            verifyMaxComplexityPerFunction: function () {
++                var max = option.maxcomplexity;
++                var cc = this.ComplexityCount;
++                if (max && cc > max) {
++                    var message = "Cyclomatic complexity is too high per function (" + cc + ").";
++                    warning(message, functionStartToken);
++                }
++            }
++        };
++    }
++
++    function increaseComplexityCount() {
++        funct["(metrics)"].ComplexityCount += 1;
++    }
++
++
++    (function (x) {
++        x.nud = function () {
++            var b, f, i, p, t;
++            var props = {}; // All properties, including accessors
++
++            function saveProperty(name, token) {
++                if (props[name] && is_own(props, name))
++                    warning("Duplicate member '{a}'.", nexttoken, i);
++                else
++                    props[name] = {};
++
++                props[name].basic = true;
++                props[name].basicToken = token;
++            }
++
++            function saveSetter(name, token) {
++                if (props[name] && is_own(props, name)) {
++                    if (props[name].basic || props[name].setter)
++                        warning("Duplicate member '{a}'.", nexttoken, i);
++                } else {
++                    props[name] = {};
++                }
++
++                props[name].setter = true;
++                props[name].setterToken = token;
++            }
++
++            function saveGetter(name) {
++                if (props[name] && is_own(props, name)) {
++                    if (props[name].basic || props[name].getter)
++                        warning("Duplicate member '{a}'.", nexttoken, i);
++                } else {
++                    props[name] = {};
++                }
++
++                props[name].getter = true;
++                props[name].getterToken = token;
++            }
++
++            b = token.line !== nexttoken.line;
++            if (b) {
++                indent += option.indent;
++                if (nexttoken.from === indent + option.indent) {
++                    indent += option.indent;
++                }
++            }
++            for (;;) {
++                if (nexttoken.id === "}") {
++                    break;
++                }
++                if (b) {
++                    indentation();
++                }
++                if (nexttoken.value === "get" && peek().id !== ":") {
++                    advance("get");
++                    if (!option.es5) {
++                        error("get/set are ES5 features.");
++                    }
++                    i = property_name();
++                    if (!i) {
++                        error("Missing property name.");
++                    }
++                    saveGetter(i);
++                    t = nexttoken;
++                    adjacent(token, nexttoken);
++                    f = doFunction();
++                    p = f["(params)"];
++                    if (p) {
++                        warning("Unexpected parameter '{a}' in get {b} function.", t, p[0], i);
++                    }
++                    adjacent(token, nexttoken);
++                } else if (nexttoken.value === "set" && peek().id !== ":") {
++                    advance("set");
++                    if (!option.es5) {
++                        error("get/set are ES5 features.");
++                    }
++                    i = property_name();
++                    if (!i) {
++                        error("Missing property name.");
++                    }
++                    saveSetter(i, nexttoken);
++                    t = nexttoken;
++                    adjacent(token, nexttoken);
++                    f = doFunction();
++                    p = f["(params)"];
++                    if (!p || p.length !== 1) {
++                        warning("Expected a single parameter in set {a} function.", t, i);
++                    }
++                } else {
++                    i = property_name();
++                    saveProperty(i, nexttoken);
++                    if (typeof i !== "string") {
++                        break;
++                    }
++                    advance(":");
++                    nonadjacent(token, nexttoken);
++                    expression(10);
++                }
++
++                countMember(i);
++                if (nexttoken.id === ",") {
++                    comma();
++                    if (nexttoken.id === ",") {
++                        warning("Extra comma.", token);
++                    } else if (nexttoken.id === "}" && !option.es5) {
++                        warning("Extra comma.", token);
++                    }
++                } else {
++                    break;
++                }
++            }
++            if (b) {
++                indent -= option.indent;
++                indentation();
++            }
++            advance("}", this);
++
++            // Check for lonely setters if in the ES5 mode.
++            if (option.es5) {
++                for (var name in props) {
++                    if (is_own(props, name) && props[name].setter && !props[name].getter) {
++                        warning("Setter is defined without getter.", props[name].setterToken);
++                    }
++                }
++            }
++            return this;
++        };
++        x.fud = function () {
++            error("Expected to see a statement and instead saw a block.", token);
++        };
++    }(delim("{")));
++
++// This Function is called when esnext option is set to true
++// it adds the `const` statement to JSHINT
++
++    useESNextSyntax = function () {
++        var conststatement = stmt("const", function (prefix) {
++            var id, name, value;
++
++            this.first = [];
++            for (;;) {
++                nonadjacent(token, nexttoken);
++                id = identifier();
++                if (funct[id] === "const") {
++                    warning("const '" + id + "' has already been declared");
++                }
++                if (funct["(global)"] && predefined[id] === false) {
++                    warning("Redefinition of '{a}'.", token, id);
++                }
++                addlabel(id, "const");
++                if (prefix) {
++                    break;
++                }
++                name = token;
++                this.first.push(token);
++
++                if (nexttoken.id !== "=") {
++                    warning("const " +
++                      "'{a}' is initialized to 'undefined'.", token, id);
++                }
++
++                if (nexttoken.id === "=") {
++                    nonadjacent(token, nexttoken);
++                    advance("=");
++                    nonadjacent(token, nexttoken);
++                    if (nexttoken.id === "undefined") {
++                        warning("It is not necessary to initialize " +
++                          "'{a}' to 'undefined'.", token, id);
++                    }
++                    if (peek(0).id === "=" && nexttoken.identifier) {
++                        error("Constant {a} was not declared correctly.",
++                                nexttoken, nexttoken.value);
++                    }
++                    value = expression(0);
++                    name.first = value;
++                }
++
++                if (nexttoken.id !== ",") {
++                    break;
++                }
++                comma();
++            }
++            return this;
++        });
++        conststatement.exps = true;
++    };
++
++    var varstatement = stmt("var", function (prefix) {
++        // JavaScript does not have block scope. It only has function scope. So,
++        // declaring a variable in a block can have unexpected consequences.
++        var id, name, value;
++
++        if (funct["(onevar)"] && option.onevar) {
++            warning("Too many var statements.");
++        } else if (!funct["(global)"]) {
++            funct["(onevar)"] = true;
++        }
++
++        this.first = [];
++
++        for (;;) {
++            nonadjacent(token, nexttoken);
++            id = identifier();
++
++            if (option.esnext && funct[id] === "const") {
++                warning("const '" + id + "' has already been declared");
++            }
++
++            if (funct["(global)"] && predefined[id] === false) {
++                warning("Redefinition of '{a}'.", token, id);
++            }
++
++            addlabel(id, "unused", token);
++
++            if (prefix) {
++                break;
++            }
++
++            name = token;
++            this.first.push(token);
++
++            if (nexttoken.id === "=") {
++                nonadjacent(token, nexttoken);
++                advance("=");
++                nonadjacent(token, nexttoken);
++                if (nexttoken.id === "undefined") {
++                    warning("It is not necessary to initialize '{a}' to 'undefined'.", token, id);
++                }
++                if (peek(0).id === "=" && nexttoken.identifier) {
++                    error("Variable {a} was not declared correctly.",
++                            nexttoken, nexttoken.value);
++                }
++                value = expression(0);
++                name.first = value;
++            }
++            if (nexttoken.id !== ",") {
++                break;
++            }
++            comma();
++        }
++        return this;
++    });
++    varstatement.exps = true;
++
++    blockstmt("function", function () {
++        if (inblock) {
++            warning("Function declarations should not be placed in blocks. " +
++                "Use a function expression or move the statement to the top of " +
++                "the outer function.", token);
++
++        }
++        var i = identifier();
++        if (option.esnext && funct[i] === "const") {
++            warning("const '" + i + "' has already been declared");
++        }
++        adjacent(token, nexttoken);
++        addlabel(i, "unction", token);
++
++        doFunction(i, { statement: true });
++        if (nexttoken.id === "(" && nexttoken.line === token.line) {
++            error(
++"Function declarations are not invocable. Wrap the whole function invocation in parens.");
++        }
++        return this;
++    });
++
++    prefix("function", function () {
++        var i = optionalidentifier();
++        if (i) {
++            adjacent(token, nexttoken);
++        } else {
++            nonadjacent(token, nexttoken);
++        }
++        doFunction(i);
++        if (!option.loopfunc && funct["(loopage)"]) {
++            warning("Don't make functions within a loop.");
++        }
++        return this;
++    });
++
++    blockstmt("if", function () {
++        var t = nexttoken;
++        increaseComplexityCount();
++        advance("(");
++        nonadjacent(this, t);
++        nospace();
++        expression(20);
++        if (nexttoken.id === "=") {
++            if (!option.boss)
++                warning("Expected a conditional expression and instead saw an assignment.");
++            advance("=");
++            expression(20);
++        }
++        advance(")", t);
++        nospace(prevtoken, token);
++        block(true, true);
++        if (nexttoken.id === "else") {
++            nonadjacent(token, nexttoken);
++            advance("else");
++            if (nexttoken.id === "if" || nexttoken.id === "switch") {
++                statement(true);
++            } else {
++                block(true, true);
++            }
++        }
++        return this;
++    });
++
++    blockstmt("try", function () {
++        var b;
++
++        function doCatch() {
++            var oldScope = scope;
++            var e;
++
++            advance("catch");
++            nonadjacent(token, nexttoken);
++            advance("(");
++
++            scope = Object.create(oldScope);
++
++            e = nexttoken.value;
++            if (nexttoken.type !== "(identifier)") {
++                e = null;
++                warning("Expected an identifier and instead saw '{a}'.", nexttoken, e);
++            }
++
++            advance();
++            advance(")");
++
++            funct = {
++                "(name)"     : "(catch)",
++                "(line)"     : nexttoken.line,
++                "(character)": nexttoken.character,
++                "(context)"  : funct,
++                "(breakage)" : funct["(breakage)"],
++                "(loopage)"  : funct["(loopage)"],
++                "(scope)"    : scope,
++                "(statement)": false,
++                "(metrics)"  : createMetrics(nexttoken),
++                "(catch)"    : true,
++                "(tokens)"   : {}
++            };
++
++            if (e) {
++                addlabel(e, "exception");
++            }
++
++            token.funct = funct;
++            functions.push(funct);
++
++            block(false);
++
++            scope = oldScope;
++
++            funct["(last)"] = token.line;
++            funct["(lastcharacter)"] = token.character;
++            funct = funct["(context)"];
++        }
++
++        block(false);
++
++        if (nexttoken.id === "catch") {
++            increaseComplexityCount();
++            doCatch();
++            b = true;
++        }
++
++        if (nexttoken.id === "finally") {
++            advance("finally");
++            block(false);
++            return;
++        } else if (!b) {
++            error("Expected '{a}' and instead saw '{b}'.",
++                    nexttoken, "catch", nexttoken.value);
++        }
++
++        return this;
++    });
++
++    blockstmt("while", function () {
++        var t = nexttoken;
++        funct["(breakage)"] += 1;
++        funct["(loopage)"] += 1;
++        increaseComplexityCount();
++        advance("(");
++        nonadjacent(this, t);
++        nospace();
++        expression(20);
++        if (nexttoken.id === "=") {
++            if (!option.boss)
++                warning("Expected a conditional expression and instead saw an assignment.");
++            advance("=");
++            expression(20);
++        }
++        advance(")", t);
++        nospace(prevtoken, token);
++        block(true, true);
++        funct["(breakage)"] -= 1;
++        funct["(loopage)"] -= 1;
++        return this;
++    }).labelled = true;
++
++    blockstmt("with", function () {
++        var t = nexttoken;
++        if (directive["use strict"]) {
++            error("'with' is not allowed in strict mode.", token);
++        } else if (!option.withstmt) {
++            warning("Don't use 'with'.", token);
++        }
++
++        advance("(");
++        nonadjacent(this, t);
++        nospace();
++        expression(0);
++        advance(")", t);
++        nospace(prevtoken, token);
++        block(true, true);
++
++        return this;
++    });
++
++    blockstmt("switch", function () {
++        var t = nexttoken,
++            g = false;
++        funct["(breakage)"] += 1;
++        advance("(");
++        nonadjacent(this, t);
++        nospace();
++        this.condition = expression(20);
++        advance(")", t);
++        nospace(prevtoken, token);
++        nonadjacent(token, nexttoken);
++        t = nexttoken;
++        advance("{");
++        nonadjacent(token, nexttoken);
++        indent += option.indent;
++        this.cases = [];
++        for (;;) {
++            switch (nexttoken.id) {
++            case "case":
++                switch (funct["(verb)"]) {
++                case "break":
++                case "case":
++                case "continue":
++                case "return":
++                case "switch":
++                case "throw":
++                    break;
++                default:
++                    // You can tell JSHint that you don't use break intentionally by
++                    // adding a comment /* falls through */ on a line just before
++                    // the next `case`.
++                    if (!ft.test(lines[nexttoken.line - 2])) {
++                        warning(
++                            "Expected a 'break' statement before 'case'.",
++                            token);
++                    }
++                }
++                indentation(-option.indent);
++                advance("case");
++                this.cases.push(expression(20));
++                increaseComplexityCount();
++                g = true;
++                advance(":");
++                funct["(verb)"] = "case";
++                break;
++            case "default":
++                switch (funct["(verb)"]) {
++                case "break":
++                case "continue":
++                case "return":
++                case "throw":
++                    break;
++                default:
++                    if (!ft.test(lines[nexttoken.line - 2])) {
++                        warning(
++                            "Expected a 'break' statement before 'default'.",
++                            token);
++                    }
++                }
++                indentation(-option.indent);
++                advance("default");
++                g = true;
++                advance(":");
++                break;
++            case "}":
++                indent -= option.indent;
++                indentation();
++                advance("}", t);
++                if (this.cases.length === 1 || this.condition.id === "true" ||
++                        this.condition.id === "false") {
++                    if (!option.onecase)
++                        warning("This 'switch' should be an 'if'.", this);
++                }
++                funct["(breakage)"] -= 1;
++                funct["(verb)"] = undefined;
++                return;
++            case "(end)":
++                error("Missing '{a}'.", nexttoken, "}");
++                return;
++            default:
++                if (g) {
++                    switch (token.id) {
++                    case ",":
++                        error("Each value should have its own case label.");
++                        return;
++                    case ":":
++                        g = false;
++                        statements();
++                        break;
++                    default:
++                        error("Missing ':' on a case clause.", token);
++                        return;
++                    }
++                } else {
++                    if (token.id === ":") {
++                        advance(":");
++                        error("Unexpected '{a}'.", token, ":");
++                        statements();
++                    } else {
++                        error("Expected '{a}' and instead saw '{b}'.",
++                            nexttoken, "case", nexttoken.value);
++                        return;
++                    }
++                }
++            }
++        }
++    }).labelled = true;
++
++    stmt("debugger", function () {
++        if (!option.debug) {
++            warning("All 'debugger' statements should be removed.");
++        }
++        return this;
++    }).exps = true;
++
++    (function () {
++        var x = stmt("do", function () {
++            funct["(breakage)"] += 1;
++            funct["(loopage)"] += 1;
++            increaseComplexityCount();
++
++            this.first = block(true);
++            advance("while");
++            var t = nexttoken;
++            nonadjacent(token, t);
++            advance("(");
++            nospace();
++            expression(20);
++            if (nexttoken.id === "=") {
++                if (!option.boss)
++                    warning("Expected a conditional expression and instead saw an assignment.");
++                advance("=");
++                expression(20);
++            }
++            advance(")", t);
++            nospace(prevtoken, token);
++            funct["(breakage)"] -= 1;
++            funct["(loopage)"] -= 1;
++            return this;
++        });
++        x.labelled = true;
++        x.exps = true;
++    }());
++
++    blockstmt("for", function () {
++        var s, t = nexttoken;
++        funct["(breakage)"] += 1;
++        funct["(loopage)"] += 1;
++        increaseComplexityCount();
++        advance("(");
++        nonadjacent(this, t);
++        nospace();
++        if (peek(nexttoken.id === "var" ? 1 : 0).id === "in") {
++            if (nexttoken.id === "var") {
++                advance("var");
++                varstatement.fud.call(varstatement, true);
++            } else {
++                switch (funct[nexttoken.value]) {
++                case "unused":
++                    funct[nexttoken.value] = "var";
++                    break;
++                case "var":
++                    break;
++                default:
++                    warning("Bad for in variable '{a}'.",
++                            nexttoken, nexttoken.value);
++                }
++                advance();
++            }
++            advance("in");
++            expression(20);
++            advance(")", t);
++            s = block(true, true);
++            if (option.forin && s && (s.length > 1 || typeof s[0] !== "object" ||
++                    s[0].value !== "if")) {
++                warning("The body of a for in should be wrapped in an if statement to filter " +
++                        "unwanted properties from the prototype.", this);
++            }
++            funct["(breakage)"] -= 1;
++            funct["(loopage)"] -= 1;
++            return this;
++        } else {
++            if (nexttoken.id !== ";") {
++                if (nexttoken.id === "var") {
++                    advance("var");
++                    varstatement.fud.call(varstatement);
++                } else {
++                    for (;;) {
++                        expression(0, "for");
++                        if (nexttoken.id !== ",") {
++                            break;
++                        }
++                        comma();
++                    }
++                }
++            }
++            nolinebreak(token);
++            advance(";");
++            if (nexttoken.id !== ";") {
++                expression(20);
++                if (nexttoken.id === "=") {
++                    if (!option.boss)
++                        warning("Expected a conditional expression and instead saw an assignment.");
++                    advance("=");
++                    expression(20);
++                }
++            }
++            nolinebreak(token);
++            advance(";");
++            if (nexttoken.id === ";") {
++                error("Expected '{a}' and instead saw '{b}'.",
++                        nexttoken, ")", ";");
++            }
++            if (nexttoken.id !== ")") {
++                for (;;) {
++                    expression(0, "for");
++                    if (nexttoken.id !== ",") {
++                        break;
++                    }
++                    comma();
++                }
++            }
++            advance(")", t);
++            nospace(prevtoken, token);
++            block(true, true);
++            funct["(breakage)"] -= 1;
++            funct["(loopage)"] -= 1;
++            return this;
++        }
++    }).labelled = true;
++
++
++    stmt("break", function () {
++        var v = nexttoken.value;
++
++        if (funct["(breakage)"] === 0)
++            warning("Unexpected '{a}'.", nexttoken, this.value);
++
++        if (!option.asi)
++            nolinebreak(this);
++
++        if (nexttoken.id !== ";") {
++            if (token.line === nexttoken.line) {
++                if (funct[v] !== "label") {
++                    warning("'{a}' is not a statement label.", nexttoken, v);
++                } else if (scope[v] !== funct) {
++                    warning("'{a}' is out of scope.", nexttoken, v);
++                }
++                this.first = nexttoken;
++                advance();
++            }
++        }
++        reachable("break");
++        return this;
++    }).exps = true;
++
++
++    stmt("continue", function () {
++        var v = nexttoken.value;
++
++        if (funct["(breakage)"] === 0)
++            warning("Unexpected '{a}'.", nexttoken, this.value);
++
++        if (!option.asi)
++            nolinebreak(this);
++
++        if (nexttoken.id !== ";") {
++            if (token.line === nexttoken.line) {
++                if (funct[v] !== "label") {
++                    warning("'{a}' is not a statement label.", nexttoken, v);
++                } else if (scope[v] !== funct) {
++                    warning("'{a}' is out of scope.", nexttoken, v);
++                }
++                this.first = nexttoken;
++                advance();
++            }
++        } else if (!funct["(loopage)"]) {
++            warning("Unexpected '{a}'.", nexttoken, this.value);
++        }
++        reachable("continue");
++        return this;
++    }).exps = true;
++
++
++    stmt("return", function () {
++        if (this.line === nexttoken.line) {
++            if (nexttoken.id === "(regexp)")
++                warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator.");
++
++            if (nexttoken.id !== ";" && !nexttoken.reach) {
++                nonadjacent(token, nexttoken);
++                if (peek().value === "=" && !option.boss) {
++                    warningAt("Did you mean to return a conditional instead of an assignment?",
++                              token.line, token.character + 1);
++                }
++                this.first = expression(0);
++            }
++        } else if (!option.asi) {
++            nolinebreak(this); // always warn (Line breaking error)
++        }
++        reachable("return");
++        return this;
++    }).exps = true;
++
++
++    stmt("throw", function () {
++        nolinebreak(this);
++        nonadjacent(token, nexttoken);
++        this.first = expression(20);
++        reachable("throw");
++        return this;
++    }).exps = true;
++
++//  Superfluous reserved words
++
++    reserve("class");
++    reserve("const");
++    reserve("enum");
++    reserve("export");
++    reserve("extends");
++    reserve("import");
++    reserve("super");
++
++    reserve("let");
++    reserve("yield");
++    reserve("implements");
++    reserve("interface");
++    reserve("package");
++    reserve("private");
++    reserve("protected");
++    reserve("public");
++    reserve("static");
++
++
++// Parse JSON
++
++    function jsonValue() {
++
++        function jsonObject() {
++            var o = {}, t = nexttoken;
++            advance("{");
++            if (nexttoken.id !== "}") {
++                for (;;) {
++                    if (nexttoken.id === "(end)") {
++                        error("Missing '}' to match '{' from line {a}.",
++                                nexttoken, t.line);
++                    } else if (nexttoken.id === "}") {
++                        warning("Unexpected comma.", token);
++                        break;
++                    } else if (nexttoken.id === ",") {
++                        error("Unexpected comma.", nexttoken);
++                    } else if (nexttoken.id !== "(string)") {
++                        warning("Expected a string and instead saw {a}.",
++                                nexttoken, nexttoken.value);
++                    }
++                    if (o[nexttoken.value] === true) {
++                        warning("Duplicate key '{a}'.",
++                                nexttoken, nexttoken.value);
++                    } else if ((nexttoken.value === "__proto__" &&
++                        !option.proto) || (nexttoken.value === "__iterator__" &&
++                        !option.iterator)) {
++                        warning("The '{a}' key may produce unexpected results.",
++                            nexttoken, nexttoken.value);
++                    } else {
++                        o[nexttoken.value] = true;
++                    }
++                    advance();
++                    advance(":");
++                    jsonValue();
++                    if (nexttoken.id !== ",") {
++                        break;
++                    }
++                    advance(",");
++                }
++            }
++            advance("}");
++        }
++
++        function jsonArray() {
++            var t = nexttoken;
++            advance("[");
++            if (nexttoken.id !== "]") {
++                for (;;) {
++                    if (nexttoken.id === "(end)") {
++                        error("Missing ']' to match '[' from line {a}.",
++                                nexttoken, t.line);
++                    } else if (nexttoken.id === "]") {
++                        warning("Unexpected comma.", token);
++                        break;
++                    } else if (nexttoken.id === ",") {
++                        error("Unexpected comma.", nexttoken);
++                    }
++                    jsonValue();
++                    if (nexttoken.id !== ",") {
++                        break;
++                    }
++                    advance(",");
++                }
++            }
++            advance("]");
++        }
++
++        switch (nexttoken.id) {
++        case "{":
++            jsonObject();
++            break;
++        case "[":
++            jsonArray();
++            break;
++        case "true":
++        case "false":
++        case "null":
++        case "(number)":
++        case "(string)":
++            advance();
++            break;
++        case "-":
++            advance("-");
++            if (token.character !== nexttoken.from) {
++                warning("Unexpected space after '-'.", token);
++            }
++            adjacent(token, nexttoken);
++            advance("(number)");
++            break;
++        default:
++            error("Expected a JSON value.", nexttoken);
++        }
++    }
++
++
++    // The actual JSHINT function itself.
++    var itself = function (s, o, g) {
++        var a, i, k, x;
++        var optionKeys;
++        var newOptionObj = {};
++
++        if (o && o.scope) {
++            JSHINT.scope = o.scope;
++        } else {
++            JSHINT.errors = [];
++            JSHINT.undefs = [];
++            JSHINT.internals = [];
++            JSHINT.blacklist = {};
++            JSHINT.scope = "(main)";
++        }
++
++        predefined = Object.create(standard);
++        declared = Object.create(null);
++        combine(predefined, g || {});
++
++        if (o) {
++            a = o.predef;
++            if (a) {
++                if (!Array.isArray(a) && typeof a === "object") {
++                    a = Object.keys(a);
++                }
++                a.forEach(function (item) {
++                    var slice;
++                    if (item[0] === "-") {
++                        slice = item.slice(1);
++                        JSHINT.blacklist[slice] = slice;
++                    } else {
++                        predefined[item] = true;
++                    }
++                });
++            }
++
++            optionKeys = Object.keys(o);
++            for (x = 0; x < optionKeys.length; x++) {
++                newOptionObj[optionKeys[x]] = o[optionKeys[x]];
++
++                if (optionKeys[x] === "newcap" && o[optionKeys[x]] === false)
++                    newOptionObj["(explicitNewcap)"] = true;
++
++                if (optionKeys[x] === "indent")
++                    newOptionObj.white = true;
++            }
++        }
++
++        option = newOptionObj;
++
++        option.indent = option.indent || 4;
++        option.maxerr = option.maxerr || 50;
++
++        tab = "";
++        for (i = 0; i < option.indent; i += 1) {
++            tab += " ";
++        }
++        indent = 1;
++        global = Object.create(predefined);
++        scope = global;
++        funct = {
++            "(global)":   true,
++            "(name)":     "(global)",
++            "(scope)":    scope,
++            "(breakage)": 0,
++            "(loopage)":  0,
++            "(tokens)":   {},
++            "(metrics)":   createMetrics(nexttoken)
++        };
++        functions = [funct];
++        urls = [];
++        stack = null;
++        member = {};
++        membersOnly = null;
++        implied = {};
++        inblock = false;
++        lookahead = [];
++        jsonmode = false;
++        warnings = 0;
++        lines = [];
++        unuseds = [];
++
++        if (!isString(s) && !Array.isArray(s)) {
++            errorAt("Input is neither a string nor an array of strings.", 0);
++            return false;
++        }
++
++        if (isString(s) && /^\s*$/g.test(s)) {
++            errorAt("Input is an empty string.", 0);
++            return false;
++        }
++
++        if (s.length === 0) {
++            errorAt("Input is an empty array.", 0);
++            return false;
++        }
++
++        lex.init(s);
++
++        prereg = true;
++        directive = {};
++
++        prevtoken = token = nexttoken = syntax["(begin)"];
++
++        // Check options
++        for (var name in o) {
++            if (is_own(o, name)) {
++                checkOption(name, token);
++            }
++        }
++
++        assume();
++
++        // combine the passed globals after we've assumed all our options
++        combine(predefined, g || {});
++
++        //reset values
++        comma.first = true;
++        quotmark = undefined;
++
++        try {
++            advance();
++            switch (nexttoken.id) {
++            case "{":
++            case "[":
++                option.laxbreak = true;
++                jsonmode = true;
++                jsonValue();
++                break;
++            default:
++                directives();
++                if (directive["use strict"] && !option.globalstrict) {
++                    warning("Use the function form of \"use strict\".", prevtoken);
++                }
++
++                statements();
++            }
++            advance((nexttoken && nexttoken.value !== ".")  ? "(end)" : undefined);
++
++            var markDefined = function (name, context) {
++                do {
++                    if (typeof context[name] === "string") {
++                        // JSHINT marks unused variables as 'unused' and
++                        // unused function declaration as 'unction'. This
++                        // code changes such instances back 'var' and
++                        // 'closure' so that the code in JSHINT.data()
++                        // doesn't think they're unused.
++
++                        if (context[name] === "unused")
++                            context[name] = "var";
++                        else if (context[name] === "unction")
++                            context[name] = "closure";
++
++                        return true;
++                    }
++
++                    context = context["(context)"];
++                } while (context);
++
++                return false;
++            };
++
++            var clearImplied = function (name, line) {
++                if (!implied[name])
++                    return;
++
++                var newImplied = [];
++                for (var i = 0; i < implied[name].length; i += 1) {
++                    if (implied[name][i] !== line)
++                        newImplied.push(implied[name][i]);
++                }
++
++                if (newImplied.length === 0)
++                    delete implied[name];
++                else
++                    implied[name] = newImplied;
++            };
++
++            var warnUnused = function (name, token) {
++                var line = token.line;
++                var chr  = token.character;
++
++                if (option.unused)
++                    warningAt("'{a}' is defined but never used.", line, chr, name);
++
++                unuseds.push({
++                    name: name,
++                    line: line,
++                    character: chr
++                });
++            };
++
++            var checkUnused = function (func, key) {
++                var type = func[key];
++                var token = func["(tokens)"][key];
++
++                if (key.charAt(0) === "(")
++                    return;
++
++                if (type !== "unused" && type !== "unction")
++                    return;
++
++                // Params are checked separately from other variables.
++                if (func["(params)"] && func["(params)"].indexOf(key) !== -1)
++                    return;
++
++                warnUnused(key, token);
++            };
++
++            // Check queued 'x is not defined' instances to see if they're still undefined.
++            for (i = 0; i < JSHINT.undefs.length; i += 1) {
++                k = JSHINT.undefs[i].slice(0);
++
++                if (markDefined(k[2].value, k[0])) {
++                    clearImplied(k[2].value, k[2].line);
++                } else {
++                    warning.apply(warning, k.slice(1));
++                }
++            }
++
++            functions.forEach(function (func) {
++                for (var key in func) {
++                    if (is_own(func, key)) {
++                        checkUnused(func, key);
++                    }
++                }
++
++                if (!func["(params)"])
++                    return;
++
++                var params = func["(params)"].slice();
++                var param  = params.pop();
++                var type;
++
++                while (param) {
++                    type = func[param];
++
++                    // 'undefined' is a special case for (function (window, undefined) { ... })();
++                    // patterns.
++
++                    if (param === "undefined")
++                        return;
++
++                    if (type !== "unused" && type !== "unction")
++                        return;
++
++                    warnUnused(param, func["(tokens)"][param]);
++                    param = params.pop();
++                }
++            });
++
++            for (var key in declared) {
++                if (is_own(declared, key) && !is_own(global, key)) {
++                    warnUnused(key, declared[key]);
++                }
++            }
++        } catch (e) {
++            if (e) {
++                var nt = nexttoken || {};
++                JSHINT.errors.push({
++                    raw       : e.raw,
++                    reason    : e.message,
++                    line      : e.line || nt.line,
++                    character : e.character || nt.from
++                }, null);
++            }
++        }
++
++        // Loop over the listed "internals", and check them as well.
++
++        if (JSHINT.scope === "(main)") {
++            o = o || {};
++
++            for (i = 0; i < JSHINT.internals.length; i += 1) {
++                k = JSHINT.internals[i];
++                o.scope = k.elem;
++                itself(k.value, o, g);
++            }
++        }
++
++        return JSHINT.errors.length === 0;
++    };
++
++    // Data summary.
++    itself.data = function () {
++        var data = {
++            functions: [],
++            options: option
++        };
++        var implieds = [];
++        var members = [];
++        var fu, f, i, j, n, globals;
++
++        if (itself.errors.length) {
++            data.errors = itself.errors;
++        }
++
++        if (jsonmode) {
++            data.json = true;
++        }
++
++        for (n in implied) {
++            if (is_own(implied, n)) {
++                implieds.push({
++                    name: n,
++                    line: implied[n]
++                });
++            }
++        }
++
++        if (implieds.length > 0) {
++            data.implieds = implieds;
++        }
++
++        if (urls.length > 0) {
++            data.urls = urls;
++        }
++
++        globals = Object.keys(scope);
++        if (globals.length > 0) {
++            data.globals = globals;
++        }
++
++        for (i = 1; i < functions.length; i += 1) {
++            f = functions[i];
++            fu = {};
++
++            for (j = 0; j < functionicity.length; j += 1) {
++                fu[functionicity[j]] = [];
++            }
++
++            for (j = 0; j < functionicity.length; j += 1) {
++                if (fu[functionicity[j]].length === 0) {
++                    delete fu[functionicity[j]];
++                }
++            }
++
++            fu.name = f["(name)"];
++            fu.param = f["(params)"];
++            fu.line = f["(line)"];
++            fu.character = f["(character)"];
++            fu.last = f["(last)"];
++            fu.lastcharacter = f["(lastcharacter)"];
++            data.functions.push(fu);
++        }
++
++        if (unuseds.length > 0) {
++            data.unused = unuseds;
++        }
++
++        members = [];
++        for (n in member) {
++            if (typeof member[n] === "number") {
++                data.member = member;
++                break;
++            }
++        }
++
++        return data;
++    };
++
++    itself.jshint = itself;
++
++    return itself;
++}());
++
++// Make JSHINT a Node module, if possible.
++if (typeof exports === "object" && exports) {
++    exports.JSHINT = JSHINT;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/qunit.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/qunit.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/qunit.js	(revision 15487)
+@@ -0,0 +1,2152 @@
++/**
++ * QUnit v1.11.0 - A JavaScript Unit Testing Framework
++ *
++ * http://qunitjs.com
++ *
++ * Copyright 2012 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ */
++
++(function( window ) {
++
++var QUnit,
++	assert,
++	config,
++	onErrorFnPrev,
++	testId = 0,
++	fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
++	toString = Object.prototype.toString,
++	hasOwn = Object.prototype.hasOwnProperty,
++	// Keep a local reference to Date (GH-283)
++	Date = window.Date,
++	defined = {
++		setTimeout: typeof window.setTimeout !== "undefined",
++		sessionStorage: (function() {
++			var x = "qunit-test-string";
++			try {
++				sessionStorage.setItem( x, x );
++				sessionStorage.removeItem( x );
++				return true;
++			} catch( e ) {
++				return false;
++			}
++		}())
++	},
++	/**
++	 * Provides a normalized error string, correcting an issue
++	 * with IE 7 (and prior) where Error.prototype.toString is
++	 * not properly implemented
++	 *
++	 * Based on http://es5.github.com/#x15.11.4.4
++	 *
++	 * @param {String|Error} error
++	 * @return {String} error message
++	 */
++	errorString = function( error ) {
++		var name, message,
++			errorString = error.toString();
++		if ( errorString.substring( 0, 7 ) === "[object" ) {
++			name = error.name ? error.name.toString() : "Error";
++			message = error.message ? error.message.toString() : "";
++			if ( name && message ) {
++				return name + ": " + message;
++			} else if ( name ) {
++				return name;
++			} else if ( message ) {
++				return message;
++			} else {
++				return "Error";
++			}
++		} else {
++			return errorString;
++		}
++	},
++	/**
++	 * Makes a clone of an object using only Array or Object as base,
++	 * and copies over the own enumerable properties.
++	 *
++	 * @param {Object} obj
++	 * @return {Object} New object with only the own properties (recursively).
++	 */
++	objectValues = function( obj ) {
++		// Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
++		/*jshint newcap: false */
++		var key, val,
++			vals = QUnit.is( "array", obj ) ? [] : {};
++		for ( key in obj ) {
++			if ( hasOwn.call( obj, key ) ) {
++				val = obj[key];
++				vals[key] = val === Object(val) ? objectValues(val) : val;
++			}
++		}
++		return vals;
++	};
++
++function Test( settings ) {
++	extend( this, settings );
++	this.assertions = [];
++	this.testNumber = ++Test.count;
++}
++
++Test.count = 0;
++
++Test.prototype = {
++	init: function() {
++		var a, b, li,
++			tests = id( "qunit-tests" );
++
++		if ( tests ) {
++			b = document.createElement( "strong" );
++			b.innerHTML = this.nameHtml;
++
++			// `a` initialized at top of scope
++			a = document.createElement( "a" );
++			a.innerHTML = "Rerun";
++			a.href = QUnit.url({ testNumber: this.testNumber });
++
++			li = document.createElement( "li" );
++			li.appendChild( b );
++			li.appendChild( a );
++			li.className = "running";
++			li.id = this.id = "qunit-test-output" + testId++;
++
++			tests.appendChild( li );
++		}
++	},
++	setup: function() {
++		if ( this.module !== config.previousModule ) {
++			if ( config.previousModule ) {
++				runLoggingCallbacks( "moduleDone", QUnit, {
++					name: config.previousModule,
++					failed: config.moduleStats.bad,
++					passed: config.moduleStats.all - config.moduleStats.bad,
++					total: config.moduleStats.all
++				});
++			}
++			config.previousModule = this.module;
++			config.moduleStats = { all: 0, bad: 0 };
++			runLoggingCallbacks( "moduleStart", QUnit, {
++				name: this.module
++			});
++		} else if ( config.autorun ) {
++			runLoggingCallbacks( "moduleStart", QUnit, {
++				name: this.module
++			});
++		}
++
++		config.current = this;
++
++		this.testEnvironment = extend({
++			setup: function() {},
++			teardown: function() {}
++		}, this.moduleTestEnvironment );
++
++		this.started = +new Date();
++		runLoggingCallbacks( "testStart", QUnit, {
++			name: this.testName,
++			module: this.module
++		});
++
++		// allow utility functions to access the current test environment
++		// TODO why??
++		QUnit.current_testEnvironment = this.testEnvironment;
++
++		if ( !config.pollution ) {
++			saveGlobal();
++		}
++		if ( config.notrycatch ) {
++			this.testEnvironment.setup.call( this.testEnvironment );
++			return;
++		}
++		try {
++			this.testEnvironment.setup.call( this.testEnvironment );
++		} catch( e ) {
++			QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
++		}
++	},
++	run: function() {
++		config.current = this;
++
++		var running = id( "qunit-testresult" );
++
++		if ( running ) {
++			running.innerHTML = "Running: <br/>" + this.nameHtml;
++		}
++
++		if ( this.async ) {
++			QUnit.stop();
++		}
++
++		this.callbackStarted = +new Date();
++
++		if ( config.notrycatch ) {
++			this.callback.call( this.testEnvironment, QUnit.assert );
++			this.callbackRuntime = +new Date() - this.callbackStarted;
++			return;
++		}
++
++		try {
++			this.callback.call( this.testEnvironment, QUnit.assert );
++			this.callbackRuntime = +new Date() - this.callbackStarted;
++		} catch( e ) {
++			this.callbackRuntime = +new Date() - this.callbackStarted;
++
++			QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
++			// else next test will carry the responsibility
++			saveGlobal();
++
++			// Restart the tests if they're blocking
++			if ( config.blocking ) {
++				QUnit.start();
++			}
++		}
++	},
++	teardown: function() {
++		config.current = this;
++		if ( config.notrycatch ) {
++			if ( typeof this.callbackRuntime === "undefined" ) {
++				this.callbackRuntime = +new Date() - this.callbackStarted;
++			}
++			this.testEnvironment.teardown.call( this.testEnvironment );
++			return;
++		} else {
++			try {
++				this.testEnvironment.teardown.call( this.testEnvironment );
++			} catch( e ) {
++				QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
++			}
++		}
++		checkPollution();
++	},
++	finish: function() {
++		config.current = this;
++		if ( config.requireExpects && this.expected === null ) {
++			QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
++		} else if ( this.expected !== null && this.expected !== this.assertions.length ) {
++			QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
++		} else if ( this.expected === null && !this.assertions.length ) {
++			QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
++		}
++
++		var i, assertion, a, b, time, li, ol,
++			test = this,
++			good = 0,
++			bad = 0,
++			tests = id( "qunit-tests" );
++
++		this.runtime = +new Date() - this.started;
++		config.stats.all += this.assertions.length;
++		config.moduleStats.all += this.assertions.length;
++
++		if ( tests ) {
++			ol = document.createElement( "ol" );
++			ol.className = "qunit-assert-list";
++
++			for ( i = 0; i < this.assertions.length; i++ ) {
++				assertion = this.assertions[i];
++
++				li = document.createElement( "li" );
++				li.className = assertion.result ? "pass" : "fail";
++				li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
++				ol.appendChild( li );
++
++				if ( assertion.result ) {
++					good++;
++				} else {
++					bad++;
++					config.stats.bad++;
++					config.moduleStats.bad++;
++				}
++			}
++
++			// store result when possible
++			if ( QUnit.config.reorder && defined.sessionStorage ) {
++				if ( bad ) {
++					sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
++				} else {
++					sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
++				}
++			}
++
++			if ( bad === 0 ) {
++				addClass( ol, "qunit-collapsed" );
++			}
++
++			// `b` initialized at top of scope
++			b = document.createElement( "strong" );
++			b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
++
++			addEvent(b, "click", function() {
++				var next = b.parentNode.lastChild,
++					collapsed = hasClass( next, "qunit-collapsed" );
++				( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
++			});
++
++			addEvent(b, "dblclick", function( e ) {
++				var target = e && e.target ? e.target : window.event.srcElement;
++				if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
++					target = target.parentNode;
++				}
++				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
++					window.location = QUnit.url({ testNumber: test.testNumber });
++				}
++			});
++
++			// `time` initialized at top of scope
++			time = document.createElement( "span" );
++			time.className = "runtime";
++			time.innerHTML = this.runtime + " ms";
++
++			// `li` initialized at top of scope
++			li = id( this.id );
++			li.className = bad ? "fail" : "pass";
++			li.removeChild( li.firstChild );
++			a = li.firstChild;
++			li.appendChild( b );
++			li.appendChild( a );
++			li.appendChild( time );
++			li.appendChild( ol );
++
++		} else {
++			for ( i = 0; i < this.assertions.length; i++ ) {
++				if ( !this.assertions[i].result ) {
++					bad++;
++					config.stats.bad++;
++					config.moduleStats.bad++;
++				}
++			}
++		}
++
++		runLoggingCallbacks( "testDone", QUnit, {
++			name: this.testName,
++			module: this.module,
++			failed: bad,
++			passed: this.assertions.length - bad,
++			total: this.assertions.length,
++			duration: this.runtime
++		});
++
++		QUnit.reset();
++
++		config.current = undefined;
++	},
++
++	queue: function() {
++		var bad,
++			test = this;
++
++		synchronize(function() {
++			test.init();
++		});
++		function run() {
++			// each of these can by async
++			synchronize(function() {
++				test.setup();
++			});
++			synchronize(function() {
++				test.run();
++			});
++			synchronize(function() {
++				test.teardown();
++			});
++			synchronize(function() {
++				test.finish();
++			});
++		}
++
++		// `bad` initialized at top of scope
++		// defer when previous test run passed, if storage is available
++		bad = QUnit.config.reorder && defined.sessionStorage &&
++						+sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
++
++		if ( bad ) {
++			run();
++		} else {
++			synchronize( run, true );
++		}
++	}
++};
++
++// Root QUnit object.
++// `QUnit` initialized at top of scope
++QUnit = {
++
++	// call on start of module test to prepend name to all tests
++	module: function( name, testEnvironment ) {
++		config.currentModule = name;
++		config.currentModuleTestEnvironment = testEnvironment;
++		config.modules[name] = true;
++	},
++
++	asyncTest: function( testName, expected, callback ) {
++		if ( arguments.length === 2 ) {
++			callback = expected;
++			expected = null;
++		}
++
++		QUnit.test( testName, expected, callback, true );
++	},
++
++	test: function( testName, expected, callback, async ) {
++		var test,
++			nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
++
++		if ( arguments.length === 2 ) {
++			callback = expected;
++			expected = null;
++		}
++
++		if ( config.currentModule ) {
++			nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
++		}
++
++		test = new Test({
++			nameHtml: nameHtml,
++			testName: testName,
++			expected: expected,
++			async: async,
++			callback: callback,
++			module: config.currentModule,
++			moduleTestEnvironment: config.currentModuleTestEnvironment,
++			stack: sourceFromStacktrace( 2 )
++		});
++
++		if ( !validTest( test ) ) {
++			return;
++		}
++
++		test.queue();
++	},
++
++	// Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
++	expect: function( asserts ) {
++		if (arguments.length === 1) {
++			config.current.expected = asserts;
++		} else {
++			return config.current.expected;
++		}
++	},
++
++	start: function( count ) {
++		// QUnit hasn't been initialized yet.
++		// Note: RequireJS (et al) may delay onLoad
++		if ( config.semaphore === undefined ) {
++			QUnit.begin(function() {
++				// This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
++				setTimeout(function() {
++					QUnit.start( count );
++				});
++			});
++			return;
++		}
++
++		config.semaphore -= count || 1;
++		// don't start until equal number of stop-calls
++		if ( config.semaphore > 0 ) {
++			return;
++		}
++		// ignore if start is called more often then stop
++		if ( config.semaphore < 0 ) {
++			config.semaphore = 0;
++			QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
++			return;
++		}
++		// A slight delay, to avoid any current callbacks
++		if ( defined.setTimeout ) {
++			window.setTimeout(function() {
++				if ( config.semaphore > 0 ) {
++					return;
++				}
++				if ( config.timeout ) {
++					clearTimeout( config.timeout );
++				}
++
++				config.blocking = false;
++				process( true );
++			}, 13);
++		} else {
++			config.blocking = false;
++			process( true );
++		}
++	},
++
++	stop: function( count ) {
++		config.semaphore += count || 1;
++		config.blocking = true;
++
++		if ( config.testTimeout && defined.setTimeout ) {
++			clearTimeout( config.timeout );
++			config.timeout = window.setTimeout(function() {
++				QUnit.ok( false, "Test timed out" );
++				config.semaphore = 1;
++				QUnit.start();
++			}, config.testTimeout );
++		}
++	}
++};
++
++// `assert` initialized at top of scope
++// Asssert helpers
++// All of these must either call QUnit.push() or manually do:
++// - runLoggingCallbacks( "log", .. );
++// - config.current.assertions.push({ .. });
++// We attach it to the QUnit object *after* we expose the public API,
++// otherwise `assert` will become a global variable in browsers (#341).
++assert = {
++	/**
++	 * Asserts rough true-ish result.
++	 * @name ok
++	 * @function
++	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
++	 */
++	ok: function( result, msg ) {
++		if ( !config.current ) {
++			throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
++		}
++		result = !!result;
++
++		var source,
++			details = {
++				module: config.current.module,
++				name: config.current.testName,
++				result: result,
++				message: msg
++			};
++
++		msg = escapeText( msg || (result ? "okay" : "failed" ) );
++		msg = "<span class='test-message'>" + msg + "</span>";
++
++		if ( !result ) {
++			source = sourceFromStacktrace( 2 );
++			if ( source ) {
++				details.source = source;
++				msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr></table>";
++			}
++		}
++		runLoggingCallbacks( "log", QUnit, details );
++		config.current.assertions.push({
++			result: result,
++			message: msg
++		});
++	},
++
++	/**
++	 * Assert that the first two arguments are equal, with an optional message.
++	 * Prints out both actual and expected values.
++	 * @name equal
++	 * @function
++	 * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
++	 */
++	equal: function( actual, expected, message ) {
++		/*jshint eqeqeq:false */
++		QUnit.push( expected == actual, actual, expected, message );
++	},
++
++	/**
++	 * @name notEqual
++	 * @function
++	 */
++	notEqual: function( actual, expected, message ) {
++		/*jshint eqeqeq:false */
++		QUnit.push( expected != actual, actual, expected, message );
++	},
++
++	/**
++	 * @name propEqual
++	 * @function
++	 */
++	propEqual: function( actual, expected, message ) {
++		actual = objectValues(actual);
++		expected = objectValues(expected);
++		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
++	},
++
++	/**
++	 * @name notPropEqual
++	 * @function
++	 */
++	notPropEqual: function( actual, expected, message ) {
++		actual = objectValues(actual);
++		expected = objectValues(expected);
++		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
++	},
++
++	/**
++	 * @name deepEqual
++	 * @function
++	 */
++	deepEqual: function( actual, expected, message ) {
++		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
++	},
++
++	/**
++	 * @name notDeepEqual
++	 * @function
++	 */
++	notDeepEqual: function( actual, expected, message ) {
++		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
++	},
++
++	/**
++	 * @name strictEqual
++	 * @function
++	 */
++	strictEqual: function( actual, expected, message ) {
++		QUnit.push( expected === actual, actual, expected, message );
++	},
++
++	/**
++	 * @name notStrictEqual
++	 * @function
++	 */
++	notStrictEqual: function( actual, expected, message ) {
++		QUnit.push( expected !== actual, actual, expected, message );
++	},
++
++	"throws": function( block, expected, message ) {
++		var actual,
++			expectedOutput = expected,
++			ok = false;
++
++		// 'expected' is optional
++		if ( typeof expected === "string" ) {
++			message = expected;
++			expected = null;
++		}
++
++		config.current.ignoreGlobalErrors = true;
++		try {
++			block.call( config.current.testEnvironment );
++		} catch (e) {
++			actual = e;
++		}
++		config.current.ignoreGlobalErrors = false;
++
++		if ( actual ) {
++			// we don't want to validate thrown error
++			if ( !expected ) {
++				ok = true;
++				expectedOutput = null;
++			// expected is a regexp
++			} else if ( QUnit.objectType( expected ) === "regexp" ) {
++				ok = expected.test( errorString( actual ) );
++			// expected is a constructor
++			} else if ( actual instanceof expected ) {
++				ok = true;
++			// expected is a validation function which returns true is validation passed
++			} else if ( expected.call( {}, actual ) === true ) {
++				expectedOutput = null;
++				ok = true;
++			}
++
++			QUnit.push( ok, actual, expectedOutput, message );
++		} else {
++			QUnit.pushFailure( message, null, 'No exception was thrown.' );
++		}
++	}
++};
++
++/**
++ * @deprecate since 1.8.0
++ * Kept assertion helpers in root for backwards compatibility.
++ */
++extend( QUnit, assert );
++
++/**
++ * @deprecated since 1.9.0
++ * Kept root "raises()" for backwards compatibility.
++ * (Note that we don't introduce assert.raises).
++ */
++QUnit.raises = assert[ "throws" ];
++
++/**
++ * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
++ * Kept to avoid TypeErrors for undefined methods.
++ */
++QUnit.equals = function() {
++	QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
++};
++QUnit.same = function() {
++	QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
++};
++
++// We want access to the constructor's prototype
++(function() {
++	function F() {}
++	F.prototype = QUnit;
++	QUnit = new F();
++	// Make F QUnit's constructor so that we can add to the prototype later
++	QUnit.constructor = F;
++}());
++
++/**
++ * Config object: Maintain internal state
++ * Later exposed as QUnit.config
++ * `config` initialized at top of scope
++ */
++config = {
++	// The queue of tests to run
++	queue: [],
++
++	// block until document ready
++	blocking: true,
++
++	// when enabled, show only failing tests
++	// gets persisted through sessionStorage and can be changed in UI via checkbox
++	hidepassed: false,
++
++	// by default, run previously failed tests first
++	// very useful in combination with "Hide passed tests" checked
++	reorder: true,
++
++	// by default, modify document.title when suite is done
++	altertitle: true,
++
++	// when enabled, all tests must call expect()
++	requireExpects: false,
++
++	// add checkboxes that are persisted in the query-string
++	// when enabled, the id is set to `true` as a `QUnit.config` property
++	urlConfig: [
++		{
++			id: "noglobals",
++			label: "Check for Globals",
++			tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
++		},
++		{
++			id: "notrycatch",
++			label: "No try-catch",
++			tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
++		}
++	],
++
++	// Set of all modules.
++	modules: {},
++
++	// logging callback queues
++	begin: [],
++	done: [],
++	log: [],
++	testStart: [],
++	testDone: [],
++	moduleStart: [],
++	moduleDone: []
++};
++
++// Export global variables, unless an 'exports' object exists,
++// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
++if ( typeof exports === "undefined" ) {
++	extend( window, QUnit );
++
++	// Expose QUnit object
++	window.QUnit = QUnit;
++}
++
++// Initialize more QUnit.config and QUnit.urlParams
++(function() {
++	var i,
++		location = window.location || { search: "", protocol: "file:" },
++		params = location.search.slice( 1 ).split( "&" ),
++		length = params.length,
++		urlParams = {},
++		current;
++
++	if ( params[ 0 ] ) {
++		for ( i = 0; i < length; i++ ) {
++			current = params[ i ].split( "=" );
++			current[ 0 ] = decodeURIComponent( current[ 0 ] );
++			// allow just a key to turn on a flag, e.g., test.html?noglobals
++			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
++			urlParams[ current[ 0 ] ] = current[ 1 ];
++		}
++	}
++
++	QUnit.urlParams = urlParams;
++
++	// String search anywhere in moduleName+testName
++	config.filter = urlParams.filter;
++
++	// Exact match of the module name
++	config.module = urlParams.module;
++
++	config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
++
++	// Figure out if we're running the tests from a server or not
++	QUnit.isLocal = location.protocol === "file:";
++}());
++
++// Extend QUnit object,
++// these after set here because they should not be exposed as global functions
++extend( QUnit, {
++	assert: assert,
++
++	config: config,
++
++	// Initialize the configuration options
++	init: function() {
++		extend( config, {
++			stats: { all: 0, bad: 0 },
++			moduleStats: { all: 0, bad: 0 },
++			started: +new Date(),
++			updateRate: 1000,
++			blocking: false,
++			autostart: true,
++			autorun: false,
++			filter: "",
++			queue: [],
++			semaphore: 1
++		});
++
++		var tests, banner, result,
++			qunit = id( "qunit" );
++
++		if ( qunit ) {
++			qunit.innerHTML =
++				"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
++				"<h2 id='qunit-banner'></h2>" +
++				"<div id='qunit-testrunner-toolbar'></div>" +
++				"<h2 id='qunit-userAgent'></h2>" +
++				"<ol id='qunit-tests'></ol>";
++		}
++
++		tests = id( "qunit-tests" );
++		banner = id( "qunit-banner" );
++		result = id( "qunit-testresult" );
++
++		if ( tests ) {
++			tests.innerHTML = "";
++		}
++
++		if ( banner ) {
++			banner.className = "";
++		}
++
++		if ( result ) {
++			result.parentNode.removeChild( result );
++		}
++
++		if ( tests ) {
++			result = document.createElement( "p" );
++			result.id = "qunit-testresult";
++			result.className = "result";
++			tests.parentNode.insertBefore( result, tests );
++			result.innerHTML = "Running...<br/>&nbsp;";
++		}
++	},
++
++	// Resets the test setup. Useful for tests that modify the DOM.
++	reset: function() {
++		var fixture = id( "qunit-fixture" );
++		if ( fixture ) {
++			fixture.innerHTML = config.fixture;
++		}
++	},
++
++	// Trigger an event on an element.
++	// @example triggerEvent( document.body, "click" );
++	triggerEvent: function( elem, type, event ) {
++		if ( document.createEvent ) {
++			event = document.createEvent( "MouseEvents" );
++			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
++				0, 0, 0, 0, 0, false, false, false, false, 0, null);
++
++			elem.dispatchEvent( event );
++		} else if ( elem.fireEvent ) {
++			elem.fireEvent( "on" + type );
++		}
++	},
++
++	// Safe object type checking
++	is: function( type, obj ) {
++		return QUnit.objectType( obj ) === type;
++	},
++
++	objectType: function( obj ) {
++		if ( typeof obj === "undefined" ) {
++				return "undefined";
++		// consider: typeof null === object
++		}
++		if ( obj === null ) {
++				return "null";
++		}
++
++		var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
++			type = match && match[1] || "";
++
++		switch ( type ) {
++			case "Number":
++				if ( isNaN(obj) ) {
++					return "nan";
++				}
++				return "number";
++			case "String":
++			case "Boolean":
++			case "Array":
++			case "Date":
++			case "RegExp":
++			case "Function":
++				return type.toLowerCase();
++		}
++		if ( typeof obj === "object" ) {
++			return "object";
++		}
++		return undefined;
++	},
++
++	push: function( result, actual, expected, message ) {
++		if ( !config.current ) {
++			throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
++		}
++
++		var output, source,
++			details = {
++				module: config.current.module,
++				name: config.current.testName,
++				result: result,
++				message: message,
++				actual: actual,
++				expected: expected
++			};
++
++		message = escapeText( message ) || ( result ? "okay" : "failed" );
++		message = "<span class='test-message'>" + message + "</span>";
++		output = message;
++
++		if ( !result ) {
++			expected = escapeText( QUnit.jsDump.parse(expected) );
++			actual = escapeText( QUnit.jsDump.parse(actual) );
++			output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
++
++			if ( actual !== expected ) {
++				output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
++				output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
++			}
++
++			source = sourceFromStacktrace();
++
++			if ( source ) {
++				details.source = source;
++				output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
++			}
++
++			output += "</table>";
++		}
++
++		runLoggingCallbacks( "log", QUnit, details );
++
++		config.current.assertions.push({
++			result: !!result,
++			message: output
++		});
++	},
++
++	pushFailure: function( message, source, actual ) {
++		if ( !config.current ) {
++			throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
++		}
++
++		var output,
++			details = {
++				module: config.current.module,
++				name: config.current.testName,
++				result: false,
++				message: message
++			};
++
++		message = escapeText( message ) || "error";
++		message = "<span class='test-message'>" + message + "</span>";
++		output = message;
++
++		output += "<table>";
++
++		if ( actual ) {
++			output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
++		}
++
++		if ( source ) {
++			details.source = source;
++			output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
++		}
++
++		output += "</table>";
++
++		runLoggingCallbacks( "log", QUnit, details );
++
++		config.current.assertions.push({
++			result: false,
++			message: output
++		});
++	},
++
++	url: function( params ) {
++		params = extend( extend( {}, QUnit.urlParams ), params );
++		var key,
++			querystring = "?";
++
++		for ( key in params ) {
++			if ( !hasOwn.call( params, key ) ) {
++				continue;
++			}
++			querystring += encodeURIComponent( key ) + "=" +
++				encodeURIComponent( params[ key ] ) + "&";
++		}
++		return window.location.protocol + "//" + window.location.host +
++			window.location.pathname + querystring.slice( 0, -1 );
++	},
++
++	extend: extend,
++	id: id,
++	addEvent: addEvent
++	// load, equiv, jsDump, diff: Attached later
++});
++
++/**
++ * @deprecated: Created for backwards compatibility with test runner that set the hook function
++ * into QUnit.{hook}, instead of invoking it and passing the hook function.
++ * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
++ * Doing this allows us to tell if the following methods have been overwritten on the actual
++ * QUnit object.
++ */
++extend( QUnit.constructor.prototype, {
++
++	// Logging callbacks; all receive a single argument with the listed properties
++	// run test/logs.html for any related changes
++	begin: registerLoggingCallback( "begin" ),
++
++	// done: { failed, passed, total, runtime }
++	done: registerLoggingCallback( "done" ),
++
++	// log: { result, actual, expected, message }
++	log: registerLoggingCallback( "log" ),
++
++	// testStart: { name }
++	testStart: registerLoggingCallback( "testStart" ),
++
++	// testDone: { name, failed, passed, total, duration }
++	testDone: registerLoggingCallback( "testDone" ),
++
++	// moduleStart: { name }
++	moduleStart: registerLoggingCallback( "moduleStart" ),
++
++	// moduleDone: { name, failed, passed, total }
++	moduleDone: registerLoggingCallback( "moduleDone" )
++});
++
++if ( typeof document === "undefined" || document.readyState === "complete" ) {
++	config.autorun = true;
++}
++
++QUnit.load = function() {
++	runLoggingCallbacks( "begin", QUnit, {} );
++
++	// Initialize the config, saving the execution queue
++	var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
++		urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
++		numModules = 0,
++		moduleFilterHtml = "",
++		urlConfigHtml = "",
++		oldconfig = extend( {}, config );
++
++	QUnit.init();
++	extend(config, oldconfig);
++
++	config.blocking = false;
++
++	len = config.urlConfig.length;
++
++	for ( i = 0; i < len; i++ ) {
++		val = config.urlConfig[i];
++		if ( typeof val === "string" ) {
++			val = {
++				id: val,
++				label: val,
++				tooltip: "[no tooltip available]"
++			};
++		}
++		config[ val.id ] = QUnit.urlParams[ val.id ];
++		urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
++			"' name='" + escapeText( val.id ) +
++			"' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) +
++			" title='" + escapeText( val.tooltip ) +
++			"'><label for='qunit-urlconfig-" + escapeText( val.id ) +
++			"' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
++	}
++
++	moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
++		( config.module === undefined  ? "selected='selected'" : "" ) +
++		">< All Modules ></option>";
++
++	for ( i in config.modules ) {
++		if ( config.modules.hasOwnProperty( i ) ) {
++			numModules += 1;
++			moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(i) ) + "' " +
++				( config.module === i ? "selected='selected'" : "" ) +
++				">" + escapeText(i) + "</option>";
++		}
++	}
++	moduleFilterHtml += "</select>";
++
++	// `userAgent` initialized at top of scope
++	userAgent = id( "qunit-userAgent" );
++	if ( userAgent ) {
++		userAgent.innerHTML = navigator.userAgent;
++	}
++
++	// `banner` initialized at top of scope
++	banner = id( "qunit-header" );
++	if ( banner ) {
++		banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
++	}
++
++	// `toolbar` initialized at top of scope
++	toolbar = id( "qunit-testrunner-toolbar" );
++	if ( toolbar ) {
++		// `filter` initialized at top of scope
++		filter = document.createElement( "input" );
++		filter.type = "checkbox";
++		filter.id = "qunit-filter-pass";
++
++		addEvent( filter, "click", function() {
++			var tmp,
++				ol = document.getElementById( "qunit-tests" );
++
++			if ( filter.checked ) {
++				ol.className = ol.className + " hidepass";
++			} else {
++				tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
++				ol.className = tmp.replace( / hidepass /, " " );
++			}
++			if ( defined.sessionStorage ) {
++				if (filter.checked) {
++					sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
++				} else {
++					sessionStorage.removeItem( "qunit-filter-passed-tests" );
++				}
++			}
++		});
++
++		if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
++			filter.checked = true;
++			// `ol` initialized at top of scope
++			ol = document.getElementById( "qunit-tests" );
++			ol.className = ol.className + " hidepass";
++		}
++		toolbar.appendChild( filter );
++
++		// `label` initialized at top of scope
++		label = document.createElement( "label" );
++		label.setAttribute( "for", "qunit-filter-pass" );
++		label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." );
++		label.innerHTML = "Hide passed tests";
++		toolbar.appendChild( label );
++
++		urlConfigCheckboxesContainer = document.createElement("span");
++		urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
++		urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
++		// For oldIE support:
++		// * Add handlers to the individual elements instead of the container
++		// * Use "click" instead of "change"
++		// * Fallback from event.target to event.srcElement
++		addEvents( urlConfigCheckboxes, "click", function( event ) {
++			var params = {},
++				target = event.target || event.srcElement;
++			params[ target.name ] = target.checked ? true : undefined;
++			window.location = QUnit.url( params );
++		});
++		toolbar.appendChild( urlConfigCheckboxesContainer );
++
++		if (numModules > 1) {
++			moduleFilter = document.createElement( 'span' );
++			moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' );
++			moduleFilter.innerHTML = moduleFilterHtml;
++			addEvent( moduleFilter.lastChild, "change", function() {
++				var selectBox = moduleFilter.getElementsByTagName("select")[0],
++					selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
++
++				window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } );
++			});
++			toolbar.appendChild(moduleFilter);
++		}
++	}
++
++	// `main` initialized at top of scope
++	main = id( "qunit-fixture" );
++	if ( main ) {
++		config.fixture = main.innerHTML;
++	}
++
++	if ( config.autostart ) {
++		QUnit.start();
++	}
++};
++
++addEvent( window, "load", QUnit.load );
++
++// `onErrorFnPrev` initialized at top of scope
++// Preserve other handlers
++onErrorFnPrev = window.onerror;
++
++// Cover uncaught exceptions
++// Returning true will surpress the default browser handler,
++// returning false will let it run.
++window.onerror = function ( error, filePath, linerNr ) {
++	var ret = false;
++	if ( onErrorFnPrev ) {
++		ret = onErrorFnPrev( error, filePath, linerNr );
++	}
++
++	// Treat return value as window.onerror itself does,
++	// Only do our handling if not surpressed.
++	if ( ret !== true ) {
++		if ( QUnit.config.current ) {
++			if ( QUnit.config.current.ignoreGlobalErrors ) {
++				return true;
++			}
++			QUnit.pushFailure( error, filePath + ":" + linerNr );
++		} else {
++			QUnit.test( "global failure", extend( function() {
++				QUnit.pushFailure( error, filePath + ":" + linerNr );
++			}, { validTest: validTest } ) );
++		}
++		return false;
++	}
++
++	return ret;
++};
++
++function done() {
++	config.autorun = true;
++
++	// Log the last module results
++	if ( config.currentModule ) {
++		runLoggingCallbacks( "moduleDone", QUnit, {
++			name: config.currentModule,
++			failed: config.moduleStats.bad,
++			passed: config.moduleStats.all - config.moduleStats.bad,
++			total: config.moduleStats.all
++		});
++	}
++
++	var i, key,
++		banner = id( "qunit-banner" ),
++		tests = id( "qunit-tests" ),
++		runtime = +new Date() - config.started,
++		passed = config.stats.all - config.stats.bad,
++		html = [
++			"Tests completed in ",
++			runtime,
++			" milliseconds.<br/>",
++			"<span class='passed'>",
++			passed,
++			"</span> assertions of <span class='total'>",
++			config.stats.all,
++			"</span> passed, <span class='failed'>",
++			config.stats.bad,
++			"</span> failed."
++		].join( "" );
++
++	if ( banner ) {
++		banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
++	}
++
++	if ( tests ) {
++		id( "qunit-testresult" ).innerHTML = html;
++	}
++
++	if ( config.altertitle && typeof document !== "undefined" && document.title ) {
++		// show ✖ for good, ✔ for bad suite result in title
++		// use escape sequences in case file gets loaded with non-utf-8-charset
++		document.title = [
++			( config.stats.bad ? "\u2716" : "\u2714" ),
++			document.title.replace( /^[\u2714\u2716] /i, "" )
++		].join( " " );
++	}
++
++	// clear own sessionStorage items if all tests passed
++	if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
++		// `key` & `i` initialized at top of scope
++		for ( i = 0; i < sessionStorage.length; i++ ) {
++			key = sessionStorage.key( i++ );
++			if ( key.indexOf( "qunit-test-" ) === 0 ) {
++				sessionStorage.removeItem( key );
++			}
++		}
++	}
++
++	// scroll back to top to show results
++	if ( window.scrollTo ) {
++		window.scrollTo(0, 0);
++	}
++
++	runLoggingCallbacks( "done", QUnit, {
++		failed: config.stats.bad,
++		passed: passed,
++		total: config.stats.all,
++		runtime: runtime
++	});
++}
++
++/** @return Boolean: true if this test should be ran */
++function validTest( test ) {
++	var include,
++		filter = config.filter && config.filter.toLowerCase(),
++		module = config.module && config.module.toLowerCase(),
++		fullName = (test.module + ": " + test.testName).toLowerCase();
++
++	// Internally-generated tests are always valid
++	if ( test.callback && test.callback.validTest === validTest ) {
++		delete test.callback.validTest;
++		return true;
++	}
++
++	if ( config.testNumber ) {
++		return test.testNumber === config.testNumber;
++	}
++
++	if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
++		return false;
++	}
++
++	if ( !filter ) {
++		return true;
++	}
++
++	include = filter.charAt( 0 ) !== "!";
++	if ( !include ) {
++		filter = filter.slice( 1 );
++	}
++
++	// If the filter matches, we need to honour include
++	if ( fullName.indexOf( filter ) !== -1 ) {
++		return include;
++	}
++
++	// Otherwise, do the opposite
++	return !include;
++}
++
++// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
++// Later Safari and IE10 are supposed to support error.stack as well
++// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
++function extractStacktrace( e, offset ) {
++	offset = offset === undefined ? 3 : offset;
++
++	var stack, include, i;
++
++	if ( e.stacktrace ) {
++		// Opera
++		return e.stacktrace.split( "\n" )[ offset + 3 ];
++	} else if ( e.stack ) {
++		// Firefox, Chrome
++		stack = e.stack.split( "\n" );
++		if (/^error$/i.test( stack[0] ) ) {
++			stack.shift();
++		}
++		if ( fileName ) {
++			include = [];
++			for ( i = offset; i < stack.length; i++ ) {
++				if ( stack[ i ].indexOf( fileName ) !== -1 ) {
++					break;
++				}
++				include.push( stack[ i ] );
++			}
++			if ( include.length ) {
++				return include.join( "\n" );
++			}
++		}
++		return stack[ offset ];
++	} else if ( e.sourceURL ) {
++		// Safari, PhantomJS
++		// hopefully one day Safari provides actual stacktraces
++		// exclude useless self-reference for generated Error objects
++		if ( /qunit.js$/.test( e.sourceURL ) ) {
++			return;
++		}
++		// for actual exceptions, this is useful
++		return e.sourceURL + ":" + e.line;
++	}
++}
++function sourceFromStacktrace( offset ) {
++	try {
++		throw new Error();
++	} catch ( e ) {
++		return extractStacktrace( e, offset );
++	}
++}
++
++/**
++ * Escape text for attribute or text content.
++ */
++function escapeText( s ) {
++	if ( !s ) {
++		return "";
++	}
++	s = s + "";
++	// Both single quotes and double quotes (for attributes)
++	return s.replace( /['"<>&]/g, function( s ) {
++		switch( s ) {
++			case '\'':
++				return '&#039;';
++			case '"':
++				return '&quot;';
++			case '<':
++				return '&lt;';
++			case '>':
++				return '&gt;';
++			case '&':
++				return '&amp;';
++		}
++	});
++}
++
++function synchronize( callback, last ) {
++	config.queue.push( callback );
++
++	if ( config.autorun && !config.blocking ) {
++		process( last );
++	}
++}
++
++function process( last ) {
++	function next() {
++		process( last );
++	}
++	var start = new Date().getTime();
++	config.depth = config.depth ? config.depth + 1 : 1;
++
++	while ( config.queue.length && !config.blocking ) {
++		if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
++			config.queue.shift()();
++		} else {
++			window.setTimeout( next, 13 );
++			break;
++		}
++	}
++	config.depth--;
++	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
++		done();
++	}
++}
++
++function saveGlobal() {
++	config.pollution = [];
++
++	if ( config.noglobals ) {
++		for ( var key in window ) {
++			// in Opera sometimes DOM element ids show up here, ignore them
++			if ( !hasOwn.call( window, key ) || /^qunit-test-output/.test( key ) ) {
++				continue;
++			}
++			config.pollution.push( key );
++		}
++	}
++}
++
++function checkPollution() {
++	var newGlobals,
++		deletedGlobals,
++		old = config.pollution;
++
++	saveGlobal();
++
++	newGlobals = diff( config.pollution, old );
++	if ( newGlobals.length > 0 ) {
++		QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
++	}
++
++	deletedGlobals = diff( old, config.pollution );
++	if ( deletedGlobals.length > 0 ) {
++		QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
++	}
++}
++
++// returns a new Array with the elements that are in a but not in b
++function diff( a, b ) {
++	var i, j,
++		result = a.slice();
++
++	for ( i = 0; i < result.length; i++ ) {
++		for ( j = 0; j < b.length; j++ ) {
++			if ( result[i] === b[j] ) {
++				result.splice( i, 1 );
++				i--;
++				break;
++			}
++		}
++	}
++	return result;
++}
++
++function extend( a, b ) {
++	for ( var prop in b ) {
++		if ( b[ prop ] === undefined ) {
++			delete a[ prop ];
++
++		// Avoid "Member not found" error in IE8 caused by setting window.constructor
++		} else if ( prop !== "constructor" || a !== window ) {
++			a[ prop ] = b[ prop ];
++		}
++	}
++
++	return a;
++}
++
++/**
++ * @param {HTMLElement} elem
++ * @param {string} type
++ * @param {Function} fn
++ */
++function addEvent( elem, type, fn ) {
++	// Standards-based browsers
++	if ( elem.addEventListener ) {
++		elem.addEventListener( type, fn, false );
++	// IE
++	} else {
++		elem.attachEvent( "on" + type, fn );
++	}
++}
++
++/**
++ * @param {Array|NodeList} elems
++ * @param {string} type
++ * @param {Function} fn
++ */
++function addEvents( elems, type, fn ) {
++	var i = elems.length;
++	while ( i-- ) {
++		addEvent( elems[i], type, fn );
++	}
++}
++
++function hasClass( elem, name ) {
++	return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
++}
++
++function addClass( elem, name ) {
++	if ( !hasClass( elem, name ) ) {
++		elem.className += (elem.className ? " " : "") + name;
++	}
++}
++
++function removeClass( elem, name ) {
++	var set = " " + elem.className + " ";
++	// Class name may appear multiple times
++	while ( set.indexOf(" " + name + " ") > -1 ) {
++		set = set.replace(" " + name + " " , " ");
++	}
++	// If possible, trim it for prettiness, but not neccecarily
++	elem.className = window.jQuery ? jQuery.trim( set ) : ( set.trim ? set.trim() : set );
++}
++
++function id( name ) {
++	return !!( typeof document !== "undefined" && document && document.getElementById ) &&
++		document.getElementById( name );
++}
++
++function registerLoggingCallback( key ) {
++	return function( callback ) {
++		config[key].push( callback );
++	};
++}
++
++// Supports deprecated method of completely overwriting logging callbacks
++function runLoggingCallbacks( key, scope, args ) {
++	var i, callbacks;
++	if ( QUnit.hasOwnProperty( key ) ) {
++		QUnit[ key ].call(scope, args );
++	} else {
++		callbacks = config[ key ];
++		for ( i = 0; i < callbacks.length; i++ ) {
++			callbacks[ i ].call( scope, args );
++		}
++	}
++}
++
++// Test for equality any JavaScript type.
++// Author: Philippe Rathé <prathe@gmail.com>
++QUnit.equiv = (function() {
++
++	// Call the o related callback with the given arguments.
++	function bindCallbacks( o, callbacks, args ) {
++		var prop = QUnit.objectType( o );
++		if ( prop ) {
++			if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
++				return callbacks[ prop ].apply( callbacks, args );
++			} else {
++				return callbacks[ prop ]; // or undefined
++			}
++		}
++	}
++
++	// the real equiv function
++	var innerEquiv,
++		// stack to decide between skip/abort functions
++		callers = [],
++		// stack to avoiding loops from circular referencing
++		parents = [],
++
++		getProto = Object.getPrototypeOf || function ( obj ) {
++			return obj.__proto__;
++		},
++		callbacks = (function () {
++
++			// for string, boolean, number and null
++			function useStrictEquality( b, a ) {
++				/*jshint eqeqeq:false */
++				if ( b instanceof a.constructor || a instanceof b.constructor ) {
++					// to catch short annotaion VS 'new' annotation of a
++					// declaration
++					// e.g. var i = 1;
++					// var j = new Number(1);
++					return a == b;
++				} else {
++					return a === b;
++				}
++			}
++
++			return {
++				"string": useStrictEquality,
++				"boolean": useStrictEquality,
++				"number": useStrictEquality,
++				"null": useStrictEquality,
++				"undefined": useStrictEquality,
++
++				"nan": function( b ) {
++					return isNaN( b );
++				},
++
++				"date": function( b, a ) {
++					return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
++				},
++
++				"regexp": function( b, a ) {
++					return QUnit.objectType( b ) === "regexp" &&
++						// the regex itself
++						a.source === b.source &&
++						// and its modifers
++						a.global === b.global &&
++						// (gmi) ...
++						a.ignoreCase === b.ignoreCase &&
++						a.multiline === b.multiline &&
++						a.sticky === b.sticky;
++				},
++
++				// - skip when the property is a method of an instance (OOP)
++				// - abort otherwise,
++				// initial === would have catch identical references anyway
++				"function": function() {
++					var caller = callers[callers.length - 1];
++					return caller !== Object && typeof caller !== "undefined";
++				},
++
++				"array": function( b, a ) {
++					var i, j, len, loop;
++
++					// b could be an object literal here
++					if ( QUnit.objectType( b ) !== "array" ) {
++						return false;
++					}
++
++					len = a.length;
++					if ( len !== b.length ) {
++						// safe and faster
++						return false;
++					}
++
++					// track reference to avoid circular references
++					parents.push( a );
++					for ( i = 0; i < len; i++ ) {
++						loop = false;
++						for ( j = 0; j < parents.length; j++ ) {
++							if ( parents[j] === a[i] ) {
++								loop = true;// dont rewalk array
++							}
++						}
++						if ( !loop && !innerEquiv(a[i], b[i]) ) {
++							parents.pop();
++							return false;
++						}
++					}
++					parents.pop();
++					return true;
++				},
++
++				"object": function( b, a ) {
++					var i, j, loop,
++						// Default to true
++						eq = true,
++						aProperties = [],
++						bProperties = [];
++
++					// comparing constructors is more strict than using
++					// instanceof
++					if ( a.constructor !== b.constructor ) {
++						// Allow objects with no prototype to be equivalent to
++						// objects with Object as their constructor.
++						if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
++							( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
++								return false;
++						}
++					}
++
++					// stack constructor before traversing properties
++					callers.push( a.constructor );
++					// track reference to avoid circular references
++					parents.push( a );
++
++					for ( i in a ) { // be strict: don't ensures hasOwnProperty
++									// and go deep
++						loop = false;
++						for ( j = 0; j < parents.length; j++ ) {
++							if ( parents[j] === a[i] ) {
++								// don't go down the same path twice
++								loop = true;
++							}
++						}
++						aProperties.push(i); // collect a's properties
++
++						if (!loop && !innerEquiv( a[i], b[i] ) ) {
++							eq = false;
++							break;
++						}
++					}
++
++					callers.pop(); // unstack, we are done
++					parents.pop();
++
++					for ( i in b ) {
++						bProperties.push( i ); // collect b's properties
++					}
++
++					// Ensures identical properties name
++					return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
++				}
++			};
++		}());
++
++	innerEquiv = function() { // can take multiple arguments
++		var args = [].slice.apply( arguments );
++		if ( args.length < 2 ) {
++			return true; // end transition
++		}
++
++		return (function( a, b ) {
++			if ( a === b ) {
++				return true; // catch the most you can
++			} else if ( a === null || b === null || typeof a === "undefined" ||
++					typeof b === "undefined" ||
++					QUnit.objectType(a) !== QUnit.objectType(b) ) {
++				return false; // don't lose time with error prone cases
++			} else {
++				return bindCallbacks(a, callbacks, [ b, a ]);
++			}
++
++			// apply transition with (1..n) arguments
++		}( args[0], args[1] ) && arguments.callee.apply( this, args.splice(1, args.length - 1 )) );
++	};
++
++	return innerEquiv;
++}());
++
++/**
++ * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
++ * http://flesler.blogspot.com Licensed under BSD
++ * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
++ *
++ * @projectDescription Advanced and extensible data dumping for Javascript.
++ * @version 1.0.0
++ * @author Ariel Flesler
++ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
++ */
++QUnit.jsDump = (function() {
++	function quote( str ) {
++		return '"' + str.toString().replace( /"/g, '\\"' ) + '"';
++	}
++	function literal( o ) {
++		return o + "";
++	}
++	function join( pre, arr, post ) {
++		var s = jsDump.separator(),
++			base = jsDump.indent(),
++			inner = jsDump.indent(1);
++		if ( arr.join ) {
++			arr = arr.join( "," + s + inner );
++		}
++		if ( !arr ) {
++			return pre + post;
++		}
++		return [ pre, inner + arr, base + post ].join(s);
++	}
++	function array( arr, stack ) {
++		var i = arr.length, ret = new Array(i);
++		this.up();
++		while ( i-- ) {
++			ret[i] = this.parse( arr[i] , undefined , stack);
++		}
++		this.down();
++		return join( "[", ret, "]" );
++	}
++
++	var reName = /^function (\w+)/,
++		jsDump = {
++			// type is used mostly internally, you can fix a (custom)type in advance
++			parse: function( obj, type, stack ) {
++				stack = stack || [ ];
++				var inStack, res,
++					parser = this.parsers[ type || this.typeOf(obj) ];
++
++				type = typeof parser;
++				inStack = inArray( obj, stack );
++
++				if ( inStack !== -1 ) {
++					return "recursion(" + (inStack - stack.length) + ")";
++				}
++				if ( type === "function" )  {
++					stack.push( obj );
++					res = parser.call( this, obj, stack );
++					stack.pop();
++					return res;
++				}
++				return ( type === "string" ) ? parser : this.parsers.error;
++			},
++			typeOf: function( obj ) {
++				var type;
++				if ( obj === null ) {
++					type = "null";
++				} else if ( typeof obj === "undefined" ) {
++					type = "undefined";
++				} else if ( QUnit.is( "regexp", obj) ) {
++					type = "regexp";
++				} else if ( QUnit.is( "date", obj) ) {
++					type = "date";
++				} else if ( QUnit.is( "function", obj) ) {
++					type = "function";
++				} else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
++					type = "window";
++				} else if ( obj.nodeType === 9 ) {
++					type = "document";
++				} else if ( obj.nodeType ) {
++					type = "node";
++				} else if (
++					// native arrays
++					toString.call( obj ) === "[object Array]" ||
++					// NodeList objects
++					( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
++				) {
++					type = "array";
++				} else if ( obj.constructor === Error.prototype.constructor ) {
++					type = "error";
++				} else {
++					type = typeof obj;
++				}
++				return type;
++			},
++			separator: function() {
++				return this.multiline ?	this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
++			},
++			// extra can be a number, shortcut for increasing-calling-decreasing
++			indent: function( extra ) {
++				if ( !this.multiline ) {
++					return "";
++				}
++				var chr = this.indentChar;
++				if ( this.HTML ) {
++					chr = chr.replace( /\t/g, "   " ).replace( / /g, "&nbsp;" );
++				}
++				return new Array( this._depth_ + (extra||0) ).join(chr);
++			},
++			up: function( a ) {
++				this._depth_ += a || 1;
++			},
++			down: function( a ) {
++				this._depth_ -= a || 1;
++			},
++			setParser: function( name, parser ) {
++				this.parsers[name] = parser;
++			},
++			// The next 3 are exposed so you can use them
++			quote: quote,
++			literal: literal,
++			join: join,
++			//
++			_depth_: 1,
++			// This is the list of parsers, to modify them, use jsDump.setParser
++			parsers: {
++				window: "[Window]",
++				document: "[Document]",
++				error: function(error) {
++					return "Error(\"" + error.message + "\")";
++				},
++				unknown: "[Unknown]",
++				"null": "null",
++				"undefined": "undefined",
++				"function": function( fn ) {
++					var ret = "function",
++						// functions never have name in IE
++						name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
++
++					if ( name ) {
++						ret += " " + name;
++					}
++					ret += "( ";
++
++					ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
++					return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
++				},
++				array: array,
++				nodelist: array,
++				"arguments": array,
++				object: function( map, stack ) {
++					var ret = [ ], keys, key, val, i;
++					QUnit.jsDump.up();
++					keys = [];
++					for ( key in map ) {
++						keys.push( key );
++					}
++					keys.sort();
++					for ( i = 0; i < keys.length; i++ ) {
++						key = keys[ i ];
++						val = map[ key ];
++						ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
++					}
++					QUnit.jsDump.down();
++					return join( "{", ret, "}" );
++				},
++				node: function( node ) {
++					var len, i, val,
++						open = QUnit.jsDump.HTML ? "&lt;" : "<",
++						close = QUnit.jsDump.HTML ? "&gt;" : ">",
++						tag = node.nodeName.toLowerCase(),
++						ret = open + tag,
++						attrs = node.attributes;
++
++					if ( attrs ) {
++						for ( i = 0, len = attrs.length; i < len; i++ ) {
++							val = attrs[i].nodeValue;
++							// IE6 includes all attributes in .attributes, even ones not explicitly set.
++							// Those have values like undefined, null, 0, false, "" or "inherit".
++							if ( val && val !== "inherit" ) {
++								ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
++							}
++						}
++					}
++					ret += close;
++
++					// Show content of TextNode or CDATASection
++					if ( node.nodeType === 3 || node.nodeType === 4 ) {
++						ret += node.nodeValue;
++					}
++
++					return ret + open + "/" + tag + close;
++				},
++				// function calls it internally, it's the arguments part of the function
++				functionArgs: function( fn ) {
++					var args,
++						l = fn.length;
++
++					if ( !l ) {
++						return "";
++					}
++
++					args = new Array(l);
++					while ( l-- ) {
++						// 97 is 'a'
++						args[l] = String.fromCharCode(97+l);
++					}
++					return " " + args.join( ", " ) + " ";
++				},
++				// object calls it internally, the key part of an item in a map
++				key: quote,
++				// function calls it internally, it's the content of the function
++				functionCode: "[code]",
++				// node calls it internally, it's an html attribute value
++				attribute: quote,
++				string: quote,
++				date: quote,
++				regexp: literal,
++				number: literal,
++				"boolean": literal
++			},
++			// if true, entities are escaped ( <, >, \t, space and \n )
++			HTML: false,
++			// indentation unit
++			indentChar: "  ",
++			// if true, items in a collection, are separated by a \n, else just a space.
++			multiline: true
++		};
++
++	return jsDump;
++}());
++
++// from jquery.js
++function inArray( elem, array ) {
++	if ( array.indexOf ) {
++		return array.indexOf( elem );
++	}
++
++	for ( var i = 0, length = array.length; i < length; i++ ) {
++		if ( array[ i ] === elem ) {
++			return i;
++		}
++	}
++
++	return -1;
++}
++
++/*
++ * Javascript Diff Algorithm
++ *  By John Resig (http://ejohn.org/)
++ *  Modified by Chu Alan "sprite"
++ *
++ * Released under the MIT license.
++ *
++ * More Info:
++ *  http://ejohn.org/projects/javascript-diff-algorithm/
++ *
++ * Usage: QUnit.diff(expected, actual)
++ *
++ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
++ */
++QUnit.diff = (function() {
++	/*jshint eqeqeq:false, eqnull:true */
++	function diff( o, n ) {
++		var i,
++			ns = {},
++			os = {};
++
++		for ( i = 0; i < n.length; i++ ) {
++			if ( !hasOwn.call( ns, n[i] ) ) {
++				ns[ n[i] ] = {
++					rows: [],
++					o: null
++				};
++			}
++			ns[ n[i] ].rows.push( i );
++		}
++
++		for ( i = 0; i < o.length; i++ ) {
++			if ( !hasOwn.call( os, o[i] ) ) {
++				os[ o[i] ] = {
++					rows: [],
++					n: null
++				};
++			}
++			os[ o[i] ].rows.push( i );
++		}
++
++		for ( i in ns ) {
++			if ( !hasOwn.call( ns, i ) ) {
++				continue;
++			}
++			if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
++				n[ ns[i].rows[0] ] = {
++					text: n[ ns[i].rows[0] ],
++					row: os[i].rows[0]
++				};
++				o[ os[i].rows[0] ] = {
++					text: o[ os[i].rows[0] ],
++					row: ns[i].rows[0]
++				};
++			}
++		}
++
++		for ( i = 0; i < n.length - 1; i++ ) {
++			if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
++						n[ i + 1 ] == o[ n[i].row + 1 ] ) {
++
++				n[ i + 1 ] = {
++					text: n[ i + 1 ],
++					row: n[i].row + 1
++				};
++				o[ n[i].row + 1 ] = {
++					text: o[ n[i].row + 1 ],
++					row: i + 1
++				};
++			}
++		}
++
++		for ( i = n.length - 1; i > 0; i-- ) {
++			if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
++						n[ i - 1 ] == o[ n[i].row - 1 ]) {
++
++				n[ i - 1 ] = {
++					text: n[ i - 1 ],
++					row: n[i].row - 1
++				};
++				o[ n[i].row - 1 ] = {
++					text: o[ n[i].row - 1 ],
++					row: i - 1
++				};
++			}
++		}
++
++		return {
++			o: o,
++			n: n
++		};
++	}
++
++	return function( o, n ) {
++		o = o.replace( /\s+$/, "" );
++		n = n.replace( /\s+$/, "" );
++
++		var i, pre,
++			str = "",
++			out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
++			oSpace = o.match(/\s+/g),
++			nSpace = n.match(/\s+/g);
++
++		if ( oSpace == null ) {
++			oSpace = [ " " ];
++		}
++		else {
++			oSpace.push( " " );
++		}
++
++		if ( nSpace == null ) {
++			nSpace = [ " " ];
++		}
++		else {
++			nSpace.push( " " );
++		}
++
++		if ( out.n.length === 0 ) {
++			for ( i = 0; i < out.o.length; i++ ) {
++				str += "<del>" + out.o[i] + oSpace[i] + "</del>";
++			}
++		}
++		else {
++			if ( out.n[0].text == null ) {
++				for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
++					str += "<del>" + out.o[n] + oSpace[n] + "</del>";
++				}
++			}
++
++			for ( i = 0; i < out.n.length; i++ ) {
++				if (out.n[i].text == null) {
++					str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
++				}
++				else {
++					// `pre` initialized at top of scope
++					pre = "";
++
++					for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
++						pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
++					}
++					str += " " + out.n[i].text + nSpace[i] + pre;
++				}
++			}
++		}
++
++		return str;
++	};
++}());
++
++// for CommonJS enviroments, export everything
++if ( typeof exports !== "undefined" ) {
++	extend( exports, QUnit );
++}
++
++// get at whatever the global object is, like window in browsers
++}( (function() {return this;}.call()) ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-blind.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-blind.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-blind.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-blind",
++	"title": "jQuery UI Blind Effect",
++	"description": "Blinds the element.",
++	"keywords": [
++		"ui",
++		"blind",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/blind-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.widget.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.widget.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.widget.jquery.json	(revision 15487)
+@@ -0,0 +1,64 @@
++{
++	"name": "ui.widget",
++	"title": "jQuery UI Widget",
++	"description": "Provides a factory for creating stateful widgets with a common API.",
++	"keywords": [
++		"ui",
++		"widget",
++		"abstraction",
++		"state",
++		"factory"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/widget/",
++	"demo": "http://jqueryui.com/widget/",
++	"docs": "http://api.jqueryui.com/jQuery.widget/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6"
++	},
++	"category": "core"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.core.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.core.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.core.jquery.json	(revision 15487)
+@@ -0,0 +1,61 @@
++{
++	"name": "ui.core",
++	"title": "jQuery UI Core",
++	"description": "The core of jQuery UI, required for all interactions and widgets.",
++	"keywords": [
++		"ui",
++		"core"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/",
++	"demo": "http://jqueryui.com/",
++	"docs": "http://api.jqueryui.com/category/ui-core/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6"
++	},
++	"category": "core"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fade.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fade.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fade.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-fade",
++	"title": "jQuery UI Fade Effect",
++	"description": "Fades an element.",
++	"keywords": [
++		"ui",
++		"fade",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/fade-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-slide.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-slide.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-slide.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-slide",
++	"title": "jQuery UI Slide Effect",
++	"description": "Slides an element in and out of the viewport.",
++	"keywords": [
++		"ui",
++		"slide",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/slide-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.tooltip.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.tooltip.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.tooltip.jquery.json	(revision 15487)
+@@ -0,0 +1,64 @@
++{
++	"name": "ui.tooltip",
++	"title": "jQuery UI Tooltip",
++	"description": "Shows additional information for any element on hover or focus.",
++	"keywords": [
++		"ui",
++		"tooltip"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/tooltip/",
++	"demo": "http://jqueryui.com/tooltip/",
++	"docs": "http://api.jqueryui.com/tooltip/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.position": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-drop.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-drop.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-drop.jquery.json	(revision 15487)
+@@ -0,0 +1,65 @@
++{
++	"name": "ui.effect-drop",
++	"title": "jQuery UI Drop Effect",
++	"description": "Moves an element in one direction and hides it at the same time.",
++	"keywords": [
++		"ui",
++		"drop",
++		"effect",
++		"show",
++		"hide"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/effect/",
++	"demo": "http://jqueryui.com/effect/",
++	"docs": "http://api.jqueryui.com/drop-effect/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.effect": "1.10.3"
++	},
++	"category": "effect"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/package.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/package.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/package.json	(revision 15487)
+@@ -0,0 +1,70 @@
++{
++	"name": "jquery-ui",
++	"title": "jQuery UI",
++	"description": "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.",
++	"version": "1.10.3",
++	"homepage": "http://jqueryui.com",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"repository": {
++		"type": "git",
++		"url": "git://github.com/jquery/jquery-ui.git"
++	},
++	"bugs": "http://bugs.jqueryui.com/",
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"dependencies": {},
++	"devDependencies": {
++		"grunt": "0.4.1",
++		"grunt-contrib-jshint": "0.4.1",
++		"grunt-contrib-uglify": "0.1.1",
++		"grunt-contrib-concat": "0.1.3",
++		"grunt-contrib-qunit": "0.2.0",
++		"grunt-contrib-csslint": "0.1.0",
++		"grunt-contrib-cssmin": "0.4.2",
++		"grunt-compare-size": "0.3.1",
++		"grunt-html": "0.3.3",
++		"grunt-git-authors": "1.2.0",
++		"rimraf": "2.1.4",
++		"testswarm": "1.0.0-alpha"
++	},
++	"keywords": []
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.accordion.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.accordion.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.accordion.jquery.json	(revision 15487)
+@@ -0,0 +1,67 @@
++{
++	"name": "ui.accordion",
++	"title": "jQuery UI Accordion",
++	"description": "Displays collapsible content panels for presenting information in a limited amount of space.",
++	"keywords": [
++		"ui",
++		"accordion",
++		"navigation",
++		"panel",
++		"collapse",
++		"expand"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/accordion/",
++	"demo": "http://jqueryui.com/accordion/",
++	"docs": "http://api.jqueryui.com/accordion/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.menu.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.menu.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.menu.jquery.json	(revision 15487)
+@@ -0,0 +1,66 @@
++{
++	"name": "ui.menu",
++	"title": "jQuery UI Menu",
++	"description": "Creates nestable menus.",
++	"keywords": [
++		"ui",
++		"menu",
++		"dropdown",
++		"flyout"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/menu/",
++	"demo": "http://jqueryui.com/menu/",
++	"docs": "http://api.jqueryui.com/menu/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.position": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.droppable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.droppable.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.droppable.jquery.json	(revision 15487)
+@@ -0,0 +1,67 @@
++{
++	"name": "ui.droppable",
++	"title": "jQuery UI Droppable",
++	"description": "Enables drop targets for draggable elements.",
++	"keywords": [
++		"ui",
++		"droppable",
++		"drag",
++		"drop"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/droppable/",
++	"demo": "http://jqueryui.com/droppable/",
++	"docs": "http://api.jqueryui.com/droppable/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.mouse": "1.10.3",
++		"ui.draggable": "1.10.3"
++	},
++	"category": "interaction"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.draggable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.draggable.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.draggable.jquery.json	(revision 15487)
+@@ -0,0 +1,66 @@
++{
++	"name": "ui.draggable",
++	"title": "jQuery UI Draggable",
++	"description": "Enables dragging functionality for any element.",
++	"keywords": [
++		"ui",
++		"draggable",
++		"drag",
++		"drop"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/draggable/",
++	"demo": "http://jqueryui.com/draggable/",
++	"docs": "http://api.jqueryui.com/draggable/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.mouse": "1.10.3"
++	},
++	"category": "interaction"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/Gruntfile.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/Gruntfile.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/Gruntfile.js	(revision 15487)
+@@ -0,0 +1,378 @@
++module.exports = function( grunt ) {
++
++"use strict";
++
++var
++	// files
++	coreFiles = [
++		"jquery.ui.core.js",
++		"jquery.ui.widget.js",
++		"jquery.ui.mouse.js",
++		"jquery.ui.draggable.js",
++		"jquery.ui.droppable.js",
++		"jquery.ui.resizable.js",
++		"jquery.ui.selectable.js",
++		"jquery.ui.sortable.js",
++		"jquery.ui.effect.js"
++	],
++
++	uiFiles = coreFiles.map(function( file ) {
++		return "ui/" + file;
++	}).concat( expandFiles( "ui/*.js" ).filter(function( file ) {
++		return coreFiles.indexOf( file.substring(3) ) === -1;
++	})),
++
++	allI18nFiles = expandFiles( "ui/i18n/*.js" ),
++
++	cssFiles = [
++		"core",
++		"accordion",
++		"autocomplete",
++		"button",
++		"datepicker",
++		"dialog",
++		"menu",
++		"progressbar",
++		"resizable",
++		"selectable",
++		"slider",
++		"spinner",
++		"tabs",
++		"tooltip",
++		"theme"
++	].map(function( component ) {
++		return "themes/base/jquery.ui." + component + ".css";
++	}),
++
++	// minified files
++	minify = {
++		options: {
++			preserveComments: false
++		},
++		main: {
++			options: {
++				banner: createBanner( uiFiles )
++			},
++			files: {
++				"dist/jquery-ui.min.js": "dist/jquery-ui.js"
++			}
++		},
++		i18n: {
++			options: {
++				banner: createBanner( allI18nFiles )
++			},
++			files: {
++				"dist/i18n/jquery-ui-i18n.min.js": "dist/i18n/jquery-ui-i18n.js"
++			}
++		}
++	},
++
++	minifyCSS = {
++		options: {
++			keepSpecialComments: 0
++		},
++		main: {
++			options: {
++				keepSpecialComments: "*"
++			},
++			src: "dist/jquery-ui.css",
++			dest: "dist/jquery-ui.min.css"
++		}
++	},
++
++	compareFiles = {
++		all: [
++			"dist/jquery-ui.js",
++			"dist/jquery-ui.min.js"
++		]
++	};
++
++function mapMinFile( file ) {
++	return "dist/" + file.replace( /\.js$/, ".min.js" ).replace( /ui\//, "minified/" );
++}
++
++function expandFiles( files ) {
++	return grunt.util._.pluck( grunt.file.expandMapping( files ), "src" ).map(function( values ) {
++		return values[ 0 ];
++	});
++}
++
++uiFiles.concat( allI18nFiles ).forEach(function( file ) {
++	minify[ file ] = {
++		options: {
++			banner: createBanner()
++		},
++		files: {}
++	};
++	minify[ file ].files[ mapMinFile( file ) ] = file;
++});
++
++cssFiles.forEach(function( file ) {
++	minifyCSS[ file ] = {
++		options: {
++			banner: createBanner()
++		},
++		src: file,
++		dest: "dist/" + file.replace( /\.css$/, ".min.css" ).replace( /themes\/base\//, "themes/base/minified/" )
++	};
++});
++
++uiFiles.forEach(function( file ) {
++	// TODO this doesn't do anything until https://github.com/rwldrn/grunt-compare-size/issues/13
++	compareFiles[ file ] = [ file,  mapMinFile( file ) ];
++});
++
++// grunt plugins
++grunt.loadNpmTasks( "grunt-contrib-jshint" );
++grunt.loadNpmTasks( "grunt-contrib-uglify" );
++grunt.loadNpmTasks( "grunt-contrib-concat" );
++grunt.loadNpmTasks( "grunt-contrib-qunit" );
++grunt.loadNpmTasks( "grunt-contrib-csslint" );
++grunt.loadNpmTasks( "grunt-contrib-cssmin" );
++grunt.loadNpmTasks( "grunt-html" );
++grunt.loadNpmTasks( "grunt-compare-size" );
++grunt.loadNpmTasks( "grunt-git-authors" );
++// local testswarm and build tasks
++grunt.loadTasks( "build/tasks" );
++
++function stripDirectory( file ) {
++	return file.replace( /.+\/(.+?)>?$/, "$1" );
++}
++
++function createBanner( files ) {
++	// strip folders
++	var fileNames = files && files.map( stripDirectory );
++	return "/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - " +
++		"<%= grunt.template.today('isoDate') %>\n" +
++		"<%= pkg.homepage ? '* ' + pkg.homepage + '\\n' : '' %>" +
++		(files ? "* Includes: " + fileNames.join(", ") + "\n" : "")+
++		"* Copyright <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>;" +
++		" Licensed <%= _.pluck(pkg.licenses, 'type').join(', ') %> */\n";
++}
++
++grunt.initConfig({
++	pkg: grunt.file.readJSON("package.json"),
++	files: {
++		dist: "<%= pkg.name %>-<%= pkg.version %>",
++		cdn: "<%= pkg.name %>-<%= pkg.version %>-cdn",
++		themes: "<%= pkg.name %>-themes-<%= pkg.version %>"
++	},
++	compare_size: compareFiles,
++	concat: {
++		ui: {
++			options: {
++				banner: createBanner( uiFiles ),
++				stripBanners: {
++					block: true
++				}
++			},
++			src: uiFiles,
++			dest: "dist/jquery-ui.js"
++		},
++		i18n: {
++			options: {
++				banner: createBanner( allI18nFiles )
++			},
++			src: allI18nFiles,
++			dest: "dist/i18n/jquery-ui-i18n.js"
++		},
++		css: {
++			options: {
++				banner: createBanner( cssFiles ),
++				stripBanners: {
++					block: true
++				}
++			},
++			src: cssFiles,
++			dest: "dist/jquery-ui.css"
++		}
++	},
++	uglify: minify,
++	cssmin: minifyCSS,
++	htmllint: {
++		// ignore files that contain invalid html, used only for ajax content testing
++		all: grunt.file.expand( [ "demos/**/*.html", "tests/**/*.html" ] ).filter(function( file ) {
++			return !/(?:ajax\/content\d\.html|tabs\/data\/test\.html|tests\/unit\/core\/core\.html)/.test( file );
++		})
++	},
++	copy: {
++		dist: {
++			src: [
++				"AUTHORS.txt",
++				"jquery-*.js",
++				"MIT-LICENSE.txt",
++				"README.md",
++				"Gruntfile.js",
++				"package.json",
++				"*.jquery.json",
++				"ui/**/*",
++				"ui/.jshintrc",
++				"demos/**/*",
++				"themes/**/*",
++				"external/**/*",
++				"tests/**/*"
++			],
++			renames: {
++				"dist/jquery-ui.js": "ui/jquery-ui.js",
++				"dist/jquery-ui.min.js": "ui/minified/jquery-ui.min.js",
++				"dist/i18n/jquery-ui-i18n.js": "ui/i18n/jquery-ui-i18n.js",
++				"dist/i18n/jquery-ui-i18n.min.js": "ui/minified/i18n/jquery-ui-i18n.min.js",
++				"dist/jquery-ui.css": "themes/base/jquery-ui.css",
++				"dist/jquery-ui.min.css": "themes/base/minified/jquery-ui.min.css"
++			},
++			dest: "dist/<%= files.dist %>"
++		},
++		dist_min: {
++			src: "dist/minified/**/*",
++			strip: /^dist/,
++			dest: "dist/<%= files.dist %>/ui"
++		},
++		dist_css_min: {
++			src: "dist/themes/base/minified/*.css",
++			strip: /^dist/,
++			dest: "dist/<%= files.dist %>"
++		},
++		dist_units_images: {
++			src: "themes/base/images/*",
++			strip: /^themes\/base\//,
++			dest: "dist/"
++		},
++		dist_min_images: {
++			src: "themes/base/images/*",
++			strip: /^themes\/base\//,
++			dest: "dist/<%= files.dist %>/themes/base/minified"
++		},
++		cdn: {
++			src: [
++				"AUTHORS.txt",
++				"MIT-LICENSE.txt",
++				"ui/*.js",
++				"package.json"
++			],
++			renames: {
++				"dist/jquery-ui.js": "jquery-ui.js",
++				"dist/jquery-ui.min.js": "jquery-ui.min.js",
++				"dist/i18n/jquery-ui-i18n.js": "i18n/jquery-ui-i18n.js",
++				"dist/i18n/jquery-ui-i18n.min.js": "i18n/jquery-ui-i18n.min.js"
++			},
++			dest: "dist/<%= files.cdn %>"
++		},
++		cdn_i18n: {
++			src: "ui/i18n/jquery.ui.datepicker-*.js",
++			strip: "ui/",
++			dest: "dist/<%= files.cdn %>"
++		},
++		cdn_i18n_min: {
++			src: "dist/minified/i18n/jquery.ui.datepicker-*.js",
++			strip: "dist/minified",
++			dest: "dist/<%= files.cdn %>"
++		},
++		cdn_min: {
++			src: "dist/minified/*.js",
++			strip: /^dist\/minified/,
++			dest: "dist/<%= files.cdn %>/ui"
++		},
++		cdn_themes: {
++			src: "dist/<%= files.themes %>/themes/**/*",
++			strip: "dist/<%= files.themes %>",
++			dest: "dist/<%= files.cdn %>"
++		},
++		themes: {
++			src: [
++				"AUTHORS.txt",
++				"MIT-LICENSE.txt",
++				"package.json"
++			],
++			dest: "dist/<%= files.themes %>"
++		}
++	},
++	zip: {
++		dist: {
++			src: "<%= files.dist %>",
++			dest: "<%= files.dist %>.zip"
++		},
++		cdn: {
++			src: "<%= files.cdn %>",
++			dest: "<%= files.cdn %>.zip"
++		},
++		themes: {
++			src: "<%= files.themes %>",
++			dest: "<%= files.themes %>.zip"
++		}
++	},
++	md5: {
++		dist: {
++			src: "dist/<%= files.dist %>",
++			dest: "dist/<%= files.dist %>/MANIFEST"
++		},
++		cdn: {
++			src: "dist/<%= files.cdn %>",
++			dest: "dist/<%= files.cdn %>/MANIFEST"
++		},
++		themes: {
++			src: "dist/<%= files.themes %>",
++			dest: "dist/<%= files.themes %>/MANIFEST"
++		}
++	},
++	qunit: {
++		files: expandFiles( "tests/unit/**/*.html" ).filter(function( file ) {
++			// disabling everything that doesn't (quite) work with PhantomJS for now
++			// TODO except for all|index|test, try to include more as we go
++			return !( /(all|index|test|dialog|dialog_deprecated|tabs|tooltip)\.html$/ ).test( file );
++		})
++	},
++	jshint: {
++		ui: {
++			options: {
++				jshintrc: "ui/.jshintrc"
++			},
++			files: {
++				src: "ui/*.js"
++			}
++		},
++		grunt: {
++			options: {
++				jshintrc: ".jshintrc"
++			},
++			files: {
++				src: [ "Gruntfile.js", "build/**/*.js" ]
++			}
++		},
++		tests: {
++			options: {
++				jshintrc: "tests/.jshintrc"
++			},
++			files: {
++				src: "tests/unit/**/*.js"
++			}
++		}
++	},
++	csslint: {
++		base_theme: {
++			src: "themes/base/*.css",
++			options: {
++				"adjoining-classes": false,
++				"box-model": false,
++				"compatible-vendor-prefixes": false,
++				"duplicate-background-images": false,
++				"import": false,
++				"important": false,
++				"outline-none": false,
++				"overqualified-elements": false,
++				"text-indent": false
++			}
++		}
++	}
++});
++
++grunt.registerTask( "default", [ "lint", "test" ] );
++grunt.registerTask( "lint", [ "jshint", "csslint", "htmllint" ] );
++grunt.registerTask( "test", [ "qunit" ] );
++grunt.registerTask( "sizer", [ "concat:ui", "uglify:main", "compare_size:all" ] );
++grunt.registerTask( "sizer_all", [ "concat:ui", "uglify", "compare_size" ] );
++grunt.registerTask( "build", [ "concat", "uglify", "cssmin", "copy:dist_units_images" ] );
++grunt.registerTask( "release", "clean build copy:dist copy:dist_min copy:dist_min_images copy:dist_css_min md5:dist zip:dist".split( " " ) );
++grunt.registerTask( "release_themes", "release generate_themes copy:themes md5:themes zip:themes".split( " " ) );
++grunt.registerTask( "release_cdn", "release_themes copy:cdn copy:cdn_min copy:cdn_i18n copy:cdn_i18n_min copy:cdn_themes md5:cdn zip:cdn".split( " " ) );
++
++};
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.sortable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.sortable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.sortable.js	(revision 15487)
+@@ -0,0 +1,1285 @@
++/*!
++ * jQuery UI Sortable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/sortable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++/*jshint loopfunc: true */
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++function isFloating(item) {
++	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
++}
++
++$.widget("ui.sortable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "sort",
++	ready: false,
++	options: {
++		appendTo: "parent",
++		axis: false,
++		connectWith: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		dropOnEmpty: true,
++		forcePlaceholderSize: false,
++		forceHelperSize: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		items: "> *",
++		opacity: false,
++		placeholder: false,
++		revert: false,
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		scope: "default",
++		tolerance: "intersect",
++		zIndex: 1000,
++
++		// callbacks
++		activate: null,
++		beforeStop: null,
++		change: null,
++		deactivate: null,
++		out: null,
++		over: null,
++		receive: null,
++		remove: null,
++		sort: null,
++		start: null,
++		stop: null,
++		update: null
++	},
++	_create: function() {
++
++		var o = this.options;
++		this.containerCache = {};
++		this.element.addClass("ui-sortable");
++
++		//Get the items
++		this.refresh();
++
++		//Let's determine if the items are being displayed horizontally
++		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
++
++		//Let's determine the parent's offset
++		this.offset = this.element.offset();
++
++		//Initialize mouse events for interaction
++		this._mouseInit();
++
++		//We're ready to go
++		this.ready = true;
++
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass("ui-sortable ui-sortable-disabled");
++		this._mouseDestroy();
++
++		for ( var i = this.items.length - 1; i >= 0; i-- ) {
++			this.items[i].item.removeData(this.widgetName + "-item");
++		}
++
++		return this;
++	},
++
++	_setOption: function(key, value){
++		if ( key === "disabled" ) {
++			this.options[ key ] = value;
++
++			this.widget().toggleClass( "ui-sortable-disabled", !!value );
++		} else {
++			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
++			$.Widget.prototype._setOption.apply(this, arguments);
++		}
++	},
++
++	_mouseCapture: function(event, overrideHandle) {
++		var currentItem = null,
++			validHandle = false,
++			that = this;
++
++		if (this.reverting) {
++			return false;
++		}
++
++		if(this.options.disabled || this.options.type === "static") {
++			return false;
++		}
++
++		//We have to refresh the items data once first
++		this._refreshItems(event);
++
++		//Find out if the clicked node (or one of its parents) is a actual item in this.items
++		$(event.target).parents().each(function() {
++			if($.data(this, that.widgetName + "-item") === that) {
++				currentItem = $(this);
++				return false;
++			}
++		});
++		if($.data(event.target, that.widgetName + "-item") === that) {
++			currentItem = $(event.target);
++		}
++
++		if(!currentItem) {
++			return false;
++		}
++		if(this.options.handle && !overrideHandle) {
++			$(this.options.handle, currentItem).find("*").addBack().each(function() {
++				if(this === event.target) {
++					validHandle = true;
++				}
++			});
++			if(!validHandle) {
++				return false;
++			}
++		}
++
++		this.currentItem = currentItem;
++		this._removeCurrentsFromItems();
++		return true;
++
++	},
++
++	_mouseStart: function(event, overrideHandle, noActivation) {
++
++		var i, body,
++			o = this.options;
++
++		this.currentContainer = this;
++
++		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
++		this.refreshPositions();
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Get the next scrolling parent
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.currentItem.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		// Only after we got the offset, we can change the helper's position to absolute
++		// TODO: Still need to figure out a way to make relative sorting possible
++		this.helper.css("position", "absolute");
++		this.cssPosition = this.helper.css("position");
++
++		//Generate the original position
++		this.originalPosition = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Cache the former DOM position
++		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
++
++		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.currentItem.hide();
++		}
++
++		//Create the placeholder
++		this._createPlaceholder();
++
++		//Set a containment if given in the options
++		if(o.containment) {
++			this._setContainment();
++		}
++
++		if( o.cursor && o.cursor !== "auto" ) { // cursor option
++			body = this.document.find( "body" );
++
++			// support: IE
++			this.storedCursor = body.css( "cursor" );
++			body.css( "cursor", o.cursor );
++
++			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
++		}
++
++		if(o.opacity) { // opacity option
++			if (this.helper.css("opacity")) {
++				this._storedOpacity = this.helper.css("opacity");
++			}
++			this.helper.css("opacity", o.opacity);
++		}
++
++		if(o.zIndex) { // zIndex option
++			if (this.helper.css("zIndex")) {
++				this._storedZIndex = this.helper.css("zIndex");
++			}
++			this.helper.css("zIndex", o.zIndex);
++		}
++
++		//Prepare scrolling
++		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++			this.overflowOffset = this.scrollParent.offset();
++		}
++
++		//Call callbacks
++		this._trigger("start", event, this._uiHash());
++
++		//Recache the helper size
++		if(!this._preserveHelperProportions) {
++			this._cacheHelperProportions();
++		}
++
++
++		//Post "activate" events to possible containers
++		if( !noActivation ) {
++			for ( i = this.containers.length - 1; i >= 0; i-- ) {
++				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
++			}
++		}
++
++		//Prepare possible droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++		this.dragging = true;
++
++		this.helper.addClass("ui-sortable-helper");
++		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		return true;
++
++	},
++
++	_mouseDrag: function(event) {
++		var i, item, itemElement, intersection,
++			o = this.options,
++			scrolled = false;
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		if (!this.lastPositionAbs) {
++			this.lastPositionAbs = this.positionAbs;
++		}
++
++		//Do scrolling
++		if(this.options.scroll) {
++			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++
++				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++
++				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++
++			} else {
++
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++
++			}
++
++			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++				$.ui.ddmanager.prepareOffsets(this, event);
++			}
++		}
++
++		//Regenerate the absolute position used for position checks
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Set the helper position
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++
++		//Rearrange
++		for (i = this.items.length - 1; i >= 0; i--) {
++
++			//Cache variables and intersection, continue if no intersection
++			item = this.items[i];
++			itemElement = item.item[0];
++			intersection = this._intersectsWithPointer(item);
++			if (!intersection) {
++				continue;
++			}
++
++			// Only put the placeholder inside the current Container, skip all
++			// items form other containers. This works because when moving
++			// an item from one container to another the
++			// currentContainer is switched before the placeholder is moved.
++			//
++			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
++			// beetween the outer and inner container.
++			if (item.instance !== this.currentContainer) {
++				continue;
++			}
++
++			// cannot intersect with itself
++			// no useless actions that have been done before
++			// no action if the item moved is the parent of the item checked
++			if (itemElement !== this.currentItem[0] &&
++				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
++				!$.contains(this.placeholder[0], itemElement) &&
++				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
++			) {
++
++				this.direction = intersection === 1 ? "down" : "up";
++
++				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
++					this._rearrange(event, item);
++				} else {
++					break;
++				}
++
++				this._trigger("change", event, this._uiHash());
++				break;
++			}
++		}
++
++		//Post events to containers
++		this._contactContainers(event);
++
++		//Interconnect with droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		//Call callbacks
++		this._trigger("sort", event, this._uiHash());
++
++		this.lastPositionAbs = this.positionAbs;
++		return false;
++
++	},
++
++	_mouseStop: function(event, noPropagation) {
++
++		if(!event) {
++			return;
++		}
++
++		//If we are using droppables, inform the manager about the drop
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			$.ui.ddmanager.drop(this, event);
++		}
++
++		if(this.options.revert) {
++			var that = this,
++				cur = this.placeholder.offset(),
++				axis = this.options.axis,
++				animation = {};
++
++			if ( !axis || axis === "x" ) {
++				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
++			}
++			if ( !axis || axis === "y" ) {
++				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
++			}
++			this.reverting = true;
++			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
++				that._clear(event);
++			});
++		} else {
++			this._clear(event, noPropagation);
++		}
++
++		return false;
++
++	},
++
++	cancel: function() {
++
++		if(this.dragging) {
++
++			this._mouseUp({ target: null });
++
++			if(this.options.helper === "original") {
++				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++			} else {
++				this.currentItem.show();
++			}
++
++			//Post deactivating events to containers
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", null, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		if (this.placeholder) {
++			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++			if(this.placeholder[0].parentNode) {
++				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++			}
++			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
++				this.helper.remove();
++			}
++
++			$.extend(this, {
++				helper: null,
++				dragging: false,
++				reverting: false,
++				_noFinalSort: null
++			});
++
++			if(this.domPosition.prev) {
++				$(this.domPosition.prev).after(this.currentItem);
++			} else {
++				$(this.domPosition.parent).prepend(this.currentItem);
++			}
++		}
++
++		return this;
++
++	},
++
++	serialize: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			str = [];
++		o = o || {};
++
++		$(items).each(function() {
++			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
++			if (res) {
++				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
++			}
++		});
++
++		if(!str.length && o.key) {
++			str.push(o.key + "=");
++		}
++
++		return str.join("&");
++
++	},
++
++	toArray: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			ret = [];
++
++		o = o || {};
++
++		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
++		return ret;
++
++	},
++
++	/* Be careful with the following core functions */
++	_intersectsWith: function(item) {
++
++		var x1 = this.positionAbs.left,
++			x2 = x1 + this.helperProportions.width,
++			y1 = this.positionAbs.top,
++			y2 = y1 + this.helperProportions.height,
++			l = item.left,
++			r = l + item.width,
++			t = item.top,
++			b = t + item.height,
++			dyClick = this.offset.click.top,
++			dxClick = this.offset.click.left,
++			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
++			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
++			isOverElement = isOverElementHeight && isOverElementWidth;
++
++		if ( this.options.tolerance === "pointer" ||
++			this.options.forcePointerForContainers ||
++			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
++		) {
++			return isOverElement;
++		} else {
++
++			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
++				x2 - (this.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
++				y2 - (this.helperProportions.height / 2) < b ); // Top Half
++
++		}
++	},
++
++	_intersectsWithPointer: function(item) {
++
++		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
++			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
++			isOverElement = isOverElementHeight && isOverElementWidth,
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (!isOverElement) {
++			return false;
++		}
++
++		return this.floating ?
++			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
++			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
++
++	},
++
++	_intersectsWithSides: function(item) {
++
++		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
++			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (this.floating && horizontalDirection) {
++			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
++		} else {
++			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
++		}
++
++	},
++
++	_getDragVerticalDirection: function() {
++		var delta = this.positionAbs.top - this.lastPositionAbs.top;
++		return delta !== 0 && (delta > 0 ? "down" : "up");
++	},
++
++	_getDragHorizontalDirection: function() {
++		var delta = this.positionAbs.left - this.lastPositionAbs.left;
++		return delta !== 0 && (delta > 0 ? "right" : "left");
++	},
++
++	refresh: function(event) {
++		this._refreshItems(event);
++		this.refreshPositions();
++		return this;
++	},
++
++	_connectWith: function() {
++		var options = this.options;
++		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
++	},
++
++	_getItemsAsjQuery: function(connected) {
++
++		var i, j, cur, inst,
++			items = [],
++			queries = [],
++			connectWith = this._connectWith();
++
++		if(connectWith && connected) {
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for ( j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
++					}
++				}
++			}
++		}
++
++		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
++
++		for (i = queries.length - 1; i >= 0; i--){
++			queries[i][0].each(function() {
++				items.push(this);
++			});
++		}
++
++		return $(items);
++
++	},
++
++	_removeCurrentsFromItems: function() {
++
++		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
++
++		this.items = $.grep(this.items, function (item) {
++			for (var j=0; j < list.length; j++) {
++				if(list[j] === item.item[0]) {
++					return false;
++				}
++			}
++			return true;
++		});
++
++	},
++
++	_refreshItems: function(event) {
++
++		this.items = [];
++		this.containers = [this];
++
++		var i, j, cur, inst, targetData, _queries, item, queriesLength,
++			items = this.items,
++			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
++			connectWith = this._connectWith();
++
++		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for (j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
++						this.containers.push(inst);
++					}
++				}
++			}
++		}
++
++		for (i = queries.length - 1; i >= 0; i--) {
++			targetData = queries[i][1];
++			_queries = queries[i][0];
++
++			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
++				item = $(_queries[j]);
++
++				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
++
++				items.push({
++					item: item,
++					instance: targetData,
++					width: 0, height: 0,
++					left: 0, top: 0
++				});
++			}
++		}
++
++	},
++
++	refreshPositions: function(fast) {
++
++		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
++		if(this.offsetParent && this.helper) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		var i, item, t, p;
++
++		for (i = this.items.length - 1; i >= 0; i--){
++			item = this.items[i];
++
++			//We ignore calculating positions of all connected containers when we're not over them
++			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
++				continue;
++			}
++
++			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
++
++			if (!fast) {
++				item.width = t.outerWidth();
++				item.height = t.outerHeight();
++			}
++
++			p = t.offset();
++			item.left = p.left;
++			item.top = p.top;
++		}
++
++		if(this.options.custom && this.options.custom.refreshContainers) {
++			this.options.custom.refreshContainers.call(this);
++		} else {
++			for (i = this.containers.length - 1; i >= 0; i--){
++				p = this.containers[i].element.offset();
++				this.containers[i].containerCache.left = p.left;
++				this.containers[i].containerCache.top = p.top;
++				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
++				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
++			}
++		}
++
++		return this;
++	},
++
++	_createPlaceholder: function(that) {
++		that = that || this;
++		var className,
++			o = that.options;
++
++		if(!o.placeholder || o.placeholder.constructor === String) {
++			className = o.placeholder;
++			o.placeholder = {
++				element: function() {
++
++					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
++						element = $( "<" + nodeName + ">", that.document[0] )
++							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
++							.removeClass("ui-sortable-helper");
++
++					if ( nodeName === "tr" ) {
++						that.currentItem.children().each(function() {
++							$( "<td>&#160;</td>", that.document[0] )
++								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
++								.appendTo( element );
++						});
++					} else if ( nodeName === "img" ) {
++						element.attr( "src", that.currentItem.attr( "src" ) );
++					}
++
++					if ( !className ) {
++						element.css( "visibility", "hidden" );
++					}
++
++					return element;
++				},
++				update: function(container, p) {
++
++					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
++					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
++					if(className && !o.forcePlaceholderSize) {
++						return;
++					}
++
++					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
++					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
++					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
++				}
++			};
++		}
++
++		//Create the placeholder
++		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
++
++		//Append it after the actual current item
++		that.currentItem.after(that.placeholder);
++
++		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
++		o.placeholder.update(that, that.placeholder);
++
++	},
++
++	_contactContainers: function(event) {
++		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
++			innermostContainer = null,
++			innermostIndex = null;
++
++		// get innermost container that intersects with item
++		for (i = this.containers.length - 1; i >= 0; i--) {
++
++			// never consider a container that's located within the item itself
++			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
++				continue;
++			}
++
++			if(this._intersectsWith(this.containers[i].containerCache)) {
++
++				// if we've already found a container and it's more "inner" than this, then continue
++				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
++					continue;
++				}
++
++				innermostContainer = this.containers[i];
++				innermostIndex = i;
++
++			} else {
++				// container doesn't intersect. trigger "out" event if necessary
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", event, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		// if no intersecting containers found, return
++		if(!innermostContainer) {
++			return;
++		}
++
++		// move the item into the container if it's not there already
++		if(this.containers.length === 1) {
++			if (!this.containers[innermostIndex].containerCache.over) {
++				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++				this.containers[innermostIndex].containerCache.over = 1;
++			}
++		} else {
++
++			//When entering a new container, we will find the item with the least distance and append our item near it
++			dist = 10000;
++			itemWithLeastDistance = null;
++			floating = innermostContainer.floating || isFloating(this.currentItem);
++			posProperty = floating ? "left" : "top";
++			sizeProperty = floating ? "width" : "height";
++			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
++			for (j = this.items.length - 1; j >= 0; j--) {
++				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
++					continue;
++				}
++				if(this.items[j].item[0] === this.currentItem[0]) {
++					continue;
++				}
++				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
++					continue;
++				}
++				cur = this.items[j].item.offset()[posProperty];
++				nearBottom = false;
++				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
++					nearBottom = true;
++					cur += this.items[j][sizeProperty];
++				}
++
++				if(Math.abs(cur - base) < dist) {
++					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
++					this.direction = nearBottom ? "up": "down";
++				}
++			}
++
++			//Check if dropOnEmpty is enabled
++			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
++				return;
++			}
++
++			if(this.currentContainer === this.containers[innermostIndex]) {
++				return;
++			}
++
++			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
++			this._trigger("change", event, this._uiHash());
++			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
++			this.currentContainer = this.containers[innermostIndex];
++
++			//Update the placeholder
++			this.options.placeholder.update(this.currentContainer, this.placeholder);
++
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++			this.containers[innermostIndex].containerCache.over = 1;
++		}
++
++
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
++
++		//Add the helper to the DOM if that didn't happen already
++		if(!helper.parents("body").length) {
++			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
++		}
++
++		if(helper[0] === this.currentItem[0]) {
++			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
++		}
++
++		if(!helper[0].style.width || o.forceHelperSize) {
++			helper.width(this.currentItem.width());
++		}
++		if(!helper[0].style.height || o.forceHelperSize) {
++			helper.height(this.currentItem.height());
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		// This needs to be actually done for all browsers, since pageX/pageY includes this information
++		// with an ugly IE fix
++		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.currentItem.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
++			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var ce, co, over,
++			o = this.options;
++		if(o.containment === "parent") {
++			o.containment = this.helper[0].parentNode;
++		}
++		if(o.containment === "document" || o.containment === "window") {
++			this.containment = [
++				0 - this.offset.relative.left - this.offset.parent.left,
++				0 - this.offset.relative.top - this.offset.parent.top,
++				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
++				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++		if(!(/^(document|window|parent)$/).test(o.containment)) {
++			ce = $(o.containment)[0];
++			co = $(o.containment).offset();
++			over = ($(ce).css("overflow") !== "hidden");
++
++			this.containment = [
++				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
++				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
++				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
++				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
++			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var top, left,
++			o = this.options,
++			pageX = event.pageX,
++			pageY = event.pageY,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		// This is another very weird special case that only happens for relative elements:
++		// 1. If the css position is relative
++		// 2. and the scroll parent is the document or similar to the offset parent
++		// we have to refresh the relative offset during the scroll so there are no jumps
++		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
++			this.offset.relative = this._getRelativeOffset();
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++
++			if(this.containment) {
++				if(event.pageX - this.offset.click.left < this.containment[0]) {
++					pageX = this.containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < this.containment[1]) {
++					pageY = this.containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > this.containment[2]) {
++					pageX = this.containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > this.containment[3]) {
++					pageY = this.containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
++				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
++				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																// The absolute mouse position
++				this.offset.click.top -													// Click offset (relative to the element)
++				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX -																// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_rearrange: function(event, i, a, hardRefresh) {
++
++		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
++
++		//Various things done here to improve the performance:
++		// 1. we create a setTimeout, that calls refreshPositions
++		// 2. on the instance, we have a counter variable, that get's higher after every append
++		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
++		// 4. this lets only the last addition to the timeout stack through
++		this.counter = this.counter ? ++this.counter : 1;
++		var counter = this.counter;
++
++		this._delay(function() {
++			if(counter === this.counter) {
++				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
++			}
++		});
++
++	},
++
++	_clear: function(event, noPropagation) {
++
++		this.reverting = false;
++		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
++		// everything else normalized again
++		var i,
++			delayedTriggers = [];
++
++		// We first have to update the dom position of the actual currentItem
++		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
++		if(!this._noFinalSort && this.currentItem.parent().length) {
++			this.placeholder.before(this.currentItem);
++		}
++		this._noFinalSort = null;
++
++		if(this.helper[0] === this.currentItem[0]) {
++			for(i in this._storedCSS) {
++				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
++					this._storedCSS[i] = "";
++				}
++			}
++			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++		} else {
++			this.currentItem.show();
++		}
++
++		if(this.fromOutside && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
++		}
++		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
++		}
++
++		// Check if the items Container has Changed and trigger appropriate
++		// events.
++		if (this !== this.currentContainer) {
++			if(!noPropagation) {
++				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
++			}
++		}
++
++
++		//Post events to containers
++		for (i = this.containers.length - 1; i >= 0; i--){
++			if(!noPropagation) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++			}
++			if(this.containers[i].containerCache.over) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++				this.containers[i].containerCache.over = 0;
++			}
++		}
++
++		//Do what was originally in plugins
++		if ( this.storedCursor ) {
++			this.document.find( "body" ).css( "cursor", this.storedCursor );
++			this.storedStylesheet.remove();
++		}
++		if(this._storedOpacity) {
++			this.helper.css("opacity", this._storedOpacity);
++		}
++		if(this._storedZIndex) {
++			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
++		}
++
++		this.dragging = false;
++		if(this.cancelHelperRemoval) {
++			if(!noPropagation) {
++				this._trigger("beforeStop", event, this._uiHash());
++				for (i=0; i < delayedTriggers.length; i++) {
++					delayedTriggers[i].call(this, event);
++				} //Trigger all delayed events
++				this._trigger("stop", event, this._uiHash());
++			}
++
++			this.fromOutside = false;
++			return false;
++		}
++
++		if(!noPropagation) {
++			this._trigger("beforeStop", event, this._uiHash());
++		}
++
++		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.helper.remove();
++		}
++		this.helper = null;
++
++		if(!noPropagation) {
++			for (i=0; i < delayedTriggers.length; i++) {
++				delayedTriggers[i].call(this, event);
++			} //Trigger all delayed events
++			this._trigger("stop", event, this._uiHash());
++		}
++
++		this.fromOutside = false;
++		return true;
++
++	},
++
++	_trigger: function() {
++		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
++			this.cancel();
++		}
++	},
++
++	_uiHash: function(_inst) {
++		var inst = _inst || this;
++		return {
++			helper: inst.helper,
++			placeholder: inst.placeholder || $([]),
++			position: inst.position,
++			originalPosition: inst.originalPosition,
++			offset: inst.positionAbs,
++			item: inst.currentItem,
++			sender: _inst ? _inst.element : null
++		};
++	}
++
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.datepicker.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.datepicker.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.datepicker.js	(revision 15487)
+@@ -0,0 +1,2038 @@
++/*!
++ * jQuery UI Datepicker 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/datepicker/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ */
++(function( $, undefined ) {
++
++$.extend($.ui, { datepicker: { version: "1.10.3" } });
++
++var PROP_NAME = "datepicker",
++	instActive;
++
++/* Date picker manager.
++   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
++   Settings for (groups of) date pickers are maintained in an instance object,
++   allowing multiple different settings on the same page. */
++
++function Datepicker() {
++	this._curInst = null; // The current instance in use
++	this._keyEvent = false; // If the last event was a key event
++	this._disabledInputs = []; // List of date picker inputs that have been disabled
++	this._datepickerShowing = false; // True if the popup picker is showing , false if not
++	this._inDialog = false; // True if showing within a "dialog", false if not
++	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
++	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
++	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
++	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
++	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
++	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
++	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
++	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
++	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
++	this.regional = []; // Available regional settings, indexed by language code
++	this.regional[""] = { // Default regional settings
++		closeText: "Done", // Display text for close link
++		prevText: "Prev", // Display text for previous month link
++		nextText: "Next", // Display text for next month link
++		currentText: "Today", // Display text for current month link
++		monthNames: ["January","February","March","April","May","June",
++			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
++		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
++		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
++		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
++		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
++		weekHeader: "Wk", // Column header for week of the year
++		dateFormat: "mm/dd/yy", // See format options on parseDate
++		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
++		isRTL: false, // True if right-to-left language, false if left-to-right
++		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
++		yearSuffix: "" // Additional text to append to the year in the month headers
++	};
++	this._defaults = { // Global defaults for all the date picker instances
++		showOn: "focus", // "focus" for popup on focus,
++			// "button" for trigger button, or "both" for either
++		showAnim: "fadeIn", // Name of jQuery animation for popup
++		showOptions: {}, // Options for enhanced animations
++		defaultDate: null, // Used when field is blank: actual date,
++			// +/-number for offset from today, null for today
++		appendText: "", // Display text following the input box, e.g. showing the format
++		buttonText: "...", // Text for trigger button
++		buttonImage: "", // URL for trigger button image
++		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
++		hideIfNoPrevNext: false, // True to hide next/previous month links
++			// if not applicable, false to just disable them
++		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
++		gotoCurrent: false, // True if today link goes back to current selection instead
++		changeMonth: false, // True if month can be selected directly, false if only prev/next
++		changeYear: false, // True if year can be selected directly, false if only prev/next
++		yearRange: "c-10:c+10", // Range of years to display in drop-down,
++			// either relative to today's year (-nn:+nn), relative to currently displayed year
++			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
++		showOtherMonths: false, // True to show dates in other months, false to leave blank
++		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
++		showWeek: false, // True to show week of the year, false to not show it
++		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
++			// takes a Date and returns the number of the week for it
++		shortYearCutoff: "+10", // Short year values < this are in the current century,
++			// > this are in the previous century,
++			// string value starting with "+" for current year + value
++		minDate: null, // The earliest selectable date, or null for no limit
++		maxDate: null, // The latest selectable date, or null for no limit
++		duration: "fast", // Duration of display/closure
++		beforeShowDay: null, // Function that takes a date and returns an array with
++			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
++			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
++		beforeShow: null, // Function that takes an input field and
++			// returns a set of custom settings for the date picker
++		onSelect: null, // Define a callback function when a date is selected
++		onChangeMonthYear: null, // Define a callback function when the month or year is changed
++		onClose: null, // Define a callback function when the datepicker is closed
++		numberOfMonths: 1, // Number of months to show at a time
++		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
++		stepMonths: 1, // Number of months to step back/forward
++		stepBigMonths: 12, // Number of months to step back/forward for the big links
++		altField: "", // Selector for an alternate field to store selected dates into
++		altFormat: "", // The date format to use for the alternate field
++		constrainInput: true, // The input is constrained by the current date format
++		showButtonPanel: false, // True to show button panel, false to not show it
++		autoSize: false, // True to size the input for the date format, false to leave as is
++		disabled: false // The initial disabled state
++	};
++	$.extend(this._defaults, this.regional[""]);
++	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
++}
++
++$.extend(Datepicker.prototype, {
++	/* Class name added to elements to indicate already configured with a date picker. */
++	markerClassName: "hasDatepicker",
++
++	//Keep track of the maximum number of rows displayed (see #7043)
++	maxRows: 4,
++
++	// TODO rename to "widget" when switching to widget factory
++	_widgetDatepicker: function() {
++		return this.dpDiv;
++	},
++
++	/* Override the default settings for all instances of the date picker.
++	 * @param  settings  object - the new settings to use as defaults (anonymous object)
++	 * @return the manager object
++	 */
++	setDefaults: function(settings) {
++		extendRemove(this._defaults, settings || {});
++		return this;
++	},
++
++	/* Attach the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
++	 */
++	_attachDatepicker: function(target, settings) {
++		var nodeName, inline, inst;
++		nodeName = target.nodeName.toLowerCase();
++		inline = (nodeName === "div" || nodeName === "span");
++		if (!target.id) {
++			this.uuid += 1;
++			target.id = "dp" + this.uuid;
++		}
++		inst = this._newInst($(target), inline);
++		inst.settings = $.extend({}, settings || {});
++		if (nodeName === "input") {
++			this._connectDatepicker(target, inst);
++		} else if (inline) {
++			this._inlineDatepicker(target, inst);
++		}
++	},
++
++	/* Create a new instance object. */
++	_newInst: function(target, inline) {
++		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
++		return {id: id, input: target, // associated target
++			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
++			drawMonth: 0, drawYear: 0, // month being drawn
++			inline: inline, // is datepicker inline or not
++			dpDiv: (!inline ? this.dpDiv : // presentation div
++			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
++	},
++
++	/* Attach the date picker to an input field. */
++	_connectDatepicker: function(target, inst) {
++		var input = $(target);
++		inst.append = $([]);
++		inst.trigger = $([]);
++		if (input.hasClass(this.markerClassName)) {
++			return;
++		}
++		this._attachments(input, inst);
++		input.addClass(this.markerClassName).keydown(this._doKeyDown).
++			keypress(this._doKeyPress).keyup(this._doKeyUp);
++		this._autoSize(inst);
++		$.data(target, PROP_NAME, inst);
++		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++	},
++
++	/* Make attachments based on settings. */
++	_attachments: function(input, inst) {
++		var showOn, buttonText, buttonImage,
++			appendText = this._get(inst, "appendText"),
++			isRTL = this._get(inst, "isRTL");
++
++		if (inst.append) {
++			inst.append.remove();
++		}
++		if (appendText) {
++			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
++			input[isRTL ? "before" : "after"](inst.append);
++		}
++
++		input.unbind("focus", this._showDatepicker);
++
++		if (inst.trigger) {
++			inst.trigger.remove();
++		}
++
++		showOn = this._get(inst, "showOn");
++		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
++			input.focus(this._showDatepicker);
++		}
++		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
++			buttonText = this._get(inst, "buttonText");
++			buttonImage = this._get(inst, "buttonImage");
++			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
++				$("<img/>").addClass(this._triggerClass).
++					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
++				$("<button type='button'></button>").addClass(this._triggerClass).
++					html(!buttonImage ? buttonText : $("<img/>").attr(
++					{ src:buttonImage, alt:buttonText, title:buttonText })));
++			input[isRTL ? "before" : "after"](inst.trigger);
++			inst.trigger.click(function() {
++				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
++					$.datepicker._hideDatepicker();
++				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
++					$.datepicker._hideDatepicker();
++					$.datepicker._showDatepicker(input[0]);
++				} else {
++					$.datepicker._showDatepicker(input[0]);
++				}
++				return false;
++			});
++		}
++	},
++
++	/* Apply the maximum length for the date format. */
++	_autoSize: function(inst) {
++		if (this._get(inst, "autoSize") && !inst.inline) {
++			var findMax, max, maxI, i,
++				date = new Date(2009, 12 - 1, 20), // Ensure double digits
++				dateFormat = this._get(inst, "dateFormat");
++
++			if (dateFormat.match(/[DM]/)) {
++				findMax = function(names) {
++					max = 0;
++					maxI = 0;
++					for (i = 0; i < names.length; i++) {
++						if (names[i].length > max) {
++							max = names[i].length;
++							maxI = i;
++						}
++					}
++					return maxI;
++				};
++				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
++					"monthNames" : "monthNamesShort"))));
++				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
++					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
++			}
++			inst.input.attr("size", this._formatDate(inst, date).length);
++		}
++	},
++
++	/* Attach an inline date picker to a div. */
++	_inlineDatepicker: function(target, inst) {
++		var divSpan = $(target);
++		if (divSpan.hasClass(this.markerClassName)) {
++			return;
++		}
++		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
++		$.data(target, PROP_NAME, inst);
++		this._setDate(inst, this._getDefaultDate(inst), true);
++		this._updateDatepicker(inst);
++		this._updateAlternate(inst);
++		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
++		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
++		inst.dpDiv.css( "display", "block" );
++	},
++
++	/* Pop-up the date picker in a "dialog" box.
++	 * @param  input element - ignored
++	 * @param  date	string or Date - the initial date to display
++	 * @param  onSelect  function - the function to call when a date is selected
++	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
++	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
++	 *					event - with x/y coordinates or
++	 *					leave empty for default (screen centre)
++	 * @return the manager object
++	 */
++	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
++		var id, browserWidth, browserHeight, scrollX, scrollY,
++			inst = this._dialogInst; // internal instance
++
++		if (!inst) {
++			this.uuid += 1;
++			id = "dp" + this.uuid;
++			this._dialogInput = $("<input type='text' id='" + id +
++				"' style='position: absolute; top: -100px; width: 0px;'/>");
++			this._dialogInput.keydown(this._doKeyDown);
++			$("body").append(this._dialogInput);
++			inst = this._dialogInst = this._newInst(this._dialogInput, false);
++			inst.settings = {};
++			$.data(this._dialogInput[0], PROP_NAME, inst);
++		}
++		extendRemove(inst.settings, settings || {});
++		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
++		this._dialogInput.val(date);
++
++		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
++		if (!this._pos) {
++			browserWidth = document.documentElement.clientWidth;
++			browserHeight = document.documentElement.clientHeight;
++			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
++			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
++			this._pos = // should use actual width/height below
++				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
++		}
++
++		// move input on screen for focus, but hidden behind dialog
++		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
++		inst.settings.onSelect = onSelect;
++		this._inDialog = true;
++		this.dpDiv.addClass(this._dialogClass);
++		this._showDatepicker(this._dialogInput[0]);
++		if ($.blockUI) {
++			$.blockUI(this.dpDiv);
++		}
++		$.data(this._dialogInput[0], PROP_NAME, inst);
++		return this;
++	},
++
++	/* Detach a datepicker from its control.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_destroyDatepicker: function(target) {
++		var nodeName,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		$.removeData(target, PROP_NAME);
++		if (nodeName === "input") {
++			inst.append.remove();
++			inst.trigger.remove();
++			$target.removeClass(this.markerClassName).
++				unbind("focus", this._showDatepicker).
++				unbind("keydown", this._doKeyDown).
++				unbind("keypress", this._doKeyPress).
++				unbind("keyup", this._doKeyUp);
++		} else if (nodeName === "div" || nodeName === "span") {
++			$target.removeClass(this.markerClassName).empty();
++		}
++	},
++
++	/* Enable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_enableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = false;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = false; }).end().
++				filter("img").css({opacity: "1.0", cursor: ""});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().removeClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", false);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++	},
++
++	/* Disable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_disableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = true;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = true; }).end().
++				filter("img").css({opacity: "0.5", cursor: "default"});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().addClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", true);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++		this._disabledInputs[this._disabledInputs.length] = target;
++	},
++
++	/* Is the first field in a jQuery collection disabled as a datepicker?
++	 * @param  target	element - the target input field or division or span
++	 * @return boolean - true if disabled, false if enabled
++	 */
++	_isDisabledDatepicker: function(target) {
++		if (!target) {
++			return false;
++		}
++		for (var i = 0; i < this._disabledInputs.length; i++) {
++			if (this._disabledInputs[i] === target) {
++				return true;
++			}
++		}
++		return false;
++	},
++
++	/* Retrieve the instance data for the target control.
++	 * @param  target  element - the target input field or division or span
++	 * @return  object - the associated instance data
++	 * @throws  error if a jQuery problem getting data
++	 */
++	_getInst: function(target) {
++		try {
++			return $.data(target, PROP_NAME);
++		}
++		catch (err) {
++			throw "Missing instance data for this datepicker";
++		}
++	},
++
++	/* Update or retrieve the settings for a date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 * @param  name	object - the new settings to update or
++	 *				string - the name of the setting to change or retrieve,
++	 *				when retrieving also "all" for all instance settings or
++	 *				"defaults" for all global defaults
++	 * @param  value   any - the new value for the setting
++	 *				(omit if above is an object or to retrieve a value)
++	 */
++	_optionDatepicker: function(target, name, value) {
++		var settings, date, minDate, maxDate,
++			inst = this._getInst(target);
++
++		if (arguments.length === 2 && typeof name === "string") {
++			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
++				(inst ? (name === "all" ? $.extend({}, inst.settings) :
++				this._get(inst, name)) : null));
++		}
++
++		settings = name || {};
++		if (typeof name === "string") {
++			settings = {};
++			settings[name] = value;
++		}
++
++		if (inst) {
++			if (this._curInst === inst) {
++				this._hideDatepicker();
++			}
++
++			date = this._getDateDatepicker(target, true);
++			minDate = this._getMinMaxDate(inst, "min");
++			maxDate = this._getMinMaxDate(inst, "max");
++			extendRemove(inst.settings, settings);
++			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
++			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
++				inst.settings.minDate = this._formatDate(inst, minDate);
++			}
++			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
++				inst.settings.maxDate = this._formatDate(inst, maxDate);
++			}
++			if ( "disabled" in settings ) {
++				if ( settings.disabled ) {
++					this._disableDatepicker(target);
++				} else {
++					this._enableDatepicker(target);
++				}
++			}
++			this._attachments($(target), inst);
++			this._autoSize(inst);
++			this._setDate(inst, date);
++			this._updateAlternate(inst);
++			this._updateDatepicker(inst);
++		}
++	},
++
++	// change method deprecated
++	_changeDatepicker: function(target, name, value) {
++		this._optionDatepicker(target, name, value);
++	},
++
++	/* Redraw the date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 */
++	_refreshDatepicker: function(target) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._updateDatepicker(inst);
++		}
++	},
++
++	/* Set the dates for a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  date	Date - the new date
++	 */
++	_setDateDatepicker: function(target, date) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._setDate(inst, date);
++			this._updateDatepicker(inst);
++			this._updateAlternate(inst);
++		}
++	},
++
++	/* Get the date(s) for the first entry in a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  noDefault boolean - true if no default date is to be used
++	 * @return Date - the current date
++	 */
++	_getDateDatepicker: function(target, noDefault) {
++		var inst = this._getInst(target);
++		if (inst && !inst.inline) {
++			this._setDateFromField(inst, noDefault);
++		}
++		return (inst ? this._getDate(inst) : null);
++	},
++
++	/* Handle keystrokes. */
++	_doKeyDown: function(event) {
++		var onSelect, dateStr, sel,
++			inst = $.datepicker._getInst(event.target),
++			handled = true,
++			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
++
++		inst._keyEvent = true;
++		if ($.datepicker._datepickerShowing) {
++			switch (event.keyCode) {
++				case 9: $.datepicker._hideDatepicker();
++						handled = false;
++						break; // hide on tab out
++				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
++									$.datepicker._currentClass + ")", inst.dpDiv);
++						if (sel[0]) {
++							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
++						}
++
++						onSelect = $.datepicker._get(inst, "onSelect");
++						if (onSelect) {
++							dateStr = $.datepicker._formatDate(inst);
++
++							// trigger custom callback
++							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++						} else {
++							$.datepicker._hideDatepicker();
++						}
++
++						return false; // don't submit the form
++				case 27: $.datepicker._hideDatepicker();
++						break; // hide on escape
++				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							-$.datepicker._get(inst, "stepBigMonths") :
++							-$.datepicker._get(inst, "stepMonths")), "M");
++						break; // previous month/year on page up/+ ctrl
++				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							+$.datepicker._get(inst, "stepBigMonths") :
++							+$.datepicker._get(inst, "stepMonths")), "M");
++						break; // next month/year on page down/+ ctrl
++				case 35: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._clearDate(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // clear on ctrl or command +end
++				case 36: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._gotoToday(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // current on ctrl or command +home
++				case 37: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// -1 day on ctrl or command +left
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								-$.datepicker._get(inst, "stepBigMonths") :
++								-$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +left on Mac
++						break;
++				case 38: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, -7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // -1 week on ctrl or command +up
++				case 39: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// +1 day on ctrl or command +right
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								+$.datepicker._get(inst, "stepBigMonths") :
++								+$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +right
++						break;
++				case 40: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, +7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // +1 week on ctrl or command +down
++				default: handled = false;
++			}
++		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
++			$.datepicker._showDatepicker(this);
++		} else {
++			handled = false;
++		}
++
++		if (handled) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++	},
++
++	/* Filter entered characters - based on date format. */
++	_doKeyPress: function(event) {
++		var chars, chr,
++			inst = $.datepicker._getInst(event.target);
++
++		if ($.datepicker._get(inst, "constrainInput")) {
++			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
++			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
++			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
++		}
++	},
++
++	/* Synchronise manual entry and field/alternate field. */
++	_doKeyUp: function(event) {
++		var date,
++			inst = $.datepicker._getInst(event.target);
++
++		if (inst.input.val() !== inst.lastVal) {
++			try {
++				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++					(inst.input ? inst.input.val() : null),
++					$.datepicker._getFormatConfig(inst));
++
++				if (date) { // only if valid
++					$.datepicker._setDateFromField(inst);
++					$.datepicker._updateAlternate(inst);
++					$.datepicker._updateDatepicker(inst);
++				}
++			}
++			catch (err) {
++			}
++		}
++		return true;
++	},
++
++	/* Pop-up the date picker for a given input field.
++	 * If false returned from beforeShow event handler do not show.
++	 * @param  input  element - the input field attached to the date picker or
++	 *					event - if triggered by focus
++	 */
++	_showDatepicker: function(input) {
++		input = input.target || input;
++		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
++			input = $("input", input.parentNode)[0];
++		}
++
++		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
++			return;
++		}
++
++		var inst, beforeShow, beforeShowSettings, isFixed,
++			offset, showAnim, duration;
++
++		inst = $.datepicker._getInst(input);
++		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
++			$.datepicker._curInst.dpDiv.stop(true, true);
++			if ( inst && $.datepicker._datepickerShowing ) {
++				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
++			}
++		}
++
++		beforeShow = $.datepicker._get(inst, "beforeShow");
++		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
++		if(beforeShowSettings === false){
++			return;
++		}
++		extendRemove(inst.settings, beforeShowSettings);
++
++		inst.lastVal = null;
++		$.datepicker._lastInput = input;
++		$.datepicker._setDateFromField(inst);
++
++		if ($.datepicker._inDialog) { // hide cursor
++			input.value = "";
++		}
++		if (!$.datepicker._pos) { // position below input
++			$.datepicker._pos = $.datepicker._findPos(input);
++			$.datepicker._pos[1] += input.offsetHeight; // add the height
++		}
++
++		isFixed = false;
++		$(input).parents().each(function() {
++			isFixed |= $(this).css("position") === "fixed";
++			return !isFixed;
++		});
++
++		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
++		$.datepicker._pos = null;
++		//to avoid flashes on Firefox
++		inst.dpDiv.empty();
++		// determine sizing offscreen
++		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
++		$.datepicker._updateDatepicker(inst);
++		// fix width for dynamic number of date pickers
++		// and adjust position before showing
++		offset = $.datepicker._checkOffset(inst, offset, isFixed);
++		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
++			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
++			left: offset.left + "px", top: offset.top + "px"});
++
++		if (!inst.inline) {
++			showAnim = $.datepicker._get(inst, "showAnim");
++			duration = $.datepicker._get(inst, "duration");
++			inst.dpDiv.zIndex($(input).zIndex()+1);
++			$.datepicker._datepickerShowing = true;
++
++			if ( $.effects && $.effects.effect[ showAnim ] ) {
++				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
++			} else {
++				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
++			}
++
++			if ( $.datepicker._shouldFocusInput( inst ) ) {
++				inst.input.focus();
++			}
++
++			$.datepicker._curInst = inst;
++		}
++	},
++
++	/* Generate the date picker content. */
++	_updateDatepicker: function(inst) {
++		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
++		instActive = inst; // for delegate hover events
++		inst.dpDiv.empty().append(this._generateHTML(inst));
++		this._attachHandlers(inst);
++		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
++
++		var origyearshtml,
++			numMonths = this._getNumberOfMonths(inst),
++			cols = numMonths[1],
++			width = 17;
++
++		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
++		if (cols > 1) {
++			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
++		}
++		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
++			"Class"]("ui-datepicker-multi");
++		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
++			"Class"]("ui-datepicker-rtl");
++
++		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
++			inst.input.focus();
++		}
++
++		// deffered render of the years select (to avoid flashes on Firefox)
++		if( inst.yearshtml ){
++			origyearshtml = inst.yearshtml;
++			setTimeout(function(){
++				//assure that inst.yearshtml didn't change.
++				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
++					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
++				}
++				origyearshtml = inst.yearshtml = null;
++			}, 0);
++		}
++	},
++
++	// #6694 - don't focus the input if it's already focused
++	// this breaks the change event in IE
++	// Support: IE and jQuery <1.9
++	_shouldFocusInput: function( inst ) {
++		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
++	},
++
++	/* Check positioning to remain on screen. */
++	_checkOffset: function(inst, offset, isFixed) {
++		var dpWidth = inst.dpDiv.outerWidth(),
++			dpHeight = inst.dpDiv.outerHeight(),
++			inputWidth = inst.input ? inst.input.outerWidth() : 0,
++			inputHeight = inst.input ? inst.input.outerHeight() : 0,
++			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
++			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
++
++		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
++		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
++		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
++
++		// now check if datepicker is showing outside window viewport - move to a better place if so.
++		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
++			Math.abs(offset.left + dpWidth - viewWidth) : 0);
++		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
++			Math.abs(dpHeight + inputHeight) : 0);
++
++		return offset;
++	},
++
++	/* Find an object's position on the screen. */
++	_findPos: function(obj) {
++		var position,
++			inst = this._getInst(obj),
++			isRTL = this._get(inst, "isRTL");
++
++		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
++			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
++		}
++
++		position = $(obj).offset();
++		return [position.left, position.top];
++	},
++
++	/* Hide the date picker from view.
++	 * @param  input  element - the input field attached to the date picker
++	 */
++	_hideDatepicker: function(input) {
++		var showAnim, duration, postProcess, onClose,
++			inst = this._curInst;
++
++		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
++			return;
++		}
++
++		if (this._datepickerShowing) {
++			showAnim = this._get(inst, "showAnim");
++			duration = this._get(inst, "duration");
++			postProcess = function() {
++				$.datepicker._tidyDialog(inst);
++			};
++
++			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
++			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
++				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
++			} else {
++				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
++					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
++			}
++
++			if (!showAnim) {
++				postProcess();
++			}
++			this._datepickerShowing = false;
++
++			onClose = this._get(inst, "onClose");
++			if (onClose) {
++				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
++			}
++
++			this._lastInput = null;
++			if (this._inDialog) {
++				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
++				if ($.blockUI) {
++					$.unblockUI();
++					$("body").append(this.dpDiv);
++				}
++			}
++			this._inDialog = false;
++		}
++	},
++
++	/* Tidy up after a dialog display. */
++	_tidyDialog: function(inst) {
++		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
++	},
++
++	/* Close date picker if clicked elsewhere. */
++	_checkExternalClick: function(event) {
++		if (!$.datepicker._curInst) {
++			return;
++		}
++
++		var $target = $(event.target),
++			inst = $.datepicker._getInst($target[0]);
++
++		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
++				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
++				!$target.hasClass($.datepicker.markerClassName) &&
++				!$target.closest("." + $.datepicker._triggerClass).length &&
++				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
++			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
++				$.datepicker._hideDatepicker();
++		}
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustDate: function(id, offset, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		this._adjustInstDate(inst, offset +
++			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
++			period);
++		this._updateDatepicker(inst);
++	},
++
++	/* Action for current link. */
++	_gotoToday: function(id) {
++		var date,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
++			inst.selectedDay = inst.currentDay;
++			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
++			inst.drawYear = inst.selectedYear = inst.currentYear;
++		} else {
++			date = new Date();
++			inst.selectedDay = date.getDate();
++			inst.drawMonth = inst.selectedMonth = date.getMonth();
++			inst.drawYear = inst.selectedYear = date.getFullYear();
++		}
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a new month/year. */
++	_selectMonthYear: function(id, select, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		inst["selected" + (period === "M" ? "Month" : "Year")] =
++		inst["draw" + (period === "M" ? "Month" : "Year")] =
++			parseInt(select.options[select.selectedIndex].value,10);
++
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a day. */
++	_selectDay: function(id, month, year, td) {
++		var inst,
++			target = $(id);
++
++		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++
++		inst = this._getInst(target[0]);
++		inst.selectedDay = inst.currentDay = $("a", td).html();
++		inst.selectedMonth = inst.currentMonth = month;
++		inst.selectedYear = inst.currentYear = year;
++		this._selectDate(id, this._formatDate(inst,
++			inst.currentDay, inst.currentMonth, inst.currentYear));
++	},
++
++	/* Erase the input field and hide the date picker. */
++	_clearDate: function(id) {
++		var target = $(id);
++		this._selectDate(target, "");
++	},
++
++	/* Update the input field with the selected date. */
++	_selectDate: function(id, dateStr) {
++		var onSelect,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
++		if (inst.input) {
++			inst.input.val(dateStr);
++		}
++		this._updateAlternate(inst);
++
++		onSelect = this._get(inst, "onSelect");
++		if (onSelect) {
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
++		} else if (inst.input) {
++			inst.input.trigger("change"); // fire the change event
++		}
++
++		if (inst.inline){
++			this._updateDatepicker(inst);
++		} else {
++			this._hideDatepicker();
++			this._lastInput = inst.input[0];
++			if (typeof(inst.input[0]) !== "object") {
++				inst.input.focus(); // restore focus
++			}
++			this._lastInput = null;
++		}
++	},
++
++	/* Update any alternate field to synchronise with the main field. */
++	_updateAlternate: function(inst) {
++		var altFormat, date, dateStr,
++			altField = this._get(inst, "altField");
++
++		if (altField) { // update alternate field too
++			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
++			date = this._getDate(inst);
++			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
++			$(altField).each(function() { $(this).val(dateStr); });
++		}
++	},
++
++	/* Set as beforeShowDay function to prevent selection of weekends.
++	 * @param  date  Date - the date to customise
++	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
++	 */
++	noWeekends: function(date) {
++		var day = date.getDay();
++		return [(day > 0 && day < 6), ""];
++	},
++
++	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++	 * @param  date  Date - the date to get the week for
++	 * @return  number - the number of the week within the year that contains this date
++	 */
++	iso8601Week: function(date) {
++		var time,
++			checkDate = new Date(date.getTime());
++
++		// Find Thursday of this week starting on Monday
++		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++
++		time = checkDate.getTime();
++		checkDate.setMonth(0); // Compare with Jan 1
++		checkDate.setDate(1);
++		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++	},
++
++	/* Parse a string value into a date object.
++	 * See formatDate below for the possible formats.
++	 *
++	 * @param  format string - the expected format of the date
++	 * @param  value string - the date in the above format
++	 * @param  settings Object - attributes include:
++	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  Date - the extracted date value or null if value is blank
++	 */
++	parseDate: function (format, value, settings) {
++		if (format == null || value == null) {
++			throw "Invalid arguments";
++		}
++
++		value = (typeof value === "object" ? value.toString() : value + "");
++		if (value === "") {
++			return null;
++		}
++
++		var iFormat, dim, extra,
++			iValue = 0,
++			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
++			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
++				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			year = -1,
++			month = -1,
++			day = -1,
++			doy = -1,
++			literal = false,
++			date,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Extract a number from the string value
++			getNumber = function(match) {
++				var isDoubled = lookAhead(match),
++					size = (match === "@" ? 14 : (match === "!" ? 20 :
++					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
++					digits = new RegExp("^\\d{1," + size + "}"),
++					num = value.substring(iValue).match(digits);
++				if (!num) {
++					throw "Missing number at position " + iValue;
++				}
++				iValue += num[0].length;
++				return parseInt(num[0], 10);
++			},
++			// Extract a name from the string value and convert to an index
++			getName = function(match, shortNames, longNames) {
++				var index = -1,
++					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
++						return [ [k, v] ];
++					}).sort(function (a, b) {
++						return -(a[1].length - b[1].length);
++					});
++
++				$.each(names, function (i, pair) {
++					var name = pair[1];
++					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
++						index = pair[0];
++						iValue += name.length;
++						return false;
++					}
++				});
++				if (index !== -1) {
++					return index + 1;
++				} else {
++					throw "Unknown name at position " + iValue;
++				}
++			},
++			// Confirm that a literal character matches the string value
++			checkLiteral = function() {
++				if (value.charAt(iValue) !== format.charAt(iFormat)) {
++					throw "Unexpected literal at position " + iValue;
++				}
++				iValue++;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					checkLiteral();
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d":
++						day = getNumber("d");
++						break;
++					case "D":
++						getName("D", dayNamesShort, dayNames);
++						break;
++					case "o":
++						doy = getNumber("o");
++						break;
++					case "m":
++						month = getNumber("m");
++						break;
++					case "M":
++						month = getName("M", monthNamesShort, monthNames);
++						break;
++					case "y":
++						year = getNumber("y");
++						break;
++					case "@":
++						date = new Date(getNumber("@"));
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "!":
++						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "'":
++						if (lookAhead("'")){
++							checkLiteral();
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						checkLiteral();
++				}
++			}
++		}
++
++		if (iValue < value.length){
++			extra = value.substr(iValue);
++			if (!/^\s+/.test(extra)) {
++				throw "Extra/unparsed characters found in date: " + extra;
++			}
++		}
++
++		if (year === -1) {
++			year = new Date().getFullYear();
++		} else if (year < 100) {
++			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
++				(year <= shortYearCutoff ? 0 : -100);
++		}
++
++		if (doy > -1) {
++			month = 1;
++			day = doy;
++			do {
++				dim = this._getDaysInMonth(year, month - 1);
++				if (day <= dim) {
++					break;
++				}
++				month++;
++				day -= dim;
++			} while (true);
++		}
++
++		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
++		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
++			throw "Invalid date"; // E.g. 31/02/00
++		}
++		return date;
++	},
++
++	/* Standard date formats. */
++	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
++	COOKIE: "D, dd M yy",
++	ISO_8601: "yy-mm-dd",
++	RFC_822: "D, d M y",
++	RFC_850: "DD, dd-M-y",
++	RFC_1036: "D, d M y",
++	RFC_1123: "D, d M yy",
++	RFC_2822: "D, d M yy",
++	RSS: "D, d M y", // RFC 822
++	TICKS: "!",
++	TIMESTAMP: "@",
++	W3C: "yy-mm-dd", // ISO 8601
++
++	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
++		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
++
++	/* Format a date object into a string value.
++	 * The format can be combinations of the following:
++	 * d  - day of month (no leading zero)
++	 * dd - day of month (two digit)
++	 * o  - day of year (no leading zeros)
++	 * oo - day of year (three digit)
++	 * D  - day name short
++	 * DD - day name long
++	 * m  - month of year (no leading zero)
++	 * mm - month of year (two digit)
++	 * M  - month name short
++	 * MM - month name long
++	 * y  - year (two digit)
++	 * yy - year (four digit)
++	 * @ - Unix timestamp (ms since 01/01/1970)
++	 * ! - Windows ticks (100ns since 01/01/0001)
++	 * "..." - literal text
++	 * '' - single quote
++	 *
++	 * @param  format string - the desired format of the date
++	 * @param  date Date - the date value to format
++	 * @param  settings Object - attributes include:
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  string - the date in the above format
++	 */
++	formatDate: function (format, date, settings) {
++		if (!date) {
++			return "";
++		}
++
++		var iFormat,
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Format a number, with leading zero if necessary
++			formatNumber = function(match, value, len) {
++				var num = "" + value;
++				if (lookAhead(match)) {
++					while (num.length < len) {
++						num = "0" + num;
++					}
++				}
++				return num;
++			},
++			// Format a name, short or long as requested
++			formatName = function(match, value, shortNames, longNames) {
++				return (lookAhead(match) ? longNames[value] : shortNames[value]);
++			},
++			output = "",
++			literal = false;
++
++		if (date) {
++			for (iFormat = 0; iFormat < format.length; iFormat++) {
++				if (literal) {
++					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++						literal = false;
++					} else {
++						output += format.charAt(iFormat);
++					}
++				} else {
++					switch (format.charAt(iFormat)) {
++						case "d":
++							output += formatNumber("d", date.getDate(), 2);
++							break;
++						case "D":
++							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
++							break;
++						case "o":
++							output += formatNumber("o",
++								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
++							break;
++						case "m":
++							output += formatNumber("m", date.getMonth() + 1, 2);
++							break;
++						case "M":
++							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
++							break;
++						case "y":
++							output += (lookAhead("y") ? date.getFullYear() :
++								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
++							break;
++						case "@":
++							output += date.getTime();
++							break;
++						case "!":
++							output += date.getTime() * 10000 + this._ticksTo1970;
++							break;
++						case "'":
++							if (lookAhead("'")) {
++								output += "'";
++							} else {
++								literal = true;
++							}
++							break;
++						default:
++							output += format.charAt(iFormat);
++					}
++				}
++			}
++		}
++		return output;
++	},
++
++	/* Extract all possible characters from the date format. */
++	_possibleChars: function (format) {
++		var iFormat,
++			chars = "",
++			literal = false,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					chars += format.charAt(iFormat);
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d": case "m": case "y": case "@":
++						chars += "0123456789";
++						break;
++					case "D": case "M":
++						return null; // Accept anything
++					case "'":
++						if (lookAhead("'")) {
++							chars += "'";
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						chars += format.charAt(iFormat);
++				}
++			}
++		}
++		return chars;
++	},
++
++	/* Get a setting value, defaulting if necessary. */
++	_get: function(inst, name) {
++		return inst.settings[name] !== undefined ?
++			inst.settings[name] : this._defaults[name];
++	},
++
++	/* Parse existing date and initialise date picker. */
++	_setDateFromField: function(inst, noDefault) {
++		if (inst.input.val() === inst.lastVal) {
++			return;
++		}
++
++		var dateFormat = this._get(inst, "dateFormat"),
++			dates = inst.lastVal = inst.input ? inst.input.val() : null,
++			defaultDate = this._getDefaultDate(inst),
++			date = defaultDate,
++			settings = this._getFormatConfig(inst);
++
++		try {
++			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
++		} catch (event) {
++			dates = (noDefault ? "" : dates);
++		}
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		inst.currentDay = (dates ? date.getDate() : 0);
++		inst.currentMonth = (dates ? date.getMonth() : 0);
++		inst.currentYear = (dates ? date.getFullYear() : 0);
++		this._adjustInstDate(inst);
++	},
++
++	/* Retrieve the default date shown on opening. */
++	_getDefaultDate: function(inst) {
++		return this._restrictMinMax(inst,
++			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
++	},
++
++	/* A date may be specified as an exact value or a relative one. */
++	_determineDate: function(inst, date, defaultDate) {
++		var offsetNumeric = function(offset) {
++				var date = new Date();
++				date.setDate(date.getDate() + offset);
++				return date;
++			},
++			offsetString = function(offset) {
++				try {
++					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++						offset, $.datepicker._getFormatConfig(inst));
++				}
++				catch (e) {
++					// Ignore
++				}
++
++				var date = (offset.toLowerCase().match(/^c/) ?
++					$.datepicker._getDate(inst) : null) || new Date(),
++					year = date.getFullYear(),
++					month = date.getMonth(),
++					day = date.getDate(),
++					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
++					matches = pattern.exec(offset);
++
++				while (matches) {
++					switch (matches[2] || "d") {
++						case "d" : case "D" :
++							day += parseInt(matches[1],10); break;
++						case "w" : case "W" :
++							day += parseInt(matches[1],10) * 7; break;
++						case "m" : case "M" :
++							month += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++						case "y": case "Y" :
++							year += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++					}
++					matches = pattern.exec(offset);
++				}
++				return new Date(year, month, day);
++			},
++			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
++				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
++
++		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
++		if (newDate) {
++			newDate.setHours(0);
++			newDate.setMinutes(0);
++			newDate.setSeconds(0);
++			newDate.setMilliseconds(0);
++		}
++		return this._daylightSavingAdjust(newDate);
++	},
++
++	/* Handle switch to/from daylight saving.
++	 * Hours may be non-zero on daylight saving cut-over:
++	 * > 12 when midnight changeover, but then cannot generate
++	 * midnight datetime, so jump to 1AM, otherwise reset.
++	 * @param  date  (Date) the date to check
++	 * @return  (Date) the corrected date
++	 */
++	_daylightSavingAdjust: function(date) {
++		if (!date) {
++			return null;
++		}
++		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
++		return date;
++	},
++
++	/* Set the date(s) directly. */
++	_setDate: function(inst, date, noChange) {
++		var clear = !date,
++			origMonth = inst.selectedMonth,
++			origYear = inst.selectedYear,
++			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
++
++		inst.selectedDay = inst.currentDay = newDate.getDate();
++		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
++		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
++		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
++			this._notifyChange(inst);
++		}
++		this._adjustInstDate(inst);
++		if (inst.input) {
++			inst.input.val(clear ? "" : this._formatDate(inst));
++		}
++	},
++
++	/* Retrieve the date(s) directly. */
++	_getDate: function(inst) {
++		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
++			this._daylightSavingAdjust(new Date(
++			inst.currentYear, inst.currentMonth, inst.currentDay)));
++			return startDate;
++	},
++
++	/* Attach the onxxx handlers.  These are declared statically so
++	 * they work with static code transformers like Caja.
++	 */
++	_attachHandlers: function(inst) {
++		var stepMonths = this._get(inst, "stepMonths"),
++			id = "#" + inst.id.replace( /\\\\/g, "\\" );
++		inst.dpDiv.find("[data-handler]").map(function () {
++			var handler = {
++				prev: function () {
++					$.datepicker._adjustDate(id, -stepMonths, "M");
++				},
++				next: function () {
++					$.datepicker._adjustDate(id, +stepMonths, "M");
++				},
++				hide: function () {
++					$.datepicker._hideDatepicker();
++				},
++				today: function () {
++					$.datepicker._gotoToday(id);
++				},
++				selectDay: function () {
++					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
++					return false;
++				},
++				selectMonth: function () {
++					$.datepicker._selectMonthYear(id, this, "M");
++					return false;
++				},
++				selectYear: function () {
++					$.datepicker._selectMonthYear(id, this, "Y");
++					return false;
++				}
++			};
++			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
++		});
++	},
++
++	/* Generate the HTML for the current state of the date picker. */
++	_generateHTML: function(inst) {
++		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
++			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
++			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
++			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
++			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
++			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
++			tempDate = new Date(),
++			today = this._daylightSavingAdjust(
++				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
++			isRTL = this._get(inst, "isRTL"),
++			showButtonPanel = this._get(inst, "showButtonPanel"),
++			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
++			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
++			numMonths = this._getNumberOfMonths(inst),
++			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
++			stepMonths = this._get(inst, "stepMonths"),
++			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
++			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
++				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			drawMonth = inst.drawMonth - showCurrentAtPos,
++			drawYear = inst.drawYear;
++
++		if (drawMonth < 0) {
++			drawMonth += 12;
++			drawYear--;
++		}
++		if (maxDate) {
++			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
++				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
++			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
++			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
++				drawMonth--;
++				if (drawMonth < 0) {
++					drawMonth = 11;
++					drawYear--;
++				}
++			}
++		}
++		inst.drawMonth = drawMonth;
++		inst.drawYear = drawYear;
++
++		prevText = this._get(inst, "prevText");
++		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
++			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
++
++		nextText = this._get(inst, "nextText");
++		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
++			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
++
++		currentText = this._get(inst, "currentText");
++		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
++		currentText = (!navigationAsDateFormat ? currentText :
++			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
++
++		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
++			this._get(inst, "closeText") + "</button>" : "");
++
++		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
++			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
++			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
++
++		firstDay = parseInt(this._get(inst, "firstDay"),10);
++		firstDay = (isNaN(firstDay) ? 0 : firstDay);
++
++		showWeek = this._get(inst, "showWeek");
++		dayNames = this._get(inst, "dayNames");
++		dayNamesMin = this._get(inst, "dayNamesMin");
++		monthNames = this._get(inst, "monthNames");
++		monthNamesShort = this._get(inst, "monthNamesShort");
++		beforeShowDay = this._get(inst, "beforeShowDay");
++		showOtherMonths = this._get(inst, "showOtherMonths");
++		selectOtherMonths = this._get(inst, "selectOtherMonths");
++		defaultDate = this._getDefaultDate(inst);
++		html = "";
++		dow;
++		for (row = 0; row < numMonths[0]; row++) {
++			group = "";
++			this.maxRows = 4;
++			for (col = 0; col < numMonths[1]; col++) {
++				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
++				cornerClass = " ui-corner-all";
++				calender = "";
++				if (isMultiMonth) {
++					calender += "<div class='ui-datepicker-group";
++					if (numMonths[1] > 1) {
++						switch (col) {
++							case 0: calender += " ui-datepicker-group-first";
++								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
++							case numMonths[1]-1: calender += " ui-datepicker-group-last";
++								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
++							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
++						}
++					}
++					calender += "'>";
++				}
++				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
++					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
++					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
++					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
++					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
++					"</div><table class='ui-datepicker-calendar'><thead>" +
++					"<tr>";
++				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
++				for (dow = 0; dow < 7; dow++) { // days of the week
++					day = (dow + firstDay) % 7;
++					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
++						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
++				}
++				calender += thead + "</tr></thead><tbody>";
++				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
++				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
++					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
++				}
++				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
++				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
++				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
++				this.maxRows = numRows;
++				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
++				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
++					calender += "<tr>";
++					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
++						this._get(inst, "calculateWeek")(printDate) + "</td>");
++					for (dow = 0; dow < 7; dow++) { // create date picker days
++						daySettings = (beforeShowDay ?
++							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
++						otherMonth = (printDate.getMonth() !== drawMonth);
++						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
++							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
++						tbody += "<td class='" +
++							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
++							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
++							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
++							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
++							// or defaultDate is current printedDate and defaultDate is selectedDate
++							" " + this._dayOverClass : "") + // highlight selected day
++							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
++							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
++							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
++							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
++							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
++							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
++							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
++							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
++							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
++							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
++							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
++							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
++						printDate.setDate(printDate.getDate() + 1);
++						printDate = this._daylightSavingAdjust(printDate);
++					}
++					calender += tbody + "</tr>";
++				}
++				drawMonth++;
++				if (drawMonth > 11) {
++					drawMonth = 0;
++					drawYear++;
++				}
++				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
++							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
++				group += calender;
++			}
++			html += group;
++		}
++		html += buttonPanel;
++		inst._keyEvent = false;
++		return html;
++	},
++
++	/* Generate the month and year header. */
++	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
++			secondary, monthNames, monthNamesShort) {
++
++		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
++			changeMonth = this._get(inst, "changeMonth"),
++			changeYear = this._get(inst, "changeYear"),
++			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
++			html = "<div class='ui-datepicker-title'>",
++			monthHtml = "";
++
++		// month selection
++		if (secondary || !changeMonth) {
++			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
++		} else {
++			inMinYear = (minDate && minDate.getFullYear() === drawYear);
++			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
++			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
++			for ( month = 0; month < 12; month++) {
++				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
++					monthHtml += "<option value='" + month + "'" +
++						(month === drawMonth ? " selected='selected'" : "") +
++						">" + monthNamesShort[month] + "</option>";
++				}
++			}
++			monthHtml += "</select>";
++		}
++
++		if (!showMonthAfterYear) {
++			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
++		}
++
++		// year selection
++		if ( !inst.yearshtml ) {
++			inst.yearshtml = "";
++			if (secondary || !changeYear) {
++				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
++			} else {
++				// determine range of years to display
++				years = this._get(inst, "yearRange").split(":");
++				thisYear = new Date().getFullYear();
++				determineYear = function(value) {
++					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
++						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
++						parseInt(value, 10)));
++					return (isNaN(year) ? thisYear : year);
++				};
++				year = determineYear(years[0]);
++				endYear = Math.max(year, determineYear(years[1] || ""));
++				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
++				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
++				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
++				for (; year <= endYear; year++) {
++					inst.yearshtml += "<option value='" + year + "'" +
++						(year === drawYear ? " selected='selected'" : "") +
++						">" + year + "</option>";
++				}
++				inst.yearshtml += "</select>";
++
++				html += inst.yearshtml;
++				inst.yearshtml = null;
++			}
++		}
++
++		html += this._get(inst, "yearSuffix");
++		if (showMonthAfterYear) {
++			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
++		}
++		html += "</div>"; // Close datepicker_header
++		return html;
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustInstDate: function(inst, offset, period) {
++		var year = inst.drawYear + (period === "Y" ? offset : 0),
++			month = inst.drawMonth + (period === "M" ? offset : 0),
++			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
++			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
++
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		if (period === "M" || period === "Y") {
++			this._notifyChange(inst);
++		}
++	},
++
++	/* Ensure a date is within any min/max bounds. */
++	_restrictMinMax: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			newDate = (minDate && date < minDate ? minDate : date);
++		return (maxDate && newDate > maxDate ? maxDate : newDate);
++	},
++
++	/* Notify change of month/year. */
++	_notifyChange: function(inst) {
++		var onChange = this._get(inst, "onChangeMonthYear");
++		if (onChange) {
++			onChange.apply((inst.input ? inst.input[0] : null),
++				[inst.selectedYear, inst.selectedMonth + 1, inst]);
++		}
++	},
++
++	/* Determine the number of months to show. */
++	_getNumberOfMonths: function(inst) {
++		var numMonths = this._get(inst, "numberOfMonths");
++		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
++	},
++
++	/* Determine the current maximum date - ensure no time components are set. */
++	_getMinMaxDate: function(inst, minMax) {
++		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
++	},
++
++	/* Find the number of days in a given month. */
++	_getDaysInMonth: function(year, month) {
++		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
++	},
++
++	/* Find the day of the week of the first of a month. */
++	_getFirstDayOfMonth: function(year, month) {
++		return new Date(year, month, 1).getDay();
++	},
++
++	/* Determines if we should allow a "next/prev" month display change. */
++	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
++		var numMonths = this._getNumberOfMonths(inst),
++			date = this._daylightSavingAdjust(new Date(curYear,
++			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
++
++		if (offset < 0) {
++			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
++		}
++		return this._isInRange(inst, date);
++	},
++
++	/* Is the given date in the accepted range? */
++	_isInRange: function(inst, date) {
++		var yearSplit, currentYear,
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			minYear = null,
++			maxYear = null,
++			years = this._get(inst, "yearRange");
++			if (years){
++				yearSplit = years.split(":");
++				currentYear = new Date().getFullYear();
++				minYear = parseInt(yearSplit[0], 10);
++				maxYear = parseInt(yearSplit[1], 10);
++				if ( yearSplit[0].match(/[+\-].*/) ) {
++					minYear += currentYear;
++				}
++				if ( yearSplit[1].match(/[+\-].*/) ) {
++					maxYear += currentYear;
++				}
++			}
++
++		return ((!minDate || date.getTime() >= minDate.getTime()) &&
++			(!maxDate || date.getTime() <= maxDate.getTime()) &&
++			(!minYear || date.getFullYear() >= minYear) &&
++			(!maxYear || date.getFullYear() <= maxYear));
++	},
++
++	/* Provide the configuration settings for formatting/parsing. */
++	_getFormatConfig: function(inst) {
++		var shortYearCutoff = this._get(inst, "shortYearCutoff");
++		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
++			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		return {shortYearCutoff: shortYearCutoff,
++			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
++			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
++	},
++
++	/* Format the given date for display. */
++	_formatDate: function(inst, day, month, year) {
++		if (!day) {
++			inst.currentDay = inst.selectedDay;
++			inst.currentMonth = inst.selectedMonth;
++			inst.currentYear = inst.selectedYear;
++		}
++		var date = (day ? (typeof day === "object" ? day :
++			this._daylightSavingAdjust(new Date(year, month, day))) :
++			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
++	}
++});
++
++/*
++ * Bind hover events for datepicker elements.
++ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
++ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
++ */
++function bindHover(dpDiv) {
++	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
++	return dpDiv.delegate(selector, "mouseout", function() {
++			$(this).removeClass("ui-state-hover");
++			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++				$(this).removeClass("ui-datepicker-prev-hover");
++			}
++			if (this.className.indexOf("ui-datepicker-next") !== -1) {
++				$(this).removeClass("ui-datepicker-next-hover");
++			}
++		})
++		.delegate(selector, "mouseover", function(){
++			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
++				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
++				$(this).addClass("ui-state-hover");
++				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++					$(this).addClass("ui-datepicker-prev-hover");
++				}
++				if (this.className.indexOf("ui-datepicker-next") !== -1) {
++					$(this).addClass("ui-datepicker-next-hover");
++				}
++			}
++		});
++}
++
++/* jQuery extend now ignores nulls! */
++function extendRemove(target, props) {
++	$.extend(target, props);
++	for (var name in props) {
++		if (props[name] == null) {
++			target[name] = props[name];
++		}
++	}
++	return target;
++}
++
++/* Invoke the datepicker functionality.
++   @param  options  string - a command, optionally followed by additional parameters or
++					Object - settings for attaching new datepicker functionality
++   @return  jQuery object */
++$.fn.datepicker = function(options){
++
++	/* Verify an empty collection wasn't passed - Fixes #6976 */
++	if ( !this.length ) {
++		return this;
++	}
++
++	/* Initialise the date picker. */
++	if (!$.datepicker.initialized) {
++		$(document).mousedown($.datepicker._checkExternalClick);
++		$.datepicker.initialized = true;
++	}
++
++	/* Append datepicker main container to body if not exist. */
++	if ($("#"+$.datepicker._mainDivId).length === 0) {
++		$("body").append($.datepicker.dpDiv);
++	}
++
++	var otherArgs = Array.prototype.slice.call(arguments, 1);
++	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	return this.each(function() {
++		typeof options === "string" ?
++			$.datepicker["_" + options + "Datepicker"].
++				apply($.datepicker, [this].concat(otherArgs)) :
++			$.datepicker._attachDatepicker(this, options);
++	});
++};
++
++$.datepicker = new Datepicker(); // singleton instance
++$.datepicker.initialized = false;
++$.datepicker.uuid = new Date().getTime();
++$.datepicker.version = "1.10.3";
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-transfer.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-transfer.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-transfer.js	(revision 15487)
+@@ -0,0 +1,47 @@
++/*!
++ * jQuery UI Effects Transfer 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/transfer-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.transfer = function( o, done ) {
++	var elem = $( this ),
++		target = $( o.to ),
++		targetFixed = target.css( "position" ) === "fixed",
++		body = $("body"),
++		fixTop = targetFixed ? body.scrollTop() : 0,
++		fixLeft = targetFixed ? body.scrollLeft() : 0,
++		endPosition = target.offset(),
++		animation = {
++			top: endPosition.top - fixTop ,
++			left: endPosition.left - fixLeft ,
++			height: target.innerHeight(),
++			width: target.innerWidth()
++		},
++		startPosition = elem.offset(),
++		transfer = $( "<div class='ui-effects-transfer'></div>" )
++			.appendTo( document.body )
++			.addClass( o.className )
++			.css({
++				top: startPosition.top - fixTop ,
++				left: startPosition.left - fixLeft ,
++				height: elem.innerHeight(),
++				width: elem.innerWidth(),
++				position: targetFixed ? "fixed" : "absolute"
++			})
++			.animate( animation, o.duration, o.easing, function() {
++				transfer.remove();
++				done();
++			});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.mouse.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.mouse.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.mouse.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fade.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fade.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fade.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-explode.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-explode.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-explode.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.accordion.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.accordion.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.accordion.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.position.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.position.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.position.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery-ui.custom.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery-ui.custom.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery-ui.custom.min.js	(revision 15487)
+@@ -0,0 +1,7 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td>&#160;</td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);
++return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html("&#160;"),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.sortable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.sortable.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.sortable.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td>&#160;</td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.datepicker.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.datepicker.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.datepicker.min.js	(revision 15487)
+@@ -0,0 +1,5 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);
++return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-transfer.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-transfer.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-transfer.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-scale.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-scale.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-scale.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-clip.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-clip.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-clip.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-blind.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-blind.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-blind.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-shake.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-shake.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-shake.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lv.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lv.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lv.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.lv={closeText:"Aizvērt",prevText:"Iepr",nextText:"Nāka",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Nav",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lv)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ca.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ca.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ca.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ca)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-da.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-da.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-da.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.da={closeText:"Luk",prevText:"&#x3C;Forrige",nextText:"Næste&#x3E;",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.da)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional["pt-BR"]={closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Próximo&#x3E;",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["pt-BR"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.sr={closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sr)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tr.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tr.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tr.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.tr={closeText:"kapat",prevText:"&#x3C;geri",nextText:"ileri&#x3e",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tr)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fa.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fa.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fa.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.fa={closeText:"بستن",prevText:"&#x3C;قبلی",nextText:"بعدی&#x3E;",currentText:"امروز",monthNames:["فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دی","بهمن","اسفند"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fa)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-be.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-be.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-be.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.be={closeText:"Зачыніць",prevText:"&larr;Папяр.",nextText:"Наст.&rarr;",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.be)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sv.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sv.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sv.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.sv={closeText:"Stäng",prevText:"&#xAB;Förra",nextText:"Nästa&#xBB;",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sv)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-de.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-de.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-de.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.de={closeText:"Schließen",prevText:"&#x3C;Zurück",nextText:"Vor&#x3E;",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.de)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ja.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ja.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ja.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ja={closeText:"閉じる",prevText:"&#x3C;前",nextText:"次&#x3E;",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional.ja)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ka.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ka.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ka.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ka={closeText:"დახურვა",prevText:"&#x3c; წინა",nextText:"შემდეგი &#x3e;",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ka)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-he.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-he.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-he.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.he={closeText:"סגור",prevText:"&#x3C;הקודם",nextText:"הבא&#x3E;",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.he)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fi.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fi.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fi.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.fi={closeText:"Sulje",prevText:"&#xAB;Edellinen",nextText:"Seuraava&#xBB;",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fi)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hi.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hi.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hi.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hi)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ta.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ta.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ta.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ta)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-km.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-km.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-km.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.km={closeText:"ធ្វើ​រួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃ​នេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.km)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eu.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eu.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eu.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.eu={closeText:"Egina",prevText:"&#x3C;Aur",nextText:"Hur&#x3E;",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eu)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hu.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hu.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hu.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hu)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-rm.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-rm.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-rm.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.rm={closeText:"Serrar",prevText:"&#x3C;Suandant",nextText:"Precedent&#x3E;",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.rm)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-vi.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-vi.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-vi.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.vi={closeText:"Đóng",prevText:"&#x3C;Trước",nextText:"Tiếp&#x3E;",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.vi)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hy.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hy.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hy.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.hy={closeText:"Փակել",prevText:"&#x3C;Նախ.",nextText:"Հաջ.&#x3E;",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hy)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional["zh-HK"]={closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-HK"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sq.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sq.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sq.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.sq={closeText:"mbylle",prevText:"&#x3C;mbrapa",nextText:"Përpara&#x3E;",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sq)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ky.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ky.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ky.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ky={closeText:"Жабуу",prevText:"&#x3c;Мур",nextText:"Кий&#x3e;",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ky)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ru.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ru.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ru.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ru={closeText:"Закрыть",prevText:"&#x3C;Пред",nextText:"След&#x3E;",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ru)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-id.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-id.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-id.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.id={closeText:"Tutup",prevText:"&#x3C;mundur",nextText:"maju&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.id)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-el.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-el.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-el.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Τρέχων Μήνας",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.el)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-gl.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-gl.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-gl.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.gl={closeText:"Pechar",prevText:"&#x3C;Ant",nextText:"Seg&#x3E;",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.gl)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery-ui-i18n.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery-ui-i18n.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery-ui-i18n.min.js	(revision 15487)
+@@ -0,0 +1,6 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Includes: jquery.ui.datepicker-af.js, jquery.ui.datepicker-ar-DZ.js, jquery.ui.datepicker-ar.js, jquery.ui.datepicker-az.js, jquery.ui.datepicker-be.js, jquery.ui.datepicker-bg.js, jquery.ui.datepicker-bs.js, jquery.ui.datepicker-ca.js, jquery.ui.datepicker-cs.js, jquery.ui.datepicker-cy-GB.js, jquery.ui.datepicker-da.js, jquery.ui.datepicker-de.js, jquery.ui.datepicker-el.js, jquery.ui.datepicker-en-AU.js, jquery.ui.datepicker-en-GB.js, jquery.ui.datepicker-en-NZ.js, jquery.ui.datepicker-eo.js, jquery.ui.datepicker-es.js, jquery.ui.datepicker-et.js, jquery.ui.datepicker-eu.js, jquery.ui.datepicker-fa.js, jquery.ui.datepicker-fi.js, jquery.ui.datepicker-fo.js, jquery.ui.datepicker-fr-CA.js, jquery.ui.datepicker-fr-CH.js, jquery.ui.datepicker-fr.js, jquery.ui.datepicker-gl.js, jquery.ui.datepicker-he.js, jquery.ui.datepicker-hi.js, jquery.ui.datepicker-hr.js, jquery.ui.datepicker-hu.js, jquery.ui.datepicker-hy.js, jquery.ui.datepicker-id.js, jquery.ui.datepicker-is.js, jquery.ui.datepicker-it.js, jquery.ui.datepicker-ja.js, jquery.ui.datepicker-ka.js, jquery.ui.datepicker-kk.js, jquery.ui.datepicker-km.js, jquery.ui.datepicker-ko.js, jquery.ui.datepicker-ky.js, jquery.ui.datepicker-lb.js, jquery.ui.datepicker-lt.js, jquery.ui.datepicker-lv.js, jquery.ui.datepicker-mk.js, jquery.ui.datepicker-ml.js, jquery.ui.datepicker-ms.js, jquery.ui.datepicker-nb.js, jquery.ui.datepicker-nl-BE.js, jquery.ui.datepicker-nl.js, jquery.ui.datepicker-nn.js, jquery.ui.datepicker-no.js, jquery.ui.datepicker-pl.js, jquery.ui.datepicker-pt-BR.js, jquery.ui.datepicker-pt.js, jquery.ui.datepicker-rm.js, jquery.ui.datepicker-ro.js, jquery.ui.datepicker-ru.js, jquery.ui.datepicker-sk.js, jquery.ui.datepicker-sl.js, jquery.ui.datepicker-sq.js, jquery.ui.datepicker-sr-SR.js, jquery.ui.datepicker-sr.js, jquery.ui.datepicker-sv.js, jquery.ui.datepicker-ta.js, jquery.ui.datepicker-th.js, jquery.ui.datepicker-tj.js, jquery.ui.datepicker-tr.js, jquery.ui.datepicker-uk.js, jquery.ui.datepicker-vi.js, jquery.ui.datepicker-zh-CN.js, jquery.ui.datepicker-zh-HK.js, jquery.ui.datepicker-zh-TW.js
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.af)}),jQuery(function(e){e.datepicker.regional["ar-DZ"]={closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["ar-DZ"])}),jQuery(function(e){e.datepicker.regional.ar={closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ar)}),jQuery(function(e){e.datepicker.regional.az={closeText:"Bağla",prevText:"&#x3C;Geri",nextText:"İrəli&#x3E;",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.az)}),jQuery(function(e){e.datepicker.regional.be={closeText:"Зачыніць",prevText:"&larr;Папяр.",nextText:"Наст.&rarr;",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.be)}),jQuery(function(e){e.datepicker.regional.bg={closeText:"затвори",prevText:"&#x3C;назад",nextText:"напред&#x3E;",nextBigText:"&#x3E;&#x3E;",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.bg)}),jQuery(function(e){e.datepicker.regional.bs={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.bs)}),jQuery(function(e){e.datepicker.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ca)}),jQuery(function(e){e.datepicker.regional.cs={closeText:"Zavřít",prevText:"&#x3C;Dříve",nextText:"Později&#x3E;",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.cs)}),jQuery(function(e){e.datepicker.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["cy-GB"])}),jQuery(function(e){e.datepicker.regional.da={closeText:"Luk",prevText:"&#x3C;Forrige",nextText:"Næste&#x3E;",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.da)}),jQuery(function(e){e.datepicker.regional.de={closeText:"Schließen",prevText:"&#x3C;Zurück",nextText:"Vor&#x3E;",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.de)}),jQuery(function(e){e.datepicker.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Τρέχων Μήνας",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.el)}),jQuery(function(e){e.datepicker.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["en-AU"])}),jQuery(function(e){e.datepicker.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["en-GB"])}),jQuery(function(e){e.datepicker.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["en-NZ"])}),jQuery(function(e){e.datepicker.regional.eo={closeText:"Fermi",prevText:"&#x3C;Anta",nextText:"Sekv&#x3E;",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.eo)}),jQuery(function(e){e.datepicker.regional.es={closeText:"Cerrar",prevText:"&#x3C;Ant",nextText:"Sig&#x3E;",currentText:"Hoy",monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mié","Juv","Vie","Sáb"],dayNamesMin:["Do","Lu","Ma","Mi","Ju","Vi","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.es)}),jQuery(function(e){e.datepicker.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.et)}),jQuery(function(e){e.datepicker.regional.eu={closeText:"Egina",prevText:"&#x3C;Aur",nextText:"Hur&#x3E;",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.eu)}),jQuery(function(e){e.datepicker.regional.fa={closeText:"بستن",prevText:"&#x3C;قبلی",nextText:"بعدی&#x3E;",currentText:"امروز",monthNames:["فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دی","بهمن","اسفند"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.fa)}),jQuery(function(e){e.datepicker.regional.fi={closeText:"Sulje",prevText:"&#xAB;Edellinen",nextText:"Seuraava&#xBB;",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.fi)}),jQuery(function(e){e.datepicker.regional.fo={closeText:"Lat aftur",prevText:"&#x3C;Fyrra",nextText:"Næsta&#x3E;",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.fo)}),jQuery(function(e){e.datepicker.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["fr-CA"])}),jQuery(function(e){e.datepicker.regional["fr-CH"]={closeText:"Fermer",prevText:"&#x3C;Préc",nextText:"Suiv&#x3E;",currentText:"Courant",monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],dayNamesMin:["Di","Lu","Ma","Me","Je","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["fr-CH"])}),jQuery(function(e){e.datepicker.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Janv.","Févr.","Mars","Avril","Mai","Juin","Juil.","Août","Sept.","Oct.","Nov.","Déc."],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim.","Lun.","Mar.","Mer.","Jeu.","Ven.","Sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.fr)}),jQuery(function(e){e.datepicker.regional.gl={closeText:"Pechar",prevText:"&#x3C;Ant",nextText:"Seg&#x3E;",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.gl)}),jQuery(function(e){e.datepicker.regional.he={closeText:"סגור",prevText:"&#x3C;הקודם",nextText:"הבא&#x3E;",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.he)}),jQuery(function(e){e.datepicker.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hi)}),jQuery(function(e){e.datepicker.regional.hr={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hr)}),jQuery(function(e){e.datepicker.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hu)}),jQuery(function(e){e.datepicker.regional.hy={closeText:"Փակել",prevText:"&#x3C;Նախ.",nextText:"Հաջ.&#x3E;",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hy)}),jQuery(function(e){e.datepicker.regional.id={closeText:"Tutup",prevText:"&#x3C;mundur",nextText:"maju&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.id)}),jQuery(function(e){e.datepicker.regional.is={closeText:"Loka",prevText:"&#x3C; Fyrri",nextText:"Næsti &#x3E;",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.is)}),jQuery(function(e){e.datepicker.regional.it={closeText:"Chiudi",prevText:"&#x3C;Prec",nextText:"Succ&#x3E;",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.it)}),jQuery(function(e){e.datepicker.regional.ja={closeText:"閉じる",prevText:"&#x3C;前",nextText:"次&#x3E;",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional.ja)}),jQuery(function(e){e.datepicker.regional.ka={closeText:"დახურვა",prevText:"&#x3c; წინა",nextText:"შემდეგი &#x3e;",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ka)}),jQuery(function(e){e.datepicker.regional.kk={closeText:"Жабу",prevText:"&#x3C;Алдыңғы",nextText:"Келесі&#x3E;",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.kk)}),jQuery(function(e){e.datepicker.regional.km={closeText:"ធ្វើ​រួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃ​នេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.km)}),jQuery(function(e){e.datepicker.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},e.datepicker.setDefaults(e.datepicker.regional.ko)}),jQuery(function(e){e.datepicker.regional.ky={closeText:"Жабуу",prevText:"&#x3c;Мур",nextText:"Кий&#x3e;",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ky)}),jQuery(function(e){e.datepicker.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lb)}),jQuery(function(e){e.datepicker.regional.lt={closeText:"Uždaryti",prevText:"&#x3C;Atgal",nextText:"Pirmyn&#x3E;",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lt)}),jQuery(function(e){e.datepicker.regional.lv={closeText:"Aizvērt",prevText:"Iepr",nextText:"Nāka",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Nav",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lv)}),jQuery(function(e){e.datepicker.regional.mk={closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.mk)}),jQuery(function(e){e.datepicker.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്‍ച്ച്","ഏപ്രില്‍","മേയ്","ജൂണ്‍","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്‍","ഒക്ടോബര്‍","നവംബര്‍","ഡിസംബര്‍"],monthNamesShort:["ജനു","ഫെബ്","മാര്‍","ഏപ്രി","മേയ്","ജൂണ്‍","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്‍","തിങ്കള്‍","ചൊവ്വ","ബുധന്‍","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ml)}),jQuery(function(e){e.datepicker.regional.ms={closeText:"Tutup",prevText:"&#x3C;Sebelum",nextText:"Selepas&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ms)}),jQuery(function(e){e.datepicker.regional.nb={closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nb)
++}),jQuery(function(e){e.datepicker.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["nl-BE"])}),jQuery(function(e){e.datepicker.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nl)}),jQuery(function(e){e.datepicker.regional.nn={closeText:"Lukk",prevText:"&#xAB;Førre",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nn)}),jQuery(function(e){e.datepicker.regional.no={closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.no)}),jQuery(function(e){e.datepicker.regional.pl={closeText:"Zamknij",prevText:"&#x3C;Poprzedni",nextText:"Następny&#x3E;",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pl)}),jQuery(function(e){e.datepicker.regional["pt-BR"]={closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Próximo&#x3E;",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["pt-BR"])}),jQuery(function(e){e.datepicker.regional.pt={closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pt)}),jQuery(function(e){e.datepicker.regional.rm={closeText:"Serrar",prevText:"&#x3C;Suandant",nextText:"Precedent&#x3E;",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.rm)}),jQuery(function(e){e.datepicker.regional.ro={closeText:"Închide",prevText:"&#xAB; Luna precedentă",nextText:"Luna următoare &#xBB;",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ro)}),jQuery(function(e){e.datepicker.regional.ru={closeText:"Закрыть",prevText:"&#x3C;Пред",nextText:"След&#x3E;",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ru)}),jQuery(function(e){e.datepicker.regional.sk={closeText:"Zavrieť",prevText:"&#x3C;Predchádzajúci",nextText:"Nasledujúci&#x3E;",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sk)}),jQuery(function(e){e.datepicker.regional.sl={closeText:"Zapri",prevText:"&#x3C;Prejšnji",nextText:"Naslednji&#x3E;",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sl)}),jQuery(function(e){e.datepicker.regional.sq={closeText:"mbylle",prevText:"&#x3C;mbrapa",nextText:"Përpara&#x3E;",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sq)}),jQuery(function(e){e.datepicker.regional["sr-SR"]={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["sr-SR"])}),jQuery(function(e){e.datepicker.regional.sr={closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sr)}),jQuery(function(e){e.datepicker.regional.sv={closeText:"Stäng",prevText:"&#xAB;Förra",nextText:"Nästa&#xBB;",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sv)}),jQuery(function(e){e.datepicker.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ta)}),jQuery(function(e){e.datepicker.regional.th={closeText:"ปิด",prevText:"&#xAB;&#xA0;ย้อน",nextText:"ถัดไป&#xA0;&#xBB;",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.th)}),jQuery(function(e){e.datepicker.regional.tj={closeText:"Идома",prevText:"&#x3c;Қафо",nextText:"Пеш&#x3e;",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tj)}),jQuery(function(e){e.datepicker.regional.tr={closeText:"kapat",prevText:"&#x3C;geri",nextText:"ileri&#x3e",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tr)}),jQuery(function(e){e.datepicker.regional.uk={closeText:"Закрити",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.uk)}),jQuery(function(e){e.datepicker.regional.vi={closeText:"Đóng",prevText:"&#x3C;Trước",nextText:"Tiếp&#x3E;",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.vi)}),jQuery(function(e){e.datepicker.regional["zh-CN"]={closeText:"关闭",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-CN"])}),jQuery(function(e){e.datepicker.regional["zh-HK"]={closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-HK"])}),jQuery(function(e){e.datepicker.regional["zh-TW"]={closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-TW"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional["sr-SR"]={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["sr-SR"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-et.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-et.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-et.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.et)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ml.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ml.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ml.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്‍ച്ച്","ഏപ്രില്‍","മേയ്","ജൂണ്‍","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്‍","ഒക്ടോബര്‍","നവംബര്‍","ഡിസംബര്‍"],monthNamesShort:["ജനു","ഫെബ്","മാര്‍","ഏപ്രി","മേയ്","ജൂണ്‍","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്‍","തിങ്കള്‍","ചൊവ്വ","ബുധന്‍","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ml)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional["zh-TW"]={closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-TW"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nl)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-th.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-th.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-th.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.th={closeText:"ปิด",prevText:"&#xAB;&#xA0;ย้อน",nextText:"ถัดไป&#xA0;&#xBB;",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.th)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pl.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pl.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pl.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.pl={closeText:"Zamknij",prevText:"&#x3C;Poprzedni",nextText:"Następny&#x3E;",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pl)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-it.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-it.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-it.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.it={closeText:"Chiudi",prevText:"&#x3C;Prec",nextText:"Succ&#x3E;",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.it)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sl.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sl.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sl.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.sl={closeText:"Zapri",prevText:"&#x3C;Prejšnji",nextText:"Naslednji&#x3E;",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sl)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional["zh-CN"]={closeText:"关闭",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-CN"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lt.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lt.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lt.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.lt={closeText:"Uždaryti",prevText:"&#x3C;Atgal",nextText:"Pirmyn&#x3E;",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lt)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.pt={closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pt)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CA"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bg.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bg.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bg.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.bg={closeText:"затвори",prevText:"&#x3C;назад",nextText:"напред&#x3E;",nextBigText:"&#x3E;&#x3E;",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bg)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-GB"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["nl-BE"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["cy-GB"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eo.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eo.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eo.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.eo={closeText:"Fermi",prevText:"&#x3C;Anta",nextText:"Sekv&#x3E;",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eo)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fo.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fo.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fo.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.fo={closeText:"Lat aftur",prevText:"&#x3C;Fyrra",nextText:"Næsta&#x3E;",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fo)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bs.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bs.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bs.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.bs={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bs)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cs.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cs.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cs.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.cs={closeText:"Zavřít",prevText:"&#x3C;Dříve",nextText:"Později&#x3E;",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.cs)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-kk.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-kk.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-kk.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.kk={closeText:"Жабу",prevText:"&#x3C;Алдыңғы",nextText:"Келесі&#x3E;",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.kk)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-es.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-es.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-es.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.es={closeText:"Cerrar",prevText:"&#x3C;Ant",nextText:"Sig&#x3E;",currentText:"Hoy",monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mié","Juv","Vie","Sáb"],dayNamesMin:["Do","Lu","Ma","Mi","Ju","Vi","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.es)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-mk.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-mk.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-mk.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.mk={closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.mk)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ko.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ko.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ko.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},e.datepicker.setDefaults(e.datepicker.regional.ko)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-is.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-is.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-is.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.is={closeText:"Loka",prevText:"&#x3C; Fyrri",nextText:"Næsti &#x3E;",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.is)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-no.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-no.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-no.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.no={closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.no)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional["ar-DZ"]={closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["ar-DZ"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sk.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sk.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sk.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.sk={closeText:"Zavrieť",prevText:"&#x3C;Predchádzajúci",nextText:"Nasledujúci&#x3E;",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sk)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-uk.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-uk.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-uk.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.uk={closeText:"Закрити",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.uk)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ms.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ms.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ms.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ms={closeText:"Tutup",prevText:"&#x3C;Sebelum",nextText:"Selepas&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ms)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ro.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ro.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ro.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.ro={closeText:"Închide",prevText:"&#xAB; Luna precedentă",nextText:"Luna următoare &#xBB;",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ro)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-af.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-af.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-af.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.af)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-NZ"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lb.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lb.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lb.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lb)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nb.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nb.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nb.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.nb={closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nb)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional["fr-CH"]={closeText:"Fermer",prevText:"&#x3C;Préc",nextText:"Suiv&#x3E;",currentText:"Courant",monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],dayNamesMin:["Di","Lu","Ma","Me","Je","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CH"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.ar={closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ar)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-AU"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Janv.","Févr.","Mars","Avril","Mai","Juin","Juil.","Août","Sept.","Oct.","Nov.","Déc."],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim.","Lun.","Mar.","Mer.","Jeu.","Ven.","Sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fr)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hr.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hr.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hr.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.hr={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hr)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-az.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-az.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-az.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(t){t.datepicker.regional.az={closeText:"Bağla",prevText:"&#x3C;Geri",nextText:"İrəli&#x3E;",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.az)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nn.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nn.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nn.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.nn={closeText:"Lukk",prevText:"&#xAB;Førre",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nn)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tj.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tj.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tj.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++jQuery(function(e){e.datepicker.regional.tj={closeText:"Идома",prevText:"&#x3c;Қафо",nextText:"Пеш&#x3e;",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tj)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.core.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.core.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.core.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tabs.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tabs.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tabs.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.progressbar.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.progressbar.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.progressbar.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tooltip.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tooltip.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tooltip.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-slide.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-slide.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-slide.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-drop.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-drop.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-drop.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.dialog.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.dialog.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.dialog.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html("&#160;"),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.autocomplete.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.autocomplete.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.autocomplete.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-highlight.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-highlight.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-highlight.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.selectable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.selectable.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.selectable.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.menu.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.menu.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.menu.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-bounce.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-bounce.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-bounce.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-pulsate.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-pulsate.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-pulsate.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.droppable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.droppable.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.droppable.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.draggable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.draggable.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.draggable.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.button.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.button.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.button.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fold.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fold.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fold.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.spinner.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.spinner.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.spinner.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.resizable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.resizable.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.resizable.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.slider.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.slider.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.slider.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.widget.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.widget.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.widget.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-scale.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-scale.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-scale.js	(revision 15487)
+@@ -0,0 +1,318 @@
++/*!
++ * jQuery UI Effects Scale 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/scale-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.puff = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "hide" ),
++		hide = mode === "hide",
++		percent = parseInt( o.percent, 10 ) || 150,
++		factor = percent / 100,
++		original = {
++			height: elem.height(),
++			width: elem.width(),
++			outerHeight: elem.outerHeight(),
++			outerWidth: elem.outerWidth()
++		};
++
++	$.extend( o, {
++		effect: "scale",
++		queue: false,
++		fade: true,
++		mode: mode,
++		complete: done,
++		percent: hide ? percent : 100,
++		from: hide ?
++			original :
++			{
++				height: original.height * factor,
++				width: original.width * factor,
++				outerHeight: original.outerHeight * factor,
++				outerWidth: original.outerWidth * factor
++			}
++	});
++
++	elem.effect( o );
++};
++
++$.effects.effect.scale = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		options = $.extend( true, {}, o ),
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		percent = parseInt( o.percent, 10 ) ||
++			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
++		direction = o.direction || "both",
++		origin = o.origin,
++		original = {
++			height: el.height(),
++			width: el.width(),
++			outerHeight: el.outerHeight(),
++			outerWidth: el.outerWidth()
++		},
++		factor = {
++			y: direction !== "horizontal" ? (percent / 100) : 1,
++			x: direction !== "vertical" ? (percent / 100) : 1
++		};
++
++	// We are going to pass this effect to the size effect:
++	options.effect = "size";
++	options.queue = false;
++	options.complete = done;
++
++	// Set default origin and restore for show/hide
++	if ( mode !== "effect" ) {
++		options.origin = origin || ["middle","center"];
++		options.restore = true;
++	}
++
++	options.from = o.from || ( mode === "show" ? {
++		height: 0,
++		width: 0,
++		outerHeight: 0,
++		outerWidth: 0
++	} : original );
++	options.to = {
++		height: original.height * factor.y,
++		width: original.width * factor.x,
++		outerHeight: original.outerHeight * factor.y,
++		outerWidth: original.outerWidth * factor.x
++	};
++
++	// Fade option to support puff
++	if ( options.fade ) {
++		if ( mode === "show" ) {
++			options.from.opacity = 0;
++			options.to.opacity = 1;
++		}
++		if ( mode === "hide" ) {
++			options.from.opacity = 1;
++			options.to.opacity = 0;
++		}
++	}
++
++	// Animate
++	el.effect( options );
++
++};
++
++$.effects.effect.size = function( o, done ) {
++
++	// Create element
++	var original, baseline, factor,
++		el = $( this ),
++		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
++
++		// Always restore
++		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
++
++		// Copy for children
++		props2 = [ "width", "height", "overflow" ],
++		cProps = [ "fontSize" ],
++		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
++		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
++
++		// Set options
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		restore = o.restore || mode !== "effect",
++		scale = o.scale || "both",
++		origin = o.origin || [ "middle", "center" ],
++		position = el.css( "position" ),
++		props = restore ? props0 : props1,
++		zero = {
++			height: 0,
++			width: 0,
++			outerHeight: 0,
++			outerWidth: 0
++		};
++
++	if ( mode === "show" ) {
++		el.show();
++	}
++	original = {
++		height: el.height(),
++		width: el.width(),
++		outerHeight: el.outerHeight(),
++		outerWidth: el.outerWidth()
++	};
++
++	if ( o.mode === "toggle" && mode === "show" ) {
++		el.from = o.to || zero;
++		el.to = o.from || original;
++	} else {
++		el.from = o.from || ( mode === "show" ? zero : original );
++		el.to = o.to || ( mode === "hide" ? zero : original );
++	}
++
++	// Set scaling factor
++	factor = {
++		from: {
++			y: el.from.height / original.height,
++			x: el.from.width / original.width
++		},
++		to: {
++			y: el.to.height / original.height,
++			x: el.to.width / original.width
++		}
++	};
++
++	// Scale the css box
++	if ( scale === "box" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( vProps );
++			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
++		}
++
++		// Horizontal props scaling
++		if ( factor.from.x !== factor.to.x ) {
++			props = props.concat( hProps );
++			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
++			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
++		}
++	}
++
++	// Scale the content
++	if ( scale === "content" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( cProps ).concat( props2 );
++			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
++		}
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++	el.css( "overflow", "hidden" ).css( el.from );
++
++	// Adjust
++	if (origin) { // Calculate baseline shifts
++		baseline = $.effects.getBaseline( origin, original );
++		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
++		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
++		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
++		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
++	}
++	el.css( el.from ); // set top & left
++
++	// Animate
++	if ( scale === "content" || scale === "both" ) { // Scale the children
++
++		// Add margins/font-size
++		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
++		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
++		props2 = props0.concat(vProps).concat(hProps);
++
++		el.find( "*[width]" ).each( function(){
++			var child = $( this ),
++				c_original = {
++					height: child.height(),
++					width: child.width(),
++					outerHeight: child.outerHeight(),
++					outerWidth: child.outerWidth()
++				};
++			if (restore) {
++				$.effects.save(child, props2);
++			}
++
++			child.from = {
++				height: c_original.height * factor.from.y,
++				width: c_original.width * factor.from.x,
++				outerHeight: c_original.outerHeight * factor.from.y,
++				outerWidth: c_original.outerWidth * factor.from.x
++			};
++			child.to = {
++				height: c_original.height * factor.to.y,
++				width: c_original.width * factor.to.x,
++				outerHeight: c_original.height * factor.to.y,
++				outerWidth: c_original.width * factor.to.x
++			};
++
++			// Vertical props scaling
++			if ( factor.from.y !== factor.to.y ) {
++				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
++				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
++			}
++
++			// Horizontal props scaling
++			if ( factor.from.x !== factor.to.x ) {
++				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
++				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
++			}
++
++			// Animate children
++			child.css( child.from );
++			child.animate( child.to, o.duration, o.easing, function() {
++
++				// Restore children
++				if ( restore ) {
++					$.effects.restore( child, props2 );
++				}
++			});
++		});
++	}
++
++	// Animate
++	el.animate( el.to, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( el.to.opacity === 0 ) {
++				el.css( "opacity", el.from.opacity );
++			}
++			if( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			if ( !restore ) {
++
++				// we need to calculate our new positioning based on the scaling
++				if ( position === "static" ) {
++					el.css({
++						position: "relative",
++						top: el.to.top,
++						left: el.to.left
++					});
++				} else {
++					$.each([ "top", "left" ], function( idx, pos ) {
++						el.css( pos, function( _, str ) {
++							var val = parseInt( str, 10 ),
++								toRef = idx ? el.to.left : el.to.top;
++
++							// if original was "auto", recalculate the new value from wrapper
++							if ( str === "auto" ) {
++								return toRef + "px";
++							}
++
++							return val + toRef + "px";
++						});
++					});
++				}
++			}
++
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-clip.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-clip.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-clip.js	(revision 15487)
+@@ -0,0 +1,67 @@
++/*!
++ * jQuery UI Effects Clip 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/clip-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.clip = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "vertical",
++		vert = direction === "vertical",
++		size = vert ? "height" : "width",
++		position = vert ? "top" : "left",
++		animation = {},
++		wrapper, animate, distance;
++
++	// Save & Show
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
++	distance = animate[ size ]();
++
++	// Shift
++	if ( show ) {
++		animate.css( size, 0 );
++		animate.css( position, distance / 2 );
++	}
++
++	// Create Animation Object:
++	animation[ size ] = show ? distance : 0;
++	animation[ position ] = show ? 0 : distance / 2;
++
++	// Animate
++	animate.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( !show ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-blind.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-blind.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-blind.js	(revision 15487)
+@@ -0,0 +1,82 @@
++/*!
++ * jQuery UI Effects Blind 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/blind-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++var rvertical = /up|down|vertical/,
++	rpositivemotion = /up|left|vertical|horizontal/;
++
++$.effects.effect.blind = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		direction = o.direction || "up",
++		vertical = rvertical.test( direction ),
++		ref = vertical ? "height" : "width",
++		ref2 = vertical ? "top" : "left",
++		motion = rpositivemotion.test( direction ),
++		animation = {},
++		show = mode === "show",
++		wrapper, distance, margin;
++
++	// if already wrapped, the wrapper's properties are my property. #6245
++	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
++		$.effects.save( el.parent(), props );
++	} else {
++		$.effects.save( el, props );
++	}
++	el.show();
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	distance = wrapper[ ref ]();
++	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
++
++	animation[ ref ] = show ? distance : 0;
++	if ( !motion ) {
++		el
++			.css( vertical ? "bottom" : "right", 0 )
++			.css( vertical ? "top" : "left", "auto" )
++			.css({ position: "absolute" });
++
++		animation[ ref2 ] = show ? margin : distance + margin;
++	}
++
++	// start at 0 if we are showing
++	if ( show ) {
++		wrapper.css( ref, 0 );
++		if ( ! motion ) {
++			wrapper.css( ref2, margin + distance );
++		}
++	}
++
++	// Animate
++	wrapper.animate( animation, {
++		duration: o.duration,
++		easing: o.easing,
++		queue: false,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-shake.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-shake.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-shake.js	(revision 15487)
+@@ -0,0 +1,74 @@
++/*!
++ * jQuery UI Effects Shake 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/shake-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.shake = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		direction = o.direction || "left",
++		distance = o.distance || 20,
++		times = o.times || 3,
++		anims = times * 2 + 1,
++		speed = Math.round(o.duration/anims),
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		animation = {},
++		animation1 = {},
++		animation2 = {},
++		i,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	// Animation
++	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
++	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
++	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
++
++	// Animate
++	el.animate( animation, speed, o.easing );
++
++	// Shakes
++	for ( i = 1; i < times; i++ ) {
++		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
++	}
++	el
++		.animate( animation1, speed, o.easing )
++		.animate( animation, speed / 2, o.easing )
++		.queue(function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.core.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.core.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.core.js	(revision 15487)
+@@ -0,0 +1,320 @@
++/*!
++ * jQuery UI Core 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/category/ui-core/
++ */
++(function( $, undefined ) {
++
++var uuid = 0,
++	runiqueId = /^ui-id-\d+$/;
++
++// $.ui might exist from components with no dependencies, e.g., $.ui.position
++$.ui = $.ui || {};
++
++$.extend( $.ui, {
++	version: "1.10.3",
++
++	keyCode: {
++		BACKSPACE: 8,
++		COMMA: 188,
++		DELETE: 46,
++		DOWN: 40,
++		END: 35,
++		ENTER: 13,
++		ESCAPE: 27,
++		HOME: 36,
++		LEFT: 37,
++		NUMPAD_ADD: 107,
++		NUMPAD_DECIMAL: 110,
++		NUMPAD_DIVIDE: 111,
++		NUMPAD_ENTER: 108,
++		NUMPAD_MULTIPLY: 106,
++		NUMPAD_SUBTRACT: 109,
++		PAGE_DOWN: 34,
++		PAGE_UP: 33,
++		PERIOD: 190,
++		RIGHT: 39,
++		SPACE: 32,
++		TAB: 9,
++		UP: 38
++	}
++});
++
++// plugins
++$.fn.extend({
++	focus: (function( orig ) {
++		return function( delay, fn ) {
++			return typeof delay === "number" ?
++				this.each(function() {
++					var elem = this;
++					setTimeout(function() {
++						$( elem ).focus();
++						if ( fn ) {
++							fn.call( elem );
++						}
++					}, delay );
++				}) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.focus ),
++
++	scrollParent: function() {
++		var scrollParent;
++		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
++			scrollParent = this.parents().filter(function() {
++				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		} else {
++			scrollParent = this.parents().filter(function() {
++				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		}
++
++		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
++	},
++
++	zIndex: function( zIndex ) {
++		if ( zIndex !== undefined ) {
++			return this.css( "zIndex", zIndex );
++		}
++
++		if ( this.length ) {
++			var elem = $( this[ 0 ] ), position, value;
++			while ( elem.length && elem[ 0 ] !== document ) {
++				// Ignore z-index if position is set to a value where z-index is ignored by the browser
++				// This makes behavior of this function consistent across browsers
++				// WebKit always returns auto if the element is positioned
++				position = elem.css( "position" );
++				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
++					// IE returns 0 when zIndex is not specified
++					// other browsers return a string
++					// we ignore the case of nested elements with an explicit value of 0
++					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
++					value = parseInt( elem.css( "zIndex" ), 10 );
++					if ( !isNaN( value ) && value !== 0 ) {
++						return value;
++					}
++				}
++				elem = elem.parent();
++			}
++		}
++
++		return 0;
++	},
++
++	uniqueId: function() {
++		return this.each(function() {
++			if ( !this.id ) {
++				this.id = "ui-id-" + (++uuid);
++			}
++		});
++	},
++
++	removeUniqueId: function() {
++		return this.each(function() {
++			if ( runiqueId.test( this.id ) ) {
++				$( this ).removeAttr( "id" );
++			}
++		});
++	}
++});
++
++// selectors
++function focusable( element, isTabIndexNotNaN ) {
++	var map, mapName, img,
++		nodeName = element.nodeName.toLowerCase();
++	if ( "area" === nodeName ) {
++		map = element.parentNode;
++		mapName = map.name;
++		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
++			return false;
++		}
++		img = $( "img[usemap=#" + mapName + "]" )[0];
++		return !!img && visible( img );
++	}
++	return ( /input|select|textarea|button|object/.test( nodeName ) ?
++		!element.disabled :
++		"a" === nodeName ?
++			element.href || isTabIndexNotNaN :
++			isTabIndexNotNaN) &&
++		// the element and all of its ancestors must be visible
++		visible( element );
++}
++
++function visible( element ) {
++	return $.expr.filters.visible( element ) &&
++		!$( element ).parents().addBack().filter(function() {
++			return $.css( this, "visibility" ) === "hidden";
++		}).length;
++}
++
++$.extend( $.expr[ ":" ], {
++	data: $.expr.createPseudo ?
++		$.expr.createPseudo(function( dataName ) {
++			return function( elem ) {
++				return !!$.data( elem, dataName );
++			};
++		}) :
++		// support: jQuery <1.8
++		function( elem, i, match ) {
++			return !!$.data( elem, match[ 3 ] );
++		},
++
++	focusable: function( element ) {
++		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
++	},
++
++	tabbable: function( element ) {
++		var tabIndex = $.attr( element, "tabindex" ),
++			isTabIndexNaN = isNaN( tabIndex );
++		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
++	}
++});
++
++// support: jQuery <1.8
++if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
++	$.each( [ "Width", "Height" ], function( i, name ) {
++		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
++			type = name.toLowerCase(),
++			orig = {
++				innerWidth: $.fn.innerWidth,
++				innerHeight: $.fn.innerHeight,
++				outerWidth: $.fn.outerWidth,
++				outerHeight: $.fn.outerHeight
++			};
++
++		function reduce( elem, size, border, margin ) {
++			$.each( side, function() {
++				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
++				if ( border ) {
++					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
++				}
++				if ( margin ) {
++					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
++				}
++			});
++			return size;
++		}
++
++		$.fn[ "inner" + name ] = function( size ) {
++			if ( size === undefined ) {
++				return orig[ "inner" + name ].call( this );
++			}
++
++			return this.each(function() {
++				$( this ).css( type, reduce( this, size ) + "px" );
++			});
++		};
++
++		$.fn[ "outer" + name] = function( size, margin ) {
++			if ( typeof size !== "number" ) {
++				return orig[ "outer" + name ].call( this, size );
++			}
++
++			return this.each(function() {
++				$( this).css( type, reduce( this, size, true, margin ) + "px" );
++			});
++		};
++	});
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
++if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
++	$.fn.removeData = (function( removeData ) {
++		return function( key ) {
++			if ( arguments.length ) {
++				return removeData.call( this, $.camelCase( key ) );
++			} else {
++				return removeData.call( this );
++			}
++		};
++	})( $.fn.removeData );
++}
++
++
++
++
++
++// deprecated
++$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
++
++$.support.selectstart = "onselectstart" in document.createElement( "div" );
++$.fn.extend({
++	disableSelection: function() {
++		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
++			".ui-disableSelection", function( event ) {
++				event.preventDefault();
++			});
++	},
++
++	enableSelection: function() {
++		return this.unbind( ".ui-disableSelection" );
++	}
++});
++
++$.extend( $.ui, {
++	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
++	plugin: {
++		add: function( module, option, set ) {
++			var i,
++				proto = $.ui[ module ].prototype;
++			for ( i in set ) {
++				proto.plugins[ i ] = proto.plugins[ i ] || [];
++				proto.plugins[ i ].push( [ option, set[ i ] ] );
++			}
++		},
++		call: function( instance, name, args ) {
++			var i,
++				set = instance.plugins[ name ];
++			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
++				return;
++			}
++
++			for ( i = 0; i < set.length; i++ ) {
++				if ( instance.options[ set[ i ][ 0 ] ] ) {
++					set[ i ][ 1 ].apply( instance.element, args );
++				}
++			}
++		}
++	},
++
++	// only used by resizable
++	hasScroll: function( el, a ) {
++
++		//If overflow is hidden, the element might have extra content, but the user wants to hide it
++		if ( $( el ).css( "overflow" ) === "hidden") {
++			return false;
++		}
++
++		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
++			has = false;
++
++		if ( el[ scroll ] > 0 ) {
++			return true;
++		}
++
++		// TODO: determine which cases actually cause this to happen
++		// if the element doesn't have the scroll set, see if it's possible to
++		// set the scroll
++		el[ scroll ] = 1;
++		has = ( el[ scroll ] > 0 );
++		el[ scroll ] = 0;
++		return has;
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.progressbar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.progressbar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.progressbar.js	(revision 15487)
+@@ -0,0 +1,145 @@
++/*!
++ * jQuery UI Progressbar 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/progressbar/
++ *
++ * Depends:
++ *   jquery.ui.core.js
++ *   jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget( "ui.progressbar", {
++	version: "1.10.3",
++	options: {
++		max: 100,
++		value: 0,
++
++		change: null,
++		complete: null
++	},
++
++	min: 0,
++
++	_create: function() {
++		// Constrain initial value
++		this.oldValue = this.options.value = this._constrainedValue();
++
++		this.element
++			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.attr({
++				// Only set static values, aria-valuenow and aria-valuemax are
++				// set inside _refreshValue()
++				role: "progressbar",
++				"aria-valuemin": this.min
++			});
++
++		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
++			.appendTo( this.element );
++
++		this._refreshValue();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++
++		this.valueDiv.remove();
++	},
++
++	value: function( newValue ) {
++		if ( newValue === undefined ) {
++			return this.options.value;
++		}
++
++		this.options.value = this._constrainedValue( newValue );
++		this._refreshValue();
++	},
++
++	_constrainedValue: function( newValue ) {
++		if ( newValue === undefined ) {
++			newValue = this.options.value;
++		}
++
++		this.indeterminate = newValue === false;
++
++		// sanitize value
++		if ( typeof newValue !== "number" ) {
++			newValue = 0;
++		}
++
++		return this.indeterminate ? false :
++			Math.min( this.options.max, Math.max( this.min, newValue ) );
++	},
++
++	_setOptions: function( options ) {
++		// Ensure "value" option is set after other values (like max)
++		var value = options.value;
++		delete options.value;
++
++		this._super( options );
++
++		this.options.value = this._constrainedValue( value );
++		this._refreshValue();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "max" ) {
++			// Don't allow a max less than min
++			value = Math.max( this.min, value );
++		}
++
++		this._super( key, value );
++	},
++
++	_percentage: function() {
++		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
++	},
++
++	_refreshValue: function() {
++		var value = this.options.value,
++			percentage = this._percentage();
++
++		this.valueDiv
++			.toggle( this.indeterminate || value > this.min )
++			.toggleClass( "ui-corner-right", value === this.options.max )
++			.width( percentage.toFixed(0) + "%" );
++
++		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
++
++		if ( this.indeterminate ) {
++			this.element.removeAttr( "aria-valuenow" );
++			if ( !this.overlayDiv ) {
++				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
++			}
++		} else {
++			this.element.attr({
++				"aria-valuemax": this.options.max,
++				"aria-valuenow": value
++			});
++			if ( this.overlayDiv ) {
++				this.overlayDiv.remove();
++				this.overlayDiv = null;
++			}
++		}
++
++		if ( this.oldValue !== value ) {
++			this.oldValue = value;
++			this._trigger( "change" );
++		}
++		if ( value === this.options.max ) {
++			this._trigger( "complete" );
++		}
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tabs.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tabs.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tabs.js	(revision 15487)
+@@ -0,0 +1,846 @@
++/*!
++ * jQuery UI Tabs 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/tabs/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var tabId = 0,
++	rhash = /#.*$/;
++
++function getNextTabId() {
++	return ++tabId;
++}
++
++function isLocal( anchor ) {
++	return anchor.hash.length > 1 &&
++		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
++			decodeURIComponent( location.href.replace( rhash, "" ) );
++}
++
++$.widget( "ui.tabs", {
++	version: "1.10.3",
++	delay: 300,
++	options: {
++		active: null,
++		collapsible: false,
++		event: "click",
++		heightStyle: "content",
++		hide: null,
++		show: null,
++
++		// callbacks
++		activate: null,
++		beforeActivate: null,
++		beforeLoad: null,
++		load: null
++	},
++
++	_create: function() {
++		var that = this,
++			options = this.options;
++
++		this.running = false;
++
++		this.element
++			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-tabs-collapsible", options.collapsible )
++			// Prevent users from focusing disabled tabs via click
++			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
++				if ( $( this ).is( ".ui-state-disabled" ) ) {
++					event.preventDefault();
++				}
++			})
++			// support: IE <9
++			// Preventing the default action in mousedown doesn't prevent IE
++			// from focusing the element, so if the anchor gets focused, blur.
++			// We don't have to worry about focusing the previously focused
++			// element since clicking on a non-focusable element should focus
++			// the body anyway.
++			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
++				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
++					this.blur();
++				}
++			});
++
++		this._processTabs();
++		options.active = this._initialActive();
++
++		// Take disabling tabs via class attribute from HTML
++		// into account and update option properly.
++		if ( $.isArray( options.disabled ) ) {
++			options.disabled = $.unique( options.disabled.concat(
++				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
++					return that.tabs.index( li );
++				})
++			) ).sort();
++		}
++
++		// check for length avoids error when initializing empty list
++		if ( this.options.active !== false && this.anchors.length ) {
++			this.active = this._findActive( options.active );
++		} else {
++			this.active = $();
++		}
++
++		this._refresh();
++
++		if ( this.active.length ) {
++			this.load( options.active );
++		}
++	},
++
++	_initialActive: function() {
++		var active = this.options.active,
++			collapsible = this.options.collapsible,
++			locationHash = location.hash.substring( 1 );
++
++		if ( active === null ) {
++			// check the fragment identifier in the URL
++			if ( locationHash ) {
++				this.tabs.each(function( i, tab ) {
++					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
++						active = i;
++						return false;
++					}
++				});
++			}
++
++			// check for a tab marked active via a class
++			if ( active === null ) {
++				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
++			}
++
++			// no active tab, set to false
++			if ( active === null || active === -1 ) {
++				active = this.tabs.length ? 0 : false;
++			}
++		}
++
++		// handle numbers: negative, out of range
++		if ( active !== false ) {
++			active = this.tabs.index( this.tabs.eq( active ) );
++			if ( active === -1 ) {
++				active = collapsible ? false : 0;
++			}
++		}
++
++		// don't allow collapsible: false and active: false
++		if ( !collapsible && active === false && this.anchors.length ) {
++			active = 0;
++		}
++
++		return active;
++	},
++
++	_getCreateEventData: function() {
++		return {
++			tab: this.active,
++			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
++		};
++	},
++
++	_tabKeydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
++			selectedIndex = this.tabs.index( focusedTab ),
++			goingForward = true;
++
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		switch ( event.keyCode ) {
++			case $.ui.keyCode.RIGHT:
++			case $.ui.keyCode.DOWN:
++				selectedIndex++;
++				break;
++			case $.ui.keyCode.UP:
++			case $.ui.keyCode.LEFT:
++				goingForward = false;
++				selectedIndex--;
++				break;
++			case $.ui.keyCode.END:
++				selectedIndex = this.anchors.length - 1;
++				break;
++			case $.ui.keyCode.HOME:
++				selectedIndex = 0;
++				break;
++			case $.ui.keyCode.SPACE:
++				// Activate only, no collapsing
++				event.preventDefault();
++				clearTimeout( this.activating );
++				this._activate( selectedIndex );
++				return;
++			case $.ui.keyCode.ENTER:
++				// Toggle (cancel delayed activation, allow collapsing)
++				event.preventDefault();
++				clearTimeout( this.activating );
++				// Determine if we should collapse or activate
++				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
++				return;
++			default:
++				return;
++		}
++
++		// Focus the appropriate tab, based on which key was pressed
++		event.preventDefault();
++		clearTimeout( this.activating );
++		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
++
++		// Navigating with control key will prevent automatic activation
++		if ( !event.ctrlKey ) {
++			// Update aria-selected immediately so that AT think the tab is already selected.
++			// Otherwise AT may confuse the user by stating that they need to activate the tab,
++			// but the tab will already be activated by the time the announcement finishes.
++			focusedTab.attr( "aria-selected", "false" );
++			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
++
++			this.activating = this._delay(function() {
++				this.option( "active", selectedIndex );
++			}, this.delay );
++		}
++	},
++
++	_panelKeydown: function( event ) {
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		// Ctrl+up moves focus to the current tab
++		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
++			event.preventDefault();
++			this.active.focus();
++		}
++	},
++
++	// Alt+page up/down moves focus to the previous/next tab (and activates)
++	_handlePageNav: function( event ) {
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
++			this._activate( this._focusNextTab( this.options.active - 1, false ) );
++			return true;
++		}
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
++			this._activate( this._focusNextTab( this.options.active + 1, true ) );
++			return true;
++		}
++	},
++
++	_findNextTab: function( index, goingForward ) {
++		var lastTabIndex = this.tabs.length - 1;
++
++		function constrain() {
++			if ( index > lastTabIndex ) {
++				index = 0;
++			}
++			if ( index < 0 ) {
++				index = lastTabIndex;
++			}
++			return index;
++		}
++
++		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
++			index = goingForward ? index + 1 : index - 1;
++		}
++
++		return index;
++	},
++
++	_focusNextTab: function( index, goingForward ) {
++		index = this._findNextTab( index, goingForward );
++		this.tabs.eq( index ).focus();
++		return index;
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "disabled" ) {
++			// don't use the widget factory's disabled handling
++			this._setupDisabled( value );
++			return;
++		}
++
++		this._super( key, value);
++
++		if ( key === "collapsible" ) {
++			this.element.toggleClass( "ui-tabs-collapsible", value );
++			// Setting collapsible: false while collapsed; open first panel
++			if ( !value && this.options.active === false ) {
++				this._activate( 0 );
++			}
++		}
++
++		if ( key === "event" ) {
++			this._setupEvents( value );
++		}
++
++		if ( key === "heightStyle" ) {
++			this._setupHeightStyle( value );
++		}
++	},
++
++	_tabId: function( tab ) {
++		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
++	},
++
++	_sanitizeSelector: function( hash ) {
++		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
++	},
++
++	refresh: function() {
++		var options = this.options,
++			lis = this.tablist.children( ":has(a[href])" );
++
++		// get disabled tabs from class attribute from HTML
++		// this will get converted to a boolean if needed in _refresh()
++		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
++			return lis.index( tab );
++		});
++
++		this._processTabs();
++
++		// was collapsed or no tabs
++		if ( options.active === false || !this.anchors.length ) {
++			options.active = false;
++			this.active = $();
++		// was active, but active tab is gone
++		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining tabs are disabled
++			if ( this.tabs.length === options.disabled.length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous tab
++			} else {
++				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
++			}
++		// was active, active tab still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.tabs.index( this.active );
++		}
++
++		this._refresh();
++	},
++
++	_refresh: function() {
++		this._setupDisabled( this.options.disabled );
++		this._setupEvents( this.options.event );
++		this._setupHeightStyle( this.options.heightStyle );
++
++		this.tabs.not( this.active ).attr({
++			"aria-selected": "false",
++			tabIndex: -1
++		});
++		this.panels.not( this._getPanelForTab( this.active ) )
++			.hide()
++			.attr({
++				"aria-expanded": "false",
++				"aria-hidden": "true"
++			});
++
++		// Make sure one tab is in the tab order
++		if ( !this.active.length ) {
++			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active
++				.addClass( "ui-tabs-active ui-state-active" )
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++			this._getPanelForTab( this.active )
++				.show()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++	},
++
++	_processTabs: function() {
++		var that = this;
++
++		this.tablist = this._getList()
++			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.attr( "role", "tablist" );
++
++		this.tabs = this.tablist.find( "> li:has(a[href])" )
++			.addClass( "ui-state-default ui-corner-top" )
++			.attr({
++				role: "tab",
++				tabIndex: -1
++			});
++
++		this.anchors = this.tabs.map(function() {
++				return $( "a", this )[ 0 ];
++			})
++			.addClass( "ui-tabs-anchor" )
++			.attr({
++				role: "presentation",
++				tabIndex: -1
++			});
++
++		this.panels = $();
++
++		this.anchors.each(function( i, anchor ) {
++			var selector, panel, panelId,
++				anchorId = $( anchor ).uniqueId().attr( "id" ),
++				tab = $( anchor ).closest( "li" ),
++				originalAriaControls = tab.attr( "aria-controls" );
++
++			// inline tab
++			if ( isLocal( anchor ) ) {
++				selector = anchor.hash;
++				panel = that.element.find( that._sanitizeSelector( selector ) );
++			// remote tab
++			} else {
++				panelId = that._tabId( tab );
++				selector = "#" + panelId;
++				panel = that.element.find( selector );
++				if ( !panel.length ) {
++					panel = that._createPanel( panelId );
++					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
++				}
++				panel.attr( "aria-live", "polite" );
++			}
++
++			if ( panel.length) {
++				that.panels = that.panels.add( panel );
++			}
++			if ( originalAriaControls ) {
++				tab.data( "ui-tabs-aria-controls", originalAriaControls );
++			}
++			tab.attr({
++				"aria-controls": selector.substring( 1 ),
++				"aria-labelledby": anchorId
++			});
++			panel.attr( "aria-labelledby", anchorId );
++		});
++
++		this.panels
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.attr( "role", "tabpanel" );
++	},
++
++	// allow overriding how to find the list for rare usage scenarios (#7715)
++	_getList: function() {
++		return this.element.find( "ol,ul" ).eq( 0 );
++	},
++
++	_createPanel: function( id ) {
++		return $( "<div>" )
++			.attr( "id", id )
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.data( "ui-tabs-destroy", true );
++	},
++
++	_setupDisabled: function( disabled ) {
++		if ( $.isArray( disabled ) ) {
++			if ( !disabled.length ) {
++				disabled = false;
++			} else if ( disabled.length === this.anchors.length ) {
++				disabled = true;
++			}
++		}
++
++		// disable tabs
++		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
++			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
++				$( li )
++					.addClass( "ui-state-disabled" )
++					.attr( "aria-disabled", "true" );
++			} else {
++				$( li )
++					.removeClass( "ui-state-disabled" )
++					.removeAttr( "aria-disabled" );
++			}
++		}
++
++		this.options.disabled = disabled;
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			click: function( event ) {
++				event.preventDefault();
++			}
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
++		this._on( this.anchors, events );
++		this._on( this.tabs, { keydown: "_tabKeydown" } );
++		this._on( this.panels, { keydown: "_panelKeydown" } );
++
++		this._focusable( this.tabs );
++		this._hoverable( this.tabs );
++	},
++
++	_setupHeightStyle: function( heightStyle ) {
++		var maxHeight,
++			parent = this.element.parent();
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			maxHeight -= this.element.outerHeight() - this.element.height();
++
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.element.children().not( this.panels ).each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.panels.each(function() {
++				$( this ).height( Math.max( 0, maxHeight -
++					$( this ).innerHeight() + $( this ).height() ) );
++			})
++			.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.panels.each(function() {
++				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
++			}).height( maxHeight );
++		}
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			anchor = $( event.currentTarget ),
++			tab = anchor.closest( "li" ),
++			clickedIsActive = tab[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : this._getPanelForTab( tab ),
++			toHide = !active.length ? $() : this._getPanelForTab( active ),
++			eventData = {
++				oldTab: active,
++				oldPanel: toHide,
++				newTab: collapsing ? $() : tab,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if ( tab.hasClass( "ui-state-disabled" ) ||
++				// tab is already loading
++				tab.hasClass( "ui-tabs-loading" ) ||
++				// can't switch durning an animation
++				this.running ||
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.tabs.index( tab );
++
++		this.active = clickedIsActive ? $() : tab;
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		if ( !toHide.length && !toShow.length ) {
++			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
++		}
++
++		if ( toShow.length ) {
++			this.load( this.tabs.index( tab ), event );
++		}
++		this._toggle( event, eventData );
++	},
++
++	// handles show/hide for selecting tabs
++	_toggle: function( event, eventData ) {
++		var that = this,
++			toShow = eventData.newPanel,
++			toHide = eventData.oldPanel;
++
++		this.running = true;
++
++		function complete() {
++			that.running = false;
++			that._trigger( "activate", event, eventData );
++		}
++
++		function show() {
++			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
++
++			if ( toShow.length && that.options.show ) {
++				that._show( toShow, that.options.show, complete );
++			} else {
++				toShow.show();
++				complete();
++			}
++		}
++
++		// start out by hiding, then showing, then completing
++		if ( toHide.length && this.options.hide ) {
++			this._hide( toHide, this.options.hide, function() {
++				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++				show();
++			});
++		} else {
++			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++			toHide.hide();
++			show();
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		eventData.oldTab.attr( "aria-selected", "false" );
++		// If we're switching tabs, remove the old tab from the tab order.
++		// If we're opening from collapsed state, remove the previous tab from the tab order.
++		// If we're collapsing, then keep the collapsing tab in the tab order.
++		if ( toShow.length && toHide.length ) {
++			eventData.oldTab.attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.tabs.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow.attr({
++			"aria-expanded": "true",
++			"aria-hidden": "false"
++		});
++		eventData.newTab.attr({
++			"aria-selected": "true",
++			tabIndex: 0
++		});
++	},
++
++	_activate: function( index ) {
++		var anchor,
++			active = this._findActive( index );
++
++		// trying to activate the already active panel
++		if ( active[ 0 ] === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the current active header
++		if ( !active.length ) {
++			active = this.active;
++		}
++
++		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
++		this._eventHandler({
++			target: anchor,
++			currentTarget: anchor,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( index ) {
++		return index === false ? $() : this.tabs.eq( index );
++	},
++
++	_getIndex: function( index ) {
++		// meta-function to give users option to provide a href string instead of a numerical index.
++		if ( typeof index === "string" ) {
++			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
++		}
++
++		return index;
++	},
++
++	_destroy: function() {
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
++
++		this.tablist
++			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.removeAttr( "role" );
++
++		this.anchors
++			.removeClass( "ui-tabs-anchor" )
++			.removeAttr( "role" )
++			.removeAttr( "tabIndex" )
++			.removeUniqueId();
++
++		this.tabs.add( this.panels ).each(function() {
++			if ( $.data( this, "ui-tabs-destroy" ) ) {
++				$( this ).remove();
++			} else {
++				$( this )
++					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
++						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
++					.removeAttr( "tabIndex" )
++					.removeAttr( "aria-live" )
++					.removeAttr( "aria-busy" )
++					.removeAttr( "aria-selected" )
++					.removeAttr( "aria-labelledby" )
++					.removeAttr( "aria-hidden" )
++					.removeAttr( "aria-expanded" )
++					.removeAttr( "role" );
++			}
++		});
++
++		this.tabs.each(function() {
++			var li = $( this ),
++				prev = li.data( "ui-tabs-aria-controls" );
++			if ( prev ) {
++				li
++					.attr( "aria-controls", prev )
++					.removeData( "ui-tabs-aria-controls" );
++			} else {
++				li.removeAttr( "aria-controls" );
++			}
++		});
++
++		this.panels.show();
++
++		if ( this.options.heightStyle !== "content" ) {
++			this.panels.css( "height", "" );
++		}
++	},
++
++	enable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === false ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = false;
++		} else {
++			index = this._getIndex( index );
++			if ( $.isArray( disabled ) ) {
++				disabled = $.map( disabled, function( num ) {
++					return num !== index ? num : null;
++				});
++			} else {
++				disabled = $.map( this.tabs, function( li, num ) {
++					return num !== index ? num : null;
++				});
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	disable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === true ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = true;
++		} else {
++			index = this._getIndex( index );
++			if ( $.inArray( index, disabled ) !== -1 ) {
++				return;
++			}
++			if ( $.isArray( disabled ) ) {
++				disabled = $.merge( [ index ], disabled ).sort();
++			} else {
++				disabled = [ index ];
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	load: function( index, event ) {
++		index = this._getIndex( index );
++		var that = this,
++			tab = this.tabs.eq( index ),
++			anchor = tab.find( ".ui-tabs-anchor" ),
++			panel = this._getPanelForTab( tab ),
++			eventData = {
++				tab: tab,
++				panel: panel
++			};
++
++		// not remote
++		if ( isLocal( anchor[ 0 ] ) ) {
++			return;
++		}
++
++		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
++
++		// support: jQuery <1.8
++		// jQuery <1.8 returns false if the request is canceled in beforeSend,
++		// but as of 1.8, $.ajax() always returns a jqXHR object.
++		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
++			tab.addClass( "ui-tabs-loading" );
++			panel.attr( "aria-busy", "true" );
++
++			this.xhr
++				.success(function( response ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						panel.html( response );
++						that._trigger( "load", event, eventData );
++					}, 1 );
++				})
++				.complete(function( jqXHR, status ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						if ( status === "abort" ) {
++							that.panels.stop( false, true );
++						}
++
++						tab.removeClass( "ui-tabs-loading" );
++						panel.removeAttr( "aria-busy" );
++
++						if ( jqXHR === that.xhr ) {
++							delete that.xhr;
++						}
++					}, 1 );
++				});
++		}
++	},
++
++	_ajaxSettings: function( anchor, event, eventData ) {
++		var that = this;
++		return {
++			url: anchor.attr( "href" ),
++			beforeSend: function( jqXHR, settings ) {
++				return that._trigger( "beforeLoad", event,
++					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
++			}
++		};
++	},
++
++	_getPanelForTab: function( tab ) {
++		var id = $( tab ).attr( "aria-controls" );
++		return this.element.find( this._sanitizeSelector( "#" + id ) );
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-slide.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-slide.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-slide.js	(revision 15487)
+@@ -0,0 +1,64 @@
++/*!
++ * jQuery UI Effects Slide 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/slide-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.slide = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
++		mode = $.effects.setMode( el, o.mode || "show" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		distance,
++		animation = {};
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
++
++	$.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	if ( show ) {
++		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( positiveMotion ? "+=" : "-=") :
++		( positiveMotion ? "-=" : "+=")) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tooltip.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tooltip.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tooltip.js	(revision 15487)
+@@ -0,0 +1,402 @@
++/*!
++ * jQuery UI Tooltip 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/tooltip/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.position.js
++ */
++(function( $ ) {
++
++var increments = 0;
++
++function addDescribedBy( elem, id ) {
++	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
++	describedby.push( id );
++	elem
++		.data( "ui-tooltip-id", id )
++		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
++}
++
++function removeDescribedBy( elem ) {
++	var id = elem.data( "ui-tooltip-id" ),
++		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
++		index = $.inArray( id, describedby );
++	if ( index !== -1 ) {
++		describedby.splice( index, 1 );
++	}
++
++	elem.removeData( "ui-tooltip-id" );
++	describedby = $.trim( describedby.join( " " ) );
++	if ( describedby ) {
++		elem.attr( "aria-describedby", describedby );
++	} else {
++		elem.removeAttr( "aria-describedby" );
++	}
++}
++
++$.widget( "ui.tooltip", {
++	version: "1.10.3",
++	options: {
++		content: function() {
++			// support: IE<9, Opera in jQuery <1.7
++			// .text() can't accept undefined, so coerce to a string
++			var title = $( this ).attr( "title" ) || "";
++			// Escape title, since we're going from an attribute to raw HTML
++			return $( "<a>" ).text( title ).html();
++		},
++		hide: true,
++		// Disabled elements have inconsistent behavior across browsers (#8661)
++		items: "[title]:not([disabled])",
++		position: {
++			my: "left top+15",
++			at: "left bottom",
++			collision: "flipfit flip"
++		},
++		show: true,
++		tooltipClass: null,
++		track: false,
++
++		// callbacks
++		close: null,
++		open: null
++	},
++
++	_create: function() {
++		this._on({
++			mouseover: "open",
++			focusin: "open"
++		});
++
++		// IDs of generated tooltips, needed for destroy
++		this.tooltips = {};
++		// IDs of parent tooltips where we removed the title attribute
++		this.parents = {};
++
++		if ( this.options.disabled ) {
++			this._disable();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var that = this;
++
++		if ( key === "disabled" ) {
++			this[ value ? "_disable" : "_enable" ]();
++			this.options[ key ] = value;
++			// disable element style changes
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "content" ) {
++			$.each( this.tooltips, function( id, element ) {
++				that._updateContent( element );
++			});
++		}
++	},
++
++	_disable: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++		});
++
++		// remove title attributes to prevent native tooltips
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.is( "[title]" ) ) {
++				element
++					.data( "ui-tooltip-title", element.attr( "title" ) )
++					.attr( "title", "" );
++			}
++		});
++	},
++
++	_enable: function() {
++		// restore title attributes
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++			}
++		});
++	},
++
++	open: function( event ) {
++		var that = this,
++			target = $( event ? event.target : this.element )
++				// we need closest here due to mouseover bubbling,
++				// but always pointing at the same event target
++				.closest( this.options.items );
++
++		// No element to show a tooltip for or the tooltip is already open
++		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
++			return;
++		}
++
++		if ( target.attr( "title" ) ) {
++			target.data( "ui-tooltip-title", target.attr( "title" ) );
++		}
++
++		target.data( "ui-tooltip-open", true );
++
++		// kill parent tooltips, custom or native, for hover
++		if ( event && event.type === "mouseover" ) {
++			target.parents().each(function() {
++				var parent = $( this ),
++					blurEvent;
++				if ( parent.data( "ui-tooltip-open" ) ) {
++					blurEvent = $.Event( "blur" );
++					blurEvent.target = blurEvent.currentTarget = this;
++					that.close( blurEvent, true );
++				}
++				if ( parent.attr( "title" ) ) {
++					parent.uniqueId();
++					that.parents[ this.id ] = {
++						element: this,
++						title: parent.attr( "title" )
++					};
++					parent.attr( "title", "" );
++				}
++			});
++		}
++
++		this._updateContent( target, event );
++	},
++
++	_updateContent: function( target, event ) {
++		var content,
++			contentOption = this.options.content,
++			that = this,
++			eventType = event ? event.type : null;
++
++		if ( typeof contentOption === "string" ) {
++			return this._open( event, target, contentOption );
++		}
++
++		content = contentOption.call( target[0], function( response ) {
++			// ignore async response if tooltip was closed already
++			if ( !target.data( "ui-tooltip-open" ) ) {
++				return;
++			}
++			// IE may instantly serve a cached response for ajax requests
++			// delay this call to _open so the other call to _open runs first
++			that._delay(function() {
++				// jQuery creates a special event for focusin when it doesn't
++				// exist natively. To improve performance, the native event
++				// object is reused and the type is changed. Therefore, we can't
++				// rely on the type being correct after the event finished
++				// bubbling, so we set it back to the previous value. (#8740)
++				if ( event ) {
++					event.type = eventType;
++				}
++				this._open( event, target, response );
++			});
++		});
++		if ( content ) {
++			this._open( event, target, content );
++		}
++	},
++
++	_open: function( event, target, content ) {
++		var tooltip, events, delayedShow,
++			positionOption = $.extend( {}, this.options.position );
++
++		if ( !content ) {
++			return;
++		}
++
++		// Content can be updated multiple times. If the tooltip already
++		// exists, then just update the content and bail.
++		tooltip = this._find( target );
++		if ( tooltip.length ) {
++			tooltip.find( ".ui-tooltip-content" ).html( content );
++			return;
++		}
++
++		// if we have a title, clear it to prevent the native tooltip
++		// we have to check first to avoid defining a title if none exists
++		// (we don't want to cause an element to start matching [title])
++		//
++		// We use removeAttr only for key events, to allow IE to export the correct
++		// accessible attributes. For mouse events, set to empty string to avoid
++		// native tooltip showing up (happens only when removing inside mouseover).
++		if ( target.is( "[title]" ) ) {
++			if ( event && event.type === "mouseover" ) {
++				target.attr( "title", "" );
++			} else {
++				target.removeAttr( "title" );
++			}
++		}
++
++		tooltip = this._tooltip( target );
++		addDescribedBy( target, tooltip.attr( "id" ) );
++		tooltip.find( ".ui-tooltip-content" ).html( content );
++
++		function position( event ) {
++			positionOption.of = event;
++			if ( tooltip.is( ":hidden" ) ) {
++				return;
++			}
++			tooltip.position( positionOption );
++		}
++		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
++			this._on( this.document, {
++				mousemove: position
++			});
++			// trigger once to override element-relative positioning
++			position( event );
++		} else {
++			tooltip.position( $.extend({
++				of: target
++			}, this.options.position ) );
++		}
++
++		tooltip.hide();
++
++		this._show( tooltip, this.options.show );
++		// Handle tracking tooltips that are shown with a delay (#8644). As soon
++		// as the tooltip is visible, position the tooltip using the most recent
++		// event.
++		if ( this.options.show && this.options.show.delay ) {
++			delayedShow = this.delayedShow = setInterval(function() {
++				if ( tooltip.is( ":visible" ) ) {
++					position( positionOption.of );
++					clearInterval( delayedShow );
++				}
++			}, $.fx.interval );
++		}
++
++		this._trigger( "open", event, { tooltip: tooltip } );
++
++		events = {
++			keyup: function( event ) {
++				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
++					var fakeEvent = $.Event(event);
++					fakeEvent.currentTarget = target[0];
++					this.close( fakeEvent, true );
++				}
++			},
++			remove: function() {
++				this._removeTooltip( tooltip );
++			}
++		};
++		if ( !event || event.type === "mouseover" ) {
++			events.mouseleave = "close";
++		}
++		if ( !event || event.type === "focusin" ) {
++			events.focusout = "close";
++		}
++		this._on( true, target, events );
++	},
++
++	close: function( event ) {
++		var that = this,
++			target = $( event ? event.currentTarget : this.element ),
++			tooltip = this._find( target );
++
++		// disabling closes the tooltip, so we need to track when we're closing
++		// to avoid an infinite loop in case the tooltip becomes disabled on close
++		if ( this.closing ) {
++			return;
++		}
++
++		// Clear the interval for delayed tracking tooltips
++		clearInterval( this.delayedShow );
++
++		// only set title if we had one before (see comment in _open())
++		if ( target.data( "ui-tooltip-title" ) ) {
++			target.attr( "title", target.data( "ui-tooltip-title" ) );
++		}
++
++		removeDescribedBy( target );
++
++		tooltip.stop( true );
++		this._hide( tooltip, this.options.hide, function() {
++			that._removeTooltip( $( this ) );
++		});
++
++		target.removeData( "ui-tooltip-open" );
++		this._off( target, "mouseleave focusout keyup" );
++		// Remove 'remove' binding only on delegated targets
++		if ( target[0] !== this.element[0] ) {
++			this._off( target, "remove" );
++		}
++		this._off( this.document, "mousemove" );
++
++		if ( event && event.type === "mouseleave" ) {
++			$.each( this.parents, function( id, parent ) {
++				$( parent.element ).attr( "title", parent.title );
++				delete that.parents[ id ];
++			});
++		}
++
++		this.closing = true;
++		this._trigger( "close", event, { tooltip: tooltip } );
++		this.closing = false;
++	},
++
++	_tooltip: function( element ) {
++		var id = "ui-tooltip-" + increments++,
++			tooltip = $( "<div>" )
++				.attr({
++					id: id,
++					role: "tooltip"
++				})
++				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
++					( this.options.tooltipClass || "" ) );
++		$( "<div>" )
++			.addClass( "ui-tooltip-content" )
++			.appendTo( tooltip );
++		tooltip.appendTo( this.document[0].body );
++		this.tooltips[ id ] = element;
++		return tooltip;
++	},
++
++	_find: function( target ) {
++		var id = target.data( "ui-tooltip-id" );
++		return id ? $( "#" + id ) : $();
++	},
++
++	_removeTooltip: function( tooltip ) {
++		tooltip.remove();
++		delete this.tooltips[ tooltip.attr( "id" ) ];
++	},
++
++	_destroy: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			// Delegate to close method to handle common cleanup
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++
++			// Remove immediately; destroying an open tooltip doesn't use the
++			// hide animation
++			$( "#" + id ).remove();
++
++			// Restore the title
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++				element.removeData( "ui-tooltip-title" );
++			}
++		});
++	}
++});
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-drop.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-drop.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-drop.js	(revision 15487)
+@@ -0,0 +1,65 @@
++/*!
++ * jQuery UI Effects Drop 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/drop-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.drop = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
++		animation = {
++			opacity: show ? 1 : 0
++		},
++		distance;
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
++
++	if ( show ) {
++		el
++			.css( "opacity", 0 )
++			.css( ref, motion === "pos" ? -distance : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( motion === "pos" ? "+=" : "-=" ) :
++		( motion === "pos" ? "-=" : "+=" ) ) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.dialog.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.dialog.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.dialog.js	(revision 15487)
+@@ -0,0 +1,808 @@
++/*!
++ * jQuery UI Dialog 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/dialog/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *  jquery.ui.button.js
++ *	jquery.ui.draggable.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.position.js
++ *	jquery.ui.resizable.js
++ */
++(function( $, undefined ) {
++
++var sizeRelatedOptions = {
++		buttons: true,
++		height: true,
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true,
++		width: true
++	},
++	resizableRelatedOptions = {
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true
++	};
++
++$.widget( "ui.dialog", {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoOpen: true,
++		buttons: [],
++		closeOnEscape: true,
++		closeText: "close",
++		dialogClass: "",
++		draggable: true,
++		hide: null,
++		height: "auto",
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 150,
++		minWidth: 150,
++		modal: false,
++		position: {
++			my: "center",
++			at: "center",
++			of: window,
++			collision: "fit",
++			// Ensure the titlebar is always visible
++			using: function( pos ) {
++				var topOffset = $( this ).css( pos ).offset().top;
++				if ( topOffset < 0 ) {
++					$( this ).css( "top", pos.top - topOffset );
++				}
++			}
++		},
++		resizable: true,
++		show: null,
++		title: null,
++		width: 300,
++
++		// callbacks
++		beforeClose: null,
++		close: null,
++		drag: null,
++		dragStart: null,
++		dragStop: null,
++		focus: null,
++		open: null,
++		resize: null,
++		resizeStart: null,
++		resizeStop: null
++	},
++
++	_create: function() {
++		this.originalCss = {
++			display: this.element[0].style.display,
++			width: this.element[0].style.width,
++			minHeight: this.element[0].style.minHeight,
++			maxHeight: this.element[0].style.maxHeight,
++			height: this.element[0].style.height
++		};
++		this.originalPosition = {
++			parent: this.element.parent(),
++			index: this.element.parent().children().index( this.element )
++		};
++		this.originalTitle = this.element.attr("title");
++		this.options.title = this.options.title || this.originalTitle;
++
++		this._createWrapper();
++
++		this.element
++			.show()
++			.removeAttr("title")
++			.addClass("ui-dialog-content ui-widget-content")
++			.appendTo( this.uiDialog );
++
++		this._createTitlebar();
++		this._createButtonPane();
++
++		if ( this.options.draggable && $.fn.draggable ) {
++			this._makeDraggable();
++		}
++		if ( this.options.resizable && $.fn.resizable ) {
++			this._makeResizable();
++		}
++
++		this._isOpen = false;
++	},
++
++	_init: function() {
++		if ( this.options.autoOpen ) {
++			this.open();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++		if ( element && (element.jquery || element.nodeType) ) {
++			return $( element );
++		}
++		return this.document.find( element || "body" ).eq( 0 );
++	},
++
++	_destroy: function() {
++		var next,
++			originalPosition = this.originalPosition;
++
++		this._destroyOverlay();
++
++		this.element
++			.removeUniqueId()
++			.removeClass("ui-dialog-content ui-widget-content")
++			.css( this.originalCss )
++			// Without detaching first, the following becomes really slow
++			.detach();
++
++		this.uiDialog.stop( true, true ).remove();
++
++		if ( this.originalTitle ) {
++			this.element.attr( "title", this.originalTitle );
++		}
++
++		next = originalPosition.parent.children().eq( originalPosition.index );
++		// Don't try to place the dialog next to itself (#8613)
++		if ( next.length && next[0] !== this.element[0] ) {
++			next.before( this.element );
++		} else {
++			originalPosition.parent.append( this.element );
++		}
++	},
++
++	widget: function() {
++		return this.uiDialog;
++	},
++
++	disable: $.noop,
++	enable: $.noop,
++
++	close: function( event ) {
++		var that = this;
++
++		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
++			return;
++		}
++
++		this._isOpen = false;
++		this._destroyOverlay();
++
++		if ( !this.opener.filter(":focusable").focus().length ) {
++			// Hiding a focused element doesn't trigger blur in WebKit
++			// so in case we have nothing to focus on, explicitly blur the active element
++			// https://bugs.webkit.org/show_bug.cgi?id=47182
++			$( this.document[0].activeElement ).blur();
++		}
++
++		this._hide( this.uiDialog, this.options.hide, function() {
++			that._trigger( "close", event );
++		});
++	},
++
++	isOpen: function() {
++		return this._isOpen;
++	},
++
++	moveToTop: function() {
++		this._moveToTop();
++	},
++
++	_moveToTop: function( event, silent ) {
++		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
++		if ( moved && !silent ) {
++			this._trigger( "focus", event );
++		}
++		return moved;
++	},
++
++	open: function() {
++		var that = this;
++		if ( this._isOpen ) {
++			if ( this._moveToTop() ) {
++				this._focusTabbable();
++			}
++			return;
++		}
++
++		this._isOpen = true;
++		this.opener = $( this.document[0].activeElement );
++
++		this._size();
++		this._position();
++		this._createOverlay();
++		this._moveToTop( null, true );
++		this._show( this.uiDialog, this.options.show, function() {
++			that._focusTabbable();
++			that._trigger("focus");
++		});
++
++		this._trigger("open");
++	},
++
++	_focusTabbable: function() {
++		// Set focus to the first match:
++		// 1. First element inside the dialog matching [autofocus]
++		// 2. Tabbable element inside the content element
++		// 3. Tabbable element inside the buttonpane
++		// 4. The close button
++		// 5. The dialog itself
++		var hasFocus = this.element.find("[autofocus]");
++		if ( !hasFocus.length ) {
++			hasFocus = this.element.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogButtonPane.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialog;
++		}
++		hasFocus.eq( 0 ).focus();
++	},
++
++	_keepFocus: function( event ) {
++		function checkFocus() {
++			var activeElement = this.document[0].activeElement,
++				isActive = this.uiDialog[0] === activeElement ||
++					$.contains( this.uiDialog[0], activeElement );
++			if ( !isActive ) {
++				this._focusTabbable();
++			}
++		}
++		event.preventDefault();
++		checkFocus.call( this );
++		// support: IE
++		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
++		// so we check again later
++		this._delay( checkFocus );
++	},
++
++	_createWrapper: function() {
++		this.uiDialog = $("<div>")
++			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
++				this.options.dialogClass )
++			.hide()
++			.attr({
++				// Setting tabIndex makes the div focusable
++				tabIndex: -1,
++				role: "dialog"
++			})
++			.appendTo( this._appendTo() );
++
++		this._on( this.uiDialog, {
++			keydown: function( event ) {
++				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
++						event.keyCode === $.ui.keyCode.ESCAPE ) {
++					event.preventDefault();
++					this.close( event );
++					return;
++				}
++
++				// prevent tabbing out of dialogs
++				if ( event.keyCode !== $.ui.keyCode.TAB ) {
++					return;
++				}
++				var tabbables = this.uiDialog.find(":tabbable"),
++					first = tabbables.filter(":first"),
++					last  = tabbables.filter(":last");
++
++				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
++					first.focus( 1 );
++					event.preventDefault();
++				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
++					last.focus( 1 );
++					event.preventDefault();
++				}
++			},
++			mousedown: function( event ) {
++				if ( this._moveToTop( event ) ) {
++					this._focusTabbable();
++				}
++			}
++		});
++
++		// We assume that any existing aria-describedby attribute means
++		// that the dialog content is marked up properly
++		// otherwise we brute force the content as the description
++		if ( !this.element.find("[aria-describedby]").length ) {
++			this.uiDialog.attr({
++				"aria-describedby": this.element.uniqueId().attr("id")
++			});
++		}
++	},
++
++	_createTitlebar: function() {
++		var uiDialogTitle;
++
++		this.uiDialogTitlebar = $("<div>")
++			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
++			.prependTo( this.uiDialog );
++		this._on( this.uiDialogTitlebar, {
++			mousedown: function( event ) {
++				// Don't prevent click on close button (#8838)
++				// Focusing a dialog that is partially scrolled out of view
++				// causes the browser to scroll it into view, preventing the click event
++				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
++					// Dialog isn't getting focus when dragging (#8063)
++					this.uiDialog.focus();
++				}
++			}
++		});
++
++		this.uiDialogTitlebarClose = $("<button></button>")
++			.button({
++				label: this.options.closeText,
++				icons: {
++					primary: "ui-icon-closethick"
++				},
++				text: false
++			})
++			.addClass("ui-dialog-titlebar-close")
++			.appendTo( this.uiDialogTitlebar );
++		this._on( this.uiDialogTitlebarClose, {
++			click: function( event ) {
++				event.preventDefault();
++				this.close( event );
++			}
++		});
++
++		uiDialogTitle = $("<span>")
++			.uniqueId()
++			.addClass("ui-dialog-title")
++			.prependTo( this.uiDialogTitlebar );
++		this._title( uiDialogTitle );
++
++		this.uiDialog.attr({
++			"aria-labelledby": uiDialogTitle.attr("id")
++		});
++	},
++
++	_title: function( title ) {
++		if ( !this.options.title ) {
++			title.html("&#160;");
++		}
++		title.text( this.options.title );
++	},
++
++	_createButtonPane: function() {
++		this.uiDialogButtonPane = $("<div>")
++			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
++
++		this.uiButtonSet = $("<div>")
++			.addClass("ui-dialog-buttonset")
++			.appendTo( this.uiDialogButtonPane );
++
++		this._createButtons();
++	},
++
++	_createButtons: function() {
++		var that = this,
++			buttons = this.options.buttons;
++
++		// if we already have a button pane, remove it
++		this.uiDialogButtonPane.remove();
++		this.uiButtonSet.empty();
++
++		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
++			this.uiDialog.removeClass("ui-dialog-buttons");
++			return;
++		}
++
++		$.each( buttons, function( name, props ) {
++			var click, buttonOptions;
++			props = $.isFunction( props ) ?
++				{ click: props, text: name } :
++				props;
++			// Default to a non-submitting button
++			props = $.extend( { type: "button" }, props );
++			// Change the context for the click callback to be the main element
++			click = props.click;
++			props.click = function() {
++				click.apply( that.element[0], arguments );
++			};
++			buttonOptions = {
++				icons: props.icons,
++				text: props.showText
++			};
++			delete props.icons;
++			delete props.showText;
++			$( "<button></button>", props )
++				.button( buttonOptions )
++				.appendTo( that.uiButtonSet );
++		});
++		this.uiDialog.addClass("ui-dialog-buttons");
++		this.uiDialogButtonPane.appendTo( this.uiDialog );
++	},
++
++	_makeDraggable: function() {
++		var that = this,
++			options = this.options;
++
++		function filteredUi( ui ) {
++			return {
++				position: ui.position,
++				offset: ui.offset
++			};
++		}
++
++		this.uiDialog.draggable({
++			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
++			handle: ".ui-dialog-titlebar",
++			containment: "document",
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-dragging");
++				that._blockFrames();
++				that._trigger( "dragStart", event, filteredUi( ui ) );
++			},
++			drag: function( event, ui ) {
++				that._trigger( "drag", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.position = [
++					ui.position.left - that.document.scrollLeft(),
++					ui.position.top - that.document.scrollTop()
++				];
++				$( this ).removeClass("ui-dialog-dragging");
++				that._unblockFrames();
++				that._trigger( "dragStop", event, filteredUi( ui ) );
++			}
++		});
++	},
++
++	_makeResizable: function() {
++		var that = this,
++			options = this.options,
++			handles = options.resizable,
++			// .ui-resizable has position: relative defined in the stylesheet
++			// but dialogs have to use absolute or fixed positioning
++			position = this.uiDialog.css("position"),
++			resizeHandles = typeof handles === "string" ?
++				handles	:
++				"n,e,s,w,se,sw,ne,nw";
++
++		function filteredUi( ui ) {
++			return {
++				originalPosition: ui.originalPosition,
++				originalSize: ui.originalSize,
++				position: ui.position,
++				size: ui.size
++			};
++		}
++
++		this.uiDialog.resizable({
++			cancel: ".ui-dialog-content",
++			containment: "document",
++			alsoResize: this.element,
++			maxWidth: options.maxWidth,
++			maxHeight: options.maxHeight,
++			minWidth: options.minWidth,
++			minHeight: this._minHeight(),
++			handles: resizeHandles,
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-resizing");
++				that._blockFrames();
++				that._trigger( "resizeStart", event, filteredUi( ui ) );
++			},
++			resize: function( event, ui ) {
++				that._trigger( "resize", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.height = $( this ).height();
++				options.width = $( this ).width();
++				$( this ).removeClass("ui-dialog-resizing");
++				that._unblockFrames();
++				that._trigger( "resizeStop", event, filteredUi( ui ) );
++			}
++		})
++		.css( "position", position );
++	},
++
++	_minHeight: function() {
++		var options = this.options;
++
++		return options.height === "auto" ?
++			options.minHeight :
++			Math.min( options.minHeight, options.height );
++	},
++
++	_position: function() {
++		// Need to show the dialog to get the actual offset in the position plugin
++		var isVisible = this.uiDialog.is(":visible");
++		if ( !isVisible ) {
++			this.uiDialog.show();
++		}
++		this.uiDialog.position( this.options.position );
++		if ( !isVisible ) {
++			this.uiDialog.hide();
++		}
++	},
++
++	_setOptions: function( options ) {
++		var that = this,
++			resize = false,
++			resizableOptions = {};
++
++		$.each( options, function( key, value ) {
++			that._setOption( key, value );
++
++			if ( key in sizeRelatedOptions ) {
++				resize = true;
++			}
++			if ( key in resizableRelatedOptions ) {
++				resizableOptions[ key ] = value;
++			}
++		});
++
++		if ( resize ) {
++			this._size();
++			this._position();
++		}
++		if ( this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", resizableOptions );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		/*jshint maxcomplexity:15*/
++		var isDraggable, isResizable,
++			uiDialog = this.uiDialog;
++
++		if ( key === "dialogClass" ) {
++			uiDialog
++				.removeClass( this.options.dialogClass )
++				.addClass( value );
++		}
++
++		if ( key === "disabled" ) {
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "appendTo" ) {
++			this.uiDialog.appendTo( this._appendTo() );
++		}
++
++		if ( key === "buttons" ) {
++			this._createButtons();
++		}
++
++		if ( key === "closeText" ) {
++			this.uiDialogTitlebarClose.button({
++				// Ensure that we always pass a string
++				label: "" + value
++			});
++		}
++
++		if ( key === "draggable" ) {
++			isDraggable = uiDialog.is(":data(ui-draggable)");
++			if ( isDraggable && !value ) {
++				uiDialog.draggable("destroy");
++			}
++
++			if ( !isDraggable && value ) {
++				this._makeDraggable();
++			}
++		}
++
++		if ( key === "position" ) {
++			this._position();
++		}
++
++		if ( key === "resizable" ) {
++			// currently resizable, becoming non-resizable
++			isResizable = uiDialog.is(":data(ui-resizable)");
++			if ( isResizable && !value ) {
++				uiDialog.resizable("destroy");
++			}
++
++			// currently resizable, changing handles
++			if ( isResizable && typeof value === "string" ) {
++				uiDialog.resizable( "option", "handles", value );
++			}
++
++			// currently non-resizable, becoming resizable
++			if ( !isResizable && value !== false ) {
++				this._makeResizable();
++			}
++		}
++
++		if ( key === "title" ) {
++			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
++		}
++	},
++
++	_size: function() {
++		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
++		// divs will both have width and height set, so we need to reset them
++		var nonContentHeight, minContentHeight, maxContentHeight,
++			options = this.options;
++
++		// Reset content sizing
++		this.element.show().css({
++			width: "auto",
++			minHeight: 0,
++			maxHeight: "none",
++			height: 0
++		});
++
++		if ( options.minWidth > options.width ) {
++			options.width = options.minWidth;
++		}
++
++		// reset wrapper sizing
++		// determine the height of all the non-content elements
++		nonContentHeight = this.uiDialog.css({
++				height: "auto",
++				width: options.width
++			})
++			.outerHeight();
++		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
++		maxContentHeight = typeof options.maxHeight === "number" ?
++			Math.max( 0, options.maxHeight - nonContentHeight ) :
++			"none";
++
++		if ( options.height === "auto" ) {
++			this.element.css({
++				minHeight: minContentHeight,
++				maxHeight: maxContentHeight,
++				height: "auto"
++			});
++		} else {
++			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
++		}
++
++		if (this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
++		}
++	},
++
++	_blockFrames: function() {
++		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
++			var iframe = $( this );
++
++			return $( "<div>" )
++				.css({
++					position: "absolute",
++					width: iframe.outerWidth(),
++					height: iframe.outerHeight()
++				})
++				.appendTo( iframe.parent() )
++				.offset( iframe.offset() )[0];
++		});
++	},
++
++	_unblockFrames: function() {
++		if ( this.iframeBlocks ) {
++			this.iframeBlocks.remove();
++			delete this.iframeBlocks;
++		}
++	},
++
++	_allowInteraction: function( event ) {
++		if ( $( event.target ).closest(".ui-dialog").length ) {
++			return true;
++		}
++
++		// TODO: Remove hack when datepicker implements
++		// the .ui-front logic (#8989)
++		return !!$( event.target ).closest(".ui-datepicker").length;
++	},
++
++	_createOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		var that = this,
++			widgetFullName = this.widgetFullName;
++		if ( !$.ui.dialog.overlayInstances ) {
++			// Prevent use of anchors and inputs.
++			// We use a delay in case the overlay is created from an
++			// event that we're going to be cancelling. (#2804)
++			this._delay(function() {
++				// Handle .dialog().dialog("close") (#4065)
++				if ( $.ui.dialog.overlayInstances ) {
++					this.document.bind( "focusin.dialog", function( event ) {
++						if ( !that._allowInteraction( event ) ) {
++							event.preventDefault();
++							$(".ui-dialog:visible:last .ui-dialog-content")
++								.data( widgetFullName )._focusTabbable();
++						}
++					});
++				}
++			});
++		}
++
++		this.overlay = $("<div>")
++			.addClass("ui-widget-overlay ui-front")
++			.appendTo( this._appendTo() );
++		this._on( this.overlay, {
++			mousedown: "_keepFocus"
++		});
++		$.ui.dialog.overlayInstances++;
++	},
++
++	_destroyOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		if ( this.overlay ) {
++			$.ui.dialog.overlayInstances--;
++
++			if ( !$.ui.dialog.overlayInstances ) {
++				this.document.unbind( "focusin.dialog" );
++			}
++			this.overlay.remove();
++			this.overlay = null;
++		}
++	}
++});
++
++$.ui.dialog.overlayInstances = 0;
++
++// DEPRECATED
++if ( $.uiBackCompat !== false ) {
++	// position option with array notation
++	// just override with old implementation
++	$.widget( "ui.dialog", $.ui.dialog, {
++		_position: function() {
++			var position = this.options.position,
++				myAt = [],
++				offset = [ 0, 0 ],
++				isVisible;
++
++			if ( position ) {
++				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
++					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
++					if ( myAt.length === 1 ) {
++						myAt[1] = myAt[0];
++					}
++
++					$.each( [ "left", "top" ], function( i, offsetPosition ) {
++						if ( +myAt[ i ] === myAt[ i ] ) {
++							offset[ i ] = myAt[ i ];
++							myAt[ i ] = offsetPosition;
++						}
++					});
++
++					position = {
++						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
++							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
++						at: myAt.join(" ")
++					};
++				}
++
++				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
++			} else {
++				position = $.ui.dialog.prototype.options.position;
++			}
++
++			// need to show the dialog to get the actual offset in the position plugin
++			isVisible = this.uiDialog.is(":visible");
++			if ( !isVisible ) {
++				this.uiDialog.show();
++			}
++			this.uiDialog.position( position );
++			if ( !isVisible ) {
++				this.uiDialog.hide();
++			}
++		}
++	});
++}
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.autocomplete.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.autocomplete.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.autocomplete.js	(revision 15487)
+@@ -0,0 +1,610 @@
++/*!
++ * jQuery UI Autocomplete 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/autocomplete/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.position.js
++ *	jquery.ui.menu.js
++ */
++(function( $, undefined ) {
++
++// used to prevent race conditions with remote data sources
++var requestIndex = 0;
++
++$.widget( "ui.autocomplete", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	options: {
++		appendTo: null,
++		autoFocus: false,
++		delay: 300,
++		minLength: 1,
++		position: {
++			my: "left top",
++			at: "left bottom",
++			collision: "none"
++		},
++		source: null,
++
++		// callbacks
++		change: null,
++		close: null,
++		focus: null,
++		open: null,
++		response: null,
++		search: null,
++		select: null
++	},
++
++	pending: 0,
++
++	_create: function() {
++		// Some browsers only repeat keydown events, not keypress events,
++		// so we use the suppressKeyPress flag to determine if we've already
++		// handled the keydown event. #7269
++		// Unfortunately the code for & in keypress is the same as the up arrow,
++		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
++		// events when we know the keydown event was used to modify the
++		// search term. #7799
++		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
++			nodeName = this.element[0].nodeName.toLowerCase(),
++			isTextarea = nodeName === "textarea",
++			isInput = nodeName === "input";
++
++		this.isMultiLine =
++			// Textareas are always multi-line
++			isTextarea ? true :
++			// Inputs are always single-line, even if inside a contentEditable element
++			// IE also treats inputs as contentEditable
++			isInput ? false :
++			// All other element types are determined by whether or not they're contentEditable
++			this.element.prop( "isContentEditable" );
++
++		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
++		this.isNewMenu = true;
++
++		this.element
++			.addClass( "ui-autocomplete-input" )
++			.attr( "autocomplete", "off" );
++
++		this._on( this.element, {
++			keydown: function( event ) {
++				/*jshint maxcomplexity:15*/
++				if ( this.element.prop( "readOnly" ) ) {
++					suppressKeyPress = true;
++					suppressInput = true;
++					suppressKeyPressRepeat = true;
++					return;
++				}
++
++				suppressKeyPress = false;
++				suppressInput = false;
++				suppressKeyPressRepeat = false;
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					suppressKeyPress = true;
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					suppressKeyPress = true;
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					suppressKeyPress = true;
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					suppressKeyPress = true;
++					this._keyEvent( "next", event );
++					break;
++				case keyCode.ENTER:
++				case keyCode.NUMPAD_ENTER:
++					// when menu is open and has focus
++					if ( this.menu.active ) {
++						// #6055 - Opera still allows the keypress to occur
++						// which causes forms to submit
++						suppressKeyPress = true;
++						event.preventDefault();
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.TAB:
++					if ( this.menu.active ) {
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.ESCAPE:
++					if ( this.menu.element.is( ":visible" ) ) {
++						this._value( this.term );
++						this.close( event );
++						// Different browsers have different default behavior for escape
++						// Single press can mean undo or clear
++						// Double press in IE means clear the whole form
++						event.preventDefault();
++					}
++					break;
++				default:
++					suppressKeyPressRepeat = true;
++					// search timeout should be triggered before the input value is changed
++					this._searchTimeout( event );
++					break;
++				}
++			},
++			keypress: function( event ) {
++				if ( suppressKeyPress ) {
++					suppressKeyPress = false;
++					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++						event.preventDefault();
++					}
++					return;
++				}
++				if ( suppressKeyPressRepeat ) {
++					return;
++				}
++
++				// replicate some key handlers to allow them to repeat in Firefox and Opera
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					this._keyEvent( "next", event );
++					break;
++				}
++			},
++			input: function( event ) {
++				if ( suppressInput ) {
++					suppressInput = false;
++					event.preventDefault();
++					return;
++				}
++				this._searchTimeout( event );
++			},
++			focus: function() {
++				this.selectedItem = null;
++				this.previous = this._value();
++			},
++			blur: function( event ) {
++				if ( this.cancelBlur ) {
++					delete this.cancelBlur;
++					return;
++				}
++
++				clearTimeout( this.searching );
++				this.close( event );
++				this._change( event );
++			}
++		});
++
++		this._initSource();
++		this.menu = $( "<ul>" )
++			.addClass( "ui-autocomplete ui-front" )
++			.appendTo( this._appendTo() )
++			.menu({
++				// disable ARIA support, the live region takes care of that
++				role: null
++			})
++			.hide()
++			.data( "ui-menu" );
++
++		this._on( this.menu.element, {
++			mousedown: function( event ) {
++				// prevent moving focus out of the text field
++				event.preventDefault();
++
++				// IE doesn't prevent moving focus even with event.preventDefault()
++				// so we set a flag to know when we should ignore the blur event
++				this.cancelBlur = true;
++				this._delay(function() {
++					delete this.cancelBlur;
++				});
++
++				// clicking on the scrollbar causes focus to shift to the body
++				// but we can't detect a mouseup or a click immediately afterward
++				// so we have to track the next mousedown and close the menu if
++				// the user clicks somewhere outside of the autocomplete
++				var menuElement = this.menu.element[ 0 ];
++				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
++					this._delay(function() {
++						var that = this;
++						this.document.one( "mousedown", function( event ) {
++							if ( event.target !== that.element[ 0 ] &&
++									event.target !== menuElement &&
++									!$.contains( menuElement, event.target ) ) {
++								that.close();
++							}
++						});
++					});
++				}
++			},
++			menufocus: function( event, ui ) {
++				// support: Firefox
++				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
++				if ( this.isNewMenu ) {
++					this.isNewMenu = false;
++					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
++						this.menu.blur();
++
++						this.document.one( "mousemove", function() {
++							$( event.target ).trigger( event.originalEvent );
++						});
++
++						return;
++					}
++				}
++
++				var item = ui.item.data( "ui-autocomplete-item" );
++				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
++					// use value to match what will end up in the input, if it was a key event
++					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
++						this._value( item.value );
++					}
++				} else {
++					// Normally the input is populated with the item's value as the
++					// menu is navigated, causing screen readers to notice a change and
++					// announce the item. Since the focus event was canceled, this doesn't
++					// happen, so we update the live region so that screen readers can
++					// still notice the change and announce it.
++					this.liveRegion.text( item.value );
++				}
++			},
++			menuselect: function( event, ui ) {
++				var item = ui.item.data( "ui-autocomplete-item" ),
++					previous = this.previous;
++
++				// only trigger when focus was lost (click on menu)
++				if ( this.element[0] !== this.document[0].activeElement ) {
++					this.element.focus();
++					this.previous = previous;
++					// #6109 - IE triggers two focus events and the second
++					// is asynchronous, so we need to reset the previous
++					// term synchronously and asynchronously :-(
++					this._delay(function() {
++						this.previous = previous;
++						this.selectedItem = item;
++					});
++				}
++
++				if ( false !== this._trigger( "select", event, { item: item } ) ) {
++					this._value( item.value );
++				}
++				// reset the term after the select event
++				// this allows custom select handling to work properly
++				this.term = this._value();
++
++				this.close( event );
++				this.selectedItem = item;
++			}
++		});
++
++		this.liveRegion = $( "<span>", {
++				role: "status",
++				"aria-live": "polite"
++			})
++			.addClass( "ui-helper-hidden-accessible" )
++			.insertBefore( this.element );
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_destroy: function() {
++		clearTimeout( this.searching );
++		this.element
++			.removeClass( "ui-autocomplete-input" )
++			.removeAttr( "autocomplete" );
++		this.menu.element.remove();
++		this.liveRegion.remove();
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "source" ) {
++			this._initSource();
++		}
++		if ( key === "appendTo" ) {
++			this.menu.element.appendTo( this._appendTo() );
++		}
++		if ( key === "disabled" && value && this.xhr ) {
++			this.xhr.abort();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++
++		if ( element ) {
++			element = element.jquery || element.nodeType ?
++				$( element ) :
++				this.document.find( element ).eq( 0 );
++		}
++
++		if ( !element ) {
++			element = this.element.closest( ".ui-front" );
++		}
++
++		if ( !element.length ) {
++			element = this.document[0].body;
++		}
++
++		return element;
++	},
++
++	_initSource: function() {
++		var array, url,
++			that = this;
++		if ( $.isArray(this.options.source) ) {
++			array = this.options.source;
++			this.source = function( request, response ) {
++				response( $.ui.autocomplete.filter( array, request.term ) );
++			};
++		} else if ( typeof this.options.source === "string" ) {
++			url = this.options.source;
++			this.source = function( request, response ) {
++				if ( that.xhr ) {
++					that.xhr.abort();
++				}
++				that.xhr = $.ajax({
++					url: url,
++					data: request,
++					dataType: "json",
++					success: function( data ) {
++						response( data );
++					},
++					error: function() {
++						response( [] );
++					}
++				});
++			};
++		} else {
++			this.source = this.options.source;
++		}
++	},
++
++	_searchTimeout: function( event ) {
++		clearTimeout( this.searching );
++		this.searching = this._delay(function() {
++			// only search if the value has changed
++			if ( this.term !== this._value() ) {
++				this.selectedItem = null;
++				this.search( null, event );
++			}
++		}, this.options.delay );
++	},
++
++	search: function( value, event ) {
++		value = value != null ? value : this._value();
++
++		// always save the actual value, not the one passed as an argument
++		this.term = this._value();
++
++		if ( value.length < this.options.minLength ) {
++			return this.close( event );
++		}
++
++		if ( this._trigger( "search", event ) === false ) {
++			return;
++		}
++
++		return this._search( value );
++	},
++
++	_search: function( value ) {
++		this.pending++;
++		this.element.addClass( "ui-autocomplete-loading" );
++		this.cancelSearch = false;
++
++		this.source( { term: value }, this._response() );
++	},
++
++	_response: function() {
++		var that = this,
++			index = ++requestIndex;
++
++		return function( content ) {
++			if ( index === requestIndex ) {
++				that.__response( content );
++			}
++
++			that.pending--;
++			if ( !that.pending ) {
++				that.element.removeClass( "ui-autocomplete-loading" );
++			}
++		};
++	},
++
++	__response: function( content ) {
++		if ( content ) {
++			content = this._normalize( content );
++		}
++		this._trigger( "response", null, { content: content } );
++		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
++			this._suggest( content );
++			this._trigger( "open" );
++		} else {
++			// use ._close() instead of .close() so we don't cancel future searches
++			this._close();
++		}
++	},
++
++	close: function( event ) {
++		this.cancelSearch = true;
++		this._close( event );
++	},
++
++	_close: function( event ) {
++		if ( this.menu.element.is( ":visible" ) ) {
++			this.menu.element.hide();
++			this.menu.blur();
++			this.isNewMenu = true;
++			this._trigger( "close", event );
++		}
++	},
++
++	_change: function( event ) {
++		if ( this.previous !== this._value() ) {
++			this._trigger( "change", event, { item: this.selectedItem } );
++		}
++	},
++
++	_normalize: function( items ) {
++		// assume all items have the right format when the first item is complete
++		if ( items.length && items[0].label && items[0].value ) {
++			return items;
++		}
++		return $.map( items, function( item ) {
++			if ( typeof item === "string" ) {
++				return {
++					label: item,
++					value: item
++				};
++			}
++			return $.extend({
++				label: item.label || item.value,
++				value: item.value || item.label
++			}, item );
++		});
++	},
++
++	_suggest: function( items ) {
++		var ul = this.menu.element.empty();
++		this._renderMenu( ul, items );
++		this.isNewMenu = true;
++		this.menu.refresh();
++
++		// size and position menu
++		ul.show();
++		this._resizeMenu();
++		ul.position( $.extend({
++			of: this.element
++		}, this.options.position ));
++
++		if ( this.options.autoFocus ) {
++			this.menu.next();
++		}
++	},
++
++	_resizeMenu: function() {
++		var ul = this.menu.element;
++		ul.outerWidth( Math.max(
++			// Firefox wraps long text (possibly a rounding bug)
++			// so we add 1px to avoid the wrapping (#7513)
++			ul.width( "" ).outerWidth() + 1,
++			this.element.outerWidth()
++		) );
++	},
++
++	_renderMenu: function( ul, items ) {
++		var that = this;
++		$.each( items, function( index, item ) {
++			that._renderItemData( ul, item );
++		});
++	},
++
++	_renderItemData: function( ul, item ) {
++		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
++	},
++
++	_renderItem: function( ul, item ) {
++		return $( "<li>" )
++			.append( $( "<a>" ).text( item.label ) )
++			.appendTo( ul );
++	},
++
++	_move: function( direction, event ) {
++		if ( !this.menu.element.is( ":visible" ) ) {
++			this.search( null, event );
++			return;
++		}
++		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
++				this.menu.isLastItem() && /^next/.test( direction ) ) {
++			this._value( this.term );
++			this.menu.blur();
++			return;
++		}
++		this.menu[ direction ]( event );
++	},
++
++	widget: function() {
++		return this.menu.element;
++	},
++
++	_value: function() {
++		return this.valueMethod.apply( this.element, arguments );
++	},
++
++	_keyEvent: function( keyEvent, event ) {
++		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++			this._move( keyEvent, event );
++
++			// prevents moving cursor to beginning/end of the text field in some browsers
++			event.preventDefault();
++		}
++	}
++});
++
++$.extend( $.ui.autocomplete, {
++	escapeRegex: function( value ) {
++		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
++	},
++	filter: function(array, term) {
++		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
++		return $.grep( array, function(value) {
++			return matcher.test( value.label || value.value || value );
++		});
++	}
++});
++
++
++// live region extension, adding a `messages` option
++// NOTE: This is an experimental API. We are still investigating
++// a full solution for string manipulation and internationalization.
++$.widget( "ui.autocomplete", $.ui.autocomplete, {
++	options: {
++		messages: {
++			noResults: "No search results.",
++			results: function( amount ) {
++				return amount + ( amount > 1 ? " results are" : " result is" ) +
++					" available, use up and down arrow keys to navigate.";
++			}
++		}
++	},
++
++	__response: function( content ) {
++		var message;
++		this._superApply( arguments );
++		if ( this.options.disabled || this.cancelSearch ) {
++			return;
++		}
++		if ( content && content.length ) {
++			message = this.options.messages.results( content.length );
++		} else {
++			message = this.options.messages.noResults;
++		}
++		this.liveRegion.text( message );
++	}
++});
++
++}( jQuery ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-highlight.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-highlight.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-highlight.js	(revision 15487)
+@@ -0,0 +1,50 @@
++/*!
++ * jQuery UI Effects Highlight 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/highlight-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.highlight = function( o, done ) {
++	var elem = $( this ),
++		props = [ "backgroundImage", "backgroundColor", "opacity" ],
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		animation = {
++			backgroundColor: elem.css( "backgroundColor" )
++		};
++
++	if (mode === "hide") {
++		animation.opacity = 0;
++	}
++
++	$.effects.save( elem, props );
++
++	elem
++		.show()
++		.css({
++			backgroundImage: "none",
++			backgroundColor: o.color || "#ffff99"
++		})
++		.animate( animation, {
++			queue: false,
++			duration: o.duration,
++			easing: o.easing,
++			complete: function() {
++				if ( mode === "hide" ) {
++					elem.hide();
++				}
++				$.effects.restore( elem, props );
++				done();
++			}
++		});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.selectable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.selectable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.selectable.js	(revision 15487)
+@@ -0,0 +1,277 @@
++/*!
++ * jQuery UI Selectable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/selectable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.selectable", $.ui.mouse, {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoRefresh: true,
++		distance: 0,
++		filter: "*",
++		tolerance: "touch",
++
++		// callbacks
++		selected: null,
++		selecting: null,
++		start: null,
++		stop: null,
++		unselected: null,
++		unselecting: null
++	},
++	_create: function() {
++		var selectees,
++			that = this;
++
++		this.element.addClass("ui-selectable");
++
++		this.dragged = false;
++
++		// cache selectee children based on filter
++		this.refresh = function() {
++			selectees = $(that.options.filter, that.element[0]);
++			selectees.addClass("ui-selectee");
++			selectees.each(function() {
++				var $this = $(this),
++					pos = $this.offset();
++				$.data(this, "selectable-item", {
++					element: this,
++					$element: $this,
++					left: pos.left,
++					top: pos.top,
++					right: pos.left + $this.outerWidth(),
++					bottom: pos.top + $this.outerHeight(),
++					startselected: false,
++					selected: $this.hasClass("ui-selected"),
++					selecting: $this.hasClass("ui-selecting"),
++					unselecting: $this.hasClass("ui-unselecting")
++				});
++			});
++		};
++		this.refresh();
++
++		this.selectees = selectees.addClass("ui-selectee");
++
++		this._mouseInit();
++
++		this.helper = $("<div class='ui-selectable-helper'></div>");
++	},
++
++	_destroy: function() {
++		this.selectees
++			.removeClass("ui-selectee")
++			.removeData("selectable-item");
++		this.element
++			.removeClass("ui-selectable ui-selectable-disabled");
++		this._mouseDestroy();
++	},
++
++	_mouseStart: function(event) {
++		var that = this,
++			options = this.options;
++
++		this.opos = [event.pageX, event.pageY];
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		this.selectees = $(options.filter, this.element[0]);
++
++		this._trigger("start", event);
++
++		$(options.appendTo).append(this.helper);
++		// position helper (lasso)
++		this.helper.css({
++			"left": event.pageX,
++			"top": event.pageY,
++			"width": 0,
++			"height": 0
++		});
++
++		if (options.autoRefresh) {
++			this.refresh();
++		}
++
++		this.selectees.filter(".ui-selected").each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.startselected = true;
++			if (!event.metaKey && !event.ctrlKey) {
++				selectee.$element.removeClass("ui-selected");
++				selectee.selected = false;
++				selectee.$element.addClass("ui-unselecting");
++				selectee.unselecting = true;
++				// selectable UNSELECTING callback
++				that._trigger("unselecting", event, {
++					unselecting: selectee.element
++				});
++			}
++		});
++
++		$(event.target).parents().addBack().each(function() {
++			var doSelect,
++				selectee = $.data(this, "selectable-item");
++			if (selectee) {
++				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
++				selectee.$element
++					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
++					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
++				selectee.unselecting = !doSelect;
++				selectee.selecting = doSelect;
++				selectee.selected = doSelect;
++				// selectable (UN)SELECTING callback
++				if (doSelect) {
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				} else {
++					that._trigger("unselecting", event, {
++						unselecting: selectee.element
++					});
++				}
++				return false;
++			}
++		});
++
++	},
++
++	_mouseDrag: function(event) {
++
++		this.dragged = true;
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		var tmp,
++			that = this,
++			options = this.options,
++			x1 = this.opos[0],
++			y1 = this.opos[1],
++			x2 = event.pageX,
++			y2 = event.pageY;
++
++		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
++		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
++		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
++
++		this.selectees.each(function() {
++			var selectee = $.data(this, "selectable-item"),
++				hit = false;
++
++			//prevent helper from being selected if appendTo: selectable
++			if (!selectee || selectee.element === that.element[0]) {
++				return;
++			}
++
++			if (options.tolerance === "touch") {
++				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
++			} else if (options.tolerance === "fit") {
++				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
++			}
++
++			if (hit) {
++				// SELECT
++				if (selectee.selected) {
++					selectee.$element.removeClass("ui-selected");
++					selectee.selected = false;
++				}
++				if (selectee.unselecting) {
++					selectee.$element.removeClass("ui-unselecting");
++					selectee.unselecting = false;
++				}
++				if (!selectee.selecting) {
++					selectee.$element.addClass("ui-selecting");
++					selectee.selecting = true;
++					// selectable SELECTING callback
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				}
++			} else {
++				// UNSELECT
++				if (selectee.selecting) {
++					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						selectee.$element.addClass("ui-selected");
++						selectee.selected = true;
++					} else {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						if (selectee.startselected) {
++							selectee.$element.addClass("ui-unselecting");
++							selectee.unselecting = true;
++						}
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++				if (selectee.selected) {
++					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
++						selectee.$element.removeClass("ui-selected");
++						selectee.selected = false;
++
++						selectee.$element.addClass("ui-unselecting");
++						selectee.unselecting = true;
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++			}
++		});
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++		var that = this;
++
++		this.dragged = false;
++
++		$(".ui-unselecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-unselecting");
++			selectee.unselecting = false;
++			selectee.startselected = false;
++			that._trigger("unselected", event, {
++				unselected: selectee.element
++			});
++		});
++		$(".ui-selecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
++			selectee.selecting = false;
++			selectee.selected = true;
++			selectee.startselected = true;
++			that._trigger("selected", event, {
++				selected: selectee.element
++			});
++		});
++		this._trigger("stop", event);
++
++		this.helper.remove();
++
++		return false;
++	}
++
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.menu.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.menu.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.menu.js	(revision 15487)
+@@ -0,0 +1,621 @@
++/*!
++ * jQuery UI Menu 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/menu/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.position.js
++ */
++(function( $, undefined ) {
++
++$.widget( "ui.menu", {
++	version: "1.10.3",
++	defaultElement: "<ul>",
++	delay: 300,
++	options: {
++		icons: {
++			submenu: "ui-icon-carat-1-e"
++		},
++		menus: "ul",
++		position: {
++			my: "left top",
++			at: "right top"
++		},
++		role: "menu",
++
++		// callbacks
++		blur: null,
++		focus: null,
++		select: null
++	},
++
++	_create: function() {
++		this.activeMenu = this.element;
++		// flag used to prevent firing of the click handler
++		// as the event bubbles up through nested menus
++		this.mouseHandled = false;
++		this.element
++			.uniqueId()
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
++			.attr({
++				role: this.options.role,
++				tabIndex: 0
++			})
++			// need to catch all clicks on disabled menu
++			// not possible through _on
++			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
++				if ( this.options.disabled ) {
++					event.preventDefault();
++				}
++			}, this ));
++
++		if ( this.options.disabled ) {
++			this.element
++				.addClass( "ui-state-disabled" )
++				.attr( "aria-disabled", "true" );
++		}
++
++		this._on({
++			// Prevent focus from sticking to links inside menu after clicking
++			// them (focus should always stay on UL during navigation).
++			"mousedown .ui-menu-item > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-state-disabled > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-menu-item:has(a)": function( event ) {
++				var target = $( event.target ).closest( ".ui-menu-item" );
++				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
++					this.mouseHandled = true;
++
++					this.select( event );
++					// Open submenu on click
++					if ( target.has( ".ui-menu" ).length ) {
++						this.expand( event );
++					} else if ( !this.element.is( ":focus" ) ) {
++						// Redirect focus to the menu
++						this.element.trigger( "focus", [ true ] );
++
++						// If the active item is on the top level, let it stay active.
++						// Otherwise, blur the active item since it is no longer visible.
++						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
++							clearTimeout( this.timer );
++						}
++					}
++				}
++			},
++			"mouseenter .ui-menu-item": function( event ) {
++				var target = $( event.currentTarget );
++				// Remove ui-state-active class from siblings of the newly focused menu item
++				// to avoid a jump caused by adjacent elements both having a class with a border
++				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
++				this.focus( event, target );
++			},
++			mouseleave: "collapseAll",
++			"mouseleave .ui-menu": "collapseAll",
++			focus: function( event, keepActiveItem ) {
++				// If there's already an active item, keep it active
++				// If not, activate the first item
++				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
++
++				if ( !keepActiveItem ) {
++					this.focus( event, item );
++				}
++			},
++			blur: function( event ) {
++				this._delay(function() {
++					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
++						this.collapseAll( event );
++					}
++				});
++			},
++			keydown: "_keydown"
++		});
++
++		this.refresh();
++
++		// Clicks outside of a menu collapse any open menus
++		this._on( this.document, {
++			click: function( event ) {
++				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
++					this.collapseAll( event );
++				}
++
++				// Reset the mouseHandled flag
++				this.mouseHandled = false;
++			}
++		});
++	},
++
++	_destroy: function() {
++		// Destroy (sub)menus
++		this.element
++			.removeAttr( "aria-activedescendant" )
++			.find( ".ui-menu" ).addBack()
++				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
++				.removeAttr( "role" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "aria-labelledby" )
++				.removeAttr( "aria-expanded" )
++				.removeAttr( "aria-hidden" )
++				.removeAttr( "aria-disabled" )
++				.removeUniqueId()
++				.show();
++
++		// Destroy menu items
++		this.element.find( ".ui-menu-item" )
++			.removeClass( "ui-menu-item" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-disabled" )
++			.children( "a" )
++				.removeUniqueId()
++				.removeClass( "ui-corner-all ui-state-hover" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "role" )
++				.removeAttr( "aria-haspopup" )
++				.children().each( function() {
++					var elem = $( this );
++					if ( elem.data( "ui-menu-submenu-carat" ) ) {
++						elem.remove();
++					}
++				});
++
++		// Destroy menu dividers
++		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:20*/
++		var match, prev, character, skip, regex,
++			preventDefault = true;
++
++		function escape( value ) {
++			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
++		}
++
++		switch ( event.keyCode ) {
++		case $.ui.keyCode.PAGE_UP:
++			this.previousPage( event );
++			break;
++		case $.ui.keyCode.PAGE_DOWN:
++			this.nextPage( event );
++			break;
++		case $.ui.keyCode.HOME:
++			this._move( "first", "first", event );
++			break;
++		case $.ui.keyCode.END:
++			this._move( "last", "last", event );
++			break;
++		case $.ui.keyCode.UP:
++			this.previous( event );
++			break;
++		case $.ui.keyCode.DOWN:
++			this.next( event );
++			break;
++		case $.ui.keyCode.LEFT:
++			this.collapse( event );
++			break;
++		case $.ui.keyCode.RIGHT:
++			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
++				this.expand( event );
++			}
++			break;
++		case $.ui.keyCode.ENTER:
++		case $.ui.keyCode.SPACE:
++			this._activate( event );
++			break;
++		case $.ui.keyCode.ESCAPE:
++			this.collapse( event );
++			break;
++		default:
++			preventDefault = false;
++			prev = this.previousFilter || "";
++			character = String.fromCharCode( event.keyCode );
++			skip = false;
++
++			clearTimeout( this.filterTimer );
++
++			if ( character === prev ) {
++				skip = true;
++			} else {
++				character = prev + character;
++			}
++
++			regex = new RegExp( "^" + escape( character ), "i" );
++			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++				return regex.test( $( this ).children( "a" ).text() );
++			});
++			match = skip && match.index( this.active.next() ) !== -1 ?
++				this.active.nextAll( ".ui-menu-item" ) :
++				match;
++
++			// If no matches on the current filter, reset to the last character pressed
++			// to move down the menu to the first item that starts with that character
++			if ( !match.length ) {
++				character = String.fromCharCode( event.keyCode );
++				regex = new RegExp( "^" + escape( character ), "i" );
++				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++					return regex.test( $( this ).children( "a" ).text() );
++				});
++			}
++
++			if ( match.length ) {
++				this.focus( event, match );
++				if ( match.length > 1 ) {
++					this.previousFilter = character;
++					this.filterTimer = this._delay(function() {
++						delete this.previousFilter;
++					}, 1000 );
++				} else {
++					delete this.previousFilter;
++				}
++			} else {
++				delete this.previousFilter;
++			}
++		}
++
++		if ( preventDefault ) {
++			event.preventDefault();
++		}
++	},
++
++	_activate: function( event ) {
++		if ( !this.active.is( ".ui-state-disabled" ) ) {
++			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
++				this.expand( event );
++			} else {
++				this.select( event );
++			}
++		}
++	},
++
++	refresh: function() {
++		var menus,
++			icon = this.options.icons.submenu,
++			submenus = this.element.find( this.options.menus );
++
++		// Initialize nested menus
++		submenus.filter( ":not(.ui-menu)" )
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.hide()
++			.attr({
++				role: this.options.role,
++				"aria-hidden": "true",
++				"aria-expanded": "false"
++			})
++			.each(function() {
++				var menu = $( this ),
++					item = menu.prev( "a" ),
++					submenuCarat = $( "<span>" )
++						.addClass( "ui-menu-icon ui-icon " + icon )
++						.data( "ui-menu-submenu-carat", true );
++
++				item
++					.attr( "aria-haspopup", "true" )
++					.prepend( submenuCarat );
++				menu.attr( "aria-labelledby", item.attr( "id" ) );
++			});
++
++		menus = submenus.add( this.element );
++
++		// Don't refresh list items that are already adapted
++		menus.children( ":not(.ui-menu-item):has(a)" )
++			.addClass( "ui-menu-item" )
++			.attr( "role", "presentation" )
++			.children( "a" )
++				.uniqueId()
++				.addClass( "ui-corner-all" )
++				.attr({
++					tabIndex: -1,
++					role: this._itemRole()
++				});
++
++		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
++		menus.children( ":not(.ui-menu-item)" ).each(function() {
++			var item = $( this );
++			// hyphen, em dash, en dash
++			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
++				item.addClass( "ui-widget-content ui-menu-divider" );
++			}
++		});
++
++		// Add aria-disabled attribute to any disabled menu item
++		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
++
++		// If the active item has been removed, blur the menu
++		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			this.blur();
++		}
++	},
++
++	_itemRole: function() {
++		return {
++			menu: "menuitem",
++			listbox: "option"
++		}[ this.options.role ];
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "icons" ) {
++			this.element.find( ".ui-menu-icon" )
++				.removeClass( this.options.icons.submenu )
++				.addClass( value.submenu );
++		}
++		this._super( key, value );
++	},
++
++	focus: function( event, item ) {
++		var nested, focused;
++		this.blur( event, event && event.type === "focus" );
++
++		this._scrollIntoView( item );
++
++		this.active = item.first();
++		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
++		// Only update aria-activedescendant if there's a role
++		// otherwise we assume focus is managed elsewhere
++		if ( this.options.role ) {
++			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
++		}
++
++		// Highlight active parent menu item, if any
++		this.active
++			.parent()
++			.closest( ".ui-menu-item" )
++			.children( "a:first" )
++			.addClass( "ui-state-active" );
++
++		if ( event && event.type === "keydown" ) {
++			this._close();
++		} else {
++			this.timer = this._delay(function() {
++				this._close();
++			}, this.delay );
++		}
++
++		nested = item.children( ".ui-menu" );
++		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
++			this._startOpening(nested);
++		}
++		this.activeMenu = item.parent();
++
++		this._trigger( "focus", event, { item: item } );
++	},
++
++	_scrollIntoView: function( item ) {
++		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
++		if ( this._hasScroll() ) {
++			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
++			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
++			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
++			scroll = this.activeMenu.scrollTop();
++			elementHeight = this.activeMenu.height();
++			itemHeight = item.height();
++
++			if ( offset < 0 ) {
++				this.activeMenu.scrollTop( scroll + offset );
++			} else if ( offset + itemHeight > elementHeight ) {
++				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
++			}
++		}
++	},
++
++	blur: function( event, fromFocus ) {
++		if ( !fromFocus ) {
++			clearTimeout( this.timer );
++		}
++
++		if ( !this.active ) {
++			return;
++		}
++
++		this.active.children( "a" ).removeClass( "ui-state-focus" );
++		this.active = null;
++
++		this._trigger( "blur", event, { item: this.active } );
++	},
++
++	_startOpening: function( submenu ) {
++		clearTimeout( this.timer );
++
++		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
++		// shift in the submenu position when mousing over the carat icon
++		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
++			return;
++		}
++
++		this.timer = this._delay(function() {
++			this._close();
++			this._open( submenu );
++		}, this.delay );
++	},
++
++	_open: function( submenu ) {
++		var position = $.extend({
++			of: this.active
++		}, this.options.position );
++
++		clearTimeout( this.timer );
++		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
++			.hide()
++			.attr( "aria-hidden", "true" );
++
++		submenu
++			.show()
++			.removeAttr( "aria-hidden" )
++			.attr( "aria-expanded", "true" )
++			.position( position );
++	},
++
++	collapseAll: function( event, all ) {
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			// If we were passed an event, look for the submenu that contains the event
++			var currentMenu = all ? this.element :
++				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
++
++			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
++			if ( !currentMenu.length ) {
++				currentMenu = this.element;
++			}
++
++			this._close( currentMenu );
++
++			this.blur( event );
++			this.activeMenu = currentMenu;
++		}, this.delay );
++	},
++
++	// With no arguments, closes the currently active menu - if nothing is active
++	// it closes all menus.  If passed an argument, it will search for menus BELOW
++	_close: function( startMenu ) {
++		if ( !startMenu ) {
++			startMenu = this.active ? this.active.parent() : this.element;
++		}
++
++		startMenu
++			.find( ".ui-menu" )
++				.hide()
++				.attr( "aria-hidden", "true" )
++				.attr( "aria-expanded", "false" )
++			.end()
++			.find( "a.ui-state-active" )
++				.removeClass( "ui-state-active" );
++	},
++
++	collapse: function( event ) {
++		var newItem = this.active &&
++			this.active.parent().closest( ".ui-menu-item", this.element );
++		if ( newItem && newItem.length ) {
++			this._close();
++			this.focus( event, newItem );
++		}
++	},
++
++	expand: function( event ) {
++		var newItem = this.active &&
++			this.active
++				.children( ".ui-menu " )
++				.children( ".ui-menu-item" )
++				.first();
++
++		if ( newItem && newItem.length ) {
++			this._open( newItem.parent() );
++
++			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
++			this._delay(function() {
++				this.focus( event, newItem );
++			});
++		}
++	},
++
++	next: function( event ) {
++		this._move( "next", "first", event );
++	},
++
++	previous: function( event ) {
++		this._move( "prev", "last", event );
++	},
++
++	isFirstItem: function() {
++		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
++	},
++
++	isLastItem: function() {
++		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
++	},
++
++	_move: function( direction, filter, event ) {
++		var next;
++		if ( this.active ) {
++			if ( direction === "first" || direction === "last" ) {
++				next = this.active
++					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
++					.eq( -1 );
++			} else {
++				next = this.active
++					[ direction + "All" ]( ".ui-menu-item" )
++					.eq( 0 );
++			}
++		}
++		if ( !next || !next.length || !this.active ) {
++			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
++		}
++
++		this.focus( event, next );
++	},
++
++	nextPage: function( event ) {
++		var item, base, height;
++
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isLastItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.nextAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base - height < 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
++				[ !this.active ? "first" : "last" ]() );
++		}
++	},
++
++	previousPage: function( event ) {
++		var item, base, height;
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isFirstItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.prevAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base + height > 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
++		}
++	},
++
++	_hasScroll: function() {
++		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
++	},
++
++	select: function( event ) {
++		// TODO: It should never be possible to not have an active item at this
++		// point, but the tests don't trigger mouseenter before click.
++		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
++		var ui = { item: this.active };
++		if ( !this.active.has( ".ui-menu" ).length ) {
++			this.collapseAll( event, true );
++		}
++		this._trigger( "select", event, ui );
++	}
++});
++
++}( jQuery ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-bounce.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-bounce.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-bounce.js	(revision 15487)
+@@ -0,0 +1,113 @@
++/*!
++ * jQuery UI Effects Bounce 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/bounce-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.bounce = function( o, done ) {
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++
++		// defaults:
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		hide = mode === "hide",
++		show = mode === "show",
++		direction = o.direction || "up",
++		distance = o.distance,
++		times = o.times || 5,
++
++		// number of internal animations
++		anims = times * 2 + ( show || hide ? 1 : 0 ),
++		speed = o.duration / anims,
++		easing = o.easing,
++
++		// utility:
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ),
++		i,
++		upAnim,
++		downAnim,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	// Avoid touching opacity to prevent clearType and PNG issues in IE
++	if ( show || hide ) {
++		props.push( "opacity" );
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el ); // Create Wrapper
++
++	// default distance for the BIGGEST bounce is the outer Distance / 3
++	if ( !distance ) {
++		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
++	}
++
++	if ( show ) {
++		downAnim = { opacity: 1 };
++		downAnim[ ref ] = 0;
++
++		// if we are showing, force opacity 0 and set the initial position
++		// then do the "first" animation
++		el.css( "opacity", 0 )
++			.css( ref, motion ? -distance * 2 : distance * 2 )
++			.animate( downAnim, speed, easing );
++	}
++
++	// start at the smallest distance if we are hiding
++	if ( hide ) {
++		distance = distance / Math.pow( 2, times - 1 );
++	}
++
++	downAnim = {};
++	downAnim[ ref ] = 0;
++	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
++	for ( i = 0; i < times; i++ ) {
++		upAnim = {};
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing )
++			.animate( downAnim, speed, easing );
++
++		distance = hide ? distance * 2 : distance / 2;
++	}
++
++	// Last Bounce when Hiding
++	if ( hide ) {
++		upAnim = { opacity: 0 };
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing );
++	}
++
++	el.queue(function() {
++		if ( hide ) {
++			el.hide();
++		}
++		$.effects.restore( el, props );
++		$.effects.removeWrapper( el );
++		done();
++	});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-pulsate.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-pulsate.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-pulsate.js	(revision 15487)
+@@ -0,0 +1,63 @@
++/*!
++ * jQuery UI Effects Pulsate 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/pulsate-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.pulsate = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		showhide = ( show || mode === "hide" ),
++
++		// showing or hiding leaves of the "last" animation
++		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
++		duration = o.duration / anims,
++		animateTo = 0,
++		queue = elem.queue(),
++		queuelen = queue.length,
++		i;
++
++	if ( show || !elem.is(":visible")) {
++		elem.css( "opacity", 0 ).show();
++		animateTo = 1;
++	}
++
++	// anims - 1 opacity "toggles"
++	for ( i = 1; i < anims; i++ ) {
++		elem.animate({
++			opacity: animateTo
++		}, duration, o.easing );
++		animateTo = 1 - animateTo;
++	}
++
++	elem.animate({
++		opacity: animateTo
++	}, duration, o.easing);
++
++	elem.queue(function() {
++		if ( hide ) {
++			elem.hide();
++		}
++		done();
++	});
++
++	// We just queued up "anims" animations, we need to put them next in the queue
++	if ( queuelen > 1 ) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	elem.dequeue();
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.droppable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.droppable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.droppable.js	(revision 15487)
+@@ -0,0 +1,372 @@
++/*!
++ * jQuery UI Droppable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/droppable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.draggable.js
++ */
++(function( $, undefined ) {
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++$.widget("ui.droppable", {
++	version: "1.10.3",
++	widgetEventPrefix: "drop",
++	options: {
++		accept: "*",
++		activeClass: false,
++		addClasses: true,
++		greedy: false,
++		hoverClass: false,
++		scope: "default",
++		tolerance: "intersect",
++
++		// callbacks
++		activate: null,
++		deactivate: null,
++		drop: null,
++		out: null,
++		over: null
++	},
++	_create: function() {
++
++		var o = this.options,
++			accept = o.accept;
++
++		this.isover = false;
++		this.isout = true;
++
++		this.accept = $.isFunction(accept) ? accept : function(d) {
++			return d.is(accept);
++		};
++
++		//Store the droppable's proportions
++		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
++
++		// Add the reference and positions to the manager
++		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
++		$.ui.ddmanager.droppables[o.scope].push(this);
++
++		(o.addClasses && this.element.addClass("ui-droppable"));
++
++	},
++
++	_destroy: function() {
++		var i = 0,
++			drop = $.ui.ddmanager.droppables[this.options.scope];
++
++		for ( ; i < drop.length; i++ ) {
++			if ( drop[i] === this ) {
++				drop.splice(i, 1);
++			}
++		}
++
++		this.element.removeClass("ui-droppable ui-droppable-disabled");
++	},
++
++	_setOption: function(key, value) {
++
++		if(key === "accept") {
++			this.accept = $.isFunction(value) ? value : function(d) {
++				return d.is(value);
++			};
++		}
++		$.Widget.prototype._setOption.apply(this, arguments);
++	},
++
++	_activate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.addClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("activate", event, this.ui(draggable));
++		}
++	},
++
++	_deactivate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.removeClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("deactivate", event, this.ui(draggable));
++		}
++	},
++
++	_over: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.addClass(this.options.hoverClass);
++			}
++			this._trigger("over", event, this.ui(draggable));
++		}
++
++	},
++
++	_out: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("out", event, this.ui(draggable));
++		}
++
++	},
++
++	_drop: function(event,custom) {
++
++		var draggable = custom || $.ui.ddmanager.current,
++			childrenIntersection = false;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return false;
++		}
++
++		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
++			var inst = $.data(this, "ui-droppable");
++			if(
++				inst.options.greedy &&
++				!inst.options.disabled &&
++				inst.options.scope === draggable.options.scope &&
++				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
++				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
++			) { childrenIntersection = true; return false; }
++		});
++		if(childrenIntersection) {
++			return false;
++		}
++
++		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.activeClass) {
++				this.element.removeClass(this.options.activeClass);
++			}
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("drop", event, this.ui(draggable));
++			return this.element;
++		}
++
++		return false;
++
++	},
++
++	ui: function(c) {
++		return {
++			draggable: (c.currentItem || c.element),
++			helper: c.helper,
++			position: c.position,
++			offset: c.positionAbs
++		};
++	}
++
++});
++
++$.ui.intersect = function(draggable, droppable, toleranceMode) {
++
++	if (!droppable.offset) {
++		return false;
++	}
++
++	var draggableLeft, draggableTop,
++		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
++		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
++		l = droppable.offset.left, r = l + droppable.proportions.width,
++		t = droppable.offset.top, b = t + droppable.proportions.height;
++
++	switch (toleranceMode) {
++		case "fit":
++			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
++		case "intersect":
++			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
++				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
++				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
++		case "pointer":
++			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
++			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
++			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
++		case "touch":
++			return (
++				(y1 >= t && y1 <= b) ||	// Top edge touching
++				(y2 >= t && y2 <= b) ||	// Bottom edge touching
++				(y1 < t && y2 > b)		// Surrounded vertically
++			) && (
++				(x1 >= l && x1 <= r) ||	// Left edge touching
++				(x2 >= l && x2 <= r) ||	// Right edge touching
++				(x1 < l && x2 > r)		// Surrounded horizontally
++			);
++		default:
++			return false;
++		}
++
++};
++
++/*
++	This manager tracks offsets of draggables and droppables
++*/
++$.ui.ddmanager = {
++	current: null,
++	droppables: { "default": [] },
++	prepareOffsets: function(t, event) {
++
++		var i, j,
++			m = $.ui.ddmanager.droppables[t.options.scope] || [],
++			type = event ? event.type : null, // workaround for #2317
++			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
++
++		droppablesLoop: for (i = 0; i < m.length; i++) {
++
++			//No disabled and non-accepted
++			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
++				continue;
++			}
++
++			// Filter out elements in the current dragged item
++			for (j=0; j < list.length; j++) {
++				if(list[j] === m[i].element[0]) {
++					m[i].proportions.height = 0;
++					continue droppablesLoop;
++				}
++			}
++
++			m[i].visible = m[i].element.css("display") !== "none";
++			if(!m[i].visible) {
++				continue;
++			}
++
++			//Activate the droppable if used directly from draggables
++			if(type === "mousedown") {
++				m[i]._activate.call(m[i], event);
++			}
++
++			m[i].offset = m[i].element.offset();
++			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
++
++		}
++
++	},
++	drop: function(draggable, event) {
++
++		var dropped = false;
++		// Create a copy of the droppables in case the list changes during the drop (#9116)
++		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
++
++			if(!this.options) {
++				return;
++			}
++			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
++				dropped = this._drop.call(this, event) || dropped;
++			}
++
++			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++				this.isout = true;
++				this.isover = false;
++				this._deactivate.call(this, event);
++			}
++
++		});
++		return dropped;
++
++	},
++	dragStart: function( draggable, event ) {
++		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
++		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
++			if( !draggable.options.refreshPositions ) {
++				$.ui.ddmanager.prepareOffsets( draggable, event );
++			}
++		});
++	},
++	drag: function(draggable, event) {
++
++		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
++		if(draggable.options.refreshPositions) {
++			$.ui.ddmanager.prepareOffsets(draggable, event);
++		}
++
++		//Run through all droppables and check their positions based on specific tolerance options
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(this.options.disabled || this.greedyChild || !this.visible) {
++				return;
++			}
++
++			var parentInstance, scope, parent,
++				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
++				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
++			if(!c) {
++				return;
++			}
++
++			if (this.options.greedy) {
++				// find droppable parents with same scope
++				scope = this.options.scope;
++				parent = this.element.parents(":data(ui-droppable)").filter(function () {
++					return $.data(this, "ui-droppable").options.scope === scope;
++				});
++
++				if (parent.length) {
++					parentInstance = $.data(parent[0], "ui-droppable");
++					parentInstance.greedyChild = (c === "isover");
++				}
++			}
++
++			// we just moved into a greedy child
++			if (parentInstance && c === "isover") {
++				parentInstance.isover = false;
++				parentInstance.isout = true;
++				parentInstance._out.call(parentInstance, event);
++			}
++
++			this[c] = true;
++			this[c === "isout" ? "isover" : "isout"] = false;
++			this[c === "isover" ? "_over" : "_out"].call(this, event);
++
++			// we just moved out of a greedy child
++			if (parentInstance && c === "isout") {
++				parentInstance.isout = false;
++				parentInstance.isover = true;
++				parentInstance._over.call(parentInstance, event);
++			}
++		});
++
++	},
++	dragStop: function( draggable, event ) {
++		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
++		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
++		if( !draggable.options.refreshPositions ) {
++			$.ui.ddmanager.prepareOffsets( draggable, event );
++		}
++	}
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.draggable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.draggable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.draggable.js	(revision 15487)
+@@ -0,0 +1,958 @@
++/*!
++ * jQuery UI Draggable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/draggable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.draggable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "drag",
++	options: {
++		addClasses: true,
++		appendTo: "parent",
++		axis: false,
++		connectToSortable: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		iframeFix: false,
++		opacity: false,
++		refreshPositions: false,
++		revert: false,
++		revertDuration: 500,
++		scope: "default",
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		snap: false,
++		snapMode: "both",
++		snapTolerance: 20,
++		stack: false,
++		zIndex: false,
++
++		// callbacks
++		drag: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
++			this.element[0].style.position = "relative";
++		}
++		if (this.options.addClasses){
++			this.element.addClass("ui-draggable");
++		}
++		if (this.options.disabled){
++			this.element.addClass("ui-draggable-disabled");
++		}
++
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function(event) {
++
++		var o = this.options;
++
++		// among others, prevent a drag on a resizable-handle
++		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
++			return false;
++		}
++
++		//Quit if we're not on a valid handle
++		this.handle = this._getHandle(event);
++		if (!this.handle) {
++			return false;
++		}
++
++		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
++			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
++			.css({
++				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
++				position: "absolute", opacity: "0.001", zIndex: 1000
++			})
++			.css($(this).offset())
++			.appendTo("body");
++		});
++
++		return true;
++
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options;
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		this.helper.addClass("ui-draggable-dragging");
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		//If ddmanager is used for droppables, set the global draggable
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Store the helper's css position
++		this.cssPosition = this.helper.css( "position" );
++		this.scrollParent = this.helper.scrollParent();
++		this.offsetParent = this.helper.offsetParent();
++		this.offsetParentCssPosition = this.offsetParent.css( "position" );
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.positionAbs = this.element.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		//Reset scroll cache
++		this.offset.scroll = false;
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this.position = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Set a containment if given in the options
++		this._setContainment();
++
++		//Trigger event + callbacks
++		if(this._trigger("start", event) === false) {
++			this._clear();
++			return false;
++		}
++
++		//Recache the helper size
++		this._cacheHelperProportions();
++
++		//Prepare the droppable offsets
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++
++		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
++		if ( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStart(this, event);
++		}
++
++		return true;
++	},
++
++	_mouseDrag: function(event, noPropagation) {
++		// reset any necessary cached properties (see #5009)
++		if ( this.offsetParentCssPosition === "fixed" ) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Call plugins and callbacks and use the resulting position if something is returned
++		if (!noPropagation) {
++			var ui = this._uiHash();
++			if(this._trigger("drag", event, ui) === false) {
++				this._mouseUp({});
++				return false;
++			}
++			this.position = ui.position;
++		}
++
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		//If we are using droppables, inform the manager about the drop
++		var that = this,
++			dropped = false;
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			dropped = $.ui.ddmanager.drop(this, event);
++		}
++
++		//if a drop comes from outside (a sortable)
++		if(this.dropped) {
++			dropped = this.dropped;
++			this.dropped = false;
++		}
++
++		//if the original element is no longer in the DOM don't bother to continue (see #8269)
++		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
++			return false;
++		}
++
++		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
++			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
++				if(that._trigger("stop", event) !== false) {
++					that._clear();
++				}
++			});
++		} else {
++			if(this._trigger("stop", event) !== false) {
++				this._clear();
++			}
++		}
++
++		return false;
++	},
++
++	_mouseUp: function(event) {
++		//Remove frame helpers
++		$("div.ui-draggable-iframeFix").each(function() {
++			this.parentNode.removeChild(this);
++		});
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
++		if( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStop(this, event);
++		}
++
++		return $.ui.mouse.prototype._mouseUp.call(this, event);
++	},
++
++	cancel: function() {
++
++		if(this.helper.is(".ui-draggable-dragging")) {
++			this._mouseUp({});
++		} else {
++			this._clear();
++		}
++
++		return this;
++
++	},
++
++	_getHandle: function(event) {
++		return this.options.handle ?
++			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
++			true;
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
++
++		if(!helper.parents("body").length) {
++			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
++		}
++
++		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
++			helper.css("position", "absolute");
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++		//Get the offsetParent and cache its position
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		//This needs to be actually done for all browsers, since pageX/pageY includes this information
++		//Ugly IE fix
++		if((this.offsetParent[0] === document.body) ||
++			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.element.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.element.css("marginLeft"),10) || 0),
++			top: (parseInt(this.element.css("marginTop"),10) || 0),
++			right: (parseInt(this.element.css("marginRight"),10) || 0),
++			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var over, c, ce,
++			o = this.options;
++
++		if ( !o.containment ) {
++			this.containment = null;
++			return;
++		}
++
++		if ( o.containment === "window" ) {
++			this.containment = [
++				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
++				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
++				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
++				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment === "document") {
++			this.containment = [
++				0,
++				0,
++				$( document ).width() - this.helperProportions.width - this.margins.left,
++				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment.constructor === Array ) {
++			this.containment = o.containment;
++			return;
++		}
++
++		if ( o.containment === "parent" ) {
++			o.containment = this.helper[ 0 ].parentNode;
++		}
++
++		c = $( o.containment );
++		ce = c[ 0 ];
++
++		if( !ce ) {
++			return;
++		}
++
++		over = c.css( "overflow" ) !== "hidden";
++
++		this.containment = [
++			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
++			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
++			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
++			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
++		];
++		this.relative_container = c;
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var containment, co, top, left,
++			o = this.options,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
++			pageX = event.pageX,
++			pageY = event.pageY;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		// If we are not dragging yet, we won't check for options
++		if ( this.originalPosition ) {
++			if ( this.containment ) {
++				if ( this.relative_container ){
++					co = this.relative_container.offset();
++					containment = [
++						this.containment[ 0 ] + co.left,
++						this.containment[ 1 ] + co.top,
++						this.containment[ 2 ] + co.left,
++						this.containment[ 3 ] + co.top
++					];
++				}
++				else {
++					containment = this.containment;
++				}
++
++				if(event.pageX - this.offset.click.left < containment[0]) {
++					pageX = containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < containment[1]) {
++					pageY = containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > containment[2]) {
++					pageX = containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > containment[3]) {
++					pageY = containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
++				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
++				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
++				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																	// The absolute mouse position
++				this.offset.click.top	-												// Click offset (relative to the element)
++				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
++			),
++			left: (
++				pageX -																	// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
++			)
++		};
++
++	},
++
++	_clear: function() {
++		this.helper.removeClass("ui-draggable-dragging");
++		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
++			this.helper.remove();
++		}
++		this.helper = null;
++		this.cancelHelperRemoval = false;
++	},
++
++	// From now on bulk stuff - mainly helpers
++
++	_trigger: function(type, event, ui) {
++		ui = ui || this._uiHash();
++		$.ui.plugin.call(this, type, [event, ui]);
++		//The absolute position has to be recalculated after plugins
++		if(type === "drag") {
++			this.positionAbs = this._convertPositionTo("absolute");
++		}
++		return $.Widget.prototype._trigger.call(this, type, event, ui);
++	},
++
++	plugins: {},
++
++	_uiHash: function() {
++		return {
++			helper: this.helper,
++			position: this.position,
++			originalPosition: this.originalPosition,
++			offset: this.positionAbs
++		};
++	}
++
++});
++
++$.ui.plugin.add("draggable", "connectToSortable", {
++	start: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), o = inst.options,
++			uiSortable = $.extend({}, ui, { item: inst.element });
++		inst.sortables = [];
++		$(o.connectToSortable).each(function() {
++			var sortable = $.data(this, "ui-sortable");
++			if (sortable && !sortable.options.disabled) {
++				inst.sortables.push({
++					instance: sortable,
++					shouldRevert: sortable.options.revert
++				});
++				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
++				sortable._trigger("activate", event, uiSortable);
++			}
++		});
++
++	},
++	stop: function(event, ui) {
++
++		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
++		var inst = $(this).data("ui-draggable"),
++			uiSortable = $.extend({}, ui, { item: inst.element });
++
++		$.each(inst.sortables, function() {
++			if(this.instance.isOver) {
++
++				this.instance.isOver = 0;
++
++				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
++				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
++
++				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
++				if(this.shouldRevert) {
++					this.instance.options.revert = this.shouldRevert;
++				}
++
++				//Trigger the stop of the sortable
++				this.instance._mouseStop(event);
++
++				this.instance.options.helper = this.instance.options._helper;
++
++				//If the helper has been the original item, restore properties in the sortable
++				if(inst.options.helper === "original") {
++					this.instance.currentItem.css({ top: "auto", left: "auto" });
++				}
++
++			} else {
++				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
++				this.instance._trigger("deactivate", event, uiSortable);
++			}
++
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), that = this;
++
++		$.each(inst.sortables, function() {
++
++			var innermostIntersecting = false,
++				thisSortable = this;
++
++			//Copy over some variables to allow calling the sortable's native _intersectsWith
++			this.instance.positionAbs = inst.positionAbs;
++			this.instance.helperProportions = inst.helperProportions;
++			this.instance.offset.click = inst.offset.click;
++
++			if(this.instance._intersectsWith(this.instance.containerCache)) {
++				innermostIntersecting = true;
++				$.each(inst.sortables, function () {
++					this.instance.positionAbs = inst.positionAbs;
++					this.instance.helperProportions = inst.helperProportions;
++					this.instance.offset.click = inst.offset.click;
++					if (this !== thisSortable &&
++						this.instance._intersectsWith(this.instance.containerCache) &&
++						$.contains(thisSortable.instance.element[0], this.instance.element[0])
++					) {
++						innermostIntersecting = false;
++					}
++					return innermostIntersecting;
++				});
++			}
++
++
++			if(innermostIntersecting) {
++				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
++				if(!this.instance.isOver) {
++
++					this.instance.isOver = 1;
++					//Now we fake the start of dragging for the sortable instance,
++					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
++					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
++					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
++					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
++					this.instance.options.helper = function() { return ui.helper[0]; };
++
++					event.target = this.instance.currentItem[0];
++					this.instance._mouseCapture(event, true);
++					this.instance._mouseStart(event, true, true);
++
++					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
++					this.instance.offset.click.top = inst.offset.click.top;
++					this.instance.offset.click.left = inst.offset.click.left;
++					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
++					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
++
++					inst._trigger("toSortable", event);
++					inst.dropped = this.instance.element; //draggable revert needs that
++					//hack so receive/update callbacks work (mostly)
++					inst.currentItem = inst.element;
++					this.instance.fromOutside = inst;
++
++				}
++
++				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
++				if(this.instance.currentItem) {
++					this.instance._mouseDrag(event);
++				}
++
++			} else {
++
++				//If it doesn't intersect with the sortable, and it intersected before,
++				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
++				if(this.instance.isOver) {
++
++					this.instance.isOver = 0;
++					this.instance.cancelHelperRemoval = true;
++
++					//Prevent reverting on this forced stop
++					this.instance.options.revert = false;
++
++					// The out event needs to be triggered independently
++					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
++
++					this.instance._mouseStop(event, true);
++					this.instance.options.helper = this.instance.options._helper;
++
++					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
++					this.instance.currentItem.remove();
++					if(this.instance.placeholder) {
++						this.instance.placeholder.remove();
++					}
++
++					inst._trigger("fromSortable", event);
++					inst.dropped = false; //draggable revert needs that
++				}
++
++			}
++
++		});
++
++	}
++});
++
++$.ui.plugin.add("draggable", "cursor", {
++	start: function() {
++		var t = $("body"), o = $(this).data("ui-draggable").options;
++		if (t.css("cursor")) {
++			o._cursor = t.css("cursor");
++		}
++		t.css("cursor", o.cursor);
++	},
++	stop: function() {
++		var o = $(this).data("ui-draggable").options;
++		if (o._cursor) {
++			$("body").css("cursor", o._cursor);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "opacity", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("opacity")) {
++			o._opacity = t.css("opacity");
++		}
++		t.css("opacity", o.opacity);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._opacity) {
++			$(ui.helper).css("opacity", o._opacity);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "scroll", {
++	start: function() {
++		var i = $(this).data("ui-draggable");
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++			i.overflowOffset = i.scrollParent.offset();
++		}
++	},
++	drag: function( event ) {
++
++		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
++
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++
++			if(!o.axis || o.axis !== "x") {
++				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++			}
++
++		} else {
++
++			if(!o.axis || o.axis !== "x") {
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++			}
++
++		}
++
++		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(i, event);
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "snap", {
++	start: function() {
++
++		var i = $(this).data("ui-draggable"),
++			o = i.options;
++
++		i.snapElements = [];
++
++		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
++			var $t = $(this),
++				$o = $t.offset();
++			if(this !== i.element[0]) {
++				i.snapElements.push({
++					item: this,
++					width: $t.outerWidth(), height: $t.outerHeight(),
++					top: $o.top, left: $o.left
++				});
++			}
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var ts, bs, ls, rs, l, r, t, b, i, first,
++			inst = $(this).data("ui-draggable"),
++			o = inst.options,
++			d = o.snapTolerance,
++			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
++			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
++
++		for (i = inst.snapElements.length - 1; i >= 0; i--){
++
++			l = inst.snapElements[i].left;
++			r = l + inst.snapElements[i].width;
++			t = inst.snapElements[i].top;
++			b = t + inst.snapElements[i].height;
++
++			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
++				if(inst.snapElements[i].snapping) {
++					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++				}
++				inst.snapElements[i].snapping = false;
++				continue;
++			}
++
++			if(o.snapMode !== "inner") {
++				ts = Math.abs(t - y2) <= d;
++				bs = Math.abs(b - y1) <= d;
++				ls = Math.abs(l - x2) <= d;
++				rs = Math.abs(r - x1) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
++				}
++			}
++
++			first = (ts || bs || ls || rs);
++
++			if(o.snapMode !== "outer") {
++				ts = Math.abs(t - y1) <= d;
++				bs = Math.abs(b - y2) <= d;
++				ls = Math.abs(l - x1) <= d;
++				rs = Math.abs(r - x2) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
++				}
++			}
++
++			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
++				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++			}
++			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
++
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "stack", {
++	start: function() {
++		var min,
++			o = this.data("ui-draggable").options,
++			group = $.makeArray($(o.stack)).sort(function(a,b) {
++				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
++			});
++
++		if (!group.length) { return; }
++
++		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
++		$(group).each(function(i) {
++			$(this).css("zIndex", min + i);
++		});
++		this.css("zIndex", (min + group.length));
++	}
++});
++
++$.ui.plugin.add("draggable", "zIndex", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("zIndex")) {
++			o._zIndex = t.css("zIndex");
++		}
++		t.css("zIndex", o.zIndex);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._zIndex) {
++			$(ui.helper).css("zIndex", o._zIndex);
++		}
++	}
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cy-GB.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cy-GB.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cy-GB.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
++/* Written by William Griffiths. */
++jQuery(function($){
++	$.datepicker.regional['cy-GB'] = {
++		closeText: 'Done',
++		prevText: 'Prev',
++		nextText: 'Next',
++		currentText: 'Today',
++		monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
++		'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
++		monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
++		'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
++		dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
++		dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
++		dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
++		weekHeader: 'Wy',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['cy-GB']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eo.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eo.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eo.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Esperanto initialisation for the jQuery UI date picker plugin. */
++/* Written by Olivier M. (olivierweb@ifrance.com). */
++jQuery(function($){
++	$.datepicker.regional['eo'] = {
++		closeText: 'Fermi',
++		prevText: '&#x3C;Anta',
++		nextText: 'Sekv&#x3E;',
++		currentText: 'Nuna',
++		monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
++		'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Aŭg','Sep','Okt','Nov','Dec'],
++		dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
++		dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
++		dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
++		weekHeader: 'Sb',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['eo']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fo.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fo.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fo.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Faroese initialisation for the jQuery UI date picker plugin */
++/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
++jQuery(function($){
++	$.datepicker.regional['fo'] = {
++		closeText: 'Lat aftur',
++		prevText: '&#x3C;Fyrra',
++		nextText: 'Næsta&#x3E;',
++		currentText: 'Í dag',
++		monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
++		'Juli','August','September','Oktober','November','Desember'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Des'],
++		dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
++		dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
++		dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
++		weekHeader: 'Vk',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fo']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bs.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bs.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bs.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Bosnian i18n for the jQuery UI date picker plugin. */
++/* Written by Kenan Konjo. */
++jQuery(function($){
++	$.datepicker.regional['bs'] = {
++		closeText: 'Zatvori',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Danas',
++		monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
++		'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Dec'],
++		dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
++		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
++		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['bs']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cs.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cs.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cs.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Czech initialisation for the jQuery UI date picker plugin. */
++/* Written by Tomas Muller (tomas@tomas-muller.net). */
++jQuery(function($){
++	$.datepicker.regional['cs'] = {
++		closeText: 'Zavřít',
++		prevText: '&#x3C;Dříve',
++		nextText: 'Později&#x3E;',
++		currentText: 'Nyní',
++		monthNames: ['leden','únor','březen','duben','květen','červen',
++		'červenec','srpen','září','říjen','listopad','prosinec'],
++		monthNamesShort: ['led','úno','bře','dub','kvě','čer',
++		'čvc','srp','zář','říj','lis','pro'],
++		dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
++		dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
++		dayNamesMin: ['ne','po','út','st','čt','pá','so'],
++		weekHeader: 'Týd',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['cs']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-kk.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-kk.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-kk.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['kk'] = {
++		closeText: 'Жабу',
++		prevText: '&#x3C;Алдыңғы',
++		nextText: 'Келесі&#x3E;',
++		currentText: 'Бүгін',
++		monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым',
++		'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'],
++		monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау',
++		'Шіл','Там','Қыр','Қаз','Қар','Жел'],
++		dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'],
++		dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'],
++		dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'],
++		weekHeader: 'Не',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['kk']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-es.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-es.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-es.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
++/* Traducido por Vester (xvester@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['es'] = {
++		closeText: 'Cerrar',
++		prevText: '&#x3C;Ant',
++		nextText: 'Sig&#x3E;',
++		currentText: 'Hoy',
++		monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
++		'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
++		monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
++		'Jul','Ago','Sep','Oct','Nov','Dic'],
++		dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
++		dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
++		dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['es']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-mk.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-mk.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-mk.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Macedonian i18n for the jQuery UI date picker plugin. */
++/* Written by Stojce Slavkovski. */
++jQuery(function($){
++	$.datepicker.regional['mk'] = {
++		closeText: 'Затвори',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Денес',
++		monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни',
++		'Јули','Август','Септември','Октомври','Ноември','Декември'],
++		monthNamesShort: ['Јан','Фев','Мар','Апр','Мај','Јун',
++		'Јул','Авг','Сеп','Окт','Ное','Дек'],
++		dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
++		dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'],
++		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'],
++		weekHeader: 'Сед',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['mk']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ko.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ko.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ko.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Korean initialisation for the jQuery calendar extension. */
++/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
++jQuery(function($){
++	$.datepicker.regional['ko'] = {
++		closeText: '닫기',
++		prevText: '이전달',
++		nextText: '다음달',
++		currentText: '오늘',
++		monthNames: ['1월','2월','3월','4월','5월','6월',
++		'7월','8월','9월','10월','11월','12월'],
++		monthNamesShort: ['1월','2월','3월','4월','5월','6월',
++		'7월','8월','9월','10월','11월','12월'],
++		dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'],
++		dayNamesShort: ['일','월','화','수','목','금','토'],
++		dayNamesMin: ['일','월','화','수','목','금','토'],
++		weekHeader: 'Wk',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '년'};
++	$.datepicker.setDefaults($.datepicker.regional['ko']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-is.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-is.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-is.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Icelandic initialisation for the jQuery UI date picker plugin. */
++/* Written by Haukur H. Thorsson (haukur@eskill.is). */
++jQuery(function($){
++	$.datepicker.regional['is'] = {
++		closeText: 'Loka',
++		prevText: '&#x3C; Fyrri',
++		nextText: 'Næsti &#x3E;',
++		currentText: 'Í dag',
++		monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní',
++		'Júlí','Ágúst','September','Október','Nóvember','Desember'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún',
++		'Júl','Ágú','Sep','Okt','Nóv','Des'],
++		dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'],
++		dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'],
++		dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'],
++		weekHeader: 'Vika',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['is']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-no.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-no.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-no.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Norwegian initialisation for the jQuery UI date picker plugin. */
++/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
++
++jQuery(function($){
++	$.datepicker.regional['no'] = {
++		closeText: 'Lukk',
++		prevText: '&#xAB;Forrige',
++		nextText: 'Neste&#xBB;',
++		currentText: 'I dag',
++		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
++		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
++		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
++		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
++		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
++		weekHeader: 'Uke',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['no']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar-DZ.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar-DZ.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar-DZ.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
++/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
++
++jQuery(function($){
++	$.datepicker.regional['ar-DZ'] = {
++		closeText: 'إغلاق',
++		prevText: '&#x3C;السابق',
++		nextText: 'التالي&#x3E;',
++		currentText: 'اليوم',
++		monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
++		'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
++		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
++		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		weekHeader: 'أسبوع',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 6,
++  		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sk.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sk.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sk.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Slovak initialisation for the jQuery UI date picker plugin. */
++/* Written by Vojtech Rinik (vojto@hmm.sk). */
++jQuery(function($){
++	$.datepicker.regional['sk'] = {
++		closeText: 'Zavrieť',
++		prevText: '&#x3C;Predchádzajúci',
++		nextText: 'Nasledujúci&#x3E;',
++		currentText: 'Dnes',
++		monthNames: ['január','február','marec','apríl','máj','jún',
++		'júl','august','september','október','november','december'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
++		'Júl','Aug','Sep','Okt','Nov','Dec'],
++		dayNames: ['nedeľa','pondelok','utorok','streda','štvrtok','piatok','sobota'],
++		dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
++		dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
++		weekHeader: 'Ty',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sk']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-uk.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-uk.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-uk.js	(revision 15487)
+@@ -0,0 +1,24 @@
++/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
++/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['uk'] = {
++		closeText: 'Закрити',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Сьогодні',
++		monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
++		'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
++		monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
++		'Лип','Сер','Вер','Жов','Лис','Гру'],
++		dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
++		dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
++		dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
++		weekHeader: 'Тиж',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['uk']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ms.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ms.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ms.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Malaysian initialisation for the jQuery UI date picker plugin. */
++/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
++jQuery(function($){
++	$.datepicker.regional['ms'] = {
++		closeText: 'Tutup',
++		prevText: '&#x3C;Sebelum',
++		nextText: 'Selepas&#x3E;',
++		currentText: 'hari ini',
++		monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
++		'Julai','Ogos','September','Oktober','November','Disember'],
++		monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
++		'Jul','Ogo','Sep','Okt','Nov','Dis'],
++		dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
++		dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
++		dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
++		weekHeader: 'Mg',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ms']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ro.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ro.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ro.js	(revision 15487)
+@@ -0,0 +1,26 @@
++/* Romanian initialisation for the jQuery UI date picker plugin.
++ *
++ * Written by Edmond L. (ll_edmond@walla.com)
++ * and Ionut G. Stan (ionut.g.stan@gmail.com)
++ */
++jQuery(function($){
++	$.datepicker.regional['ro'] = {
++		closeText: 'Închide',
++		prevText: '&#xAB; Luna precedentă',
++		nextText: 'Luna următoare &#xBB;',
++		currentText: 'Azi',
++		monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
++		'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
++		monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
++		'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
++		dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
++		dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
++		dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
++		weekHeader: 'Săpt',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ro']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-af.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-af.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-af.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Afrikaans initialisation for the jQuery UI date picker plugin. */
++/* Written by Renier Pretorius. */
++jQuery(function($){
++	$.datepicker.regional['af'] = {
++		closeText: 'Selekteer',
++		prevText: 'Vorige',
++		nextText: 'Volgende',
++		currentText: 'Vandag',
++		monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
++		'Julie','Augustus','September','Oktober','November','Desember'],
++		monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
++		dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
++		dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
++		dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['af']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-NZ.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-NZ.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-NZ.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
++/* Based on the en-GB initialisation. */
++jQuery(function($){
++	$.datepicker.regional['en-NZ'] = {
++		closeText: 'Done',
++		prevText: 'Prev',
++		nextText: 'Next',
++		currentText: 'Today',
++		monthNames: ['January','February','March','April','May','June',
++		'July','August','September','October','November','December'],
++		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
++		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
++		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
++		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['en-NZ']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lb.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lb.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lb.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
++/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
++jQuery(function($){
++	$.datepicker.regional['lb'] = {
++		closeText: 'Fäerdeg',
++		prevText: 'Zréck',
++		nextText: 'Weider',
++		currentText: 'Haut',
++		monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
++		'Juli','August','September','Oktober','November','Dezember'],
++		monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
++		dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
++		dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
++		dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
++		weekHeader: 'W',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['lb']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nb.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nb.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nb.js	(revision 15487)
+@@ -0,0 +1,22 @@
++/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */
++/* Written by Bjørn Johansen (post@bjornjohansen.no). */
++jQuery(function($){
++	$.datepicker.regional['nb'] = {
++		closeText: 'Lukk',
++		prevText: '&#xAB;Forrige',
++		nextText: 'Neste&#xBB;',
++		currentText: 'I dag',
++		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
++		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
++		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
++		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
++		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
++		weekHeader: 'Uke',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['nb']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CH.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CH.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CH.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Swiss-French initialisation for the jQuery UI date picker plugin. */
++/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
++jQuery(function($){
++	$.datepicker.regional['fr-CH'] = {
++		closeText: 'Fermer',
++		prevText: '&#x3C;Préc',
++		nextText: 'Suiv&#x3E;',
++		currentText: 'Courant',
++		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
++		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
++		monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
++		'Jul','Aoû','Sep','Oct','Nov','Déc'],
++		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
++		dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
++		dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fr-CH']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Arabic Translation for jQuery UI date picker plugin. */
++/* Khaled Alhourani -- me@khaledalhourani.com */
++/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
++jQuery(function($){
++	$.datepicker.regional['ar'] = {
++		closeText: 'إغلاق',
++		prevText: '&#x3C;السابق',
++		nextText: 'التالي&#x3E;',
++		currentText: 'اليوم',
++		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
++		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
++		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
++		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
++		weekHeader: 'أسبوع',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 6,
++  		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ar']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-AU.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-AU.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-AU.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* English/Australia initialisation for the jQuery UI date picker plugin. */
++/* Based on the en-GB initialisation. */
++jQuery(function($){
++	$.datepicker.regional['en-AU'] = {
++		closeText: 'Done',
++		prevText: 'Prev',
++		nextText: 'Next',
++		currentText: 'Today',
++		monthNames: ['January','February','March','April','May','June',
++		'July','August','September','October','November','December'],
++		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
++		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
++		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
++		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['en-AU']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr.js	(revision 15487)
+@@ -0,0 +1,25 @@
++/* French initialisation for the jQuery UI date picker plugin. */
++/* Written by Keith Wood (kbwood{at}iinet.com.au),
++			  Stéphane Nahmani (sholby@sholby.net),
++			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
++jQuery(function($){
++	$.datepicker.regional['fr'] = {
++		closeText: 'Fermer',
++		prevText: 'Précédent',
++		nextText: 'Suivant',
++		currentText: 'Aujourd\'hui',
++		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
++		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
++		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
++		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
++		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
++		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
++		dayNamesMin: ['D','L','M','M','J','V','S'],
++		weekHeader: 'Sem.',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fr']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hr.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hr.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Croatian i18n for the jQuery UI date picker plugin. */
++/* Written by Vjekoslav Nesek. */
++jQuery(function($){
++	$.datepicker.regional['hr'] = {
++		closeText: 'Zatvori',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Danas',
++		monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
++		'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
++		monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
++		'Srp','Kol','Ruj','Lis','Stu','Pro'],
++		dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
++		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
++		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
++		weekHeader: 'Tje',
++		dateFormat: 'dd.mm.yy.',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['hr']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-az.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-az.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-az.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Jamil Najafov (necefov33@gmail.com). */
++jQuery(function($) {
++	$.datepicker.regional['az'] = {
++		closeText: 'Bağla',
++		prevText: '&#x3C;Geri',
++		nextText: 'İrəli&#x3E;',
++		currentText: 'Bugün',
++		monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
++		'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
++		monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
++		'İyul','Avq','Sen','Okt','Noy','Dek'],
++		dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
++		dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
++		dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
++		weekHeader: 'Hf',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['az']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nn.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nn.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nn.js	(revision 15487)
+@@ -0,0 +1,22 @@
++/* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */
++/* Written by Bjørn Johansen (post@bjornjohansen.no). */
++jQuery(function($){
++	$.datepicker.regional['nn'] = {
++		closeText: 'Lukk',
++		prevText: '&#xAB;Førre',
++		nextText: 'Neste&#xBB;',
++		currentText: 'I dag',
++		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
++		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
++		dayNamesShort: ['sun','mån','tys','ons','tor','fre','lau'],
++		dayNames: ['sundag','måndag','tysdag','onsdag','torsdag','fredag','laurdag'],
++		dayNamesMin: ['su','må','ty','on','to','fr','la'],
++		weekHeader: 'Veke',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['nn']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tj.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tj.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tj.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['tj'] = {
++		closeText: 'Идома',
++		prevText: '&#x3c;Қафо',
++		nextText: 'Пеш&#x3e;',
++		currentText: 'Имрӯз',
++		monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн',
++		'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'],
++		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
++		'Июл','Авг','Сен','Окт','Ноя','Дек'],
++		dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
++		dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'],
++		dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
++		weekHeader: 'Хф',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['tj']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lv.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lv.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lv.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
++jQuery(function($){
++	$.datepicker.regional['lv'] = {
++		closeText: 'Aizvērt',
++		prevText: 'Iepr',
++		nextText: 'Nāka',
++		currentText: 'Šodien',
++		monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
++		'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
++		'Jūl','Aug','Sep','Okt','Nov','Dec'],
++		dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
++		dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
++		dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
++		weekHeader: 'Nav',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['lv']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ca.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ca.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ca.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
++/* Writers: (joan.leon@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['ca'] = {
++		closeText: 'Tanca',
++		prevText: 'Anterior',
++		nextText: 'Següent',
++		currentText: 'Avui',
++		monthNames: ['gener','febrer','març','abril','maig','juny',
++		'juliol','agost','setembre','octubre','novembre','desembre'],
++		monthNamesShort: ['gen','feb','març','abr','maig','juny',
++		'jul','ag','set','oct','nov','des'],
++		dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],
++		dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'],
++		dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'],
++		weekHeader: 'Set',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ca']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-da.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-da.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-da.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Danish initialisation for the jQuery UI date picker plugin. */
++/* Written by Jan Christensen ( deletestuff@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['da'] = {
++		closeText: 'Luk',
++		prevText: '&#x3C;Forrige',
++		nextText: 'Næste&#x3E;',
++		currentText: 'Idag',
++		monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
++		'Juli','August','September','Oktober','November','December'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Dec'],
++		dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
++		dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
++		dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
++		weekHeader: 'Uge',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['da']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Serbian i18n for the jQuery UI date picker plugin. */
++/* Written by Dejan Dimić. */
++jQuery(function($){
++	$.datepicker.regional['sr'] = {
++		closeText: 'Затвори',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Данас',
++		monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
++		'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
++		monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
++		'Јул','Авг','Сеп','Окт','Нов','Дец'],
++		dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
++		dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
++		dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
++		weekHeader: 'Сед',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sr']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt-BR.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt-BR.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt-BR.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Brazilian initialisation for the jQuery UI date picker plugin. */
++/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['pt-BR'] = {
++		closeText: 'Fechar',
++		prevText: '&#x3C;Anterior',
++		nextText: 'Próximo&#x3E;',
++		currentText: 'Hoje',
++		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
++		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
++		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
++		'Jul','Ago','Set','Out','Nov','Dez'],
++		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
++		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
++		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['pt-BR']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tr.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tr.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Turkish initialisation for the jQuery UI date picker plugin. */
++/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
++jQuery(function($){
++	$.datepicker.regional['tr'] = {
++		closeText: 'kapat',
++		prevText: '&#x3C;geri',
++		nextText: 'ileri&#x3e',
++		currentText: 'bugün',
++		monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
++		'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
++		monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
++		'Tem','Ağu','Eyl','Eki','Kas','Ara'],
++		dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
++		dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
++		dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
++		weekHeader: 'Hf',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['tr']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fa.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fa.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fa.js	(revision 15487)
+@@ -0,0 +1,59 @@
++/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
++/* Javad Mowlanezhad -- jmowla@gmail.com */
++/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
++jQuery(function($) {
++	$.datepicker.regional['fa'] = {
++		closeText: 'بستن',
++		prevText: '&#x3C;قبلی',
++		nextText: 'بعدی&#x3E;',
++		currentText: 'امروز',
++		monthNames: [
++			'فروردين',
++			'ارديبهشت',
++			'خرداد',
++			'تير',
++			'مرداد',
++			'شهريور',
++			'مهر',
++			'آبان',
++			'آذر',
++			'دی',
++			'بهمن',
++			'اسفند'
++		],
++		monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
++		dayNames: [
++			'يکشنبه',
++			'دوشنبه',
++			'سه‌شنبه',
++			'چهارشنبه',
++			'پنجشنبه',
++			'جمعه',
++			'شنبه'
++		],
++		dayNamesShort: [
++			'ی',
++			'د',
++			'س',
++			'چ',
++			'پ',
++			'ج',
++			'ش'
++		],
++		dayNamesMin: [
++			'ی',
++			'د',
++			'س',
++			'چ',
++			'پ',
++			'ج',
++			'ش'
++		],
++		weekHeader: 'هف',
++		dateFormat: 'yy/mm/dd',
++		firstDay: 6,
++		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fa']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-be.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-be.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-be.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Belarusian initialisation for the jQuery UI date picker plugin. */
++/* Written by Pavel Selitskas <p.selitskas@gmail.com> */
++jQuery(function($){
++	$.datepicker.regional['be'] = {
++		closeText: 'Зачыніць',
++		prevText: '&larr;Папяр.',
++		nextText: 'Наст.&rarr;',
++		currentText: 'Сёньня',
++		monthNames: ['Студзень','Люты','Сакавік','Красавік','Травень','Чэрвень',
++		'Ліпень','Жнівень','Верасень','Кастрычнік','Лістапад','Сьнежань'],
++		monthNamesShort: ['Сту','Лют','Сак','Кра','Тра','Чэр',
++		'Ліп','Жні','Вер','Кас','Ліс','Сьн'],
++		dayNames: ['нядзеля','панядзелак','аўторак','серада','чацьвер','пятніца','субота'],
++		dayNamesShort: ['ндз','пнд','аўт','срд','чцв','птн','сбт'],
++		dayNamesMin: ['Нд','Пн','Аў','Ср','Чц','Пт','Сб'],
++		weekHeader: 'Тд',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['be']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sv.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sv.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sv.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Swedish initialisation for the jQuery UI date picker plugin. */
++/* Written by Anders Ekdahl ( anders@nomadiz.se). */
++jQuery(function($){
++	$.datepicker.regional['sv'] = {
++		closeText: 'Stäng',
++		prevText: '&#xAB;Förra',
++		nextText: 'Nästa&#xBB;',
++		currentText: 'Idag',
++		monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
++		'Juli','Augusti','September','Oktober','November','December'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Dec'],
++		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
++		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
++		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
++		weekHeader: 'Ve',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sv']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-de.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-de.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-de.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* German initialisation for the jQuery UI date picker plugin. */
++/* Written by Milian Wolff (mail@milianw.de). */
++jQuery(function($){
++	$.datepicker.regional['de'] = {
++		closeText: 'Schließen',
++		prevText: '&#x3C;Zurück',
++		nextText: 'Vor&#x3E;',
++		currentText: 'Heute',
++		monthNames: ['Januar','Februar','März','April','Mai','Juni',
++		'Juli','August','September','Oktober','November','Dezember'],
++		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Dez'],
++		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
++		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
++		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
++		weekHeader: 'KW',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['de']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ja.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ja.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ja.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Japanese initialisation for the jQuery UI date picker plugin. */
++/* Written by Kentaro SATO (kentaro@ranvis.com). */
++jQuery(function($){
++	$.datepicker.regional['ja'] = {
++		closeText: '閉じる',
++		prevText: '&#x3C;前',
++		nextText: '次&#x3E;',
++		currentText: '今日',
++		monthNames: ['1月','2月','3月','4月','5月','6月',
++		'7月','8月','9月','10月','11月','12月'],
++		monthNamesShort: ['1月','2月','3月','4月','5月','6月',
++		'7月','8月','9月','10月','11月','12月'],
++		dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
++		dayNamesShort: ['日','月','火','水','木','金','土'],
++		dayNamesMin: ['日','月','火','水','木','金','土'],
++		weekHeader: '週',
++		dateFormat: 'yy/mm/dd',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['ja']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ka.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ka.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ka.js	(revision 15487)
+@@ -0,0 +1,21 @@
++/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['ka'] = {
++		closeText: 'დახურვა',
++		prevText: '&#x3c; წინა',
++		nextText: 'შემდეგი &#x3e;',
++		currentText: 'დღეს',
++		monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი', 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'],
++		monthNamesShort: ['იან','თებ','მარ','აპრ','მაი','ივნ', 'ივლ','აგვ','სექ','ოქტ','ნოე','დეკ'],
++		dayNames: ['კვირა','ორშაბათი','სამშაბათი','ოთხშაბათი','ხუთშაბათი','პარასკევი','შაბათი'],
++		dayNamesShort: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'],
++		dayNamesMin: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'],
++		weekHeader: 'კვირა',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ka']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-he.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-he.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-he.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Hebrew initialisation for the UI Datepicker extension. */
++/* Written by Amir Hardon (ahardon at gmail dot com). */
++jQuery(function($){
++	$.datepicker.regional['he'] = {
++		closeText: 'סגור',
++		prevText: '&#x3C;הקודם',
++		nextText: 'הבא&#x3E;',
++		currentText: 'היום',
++		monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
++		'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
++		monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני',
++		'יולי','אוג','ספט','אוק','נוב','דצמ'],
++		dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
++		dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
++		dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['he']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fi.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fi.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fi.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Finnish initialisation for the jQuery UI date picker plugin. */
++/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['fi'] = {
++		closeText: 'Sulje',
++		prevText: '&#xAB;Edellinen',
++		nextText: 'Seuraava&#xBB;',
++		currentText: 'Tänään',
++		monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu',
++		'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
++		monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä',
++		'Heinä','Elo','Syys','Loka','Marras','Joulu'],
++		dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
++		dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
++		dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
++		weekHeader: 'Vk',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fi']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hi.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hi.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hi.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Hindi initialisation for the jQuery UI date picker plugin. */
++/* Written by Michael Dawart. */
++jQuery(function($){
++	$.datepicker.regional['hi'] = {
++		closeText: 'बंद',
++		prevText: 'पिछला',
++		nextText: 'अगला',
++		currentText: 'आज',
++		monthNames: ['जनवरी ','फरवरी','मार्च','अप्रेल','मई','जून',
++		'जूलाई','अगस्त ','सितम्बर','अक्टूबर','नवम्बर','दिसम्बर'],
++		monthNamesShort: ['जन', 'फर', 'मार्च', 'अप्रेल', 'मई', 'जून',
++		'जूलाई', 'अग', 'सित', 'अक्ट', 'नव', 'दि'],
++		dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],
++		dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
++		dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
++		weekHeader: 'हफ्ता',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['hi']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ta.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ta.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ta.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by S A Sureshkumar (saskumar@live.com). */
++jQuery(function($){
++	$.datepicker.regional['ta'] = {
++		closeText: 'மூடு',
++		prevText: 'முன்னையது',
++		nextText: 'அடுத்தது',
++		currentText: 'இன்று',
++		monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி',
++		'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'],
++		monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி',
++		'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'],
++		dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'],
++		dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'],
++		dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'],
++		weekHeader: 'Не',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ta']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-km.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-km.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-km.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Khmer initialisation for the jQuery calendar extension. */
++/* Written by Chandara Om (chandara.teacher@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['km'] = {
++		closeText: 'ធ្វើ​រួច',
++		prevText: 'មុន',
++		nextText: 'បន្ទាប់',
++		currentText: 'ថ្ងៃ​នេះ',
++		monthNames: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា',
++		'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'],
++		monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា',
++		'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'],
++		dayNames: ['អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍'],
++		dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
++		dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
++		weekHeader: 'សប្ដាហ៍',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['km']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eu.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eu.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eu.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
++/* Karrikas-ek itzulia (karrikas@karrikas.com) */
++jQuery(function($){
++	$.datepicker.regional['eu'] = {
++		closeText: 'Egina',
++		prevText: '&#x3C;Aur',
++		nextText: 'Hur&#x3E;',
++		currentText: 'Gaur',
++		monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
++			'uztaila','abuztua','iraila','urria','azaroa','abendua'],
++		monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.',
++			'uzt.','abu.','ira.','urr.','aza.','abe.'],
++		dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'],
++		dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'],
++		dayNamesMin: ['ig','al','ar','az','og','ol','lr'],
++		weekHeader: 'As',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['eu']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hu.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hu.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hu.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Hungarian initialisation for the jQuery UI date picker plugin. */
++/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
++jQuery(function($){
++	$.datepicker.regional['hu'] = {
++		closeText: 'bezár',
++		prevText: 'vissza',
++		nextText: 'előre',
++		currentText: 'ma',
++		monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
++		'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
++		monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
++		'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
++		dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
++		dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
++		dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
++		weekHeader: 'Hét',
++		dateFormat: 'yy.mm.dd.',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['hu']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-vi.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-vi.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-vi.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Vietnamese initialisation for the jQuery UI date picker plugin. */
++/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
++jQuery(function($){
++	$.datepicker.regional['vi'] = {
++		closeText: 'Đóng',
++		prevText: '&#x3C;Trước',
++		nextText: 'Tiếp&#x3E;',
++		currentText: 'Hôm nay',
++		monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
++		'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
++		monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
++		'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
++		dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
++		dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
++		dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
++		weekHeader: 'Tu',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['vi']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-rm.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-rm.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-rm.js	(revision 15487)
+@@ -0,0 +1,21 @@
++/* Romansh initialisation for the jQuery UI date picker plugin. */
++/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
++jQuery(function($){
++	$.datepicker.regional['rm'] = {
++		closeText: 'Serrar',
++		prevText: '&#x3C;Suandant',
++		nextText: 'Precedent&#x3E;',
++		currentText: 'Actual',
++		monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
++		monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
++		dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
++		dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
++		dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
++		weekHeader: 'emna',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['rm']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hy.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hy.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hy.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
++jQuery(function($){
++	$.datepicker.regional['hy'] = {
++		closeText: 'Փակել',
++		prevText: '&#x3C;Նախ.',
++		nextText: 'Հաջ.&#x3E;',
++		currentText: 'Այսօր',
++		monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
++		'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
++		monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
++		'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
++		dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
++		dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
++		dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
++		weekHeader: 'ՇԲՏ',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['hy']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-HK.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-HK.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-HK.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Chinese initialisation for the jQuery UI date picker plugin. */
++/* Written by SCCY (samuelcychan@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['zh-HK'] = {
++		closeText: '關閉',
++		prevText: '&#x3C;上月',
++		nextText: '下月&#x3E;',
++		currentText: '今天',
++		monthNames: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
++		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
++		dayNamesMin: ['日','一','二','三','四','五','六'],
++		weekHeader: '周',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['zh-HK']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ky.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ky.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ky.js	(revision 15487)
+@@ -0,0 +1,24 @@
++/* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Sergey Kartashov (ebishkek@yandex.ru). */
++jQuery(function($){
++	$.datepicker.regional['ky'] = {
++		closeText: 'Жабуу',
++		prevText: '&#x3c;Мур',
++		nextText: 'Кий&#x3e;',
++		currentText: 'Бүгүн',
++		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
++		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
++		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
++		'Июл','Авг','Сен','Окт','Ноя','Дек'],
++		dayNames: ['жекшемби', 'дүйшөмбү', 'шейшемби', 'шаршемби', 'бейшемби', 'жума', 'ишемби'],
++		dayNamesShort: ['жек', 'дүй', 'шей', 'шар', 'бей', 'жум', 'ише'],
++		dayNamesMin: ['Жк','Дш','Шш','Шр','Бш','Жм','Иш'],
++		weekHeader: 'Жум',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['ky']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sq.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sq.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sq.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Albanian initialisation for the jQuery UI date picker plugin. */
++/* Written by Flakron Bytyqi (flakron@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['sq'] = {
++		closeText: 'mbylle',
++		prevText: '&#x3C;mbrapa',
++		nextText: 'Përpara&#x3E;',
++		currentText: 'sot',
++		monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
++		'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
++		monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
++		'Kor','Gus','Sht','Tet','Nën','Dhj'],
++		dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
++		dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
++		dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
++		weekHeader: 'Ja',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sq']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ru.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ru.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ru.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Andrew Stromnov (stromnov@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['ru'] = {
++		closeText: 'Закрыть',
++		prevText: '&#x3C;Пред',
++		nextText: 'След&#x3E;',
++		currentText: 'Сегодня',
++		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
++		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
++		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
++		'Июл','Авг','Сен','Окт','Ноя','Дек'],
++		dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
++		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
++		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
++		weekHeader: 'Нед',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ru']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-id.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-id.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-id.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Indonesian initialisation for the jQuery UI date picker plugin. */
++/* Written by Deden Fathurahman (dedenf@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['id'] = {
++		closeText: 'Tutup',
++		prevText: '&#x3C;mundur',
++		nextText: 'maju&#x3E;',
++		currentText: 'hari ini',
++		monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
++		'Juli','Agustus','September','Oktober','Nopember','Desember'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
++		'Jul','Agus','Sep','Okt','Nop','Des'],
++		dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
++		dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
++		dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
++		weekHeader: 'Mg',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['id']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-el.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-el.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-el.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Greek (el) initialisation for the jQuery UI date picker plugin. */
++/* Written by Alex Cicovic (http://www.alexcicovic.com) */
++jQuery(function($){
++	$.datepicker.regional['el'] = {
++		closeText: 'Κλείσιμο',
++		prevText: 'Προηγούμενος',
++		nextText: 'Επόμενος',
++		currentText: 'Τρέχων Μήνας',
++		monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
++		'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
++		monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
++		'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
++		dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
++		dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
++		dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
++		weekHeader: 'Εβδ',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['el']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-gl.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-gl.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-gl.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Galician localization for 'UI date picker' jQuery extension. */
++/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
++jQuery(function($){
++	$.datepicker.regional['gl'] = {
++		closeText: 'Pechar',
++		prevText: '&#x3C;Ant',
++		nextText: 'Seg&#x3E;',
++		currentText: 'Hoxe',
++		monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
++		'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
++		monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
++		'Xul','Ago','Set','Out','Nov','Dec'],
++		dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'],
++		dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'],
++		dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['gl']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery-ui-i18n.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery-ui-i18n.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery-ui-i18n.js	(revision 15487)
+@@ -0,0 +1,1793 @@
++/*! jQuery UI - v1.10.3 - 2013-05-03
++* http://jqueryui.com
++* Includes: jquery.ui.datepicker-af.js, jquery.ui.datepicker-ar-DZ.js, jquery.ui.datepicker-ar.js, jquery.ui.datepicker-az.js, jquery.ui.datepicker-be.js, jquery.ui.datepicker-bg.js, jquery.ui.datepicker-bs.js, jquery.ui.datepicker-ca.js, jquery.ui.datepicker-cs.js, jquery.ui.datepicker-cy-GB.js, jquery.ui.datepicker-da.js, jquery.ui.datepicker-de.js, jquery.ui.datepicker-el.js, jquery.ui.datepicker-en-AU.js, jquery.ui.datepicker-en-GB.js, jquery.ui.datepicker-en-NZ.js, jquery.ui.datepicker-eo.js, jquery.ui.datepicker-es.js, jquery.ui.datepicker-et.js, jquery.ui.datepicker-eu.js, jquery.ui.datepicker-fa.js, jquery.ui.datepicker-fi.js, jquery.ui.datepicker-fo.js, jquery.ui.datepicker-fr-CA.js, jquery.ui.datepicker-fr-CH.js, jquery.ui.datepicker-fr.js, jquery.ui.datepicker-gl.js, jquery.ui.datepicker-he.js, jquery.ui.datepicker-hi.js, jquery.ui.datepicker-hr.js, jquery.ui.datepicker-hu.js, jquery.ui.datepicker-hy.js, jquery.ui.datepicker-id.js, jquery.ui.datepicker-is.js, jquery.ui.datepicker-it.js, jquery.ui.datepicker-ja.js, jquery.ui.datepicker-ka.js, jquery.ui.datepicker-kk.js, jquery.ui.datepicker-km.js, jquery.ui.datepicker-ko.js, jquery.ui.datepicker-ky.js, jquery.ui.datepicker-lb.js, jquery.ui.datepicker-lt.js, jquery.ui.datepicker-lv.js, jquery.ui.datepicker-mk.js, jquery.ui.datepicker-ml.js, jquery.ui.datepicker-ms.js, jquery.ui.datepicker-nb.js, jquery.ui.datepicker-nl-BE.js, jquery.ui.datepicker-nl.js, jquery.ui.datepicker-nn.js, jquery.ui.datepicker-no.js, jquery.ui.datepicker-pl.js, jquery.ui.datepicker-pt-BR.js, jquery.ui.datepicker-pt.js, jquery.ui.datepicker-rm.js, jquery.ui.datepicker-ro.js, jquery.ui.datepicker-ru.js, jquery.ui.datepicker-sk.js, jquery.ui.datepicker-sl.js, jquery.ui.datepicker-sq.js, jquery.ui.datepicker-sr-SR.js, jquery.ui.datepicker-sr.js, jquery.ui.datepicker-sv.js, jquery.ui.datepicker-ta.js, jquery.ui.datepicker-th.js, jquery.ui.datepicker-tj.js, jquery.ui.datepicker-tr.js, jquery.ui.datepicker-uk.js, jquery.ui.datepicker-vi.js, jquery.ui.datepicker-zh-CN.js, jquery.ui.datepicker-zh-HK.js, jquery.ui.datepicker-zh-TW.js
++* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
++/* Afrikaans initialisation for the jQuery UI date picker plugin. */
++/* Written by Renier Pretorius. */
++jQuery(function($){
++	$.datepicker.regional['af'] = {
++		closeText: 'Selekteer',
++		prevText: 'Vorige',
++		nextText: 'Volgende',
++		currentText: 'Vandag',
++		monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
++		'Julie','Augustus','September','Oktober','November','Desember'],
++		monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
++		dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
++		dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
++		dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['af']);
++});
++
++/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
++/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
++
++jQuery(function($){
++	$.datepicker.regional['ar-DZ'] = {
++		closeText: 'إغلاق',
++		prevText: '&#x3C;السابق',
++		nextText: 'التالي&#x3E;',
++		currentText: 'اليوم',
++		monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
++		'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
++		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
++		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		weekHeader: 'أسبوع',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 6,
++  		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
++});
++
++/* Arabic Translation for jQuery UI date picker plugin. */
++/* Khaled Alhourani -- me@khaledalhourani.com */
++/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
++jQuery(function($){
++	$.datepicker.regional['ar'] = {
++		closeText: 'إغلاق',
++		prevText: '&#x3C;السابق',
++		nextText: 'التالي&#x3E;',
++		currentText: 'اليوم',
++		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
++		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
++		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
++		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
++		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
++		weekHeader: 'أسبوع',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 6,
++  		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ar']);
++});
++
++/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Jamil Najafov (necefov33@gmail.com). */
++jQuery(function($) {
++	$.datepicker.regional['az'] = {
++		closeText: 'Bağla',
++		prevText: '&#x3C;Geri',
++		nextText: 'İrəli&#x3E;',
++		currentText: 'Bugün',
++		monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
++		'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
++		monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
++		'İyul','Avq','Sen','Okt','Noy','Dek'],
++		dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
++		dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
++		dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
++		weekHeader: 'Hf',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['az']);
++});
++
++/* Belarusian initialisation for the jQuery UI date picker plugin. */
++/* Written by Pavel Selitskas <p.selitskas@gmail.com> */
++jQuery(function($){
++	$.datepicker.regional['be'] = {
++		closeText: 'Зачыніць',
++		prevText: '&larr;Папяр.',
++		nextText: 'Наст.&rarr;',
++		currentText: 'Сёньня',
++		monthNames: ['Студзень','Люты','Сакавік','Красавік','Травень','Чэрвень',
++		'Ліпень','Жнівень','Верасень','Кастрычнік','Лістапад','Сьнежань'],
++		monthNamesShort: ['Сту','Лют','Сак','Кра','Тра','Чэр',
++		'Ліп','Жні','Вер','Кас','Ліс','Сьн'],
++		dayNames: ['нядзеля','панядзелак','аўторак','серада','чацьвер','пятніца','субота'],
++		dayNamesShort: ['ндз','пнд','аўт','срд','чцв','птн','сбт'],
++		dayNamesMin: ['Нд','Пн','Аў','Ср','Чц','Пт','Сб'],
++		weekHeader: 'Тд',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['be']);
++});
++
++/* Bulgarian initialisation for the jQuery UI date picker plugin. */
++/* Written by Stoyan Kyosev (http://svest.org). */
++jQuery(function($){
++	$.datepicker.regional['bg'] = {
++		closeText: 'затвори',
++		prevText: '&#x3C;назад',
++		nextText: 'напред&#x3E;',
++		nextBigText: '&#x3E;&#x3E;',
++		currentText: 'днес',
++		monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
++		'Юли','Август','Септември','Октомври','Ноември','Декември'],
++		monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
++		'Юли','Авг','Сеп','Окт','Нов','Дек'],
++		dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
++		dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
++		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['bg']);
++});
++
++/* Bosnian i18n for the jQuery UI date picker plugin. */
++/* Written by Kenan Konjo. */
++jQuery(function($){
++	$.datepicker.regional['bs'] = {
++		closeText: 'Zatvori',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Danas',
++		monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
++		'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Dec'],
++		dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
++		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
++		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['bs']);
++});
++
++/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
++/* Writers: (joan.leon@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['ca'] = {
++		closeText: 'Tanca',
++		prevText: 'Anterior',
++		nextText: 'Següent',
++		currentText: 'Avui',
++		monthNames: ['gener','febrer','març','abril','maig','juny',
++		'juliol','agost','setembre','octubre','novembre','desembre'],
++		monthNamesShort: ['gen','feb','març','abr','maig','juny',
++		'jul','ag','set','oct','nov','des'],
++		dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],
++		dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'],
++		dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'],
++		weekHeader: 'Set',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ca']);
++});
++
++/* Czech initialisation for the jQuery UI date picker plugin. */
++/* Written by Tomas Muller (tomas@tomas-muller.net). */
++jQuery(function($){
++	$.datepicker.regional['cs'] = {
++		closeText: 'Zavřít',
++		prevText: '&#x3C;Dříve',
++		nextText: 'Později&#x3E;',
++		currentText: 'Nyní',
++		monthNames: ['leden','únor','březen','duben','květen','červen',
++		'červenec','srpen','září','říjen','listopad','prosinec'],
++		monthNamesShort: ['led','úno','bře','dub','kvě','čer',
++		'čvc','srp','zář','říj','lis','pro'],
++		dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
++		dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
++		dayNamesMin: ['ne','po','út','st','čt','pá','so'],
++		weekHeader: 'Týd',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['cs']);
++});
++
++/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
++/* Written by William Griffiths. */
++jQuery(function($){
++	$.datepicker.regional['cy-GB'] = {
++		closeText: 'Done',
++		prevText: 'Prev',
++		nextText: 'Next',
++		currentText: 'Today',
++		monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
++		'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
++		monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
++		'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
++		dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
++		dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
++		dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
++		weekHeader: 'Wy',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['cy-GB']);
++});
++
++/* Danish initialisation for the jQuery UI date picker plugin. */
++/* Written by Jan Christensen ( deletestuff@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['da'] = {
++		closeText: 'Luk',
++		prevText: '&#x3C;Forrige',
++		nextText: 'Næste&#x3E;',
++		currentText: 'Idag',
++		monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
++		'Juli','August','September','Oktober','November','December'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Dec'],
++		dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
++		dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
++		dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
++		weekHeader: 'Uge',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['da']);
++});
++
++/* German initialisation for the jQuery UI date picker plugin. */
++/* Written by Milian Wolff (mail@milianw.de). */
++jQuery(function($){
++	$.datepicker.regional['de'] = {
++		closeText: 'Schließen',
++		prevText: '&#x3C;Zurück',
++		nextText: 'Vor&#x3E;',
++		currentText: 'Heute',
++		monthNames: ['Januar','Februar','März','April','Mai','Juni',
++		'Juli','August','September','Oktober','November','Dezember'],
++		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Dez'],
++		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
++		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
++		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
++		weekHeader: 'KW',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['de']);
++});
++
++/* Greek (el) initialisation for the jQuery UI date picker plugin. */
++/* Written by Alex Cicovic (http://www.alexcicovic.com) */
++jQuery(function($){
++	$.datepicker.regional['el'] = {
++		closeText: 'Κλείσιμο',
++		prevText: 'Προηγούμενος',
++		nextText: 'Επόμενος',
++		currentText: 'Τρέχων Μήνας',
++		monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
++		'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
++		monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
++		'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
++		dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
++		dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
++		dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
++		weekHeader: 'Εβδ',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['el']);
++});
++
++/* English/Australia initialisation for the jQuery UI date picker plugin. */
++/* Based on the en-GB initialisation. */
++jQuery(function($){
++	$.datepicker.regional['en-AU'] = {
++		closeText: 'Done',
++		prevText: 'Prev',
++		nextText: 'Next',
++		currentText: 'Today',
++		monthNames: ['January','February','March','April','May','June',
++		'July','August','September','October','November','December'],
++		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
++		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
++		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
++		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['en-AU']);
++});
++
++/* English/UK initialisation for the jQuery UI date picker plugin. */
++/* Written by Stuart. */
++jQuery(function($){
++	$.datepicker.regional['en-GB'] = {
++		closeText: 'Done',
++		prevText: 'Prev',
++		nextText: 'Next',
++		currentText: 'Today',
++		monthNames: ['January','February','March','April','May','June',
++		'July','August','September','October','November','December'],
++		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
++		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
++		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
++		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['en-GB']);
++});
++
++/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
++/* Based on the en-GB initialisation. */
++jQuery(function($){
++	$.datepicker.regional['en-NZ'] = {
++		closeText: 'Done',
++		prevText: 'Prev',
++		nextText: 'Next',
++		currentText: 'Today',
++		monthNames: ['January','February','March','April','May','June',
++		'July','August','September','October','November','December'],
++		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
++		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
++		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
++		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['en-NZ']);
++});
++
++/* Esperanto initialisation for the jQuery UI date picker plugin. */
++/* Written by Olivier M. (olivierweb@ifrance.com). */
++jQuery(function($){
++	$.datepicker.regional['eo'] = {
++		closeText: 'Fermi',
++		prevText: '&#x3C;Anta',
++		nextText: 'Sekv&#x3E;',
++		currentText: 'Nuna',
++		monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
++		'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Aŭg','Sep','Okt','Nov','Dec'],
++		dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
++		dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
++		dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
++		weekHeader: 'Sb',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['eo']);
++});
++
++/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
++/* Traducido por Vester (xvester@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['es'] = {
++		closeText: 'Cerrar',
++		prevText: '&#x3C;Ant',
++		nextText: 'Sig&#x3E;',
++		currentText: 'Hoy',
++		monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
++		'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
++		monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
++		'Jul','Ago','Sep','Oct','Nov','Dic'],
++		dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
++		dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
++		dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['es']);
++});
++
++/* Estonian initialisation for the jQuery UI date picker plugin. */
++/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
++jQuery(function($){
++	$.datepicker.regional['et'] = {
++		closeText: 'Sulge',
++		prevText: 'Eelnev',
++		nextText: 'Järgnev',
++		currentText: 'Täna',
++		monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
++		'Juuli','August','September','Oktoober','November','Detsember'],
++		monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
++		'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
++		dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
++		dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
++		dayNamesMin: ['P','E','T','K','N','R','L'],
++		weekHeader: 'näd',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['et']);
++});
++
++/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
++/* Karrikas-ek itzulia (karrikas@karrikas.com) */
++jQuery(function($){
++	$.datepicker.regional['eu'] = {
++		closeText: 'Egina',
++		prevText: '&#x3C;Aur',
++		nextText: 'Hur&#x3E;',
++		currentText: 'Gaur',
++		monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
++			'uztaila','abuztua','iraila','urria','azaroa','abendua'],
++		monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.',
++			'uzt.','abu.','ira.','urr.','aza.','abe.'],
++		dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'],
++		dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'],
++		dayNamesMin: ['ig','al','ar','az','og','ol','lr'],
++		weekHeader: 'As',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['eu']);
++});
++
++/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
++/* Javad Mowlanezhad -- jmowla@gmail.com */
++/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
++jQuery(function($) {
++	$.datepicker.regional['fa'] = {
++		closeText: 'بستن',
++		prevText: '&#x3C;قبلی',
++		nextText: 'بعدی&#x3E;',
++		currentText: 'امروز',
++		monthNames: [
++			'فروردين',
++			'ارديبهشت',
++			'خرداد',
++			'تير',
++			'مرداد',
++			'شهريور',
++			'مهر',
++			'آبان',
++			'آذر',
++			'دی',
++			'بهمن',
++			'اسفند'
++		],
++		monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
++		dayNames: [
++			'يکشنبه',
++			'دوشنبه',
++			'سه‌شنبه',
++			'چهارشنبه',
++			'پنجشنبه',
++			'جمعه',
++			'شنبه'
++		],
++		dayNamesShort: [
++			'ی',
++			'د',
++			'س',
++			'چ',
++			'پ',
++			'ج',
++			'ش'
++		],
++		dayNamesMin: [
++			'ی',
++			'د',
++			'س',
++			'چ',
++			'پ',
++			'ج',
++			'ش'
++		],
++		weekHeader: 'هف',
++		dateFormat: 'yy/mm/dd',
++		firstDay: 6,
++		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fa']);
++});
++
++/* Finnish initialisation for the jQuery UI date picker plugin. */
++/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['fi'] = {
++		closeText: 'Sulje',
++		prevText: '&#xAB;Edellinen',
++		nextText: 'Seuraava&#xBB;',
++		currentText: 'Tänään',
++		monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu',
++		'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
++		monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä',
++		'Heinä','Elo','Syys','Loka','Marras','Joulu'],
++		dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
++		dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
++		dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
++		weekHeader: 'Vk',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fi']);
++});
++
++/* Faroese initialisation for the jQuery UI date picker plugin */
++/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
++jQuery(function($){
++	$.datepicker.regional['fo'] = {
++		closeText: 'Lat aftur',
++		prevText: '&#x3C;Fyrra',
++		nextText: 'Næsta&#x3E;',
++		currentText: 'Í dag',
++		monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
++		'Juli','August','September','Oktober','November','Desember'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Des'],
++		dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
++		dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
++		dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
++		weekHeader: 'Vk',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fo']);
++});
++
++/* Canadian-French initialisation for the jQuery UI date picker plugin. */
++jQuery(function ($) {
++	$.datepicker.regional['fr-CA'] = {
++		closeText: 'Fermer',
++		prevText: 'Précédent',
++		nextText: 'Suivant',
++		currentText: 'Aujourd\'hui',
++		monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
++			'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
++		monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin',
++			'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
++		dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
++		dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
++		dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
++		weekHeader: 'Sem.',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['fr-CA']);
++});
++
++/* Swiss-French initialisation for the jQuery UI date picker plugin. */
++/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
++jQuery(function($){
++	$.datepicker.regional['fr-CH'] = {
++		closeText: 'Fermer',
++		prevText: '&#x3C;Préc',
++		nextText: 'Suiv&#x3E;',
++		currentText: 'Courant',
++		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
++		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
++		monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
++		'Jul','Aoû','Sep','Oct','Nov','Déc'],
++		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
++		dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
++		dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fr-CH']);
++});
++
++/* French initialisation for the jQuery UI date picker plugin. */
++/* Written by Keith Wood (kbwood{at}iinet.com.au),
++			  Stéphane Nahmani (sholby@sholby.net),
++			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
++jQuery(function($){
++	$.datepicker.regional['fr'] = {
++		closeText: 'Fermer',
++		prevText: 'Précédent',
++		nextText: 'Suivant',
++		currentText: 'Aujourd\'hui',
++		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
++		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
++		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
++		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
++		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
++		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
++		dayNamesMin: ['D','L','M','M','J','V','S'],
++		weekHeader: 'Sem.',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['fr']);
++});
++
++/* Galician localization for 'UI date picker' jQuery extension. */
++/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
++jQuery(function($){
++	$.datepicker.regional['gl'] = {
++		closeText: 'Pechar',
++		prevText: '&#x3C;Ant',
++		nextText: 'Seg&#x3E;',
++		currentText: 'Hoxe',
++		monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
++		'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
++		monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
++		'Xul','Ago','Set','Out','Nov','Dec'],
++		dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'],
++		dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'],
++		dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['gl']);
++});
++
++/* Hebrew initialisation for the UI Datepicker extension. */
++/* Written by Amir Hardon (ahardon at gmail dot com). */
++jQuery(function($){
++	$.datepicker.regional['he'] = {
++		closeText: 'סגור',
++		prevText: '&#x3C;הקודם',
++		nextText: 'הבא&#x3E;',
++		currentText: 'היום',
++		monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
++		'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
++		monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני',
++		'יולי','אוג','ספט','אוק','נוב','דצמ'],
++		dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
++		dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
++		dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: true,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['he']);
++});
++
++/* Hindi initialisation for the jQuery UI date picker plugin. */
++/* Written by Michael Dawart. */
++jQuery(function($){
++	$.datepicker.regional['hi'] = {
++		closeText: 'बंद',
++		prevText: 'पिछला',
++		nextText: 'अगला',
++		currentText: 'आज',
++		monthNames: ['जनवरी ','फरवरी','मार्च','अप्रेल','मई','जून',
++		'जूलाई','अगस्त ','सितम्बर','अक्टूबर','नवम्बर','दिसम्बर'],
++		monthNamesShort: ['जन', 'फर', 'मार्च', 'अप्रेल', 'मई', 'जून',
++		'जूलाई', 'अग', 'सित', 'अक्ट', 'नव', 'दि'],
++		dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],
++		dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
++		dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
++		weekHeader: 'हफ्ता',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['hi']);
++});
++
++/* Croatian i18n for the jQuery UI date picker plugin. */
++/* Written by Vjekoslav Nesek. */
++jQuery(function($){
++	$.datepicker.regional['hr'] = {
++		closeText: 'Zatvori',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Danas',
++		monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
++		'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
++		monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
++		'Srp','Kol','Ruj','Lis','Stu','Pro'],
++		dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
++		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
++		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
++		weekHeader: 'Tje',
++		dateFormat: 'dd.mm.yy.',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['hr']);
++});
++
++/* Hungarian initialisation for the jQuery UI date picker plugin. */
++/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
++jQuery(function($){
++	$.datepicker.regional['hu'] = {
++		closeText: 'bezár',
++		prevText: 'vissza',
++		nextText: 'előre',
++		currentText: 'ma',
++		monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
++		'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
++		monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
++		'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
++		dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
++		dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
++		dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
++		weekHeader: 'Hét',
++		dateFormat: 'yy.mm.dd.',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['hu']);
++});
++
++/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
++jQuery(function($){
++	$.datepicker.regional['hy'] = {
++		closeText: 'Փակել',
++		prevText: '&#x3C;Նախ.',
++		nextText: 'Հաջ.&#x3E;',
++		currentText: 'Այսօր',
++		monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
++		'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
++		monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
++		'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
++		dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
++		dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
++		dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
++		weekHeader: 'ՇԲՏ',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['hy']);
++});
++
++/* Indonesian initialisation for the jQuery UI date picker plugin. */
++/* Written by Deden Fathurahman (dedenf@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['id'] = {
++		closeText: 'Tutup',
++		prevText: '&#x3C;mundur',
++		nextText: 'maju&#x3E;',
++		currentText: 'hari ini',
++		monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
++		'Juli','Agustus','September','Oktober','Nopember','Desember'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
++		'Jul','Agus','Sep','Okt','Nop','Des'],
++		dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
++		dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
++		dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
++		weekHeader: 'Mg',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['id']);
++});
++
++/* Icelandic initialisation for the jQuery UI date picker plugin. */
++/* Written by Haukur H. Thorsson (haukur@eskill.is). */
++jQuery(function($){
++	$.datepicker.regional['is'] = {
++		closeText: 'Loka',
++		prevText: '&#x3C; Fyrri',
++		nextText: 'Næsti &#x3E;',
++		currentText: 'Í dag',
++		monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní',
++		'Júlí','Ágúst','September','Október','Nóvember','Desember'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún',
++		'Júl','Ágú','Sep','Okt','Nóv','Des'],
++		dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'],
++		dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'],
++		dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'],
++		weekHeader: 'Vika',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['is']);
++});
++
++/* Italian initialisation for the jQuery UI date picker plugin. */
++/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['it'] = {
++		closeText: 'Chiudi',
++		prevText: '&#x3C;Prec',
++		nextText: 'Succ&#x3E;',
++		currentText: 'Oggi',
++		monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
++			'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
++		monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
++			'Lug','Ago','Set','Ott','Nov','Dic'],
++		dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'],
++		dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
++		dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['it']);
++});
++
++/* Japanese initialisation for the jQuery UI date picker plugin. */
++/* Written by Kentaro SATO (kentaro@ranvis.com). */
++jQuery(function($){
++	$.datepicker.regional['ja'] = {
++		closeText: '閉じる',
++		prevText: '&#x3C;前',
++		nextText: '次&#x3E;',
++		currentText: '今日',
++		monthNames: ['1月','2月','3月','4月','5月','6月',
++		'7月','8月','9月','10月','11月','12月'],
++		monthNamesShort: ['1月','2月','3月','4月','5月','6月',
++		'7月','8月','9月','10月','11月','12月'],
++		dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
++		dayNamesShort: ['日','月','火','水','木','金','土'],
++		dayNamesMin: ['日','月','火','水','木','金','土'],
++		weekHeader: '週',
++		dateFormat: 'yy/mm/dd',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['ja']);
++});
++
++/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['ka'] = {
++		closeText: 'დახურვა',
++		prevText: '&#x3c; წინა',
++		nextText: 'შემდეგი &#x3e;',
++		currentText: 'დღეს',
++		monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი', 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'],
++		monthNamesShort: ['იან','თებ','მარ','აპრ','მაი','ივნ', 'ივლ','აგვ','სექ','ოქტ','ნოე','დეკ'],
++		dayNames: ['კვირა','ორშაბათი','სამშაბათი','ოთხშაბათი','ხუთშაბათი','პარასკევი','შაბათი'],
++		dayNamesShort: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'],
++		dayNamesMin: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'],
++		weekHeader: 'კვირა',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ka']);
++});
++
++/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['kk'] = {
++		closeText: 'Жабу',
++		prevText: '&#x3C;Алдыңғы',
++		nextText: 'Келесі&#x3E;',
++		currentText: 'Бүгін',
++		monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым',
++		'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'],
++		monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау',
++		'Шіл','Там','Қыр','Қаз','Қар','Жел'],
++		dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'],
++		dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'],
++		dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'],
++		weekHeader: 'Не',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['kk']);
++});
++
++/* Khmer initialisation for the jQuery calendar extension. */
++/* Written by Chandara Om (chandara.teacher@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['km'] = {
++		closeText: 'ធ្វើ​រួច',
++		prevText: 'មុន',
++		nextText: 'បន្ទាប់',
++		currentText: 'ថ្ងៃ​នេះ',
++		monthNames: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា',
++		'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'],
++		monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា',
++		'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'],
++		dayNames: ['អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍'],
++		dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
++		dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
++		weekHeader: 'សប្ដាហ៍',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['km']);
++});
++
++/* Korean initialisation for the jQuery calendar extension. */
++/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
++jQuery(function($){
++	$.datepicker.regional['ko'] = {
++		closeText: '닫기',
++		prevText: '이전달',
++		nextText: '다음달',
++		currentText: '오늘',
++		monthNames: ['1월','2월','3월','4월','5월','6월',
++		'7월','8월','9월','10월','11월','12월'],
++		monthNamesShort: ['1월','2월','3월','4월','5월','6월',
++		'7월','8월','9월','10월','11월','12월'],
++		dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'],
++		dayNamesShort: ['일','월','화','수','목','금','토'],
++		dayNamesMin: ['일','월','화','수','목','금','토'],
++		weekHeader: 'Wk',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '년'};
++	$.datepicker.setDefaults($.datepicker.regional['ko']);
++});
++
++/* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Sergey Kartashov (ebishkek@yandex.ru). */
++jQuery(function($){
++	$.datepicker.regional['ky'] = {
++		closeText: 'Жабуу',
++		prevText: '&#x3c;Мур',
++		nextText: 'Кий&#x3e;',
++		currentText: 'Бүгүн',
++		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
++		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
++		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
++		'Июл','Авг','Сен','Окт','Ноя','Дек'],
++		dayNames: ['жекшемби', 'дүйшөмбү', 'шейшемби', 'шаршемби', 'бейшемби', 'жума', 'ишемби'],
++		dayNamesShort: ['жек', 'дүй', 'шей', 'шар', 'бей', 'жум', 'ише'],
++		dayNamesMin: ['Жк','Дш','Шш','Шр','Бш','Жм','Иш'],
++		weekHeader: 'Жум',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['ky']);
++});
++
++/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
++/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
++jQuery(function($){
++	$.datepicker.regional['lb'] = {
++		closeText: 'Fäerdeg',
++		prevText: 'Zréck',
++		nextText: 'Weider',
++		currentText: 'Haut',
++		monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
++		'Juli','August','September','Oktober','November','Dezember'],
++		monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
++		dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
++		dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
++		dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
++		weekHeader: 'W',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['lb']);
++});
++
++/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* @author Arturas Paleicikas <arturas@avalon.lt> */
++jQuery(function($){
++	$.datepicker.regional['lt'] = {
++		closeText: 'Uždaryti',
++		prevText: '&#x3C;Atgal',
++		nextText: 'Pirmyn&#x3E;',
++		currentText: 'Šiandien',
++		monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
++		'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
++		monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
++		'Lie','Rugp','Rugs','Spa','Lap','Gru'],
++		dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
++		dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
++		dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
++		weekHeader: 'Wk',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['lt']);
++});
++
++/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
++jQuery(function($){
++	$.datepicker.regional['lv'] = {
++		closeText: 'Aizvērt',
++		prevText: 'Iepr',
++		nextText: 'Nāka',
++		currentText: 'Šodien',
++		monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
++		'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
++		'Jūl','Aug','Sep','Okt','Nov','Dec'],
++		dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
++		dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
++		dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
++		weekHeader: 'Nav',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['lv']);
++});
++
++/* Macedonian i18n for the jQuery UI date picker plugin. */
++/* Written by Stojce Slavkovski. */
++jQuery(function($){
++	$.datepicker.regional['mk'] = {
++		closeText: 'Затвори',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Денес',
++		monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни',
++		'Јули','Август','Септември','Октомври','Ноември','Декември'],
++		monthNamesShort: ['Јан','Фев','Мар','Апр','Мај','Јун',
++		'Јул','Авг','Сеп','Окт','Ное','Дек'],
++		dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
++		dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'],
++		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'],
++		weekHeader: 'Сед',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['mk']);
++});
++
++/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Saji Nediyanchath (saji89@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['ml'] = {
++		closeText: 'ശരി',
++		prevText: 'മുന്നത്തെ',
++		nextText: 'അടുത്തത് ',
++		currentText: 'ഇന്ന്',
++		monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍',
++		'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'],
++		monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍',
++		'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'],
++		dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
++		dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
++		dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'],
++		weekHeader: 'ആ',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ml']);
++});
++
++/* Malaysian initialisation for the jQuery UI date picker plugin. */
++/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
++jQuery(function($){
++	$.datepicker.regional['ms'] = {
++		closeText: 'Tutup',
++		prevText: '&#x3C;Sebelum',
++		nextText: 'Selepas&#x3E;',
++		currentText: 'hari ini',
++		monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
++		'Julai','Ogos','September','Oktober','November','Disember'],
++		monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
++		'Jul','Ogo','Sep','Okt','Nov','Dis'],
++		dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
++		dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
++		dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
++		weekHeader: 'Mg',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ms']);
++});
++
++/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */
++/* Written by Bjørn Johansen (post@bjornjohansen.no). */
++jQuery(function($){
++	$.datepicker.regional['nb'] = {
++		closeText: 'Lukk',
++		prevText: '&#xAB;Forrige',
++		nextText: 'Neste&#xBB;',
++		currentText: 'I dag',
++		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
++		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
++		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
++		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
++		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
++		weekHeader: 'Uke',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['nb']);
++});
++
++/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
++/* David De Sloovere @DavidDeSloovere */
++jQuery(function($){
++	$.datepicker.regional['nl-BE'] = {
++		closeText: 'Sluiten',
++		prevText: '←',
++		nextText: '→',
++		currentText: 'Vandaag',
++		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
++		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
++		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
++		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
++		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
++		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
++		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['nl-BE']);
++});
++
++/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Mathias Bynens <http://mathiasbynens.be/> */
++jQuery(function($){
++	$.datepicker.regional.nl = {
++		closeText: 'Sluiten',
++		prevText: '←',
++		nextText: '→',
++		currentText: 'Vandaag',
++		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
++		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
++		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
++		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
++		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
++		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
++		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional.nl);
++});
++
++/* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */
++/* Written by Bjørn Johansen (post@bjornjohansen.no). */
++jQuery(function($){
++	$.datepicker.regional['nn'] = {
++		closeText: 'Lukk',
++		prevText: '&#xAB;Førre',
++		nextText: 'Neste&#xBB;',
++		currentText: 'I dag',
++		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
++		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
++		dayNamesShort: ['sun','mån','tys','ons','tor','fre','lau'],
++		dayNames: ['sundag','måndag','tysdag','onsdag','torsdag','fredag','laurdag'],
++		dayNamesMin: ['su','må','ty','on','to','fr','la'],
++		weekHeader: 'Veke',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['nn']);
++});
++
++/* Norwegian initialisation for the jQuery UI date picker plugin. */
++/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
++
++jQuery(function($){
++	$.datepicker.regional['no'] = {
++		closeText: 'Lukk',
++		prevText: '&#xAB;Forrige',
++		nextText: 'Neste&#xBB;',
++		currentText: 'I dag',
++		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
++		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
++		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
++		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
++		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
++		weekHeader: 'Uke',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['no']);
++});
++
++/* Polish initialisation for the jQuery UI date picker plugin. */
++/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['pl'] = {
++		closeText: 'Zamknij',
++		prevText: '&#x3C;Poprzedni',
++		nextText: 'Następny&#x3E;',
++		currentText: 'Dziś',
++		monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
++		'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
++		monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
++		'Lip','Sie','Wrz','Pa','Lis','Gru'],
++		dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
++		dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
++		dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
++		weekHeader: 'Tydz',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['pl']);
++});
++
++/* Brazilian initialisation for the jQuery UI date picker plugin. */
++/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['pt-BR'] = {
++		closeText: 'Fechar',
++		prevText: '&#x3C;Anterior',
++		nextText: 'Próximo&#x3E;',
++		currentText: 'Hoje',
++		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
++		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
++		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
++		'Jul','Ago','Set','Out','Nov','Dez'],
++		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
++		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
++		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['pt-BR']);
++});
++
++/* Portuguese initialisation for the jQuery UI date picker plugin. */
++jQuery(function($){
++	$.datepicker.regional['pt'] = {
++		closeText: 'Fechar',
++		prevText: '&#x3C;Anterior',
++		nextText: 'Seguinte',
++		currentText: 'Hoje',
++		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
++		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
++		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
++		'Jul','Ago','Set','Out','Nov','Dez'],
++		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
++		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
++		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
++		weekHeader: 'Sem',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['pt']);
++});
++
++/* Romansh initialisation for the jQuery UI date picker plugin. */
++/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
++jQuery(function($){
++	$.datepicker.regional['rm'] = {
++		closeText: 'Serrar',
++		prevText: '&#x3C;Suandant',
++		nextText: 'Precedent&#x3E;',
++		currentText: 'Actual',
++		monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
++		monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
++		dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
++		dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
++		dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
++		weekHeader: 'emna',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['rm']);
++});
++
++/* Romanian initialisation for the jQuery UI date picker plugin.
++ *
++ * Written by Edmond L. (ll_edmond@walla.com)
++ * and Ionut G. Stan (ionut.g.stan@gmail.com)
++ */
++jQuery(function($){
++	$.datepicker.regional['ro'] = {
++		closeText: 'Închide',
++		prevText: '&#xAB; Luna precedentă',
++		nextText: 'Luna următoare &#xBB;',
++		currentText: 'Azi',
++		monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
++		'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
++		monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
++		'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
++		dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
++		dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
++		dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
++		weekHeader: 'Săpt',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ro']);
++});
++
++/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Andrew Stromnov (stromnov@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['ru'] = {
++		closeText: 'Закрыть',
++		prevText: '&#x3C;Пред',
++		nextText: 'След&#x3E;',
++		currentText: 'Сегодня',
++		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
++		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
++		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
++		'Июл','Авг','Сен','Окт','Ноя','Дек'],
++		dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
++		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
++		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
++		weekHeader: 'Нед',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ru']);
++});
++
++/* Slovak initialisation for the jQuery UI date picker plugin. */
++/* Written by Vojtech Rinik (vojto@hmm.sk). */
++jQuery(function($){
++	$.datepicker.regional['sk'] = {
++		closeText: 'Zavrieť',
++		prevText: '&#x3C;Predchádzajúci',
++		nextText: 'Nasledujúci&#x3E;',
++		currentText: 'Dnes',
++		monthNames: ['január','február','marec','apríl','máj','jún',
++		'júl','august','september','október','november','december'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
++		'Júl','Aug','Sep','Okt','Nov','Dec'],
++		dayNames: ['nedeľa','pondelok','utorok','streda','štvrtok','piatok','sobota'],
++		dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
++		dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
++		weekHeader: 'Ty',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sk']);
++});
++
++/* Slovenian initialisation for the jQuery UI date picker plugin. */
++/* Written by Jaka Jancar (jaka@kubje.org). */
++/* c = č, s = š z = ž C = Č S = Š Z = Ž */
++jQuery(function($){
++	$.datepicker.regional['sl'] = {
++		closeText: 'Zapri',
++		prevText: '&#x3C;Prejšnji',
++		nextText: 'Naslednji&#x3E;',
++		currentText: 'Trenutni',
++		monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
++		'Julij','Avgust','September','Oktober','November','December'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Avg','Sep','Okt','Nov','Dec'],
++		dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'],
++		dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'],
++		dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'],
++		weekHeader: 'Teden',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sl']);
++});
++
++/* Albanian initialisation for the jQuery UI date picker plugin. */
++/* Written by Flakron Bytyqi (flakron@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['sq'] = {
++		closeText: 'mbylle',
++		prevText: '&#x3C;mbrapa',
++		nextText: 'Përpara&#x3E;',
++		currentText: 'sot',
++		monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
++		'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
++		monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
++		'Kor','Gus','Sht','Tet','Nën','Dhj'],
++		dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
++		dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
++		dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
++		weekHeader: 'Ja',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sq']);
++});
++
++/* Serbian i18n for the jQuery UI date picker plugin. */
++/* Written by Dejan Dimić. */
++jQuery(function($){
++	$.datepicker.regional['sr-SR'] = {
++		closeText: 'Zatvori',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Danas',
++		monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
++		'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Avg','Sep','Okt','Nov','Dec'],
++		dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
++		dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
++		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
++		weekHeader: 'Sed',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sr-SR']);
++});
++
++/* Serbian i18n for the jQuery UI date picker plugin. */
++/* Written by Dejan Dimić. */
++jQuery(function($){
++	$.datepicker.regional['sr'] = {
++		closeText: 'Затвори',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Данас',
++		monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
++		'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
++		monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
++		'Јул','Авг','Сеп','Окт','Нов','Дец'],
++		dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
++		dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
++		dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
++		weekHeader: 'Сед',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sr']);
++});
++
++/* Swedish initialisation for the jQuery UI date picker plugin. */
++/* Written by Anders Ekdahl ( anders@nomadiz.se). */
++jQuery(function($){
++	$.datepicker.regional['sv'] = {
++		closeText: 'Stäng',
++		prevText: '&#xAB;Förra',
++		nextText: 'Nästa&#xBB;',
++		currentText: 'Idag',
++		monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
++		'Juli','Augusti','September','Oktober','November','December'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Aug','Sep','Okt','Nov','Dec'],
++		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
++		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
++		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
++		weekHeader: 'Ve',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sv']);
++});
++
++/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by S A Sureshkumar (saskumar@live.com). */
++jQuery(function($){
++	$.datepicker.regional['ta'] = {
++		closeText: 'மூடு',
++		prevText: 'முன்னையது',
++		nextText: 'அடுத்தது',
++		currentText: 'இன்று',
++		monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி',
++		'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'],
++		monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி',
++		'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'],
++		dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'],
++		dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'],
++		dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'],
++		weekHeader: 'Не',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ta']);
++});
++
++/* Thai initialisation for the jQuery UI date picker plugin. */
++/* Written by pipo (pipo@sixhead.com). */
++jQuery(function($){
++	$.datepicker.regional['th'] = {
++		closeText: 'ปิด',
++		prevText: '&#xAB;&#xA0;ย้อน',
++		nextText: 'ถัดไป&#xA0;&#xBB;',
++		currentText: 'วันนี้',
++		monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
++		'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
++		monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
++		'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
++		dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
++		dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
++		dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['th']);
++});
++
++/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['tj'] = {
++		closeText: 'Идома',
++		prevText: '&#x3c;Қафо',
++		nextText: 'Пеш&#x3e;',
++		currentText: 'Имрӯз',
++		monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн',
++		'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'],
++		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
++		'Июл','Авг','Сен','Окт','Ноя','Дек'],
++		dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
++		dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'],
++		dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
++		weekHeader: 'Хф',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['tj']);
++});
++
++/* Turkish initialisation for the jQuery UI date picker plugin. */
++/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
++jQuery(function($){
++	$.datepicker.regional['tr'] = {
++		closeText: 'kapat',
++		prevText: '&#x3C;geri',
++		nextText: 'ileri&#x3e',
++		currentText: 'bugün',
++		monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
++		'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
++		monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
++		'Tem','Ağu','Eyl','Eki','Kas','Ara'],
++		dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
++		dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
++		dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
++		weekHeader: 'Hf',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['tr']);
++});
++
++/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
++/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['uk'] = {
++		closeText: 'Закрити',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Сьогодні',
++		monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
++		'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
++		monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
++		'Лип','Сер','Вер','Жов','Лис','Гру'],
++		dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
++		dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
++		dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
++		weekHeader: 'Тиж',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['uk']);
++});
++
++/* Vietnamese initialisation for the jQuery UI date picker plugin. */
++/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
++jQuery(function($){
++	$.datepicker.regional['vi'] = {
++		closeText: 'Đóng',
++		prevText: '&#x3C;Trước',
++		nextText: 'Tiếp&#x3E;',
++		currentText: 'Hôm nay',
++		monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
++		'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
++		monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
++		'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
++		dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
++		dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
++		dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
++		weekHeader: 'Tu',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['vi']);
++});
++
++/* Chinese initialisation for the jQuery UI date picker plugin. */
++/* Written by Cloudream (cloudream@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['zh-CN'] = {
++		closeText: '关闭',
++		prevText: '&#x3C;上月',
++		nextText: '下月&#x3E;',
++		currentText: '今天',
++		monthNames: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
++		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
++		dayNamesMin: ['日','一','二','三','四','五','六'],
++		weekHeader: '周',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['zh-CN']);
++});
++
++/* Chinese initialisation for the jQuery UI date picker plugin. */
++/* Written by SCCY (samuelcychan@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['zh-HK'] = {
++		closeText: '關閉',
++		prevText: '&#x3C;上月',
++		nextText: '下月&#x3E;',
++		currentText: '今天',
++		monthNames: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
++		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
++		dayNamesMin: ['日','一','二','三','四','五','六'],
++		weekHeader: '周',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['zh-HK']);
++});
++
++/* Chinese initialisation for the jQuery UI date picker plugin. */
++/* Written by Ressol (ressol@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['zh-TW'] = {
++		closeText: '關閉',
++		prevText: '&#x3C;上月',
++		nextText: '下月&#x3E;',
++		currentText: '今天',
++		monthNames: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
++		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
++		dayNamesMin: ['日','一','二','三','四','五','六'],
++		weekHeader: '周',
++		dateFormat: 'yy/mm/dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['zh-TW']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr-SR.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr-SR.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr-SR.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Serbian i18n for the jQuery UI date picker plugin. */
++/* Written by Dejan Dimić. */
++jQuery(function($){
++	$.datepicker.regional['sr-SR'] = {
++		closeText: 'Zatvori',
++		prevText: '&#x3C;',
++		nextText: '&#x3E;',
++		currentText: 'Danas',
++		monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
++		'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Avg','Sep','Okt','Nov','Dec'],
++		dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
++		dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
++		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
++		weekHeader: 'Sed',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sr-SR']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-et.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-et.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-et.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Estonian initialisation for the jQuery UI date picker plugin. */
++/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
++jQuery(function($){
++	$.datepicker.regional['et'] = {
++		closeText: 'Sulge',
++		prevText: 'Eelnev',
++		nextText: 'Järgnev',
++		currentText: 'Täna',
++		monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
++		'Juuli','August','September','Oktoober','November','Detsember'],
++		monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
++		'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
++		dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
++		dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
++		dayNamesMin: ['P','E','T','K','N','R','L'],
++		weekHeader: 'näd',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['et']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ml.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ml.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ml.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Saji Nediyanchath (saji89@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['ml'] = {
++		closeText: 'ശരി',
++		prevText: 'മുന്നത്തെ',
++		nextText: 'അടുത്തത് ',
++		currentText: 'ഇന്ന്',
++		monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍',
++		'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'],
++		monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍',
++		'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'],
++		dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
++		dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
++		dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'],
++		weekHeader: 'ആ',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['ml']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-TW.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-TW.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-TW.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Chinese initialisation for the jQuery UI date picker plugin. */
++/* Written by Ressol (ressol@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['zh-TW'] = {
++		closeText: '關閉',
++		prevText: '&#x3C;上月',
++		nextText: '下月&#x3E;',
++		currentText: '今天',
++		monthNames: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
++		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
++		dayNamesMin: ['日','一','二','三','四','五','六'],
++		weekHeader: '周',
++		dateFormat: 'yy/mm/dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['zh-TW']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* Written by Mathias Bynens <http://mathiasbynens.be/> */
++jQuery(function($){
++	$.datepicker.regional.nl = {
++		closeText: 'Sluiten',
++		prevText: '←',
++		nextText: '→',
++		currentText: 'Vandaag',
++		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
++		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
++		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
++		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
++		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
++		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
++		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd-mm-yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional.nl);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pl.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pl.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pl.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Polish initialisation for the jQuery UI date picker plugin. */
++/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['pl'] = {
++		closeText: 'Zamknij',
++		prevText: '&#x3C;Poprzedni',
++		nextText: 'Następny&#x3E;',
++		currentText: 'Dziś',
++		monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
++		'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
++		monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
++		'Lip','Sie','Wrz','Pa','Lis','Gru'],
++		dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
++		dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
++		dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
++		weekHeader: 'Tydz',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['pl']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-th.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-th.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-th.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Thai initialisation for the jQuery UI date picker plugin. */
++/* Written by pipo (pipo@sixhead.com). */
++jQuery(function($){
++	$.datepicker.regional['th'] = {
++		closeText: 'ปิด',
++		prevText: '&#xAB;&#xA0;ย้อน',
++		nextText: 'ถัดไป&#xA0;&#xBB;',
++		currentText: 'วันนี้',
++		monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
++		'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
++		monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
++		'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
++		dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
++		dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
++		dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['th']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-it.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-it.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-it.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Italian initialisation for the jQuery UI date picker plugin. */
++/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['it'] = {
++		closeText: 'Chiudi',
++		prevText: '&#x3C;Prec',
++		nextText: 'Succ&#x3E;',
++		currentText: 'Oggi',
++		monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
++			'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
++		monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
++			'Lug','Ago','Set','Ott','Nov','Dic'],
++		dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'],
++		dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
++		dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
++		weekHeader: 'Sm',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['it']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sl.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sl.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sl.js	(revision 15487)
+@@ -0,0 +1,24 @@
++/* Slovenian initialisation for the jQuery UI date picker plugin. */
++/* Written by Jaka Jancar (jaka@kubje.org). */
++/* c = č, s = š z = ž C = Č S = Š Z = Ž */
++jQuery(function($){
++	$.datepicker.regional['sl'] = {
++		closeText: 'Zapri',
++		prevText: '&#x3C;Prejšnji',
++		nextText: 'Naslednji&#x3E;',
++		currentText: 'Trenutni',
++		monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
++		'Julij','Avgust','September','Oktober','November','December'],
++		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
++		'Jul','Avg','Sep','Okt','Nov','Dec'],
++		dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'],
++		dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'],
++		dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'],
++		weekHeader: 'Teden',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['sl']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lt.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lt.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lt.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
++/* @author Arturas Paleicikas <arturas@avalon.lt> */
++jQuery(function($){
++	$.datepicker.regional['lt'] = {
++		closeText: 'Uždaryti',
++		prevText: '&#x3C;Atgal',
++		nextText: 'Pirmyn&#x3E;',
++		currentText: 'Šiandien',
++		monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
++		'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
++		monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
++		'Lie','Rugp','Rugs','Spa','Lap','Gru'],
++		dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
++		dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
++		dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
++		weekHeader: 'Wk',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['lt']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-CN.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-CN.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-CN.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Chinese initialisation for the jQuery UI date picker plugin. */
++/* Written by Cloudream (cloudream@gmail.com). */
++jQuery(function($){
++	$.datepicker.regional['zh-CN'] = {
++		closeText: '关闭',
++		prevText: '&#x3C;上月',
++		nextText: '下月&#x3E;',
++		currentText: '今天',
++		monthNames: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
++		'七月','八月','九月','十月','十一月','十二月'],
++		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
++		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
++		dayNamesMin: ['日','一','二','三','四','五','六'],
++		weekHeader: '周',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: true,
++		yearSuffix: '年'};
++	$.datepicker.setDefaults($.datepicker.regional['zh-CN']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt.js	(revision 15487)
+@@ -0,0 +1,22 @@
++/* Portuguese initialisation for the jQuery UI date picker plugin. */
++jQuery(function($){
++	$.datepicker.regional['pt'] = {
++		closeText: 'Fechar',
++		prevText: '&#x3C;Anterior',
++		nextText: 'Seguinte',
++		currentText: 'Hoje',
++		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
++		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
++		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
++		'Jul','Ago','Set','Out','Nov','Dez'],
++		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
++		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
++		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
++		weekHeader: 'Sem',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['pt']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-GB.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-GB.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-GB.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* English/UK initialisation for the jQuery UI date picker plugin. */
++/* Written by Stuart. */
++jQuery(function($){
++	$.datepicker.regional['en-GB'] = {
++		closeText: 'Done',
++		prevText: 'Prev',
++		nextText: 'Next',
++		currentText: 'Today',
++		monthNames: ['January','February','March','April','May','June',
++		'July','August','September','October','November','December'],
++		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
++		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
++		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
++		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
++		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['en-GB']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bg.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bg.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bg.js	(revision 15487)
+@@ -0,0 +1,24 @@
++/* Bulgarian initialisation for the jQuery UI date picker plugin. */
++/* Written by Stoyan Kyosev (http://svest.org). */
++jQuery(function($){
++	$.datepicker.regional['bg'] = {
++		closeText: 'затвори',
++		prevText: '&#x3C;назад',
++		nextText: 'напред&#x3E;',
++		nextBigText: '&#x3E;&#x3E;',
++		currentText: 'днес',
++		monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
++		'Юли','Август','Септември','Октомври','Ноември','Декември'],
++		monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
++		'Юли','Авг','Сеп','Окт','Нов','Дек'],
++		dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
++		dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
++		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd.mm.yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['bg']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CA.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CA.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CA.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Canadian-French initialisation for the jQuery UI date picker plugin. */
++jQuery(function ($) {
++	$.datepicker.regional['fr-CA'] = {
++		closeText: 'Fermer',
++		prevText: 'Précédent',
++		nextText: 'Suivant',
++		currentText: 'Aujourd\'hui',
++		monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
++			'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
++		monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin',
++			'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
++		dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
++		dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
++		dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
++		weekHeader: 'Sem.',
++		dateFormat: 'yy-mm-dd',
++		firstDay: 0,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''
++	};
++	$.datepicker.setDefaults($.datepicker.regional['fr-CA']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl-BE.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl-BE.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl-BE.js	(revision 15487)
+@@ -0,0 +1,23 @@
++/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
++/* David De Sloovere @DavidDeSloovere */
++jQuery(function($){
++	$.datepicker.regional['nl-BE'] = {
++		closeText: 'Sluiten',
++		prevText: '←',
++		nextText: '→',
++		currentText: 'Vandaag',
++		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
++		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
++		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
++		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
++		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
++		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
++		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
++		weekHeader: 'Wk',
++		dateFormat: 'dd/mm/yy',
++		firstDay: 1,
++		isRTL: false,
++		showMonthAfterYear: false,
++		yearSuffix: ''};
++	$.datepicker.setDefaults($.datepicker.regional['nl-BE']);
++});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.button.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.button.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.button.js	(revision 15487)
+@@ -0,0 +1,419 @@
++/*!
++ * jQuery UI Button 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/button/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var lastActive, startXPos, startYPos, clickDragged,
++	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
++	stateClasses = "ui-state-hover ui-state-active ",
++	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
++	formResetHandler = function() {
++		var form = $( this );
++		setTimeout(function() {
++			form.find( ":ui-button" ).button( "refresh" );
++		}, 1 );
++	},
++	radioGroup = function( radio ) {
++		var name = radio.name,
++			form = radio.form,
++			radios = $( [] );
++		if ( name ) {
++			name = name.replace( /'/g, "\\'" );
++			if ( form ) {
++				radios = $( form ).find( "[name='" + name + "']" );
++			} else {
++				radios = $( "[name='" + name + "']", radio.ownerDocument )
++					.filter(function() {
++						return !this.form;
++					});
++			}
++		}
++		return radios;
++	};
++
++$.widget( "ui.button", {
++	version: "1.10.3",
++	defaultElement: "<button>",
++	options: {
++		disabled: null,
++		text: true,
++		label: null,
++		icons: {
++			primary: null,
++			secondary: null
++		}
++	},
++	_create: function() {
++		this.element.closest( "form" )
++			.unbind( "reset" + this.eventNamespace )
++			.bind( "reset" + this.eventNamespace, formResetHandler );
++
++		if ( typeof this.options.disabled !== "boolean" ) {
++			this.options.disabled = !!this.element.prop( "disabled" );
++		} else {
++			this.element.prop( "disabled", this.options.disabled );
++		}
++
++		this._determineButtonType();
++		this.hasTitle = !!this.buttonElement.attr( "title" );
++
++		var that = this,
++			options = this.options,
++			toggleButton = this.type === "checkbox" || this.type === "radio",
++			activeClass = !toggleButton ? "ui-state-active" : "",
++			focusClass = "ui-state-focus";
++
++		if ( options.label === null ) {
++			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
++		}
++
++		this._hoverable( this.buttonElement );
++
++		this.buttonElement
++			.addClass( baseClasses )
++			.attr( "role", "button" )
++			.bind( "mouseenter" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				if ( this === lastActive ) {
++					$( this ).addClass( "ui-state-active" );
++				}
++			})
++			.bind( "mouseleave" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( activeClass );
++			})
++			.bind( "click" + this.eventNamespace, function( event ) {
++				if ( options.disabled ) {
++					event.preventDefault();
++					event.stopImmediatePropagation();
++				}
++			});
++
++		this.element
++			.bind( "focus" + this.eventNamespace, function() {
++				// no need to check disabled, focus won't be triggered anyway
++				that.buttonElement.addClass( focusClass );
++			})
++			.bind( "blur" + this.eventNamespace, function() {
++				that.buttonElement.removeClass( focusClass );
++			});
++
++		if ( toggleButton ) {
++			this.element.bind( "change" + this.eventNamespace, function() {
++				if ( clickDragged ) {
++					return;
++				}
++				that.refresh();
++			});
++			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
++			// prevents issue where button state changes but checkbox/radio checked state
++			// does not in Firefox (see ticket #6970)
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					clickDragged = false;
++					startXPos = event.pageX;
++					startYPos = event.pageY;
++				})
++				.bind( "mouseup" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
++						clickDragged = true;
++					}
++			});
++		}
++
++		if ( this.type === "checkbox" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++			});
++		} else if ( this.type === "radio" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).addClass( "ui-state-active" );
++				that.buttonElement.attr( "aria-pressed", "true" );
++
++				var radio = that.element[ 0 ];
++				radioGroup( radio )
++					.not( radio )
++					.map(function() {
++						return $( this ).button( "widget" )[ 0 ];
++					})
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			});
++		} else {
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).addClass( "ui-state-active" );
++					lastActive = this;
++					that.document.one( "mouseup", function() {
++						lastActive = null;
++					});
++				})
++				.bind( "mouseup" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).removeClass( "ui-state-active" );
++				})
++				.bind( "keydown" + this.eventNamespace, function(event) {
++					if ( options.disabled ) {
++						return false;
++					}
++					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
++						$( this ).addClass( "ui-state-active" );
++					}
++				})
++				// see #8559, we bind to blur here in case the button element loses
++				// focus between keydown and keyup, it would be left in an "active" state
++				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
++					$( this ).removeClass( "ui-state-active" );
++				});
++
++			if ( this.buttonElement.is("a") ) {
++				this.buttonElement.keyup(function(event) {
++					if ( event.keyCode === $.ui.keyCode.SPACE ) {
++						// TODO pass through original event correctly (just as 2nd argument doesn't work)
++						$( this ).click();
++					}
++				});
++			}
++		}
++
++		// TODO: pull out $.Widget's handling for the disabled option into
++		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
++		// be overridden by individual plugins
++		this._setOption( "disabled", options.disabled );
++		this._resetButton();
++	},
++
++	_determineButtonType: function() {
++		var ancestor, labelSelector, checked;
++
++		if ( this.element.is("[type=checkbox]") ) {
++			this.type = "checkbox";
++		} else if ( this.element.is("[type=radio]") ) {
++			this.type = "radio";
++		} else if ( this.element.is("input") ) {
++			this.type = "input";
++		} else {
++			this.type = "button";
++		}
++
++		if ( this.type === "checkbox" || this.type === "radio" ) {
++			// we don't search against the document in case the element
++			// is disconnected from the DOM
++			ancestor = this.element.parents().last();
++			labelSelector = "label[for='" + this.element.attr("id") + "']";
++			this.buttonElement = ancestor.find( labelSelector );
++			if ( !this.buttonElement.length ) {
++				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
++				this.buttonElement = ancestor.filter( labelSelector );
++				if ( !this.buttonElement.length ) {
++					this.buttonElement = ancestor.find( labelSelector );
++				}
++			}
++			this.element.addClass( "ui-helper-hidden-accessible" );
++
++			checked = this.element.is( ":checked" );
++			if ( checked ) {
++				this.buttonElement.addClass( "ui-state-active" );
++			}
++			this.buttonElement.prop( "aria-pressed", checked );
++		} else {
++			this.buttonElement = this.element;
++		}
++	},
++
++	widget: function() {
++		return this.buttonElement;
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-helper-hidden-accessible" );
++		this.buttonElement
++			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
++			.removeAttr( "role" )
++			.removeAttr( "aria-pressed" )
++			.html( this.buttonElement.find(".ui-button-text").html() );
++
++		if ( !this.hasTitle ) {
++			this.buttonElement.removeAttr( "title" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++			} else {
++				this.element.prop( "disabled", false );
++			}
++			return;
++		}
++		this._resetButton();
++	},
++
++	refresh: function() {
++		//See #8237 & #8828
++		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
++
++		if ( isDisabled !== this.options.disabled ) {
++			this._setOption( "disabled", isDisabled );
++		}
++		if ( this.type === "radio" ) {
++			radioGroup( this.element[0] ).each(function() {
++				if ( $( this ).is( ":checked" ) ) {
++					$( this ).button( "widget" )
++						.addClass( "ui-state-active" )
++						.attr( "aria-pressed", "true" );
++				} else {
++					$( this ).button( "widget" )
++						.removeClass( "ui-state-active" )
++						.attr( "aria-pressed", "false" );
++				}
++			});
++		} else if ( this.type === "checkbox" ) {
++			if ( this.element.is( ":checked" ) ) {
++				this.buttonElement
++					.addClass( "ui-state-active" )
++					.attr( "aria-pressed", "true" );
++			} else {
++				this.buttonElement
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			}
++		}
++	},
++
++	_resetButton: function() {
++		if ( this.type === "input" ) {
++			if ( this.options.label ) {
++				this.element.val( this.options.label );
++			}
++			return;
++		}
++		var buttonElement = this.buttonElement.removeClass( typeClasses ),
++			buttonText = $( "<span></span>", this.document[0] )
++				.addClass( "ui-button-text" )
++				.html( this.options.label )
++				.appendTo( buttonElement.empty() )
++				.text(),
++			icons = this.options.icons,
++			multipleIcons = icons.primary && icons.secondary,
++			buttonClasses = [];
++
++		if ( icons.primary || icons.secondary ) {
++			if ( this.options.text ) {
++				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
++			}
++
++			if ( icons.primary ) {
++				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
++			}
++
++			if ( icons.secondary ) {
++				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
++			}
++
++			if ( !this.options.text ) {
++				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
++
++				if ( !this.hasTitle ) {
++					buttonElement.attr( "title", $.trim( buttonText ) );
++				}
++			}
++		} else {
++			buttonClasses.push( "ui-button-text-only" );
++		}
++		buttonElement.addClass( buttonClasses.join( " " ) );
++	}
++});
++
++$.widget( "ui.buttonset", {
++	version: "1.10.3",
++	options: {
++		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
++	},
++
++	_create: function() {
++		this.element.addClass( "ui-buttonset" );
++	},
++
++	_init: function() {
++		this.refresh();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "disabled" ) {
++			this.buttons.button( "option", key, value );
++		}
++
++		this._super( key, value );
++	},
++
++	refresh: function() {
++		var rtl = this.element.css( "direction" ) === "rtl";
++
++		this.buttons = this.element.find( this.options.items )
++			.filter( ":ui-button" )
++				.button( "refresh" )
++			.end()
++			.not( ":ui-button" )
++				.button()
++			.end()
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
++				.filter( ":first" )
++					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
++				.end()
++				.filter( ":last" )
++					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
++				.end()
++			.end();
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-buttonset" );
++		this.buttons
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-left ui-corner-right" )
++			.end()
++			.button( "destroy" );
++	}
++});
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.spinner.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.spinner.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.spinner.js	(revision 15487)
+@@ -0,0 +1,493 @@
++/*!
++ * jQuery UI Spinner 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/spinner/
++ *
++ * Depends:
++ *  jquery.ui.core.js
++ *  jquery.ui.widget.js
++ *  jquery.ui.button.js
++ */
++(function( $ ) {
++
++function modifier( fn ) {
++	return function() {
++		var previous = this.element.val();
++		fn.apply( this, arguments );
++		this._refresh();
++		if ( previous !== this.element.val() ) {
++			this._trigger( "change" );
++		}
++	};
++}
++
++$.widget( "ui.spinner", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	widgetEventPrefix: "spin",
++	options: {
++		culture: null,
++		icons: {
++			down: "ui-icon-triangle-1-s",
++			up: "ui-icon-triangle-1-n"
++		},
++		incremental: true,
++		max: null,
++		min: null,
++		numberFormat: null,
++		page: 10,
++		step: 1,
++
++		change: null,
++		spin: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		// handle string values that need to be parsed
++		this._setOption( "max", this.options.max );
++		this._setOption( "min", this.options.min );
++		this._setOption( "step", this.options.step );
++
++		// format the value, but don't constrain
++		this._value( this.element.val(), true );
++
++		this._draw();
++		this._on( this._events );
++		this._refresh();
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_getCreateOptions: function() {
++		var options = {},
++			element = this.element;
++
++		$.each( [ "min", "max", "step" ], function( i, option ) {
++			var value = element.attr( option );
++			if ( value !== undefined && value.length ) {
++				options[ option ] = value;
++			}
++		});
++
++		return options;
++	},
++
++	_events: {
++		keydown: function( event ) {
++			if ( this._start( event ) && this._keydown( event ) ) {
++				event.preventDefault();
++			}
++		},
++		keyup: "_stop",
++		focus: function() {
++			this.previous = this.element.val();
++		},
++		blur: function( event ) {
++			if ( this.cancelBlur ) {
++				delete this.cancelBlur;
++				return;
++			}
++
++			this._stop();
++			this._refresh();
++			if ( this.previous !== this.element.val() ) {
++				this._trigger( "change", event );
++			}
++		},
++		mousewheel: function( event, delta ) {
++			if ( !delta ) {
++				return;
++			}
++			if ( !this.spinning && !this._start( event ) ) {
++				return false;
++			}
++
++			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
++			clearTimeout( this.mousewheelTimer );
++			this.mousewheelTimer = this._delay(function() {
++				if ( this.spinning ) {
++					this._stop( event );
++				}
++			}, 100 );
++			event.preventDefault();
++		},
++		"mousedown .ui-spinner-button": function( event ) {
++			var previous;
++
++			// We never want the buttons to have focus; whenever the user is
++			// interacting with the spinner, the focus should be on the input.
++			// If the input is focused then this.previous is properly set from
++			// when the input first received focus. If the input is not focused
++			// then we need to set this.previous based on the value before spinning.
++			previous = this.element[0] === this.document[0].activeElement ?
++				this.previous : this.element.val();
++			function checkFocus() {
++				var isActive = this.element[0] === this.document[0].activeElement;
++				if ( !isActive ) {
++					this.element.focus();
++					this.previous = previous;
++					// support: IE
++					// IE sets focus asynchronously, so we need to check if focus
++					// moved off of the input because the user clicked on the button.
++					this._delay(function() {
++						this.previous = previous;
++					});
++				}
++			}
++
++			// ensure focus is on (or stays on) the text field
++			event.preventDefault();
++			checkFocus.call( this );
++
++			// support: IE
++			// IE doesn't prevent moving focus even with event.preventDefault()
++			// so we set a flag to know when we should ignore the blur event
++			// and check (again) if focus moved off of the input.
++			this.cancelBlur = true;
++			this._delay(function() {
++				delete this.cancelBlur;
++				checkFocus.call( this );
++			});
++
++			if ( this._start( event ) === false ) {
++				return;
++			}
++
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		"mouseup .ui-spinner-button": "_stop",
++		"mouseenter .ui-spinner-button": function( event ) {
++			// button will add ui-state-active if mouse was down while mouseleave and kept down
++			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
++				return;
++			}
++
++			if ( this._start( event ) === false ) {
++				return false;
++			}
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		// TODO: do we really want to consider this a stop?
++		// shouldn't we just stop the repeater and wait until mouseup before
++		// we trigger the stop event?
++		"mouseleave .ui-spinner-button": "_stop"
++	},
++
++	_draw: function() {
++		var uiSpinner = this.uiSpinner = this.element
++			.addClass( "ui-spinner-input" )
++			.attr( "autocomplete", "off" )
++			.wrap( this._uiSpinnerHtml() )
++			.parent()
++				// add buttons
++				.append( this._buttonHtml() );
++
++		this.element.attr( "role", "spinbutton" );
++
++		// button bindings
++		this.buttons = uiSpinner.find( ".ui-spinner-button" )
++			.attr( "tabIndex", -1 )
++			.button()
++			.removeClass( "ui-corner-all" );
++
++		// IE 6 doesn't understand height: 50% for the buttons
++		// unless the wrapper has an explicit height
++		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
++				uiSpinner.height() > 0 ) {
++			uiSpinner.height( uiSpinner.height() );
++		}
++
++		// disable spinner if element was already disabled
++		if ( this.options.disabled ) {
++			this.disable();
++		}
++	},
++
++	_keydown: function( event ) {
++		var options = this.options,
++			keyCode = $.ui.keyCode;
++
++		switch ( event.keyCode ) {
++		case keyCode.UP:
++			this._repeat( null, 1, event );
++			return true;
++		case keyCode.DOWN:
++			this._repeat( null, -1, event );
++			return true;
++		case keyCode.PAGE_UP:
++			this._repeat( null, options.page, event );
++			return true;
++		case keyCode.PAGE_DOWN:
++			this._repeat( null, -options.page, event );
++			return true;
++		}
++
++		return false;
++	},
++
++	_uiSpinnerHtml: function() {
++		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
++	},
++
++	_buttonHtml: function() {
++		return "" +
++			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
++				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
++			"</a>" +
++			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
++				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
++			"</a>";
++	},
++
++	_start: function( event ) {
++		if ( !this.spinning && this._trigger( "start", event ) === false ) {
++			return false;
++		}
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++		this.spinning = true;
++		return true;
++	},
++
++	_repeat: function( i, steps, event ) {
++		i = i || 500;
++
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			this._repeat( 40, steps, event );
++		}, i );
++
++		this._spin( steps * this.options.step, event );
++	},
++
++	_spin: function( step, event ) {
++		var value = this.value() || 0;
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++
++		value = this._adjustValue( value + step * this._increment( this.counter ) );
++
++		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
++			this._value( value );
++			this.counter++;
++		}
++	},
++
++	_increment: function( i ) {
++		var incremental = this.options.incremental;
++
++		if ( incremental ) {
++			return $.isFunction( incremental ) ?
++				incremental( i ) :
++				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
++		}
++
++		return 1;
++	},
++
++	_precision: function() {
++		var precision = this._precisionOf( this.options.step );
++		if ( this.options.min !== null ) {
++			precision = Math.max( precision, this._precisionOf( this.options.min ) );
++		}
++		return precision;
++	},
++
++	_precisionOf: function( num ) {
++		var str = num.toString(),
++			decimal = str.indexOf( "." );
++		return decimal === -1 ? 0 : str.length - decimal - 1;
++	},
++
++	_adjustValue: function( value ) {
++		var base, aboveMin,
++			options = this.options;
++
++		// make sure we're at a valid step
++		// - find out where we are relative to the base (min or 0)
++		base = options.min !== null ? options.min : 0;
++		aboveMin = value - base;
++		// - round to the nearest step
++		aboveMin = Math.round(aboveMin / options.step) * options.step;
++		// - rounding is based on 0, so adjust back to our base
++		value = base + aboveMin;
++
++		// fix precision from bad JS floating point math
++		value = parseFloat( value.toFixed( this._precision() ) );
++
++		// clamp the value
++		if ( options.max !== null && value > options.max) {
++			return options.max;
++		}
++		if ( options.min !== null && value < options.min ) {
++			return options.min;
++		}
++
++		return value;
++	},
++
++	_stop: function( event ) {
++		if ( !this.spinning ) {
++			return;
++		}
++
++		clearTimeout( this.timer );
++		clearTimeout( this.mousewheelTimer );
++		this.counter = 0;
++		this.spinning = false;
++		this._trigger( "stop", event );
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "culture" || key === "numberFormat" ) {
++			var prevValue = this._parse( this.element.val() );
++			this.options[ key ] = value;
++			this.element.val( this._format( prevValue ) );
++			return;
++		}
++
++		if ( key === "max" || key === "min" || key === "step" ) {
++			if ( typeof value === "string" ) {
++				value = this._parse( value );
++			}
++		}
++		if ( key === "icons" ) {
++			this.buttons.first().find( ".ui-icon" )
++				.removeClass( this.options.icons.up )
++				.addClass( value.up );
++			this.buttons.last().find( ".ui-icon" )
++				.removeClass( this.options.icons.down )
++				.addClass( value.down );
++		}
++
++		this._super( key, value );
++
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++				this.buttons.button( "disable" );
++			} else {
++				this.element.prop( "disabled", false );
++				this.buttons.button( "enable" );
++			}
++		}
++	},
++
++	_setOptions: modifier(function( options ) {
++		this._super( options );
++		this._value( this.element.val() );
++	}),
++
++	_parse: function( val ) {
++		if ( typeof val === "string" && val !== "" ) {
++			val = window.Globalize && this.options.numberFormat ?
++				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
++		}
++		return val === "" || isNaN( val ) ? null : val;
++	},
++
++	_format: function( value ) {
++		if ( value === "" ) {
++			return "";
++		}
++		return window.Globalize && this.options.numberFormat ?
++			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
++			value;
++	},
++
++	_refresh: function() {
++		this.element.attr({
++			"aria-valuemin": this.options.min,
++			"aria-valuemax": this.options.max,
++			// TODO: what should we do with values that can't be parsed?
++			"aria-valuenow": this._parse( this.element.val() )
++		});
++	},
++
++	// update the value without triggering change
++	_value: function( value, allowAny ) {
++		var parsed;
++		if ( value !== "" ) {
++			parsed = this._parse( value );
++			if ( parsed !== null ) {
++				if ( !allowAny ) {
++					parsed = this._adjustValue( parsed );
++				}
++				value = this._format( parsed );
++			}
++		}
++		this.element.val( value );
++		this._refresh();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-spinner-input" )
++			.prop( "disabled", false )
++			.removeAttr( "autocomplete" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++		this.uiSpinner.replaceWith( this.element );
++	},
++
++	stepUp: modifier(function( steps ) {
++		this._stepUp( steps );
++	}),
++	_stepUp: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * this.options.step );
++			this._stop();
++		}
++	},
++
++	stepDown: modifier(function( steps ) {
++		this._stepDown( steps );
++	}),
++	_stepDown: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * -this.options.step );
++			this._stop();
++		}
++	},
++
++	pageUp: modifier(function( pages ) {
++		this._stepUp( (pages || 1) * this.options.page );
++	}),
++
++	pageDown: modifier(function( pages ) {
++		this._stepDown( (pages || 1) * this.options.page );
++	}),
++
++	value: function( newVal ) {
++		if ( !arguments.length ) {
++			return this._parse( this.element.val() );
++		}
++		modifier( this._value ).call( this, newVal );
++	},
++
++	widget: function() {
++		return this.uiSpinner;
++	}
++});
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fold.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fold.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fold.js	(revision 15487)
+@@ -0,0 +1,76 @@
++/*!
++ * jQuery UI Effects Fold 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/fold-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.fold = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		size = o.size || 15,
++		percent = /([0-9]+)%/.exec( size ),
++		horizFirst = !!o.horizFirst,
++		widthFirst = show !== horizFirst,
++		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
++		duration = o.duration / 2,
++		wrapper, distance,
++		animation1 = {},
++		animation2 = {};
++
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	distance = widthFirst ?
++		[ wrapper.width(), wrapper.height() ] :
++		[ wrapper.height(), wrapper.width() ];
++
++	if ( percent ) {
++		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
++	}
++	if ( show ) {
++		wrapper.css( horizFirst ? {
++			height: 0,
++			width: size
++		} : {
++			height: size,
++			width: 0
++		});
++	}
++
++	// Animation
++	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
++	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
++
++	// Animate
++	wrapper
++		.animate( animation1, duration, o.easing )
++		.animate( animation2, duration, o.easing, function() {
++			if ( hide ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.resizable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.resizable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.resizable.js	(revision 15487)
+@@ -0,0 +1,968 @@
++/*!
++ * jQuery UI Resizable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/resizable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++function num(v) {
++	return parseInt(v, 10) || 0;
++}
++
++function isNumber(value) {
++	return !isNaN(parseInt(value, 10));
++}
++
++$.widget("ui.resizable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "resize",
++	options: {
++		alsoResize: false,
++		animate: false,
++		animateDuration: "slow",
++		animateEasing: "swing",
++		aspectRatio: false,
++		autoHide: false,
++		containment: false,
++		ghost: false,
++		grid: false,
++		handles: "e,s,se",
++		helper: false,
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 10,
++		minWidth: 10,
++		// See #7960
++		zIndex: 90,
++
++		// callbacks
++		resize: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		var n, i, handle, axis, hname,
++			that = this,
++			o = this.options;
++		this.element.addClass("ui-resizable");
++
++		$.extend(this, {
++			_aspectRatio: !!(o.aspectRatio),
++			aspectRatio: o.aspectRatio,
++			originalElement: this.element,
++			_proportionallyResizeElements: [],
++			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
++		});
++
++		//Wrap the element if it cannot hold child nodes
++		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
++
++			//Create a wrapper element and set the wrapper to the new current internal element
++			this.element.wrap(
++				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
++					position: this.element.css("position"),
++					width: this.element.outerWidth(),
++					height: this.element.outerHeight(),
++					top: this.element.css("top"),
++					left: this.element.css("left")
++				})
++			);
++
++			//Overwrite the original this.element
++			this.element = this.element.parent().data(
++				"ui-resizable", this.element.data("ui-resizable")
++			);
++
++			this.elementIsWrapper = true;
++
++			//Move margins to the wrapper
++			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
++			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
++
++			//Prevent Safari textarea resize
++			this.originalResizeStyle = this.originalElement.css("resize");
++			this.originalElement.css("resize", "none");
++
++			//Push the actual element to our proportionallyResize internal array
++			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
++
++			// avoid IE jump (hard set the margin)
++			this.originalElement.css({ margin: this.originalElement.css("margin") });
++
++			// fix handlers offset
++			this._proportionallyResize();
++
++		}
++
++		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
++		if(this.handles.constructor === String) {
++
++			if ( this.handles === "all") {
++				this.handles = "n,e,s,w,se,sw,ne,nw";
++			}
++
++			n = this.handles.split(",");
++			this.handles = {};
++
++			for(i = 0; i < n.length; i++) {
++
++				handle = $.trim(n[i]);
++				hname = "ui-resizable-"+handle;
++				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
++
++				// Apply zIndex to all handles - see #7960
++				axis.css({ zIndex: o.zIndex });
++
++				//TODO : What's going on here?
++				if ("se" === handle) {
++					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
++				}
++
++				//Insert into internal handles object and append to element
++				this.handles[handle] = ".ui-resizable-"+handle;
++				this.element.append(axis);
++			}
++
++		}
++
++		this._renderAxis = function(target) {
++
++			var i, axis, padPos, padWrapper;
++
++			target = target || this.element;
++
++			for(i in this.handles) {
++
++				if(this.handles[i].constructor === String) {
++					this.handles[i] = $(this.handles[i], this.element).show();
++				}
++
++				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
++				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
++
++					axis = $(this.handles[i], this.element);
++
++					//Checking the correct pad and border
++					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
++
++					//The padding type i have to apply...
++					padPos = [ "padding",
++						/ne|nw|n/.test(i) ? "Top" :
++						/se|sw|s/.test(i) ? "Bottom" :
++						/^e$/.test(i) ? "Right" : "Left" ].join("");
++
++					target.css(padPos, padWrapper);
++
++					this._proportionallyResize();
++
++				}
++
++				//TODO: What's that good for? There's not anything to be executed left
++				if(!$(this.handles[i]).length) {
++					continue;
++				}
++			}
++		};
++
++		//TODO: make renderAxis a prototype function
++		this._renderAxis(this.element);
++
++		this._handles = $(".ui-resizable-handle", this.element)
++			.disableSelection();
++
++		//Matching axis name
++		this._handles.mouseover(function() {
++			if (!that.resizing) {
++				if (this.className) {
++					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
++				}
++				//Axis, default = se
++				that.axis = axis && axis[1] ? axis[1] : "se";
++			}
++		});
++
++		//If we want to auto hide the elements
++		if (o.autoHide) {
++			this._handles.hide();
++			$(this.element)
++				.addClass("ui-resizable-autohide")
++				.mouseenter(function() {
++					if (o.disabled) {
++						return;
++					}
++					$(this).removeClass("ui-resizable-autohide");
++					that._handles.show();
++				})
++				.mouseleave(function(){
++					if (o.disabled) {
++						return;
++					}
++					if (!that.resizing) {
++						$(this).addClass("ui-resizable-autohide");
++						that._handles.hide();
++					}
++				});
++		}
++
++		//Initialize the mouse interaction
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++
++		this._mouseDestroy();
++
++		var wrapper,
++			_destroy = function(exp) {
++				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
++					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
++			};
++
++		//TODO: Unwrap at same DOM position
++		if (this.elementIsWrapper) {
++			_destroy(this.element);
++			wrapper = this.element;
++			this.originalElement.css({
++				position: wrapper.css("position"),
++				width: wrapper.outerWidth(),
++				height: wrapper.outerHeight(),
++				top: wrapper.css("top"),
++				left: wrapper.css("left")
++			}).insertAfter( wrapper );
++			wrapper.remove();
++		}
++
++		this.originalElement.css("resize", this.originalResizeStyle);
++		_destroy(this.originalElement);
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++		var i, handle,
++			capture = false;
++
++		for (i in this.handles) {
++			handle = $(this.handles[i])[0];
++			if (handle === event.target || $.contains(handle, event.target)) {
++				capture = true;
++			}
++		}
++
++		return !this.options.disabled && capture;
++	},
++
++	_mouseStart: function(event) {
++
++		var curleft, curtop, cursor,
++			o = this.options,
++			iniPos = this.element.position(),
++			el = this.element;
++
++		this.resizing = true;
++
++		// bugfix for http://dev.jquery.com/ticket/1749
++		if ( (/absolute/).test( el.css("position") ) ) {
++			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
++		} else if (el.is(".ui-draggable")) {
++			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
++		}
++
++		this._renderProxy();
++
++		curleft = num(this.helper.css("left"));
++		curtop = num(this.helper.css("top"));
++
++		if (o.containment) {
++			curleft += $(o.containment).scrollLeft() || 0;
++			curtop += $(o.containment).scrollTop() || 0;
++		}
++
++		//Store needed variables
++		this.offset = this.helper.offset();
++		this.position = { left: curleft, top: curtop };
++		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalPosition = { left: curleft, top: curtop };
++		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
++		this.originalMousePosition = { left: event.pageX, top: event.pageY };
++
++		//Aspect Ratio
++		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
++
++		cursor = $(".ui-resizable-" + this.axis).css("cursor");
++		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
++
++		el.addClass("ui-resizable-resizing");
++		this._propagate("start", event);
++		return true;
++	},
++
++	_mouseDrag: function(event) {
++
++		//Increase performance, avoid regex
++		var data,
++			el = this.helper, props = {},
++			smp = this.originalMousePosition,
++			a = this.axis,
++			prevTop = this.position.top,
++			prevLeft = this.position.left,
++			prevWidth = this.size.width,
++			prevHeight = this.size.height,
++			dx = (event.pageX-smp.left)||0,
++			dy = (event.pageY-smp.top)||0,
++			trigger = this._change[a];
++
++		if (!trigger) {
++			return false;
++		}
++
++		// Calculate the attrs that will be change
++		data = trigger.apply(this, [event, dx, dy]);
++
++		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
++		this._updateVirtualBoundaries(event.shiftKey);
++		if (this._aspectRatio || event.shiftKey) {
++			data = this._updateRatio(data, event);
++		}
++
++		data = this._respectSize(data, event);
++
++		this._updateCache(data);
++
++		// plugins callbacks need to be called first
++		this._propagate("resize", event);
++
++		if (this.position.top !== prevTop) {
++			props.top = this.position.top + "px";
++		}
++		if (this.position.left !== prevLeft) {
++			props.left = this.position.left + "px";
++		}
++		if (this.size.width !== prevWidth) {
++			props.width = this.size.width + "px";
++		}
++		if (this.size.height !== prevHeight) {
++			props.height = this.size.height + "px";
++		}
++		el.css(props);
++
++		if (!this._helper && this._proportionallyResizeElements.length) {
++			this._proportionallyResize();
++		}
++
++		// Call the user callback if the element was resized
++		if ( ! $.isEmptyObject(props) ) {
++			this._trigger("resize", event, this.ui());
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		this.resizing = false;
++		var pr, ista, soffseth, soffsetw, s, left, top,
++			o = this.options, that = this;
++
++		if(this._helper) {
++
++			pr = this._proportionallyResizeElements;
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
++			soffsetw = ista ? 0 : that.sizeDiff.width;
++
++			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++			if (!o.animate) {
++				this.element.css($.extend(s, { top: top, left: left }));
++			}
++
++			that.helper.height(that.size.height);
++			that.helper.width(that.size.width);
++
++			if (this._helper && !o.animate) {
++				this._proportionallyResize();
++			}
++		}
++
++		$("body").css("cursor", "auto");
++
++		this.element.removeClass("ui-resizable-resizing");
++
++		this._propagate("stop", event);
++
++		if (this._helper) {
++			this.helper.remove();
++		}
++
++		return false;
++
++	},
++
++	_updateVirtualBoundaries: function(forceAspectRatio) {
++		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
++			o = this.options;
++
++		b = {
++			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
++			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
++			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
++			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
++		};
++
++		if(this._aspectRatio || forceAspectRatio) {
++			// We want to create an enclosing box whose aspect ration is the requested one
++			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
++			pMinWidth = b.minHeight * this.aspectRatio;
++			pMinHeight = b.minWidth / this.aspectRatio;
++			pMaxWidth = b.maxHeight * this.aspectRatio;
++			pMaxHeight = b.maxWidth / this.aspectRatio;
++
++			if(pMinWidth > b.minWidth) {
++				b.minWidth = pMinWidth;
++			}
++			if(pMinHeight > b.minHeight) {
++				b.minHeight = pMinHeight;
++			}
++			if(pMaxWidth < b.maxWidth) {
++				b.maxWidth = pMaxWidth;
++			}
++			if(pMaxHeight < b.maxHeight) {
++				b.maxHeight = pMaxHeight;
++			}
++		}
++		this._vBoundaries = b;
++	},
++
++	_updateCache: function(data) {
++		this.offset = this.helper.offset();
++		if (isNumber(data.left)) {
++			this.position.left = data.left;
++		}
++		if (isNumber(data.top)) {
++			this.position.top = data.top;
++		}
++		if (isNumber(data.height)) {
++			this.size.height = data.height;
++		}
++		if (isNumber(data.width)) {
++			this.size.width = data.width;
++		}
++	},
++
++	_updateRatio: function( data ) {
++
++		var cpos = this.position,
++			csize = this.size,
++			a = this.axis;
++
++		if (isNumber(data.height)) {
++			data.width = (data.height * this.aspectRatio);
++		} else if (isNumber(data.width)) {
++			data.height = (data.width / this.aspectRatio);
++		}
++
++		if (a === "sw") {
++			data.left = cpos.left + (csize.width - data.width);
++			data.top = null;
++		}
++		if (a === "nw") {
++			data.top = cpos.top + (csize.height - data.height);
++			data.left = cpos.left + (csize.width - data.width);
++		}
++
++		return data;
++	},
++
++	_respectSize: function( data ) {
++
++		var o = this._vBoundaries,
++			a = this.axis,
++			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
++			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
++			dw = this.originalPosition.left + this.originalSize.width,
++			dh = this.position.top + this.size.height,
++			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
++		if (isminw) {
++			data.width = o.minWidth;
++		}
++		if (isminh) {
++			data.height = o.minHeight;
++		}
++		if (ismaxw) {
++			data.width = o.maxWidth;
++		}
++		if (ismaxh) {
++			data.height = o.maxHeight;
++		}
++
++		if (isminw && cw) {
++			data.left = dw - o.minWidth;
++		}
++		if (ismaxw && cw) {
++			data.left = dw - o.maxWidth;
++		}
++		if (isminh && ch) {
++			data.top = dh - o.minHeight;
++		}
++		if (ismaxh && ch) {
++			data.top = dh - o.maxHeight;
++		}
++
++		// fixing jump error on top/left - bug #2330
++		if (!data.width && !data.height && !data.left && data.top) {
++			data.top = null;
++		} else if (!data.width && !data.height && !data.top && data.left) {
++			data.left = null;
++		}
++
++		return data;
++	},
++
++	_proportionallyResize: function() {
++
++		if (!this._proportionallyResizeElements.length) {
++			return;
++		}
++
++		var i, j, borders, paddings, prel,
++			element = this.helper || this.element;
++
++		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
++
++			prel = this._proportionallyResizeElements[i];
++
++			if (!this.borderDif) {
++				this.borderDif = [];
++				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
++				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
++
++				for ( j = 0; j < borders.length; j++ ) {
++					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
++				}
++			}
++
++			prel.css({
++				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
++				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
++			});
++
++		}
++
++	},
++
++	_renderProxy: function() {
++
++		var el = this.element, o = this.options;
++		this.elementOffset = el.offset();
++
++		if(this._helper) {
++
++			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
++
++			this.helper.addClass(this._helper).css({
++				width: this.element.outerWidth() - 1,
++				height: this.element.outerHeight() - 1,
++				position: "absolute",
++				left: this.elementOffset.left +"px",
++				top: this.elementOffset.top +"px",
++				zIndex: ++o.zIndex //TODO: Don't modify option
++			});
++
++			this.helper
++				.appendTo("body")
++				.disableSelection();
++
++		} else {
++			this.helper = this.element;
++		}
++
++	},
++
++	_change: {
++		e: function(event, dx) {
++			return { width: this.originalSize.width + dx };
++		},
++		w: function(event, dx) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { left: sp.left + dx, width: cs.width - dx };
++		},
++		n: function(event, dx, dy) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { top: sp.top + dy, height: cs.height - dy };
++		},
++		s: function(event, dx, dy) {
++			return { height: this.originalSize.height + dy };
++		},
++		se: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		sw: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		},
++		ne: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		nw: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		}
++	},
++
++	_propagate: function(n, event) {
++		$.ui.plugin.call(this, n, [event, this.ui()]);
++		(n !== "resize" && this._trigger(n, event, this.ui()));
++	},
++
++	plugins: {},
++
++	ui: function() {
++		return {
++			originalElement: this.originalElement,
++			element: this.element,
++			helper: this.helper,
++			position: this.position,
++			size: this.size,
++			originalSize: this.originalSize,
++			originalPosition: this.originalPosition
++		};
++	}
++
++});
++
++/*
++ * Resizable Extensions
++ */
++
++$.ui.plugin.add("resizable", "animate", {
++
++	stop: function( event ) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			pr = that._proportionallyResizeElements,
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
++			soffsetw = ista ? 0 : that.sizeDiff.width,
++			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++		that.element.animate(
++			$.extend(style, top && left ? { top: top, left: left } : {}), {
++				duration: o.animateDuration,
++				easing: o.animateEasing,
++				step: function() {
++
++					var data = {
++						width: parseInt(that.element.css("width"), 10),
++						height: parseInt(that.element.css("height"), 10),
++						top: parseInt(that.element.css("top"), 10),
++						left: parseInt(that.element.css("left"), 10)
++					};
++
++					if (pr && pr.length) {
++						$(pr[0]).css({ width: data.width, height: data.height });
++					}
++
++					// propagating resize, and updating values for each animation step
++					that._updateCache(data);
++					that._propagate("resize", event);
++
++				}
++			}
++		);
++	}
++
++});
++
++$.ui.plugin.add("resizable", "containment", {
++
++	start: function() {
++		var element, p, co, ch, cw, width, height,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			el = that.element,
++			oc = o.containment,
++			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
++
++		if (!ce) {
++			return;
++		}
++
++		that.containerElement = $(ce);
++
++		if (/document/.test(oc) || oc === document) {
++			that.containerOffset = { left: 0, top: 0 };
++			that.containerPosition = { left: 0, top: 0 };
++
++			that.parentData = {
++				element: $(document), left: 0, top: 0,
++				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
++			};
++		}
++
++		// i'm a node, so compute top, left, right, bottom
++		else {
++			element = $(ce);
++			p = [];
++			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
++
++			that.containerOffset = element.offset();
++			that.containerPosition = element.position();
++			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
++
++			co = that.containerOffset;
++			ch = that.containerSize.height;
++			cw = that.containerSize.width;
++			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
++			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
++
++			that.parentData = {
++				element: ce, left: co.left, top: co.top, width: width, height: height
++			};
++		}
++	},
++
++	resize: function( event ) {
++		var woset, hoset, isParent, isOffsetRelative,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset, cp = that.position,
++			pRatio = that._aspectRatio || event.shiftKey,
++			cop = { top:0, left:0 }, ce = that.containerElement;
++
++		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
++			cop = co;
++		}
++
++		if (cp.left < (that._helper ? co.left : 0)) {
++			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++			that.position.left = o.helper ? co.left : 0;
++		}
++
++		if (cp.top < (that._helper ? co.top : 0)) {
++			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++			that.position.top = that._helper ? co.top : 0;
++		}
++
++		that.offset.left = that.parentData.left+that.position.left;
++		that.offset.top = that.parentData.top+that.position.top;
++
++		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
++		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
++
++		isParent = that.containerElement.get(0) === that.element.parent().get(0);
++		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
++
++		if(isParent && isOffsetRelative) {
++			woset -= that.parentData.left;
++		}
++
++		if (woset + that.size.width >= that.parentData.width) {
++			that.size.width = that.parentData.width - woset;
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++		}
++
++		if (hoset + that.size.height >= that.parentData.height) {
++			that.size.height = that.parentData.height - hoset;
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++		}
++	},
++
++	stop: function(){
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset,
++			cop = that.containerPosition,
++			ce = that.containerElement,
++			helper = $(that.helper),
++			ho = helper.offset(),
++			w = helper.outerWidth() - that.sizeDiff.width,
++			h = helper.outerHeight() - that.sizeDiff.height;
++
++		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++	}
++});
++
++$.ui.plugin.add("resizable", "alsoResize", {
++
++	start: function () {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			_store = function (exp) {
++				$(exp).each(function() {
++					var el = $(this);
++					el.data("ui-resizable-alsoresize", {
++						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
++						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
++					});
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
++			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
++			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
++		}else{
++			_store(o.alsoResize);
++		}
++	},
++
++	resize: function (event, ui) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			os = that.originalSize,
++			op = that.originalPosition,
++			delta = {
++				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
++				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
++			},
++
++			_alsoResize = function (exp, c) {
++				$(exp).each(function() {
++					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
++						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
++
++					$.each(css, function (i, prop) {
++						var sum = (start[prop]||0) + (delta[prop]||0);
++						if (sum && sum >= 0) {
++							style[prop] = sum || null;
++						}
++					});
++
++					el.css(style);
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
++			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
++		}else{
++			_alsoResize(o.alsoResize);
++		}
++	},
++
++	stop: function () {
++		$(this).removeData("resizable-alsoresize");
++	}
++});
++
++$.ui.plugin.add("resizable", "ghost", {
++
++	start: function() {
++
++		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
++
++		that.ghost = that.originalElement.clone();
++		that.ghost
++			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
++			.addClass("ui-resizable-ghost")
++			.addClass(typeof o.ghost === "string" ? o.ghost : "");
++
++		that.ghost.appendTo(that.helper);
++
++	},
++
++	resize: function(){
++		var that = $(this).data("ui-resizable");
++		if (that.ghost) {
++			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
++		}
++	},
++
++	stop: function() {
++		var that = $(this).data("ui-resizable");
++		if (that.ghost && that.helper) {
++			that.helper.get(0).removeChild(that.ghost.get(0));
++		}
++	}
++
++});
++
++$.ui.plugin.add("resizable", "grid", {
++
++	resize: function() {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			cs = that.size,
++			os = that.originalSize,
++			op = that.originalPosition,
++			a = that.axis,
++			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
++			gridX = (grid[0]||1),
++			gridY = (grid[1]||1),
++			ox = Math.round((cs.width - os.width) / gridX) * gridX,
++			oy = Math.round((cs.height - os.height) / gridY) * gridY,
++			newWidth = os.width + ox,
++			newHeight = os.height + oy,
++			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
++			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
++			isMinWidth = o.minWidth && (o.minWidth > newWidth),
++			isMinHeight = o.minHeight && (o.minHeight > newHeight);
++
++		o.grid = grid;
++
++		if (isMinWidth) {
++			newWidth = newWidth + gridX;
++		}
++		if (isMinHeight) {
++			newHeight = newHeight + gridY;
++		}
++		if (isMaxWidth) {
++			newWidth = newWidth - gridX;
++		}
++		if (isMaxHeight) {
++			newHeight = newHeight - gridY;
++		}
++
++		if (/^(se|s|e)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++		} else if (/^(ne)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++		} else if (/^(sw)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.left = op.left - ox;
++		} else {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++			that.position.left = op.left - ox;
++		}
++	}
++
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.slider.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.slider.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.slider.js	(revision 15487)
+@@ -0,0 +1,672 @@
++/*!
++ * jQuery UI Slider 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/slider/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++// number of pages in a slider
++// (how many times can you page up/down to go through the whole range)
++var numPages = 5;
++
++$.widget( "ui.slider", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "slide",
++
++	options: {
++		animate: false,
++		distance: 0,
++		max: 100,
++		min: 0,
++		orientation: "horizontal",
++		range: false,
++		step: 1,
++		value: 0,
++		values: null,
++
++		// callbacks
++		change: null,
++		slide: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		this._keySliding = false;
++		this._mouseSliding = false;
++		this._animateOff = true;
++		this._handleIndex = null;
++		this._detectOrientation();
++		this._mouseInit();
++
++		this.element
++			.addClass( "ui-slider" +
++				" ui-slider-" + this.orientation +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all");
++
++		this._refresh();
++		this._setOption( "disabled", this.options.disabled );
++
++		this._animateOff = false;
++	},
++
++	_refresh: function() {
++		this._createRange();
++		this._createHandles();
++		this._setupEvents();
++		this._refreshValue();
++	},
++
++	_createHandles: function() {
++		var i, handleCount,
++			options = this.options,
++			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
++			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
++			handles = [];
++
++		handleCount = ( options.values && options.values.length ) || 1;
++
++		if ( existingHandles.length > handleCount ) {
++			existingHandles.slice( handleCount ).remove();
++			existingHandles = existingHandles.slice( 0, handleCount );
++		}
++
++		for ( i = existingHandles.length; i < handleCount; i++ ) {
++			handles.push( handle );
++		}
++
++		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
++
++		this.handle = this.handles.eq( 0 );
++
++		this.handles.each(function( i ) {
++			$( this ).data( "ui-slider-handle-index", i );
++		});
++	},
++
++	_createRange: function() {
++		var options = this.options,
++			classes = "";
++
++		if ( options.range ) {
++			if ( options.range === true ) {
++				if ( !options.values ) {
++					options.values = [ this._valueMin(), this._valueMin() ];
++				} else if ( options.values.length && options.values.length !== 2 ) {
++					options.values = [ options.values[0], options.values[0] ];
++				} else if ( $.isArray( options.values ) ) {
++					options.values = options.values.slice(0);
++				}
++			}
++
++			if ( !this.range || !this.range.length ) {
++				this.range = $( "<div></div>" )
++					.appendTo( this.element );
++
++				classes = "ui-slider-range" +
++				// note: this isn't the most fittingly semantic framework class for this element,
++				// but worked best visually with a variety of themes
++				" ui-widget-header ui-corner-all";
++			} else {
++				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
++					// Handle range switching from true to min/max
++					.css({
++						"left": "",
++						"bottom": ""
++					});
++			}
++
++			this.range.addClass( classes +
++				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
++		} else {
++			this.range = $([]);
++		}
++	},
++
++	_setupEvents: function() {
++		var elements = this.handles.add( this.range ).filter( "a" );
++		this._off( elements );
++		this._on( elements, this._handleEvents );
++		this._hoverable( elements );
++		this._focusable( elements );
++	},
++
++	_destroy: function() {
++		this.handles.remove();
++		this.range.remove();
++
++		this.element
++			.removeClass( "ui-slider" +
++				" ui-slider-horizontal" +
++				" ui-slider-vertical" +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" );
++
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function( event ) {
++		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
++			that = this,
++			o = this.options;
++
++		if ( o.disabled ) {
++			return false;
++		}
++
++		this.elementSize = {
++			width: this.element.outerWidth(),
++			height: this.element.outerHeight()
++		};
++		this.elementOffset = this.element.offset();
++
++		position = { x: event.pageX, y: event.pageY };
++		normValue = this._normValueFromMouse( position );
++		distance = this._valueMax() - this._valueMin() + 1;
++		this.handles.each(function( i ) {
++			var thisDistance = Math.abs( normValue - that.values(i) );
++			if (( distance > thisDistance ) ||
++				( distance === thisDistance &&
++					(i === that._lastChangedValue || that.values(i) === o.min ))) {
++				distance = thisDistance;
++				closestHandle = $( this );
++				index = i;
++			}
++		});
++
++		allowed = this._start( event, index );
++		if ( allowed === false ) {
++			return false;
++		}
++		this._mouseSliding = true;
++
++		this._handleIndex = index;
++
++		closestHandle
++			.addClass( "ui-state-active" )
++			.focus();
++
++		offset = closestHandle.offset();
++		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
++		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
++			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
++			top: event.pageY - offset.top -
++				( closestHandle.height() / 2 ) -
++				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
++				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
++				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
++		};
++
++		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
++			this._slide( event, index, normValue );
++		}
++		this._animateOff = true;
++		return true;
++	},
++
++	_mouseStart: function() {
++		return true;
++	},
++
++	_mouseDrag: function( event ) {
++		var position = { x: event.pageX, y: event.pageY },
++			normValue = this._normValueFromMouse( position );
++
++		this._slide( event, this._handleIndex, normValue );
++
++		return false;
++	},
++
++	_mouseStop: function( event ) {
++		this.handles.removeClass( "ui-state-active" );
++		this._mouseSliding = false;
++
++		this._stop( event, this._handleIndex );
++		this._change( event, this._handleIndex );
++
++		this._handleIndex = null;
++		this._clickOffset = null;
++		this._animateOff = false;
++
++		return false;
++	},
++
++	_detectOrientation: function() {
++		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
++	},
++
++	_normValueFromMouse: function( position ) {
++		var pixelTotal,
++			pixelMouse,
++			percentMouse,
++			valueTotal,
++			valueMouse;
++
++		if ( this.orientation === "horizontal" ) {
++			pixelTotal = this.elementSize.width;
++			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
++		} else {
++			pixelTotal = this.elementSize.height;
++			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
++		}
++
++		percentMouse = ( pixelMouse / pixelTotal );
++		if ( percentMouse > 1 ) {
++			percentMouse = 1;
++		}
++		if ( percentMouse < 0 ) {
++			percentMouse = 0;
++		}
++		if ( this.orientation === "vertical" ) {
++			percentMouse = 1 - percentMouse;
++		}
++
++		valueTotal = this._valueMax() - this._valueMin();
++		valueMouse = this._valueMin() + percentMouse * valueTotal;
++
++		return this._trimAlignValue( valueMouse );
++	},
++
++	_start: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++		return this._trigger( "start", event, uiHash );
++	},
++
++	_slide: function( event, index, newVal ) {
++		var otherVal,
++			newValues,
++			allowed;
++
++		if ( this.options.values && this.options.values.length ) {
++			otherVal = this.values( index ? 0 : 1 );
++
++			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
++					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
++				) {
++				newVal = otherVal;
++			}
++
++			if ( newVal !== this.values( index ) ) {
++				newValues = this.values();
++				newValues[ index ] = newVal;
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal,
++					values: newValues
++				} );
++				otherVal = this.values( index ? 0 : 1 );
++				if ( allowed !== false ) {
++					this.values( index, newVal, true );
++				}
++			}
++		} else {
++			if ( newVal !== this.value() ) {
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal
++				} );
++				if ( allowed !== false ) {
++					this.value( newVal );
++				}
++			}
++		}
++	},
++
++	_stop: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++
++		this._trigger( "stop", event, uiHash );
++	},
++
++	_change: function( event, index ) {
++		if ( !this._keySliding && !this._mouseSliding ) {
++			var uiHash = {
++				handle: this.handles[ index ],
++				value: this.value()
++			};
++			if ( this.options.values && this.options.values.length ) {
++				uiHash.value = this.values( index );
++				uiHash.values = this.values();
++			}
++
++			//store the last changed value index for reference when handles overlap
++			this._lastChangedValue = index;
++
++			this._trigger( "change", event, uiHash );
++		}
++	},
++
++	value: function( newValue ) {
++		if ( arguments.length ) {
++			this.options.value = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, 0 );
++			return;
++		}
++
++		return this._value();
++	},
++
++	values: function( index, newValue ) {
++		var vals,
++			newValues,
++			i;
++
++		if ( arguments.length > 1 ) {
++			this.options.values[ index ] = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, index );
++			return;
++		}
++
++		if ( arguments.length ) {
++			if ( $.isArray( arguments[ 0 ] ) ) {
++				vals = this.options.values;
++				newValues = arguments[ 0 ];
++				for ( i = 0; i < vals.length; i += 1 ) {
++					vals[ i ] = this._trimAlignValue( newValues[ i ] );
++					this._change( null, i );
++				}
++				this._refreshValue();
++			} else {
++				if ( this.options.values && this.options.values.length ) {
++					return this._values( index );
++				} else {
++					return this.value();
++				}
++			}
++		} else {
++			return this._values();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var i,
++			valsLength = 0;
++
++		if ( key === "range" && this.options.range === true ) {
++			if ( value === "min" ) {
++				this.options.value = this._values( 0 );
++				this.options.values = null;
++			} else if ( value === "max" ) {
++				this.options.value = this._values( this.options.values.length-1 );
++				this.options.values = null;
++			}
++		}
++
++		if ( $.isArray( this.options.values ) ) {
++			valsLength = this.options.values.length;
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++
++		switch ( key ) {
++			case "orientation":
++				this._detectOrientation();
++				this.element
++					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
++					.addClass( "ui-slider-" + this.orientation );
++				this._refreshValue();
++				break;
++			case "value":
++				this._animateOff = true;
++				this._refreshValue();
++				this._change( null, 0 );
++				this._animateOff = false;
++				break;
++			case "values":
++				this._animateOff = true;
++				this._refreshValue();
++				for ( i = 0; i < valsLength; i += 1 ) {
++					this._change( null, i );
++				}
++				this._animateOff = false;
++				break;
++			case "min":
++			case "max":
++				this._animateOff = true;
++				this._refreshValue();
++				this._animateOff = false;
++				break;
++			case "range":
++				this._animateOff = true;
++				this._refresh();
++				this._animateOff = false;
++				break;
++		}
++	},
++
++	//internal value getter
++	// _value() returns value trimmed by min and max, aligned by step
++	_value: function() {
++		var val = this.options.value;
++		val = this._trimAlignValue( val );
++
++		return val;
++	},
++
++	//internal values getter
++	// _values() returns array of values trimmed by min and max, aligned by step
++	// _values( index ) returns single value trimmed by min and max, aligned by step
++	_values: function( index ) {
++		var val,
++			vals,
++			i;
++
++		if ( arguments.length ) {
++			val = this.options.values[ index ];
++			val = this._trimAlignValue( val );
++
++			return val;
++		} else if ( this.options.values && this.options.values.length ) {
++			// .slice() creates a copy of the array
++			// this copy gets trimmed by min and max and then returned
++			vals = this.options.values.slice();
++			for ( i = 0; i < vals.length; i+= 1) {
++				vals[ i ] = this._trimAlignValue( vals[ i ] );
++			}
++
++			return vals;
++		} else {
++			return [];
++		}
++	},
++
++	// returns the step-aligned value that val is closest to, between (inclusive) min and max
++	_trimAlignValue: function( val ) {
++		if ( val <= this._valueMin() ) {
++			return this._valueMin();
++		}
++		if ( val >= this._valueMax() ) {
++			return this._valueMax();
++		}
++		var step = ( this.options.step > 0 ) ? this.options.step : 1,
++			valModStep = (val - this._valueMin()) % step,
++			alignValue = val - valModStep;
++
++		if ( Math.abs(valModStep) * 2 >= step ) {
++			alignValue += ( valModStep > 0 ) ? step : ( -step );
++		}
++
++		// Since JavaScript has problems with large floats, round
++		// the final value to 5 digits after the decimal point (see #4124)
++		return parseFloat( alignValue.toFixed(5) );
++	},
++
++	_valueMin: function() {
++		return this.options.min;
++	},
++
++	_valueMax: function() {
++		return this.options.max;
++	},
++
++	_refreshValue: function() {
++		var lastValPercent, valPercent, value, valueMin, valueMax,
++			oRange = this.options.range,
++			o = this.options,
++			that = this,
++			animate = ( !this._animateOff ) ? o.animate : false,
++			_set = {};
++
++		if ( this.options.values && this.options.values.length ) {
++			this.handles.each(function( i ) {
++				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
++				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++				if ( that.options.range === true ) {
++					if ( that.orientation === "horizontal" ) {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					} else {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					}
++				}
++				lastValPercent = valPercent;
++			});
++		} else {
++			value = this.value();
++			valueMin = this._valueMin();
++			valueMax = this._valueMax();
++			valPercent = ( valueMax !== valueMin ) ?
++					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
++					0;
++			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++
++			if ( oRange === "min" && this.orientation === "horizontal" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "horizontal" ) {
++				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++			if ( oRange === "min" && this.orientation === "vertical" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "vertical" ) {
++				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++		}
++	},
++
++	_handleEvents: {
++		keydown: function( event ) {
++			/*jshint maxcomplexity:25*/
++			var allowed, curVal, newVal, step,
++				index = $( event.target ).data( "ui-slider-handle-index" );
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++				case $.ui.keyCode.END:
++				case $.ui.keyCode.PAGE_UP:
++				case $.ui.keyCode.PAGE_DOWN:
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					event.preventDefault();
++					if ( !this._keySliding ) {
++						this._keySliding = true;
++						$( event.target ).addClass( "ui-state-active" );
++						allowed = this._start( event, index );
++						if ( allowed === false ) {
++							return;
++						}
++					}
++					break;
++			}
++
++			step = this.options.step;
++			if ( this.options.values && this.options.values.length ) {
++				curVal = newVal = this.values( index );
++			} else {
++				curVal = newVal = this.value();
++			}
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++					newVal = this._valueMin();
++					break;
++				case $.ui.keyCode.END:
++					newVal = this._valueMax();
++					break;
++				case $.ui.keyCode.PAGE_UP:
++					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.PAGE_DOWN:
++					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++					if ( curVal === this._valueMax() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal + step );
++					break;
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					if ( curVal === this._valueMin() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal - step );
++					break;
++			}
++
++			this._slide( event, index, newVal );
++		},
++		click: function( event ) {
++			event.preventDefault();
++		},
++		keyup: function( event ) {
++			var index = $( event.target ).data( "ui-slider-handle-index" );
++
++			if ( this._keySliding ) {
++				this._keySliding = false;
++				this._stop( event, index );
++				this._change( event, index );
++				$( event.target ).removeClass( "ui-state-active" );
++			}
++		}
++	}
++
++});
++
++}(jQuery));
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.widget.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.widget.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.widget.js	(revision 15487)
+@@ -0,0 +1,521 @@
++/*!
++ * jQuery UI Widget 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/jQuery.widget/
++ */
++(function( $, undefined ) {
++
++var uuid = 0,
++	slice = Array.prototype.slice,
++	_cleanData = $.cleanData;
++$.cleanData = function( elems ) {
++	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++		try {
++			$( elem ).triggerHandler( "remove" );
++		// http://bugs.jquery.com/ticket/8235
++		} catch( e ) {}
++	}
++	_cleanData( elems );
++};
++
++$.widget = function( name, base, prototype ) {
++	var fullName, existingConstructor, constructor, basePrototype,
++		// proxiedPrototype allows the provided prototype to remain unmodified
++		// so that it can be used as a mixin for multiple widgets (#8876)
++		proxiedPrototype = {},
++		namespace = name.split( "." )[ 0 ];
++
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
++		return !!$.data( elem, fullName );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	existingConstructor = $[ namespace ][ name ];
++	constructor = $[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without "new" keyword
++		if ( !this._createWidget ) {
++			return new constructor( options, element );
++		}
++
++		// allow instantiation without initializing for simple inheritance
++		// must use "new" keyword (the code above always passes args)
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++	// extend with the existing constructor to carry over any static properties
++	$.extend( constructor, existingConstructor, {
++		version: prototype.version,
++		// copy the object used to create the prototype in case we need to
++		// redefine the widget later
++		_proto: $.extend( {}, prototype ),
++		// track widgets that inherit from this widget in case this widget is
++		// redefined after a widget inherits from it
++		_childConstructors: []
++	});
++
++	basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++	basePrototype.options = $.widget.extend( {}, basePrototype.options );
++	$.each( prototype, function( prop, value ) {
++		if ( !$.isFunction( value ) ) {
++			proxiedPrototype[ prop ] = value;
++			return;
++		}
++		proxiedPrototype[ prop ] = (function() {
++			var _super = function() {
++					return base.prototype[ prop ].apply( this, arguments );
++				},
++				_superApply = function( args ) {
++					return base.prototype[ prop ].apply( this, args );
++				};
++			return function() {
++				var __super = this._super,
++					__superApply = this._superApply,
++					returnValue;
++
++				this._super = _super;
++				this._superApply = _superApply;
++
++				returnValue = value.apply( this, arguments );
++
++				this._super = __super;
++				this._superApply = __superApply;
++
++				return returnValue;
++			};
++		})();
++	});
++	constructor.prototype = $.widget.extend( basePrototype, {
++		// TODO: remove support for widgetEventPrefix
++		// always use the name + a colon as the prefix, e.g., draggable:start
++		// don't prefix for widgets that aren't DOM-based
++		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
++	}, proxiedPrototype, {
++		constructor: constructor,
++		namespace: namespace,
++		widgetName: name,
++		widgetFullName: fullName
++	});
++
++	// If this widget is being redefined then we need to find all widgets that
++	// are inheriting from it and redefine all of them so that they inherit from
++	// the new version of this widget. We're essentially trying to replace one
++	// level in the prototype chain.
++	if ( existingConstructor ) {
++		$.each( existingConstructor._childConstructors, function( i, child ) {
++			var childPrototype = child.prototype;
++
++			// redefine the child widget using the same prototype that was
++			// originally used, but inherit from the new version of the base
++			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
++		});
++		// remove the list of existing child constructors from the old constructor
++		// so the old child constructors can be garbage collected
++		delete existingConstructor._childConstructors;
++	} else {
++		base._childConstructors.push( constructor );
++	}
++
++	$.widget.bridge( name, constructor );
++};
++
++$.widget.extend = function( target ) {
++	var input = slice.call( arguments, 1 ),
++		inputIndex = 0,
++		inputLength = input.length,
++		key,
++		value;
++	for ( ; inputIndex < inputLength; inputIndex++ ) {
++		for ( key in input[ inputIndex ] ) {
++			value = input[ inputIndex ][ key ];
++			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
++				// Clone objects
++				if ( $.isPlainObject( value ) ) {
++					target[ key ] = $.isPlainObject( target[ key ] ) ?
++						$.widget.extend( {}, target[ key ], value ) :
++						// Don't extend strings, arrays, etc. with objects
++						$.widget.extend( {}, value );
++				// Copy everything else by reference
++				} else {
++					target[ key ] = value;
++				}
++			}
++		}
++	}
++	return target;
++};
++
++$.widget.bridge = function( name, object ) {
++	var fullName = object.prototype.widgetFullName || name;
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.widget.extend.apply( null, [ options ].concat(args) ) :
++			options;
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var methodValue,
++					instance = $.data( this, fullName );
++				if ( !instance ) {
++					return $.error( "cannot call methods on " + name + " prior to initialization; " +
++						"attempted to call method '" + options + "'" );
++				}
++				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
++					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
++				}
++				methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue && methodValue.jquery ?
++						returnValue.pushStack( methodValue.get() ) :
++						methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, fullName );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					$.data( this, fullName, new object( options, this ) );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( /* options, element */ ) {};
++$.Widget._childConstructors = [];
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	defaultElement: "<div>",
++	options: {
++		disabled: false,
++
++		// callbacks
++		create: null
++	},
++	_createWidget: function( options, element ) {
++		element = $( element || this.defaultElement || this )[ 0 ];
++		this.element = $( element );
++		this.uuid = uuid++;
++		this.eventNamespace = "." + this.widgetName + this.uuid;
++		this.options = $.widget.extend( {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		this.bindings = $();
++		this.hoverable = $();
++		this.focusable = $();
++
++		if ( element !== this ) {
++			$.data( element, this.widgetFullName, this );
++			this._on( true, this.element, {
++				remove: function( event ) {
++					if ( event.target === element ) {
++						this.destroy();
++					}
++				}
++			});
++			this.document = $( element.style ?
++				// element within the document
++				element.ownerDocument :
++				// element is window or document
++				element.document || element );
++			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
++		}
++
++		this._create();
++		this._trigger( "create", null, this._getCreateEventData() );
++		this._init();
++	},
++	_getCreateOptions: $.noop,
++	_getCreateEventData: $.noop,
++	_create: $.noop,
++	_init: $.noop,
++
++	destroy: function() {
++		this._destroy();
++		// we can probably remove the unbind calls in 2.0
++		// all event bindings should go through this._on()
++		this.element
++			.unbind( this.eventNamespace )
++			// 1.9 BC for #7810
++			// TODO remove dual storage
++			.removeData( this.widgetName )
++			.removeData( this.widgetFullName )
++			// support: jquery <1.6.3
++			// http://bugs.jquery.com/ticket/9413
++			.removeData( $.camelCase( this.widgetFullName ) );
++		this.widget()
++			.unbind( this.eventNamespace )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetFullName + "-disabled " +
++				"ui-state-disabled" );
++
++		// clean up events and states
++		this.bindings.unbind( this.eventNamespace );
++		this.hoverable.removeClass( "ui-state-hover" );
++		this.focusable.removeClass( "ui-state-focus" );
++	},
++	_destroy: $.noop,
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key,
++			parts,
++			curOption,
++			i;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.widget.extend( {}, this.options );
++		}
++
++		if ( typeof key === "string" ) {
++			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
++			options = {};
++			parts = key.split( "." );
++			key = parts.shift();
++			if ( parts.length ) {
++				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
++				for ( i = 0; i < parts.length - 1; i++ ) {
++					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
++					curOption = curOption[ parts[ i ] ];
++				}
++				key = parts.pop();
++				if ( value === undefined ) {
++					return curOption[ key ] === undefined ? null : curOption[ key ];
++				}
++				curOption[ key ] = value;
++			} else {
++				if ( value === undefined ) {
++					return this.options[ key ] === undefined ? null : this.options[ key ];
++				}
++				options[ key ] = value;
++			}
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var key;
++
++		for ( key in options ) {
++			this._setOption( key, options[ key ] );
++		}
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
++				.attr( "aria-disabled", value );
++			this.hoverable.removeClass( "ui-state-hover" );
++			this.focusable.removeClass( "ui-state-focus" );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_on: function( suppressDisabledCheck, element, handlers ) {
++		var delegateElement,
++			instance = this;
++
++		// no suppressDisabledCheck flag, shuffle arguments
++		if ( typeof suppressDisabledCheck !== "boolean" ) {
++			handlers = element;
++			element = suppressDisabledCheck;
++			suppressDisabledCheck = false;
++		}
++
++		// no element argument, shuffle and use this.element
++		if ( !handlers ) {
++			handlers = element;
++			element = this.element;
++			delegateElement = this.widget();
++		} else {
++			// accept selectors, DOM elements
++			element = delegateElement = $( element );
++			this.bindings = this.bindings.add( element );
++		}
++
++		$.each( handlers, function( event, handler ) {
++			function handlerProxy() {
++				// allow widgets to customize the disabled handling
++				// - disabled as an array instead of boolean
++				// - disabled class as method for disabling individual parts
++				if ( !suppressDisabledCheck &&
++						( instance.options.disabled === true ||
++							$( this ).hasClass( "ui-state-disabled" ) ) ) {
++					return;
++				}
++				return ( typeof handler === "string" ? instance[ handler ] : handler )
++					.apply( instance, arguments );
++			}
++
++			// copy the guid so direct unbinding works
++			if ( typeof handler !== "string" ) {
++				handlerProxy.guid = handler.guid =
++					handler.guid || handlerProxy.guid || $.guid++;
++			}
++
++			var match = event.match( /^(\w+)\s*(.*)$/ ),
++				eventName = match[1] + instance.eventNamespace,
++				selector = match[2];
++			if ( selector ) {
++				delegateElement.delegate( selector, eventName, handlerProxy );
++			} else {
++				element.bind( eventName, handlerProxy );
++			}
++		});
++	},
++
++	_off: function( element, eventName ) {
++		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
++		element.unbind( eventName ).undelegate( eventName );
++	},
++
++	_delay: function( handler, delay ) {
++		function handlerProxy() {
++			return ( typeof handler === "string" ? instance[ handler ] : handler )
++				.apply( instance, arguments );
++		}
++		var instance = this;
++		return setTimeout( handlerProxy, delay || 0 );
++	},
++
++	_hoverable: function( element ) {
++		this.hoverable = this.hoverable.add( element );
++		this._on( element, {
++			mouseenter: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-hover" );
++			},
++			mouseleave: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-hover" );
++			}
++		});
++	},
++
++	_focusable: function( element ) {
++		this.focusable = this.focusable.add( element );
++		this._on( element, {
++			focusin: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-focus" );
++			},
++			focusout: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-focus" );
++			}
++		});
++	},
++
++	_trigger: function( type, event, data ) {
++		var prop, orig,
++			callback = this.options[ type ];
++
++		data = data || {};
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		// the original event may come from any element
++		// so we need to reset the target on the new event
++		event.target = this.element[ 0 ];
++
++		// copy original event properties over to the new event
++		orig = event.originalEvent;
++		if ( orig ) {
++			for ( prop in orig ) {
++				if ( !( prop in event ) ) {
++					event[ prop ] = orig[ prop ];
++				}
++			}
++		}
++
++		this.element.trigger( event, data );
++		return !( $.isFunction( callback ) &&
++			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
++	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
++		if ( typeof options === "string" ) {
++			options = { effect: options };
++		}
++		var hasOptions,
++			effectName = !options ?
++				method :
++				options === true || typeof options === "number" ?
++					defaultEffect :
++					options.effect || defaultEffect;
++		options = options || {};
++		if ( typeof options === "number" ) {
++			options = { duration: options };
++		}
++		hasOptions = !$.isEmptyObject( options );
++		options.complete = callback;
++		if ( options.delay ) {
++			element.delay( options.delay );
++		}
++		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
++			element[ method ]( options );
++		} else if ( effectName !== method && element[ effectName ] ) {
++			element[ effectName ]( options.duration, options.easing, callback );
++		} else {
++			element.queue(function( next ) {
++				$( this )[ method ]();
++				if ( callback ) {
++					callback.call( element[ 0 ] );
++				}
++				next();
++			});
++		}
++	};
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.mouse.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.mouse.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.mouse.js	(revision 15487)
+@@ -0,0 +1,169 @@
++/*!
++ * jQuery UI Mouse 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/mouse/
++ *
++ * Depends:
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var mouseHandled = false;
++$( document ).mouseup( function() {
++	mouseHandled = false;
++});
++
++$.widget("ui.mouse", {
++	version: "1.10.3",
++	options: {
++		cancel: "input,textarea,button,select,option",
++		distance: 1,
++		delay: 0
++	},
++	_mouseInit: function() {
++		var that = this;
++
++		this.element
++			.bind("mousedown."+this.widgetName, function(event) {
++				return that._mouseDown(event);
++			})
++			.bind("click."+this.widgetName, function(event) {
++				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
++					$.removeData(event.target, that.widgetName + ".preventClickEvent");
++					event.stopImmediatePropagation();
++					return false;
++				}
++			});
++
++		this.started = false;
++	},
++
++	// TODO: make sure destroying one instance of mouse doesn't mess with
++	// other instances of mouse
++	_mouseDestroy: function() {
++		this.element.unbind("."+this.widgetName);
++		if ( this._mouseMoveDelegate ) {
++			$(document)
++				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++		}
++	},
++
++	_mouseDown: function(event) {
++		// don't let more than one widget handle mouseStart
++		if( mouseHandled ) { return; }
++
++		// we may have missed mouseup (out of window)
++		(this._mouseStarted && this._mouseUp(event));
++
++		this._mouseDownEvent = event;
++
++		var that = this,
++			btnIsLeft = (event.which === 1),
++			// event.target.nodeName works around a bug in IE 8 with
++			// disabled inputs (#7620)
++			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
++		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
++			return true;
++		}
++
++		this.mouseDelayMet = !this.options.delay;
++		if (!this.mouseDelayMet) {
++			this._mouseDelayTimer = setTimeout(function() {
++				that.mouseDelayMet = true;
++			}, this.options.delay);
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted = (this._mouseStart(event) !== false);
++			if (!this._mouseStarted) {
++				event.preventDefault();
++				return true;
++			}
++		}
++
++		// Click event may never have fired (Gecko & Opera)
++		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
++			$.removeData(event.target, this.widgetName + ".preventClickEvent");
++		}
++
++		// these delegates are required to keep context
++		this._mouseMoveDelegate = function(event) {
++			return that._mouseMove(event);
++		};
++		this._mouseUpDelegate = function(event) {
++			return that._mouseUp(event);
++		};
++		$(document)
++			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		event.preventDefault();
++
++		mouseHandled = true;
++		return true;
++	},
++
++	_mouseMove: function(event) {
++		// IE mouseup check - mouseup happened when mouse was out of window
++		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
++			return this._mouseUp(event);
++		}
++
++		if (this._mouseStarted) {
++			this._mouseDrag(event);
++			return event.preventDefault();
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted =
++				(this._mouseStart(this._mouseDownEvent, event) !== false);
++			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
++		}
++
++		return !this._mouseStarted;
++	},
++
++	_mouseUp: function(event) {
++		$(document)
++			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		if (this._mouseStarted) {
++			this._mouseStarted = false;
++
++			if (event.target === this._mouseDownEvent.target) {
++				$.data(event.target, this.widgetName + ".preventClickEvent", true);
++			}
++
++			this._mouseStop(event);
++		}
++
++		return false;
++	},
++
++	_mouseDistanceMet: function(event) {
++		return (Math.max(
++				Math.abs(this._mouseDownEvent.pageX - event.pageX),
++				Math.abs(this._mouseDownEvent.pageY - event.pageY)
++			) >= this.options.distance
++		);
++	},
++
++	_mouseDelayMet: function(/* event */) {
++		return this.mouseDelayMet;
++	},
++
++	// These are placeholder methods, to be overriden by extending plugin
++	_mouseStart: function(/* event */) {},
++	_mouseDrag: function(/* event */) {},
++	_mouseStop: function(/* event */) {},
++	_mouseCapture: function(/* event */) { return true; }
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fade.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fade.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fade.js	(revision 15487)
+@@ -0,0 +1,30 @@
++/*!
++ * jQuery UI Effects Fade 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/fade-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.fade = function( o, done ) {
++	var el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "toggle" );
++
++	el.animate({
++		opacity: mode
++	}, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: done
++	});
++};
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-explode.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-explode.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-explode.js	(revision 15487)
+@@ -0,0 +1,97 @@
++/*!
++ * jQuery UI Effects Explode 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/explode-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.explode = function( o, done ) {
++
++	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
++		cells = rows,
++		el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++
++		// show and then visibility:hidden the element before calculating offset
++		offset = el.show().css( "visibility", "hidden" ).offset(),
++
++		// width and height of a piece
++		width = Math.ceil( el.outerWidth() / cells ),
++		height = Math.ceil( el.outerHeight() / rows ),
++		pieces = [],
++
++		// loop
++		i, j, left, top, mx, my;
++
++	// children animate complete:
++	function childComplete() {
++		pieces.push( this );
++		if ( pieces.length === rows * cells ) {
++			animComplete();
++		}
++	}
++
++	// clone the element for each row and cell.
++	for( i = 0; i < rows ; i++ ) { // ===>
++		top = offset.top + i * height;
++		my = i - ( rows - 1 ) / 2 ;
++
++		for( j = 0; j < cells ; j++ ) { // |||
++			left = offset.left + j * width;
++			mx = j - ( cells - 1 ) / 2 ;
++
++			// Create a clone of the now hidden main element that will be absolute positioned
++			// within a wrapper div off the -left and -top equal to size of our pieces
++			el
++				.clone()
++				.appendTo( "body" )
++				.wrap( "<div></div>" )
++				.css({
++					position: "absolute",
++					visibility: "visible",
++					left: -j * width,
++					top: -i * height
++				})
++
++			// select the wrapper - make it overflow: hidden and absolute positioned based on
++			// where the original was located +left and +top equal to the size of pieces
++				.parent()
++				.addClass( "ui-effects-explode" )
++				.css({
++					position: "absolute",
++					overflow: "hidden",
++					width: width,
++					height: height,
++					left: left + ( show ? mx * width : 0 ),
++					top: top + ( show ? my * height : 0 ),
++					opacity: show ? 0 : 1
++				}).animate({
++					left: left + ( show ? 0 : mx * width ),
++					top: top + ( show ? 0 : my * height ),
++					opacity: show ? 1 : 0
++				}, o.duration || 500, o.easing, childComplete );
++		}
++	}
++
++	function animComplete() {
++		el.css({
++			visibility: "visible"
++		});
++		$( pieces ).remove();
++		if ( !show ) {
++			el.hide();
++		}
++		done();
++	}
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect.js	(revision 15487)
+@@ -0,0 +1,1289 @@
++/*!
++ * jQuery UI Effects 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/category/effects-core/
++ */
++(function($, undefined) {
++
++var dataSpace = "ui-effects-";
++
++$.effects = {
++	effect: {}
++};
++
++/*!
++ * jQuery Color Animations v2.1.2
++ * https://github.com/jquery/jquery-color
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * Date: Wed Jan 16 08:47:09 2013 -0600
++ */
++(function( jQuery, undefined ) {
++
++	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
++
++	// plusequals test for += 100 -= 100
++	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
++	// a set of RE's that can match strings and generate color tuples.
++	stringParsers = [{
++			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ],
++					execResult[ 3 ],
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ] * 2.55,
++					execResult[ 2 ] * 2.55,
++					execResult[ 3 ] * 2.55,
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			space: "hsla",
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ] / 100,
++					execResult[ 3 ] / 100,
++					execResult[ 4 ]
++				];
++			}
++		}],
++
++	// jQuery.Color( )
++	color = jQuery.Color = function( color, green, blue, alpha ) {
++		return new jQuery.Color.fn.parse( color, green, blue, alpha );
++	},
++	spaces = {
++		rgba: {
++			props: {
++				red: {
++					idx: 0,
++					type: "byte"
++				},
++				green: {
++					idx: 1,
++					type: "byte"
++				},
++				blue: {
++					idx: 2,
++					type: "byte"
++				}
++			}
++		},
++
++		hsla: {
++			props: {
++				hue: {
++					idx: 0,
++					type: "degrees"
++				},
++				saturation: {
++					idx: 1,
++					type: "percent"
++				},
++				lightness: {
++					idx: 2,
++					type: "percent"
++				}
++			}
++		}
++	},
++	propTypes = {
++		"byte": {
++			floor: true,
++			max: 255
++		},
++		"percent": {
++			max: 1
++		},
++		"degrees": {
++			mod: 360,
++			floor: true
++		}
++	},
++	support = color.support = {},
++
++	// element for support tests
++	supportElem = jQuery( "<p>" )[ 0 ],
++
++	// colors = jQuery.Color.names
++	colors,
++
++	// local aliases of functions called often
++	each = jQuery.each;
++
++// determine rgba support immediately
++supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
++support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
++
++// define cache name and alpha properties
++// for rgba and hsla spaces
++each( spaces, function( spaceName, space ) {
++	space.cache = "_" + spaceName;
++	space.props.alpha = {
++		idx: 3,
++		type: "percent",
++		def: 1
++	};
++});
++
++function clamp( value, prop, allowEmpty ) {
++	var type = propTypes[ prop.type ] || {};
++
++	if ( value == null ) {
++		return (allowEmpty || !prop.def) ? null : prop.def;
++	}
++
++	// ~~ is an short way of doing floor for positive numbers
++	value = type.floor ? ~~value : parseFloat( value );
++
++	// IE will pass in empty strings as value for alpha,
++	// which will hit this case
++	if ( isNaN( value ) ) {
++		return prop.def;
++	}
++
++	if ( type.mod ) {
++		// we add mod before modding to make sure that negatives values
++		// get converted properly: -10 -> 350
++		return (value + type.mod) % type.mod;
++	}
++
++	// for now all property types without mod have min and max
++	return 0 > value ? 0 : type.max < value ? type.max : value;
++}
++
++function stringParse( string ) {
++	var inst = color(),
++		rgba = inst._rgba = [];
++
++	string = string.toLowerCase();
++
++	each( stringParsers, function( i, parser ) {
++		var parsed,
++			match = parser.re.exec( string ),
++			values = match && parser.parse( match ),
++			spaceName = parser.space || "rgba";
++
++		if ( values ) {
++			parsed = inst[ spaceName ]( values );
++
++			// if this was an rgba parse the assignment might happen twice
++			// oh well....
++			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
++			rgba = inst._rgba = parsed._rgba;
++
++			// exit each( stringParsers ) here because we matched
++			return false;
++		}
++	});
++
++	// Found a stringParser that handled it
++	if ( rgba.length ) {
++
++		// if this came from a parsed string, force "transparent" when alpha is 0
++		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
++		if ( rgba.join() === "0,0,0,0" ) {
++			jQuery.extend( rgba, colors.transparent );
++		}
++		return inst;
++	}
++
++	// named colors
++	return colors[ string ];
++}
++
++color.fn = jQuery.extend( color.prototype, {
++	parse: function( red, green, blue, alpha ) {
++		if ( red === undefined ) {
++			this._rgba = [ null, null, null, null ];
++			return this;
++		}
++		if ( red.jquery || red.nodeType ) {
++			red = jQuery( red ).css( green );
++			green = undefined;
++		}
++
++		var inst = this,
++			type = jQuery.type( red ),
++			rgba = this._rgba = [];
++
++		// more than 1 argument specified - assume ( red, green, blue, alpha )
++		if ( green !== undefined ) {
++			red = [ red, green, blue, alpha ];
++			type = "array";
++		}
++
++		if ( type === "string" ) {
++			return this.parse( stringParse( red ) || colors._default );
++		}
++
++		if ( type === "array" ) {
++			each( spaces.rgba.props, function( key, prop ) {
++				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
++			});
++			return this;
++		}
++
++		if ( type === "object" ) {
++			if ( red instanceof color ) {
++				each( spaces, function( spaceName, space ) {
++					if ( red[ space.cache ] ) {
++						inst[ space.cache ] = red[ space.cache ].slice();
++					}
++				});
++			} else {
++				each( spaces, function( spaceName, space ) {
++					var cache = space.cache;
++					each( space.props, function( key, prop ) {
++
++						// if the cache doesn't exist, and we know how to convert
++						if ( !inst[ cache ] && space.to ) {
++
++							// if the value was null, we don't need to copy it
++							// if the key was alpha, we don't need to copy it either
++							if ( key === "alpha" || red[ key ] == null ) {
++								return;
++							}
++							inst[ cache ] = space.to( inst._rgba );
++						}
++
++						// this is the only case where we allow nulls for ALL properties.
++						// call clamp with alwaysAllowEmpty
++						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
++					});
++
++					// everything defined but alpha?
++					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
++						// use the default of 1
++						inst[ cache ][ 3 ] = 1;
++						if ( space.from ) {
++							inst._rgba = space.from( inst[ cache ] );
++						}
++					}
++				});
++			}
++			return this;
++		}
++	},
++	is: function( compare ) {
++		var is = color( compare ),
++			same = true,
++			inst = this;
++
++		each( spaces, function( _, space ) {
++			var localCache,
++				isCache = is[ space.cache ];
++			if (isCache) {
++				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
++				each( space.props, function( _, prop ) {
++					if ( isCache[ prop.idx ] != null ) {
++						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
++						return same;
++					}
++				});
++			}
++			return same;
++		});
++		return same;
++	},
++	_space: function() {
++		var used = [],
++			inst = this;
++		each( spaces, function( spaceName, space ) {
++			if ( inst[ space.cache ] ) {
++				used.push( spaceName );
++			}
++		});
++		return used.pop();
++	},
++	transition: function( other, distance ) {
++		var end = color( other ),
++			spaceName = end._space(),
++			space = spaces[ spaceName ],
++			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
++			start = startColor[ space.cache ] || space.to( startColor._rgba ),
++			result = start.slice();
++
++		end = end[ space.cache ];
++		each( space.props, function( key, prop ) {
++			var index = prop.idx,
++				startValue = start[ index ],
++				endValue = end[ index ],
++				type = propTypes[ prop.type ] || {};
++
++			// if null, don't override start value
++			if ( endValue === null ) {
++				return;
++			}
++			// if null - use end
++			if ( startValue === null ) {
++				result[ index ] = endValue;
++			} else {
++				if ( type.mod ) {
++					if ( endValue - startValue > type.mod / 2 ) {
++						startValue += type.mod;
++					} else if ( startValue - endValue > type.mod / 2 ) {
++						startValue -= type.mod;
++					}
++				}
++				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
++			}
++		});
++		return this[ spaceName ]( result );
++	},
++	blend: function( opaque ) {
++		// if we are already opaque - return ourself
++		if ( this._rgba[ 3 ] === 1 ) {
++			return this;
++		}
++
++		var rgb = this._rgba.slice(),
++			a = rgb.pop(),
++			blend = color( opaque )._rgba;
++
++		return color( jQuery.map( rgb, function( v, i ) {
++			return ( 1 - a ) * blend[ i ] + a * v;
++		}));
++	},
++	toRgbaString: function() {
++		var prefix = "rgba(",
++			rgba = jQuery.map( this._rgba, function( v, i ) {
++				return v == null ? ( i > 2 ? 1 : 0 ) : v;
++			});
++
++		if ( rgba[ 3 ] === 1 ) {
++			rgba.pop();
++			prefix = "rgb(";
++		}
++
++		return prefix + rgba.join() + ")";
++	},
++	toHslaString: function() {
++		var prefix = "hsla(",
++			hsla = jQuery.map( this.hsla(), function( v, i ) {
++				if ( v == null ) {
++					v = i > 2 ? 1 : 0;
++				}
++
++				// catch 1 and 2
++				if ( i && i < 3 ) {
++					v = Math.round( v * 100 ) + "%";
++				}
++				return v;
++			});
++
++		if ( hsla[ 3 ] === 1 ) {
++			hsla.pop();
++			prefix = "hsl(";
++		}
++		return prefix + hsla.join() + ")";
++	},
++	toHexString: function( includeAlpha ) {
++		var rgba = this._rgba.slice(),
++			alpha = rgba.pop();
++
++		if ( includeAlpha ) {
++			rgba.push( ~~( alpha * 255 ) );
++		}
++
++		return "#" + jQuery.map( rgba, function( v ) {
++
++			// default to 0 when nulls exist
++			v = ( v || 0 ).toString( 16 );
++			return v.length === 1 ? "0" + v : v;
++		}).join("");
++	},
++	toString: function() {
++		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
++	}
++});
++color.fn.parse.prototype = color.fn;
++
++// hsla conversions adapted from:
++// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
++
++function hue2rgb( p, q, h ) {
++	h = ( h + 1 ) % 1;
++	if ( h * 6 < 1 ) {
++		return p + (q - p) * h * 6;
++	}
++	if ( h * 2 < 1) {
++		return q;
++	}
++	if ( h * 3 < 2 ) {
++		return p + (q - p) * ((2/3) - h) * 6;
++	}
++	return p;
++}
++
++spaces.hsla.to = function ( rgba ) {
++	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
++		return [ null, null, null, rgba[ 3 ] ];
++	}
++	var r = rgba[ 0 ] / 255,
++		g = rgba[ 1 ] / 255,
++		b = rgba[ 2 ] / 255,
++		a = rgba[ 3 ],
++		max = Math.max( r, g, b ),
++		min = Math.min( r, g, b ),
++		diff = max - min,
++		add = max + min,
++		l = add * 0.5,
++		h, s;
++
++	if ( min === max ) {
++		h = 0;
++	} else if ( r === max ) {
++		h = ( 60 * ( g - b ) / diff ) + 360;
++	} else if ( g === max ) {
++		h = ( 60 * ( b - r ) / diff ) + 120;
++	} else {
++		h = ( 60 * ( r - g ) / diff ) + 240;
++	}
++
++	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
++	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
++	if ( diff === 0 ) {
++		s = 0;
++	} else if ( l <= 0.5 ) {
++		s = diff / add;
++	} else {
++		s = diff / ( 2 - add );
++	}
++	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
++};
++
++spaces.hsla.from = function ( hsla ) {
++	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
++		return [ null, null, null, hsla[ 3 ] ];
++	}
++	var h = hsla[ 0 ] / 360,
++		s = hsla[ 1 ],
++		l = hsla[ 2 ],
++		a = hsla[ 3 ],
++		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
++		p = 2 * l - q;
++
++	return [
++		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
++		Math.round( hue2rgb( p, q, h ) * 255 ),
++		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
++		a
++	];
++};
++
++
++each( spaces, function( spaceName, space ) {
++	var props = space.props,
++		cache = space.cache,
++		to = space.to,
++		from = space.from;
++
++	// makes rgba() and hsla()
++	color.fn[ spaceName ] = function( value ) {
++
++		// generate a cache for this space if it doesn't exist
++		if ( to && !this[ cache ] ) {
++			this[ cache ] = to( this._rgba );
++		}
++		if ( value === undefined ) {
++			return this[ cache ].slice();
++		}
++
++		var ret,
++			type = jQuery.type( value ),
++			arr = ( type === "array" || type === "object" ) ? value : arguments,
++			local = this[ cache ].slice();
++
++		each( props, function( key, prop ) {
++			var val = arr[ type === "object" ? key : prop.idx ];
++			if ( val == null ) {
++				val = local[ prop.idx ];
++			}
++			local[ prop.idx ] = clamp( val, prop );
++		});
++
++		if ( from ) {
++			ret = color( from( local ) );
++			ret[ cache ] = local;
++			return ret;
++		} else {
++			return color( local );
++		}
++	};
++
++	// makes red() green() blue() alpha() hue() saturation() lightness()
++	each( props, function( key, prop ) {
++		// alpha is included in more than one space
++		if ( color.fn[ key ] ) {
++			return;
++		}
++		color.fn[ key ] = function( value ) {
++			var vtype = jQuery.type( value ),
++				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
++				local = this[ fn ](),
++				cur = local[ prop.idx ],
++				match;
++
++			if ( vtype === "undefined" ) {
++				return cur;
++			}
++
++			if ( vtype === "function" ) {
++				value = value.call( this, cur );
++				vtype = jQuery.type( value );
++			}
++			if ( value == null && prop.empty ) {
++				return this;
++			}
++			if ( vtype === "string" ) {
++				match = rplusequals.exec( value );
++				if ( match ) {
++					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
++				}
++			}
++			local[ prop.idx ] = value;
++			return this[ fn ]( local );
++		};
++	});
++});
++
++// add cssHook and .fx.step function for each named hook.
++// accept a space separated string of properties
++color.hook = function( hook ) {
++	var hooks = hook.split( " " );
++	each( hooks, function( i, hook ) {
++		jQuery.cssHooks[ hook ] = {
++			set: function( elem, value ) {
++				var parsed, curElem,
++					backgroundColor = "";
++
++				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
++					value = color( parsed || value );
++					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
++						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
++						while (
++							(backgroundColor === "" || backgroundColor === "transparent") &&
++							curElem && curElem.style
++						) {
++							try {
++								backgroundColor = jQuery.css( curElem, "backgroundColor" );
++								curElem = curElem.parentNode;
++							} catch ( e ) {
++							}
++						}
++
++						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
++							backgroundColor :
++							"_default" );
++					}
++
++					value = value.toRgbaString();
++				}
++				try {
++					elem.style[ hook ] = value;
++				} catch( e ) {
++					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
++				}
++			}
++		};
++		jQuery.fx.step[ hook ] = function( fx ) {
++			if ( !fx.colorInit ) {
++				fx.start = color( fx.elem, hook );
++				fx.end = color( fx.end );
++				fx.colorInit = true;
++			}
++			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
++		};
++	});
++
++};
++
++color.hook( stepHooks );
++
++jQuery.cssHooks.borderColor = {
++	expand: function( value ) {
++		var expanded = {};
++
++		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
++			expanded[ "border" + part + "Color" ] = value;
++		});
++		return expanded;
++	}
++};
++
++// Basic color names only.
++// Usage of any of the other color names requires adding yourself or including
++// jquery.color.svg-names.js.
++colors = jQuery.Color.names = {
++	// 4.1. Basic color keywords
++	aqua: "#00ffff",
++	black: "#000000",
++	blue: "#0000ff",
++	fuchsia: "#ff00ff",
++	gray: "#808080",
++	green: "#008000",
++	lime: "#00ff00",
++	maroon: "#800000",
++	navy: "#000080",
++	olive: "#808000",
++	purple: "#800080",
++	red: "#ff0000",
++	silver: "#c0c0c0",
++	teal: "#008080",
++	white: "#ffffff",
++	yellow: "#ffff00",
++
++	// 4.2.3. "transparent" color keyword
++	transparent: [ null, null, null, 0 ],
++
++	_default: "#ffffff"
++};
++
++})( jQuery );
++
++
++/******************************************************************************/
++/****************************** CLASS ANIMATIONS ******************************/
++/******************************************************************************/
++(function() {
++
++var classAnimationActions = [ "add", "remove", "toggle" ],
++	shorthandStyles = {
++		border: 1,
++		borderBottom: 1,
++		borderColor: 1,
++		borderLeft: 1,
++		borderRight: 1,
++		borderTop: 1,
++		borderWidth: 1,
++		margin: 1,
++		padding: 1
++	};
++
++$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
++	$.fx.step[ prop ] = function( fx ) {
++		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
++			jQuery.style( fx.elem, prop, fx.end );
++			fx.setAttr = true;
++		}
++	};
++});
++
++function getElementStyles( elem ) {
++	var key, len,
++		style = elem.ownerDocument.defaultView ?
++			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
++			elem.currentStyle,
++		styles = {};
++
++	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
++		len = style.length;
++		while ( len-- ) {
++			key = style[ len ];
++			if ( typeof style[ key ] === "string" ) {
++				styles[ $.camelCase( key ) ] = style[ key ];
++			}
++		}
++	// support: Opera, IE <9
++	} else {
++		for ( key in style ) {
++			if ( typeof style[ key ] === "string" ) {
++				styles[ key ] = style[ key ];
++			}
++		}
++	}
++
++	return styles;
++}
++
++
++function styleDifference( oldStyle, newStyle ) {
++	var diff = {},
++		name, value;
++
++	for ( name in newStyle ) {
++		value = newStyle[ name ];
++		if ( oldStyle[ name ] !== value ) {
++			if ( !shorthandStyles[ name ] ) {
++				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
++					diff[ name ] = value;
++				}
++			}
++		}
++	}
++
++	return diff;
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++$.effects.animateClass = function( value, duration, easing, callback ) {
++	var o = $.speed( duration, easing, callback );
++
++	return this.queue( function() {
++		var animated = $( this ),
++			baseClass = animated.attr( "class" ) || "",
++			applyClassChange,
++			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
++
++		// map the animated objects to store the original styles.
++		allAnimations = allAnimations.map(function() {
++			var el = $( this );
++			return {
++				el: el,
++				start: getElementStyles( this )
++			};
++		});
++
++		// apply class change
++		applyClassChange = function() {
++			$.each( classAnimationActions, function(i, action) {
++				if ( value[ action ] ) {
++					animated[ action + "Class" ]( value[ action ] );
++				}
++			});
++		};
++		applyClassChange();
++
++		// map all animated objects again - calculate new styles and diff
++		allAnimations = allAnimations.map(function() {
++			this.end = getElementStyles( this.el[ 0 ] );
++			this.diff = styleDifference( this.start, this.end );
++			return this;
++		});
++
++		// apply original class
++		animated.attr( "class", baseClass );
++
++		// map all animated objects again - this time collecting a promise
++		allAnimations = allAnimations.map(function() {
++			var styleInfo = this,
++				dfd = $.Deferred(),
++				opts = $.extend({}, o, {
++					queue: false,
++					complete: function() {
++						dfd.resolve( styleInfo );
++					}
++				});
++
++			this.el.animate( this.diff, opts );
++			return dfd.promise();
++		});
++
++		// once all animations have completed:
++		$.when.apply( $, allAnimations.get() ).done(function() {
++
++			// set the final class
++			applyClassChange();
++
++			// for each animated element,
++			// clear all css properties that were animated
++			$.each( arguments, function() {
++				var el = this.el;
++				$.each( this.diff, function(key) {
++					el.css( key, "" );
++				});
++			});
++
++			// this is guarnteed to be there if you use jQuery.speed()
++			// it also handles dequeuing the next anim...
++			o.complete.call( animated[ 0 ] );
++		});
++	});
++};
++
++$.fn.extend({
++	addClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return speed ?
++				$.effects.animateClass.call( this,
++					{ add: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.addClass ),
++
++	removeClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return arguments.length > 1 ?
++				$.effects.animateClass.call( this,
++					{ remove: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.removeClass ),
++
++	toggleClass: (function( orig ) {
++		return function( classNames, force, speed, easing, callback ) {
++			if ( typeof force === "boolean" || force === undefined ) {
++				if ( !speed ) {
++					// without speed parameter
++					return orig.apply( this, arguments );
++				} else {
++					return $.effects.animateClass.call( this,
++						(force ? { add: classNames } : { remove: classNames }),
++						speed, easing, callback );
++				}
++			} else {
++				// without force parameter
++				return $.effects.animateClass.call( this,
++					{ toggle: classNames }, force, speed, easing );
++			}
++		};
++	})( $.fn.toggleClass ),
++
++	switchClass: function( remove, add, speed, easing, callback) {
++		return $.effects.animateClass.call( this, {
++			add: add,
++			remove: remove
++		}, speed, easing, callback );
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EFFECTS **********************************/
++/******************************************************************************/
++
++(function() {
++
++$.extend( $.effects, {
++	version: "1.10.3",
++
++	// Saves a set of properties in a data storage
++	save: function( element, set ) {
++		for( var i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
++			}
++		}
++	},
++
++	// Restores a set of previously saved properties from a data storage
++	restore: function( element, set ) {
++		var val, i;
++		for( i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				val = element.data( dataSpace + set[ i ] );
++				// support: jQuery 1.6.2
++				// http://bugs.jquery.com/ticket/9917
++				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
++				// We can't differentiate between "" and 0 here, so we just assume
++				// empty string since it's likely to be a more common value...
++				if ( val === undefined ) {
++					val = "";
++				}
++				element.css( set[ i ], val );
++			}
++		}
++	},
++
++	setMode: function( el, mode ) {
++		if (mode === "toggle") {
++			mode = el.is( ":hidden" ) ? "show" : "hide";
++		}
++		return mode;
++	},
++
++	// Translates a [top,left] array into a baseline value
++	// this should be a little more flexible in the future to handle a string & hash
++	getBaseline: function( origin, original ) {
++		var y, x;
++		switch ( origin[ 0 ] ) {
++			case "top": y = 0; break;
++			case "middle": y = 0.5; break;
++			case "bottom": y = 1; break;
++			default: y = origin[ 0 ] / original.height;
++		}
++		switch ( origin[ 1 ] ) {
++			case "left": x = 0; break;
++			case "center": x = 0.5; break;
++			case "right": x = 1; break;
++			default: x = origin[ 1 ] / original.width;
++		}
++		return {
++			x: x,
++			y: y
++		};
++	},
++
++	// Wraps the element around a wrapper that copies position properties
++	createWrapper: function( element ) {
++
++		// if the element is already wrapped, return it
++		if ( element.parent().is( ".ui-effects-wrapper" )) {
++			return element.parent();
++		}
++
++		// wrap the element
++		var props = {
++				width: element.outerWidth(true),
++				height: element.outerHeight(true),
++				"float": element.css( "float" )
++			},
++			wrapper = $( "<div></div>" )
++				.addClass( "ui-effects-wrapper" )
++				.css({
++					fontSize: "100%",
++					background: "transparent",
++					border: "none",
++					margin: 0,
++					padding: 0
++				}),
++			// Store the size in case width/height are defined in % - Fixes #5245
++			size = {
++				width: element.width(),
++				height: element.height()
++			},
++			active = document.activeElement;
++
++		// support: Firefox
++		// Firefox incorrectly exposes anonymous content
++		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
++		try {
++			active.id;
++		} catch( e ) {
++			active = document.body;
++		}
++
++		element.wrap( wrapper );
++
++		// Fixes #7595 - Elements lose focus when wrapped.
++		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++			$( active ).focus();
++		}
++
++		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
++
++		// transfer positioning properties to the wrapper
++		if ( element.css( "position" ) === "static" ) {
++			wrapper.css({ position: "relative" });
++			element.css({ position: "relative" });
++		} else {
++			$.extend( props, {
++				position: element.css( "position" ),
++				zIndex: element.css( "z-index" )
++			});
++			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
++				props[ pos ] = element.css( pos );
++				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
++					props[ pos ] = "auto";
++				}
++			});
++			element.css({
++				position: "relative",
++				top: 0,
++				left: 0,
++				right: "auto",
++				bottom: "auto"
++			});
++		}
++		element.css(size);
++
++		return wrapper.css( props ).show();
++	},
++
++	removeWrapper: function( element ) {
++		var active = document.activeElement;
++
++		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
++			element.parent().replaceWith( element );
++
++			// Fixes #7595 - Elements lose focus when wrapped.
++			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++				$( active ).focus();
++			}
++		}
++
++
++		return element;
++	},
++
++	setTransition: function( element, list, factor, value ) {
++		value = value || {};
++		$.each( list, function( i, x ) {
++			var unit = element.cssUnit( x );
++			if ( unit[ 0 ] > 0 ) {
++				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
++			}
++		});
++		return value;
++	}
++});
++
++// return an effect options object for the given parameters:
++function _normalizeArguments( effect, options, speed, callback ) {
++
++	// allow passing all options as the first parameter
++	if ( $.isPlainObject( effect ) ) {
++		options = effect;
++		effect = effect.effect;
++	}
++
++	// convert to an object
++	effect = { effect: effect };
++
++	// catch (effect, null, ...)
++	if ( options == null ) {
++		options = {};
++	}
++
++	// catch (effect, callback)
++	if ( $.isFunction( options ) ) {
++		callback = options;
++		speed = null;
++		options = {};
++	}
++
++	// catch (effect, speed, ?)
++	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
++		callback = speed;
++		speed = options;
++		options = {};
++	}
++
++	// catch (effect, options, callback)
++	if ( $.isFunction( speed ) ) {
++		callback = speed;
++		speed = null;
++	}
++
++	// add options to effect
++	if ( options ) {
++		$.extend( effect, options );
++	}
++
++	speed = speed || options.duration;
++	effect.duration = $.fx.off ? 0 :
++		typeof speed === "number" ? speed :
++		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
++		$.fx.speeds._default;
++
++	effect.complete = callback || options.complete;
++
++	return effect;
++}
++
++function standardAnimationOption( option ) {
++	// Valid standard speeds (nothing, number, named speed)
++	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
++		return true;
++	}
++
++	// Invalid strings - treat as "normal" speed
++	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
++		return true;
++	}
++
++	// Complete callback
++	if ( $.isFunction( option ) ) {
++		return true;
++	}
++
++	// Options hash (but not naming an effect)
++	if ( typeof option === "object" && !option.effect ) {
++		return true;
++	}
++
++	// Didn't match any standard API
++	return false;
++}
++
++$.fn.extend({
++	effect: function( /* effect, options, speed, callback */ ) {
++		var args = _normalizeArguments.apply( this, arguments ),
++			mode = args.mode,
++			queue = args.queue,
++			effectMethod = $.effects.effect[ args.effect ];
++
++		if ( $.fx.off || !effectMethod ) {
++			// delegate to the original method (e.g., .show()) if possible
++			if ( mode ) {
++				return this[ mode ]( args.duration, args.complete );
++			} else {
++				return this.each( function() {
++					if ( args.complete ) {
++						args.complete.call( this );
++					}
++				});
++			}
++		}
++
++		function run( next ) {
++			var elem = $( this ),
++				complete = args.complete,
++				mode = args.mode;
++
++			function done() {
++				if ( $.isFunction( complete ) ) {
++					complete.call( elem[0] );
++				}
++				if ( $.isFunction( next ) ) {
++					next();
++				}
++			}
++
++			// If the element already has the correct final state, delegate to
++			// the core methods so the internal tracking of "olddisplay" works.
++			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
++				elem[ mode ]();
++				done();
++			} else {
++				effectMethod.call( elem[0], args, done );
++			}
++		}
++
++		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
++	},
++
++	show: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "show";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.show ),
++
++	hide: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "hide";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.hide ),
++
++	toggle: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "toggle";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.toggle ),
++
++	// helper functions
++	cssUnit: function(key) {
++		var style = this.css( key ),
++			val = [];
++
++		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
++			if ( style.indexOf( unit ) > 0 ) {
++				val = [ parseFloat( style ), unit ];
++			}
++		});
++		return val;
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EASING ***********************************/
++/******************************************************************************/
++
++(function() {
++
++// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
++
++var baseEasings = {};
++
++$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
++	baseEasings[ name ] = function( p ) {
++		return Math.pow( p, i + 2 );
++	};
++});
++
++$.extend( baseEasings, {
++	Sine: function ( p ) {
++		return 1 - Math.cos( p * Math.PI / 2 );
++	},
++	Circ: function ( p ) {
++		return 1 - Math.sqrt( 1 - p * p );
++	},
++	Elastic: function( p ) {
++		return p === 0 || p === 1 ? p :
++			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
++	},
++	Back: function( p ) {
++		return p * p * ( 3 * p - 2 );
++	},
++	Bounce: function ( p ) {
++		var pow2,
++			bounce = 4;
++
++		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
++		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
++	}
++});
++
++$.each( baseEasings, function( name, easeIn ) {
++	$.easing[ "easeIn" + name ] = easeIn;
++	$.easing[ "easeOut" + name ] = function( p ) {
++		return 1 - easeIn( 1 - p );
++	};
++	$.easing[ "easeInOut" + name ] = function( p ) {
++		return p < 0.5 ?
++			easeIn( p * 2 ) / 2 :
++			1 - easeIn( p * -2 + 2 ) / 2;
++	};
++});
++
++})();
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.accordion.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.accordion.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.accordion.js	(revision 15487)
+@@ -0,0 +1,572 @@
++/*!
++ * jQuery UI Accordion 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/accordion/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var uid = 0,
++	hideProps = {},
++	showProps = {};
++
++hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
++	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
++showProps.height = showProps.paddingTop = showProps.paddingBottom =
++	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
++
++$.widget( "ui.accordion", {
++	version: "1.10.3",
++	options: {
++		active: 0,
++		animate: {},
++		collapsible: false,
++		event: "click",
++		header: "> li > :first-child,> :not(li):even",
++		heightStyle: "auto",
++		icons: {
++			activeHeader: "ui-icon-triangle-1-s",
++			header: "ui-icon-triangle-1-e"
++		},
++
++		// callbacks
++		activate: null,
++		beforeActivate: null
++	},
++
++	_create: function() {
++		var options = this.options;
++		this.prevShow = this.prevHide = $();
++		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
++			// ARIA
++			.attr( "role", "tablist" );
++
++		// don't allow collapsible: false and active: false / null
++		if ( !options.collapsible && (options.active === false || options.active == null) ) {
++			options.active = 0;
++		}
++
++		this._processPanels();
++		// handle negative values
++		if ( options.active < 0 ) {
++			options.active += this.headers.length;
++		}
++		this._refresh();
++	},
++
++	_getCreateEventData: function() {
++		return {
++			header: this.active,
++			panel: !this.active.length ? $() : this.active.next(),
++			content: !this.active.length ? $() : this.active.next()
++		};
++	},
++
++	_createIcons: function() {
++		var icons = this.options.icons;
++		if ( icons ) {
++			$( "<span>" )
++				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
++				.prependTo( this.headers );
++			this.active.children( ".ui-accordion-header-icon" )
++				.removeClass( icons.header )
++				.addClass( icons.activeHeader );
++			this.headers.addClass( "ui-accordion-icons" );
++		}
++	},
++
++	_destroyIcons: function() {
++		this.headers
++			.removeClass( "ui-accordion-icons" )
++			.children( ".ui-accordion-header-icon" )
++				.remove();
++	},
++
++	_destroy: function() {
++		var contents;
++
++		// clean up main element
++		this.element
++			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
++			.removeAttr( "role" );
++
++		// clean up headers
++		this.headers
++			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-selected" )
++			.removeAttr( "aria-controls" )
++			.removeAttr( "tabIndex" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		this._destroyIcons();
++
++		// clean up content panels
++		contents = this.headers.next()
++			.css( "display", "" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-expanded" )
++			.removeAttr( "aria-hidden" )
++			.removeAttr( "aria-labelledby" )
++			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		if ( this.options.heightStyle !== "content" ) {
++			contents.css( "height", "" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "event" ) {
++			if ( this.options.event ) {
++				this._off( this.headers, this.options.event );
++			}
++			this._setupEvents( value );
++		}
++
++		this._super( key, value );
++
++		// setting collapsible: false while collapsed; open first panel
++		if ( key === "collapsible" && !value && this.options.active === false ) {
++			this._activate( 0 );
++		}
++
++		if ( key === "icons" ) {
++			this._destroyIcons();
++			if ( value ) {
++				this._createIcons();
++			}
++		}
++
++		// #5332 - opacity doesn't cascade to positioned elements in IE
++		// so we need to add the disabled class to the headers and panels
++		if ( key === "disabled" ) {
++			this.headers.add( this.headers.next() )
++				.toggleClass( "ui-state-disabled", !!value );
++		}
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		if ( event.altKey || event.ctrlKey ) {
++			return;
++		}
++
++		var keyCode = $.ui.keyCode,
++			length = this.headers.length,
++			currentIndex = this.headers.index( event.target ),
++			toFocus = false;
++
++		switch ( event.keyCode ) {
++			case keyCode.RIGHT:
++			case keyCode.DOWN:
++				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
++				break;
++			case keyCode.LEFT:
++			case keyCode.UP:
++				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
++				break;
++			case keyCode.SPACE:
++			case keyCode.ENTER:
++				this._eventHandler( event );
++				break;
++			case keyCode.HOME:
++				toFocus = this.headers[ 0 ];
++				break;
++			case keyCode.END:
++				toFocus = this.headers[ length - 1 ];
++				break;
++		}
++
++		if ( toFocus ) {
++			$( event.target ).attr( "tabIndex", -1 );
++			$( toFocus ).attr( "tabIndex", 0 );
++			toFocus.focus();
++			event.preventDefault();
++		}
++	},
++
++	_panelKeyDown : function( event ) {
++		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
++			$( event.currentTarget ).prev().focus();
++		}
++	},
++
++	refresh: function() {
++		var options = this.options;
++		this._processPanels();
++
++		// was collapsed or no panel
++		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
++			options.active = false;
++			this.active = $();
++		// active false only when collapsible is true
++		} else if ( options.active === false ) {
++			this._activate( 0 );
++		// was active, but active panel is gone
++		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining panel are disabled
++			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous panel
++			} else {
++				this._activate( Math.max( 0, options.active - 1 ) );
++			}
++		// was active, active panel still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.headers.index( this.active );
++		}
++
++		this._destroyIcons();
++
++		this._refresh();
++	},
++
++	_processPanels: function() {
++		this.headers = this.element.find( this.options.header )
++			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
++
++		this.headers.next()
++			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
++			.filter(":not(.ui-accordion-content-active)")
++			.hide();
++	},
++
++	_refresh: function() {
++		var maxHeight,
++			options = this.options,
++			heightStyle = options.heightStyle,
++			parent = this.element.parent(),
++			accordionId = this.accordionId = "ui-accordion-" +
++				(this.element.attr( "id" ) || ++uid);
++
++		this.active = this._findActive( options.active )
++			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
++			.removeClass( "ui-corner-all" );
++		this.active.next()
++			.addClass( "ui-accordion-content-active" )
++			.show();
++
++		this.headers
++			.attr( "role", "tab" )
++			.each(function( i ) {
++				var header = $( this ),
++					headerId = header.attr( "id" ),
++					panel = header.next(),
++					panelId = panel.attr( "id" );
++				if ( !headerId ) {
++					headerId = accordionId + "-header-" + i;
++					header.attr( "id", headerId );
++				}
++				if ( !panelId ) {
++					panelId = accordionId + "-panel-" + i;
++					panel.attr( "id", panelId );
++				}
++				header.attr( "aria-controls", panelId );
++				panel.attr( "aria-labelledby", headerId );
++			})
++			.next()
++				.attr( "role", "tabpanel" );
++
++		this.headers
++			.not( this.active )
++			.attr({
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.next()
++				.attr({
++					"aria-expanded": "false",
++					"aria-hidden": "true"
++				})
++				.hide();
++
++		// make sure at least one header is in the tab order
++		if ( !this.active.length ) {
++			this.headers.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active.attr({
++				"aria-selected": "true",
++				tabIndex: 0
++			})
++			.next()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++
++		this._createIcons();
++
++		this._setupEvents( options.event );
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.headers.each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.headers.next()
++				.each(function() {
++					$( this ).height( Math.max( 0, maxHeight -
++						$( this ).innerHeight() + $( this ).height() ) );
++				})
++				.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.headers.next()
++				.each(function() {
++					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
++				})
++				.height( maxHeight );
++		}
++	},
++
++	_activate: function( index ) {
++		var active = this._findActive( index )[ 0 ];
++
++		// trying to activate the already active panel
++		if ( active === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the currently active header
++		active = active || this.active[ 0 ];
++
++		this._eventHandler({
++			target: active,
++			currentTarget: active,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( selector ) {
++		return typeof selector === "number" ? this.headers.eq( selector ) : $();
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			keydown: "_keydown"
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.headers.add( this.headers.next() ) );
++		this._on( this.headers, events );
++		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
++		this._hoverable( this.headers );
++		this._focusable( this.headers );
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			clicked = $( event.currentTarget ),
++			clickedIsActive = clicked[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : clicked.next(),
++			toHide = active.next(),
++			eventData = {
++				oldHeader: active,
++				oldPanel: toHide,
++				newHeader: collapsing ? $() : clicked,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if (
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.headers.index( clicked );
++
++		// when the call to ._toggle() comes after the class changes
++		// it causes a very odd bug in IE 8 (see #6720)
++		this.active = clickedIsActive ? $() : clicked;
++		this._toggle( eventData );
++
++		// switch classes
++		// corner classes on the previously active header stay after the animation
++		active.removeClass( "ui-accordion-header-active ui-state-active" );
++		if ( options.icons ) {
++			active.children( ".ui-accordion-header-icon" )
++				.removeClass( options.icons.activeHeader )
++				.addClass( options.icons.header );
++		}
++
++		if ( !clickedIsActive ) {
++			clicked
++				.removeClass( "ui-corner-all" )
++				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
++			if ( options.icons ) {
++				clicked.children( ".ui-accordion-header-icon" )
++					.removeClass( options.icons.header )
++					.addClass( options.icons.activeHeader );
++			}
++
++			clicked
++				.next()
++				.addClass( "ui-accordion-content-active" );
++		}
++	},
++
++	_toggle: function( data ) {
++		var toShow = data.newPanel,
++			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
++
++		// handle activating a panel during the animation for another activation
++		this.prevShow.add( this.prevHide ).stop( true, true );
++		this.prevShow = toShow;
++		this.prevHide = toHide;
++
++		if ( this.options.animate ) {
++			this._animate( toShow, toHide, data );
++		} else {
++			toHide.hide();
++			toShow.show();
++			this._toggleComplete( data );
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		toHide.prev().attr( "aria-selected", "false" );
++		// if we're switching panels, remove the old header from the tab order
++		// if we're opening from collapsed state, remove the previous header from the tab order
++		// if we're collapsing, then keep the collapsing header in the tab order
++		if ( toShow.length && toHide.length ) {
++			toHide.prev().attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.headers.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow
++			.attr({
++				"aria-expanded": "true",
++				"aria-hidden": "false"
++			})
++			.prev()
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++	},
++
++	_animate: function( toShow, toHide, data ) {
++		var total, easing, duration,
++			that = this,
++			adjust = 0,
++			down = toShow.length &&
++				( !toHide.length || ( toShow.index() < toHide.index() ) ),
++			animate = this.options.animate || {},
++			options = down && animate.down || animate,
++			complete = function() {
++				that._toggleComplete( data );
++			};
++
++		if ( typeof options === "number" ) {
++			duration = options;
++		}
++		if ( typeof options === "string" ) {
++			easing = options;
++		}
++		// fall back from options to animation in case of partial down settings
++		easing = easing || options.easing || animate.easing;
++		duration = duration || options.duration || animate.duration;
++
++		if ( !toHide.length ) {
++			return toShow.animate( showProps, duration, easing, complete );
++		}
++		if ( !toShow.length ) {
++			return toHide.animate( hideProps, duration, easing, complete );
++		}
++
++		total = toShow.show().outerHeight();
++		toHide.animate( hideProps, {
++			duration: duration,
++			easing: easing,
++			step: function( now, fx ) {
++				fx.now = Math.round( now );
++			}
++		});
++		toShow
++			.hide()
++			.animate( showProps, {
++				duration: duration,
++				easing: easing,
++				complete: complete,
++				step: function( now, fx ) {
++					fx.now = Math.round( now );
++					if ( fx.prop !== "height" ) {
++						adjust += fx.now;
++					} else if ( that.options.heightStyle !== "content" ) {
++						fx.now = Math.round( total - toHide.outerHeight() - adjust );
++						adjust = 0;
++					}
++				}
++			});
++	},
++
++	_toggleComplete: function( data ) {
++		var toHide = data.oldPanel;
++
++		toHide
++			.removeClass( "ui-accordion-content-active" )
++			.prev()
++				.removeClass( "ui-corner-top" )
++				.addClass( "ui-corner-all" );
++
++		// Work around for rendering bug in IE (#5421)
++		if ( toHide.length ) {
++			toHide.parent()[0].className = toHide.parent()[0].className;
++		}
++
++		this._trigger( "activate", null, data );
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.position.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.position.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.position.js	(revision 15487)
+@@ -0,0 +1,497 @@
++/*!
++ * jQuery UI Position 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/position/
++ */
++(function( $, undefined ) {
++
++$.ui = $.ui || {};
++
++var cachedScrollbarWidth,
++	max = Math.max,
++	abs = Math.abs,
++	round = Math.round,
++	rhorizontal = /left|center|right/,
++	rvertical = /top|center|bottom/,
++	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
++	rposition = /^\w+/,
++	rpercent = /%$/,
++	_position = $.fn.position;
++
++function getOffsets( offsets, width, height ) {
++	return [
++		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
++		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
++	];
++}
++
++function parseCss( element, property ) {
++	return parseInt( $.css( element, property ), 10 ) || 0;
++}
++
++function getDimensions( elem ) {
++	var raw = elem[0];
++	if ( raw.nodeType === 9 ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: 0, left: 0 }
++		};
++	}
++	if ( $.isWindow( raw ) ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
++		};
++	}
++	if ( raw.preventDefault ) {
++		return {
++			width: 0,
++			height: 0,
++			offset: { top: raw.pageY, left: raw.pageX }
++		};
++	}
++	return {
++		width: elem.outerWidth(),
++		height: elem.outerHeight(),
++		offset: elem.offset()
++	};
++}
++
++$.position = {
++	scrollbarWidth: function() {
++		if ( cachedScrollbarWidth !== undefined ) {
++			return cachedScrollbarWidth;
++		}
++		var w1, w2,
++			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
++			innerDiv = div.children()[0];
++
++		$( "body" ).append( div );
++		w1 = innerDiv.offsetWidth;
++		div.css( "overflow", "scroll" );
++
++		w2 = innerDiv.offsetWidth;
++
++		if ( w1 === w2 ) {
++			w2 = div[0].clientWidth;
++		}
++
++		div.remove();
++
++		return (cachedScrollbarWidth = w1 - w2);
++	},
++	getScrollInfo: function( within ) {
++		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
++			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
++			hasOverflowX = overflowX === "scroll" ||
++				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
++			hasOverflowY = overflowY === "scroll" ||
++				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
++		return {
++			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
++			height: hasOverflowX ? $.position.scrollbarWidth() : 0
++		};
++	},
++	getWithinInfo: function( element ) {
++		var withinElement = $( element || window ),
++			isWindow = $.isWindow( withinElement[0] );
++		return {
++			element: withinElement,
++			isWindow: isWindow,
++			offset: withinElement.offset() || { left: 0, top: 0 },
++			scrollLeft: withinElement.scrollLeft(),
++			scrollTop: withinElement.scrollTop(),
++			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
++			height: isWindow ? withinElement.height() : withinElement.outerHeight()
++		};
++	}
++};
++
++$.fn.position = function( options ) {
++	if ( !options || !options.of ) {
++		return _position.apply( this, arguments );
++	}
++
++	// make a copy, we don't want to modify arguments
++	options = $.extend( {}, options );
++
++	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
++		target = $( options.of ),
++		within = $.position.getWithinInfo( options.within ),
++		scrollInfo = $.position.getScrollInfo( within ),
++		collision = ( options.collision || "flip" ).split( " " ),
++		offsets = {};
++
++	dimensions = getDimensions( target );
++	if ( target[0].preventDefault ) {
++		// force left top to allow flipping
++		options.at = "left top";
++	}
++	targetWidth = dimensions.width;
++	targetHeight = dimensions.height;
++	targetOffset = dimensions.offset;
++	// clone to reuse original targetOffset later
++	basePosition = $.extend( {}, targetOffset );
++
++	// force my and at to have valid horizontal and vertical positions
++	// if a value is missing or invalid, it will be converted to center
++	$.each( [ "my", "at" ], function() {
++		var pos = ( options[ this ] || "" ).split( " " ),
++			horizontalOffset,
++			verticalOffset;
++
++		if ( pos.length === 1) {
++			pos = rhorizontal.test( pos[ 0 ] ) ?
++				pos.concat( [ "center" ] ) :
++				rvertical.test( pos[ 0 ] ) ?
++					[ "center" ].concat( pos ) :
++					[ "center", "center" ];
++		}
++		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
++		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
++
++		// calculate offsets
++		horizontalOffset = roffset.exec( pos[ 0 ] );
++		verticalOffset = roffset.exec( pos[ 1 ] );
++		offsets[ this ] = [
++			horizontalOffset ? horizontalOffset[ 0 ] : 0,
++			verticalOffset ? verticalOffset[ 0 ] : 0
++		];
++
++		// reduce to just the positions without the offsets
++		options[ this ] = [
++			rposition.exec( pos[ 0 ] )[ 0 ],
++			rposition.exec( pos[ 1 ] )[ 0 ]
++		];
++	});
++
++	// normalize collision option
++	if ( collision.length === 1 ) {
++		collision[ 1 ] = collision[ 0 ];
++	}
++
++	if ( options.at[ 0 ] === "right" ) {
++		basePosition.left += targetWidth;
++	} else if ( options.at[ 0 ] === "center" ) {
++		basePosition.left += targetWidth / 2;
++	}
++
++	if ( options.at[ 1 ] === "bottom" ) {
++		basePosition.top += targetHeight;
++	} else if ( options.at[ 1 ] === "center" ) {
++		basePosition.top += targetHeight / 2;
++	}
++
++	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
++	basePosition.left += atOffset[ 0 ];
++	basePosition.top += atOffset[ 1 ];
++
++	return this.each(function() {
++		var collisionPosition, using,
++			elem = $( this ),
++			elemWidth = elem.outerWidth(),
++			elemHeight = elem.outerHeight(),
++			marginLeft = parseCss( this, "marginLeft" ),
++			marginTop = parseCss( this, "marginTop" ),
++			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
++			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
++			position = $.extend( {}, basePosition ),
++			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
++
++		if ( options.my[ 0 ] === "right" ) {
++			position.left -= elemWidth;
++		} else if ( options.my[ 0 ] === "center" ) {
++			position.left -= elemWidth / 2;
++		}
++
++		if ( options.my[ 1 ] === "bottom" ) {
++			position.top -= elemHeight;
++		} else if ( options.my[ 1 ] === "center" ) {
++			position.top -= elemHeight / 2;
++		}
++
++		position.left += myOffset[ 0 ];
++		position.top += myOffset[ 1 ];
++
++		// if the browser doesn't support fractions, then round for consistent results
++		if ( !$.support.offsetFractions ) {
++			position.left = round( position.left );
++			position.top = round( position.top );
++		}
++
++		collisionPosition = {
++			marginLeft: marginLeft,
++			marginTop: marginTop
++		};
++
++		$.each( [ "left", "top" ], function( i, dir ) {
++			if ( $.ui.position[ collision[ i ] ] ) {
++				$.ui.position[ collision[ i ] ][ dir ]( position, {
++					targetWidth: targetWidth,
++					targetHeight: targetHeight,
++					elemWidth: elemWidth,
++					elemHeight: elemHeight,
++					collisionPosition: collisionPosition,
++					collisionWidth: collisionWidth,
++					collisionHeight: collisionHeight,
++					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
++					my: options.my,
++					at: options.at,
++					within: within,
++					elem : elem
++				});
++			}
++		});
++
++		if ( options.using ) {
++			// adds feedback as second argument to using callback, if present
++			using = function( props ) {
++				var left = targetOffset.left - position.left,
++					right = left + targetWidth - elemWidth,
++					top = targetOffset.top - position.top,
++					bottom = top + targetHeight - elemHeight,
++					feedback = {
++						target: {
++							element: target,
++							left: targetOffset.left,
++							top: targetOffset.top,
++							width: targetWidth,
++							height: targetHeight
++						},
++						element: {
++							element: elem,
++							left: position.left,
++							top: position.top,
++							width: elemWidth,
++							height: elemHeight
++						},
++						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
++						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
++					};
++				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
++					feedback.horizontal = "center";
++				}
++				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
++					feedback.vertical = "middle";
++				}
++				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
++					feedback.important = "horizontal";
++				} else {
++					feedback.important = "vertical";
++				}
++				options.using.call( this, props, feedback );
++			};
++		}
++
++		elem.offset( $.extend( position, { using: using } ) );
++	});
++};
++
++$.ui.position = {
++	fit: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
++				outerWidth = within.width,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = withinOffset - collisionPosLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
++				newOverRight;
++
++			// element is wider than within
++			if ( data.collisionWidth > outerWidth ) {
++				// element is initially over the left side of within
++				if ( overLeft > 0 && overRight <= 0 ) {
++					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
++					position.left += overLeft - newOverRight;
++				// element is initially over right side of within
++				} else if ( overRight > 0 && overLeft <= 0 ) {
++					position.left = withinOffset;
++				// element is initially over both left and right sides of within
++				} else {
++					if ( overLeft > overRight ) {
++						position.left = withinOffset + outerWidth - data.collisionWidth;
++					} else {
++						position.left = withinOffset;
++					}
++				}
++			// too far left -> align with left edge
++			} else if ( overLeft > 0 ) {
++				position.left += overLeft;
++			// too far right -> align with right edge
++			} else if ( overRight > 0 ) {
++				position.left -= overRight;
++			// adjust based on position and margin
++			} else {
++				position.left = max( position.left - collisionPosLeft, position.left );
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
++				outerHeight = data.within.height,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = withinOffset - collisionPosTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
++				newOverBottom;
++
++			// element is taller than within
++			if ( data.collisionHeight > outerHeight ) {
++				// element is initially over the top of within
++				if ( overTop > 0 && overBottom <= 0 ) {
++					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
++					position.top += overTop - newOverBottom;
++				// element is initially over bottom of within
++				} else if ( overBottom > 0 && overTop <= 0 ) {
++					position.top = withinOffset;
++				// element is initially over both top and bottom of within
++				} else {
++					if ( overTop > overBottom ) {
++						position.top = withinOffset + outerHeight - data.collisionHeight;
++					} else {
++						position.top = withinOffset;
++					}
++				}
++			// too far up -> align with top
++			} else if ( overTop > 0 ) {
++				position.top += overTop;
++			// too far down -> align with bottom edge
++			} else if ( overBottom > 0 ) {
++				position.top -= overBottom;
++			// adjust based on position and margin
++			} else {
++				position.top = max( position.top - collisionPosTop, position.top );
++			}
++		}
++	},
++	flip: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.left + within.scrollLeft,
++				outerWidth = within.width,
++				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = collisionPosLeft - offsetLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
++				myOffset = data.my[ 0 ] === "left" ?
++					-data.elemWidth :
++					data.my[ 0 ] === "right" ?
++						data.elemWidth :
++						0,
++				atOffset = data.at[ 0 ] === "left" ?
++					data.targetWidth :
++					data.at[ 0 ] === "right" ?
++						-data.targetWidth :
++						0,
++				offset = -2 * data.offset[ 0 ],
++				newOverRight,
++				newOverLeft;
++
++			if ( overLeft < 0 ) {
++				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
++				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overRight > 0 ) {
++				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
++				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.top + within.scrollTop,
++				outerHeight = within.height,
++				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = collisionPosTop - offsetTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
++				top = data.my[ 1 ] === "top",
++				myOffset = top ?
++					-data.elemHeight :
++					data.my[ 1 ] === "bottom" ?
++						data.elemHeight :
++						0,
++				atOffset = data.at[ 1 ] === "top" ?
++					data.targetHeight :
++					data.at[ 1 ] === "bottom" ?
++						-data.targetHeight :
++						0,
++				offset = -2 * data.offset[ 1 ],
++				newOverTop,
++				newOverBottom;
++			if ( overTop < 0 ) {
++				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
++				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overBottom > 0 ) {
++				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
++				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++		}
++	},
++	flipfit: {
++		left: function() {
++			$.ui.position.flip.left.apply( this, arguments );
++			$.ui.position.fit.left.apply( this, arguments );
++		},
++		top: function() {
++			$.ui.position.flip.top.apply( this, arguments );
++			$.ui.position.fit.top.apply( this, arguments );
++		}
++	}
++};
++
++// fraction support test
++(function () {
++	var testElement, testElementParent, testElementStyle, offsetLeft, i,
++		body = document.getElementsByTagName( "body" )[ 0 ],
++		div = document.createElement( "div" );
++
++	//Create a "fake body" for testing based on method used in jQuery.support
++	testElement = document.createElement( body ? "div" : "body" );
++	testElementStyle = {
++		visibility: "hidden",
++		width: 0,
++		height: 0,
++		border: 0,
++		margin: 0,
++		background: "none"
++	};
++	if ( body ) {
++		$.extend( testElementStyle, {
++			position: "absolute",
++			left: "-1000px",
++			top: "-1000px"
++		});
++	}
++	for ( i in testElementStyle ) {
++		testElement.style[ i ] = testElementStyle[ i ];
++	}
++	testElement.appendChild( div );
++	testElementParent = body || document.documentElement;
++	testElementParent.insertBefore( testElement, testElementParent.firstChild );
++
++	div.style.cssText = "position: absolute; left: 10.7432222px;";
++
++	offsetLeft = $( div ).offset().left;
++	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
++
++	testElement.innerHTML = "";
++	testElementParent.removeChild( testElement );
++})();
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery-ui.custom.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery-ui.custom.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery-ui.custom.js	(revision 15487)
+@@ -0,0 +1,14971 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++(function( $, undefined ) {
++
++var uuid = 0,
++	runiqueId = /^ui-id-\d+$/;
++
++// $.ui might exist from components with no dependencies, e.g., $.ui.position
++$.ui = $.ui || {};
++
++$.extend( $.ui, {
++	version: "1.10.3",
++
++	keyCode: {
++		BACKSPACE: 8,
++		COMMA: 188,
++		DELETE: 46,
++		DOWN: 40,
++		END: 35,
++		ENTER: 13,
++		ESCAPE: 27,
++		HOME: 36,
++		LEFT: 37,
++		NUMPAD_ADD: 107,
++		NUMPAD_DECIMAL: 110,
++		NUMPAD_DIVIDE: 111,
++		NUMPAD_ENTER: 108,
++		NUMPAD_MULTIPLY: 106,
++		NUMPAD_SUBTRACT: 109,
++		PAGE_DOWN: 34,
++		PAGE_UP: 33,
++		PERIOD: 190,
++		RIGHT: 39,
++		SPACE: 32,
++		TAB: 9,
++		UP: 38
++	}
++});
++
++// plugins
++$.fn.extend({
++	focus: (function( orig ) {
++		return function( delay, fn ) {
++			return typeof delay === "number" ?
++				this.each(function() {
++					var elem = this;
++					setTimeout(function() {
++						$( elem ).focus();
++						if ( fn ) {
++							fn.call( elem );
++						}
++					}, delay );
++				}) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.focus ),
++
++	scrollParent: function() {
++		var scrollParent;
++		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
++			scrollParent = this.parents().filter(function() {
++				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		} else {
++			scrollParent = this.parents().filter(function() {
++				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		}
++
++		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
++	},
++
++	zIndex: function( zIndex ) {
++		if ( zIndex !== undefined ) {
++			return this.css( "zIndex", zIndex );
++		}
++
++		if ( this.length ) {
++			var elem = $( this[ 0 ] ), position, value;
++			while ( elem.length && elem[ 0 ] !== document ) {
++				// Ignore z-index if position is set to a value where z-index is ignored by the browser
++				// This makes behavior of this function consistent across browsers
++				// WebKit always returns auto if the element is positioned
++				position = elem.css( "position" );
++				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
++					// IE returns 0 when zIndex is not specified
++					// other browsers return a string
++					// we ignore the case of nested elements with an explicit value of 0
++					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
++					value = parseInt( elem.css( "zIndex" ), 10 );
++					if ( !isNaN( value ) && value !== 0 ) {
++						return value;
++					}
++				}
++				elem = elem.parent();
++			}
++		}
++
++		return 0;
++	},
++
++	uniqueId: function() {
++		return this.each(function() {
++			if ( !this.id ) {
++				this.id = "ui-id-" + (++uuid);
++			}
++		});
++	},
++
++	removeUniqueId: function() {
++		return this.each(function() {
++			if ( runiqueId.test( this.id ) ) {
++				$( this ).removeAttr( "id" );
++			}
++		});
++	}
++});
++
++// selectors
++function focusable( element, isTabIndexNotNaN ) {
++	var map, mapName, img,
++		nodeName = element.nodeName.toLowerCase();
++	if ( "area" === nodeName ) {
++		map = element.parentNode;
++		mapName = map.name;
++		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
++			return false;
++		}
++		img = $( "img[usemap=#" + mapName + "]" )[0];
++		return !!img && visible( img );
++	}
++	return ( /input|select|textarea|button|object/.test( nodeName ) ?
++		!element.disabled :
++		"a" === nodeName ?
++			element.href || isTabIndexNotNaN :
++			isTabIndexNotNaN) &&
++		// the element and all of its ancestors must be visible
++		visible( element );
++}
++
++function visible( element ) {
++	return $.expr.filters.visible( element ) &&
++		!$( element ).parents().addBack().filter(function() {
++			return $.css( this, "visibility" ) === "hidden";
++		}).length;
++}
++
++$.extend( $.expr[ ":" ], {
++	data: $.expr.createPseudo ?
++		$.expr.createPseudo(function( dataName ) {
++			return function( elem ) {
++				return !!$.data( elem, dataName );
++			};
++		}) :
++		// support: jQuery <1.8
++		function( elem, i, match ) {
++			return !!$.data( elem, match[ 3 ] );
++		},
++
++	focusable: function( element ) {
++		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
++	},
++
++	tabbable: function( element ) {
++		var tabIndex = $.attr( element, "tabindex" ),
++			isTabIndexNaN = isNaN( tabIndex );
++		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
++	}
++});
++
++// support: jQuery <1.8
++if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
++	$.each( [ "Width", "Height" ], function( i, name ) {
++		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
++			type = name.toLowerCase(),
++			orig = {
++				innerWidth: $.fn.innerWidth,
++				innerHeight: $.fn.innerHeight,
++				outerWidth: $.fn.outerWidth,
++				outerHeight: $.fn.outerHeight
++			};
++
++		function reduce( elem, size, border, margin ) {
++			$.each( side, function() {
++				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
++				if ( border ) {
++					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
++				}
++				if ( margin ) {
++					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
++				}
++			});
++			return size;
++		}
++
++		$.fn[ "inner" + name ] = function( size ) {
++			if ( size === undefined ) {
++				return orig[ "inner" + name ].call( this );
++			}
++
++			return this.each(function() {
++				$( this ).css( type, reduce( this, size ) + "px" );
++			});
++		};
++
++		$.fn[ "outer" + name] = function( size, margin ) {
++			if ( typeof size !== "number" ) {
++				return orig[ "outer" + name ].call( this, size );
++			}
++
++			return this.each(function() {
++				$( this).css( type, reduce( this, size, true, margin ) + "px" );
++			});
++		};
++	});
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
++if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
++	$.fn.removeData = (function( removeData ) {
++		return function( key ) {
++			if ( arguments.length ) {
++				return removeData.call( this, $.camelCase( key ) );
++			} else {
++				return removeData.call( this );
++			}
++		};
++	})( $.fn.removeData );
++}
++
++
++
++
++
++// deprecated
++$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
++
++$.support.selectstart = "onselectstart" in document.createElement( "div" );
++$.fn.extend({
++	disableSelection: function() {
++		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
++			".ui-disableSelection", function( event ) {
++				event.preventDefault();
++			});
++	},
++
++	enableSelection: function() {
++		return this.unbind( ".ui-disableSelection" );
++	}
++});
++
++$.extend( $.ui, {
++	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
++	plugin: {
++		add: function( module, option, set ) {
++			var i,
++				proto = $.ui[ module ].prototype;
++			for ( i in set ) {
++				proto.plugins[ i ] = proto.plugins[ i ] || [];
++				proto.plugins[ i ].push( [ option, set[ i ] ] );
++			}
++		},
++		call: function( instance, name, args ) {
++			var i,
++				set = instance.plugins[ name ];
++			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
++				return;
++			}
++
++			for ( i = 0; i < set.length; i++ ) {
++				if ( instance.options[ set[ i ][ 0 ] ] ) {
++					set[ i ][ 1 ].apply( instance.element, args );
++				}
++			}
++		}
++	},
++
++	// only used by resizable
++	hasScroll: function( el, a ) {
++
++		//If overflow is hidden, the element might have extra content, but the user wants to hide it
++		if ( $( el ).css( "overflow" ) === "hidden") {
++			return false;
++		}
++
++		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
++			has = false;
++
++		if ( el[ scroll ] > 0 ) {
++			return true;
++		}
++
++		// TODO: determine which cases actually cause this to happen
++		// if the element doesn't have the scroll set, see if it's possible to
++		// set the scroll
++		el[ scroll ] = 1;
++		has = ( el[ scroll ] > 0 );
++		el[ scroll ] = 0;
++		return has;
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++var uuid = 0,
++	slice = Array.prototype.slice,
++	_cleanData = $.cleanData;
++$.cleanData = function( elems ) {
++	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++		try {
++			$( elem ).triggerHandler( "remove" );
++		// http://bugs.jquery.com/ticket/8235
++		} catch( e ) {}
++	}
++	_cleanData( elems );
++};
++
++$.widget = function( name, base, prototype ) {
++	var fullName, existingConstructor, constructor, basePrototype,
++		// proxiedPrototype allows the provided prototype to remain unmodified
++		// so that it can be used as a mixin for multiple widgets (#8876)
++		proxiedPrototype = {},
++		namespace = name.split( "." )[ 0 ];
++
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
++		return !!$.data( elem, fullName );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	existingConstructor = $[ namespace ][ name ];
++	constructor = $[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without "new" keyword
++		if ( !this._createWidget ) {
++			return new constructor( options, element );
++		}
++
++		// allow instantiation without initializing for simple inheritance
++		// must use "new" keyword (the code above always passes args)
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++	// extend with the existing constructor to carry over any static properties
++	$.extend( constructor, existingConstructor, {
++		version: prototype.version,
++		// copy the object used to create the prototype in case we need to
++		// redefine the widget later
++		_proto: $.extend( {}, prototype ),
++		// track widgets that inherit from this widget in case this widget is
++		// redefined after a widget inherits from it
++		_childConstructors: []
++	});
++
++	basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++	basePrototype.options = $.widget.extend( {}, basePrototype.options );
++	$.each( prototype, function( prop, value ) {
++		if ( !$.isFunction( value ) ) {
++			proxiedPrototype[ prop ] = value;
++			return;
++		}
++		proxiedPrototype[ prop ] = (function() {
++			var _super = function() {
++					return base.prototype[ prop ].apply( this, arguments );
++				},
++				_superApply = function( args ) {
++					return base.prototype[ prop ].apply( this, args );
++				};
++			return function() {
++				var __super = this._super,
++					__superApply = this._superApply,
++					returnValue;
++
++				this._super = _super;
++				this._superApply = _superApply;
++
++				returnValue = value.apply( this, arguments );
++
++				this._super = __super;
++				this._superApply = __superApply;
++
++				return returnValue;
++			};
++		})();
++	});
++	constructor.prototype = $.widget.extend( basePrototype, {
++		// TODO: remove support for widgetEventPrefix
++		// always use the name + a colon as the prefix, e.g., draggable:start
++		// don't prefix for widgets that aren't DOM-based
++		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
++	}, proxiedPrototype, {
++		constructor: constructor,
++		namespace: namespace,
++		widgetName: name,
++		widgetFullName: fullName
++	});
++
++	// If this widget is being redefined then we need to find all widgets that
++	// are inheriting from it and redefine all of them so that they inherit from
++	// the new version of this widget. We're essentially trying to replace one
++	// level in the prototype chain.
++	if ( existingConstructor ) {
++		$.each( existingConstructor._childConstructors, function( i, child ) {
++			var childPrototype = child.prototype;
++
++			// redefine the child widget using the same prototype that was
++			// originally used, but inherit from the new version of the base
++			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
++		});
++		// remove the list of existing child constructors from the old constructor
++		// so the old child constructors can be garbage collected
++		delete existingConstructor._childConstructors;
++	} else {
++		base._childConstructors.push( constructor );
++	}
++
++	$.widget.bridge( name, constructor );
++};
++
++$.widget.extend = function( target ) {
++	var input = slice.call( arguments, 1 ),
++		inputIndex = 0,
++		inputLength = input.length,
++		key,
++		value;
++	for ( ; inputIndex < inputLength; inputIndex++ ) {
++		for ( key in input[ inputIndex ] ) {
++			value = input[ inputIndex ][ key ];
++			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
++				// Clone objects
++				if ( $.isPlainObject( value ) ) {
++					target[ key ] = $.isPlainObject( target[ key ] ) ?
++						$.widget.extend( {}, target[ key ], value ) :
++						// Don't extend strings, arrays, etc. with objects
++						$.widget.extend( {}, value );
++				// Copy everything else by reference
++				} else {
++					target[ key ] = value;
++				}
++			}
++		}
++	}
++	return target;
++};
++
++$.widget.bridge = function( name, object ) {
++	var fullName = object.prototype.widgetFullName || name;
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.widget.extend.apply( null, [ options ].concat(args) ) :
++			options;
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var methodValue,
++					instance = $.data( this, fullName );
++				if ( !instance ) {
++					return $.error( "cannot call methods on " + name + " prior to initialization; " +
++						"attempted to call method '" + options + "'" );
++				}
++				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
++					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
++				}
++				methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue && methodValue.jquery ?
++						returnValue.pushStack( methodValue.get() ) :
++						methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, fullName );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					$.data( this, fullName, new object( options, this ) );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( /* options, element */ ) {};
++$.Widget._childConstructors = [];
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	defaultElement: "<div>",
++	options: {
++		disabled: false,
++
++		// callbacks
++		create: null
++	},
++	_createWidget: function( options, element ) {
++		element = $( element || this.defaultElement || this )[ 0 ];
++		this.element = $( element );
++		this.uuid = uuid++;
++		this.eventNamespace = "." + this.widgetName + this.uuid;
++		this.options = $.widget.extend( {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		this.bindings = $();
++		this.hoverable = $();
++		this.focusable = $();
++
++		if ( element !== this ) {
++			$.data( element, this.widgetFullName, this );
++			this._on( true, this.element, {
++				remove: function( event ) {
++					if ( event.target === element ) {
++						this.destroy();
++					}
++				}
++			});
++			this.document = $( element.style ?
++				// element within the document
++				element.ownerDocument :
++				// element is window or document
++				element.document || element );
++			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
++		}
++
++		this._create();
++		this._trigger( "create", null, this._getCreateEventData() );
++		this._init();
++	},
++	_getCreateOptions: $.noop,
++	_getCreateEventData: $.noop,
++	_create: $.noop,
++	_init: $.noop,
++
++	destroy: function() {
++		this._destroy();
++		// we can probably remove the unbind calls in 2.0
++		// all event bindings should go through this._on()
++		this.element
++			.unbind( this.eventNamespace )
++			// 1.9 BC for #7810
++			// TODO remove dual storage
++			.removeData( this.widgetName )
++			.removeData( this.widgetFullName )
++			// support: jquery <1.6.3
++			// http://bugs.jquery.com/ticket/9413
++			.removeData( $.camelCase( this.widgetFullName ) );
++		this.widget()
++			.unbind( this.eventNamespace )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetFullName + "-disabled " +
++				"ui-state-disabled" );
++
++		// clean up events and states
++		this.bindings.unbind( this.eventNamespace );
++		this.hoverable.removeClass( "ui-state-hover" );
++		this.focusable.removeClass( "ui-state-focus" );
++	},
++	_destroy: $.noop,
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key,
++			parts,
++			curOption,
++			i;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.widget.extend( {}, this.options );
++		}
++
++		if ( typeof key === "string" ) {
++			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
++			options = {};
++			parts = key.split( "." );
++			key = parts.shift();
++			if ( parts.length ) {
++				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
++				for ( i = 0; i < parts.length - 1; i++ ) {
++					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
++					curOption = curOption[ parts[ i ] ];
++				}
++				key = parts.pop();
++				if ( value === undefined ) {
++					return curOption[ key ] === undefined ? null : curOption[ key ];
++				}
++				curOption[ key ] = value;
++			} else {
++				if ( value === undefined ) {
++					return this.options[ key ] === undefined ? null : this.options[ key ];
++				}
++				options[ key ] = value;
++			}
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var key;
++
++		for ( key in options ) {
++			this._setOption( key, options[ key ] );
++		}
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
++				.attr( "aria-disabled", value );
++			this.hoverable.removeClass( "ui-state-hover" );
++			this.focusable.removeClass( "ui-state-focus" );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_on: function( suppressDisabledCheck, element, handlers ) {
++		var delegateElement,
++			instance = this;
++
++		// no suppressDisabledCheck flag, shuffle arguments
++		if ( typeof suppressDisabledCheck !== "boolean" ) {
++			handlers = element;
++			element = suppressDisabledCheck;
++			suppressDisabledCheck = false;
++		}
++
++		// no element argument, shuffle and use this.element
++		if ( !handlers ) {
++			handlers = element;
++			element = this.element;
++			delegateElement = this.widget();
++		} else {
++			// accept selectors, DOM elements
++			element = delegateElement = $( element );
++			this.bindings = this.bindings.add( element );
++		}
++
++		$.each( handlers, function( event, handler ) {
++			function handlerProxy() {
++				// allow widgets to customize the disabled handling
++				// - disabled as an array instead of boolean
++				// - disabled class as method for disabling individual parts
++				if ( !suppressDisabledCheck &&
++						( instance.options.disabled === true ||
++							$( this ).hasClass( "ui-state-disabled" ) ) ) {
++					return;
++				}
++				return ( typeof handler === "string" ? instance[ handler ] : handler )
++					.apply( instance, arguments );
++			}
++
++			// copy the guid so direct unbinding works
++			if ( typeof handler !== "string" ) {
++				handlerProxy.guid = handler.guid =
++					handler.guid || handlerProxy.guid || $.guid++;
++			}
++
++			var match = event.match( /^(\w+)\s*(.*)$/ ),
++				eventName = match[1] + instance.eventNamespace,
++				selector = match[2];
++			if ( selector ) {
++				delegateElement.delegate( selector, eventName, handlerProxy );
++			} else {
++				element.bind( eventName, handlerProxy );
++			}
++		});
++	},
++
++	_off: function( element, eventName ) {
++		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
++		element.unbind( eventName ).undelegate( eventName );
++	},
++
++	_delay: function( handler, delay ) {
++		function handlerProxy() {
++			return ( typeof handler === "string" ? instance[ handler ] : handler )
++				.apply( instance, arguments );
++		}
++		var instance = this;
++		return setTimeout( handlerProxy, delay || 0 );
++	},
++
++	_hoverable: function( element ) {
++		this.hoverable = this.hoverable.add( element );
++		this._on( element, {
++			mouseenter: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-hover" );
++			},
++			mouseleave: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-hover" );
++			}
++		});
++	},
++
++	_focusable: function( element ) {
++		this.focusable = this.focusable.add( element );
++		this._on( element, {
++			focusin: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-focus" );
++			},
++			focusout: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-focus" );
++			}
++		});
++	},
++
++	_trigger: function( type, event, data ) {
++		var prop, orig,
++			callback = this.options[ type ];
++
++		data = data || {};
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		// the original event may come from any element
++		// so we need to reset the target on the new event
++		event.target = this.element[ 0 ];
++
++		// copy original event properties over to the new event
++		orig = event.originalEvent;
++		if ( orig ) {
++			for ( prop in orig ) {
++				if ( !( prop in event ) ) {
++					event[ prop ] = orig[ prop ];
++				}
++			}
++		}
++
++		this.element.trigger( event, data );
++		return !( $.isFunction( callback ) &&
++			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
++	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
++		if ( typeof options === "string" ) {
++			options = { effect: options };
++		}
++		var hasOptions,
++			effectName = !options ?
++				method :
++				options === true || typeof options === "number" ?
++					defaultEffect :
++					options.effect || defaultEffect;
++		options = options || {};
++		if ( typeof options === "number" ) {
++			options = { duration: options };
++		}
++		hasOptions = !$.isEmptyObject( options );
++		options.complete = callback;
++		if ( options.delay ) {
++			element.delay( options.delay );
++		}
++		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
++			element[ method ]( options );
++		} else if ( effectName !== method && element[ effectName ] ) {
++			element[ effectName ]( options.duration, options.easing, callback );
++		} else {
++			element.queue(function( next ) {
++				$( this )[ method ]();
++				if ( callback ) {
++					callback.call( element[ 0 ] );
++				}
++				next();
++			});
++		}
++	};
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++var mouseHandled = false;
++$( document ).mouseup( function() {
++	mouseHandled = false;
++});
++
++$.widget("ui.mouse", {
++	version: "1.10.3",
++	options: {
++		cancel: "input,textarea,button,select,option",
++		distance: 1,
++		delay: 0
++	},
++	_mouseInit: function() {
++		var that = this;
++
++		this.element
++			.bind("mousedown."+this.widgetName, function(event) {
++				return that._mouseDown(event);
++			})
++			.bind("click."+this.widgetName, function(event) {
++				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
++					$.removeData(event.target, that.widgetName + ".preventClickEvent");
++					event.stopImmediatePropagation();
++					return false;
++				}
++			});
++
++		this.started = false;
++	},
++
++	// TODO: make sure destroying one instance of mouse doesn't mess with
++	// other instances of mouse
++	_mouseDestroy: function() {
++		this.element.unbind("."+this.widgetName);
++		if ( this._mouseMoveDelegate ) {
++			$(document)
++				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++		}
++	},
++
++	_mouseDown: function(event) {
++		// don't let more than one widget handle mouseStart
++		if( mouseHandled ) { return; }
++
++		// we may have missed mouseup (out of window)
++		(this._mouseStarted && this._mouseUp(event));
++
++		this._mouseDownEvent = event;
++
++		var that = this,
++			btnIsLeft = (event.which === 1),
++			// event.target.nodeName works around a bug in IE 8 with
++			// disabled inputs (#7620)
++			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
++		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
++			return true;
++		}
++
++		this.mouseDelayMet = !this.options.delay;
++		if (!this.mouseDelayMet) {
++			this._mouseDelayTimer = setTimeout(function() {
++				that.mouseDelayMet = true;
++			}, this.options.delay);
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted = (this._mouseStart(event) !== false);
++			if (!this._mouseStarted) {
++				event.preventDefault();
++				return true;
++			}
++		}
++
++		// Click event may never have fired (Gecko & Opera)
++		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
++			$.removeData(event.target, this.widgetName + ".preventClickEvent");
++		}
++
++		// these delegates are required to keep context
++		this._mouseMoveDelegate = function(event) {
++			return that._mouseMove(event);
++		};
++		this._mouseUpDelegate = function(event) {
++			return that._mouseUp(event);
++		};
++		$(document)
++			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		event.preventDefault();
++
++		mouseHandled = true;
++		return true;
++	},
++
++	_mouseMove: function(event) {
++		// IE mouseup check - mouseup happened when mouse was out of window
++		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
++			return this._mouseUp(event);
++		}
++
++		if (this._mouseStarted) {
++			this._mouseDrag(event);
++			return event.preventDefault();
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted =
++				(this._mouseStart(this._mouseDownEvent, event) !== false);
++			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
++		}
++
++		return !this._mouseStarted;
++	},
++
++	_mouseUp: function(event) {
++		$(document)
++			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		if (this._mouseStarted) {
++			this._mouseStarted = false;
++
++			if (event.target === this._mouseDownEvent.target) {
++				$.data(event.target, this.widgetName + ".preventClickEvent", true);
++			}
++
++			this._mouseStop(event);
++		}
++
++		return false;
++	},
++
++	_mouseDistanceMet: function(event) {
++		return (Math.max(
++				Math.abs(this._mouseDownEvent.pageX - event.pageX),
++				Math.abs(this._mouseDownEvent.pageY - event.pageY)
++			) >= this.options.distance
++		);
++	},
++
++	_mouseDelayMet: function(/* event */) {
++		return this.mouseDelayMet;
++	},
++
++	// These are placeholder methods, to be overriden by extending plugin
++	_mouseStart: function(/* event */) {},
++	_mouseDrag: function(/* event */) {},
++	_mouseStop: function(/* event */) {},
++	_mouseCapture: function(/* event */) { return true; }
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.ui = $.ui || {};
++
++var cachedScrollbarWidth,
++	max = Math.max,
++	abs = Math.abs,
++	round = Math.round,
++	rhorizontal = /left|center|right/,
++	rvertical = /top|center|bottom/,
++	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
++	rposition = /^\w+/,
++	rpercent = /%$/,
++	_position = $.fn.position;
++
++function getOffsets( offsets, width, height ) {
++	return [
++		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
++		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
++	];
++}
++
++function parseCss( element, property ) {
++	return parseInt( $.css( element, property ), 10 ) || 0;
++}
++
++function getDimensions( elem ) {
++	var raw = elem[0];
++	if ( raw.nodeType === 9 ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: 0, left: 0 }
++		};
++	}
++	if ( $.isWindow( raw ) ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
++		};
++	}
++	if ( raw.preventDefault ) {
++		return {
++			width: 0,
++			height: 0,
++			offset: { top: raw.pageY, left: raw.pageX }
++		};
++	}
++	return {
++		width: elem.outerWidth(),
++		height: elem.outerHeight(),
++		offset: elem.offset()
++	};
++}
++
++$.position = {
++	scrollbarWidth: function() {
++		if ( cachedScrollbarWidth !== undefined ) {
++			return cachedScrollbarWidth;
++		}
++		var w1, w2,
++			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
++			innerDiv = div.children()[0];
++
++		$( "body" ).append( div );
++		w1 = innerDiv.offsetWidth;
++		div.css( "overflow", "scroll" );
++
++		w2 = innerDiv.offsetWidth;
++
++		if ( w1 === w2 ) {
++			w2 = div[0].clientWidth;
++		}
++
++		div.remove();
++
++		return (cachedScrollbarWidth = w1 - w2);
++	},
++	getScrollInfo: function( within ) {
++		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
++			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
++			hasOverflowX = overflowX === "scroll" ||
++				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
++			hasOverflowY = overflowY === "scroll" ||
++				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
++		return {
++			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
++			height: hasOverflowX ? $.position.scrollbarWidth() : 0
++		};
++	},
++	getWithinInfo: function( element ) {
++		var withinElement = $( element || window ),
++			isWindow = $.isWindow( withinElement[0] );
++		return {
++			element: withinElement,
++			isWindow: isWindow,
++			offset: withinElement.offset() || { left: 0, top: 0 },
++			scrollLeft: withinElement.scrollLeft(),
++			scrollTop: withinElement.scrollTop(),
++			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
++			height: isWindow ? withinElement.height() : withinElement.outerHeight()
++		};
++	}
++};
++
++$.fn.position = function( options ) {
++	if ( !options || !options.of ) {
++		return _position.apply( this, arguments );
++	}
++
++	// make a copy, we don't want to modify arguments
++	options = $.extend( {}, options );
++
++	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
++		target = $( options.of ),
++		within = $.position.getWithinInfo( options.within ),
++		scrollInfo = $.position.getScrollInfo( within ),
++		collision = ( options.collision || "flip" ).split( " " ),
++		offsets = {};
++
++	dimensions = getDimensions( target );
++	if ( target[0].preventDefault ) {
++		// force left top to allow flipping
++		options.at = "left top";
++	}
++	targetWidth = dimensions.width;
++	targetHeight = dimensions.height;
++	targetOffset = dimensions.offset;
++	// clone to reuse original targetOffset later
++	basePosition = $.extend( {}, targetOffset );
++
++	// force my and at to have valid horizontal and vertical positions
++	// if a value is missing or invalid, it will be converted to center
++	$.each( [ "my", "at" ], function() {
++		var pos = ( options[ this ] || "" ).split( " " ),
++			horizontalOffset,
++			verticalOffset;
++
++		if ( pos.length === 1) {
++			pos = rhorizontal.test( pos[ 0 ] ) ?
++				pos.concat( [ "center" ] ) :
++				rvertical.test( pos[ 0 ] ) ?
++					[ "center" ].concat( pos ) :
++					[ "center", "center" ];
++		}
++		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
++		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
++
++		// calculate offsets
++		horizontalOffset = roffset.exec( pos[ 0 ] );
++		verticalOffset = roffset.exec( pos[ 1 ] );
++		offsets[ this ] = [
++			horizontalOffset ? horizontalOffset[ 0 ] : 0,
++			verticalOffset ? verticalOffset[ 0 ] : 0
++		];
++
++		// reduce to just the positions without the offsets
++		options[ this ] = [
++			rposition.exec( pos[ 0 ] )[ 0 ],
++			rposition.exec( pos[ 1 ] )[ 0 ]
++		];
++	});
++
++	// normalize collision option
++	if ( collision.length === 1 ) {
++		collision[ 1 ] = collision[ 0 ];
++	}
++
++	if ( options.at[ 0 ] === "right" ) {
++		basePosition.left += targetWidth;
++	} else if ( options.at[ 0 ] === "center" ) {
++		basePosition.left += targetWidth / 2;
++	}
++
++	if ( options.at[ 1 ] === "bottom" ) {
++		basePosition.top += targetHeight;
++	} else if ( options.at[ 1 ] === "center" ) {
++		basePosition.top += targetHeight / 2;
++	}
++
++	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
++	basePosition.left += atOffset[ 0 ];
++	basePosition.top += atOffset[ 1 ];
++
++	return this.each(function() {
++		var collisionPosition, using,
++			elem = $( this ),
++			elemWidth = elem.outerWidth(),
++			elemHeight = elem.outerHeight(),
++			marginLeft = parseCss( this, "marginLeft" ),
++			marginTop = parseCss( this, "marginTop" ),
++			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
++			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
++			position = $.extend( {}, basePosition ),
++			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
++
++		if ( options.my[ 0 ] === "right" ) {
++			position.left -= elemWidth;
++		} else if ( options.my[ 0 ] === "center" ) {
++			position.left -= elemWidth / 2;
++		}
++
++		if ( options.my[ 1 ] === "bottom" ) {
++			position.top -= elemHeight;
++		} else if ( options.my[ 1 ] === "center" ) {
++			position.top -= elemHeight / 2;
++		}
++
++		position.left += myOffset[ 0 ];
++		position.top += myOffset[ 1 ];
++
++		// if the browser doesn't support fractions, then round for consistent results
++		if ( !$.support.offsetFractions ) {
++			position.left = round( position.left );
++			position.top = round( position.top );
++		}
++
++		collisionPosition = {
++			marginLeft: marginLeft,
++			marginTop: marginTop
++		};
++
++		$.each( [ "left", "top" ], function( i, dir ) {
++			if ( $.ui.position[ collision[ i ] ] ) {
++				$.ui.position[ collision[ i ] ][ dir ]( position, {
++					targetWidth: targetWidth,
++					targetHeight: targetHeight,
++					elemWidth: elemWidth,
++					elemHeight: elemHeight,
++					collisionPosition: collisionPosition,
++					collisionWidth: collisionWidth,
++					collisionHeight: collisionHeight,
++					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
++					my: options.my,
++					at: options.at,
++					within: within,
++					elem : elem
++				});
++			}
++		});
++
++		if ( options.using ) {
++			// adds feedback as second argument to using callback, if present
++			using = function( props ) {
++				var left = targetOffset.left - position.left,
++					right = left + targetWidth - elemWidth,
++					top = targetOffset.top - position.top,
++					bottom = top + targetHeight - elemHeight,
++					feedback = {
++						target: {
++							element: target,
++							left: targetOffset.left,
++							top: targetOffset.top,
++							width: targetWidth,
++							height: targetHeight
++						},
++						element: {
++							element: elem,
++							left: position.left,
++							top: position.top,
++							width: elemWidth,
++							height: elemHeight
++						},
++						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
++						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
++					};
++				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
++					feedback.horizontal = "center";
++				}
++				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
++					feedback.vertical = "middle";
++				}
++				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
++					feedback.important = "horizontal";
++				} else {
++					feedback.important = "vertical";
++				}
++				options.using.call( this, props, feedback );
++			};
++		}
++
++		elem.offset( $.extend( position, { using: using } ) );
++	});
++};
++
++$.ui.position = {
++	fit: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
++				outerWidth = within.width,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = withinOffset - collisionPosLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
++				newOverRight;
++
++			// element is wider than within
++			if ( data.collisionWidth > outerWidth ) {
++				// element is initially over the left side of within
++				if ( overLeft > 0 && overRight <= 0 ) {
++					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
++					position.left += overLeft - newOverRight;
++				// element is initially over right side of within
++				} else if ( overRight > 0 && overLeft <= 0 ) {
++					position.left = withinOffset;
++				// element is initially over both left and right sides of within
++				} else {
++					if ( overLeft > overRight ) {
++						position.left = withinOffset + outerWidth - data.collisionWidth;
++					} else {
++						position.left = withinOffset;
++					}
++				}
++			// too far left -> align with left edge
++			} else if ( overLeft > 0 ) {
++				position.left += overLeft;
++			// too far right -> align with right edge
++			} else if ( overRight > 0 ) {
++				position.left -= overRight;
++			// adjust based on position and margin
++			} else {
++				position.left = max( position.left - collisionPosLeft, position.left );
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
++				outerHeight = data.within.height,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = withinOffset - collisionPosTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
++				newOverBottom;
++
++			// element is taller than within
++			if ( data.collisionHeight > outerHeight ) {
++				// element is initially over the top of within
++				if ( overTop > 0 && overBottom <= 0 ) {
++					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
++					position.top += overTop - newOverBottom;
++				// element is initially over bottom of within
++				} else if ( overBottom > 0 && overTop <= 0 ) {
++					position.top = withinOffset;
++				// element is initially over both top and bottom of within
++				} else {
++					if ( overTop > overBottom ) {
++						position.top = withinOffset + outerHeight - data.collisionHeight;
++					} else {
++						position.top = withinOffset;
++					}
++				}
++			// too far up -> align with top
++			} else if ( overTop > 0 ) {
++				position.top += overTop;
++			// too far down -> align with bottom edge
++			} else if ( overBottom > 0 ) {
++				position.top -= overBottom;
++			// adjust based on position and margin
++			} else {
++				position.top = max( position.top - collisionPosTop, position.top );
++			}
++		}
++	},
++	flip: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.left + within.scrollLeft,
++				outerWidth = within.width,
++				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = collisionPosLeft - offsetLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
++				myOffset = data.my[ 0 ] === "left" ?
++					-data.elemWidth :
++					data.my[ 0 ] === "right" ?
++						data.elemWidth :
++						0,
++				atOffset = data.at[ 0 ] === "left" ?
++					data.targetWidth :
++					data.at[ 0 ] === "right" ?
++						-data.targetWidth :
++						0,
++				offset = -2 * data.offset[ 0 ],
++				newOverRight,
++				newOverLeft;
++
++			if ( overLeft < 0 ) {
++				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
++				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overRight > 0 ) {
++				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
++				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.top + within.scrollTop,
++				outerHeight = within.height,
++				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = collisionPosTop - offsetTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
++				top = data.my[ 1 ] === "top",
++				myOffset = top ?
++					-data.elemHeight :
++					data.my[ 1 ] === "bottom" ?
++						data.elemHeight :
++						0,
++				atOffset = data.at[ 1 ] === "top" ?
++					data.targetHeight :
++					data.at[ 1 ] === "bottom" ?
++						-data.targetHeight :
++						0,
++				offset = -2 * data.offset[ 1 ],
++				newOverTop,
++				newOverBottom;
++			if ( overTop < 0 ) {
++				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
++				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overBottom > 0 ) {
++				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
++				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++		}
++	},
++	flipfit: {
++		left: function() {
++			$.ui.position.flip.left.apply( this, arguments );
++			$.ui.position.fit.left.apply( this, arguments );
++		},
++		top: function() {
++			$.ui.position.flip.top.apply( this, arguments );
++			$.ui.position.fit.top.apply( this, arguments );
++		}
++	}
++};
++
++// fraction support test
++(function () {
++	var testElement, testElementParent, testElementStyle, offsetLeft, i,
++		body = document.getElementsByTagName( "body" )[ 0 ],
++		div = document.createElement( "div" );
++
++	//Create a "fake body" for testing based on method used in jQuery.support
++	testElement = document.createElement( body ? "div" : "body" );
++	testElementStyle = {
++		visibility: "hidden",
++		width: 0,
++		height: 0,
++		border: 0,
++		margin: 0,
++		background: "none"
++	};
++	if ( body ) {
++		$.extend( testElementStyle, {
++			position: "absolute",
++			left: "-1000px",
++			top: "-1000px"
++		});
++	}
++	for ( i in testElementStyle ) {
++		testElement.style[ i ] = testElementStyle[ i ];
++	}
++	testElement.appendChild( div );
++	testElementParent = body || document.documentElement;
++	testElementParent.insertBefore( testElement, testElementParent.firstChild );
++
++	div.style.cssText = "position: absolute; left: 10.7432222px;";
++
++	offsetLeft = $( div ).offset().left;
++	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
++
++	testElement.innerHTML = "";
++	testElementParent.removeChild( testElement );
++})();
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.widget("ui.draggable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "drag",
++	options: {
++		addClasses: true,
++		appendTo: "parent",
++		axis: false,
++		connectToSortable: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		iframeFix: false,
++		opacity: false,
++		refreshPositions: false,
++		revert: false,
++		revertDuration: 500,
++		scope: "default",
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		snap: false,
++		snapMode: "both",
++		snapTolerance: 20,
++		stack: false,
++		zIndex: false,
++
++		// callbacks
++		drag: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
++			this.element[0].style.position = "relative";
++		}
++		if (this.options.addClasses){
++			this.element.addClass("ui-draggable");
++		}
++		if (this.options.disabled){
++			this.element.addClass("ui-draggable-disabled");
++		}
++
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function(event) {
++
++		var o = this.options;
++
++		// among others, prevent a drag on a resizable-handle
++		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
++			return false;
++		}
++
++		//Quit if we're not on a valid handle
++		this.handle = this._getHandle(event);
++		if (!this.handle) {
++			return false;
++		}
++
++		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
++			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
++			.css({
++				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
++				position: "absolute", opacity: "0.001", zIndex: 1000
++			})
++			.css($(this).offset())
++			.appendTo("body");
++		});
++
++		return true;
++
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options;
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		this.helper.addClass("ui-draggable-dragging");
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		//If ddmanager is used for droppables, set the global draggable
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Store the helper's css position
++		this.cssPosition = this.helper.css( "position" );
++		this.scrollParent = this.helper.scrollParent();
++		this.offsetParent = this.helper.offsetParent();
++		this.offsetParentCssPosition = this.offsetParent.css( "position" );
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.positionAbs = this.element.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		//Reset scroll cache
++		this.offset.scroll = false;
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this.position = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Set a containment if given in the options
++		this._setContainment();
++
++		//Trigger event + callbacks
++		if(this._trigger("start", event) === false) {
++			this._clear();
++			return false;
++		}
++
++		//Recache the helper size
++		this._cacheHelperProportions();
++
++		//Prepare the droppable offsets
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++
++		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
++		if ( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStart(this, event);
++		}
++
++		return true;
++	},
++
++	_mouseDrag: function(event, noPropagation) {
++		// reset any necessary cached properties (see #5009)
++		if ( this.offsetParentCssPosition === "fixed" ) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Call plugins and callbacks and use the resulting position if something is returned
++		if (!noPropagation) {
++			var ui = this._uiHash();
++			if(this._trigger("drag", event, ui) === false) {
++				this._mouseUp({});
++				return false;
++			}
++			this.position = ui.position;
++		}
++
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		//If we are using droppables, inform the manager about the drop
++		var that = this,
++			dropped = false;
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			dropped = $.ui.ddmanager.drop(this, event);
++		}
++
++		//if a drop comes from outside (a sortable)
++		if(this.dropped) {
++			dropped = this.dropped;
++			this.dropped = false;
++		}
++
++		//if the original element is no longer in the DOM don't bother to continue (see #8269)
++		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
++			return false;
++		}
++
++		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
++			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
++				if(that._trigger("stop", event) !== false) {
++					that._clear();
++				}
++			});
++		} else {
++			if(this._trigger("stop", event) !== false) {
++				this._clear();
++			}
++		}
++
++		return false;
++	},
++
++	_mouseUp: function(event) {
++		//Remove frame helpers
++		$("div.ui-draggable-iframeFix").each(function() {
++			this.parentNode.removeChild(this);
++		});
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
++		if( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStop(this, event);
++		}
++
++		return $.ui.mouse.prototype._mouseUp.call(this, event);
++	},
++
++	cancel: function() {
++
++		if(this.helper.is(".ui-draggable-dragging")) {
++			this._mouseUp({});
++		} else {
++			this._clear();
++		}
++
++		return this;
++
++	},
++
++	_getHandle: function(event) {
++		return this.options.handle ?
++			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
++			true;
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
++
++		if(!helper.parents("body").length) {
++			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
++		}
++
++		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
++			helper.css("position", "absolute");
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++		//Get the offsetParent and cache its position
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		//This needs to be actually done for all browsers, since pageX/pageY includes this information
++		//Ugly IE fix
++		if((this.offsetParent[0] === document.body) ||
++			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.element.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.element.css("marginLeft"),10) || 0),
++			top: (parseInt(this.element.css("marginTop"),10) || 0),
++			right: (parseInt(this.element.css("marginRight"),10) || 0),
++			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var over, c, ce,
++			o = this.options;
++
++		if ( !o.containment ) {
++			this.containment = null;
++			return;
++		}
++
++		if ( o.containment === "window" ) {
++			this.containment = [
++				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
++				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
++				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
++				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment === "document") {
++			this.containment = [
++				0,
++				0,
++				$( document ).width() - this.helperProportions.width - this.margins.left,
++				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment.constructor === Array ) {
++			this.containment = o.containment;
++			return;
++		}
++
++		if ( o.containment === "parent" ) {
++			o.containment = this.helper[ 0 ].parentNode;
++		}
++
++		c = $( o.containment );
++		ce = c[ 0 ];
++
++		if( !ce ) {
++			return;
++		}
++
++		over = c.css( "overflow" ) !== "hidden";
++
++		this.containment = [
++			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
++			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
++			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
++			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
++		];
++		this.relative_container = c;
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var containment, co, top, left,
++			o = this.options,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
++			pageX = event.pageX,
++			pageY = event.pageY;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		// If we are not dragging yet, we won't check for options
++		if ( this.originalPosition ) {
++			if ( this.containment ) {
++				if ( this.relative_container ){
++					co = this.relative_container.offset();
++					containment = [
++						this.containment[ 0 ] + co.left,
++						this.containment[ 1 ] + co.top,
++						this.containment[ 2 ] + co.left,
++						this.containment[ 3 ] + co.top
++					];
++				}
++				else {
++					containment = this.containment;
++				}
++
++				if(event.pageX - this.offset.click.left < containment[0]) {
++					pageX = containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < containment[1]) {
++					pageY = containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > containment[2]) {
++					pageX = containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > containment[3]) {
++					pageY = containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
++				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
++				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
++				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																	// The absolute mouse position
++				this.offset.click.top	-												// Click offset (relative to the element)
++				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
++			),
++			left: (
++				pageX -																	// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
++			)
++		};
++
++	},
++
++	_clear: function() {
++		this.helper.removeClass("ui-draggable-dragging");
++		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
++			this.helper.remove();
++		}
++		this.helper = null;
++		this.cancelHelperRemoval = false;
++	},
++
++	// From now on bulk stuff - mainly helpers
++
++	_trigger: function(type, event, ui) {
++		ui = ui || this._uiHash();
++		$.ui.plugin.call(this, type, [event, ui]);
++		//The absolute position has to be recalculated after plugins
++		if(type === "drag") {
++			this.positionAbs = this._convertPositionTo("absolute");
++		}
++		return $.Widget.prototype._trigger.call(this, type, event, ui);
++	},
++
++	plugins: {},
++
++	_uiHash: function() {
++		return {
++			helper: this.helper,
++			position: this.position,
++			originalPosition: this.originalPosition,
++			offset: this.positionAbs
++		};
++	}
++
++});
++
++$.ui.plugin.add("draggable", "connectToSortable", {
++	start: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), o = inst.options,
++			uiSortable = $.extend({}, ui, { item: inst.element });
++		inst.sortables = [];
++		$(o.connectToSortable).each(function() {
++			var sortable = $.data(this, "ui-sortable");
++			if (sortable && !sortable.options.disabled) {
++				inst.sortables.push({
++					instance: sortable,
++					shouldRevert: sortable.options.revert
++				});
++				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
++				sortable._trigger("activate", event, uiSortable);
++			}
++		});
++
++	},
++	stop: function(event, ui) {
++
++		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
++		var inst = $(this).data("ui-draggable"),
++			uiSortable = $.extend({}, ui, { item: inst.element });
++
++		$.each(inst.sortables, function() {
++			if(this.instance.isOver) {
++
++				this.instance.isOver = 0;
++
++				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
++				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
++
++				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
++				if(this.shouldRevert) {
++					this.instance.options.revert = this.shouldRevert;
++				}
++
++				//Trigger the stop of the sortable
++				this.instance._mouseStop(event);
++
++				this.instance.options.helper = this.instance.options._helper;
++
++				//If the helper has been the original item, restore properties in the sortable
++				if(inst.options.helper === "original") {
++					this.instance.currentItem.css({ top: "auto", left: "auto" });
++				}
++
++			} else {
++				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
++				this.instance._trigger("deactivate", event, uiSortable);
++			}
++
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), that = this;
++
++		$.each(inst.sortables, function() {
++
++			var innermostIntersecting = false,
++				thisSortable = this;
++
++			//Copy over some variables to allow calling the sortable's native _intersectsWith
++			this.instance.positionAbs = inst.positionAbs;
++			this.instance.helperProportions = inst.helperProportions;
++			this.instance.offset.click = inst.offset.click;
++
++			if(this.instance._intersectsWith(this.instance.containerCache)) {
++				innermostIntersecting = true;
++				$.each(inst.sortables, function () {
++					this.instance.positionAbs = inst.positionAbs;
++					this.instance.helperProportions = inst.helperProportions;
++					this.instance.offset.click = inst.offset.click;
++					if (this !== thisSortable &&
++						this.instance._intersectsWith(this.instance.containerCache) &&
++						$.contains(thisSortable.instance.element[0], this.instance.element[0])
++					) {
++						innermostIntersecting = false;
++					}
++					return innermostIntersecting;
++				});
++			}
++
++
++			if(innermostIntersecting) {
++				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
++				if(!this.instance.isOver) {
++
++					this.instance.isOver = 1;
++					//Now we fake the start of dragging for the sortable instance,
++					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
++					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
++					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
++					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
++					this.instance.options.helper = function() { return ui.helper[0]; };
++
++					event.target = this.instance.currentItem[0];
++					this.instance._mouseCapture(event, true);
++					this.instance._mouseStart(event, true, true);
++
++					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
++					this.instance.offset.click.top = inst.offset.click.top;
++					this.instance.offset.click.left = inst.offset.click.left;
++					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
++					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
++
++					inst._trigger("toSortable", event);
++					inst.dropped = this.instance.element; //draggable revert needs that
++					//hack so receive/update callbacks work (mostly)
++					inst.currentItem = inst.element;
++					this.instance.fromOutside = inst;
++
++				}
++
++				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
++				if(this.instance.currentItem) {
++					this.instance._mouseDrag(event);
++				}
++
++			} else {
++
++				//If it doesn't intersect with the sortable, and it intersected before,
++				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
++				if(this.instance.isOver) {
++
++					this.instance.isOver = 0;
++					this.instance.cancelHelperRemoval = true;
++
++					//Prevent reverting on this forced stop
++					this.instance.options.revert = false;
++
++					// The out event needs to be triggered independently
++					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
++
++					this.instance._mouseStop(event, true);
++					this.instance.options.helper = this.instance.options._helper;
++
++					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
++					this.instance.currentItem.remove();
++					if(this.instance.placeholder) {
++						this.instance.placeholder.remove();
++					}
++
++					inst._trigger("fromSortable", event);
++					inst.dropped = false; //draggable revert needs that
++				}
++
++			}
++
++		});
++
++	}
++});
++
++$.ui.plugin.add("draggable", "cursor", {
++	start: function() {
++		var t = $("body"), o = $(this).data("ui-draggable").options;
++		if (t.css("cursor")) {
++			o._cursor = t.css("cursor");
++		}
++		t.css("cursor", o.cursor);
++	},
++	stop: function() {
++		var o = $(this).data("ui-draggable").options;
++		if (o._cursor) {
++			$("body").css("cursor", o._cursor);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "opacity", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("opacity")) {
++			o._opacity = t.css("opacity");
++		}
++		t.css("opacity", o.opacity);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._opacity) {
++			$(ui.helper).css("opacity", o._opacity);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "scroll", {
++	start: function() {
++		var i = $(this).data("ui-draggable");
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++			i.overflowOffset = i.scrollParent.offset();
++		}
++	},
++	drag: function( event ) {
++
++		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
++
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++
++			if(!o.axis || o.axis !== "x") {
++				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++			}
++
++		} else {
++
++			if(!o.axis || o.axis !== "x") {
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++			}
++
++		}
++
++		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(i, event);
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "snap", {
++	start: function() {
++
++		var i = $(this).data("ui-draggable"),
++			o = i.options;
++
++		i.snapElements = [];
++
++		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
++			var $t = $(this),
++				$o = $t.offset();
++			if(this !== i.element[0]) {
++				i.snapElements.push({
++					item: this,
++					width: $t.outerWidth(), height: $t.outerHeight(),
++					top: $o.top, left: $o.left
++				});
++			}
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var ts, bs, ls, rs, l, r, t, b, i, first,
++			inst = $(this).data("ui-draggable"),
++			o = inst.options,
++			d = o.snapTolerance,
++			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
++			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
++
++		for (i = inst.snapElements.length - 1; i >= 0; i--){
++
++			l = inst.snapElements[i].left;
++			r = l + inst.snapElements[i].width;
++			t = inst.snapElements[i].top;
++			b = t + inst.snapElements[i].height;
++
++			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
++				if(inst.snapElements[i].snapping) {
++					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++				}
++				inst.snapElements[i].snapping = false;
++				continue;
++			}
++
++			if(o.snapMode !== "inner") {
++				ts = Math.abs(t - y2) <= d;
++				bs = Math.abs(b - y1) <= d;
++				ls = Math.abs(l - x2) <= d;
++				rs = Math.abs(r - x1) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
++				}
++			}
++
++			first = (ts || bs || ls || rs);
++
++			if(o.snapMode !== "outer") {
++				ts = Math.abs(t - y1) <= d;
++				bs = Math.abs(b - y2) <= d;
++				ls = Math.abs(l - x1) <= d;
++				rs = Math.abs(r - x2) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
++				}
++			}
++
++			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
++				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++			}
++			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
++
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "stack", {
++	start: function() {
++		var min,
++			o = this.data("ui-draggable").options,
++			group = $.makeArray($(o.stack)).sort(function(a,b) {
++				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
++			});
++
++		if (!group.length) { return; }
++
++		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
++		$(group).each(function(i) {
++			$(this).css("zIndex", min + i);
++		});
++		this.css("zIndex", (min + group.length));
++	}
++});
++
++$.ui.plugin.add("draggable", "zIndex", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("zIndex")) {
++			o._zIndex = t.css("zIndex");
++		}
++		t.css("zIndex", o.zIndex);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._zIndex) {
++			$(ui.helper).css("zIndex", o._zIndex);
++		}
++	}
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++$.widget("ui.droppable", {
++	version: "1.10.3",
++	widgetEventPrefix: "drop",
++	options: {
++		accept: "*",
++		activeClass: false,
++		addClasses: true,
++		greedy: false,
++		hoverClass: false,
++		scope: "default",
++		tolerance: "intersect",
++
++		// callbacks
++		activate: null,
++		deactivate: null,
++		drop: null,
++		out: null,
++		over: null
++	},
++	_create: function() {
++
++		var o = this.options,
++			accept = o.accept;
++
++		this.isover = false;
++		this.isout = true;
++
++		this.accept = $.isFunction(accept) ? accept : function(d) {
++			return d.is(accept);
++		};
++
++		//Store the droppable's proportions
++		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
++
++		// Add the reference and positions to the manager
++		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
++		$.ui.ddmanager.droppables[o.scope].push(this);
++
++		(o.addClasses && this.element.addClass("ui-droppable"));
++
++	},
++
++	_destroy: function() {
++		var i = 0,
++			drop = $.ui.ddmanager.droppables[this.options.scope];
++
++		for ( ; i < drop.length; i++ ) {
++			if ( drop[i] === this ) {
++				drop.splice(i, 1);
++			}
++		}
++
++		this.element.removeClass("ui-droppable ui-droppable-disabled");
++	},
++
++	_setOption: function(key, value) {
++
++		if(key === "accept") {
++			this.accept = $.isFunction(value) ? value : function(d) {
++				return d.is(value);
++			};
++		}
++		$.Widget.prototype._setOption.apply(this, arguments);
++	},
++
++	_activate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.addClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("activate", event, this.ui(draggable));
++		}
++	},
++
++	_deactivate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.removeClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("deactivate", event, this.ui(draggable));
++		}
++	},
++
++	_over: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.addClass(this.options.hoverClass);
++			}
++			this._trigger("over", event, this.ui(draggable));
++		}
++
++	},
++
++	_out: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("out", event, this.ui(draggable));
++		}
++
++	},
++
++	_drop: function(event,custom) {
++
++		var draggable = custom || $.ui.ddmanager.current,
++			childrenIntersection = false;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return false;
++		}
++
++		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
++			var inst = $.data(this, "ui-droppable");
++			if(
++				inst.options.greedy &&
++				!inst.options.disabled &&
++				inst.options.scope === draggable.options.scope &&
++				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
++				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
++			) { childrenIntersection = true; return false; }
++		});
++		if(childrenIntersection) {
++			return false;
++		}
++
++		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.activeClass) {
++				this.element.removeClass(this.options.activeClass);
++			}
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("drop", event, this.ui(draggable));
++			return this.element;
++		}
++
++		return false;
++
++	},
++
++	ui: function(c) {
++		return {
++			draggable: (c.currentItem || c.element),
++			helper: c.helper,
++			position: c.position,
++			offset: c.positionAbs
++		};
++	}
++
++});
++
++$.ui.intersect = function(draggable, droppable, toleranceMode) {
++
++	if (!droppable.offset) {
++		return false;
++	}
++
++	var draggableLeft, draggableTop,
++		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
++		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
++		l = droppable.offset.left, r = l + droppable.proportions.width,
++		t = droppable.offset.top, b = t + droppable.proportions.height;
++
++	switch (toleranceMode) {
++		case "fit":
++			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
++		case "intersect":
++			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
++				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
++				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
++		case "pointer":
++			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
++			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
++			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
++		case "touch":
++			return (
++				(y1 >= t && y1 <= b) ||	// Top edge touching
++				(y2 >= t && y2 <= b) ||	// Bottom edge touching
++				(y1 < t && y2 > b)		// Surrounded vertically
++			) && (
++				(x1 >= l && x1 <= r) ||	// Left edge touching
++				(x2 >= l && x2 <= r) ||	// Right edge touching
++				(x1 < l && x2 > r)		// Surrounded horizontally
++			);
++		default:
++			return false;
++		}
++
++};
++
++/*
++	This manager tracks offsets of draggables and droppables
++*/
++$.ui.ddmanager = {
++	current: null,
++	droppables: { "default": [] },
++	prepareOffsets: function(t, event) {
++
++		var i, j,
++			m = $.ui.ddmanager.droppables[t.options.scope] || [],
++			type = event ? event.type : null, // workaround for #2317
++			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
++
++		droppablesLoop: for (i = 0; i < m.length; i++) {
++
++			//No disabled and non-accepted
++			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
++				continue;
++			}
++
++			// Filter out elements in the current dragged item
++			for (j=0; j < list.length; j++) {
++				if(list[j] === m[i].element[0]) {
++					m[i].proportions.height = 0;
++					continue droppablesLoop;
++				}
++			}
++
++			m[i].visible = m[i].element.css("display") !== "none";
++			if(!m[i].visible) {
++				continue;
++			}
++
++			//Activate the droppable if used directly from draggables
++			if(type === "mousedown") {
++				m[i]._activate.call(m[i], event);
++			}
++
++			m[i].offset = m[i].element.offset();
++			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
++
++		}
++
++	},
++	drop: function(draggable, event) {
++
++		var dropped = false;
++		// Create a copy of the droppables in case the list changes during the drop (#9116)
++		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
++
++			if(!this.options) {
++				return;
++			}
++			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
++				dropped = this._drop.call(this, event) || dropped;
++			}
++
++			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++				this.isout = true;
++				this.isover = false;
++				this._deactivate.call(this, event);
++			}
++
++		});
++		return dropped;
++
++	},
++	dragStart: function( draggable, event ) {
++		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
++		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
++			if( !draggable.options.refreshPositions ) {
++				$.ui.ddmanager.prepareOffsets( draggable, event );
++			}
++		});
++	},
++	drag: function(draggable, event) {
++
++		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
++		if(draggable.options.refreshPositions) {
++			$.ui.ddmanager.prepareOffsets(draggable, event);
++		}
++
++		//Run through all droppables and check their positions based on specific tolerance options
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(this.options.disabled || this.greedyChild || !this.visible) {
++				return;
++			}
++
++			var parentInstance, scope, parent,
++				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
++				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
++			if(!c) {
++				return;
++			}
++
++			if (this.options.greedy) {
++				// find droppable parents with same scope
++				scope = this.options.scope;
++				parent = this.element.parents(":data(ui-droppable)").filter(function () {
++					return $.data(this, "ui-droppable").options.scope === scope;
++				});
++
++				if (parent.length) {
++					parentInstance = $.data(parent[0], "ui-droppable");
++					parentInstance.greedyChild = (c === "isover");
++				}
++			}
++
++			// we just moved into a greedy child
++			if (parentInstance && c === "isover") {
++				parentInstance.isover = false;
++				parentInstance.isout = true;
++				parentInstance._out.call(parentInstance, event);
++			}
++
++			this[c] = true;
++			this[c === "isout" ? "isover" : "isout"] = false;
++			this[c === "isover" ? "_over" : "_out"].call(this, event);
++
++			// we just moved out of a greedy child
++			if (parentInstance && c === "isout") {
++				parentInstance.isout = false;
++				parentInstance.isover = true;
++				parentInstance._over.call(parentInstance, event);
++			}
++		});
++
++	},
++	dragStop: function( draggable, event ) {
++		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
++		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
++		if( !draggable.options.refreshPositions ) {
++			$.ui.ddmanager.prepareOffsets( draggable, event );
++		}
++	}
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++function num(v) {
++	return parseInt(v, 10) || 0;
++}
++
++function isNumber(value) {
++	return !isNaN(parseInt(value, 10));
++}
++
++$.widget("ui.resizable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "resize",
++	options: {
++		alsoResize: false,
++		animate: false,
++		animateDuration: "slow",
++		animateEasing: "swing",
++		aspectRatio: false,
++		autoHide: false,
++		containment: false,
++		ghost: false,
++		grid: false,
++		handles: "e,s,se",
++		helper: false,
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 10,
++		minWidth: 10,
++		// See #7960
++		zIndex: 90,
++
++		// callbacks
++		resize: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		var n, i, handle, axis, hname,
++			that = this,
++			o = this.options;
++		this.element.addClass("ui-resizable");
++
++		$.extend(this, {
++			_aspectRatio: !!(o.aspectRatio),
++			aspectRatio: o.aspectRatio,
++			originalElement: this.element,
++			_proportionallyResizeElements: [],
++			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
++		});
++
++		//Wrap the element if it cannot hold child nodes
++		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
++
++			//Create a wrapper element and set the wrapper to the new current internal element
++			this.element.wrap(
++				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
++					position: this.element.css("position"),
++					width: this.element.outerWidth(),
++					height: this.element.outerHeight(),
++					top: this.element.css("top"),
++					left: this.element.css("left")
++				})
++			);
++
++			//Overwrite the original this.element
++			this.element = this.element.parent().data(
++				"ui-resizable", this.element.data("ui-resizable")
++			);
++
++			this.elementIsWrapper = true;
++
++			//Move margins to the wrapper
++			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
++			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
++
++			//Prevent Safari textarea resize
++			this.originalResizeStyle = this.originalElement.css("resize");
++			this.originalElement.css("resize", "none");
++
++			//Push the actual element to our proportionallyResize internal array
++			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
++
++			// avoid IE jump (hard set the margin)
++			this.originalElement.css({ margin: this.originalElement.css("margin") });
++
++			// fix handlers offset
++			this._proportionallyResize();
++
++		}
++
++		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
++		if(this.handles.constructor === String) {
++
++			if ( this.handles === "all") {
++				this.handles = "n,e,s,w,se,sw,ne,nw";
++			}
++
++			n = this.handles.split(",");
++			this.handles = {};
++
++			for(i = 0; i < n.length; i++) {
++
++				handle = $.trim(n[i]);
++				hname = "ui-resizable-"+handle;
++				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
++
++				// Apply zIndex to all handles - see #7960
++				axis.css({ zIndex: o.zIndex });
++
++				//TODO : What's going on here?
++				if ("se" === handle) {
++					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
++				}
++
++				//Insert into internal handles object and append to element
++				this.handles[handle] = ".ui-resizable-"+handle;
++				this.element.append(axis);
++			}
++
++		}
++
++		this._renderAxis = function(target) {
++
++			var i, axis, padPos, padWrapper;
++
++			target = target || this.element;
++
++			for(i in this.handles) {
++
++				if(this.handles[i].constructor === String) {
++					this.handles[i] = $(this.handles[i], this.element).show();
++				}
++
++				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
++				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
++
++					axis = $(this.handles[i], this.element);
++
++					//Checking the correct pad and border
++					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
++
++					//The padding type i have to apply...
++					padPos = [ "padding",
++						/ne|nw|n/.test(i) ? "Top" :
++						/se|sw|s/.test(i) ? "Bottom" :
++						/^e$/.test(i) ? "Right" : "Left" ].join("");
++
++					target.css(padPos, padWrapper);
++
++					this._proportionallyResize();
++
++				}
++
++				//TODO: What's that good for? There's not anything to be executed left
++				if(!$(this.handles[i]).length) {
++					continue;
++				}
++			}
++		};
++
++		//TODO: make renderAxis a prototype function
++		this._renderAxis(this.element);
++
++		this._handles = $(".ui-resizable-handle", this.element)
++			.disableSelection();
++
++		//Matching axis name
++		this._handles.mouseover(function() {
++			if (!that.resizing) {
++				if (this.className) {
++					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
++				}
++				//Axis, default = se
++				that.axis = axis && axis[1] ? axis[1] : "se";
++			}
++		});
++
++		//If we want to auto hide the elements
++		if (o.autoHide) {
++			this._handles.hide();
++			$(this.element)
++				.addClass("ui-resizable-autohide")
++				.mouseenter(function() {
++					if (o.disabled) {
++						return;
++					}
++					$(this).removeClass("ui-resizable-autohide");
++					that._handles.show();
++				})
++				.mouseleave(function(){
++					if (o.disabled) {
++						return;
++					}
++					if (!that.resizing) {
++						$(this).addClass("ui-resizable-autohide");
++						that._handles.hide();
++					}
++				});
++		}
++
++		//Initialize the mouse interaction
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++
++		this._mouseDestroy();
++
++		var wrapper,
++			_destroy = function(exp) {
++				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
++					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
++			};
++
++		//TODO: Unwrap at same DOM position
++		if (this.elementIsWrapper) {
++			_destroy(this.element);
++			wrapper = this.element;
++			this.originalElement.css({
++				position: wrapper.css("position"),
++				width: wrapper.outerWidth(),
++				height: wrapper.outerHeight(),
++				top: wrapper.css("top"),
++				left: wrapper.css("left")
++			}).insertAfter( wrapper );
++			wrapper.remove();
++		}
++
++		this.originalElement.css("resize", this.originalResizeStyle);
++		_destroy(this.originalElement);
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++		var i, handle,
++			capture = false;
++
++		for (i in this.handles) {
++			handle = $(this.handles[i])[0];
++			if (handle === event.target || $.contains(handle, event.target)) {
++				capture = true;
++			}
++		}
++
++		return !this.options.disabled && capture;
++	},
++
++	_mouseStart: function(event) {
++
++		var curleft, curtop, cursor,
++			o = this.options,
++			iniPos = this.element.position(),
++			el = this.element;
++
++		this.resizing = true;
++
++		// bugfix for http://dev.jquery.com/ticket/1749
++		if ( (/absolute/).test( el.css("position") ) ) {
++			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
++		} else if (el.is(".ui-draggable")) {
++			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
++		}
++
++		this._renderProxy();
++
++		curleft = num(this.helper.css("left"));
++		curtop = num(this.helper.css("top"));
++
++		if (o.containment) {
++			curleft += $(o.containment).scrollLeft() || 0;
++			curtop += $(o.containment).scrollTop() || 0;
++		}
++
++		//Store needed variables
++		this.offset = this.helper.offset();
++		this.position = { left: curleft, top: curtop };
++		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalPosition = { left: curleft, top: curtop };
++		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
++		this.originalMousePosition = { left: event.pageX, top: event.pageY };
++
++		//Aspect Ratio
++		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
++
++		cursor = $(".ui-resizable-" + this.axis).css("cursor");
++		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
++
++		el.addClass("ui-resizable-resizing");
++		this._propagate("start", event);
++		return true;
++	},
++
++	_mouseDrag: function(event) {
++
++		//Increase performance, avoid regex
++		var data,
++			el = this.helper, props = {},
++			smp = this.originalMousePosition,
++			a = this.axis,
++			prevTop = this.position.top,
++			prevLeft = this.position.left,
++			prevWidth = this.size.width,
++			prevHeight = this.size.height,
++			dx = (event.pageX-smp.left)||0,
++			dy = (event.pageY-smp.top)||0,
++			trigger = this._change[a];
++
++		if (!trigger) {
++			return false;
++		}
++
++		// Calculate the attrs that will be change
++		data = trigger.apply(this, [event, dx, dy]);
++
++		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
++		this._updateVirtualBoundaries(event.shiftKey);
++		if (this._aspectRatio || event.shiftKey) {
++			data = this._updateRatio(data, event);
++		}
++
++		data = this._respectSize(data, event);
++
++		this._updateCache(data);
++
++		// plugins callbacks need to be called first
++		this._propagate("resize", event);
++
++		if (this.position.top !== prevTop) {
++			props.top = this.position.top + "px";
++		}
++		if (this.position.left !== prevLeft) {
++			props.left = this.position.left + "px";
++		}
++		if (this.size.width !== prevWidth) {
++			props.width = this.size.width + "px";
++		}
++		if (this.size.height !== prevHeight) {
++			props.height = this.size.height + "px";
++		}
++		el.css(props);
++
++		if (!this._helper && this._proportionallyResizeElements.length) {
++			this._proportionallyResize();
++		}
++
++		// Call the user callback if the element was resized
++		if ( ! $.isEmptyObject(props) ) {
++			this._trigger("resize", event, this.ui());
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		this.resizing = false;
++		var pr, ista, soffseth, soffsetw, s, left, top,
++			o = this.options, that = this;
++
++		if(this._helper) {
++
++			pr = this._proportionallyResizeElements;
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
++			soffsetw = ista ? 0 : that.sizeDiff.width;
++
++			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++			if (!o.animate) {
++				this.element.css($.extend(s, { top: top, left: left }));
++			}
++
++			that.helper.height(that.size.height);
++			that.helper.width(that.size.width);
++
++			if (this._helper && !o.animate) {
++				this._proportionallyResize();
++			}
++		}
++
++		$("body").css("cursor", "auto");
++
++		this.element.removeClass("ui-resizable-resizing");
++
++		this._propagate("stop", event);
++
++		if (this._helper) {
++			this.helper.remove();
++		}
++
++		return false;
++
++	},
++
++	_updateVirtualBoundaries: function(forceAspectRatio) {
++		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
++			o = this.options;
++
++		b = {
++			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
++			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
++			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
++			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
++		};
++
++		if(this._aspectRatio || forceAspectRatio) {
++			// We want to create an enclosing box whose aspect ration is the requested one
++			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
++			pMinWidth = b.minHeight * this.aspectRatio;
++			pMinHeight = b.minWidth / this.aspectRatio;
++			pMaxWidth = b.maxHeight * this.aspectRatio;
++			pMaxHeight = b.maxWidth / this.aspectRatio;
++
++			if(pMinWidth > b.minWidth) {
++				b.minWidth = pMinWidth;
++			}
++			if(pMinHeight > b.minHeight) {
++				b.minHeight = pMinHeight;
++			}
++			if(pMaxWidth < b.maxWidth) {
++				b.maxWidth = pMaxWidth;
++			}
++			if(pMaxHeight < b.maxHeight) {
++				b.maxHeight = pMaxHeight;
++			}
++		}
++		this._vBoundaries = b;
++	},
++
++	_updateCache: function(data) {
++		this.offset = this.helper.offset();
++		if (isNumber(data.left)) {
++			this.position.left = data.left;
++		}
++		if (isNumber(data.top)) {
++			this.position.top = data.top;
++		}
++		if (isNumber(data.height)) {
++			this.size.height = data.height;
++		}
++		if (isNumber(data.width)) {
++			this.size.width = data.width;
++		}
++	},
++
++	_updateRatio: function( data ) {
++
++		var cpos = this.position,
++			csize = this.size,
++			a = this.axis;
++
++		if (isNumber(data.height)) {
++			data.width = (data.height * this.aspectRatio);
++		} else if (isNumber(data.width)) {
++			data.height = (data.width / this.aspectRatio);
++		}
++
++		if (a === "sw") {
++			data.left = cpos.left + (csize.width - data.width);
++			data.top = null;
++		}
++		if (a === "nw") {
++			data.top = cpos.top + (csize.height - data.height);
++			data.left = cpos.left + (csize.width - data.width);
++		}
++
++		return data;
++	},
++
++	_respectSize: function( data ) {
++
++		var o = this._vBoundaries,
++			a = this.axis,
++			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
++			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
++			dw = this.originalPosition.left + this.originalSize.width,
++			dh = this.position.top + this.size.height,
++			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
++		if (isminw) {
++			data.width = o.minWidth;
++		}
++		if (isminh) {
++			data.height = o.minHeight;
++		}
++		if (ismaxw) {
++			data.width = o.maxWidth;
++		}
++		if (ismaxh) {
++			data.height = o.maxHeight;
++		}
++
++		if (isminw && cw) {
++			data.left = dw - o.minWidth;
++		}
++		if (ismaxw && cw) {
++			data.left = dw - o.maxWidth;
++		}
++		if (isminh && ch) {
++			data.top = dh - o.minHeight;
++		}
++		if (ismaxh && ch) {
++			data.top = dh - o.maxHeight;
++		}
++
++		// fixing jump error on top/left - bug #2330
++		if (!data.width && !data.height && !data.left && data.top) {
++			data.top = null;
++		} else if (!data.width && !data.height && !data.top && data.left) {
++			data.left = null;
++		}
++
++		return data;
++	},
++
++	_proportionallyResize: function() {
++
++		if (!this._proportionallyResizeElements.length) {
++			return;
++		}
++
++		var i, j, borders, paddings, prel,
++			element = this.helper || this.element;
++
++		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
++
++			prel = this._proportionallyResizeElements[i];
++
++			if (!this.borderDif) {
++				this.borderDif = [];
++				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
++				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
++
++				for ( j = 0; j < borders.length; j++ ) {
++					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
++				}
++			}
++
++			prel.css({
++				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
++				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
++			});
++
++		}
++
++	},
++
++	_renderProxy: function() {
++
++		var el = this.element, o = this.options;
++		this.elementOffset = el.offset();
++
++		if(this._helper) {
++
++			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
++
++			this.helper.addClass(this._helper).css({
++				width: this.element.outerWidth() - 1,
++				height: this.element.outerHeight() - 1,
++				position: "absolute",
++				left: this.elementOffset.left +"px",
++				top: this.elementOffset.top +"px",
++				zIndex: ++o.zIndex //TODO: Don't modify option
++			});
++
++			this.helper
++				.appendTo("body")
++				.disableSelection();
++
++		} else {
++			this.helper = this.element;
++		}
++
++	},
++
++	_change: {
++		e: function(event, dx) {
++			return { width: this.originalSize.width + dx };
++		},
++		w: function(event, dx) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { left: sp.left + dx, width: cs.width - dx };
++		},
++		n: function(event, dx, dy) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { top: sp.top + dy, height: cs.height - dy };
++		},
++		s: function(event, dx, dy) {
++			return { height: this.originalSize.height + dy };
++		},
++		se: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		sw: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		},
++		ne: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		nw: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		}
++	},
++
++	_propagate: function(n, event) {
++		$.ui.plugin.call(this, n, [event, this.ui()]);
++		(n !== "resize" && this._trigger(n, event, this.ui()));
++	},
++
++	plugins: {},
++
++	ui: function() {
++		return {
++			originalElement: this.originalElement,
++			element: this.element,
++			helper: this.helper,
++			position: this.position,
++			size: this.size,
++			originalSize: this.originalSize,
++			originalPosition: this.originalPosition
++		};
++	}
++
++});
++
++/*
++ * Resizable Extensions
++ */
++
++$.ui.plugin.add("resizable", "animate", {
++
++	stop: function( event ) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			pr = that._proportionallyResizeElements,
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
++			soffsetw = ista ? 0 : that.sizeDiff.width,
++			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++		that.element.animate(
++			$.extend(style, top && left ? { top: top, left: left } : {}), {
++				duration: o.animateDuration,
++				easing: o.animateEasing,
++				step: function() {
++
++					var data = {
++						width: parseInt(that.element.css("width"), 10),
++						height: parseInt(that.element.css("height"), 10),
++						top: parseInt(that.element.css("top"), 10),
++						left: parseInt(that.element.css("left"), 10)
++					};
++
++					if (pr && pr.length) {
++						$(pr[0]).css({ width: data.width, height: data.height });
++					}
++
++					// propagating resize, and updating values for each animation step
++					that._updateCache(data);
++					that._propagate("resize", event);
++
++				}
++			}
++		);
++	}
++
++});
++
++$.ui.plugin.add("resizable", "containment", {
++
++	start: function() {
++		var element, p, co, ch, cw, width, height,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			el = that.element,
++			oc = o.containment,
++			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
++
++		if (!ce) {
++			return;
++		}
++
++		that.containerElement = $(ce);
++
++		if (/document/.test(oc) || oc === document) {
++			that.containerOffset = { left: 0, top: 0 };
++			that.containerPosition = { left: 0, top: 0 };
++
++			that.parentData = {
++				element: $(document), left: 0, top: 0,
++				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
++			};
++		}
++
++		// i'm a node, so compute top, left, right, bottom
++		else {
++			element = $(ce);
++			p = [];
++			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
++
++			that.containerOffset = element.offset();
++			that.containerPosition = element.position();
++			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
++
++			co = that.containerOffset;
++			ch = that.containerSize.height;
++			cw = that.containerSize.width;
++			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
++			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
++
++			that.parentData = {
++				element: ce, left: co.left, top: co.top, width: width, height: height
++			};
++		}
++	},
++
++	resize: function( event ) {
++		var woset, hoset, isParent, isOffsetRelative,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset, cp = that.position,
++			pRatio = that._aspectRatio || event.shiftKey,
++			cop = { top:0, left:0 }, ce = that.containerElement;
++
++		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
++			cop = co;
++		}
++
++		if (cp.left < (that._helper ? co.left : 0)) {
++			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++			that.position.left = o.helper ? co.left : 0;
++		}
++
++		if (cp.top < (that._helper ? co.top : 0)) {
++			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++			that.position.top = that._helper ? co.top : 0;
++		}
++
++		that.offset.left = that.parentData.left+that.position.left;
++		that.offset.top = that.parentData.top+that.position.top;
++
++		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
++		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
++
++		isParent = that.containerElement.get(0) === that.element.parent().get(0);
++		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
++
++		if(isParent && isOffsetRelative) {
++			woset -= that.parentData.left;
++		}
++
++		if (woset + that.size.width >= that.parentData.width) {
++			that.size.width = that.parentData.width - woset;
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++		}
++
++		if (hoset + that.size.height >= that.parentData.height) {
++			that.size.height = that.parentData.height - hoset;
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++		}
++	},
++
++	stop: function(){
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset,
++			cop = that.containerPosition,
++			ce = that.containerElement,
++			helper = $(that.helper),
++			ho = helper.offset(),
++			w = helper.outerWidth() - that.sizeDiff.width,
++			h = helper.outerHeight() - that.sizeDiff.height;
++
++		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++	}
++});
++
++$.ui.plugin.add("resizable", "alsoResize", {
++
++	start: function () {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			_store = function (exp) {
++				$(exp).each(function() {
++					var el = $(this);
++					el.data("ui-resizable-alsoresize", {
++						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
++						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
++					});
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
++			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
++			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
++		}else{
++			_store(o.alsoResize);
++		}
++	},
++
++	resize: function (event, ui) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			os = that.originalSize,
++			op = that.originalPosition,
++			delta = {
++				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
++				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
++			},
++
++			_alsoResize = function (exp, c) {
++				$(exp).each(function() {
++					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
++						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
++
++					$.each(css, function (i, prop) {
++						var sum = (start[prop]||0) + (delta[prop]||0);
++						if (sum && sum >= 0) {
++							style[prop] = sum || null;
++						}
++					});
++
++					el.css(style);
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
++			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
++		}else{
++			_alsoResize(o.alsoResize);
++		}
++	},
++
++	stop: function () {
++		$(this).removeData("resizable-alsoresize");
++	}
++});
++
++$.ui.plugin.add("resizable", "ghost", {
++
++	start: function() {
++
++		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
++
++		that.ghost = that.originalElement.clone();
++		that.ghost
++			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
++			.addClass("ui-resizable-ghost")
++			.addClass(typeof o.ghost === "string" ? o.ghost : "");
++
++		that.ghost.appendTo(that.helper);
++
++	},
++
++	resize: function(){
++		var that = $(this).data("ui-resizable");
++		if (that.ghost) {
++			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
++		}
++	},
++
++	stop: function() {
++		var that = $(this).data("ui-resizable");
++		if (that.ghost && that.helper) {
++			that.helper.get(0).removeChild(that.ghost.get(0));
++		}
++	}
++
++});
++
++$.ui.plugin.add("resizable", "grid", {
++
++	resize: function() {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			cs = that.size,
++			os = that.originalSize,
++			op = that.originalPosition,
++			a = that.axis,
++			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
++			gridX = (grid[0]||1),
++			gridY = (grid[1]||1),
++			ox = Math.round((cs.width - os.width) / gridX) * gridX,
++			oy = Math.round((cs.height - os.height) / gridY) * gridY,
++			newWidth = os.width + ox,
++			newHeight = os.height + oy,
++			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
++			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
++			isMinWidth = o.minWidth && (o.minWidth > newWidth),
++			isMinHeight = o.minHeight && (o.minHeight > newHeight);
++
++		o.grid = grid;
++
++		if (isMinWidth) {
++			newWidth = newWidth + gridX;
++		}
++		if (isMinHeight) {
++			newHeight = newHeight + gridY;
++		}
++		if (isMaxWidth) {
++			newWidth = newWidth - gridX;
++		}
++		if (isMaxHeight) {
++			newHeight = newHeight - gridY;
++		}
++
++		if (/^(se|s|e)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++		} else if (/^(ne)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++		} else if (/^(sw)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.left = op.left - ox;
++		} else {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++			that.position.left = op.left - ox;
++		}
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.widget("ui.selectable", $.ui.mouse, {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoRefresh: true,
++		distance: 0,
++		filter: "*",
++		tolerance: "touch",
++
++		// callbacks
++		selected: null,
++		selecting: null,
++		start: null,
++		stop: null,
++		unselected: null,
++		unselecting: null
++	},
++	_create: function() {
++		var selectees,
++			that = this;
++
++		this.element.addClass("ui-selectable");
++
++		this.dragged = false;
++
++		// cache selectee children based on filter
++		this.refresh = function() {
++			selectees = $(that.options.filter, that.element[0]);
++			selectees.addClass("ui-selectee");
++			selectees.each(function() {
++				var $this = $(this),
++					pos = $this.offset();
++				$.data(this, "selectable-item", {
++					element: this,
++					$element: $this,
++					left: pos.left,
++					top: pos.top,
++					right: pos.left + $this.outerWidth(),
++					bottom: pos.top + $this.outerHeight(),
++					startselected: false,
++					selected: $this.hasClass("ui-selected"),
++					selecting: $this.hasClass("ui-selecting"),
++					unselecting: $this.hasClass("ui-unselecting")
++				});
++			});
++		};
++		this.refresh();
++
++		this.selectees = selectees.addClass("ui-selectee");
++
++		this._mouseInit();
++
++		this.helper = $("<div class='ui-selectable-helper'></div>");
++	},
++
++	_destroy: function() {
++		this.selectees
++			.removeClass("ui-selectee")
++			.removeData("selectable-item");
++		this.element
++			.removeClass("ui-selectable ui-selectable-disabled");
++		this._mouseDestroy();
++	},
++
++	_mouseStart: function(event) {
++		var that = this,
++			options = this.options;
++
++		this.opos = [event.pageX, event.pageY];
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		this.selectees = $(options.filter, this.element[0]);
++
++		this._trigger("start", event);
++
++		$(options.appendTo).append(this.helper);
++		// position helper (lasso)
++		this.helper.css({
++			"left": event.pageX,
++			"top": event.pageY,
++			"width": 0,
++			"height": 0
++		});
++
++		if (options.autoRefresh) {
++			this.refresh();
++		}
++
++		this.selectees.filter(".ui-selected").each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.startselected = true;
++			if (!event.metaKey && !event.ctrlKey) {
++				selectee.$element.removeClass("ui-selected");
++				selectee.selected = false;
++				selectee.$element.addClass("ui-unselecting");
++				selectee.unselecting = true;
++				// selectable UNSELECTING callback
++				that._trigger("unselecting", event, {
++					unselecting: selectee.element
++				});
++			}
++		});
++
++		$(event.target).parents().addBack().each(function() {
++			var doSelect,
++				selectee = $.data(this, "selectable-item");
++			if (selectee) {
++				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
++				selectee.$element
++					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
++					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
++				selectee.unselecting = !doSelect;
++				selectee.selecting = doSelect;
++				selectee.selected = doSelect;
++				// selectable (UN)SELECTING callback
++				if (doSelect) {
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				} else {
++					that._trigger("unselecting", event, {
++						unselecting: selectee.element
++					});
++				}
++				return false;
++			}
++		});
++
++	},
++
++	_mouseDrag: function(event) {
++
++		this.dragged = true;
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		var tmp,
++			that = this,
++			options = this.options,
++			x1 = this.opos[0],
++			y1 = this.opos[1],
++			x2 = event.pageX,
++			y2 = event.pageY;
++
++		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
++		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
++		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
++
++		this.selectees.each(function() {
++			var selectee = $.data(this, "selectable-item"),
++				hit = false;
++
++			//prevent helper from being selected if appendTo: selectable
++			if (!selectee || selectee.element === that.element[0]) {
++				return;
++			}
++
++			if (options.tolerance === "touch") {
++				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
++			} else if (options.tolerance === "fit") {
++				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
++			}
++
++			if (hit) {
++				// SELECT
++				if (selectee.selected) {
++					selectee.$element.removeClass("ui-selected");
++					selectee.selected = false;
++				}
++				if (selectee.unselecting) {
++					selectee.$element.removeClass("ui-unselecting");
++					selectee.unselecting = false;
++				}
++				if (!selectee.selecting) {
++					selectee.$element.addClass("ui-selecting");
++					selectee.selecting = true;
++					// selectable SELECTING callback
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				}
++			} else {
++				// UNSELECT
++				if (selectee.selecting) {
++					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						selectee.$element.addClass("ui-selected");
++						selectee.selected = true;
++					} else {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						if (selectee.startselected) {
++							selectee.$element.addClass("ui-unselecting");
++							selectee.unselecting = true;
++						}
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++				if (selectee.selected) {
++					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
++						selectee.$element.removeClass("ui-selected");
++						selectee.selected = false;
++
++						selectee.$element.addClass("ui-unselecting");
++						selectee.unselecting = true;
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++			}
++		});
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++		var that = this;
++
++		this.dragged = false;
++
++		$(".ui-unselecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-unselecting");
++			selectee.unselecting = false;
++			selectee.startselected = false;
++			that._trigger("unselected", event, {
++				unselected: selectee.element
++			});
++		});
++		$(".ui-selecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
++			selectee.selecting = false;
++			selectee.selected = true;
++			selectee.startselected = true;
++			that._trigger("selected", event, {
++				selected: selectee.element
++			});
++		});
++		this._trigger("stop", event);
++
++		this.helper.remove();
++
++		return false;
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++/*jshint loopfunc: true */
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++function isFloating(item) {
++	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
++}
++
++$.widget("ui.sortable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "sort",
++	ready: false,
++	options: {
++		appendTo: "parent",
++		axis: false,
++		connectWith: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		dropOnEmpty: true,
++		forcePlaceholderSize: false,
++		forceHelperSize: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		items: "> *",
++		opacity: false,
++		placeholder: false,
++		revert: false,
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		scope: "default",
++		tolerance: "intersect",
++		zIndex: 1000,
++
++		// callbacks
++		activate: null,
++		beforeStop: null,
++		change: null,
++		deactivate: null,
++		out: null,
++		over: null,
++		receive: null,
++		remove: null,
++		sort: null,
++		start: null,
++		stop: null,
++		update: null
++	},
++	_create: function() {
++
++		var o = this.options;
++		this.containerCache = {};
++		this.element.addClass("ui-sortable");
++
++		//Get the items
++		this.refresh();
++
++		//Let's determine if the items are being displayed horizontally
++		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
++
++		//Let's determine the parent's offset
++		this.offset = this.element.offset();
++
++		//Initialize mouse events for interaction
++		this._mouseInit();
++
++		//We're ready to go
++		this.ready = true;
++
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass("ui-sortable ui-sortable-disabled");
++		this._mouseDestroy();
++
++		for ( var i = this.items.length - 1; i >= 0; i-- ) {
++			this.items[i].item.removeData(this.widgetName + "-item");
++		}
++
++		return this;
++	},
++
++	_setOption: function(key, value){
++		if ( key === "disabled" ) {
++			this.options[ key ] = value;
++
++			this.widget().toggleClass( "ui-sortable-disabled", !!value );
++		} else {
++			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
++			$.Widget.prototype._setOption.apply(this, arguments);
++		}
++	},
++
++	_mouseCapture: function(event, overrideHandle) {
++		var currentItem = null,
++			validHandle = false,
++			that = this;
++
++		if (this.reverting) {
++			return false;
++		}
++
++		if(this.options.disabled || this.options.type === "static") {
++			return false;
++		}
++
++		//We have to refresh the items data once first
++		this._refreshItems(event);
++
++		//Find out if the clicked node (or one of its parents) is a actual item in this.items
++		$(event.target).parents().each(function() {
++			if($.data(this, that.widgetName + "-item") === that) {
++				currentItem = $(this);
++				return false;
++			}
++		});
++		if($.data(event.target, that.widgetName + "-item") === that) {
++			currentItem = $(event.target);
++		}
++
++		if(!currentItem) {
++			return false;
++		}
++		if(this.options.handle && !overrideHandle) {
++			$(this.options.handle, currentItem).find("*").addBack().each(function() {
++				if(this === event.target) {
++					validHandle = true;
++				}
++			});
++			if(!validHandle) {
++				return false;
++			}
++		}
++
++		this.currentItem = currentItem;
++		this._removeCurrentsFromItems();
++		return true;
++
++	},
++
++	_mouseStart: function(event, overrideHandle, noActivation) {
++
++		var i, body,
++			o = this.options;
++
++		this.currentContainer = this;
++
++		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
++		this.refreshPositions();
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Get the next scrolling parent
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.currentItem.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		// Only after we got the offset, we can change the helper's position to absolute
++		// TODO: Still need to figure out a way to make relative sorting possible
++		this.helper.css("position", "absolute");
++		this.cssPosition = this.helper.css("position");
++
++		//Generate the original position
++		this.originalPosition = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Cache the former DOM position
++		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
++
++		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.currentItem.hide();
++		}
++
++		//Create the placeholder
++		this._createPlaceholder();
++
++		//Set a containment if given in the options
++		if(o.containment) {
++			this._setContainment();
++		}
++
++		if( o.cursor && o.cursor !== "auto" ) { // cursor option
++			body = this.document.find( "body" );
++
++			// support: IE
++			this.storedCursor = body.css( "cursor" );
++			body.css( "cursor", o.cursor );
++
++			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
++		}
++
++		if(o.opacity) { // opacity option
++			if (this.helper.css("opacity")) {
++				this._storedOpacity = this.helper.css("opacity");
++			}
++			this.helper.css("opacity", o.opacity);
++		}
++
++		if(o.zIndex) { // zIndex option
++			if (this.helper.css("zIndex")) {
++				this._storedZIndex = this.helper.css("zIndex");
++			}
++			this.helper.css("zIndex", o.zIndex);
++		}
++
++		//Prepare scrolling
++		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++			this.overflowOffset = this.scrollParent.offset();
++		}
++
++		//Call callbacks
++		this._trigger("start", event, this._uiHash());
++
++		//Recache the helper size
++		if(!this._preserveHelperProportions) {
++			this._cacheHelperProportions();
++		}
++
++
++		//Post "activate" events to possible containers
++		if( !noActivation ) {
++			for ( i = this.containers.length - 1; i >= 0; i-- ) {
++				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
++			}
++		}
++
++		//Prepare possible droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++		this.dragging = true;
++
++		this.helper.addClass("ui-sortable-helper");
++		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		return true;
++
++	},
++
++	_mouseDrag: function(event) {
++		var i, item, itemElement, intersection,
++			o = this.options,
++			scrolled = false;
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		if (!this.lastPositionAbs) {
++			this.lastPositionAbs = this.positionAbs;
++		}
++
++		//Do scrolling
++		if(this.options.scroll) {
++			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++
++				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++
++				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++
++			} else {
++
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++
++			}
++
++			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++				$.ui.ddmanager.prepareOffsets(this, event);
++			}
++		}
++
++		//Regenerate the absolute position used for position checks
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Set the helper position
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++
++		//Rearrange
++		for (i = this.items.length - 1; i >= 0; i--) {
++
++			//Cache variables and intersection, continue if no intersection
++			item = this.items[i];
++			itemElement = item.item[0];
++			intersection = this._intersectsWithPointer(item);
++			if (!intersection) {
++				continue;
++			}
++
++			// Only put the placeholder inside the current Container, skip all
++			// items form other containers. This works because when moving
++			// an item from one container to another the
++			// currentContainer is switched before the placeholder is moved.
++			//
++			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
++			// beetween the outer and inner container.
++			if (item.instance !== this.currentContainer) {
++				continue;
++			}
++
++			// cannot intersect with itself
++			// no useless actions that have been done before
++			// no action if the item moved is the parent of the item checked
++			if (itemElement !== this.currentItem[0] &&
++				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
++				!$.contains(this.placeholder[0], itemElement) &&
++				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
++			) {
++
++				this.direction = intersection === 1 ? "down" : "up";
++
++				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
++					this._rearrange(event, item);
++				} else {
++					break;
++				}
++
++				this._trigger("change", event, this._uiHash());
++				break;
++			}
++		}
++
++		//Post events to containers
++		this._contactContainers(event);
++
++		//Interconnect with droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		//Call callbacks
++		this._trigger("sort", event, this._uiHash());
++
++		this.lastPositionAbs = this.positionAbs;
++		return false;
++
++	},
++
++	_mouseStop: function(event, noPropagation) {
++
++		if(!event) {
++			return;
++		}
++
++		//If we are using droppables, inform the manager about the drop
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			$.ui.ddmanager.drop(this, event);
++		}
++
++		if(this.options.revert) {
++			var that = this,
++				cur = this.placeholder.offset(),
++				axis = this.options.axis,
++				animation = {};
++
++			if ( !axis || axis === "x" ) {
++				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
++			}
++			if ( !axis || axis === "y" ) {
++				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
++			}
++			this.reverting = true;
++			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
++				that._clear(event);
++			});
++		} else {
++			this._clear(event, noPropagation);
++		}
++
++		return false;
++
++	},
++
++	cancel: function() {
++
++		if(this.dragging) {
++
++			this._mouseUp({ target: null });
++
++			if(this.options.helper === "original") {
++				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++			} else {
++				this.currentItem.show();
++			}
++
++			//Post deactivating events to containers
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", null, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		if (this.placeholder) {
++			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++			if(this.placeholder[0].parentNode) {
++				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++			}
++			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
++				this.helper.remove();
++			}
++
++			$.extend(this, {
++				helper: null,
++				dragging: false,
++				reverting: false,
++				_noFinalSort: null
++			});
++
++			if(this.domPosition.prev) {
++				$(this.domPosition.prev).after(this.currentItem);
++			} else {
++				$(this.domPosition.parent).prepend(this.currentItem);
++			}
++		}
++
++		return this;
++
++	},
++
++	serialize: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			str = [];
++		o = o || {};
++
++		$(items).each(function() {
++			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
++			if (res) {
++				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
++			}
++		});
++
++		if(!str.length && o.key) {
++			str.push(o.key + "=");
++		}
++
++		return str.join("&");
++
++	},
++
++	toArray: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			ret = [];
++
++		o = o || {};
++
++		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
++		return ret;
++
++	},
++
++	/* Be careful with the following core functions */
++	_intersectsWith: function(item) {
++
++		var x1 = this.positionAbs.left,
++			x2 = x1 + this.helperProportions.width,
++			y1 = this.positionAbs.top,
++			y2 = y1 + this.helperProportions.height,
++			l = item.left,
++			r = l + item.width,
++			t = item.top,
++			b = t + item.height,
++			dyClick = this.offset.click.top,
++			dxClick = this.offset.click.left,
++			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
++			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
++			isOverElement = isOverElementHeight && isOverElementWidth;
++
++		if ( this.options.tolerance === "pointer" ||
++			this.options.forcePointerForContainers ||
++			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
++		) {
++			return isOverElement;
++		} else {
++
++			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
++				x2 - (this.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
++				y2 - (this.helperProportions.height / 2) < b ); // Top Half
++
++		}
++	},
++
++	_intersectsWithPointer: function(item) {
++
++		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
++			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
++			isOverElement = isOverElementHeight && isOverElementWidth,
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (!isOverElement) {
++			return false;
++		}
++
++		return this.floating ?
++			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
++			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
++
++	},
++
++	_intersectsWithSides: function(item) {
++
++		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
++			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (this.floating && horizontalDirection) {
++			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
++		} else {
++			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
++		}
++
++	},
++
++	_getDragVerticalDirection: function() {
++		var delta = this.positionAbs.top - this.lastPositionAbs.top;
++		return delta !== 0 && (delta > 0 ? "down" : "up");
++	},
++
++	_getDragHorizontalDirection: function() {
++		var delta = this.positionAbs.left - this.lastPositionAbs.left;
++		return delta !== 0 && (delta > 0 ? "right" : "left");
++	},
++
++	refresh: function(event) {
++		this._refreshItems(event);
++		this.refreshPositions();
++		return this;
++	},
++
++	_connectWith: function() {
++		var options = this.options;
++		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
++	},
++
++	_getItemsAsjQuery: function(connected) {
++
++		var i, j, cur, inst,
++			items = [],
++			queries = [],
++			connectWith = this._connectWith();
++
++		if(connectWith && connected) {
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for ( j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
++					}
++				}
++			}
++		}
++
++		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
++
++		for (i = queries.length - 1; i >= 0; i--){
++			queries[i][0].each(function() {
++				items.push(this);
++			});
++		}
++
++		return $(items);
++
++	},
++
++	_removeCurrentsFromItems: function() {
++
++		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
++
++		this.items = $.grep(this.items, function (item) {
++			for (var j=0; j < list.length; j++) {
++				if(list[j] === item.item[0]) {
++					return false;
++				}
++			}
++			return true;
++		});
++
++	},
++
++	_refreshItems: function(event) {
++
++		this.items = [];
++		this.containers = [this];
++
++		var i, j, cur, inst, targetData, _queries, item, queriesLength,
++			items = this.items,
++			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
++			connectWith = this._connectWith();
++
++		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for (j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
++						this.containers.push(inst);
++					}
++				}
++			}
++		}
++
++		for (i = queries.length - 1; i >= 0; i--) {
++			targetData = queries[i][1];
++			_queries = queries[i][0];
++
++			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
++				item = $(_queries[j]);
++
++				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
++
++				items.push({
++					item: item,
++					instance: targetData,
++					width: 0, height: 0,
++					left: 0, top: 0
++				});
++			}
++		}
++
++	},
++
++	refreshPositions: function(fast) {
++
++		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
++		if(this.offsetParent && this.helper) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		var i, item, t, p;
++
++		for (i = this.items.length - 1; i >= 0; i--){
++			item = this.items[i];
++
++			//We ignore calculating positions of all connected containers when we're not over them
++			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
++				continue;
++			}
++
++			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
++
++			if (!fast) {
++				item.width = t.outerWidth();
++				item.height = t.outerHeight();
++			}
++
++			p = t.offset();
++			item.left = p.left;
++			item.top = p.top;
++		}
++
++		if(this.options.custom && this.options.custom.refreshContainers) {
++			this.options.custom.refreshContainers.call(this);
++		} else {
++			for (i = this.containers.length - 1; i >= 0; i--){
++				p = this.containers[i].element.offset();
++				this.containers[i].containerCache.left = p.left;
++				this.containers[i].containerCache.top = p.top;
++				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
++				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
++			}
++		}
++
++		return this;
++	},
++
++	_createPlaceholder: function(that) {
++		that = that || this;
++		var className,
++			o = that.options;
++
++		if(!o.placeholder || o.placeholder.constructor === String) {
++			className = o.placeholder;
++			o.placeholder = {
++				element: function() {
++
++					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
++						element = $( "<" + nodeName + ">", that.document[0] )
++							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
++							.removeClass("ui-sortable-helper");
++
++					if ( nodeName === "tr" ) {
++						that.currentItem.children().each(function() {
++							$( "<td>&#160;</td>", that.document[0] )
++								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
++								.appendTo( element );
++						});
++					} else if ( nodeName === "img" ) {
++						element.attr( "src", that.currentItem.attr( "src" ) );
++					}
++
++					if ( !className ) {
++						element.css( "visibility", "hidden" );
++					}
++
++					return element;
++				},
++				update: function(container, p) {
++
++					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
++					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
++					if(className && !o.forcePlaceholderSize) {
++						return;
++					}
++
++					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
++					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
++					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
++				}
++			};
++		}
++
++		//Create the placeholder
++		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
++
++		//Append it after the actual current item
++		that.currentItem.after(that.placeholder);
++
++		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
++		o.placeholder.update(that, that.placeholder);
++
++	},
++
++	_contactContainers: function(event) {
++		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
++			innermostContainer = null,
++			innermostIndex = null;
++
++		// get innermost container that intersects with item
++		for (i = this.containers.length - 1; i >= 0; i--) {
++
++			// never consider a container that's located within the item itself
++			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
++				continue;
++			}
++
++			if(this._intersectsWith(this.containers[i].containerCache)) {
++
++				// if we've already found a container and it's more "inner" than this, then continue
++				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
++					continue;
++				}
++
++				innermostContainer = this.containers[i];
++				innermostIndex = i;
++
++			} else {
++				// container doesn't intersect. trigger "out" event if necessary
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", event, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		// if no intersecting containers found, return
++		if(!innermostContainer) {
++			return;
++		}
++
++		// move the item into the container if it's not there already
++		if(this.containers.length === 1) {
++			if (!this.containers[innermostIndex].containerCache.over) {
++				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++				this.containers[innermostIndex].containerCache.over = 1;
++			}
++		} else {
++
++			//When entering a new container, we will find the item with the least distance and append our item near it
++			dist = 10000;
++			itemWithLeastDistance = null;
++			floating = innermostContainer.floating || isFloating(this.currentItem);
++			posProperty = floating ? "left" : "top";
++			sizeProperty = floating ? "width" : "height";
++			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
++			for (j = this.items.length - 1; j >= 0; j--) {
++				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
++					continue;
++				}
++				if(this.items[j].item[0] === this.currentItem[0]) {
++					continue;
++				}
++				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
++					continue;
++				}
++				cur = this.items[j].item.offset()[posProperty];
++				nearBottom = false;
++				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
++					nearBottom = true;
++					cur += this.items[j][sizeProperty];
++				}
++
++				if(Math.abs(cur - base) < dist) {
++					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
++					this.direction = nearBottom ? "up": "down";
++				}
++			}
++
++			//Check if dropOnEmpty is enabled
++			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
++				return;
++			}
++
++			if(this.currentContainer === this.containers[innermostIndex]) {
++				return;
++			}
++
++			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
++			this._trigger("change", event, this._uiHash());
++			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
++			this.currentContainer = this.containers[innermostIndex];
++
++			//Update the placeholder
++			this.options.placeholder.update(this.currentContainer, this.placeholder);
++
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++			this.containers[innermostIndex].containerCache.over = 1;
++		}
++
++
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
++
++		//Add the helper to the DOM if that didn't happen already
++		if(!helper.parents("body").length) {
++			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
++		}
++
++		if(helper[0] === this.currentItem[0]) {
++			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
++		}
++
++		if(!helper[0].style.width || o.forceHelperSize) {
++			helper.width(this.currentItem.width());
++		}
++		if(!helper[0].style.height || o.forceHelperSize) {
++			helper.height(this.currentItem.height());
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		// This needs to be actually done for all browsers, since pageX/pageY includes this information
++		// with an ugly IE fix
++		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.currentItem.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
++			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var ce, co, over,
++			o = this.options;
++		if(o.containment === "parent") {
++			o.containment = this.helper[0].parentNode;
++		}
++		if(o.containment === "document" || o.containment === "window") {
++			this.containment = [
++				0 - this.offset.relative.left - this.offset.parent.left,
++				0 - this.offset.relative.top - this.offset.parent.top,
++				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
++				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++		if(!(/^(document|window|parent)$/).test(o.containment)) {
++			ce = $(o.containment)[0];
++			co = $(o.containment).offset();
++			over = ($(ce).css("overflow") !== "hidden");
++
++			this.containment = [
++				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
++				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
++				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
++				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
++			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var top, left,
++			o = this.options,
++			pageX = event.pageX,
++			pageY = event.pageY,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		// This is another very weird special case that only happens for relative elements:
++		// 1. If the css position is relative
++		// 2. and the scroll parent is the document or similar to the offset parent
++		// we have to refresh the relative offset during the scroll so there are no jumps
++		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
++			this.offset.relative = this._getRelativeOffset();
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++
++			if(this.containment) {
++				if(event.pageX - this.offset.click.left < this.containment[0]) {
++					pageX = this.containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < this.containment[1]) {
++					pageY = this.containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > this.containment[2]) {
++					pageX = this.containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > this.containment[3]) {
++					pageY = this.containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
++				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
++				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																// The absolute mouse position
++				this.offset.click.top -													// Click offset (relative to the element)
++				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX -																// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_rearrange: function(event, i, a, hardRefresh) {
++
++		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
++
++		//Various things done here to improve the performance:
++		// 1. we create a setTimeout, that calls refreshPositions
++		// 2. on the instance, we have a counter variable, that get's higher after every append
++		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
++		// 4. this lets only the last addition to the timeout stack through
++		this.counter = this.counter ? ++this.counter : 1;
++		var counter = this.counter;
++
++		this._delay(function() {
++			if(counter === this.counter) {
++				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
++			}
++		});
++
++	},
++
++	_clear: function(event, noPropagation) {
++
++		this.reverting = false;
++		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
++		// everything else normalized again
++		var i,
++			delayedTriggers = [];
++
++		// We first have to update the dom position of the actual currentItem
++		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
++		if(!this._noFinalSort && this.currentItem.parent().length) {
++			this.placeholder.before(this.currentItem);
++		}
++		this._noFinalSort = null;
++
++		if(this.helper[0] === this.currentItem[0]) {
++			for(i in this._storedCSS) {
++				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
++					this._storedCSS[i] = "";
++				}
++			}
++			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++		} else {
++			this.currentItem.show();
++		}
++
++		if(this.fromOutside && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
++		}
++		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
++		}
++
++		// Check if the items Container has Changed and trigger appropriate
++		// events.
++		if (this !== this.currentContainer) {
++			if(!noPropagation) {
++				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
++			}
++		}
++
++
++		//Post events to containers
++		for (i = this.containers.length - 1; i >= 0; i--){
++			if(!noPropagation) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++			}
++			if(this.containers[i].containerCache.over) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++				this.containers[i].containerCache.over = 0;
++			}
++		}
++
++		//Do what was originally in plugins
++		if ( this.storedCursor ) {
++			this.document.find( "body" ).css( "cursor", this.storedCursor );
++			this.storedStylesheet.remove();
++		}
++		if(this._storedOpacity) {
++			this.helper.css("opacity", this._storedOpacity);
++		}
++		if(this._storedZIndex) {
++			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
++		}
++
++		this.dragging = false;
++		if(this.cancelHelperRemoval) {
++			if(!noPropagation) {
++				this._trigger("beforeStop", event, this._uiHash());
++				for (i=0; i < delayedTriggers.length; i++) {
++					delayedTriggers[i].call(this, event);
++				} //Trigger all delayed events
++				this._trigger("stop", event, this._uiHash());
++			}
++
++			this.fromOutside = false;
++			return false;
++		}
++
++		if(!noPropagation) {
++			this._trigger("beforeStop", event, this._uiHash());
++		}
++
++		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.helper.remove();
++		}
++		this.helper = null;
++
++		if(!noPropagation) {
++			for (i=0; i < delayedTriggers.length; i++) {
++				delayedTriggers[i].call(this, event);
++			} //Trigger all delayed events
++			this._trigger("stop", event, this._uiHash());
++		}
++
++		this.fromOutside = false;
++		return true;
++
++	},
++
++	_trigger: function() {
++		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
++			this.cancel();
++		}
++	},
++
++	_uiHash: function(_inst) {
++		var inst = _inst || this;
++		return {
++			helper: inst.helper,
++			placeholder: inst.placeholder || $([]),
++			position: inst.position,
++			originalPosition: inst.originalPosition,
++			offset: inst.positionAbs,
++			item: inst.currentItem,
++			sender: _inst ? _inst.element : null
++		};
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++var uid = 0,
++	hideProps = {},
++	showProps = {};
++
++hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
++	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
++showProps.height = showProps.paddingTop = showProps.paddingBottom =
++	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
++
++$.widget( "ui.accordion", {
++	version: "1.10.3",
++	options: {
++		active: 0,
++		animate: {},
++		collapsible: false,
++		event: "click",
++		header: "> li > :first-child,> :not(li):even",
++		heightStyle: "auto",
++		icons: {
++			activeHeader: "ui-icon-triangle-1-s",
++			header: "ui-icon-triangle-1-e"
++		},
++
++		// callbacks
++		activate: null,
++		beforeActivate: null
++	},
++
++	_create: function() {
++		var options = this.options;
++		this.prevShow = this.prevHide = $();
++		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
++			// ARIA
++			.attr( "role", "tablist" );
++
++		// don't allow collapsible: false and active: false / null
++		if ( !options.collapsible && (options.active === false || options.active == null) ) {
++			options.active = 0;
++		}
++
++		this._processPanels();
++		// handle negative values
++		if ( options.active < 0 ) {
++			options.active += this.headers.length;
++		}
++		this._refresh();
++	},
++
++	_getCreateEventData: function() {
++		return {
++			header: this.active,
++			panel: !this.active.length ? $() : this.active.next(),
++			content: !this.active.length ? $() : this.active.next()
++		};
++	},
++
++	_createIcons: function() {
++		var icons = this.options.icons;
++		if ( icons ) {
++			$( "<span>" )
++				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
++				.prependTo( this.headers );
++			this.active.children( ".ui-accordion-header-icon" )
++				.removeClass( icons.header )
++				.addClass( icons.activeHeader );
++			this.headers.addClass( "ui-accordion-icons" );
++		}
++	},
++
++	_destroyIcons: function() {
++		this.headers
++			.removeClass( "ui-accordion-icons" )
++			.children( ".ui-accordion-header-icon" )
++				.remove();
++	},
++
++	_destroy: function() {
++		var contents;
++
++		// clean up main element
++		this.element
++			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
++			.removeAttr( "role" );
++
++		// clean up headers
++		this.headers
++			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-selected" )
++			.removeAttr( "aria-controls" )
++			.removeAttr( "tabIndex" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		this._destroyIcons();
++
++		// clean up content panels
++		contents = this.headers.next()
++			.css( "display", "" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-expanded" )
++			.removeAttr( "aria-hidden" )
++			.removeAttr( "aria-labelledby" )
++			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		if ( this.options.heightStyle !== "content" ) {
++			contents.css( "height", "" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "event" ) {
++			if ( this.options.event ) {
++				this._off( this.headers, this.options.event );
++			}
++			this._setupEvents( value );
++		}
++
++		this._super( key, value );
++
++		// setting collapsible: false while collapsed; open first panel
++		if ( key === "collapsible" && !value && this.options.active === false ) {
++			this._activate( 0 );
++		}
++
++		if ( key === "icons" ) {
++			this._destroyIcons();
++			if ( value ) {
++				this._createIcons();
++			}
++		}
++
++		// #5332 - opacity doesn't cascade to positioned elements in IE
++		// so we need to add the disabled class to the headers and panels
++		if ( key === "disabled" ) {
++			this.headers.add( this.headers.next() )
++				.toggleClass( "ui-state-disabled", !!value );
++		}
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		if ( event.altKey || event.ctrlKey ) {
++			return;
++		}
++
++		var keyCode = $.ui.keyCode,
++			length = this.headers.length,
++			currentIndex = this.headers.index( event.target ),
++			toFocus = false;
++
++		switch ( event.keyCode ) {
++			case keyCode.RIGHT:
++			case keyCode.DOWN:
++				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
++				break;
++			case keyCode.LEFT:
++			case keyCode.UP:
++				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
++				break;
++			case keyCode.SPACE:
++			case keyCode.ENTER:
++				this._eventHandler( event );
++				break;
++			case keyCode.HOME:
++				toFocus = this.headers[ 0 ];
++				break;
++			case keyCode.END:
++				toFocus = this.headers[ length - 1 ];
++				break;
++		}
++
++		if ( toFocus ) {
++			$( event.target ).attr( "tabIndex", -1 );
++			$( toFocus ).attr( "tabIndex", 0 );
++			toFocus.focus();
++			event.preventDefault();
++		}
++	},
++
++	_panelKeyDown : function( event ) {
++		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
++			$( event.currentTarget ).prev().focus();
++		}
++	},
++
++	refresh: function() {
++		var options = this.options;
++		this._processPanels();
++
++		// was collapsed or no panel
++		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
++			options.active = false;
++			this.active = $();
++		// active false only when collapsible is true
++		} else if ( options.active === false ) {
++			this._activate( 0 );
++		// was active, but active panel is gone
++		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining panel are disabled
++			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous panel
++			} else {
++				this._activate( Math.max( 0, options.active - 1 ) );
++			}
++		// was active, active panel still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.headers.index( this.active );
++		}
++
++		this._destroyIcons();
++
++		this._refresh();
++	},
++
++	_processPanels: function() {
++		this.headers = this.element.find( this.options.header )
++			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
++
++		this.headers.next()
++			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
++			.filter(":not(.ui-accordion-content-active)")
++			.hide();
++	},
++
++	_refresh: function() {
++		var maxHeight,
++			options = this.options,
++			heightStyle = options.heightStyle,
++			parent = this.element.parent(),
++			accordionId = this.accordionId = "ui-accordion-" +
++				(this.element.attr( "id" ) || ++uid);
++
++		this.active = this._findActive( options.active )
++			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
++			.removeClass( "ui-corner-all" );
++		this.active.next()
++			.addClass( "ui-accordion-content-active" )
++			.show();
++
++		this.headers
++			.attr( "role", "tab" )
++			.each(function( i ) {
++				var header = $( this ),
++					headerId = header.attr( "id" ),
++					panel = header.next(),
++					panelId = panel.attr( "id" );
++				if ( !headerId ) {
++					headerId = accordionId + "-header-" + i;
++					header.attr( "id", headerId );
++				}
++				if ( !panelId ) {
++					panelId = accordionId + "-panel-" + i;
++					panel.attr( "id", panelId );
++				}
++				header.attr( "aria-controls", panelId );
++				panel.attr( "aria-labelledby", headerId );
++			})
++			.next()
++				.attr( "role", "tabpanel" );
++
++		this.headers
++			.not( this.active )
++			.attr({
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.next()
++				.attr({
++					"aria-expanded": "false",
++					"aria-hidden": "true"
++				})
++				.hide();
++
++		// make sure at least one header is in the tab order
++		if ( !this.active.length ) {
++			this.headers.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active.attr({
++				"aria-selected": "true",
++				tabIndex: 0
++			})
++			.next()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++
++		this._createIcons();
++
++		this._setupEvents( options.event );
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.headers.each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.headers.next()
++				.each(function() {
++					$( this ).height( Math.max( 0, maxHeight -
++						$( this ).innerHeight() + $( this ).height() ) );
++				})
++				.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.headers.next()
++				.each(function() {
++					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
++				})
++				.height( maxHeight );
++		}
++	},
++
++	_activate: function( index ) {
++		var active = this._findActive( index )[ 0 ];
++
++		// trying to activate the already active panel
++		if ( active === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the currently active header
++		active = active || this.active[ 0 ];
++
++		this._eventHandler({
++			target: active,
++			currentTarget: active,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( selector ) {
++		return typeof selector === "number" ? this.headers.eq( selector ) : $();
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			keydown: "_keydown"
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.headers.add( this.headers.next() ) );
++		this._on( this.headers, events );
++		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
++		this._hoverable( this.headers );
++		this._focusable( this.headers );
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			clicked = $( event.currentTarget ),
++			clickedIsActive = clicked[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : clicked.next(),
++			toHide = active.next(),
++			eventData = {
++				oldHeader: active,
++				oldPanel: toHide,
++				newHeader: collapsing ? $() : clicked,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if (
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.headers.index( clicked );
++
++		// when the call to ._toggle() comes after the class changes
++		// it causes a very odd bug in IE 8 (see #6720)
++		this.active = clickedIsActive ? $() : clicked;
++		this._toggle( eventData );
++
++		// switch classes
++		// corner classes on the previously active header stay after the animation
++		active.removeClass( "ui-accordion-header-active ui-state-active" );
++		if ( options.icons ) {
++			active.children( ".ui-accordion-header-icon" )
++				.removeClass( options.icons.activeHeader )
++				.addClass( options.icons.header );
++		}
++
++		if ( !clickedIsActive ) {
++			clicked
++				.removeClass( "ui-corner-all" )
++				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
++			if ( options.icons ) {
++				clicked.children( ".ui-accordion-header-icon" )
++					.removeClass( options.icons.header )
++					.addClass( options.icons.activeHeader );
++			}
++
++			clicked
++				.next()
++				.addClass( "ui-accordion-content-active" );
++		}
++	},
++
++	_toggle: function( data ) {
++		var toShow = data.newPanel,
++			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
++
++		// handle activating a panel during the animation for another activation
++		this.prevShow.add( this.prevHide ).stop( true, true );
++		this.prevShow = toShow;
++		this.prevHide = toHide;
++
++		if ( this.options.animate ) {
++			this._animate( toShow, toHide, data );
++		} else {
++			toHide.hide();
++			toShow.show();
++			this._toggleComplete( data );
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		toHide.prev().attr( "aria-selected", "false" );
++		// if we're switching panels, remove the old header from the tab order
++		// if we're opening from collapsed state, remove the previous header from the tab order
++		// if we're collapsing, then keep the collapsing header in the tab order
++		if ( toShow.length && toHide.length ) {
++			toHide.prev().attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.headers.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow
++			.attr({
++				"aria-expanded": "true",
++				"aria-hidden": "false"
++			})
++			.prev()
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++	},
++
++	_animate: function( toShow, toHide, data ) {
++		var total, easing, duration,
++			that = this,
++			adjust = 0,
++			down = toShow.length &&
++				( !toHide.length || ( toShow.index() < toHide.index() ) ),
++			animate = this.options.animate || {},
++			options = down && animate.down || animate,
++			complete = function() {
++				that._toggleComplete( data );
++			};
++
++		if ( typeof options === "number" ) {
++			duration = options;
++		}
++		if ( typeof options === "string" ) {
++			easing = options;
++		}
++		// fall back from options to animation in case of partial down settings
++		easing = easing || options.easing || animate.easing;
++		duration = duration || options.duration || animate.duration;
++
++		if ( !toHide.length ) {
++			return toShow.animate( showProps, duration, easing, complete );
++		}
++		if ( !toShow.length ) {
++			return toHide.animate( hideProps, duration, easing, complete );
++		}
++
++		total = toShow.show().outerHeight();
++		toHide.animate( hideProps, {
++			duration: duration,
++			easing: easing,
++			step: function( now, fx ) {
++				fx.now = Math.round( now );
++			}
++		});
++		toShow
++			.hide()
++			.animate( showProps, {
++				duration: duration,
++				easing: easing,
++				complete: complete,
++				step: function( now, fx ) {
++					fx.now = Math.round( now );
++					if ( fx.prop !== "height" ) {
++						adjust += fx.now;
++					} else if ( that.options.heightStyle !== "content" ) {
++						fx.now = Math.round( total - toHide.outerHeight() - adjust );
++						adjust = 0;
++					}
++				}
++			});
++	},
++
++	_toggleComplete: function( data ) {
++		var toHide = data.oldPanel;
++
++		toHide
++			.removeClass( "ui-accordion-content-active" )
++			.prev()
++				.removeClass( "ui-corner-top" )
++				.addClass( "ui-corner-all" );
++
++		// Work around for rendering bug in IE (#5421)
++		if ( toHide.length ) {
++			toHide.parent()[0].className = toHide.parent()[0].className;
++		}
++
++		this._trigger( "activate", null, data );
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++// used to prevent race conditions with remote data sources
++var requestIndex = 0;
++
++$.widget( "ui.autocomplete", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	options: {
++		appendTo: null,
++		autoFocus: false,
++		delay: 300,
++		minLength: 1,
++		position: {
++			my: "left top",
++			at: "left bottom",
++			collision: "none"
++		},
++		source: null,
++
++		// callbacks
++		change: null,
++		close: null,
++		focus: null,
++		open: null,
++		response: null,
++		search: null,
++		select: null
++	},
++
++	pending: 0,
++
++	_create: function() {
++		// Some browsers only repeat keydown events, not keypress events,
++		// so we use the suppressKeyPress flag to determine if we've already
++		// handled the keydown event. #7269
++		// Unfortunately the code for & in keypress is the same as the up arrow,
++		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
++		// events when we know the keydown event was used to modify the
++		// search term. #7799
++		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
++			nodeName = this.element[0].nodeName.toLowerCase(),
++			isTextarea = nodeName === "textarea",
++			isInput = nodeName === "input";
++
++		this.isMultiLine =
++			// Textareas are always multi-line
++			isTextarea ? true :
++			// Inputs are always single-line, even if inside a contentEditable element
++			// IE also treats inputs as contentEditable
++			isInput ? false :
++			// All other element types are determined by whether or not they're contentEditable
++			this.element.prop( "isContentEditable" );
++
++		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
++		this.isNewMenu = true;
++
++		this.element
++			.addClass( "ui-autocomplete-input" )
++			.attr( "autocomplete", "off" );
++
++		this._on( this.element, {
++			keydown: function( event ) {
++				/*jshint maxcomplexity:15*/
++				if ( this.element.prop( "readOnly" ) ) {
++					suppressKeyPress = true;
++					suppressInput = true;
++					suppressKeyPressRepeat = true;
++					return;
++				}
++
++				suppressKeyPress = false;
++				suppressInput = false;
++				suppressKeyPressRepeat = false;
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					suppressKeyPress = true;
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					suppressKeyPress = true;
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					suppressKeyPress = true;
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					suppressKeyPress = true;
++					this._keyEvent( "next", event );
++					break;
++				case keyCode.ENTER:
++				case keyCode.NUMPAD_ENTER:
++					// when menu is open and has focus
++					if ( this.menu.active ) {
++						// #6055 - Opera still allows the keypress to occur
++						// which causes forms to submit
++						suppressKeyPress = true;
++						event.preventDefault();
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.TAB:
++					if ( this.menu.active ) {
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.ESCAPE:
++					if ( this.menu.element.is( ":visible" ) ) {
++						this._value( this.term );
++						this.close( event );
++						// Different browsers have different default behavior for escape
++						// Single press can mean undo or clear
++						// Double press in IE means clear the whole form
++						event.preventDefault();
++					}
++					break;
++				default:
++					suppressKeyPressRepeat = true;
++					// search timeout should be triggered before the input value is changed
++					this._searchTimeout( event );
++					break;
++				}
++			},
++			keypress: function( event ) {
++				if ( suppressKeyPress ) {
++					suppressKeyPress = false;
++					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++						event.preventDefault();
++					}
++					return;
++				}
++				if ( suppressKeyPressRepeat ) {
++					return;
++				}
++
++				// replicate some key handlers to allow them to repeat in Firefox and Opera
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					this._keyEvent( "next", event );
++					break;
++				}
++			},
++			input: function( event ) {
++				if ( suppressInput ) {
++					suppressInput = false;
++					event.preventDefault();
++					return;
++				}
++				this._searchTimeout( event );
++			},
++			focus: function() {
++				this.selectedItem = null;
++				this.previous = this._value();
++			},
++			blur: function( event ) {
++				if ( this.cancelBlur ) {
++					delete this.cancelBlur;
++					return;
++				}
++
++				clearTimeout( this.searching );
++				this.close( event );
++				this._change( event );
++			}
++		});
++
++		this._initSource();
++		this.menu = $( "<ul>" )
++			.addClass( "ui-autocomplete ui-front" )
++			.appendTo( this._appendTo() )
++			.menu({
++				// disable ARIA support, the live region takes care of that
++				role: null
++			})
++			.hide()
++			.data( "ui-menu" );
++
++		this._on( this.menu.element, {
++			mousedown: function( event ) {
++				// prevent moving focus out of the text field
++				event.preventDefault();
++
++				// IE doesn't prevent moving focus even with event.preventDefault()
++				// so we set a flag to know when we should ignore the blur event
++				this.cancelBlur = true;
++				this._delay(function() {
++					delete this.cancelBlur;
++				});
++
++				// clicking on the scrollbar causes focus to shift to the body
++				// but we can't detect a mouseup or a click immediately afterward
++				// so we have to track the next mousedown and close the menu if
++				// the user clicks somewhere outside of the autocomplete
++				var menuElement = this.menu.element[ 0 ];
++				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
++					this._delay(function() {
++						var that = this;
++						this.document.one( "mousedown", function( event ) {
++							if ( event.target !== that.element[ 0 ] &&
++									event.target !== menuElement &&
++									!$.contains( menuElement, event.target ) ) {
++								that.close();
++							}
++						});
++					});
++				}
++			},
++			menufocus: function( event, ui ) {
++				// support: Firefox
++				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
++				if ( this.isNewMenu ) {
++					this.isNewMenu = false;
++					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
++						this.menu.blur();
++
++						this.document.one( "mousemove", function() {
++							$( event.target ).trigger( event.originalEvent );
++						});
++
++						return;
++					}
++				}
++
++				var item = ui.item.data( "ui-autocomplete-item" );
++				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
++					// use value to match what will end up in the input, if it was a key event
++					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
++						this._value( item.value );
++					}
++				} else {
++					// Normally the input is populated with the item's value as the
++					// menu is navigated, causing screen readers to notice a change and
++					// announce the item. Since the focus event was canceled, this doesn't
++					// happen, so we update the live region so that screen readers can
++					// still notice the change and announce it.
++					this.liveRegion.text( item.value );
++				}
++			},
++			menuselect: function( event, ui ) {
++				var item = ui.item.data( "ui-autocomplete-item" ),
++					previous = this.previous;
++
++				// only trigger when focus was lost (click on menu)
++				if ( this.element[0] !== this.document[0].activeElement ) {
++					this.element.focus();
++					this.previous = previous;
++					// #6109 - IE triggers two focus events and the second
++					// is asynchronous, so we need to reset the previous
++					// term synchronously and asynchronously :-(
++					this._delay(function() {
++						this.previous = previous;
++						this.selectedItem = item;
++					});
++				}
++
++				if ( false !== this._trigger( "select", event, { item: item } ) ) {
++					this._value( item.value );
++				}
++				// reset the term after the select event
++				// this allows custom select handling to work properly
++				this.term = this._value();
++
++				this.close( event );
++				this.selectedItem = item;
++			}
++		});
++
++		this.liveRegion = $( "<span>", {
++				role: "status",
++				"aria-live": "polite"
++			})
++			.addClass( "ui-helper-hidden-accessible" )
++			.insertBefore( this.element );
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_destroy: function() {
++		clearTimeout( this.searching );
++		this.element
++			.removeClass( "ui-autocomplete-input" )
++			.removeAttr( "autocomplete" );
++		this.menu.element.remove();
++		this.liveRegion.remove();
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "source" ) {
++			this._initSource();
++		}
++		if ( key === "appendTo" ) {
++			this.menu.element.appendTo( this._appendTo() );
++		}
++		if ( key === "disabled" && value && this.xhr ) {
++			this.xhr.abort();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++
++		if ( element ) {
++			element = element.jquery || element.nodeType ?
++				$( element ) :
++				this.document.find( element ).eq( 0 );
++		}
++
++		if ( !element ) {
++			element = this.element.closest( ".ui-front" );
++		}
++
++		if ( !element.length ) {
++			element = this.document[0].body;
++		}
++
++		return element;
++	},
++
++	_initSource: function() {
++		var array, url,
++			that = this;
++		if ( $.isArray(this.options.source) ) {
++			array = this.options.source;
++			this.source = function( request, response ) {
++				response( $.ui.autocomplete.filter( array, request.term ) );
++			};
++		} else if ( typeof this.options.source === "string" ) {
++			url = this.options.source;
++			this.source = function( request, response ) {
++				if ( that.xhr ) {
++					that.xhr.abort();
++				}
++				that.xhr = $.ajax({
++					url: url,
++					data: request,
++					dataType: "json",
++					success: function( data ) {
++						response( data );
++					},
++					error: function() {
++						response( [] );
++					}
++				});
++			};
++		} else {
++			this.source = this.options.source;
++		}
++	},
++
++	_searchTimeout: function( event ) {
++		clearTimeout( this.searching );
++		this.searching = this._delay(function() {
++			// only search if the value has changed
++			if ( this.term !== this._value() ) {
++				this.selectedItem = null;
++				this.search( null, event );
++			}
++		}, this.options.delay );
++	},
++
++	search: function( value, event ) {
++		value = value != null ? value : this._value();
++
++		// always save the actual value, not the one passed as an argument
++		this.term = this._value();
++
++		if ( value.length < this.options.minLength ) {
++			return this.close( event );
++		}
++
++		if ( this._trigger( "search", event ) === false ) {
++			return;
++		}
++
++		return this._search( value );
++	},
++
++	_search: function( value ) {
++		this.pending++;
++		this.element.addClass( "ui-autocomplete-loading" );
++		this.cancelSearch = false;
++
++		this.source( { term: value }, this._response() );
++	},
++
++	_response: function() {
++		var that = this,
++			index = ++requestIndex;
++
++		return function( content ) {
++			if ( index === requestIndex ) {
++				that.__response( content );
++			}
++
++			that.pending--;
++			if ( !that.pending ) {
++				that.element.removeClass( "ui-autocomplete-loading" );
++			}
++		};
++	},
++
++	__response: function( content ) {
++		if ( content ) {
++			content = this._normalize( content );
++		}
++		this._trigger( "response", null, { content: content } );
++		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
++			this._suggest( content );
++			this._trigger( "open" );
++		} else {
++			// use ._close() instead of .close() so we don't cancel future searches
++			this._close();
++		}
++	},
++
++	close: function( event ) {
++		this.cancelSearch = true;
++		this._close( event );
++	},
++
++	_close: function( event ) {
++		if ( this.menu.element.is( ":visible" ) ) {
++			this.menu.element.hide();
++			this.menu.blur();
++			this.isNewMenu = true;
++			this._trigger( "close", event );
++		}
++	},
++
++	_change: function( event ) {
++		if ( this.previous !== this._value() ) {
++			this._trigger( "change", event, { item: this.selectedItem } );
++		}
++	},
++
++	_normalize: function( items ) {
++		// assume all items have the right format when the first item is complete
++		if ( items.length && items[0].label && items[0].value ) {
++			return items;
++		}
++		return $.map( items, function( item ) {
++			if ( typeof item === "string" ) {
++				return {
++					label: item,
++					value: item
++				};
++			}
++			return $.extend({
++				label: item.label || item.value,
++				value: item.value || item.label
++			}, item );
++		});
++	},
++
++	_suggest: function( items ) {
++		var ul = this.menu.element.empty();
++		this._renderMenu( ul, items );
++		this.isNewMenu = true;
++		this.menu.refresh();
++
++		// size and position menu
++		ul.show();
++		this._resizeMenu();
++		ul.position( $.extend({
++			of: this.element
++		}, this.options.position ));
++
++		if ( this.options.autoFocus ) {
++			this.menu.next();
++		}
++	},
++
++	_resizeMenu: function() {
++		var ul = this.menu.element;
++		ul.outerWidth( Math.max(
++			// Firefox wraps long text (possibly a rounding bug)
++			// so we add 1px to avoid the wrapping (#7513)
++			ul.width( "" ).outerWidth() + 1,
++			this.element.outerWidth()
++		) );
++	},
++
++	_renderMenu: function( ul, items ) {
++		var that = this;
++		$.each( items, function( index, item ) {
++			that._renderItemData( ul, item );
++		});
++	},
++
++	_renderItemData: function( ul, item ) {
++		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
++	},
++
++	_renderItem: function( ul, item ) {
++		return $( "<li>" )
++			.append( $( "<a>" ).text( item.label ) )
++			.appendTo( ul );
++	},
++
++	_move: function( direction, event ) {
++		if ( !this.menu.element.is( ":visible" ) ) {
++			this.search( null, event );
++			return;
++		}
++		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
++				this.menu.isLastItem() && /^next/.test( direction ) ) {
++			this._value( this.term );
++			this.menu.blur();
++			return;
++		}
++		this.menu[ direction ]( event );
++	},
++
++	widget: function() {
++		return this.menu.element;
++	},
++
++	_value: function() {
++		return this.valueMethod.apply( this.element, arguments );
++	},
++
++	_keyEvent: function( keyEvent, event ) {
++		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++			this._move( keyEvent, event );
++
++			// prevents moving cursor to beginning/end of the text field in some browsers
++			event.preventDefault();
++		}
++	}
++});
++
++$.extend( $.ui.autocomplete, {
++	escapeRegex: function( value ) {
++		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
++	},
++	filter: function(array, term) {
++		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
++		return $.grep( array, function(value) {
++			return matcher.test( value.label || value.value || value );
++		});
++	}
++});
++
++
++// live region extension, adding a `messages` option
++// NOTE: This is an experimental API. We are still investigating
++// a full solution for string manipulation and internationalization.
++$.widget( "ui.autocomplete", $.ui.autocomplete, {
++	options: {
++		messages: {
++			noResults: "No search results.",
++			results: function( amount ) {
++				return amount + ( amount > 1 ? " results are" : " result is" ) +
++					" available, use up and down arrow keys to navigate.";
++			}
++		}
++	},
++
++	__response: function( content ) {
++		var message;
++		this._superApply( arguments );
++		if ( this.options.disabled || this.cancelSearch ) {
++			return;
++		}
++		if ( content && content.length ) {
++			message = this.options.messages.results( content.length );
++		} else {
++			message = this.options.messages.noResults;
++		}
++		this.liveRegion.text( message );
++	}
++});
++
++}( jQuery ));
++(function( $, undefined ) {
++
++var lastActive, startXPos, startYPos, clickDragged,
++	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
++	stateClasses = "ui-state-hover ui-state-active ",
++	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
++	formResetHandler = function() {
++		var form = $( this );
++		setTimeout(function() {
++			form.find( ":ui-button" ).button( "refresh" );
++		}, 1 );
++	},
++	radioGroup = function( radio ) {
++		var name = radio.name,
++			form = radio.form,
++			radios = $( [] );
++		if ( name ) {
++			name = name.replace( /'/g, "\\'" );
++			if ( form ) {
++				radios = $( form ).find( "[name='" + name + "']" );
++			} else {
++				radios = $( "[name='" + name + "']", radio.ownerDocument )
++					.filter(function() {
++						return !this.form;
++					});
++			}
++		}
++		return radios;
++	};
++
++$.widget( "ui.button", {
++	version: "1.10.3",
++	defaultElement: "<button>",
++	options: {
++		disabled: null,
++		text: true,
++		label: null,
++		icons: {
++			primary: null,
++			secondary: null
++		}
++	},
++	_create: function() {
++		this.element.closest( "form" )
++			.unbind( "reset" + this.eventNamespace )
++			.bind( "reset" + this.eventNamespace, formResetHandler );
++
++		if ( typeof this.options.disabled !== "boolean" ) {
++			this.options.disabled = !!this.element.prop( "disabled" );
++		} else {
++			this.element.prop( "disabled", this.options.disabled );
++		}
++
++		this._determineButtonType();
++		this.hasTitle = !!this.buttonElement.attr( "title" );
++
++		var that = this,
++			options = this.options,
++			toggleButton = this.type === "checkbox" || this.type === "radio",
++			activeClass = !toggleButton ? "ui-state-active" : "",
++			focusClass = "ui-state-focus";
++
++		if ( options.label === null ) {
++			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
++		}
++
++		this._hoverable( this.buttonElement );
++
++		this.buttonElement
++			.addClass( baseClasses )
++			.attr( "role", "button" )
++			.bind( "mouseenter" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				if ( this === lastActive ) {
++					$( this ).addClass( "ui-state-active" );
++				}
++			})
++			.bind( "mouseleave" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( activeClass );
++			})
++			.bind( "click" + this.eventNamespace, function( event ) {
++				if ( options.disabled ) {
++					event.preventDefault();
++					event.stopImmediatePropagation();
++				}
++			});
++
++		this.element
++			.bind( "focus" + this.eventNamespace, function() {
++				// no need to check disabled, focus won't be triggered anyway
++				that.buttonElement.addClass( focusClass );
++			})
++			.bind( "blur" + this.eventNamespace, function() {
++				that.buttonElement.removeClass( focusClass );
++			});
++
++		if ( toggleButton ) {
++			this.element.bind( "change" + this.eventNamespace, function() {
++				if ( clickDragged ) {
++					return;
++				}
++				that.refresh();
++			});
++			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
++			// prevents issue where button state changes but checkbox/radio checked state
++			// does not in Firefox (see ticket #6970)
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					clickDragged = false;
++					startXPos = event.pageX;
++					startYPos = event.pageY;
++				})
++				.bind( "mouseup" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
++						clickDragged = true;
++					}
++			});
++		}
++
++		if ( this.type === "checkbox" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++			});
++		} else if ( this.type === "radio" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).addClass( "ui-state-active" );
++				that.buttonElement.attr( "aria-pressed", "true" );
++
++				var radio = that.element[ 0 ];
++				radioGroup( radio )
++					.not( radio )
++					.map(function() {
++						return $( this ).button( "widget" )[ 0 ];
++					})
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			});
++		} else {
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).addClass( "ui-state-active" );
++					lastActive = this;
++					that.document.one( "mouseup", function() {
++						lastActive = null;
++					});
++				})
++				.bind( "mouseup" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).removeClass( "ui-state-active" );
++				})
++				.bind( "keydown" + this.eventNamespace, function(event) {
++					if ( options.disabled ) {
++						return false;
++					}
++					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
++						$( this ).addClass( "ui-state-active" );
++					}
++				})
++				// see #8559, we bind to blur here in case the button element loses
++				// focus between keydown and keyup, it would be left in an "active" state
++				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
++					$( this ).removeClass( "ui-state-active" );
++				});
++
++			if ( this.buttonElement.is("a") ) {
++				this.buttonElement.keyup(function(event) {
++					if ( event.keyCode === $.ui.keyCode.SPACE ) {
++						// TODO pass through original event correctly (just as 2nd argument doesn't work)
++						$( this ).click();
++					}
++				});
++			}
++		}
++
++		// TODO: pull out $.Widget's handling for the disabled option into
++		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
++		// be overridden by individual plugins
++		this._setOption( "disabled", options.disabled );
++		this._resetButton();
++	},
++
++	_determineButtonType: function() {
++		var ancestor, labelSelector, checked;
++
++		if ( this.element.is("[type=checkbox]") ) {
++			this.type = "checkbox";
++		} else if ( this.element.is("[type=radio]") ) {
++			this.type = "radio";
++		} else if ( this.element.is("input") ) {
++			this.type = "input";
++		} else {
++			this.type = "button";
++		}
++
++		if ( this.type === "checkbox" || this.type === "radio" ) {
++			// we don't search against the document in case the element
++			// is disconnected from the DOM
++			ancestor = this.element.parents().last();
++			labelSelector = "label[for='" + this.element.attr("id") + "']";
++			this.buttonElement = ancestor.find( labelSelector );
++			if ( !this.buttonElement.length ) {
++				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
++				this.buttonElement = ancestor.filter( labelSelector );
++				if ( !this.buttonElement.length ) {
++					this.buttonElement = ancestor.find( labelSelector );
++				}
++			}
++			this.element.addClass( "ui-helper-hidden-accessible" );
++
++			checked = this.element.is( ":checked" );
++			if ( checked ) {
++				this.buttonElement.addClass( "ui-state-active" );
++			}
++			this.buttonElement.prop( "aria-pressed", checked );
++		} else {
++			this.buttonElement = this.element;
++		}
++	},
++
++	widget: function() {
++		return this.buttonElement;
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-helper-hidden-accessible" );
++		this.buttonElement
++			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
++			.removeAttr( "role" )
++			.removeAttr( "aria-pressed" )
++			.html( this.buttonElement.find(".ui-button-text").html() );
++
++		if ( !this.hasTitle ) {
++			this.buttonElement.removeAttr( "title" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++			} else {
++				this.element.prop( "disabled", false );
++			}
++			return;
++		}
++		this._resetButton();
++	},
++
++	refresh: function() {
++		//See #8237 & #8828
++		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
++
++		if ( isDisabled !== this.options.disabled ) {
++			this._setOption( "disabled", isDisabled );
++		}
++		if ( this.type === "radio" ) {
++			radioGroup( this.element[0] ).each(function() {
++				if ( $( this ).is( ":checked" ) ) {
++					$( this ).button( "widget" )
++						.addClass( "ui-state-active" )
++						.attr( "aria-pressed", "true" );
++				} else {
++					$( this ).button( "widget" )
++						.removeClass( "ui-state-active" )
++						.attr( "aria-pressed", "false" );
++				}
++			});
++		} else if ( this.type === "checkbox" ) {
++			if ( this.element.is( ":checked" ) ) {
++				this.buttonElement
++					.addClass( "ui-state-active" )
++					.attr( "aria-pressed", "true" );
++			} else {
++				this.buttonElement
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			}
++		}
++	},
++
++	_resetButton: function() {
++		if ( this.type === "input" ) {
++			if ( this.options.label ) {
++				this.element.val( this.options.label );
++			}
++			return;
++		}
++		var buttonElement = this.buttonElement.removeClass( typeClasses ),
++			buttonText = $( "<span></span>", this.document[0] )
++				.addClass( "ui-button-text" )
++				.html( this.options.label )
++				.appendTo( buttonElement.empty() )
++				.text(),
++			icons = this.options.icons,
++			multipleIcons = icons.primary && icons.secondary,
++			buttonClasses = [];
++
++		if ( icons.primary || icons.secondary ) {
++			if ( this.options.text ) {
++				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
++			}
++
++			if ( icons.primary ) {
++				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
++			}
++
++			if ( icons.secondary ) {
++				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
++			}
++
++			if ( !this.options.text ) {
++				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
++
++				if ( !this.hasTitle ) {
++					buttonElement.attr( "title", $.trim( buttonText ) );
++				}
++			}
++		} else {
++			buttonClasses.push( "ui-button-text-only" );
++		}
++		buttonElement.addClass( buttonClasses.join( " " ) );
++	}
++});
++
++$.widget( "ui.buttonset", {
++	version: "1.10.3",
++	options: {
++		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
++	},
++
++	_create: function() {
++		this.element.addClass( "ui-buttonset" );
++	},
++
++	_init: function() {
++		this.refresh();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "disabled" ) {
++			this.buttons.button( "option", key, value );
++		}
++
++		this._super( key, value );
++	},
++
++	refresh: function() {
++		var rtl = this.element.css( "direction" ) === "rtl";
++
++		this.buttons = this.element.find( this.options.items )
++			.filter( ":ui-button" )
++				.button( "refresh" )
++			.end()
++			.not( ":ui-button" )
++				.button()
++			.end()
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
++				.filter( ":first" )
++					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
++				.end()
++				.filter( ":last" )
++					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
++				.end()
++			.end();
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-buttonset" );
++		this.buttons
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-left ui-corner-right" )
++			.end()
++			.button( "destroy" );
++	}
++});
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.extend($.ui, { datepicker: { version: "1.10.3" } });
++
++var PROP_NAME = "datepicker",
++	instActive;
++
++/* Date picker manager.
++   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
++   Settings for (groups of) date pickers are maintained in an instance object,
++   allowing multiple different settings on the same page. */
++
++function Datepicker() {
++	this._curInst = null; // The current instance in use
++	this._keyEvent = false; // If the last event was a key event
++	this._disabledInputs = []; // List of date picker inputs that have been disabled
++	this._datepickerShowing = false; // True if the popup picker is showing , false if not
++	this._inDialog = false; // True if showing within a "dialog", false if not
++	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
++	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
++	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
++	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
++	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
++	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
++	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
++	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
++	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
++	this.regional = []; // Available regional settings, indexed by language code
++	this.regional[""] = { // Default regional settings
++		closeText: "Done", // Display text for close link
++		prevText: "Prev", // Display text for previous month link
++		nextText: "Next", // Display text for next month link
++		currentText: "Today", // Display text for current month link
++		monthNames: ["January","February","March","April","May","June",
++			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
++		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
++		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
++		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
++		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
++		weekHeader: "Wk", // Column header for week of the year
++		dateFormat: "mm/dd/yy", // See format options on parseDate
++		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
++		isRTL: false, // True if right-to-left language, false if left-to-right
++		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
++		yearSuffix: "" // Additional text to append to the year in the month headers
++	};
++	this._defaults = { // Global defaults for all the date picker instances
++		showOn: "focus", // "focus" for popup on focus,
++			// "button" for trigger button, or "both" for either
++		showAnim: "fadeIn", // Name of jQuery animation for popup
++		showOptions: {}, // Options for enhanced animations
++		defaultDate: null, // Used when field is blank: actual date,
++			// +/-number for offset from today, null for today
++		appendText: "", // Display text following the input box, e.g. showing the format
++		buttonText: "...", // Text for trigger button
++		buttonImage: "", // URL for trigger button image
++		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
++		hideIfNoPrevNext: false, // True to hide next/previous month links
++			// if not applicable, false to just disable them
++		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
++		gotoCurrent: false, // True if today link goes back to current selection instead
++		changeMonth: false, // True if month can be selected directly, false if only prev/next
++		changeYear: false, // True if year can be selected directly, false if only prev/next
++		yearRange: "c-10:c+10", // Range of years to display in drop-down,
++			// either relative to today's year (-nn:+nn), relative to currently displayed year
++			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
++		showOtherMonths: false, // True to show dates in other months, false to leave blank
++		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
++		showWeek: false, // True to show week of the year, false to not show it
++		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
++			// takes a Date and returns the number of the week for it
++		shortYearCutoff: "+10", // Short year values < this are in the current century,
++			// > this are in the previous century,
++			// string value starting with "+" for current year + value
++		minDate: null, // The earliest selectable date, or null for no limit
++		maxDate: null, // The latest selectable date, or null for no limit
++		duration: "fast", // Duration of display/closure
++		beforeShowDay: null, // Function that takes a date and returns an array with
++			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
++			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
++		beforeShow: null, // Function that takes an input field and
++			// returns a set of custom settings for the date picker
++		onSelect: null, // Define a callback function when a date is selected
++		onChangeMonthYear: null, // Define a callback function when the month or year is changed
++		onClose: null, // Define a callback function when the datepicker is closed
++		numberOfMonths: 1, // Number of months to show at a time
++		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
++		stepMonths: 1, // Number of months to step back/forward
++		stepBigMonths: 12, // Number of months to step back/forward for the big links
++		altField: "", // Selector for an alternate field to store selected dates into
++		altFormat: "", // The date format to use for the alternate field
++		constrainInput: true, // The input is constrained by the current date format
++		showButtonPanel: false, // True to show button panel, false to not show it
++		autoSize: false, // True to size the input for the date format, false to leave as is
++		disabled: false // The initial disabled state
++	};
++	$.extend(this._defaults, this.regional[""]);
++	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
++}
++
++$.extend(Datepicker.prototype, {
++	/* Class name added to elements to indicate already configured with a date picker. */
++	markerClassName: "hasDatepicker",
++
++	//Keep track of the maximum number of rows displayed (see #7043)
++	maxRows: 4,
++
++	// TODO rename to "widget" when switching to widget factory
++	_widgetDatepicker: function() {
++		return this.dpDiv;
++	},
++
++	/* Override the default settings for all instances of the date picker.
++	 * @param  settings  object - the new settings to use as defaults (anonymous object)
++	 * @return the manager object
++	 */
++	setDefaults: function(settings) {
++		extendRemove(this._defaults, settings || {});
++		return this;
++	},
++
++	/* Attach the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
++	 */
++	_attachDatepicker: function(target, settings) {
++		var nodeName, inline, inst;
++		nodeName = target.nodeName.toLowerCase();
++		inline = (nodeName === "div" || nodeName === "span");
++		if (!target.id) {
++			this.uuid += 1;
++			target.id = "dp" + this.uuid;
++		}
++		inst = this._newInst($(target), inline);
++		inst.settings = $.extend({}, settings || {});
++		if (nodeName === "input") {
++			this._connectDatepicker(target, inst);
++		} else if (inline) {
++			this._inlineDatepicker(target, inst);
++		}
++	},
++
++	/* Create a new instance object. */
++	_newInst: function(target, inline) {
++		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
++		return {id: id, input: target, // associated target
++			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
++			drawMonth: 0, drawYear: 0, // month being drawn
++			inline: inline, // is datepicker inline or not
++			dpDiv: (!inline ? this.dpDiv : // presentation div
++			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
++	},
++
++	/* Attach the date picker to an input field. */
++	_connectDatepicker: function(target, inst) {
++		var input = $(target);
++		inst.append = $([]);
++		inst.trigger = $([]);
++		if (input.hasClass(this.markerClassName)) {
++			return;
++		}
++		this._attachments(input, inst);
++		input.addClass(this.markerClassName).keydown(this._doKeyDown).
++			keypress(this._doKeyPress).keyup(this._doKeyUp);
++		this._autoSize(inst);
++		$.data(target, PROP_NAME, inst);
++		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++	},
++
++	/* Make attachments based on settings. */
++	_attachments: function(input, inst) {
++		var showOn, buttonText, buttonImage,
++			appendText = this._get(inst, "appendText"),
++			isRTL = this._get(inst, "isRTL");
++
++		if (inst.append) {
++			inst.append.remove();
++		}
++		if (appendText) {
++			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
++			input[isRTL ? "before" : "after"](inst.append);
++		}
++
++		input.unbind("focus", this._showDatepicker);
++
++		if (inst.trigger) {
++			inst.trigger.remove();
++		}
++
++		showOn = this._get(inst, "showOn");
++		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
++			input.focus(this._showDatepicker);
++		}
++		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
++			buttonText = this._get(inst, "buttonText");
++			buttonImage = this._get(inst, "buttonImage");
++			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
++				$("<img/>").addClass(this._triggerClass).
++					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
++				$("<button type='button'></button>").addClass(this._triggerClass).
++					html(!buttonImage ? buttonText : $("<img/>").attr(
++					{ src:buttonImage, alt:buttonText, title:buttonText })));
++			input[isRTL ? "before" : "after"](inst.trigger);
++			inst.trigger.click(function() {
++				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
++					$.datepicker._hideDatepicker();
++				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
++					$.datepicker._hideDatepicker();
++					$.datepicker._showDatepicker(input[0]);
++				} else {
++					$.datepicker._showDatepicker(input[0]);
++				}
++				return false;
++			});
++		}
++	},
++
++	/* Apply the maximum length for the date format. */
++	_autoSize: function(inst) {
++		if (this._get(inst, "autoSize") && !inst.inline) {
++			var findMax, max, maxI, i,
++				date = new Date(2009, 12 - 1, 20), // Ensure double digits
++				dateFormat = this._get(inst, "dateFormat");
++
++			if (dateFormat.match(/[DM]/)) {
++				findMax = function(names) {
++					max = 0;
++					maxI = 0;
++					for (i = 0; i < names.length; i++) {
++						if (names[i].length > max) {
++							max = names[i].length;
++							maxI = i;
++						}
++					}
++					return maxI;
++				};
++				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
++					"monthNames" : "monthNamesShort"))));
++				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
++					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
++			}
++			inst.input.attr("size", this._formatDate(inst, date).length);
++		}
++	},
++
++	/* Attach an inline date picker to a div. */
++	_inlineDatepicker: function(target, inst) {
++		var divSpan = $(target);
++		if (divSpan.hasClass(this.markerClassName)) {
++			return;
++		}
++		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
++		$.data(target, PROP_NAME, inst);
++		this._setDate(inst, this._getDefaultDate(inst), true);
++		this._updateDatepicker(inst);
++		this._updateAlternate(inst);
++		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
++		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
++		inst.dpDiv.css( "display", "block" );
++	},
++
++	/* Pop-up the date picker in a "dialog" box.
++	 * @param  input element - ignored
++	 * @param  date	string or Date - the initial date to display
++	 * @param  onSelect  function - the function to call when a date is selected
++	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
++	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
++	 *					event - with x/y coordinates or
++	 *					leave empty for default (screen centre)
++	 * @return the manager object
++	 */
++	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
++		var id, browserWidth, browserHeight, scrollX, scrollY,
++			inst = this._dialogInst; // internal instance
++
++		if (!inst) {
++			this.uuid += 1;
++			id = "dp" + this.uuid;
++			this._dialogInput = $("<input type='text' id='" + id +
++				"' style='position: absolute; top: -100px; width: 0px;'/>");
++			this._dialogInput.keydown(this._doKeyDown);
++			$("body").append(this._dialogInput);
++			inst = this._dialogInst = this._newInst(this._dialogInput, false);
++			inst.settings = {};
++			$.data(this._dialogInput[0], PROP_NAME, inst);
++		}
++		extendRemove(inst.settings, settings || {});
++		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
++		this._dialogInput.val(date);
++
++		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
++		if (!this._pos) {
++			browserWidth = document.documentElement.clientWidth;
++			browserHeight = document.documentElement.clientHeight;
++			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
++			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
++			this._pos = // should use actual width/height below
++				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
++		}
++
++		// move input on screen for focus, but hidden behind dialog
++		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
++		inst.settings.onSelect = onSelect;
++		this._inDialog = true;
++		this.dpDiv.addClass(this._dialogClass);
++		this._showDatepicker(this._dialogInput[0]);
++		if ($.blockUI) {
++			$.blockUI(this.dpDiv);
++		}
++		$.data(this._dialogInput[0], PROP_NAME, inst);
++		return this;
++	},
++
++	/* Detach a datepicker from its control.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_destroyDatepicker: function(target) {
++		var nodeName,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		$.removeData(target, PROP_NAME);
++		if (nodeName === "input") {
++			inst.append.remove();
++			inst.trigger.remove();
++			$target.removeClass(this.markerClassName).
++				unbind("focus", this._showDatepicker).
++				unbind("keydown", this._doKeyDown).
++				unbind("keypress", this._doKeyPress).
++				unbind("keyup", this._doKeyUp);
++		} else if (nodeName === "div" || nodeName === "span") {
++			$target.removeClass(this.markerClassName).empty();
++		}
++	},
++
++	/* Enable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_enableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = false;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = false; }).end().
++				filter("img").css({opacity: "1.0", cursor: ""});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().removeClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", false);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++	},
++
++	/* Disable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_disableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = true;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = true; }).end().
++				filter("img").css({opacity: "0.5", cursor: "default"});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().addClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", true);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++		this._disabledInputs[this._disabledInputs.length] = target;
++	},
++
++	/* Is the first field in a jQuery collection disabled as a datepicker?
++	 * @param  target	element - the target input field or division or span
++	 * @return boolean - true if disabled, false if enabled
++	 */
++	_isDisabledDatepicker: function(target) {
++		if (!target) {
++			return false;
++		}
++		for (var i = 0; i < this._disabledInputs.length; i++) {
++			if (this._disabledInputs[i] === target) {
++				return true;
++			}
++		}
++		return false;
++	},
++
++	/* Retrieve the instance data for the target control.
++	 * @param  target  element - the target input field or division or span
++	 * @return  object - the associated instance data
++	 * @throws  error if a jQuery problem getting data
++	 */
++	_getInst: function(target) {
++		try {
++			return $.data(target, PROP_NAME);
++		}
++		catch (err) {
++			throw "Missing instance data for this datepicker";
++		}
++	},
++
++	/* Update or retrieve the settings for a date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 * @param  name	object - the new settings to update or
++	 *				string - the name of the setting to change or retrieve,
++	 *				when retrieving also "all" for all instance settings or
++	 *				"defaults" for all global defaults
++	 * @param  value   any - the new value for the setting
++	 *				(omit if above is an object or to retrieve a value)
++	 */
++	_optionDatepicker: function(target, name, value) {
++		var settings, date, minDate, maxDate,
++			inst = this._getInst(target);
++
++		if (arguments.length === 2 && typeof name === "string") {
++			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
++				(inst ? (name === "all" ? $.extend({}, inst.settings) :
++				this._get(inst, name)) : null));
++		}
++
++		settings = name || {};
++		if (typeof name === "string") {
++			settings = {};
++			settings[name] = value;
++		}
++
++		if (inst) {
++			if (this._curInst === inst) {
++				this._hideDatepicker();
++			}
++
++			date = this._getDateDatepicker(target, true);
++			minDate = this._getMinMaxDate(inst, "min");
++			maxDate = this._getMinMaxDate(inst, "max");
++			extendRemove(inst.settings, settings);
++			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
++			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
++				inst.settings.minDate = this._formatDate(inst, minDate);
++			}
++			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
++				inst.settings.maxDate = this._formatDate(inst, maxDate);
++			}
++			if ( "disabled" in settings ) {
++				if ( settings.disabled ) {
++					this._disableDatepicker(target);
++				} else {
++					this._enableDatepicker(target);
++				}
++			}
++			this._attachments($(target), inst);
++			this._autoSize(inst);
++			this._setDate(inst, date);
++			this._updateAlternate(inst);
++			this._updateDatepicker(inst);
++		}
++	},
++
++	// change method deprecated
++	_changeDatepicker: function(target, name, value) {
++		this._optionDatepicker(target, name, value);
++	},
++
++	/* Redraw the date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 */
++	_refreshDatepicker: function(target) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._updateDatepicker(inst);
++		}
++	},
++
++	/* Set the dates for a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  date	Date - the new date
++	 */
++	_setDateDatepicker: function(target, date) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._setDate(inst, date);
++			this._updateDatepicker(inst);
++			this._updateAlternate(inst);
++		}
++	},
++
++	/* Get the date(s) for the first entry in a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  noDefault boolean - true if no default date is to be used
++	 * @return Date - the current date
++	 */
++	_getDateDatepicker: function(target, noDefault) {
++		var inst = this._getInst(target);
++		if (inst && !inst.inline) {
++			this._setDateFromField(inst, noDefault);
++		}
++		return (inst ? this._getDate(inst) : null);
++	},
++
++	/* Handle keystrokes. */
++	_doKeyDown: function(event) {
++		var onSelect, dateStr, sel,
++			inst = $.datepicker._getInst(event.target),
++			handled = true,
++			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
++
++		inst._keyEvent = true;
++		if ($.datepicker._datepickerShowing) {
++			switch (event.keyCode) {
++				case 9: $.datepicker._hideDatepicker();
++						handled = false;
++						break; // hide on tab out
++				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
++									$.datepicker._currentClass + ")", inst.dpDiv);
++						if (sel[0]) {
++							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
++						}
++
++						onSelect = $.datepicker._get(inst, "onSelect");
++						if (onSelect) {
++							dateStr = $.datepicker._formatDate(inst);
++
++							// trigger custom callback
++							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++						} else {
++							$.datepicker._hideDatepicker();
++						}
++
++						return false; // don't submit the form
++				case 27: $.datepicker._hideDatepicker();
++						break; // hide on escape
++				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							-$.datepicker._get(inst, "stepBigMonths") :
++							-$.datepicker._get(inst, "stepMonths")), "M");
++						break; // previous month/year on page up/+ ctrl
++				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							+$.datepicker._get(inst, "stepBigMonths") :
++							+$.datepicker._get(inst, "stepMonths")), "M");
++						break; // next month/year on page down/+ ctrl
++				case 35: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._clearDate(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // clear on ctrl or command +end
++				case 36: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._gotoToday(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // current on ctrl or command +home
++				case 37: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// -1 day on ctrl or command +left
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								-$.datepicker._get(inst, "stepBigMonths") :
++								-$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +left on Mac
++						break;
++				case 38: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, -7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // -1 week on ctrl or command +up
++				case 39: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// +1 day on ctrl or command +right
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								+$.datepicker._get(inst, "stepBigMonths") :
++								+$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +right
++						break;
++				case 40: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, +7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // +1 week on ctrl or command +down
++				default: handled = false;
++			}
++		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
++			$.datepicker._showDatepicker(this);
++		} else {
++			handled = false;
++		}
++
++		if (handled) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++	},
++
++	/* Filter entered characters - based on date format. */
++	_doKeyPress: function(event) {
++		var chars, chr,
++			inst = $.datepicker._getInst(event.target);
++
++		if ($.datepicker._get(inst, "constrainInput")) {
++			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
++			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
++			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
++		}
++	},
++
++	/* Synchronise manual entry and field/alternate field. */
++	_doKeyUp: function(event) {
++		var date,
++			inst = $.datepicker._getInst(event.target);
++
++		if (inst.input.val() !== inst.lastVal) {
++			try {
++				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++					(inst.input ? inst.input.val() : null),
++					$.datepicker._getFormatConfig(inst));
++
++				if (date) { // only if valid
++					$.datepicker._setDateFromField(inst);
++					$.datepicker._updateAlternate(inst);
++					$.datepicker._updateDatepicker(inst);
++				}
++			}
++			catch (err) {
++			}
++		}
++		return true;
++	},
++
++	/* Pop-up the date picker for a given input field.
++	 * If false returned from beforeShow event handler do not show.
++	 * @param  input  element - the input field attached to the date picker or
++	 *					event - if triggered by focus
++	 */
++	_showDatepicker: function(input) {
++		input = input.target || input;
++		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
++			input = $("input", input.parentNode)[0];
++		}
++
++		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
++			return;
++		}
++
++		var inst, beforeShow, beforeShowSettings, isFixed,
++			offset, showAnim, duration;
++
++		inst = $.datepicker._getInst(input);
++		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
++			$.datepicker._curInst.dpDiv.stop(true, true);
++			if ( inst && $.datepicker._datepickerShowing ) {
++				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
++			}
++		}
++
++		beforeShow = $.datepicker._get(inst, "beforeShow");
++		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
++		if(beforeShowSettings === false){
++			return;
++		}
++		extendRemove(inst.settings, beforeShowSettings);
++
++		inst.lastVal = null;
++		$.datepicker._lastInput = input;
++		$.datepicker._setDateFromField(inst);
++
++		if ($.datepicker._inDialog) { // hide cursor
++			input.value = "";
++		}
++		if (!$.datepicker._pos) { // position below input
++			$.datepicker._pos = $.datepicker._findPos(input);
++			$.datepicker._pos[1] += input.offsetHeight; // add the height
++		}
++
++		isFixed = false;
++		$(input).parents().each(function() {
++			isFixed |= $(this).css("position") === "fixed";
++			return !isFixed;
++		});
++
++		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
++		$.datepicker._pos = null;
++		//to avoid flashes on Firefox
++		inst.dpDiv.empty();
++		// determine sizing offscreen
++		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
++		$.datepicker._updateDatepicker(inst);
++		// fix width for dynamic number of date pickers
++		// and adjust position before showing
++		offset = $.datepicker._checkOffset(inst, offset, isFixed);
++		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
++			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
++			left: offset.left + "px", top: offset.top + "px"});
++
++		if (!inst.inline) {
++			showAnim = $.datepicker._get(inst, "showAnim");
++			duration = $.datepicker._get(inst, "duration");
++			inst.dpDiv.zIndex($(input).zIndex()+1);
++			$.datepicker._datepickerShowing = true;
++
++			if ( $.effects && $.effects.effect[ showAnim ] ) {
++				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
++			} else {
++				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
++			}
++
++			if ( $.datepicker._shouldFocusInput( inst ) ) {
++				inst.input.focus();
++			}
++
++			$.datepicker._curInst = inst;
++		}
++	},
++
++	/* Generate the date picker content. */
++	_updateDatepicker: function(inst) {
++		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
++		instActive = inst; // for delegate hover events
++		inst.dpDiv.empty().append(this._generateHTML(inst));
++		this._attachHandlers(inst);
++		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
++
++		var origyearshtml,
++			numMonths = this._getNumberOfMonths(inst),
++			cols = numMonths[1],
++			width = 17;
++
++		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
++		if (cols > 1) {
++			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
++		}
++		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
++			"Class"]("ui-datepicker-multi");
++		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
++			"Class"]("ui-datepicker-rtl");
++
++		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
++			inst.input.focus();
++		}
++
++		// deffered render of the years select (to avoid flashes on Firefox)
++		if( inst.yearshtml ){
++			origyearshtml = inst.yearshtml;
++			setTimeout(function(){
++				//assure that inst.yearshtml didn't change.
++				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
++					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
++				}
++				origyearshtml = inst.yearshtml = null;
++			}, 0);
++		}
++	},
++
++	// #6694 - don't focus the input if it's already focused
++	// this breaks the change event in IE
++	// Support: IE and jQuery <1.9
++	_shouldFocusInput: function( inst ) {
++		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
++	},
++
++	/* Check positioning to remain on screen. */
++	_checkOffset: function(inst, offset, isFixed) {
++		var dpWidth = inst.dpDiv.outerWidth(),
++			dpHeight = inst.dpDiv.outerHeight(),
++			inputWidth = inst.input ? inst.input.outerWidth() : 0,
++			inputHeight = inst.input ? inst.input.outerHeight() : 0,
++			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
++			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
++
++		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
++		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
++		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
++
++		// now check if datepicker is showing outside window viewport - move to a better place if so.
++		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
++			Math.abs(offset.left + dpWidth - viewWidth) : 0);
++		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
++			Math.abs(dpHeight + inputHeight) : 0);
++
++		return offset;
++	},
++
++	/* Find an object's position on the screen. */
++	_findPos: function(obj) {
++		var position,
++			inst = this._getInst(obj),
++			isRTL = this._get(inst, "isRTL");
++
++		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
++			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
++		}
++
++		position = $(obj).offset();
++		return [position.left, position.top];
++	},
++
++	/* Hide the date picker from view.
++	 * @param  input  element - the input field attached to the date picker
++	 */
++	_hideDatepicker: function(input) {
++		var showAnim, duration, postProcess, onClose,
++			inst = this._curInst;
++
++		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
++			return;
++		}
++
++		if (this._datepickerShowing) {
++			showAnim = this._get(inst, "showAnim");
++			duration = this._get(inst, "duration");
++			postProcess = function() {
++				$.datepicker._tidyDialog(inst);
++			};
++
++			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
++			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
++				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
++			} else {
++				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
++					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
++			}
++
++			if (!showAnim) {
++				postProcess();
++			}
++			this._datepickerShowing = false;
++
++			onClose = this._get(inst, "onClose");
++			if (onClose) {
++				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
++			}
++
++			this._lastInput = null;
++			if (this._inDialog) {
++				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
++				if ($.blockUI) {
++					$.unblockUI();
++					$("body").append(this.dpDiv);
++				}
++			}
++			this._inDialog = false;
++		}
++	},
++
++	/* Tidy up after a dialog display. */
++	_tidyDialog: function(inst) {
++		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
++	},
++
++	/* Close date picker if clicked elsewhere. */
++	_checkExternalClick: function(event) {
++		if (!$.datepicker._curInst) {
++			return;
++		}
++
++		var $target = $(event.target),
++			inst = $.datepicker._getInst($target[0]);
++
++		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
++				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
++				!$target.hasClass($.datepicker.markerClassName) &&
++				!$target.closest("." + $.datepicker._triggerClass).length &&
++				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
++			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
++				$.datepicker._hideDatepicker();
++		}
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustDate: function(id, offset, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		this._adjustInstDate(inst, offset +
++			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
++			period);
++		this._updateDatepicker(inst);
++	},
++
++	/* Action for current link. */
++	_gotoToday: function(id) {
++		var date,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
++			inst.selectedDay = inst.currentDay;
++			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
++			inst.drawYear = inst.selectedYear = inst.currentYear;
++		} else {
++			date = new Date();
++			inst.selectedDay = date.getDate();
++			inst.drawMonth = inst.selectedMonth = date.getMonth();
++			inst.drawYear = inst.selectedYear = date.getFullYear();
++		}
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a new month/year. */
++	_selectMonthYear: function(id, select, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		inst["selected" + (period === "M" ? "Month" : "Year")] =
++		inst["draw" + (period === "M" ? "Month" : "Year")] =
++			parseInt(select.options[select.selectedIndex].value,10);
++
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a day. */
++	_selectDay: function(id, month, year, td) {
++		var inst,
++			target = $(id);
++
++		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++
++		inst = this._getInst(target[0]);
++		inst.selectedDay = inst.currentDay = $("a", td).html();
++		inst.selectedMonth = inst.currentMonth = month;
++		inst.selectedYear = inst.currentYear = year;
++		this._selectDate(id, this._formatDate(inst,
++			inst.currentDay, inst.currentMonth, inst.currentYear));
++	},
++
++	/* Erase the input field and hide the date picker. */
++	_clearDate: function(id) {
++		var target = $(id);
++		this._selectDate(target, "");
++	},
++
++	/* Update the input field with the selected date. */
++	_selectDate: function(id, dateStr) {
++		var onSelect,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
++		if (inst.input) {
++			inst.input.val(dateStr);
++		}
++		this._updateAlternate(inst);
++
++		onSelect = this._get(inst, "onSelect");
++		if (onSelect) {
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
++		} else if (inst.input) {
++			inst.input.trigger("change"); // fire the change event
++		}
++
++		if (inst.inline){
++			this._updateDatepicker(inst);
++		} else {
++			this._hideDatepicker();
++			this._lastInput = inst.input[0];
++			if (typeof(inst.input[0]) !== "object") {
++				inst.input.focus(); // restore focus
++			}
++			this._lastInput = null;
++		}
++	},
++
++	/* Update any alternate field to synchronise with the main field. */
++	_updateAlternate: function(inst) {
++		var altFormat, date, dateStr,
++			altField = this._get(inst, "altField");
++
++		if (altField) { // update alternate field too
++			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
++			date = this._getDate(inst);
++			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
++			$(altField).each(function() { $(this).val(dateStr); });
++		}
++	},
++
++	/* Set as beforeShowDay function to prevent selection of weekends.
++	 * @param  date  Date - the date to customise
++	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
++	 */
++	noWeekends: function(date) {
++		var day = date.getDay();
++		return [(day > 0 && day < 6), ""];
++	},
++
++	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++	 * @param  date  Date - the date to get the week for
++	 * @return  number - the number of the week within the year that contains this date
++	 */
++	iso8601Week: function(date) {
++		var time,
++			checkDate = new Date(date.getTime());
++
++		// Find Thursday of this week starting on Monday
++		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++
++		time = checkDate.getTime();
++		checkDate.setMonth(0); // Compare with Jan 1
++		checkDate.setDate(1);
++		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++	},
++
++	/* Parse a string value into a date object.
++	 * See formatDate below for the possible formats.
++	 *
++	 * @param  format string - the expected format of the date
++	 * @param  value string - the date in the above format
++	 * @param  settings Object - attributes include:
++	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  Date - the extracted date value or null if value is blank
++	 */
++	parseDate: function (format, value, settings) {
++		if (format == null || value == null) {
++			throw "Invalid arguments";
++		}
++
++		value = (typeof value === "object" ? value.toString() : value + "");
++		if (value === "") {
++			return null;
++		}
++
++		var iFormat, dim, extra,
++			iValue = 0,
++			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
++			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
++				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			year = -1,
++			month = -1,
++			day = -1,
++			doy = -1,
++			literal = false,
++			date,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Extract a number from the string value
++			getNumber = function(match) {
++				var isDoubled = lookAhead(match),
++					size = (match === "@" ? 14 : (match === "!" ? 20 :
++					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
++					digits = new RegExp("^\\d{1," + size + "}"),
++					num = value.substring(iValue).match(digits);
++				if (!num) {
++					throw "Missing number at position " + iValue;
++				}
++				iValue += num[0].length;
++				return parseInt(num[0], 10);
++			},
++			// Extract a name from the string value and convert to an index
++			getName = function(match, shortNames, longNames) {
++				var index = -1,
++					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
++						return [ [k, v] ];
++					}).sort(function (a, b) {
++						return -(a[1].length - b[1].length);
++					});
++
++				$.each(names, function (i, pair) {
++					var name = pair[1];
++					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
++						index = pair[0];
++						iValue += name.length;
++						return false;
++					}
++				});
++				if (index !== -1) {
++					return index + 1;
++				} else {
++					throw "Unknown name at position " + iValue;
++				}
++			},
++			// Confirm that a literal character matches the string value
++			checkLiteral = function() {
++				if (value.charAt(iValue) !== format.charAt(iFormat)) {
++					throw "Unexpected literal at position " + iValue;
++				}
++				iValue++;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					checkLiteral();
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d":
++						day = getNumber("d");
++						break;
++					case "D":
++						getName("D", dayNamesShort, dayNames);
++						break;
++					case "o":
++						doy = getNumber("o");
++						break;
++					case "m":
++						month = getNumber("m");
++						break;
++					case "M":
++						month = getName("M", monthNamesShort, monthNames);
++						break;
++					case "y":
++						year = getNumber("y");
++						break;
++					case "@":
++						date = new Date(getNumber("@"));
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "!":
++						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "'":
++						if (lookAhead("'")){
++							checkLiteral();
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						checkLiteral();
++				}
++			}
++		}
++
++		if (iValue < value.length){
++			extra = value.substr(iValue);
++			if (!/^\s+/.test(extra)) {
++				throw "Extra/unparsed characters found in date: " + extra;
++			}
++		}
++
++		if (year === -1) {
++			year = new Date().getFullYear();
++		} else if (year < 100) {
++			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
++				(year <= shortYearCutoff ? 0 : -100);
++		}
++
++		if (doy > -1) {
++			month = 1;
++			day = doy;
++			do {
++				dim = this._getDaysInMonth(year, month - 1);
++				if (day <= dim) {
++					break;
++				}
++				month++;
++				day -= dim;
++			} while (true);
++		}
++
++		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
++		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
++			throw "Invalid date"; // E.g. 31/02/00
++		}
++		return date;
++	},
++
++	/* Standard date formats. */
++	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
++	COOKIE: "D, dd M yy",
++	ISO_8601: "yy-mm-dd",
++	RFC_822: "D, d M y",
++	RFC_850: "DD, dd-M-y",
++	RFC_1036: "D, d M y",
++	RFC_1123: "D, d M yy",
++	RFC_2822: "D, d M yy",
++	RSS: "D, d M y", // RFC 822
++	TICKS: "!",
++	TIMESTAMP: "@",
++	W3C: "yy-mm-dd", // ISO 8601
++
++	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
++		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
++
++	/* Format a date object into a string value.
++	 * The format can be combinations of the following:
++	 * d  - day of month (no leading zero)
++	 * dd - day of month (two digit)
++	 * o  - day of year (no leading zeros)
++	 * oo - day of year (three digit)
++	 * D  - day name short
++	 * DD - day name long
++	 * m  - month of year (no leading zero)
++	 * mm - month of year (two digit)
++	 * M  - month name short
++	 * MM - month name long
++	 * y  - year (two digit)
++	 * yy - year (four digit)
++	 * @ - Unix timestamp (ms since 01/01/1970)
++	 * ! - Windows ticks (100ns since 01/01/0001)
++	 * "..." - literal text
++	 * '' - single quote
++	 *
++	 * @param  format string - the desired format of the date
++	 * @param  date Date - the date value to format
++	 * @param  settings Object - attributes include:
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  string - the date in the above format
++	 */
++	formatDate: function (format, date, settings) {
++		if (!date) {
++			return "";
++		}
++
++		var iFormat,
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Format a number, with leading zero if necessary
++			formatNumber = function(match, value, len) {
++				var num = "" + value;
++				if (lookAhead(match)) {
++					while (num.length < len) {
++						num = "0" + num;
++					}
++				}
++				return num;
++			},
++			// Format a name, short or long as requested
++			formatName = function(match, value, shortNames, longNames) {
++				return (lookAhead(match) ? longNames[value] : shortNames[value]);
++			},
++			output = "",
++			literal = false;
++
++		if (date) {
++			for (iFormat = 0; iFormat < format.length; iFormat++) {
++				if (literal) {
++					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++						literal = false;
++					} else {
++						output += format.charAt(iFormat);
++					}
++				} else {
++					switch (format.charAt(iFormat)) {
++						case "d":
++							output += formatNumber("d", date.getDate(), 2);
++							break;
++						case "D":
++							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
++							break;
++						case "o":
++							output += formatNumber("o",
++								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
++							break;
++						case "m":
++							output += formatNumber("m", date.getMonth() + 1, 2);
++							break;
++						case "M":
++							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
++							break;
++						case "y":
++							output += (lookAhead("y") ? date.getFullYear() :
++								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
++							break;
++						case "@":
++							output += date.getTime();
++							break;
++						case "!":
++							output += date.getTime() * 10000 + this._ticksTo1970;
++							break;
++						case "'":
++							if (lookAhead("'")) {
++								output += "'";
++							} else {
++								literal = true;
++							}
++							break;
++						default:
++							output += format.charAt(iFormat);
++					}
++				}
++			}
++		}
++		return output;
++	},
++
++	/* Extract all possible characters from the date format. */
++	_possibleChars: function (format) {
++		var iFormat,
++			chars = "",
++			literal = false,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					chars += format.charAt(iFormat);
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d": case "m": case "y": case "@":
++						chars += "0123456789";
++						break;
++					case "D": case "M":
++						return null; // Accept anything
++					case "'":
++						if (lookAhead("'")) {
++							chars += "'";
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						chars += format.charAt(iFormat);
++				}
++			}
++		}
++		return chars;
++	},
++
++	/* Get a setting value, defaulting if necessary. */
++	_get: function(inst, name) {
++		return inst.settings[name] !== undefined ?
++			inst.settings[name] : this._defaults[name];
++	},
++
++	/* Parse existing date and initialise date picker. */
++	_setDateFromField: function(inst, noDefault) {
++		if (inst.input.val() === inst.lastVal) {
++			return;
++		}
++
++		var dateFormat = this._get(inst, "dateFormat"),
++			dates = inst.lastVal = inst.input ? inst.input.val() : null,
++			defaultDate = this._getDefaultDate(inst),
++			date = defaultDate,
++			settings = this._getFormatConfig(inst);
++
++		try {
++			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
++		} catch (event) {
++			dates = (noDefault ? "" : dates);
++		}
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		inst.currentDay = (dates ? date.getDate() : 0);
++		inst.currentMonth = (dates ? date.getMonth() : 0);
++		inst.currentYear = (dates ? date.getFullYear() : 0);
++		this._adjustInstDate(inst);
++	},
++
++	/* Retrieve the default date shown on opening. */
++	_getDefaultDate: function(inst) {
++		return this._restrictMinMax(inst,
++			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
++	},
++
++	/* A date may be specified as an exact value or a relative one. */
++	_determineDate: function(inst, date, defaultDate) {
++		var offsetNumeric = function(offset) {
++				var date = new Date();
++				date.setDate(date.getDate() + offset);
++				return date;
++			},
++			offsetString = function(offset) {
++				try {
++					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++						offset, $.datepicker._getFormatConfig(inst));
++				}
++				catch (e) {
++					// Ignore
++				}
++
++				var date = (offset.toLowerCase().match(/^c/) ?
++					$.datepicker._getDate(inst) : null) || new Date(),
++					year = date.getFullYear(),
++					month = date.getMonth(),
++					day = date.getDate(),
++					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
++					matches = pattern.exec(offset);
++
++				while (matches) {
++					switch (matches[2] || "d") {
++						case "d" : case "D" :
++							day += parseInt(matches[1],10); break;
++						case "w" : case "W" :
++							day += parseInt(matches[1],10) * 7; break;
++						case "m" : case "M" :
++							month += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++						case "y": case "Y" :
++							year += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++					}
++					matches = pattern.exec(offset);
++				}
++				return new Date(year, month, day);
++			},
++			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
++				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
++
++		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
++		if (newDate) {
++			newDate.setHours(0);
++			newDate.setMinutes(0);
++			newDate.setSeconds(0);
++			newDate.setMilliseconds(0);
++		}
++		return this._daylightSavingAdjust(newDate);
++	},
++
++	/* Handle switch to/from daylight saving.
++	 * Hours may be non-zero on daylight saving cut-over:
++	 * > 12 when midnight changeover, but then cannot generate
++	 * midnight datetime, so jump to 1AM, otherwise reset.
++	 * @param  date  (Date) the date to check
++	 * @return  (Date) the corrected date
++	 */
++	_daylightSavingAdjust: function(date) {
++		if (!date) {
++			return null;
++		}
++		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
++		return date;
++	},
++
++	/* Set the date(s) directly. */
++	_setDate: function(inst, date, noChange) {
++		var clear = !date,
++			origMonth = inst.selectedMonth,
++			origYear = inst.selectedYear,
++			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
++
++		inst.selectedDay = inst.currentDay = newDate.getDate();
++		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
++		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
++		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
++			this._notifyChange(inst);
++		}
++		this._adjustInstDate(inst);
++		if (inst.input) {
++			inst.input.val(clear ? "" : this._formatDate(inst));
++		}
++	},
++
++	/* Retrieve the date(s) directly. */
++	_getDate: function(inst) {
++		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
++			this._daylightSavingAdjust(new Date(
++			inst.currentYear, inst.currentMonth, inst.currentDay)));
++			return startDate;
++	},
++
++	/* Attach the onxxx handlers.  These are declared statically so
++	 * they work with static code transformers like Caja.
++	 */
++	_attachHandlers: function(inst) {
++		var stepMonths = this._get(inst, "stepMonths"),
++			id = "#" + inst.id.replace( /\\\\/g, "\\" );
++		inst.dpDiv.find("[data-handler]").map(function () {
++			var handler = {
++				prev: function () {
++					$.datepicker._adjustDate(id, -stepMonths, "M");
++				},
++				next: function () {
++					$.datepicker._adjustDate(id, +stepMonths, "M");
++				},
++				hide: function () {
++					$.datepicker._hideDatepicker();
++				},
++				today: function () {
++					$.datepicker._gotoToday(id);
++				},
++				selectDay: function () {
++					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
++					return false;
++				},
++				selectMonth: function () {
++					$.datepicker._selectMonthYear(id, this, "M");
++					return false;
++				},
++				selectYear: function () {
++					$.datepicker._selectMonthYear(id, this, "Y");
++					return false;
++				}
++			};
++			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
++		});
++	},
++
++	/* Generate the HTML for the current state of the date picker. */
++	_generateHTML: function(inst) {
++		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
++			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
++			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
++			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
++			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
++			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
++			tempDate = new Date(),
++			today = this._daylightSavingAdjust(
++				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
++			isRTL = this._get(inst, "isRTL"),
++			showButtonPanel = this._get(inst, "showButtonPanel"),
++			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
++			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
++			numMonths = this._getNumberOfMonths(inst),
++			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
++			stepMonths = this._get(inst, "stepMonths"),
++			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
++			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
++				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			drawMonth = inst.drawMonth - showCurrentAtPos,
++			drawYear = inst.drawYear;
++
++		if (drawMonth < 0) {
++			drawMonth += 12;
++			drawYear--;
++		}
++		if (maxDate) {
++			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
++				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
++			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
++			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
++				drawMonth--;
++				if (drawMonth < 0) {
++					drawMonth = 11;
++					drawYear--;
++				}
++			}
++		}
++		inst.drawMonth = drawMonth;
++		inst.drawYear = drawYear;
++
++		prevText = this._get(inst, "prevText");
++		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
++			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
++
++		nextText = this._get(inst, "nextText");
++		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
++			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
++
++		currentText = this._get(inst, "currentText");
++		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
++		currentText = (!navigationAsDateFormat ? currentText :
++			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
++
++		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
++			this._get(inst, "closeText") + "</button>" : "");
++
++		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
++			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
++			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
++
++		firstDay = parseInt(this._get(inst, "firstDay"),10);
++		firstDay = (isNaN(firstDay) ? 0 : firstDay);
++
++		showWeek = this._get(inst, "showWeek");
++		dayNames = this._get(inst, "dayNames");
++		dayNamesMin = this._get(inst, "dayNamesMin");
++		monthNames = this._get(inst, "monthNames");
++		monthNamesShort = this._get(inst, "monthNamesShort");
++		beforeShowDay = this._get(inst, "beforeShowDay");
++		showOtherMonths = this._get(inst, "showOtherMonths");
++		selectOtherMonths = this._get(inst, "selectOtherMonths");
++		defaultDate = this._getDefaultDate(inst);
++		html = "";
++		dow;
++		for (row = 0; row < numMonths[0]; row++) {
++			group = "";
++			this.maxRows = 4;
++			for (col = 0; col < numMonths[1]; col++) {
++				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
++				cornerClass = " ui-corner-all";
++				calender = "";
++				if (isMultiMonth) {
++					calender += "<div class='ui-datepicker-group";
++					if (numMonths[1] > 1) {
++						switch (col) {
++							case 0: calender += " ui-datepicker-group-first";
++								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
++							case numMonths[1]-1: calender += " ui-datepicker-group-last";
++								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
++							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
++						}
++					}
++					calender += "'>";
++				}
++				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
++					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
++					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
++					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
++					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
++					"</div><table class='ui-datepicker-calendar'><thead>" +
++					"<tr>";
++				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
++				for (dow = 0; dow < 7; dow++) { // days of the week
++					day = (dow + firstDay) % 7;
++					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
++						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
++				}
++				calender += thead + "</tr></thead><tbody>";
++				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
++				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
++					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
++				}
++				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
++				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
++				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
++				this.maxRows = numRows;
++				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
++				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
++					calender += "<tr>";
++					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
++						this._get(inst, "calculateWeek")(printDate) + "</td>");
++					for (dow = 0; dow < 7; dow++) { // create date picker days
++						daySettings = (beforeShowDay ?
++							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
++						otherMonth = (printDate.getMonth() !== drawMonth);
++						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
++							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
++						tbody += "<td class='" +
++							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
++							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
++							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
++							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
++							// or defaultDate is current printedDate and defaultDate is selectedDate
++							" " + this._dayOverClass : "") + // highlight selected day
++							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
++							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
++							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
++							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
++							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
++							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
++							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
++							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
++							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
++							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
++							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
++							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
++						printDate.setDate(printDate.getDate() + 1);
++						printDate = this._daylightSavingAdjust(printDate);
++					}
++					calender += tbody + "</tr>";
++				}
++				drawMonth++;
++				if (drawMonth > 11) {
++					drawMonth = 0;
++					drawYear++;
++				}
++				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
++							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
++				group += calender;
++			}
++			html += group;
++		}
++		html += buttonPanel;
++		inst._keyEvent = false;
++		return html;
++	},
++
++	/* Generate the month and year header. */
++	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
++			secondary, monthNames, monthNamesShort) {
++
++		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
++			changeMonth = this._get(inst, "changeMonth"),
++			changeYear = this._get(inst, "changeYear"),
++			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
++			html = "<div class='ui-datepicker-title'>",
++			monthHtml = "";
++
++		// month selection
++		if (secondary || !changeMonth) {
++			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
++		} else {
++			inMinYear = (minDate && minDate.getFullYear() === drawYear);
++			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
++			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
++			for ( month = 0; month < 12; month++) {
++				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
++					monthHtml += "<option value='" + month + "'" +
++						(month === drawMonth ? " selected='selected'" : "") +
++						">" + monthNamesShort[month] + "</option>";
++				}
++			}
++			monthHtml += "</select>";
++		}
++
++		if (!showMonthAfterYear) {
++			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
++		}
++
++		// year selection
++		if ( !inst.yearshtml ) {
++			inst.yearshtml = "";
++			if (secondary || !changeYear) {
++				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
++			} else {
++				// determine range of years to display
++				years = this._get(inst, "yearRange").split(":");
++				thisYear = new Date().getFullYear();
++				determineYear = function(value) {
++					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
++						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
++						parseInt(value, 10)));
++					return (isNaN(year) ? thisYear : year);
++				};
++				year = determineYear(years[0]);
++				endYear = Math.max(year, determineYear(years[1] || ""));
++				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
++				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
++				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
++				for (; year <= endYear; year++) {
++					inst.yearshtml += "<option value='" + year + "'" +
++						(year === drawYear ? " selected='selected'" : "") +
++						">" + year + "</option>";
++				}
++				inst.yearshtml += "</select>";
++
++				html += inst.yearshtml;
++				inst.yearshtml = null;
++			}
++		}
++
++		html += this._get(inst, "yearSuffix");
++		if (showMonthAfterYear) {
++			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
++		}
++		html += "</div>"; // Close datepicker_header
++		return html;
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustInstDate: function(inst, offset, period) {
++		var year = inst.drawYear + (period === "Y" ? offset : 0),
++			month = inst.drawMonth + (period === "M" ? offset : 0),
++			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
++			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
++
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		if (period === "M" || period === "Y") {
++			this._notifyChange(inst);
++		}
++	},
++
++	/* Ensure a date is within any min/max bounds. */
++	_restrictMinMax: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			newDate = (minDate && date < minDate ? minDate : date);
++		return (maxDate && newDate > maxDate ? maxDate : newDate);
++	},
++
++	/* Notify change of month/year. */
++	_notifyChange: function(inst) {
++		var onChange = this._get(inst, "onChangeMonthYear");
++		if (onChange) {
++			onChange.apply((inst.input ? inst.input[0] : null),
++				[inst.selectedYear, inst.selectedMonth + 1, inst]);
++		}
++	},
++
++	/* Determine the number of months to show. */
++	_getNumberOfMonths: function(inst) {
++		var numMonths = this._get(inst, "numberOfMonths");
++		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
++	},
++
++	/* Determine the current maximum date - ensure no time components are set. */
++	_getMinMaxDate: function(inst, minMax) {
++		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
++	},
++
++	/* Find the number of days in a given month. */
++	_getDaysInMonth: function(year, month) {
++		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
++	},
++
++	/* Find the day of the week of the first of a month. */
++	_getFirstDayOfMonth: function(year, month) {
++		return new Date(year, month, 1).getDay();
++	},
++
++	/* Determines if we should allow a "next/prev" month display change. */
++	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
++		var numMonths = this._getNumberOfMonths(inst),
++			date = this._daylightSavingAdjust(new Date(curYear,
++			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
++
++		if (offset < 0) {
++			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
++		}
++		return this._isInRange(inst, date);
++	},
++
++	/* Is the given date in the accepted range? */
++	_isInRange: function(inst, date) {
++		var yearSplit, currentYear,
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			minYear = null,
++			maxYear = null,
++			years = this._get(inst, "yearRange");
++			if (years){
++				yearSplit = years.split(":");
++				currentYear = new Date().getFullYear();
++				minYear = parseInt(yearSplit[0], 10);
++				maxYear = parseInt(yearSplit[1], 10);
++				if ( yearSplit[0].match(/[+\-].*/) ) {
++					minYear += currentYear;
++				}
++				if ( yearSplit[1].match(/[+\-].*/) ) {
++					maxYear += currentYear;
++				}
++			}
++
++		return ((!minDate || date.getTime() >= minDate.getTime()) &&
++			(!maxDate || date.getTime() <= maxDate.getTime()) &&
++			(!minYear || date.getFullYear() >= minYear) &&
++			(!maxYear || date.getFullYear() <= maxYear));
++	},
++
++	/* Provide the configuration settings for formatting/parsing. */
++	_getFormatConfig: function(inst) {
++		var shortYearCutoff = this._get(inst, "shortYearCutoff");
++		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
++			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		return {shortYearCutoff: shortYearCutoff,
++			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
++			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
++	},
++
++	/* Format the given date for display. */
++	_formatDate: function(inst, day, month, year) {
++		if (!day) {
++			inst.currentDay = inst.selectedDay;
++			inst.currentMonth = inst.selectedMonth;
++			inst.currentYear = inst.selectedYear;
++		}
++		var date = (day ? (typeof day === "object" ? day :
++			this._daylightSavingAdjust(new Date(year, month, day))) :
++			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
++	}
++});
++
++/*
++ * Bind hover events for datepicker elements.
++ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
++ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
++ */
++function bindHover(dpDiv) {
++	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
++	return dpDiv.delegate(selector, "mouseout", function() {
++			$(this).removeClass("ui-state-hover");
++			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++				$(this).removeClass("ui-datepicker-prev-hover");
++			}
++			if (this.className.indexOf("ui-datepicker-next") !== -1) {
++				$(this).removeClass("ui-datepicker-next-hover");
++			}
++		})
++		.delegate(selector, "mouseover", function(){
++			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
++				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
++				$(this).addClass("ui-state-hover");
++				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++					$(this).addClass("ui-datepicker-prev-hover");
++				}
++				if (this.className.indexOf("ui-datepicker-next") !== -1) {
++					$(this).addClass("ui-datepicker-next-hover");
++				}
++			}
++		});
++}
++
++/* jQuery extend now ignores nulls! */
++function extendRemove(target, props) {
++	$.extend(target, props);
++	for (var name in props) {
++		if (props[name] == null) {
++			target[name] = props[name];
++		}
++	}
++	return target;
++}
++
++/* Invoke the datepicker functionality.
++   @param  options  string - a command, optionally followed by additional parameters or
++					Object - settings for attaching new datepicker functionality
++   @return  jQuery object */
++$.fn.datepicker = function(options){
++
++	/* Verify an empty collection wasn't passed - Fixes #6976 */
++	if ( !this.length ) {
++		return this;
++	}
++
++	/* Initialise the date picker. */
++	if (!$.datepicker.initialized) {
++		$(document).mousedown($.datepicker._checkExternalClick);
++		$.datepicker.initialized = true;
++	}
++
++	/* Append datepicker main container to body if not exist. */
++	if ($("#"+$.datepicker._mainDivId).length === 0) {
++		$("body").append($.datepicker.dpDiv);
++	}
++
++	var otherArgs = Array.prototype.slice.call(arguments, 1);
++	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	return this.each(function() {
++		typeof options === "string" ?
++			$.datepicker["_" + options + "Datepicker"].
++				apply($.datepicker, [this].concat(otherArgs)) :
++			$.datepicker._attachDatepicker(this, options);
++	});
++};
++
++$.datepicker = new Datepicker(); // singleton instance
++$.datepicker.initialized = false;
++$.datepicker.uuid = new Date().getTime();
++$.datepicker.version = "1.10.3";
++
++})(jQuery);
++(function( $, undefined ) {
++
++var sizeRelatedOptions = {
++		buttons: true,
++		height: true,
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true,
++		width: true
++	},
++	resizableRelatedOptions = {
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true
++	};
++
++$.widget( "ui.dialog", {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoOpen: true,
++		buttons: [],
++		closeOnEscape: true,
++		closeText: "close",
++		dialogClass: "",
++		draggable: true,
++		hide: null,
++		height: "auto",
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 150,
++		minWidth: 150,
++		modal: false,
++		position: {
++			my: "center",
++			at: "center",
++			of: window,
++			collision: "fit",
++			// Ensure the titlebar is always visible
++			using: function( pos ) {
++				var topOffset = $( this ).css( pos ).offset().top;
++				if ( topOffset < 0 ) {
++					$( this ).css( "top", pos.top - topOffset );
++				}
++			}
++		},
++		resizable: true,
++		show: null,
++		title: null,
++		width: 300,
++
++		// callbacks
++		beforeClose: null,
++		close: null,
++		drag: null,
++		dragStart: null,
++		dragStop: null,
++		focus: null,
++		open: null,
++		resize: null,
++		resizeStart: null,
++		resizeStop: null
++	},
++
++	_create: function() {
++		this.originalCss = {
++			display: this.element[0].style.display,
++			width: this.element[0].style.width,
++			minHeight: this.element[0].style.minHeight,
++			maxHeight: this.element[0].style.maxHeight,
++			height: this.element[0].style.height
++		};
++		this.originalPosition = {
++			parent: this.element.parent(),
++			index: this.element.parent().children().index( this.element )
++		};
++		this.originalTitle = this.element.attr("title");
++		this.options.title = this.options.title || this.originalTitle;
++
++		this._createWrapper();
++
++		this.element
++			.show()
++			.removeAttr("title")
++			.addClass("ui-dialog-content ui-widget-content")
++			.appendTo( this.uiDialog );
++
++		this._createTitlebar();
++		this._createButtonPane();
++
++		if ( this.options.draggable && $.fn.draggable ) {
++			this._makeDraggable();
++		}
++		if ( this.options.resizable && $.fn.resizable ) {
++			this._makeResizable();
++		}
++
++		this._isOpen = false;
++	},
++
++	_init: function() {
++		if ( this.options.autoOpen ) {
++			this.open();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++		if ( element && (element.jquery || element.nodeType) ) {
++			return $( element );
++		}
++		return this.document.find( element || "body" ).eq( 0 );
++	},
++
++	_destroy: function() {
++		var next,
++			originalPosition = this.originalPosition;
++
++		this._destroyOverlay();
++
++		this.element
++			.removeUniqueId()
++			.removeClass("ui-dialog-content ui-widget-content")
++			.css( this.originalCss )
++			// Without detaching first, the following becomes really slow
++			.detach();
++
++		this.uiDialog.stop( true, true ).remove();
++
++		if ( this.originalTitle ) {
++			this.element.attr( "title", this.originalTitle );
++		}
++
++		next = originalPosition.parent.children().eq( originalPosition.index );
++		// Don't try to place the dialog next to itself (#8613)
++		if ( next.length && next[0] !== this.element[0] ) {
++			next.before( this.element );
++		} else {
++			originalPosition.parent.append( this.element );
++		}
++	},
++
++	widget: function() {
++		return this.uiDialog;
++	},
++
++	disable: $.noop,
++	enable: $.noop,
++
++	close: function( event ) {
++		var that = this;
++
++		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
++			return;
++		}
++
++		this._isOpen = false;
++		this._destroyOverlay();
++
++		if ( !this.opener.filter(":focusable").focus().length ) {
++			// Hiding a focused element doesn't trigger blur in WebKit
++			// so in case we have nothing to focus on, explicitly blur the active element
++			// https://bugs.webkit.org/show_bug.cgi?id=47182
++			$( this.document[0].activeElement ).blur();
++		}
++
++		this._hide( this.uiDialog, this.options.hide, function() {
++			that._trigger( "close", event );
++		});
++	},
++
++	isOpen: function() {
++		return this._isOpen;
++	},
++
++	moveToTop: function() {
++		this._moveToTop();
++	},
++
++	_moveToTop: function( event, silent ) {
++		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
++		if ( moved && !silent ) {
++			this._trigger( "focus", event );
++		}
++		return moved;
++	},
++
++	open: function() {
++		var that = this;
++		if ( this._isOpen ) {
++			if ( this._moveToTop() ) {
++				this._focusTabbable();
++			}
++			return;
++		}
++
++		this._isOpen = true;
++		this.opener = $( this.document[0].activeElement );
++
++		this._size();
++		this._position();
++		this._createOverlay();
++		this._moveToTop( null, true );
++		this._show( this.uiDialog, this.options.show, function() {
++			that._focusTabbable();
++			that._trigger("focus");
++		});
++
++		this._trigger("open");
++	},
++
++	_focusTabbable: function() {
++		// Set focus to the first match:
++		// 1. First element inside the dialog matching [autofocus]
++		// 2. Tabbable element inside the content element
++		// 3. Tabbable element inside the buttonpane
++		// 4. The close button
++		// 5. The dialog itself
++		var hasFocus = this.element.find("[autofocus]");
++		if ( !hasFocus.length ) {
++			hasFocus = this.element.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogButtonPane.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialog;
++		}
++		hasFocus.eq( 0 ).focus();
++	},
++
++	_keepFocus: function( event ) {
++		function checkFocus() {
++			var activeElement = this.document[0].activeElement,
++				isActive = this.uiDialog[0] === activeElement ||
++					$.contains( this.uiDialog[0], activeElement );
++			if ( !isActive ) {
++				this._focusTabbable();
++			}
++		}
++		event.preventDefault();
++		checkFocus.call( this );
++		// support: IE
++		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
++		// so we check again later
++		this._delay( checkFocus );
++	},
++
++	_createWrapper: function() {
++		this.uiDialog = $("<div>")
++			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
++				this.options.dialogClass )
++			.hide()
++			.attr({
++				// Setting tabIndex makes the div focusable
++				tabIndex: -1,
++				role: "dialog"
++			})
++			.appendTo( this._appendTo() );
++
++		this._on( this.uiDialog, {
++			keydown: function( event ) {
++				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
++						event.keyCode === $.ui.keyCode.ESCAPE ) {
++					event.preventDefault();
++					this.close( event );
++					return;
++				}
++
++				// prevent tabbing out of dialogs
++				if ( event.keyCode !== $.ui.keyCode.TAB ) {
++					return;
++				}
++				var tabbables = this.uiDialog.find(":tabbable"),
++					first = tabbables.filter(":first"),
++					last  = tabbables.filter(":last");
++
++				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
++					first.focus( 1 );
++					event.preventDefault();
++				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
++					last.focus( 1 );
++					event.preventDefault();
++				}
++			},
++			mousedown: function( event ) {
++				if ( this._moveToTop( event ) ) {
++					this._focusTabbable();
++				}
++			}
++		});
++
++		// We assume that any existing aria-describedby attribute means
++		// that the dialog content is marked up properly
++		// otherwise we brute force the content as the description
++		if ( !this.element.find("[aria-describedby]").length ) {
++			this.uiDialog.attr({
++				"aria-describedby": this.element.uniqueId().attr("id")
++			});
++		}
++	},
++
++	_createTitlebar: function() {
++		var uiDialogTitle;
++
++		this.uiDialogTitlebar = $("<div>")
++			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
++			.prependTo( this.uiDialog );
++		this._on( this.uiDialogTitlebar, {
++			mousedown: function( event ) {
++				// Don't prevent click on close button (#8838)
++				// Focusing a dialog that is partially scrolled out of view
++				// causes the browser to scroll it into view, preventing the click event
++				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
++					// Dialog isn't getting focus when dragging (#8063)
++					this.uiDialog.focus();
++				}
++			}
++		});
++
++		this.uiDialogTitlebarClose = $("<button></button>")
++			.button({
++				label: this.options.closeText,
++				icons: {
++					primary: "ui-icon-closethick"
++				},
++				text: false
++			})
++			.addClass("ui-dialog-titlebar-close")
++			.appendTo( this.uiDialogTitlebar );
++		this._on( this.uiDialogTitlebarClose, {
++			click: function( event ) {
++				event.preventDefault();
++				this.close( event );
++			}
++		});
++
++		uiDialogTitle = $("<span>")
++			.uniqueId()
++			.addClass("ui-dialog-title")
++			.prependTo( this.uiDialogTitlebar );
++		this._title( uiDialogTitle );
++
++		this.uiDialog.attr({
++			"aria-labelledby": uiDialogTitle.attr("id")
++		});
++	},
++
++	_title: function( title ) {
++		if ( !this.options.title ) {
++			title.html("&#160;");
++		}
++		title.text( this.options.title );
++	},
++
++	_createButtonPane: function() {
++		this.uiDialogButtonPane = $("<div>")
++			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
++
++		this.uiButtonSet = $("<div>")
++			.addClass("ui-dialog-buttonset")
++			.appendTo( this.uiDialogButtonPane );
++
++		this._createButtons();
++	},
++
++	_createButtons: function() {
++		var that = this,
++			buttons = this.options.buttons;
++
++		// if we already have a button pane, remove it
++		this.uiDialogButtonPane.remove();
++		this.uiButtonSet.empty();
++
++		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
++			this.uiDialog.removeClass("ui-dialog-buttons");
++			return;
++		}
++
++		$.each( buttons, function( name, props ) {
++			var click, buttonOptions;
++			props = $.isFunction( props ) ?
++				{ click: props, text: name } :
++				props;
++			// Default to a non-submitting button
++			props = $.extend( { type: "button" }, props );
++			// Change the context for the click callback to be the main element
++			click = props.click;
++			props.click = function() {
++				click.apply( that.element[0], arguments );
++			};
++			buttonOptions = {
++				icons: props.icons,
++				text: props.showText
++			};
++			delete props.icons;
++			delete props.showText;
++			$( "<button></button>", props )
++				.button( buttonOptions )
++				.appendTo( that.uiButtonSet );
++		});
++		this.uiDialog.addClass("ui-dialog-buttons");
++		this.uiDialogButtonPane.appendTo( this.uiDialog );
++	},
++
++	_makeDraggable: function() {
++		var that = this,
++			options = this.options;
++
++		function filteredUi( ui ) {
++			return {
++				position: ui.position,
++				offset: ui.offset
++			};
++		}
++
++		this.uiDialog.draggable({
++			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
++			handle: ".ui-dialog-titlebar",
++			containment: "document",
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-dragging");
++				that._blockFrames();
++				that._trigger( "dragStart", event, filteredUi( ui ) );
++			},
++			drag: function( event, ui ) {
++				that._trigger( "drag", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.position = [
++					ui.position.left - that.document.scrollLeft(),
++					ui.position.top - that.document.scrollTop()
++				];
++				$( this ).removeClass("ui-dialog-dragging");
++				that._unblockFrames();
++				that._trigger( "dragStop", event, filteredUi( ui ) );
++			}
++		});
++	},
++
++	_makeResizable: function() {
++		var that = this,
++			options = this.options,
++			handles = options.resizable,
++			// .ui-resizable has position: relative defined in the stylesheet
++			// but dialogs have to use absolute or fixed positioning
++			position = this.uiDialog.css("position"),
++			resizeHandles = typeof handles === "string" ?
++				handles	:
++				"n,e,s,w,se,sw,ne,nw";
++
++		function filteredUi( ui ) {
++			return {
++				originalPosition: ui.originalPosition,
++				originalSize: ui.originalSize,
++				position: ui.position,
++				size: ui.size
++			};
++		}
++
++		this.uiDialog.resizable({
++			cancel: ".ui-dialog-content",
++			containment: "document",
++			alsoResize: this.element,
++			maxWidth: options.maxWidth,
++			maxHeight: options.maxHeight,
++			minWidth: options.minWidth,
++			minHeight: this._minHeight(),
++			handles: resizeHandles,
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-resizing");
++				that._blockFrames();
++				that._trigger( "resizeStart", event, filteredUi( ui ) );
++			},
++			resize: function( event, ui ) {
++				that._trigger( "resize", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.height = $( this ).height();
++				options.width = $( this ).width();
++				$( this ).removeClass("ui-dialog-resizing");
++				that._unblockFrames();
++				that._trigger( "resizeStop", event, filteredUi( ui ) );
++			}
++		})
++		.css( "position", position );
++	},
++
++	_minHeight: function() {
++		var options = this.options;
++
++		return options.height === "auto" ?
++			options.minHeight :
++			Math.min( options.minHeight, options.height );
++	},
++
++	_position: function() {
++		// Need to show the dialog to get the actual offset in the position plugin
++		var isVisible = this.uiDialog.is(":visible");
++		if ( !isVisible ) {
++			this.uiDialog.show();
++		}
++		this.uiDialog.position( this.options.position );
++		if ( !isVisible ) {
++			this.uiDialog.hide();
++		}
++	},
++
++	_setOptions: function( options ) {
++		var that = this,
++			resize = false,
++			resizableOptions = {};
++
++		$.each( options, function( key, value ) {
++			that._setOption( key, value );
++
++			if ( key in sizeRelatedOptions ) {
++				resize = true;
++			}
++			if ( key in resizableRelatedOptions ) {
++				resizableOptions[ key ] = value;
++			}
++		});
++
++		if ( resize ) {
++			this._size();
++			this._position();
++		}
++		if ( this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", resizableOptions );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		/*jshint maxcomplexity:15*/
++		var isDraggable, isResizable,
++			uiDialog = this.uiDialog;
++
++		if ( key === "dialogClass" ) {
++			uiDialog
++				.removeClass( this.options.dialogClass )
++				.addClass( value );
++		}
++
++		if ( key === "disabled" ) {
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "appendTo" ) {
++			this.uiDialog.appendTo( this._appendTo() );
++		}
++
++		if ( key === "buttons" ) {
++			this._createButtons();
++		}
++
++		if ( key === "closeText" ) {
++			this.uiDialogTitlebarClose.button({
++				// Ensure that we always pass a string
++				label: "" + value
++			});
++		}
++
++		if ( key === "draggable" ) {
++			isDraggable = uiDialog.is(":data(ui-draggable)");
++			if ( isDraggable && !value ) {
++				uiDialog.draggable("destroy");
++			}
++
++			if ( !isDraggable && value ) {
++				this._makeDraggable();
++			}
++		}
++
++		if ( key === "position" ) {
++			this._position();
++		}
++
++		if ( key === "resizable" ) {
++			// currently resizable, becoming non-resizable
++			isResizable = uiDialog.is(":data(ui-resizable)");
++			if ( isResizable && !value ) {
++				uiDialog.resizable("destroy");
++			}
++
++			// currently resizable, changing handles
++			if ( isResizable && typeof value === "string" ) {
++				uiDialog.resizable( "option", "handles", value );
++			}
++
++			// currently non-resizable, becoming resizable
++			if ( !isResizable && value !== false ) {
++				this._makeResizable();
++			}
++		}
++
++		if ( key === "title" ) {
++			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
++		}
++	},
++
++	_size: function() {
++		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
++		// divs will both have width and height set, so we need to reset them
++		var nonContentHeight, minContentHeight, maxContentHeight,
++			options = this.options;
++
++		// Reset content sizing
++		this.element.show().css({
++			width: "auto",
++			minHeight: 0,
++			maxHeight: "none",
++			height: 0
++		});
++
++		if ( options.minWidth > options.width ) {
++			options.width = options.minWidth;
++		}
++
++		// reset wrapper sizing
++		// determine the height of all the non-content elements
++		nonContentHeight = this.uiDialog.css({
++				height: "auto",
++				width: options.width
++			})
++			.outerHeight();
++		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
++		maxContentHeight = typeof options.maxHeight === "number" ?
++			Math.max( 0, options.maxHeight - nonContentHeight ) :
++			"none";
++
++		if ( options.height === "auto" ) {
++			this.element.css({
++				minHeight: minContentHeight,
++				maxHeight: maxContentHeight,
++				height: "auto"
++			});
++		} else {
++			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
++		}
++
++		if (this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
++		}
++	},
++
++	_blockFrames: function() {
++		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
++			var iframe = $( this );
++
++			return $( "<div>" )
++				.css({
++					position: "absolute",
++					width: iframe.outerWidth(),
++					height: iframe.outerHeight()
++				})
++				.appendTo( iframe.parent() )
++				.offset( iframe.offset() )[0];
++		});
++	},
++
++	_unblockFrames: function() {
++		if ( this.iframeBlocks ) {
++			this.iframeBlocks.remove();
++			delete this.iframeBlocks;
++		}
++	},
++
++	_allowInteraction: function( event ) {
++		if ( $( event.target ).closest(".ui-dialog").length ) {
++			return true;
++		}
++
++		// TODO: Remove hack when datepicker implements
++		// the .ui-front logic (#8989)
++		return !!$( event.target ).closest(".ui-datepicker").length;
++	},
++
++	_createOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		var that = this,
++			widgetFullName = this.widgetFullName;
++		if ( !$.ui.dialog.overlayInstances ) {
++			// Prevent use of anchors and inputs.
++			// We use a delay in case the overlay is created from an
++			// event that we're going to be cancelling. (#2804)
++			this._delay(function() {
++				// Handle .dialog().dialog("close") (#4065)
++				if ( $.ui.dialog.overlayInstances ) {
++					this.document.bind( "focusin.dialog", function( event ) {
++						if ( !that._allowInteraction( event ) ) {
++							event.preventDefault();
++							$(".ui-dialog:visible:last .ui-dialog-content")
++								.data( widgetFullName )._focusTabbable();
++						}
++					});
++				}
++			});
++		}
++
++		this.overlay = $("<div>")
++			.addClass("ui-widget-overlay ui-front")
++			.appendTo( this._appendTo() );
++		this._on( this.overlay, {
++			mousedown: "_keepFocus"
++		});
++		$.ui.dialog.overlayInstances++;
++	},
++
++	_destroyOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		if ( this.overlay ) {
++			$.ui.dialog.overlayInstances--;
++
++			if ( !$.ui.dialog.overlayInstances ) {
++				this.document.unbind( "focusin.dialog" );
++			}
++			this.overlay.remove();
++			this.overlay = null;
++		}
++	}
++});
++
++$.ui.dialog.overlayInstances = 0;
++
++// DEPRECATED
++if ( $.uiBackCompat !== false ) {
++	// position option with array notation
++	// just override with old implementation
++	$.widget( "ui.dialog", $.ui.dialog, {
++		_position: function() {
++			var position = this.options.position,
++				myAt = [],
++				offset = [ 0, 0 ],
++				isVisible;
++
++			if ( position ) {
++				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
++					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
++					if ( myAt.length === 1 ) {
++						myAt[1] = myAt[0];
++					}
++
++					$.each( [ "left", "top" ], function( i, offsetPosition ) {
++						if ( +myAt[ i ] === myAt[ i ] ) {
++							offset[ i ] = myAt[ i ];
++							myAt[ i ] = offsetPosition;
++						}
++					});
++
++					position = {
++						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
++							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
++						at: myAt.join(" ")
++					};
++				}
++
++				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
++			} else {
++				position = $.ui.dialog.prototype.options.position;
++			}
++
++			// need to show the dialog to get the actual offset in the position plugin
++			isVisible = this.uiDialog.is(":visible");
++			if ( !isVisible ) {
++				this.uiDialog.show();
++			}
++			this.uiDialog.position( position );
++			if ( !isVisible ) {
++				this.uiDialog.hide();
++			}
++		}
++	});
++}
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.widget( "ui.menu", {
++	version: "1.10.3",
++	defaultElement: "<ul>",
++	delay: 300,
++	options: {
++		icons: {
++			submenu: "ui-icon-carat-1-e"
++		},
++		menus: "ul",
++		position: {
++			my: "left top",
++			at: "right top"
++		},
++		role: "menu",
++
++		// callbacks
++		blur: null,
++		focus: null,
++		select: null
++	},
++
++	_create: function() {
++		this.activeMenu = this.element;
++		// flag used to prevent firing of the click handler
++		// as the event bubbles up through nested menus
++		this.mouseHandled = false;
++		this.element
++			.uniqueId()
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
++			.attr({
++				role: this.options.role,
++				tabIndex: 0
++			})
++			// need to catch all clicks on disabled menu
++			// not possible through _on
++			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
++				if ( this.options.disabled ) {
++					event.preventDefault();
++				}
++			}, this ));
++
++		if ( this.options.disabled ) {
++			this.element
++				.addClass( "ui-state-disabled" )
++				.attr( "aria-disabled", "true" );
++		}
++
++		this._on({
++			// Prevent focus from sticking to links inside menu after clicking
++			// them (focus should always stay on UL during navigation).
++			"mousedown .ui-menu-item > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-state-disabled > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-menu-item:has(a)": function( event ) {
++				var target = $( event.target ).closest( ".ui-menu-item" );
++				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
++					this.mouseHandled = true;
++
++					this.select( event );
++					// Open submenu on click
++					if ( target.has( ".ui-menu" ).length ) {
++						this.expand( event );
++					} else if ( !this.element.is( ":focus" ) ) {
++						// Redirect focus to the menu
++						this.element.trigger( "focus", [ true ] );
++
++						// If the active item is on the top level, let it stay active.
++						// Otherwise, blur the active item since it is no longer visible.
++						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
++							clearTimeout( this.timer );
++						}
++					}
++				}
++			},
++			"mouseenter .ui-menu-item": function( event ) {
++				var target = $( event.currentTarget );
++				// Remove ui-state-active class from siblings of the newly focused menu item
++				// to avoid a jump caused by adjacent elements both having a class with a border
++				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
++				this.focus( event, target );
++			},
++			mouseleave: "collapseAll",
++			"mouseleave .ui-menu": "collapseAll",
++			focus: function( event, keepActiveItem ) {
++				// If there's already an active item, keep it active
++				// If not, activate the first item
++				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
++
++				if ( !keepActiveItem ) {
++					this.focus( event, item );
++				}
++			},
++			blur: function( event ) {
++				this._delay(function() {
++					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
++						this.collapseAll( event );
++					}
++				});
++			},
++			keydown: "_keydown"
++		});
++
++		this.refresh();
++
++		// Clicks outside of a menu collapse any open menus
++		this._on( this.document, {
++			click: function( event ) {
++				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
++					this.collapseAll( event );
++				}
++
++				// Reset the mouseHandled flag
++				this.mouseHandled = false;
++			}
++		});
++	},
++
++	_destroy: function() {
++		// Destroy (sub)menus
++		this.element
++			.removeAttr( "aria-activedescendant" )
++			.find( ".ui-menu" ).addBack()
++				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
++				.removeAttr( "role" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "aria-labelledby" )
++				.removeAttr( "aria-expanded" )
++				.removeAttr( "aria-hidden" )
++				.removeAttr( "aria-disabled" )
++				.removeUniqueId()
++				.show();
++
++		// Destroy menu items
++		this.element.find( ".ui-menu-item" )
++			.removeClass( "ui-menu-item" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-disabled" )
++			.children( "a" )
++				.removeUniqueId()
++				.removeClass( "ui-corner-all ui-state-hover" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "role" )
++				.removeAttr( "aria-haspopup" )
++				.children().each( function() {
++					var elem = $( this );
++					if ( elem.data( "ui-menu-submenu-carat" ) ) {
++						elem.remove();
++					}
++				});
++
++		// Destroy menu dividers
++		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:20*/
++		var match, prev, character, skip, regex,
++			preventDefault = true;
++
++		function escape( value ) {
++			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
++		}
++
++		switch ( event.keyCode ) {
++		case $.ui.keyCode.PAGE_UP:
++			this.previousPage( event );
++			break;
++		case $.ui.keyCode.PAGE_DOWN:
++			this.nextPage( event );
++			break;
++		case $.ui.keyCode.HOME:
++			this._move( "first", "first", event );
++			break;
++		case $.ui.keyCode.END:
++			this._move( "last", "last", event );
++			break;
++		case $.ui.keyCode.UP:
++			this.previous( event );
++			break;
++		case $.ui.keyCode.DOWN:
++			this.next( event );
++			break;
++		case $.ui.keyCode.LEFT:
++			this.collapse( event );
++			break;
++		case $.ui.keyCode.RIGHT:
++			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
++				this.expand( event );
++			}
++			break;
++		case $.ui.keyCode.ENTER:
++		case $.ui.keyCode.SPACE:
++			this._activate( event );
++			break;
++		case $.ui.keyCode.ESCAPE:
++			this.collapse( event );
++			break;
++		default:
++			preventDefault = false;
++			prev = this.previousFilter || "";
++			character = String.fromCharCode( event.keyCode );
++			skip = false;
++
++			clearTimeout( this.filterTimer );
++
++			if ( character === prev ) {
++				skip = true;
++			} else {
++				character = prev + character;
++			}
++
++			regex = new RegExp( "^" + escape( character ), "i" );
++			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++				return regex.test( $( this ).children( "a" ).text() );
++			});
++			match = skip && match.index( this.active.next() ) !== -1 ?
++				this.active.nextAll( ".ui-menu-item" ) :
++				match;
++
++			// If no matches on the current filter, reset to the last character pressed
++			// to move down the menu to the first item that starts with that character
++			if ( !match.length ) {
++				character = String.fromCharCode( event.keyCode );
++				regex = new RegExp( "^" + escape( character ), "i" );
++				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++					return regex.test( $( this ).children( "a" ).text() );
++				});
++			}
++
++			if ( match.length ) {
++				this.focus( event, match );
++				if ( match.length > 1 ) {
++					this.previousFilter = character;
++					this.filterTimer = this._delay(function() {
++						delete this.previousFilter;
++					}, 1000 );
++				} else {
++					delete this.previousFilter;
++				}
++			} else {
++				delete this.previousFilter;
++			}
++		}
++
++		if ( preventDefault ) {
++			event.preventDefault();
++		}
++	},
++
++	_activate: function( event ) {
++		if ( !this.active.is( ".ui-state-disabled" ) ) {
++			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
++				this.expand( event );
++			} else {
++				this.select( event );
++			}
++		}
++	},
++
++	refresh: function() {
++		var menus,
++			icon = this.options.icons.submenu,
++			submenus = this.element.find( this.options.menus );
++
++		// Initialize nested menus
++		submenus.filter( ":not(.ui-menu)" )
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.hide()
++			.attr({
++				role: this.options.role,
++				"aria-hidden": "true",
++				"aria-expanded": "false"
++			})
++			.each(function() {
++				var menu = $( this ),
++					item = menu.prev( "a" ),
++					submenuCarat = $( "<span>" )
++						.addClass( "ui-menu-icon ui-icon " + icon )
++						.data( "ui-menu-submenu-carat", true );
++
++				item
++					.attr( "aria-haspopup", "true" )
++					.prepend( submenuCarat );
++				menu.attr( "aria-labelledby", item.attr( "id" ) );
++			});
++
++		menus = submenus.add( this.element );
++
++		// Don't refresh list items that are already adapted
++		menus.children( ":not(.ui-menu-item):has(a)" )
++			.addClass( "ui-menu-item" )
++			.attr( "role", "presentation" )
++			.children( "a" )
++				.uniqueId()
++				.addClass( "ui-corner-all" )
++				.attr({
++					tabIndex: -1,
++					role: this._itemRole()
++				});
++
++		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
++		menus.children( ":not(.ui-menu-item)" ).each(function() {
++			var item = $( this );
++			// hyphen, em dash, en dash
++			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
++				item.addClass( "ui-widget-content ui-menu-divider" );
++			}
++		});
++
++		// Add aria-disabled attribute to any disabled menu item
++		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
++
++		// If the active item has been removed, blur the menu
++		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			this.blur();
++		}
++	},
++
++	_itemRole: function() {
++		return {
++			menu: "menuitem",
++			listbox: "option"
++		}[ this.options.role ];
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "icons" ) {
++			this.element.find( ".ui-menu-icon" )
++				.removeClass( this.options.icons.submenu )
++				.addClass( value.submenu );
++		}
++		this._super( key, value );
++	},
++
++	focus: function( event, item ) {
++		var nested, focused;
++		this.blur( event, event && event.type === "focus" );
++
++		this._scrollIntoView( item );
++
++		this.active = item.first();
++		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
++		// Only update aria-activedescendant if there's a role
++		// otherwise we assume focus is managed elsewhere
++		if ( this.options.role ) {
++			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
++		}
++
++		// Highlight active parent menu item, if any
++		this.active
++			.parent()
++			.closest( ".ui-menu-item" )
++			.children( "a:first" )
++			.addClass( "ui-state-active" );
++
++		if ( event && event.type === "keydown" ) {
++			this._close();
++		} else {
++			this.timer = this._delay(function() {
++				this._close();
++			}, this.delay );
++		}
++
++		nested = item.children( ".ui-menu" );
++		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
++			this._startOpening(nested);
++		}
++		this.activeMenu = item.parent();
++
++		this._trigger( "focus", event, { item: item } );
++	},
++
++	_scrollIntoView: function( item ) {
++		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
++		if ( this._hasScroll() ) {
++			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
++			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
++			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
++			scroll = this.activeMenu.scrollTop();
++			elementHeight = this.activeMenu.height();
++			itemHeight = item.height();
++
++			if ( offset < 0 ) {
++				this.activeMenu.scrollTop( scroll + offset );
++			} else if ( offset + itemHeight > elementHeight ) {
++				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
++			}
++		}
++	},
++
++	blur: function( event, fromFocus ) {
++		if ( !fromFocus ) {
++			clearTimeout( this.timer );
++		}
++
++		if ( !this.active ) {
++			return;
++		}
++
++		this.active.children( "a" ).removeClass( "ui-state-focus" );
++		this.active = null;
++
++		this._trigger( "blur", event, { item: this.active } );
++	},
++
++	_startOpening: function( submenu ) {
++		clearTimeout( this.timer );
++
++		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
++		// shift in the submenu position when mousing over the carat icon
++		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
++			return;
++		}
++
++		this.timer = this._delay(function() {
++			this._close();
++			this._open( submenu );
++		}, this.delay );
++	},
++
++	_open: function( submenu ) {
++		var position = $.extend({
++			of: this.active
++		}, this.options.position );
++
++		clearTimeout( this.timer );
++		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
++			.hide()
++			.attr( "aria-hidden", "true" );
++
++		submenu
++			.show()
++			.removeAttr( "aria-hidden" )
++			.attr( "aria-expanded", "true" )
++			.position( position );
++	},
++
++	collapseAll: function( event, all ) {
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			// If we were passed an event, look for the submenu that contains the event
++			var currentMenu = all ? this.element :
++				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
++
++			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
++			if ( !currentMenu.length ) {
++				currentMenu = this.element;
++			}
++
++			this._close( currentMenu );
++
++			this.blur( event );
++			this.activeMenu = currentMenu;
++		}, this.delay );
++	},
++
++	// With no arguments, closes the currently active menu - if nothing is active
++	// it closes all menus.  If passed an argument, it will search for menus BELOW
++	_close: function( startMenu ) {
++		if ( !startMenu ) {
++			startMenu = this.active ? this.active.parent() : this.element;
++		}
++
++		startMenu
++			.find( ".ui-menu" )
++				.hide()
++				.attr( "aria-hidden", "true" )
++				.attr( "aria-expanded", "false" )
++			.end()
++			.find( "a.ui-state-active" )
++				.removeClass( "ui-state-active" );
++	},
++
++	collapse: function( event ) {
++		var newItem = this.active &&
++			this.active.parent().closest( ".ui-menu-item", this.element );
++		if ( newItem && newItem.length ) {
++			this._close();
++			this.focus( event, newItem );
++		}
++	},
++
++	expand: function( event ) {
++		var newItem = this.active &&
++			this.active
++				.children( ".ui-menu " )
++				.children( ".ui-menu-item" )
++				.first();
++
++		if ( newItem && newItem.length ) {
++			this._open( newItem.parent() );
++
++			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
++			this._delay(function() {
++				this.focus( event, newItem );
++			});
++		}
++	},
++
++	next: function( event ) {
++		this._move( "next", "first", event );
++	},
++
++	previous: function( event ) {
++		this._move( "prev", "last", event );
++	},
++
++	isFirstItem: function() {
++		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
++	},
++
++	isLastItem: function() {
++		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
++	},
++
++	_move: function( direction, filter, event ) {
++		var next;
++		if ( this.active ) {
++			if ( direction === "first" || direction === "last" ) {
++				next = this.active
++					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
++					.eq( -1 );
++			} else {
++				next = this.active
++					[ direction + "All" ]( ".ui-menu-item" )
++					.eq( 0 );
++			}
++		}
++		if ( !next || !next.length || !this.active ) {
++			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
++		}
++
++		this.focus( event, next );
++	},
++
++	nextPage: function( event ) {
++		var item, base, height;
++
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isLastItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.nextAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base - height < 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
++				[ !this.active ? "first" : "last" ]() );
++		}
++	},
++
++	previousPage: function( event ) {
++		var item, base, height;
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isFirstItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.prevAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base + height > 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
++		}
++	},
++
++	_hasScroll: function() {
++		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
++	},
++
++	select: function( event ) {
++		// TODO: It should never be possible to not have an active item at this
++		// point, but the tests don't trigger mouseenter before click.
++		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
++		var ui = { item: this.active };
++		if ( !this.active.has( ".ui-menu" ).length ) {
++			this.collapseAll( event, true );
++		}
++		this._trigger( "select", event, ui );
++	}
++});
++
++}( jQuery ));
++(function( $, undefined ) {
++
++$.widget( "ui.progressbar", {
++	version: "1.10.3",
++	options: {
++		max: 100,
++		value: 0,
++
++		change: null,
++		complete: null
++	},
++
++	min: 0,
++
++	_create: function() {
++		// Constrain initial value
++		this.oldValue = this.options.value = this._constrainedValue();
++
++		this.element
++			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.attr({
++				// Only set static values, aria-valuenow and aria-valuemax are
++				// set inside _refreshValue()
++				role: "progressbar",
++				"aria-valuemin": this.min
++			});
++
++		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
++			.appendTo( this.element );
++
++		this._refreshValue();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++
++		this.valueDiv.remove();
++	},
++
++	value: function( newValue ) {
++		if ( newValue === undefined ) {
++			return this.options.value;
++		}
++
++		this.options.value = this._constrainedValue( newValue );
++		this._refreshValue();
++	},
++
++	_constrainedValue: function( newValue ) {
++		if ( newValue === undefined ) {
++			newValue = this.options.value;
++		}
++
++		this.indeterminate = newValue === false;
++
++		// sanitize value
++		if ( typeof newValue !== "number" ) {
++			newValue = 0;
++		}
++
++		return this.indeterminate ? false :
++			Math.min( this.options.max, Math.max( this.min, newValue ) );
++	},
++
++	_setOptions: function( options ) {
++		// Ensure "value" option is set after other values (like max)
++		var value = options.value;
++		delete options.value;
++
++		this._super( options );
++
++		this.options.value = this._constrainedValue( value );
++		this._refreshValue();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "max" ) {
++			// Don't allow a max less than min
++			value = Math.max( this.min, value );
++		}
++
++		this._super( key, value );
++	},
++
++	_percentage: function() {
++		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
++	},
++
++	_refreshValue: function() {
++		var value = this.options.value,
++			percentage = this._percentage();
++
++		this.valueDiv
++			.toggle( this.indeterminate || value > this.min )
++			.toggleClass( "ui-corner-right", value === this.options.max )
++			.width( percentage.toFixed(0) + "%" );
++
++		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
++
++		if ( this.indeterminate ) {
++			this.element.removeAttr( "aria-valuenow" );
++			if ( !this.overlayDiv ) {
++				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
++			}
++		} else {
++			this.element.attr({
++				"aria-valuemax": this.options.max,
++				"aria-valuenow": value
++			});
++			if ( this.overlayDiv ) {
++				this.overlayDiv.remove();
++				this.overlayDiv = null;
++			}
++		}
++
++		if ( this.oldValue !== value ) {
++			this.oldValue = value;
++			this._trigger( "change" );
++		}
++		if ( value === this.options.max ) {
++			this._trigger( "complete" );
++		}
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++// number of pages in a slider
++// (how many times can you page up/down to go through the whole range)
++var numPages = 5;
++
++$.widget( "ui.slider", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "slide",
++
++	options: {
++		animate: false,
++		distance: 0,
++		max: 100,
++		min: 0,
++		orientation: "horizontal",
++		range: false,
++		step: 1,
++		value: 0,
++		values: null,
++
++		// callbacks
++		change: null,
++		slide: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		this._keySliding = false;
++		this._mouseSliding = false;
++		this._animateOff = true;
++		this._handleIndex = null;
++		this._detectOrientation();
++		this._mouseInit();
++
++		this.element
++			.addClass( "ui-slider" +
++				" ui-slider-" + this.orientation +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all");
++
++		this._refresh();
++		this._setOption( "disabled", this.options.disabled );
++
++		this._animateOff = false;
++	},
++
++	_refresh: function() {
++		this._createRange();
++		this._createHandles();
++		this._setupEvents();
++		this._refreshValue();
++	},
++
++	_createHandles: function() {
++		var i, handleCount,
++			options = this.options,
++			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
++			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
++			handles = [];
++
++		handleCount = ( options.values && options.values.length ) || 1;
++
++		if ( existingHandles.length > handleCount ) {
++			existingHandles.slice( handleCount ).remove();
++			existingHandles = existingHandles.slice( 0, handleCount );
++		}
++
++		for ( i = existingHandles.length; i < handleCount; i++ ) {
++			handles.push( handle );
++		}
++
++		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
++
++		this.handle = this.handles.eq( 0 );
++
++		this.handles.each(function( i ) {
++			$( this ).data( "ui-slider-handle-index", i );
++		});
++	},
++
++	_createRange: function() {
++		var options = this.options,
++			classes = "";
++
++		if ( options.range ) {
++			if ( options.range === true ) {
++				if ( !options.values ) {
++					options.values = [ this._valueMin(), this._valueMin() ];
++				} else if ( options.values.length && options.values.length !== 2 ) {
++					options.values = [ options.values[0], options.values[0] ];
++				} else if ( $.isArray( options.values ) ) {
++					options.values = options.values.slice(0);
++				}
++			}
++
++			if ( !this.range || !this.range.length ) {
++				this.range = $( "<div></div>" )
++					.appendTo( this.element );
++
++				classes = "ui-slider-range" +
++				// note: this isn't the most fittingly semantic framework class for this element,
++				// but worked best visually with a variety of themes
++				" ui-widget-header ui-corner-all";
++			} else {
++				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
++					// Handle range switching from true to min/max
++					.css({
++						"left": "",
++						"bottom": ""
++					});
++			}
++
++			this.range.addClass( classes +
++				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
++		} else {
++			this.range = $([]);
++		}
++	},
++
++	_setupEvents: function() {
++		var elements = this.handles.add( this.range ).filter( "a" );
++		this._off( elements );
++		this._on( elements, this._handleEvents );
++		this._hoverable( elements );
++		this._focusable( elements );
++	},
++
++	_destroy: function() {
++		this.handles.remove();
++		this.range.remove();
++
++		this.element
++			.removeClass( "ui-slider" +
++				" ui-slider-horizontal" +
++				" ui-slider-vertical" +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" );
++
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function( event ) {
++		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
++			that = this,
++			o = this.options;
++
++		if ( o.disabled ) {
++			return false;
++		}
++
++		this.elementSize = {
++			width: this.element.outerWidth(),
++			height: this.element.outerHeight()
++		};
++		this.elementOffset = this.element.offset();
++
++		position = { x: event.pageX, y: event.pageY };
++		normValue = this._normValueFromMouse( position );
++		distance = this._valueMax() - this._valueMin() + 1;
++		this.handles.each(function( i ) {
++			var thisDistance = Math.abs( normValue - that.values(i) );
++			if (( distance > thisDistance ) ||
++				( distance === thisDistance &&
++					(i === that._lastChangedValue || that.values(i) === o.min ))) {
++				distance = thisDistance;
++				closestHandle = $( this );
++				index = i;
++			}
++		});
++
++		allowed = this._start( event, index );
++		if ( allowed === false ) {
++			return false;
++		}
++		this._mouseSliding = true;
++
++		this._handleIndex = index;
++
++		closestHandle
++			.addClass( "ui-state-active" )
++			.focus();
++
++		offset = closestHandle.offset();
++		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
++		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
++			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
++			top: event.pageY - offset.top -
++				( closestHandle.height() / 2 ) -
++				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
++				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
++				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
++		};
++
++		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
++			this._slide( event, index, normValue );
++		}
++		this._animateOff = true;
++		return true;
++	},
++
++	_mouseStart: function() {
++		return true;
++	},
++
++	_mouseDrag: function( event ) {
++		var position = { x: event.pageX, y: event.pageY },
++			normValue = this._normValueFromMouse( position );
++
++		this._slide( event, this._handleIndex, normValue );
++
++		return false;
++	},
++
++	_mouseStop: function( event ) {
++		this.handles.removeClass( "ui-state-active" );
++		this._mouseSliding = false;
++
++		this._stop( event, this._handleIndex );
++		this._change( event, this._handleIndex );
++
++		this._handleIndex = null;
++		this._clickOffset = null;
++		this._animateOff = false;
++
++		return false;
++	},
++
++	_detectOrientation: function() {
++		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
++	},
++
++	_normValueFromMouse: function( position ) {
++		var pixelTotal,
++			pixelMouse,
++			percentMouse,
++			valueTotal,
++			valueMouse;
++
++		if ( this.orientation === "horizontal" ) {
++			pixelTotal = this.elementSize.width;
++			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
++		} else {
++			pixelTotal = this.elementSize.height;
++			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
++		}
++
++		percentMouse = ( pixelMouse / pixelTotal );
++		if ( percentMouse > 1 ) {
++			percentMouse = 1;
++		}
++		if ( percentMouse < 0 ) {
++			percentMouse = 0;
++		}
++		if ( this.orientation === "vertical" ) {
++			percentMouse = 1 - percentMouse;
++		}
++
++		valueTotal = this._valueMax() - this._valueMin();
++		valueMouse = this._valueMin() + percentMouse * valueTotal;
++
++		return this._trimAlignValue( valueMouse );
++	},
++
++	_start: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++		return this._trigger( "start", event, uiHash );
++	},
++
++	_slide: function( event, index, newVal ) {
++		var otherVal,
++			newValues,
++			allowed;
++
++		if ( this.options.values && this.options.values.length ) {
++			otherVal = this.values( index ? 0 : 1 );
++
++			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
++					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
++				) {
++				newVal = otherVal;
++			}
++
++			if ( newVal !== this.values( index ) ) {
++				newValues = this.values();
++				newValues[ index ] = newVal;
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal,
++					values: newValues
++				} );
++				otherVal = this.values( index ? 0 : 1 );
++				if ( allowed !== false ) {
++					this.values( index, newVal, true );
++				}
++			}
++		} else {
++			if ( newVal !== this.value() ) {
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal
++				} );
++				if ( allowed !== false ) {
++					this.value( newVal );
++				}
++			}
++		}
++	},
++
++	_stop: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++
++		this._trigger( "stop", event, uiHash );
++	},
++
++	_change: function( event, index ) {
++		if ( !this._keySliding && !this._mouseSliding ) {
++			var uiHash = {
++				handle: this.handles[ index ],
++				value: this.value()
++			};
++			if ( this.options.values && this.options.values.length ) {
++				uiHash.value = this.values( index );
++				uiHash.values = this.values();
++			}
++
++			//store the last changed value index for reference when handles overlap
++			this._lastChangedValue = index;
++
++			this._trigger( "change", event, uiHash );
++		}
++	},
++
++	value: function( newValue ) {
++		if ( arguments.length ) {
++			this.options.value = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, 0 );
++			return;
++		}
++
++		return this._value();
++	},
++
++	values: function( index, newValue ) {
++		var vals,
++			newValues,
++			i;
++
++		if ( arguments.length > 1 ) {
++			this.options.values[ index ] = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, index );
++			return;
++		}
++
++		if ( arguments.length ) {
++			if ( $.isArray( arguments[ 0 ] ) ) {
++				vals = this.options.values;
++				newValues = arguments[ 0 ];
++				for ( i = 0; i < vals.length; i += 1 ) {
++					vals[ i ] = this._trimAlignValue( newValues[ i ] );
++					this._change( null, i );
++				}
++				this._refreshValue();
++			} else {
++				if ( this.options.values && this.options.values.length ) {
++					return this._values( index );
++				} else {
++					return this.value();
++				}
++			}
++		} else {
++			return this._values();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var i,
++			valsLength = 0;
++
++		if ( key === "range" && this.options.range === true ) {
++			if ( value === "min" ) {
++				this.options.value = this._values( 0 );
++				this.options.values = null;
++			} else if ( value === "max" ) {
++				this.options.value = this._values( this.options.values.length-1 );
++				this.options.values = null;
++			}
++		}
++
++		if ( $.isArray( this.options.values ) ) {
++			valsLength = this.options.values.length;
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++
++		switch ( key ) {
++			case "orientation":
++				this._detectOrientation();
++				this.element
++					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
++					.addClass( "ui-slider-" + this.orientation );
++				this._refreshValue();
++				break;
++			case "value":
++				this._animateOff = true;
++				this._refreshValue();
++				this._change( null, 0 );
++				this._animateOff = false;
++				break;
++			case "values":
++				this._animateOff = true;
++				this._refreshValue();
++				for ( i = 0; i < valsLength; i += 1 ) {
++					this._change( null, i );
++				}
++				this._animateOff = false;
++				break;
++			case "min":
++			case "max":
++				this._animateOff = true;
++				this._refreshValue();
++				this._animateOff = false;
++				break;
++			case "range":
++				this._animateOff = true;
++				this._refresh();
++				this._animateOff = false;
++				break;
++		}
++	},
++
++	//internal value getter
++	// _value() returns value trimmed by min and max, aligned by step
++	_value: function() {
++		var val = this.options.value;
++		val = this._trimAlignValue( val );
++
++		return val;
++	},
++
++	//internal values getter
++	// _values() returns array of values trimmed by min and max, aligned by step
++	// _values( index ) returns single value trimmed by min and max, aligned by step
++	_values: function( index ) {
++		var val,
++			vals,
++			i;
++
++		if ( arguments.length ) {
++			val = this.options.values[ index ];
++			val = this._trimAlignValue( val );
++
++			return val;
++		} else if ( this.options.values && this.options.values.length ) {
++			// .slice() creates a copy of the array
++			// this copy gets trimmed by min and max and then returned
++			vals = this.options.values.slice();
++			for ( i = 0; i < vals.length; i+= 1) {
++				vals[ i ] = this._trimAlignValue( vals[ i ] );
++			}
++
++			return vals;
++		} else {
++			return [];
++		}
++	},
++
++	// returns the step-aligned value that val is closest to, between (inclusive) min and max
++	_trimAlignValue: function( val ) {
++		if ( val <= this._valueMin() ) {
++			return this._valueMin();
++		}
++		if ( val >= this._valueMax() ) {
++			return this._valueMax();
++		}
++		var step = ( this.options.step > 0 ) ? this.options.step : 1,
++			valModStep = (val - this._valueMin()) % step,
++			alignValue = val - valModStep;
++
++		if ( Math.abs(valModStep) * 2 >= step ) {
++			alignValue += ( valModStep > 0 ) ? step : ( -step );
++		}
++
++		// Since JavaScript has problems with large floats, round
++		// the final value to 5 digits after the decimal point (see #4124)
++		return parseFloat( alignValue.toFixed(5) );
++	},
++
++	_valueMin: function() {
++		return this.options.min;
++	},
++
++	_valueMax: function() {
++		return this.options.max;
++	},
++
++	_refreshValue: function() {
++		var lastValPercent, valPercent, value, valueMin, valueMax,
++			oRange = this.options.range,
++			o = this.options,
++			that = this,
++			animate = ( !this._animateOff ) ? o.animate : false,
++			_set = {};
++
++		if ( this.options.values && this.options.values.length ) {
++			this.handles.each(function( i ) {
++				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
++				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++				if ( that.options.range === true ) {
++					if ( that.orientation === "horizontal" ) {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					} else {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					}
++				}
++				lastValPercent = valPercent;
++			});
++		} else {
++			value = this.value();
++			valueMin = this._valueMin();
++			valueMax = this._valueMax();
++			valPercent = ( valueMax !== valueMin ) ?
++					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
++					0;
++			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++
++			if ( oRange === "min" && this.orientation === "horizontal" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "horizontal" ) {
++				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++			if ( oRange === "min" && this.orientation === "vertical" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "vertical" ) {
++				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++		}
++	},
++
++	_handleEvents: {
++		keydown: function( event ) {
++			/*jshint maxcomplexity:25*/
++			var allowed, curVal, newVal, step,
++				index = $( event.target ).data( "ui-slider-handle-index" );
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++				case $.ui.keyCode.END:
++				case $.ui.keyCode.PAGE_UP:
++				case $.ui.keyCode.PAGE_DOWN:
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					event.preventDefault();
++					if ( !this._keySliding ) {
++						this._keySliding = true;
++						$( event.target ).addClass( "ui-state-active" );
++						allowed = this._start( event, index );
++						if ( allowed === false ) {
++							return;
++						}
++					}
++					break;
++			}
++
++			step = this.options.step;
++			if ( this.options.values && this.options.values.length ) {
++				curVal = newVal = this.values( index );
++			} else {
++				curVal = newVal = this.value();
++			}
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++					newVal = this._valueMin();
++					break;
++				case $.ui.keyCode.END:
++					newVal = this._valueMax();
++					break;
++				case $.ui.keyCode.PAGE_UP:
++					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.PAGE_DOWN:
++					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++					if ( curVal === this._valueMax() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal + step );
++					break;
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					if ( curVal === this._valueMin() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal - step );
++					break;
++			}
++
++			this._slide( event, index, newVal );
++		},
++		click: function( event ) {
++			event.preventDefault();
++		},
++		keyup: function( event ) {
++			var index = $( event.target ).data( "ui-slider-handle-index" );
++
++			if ( this._keySliding ) {
++				this._keySliding = false;
++				this._stop( event, index );
++				this._change( event, index );
++				$( event.target ).removeClass( "ui-state-active" );
++			}
++		}
++	}
++
++});
++
++}(jQuery));
++(function( $ ) {
++
++function modifier( fn ) {
++	return function() {
++		var previous = this.element.val();
++		fn.apply( this, arguments );
++		this._refresh();
++		if ( previous !== this.element.val() ) {
++			this._trigger( "change" );
++		}
++	};
++}
++
++$.widget( "ui.spinner", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	widgetEventPrefix: "spin",
++	options: {
++		culture: null,
++		icons: {
++			down: "ui-icon-triangle-1-s",
++			up: "ui-icon-triangle-1-n"
++		},
++		incremental: true,
++		max: null,
++		min: null,
++		numberFormat: null,
++		page: 10,
++		step: 1,
++
++		change: null,
++		spin: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		// handle string values that need to be parsed
++		this._setOption( "max", this.options.max );
++		this._setOption( "min", this.options.min );
++		this._setOption( "step", this.options.step );
++
++		// format the value, but don't constrain
++		this._value( this.element.val(), true );
++
++		this._draw();
++		this._on( this._events );
++		this._refresh();
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_getCreateOptions: function() {
++		var options = {},
++			element = this.element;
++
++		$.each( [ "min", "max", "step" ], function( i, option ) {
++			var value = element.attr( option );
++			if ( value !== undefined && value.length ) {
++				options[ option ] = value;
++			}
++		});
++
++		return options;
++	},
++
++	_events: {
++		keydown: function( event ) {
++			if ( this._start( event ) && this._keydown( event ) ) {
++				event.preventDefault();
++			}
++		},
++		keyup: "_stop",
++		focus: function() {
++			this.previous = this.element.val();
++		},
++		blur: function( event ) {
++			if ( this.cancelBlur ) {
++				delete this.cancelBlur;
++				return;
++			}
++
++			this._stop();
++			this._refresh();
++			if ( this.previous !== this.element.val() ) {
++				this._trigger( "change", event );
++			}
++		},
++		mousewheel: function( event, delta ) {
++			if ( !delta ) {
++				return;
++			}
++			if ( !this.spinning && !this._start( event ) ) {
++				return false;
++			}
++
++			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
++			clearTimeout( this.mousewheelTimer );
++			this.mousewheelTimer = this._delay(function() {
++				if ( this.spinning ) {
++					this._stop( event );
++				}
++			}, 100 );
++			event.preventDefault();
++		},
++		"mousedown .ui-spinner-button": function( event ) {
++			var previous;
++
++			// We never want the buttons to have focus; whenever the user is
++			// interacting with the spinner, the focus should be on the input.
++			// If the input is focused then this.previous is properly set from
++			// when the input first received focus. If the input is not focused
++			// then we need to set this.previous based on the value before spinning.
++			previous = this.element[0] === this.document[0].activeElement ?
++				this.previous : this.element.val();
++			function checkFocus() {
++				var isActive = this.element[0] === this.document[0].activeElement;
++				if ( !isActive ) {
++					this.element.focus();
++					this.previous = previous;
++					// support: IE
++					// IE sets focus asynchronously, so we need to check if focus
++					// moved off of the input because the user clicked on the button.
++					this._delay(function() {
++						this.previous = previous;
++					});
++				}
++			}
++
++			// ensure focus is on (or stays on) the text field
++			event.preventDefault();
++			checkFocus.call( this );
++
++			// support: IE
++			// IE doesn't prevent moving focus even with event.preventDefault()
++			// so we set a flag to know when we should ignore the blur event
++			// and check (again) if focus moved off of the input.
++			this.cancelBlur = true;
++			this._delay(function() {
++				delete this.cancelBlur;
++				checkFocus.call( this );
++			});
++
++			if ( this._start( event ) === false ) {
++				return;
++			}
++
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		"mouseup .ui-spinner-button": "_stop",
++		"mouseenter .ui-spinner-button": function( event ) {
++			// button will add ui-state-active if mouse was down while mouseleave and kept down
++			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
++				return;
++			}
++
++			if ( this._start( event ) === false ) {
++				return false;
++			}
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		// TODO: do we really want to consider this a stop?
++		// shouldn't we just stop the repeater and wait until mouseup before
++		// we trigger the stop event?
++		"mouseleave .ui-spinner-button": "_stop"
++	},
++
++	_draw: function() {
++		var uiSpinner = this.uiSpinner = this.element
++			.addClass( "ui-spinner-input" )
++			.attr( "autocomplete", "off" )
++			.wrap( this._uiSpinnerHtml() )
++			.parent()
++				// add buttons
++				.append( this._buttonHtml() );
++
++		this.element.attr( "role", "spinbutton" );
++
++		// button bindings
++		this.buttons = uiSpinner.find( ".ui-spinner-button" )
++			.attr( "tabIndex", -1 )
++			.button()
++			.removeClass( "ui-corner-all" );
++
++		// IE 6 doesn't understand height: 50% for the buttons
++		// unless the wrapper has an explicit height
++		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
++				uiSpinner.height() > 0 ) {
++			uiSpinner.height( uiSpinner.height() );
++		}
++
++		// disable spinner if element was already disabled
++		if ( this.options.disabled ) {
++			this.disable();
++		}
++	},
++
++	_keydown: function( event ) {
++		var options = this.options,
++			keyCode = $.ui.keyCode;
++
++		switch ( event.keyCode ) {
++		case keyCode.UP:
++			this._repeat( null, 1, event );
++			return true;
++		case keyCode.DOWN:
++			this._repeat( null, -1, event );
++			return true;
++		case keyCode.PAGE_UP:
++			this._repeat( null, options.page, event );
++			return true;
++		case keyCode.PAGE_DOWN:
++			this._repeat( null, -options.page, event );
++			return true;
++		}
++
++		return false;
++	},
++
++	_uiSpinnerHtml: function() {
++		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
++	},
++
++	_buttonHtml: function() {
++		return "" +
++			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
++				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
++			"</a>" +
++			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
++				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
++			"</a>";
++	},
++
++	_start: function( event ) {
++		if ( !this.spinning && this._trigger( "start", event ) === false ) {
++			return false;
++		}
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++		this.spinning = true;
++		return true;
++	},
++
++	_repeat: function( i, steps, event ) {
++		i = i || 500;
++
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			this._repeat( 40, steps, event );
++		}, i );
++
++		this._spin( steps * this.options.step, event );
++	},
++
++	_spin: function( step, event ) {
++		var value = this.value() || 0;
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++
++		value = this._adjustValue( value + step * this._increment( this.counter ) );
++
++		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
++			this._value( value );
++			this.counter++;
++		}
++	},
++
++	_increment: function( i ) {
++		var incremental = this.options.incremental;
++
++		if ( incremental ) {
++			return $.isFunction( incremental ) ?
++				incremental( i ) :
++				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
++		}
++
++		return 1;
++	},
++
++	_precision: function() {
++		var precision = this._precisionOf( this.options.step );
++		if ( this.options.min !== null ) {
++			precision = Math.max( precision, this._precisionOf( this.options.min ) );
++		}
++		return precision;
++	},
++
++	_precisionOf: function( num ) {
++		var str = num.toString(),
++			decimal = str.indexOf( "." );
++		return decimal === -1 ? 0 : str.length - decimal - 1;
++	},
++
++	_adjustValue: function( value ) {
++		var base, aboveMin,
++			options = this.options;
++
++		// make sure we're at a valid step
++		// - find out where we are relative to the base (min or 0)
++		base = options.min !== null ? options.min : 0;
++		aboveMin = value - base;
++		// - round to the nearest step
++		aboveMin = Math.round(aboveMin / options.step) * options.step;
++		// - rounding is based on 0, so adjust back to our base
++		value = base + aboveMin;
++
++		// fix precision from bad JS floating point math
++		value = parseFloat( value.toFixed( this._precision() ) );
++
++		// clamp the value
++		if ( options.max !== null && value > options.max) {
++			return options.max;
++		}
++		if ( options.min !== null && value < options.min ) {
++			return options.min;
++		}
++
++		return value;
++	},
++
++	_stop: function( event ) {
++		if ( !this.spinning ) {
++			return;
++		}
++
++		clearTimeout( this.timer );
++		clearTimeout( this.mousewheelTimer );
++		this.counter = 0;
++		this.spinning = false;
++		this._trigger( "stop", event );
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "culture" || key === "numberFormat" ) {
++			var prevValue = this._parse( this.element.val() );
++			this.options[ key ] = value;
++			this.element.val( this._format( prevValue ) );
++			return;
++		}
++
++		if ( key === "max" || key === "min" || key === "step" ) {
++			if ( typeof value === "string" ) {
++				value = this._parse( value );
++			}
++		}
++		if ( key === "icons" ) {
++			this.buttons.first().find( ".ui-icon" )
++				.removeClass( this.options.icons.up )
++				.addClass( value.up );
++			this.buttons.last().find( ".ui-icon" )
++				.removeClass( this.options.icons.down )
++				.addClass( value.down );
++		}
++
++		this._super( key, value );
++
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++				this.buttons.button( "disable" );
++			} else {
++				this.element.prop( "disabled", false );
++				this.buttons.button( "enable" );
++			}
++		}
++	},
++
++	_setOptions: modifier(function( options ) {
++		this._super( options );
++		this._value( this.element.val() );
++	}),
++
++	_parse: function( val ) {
++		if ( typeof val === "string" && val !== "" ) {
++			val = window.Globalize && this.options.numberFormat ?
++				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
++		}
++		return val === "" || isNaN( val ) ? null : val;
++	},
++
++	_format: function( value ) {
++		if ( value === "" ) {
++			return "";
++		}
++		return window.Globalize && this.options.numberFormat ?
++			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
++			value;
++	},
++
++	_refresh: function() {
++		this.element.attr({
++			"aria-valuemin": this.options.min,
++			"aria-valuemax": this.options.max,
++			// TODO: what should we do with values that can't be parsed?
++			"aria-valuenow": this._parse( this.element.val() )
++		});
++	},
++
++	// update the value without triggering change
++	_value: function( value, allowAny ) {
++		var parsed;
++		if ( value !== "" ) {
++			parsed = this._parse( value );
++			if ( parsed !== null ) {
++				if ( !allowAny ) {
++					parsed = this._adjustValue( parsed );
++				}
++				value = this._format( parsed );
++			}
++		}
++		this.element.val( value );
++		this._refresh();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-spinner-input" )
++			.prop( "disabled", false )
++			.removeAttr( "autocomplete" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++		this.uiSpinner.replaceWith( this.element );
++	},
++
++	stepUp: modifier(function( steps ) {
++		this._stepUp( steps );
++	}),
++	_stepUp: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * this.options.step );
++			this._stop();
++		}
++	},
++
++	stepDown: modifier(function( steps ) {
++		this._stepDown( steps );
++	}),
++	_stepDown: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * -this.options.step );
++			this._stop();
++		}
++	},
++
++	pageUp: modifier(function( pages ) {
++		this._stepUp( (pages || 1) * this.options.page );
++	}),
++
++	pageDown: modifier(function( pages ) {
++		this._stepDown( (pages || 1) * this.options.page );
++	}),
++
++	value: function( newVal ) {
++		if ( !arguments.length ) {
++			return this._parse( this.element.val() );
++		}
++		modifier( this._value ).call( this, newVal );
++	},
++
++	widget: function() {
++		return this.uiSpinner;
++	}
++});
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++var tabId = 0,
++	rhash = /#.*$/;
++
++function getNextTabId() {
++	return ++tabId;
++}
++
++function isLocal( anchor ) {
++	return anchor.hash.length > 1 &&
++		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
++			decodeURIComponent( location.href.replace( rhash, "" ) );
++}
++
++$.widget( "ui.tabs", {
++	version: "1.10.3",
++	delay: 300,
++	options: {
++		active: null,
++		collapsible: false,
++		event: "click",
++		heightStyle: "content",
++		hide: null,
++		show: null,
++
++		// callbacks
++		activate: null,
++		beforeActivate: null,
++		beforeLoad: null,
++		load: null
++	},
++
++	_create: function() {
++		var that = this,
++			options = this.options;
++
++		this.running = false;
++
++		this.element
++			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-tabs-collapsible", options.collapsible )
++			// Prevent users from focusing disabled tabs via click
++			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
++				if ( $( this ).is( ".ui-state-disabled" ) ) {
++					event.preventDefault();
++				}
++			})
++			// support: IE <9
++			// Preventing the default action in mousedown doesn't prevent IE
++			// from focusing the element, so if the anchor gets focused, blur.
++			// We don't have to worry about focusing the previously focused
++			// element since clicking on a non-focusable element should focus
++			// the body anyway.
++			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
++				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
++					this.blur();
++				}
++			});
++
++		this._processTabs();
++		options.active = this._initialActive();
++
++		// Take disabling tabs via class attribute from HTML
++		// into account and update option properly.
++		if ( $.isArray( options.disabled ) ) {
++			options.disabled = $.unique( options.disabled.concat(
++				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
++					return that.tabs.index( li );
++				})
++			) ).sort();
++		}
++
++		// check for length avoids error when initializing empty list
++		if ( this.options.active !== false && this.anchors.length ) {
++			this.active = this._findActive( options.active );
++		} else {
++			this.active = $();
++		}
++
++		this._refresh();
++
++		if ( this.active.length ) {
++			this.load( options.active );
++		}
++	},
++
++	_initialActive: function() {
++		var active = this.options.active,
++			collapsible = this.options.collapsible,
++			locationHash = location.hash.substring( 1 );
++
++		if ( active === null ) {
++			// check the fragment identifier in the URL
++			if ( locationHash ) {
++				this.tabs.each(function( i, tab ) {
++					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
++						active = i;
++						return false;
++					}
++				});
++			}
++
++			// check for a tab marked active via a class
++			if ( active === null ) {
++				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
++			}
++
++			// no active tab, set to false
++			if ( active === null || active === -1 ) {
++				active = this.tabs.length ? 0 : false;
++			}
++		}
++
++		// handle numbers: negative, out of range
++		if ( active !== false ) {
++			active = this.tabs.index( this.tabs.eq( active ) );
++			if ( active === -1 ) {
++				active = collapsible ? false : 0;
++			}
++		}
++
++		// don't allow collapsible: false and active: false
++		if ( !collapsible && active === false && this.anchors.length ) {
++			active = 0;
++		}
++
++		return active;
++	},
++
++	_getCreateEventData: function() {
++		return {
++			tab: this.active,
++			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
++		};
++	},
++
++	_tabKeydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
++			selectedIndex = this.tabs.index( focusedTab ),
++			goingForward = true;
++
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		switch ( event.keyCode ) {
++			case $.ui.keyCode.RIGHT:
++			case $.ui.keyCode.DOWN:
++				selectedIndex++;
++				break;
++			case $.ui.keyCode.UP:
++			case $.ui.keyCode.LEFT:
++				goingForward = false;
++				selectedIndex--;
++				break;
++			case $.ui.keyCode.END:
++				selectedIndex = this.anchors.length - 1;
++				break;
++			case $.ui.keyCode.HOME:
++				selectedIndex = 0;
++				break;
++			case $.ui.keyCode.SPACE:
++				// Activate only, no collapsing
++				event.preventDefault();
++				clearTimeout( this.activating );
++				this._activate( selectedIndex );
++				return;
++			case $.ui.keyCode.ENTER:
++				// Toggle (cancel delayed activation, allow collapsing)
++				event.preventDefault();
++				clearTimeout( this.activating );
++				// Determine if we should collapse or activate
++				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
++				return;
++			default:
++				return;
++		}
++
++		// Focus the appropriate tab, based on which key was pressed
++		event.preventDefault();
++		clearTimeout( this.activating );
++		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
++
++		// Navigating with control key will prevent automatic activation
++		if ( !event.ctrlKey ) {
++			// Update aria-selected immediately so that AT think the tab is already selected.
++			// Otherwise AT may confuse the user by stating that they need to activate the tab,
++			// but the tab will already be activated by the time the announcement finishes.
++			focusedTab.attr( "aria-selected", "false" );
++			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
++
++			this.activating = this._delay(function() {
++				this.option( "active", selectedIndex );
++			}, this.delay );
++		}
++	},
++
++	_panelKeydown: function( event ) {
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		// Ctrl+up moves focus to the current tab
++		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
++			event.preventDefault();
++			this.active.focus();
++		}
++	},
++
++	// Alt+page up/down moves focus to the previous/next tab (and activates)
++	_handlePageNav: function( event ) {
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
++			this._activate( this._focusNextTab( this.options.active - 1, false ) );
++			return true;
++		}
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
++			this._activate( this._focusNextTab( this.options.active + 1, true ) );
++			return true;
++		}
++	},
++
++	_findNextTab: function( index, goingForward ) {
++		var lastTabIndex = this.tabs.length - 1;
++
++		function constrain() {
++			if ( index > lastTabIndex ) {
++				index = 0;
++			}
++			if ( index < 0 ) {
++				index = lastTabIndex;
++			}
++			return index;
++		}
++
++		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
++			index = goingForward ? index + 1 : index - 1;
++		}
++
++		return index;
++	},
++
++	_focusNextTab: function( index, goingForward ) {
++		index = this._findNextTab( index, goingForward );
++		this.tabs.eq( index ).focus();
++		return index;
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "disabled" ) {
++			// don't use the widget factory's disabled handling
++			this._setupDisabled( value );
++			return;
++		}
++
++		this._super( key, value);
++
++		if ( key === "collapsible" ) {
++			this.element.toggleClass( "ui-tabs-collapsible", value );
++			// Setting collapsible: false while collapsed; open first panel
++			if ( !value && this.options.active === false ) {
++				this._activate( 0 );
++			}
++		}
++
++		if ( key === "event" ) {
++			this._setupEvents( value );
++		}
++
++		if ( key === "heightStyle" ) {
++			this._setupHeightStyle( value );
++		}
++	},
++
++	_tabId: function( tab ) {
++		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
++	},
++
++	_sanitizeSelector: function( hash ) {
++		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
++	},
++
++	refresh: function() {
++		var options = this.options,
++			lis = this.tablist.children( ":has(a[href])" );
++
++		// get disabled tabs from class attribute from HTML
++		// this will get converted to a boolean if needed in _refresh()
++		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
++			return lis.index( tab );
++		});
++
++		this._processTabs();
++
++		// was collapsed or no tabs
++		if ( options.active === false || !this.anchors.length ) {
++			options.active = false;
++			this.active = $();
++		// was active, but active tab is gone
++		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining tabs are disabled
++			if ( this.tabs.length === options.disabled.length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous tab
++			} else {
++				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
++			}
++		// was active, active tab still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.tabs.index( this.active );
++		}
++
++		this._refresh();
++	},
++
++	_refresh: function() {
++		this._setupDisabled( this.options.disabled );
++		this._setupEvents( this.options.event );
++		this._setupHeightStyle( this.options.heightStyle );
++
++		this.tabs.not( this.active ).attr({
++			"aria-selected": "false",
++			tabIndex: -1
++		});
++		this.panels.not( this._getPanelForTab( this.active ) )
++			.hide()
++			.attr({
++				"aria-expanded": "false",
++				"aria-hidden": "true"
++			});
++
++		// Make sure one tab is in the tab order
++		if ( !this.active.length ) {
++			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active
++				.addClass( "ui-tabs-active ui-state-active" )
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++			this._getPanelForTab( this.active )
++				.show()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++	},
++
++	_processTabs: function() {
++		var that = this;
++
++		this.tablist = this._getList()
++			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.attr( "role", "tablist" );
++
++		this.tabs = this.tablist.find( "> li:has(a[href])" )
++			.addClass( "ui-state-default ui-corner-top" )
++			.attr({
++				role: "tab",
++				tabIndex: -1
++			});
++
++		this.anchors = this.tabs.map(function() {
++				return $( "a", this )[ 0 ];
++			})
++			.addClass( "ui-tabs-anchor" )
++			.attr({
++				role: "presentation",
++				tabIndex: -1
++			});
++
++		this.panels = $();
++
++		this.anchors.each(function( i, anchor ) {
++			var selector, panel, panelId,
++				anchorId = $( anchor ).uniqueId().attr( "id" ),
++				tab = $( anchor ).closest( "li" ),
++				originalAriaControls = tab.attr( "aria-controls" );
++
++			// inline tab
++			if ( isLocal( anchor ) ) {
++				selector = anchor.hash;
++				panel = that.element.find( that._sanitizeSelector( selector ) );
++			// remote tab
++			} else {
++				panelId = that._tabId( tab );
++				selector = "#" + panelId;
++				panel = that.element.find( selector );
++				if ( !panel.length ) {
++					panel = that._createPanel( panelId );
++					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
++				}
++				panel.attr( "aria-live", "polite" );
++			}
++
++			if ( panel.length) {
++				that.panels = that.panels.add( panel );
++			}
++			if ( originalAriaControls ) {
++				tab.data( "ui-tabs-aria-controls", originalAriaControls );
++			}
++			tab.attr({
++				"aria-controls": selector.substring( 1 ),
++				"aria-labelledby": anchorId
++			});
++			panel.attr( "aria-labelledby", anchorId );
++		});
++
++		this.panels
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.attr( "role", "tabpanel" );
++	},
++
++	// allow overriding how to find the list for rare usage scenarios (#7715)
++	_getList: function() {
++		return this.element.find( "ol,ul" ).eq( 0 );
++	},
++
++	_createPanel: function( id ) {
++		return $( "<div>" )
++			.attr( "id", id )
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.data( "ui-tabs-destroy", true );
++	},
++
++	_setupDisabled: function( disabled ) {
++		if ( $.isArray( disabled ) ) {
++			if ( !disabled.length ) {
++				disabled = false;
++			} else if ( disabled.length === this.anchors.length ) {
++				disabled = true;
++			}
++		}
++
++		// disable tabs
++		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
++			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
++				$( li )
++					.addClass( "ui-state-disabled" )
++					.attr( "aria-disabled", "true" );
++			} else {
++				$( li )
++					.removeClass( "ui-state-disabled" )
++					.removeAttr( "aria-disabled" );
++			}
++		}
++
++		this.options.disabled = disabled;
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			click: function( event ) {
++				event.preventDefault();
++			}
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
++		this._on( this.anchors, events );
++		this._on( this.tabs, { keydown: "_tabKeydown" } );
++		this._on( this.panels, { keydown: "_panelKeydown" } );
++
++		this._focusable( this.tabs );
++		this._hoverable( this.tabs );
++	},
++
++	_setupHeightStyle: function( heightStyle ) {
++		var maxHeight,
++			parent = this.element.parent();
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			maxHeight -= this.element.outerHeight() - this.element.height();
++
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.element.children().not( this.panels ).each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.panels.each(function() {
++				$( this ).height( Math.max( 0, maxHeight -
++					$( this ).innerHeight() + $( this ).height() ) );
++			})
++			.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.panels.each(function() {
++				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
++			}).height( maxHeight );
++		}
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			anchor = $( event.currentTarget ),
++			tab = anchor.closest( "li" ),
++			clickedIsActive = tab[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : this._getPanelForTab( tab ),
++			toHide = !active.length ? $() : this._getPanelForTab( active ),
++			eventData = {
++				oldTab: active,
++				oldPanel: toHide,
++				newTab: collapsing ? $() : tab,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if ( tab.hasClass( "ui-state-disabled" ) ||
++				// tab is already loading
++				tab.hasClass( "ui-tabs-loading" ) ||
++				// can't switch durning an animation
++				this.running ||
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.tabs.index( tab );
++
++		this.active = clickedIsActive ? $() : tab;
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		if ( !toHide.length && !toShow.length ) {
++			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
++		}
++
++		if ( toShow.length ) {
++			this.load( this.tabs.index( tab ), event );
++		}
++		this._toggle( event, eventData );
++	},
++
++	// handles show/hide for selecting tabs
++	_toggle: function( event, eventData ) {
++		var that = this,
++			toShow = eventData.newPanel,
++			toHide = eventData.oldPanel;
++
++		this.running = true;
++
++		function complete() {
++			that.running = false;
++			that._trigger( "activate", event, eventData );
++		}
++
++		function show() {
++			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
++
++			if ( toShow.length && that.options.show ) {
++				that._show( toShow, that.options.show, complete );
++			} else {
++				toShow.show();
++				complete();
++			}
++		}
++
++		// start out by hiding, then showing, then completing
++		if ( toHide.length && this.options.hide ) {
++			this._hide( toHide, this.options.hide, function() {
++				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++				show();
++			});
++		} else {
++			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++			toHide.hide();
++			show();
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		eventData.oldTab.attr( "aria-selected", "false" );
++		// If we're switching tabs, remove the old tab from the tab order.
++		// If we're opening from collapsed state, remove the previous tab from the tab order.
++		// If we're collapsing, then keep the collapsing tab in the tab order.
++		if ( toShow.length && toHide.length ) {
++			eventData.oldTab.attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.tabs.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow.attr({
++			"aria-expanded": "true",
++			"aria-hidden": "false"
++		});
++		eventData.newTab.attr({
++			"aria-selected": "true",
++			tabIndex: 0
++		});
++	},
++
++	_activate: function( index ) {
++		var anchor,
++			active = this._findActive( index );
++
++		// trying to activate the already active panel
++		if ( active[ 0 ] === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the current active header
++		if ( !active.length ) {
++			active = this.active;
++		}
++
++		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
++		this._eventHandler({
++			target: anchor,
++			currentTarget: anchor,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( index ) {
++		return index === false ? $() : this.tabs.eq( index );
++	},
++
++	_getIndex: function( index ) {
++		// meta-function to give users option to provide a href string instead of a numerical index.
++		if ( typeof index === "string" ) {
++			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
++		}
++
++		return index;
++	},
++
++	_destroy: function() {
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
++
++		this.tablist
++			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.removeAttr( "role" );
++
++		this.anchors
++			.removeClass( "ui-tabs-anchor" )
++			.removeAttr( "role" )
++			.removeAttr( "tabIndex" )
++			.removeUniqueId();
++
++		this.tabs.add( this.panels ).each(function() {
++			if ( $.data( this, "ui-tabs-destroy" ) ) {
++				$( this ).remove();
++			} else {
++				$( this )
++					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
++						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
++					.removeAttr( "tabIndex" )
++					.removeAttr( "aria-live" )
++					.removeAttr( "aria-busy" )
++					.removeAttr( "aria-selected" )
++					.removeAttr( "aria-labelledby" )
++					.removeAttr( "aria-hidden" )
++					.removeAttr( "aria-expanded" )
++					.removeAttr( "role" );
++			}
++		});
++
++		this.tabs.each(function() {
++			var li = $( this ),
++				prev = li.data( "ui-tabs-aria-controls" );
++			if ( prev ) {
++				li
++					.attr( "aria-controls", prev )
++					.removeData( "ui-tabs-aria-controls" );
++			} else {
++				li.removeAttr( "aria-controls" );
++			}
++		});
++
++		this.panels.show();
++
++		if ( this.options.heightStyle !== "content" ) {
++			this.panels.css( "height", "" );
++		}
++	},
++
++	enable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === false ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = false;
++		} else {
++			index = this._getIndex( index );
++			if ( $.isArray( disabled ) ) {
++				disabled = $.map( disabled, function( num ) {
++					return num !== index ? num : null;
++				});
++			} else {
++				disabled = $.map( this.tabs, function( li, num ) {
++					return num !== index ? num : null;
++				});
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	disable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === true ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = true;
++		} else {
++			index = this._getIndex( index );
++			if ( $.inArray( index, disabled ) !== -1 ) {
++				return;
++			}
++			if ( $.isArray( disabled ) ) {
++				disabled = $.merge( [ index ], disabled ).sort();
++			} else {
++				disabled = [ index ];
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	load: function( index, event ) {
++		index = this._getIndex( index );
++		var that = this,
++			tab = this.tabs.eq( index ),
++			anchor = tab.find( ".ui-tabs-anchor" ),
++			panel = this._getPanelForTab( tab ),
++			eventData = {
++				tab: tab,
++				panel: panel
++			};
++
++		// not remote
++		if ( isLocal( anchor[ 0 ] ) ) {
++			return;
++		}
++
++		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
++
++		// support: jQuery <1.8
++		// jQuery <1.8 returns false if the request is canceled in beforeSend,
++		// but as of 1.8, $.ajax() always returns a jqXHR object.
++		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
++			tab.addClass( "ui-tabs-loading" );
++			panel.attr( "aria-busy", "true" );
++
++			this.xhr
++				.success(function( response ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						panel.html( response );
++						that._trigger( "load", event, eventData );
++					}, 1 );
++				})
++				.complete(function( jqXHR, status ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						if ( status === "abort" ) {
++							that.panels.stop( false, true );
++						}
++
++						tab.removeClass( "ui-tabs-loading" );
++						panel.removeAttr( "aria-busy" );
++
++						if ( jqXHR === that.xhr ) {
++							delete that.xhr;
++						}
++					}, 1 );
++				});
++		}
++	},
++
++	_ajaxSettings: function( anchor, event, eventData ) {
++		var that = this;
++		return {
++			url: anchor.attr( "href" ),
++			beforeSend: function( jqXHR, settings ) {
++				return that._trigger( "beforeLoad", event,
++					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
++			}
++		};
++	},
++
++	_getPanelForTab: function( tab ) {
++		var id = $( tab ).attr( "aria-controls" );
++		return this.element.find( this._sanitizeSelector( "#" + id ) );
++	}
++});
++
++})( jQuery );
++(function( $ ) {
++
++var increments = 0;
++
++function addDescribedBy( elem, id ) {
++	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
++	describedby.push( id );
++	elem
++		.data( "ui-tooltip-id", id )
++		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
++}
++
++function removeDescribedBy( elem ) {
++	var id = elem.data( "ui-tooltip-id" ),
++		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
++		index = $.inArray( id, describedby );
++	if ( index !== -1 ) {
++		describedby.splice( index, 1 );
++	}
++
++	elem.removeData( "ui-tooltip-id" );
++	describedby = $.trim( describedby.join( " " ) );
++	if ( describedby ) {
++		elem.attr( "aria-describedby", describedby );
++	} else {
++		elem.removeAttr( "aria-describedby" );
++	}
++}
++
++$.widget( "ui.tooltip", {
++	version: "1.10.3",
++	options: {
++		content: function() {
++			// support: IE<9, Opera in jQuery <1.7
++			// .text() can't accept undefined, so coerce to a string
++			var title = $( this ).attr( "title" ) || "";
++			// Escape title, since we're going from an attribute to raw HTML
++			return $( "<a>" ).text( title ).html();
++		},
++		hide: true,
++		// Disabled elements have inconsistent behavior across browsers (#8661)
++		items: "[title]:not([disabled])",
++		position: {
++			my: "left top+15",
++			at: "left bottom",
++			collision: "flipfit flip"
++		},
++		show: true,
++		tooltipClass: null,
++		track: false,
++
++		// callbacks
++		close: null,
++		open: null
++	},
++
++	_create: function() {
++		this._on({
++			mouseover: "open",
++			focusin: "open"
++		});
++
++		// IDs of generated tooltips, needed for destroy
++		this.tooltips = {};
++		// IDs of parent tooltips where we removed the title attribute
++		this.parents = {};
++
++		if ( this.options.disabled ) {
++			this._disable();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var that = this;
++
++		if ( key === "disabled" ) {
++			this[ value ? "_disable" : "_enable" ]();
++			this.options[ key ] = value;
++			// disable element style changes
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "content" ) {
++			$.each( this.tooltips, function( id, element ) {
++				that._updateContent( element );
++			});
++		}
++	},
++
++	_disable: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++		});
++
++		// remove title attributes to prevent native tooltips
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.is( "[title]" ) ) {
++				element
++					.data( "ui-tooltip-title", element.attr( "title" ) )
++					.attr( "title", "" );
++			}
++		});
++	},
++
++	_enable: function() {
++		// restore title attributes
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++			}
++		});
++	},
++
++	open: function( event ) {
++		var that = this,
++			target = $( event ? event.target : this.element )
++				// we need closest here due to mouseover bubbling,
++				// but always pointing at the same event target
++				.closest( this.options.items );
++
++		// No element to show a tooltip for or the tooltip is already open
++		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
++			return;
++		}
++
++		if ( target.attr( "title" ) ) {
++			target.data( "ui-tooltip-title", target.attr( "title" ) );
++		}
++
++		target.data( "ui-tooltip-open", true );
++
++		// kill parent tooltips, custom or native, for hover
++		if ( event && event.type === "mouseover" ) {
++			target.parents().each(function() {
++				var parent = $( this ),
++					blurEvent;
++				if ( parent.data( "ui-tooltip-open" ) ) {
++					blurEvent = $.Event( "blur" );
++					blurEvent.target = blurEvent.currentTarget = this;
++					that.close( blurEvent, true );
++				}
++				if ( parent.attr( "title" ) ) {
++					parent.uniqueId();
++					that.parents[ this.id ] = {
++						element: this,
++						title: parent.attr( "title" )
++					};
++					parent.attr( "title", "" );
++				}
++			});
++		}
++
++		this._updateContent( target, event );
++	},
++
++	_updateContent: function( target, event ) {
++		var content,
++			contentOption = this.options.content,
++			that = this,
++			eventType = event ? event.type : null;
++
++		if ( typeof contentOption === "string" ) {
++			return this._open( event, target, contentOption );
++		}
++
++		content = contentOption.call( target[0], function( response ) {
++			// ignore async response if tooltip was closed already
++			if ( !target.data( "ui-tooltip-open" ) ) {
++				return;
++			}
++			// IE may instantly serve a cached response for ajax requests
++			// delay this call to _open so the other call to _open runs first
++			that._delay(function() {
++				// jQuery creates a special event for focusin when it doesn't
++				// exist natively. To improve performance, the native event
++				// object is reused and the type is changed. Therefore, we can't
++				// rely on the type being correct after the event finished
++				// bubbling, so we set it back to the previous value. (#8740)
++				if ( event ) {
++					event.type = eventType;
++				}
++				this._open( event, target, response );
++			});
++		});
++		if ( content ) {
++			this._open( event, target, content );
++		}
++	},
++
++	_open: function( event, target, content ) {
++		var tooltip, events, delayedShow,
++			positionOption = $.extend( {}, this.options.position );
++
++		if ( !content ) {
++			return;
++		}
++
++		// Content can be updated multiple times. If the tooltip already
++		// exists, then just update the content and bail.
++		tooltip = this._find( target );
++		if ( tooltip.length ) {
++			tooltip.find( ".ui-tooltip-content" ).html( content );
++			return;
++		}
++
++		// if we have a title, clear it to prevent the native tooltip
++		// we have to check first to avoid defining a title if none exists
++		// (we don't want to cause an element to start matching [title])
++		//
++		// We use removeAttr only for key events, to allow IE to export the correct
++		// accessible attributes. For mouse events, set to empty string to avoid
++		// native tooltip showing up (happens only when removing inside mouseover).
++		if ( target.is( "[title]" ) ) {
++			if ( event && event.type === "mouseover" ) {
++				target.attr( "title", "" );
++			} else {
++				target.removeAttr( "title" );
++			}
++		}
++
++		tooltip = this._tooltip( target );
++		addDescribedBy( target, tooltip.attr( "id" ) );
++		tooltip.find( ".ui-tooltip-content" ).html( content );
++
++		function position( event ) {
++			positionOption.of = event;
++			if ( tooltip.is( ":hidden" ) ) {
++				return;
++			}
++			tooltip.position( positionOption );
++		}
++		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
++			this._on( this.document, {
++				mousemove: position
++			});
++			// trigger once to override element-relative positioning
++			position( event );
++		} else {
++			tooltip.position( $.extend({
++				of: target
++			}, this.options.position ) );
++		}
++
++		tooltip.hide();
++
++		this._show( tooltip, this.options.show );
++		// Handle tracking tooltips that are shown with a delay (#8644). As soon
++		// as the tooltip is visible, position the tooltip using the most recent
++		// event.
++		if ( this.options.show && this.options.show.delay ) {
++			delayedShow = this.delayedShow = setInterval(function() {
++				if ( tooltip.is( ":visible" ) ) {
++					position( positionOption.of );
++					clearInterval( delayedShow );
++				}
++			}, $.fx.interval );
++		}
++
++		this._trigger( "open", event, { tooltip: tooltip } );
++
++		events = {
++			keyup: function( event ) {
++				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
++					var fakeEvent = $.Event(event);
++					fakeEvent.currentTarget = target[0];
++					this.close( fakeEvent, true );
++				}
++			},
++			remove: function() {
++				this._removeTooltip( tooltip );
++			}
++		};
++		if ( !event || event.type === "mouseover" ) {
++			events.mouseleave = "close";
++		}
++		if ( !event || event.type === "focusin" ) {
++			events.focusout = "close";
++		}
++		this._on( true, target, events );
++	},
++
++	close: function( event ) {
++		var that = this,
++			target = $( event ? event.currentTarget : this.element ),
++			tooltip = this._find( target );
++
++		// disabling closes the tooltip, so we need to track when we're closing
++		// to avoid an infinite loop in case the tooltip becomes disabled on close
++		if ( this.closing ) {
++			return;
++		}
++
++		// Clear the interval for delayed tracking tooltips
++		clearInterval( this.delayedShow );
++
++		// only set title if we had one before (see comment in _open())
++		if ( target.data( "ui-tooltip-title" ) ) {
++			target.attr( "title", target.data( "ui-tooltip-title" ) );
++		}
++
++		removeDescribedBy( target );
++
++		tooltip.stop( true );
++		this._hide( tooltip, this.options.hide, function() {
++			that._removeTooltip( $( this ) );
++		});
++
++		target.removeData( "ui-tooltip-open" );
++		this._off( target, "mouseleave focusout keyup" );
++		// Remove 'remove' binding only on delegated targets
++		if ( target[0] !== this.element[0] ) {
++			this._off( target, "remove" );
++		}
++		this._off( this.document, "mousemove" );
++
++		if ( event && event.type === "mouseleave" ) {
++			$.each( this.parents, function( id, parent ) {
++				$( parent.element ).attr( "title", parent.title );
++				delete that.parents[ id ];
++			});
++		}
++
++		this.closing = true;
++		this._trigger( "close", event, { tooltip: tooltip } );
++		this.closing = false;
++	},
++
++	_tooltip: function( element ) {
++		var id = "ui-tooltip-" + increments++,
++			tooltip = $( "<div>" )
++				.attr({
++					id: id,
++					role: "tooltip"
++				})
++				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
++					( this.options.tooltipClass || "" ) );
++		$( "<div>" )
++			.addClass( "ui-tooltip-content" )
++			.appendTo( tooltip );
++		tooltip.appendTo( this.document[0].body );
++		this.tooltips[ id ] = element;
++		return tooltip;
++	},
++
++	_find: function( target ) {
++		var id = target.data( "ui-tooltip-id" );
++		return id ? $( "#" + id ) : $();
++	},
++
++	_removeTooltip: function( tooltip ) {
++		tooltip.remove();
++		delete this.tooltips[ tooltip.attr( "id" ) ];
++	},
++
++	_destroy: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			// Delegate to close method to handle common cleanup
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++
++			// Remove immediately; destroying an open tooltip doesn't use the
++			// hide animation
++			$( "#" + id ).remove();
++
++			// Restore the title
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++				element.removeData( "ui-tooltip-title" );
++			}
++		});
++	}
++});
++
++}( jQuery ) );
++(function($, undefined) {
++
++var dataSpace = "ui-effects-";
++
++$.effects = {
++	effect: {}
++};
++
++/*!
++ * jQuery Color Animations v2.1.2
++ * https://github.com/jquery/jquery-color
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * Date: Wed Jan 16 08:47:09 2013 -0600
++ */
++(function( jQuery, undefined ) {
++
++	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
++
++	// plusequals test for += 100 -= 100
++	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
++	// a set of RE's that can match strings and generate color tuples.
++	stringParsers = [{
++			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ],
++					execResult[ 3 ],
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ] * 2.55,
++					execResult[ 2 ] * 2.55,
++					execResult[ 3 ] * 2.55,
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			space: "hsla",
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ] / 100,
++					execResult[ 3 ] / 100,
++					execResult[ 4 ]
++				];
++			}
++		}],
++
++	// jQuery.Color( )
++	color = jQuery.Color = function( color, green, blue, alpha ) {
++		return new jQuery.Color.fn.parse( color, green, blue, alpha );
++	},
++	spaces = {
++		rgba: {
++			props: {
++				red: {
++					idx: 0,
++					type: "byte"
++				},
++				green: {
++					idx: 1,
++					type: "byte"
++				},
++				blue: {
++					idx: 2,
++					type: "byte"
++				}
++			}
++		},
++
++		hsla: {
++			props: {
++				hue: {
++					idx: 0,
++					type: "degrees"
++				},
++				saturation: {
++					idx: 1,
++					type: "percent"
++				},
++				lightness: {
++					idx: 2,
++					type: "percent"
++				}
++			}
++		}
++	},
++	propTypes = {
++		"byte": {
++			floor: true,
++			max: 255
++		},
++		"percent": {
++			max: 1
++		},
++		"degrees": {
++			mod: 360,
++			floor: true
++		}
++	},
++	support = color.support = {},
++
++	// element for support tests
++	supportElem = jQuery( "<p>" )[ 0 ],
++
++	// colors = jQuery.Color.names
++	colors,
++
++	// local aliases of functions called often
++	each = jQuery.each;
++
++// determine rgba support immediately
++supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
++support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
++
++// define cache name and alpha properties
++// for rgba and hsla spaces
++each( spaces, function( spaceName, space ) {
++	space.cache = "_" + spaceName;
++	space.props.alpha = {
++		idx: 3,
++		type: "percent",
++		def: 1
++	};
++});
++
++function clamp( value, prop, allowEmpty ) {
++	var type = propTypes[ prop.type ] || {};
++
++	if ( value == null ) {
++		return (allowEmpty || !prop.def) ? null : prop.def;
++	}
++
++	// ~~ is an short way of doing floor for positive numbers
++	value = type.floor ? ~~value : parseFloat( value );
++
++	// IE will pass in empty strings as value for alpha,
++	// which will hit this case
++	if ( isNaN( value ) ) {
++		return prop.def;
++	}
++
++	if ( type.mod ) {
++		// we add mod before modding to make sure that negatives values
++		// get converted properly: -10 -> 350
++		return (value + type.mod) % type.mod;
++	}
++
++	// for now all property types without mod have min and max
++	return 0 > value ? 0 : type.max < value ? type.max : value;
++}
++
++function stringParse( string ) {
++	var inst = color(),
++		rgba = inst._rgba = [];
++
++	string = string.toLowerCase();
++
++	each( stringParsers, function( i, parser ) {
++		var parsed,
++			match = parser.re.exec( string ),
++			values = match && parser.parse( match ),
++			spaceName = parser.space || "rgba";
++
++		if ( values ) {
++			parsed = inst[ spaceName ]( values );
++
++			// if this was an rgba parse the assignment might happen twice
++			// oh well....
++			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
++			rgba = inst._rgba = parsed._rgba;
++
++			// exit each( stringParsers ) here because we matched
++			return false;
++		}
++	});
++
++	// Found a stringParser that handled it
++	if ( rgba.length ) {
++
++		// if this came from a parsed string, force "transparent" when alpha is 0
++		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
++		if ( rgba.join() === "0,0,0,0" ) {
++			jQuery.extend( rgba, colors.transparent );
++		}
++		return inst;
++	}
++
++	// named colors
++	return colors[ string ];
++}
++
++color.fn = jQuery.extend( color.prototype, {
++	parse: function( red, green, blue, alpha ) {
++		if ( red === undefined ) {
++			this._rgba = [ null, null, null, null ];
++			return this;
++		}
++		if ( red.jquery || red.nodeType ) {
++			red = jQuery( red ).css( green );
++			green = undefined;
++		}
++
++		var inst = this,
++			type = jQuery.type( red ),
++			rgba = this._rgba = [];
++
++		// more than 1 argument specified - assume ( red, green, blue, alpha )
++		if ( green !== undefined ) {
++			red = [ red, green, blue, alpha ];
++			type = "array";
++		}
++
++		if ( type === "string" ) {
++			return this.parse( stringParse( red ) || colors._default );
++		}
++
++		if ( type === "array" ) {
++			each( spaces.rgba.props, function( key, prop ) {
++				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
++			});
++			return this;
++		}
++
++		if ( type === "object" ) {
++			if ( red instanceof color ) {
++				each( spaces, function( spaceName, space ) {
++					if ( red[ space.cache ] ) {
++						inst[ space.cache ] = red[ space.cache ].slice();
++					}
++				});
++			} else {
++				each( spaces, function( spaceName, space ) {
++					var cache = space.cache;
++					each( space.props, function( key, prop ) {
++
++						// if the cache doesn't exist, and we know how to convert
++						if ( !inst[ cache ] && space.to ) {
++
++							// if the value was null, we don't need to copy it
++							// if the key was alpha, we don't need to copy it either
++							if ( key === "alpha" || red[ key ] == null ) {
++								return;
++							}
++							inst[ cache ] = space.to( inst._rgba );
++						}
++
++						// this is the only case where we allow nulls for ALL properties.
++						// call clamp with alwaysAllowEmpty
++						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
++					});
++
++					// everything defined but alpha?
++					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
++						// use the default of 1
++						inst[ cache ][ 3 ] = 1;
++						if ( space.from ) {
++							inst._rgba = space.from( inst[ cache ] );
++						}
++					}
++				});
++			}
++			return this;
++		}
++	},
++	is: function( compare ) {
++		var is = color( compare ),
++			same = true,
++			inst = this;
++
++		each( spaces, function( _, space ) {
++			var localCache,
++				isCache = is[ space.cache ];
++			if (isCache) {
++				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
++				each( space.props, function( _, prop ) {
++					if ( isCache[ prop.idx ] != null ) {
++						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
++						return same;
++					}
++				});
++			}
++			return same;
++		});
++		return same;
++	},
++	_space: function() {
++		var used = [],
++			inst = this;
++		each( spaces, function( spaceName, space ) {
++			if ( inst[ space.cache ] ) {
++				used.push( spaceName );
++			}
++		});
++		return used.pop();
++	},
++	transition: function( other, distance ) {
++		var end = color( other ),
++			spaceName = end._space(),
++			space = spaces[ spaceName ],
++			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
++			start = startColor[ space.cache ] || space.to( startColor._rgba ),
++			result = start.slice();
++
++		end = end[ space.cache ];
++		each( space.props, function( key, prop ) {
++			var index = prop.idx,
++				startValue = start[ index ],
++				endValue = end[ index ],
++				type = propTypes[ prop.type ] || {};
++
++			// if null, don't override start value
++			if ( endValue === null ) {
++				return;
++			}
++			// if null - use end
++			if ( startValue === null ) {
++				result[ index ] = endValue;
++			} else {
++				if ( type.mod ) {
++					if ( endValue - startValue > type.mod / 2 ) {
++						startValue += type.mod;
++					} else if ( startValue - endValue > type.mod / 2 ) {
++						startValue -= type.mod;
++					}
++				}
++				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
++			}
++		});
++		return this[ spaceName ]( result );
++	},
++	blend: function( opaque ) {
++		// if we are already opaque - return ourself
++		if ( this._rgba[ 3 ] === 1 ) {
++			return this;
++		}
++
++		var rgb = this._rgba.slice(),
++			a = rgb.pop(),
++			blend = color( opaque )._rgba;
++
++		return color( jQuery.map( rgb, function( v, i ) {
++			return ( 1 - a ) * blend[ i ] + a * v;
++		}));
++	},
++	toRgbaString: function() {
++		var prefix = "rgba(",
++			rgba = jQuery.map( this._rgba, function( v, i ) {
++				return v == null ? ( i > 2 ? 1 : 0 ) : v;
++			});
++
++		if ( rgba[ 3 ] === 1 ) {
++			rgba.pop();
++			prefix = "rgb(";
++		}
++
++		return prefix + rgba.join() + ")";
++	},
++	toHslaString: function() {
++		var prefix = "hsla(",
++			hsla = jQuery.map( this.hsla(), function( v, i ) {
++				if ( v == null ) {
++					v = i > 2 ? 1 : 0;
++				}
++
++				// catch 1 and 2
++				if ( i && i < 3 ) {
++					v = Math.round( v * 100 ) + "%";
++				}
++				return v;
++			});
++
++		if ( hsla[ 3 ] === 1 ) {
++			hsla.pop();
++			prefix = "hsl(";
++		}
++		return prefix + hsla.join() + ")";
++	},
++	toHexString: function( includeAlpha ) {
++		var rgba = this._rgba.slice(),
++			alpha = rgba.pop();
++
++		if ( includeAlpha ) {
++			rgba.push( ~~( alpha * 255 ) );
++		}
++
++		return "#" + jQuery.map( rgba, function( v ) {
++
++			// default to 0 when nulls exist
++			v = ( v || 0 ).toString( 16 );
++			return v.length === 1 ? "0" + v : v;
++		}).join("");
++	},
++	toString: function() {
++		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
++	}
++});
++color.fn.parse.prototype = color.fn;
++
++// hsla conversions adapted from:
++// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
++
++function hue2rgb( p, q, h ) {
++	h = ( h + 1 ) % 1;
++	if ( h * 6 < 1 ) {
++		return p + (q - p) * h * 6;
++	}
++	if ( h * 2 < 1) {
++		return q;
++	}
++	if ( h * 3 < 2 ) {
++		return p + (q - p) * ((2/3) - h) * 6;
++	}
++	return p;
++}
++
++spaces.hsla.to = function ( rgba ) {
++	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
++		return [ null, null, null, rgba[ 3 ] ];
++	}
++	var r = rgba[ 0 ] / 255,
++		g = rgba[ 1 ] / 255,
++		b = rgba[ 2 ] / 255,
++		a = rgba[ 3 ],
++		max = Math.max( r, g, b ),
++		min = Math.min( r, g, b ),
++		diff = max - min,
++		add = max + min,
++		l = add * 0.5,
++		h, s;
++
++	if ( min === max ) {
++		h = 0;
++	} else if ( r === max ) {
++		h = ( 60 * ( g - b ) / diff ) + 360;
++	} else if ( g === max ) {
++		h = ( 60 * ( b - r ) / diff ) + 120;
++	} else {
++		h = ( 60 * ( r - g ) / diff ) + 240;
++	}
++
++	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
++	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
++	if ( diff === 0 ) {
++		s = 0;
++	} else if ( l <= 0.5 ) {
++		s = diff / add;
++	} else {
++		s = diff / ( 2 - add );
++	}
++	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
++};
++
++spaces.hsla.from = function ( hsla ) {
++	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
++		return [ null, null, null, hsla[ 3 ] ];
++	}
++	var h = hsla[ 0 ] / 360,
++		s = hsla[ 1 ],
++		l = hsla[ 2 ],
++		a = hsla[ 3 ],
++		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
++		p = 2 * l - q;
++
++	return [
++		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
++		Math.round( hue2rgb( p, q, h ) * 255 ),
++		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
++		a
++	];
++};
++
++
++each( spaces, function( spaceName, space ) {
++	var props = space.props,
++		cache = space.cache,
++		to = space.to,
++		from = space.from;
++
++	// makes rgba() and hsla()
++	color.fn[ spaceName ] = function( value ) {
++
++		// generate a cache for this space if it doesn't exist
++		if ( to && !this[ cache ] ) {
++			this[ cache ] = to( this._rgba );
++		}
++		if ( value === undefined ) {
++			return this[ cache ].slice();
++		}
++
++		var ret,
++			type = jQuery.type( value ),
++			arr = ( type === "array" || type === "object" ) ? value : arguments,
++			local = this[ cache ].slice();
++
++		each( props, function( key, prop ) {
++			var val = arr[ type === "object" ? key : prop.idx ];
++			if ( val == null ) {
++				val = local[ prop.idx ];
++			}
++			local[ prop.idx ] = clamp( val, prop );
++		});
++
++		if ( from ) {
++			ret = color( from( local ) );
++			ret[ cache ] = local;
++			return ret;
++		} else {
++			return color( local );
++		}
++	};
++
++	// makes red() green() blue() alpha() hue() saturation() lightness()
++	each( props, function( key, prop ) {
++		// alpha is included in more than one space
++		if ( color.fn[ key ] ) {
++			return;
++		}
++		color.fn[ key ] = function( value ) {
++			var vtype = jQuery.type( value ),
++				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
++				local = this[ fn ](),
++				cur = local[ prop.idx ],
++				match;
++
++			if ( vtype === "undefined" ) {
++				return cur;
++			}
++
++			if ( vtype === "function" ) {
++				value = value.call( this, cur );
++				vtype = jQuery.type( value );
++			}
++			if ( value == null && prop.empty ) {
++				return this;
++			}
++			if ( vtype === "string" ) {
++				match = rplusequals.exec( value );
++				if ( match ) {
++					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
++				}
++			}
++			local[ prop.idx ] = value;
++			return this[ fn ]( local );
++		};
++	});
++});
++
++// add cssHook and .fx.step function for each named hook.
++// accept a space separated string of properties
++color.hook = function( hook ) {
++	var hooks = hook.split( " " );
++	each( hooks, function( i, hook ) {
++		jQuery.cssHooks[ hook ] = {
++			set: function( elem, value ) {
++				var parsed, curElem,
++					backgroundColor = "";
++
++				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
++					value = color( parsed || value );
++					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
++						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
++						while (
++							(backgroundColor === "" || backgroundColor === "transparent") &&
++							curElem && curElem.style
++						) {
++							try {
++								backgroundColor = jQuery.css( curElem, "backgroundColor" );
++								curElem = curElem.parentNode;
++							} catch ( e ) {
++							}
++						}
++
++						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
++							backgroundColor :
++							"_default" );
++					}
++
++					value = value.toRgbaString();
++				}
++				try {
++					elem.style[ hook ] = value;
++				} catch( e ) {
++					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
++				}
++			}
++		};
++		jQuery.fx.step[ hook ] = function( fx ) {
++			if ( !fx.colorInit ) {
++				fx.start = color( fx.elem, hook );
++				fx.end = color( fx.end );
++				fx.colorInit = true;
++			}
++			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
++		};
++	});
++
++};
++
++color.hook( stepHooks );
++
++jQuery.cssHooks.borderColor = {
++	expand: function( value ) {
++		var expanded = {};
++
++		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
++			expanded[ "border" + part + "Color" ] = value;
++		});
++		return expanded;
++	}
++};
++
++// Basic color names only.
++// Usage of any of the other color names requires adding yourself or including
++// jquery.color.svg-names.js.
++colors = jQuery.Color.names = {
++	// 4.1. Basic color keywords
++	aqua: "#00ffff",
++	black: "#000000",
++	blue: "#0000ff",
++	fuchsia: "#ff00ff",
++	gray: "#808080",
++	green: "#008000",
++	lime: "#00ff00",
++	maroon: "#800000",
++	navy: "#000080",
++	olive: "#808000",
++	purple: "#800080",
++	red: "#ff0000",
++	silver: "#c0c0c0",
++	teal: "#008080",
++	white: "#ffffff",
++	yellow: "#ffff00",
++
++	// 4.2.3. "transparent" color keyword
++	transparent: [ null, null, null, 0 ],
++
++	_default: "#ffffff"
++};
++
++})( jQuery );
++
++
++/******************************************************************************/
++/****************************** CLASS ANIMATIONS ******************************/
++/******************************************************************************/
++(function() {
++
++var classAnimationActions = [ "add", "remove", "toggle" ],
++	shorthandStyles = {
++		border: 1,
++		borderBottom: 1,
++		borderColor: 1,
++		borderLeft: 1,
++		borderRight: 1,
++		borderTop: 1,
++		borderWidth: 1,
++		margin: 1,
++		padding: 1
++	};
++
++$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
++	$.fx.step[ prop ] = function( fx ) {
++		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
++			jQuery.style( fx.elem, prop, fx.end );
++			fx.setAttr = true;
++		}
++	};
++});
++
++function getElementStyles( elem ) {
++	var key, len,
++		style = elem.ownerDocument.defaultView ?
++			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
++			elem.currentStyle,
++		styles = {};
++
++	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
++		len = style.length;
++		while ( len-- ) {
++			key = style[ len ];
++			if ( typeof style[ key ] === "string" ) {
++				styles[ $.camelCase( key ) ] = style[ key ];
++			}
++		}
++	// support: Opera, IE <9
++	} else {
++		for ( key in style ) {
++			if ( typeof style[ key ] === "string" ) {
++				styles[ key ] = style[ key ];
++			}
++		}
++	}
++
++	return styles;
++}
++
++
++function styleDifference( oldStyle, newStyle ) {
++	var diff = {},
++		name, value;
++
++	for ( name in newStyle ) {
++		value = newStyle[ name ];
++		if ( oldStyle[ name ] !== value ) {
++			if ( !shorthandStyles[ name ] ) {
++				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
++					diff[ name ] = value;
++				}
++			}
++		}
++	}
++
++	return diff;
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++$.effects.animateClass = function( value, duration, easing, callback ) {
++	var o = $.speed( duration, easing, callback );
++
++	return this.queue( function() {
++		var animated = $( this ),
++			baseClass = animated.attr( "class" ) || "",
++			applyClassChange,
++			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
++
++		// map the animated objects to store the original styles.
++		allAnimations = allAnimations.map(function() {
++			var el = $( this );
++			return {
++				el: el,
++				start: getElementStyles( this )
++			};
++		});
++
++		// apply class change
++		applyClassChange = function() {
++			$.each( classAnimationActions, function(i, action) {
++				if ( value[ action ] ) {
++					animated[ action + "Class" ]( value[ action ] );
++				}
++			});
++		};
++		applyClassChange();
++
++		// map all animated objects again - calculate new styles and diff
++		allAnimations = allAnimations.map(function() {
++			this.end = getElementStyles( this.el[ 0 ] );
++			this.diff = styleDifference( this.start, this.end );
++			return this;
++		});
++
++		// apply original class
++		animated.attr( "class", baseClass );
++
++		// map all animated objects again - this time collecting a promise
++		allAnimations = allAnimations.map(function() {
++			var styleInfo = this,
++				dfd = $.Deferred(),
++				opts = $.extend({}, o, {
++					queue: false,
++					complete: function() {
++						dfd.resolve( styleInfo );
++					}
++				});
++
++			this.el.animate( this.diff, opts );
++			return dfd.promise();
++		});
++
++		// once all animations have completed:
++		$.when.apply( $, allAnimations.get() ).done(function() {
++
++			// set the final class
++			applyClassChange();
++
++			// for each animated element,
++			// clear all css properties that were animated
++			$.each( arguments, function() {
++				var el = this.el;
++				$.each( this.diff, function(key) {
++					el.css( key, "" );
++				});
++			});
++
++			// this is guarnteed to be there if you use jQuery.speed()
++			// it also handles dequeuing the next anim...
++			o.complete.call( animated[ 0 ] );
++		});
++	});
++};
++
++$.fn.extend({
++	addClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return speed ?
++				$.effects.animateClass.call( this,
++					{ add: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.addClass ),
++
++	removeClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return arguments.length > 1 ?
++				$.effects.animateClass.call( this,
++					{ remove: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.removeClass ),
++
++	toggleClass: (function( orig ) {
++		return function( classNames, force, speed, easing, callback ) {
++			if ( typeof force === "boolean" || force === undefined ) {
++				if ( !speed ) {
++					// without speed parameter
++					return orig.apply( this, arguments );
++				} else {
++					return $.effects.animateClass.call( this,
++						(force ? { add: classNames } : { remove: classNames }),
++						speed, easing, callback );
++				}
++			} else {
++				// without force parameter
++				return $.effects.animateClass.call( this,
++					{ toggle: classNames }, force, speed, easing );
++			}
++		};
++	})( $.fn.toggleClass ),
++
++	switchClass: function( remove, add, speed, easing, callback) {
++		return $.effects.animateClass.call( this, {
++			add: add,
++			remove: remove
++		}, speed, easing, callback );
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EFFECTS **********************************/
++/******************************************************************************/
++
++(function() {
++
++$.extend( $.effects, {
++	version: "1.10.3",
++
++	// Saves a set of properties in a data storage
++	save: function( element, set ) {
++		for( var i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
++			}
++		}
++	},
++
++	// Restores a set of previously saved properties from a data storage
++	restore: function( element, set ) {
++		var val, i;
++		for( i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				val = element.data( dataSpace + set[ i ] );
++				// support: jQuery 1.6.2
++				// http://bugs.jquery.com/ticket/9917
++				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
++				// We can't differentiate between "" and 0 here, so we just assume
++				// empty string since it's likely to be a more common value...
++				if ( val === undefined ) {
++					val = "";
++				}
++				element.css( set[ i ], val );
++			}
++		}
++	},
++
++	setMode: function( el, mode ) {
++		if (mode === "toggle") {
++			mode = el.is( ":hidden" ) ? "show" : "hide";
++		}
++		return mode;
++	},
++
++	// Translates a [top,left] array into a baseline value
++	// this should be a little more flexible in the future to handle a string & hash
++	getBaseline: function( origin, original ) {
++		var y, x;
++		switch ( origin[ 0 ] ) {
++			case "top": y = 0; break;
++			case "middle": y = 0.5; break;
++			case "bottom": y = 1; break;
++			default: y = origin[ 0 ] / original.height;
++		}
++		switch ( origin[ 1 ] ) {
++			case "left": x = 0; break;
++			case "center": x = 0.5; break;
++			case "right": x = 1; break;
++			default: x = origin[ 1 ] / original.width;
++		}
++		return {
++			x: x,
++			y: y
++		};
++	},
++
++	// Wraps the element around a wrapper that copies position properties
++	createWrapper: function( element ) {
++
++		// if the element is already wrapped, return it
++		if ( element.parent().is( ".ui-effects-wrapper" )) {
++			return element.parent();
++		}
++
++		// wrap the element
++		var props = {
++				width: element.outerWidth(true),
++				height: element.outerHeight(true),
++				"float": element.css( "float" )
++			},
++			wrapper = $( "<div></div>" )
++				.addClass( "ui-effects-wrapper" )
++				.css({
++					fontSize: "100%",
++					background: "transparent",
++					border: "none",
++					margin: 0,
++					padding: 0
++				}),
++			// Store the size in case width/height are defined in % - Fixes #5245
++			size = {
++				width: element.width(),
++				height: element.height()
++			},
++			active = document.activeElement;
++
++		// support: Firefox
++		// Firefox incorrectly exposes anonymous content
++		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
++		try {
++			active.id;
++		} catch( e ) {
++			active = document.body;
++		}
++
++		element.wrap( wrapper );
++
++		// Fixes #7595 - Elements lose focus when wrapped.
++		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++			$( active ).focus();
++		}
++
++		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
++
++		// transfer positioning properties to the wrapper
++		if ( element.css( "position" ) === "static" ) {
++			wrapper.css({ position: "relative" });
++			element.css({ position: "relative" });
++		} else {
++			$.extend( props, {
++				position: element.css( "position" ),
++				zIndex: element.css( "z-index" )
++			});
++			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
++				props[ pos ] = element.css( pos );
++				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
++					props[ pos ] = "auto";
++				}
++			});
++			element.css({
++				position: "relative",
++				top: 0,
++				left: 0,
++				right: "auto",
++				bottom: "auto"
++			});
++		}
++		element.css(size);
++
++		return wrapper.css( props ).show();
++	},
++
++	removeWrapper: function( element ) {
++		var active = document.activeElement;
++
++		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
++			element.parent().replaceWith( element );
++
++			// Fixes #7595 - Elements lose focus when wrapped.
++			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++				$( active ).focus();
++			}
++		}
++
++
++		return element;
++	},
++
++	setTransition: function( element, list, factor, value ) {
++		value = value || {};
++		$.each( list, function( i, x ) {
++			var unit = element.cssUnit( x );
++			if ( unit[ 0 ] > 0 ) {
++				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
++			}
++		});
++		return value;
++	}
++});
++
++// return an effect options object for the given parameters:
++function _normalizeArguments( effect, options, speed, callback ) {
++
++	// allow passing all options as the first parameter
++	if ( $.isPlainObject( effect ) ) {
++		options = effect;
++		effect = effect.effect;
++	}
++
++	// convert to an object
++	effect = { effect: effect };
++
++	// catch (effect, null, ...)
++	if ( options == null ) {
++		options = {};
++	}
++
++	// catch (effect, callback)
++	if ( $.isFunction( options ) ) {
++		callback = options;
++		speed = null;
++		options = {};
++	}
++
++	// catch (effect, speed, ?)
++	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
++		callback = speed;
++		speed = options;
++		options = {};
++	}
++
++	// catch (effect, options, callback)
++	if ( $.isFunction( speed ) ) {
++		callback = speed;
++		speed = null;
++	}
++
++	// add options to effect
++	if ( options ) {
++		$.extend( effect, options );
++	}
++
++	speed = speed || options.duration;
++	effect.duration = $.fx.off ? 0 :
++		typeof speed === "number" ? speed :
++		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
++		$.fx.speeds._default;
++
++	effect.complete = callback || options.complete;
++
++	return effect;
++}
++
++function standardAnimationOption( option ) {
++	// Valid standard speeds (nothing, number, named speed)
++	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
++		return true;
++	}
++
++	// Invalid strings - treat as "normal" speed
++	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
++		return true;
++	}
++
++	// Complete callback
++	if ( $.isFunction( option ) ) {
++		return true;
++	}
++
++	// Options hash (but not naming an effect)
++	if ( typeof option === "object" && !option.effect ) {
++		return true;
++	}
++
++	// Didn't match any standard API
++	return false;
++}
++
++$.fn.extend({
++	effect: function( /* effect, options, speed, callback */ ) {
++		var args = _normalizeArguments.apply( this, arguments ),
++			mode = args.mode,
++			queue = args.queue,
++			effectMethod = $.effects.effect[ args.effect ];
++
++		if ( $.fx.off || !effectMethod ) {
++			// delegate to the original method (e.g., .show()) if possible
++			if ( mode ) {
++				return this[ mode ]( args.duration, args.complete );
++			} else {
++				return this.each( function() {
++					if ( args.complete ) {
++						args.complete.call( this );
++					}
++				});
++			}
++		}
++
++		function run( next ) {
++			var elem = $( this ),
++				complete = args.complete,
++				mode = args.mode;
++
++			function done() {
++				if ( $.isFunction( complete ) ) {
++					complete.call( elem[0] );
++				}
++				if ( $.isFunction( next ) ) {
++					next();
++				}
++			}
++
++			// If the element already has the correct final state, delegate to
++			// the core methods so the internal tracking of "olddisplay" works.
++			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
++				elem[ mode ]();
++				done();
++			} else {
++				effectMethod.call( elem[0], args, done );
++			}
++		}
++
++		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
++	},
++
++	show: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "show";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.show ),
++
++	hide: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "hide";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.hide ),
++
++	toggle: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "toggle";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.toggle ),
++
++	// helper functions
++	cssUnit: function(key) {
++		var style = this.css( key ),
++			val = [];
++
++		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
++			if ( style.indexOf( unit ) > 0 ) {
++				val = [ parseFloat( style ), unit ];
++			}
++		});
++		return val;
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EASING ***********************************/
++/******************************************************************************/
++
++(function() {
++
++// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
++
++var baseEasings = {};
++
++$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
++	baseEasings[ name ] = function( p ) {
++		return Math.pow( p, i + 2 );
++	};
++});
++
++$.extend( baseEasings, {
++	Sine: function ( p ) {
++		return 1 - Math.cos( p * Math.PI / 2 );
++	},
++	Circ: function ( p ) {
++		return 1 - Math.sqrt( 1 - p * p );
++	},
++	Elastic: function( p ) {
++		return p === 0 || p === 1 ? p :
++			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
++	},
++	Back: function( p ) {
++		return p * p * ( 3 * p - 2 );
++	},
++	Bounce: function ( p ) {
++		var pow2,
++			bounce = 4;
++
++		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
++		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
++	}
++});
++
++$.each( baseEasings, function( name, easeIn ) {
++	$.easing[ "easeIn" + name ] = easeIn;
++	$.easing[ "easeOut" + name ] = function( p ) {
++		return 1 - easeIn( 1 - p );
++	};
++	$.easing[ "easeInOut" + name ] = function( p ) {
++		return p < 0.5 ?
++			easeIn( p * 2 ) / 2 :
++			1 - easeIn( p * -2 + 2 ) / 2;
++	};
++});
++
++})();
++
++})(jQuery);
++(function( $, undefined ) {
++
++var rvertical = /up|down|vertical/,
++	rpositivemotion = /up|left|vertical|horizontal/;
++
++$.effects.effect.blind = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		direction = o.direction || "up",
++		vertical = rvertical.test( direction ),
++		ref = vertical ? "height" : "width",
++		ref2 = vertical ? "top" : "left",
++		motion = rpositivemotion.test( direction ),
++		animation = {},
++		show = mode === "show",
++		wrapper, distance, margin;
++
++	// if already wrapped, the wrapper's properties are my property. #6245
++	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
++		$.effects.save( el.parent(), props );
++	} else {
++		$.effects.save( el, props );
++	}
++	el.show();
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	distance = wrapper[ ref ]();
++	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
++
++	animation[ ref ] = show ? distance : 0;
++	if ( !motion ) {
++		el
++			.css( vertical ? "bottom" : "right", 0 )
++			.css( vertical ? "top" : "left", "auto" )
++			.css({ position: "absolute" });
++
++		animation[ ref2 ] = show ? margin : distance + margin;
++	}
++
++	// start at 0 if we are showing
++	if ( show ) {
++		wrapper.css( ref, 0 );
++		if ( ! motion ) {
++			wrapper.css( ref2, margin + distance );
++		}
++	}
++
++	// Animate
++	wrapper.animate( animation, {
++		duration: o.duration,
++		easing: o.easing,
++		queue: false,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.bounce = function( o, done ) {
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++
++		// defaults:
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		hide = mode === "hide",
++		show = mode === "show",
++		direction = o.direction || "up",
++		distance = o.distance,
++		times = o.times || 5,
++
++		// number of internal animations
++		anims = times * 2 + ( show || hide ? 1 : 0 ),
++		speed = o.duration / anims,
++		easing = o.easing,
++
++		// utility:
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ),
++		i,
++		upAnim,
++		downAnim,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	// Avoid touching opacity to prevent clearType and PNG issues in IE
++	if ( show || hide ) {
++		props.push( "opacity" );
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el ); // Create Wrapper
++
++	// default distance for the BIGGEST bounce is the outer Distance / 3
++	if ( !distance ) {
++		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
++	}
++
++	if ( show ) {
++		downAnim = { opacity: 1 };
++		downAnim[ ref ] = 0;
++
++		// if we are showing, force opacity 0 and set the initial position
++		// then do the "first" animation
++		el.css( "opacity", 0 )
++			.css( ref, motion ? -distance * 2 : distance * 2 )
++			.animate( downAnim, speed, easing );
++	}
++
++	// start at the smallest distance if we are hiding
++	if ( hide ) {
++		distance = distance / Math.pow( 2, times - 1 );
++	}
++
++	downAnim = {};
++	downAnim[ ref ] = 0;
++	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
++	for ( i = 0; i < times; i++ ) {
++		upAnim = {};
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing )
++			.animate( downAnim, speed, easing );
++
++		distance = hide ? distance * 2 : distance / 2;
++	}
++
++	// Last Bounce when Hiding
++	if ( hide ) {
++		upAnim = { opacity: 0 };
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing );
++	}
++
++	el.queue(function() {
++		if ( hide ) {
++			el.hide();
++		}
++		$.effects.restore( el, props );
++		$.effects.removeWrapper( el );
++		done();
++	});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.clip = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "vertical",
++		vert = direction === "vertical",
++		size = vert ? "height" : "width",
++		position = vert ? "top" : "left",
++		animation = {},
++		wrapper, animate, distance;
++
++	// Save & Show
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
++	distance = animate[ size ]();
++
++	// Shift
++	if ( show ) {
++		animate.css( size, 0 );
++		animate.css( position, distance / 2 );
++	}
++
++	// Create Animation Object:
++	animation[ size ] = show ? distance : 0;
++	animation[ position ] = show ? 0 : distance / 2;
++
++	// Animate
++	animate.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( !show ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.drop = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
++		animation = {
++			opacity: show ? 1 : 0
++		},
++		distance;
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
++
++	if ( show ) {
++		el
++			.css( "opacity", 0 )
++			.css( ref, motion === "pos" ? -distance : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( motion === "pos" ? "+=" : "-=" ) :
++		( motion === "pos" ? "-=" : "+=" ) ) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.explode = function( o, done ) {
++
++	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
++		cells = rows,
++		el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++
++		// show and then visibility:hidden the element before calculating offset
++		offset = el.show().css( "visibility", "hidden" ).offset(),
++
++		// width and height of a piece
++		width = Math.ceil( el.outerWidth() / cells ),
++		height = Math.ceil( el.outerHeight() / rows ),
++		pieces = [],
++
++		// loop
++		i, j, left, top, mx, my;
++
++	// children animate complete:
++	function childComplete() {
++		pieces.push( this );
++		if ( pieces.length === rows * cells ) {
++			animComplete();
++		}
++	}
++
++	// clone the element for each row and cell.
++	for( i = 0; i < rows ; i++ ) { // ===>
++		top = offset.top + i * height;
++		my = i - ( rows - 1 ) / 2 ;
++
++		for( j = 0; j < cells ; j++ ) { // |||
++			left = offset.left + j * width;
++			mx = j - ( cells - 1 ) / 2 ;
++
++			// Create a clone of the now hidden main element that will be absolute positioned
++			// within a wrapper div off the -left and -top equal to size of our pieces
++			el
++				.clone()
++				.appendTo( "body" )
++				.wrap( "<div></div>" )
++				.css({
++					position: "absolute",
++					visibility: "visible",
++					left: -j * width,
++					top: -i * height
++				})
++
++			// select the wrapper - make it overflow: hidden and absolute positioned based on
++			// where the original was located +left and +top equal to the size of pieces
++				.parent()
++				.addClass( "ui-effects-explode" )
++				.css({
++					position: "absolute",
++					overflow: "hidden",
++					width: width,
++					height: height,
++					left: left + ( show ? mx * width : 0 ),
++					top: top + ( show ? my * height : 0 ),
++					opacity: show ? 0 : 1
++				}).animate({
++					left: left + ( show ? 0 : mx * width ),
++					top: top + ( show ? 0 : my * height ),
++					opacity: show ? 1 : 0
++				}, o.duration || 500, o.easing, childComplete );
++		}
++	}
++
++	function animComplete() {
++		el.css({
++			visibility: "visible"
++		});
++		$( pieces ).remove();
++		if ( !show ) {
++			el.hide();
++		}
++		done();
++	}
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.fade = function( o, done ) {
++	var el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "toggle" );
++
++	el.animate({
++		opacity: mode
++	}, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: done
++	});
++};
++
++})( jQuery );
++(function( $, undefined ) {
++
++$.effects.effect.fold = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		size = o.size || 15,
++		percent = /([0-9]+)%/.exec( size ),
++		horizFirst = !!o.horizFirst,
++		widthFirst = show !== horizFirst,
++		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
++		duration = o.duration / 2,
++		wrapper, distance,
++		animation1 = {},
++		animation2 = {};
++
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	distance = widthFirst ?
++		[ wrapper.width(), wrapper.height() ] :
++		[ wrapper.height(), wrapper.width() ];
++
++	if ( percent ) {
++		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
++	}
++	if ( show ) {
++		wrapper.css( horizFirst ? {
++			height: 0,
++			width: size
++		} : {
++			height: size,
++			width: 0
++		});
++	}
++
++	// Animation
++	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
++	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
++
++	// Animate
++	wrapper
++		.animate( animation1, duration, o.easing )
++		.animate( animation2, duration, o.easing, function() {
++			if ( hide ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.highlight = function( o, done ) {
++	var elem = $( this ),
++		props = [ "backgroundImage", "backgroundColor", "opacity" ],
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		animation = {
++			backgroundColor: elem.css( "backgroundColor" )
++		};
++
++	if (mode === "hide") {
++		animation.opacity = 0;
++	}
++
++	$.effects.save( elem, props );
++
++	elem
++		.show()
++		.css({
++			backgroundImage: "none",
++			backgroundColor: o.color || "#ffff99"
++		})
++		.animate( animation, {
++			queue: false,
++			duration: o.duration,
++			easing: o.easing,
++			complete: function() {
++				if ( mode === "hide" ) {
++					elem.hide();
++				}
++				$.effects.restore( elem, props );
++				done();
++			}
++		});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.pulsate = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		showhide = ( show || mode === "hide" ),
++
++		// showing or hiding leaves of the "last" animation
++		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
++		duration = o.duration / anims,
++		animateTo = 0,
++		queue = elem.queue(),
++		queuelen = queue.length,
++		i;
++
++	if ( show || !elem.is(":visible")) {
++		elem.css( "opacity", 0 ).show();
++		animateTo = 1;
++	}
++
++	// anims - 1 opacity "toggles"
++	for ( i = 1; i < anims; i++ ) {
++		elem.animate({
++			opacity: animateTo
++		}, duration, o.easing );
++		animateTo = 1 - animateTo;
++	}
++
++	elem.animate({
++		opacity: animateTo
++	}, duration, o.easing);
++
++	elem.queue(function() {
++		if ( hide ) {
++			elem.hide();
++		}
++		done();
++	});
++
++	// We just queued up "anims" animations, we need to put them next in the queue
++	if ( queuelen > 1 ) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	elem.dequeue();
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.puff = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "hide" ),
++		hide = mode === "hide",
++		percent = parseInt( o.percent, 10 ) || 150,
++		factor = percent / 100,
++		original = {
++			height: elem.height(),
++			width: elem.width(),
++			outerHeight: elem.outerHeight(),
++			outerWidth: elem.outerWidth()
++		};
++
++	$.extend( o, {
++		effect: "scale",
++		queue: false,
++		fade: true,
++		mode: mode,
++		complete: done,
++		percent: hide ? percent : 100,
++		from: hide ?
++			original :
++			{
++				height: original.height * factor,
++				width: original.width * factor,
++				outerHeight: original.outerHeight * factor,
++				outerWidth: original.outerWidth * factor
++			}
++	});
++
++	elem.effect( o );
++};
++
++$.effects.effect.scale = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		options = $.extend( true, {}, o ),
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		percent = parseInt( o.percent, 10 ) ||
++			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
++		direction = o.direction || "both",
++		origin = o.origin,
++		original = {
++			height: el.height(),
++			width: el.width(),
++			outerHeight: el.outerHeight(),
++			outerWidth: el.outerWidth()
++		},
++		factor = {
++			y: direction !== "horizontal" ? (percent / 100) : 1,
++			x: direction !== "vertical" ? (percent / 100) : 1
++		};
++
++	// We are going to pass this effect to the size effect:
++	options.effect = "size";
++	options.queue = false;
++	options.complete = done;
++
++	// Set default origin and restore for show/hide
++	if ( mode !== "effect" ) {
++		options.origin = origin || ["middle","center"];
++		options.restore = true;
++	}
++
++	options.from = o.from || ( mode === "show" ? {
++		height: 0,
++		width: 0,
++		outerHeight: 0,
++		outerWidth: 0
++	} : original );
++	options.to = {
++		height: original.height * factor.y,
++		width: original.width * factor.x,
++		outerHeight: original.outerHeight * factor.y,
++		outerWidth: original.outerWidth * factor.x
++	};
++
++	// Fade option to support puff
++	if ( options.fade ) {
++		if ( mode === "show" ) {
++			options.from.opacity = 0;
++			options.to.opacity = 1;
++		}
++		if ( mode === "hide" ) {
++			options.from.opacity = 1;
++			options.to.opacity = 0;
++		}
++	}
++
++	// Animate
++	el.effect( options );
++
++};
++
++$.effects.effect.size = function( o, done ) {
++
++	// Create element
++	var original, baseline, factor,
++		el = $( this ),
++		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
++
++		// Always restore
++		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
++
++		// Copy for children
++		props2 = [ "width", "height", "overflow" ],
++		cProps = [ "fontSize" ],
++		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
++		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
++
++		// Set options
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		restore = o.restore || mode !== "effect",
++		scale = o.scale || "both",
++		origin = o.origin || [ "middle", "center" ],
++		position = el.css( "position" ),
++		props = restore ? props0 : props1,
++		zero = {
++			height: 0,
++			width: 0,
++			outerHeight: 0,
++			outerWidth: 0
++		};
++
++	if ( mode === "show" ) {
++		el.show();
++	}
++	original = {
++		height: el.height(),
++		width: el.width(),
++		outerHeight: el.outerHeight(),
++		outerWidth: el.outerWidth()
++	};
++
++	if ( o.mode === "toggle" && mode === "show" ) {
++		el.from = o.to || zero;
++		el.to = o.from || original;
++	} else {
++		el.from = o.from || ( mode === "show" ? zero : original );
++		el.to = o.to || ( mode === "hide" ? zero : original );
++	}
++
++	// Set scaling factor
++	factor = {
++		from: {
++			y: el.from.height / original.height,
++			x: el.from.width / original.width
++		},
++		to: {
++			y: el.to.height / original.height,
++			x: el.to.width / original.width
++		}
++	};
++
++	// Scale the css box
++	if ( scale === "box" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( vProps );
++			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
++		}
++
++		// Horizontal props scaling
++		if ( factor.from.x !== factor.to.x ) {
++			props = props.concat( hProps );
++			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
++			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
++		}
++	}
++
++	// Scale the content
++	if ( scale === "content" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( cProps ).concat( props2 );
++			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
++		}
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++	el.css( "overflow", "hidden" ).css( el.from );
++
++	// Adjust
++	if (origin) { // Calculate baseline shifts
++		baseline = $.effects.getBaseline( origin, original );
++		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
++		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
++		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
++		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
++	}
++	el.css( el.from ); // set top & left
++
++	// Animate
++	if ( scale === "content" || scale === "both" ) { // Scale the children
++
++		// Add margins/font-size
++		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
++		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
++		props2 = props0.concat(vProps).concat(hProps);
++
++		el.find( "*[width]" ).each( function(){
++			var child = $( this ),
++				c_original = {
++					height: child.height(),
++					width: child.width(),
++					outerHeight: child.outerHeight(),
++					outerWidth: child.outerWidth()
++				};
++			if (restore) {
++				$.effects.save(child, props2);
++			}
++
++			child.from = {
++				height: c_original.height * factor.from.y,
++				width: c_original.width * factor.from.x,
++				outerHeight: c_original.outerHeight * factor.from.y,
++				outerWidth: c_original.outerWidth * factor.from.x
++			};
++			child.to = {
++				height: c_original.height * factor.to.y,
++				width: c_original.width * factor.to.x,
++				outerHeight: c_original.height * factor.to.y,
++				outerWidth: c_original.width * factor.to.x
++			};
++
++			// Vertical props scaling
++			if ( factor.from.y !== factor.to.y ) {
++				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
++				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
++			}
++
++			// Horizontal props scaling
++			if ( factor.from.x !== factor.to.x ) {
++				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
++				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
++			}
++
++			// Animate children
++			child.css( child.from );
++			child.animate( child.to, o.duration, o.easing, function() {
++
++				// Restore children
++				if ( restore ) {
++					$.effects.restore( child, props2 );
++				}
++			});
++		});
++	}
++
++	// Animate
++	el.animate( el.to, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( el.to.opacity === 0 ) {
++				el.css( "opacity", el.from.opacity );
++			}
++			if( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			if ( !restore ) {
++
++				// we need to calculate our new positioning based on the scaling
++				if ( position === "static" ) {
++					el.css({
++						position: "relative",
++						top: el.to.top,
++						left: el.to.left
++					});
++				} else {
++					$.each([ "top", "left" ], function( idx, pos ) {
++						el.css( pos, function( _, str ) {
++							var val = parseInt( str, 10 ),
++								toRef = idx ? el.to.left : el.to.top;
++
++							// if original was "auto", recalculate the new value from wrapper
++							if ( str === "auto" ) {
++								return toRef + "px";
++							}
++
++							return val + toRef + "px";
++						});
++					});
++				}
++			}
++
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.shake = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		direction = o.direction || "left",
++		distance = o.distance || 20,
++		times = o.times || 3,
++		anims = times * 2 + 1,
++		speed = Math.round(o.duration/anims),
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		animation = {},
++		animation1 = {},
++		animation2 = {},
++		i,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	// Animation
++	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
++	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
++	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
++
++	// Animate
++	el.animate( animation, speed, o.easing );
++
++	// Shakes
++	for ( i = 1; i < times; i++ ) {
++		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
++	}
++	el
++		.animate( animation1, speed, o.easing )
++		.animate( animation, speed / 2, o.easing )
++		.queue(function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.slide = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
++		mode = $.effects.setMode( el, o.mode || "show" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		distance,
++		animation = {};
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
++
++	$.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	if ( show ) {
++		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( positiveMotion ? "+=" : "-=") :
++		( positiveMotion ? "-=" : "+=")) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.transfer = function( o, done ) {
++	var elem = $( this ),
++		target = $( o.to ),
++		targetFixed = target.css( "position" ) === "fixed",
++		body = $("body"),
++		fixTop = targetFixed ? body.scrollTop() : 0,
++		fixLeft = targetFixed ? body.scrollLeft() : 0,
++		endPosition = target.offset(),
++		animation = {
++			top: endPosition.top - fixTop ,
++			left: endPosition.left - fixLeft ,
++			height: target.innerHeight(),
++			width: target.innerWidth()
++		},
++		startPosition = elem.offset(),
++		transfer = $( "<div class='ui-effects-transfer'></div>" )
++			.appendTo( document.body )
++			.addClass( o.className )
++			.css({
++				top: startPosition.top - fixTop ,
++				left: startPosition.left - fixLeft ,
++				height: elem.innerHeight(),
++				width: elem.innerWidth(),
++				position: targetFixed ? "fixed" : "absolute"
++			})
++			.animate( animation, o.duration, o.easing, function() {
++				transfer.remove();
++				done();
++			});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.datepicker.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.datepicker.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.datepicker.jquery.json	(revision 15487)
+@@ -0,0 +1,66 @@
++{
++	"name": "ui.datepicker",
++	"title": "jQuery UI Datepicker",
++	"description": "Displays a calendar from an input or inline for selecting dates.",
++	"keywords": [
++		"ui",
++		"datepicker",
++		"form",
++		"calendar",
++		"date",
++		"i18n"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/datepicker/",
++	"demo": "http://jqueryui.com/datepicker/",
++	"docs": "http://api.jqueryui.com/datepicker/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3"
++	},
++	"category": "widget"
++}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.sortable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.sortable.jquery.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.sortable.jquery.json	(revision 15487)
+@@ -0,0 +1,66 @@
++{
++	"name": "ui.sortable",
++	"title": "jQuery UI Sortable",
++	"description": "Enables items in a list to be sorted using the mouse.",
++	"keywords": [
++		"ui",
++		"sortable",
++		"sort",
++		"list"
++	],
++	"version": "1.10.3",
++	"author": {
++		"name": "jQuery Foundation and other contributors",
++		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
++	},
++	"maintainers": [
++		{
++			"name": "Scott González",
++			"email": "scott.gonzalez@gmail.com",
++			"url": "http://scottgonzalez.com"
++		},
++		{
++			"name": "Jörn Zaefferer",
++			"email": "joern.zaefferer@gmail.com",
++			"url": "http://bassistance.de"
++		},
++		{
++			"name": "Kris Borchers",
++			"email": "kris.borchers@gmail.com",
++			"url": "http://krisborchers.com"
++		},
++		{
++			"name": "Corey Frang",
++			"email": "gnarf37@gmail.com",
++			"url": "http://gnarf.net"
++		},
++		{
++			"name": "Mike Sherov",
++			"email": "mike.sherov@gmail.com",
++			"url": "http://mike.sherov.com"
++		},
++		{
++			"name": "TJ VanToll",
++			"email": "tj.vantoll@gmail.com",
++			"url": "http://tjvantoll.com"
++		}
++	],
++	"licenses": [
++		{
++			"type": "MIT",
++			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
++		}
++	],
++	"bugs": "http://bugs.jqueryui.com/",
++	"homepage": "http://jqueryui.com/sortable/",
++	"demo": "http://jqueryui.com/sortable/",
++	"docs": "http://api.jqueryui.com/sortable/",
++	"download": "http://jqueryui.com/download/",
++	"dependencies": {
++		"jquery": ">=1.6",
++		"ui.core": "1.10.3",
++		"ui.widget": "1.10.3",
++		"ui.mouse": "1.10.3"
++	},
++	"category": "interaction"
++}
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.button.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.button.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.button.js	(revision 15487)
+@@ -0,0 +1,419 @@
++/*!
++ * jQuery UI Button 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/button/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var lastActive, startXPos, startYPos, clickDragged,
++	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
++	stateClasses = "ui-state-hover ui-state-active ",
++	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
++	formResetHandler = function() {
++		var form = $( this );
++		setTimeout(function() {
++			form.find( ":ui-button" ).button( "refresh" );
++		}, 1 );
++	},
++	radioGroup = function( radio ) {
++		var name = radio.name,
++			form = radio.form,
++			radios = $( [] );
++		if ( name ) {
++			name = name.replace( /'/g, "\\'" );
++			if ( form ) {
++				radios = $( form ).find( "[name='" + name + "']" );
++			} else {
++				radios = $( "[name='" + name + "']", radio.ownerDocument )
++					.filter(function() {
++						return !this.form;
++					});
++			}
++		}
++		return radios;
++	};
++
++$.widget( "ui.button", {
++	version: "1.10.3",
++	defaultElement: "<button>",
++	options: {
++		disabled: null,
++		text: true,
++		label: null,
++		icons: {
++			primary: null,
++			secondary: null
++		}
++	},
++	_create: function() {
++		this.element.closest( "form" )
++			.unbind( "reset" + this.eventNamespace )
++			.bind( "reset" + this.eventNamespace, formResetHandler );
++
++		if ( typeof this.options.disabled !== "boolean" ) {
++			this.options.disabled = !!this.element.prop( "disabled" );
++		} else {
++			this.element.prop( "disabled", this.options.disabled );
++		}
++
++		this._determineButtonType();
++		this.hasTitle = !!this.buttonElement.attr( "title" );
++
++		var that = this,
++			options = this.options,
++			toggleButton = this.type === "checkbox" || this.type === "radio",
++			activeClass = !toggleButton ? "ui-state-active" : "",
++			focusClass = "ui-state-focus";
++
++		if ( options.label === null ) {
++			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
++		}
++
++		this._hoverable( this.buttonElement );
++
++		this.buttonElement
++			.addClass( baseClasses )
++			.attr( "role", "button" )
++			.bind( "mouseenter" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				if ( this === lastActive ) {
++					$( this ).addClass( "ui-state-active" );
++				}
++			})
++			.bind( "mouseleave" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( activeClass );
++			})
++			.bind( "click" + this.eventNamespace, function( event ) {
++				if ( options.disabled ) {
++					event.preventDefault();
++					event.stopImmediatePropagation();
++				}
++			});
++
++		this.element
++			.bind( "focus" + this.eventNamespace, function() {
++				// no need to check disabled, focus won't be triggered anyway
++				that.buttonElement.addClass( focusClass );
++			})
++			.bind( "blur" + this.eventNamespace, function() {
++				that.buttonElement.removeClass( focusClass );
++			});
++
++		if ( toggleButton ) {
++			this.element.bind( "change" + this.eventNamespace, function() {
++				if ( clickDragged ) {
++					return;
++				}
++				that.refresh();
++			});
++			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
++			// prevents issue where button state changes but checkbox/radio checked state
++			// does not in Firefox (see ticket #6970)
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					clickDragged = false;
++					startXPos = event.pageX;
++					startYPos = event.pageY;
++				})
++				.bind( "mouseup" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
++						clickDragged = true;
++					}
++			});
++		}
++
++		if ( this.type === "checkbox" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++			});
++		} else if ( this.type === "radio" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).addClass( "ui-state-active" );
++				that.buttonElement.attr( "aria-pressed", "true" );
++
++				var radio = that.element[ 0 ];
++				radioGroup( radio )
++					.not( radio )
++					.map(function() {
++						return $( this ).button( "widget" )[ 0 ];
++					})
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			});
++		} else {
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).addClass( "ui-state-active" );
++					lastActive = this;
++					that.document.one( "mouseup", function() {
++						lastActive = null;
++					});
++				})
++				.bind( "mouseup" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).removeClass( "ui-state-active" );
++				})
++				.bind( "keydown" + this.eventNamespace, function(event) {
++					if ( options.disabled ) {
++						return false;
++					}
++					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
++						$( this ).addClass( "ui-state-active" );
++					}
++				})
++				// see #8559, we bind to blur here in case the button element loses
++				// focus between keydown and keyup, it would be left in an "active" state
++				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
++					$( this ).removeClass( "ui-state-active" );
++				});
++
++			if ( this.buttonElement.is("a") ) {
++				this.buttonElement.keyup(function(event) {
++					if ( event.keyCode === $.ui.keyCode.SPACE ) {
++						// TODO pass through original event correctly (just as 2nd argument doesn't work)
++						$( this ).click();
++					}
++				});
++			}
++		}
++
++		// TODO: pull out $.Widget's handling for the disabled option into
++		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
++		// be overridden by individual plugins
++		this._setOption( "disabled", options.disabled );
++		this._resetButton();
++	},
++
++	_determineButtonType: function() {
++		var ancestor, labelSelector, checked;
++
++		if ( this.element.is("[type=checkbox]") ) {
++			this.type = "checkbox";
++		} else if ( this.element.is("[type=radio]") ) {
++			this.type = "radio";
++		} else if ( this.element.is("input") ) {
++			this.type = "input";
++		} else {
++			this.type = "button";
++		}
++
++		if ( this.type === "checkbox" || this.type === "radio" ) {
++			// we don't search against the document in case the element
++			// is disconnected from the DOM
++			ancestor = this.element.parents().last();
++			labelSelector = "label[for='" + this.element.attr("id") + "']";
++			this.buttonElement = ancestor.find( labelSelector );
++			if ( !this.buttonElement.length ) {
++				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
++				this.buttonElement = ancestor.filter( labelSelector );
++				if ( !this.buttonElement.length ) {
++					this.buttonElement = ancestor.find( labelSelector );
++				}
++			}
++			this.element.addClass( "ui-helper-hidden-accessible" );
++
++			checked = this.element.is( ":checked" );
++			if ( checked ) {
++				this.buttonElement.addClass( "ui-state-active" );
++			}
++			this.buttonElement.prop( "aria-pressed", checked );
++		} else {
++			this.buttonElement = this.element;
++		}
++	},
++
++	widget: function() {
++		return this.buttonElement;
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-helper-hidden-accessible" );
++		this.buttonElement
++			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
++			.removeAttr( "role" )
++			.removeAttr( "aria-pressed" )
++			.html( this.buttonElement.find(".ui-button-text").html() );
++
++		if ( !this.hasTitle ) {
++			this.buttonElement.removeAttr( "title" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++			} else {
++				this.element.prop( "disabled", false );
++			}
++			return;
++		}
++		this._resetButton();
++	},
++
++	refresh: function() {
++		//See #8237 & #8828
++		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
++
++		if ( isDisabled !== this.options.disabled ) {
++			this._setOption( "disabled", isDisabled );
++		}
++		if ( this.type === "radio" ) {
++			radioGroup( this.element[0] ).each(function() {
++				if ( $( this ).is( ":checked" ) ) {
++					$( this ).button( "widget" )
++						.addClass( "ui-state-active" )
++						.attr( "aria-pressed", "true" );
++				} else {
++					$( this ).button( "widget" )
++						.removeClass( "ui-state-active" )
++						.attr( "aria-pressed", "false" );
++				}
++			});
++		} else if ( this.type === "checkbox" ) {
++			if ( this.element.is( ":checked" ) ) {
++				this.buttonElement
++					.addClass( "ui-state-active" )
++					.attr( "aria-pressed", "true" );
++			} else {
++				this.buttonElement
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			}
++		}
++	},
++
++	_resetButton: function() {
++		if ( this.type === "input" ) {
++			if ( this.options.label ) {
++				this.element.val( this.options.label );
++			}
++			return;
++		}
++		var buttonElement = this.buttonElement.removeClass( typeClasses ),
++			buttonText = $( "<span></span>", this.document[0] )
++				.addClass( "ui-button-text" )
++				.html( this.options.label )
++				.appendTo( buttonElement.empty() )
++				.text(),
++			icons = this.options.icons,
++			multipleIcons = icons.primary && icons.secondary,
++			buttonClasses = [];
++
++		if ( icons.primary || icons.secondary ) {
++			if ( this.options.text ) {
++				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
++			}
++
++			if ( icons.primary ) {
++				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
++			}
++
++			if ( icons.secondary ) {
++				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
++			}
++
++			if ( !this.options.text ) {
++				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
++
++				if ( !this.hasTitle ) {
++					buttonElement.attr( "title", $.trim( buttonText ) );
++				}
++			}
++		} else {
++			buttonClasses.push( "ui-button-text-only" );
++		}
++		buttonElement.addClass( buttonClasses.join( " " ) );
++	}
++});
++
++$.widget( "ui.buttonset", {
++	version: "1.10.3",
++	options: {
++		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
++	},
++
++	_create: function() {
++		this.element.addClass( "ui-buttonset" );
++	},
++
++	_init: function() {
++		this.refresh();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "disabled" ) {
++			this.buttons.button( "option", key, value );
++		}
++
++		this._super( key, value );
++	},
++
++	refresh: function() {
++		var rtl = this.element.css( "direction" ) === "rtl";
++
++		this.buttons = this.element.find( this.options.items )
++			.filter( ":ui-button" )
++				.button( "refresh" )
++			.end()
++			.not( ":ui-button" )
++				.button()
++			.end()
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
++				.filter( ":first" )
++					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
++				.end()
++				.filter( ":last" )
++					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
++				.end()
++			.end();
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-buttonset" );
++		this.buttons
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-left ui-corner-right" )
++			.end()
++			.button( "destroy" );
++	}
++});
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.spinner.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.spinner.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.spinner.js	(revision 15487)
+@@ -0,0 +1,493 @@
++/*!
++ * jQuery UI Spinner 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/spinner/
++ *
++ * Depends:
++ *  jquery.ui.core.js
++ *  jquery.ui.widget.js
++ *  jquery.ui.button.js
++ */
++(function( $ ) {
++
++function modifier( fn ) {
++	return function() {
++		var previous = this.element.val();
++		fn.apply( this, arguments );
++		this._refresh();
++		if ( previous !== this.element.val() ) {
++			this._trigger( "change" );
++		}
++	};
++}
++
++$.widget( "ui.spinner", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	widgetEventPrefix: "spin",
++	options: {
++		culture: null,
++		icons: {
++			down: "ui-icon-triangle-1-s",
++			up: "ui-icon-triangle-1-n"
++		},
++		incremental: true,
++		max: null,
++		min: null,
++		numberFormat: null,
++		page: 10,
++		step: 1,
++
++		change: null,
++		spin: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		// handle string values that need to be parsed
++		this._setOption( "max", this.options.max );
++		this._setOption( "min", this.options.min );
++		this._setOption( "step", this.options.step );
++
++		// format the value, but don't constrain
++		this._value( this.element.val(), true );
++
++		this._draw();
++		this._on( this._events );
++		this._refresh();
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_getCreateOptions: function() {
++		var options = {},
++			element = this.element;
++
++		$.each( [ "min", "max", "step" ], function( i, option ) {
++			var value = element.attr( option );
++			if ( value !== undefined && value.length ) {
++				options[ option ] = value;
++			}
++		});
++
++		return options;
++	},
++
++	_events: {
++		keydown: function( event ) {
++			if ( this._start( event ) && this._keydown( event ) ) {
++				event.preventDefault();
++			}
++		},
++		keyup: "_stop",
++		focus: function() {
++			this.previous = this.element.val();
++		},
++		blur: function( event ) {
++			if ( this.cancelBlur ) {
++				delete this.cancelBlur;
++				return;
++			}
++
++			this._stop();
++			this._refresh();
++			if ( this.previous !== this.element.val() ) {
++				this._trigger( "change", event );
++			}
++		},
++		mousewheel: function( event, delta ) {
++			if ( !delta ) {
++				return;
++			}
++			if ( !this.spinning && !this._start( event ) ) {
++				return false;
++			}
++
++			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
++			clearTimeout( this.mousewheelTimer );
++			this.mousewheelTimer = this._delay(function() {
++				if ( this.spinning ) {
++					this._stop( event );
++				}
++			}, 100 );
++			event.preventDefault();
++		},
++		"mousedown .ui-spinner-button": function( event ) {
++			var previous;
++
++			// We never want the buttons to have focus; whenever the user is
++			// interacting with the spinner, the focus should be on the input.
++			// If the input is focused then this.previous is properly set from
++			// when the input first received focus. If the input is not focused
++			// then we need to set this.previous based on the value before spinning.
++			previous = this.element[0] === this.document[0].activeElement ?
++				this.previous : this.element.val();
++			function checkFocus() {
++				var isActive = this.element[0] === this.document[0].activeElement;
++				if ( !isActive ) {
++					this.element.focus();
++					this.previous = previous;
++					// support: IE
++					// IE sets focus asynchronously, so we need to check if focus
++					// moved off of the input because the user clicked on the button.
++					this._delay(function() {
++						this.previous = previous;
++					});
++				}
++			}
++
++			// ensure focus is on (or stays on) the text field
++			event.preventDefault();
++			checkFocus.call( this );
++
++			// support: IE
++			// IE doesn't prevent moving focus even with event.preventDefault()
++			// so we set a flag to know when we should ignore the blur event
++			// and check (again) if focus moved off of the input.
++			this.cancelBlur = true;
++			this._delay(function() {
++				delete this.cancelBlur;
++				checkFocus.call( this );
++			});
++
++			if ( this._start( event ) === false ) {
++				return;
++			}
++
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		"mouseup .ui-spinner-button": "_stop",
++		"mouseenter .ui-spinner-button": function( event ) {
++			// button will add ui-state-active if mouse was down while mouseleave and kept down
++			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
++				return;
++			}
++
++			if ( this._start( event ) === false ) {
++				return false;
++			}
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		// TODO: do we really want to consider this a stop?
++		// shouldn't we just stop the repeater and wait until mouseup before
++		// we trigger the stop event?
++		"mouseleave .ui-spinner-button": "_stop"
++	},
++
++	_draw: function() {
++		var uiSpinner = this.uiSpinner = this.element
++			.addClass( "ui-spinner-input" )
++			.attr( "autocomplete", "off" )
++			.wrap( this._uiSpinnerHtml() )
++			.parent()
++				// add buttons
++				.append( this._buttonHtml() );
++
++		this.element.attr( "role", "spinbutton" );
++
++		// button bindings
++		this.buttons = uiSpinner.find( ".ui-spinner-button" )
++			.attr( "tabIndex", -1 )
++			.button()
++			.removeClass( "ui-corner-all" );
++
++		// IE 6 doesn't understand height: 50% for the buttons
++		// unless the wrapper has an explicit height
++		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
++				uiSpinner.height() > 0 ) {
++			uiSpinner.height( uiSpinner.height() );
++		}
++
++		// disable spinner if element was already disabled
++		if ( this.options.disabled ) {
++			this.disable();
++		}
++	},
++
++	_keydown: function( event ) {
++		var options = this.options,
++			keyCode = $.ui.keyCode;
++
++		switch ( event.keyCode ) {
++		case keyCode.UP:
++			this._repeat( null, 1, event );
++			return true;
++		case keyCode.DOWN:
++			this._repeat( null, -1, event );
++			return true;
++		case keyCode.PAGE_UP:
++			this._repeat( null, options.page, event );
++			return true;
++		case keyCode.PAGE_DOWN:
++			this._repeat( null, -options.page, event );
++			return true;
++		}
++
++		return false;
++	},
++
++	_uiSpinnerHtml: function() {
++		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
++	},
++
++	_buttonHtml: function() {
++		return "" +
++			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
++				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
++			"</a>" +
++			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
++				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
++			"</a>";
++	},
++
++	_start: function( event ) {
++		if ( !this.spinning && this._trigger( "start", event ) === false ) {
++			return false;
++		}
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++		this.spinning = true;
++		return true;
++	},
++
++	_repeat: function( i, steps, event ) {
++		i = i || 500;
++
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			this._repeat( 40, steps, event );
++		}, i );
++
++		this._spin( steps * this.options.step, event );
++	},
++
++	_spin: function( step, event ) {
++		var value = this.value() || 0;
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++
++		value = this._adjustValue( value + step * this._increment( this.counter ) );
++
++		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
++			this._value( value );
++			this.counter++;
++		}
++	},
++
++	_increment: function( i ) {
++		var incremental = this.options.incremental;
++
++		if ( incremental ) {
++			return $.isFunction( incremental ) ?
++				incremental( i ) :
++				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
++		}
++
++		return 1;
++	},
++
++	_precision: function() {
++		var precision = this._precisionOf( this.options.step );
++		if ( this.options.min !== null ) {
++			precision = Math.max( precision, this._precisionOf( this.options.min ) );
++		}
++		return precision;
++	},
++
++	_precisionOf: function( num ) {
++		var str = num.toString(),
++			decimal = str.indexOf( "." );
++		return decimal === -1 ? 0 : str.length - decimal - 1;
++	},
++
++	_adjustValue: function( value ) {
++		var base, aboveMin,
++			options = this.options;
++
++		// make sure we're at a valid step
++		// - find out where we are relative to the base (min or 0)
++		base = options.min !== null ? options.min : 0;
++		aboveMin = value - base;
++		// - round to the nearest step
++		aboveMin = Math.round(aboveMin / options.step) * options.step;
++		// - rounding is based on 0, so adjust back to our base
++		value = base + aboveMin;
++
++		// fix precision from bad JS floating point math
++		value = parseFloat( value.toFixed( this._precision() ) );
++
++		// clamp the value
++		if ( options.max !== null && value > options.max) {
++			return options.max;
++		}
++		if ( options.min !== null && value < options.min ) {
++			return options.min;
++		}
++
++		return value;
++	},
++
++	_stop: function( event ) {
++		if ( !this.spinning ) {
++			return;
++		}
++
++		clearTimeout( this.timer );
++		clearTimeout( this.mousewheelTimer );
++		this.counter = 0;
++		this.spinning = false;
++		this._trigger( "stop", event );
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "culture" || key === "numberFormat" ) {
++			var prevValue = this._parse( this.element.val() );
++			this.options[ key ] = value;
++			this.element.val( this._format( prevValue ) );
++			return;
++		}
++
++		if ( key === "max" || key === "min" || key === "step" ) {
++			if ( typeof value === "string" ) {
++				value = this._parse( value );
++			}
++		}
++		if ( key === "icons" ) {
++			this.buttons.first().find( ".ui-icon" )
++				.removeClass( this.options.icons.up )
++				.addClass( value.up );
++			this.buttons.last().find( ".ui-icon" )
++				.removeClass( this.options.icons.down )
++				.addClass( value.down );
++		}
++
++		this._super( key, value );
++
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++				this.buttons.button( "disable" );
++			} else {
++				this.element.prop( "disabled", false );
++				this.buttons.button( "enable" );
++			}
++		}
++	},
++
++	_setOptions: modifier(function( options ) {
++		this._super( options );
++		this._value( this.element.val() );
++	}),
++
++	_parse: function( val ) {
++		if ( typeof val === "string" && val !== "" ) {
++			val = window.Globalize && this.options.numberFormat ?
++				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
++		}
++		return val === "" || isNaN( val ) ? null : val;
++	},
++
++	_format: function( value ) {
++		if ( value === "" ) {
++			return "";
++		}
++		return window.Globalize && this.options.numberFormat ?
++			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
++			value;
++	},
++
++	_refresh: function() {
++		this.element.attr({
++			"aria-valuemin": this.options.min,
++			"aria-valuemax": this.options.max,
++			// TODO: what should we do with values that can't be parsed?
++			"aria-valuenow": this._parse( this.element.val() )
++		});
++	},
++
++	// update the value without triggering change
++	_value: function( value, allowAny ) {
++		var parsed;
++		if ( value !== "" ) {
++			parsed = this._parse( value );
++			if ( parsed !== null ) {
++				if ( !allowAny ) {
++					parsed = this._adjustValue( parsed );
++				}
++				value = this._format( parsed );
++			}
++		}
++		this.element.val( value );
++		this._refresh();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-spinner-input" )
++			.prop( "disabled", false )
++			.removeAttr( "autocomplete" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++		this.uiSpinner.replaceWith( this.element );
++	},
++
++	stepUp: modifier(function( steps ) {
++		this._stepUp( steps );
++	}),
++	_stepUp: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * this.options.step );
++			this._stop();
++		}
++	},
++
++	stepDown: modifier(function( steps ) {
++		this._stepDown( steps );
++	}),
++	_stepDown: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * -this.options.step );
++			this._stop();
++		}
++	},
++
++	pageUp: modifier(function( pages ) {
++		this._stepUp( (pages || 1) * this.options.page );
++	}),
++
++	pageDown: modifier(function( pages ) {
++		this._stepDown( (pages || 1) * this.options.page );
++	}),
++
++	value: function( newVal ) {
++		if ( !arguments.length ) {
++			return this._parse( this.element.val() );
++		}
++		modifier( this._value ).call( this, newVal );
++	},
++
++	widget: function() {
++		return this.uiSpinner;
++	}
++});
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fold.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fold.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fold.js	(revision 15487)
+@@ -0,0 +1,76 @@
++/*!
++ * jQuery UI Effects Fold 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/fold-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.fold = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		size = o.size || 15,
++		percent = /([0-9]+)%/.exec( size ),
++		horizFirst = !!o.horizFirst,
++		widthFirst = show !== horizFirst,
++		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
++		duration = o.duration / 2,
++		wrapper, distance,
++		animation1 = {},
++		animation2 = {};
++
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	distance = widthFirst ?
++		[ wrapper.width(), wrapper.height() ] :
++		[ wrapper.height(), wrapper.width() ];
++
++	if ( percent ) {
++		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
++	}
++	if ( show ) {
++		wrapper.css( horizFirst ? {
++			height: 0,
++			width: size
++		} : {
++			height: size,
++			width: 0
++		});
++	}
++
++	// Animation
++	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
++	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
++
++	// Animate
++	wrapper
++		.animate( animation1, duration, o.easing )
++		.animate( animation2, duration, o.easing, function() {
++			if ( hide ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.resizable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.resizable.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.resizable.js	(revision 15487)
+@@ -0,0 +1,968 @@
++/*!
++ * jQuery UI Resizable 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/resizable/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++function num(v) {
++	return parseInt(v, 10) || 0;
++}
++
++function isNumber(value) {
++	return !isNaN(parseInt(value, 10));
++}
++
++$.widget("ui.resizable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "resize",
++	options: {
++		alsoResize: false,
++		animate: false,
++		animateDuration: "slow",
++		animateEasing: "swing",
++		aspectRatio: false,
++		autoHide: false,
++		containment: false,
++		ghost: false,
++		grid: false,
++		handles: "e,s,se",
++		helper: false,
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 10,
++		minWidth: 10,
++		// See #7960
++		zIndex: 90,
++
++		// callbacks
++		resize: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		var n, i, handle, axis, hname,
++			that = this,
++			o = this.options;
++		this.element.addClass("ui-resizable");
++
++		$.extend(this, {
++			_aspectRatio: !!(o.aspectRatio),
++			aspectRatio: o.aspectRatio,
++			originalElement: this.element,
++			_proportionallyResizeElements: [],
++			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
++		});
++
++		//Wrap the element if it cannot hold child nodes
++		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
++
++			//Create a wrapper element and set the wrapper to the new current internal element
++			this.element.wrap(
++				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
++					position: this.element.css("position"),
++					width: this.element.outerWidth(),
++					height: this.element.outerHeight(),
++					top: this.element.css("top"),
++					left: this.element.css("left")
++				})
++			);
++
++			//Overwrite the original this.element
++			this.element = this.element.parent().data(
++				"ui-resizable", this.element.data("ui-resizable")
++			);
++
++			this.elementIsWrapper = true;
++
++			//Move margins to the wrapper
++			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
++			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
++
++			//Prevent Safari textarea resize
++			this.originalResizeStyle = this.originalElement.css("resize");
++			this.originalElement.css("resize", "none");
++
++			//Push the actual element to our proportionallyResize internal array
++			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
++
++			// avoid IE jump (hard set the margin)
++			this.originalElement.css({ margin: this.originalElement.css("margin") });
++
++			// fix handlers offset
++			this._proportionallyResize();
++
++		}
++
++		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
++		if(this.handles.constructor === String) {
++
++			if ( this.handles === "all") {
++				this.handles = "n,e,s,w,se,sw,ne,nw";
++			}
++
++			n = this.handles.split(",");
++			this.handles = {};
++
++			for(i = 0; i < n.length; i++) {
++
++				handle = $.trim(n[i]);
++				hname = "ui-resizable-"+handle;
++				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
++
++				// Apply zIndex to all handles - see #7960
++				axis.css({ zIndex: o.zIndex });
++
++				//TODO : What's going on here?
++				if ("se" === handle) {
++					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
++				}
++
++				//Insert into internal handles object and append to element
++				this.handles[handle] = ".ui-resizable-"+handle;
++				this.element.append(axis);
++			}
++
++		}
++
++		this._renderAxis = function(target) {
++
++			var i, axis, padPos, padWrapper;
++
++			target = target || this.element;
++
++			for(i in this.handles) {
++
++				if(this.handles[i].constructor === String) {
++					this.handles[i] = $(this.handles[i], this.element).show();
++				}
++
++				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
++				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
++
++					axis = $(this.handles[i], this.element);
++
++					//Checking the correct pad and border
++					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
++
++					//The padding type i have to apply...
++					padPos = [ "padding",
++						/ne|nw|n/.test(i) ? "Top" :
++						/se|sw|s/.test(i) ? "Bottom" :
++						/^e$/.test(i) ? "Right" : "Left" ].join("");
++
++					target.css(padPos, padWrapper);
++
++					this._proportionallyResize();
++
++				}
++
++				//TODO: What's that good for? There's not anything to be executed left
++				if(!$(this.handles[i]).length) {
++					continue;
++				}
++			}
++		};
++
++		//TODO: make renderAxis a prototype function
++		this._renderAxis(this.element);
++
++		this._handles = $(".ui-resizable-handle", this.element)
++			.disableSelection();
++
++		//Matching axis name
++		this._handles.mouseover(function() {
++			if (!that.resizing) {
++				if (this.className) {
++					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
++				}
++				//Axis, default = se
++				that.axis = axis && axis[1] ? axis[1] : "se";
++			}
++		});
++
++		//If we want to auto hide the elements
++		if (o.autoHide) {
++			this._handles.hide();
++			$(this.element)
++				.addClass("ui-resizable-autohide")
++				.mouseenter(function() {
++					if (o.disabled) {
++						return;
++					}
++					$(this).removeClass("ui-resizable-autohide");
++					that._handles.show();
++				})
++				.mouseleave(function(){
++					if (o.disabled) {
++						return;
++					}
++					if (!that.resizing) {
++						$(this).addClass("ui-resizable-autohide");
++						that._handles.hide();
++					}
++				});
++		}
++
++		//Initialize the mouse interaction
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++
++		this._mouseDestroy();
++
++		var wrapper,
++			_destroy = function(exp) {
++				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
++					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
++			};
++
++		//TODO: Unwrap at same DOM position
++		if (this.elementIsWrapper) {
++			_destroy(this.element);
++			wrapper = this.element;
++			this.originalElement.css({
++				position: wrapper.css("position"),
++				width: wrapper.outerWidth(),
++				height: wrapper.outerHeight(),
++				top: wrapper.css("top"),
++				left: wrapper.css("left")
++			}).insertAfter( wrapper );
++			wrapper.remove();
++		}
++
++		this.originalElement.css("resize", this.originalResizeStyle);
++		_destroy(this.originalElement);
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++		var i, handle,
++			capture = false;
++
++		for (i in this.handles) {
++			handle = $(this.handles[i])[0];
++			if (handle === event.target || $.contains(handle, event.target)) {
++				capture = true;
++			}
++		}
++
++		return !this.options.disabled && capture;
++	},
++
++	_mouseStart: function(event) {
++
++		var curleft, curtop, cursor,
++			o = this.options,
++			iniPos = this.element.position(),
++			el = this.element;
++
++		this.resizing = true;
++
++		// bugfix for http://dev.jquery.com/ticket/1749
++		if ( (/absolute/).test( el.css("position") ) ) {
++			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
++		} else if (el.is(".ui-draggable")) {
++			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
++		}
++
++		this._renderProxy();
++
++		curleft = num(this.helper.css("left"));
++		curtop = num(this.helper.css("top"));
++
++		if (o.containment) {
++			curleft += $(o.containment).scrollLeft() || 0;
++			curtop += $(o.containment).scrollTop() || 0;
++		}
++
++		//Store needed variables
++		this.offset = this.helper.offset();
++		this.position = { left: curleft, top: curtop };
++		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalPosition = { left: curleft, top: curtop };
++		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
++		this.originalMousePosition = { left: event.pageX, top: event.pageY };
++
++		//Aspect Ratio
++		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
++
++		cursor = $(".ui-resizable-" + this.axis).css("cursor");
++		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
++
++		el.addClass("ui-resizable-resizing");
++		this._propagate("start", event);
++		return true;
++	},
++
++	_mouseDrag: function(event) {
++
++		//Increase performance, avoid regex
++		var data,
++			el = this.helper, props = {},
++			smp = this.originalMousePosition,
++			a = this.axis,
++			prevTop = this.position.top,
++			prevLeft = this.position.left,
++			prevWidth = this.size.width,
++			prevHeight = this.size.height,
++			dx = (event.pageX-smp.left)||0,
++			dy = (event.pageY-smp.top)||0,
++			trigger = this._change[a];
++
++		if (!trigger) {
++			return false;
++		}
++
++		// Calculate the attrs that will be change
++		data = trigger.apply(this, [event, dx, dy]);
++
++		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
++		this._updateVirtualBoundaries(event.shiftKey);
++		if (this._aspectRatio || event.shiftKey) {
++			data = this._updateRatio(data, event);
++		}
++
++		data = this._respectSize(data, event);
++
++		this._updateCache(data);
++
++		// plugins callbacks need to be called first
++		this._propagate("resize", event);
++
++		if (this.position.top !== prevTop) {
++			props.top = this.position.top + "px";
++		}
++		if (this.position.left !== prevLeft) {
++			props.left = this.position.left + "px";
++		}
++		if (this.size.width !== prevWidth) {
++			props.width = this.size.width + "px";
++		}
++		if (this.size.height !== prevHeight) {
++			props.height = this.size.height + "px";
++		}
++		el.css(props);
++
++		if (!this._helper && this._proportionallyResizeElements.length) {
++			this._proportionallyResize();
++		}
++
++		// Call the user callback if the element was resized
++		if ( ! $.isEmptyObject(props) ) {
++			this._trigger("resize", event, this.ui());
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		this.resizing = false;
++		var pr, ista, soffseth, soffsetw, s, left, top,
++			o = this.options, that = this;
++
++		if(this._helper) {
++
++			pr = this._proportionallyResizeElements;
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
++			soffsetw = ista ? 0 : that.sizeDiff.width;
++
++			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++			if (!o.animate) {
++				this.element.css($.extend(s, { top: top, left: left }));
++			}
++
++			that.helper.height(that.size.height);
++			that.helper.width(that.size.width);
++
++			if (this._helper && !o.animate) {
++				this._proportionallyResize();
++			}
++		}
++
++		$("body").css("cursor", "auto");
++
++		this.element.removeClass("ui-resizable-resizing");
++
++		this._propagate("stop", event);
++
++		if (this._helper) {
++			this.helper.remove();
++		}
++
++		return false;
++
++	},
++
++	_updateVirtualBoundaries: function(forceAspectRatio) {
++		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
++			o = this.options;
++
++		b = {
++			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
++			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
++			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
++			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
++		};
++
++		if(this._aspectRatio || forceAspectRatio) {
++			// We want to create an enclosing box whose aspect ration is the requested one
++			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
++			pMinWidth = b.minHeight * this.aspectRatio;
++			pMinHeight = b.minWidth / this.aspectRatio;
++			pMaxWidth = b.maxHeight * this.aspectRatio;
++			pMaxHeight = b.maxWidth / this.aspectRatio;
++
++			if(pMinWidth > b.minWidth) {
++				b.minWidth = pMinWidth;
++			}
++			if(pMinHeight > b.minHeight) {
++				b.minHeight = pMinHeight;
++			}
++			if(pMaxWidth < b.maxWidth) {
++				b.maxWidth = pMaxWidth;
++			}
++			if(pMaxHeight < b.maxHeight) {
++				b.maxHeight = pMaxHeight;
++			}
++		}
++		this._vBoundaries = b;
++	},
++
++	_updateCache: function(data) {
++		this.offset = this.helper.offset();
++		if (isNumber(data.left)) {
++			this.position.left = data.left;
++		}
++		if (isNumber(data.top)) {
++			this.position.top = data.top;
++		}
++		if (isNumber(data.height)) {
++			this.size.height = data.height;
++		}
++		if (isNumber(data.width)) {
++			this.size.width = data.width;
++		}
++	},
++
++	_updateRatio: function( data ) {
++
++		var cpos = this.position,
++			csize = this.size,
++			a = this.axis;
++
++		if (isNumber(data.height)) {
++			data.width = (data.height * this.aspectRatio);
++		} else if (isNumber(data.width)) {
++			data.height = (data.width / this.aspectRatio);
++		}
++
++		if (a === "sw") {
++			data.left = cpos.left + (csize.width - data.width);
++			data.top = null;
++		}
++		if (a === "nw") {
++			data.top = cpos.top + (csize.height - data.height);
++			data.left = cpos.left + (csize.width - data.width);
++		}
++
++		return data;
++	},
++
++	_respectSize: function( data ) {
++
++		var o = this._vBoundaries,
++			a = this.axis,
++			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
++			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
++			dw = this.originalPosition.left + this.originalSize.width,
++			dh = this.position.top + this.size.height,
++			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
++		if (isminw) {
++			data.width = o.minWidth;
++		}
++		if (isminh) {
++			data.height = o.minHeight;
++		}
++		if (ismaxw) {
++			data.width = o.maxWidth;
++		}
++		if (ismaxh) {
++			data.height = o.maxHeight;
++		}
++
++		if (isminw && cw) {
++			data.left = dw - o.minWidth;
++		}
++		if (ismaxw && cw) {
++			data.left = dw - o.maxWidth;
++		}
++		if (isminh && ch) {
++			data.top = dh - o.minHeight;
++		}
++		if (ismaxh && ch) {
++			data.top = dh - o.maxHeight;
++		}
++
++		// fixing jump error on top/left - bug #2330
++		if (!data.width && !data.height && !data.left && data.top) {
++			data.top = null;
++		} else if (!data.width && !data.height && !data.top && data.left) {
++			data.left = null;
++		}
++
++		return data;
++	},
++
++	_proportionallyResize: function() {
++
++		if (!this._proportionallyResizeElements.length) {
++			return;
++		}
++
++		var i, j, borders, paddings, prel,
++			element = this.helper || this.element;
++
++		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
++
++			prel = this._proportionallyResizeElements[i];
++
++			if (!this.borderDif) {
++				this.borderDif = [];
++				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
++				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
++
++				for ( j = 0; j < borders.length; j++ ) {
++					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
++				}
++			}
++
++			prel.css({
++				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
++				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
++			});
++
++		}
++
++	},
++
++	_renderProxy: function() {
++
++		var el = this.element, o = this.options;
++		this.elementOffset = el.offset();
++
++		if(this._helper) {
++
++			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
++
++			this.helper.addClass(this._helper).css({
++				width: this.element.outerWidth() - 1,
++				height: this.element.outerHeight() - 1,
++				position: "absolute",
++				left: this.elementOffset.left +"px",
++				top: this.elementOffset.top +"px",
++				zIndex: ++o.zIndex //TODO: Don't modify option
++			});
++
++			this.helper
++				.appendTo("body")
++				.disableSelection();
++
++		} else {
++			this.helper = this.element;
++		}
++
++	},
++
++	_change: {
++		e: function(event, dx) {
++			return { width: this.originalSize.width + dx };
++		},
++		w: function(event, dx) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { left: sp.left + dx, width: cs.width - dx };
++		},
++		n: function(event, dx, dy) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { top: sp.top + dy, height: cs.height - dy };
++		},
++		s: function(event, dx, dy) {
++			return { height: this.originalSize.height + dy };
++		},
++		se: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		sw: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		},
++		ne: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		nw: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		}
++	},
++
++	_propagate: function(n, event) {
++		$.ui.plugin.call(this, n, [event, this.ui()]);
++		(n !== "resize" && this._trigger(n, event, this.ui()));
++	},
++
++	plugins: {},
++
++	ui: function() {
++		return {
++			originalElement: this.originalElement,
++			element: this.element,
++			helper: this.helper,
++			position: this.position,
++			size: this.size,
++			originalSize: this.originalSize,
++			originalPosition: this.originalPosition
++		};
++	}
++
++});
++
++/*
++ * Resizable Extensions
++ */
++
++$.ui.plugin.add("resizable", "animate", {
++
++	stop: function( event ) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			pr = that._proportionallyResizeElements,
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
++			soffsetw = ista ? 0 : that.sizeDiff.width,
++			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++		that.element.animate(
++			$.extend(style, top && left ? { top: top, left: left } : {}), {
++				duration: o.animateDuration,
++				easing: o.animateEasing,
++				step: function() {
++
++					var data = {
++						width: parseInt(that.element.css("width"), 10),
++						height: parseInt(that.element.css("height"), 10),
++						top: parseInt(that.element.css("top"), 10),
++						left: parseInt(that.element.css("left"), 10)
++					};
++
++					if (pr && pr.length) {
++						$(pr[0]).css({ width: data.width, height: data.height });
++					}
++
++					// propagating resize, and updating values for each animation step
++					that._updateCache(data);
++					that._propagate("resize", event);
++
++				}
++			}
++		);
++	}
++
++});
++
++$.ui.plugin.add("resizable", "containment", {
++
++	start: function() {
++		var element, p, co, ch, cw, width, height,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			el = that.element,
++			oc = o.containment,
++			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
++
++		if (!ce) {
++			return;
++		}
++
++		that.containerElement = $(ce);
++
++		if (/document/.test(oc) || oc === document) {
++			that.containerOffset = { left: 0, top: 0 };
++			that.containerPosition = { left: 0, top: 0 };
++
++			that.parentData = {
++				element: $(document), left: 0, top: 0,
++				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
++			};
++		}
++
++		// i'm a node, so compute top, left, right, bottom
++		else {
++			element = $(ce);
++			p = [];
++			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
++
++			that.containerOffset = element.offset();
++			that.containerPosition = element.position();
++			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
++
++			co = that.containerOffset;
++			ch = that.containerSize.height;
++			cw = that.containerSize.width;
++			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
++			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
++
++			that.parentData = {
++				element: ce, left: co.left, top: co.top, width: width, height: height
++			};
++		}
++	},
++
++	resize: function( event ) {
++		var woset, hoset, isParent, isOffsetRelative,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset, cp = that.position,
++			pRatio = that._aspectRatio || event.shiftKey,
++			cop = { top:0, left:0 }, ce = that.containerElement;
++
++		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
++			cop = co;
++		}
++
++		if (cp.left < (that._helper ? co.left : 0)) {
++			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++			that.position.left = o.helper ? co.left : 0;
++		}
++
++		if (cp.top < (that._helper ? co.top : 0)) {
++			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++			that.position.top = that._helper ? co.top : 0;
++		}
++
++		that.offset.left = that.parentData.left+that.position.left;
++		that.offset.top = that.parentData.top+that.position.top;
++
++		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
++		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
++
++		isParent = that.containerElement.get(0) === that.element.parent().get(0);
++		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
++
++		if(isParent && isOffsetRelative) {
++			woset -= that.parentData.left;
++		}
++
++		if (woset + that.size.width >= that.parentData.width) {
++			that.size.width = that.parentData.width - woset;
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++		}
++
++		if (hoset + that.size.height >= that.parentData.height) {
++			that.size.height = that.parentData.height - hoset;
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++		}
++	},
++
++	stop: function(){
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset,
++			cop = that.containerPosition,
++			ce = that.containerElement,
++			helper = $(that.helper),
++			ho = helper.offset(),
++			w = helper.outerWidth() - that.sizeDiff.width,
++			h = helper.outerHeight() - that.sizeDiff.height;
++
++		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++	}
++});
++
++$.ui.plugin.add("resizable", "alsoResize", {
++
++	start: function () {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			_store = function (exp) {
++				$(exp).each(function() {
++					var el = $(this);
++					el.data("ui-resizable-alsoresize", {
++						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
++						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
++					});
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
++			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
++			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
++		}else{
++			_store(o.alsoResize);
++		}
++	},
++
++	resize: function (event, ui) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			os = that.originalSize,
++			op = that.originalPosition,
++			delta = {
++				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
++				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
++			},
++
++			_alsoResize = function (exp, c) {
++				$(exp).each(function() {
++					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
++						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
++
++					$.each(css, function (i, prop) {
++						var sum = (start[prop]||0) + (delta[prop]||0);
++						if (sum && sum >= 0) {
++							style[prop] = sum || null;
++						}
++					});
++
++					el.css(style);
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
++			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
++		}else{
++			_alsoResize(o.alsoResize);
++		}
++	},
++
++	stop: function () {
++		$(this).removeData("resizable-alsoresize");
++	}
++});
++
++$.ui.plugin.add("resizable", "ghost", {
++
++	start: function() {
++
++		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
++
++		that.ghost = that.originalElement.clone();
++		that.ghost
++			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
++			.addClass("ui-resizable-ghost")
++			.addClass(typeof o.ghost === "string" ? o.ghost : "");
++
++		that.ghost.appendTo(that.helper);
++
++	},
++
++	resize: function(){
++		var that = $(this).data("ui-resizable");
++		if (that.ghost) {
++			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
++		}
++	},
++
++	stop: function() {
++		var that = $(this).data("ui-resizable");
++		if (that.ghost && that.helper) {
++			that.helper.get(0).removeChild(that.ghost.get(0));
++		}
++	}
++
++});
++
++$.ui.plugin.add("resizable", "grid", {
++
++	resize: function() {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			cs = that.size,
++			os = that.originalSize,
++			op = that.originalPosition,
++			a = that.axis,
++			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
++			gridX = (grid[0]||1),
++			gridY = (grid[1]||1),
++			ox = Math.round((cs.width - os.width) / gridX) * gridX,
++			oy = Math.round((cs.height - os.height) / gridY) * gridY,
++			newWidth = os.width + ox,
++			newHeight = os.height + oy,
++			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
++			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
++			isMinWidth = o.minWidth && (o.minWidth > newWidth),
++			isMinHeight = o.minHeight && (o.minHeight > newHeight);
++
++		o.grid = grid;
++
++		if (isMinWidth) {
++			newWidth = newWidth + gridX;
++		}
++		if (isMinHeight) {
++			newHeight = newHeight + gridY;
++		}
++		if (isMaxWidth) {
++			newWidth = newWidth - gridX;
++		}
++		if (isMaxHeight) {
++			newHeight = newHeight - gridY;
++		}
++
++		if (/^(se|s|e)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++		} else if (/^(ne)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++		} else if (/^(sw)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.left = op.left - ox;
++		} else {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++			that.position.left = op.left - ox;
++		}
++	}
++
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/license.txt
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/license.txt	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/license.txt	(revision 15487)
+@@ -0,0 +1,22 @@
++ Copyright (c) 2010-2012 Dev7studios
++
++ Permission is hereby granted, free of charge, to any person
++ obtaining a copy of this software and associated documentation
++ files (the "Software"), to deal in the Software without
++ restriction, including without limitation the rights to use,
++ copy, modify, merge, publish, distribute, sublicense, and/or sell
++ copies of the Software, and to permit persons to whom the
++ Software is furnished to do so, subject to the following
++ conditions:
++
++ The above copyright notice and this permission notice shall be
++ included in all copies or substantial portions of the Software.
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
++ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ OTHER DEALINGS IN THE SOFTWARE.
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.pack.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.pack.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.pack.js	(revision 15487)
+@@ -0,0 +1,10 @@
++/*
++ * jQuery Nivo Slider v3.2
++ * http://nivo.dev7studios.com
++ *
++ * Copyright 2012, Dev7studios
++ * Free to use and abuse under the MIT license.
++ * http://www.opensource.org/licenses/mit-license.php
++ */
++
++(function(e){var t=function(t,n){var r=e.extend({},e.fn.nivoSlider.defaults,n);var i={currentSlide:0,currentImage:"",totalSlides:0,running:false,paused:false,stop:false,controlNavEl:false};var s=e(t);s.data("nivo:vars",i).addClass("nivoSlider");var o=s.children();o.each(function(){var t=e(this);var n="";if(!t.is("img")){if(t.is("a")){t.addClass("nivo-imageLink");n=t}t=t.find("img:first")}var r=r===0?t.attr("width"):t.width(),s=s===0?t.attr("height"):t.height();if(n!==""){n.css("display","none")}t.css("display","none");i.totalSlides++});if(r.randomStart){r.startSlide=Math.floor(Math.random()*i.totalSlides)}if(r.startSlide>0){if(r.startSlide>=i.totalSlides){r.startSlide=i.totalSlides-1}i.currentSlide=r.startSlide}if(e(o[i.currentSlide]).is("img")){i.currentImage=e(o[i.currentSlide])}else{i.currentImage=e(o[i.currentSlide]).find("img:first")}if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}var u=e("<img/>").addClass("nivo-main-image");u.attr("src",i.currentImage.attr("src")).show();s.append(u);e(window).resize(function(){s.children("img").width(s.width());u.attr("src",i.currentImage.attr("src"));u.stop().height("auto");e(".nivo-slice").remove();e(".nivo-box").remove()});s.append(e('<div class="nivo-caption"></div>'));var a=function(t){var n=e(".nivo-caption",s);if(i.currentImage.attr("title")!=""&&i.currentImage.attr("title")!=undefined){var r=i.currentImage.attr("title");if(r.substr(0,1)=="#")r=e(r).html();if(n.css("display")=="block"){setTimeout(function(){n.html(r)},t.animSpeed)}else{n.html(r);n.stop().fadeIn(t.animSpeed)}}else{n.stop().fadeOut(t.animSpeed)}};a(r);var f=0;if(!r.manualAdvance&&o.length>1){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}if(r.directionNav){s.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+r.prevText+'</a><a class="nivo-nextNav">'+r.nextText+"</a></div>");e(s).on("click","a.nivo-prevNav",function(){if(i.running){return false}clearInterval(f);f="";i.currentSlide-=2;d(s,o,r,"prev")});e(s).on("click","a.nivo-nextNav",function(){if(i.running){return false}clearInterval(f);f="";d(s,o,r,"next")})}if(r.controlNav){i.controlNavEl=e('<div class="nivo-controlNav"></div>');s.after(i.controlNavEl);for(var l=0;l<o.length;l++){if(r.controlNavThumbs){i.controlNavEl.addClass("nivo-thumbs-enabled");var c=o.eq(l);if(!c.is("img")){c=c.find("img:first")}if(c.attr("data-thumb"))i.controlNavEl.append('<a class="nivo-control" rel="'+l+'"><img src="'+c.attr("data-thumb")+'" alt="" /></a>')}else{i.controlNavEl.append('<a class="nivo-control" rel="'+l+'">'+(l+1)+"</a>")}}e("a:eq("+i.currentSlide+")",i.controlNavEl).addClass("active");e("a",i.controlNavEl).bind("click",function(){if(i.running)return false;if(e(this).hasClass("active"))return false;clearInterval(f);f="";u.attr("src",i.currentImage.attr("src"));i.currentSlide=e(this).attr("rel")-1;d(s,o,r,"control")})}if(r.pauseOnHover){s.hover(function(){i.paused=true;clearInterval(f);f=""},function(){i.paused=false;if(f===""&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}})}s.bind("nivo:animFinished",function(){u.attr("src",i.currentImage.attr("src"));i.running=false;e(o).each(function(){if(e(this).is("a")){e(this).css("display","none")}});if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}if(f===""&&!i.paused&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}r.afterChange.call(this)});var h=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().is("a")?e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().height():e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height();for(var s=0;s<n.slices;s++){var o=Math.round(t.width()/n.slices);if(s===n.slices-1){t.append(e('<div class="nivo-slice" name="'+s+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block !important; top:0; left:-"+(o+s*o-o)+'px;" /></div>').css({left:o*s+"px",width:t.width()-o*s+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}else{t.append(e('<div class="nivo-slice" name="'+s+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block !important; top:0; left:-"+(o+s*o-o)+'px;" /></div>').css({left:o*s+"px",width:o+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}}e(".nivo-slice",t).height(i);u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var p=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=Math.round(t.width()/n.boxCols),s=Math.round(e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height()/n.boxRows);for(var o=0;o<n.boxRows;o++){for(var a=0;a<n.boxCols;a++){if(a===n.boxCols-1){t.append(e('<div class="nivo-box" name="'+a+'" rel="'+o+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block; top:-"+s*o+"px; left:-"+i*a+'px;" /></div>').css({opacity:0,left:i*a+"px",top:s*o+"px",width:t.width()-i*a+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}else{t.append(e('<div class="nivo-box" name="'+a+'" rel="'+o+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block; top:-"+s*o+"px; left:-"+i*a+'px;" /></div>').css({opacity:0,left:i*a+"px",top:s*o+"px",width:i+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}}}u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var d=function(t,n,r,i){var s=t.data("nivo:vars");if(s&&s.currentSlide===s.totalSlides-1){r.lastSlide.call(this)}if((!s||s.stop)&&!i){return false}r.beforeChange.call(this);if(!i){u.attr("src",s.currentImage.attr("src"))}else{if(i==="prev"){u.attr("src",s.currentImage.attr("src"))}if(i==="next"){u.attr("src",s.currentImage.attr("src"))}}s.currentSlide++;if(s.currentSlide===s.totalSlides){s.currentSlide=0;r.slideshowEnd.call(this)}if(s.currentSlide<0){s.currentSlide=s.totalSlides-1}if(e(n[s.currentSlide]).is("img")){s.currentImage=e(n[s.currentSlide])}else{s.currentImage=e(n[s.currentSlide]).find("img:first")}if(r.controlNav){e("a",s.controlNavEl).removeClass("active");e("a:eq("+s.currentSlide+")",s.controlNavEl).addClass("active")}a(r);e(".nivo-slice",t).remove();e(".nivo-box",t).remove();var o=r.effect,f="";if(r.effect==="random"){f=new Array("sliceDownRight","sliceDownLeft","sliceUpRight","sliceUpLeft","sliceUpDown","sliceUpDownLeft","fold","fade","boxRandom","boxRain","boxRainReverse","boxRainGrow","boxRainGrowReverse");o=f[Math.floor(Math.random()*(f.length+1))];if(o===undefined){o="fade"}}if(r.effect.indexOf(",")!==-1){f=r.effect.split(",");o=f[Math.floor(Math.random()*f.length)];if(o===undefined){o="fade"}}if(s.currentImage.attr("data-transition")){o=s.currentImage.attr("data-transition")}s.running=true;var l=0,c=0,d="",m="",g="",y="";if(o==="sliceDown"||o==="sliceDownRight"||o==="sliceDownLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({top:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUp"||o==="sliceUpRight"||o==="sliceUpLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceUpLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({bottom:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUpDown"||o==="sliceUpDownRight"||o==="sliceUpDownLeft"){h(t,r,s);l=0;c=0;var b=0;d=e(".nivo-slice",t);if(o==="sliceUpDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);if(c===0){n.css("top","0px");c++}else{n.css("bottom","0px");c=0}if(b===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;b++})}else if(o==="fold"){h(t,r,s);l=0;c=0;e(".nivo-slice",t).each(function(){var n=e(this);var i=n.width();n.css({top:"0px",width:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="fade"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:t.width()+"px"});m.animate({opacity:"1.0"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInRight"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInLeft"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1",left:"",right:"0px"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){m.css({left:"0px",right:""});t.trigger("nivo:animFinished")})}else if(o==="boxRandom"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;y=v(e(".nivo-box",t));y.each(function(){var n=e(this);if(c===g-1){setTimeout(function(){n.animate({opacity:"1"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1"},r.animSpeed)},100+l)}l+=20;c++})}else if(o==="boxRain"||o==="boxRainReverse"||o==="boxRainGrow"||o==="boxRainGrowReverse"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;var w=0;var E=0;var S=[];S[w]=[];y=e(".nivo-box",t);if(o==="boxRainReverse"||o==="boxRainGrowReverse"){y=e(".nivo-box",t)._reverse()}y.each(function(){S[w][E]=e(this);E++;if(E===r.boxCols){w++;E=0;S[w]=[]}});for(var x=0;x<r.boxCols*2;x++){var T=x;for(var N=0;N<r.boxRows;N++){if(T>=0&&T<r.boxCols){(function(n,i,s,u,a){var f=e(S[n][i]);var l=f.width();var c=f.height();if(o==="boxRainGrow"||o==="boxRainGrowReverse"){f.width(0).height(0)}if(u===a-1){setTimeout(function(){f.animate({opacity:"1",width:l,height:c},r.animSpeed/1.3,"",function(){t.trigger("nivo:animFinished")})},100+s)}else{setTimeout(function(){f.animate({opacity:"1",width:l,height:c},r.animSpeed/1.3)},100+s)}})(N,T,l,c,g);c++}T--}l+=100}}};var v=function(e){for(var t,n,r=e.length;r;t=parseInt(Math.random()*r,10),n=e[--r],e[r]=e[t],e[t]=n);return e};var m=function(e){if(this.console&&typeof console.log!=="undefined"){console.log(e)}};this.stop=function(){if(!e(t).data("nivo:vars").stop){e(t).data("nivo:vars").stop=true;m("Stop Slider")}};this.start=function(){if(e(t).data("nivo:vars").stop){e(t).data("nivo:vars").stop=false;m("Start Slider")}};r.afterLoad.call(this);return this};e.fn.nivoSlider=function(n){return this.each(function(r,i){var s=e(this);if(s.data("nivoslider")){return s.data("nivoslider")}var o=new t(this,n);s.data("nivoslider",o)})};e.fn.nivoSlider.defaults={effect:"random",slices:15,boxCols:8,boxRows:4,animSpeed:500,pauseTime:3e3,startSlide:0,directionNav:true,controlNav:true,controlNavThumbs:false,pauseOnHover:true,manualAdvance:false,prevText:"Prev",nextText:"Next",randomStart:false,beforeChange:function(){},afterChange:function(){},slideshowEnd:function(){},lastSlide:function(){},afterLoad:function(){}};e.fn._reverse=[].reverse})(jQuery)
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/nivo-slider.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/nivo-slider.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/nivo-slider.css	(revision 15487)
+@@ -0,0 +1,113 @@
++/*
++ * jQuery Nivo Slider v3.2
++ * http://nivo.dev7studios.com
++ *
++ * Copyright 2012, Dev7studios
++ * Free to use and abuse under the MIT license.
++ * http://www.opensource.org/licenses/mit-license.php
++ */
++ 
++/* The Nivo Slider styles */
++.nivoSlider {
++	position:relative;
++	width:100%;
++	height:auto;
++	overflow: hidden;
++}
++.nivoSlider img {
++	position:absolute;
++	top:0px;
++	left:0px;
++	max-width: none;
++}
++.nivo-main-image {
++	display: block !important;
++	position: relative !important; 
++	width: 100% !important;
++}
++
++/* If an image is wrapped in a link */
++.nivoSlider a.nivo-imageLink {
++	position:absolute;
++	top:0px;
++	left:0px;
++	width:100%;
++	height:100%;
++	border:0;
++	padding:0;
++	margin:0;
++	z-index:6;
++	display:none;
++	background:white; 
++	filter:alpha(opacity=0); 
++	opacity:0;
++}
++/* The slices and boxes in the Slider */
++.nivo-slice {
++	display:block;
++	position:absolute;
++	z-index:5;
++	height:100%;
++	top:0;
++}
++.nivo-box {
++	display:block;
++	position:absolute;
++	z-index:5;
++	overflow:hidden;
++}
++.nivo-box img { display:block; }
++
++/* Caption styles */
++.nivo-caption {
++	position:absolute;
++	left:0px;
++	bottom:0px;
++	background:#000;
++	color:#fff;
++	width:100%;
++	z-index:8;
++	padding: 5px 10px;
++	opacity: 0.8;
++	overflow: hidden;
++	display: none;
++	-moz-opacity: 0.8;
++	filter:alpha(opacity=8);
++	-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
++	-moz-box-sizing: border-box;    /* Firefox, other Gecko */
++	box-sizing: border-box;         /* Opera/IE 8+ */
++}
++.nivo-caption p {
++	padding:5px;
++	margin:0;
++}
++.nivo-caption a {
++	display:inline !important;
++}
++.nivo-html-caption {
++    display:none;
++}
++/* Direction nav styles (e.g. Next & Prev) */
++.nivo-directionNav a {
++	position:absolute;
++	top:45%;
++	z-index:9;
++	cursor:pointer;
++}
++.nivo-prevNav {
++	left:0px;
++}
++.nivo-nextNav {
++	right:0px;
++}
++/* Control nav styles (e.g. 1,2,3...) */
++.nivo-controlNav {
++	text-align:center;
++	padding: 15px 0;
++}
++.nivo-controlNav a {
++	cursor:pointer;
++}
++.nivo-controlNav a.active {
++	font-weight:bold;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/up.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/up.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/up.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/up.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/up.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/walle.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/walle.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/walle.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/walle.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/walle.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/dev7logo.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/dev7logo.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/dev7logo.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/dev7logo.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/dev7logo.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/toystory.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/toystory.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/toystory.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/toystory.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/toystory.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/nemo.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/nemo.jpg
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/nemo.jpg	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/nemo.jpg	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/nemo.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/demo.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/demo.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/demo.html	(revision 15487)
+@@ -0,0 +1,38 @@
++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
++<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
++<html lang="en">
++<head>
++    <title>Nivo Slider Demo</title>
++    <link rel="stylesheet" href="../themes/default/default.css" type="text/css" media="screen" />
++    <link rel="stylesheet" href="../themes/light/light.css" type="text/css" media="screen" />
++    <link rel="stylesheet" href="../themes/dark/dark.css" type="text/css" media="screen" />
++    <link rel="stylesheet" href="../themes/bar/bar.css" type="text/css" media="screen" />
++    <link rel="stylesheet" href="../nivo-slider.css" type="text/css" media="screen" />
++    <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
++</head>
++<body>
++    <div id="wrapper">
++        <a href="http://dev7studios.com" id="dev7link" title="Go to dev7studios">dev7studios</a>
++
++        <div class="slider-wrapper theme-default">
++            <div id="slider" class="nivoSlider">
++                <img src="images/toystory.jpg" data-thumb="images/toystory.jpg" alt="" />
++                <a href="http://dev7studios.com"><img src="images/up.jpg" data-thumb="images/up.jpg" alt="" title="This is an example of a caption" /></a>
++                <img src="images/walle.jpg" data-thumb="images/walle.jpg" alt="" data-transition="slideInLeft" />
++                <img src="images/nemo.jpg" data-thumb="images/nemo.jpg" alt="" title="#htmlcaption" />
++            </div>
++            <div id="htmlcaption" class="nivo-html-caption">
++                <strong>This</strong> is an example of a <em>HTML</em> caption with <a href="#">a link</a>. 
++            </div>
++        </div>
++
++    </div>
++    <script type="text/javascript" src="scripts/jquery-1.9.0.min.js"></script>
++    <script type="text/javascript" src="../jquery.nivo.slider.js"></script>
++    <script type="text/javascript">
++    $(window).load(function() {
++        $('#slider').nivoSlider();
++    });
++    </script>
++</body>
++</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/scripts/jquery-1.9.0.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/scripts/jquery-1.9.0.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/scripts/jquery-1.9.0.min.js	(revision 15487)
+@@ -0,0 +1,4 @@
++/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(cn[0].contentWindow||cn[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=A(e,t),cn.detach()),bn[e]=n),n}function A(e,t){var n=st(t.createElement(e)).appendTo(t.body),r=st.css(n[0],"display");return n.remove(),r}function j(e,t,n,r){var i;if(st.isArray(t))st.each(t,function(t,i){n||kn.test(e)?r(e,i):j(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==st.type(t))r(e,t);else for(i in t)j(e+"["+i+"]",t[i],n,r)}function D(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(lt)||[];if(st.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function L(e,n,r,i){function o(u){var l;return a[u]=!0,st.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||s||a[c]?s?!(l=c):t:(n.dataTypes.unshift(c),o(c),!1)}),l}var a={},s=e===$n;return o(n.dataTypes[0])||!a["*"]&&o("*")}function H(e,n){var r,i,o=st.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((o[r]?e:i||(i={}))[r]=n[r]);return i&&st.extend(!0,e,i),e}function M(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(o in c)o in r&&(n[c[o]]=r[o]);for(;"*"===l[0];)l.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("Content-Type"));if(i)for(o in u)if(u[o]&&u[o].test(i)){l.unshift(o);break}if(l[0]in r)a=l[0];else{for(o in r){if(!l[0]||e.converters[o+" "+l[0]]){a=o;break}s||(s=o)}a=a||s}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function q(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=u[++s];)if("*"!==i){if("*"!==l&&l!==i){if(n=a[l+" "+i]||a["* "+i],!n)for(r in a)if(o=r.split(" "),o[1]===i&&(n=a[l+" "+o[0]]||a["* "+o[0]])){n===!0?n=a[r]:a[r]!==!0&&(i=o[0],u.splice(s--,0,i));break}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(c){return{state:"parsererror",error:n?c:"No conversion from "+l+" to "+i}}}l=i}return{state:"success",data:t}}function _(){try{return new e.XMLHttpRequest}catch(t){}}function F(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function O(){return setTimeout(function(){Qn=t}),Qn=st.now()}function B(e,t){st.each(t,function(t,n){for(var r=(rr[t]||[]).concat(rr["*"]),i=0,o=r.length;o>i;i++)if(r[i].call(e,t,n))return})}function P(e,t,n){var r,i,o=0,a=nr.length,s=st.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=Qn||O(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:st.extend({},t),opts:st.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Qn||O(),duration:n.duration,tweens:[],createTween:function(t,n){var r=st.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(R(c,l.opts.specialEasing);a>o;o++)if(r=nr[o].call(l,e,c,l.opts))return r;return B(l,c),st.isFunction(l.opts.start)&&l.opts.start.call(e,l),st.fx.timer(st.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function R(e,t){var n,r,i,o,a;for(n in e)if(r=st.camelCase(n),i=t[r],o=e[n],st.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=st.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function W(e,t,n){var r,i,o,a,s,u,l,c,f,p=this,d=e.style,h={},g=[],m=e.nodeType&&w(e);n.queue||(c=st._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,f=c.empty.fire,c.empty.fire=function(){c.unqueued||f()}),c.unqueued++,p.always(function(){p.always(function(){c.unqueued--,st.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===st.css(e,"display")&&"none"===st.css(e,"float")&&(st.support.inlineBlockNeedsLayout&&"inline"!==S(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",st.support.shrinkWrapBlocks||p.done(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(r in t)if(o=t[r],Zn.exec(o)){if(delete t[r],u=u||"toggle"===o,o===(m?"hide":"show"))continue;g.push(r)}if(a=g.length){s=st._data(e,"fxshow")||st._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?st(e).show():p.done(function(){st(e).hide()}),p.done(function(){var t;st._removeData(e,"fxshow");for(t in h)st.style(e,t,h[t])});for(r=0;a>r;r++)i=g[r],l=p.createTween(i,m?s[i]:0),h[i]=s[i]||st.style(e,i),i in s||(s[i]=l.start,m&&(l.end=l.start,l.start="width"===i||"height"===i?1:0))}}function $(e,t,n,r,i){return new $.prototype.init(e,t,n,r,i)}function I(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=wn[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function z(e){return st.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}var X,U,V=e.document,Y=e.location,J=e.jQuery,G=e.$,Q={},K=[],Z="1.9.0",et=K.concat,tt=K.push,nt=K.slice,rt=K.indexOf,it=Q.toString,ot=Q.hasOwnProperty,at=Z.trim,st=function(e,t){return new st.fn.init(e,t,X)},ut=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,lt=/\S+/g,ct=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ft=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,pt=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,dt=/^[\],:{}\s]*$/,ht=/(?:^|:|,)(?:\s*\[)+/g,gt=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,mt=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,yt=/^-ms-/,vt=/-([\da-z])/gi,bt=function(e,t){return t.toUpperCase()},xt=function(){V.addEventListener?(V.removeEventListener("DOMContentLoaded",xt,!1),st.ready()):"complete"===V.readyState&&(V.detachEvent("onreadystatechange",xt),st.ready())};st.fn=st.prototype={jquery:Z,constructor:st,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ft.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof st?n[0]:n,st.merge(this,st.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:V,!0)),pt.test(i[1])&&st.isPlainObject(n))for(i in n)st.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=V.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=V,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):st.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),st.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return nt.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=st.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return st.each(this,e,t)},ready:function(e){return st.ready.promise().done(e),this},slice:function(){return this.pushStack(nt.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(st.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:tt,sort:[].sort,splice:[].splice},st.fn.init.prototype=st.fn,st.extend=st.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||st.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(e=arguments[u]))for(n in e)r=s[n],i=e[n],s!==i&&(c&&i&&(st.isPlainObject(i)||(o=st.isArray(i)))?(o?(o=!1,a=r&&st.isArray(r)?r:[]):a=r&&st.isPlainObject(r)?r:{},s[n]=st.extend(c,a,i)):i!==t&&(s[n]=i));return s},st.extend({noConflict:function(t){return e.$===st&&(e.$=G),t&&e.jQuery===st&&(e.jQuery=J),st},isReady:!1,readyWait:1,holdReady:function(e){e?st.readyWait++:st.ready(!0)},ready:function(e){if(e===!0?!--st.readyWait:!st.isReady){if(!V.body)return setTimeout(st.ready);st.isReady=!0,e!==!0&&--st.readyWait>0||(U.resolveWith(V,[st]),st.fn.trigger&&st(V).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===st.type(e)},isArray:Array.isArray||function(e){return"array"===st.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?Q[it.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==st.type(e)||e.nodeType||st.isWindow(e))return!1;try{if(e.constructor&&!ot.call(e,"constructor")&&!ot.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||ot.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||V;var r=pt.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=st.buildFragment([e],t,i),i&&st(i).remove(),st.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=st.trim(n),n&&dt.test(n.replace(gt,"@").replace(mt,"]").replace(ht,"")))?Function("return "+n)():(st.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||st.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&st.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(yt,"ms-").replace(vt,bt)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,r){var i,o=0,a=e.length,s=n(e);if(r){if(s)for(;a>o&&(i=t.apply(e[o],r),i!==!1);o++);else for(o in e)if(i=t.apply(e[o],r),i===!1)break}else if(s)for(;a>o&&(i=t.call(e[o],o,e[o]),i!==!1);o++);else for(o in e)if(i=t.call(e[o],o,e[o]),i===!1)break;return e},trim:at&&!at.call("\ufeff\u00a0")?function(e){return null==e?"":at.call(e)}:function(e){return null==e?"":(e+"").replace(ct,"")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?st.merge(r,"string"==typeof e?[e]:e):tt.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(rt)return rt.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else for(;n[o]!==t;)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,r){var i,o=0,a=e.length,s=n(e),u=[];if(s)for(;a>o;o++)i=t(e[o],o,r),null!=i&&(u[u.length]=i);else for(o in e)i=t(e[o],o,r),null!=i&&(u[u.length]=i);return et.apply([],u)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(r=e[n],n=e,e=r),st.isFunction(e)?(i=nt.call(arguments,2),o=function(){return e.apply(n||this,i.concat(nt.call(arguments)))},o.guid=e.guid=e.guid||st.guid++,o):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===st.type(r)){o=!0;for(u in r)st.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,st.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(st(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),st.ready.promise=function(t){if(!U)if(U=st.Deferred(),"complete"===V.readyState)setTimeout(st.ready);else if(V.addEventListener)V.addEventListener("DOMContentLoaded",xt,!1),e.addEventListener("load",st.ready,!1);else{V.attachEvent("onreadystatechange",xt),e.attachEvent("onload",st.ready);var n=!1;try{n=null==e.frameElement&&V.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!st.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}st.ready()}}()}return U.promise(t)},st.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){Q["[object "+t+"]"]=t.toLowerCase()}),X=st(V);var Tt={};st.Callbacks=function(e){e="string"==typeof e?Tt[e]||r(e):st.extend({},e);var n,i,o,a,s,u,l=[],c=!e.once&&[],f=function(t){for(n=e.memory&&t,i=!0,u=a||0,a=0,s=l.length,o=!0;l&&s>u;u++)if(l[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}o=!1,l&&(c?c.length&&f(c.shift()):n?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function r(t){st.each(t,function(t,n){var i=st.type(n);"function"===i?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==i&&r(n)})})(arguments),o?s=l.length:n&&(a=t,f(n))}return this},remove:function(){return l&&st.each(arguments,function(e,t){for(var n;(n=st.inArray(t,l,n))>-1;)l.splice(n,1),o&&(s>=n&&s--,u>=n&&u--)}),this},has:function(e){return st.inArray(e,l)>-1},empty:function(){return l=[],this},disable:function(){return l=c=n=t,this},disabled:function(){return!l},lock:function(){return c=t,n||p.disable(),this},locked:function(){return!c},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!c||(o?c.push(t):f(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},st.extend({Deferred:function(e){var t=[["resolve","done",st.Callbacks("once memory"),"resolved"],["reject","fail",st.Callbacks("once memory"),"rejected"],["notify","progress",st.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return st.Deferred(function(n){st.each(t,function(t,o){var a=o[0],s=st.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&st.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?st.extend(e,r):r}},i={};return r.pipe=r.then,st.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=nt.call(arguments),a=o.length,s=1!==a||e&&st.isFunction(e.promise)?a:0,u=1===s?e:st.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?nt.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=Array(a),n=Array(a),r=Array(a);a>i;i++)o[i]&&st.isFunction(o[i].promise)?o[i].promise().done(l(i,r,o)).fail(u.reject).progress(l(i,n,t)):--s;return s||u.resolveWith(r,o),u.promise()}}),st.support=function(){var n,r,i,o,a,s,u,l,c,f,p=V.createElement("div");if(p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",r=p.getElementsByTagName("*"),i=p.getElementsByTagName("a")[0],!r||!i||!r.length)return{};o=V.createElement("select"),a=o.appendChild(V.createElement("option")),s=p.getElementsByTagName("input")[0],i.style.cssText="top:1px;float:left;opacity:.5",n={getSetAttribute:"t"!==p.className,leadingWhitespace:3===p.firstChild.nodeType,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(i.getAttribute("style")),hrefNormalized:"/a"===i.getAttribute("href"),opacity:/^0.5/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:!!s.value,optSelected:a.selected,enctype:!!V.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==V.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===V.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},s.checked=!0,n.noCloneChecked=s.cloneNode(!0).checked,o.disabled=!0,n.optDisabled=!a.disabled;try{delete p.test}catch(d){n.deleteExpando=!1}s=V.createElement("input"),s.setAttribute("value",""),n.input=""===s.getAttribute("value"),s.value="t",s.setAttribute("type","radio"),n.radioValue="t"===s.value,s.setAttribute("checked","t"),s.setAttribute("name","t"),u=V.createDocumentFragment(),u.appendChild(s),n.appendChecked=s.checked,n.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,p.attachEvent&&(p.attachEvent("onclick",function(){n.noCloneEvent=!1}),p.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})p.setAttribute(l="on"+f,"t"),n[f+"Bubbles"]=l in e||p.attributes[l].expando===!1;return p.style.backgroundClip="content-box",p.cloneNode(!0).style.backgroundClip="",n.clearCloneStyle="content-box"===p.style.backgroundClip,st(function(){var r,i,o,a="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",s=V.getElementsByTagName("body")[0];s&&(r=V.createElement("div"),r.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",s.appendChild(r).appendChild(p),p.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=p.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",c=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",n.reliableHiddenOffsets=c&&0===o[0].offsetHeight,p.innerHTML="",p.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%;",n.boxSizing=4===p.offsetWidth,n.doesNotIncludeMarginInBodyOffset=1!==s.offsetTop,e.getComputedStyle&&(n.pixelPosition="1%"!==(e.getComputedStyle(p,null)||{}).top,n.boxSizingReliable="4px"===(e.getComputedStyle(p,null)||{width:"4px"}).width,i=p.appendChild(V.createElement("div")),i.style.cssText=p.style.cssText=a,i.style.marginRight=i.style.width="0",p.style.width="1px",n.reliableMarginRight=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight)),p.style.zoom!==t&&(p.innerHTML="",p.style.cssText=a+"width:1px;padding:1px;display:inline;zoom:1",n.inlineBlockNeedsLayout=3===p.offsetWidth,p.style.display="block",p.innerHTML="<div></div>",p.firstChild.style.width="5px",n.shrinkWrapBlocks=3!==p.offsetWidth,s.style.zoom=1),s.removeChild(r),r=p=o=i=null)}),r=o=u=a=i=s=null,n}();var wt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Nt=/([A-Z])/g;st.extend({cache:{},expando:"jQuery"+(Z+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?st.cache[e[st.expando]]:e[st.expando],!!e&&!s(e)},data:function(e,t,n){return i(e,t,n,!1)},removeData:function(e,t){return o(e,t,!1)},_data:function(e,t,n){return i(e,t,n,!0)},_removeData:function(e,t){return o(e,t,!0)},acceptData:function(e){var t=e.nodeName&&st.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),st.fn.extend({data:function(e,n){var r,i,o=this[0],s=0,u=null;if(e===t){if(this.length&&(u=st.data(o),1===o.nodeType&&!st._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>s;s++)i=r[s].name,i.indexOf("data-")||(i=st.camelCase(i.substring(5)),a(o,i,u[i]));st._data(o,"parsedAttrs",!0)}return u}return"object"==typeof e?this.each(function(){st.data(this,e)}):st.access(this,function(n){return n===t?o?a(o,e,st.data(o,e)):null:(this.each(function(){st.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){st.removeData(this,e)})}}),st.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=st._data(e,n),r&&(!i||st.isArray(r)?i=st._data(e,n,st.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=st.queue(e,t),r=n.length,i=n.shift(),o=st._queueHooks(e,t),a=function(){st.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return st._data(e,n)||st._data(e,n,{empty:st.Callbacks("once memory").add(function(){st._removeData(e,t+"queue"),st._removeData(e,n)})})}}),st.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?st.queue(this[0],e):n===t?this:this.each(function(){var t=st.queue(this,e,n);st._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&st.dequeue(this,e)})},dequeue:function(e){return this.each(function(){st.dequeue(this,e)})},delay:function(e,t){return e=st.fx?st.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=st.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};for("string"!=typeof e&&(n=e,e=t),e=e||"fx";s--;)r=st._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var Ct,kt,Et=/[\t\r\n]/g,St=/\r/g,At=/^(?:input|select|textarea|button|object)$/i,jt=/^(?:a|area)$/i,Dt=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,Lt=/^(?:checked|selected)$/i,Ht=st.support.getSetAttribute,Mt=st.support.input;st.fn.extend({attr:function(e,t){return st.access(this,st.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){st.removeAttr(this,e)})},prop:function(e,t){return st.access(this,st.prop,e,t,arguments.length>1)},removeProp:function(e){return e=st.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):" ")){for(o=0;i=t[o++];)0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=st.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):"")){for(o=0;i=t[o++];)for(;r.indexOf(" "+i+" ")>=0;)r=r.replace(" "+i+" "," ");n.className=e?st.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return st.isFunction(e)?this.each(function(n){st(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n)for(var i,o=0,a=st(this),s=t,u=e.match(lt)||[];i=u[o++];)s=r?s:!a.hasClass(i),a[s?"addClass":"removeClass"](i);else("undefined"===n||"boolean"===n)&&(this.className&&st._data(this,"__className__",this.className),this.className=this.className||e===!1?"":st._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Et," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=st.isFunction(e),this.each(function(r){var o,a=st(this);1===this.nodeType&&(o=i?e.call(this,r,a.val()):e,null==o?o="":"number"==typeof o?o+="":st.isArray(o)&&(o=st.map(o,function(e){return null==e?"":e+""})),n=st.valHooks[this.type]||st.valHooks[this.nodeName.toLowerCase()],n&&"set"in n&&n.set(this,o,"value")!==t||(this.value=o))});if(o)return n=st.valHooks[o.type]||st.valHooks[o.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(o,"value"))!==t?r:(r=o.value,"string"==typeof r?r.replace(St,""):null==r?"":r)}}}),st.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(st.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&st.nodeName(n.parentNode,"optgroup"))){if(t=st(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=st.makeArray(t);return st(e).find("option").each(function(){this.selected=st.inArray(st(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return e.getAttribute===t?st.prop(e,n,r):(a=1!==s||!st.isXMLDoc(e),a&&(n=n.toLowerCase(),o=st.attrHooks[n]||(Dt.test(n)?kt:Ct)),r===t?o&&a&&"get"in o&&null!==(i=o.get(e,n))?i:(e.getAttribute!==t&&(i=e.getAttribute(n)),null==i?t:i):null!==r?o&&a&&"set"in o&&(i=o.set(e,r,n))!==t?i:(e.setAttribute(n,r+""),r):(st.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(lt);if(o&&1===e.nodeType)for(;n=o[i++];)r=st.propFix[n]||n,Dt.test(n)?!Ht&&Lt.test(n)?e[st.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:st.attr(e,n,""),e.removeAttribute(Ht?n:r)},attrHooks:{type:{set:function(e,t){if(!st.support.radioValue&&"radio"===t&&st.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},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(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!st.isXMLDoc(e),a&&(n=st.propFix[n]||n,o=st.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):At.test(e.nodeName)||jt.test(e.nodeName)&&e.href?0:t}}}}),kt={get:function(e,n){var r=st.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?Mt&&Ht?null!=i:Lt.test(n)?e[st.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?st.removeAttr(e,n):Mt&&Ht||!Lt.test(n)?e.setAttribute(!Ht&&st.propFix[n]||n,n):e[st.camelCase("default-"+n)]=e[n]=!0,n}},Mt&&Ht||(st.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return st.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t
++},set:function(e,n,r){return st.nodeName(e,"input")?(e.defaultValue=n,t):Ct&&Ct.set(e,n,r)}}),Ht||(Ct=st.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},st.attrHooks.contenteditable={get:Ct.get,set:function(e,t,n){Ct.set(e,""===t?!1:t,n)}},st.each(["width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),st.support.hrefNormalized||(st.each(["href","src","width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),st.each(["href","src"],function(e,t){st.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),st.support.style||(st.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),st.support.optSelected||(st.propHooks.selected=st.extend(st.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),st.support.enctype||(st.propFix.enctype="encoding"),st.support.checkOn||st.each(["radio","checkbox"],function(){st.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),st.each(["radio","checkbox"],function(){st.valHooks[this]=st.extend(st.valHooks[this],{set:function(e,n){return st.isArray(n)?e.checked=st.inArray(st(e).val(),n)>=0:t}})});var qt=/^(?:input|select|textarea)$/i,_t=/^key/,Ft=/^(?:mouse|contextmenu)|click/,Ot=/^(?:focusinfocus|focusoutblur)$/,Bt=/^([^.]*)(?:\.(.+)|)$/;st.event={global:{},add:function(e,n,r,i,o){var a,s,u,l,c,f,p,d,h,g,m,y=3!==e.nodeType&&8!==e.nodeType&&st._data(e);if(y){for(r.handler&&(a=r,r=a.handler,o=a.selector),r.guid||(r.guid=st.guid++),(l=y.events)||(l=y.events={}),(s=y.handle)||(s=y.handle=function(e){return st===t||e&&st.event.triggered===e.type?t:st.event.dispatch.apply(s.elem,arguments)},s.elem=e),n=(n||"").match(lt)||[""],c=n.length;c--;)u=Bt.exec(n[c])||[],h=m=u[1],g=(u[2]||"").split(".").sort(),p=st.event.special[h]||{},h=(o?p.delegateType:p.bindType)||h,p=st.event.special[h]||{},f=st.extend({type:h,origType:m,data:i,handler:r,guid:r.guid,selector:o,needsContext:o&&st.expr.match.needsContext.test(o),namespace:g.join(".")},a),(d=l[h])||(d=l[h]=[],d.delegateCount=0,p.setup&&p.setup.call(e,i,g,s)!==!1||(e.addEventListener?e.addEventListener(h,s,!1):e.attachEvent&&e.attachEvent("on"+h,s))),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=r.guid)),o?d.splice(d.delegateCount++,0,f):d.push(f),st.event.global[h]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,m=st.hasData(e)&&st._data(e);if(m&&(u=m.events)){for(t=(t||"").match(lt)||[""],l=t.length;l--;)if(s=Bt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){for(f=st.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&f.teardown.call(e,h,m.handle)!==!1||st.removeEvent(e,d,m.handle),delete u[d])}else for(d in u)st.event.remove(e,d+t[l],n,r,!0);st.isEmptyObject(u)&&(delete m.handle,st._removeData(e,"events"))}},trigger:function(n,r,i,o){var a,s,u,l,c,f,p,d=[i||V],h=n.type||n,g=n.namespace?n.namespace.split("."):[];if(s=u=i=i||V,3!==i.nodeType&&8!==i.nodeType&&!Ot.test(h+st.event.triggered)&&(h.indexOf(".")>=0&&(g=h.split("."),h=g.shift(),g.sort()),c=0>h.indexOf(":")&&"on"+h,n=n[st.expando]?n:new st.Event(h,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=g.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:st.makeArray(r,[n]),p=st.event.special[h]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!st.isWindow(i)){for(l=p.delegateType||h,Ot.test(l+h)||(s=s.parentNode);s;s=s.parentNode)d.push(s),u=s;u===(i.ownerDocument||V)&&d.push(u.defaultView||u.parentWindow||e)}for(a=0;(s=d[a++])&&!n.isPropagationStopped();)n.type=a>1?l:p.bindType||h,f=(st._data(s,"events")||{})[n.type]&&st._data(s,"handle"),f&&f.apply(s,r),f=c&&s[c],f&&st.acceptData(s)&&f.apply&&f.apply(s,r)===!1&&n.preventDefault();if(n.type=h,!(o||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===h&&st.nodeName(i,"a")||!st.acceptData(i)||!c||!i[h]||st.isWindow(i))){u=i[c],u&&(i[c]=null),st.event.triggered=h;try{i[h]()}catch(m){}st.event.triggered=t,u&&(i[c]=u)}return n.result}},dispatch:function(e){e=st.event.fix(e);var n,r,i,o,a,s=[],u=nt.call(arguments),l=(st._data(this,"events")||{})[e.type]||[],c=st.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=st.event.handlers.call(this,e,l),n=0;(o=s[n++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(a=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,i=((st.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u),i!==t&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(l.disabled!==!0||"click"!==e.type){for(i=[],r=0;u>r;r++)a=n[r],o=a.selector+" ",i[o]===t&&(i[o]=a.needsContext?st(o,this).index(l)>=0:st.find(o,this,null,[l]).length),i[o]&&i.push(a);i.length&&s.push({elem:l,handlers:i})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[st.expando])return e;var t,n,r=e,i=st.event.fixHooks[e.type]||{},o=i.props?this.props.concat(i.props):this.props;for(e=new st.Event(r),t=o.length;t--;)n=o[t],e[n]=r[n];return e.target||(e.target=r.srcElement||V),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,i.filter?i.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,a=n.button,s=n.fromElement;return null==e.pageX&&null!=n.clientX&&(r=e.target.ownerDocument||V,i=r.documentElement,o=r.body,e.pageX=n.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&s&&(e.relatedTarget=s===e.target?n.toElement:s),e.which||a===t||(e.which=1&a?1:2&a?3:4&a?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return st.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==V.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===V.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=st.extend(new st.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?st.event.trigger(i,null,t):st.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},st.removeEvent=V.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,n,r){var i="on"+n;e.detachEvent&&(e[i]===t&&(e[i]=null),e.detachEvent(i,r))},st.Event=function(e,n){return this instanceof st.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?u:l):this.type=e,n&&st.extend(this,n),this.timeStamp=e&&e.timeStamp||st.now(),this[st.expando]=!0,t):new st.Event(e,n)},st.Event.prototype={isDefaultPrevented:l,isPropagationStopped:l,isImmediatePropagationStopped:l,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=u,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=u,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u,this.stopPropagation()}},st.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){st.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!st.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),st.support.submitBubbles||(st.event.special.submit={setup:function(){return st.nodeName(this,"form")?!1:(st.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=st.nodeName(n,"input")||st.nodeName(n,"button")?n.form:t;r&&!st._data(r,"submitBubbles")&&(st.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),st._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&st.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return st.nodeName(this,"form")?!1:(st.event.remove(this,"._submit"),t)}}),st.support.changeBubbles||(st.event.special.change={setup:function(){return qt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(st.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),st.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),st.event.simulate("change",this,e,!0)})),!1):(st.event.add(this,"beforeactivate._change",function(e){var t=e.target;qt.test(t.nodeName)&&!st._data(t,"changeBubbles")&&(st.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||st.event.simulate("change",this.parentNode,e,!0)}),st._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return st.event.remove(this,"._change"),!qt.test(this.nodeName)}}),st.support.focusinBubbles||st.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){st.event.simulate(t,e.target,st.event.fix(e),!0)};st.event.special[t]={setup:function(){0===n++&&V.addEventListener(e,r,!0)},teardown:function(){0===--n&&V.removeEventListener(e,r,!0)}}}),st.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(s in e)this.on(s,n,r,e[s],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=l;else if(!i)return this;return 1===o&&(a=i,i=function(e){return st().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=st.guid++)),this.each(function(){st.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,st(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=l),this.each(function(){st.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){st.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?st.event.trigger(e,n,r,!0):t},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),st.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(e,t){st.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)},_t.test(t)&&(st.event.fixHooks[t]=st.event.keyHooks),Ft.test(t)&&(st.event.fixHooks[t]=st.event.mouseHooks)}),function(e,t){function n(e){return ht.test(e+"")}function r(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>C.cacheLength&&delete e[t.shift()],e[n]=r}}function i(e){return e[P]=!0,e}function o(e){var t=L.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function a(e,t,n,r){var i,o,a,s,u,l,c,d,h,g;if((t?t.ownerDocument||t:R)!==L&&D(t),t=t||L,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!M&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Q.apply(n,K.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&W.getByClassName&&t.getElementsByClassName)return Q.apply(n,K.call(t.getElementsByClassName(a),0)),n}if(W.qsa&&!q.test(e)){if(c=!0,d=P,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(l=f(e),(c=t.getAttribute("id"))?d=c.replace(vt,"\\$&"):t.setAttribute("id",d),d="[id='"+d+"'] ",u=l.length;u--;)l[u]=d+p(l[u]);h=dt.test(e)&&t.parentNode||t,g=l.join(",")}if(g)try{return Q.apply(n,K.call(h.querySelectorAll(g),0)),n}catch(m){}finally{c||t.removeAttribute("id")}}}return x(e.replace(at,"$1"),t,n,r)}function s(e,t){for(var n=e&&t&&e.nextSibling;n;n=n.nextSibling)if(n===t)return-1;return e?1:-1}function u(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return i(function(t){return t=+t,i(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function f(e,t){var n,r,i,o,s,u,l,c=X[e+" "];if(c)return t?0:c.slice(0);for(s=e,u=[],l=C.preFilter;s;){(!n||(r=ut.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(i=[])),n=!1,(r=lt.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(at," ")}),s=s.slice(n.length));for(o in C.filter)!(r=pt[o].exec(s))||l[o]&&!(r=l[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?a.error(e):X(e,u).slice(0)}function p(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,i=n&&"parentNode"===t.dir,o=I++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,u,l,c=$+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(l=t[P]||(t[P]={}),(u=l[r])&&u[0]===c){if((s=u[1])===!0||s===N)return s===!0}else if(u=l[r]=[c],u[1]=e(t,n,a)||N,u[1]===!0)return!0}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function m(e,t,n,r,o,a){return r&&!r[P]&&(r=m(r)),o&&!o[P]&&(o=m(o,a)),i(function(i,a,s,u){var l,c,f,p=[],d=[],h=a.length,m=i||b(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?m:g(m,p,e,s,u),v=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r)for(l=g(v,d),r(l,[],s,u),c=l.length;c--;)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f));if(i){if(o||e){if(o){for(l=[],c=v.length;c--;)(f=v[c])&&l.push(y[c]=f);o(null,v=[],l,u)}for(c=v.length;c--;)(f=v[c])&&(l=o?Z.call(i,f):p[c])>-1&&(i[l]=!(a[l]=f))}}else v=g(v===a?v.splice(h,v.length):v),o?o(null,a,v,u):Q.apply(a,v)})}function y(e){for(var t,n,r,i=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=o?1:0,u=d(function(e){return e===t},a,!0),l=d(function(e){return Z.call(t,e)>-1},a,!0),c=[function(e,n,r){return!o&&(r||n!==j)||((t=n).nodeType?u(e,n,r):l(e,n,r))}];i>s;s++)if(n=C.relative[e[s].type])c=[d(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[P]){for(r=++s;i>r&&!C.relative[e[r].type];r++);return m(s>1&&h(c),s>1&&p(e.slice(0,s-1)).replace(at,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&p(e))}c.push(n)}return h(c)}function v(e,t){var n=0,r=t.length>0,o=e.length>0,s=function(i,s,u,l,c){var f,p,d,h=[],m=0,y="0",v=i&&[],b=null!=c,x=j,T=i||o&&C.find.TAG("*",c&&s.parentNode||s),w=$+=null==x?1:Math.E;for(b&&(j=s!==L&&s,N=n);null!=(f=T[y]);y++){if(o&&f){for(p=0;d=e[p];p++)if(d(f,s,u)){l.push(f);break}b&&($=w,N=++n)}r&&((f=!d&&f)&&m--,i&&v.push(f))}if(m+=y,r&&y!==m){for(p=0;d=t[p];p++)d(v,h,s,u);if(i){if(m>0)for(;y--;)v[y]||h[y]||(h[y]=G.call(l));h=g(h)}Q.apply(l,h),b&&!i&&h.length>0&&m+t.length>1&&a.uniqueSort(l)}return b&&($=w,j=x),v};return r?i(s):s}function b(e,t,n){for(var r=0,i=t.length;i>r;r++)a(e,t[r],n);return n}function x(e,t,n,r){var i,o,a,s,u,l=f(e);if(!r&&1===l.length){if(o=l[0]=l[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&!M&&C.relative[o[1].type]){if(t=C.find.ID(a.matches[0].replace(xt,Tt),t)[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?-1:o.length-1;i>=0&&(a=o[i],!C.relative[s=a.type]);i--)if((u=C.find[s])&&(r=u(a.matches[0].replace(xt,Tt),dt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return Q.apply(n,K.call(r,0)),n;break}}return S(e,l)(r,t,M,n,dt.test(e)),n}function T(){}var w,N,C,k,E,S,A,j,D,L,H,M,q,_,F,O,B,P="sizzle"+-new Date,R=e.document,W={},$=0,I=0,z=r(),X=r(),U=r(),V=typeof t,Y=1<<31,J=[],G=J.pop,Q=J.push,K=J.slice,Z=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},et="[\\x20\\t\\r\\n\\f]",tt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",nt=tt.replace("w","w#"),rt="([*^$|!~]?=)",it="\\["+et+"*("+tt+")"+et+"*(?:"+rt+et+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+nt+")|)|)"+et+"*\\]",ot=":("+tt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+it.replace(3,8)+")*)|.*)\\)|)",at=RegExp("^"+et+"+|((?:^|[^\\\\])(?:\\\\.)*)"+et+"+$","g"),ut=RegExp("^"+et+"*,"+et+"*"),lt=RegExp("^"+et+"*([\\x20\\t\\r\\n\\f>+~])"+et+"*"),ct=RegExp(ot),ft=RegExp("^"+nt+"$"),pt={ID:RegExp("^#("+tt+")"),CLASS:RegExp("^\\.("+tt+")"),NAME:RegExp("^\\[name=['\"]?("+tt+")['\"]?\\]"),TAG:RegExp("^("+tt.replace("w","w*")+")"),ATTR:RegExp("^"+it),PSEUDO:RegExp("^"+ot),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+et+"*(even|odd|(([+-]|)(\\d*)n|)"+et+"*(?:([+-]|)"+et+"*(\\d+)|))"+et+"*\\)|)","i"),needsContext:RegExp("^"+et+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+et+"*((?:-\\d)?\\d*)"+et+"*\\)|)(?=[^-]|$)","i")},dt=/[\x20\t\r\n\f]*[+~]/,ht=/\{\s*\[native code\]\s*\}/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,vt=/'|\\/g,bt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,Tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{K.call(H.childNodes,0)[0].nodeType}catch(wt){K=function(e){for(var t,n=[];t=this[e];e++)n.push(t);return n}}E=a.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},D=a.setDocument=function(e){var r=e?e.ownerDocument||e:R;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=r.documentElement,M=E(r),W.tagNameNoComments=o(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),W.attributes=o(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),W.getByClassName=o(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),W.getByName=o(function(e){e.id=P+0,e.innerHTML="<a name='"+P+"'></a><div name='"+P+"'></div>",H.insertBefore(e,H.firstChild);var t=r.getElementsByName&&r.getElementsByName(P).length===2+r.getElementsByName(P+0).length;return W.getIdNotName=!r.getElementById(P),H.removeChild(e),t}),C.attrHandle=o(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==V&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},W.getIdNotName?(C.find.ID=function(e,t){if(typeof t.getElementById!==V&&!M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){return e.getAttribute("id")===t}}):(C.find.ID=function(e,n){if(typeof n.getElementById!==V&&!M){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==V&&r.getAttributeNode("id").value===e?[r]:t:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){var n=typeof e.getAttributeNode!==V&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=W.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==V?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i];i++)1===n.nodeType&&r.push(n);return r}return o},C.find.NAME=W.getByName&&function(e,n){return typeof n.getElementsByName!==V?n.getElementsByName(name):t},C.find.CLASS=W.getByClassName&&function(e,n){return typeof n.getElementsByClassName===V||M?t:n.getElementsByClassName(e)},_=[],q=[":focus"],(W.qsa=n(r.querySelectorAll))&&(o(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||q.push("\\["+et+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||q.push(":checked")}),o(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&q.push("[*^$]="+et+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),q.push(",.*:")})),(W.matchesSelector=n(F=H.matchesSelector||H.mozMatchesSelector||H.webkitMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){W.disconnectedMatch=F.call(e,"div"),F.call(e,"[s!='']:x"),_.push("!=",ot)}),q=RegExp(q.join("|")),_=RegExp(_.join("|")),O=n(H.contains)||H.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},B=H.compareDocumentPosition?function(e,t){var n;return e===t?(A=!0,0):(n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&n||e.parentNode&&11===e.parentNode.nodeType?e===r||O(R,e)?-1:t===r||O(R,t)?1:0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,a=t.parentNode,u=[e],l=[t];if(e===t)return A=!0,0;if(e.sourceIndex&&t.sourceIndex)return(~t.sourceIndex||Y)-(O(R,e)&&~e.sourceIndex||Y);if(!o||!a)return e===r?-1:t===r?1:o?-1:a?1:0;if(o===a)return s(e,t);for(n=e;n=n.parentNode;)u.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;u[i]===l[i];)i++;return i?s(u[i],l[i]):u[i]===R?-1:l[i]===R?1:0},A=!1,[0,0].sort(B),W.detectDuplicates=A,L):L},a.matches=function(e,t){return a(e,null,null,t)},a.matchesSelector=function(e,t){if((e.ownerDocument||e)!==L&&D(e),t=t.replace(bt,"='$1']"),!(!W.matchesSelector||M||_&&_.test(t)||q.test(t)))try{var n=F.call(e,t);if(n||W.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return a(t,L,null,[e]).length>0},a.contains=function(e,t){return(e.ownerDocument||e)!==L&&D(e),O(e,t)},a.attr=function(e,t){var n;return(e.ownerDocument||e)!==L&&D(e),M||(t=t.toLowerCase()),(n=C.attrHandle[t])?n(e):M||W.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},a.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},a.uniqueSort=function(e){var t,n=[],r=1,i=0;if(A=!W.detectDuplicates,e.sort(B),A){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return e},k=a.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=k(t);return n},C=a.selectors={cacheLength:50,createPseudo:i,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,Tt),e[3]=(e[4]||e[5]||"").replace(xt,Tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||a.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&a.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&ct.test(n)&&(t=f(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,Tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=z[e+" "];return t||(t=RegExp("(^|"+et+")"+e+"("+et+"|$)"))&&z(e,function(e){return t.test(e.className||typeof e.getAttribute!==V&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=a.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.substr(i.length-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){for(;g;){for(f=t;f=f[g];)if(s?f.nodeName.toLowerCase()===y:1===f.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(c=m[P]||(m[P]={}),l=c[e]||[],d=l[0]===$&&l[1],p=l[0]===$&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(p=d=0)||h.pop();)if(1===f.nodeType&&++p&&f===t){c[e]=[$,d,p];break}}else if(v&&(l=(t[P]||(t[P]={}))[e])&&l[0]===$)p=l[1];else for(;(f=++d&&f&&f[g]||(p=d=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==y:1!==f.nodeType)||!++p||(v&&((f[P]||(f[P]={}))[e]=[$,p]),f!==t)););return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,r=C.pseudos[e]||C.setFilters[e.toLowerCase()]||a.error("unsupported pseudo: "+e);return r[P]?r(t):r.length>1?(n=[e,e,"",t],C.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,n){for(var i,o=r(e,t),a=o.length;a--;)i=Z.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:i(function(e){var t=[],n=[],r=S(e.replace(at,"$1"));return r[P]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:i(function(e){return function(t){return a(e,t).length>0}}),contains:i(function(e){return function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:i(function(e){return ft.test(e||"")||a.error("unsupported lang: "+e),e=e.replace(xt,Tt).toLowerCase(),function(t){var n;do if(n=M?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return mt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;t>++r;)e.push(r);return e})}};for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})C.pseudos[w]=u(w);for(w in{submit:!0,reset:!0})C.pseudos[w]=l(w);S=a.compile=function(e,t){var n,r=[],i=[],o=U[e+" "];if(!o){for(t||(t=f(e)),n=t.length;n--;)o=y(t[n]),o[P]?r.push(o):i.push(o);o=U(e,v(i,r))}return o},C.pseudos.nth=C.pseudos.eq,C.filters=T.prototype=C.pseudos,C.setFilters=new T,D(),a.attr=st.attr,st.find=a,st.expr=a.selectors,st.expr[":"]=st.expr.pseudos,st.unique=a.uniqueSort,st.text=a.getText,st.isXMLDoc=a.isXML,st.contains=a.contains}(e);var Pt=/Until$/,Rt=/^(?:parents|prev(?:Until|All))/,Wt=/^.[^:#\[\.,]*$/,$t=st.expr.match.needsContext,It={children:!0,contents:!0,next:!0,prev:!0};st.fn.extend({find:function(e){var t,n,r;if("string"!=typeof e)return r=this,this.pushStack(st(e).filter(function(){for(t=0;r.length>t;t++)if(st.contains(r[t],this))return!0}));for(n=[],t=0;this.length>t;t++)st.find(e,this[t],n);return n=this.pushStack(st.unique(n)),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=st(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(st.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(f(this,e,!1))},filter:function(e){return this.pushStack(f(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?$t.test(e)?st(e,this.context).index(this[0])>=0:st.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=$t.test(e)||"string"!=typeof e?st(e,t||this.context):0;i>r;r++)for(n=this[r];n&&n.ownerDocument&&n!==t&&11!==n.nodeType;){if(a?a.index(n)>-1:st.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}return this.pushStack(o.length>1?st.unique(o):o)},index:function(e){return e?"string"==typeof e?st.inArray(this[0],st(e)):st.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?st(e,t):st.makeArray(e&&e.nodeType?[e]:e),r=st.merge(this.get(),n);return this.pushStack(st.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),st.fn.andSelf=st.fn.addBack,st.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return st.dir(e,"parentNode")},parentsUntil:function(e,t,n){return st.dir(e,"parentNode",n)},next:function(e){return c(e,"nextSibling")},prev:function(e){return c(e,"previousSibling")
++},nextAll:function(e){return st.dir(e,"nextSibling")},prevAll:function(e){return st.dir(e,"previousSibling")},nextUntil:function(e,t,n){return st.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return st.dir(e,"previousSibling",n)},siblings:function(e){return st.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return st.sibling(e.firstChild)},contents:function(e){return st.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:st.merge([],e.childNodes)}},function(e,t){st.fn[e]=function(n,r){var i=st.map(this,t,n);return Pt.test(e)||(r=n),r&&"string"==typeof r&&(i=st.filter(r,i)),i=this.length>1&&!It[e]?st.unique(i):i,this.length>1&&Rt.test(e)&&(i=i.reverse()),this.pushStack(i)}}),st.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?st.find.matchesSelector(t[0],e)?[t[0]]:[]:st.find.matches(e,t)},dir:function(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!st(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});var zt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Xt=/ jQuery\d+="(?:null|\d+)"/g,Ut=RegExp("<(?:"+zt+")[\\s/>]","i"),Vt=/^\s+/,Yt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Jt=/<([\w:]+)/,Gt=/<tbody/i,Qt=/<|&#?\w+;/,Kt=/<(?:script|style|link)/i,Zt=/^(?:checkbox|radio)$/i,en=/checked\s*(?:[^=]|=\s*.checked.)/i,tn=/^$|\/(?:java|ecma)script/i,nn=/^true\/(.*)/,rn=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,on={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:st.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},an=p(V),sn=an.appendChild(V.createElement("div"));on.optgroup=on.option,on.tbody=on.tfoot=on.colgroup=on.caption=on.thead,on.th=on.td,st.fn.extend({text:function(e){return st.access(this,function(e){return e===t?st.text(this):this.empty().append((this[0]&&this[0].ownerDocument||V).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(st.isFunction(e))return this.each(function(t){st(this).wrapAll(e.call(this,t))});if(this[0]){var t=st(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return st.isFunction(e)?this.each(function(t){st(this).wrapInner(e.call(this,t))}):this.each(function(){var t=st(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=st.isFunction(e);return this.each(function(n){st(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){st.nodeName(this,"body")||st(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,r=0;null!=(n=this[r]);r++)(!e||st.filter(e,[n]).length>0)&&(t||1!==n.nodeType||st.cleanData(b(n)),n.parentNode&&(t&&st.contains(n.ownerDocument,n)&&m(b(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&st.cleanData(b(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&st.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return st.clone(this,e,t)})},html:function(e){return st.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(Xt,""):t;if(!("string"!=typeof e||Kt.test(e)||!st.support.htmlSerialize&&Ut.test(e)||!st.support.leadingWhitespace&&Vt.test(e)||on[(Jt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Yt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(st.cleanData(b(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=st.isFunction(e);return t||"string"==typeof e||(e=st(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;(n&&1===this.nodeType||11===this.nodeType)&&(st(this).remove(),t?t.parentNode.insertBefore(e,t):n.appendChild(e))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=et.apply([],e);var i,o,a,s,u,l,c=0,f=this.length,p=this,m=f-1,y=e[0],v=st.isFunction(y);if(v||!(1>=f||"string"!=typeof y||st.support.checkClone)&&en.test(y))return this.each(function(i){var o=p.eq(i);v&&(e[0]=y.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(f&&(i=st.buildFragment(e,this[0].ownerDocument,!1,this),o=i.firstChild,1===i.childNodes.length&&(i=o),o)){for(n=n&&st.nodeName(o,"tr"),a=st.map(b(i,"script"),h),s=a.length;f>c;c++)u=i,c!==m&&(u=st.clone(u,!0,!0),s&&st.merge(a,b(u,"script"))),r.call(n&&st.nodeName(this[c],"table")?d(this[c],"tbody"):this[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,st.map(a,g),c=0;s>c;c++)u=a[c],tn.test(u.type||"")&&!st._data(u,"globalEval")&&st.contains(l,u)&&(u.src?st.ajax({url:u.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):st.globalEval((u.text||u.textContent||u.innerHTML||"").replace(rn,"")));i=o=null}return this}}),st.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){st.fn[e]=function(e){for(var n,r=0,i=[],o=st(e),a=o.length-1;a>=r;r++)n=r===a?this:this.clone(!0),st(o[r])[t](n),tt.apply(i,n.get());return this.pushStack(i)}}),st.extend({clone:function(e,t,n){var r,i,o,a,s,u=st.contains(e.ownerDocument,e);if(st.support.html5Clone||st.isXMLDoc(e)||!Ut.test("<"+e.nodeName+">")?s=e.cloneNode(!0):(sn.innerHTML=e.outerHTML,sn.removeChild(s=sn.firstChild)),!(st.support.noCloneEvent&&st.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||st.isXMLDoc(e)))for(r=b(s),i=b(e),a=0;null!=(o=i[a]);++a)r[a]&&v(o,r[a]);if(t)if(n)for(i=i||b(e),r=r||b(s),a=0;null!=(o=i[a]);a++)y(o,r[a]);else y(e,s);return r=b(s,"script"),r.length>0&&m(r,!u&&b(e,"script")),r=i=o=null,s},buildFragment:function(e,t,n,r){for(var i,o,a,s,u,l,c,f=e.length,d=p(t),h=[],g=0;f>g;g++)if(o=e[g],o||0===o)if("object"===st.type(o))st.merge(h,o.nodeType?[o]:o);else if(Qt.test(o)){for(s=s||d.appendChild(t.createElement("div")),a=(Jt.exec(o)||["",""])[1].toLowerCase(),u=on[a]||on._default,s.innerHTML=u[1]+o.replace(Yt,"<$1></$2>")+u[2],c=u[0];c--;)s=s.lastChild;if(!st.support.leadingWhitespace&&Vt.test(o)&&h.push(t.createTextNode(Vt.exec(o)[0])),!st.support.tbody)for(o="table"!==a||Gt.test(o)?"<table>"!==u[1]||Gt.test(o)?0:s:s.firstChild,c=o&&o.childNodes.length;c--;)st.nodeName(l=o.childNodes[c],"tbody")&&!l.childNodes.length&&o.removeChild(l);for(st.merge(h,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=d.lastChild}else h.push(t.createTextNode(o));for(s&&d.removeChild(s),st.support.appendChecked||st.grep(b(h,"input"),x),g=0;o=h[g++];)if((!r||-1===st.inArray(o,r))&&(i=st.contains(o.ownerDocument,o),s=b(d.appendChild(o),"script"),i&&m(s),n))for(c=0;o=s[c++];)tn.test(o.type||"")&&n.push(o);return s=null,d},cleanData:function(e,n){for(var r,i,o,a,s=0,u=st.expando,l=st.cache,c=st.support.deleteExpando,f=st.event.special;null!=(o=e[s]);s++)if((n||st.acceptData(o))&&(i=o[u],r=i&&l[i])){if(r.events)for(a in r.events)f[a]?st.event.remove(o,a):st.removeEvent(o,a,r.handle);l[i]&&(delete l[i],c?delete o[u]:o.removeAttribute!==t?o.removeAttribute(u):o[u]=null,K.push(i))}}});var un,ln,cn,fn=/alpha\([^)]*\)/i,pn=/opacity\s*=\s*([^)]*)/,dn=/^(top|right|bottom|left)$/,hn=/^(none|table(?!-c[ea]).+)/,gn=/^margin/,mn=RegExp("^("+ut+")(.*)$","i"),yn=RegExp("^("+ut+")(?!px)[a-z%]+$","i"),vn=RegExp("^([+-])=("+ut+")","i"),bn={BODY:"block"},xn={position:"absolute",visibility:"hidden",display:"block"},Tn={letterSpacing:0,fontWeight:400},wn=["Top","Right","Bottom","Left"],Nn=["Webkit","O","Moz","ms"];st.fn.extend({css:function(e,n){return st.access(this,function(e,n,r){var i,o,a={},s=0;if(st.isArray(n)){for(i=ln(e),o=n.length;o>s;s++)a[n[s]]=st.css(e,n[s],!1,i);return a}return r!==t?st.style(e,n,r):st.css(e,n)},e,n,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:w(this))?st(this).show():st(this).hide()})}}),st.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=un(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":st.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=st.camelCase(n),l=e.style;if(n=st.cssProps[u]||(st.cssProps[u]=T(l,u)),s=st.cssHooks[n]||st.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=vn.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(st.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||st.cssNumber[u]||(r+="px"),st.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=st.camelCase(n);return n=st.cssProps[u]||(st.cssProps[u]=T(e.style,u)),s=st.cssHooks[n]||st.cssHooks[u],s&&"get"in s&&(o=s.get(e,!0,r)),o===t&&(o=un(e,n,i)),"normal"===o&&n in Tn&&(o=Tn[n]),r?(a=parseFloat(o),r===!0||st.isNumeric(a)?a||0:o):o},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(ln=function(t){return e.getComputedStyle(t,null)},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||st.contains(e.ownerDocument,e)||(u=st.style(e,n)),yn.test(u)&&gn.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):V.documentElement.currentStyle&&(ln=function(e){return e.currentStyle},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),yn.test(u)&&!dn.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u}),st.each(["height","width"],function(e,n){st.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&hn.test(st.css(e,"display"))?st.swap(e,xn,function(){return E(e,n,i)}):E(e,n,i):t},set:function(e,t,r){var i=r&&ln(e);return C(e,t,r?k(e,n,r,st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,i),i):0)}}}),st.support.opacity||(st.cssHooks.opacity={get:function(e,t){return pn.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=st.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===st.trim(o.replace(fn,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=fn.test(o)?o.replace(fn,i):o+" "+i)}}),st(function(){st.support.reliableMarginRight||(st.cssHooks.marginRight={get:function(e,n){return n?st.swap(e,{display:"inline-block"},un,[e,"marginRight"]):t}}),!st.support.pixelPosition&&st.fn.position&&st.each(["top","left"],function(e,n){st.cssHooks[n]={get:function(e,r){return r?(r=un(e,n),yn.test(r)?st(e).position()[n]+"px":r):t}}})}),st.expr&&st.expr.filters&&(st.expr.filters.hidden=function(e){return 0===e.offsetWidth&&0===e.offsetHeight||!st.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||st.css(e,"display"))},st.expr.filters.visible=function(e){return!st.expr.filters.hidden(e)}),st.each({margin:"",padding:"",border:"Width"},function(e,t){st.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];4>r;r++)i[e+wn[r]+t]=o[r]||o[r-2]||o[0];return i}},gn.test(e)||(st.cssHooks[e+t].set=C)});var Cn=/%20/g,kn=/\[\]$/,En=/\r?\n/g,Sn=/^(?:submit|button|image|reset)$/i,An=/^(?:input|select|textarea|keygen)/i;st.fn.extend({serialize:function(){return st.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=st.prop(this,"elements");return e?st.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!st(this).is(":disabled")&&An.test(this.nodeName)&&!Sn.test(e)&&(this.checked||!Zt.test(e))}).map(function(e,t){var n=st(this).val();return null==n?null:st.isArray(n)?st.map(n,function(e){return{name:t.name,value:e.replace(En,"\r\n")}}):{name:t.name,value:n.replace(En,"\r\n")}}).get()}}),st.param=function(e,n){var r,i=[],o=function(e,t){t=st.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=st.ajaxSettings&&st.ajaxSettings.traditional),st.isArray(e)||e.jquery&&!st.isPlainObject(e))st.each(e,function(){o(this.name,this.value)});else for(r in e)j(r,e[r],n,o);return i.join("&").replace(Cn,"+")};var jn,Dn,Ln=st.now(),Hn=/\?/,Mn=/#.*$/,qn=/([?&])_=[^&]*/,_n=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Fn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,On=/^(?:GET|HEAD)$/,Bn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Rn=st.fn.load,Wn={},$n={},In="*/".concat("*");try{Dn=Y.href}catch(zn){Dn=V.createElement("a"),Dn.href="",Dn=Dn.href}jn=Pn.exec(Dn.toLowerCase())||[],st.fn.load=function(e,n,r){if("string"!=typeof e&&Rn)return Rn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),st.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(o="POST"),s.length>0&&st.ajax({url:e,type:o,dataType:"html",data:n}).done(function(e){a=arguments,s.html(i?st("<div>").append(st.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,a||[e.responseText,t,e])}),this},st.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){st.fn[t]=function(e){return this.on(t,e)}}),st.each(["get","post"],function(e,n){st[n]=function(e,r,i,o){return st.isFunction(r)&&(o=o||i,i=r,r=t),st.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),st.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Dn,type:"GET",isLocal:Fn.test(jn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":In,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":st.parseJSON,"text xml":st.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?H(H(e,st.ajaxSettings),t):H(st.ajaxSettings,e)},ajaxPrefilter:D(Wn),ajaxTransport:D($n),ajax:function(e,n){function r(e,n,r,s){var l,f,v,b,T,N=n;2!==x&&(x=2,u&&clearTimeout(u),i=t,a=s||"",w.readyState=e>0?4:0,r&&(b=M(p,w,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=w.getResponseHeader("Last-Modified"),T&&(st.lastModified[o]=T),T=w.getResponseHeader("etag"),T&&(st.etag[o]=T)),304===e?(l=!0,N="notmodified"):(l=q(p,b),N=l.state,f=l.data,v=l.error,l=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),w.status=e,w.statusText=(n||N)+"",l?g.resolveWith(d,[f,N,w]):g.rejectWith(d,[w,N,v]),w.statusCode(y),y=t,c&&h.trigger(l?"ajaxSuccess":"ajaxError",[w,p,l?f:v]),m.fireWith(d,[w,N]),c&&(h.trigger("ajaxComplete",[w,p]),--st.active||st.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=t),n=n||{};var i,o,a,s,u,l,c,f,p=st.ajaxSetup({},n),d=p.context||p,h=p.context&&(d.nodeType||d.jquery)?st(d):st.event,g=st.Deferred(),m=st.Callbacks("once memory"),y=p.statusCode||{},v={},b={},x=0,T="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!s)for(s={};t=_n.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=b[n]=b[n]||e,v[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)y[t]=[y[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,p.url=((e||p.url||Dn)+"").replace(Mn,"").replace(Bn,jn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=st.trim(p.dataType||"*").toLowerCase().match(lt)||[""],null==p.crossDomain&&(l=Pn.exec(p.url.toLowerCase()),p.crossDomain=!(!l||l[1]===jn[1]&&l[2]===jn[2]&&(l[3]||("http:"===l[1]?80:443))==(jn[3]||("http:"===jn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=st.param(p.data,p.traditional)),L(Wn,p,n,w),2===x)return w;c=p.global,c&&0===st.active++&&st.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!On.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(Hn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=qn.test(o)?o.replace(qn,"$1_="+Ln++):o+(Hn.test(o)?"&":"?")+"_="+Ln++)),p.ifModified&&(st.lastModified[o]&&w.setRequestHeader("If-Modified-Since",st.lastModified[o]),st.etag[o]&&w.setRequestHeader("If-None-Match",st.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",p.contentType),w.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+In+"; q=0.01":""):p.accepts["*"]);for(f in p.headers)w.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(p.beforeSend.call(d,w,p)===!1||2===x))return w.abort();T="abort";for(f in{success:1,error:1,complete:1})w[f](p[f]);if(i=L($n,p,n,w)){w.readyState=1,c&&h.trigger("ajaxSend",[w,p]),p.async&&p.timeout>0&&(u=setTimeout(function(){w.abort("timeout")},p.timeout));try{x=1,i.send(v,r)}catch(N){if(!(2>x))throw N;r(-1,N)}}else r(-1,"No Transport");return w},getScript:function(e,n){return st.get(e,t,n,"script")},getJSON:function(e,t,n){return st.get(e,t,n,"json")}}),st.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return st.globalEval(e),e}}}),st.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),st.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=V.head||st("head")[0]||V.documentElement;return{send:function(t,i){n=V.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Xn=[],Un=/(=)\?(?=&|$)|\?\?/;st.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xn.pop()||st.expando+"_"+Ln++;return this[e]=!0,e}}),st.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Un.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Un.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=st.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Un,"$1"+o):n.jsonp!==!1&&(n.url+=(Hn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||st.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Xn.push(o)),s&&st.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Vn,Yn,Jn=0,Gn=e.ActiveXObject&&function(){var e;for(e in Vn)Vn[e](t,!0)};st.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&_()||F()}:_,Yn=st.ajaxSettings.xhr(),st.support.cors=!!Yn&&"withCredentials"in Yn,Yn=st.support.ajax=!!Yn,Yn&&st.ajaxTransport(function(n){if(!n.crossDomain||st.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,f,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=st.noop,Gn&&delete Vn[a]),i)4!==u.readyState&&u.abort();else{f={},s=u.status,p=u.responseXML,c=u.getAllResponseHeaders(),p&&p.documentElement&&(f.xml=p),"string"==typeof u.responseText&&(f.text=u.responseText);try{l=u.statusText}catch(d){l=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=f.text?200:404}}catch(h){i||o(-1,h)}f&&o(s,l,f,c)},n.async?4===u.readyState?setTimeout(r):(a=++Jn,Gn&&(Vn||(Vn={},st(e).unload(Gn)),Vn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Qn,Kn,Zn=/^(?:toggle|show|hide)$/,er=RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),tr=/queueHooks$/,nr=[W],rr={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=er.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(st.cssNumber[e]?"":"px"),"px"!==r&&s){s=st.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,st.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};st.Animation=st.extend(P,{tweener:function(e,t){st.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,i=e.length;i>r;r++)n=e[r],rr[n]=rr[n]||[],rr[n].unshift(t)},prefilter:function(e,t){t?nr.unshift(e):nr.push(e)}}),st.Tween=$,$.prototype={constructor:$,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(st.cssNumber[n]?"":"px")},cur:function(){var e=$.propHooks[this.prop];return e&&e.get?e.get(this):$.propHooks._default.get(this)},run:function(e){var t,n=$.propHooks[this.prop];return this.pos=t=this.options.duration?st.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):$.propHooks._default.set(this),this}},$.prototype.init.prototype=$.prototype,$.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=st.css(e.elem,e.prop,"auto"),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){st.fx.step[e.prop]?st.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[st.cssProps[e.prop]]||st.cssHooks[e.prop])?st.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},$.propHooks.scrollTop=$.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},st.each(["toggle","show","hide"],function(e,t){var n=st.fn[t];st.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,r,i)}}),st.fn.extend({fadeTo:function(e,t,n,r){return this.filter(w).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=st.isEmptyObject(e),o=st.speed(t,n,r),a=function(){var t=P(this,st.extend({},e),o);a.finish=function(){t.stop(!0)},(i||st._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=st.timers,a=st._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&tr.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&st.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=st._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=st.timers,a=r?r.length:0;for(n.finish=!0,st.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),st.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){st.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),st.speed=function(e,t,n){var r=e&&"object"==typeof e?st.extend({},e):{complete:n||!n&&t||st.isFunction(e)&&e,duration:e,easing:n&&t||t&&!st.isFunction(t)&&t};return r.duration=st.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in st.fx.speeds?st.fx.speeds[r.duration]:st.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){st.isFunction(r.old)&&r.old.call(this),r.queue&&st.dequeue(this,r.queue)},r},st.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},st.timers=[],st.fx=$.prototype.init,st.fx.tick=function(){var e,n=st.timers,r=0;for(Qn=st.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||st.fx.stop(),Qn=t},st.fx.timer=function(e){e()&&st.timers.push(e)&&st.fx.start()},st.fx.interval=13,st.fx.start=function(){Kn||(Kn=setInterval(st.fx.tick,st.fx.interval))},st.fx.stop=function(){clearInterval(Kn),Kn=null},st.fx.speeds={slow:600,fast:200,_default:400},st.fx.step={},st.expr&&st.expr.filters&&(st.expr.filters.animated=function(e){return st.grep(st.timers,function(t){return e===t.elem}).length}),st.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){st.offset.setOffset(this,e,t)});var n,r,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return n=a.documentElement,st.contains(n,o)?(o.getBoundingClientRect!==t&&(i=o.getBoundingClientRect()),r=z(a),{top:i.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:i.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):i},st.offset={setOffset:function(e,t,n){var r=st.css(e,"position");"static"===r&&(e.style.position="relative");var i,o,a=st(e),s=a.offset(),u=st.css(e,"top"),l=st.css(e,"left"),c=("absolute"===r||"fixed"===r)&&st.inArray("auto",[u,l])>-1,f={},p={};c?(p=a.position(),i=p.top,o=p.left):(i=parseFloat(u)||0,o=parseFloat(l)||0),st.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+i),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):a.css(f)}},st.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===st.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),st.nodeName(e[0],"html")||(n=e.offset()),n.top+=st.css(e[0],"borderTopWidth",!0),n.left+=st.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-st.css(r,"marginTop",!0),left:t.left-n.left-st.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||V.documentElement;e&&!st.nodeName(e,"html")&&"static"===st.css(e,"position");)e=e.offsetParent;return e||V.documentElement})}}),st.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);st.fn[e]=function(i){return st.access(this,function(e,i,o){var a=z(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?st(a).scrollLeft():o,r?o:st(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}}),st.each({Height:"height",Width:"width"},function(e,n){st.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){st.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return st.access(this,function(n,r,i){var o;return st.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?st.css(n,r,s):st.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=st,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return st})})(window);
++//@ sourceMappingURL=jquery.min.map
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/style.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/style.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/style.css	(revision 15487)
+@@ -0,0 +1,96 @@
++/*=================================*/
++/* Nivo Slider Demo
++/* November 2010
++/* By: Gilbert Pellegrom
++/* http://dev7studios.com
++/*=================================*/
++
++/*====================*/
++/*=== Reset Styles ===*/
++/*====================*/
++html, body, div, span, applet, object, iframe,
++h1, h2, h3, h4, h5, h6, p, blockquote, pre,
++a, abbr, acronym, address, big, cite, code,
++del, dfn, em, font, img, ins, kbd, q, s, samp,
++small, strike, strong, sub, sup, tt, var,
++dl, dt, dd, ol, ul, li,
++fieldset, form, label, legend,
++table, caption, tbody, tfoot, thead, tr, th, td {
++	margin:0;
++	padding:0;
++	border:0;
++	outline:0;
++	font-weight:inherit;
++	font-style:inherit;
++	font-size:100%;
++	font-family:inherit;
++	vertical-align:baseline;
++}
++body {
++	line-height:1;
++	color:black;
++	background:white;
++}
++table {
++	border-collapse:separate;
++	border-spacing:0;
++}
++caption, th, td {
++	text-align:left;
++	font-weight:normal;
++}
++blockquote:before, blockquote:after,
++q:before, q:after {
++	content:"";
++}
++blockquote, q {
++	quotes:"" "";
++}
++/* HTML5 tags */
++header, section, footer,
++aside, nav, article, figure {
++	display: block;
++}
++
++/*===================*/
++/*=== Main Styles ===*/
++/*===================*/
++body {
++	font:14px/1.6 Georgia, Palatino, Palatino Linotype, Times, Times New Roman, serif;
++	color:#333;
++	background:#eee;
++}
++
++a, a:visited {
++	color:blue;
++	text-decoration:none;
++}
++a:hover, a:active {
++	color:#000;
++	text-decoration:none;
++}
++
++#dev7link {
++    position:absolute;
++    top:0;
++    left:50px;
++    background:url(images/dev7logo.png) no-repeat;
++    width:60px;
++    height:67px;
++    border:0;
++    display:block;
++    text-indent:-9999px;
++}
++
++.slider-wrapper { 
++	width: 1000px;
++	height: 1000px;
++	margin: 100px auto;
++}
++
++/*====================*/
++/*=== Other Styles ===*/
++/*====================*/
++.clear {
++	clear:both;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.js	(revision 15487)
+@@ -0,0 +1,662 @@
++/*
++ * jQuery Nivo Slider v3.2
++ * http://nivo.dev7studios.com
++ *
++ * Copyright 2012, Dev7studios
++ * Free to use and abuse under the MIT license.
++ * http://www.opensource.org/licenses/mit-license.php
++ */
++
++(function($) {
++    var NivoSlider = function(element, options){
++        // Defaults are below
++        var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
++
++        // Useful variables. Play carefully.
++        var vars = {
++            currentSlide: 0,
++            currentImage: '',
++            totalSlides: 0,
++            running: false,
++            paused: false,
++            stop: false,
++            controlNavEl: false
++        };
++
++        // Get this slider
++        var slider = $(element);
++        slider.data('nivo:vars', vars).addClass('nivoSlider');
++
++        // Find our slider children
++        var kids = slider.children();
++        kids.each(function() {
++            var child = $(this);
++            var link = '';
++            if(!child.is('img')){
++                if(child.is('a')){
++                    child.addClass('nivo-imageLink');
++                    link = child;
++                }
++                child = child.find('img:first');
++            }
++            // Get img width & height
++            var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
++                childHeight = (childHeight === 0) ? child.attr('height') : child.height();
++
++            if(link !== ''){
++                link.css('display','none');
++            }
++            child.css('display','none');
++            vars.totalSlides++;
++        });
++         
++        // If randomStart
++        if(settings.randomStart){
++            settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
++        }
++        
++        // Set startSlide
++        if(settings.startSlide > 0){
++            if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
++            vars.currentSlide = settings.startSlide;
++        }
++        
++        // Get initial image
++        if($(kids[vars.currentSlide]).is('img')){
++            vars.currentImage = $(kids[vars.currentSlide]);
++        } else {
++            vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
++        }
++        
++        // Show initial link
++        if($(kids[vars.currentSlide]).is('a')){
++            $(kids[vars.currentSlide]).css('display','block');
++        }
++        
++        // Set first background
++        var sliderImg = $('<img/>').addClass('nivo-main-image');
++        sliderImg.attr('src', vars.currentImage.attr('src')).show();
++        slider.append(sliderImg);
++
++        // Detect Window Resize
++        $(window).resize(function() {
++            slider.children('img').width(slider.width());
++            sliderImg.attr('src', vars.currentImage.attr('src'));
++            sliderImg.stop().height('auto');
++            $('.nivo-slice').remove();
++            $('.nivo-box').remove();
++        });
++
++        //Create caption
++        slider.append($('<div class="nivo-caption"></div>'));
++        
++        // Process caption function
++        var processCaption = function(settings){
++            var nivoCaption = $('.nivo-caption', slider);
++            if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
++                var title = vars.currentImage.attr('title');
++                if(title.substr(0,1) == '#') title = $(title).html();   
++
++                if(nivoCaption.css('display') == 'block'){
++                    setTimeout(function(){
++                        nivoCaption.html(title);
++                    }, settings.animSpeed);
++                } else {
++                    nivoCaption.html(title);
++                    nivoCaption.stop().fadeIn(settings.animSpeed);
++                }
++            } else {
++                nivoCaption.stop().fadeOut(settings.animSpeed);
++            }
++        }
++        
++        //Process initial  caption
++        processCaption(settings);
++        
++        // In the words of Super Mario "let's a go!"
++        var timer = 0;
++        if(!settings.manualAdvance && kids.length > 1){
++            timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
++        }
++        
++        // Add Direction nav
++        if(settings.directionNav){
++            slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
++            
++            $(slider).on('click', 'a.nivo-prevNav', function(){
++                if(vars.running) { return false; }
++                clearInterval(timer);
++                timer = '';
++                vars.currentSlide -= 2;
++                nivoRun(slider, kids, settings, 'prev');
++            });
++            
++            $(slider).on('click', 'a.nivo-nextNav', function(){
++                if(vars.running) { return false; }
++                clearInterval(timer);
++                timer = '';
++                nivoRun(slider, kids, settings, 'next');
++            });
++        }
++        
++        // Add Control nav
++        if(settings.controlNav){
++            vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
++            slider.after(vars.controlNavEl);
++            for(var i = 0; i < kids.length; i++){
++                if(settings.controlNavThumbs){
++                    vars.controlNavEl.addClass('nivo-thumbs-enabled');
++                    var child = kids.eq(i);
++                    if(!child.is('img')){
++                        child = child.find('img:first');
++                    }
++                    if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
++                } else {
++                    vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
++                }
++            }
++
++            //Set initial active link
++            $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
++            
++            $('a', vars.controlNavEl).bind('click', function(){
++                if(vars.running) return false;
++                if($(this).hasClass('active')) return false;
++                clearInterval(timer);
++                timer = '';
++                sliderImg.attr('src', vars.currentImage.attr('src'));
++                vars.currentSlide = $(this).attr('rel') - 1;
++                nivoRun(slider, kids, settings, 'control');
++            });
++        }
++        
++        //For pauseOnHover setting
++        if(settings.pauseOnHover){
++            slider.hover(function(){
++                vars.paused = true;
++                clearInterval(timer);
++                timer = '';
++            }, function(){
++                vars.paused = false;
++                // Restart the timer
++                if(timer === '' && !settings.manualAdvance){
++                    timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
++                }
++            });
++        }
++        
++        // Event when Animation finishes
++        slider.bind('nivo:animFinished', function(){
++            sliderImg.attr('src', vars.currentImage.attr('src'));
++            vars.running = false; 
++            // Hide child links
++            $(kids).each(function(){
++                if($(this).is('a')){
++                   $(this).css('display','none');
++                }
++            });
++            // Show current link
++            if($(kids[vars.currentSlide]).is('a')){
++                $(kids[vars.currentSlide]).css('display','block');
++            }
++            // Restart the timer
++            if(timer === '' && !vars.paused && !settings.manualAdvance){
++                timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
++            }
++            // Trigger the afterChange callback
++            settings.afterChange.call(this);
++        }); 
++        
++        // Add slices for slice animations
++        var createSlices = function(slider, settings, vars) {
++        	if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
++            $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
++            var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();
++
++            for(var i = 0; i < settings.slices; i++){
++                var sliceWidth = Math.round(slider.width()/settings.slices);
++                
++                if(i === settings.slices-1){
++                    slider.append(
++                        $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({ 
++                            left:(sliceWidth*i)+'px', 
++                            width:(slider.width()-(sliceWidth*i))+'px',
++                            height:sliceHeight+'px', 
++                            opacity:'0',
++                            overflow:'hidden'
++                        })
++                    );
++                } else {
++                    slider.append(
++                        $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({ 
++                            left:(sliceWidth*i)+'px', 
++                            width:sliceWidth+'px',
++                            height:sliceHeight+'px',
++                            opacity:'0',
++                            overflow:'hidden'
++                        })
++                    );
++                }
++            }
++            
++            $('.nivo-slice', slider).height(sliceHeight);
++            sliderImg.stop().animate({
++                height: $(vars.currentImage).height()
++            }, settings.animSpeed);
++        };
++        
++        // Add boxes for box animations
++        var createBoxes = function(slider, settings, vars){
++        	if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
++            $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
++            var boxWidth = Math.round(slider.width()/settings.boxCols),
++                boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);
++            
++                        
++            for(var rows = 0; rows < settings.boxRows; rows++){
++                for(var cols = 0; cols < settings.boxCols; cols++){
++                    if(cols === settings.boxCols-1){
++                        slider.append(
++                            $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({ 
++                                opacity:0,
++                                left:(boxWidth*cols)+'px', 
++                                top:(boxHeight*rows)+'px',
++                                width:(slider.width()-(boxWidth*cols))+'px'
++                                
++                            })
++                        );
++                        $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
++                    } else {
++                        slider.append(
++                            $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({ 
++                                opacity:0,
++                                left:(boxWidth*cols)+'px', 
++                                top:(boxHeight*rows)+'px',
++                                width:boxWidth+'px'
++                            })
++                        );
++                        $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
++                    }
++                }
++            }
++            
++            sliderImg.stop().animate({
++                height: $(vars.currentImage).height()
++            }, settings.animSpeed);
++        };
++
++        // Private run method
++        var nivoRun = function(slider, kids, settings, nudge){          
++            // Get our vars
++            var vars = slider.data('nivo:vars');
++            
++            // Trigger the lastSlide callback
++            if(vars && (vars.currentSlide === vars.totalSlides - 1)){ 
++                settings.lastSlide.call(this);
++            }
++            
++            // Stop
++            if((!vars || vars.stop) && !nudge) { return false; }
++            
++            // Trigger the beforeChange callback
++            settings.beforeChange.call(this);
++
++            // Set current background before change
++            if(!nudge){
++                sliderImg.attr('src', vars.currentImage.attr('src'));
++            } else {
++                if(nudge === 'prev'){
++                    sliderImg.attr('src', vars.currentImage.attr('src'));
++                }
++                if(nudge === 'next'){
++                    sliderImg.attr('src', vars.currentImage.attr('src'));
++                }
++            }
++            
++            vars.currentSlide++;
++            // Trigger the slideshowEnd callback
++            if(vars.currentSlide === vars.totalSlides){ 
++                vars.currentSlide = 0;
++                settings.slideshowEnd.call(this);
++            }
++            if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
++            // Set vars.currentImage
++            if($(kids[vars.currentSlide]).is('img')){
++                vars.currentImage = $(kids[vars.currentSlide]);
++            } else {
++                vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
++            }
++            
++            // Set active links
++            if(settings.controlNav){
++                $('a', vars.controlNavEl).removeClass('active');
++                $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
++            }
++            
++            // Process caption
++            processCaption(settings);            
++            
++            // Remove any slices from last transition
++            $('.nivo-slice', slider).remove();
++            
++            // Remove any boxes from last transition
++            $('.nivo-box', slider).remove();
++            
++            var currentEffect = settings.effect,
++                anims = '';
++                
++            // Generate random effect
++            if(settings.effect === 'random'){
++                anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
++                'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
++                currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
++                if(currentEffect === undefined) { currentEffect = 'fade'; }
++            }
++            
++            // Run random effect from specified set (eg: effect:'fold,fade')
++            if(settings.effect.indexOf(',') !== -1){
++                anims = settings.effect.split(',');
++                currentEffect = anims[Math.floor(Math.random()*(anims.length))];
++                if(currentEffect === undefined) { currentEffect = 'fade'; }
++            }
++            
++            // Custom transition as defined by "data-transition" attribute
++            if(vars.currentImage.attr('data-transition')){
++                currentEffect = vars.currentImage.attr('data-transition');
++            }
++        
++            // Run effects
++            vars.running = true;
++            var timeBuff = 0,
++                i = 0,
++                slices = '',
++                firstSlice = '',
++                totalBoxes = '',
++                boxes = '';
++            
++            if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
++                createSlices(slider, settings, vars);
++                timeBuff = 0;
++                i = 0;
++                slices = $('.nivo-slice', slider);
++                if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
++                
++                slices.each(function(){
++                    var slice = $(this);
++                    slice.css({ 'top': '0px' });
++                    if(i === settings.slices-1){
++                        setTimeout(function(){
++                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
++                        }, (100 + timeBuff));
++                    } else {
++                        setTimeout(function(){
++                            slice.animate({opacity:'1.0' }, settings.animSpeed);
++                        }, (100 + timeBuff));
++                    }
++                    timeBuff += 50;
++                    i++;
++                });
++            } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
++                createSlices(slider, settings, vars);
++                timeBuff = 0;
++                i = 0;
++                slices = $('.nivo-slice', slider);
++                if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); }
++                
++                slices.each(function(){
++                    var slice = $(this);
++                    slice.css({ 'bottom': '0px' });
++                    if(i === settings.slices-1){
++                        setTimeout(function(){
++                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
++                        }, (100 + timeBuff));
++                    } else {
++                        setTimeout(function(){
++                            slice.animate({opacity:'1.0' }, settings.animSpeed);
++                        }, (100 + timeBuff));
++                    }
++                    timeBuff += 50;
++                    i++;
++                });
++            } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
++                createSlices(slider, settings, vars);
++                timeBuff = 0;
++                i = 0;
++                var v = 0;
++                slices = $('.nivo-slice', slider);
++                if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
++                
++                slices.each(function(){
++                    var slice = $(this);
++                    if(i === 0){
++                        slice.css('top','0px');
++                        i++;
++                    } else {
++                        slice.css('bottom','0px');
++                        i = 0;
++                    }
++                    
++                    if(v === settings.slices-1){
++                        setTimeout(function(){
++                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
++                        }, (100 + timeBuff));
++                    } else {
++                        setTimeout(function(){
++                            slice.animate({opacity:'1.0' }, settings.animSpeed);
++                        }, (100 + timeBuff));
++                    }
++                    timeBuff += 50;
++                    v++;
++                });
++            } else if(currentEffect === 'fold'){
++                createSlices(slider, settings, vars);
++                timeBuff = 0;
++                i = 0;
++                
++                $('.nivo-slice', slider).each(function(){
++                    var slice = $(this);
++                    var origWidth = slice.width();
++                    slice.css({ top:'0px', width:'0px' });
++                    if(i === settings.slices-1){
++                        setTimeout(function(){
++                            slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
++                        }, (100 + timeBuff));
++                    } else {
++                        setTimeout(function(){
++                            slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
++                        }, (100 + timeBuff));
++                    }
++                    timeBuff += 50;
++                    i++;
++                });
++            } else if(currentEffect === 'fade'){
++                createSlices(slider, settings, vars);
++                
++                firstSlice = $('.nivo-slice:first', slider);
++                firstSlice.css({
++                    'width': slider.width() + 'px'
++                });
++    
++                firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
++            } else if(currentEffect === 'slideInRight'){
++                createSlices(slider, settings, vars);
++                
++                firstSlice = $('.nivo-slice:first', slider);
++                firstSlice.css({
++                    'width': '0px',
++                    'opacity': '1'
++                });
++
++                firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
++            } else if(currentEffect === 'slideInLeft'){
++                createSlices(slider, settings, vars);
++                
++                firstSlice = $('.nivo-slice:first', slider);
++                firstSlice.css({
++                    'width': '0px',
++                    'opacity': '1',
++                    'left': '',
++                    'right': '0px'
++                });
++
++                firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ 
++                    // Reset positioning
++                    firstSlice.css({
++                        'left': '0px',
++                        'right': ''
++                    });
++                    slider.trigger('nivo:animFinished'); 
++                });
++            } else if(currentEffect === 'boxRandom'){
++                createBoxes(slider, settings, vars);
++                
++                totalBoxes = settings.boxCols * settings.boxRows;
++                i = 0;
++                timeBuff = 0;
++
++                boxes = shuffle($('.nivo-box', slider));
++                boxes.each(function(){
++                    var box = $(this);
++                    if(i === totalBoxes-1){
++                        setTimeout(function(){
++                            box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
++                        }, (100 + timeBuff));
++                    } else {
++                        setTimeout(function(){
++                            box.animate({ opacity:'1' }, settings.animSpeed);
++                        }, (100 + timeBuff));
++                    }
++                    timeBuff += 20;
++                    i++;
++                });
++            } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
++                createBoxes(slider, settings, vars);
++                
++                totalBoxes = settings.boxCols * settings.boxRows;
++                i = 0;
++                timeBuff = 0;
++                
++                // Split boxes into 2D array
++                var rowIndex = 0;
++                var colIndex = 0;
++                var box2Darr = [];
++                box2Darr[rowIndex] = [];
++                boxes = $('.nivo-box', slider);
++                if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
++                    boxes = $('.nivo-box', slider)._reverse();
++                }
++                boxes.each(function(){
++                    box2Darr[rowIndex][colIndex] = $(this);
++                    colIndex++;
++                    if(colIndex === settings.boxCols){
++                        rowIndex++;
++                        colIndex = 0;
++                        box2Darr[rowIndex] = [];
++                    }
++                });
++                
++                // Run animation
++                for(var cols = 0; cols < (settings.boxCols * 2); cols++){
++                    var prevCol = cols;
++                    for(var rows = 0; rows < settings.boxRows; rows++){
++                        if(prevCol >= 0 && prevCol < settings.boxCols){
++                            /* Due to some weird JS bug with loop vars 
++                            being used in setTimeout, this is wrapped
++                            with an anonymous function call */
++                            (function(row, col, time, i, totalBoxes) {
++                                var box = $(box2Darr[row][col]);
++                                var w = box.width();
++                                var h = box.height();
++                                if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
++                                    box.width(0).height(0);
++                                }
++                                if(i === totalBoxes-1){
++                                    setTimeout(function(){
++                                        box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
++                                    }, (100 + time));
++                                } else {
++                                    setTimeout(function(){
++                                        box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
++                                    }, (100 + time));
++                                }
++                            })(rows, prevCol, timeBuff, i, totalBoxes);
++                            i++;
++                        }
++                        prevCol--;
++                    }
++                    timeBuff += 100;
++                }
++            }           
++        };
++        
++        // Shuffle an array
++        var shuffle = function(arr){
++            for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
++            return arr;
++        };
++        
++        // For debugging
++        var trace = function(msg){
++            if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
++        };
++        
++        // Start / Stop
++        this.stop = function(){
++            if(!$(element).data('nivo:vars').stop){
++                $(element).data('nivo:vars').stop = true;
++                trace('Stop Slider');
++            }
++        };
++        
++        this.start = function(){
++            if($(element).data('nivo:vars').stop){
++                $(element).data('nivo:vars').stop = false;
++                trace('Start Slider');
++            }
++        };
++        
++        // Trigger the afterLoad callback
++        settings.afterLoad.call(this);
++        
++        return this;
++    };
++        
++    $.fn.nivoSlider = function(options) {
++        return this.each(function(key, value){
++            var element = $(this);
++            // Return early if this element already has a plugin instance
++            if (element.data('nivoslider')) { return element.data('nivoslider'); }
++            // Pass options to plugin constructor
++            var nivoslider = new NivoSlider(this, options);
++            // Store plugin object in this element's data
++            element.data('nivoslider', nivoslider);
++        });
++    };
++    
++    //Default settings
++    $.fn.nivoSlider.defaults = {
++        effect: 'random',
++        slices: 15,
++        boxCols: 8,
++        boxRows: 4,
++        animSpeed: 500,
++        pauseTime: 3000,
++        startSlide: 0,
++        directionNav: true,
++        controlNav: true,
++        controlNavThumbs: false,
++        pauseOnHover: true,
++        manualAdvance: false,
++        prevText: 'Prev',
++        nextText: 'Next',
++        randomStart: false,
++        beforeChange: function(){},
++        afterChange: function(){},
++        slideshowEnd: function(){},
++        lastSlide: function(){},
++        afterLoad: function(){}
++    };
++
++    $.fn._reverse = [].reverse;
++    
++})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/arrows.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/arrows.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/arrows.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/arrows.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/arrows.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/loading.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/loading.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/loading.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/loading.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/loading.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/dark.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/dark.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/dark.css	(revision 15487)
+@@ -0,0 +1,102 @@
++/*
++Skin Name: Nivo Slider Dark Theme
++Skin URI: http://nivo.dev7studios.com
++Description: A dark skin for the Nivo Slider.
++Version: 1.0
++Author: Gilbert Pellegrom
++Author URI: http://dev7studios.com
++Supports Thumbs: true
++*/
++
++.theme-dark.slider-wrapper {
++    background: #222;
++    padding: 10px;
++}
++.theme-dark .nivoSlider {
++	position:relative;
++	background:#fff url(loading.gif) no-repeat 50% 50%;
++    margin-bottom:10px;
++    overflow: visible;
++}
++.theme-dark .nivoSlider img {
++	position:absolute;
++	top:0px;
++	left:0px;
++	display:none;
++}
++.theme-dark .nivoSlider a {
++	border:0;
++	display:block;
++}
++
++.theme-dark .nivo-controlNav {
++	text-align: left;
++	padding: 0;
++	position: relative;
++	z-index: 10;
++}
++.theme-dark .nivo-controlNav a {
++	display:inline-block;
++	width:10px;
++	height:10px;
++	background:url(bullets.png) no-repeat 0 2px;
++	text-indent:-9999px;
++	border:0;
++	margin: 0 2px;
++}
++.theme-dark .nivo-controlNav a.active {
++	background-position:0 100%;
++}
++
++.theme-dark .nivo-directionNav a {
++	display:block;
++	width:30px;
++	height:30px;
++	background: url(arrows.png) no-repeat;
++	text-indent:-9999px;
++	border:0;
++	top: auto;
++	bottom: -36px;
++	z-index: 11;
++}
++.theme-dark .nivo-directionNav a:hover {
++    background-color: #333;
++    -webkit-border-radius: 2px;
++    -moz-border-radius: 2px;
++    border-radius: 2px;
++}
++.theme-dark a.nivo-nextNav {
++	background-position:-16px 50%;
++	right:0px;
++}
++.theme-dark a.nivo-prevNav {
++    background-position:11px 50%;
++    left: auto;
++	right: 35px;
++}
++
++.theme-dark .nivo-caption {
++    font-family: Helvetica, Arial, sans-serif;
++}
++.theme-dark .nivo-caption a {
++    color:#fff;
++    border-bottom:1px dotted #fff;
++}
++.theme-dark .nivo-caption a:hover {
++    color:#fff;
++}
++
++.theme-dark .nivo-controlNav.nivo-thumbs-enabled {
++	width: 80%;
++}
++.theme-dark .nivo-controlNav.nivo-thumbs-enabled a {
++	width: auto;
++	height: auto;
++	background: none;
++	margin-bottom: 5px;
++}
++.theme-dark .nivo-controlNav.nivo-thumbs-enabled img {
++	display: block;
++	width: 120px;
++	height: auto;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/bullets.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/bullets.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/bullets.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/bullets.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/bullets.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/arrows.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/arrows.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/arrows.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/arrows.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/arrows.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/loading.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/loading.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/loading.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/loading.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/loading.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bar.css	(revision 15487)
+@@ -0,0 +1,132 @@
++/*
++Skin Name: Nivo Slider Bar Theme
++Skin URI: http://nivo.dev7studios.com
++Description: The bottom bar skin for the Nivo Slider.
++Version: 1.0
++Author: Gilbert Pellegrom
++Author URI: http://dev7studios.com
++Supports Thumbs: false
++*/
++
++.theme-bar.slider-wrapper {
++    position: relative;
++    border: 1px solid #333;
++    overflow: hidden;
++}
++.theme-bar .nivoSlider {
++	position:relative;
++	background:#fff url(loading.gif) no-repeat 50% 50%;
++}
++.theme-bar .nivoSlider img {
++	position:absolute;
++	top:0px;
++	left:0px;
++	display:none;
++}
++.theme-bar .nivoSlider a {
++	border:0;
++	display:block;
++}
++
++.theme-bar .nivo-controlNav {
++    position: absolute;
++    left: 0;
++    bottom: -41px;
++    z-index: 10;
++    width: 100%;
++    height: 30px;
++	text-align: center;
++	padding: 5px 0;
++	border-top: 1px solid #333;
++	background: #333;
++    background: -moz-linear-gradient(top,  #565656 0%, #333333 100%); /* FF3.6+ */
++    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#565656), color-stop(100%,#333333)); /* Chrome,Safari4+ */
++    background: -webkit-linear-gradient(top,  #565656 0%,#333333 100%); /* Chrome10+,Safari5.1+ */
++    background: -o-linear-gradient(top,  #565656 0%,#333333 100%); /* Opera 11.10+ */
++    background: -ms-linear-gradient(top,  #565656 0%,#333333 100%); /* IE10+ */
++    background: linear-gradient(to bottom,  #565656 0%,#333333 100%); /* W3C */
++    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#565656', endColorstr='#333333',GradientType=0 ); /* IE6-9 */
++    opacity: 0.5;
++    -webkit-transition: all 200ms ease-in-out;
++    -moz-transition: all 200ms ease-in-out;
++    -o-transition: all 200ms ease-in-out;
++    transition: all 200ms ease-in-out;
++}
++.theme-bar:hover .nivo-controlNav {
++    bottom: 0;
++    opacity: 1;
++}
++.theme-bar .nivo-controlNav a {
++	display:inline-block;
++	width:22px;
++	height:22px;
++	background:url(bullets.png) no-repeat;
++	text-indent:-9999px;
++	border:0;
++	margin: 5px 2px 0 2px;
++}
++.theme-bar .nivo-controlNav a.active {
++	background-position:0 -22px;
++}
++
++.theme-bar .nivo-directionNav a {
++	display:block;
++	border:0;
++	color: #fff;
++	text-transform: uppercase;
++	top: auto;
++	bottom: 10px;
++	z-index: 11;
++	font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
++	font-size: 13px;
++	line-height: 20px;
++	opacity: 0.5;
++    -webkit-transition: all 200ms ease-in-out;
++    -moz-transition: all 200ms ease-in-out;
++    -o-transition: all 200ms ease-in-out;
++    transition: all 200ms ease-in-out;
++}
++.theme-bar a.nivo-nextNav { right: -50px; }
++.theme-bar a.nivo-prevNav { left: -50px; }
++.theme-bar:hover a.nivo-nextNav { 
++    right: 15px; 
++    opacity: 1;
++}
++.theme-bar:hover a.nivo-prevNav { 
++    left: 15px; 
++    opacity: 1;
++}
++.theme-bar .nivo-directionNav a:hover { color: #ddd; }
++
++.theme-bar .nivo-caption {
++    font-family: Helvetica, Arial, sans-serif;
++    -webkit-transition: all 200ms ease-in-out;
++    -moz-transition: all 200ms ease-in-out;
++    -o-transition: all 200ms ease-in-out;
++    transition: all 200ms ease-in-out;
++}
++.theme-bar:hover .nivo-caption {
++    bottom: 41px;
++}
++.theme-bar .nivo-caption a {
++    color:#fff;
++    border-bottom:1px dotted #fff;
++}
++.theme-bar .nivo-caption a:hover {
++    color:#fff;
++}
++
++.theme-bar .nivo-controlNav.nivo-thumbs-enabled {
++	width: 100%;
++}
++.theme-bar .nivo-controlNav.nivo-thumbs-enabled a {
++	width: auto;
++	height: auto;
++	background: none;
++	margin-bottom: 5px;
++}
++.theme-bar .nivo-controlNav.nivo-thumbs-enabled img {
++	display: block;
++	width: 120px;
++	height: auto;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bullets.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bullets.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bullets.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bullets.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bullets.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/arrows.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/arrows.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/arrows.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/arrows.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/arrows.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/loading.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/loading.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/loading.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/loading.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/loading.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/default.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/default.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/default.css	(revision 15487)
+@@ -0,0 +1,93 @@
++/*
++Skin Name: Nivo Slider Default Theme
++Skin URI: http://nivo.dev7studios.com
++Description: The default skin for the Nivo Slider.
++Version: 1.3
++Author: Gilbert Pellegrom
++Author URI: http://dev7studios.com
++Supports Thumbs: true
++*/
++
++.theme-default .nivoSlider {
++	position:relative;
++	background:#fff url(loading.gif) no-repeat 50% 50%;
++    margin-bottom:10px;
++    -webkit-box-shadow: 0px 1px 5px 0px #4a4a4a;
++    -moz-box-shadow: 0px 1px 5px 0px #4a4a4a;
++    box-shadow: 0px 1px 5px 0px #4a4a4a;
++}
++.theme-default .nivoSlider img {
++	position:absolute;
++	top:0px;
++	left:0px;
++	display:none;
++}
++.theme-default .nivoSlider a {
++	border:0;
++	display:block;
++}
++
++.theme-default .nivo-controlNav {
++	text-align: center;
++	padding: 20px 0;
++}
++.theme-default .nivo-controlNav a {
++	display:inline-block;
++	width:22px;
++	height:22px;
++	background:url(bullets.png) no-repeat;
++	text-indent:-9999px;
++	border:0;
++	margin: 0 2px;
++}
++.theme-default .nivo-controlNav a.active {
++	background-position:0 -22px;
++}
++
++.theme-default .nivo-directionNav a {
++	display:block;
++	width:30px;
++	height:30px;
++	background:url(arrows.png) no-repeat;
++	text-indent:-9999px;
++	border:0;
++	opacity: 0;
++	-webkit-transition: all 200ms ease-in-out;
++    -moz-transition: all 200ms ease-in-out;
++    -o-transition: all 200ms ease-in-out;
++    transition: all 200ms ease-in-out;
++}
++.theme-default:hover .nivo-directionNav a { opacity: 1; }
++.theme-default a.nivo-nextNav {
++	background-position:-30px 0;
++	right:15px;
++}
++.theme-default a.nivo-prevNav {
++	left:15px;
++}
++
++.theme-default .nivo-caption {
++    font-family: Helvetica, Arial, sans-serif;
++}
++.theme-default .nivo-caption a {
++    color:#fff;
++    border-bottom:1px dotted #fff;
++}
++.theme-default .nivo-caption a:hover {
++    color:#fff;
++}
++
++.theme-default .nivo-controlNav.nivo-thumbs-enabled {
++	width: 100%;
++}
++.theme-default .nivo-controlNav.nivo-thumbs-enabled a {
++	width: auto;
++	height: auto;
++	background: none;
++	margin-bottom: 5px;
++}
++.theme-default .nivo-controlNav.nivo-thumbs-enabled img {
++	display: block;
++	width: 120px;
++	height: auto;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/bullets.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/bullets.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/bullets.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/bullets.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/bullets.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/arrows.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/arrows.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/arrows.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/arrows.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/arrows.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/loading.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/loading.gif
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/loading.gif	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/loading.gif	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/loading.gif
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/bullets.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/bullets.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/bullets.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/bullets.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/bullets.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/light.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/light.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/light.css	(revision 15487)
+@@ -0,0 +1,102 @@
++/*
++Skin Name: Nivo Slider Light Theme
++Skin URI: http://nivo.dev7studios.com
++Description: A light skin for the Nivo Slider.
++Version: 1.0
++Author: Gilbert Pellegrom
++Author URI: http://dev7studios.com
++Supports Thumbs: true
++*/
++
++.theme-light.slider-wrapper {
++    background: #fff;
++    padding: 10px;
++}
++.theme-light .nivoSlider {
++	position:relative;
++	background:#fff url(loading.gif) no-repeat 50% 50%;
++    margin-bottom:10px;
++    overflow: visible;
++}
++.theme-light .nivoSlider img {
++	position:absolute;
++	top:0px;
++	left:0px;
++	display:none;
++}
++.theme-light .nivoSlider a {
++	border:0;
++	display:block;
++}
++
++.theme-light .nivo-controlNav {
++	text-align: left;
++	padding: 0;
++	position: relative;
++	z-index: 10;
++}
++.theme-light .nivo-controlNav a {
++	display:inline-block;
++	width:10px;
++	height:10px;
++	background:url(bullets.png) no-repeat;
++	text-indent:-9999px;
++	border:0;
++	margin: 0 2px;
++}
++.theme-light .nivo-controlNav a.active {
++	background-position:0 100%;
++}
++
++.theme-light .nivo-directionNav a {
++	display:block;
++	width:30px;
++	height:30px;
++	background: url(arrows.png) no-repeat;
++	text-indent:-9999px;
++	border:0;
++	top: auto;
++	bottom: -36px;
++	z-index: 11;
++}
++.theme-light .nivo-directionNav a:hover {
++    background-color: #eee;
++    -webkit-border-radius: 2px;
++    -moz-border-radius: 2px;
++    border-radius: 2px;
++}
++.theme-light a.nivo-nextNav {
++	background-position:160% 50%;
++	right:0px;
++}
++.theme-light a.nivo-prevNav {
++    background-position:-60% 50%;
++    left: auto;
++	right: 35px;
++}
++
++.theme-light .nivo-caption {
++    font-family: Helvetica, Arial, sans-serif;
++}
++.theme-light .nivo-caption a {
++    color:#fff;
++    border-bottom:1px dotted #fff;
++}
++.theme-light .nivo-caption a:hover {
++    color:#fff;
++}
++
++.theme-light .nivo-controlNav.nivo-thumbs-enabled {
++	width: 80%;
++}
++.theme-light .nivo-controlNav.nivo-thumbs-enabled a {
++	width: auto;
++	height: auto;
++	background: none;
++	margin-bottom: 5px;
++}
++.theme-light .nivo-controlNav.nivo-thumbs-enabled img {
++	display: block;
++	width: 120px;
++	height: auto;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/style.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/style.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/style.css	(revision 15487)
+@@ -0,0 +1,90 @@
++/*=================================*/
++/* Nivo Slider Demo
++/* November 2010
++/* By: Gilbert Pellegrom
++/* http://dev7studios.com
++/*=================================*/
++
++/*====================*/
++/*=== Reset Styles ===*/
++/*====================*/
++html, body, div, span, applet, object, iframe,
++h1, h2, h3, h4, h5, h6, p, blockquote, pre,
++a, abbr, acronym, address, big, cite, code,
++del, dfn, em, font, img, ins, kbd, q, s, samp,
++small, strike, strong, sub, sup, tt, var,
++dl, dt, dd, ol, ul, li,
++fieldset, form, label, legend,
++table, caption, tbody, tfoot, thead, tr, th, td {
++	margin:0;
++	padding:0;
++	border:0;
++	outline:0;
++	font-weight:inherit;
++	font-style:inherit;
++	font-size:100%;
++	font-family:inherit;
++	vertical-align:baseline;
++}
++body {
++	line-height:1;
++	color:black;
++	background:white;
++}
++table {
++	border-collapse:separate;
++	border-spacing:0;
++}
++caption, th, td {
++	text-align:left;
++	font-weight:normal;
++}
++blockquote:before, blockquote:after,
++q:before, q:after {
++	content:"";
++}
++blockquote, q {
++	quotes:"" "";
++}
++/* HTML5 tags */
++header, section, footer,
++aside, nav, article, figure {
++	display: block;
++}
++
++/*===================*/
++/*=== Main Styles ===*/
++/*===================*/
++body {
++	background-image: -webkit-gradient(radial, right bottom, 0, right bottom, 1012, color-stop(0, #FFFFFF), color-stop(1, #658fd5));
++	background-image: -moz-linear-gradient(bottom right, #FFFFFF 0%, #658fd5 100%);
++}
++
++a:hover, a:active {
++	color:#000;
++	text-decoration:none;
++}
++
++#dev7link {
++    position:absolute;
++    top:0;
++    left:50px;
++    background:url(images/dev7logo.png) no-repeat;
++    width:60px;
++    height:67px;
++    border:0;
++    display:block;
++    text-indent:-9999px;
++}
++
++.slider-wrapper { 
++	width: 700px;
++	margin: 30px auto;
++}
++
++/*====================*/
++/*=== Other Styles ===*/
++/*====================*/
++.clear {
++	clear:both;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/README
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/README	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/README	(revision 15487)
+@@ -0,0 +1 @@
++Nivo Slider is "The Most Awesome jQuery Image Slider". See http://nivo.dev7studios.com for more info.
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.slider.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.slider.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.slider.js	(revision 15487)
+@@ -0,0 +1,672 @@
++/*!
++ * jQuery UI Slider 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/slider/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++// number of pages in a slider
++// (how many times can you page up/down to go through the whole range)
++var numPages = 5;
++
++$.widget( "ui.slider", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "slide",
++
++	options: {
++		animate: false,
++		distance: 0,
++		max: 100,
++		min: 0,
++		orientation: "horizontal",
++		range: false,
++		step: 1,
++		value: 0,
++		values: null,
++
++		// callbacks
++		change: null,
++		slide: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		this._keySliding = false;
++		this._mouseSliding = false;
++		this._animateOff = true;
++		this._handleIndex = null;
++		this._detectOrientation();
++		this._mouseInit();
++
++		this.element
++			.addClass( "ui-slider" +
++				" ui-slider-" + this.orientation +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all");
++
++		this._refresh();
++		this._setOption( "disabled", this.options.disabled );
++
++		this._animateOff = false;
++	},
++
++	_refresh: function() {
++		this._createRange();
++		this._createHandles();
++		this._setupEvents();
++		this._refreshValue();
++	},
++
++	_createHandles: function() {
++		var i, handleCount,
++			options = this.options,
++			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
++			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
++			handles = [];
++
++		handleCount = ( options.values && options.values.length ) || 1;
++
++		if ( existingHandles.length > handleCount ) {
++			existingHandles.slice( handleCount ).remove();
++			existingHandles = existingHandles.slice( 0, handleCount );
++		}
++
++		for ( i = existingHandles.length; i < handleCount; i++ ) {
++			handles.push( handle );
++		}
++
++		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
++
++		this.handle = this.handles.eq( 0 );
++
++		this.handles.each(function( i ) {
++			$( this ).data( "ui-slider-handle-index", i );
++		});
++	},
++
++	_createRange: function() {
++		var options = this.options,
++			classes = "";
++
++		if ( options.range ) {
++			if ( options.range === true ) {
++				if ( !options.values ) {
++					options.values = [ this._valueMin(), this._valueMin() ];
++				} else if ( options.values.length && options.values.length !== 2 ) {
++					options.values = [ options.values[0], options.values[0] ];
++				} else if ( $.isArray( options.values ) ) {
++					options.values = options.values.slice(0);
++				}
++			}
++
++			if ( !this.range || !this.range.length ) {
++				this.range = $( "<div></div>" )
++					.appendTo( this.element );
++
++				classes = "ui-slider-range" +
++				// note: this isn't the most fittingly semantic framework class for this element,
++				// but worked best visually with a variety of themes
++				" ui-widget-header ui-corner-all";
++			} else {
++				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
++					// Handle range switching from true to min/max
++					.css({
++						"left": "",
++						"bottom": ""
++					});
++			}
++
++			this.range.addClass( classes +
++				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
++		} else {
++			this.range = $([]);
++		}
++	},
++
++	_setupEvents: function() {
++		var elements = this.handles.add( this.range ).filter( "a" );
++		this._off( elements );
++		this._on( elements, this._handleEvents );
++		this._hoverable( elements );
++		this._focusable( elements );
++	},
++
++	_destroy: function() {
++		this.handles.remove();
++		this.range.remove();
++
++		this.element
++			.removeClass( "ui-slider" +
++				" ui-slider-horizontal" +
++				" ui-slider-vertical" +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" );
++
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function( event ) {
++		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
++			that = this,
++			o = this.options;
++
++		if ( o.disabled ) {
++			return false;
++		}
++
++		this.elementSize = {
++			width: this.element.outerWidth(),
++			height: this.element.outerHeight()
++		};
++		this.elementOffset = this.element.offset();
++
++		position = { x: event.pageX, y: event.pageY };
++		normValue = this._normValueFromMouse( position );
++		distance = this._valueMax() - this._valueMin() + 1;
++		this.handles.each(function( i ) {
++			var thisDistance = Math.abs( normValue - that.values(i) );
++			if (( distance > thisDistance ) ||
++				( distance === thisDistance &&
++					(i === that._lastChangedValue || that.values(i) === o.min ))) {
++				distance = thisDistance;
++				closestHandle = $( this );
++				index = i;
++			}
++		});
++
++		allowed = this._start( event, index );
++		if ( allowed === false ) {
++			return false;
++		}
++		this._mouseSliding = true;
++
++		this._handleIndex = index;
++
++		closestHandle
++			.addClass( "ui-state-active" )
++			.focus();
++
++		offset = closestHandle.offset();
++		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
++		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
++			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
++			top: event.pageY - offset.top -
++				( closestHandle.height() / 2 ) -
++				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
++				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
++				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
++		};
++
++		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
++			this._slide( event, index, normValue );
++		}
++		this._animateOff = true;
++		return true;
++	},
++
++	_mouseStart: function() {
++		return true;
++	},
++
++	_mouseDrag: function( event ) {
++		var position = { x: event.pageX, y: event.pageY },
++			normValue = this._normValueFromMouse( position );
++
++		this._slide( event, this._handleIndex, normValue );
++
++		return false;
++	},
++
++	_mouseStop: function( event ) {
++		this.handles.removeClass( "ui-state-active" );
++		this._mouseSliding = false;
++
++		this._stop( event, this._handleIndex );
++		this._change( event, this._handleIndex );
++
++		this._handleIndex = null;
++		this._clickOffset = null;
++		this._animateOff = false;
++
++		return false;
++	},
++
++	_detectOrientation: function() {
++		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
++	},
++
++	_normValueFromMouse: function( position ) {
++		var pixelTotal,
++			pixelMouse,
++			percentMouse,
++			valueTotal,
++			valueMouse;
++
++		if ( this.orientation === "horizontal" ) {
++			pixelTotal = this.elementSize.width;
++			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
++		} else {
++			pixelTotal = this.elementSize.height;
++			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
++		}
++
++		percentMouse = ( pixelMouse / pixelTotal );
++		if ( percentMouse > 1 ) {
++			percentMouse = 1;
++		}
++		if ( percentMouse < 0 ) {
++			percentMouse = 0;
++		}
++		if ( this.orientation === "vertical" ) {
++			percentMouse = 1 - percentMouse;
++		}
++
++		valueTotal = this._valueMax() - this._valueMin();
++		valueMouse = this._valueMin() + percentMouse * valueTotal;
++
++		return this._trimAlignValue( valueMouse );
++	},
++
++	_start: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++		return this._trigger( "start", event, uiHash );
++	},
++
++	_slide: function( event, index, newVal ) {
++		var otherVal,
++			newValues,
++			allowed;
++
++		if ( this.options.values && this.options.values.length ) {
++			otherVal = this.values( index ? 0 : 1 );
++
++			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
++					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
++				) {
++				newVal = otherVal;
++			}
++
++			if ( newVal !== this.values( index ) ) {
++				newValues = this.values();
++				newValues[ index ] = newVal;
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal,
++					values: newValues
++				} );
++				otherVal = this.values( index ? 0 : 1 );
++				if ( allowed !== false ) {
++					this.values( index, newVal, true );
++				}
++			}
++		} else {
++			if ( newVal !== this.value() ) {
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal
++				} );
++				if ( allowed !== false ) {
++					this.value( newVal );
++				}
++			}
++		}
++	},
++
++	_stop: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++
++		this._trigger( "stop", event, uiHash );
++	},
++
++	_change: function( event, index ) {
++		if ( !this._keySliding && !this._mouseSliding ) {
++			var uiHash = {
++				handle: this.handles[ index ],
++				value: this.value()
++			};
++			if ( this.options.values && this.options.values.length ) {
++				uiHash.value = this.values( index );
++				uiHash.values = this.values();
++			}
++
++			//store the last changed value index for reference when handles overlap
++			this._lastChangedValue = index;
++
++			this._trigger( "change", event, uiHash );
++		}
++	},
++
++	value: function( newValue ) {
++		if ( arguments.length ) {
++			this.options.value = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, 0 );
++			return;
++		}
++
++		return this._value();
++	},
++
++	values: function( index, newValue ) {
++		var vals,
++			newValues,
++			i;
++
++		if ( arguments.length > 1 ) {
++			this.options.values[ index ] = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, index );
++			return;
++		}
++
++		if ( arguments.length ) {
++			if ( $.isArray( arguments[ 0 ] ) ) {
++				vals = this.options.values;
++				newValues = arguments[ 0 ];
++				for ( i = 0; i < vals.length; i += 1 ) {
++					vals[ i ] = this._trimAlignValue( newValues[ i ] );
++					this._change( null, i );
++				}
++				this._refreshValue();
++			} else {
++				if ( this.options.values && this.options.values.length ) {
++					return this._values( index );
++				} else {
++					return this.value();
++				}
++			}
++		} else {
++			return this._values();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var i,
++			valsLength = 0;
++
++		if ( key === "range" && this.options.range === true ) {
++			if ( value === "min" ) {
++				this.options.value = this._values( 0 );
++				this.options.values = null;
++			} else if ( value === "max" ) {
++				this.options.value = this._values( this.options.values.length-1 );
++				this.options.values = null;
++			}
++		}
++
++		if ( $.isArray( this.options.values ) ) {
++			valsLength = this.options.values.length;
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++
++		switch ( key ) {
++			case "orientation":
++				this._detectOrientation();
++				this.element
++					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
++					.addClass( "ui-slider-" + this.orientation );
++				this._refreshValue();
++				break;
++			case "value":
++				this._animateOff = true;
++				this._refreshValue();
++				this._change( null, 0 );
++				this._animateOff = false;
++				break;
++			case "values":
++				this._animateOff = true;
++				this._refreshValue();
++				for ( i = 0; i < valsLength; i += 1 ) {
++					this._change( null, i );
++				}
++				this._animateOff = false;
++				break;
++			case "min":
++			case "max":
++				this._animateOff = true;
++				this._refreshValue();
++				this._animateOff = false;
++				break;
++			case "range":
++				this._animateOff = true;
++				this._refresh();
++				this._animateOff = false;
++				break;
++		}
++	},
++
++	//internal value getter
++	// _value() returns value trimmed by min and max, aligned by step
++	_value: function() {
++		var val = this.options.value;
++		val = this._trimAlignValue( val );
++
++		return val;
++	},
++
++	//internal values getter
++	// _values() returns array of values trimmed by min and max, aligned by step
++	// _values( index ) returns single value trimmed by min and max, aligned by step
++	_values: function( index ) {
++		var val,
++			vals,
++			i;
++
++		if ( arguments.length ) {
++			val = this.options.values[ index ];
++			val = this._trimAlignValue( val );
++
++			return val;
++		} else if ( this.options.values && this.options.values.length ) {
++			// .slice() creates a copy of the array
++			// this copy gets trimmed by min and max and then returned
++			vals = this.options.values.slice();
++			for ( i = 0; i < vals.length; i+= 1) {
++				vals[ i ] = this._trimAlignValue( vals[ i ] );
++			}
++
++			return vals;
++		} else {
++			return [];
++		}
++	},
++
++	// returns the step-aligned value that val is closest to, between (inclusive) min and max
++	_trimAlignValue: function( val ) {
++		if ( val <= this._valueMin() ) {
++			return this._valueMin();
++		}
++		if ( val >= this._valueMax() ) {
++			return this._valueMax();
++		}
++		var step = ( this.options.step > 0 ) ? this.options.step : 1,
++			valModStep = (val - this._valueMin()) % step,
++			alignValue = val - valModStep;
++
++		if ( Math.abs(valModStep) * 2 >= step ) {
++			alignValue += ( valModStep > 0 ) ? step : ( -step );
++		}
++
++		// Since JavaScript has problems with large floats, round
++		// the final value to 5 digits after the decimal point (see #4124)
++		return parseFloat( alignValue.toFixed(5) );
++	},
++
++	_valueMin: function() {
++		return this.options.min;
++	},
++
++	_valueMax: function() {
++		return this.options.max;
++	},
++
++	_refreshValue: function() {
++		var lastValPercent, valPercent, value, valueMin, valueMax,
++			oRange = this.options.range,
++			o = this.options,
++			that = this,
++			animate = ( !this._animateOff ) ? o.animate : false,
++			_set = {};
++
++		if ( this.options.values && this.options.values.length ) {
++			this.handles.each(function( i ) {
++				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
++				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++				if ( that.options.range === true ) {
++					if ( that.orientation === "horizontal" ) {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					} else {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					}
++				}
++				lastValPercent = valPercent;
++			});
++		} else {
++			value = this.value();
++			valueMin = this._valueMin();
++			valueMax = this._valueMax();
++			valPercent = ( valueMax !== valueMin ) ?
++					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
++					0;
++			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++
++			if ( oRange === "min" && this.orientation === "horizontal" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "horizontal" ) {
++				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++			if ( oRange === "min" && this.orientation === "vertical" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "vertical" ) {
++				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++		}
++	},
++
++	_handleEvents: {
++		keydown: function( event ) {
++			/*jshint maxcomplexity:25*/
++			var allowed, curVal, newVal, step,
++				index = $( event.target ).data( "ui-slider-handle-index" );
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++				case $.ui.keyCode.END:
++				case $.ui.keyCode.PAGE_UP:
++				case $.ui.keyCode.PAGE_DOWN:
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					event.preventDefault();
++					if ( !this._keySliding ) {
++						this._keySliding = true;
++						$( event.target ).addClass( "ui-state-active" );
++						allowed = this._start( event, index );
++						if ( allowed === false ) {
++							return;
++						}
++					}
++					break;
++			}
++
++			step = this.options.step;
++			if ( this.options.values && this.options.values.length ) {
++				curVal = newVal = this.values( index );
++			} else {
++				curVal = newVal = this.value();
++			}
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++					newVal = this._valueMin();
++					break;
++				case $.ui.keyCode.END:
++					newVal = this._valueMax();
++					break;
++				case $.ui.keyCode.PAGE_UP:
++					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.PAGE_DOWN:
++					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++					if ( curVal === this._valueMax() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal + step );
++					break;
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					if ( curVal === this._valueMin() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal - step );
++					break;
++			}
++
++			this._slide( event, index, newVal );
++		},
++		click: function( event ) {
++			event.preventDefault();
++		},
++		keyup: function( event ) {
++			var index = $( event.target ).data( "ui-slider-handle-index" );
++
++			if ( this._keySliding ) {
++				this._keySliding = false;
++				this._stop( event, index );
++				this._change( event, index );
++				$( event.target ).removeClass( "ui-state-active" );
++			}
++		}
++	}
++
++});
++
++}(jQuery));
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.widget.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.widget.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.widget.js	(revision 15487)
+@@ -0,0 +1,521 @@
++/*!
++ * jQuery UI Widget 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/jQuery.widget/
++ */
++(function( $, undefined ) {
++
++var uuid = 0,
++	slice = Array.prototype.slice,
++	_cleanData = $.cleanData;
++$.cleanData = function( elems ) {
++	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++		try {
++			$( elem ).triggerHandler( "remove" );
++		// http://bugs.jquery.com/ticket/8235
++		} catch( e ) {}
++	}
++	_cleanData( elems );
++};
++
++$.widget = function( name, base, prototype ) {
++	var fullName, existingConstructor, constructor, basePrototype,
++		// proxiedPrototype allows the provided prototype to remain unmodified
++		// so that it can be used as a mixin for multiple widgets (#8876)
++		proxiedPrototype = {},
++		namespace = name.split( "." )[ 0 ];
++
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
++		return !!$.data( elem, fullName );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	existingConstructor = $[ namespace ][ name ];
++	constructor = $[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without "new" keyword
++		if ( !this._createWidget ) {
++			return new constructor( options, element );
++		}
++
++		// allow instantiation without initializing for simple inheritance
++		// must use "new" keyword (the code above always passes args)
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++	// extend with the existing constructor to carry over any static properties
++	$.extend( constructor, existingConstructor, {
++		version: prototype.version,
++		// copy the object used to create the prototype in case we need to
++		// redefine the widget later
++		_proto: $.extend( {}, prototype ),
++		// track widgets that inherit from this widget in case this widget is
++		// redefined after a widget inherits from it
++		_childConstructors: []
++	});
++
++	basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++	basePrototype.options = $.widget.extend( {}, basePrototype.options );
++	$.each( prototype, function( prop, value ) {
++		if ( !$.isFunction( value ) ) {
++			proxiedPrototype[ prop ] = value;
++			return;
++		}
++		proxiedPrototype[ prop ] = (function() {
++			var _super = function() {
++					return base.prototype[ prop ].apply( this, arguments );
++				},
++				_superApply = function( args ) {
++					return base.prototype[ prop ].apply( this, args );
++				};
++			return function() {
++				var __super = this._super,
++					__superApply = this._superApply,
++					returnValue;
++
++				this._super = _super;
++				this._superApply = _superApply;
++
++				returnValue = value.apply( this, arguments );
++
++				this._super = __super;
++				this._superApply = __superApply;
++
++				return returnValue;
++			};
++		})();
++	});
++	constructor.prototype = $.widget.extend( basePrototype, {
++		// TODO: remove support for widgetEventPrefix
++		// always use the name + a colon as the prefix, e.g., draggable:start
++		// don't prefix for widgets that aren't DOM-based
++		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
++	}, proxiedPrototype, {
++		constructor: constructor,
++		namespace: namespace,
++		widgetName: name,
++		widgetFullName: fullName
++	});
++
++	// If this widget is being redefined then we need to find all widgets that
++	// are inheriting from it and redefine all of them so that they inherit from
++	// the new version of this widget. We're essentially trying to replace one
++	// level in the prototype chain.
++	if ( existingConstructor ) {
++		$.each( existingConstructor._childConstructors, function( i, child ) {
++			var childPrototype = child.prototype;
++
++			// redefine the child widget using the same prototype that was
++			// originally used, but inherit from the new version of the base
++			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
++		});
++		// remove the list of existing child constructors from the old constructor
++		// so the old child constructors can be garbage collected
++		delete existingConstructor._childConstructors;
++	} else {
++		base._childConstructors.push( constructor );
++	}
++
++	$.widget.bridge( name, constructor );
++};
++
++$.widget.extend = function( target ) {
++	var input = slice.call( arguments, 1 ),
++		inputIndex = 0,
++		inputLength = input.length,
++		key,
++		value;
++	for ( ; inputIndex < inputLength; inputIndex++ ) {
++		for ( key in input[ inputIndex ] ) {
++			value = input[ inputIndex ][ key ];
++			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
++				// Clone objects
++				if ( $.isPlainObject( value ) ) {
++					target[ key ] = $.isPlainObject( target[ key ] ) ?
++						$.widget.extend( {}, target[ key ], value ) :
++						// Don't extend strings, arrays, etc. with objects
++						$.widget.extend( {}, value );
++				// Copy everything else by reference
++				} else {
++					target[ key ] = value;
++				}
++			}
++		}
++	}
++	return target;
++};
++
++$.widget.bridge = function( name, object ) {
++	var fullName = object.prototype.widgetFullName || name;
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.widget.extend.apply( null, [ options ].concat(args) ) :
++			options;
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var methodValue,
++					instance = $.data( this, fullName );
++				if ( !instance ) {
++					return $.error( "cannot call methods on " + name + " prior to initialization; " +
++						"attempted to call method '" + options + "'" );
++				}
++				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
++					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
++				}
++				methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue && methodValue.jquery ?
++						returnValue.pushStack( methodValue.get() ) :
++						methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, fullName );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					$.data( this, fullName, new object( options, this ) );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( /* options, element */ ) {};
++$.Widget._childConstructors = [];
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	defaultElement: "<div>",
++	options: {
++		disabled: false,
++
++		// callbacks
++		create: null
++	},
++	_createWidget: function( options, element ) {
++		element = $( element || this.defaultElement || this )[ 0 ];
++		this.element = $( element );
++		this.uuid = uuid++;
++		this.eventNamespace = "." + this.widgetName + this.uuid;
++		this.options = $.widget.extend( {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		this.bindings = $();
++		this.hoverable = $();
++		this.focusable = $();
++
++		if ( element !== this ) {
++			$.data( element, this.widgetFullName, this );
++			this._on( true, this.element, {
++				remove: function( event ) {
++					if ( event.target === element ) {
++						this.destroy();
++					}
++				}
++			});
++			this.document = $( element.style ?
++				// element within the document
++				element.ownerDocument :
++				// element is window or document
++				element.document || element );
++			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
++		}
++
++		this._create();
++		this._trigger( "create", null, this._getCreateEventData() );
++		this._init();
++	},
++	_getCreateOptions: $.noop,
++	_getCreateEventData: $.noop,
++	_create: $.noop,
++	_init: $.noop,
++
++	destroy: function() {
++		this._destroy();
++		// we can probably remove the unbind calls in 2.0
++		// all event bindings should go through this._on()
++		this.element
++			.unbind( this.eventNamespace )
++			// 1.9 BC for #7810
++			// TODO remove dual storage
++			.removeData( this.widgetName )
++			.removeData( this.widgetFullName )
++			// support: jquery <1.6.3
++			// http://bugs.jquery.com/ticket/9413
++			.removeData( $.camelCase( this.widgetFullName ) );
++		this.widget()
++			.unbind( this.eventNamespace )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetFullName + "-disabled " +
++				"ui-state-disabled" );
++
++		// clean up events and states
++		this.bindings.unbind( this.eventNamespace );
++		this.hoverable.removeClass( "ui-state-hover" );
++		this.focusable.removeClass( "ui-state-focus" );
++	},
++	_destroy: $.noop,
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key,
++			parts,
++			curOption,
++			i;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.widget.extend( {}, this.options );
++		}
++
++		if ( typeof key === "string" ) {
++			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
++			options = {};
++			parts = key.split( "." );
++			key = parts.shift();
++			if ( parts.length ) {
++				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
++				for ( i = 0; i < parts.length - 1; i++ ) {
++					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
++					curOption = curOption[ parts[ i ] ];
++				}
++				key = parts.pop();
++				if ( value === undefined ) {
++					return curOption[ key ] === undefined ? null : curOption[ key ];
++				}
++				curOption[ key ] = value;
++			} else {
++				if ( value === undefined ) {
++					return this.options[ key ] === undefined ? null : this.options[ key ];
++				}
++				options[ key ] = value;
++			}
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var key;
++
++		for ( key in options ) {
++			this._setOption( key, options[ key ] );
++		}
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
++				.attr( "aria-disabled", value );
++			this.hoverable.removeClass( "ui-state-hover" );
++			this.focusable.removeClass( "ui-state-focus" );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_on: function( suppressDisabledCheck, element, handlers ) {
++		var delegateElement,
++			instance = this;
++
++		// no suppressDisabledCheck flag, shuffle arguments
++		if ( typeof suppressDisabledCheck !== "boolean" ) {
++			handlers = element;
++			element = suppressDisabledCheck;
++			suppressDisabledCheck = false;
++		}
++
++		// no element argument, shuffle and use this.element
++		if ( !handlers ) {
++			handlers = element;
++			element = this.element;
++			delegateElement = this.widget();
++		} else {
++			// accept selectors, DOM elements
++			element = delegateElement = $( element );
++			this.bindings = this.bindings.add( element );
++		}
++
++		$.each( handlers, function( event, handler ) {
++			function handlerProxy() {
++				// allow widgets to customize the disabled handling
++				// - disabled as an array instead of boolean
++				// - disabled class as method for disabling individual parts
++				if ( !suppressDisabledCheck &&
++						( instance.options.disabled === true ||
++							$( this ).hasClass( "ui-state-disabled" ) ) ) {
++					return;
++				}
++				return ( typeof handler === "string" ? instance[ handler ] : handler )
++					.apply( instance, arguments );
++			}
++
++			// copy the guid so direct unbinding works
++			if ( typeof handler !== "string" ) {
++				handlerProxy.guid = handler.guid =
++					handler.guid || handlerProxy.guid || $.guid++;
++			}
++
++			var match = event.match( /^(\w+)\s*(.*)$/ ),
++				eventName = match[1] + instance.eventNamespace,
++				selector = match[2];
++			if ( selector ) {
++				delegateElement.delegate( selector, eventName, handlerProxy );
++			} else {
++				element.bind( eventName, handlerProxy );
++			}
++		});
++	},
++
++	_off: function( element, eventName ) {
++		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
++		element.unbind( eventName ).undelegate( eventName );
++	},
++
++	_delay: function( handler, delay ) {
++		function handlerProxy() {
++			return ( typeof handler === "string" ? instance[ handler ] : handler )
++				.apply( instance, arguments );
++		}
++		var instance = this;
++		return setTimeout( handlerProxy, delay || 0 );
++	},
++
++	_hoverable: function( element ) {
++		this.hoverable = this.hoverable.add( element );
++		this._on( element, {
++			mouseenter: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-hover" );
++			},
++			mouseleave: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-hover" );
++			}
++		});
++	},
++
++	_focusable: function( element ) {
++		this.focusable = this.focusable.add( element );
++		this._on( element, {
++			focusin: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-focus" );
++			},
++			focusout: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-focus" );
++			}
++		});
++	},
++
++	_trigger: function( type, event, data ) {
++		var prop, orig,
++			callback = this.options[ type ];
++
++		data = data || {};
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		// the original event may come from any element
++		// so we need to reset the target on the new event
++		event.target = this.element[ 0 ];
++
++		// copy original event properties over to the new event
++		orig = event.originalEvent;
++		if ( orig ) {
++			for ( prop in orig ) {
++				if ( !( prop in event ) ) {
++					event[ prop ] = orig[ prop ];
++				}
++			}
++		}
++
++		this.element.trigger( event, data );
++		return !( $.isFunction( callback ) &&
++			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
++	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
++		if ( typeof options === "string" ) {
++			options = { effect: options };
++		}
++		var hasOptions,
++			effectName = !options ?
++				method :
++				options === true || typeof options === "number" ?
++					defaultEffect :
++					options.effect || defaultEffect;
++		options = options || {};
++		if ( typeof options === "number" ) {
++			options = { duration: options };
++		}
++		hasOptions = !$.isEmptyObject( options );
++		options.complete = callback;
++		if ( options.delay ) {
++			element.delay( options.delay );
++		}
++		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
++			element[ method ]( options );
++		} else if ( effectName !== method && element[ effectName ] ) {
++			element[ effectName ]( options.duration, options.easing, callback );
++		} else {
++			element.queue(function( next ) {
++				$( this )[ method ]();
++				if ( callback ) {
++					callback.call( element[ 0 ] );
++				}
++				next();
++			});
++		}
++	};
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.js	(revision 15487)
+@@ -0,0 +1,14971 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++(function( $, undefined ) {
++
++var uuid = 0,
++	runiqueId = /^ui-id-\d+$/;
++
++// $.ui might exist from components with no dependencies, e.g., $.ui.position
++$.ui = $.ui || {};
++
++$.extend( $.ui, {
++	version: "1.10.3",
++
++	keyCode: {
++		BACKSPACE: 8,
++		COMMA: 188,
++		DELETE: 46,
++		DOWN: 40,
++		END: 35,
++		ENTER: 13,
++		ESCAPE: 27,
++		HOME: 36,
++		LEFT: 37,
++		NUMPAD_ADD: 107,
++		NUMPAD_DECIMAL: 110,
++		NUMPAD_DIVIDE: 111,
++		NUMPAD_ENTER: 108,
++		NUMPAD_MULTIPLY: 106,
++		NUMPAD_SUBTRACT: 109,
++		PAGE_DOWN: 34,
++		PAGE_UP: 33,
++		PERIOD: 190,
++		RIGHT: 39,
++		SPACE: 32,
++		TAB: 9,
++		UP: 38
++	}
++});
++
++// plugins
++$.fn.extend({
++	focus: (function( orig ) {
++		return function( delay, fn ) {
++			return typeof delay === "number" ?
++				this.each(function() {
++					var elem = this;
++					setTimeout(function() {
++						$( elem ).focus();
++						if ( fn ) {
++							fn.call( elem );
++						}
++					}, delay );
++				}) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.focus ),
++
++	scrollParent: function() {
++		var scrollParent;
++		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
++			scrollParent = this.parents().filter(function() {
++				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		} else {
++			scrollParent = this.parents().filter(function() {
++				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		}
++
++		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
++	},
++
++	zIndex: function( zIndex ) {
++		if ( zIndex !== undefined ) {
++			return this.css( "zIndex", zIndex );
++		}
++
++		if ( this.length ) {
++			var elem = $( this[ 0 ] ), position, value;
++			while ( elem.length && elem[ 0 ] !== document ) {
++				// Ignore z-index if position is set to a value where z-index is ignored by the browser
++				// This makes behavior of this function consistent across browsers
++				// WebKit always returns auto if the element is positioned
++				position = elem.css( "position" );
++				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
++					// IE returns 0 when zIndex is not specified
++					// other browsers return a string
++					// we ignore the case of nested elements with an explicit value of 0
++					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
++					value = parseInt( elem.css( "zIndex" ), 10 );
++					if ( !isNaN( value ) && value !== 0 ) {
++						return value;
++					}
++				}
++				elem = elem.parent();
++			}
++		}
++
++		return 0;
++	},
++
++	uniqueId: function() {
++		return this.each(function() {
++			if ( !this.id ) {
++				this.id = "ui-id-" + (++uuid);
++			}
++		});
++	},
++
++	removeUniqueId: function() {
++		return this.each(function() {
++			if ( runiqueId.test( this.id ) ) {
++				$( this ).removeAttr( "id" );
++			}
++		});
++	}
++});
++
++// selectors
++function focusable( element, isTabIndexNotNaN ) {
++	var map, mapName, img,
++		nodeName = element.nodeName.toLowerCase();
++	if ( "area" === nodeName ) {
++		map = element.parentNode;
++		mapName = map.name;
++		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
++			return false;
++		}
++		img = $( "img[usemap=#" + mapName + "]" )[0];
++		return !!img && visible( img );
++	}
++	return ( /input|select|textarea|button|object/.test( nodeName ) ?
++		!element.disabled :
++		"a" === nodeName ?
++			element.href || isTabIndexNotNaN :
++			isTabIndexNotNaN) &&
++		// the element and all of its ancestors must be visible
++		visible( element );
++}
++
++function visible( element ) {
++	return $.expr.filters.visible( element ) &&
++		!$( element ).parents().addBack().filter(function() {
++			return $.css( this, "visibility" ) === "hidden";
++		}).length;
++}
++
++$.extend( $.expr[ ":" ], {
++	data: $.expr.createPseudo ?
++		$.expr.createPseudo(function( dataName ) {
++			return function( elem ) {
++				return !!$.data( elem, dataName );
++			};
++		}) :
++		// support: jQuery <1.8
++		function( elem, i, match ) {
++			return !!$.data( elem, match[ 3 ] );
++		},
++
++	focusable: function( element ) {
++		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
++	},
++
++	tabbable: function( element ) {
++		var tabIndex = $.attr( element, "tabindex" ),
++			isTabIndexNaN = isNaN( tabIndex );
++		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
++	}
++});
++
++// support: jQuery <1.8
++if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
++	$.each( [ "Width", "Height" ], function( i, name ) {
++		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
++			type = name.toLowerCase(),
++			orig = {
++				innerWidth: $.fn.innerWidth,
++				innerHeight: $.fn.innerHeight,
++				outerWidth: $.fn.outerWidth,
++				outerHeight: $.fn.outerHeight
++			};
++
++		function reduce( elem, size, border, margin ) {
++			$.each( side, function() {
++				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
++				if ( border ) {
++					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
++				}
++				if ( margin ) {
++					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
++				}
++			});
++			return size;
++		}
++
++		$.fn[ "inner" + name ] = function( size ) {
++			if ( size === undefined ) {
++				return orig[ "inner" + name ].call( this );
++			}
++
++			return this.each(function() {
++				$( this ).css( type, reduce( this, size ) + "px" );
++			});
++		};
++
++		$.fn[ "outer" + name] = function( size, margin ) {
++			if ( typeof size !== "number" ) {
++				return orig[ "outer" + name ].call( this, size );
++			}
++
++			return this.each(function() {
++				$( this).css( type, reduce( this, size, true, margin ) + "px" );
++			});
++		};
++	});
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
++if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
++	$.fn.removeData = (function( removeData ) {
++		return function( key ) {
++			if ( arguments.length ) {
++				return removeData.call( this, $.camelCase( key ) );
++			} else {
++				return removeData.call( this );
++			}
++		};
++	})( $.fn.removeData );
++}
++
++
++
++
++
++// deprecated
++$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
++
++$.support.selectstart = "onselectstart" in document.createElement( "div" );
++$.fn.extend({
++	disableSelection: function() {
++		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
++			".ui-disableSelection", function( event ) {
++				event.preventDefault();
++			});
++	},
++
++	enableSelection: function() {
++		return this.unbind( ".ui-disableSelection" );
++	}
++});
++
++$.extend( $.ui, {
++	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
++	plugin: {
++		add: function( module, option, set ) {
++			var i,
++				proto = $.ui[ module ].prototype;
++			for ( i in set ) {
++				proto.plugins[ i ] = proto.plugins[ i ] || [];
++				proto.plugins[ i ].push( [ option, set[ i ] ] );
++			}
++		},
++		call: function( instance, name, args ) {
++			var i,
++				set = instance.plugins[ name ];
++			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
++				return;
++			}
++
++			for ( i = 0; i < set.length; i++ ) {
++				if ( instance.options[ set[ i ][ 0 ] ] ) {
++					set[ i ][ 1 ].apply( instance.element, args );
++				}
++			}
++		}
++	},
++
++	// only used by resizable
++	hasScroll: function( el, a ) {
++
++		//If overflow is hidden, the element might have extra content, but the user wants to hide it
++		if ( $( el ).css( "overflow" ) === "hidden") {
++			return false;
++		}
++
++		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
++			has = false;
++
++		if ( el[ scroll ] > 0 ) {
++			return true;
++		}
++
++		// TODO: determine which cases actually cause this to happen
++		// if the element doesn't have the scroll set, see if it's possible to
++		// set the scroll
++		el[ scroll ] = 1;
++		has = ( el[ scroll ] > 0 );
++		el[ scroll ] = 0;
++		return has;
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++var uuid = 0,
++	slice = Array.prototype.slice,
++	_cleanData = $.cleanData;
++$.cleanData = function( elems ) {
++	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++		try {
++			$( elem ).triggerHandler( "remove" );
++		// http://bugs.jquery.com/ticket/8235
++		} catch( e ) {}
++	}
++	_cleanData( elems );
++};
++
++$.widget = function( name, base, prototype ) {
++	var fullName, existingConstructor, constructor, basePrototype,
++		// proxiedPrototype allows the provided prototype to remain unmodified
++		// so that it can be used as a mixin for multiple widgets (#8876)
++		proxiedPrototype = {},
++		namespace = name.split( "." )[ 0 ];
++
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
++		return !!$.data( elem, fullName );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	existingConstructor = $[ namespace ][ name ];
++	constructor = $[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without "new" keyword
++		if ( !this._createWidget ) {
++			return new constructor( options, element );
++		}
++
++		// allow instantiation without initializing for simple inheritance
++		// must use "new" keyword (the code above always passes args)
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++	// extend with the existing constructor to carry over any static properties
++	$.extend( constructor, existingConstructor, {
++		version: prototype.version,
++		// copy the object used to create the prototype in case we need to
++		// redefine the widget later
++		_proto: $.extend( {}, prototype ),
++		// track widgets that inherit from this widget in case this widget is
++		// redefined after a widget inherits from it
++		_childConstructors: []
++	});
++
++	basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++	basePrototype.options = $.widget.extend( {}, basePrototype.options );
++	$.each( prototype, function( prop, value ) {
++		if ( !$.isFunction( value ) ) {
++			proxiedPrototype[ prop ] = value;
++			return;
++		}
++		proxiedPrototype[ prop ] = (function() {
++			var _super = function() {
++					return base.prototype[ prop ].apply( this, arguments );
++				},
++				_superApply = function( args ) {
++					return base.prototype[ prop ].apply( this, args );
++				};
++			return function() {
++				var __super = this._super,
++					__superApply = this._superApply,
++					returnValue;
++
++				this._super = _super;
++				this._superApply = _superApply;
++
++				returnValue = value.apply( this, arguments );
++
++				this._super = __super;
++				this._superApply = __superApply;
++
++				return returnValue;
++			};
++		})();
++	});
++	constructor.prototype = $.widget.extend( basePrototype, {
++		// TODO: remove support for widgetEventPrefix
++		// always use the name + a colon as the prefix, e.g., draggable:start
++		// don't prefix for widgets that aren't DOM-based
++		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
++	}, proxiedPrototype, {
++		constructor: constructor,
++		namespace: namespace,
++		widgetName: name,
++		widgetFullName: fullName
++	});
++
++	// If this widget is being redefined then we need to find all widgets that
++	// are inheriting from it and redefine all of them so that they inherit from
++	// the new version of this widget. We're essentially trying to replace one
++	// level in the prototype chain.
++	if ( existingConstructor ) {
++		$.each( existingConstructor._childConstructors, function( i, child ) {
++			var childPrototype = child.prototype;
++
++			// redefine the child widget using the same prototype that was
++			// originally used, but inherit from the new version of the base
++			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
++		});
++		// remove the list of existing child constructors from the old constructor
++		// so the old child constructors can be garbage collected
++		delete existingConstructor._childConstructors;
++	} else {
++		base._childConstructors.push( constructor );
++	}
++
++	$.widget.bridge( name, constructor );
++};
++
++$.widget.extend = function( target ) {
++	var input = slice.call( arguments, 1 ),
++		inputIndex = 0,
++		inputLength = input.length,
++		key,
++		value;
++	for ( ; inputIndex < inputLength; inputIndex++ ) {
++		for ( key in input[ inputIndex ] ) {
++			value = input[ inputIndex ][ key ];
++			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
++				// Clone objects
++				if ( $.isPlainObject( value ) ) {
++					target[ key ] = $.isPlainObject( target[ key ] ) ?
++						$.widget.extend( {}, target[ key ], value ) :
++						// Don't extend strings, arrays, etc. with objects
++						$.widget.extend( {}, value );
++				// Copy everything else by reference
++				} else {
++					target[ key ] = value;
++				}
++			}
++		}
++	}
++	return target;
++};
++
++$.widget.bridge = function( name, object ) {
++	var fullName = object.prototype.widgetFullName || name;
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.widget.extend.apply( null, [ options ].concat(args) ) :
++			options;
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var methodValue,
++					instance = $.data( this, fullName );
++				if ( !instance ) {
++					return $.error( "cannot call methods on " + name + " prior to initialization; " +
++						"attempted to call method '" + options + "'" );
++				}
++				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
++					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
++				}
++				methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue && methodValue.jquery ?
++						returnValue.pushStack( methodValue.get() ) :
++						methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, fullName );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					$.data( this, fullName, new object( options, this ) );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( /* options, element */ ) {};
++$.Widget._childConstructors = [];
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	defaultElement: "<div>",
++	options: {
++		disabled: false,
++
++		// callbacks
++		create: null
++	},
++	_createWidget: function( options, element ) {
++		element = $( element || this.defaultElement || this )[ 0 ];
++		this.element = $( element );
++		this.uuid = uuid++;
++		this.eventNamespace = "." + this.widgetName + this.uuid;
++		this.options = $.widget.extend( {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		this.bindings = $();
++		this.hoverable = $();
++		this.focusable = $();
++
++		if ( element !== this ) {
++			$.data( element, this.widgetFullName, this );
++			this._on( true, this.element, {
++				remove: function( event ) {
++					if ( event.target === element ) {
++						this.destroy();
++					}
++				}
++			});
++			this.document = $( element.style ?
++				// element within the document
++				element.ownerDocument :
++				// element is window or document
++				element.document || element );
++			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
++		}
++
++		this._create();
++		this._trigger( "create", null, this._getCreateEventData() );
++		this._init();
++	},
++	_getCreateOptions: $.noop,
++	_getCreateEventData: $.noop,
++	_create: $.noop,
++	_init: $.noop,
++
++	destroy: function() {
++		this._destroy();
++		// we can probably remove the unbind calls in 2.0
++		// all event bindings should go through this._on()
++		this.element
++			.unbind( this.eventNamespace )
++			// 1.9 BC for #7810
++			// TODO remove dual storage
++			.removeData( this.widgetName )
++			.removeData( this.widgetFullName )
++			// support: jquery <1.6.3
++			// http://bugs.jquery.com/ticket/9413
++			.removeData( $.camelCase( this.widgetFullName ) );
++		this.widget()
++			.unbind( this.eventNamespace )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetFullName + "-disabled " +
++				"ui-state-disabled" );
++
++		// clean up events and states
++		this.bindings.unbind( this.eventNamespace );
++		this.hoverable.removeClass( "ui-state-hover" );
++		this.focusable.removeClass( "ui-state-focus" );
++	},
++	_destroy: $.noop,
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key,
++			parts,
++			curOption,
++			i;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.widget.extend( {}, this.options );
++		}
++
++		if ( typeof key === "string" ) {
++			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
++			options = {};
++			parts = key.split( "." );
++			key = parts.shift();
++			if ( parts.length ) {
++				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
++				for ( i = 0; i < parts.length - 1; i++ ) {
++					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
++					curOption = curOption[ parts[ i ] ];
++				}
++				key = parts.pop();
++				if ( value === undefined ) {
++					return curOption[ key ] === undefined ? null : curOption[ key ];
++				}
++				curOption[ key ] = value;
++			} else {
++				if ( value === undefined ) {
++					return this.options[ key ] === undefined ? null : this.options[ key ];
++				}
++				options[ key ] = value;
++			}
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var key;
++
++		for ( key in options ) {
++			this._setOption( key, options[ key ] );
++		}
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
++				.attr( "aria-disabled", value );
++			this.hoverable.removeClass( "ui-state-hover" );
++			this.focusable.removeClass( "ui-state-focus" );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_on: function( suppressDisabledCheck, element, handlers ) {
++		var delegateElement,
++			instance = this;
++
++		// no suppressDisabledCheck flag, shuffle arguments
++		if ( typeof suppressDisabledCheck !== "boolean" ) {
++			handlers = element;
++			element = suppressDisabledCheck;
++			suppressDisabledCheck = false;
++		}
++
++		// no element argument, shuffle and use this.element
++		if ( !handlers ) {
++			handlers = element;
++			element = this.element;
++			delegateElement = this.widget();
++		} else {
++			// accept selectors, DOM elements
++			element = delegateElement = $( element );
++			this.bindings = this.bindings.add( element );
++		}
++
++		$.each( handlers, function( event, handler ) {
++			function handlerProxy() {
++				// allow widgets to customize the disabled handling
++				// - disabled as an array instead of boolean
++				// - disabled class as method for disabling individual parts
++				if ( !suppressDisabledCheck &&
++						( instance.options.disabled === true ||
++							$( this ).hasClass( "ui-state-disabled" ) ) ) {
++					return;
++				}
++				return ( typeof handler === "string" ? instance[ handler ] : handler )
++					.apply( instance, arguments );
++			}
++
++			// copy the guid so direct unbinding works
++			if ( typeof handler !== "string" ) {
++				handlerProxy.guid = handler.guid =
++					handler.guid || handlerProxy.guid || $.guid++;
++			}
++
++			var match = event.match( /^(\w+)\s*(.*)$/ ),
++				eventName = match[1] + instance.eventNamespace,
++				selector = match[2];
++			if ( selector ) {
++				delegateElement.delegate( selector, eventName, handlerProxy );
++			} else {
++				element.bind( eventName, handlerProxy );
++			}
++		});
++	},
++
++	_off: function( element, eventName ) {
++		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
++		element.unbind( eventName ).undelegate( eventName );
++	},
++
++	_delay: function( handler, delay ) {
++		function handlerProxy() {
++			return ( typeof handler === "string" ? instance[ handler ] : handler )
++				.apply( instance, arguments );
++		}
++		var instance = this;
++		return setTimeout( handlerProxy, delay || 0 );
++	},
++
++	_hoverable: function( element ) {
++		this.hoverable = this.hoverable.add( element );
++		this._on( element, {
++			mouseenter: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-hover" );
++			},
++			mouseleave: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-hover" );
++			}
++		});
++	},
++
++	_focusable: function( element ) {
++		this.focusable = this.focusable.add( element );
++		this._on( element, {
++			focusin: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-focus" );
++			},
++			focusout: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-focus" );
++			}
++		});
++	},
++
++	_trigger: function( type, event, data ) {
++		var prop, orig,
++			callback = this.options[ type ];
++
++		data = data || {};
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		// the original event may come from any element
++		// so we need to reset the target on the new event
++		event.target = this.element[ 0 ];
++
++		// copy original event properties over to the new event
++		orig = event.originalEvent;
++		if ( orig ) {
++			for ( prop in orig ) {
++				if ( !( prop in event ) ) {
++					event[ prop ] = orig[ prop ];
++				}
++			}
++		}
++
++		this.element.trigger( event, data );
++		return !( $.isFunction( callback ) &&
++			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
++	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
++		if ( typeof options === "string" ) {
++			options = { effect: options };
++		}
++		var hasOptions,
++			effectName = !options ?
++				method :
++				options === true || typeof options === "number" ?
++					defaultEffect :
++					options.effect || defaultEffect;
++		options = options || {};
++		if ( typeof options === "number" ) {
++			options = { duration: options };
++		}
++		hasOptions = !$.isEmptyObject( options );
++		options.complete = callback;
++		if ( options.delay ) {
++			element.delay( options.delay );
++		}
++		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
++			element[ method ]( options );
++		} else if ( effectName !== method && element[ effectName ] ) {
++			element[ effectName ]( options.duration, options.easing, callback );
++		} else {
++			element.queue(function( next ) {
++				$( this )[ method ]();
++				if ( callback ) {
++					callback.call( element[ 0 ] );
++				}
++				next();
++			});
++		}
++	};
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++var mouseHandled = false;
++$( document ).mouseup( function() {
++	mouseHandled = false;
++});
++
++$.widget("ui.mouse", {
++	version: "1.10.3",
++	options: {
++		cancel: "input,textarea,button,select,option",
++		distance: 1,
++		delay: 0
++	},
++	_mouseInit: function() {
++		var that = this;
++
++		this.element
++			.bind("mousedown."+this.widgetName, function(event) {
++				return that._mouseDown(event);
++			})
++			.bind("click."+this.widgetName, function(event) {
++				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
++					$.removeData(event.target, that.widgetName + ".preventClickEvent");
++					event.stopImmediatePropagation();
++					return false;
++				}
++			});
++
++		this.started = false;
++	},
++
++	// TODO: make sure destroying one instance of mouse doesn't mess with
++	// other instances of mouse
++	_mouseDestroy: function() {
++		this.element.unbind("."+this.widgetName);
++		if ( this._mouseMoveDelegate ) {
++			$(document)
++				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++		}
++	},
++
++	_mouseDown: function(event) {
++		// don't let more than one widget handle mouseStart
++		if( mouseHandled ) { return; }
++
++		// we may have missed mouseup (out of window)
++		(this._mouseStarted && this._mouseUp(event));
++
++		this._mouseDownEvent = event;
++
++		var that = this,
++			btnIsLeft = (event.which === 1),
++			// event.target.nodeName works around a bug in IE 8 with
++			// disabled inputs (#7620)
++			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
++		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
++			return true;
++		}
++
++		this.mouseDelayMet = !this.options.delay;
++		if (!this.mouseDelayMet) {
++			this._mouseDelayTimer = setTimeout(function() {
++				that.mouseDelayMet = true;
++			}, this.options.delay);
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted = (this._mouseStart(event) !== false);
++			if (!this._mouseStarted) {
++				event.preventDefault();
++				return true;
++			}
++		}
++
++		// Click event may never have fired (Gecko & Opera)
++		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
++			$.removeData(event.target, this.widgetName + ".preventClickEvent");
++		}
++
++		// these delegates are required to keep context
++		this._mouseMoveDelegate = function(event) {
++			return that._mouseMove(event);
++		};
++		this._mouseUpDelegate = function(event) {
++			return that._mouseUp(event);
++		};
++		$(document)
++			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		event.preventDefault();
++
++		mouseHandled = true;
++		return true;
++	},
++
++	_mouseMove: function(event) {
++		// IE mouseup check - mouseup happened when mouse was out of window
++		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
++			return this._mouseUp(event);
++		}
++
++		if (this._mouseStarted) {
++			this._mouseDrag(event);
++			return event.preventDefault();
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted =
++				(this._mouseStart(this._mouseDownEvent, event) !== false);
++			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
++		}
++
++		return !this._mouseStarted;
++	},
++
++	_mouseUp: function(event) {
++		$(document)
++			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		if (this._mouseStarted) {
++			this._mouseStarted = false;
++
++			if (event.target === this._mouseDownEvent.target) {
++				$.data(event.target, this.widgetName + ".preventClickEvent", true);
++			}
++
++			this._mouseStop(event);
++		}
++
++		return false;
++	},
++
++	_mouseDistanceMet: function(event) {
++		return (Math.max(
++				Math.abs(this._mouseDownEvent.pageX - event.pageX),
++				Math.abs(this._mouseDownEvent.pageY - event.pageY)
++			) >= this.options.distance
++		);
++	},
++
++	_mouseDelayMet: function(/* event */) {
++		return this.mouseDelayMet;
++	},
++
++	// These are placeholder methods, to be overriden by extending plugin
++	_mouseStart: function(/* event */) {},
++	_mouseDrag: function(/* event */) {},
++	_mouseStop: function(/* event */) {},
++	_mouseCapture: function(/* event */) { return true; }
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.ui = $.ui || {};
++
++var cachedScrollbarWidth,
++	max = Math.max,
++	abs = Math.abs,
++	round = Math.round,
++	rhorizontal = /left|center|right/,
++	rvertical = /top|center|bottom/,
++	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
++	rposition = /^\w+/,
++	rpercent = /%$/,
++	_position = $.fn.position;
++
++function getOffsets( offsets, width, height ) {
++	return [
++		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
++		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
++	];
++}
++
++function parseCss( element, property ) {
++	return parseInt( $.css( element, property ), 10 ) || 0;
++}
++
++function getDimensions( elem ) {
++	var raw = elem[0];
++	if ( raw.nodeType === 9 ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: 0, left: 0 }
++		};
++	}
++	if ( $.isWindow( raw ) ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
++		};
++	}
++	if ( raw.preventDefault ) {
++		return {
++			width: 0,
++			height: 0,
++			offset: { top: raw.pageY, left: raw.pageX }
++		};
++	}
++	return {
++		width: elem.outerWidth(),
++		height: elem.outerHeight(),
++		offset: elem.offset()
++	};
++}
++
++$.position = {
++	scrollbarWidth: function() {
++		if ( cachedScrollbarWidth !== undefined ) {
++			return cachedScrollbarWidth;
++		}
++		var w1, w2,
++			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
++			innerDiv = div.children()[0];
++
++		$( "body" ).append( div );
++		w1 = innerDiv.offsetWidth;
++		div.css( "overflow", "scroll" );
++
++		w2 = innerDiv.offsetWidth;
++
++		if ( w1 === w2 ) {
++			w2 = div[0].clientWidth;
++		}
++
++		div.remove();
++
++		return (cachedScrollbarWidth = w1 - w2);
++	},
++	getScrollInfo: function( within ) {
++		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
++			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
++			hasOverflowX = overflowX === "scroll" ||
++				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
++			hasOverflowY = overflowY === "scroll" ||
++				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
++		return {
++			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
++			height: hasOverflowX ? $.position.scrollbarWidth() : 0
++		};
++	},
++	getWithinInfo: function( element ) {
++		var withinElement = $( element || window ),
++			isWindow = $.isWindow( withinElement[0] );
++		return {
++			element: withinElement,
++			isWindow: isWindow,
++			offset: withinElement.offset() || { left: 0, top: 0 },
++			scrollLeft: withinElement.scrollLeft(),
++			scrollTop: withinElement.scrollTop(),
++			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
++			height: isWindow ? withinElement.height() : withinElement.outerHeight()
++		};
++	}
++};
++
++$.fn.position = function( options ) {
++	if ( !options || !options.of ) {
++		return _position.apply( this, arguments );
++	}
++
++	// make a copy, we don't want to modify arguments
++	options = $.extend( {}, options );
++
++	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
++		target = $( options.of ),
++		within = $.position.getWithinInfo( options.within ),
++		scrollInfo = $.position.getScrollInfo( within ),
++		collision = ( options.collision || "flip" ).split( " " ),
++		offsets = {};
++
++	dimensions = getDimensions( target );
++	if ( target[0].preventDefault ) {
++		// force left top to allow flipping
++		options.at = "left top";
++	}
++	targetWidth = dimensions.width;
++	targetHeight = dimensions.height;
++	targetOffset = dimensions.offset;
++	// clone to reuse original targetOffset later
++	basePosition = $.extend( {}, targetOffset );
++
++	// force my and at to have valid horizontal and vertical positions
++	// if a value is missing or invalid, it will be converted to center
++	$.each( [ "my", "at" ], function() {
++		var pos = ( options[ this ] || "" ).split( " " ),
++			horizontalOffset,
++			verticalOffset;
++
++		if ( pos.length === 1) {
++			pos = rhorizontal.test( pos[ 0 ] ) ?
++				pos.concat( [ "center" ] ) :
++				rvertical.test( pos[ 0 ] ) ?
++					[ "center" ].concat( pos ) :
++					[ "center", "center" ];
++		}
++		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
++		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
++
++		// calculate offsets
++		horizontalOffset = roffset.exec( pos[ 0 ] );
++		verticalOffset = roffset.exec( pos[ 1 ] );
++		offsets[ this ] = [
++			horizontalOffset ? horizontalOffset[ 0 ] : 0,
++			verticalOffset ? verticalOffset[ 0 ] : 0
++		];
++
++		// reduce to just the positions without the offsets
++		options[ this ] = [
++			rposition.exec( pos[ 0 ] )[ 0 ],
++			rposition.exec( pos[ 1 ] )[ 0 ]
++		];
++	});
++
++	// normalize collision option
++	if ( collision.length === 1 ) {
++		collision[ 1 ] = collision[ 0 ];
++	}
++
++	if ( options.at[ 0 ] === "right" ) {
++		basePosition.left += targetWidth;
++	} else if ( options.at[ 0 ] === "center" ) {
++		basePosition.left += targetWidth / 2;
++	}
++
++	if ( options.at[ 1 ] === "bottom" ) {
++		basePosition.top += targetHeight;
++	} else if ( options.at[ 1 ] === "center" ) {
++		basePosition.top += targetHeight / 2;
++	}
++
++	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
++	basePosition.left += atOffset[ 0 ];
++	basePosition.top += atOffset[ 1 ];
++
++	return this.each(function() {
++		var collisionPosition, using,
++			elem = $( this ),
++			elemWidth = elem.outerWidth(),
++			elemHeight = elem.outerHeight(),
++			marginLeft = parseCss( this, "marginLeft" ),
++			marginTop = parseCss( this, "marginTop" ),
++			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
++			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
++			position = $.extend( {}, basePosition ),
++			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
++
++		if ( options.my[ 0 ] === "right" ) {
++			position.left -= elemWidth;
++		} else if ( options.my[ 0 ] === "center" ) {
++			position.left -= elemWidth / 2;
++		}
++
++		if ( options.my[ 1 ] === "bottom" ) {
++			position.top -= elemHeight;
++		} else if ( options.my[ 1 ] === "center" ) {
++			position.top -= elemHeight / 2;
++		}
++
++		position.left += myOffset[ 0 ];
++		position.top += myOffset[ 1 ];
++
++		// if the browser doesn't support fractions, then round for consistent results
++		if ( !$.support.offsetFractions ) {
++			position.left = round( position.left );
++			position.top = round( position.top );
++		}
++
++		collisionPosition = {
++			marginLeft: marginLeft,
++			marginTop: marginTop
++		};
++
++		$.each( [ "left", "top" ], function( i, dir ) {
++			if ( $.ui.position[ collision[ i ] ] ) {
++				$.ui.position[ collision[ i ] ][ dir ]( position, {
++					targetWidth: targetWidth,
++					targetHeight: targetHeight,
++					elemWidth: elemWidth,
++					elemHeight: elemHeight,
++					collisionPosition: collisionPosition,
++					collisionWidth: collisionWidth,
++					collisionHeight: collisionHeight,
++					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
++					my: options.my,
++					at: options.at,
++					within: within,
++					elem : elem
++				});
++			}
++		});
++
++		if ( options.using ) {
++			// adds feedback as second argument to using callback, if present
++			using = function( props ) {
++				var left = targetOffset.left - position.left,
++					right = left + targetWidth - elemWidth,
++					top = targetOffset.top - position.top,
++					bottom = top + targetHeight - elemHeight,
++					feedback = {
++						target: {
++							element: target,
++							left: targetOffset.left,
++							top: targetOffset.top,
++							width: targetWidth,
++							height: targetHeight
++						},
++						element: {
++							element: elem,
++							left: position.left,
++							top: position.top,
++							width: elemWidth,
++							height: elemHeight
++						},
++						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
++						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
++					};
++				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
++					feedback.horizontal = "center";
++				}
++				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
++					feedback.vertical = "middle";
++				}
++				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
++					feedback.important = "horizontal";
++				} else {
++					feedback.important = "vertical";
++				}
++				options.using.call( this, props, feedback );
++			};
++		}
++
++		elem.offset( $.extend( position, { using: using } ) );
++	});
++};
++
++$.ui.position = {
++	fit: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
++				outerWidth = within.width,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = withinOffset - collisionPosLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
++				newOverRight;
++
++			// element is wider than within
++			if ( data.collisionWidth > outerWidth ) {
++				// element is initially over the left side of within
++				if ( overLeft > 0 && overRight <= 0 ) {
++					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
++					position.left += overLeft - newOverRight;
++				// element is initially over right side of within
++				} else if ( overRight > 0 && overLeft <= 0 ) {
++					position.left = withinOffset;
++				// element is initially over both left and right sides of within
++				} else {
++					if ( overLeft > overRight ) {
++						position.left = withinOffset + outerWidth - data.collisionWidth;
++					} else {
++						position.left = withinOffset;
++					}
++				}
++			// too far left -> align with left edge
++			} else if ( overLeft > 0 ) {
++				position.left += overLeft;
++			// too far right -> align with right edge
++			} else if ( overRight > 0 ) {
++				position.left -= overRight;
++			// adjust based on position and margin
++			} else {
++				position.left = max( position.left - collisionPosLeft, position.left );
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
++				outerHeight = data.within.height,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = withinOffset - collisionPosTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
++				newOverBottom;
++
++			// element is taller than within
++			if ( data.collisionHeight > outerHeight ) {
++				// element is initially over the top of within
++				if ( overTop > 0 && overBottom <= 0 ) {
++					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
++					position.top += overTop - newOverBottom;
++				// element is initially over bottom of within
++				} else if ( overBottom > 0 && overTop <= 0 ) {
++					position.top = withinOffset;
++				// element is initially over both top and bottom of within
++				} else {
++					if ( overTop > overBottom ) {
++						position.top = withinOffset + outerHeight - data.collisionHeight;
++					} else {
++						position.top = withinOffset;
++					}
++				}
++			// too far up -> align with top
++			} else if ( overTop > 0 ) {
++				position.top += overTop;
++			// too far down -> align with bottom edge
++			} else if ( overBottom > 0 ) {
++				position.top -= overBottom;
++			// adjust based on position and margin
++			} else {
++				position.top = max( position.top - collisionPosTop, position.top );
++			}
++		}
++	},
++	flip: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.left + within.scrollLeft,
++				outerWidth = within.width,
++				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = collisionPosLeft - offsetLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
++				myOffset = data.my[ 0 ] === "left" ?
++					-data.elemWidth :
++					data.my[ 0 ] === "right" ?
++						data.elemWidth :
++						0,
++				atOffset = data.at[ 0 ] === "left" ?
++					data.targetWidth :
++					data.at[ 0 ] === "right" ?
++						-data.targetWidth :
++						0,
++				offset = -2 * data.offset[ 0 ],
++				newOverRight,
++				newOverLeft;
++
++			if ( overLeft < 0 ) {
++				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
++				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overRight > 0 ) {
++				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
++				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.top + within.scrollTop,
++				outerHeight = within.height,
++				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = collisionPosTop - offsetTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
++				top = data.my[ 1 ] === "top",
++				myOffset = top ?
++					-data.elemHeight :
++					data.my[ 1 ] === "bottom" ?
++						data.elemHeight :
++						0,
++				atOffset = data.at[ 1 ] === "top" ?
++					data.targetHeight :
++					data.at[ 1 ] === "bottom" ?
++						-data.targetHeight :
++						0,
++				offset = -2 * data.offset[ 1 ],
++				newOverTop,
++				newOverBottom;
++			if ( overTop < 0 ) {
++				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
++				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overBottom > 0 ) {
++				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
++				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++		}
++	},
++	flipfit: {
++		left: function() {
++			$.ui.position.flip.left.apply( this, arguments );
++			$.ui.position.fit.left.apply( this, arguments );
++		},
++		top: function() {
++			$.ui.position.flip.top.apply( this, arguments );
++			$.ui.position.fit.top.apply( this, arguments );
++		}
++	}
++};
++
++// fraction support test
++(function () {
++	var testElement, testElementParent, testElementStyle, offsetLeft, i,
++		body = document.getElementsByTagName( "body" )[ 0 ],
++		div = document.createElement( "div" );
++
++	//Create a "fake body" for testing based on method used in jQuery.support
++	testElement = document.createElement( body ? "div" : "body" );
++	testElementStyle = {
++		visibility: "hidden",
++		width: 0,
++		height: 0,
++		border: 0,
++		margin: 0,
++		background: "none"
++	};
++	if ( body ) {
++		$.extend( testElementStyle, {
++			position: "absolute",
++			left: "-1000px",
++			top: "-1000px"
++		});
++	}
++	for ( i in testElementStyle ) {
++		testElement.style[ i ] = testElementStyle[ i ];
++	}
++	testElement.appendChild( div );
++	testElementParent = body || document.documentElement;
++	testElementParent.insertBefore( testElement, testElementParent.firstChild );
++
++	div.style.cssText = "position: absolute; left: 10.7432222px;";
++
++	offsetLeft = $( div ).offset().left;
++	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
++
++	testElement.innerHTML = "";
++	testElementParent.removeChild( testElement );
++})();
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.widget("ui.draggable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "drag",
++	options: {
++		addClasses: true,
++		appendTo: "parent",
++		axis: false,
++		connectToSortable: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		iframeFix: false,
++		opacity: false,
++		refreshPositions: false,
++		revert: false,
++		revertDuration: 500,
++		scope: "default",
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		snap: false,
++		snapMode: "both",
++		snapTolerance: 20,
++		stack: false,
++		zIndex: false,
++
++		// callbacks
++		drag: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
++			this.element[0].style.position = "relative";
++		}
++		if (this.options.addClasses){
++			this.element.addClass("ui-draggable");
++		}
++		if (this.options.disabled){
++			this.element.addClass("ui-draggable-disabled");
++		}
++
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function(event) {
++
++		var o = this.options;
++
++		// among others, prevent a drag on a resizable-handle
++		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
++			return false;
++		}
++
++		//Quit if we're not on a valid handle
++		this.handle = this._getHandle(event);
++		if (!this.handle) {
++			return false;
++		}
++
++		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
++			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
++			.css({
++				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
++				position: "absolute", opacity: "0.001", zIndex: 1000
++			})
++			.css($(this).offset())
++			.appendTo("body");
++		});
++
++		return true;
++
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options;
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		this.helper.addClass("ui-draggable-dragging");
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		//If ddmanager is used for droppables, set the global draggable
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Store the helper's css position
++		this.cssPosition = this.helper.css( "position" );
++		this.scrollParent = this.helper.scrollParent();
++		this.offsetParent = this.helper.offsetParent();
++		this.offsetParentCssPosition = this.offsetParent.css( "position" );
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.positionAbs = this.element.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		//Reset scroll cache
++		this.offset.scroll = false;
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this.position = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Set a containment if given in the options
++		this._setContainment();
++
++		//Trigger event + callbacks
++		if(this._trigger("start", event) === false) {
++			this._clear();
++			return false;
++		}
++
++		//Recache the helper size
++		this._cacheHelperProportions();
++
++		//Prepare the droppable offsets
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++
++		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
++		if ( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStart(this, event);
++		}
++
++		return true;
++	},
++
++	_mouseDrag: function(event, noPropagation) {
++		// reset any necessary cached properties (see #5009)
++		if ( this.offsetParentCssPosition === "fixed" ) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Call plugins and callbacks and use the resulting position if something is returned
++		if (!noPropagation) {
++			var ui = this._uiHash();
++			if(this._trigger("drag", event, ui) === false) {
++				this._mouseUp({});
++				return false;
++			}
++			this.position = ui.position;
++		}
++
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		//If we are using droppables, inform the manager about the drop
++		var that = this,
++			dropped = false;
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			dropped = $.ui.ddmanager.drop(this, event);
++		}
++
++		//if a drop comes from outside (a sortable)
++		if(this.dropped) {
++			dropped = this.dropped;
++			this.dropped = false;
++		}
++
++		//if the original element is no longer in the DOM don't bother to continue (see #8269)
++		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
++			return false;
++		}
++
++		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
++			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
++				if(that._trigger("stop", event) !== false) {
++					that._clear();
++				}
++			});
++		} else {
++			if(this._trigger("stop", event) !== false) {
++				this._clear();
++			}
++		}
++
++		return false;
++	},
++
++	_mouseUp: function(event) {
++		//Remove frame helpers
++		$("div.ui-draggable-iframeFix").each(function() {
++			this.parentNode.removeChild(this);
++		});
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
++		if( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStop(this, event);
++		}
++
++		return $.ui.mouse.prototype._mouseUp.call(this, event);
++	},
++
++	cancel: function() {
++
++		if(this.helper.is(".ui-draggable-dragging")) {
++			this._mouseUp({});
++		} else {
++			this._clear();
++		}
++
++		return this;
++
++	},
++
++	_getHandle: function(event) {
++		return this.options.handle ?
++			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
++			true;
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
++
++		if(!helper.parents("body").length) {
++			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
++		}
++
++		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
++			helper.css("position", "absolute");
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++		//Get the offsetParent and cache its position
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		//This needs to be actually done for all browsers, since pageX/pageY includes this information
++		//Ugly IE fix
++		if((this.offsetParent[0] === document.body) ||
++			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.element.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.element.css("marginLeft"),10) || 0),
++			top: (parseInt(this.element.css("marginTop"),10) || 0),
++			right: (parseInt(this.element.css("marginRight"),10) || 0),
++			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var over, c, ce,
++			o = this.options;
++
++		if ( !o.containment ) {
++			this.containment = null;
++			return;
++		}
++
++		if ( o.containment === "window" ) {
++			this.containment = [
++				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
++				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
++				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
++				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment === "document") {
++			this.containment = [
++				0,
++				0,
++				$( document ).width() - this.helperProportions.width - this.margins.left,
++				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment.constructor === Array ) {
++			this.containment = o.containment;
++			return;
++		}
++
++		if ( o.containment === "parent" ) {
++			o.containment = this.helper[ 0 ].parentNode;
++		}
++
++		c = $( o.containment );
++		ce = c[ 0 ];
++
++		if( !ce ) {
++			return;
++		}
++
++		over = c.css( "overflow" ) !== "hidden";
++
++		this.containment = [
++			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
++			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
++			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
++			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
++		];
++		this.relative_container = c;
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var containment, co, top, left,
++			o = this.options,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
++			pageX = event.pageX,
++			pageY = event.pageY;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		// If we are not dragging yet, we won't check for options
++		if ( this.originalPosition ) {
++			if ( this.containment ) {
++				if ( this.relative_container ){
++					co = this.relative_container.offset();
++					containment = [
++						this.containment[ 0 ] + co.left,
++						this.containment[ 1 ] + co.top,
++						this.containment[ 2 ] + co.left,
++						this.containment[ 3 ] + co.top
++					];
++				}
++				else {
++					containment = this.containment;
++				}
++
++				if(event.pageX - this.offset.click.left < containment[0]) {
++					pageX = containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < containment[1]) {
++					pageY = containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > containment[2]) {
++					pageX = containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > containment[3]) {
++					pageY = containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
++				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
++				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
++				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																	// The absolute mouse position
++				this.offset.click.top	-												// Click offset (relative to the element)
++				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
++			),
++			left: (
++				pageX -																	// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
++			)
++		};
++
++	},
++
++	_clear: function() {
++		this.helper.removeClass("ui-draggable-dragging");
++		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
++			this.helper.remove();
++		}
++		this.helper = null;
++		this.cancelHelperRemoval = false;
++	},
++
++	// From now on bulk stuff - mainly helpers
++
++	_trigger: function(type, event, ui) {
++		ui = ui || this._uiHash();
++		$.ui.plugin.call(this, type, [event, ui]);
++		//The absolute position has to be recalculated after plugins
++		if(type === "drag") {
++			this.positionAbs = this._convertPositionTo("absolute");
++		}
++		return $.Widget.prototype._trigger.call(this, type, event, ui);
++	},
++
++	plugins: {},
++
++	_uiHash: function() {
++		return {
++			helper: this.helper,
++			position: this.position,
++			originalPosition: this.originalPosition,
++			offset: this.positionAbs
++		};
++	}
++
++});
++
++$.ui.plugin.add("draggable", "connectToSortable", {
++	start: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), o = inst.options,
++			uiSortable = $.extend({}, ui, { item: inst.element });
++		inst.sortables = [];
++		$(o.connectToSortable).each(function() {
++			var sortable = $.data(this, "ui-sortable");
++			if (sortable && !sortable.options.disabled) {
++				inst.sortables.push({
++					instance: sortable,
++					shouldRevert: sortable.options.revert
++				});
++				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
++				sortable._trigger("activate", event, uiSortable);
++			}
++		});
++
++	},
++	stop: function(event, ui) {
++
++		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
++		var inst = $(this).data("ui-draggable"),
++			uiSortable = $.extend({}, ui, { item: inst.element });
++
++		$.each(inst.sortables, function() {
++			if(this.instance.isOver) {
++
++				this.instance.isOver = 0;
++
++				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
++				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
++
++				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
++				if(this.shouldRevert) {
++					this.instance.options.revert = this.shouldRevert;
++				}
++
++				//Trigger the stop of the sortable
++				this.instance._mouseStop(event);
++
++				this.instance.options.helper = this.instance.options._helper;
++
++				//If the helper has been the original item, restore properties in the sortable
++				if(inst.options.helper === "original") {
++					this.instance.currentItem.css({ top: "auto", left: "auto" });
++				}
++
++			} else {
++				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
++				this.instance._trigger("deactivate", event, uiSortable);
++			}
++
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), that = this;
++
++		$.each(inst.sortables, function() {
++
++			var innermostIntersecting = false,
++				thisSortable = this;
++
++			//Copy over some variables to allow calling the sortable's native _intersectsWith
++			this.instance.positionAbs = inst.positionAbs;
++			this.instance.helperProportions = inst.helperProportions;
++			this.instance.offset.click = inst.offset.click;
++
++			if(this.instance._intersectsWith(this.instance.containerCache)) {
++				innermostIntersecting = true;
++				$.each(inst.sortables, function () {
++					this.instance.positionAbs = inst.positionAbs;
++					this.instance.helperProportions = inst.helperProportions;
++					this.instance.offset.click = inst.offset.click;
++					if (this !== thisSortable &&
++						this.instance._intersectsWith(this.instance.containerCache) &&
++						$.contains(thisSortable.instance.element[0], this.instance.element[0])
++					) {
++						innermostIntersecting = false;
++					}
++					return innermostIntersecting;
++				});
++			}
++
++
++			if(innermostIntersecting) {
++				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
++				if(!this.instance.isOver) {
++
++					this.instance.isOver = 1;
++					//Now we fake the start of dragging for the sortable instance,
++					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
++					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
++					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
++					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
++					this.instance.options.helper = function() { return ui.helper[0]; };
++
++					event.target = this.instance.currentItem[0];
++					this.instance._mouseCapture(event, true);
++					this.instance._mouseStart(event, true, true);
++
++					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
++					this.instance.offset.click.top = inst.offset.click.top;
++					this.instance.offset.click.left = inst.offset.click.left;
++					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
++					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
++
++					inst._trigger("toSortable", event);
++					inst.dropped = this.instance.element; //draggable revert needs that
++					//hack so receive/update callbacks work (mostly)
++					inst.currentItem = inst.element;
++					this.instance.fromOutside = inst;
++
++				}
++
++				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
++				if(this.instance.currentItem) {
++					this.instance._mouseDrag(event);
++				}
++
++			} else {
++
++				//If it doesn't intersect with the sortable, and it intersected before,
++				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
++				if(this.instance.isOver) {
++
++					this.instance.isOver = 0;
++					this.instance.cancelHelperRemoval = true;
++
++					//Prevent reverting on this forced stop
++					this.instance.options.revert = false;
++
++					// The out event needs to be triggered independently
++					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
++
++					this.instance._mouseStop(event, true);
++					this.instance.options.helper = this.instance.options._helper;
++
++					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
++					this.instance.currentItem.remove();
++					if(this.instance.placeholder) {
++						this.instance.placeholder.remove();
++					}
++
++					inst._trigger("fromSortable", event);
++					inst.dropped = false; //draggable revert needs that
++				}
++
++			}
++
++		});
++
++	}
++});
++
++$.ui.plugin.add("draggable", "cursor", {
++	start: function() {
++		var t = $("body"), o = $(this).data("ui-draggable").options;
++		if (t.css("cursor")) {
++			o._cursor = t.css("cursor");
++		}
++		t.css("cursor", o.cursor);
++	},
++	stop: function() {
++		var o = $(this).data("ui-draggable").options;
++		if (o._cursor) {
++			$("body").css("cursor", o._cursor);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "opacity", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("opacity")) {
++			o._opacity = t.css("opacity");
++		}
++		t.css("opacity", o.opacity);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._opacity) {
++			$(ui.helper).css("opacity", o._opacity);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "scroll", {
++	start: function() {
++		var i = $(this).data("ui-draggable");
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++			i.overflowOffset = i.scrollParent.offset();
++		}
++	},
++	drag: function( event ) {
++
++		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
++
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++
++			if(!o.axis || o.axis !== "x") {
++				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++			}
++
++		} else {
++
++			if(!o.axis || o.axis !== "x") {
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++			}
++
++		}
++
++		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(i, event);
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "snap", {
++	start: function() {
++
++		var i = $(this).data("ui-draggable"),
++			o = i.options;
++
++		i.snapElements = [];
++
++		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
++			var $t = $(this),
++				$o = $t.offset();
++			if(this !== i.element[0]) {
++				i.snapElements.push({
++					item: this,
++					width: $t.outerWidth(), height: $t.outerHeight(),
++					top: $o.top, left: $o.left
++				});
++			}
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var ts, bs, ls, rs, l, r, t, b, i, first,
++			inst = $(this).data("ui-draggable"),
++			o = inst.options,
++			d = o.snapTolerance,
++			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
++			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
++
++		for (i = inst.snapElements.length - 1; i >= 0; i--){
++
++			l = inst.snapElements[i].left;
++			r = l + inst.snapElements[i].width;
++			t = inst.snapElements[i].top;
++			b = t + inst.snapElements[i].height;
++
++			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
++				if(inst.snapElements[i].snapping) {
++					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++				}
++				inst.snapElements[i].snapping = false;
++				continue;
++			}
++
++			if(o.snapMode !== "inner") {
++				ts = Math.abs(t - y2) <= d;
++				bs = Math.abs(b - y1) <= d;
++				ls = Math.abs(l - x2) <= d;
++				rs = Math.abs(r - x1) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
++				}
++			}
++
++			first = (ts || bs || ls || rs);
++
++			if(o.snapMode !== "outer") {
++				ts = Math.abs(t - y1) <= d;
++				bs = Math.abs(b - y2) <= d;
++				ls = Math.abs(l - x1) <= d;
++				rs = Math.abs(r - x2) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
++				}
++			}
++
++			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
++				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++			}
++			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
++
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "stack", {
++	start: function() {
++		var min,
++			o = this.data("ui-draggable").options,
++			group = $.makeArray($(o.stack)).sort(function(a,b) {
++				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
++			});
++
++		if (!group.length) { return; }
++
++		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
++		$(group).each(function(i) {
++			$(this).css("zIndex", min + i);
++		});
++		this.css("zIndex", (min + group.length));
++	}
++});
++
++$.ui.plugin.add("draggable", "zIndex", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("zIndex")) {
++			o._zIndex = t.css("zIndex");
++		}
++		t.css("zIndex", o.zIndex);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._zIndex) {
++			$(ui.helper).css("zIndex", o._zIndex);
++		}
++	}
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++$.widget("ui.droppable", {
++	version: "1.10.3",
++	widgetEventPrefix: "drop",
++	options: {
++		accept: "*",
++		activeClass: false,
++		addClasses: true,
++		greedy: false,
++		hoverClass: false,
++		scope: "default",
++		tolerance: "intersect",
++
++		// callbacks
++		activate: null,
++		deactivate: null,
++		drop: null,
++		out: null,
++		over: null
++	},
++	_create: function() {
++
++		var o = this.options,
++			accept = o.accept;
++
++		this.isover = false;
++		this.isout = true;
++
++		this.accept = $.isFunction(accept) ? accept : function(d) {
++			return d.is(accept);
++		};
++
++		//Store the droppable's proportions
++		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
++
++		// Add the reference and positions to the manager
++		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
++		$.ui.ddmanager.droppables[o.scope].push(this);
++
++		(o.addClasses && this.element.addClass("ui-droppable"));
++
++	},
++
++	_destroy: function() {
++		var i = 0,
++			drop = $.ui.ddmanager.droppables[this.options.scope];
++
++		for ( ; i < drop.length; i++ ) {
++			if ( drop[i] === this ) {
++				drop.splice(i, 1);
++			}
++		}
++
++		this.element.removeClass("ui-droppable ui-droppable-disabled");
++	},
++
++	_setOption: function(key, value) {
++
++		if(key === "accept") {
++			this.accept = $.isFunction(value) ? value : function(d) {
++				return d.is(value);
++			};
++		}
++		$.Widget.prototype._setOption.apply(this, arguments);
++	},
++
++	_activate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.addClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("activate", event, this.ui(draggable));
++		}
++	},
++
++	_deactivate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.removeClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("deactivate", event, this.ui(draggable));
++		}
++	},
++
++	_over: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.addClass(this.options.hoverClass);
++			}
++			this._trigger("over", event, this.ui(draggable));
++		}
++
++	},
++
++	_out: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("out", event, this.ui(draggable));
++		}
++
++	},
++
++	_drop: function(event,custom) {
++
++		var draggable = custom || $.ui.ddmanager.current,
++			childrenIntersection = false;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return false;
++		}
++
++		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
++			var inst = $.data(this, "ui-droppable");
++			if(
++				inst.options.greedy &&
++				!inst.options.disabled &&
++				inst.options.scope === draggable.options.scope &&
++				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
++				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
++			) { childrenIntersection = true; return false; }
++		});
++		if(childrenIntersection) {
++			return false;
++		}
++
++		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.activeClass) {
++				this.element.removeClass(this.options.activeClass);
++			}
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("drop", event, this.ui(draggable));
++			return this.element;
++		}
++
++		return false;
++
++	},
++
++	ui: function(c) {
++		return {
++			draggable: (c.currentItem || c.element),
++			helper: c.helper,
++			position: c.position,
++			offset: c.positionAbs
++		};
++	}
++
++});
++
++$.ui.intersect = function(draggable, droppable, toleranceMode) {
++
++	if (!droppable.offset) {
++		return false;
++	}
++
++	var draggableLeft, draggableTop,
++		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
++		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
++		l = droppable.offset.left, r = l + droppable.proportions.width,
++		t = droppable.offset.top, b = t + droppable.proportions.height;
++
++	switch (toleranceMode) {
++		case "fit":
++			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
++		case "intersect":
++			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
++				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
++				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
++		case "pointer":
++			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
++			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
++			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
++		case "touch":
++			return (
++				(y1 >= t && y1 <= b) ||	// Top edge touching
++				(y2 >= t && y2 <= b) ||	// Bottom edge touching
++				(y1 < t && y2 > b)		// Surrounded vertically
++			) && (
++				(x1 >= l && x1 <= r) ||	// Left edge touching
++				(x2 >= l && x2 <= r) ||	// Right edge touching
++				(x1 < l && x2 > r)		// Surrounded horizontally
++			);
++		default:
++			return false;
++		}
++
++};
++
++/*
++	This manager tracks offsets of draggables and droppables
++*/
++$.ui.ddmanager = {
++	current: null,
++	droppables: { "default": [] },
++	prepareOffsets: function(t, event) {
++
++		var i, j,
++			m = $.ui.ddmanager.droppables[t.options.scope] || [],
++			type = event ? event.type : null, // workaround for #2317
++			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
++
++		droppablesLoop: for (i = 0; i < m.length; i++) {
++
++			//No disabled and non-accepted
++			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
++				continue;
++			}
++
++			// Filter out elements in the current dragged item
++			for (j=0; j < list.length; j++) {
++				if(list[j] === m[i].element[0]) {
++					m[i].proportions.height = 0;
++					continue droppablesLoop;
++				}
++			}
++
++			m[i].visible = m[i].element.css("display") !== "none";
++			if(!m[i].visible) {
++				continue;
++			}
++
++			//Activate the droppable if used directly from draggables
++			if(type === "mousedown") {
++				m[i]._activate.call(m[i], event);
++			}
++
++			m[i].offset = m[i].element.offset();
++			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
++
++		}
++
++	},
++	drop: function(draggable, event) {
++
++		var dropped = false;
++		// Create a copy of the droppables in case the list changes during the drop (#9116)
++		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
++
++			if(!this.options) {
++				return;
++			}
++			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
++				dropped = this._drop.call(this, event) || dropped;
++			}
++
++			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++				this.isout = true;
++				this.isover = false;
++				this._deactivate.call(this, event);
++			}
++
++		});
++		return dropped;
++
++	},
++	dragStart: function( draggable, event ) {
++		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
++		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
++			if( !draggable.options.refreshPositions ) {
++				$.ui.ddmanager.prepareOffsets( draggable, event );
++			}
++		});
++	},
++	drag: function(draggable, event) {
++
++		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
++		if(draggable.options.refreshPositions) {
++			$.ui.ddmanager.prepareOffsets(draggable, event);
++		}
++
++		//Run through all droppables and check their positions based on specific tolerance options
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(this.options.disabled || this.greedyChild || !this.visible) {
++				return;
++			}
++
++			var parentInstance, scope, parent,
++				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
++				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
++			if(!c) {
++				return;
++			}
++
++			if (this.options.greedy) {
++				// find droppable parents with same scope
++				scope = this.options.scope;
++				parent = this.element.parents(":data(ui-droppable)").filter(function () {
++					return $.data(this, "ui-droppable").options.scope === scope;
++				});
++
++				if (parent.length) {
++					parentInstance = $.data(parent[0], "ui-droppable");
++					parentInstance.greedyChild = (c === "isover");
++				}
++			}
++
++			// we just moved into a greedy child
++			if (parentInstance && c === "isover") {
++				parentInstance.isover = false;
++				parentInstance.isout = true;
++				parentInstance._out.call(parentInstance, event);
++			}
++
++			this[c] = true;
++			this[c === "isout" ? "isover" : "isout"] = false;
++			this[c === "isover" ? "_over" : "_out"].call(this, event);
++
++			// we just moved out of a greedy child
++			if (parentInstance && c === "isout") {
++				parentInstance.isout = false;
++				parentInstance.isover = true;
++				parentInstance._over.call(parentInstance, event);
++			}
++		});
++
++	},
++	dragStop: function( draggable, event ) {
++		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
++		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
++		if( !draggable.options.refreshPositions ) {
++			$.ui.ddmanager.prepareOffsets( draggable, event );
++		}
++	}
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++function num(v) {
++	return parseInt(v, 10) || 0;
++}
++
++function isNumber(value) {
++	return !isNaN(parseInt(value, 10));
++}
++
++$.widget("ui.resizable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "resize",
++	options: {
++		alsoResize: false,
++		animate: false,
++		animateDuration: "slow",
++		animateEasing: "swing",
++		aspectRatio: false,
++		autoHide: false,
++		containment: false,
++		ghost: false,
++		grid: false,
++		handles: "e,s,se",
++		helper: false,
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 10,
++		minWidth: 10,
++		// See #7960
++		zIndex: 90,
++
++		// callbacks
++		resize: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		var n, i, handle, axis, hname,
++			that = this,
++			o = this.options;
++		this.element.addClass("ui-resizable");
++
++		$.extend(this, {
++			_aspectRatio: !!(o.aspectRatio),
++			aspectRatio: o.aspectRatio,
++			originalElement: this.element,
++			_proportionallyResizeElements: [],
++			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
++		});
++
++		//Wrap the element if it cannot hold child nodes
++		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
++
++			//Create a wrapper element and set the wrapper to the new current internal element
++			this.element.wrap(
++				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
++					position: this.element.css("position"),
++					width: this.element.outerWidth(),
++					height: this.element.outerHeight(),
++					top: this.element.css("top"),
++					left: this.element.css("left")
++				})
++			);
++
++			//Overwrite the original this.element
++			this.element = this.element.parent().data(
++				"ui-resizable", this.element.data("ui-resizable")
++			);
++
++			this.elementIsWrapper = true;
++
++			//Move margins to the wrapper
++			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
++			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
++
++			//Prevent Safari textarea resize
++			this.originalResizeStyle = this.originalElement.css("resize");
++			this.originalElement.css("resize", "none");
++
++			//Push the actual element to our proportionallyResize internal array
++			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
++
++			// avoid IE jump (hard set the margin)
++			this.originalElement.css({ margin: this.originalElement.css("margin") });
++
++			// fix handlers offset
++			this._proportionallyResize();
++
++		}
++
++		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
++		if(this.handles.constructor === String) {
++
++			if ( this.handles === "all") {
++				this.handles = "n,e,s,w,se,sw,ne,nw";
++			}
++
++			n = this.handles.split(",");
++			this.handles = {};
++
++			for(i = 0; i < n.length; i++) {
++
++				handle = $.trim(n[i]);
++				hname = "ui-resizable-"+handle;
++				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
++
++				// Apply zIndex to all handles - see #7960
++				axis.css({ zIndex: o.zIndex });
++
++				//TODO : What's going on here?
++				if ("se" === handle) {
++					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
++				}
++
++				//Insert into internal handles object and append to element
++				this.handles[handle] = ".ui-resizable-"+handle;
++				this.element.append(axis);
++			}
++
++		}
++
++		this._renderAxis = function(target) {
++
++			var i, axis, padPos, padWrapper;
++
++			target = target || this.element;
++
++			for(i in this.handles) {
++
++				if(this.handles[i].constructor === String) {
++					this.handles[i] = $(this.handles[i], this.element).show();
++				}
++
++				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
++				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
++
++					axis = $(this.handles[i], this.element);
++
++					//Checking the correct pad and border
++					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
++
++					//The padding type i have to apply...
++					padPos = [ "padding",
++						/ne|nw|n/.test(i) ? "Top" :
++						/se|sw|s/.test(i) ? "Bottom" :
++						/^e$/.test(i) ? "Right" : "Left" ].join("");
++
++					target.css(padPos, padWrapper);
++
++					this._proportionallyResize();
++
++				}
++
++				//TODO: What's that good for? There's not anything to be executed left
++				if(!$(this.handles[i]).length) {
++					continue;
++				}
++			}
++		};
++
++		//TODO: make renderAxis a prototype function
++		this._renderAxis(this.element);
++
++		this._handles = $(".ui-resizable-handle", this.element)
++			.disableSelection();
++
++		//Matching axis name
++		this._handles.mouseover(function() {
++			if (!that.resizing) {
++				if (this.className) {
++					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
++				}
++				//Axis, default = se
++				that.axis = axis && axis[1] ? axis[1] : "se";
++			}
++		});
++
++		//If we want to auto hide the elements
++		if (o.autoHide) {
++			this._handles.hide();
++			$(this.element)
++				.addClass("ui-resizable-autohide")
++				.mouseenter(function() {
++					if (o.disabled) {
++						return;
++					}
++					$(this).removeClass("ui-resizable-autohide");
++					that._handles.show();
++				})
++				.mouseleave(function(){
++					if (o.disabled) {
++						return;
++					}
++					if (!that.resizing) {
++						$(this).addClass("ui-resizable-autohide");
++						that._handles.hide();
++					}
++				});
++		}
++
++		//Initialize the mouse interaction
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++
++		this._mouseDestroy();
++
++		var wrapper,
++			_destroy = function(exp) {
++				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
++					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
++			};
++
++		//TODO: Unwrap at same DOM position
++		if (this.elementIsWrapper) {
++			_destroy(this.element);
++			wrapper = this.element;
++			this.originalElement.css({
++				position: wrapper.css("position"),
++				width: wrapper.outerWidth(),
++				height: wrapper.outerHeight(),
++				top: wrapper.css("top"),
++				left: wrapper.css("left")
++			}).insertAfter( wrapper );
++			wrapper.remove();
++		}
++
++		this.originalElement.css("resize", this.originalResizeStyle);
++		_destroy(this.originalElement);
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++		var i, handle,
++			capture = false;
++
++		for (i in this.handles) {
++			handle = $(this.handles[i])[0];
++			if (handle === event.target || $.contains(handle, event.target)) {
++				capture = true;
++			}
++		}
++
++		return !this.options.disabled && capture;
++	},
++
++	_mouseStart: function(event) {
++
++		var curleft, curtop, cursor,
++			o = this.options,
++			iniPos = this.element.position(),
++			el = this.element;
++
++		this.resizing = true;
++
++		// bugfix for http://dev.jquery.com/ticket/1749
++		if ( (/absolute/).test( el.css("position") ) ) {
++			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
++		} else if (el.is(".ui-draggable")) {
++			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
++		}
++
++		this._renderProxy();
++
++		curleft = num(this.helper.css("left"));
++		curtop = num(this.helper.css("top"));
++
++		if (o.containment) {
++			curleft += $(o.containment).scrollLeft() || 0;
++			curtop += $(o.containment).scrollTop() || 0;
++		}
++
++		//Store needed variables
++		this.offset = this.helper.offset();
++		this.position = { left: curleft, top: curtop };
++		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalPosition = { left: curleft, top: curtop };
++		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
++		this.originalMousePosition = { left: event.pageX, top: event.pageY };
++
++		//Aspect Ratio
++		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
++
++		cursor = $(".ui-resizable-" + this.axis).css("cursor");
++		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
++
++		el.addClass("ui-resizable-resizing");
++		this._propagate("start", event);
++		return true;
++	},
++
++	_mouseDrag: function(event) {
++
++		//Increase performance, avoid regex
++		var data,
++			el = this.helper, props = {},
++			smp = this.originalMousePosition,
++			a = this.axis,
++			prevTop = this.position.top,
++			prevLeft = this.position.left,
++			prevWidth = this.size.width,
++			prevHeight = this.size.height,
++			dx = (event.pageX-smp.left)||0,
++			dy = (event.pageY-smp.top)||0,
++			trigger = this._change[a];
++
++		if (!trigger) {
++			return false;
++		}
++
++		// Calculate the attrs that will be change
++		data = trigger.apply(this, [event, dx, dy]);
++
++		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
++		this._updateVirtualBoundaries(event.shiftKey);
++		if (this._aspectRatio || event.shiftKey) {
++			data = this._updateRatio(data, event);
++		}
++
++		data = this._respectSize(data, event);
++
++		this._updateCache(data);
++
++		// plugins callbacks need to be called first
++		this._propagate("resize", event);
++
++		if (this.position.top !== prevTop) {
++			props.top = this.position.top + "px";
++		}
++		if (this.position.left !== prevLeft) {
++			props.left = this.position.left + "px";
++		}
++		if (this.size.width !== prevWidth) {
++			props.width = this.size.width + "px";
++		}
++		if (this.size.height !== prevHeight) {
++			props.height = this.size.height + "px";
++		}
++		el.css(props);
++
++		if (!this._helper && this._proportionallyResizeElements.length) {
++			this._proportionallyResize();
++		}
++
++		// Call the user callback if the element was resized
++		if ( ! $.isEmptyObject(props) ) {
++			this._trigger("resize", event, this.ui());
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		this.resizing = false;
++		var pr, ista, soffseth, soffsetw, s, left, top,
++			o = this.options, that = this;
++
++		if(this._helper) {
++
++			pr = this._proportionallyResizeElements;
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
++			soffsetw = ista ? 0 : that.sizeDiff.width;
++
++			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++			if (!o.animate) {
++				this.element.css($.extend(s, { top: top, left: left }));
++			}
++
++			that.helper.height(that.size.height);
++			that.helper.width(that.size.width);
++
++			if (this._helper && !o.animate) {
++				this._proportionallyResize();
++			}
++		}
++
++		$("body").css("cursor", "auto");
++
++		this.element.removeClass("ui-resizable-resizing");
++
++		this._propagate("stop", event);
++
++		if (this._helper) {
++			this.helper.remove();
++		}
++
++		return false;
++
++	},
++
++	_updateVirtualBoundaries: function(forceAspectRatio) {
++		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
++			o = this.options;
++
++		b = {
++			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
++			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
++			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
++			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
++		};
++
++		if(this._aspectRatio || forceAspectRatio) {
++			// We want to create an enclosing box whose aspect ration is the requested one
++			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
++			pMinWidth = b.minHeight * this.aspectRatio;
++			pMinHeight = b.minWidth / this.aspectRatio;
++			pMaxWidth = b.maxHeight * this.aspectRatio;
++			pMaxHeight = b.maxWidth / this.aspectRatio;
++
++			if(pMinWidth > b.minWidth) {
++				b.minWidth = pMinWidth;
++			}
++			if(pMinHeight > b.minHeight) {
++				b.minHeight = pMinHeight;
++			}
++			if(pMaxWidth < b.maxWidth) {
++				b.maxWidth = pMaxWidth;
++			}
++			if(pMaxHeight < b.maxHeight) {
++				b.maxHeight = pMaxHeight;
++			}
++		}
++		this._vBoundaries = b;
++	},
++
++	_updateCache: function(data) {
++		this.offset = this.helper.offset();
++		if (isNumber(data.left)) {
++			this.position.left = data.left;
++		}
++		if (isNumber(data.top)) {
++			this.position.top = data.top;
++		}
++		if (isNumber(data.height)) {
++			this.size.height = data.height;
++		}
++		if (isNumber(data.width)) {
++			this.size.width = data.width;
++		}
++	},
++
++	_updateRatio: function( data ) {
++
++		var cpos = this.position,
++			csize = this.size,
++			a = this.axis;
++
++		if (isNumber(data.height)) {
++			data.width = (data.height * this.aspectRatio);
++		} else if (isNumber(data.width)) {
++			data.height = (data.width / this.aspectRatio);
++		}
++
++		if (a === "sw") {
++			data.left = cpos.left + (csize.width - data.width);
++			data.top = null;
++		}
++		if (a === "nw") {
++			data.top = cpos.top + (csize.height - data.height);
++			data.left = cpos.left + (csize.width - data.width);
++		}
++
++		return data;
++	},
++
++	_respectSize: function( data ) {
++
++		var o = this._vBoundaries,
++			a = this.axis,
++			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
++			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
++			dw = this.originalPosition.left + this.originalSize.width,
++			dh = this.position.top + this.size.height,
++			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
++		if (isminw) {
++			data.width = o.minWidth;
++		}
++		if (isminh) {
++			data.height = o.minHeight;
++		}
++		if (ismaxw) {
++			data.width = o.maxWidth;
++		}
++		if (ismaxh) {
++			data.height = o.maxHeight;
++		}
++
++		if (isminw && cw) {
++			data.left = dw - o.minWidth;
++		}
++		if (ismaxw && cw) {
++			data.left = dw - o.maxWidth;
++		}
++		if (isminh && ch) {
++			data.top = dh - o.minHeight;
++		}
++		if (ismaxh && ch) {
++			data.top = dh - o.maxHeight;
++		}
++
++		// fixing jump error on top/left - bug #2330
++		if (!data.width && !data.height && !data.left && data.top) {
++			data.top = null;
++		} else if (!data.width && !data.height && !data.top && data.left) {
++			data.left = null;
++		}
++
++		return data;
++	},
++
++	_proportionallyResize: function() {
++
++		if (!this._proportionallyResizeElements.length) {
++			return;
++		}
++
++		var i, j, borders, paddings, prel,
++			element = this.helper || this.element;
++
++		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
++
++			prel = this._proportionallyResizeElements[i];
++
++			if (!this.borderDif) {
++				this.borderDif = [];
++				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
++				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
++
++				for ( j = 0; j < borders.length; j++ ) {
++					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
++				}
++			}
++
++			prel.css({
++				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
++				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
++			});
++
++		}
++
++	},
++
++	_renderProxy: function() {
++
++		var el = this.element, o = this.options;
++		this.elementOffset = el.offset();
++
++		if(this._helper) {
++
++			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
++
++			this.helper.addClass(this._helper).css({
++				width: this.element.outerWidth() - 1,
++				height: this.element.outerHeight() - 1,
++				position: "absolute",
++				left: this.elementOffset.left +"px",
++				top: this.elementOffset.top +"px",
++				zIndex: ++o.zIndex //TODO: Don't modify option
++			});
++
++			this.helper
++				.appendTo("body")
++				.disableSelection();
++
++		} else {
++			this.helper = this.element;
++		}
++
++	},
++
++	_change: {
++		e: function(event, dx) {
++			return { width: this.originalSize.width + dx };
++		},
++		w: function(event, dx) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { left: sp.left + dx, width: cs.width - dx };
++		},
++		n: function(event, dx, dy) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { top: sp.top + dy, height: cs.height - dy };
++		},
++		s: function(event, dx, dy) {
++			return { height: this.originalSize.height + dy };
++		},
++		se: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		sw: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		},
++		ne: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		nw: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		}
++	},
++
++	_propagate: function(n, event) {
++		$.ui.plugin.call(this, n, [event, this.ui()]);
++		(n !== "resize" && this._trigger(n, event, this.ui()));
++	},
++
++	plugins: {},
++
++	ui: function() {
++		return {
++			originalElement: this.originalElement,
++			element: this.element,
++			helper: this.helper,
++			position: this.position,
++			size: this.size,
++			originalSize: this.originalSize,
++			originalPosition: this.originalPosition
++		};
++	}
++
++});
++
++/*
++ * Resizable Extensions
++ */
++
++$.ui.plugin.add("resizable", "animate", {
++
++	stop: function( event ) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			pr = that._proportionallyResizeElements,
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
++			soffsetw = ista ? 0 : that.sizeDiff.width,
++			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++		that.element.animate(
++			$.extend(style, top && left ? { top: top, left: left } : {}), {
++				duration: o.animateDuration,
++				easing: o.animateEasing,
++				step: function() {
++
++					var data = {
++						width: parseInt(that.element.css("width"), 10),
++						height: parseInt(that.element.css("height"), 10),
++						top: parseInt(that.element.css("top"), 10),
++						left: parseInt(that.element.css("left"), 10)
++					};
++
++					if (pr && pr.length) {
++						$(pr[0]).css({ width: data.width, height: data.height });
++					}
++
++					// propagating resize, and updating values for each animation step
++					that._updateCache(data);
++					that._propagate("resize", event);
++
++				}
++			}
++		);
++	}
++
++});
++
++$.ui.plugin.add("resizable", "containment", {
++
++	start: function() {
++		var element, p, co, ch, cw, width, height,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			el = that.element,
++			oc = o.containment,
++			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
++
++		if (!ce) {
++			return;
++		}
++
++		that.containerElement = $(ce);
++
++		if (/document/.test(oc) || oc === document) {
++			that.containerOffset = { left: 0, top: 0 };
++			that.containerPosition = { left: 0, top: 0 };
++
++			that.parentData = {
++				element: $(document), left: 0, top: 0,
++				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
++			};
++		}
++
++		// i'm a node, so compute top, left, right, bottom
++		else {
++			element = $(ce);
++			p = [];
++			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
++
++			that.containerOffset = element.offset();
++			that.containerPosition = element.position();
++			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
++
++			co = that.containerOffset;
++			ch = that.containerSize.height;
++			cw = that.containerSize.width;
++			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
++			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
++
++			that.parentData = {
++				element: ce, left: co.left, top: co.top, width: width, height: height
++			};
++		}
++	},
++
++	resize: function( event ) {
++		var woset, hoset, isParent, isOffsetRelative,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset, cp = that.position,
++			pRatio = that._aspectRatio || event.shiftKey,
++			cop = { top:0, left:0 }, ce = that.containerElement;
++
++		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
++			cop = co;
++		}
++
++		if (cp.left < (that._helper ? co.left : 0)) {
++			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++			that.position.left = o.helper ? co.left : 0;
++		}
++
++		if (cp.top < (that._helper ? co.top : 0)) {
++			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++			that.position.top = that._helper ? co.top : 0;
++		}
++
++		that.offset.left = that.parentData.left+that.position.left;
++		that.offset.top = that.parentData.top+that.position.top;
++
++		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
++		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
++
++		isParent = that.containerElement.get(0) === that.element.parent().get(0);
++		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
++
++		if(isParent && isOffsetRelative) {
++			woset -= that.parentData.left;
++		}
++
++		if (woset + that.size.width >= that.parentData.width) {
++			that.size.width = that.parentData.width - woset;
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++		}
++
++		if (hoset + that.size.height >= that.parentData.height) {
++			that.size.height = that.parentData.height - hoset;
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++		}
++	},
++
++	stop: function(){
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset,
++			cop = that.containerPosition,
++			ce = that.containerElement,
++			helper = $(that.helper),
++			ho = helper.offset(),
++			w = helper.outerWidth() - that.sizeDiff.width,
++			h = helper.outerHeight() - that.sizeDiff.height;
++
++		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++	}
++});
++
++$.ui.plugin.add("resizable", "alsoResize", {
++
++	start: function () {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			_store = function (exp) {
++				$(exp).each(function() {
++					var el = $(this);
++					el.data("ui-resizable-alsoresize", {
++						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
++						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
++					});
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
++			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
++			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
++		}else{
++			_store(o.alsoResize);
++		}
++	},
++
++	resize: function (event, ui) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			os = that.originalSize,
++			op = that.originalPosition,
++			delta = {
++				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
++				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
++			},
++
++			_alsoResize = function (exp, c) {
++				$(exp).each(function() {
++					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
++						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
++
++					$.each(css, function (i, prop) {
++						var sum = (start[prop]||0) + (delta[prop]||0);
++						if (sum && sum >= 0) {
++							style[prop] = sum || null;
++						}
++					});
++
++					el.css(style);
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
++			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
++		}else{
++			_alsoResize(o.alsoResize);
++		}
++	},
++
++	stop: function () {
++		$(this).removeData("resizable-alsoresize");
++	}
++});
++
++$.ui.plugin.add("resizable", "ghost", {
++
++	start: function() {
++
++		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
++
++		that.ghost = that.originalElement.clone();
++		that.ghost
++			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
++			.addClass("ui-resizable-ghost")
++			.addClass(typeof o.ghost === "string" ? o.ghost : "");
++
++		that.ghost.appendTo(that.helper);
++
++	},
++
++	resize: function(){
++		var that = $(this).data("ui-resizable");
++		if (that.ghost) {
++			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
++		}
++	},
++
++	stop: function() {
++		var that = $(this).data("ui-resizable");
++		if (that.ghost && that.helper) {
++			that.helper.get(0).removeChild(that.ghost.get(0));
++		}
++	}
++
++});
++
++$.ui.plugin.add("resizable", "grid", {
++
++	resize: function() {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			cs = that.size,
++			os = that.originalSize,
++			op = that.originalPosition,
++			a = that.axis,
++			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
++			gridX = (grid[0]||1),
++			gridY = (grid[1]||1),
++			ox = Math.round((cs.width - os.width) / gridX) * gridX,
++			oy = Math.round((cs.height - os.height) / gridY) * gridY,
++			newWidth = os.width + ox,
++			newHeight = os.height + oy,
++			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
++			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
++			isMinWidth = o.minWidth && (o.minWidth > newWidth),
++			isMinHeight = o.minHeight && (o.minHeight > newHeight);
++
++		o.grid = grid;
++
++		if (isMinWidth) {
++			newWidth = newWidth + gridX;
++		}
++		if (isMinHeight) {
++			newHeight = newHeight + gridY;
++		}
++		if (isMaxWidth) {
++			newWidth = newWidth - gridX;
++		}
++		if (isMaxHeight) {
++			newHeight = newHeight - gridY;
++		}
++
++		if (/^(se|s|e)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++		} else if (/^(ne)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++		} else if (/^(sw)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.left = op.left - ox;
++		} else {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++			that.position.left = op.left - ox;
++		}
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.widget("ui.selectable", $.ui.mouse, {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoRefresh: true,
++		distance: 0,
++		filter: "*",
++		tolerance: "touch",
++
++		// callbacks
++		selected: null,
++		selecting: null,
++		start: null,
++		stop: null,
++		unselected: null,
++		unselecting: null
++	},
++	_create: function() {
++		var selectees,
++			that = this;
++
++		this.element.addClass("ui-selectable");
++
++		this.dragged = false;
++
++		// cache selectee children based on filter
++		this.refresh = function() {
++			selectees = $(that.options.filter, that.element[0]);
++			selectees.addClass("ui-selectee");
++			selectees.each(function() {
++				var $this = $(this),
++					pos = $this.offset();
++				$.data(this, "selectable-item", {
++					element: this,
++					$element: $this,
++					left: pos.left,
++					top: pos.top,
++					right: pos.left + $this.outerWidth(),
++					bottom: pos.top + $this.outerHeight(),
++					startselected: false,
++					selected: $this.hasClass("ui-selected"),
++					selecting: $this.hasClass("ui-selecting"),
++					unselecting: $this.hasClass("ui-unselecting")
++				});
++			});
++		};
++		this.refresh();
++
++		this.selectees = selectees.addClass("ui-selectee");
++
++		this._mouseInit();
++
++		this.helper = $("<div class='ui-selectable-helper'></div>");
++	},
++
++	_destroy: function() {
++		this.selectees
++			.removeClass("ui-selectee")
++			.removeData("selectable-item");
++		this.element
++			.removeClass("ui-selectable ui-selectable-disabled");
++		this._mouseDestroy();
++	},
++
++	_mouseStart: function(event) {
++		var that = this,
++			options = this.options;
++
++		this.opos = [event.pageX, event.pageY];
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		this.selectees = $(options.filter, this.element[0]);
++
++		this._trigger("start", event);
++
++		$(options.appendTo).append(this.helper);
++		// position helper (lasso)
++		this.helper.css({
++			"left": event.pageX,
++			"top": event.pageY,
++			"width": 0,
++			"height": 0
++		});
++
++		if (options.autoRefresh) {
++			this.refresh();
++		}
++
++		this.selectees.filter(".ui-selected").each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.startselected = true;
++			if (!event.metaKey && !event.ctrlKey) {
++				selectee.$element.removeClass("ui-selected");
++				selectee.selected = false;
++				selectee.$element.addClass("ui-unselecting");
++				selectee.unselecting = true;
++				// selectable UNSELECTING callback
++				that._trigger("unselecting", event, {
++					unselecting: selectee.element
++				});
++			}
++		});
++
++		$(event.target).parents().addBack().each(function() {
++			var doSelect,
++				selectee = $.data(this, "selectable-item");
++			if (selectee) {
++				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
++				selectee.$element
++					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
++					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
++				selectee.unselecting = !doSelect;
++				selectee.selecting = doSelect;
++				selectee.selected = doSelect;
++				// selectable (UN)SELECTING callback
++				if (doSelect) {
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				} else {
++					that._trigger("unselecting", event, {
++						unselecting: selectee.element
++					});
++				}
++				return false;
++			}
++		});
++
++	},
++
++	_mouseDrag: function(event) {
++
++		this.dragged = true;
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		var tmp,
++			that = this,
++			options = this.options,
++			x1 = this.opos[0],
++			y1 = this.opos[1],
++			x2 = event.pageX,
++			y2 = event.pageY;
++
++		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
++		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
++		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
++
++		this.selectees.each(function() {
++			var selectee = $.data(this, "selectable-item"),
++				hit = false;
++
++			//prevent helper from being selected if appendTo: selectable
++			if (!selectee || selectee.element === that.element[0]) {
++				return;
++			}
++
++			if (options.tolerance === "touch") {
++				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
++			} else if (options.tolerance === "fit") {
++				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
++			}
++
++			if (hit) {
++				// SELECT
++				if (selectee.selected) {
++					selectee.$element.removeClass("ui-selected");
++					selectee.selected = false;
++				}
++				if (selectee.unselecting) {
++					selectee.$element.removeClass("ui-unselecting");
++					selectee.unselecting = false;
++				}
++				if (!selectee.selecting) {
++					selectee.$element.addClass("ui-selecting");
++					selectee.selecting = true;
++					// selectable SELECTING callback
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				}
++			} else {
++				// UNSELECT
++				if (selectee.selecting) {
++					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						selectee.$element.addClass("ui-selected");
++						selectee.selected = true;
++					} else {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						if (selectee.startselected) {
++							selectee.$element.addClass("ui-unselecting");
++							selectee.unselecting = true;
++						}
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++				if (selectee.selected) {
++					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
++						selectee.$element.removeClass("ui-selected");
++						selectee.selected = false;
++
++						selectee.$element.addClass("ui-unselecting");
++						selectee.unselecting = true;
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++			}
++		});
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++		var that = this;
++
++		this.dragged = false;
++
++		$(".ui-unselecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-unselecting");
++			selectee.unselecting = false;
++			selectee.startselected = false;
++			that._trigger("unselected", event, {
++				unselected: selectee.element
++			});
++		});
++		$(".ui-selecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
++			selectee.selecting = false;
++			selectee.selected = true;
++			selectee.startselected = true;
++			that._trigger("selected", event, {
++				selected: selectee.element
++			});
++		});
++		this._trigger("stop", event);
++
++		this.helper.remove();
++
++		return false;
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++/*jshint loopfunc: true */
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++function isFloating(item) {
++	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
++}
++
++$.widget("ui.sortable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "sort",
++	ready: false,
++	options: {
++		appendTo: "parent",
++		axis: false,
++		connectWith: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		dropOnEmpty: true,
++		forcePlaceholderSize: false,
++		forceHelperSize: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		items: "> *",
++		opacity: false,
++		placeholder: false,
++		revert: false,
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		scope: "default",
++		tolerance: "intersect",
++		zIndex: 1000,
++
++		// callbacks
++		activate: null,
++		beforeStop: null,
++		change: null,
++		deactivate: null,
++		out: null,
++		over: null,
++		receive: null,
++		remove: null,
++		sort: null,
++		start: null,
++		stop: null,
++		update: null
++	},
++	_create: function() {
++
++		var o = this.options;
++		this.containerCache = {};
++		this.element.addClass("ui-sortable");
++
++		//Get the items
++		this.refresh();
++
++		//Let's determine if the items are being displayed horizontally
++		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
++
++		//Let's determine the parent's offset
++		this.offset = this.element.offset();
++
++		//Initialize mouse events for interaction
++		this._mouseInit();
++
++		//We're ready to go
++		this.ready = true;
++
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass("ui-sortable ui-sortable-disabled");
++		this._mouseDestroy();
++
++		for ( var i = this.items.length - 1; i >= 0; i-- ) {
++			this.items[i].item.removeData(this.widgetName + "-item");
++		}
++
++		return this;
++	},
++
++	_setOption: function(key, value){
++		if ( key === "disabled" ) {
++			this.options[ key ] = value;
++
++			this.widget().toggleClass( "ui-sortable-disabled", !!value );
++		} else {
++			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
++			$.Widget.prototype._setOption.apply(this, arguments);
++		}
++	},
++
++	_mouseCapture: function(event, overrideHandle) {
++		var currentItem = null,
++			validHandle = false,
++			that = this;
++
++		if (this.reverting) {
++			return false;
++		}
++
++		if(this.options.disabled || this.options.type === "static") {
++			return false;
++		}
++
++		//We have to refresh the items data once first
++		this._refreshItems(event);
++
++		//Find out if the clicked node (or one of its parents) is a actual item in this.items
++		$(event.target).parents().each(function() {
++			if($.data(this, that.widgetName + "-item") === that) {
++				currentItem = $(this);
++				return false;
++			}
++		});
++		if($.data(event.target, that.widgetName + "-item") === that) {
++			currentItem = $(event.target);
++		}
++
++		if(!currentItem) {
++			return false;
++		}
++		if(this.options.handle && !overrideHandle) {
++			$(this.options.handle, currentItem).find("*").addBack().each(function() {
++				if(this === event.target) {
++					validHandle = true;
++				}
++			});
++			if(!validHandle) {
++				return false;
++			}
++		}
++
++		this.currentItem = currentItem;
++		this._removeCurrentsFromItems();
++		return true;
++
++	},
++
++	_mouseStart: function(event, overrideHandle, noActivation) {
++
++		var i, body,
++			o = this.options;
++
++		this.currentContainer = this;
++
++		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
++		this.refreshPositions();
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Get the next scrolling parent
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.currentItem.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		// Only after we got the offset, we can change the helper's position to absolute
++		// TODO: Still need to figure out a way to make relative sorting possible
++		this.helper.css("position", "absolute");
++		this.cssPosition = this.helper.css("position");
++
++		//Generate the original position
++		this.originalPosition = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Cache the former DOM position
++		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
++
++		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.currentItem.hide();
++		}
++
++		//Create the placeholder
++		this._createPlaceholder();
++
++		//Set a containment if given in the options
++		if(o.containment) {
++			this._setContainment();
++		}
++
++		if( o.cursor && o.cursor !== "auto" ) { // cursor option
++			body = this.document.find( "body" );
++
++			// support: IE
++			this.storedCursor = body.css( "cursor" );
++			body.css( "cursor", o.cursor );
++
++			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
++		}
++
++		if(o.opacity) { // opacity option
++			if (this.helper.css("opacity")) {
++				this._storedOpacity = this.helper.css("opacity");
++			}
++			this.helper.css("opacity", o.opacity);
++		}
++
++		if(o.zIndex) { // zIndex option
++			if (this.helper.css("zIndex")) {
++				this._storedZIndex = this.helper.css("zIndex");
++			}
++			this.helper.css("zIndex", o.zIndex);
++		}
++
++		//Prepare scrolling
++		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++			this.overflowOffset = this.scrollParent.offset();
++		}
++
++		//Call callbacks
++		this._trigger("start", event, this._uiHash());
++
++		//Recache the helper size
++		if(!this._preserveHelperProportions) {
++			this._cacheHelperProportions();
++		}
++
++
++		//Post "activate" events to possible containers
++		if( !noActivation ) {
++			for ( i = this.containers.length - 1; i >= 0; i-- ) {
++				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
++			}
++		}
++
++		//Prepare possible droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++		this.dragging = true;
++
++		this.helper.addClass("ui-sortable-helper");
++		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		return true;
++
++	},
++
++	_mouseDrag: function(event) {
++		var i, item, itemElement, intersection,
++			o = this.options,
++			scrolled = false;
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		if (!this.lastPositionAbs) {
++			this.lastPositionAbs = this.positionAbs;
++		}
++
++		//Do scrolling
++		if(this.options.scroll) {
++			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++
++				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++
++				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++
++			} else {
++
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++
++			}
++
++			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++				$.ui.ddmanager.prepareOffsets(this, event);
++			}
++		}
++
++		//Regenerate the absolute position used for position checks
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Set the helper position
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++
++		//Rearrange
++		for (i = this.items.length - 1; i >= 0; i--) {
++
++			//Cache variables and intersection, continue if no intersection
++			item = this.items[i];
++			itemElement = item.item[0];
++			intersection = this._intersectsWithPointer(item);
++			if (!intersection) {
++				continue;
++			}
++
++			// Only put the placeholder inside the current Container, skip all
++			// items form other containers. This works because when moving
++			// an item from one container to another the
++			// currentContainer is switched before the placeholder is moved.
++			//
++			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
++			// beetween the outer and inner container.
++			if (item.instance !== this.currentContainer) {
++				continue;
++			}
++
++			// cannot intersect with itself
++			// no useless actions that have been done before
++			// no action if the item moved is the parent of the item checked
++			if (itemElement !== this.currentItem[0] &&
++				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
++				!$.contains(this.placeholder[0], itemElement) &&
++				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
++			) {
++
++				this.direction = intersection === 1 ? "down" : "up";
++
++				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
++					this._rearrange(event, item);
++				} else {
++					break;
++				}
++
++				this._trigger("change", event, this._uiHash());
++				break;
++			}
++		}
++
++		//Post events to containers
++		this._contactContainers(event);
++
++		//Interconnect with droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		//Call callbacks
++		this._trigger("sort", event, this._uiHash());
++
++		this.lastPositionAbs = this.positionAbs;
++		return false;
++
++	},
++
++	_mouseStop: function(event, noPropagation) {
++
++		if(!event) {
++			return;
++		}
++
++		//If we are using droppables, inform the manager about the drop
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			$.ui.ddmanager.drop(this, event);
++		}
++
++		if(this.options.revert) {
++			var that = this,
++				cur = this.placeholder.offset(),
++				axis = this.options.axis,
++				animation = {};
++
++			if ( !axis || axis === "x" ) {
++				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
++			}
++			if ( !axis || axis === "y" ) {
++				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
++			}
++			this.reverting = true;
++			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
++				that._clear(event);
++			});
++		} else {
++			this._clear(event, noPropagation);
++		}
++
++		return false;
++
++	},
++
++	cancel: function() {
++
++		if(this.dragging) {
++
++			this._mouseUp({ target: null });
++
++			if(this.options.helper === "original") {
++				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++			} else {
++				this.currentItem.show();
++			}
++
++			//Post deactivating events to containers
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", null, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		if (this.placeholder) {
++			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++			if(this.placeholder[0].parentNode) {
++				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++			}
++			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
++				this.helper.remove();
++			}
++
++			$.extend(this, {
++				helper: null,
++				dragging: false,
++				reverting: false,
++				_noFinalSort: null
++			});
++
++			if(this.domPosition.prev) {
++				$(this.domPosition.prev).after(this.currentItem);
++			} else {
++				$(this.domPosition.parent).prepend(this.currentItem);
++			}
++		}
++
++		return this;
++
++	},
++
++	serialize: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			str = [];
++		o = o || {};
++
++		$(items).each(function() {
++			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
++			if (res) {
++				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
++			}
++		});
++
++		if(!str.length && o.key) {
++			str.push(o.key + "=");
++		}
++
++		return str.join("&");
++
++	},
++
++	toArray: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			ret = [];
++
++		o = o || {};
++
++		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
++		return ret;
++
++	},
++
++	/* Be careful with the following core functions */
++	_intersectsWith: function(item) {
++
++		var x1 = this.positionAbs.left,
++			x2 = x1 + this.helperProportions.width,
++			y1 = this.positionAbs.top,
++			y2 = y1 + this.helperProportions.height,
++			l = item.left,
++			r = l + item.width,
++			t = item.top,
++			b = t + item.height,
++			dyClick = this.offset.click.top,
++			dxClick = this.offset.click.left,
++			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
++			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
++			isOverElement = isOverElementHeight && isOverElementWidth;
++
++		if ( this.options.tolerance === "pointer" ||
++			this.options.forcePointerForContainers ||
++			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
++		) {
++			return isOverElement;
++		} else {
++
++			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
++				x2 - (this.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
++				y2 - (this.helperProportions.height / 2) < b ); // Top Half
++
++		}
++	},
++
++	_intersectsWithPointer: function(item) {
++
++		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
++			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
++			isOverElement = isOverElementHeight && isOverElementWidth,
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (!isOverElement) {
++			return false;
++		}
++
++		return this.floating ?
++			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
++			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
++
++	},
++
++	_intersectsWithSides: function(item) {
++
++		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
++			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (this.floating && horizontalDirection) {
++			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
++		} else {
++			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
++		}
++
++	},
++
++	_getDragVerticalDirection: function() {
++		var delta = this.positionAbs.top - this.lastPositionAbs.top;
++		return delta !== 0 && (delta > 0 ? "down" : "up");
++	},
++
++	_getDragHorizontalDirection: function() {
++		var delta = this.positionAbs.left - this.lastPositionAbs.left;
++		return delta !== 0 && (delta > 0 ? "right" : "left");
++	},
++
++	refresh: function(event) {
++		this._refreshItems(event);
++		this.refreshPositions();
++		return this;
++	},
++
++	_connectWith: function() {
++		var options = this.options;
++		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
++	},
++
++	_getItemsAsjQuery: function(connected) {
++
++		var i, j, cur, inst,
++			items = [],
++			queries = [],
++			connectWith = this._connectWith();
++
++		if(connectWith && connected) {
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for ( j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
++					}
++				}
++			}
++		}
++
++		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
++
++		for (i = queries.length - 1; i >= 0; i--){
++			queries[i][0].each(function() {
++				items.push(this);
++			});
++		}
++
++		return $(items);
++
++	},
++
++	_removeCurrentsFromItems: function() {
++
++		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
++
++		this.items = $.grep(this.items, function (item) {
++			for (var j=0; j < list.length; j++) {
++				if(list[j] === item.item[0]) {
++					return false;
++				}
++			}
++			return true;
++		});
++
++	},
++
++	_refreshItems: function(event) {
++
++		this.items = [];
++		this.containers = [this];
++
++		var i, j, cur, inst, targetData, _queries, item, queriesLength,
++			items = this.items,
++			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
++			connectWith = this._connectWith();
++
++		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for (j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
++						this.containers.push(inst);
++					}
++				}
++			}
++		}
++
++		for (i = queries.length - 1; i >= 0; i--) {
++			targetData = queries[i][1];
++			_queries = queries[i][0];
++
++			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
++				item = $(_queries[j]);
++
++				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
++
++				items.push({
++					item: item,
++					instance: targetData,
++					width: 0, height: 0,
++					left: 0, top: 0
++				});
++			}
++		}
++
++	},
++
++	refreshPositions: function(fast) {
++
++		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
++		if(this.offsetParent && this.helper) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		var i, item, t, p;
++
++		for (i = this.items.length - 1; i >= 0; i--){
++			item = this.items[i];
++
++			//We ignore calculating positions of all connected containers when we're not over them
++			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
++				continue;
++			}
++
++			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
++
++			if (!fast) {
++				item.width = t.outerWidth();
++				item.height = t.outerHeight();
++			}
++
++			p = t.offset();
++			item.left = p.left;
++			item.top = p.top;
++		}
++
++		if(this.options.custom && this.options.custom.refreshContainers) {
++			this.options.custom.refreshContainers.call(this);
++		} else {
++			for (i = this.containers.length - 1; i >= 0; i--){
++				p = this.containers[i].element.offset();
++				this.containers[i].containerCache.left = p.left;
++				this.containers[i].containerCache.top = p.top;
++				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
++				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
++			}
++		}
++
++		return this;
++	},
++
++	_createPlaceholder: function(that) {
++		that = that || this;
++		var className,
++			o = that.options;
++
++		if(!o.placeholder || o.placeholder.constructor === String) {
++			className = o.placeholder;
++			o.placeholder = {
++				element: function() {
++
++					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
++						element = $( "<" + nodeName + ">", that.document[0] )
++							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
++							.removeClass("ui-sortable-helper");
++
++					if ( nodeName === "tr" ) {
++						that.currentItem.children().each(function() {
++							$( "<td>&#160;</td>", that.document[0] )
++								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
++								.appendTo( element );
++						});
++					} else if ( nodeName === "img" ) {
++						element.attr( "src", that.currentItem.attr( "src" ) );
++					}
++
++					if ( !className ) {
++						element.css( "visibility", "hidden" );
++					}
++
++					return element;
++				},
++				update: function(container, p) {
++
++					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
++					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
++					if(className && !o.forcePlaceholderSize) {
++						return;
++					}
++
++					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
++					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
++					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
++				}
++			};
++		}
++
++		//Create the placeholder
++		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
++
++		//Append it after the actual current item
++		that.currentItem.after(that.placeholder);
++
++		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
++		o.placeholder.update(that, that.placeholder);
++
++	},
++
++	_contactContainers: function(event) {
++		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
++			innermostContainer = null,
++			innermostIndex = null;
++
++		// get innermost container that intersects with item
++		for (i = this.containers.length - 1; i >= 0; i--) {
++
++			// never consider a container that's located within the item itself
++			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
++				continue;
++			}
++
++			if(this._intersectsWith(this.containers[i].containerCache)) {
++
++				// if we've already found a container and it's more "inner" than this, then continue
++				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
++					continue;
++				}
++
++				innermostContainer = this.containers[i];
++				innermostIndex = i;
++
++			} else {
++				// container doesn't intersect. trigger "out" event if necessary
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", event, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		// if no intersecting containers found, return
++		if(!innermostContainer) {
++			return;
++		}
++
++		// move the item into the container if it's not there already
++		if(this.containers.length === 1) {
++			if (!this.containers[innermostIndex].containerCache.over) {
++				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++				this.containers[innermostIndex].containerCache.over = 1;
++			}
++		} else {
++
++			//When entering a new container, we will find the item with the least distance and append our item near it
++			dist = 10000;
++			itemWithLeastDistance = null;
++			floating = innermostContainer.floating || isFloating(this.currentItem);
++			posProperty = floating ? "left" : "top";
++			sizeProperty = floating ? "width" : "height";
++			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
++			for (j = this.items.length - 1; j >= 0; j--) {
++				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
++					continue;
++				}
++				if(this.items[j].item[0] === this.currentItem[0]) {
++					continue;
++				}
++				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
++					continue;
++				}
++				cur = this.items[j].item.offset()[posProperty];
++				nearBottom = false;
++				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
++					nearBottom = true;
++					cur += this.items[j][sizeProperty];
++				}
++
++				if(Math.abs(cur - base) < dist) {
++					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
++					this.direction = nearBottom ? "up": "down";
++				}
++			}
++
++			//Check if dropOnEmpty is enabled
++			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
++				return;
++			}
++
++			if(this.currentContainer === this.containers[innermostIndex]) {
++				return;
++			}
++
++			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
++			this._trigger("change", event, this._uiHash());
++			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
++			this.currentContainer = this.containers[innermostIndex];
++
++			//Update the placeholder
++			this.options.placeholder.update(this.currentContainer, this.placeholder);
++
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++			this.containers[innermostIndex].containerCache.over = 1;
++		}
++
++
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
++
++		//Add the helper to the DOM if that didn't happen already
++		if(!helper.parents("body").length) {
++			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
++		}
++
++		if(helper[0] === this.currentItem[0]) {
++			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
++		}
++
++		if(!helper[0].style.width || o.forceHelperSize) {
++			helper.width(this.currentItem.width());
++		}
++		if(!helper[0].style.height || o.forceHelperSize) {
++			helper.height(this.currentItem.height());
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		// This needs to be actually done for all browsers, since pageX/pageY includes this information
++		// with an ugly IE fix
++		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.currentItem.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
++			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var ce, co, over,
++			o = this.options;
++		if(o.containment === "parent") {
++			o.containment = this.helper[0].parentNode;
++		}
++		if(o.containment === "document" || o.containment === "window") {
++			this.containment = [
++				0 - this.offset.relative.left - this.offset.parent.left,
++				0 - this.offset.relative.top - this.offset.parent.top,
++				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
++				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++		if(!(/^(document|window|parent)$/).test(o.containment)) {
++			ce = $(o.containment)[0];
++			co = $(o.containment).offset();
++			over = ($(ce).css("overflow") !== "hidden");
++
++			this.containment = [
++				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
++				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
++				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
++				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
++			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var top, left,
++			o = this.options,
++			pageX = event.pageX,
++			pageY = event.pageY,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		// This is another very weird special case that only happens for relative elements:
++		// 1. If the css position is relative
++		// 2. and the scroll parent is the document or similar to the offset parent
++		// we have to refresh the relative offset during the scroll so there are no jumps
++		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
++			this.offset.relative = this._getRelativeOffset();
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++
++			if(this.containment) {
++				if(event.pageX - this.offset.click.left < this.containment[0]) {
++					pageX = this.containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < this.containment[1]) {
++					pageY = this.containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > this.containment[2]) {
++					pageX = this.containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > this.containment[3]) {
++					pageY = this.containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
++				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
++				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																// The absolute mouse position
++				this.offset.click.top -													// Click offset (relative to the element)
++				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX -																// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_rearrange: function(event, i, a, hardRefresh) {
++
++		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
++
++		//Various things done here to improve the performance:
++		// 1. we create a setTimeout, that calls refreshPositions
++		// 2. on the instance, we have a counter variable, that get's higher after every append
++		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
++		// 4. this lets only the last addition to the timeout stack through
++		this.counter = this.counter ? ++this.counter : 1;
++		var counter = this.counter;
++
++		this._delay(function() {
++			if(counter === this.counter) {
++				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
++			}
++		});
++
++	},
++
++	_clear: function(event, noPropagation) {
++
++		this.reverting = false;
++		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
++		// everything else normalized again
++		var i,
++			delayedTriggers = [];
++
++		// We first have to update the dom position of the actual currentItem
++		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
++		if(!this._noFinalSort && this.currentItem.parent().length) {
++			this.placeholder.before(this.currentItem);
++		}
++		this._noFinalSort = null;
++
++		if(this.helper[0] === this.currentItem[0]) {
++			for(i in this._storedCSS) {
++				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
++					this._storedCSS[i] = "";
++				}
++			}
++			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++		} else {
++			this.currentItem.show();
++		}
++
++		if(this.fromOutside && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
++		}
++		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
++		}
++
++		// Check if the items Container has Changed and trigger appropriate
++		// events.
++		if (this !== this.currentContainer) {
++			if(!noPropagation) {
++				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
++			}
++		}
++
++
++		//Post events to containers
++		for (i = this.containers.length - 1; i >= 0; i--){
++			if(!noPropagation) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++			}
++			if(this.containers[i].containerCache.over) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++				this.containers[i].containerCache.over = 0;
++			}
++		}
++
++		//Do what was originally in plugins
++		if ( this.storedCursor ) {
++			this.document.find( "body" ).css( "cursor", this.storedCursor );
++			this.storedStylesheet.remove();
++		}
++		if(this._storedOpacity) {
++			this.helper.css("opacity", this._storedOpacity);
++		}
++		if(this._storedZIndex) {
++			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
++		}
++
++		this.dragging = false;
++		if(this.cancelHelperRemoval) {
++			if(!noPropagation) {
++				this._trigger("beforeStop", event, this._uiHash());
++				for (i=0; i < delayedTriggers.length; i++) {
++					delayedTriggers[i].call(this, event);
++				} //Trigger all delayed events
++				this._trigger("stop", event, this._uiHash());
++			}
++
++			this.fromOutside = false;
++			return false;
++		}
++
++		if(!noPropagation) {
++			this._trigger("beforeStop", event, this._uiHash());
++		}
++
++		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.helper.remove();
++		}
++		this.helper = null;
++
++		if(!noPropagation) {
++			for (i=0; i < delayedTriggers.length; i++) {
++				delayedTriggers[i].call(this, event);
++			} //Trigger all delayed events
++			this._trigger("stop", event, this._uiHash());
++		}
++
++		this.fromOutside = false;
++		return true;
++
++	},
++
++	_trigger: function() {
++		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
++			this.cancel();
++		}
++	},
++
++	_uiHash: function(_inst) {
++		var inst = _inst || this;
++		return {
++			helper: inst.helper,
++			placeholder: inst.placeholder || $([]),
++			position: inst.position,
++			originalPosition: inst.originalPosition,
++			offset: inst.positionAbs,
++			item: inst.currentItem,
++			sender: _inst ? _inst.element : null
++		};
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++var uid = 0,
++	hideProps = {},
++	showProps = {};
++
++hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
++	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
++showProps.height = showProps.paddingTop = showProps.paddingBottom =
++	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
++
++$.widget( "ui.accordion", {
++	version: "1.10.3",
++	options: {
++		active: 0,
++		animate: {},
++		collapsible: false,
++		event: "click",
++		header: "> li > :first-child,> :not(li):even",
++		heightStyle: "auto",
++		icons: {
++			activeHeader: "ui-icon-triangle-1-s",
++			header: "ui-icon-triangle-1-e"
++		},
++
++		// callbacks
++		activate: null,
++		beforeActivate: null
++	},
++
++	_create: function() {
++		var options = this.options;
++		this.prevShow = this.prevHide = $();
++		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
++			// ARIA
++			.attr( "role", "tablist" );
++
++		// don't allow collapsible: false and active: false / null
++		if ( !options.collapsible && (options.active === false || options.active == null) ) {
++			options.active = 0;
++		}
++
++		this._processPanels();
++		// handle negative values
++		if ( options.active < 0 ) {
++			options.active += this.headers.length;
++		}
++		this._refresh();
++	},
++
++	_getCreateEventData: function() {
++		return {
++			header: this.active,
++			panel: !this.active.length ? $() : this.active.next(),
++			content: !this.active.length ? $() : this.active.next()
++		};
++	},
++
++	_createIcons: function() {
++		var icons = this.options.icons;
++		if ( icons ) {
++			$( "<span>" )
++				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
++				.prependTo( this.headers );
++			this.active.children( ".ui-accordion-header-icon" )
++				.removeClass( icons.header )
++				.addClass( icons.activeHeader );
++			this.headers.addClass( "ui-accordion-icons" );
++		}
++	},
++
++	_destroyIcons: function() {
++		this.headers
++			.removeClass( "ui-accordion-icons" )
++			.children( ".ui-accordion-header-icon" )
++				.remove();
++	},
++
++	_destroy: function() {
++		var contents;
++
++		// clean up main element
++		this.element
++			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
++			.removeAttr( "role" );
++
++		// clean up headers
++		this.headers
++			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-selected" )
++			.removeAttr( "aria-controls" )
++			.removeAttr( "tabIndex" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		this._destroyIcons();
++
++		// clean up content panels
++		contents = this.headers.next()
++			.css( "display", "" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-expanded" )
++			.removeAttr( "aria-hidden" )
++			.removeAttr( "aria-labelledby" )
++			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		if ( this.options.heightStyle !== "content" ) {
++			contents.css( "height", "" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "event" ) {
++			if ( this.options.event ) {
++				this._off( this.headers, this.options.event );
++			}
++			this._setupEvents( value );
++		}
++
++		this._super( key, value );
++
++		// setting collapsible: false while collapsed; open first panel
++		if ( key === "collapsible" && !value && this.options.active === false ) {
++			this._activate( 0 );
++		}
++
++		if ( key === "icons" ) {
++			this._destroyIcons();
++			if ( value ) {
++				this._createIcons();
++			}
++		}
++
++		// #5332 - opacity doesn't cascade to positioned elements in IE
++		// so we need to add the disabled class to the headers and panels
++		if ( key === "disabled" ) {
++			this.headers.add( this.headers.next() )
++				.toggleClass( "ui-state-disabled", !!value );
++		}
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		if ( event.altKey || event.ctrlKey ) {
++			return;
++		}
++
++		var keyCode = $.ui.keyCode,
++			length = this.headers.length,
++			currentIndex = this.headers.index( event.target ),
++			toFocus = false;
++
++		switch ( event.keyCode ) {
++			case keyCode.RIGHT:
++			case keyCode.DOWN:
++				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
++				break;
++			case keyCode.LEFT:
++			case keyCode.UP:
++				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
++				break;
++			case keyCode.SPACE:
++			case keyCode.ENTER:
++				this._eventHandler( event );
++				break;
++			case keyCode.HOME:
++				toFocus = this.headers[ 0 ];
++				break;
++			case keyCode.END:
++				toFocus = this.headers[ length - 1 ];
++				break;
++		}
++
++		if ( toFocus ) {
++			$( event.target ).attr( "tabIndex", -1 );
++			$( toFocus ).attr( "tabIndex", 0 );
++			toFocus.focus();
++			event.preventDefault();
++		}
++	},
++
++	_panelKeyDown : function( event ) {
++		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
++			$( event.currentTarget ).prev().focus();
++		}
++	},
++
++	refresh: function() {
++		var options = this.options;
++		this._processPanels();
++
++		// was collapsed or no panel
++		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
++			options.active = false;
++			this.active = $();
++		// active false only when collapsible is true
++		} else if ( options.active === false ) {
++			this._activate( 0 );
++		// was active, but active panel is gone
++		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining panel are disabled
++			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous panel
++			} else {
++				this._activate( Math.max( 0, options.active - 1 ) );
++			}
++		// was active, active panel still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.headers.index( this.active );
++		}
++
++		this._destroyIcons();
++
++		this._refresh();
++	},
++
++	_processPanels: function() {
++		this.headers = this.element.find( this.options.header )
++			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
++
++		this.headers.next()
++			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
++			.filter(":not(.ui-accordion-content-active)")
++			.hide();
++	},
++
++	_refresh: function() {
++		var maxHeight,
++			options = this.options,
++			heightStyle = options.heightStyle,
++			parent = this.element.parent(),
++			accordionId = this.accordionId = "ui-accordion-" +
++				(this.element.attr( "id" ) || ++uid);
++
++		this.active = this._findActive( options.active )
++			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
++			.removeClass( "ui-corner-all" );
++		this.active.next()
++			.addClass( "ui-accordion-content-active" )
++			.show();
++
++		this.headers
++			.attr( "role", "tab" )
++			.each(function( i ) {
++				var header = $( this ),
++					headerId = header.attr( "id" ),
++					panel = header.next(),
++					panelId = panel.attr( "id" );
++				if ( !headerId ) {
++					headerId = accordionId + "-header-" + i;
++					header.attr( "id", headerId );
++				}
++				if ( !panelId ) {
++					panelId = accordionId + "-panel-" + i;
++					panel.attr( "id", panelId );
++				}
++				header.attr( "aria-controls", panelId );
++				panel.attr( "aria-labelledby", headerId );
++			})
++			.next()
++				.attr( "role", "tabpanel" );
++
++		this.headers
++			.not( this.active )
++			.attr({
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.next()
++				.attr({
++					"aria-expanded": "false",
++					"aria-hidden": "true"
++				})
++				.hide();
++
++		// make sure at least one header is in the tab order
++		if ( !this.active.length ) {
++			this.headers.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active.attr({
++				"aria-selected": "true",
++				tabIndex: 0
++			})
++			.next()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++
++		this._createIcons();
++
++		this._setupEvents( options.event );
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.headers.each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.headers.next()
++				.each(function() {
++					$( this ).height( Math.max( 0, maxHeight -
++						$( this ).innerHeight() + $( this ).height() ) );
++				})
++				.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.headers.next()
++				.each(function() {
++					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
++				})
++				.height( maxHeight );
++		}
++	},
++
++	_activate: function( index ) {
++		var active = this._findActive( index )[ 0 ];
++
++		// trying to activate the already active panel
++		if ( active === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the currently active header
++		active = active || this.active[ 0 ];
++
++		this._eventHandler({
++			target: active,
++			currentTarget: active,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( selector ) {
++		return typeof selector === "number" ? this.headers.eq( selector ) : $();
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			keydown: "_keydown"
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.headers.add( this.headers.next() ) );
++		this._on( this.headers, events );
++		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
++		this._hoverable( this.headers );
++		this._focusable( this.headers );
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			clicked = $( event.currentTarget ),
++			clickedIsActive = clicked[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : clicked.next(),
++			toHide = active.next(),
++			eventData = {
++				oldHeader: active,
++				oldPanel: toHide,
++				newHeader: collapsing ? $() : clicked,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if (
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.headers.index( clicked );
++
++		// when the call to ._toggle() comes after the class changes
++		// it causes a very odd bug in IE 8 (see #6720)
++		this.active = clickedIsActive ? $() : clicked;
++		this._toggle( eventData );
++
++		// switch classes
++		// corner classes on the previously active header stay after the animation
++		active.removeClass( "ui-accordion-header-active ui-state-active" );
++		if ( options.icons ) {
++			active.children( ".ui-accordion-header-icon" )
++				.removeClass( options.icons.activeHeader )
++				.addClass( options.icons.header );
++		}
++
++		if ( !clickedIsActive ) {
++			clicked
++				.removeClass( "ui-corner-all" )
++				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
++			if ( options.icons ) {
++				clicked.children( ".ui-accordion-header-icon" )
++					.removeClass( options.icons.header )
++					.addClass( options.icons.activeHeader );
++			}
++
++			clicked
++				.next()
++				.addClass( "ui-accordion-content-active" );
++		}
++	},
++
++	_toggle: function( data ) {
++		var toShow = data.newPanel,
++			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
++
++		// handle activating a panel during the animation for another activation
++		this.prevShow.add( this.prevHide ).stop( true, true );
++		this.prevShow = toShow;
++		this.prevHide = toHide;
++
++		if ( this.options.animate ) {
++			this._animate( toShow, toHide, data );
++		} else {
++			toHide.hide();
++			toShow.show();
++			this._toggleComplete( data );
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		toHide.prev().attr( "aria-selected", "false" );
++		// if we're switching panels, remove the old header from the tab order
++		// if we're opening from collapsed state, remove the previous header from the tab order
++		// if we're collapsing, then keep the collapsing header in the tab order
++		if ( toShow.length && toHide.length ) {
++			toHide.prev().attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.headers.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow
++			.attr({
++				"aria-expanded": "true",
++				"aria-hidden": "false"
++			})
++			.prev()
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++	},
++
++	_animate: function( toShow, toHide, data ) {
++		var total, easing, duration,
++			that = this,
++			adjust = 0,
++			down = toShow.length &&
++				( !toHide.length || ( toShow.index() < toHide.index() ) ),
++			animate = this.options.animate || {},
++			options = down && animate.down || animate,
++			complete = function() {
++				that._toggleComplete( data );
++			};
++
++		if ( typeof options === "number" ) {
++			duration = options;
++		}
++		if ( typeof options === "string" ) {
++			easing = options;
++		}
++		// fall back from options to animation in case of partial down settings
++		easing = easing || options.easing || animate.easing;
++		duration = duration || options.duration || animate.duration;
++
++		if ( !toHide.length ) {
++			return toShow.animate( showProps, duration, easing, complete );
++		}
++		if ( !toShow.length ) {
++			return toHide.animate( hideProps, duration, easing, complete );
++		}
++
++		total = toShow.show().outerHeight();
++		toHide.animate( hideProps, {
++			duration: duration,
++			easing: easing,
++			step: function( now, fx ) {
++				fx.now = Math.round( now );
++			}
++		});
++		toShow
++			.hide()
++			.animate( showProps, {
++				duration: duration,
++				easing: easing,
++				complete: complete,
++				step: function( now, fx ) {
++					fx.now = Math.round( now );
++					if ( fx.prop !== "height" ) {
++						adjust += fx.now;
++					} else if ( that.options.heightStyle !== "content" ) {
++						fx.now = Math.round( total - toHide.outerHeight() - adjust );
++						adjust = 0;
++					}
++				}
++			});
++	},
++
++	_toggleComplete: function( data ) {
++		var toHide = data.oldPanel;
++
++		toHide
++			.removeClass( "ui-accordion-content-active" )
++			.prev()
++				.removeClass( "ui-corner-top" )
++				.addClass( "ui-corner-all" );
++
++		// Work around for rendering bug in IE (#5421)
++		if ( toHide.length ) {
++			toHide.parent()[0].className = toHide.parent()[0].className;
++		}
++
++		this._trigger( "activate", null, data );
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++// used to prevent race conditions with remote data sources
++var requestIndex = 0;
++
++$.widget( "ui.autocomplete", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	options: {
++		appendTo: null,
++		autoFocus: false,
++		delay: 300,
++		minLength: 1,
++		position: {
++			my: "left top",
++			at: "left bottom",
++			collision: "none"
++		},
++		source: null,
++
++		// callbacks
++		change: null,
++		close: null,
++		focus: null,
++		open: null,
++		response: null,
++		search: null,
++		select: null
++	},
++
++	pending: 0,
++
++	_create: function() {
++		// Some browsers only repeat keydown events, not keypress events,
++		// so we use the suppressKeyPress flag to determine if we've already
++		// handled the keydown event. #7269
++		// Unfortunately the code for & in keypress is the same as the up arrow,
++		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
++		// events when we know the keydown event was used to modify the
++		// search term. #7799
++		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
++			nodeName = this.element[0].nodeName.toLowerCase(),
++			isTextarea = nodeName === "textarea",
++			isInput = nodeName === "input";
++
++		this.isMultiLine =
++			// Textareas are always multi-line
++			isTextarea ? true :
++			// Inputs are always single-line, even if inside a contentEditable element
++			// IE also treats inputs as contentEditable
++			isInput ? false :
++			// All other element types are determined by whether or not they're contentEditable
++			this.element.prop( "isContentEditable" );
++
++		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
++		this.isNewMenu = true;
++
++		this.element
++			.addClass( "ui-autocomplete-input" )
++			.attr( "autocomplete", "off" );
++
++		this._on( this.element, {
++			keydown: function( event ) {
++				/*jshint maxcomplexity:15*/
++				if ( this.element.prop( "readOnly" ) ) {
++					suppressKeyPress = true;
++					suppressInput = true;
++					suppressKeyPressRepeat = true;
++					return;
++				}
++
++				suppressKeyPress = false;
++				suppressInput = false;
++				suppressKeyPressRepeat = false;
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					suppressKeyPress = true;
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					suppressKeyPress = true;
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					suppressKeyPress = true;
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					suppressKeyPress = true;
++					this._keyEvent( "next", event );
++					break;
++				case keyCode.ENTER:
++				case keyCode.NUMPAD_ENTER:
++					// when menu is open and has focus
++					if ( this.menu.active ) {
++						// #6055 - Opera still allows the keypress to occur
++						// which causes forms to submit
++						suppressKeyPress = true;
++						event.preventDefault();
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.TAB:
++					if ( this.menu.active ) {
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.ESCAPE:
++					if ( this.menu.element.is( ":visible" ) ) {
++						this._value( this.term );
++						this.close( event );
++						// Different browsers have different default behavior for escape
++						// Single press can mean undo or clear
++						// Double press in IE means clear the whole form
++						event.preventDefault();
++					}
++					break;
++				default:
++					suppressKeyPressRepeat = true;
++					// search timeout should be triggered before the input value is changed
++					this._searchTimeout( event );
++					break;
++				}
++			},
++			keypress: function( event ) {
++				if ( suppressKeyPress ) {
++					suppressKeyPress = false;
++					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++						event.preventDefault();
++					}
++					return;
++				}
++				if ( suppressKeyPressRepeat ) {
++					return;
++				}
++
++				// replicate some key handlers to allow them to repeat in Firefox and Opera
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					this._keyEvent( "next", event );
++					break;
++				}
++			},
++			input: function( event ) {
++				if ( suppressInput ) {
++					suppressInput = false;
++					event.preventDefault();
++					return;
++				}
++				this._searchTimeout( event );
++			},
++			focus: function() {
++				this.selectedItem = null;
++				this.previous = this._value();
++			},
++			blur: function( event ) {
++				if ( this.cancelBlur ) {
++					delete this.cancelBlur;
++					return;
++				}
++
++				clearTimeout( this.searching );
++				this.close( event );
++				this._change( event );
++			}
++		});
++
++		this._initSource();
++		this.menu = $( "<ul>" )
++			.addClass( "ui-autocomplete ui-front" )
++			.appendTo( this._appendTo() )
++			.menu({
++				// disable ARIA support, the live region takes care of that
++				role: null
++			})
++			.hide()
++			.data( "ui-menu" );
++
++		this._on( this.menu.element, {
++			mousedown: function( event ) {
++				// prevent moving focus out of the text field
++				event.preventDefault();
++
++				// IE doesn't prevent moving focus even with event.preventDefault()
++				// so we set a flag to know when we should ignore the blur event
++				this.cancelBlur = true;
++				this._delay(function() {
++					delete this.cancelBlur;
++				});
++
++				// clicking on the scrollbar causes focus to shift to the body
++				// but we can't detect a mouseup or a click immediately afterward
++				// so we have to track the next mousedown and close the menu if
++				// the user clicks somewhere outside of the autocomplete
++				var menuElement = this.menu.element[ 0 ];
++				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
++					this._delay(function() {
++						var that = this;
++						this.document.one( "mousedown", function( event ) {
++							if ( event.target !== that.element[ 0 ] &&
++									event.target !== menuElement &&
++									!$.contains( menuElement, event.target ) ) {
++								that.close();
++							}
++						});
++					});
++				}
++			},
++			menufocus: function( event, ui ) {
++				// support: Firefox
++				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
++				if ( this.isNewMenu ) {
++					this.isNewMenu = false;
++					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
++						this.menu.blur();
++
++						this.document.one( "mousemove", function() {
++							$( event.target ).trigger( event.originalEvent );
++						});
++
++						return;
++					}
++				}
++
++				var item = ui.item.data( "ui-autocomplete-item" );
++				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
++					// use value to match what will end up in the input, if it was a key event
++					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
++						this._value( item.value );
++					}
++				} else {
++					// Normally the input is populated with the item's value as the
++					// menu is navigated, causing screen readers to notice a change and
++					// announce the item. Since the focus event was canceled, this doesn't
++					// happen, so we update the live region so that screen readers can
++					// still notice the change and announce it.
++					this.liveRegion.text( item.value );
++				}
++			},
++			menuselect: function( event, ui ) {
++				var item = ui.item.data( "ui-autocomplete-item" ),
++					previous = this.previous;
++
++				// only trigger when focus was lost (click on menu)
++				if ( this.element[0] !== this.document[0].activeElement ) {
++					this.element.focus();
++					this.previous = previous;
++					// #6109 - IE triggers two focus events and the second
++					// is asynchronous, so we need to reset the previous
++					// term synchronously and asynchronously :-(
++					this._delay(function() {
++						this.previous = previous;
++						this.selectedItem = item;
++					});
++				}
++
++				if ( false !== this._trigger( "select", event, { item: item } ) ) {
++					this._value( item.value );
++				}
++				// reset the term after the select event
++				// this allows custom select handling to work properly
++				this.term = this._value();
++
++				this.close( event );
++				this.selectedItem = item;
++			}
++		});
++
++		this.liveRegion = $( "<span>", {
++				role: "status",
++				"aria-live": "polite"
++			})
++			.addClass( "ui-helper-hidden-accessible" )
++			.insertBefore( this.element );
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_destroy: function() {
++		clearTimeout( this.searching );
++		this.element
++			.removeClass( "ui-autocomplete-input" )
++			.removeAttr( "autocomplete" );
++		this.menu.element.remove();
++		this.liveRegion.remove();
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "source" ) {
++			this._initSource();
++		}
++		if ( key === "appendTo" ) {
++			this.menu.element.appendTo( this._appendTo() );
++		}
++		if ( key === "disabled" && value && this.xhr ) {
++			this.xhr.abort();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++
++		if ( element ) {
++			element = element.jquery || element.nodeType ?
++				$( element ) :
++				this.document.find( element ).eq( 0 );
++		}
++
++		if ( !element ) {
++			element = this.element.closest( ".ui-front" );
++		}
++
++		if ( !element.length ) {
++			element = this.document[0].body;
++		}
++
++		return element;
++	},
++
++	_initSource: function() {
++		var array, url,
++			that = this;
++		if ( $.isArray(this.options.source) ) {
++			array = this.options.source;
++			this.source = function( request, response ) {
++				response( $.ui.autocomplete.filter( array, request.term ) );
++			};
++		} else if ( typeof this.options.source === "string" ) {
++			url = this.options.source;
++			this.source = function( request, response ) {
++				if ( that.xhr ) {
++					that.xhr.abort();
++				}
++				that.xhr = $.ajax({
++					url: url,
++					data: request,
++					dataType: "json",
++					success: function( data ) {
++						response( data );
++					},
++					error: function() {
++						response( [] );
++					}
++				});
++			};
++		} else {
++			this.source = this.options.source;
++		}
++	},
++
++	_searchTimeout: function( event ) {
++		clearTimeout( this.searching );
++		this.searching = this._delay(function() {
++			// only search if the value has changed
++			if ( this.term !== this._value() ) {
++				this.selectedItem = null;
++				this.search( null, event );
++			}
++		}, this.options.delay );
++	},
++
++	search: function( value, event ) {
++		value = value != null ? value : this._value();
++
++		// always save the actual value, not the one passed as an argument
++		this.term = this._value();
++
++		if ( value.length < this.options.minLength ) {
++			return this.close( event );
++		}
++
++		if ( this._trigger( "search", event ) === false ) {
++			return;
++		}
++
++		return this._search( value );
++	},
++
++	_search: function( value ) {
++		this.pending++;
++		this.element.addClass( "ui-autocomplete-loading" );
++		this.cancelSearch = false;
++
++		this.source( { term: value }, this._response() );
++	},
++
++	_response: function() {
++		var that = this,
++			index = ++requestIndex;
++
++		return function( content ) {
++			if ( index === requestIndex ) {
++				that.__response( content );
++			}
++
++			that.pending--;
++			if ( !that.pending ) {
++				that.element.removeClass( "ui-autocomplete-loading" );
++			}
++		};
++	},
++
++	__response: function( content ) {
++		if ( content ) {
++			content = this._normalize( content );
++		}
++		this._trigger( "response", null, { content: content } );
++		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
++			this._suggest( content );
++			this._trigger( "open" );
++		} else {
++			// use ._close() instead of .close() so we don't cancel future searches
++			this._close();
++		}
++	},
++
++	close: function( event ) {
++		this.cancelSearch = true;
++		this._close( event );
++	},
++
++	_close: function( event ) {
++		if ( this.menu.element.is( ":visible" ) ) {
++			this.menu.element.hide();
++			this.menu.blur();
++			this.isNewMenu = true;
++			this._trigger( "close", event );
++		}
++	},
++
++	_change: function( event ) {
++		if ( this.previous !== this._value() ) {
++			this._trigger( "change", event, { item: this.selectedItem } );
++		}
++	},
++
++	_normalize: function( items ) {
++		// assume all items have the right format when the first item is complete
++		if ( items.length && items[0].label && items[0].value ) {
++			return items;
++		}
++		return $.map( items, function( item ) {
++			if ( typeof item === "string" ) {
++				return {
++					label: item,
++					value: item
++				};
++			}
++			return $.extend({
++				label: item.label || item.value,
++				value: item.value || item.label
++			}, item );
++		});
++	},
++
++	_suggest: function( items ) {
++		var ul = this.menu.element.empty();
++		this._renderMenu( ul, items );
++		this.isNewMenu = true;
++		this.menu.refresh();
++
++		// size and position menu
++		ul.show();
++		this._resizeMenu();
++		ul.position( $.extend({
++			of: this.element
++		}, this.options.position ));
++
++		if ( this.options.autoFocus ) {
++			this.menu.next();
++		}
++	},
++
++	_resizeMenu: function() {
++		var ul = this.menu.element;
++		ul.outerWidth( Math.max(
++			// Firefox wraps long text (possibly a rounding bug)
++			// so we add 1px to avoid the wrapping (#7513)
++			ul.width( "" ).outerWidth() + 1,
++			this.element.outerWidth()
++		) );
++	},
++
++	_renderMenu: function( ul, items ) {
++		var that = this;
++		$.each( items, function( index, item ) {
++			that._renderItemData( ul, item );
++		});
++	},
++
++	_renderItemData: function( ul, item ) {
++		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
++	},
++
++	_renderItem: function( ul, item ) {
++		return $( "<li>" )
++			.append( $( "<a>" ).text( item.label ) )
++			.appendTo( ul );
++	},
++
++	_move: function( direction, event ) {
++		if ( !this.menu.element.is( ":visible" ) ) {
++			this.search( null, event );
++			return;
++		}
++		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
++				this.menu.isLastItem() && /^next/.test( direction ) ) {
++			this._value( this.term );
++			this.menu.blur();
++			return;
++		}
++		this.menu[ direction ]( event );
++	},
++
++	widget: function() {
++		return this.menu.element;
++	},
++
++	_value: function() {
++		return this.valueMethod.apply( this.element, arguments );
++	},
++
++	_keyEvent: function( keyEvent, event ) {
++		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++			this._move( keyEvent, event );
++
++			// prevents moving cursor to beginning/end of the text field in some browsers
++			event.preventDefault();
++		}
++	}
++});
++
++$.extend( $.ui.autocomplete, {
++	escapeRegex: function( value ) {
++		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
++	},
++	filter: function(array, term) {
++		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
++		return $.grep( array, function(value) {
++			return matcher.test( value.label || value.value || value );
++		});
++	}
++});
++
++
++// live region extension, adding a `messages` option
++// NOTE: This is an experimental API. We are still investigating
++// a full solution for string manipulation and internationalization.
++$.widget( "ui.autocomplete", $.ui.autocomplete, {
++	options: {
++		messages: {
++			noResults: "No search results.",
++			results: function( amount ) {
++				return amount + ( amount > 1 ? " results are" : " result is" ) +
++					" available, use up and down arrow keys to navigate.";
++			}
++		}
++	},
++
++	__response: function( content ) {
++		var message;
++		this._superApply( arguments );
++		if ( this.options.disabled || this.cancelSearch ) {
++			return;
++		}
++		if ( content && content.length ) {
++			message = this.options.messages.results( content.length );
++		} else {
++			message = this.options.messages.noResults;
++		}
++		this.liveRegion.text( message );
++	}
++});
++
++}( jQuery ));
++(function( $, undefined ) {
++
++var lastActive, startXPos, startYPos, clickDragged,
++	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
++	stateClasses = "ui-state-hover ui-state-active ",
++	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
++	formResetHandler = function() {
++		var form = $( this );
++		setTimeout(function() {
++			form.find( ":ui-button" ).button( "refresh" );
++		}, 1 );
++	},
++	radioGroup = function( radio ) {
++		var name = radio.name,
++			form = radio.form,
++			radios = $( [] );
++		if ( name ) {
++			name = name.replace( /'/g, "\\'" );
++			if ( form ) {
++				radios = $( form ).find( "[name='" + name + "']" );
++			} else {
++				radios = $( "[name='" + name + "']", radio.ownerDocument )
++					.filter(function() {
++						return !this.form;
++					});
++			}
++		}
++		return radios;
++	};
++
++$.widget( "ui.button", {
++	version: "1.10.3",
++	defaultElement: "<button>",
++	options: {
++		disabled: null,
++		text: true,
++		label: null,
++		icons: {
++			primary: null,
++			secondary: null
++		}
++	},
++	_create: function() {
++		this.element.closest( "form" )
++			.unbind( "reset" + this.eventNamespace )
++			.bind( "reset" + this.eventNamespace, formResetHandler );
++
++		if ( typeof this.options.disabled !== "boolean" ) {
++			this.options.disabled = !!this.element.prop( "disabled" );
++		} else {
++			this.element.prop( "disabled", this.options.disabled );
++		}
++
++		this._determineButtonType();
++		this.hasTitle = !!this.buttonElement.attr( "title" );
++
++		var that = this,
++			options = this.options,
++			toggleButton = this.type === "checkbox" || this.type === "radio",
++			activeClass = !toggleButton ? "ui-state-active" : "",
++			focusClass = "ui-state-focus";
++
++		if ( options.label === null ) {
++			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
++		}
++
++		this._hoverable( this.buttonElement );
++
++		this.buttonElement
++			.addClass( baseClasses )
++			.attr( "role", "button" )
++			.bind( "mouseenter" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				if ( this === lastActive ) {
++					$( this ).addClass( "ui-state-active" );
++				}
++			})
++			.bind( "mouseleave" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( activeClass );
++			})
++			.bind( "click" + this.eventNamespace, function( event ) {
++				if ( options.disabled ) {
++					event.preventDefault();
++					event.stopImmediatePropagation();
++				}
++			});
++
++		this.element
++			.bind( "focus" + this.eventNamespace, function() {
++				// no need to check disabled, focus won't be triggered anyway
++				that.buttonElement.addClass( focusClass );
++			})
++			.bind( "blur" + this.eventNamespace, function() {
++				that.buttonElement.removeClass( focusClass );
++			});
++
++		if ( toggleButton ) {
++			this.element.bind( "change" + this.eventNamespace, function() {
++				if ( clickDragged ) {
++					return;
++				}
++				that.refresh();
++			});
++			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
++			// prevents issue where button state changes but checkbox/radio checked state
++			// does not in Firefox (see ticket #6970)
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					clickDragged = false;
++					startXPos = event.pageX;
++					startYPos = event.pageY;
++				})
++				.bind( "mouseup" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
++						clickDragged = true;
++					}
++			});
++		}
++
++		if ( this.type === "checkbox" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++			});
++		} else if ( this.type === "radio" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).addClass( "ui-state-active" );
++				that.buttonElement.attr( "aria-pressed", "true" );
++
++				var radio = that.element[ 0 ];
++				radioGroup( radio )
++					.not( radio )
++					.map(function() {
++						return $( this ).button( "widget" )[ 0 ];
++					})
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			});
++		} else {
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).addClass( "ui-state-active" );
++					lastActive = this;
++					that.document.one( "mouseup", function() {
++						lastActive = null;
++					});
++				})
++				.bind( "mouseup" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).removeClass( "ui-state-active" );
++				})
++				.bind( "keydown" + this.eventNamespace, function(event) {
++					if ( options.disabled ) {
++						return false;
++					}
++					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
++						$( this ).addClass( "ui-state-active" );
++					}
++				})
++				// see #8559, we bind to blur here in case the button element loses
++				// focus between keydown and keyup, it would be left in an "active" state
++				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
++					$( this ).removeClass( "ui-state-active" );
++				});
++
++			if ( this.buttonElement.is("a") ) {
++				this.buttonElement.keyup(function(event) {
++					if ( event.keyCode === $.ui.keyCode.SPACE ) {
++						// TODO pass through original event correctly (just as 2nd argument doesn't work)
++						$( this ).click();
++					}
++				});
++			}
++		}
++
++		// TODO: pull out $.Widget's handling for the disabled option into
++		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
++		// be overridden by individual plugins
++		this._setOption( "disabled", options.disabled );
++		this._resetButton();
++	},
++
++	_determineButtonType: function() {
++		var ancestor, labelSelector, checked;
++
++		if ( this.element.is("[type=checkbox]") ) {
++			this.type = "checkbox";
++		} else if ( this.element.is("[type=radio]") ) {
++			this.type = "radio";
++		} else if ( this.element.is("input") ) {
++			this.type = "input";
++		} else {
++			this.type = "button";
++		}
++
++		if ( this.type === "checkbox" || this.type === "radio" ) {
++			// we don't search against the document in case the element
++			// is disconnected from the DOM
++			ancestor = this.element.parents().last();
++			labelSelector = "label[for='" + this.element.attr("id") + "']";
++			this.buttonElement = ancestor.find( labelSelector );
++			if ( !this.buttonElement.length ) {
++				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
++				this.buttonElement = ancestor.filter( labelSelector );
++				if ( !this.buttonElement.length ) {
++					this.buttonElement = ancestor.find( labelSelector );
++				}
++			}
++			this.element.addClass( "ui-helper-hidden-accessible" );
++
++			checked = this.element.is( ":checked" );
++			if ( checked ) {
++				this.buttonElement.addClass( "ui-state-active" );
++			}
++			this.buttonElement.prop( "aria-pressed", checked );
++		} else {
++			this.buttonElement = this.element;
++		}
++	},
++
++	widget: function() {
++		return this.buttonElement;
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-helper-hidden-accessible" );
++		this.buttonElement
++			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
++			.removeAttr( "role" )
++			.removeAttr( "aria-pressed" )
++			.html( this.buttonElement.find(".ui-button-text").html() );
++
++		if ( !this.hasTitle ) {
++			this.buttonElement.removeAttr( "title" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++			} else {
++				this.element.prop( "disabled", false );
++			}
++			return;
++		}
++		this._resetButton();
++	},
++
++	refresh: function() {
++		//See #8237 & #8828
++		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
++
++		if ( isDisabled !== this.options.disabled ) {
++			this._setOption( "disabled", isDisabled );
++		}
++		if ( this.type === "radio" ) {
++			radioGroup( this.element[0] ).each(function() {
++				if ( $( this ).is( ":checked" ) ) {
++					$( this ).button( "widget" )
++						.addClass( "ui-state-active" )
++						.attr( "aria-pressed", "true" );
++				} else {
++					$( this ).button( "widget" )
++						.removeClass( "ui-state-active" )
++						.attr( "aria-pressed", "false" );
++				}
++			});
++		} else if ( this.type === "checkbox" ) {
++			if ( this.element.is( ":checked" ) ) {
++				this.buttonElement
++					.addClass( "ui-state-active" )
++					.attr( "aria-pressed", "true" );
++			} else {
++				this.buttonElement
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			}
++		}
++	},
++
++	_resetButton: function() {
++		if ( this.type === "input" ) {
++			if ( this.options.label ) {
++				this.element.val( this.options.label );
++			}
++			return;
++		}
++		var buttonElement = this.buttonElement.removeClass( typeClasses ),
++			buttonText = $( "<span></span>", this.document[0] )
++				.addClass( "ui-button-text" )
++				.html( this.options.label )
++				.appendTo( buttonElement.empty() )
++				.text(),
++			icons = this.options.icons,
++			multipleIcons = icons.primary && icons.secondary,
++			buttonClasses = [];
++
++		if ( icons.primary || icons.secondary ) {
++			if ( this.options.text ) {
++				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
++			}
++
++			if ( icons.primary ) {
++				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
++			}
++
++			if ( icons.secondary ) {
++				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
++			}
++
++			if ( !this.options.text ) {
++				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
++
++				if ( !this.hasTitle ) {
++					buttonElement.attr( "title", $.trim( buttonText ) );
++				}
++			}
++		} else {
++			buttonClasses.push( "ui-button-text-only" );
++		}
++		buttonElement.addClass( buttonClasses.join( " " ) );
++	}
++});
++
++$.widget( "ui.buttonset", {
++	version: "1.10.3",
++	options: {
++		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
++	},
++
++	_create: function() {
++		this.element.addClass( "ui-buttonset" );
++	},
++
++	_init: function() {
++		this.refresh();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "disabled" ) {
++			this.buttons.button( "option", key, value );
++		}
++
++		this._super( key, value );
++	},
++
++	refresh: function() {
++		var rtl = this.element.css( "direction" ) === "rtl";
++
++		this.buttons = this.element.find( this.options.items )
++			.filter( ":ui-button" )
++				.button( "refresh" )
++			.end()
++			.not( ":ui-button" )
++				.button()
++			.end()
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
++				.filter( ":first" )
++					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
++				.end()
++				.filter( ":last" )
++					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
++				.end()
++			.end();
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-buttonset" );
++		this.buttons
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-left ui-corner-right" )
++			.end()
++			.button( "destroy" );
++	}
++});
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.extend($.ui, { datepicker: { version: "1.10.3" } });
++
++var PROP_NAME = "datepicker",
++	instActive;
++
++/* Date picker manager.
++   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
++   Settings for (groups of) date pickers are maintained in an instance object,
++   allowing multiple different settings on the same page. */
++
++function Datepicker() {
++	this._curInst = null; // The current instance in use
++	this._keyEvent = false; // If the last event was a key event
++	this._disabledInputs = []; // List of date picker inputs that have been disabled
++	this._datepickerShowing = false; // True if the popup picker is showing , false if not
++	this._inDialog = false; // True if showing within a "dialog", false if not
++	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
++	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
++	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
++	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
++	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
++	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
++	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
++	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
++	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
++	this.regional = []; // Available regional settings, indexed by language code
++	this.regional[""] = { // Default regional settings
++		closeText: "Done", // Display text for close link
++		prevText: "Prev", // Display text for previous month link
++		nextText: "Next", // Display text for next month link
++		currentText: "Today", // Display text for current month link
++		monthNames: ["January","February","March","April","May","June",
++			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
++		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
++		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
++		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
++		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
++		weekHeader: "Wk", // Column header for week of the year
++		dateFormat: "mm/dd/yy", // See format options on parseDate
++		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
++		isRTL: false, // True if right-to-left language, false if left-to-right
++		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
++		yearSuffix: "" // Additional text to append to the year in the month headers
++	};
++	this._defaults = { // Global defaults for all the date picker instances
++		showOn: "focus", // "focus" for popup on focus,
++			// "button" for trigger button, or "both" for either
++		showAnim: "fadeIn", // Name of jQuery animation for popup
++		showOptions: {}, // Options for enhanced animations
++		defaultDate: null, // Used when field is blank: actual date,
++			// +/-number for offset from today, null for today
++		appendText: "", // Display text following the input box, e.g. showing the format
++		buttonText: "...", // Text for trigger button
++		buttonImage: "", // URL for trigger button image
++		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
++		hideIfNoPrevNext: false, // True to hide next/previous month links
++			// if not applicable, false to just disable them
++		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
++		gotoCurrent: false, // True if today link goes back to current selection instead
++		changeMonth: false, // True if month can be selected directly, false if only prev/next
++		changeYear: false, // True if year can be selected directly, false if only prev/next
++		yearRange: "c-10:c+10", // Range of years to display in drop-down,
++			// either relative to today's year (-nn:+nn), relative to currently displayed year
++			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
++		showOtherMonths: false, // True to show dates in other months, false to leave blank
++		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
++		showWeek: false, // True to show week of the year, false to not show it
++		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
++			// takes a Date and returns the number of the week for it
++		shortYearCutoff: "+10", // Short year values < this are in the current century,
++			// > this are in the previous century,
++			// string value starting with "+" for current year + value
++		minDate: null, // The earliest selectable date, or null for no limit
++		maxDate: null, // The latest selectable date, or null for no limit
++		duration: "fast", // Duration of display/closure
++		beforeShowDay: null, // Function that takes a date and returns an array with
++			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
++			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
++		beforeShow: null, // Function that takes an input field and
++			// returns a set of custom settings for the date picker
++		onSelect: null, // Define a callback function when a date is selected
++		onChangeMonthYear: null, // Define a callback function when the month or year is changed
++		onClose: null, // Define a callback function when the datepicker is closed
++		numberOfMonths: 1, // Number of months to show at a time
++		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
++		stepMonths: 1, // Number of months to step back/forward
++		stepBigMonths: 12, // Number of months to step back/forward for the big links
++		altField: "", // Selector for an alternate field to store selected dates into
++		altFormat: "", // The date format to use for the alternate field
++		constrainInput: true, // The input is constrained by the current date format
++		showButtonPanel: false, // True to show button panel, false to not show it
++		autoSize: false, // True to size the input for the date format, false to leave as is
++		disabled: false // The initial disabled state
++	};
++	$.extend(this._defaults, this.regional[""]);
++	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
++}
++
++$.extend(Datepicker.prototype, {
++	/* Class name added to elements to indicate already configured with a date picker. */
++	markerClassName: "hasDatepicker",
++
++	//Keep track of the maximum number of rows displayed (see #7043)
++	maxRows: 4,
++
++	// TODO rename to "widget" when switching to widget factory
++	_widgetDatepicker: function() {
++		return this.dpDiv;
++	},
++
++	/* Override the default settings for all instances of the date picker.
++	 * @param  settings  object - the new settings to use as defaults (anonymous object)
++	 * @return the manager object
++	 */
++	setDefaults: function(settings) {
++		extendRemove(this._defaults, settings || {});
++		return this;
++	},
++
++	/* Attach the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
++	 */
++	_attachDatepicker: function(target, settings) {
++		var nodeName, inline, inst;
++		nodeName = target.nodeName.toLowerCase();
++		inline = (nodeName === "div" || nodeName === "span");
++		if (!target.id) {
++			this.uuid += 1;
++			target.id = "dp" + this.uuid;
++		}
++		inst = this._newInst($(target), inline);
++		inst.settings = $.extend({}, settings || {});
++		if (nodeName === "input") {
++			this._connectDatepicker(target, inst);
++		} else if (inline) {
++			this._inlineDatepicker(target, inst);
++		}
++	},
++
++	/* Create a new instance object. */
++	_newInst: function(target, inline) {
++		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
++		return {id: id, input: target, // associated target
++			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
++			drawMonth: 0, drawYear: 0, // month being drawn
++			inline: inline, // is datepicker inline or not
++			dpDiv: (!inline ? this.dpDiv : // presentation div
++			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
++	},
++
++	/* Attach the date picker to an input field. */
++	_connectDatepicker: function(target, inst) {
++		var input = $(target);
++		inst.append = $([]);
++		inst.trigger = $([]);
++		if (input.hasClass(this.markerClassName)) {
++			return;
++		}
++		this._attachments(input, inst);
++		input.addClass(this.markerClassName).keydown(this._doKeyDown).
++			keypress(this._doKeyPress).keyup(this._doKeyUp);
++		this._autoSize(inst);
++		$.data(target, PROP_NAME, inst);
++		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++	},
++
++	/* Make attachments based on settings. */
++	_attachments: function(input, inst) {
++		var showOn, buttonText, buttonImage,
++			appendText = this._get(inst, "appendText"),
++			isRTL = this._get(inst, "isRTL");
++
++		if (inst.append) {
++			inst.append.remove();
++		}
++		if (appendText) {
++			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
++			input[isRTL ? "before" : "after"](inst.append);
++		}
++
++		input.unbind("focus", this._showDatepicker);
++
++		if (inst.trigger) {
++			inst.trigger.remove();
++		}
++
++		showOn = this._get(inst, "showOn");
++		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
++			input.focus(this._showDatepicker);
++		}
++		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
++			buttonText = this._get(inst, "buttonText");
++			buttonImage = this._get(inst, "buttonImage");
++			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
++				$("<img/>").addClass(this._triggerClass).
++					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
++				$("<button type='button'></button>").addClass(this._triggerClass).
++					html(!buttonImage ? buttonText : $("<img/>").attr(
++					{ src:buttonImage, alt:buttonText, title:buttonText })));
++			input[isRTL ? "before" : "after"](inst.trigger);
++			inst.trigger.click(function() {
++				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
++					$.datepicker._hideDatepicker();
++				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
++					$.datepicker._hideDatepicker();
++					$.datepicker._showDatepicker(input[0]);
++				} else {
++					$.datepicker._showDatepicker(input[0]);
++				}
++				return false;
++			});
++		}
++	},
++
++	/* Apply the maximum length for the date format. */
++	_autoSize: function(inst) {
++		if (this._get(inst, "autoSize") && !inst.inline) {
++			var findMax, max, maxI, i,
++				date = new Date(2009, 12 - 1, 20), // Ensure double digits
++				dateFormat = this._get(inst, "dateFormat");
++
++			if (dateFormat.match(/[DM]/)) {
++				findMax = function(names) {
++					max = 0;
++					maxI = 0;
++					for (i = 0; i < names.length; i++) {
++						if (names[i].length > max) {
++							max = names[i].length;
++							maxI = i;
++						}
++					}
++					return maxI;
++				};
++				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
++					"monthNames" : "monthNamesShort"))));
++				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
++					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
++			}
++			inst.input.attr("size", this._formatDate(inst, date).length);
++		}
++	},
++
++	/* Attach an inline date picker to a div. */
++	_inlineDatepicker: function(target, inst) {
++		var divSpan = $(target);
++		if (divSpan.hasClass(this.markerClassName)) {
++			return;
++		}
++		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
++		$.data(target, PROP_NAME, inst);
++		this._setDate(inst, this._getDefaultDate(inst), true);
++		this._updateDatepicker(inst);
++		this._updateAlternate(inst);
++		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
++		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
++		inst.dpDiv.css( "display", "block" );
++	},
++
++	/* Pop-up the date picker in a "dialog" box.
++	 * @param  input element - ignored
++	 * @param  date	string or Date - the initial date to display
++	 * @param  onSelect  function - the function to call when a date is selected
++	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
++	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
++	 *					event - with x/y coordinates or
++	 *					leave empty for default (screen centre)
++	 * @return the manager object
++	 */
++	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
++		var id, browserWidth, browserHeight, scrollX, scrollY,
++			inst = this._dialogInst; // internal instance
++
++		if (!inst) {
++			this.uuid += 1;
++			id = "dp" + this.uuid;
++			this._dialogInput = $("<input type='text' id='" + id +
++				"' style='position: absolute; top: -100px; width: 0px;'/>");
++			this._dialogInput.keydown(this._doKeyDown);
++			$("body").append(this._dialogInput);
++			inst = this._dialogInst = this._newInst(this._dialogInput, false);
++			inst.settings = {};
++			$.data(this._dialogInput[0], PROP_NAME, inst);
++		}
++		extendRemove(inst.settings, settings || {});
++		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
++		this._dialogInput.val(date);
++
++		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
++		if (!this._pos) {
++			browserWidth = document.documentElement.clientWidth;
++			browserHeight = document.documentElement.clientHeight;
++			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
++			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
++			this._pos = // should use actual width/height below
++				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
++		}
++
++		// move input on screen for focus, but hidden behind dialog
++		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
++		inst.settings.onSelect = onSelect;
++		this._inDialog = true;
++		this.dpDiv.addClass(this._dialogClass);
++		this._showDatepicker(this._dialogInput[0]);
++		if ($.blockUI) {
++			$.blockUI(this.dpDiv);
++		}
++		$.data(this._dialogInput[0], PROP_NAME, inst);
++		return this;
++	},
++
++	/* Detach a datepicker from its control.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_destroyDatepicker: function(target) {
++		var nodeName,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		$.removeData(target, PROP_NAME);
++		if (nodeName === "input") {
++			inst.append.remove();
++			inst.trigger.remove();
++			$target.removeClass(this.markerClassName).
++				unbind("focus", this._showDatepicker).
++				unbind("keydown", this._doKeyDown).
++				unbind("keypress", this._doKeyPress).
++				unbind("keyup", this._doKeyUp);
++		} else if (nodeName === "div" || nodeName === "span") {
++			$target.removeClass(this.markerClassName).empty();
++		}
++	},
++
++	/* Enable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_enableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = false;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = false; }).end().
++				filter("img").css({opacity: "1.0", cursor: ""});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().removeClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", false);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++	},
++
++	/* Disable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_disableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = true;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = true; }).end().
++				filter("img").css({opacity: "0.5", cursor: "default"});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().addClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", true);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++		this._disabledInputs[this._disabledInputs.length] = target;
++	},
++
++	/* Is the first field in a jQuery collection disabled as a datepicker?
++	 * @param  target	element - the target input field or division or span
++	 * @return boolean - true if disabled, false if enabled
++	 */
++	_isDisabledDatepicker: function(target) {
++		if (!target) {
++			return false;
++		}
++		for (var i = 0; i < this._disabledInputs.length; i++) {
++			if (this._disabledInputs[i] === target) {
++				return true;
++			}
++		}
++		return false;
++	},
++
++	/* Retrieve the instance data for the target control.
++	 * @param  target  element - the target input field or division or span
++	 * @return  object - the associated instance data
++	 * @throws  error if a jQuery problem getting data
++	 */
++	_getInst: function(target) {
++		try {
++			return $.data(target, PROP_NAME);
++		}
++		catch (err) {
++			throw "Missing instance data for this datepicker";
++		}
++	},
++
++	/* Update or retrieve the settings for a date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 * @param  name	object - the new settings to update or
++	 *				string - the name of the setting to change or retrieve,
++	 *				when retrieving also "all" for all instance settings or
++	 *				"defaults" for all global defaults
++	 * @param  value   any - the new value for the setting
++	 *				(omit if above is an object or to retrieve a value)
++	 */
++	_optionDatepicker: function(target, name, value) {
++		var settings, date, minDate, maxDate,
++			inst = this._getInst(target);
++
++		if (arguments.length === 2 && typeof name === "string") {
++			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
++				(inst ? (name === "all" ? $.extend({}, inst.settings) :
++				this._get(inst, name)) : null));
++		}
++
++		settings = name || {};
++		if (typeof name === "string") {
++			settings = {};
++			settings[name] = value;
++		}
++
++		if (inst) {
++			if (this._curInst === inst) {
++				this._hideDatepicker();
++			}
++
++			date = this._getDateDatepicker(target, true);
++			minDate = this._getMinMaxDate(inst, "min");
++			maxDate = this._getMinMaxDate(inst, "max");
++			extendRemove(inst.settings, settings);
++			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
++			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
++				inst.settings.minDate = this._formatDate(inst, minDate);
++			}
++			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
++				inst.settings.maxDate = this._formatDate(inst, maxDate);
++			}
++			if ( "disabled" in settings ) {
++				if ( settings.disabled ) {
++					this._disableDatepicker(target);
++				} else {
++					this._enableDatepicker(target);
++				}
++			}
++			this._attachments($(target), inst);
++			this._autoSize(inst);
++			this._setDate(inst, date);
++			this._updateAlternate(inst);
++			this._updateDatepicker(inst);
++		}
++	},
++
++	// change method deprecated
++	_changeDatepicker: function(target, name, value) {
++		this._optionDatepicker(target, name, value);
++	},
++
++	/* Redraw the date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 */
++	_refreshDatepicker: function(target) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._updateDatepicker(inst);
++		}
++	},
++
++	/* Set the dates for a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  date	Date - the new date
++	 */
++	_setDateDatepicker: function(target, date) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._setDate(inst, date);
++			this._updateDatepicker(inst);
++			this._updateAlternate(inst);
++		}
++	},
++
++	/* Get the date(s) for the first entry in a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  noDefault boolean - true if no default date is to be used
++	 * @return Date - the current date
++	 */
++	_getDateDatepicker: function(target, noDefault) {
++		var inst = this._getInst(target);
++		if (inst && !inst.inline) {
++			this._setDateFromField(inst, noDefault);
++		}
++		return (inst ? this._getDate(inst) : null);
++	},
++
++	/* Handle keystrokes. */
++	_doKeyDown: function(event) {
++		var onSelect, dateStr, sel,
++			inst = $.datepicker._getInst(event.target),
++			handled = true,
++			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
++
++		inst._keyEvent = true;
++		if ($.datepicker._datepickerShowing) {
++			switch (event.keyCode) {
++				case 9: $.datepicker._hideDatepicker();
++						handled = false;
++						break; // hide on tab out
++				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
++									$.datepicker._currentClass + ")", inst.dpDiv);
++						if (sel[0]) {
++							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
++						}
++
++						onSelect = $.datepicker._get(inst, "onSelect");
++						if (onSelect) {
++							dateStr = $.datepicker._formatDate(inst);
++
++							// trigger custom callback
++							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++						} else {
++							$.datepicker._hideDatepicker();
++						}
++
++						return false; // don't submit the form
++				case 27: $.datepicker._hideDatepicker();
++						break; // hide on escape
++				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							-$.datepicker._get(inst, "stepBigMonths") :
++							-$.datepicker._get(inst, "stepMonths")), "M");
++						break; // previous month/year on page up/+ ctrl
++				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							+$.datepicker._get(inst, "stepBigMonths") :
++							+$.datepicker._get(inst, "stepMonths")), "M");
++						break; // next month/year on page down/+ ctrl
++				case 35: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._clearDate(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // clear on ctrl or command +end
++				case 36: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._gotoToday(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // current on ctrl or command +home
++				case 37: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// -1 day on ctrl or command +left
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								-$.datepicker._get(inst, "stepBigMonths") :
++								-$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +left on Mac
++						break;
++				case 38: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, -7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // -1 week on ctrl or command +up
++				case 39: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// +1 day on ctrl or command +right
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								+$.datepicker._get(inst, "stepBigMonths") :
++								+$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +right
++						break;
++				case 40: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, +7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // +1 week on ctrl or command +down
++				default: handled = false;
++			}
++		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
++			$.datepicker._showDatepicker(this);
++		} else {
++			handled = false;
++		}
++
++		if (handled) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++	},
++
++	/* Filter entered characters - based on date format. */
++	_doKeyPress: function(event) {
++		var chars, chr,
++			inst = $.datepicker._getInst(event.target);
++
++		if ($.datepicker._get(inst, "constrainInput")) {
++			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
++			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
++			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
++		}
++	},
++
++	/* Synchronise manual entry and field/alternate field. */
++	_doKeyUp: function(event) {
++		var date,
++			inst = $.datepicker._getInst(event.target);
++
++		if (inst.input.val() !== inst.lastVal) {
++			try {
++				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++					(inst.input ? inst.input.val() : null),
++					$.datepicker._getFormatConfig(inst));
++
++				if (date) { // only if valid
++					$.datepicker._setDateFromField(inst);
++					$.datepicker._updateAlternate(inst);
++					$.datepicker._updateDatepicker(inst);
++				}
++			}
++			catch (err) {
++			}
++		}
++		return true;
++	},
++
++	/* Pop-up the date picker for a given input field.
++	 * If false returned from beforeShow event handler do not show.
++	 * @param  input  element - the input field attached to the date picker or
++	 *					event - if triggered by focus
++	 */
++	_showDatepicker: function(input) {
++		input = input.target || input;
++		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
++			input = $("input", input.parentNode)[0];
++		}
++
++		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
++			return;
++		}
++
++		var inst, beforeShow, beforeShowSettings, isFixed,
++			offset, showAnim, duration;
++
++		inst = $.datepicker._getInst(input);
++		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
++			$.datepicker._curInst.dpDiv.stop(true, true);
++			if ( inst && $.datepicker._datepickerShowing ) {
++				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
++			}
++		}
++
++		beforeShow = $.datepicker._get(inst, "beforeShow");
++		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
++		if(beforeShowSettings === false){
++			return;
++		}
++		extendRemove(inst.settings, beforeShowSettings);
++
++		inst.lastVal = null;
++		$.datepicker._lastInput = input;
++		$.datepicker._setDateFromField(inst);
++
++		if ($.datepicker._inDialog) { // hide cursor
++			input.value = "";
++		}
++		if (!$.datepicker._pos) { // position below input
++			$.datepicker._pos = $.datepicker._findPos(input);
++			$.datepicker._pos[1] += input.offsetHeight; // add the height
++		}
++
++		isFixed = false;
++		$(input).parents().each(function() {
++			isFixed |= $(this).css("position") === "fixed";
++			return !isFixed;
++		});
++
++		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
++		$.datepicker._pos = null;
++		//to avoid flashes on Firefox
++		inst.dpDiv.empty();
++		// determine sizing offscreen
++		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
++		$.datepicker._updateDatepicker(inst);
++		// fix width for dynamic number of date pickers
++		// and adjust position before showing
++		offset = $.datepicker._checkOffset(inst, offset, isFixed);
++		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
++			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
++			left: offset.left + "px", top: offset.top + "px"});
++
++		if (!inst.inline) {
++			showAnim = $.datepicker._get(inst, "showAnim");
++			duration = $.datepicker._get(inst, "duration");
++			inst.dpDiv.zIndex($(input).zIndex()+1);
++			$.datepicker._datepickerShowing = true;
++
++			if ( $.effects && $.effects.effect[ showAnim ] ) {
++				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
++			} else {
++				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
++			}
++
++			if ( $.datepicker._shouldFocusInput( inst ) ) {
++				inst.input.focus();
++			}
++
++			$.datepicker._curInst = inst;
++		}
++	},
++
++	/* Generate the date picker content. */
++	_updateDatepicker: function(inst) {
++		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
++		instActive = inst; // for delegate hover events
++		inst.dpDiv.empty().append(this._generateHTML(inst));
++		this._attachHandlers(inst);
++		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
++
++		var origyearshtml,
++			numMonths = this._getNumberOfMonths(inst),
++			cols = numMonths[1],
++			width = 17;
++
++		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
++		if (cols > 1) {
++			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
++		}
++		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
++			"Class"]("ui-datepicker-multi");
++		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
++			"Class"]("ui-datepicker-rtl");
++
++		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
++			inst.input.focus();
++		}
++
++		// deffered render of the years select (to avoid flashes on Firefox)
++		if( inst.yearshtml ){
++			origyearshtml = inst.yearshtml;
++			setTimeout(function(){
++				//assure that inst.yearshtml didn't change.
++				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
++					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
++				}
++				origyearshtml = inst.yearshtml = null;
++			}, 0);
++		}
++	},
++
++	// #6694 - don't focus the input if it's already focused
++	// this breaks the change event in IE
++	// Support: IE and jQuery <1.9
++	_shouldFocusInput: function( inst ) {
++		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
++	},
++
++	/* Check positioning to remain on screen. */
++	_checkOffset: function(inst, offset, isFixed) {
++		var dpWidth = inst.dpDiv.outerWidth(),
++			dpHeight = inst.dpDiv.outerHeight(),
++			inputWidth = inst.input ? inst.input.outerWidth() : 0,
++			inputHeight = inst.input ? inst.input.outerHeight() : 0,
++			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
++			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
++
++		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
++		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
++		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
++
++		// now check if datepicker is showing outside window viewport - move to a better place if so.
++		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
++			Math.abs(offset.left + dpWidth - viewWidth) : 0);
++		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
++			Math.abs(dpHeight + inputHeight) : 0);
++
++		return offset;
++	},
++
++	/* Find an object's position on the screen. */
++	_findPos: function(obj) {
++		var position,
++			inst = this._getInst(obj),
++			isRTL = this._get(inst, "isRTL");
++
++		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
++			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
++		}
++
++		position = $(obj).offset();
++		return [position.left, position.top];
++	},
++
++	/* Hide the date picker from view.
++	 * @param  input  element - the input field attached to the date picker
++	 */
++	_hideDatepicker: function(input) {
++		var showAnim, duration, postProcess, onClose,
++			inst = this._curInst;
++
++		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
++			return;
++		}
++
++		if (this._datepickerShowing) {
++			showAnim = this._get(inst, "showAnim");
++			duration = this._get(inst, "duration");
++			postProcess = function() {
++				$.datepicker._tidyDialog(inst);
++			};
++
++			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
++			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
++				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
++			} else {
++				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
++					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
++			}
++
++			if (!showAnim) {
++				postProcess();
++			}
++			this._datepickerShowing = false;
++
++			onClose = this._get(inst, "onClose");
++			if (onClose) {
++				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
++			}
++
++			this._lastInput = null;
++			if (this._inDialog) {
++				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
++				if ($.blockUI) {
++					$.unblockUI();
++					$("body").append(this.dpDiv);
++				}
++			}
++			this._inDialog = false;
++		}
++	},
++
++	/* Tidy up after a dialog display. */
++	_tidyDialog: function(inst) {
++		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
++	},
++
++	/* Close date picker if clicked elsewhere. */
++	_checkExternalClick: function(event) {
++		if (!$.datepicker._curInst) {
++			return;
++		}
++
++		var $target = $(event.target),
++			inst = $.datepicker._getInst($target[0]);
++
++		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
++				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
++				!$target.hasClass($.datepicker.markerClassName) &&
++				!$target.closest("." + $.datepicker._triggerClass).length &&
++				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
++			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
++				$.datepicker._hideDatepicker();
++		}
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustDate: function(id, offset, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		this._adjustInstDate(inst, offset +
++			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
++			period);
++		this._updateDatepicker(inst);
++	},
++
++	/* Action for current link. */
++	_gotoToday: function(id) {
++		var date,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
++			inst.selectedDay = inst.currentDay;
++			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
++			inst.drawYear = inst.selectedYear = inst.currentYear;
++		} else {
++			date = new Date();
++			inst.selectedDay = date.getDate();
++			inst.drawMonth = inst.selectedMonth = date.getMonth();
++			inst.drawYear = inst.selectedYear = date.getFullYear();
++		}
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a new month/year. */
++	_selectMonthYear: function(id, select, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		inst["selected" + (period === "M" ? "Month" : "Year")] =
++		inst["draw" + (period === "M" ? "Month" : "Year")] =
++			parseInt(select.options[select.selectedIndex].value,10);
++
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a day. */
++	_selectDay: function(id, month, year, td) {
++		var inst,
++			target = $(id);
++
++		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++
++		inst = this._getInst(target[0]);
++		inst.selectedDay = inst.currentDay = $("a", td).html();
++		inst.selectedMonth = inst.currentMonth = month;
++		inst.selectedYear = inst.currentYear = year;
++		this._selectDate(id, this._formatDate(inst,
++			inst.currentDay, inst.currentMonth, inst.currentYear));
++	},
++
++	/* Erase the input field and hide the date picker. */
++	_clearDate: function(id) {
++		var target = $(id);
++		this._selectDate(target, "");
++	},
++
++	/* Update the input field with the selected date. */
++	_selectDate: function(id, dateStr) {
++		var onSelect,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
++		if (inst.input) {
++			inst.input.val(dateStr);
++		}
++		this._updateAlternate(inst);
++
++		onSelect = this._get(inst, "onSelect");
++		if (onSelect) {
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
++		} else if (inst.input) {
++			inst.input.trigger("change"); // fire the change event
++		}
++
++		if (inst.inline){
++			this._updateDatepicker(inst);
++		} else {
++			this._hideDatepicker();
++			this._lastInput = inst.input[0];
++			if (typeof(inst.input[0]) !== "object") {
++				inst.input.focus(); // restore focus
++			}
++			this._lastInput = null;
++		}
++	},
++
++	/* Update any alternate field to synchronise with the main field. */
++	_updateAlternate: function(inst) {
++		var altFormat, date, dateStr,
++			altField = this._get(inst, "altField");
++
++		if (altField) { // update alternate field too
++			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
++			date = this._getDate(inst);
++			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
++			$(altField).each(function() { $(this).val(dateStr); });
++		}
++	},
++
++	/* Set as beforeShowDay function to prevent selection of weekends.
++	 * @param  date  Date - the date to customise
++	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
++	 */
++	noWeekends: function(date) {
++		var day = date.getDay();
++		return [(day > 0 && day < 6), ""];
++	},
++
++	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++	 * @param  date  Date - the date to get the week for
++	 * @return  number - the number of the week within the year that contains this date
++	 */
++	iso8601Week: function(date) {
++		var time,
++			checkDate = new Date(date.getTime());
++
++		// Find Thursday of this week starting on Monday
++		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++
++		time = checkDate.getTime();
++		checkDate.setMonth(0); // Compare with Jan 1
++		checkDate.setDate(1);
++		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++	},
++
++	/* Parse a string value into a date object.
++	 * See formatDate below for the possible formats.
++	 *
++	 * @param  format string - the expected format of the date
++	 * @param  value string - the date in the above format
++	 * @param  settings Object - attributes include:
++	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  Date - the extracted date value or null if value is blank
++	 */
++	parseDate: function (format, value, settings) {
++		if (format == null || value == null) {
++			throw "Invalid arguments";
++		}
++
++		value = (typeof value === "object" ? value.toString() : value + "");
++		if (value === "") {
++			return null;
++		}
++
++		var iFormat, dim, extra,
++			iValue = 0,
++			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
++			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
++				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			year = -1,
++			month = -1,
++			day = -1,
++			doy = -1,
++			literal = false,
++			date,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Extract a number from the string value
++			getNumber = function(match) {
++				var isDoubled = lookAhead(match),
++					size = (match === "@" ? 14 : (match === "!" ? 20 :
++					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
++					digits = new RegExp("^\\d{1," + size + "}"),
++					num = value.substring(iValue).match(digits);
++				if (!num) {
++					throw "Missing number at position " + iValue;
++				}
++				iValue += num[0].length;
++				return parseInt(num[0], 10);
++			},
++			// Extract a name from the string value and convert to an index
++			getName = function(match, shortNames, longNames) {
++				var index = -1,
++					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
++						return [ [k, v] ];
++					}).sort(function (a, b) {
++						return -(a[1].length - b[1].length);
++					});
++
++				$.each(names, function (i, pair) {
++					var name = pair[1];
++					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
++						index = pair[0];
++						iValue += name.length;
++						return false;
++					}
++				});
++				if (index !== -1) {
++					return index + 1;
++				} else {
++					throw "Unknown name at position " + iValue;
++				}
++			},
++			// Confirm that a literal character matches the string value
++			checkLiteral = function() {
++				if (value.charAt(iValue) !== format.charAt(iFormat)) {
++					throw "Unexpected literal at position " + iValue;
++				}
++				iValue++;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					checkLiteral();
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d":
++						day = getNumber("d");
++						break;
++					case "D":
++						getName("D", dayNamesShort, dayNames);
++						break;
++					case "o":
++						doy = getNumber("o");
++						break;
++					case "m":
++						month = getNumber("m");
++						break;
++					case "M":
++						month = getName("M", monthNamesShort, monthNames);
++						break;
++					case "y":
++						year = getNumber("y");
++						break;
++					case "@":
++						date = new Date(getNumber("@"));
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "!":
++						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "'":
++						if (lookAhead("'")){
++							checkLiteral();
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						checkLiteral();
++				}
++			}
++		}
++
++		if (iValue < value.length){
++			extra = value.substr(iValue);
++			if (!/^\s+/.test(extra)) {
++				throw "Extra/unparsed characters found in date: " + extra;
++			}
++		}
++
++		if (year === -1) {
++			year = new Date().getFullYear();
++		} else if (year < 100) {
++			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
++				(year <= shortYearCutoff ? 0 : -100);
++		}
++
++		if (doy > -1) {
++			month = 1;
++			day = doy;
++			do {
++				dim = this._getDaysInMonth(year, month - 1);
++				if (day <= dim) {
++					break;
++				}
++				month++;
++				day -= dim;
++			} while (true);
++		}
++
++		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
++		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
++			throw "Invalid date"; // E.g. 31/02/00
++		}
++		return date;
++	},
++
++	/* Standard date formats. */
++	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
++	COOKIE: "D, dd M yy",
++	ISO_8601: "yy-mm-dd",
++	RFC_822: "D, d M y",
++	RFC_850: "DD, dd-M-y",
++	RFC_1036: "D, d M y",
++	RFC_1123: "D, d M yy",
++	RFC_2822: "D, d M yy",
++	RSS: "D, d M y", // RFC 822
++	TICKS: "!",
++	TIMESTAMP: "@",
++	W3C: "yy-mm-dd", // ISO 8601
++
++	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
++		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
++
++	/* Format a date object into a string value.
++	 * The format can be combinations of the following:
++	 * d  - day of month (no leading zero)
++	 * dd - day of month (two digit)
++	 * o  - day of year (no leading zeros)
++	 * oo - day of year (three digit)
++	 * D  - day name short
++	 * DD - day name long
++	 * m  - month of year (no leading zero)
++	 * mm - month of year (two digit)
++	 * M  - month name short
++	 * MM - month name long
++	 * y  - year (two digit)
++	 * yy - year (four digit)
++	 * @ - Unix timestamp (ms since 01/01/1970)
++	 * ! - Windows ticks (100ns since 01/01/0001)
++	 * "..." - literal text
++	 * '' - single quote
++	 *
++	 * @param  format string - the desired format of the date
++	 * @param  date Date - the date value to format
++	 * @param  settings Object - attributes include:
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  string - the date in the above format
++	 */
++	formatDate: function (format, date, settings) {
++		if (!date) {
++			return "";
++		}
++
++		var iFormat,
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Format a number, with leading zero if necessary
++			formatNumber = function(match, value, len) {
++				var num = "" + value;
++				if (lookAhead(match)) {
++					while (num.length < len) {
++						num = "0" + num;
++					}
++				}
++				return num;
++			},
++			// Format a name, short or long as requested
++			formatName = function(match, value, shortNames, longNames) {
++				return (lookAhead(match) ? longNames[value] : shortNames[value]);
++			},
++			output = "",
++			literal = false;
++
++		if (date) {
++			for (iFormat = 0; iFormat < format.length; iFormat++) {
++				if (literal) {
++					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++						literal = false;
++					} else {
++						output += format.charAt(iFormat);
++					}
++				} else {
++					switch (format.charAt(iFormat)) {
++						case "d":
++							output += formatNumber("d", date.getDate(), 2);
++							break;
++						case "D":
++							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
++							break;
++						case "o":
++							output += formatNumber("o",
++								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
++							break;
++						case "m":
++							output += formatNumber("m", date.getMonth() + 1, 2);
++							break;
++						case "M":
++							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
++							break;
++						case "y":
++							output += (lookAhead("y") ? date.getFullYear() :
++								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
++							break;
++						case "@":
++							output += date.getTime();
++							break;
++						case "!":
++							output += date.getTime() * 10000 + this._ticksTo1970;
++							break;
++						case "'":
++							if (lookAhead("'")) {
++								output += "'";
++							} else {
++								literal = true;
++							}
++							break;
++						default:
++							output += format.charAt(iFormat);
++					}
++				}
++			}
++		}
++		return output;
++	},
++
++	/* Extract all possible characters from the date format. */
++	_possibleChars: function (format) {
++		var iFormat,
++			chars = "",
++			literal = false,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					chars += format.charAt(iFormat);
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d": case "m": case "y": case "@":
++						chars += "0123456789";
++						break;
++					case "D": case "M":
++						return null; // Accept anything
++					case "'":
++						if (lookAhead("'")) {
++							chars += "'";
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						chars += format.charAt(iFormat);
++				}
++			}
++		}
++		return chars;
++	},
++
++	/* Get a setting value, defaulting if necessary. */
++	_get: function(inst, name) {
++		return inst.settings[name] !== undefined ?
++			inst.settings[name] : this._defaults[name];
++	},
++
++	/* Parse existing date and initialise date picker. */
++	_setDateFromField: function(inst, noDefault) {
++		if (inst.input.val() === inst.lastVal) {
++			return;
++		}
++
++		var dateFormat = this._get(inst, "dateFormat"),
++			dates = inst.lastVal = inst.input ? inst.input.val() : null,
++			defaultDate = this._getDefaultDate(inst),
++			date = defaultDate,
++			settings = this._getFormatConfig(inst);
++
++		try {
++			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
++		} catch (event) {
++			dates = (noDefault ? "" : dates);
++		}
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		inst.currentDay = (dates ? date.getDate() : 0);
++		inst.currentMonth = (dates ? date.getMonth() : 0);
++		inst.currentYear = (dates ? date.getFullYear() : 0);
++		this._adjustInstDate(inst);
++	},
++
++	/* Retrieve the default date shown on opening. */
++	_getDefaultDate: function(inst) {
++		return this._restrictMinMax(inst,
++			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
++	},
++
++	/* A date may be specified as an exact value or a relative one. */
++	_determineDate: function(inst, date, defaultDate) {
++		var offsetNumeric = function(offset) {
++				var date = new Date();
++				date.setDate(date.getDate() + offset);
++				return date;
++			},
++			offsetString = function(offset) {
++				try {
++					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++						offset, $.datepicker._getFormatConfig(inst));
++				}
++				catch (e) {
++					// Ignore
++				}
++
++				var date = (offset.toLowerCase().match(/^c/) ?
++					$.datepicker._getDate(inst) : null) || new Date(),
++					year = date.getFullYear(),
++					month = date.getMonth(),
++					day = date.getDate(),
++					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
++					matches = pattern.exec(offset);
++
++				while (matches) {
++					switch (matches[2] || "d") {
++						case "d" : case "D" :
++							day += parseInt(matches[1],10); break;
++						case "w" : case "W" :
++							day += parseInt(matches[1],10) * 7; break;
++						case "m" : case "M" :
++							month += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++						case "y": case "Y" :
++							year += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++					}
++					matches = pattern.exec(offset);
++				}
++				return new Date(year, month, day);
++			},
++			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
++				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
++
++		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
++		if (newDate) {
++			newDate.setHours(0);
++			newDate.setMinutes(0);
++			newDate.setSeconds(0);
++			newDate.setMilliseconds(0);
++		}
++		return this._daylightSavingAdjust(newDate);
++	},
++
++	/* Handle switch to/from daylight saving.
++	 * Hours may be non-zero on daylight saving cut-over:
++	 * > 12 when midnight changeover, but then cannot generate
++	 * midnight datetime, so jump to 1AM, otherwise reset.
++	 * @param  date  (Date) the date to check
++	 * @return  (Date) the corrected date
++	 */
++	_daylightSavingAdjust: function(date) {
++		if (!date) {
++			return null;
++		}
++		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
++		return date;
++	},
++
++	/* Set the date(s) directly. */
++	_setDate: function(inst, date, noChange) {
++		var clear = !date,
++			origMonth = inst.selectedMonth,
++			origYear = inst.selectedYear,
++			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
++
++		inst.selectedDay = inst.currentDay = newDate.getDate();
++		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
++		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
++		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
++			this._notifyChange(inst);
++		}
++		this._adjustInstDate(inst);
++		if (inst.input) {
++			inst.input.val(clear ? "" : this._formatDate(inst));
++		}
++	},
++
++	/* Retrieve the date(s) directly. */
++	_getDate: function(inst) {
++		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
++			this._daylightSavingAdjust(new Date(
++			inst.currentYear, inst.currentMonth, inst.currentDay)));
++			return startDate;
++	},
++
++	/* Attach the onxxx handlers.  These are declared statically so
++	 * they work with static code transformers like Caja.
++	 */
++	_attachHandlers: function(inst) {
++		var stepMonths = this._get(inst, "stepMonths"),
++			id = "#" + inst.id.replace( /\\\\/g, "\\" );
++		inst.dpDiv.find("[data-handler]").map(function () {
++			var handler = {
++				prev: function () {
++					$.datepicker._adjustDate(id, -stepMonths, "M");
++				},
++				next: function () {
++					$.datepicker._adjustDate(id, +stepMonths, "M");
++				},
++				hide: function () {
++					$.datepicker._hideDatepicker();
++				},
++				today: function () {
++					$.datepicker._gotoToday(id);
++				},
++				selectDay: function () {
++					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
++					return false;
++				},
++				selectMonth: function () {
++					$.datepicker._selectMonthYear(id, this, "M");
++					return false;
++				},
++				selectYear: function () {
++					$.datepicker._selectMonthYear(id, this, "Y");
++					return false;
++				}
++			};
++			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
++		});
++	},
++
++	/* Generate the HTML for the current state of the date picker. */
++	_generateHTML: function(inst) {
++		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
++			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
++			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
++			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
++			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
++			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
++			tempDate = new Date(),
++			today = this._daylightSavingAdjust(
++				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
++			isRTL = this._get(inst, "isRTL"),
++			showButtonPanel = this._get(inst, "showButtonPanel"),
++			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
++			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
++			numMonths = this._getNumberOfMonths(inst),
++			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
++			stepMonths = this._get(inst, "stepMonths"),
++			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
++			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
++				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			drawMonth = inst.drawMonth - showCurrentAtPos,
++			drawYear = inst.drawYear;
++
++		if (drawMonth < 0) {
++			drawMonth += 12;
++			drawYear--;
++		}
++		if (maxDate) {
++			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
++				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
++			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
++			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
++				drawMonth--;
++				if (drawMonth < 0) {
++					drawMonth = 11;
++					drawYear--;
++				}
++			}
++		}
++		inst.drawMonth = drawMonth;
++		inst.drawYear = drawYear;
++
++		prevText = this._get(inst, "prevText");
++		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
++			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
++
++		nextText = this._get(inst, "nextText");
++		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
++			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
++
++		currentText = this._get(inst, "currentText");
++		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
++		currentText = (!navigationAsDateFormat ? currentText :
++			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
++
++		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
++			this._get(inst, "closeText") + "</button>" : "");
++
++		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
++			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
++			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
++
++		firstDay = parseInt(this._get(inst, "firstDay"),10);
++		firstDay = (isNaN(firstDay) ? 0 : firstDay);
++
++		showWeek = this._get(inst, "showWeek");
++		dayNames = this._get(inst, "dayNames");
++		dayNamesMin = this._get(inst, "dayNamesMin");
++		monthNames = this._get(inst, "monthNames");
++		monthNamesShort = this._get(inst, "monthNamesShort");
++		beforeShowDay = this._get(inst, "beforeShowDay");
++		showOtherMonths = this._get(inst, "showOtherMonths");
++		selectOtherMonths = this._get(inst, "selectOtherMonths");
++		defaultDate = this._getDefaultDate(inst);
++		html = "";
++		dow;
++		for (row = 0; row < numMonths[0]; row++) {
++			group = "";
++			this.maxRows = 4;
++			for (col = 0; col < numMonths[1]; col++) {
++				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
++				cornerClass = " ui-corner-all";
++				calender = "";
++				if (isMultiMonth) {
++					calender += "<div class='ui-datepicker-group";
++					if (numMonths[1] > 1) {
++						switch (col) {
++							case 0: calender += " ui-datepicker-group-first";
++								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
++							case numMonths[1]-1: calender += " ui-datepicker-group-last";
++								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
++							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
++						}
++					}
++					calender += "'>";
++				}
++				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
++					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
++					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
++					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
++					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
++					"</div><table class='ui-datepicker-calendar'><thead>" +
++					"<tr>";
++				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
++				for (dow = 0; dow < 7; dow++) { // days of the week
++					day = (dow + firstDay) % 7;
++					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
++						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
++				}
++				calender += thead + "</tr></thead><tbody>";
++				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
++				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
++					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
++				}
++				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
++				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
++				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
++				this.maxRows = numRows;
++				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
++				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
++					calender += "<tr>";
++					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
++						this._get(inst, "calculateWeek")(printDate) + "</td>");
++					for (dow = 0; dow < 7; dow++) { // create date picker days
++						daySettings = (beforeShowDay ?
++							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
++						otherMonth = (printDate.getMonth() !== drawMonth);
++						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
++							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
++						tbody += "<td class='" +
++							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
++							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
++							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
++							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
++							// or defaultDate is current printedDate and defaultDate is selectedDate
++							" " + this._dayOverClass : "") + // highlight selected day
++							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
++							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
++							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
++							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
++							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
++							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
++							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
++							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
++							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
++							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
++							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
++							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
++						printDate.setDate(printDate.getDate() + 1);
++						printDate = this._daylightSavingAdjust(printDate);
++					}
++					calender += tbody + "</tr>";
++				}
++				drawMonth++;
++				if (drawMonth > 11) {
++					drawMonth = 0;
++					drawYear++;
++				}
++				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
++							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
++				group += calender;
++			}
++			html += group;
++		}
++		html += buttonPanel;
++		inst._keyEvent = false;
++		return html;
++	},
++
++	/* Generate the month and year header. */
++	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
++			secondary, monthNames, monthNamesShort) {
++
++		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
++			changeMonth = this._get(inst, "changeMonth"),
++			changeYear = this._get(inst, "changeYear"),
++			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
++			html = "<div class='ui-datepicker-title'>",
++			monthHtml = "";
++
++		// month selection
++		if (secondary || !changeMonth) {
++			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
++		} else {
++			inMinYear = (minDate && minDate.getFullYear() === drawYear);
++			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
++			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
++			for ( month = 0; month < 12; month++) {
++				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
++					monthHtml += "<option value='" + month + "'" +
++						(month === drawMonth ? " selected='selected'" : "") +
++						">" + monthNamesShort[month] + "</option>";
++				}
++			}
++			monthHtml += "</select>";
++		}
++
++		if (!showMonthAfterYear) {
++			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
++		}
++
++		// year selection
++		if ( !inst.yearshtml ) {
++			inst.yearshtml = "";
++			if (secondary || !changeYear) {
++				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
++			} else {
++				// determine range of years to display
++				years = this._get(inst, "yearRange").split(":");
++				thisYear = new Date().getFullYear();
++				determineYear = function(value) {
++					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
++						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
++						parseInt(value, 10)));
++					return (isNaN(year) ? thisYear : year);
++				};
++				year = determineYear(years[0]);
++				endYear = Math.max(year, determineYear(years[1] || ""));
++				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
++				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
++				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
++				for (; year <= endYear; year++) {
++					inst.yearshtml += "<option value='" + year + "'" +
++						(year === drawYear ? " selected='selected'" : "") +
++						">" + year + "</option>";
++				}
++				inst.yearshtml += "</select>";
++
++				html += inst.yearshtml;
++				inst.yearshtml = null;
++			}
++		}
++
++		html += this._get(inst, "yearSuffix");
++		if (showMonthAfterYear) {
++			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
++		}
++		html += "</div>"; // Close datepicker_header
++		return html;
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustInstDate: function(inst, offset, period) {
++		var year = inst.drawYear + (period === "Y" ? offset : 0),
++			month = inst.drawMonth + (period === "M" ? offset : 0),
++			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
++			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
++
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		if (period === "M" || period === "Y") {
++			this._notifyChange(inst);
++		}
++	},
++
++	/* Ensure a date is within any min/max bounds. */
++	_restrictMinMax: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			newDate = (minDate && date < minDate ? minDate : date);
++		return (maxDate && newDate > maxDate ? maxDate : newDate);
++	},
++
++	/* Notify change of month/year. */
++	_notifyChange: function(inst) {
++		var onChange = this._get(inst, "onChangeMonthYear");
++		if (onChange) {
++			onChange.apply((inst.input ? inst.input[0] : null),
++				[inst.selectedYear, inst.selectedMonth + 1, inst]);
++		}
++	},
++
++	/* Determine the number of months to show. */
++	_getNumberOfMonths: function(inst) {
++		var numMonths = this._get(inst, "numberOfMonths");
++		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
++	},
++
++	/* Determine the current maximum date - ensure no time components are set. */
++	_getMinMaxDate: function(inst, minMax) {
++		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
++	},
++
++	/* Find the number of days in a given month. */
++	_getDaysInMonth: function(year, month) {
++		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
++	},
++
++	/* Find the day of the week of the first of a month. */
++	_getFirstDayOfMonth: function(year, month) {
++		return new Date(year, month, 1).getDay();
++	},
++
++	/* Determines if we should allow a "next/prev" month display change. */
++	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
++		var numMonths = this._getNumberOfMonths(inst),
++			date = this._daylightSavingAdjust(new Date(curYear,
++			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
++
++		if (offset < 0) {
++			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
++		}
++		return this._isInRange(inst, date);
++	},
++
++	/* Is the given date in the accepted range? */
++	_isInRange: function(inst, date) {
++		var yearSplit, currentYear,
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			minYear = null,
++			maxYear = null,
++			years = this._get(inst, "yearRange");
++			if (years){
++				yearSplit = years.split(":");
++				currentYear = new Date().getFullYear();
++				minYear = parseInt(yearSplit[0], 10);
++				maxYear = parseInt(yearSplit[1], 10);
++				if ( yearSplit[0].match(/[+\-].*/) ) {
++					minYear += currentYear;
++				}
++				if ( yearSplit[1].match(/[+\-].*/) ) {
++					maxYear += currentYear;
++				}
++			}
++
++		return ((!minDate || date.getTime() >= minDate.getTime()) &&
++			(!maxDate || date.getTime() <= maxDate.getTime()) &&
++			(!minYear || date.getFullYear() >= minYear) &&
++			(!maxYear || date.getFullYear() <= maxYear));
++	},
++
++	/* Provide the configuration settings for formatting/parsing. */
++	_getFormatConfig: function(inst) {
++		var shortYearCutoff = this._get(inst, "shortYearCutoff");
++		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
++			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		return {shortYearCutoff: shortYearCutoff,
++			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
++			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
++	},
++
++	/* Format the given date for display. */
++	_formatDate: function(inst, day, month, year) {
++		if (!day) {
++			inst.currentDay = inst.selectedDay;
++			inst.currentMonth = inst.selectedMonth;
++			inst.currentYear = inst.selectedYear;
++		}
++		var date = (day ? (typeof day === "object" ? day :
++			this._daylightSavingAdjust(new Date(year, month, day))) :
++			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
++	}
++});
++
++/*
++ * Bind hover events for datepicker elements.
++ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
++ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
++ */
++function bindHover(dpDiv) {
++	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
++	return dpDiv.delegate(selector, "mouseout", function() {
++			$(this).removeClass("ui-state-hover");
++			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++				$(this).removeClass("ui-datepicker-prev-hover");
++			}
++			if (this.className.indexOf("ui-datepicker-next") !== -1) {
++				$(this).removeClass("ui-datepicker-next-hover");
++			}
++		})
++		.delegate(selector, "mouseover", function(){
++			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
++				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
++				$(this).addClass("ui-state-hover");
++				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++					$(this).addClass("ui-datepicker-prev-hover");
++				}
++				if (this.className.indexOf("ui-datepicker-next") !== -1) {
++					$(this).addClass("ui-datepicker-next-hover");
++				}
++			}
++		});
++}
++
++/* jQuery extend now ignores nulls! */
++function extendRemove(target, props) {
++	$.extend(target, props);
++	for (var name in props) {
++		if (props[name] == null) {
++			target[name] = props[name];
++		}
++	}
++	return target;
++}
++
++/* Invoke the datepicker functionality.
++   @param  options  string - a command, optionally followed by additional parameters or
++					Object - settings for attaching new datepicker functionality
++   @return  jQuery object */
++$.fn.datepicker = function(options){
++
++	/* Verify an empty collection wasn't passed - Fixes #6976 */
++	if ( !this.length ) {
++		return this;
++	}
++
++	/* Initialise the date picker. */
++	if (!$.datepicker.initialized) {
++		$(document).mousedown($.datepicker._checkExternalClick);
++		$.datepicker.initialized = true;
++	}
++
++	/* Append datepicker main container to body if not exist. */
++	if ($("#"+$.datepicker._mainDivId).length === 0) {
++		$("body").append($.datepicker.dpDiv);
++	}
++
++	var otherArgs = Array.prototype.slice.call(arguments, 1);
++	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	return this.each(function() {
++		typeof options === "string" ?
++			$.datepicker["_" + options + "Datepicker"].
++				apply($.datepicker, [this].concat(otherArgs)) :
++			$.datepicker._attachDatepicker(this, options);
++	});
++};
++
++$.datepicker = new Datepicker(); // singleton instance
++$.datepicker.initialized = false;
++$.datepicker.uuid = new Date().getTime();
++$.datepicker.version = "1.10.3";
++
++})(jQuery);
++(function( $, undefined ) {
++
++var sizeRelatedOptions = {
++		buttons: true,
++		height: true,
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true,
++		width: true
++	},
++	resizableRelatedOptions = {
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true
++	};
++
++$.widget( "ui.dialog", {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoOpen: true,
++		buttons: [],
++		closeOnEscape: true,
++		closeText: "close",
++		dialogClass: "",
++		draggable: true,
++		hide: null,
++		height: "auto",
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 150,
++		minWidth: 150,
++		modal: false,
++		position: {
++			my: "center",
++			at: "center",
++			of: window,
++			collision: "fit",
++			// Ensure the titlebar is always visible
++			using: function( pos ) {
++				var topOffset = $( this ).css( pos ).offset().top;
++				if ( topOffset < 0 ) {
++					$( this ).css( "top", pos.top - topOffset );
++				}
++			}
++		},
++		resizable: true,
++		show: null,
++		title: null,
++		width: 300,
++
++		// callbacks
++		beforeClose: null,
++		close: null,
++		drag: null,
++		dragStart: null,
++		dragStop: null,
++		focus: null,
++		open: null,
++		resize: null,
++		resizeStart: null,
++		resizeStop: null
++	},
++
++	_create: function() {
++		this.originalCss = {
++			display: this.element[0].style.display,
++			width: this.element[0].style.width,
++			minHeight: this.element[0].style.minHeight,
++			maxHeight: this.element[0].style.maxHeight,
++			height: this.element[0].style.height
++		};
++		this.originalPosition = {
++			parent: this.element.parent(),
++			index: this.element.parent().children().index( this.element )
++		};
++		this.originalTitle = this.element.attr("title");
++		this.options.title = this.options.title || this.originalTitle;
++
++		this._createWrapper();
++
++		this.element
++			.show()
++			.removeAttr("title")
++			.addClass("ui-dialog-content ui-widget-content")
++			.appendTo( this.uiDialog );
++
++		this._createTitlebar();
++		this._createButtonPane();
++
++		if ( this.options.draggable && $.fn.draggable ) {
++			this._makeDraggable();
++		}
++		if ( this.options.resizable && $.fn.resizable ) {
++			this._makeResizable();
++		}
++
++		this._isOpen = false;
++	},
++
++	_init: function() {
++		if ( this.options.autoOpen ) {
++			this.open();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++		if ( element && (element.jquery || element.nodeType) ) {
++			return $( element );
++		}
++		return this.document.find( element || "body" ).eq( 0 );
++	},
++
++	_destroy: function() {
++		var next,
++			originalPosition = this.originalPosition;
++
++		this._destroyOverlay();
++
++		this.element
++			.removeUniqueId()
++			.removeClass("ui-dialog-content ui-widget-content")
++			.css( this.originalCss )
++			// Without detaching first, the following becomes really slow
++			.detach();
++
++		this.uiDialog.stop( true, true ).remove();
++
++		if ( this.originalTitle ) {
++			this.element.attr( "title", this.originalTitle );
++		}
++
++		next = originalPosition.parent.children().eq( originalPosition.index );
++		// Don't try to place the dialog next to itself (#8613)
++		if ( next.length && next[0] !== this.element[0] ) {
++			next.before( this.element );
++		} else {
++			originalPosition.parent.append( this.element );
++		}
++	},
++
++	widget: function() {
++		return this.uiDialog;
++	},
++
++	disable: $.noop,
++	enable: $.noop,
++
++	close: function( event ) {
++		var that = this;
++
++		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
++			return;
++		}
++
++		this._isOpen = false;
++		this._destroyOverlay();
++
++		if ( !this.opener.filter(":focusable").focus().length ) {
++			// Hiding a focused element doesn't trigger blur in WebKit
++			// so in case we have nothing to focus on, explicitly blur the active element
++			// https://bugs.webkit.org/show_bug.cgi?id=47182
++			$( this.document[0].activeElement ).blur();
++		}
++
++		this._hide( this.uiDialog, this.options.hide, function() {
++			that._trigger( "close", event );
++		});
++	},
++
++	isOpen: function() {
++		return this._isOpen;
++	},
++
++	moveToTop: function() {
++		this._moveToTop();
++	},
++
++	_moveToTop: function( event, silent ) {
++		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
++		if ( moved && !silent ) {
++			this._trigger( "focus", event );
++		}
++		return moved;
++	},
++
++	open: function() {
++		var that = this;
++		if ( this._isOpen ) {
++			if ( this._moveToTop() ) {
++				this._focusTabbable();
++			}
++			return;
++		}
++
++		this._isOpen = true;
++		this.opener = $( this.document[0].activeElement );
++
++		this._size();
++		this._position();
++		this._createOverlay();
++		this._moveToTop( null, true );
++		this._show( this.uiDialog, this.options.show, function() {
++			that._focusTabbable();
++			that._trigger("focus");
++		});
++
++		this._trigger("open");
++	},
++
++	_focusTabbable: function() {
++		// Set focus to the first match:
++		// 1. First element inside the dialog matching [autofocus]
++		// 2. Tabbable element inside the content element
++		// 3. Tabbable element inside the buttonpane
++		// 4. The close button
++		// 5. The dialog itself
++		var hasFocus = this.element.find("[autofocus]");
++		if ( !hasFocus.length ) {
++			hasFocus = this.element.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogButtonPane.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialog;
++		}
++		hasFocus.eq( 0 ).focus();
++	},
++
++	_keepFocus: function( event ) {
++		function checkFocus() {
++			var activeElement = this.document[0].activeElement,
++				isActive = this.uiDialog[0] === activeElement ||
++					$.contains( this.uiDialog[0], activeElement );
++			if ( !isActive ) {
++				this._focusTabbable();
++			}
++		}
++		event.preventDefault();
++		checkFocus.call( this );
++		// support: IE
++		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
++		// so we check again later
++		this._delay( checkFocus );
++	},
++
++	_createWrapper: function() {
++		this.uiDialog = $("<div>")
++			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
++				this.options.dialogClass )
++			.hide()
++			.attr({
++				// Setting tabIndex makes the div focusable
++				tabIndex: -1,
++				role: "dialog"
++			})
++			.appendTo( this._appendTo() );
++
++		this._on( this.uiDialog, {
++			keydown: function( event ) {
++				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
++						event.keyCode === $.ui.keyCode.ESCAPE ) {
++					event.preventDefault();
++					this.close( event );
++					return;
++				}
++
++				// prevent tabbing out of dialogs
++				if ( event.keyCode !== $.ui.keyCode.TAB ) {
++					return;
++				}
++				var tabbables = this.uiDialog.find(":tabbable"),
++					first = tabbables.filter(":first"),
++					last  = tabbables.filter(":last");
++
++				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
++					first.focus( 1 );
++					event.preventDefault();
++				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
++					last.focus( 1 );
++					event.preventDefault();
++				}
++			},
++			mousedown: function( event ) {
++				if ( this._moveToTop( event ) ) {
++					this._focusTabbable();
++				}
++			}
++		});
++
++		// We assume that any existing aria-describedby attribute means
++		// that the dialog content is marked up properly
++		// otherwise we brute force the content as the description
++		if ( !this.element.find("[aria-describedby]").length ) {
++			this.uiDialog.attr({
++				"aria-describedby": this.element.uniqueId().attr("id")
++			});
++		}
++	},
++
++	_createTitlebar: function() {
++		var uiDialogTitle;
++
++		this.uiDialogTitlebar = $("<div>")
++			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
++			.prependTo( this.uiDialog );
++		this._on( this.uiDialogTitlebar, {
++			mousedown: function( event ) {
++				// Don't prevent click on close button (#8838)
++				// Focusing a dialog that is partially scrolled out of view
++				// causes the browser to scroll it into view, preventing the click event
++				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
++					// Dialog isn't getting focus when dragging (#8063)
++					this.uiDialog.focus();
++				}
++			}
++		});
++
++		this.uiDialogTitlebarClose = $("<button></button>")
++			.button({
++				label: this.options.closeText,
++				icons: {
++					primary: "ui-icon-closethick"
++				},
++				text: false
++			})
++			.addClass("ui-dialog-titlebar-close")
++			.appendTo( this.uiDialogTitlebar );
++		this._on( this.uiDialogTitlebarClose, {
++			click: function( event ) {
++				event.preventDefault();
++				this.close( event );
++			}
++		});
++
++		uiDialogTitle = $("<span>")
++			.uniqueId()
++			.addClass("ui-dialog-title")
++			.prependTo( this.uiDialogTitlebar );
++		this._title( uiDialogTitle );
++
++		this.uiDialog.attr({
++			"aria-labelledby": uiDialogTitle.attr("id")
++		});
++	},
++
++	_title: function( title ) {
++		if ( !this.options.title ) {
++			title.html("&#160;");
++		}
++		title.text( this.options.title );
++	},
++
++	_createButtonPane: function() {
++		this.uiDialogButtonPane = $("<div>")
++			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
++
++		this.uiButtonSet = $("<div>")
++			.addClass("ui-dialog-buttonset")
++			.appendTo( this.uiDialogButtonPane );
++
++		this._createButtons();
++	},
++
++	_createButtons: function() {
++		var that = this,
++			buttons = this.options.buttons;
++
++		// if we already have a button pane, remove it
++		this.uiDialogButtonPane.remove();
++		this.uiButtonSet.empty();
++
++		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
++			this.uiDialog.removeClass("ui-dialog-buttons");
++			return;
++		}
++
++		$.each( buttons, function( name, props ) {
++			var click, buttonOptions;
++			props = $.isFunction( props ) ?
++				{ click: props, text: name } :
++				props;
++			// Default to a non-submitting button
++			props = $.extend( { type: "button" }, props );
++			// Change the context for the click callback to be the main element
++			click = props.click;
++			props.click = function() {
++				click.apply( that.element[0], arguments );
++			};
++			buttonOptions = {
++				icons: props.icons,
++				text: props.showText
++			};
++			delete props.icons;
++			delete props.showText;
++			$( "<button></button>", props )
++				.button( buttonOptions )
++				.appendTo( that.uiButtonSet );
++		});
++		this.uiDialog.addClass("ui-dialog-buttons");
++		this.uiDialogButtonPane.appendTo( this.uiDialog );
++	},
++
++	_makeDraggable: function() {
++		var that = this,
++			options = this.options;
++
++		function filteredUi( ui ) {
++			return {
++				position: ui.position,
++				offset: ui.offset
++			};
++		}
++
++		this.uiDialog.draggable({
++			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
++			handle: ".ui-dialog-titlebar",
++			containment: "document",
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-dragging");
++				that._blockFrames();
++				that._trigger( "dragStart", event, filteredUi( ui ) );
++			},
++			drag: function( event, ui ) {
++				that._trigger( "drag", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.position = [
++					ui.position.left - that.document.scrollLeft(),
++					ui.position.top - that.document.scrollTop()
++				];
++				$( this ).removeClass("ui-dialog-dragging");
++				that._unblockFrames();
++				that._trigger( "dragStop", event, filteredUi( ui ) );
++			}
++		});
++	},
++
++	_makeResizable: function() {
++		var that = this,
++			options = this.options,
++			handles = options.resizable,
++			// .ui-resizable has position: relative defined in the stylesheet
++			// but dialogs have to use absolute or fixed positioning
++			position = this.uiDialog.css("position"),
++			resizeHandles = typeof handles === "string" ?
++				handles	:
++				"n,e,s,w,se,sw,ne,nw";
++
++		function filteredUi( ui ) {
++			return {
++				originalPosition: ui.originalPosition,
++				originalSize: ui.originalSize,
++				position: ui.position,
++				size: ui.size
++			};
++		}
++
++		this.uiDialog.resizable({
++			cancel: ".ui-dialog-content",
++			containment: "document",
++			alsoResize: this.element,
++			maxWidth: options.maxWidth,
++			maxHeight: options.maxHeight,
++			minWidth: options.minWidth,
++			minHeight: this._minHeight(),
++			handles: resizeHandles,
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-resizing");
++				that._blockFrames();
++				that._trigger( "resizeStart", event, filteredUi( ui ) );
++			},
++			resize: function( event, ui ) {
++				that._trigger( "resize", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.height = $( this ).height();
++				options.width = $( this ).width();
++				$( this ).removeClass("ui-dialog-resizing");
++				that._unblockFrames();
++				that._trigger( "resizeStop", event, filteredUi( ui ) );
++			}
++		})
++		.css( "position", position );
++	},
++
++	_minHeight: function() {
++		var options = this.options;
++
++		return options.height === "auto" ?
++			options.minHeight :
++			Math.min( options.minHeight, options.height );
++	},
++
++	_position: function() {
++		// Need to show the dialog to get the actual offset in the position plugin
++		var isVisible = this.uiDialog.is(":visible");
++		if ( !isVisible ) {
++			this.uiDialog.show();
++		}
++		this.uiDialog.position( this.options.position );
++		if ( !isVisible ) {
++			this.uiDialog.hide();
++		}
++	},
++
++	_setOptions: function( options ) {
++		var that = this,
++			resize = false,
++			resizableOptions = {};
++
++		$.each( options, function( key, value ) {
++			that._setOption( key, value );
++
++			if ( key in sizeRelatedOptions ) {
++				resize = true;
++			}
++			if ( key in resizableRelatedOptions ) {
++				resizableOptions[ key ] = value;
++			}
++		});
++
++		if ( resize ) {
++			this._size();
++			this._position();
++		}
++		if ( this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", resizableOptions );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		/*jshint maxcomplexity:15*/
++		var isDraggable, isResizable,
++			uiDialog = this.uiDialog;
++
++		if ( key === "dialogClass" ) {
++			uiDialog
++				.removeClass( this.options.dialogClass )
++				.addClass( value );
++		}
++
++		if ( key === "disabled" ) {
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "appendTo" ) {
++			this.uiDialog.appendTo( this._appendTo() );
++		}
++
++		if ( key === "buttons" ) {
++			this._createButtons();
++		}
++
++		if ( key === "closeText" ) {
++			this.uiDialogTitlebarClose.button({
++				// Ensure that we always pass a string
++				label: "" + value
++			});
++		}
++
++		if ( key === "draggable" ) {
++			isDraggable = uiDialog.is(":data(ui-draggable)");
++			if ( isDraggable && !value ) {
++				uiDialog.draggable("destroy");
++			}
++
++			if ( !isDraggable && value ) {
++				this._makeDraggable();
++			}
++		}
++
++		if ( key === "position" ) {
++			this._position();
++		}
++
++		if ( key === "resizable" ) {
++			// currently resizable, becoming non-resizable
++			isResizable = uiDialog.is(":data(ui-resizable)");
++			if ( isResizable && !value ) {
++				uiDialog.resizable("destroy");
++			}
++
++			// currently resizable, changing handles
++			if ( isResizable && typeof value === "string" ) {
++				uiDialog.resizable( "option", "handles", value );
++			}
++
++			// currently non-resizable, becoming resizable
++			if ( !isResizable && value !== false ) {
++				this._makeResizable();
++			}
++		}
++
++		if ( key === "title" ) {
++			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
++		}
++	},
++
++	_size: function() {
++		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
++		// divs will both have width and height set, so we need to reset them
++		var nonContentHeight, minContentHeight, maxContentHeight,
++			options = this.options;
++
++		// Reset content sizing
++		this.element.show().css({
++			width: "auto",
++			minHeight: 0,
++			maxHeight: "none",
++			height: 0
++		});
++
++		if ( options.minWidth > options.width ) {
++			options.width = options.minWidth;
++		}
++
++		// reset wrapper sizing
++		// determine the height of all the non-content elements
++		nonContentHeight = this.uiDialog.css({
++				height: "auto",
++				width: options.width
++			})
++			.outerHeight();
++		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
++		maxContentHeight = typeof options.maxHeight === "number" ?
++			Math.max( 0, options.maxHeight - nonContentHeight ) :
++			"none";
++
++		if ( options.height === "auto" ) {
++			this.element.css({
++				minHeight: minContentHeight,
++				maxHeight: maxContentHeight,
++				height: "auto"
++			});
++		} else {
++			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
++		}
++
++		if (this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
++		}
++	},
++
++	_blockFrames: function() {
++		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
++			var iframe = $( this );
++
++			return $( "<div>" )
++				.css({
++					position: "absolute",
++					width: iframe.outerWidth(),
++					height: iframe.outerHeight()
++				})
++				.appendTo( iframe.parent() )
++				.offset( iframe.offset() )[0];
++		});
++	},
++
++	_unblockFrames: function() {
++		if ( this.iframeBlocks ) {
++			this.iframeBlocks.remove();
++			delete this.iframeBlocks;
++		}
++	},
++
++	_allowInteraction: function( event ) {
++		if ( $( event.target ).closest(".ui-dialog").length ) {
++			return true;
++		}
++
++		// TODO: Remove hack when datepicker implements
++		// the .ui-front logic (#8989)
++		return !!$( event.target ).closest(".ui-datepicker").length;
++	},
++
++	_createOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		var that = this,
++			widgetFullName = this.widgetFullName;
++		if ( !$.ui.dialog.overlayInstances ) {
++			// Prevent use of anchors and inputs.
++			// We use a delay in case the overlay is created from an
++			// event that we're going to be cancelling. (#2804)
++			this._delay(function() {
++				// Handle .dialog().dialog("close") (#4065)
++				if ( $.ui.dialog.overlayInstances ) {
++					this.document.bind( "focusin.dialog", function( event ) {
++						if ( !that._allowInteraction( event ) ) {
++							event.preventDefault();
++							$(".ui-dialog:visible:last .ui-dialog-content")
++								.data( widgetFullName )._focusTabbable();
++						}
++					});
++				}
++			});
++		}
++
++		this.overlay = $("<div>")
++			.addClass("ui-widget-overlay ui-front")
++			.appendTo( this._appendTo() );
++		this._on( this.overlay, {
++			mousedown: "_keepFocus"
++		});
++		$.ui.dialog.overlayInstances++;
++	},
++
++	_destroyOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		if ( this.overlay ) {
++			$.ui.dialog.overlayInstances--;
++
++			if ( !$.ui.dialog.overlayInstances ) {
++				this.document.unbind( "focusin.dialog" );
++			}
++			this.overlay.remove();
++			this.overlay = null;
++		}
++	}
++});
++
++$.ui.dialog.overlayInstances = 0;
++
++// DEPRECATED
++if ( $.uiBackCompat !== false ) {
++	// position option with array notation
++	// just override with old implementation
++	$.widget( "ui.dialog", $.ui.dialog, {
++		_position: function() {
++			var position = this.options.position,
++				myAt = [],
++				offset = [ 0, 0 ],
++				isVisible;
++
++			if ( position ) {
++				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
++					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
++					if ( myAt.length === 1 ) {
++						myAt[1] = myAt[0];
++					}
++
++					$.each( [ "left", "top" ], function( i, offsetPosition ) {
++						if ( +myAt[ i ] === myAt[ i ] ) {
++							offset[ i ] = myAt[ i ];
++							myAt[ i ] = offsetPosition;
++						}
++					});
++
++					position = {
++						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
++							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
++						at: myAt.join(" ")
++					};
++				}
++
++				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
++			} else {
++				position = $.ui.dialog.prototype.options.position;
++			}
++
++			// need to show the dialog to get the actual offset in the position plugin
++			isVisible = this.uiDialog.is(":visible");
++			if ( !isVisible ) {
++				this.uiDialog.show();
++			}
++			this.uiDialog.position( position );
++			if ( !isVisible ) {
++				this.uiDialog.hide();
++			}
++		}
++	});
++}
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.widget( "ui.menu", {
++	version: "1.10.3",
++	defaultElement: "<ul>",
++	delay: 300,
++	options: {
++		icons: {
++			submenu: "ui-icon-carat-1-e"
++		},
++		menus: "ul",
++		position: {
++			my: "left top",
++			at: "right top"
++		},
++		role: "menu",
++
++		// callbacks
++		blur: null,
++		focus: null,
++		select: null
++	},
++
++	_create: function() {
++		this.activeMenu = this.element;
++		// flag used to prevent firing of the click handler
++		// as the event bubbles up through nested menus
++		this.mouseHandled = false;
++		this.element
++			.uniqueId()
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
++			.attr({
++				role: this.options.role,
++				tabIndex: 0
++			})
++			// need to catch all clicks on disabled menu
++			// not possible through _on
++			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
++				if ( this.options.disabled ) {
++					event.preventDefault();
++				}
++			}, this ));
++
++		if ( this.options.disabled ) {
++			this.element
++				.addClass( "ui-state-disabled" )
++				.attr( "aria-disabled", "true" );
++		}
++
++		this._on({
++			// Prevent focus from sticking to links inside menu after clicking
++			// them (focus should always stay on UL during navigation).
++			"mousedown .ui-menu-item > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-state-disabled > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-menu-item:has(a)": function( event ) {
++				var target = $( event.target ).closest( ".ui-menu-item" );
++				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
++					this.mouseHandled = true;
++
++					this.select( event );
++					// Open submenu on click
++					if ( target.has( ".ui-menu" ).length ) {
++						this.expand( event );
++					} else if ( !this.element.is( ":focus" ) ) {
++						// Redirect focus to the menu
++						this.element.trigger( "focus", [ true ] );
++
++						// If the active item is on the top level, let it stay active.
++						// Otherwise, blur the active item since it is no longer visible.
++						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
++							clearTimeout( this.timer );
++						}
++					}
++				}
++			},
++			"mouseenter .ui-menu-item": function( event ) {
++				var target = $( event.currentTarget );
++				// Remove ui-state-active class from siblings of the newly focused menu item
++				// to avoid a jump caused by adjacent elements both having a class with a border
++				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
++				this.focus( event, target );
++			},
++			mouseleave: "collapseAll",
++			"mouseleave .ui-menu": "collapseAll",
++			focus: function( event, keepActiveItem ) {
++				// If there's already an active item, keep it active
++				// If not, activate the first item
++				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
++
++				if ( !keepActiveItem ) {
++					this.focus( event, item );
++				}
++			},
++			blur: function( event ) {
++				this._delay(function() {
++					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
++						this.collapseAll( event );
++					}
++				});
++			},
++			keydown: "_keydown"
++		});
++
++		this.refresh();
++
++		// Clicks outside of a menu collapse any open menus
++		this._on( this.document, {
++			click: function( event ) {
++				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
++					this.collapseAll( event );
++				}
++
++				// Reset the mouseHandled flag
++				this.mouseHandled = false;
++			}
++		});
++	},
++
++	_destroy: function() {
++		// Destroy (sub)menus
++		this.element
++			.removeAttr( "aria-activedescendant" )
++			.find( ".ui-menu" ).addBack()
++				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
++				.removeAttr( "role" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "aria-labelledby" )
++				.removeAttr( "aria-expanded" )
++				.removeAttr( "aria-hidden" )
++				.removeAttr( "aria-disabled" )
++				.removeUniqueId()
++				.show();
++
++		// Destroy menu items
++		this.element.find( ".ui-menu-item" )
++			.removeClass( "ui-menu-item" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-disabled" )
++			.children( "a" )
++				.removeUniqueId()
++				.removeClass( "ui-corner-all ui-state-hover" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "role" )
++				.removeAttr( "aria-haspopup" )
++				.children().each( function() {
++					var elem = $( this );
++					if ( elem.data( "ui-menu-submenu-carat" ) ) {
++						elem.remove();
++					}
++				});
++
++		// Destroy menu dividers
++		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:20*/
++		var match, prev, character, skip, regex,
++			preventDefault = true;
++
++		function escape( value ) {
++			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
++		}
++
++		switch ( event.keyCode ) {
++		case $.ui.keyCode.PAGE_UP:
++			this.previousPage( event );
++			break;
++		case $.ui.keyCode.PAGE_DOWN:
++			this.nextPage( event );
++			break;
++		case $.ui.keyCode.HOME:
++			this._move( "first", "first", event );
++			break;
++		case $.ui.keyCode.END:
++			this._move( "last", "last", event );
++			break;
++		case $.ui.keyCode.UP:
++			this.previous( event );
++			break;
++		case $.ui.keyCode.DOWN:
++			this.next( event );
++			break;
++		case $.ui.keyCode.LEFT:
++			this.collapse( event );
++			break;
++		case $.ui.keyCode.RIGHT:
++			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
++				this.expand( event );
++			}
++			break;
++		case $.ui.keyCode.ENTER:
++		case $.ui.keyCode.SPACE:
++			this._activate( event );
++			break;
++		case $.ui.keyCode.ESCAPE:
++			this.collapse( event );
++			break;
++		default:
++			preventDefault = false;
++			prev = this.previousFilter || "";
++			character = String.fromCharCode( event.keyCode );
++			skip = false;
++
++			clearTimeout( this.filterTimer );
++
++			if ( character === prev ) {
++				skip = true;
++			} else {
++				character = prev + character;
++			}
++
++			regex = new RegExp( "^" + escape( character ), "i" );
++			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++				return regex.test( $( this ).children( "a" ).text() );
++			});
++			match = skip && match.index( this.active.next() ) !== -1 ?
++				this.active.nextAll( ".ui-menu-item" ) :
++				match;
++
++			// If no matches on the current filter, reset to the last character pressed
++			// to move down the menu to the first item that starts with that character
++			if ( !match.length ) {
++				character = String.fromCharCode( event.keyCode );
++				regex = new RegExp( "^" + escape( character ), "i" );
++				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++					return regex.test( $( this ).children( "a" ).text() );
++				});
++			}
++
++			if ( match.length ) {
++				this.focus( event, match );
++				if ( match.length > 1 ) {
++					this.previousFilter = character;
++					this.filterTimer = this._delay(function() {
++						delete this.previousFilter;
++					}, 1000 );
++				} else {
++					delete this.previousFilter;
++				}
++			} else {
++				delete this.previousFilter;
++			}
++		}
++
++		if ( preventDefault ) {
++			event.preventDefault();
++		}
++	},
++
++	_activate: function( event ) {
++		if ( !this.active.is( ".ui-state-disabled" ) ) {
++			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
++				this.expand( event );
++			} else {
++				this.select( event );
++			}
++		}
++	},
++
++	refresh: function() {
++		var menus,
++			icon = this.options.icons.submenu,
++			submenus = this.element.find( this.options.menus );
++
++		// Initialize nested menus
++		submenus.filter( ":not(.ui-menu)" )
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.hide()
++			.attr({
++				role: this.options.role,
++				"aria-hidden": "true",
++				"aria-expanded": "false"
++			})
++			.each(function() {
++				var menu = $( this ),
++					item = menu.prev( "a" ),
++					submenuCarat = $( "<span>" )
++						.addClass( "ui-menu-icon ui-icon " + icon )
++						.data( "ui-menu-submenu-carat", true );
++
++				item
++					.attr( "aria-haspopup", "true" )
++					.prepend( submenuCarat );
++				menu.attr( "aria-labelledby", item.attr( "id" ) );
++			});
++
++		menus = submenus.add( this.element );
++
++		// Don't refresh list items that are already adapted
++		menus.children( ":not(.ui-menu-item):has(a)" )
++			.addClass( "ui-menu-item" )
++			.attr( "role", "presentation" )
++			.children( "a" )
++				.uniqueId()
++				.addClass( "ui-corner-all" )
++				.attr({
++					tabIndex: -1,
++					role: this._itemRole()
++				});
++
++		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
++		menus.children( ":not(.ui-menu-item)" ).each(function() {
++			var item = $( this );
++			// hyphen, em dash, en dash
++			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
++				item.addClass( "ui-widget-content ui-menu-divider" );
++			}
++		});
++
++		// Add aria-disabled attribute to any disabled menu item
++		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
++
++		// If the active item has been removed, blur the menu
++		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			this.blur();
++		}
++	},
++
++	_itemRole: function() {
++		return {
++			menu: "menuitem",
++			listbox: "option"
++		}[ this.options.role ];
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "icons" ) {
++			this.element.find( ".ui-menu-icon" )
++				.removeClass( this.options.icons.submenu )
++				.addClass( value.submenu );
++		}
++		this._super( key, value );
++	},
++
++	focus: function( event, item ) {
++		var nested, focused;
++		this.blur( event, event && event.type === "focus" );
++
++		this._scrollIntoView( item );
++
++		this.active = item.first();
++		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
++		// Only update aria-activedescendant if there's a role
++		// otherwise we assume focus is managed elsewhere
++		if ( this.options.role ) {
++			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
++		}
++
++		// Highlight active parent menu item, if any
++		this.active
++			.parent()
++			.closest( ".ui-menu-item" )
++			.children( "a:first" )
++			.addClass( "ui-state-active" );
++
++		if ( event && event.type === "keydown" ) {
++			this._close();
++		} else {
++			this.timer = this._delay(function() {
++				this._close();
++			}, this.delay );
++		}
++
++		nested = item.children( ".ui-menu" );
++		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
++			this._startOpening(nested);
++		}
++		this.activeMenu = item.parent();
++
++		this._trigger( "focus", event, { item: item } );
++	},
++
++	_scrollIntoView: function( item ) {
++		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
++		if ( this._hasScroll() ) {
++			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
++			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
++			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
++			scroll = this.activeMenu.scrollTop();
++			elementHeight = this.activeMenu.height();
++			itemHeight = item.height();
++
++			if ( offset < 0 ) {
++				this.activeMenu.scrollTop( scroll + offset );
++			} else if ( offset + itemHeight > elementHeight ) {
++				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
++			}
++		}
++	},
++
++	blur: function( event, fromFocus ) {
++		if ( !fromFocus ) {
++			clearTimeout( this.timer );
++		}
++
++		if ( !this.active ) {
++			return;
++		}
++
++		this.active.children( "a" ).removeClass( "ui-state-focus" );
++		this.active = null;
++
++		this._trigger( "blur", event, { item: this.active } );
++	},
++
++	_startOpening: function( submenu ) {
++		clearTimeout( this.timer );
++
++		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
++		// shift in the submenu position when mousing over the carat icon
++		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
++			return;
++		}
++
++		this.timer = this._delay(function() {
++			this._close();
++			this._open( submenu );
++		}, this.delay );
++	},
++
++	_open: function( submenu ) {
++		var position = $.extend({
++			of: this.active
++		}, this.options.position );
++
++		clearTimeout( this.timer );
++		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
++			.hide()
++			.attr( "aria-hidden", "true" );
++
++		submenu
++			.show()
++			.removeAttr( "aria-hidden" )
++			.attr( "aria-expanded", "true" )
++			.position( position );
++	},
++
++	collapseAll: function( event, all ) {
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			// If we were passed an event, look for the submenu that contains the event
++			var currentMenu = all ? this.element :
++				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
++
++			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
++			if ( !currentMenu.length ) {
++				currentMenu = this.element;
++			}
++
++			this._close( currentMenu );
++
++			this.blur( event );
++			this.activeMenu = currentMenu;
++		}, this.delay );
++	},
++
++	// With no arguments, closes the currently active menu - if nothing is active
++	// it closes all menus.  If passed an argument, it will search for menus BELOW
++	_close: function( startMenu ) {
++		if ( !startMenu ) {
++			startMenu = this.active ? this.active.parent() : this.element;
++		}
++
++		startMenu
++			.find( ".ui-menu" )
++				.hide()
++				.attr( "aria-hidden", "true" )
++				.attr( "aria-expanded", "false" )
++			.end()
++			.find( "a.ui-state-active" )
++				.removeClass( "ui-state-active" );
++	},
++
++	collapse: function( event ) {
++		var newItem = this.active &&
++			this.active.parent().closest( ".ui-menu-item", this.element );
++		if ( newItem && newItem.length ) {
++			this._close();
++			this.focus( event, newItem );
++		}
++	},
++
++	expand: function( event ) {
++		var newItem = this.active &&
++			this.active
++				.children( ".ui-menu " )
++				.children( ".ui-menu-item" )
++				.first();
++
++		if ( newItem && newItem.length ) {
++			this._open( newItem.parent() );
++
++			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
++			this._delay(function() {
++				this.focus( event, newItem );
++			});
++		}
++	},
++
++	next: function( event ) {
++		this._move( "next", "first", event );
++	},
++
++	previous: function( event ) {
++		this._move( "prev", "last", event );
++	},
++
++	isFirstItem: function() {
++		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
++	},
++
++	isLastItem: function() {
++		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
++	},
++
++	_move: function( direction, filter, event ) {
++		var next;
++		if ( this.active ) {
++			if ( direction === "first" || direction === "last" ) {
++				next = this.active
++					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
++					.eq( -1 );
++			} else {
++				next = this.active
++					[ direction + "All" ]( ".ui-menu-item" )
++					.eq( 0 );
++			}
++		}
++		if ( !next || !next.length || !this.active ) {
++			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
++		}
++
++		this.focus( event, next );
++	},
++
++	nextPage: function( event ) {
++		var item, base, height;
++
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isLastItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.nextAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base - height < 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
++				[ !this.active ? "first" : "last" ]() );
++		}
++	},
++
++	previousPage: function( event ) {
++		var item, base, height;
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isFirstItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.prevAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base + height > 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
++		}
++	},
++
++	_hasScroll: function() {
++		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
++	},
++
++	select: function( event ) {
++		// TODO: It should never be possible to not have an active item at this
++		// point, but the tests don't trigger mouseenter before click.
++		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
++		var ui = { item: this.active };
++		if ( !this.active.has( ".ui-menu" ).length ) {
++			this.collapseAll( event, true );
++		}
++		this._trigger( "select", event, ui );
++	}
++});
++
++}( jQuery ));
++(function( $, undefined ) {
++
++$.widget( "ui.progressbar", {
++	version: "1.10.3",
++	options: {
++		max: 100,
++		value: 0,
++
++		change: null,
++		complete: null
++	},
++
++	min: 0,
++
++	_create: function() {
++		// Constrain initial value
++		this.oldValue = this.options.value = this._constrainedValue();
++
++		this.element
++			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.attr({
++				// Only set static values, aria-valuenow and aria-valuemax are
++				// set inside _refreshValue()
++				role: "progressbar",
++				"aria-valuemin": this.min
++			});
++
++		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
++			.appendTo( this.element );
++
++		this._refreshValue();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++
++		this.valueDiv.remove();
++	},
++
++	value: function( newValue ) {
++		if ( newValue === undefined ) {
++			return this.options.value;
++		}
++
++		this.options.value = this._constrainedValue( newValue );
++		this._refreshValue();
++	},
++
++	_constrainedValue: function( newValue ) {
++		if ( newValue === undefined ) {
++			newValue = this.options.value;
++		}
++
++		this.indeterminate = newValue === false;
++
++		// sanitize value
++		if ( typeof newValue !== "number" ) {
++			newValue = 0;
++		}
++
++		return this.indeterminate ? false :
++			Math.min( this.options.max, Math.max( this.min, newValue ) );
++	},
++
++	_setOptions: function( options ) {
++		// Ensure "value" option is set after other values (like max)
++		var value = options.value;
++		delete options.value;
++
++		this._super( options );
++
++		this.options.value = this._constrainedValue( value );
++		this._refreshValue();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "max" ) {
++			// Don't allow a max less than min
++			value = Math.max( this.min, value );
++		}
++
++		this._super( key, value );
++	},
++
++	_percentage: function() {
++		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
++	},
++
++	_refreshValue: function() {
++		var value = this.options.value,
++			percentage = this._percentage();
++
++		this.valueDiv
++			.toggle( this.indeterminate || value > this.min )
++			.toggleClass( "ui-corner-right", value === this.options.max )
++			.width( percentage.toFixed(0) + "%" );
++
++		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
++
++		if ( this.indeterminate ) {
++			this.element.removeAttr( "aria-valuenow" );
++			if ( !this.overlayDiv ) {
++				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
++			}
++		} else {
++			this.element.attr({
++				"aria-valuemax": this.options.max,
++				"aria-valuenow": value
++			});
++			if ( this.overlayDiv ) {
++				this.overlayDiv.remove();
++				this.overlayDiv = null;
++			}
++		}
++
++		if ( this.oldValue !== value ) {
++			this.oldValue = value;
++			this._trigger( "change" );
++		}
++		if ( value === this.options.max ) {
++			this._trigger( "complete" );
++		}
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++// number of pages in a slider
++// (how many times can you page up/down to go through the whole range)
++var numPages = 5;
++
++$.widget( "ui.slider", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "slide",
++
++	options: {
++		animate: false,
++		distance: 0,
++		max: 100,
++		min: 0,
++		orientation: "horizontal",
++		range: false,
++		step: 1,
++		value: 0,
++		values: null,
++
++		// callbacks
++		change: null,
++		slide: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		this._keySliding = false;
++		this._mouseSliding = false;
++		this._animateOff = true;
++		this._handleIndex = null;
++		this._detectOrientation();
++		this._mouseInit();
++
++		this.element
++			.addClass( "ui-slider" +
++				" ui-slider-" + this.orientation +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all");
++
++		this._refresh();
++		this._setOption( "disabled", this.options.disabled );
++
++		this._animateOff = false;
++	},
++
++	_refresh: function() {
++		this._createRange();
++		this._createHandles();
++		this._setupEvents();
++		this._refreshValue();
++	},
++
++	_createHandles: function() {
++		var i, handleCount,
++			options = this.options,
++			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
++			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
++			handles = [];
++
++		handleCount = ( options.values && options.values.length ) || 1;
++
++		if ( existingHandles.length > handleCount ) {
++			existingHandles.slice( handleCount ).remove();
++			existingHandles = existingHandles.slice( 0, handleCount );
++		}
++
++		for ( i = existingHandles.length; i < handleCount; i++ ) {
++			handles.push( handle );
++		}
++
++		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
++
++		this.handle = this.handles.eq( 0 );
++
++		this.handles.each(function( i ) {
++			$( this ).data( "ui-slider-handle-index", i );
++		});
++	},
++
++	_createRange: function() {
++		var options = this.options,
++			classes = "";
++
++		if ( options.range ) {
++			if ( options.range === true ) {
++				if ( !options.values ) {
++					options.values = [ this._valueMin(), this._valueMin() ];
++				} else if ( options.values.length && options.values.length !== 2 ) {
++					options.values = [ options.values[0], options.values[0] ];
++				} else if ( $.isArray( options.values ) ) {
++					options.values = options.values.slice(0);
++				}
++			}
++
++			if ( !this.range || !this.range.length ) {
++				this.range = $( "<div></div>" )
++					.appendTo( this.element );
++
++				classes = "ui-slider-range" +
++				// note: this isn't the most fittingly semantic framework class for this element,
++				// but worked best visually with a variety of themes
++				" ui-widget-header ui-corner-all";
++			} else {
++				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
++					// Handle range switching from true to min/max
++					.css({
++						"left": "",
++						"bottom": ""
++					});
++			}
++
++			this.range.addClass( classes +
++				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
++		} else {
++			this.range = $([]);
++		}
++	},
++
++	_setupEvents: function() {
++		var elements = this.handles.add( this.range ).filter( "a" );
++		this._off( elements );
++		this._on( elements, this._handleEvents );
++		this._hoverable( elements );
++		this._focusable( elements );
++	},
++
++	_destroy: function() {
++		this.handles.remove();
++		this.range.remove();
++
++		this.element
++			.removeClass( "ui-slider" +
++				" ui-slider-horizontal" +
++				" ui-slider-vertical" +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" );
++
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function( event ) {
++		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
++			that = this,
++			o = this.options;
++
++		if ( o.disabled ) {
++			return false;
++		}
++
++		this.elementSize = {
++			width: this.element.outerWidth(),
++			height: this.element.outerHeight()
++		};
++		this.elementOffset = this.element.offset();
++
++		position = { x: event.pageX, y: event.pageY };
++		normValue = this._normValueFromMouse( position );
++		distance = this._valueMax() - this._valueMin() + 1;
++		this.handles.each(function( i ) {
++			var thisDistance = Math.abs( normValue - that.values(i) );
++			if (( distance > thisDistance ) ||
++				( distance === thisDistance &&
++					(i === that._lastChangedValue || that.values(i) === o.min ))) {
++				distance = thisDistance;
++				closestHandle = $( this );
++				index = i;
++			}
++		});
++
++		allowed = this._start( event, index );
++		if ( allowed === false ) {
++			return false;
++		}
++		this._mouseSliding = true;
++
++		this._handleIndex = index;
++
++		closestHandle
++			.addClass( "ui-state-active" )
++			.focus();
++
++		offset = closestHandle.offset();
++		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
++		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
++			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
++			top: event.pageY - offset.top -
++				( closestHandle.height() / 2 ) -
++				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
++				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
++				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
++		};
++
++		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
++			this._slide( event, index, normValue );
++		}
++		this._animateOff = true;
++		return true;
++	},
++
++	_mouseStart: function() {
++		return true;
++	},
++
++	_mouseDrag: function( event ) {
++		var position = { x: event.pageX, y: event.pageY },
++			normValue = this._normValueFromMouse( position );
++
++		this._slide( event, this._handleIndex, normValue );
++
++		return false;
++	},
++
++	_mouseStop: function( event ) {
++		this.handles.removeClass( "ui-state-active" );
++		this._mouseSliding = false;
++
++		this._stop( event, this._handleIndex );
++		this._change( event, this._handleIndex );
++
++		this._handleIndex = null;
++		this._clickOffset = null;
++		this._animateOff = false;
++
++		return false;
++	},
++
++	_detectOrientation: function() {
++		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
++	},
++
++	_normValueFromMouse: function( position ) {
++		var pixelTotal,
++			pixelMouse,
++			percentMouse,
++			valueTotal,
++			valueMouse;
++
++		if ( this.orientation === "horizontal" ) {
++			pixelTotal = this.elementSize.width;
++			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
++		} else {
++			pixelTotal = this.elementSize.height;
++			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
++		}
++
++		percentMouse = ( pixelMouse / pixelTotal );
++		if ( percentMouse > 1 ) {
++			percentMouse = 1;
++		}
++		if ( percentMouse < 0 ) {
++			percentMouse = 0;
++		}
++		if ( this.orientation === "vertical" ) {
++			percentMouse = 1 - percentMouse;
++		}
++
++		valueTotal = this._valueMax() - this._valueMin();
++		valueMouse = this._valueMin() + percentMouse * valueTotal;
++
++		return this._trimAlignValue( valueMouse );
++	},
++
++	_start: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++		return this._trigger( "start", event, uiHash );
++	},
++
++	_slide: function( event, index, newVal ) {
++		var otherVal,
++			newValues,
++			allowed;
++
++		if ( this.options.values && this.options.values.length ) {
++			otherVal = this.values( index ? 0 : 1 );
++
++			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
++					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
++				) {
++				newVal = otherVal;
++			}
++
++			if ( newVal !== this.values( index ) ) {
++				newValues = this.values();
++				newValues[ index ] = newVal;
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal,
++					values: newValues
++				} );
++				otherVal = this.values( index ? 0 : 1 );
++				if ( allowed !== false ) {
++					this.values( index, newVal, true );
++				}
++			}
++		} else {
++			if ( newVal !== this.value() ) {
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal
++				} );
++				if ( allowed !== false ) {
++					this.value( newVal );
++				}
++			}
++		}
++	},
++
++	_stop: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++
++		this._trigger( "stop", event, uiHash );
++	},
++
++	_change: function( event, index ) {
++		if ( !this._keySliding && !this._mouseSliding ) {
++			var uiHash = {
++				handle: this.handles[ index ],
++				value: this.value()
++			};
++			if ( this.options.values && this.options.values.length ) {
++				uiHash.value = this.values( index );
++				uiHash.values = this.values();
++			}
++
++			//store the last changed value index for reference when handles overlap
++			this._lastChangedValue = index;
++
++			this._trigger( "change", event, uiHash );
++		}
++	},
++
++	value: function( newValue ) {
++		if ( arguments.length ) {
++			this.options.value = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, 0 );
++			return;
++		}
++
++		return this._value();
++	},
++
++	values: function( index, newValue ) {
++		var vals,
++			newValues,
++			i;
++
++		if ( arguments.length > 1 ) {
++			this.options.values[ index ] = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, index );
++			return;
++		}
++
++		if ( arguments.length ) {
++			if ( $.isArray( arguments[ 0 ] ) ) {
++				vals = this.options.values;
++				newValues = arguments[ 0 ];
++				for ( i = 0; i < vals.length; i += 1 ) {
++					vals[ i ] = this._trimAlignValue( newValues[ i ] );
++					this._change( null, i );
++				}
++				this._refreshValue();
++			} else {
++				if ( this.options.values && this.options.values.length ) {
++					return this._values( index );
++				} else {
++					return this.value();
++				}
++			}
++		} else {
++			return this._values();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var i,
++			valsLength = 0;
++
++		if ( key === "range" && this.options.range === true ) {
++			if ( value === "min" ) {
++				this.options.value = this._values( 0 );
++				this.options.values = null;
++			} else if ( value === "max" ) {
++				this.options.value = this._values( this.options.values.length-1 );
++				this.options.values = null;
++			}
++		}
++
++		if ( $.isArray( this.options.values ) ) {
++			valsLength = this.options.values.length;
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++
++		switch ( key ) {
++			case "orientation":
++				this._detectOrientation();
++				this.element
++					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
++					.addClass( "ui-slider-" + this.orientation );
++				this._refreshValue();
++				break;
++			case "value":
++				this._animateOff = true;
++				this._refreshValue();
++				this._change( null, 0 );
++				this._animateOff = false;
++				break;
++			case "values":
++				this._animateOff = true;
++				this._refreshValue();
++				for ( i = 0; i < valsLength; i += 1 ) {
++					this._change( null, i );
++				}
++				this._animateOff = false;
++				break;
++			case "min":
++			case "max":
++				this._animateOff = true;
++				this._refreshValue();
++				this._animateOff = false;
++				break;
++			case "range":
++				this._animateOff = true;
++				this._refresh();
++				this._animateOff = false;
++				break;
++		}
++	},
++
++	//internal value getter
++	// _value() returns value trimmed by min and max, aligned by step
++	_value: function() {
++		var val = this.options.value;
++		val = this._trimAlignValue( val );
++
++		return val;
++	},
++
++	//internal values getter
++	// _values() returns array of values trimmed by min and max, aligned by step
++	// _values( index ) returns single value trimmed by min and max, aligned by step
++	_values: function( index ) {
++		var val,
++			vals,
++			i;
++
++		if ( arguments.length ) {
++			val = this.options.values[ index ];
++			val = this._trimAlignValue( val );
++
++			return val;
++		} else if ( this.options.values && this.options.values.length ) {
++			// .slice() creates a copy of the array
++			// this copy gets trimmed by min and max and then returned
++			vals = this.options.values.slice();
++			for ( i = 0; i < vals.length; i+= 1) {
++				vals[ i ] = this._trimAlignValue( vals[ i ] );
++			}
++
++			return vals;
++		} else {
++			return [];
++		}
++	},
++
++	// returns the step-aligned value that val is closest to, between (inclusive) min and max
++	_trimAlignValue: function( val ) {
++		if ( val <= this._valueMin() ) {
++			return this._valueMin();
++		}
++		if ( val >= this._valueMax() ) {
++			return this._valueMax();
++		}
++		var step = ( this.options.step > 0 ) ? this.options.step : 1,
++			valModStep = (val - this._valueMin()) % step,
++			alignValue = val - valModStep;
++
++		if ( Math.abs(valModStep) * 2 >= step ) {
++			alignValue += ( valModStep > 0 ) ? step : ( -step );
++		}
++
++		// Since JavaScript has problems with large floats, round
++		// the final value to 5 digits after the decimal point (see #4124)
++		return parseFloat( alignValue.toFixed(5) );
++	},
++
++	_valueMin: function() {
++		return this.options.min;
++	},
++
++	_valueMax: function() {
++		return this.options.max;
++	},
++
++	_refreshValue: function() {
++		var lastValPercent, valPercent, value, valueMin, valueMax,
++			oRange = this.options.range,
++			o = this.options,
++			that = this,
++			animate = ( !this._animateOff ) ? o.animate : false,
++			_set = {};
++
++		if ( this.options.values && this.options.values.length ) {
++			this.handles.each(function( i ) {
++				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
++				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++				if ( that.options.range === true ) {
++					if ( that.orientation === "horizontal" ) {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					} else {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					}
++				}
++				lastValPercent = valPercent;
++			});
++		} else {
++			value = this.value();
++			valueMin = this._valueMin();
++			valueMax = this._valueMax();
++			valPercent = ( valueMax !== valueMin ) ?
++					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
++					0;
++			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++
++			if ( oRange === "min" && this.orientation === "horizontal" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "horizontal" ) {
++				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++			if ( oRange === "min" && this.orientation === "vertical" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "vertical" ) {
++				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++		}
++	},
++
++	_handleEvents: {
++		keydown: function( event ) {
++			/*jshint maxcomplexity:25*/
++			var allowed, curVal, newVal, step,
++				index = $( event.target ).data( "ui-slider-handle-index" );
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++				case $.ui.keyCode.END:
++				case $.ui.keyCode.PAGE_UP:
++				case $.ui.keyCode.PAGE_DOWN:
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					event.preventDefault();
++					if ( !this._keySliding ) {
++						this._keySliding = true;
++						$( event.target ).addClass( "ui-state-active" );
++						allowed = this._start( event, index );
++						if ( allowed === false ) {
++							return;
++						}
++					}
++					break;
++			}
++
++			step = this.options.step;
++			if ( this.options.values && this.options.values.length ) {
++				curVal = newVal = this.values( index );
++			} else {
++				curVal = newVal = this.value();
++			}
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++					newVal = this._valueMin();
++					break;
++				case $.ui.keyCode.END:
++					newVal = this._valueMax();
++					break;
++				case $.ui.keyCode.PAGE_UP:
++					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.PAGE_DOWN:
++					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++					if ( curVal === this._valueMax() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal + step );
++					break;
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					if ( curVal === this._valueMin() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal - step );
++					break;
++			}
++
++			this._slide( event, index, newVal );
++		},
++		click: function( event ) {
++			event.preventDefault();
++		},
++		keyup: function( event ) {
++			var index = $( event.target ).data( "ui-slider-handle-index" );
++
++			if ( this._keySliding ) {
++				this._keySliding = false;
++				this._stop( event, index );
++				this._change( event, index );
++				$( event.target ).removeClass( "ui-state-active" );
++			}
++		}
++	}
++
++});
++
++}(jQuery));
++(function( $ ) {
++
++function modifier( fn ) {
++	return function() {
++		var previous = this.element.val();
++		fn.apply( this, arguments );
++		this._refresh();
++		if ( previous !== this.element.val() ) {
++			this._trigger( "change" );
++		}
++	};
++}
++
++$.widget( "ui.spinner", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	widgetEventPrefix: "spin",
++	options: {
++		culture: null,
++		icons: {
++			down: "ui-icon-triangle-1-s",
++			up: "ui-icon-triangle-1-n"
++		},
++		incremental: true,
++		max: null,
++		min: null,
++		numberFormat: null,
++		page: 10,
++		step: 1,
++
++		change: null,
++		spin: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		// handle string values that need to be parsed
++		this._setOption( "max", this.options.max );
++		this._setOption( "min", this.options.min );
++		this._setOption( "step", this.options.step );
++
++		// format the value, but don't constrain
++		this._value( this.element.val(), true );
++
++		this._draw();
++		this._on( this._events );
++		this._refresh();
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_getCreateOptions: function() {
++		var options = {},
++			element = this.element;
++
++		$.each( [ "min", "max", "step" ], function( i, option ) {
++			var value = element.attr( option );
++			if ( value !== undefined && value.length ) {
++				options[ option ] = value;
++			}
++		});
++
++		return options;
++	},
++
++	_events: {
++		keydown: function( event ) {
++			if ( this._start( event ) && this._keydown( event ) ) {
++				event.preventDefault();
++			}
++		},
++		keyup: "_stop",
++		focus: function() {
++			this.previous = this.element.val();
++		},
++		blur: function( event ) {
++			if ( this.cancelBlur ) {
++				delete this.cancelBlur;
++				return;
++			}
++
++			this._stop();
++			this._refresh();
++			if ( this.previous !== this.element.val() ) {
++				this._trigger( "change", event );
++			}
++		},
++		mousewheel: function( event, delta ) {
++			if ( !delta ) {
++				return;
++			}
++			if ( !this.spinning && !this._start( event ) ) {
++				return false;
++			}
++
++			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
++			clearTimeout( this.mousewheelTimer );
++			this.mousewheelTimer = this._delay(function() {
++				if ( this.spinning ) {
++					this._stop( event );
++				}
++			}, 100 );
++			event.preventDefault();
++		},
++		"mousedown .ui-spinner-button": function( event ) {
++			var previous;
++
++			// We never want the buttons to have focus; whenever the user is
++			// interacting with the spinner, the focus should be on the input.
++			// If the input is focused then this.previous is properly set from
++			// when the input first received focus. If the input is not focused
++			// then we need to set this.previous based on the value before spinning.
++			previous = this.element[0] === this.document[0].activeElement ?
++				this.previous : this.element.val();
++			function checkFocus() {
++				var isActive = this.element[0] === this.document[0].activeElement;
++				if ( !isActive ) {
++					this.element.focus();
++					this.previous = previous;
++					// support: IE
++					// IE sets focus asynchronously, so we need to check if focus
++					// moved off of the input because the user clicked on the button.
++					this._delay(function() {
++						this.previous = previous;
++					});
++				}
++			}
++
++			// ensure focus is on (or stays on) the text field
++			event.preventDefault();
++			checkFocus.call( this );
++
++			// support: IE
++			// IE doesn't prevent moving focus even with event.preventDefault()
++			// so we set a flag to know when we should ignore the blur event
++			// and check (again) if focus moved off of the input.
++			this.cancelBlur = true;
++			this._delay(function() {
++				delete this.cancelBlur;
++				checkFocus.call( this );
++			});
++
++			if ( this._start( event ) === false ) {
++				return;
++			}
++
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		"mouseup .ui-spinner-button": "_stop",
++		"mouseenter .ui-spinner-button": function( event ) {
++			// button will add ui-state-active if mouse was down while mouseleave and kept down
++			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
++				return;
++			}
++
++			if ( this._start( event ) === false ) {
++				return false;
++			}
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		// TODO: do we really want to consider this a stop?
++		// shouldn't we just stop the repeater and wait until mouseup before
++		// we trigger the stop event?
++		"mouseleave .ui-spinner-button": "_stop"
++	},
++
++	_draw: function() {
++		var uiSpinner = this.uiSpinner = this.element
++			.addClass( "ui-spinner-input" )
++			.attr( "autocomplete", "off" )
++			.wrap( this._uiSpinnerHtml() )
++			.parent()
++				// add buttons
++				.append( this._buttonHtml() );
++
++		this.element.attr( "role", "spinbutton" );
++
++		// button bindings
++		this.buttons = uiSpinner.find( ".ui-spinner-button" )
++			.attr( "tabIndex", -1 )
++			.button()
++			.removeClass( "ui-corner-all" );
++
++		// IE 6 doesn't understand height: 50% for the buttons
++		// unless the wrapper has an explicit height
++		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
++				uiSpinner.height() > 0 ) {
++			uiSpinner.height( uiSpinner.height() );
++		}
++
++		// disable spinner if element was already disabled
++		if ( this.options.disabled ) {
++			this.disable();
++		}
++	},
++
++	_keydown: function( event ) {
++		var options = this.options,
++			keyCode = $.ui.keyCode;
++
++		switch ( event.keyCode ) {
++		case keyCode.UP:
++			this._repeat( null, 1, event );
++			return true;
++		case keyCode.DOWN:
++			this._repeat( null, -1, event );
++			return true;
++		case keyCode.PAGE_UP:
++			this._repeat( null, options.page, event );
++			return true;
++		case keyCode.PAGE_DOWN:
++			this._repeat( null, -options.page, event );
++			return true;
++		}
++
++		return false;
++	},
++
++	_uiSpinnerHtml: function() {
++		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
++	},
++
++	_buttonHtml: function() {
++		return "" +
++			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
++				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
++			"</a>" +
++			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
++				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
++			"</a>";
++	},
++
++	_start: function( event ) {
++		if ( !this.spinning && this._trigger( "start", event ) === false ) {
++			return false;
++		}
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++		this.spinning = true;
++		return true;
++	},
++
++	_repeat: function( i, steps, event ) {
++		i = i || 500;
++
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			this._repeat( 40, steps, event );
++		}, i );
++
++		this._spin( steps * this.options.step, event );
++	},
++
++	_spin: function( step, event ) {
++		var value = this.value() || 0;
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++
++		value = this._adjustValue( value + step * this._increment( this.counter ) );
++
++		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
++			this._value( value );
++			this.counter++;
++		}
++	},
++
++	_increment: function( i ) {
++		var incremental = this.options.incremental;
++
++		if ( incremental ) {
++			return $.isFunction( incremental ) ?
++				incremental( i ) :
++				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
++		}
++
++		return 1;
++	},
++
++	_precision: function() {
++		var precision = this._precisionOf( this.options.step );
++		if ( this.options.min !== null ) {
++			precision = Math.max( precision, this._precisionOf( this.options.min ) );
++		}
++		return precision;
++	},
++
++	_precisionOf: function( num ) {
++		var str = num.toString(),
++			decimal = str.indexOf( "." );
++		return decimal === -1 ? 0 : str.length - decimal - 1;
++	},
++
++	_adjustValue: function( value ) {
++		var base, aboveMin,
++			options = this.options;
++
++		// make sure we're at a valid step
++		// - find out where we are relative to the base (min or 0)
++		base = options.min !== null ? options.min : 0;
++		aboveMin = value - base;
++		// - round to the nearest step
++		aboveMin = Math.round(aboveMin / options.step) * options.step;
++		// - rounding is based on 0, so adjust back to our base
++		value = base + aboveMin;
++
++		// fix precision from bad JS floating point math
++		value = parseFloat( value.toFixed( this._precision() ) );
++
++		// clamp the value
++		if ( options.max !== null && value > options.max) {
++			return options.max;
++		}
++		if ( options.min !== null && value < options.min ) {
++			return options.min;
++		}
++
++		return value;
++	},
++
++	_stop: function( event ) {
++		if ( !this.spinning ) {
++			return;
++		}
++
++		clearTimeout( this.timer );
++		clearTimeout( this.mousewheelTimer );
++		this.counter = 0;
++		this.spinning = false;
++		this._trigger( "stop", event );
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "culture" || key === "numberFormat" ) {
++			var prevValue = this._parse( this.element.val() );
++			this.options[ key ] = value;
++			this.element.val( this._format( prevValue ) );
++			return;
++		}
++
++		if ( key === "max" || key === "min" || key === "step" ) {
++			if ( typeof value === "string" ) {
++				value = this._parse( value );
++			}
++		}
++		if ( key === "icons" ) {
++			this.buttons.first().find( ".ui-icon" )
++				.removeClass( this.options.icons.up )
++				.addClass( value.up );
++			this.buttons.last().find( ".ui-icon" )
++				.removeClass( this.options.icons.down )
++				.addClass( value.down );
++		}
++
++		this._super( key, value );
++
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++				this.buttons.button( "disable" );
++			} else {
++				this.element.prop( "disabled", false );
++				this.buttons.button( "enable" );
++			}
++		}
++	},
++
++	_setOptions: modifier(function( options ) {
++		this._super( options );
++		this._value( this.element.val() );
++	}),
++
++	_parse: function( val ) {
++		if ( typeof val === "string" && val !== "" ) {
++			val = window.Globalize && this.options.numberFormat ?
++				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
++		}
++		return val === "" || isNaN( val ) ? null : val;
++	},
++
++	_format: function( value ) {
++		if ( value === "" ) {
++			return "";
++		}
++		return window.Globalize && this.options.numberFormat ?
++			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
++			value;
++	},
++
++	_refresh: function() {
++		this.element.attr({
++			"aria-valuemin": this.options.min,
++			"aria-valuemax": this.options.max,
++			// TODO: what should we do with values that can't be parsed?
++			"aria-valuenow": this._parse( this.element.val() )
++		});
++	},
++
++	// update the value without triggering change
++	_value: function( value, allowAny ) {
++		var parsed;
++		if ( value !== "" ) {
++			parsed = this._parse( value );
++			if ( parsed !== null ) {
++				if ( !allowAny ) {
++					parsed = this._adjustValue( parsed );
++				}
++				value = this._format( parsed );
++			}
++		}
++		this.element.val( value );
++		this._refresh();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-spinner-input" )
++			.prop( "disabled", false )
++			.removeAttr( "autocomplete" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++		this.uiSpinner.replaceWith( this.element );
++	},
++
++	stepUp: modifier(function( steps ) {
++		this._stepUp( steps );
++	}),
++	_stepUp: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * this.options.step );
++			this._stop();
++		}
++	},
++
++	stepDown: modifier(function( steps ) {
++		this._stepDown( steps );
++	}),
++	_stepDown: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * -this.options.step );
++			this._stop();
++		}
++	},
++
++	pageUp: modifier(function( pages ) {
++		this._stepUp( (pages || 1) * this.options.page );
++	}),
++
++	pageDown: modifier(function( pages ) {
++		this._stepDown( (pages || 1) * this.options.page );
++	}),
++
++	value: function( newVal ) {
++		if ( !arguments.length ) {
++			return this._parse( this.element.val() );
++		}
++		modifier( this._value ).call( this, newVal );
++	},
++
++	widget: function() {
++		return this.uiSpinner;
++	}
++});
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++var tabId = 0,
++	rhash = /#.*$/;
++
++function getNextTabId() {
++	return ++tabId;
++}
++
++function isLocal( anchor ) {
++	return anchor.hash.length > 1 &&
++		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
++			decodeURIComponent( location.href.replace( rhash, "" ) );
++}
++
++$.widget( "ui.tabs", {
++	version: "1.10.3",
++	delay: 300,
++	options: {
++		active: null,
++		collapsible: false,
++		event: "click",
++		heightStyle: "content",
++		hide: null,
++		show: null,
++
++		// callbacks
++		activate: null,
++		beforeActivate: null,
++		beforeLoad: null,
++		load: null
++	},
++
++	_create: function() {
++		var that = this,
++			options = this.options;
++
++		this.running = false;
++
++		this.element
++			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-tabs-collapsible", options.collapsible )
++			// Prevent users from focusing disabled tabs via click
++			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
++				if ( $( this ).is( ".ui-state-disabled" ) ) {
++					event.preventDefault();
++				}
++			})
++			// support: IE <9
++			// Preventing the default action in mousedown doesn't prevent IE
++			// from focusing the element, so if the anchor gets focused, blur.
++			// We don't have to worry about focusing the previously focused
++			// element since clicking on a non-focusable element should focus
++			// the body anyway.
++			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
++				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
++					this.blur();
++				}
++			});
++
++		this._processTabs();
++		options.active = this._initialActive();
++
++		// Take disabling tabs via class attribute from HTML
++		// into account and update option properly.
++		if ( $.isArray( options.disabled ) ) {
++			options.disabled = $.unique( options.disabled.concat(
++				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
++					return that.tabs.index( li );
++				})
++			) ).sort();
++		}
++
++		// check for length avoids error when initializing empty list
++		if ( this.options.active !== false && this.anchors.length ) {
++			this.active = this._findActive( options.active );
++		} else {
++			this.active = $();
++		}
++
++		this._refresh();
++
++		if ( this.active.length ) {
++			this.load( options.active );
++		}
++	},
++
++	_initialActive: function() {
++		var active = this.options.active,
++			collapsible = this.options.collapsible,
++			locationHash = location.hash.substring( 1 );
++
++		if ( active === null ) {
++			// check the fragment identifier in the URL
++			if ( locationHash ) {
++				this.tabs.each(function( i, tab ) {
++					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
++						active = i;
++						return false;
++					}
++				});
++			}
++
++			// check for a tab marked active via a class
++			if ( active === null ) {
++				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
++			}
++
++			// no active tab, set to false
++			if ( active === null || active === -1 ) {
++				active = this.tabs.length ? 0 : false;
++			}
++		}
++
++		// handle numbers: negative, out of range
++		if ( active !== false ) {
++			active = this.tabs.index( this.tabs.eq( active ) );
++			if ( active === -1 ) {
++				active = collapsible ? false : 0;
++			}
++		}
++
++		// don't allow collapsible: false and active: false
++		if ( !collapsible && active === false && this.anchors.length ) {
++			active = 0;
++		}
++
++		return active;
++	},
++
++	_getCreateEventData: function() {
++		return {
++			tab: this.active,
++			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
++		};
++	},
++
++	_tabKeydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
++			selectedIndex = this.tabs.index( focusedTab ),
++			goingForward = true;
++
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		switch ( event.keyCode ) {
++			case $.ui.keyCode.RIGHT:
++			case $.ui.keyCode.DOWN:
++				selectedIndex++;
++				break;
++			case $.ui.keyCode.UP:
++			case $.ui.keyCode.LEFT:
++				goingForward = false;
++				selectedIndex--;
++				break;
++			case $.ui.keyCode.END:
++				selectedIndex = this.anchors.length - 1;
++				break;
++			case $.ui.keyCode.HOME:
++				selectedIndex = 0;
++				break;
++			case $.ui.keyCode.SPACE:
++				// Activate only, no collapsing
++				event.preventDefault();
++				clearTimeout( this.activating );
++				this._activate( selectedIndex );
++				return;
++			case $.ui.keyCode.ENTER:
++				// Toggle (cancel delayed activation, allow collapsing)
++				event.preventDefault();
++				clearTimeout( this.activating );
++				// Determine if we should collapse or activate
++				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
++				return;
++			default:
++				return;
++		}
++
++		// Focus the appropriate tab, based on which key was pressed
++		event.preventDefault();
++		clearTimeout( this.activating );
++		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
++
++		// Navigating with control key will prevent automatic activation
++		if ( !event.ctrlKey ) {
++			// Update aria-selected immediately so that AT think the tab is already selected.
++			// Otherwise AT may confuse the user by stating that they need to activate the tab,
++			// but the tab will already be activated by the time the announcement finishes.
++			focusedTab.attr( "aria-selected", "false" );
++			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
++
++			this.activating = this._delay(function() {
++				this.option( "active", selectedIndex );
++			}, this.delay );
++		}
++	},
++
++	_panelKeydown: function( event ) {
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		// Ctrl+up moves focus to the current tab
++		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
++			event.preventDefault();
++			this.active.focus();
++		}
++	},
++
++	// Alt+page up/down moves focus to the previous/next tab (and activates)
++	_handlePageNav: function( event ) {
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
++			this._activate( this._focusNextTab( this.options.active - 1, false ) );
++			return true;
++		}
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
++			this._activate( this._focusNextTab( this.options.active + 1, true ) );
++			return true;
++		}
++	},
++
++	_findNextTab: function( index, goingForward ) {
++		var lastTabIndex = this.tabs.length - 1;
++
++		function constrain() {
++			if ( index > lastTabIndex ) {
++				index = 0;
++			}
++			if ( index < 0 ) {
++				index = lastTabIndex;
++			}
++			return index;
++		}
++
++		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
++			index = goingForward ? index + 1 : index - 1;
++		}
++
++		return index;
++	},
++
++	_focusNextTab: function( index, goingForward ) {
++		index = this._findNextTab( index, goingForward );
++		this.tabs.eq( index ).focus();
++		return index;
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "disabled" ) {
++			// don't use the widget factory's disabled handling
++			this._setupDisabled( value );
++			return;
++		}
++
++		this._super( key, value);
++
++		if ( key === "collapsible" ) {
++			this.element.toggleClass( "ui-tabs-collapsible", value );
++			// Setting collapsible: false while collapsed; open first panel
++			if ( !value && this.options.active === false ) {
++				this._activate( 0 );
++			}
++		}
++
++		if ( key === "event" ) {
++			this._setupEvents( value );
++		}
++
++		if ( key === "heightStyle" ) {
++			this._setupHeightStyle( value );
++		}
++	},
++
++	_tabId: function( tab ) {
++		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
++	},
++
++	_sanitizeSelector: function( hash ) {
++		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
++	},
++
++	refresh: function() {
++		var options = this.options,
++			lis = this.tablist.children( ":has(a[href])" );
++
++		// get disabled tabs from class attribute from HTML
++		// this will get converted to a boolean if needed in _refresh()
++		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
++			return lis.index( tab );
++		});
++
++		this._processTabs();
++
++		// was collapsed or no tabs
++		if ( options.active === false || !this.anchors.length ) {
++			options.active = false;
++			this.active = $();
++		// was active, but active tab is gone
++		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining tabs are disabled
++			if ( this.tabs.length === options.disabled.length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous tab
++			} else {
++				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
++			}
++		// was active, active tab still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.tabs.index( this.active );
++		}
++
++		this._refresh();
++	},
++
++	_refresh: function() {
++		this._setupDisabled( this.options.disabled );
++		this._setupEvents( this.options.event );
++		this._setupHeightStyle( this.options.heightStyle );
++
++		this.tabs.not( this.active ).attr({
++			"aria-selected": "false",
++			tabIndex: -1
++		});
++		this.panels.not( this._getPanelForTab( this.active ) )
++			.hide()
++			.attr({
++				"aria-expanded": "false",
++				"aria-hidden": "true"
++			});
++
++		// Make sure one tab is in the tab order
++		if ( !this.active.length ) {
++			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active
++				.addClass( "ui-tabs-active ui-state-active" )
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++			this._getPanelForTab( this.active )
++				.show()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++	},
++
++	_processTabs: function() {
++		var that = this;
++
++		this.tablist = this._getList()
++			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.attr( "role", "tablist" );
++
++		this.tabs = this.tablist.find( "> li:has(a[href])" )
++			.addClass( "ui-state-default ui-corner-top" )
++			.attr({
++				role: "tab",
++				tabIndex: -1
++			});
++
++		this.anchors = this.tabs.map(function() {
++				return $( "a", this )[ 0 ];
++			})
++			.addClass( "ui-tabs-anchor" )
++			.attr({
++				role: "presentation",
++				tabIndex: -1
++			});
++
++		this.panels = $();
++
++		this.anchors.each(function( i, anchor ) {
++			var selector, panel, panelId,
++				anchorId = $( anchor ).uniqueId().attr( "id" ),
++				tab = $( anchor ).closest( "li" ),
++				originalAriaControls = tab.attr( "aria-controls" );
++
++			// inline tab
++			if ( isLocal( anchor ) ) {
++				selector = anchor.hash;
++				panel = that.element.find( that._sanitizeSelector( selector ) );
++			// remote tab
++			} else {
++				panelId = that._tabId( tab );
++				selector = "#" + panelId;
++				panel = that.element.find( selector );
++				if ( !panel.length ) {
++					panel = that._createPanel( panelId );
++					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
++				}
++				panel.attr( "aria-live", "polite" );
++			}
++
++			if ( panel.length) {
++				that.panels = that.panels.add( panel );
++			}
++			if ( originalAriaControls ) {
++				tab.data( "ui-tabs-aria-controls", originalAriaControls );
++			}
++			tab.attr({
++				"aria-controls": selector.substring( 1 ),
++				"aria-labelledby": anchorId
++			});
++			panel.attr( "aria-labelledby", anchorId );
++		});
++
++		this.panels
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.attr( "role", "tabpanel" );
++	},
++
++	// allow overriding how to find the list for rare usage scenarios (#7715)
++	_getList: function() {
++		return this.element.find( "ol,ul" ).eq( 0 );
++	},
++
++	_createPanel: function( id ) {
++		return $( "<div>" )
++			.attr( "id", id )
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.data( "ui-tabs-destroy", true );
++	},
++
++	_setupDisabled: function( disabled ) {
++		if ( $.isArray( disabled ) ) {
++			if ( !disabled.length ) {
++				disabled = false;
++			} else if ( disabled.length === this.anchors.length ) {
++				disabled = true;
++			}
++		}
++
++		// disable tabs
++		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
++			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
++				$( li )
++					.addClass( "ui-state-disabled" )
++					.attr( "aria-disabled", "true" );
++			} else {
++				$( li )
++					.removeClass( "ui-state-disabled" )
++					.removeAttr( "aria-disabled" );
++			}
++		}
++
++		this.options.disabled = disabled;
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			click: function( event ) {
++				event.preventDefault();
++			}
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
++		this._on( this.anchors, events );
++		this._on( this.tabs, { keydown: "_tabKeydown" } );
++		this._on( this.panels, { keydown: "_panelKeydown" } );
++
++		this._focusable( this.tabs );
++		this._hoverable( this.tabs );
++	},
++
++	_setupHeightStyle: function( heightStyle ) {
++		var maxHeight,
++			parent = this.element.parent();
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			maxHeight -= this.element.outerHeight() - this.element.height();
++
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.element.children().not( this.panels ).each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.panels.each(function() {
++				$( this ).height( Math.max( 0, maxHeight -
++					$( this ).innerHeight() + $( this ).height() ) );
++			})
++			.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.panels.each(function() {
++				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
++			}).height( maxHeight );
++		}
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			anchor = $( event.currentTarget ),
++			tab = anchor.closest( "li" ),
++			clickedIsActive = tab[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : this._getPanelForTab( tab ),
++			toHide = !active.length ? $() : this._getPanelForTab( active ),
++			eventData = {
++				oldTab: active,
++				oldPanel: toHide,
++				newTab: collapsing ? $() : tab,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if ( tab.hasClass( "ui-state-disabled" ) ||
++				// tab is already loading
++				tab.hasClass( "ui-tabs-loading" ) ||
++				// can't switch durning an animation
++				this.running ||
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.tabs.index( tab );
++
++		this.active = clickedIsActive ? $() : tab;
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		if ( !toHide.length && !toShow.length ) {
++			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
++		}
++
++		if ( toShow.length ) {
++			this.load( this.tabs.index( tab ), event );
++		}
++		this._toggle( event, eventData );
++	},
++
++	// handles show/hide for selecting tabs
++	_toggle: function( event, eventData ) {
++		var that = this,
++			toShow = eventData.newPanel,
++			toHide = eventData.oldPanel;
++
++		this.running = true;
++
++		function complete() {
++			that.running = false;
++			that._trigger( "activate", event, eventData );
++		}
++
++		function show() {
++			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
++
++			if ( toShow.length && that.options.show ) {
++				that._show( toShow, that.options.show, complete );
++			} else {
++				toShow.show();
++				complete();
++			}
++		}
++
++		// start out by hiding, then showing, then completing
++		if ( toHide.length && this.options.hide ) {
++			this._hide( toHide, this.options.hide, function() {
++				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++				show();
++			});
++		} else {
++			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++			toHide.hide();
++			show();
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		eventData.oldTab.attr( "aria-selected", "false" );
++		// If we're switching tabs, remove the old tab from the tab order.
++		// If we're opening from collapsed state, remove the previous tab from the tab order.
++		// If we're collapsing, then keep the collapsing tab in the tab order.
++		if ( toShow.length && toHide.length ) {
++			eventData.oldTab.attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.tabs.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow.attr({
++			"aria-expanded": "true",
++			"aria-hidden": "false"
++		});
++		eventData.newTab.attr({
++			"aria-selected": "true",
++			tabIndex: 0
++		});
++	},
++
++	_activate: function( index ) {
++		var anchor,
++			active = this._findActive( index );
++
++		// trying to activate the already active panel
++		if ( active[ 0 ] === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the current active header
++		if ( !active.length ) {
++			active = this.active;
++		}
++
++		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
++		this._eventHandler({
++			target: anchor,
++			currentTarget: anchor,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( index ) {
++		return index === false ? $() : this.tabs.eq( index );
++	},
++
++	_getIndex: function( index ) {
++		// meta-function to give users option to provide a href string instead of a numerical index.
++		if ( typeof index === "string" ) {
++			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
++		}
++
++		return index;
++	},
++
++	_destroy: function() {
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
++
++		this.tablist
++			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.removeAttr( "role" );
++
++		this.anchors
++			.removeClass( "ui-tabs-anchor" )
++			.removeAttr( "role" )
++			.removeAttr( "tabIndex" )
++			.removeUniqueId();
++
++		this.tabs.add( this.panels ).each(function() {
++			if ( $.data( this, "ui-tabs-destroy" ) ) {
++				$( this ).remove();
++			} else {
++				$( this )
++					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
++						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
++					.removeAttr( "tabIndex" )
++					.removeAttr( "aria-live" )
++					.removeAttr( "aria-busy" )
++					.removeAttr( "aria-selected" )
++					.removeAttr( "aria-labelledby" )
++					.removeAttr( "aria-hidden" )
++					.removeAttr( "aria-expanded" )
++					.removeAttr( "role" );
++			}
++		});
++
++		this.tabs.each(function() {
++			var li = $( this ),
++				prev = li.data( "ui-tabs-aria-controls" );
++			if ( prev ) {
++				li
++					.attr( "aria-controls", prev )
++					.removeData( "ui-tabs-aria-controls" );
++			} else {
++				li.removeAttr( "aria-controls" );
++			}
++		});
++
++		this.panels.show();
++
++		if ( this.options.heightStyle !== "content" ) {
++			this.panels.css( "height", "" );
++		}
++	},
++
++	enable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === false ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = false;
++		} else {
++			index = this._getIndex( index );
++			if ( $.isArray( disabled ) ) {
++				disabled = $.map( disabled, function( num ) {
++					return num !== index ? num : null;
++				});
++			} else {
++				disabled = $.map( this.tabs, function( li, num ) {
++					return num !== index ? num : null;
++				});
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	disable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === true ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = true;
++		} else {
++			index = this._getIndex( index );
++			if ( $.inArray( index, disabled ) !== -1 ) {
++				return;
++			}
++			if ( $.isArray( disabled ) ) {
++				disabled = $.merge( [ index ], disabled ).sort();
++			} else {
++				disabled = [ index ];
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	load: function( index, event ) {
++		index = this._getIndex( index );
++		var that = this,
++			tab = this.tabs.eq( index ),
++			anchor = tab.find( ".ui-tabs-anchor" ),
++			panel = this._getPanelForTab( tab ),
++			eventData = {
++				tab: tab,
++				panel: panel
++			};
++
++		// not remote
++		if ( isLocal( anchor[ 0 ] ) ) {
++			return;
++		}
++
++		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
++
++		// support: jQuery <1.8
++		// jQuery <1.8 returns false if the request is canceled in beforeSend,
++		// but as of 1.8, $.ajax() always returns a jqXHR object.
++		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
++			tab.addClass( "ui-tabs-loading" );
++			panel.attr( "aria-busy", "true" );
++
++			this.xhr
++				.success(function( response ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						panel.html( response );
++						that._trigger( "load", event, eventData );
++					}, 1 );
++				})
++				.complete(function( jqXHR, status ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						if ( status === "abort" ) {
++							that.panels.stop( false, true );
++						}
++
++						tab.removeClass( "ui-tabs-loading" );
++						panel.removeAttr( "aria-busy" );
++
++						if ( jqXHR === that.xhr ) {
++							delete that.xhr;
++						}
++					}, 1 );
++				});
++		}
++	},
++
++	_ajaxSettings: function( anchor, event, eventData ) {
++		var that = this;
++		return {
++			url: anchor.attr( "href" ),
++			beforeSend: function( jqXHR, settings ) {
++				return that._trigger( "beforeLoad", event,
++					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
++			}
++		};
++	},
++
++	_getPanelForTab: function( tab ) {
++		var id = $( tab ).attr( "aria-controls" );
++		return this.element.find( this._sanitizeSelector( "#" + id ) );
++	}
++});
++
++})( jQuery );
++(function( $ ) {
++
++var increments = 0;
++
++function addDescribedBy( elem, id ) {
++	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
++	describedby.push( id );
++	elem
++		.data( "ui-tooltip-id", id )
++		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
++}
++
++function removeDescribedBy( elem ) {
++	var id = elem.data( "ui-tooltip-id" ),
++		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
++		index = $.inArray( id, describedby );
++	if ( index !== -1 ) {
++		describedby.splice( index, 1 );
++	}
++
++	elem.removeData( "ui-tooltip-id" );
++	describedby = $.trim( describedby.join( " " ) );
++	if ( describedby ) {
++		elem.attr( "aria-describedby", describedby );
++	} else {
++		elem.removeAttr( "aria-describedby" );
++	}
++}
++
++$.widget( "ui.tooltip", {
++	version: "1.10.3",
++	options: {
++		content: function() {
++			// support: IE<9, Opera in jQuery <1.7
++			// .text() can't accept undefined, so coerce to a string
++			var title = $( this ).attr( "title" ) || "";
++			// Escape title, since we're going from an attribute to raw HTML
++			return $( "<a>" ).text( title ).html();
++		},
++		hide: true,
++		// Disabled elements have inconsistent behavior across browsers (#8661)
++		items: "[title]:not([disabled])",
++		position: {
++			my: "left top+15",
++			at: "left bottom",
++			collision: "flipfit flip"
++		},
++		show: true,
++		tooltipClass: null,
++		track: false,
++
++		// callbacks
++		close: null,
++		open: null
++	},
++
++	_create: function() {
++		this._on({
++			mouseover: "open",
++			focusin: "open"
++		});
++
++		// IDs of generated tooltips, needed for destroy
++		this.tooltips = {};
++		// IDs of parent tooltips where we removed the title attribute
++		this.parents = {};
++
++		if ( this.options.disabled ) {
++			this._disable();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var that = this;
++
++		if ( key === "disabled" ) {
++			this[ value ? "_disable" : "_enable" ]();
++			this.options[ key ] = value;
++			// disable element style changes
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "content" ) {
++			$.each( this.tooltips, function( id, element ) {
++				that._updateContent( element );
++			});
++		}
++	},
++
++	_disable: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++		});
++
++		// remove title attributes to prevent native tooltips
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.is( "[title]" ) ) {
++				element
++					.data( "ui-tooltip-title", element.attr( "title" ) )
++					.attr( "title", "" );
++			}
++		});
++	},
++
++	_enable: function() {
++		// restore title attributes
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++			}
++		});
++	},
++
++	open: function( event ) {
++		var that = this,
++			target = $( event ? event.target : this.element )
++				// we need closest here due to mouseover bubbling,
++				// but always pointing at the same event target
++				.closest( this.options.items );
++
++		// No element to show a tooltip for or the tooltip is already open
++		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
++			return;
++		}
++
++		if ( target.attr( "title" ) ) {
++			target.data( "ui-tooltip-title", target.attr( "title" ) );
++		}
++
++		target.data( "ui-tooltip-open", true );
++
++		// kill parent tooltips, custom or native, for hover
++		if ( event && event.type === "mouseover" ) {
++			target.parents().each(function() {
++				var parent = $( this ),
++					blurEvent;
++				if ( parent.data( "ui-tooltip-open" ) ) {
++					blurEvent = $.Event( "blur" );
++					blurEvent.target = blurEvent.currentTarget = this;
++					that.close( blurEvent, true );
++				}
++				if ( parent.attr( "title" ) ) {
++					parent.uniqueId();
++					that.parents[ this.id ] = {
++						element: this,
++						title: parent.attr( "title" )
++					};
++					parent.attr( "title", "" );
++				}
++			});
++		}
++
++		this._updateContent( target, event );
++	},
++
++	_updateContent: function( target, event ) {
++		var content,
++			contentOption = this.options.content,
++			that = this,
++			eventType = event ? event.type : null;
++
++		if ( typeof contentOption === "string" ) {
++			return this._open( event, target, contentOption );
++		}
++
++		content = contentOption.call( target[0], function( response ) {
++			// ignore async response if tooltip was closed already
++			if ( !target.data( "ui-tooltip-open" ) ) {
++				return;
++			}
++			// IE may instantly serve a cached response for ajax requests
++			// delay this call to _open so the other call to _open runs first
++			that._delay(function() {
++				// jQuery creates a special event for focusin when it doesn't
++				// exist natively. To improve performance, the native event
++				// object is reused and the type is changed. Therefore, we can't
++				// rely on the type being correct after the event finished
++				// bubbling, so we set it back to the previous value. (#8740)
++				if ( event ) {
++					event.type = eventType;
++				}
++				this._open( event, target, response );
++			});
++		});
++		if ( content ) {
++			this._open( event, target, content );
++		}
++	},
++
++	_open: function( event, target, content ) {
++		var tooltip, events, delayedShow,
++			positionOption = $.extend( {}, this.options.position );
++
++		if ( !content ) {
++			return;
++		}
++
++		// Content can be updated multiple times. If the tooltip already
++		// exists, then just update the content and bail.
++		tooltip = this._find( target );
++		if ( tooltip.length ) {
++			tooltip.find( ".ui-tooltip-content" ).html( content );
++			return;
++		}
++
++		// if we have a title, clear it to prevent the native tooltip
++		// we have to check first to avoid defining a title if none exists
++		// (we don't want to cause an element to start matching [title])
++		//
++		// We use removeAttr only for key events, to allow IE to export the correct
++		// accessible attributes. For mouse events, set to empty string to avoid
++		// native tooltip showing up (happens only when removing inside mouseover).
++		if ( target.is( "[title]" ) ) {
++			if ( event && event.type === "mouseover" ) {
++				target.attr( "title", "" );
++			} else {
++				target.removeAttr( "title" );
++			}
++		}
++
++		tooltip = this._tooltip( target );
++		addDescribedBy( target, tooltip.attr( "id" ) );
++		tooltip.find( ".ui-tooltip-content" ).html( content );
++
++		function position( event ) {
++			positionOption.of = event;
++			if ( tooltip.is( ":hidden" ) ) {
++				return;
++			}
++			tooltip.position( positionOption );
++		}
++		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
++			this._on( this.document, {
++				mousemove: position
++			});
++			// trigger once to override element-relative positioning
++			position( event );
++		} else {
++			tooltip.position( $.extend({
++				of: target
++			}, this.options.position ) );
++		}
++
++		tooltip.hide();
++
++		this._show( tooltip, this.options.show );
++		// Handle tracking tooltips that are shown with a delay (#8644). As soon
++		// as the tooltip is visible, position the tooltip using the most recent
++		// event.
++		if ( this.options.show && this.options.show.delay ) {
++			delayedShow = this.delayedShow = setInterval(function() {
++				if ( tooltip.is( ":visible" ) ) {
++					position( positionOption.of );
++					clearInterval( delayedShow );
++				}
++			}, $.fx.interval );
++		}
++
++		this._trigger( "open", event, { tooltip: tooltip } );
++
++		events = {
++			keyup: function( event ) {
++				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
++					var fakeEvent = $.Event(event);
++					fakeEvent.currentTarget = target[0];
++					this.close( fakeEvent, true );
++				}
++			},
++			remove: function() {
++				this._removeTooltip( tooltip );
++			}
++		};
++		if ( !event || event.type === "mouseover" ) {
++			events.mouseleave = "close";
++		}
++		if ( !event || event.type === "focusin" ) {
++			events.focusout = "close";
++		}
++		this._on( true, target, events );
++	},
++
++	close: function( event ) {
++		var that = this,
++			target = $( event ? event.currentTarget : this.element ),
++			tooltip = this._find( target );
++
++		// disabling closes the tooltip, so we need to track when we're closing
++		// to avoid an infinite loop in case the tooltip becomes disabled on close
++		if ( this.closing ) {
++			return;
++		}
++
++		// Clear the interval for delayed tracking tooltips
++		clearInterval( this.delayedShow );
++
++		// only set title if we had one before (see comment in _open())
++		if ( target.data( "ui-tooltip-title" ) ) {
++			target.attr( "title", target.data( "ui-tooltip-title" ) );
++		}
++
++		removeDescribedBy( target );
++
++		tooltip.stop( true );
++		this._hide( tooltip, this.options.hide, function() {
++			that._removeTooltip( $( this ) );
++		});
++
++		target.removeData( "ui-tooltip-open" );
++		this._off( target, "mouseleave focusout keyup" );
++		// Remove 'remove' binding only on delegated targets
++		if ( target[0] !== this.element[0] ) {
++			this._off( target, "remove" );
++		}
++		this._off( this.document, "mousemove" );
++
++		if ( event && event.type === "mouseleave" ) {
++			$.each( this.parents, function( id, parent ) {
++				$( parent.element ).attr( "title", parent.title );
++				delete that.parents[ id ];
++			});
++		}
++
++		this.closing = true;
++		this._trigger( "close", event, { tooltip: tooltip } );
++		this.closing = false;
++	},
++
++	_tooltip: function( element ) {
++		var id = "ui-tooltip-" + increments++,
++			tooltip = $( "<div>" )
++				.attr({
++					id: id,
++					role: "tooltip"
++				})
++				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
++					( this.options.tooltipClass || "" ) );
++		$( "<div>" )
++			.addClass( "ui-tooltip-content" )
++			.appendTo( tooltip );
++		tooltip.appendTo( this.document[0].body );
++		this.tooltips[ id ] = element;
++		return tooltip;
++	},
++
++	_find: function( target ) {
++		var id = target.data( "ui-tooltip-id" );
++		return id ? $( "#" + id ) : $();
++	},
++
++	_removeTooltip: function( tooltip ) {
++		tooltip.remove();
++		delete this.tooltips[ tooltip.attr( "id" ) ];
++	},
++
++	_destroy: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			// Delegate to close method to handle common cleanup
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++
++			// Remove immediately; destroying an open tooltip doesn't use the
++			// hide animation
++			$( "#" + id ).remove();
++
++			// Restore the title
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++				element.removeData( "ui-tooltip-title" );
++			}
++		});
++	}
++});
++
++}( jQuery ) );
++(function($, undefined) {
++
++var dataSpace = "ui-effects-";
++
++$.effects = {
++	effect: {}
++};
++
++/*!
++ * jQuery Color Animations v2.1.2
++ * https://github.com/jquery/jquery-color
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * Date: Wed Jan 16 08:47:09 2013 -0600
++ */
++(function( jQuery, undefined ) {
++
++	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
++
++	// plusequals test for += 100 -= 100
++	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
++	// a set of RE's that can match strings and generate color tuples.
++	stringParsers = [{
++			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ],
++					execResult[ 3 ],
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ] * 2.55,
++					execResult[ 2 ] * 2.55,
++					execResult[ 3 ] * 2.55,
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			space: "hsla",
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ] / 100,
++					execResult[ 3 ] / 100,
++					execResult[ 4 ]
++				];
++			}
++		}],
++
++	// jQuery.Color( )
++	color = jQuery.Color = function( color, green, blue, alpha ) {
++		return new jQuery.Color.fn.parse( color, green, blue, alpha );
++	},
++	spaces = {
++		rgba: {
++			props: {
++				red: {
++					idx: 0,
++					type: "byte"
++				},
++				green: {
++					idx: 1,
++					type: "byte"
++				},
++				blue: {
++					idx: 2,
++					type: "byte"
++				}
++			}
++		},
++
++		hsla: {
++			props: {
++				hue: {
++					idx: 0,
++					type: "degrees"
++				},
++				saturation: {
++					idx: 1,
++					type: "percent"
++				},
++				lightness: {
++					idx: 2,
++					type: "percent"
++				}
++			}
++		}
++	},
++	propTypes = {
++		"byte": {
++			floor: true,
++			max: 255
++		},
++		"percent": {
++			max: 1
++		},
++		"degrees": {
++			mod: 360,
++			floor: true
++		}
++	},
++	support = color.support = {},
++
++	// element for support tests
++	supportElem = jQuery( "<p>" )[ 0 ],
++
++	// colors = jQuery.Color.names
++	colors,
++
++	// local aliases of functions called often
++	each = jQuery.each;
++
++// determine rgba support immediately
++supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
++support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
++
++// define cache name and alpha properties
++// for rgba and hsla spaces
++each( spaces, function( spaceName, space ) {
++	space.cache = "_" + spaceName;
++	space.props.alpha = {
++		idx: 3,
++		type: "percent",
++		def: 1
++	};
++});
++
++function clamp( value, prop, allowEmpty ) {
++	var type = propTypes[ prop.type ] || {};
++
++	if ( value == null ) {
++		return (allowEmpty || !prop.def) ? null : prop.def;
++	}
++
++	// ~~ is an short way of doing floor for positive numbers
++	value = type.floor ? ~~value : parseFloat( value );
++
++	// IE will pass in empty strings as value for alpha,
++	// which will hit this case
++	if ( isNaN( value ) ) {
++		return prop.def;
++	}
++
++	if ( type.mod ) {
++		// we add mod before modding to make sure that negatives values
++		// get converted properly: -10 -> 350
++		return (value + type.mod) % type.mod;
++	}
++
++	// for now all property types without mod have min and max
++	return 0 > value ? 0 : type.max < value ? type.max : value;
++}
++
++function stringParse( string ) {
++	var inst = color(),
++		rgba = inst._rgba = [];
++
++	string = string.toLowerCase();
++
++	each( stringParsers, function( i, parser ) {
++		var parsed,
++			match = parser.re.exec( string ),
++			values = match && parser.parse( match ),
++			spaceName = parser.space || "rgba";
++
++		if ( values ) {
++			parsed = inst[ spaceName ]( values );
++
++			// if this was an rgba parse the assignment might happen twice
++			// oh well....
++			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
++			rgba = inst._rgba = parsed._rgba;
++
++			// exit each( stringParsers ) here because we matched
++			return false;
++		}
++	});
++
++	// Found a stringParser that handled it
++	if ( rgba.length ) {
++
++		// if this came from a parsed string, force "transparent" when alpha is 0
++		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
++		if ( rgba.join() === "0,0,0,0" ) {
++			jQuery.extend( rgba, colors.transparent );
++		}
++		return inst;
++	}
++
++	// named colors
++	return colors[ string ];
++}
++
++color.fn = jQuery.extend( color.prototype, {
++	parse: function( red, green, blue, alpha ) {
++		if ( red === undefined ) {
++			this._rgba = [ null, null, null, null ];
++			return this;
++		}
++		if ( red.jquery || red.nodeType ) {
++			red = jQuery( red ).css( green );
++			green = undefined;
++		}
++
++		var inst = this,
++			type = jQuery.type( red ),
++			rgba = this._rgba = [];
++
++		// more than 1 argument specified - assume ( red, green, blue, alpha )
++		if ( green !== undefined ) {
++			red = [ red, green, blue, alpha ];
++			type = "array";
++		}
++
++		if ( type === "string" ) {
++			return this.parse( stringParse( red ) || colors._default );
++		}
++
++		if ( type === "array" ) {
++			each( spaces.rgba.props, function( key, prop ) {
++				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
++			});
++			return this;
++		}
++
++		if ( type === "object" ) {
++			if ( red instanceof color ) {
++				each( spaces, function( spaceName, space ) {
++					if ( red[ space.cache ] ) {
++						inst[ space.cache ] = red[ space.cache ].slice();
++					}
++				});
++			} else {
++				each( spaces, function( spaceName, space ) {
++					var cache = space.cache;
++					each( space.props, function( key, prop ) {
++
++						// if the cache doesn't exist, and we know how to convert
++						if ( !inst[ cache ] && space.to ) {
++
++							// if the value was null, we don't need to copy it
++							// if the key was alpha, we don't need to copy it either
++							if ( key === "alpha" || red[ key ] == null ) {
++								return;
++							}
++							inst[ cache ] = space.to( inst._rgba );
++						}
++
++						// this is the only case where we allow nulls for ALL properties.
++						// call clamp with alwaysAllowEmpty
++						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
++					});
++
++					// everything defined but alpha?
++					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
++						// use the default of 1
++						inst[ cache ][ 3 ] = 1;
++						if ( space.from ) {
++							inst._rgba = space.from( inst[ cache ] );
++						}
++					}
++				});
++			}
++			return this;
++		}
++	},
++	is: function( compare ) {
++		var is = color( compare ),
++			same = true,
++			inst = this;
++
++		each( spaces, function( _, space ) {
++			var localCache,
++				isCache = is[ space.cache ];
++			if (isCache) {
++				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
++				each( space.props, function( _, prop ) {
++					if ( isCache[ prop.idx ] != null ) {
++						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
++						return same;
++					}
++				});
++			}
++			return same;
++		});
++		return same;
++	},
++	_space: function() {
++		var used = [],
++			inst = this;
++		each( spaces, function( spaceName, space ) {
++			if ( inst[ space.cache ] ) {
++				used.push( spaceName );
++			}
++		});
++		return used.pop();
++	},
++	transition: function( other, distance ) {
++		var end = color( other ),
++			spaceName = end._space(),
++			space = spaces[ spaceName ],
++			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
++			start = startColor[ space.cache ] || space.to( startColor._rgba ),
++			result = start.slice();
++
++		end = end[ space.cache ];
++		each( space.props, function( key, prop ) {
++			var index = prop.idx,
++				startValue = start[ index ],
++				endValue = end[ index ],
++				type = propTypes[ prop.type ] || {};
++
++			// if null, don't override start value
++			if ( endValue === null ) {
++				return;
++			}
++			// if null - use end
++			if ( startValue === null ) {
++				result[ index ] = endValue;
++			} else {
++				if ( type.mod ) {
++					if ( endValue - startValue > type.mod / 2 ) {
++						startValue += type.mod;
++					} else if ( startValue - endValue > type.mod / 2 ) {
++						startValue -= type.mod;
++					}
++				}
++				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
++			}
++		});
++		return this[ spaceName ]( result );
++	},
++	blend: function( opaque ) {
++		// if we are already opaque - return ourself
++		if ( this._rgba[ 3 ] === 1 ) {
++			return this;
++		}
++
++		var rgb = this._rgba.slice(),
++			a = rgb.pop(),
++			blend = color( opaque )._rgba;
++
++		return color( jQuery.map( rgb, function( v, i ) {
++			return ( 1 - a ) * blend[ i ] + a * v;
++		}));
++	},
++	toRgbaString: function() {
++		var prefix = "rgba(",
++			rgba = jQuery.map( this._rgba, function( v, i ) {
++				return v == null ? ( i > 2 ? 1 : 0 ) : v;
++			});
++
++		if ( rgba[ 3 ] === 1 ) {
++			rgba.pop();
++			prefix = "rgb(";
++		}
++
++		return prefix + rgba.join() + ")";
++	},
++	toHslaString: function() {
++		var prefix = "hsla(",
++			hsla = jQuery.map( this.hsla(), function( v, i ) {
++				if ( v == null ) {
++					v = i > 2 ? 1 : 0;
++				}
++
++				// catch 1 and 2
++				if ( i && i < 3 ) {
++					v = Math.round( v * 100 ) + "%";
++				}
++				return v;
++			});
++
++		if ( hsla[ 3 ] === 1 ) {
++			hsla.pop();
++			prefix = "hsl(";
++		}
++		return prefix + hsla.join() + ")";
++	},
++	toHexString: function( includeAlpha ) {
++		var rgba = this._rgba.slice(),
++			alpha = rgba.pop();
++
++		if ( includeAlpha ) {
++			rgba.push( ~~( alpha * 255 ) );
++		}
++
++		return "#" + jQuery.map( rgba, function( v ) {
++
++			// default to 0 when nulls exist
++			v = ( v || 0 ).toString( 16 );
++			return v.length === 1 ? "0" + v : v;
++		}).join("");
++	},
++	toString: function() {
++		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
++	}
++});
++color.fn.parse.prototype = color.fn;
++
++// hsla conversions adapted from:
++// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
++
++function hue2rgb( p, q, h ) {
++	h = ( h + 1 ) % 1;
++	if ( h * 6 < 1 ) {
++		return p + (q - p) * h * 6;
++	}
++	if ( h * 2 < 1) {
++		return q;
++	}
++	if ( h * 3 < 2 ) {
++		return p + (q - p) * ((2/3) - h) * 6;
++	}
++	return p;
++}
++
++spaces.hsla.to = function ( rgba ) {
++	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
++		return [ null, null, null, rgba[ 3 ] ];
++	}
++	var r = rgba[ 0 ] / 255,
++		g = rgba[ 1 ] / 255,
++		b = rgba[ 2 ] / 255,
++		a = rgba[ 3 ],
++		max = Math.max( r, g, b ),
++		min = Math.min( r, g, b ),
++		diff = max - min,
++		add = max + min,
++		l = add * 0.5,
++		h, s;
++
++	if ( min === max ) {
++		h = 0;
++	} else if ( r === max ) {
++		h = ( 60 * ( g - b ) / diff ) + 360;
++	} else if ( g === max ) {
++		h = ( 60 * ( b - r ) / diff ) + 120;
++	} else {
++		h = ( 60 * ( r - g ) / diff ) + 240;
++	}
++
++	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
++	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
++	if ( diff === 0 ) {
++		s = 0;
++	} else if ( l <= 0.5 ) {
++		s = diff / add;
++	} else {
++		s = diff / ( 2 - add );
++	}
++	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
++};
++
++spaces.hsla.from = function ( hsla ) {
++	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
++		return [ null, null, null, hsla[ 3 ] ];
++	}
++	var h = hsla[ 0 ] / 360,
++		s = hsla[ 1 ],
++		l = hsla[ 2 ],
++		a = hsla[ 3 ],
++		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
++		p = 2 * l - q;
++
++	return [
++		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
++		Math.round( hue2rgb( p, q, h ) * 255 ),
++		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
++		a
++	];
++};
++
++
++each( spaces, function( spaceName, space ) {
++	var props = space.props,
++		cache = space.cache,
++		to = space.to,
++		from = space.from;
++
++	// makes rgba() and hsla()
++	color.fn[ spaceName ] = function( value ) {
++
++		// generate a cache for this space if it doesn't exist
++		if ( to && !this[ cache ] ) {
++			this[ cache ] = to( this._rgba );
++		}
++		if ( value === undefined ) {
++			return this[ cache ].slice();
++		}
++
++		var ret,
++			type = jQuery.type( value ),
++			arr = ( type === "array" || type === "object" ) ? value : arguments,
++			local = this[ cache ].slice();
++
++		each( props, function( key, prop ) {
++			var val = arr[ type === "object" ? key : prop.idx ];
++			if ( val == null ) {
++				val = local[ prop.idx ];
++			}
++			local[ prop.idx ] = clamp( val, prop );
++		});
++
++		if ( from ) {
++			ret = color( from( local ) );
++			ret[ cache ] = local;
++			return ret;
++		} else {
++			return color( local );
++		}
++	};
++
++	// makes red() green() blue() alpha() hue() saturation() lightness()
++	each( props, function( key, prop ) {
++		// alpha is included in more than one space
++		if ( color.fn[ key ] ) {
++			return;
++		}
++		color.fn[ key ] = function( value ) {
++			var vtype = jQuery.type( value ),
++				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
++				local = this[ fn ](),
++				cur = local[ prop.idx ],
++				match;
++
++			if ( vtype === "undefined" ) {
++				return cur;
++			}
++
++			if ( vtype === "function" ) {
++				value = value.call( this, cur );
++				vtype = jQuery.type( value );
++			}
++			if ( value == null && prop.empty ) {
++				return this;
++			}
++			if ( vtype === "string" ) {
++				match = rplusequals.exec( value );
++				if ( match ) {
++					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
++				}
++			}
++			local[ prop.idx ] = value;
++			return this[ fn ]( local );
++		};
++	});
++});
++
++// add cssHook and .fx.step function for each named hook.
++// accept a space separated string of properties
++color.hook = function( hook ) {
++	var hooks = hook.split( " " );
++	each( hooks, function( i, hook ) {
++		jQuery.cssHooks[ hook ] = {
++			set: function( elem, value ) {
++				var parsed, curElem,
++					backgroundColor = "";
++
++				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
++					value = color( parsed || value );
++					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
++						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
++						while (
++							(backgroundColor === "" || backgroundColor === "transparent") &&
++							curElem && curElem.style
++						) {
++							try {
++								backgroundColor = jQuery.css( curElem, "backgroundColor" );
++								curElem = curElem.parentNode;
++							} catch ( e ) {
++							}
++						}
++
++						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
++							backgroundColor :
++							"_default" );
++					}
++
++					value = value.toRgbaString();
++				}
++				try {
++					elem.style[ hook ] = value;
++				} catch( e ) {
++					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
++				}
++			}
++		};
++		jQuery.fx.step[ hook ] = function( fx ) {
++			if ( !fx.colorInit ) {
++				fx.start = color( fx.elem, hook );
++				fx.end = color( fx.end );
++				fx.colorInit = true;
++			}
++			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
++		};
++	});
++
++};
++
++color.hook( stepHooks );
++
++jQuery.cssHooks.borderColor = {
++	expand: function( value ) {
++		var expanded = {};
++
++		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
++			expanded[ "border" + part + "Color" ] = value;
++		});
++		return expanded;
++	}
++};
++
++// Basic color names only.
++// Usage of any of the other color names requires adding yourself or including
++// jquery.color.svg-names.js.
++colors = jQuery.Color.names = {
++	// 4.1. Basic color keywords
++	aqua: "#00ffff",
++	black: "#000000",
++	blue: "#0000ff",
++	fuchsia: "#ff00ff",
++	gray: "#808080",
++	green: "#008000",
++	lime: "#00ff00",
++	maroon: "#800000",
++	navy: "#000080",
++	olive: "#808000",
++	purple: "#800080",
++	red: "#ff0000",
++	silver: "#c0c0c0",
++	teal: "#008080",
++	white: "#ffffff",
++	yellow: "#ffff00",
++
++	// 4.2.3. "transparent" color keyword
++	transparent: [ null, null, null, 0 ],
++
++	_default: "#ffffff"
++};
++
++})( jQuery );
++
++
++/******************************************************************************/
++/****************************** CLASS ANIMATIONS ******************************/
++/******************************************************************************/
++(function() {
++
++var classAnimationActions = [ "add", "remove", "toggle" ],
++	shorthandStyles = {
++		border: 1,
++		borderBottom: 1,
++		borderColor: 1,
++		borderLeft: 1,
++		borderRight: 1,
++		borderTop: 1,
++		borderWidth: 1,
++		margin: 1,
++		padding: 1
++	};
++
++$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
++	$.fx.step[ prop ] = function( fx ) {
++		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
++			jQuery.style( fx.elem, prop, fx.end );
++			fx.setAttr = true;
++		}
++	};
++});
++
++function getElementStyles( elem ) {
++	var key, len,
++		style = elem.ownerDocument.defaultView ?
++			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
++			elem.currentStyle,
++		styles = {};
++
++	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
++		len = style.length;
++		while ( len-- ) {
++			key = style[ len ];
++			if ( typeof style[ key ] === "string" ) {
++				styles[ $.camelCase( key ) ] = style[ key ];
++			}
++		}
++	// support: Opera, IE <9
++	} else {
++		for ( key in style ) {
++			if ( typeof style[ key ] === "string" ) {
++				styles[ key ] = style[ key ];
++			}
++		}
++	}
++
++	return styles;
++}
++
++
++function styleDifference( oldStyle, newStyle ) {
++	var diff = {},
++		name, value;
++
++	for ( name in newStyle ) {
++		value = newStyle[ name ];
++		if ( oldStyle[ name ] !== value ) {
++			if ( !shorthandStyles[ name ] ) {
++				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
++					diff[ name ] = value;
++				}
++			}
++		}
++	}
++
++	return diff;
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++$.effects.animateClass = function( value, duration, easing, callback ) {
++	var o = $.speed( duration, easing, callback );
++
++	return this.queue( function() {
++		var animated = $( this ),
++			baseClass = animated.attr( "class" ) || "",
++			applyClassChange,
++			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
++
++		// map the animated objects to store the original styles.
++		allAnimations = allAnimations.map(function() {
++			var el = $( this );
++			return {
++				el: el,
++				start: getElementStyles( this )
++			};
++		});
++
++		// apply class change
++		applyClassChange = function() {
++			$.each( classAnimationActions, function(i, action) {
++				if ( value[ action ] ) {
++					animated[ action + "Class" ]( value[ action ] );
++				}
++			});
++		};
++		applyClassChange();
++
++		// map all animated objects again - calculate new styles and diff
++		allAnimations = allAnimations.map(function() {
++			this.end = getElementStyles( this.el[ 0 ] );
++			this.diff = styleDifference( this.start, this.end );
++			return this;
++		});
++
++		// apply original class
++		animated.attr( "class", baseClass );
++
++		// map all animated objects again - this time collecting a promise
++		allAnimations = allAnimations.map(function() {
++			var styleInfo = this,
++				dfd = $.Deferred(),
++				opts = $.extend({}, o, {
++					queue: false,
++					complete: function() {
++						dfd.resolve( styleInfo );
++					}
++				});
++
++			this.el.animate( this.diff, opts );
++			return dfd.promise();
++		});
++
++		// once all animations have completed:
++		$.when.apply( $, allAnimations.get() ).done(function() {
++
++			// set the final class
++			applyClassChange();
++
++			// for each animated element,
++			// clear all css properties that were animated
++			$.each( arguments, function() {
++				var el = this.el;
++				$.each( this.diff, function(key) {
++					el.css( key, "" );
++				});
++			});
++
++			// this is guarnteed to be there if you use jQuery.speed()
++			// it also handles dequeuing the next anim...
++			o.complete.call( animated[ 0 ] );
++		});
++	});
++};
++
++$.fn.extend({
++	addClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return speed ?
++				$.effects.animateClass.call( this,
++					{ add: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.addClass ),
++
++	removeClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return arguments.length > 1 ?
++				$.effects.animateClass.call( this,
++					{ remove: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.removeClass ),
++
++	toggleClass: (function( orig ) {
++		return function( classNames, force, speed, easing, callback ) {
++			if ( typeof force === "boolean" || force === undefined ) {
++				if ( !speed ) {
++					// without speed parameter
++					return orig.apply( this, arguments );
++				} else {
++					return $.effects.animateClass.call( this,
++						(force ? { add: classNames } : { remove: classNames }),
++						speed, easing, callback );
++				}
++			} else {
++				// without force parameter
++				return $.effects.animateClass.call( this,
++					{ toggle: classNames }, force, speed, easing );
++			}
++		};
++	})( $.fn.toggleClass ),
++
++	switchClass: function( remove, add, speed, easing, callback) {
++		return $.effects.animateClass.call( this, {
++			add: add,
++			remove: remove
++		}, speed, easing, callback );
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EFFECTS **********************************/
++/******************************************************************************/
++
++(function() {
++
++$.extend( $.effects, {
++	version: "1.10.3",
++
++	// Saves a set of properties in a data storage
++	save: function( element, set ) {
++		for( var i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
++			}
++		}
++	},
++
++	// Restores a set of previously saved properties from a data storage
++	restore: function( element, set ) {
++		var val, i;
++		for( i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				val = element.data( dataSpace + set[ i ] );
++				// support: jQuery 1.6.2
++				// http://bugs.jquery.com/ticket/9917
++				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
++				// We can't differentiate between "" and 0 here, so we just assume
++				// empty string since it's likely to be a more common value...
++				if ( val === undefined ) {
++					val = "";
++				}
++				element.css( set[ i ], val );
++			}
++		}
++	},
++
++	setMode: function( el, mode ) {
++		if (mode === "toggle") {
++			mode = el.is( ":hidden" ) ? "show" : "hide";
++		}
++		return mode;
++	},
++
++	// Translates a [top,left] array into a baseline value
++	// this should be a little more flexible in the future to handle a string & hash
++	getBaseline: function( origin, original ) {
++		var y, x;
++		switch ( origin[ 0 ] ) {
++			case "top": y = 0; break;
++			case "middle": y = 0.5; break;
++			case "bottom": y = 1; break;
++			default: y = origin[ 0 ] / original.height;
++		}
++		switch ( origin[ 1 ] ) {
++			case "left": x = 0; break;
++			case "center": x = 0.5; break;
++			case "right": x = 1; break;
++			default: x = origin[ 1 ] / original.width;
++		}
++		return {
++			x: x,
++			y: y
++		};
++	},
++
++	// Wraps the element around a wrapper that copies position properties
++	createWrapper: function( element ) {
++
++		// if the element is already wrapped, return it
++		if ( element.parent().is( ".ui-effects-wrapper" )) {
++			return element.parent();
++		}
++
++		// wrap the element
++		var props = {
++				width: element.outerWidth(true),
++				height: element.outerHeight(true),
++				"float": element.css( "float" )
++			},
++			wrapper = $( "<div></div>" )
++				.addClass( "ui-effects-wrapper" )
++				.css({
++					fontSize: "100%",
++					background: "transparent",
++					border: "none",
++					margin: 0,
++					padding: 0
++				}),
++			// Store the size in case width/height are defined in % - Fixes #5245
++			size = {
++				width: element.width(),
++				height: element.height()
++			},
++			active = document.activeElement;
++
++		// support: Firefox
++		// Firefox incorrectly exposes anonymous content
++		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
++		try {
++			active.id;
++		} catch( e ) {
++			active = document.body;
++		}
++
++		element.wrap( wrapper );
++
++		// Fixes #7595 - Elements lose focus when wrapped.
++		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++			$( active ).focus();
++		}
++
++		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
++
++		// transfer positioning properties to the wrapper
++		if ( element.css( "position" ) === "static" ) {
++			wrapper.css({ position: "relative" });
++			element.css({ position: "relative" });
++		} else {
++			$.extend( props, {
++				position: element.css( "position" ),
++				zIndex: element.css( "z-index" )
++			});
++			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
++				props[ pos ] = element.css( pos );
++				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
++					props[ pos ] = "auto";
++				}
++			});
++			element.css({
++				position: "relative",
++				top: 0,
++				left: 0,
++				right: "auto",
++				bottom: "auto"
++			});
++		}
++		element.css(size);
++
++		return wrapper.css( props ).show();
++	},
++
++	removeWrapper: function( element ) {
++		var active = document.activeElement;
++
++		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
++			element.parent().replaceWith( element );
++
++			// Fixes #7595 - Elements lose focus when wrapped.
++			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++				$( active ).focus();
++			}
++		}
++
++
++		return element;
++	},
++
++	setTransition: function( element, list, factor, value ) {
++		value = value || {};
++		$.each( list, function( i, x ) {
++			var unit = element.cssUnit( x );
++			if ( unit[ 0 ] > 0 ) {
++				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
++			}
++		});
++		return value;
++	}
++});
++
++// return an effect options object for the given parameters:
++function _normalizeArguments( effect, options, speed, callback ) {
++
++	// allow passing all options as the first parameter
++	if ( $.isPlainObject( effect ) ) {
++		options = effect;
++		effect = effect.effect;
++	}
++
++	// convert to an object
++	effect = { effect: effect };
++
++	// catch (effect, null, ...)
++	if ( options == null ) {
++		options = {};
++	}
++
++	// catch (effect, callback)
++	if ( $.isFunction( options ) ) {
++		callback = options;
++		speed = null;
++		options = {};
++	}
++
++	// catch (effect, speed, ?)
++	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
++		callback = speed;
++		speed = options;
++		options = {};
++	}
++
++	// catch (effect, options, callback)
++	if ( $.isFunction( speed ) ) {
++		callback = speed;
++		speed = null;
++	}
++
++	// add options to effect
++	if ( options ) {
++		$.extend( effect, options );
++	}
++
++	speed = speed || options.duration;
++	effect.duration = $.fx.off ? 0 :
++		typeof speed === "number" ? speed :
++		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
++		$.fx.speeds._default;
++
++	effect.complete = callback || options.complete;
++
++	return effect;
++}
++
++function standardAnimationOption( option ) {
++	// Valid standard speeds (nothing, number, named speed)
++	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
++		return true;
++	}
++
++	// Invalid strings - treat as "normal" speed
++	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
++		return true;
++	}
++
++	// Complete callback
++	if ( $.isFunction( option ) ) {
++		return true;
++	}
++
++	// Options hash (but not naming an effect)
++	if ( typeof option === "object" && !option.effect ) {
++		return true;
++	}
++
++	// Didn't match any standard API
++	return false;
++}
++
++$.fn.extend({
++	effect: function( /* effect, options, speed, callback */ ) {
++		var args = _normalizeArguments.apply( this, arguments ),
++			mode = args.mode,
++			queue = args.queue,
++			effectMethod = $.effects.effect[ args.effect ];
++
++		if ( $.fx.off || !effectMethod ) {
++			// delegate to the original method (e.g., .show()) if possible
++			if ( mode ) {
++				return this[ mode ]( args.duration, args.complete );
++			} else {
++				return this.each( function() {
++					if ( args.complete ) {
++						args.complete.call( this );
++					}
++				});
++			}
++		}
++
++		function run( next ) {
++			var elem = $( this ),
++				complete = args.complete,
++				mode = args.mode;
++
++			function done() {
++				if ( $.isFunction( complete ) ) {
++					complete.call( elem[0] );
++				}
++				if ( $.isFunction( next ) ) {
++					next();
++				}
++			}
++
++			// If the element already has the correct final state, delegate to
++			// the core methods so the internal tracking of "olddisplay" works.
++			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
++				elem[ mode ]();
++				done();
++			} else {
++				effectMethod.call( elem[0], args, done );
++			}
++		}
++
++		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
++	},
++
++	show: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "show";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.show ),
++
++	hide: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "hide";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.hide ),
++
++	toggle: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "toggle";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.toggle ),
++
++	// helper functions
++	cssUnit: function(key) {
++		var style = this.css( key ),
++			val = [];
++
++		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
++			if ( style.indexOf( unit ) > 0 ) {
++				val = [ parseFloat( style ), unit ];
++			}
++		});
++		return val;
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EASING ***********************************/
++/******************************************************************************/
++
++(function() {
++
++// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
++
++var baseEasings = {};
++
++$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
++	baseEasings[ name ] = function( p ) {
++		return Math.pow( p, i + 2 );
++	};
++});
++
++$.extend( baseEasings, {
++	Sine: function ( p ) {
++		return 1 - Math.cos( p * Math.PI / 2 );
++	},
++	Circ: function ( p ) {
++		return 1 - Math.sqrt( 1 - p * p );
++	},
++	Elastic: function( p ) {
++		return p === 0 || p === 1 ? p :
++			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
++	},
++	Back: function( p ) {
++		return p * p * ( 3 * p - 2 );
++	},
++	Bounce: function ( p ) {
++		var pow2,
++			bounce = 4;
++
++		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
++		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
++	}
++});
++
++$.each( baseEasings, function( name, easeIn ) {
++	$.easing[ "easeIn" + name ] = easeIn;
++	$.easing[ "easeOut" + name ] = function( p ) {
++		return 1 - easeIn( 1 - p );
++	};
++	$.easing[ "easeInOut" + name ] = function( p ) {
++		return p < 0.5 ?
++			easeIn( p * 2 ) / 2 :
++			1 - easeIn( p * -2 + 2 ) / 2;
++	};
++});
++
++})();
++
++})(jQuery);
++(function( $, undefined ) {
++
++var rvertical = /up|down|vertical/,
++	rpositivemotion = /up|left|vertical|horizontal/;
++
++$.effects.effect.blind = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		direction = o.direction || "up",
++		vertical = rvertical.test( direction ),
++		ref = vertical ? "height" : "width",
++		ref2 = vertical ? "top" : "left",
++		motion = rpositivemotion.test( direction ),
++		animation = {},
++		show = mode === "show",
++		wrapper, distance, margin;
++
++	// if already wrapped, the wrapper's properties are my property. #6245
++	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
++		$.effects.save( el.parent(), props );
++	} else {
++		$.effects.save( el, props );
++	}
++	el.show();
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	distance = wrapper[ ref ]();
++	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
++
++	animation[ ref ] = show ? distance : 0;
++	if ( !motion ) {
++		el
++			.css( vertical ? "bottom" : "right", 0 )
++			.css( vertical ? "top" : "left", "auto" )
++			.css({ position: "absolute" });
++
++		animation[ ref2 ] = show ? margin : distance + margin;
++	}
++
++	// start at 0 if we are showing
++	if ( show ) {
++		wrapper.css( ref, 0 );
++		if ( ! motion ) {
++			wrapper.css( ref2, margin + distance );
++		}
++	}
++
++	// Animate
++	wrapper.animate( animation, {
++		duration: o.duration,
++		easing: o.easing,
++		queue: false,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.bounce = function( o, done ) {
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++
++		// defaults:
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		hide = mode === "hide",
++		show = mode === "show",
++		direction = o.direction || "up",
++		distance = o.distance,
++		times = o.times || 5,
++
++		// number of internal animations
++		anims = times * 2 + ( show || hide ? 1 : 0 ),
++		speed = o.duration / anims,
++		easing = o.easing,
++
++		// utility:
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ),
++		i,
++		upAnim,
++		downAnim,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	// Avoid touching opacity to prevent clearType and PNG issues in IE
++	if ( show || hide ) {
++		props.push( "opacity" );
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el ); // Create Wrapper
++
++	// default distance for the BIGGEST bounce is the outer Distance / 3
++	if ( !distance ) {
++		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
++	}
++
++	if ( show ) {
++		downAnim = { opacity: 1 };
++		downAnim[ ref ] = 0;
++
++		// if we are showing, force opacity 0 and set the initial position
++		// then do the "first" animation
++		el.css( "opacity", 0 )
++			.css( ref, motion ? -distance * 2 : distance * 2 )
++			.animate( downAnim, speed, easing );
++	}
++
++	// start at the smallest distance if we are hiding
++	if ( hide ) {
++		distance = distance / Math.pow( 2, times - 1 );
++	}
++
++	downAnim = {};
++	downAnim[ ref ] = 0;
++	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
++	for ( i = 0; i < times; i++ ) {
++		upAnim = {};
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing )
++			.animate( downAnim, speed, easing );
++
++		distance = hide ? distance * 2 : distance / 2;
++	}
++
++	// Last Bounce when Hiding
++	if ( hide ) {
++		upAnim = { opacity: 0 };
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing );
++	}
++
++	el.queue(function() {
++		if ( hide ) {
++			el.hide();
++		}
++		$.effects.restore( el, props );
++		$.effects.removeWrapper( el );
++		done();
++	});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.clip = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "vertical",
++		vert = direction === "vertical",
++		size = vert ? "height" : "width",
++		position = vert ? "top" : "left",
++		animation = {},
++		wrapper, animate, distance;
++
++	// Save & Show
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
++	distance = animate[ size ]();
++
++	// Shift
++	if ( show ) {
++		animate.css( size, 0 );
++		animate.css( position, distance / 2 );
++	}
++
++	// Create Animation Object:
++	animation[ size ] = show ? distance : 0;
++	animation[ position ] = show ? 0 : distance / 2;
++
++	// Animate
++	animate.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( !show ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.drop = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
++		animation = {
++			opacity: show ? 1 : 0
++		},
++		distance;
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
++
++	if ( show ) {
++		el
++			.css( "opacity", 0 )
++			.css( ref, motion === "pos" ? -distance : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( motion === "pos" ? "+=" : "-=" ) :
++		( motion === "pos" ? "-=" : "+=" ) ) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.explode = function( o, done ) {
++
++	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
++		cells = rows,
++		el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++
++		// show and then visibility:hidden the element before calculating offset
++		offset = el.show().css( "visibility", "hidden" ).offset(),
++
++		// width and height of a piece
++		width = Math.ceil( el.outerWidth() / cells ),
++		height = Math.ceil( el.outerHeight() / rows ),
++		pieces = [],
++
++		// loop
++		i, j, left, top, mx, my;
++
++	// children animate complete:
++	function childComplete() {
++		pieces.push( this );
++		if ( pieces.length === rows * cells ) {
++			animComplete();
++		}
++	}
++
++	// clone the element for each row and cell.
++	for( i = 0; i < rows ; i++ ) { // ===>
++		top = offset.top + i * height;
++		my = i - ( rows - 1 ) / 2 ;
++
++		for( j = 0; j < cells ; j++ ) { // |||
++			left = offset.left + j * width;
++			mx = j - ( cells - 1 ) / 2 ;
++
++			// Create a clone of the now hidden main element that will be absolute positioned
++			// within a wrapper div off the -left and -top equal to size of our pieces
++			el
++				.clone()
++				.appendTo( "body" )
++				.wrap( "<div></div>" )
++				.css({
++					position: "absolute",
++					visibility: "visible",
++					left: -j * width,
++					top: -i * height
++				})
++
++			// select the wrapper - make it overflow: hidden and absolute positioned based on
++			// where the original was located +left and +top equal to the size of pieces
++				.parent()
++				.addClass( "ui-effects-explode" )
++				.css({
++					position: "absolute",
++					overflow: "hidden",
++					width: width,
++					height: height,
++					left: left + ( show ? mx * width : 0 ),
++					top: top + ( show ? my * height : 0 ),
++					opacity: show ? 0 : 1
++				}).animate({
++					left: left + ( show ? 0 : mx * width ),
++					top: top + ( show ? 0 : my * height ),
++					opacity: show ? 1 : 0
++				}, o.duration || 500, o.easing, childComplete );
++		}
++	}
++
++	function animComplete() {
++		el.css({
++			visibility: "visible"
++		});
++		$( pieces ).remove();
++		if ( !show ) {
++			el.hide();
++		}
++		done();
++	}
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.fade = function( o, done ) {
++	var el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "toggle" );
++
++	el.animate({
++		opacity: mode
++	}, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: done
++	});
++};
++
++})( jQuery );
++(function( $, undefined ) {
++
++$.effects.effect.fold = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		size = o.size || 15,
++		percent = /([0-9]+)%/.exec( size ),
++		horizFirst = !!o.horizFirst,
++		widthFirst = show !== horizFirst,
++		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
++		duration = o.duration / 2,
++		wrapper, distance,
++		animation1 = {},
++		animation2 = {};
++
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	distance = widthFirst ?
++		[ wrapper.width(), wrapper.height() ] :
++		[ wrapper.height(), wrapper.width() ];
++
++	if ( percent ) {
++		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
++	}
++	if ( show ) {
++		wrapper.css( horizFirst ? {
++			height: 0,
++			width: size
++		} : {
++			height: size,
++			width: 0
++		});
++	}
++
++	// Animation
++	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
++	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
++
++	// Animate
++	wrapper
++		.animate( animation1, duration, o.easing )
++		.animate( animation2, duration, o.easing, function() {
++			if ( hide ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.highlight = function( o, done ) {
++	var elem = $( this ),
++		props = [ "backgroundImage", "backgroundColor", "opacity" ],
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		animation = {
++			backgroundColor: elem.css( "backgroundColor" )
++		};
++
++	if (mode === "hide") {
++		animation.opacity = 0;
++	}
++
++	$.effects.save( elem, props );
++
++	elem
++		.show()
++		.css({
++			backgroundImage: "none",
++			backgroundColor: o.color || "#ffff99"
++		})
++		.animate( animation, {
++			queue: false,
++			duration: o.duration,
++			easing: o.easing,
++			complete: function() {
++				if ( mode === "hide" ) {
++					elem.hide();
++				}
++				$.effects.restore( elem, props );
++				done();
++			}
++		});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.pulsate = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		showhide = ( show || mode === "hide" ),
++
++		// showing or hiding leaves of the "last" animation
++		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
++		duration = o.duration / anims,
++		animateTo = 0,
++		queue = elem.queue(),
++		queuelen = queue.length,
++		i;
++
++	if ( show || !elem.is(":visible")) {
++		elem.css( "opacity", 0 ).show();
++		animateTo = 1;
++	}
++
++	// anims - 1 opacity "toggles"
++	for ( i = 1; i < anims; i++ ) {
++		elem.animate({
++			opacity: animateTo
++		}, duration, o.easing );
++		animateTo = 1 - animateTo;
++	}
++
++	elem.animate({
++		opacity: animateTo
++	}, duration, o.easing);
++
++	elem.queue(function() {
++		if ( hide ) {
++			elem.hide();
++		}
++		done();
++	});
++
++	// We just queued up "anims" animations, we need to put them next in the queue
++	if ( queuelen > 1 ) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	elem.dequeue();
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.puff = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "hide" ),
++		hide = mode === "hide",
++		percent = parseInt( o.percent, 10 ) || 150,
++		factor = percent / 100,
++		original = {
++			height: elem.height(),
++			width: elem.width(),
++			outerHeight: elem.outerHeight(),
++			outerWidth: elem.outerWidth()
++		};
++
++	$.extend( o, {
++		effect: "scale",
++		queue: false,
++		fade: true,
++		mode: mode,
++		complete: done,
++		percent: hide ? percent : 100,
++		from: hide ?
++			original :
++			{
++				height: original.height * factor,
++				width: original.width * factor,
++				outerHeight: original.outerHeight * factor,
++				outerWidth: original.outerWidth * factor
++			}
++	});
++
++	elem.effect( o );
++};
++
++$.effects.effect.scale = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		options = $.extend( true, {}, o ),
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		percent = parseInt( o.percent, 10 ) ||
++			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
++		direction = o.direction || "both",
++		origin = o.origin,
++		original = {
++			height: el.height(),
++			width: el.width(),
++			outerHeight: el.outerHeight(),
++			outerWidth: el.outerWidth()
++		},
++		factor = {
++			y: direction !== "horizontal" ? (percent / 100) : 1,
++			x: direction !== "vertical" ? (percent / 100) : 1
++		};
++
++	// We are going to pass this effect to the size effect:
++	options.effect = "size";
++	options.queue = false;
++	options.complete = done;
++
++	// Set default origin and restore for show/hide
++	if ( mode !== "effect" ) {
++		options.origin = origin || ["middle","center"];
++		options.restore = true;
++	}
++
++	options.from = o.from || ( mode === "show" ? {
++		height: 0,
++		width: 0,
++		outerHeight: 0,
++		outerWidth: 0
++	} : original );
++	options.to = {
++		height: original.height * factor.y,
++		width: original.width * factor.x,
++		outerHeight: original.outerHeight * factor.y,
++		outerWidth: original.outerWidth * factor.x
++	};
++
++	// Fade option to support puff
++	if ( options.fade ) {
++		if ( mode === "show" ) {
++			options.from.opacity = 0;
++			options.to.opacity = 1;
++		}
++		if ( mode === "hide" ) {
++			options.from.opacity = 1;
++			options.to.opacity = 0;
++		}
++	}
++
++	// Animate
++	el.effect( options );
++
++};
++
++$.effects.effect.size = function( o, done ) {
++
++	// Create element
++	var original, baseline, factor,
++		el = $( this ),
++		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
++
++		// Always restore
++		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
++
++		// Copy for children
++		props2 = [ "width", "height", "overflow" ],
++		cProps = [ "fontSize" ],
++		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
++		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
++
++		// Set options
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		restore = o.restore || mode !== "effect",
++		scale = o.scale || "both",
++		origin = o.origin || [ "middle", "center" ],
++		position = el.css( "position" ),
++		props = restore ? props0 : props1,
++		zero = {
++			height: 0,
++			width: 0,
++			outerHeight: 0,
++			outerWidth: 0
++		};
++
++	if ( mode === "show" ) {
++		el.show();
++	}
++	original = {
++		height: el.height(),
++		width: el.width(),
++		outerHeight: el.outerHeight(),
++		outerWidth: el.outerWidth()
++	};
++
++	if ( o.mode === "toggle" && mode === "show" ) {
++		el.from = o.to || zero;
++		el.to = o.from || original;
++	} else {
++		el.from = o.from || ( mode === "show" ? zero : original );
++		el.to = o.to || ( mode === "hide" ? zero : original );
++	}
++
++	// Set scaling factor
++	factor = {
++		from: {
++			y: el.from.height / original.height,
++			x: el.from.width / original.width
++		},
++		to: {
++			y: el.to.height / original.height,
++			x: el.to.width / original.width
++		}
++	};
++
++	// Scale the css box
++	if ( scale === "box" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( vProps );
++			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
++		}
++
++		// Horizontal props scaling
++		if ( factor.from.x !== factor.to.x ) {
++			props = props.concat( hProps );
++			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
++			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
++		}
++	}
++
++	// Scale the content
++	if ( scale === "content" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( cProps ).concat( props2 );
++			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
++		}
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++	el.css( "overflow", "hidden" ).css( el.from );
++
++	// Adjust
++	if (origin) { // Calculate baseline shifts
++		baseline = $.effects.getBaseline( origin, original );
++		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
++		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
++		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
++		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
++	}
++	el.css( el.from ); // set top & left
++
++	// Animate
++	if ( scale === "content" || scale === "both" ) { // Scale the children
++
++		// Add margins/font-size
++		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
++		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
++		props2 = props0.concat(vProps).concat(hProps);
++
++		el.find( "*[width]" ).each( function(){
++			var child = $( this ),
++				c_original = {
++					height: child.height(),
++					width: child.width(),
++					outerHeight: child.outerHeight(),
++					outerWidth: child.outerWidth()
++				};
++			if (restore) {
++				$.effects.save(child, props2);
++			}
++
++			child.from = {
++				height: c_original.height * factor.from.y,
++				width: c_original.width * factor.from.x,
++				outerHeight: c_original.outerHeight * factor.from.y,
++				outerWidth: c_original.outerWidth * factor.from.x
++			};
++			child.to = {
++				height: c_original.height * factor.to.y,
++				width: c_original.width * factor.to.x,
++				outerHeight: c_original.height * factor.to.y,
++				outerWidth: c_original.width * factor.to.x
++			};
++
++			// Vertical props scaling
++			if ( factor.from.y !== factor.to.y ) {
++				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
++				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
++			}
++
++			// Horizontal props scaling
++			if ( factor.from.x !== factor.to.x ) {
++				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
++				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
++			}
++
++			// Animate children
++			child.css( child.from );
++			child.animate( child.to, o.duration, o.easing, function() {
++
++				// Restore children
++				if ( restore ) {
++					$.effects.restore( child, props2 );
++				}
++			});
++		});
++	}
++
++	// Animate
++	el.animate( el.to, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( el.to.opacity === 0 ) {
++				el.css( "opacity", el.from.opacity );
++			}
++			if( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			if ( !restore ) {
++
++				// we need to calculate our new positioning based on the scaling
++				if ( position === "static" ) {
++					el.css({
++						position: "relative",
++						top: el.to.top,
++						left: el.to.left
++					});
++				} else {
++					$.each([ "top", "left" ], function( idx, pos ) {
++						el.css( pos, function( _, str ) {
++							var val = parseInt( str, 10 ),
++								toRef = idx ? el.to.left : el.to.top;
++
++							// if original was "auto", recalculate the new value from wrapper
++							if ( str === "auto" ) {
++								return toRef + "px";
++							}
++
++							return val + toRef + "px";
++						});
++					});
++				}
++			}
++
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.shake = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		direction = o.direction || "left",
++		distance = o.distance || 20,
++		times = o.times || 3,
++		anims = times * 2 + 1,
++		speed = Math.round(o.duration/anims),
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		animation = {},
++		animation1 = {},
++		animation2 = {},
++		i,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	// Animation
++	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
++	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
++	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
++
++	// Animate
++	el.animate( animation, speed, o.easing );
++
++	// Shakes
++	for ( i = 1; i < times; i++ ) {
++		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
++	}
++	el
++		.animate( animation1, speed, o.easing )
++		.animate( animation, speed / 2, o.easing )
++		.queue(function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.slide = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
++		mode = $.effects.setMode( el, o.mode || "show" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		distance,
++		animation = {};
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
++
++	$.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	if ( show ) {
++		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( positiveMotion ? "+=" : "-=") :
++		( positiveMotion ? "-=" : "+=")) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.transfer = function( o, done ) {
++	var elem = $( this ),
++		target = $( o.to ),
++		targetFixed = target.css( "position" ) === "fixed",
++		body = $("body"),
++		fixTop = targetFixed ? body.scrollTop() : 0,
++		fixLeft = targetFixed ? body.scrollLeft() : 0,
++		endPosition = target.offset(),
++		animation = {
++			top: endPosition.top - fixTop ,
++			left: endPosition.left - fixLeft ,
++			height: target.innerHeight(),
++			width: target.innerWidth()
++		},
++		startPosition = elem.offset(),
++		transfer = $( "<div class='ui-effects-transfer'></div>" )
++			.appendTo( document.body )
++			.addClass( o.className )
++			.css({
++				top: startPosition.top - fixTop ,
++				left: startPosition.left - fixLeft ,
++				height: elem.innerHeight(),
++				width: elem.innerWidth(),
++				position: targetFixed ? "fixed" : "absolute"
++			})
++			.animate( animation, o.duration, o.easing, function() {
++				transfer.remove();
++				done();
++			});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.mouse.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.mouse.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.mouse.js	(revision 15487)
+@@ -0,0 +1,169 @@
++/*!
++ * jQuery UI Mouse 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/mouse/
++ *
++ * Depends:
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var mouseHandled = false;
++$( document ).mouseup( function() {
++	mouseHandled = false;
++});
++
++$.widget("ui.mouse", {
++	version: "1.10.3",
++	options: {
++		cancel: "input,textarea,button,select,option",
++		distance: 1,
++		delay: 0
++	},
++	_mouseInit: function() {
++		var that = this;
++
++		this.element
++			.bind("mousedown."+this.widgetName, function(event) {
++				return that._mouseDown(event);
++			})
++			.bind("click."+this.widgetName, function(event) {
++				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
++					$.removeData(event.target, that.widgetName + ".preventClickEvent");
++					event.stopImmediatePropagation();
++					return false;
++				}
++			});
++
++		this.started = false;
++	},
++
++	// TODO: make sure destroying one instance of mouse doesn't mess with
++	// other instances of mouse
++	_mouseDestroy: function() {
++		this.element.unbind("."+this.widgetName);
++		if ( this._mouseMoveDelegate ) {
++			$(document)
++				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++		}
++	},
++
++	_mouseDown: function(event) {
++		// don't let more than one widget handle mouseStart
++		if( mouseHandled ) { return; }
++
++		// we may have missed mouseup (out of window)
++		(this._mouseStarted && this._mouseUp(event));
++
++		this._mouseDownEvent = event;
++
++		var that = this,
++			btnIsLeft = (event.which === 1),
++			// event.target.nodeName works around a bug in IE 8 with
++			// disabled inputs (#7620)
++			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
++		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
++			return true;
++		}
++
++		this.mouseDelayMet = !this.options.delay;
++		if (!this.mouseDelayMet) {
++			this._mouseDelayTimer = setTimeout(function() {
++				that.mouseDelayMet = true;
++			}, this.options.delay);
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted = (this._mouseStart(event) !== false);
++			if (!this._mouseStarted) {
++				event.preventDefault();
++				return true;
++			}
++		}
++
++		// Click event may never have fired (Gecko & Opera)
++		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
++			$.removeData(event.target, this.widgetName + ".preventClickEvent");
++		}
++
++		// these delegates are required to keep context
++		this._mouseMoveDelegate = function(event) {
++			return that._mouseMove(event);
++		};
++		this._mouseUpDelegate = function(event) {
++			return that._mouseUp(event);
++		};
++		$(document)
++			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		event.preventDefault();
++
++		mouseHandled = true;
++		return true;
++	},
++
++	_mouseMove: function(event) {
++		// IE mouseup check - mouseup happened when mouse was out of window
++		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
++			return this._mouseUp(event);
++		}
++
++		if (this._mouseStarted) {
++			this._mouseDrag(event);
++			return event.preventDefault();
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted =
++				(this._mouseStart(this._mouseDownEvent, event) !== false);
++			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
++		}
++
++		return !this._mouseStarted;
++	},
++
++	_mouseUp: function(event) {
++		$(document)
++			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		if (this._mouseStarted) {
++			this._mouseStarted = false;
++
++			if (event.target === this._mouseDownEvent.target) {
++				$.data(event.target, this.widgetName + ".preventClickEvent", true);
++			}
++
++			this._mouseStop(event);
++		}
++
++		return false;
++	},
++
++	_mouseDistanceMet: function(event) {
++		return (Math.max(
++				Math.abs(this._mouseDownEvent.pageX - event.pageX),
++				Math.abs(this._mouseDownEvent.pageY - event.pageY)
++			) >= this.options.distance
++		);
++	},
++
++	_mouseDelayMet: function(/* event */) {
++		return this.mouseDelayMet;
++	},
++
++	// These are placeholder methods, to be overriden by extending plugin
++	_mouseStart: function(/* event */) {},
++	_mouseDrag: function(/* event */) {},
++	_mouseStop: function(/* event */) {},
++	_mouseCapture: function(/* event */) { return true; }
++});
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fade.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fade.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fade.js	(revision 15487)
+@@ -0,0 +1,30 @@
++/*!
++ * jQuery UI Effects Fade 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/fade-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.fade = function( o, done ) {
++	var el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "toggle" );
++
++	el.animate({
++		opacity: mode
++	}, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: done
++	});
++};
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-explode.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-explode.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-explode.js	(revision 15487)
+@@ -0,0 +1,97 @@
++/*!
++ * jQuery UI Effects Explode 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/explode-effect/
++ *
++ * Depends:
++ *	jquery.ui.effect.js
++ */
++(function( $, undefined ) {
++
++$.effects.effect.explode = function( o, done ) {
++
++	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
++		cells = rows,
++		el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++
++		// show and then visibility:hidden the element before calculating offset
++		offset = el.show().css( "visibility", "hidden" ).offset(),
++
++		// width and height of a piece
++		width = Math.ceil( el.outerWidth() / cells ),
++		height = Math.ceil( el.outerHeight() / rows ),
++		pieces = [],
++
++		// loop
++		i, j, left, top, mx, my;
++
++	// children animate complete:
++	function childComplete() {
++		pieces.push( this );
++		if ( pieces.length === rows * cells ) {
++			animComplete();
++		}
++	}
++
++	// clone the element for each row and cell.
++	for( i = 0; i < rows ; i++ ) { // ===>
++		top = offset.top + i * height;
++		my = i - ( rows - 1 ) / 2 ;
++
++		for( j = 0; j < cells ; j++ ) { // |||
++			left = offset.left + j * width;
++			mx = j - ( cells - 1 ) / 2 ;
++
++			// Create a clone of the now hidden main element that will be absolute positioned
++			// within a wrapper div off the -left and -top equal to size of our pieces
++			el
++				.clone()
++				.appendTo( "body" )
++				.wrap( "<div></div>" )
++				.css({
++					position: "absolute",
++					visibility: "visible",
++					left: -j * width,
++					top: -i * height
++				})
++
++			// select the wrapper - make it overflow: hidden and absolute positioned based on
++			// where the original was located +left and +top equal to the size of pieces
++				.parent()
++				.addClass( "ui-effects-explode" )
++				.css({
++					position: "absolute",
++					overflow: "hidden",
++					width: width,
++					height: height,
++					left: left + ( show ? mx * width : 0 ),
++					top: top + ( show ? my * height : 0 ),
++					opacity: show ? 0 : 1
++				}).animate({
++					left: left + ( show ? 0 : mx * width ),
++					top: top + ( show ? 0 : my * height ),
++					opacity: show ? 1 : 0
++				}, o.duration || 500, o.easing, childComplete );
++		}
++	}
++
++	function animComplete() {
++		el.css({
++			visibility: "visible"
++		});
++		$( pieces ).remove();
++		if ( !show ) {
++			el.hide();
++		}
++		done();
++	}
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect.js	(revision 15487)
+@@ -0,0 +1,1289 @@
++/*!
++ * jQuery UI Effects 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/category/effects-core/
++ */
++(function($, undefined) {
++
++var dataSpace = "ui-effects-";
++
++$.effects = {
++	effect: {}
++};
++
++/*!
++ * jQuery Color Animations v2.1.2
++ * https://github.com/jquery/jquery-color
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * Date: Wed Jan 16 08:47:09 2013 -0600
++ */
++(function( jQuery, undefined ) {
++
++	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
++
++	// plusequals test for += 100 -= 100
++	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
++	// a set of RE's that can match strings and generate color tuples.
++	stringParsers = [{
++			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ],
++					execResult[ 3 ],
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ] * 2.55,
++					execResult[ 2 ] * 2.55,
++					execResult[ 3 ] * 2.55,
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			space: "hsla",
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ] / 100,
++					execResult[ 3 ] / 100,
++					execResult[ 4 ]
++				];
++			}
++		}],
++
++	// jQuery.Color( )
++	color = jQuery.Color = function( color, green, blue, alpha ) {
++		return new jQuery.Color.fn.parse( color, green, blue, alpha );
++	},
++	spaces = {
++		rgba: {
++			props: {
++				red: {
++					idx: 0,
++					type: "byte"
++				},
++				green: {
++					idx: 1,
++					type: "byte"
++				},
++				blue: {
++					idx: 2,
++					type: "byte"
++				}
++			}
++		},
++
++		hsla: {
++			props: {
++				hue: {
++					idx: 0,
++					type: "degrees"
++				},
++				saturation: {
++					idx: 1,
++					type: "percent"
++				},
++				lightness: {
++					idx: 2,
++					type: "percent"
++				}
++			}
++		}
++	},
++	propTypes = {
++		"byte": {
++			floor: true,
++			max: 255
++		},
++		"percent": {
++			max: 1
++		},
++		"degrees": {
++			mod: 360,
++			floor: true
++		}
++	},
++	support = color.support = {},
++
++	// element for support tests
++	supportElem = jQuery( "<p>" )[ 0 ],
++
++	// colors = jQuery.Color.names
++	colors,
++
++	// local aliases of functions called often
++	each = jQuery.each;
++
++// determine rgba support immediately
++supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
++support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
++
++// define cache name and alpha properties
++// for rgba and hsla spaces
++each( spaces, function( spaceName, space ) {
++	space.cache = "_" + spaceName;
++	space.props.alpha = {
++		idx: 3,
++		type: "percent",
++		def: 1
++	};
++});
++
++function clamp( value, prop, allowEmpty ) {
++	var type = propTypes[ prop.type ] || {};
++
++	if ( value == null ) {
++		return (allowEmpty || !prop.def) ? null : prop.def;
++	}
++
++	// ~~ is an short way of doing floor for positive numbers
++	value = type.floor ? ~~value : parseFloat( value );
++
++	// IE will pass in empty strings as value for alpha,
++	// which will hit this case
++	if ( isNaN( value ) ) {
++		return prop.def;
++	}
++
++	if ( type.mod ) {
++		// we add mod before modding to make sure that negatives values
++		// get converted properly: -10 -> 350
++		return (value + type.mod) % type.mod;
++	}
++
++	// for now all property types without mod have min and max
++	return 0 > value ? 0 : type.max < value ? type.max : value;
++}
++
++function stringParse( string ) {
++	var inst = color(),
++		rgba = inst._rgba = [];
++
++	string = string.toLowerCase();
++
++	each( stringParsers, function( i, parser ) {
++		var parsed,
++			match = parser.re.exec( string ),
++			values = match && parser.parse( match ),
++			spaceName = parser.space || "rgba";
++
++		if ( values ) {
++			parsed = inst[ spaceName ]( values );
++
++			// if this was an rgba parse the assignment might happen twice
++			// oh well....
++			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
++			rgba = inst._rgba = parsed._rgba;
++
++			// exit each( stringParsers ) here because we matched
++			return false;
++		}
++	});
++
++	// Found a stringParser that handled it
++	if ( rgba.length ) {
++
++		// if this came from a parsed string, force "transparent" when alpha is 0
++		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
++		if ( rgba.join() === "0,0,0,0" ) {
++			jQuery.extend( rgba, colors.transparent );
++		}
++		return inst;
++	}
++
++	// named colors
++	return colors[ string ];
++}
++
++color.fn = jQuery.extend( color.prototype, {
++	parse: function( red, green, blue, alpha ) {
++		if ( red === undefined ) {
++			this._rgba = [ null, null, null, null ];
++			return this;
++		}
++		if ( red.jquery || red.nodeType ) {
++			red = jQuery( red ).css( green );
++			green = undefined;
++		}
++
++		var inst = this,
++			type = jQuery.type( red ),
++			rgba = this._rgba = [];
++
++		// more than 1 argument specified - assume ( red, green, blue, alpha )
++		if ( green !== undefined ) {
++			red = [ red, green, blue, alpha ];
++			type = "array";
++		}
++
++		if ( type === "string" ) {
++			return this.parse( stringParse( red ) || colors._default );
++		}
++
++		if ( type === "array" ) {
++			each( spaces.rgba.props, function( key, prop ) {
++				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
++			});
++			return this;
++		}
++
++		if ( type === "object" ) {
++			if ( red instanceof color ) {
++				each( spaces, function( spaceName, space ) {
++					if ( red[ space.cache ] ) {
++						inst[ space.cache ] = red[ space.cache ].slice();
++					}
++				});
++			} else {
++				each( spaces, function( spaceName, space ) {
++					var cache = space.cache;
++					each( space.props, function( key, prop ) {
++
++						// if the cache doesn't exist, and we know how to convert
++						if ( !inst[ cache ] && space.to ) {
++
++							// if the value was null, we don't need to copy it
++							// if the key was alpha, we don't need to copy it either
++							if ( key === "alpha" || red[ key ] == null ) {
++								return;
++							}
++							inst[ cache ] = space.to( inst._rgba );
++						}
++
++						// this is the only case where we allow nulls for ALL properties.
++						// call clamp with alwaysAllowEmpty
++						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
++					});
++
++					// everything defined but alpha?
++					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
++						// use the default of 1
++						inst[ cache ][ 3 ] = 1;
++						if ( space.from ) {
++							inst._rgba = space.from( inst[ cache ] );
++						}
++					}
++				});
++			}
++			return this;
++		}
++	},
++	is: function( compare ) {
++		var is = color( compare ),
++			same = true,
++			inst = this;
++
++		each( spaces, function( _, space ) {
++			var localCache,
++				isCache = is[ space.cache ];
++			if (isCache) {
++				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
++				each( space.props, function( _, prop ) {
++					if ( isCache[ prop.idx ] != null ) {
++						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
++						return same;
++					}
++				});
++			}
++			return same;
++		});
++		return same;
++	},
++	_space: function() {
++		var used = [],
++			inst = this;
++		each( spaces, function( spaceName, space ) {
++			if ( inst[ space.cache ] ) {
++				used.push( spaceName );
++			}
++		});
++		return used.pop();
++	},
++	transition: function( other, distance ) {
++		var end = color( other ),
++			spaceName = end._space(),
++			space = spaces[ spaceName ],
++			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
++			start = startColor[ space.cache ] || space.to( startColor._rgba ),
++			result = start.slice();
++
++		end = end[ space.cache ];
++		each( space.props, function( key, prop ) {
++			var index = prop.idx,
++				startValue = start[ index ],
++				endValue = end[ index ],
++				type = propTypes[ prop.type ] || {};
++
++			// if null, don't override start value
++			if ( endValue === null ) {
++				return;
++			}
++			// if null - use end
++			if ( startValue === null ) {
++				result[ index ] = endValue;
++			} else {
++				if ( type.mod ) {
++					if ( endValue - startValue > type.mod / 2 ) {
++						startValue += type.mod;
++					} else if ( startValue - endValue > type.mod / 2 ) {
++						startValue -= type.mod;
++					}
++				}
++				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
++			}
++		});
++		return this[ spaceName ]( result );
++	},
++	blend: function( opaque ) {
++		// if we are already opaque - return ourself
++		if ( this._rgba[ 3 ] === 1 ) {
++			return this;
++		}
++
++		var rgb = this._rgba.slice(),
++			a = rgb.pop(),
++			blend = color( opaque )._rgba;
++
++		return color( jQuery.map( rgb, function( v, i ) {
++			return ( 1 - a ) * blend[ i ] + a * v;
++		}));
++	},
++	toRgbaString: function() {
++		var prefix = "rgba(",
++			rgba = jQuery.map( this._rgba, function( v, i ) {
++				return v == null ? ( i > 2 ? 1 : 0 ) : v;
++			});
++
++		if ( rgba[ 3 ] === 1 ) {
++			rgba.pop();
++			prefix = "rgb(";
++		}
++
++		return prefix + rgba.join() + ")";
++	},
++	toHslaString: function() {
++		var prefix = "hsla(",
++			hsla = jQuery.map( this.hsla(), function( v, i ) {
++				if ( v == null ) {
++					v = i > 2 ? 1 : 0;
++				}
++
++				// catch 1 and 2
++				if ( i && i < 3 ) {
++					v = Math.round( v * 100 ) + "%";
++				}
++				return v;
++			});
++
++		if ( hsla[ 3 ] === 1 ) {
++			hsla.pop();
++			prefix = "hsl(";
++		}
++		return prefix + hsla.join() + ")";
++	},
++	toHexString: function( includeAlpha ) {
++		var rgba = this._rgba.slice(),
++			alpha = rgba.pop();
++
++		if ( includeAlpha ) {
++			rgba.push( ~~( alpha * 255 ) );
++		}
++
++		return "#" + jQuery.map( rgba, function( v ) {
++
++			// default to 0 when nulls exist
++			v = ( v || 0 ).toString( 16 );
++			return v.length === 1 ? "0" + v : v;
++		}).join("");
++	},
++	toString: function() {
++		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
++	}
++});
++color.fn.parse.prototype = color.fn;
++
++// hsla conversions adapted from:
++// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
++
++function hue2rgb( p, q, h ) {
++	h = ( h + 1 ) % 1;
++	if ( h * 6 < 1 ) {
++		return p + (q - p) * h * 6;
++	}
++	if ( h * 2 < 1) {
++		return q;
++	}
++	if ( h * 3 < 2 ) {
++		return p + (q - p) * ((2/3) - h) * 6;
++	}
++	return p;
++}
++
++spaces.hsla.to = function ( rgba ) {
++	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
++		return [ null, null, null, rgba[ 3 ] ];
++	}
++	var r = rgba[ 0 ] / 255,
++		g = rgba[ 1 ] / 255,
++		b = rgba[ 2 ] / 255,
++		a = rgba[ 3 ],
++		max = Math.max( r, g, b ),
++		min = Math.min( r, g, b ),
++		diff = max - min,
++		add = max + min,
++		l = add * 0.5,
++		h, s;
++
++	if ( min === max ) {
++		h = 0;
++	} else if ( r === max ) {
++		h = ( 60 * ( g - b ) / diff ) + 360;
++	} else if ( g === max ) {
++		h = ( 60 * ( b - r ) / diff ) + 120;
++	} else {
++		h = ( 60 * ( r - g ) / diff ) + 240;
++	}
++
++	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
++	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
++	if ( diff === 0 ) {
++		s = 0;
++	} else if ( l <= 0.5 ) {
++		s = diff / add;
++	} else {
++		s = diff / ( 2 - add );
++	}
++	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
++};
++
++spaces.hsla.from = function ( hsla ) {
++	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
++		return [ null, null, null, hsla[ 3 ] ];
++	}
++	var h = hsla[ 0 ] / 360,
++		s = hsla[ 1 ],
++		l = hsla[ 2 ],
++		a = hsla[ 3 ],
++		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
++		p = 2 * l - q;
++
++	return [
++		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
++		Math.round( hue2rgb( p, q, h ) * 255 ),
++		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
++		a
++	];
++};
++
++
++each( spaces, function( spaceName, space ) {
++	var props = space.props,
++		cache = space.cache,
++		to = space.to,
++		from = space.from;
++
++	// makes rgba() and hsla()
++	color.fn[ spaceName ] = function( value ) {
++
++		// generate a cache for this space if it doesn't exist
++		if ( to && !this[ cache ] ) {
++			this[ cache ] = to( this._rgba );
++		}
++		if ( value === undefined ) {
++			return this[ cache ].slice();
++		}
++
++		var ret,
++			type = jQuery.type( value ),
++			arr = ( type === "array" || type === "object" ) ? value : arguments,
++			local = this[ cache ].slice();
++
++		each( props, function( key, prop ) {
++			var val = arr[ type === "object" ? key : prop.idx ];
++			if ( val == null ) {
++				val = local[ prop.idx ];
++			}
++			local[ prop.idx ] = clamp( val, prop );
++		});
++
++		if ( from ) {
++			ret = color( from( local ) );
++			ret[ cache ] = local;
++			return ret;
++		} else {
++			return color( local );
++		}
++	};
++
++	// makes red() green() blue() alpha() hue() saturation() lightness()
++	each( props, function( key, prop ) {
++		// alpha is included in more than one space
++		if ( color.fn[ key ] ) {
++			return;
++		}
++		color.fn[ key ] = function( value ) {
++			var vtype = jQuery.type( value ),
++				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
++				local = this[ fn ](),
++				cur = local[ prop.idx ],
++				match;
++
++			if ( vtype === "undefined" ) {
++				return cur;
++			}
++
++			if ( vtype === "function" ) {
++				value = value.call( this, cur );
++				vtype = jQuery.type( value );
++			}
++			if ( value == null && prop.empty ) {
++				return this;
++			}
++			if ( vtype === "string" ) {
++				match = rplusequals.exec( value );
++				if ( match ) {
++					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
++				}
++			}
++			local[ prop.idx ] = value;
++			return this[ fn ]( local );
++		};
++	});
++});
++
++// add cssHook and .fx.step function for each named hook.
++// accept a space separated string of properties
++color.hook = function( hook ) {
++	var hooks = hook.split( " " );
++	each( hooks, function( i, hook ) {
++		jQuery.cssHooks[ hook ] = {
++			set: function( elem, value ) {
++				var parsed, curElem,
++					backgroundColor = "";
++
++				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
++					value = color( parsed || value );
++					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
++						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
++						while (
++							(backgroundColor === "" || backgroundColor === "transparent") &&
++							curElem && curElem.style
++						) {
++							try {
++								backgroundColor = jQuery.css( curElem, "backgroundColor" );
++								curElem = curElem.parentNode;
++							} catch ( e ) {
++							}
++						}
++
++						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
++							backgroundColor :
++							"_default" );
++					}
++
++					value = value.toRgbaString();
++				}
++				try {
++					elem.style[ hook ] = value;
++				} catch( e ) {
++					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
++				}
++			}
++		};
++		jQuery.fx.step[ hook ] = function( fx ) {
++			if ( !fx.colorInit ) {
++				fx.start = color( fx.elem, hook );
++				fx.end = color( fx.end );
++				fx.colorInit = true;
++			}
++			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
++		};
++	});
++
++};
++
++color.hook( stepHooks );
++
++jQuery.cssHooks.borderColor = {
++	expand: function( value ) {
++		var expanded = {};
++
++		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
++			expanded[ "border" + part + "Color" ] = value;
++		});
++		return expanded;
++	}
++};
++
++// Basic color names only.
++// Usage of any of the other color names requires adding yourself or including
++// jquery.color.svg-names.js.
++colors = jQuery.Color.names = {
++	// 4.1. Basic color keywords
++	aqua: "#00ffff",
++	black: "#000000",
++	blue: "#0000ff",
++	fuchsia: "#ff00ff",
++	gray: "#808080",
++	green: "#008000",
++	lime: "#00ff00",
++	maroon: "#800000",
++	navy: "#000080",
++	olive: "#808000",
++	purple: "#800080",
++	red: "#ff0000",
++	silver: "#c0c0c0",
++	teal: "#008080",
++	white: "#ffffff",
++	yellow: "#ffff00",
++
++	// 4.2.3. "transparent" color keyword
++	transparent: [ null, null, null, 0 ],
++
++	_default: "#ffffff"
++};
++
++})( jQuery );
++
++
++/******************************************************************************/
++/****************************** CLASS ANIMATIONS ******************************/
++/******************************************************************************/
++(function() {
++
++var classAnimationActions = [ "add", "remove", "toggle" ],
++	shorthandStyles = {
++		border: 1,
++		borderBottom: 1,
++		borderColor: 1,
++		borderLeft: 1,
++		borderRight: 1,
++		borderTop: 1,
++		borderWidth: 1,
++		margin: 1,
++		padding: 1
++	};
++
++$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
++	$.fx.step[ prop ] = function( fx ) {
++		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
++			jQuery.style( fx.elem, prop, fx.end );
++			fx.setAttr = true;
++		}
++	};
++});
++
++function getElementStyles( elem ) {
++	var key, len,
++		style = elem.ownerDocument.defaultView ?
++			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
++			elem.currentStyle,
++		styles = {};
++
++	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
++		len = style.length;
++		while ( len-- ) {
++			key = style[ len ];
++			if ( typeof style[ key ] === "string" ) {
++				styles[ $.camelCase( key ) ] = style[ key ];
++			}
++		}
++	// support: Opera, IE <9
++	} else {
++		for ( key in style ) {
++			if ( typeof style[ key ] === "string" ) {
++				styles[ key ] = style[ key ];
++			}
++		}
++	}
++
++	return styles;
++}
++
++
++function styleDifference( oldStyle, newStyle ) {
++	var diff = {},
++		name, value;
++
++	for ( name in newStyle ) {
++		value = newStyle[ name ];
++		if ( oldStyle[ name ] !== value ) {
++			if ( !shorthandStyles[ name ] ) {
++				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
++					diff[ name ] = value;
++				}
++			}
++		}
++	}
++
++	return diff;
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++$.effects.animateClass = function( value, duration, easing, callback ) {
++	var o = $.speed( duration, easing, callback );
++
++	return this.queue( function() {
++		var animated = $( this ),
++			baseClass = animated.attr( "class" ) || "",
++			applyClassChange,
++			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
++
++		// map the animated objects to store the original styles.
++		allAnimations = allAnimations.map(function() {
++			var el = $( this );
++			return {
++				el: el,
++				start: getElementStyles( this )
++			};
++		});
++
++		// apply class change
++		applyClassChange = function() {
++			$.each( classAnimationActions, function(i, action) {
++				if ( value[ action ] ) {
++					animated[ action + "Class" ]( value[ action ] );
++				}
++			});
++		};
++		applyClassChange();
++
++		// map all animated objects again - calculate new styles and diff
++		allAnimations = allAnimations.map(function() {
++			this.end = getElementStyles( this.el[ 0 ] );
++			this.diff = styleDifference( this.start, this.end );
++			return this;
++		});
++
++		// apply original class
++		animated.attr( "class", baseClass );
++
++		// map all animated objects again - this time collecting a promise
++		allAnimations = allAnimations.map(function() {
++			var styleInfo = this,
++				dfd = $.Deferred(),
++				opts = $.extend({}, o, {
++					queue: false,
++					complete: function() {
++						dfd.resolve( styleInfo );
++					}
++				});
++
++			this.el.animate( this.diff, opts );
++			return dfd.promise();
++		});
++
++		// once all animations have completed:
++		$.when.apply( $, allAnimations.get() ).done(function() {
++
++			// set the final class
++			applyClassChange();
++
++			// for each animated element,
++			// clear all css properties that were animated
++			$.each( arguments, function() {
++				var el = this.el;
++				$.each( this.diff, function(key) {
++					el.css( key, "" );
++				});
++			});
++
++			// this is guarnteed to be there if you use jQuery.speed()
++			// it also handles dequeuing the next anim...
++			o.complete.call( animated[ 0 ] );
++		});
++	});
++};
++
++$.fn.extend({
++	addClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return speed ?
++				$.effects.animateClass.call( this,
++					{ add: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.addClass ),
++
++	removeClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return arguments.length > 1 ?
++				$.effects.animateClass.call( this,
++					{ remove: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.removeClass ),
++
++	toggleClass: (function( orig ) {
++		return function( classNames, force, speed, easing, callback ) {
++			if ( typeof force === "boolean" || force === undefined ) {
++				if ( !speed ) {
++					// without speed parameter
++					return orig.apply( this, arguments );
++				} else {
++					return $.effects.animateClass.call( this,
++						(force ? { add: classNames } : { remove: classNames }),
++						speed, easing, callback );
++				}
++			} else {
++				// without force parameter
++				return $.effects.animateClass.call( this,
++					{ toggle: classNames }, force, speed, easing );
++			}
++		};
++	})( $.fn.toggleClass ),
++
++	switchClass: function( remove, add, speed, easing, callback) {
++		return $.effects.animateClass.call( this, {
++			add: add,
++			remove: remove
++		}, speed, easing, callback );
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EFFECTS **********************************/
++/******************************************************************************/
++
++(function() {
++
++$.extend( $.effects, {
++	version: "1.10.3",
++
++	// Saves a set of properties in a data storage
++	save: function( element, set ) {
++		for( var i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
++			}
++		}
++	},
++
++	// Restores a set of previously saved properties from a data storage
++	restore: function( element, set ) {
++		var val, i;
++		for( i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				val = element.data( dataSpace + set[ i ] );
++				// support: jQuery 1.6.2
++				// http://bugs.jquery.com/ticket/9917
++				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
++				// We can't differentiate between "" and 0 here, so we just assume
++				// empty string since it's likely to be a more common value...
++				if ( val === undefined ) {
++					val = "";
++				}
++				element.css( set[ i ], val );
++			}
++		}
++	},
++
++	setMode: function( el, mode ) {
++		if (mode === "toggle") {
++			mode = el.is( ":hidden" ) ? "show" : "hide";
++		}
++		return mode;
++	},
++
++	// Translates a [top,left] array into a baseline value
++	// this should be a little more flexible in the future to handle a string & hash
++	getBaseline: function( origin, original ) {
++		var y, x;
++		switch ( origin[ 0 ] ) {
++			case "top": y = 0; break;
++			case "middle": y = 0.5; break;
++			case "bottom": y = 1; break;
++			default: y = origin[ 0 ] / original.height;
++		}
++		switch ( origin[ 1 ] ) {
++			case "left": x = 0; break;
++			case "center": x = 0.5; break;
++			case "right": x = 1; break;
++			default: x = origin[ 1 ] / original.width;
++		}
++		return {
++			x: x,
++			y: y
++		};
++	},
++
++	// Wraps the element around a wrapper that copies position properties
++	createWrapper: function( element ) {
++
++		// if the element is already wrapped, return it
++		if ( element.parent().is( ".ui-effects-wrapper" )) {
++			return element.parent();
++		}
++
++		// wrap the element
++		var props = {
++				width: element.outerWidth(true),
++				height: element.outerHeight(true),
++				"float": element.css( "float" )
++			},
++			wrapper = $( "<div></div>" )
++				.addClass( "ui-effects-wrapper" )
++				.css({
++					fontSize: "100%",
++					background: "transparent",
++					border: "none",
++					margin: 0,
++					padding: 0
++				}),
++			// Store the size in case width/height are defined in % - Fixes #5245
++			size = {
++				width: element.width(),
++				height: element.height()
++			},
++			active = document.activeElement;
++
++		// support: Firefox
++		// Firefox incorrectly exposes anonymous content
++		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
++		try {
++			active.id;
++		} catch( e ) {
++			active = document.body;
++		}
++
++		element.wrap( wrapper );
++
++		// Fixes #7595 - Elements lose focus when wrapped.
++		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++			$( active ).focus();
++		}
++
++		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
++
++		// transfer positioning properties to the wrapper
++		if ( element.css( "position" ) === "static" ) {
++			wrapper.css({ position: "relative" });
++			element.css({ position: "relative" });
++		} else {
++			$.extend( props, {
++				position: element.css( "position" ),
++				zIndex: element.css( "z-index" )
++			});
++			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
++				props[ pos ] = element.css( pos );
++				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
++					props[ pos ] = "auto";
++				}
++			});
++			element.css({
++				position: "relative",
++				top: 0,
++				left: 0,
++				right: "auto",
++				bottom: "auto"
++			});
++		}
++		element.css(size);
++
++		return wrapper.css( props ).show();
++	},
++
++	removeWrapper: function( element ) {
++		var active = document.activeElement;
++
++		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
++			element.parent().replaceWith( element );
++
++			// Fixes #7595 - Elements lose focus when wrapped.
++			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++				$( active ).focus();
++			}
++		}
++
++
++		return element;
++	},
++
++	setTransition: function( element, list, factor, value ) {
++		value = value || {};
++		$.each( list, function( i, x ) {
++			var unit = element.cssUnit( x );
++			if ( unit[ 0 ] > 0 ) {
++				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
++			}
++		});
++		return value;
++	}
++});
++
++// return an effect options object for the given parameters:
++function _normalizeArguments( effect, options, speed, callback ) {
++
++	// allow passing all options as the first parameter
++	if ( $.isPlainObject( effect ) ) {
++		options = effect;
++		effect = effect.effect;
++	}
++
++	// convert to an object
++	effect = { effect: effect };
++
++	// catch (effect, null, ...)
++	if ( options == null ) {
++		options = {};
++	}
++
++	// catch (effect, callback)
++	if ( $.isFunction( options ) ) {
++		callback = options;
++		speed = null;
++		options = {};
++	}
++
++	// catch (effect, speed, ?)
++	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
++		callback = speed;
++		speed = options;
++		options = {};
++	}
++
++	// catch (effect, options, callback)
++	if ( $.isFunction( speed ) ) {
++		callback = speed;
++		speed = null;
++	}
++
++	// add options to effect
++	if ( options ) {
++		$.extend( effect, options );
++	}
++
++	speed = speed || options.duration;
++	effect.duration = $.fx.off ? 0 :
++		typeof speed === "number" ? speed :
++		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
++		$.fx.speeds._default;
++
++	effect.complete = callback || options.complete;
++
++	return effect;
++}
++
++function standardAnimationOption( option ) {
++	// Valid standard speeds (nothing, number, named speed)
++	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
++		return true;
++	}
++
++	// Invalid strings - treat as "normal" speed
++	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
++		return true;
++	}
++
++	// Complete callback
++	if ( $.isFunction( option ) ) {
++		return true;
++	}
++
++	// Options hash (but not naming an effect)
++	if ( typeof option === "object" && !option.effect ) {
++		return true;
++	}
++
++	// Didn't match any standard API
++	return false;
++}
++
++$.fn.extend({
++	effect: function( /* effect, options, speed, callback */ ) {
++		var args = _normalizeArguments.apply( this, arguments ),
++			mode = args.mode,
++			queue = args.queue,
++			effectMethod = $.effects.effect[ args.effect ];
++
++		if ( $.fx.off || !effectMethod ) {
++			// delegate to the original method (e.g., .show()) if possible
++			if ( mode ) {
++				return this[ mode ]( args.duration, args.complete );
++			} else {
++				return this.each( function() {
++					if ( args.complete ) {
++						args.complete.call( this );
++					}
++				});
++			}
++		}
++
++		function run( next ) {
++			var elem = $( this ),
++				complete = args.complete,
++				mode = args.mode;
++
++			function done() {
++				if ( $.isFunction( complete ) ) {
++					complete.call( elem[0] );
++				}
++				if ( $.isFunction( next ) ) {
++					next();
++				}
++			}
++
++			// If the element already has the correct final state, delegate to
++			// the core methods so the internal tracking of "olddisplay" works.
++			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
++				elem[ mode ]();
++				done();
++			} else {
++				effectMethod.call( elem[0], args, done );
++			}
++		}
++
++		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
++	},
++
++	show: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "show";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.show ),
++
++	hide: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "hide";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.hide ),
++
++	toggle: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "toggle";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.toggle ),
++
++	// helper functions
++	cssUnit: function(key) {
++		var style = this.css( key ),
++			val = [];
++
++		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
++			if ( style.indexOf( unit ) > 0 ) {
++				val = [ parseFloat( style ), unit ];
++			}
++		});
++		return val;
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EASING ***********************************/
++/******************************************************************************/
++
++(function() {
++
++// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
++
++var baseEasings = {};
++
++$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
++	baseEasings[ name ] = function( p ) {
++		return Math.pow( p, i + 2 );
++	};
++});
++
++$.extend( baseEasings, {
++	Sine: function ( p ) {
++		return 1 - Math.cos( p * Math.PI / 2 );
++	},
++	Circ: function ( p ) {
++		return 1 - Math.sqrt( 1 - p * p );
++	},
++	Elastic: function( p ) {
++		return p === 0 || p === 1 ? p :
++			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
++	},
++	Back: function( p ) {
++		return p * p * ( 3 * p - 2 );
++	},
++	Bounce: function ( p ) {
++		var pow2,
++			bounce = 4;
++
++		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
++		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
++	}
++});
++
++$.each( baseEasings, function( name, easeIn ) {
++	$.easing[ "easeIn" + name ] = easeIn;
++	$.easing[ "easeOut" + name ] = function( p ) {
++		return 1 - easeIn( 1 - p );
++	};
++	$.easing[ "easeInOut" + name ] = function( p ) {
++		return p < 0.5 ?
++			easeIn( p * 2 ) / 2 :
++			1 - easeIn( p * -2 + 2 ) / 2;
++	};
++});
++
++})();
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.accordion.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.accordion.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.accordion.js	(revision 15487)
+@@ -0,0 +1,572 @@
++/*!
++ * jQuery UI Accordion 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/accordion/
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var uid = 0,
++	hideProps = {},
++	showProps = {};
++
++hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
++	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
++showProps.height = showProps.paddingTop = showProps.paddingBottom =
++	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
++
++$.widget( "ui.accordion", {
++	version: "1.10.3",
++	options: {
++		active: 0,
++		animate: {},
++		collapsible: false,
++		event: "click",
++		header: "> li > :first-child,> :not(li):even",
++		heightStyle: "auto",
++		icons: {
++			activeHeader: "ui-icon-triangle-1-s",
++			header: "ui-icon-triangle-1-e"
++		},
++
++		// callbacks
++		activate: null,
++		beforeActivate: null
++	},
++
++	_create: function() {
++		var options = this.options;
++		this.prevShow = this.prevHide = $();
++		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
++			// ARIA
++			.attr( "role", "tablist" );
++
++		// don't allow collapsible: false and active: false / null
++		if ( !options.collapsible && (options.active === false || options.active == null) ) {
++			options.active = 0;
++		}
++
++		this._processPanels();
++		// handle negative values
++		if ( options.active < 0 ) {
++			options.active += this.headers.length;
++		}
++		this._refresh();
++	},
++
++	_getCreateEventData: function() {
++		return {
++			header: this.active,
++			panel: !this.active.length ? $() : this.active.next(),
++			content: !this.active.length ? $() : this.active.next()
++		};
++	},
++
++	_createIcons: function() {
++		var icons = this.options.icons;
++		if ( icons ) {
++			$( "<span>" )
++				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
++				.prependTo( this.headers );
++			this.active.children( ".ui-accordion-header-icon" )
++				.removeClass( icons.header )
++				.addClass( icons.activeHeader );
++			this.headers.addClass( "ui-accordion-icons" );
++		}
++	},
++
++	_destroyIcons: function() {
++		this.headers
++			.removeClass( "ui-accordion-icons" )
++			.children( ".ui-accordion-header-icon" )
++				.remove();
++	},
++
++	_destroy: function() {
++		var contents;
++
++		// clean up main element
++		this.element
++			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
++			.removeAttr( "role" );
++
++		// clean up headers
++		this.headers
++			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-selected" )
++			.removeAttr( "aria-controls" )
++			.removeAttr( "tabIndex" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		this._destroyIcons();
++
++		// clean up content panels
++		contents = this.headers.next()
++			.css( "display", "" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-expanded" )
++			.removeAttr( "aria-hidden" )
++			.removeAttr( "aria-labelledby" )
++			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		if ( this.options.heightStyle !== "content" ) {
++			contents.css( "height", "" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "event" ) {
++			if ( this.options.event ) {
++				this._off( this.headers, this.options.event );
++			}
++			this._setupEvents( value );
++		}
++
++		this._super( key, value );
++
++		// setting collapsible: false while collapsed; open first panel
++		if ( key === "collapsible" && !value && this.options.active === false ) {
++			this._activate( 0 );
++		}
++
++		if ( key === "icons" ) {
++			this._destroyIcons();
++			if ( value ) {
++				this._createIcons();
++			}
++		}
++
++		// #5332 - opacity doesn't cascade to positioned elements in IE
++		// so we need to add the disabled class to the headers and panels
++		if ( key === "disabled" ) {
++			this.headers.add( this.headers.next() )
++				.toggleClass( "ui-state-disabled", !!value );
++		}
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		if ( event.altKey || event.ctrlKey ) {
++			return;
++		}
++
++		var keyCode = $.ui.keyCode,
++			length = this.headers.length,
++			currentIndex = this.headers.index( event.target ),
++			toFocus = false;
++
++		switch ( event.keyCode ) {
++			case keyCode.RIGHT:
++			case keyCode.DOWN:
++				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
++				break;
++			case keyCode.LEFT:
++			case keyCode.UP:
++				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
++				break;
++			case keyCode.SPACE:
++			case keyCode.ENTER:
++				this._eventHandler( event );
++				break;
++			case keyCode.HOME:
++				toFocus = this.headers[ 0 ];
++				break;
++			case keyCode.END:
++				toFocus = this.headers[ length - 1 ];
++				break;
++		}
++
++		if ( toFocus ) {
++			$( event.target ).attr( "tabIndex", -1 );
++			$( toFocus ).attr( "tabIndex", 0 );
++			toFocus.focus();
++			event.preventDefault();
++		}
++	},
++
++	_panelKeyDown : function( event ) {
++		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
++			$( event.currentTarget ).prev().focus();
++		}
++	},
++
++	refresh: function() {
++		var options = this.options;
++		this._processPanels();
++
++		// was collapsed or no panel
++		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
++			options.active = false;
++			this.active = $();
++		// active false only when collapsible is true
++		} else if ( options.active === false ) {
++			this._activate( 0 );
++		// was active, but active panel is gone
++		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining panel are disabled
++			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous panel
++			} else {
++				this._activate( Math.max( 0, options.active - 1 ) );
++			}
++		// was active, active panel still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.headers.index( this.active );
++		}
++
++		this._destroyIcons();
++
++		this._refresh();
++	},
++
++	_processPanels: function() {
++		this.headers = this.element.find( this.options.header )
++			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
++
++		this.headers.next()
++			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
++			.filter(":not(.ui-accordion-content-active)")
++			.hide();
++	},
++
++	_refresh: function() {
++		var maxHeight,
++			options = this.options,
++			heightStyle = options.heightStyle,
++			parent = this.element.parent(),
++			accordionId = this.accordionId = "ui-accordion-" +
++				(this.element.attr( "id" ) || ++uid);
++
++		this.active = this._findActive( options.active )
++			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
++			.removeClass( "ui-corner-all" );
++		this.active.next()
++			.addClass( "ui-accordion-content-active" )
++			.show();
++
++		this.headers
++			.attr( "role", "tab" )
++			.each(function( i ) {
++				var header = $( this ),
++					headerId = header.attr( "id" ),
++					panel = header.next(),
++					panelId = panel.attr( "id" );
++				if ( !headerId ) {
++					headerId = accordionId + "-header-" + i;
++					header.attr( "id", headerId );
++				}
++				if ( !panelId ) {
++					panelId = accordionId + "-panel-" + i;
++					panel.attr( "id", panelId );
++				}
++				header.attr( "aria-controls", panelId );
++				panel.attr( "aria-labelledby", headerId );
++			})
++			.next()
++				.attr( "role", "tabpanel" );
++
++		this.headers
++			.not( this.active )
++			.attr({
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.next()
++				.attr({
++					"aria-expanded": "false",
++					"aria-hidden": "true"
++				})
++				.hide();
++
++		// make sure at least one header is in the tab order
++		if ( !this.active.length ) {
++			this.headers.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active.attr({
++				"aria-selected": "true",
++				tabIndex: 0
++			})
++			.next()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++
++		this._createIcons();
++
++		this._setupEvents( options.event );
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.headers.each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.headers.next()
++				.each(function() {
++					$( this ).height( Math.max( 0, maxHeight -
++						$( this ).innerHeight() + $( this ).height() ) );
++				})
++				.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.headers.next()
++				.each(function() {
++					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
++				})
++				.height( maxHeight );
++		}
++	},
++
++	_activate: function( index ) {
++		var active = this._findActive( index )[ 0 ];
++
++		// trying to activate the already active panel
++		if ( active === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the currently active header
++		active = active || this.active[ 0 ];
++
++		this._eventHandler({
++			target: active,
++			currentTarget: active,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( selector ) {
++		return typeof selector === "number" ? this.headers.eq( selector ) : $();
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			keydown: "_keydown"
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.headers.add( this.headers.next() ) );
++		this._on( this.headers, events );
++		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
++		this._hoverable( this.headers );
++		this._focusable( this.headers );
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			clicked = $( event.currentTarget ),
++			clickedIsActive = clicked[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : clicked.next(),
++			toHide = active.next(),
++			eventData = {
++				oldHeader: active,
++				oldPanel: toHide,
++				newHeader: collapsing ? $() : clicked,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if (
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.headers.index( clicked );
++
++		// when the call to ._toggle() comes after the class changes
++		// it causes a very odd bug in IE 8 (see #6720)
++		this.active = clickedIsActive ? $() : clicked;
++		this._toggle( eventData );
++
++		// switch classes
++		// corner classes on the previously active header stay after the animation
++		active.removeClass( "ui-accordion-header-active ui-state-active" );
++		if ( options.icons ) {
++			active.children( ".ui-accordion-header-icon" )
++				.removeClass( options.icons.activeHeader )
++				.addClass( options.icons.header );
++		}
++
++		if ( !clickedIsActive ) {
++			clicked
++				.removeClass( "ui-corner-all" )
++				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
++			if ( options.icons ) {
++				clicked.children( ".ui-accordion-header-icon" )
++					.removeClass( options.icons.header )
++					.addClass( options.icons.activeHeader );
++			}
++
++			clicked
++				.next()
++				.addClass( "ui-accordion-content-active" );
++		}
++	},
++
++	_toggle: function( data ) {
++		var toShow = data.newPanel,
++			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
++
++		// handle activating a panel during the animation for another activation
++		this.prevShow.add( this.prevHide ).stop( true, true );
++		this.prevShow = toShow;
++		this.prevHide = toHide;
++
++		if ( this.options.animate ) {
++			this._animate( toShow, toHide, data );
++		} else {
++			toHide.hide();
++			toShow.show();
++			this._toggleComplete( data );
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		toHide.prev().attr( "aria-selected", "false" );
++		// if we're switching panels, remove the old header from the tab order
++		// if we're opening from collapsed state, remove the previous header from the tab order
++		// if we're collapsing, then keep the collapsing header in the tab order
++		if ( toShow.length && toHide.length ) {
++			toHide.prev().attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.headers.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow
++			.attr({
++				"aria-expanded": "true",
++				"aria-hidden": "false"
++			})
++			.prev()
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++	},
++
++	_animate: function( toShow, toHide, data ) {
++		var total, easing, duration,
++			that = this,
++			adjust = 0,
++			down = toShow.length &&
++				( !toHide.length || ( toShow.index() < toHide.index() ) ),
++			animate = this.options.animate || {},
++			options = down && animate.down || animate,
++			complete = function() {
++				that._toggleComplete( data );
++			};
++
++		if ( typeof options === "number" ) {
++			duration = options;
++		}
++		if ( typeof options === "string" ) {
++			easing = options;
++		}
++		// fall back from options to animation in case of partial down settings
++		easing = easing || options.easing || animate.easing;
++		duration = duration || options.duration || animate.duration;
++
++		if ( !toHide.length ) {
++			return toShow.animate( showProps, duration, easing, complete );
++		}
++		if ( !toShow.length ) {
++			return toHide.animate( hideProps, duration, easing, complete );
++		}
++
++		total = toShow.show().outerHeight();
++		toHide.animate( hideProps, {
++			duration: duration,
++			easing: easing,
++			step: function( now, fx ) {
++				fx.now = Math.round( now );
++			}
++		});
++		toShow
++			.hide()
++			.animate( showProps, {
++				duration: duration,
++				easing: easing,
++				complete: complete,
++				step: function( now, fx ) {
++					fx.now = Math.round( now );
++					if ( fx.prop !== "height" ) {
++						adjust += fx.now;
++					} else if ( that.options.heightStyle !== "content" ) {
++						fx.now = Math.round( total - toHide.outerHeight() - adjust );
++						adjust = 0;
++					}
++				}
++			});
++	},
++
++	_toggleComplete: function( data ) {
++		var toHide = data.oldPanel;
++
++		toHide
++			.removeClass( "ui-accordion-content-active" )
++			.prev()
++				.removeClass( "ui-corner-top" )
++				.addClass( "ui-corner-all" );
++
++		// Work around for rendering bug in IE (#5421)
++		if ( toHide.length ) {
++			toHide.parent()[0].className = toHide.parent()[0].className;
++		}
++
++		this._trigger( "activate", null, data );
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.position.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.position.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.position.js	(revision 15487)
+@@ -0,0 +1,497 @@
++/*!
++ * jQuery UI Position 1.10.3
++ * http://jqueryui.com
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * http://api.jqueryui.com/position/
++ */
++(function( $, undefined ) {
++
++$.ui = $.ui || {};
++
++var cachedScrollbarWidth,
++	max = Math.max,
++	abs = Math.abs,
++	round = Math.round,
++	rhorizontal = /left|center|right/,
++	rvertical = /top|center|bottom/,
++	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
++	rposition = /^\w+/,
++	rpercent = /%$/,
++	_position = $.fn.position;
++
++function getOffsets( offsets, width, height ) {
++	return [
++		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
++		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
++	];
++}
++
++function parseCss( element, property ) {
++	return parseInt( $.css( element, property ), 10 ) || 0;
++}
++
++function getDimensions( elem ) {
++	var raw = elem[0];
++	if ( raw.nodeType === 9 ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: 0, left: 0 }
++		};
++	}
++	if ( $.isWindow( raw ) ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
++		};
++	}
++	if ( raw.preventDefault ) {
++		return {
++			width: 0,
++			height: 0,
++			offset: { top: raw.pageY, left: raw.pageX }
++		};
++	}
++	return {
++		width: elem.outerWidth(),
++		height: elem.outerHeight(),
++		offset: elem.offset()
++	};
++}
++
++$.position = {
++	scrollbarWidth: function() {
++		if ( cachedScrollbarWidth !== undefined ) {
++			return cachedScrollbarWidth;
++		}
++		var w1, w2,
++			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
++			innerDiv = div.children()[0];
++
++		$( "body" ).append( div );
++		w1 = innerDiv.offsetWidth;
++		div.css( "overflow", "scroll" );
++
++		w2 = innerDiv.offsetWidth;
++
++		if ( w1 === w2 ) {
++			w2 = div[0].clientWidth;
++		}
++
++		div.remove();
++
++		return (cachedScrollbarWidth = w1 - w2);
++	},
++	getScrollInfo: function( within ) {
++		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
++			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
++			hasOverflowX = overflowX === "scroll" ||
++				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
++			hasOverflowY = overflowY === "scroll" ||
++				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
++		return {
++			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
++			height: hasOverflowX ? $.position.scrollbarWidth() : 0
++		};
++	},
++	getWithinInfo: function( element ) {
++		var withinElement = $( element || window ),
++			isWindow = $.isWindow( withinElement[0] );
++		return {
++			element: withinElement,
++			isWindow: isWindow,
++			offset: withinElement.offset() || { left: 0, top: 0 },
++			scrollLeft: withinElement.scrollLeft(),
++			scrollTop: withinElement.scrollTop(),
++			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
++			height: isWindow ? withinElement.height() : withinElement.outerHeight()
++		};
++	}
++};
++
++$.fn.position = function( options ) {
++	if ( !options || !options.of ) {
++		return _position.apply( this, arguments );
++	}
++
++	// make a copy, we don't want to modify arguments
++	options = $.extend( {}, options );
++
++	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
++		target = $( options.of ),
++		within = $.position.getWithinInfo( options.within ),
++		scrollInfo = $.position.getScrollInfo( within ),
++		collision = ( options.collision || "flip" ).split( " " ),
++		offsets = {};
++
++	dimensions = getDimensions( target );
++	if ( target[0].preventDefault ) {
++		// force left top to allow flipping
++		options.at = "left top";
++	}
++	targetWidth = dimensions.width;
++	targetHeight = dimensions.height;
++	targetOffset = dimensions.offset;
++	// clone to reuse original targetOffset later
++	basePosition = $.extend( {}, targetOffset );
++
++	// force my and at to have valid horizontal and vertical positions
++	// if a value is missing or invalid, it will be converted to center
++	$.each( [ "my", "at" ], function() {
++		var pos = ( options[ this ] || "" ).split( " " ),
++			horizontalOffset,
++			verticalOffset;
++
++		if ( pos.length === 1) {
++			pos = rhorizontal.test( pos[ 0 ] ) ?
++				pos.concat( [ "center" ] ) :
++				rvertical.test( pos[ 0 ] ) ?
++					[ "center" ].concat( pos ) :
++					[ "center", "center" ];
++		}
++		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
++		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
++
++		// calculate offsets
++		horizontalOffset = roffset.exec( pos[ 0 ] );
++		verticalOffset = roffset.exec( pos[ 1 ] );
++		offsets[ this ] = [
++			horizontalOffset ? horizontalOffset[ 0 ] : 0,
++			verticalOffset ? verticalOffset[ 0 ] : 0
++		];
++
++		// reduce to just the positions without the offsets
++		options[ this ] = [
++			rposition.exec( pos[ 0 ] )[ 0 ],
++			rposition.exec( pos[ 1 ] )[ 0 ]
++		];
++	});
++
++	// normalize collision option
++	if ( collision.length === 1 ) {
++		collision[ 1 ] = collision[ 0 ];
++	}
++
++	if ( options.at[ 0 ] === "right" ) {
++		basePosition.left += targetWidth;
++	} else if ( options.at[ 0 ] === "center" ) {
++		basePosition.left += targetWidth / 2;
++	}
++
++	if ( options.at[ 1 ] === "bottom" ) {
++		basePosition.top += targetHeight;
++	} else if ( options.at[ 1 ] === "center" ) {
++		basePosition.top += targetHeight / 2;
++	}
++
++	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
++	basePosition.left += atOffset[ 0 ];
++	basePosition.top += atOffset[ 1 ];
++
++	return this.each(function() {
++		var collisionPosition, using,
++			elem = $( this ),
++			elemWidth = elem.outerWidth(),
++			elemHeight = elem.outerHeight(),
++			marginLeft = parseCss( this, "marginLeft" ),
++			marginTop = parseCss( this, "marginTop" ),
++			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
++			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
++			position = $.extend( {}, basePosition ),
++			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
++
++		if ( options.my[ 0 ] === "right" ) {
++			position.left -= elemWidth;
++		} else if ( options.my[ 0 ] === "center" ) {
++			position.left -= elemWidth / 2;
++		}
++
++		if ( options.my[ 1 ] === "bottom" ) {
++			position.top -= elemHeight;
++		} else if ( options.my[ 1 ] === "center" ) {
++			position.top -= elemHeight / 2;
++		}
++
++		position.left += myOffset[ 0 ];
++		position.top += myOffset[ 1 ];
++
++		// if the browser doesn't support fractions, then round for consistent results
++		if ( !$.support.offsetFractions ) {
++			position.left = round( position.left );
++			position.top = round( position.top );
++		}
++
++		collisionPosition = {
++			marginLeft: marginLeft,
++			marginTop: marginTop
++		};
++
++		$.each( [ "left", "top" ], function( i, dir ) {
++			if ( $.ui.position[ collision[ i ] ] ) {
++				$.ui.position[ collision[ i ] ][ dir ]( position, {
++					targetWidth: targetWidth,
++					targetHeight: targetHeight,
++					elemWidth: elemWidth,
++					elemHeight: elemHeight,
++					collisionPosition: collisionPosition,
++					collisionWidth: collisionWidth,
++					collisionHeight: collisionHeight,
++					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
++					my: options.my,
++					at: options.at,
++					within: within,
++					elem : elem
++				});
++			}
++		});
++
++		if ( options.using ) {
++			// adds feedback as second argument to using callback, if present
++			using = function( props ) {
++				var left = targetOffset.left - position.left,
++					right = left + targetWidth - elemWidth,
++					top = targetOffset.top - position.top,
++					bottom = top + targetHeight - elemHeight,
++					feedback = {
++						target: {
++							element: target,
++							left: targetOffset.left,
++							top: targetOffset.top,
++							width: targetWidth,
++							height: targetHeight
++						},
++						element: {
++							element: elem,
++							left: position.left,
++							top: position.top,
++							width: elemWidth,
++							height: elemHeight
++						},
++						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
++						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
++					};
++				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
++					feedback.horizontal = "center";
++				}
++				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
++					feedback.vertical = "middle";
++				}
++				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
++					feedback.important = "horizontal";
++				} else {
++					feedback.important = "vertical";
++				}
++				options.using.call( this, props, feedback );
++			};
++		}
++
++		elem.offset( $.extend( position, { using: using } ) );
++	});
++};
++
++$.ui.position = {
++	fit: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
++				outerWidth = within.width,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = withinOffset - collisionPosLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
++				newOverRight;
++
++			// element is wider than within
++			if ( data.collisionWidth > outerWidth ) {
++				// element is initially over the left side of within
++				if ( overLeft > 0 && overRight <= 0 ) {
++					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
++					position.left += overLeft - newOverRight;
++				// element is initially over right side of within
++				} else if ( overRight > 0 && overLeft <= 0 ) {
++					position.left = withinOffset;
++				// element is initially over both left and right sides of within
++				} else {
++					if ( overLeft > overRight ) {
++						position.left = withinOffset + outerWidth - data.collisionWidth;
++					} else {
++						position.left = withinOffset;
++					}
++				}
++			// too far left -> align with left edge
++			} else if ( overLeft > 0 ) {
++				position.left += overLeft;
++			// too far right -> align with right edge
++			} else if ( overRight > 0 ) {
++				position.left -= overRight;
++			// adjust based on position and margin
++			} else {
++				position.left = max( position.left - collisionPosLeft, position.left );
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
++				outerHeight = data.within.height,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = withinOffset - collisionPosTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
++				newOverBottom;
++
++			// element is taller than within
++			if ( data.collisionHeight > outerHeight ) {
++				// element is initially over the top of within
++				if ( overTop > 0 && overBottom <= 0 ) {
++					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
++					position.top += overTop - newOverBottom;
++				// element is initially over bottom of within
++				} else if ( overBottom > 0 && overTop <= 0 ) {
++					position.top = withinOffset;
++				// element is initially over both top and bottom of within
++				} else {
++					if ( overTop > overBottom ) {
++						position.top = withinOffset + outerHeight - data.collisionHeight;
++					} else {
++						position.top = withinOffset;
++					}
++				}
++			// too far up -> align with top
++			} else if ( overTop > 0 ) {
++				position.top += overTop;
++			// too far down -> align with bottom edge
++			} else if ( overBottom > 0 ) {
++				position.top -= overBottom;
++			// adjust based on position and margin
++			} else {
++				position.top = max( position.top - collisionPosTop, position.top );
++			}
++		}
++	},
++	flip: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.left + within.scrollLeft,
++				outerWidth = within.width,
++				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = collisionPosLeft - offsetLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
++				myOffset = data.my[ 0 ] === "left" ?
++					-data.elemWidth :
++					data.my[ 0 ] === "right" ?
++						data.elemWidth :
++						0,
++				atOffset = data.at[ 0 ] === "left" ?
++					data.targetWidth :
++					data.at[ 0 ] === "right" ?
++						-data.targetWidth :
++						0,
++				offset = -2 * data.offset[ 0 ],
++				newOverRight,
++				newOverLeft;
++
++			if ( overLeft < 0 ) {
++				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
++				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overRight > 0 ) {
++				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
++				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.top + within.scrollTop,
++				outerHeight = within.height,
++				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = collisionPosTop - offsetTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
++				top = data.my[ 1 ] === "top",
++				myOffset = top ?
++					-data.elemHeight :
++					data.my[ 1 ] === "bottom" ?
++						data.elemHeight :
++						0,
++				atOffset = data.at[ 1 ] === "top" ?
++					data.targetHeight :
++					data.at[ 1 ] === "bottom" ?
++						-data.targetHeight :
++						0,
++				offset = -2 * data.offset[ 1 ],
++				newOverTop,
++				newOverBottom;
++			if ( overTop < 0 ) {
++				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
++				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overBottom > 0 ) {
++				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
++				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++		}
++	},
++	flipfit: {
++		left: function() {
++			$.ui.position.flip.left.apply( this, arguments );
++			$.ui.position.fit.left.apply( this, arguments );
++		},
++		top: function() {
++			$.ui.position.flip.top.apply( this, arguments );
++			$.ui.position.fit.top.apply( this, arguments );
++		}
++	}
++};
++
++// fraction support test
++(function () {
++	var testElement, testElementParent, testElementStyle, offsetLeft, i,
++		body = document.getElementsByTagName( "body" )[ 0 ],
++		div = document.createElement( "div" );
++
++	//Create a "fake body" for testing based on method used in jQuery.support
++	testElement = document.createElement( body ? "div" : "body" );
++	testElementStyle = {
++		visibility: "hidden",
++		width: 0,
++		height: 0,
++		border: 0,
++		margin: 0,
++		background: "none"
++	};
++	if ( body ) {
++		$.extend( testElementStyle, {
++			position: "absolute",
++			left: "-1000px",
++			top: "-1000px"
++		});
++	}
++	for ( i in testElementStyle ) {
++		testElement.style[ i ] = testElementStyle[ i ];
++	}
++	testElement.appendChild( div );
++	testElementParent = body || document.documentElement;
++	testElementParent.insertBefore( testElement, testElementParent.firstChild );
++
++	div.style.cssText = "position: absolute; left: 10.7432222px;";
++
++	offsetLeft = $( div ).offset().left;
++	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
++
++	testElement.innerHTML = "";
++	testElementParent.removeChild( testElement );
++})();
++
++}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.js	(revision 15487)
+@@ -0,0 +1,240 @@
++(function( $ ) {
++
++    module( "jquery.sidebar" );
++    
++    var destroy = function destroy(){
++        $(".sidebar-container.left,.sidebar-container.top,.sidebar-container.right,.sidebar-container.bottom").remove();
++    };
++    
++    asyncTest( "default/left", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "left";
++            
++        elem.sidebar({
++            position : pos,
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-50px" );
++        
++        container.mouseenter();
++    });
++    asyncTest( "top", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "top";
++            
++        elem.sidebar({
++            position : pos,
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-150px" );
++        
++        container.mouseenter();
++    });
++    asyncTest( "right", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "right";
++            
++        elem.sidebar({
++            position : pos,
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-50px" );
++        
++        container.mouseenter();
++    });
++    
++    asyncTest( "bottom", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "bottom";
++            
++        elem.sidebar({
++            position : pos,
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-150px" );
++        
++        container.mouseenter();
++    });
++    
++    
++    asyncTest( "open-event", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "left";
++            
++        elem.sidebar({
++            position : pos,
++            open : "click",
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-50px" );
++        
++        container.click();
++    });
++    
++    
++    asyncTest( "call open/close method manually", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "left";
++            
++        elem.sidebar({
++            position : pos,
++            open : "click",
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        elem.sidebar("close");
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-50px" );
++        
++        elem.sidebar("open");
++
++    });
++
++})( jQuery );
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.html	(revision 15487)
+@@ -0,0 +1,40 @@
++<!doctype html>
++<html lang="en">
++<head>
++    <meta charset="utf-8">
++    <title>jQuery SideBar Test Suite</title>
++
++
++    <link rel="stylesheet" type="text/css" href="../lib/qunit.css" />
++    <link rel="stylesheet" type="text/css" href="../css/dark-glass/sidebar.css" />
++    
++    <script type="text/javascript" src="../lib/jquery.js"></script>
++    <script type="text/javascript" src="../lib/jquery-ui.js"></script>
++    <script type="text/javascript" src="../lib/qunit.js" ></script>
++    <script type="text/javascript" src="../src/jquery.sidebar.js"></script>
++    <script type="text/javascript" src="jquery.sidebar.js"></script>
++    
++</head>
++<body>
++
++<h1 id="qunit-header">jQuery SideBar Test Suite</h1>
++<h2 id="qunit-banner"></h2>
++<div id="qunit-testrunner-toolbar"></div>
++<h2 id="qunit-userAgent"></h2>
++<ol id="qunit-tests"></ol>
++<div id="qunit-fixture">
++
++        <ul id="sidebar" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++</div>
++<script>
++if (location.hash === '#testem')
++    document.write('<script src="/testem.js"></'+'script>')
++</script>
++</body>
++</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.js	(revision 15487)
+@@ -0,0 +1,226 @@
++/*!
++ * jquery.sidebar v1.0.2
++ * http://sideroad.secret.jp/
++ *
++ * Copyright (c) 2009 sideroad
++ *
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * Date: 2009-09-01
++ */
++(function( $, _window ) {
++    $.fn.sidebar = function(options){
++
++        return this.each(function(){
++            var elem = $(this),
++                data = elem.data("sidebar")||{},
++                margin,
++                width,
++                height,
++                duration = data.duration,
++                injectWidth,
++                injectHeight,
++                injectCss,
++                containerCss,
++                bodyCss,
++                position,
++                enter,
++                leave,
++                opened,
++                closed,
++                isInnerElement,
++                container = $("<div><div/>"),
++                inject = $("<div><div/>"),
++                body = $("<div><div/>"),
++                root,
++                parent,
++                open = function(){
++                    var data = elem.data("sidebar") || {},
++                        opened = data.callback.sidebar.open,
++                        container = data.container,
++                        inject = data.inject,
++                        body = data.body;
++                    
++                    if (data.isEnter || data.isProcessing) {
++                        return;
++                    }
++                    data.isEnter = true;
++                    data.isProcessing = true;
++                    container.animate(data.animate.container.enter, {
++                        duration: duration,
++                        complete: function(){
++                            inject.fadeOut(duration, function(){
++                                body.show("clip", duration,function(){
++                                    data.isProcessing = false;
++                                    if(opened) {
++                                        opened();
++                                    }
++                                });
++                            });
++                        }
++                    });
++                },
++                close = function(){
++                    var data = elem.data("sidebar") || {},
++                        closed = data.callback.sidebar.close,
++                        container = data.container,
++                        inject = data.inject,
++                        body = data.body;
++                       
++                    if(!data.isEnter || data.isProcessing ) {
++                        return;
++                    }
++                    data.isProcessing = true;
++                    container.animate(data.animate.container.leave, {
++                        duration: duration,
++                        complete: function(){
++                            body.hide("clip", duration, function(){
++                                inject.fadeIn(duration, function(){
++                                    data.isEnter = false;
++                                    data.isProcessing = false;
++                                    if(closed) {
++                                        closed();
++                                    }
++                                });
++                            });
++                        }
++                    });
++                };
++            
++            
++            if(typeof options === "string"){
++                switch(options){
++                    case "open" :
++                        open();
++                        break;
++                    case "close" : 
++                        close();
++                        break;
++                }
++                return;
++            }
++                
++            //default setting
++            options = $.extend(true, {
++                root : $(document.body),
++                position : "left",
++                callback: {
++                    item : {
++                        enter : function(){
++                            $(this).animate({marginLeft:"5px"},250);
++                        },
++                        leave : function(){
++                            $(this).animate({marginLeft:"0px"},250);
++                        }
++                    },
++                    sidebar : {
++                        open : function(){
++                            
++                        },
++                        close : function(){
++                            
++                        }
++                    }
++                },
++                animate : {
++                    container : {
++                        enter : {},
++                        leave : {}
++                    }
++                },
++                duration : 200,
++                open : "mouseenter.sidebar",
++                close : "mouseleave.sidebar"
++            }, options);
++            
++            root = options.root;
++            isInnerElement = !root.is(document.body);
++            parent = ( isInnerElement ) ? root.addClass("sidebar-root") : $(_window);
++            
++            position = options.position;
++            duration = options.duration;
++            
++            container.attr("id", "jquerySideBar" + new Date().getTime()).addClass("sidebar-container").addClass(position);
++            inject.addClass("sidebar-inject").addClass(position);
++            body.addClass("sidebar-body");
++            
++            //append to body
++            body.append(this);
++            container.append(body);
++            container.append(inject);
++            root.append(container);
++            
++            width = container.width();
++            height = container.height();
++            injectWidth = inject.width();
++            injectHeight = inject.height();
++            
++            containerCss = {
++                height: height,
++                width: width
++            };
++            bodyCss = {
++                height: height,
++                width: width
++            };
++            
++            if(position === "left" || position === "right") {
++                margin = width - injectWidth;
++                injectCss = {
++                    height : height,
++                    width : injectWidth
++                };
++                containerCss.top = options.top || (parent.height()/2) - (height/2) + "px";
++                
++            } else {
++                margin = height - injectHeight;
++                injectCss = {
++                    height : injectHeight,
++                    width : width
++                };
++                containerCss.left = options.left || (parent.width()/2) - (width/2) + "px";
++            }
++            
++            containerCss[position] = "-" + margin + "px";
++            injectCss[position] = margin + "px";
++            options.animate.container.enter[position] = 0;
++            options.animate.container.leave[position] = "-" + margin;
++            
++            //container
++            container.css(containerCss);
++            
++            //inject
++            inject.css(injectCss);
++            
++            //body
++            body.css(bodyCss).hide();
++            
++            //menu callback
++            $(this).addClass("sidebar-menu").find("li")
++                .bind("mouseenter.sidebar",options.callback.item.enter)
++                .bind("mouseleave.sidebar",options.callback.item.leave);
++            
++            //container events
++            if(options.open) {
++                container.bind(options.open,open);
++            }
++            if(options.close) {
++                container.bind(options.close,close);
++            }
++            
++            //store data
++            options.container = container;
++            options.inject = inject;
++            options.body = body;
++            elem.data("sidebar", options);
++            
++            parent.resize(function(){
++                if(position === "left" || position === "right") {
++                    container.css({top:($(this).height()/2) - (height/2) + "px"});
++                } else {
++                    container.css({left:($(this).width()/2) - (width/2) + "px"});
++                }
++            });
++            
++        });
++    };
++}(jQuery, this));
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.min.js	(revision 15487)
+@@ -0,0 +1,10 @@
++/*!
++ * jquery.sidebar v1.0.2
++ * http://sideroad.secret.jp/
++ *
++ * Copyright (c) 2009 sideroad
++ *
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * Date: 2009-09-01
++ */
++(function(a,b){a.fn.sidebar=function(c){return this.each(function(){var x=a(this),A=x.data("sidebar")||{},p,u,q,d=A.duration,j,s,e,i,g,z,w,h,y,f,r,m=a("<div><div/>"),t=a("<div><div/>"),l=a("<div><div/>"),v,k,n=function(){var E=x.data("sidebar")||{},F=E.callback.sidebar.open,C=E.container,D=E.inject,B=E.body;if(E.isEnter||E.isProcessing){return}E.isEnter=true;E.isProcessing=true;C.animate(E.animate.container.enter,{duration:d,complete:function(){D.fadeOut(d,function(){B.show("clip",d,function(){E.isProcessing=false;if(F){F()}})})}})},o=function(){var F=x.data("sidebar")||{},D=F.callback.sidebar.close,C=F.container,E=F.inject,B=F.body;if(!F.isEnter||F.isProcessing){return}F.isProcessing=true;C.animate(F.animate.container.leave,{duration:d,complete:function(){B.hide("clip",d,function(){E.fadeIn(d,function(){F.isEnter=false;F.isProcessing=false;if(D){D()}})})}})};if(typeof c==="string"){switch(c){case"open":n();break;case"close":o();break}return}c=a.extend(true,{root:a(document.body),position:"left",callback:{item:{enter:function(){a(this).animate({marginLeft:"5px"},250)},leave:function(){a(this).animate({marginLeft:"0px"},250)}},sidebar:{open:function(){},close:function(){}}},animate:{container:{enter:{},leave:{}}},duration:200,open:"mouseenter.sidebar",close:"mouseleave.sidebar"},c);v=c.root;r=!v.is(document.body);k=(r)?v.addClass("sidebar-root"):a(b);z=c.position;d=c.duration;m.attr("id","jquerySideBar"+new Date().getTime()).addClass("sidebar-container").addClass(z);t.addClass("sidebar-inject").addClass(z);l.addClass("sidebar-body");l.append(this);m.append(l);m.append(t);v.append(m);u=m.width();q=m.height();j=t.width();s=t.height();i={height:q,width:u};g={height:q,width:u};if(z==="left"||z==="right"){p=u-j;e={height:q,width:j};i.top=c.top||(k.height()/2)-(q/2)+"px"}else{p=q-s;e={height:s,width:u};i.left=c.left||(k.width()/2)-(u/2)+"px"}i[z]="-"+p+"px";e[z]=p+"px";c.animate.container.enter[z]=0;c.animate.container.leave[z]="-"+p;m.css(i);t.css(e);l.css(g).hide();a(this).addClass("sidebar-menu").find("li").bind("mouseenter.sidebar",c.callback.item.enter).bind("mouseleave.sidebar",c.callback.item.leave);if(c.open){m.bind(c.open,n)}if(c.close){m.bind(c.close,o)}c.container=m;c.inject=t;c.body=l;x.data("sidebar",c);k.resize(function(){if(z==="left"||z==="right"){m.css({top:(a(this).height()/2)-(q/2)+"px"})}else{m.css({left:(a(this).width()/2)-(u/2)+"px"})}})})}}(jQuery,this));
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/package.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/package.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/package.json	(revision 15487)
+@@ -0,0 +1,45 @@
++{
++  "name": "jquery.sidebar",
++  "title": "jQuery SideBar",
++  "description": "A jQuery plugin that displays sidebar menu.",
++  "version": "1.0.2",
++  "homepage": "https://github.com/sideroad/jquery.sidebar",
++  "author": {
++    "name": "sideroad",
++    "url": "http://sideroad.secret.jp/"
++  },
++  "maintainers": [
++    {
++      "name": "sideroad",
++      "email": "sideroad.jp@gmail.com",
++      "url": "http://sideroad.secret.jp/"
++    }
++  ],
++  "repository": {
++    "type": "git",
++    "url": "git://github.com/sideroad/jquery.sidebar.git"
++  },
++  "bugs": "https://github.com/sideroad/jquery.sidebar/issues",
++  "licenses": [
++    {
++      "type": "MIT",
++      "url": "http://www.opensource.org/licenses/MIT"
++    },
++    {
++      "type": "GPL",
++      "url": "http://www.opensource.org/licenses/GPL-2.0"
++    }
++  ],
++  "devDependencies": {
++    "grunt-qunit-cov": "~0.3.2",
++    "grunt-testem": "~0.3.2",
++    "grunt-yui-compressor": "~0.2.2",
++    "grunt-contrib-concat": "~0.1.3",
++    "grunt-devtools": "~0.1.0",
++    "grunt": "~0.4.1"
++  },
++  "keywords": [
++    "sidebar",
++    "menu"
++  ]
++}
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/tests.tap
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/tests.tap	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/tests.tap	(revision 15487)
+@@ -0,0 +1,12 @@
++TAP version 13
++ok 1 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: default/left
++ok 2 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: top
++ok 3 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: right
++ok 4 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: bottom
++ok 5 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: open-event
++ok 6 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: call open/close method manually
++
++1..6
++# tests 6
++# pass 6
++# fail 0
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/touch.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/touch.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/touch.html	(revision 15487)
+@@ -0,0 +1,63 @@
++﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
++"http://www.w3.org/TR/html4/loose.dtd">
++<html xmlns="http://www.w3.org/1999/xhtml">
++    <head>
++        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
++        <title>jquery.sidebar.js</title>
++        <link rel="stylesheet" type="text/css" href="css/dark-glass/sidebar.css" />
++        <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
++        <script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
++        <script type="text/javascript" src="src/jquery.sidebar.js"></script>
++    </head>
++    <body>
++        <ul id="demo_menu1" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu2" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu3" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu4" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++
++        <b style="font-size:80px;position:absolute;top:42%;left:35%;" >jquery.sidebar</b>
++        <script type="text/javascript">
++        var elem = $("ul#demo_menu1").sidebar({
++            open : "touchstart",
++            close : false
++        }),
++        data = elem.data("sidebar");
++    
++    
++        $(document.body).bind("touchstart", function(e){
++            var target = $(e.target),
++                id = data.container.attr("id");
++    
++            if(!target.is("#"+id) && !target.parents("#"+id).length ){
++                elem.sidebar("close");
++            }
++            
++        });
++        
++        </script>
++    </body>
++</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.css	(revision 15487)
+@@ -0,0 +1,568 @@
++/*
++ * jQuery UI CSS Framework 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden { display: none; }
++.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
++.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
++.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
++.ui-helper-clearfix { display: inline-block; }
++/* required comment for clearfix to work in Opera \*/
++* html .ui-helper-clearfix { height:1%; }
++.ui-helper-clearfix { display:block; }
++/* end clearfix */
++.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled { cursor: default !important; }
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
++
++
++/*
++ * jQuery UI CSS Framework 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ *
++ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Segoe%20UI,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=333333&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=25&borderColorHeader=333333&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=000000&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=25&borderColorContent=666666&fcContent=ffffff&iconColorContent=cccccc&bgColorDefault=555555&bgTextureDefault=02_glass.png&bgImgOpacityDefault=20&borderColorDefault=666666&fcDefault=eeeeee&iconColorDefault=cccccc&bgColorHover=0078a3&bgTextureHover=02_glass.png&bgImgOpacityHover=40&borderColorHover=59b4d4&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=f58400&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=30&borderColorActive=ffaf0f&fcActive=ffffff&iconColorActive=222222&bgColorHighlight=eeeeee&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=80&borderColorHighlight=cccccc&fcHighlight=2e7db2&iconColorHighlight=4b8e0b&bgColorError=ffc73d&bgTextureError=02_glass.png&bgImgOpacityError=40&borderColorError=ffb73d&fcError=111111&iconColorError=a83300&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
++ */
++
++
++/* Component containers
++----------------------------------*/
++.ui-widget { font-family: Segoe UI, Arial, sans-serif; font-size: 1.1em; }
++.ui-widget .ui-widget { font-size: 1em; }
++.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Segoe UI, Arial, sans-serif; font-size: 1em; }
++.ui-widget-content { border: 1px solid #666666; background: #000000 url(images/ui-bg_inset-soft_25_000000_1x100.png) 50% bottom repeat-x; color: #ffffff; }
++.ui-widget-content a { color: #ffffff; }
++.ui-widget-header { border: 1px solid #333333; background: #333333 url(images/ui-bg_gloss-wave_25_333333_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
++.ui-widget-header a { color: #ffffff; }
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #666666; background: #555555 url(images/ui-bg_glass_20_555555_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eeeeee; }
++.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #eeeeee; text-decoration: none; }
++.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #59b4d4; background: #0078a3 url(images/ui-bg_glass_40_0078a3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
++.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; }
++.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #ffaf0f; background: #f58400 url(images/ui-bg_inset-soft_30_f58400_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
++.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
++.ui-widget :active { outline: none; }
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #cccccc; background: #eeeeee url(images/ui-bg_highlight-soft_80_eeeeee_1x100.png) 50% top repeat-x; color: #2e7db2; }
++.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #2e7db2; }
++.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ffb73d; background: #ffc73d url(images/ui-bg_glass_40_ffc73d_1x400.png) 50% 50% repeat-x; color: #111111; }
++.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #111111; }
++.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #111111; }
++.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
++.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
++.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_cccccc_256x240.png); }
++.ui-widget-content .ui-icon {background-image: url(images/ui-icons_cccccc_256x240.png); }
++.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
++.ui-state-default .ui-icon { background-image: url(images/ui-icons_cccccc_256x240.png); }
++.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
++.ui-state-active .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
++.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_4b8e0b_256x240.png); }
++.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_a83300_256x240.png); }
++
++/* positioning */
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-off { background-position: -96px -144px; }
++.ui-icon-radio-on { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; }
++.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; }
++.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
++.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
++
++/* Overlays */
++.ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
++.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
++ * jQuery UI Resizable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Resizable#theming
++ */
++.ui-resizable { position: relative;}
++.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
++.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
++.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
++.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
++.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
++.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
++.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
++.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
++.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
++.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
++ * jQuery UI Selectable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Selectable#theming
++ */
++.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
++/*
++ * jQuery UI Accordion 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Accordion#theming
++ */
++/* IE/Win - Fix animation bug - #4615 */
++.ui-accordion { width: 100%; }
++.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
++.ui-accordion .ui-accordion-li-fix { display: inline; }
++.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
++.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
++.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
++.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
++.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
++.ui-accordion .ui-accordion-content-active { display: block; }
++/*
++ * jQuery UI Autocomplete 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Autocomplete#theming
++ */
++.ui-autocomplete { position: absolute; cursor: default; }	
++
++/* workarounds */
++* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
++
++/*
++ * jQuery UI Menu 1.8.15
++ *
++ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Menu#theming
++ */
++.ui-menu {
++	list-style:none;
++	padding: 2px;
++	margin: 0;
++	display:block;
++	float: left;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++}
++.ui-menu .ui-menu-item {
++	margin:0;
++	padding: 0;
++	zoom: 1;
++	float: left;
++	clear: left;
++	width: 100%;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration:none;
++	display:block;
++	padding:.2em .4em;
++	line-height:1.5;
++	zoom:1;
++}
++.ui-menu .ui-menu-item a.ui-state-hover,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++/*
++ * jQuery UI Button 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Button#theming
++ */
++.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
++.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
++button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
++.ui-button-icons-only { width: 3.4em; } 
++button.ui-button-icons-only { width: 3.7em; } 
++
++/*button text element */
++.ui-button .ui-button-text { display: block; line-height: 1.4;  }
++.ui-button-text-only .ui-button-text { padding: .4em 1em; }
++.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
++.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
++.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
++.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
++/* no icon support for input elements, provide padding by default */
++input.ui-button { padding: .4em 1em; }
++
++/*button icon element(s) */
++.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
++.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
++.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
++.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
++.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
++
++/*button sets*/
++.ui-buttonset { margin-right: 7px; }
++.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
++
++/* workarounds */
++button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
++/*
++ * jQuery UI Dialog 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Dialog#theming
++ */
++.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
++.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
++.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
++.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
++.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
++.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
++.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
++.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
++.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
++.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
++.ui-draggable .ui-dialog-titlebar { cursor: move; }
++/*
++ * jQuery UI Slider 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Slider#theming
++ */
++.ui-slider { position: relative; text-align: left; }
++.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
++.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
++
++.ui-slider-horizontal { height: .8em; }
++.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
++.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
++.ui-slider-horizontal .ui-slider-range-min { left: 0; }
++.ui-slider-horizontal .ui-slider-range-max { right: 0; }
++
++.ui-slider-vertical { width: .8em; height: 100px; }
++.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
++.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
++.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
++.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
++ * jQuery UI Tabs 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Tabs#theming
++ */
++.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
++.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
++.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
++.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
++.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
++.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
++.ui-tabs .ui-tabs-hide { display: none !important; }
++/*
++ * jQuery UI Datepicker 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Datepicker#theming
++ */
++.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
++.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
++.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
++.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
++.ui-datepicker .ui-datepicker-prev { left:2px; }
++.ui-datepicker .ui-datepicker-next { right:2px; }
++.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
++.ui-datepicker .ui-datepicker-next-hover { right:1px; }
++.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
++.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
++.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
++.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
++.ui-datepicker select.ui-datepicker-month, 
++.ui-datepicker select.ui-datepicker-year { width: 49%;}
++.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
++.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
++.ui-datepicker td { border: 0; padding: 1px; }
++.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
++.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
++.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi { width:auto; }
++.ui-datepicker-multi .ui-datepicker-group { float:left; }
++.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
++.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
++.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
++.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
++.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
++.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
++
++/* RTL support */
++.ui-datepicker-rtl { direction: rtl; }
++.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
++.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
++.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
++.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
++.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
++.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
++.ui-datepicker-rtl .ui-datepicker-group { float:right; }
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
++
++/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
++.ui-datepicker-cover {
++    display: none; /*sorry for IE5*/
++    display/**/: block; /*sorry for IE5*/
++    position: absolute; /*must have*/
++    z-index: -1; /*must have*/
++    filter: mask(); /*must have*/
++    top: -4px; /*must have*/
++    left: -4px; /*must have*/
++    width: 200px; /*must have*/
++    height: 200px; /*must have*/
++}/*
++ * jQuery UI Progressbar 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Progressbar#theming
++ */
++.ui-progressbar { height:2em; text-align: left; }
++.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.js	(revision 15487)
+@@ -0,0 +1,11737 @@
++/*!
++ * jQuery UI 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI
++ */
++(function( $, undefined ) {
++
++// prevent duplicate loading
++// this is only a problem because we proxy existing functions
++// and we don't want to double proxy them
++$.ui = $.ui || {};
++if ( $.ui.version ) {
++	return;
++}
++
++$.extend( $.ui, {
++	version: "1.8.15",
++
++	keyCode: {
++		ALT: 18,
++		BACKSPACE: 8,
++		CAPS_LOCK: 20,
++		COMMA: 188,
++		COMMAND: 91,
++		COMMAND_LEFT: 91, // COMMAND
++		COMMAND_RIGHT: 93,
++		CONTROL: 17,
++		DELETE: 46,
++		DOWN: 40,
++		END: 35,
++		ENTER: 13,
++		ESCAPE: 27,
++		HOME: 36,
++		INSERT: 45,
++		LEFT: 37,
++		MENU: 93, // COMMAND_RIGHT
++		NUMPAD_ADD: 107,
++		NUMPAD_DECIMAL: 110,
++		NUMPAD_DIVIDE: 111,
++		NUMPAD_ENTER: 108,
++		NUMPAD_MULTIPLY: 106,
++		NUMPAD_SUBTRACT: 109,
++		PAGE_DOWN: 34,
++		PAGE_UP: 33,
++		PERIOD: 190,
++		RIGHT: 39,
++		SHIFT: 16,
++		SPACE: 32,
++		TAB: 9,
++		UP: 38,
++		WINDOWS: 91 // COMMAND
++	}
++});
++
++// plugins
++$.fn.extend({
++	propAttr: $.fn.prop || $.fn.attr,
++
++	_focus: $.fn.focus,
++	focus: function( delay, fn ) {
++		return typeof delay === "number" ?
++			this.each(function() {
++				var elem = this;
++				setTimeout(function() {
++					$( elem ).focus();
++					if ( fn ) {
++						fn.call( elem );
++					}
++				}, delay );
++			}) :
++			this._focus.apply( this, arguments );
++	},
++
++	scrollParent: function() {
++		var scrollParent;
++		if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
++			scrollParent = this.parents().filter(function() {
++				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
++			}).eq(0);
++		} else {
++			scrollParent = this.parents().filter(function() {
++				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
++			}).eq(0);
++		}
++
++		return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
++	},
++
++	zIndex: function( zIndex ) {
++		if ( zIndex !== undefined ) {
++			return this.css( "zIndex", zIndex );
++		}
++
++		if ( this.length ) {
++			var elem = $( this[ 0 ] ), position, value;
++			while ( elem.length && elem[ 0 ] !== document ) {
++				// Ignore z-index if position is set to a value where z-index is ignored by the browser
++				// This makes behavior of this function consistent across browsers
++				// WebKit always returns auto if the element is positioned
++				position = elem.css( "position" );
++				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
++					// IE returns 0 when zIndex is not specified
++					// other browsers return a string
++					// we ignore the case of nested elements with an explicit value of 0
++					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
++					value = parseInt( elem.css( "zIndex" ), 10 );
++					if ( !isNaN( value ) && value !== 0 ) {
++						return value;
++					}
++				}
++				elem = elem.parent();
++			}
++		}
++
++		return 0;
++	},
++
++	disableSelection: function() {
++		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
++			".ui-disableSelection", function( event ) {
++				event.preventDefault();
++			});
++	},
++
++	enableSelection: function() {
++		return this.unbind( ".ui-disableSelection" );
++	}
++});
++
++$.each( [ "Width", "Height" ], function( i, name ) {
++	var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
++		type = name.toLowerCase(),
++		orig = {
++			innerWidth: $.fn.innerWidth,
++			innerHeight: $.fn.innerHeight,
++			outerWidth: $.fn.outerWidth,
++			outerHeight: $.fn.outerHeight
++		};
++
++	function reduce( elem, size, border, margin ) {
++		$.each( side, function() {
++			size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
++			if ( border ) {
++				size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
++			}
++			if ( margin ) {
++				size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
++			}
++		});
++		return size;
++	}
++
++	$.fn[ "inner" + name ] = function( size ) {
++		if ( size === undefined ) {
++			return orig[ "inner" + name ].call( this );
++		}
++
++		return this.each(function() {
++			$( this ).css( type, reduce( this, size ) + "px" );
++		});
++	};
++
++	$.fn[ "outer" + name] = function( size, margin ) {
++		if ( typeof size !== "number" ) {
++			return orig[ "outer" + name ].call( this, size );
++		}
++
++		return this.each(function() {
++			$( this).css( type, reduce( this, size, true, margin ) + "px" );
++		});
++	};
++});
++
++// selectors
++function focusable( element, isTabIndexNotNaN ) {
++	var nodeName = element.nodeName.toLowerCase();
++	if ( "area" === nodeName ) {
++		var map = element.parentNode,
++			mapName = map.name,
++			img;
++		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
++			return false;
++		}
++		img = $( "img[usemap=#" + mapName + "]" )[0];
++		return !!img && visible( img );
++	}
++	return ( /input|select|textarea|button|object/.test( nodeName )
++		? !element.disabled
++		: "a" == nodeName
++			? element.href || isTabIndexNotNaN
++			: isTabIndexNotNaN)
++		// the element and all of its ancestors must be visible
++		&& visible( element );
++}
++
++function visible( element ) {
++	return !$( element ).parents().andSelf().filter(function() {
++		return $.curCSS( this, "visibility" ) === "hidden" ||
++			$.expr.filters.hidden( this );
++	}).length;
++}
++
++$.extend( $.expr[ ":" ], {
++	data: function( elem, i, match ) {
++		return !!$.data( elem, match[ 3 ] );
++	},
++
++	focusable: function( element ) {
++		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
++	},
++
++	tabbable: function( element ) {
++		var tabIndex = $.attr( element, "tabindex" ),
++			isTabIndexNaN = isNaN( tabIndex );
++		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
++	}
++});
++
++// support
++$(function() {
++	var body = document.body,
++		div = body.appendChild( div = document.createElement( "div" ) );
++
++	$.extend( div.style, {
++		minHeight: "100px",
++		height: "auto",
++		padding: 0,
++		borderWidth: 0
++	});
++
++	$.support.minHeight = div.offsetHeight === 100;
++	$.support.selectstart = "onselectstart" in div;
++
++	// set display to none to avoid a layout bug in IE
++	// http://dev.jquery.com/ticket/4014
++	body.removeChild( div ).style.display = "none";
++});
++
++
++
++
++
++// deprecated
++$.extend( $.ui, {
++	// $.ui.plugin is deprecated.  Use the proxy pattern instead.
++	plugin: {
++		add: function( module, option, set ) {
++			var proto = $.ui[ module ].prototype;
++			for ( var i in set ) {
++				proto.plugins[ i ] = proto.plugins[ i ] || [];
++				proto.plugins[ i ].push( [ option, set[ i ] ] );
++			}
++		},
++		call: function( instance, name, args ) {
++			var set = instance.plugins[ name ];
++			if ( !set || !instance.element[ 0 ].parentNode ) {
++				return;
++			}
++	
++			for ( var i = 0; i < set.length; i++ ) {
++				if ( instance.options[ set[ i ][ 0 ] ] ) {
++					set[ i ][ 1 ].apply( instance.element, args );
++				}
++			}
++		}
++	},
++	
++	// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
++	contains: function( a, b ) {
++		return document.compareDocumentPosition ?
++			a.compareDocumentPosition( b ) & 16 :
++			a !== b && a.contains( b );
++	},
++	
++	// only used by resizable
++	hasScroll: function( el, a ) {
++	
++		//If overflow is hidden, the element might have extra content, but the user wants to hide it
++		if ( $( el ).css( "overflow" ) === "hidden") {
++			return false;
++		}
++	
++		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
++			has = false;
++	
++		if ( el[ scroll ] > 0 ) {
++			return true;
++		}
++	
++		// TODO: determine which cases actually cause this to happen
++		// if the element doesn't have the scroll set, see if it's possible to
++		// set the scroll
++		el[ scroll ] = 1;
++		has = ( el[ scroll ] > 0 );
++		el[ scroll ] = 0;
++		return has;
++	},
++	
++	// these are odd functions, fix the API or move into individual plugins
++	isOverAxis: function( x, reference, size ) {
++		//Determines when x coordinate is over "b" element axis
++		return ( x > reference ) && ( x < ( reference + size ) );
++	},
++	isOver: function( y, x, top, left, height, width ) {
++		//Determines when x, y coordinates is over "b" element
++		return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
++	}
++});
++
++})( jQuery );
++/*!
++ * jQuery UI Widget 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Widget
++ */
++(function( $, undefined ) {
++
++// jQuery 1.4+
++if ( $.cleanData ) {
++	var _cleanData = $.cleanData;
++	$.cleanData = function( elems ) {
++		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++			$( elem ).triggerHandler( "remove" );
++		}
++		_cleanData( elems );
++	};
++} else {
++	var _remove = $.fn.remove;
++	$.fn.remove = function( selector, keepData ) {
++		return this.each(function() {
++			if ( !keepData ) {
++				if ( !selector || $.filter( selector, [ this ] ).length ) {
++					$( "*", this ).add( [ this ] ).each(function() {
++						$( this ).triggerHandler( "remove" );
++					});
++				}
++			}
++			return _remove.call( $(this), selector, keepData );
++		});
++	};
++}
++
++$.widget = function( name, base, prototype ) {
++	var namespace = name.split( "." )[ 0 ],
++		fullName;
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName ] = function( elem ) {
++		return !!$.data( elem, name );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	$[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without initializing for simple inheritance
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++
++	var basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++//	$.each( basePrototype, function( key, val ) {
++//		if ( $.isPlainObject(val) ) {
++//			basePrototype[ key ] = $.extend( {}, val );
++//		}
++//	});
++	basePrototype.options = $.extend( true, {}, basePrototype.options );
++	$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
++		namespace: namespace,
++		widgetName: name,
++		widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
++		widgetBaseClass: fullName
++	}, prototype );
++
++	$.widget.bridge( name, $[ namespace ][ name ] );
++};
++
++$.widget.bridge = function( name, object ) {
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = Array.prototype.slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.extend.apply( null, [ true, options ].concat(args) ) :
++			options;
++
++		// prevent calls to internal methods
++		if ( isMethodCall && options.charAt( 0 ) === "_" ) {
++			return returnValue;
++		}
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var instance = $.data( this, name ),
++					methodValue = instance && $.isFunction( instance[options] ) ?
++						instance[ options ].apply( instance, args ) :
++						instance;
++				// TODO: add this back in 1.9 and use $.error() (see #5972)
++//				if ( !instance ) {
++//					throw "cannot call methods on " + name + " prior to initialization; " +
++//						"attempted to call method '" + options + "'";
++//				}
++//				if ( !$.isFunction( instance[options] ) ) {
++//					throw "no such method '" + options + "' for " + name + " widget instance";
++//				}
++//				var methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, name );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					$.data( this, name, new object( options, this ) );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( options, element ) {
++	// allow instantiation without initializing for simple inheritance
++	if ( arguments.length ) {
++		this._createWidget( options, element );
++	}
++};
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	options: {
++		disabled: false
++	},
++	_createWidget: function( options, element ) {
++		// $.widget.bridge stores the plugin instance, but we do it anyway
++		// so that it's stored even before the _create function runs
++		$.data( element, this.widgetName, this );
++		this.element = $( element );
++		this.options = $.extend( true, {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		var self = this;
++		this.element.bind( "remove." + this.widgetName, function() {
++			self.destroy();
++		});
++
++		this._create();
++		this._trigger( "create" );
++		this._init();
++	},
++	_getCreateOptions: function() {
++		return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
++	},
++	_create: function() {},
++	_init: function() {},
++
++	destroy: function() {
++		this.element
++			.unbind( "." + this.widgetName )
++			.removeData( this.widgetName );
++		this.widget()
++			.unbind( "." + this.widgetName )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetBaseClass + "-disabled " +
++				"ui-state-disabled" );
++	},
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.extend( {}, this.options );
++		}
++
++		if  (typeof key === "string" ) {
++			if ( value === undefined ) {
++				return this.options[ key ];
++			}
++			options = {};
++			options[ key ] = value;
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var self = this;
++		$.each( options, function( key, value ) {
++			self._setOption( key, value );
++		});
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				[ value ? "addClass" : "removeClass"](
++					this.widgetBaseClass + "-disabled" + " " +
++					"ui-state-disabled" )
++				.attr( "aria-disabled", value );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_trigger: function( type, event, data ) {
++		var callback = this.options[ type ];
++
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		data = data || {};
++
++		// copy original event properties over to the new event
++		// this would happen if we could call $.event.fix instead of $.Event
++		// but we don't have a way to force an event to be fixed multiple times
++		if ( event.originalEvent ) {
++			for ( var i = $.event.props.length, prop; i; ) {
++				prop = $.event.props[ --i ];
++				event[ prop ] = event.originalEvent[ prop ];
++			}
++		}
++
++		this.element.trigger( event, data );
++
++		return !( $.isFunction(callback) &&
++			callback.call( this.element[0], event, data ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++})( jQuery );
++/*!
++ * jQuery UI Mouse 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Mouse
++ *
++ * Depends:
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.mouse", {
++	options: {
++		cancel: ':input,option',
++		distance: 1,
++		delay: 0
++	},
++	_mouseInit: function() {
++		var self = this;
++
++		this.element
++			.bind('mousedown.'+this.widgetName, function(event) {
++				return self._mouseDown(event);
++			})
++			.bind('click.'+this.widgetName, function(event) {
++				if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
++				    $.removeData(event.target, self.widgetName + '.preventClickEvent');
++					event.stopImmediatePropagation();
++					return false;
++				}
++			});
++
++		this.started = false;
++	},
++
++	// TODO: make sure destroying one instance of mouse doesn't mess with
++	// other instances of mouse
++	_mouseDestroy: function() {
++		this.element.unbind('.'+this.widgetName);
++	},
++
++	_mouseDown: function(event) {
++		// don't let more than one widget handle mouseStart
++		// TODO: figure out why we have to use originalEvent
++		event.originalEvent = event.originalEvent || {};
++		if (event.originalEvent.mouseHandled) { return; }
++
++		// we may have missed mouseup (out of window)
++		(this._mouseStarted && this._mouseUp(event));
++
++		this._mouseDownEvent = event;
++
++		var self = this,
++			btnIsLeft = (event.which == 1),
++			elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).closest(this.options.cancel).length : false);
++		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
++			return true;
++		}
++
++		this.mouseDelayMet = !this.options.delay;
++		if (!this.mouseDelayMet) {
++			this._mouseDelayTimer = setTimeout(function() {
++				self.mouseDelayMet = true;
++			}, this.options.delay);
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted = (this._mouseStart(event) !== false);
++			if (!this._mouseStarted) {
++				event.preventDefault();
++				return true;
++			}
++		}
++
++		// Click event may never have fired (Gecko & Opera)
++		if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
++			$.removeData(event.target, this.widgetName + '.preventClickEvent');
++		}
++
++		// these delegates are required to keep context
++		this._mouseMoveDelegate = function(event) {
++			return self._mouseMove(event);
++		};
++		this._mouseUpDelegate = function(event) {
++			return self._mouseUp(event);
++		};
++		$(document)
++			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
++			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
++
++		event.preventDefault();
++		event.originalEvent.mouseHandled = true;
++		return true;
++	},
++
++	_mouseMove: function(event) {
++		// IE mouseup check - mouseup happened when mouse was out of window
++		if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
++			return this._mouseUp(event);
++		}
++
++		if (this._mouseStarted) {
++			this._mouseDrag(event);
++			return event.preventDefault();
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted =
++				(this._mouseStart(this._mouseDownEvent, event) !== false);
++			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
++		}
++
++		return !this._mouseStarted;
++	},
++
++	_mouseUp: function(event) {
++		$(document)
++			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
++			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
++
++		if (this._mouseStarted) {
++			this._mouseStarted = false;
++
++			if (event.target == this._mouseDownEvent.target) {
++			    $.data(event.target, this.widgetName + '.preventClickEvent', true);
++			}
++
++			this._mouseStop(event);
++		}
++
++		return false;
++	},
++
++	_mouseDistanceMet: function(event) {
++		return (Math.max(
++				Math.abs(this._mouseDownEvent.pageX - event.pageX),
++				Math.abs(this._mouseDownEvent.pageY - event.pageY)
++			) >= this.options.distance
++		);
++	},
++
++	_mouseDelayMet: function(event) {
++		return this.mouseDelayMet;
++	},
++
++	// These are placeholder methods, to be overriden by extending plugin
++	_mouseStart: function(event) {},
++	_mouseDrag: function(event) {},
++	_mouseStop: function(event) {},
++	_mouseCapture: function(event) { return true; }
++});
++
++})(jQuery);
++/*
++ * jQuery UI Draggable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Draggables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.draggable", $.ui.mouse, {
++	widgetEventPrefix: "drag",
++	options: {
++		addClasses: true,
++		appendTo: "parent",
++		axis: false,
++		connectToSortable: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		iframeFix: false,
++		opacity: false,
++		refreshPositions: false,
++		revert: false,
++		revertDuration: 500,
++		scope: "default",
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		snap: false,
++		snapMode: "both",
++		snapTolerance: 20,
++		stack: false,
++		zIndex: false
++	},
++	_create: function() {
++
++		if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
++			this.element[0].style.position = 'relative';
++
++		(this.options.addClasses && this.element.addClass("ui-draggable"));
++		(this.options.disabled && this.element.addClass("ui-draggable-disabled"));
++
++		this._mouseInit();
++
++	},
++
++	destroy: function() {
++		if(!this.element.data('draggable')) return;
++		this.element
++			.removeData("draggable")
++			.unbind(".draggable")
++			.removeClass("ui-draggable"
++				+ " ui-draggable-dragging"
++				+ " ui-draggable-disabled");
++		this._mouseDestroy();
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++
++		var o = this.options;
++
++		// among others, prevent a drag on a resizable-handle
++		if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
++			return false;
++
++		//Quit if we're not on a valid handle
++		this.handle = this._getHandle(event);
++		if (!this.handle)
++			return false;
++		
++		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
++			$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
++			.css({
++				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
++				position: "absolute", opacity: "0.001", zIndex: 1000
++			})
++			.css($(this).offset())
++			.appendTo("body");
++		});
++
++		return true;
++
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options;
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		//If ddmanager is used for droppables, set the global draggable
++		if($.ui.ddmanager)
++			$.ui.ddmanager.current = this;
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Store the helper's css position
++		this.cssPosition = this.helper.css("position");
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.positionAbs = this.element.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this.position = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Set a containment if given in the options
++		if(o.containment)
++			this._setContainment();
++
++		//Trigger event + callbacks
++		if(this._trigger("start", event) === false) {
++			this._clear();
++			return false;
++		}
++
++		//Recache the helper size
++		this._cacheHelperProportions();
++
++		//Prepare the droppable offsets
++		if ($.ui.ddmanager && !o.dropBehaviour)
++			$.ui.ddmanager.prepareOffsets(this, event);
++
++		this.helper.addClass("ui-draggable-dragging");
++		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		
++		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
++		if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);
++		
++		return true;
++	},
++
++	_mouseDrag: function(event, noPropagation) {
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Call plugins and callbacks and use the resulting position if something is returned
++		if (!noPropagation) {
++			var ui = this._uiHash();
++			if(this._trigger('drag', event, ui) === false) {
++				this._mouseUp({});
++				return false;
++			}
++			this.position = ui.position;
++		}
++
++		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
++		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
++		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		//If we are using droppables, inform the manager about the drop
++		var dropped = false;
++		if ($.ui.ddmanager && !this.options.dropBehaviour)
++			dropped = $.ui.ddmanager.drop(this, event);
++
++		//if a drop comes from outside (a sortable)
++		if(this.dropped) {
++			dropped = this.dropped;
++			this.dropped = false;
++		}
++		
++		//if the original element is removed, don't bother to continue if helper is set to "original"
++		if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original")
++			return false;
++
++		if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
++			var self = this;
++			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
++				if(self._trigger("stop", event) !== false) {
++					self._clear();
++				}
++			});
++		} else {
++			if(this._trigger("stop", event) !== false) {
++				this._clear();
++			}
++		}
++
++		return false;
++	},
++	
++	_mouseUp: function(event) {
++		if (this.options.iframeFix === true) {
++			$("div.ui-draggable-iframeFix").each(function() { 
++				this.parentNode.removeChild(this); 
++			}); //Remove frame helpers
++		}
++		
++		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
++		if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);
++		
++		return $.ui.mouse.prototype._mouseUp.call(this, event);
++	},
++	
++	cancel: function() {
++		
++		if(this.helper.is(".ui-draggable-dragging")) {
++			this._mouseUp({});
++		} else {
++			this._clear();
++		}
++		
++		return this;
++		
++	},
++
++	_getHandle: function(event) {
++
++		var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
++		$(this.options.handle, this.element)
++			.find("*")
++			.andSelf()
++			.each(function() {
++				if(this == event.target) handle = true;
++			});
++
++		return handle;
++
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options;
++		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
++
++		if(!helper.parents('body').length)
++			helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
++
++		if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
++			helper.css("position", "absolute");
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj == 'string') {
++			obj = obj.split(' ');
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ('left' in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ('right' in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ('top' in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ('bottom' in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
++		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
++			po = { top: 0, left: 0 };
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition == "relative") {
++			var p = this.element.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.element.css("marginLeft"),10) || 0),
++			top: (parseInt(this.element.css("marginTop"),10) || 0),
++			right: (parseInt(this.element.css("marginRight"),10) || 0),
++			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var o = this.options;
++		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
++		if(o.containment == 'document' || o.containment == 'window') this.containment = [
++			o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
++			o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
++			(o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
++			(o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++		];
++
++		if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
++		        var c = $(o.containment);
++			var ce = c[0]; if(!ce) return;
++			var co = c.offset();
++			var over = ($(ce).css("overflow") != 'hidden');
++
++			this.containment = [
++				(parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
++				(parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
++				(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
++				(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top  - this.margins.bottom
++			];
++			this.relative_container = c;
++
++		} else if(o.containment.constructor == Array) {
++			this.containment = o.containment;
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) pos = this.position;
++		var mod = d == "absolute" ? 1 : -1;
++		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top																	// The absolute mouse position
++				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
++				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
++				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left																// The absolute mouse position
++				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
++				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
++				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++		var pageX = event.pageX;
++		var pageY = event.pageY;
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++		         var containment;
++		         if(this.containment) {
++				 if (this.relative_container){
++				     var co = this.relative_container.offset();
++				     containment = [ this.containment[0] + co.left,
++						     this.containment[1] + co.top,
++						     this.containment[2] + co.left,
++						     this.containment[3] + co.top ];
++				 }
++				 else {
++				     containment = this.containment;
++				 }
++
++				if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;
++				if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;
++				if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left;
++				if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top;
++			}
++
++			if(o.grid) {
++				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
++				var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
++				pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
++				pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY																// The absolute mouse position
++				- this.offset.click.top													// Click offset (relative to the element)
++				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
++				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
++				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX																// The absolute mouse position
++				- this.offset.click.left												// Click offset (relative to the element)
++				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
++				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
++				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_clear: function() {
++		this.helper.removeClass("ui-draggable-dragging");
++		if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
++		//if($.ui.ddmanager) $.ui.ddmanager.current = null;
++		this.helper = null;
++		this.cancelHelperRemoval = false;
++	},
++
++	// From now on bulk stuff - mainly helpers
++
++	_trigger: function(type, event, ui) {
++		ui = ui || this._uiHash();
++		$.ui.plugin.call(this, type, [event, ui]);
++		if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
++		return $.Widget.prototype._trigger.call(this, type, event, ui);
++	},
++
++	plugins: {},
++
++	_uiHash: function(event) {
++		return {
++			helper: this.helper,
++			position: this.position,
++			originalPosition: this.originalPosition,
++			offset: this.positionAbs
++		};
++	}
++
++});
++
++$.extend($.ui.draggable, {
++	version: "1.8.15"
++});
++
++$.ui.plugin.add("draggable", "connectToSortable", {
++	start: function(event, ui) {
++
++		var inst = $(this).data("draggable"), o = inst.options,
++			uiSortable = $.extend({}, ui, { item: inst.element });
++		inst.sortables = [];
++		$(o.connectToSortable).each(function() {
++			var sortable = $.data(this, 'sortable');
++			if (sortable && !sortable.options.disabled) {
++				inst.sortables.push({
++					instance: sortable,
++					shouldRevert: sortable.options.revert
++				});
++				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
++				sortable._trigger("activate", event, uiSortable);
++			}
++		});
++
++	},
++	stop: function(event, ui) {
++
++		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
++		var inst = $(this).data("draggable"),
++			uiSortable = $.extend({}, ui, { item: inst.element });
++
++		$.each(inst.sortables, function() {
++			if(this.instance.isOver) {
++
++				this.instance.isOver = 0;
++
++				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
++				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
++
++				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
++				if(this.shouldRevert) this.instance.options.revert = true;
++
++				//Trigger the stop of the sortable
++				this.instance._mouseStop(event);
++
++				this.instance.options.helper = this.instance.options._helper;
++
++				//If the helper has been the original item, restore properties in the sortable
++				if(inst.options.helper == 'original')
++					this.instance.currentItem.css({ top: 'auto', left: 'auto' });
++
++			} else {
++				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
++				this.instance._trigger("deactivate", event, uiSortable);
++			}
++
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("draggable"), self = this;
++
++		var checkPos = function(o) {
++			var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
++			var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
++			var itemHeight = o.height, itemWidth = o.width;
++			var itemTop = o.top, itemLeft = o.left;
++
++			return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
++		};
++
++		$.each(inst.sortables, function(i) {
++			
++			//Copy over some variables to allow calling the sortable's native _intersectsWith
++			this.instance.positionAbs = inst.positionAbs;
++			this.instance.helperProportions = inst.helperProportions;
++			this.instance.offset.click = inst.offset.click;
++			
++			if(this.instance._intersectsWith(this.instance.containerCache)) {
++
++				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
++				if(!this.instance.isOver) {
++
++					this.instance.isOver = 1;
++					//Now we fake the start of dragging for the sortable instance,
++					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
++					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
++					this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
++					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
++					this.instance.options.helper = function() { return ui.helper[0]; };
++
++					event.target = this.instance.currentItem[0];
++					this.instance._mouseCapture(event, true);
++					this.instance._mouseStart(event, true, true);
++
++					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
++					this.instance.offset.click.top = inst.offset.click.top;
++					this.instance.offset.click.left = inst.offset.click.left;
++					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
++					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
++
++					inst._trigger("toSortable", event);
++					inst.dropped = this.instance.element; //draggable revert needs that
++					//hack so receive/update callbacks work (mostly)
++					inst.currentItem = inst.element;
++					this.instance.fromOutside = inst;
++
++				}
++
++				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
++				if(this.instance.currentItem) this.instance._mouseDrag(event);
++
++			} else {
++
++				//If it doesn't intersect with the sortable, and it intersected before,
++				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
++				if(this.instance.isOver) {
++
++					this.instance.isOver = 0;
++					this.instance.cancelHelperRemoval = true;
++					
++					//Prevent reverting on this forced stop
++					this.instance.options.revert = false;
++					
++					// The out event needs to be triggered independently
++					this.instance._trigger('out', event, this.instance._uiHash(this.instance));
++					
++					this.instance._mouseStop(event, true);
++					this.instance.options.helper = this.instance.options._helper;
++
++					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
++					this.instance.currentItem.remove();
++					if(this.instance.placeholder) this.instance.placeholder.remove();
++
++					inst._trigger("fromSortable", event);
++					inst.dropped = false; //draggable revert needs that
++				}
++
++			};
++
++		});
++
++	}
++});
++
++$.ui.plugin.add("draggable", "cursor", {
++	start: function(event, ui) {
++		var t = $('body'), o = $(this).data('draggable').options;
++		if (t.css("cursor")) o._cursor = t.css("cursor");
++		t.css("cursor", o.cursor);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data('draggable').options;
++		if (o._cursor) $('body').css("cursor", o._cursor);
++	}
++});
++
++$.ui.plugin.add("draggable", "opacity", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data('draggable').options;
++		if(t.css("opacity")) o._opacity = t.css("opacity");
++		t.css('opacity', o.opacity);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data('draggable').options;
++		if(o._opacity) $(ui.helper).css('opacity', o._opacity);
++	}
++});
++
++$.ui.plugin.add("draggable", "scroll", {
++	start: function(event, ui) {
++		var i = $(this).data("draggable");
++		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
++	},
++	drag: function(event, ui) {
++
++		var i = $(this).data("draggable"), o = i.options, scrolled = false;
++
++		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
++
++			if(!o.axis || o.axis != 'x') {
++				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
++				else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
++			}
++
++			if(!o.axis || o.axis != 'y') {
++				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
++				else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
++			}
++
++		} else {
++
++			if(!o.axis || o.axis != 'x') {
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++			}
++
++			if(!o.axis || o.axis != 'y') {
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++			}
++
++		}
++
++		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
++			$.ui.ddmanager.prepareOffsets(i, event);
++
++	}
++});
++
++$.ui.plugin.add("draggable", "snap", {
++	start: function(event, ui) {
++
++		var i = $(this).data("draggable"), o = i.options;
++		i.snapElements = [];
++
++		$(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
++			var $t = $(this); var $o = $t.offset();
++			if(this != i.element[0]) i.snapElements.push({
++				item: this,
++				width: $t.outerWidth(), height: $t.outerHeight(),
++				top: $o.top, left: $o.left
++			});
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("draggable"), o = inst.options;
++		var d = o.snapTolerance;
++
++		var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
++			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
++
++		for (var i = inst.snapElements.length - 1; i >= 0; i--){
++
++			var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
++				t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
++
++			//Yes, I know, this is insane ;)
++			if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
++				if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++				inst.snapElements[i].snapping = false;
++				continue;
++			}
++
++			if(o.snapMode != 'inner') {
++				var ts = Math.abs(t - y2) <= d;
++				var bs = Math.abs(b - y1) <= d;
++				var ls = Math.abs(l - x2) <= d;
++				var rs = Math.abs(r - x1) <= d;
++				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
++				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
++				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
++			}
++
++			var first = (ts || bs || ls || rs);
++
++			if(o.snapMode != 'outer') {
++				var ts = Math.abs(t - y1) <= d;
++				var bs = Math.abs(b - y2) <= d;
++				var ls = Math.abs(l - x1) <= d;
++				var rs = Math.abs(r - x2) <= d;
++				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
++				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
++				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
++			}
++
++			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
++				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
++
++		};
++
++	}
++});
++
++$.ui.plugin.add("draggable", "stack", {
++	start: function(event, ui) {
++
++		var o = $(this).data("draggable").options;
++
++		var group = $.makeArray($(o.stack)).sort(function(a,b) {
++			return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
++		});
++		if (!group.length) { return; }
++		
++		var min = parseInt(group[0].style.zIndex) || 0;
++		$(group).each(function(i) {
++			this.style.zIndex = min + i;
++		});
++
++		this[0].style.zIndex = min + group.length;
++
++	}
++});
++
++$.ui.plugin.add("draggable", "zIndex", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("draggable").options;
++		if(t.css("zIndex")) o._zIndex = t.css("zIndex");
++		t.css('zIndex', o.zIndex);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("draggable").options;
++		if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
++	}
++});
++
++})(jQuery);
++/*
++ * jQuery UI Droppable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Droppables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.draggable.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.droppable", {
++	widgetEventPrefix: "drop",
++	options: {
++		accept: '*',
++		activeClass: false,
++		addClasses: true,
++		greedy: false,
++		hoverClass: false,
++		scope: 'default',
++		tolerance: 'intersect'
++	},
++	_create: function() {
++
++		var o = this.options, accept = o.accept;
++		this.isover = 0; this.isout = 1;
++
++		this.accept = $.isFunction(accept) ? accept : function(d) {
++			return d.is(accept);
++		};
++
++		//Store the droppable's proportions
++		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
++
++		// Add the reference and positions to the manager
++		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
++		$.ui.ddmanager.droppables[o.scope].push(this);
++
++		(o.addClasses && this.element.addClass("ui-droppable"));
++
++	},
++
++	destroy: function() {
++		var drop = $.ui.ddmanager.droppables[this.options.scope];
++		for ( var i = 0; i < drop.length; i++ )
++			if ( drop[i] == this )
++				drop.splice(i, 1);
++
++		this.element
++			.removeClass("ui-droppable ui-droppable-disabled")
++			.removeData("droppable")
++			.unbind(".droppable");
++
++		return this;
++	},
++
++	_setOption: function(key, value) {
++
++		if(key == 'accept') {
++			this.accept = $.isFunction(value) ? value : function(d) {
++				return d.is(value);
++			};
++		}
++		$.Widget.prototype._setOption.apply(this, arguments);
++	},
++
++	_activate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) this.element.addClass(this.options.activeClass);
++		(draggable && this._trigger('activate', event, this.ui(draggable)));
++	},
++
++	_deactivate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
++		(draggable && this._trigger('deactivate', event, this.ui(draggable)));
++	},
++
++	_over: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) this.element.addClass(this.options.hoverClass);
++			this._trigger('over', event, this.ui(draggable));
++		}
++
++	},
++
++	_out: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
++			this._trigger('out', event, this.ui(draggable));
++		}
++
++	},
++
++	_drop: function(event,custom) {
++
++		var draggable = custom || $.ui.ddmanager.current;
++		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element
++
++		var childrenIntersection = false;
++		this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() {
++			var inst = $.data(this, 'droppable');
++			if(
++				inst.options.greedy
++				&& !inst.options.disabled
++				&& inst.options.scope == draggable.options.scope
++				&& inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element))
++				&& $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
++			) { childrenIntersection = true; return false; }
++		});
++		if(childrenIntersection) return false;
++
++		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
++			if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
++			this._trigger('drop', event, this.ui(draggable));
++			return this.element;
++		}
++
++		return false;
++
++	},
++
++	ui: function(c) {
++		return {
++			draggable: (c.currentItem || c.element),
++			helper: c.helper,
++			position: c.position,
++			offset: c.positionAbs
++		};
++	}
++
++});
++
++$.extend($.ui.droppable, {
++	version: "1.8.15"
++});
++
++$.ui.intersect = function(draggable, droppable, toleranceMode) {
++
++	if (!droppable.offset) return false;
++
++	var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
++		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;
++	var l = droppable.offset.left, r = l + droppable.proportions.width,
++		t = droppable.offset.top, b = t + droppable.proportions.height;
++
++	switch (toleranceMode) {
++		case 'fit':
++			return (l <= x1 && x2 <= r
++				&& t <= y1 && y2 <= b);
++			break;
++		case 'intersect':
++			return (l < x1 + (draggable.helperProportions.width / 2) // Right Half
++				&& x2 - (draggable.helperProportions.width / 2) < r // Left Half
++				&& t < y1 + (draggable.helperProportions.height / 2) // Bottom Half
++				&& y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
++			break;
++		case 'pointer':
++			var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),
++				draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),
++				isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);
++			return isOver;
++			break;
++		case 'touch':
++			return (
++					(y1 >= t && y1 <= b) ||	// Top edge touching
++					(y2 >= t && y2 <= b) ||	// Bottom edge touching
++					(y1 < t && y2 > b)		// Surrounded vertically
++				) && (
++					(x1 >= l && x1 <= r) ||	// Left edge touching
++					(x2 >= l && x2 <= r) ||	// Right edge touching
++					(x1 < l && x2 > r)		// Surrounded horizontally
++				);
++			break;
++		default:
++			return false;
++			break;
++		}
++
++};
++
++/*
++	This manager tracks offsets of draggables and droppables
++*/
++$.ui.ddmanager = {
++	current: null,
++	droppables: { 'default': [] },
++	prepareOffsets: function(t, event) {
++
++		var m = $.ui.ddmanager.droppables[t.options.scope] || [];
++		var type = event ? event.type : null; // workaround for #2317
++		var list = (t.currentItem || t.element).find(":data(droppable)").andSelf();
++
++		droppablesLoop: for (var i = 0; i < m.length; i++) {
++
++			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue;	//No disabled and non-accepted
++			for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item
++			m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; 									//If the element is not visible, continue
++
++			if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables
++
++			m[i].offset = m[i].element.offset();
++			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
++
++		}
++
++	},
++	drop: function(draggable, event) {
++
++		var dropped = false;
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(!this.options) return;
++			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
++				dropped = dropped || this._drop.call(this, event);
++
++			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++				this.isout = 1; this.isover = 0;
++				this._deactivate.call(this, event);
++			}
++
++		});
++		return dropped;
++
++	},
++	dragStart: function( draggable, event ) {
++		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
++		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
++			if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
++		});
++	},
++	drag: function(draggable, event) {
++
++		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
++		if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);
++
++		//Run through all droppables and check their positions based on specific tolerance options
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(this.options.disabled || this.greedyChild || !this.visible) return;
++			var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
++
++			var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
++			if(!c) return;
++
++			var parentInstance;
++			if (this.options.greedy) {
++				var parent = this.element.parents(':data(droppable):eq(0)');
++				if (parent.length) {
++					parentInstance = $.data(parent[0], 'droppable');
++					parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
++				}
++			}
++
++			// we just moved into a greedy child
++			if (parentInstance && c == 'isover') {
++				parentInstance['isover'] = 0;
++				parentInstance['isout'] = 1;
++				parentInstance._out.call(parentInstance, event);
++			}
++
++			this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;
++			this[c == "isover" ? "_over" : "_out"].call(this, event);
++
++			// we just moved out of a greedy child
++			if (parentInstance && c == 'isout') {
++				parentInstance['isout'] = 0;
++				parentInstance['isover'] = 1;
++				parentInstance._over.call(parentInstance, event);
++			}
++		});
++
++	},
++	dragStop: function( draggable, event ) {
++		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
++		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
++		if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
++	}
++};
++
++})(jQuery);
++/*
++ * jQuery UI Resizable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Resizables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.resizable", $.ui.mouse, {
++	widgetEventPrefix: "resize",
++	options: {
++		alsoResize: false,
++		animate: false,
++		animateDuration: "slow",
++		animateEasing: "swing",
++		aspectRatio: false,
++		autoHide: false,
++		containment: false,
++		ghost: false,
++		grid: false,
++		handles: "e,s,se",
++		helper: false,
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 10,
++		minWidth: 10,
++		zIndex: 1000
++	},
++	_create: function() {
++
++		var self = this, o = this.options;
++		this.element.addClass("ui-resizable");
++
++		$.extend(this, {
++			_aspectRatio: !!(o.aspectRatio),
++			aspectRatio: o.aspectRatio,
++			originalElement: this.element,
++			_proportionallyResizeElements: [],
++			_helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
++		});
++
++		//Wrap the element if it cannot hold child nodes
++		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
++
++			//Opera fix for relative positioning
++			if (/relative/.test(this.element.css('position')) && $.browser.opera)
++				this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
++
++			//Create a wrapper element and set the wrapper to the new current internal element
++			this.element.wrap(
++				$('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
++					position: this.element.css('position'),
++					width: this.element.outerWidth(),
++					height: this.element.outerHeight(),
++					top: this.element.css('top'),
++					left: this.element.css('left')
++				})
++			);
++
++			//Overwrite the original this.element
++			this.element = this.element.parent().data(
++				"resizable", this.element.data('resizable')
++			);
++
++			this.elementIsWrapper = true;
++
++			//Move margins to the wrapper
++			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
++			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
++
++			//Prevent Safari textarea resize
++			this.originalResizeStyle = this.originalElement.css('resize');
++			this.originalElement.css('resize', 'none');
++
++			//Push the actual element to our proportionallyResize internal array
++			this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
++
++			// avoid IE jump (hard set the margin)
++			this.originalElement.css({ margin: this.originalElement.css('margin') });
++
++			// fix handlers offset
++			this._proportionallyResize();
++
++		}
++
++		this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
++		if(this.handles.constructor == String) {
++
++			if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
++			var n = this.handles.split(","); this.handles = {};
++
++			for(var i = 0; i < n.length; i++) {
++
++				var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
++				var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
++
++				// increase zIndex of sw, se, ne, nw axis
++				//TODO : this modifies original option
++				if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
++
++				//TODO : What's going on here?
++				if ('se' == handle) {
++					axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
++				};
++
++				//Insert into internal handles object and append to element
++				this.handles[handle] = '.ui-resizable-'+handle;
++				this.element.append(axis);
++			}
++
++		}
++
++		this._renderAxis = function(target) {
++
++			target = target || this.element;
++
++			for(var i in this.handles) {
++
++				if(this.handles[i].constructor == String)
++					this.handles[i] = $(this.handles[i], this.element).show();
++
++				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
++				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
++
++					var axis = $(this.handles[i], this.element), padWrapper = 0;
++
++					//Checking the correct pad and border
++					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
++
++					//The padding type i have to apply...
++					var padPos = [ 'padding',
++						/ne|nw|n/.test(i) ? 'Top' :
++						/se|sw|s/.test(i) ? 'Bottom' :
++						/^e$/.test(i) ? 'Right' : 'Left' ].join("");
++
++					target.css(padPos, padWrapper);
++
++					this._proportionallyResize();
++
++				}
++
++				//TODO: What's that good for? There's not anything to be executed left
++				if(!$(this.handles[i]).length)
++					continue;
++
++			}
++		};
++
++		//TODO: make renderAxis a prototype function
++		this._renderAxis(this.element);
++
++		this._handles = $('.ui-resizable-handle', this.element)
++			.disableSelection();
++
++		//Matching axis name
++		this._handles.mouseover(function() {
++			if (!self.resizing) {
++				if (this.className)
++					var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
++				//Axis, default = se
++				self.axis = axis && axis[1] ? axis[1] : 'se';
++			}
++		});
++
++		//If we want to auto hide the elements
++		if (o.autoHide) {
++			this._handles.hide();
++			$(this.element)
++				.addClass("ui-resizable-autohide")
++				.hover(function() {
++					if (o.disabled) return;
++					$(this).removeClass("ui-resizable-autohide");
++					self._handles.show();
++				},
++				function(){
++					if (o.disabled) return;
++					if (!self.resizing) {
++						$(this).addClass("ui-resizable-autohide");
++						self._handles.hide();
++					}
++				});
++		}
++
++		//Initialize the mouse interaction
++		this._mouseInit();
++
++	},
++
++	destroy: function() {
++
++		this._mouseDestroy();
++
++		var _destroy = function(exp) {
++			$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
++				.removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
++		};
++
++		//TODO: Unwrap at same DOM position
++		if (this.elementIsWrapper) {
++			_destroy(this.element);
++			var wrapper = this.element;
++			wrapper.after(
++				this.originalElement.css({
++					position: wrapper.css('position'),
++					width: wrapper.outerWidth(),
++					height: wrapper.outerHeight(),
++					top: wrapper.css('top'),
++					left: wrapper.css('left')
++				})
++			).remove();
++		}
++
++		this.originalElement.css('resize', this.originalResizeStyle);
++		_destroy(this.originalElement);
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++		var handle = false;
++		for (var i in this.handles) {
++			if ($(this.handles[i])[0] == event.target) {
++				handle = true;
++			}
++		}
++
++		return !this.options.disabled && handle;
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options, iniPos = this.element.position(), el = this.element;
++
++		this.resizing = true;
++		this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
++
++		// bugfix for http://dev.jquery.com/ticket/1749
++		if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
++			el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
++		}
++
++		//Opera fixing relative position
++		if ($.browser.opera && (/relative/).test(el.css('position')))
++			el.css({ position: 'relative', top: 'auto', left: 'auto' });
++
++		this._renderProxy();
++
++		var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
++
++		if (o.containment) {
++			curleft += $(o.containment).scrollLeft() || 0;
++			curtop += $(o.containment).scrollTop() || 0;
++		}
++
++		//Store needed variables
++		this.offset = this.helper.offset();
++		this.position = { left: curleft, top: curtop };
++		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalPosition = { left: curleft, top: curtop };
++		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
++		this.originalMousePosition = { left: event.pageX, top: event.pageY };
++
++		//Aspect Ratio
++		this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
++
++	    var cursor = $('.ui-resizable-' + this.axis).css('cursor');
++	    $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
++
++		el.addClass("ui-resizable-resizing");
++		this._propagate("start", event);
++		return true;
++	},
++
++	_mouseDrag: function(event) {
++
++		//Increase performance, avoid regex
++		var el = this.helper, o = this.options, props = {},
++			self = this, smp = this.originalMousePosition, a = this.axis;
++
++		var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
++		var trigger = this._change[a];
++		if (!trigger) return false;
++
++		// Calculate the attrs that will be change
++		var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
++
++		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
++		this._updateVirtualBoundaries(event.shiftKey);
++		if (this._aspectRatio || event.shiftKey)
++			data = this._updateRatio(data, event);
++
++		data = this._respectSize(data, event);
++
++		// plugins callbacks need to be called first
++		this._propagate("resize", event);
++
++		el.css({
++			top: this.position.top + "px", left: this.position.left + "px",
++			width: this.size.width + "px", height: this.size.height + "px"
++		});
++
++		if (!this._helper && this._proportionallyResizeElements.length)
++			this._proportionallyResize();
++
++		this._updateCache(data);
++
++		// calling the user callback at the end
++		this._trigger('resize', event, this.ui());
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		this.resizing = false;
++		var o = this.options, self = this;
++
++		if(this._helper) {
++			var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++				soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
++				soffsetw = ista ? 0 : self.sizeDiff.width;
++
++			var s = { width: (self.helper.width()  - soffsetw), height: (self.helper.height() - soffseth) },
++				left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
++				top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
++
++			if (!o.animate)
++				this.element.css($.extend(s, { top: top, left: left }));
++
++			self.helper.height(self.size.height);
++			self.helper.width(self.size.width);
++
++			if (this._helper && !o.animate) this._proportionallyResize();
++		}
++
++		$('body').css('cursor', 'auto');
++
++		this.element.removeClass("ui-resizable-resizing");
++
++		this._propagate("stop", event);
++
++		if (this._helper) this.helper.remove();
++		return false;
++
++	},
++
++    _updateVirtualBoundaries: function(forceAspectRatio) {
++        var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
++
++        b = {
++            minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
++            maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
++            minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
++            maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
++        };
++
++        if(this._aspectRatio || forceAspectRatio) {
++            // We want to create an enclosing box whose aspect ration is the requested one
++            // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
++            pMinWidth = b.minHeight * this.aspectRatio;
++            pMinHeight = b.minWidth / this.aspectRatio;
++            pMaxWidth = b.maxHeight * this.aspectRatio;
++            pMaxHeight = b.maxWidth / this.aspectRatio;
++
++            if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
++            if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
++            if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
++            if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
++        }
++        this._vBoundaries = b;
++    },
++
++	_updateCache: function(data) {
++		var o = this.options;
++		this.offset = this.helper.offset();
++		if (isNumber(data.left)) this.position.left = data.left;
++		if (isNumber(data.top)) this.position.top = data.top;
++		if (isNumber(data.height)) this.size.height = data.height;
++		if (isNumber(data.width)) this.size.width = data.width;
++	},
++
++	_updateRatio: function(data, event) {
++
++		var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
++
++		if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
++		else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
++
++		if (a == 'sw') {
++			data.left = cpos.left + (csize.width - data.width);
++			data.top = null;
++		}
++		if (a == 'nw') {
++			data.top = cpos.top + (csize.height - data.height);
++			data.left = cpos.left + (csize.width - data.width);
++		}
++
++		return data;
++	},
++
++	_respectSize: function(data, event) {
++
++		var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
++				ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
++					isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
++
++		if (isminw) data.width = o.minWidth;
++		if (isminh) data.height = o.minHeight;
++		if (ismaxw) data.width = o.maxWidth;
++		if (ismaxh) data.height = o.maxHeight;
++
++		var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
++		var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
++
++		if (isminw && cw) data.left = dw - o.minWidth;
++		if (ismaxw && cw) data.left = dw - o.maxWidth;
++		if (isminh && ch)	data.top = dh - o.minHeight;
++		if (ismaxh && ch)	data.top = dh - o.maxHeight;
++
++		// fixing jump error on top/left - bug #2330
++		var isNotwh = !data.width && !data.height;
++		if (isNotwh && !data.left && data.top) data.top = null;
++		else if (isNotwh && !data.top && data.left) data.left = null;
++
++		return data;
++	},
++
++	_proportionallyResize: function() {
++
++		var o = this.options;
++		if (!this._proportionallyResizeElements.length) return;
++		var element = this.helper || this.element;
++
++		for (var i=0; i < this._proportionallyResizeElements.length; i++) {
++
++			var prel = this._proportionallyResizeElements[i];
++
++			if (!this.borderDif) {
++				var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
++					p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
++
++				this.borderDif = $.map(b, function(v, i) {
++					var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
++					return border + padding;
++				});
++			}
++
++			if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
++				continue;
++
++			prel.css({
++				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
++				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
++			});
++
++		};
++
++	},
++
++	_renderProxy: function() {
++
++		var el = this.element, o = this.options;
++		this.elementOffset = el.offset();
++
++		if(this._helper) {
++
++			this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
++
++			// fix ie6 offset TODO: This seems broken
++			var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
++			pxyoffset = ( ie6 ? 2 : -1 );
++
++			this.helper.addClass(this._helper).css({
++				width: this.element.outerWidth() + pxyoffset,
++				height: this.element.outerHeight() + pxyoffset,
++				position: 'absolute',
++				left: this.elementOffset.left - ie6offset +'px',
++				top: this.elementOffset.top - ie6offset +'px',
++				zIndex: ++o.zIndex //TODO: Don't modify option
++			});
++
++			this.helper
++				.appendTo("body")
++				.disableSelection();
++
++		} else {
++			this.helper = this.element;
++		}
++
++	},
++
++	_change: {
++		e: function(event, dx, dy) {
++			return { width: this.originalSize.width + dx };
++		},
++		w: function(event, dx, dy) {
++			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
++			return { left: sp.left + dx, width: cs.width - dx };
++		},
++		n: function(event, dx, dy) {
++			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
++			return { top: sp.top + dy, height: cs.height - dy };
++		},
++		s: function(event, dx, dy) {
++			return { height: this.originalSize.height + dy };
++		},
++		se: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		sw: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		},
++		ne: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		nw: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		}
++	},
++
++	_propagate: function(n, event) {
++		$.ui.plugin.call(this, n, [event, this.ui()]);
++		(n != "resize" && this._trigger(n, event, this.ui()));
++	},
++
++	plugins: {},
++
++	ui: function() {
++		return {
++			originalElement: this.originalElement,
++			element: this.element,
++			helper: this.helper,
++			position: this.position,
++			size: this.size,
++			originalSize: this.originalSize,
++			originalPosition: this.originalPosition
++		};
++	}
++
++});
++
++$.extend($.ui.resizable, {
++	version: "1.8.15"
++});
++
++/*
++ * Resizable Extensions
++ */
++
++$.ui.plugin.add("resizable", "alsoResize", {
++
++	start: function (event, ui) {
++		var self = $(this).data("resizable"), o = self.options;
++
++		var _store = function (exp) {
++			$(exp).each(function() {
++				var el = $(this);
++				el.data("resizable-alsoresize", {
++					width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
++					left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10),
++					position: el.css('position') // to reset Opera on stop()
++				});
++			});
++		};
++
++		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
++			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
++			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
++		}else{
++			_store(o.alsoResize);
++		}
++	},
++
++	resize: function (event, ui) {
++		var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
++
++		var delta = {
++			height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
++			top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
++		},
++
++		_alsoResize = function (exp, c) {
++			$(exp).each(function() {
++				var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, 
++					css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
++
++				$.each(css, function (i, prop) {
++					var sum = (start[prop]||0) + (delta[prop]||0);
++					if (sum && sum >= 0)
++						style[prop] = sum || null;
++				});
++
++				// Opera fixing relative position
++				if ($.browser.opera && /relative/.test(el.css('position'))) {
++					self._revertToRelativePosition = true;
++					el.css({ position: 'absolute', top: 'auto', left: 'auto' });
++				}
++
++				el.css(style);
++			});
++		};
++
++		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
++			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
++		}else{
++			_alsoResize(o.alsoResize);
++		}
++	},
++
++	stop: function (event, ui) {
++		var self = $(this).data("resizable"), o = self.options;
++
++		var _reset = function (exp) {
++			$(exp).each(function() {
++				var el = $(this);
++				// reset position for Opera - no need to verify it was changed
++				el.css({ position: el.data("resizable-alsoresize").position });
++			});
++		};
++
++		if (self._revertToRelativePosition) {
++			self._revertToRelativePosition = false;
++			if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
++				$.each(o.alsoResize, function (exp) { _reset(exp); });
++			}else{
++				_reset(o.alsoResize);
++			}
++		}
++
++		$(this).removeData("resizable-alsoresize");
++	}
++});
++
++$.ui.plugin.add("resizable", "animate", {
++
++	stop: function(event, ui) {
++		var self = $(this).data("resizable"), o = self.options;
++
++		var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++					soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
++						soffsetw = ista ? 0 : self.sizeDiff.width;
++
++		var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
++					left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
++						top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
++
++		self.element.animate(
++			$.extend(style, top && left ? { top: top, left: left } : {}), {
++				duration: o.animateDuration,
++				easing: o.animateEasing,
++				step: function() {
++
++					var data = {
++						width: parseInt(self.element.css('width'), 10),
++						height: parseInt(self.element.css('height'), 10),
++						top: parseInt(self.element.css('top'), 10),
++						left: parseInt(self.element.css('left'), 10)
++					};
++
++					if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
++
++					// propagating resize, and updating values for each animation step
++					self._updateCache(data);
++					self._propagate("resize", event);
++
++				}
++			}
++		);
++	}
++
++});
++
++$.ui.plugin.add("resizable", "containment", {
++
++	start: function(event, ui) {
++		var self = $(this).data("resizable"), o = self.options, el = self.element;
++		var oc = o.containment,	ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
++		if (!ce) return;
++
++		self.containerElement = $(ce);
++
++		if (/document/.test(oc) || oc == document) {
++			self.containerOffset = { left: 0, top: 0 };
++			self.containerPosition = { left: 0, top: 0 };
++
++			self.parentData = {
++				element: $(document), left: 0, top: 0,
++				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
++			};
++		}
++
++		// i'm a node, so compute top, left, right, bottom
++		else {
++			var element = $(ce), p = [];
++			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
++
++			self.containerOffset = element.offset();
++			self.containerPosition = element.position();
++			self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
++
++			var co = self.containerOffset, ch = self.containerSize.height,	cw = self.containerSize.width,
++						width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
++
++			self.parentData = {
++				element: ce, left: co.left, top: co.top, width: width, height: height
++			};
++		}
++	},
++
++	resize: function(event, ui) {
++		var self = $(this).data("resizable"), o = self.options,
++				ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
++				pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
++
++		if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
++
++		if (cp.left < (self._helper ? co.left : 0)) {
++			self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
++			if (pRatio) self.size.height = self.size.width / o.aspectRatio;
++			self.position.left = o.helper ? co.left : 0;
++		}
++
++		if (cp.top < (self._helper ? co.top : 0)) {
++			self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
++			if (pRatio) self.size.width = self.size.height * o.aspectRatio;
++			self.position.top = self._helper ? co.top : 0;
++		}
++
++		self.offset.left = self.parentData.left+self.position.left;
++		self.offset.top = self.parentData.top+self.position.top;
++
++		var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
++					hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
++
++		var isParent = self.containerElement.get(0) == self.element.parent().get(0),
++		    isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
++
++		if(isParent && isOffsetRelative) woset -= self.parentData.left;
++
++		if (woset + self.size.width >= self.parentData.width) {
++			self.size.width = self.parentData.width - woset;
++			if (pRatio) self.size.height = self.size.width / self.aspectRatio;
++		}
++
++		if (hoset + self.size.height >= self.parentData.height) {
++			self.size.height = self.parentData.height - hoset;
++			if (pRatio) self.size.width = self.size.height * self.aspectRatio;
++		}
++	},
++
++	stop: function(event, ui){
++		var self = $(this).data("resizable"), o = self.options, cp = self.position,
++				co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
++
++		var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
++
++		if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++
++		if (self._helper && !o.animate && (/static/).test(ce.css('position')))
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++
++	}
++});
++
++$.ui.plugin.add("resizable", "ghost", {
++
++	start: function(event, ui) {
++
++		var self = $(this).data("resizable"), o = self.options, cs = self.size;
++
++		self.ghost = self.originalElement.clone();
++		self.ghost
++			.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
++			.addClass('ui-resizable-ghost')
++			.addClass(typeof o.ghost == 'string' ? o.ghost : '');
++
++		self.ghost.appendTo(self.helper);
++
++	},
++
++	resize: function(event, ui){
++		var self = $(this).data("resizable"), o = self.options;
++		if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
++	},
++
++	stop: function(event, ui){
++		var self = $(this).data("resizable"), o = self.options;
++		if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
++	}
++
++});
++
++$.ui.plugin.add("resizable", "grid", {
++
++	resize: function(event, ui) {
++		var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
++		o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
++		var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
++
++		if (/^(se|s|e)$/.test(a)) {
++			self.size.width = os.width + ox;
++			self.size.height = os.height + oy;
++		}
++		else if (/^(ne)$/.test(a)) {
++			self.size.width = os.width + ox;
++			self.size.height = os.height + oy;
++			self.position.top = op.top - oy;
++		}
++		else if (/^(sw)$/.test(a)) {
++			self.size.width = os.width + ox;
++			self.size.height = os.height + oy;
++			self.position.left = op.left - ox;
++		}
++		else {
++			self.size.width = os.width + ox;
++			self.size.height = os.height + oy;
++			self.position.top = op.top - oy;
++			self.position.left = op.left - ox;
++		}
++	}
++
++});
++
++var num = function(v) {
++	return parseInt(v, 10) || 0;
++};
++
++var isNumber = function(value) {
++	return !isNaN(parseInt(value, 10));
++};
++
++})(jQuery);
++/*
++ * jQuery UI Selectable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Selectables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.selectable", $.ui.mouse, {
++	options: {
++		appendTo: 'body',
++		autoRefresh: true,
++		distance: 0,
++		filter: '*',
++		tolerance: 'touch'
++	},
++	_create: function() {
++		var self = this;
++
++		this.element.addClass("ui-selectable");
++
++		this.dragged = false;
++
++		// cache selectee children based on filter
++		var selectees;
++		this.refresh = function() {
++			selectees = $(self.options.filter, self.element[0]);
++			selectees.each(function() {
++				var $this = $(this);
++				var pos = $this.offset();
++				$.data(this, "selectable-item", {
++					element: this,
++					$element: $this,
++					left: pos.left,
++					top: pos.top,
++					right: pos.left + $this.outerWidth(),
++					bottom: pos.top + $this.outerHeight(),
++					startselected: false,
++					selected: $this.hasClass('ui-selected'),
++					selecting: $this.hasClass('ui-selecting'),
++					unselecting: $this.hasClass('ui-unselecting')
++				});
++			});
++		};
++		this.refresh();
++
++		this.selectees = selectees.addClass("ui-selectee");
++
++		this._mouseInit();
++
++		this.helper = $("<div class='ui-selectable-helper'></div>");
++	},
++
++	destroy: function() {
++		this.selectees
++			.removeClass("ui-selectee")
++			.removeData("selectable-item");
++		this.element
++			.removeClass("ui-selectable ui-selectable-disabled")
++			.removeData("selectable")
++			.unbind(".selectable");
++		this._mouseDestroy();
++
++		return this;
++	},
++
++	_mouseStart: function(event) {
++		var self = this;
++
++		this.opos = [event.pageX, event.pageY];
++
++		if (this.options.disabled)
++			return;
++
++		var options = this.options;
++
++		this.selectees = $(options.filter, this.element[0]);
++
++		this._trigger("start", event);
++
++		$(options.appendTo).append(this.helper);
++		// position helper (lasso)
++		this.helper.css({
++			"left": event.clientX,
++			"top": event.clientY,
++			"width": 0,
++			"height": 0
++		});
++
++		if (options.autoRefresh) {
++			this.refresh();
++		}
++
++		this.selectees.filter('.ui-selected').each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.startselected = true;
++			if (!event.metaKey) {
++				selectee.$element.removeClass('ui-selected');
++				selectee.selected = false;
++				selectee.$element.addClass('ui-unselecting');
++				selectee.unselecting = true;
++				// selectable UNSELECTING callback
++				self._trigger("unselecting", event, {
++					unselecting: selectee.element
++				});
++			}
++		});
++
++		$(event.target).parents().andSelf().each(function() {
++			var selectee = $.data(this, "selectable-item");
++			if (selectee) {
++				var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected');
++				selectee.$element
++					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
++					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
++				selectee.unselecting = !doSelect;
++				selectee.selecting = doSelect;
++				selectee.selected = doSelect;
++				// selectable (UN)SELECTING callback
++				if (doSelect) {
++					self._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				} else {
++					self._trigger("unselecting", event, {
++						unselecting: selectee.element
++					});
++				}
++				return false;
++			}
++		});
++
++	},
++
++	_mouseDrag: function(event) {
++		var self = this;
++		this.dragged = true;
++
++		if (this.options.disabled)
++			return;
++
++		var options = this.options;
++
++		var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
++		if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
++		if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
++		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
++
++		this.selectees.each(function() {
++			var selectee = $.data(this, "selectable-item");
++			//prevent helper from being selected if appendTo: selectable
++			if (!selectee || selectee.element == self.element[0])
++				return;
++			var hit = false;
++			if (options.tolerance == 'touch') {
++				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
++			} else if (options.tolerance == 'fit') {
++				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
++			}
++
++			if (hit) {
++				// SELECT
++				if (selectee.selected) {
++					selectee.$element.removeClass('ui-selected');
++					selectee.selected = false;
++				}
++				if (selectee.unselecting) {
++					selectee.$element.removeClass('ui-unselecting');
++					selectee.unselecting = false;
++				}
++				if (!selectee.selecting) {
++					selectee.$element.addClass('ui-selecting');
++					selectee.selecting = true;
++					// selectable SELECTING callback
++					self._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				}
++			} else {
++				// UNSELECT
++				if (selectee.selecting) {
++					if (event.metaKey && selectee.startselected) {
++						selectee.$element.removeClass('ui-selecting');
++						selectee.selecting = false;
++						selectee.$element.addClass('ui-selected');
++						selectee.selected = true;
++					} else {
++						selectee.$element.removeClass('ui-selecting');
++						selectee.selecting = false;
++						if (selectee.startselected) {
++							selectee.$element.addClass('ui-unselecting');
++							selectee.unselecting = true;
++						}
++						// selectable UNSELECTING callback
++						self._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++				if (selectee.selected) {
++					if (!event.metaKey && !selectee.startselected) {
++						selectee.$element.removeClass('ui-selected');
++						selectee.selected = false;
++
++						selectee.$element.addClass('ui-unselecting');
++						selectee.unselecting = true;
++						// selectable UNSELECTING callback
++						self._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++			}
++		});
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++		var self = this;
++
++		this.dragged = false;
++
++		var options = this.options;
++
++		$('.ui-unselecting', this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass('ui-unselecting');
++			selectee.unselecting = false;
++			selectee.startselected = false;
++			self._trigger("unselected", event, {
++				unselected: selectee.element
++			});
++		});
++		$('.ui-selecting', this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
++			selectee.selecting = false;
++			selectee.selected = true;
++			selectee.startselected = true;
++			self._trigger("selected", event, {
++				selected: selectee.element
++			});
++		});
++		this._trigger("stop", event);
++
++		this.helper.remove();
++
++		return false;
++	}
++
++});
++
++$.extend($.ui.selectable, {
++	version: "1.8.15"
++});
++
++})(jQuery);
++/*
++ * jQuery UI Sortable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Sortables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.sortable", $.ui.mouse, {
++	widgetEventPrefix: "sort",
++	options: {
++		appendTo: "parent",
++		axis: false,
++		connectWith: false,
++		containment: false,
++		cursor: 'auto',
++		cursorAt: false,
++		dropOnEmpty: true,
++		forcePlaceholderSize: false,
++		forceHelperSize: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		items: '> *',
++		opacity: false,
++		placeholder: false,
++		revert: false,
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		scope: "default",
++		tolerance: "intersect",
++		zIndex: 1000
++	},
++	_create: function() {
++
++		var o = this.options;
++		this.containerCache = {};
++		this.element.addClass("ui-sortable");
++
++		//Get the items
++		this.refresh();
++
++		//Let's determine if the items are being displayed horizontally
++		this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
++
++		//Let's determine the parent's offset
++		this.offset = this.element.offset();
++
++		//Initialize mouse events for interaction
++		this._mouseInit();
++
++	},
++
++	destroy: function() {
++		this.element
++			.removeClass("ui-sortable ui-sortable-disabled")
++			.removeData("sortable")
++			.unbind(".sortable");
++		this._mouseDestroy();
++
++		for ( var i = this.items.length - 1; i >= 0; i-- )
++			this.items[i].item.removeData("sortable-item");
++
++		return this;
++	},
++
++	_setOption: function(key, value){
++		if ( key === "disabled" ) {
++			this.options[ key ] = value;
++	
++			this.widget()
++				[ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" );
++		} else {
++			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
++			$.Widget.prototype._setOption.apply(this, arguments);
++		}
++	},
++
++	_mouseCapture: function(event, overrideHandle) {
++
++		if (this.reverting) {
++			return false;
++		}
++
++		if(this.options.disabled || this.options.type == 'static') return false;
++
++		//We have to refresh the items data once first
++		this._refreshItems(event);
++
++		//Find out if the clicked node (or one of its parents) is a actual item in this.items
++		var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
++			if($.data(this, 'sortable-item') == self) {
++				currentItem = $(this);
++				return false;
++			}
++		});
++		if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target);
++
++		if(!currentItem) return false;
++		if(this.options.handle && !overrideHandle) {
++			var validHandle = false;
++
++			$(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
++			if(!validHandle) return false;
++		}
++
++		this.currentItem = currentItem;
++		this._removeCurrentsFromItems();
++		return true;
++
++	},
++
++	_mouseStart: function(event, overrideHandle, noActivation) {
++
++		var o = this.options, self = this;
++		this.currentContainer = this;
++
++		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
++		this.refreshPositions();
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Get the next scrolling parent
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.currentItem.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		// Only after we got the offset, we can change the helper's position to absolute
++		// TODO: Still need to figure out a way to make relative sorting possible
++		this.helper.css("position", "absolute");
++		this.cssPosition = this.helper.css("position");
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Cache the former DOM position
++		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
++
++		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
++		if(this.helper[0] != this.currentItem[0]) {
++			this.currentItem.hide();
++		}
++
++		//Create the placeholder
++		this._createPlaceholder();
++
++		//Set a containment if given in the options
++		if(o.containment)
++			this._setContainment();
++
++		if(o.cursor) { // cursor option
++			if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor");
++			$('body').css("cursor", o.cursor);
++		}
++
++		if(o.opacity) { // opacity option
++			if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity");
++			this.helper.css("opacity", o.opacity);
++		}
++
++		if(o.zIndex) { // zIndex option
++			if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex");
++			this.helper.css("zIndex", o.zIndex);
++		}
++
++		//Prepare scrolling
++		if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
++			this.overflowOffset = this.scrollParent.offset();
++
++		//Call callbacks
++		this._trigger("start", event, this._uiHash());
++
++		//Recache the helper size
++		if(!this._preserveHelperProportions)
++			this._cacheHelperProportions();
++
++
++		//Post 'activate' events to possible containers
++		if(!noActivation) {
++			 for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); }
++		}
++
++		//Prepare possible droppables
++		if($.ui.ddmanager)
++			$.ui.ddmanager.current = this;
++
++		if ($.ui.ddmanager && !o.dropBehaviour)
++			$.ui.ddmanager.prepareOffsets(this, event);
++
++		this.dragging = true;
++
++		this.helper.addClass("ui-sortable-helper");
++		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		return true;
++
++	},
++
++	_mouseDrag: function(event) {
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		if (!this.lastPositionAbs) {
++			this.lastPositionAbs = this.positionAbs;
++		}
++
++		//Do scrolling
++		if(this.options.scroll) {
++			var o = this.options, scrolled = false;
++			if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
++
++				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
++				else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
++
++				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
++				else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
++
++			} else {
++
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++
++			}
++
++			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
++				$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++		//Regenerate the absolute position used for position checks
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Set the helper position
++		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
++		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
++
++		//Rearrange
++		for (var i = this.items.length - 1; i >= 0; i--) {
++
++			//Cache variables and intersection, continue if no intersection
++			var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
++			if (!intersection) continue;
++
++			if(itemElement != this.currentItem[0] //cannot intersect with itself
++				&&	this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
++				&&	!$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
++				&& (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
++				//&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
++			) {
++
++				this.direction = intersection == 1 ? "down" : "up";
++
++				if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
++					this._rearrange(event, item);
++				} else {
++					break;
++				}
++
++				this._trigger("change", event, this._uiHash());
++				break;
++			}
++		}
++
++		//Post events to containers
++		this._contactContainers(event);
++
++		//Interconnect with droppables
++		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
++
++		//Call callbacks
++		this._trigger('sort', event, this._uiHash());
++
++		this.lastPositionAbs = this.positionAbs;
++		return false;
++
++	},
++
++	_mouseStop: function(event, noPropagation) {
++
++		if(!event) return;
++
++		//If we are using droppables, inform the manager about the drop
++		if ($.ui.ddmanager && !this.options.dropBehaviour)
++			$.ui.ddmanager.drop(this, event);
++
++		if(this.options.revert) {
++			var self = this;
++			var cur = self.placeholder.offset();
++
++			self.reverting = true;
++
++			$(this.helper).animate({
++				left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
++				top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
++			}, parseInt(this.options.revert, 10) || 500, function() {
++				self._clear(event);
++			});
++		} else {
++			this._clear(event, noPropagation);
++		}
++
++		return false;
++
++	},
++
++	cancel: function() {
++
++		var self = this;
++
++		if(this.dragging) {
++
++			this._mouseUp({ target: null });
++
++			if(this.options.helper == "original")
++				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++			else
++				this.currentItem.show();
++
++			//Post deactivating events to containers
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				this.containers[i]._trigger("deactivate", null, self._uiHash(this));
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", null, self._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		if (this.placeholder) {
++			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++			if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++			if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
++
++			$.extend(this, {
++				helper: null,
++				dragging: false,
++				reverting: false,
++				_noFinalSort: null
++			});
++
++			if(this.domPosition.prev) {
++				$(this.domPosition.prev).after(this.currentItem);
++			} else {
++				$(this.domPosition.parent).prepend(this.currentItem);
++			}
++		}
++
++		return this;
++
++	},
++
++	serialize: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected);
++		var str = []; o = o || {};
++
++		$(items).each(function() {
++			var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
++			if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
++		});
++
++		if(!str.length && o.key) {
++			str.push(o.key + '=');
++		}
++
++		return str.join('&');
++
++	},
++
++	toArray: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected);
++		var ret = []; o = o || {};
++
++		items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
++		return ret;
++
++	},
++
++	/* Be careful with the following core functions */
++	_intersectsWith: function(item) {
++
++		var x1 = this.positionAbs.left,
++			x2 = x1 + this.helperProportions.width,
++			y1 = this.positionAbs.top,
++			y2 = y1 + this.helperProportions.height;
++
++		var l = item.left,
++			r = l + item.width,
++			t = item.top,
++			b = t + item.height;
++
++		var dyClick = this.offset.click.top,
++			dxClick = this.offset.click.left;
++
++		var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
++
++		if(	   this.options.tolerance == "pointer"
++			|| this.options.forcePointerForContainers
++			|| (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
++		) {
++			return isOverElement;
++		} else {
++
++			return (l < x1 + (this.helperProportions.width / 2) // Right Half
++				&& x2 - (this.helperProportions.width / 2) < r // Left Half
++				&& t < y1 + (this.helperProportions.height / 2) // Bottom Half
++				&& y2 - (this.helperProportions.height / 2) < b ); // Top Half
++
++		}
++	},
++
++	_intersectsWithPointer: function(item) {
++
++		var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
++			isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
++			isOverElement = isOverElementHeight && isOverElementWidth,
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (!isOverElement)
++			return false;
++
++		return this.floating ?
++			( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
++			: ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );
++
++	},
++
++	_intersectsWithSides: function(item) {
++
++		var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
++			isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (this.floating && horizontalDirection) {
++			return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
++		} else {
++			return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
++		}
++
++	},
++
++	_getDragVerticalDirection: function() {
++		var delta = this.positionAbs.top - this.lastPositionAbs.top;
++		return delta != 0 && (delta > 0 ? "down" : "up");
++	},
++
++	_getDragHorizontalDirection: function() {
++		var delta = this.positionAbs.left - this.lastPositionAbs.left;
++		return delta != 0 && (delta > 0 ? "right" : "left");
++	},
++
++	refresh: function(event) {
++		this._refreshItems(event);
++		this.refreshPositions();
++		return this;
++	},
++
++	_connectWith: function() {
++		var options = this.options;
++		return options.connectWith.constructor == String
++			? [options.connectWith]
++			: options.connectWith;
++	},
++	
++	_getItemsAsjQuery: function(connected) {
++
++		var self = this;
++		var items = [];
++		var queries = [];
++		var connectWith = this._connectWith();
++
++		if(connectWith && connected) {
++			for (var i = connectWith.length - 1; i >= 0; i--){
++				var cur = $(connectWith[i]);
++				for (var j = cur.length - 1; j >= 0; j--){
++					var inst = $.data(cur[j], 'sortable');
++					if(inst && inst != this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]);
++					}
++				};
++			};
++		}
++
++		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]);
++
++		for (var i = queries.length - 1; i >= 0; i--){
++			queries[i][0].each(function() {
++				items.push(this);
++			});
++		};
++
++		return $(items);
++
++	},
++
++	_removeCurrentsFromItems: function() {
++
++		var list = this.currentItem.find(":data(sortable-item)");
++
++		for (var i=0; i < this.items.length; i++) {
++
++			for (var j=0; j < list.length; j++) {
++				if(list[j] == this.items[i].item[0])
++					this.items.splice(i,1);
++			};
++
++		};
++
++	},
++
++	_refreshItems: function(event) {
++
++		this.items = [];
++		this.containers = [this];
++		var items = this.items;
++		var self = this;
++		var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
++		var connectWith = this._connectWith();
++
++		if(connectWith) {
++			for (var i = connectWith.length - 1; i >= 0; i--){
++				var cur = $(connectWith[i]);
++				for (var j = cur.length - 1; j >= 0; j--){
++					var inst = $.data(cur[j], 'sortable');
++					if(inst && inst != this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
++						this.containers.push(inst);
++					}
++				};
++			};
++		}
++
++		for (var i = queries.length - 1; i >= 0; i--) {
++			var targetData = queries[i][1];
++			var _queries = queries[i][0];
++
++			for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
++				var item = $(_queries[j]);
++
++				item.data('sortable-item', targetData); // Data for target checking (mouse manager)
++
++				items.push({
++					item: item,
++					instance: targetData,
++					width: 0, height: 0,
++					left: 0, top: 0
++				});
++			};
++		};
++
++	},
++
++	refreshPositions: function(fast) {
++
++		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
++		if(this.offsetParent && this.helper) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		for (var i = this.items.length - 1; i >= 0; i--){
++			var item = this.items[i];
++
++			//We ignore calculating positions of all connected containers when we're not over them
++			if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
++				continue;
++
++			var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
++
++			if (!fast) {
++				item.width = t.outerWidth();
++				item.height = t.outerHeight();
++			}
++
++			var p = t.offset();
++			item.left = p.left;
++			item.top = p.top;
++		};
++
++		if(this.options.custom && this.options.custom.refreshContainers) {
++			this.options.custom.refreshContainers.call(this);
++		} else {
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				var p = this.containers[i].element.offset();
++				this.containers[i].containerCache.left = p.left;
++				this.containers[i].containerCache.top = p.top;
++				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
++				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
++			};
++		}
++
++		return this;
++	},
++
++	_createPlaceholder: function(that) {
++
++		var self = that || this, o = self.options;
++
++		if(!o.placeholder || o.placeholder.constructor == String) {
++			var className = o.placeholder;
++			o.placeholder = {
++				element: function() {
++
++					var el = $(document.createElement(self.currentItem[0].nodeName))
++						.addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
++						.removeClass("ui-sortable-helper")[0];
++
++					if(!className)
++						el.style.visibility = "hidden";
++
++					return el;
++				},
++				update: function(container, p) {
++
++					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
++					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
++					if(className && !o.forcePlaceholderSize) return;
++
++					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
++					if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
++					if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
++				}
++			};
++		}
++
++		//Create the placeholder
++		self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
++
++		//Append it after the actual current item
++		self.currentItem.after(self.placeholder);
++
++		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
++		o.placeholder.update(self, self.placeholder);
++
++	},
++
++	_contactContainers: function(event) {
++		
++		// get innermost container that intersects with item 
++		var innermostContainer = null, innermostIndex = null;		
++		
++		
++		for (var i = this.containers.length - 1; i >= 0; i--){
++
++			// never consider a container that's located within the item itself 
++			if($.ui.contains(this.currentItem[0], this.containers[i].element[0]))
++				continue;
++
++			if(this._intersectsWith(this.containers[i].containerCache)) {
++
++				// if we've already found a container and it's more "inner" than this, then continue 
++				if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0]))
++					continue;
++
++				innermostContainer = this.containers[i]; 
++				innermostIndex = i;
++					
++			} else {
++				// container doesn't intersect. trigger "out" event if necessary 
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", event, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++		
++		// if no intersecting containers found, return 
++		if(!innermostContainer) return; 
++
++		// move the item into the container if it's not there already
++		if(this.containers.length === 1) {
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++			this.containers[innermostIndex].containerCache.over = 1;
++		} else if(this.currentContainer != this.containers[innermostIndex]) { 
++
++			//When entering a new container, we will find the item with the least distance and append our item near it 
++			var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; 
++			for (var j = this.items.length - 1; j >= 0; j--) { 
++				if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; 
++				var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; 
++				if(Math.abs(cur - base) < dist) { 
++					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; 
++				} 
++			} 
++
++			if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled 
++				return; 
++
++			this.currentContainer = this.containers[innermostIndex]; 
++			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); 
++			this._trigger("change", event, this._uiHash()); 
++			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); 
++
++			//Update the placeholder 
++			this.options.placeholder.update(this.currentContainer, this.placeholder); 
++		
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); 
++			this.containers[innermostIndex].containerCache.over = 1;
++		} 
++	
++		
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options;
++		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
++
++		if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
++			$(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
++
++		if(helper[0] == this.currentItem[0])
++			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
++
++		if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
++		if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj == 'string') {
++			obj = obj.split(' ');
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ('left' in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ('right' in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ('top' in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ('bottom' in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
++		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
++			po = { top: 0, left: 0 };
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition == "relative") {
++			var p = this.currentItem.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
++			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var o = this.options;
++		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
++		if(o.containment == 'document' || o.containment == 'window') this.containment = [
++			0 - this.offset.relative.left - this.offset.parent.left,
++			0 - this.offset.relative.top - this.offset.parent.top,
++			$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
++			($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++		];
++
++		if(!(/^(document|window|parent)$/).test(o.containment)) {
++			var ce = $(o.containment)[0];
++			var co = $(o.containment).offset();
++			var over = ($(ce).css("overflow") != 'hidden');
++
++			this.containment = [
++				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
++				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
++				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
++				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) pos = this.position;
++		var mod = d == "absolute" ? 1 : -1;
++		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top																	// The absolute mouse position
++				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
++				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
++				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left																// The absolute mouse position
++				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
++				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
++				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		// This is another very weird special case that only happens for relative elements:
++		// 1. If the css position is relative
++		// 2. and the scroll parent is the document or similar to the offset parent
++		// we have to refresh the relative offset during the scroll so there are no jumps
++		if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
++			this.offset.relative = this._getRelativeOffset();
++		}
++
++		var pageX = event.pageX;
++		var pageY = event.pageY;
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++
++			if(this.containment) {
++				if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
++				if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
++				if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
++				if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
++			}
++
++			if(o.grid) {
++				var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
++				pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
++				pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY																// The absolute mouse position
++				- this.offset.click.top													// Click offset (relative to the element)
++				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
++				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
++				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX																// The absolute mouse position
++				- this.offset.click.left												// Click offset (relative to the element)
++				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
++				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
++				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_rearrange: function(event, i, a, hardRefresh) {
++
++		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
++
++		//Various things done here to improve the performance:
++		// 1. we create a setTimeout, that calls refreshPositions
++		// 2. on the instance, we have a counter variable, that get's higher after every append
++		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
++		// 4. this lets only the last addition to the timeout stack through
++		this.counter = this.counter ? ++this.counter : 1;
++		var self = this, counter = this.counter;
++
++		window.setTimeout(function() {
++			if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
++		},0);
++
++	},
++
++	_clear: function(event, noPropagation) {
++
++		this.reverting = false;
++		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
++		// everything else normalized again
++		var delayedTriggers = [], self = this;
++
++		// We first have to update the dom position of the actual currentItem
++		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
++		if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem);
++		this._noFinalSort = null;
++
++		if(this.helper[0] == this.currentItem[0]) {
++			for(var i in this._storedCSS) {
++				if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
++			}
++			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++		} else {
++			this.currentItem.show();
++		}
++
++		if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
++		if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
++		if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element
++			if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) {
++					delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++					delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.containers[i]));
++				}
++			};
++		};
++
++		//Post events to containers
++		for (var i = this.containers.length - 1; i >= 0; i--){
++			if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++			if(this.containers[i].containerCache.over) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++				this.containers[i].containerCache.over = 0;
++			}
++		}
++
++		//Do what was originally in plugins
++		if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor
++		if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity
++		if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index
++
++		this.dragging = false;
++		if(this.cancelHelperRemoval) {
++			if(!noPropagation) {
++				this._trigger("beforeStop", event, this._uiHash());
++				for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
++				this._trigger("stop", event, this._uiHash());
++			}
++			return false;
++		}
++
++		if(!noPropagation) this._trigger("beforeStop", event, this._uiHash());
++
++		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++
++		if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
++
++		if(!noPropagation) {
++			for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
++			this._trigger("stop", event, this._uiHash());
++		}
++
++		this.fromOutside = false;
++		return true;
++
++	},
++
++	_trigger: function() {
++		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
++			this.cancel();
++		}
++	},
++
++	_uiHash: function(inst) {
++		var self = inst || this;
++		return {
++			helper: self.helper,
++			placeholder: self.placeholder || $([]),
++			position: self.position,
++			originalPosition: self.originalPosition,
++			offset: self.positionAbs,
++			item: self.currentItem,
++			sender: inst ? inst.element : null
++		};
++	}
++
++});
++
++$.extend($.ui.sortable, {
++	version: "1.8.15"
++});
++
++})(jQuery);
++/*
++ * jQuery UI Effects 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/
++ */
++;jQuery.effects || (function($, undefined) {
++
++$.effects = {};
++
++
++
++/******************************************************************************/
++/****************************** COLOR ANIMATIONS ******************************/
++/******************************************************************************/
++
++// override the animation for color styles
++$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',
++	'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'],
++function(i, attr) {
++	$.fx.step[attr] = function(fx) {
++		if (!fx.colorInit) {
++			fx.start = getColor(fx.elem, attr);
++			fx.end = getRGB(fx.end);
++			fx.colorInit = true;
++		}
++
++		fx.elem.style[attr] = 'rgb(' +
++			Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +
++			Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +
++			Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';
++	};
++});
++
++// Color Conversion functions from highlightFade
++// By Blair Mitchelmore
++// http://jquery.offput.ca/highlightFade/
++
++// Parse strings looking for color tuples [255,255,255]
++function getRGB(color) {
++		var result;
++
++		// Check if we're already dealing with an array of colors
++		if ( color && color.constructor == Array && color.length == 3 )
++				return color;
++
++		// Look for rgb(num,num,num)
++		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
++				return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
++
++		// Look for rgb(num%,num%,num%)
++		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
++				return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
++
++		// Look for #a0b1c2
++		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
++				return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
++
++		// Look for #fff
++		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
++				return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
++
++		// Look for rgba(0, 0, 0, 0) == transparent in Safari 3
++		if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
++				return colors['transparent'];
++
++		// Otherwise, we're most likely dealing with a named color
++		return colors[$.trim(color).toLowerCase()];
++}
++
++function getColor(elem, attr) {
++		var color;
++
++		do {
++				color = $.curCSS(elem, attr);
++
++				// Keep going until we find an element that has color, or we hit the body
++				if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
++						break;
++
++				attr = "backgroundColor";
++		} while ( elem = elem.parentNode );
++
++		return getRGB(color);
++};
++
++// Some named colors to work with
++// From Interface by Stefan Petre
++// http://interface.eyecon.ro/
++
++var colors = {
++	aqua:[0,255,255],
++	azure:[240,255,255],
++	beige:[245,245,220],
++	black:[0,0,0],
++	blue:[0,0,255],
++	brown:[165,42,42],
++	cyan:[0,255,255],
++	darkblue:[0,0,139],
++	darkcyan:[0,139,139],
++	darkgrey:[169,169,169],
++	darkgreen:[0,100,0],
++	darkkhaki:[189,183,107],
++	darkmagenta:[139,0,139],
++	darkolivegreen:[85,107,47],
++	darkorange:[255,140,0],
++	darkorchid:[153,50,204],
++	darkred:[139,0,0],
++	darksalmon:[233,150,122],
++	darkviolet:[148,0,211],
++	fuchsia:[255,0,255],
++	gold:[255,215,0],
++	green:[0,128,0],
++	indigo:[75,0,130],
++	khaki:[240,230,140],
++	lightblue:[173,216,230],
++	lightcyan:[224,255,255],
++	lightgreen:[144,238,144],
++	lightgrey:[211,211,211],
++	lightpink:[255,182,193],
++	lightyellow:[255,255,224],
++	lime:[0,255,0],
++	magenta:[255,0,255],
++	maroon:[128,0,0],
++	navy:[0,0,128],
++	olive:[128,128,0],
++	orange:[255,165,0],
++	pink:[255,192,203],
++	purple:[128,0,128],
++	violet:[128,0,128],
++	red:[255,0,0],
++	silver:[192,192,192],
++	white:[255,255,255],
++	yellow:[255,255,0],
++	transparent: [255,255,255]
++};
++
++
++
++/******************************************************************************/
++/****************************** CLASS ANIMATIONS ******************************/
++/******************************************************************************/
++
++var classAnimationActions = ['add', 'remove', 'toggle'],
++	shorthandStyles = {
++		border: 1,
++		borderBottom: 1,
++		borderColor: 1,
++		borderLeft: 1,
++		borderRight: 1,
++		borderTop: 1,
++		borderWidth: 1,
++		margin: 1,
++		padding: 1
++	};
++
++function getElementStyles() {
++	var style = document.defaultView
++			? document.defaultView.getComputedStyle(this, null)
++			: this.currentStyle,
++		newStyle = {},
++		key,
++		camelCase;
++
++	// webkit enumerates style porperties
++	if (style && style.length && style[0] && style[style[0]]) {
++		var len = style.length;
++		while (len--) {
++			key = style[len];
++			if (typeof style[key] == 'string') {
++				camelCase = key.replace(/\-(\w)/g, function(all, letter){
++					return letter.toUpperCase();
++				});
++				newStyle[camelCase] = style[key];
++			}
++		}
++	} else {
++		for (key in style) {
++			if (typeof style[key] === 'string') {
++				newStyle[key] = style[key];
++			}
++		}
++	}
++	
++	return newStyle;
++}
++
++function filterStyles(styles) {
++	var name, value;
++	for (name in styles) {
++		value = styles[name];
++		if (
++			// ignore null and undefined values
++			value == null ||
++			// ignore functions (when does this occur?)
++			$.isFunction(value) ||
++			// shorthand styles that need to be expanded
++			name in shorthandStyles ||
++			// ignore scrollbars (break in IE)
++			(/scrollbar/).test(name) ||
++
++			// only colors or values that can be converted to numbers
++			(!(/color/i).test(name) && isNaN(parseFloat(value)))
++		) {
++			delete styles[name];
++		}
++	}
++	
++	return styles;
++}
++
++function styleDifference(oldStyle, newStyle) {
++	var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459
++		name;
++
++	for (name in newStyle) {
++		if (oldStyle[name] != newStyle[name]) {
++			diff[name] = newStyle[name];
++		}
++	}
++
++	return diff;
++}
++
++$.effects.animateClass = function(value, duration, easing, callback) {
++	if ($.isFunction(easing)) {
++		callback = easing;
++		easing = null;
++	}
++
++	return this.queue(function() {
++		var that = $(this),
++			originalStyleAttr = that.attr('style') || ' ',
++			originalStyle = filterStyles(getElementStyles.call(this)),
++			newStyle,
++			className = that.attr('class');
++
++		$.each(classAnimationActions, function(i, action) {
++			if (value[action]) {
++				that[action + 'Class'](value[action]);
++			}
++		});
++		newStyle = filterStyles(getElementStyles.call(this));
++		that.attr('class', className);
++
++		that.animate(styleDifference(originalStyle, newStyle), {
++			queue: false,
++			duration: duration,
++			easing: easing,
++			complete: function() {
++				$.each(classAnimationActions, function(i, action) {
++					if (value[action]) { that[action + 'Class'](value[action]); }
++				});
++				// work around bug in IE by clearing the cssText before setting it
++				if (typeof that.attr('style') == 'object') {
++					that.attr('style').cssText = '';
++					that.attr('style').cssText = originalStyleAttr;
++				} else {
++					that.attr('style', originalStyleAttr);
++				}
++				if (callback) { callback.apply(this, arguments); }
++				$.dequeue( this );
++			}
++		});
++	});
++};
++
++$.fn.extend({
++	_addClass: $.fn.addClass,
++	addClass: function(classNames, speed, easing, callback) {
++		return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
++	},
++
++	_removeClass: $.fn.removeClass,
++	removeClass: function(classNames,speed,easing,callback) {
++		return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
++	},
++
++	_toggleClass: $.fn.toggleClass,
++	toggleClass: function(classNames, force, speed, easing, callback) {
++		if ( typeof force == "boolean" || force === undefined ) {
++			if ( !speed ) {
++				// without speed parameter;
++				return this._toggleClass(classNames, force);
++			} else {
++				return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);
++			}
++		} else {
++			// without switch parameter;
++			return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);
++		}
++	},
++
++	switchClass: function(remove,add,speed,easing,callback) {
++		return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
++	}
++});
++
++
++
++/******************************************************************************/
++/*********************************** EFFECTS **********************************/
++/******************************************************************************/
++
++$.extend($.effects, {
++	version: "1.8.15",
++
++	// Saves a set of properties in a data storage
++	save: function(element, set) {
++		for(var i=0; i < set.length; i++) {
++			if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
++		}
++	},
++
++	// Restores a set of previously saved properties from a data storage
++	restore: function(element, set) {
++		for(var i=0; i < set.length; i++) {
++			if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
++		}
++	},
++
++	setMode: function(el, mode) {
++		if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
++		return mode;
++	},
++
++	getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
++		// this should be a little more flexible in the future to handle a string & hash
++		var y, x;
++		switch (origin[0]) {
++			case 'top': y = 0; break;
++			case 'middle': y = 0.5; break;
++			case 'bottom': y = 1; break;
++			default: y = origin[0] / original.height;
++		};
++		switch (origin[1]) {
++			case 'left': x = 0; break;
++			case 'center': x = 0.5; break;
++			case 'right': x = 1; break;
++			default: x = origin[1] / original.width;
++		};
++		return {x: x, y: y};
++	},
++
++	// Wraps the element around a wrapper that copies position properties
++	createWrapper: function(element) {
++
++		// if the element is already wrapped, return it
++		if (element.parent().is('.ui-effects-wrapper')) {
++			return element.parent();
++		}
++
++		// wrap the element
++		var props = {
++				width: element.outerWidth(true),
++				height: element.outerHeight(true),
++				'float': element.css('float')
++			},
++			wrapper = $('<div></div>')
++				.addClass('ui-effects-wrapper')
++				.css({
++					fontSize: '100%',
++					background: 'transparent',
++					border: 'none',
++					margin: 0,
++					padding: 0
++				});
++
++		element.wrap(wrapper);
++		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
++
++		// transfer positioning properties to the wrapper
++		if (element.css('position') == 'static') {
++			wrapper.css({ position: 'relative' });
++			element.css({ position: 'relative' });
++		} else {
++			$.extend(props, {
++				position: element.css('position'),
++				zIndex: element.css('z-index')
++			});
++			$.each(['top', 'left', 'bottom', 'right'], function(i, pos) {
++				props[pos] = element.css(pos);
++				if (isNaN(parseInt(props[pos], 10))) {
++					props[pos] = 'auto';
++				}
++			});
++			element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' });
++		}
++
++		return wrapper.css(props).show();
++	},
++
++	removeWrapper: function(element) {
++		if (element.parent().is('.ui-effects-wrapper'))
++			return element.parent().replaceWith(element);
++		return element;
++	},
++
++	setTransition: function(element, list, factor, value) {
++		value = value || {};
++		$.each(list, function(i, x){
++			unit = element.cssUnit(x);
++			if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
++		});
++		return value;
++	}
++});
++
++
++function _normalizeArguments(effect, options, speed, callback) {
++	// shift params for method overloading
++	if (typeof effect == 'object') {
++		callback = options;
++		speed = null;
++		options = effect;
++		effect = options.effect;
++	}
++	if ($.isFunction(options)) {
++		callback = options;
++		speed = null;
++		options = {};
++	}
++        if (typeof options == 'number' || $.fx.speeds[options]) {
++		callback = speed;
++		speed = options;
++		options = {};
++	}
++	if ($.isFunction(speed)) {
++		callback = speed;
++		speed = null;
++	}
++
++	options = options || {};
++
++	speed = speed || options.duration;
++	speed = $.fx.off ? 0 : typeof speed == 'number'
++		? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default;
++
++	callback = callback || options.complete;
++
++	return [effect, options, speed, callback];
++}
++
++function standardSpeed( speed ) {
++	// valid standard speeds
++	if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
++		return true;
++	}
++	
++	// invalid strings - treat as "normal" speed
++	if ( typeof speed === "string" && !$.effects[ speed ] ) {
++		return true;
++	}
++	
++	return false;
++}
++
++$.fn.extend({
++	effect: function(effect, options, speed, callback) {
++		var args = _normalizeArguments.apply(this, arguments),
++			// TODO: make effects take actual parameters instead of a hash
++			args2 = {
++				options: args[1],
++				duration: args[2],
++				callback: args[3]
++			},
++			mode = args2.options.mode,
++			effectMethod = $.effects[effect];
++		
++		if ( $.fx.off || !effectMethod ) {
++			// delegate to the original method (e.g., .show()) if possible
++			if ( mode ) {
++				return this[ mode ]( args2.duration, args2.callback );
++			} else {
++				return this.each(function() {
++					if ( args2.callback ) {
++						args2.callback.call( this );
++					}
++				});
++			}
++		}
++		
++		return effectMethod.call(this, args2);
++	},
++
++	_show: $.fn.show,
++	show: function(speed) {
++		if ( standardSpeed( speed ) ) {
++			return this._show.apply(this, arguments);
++		} else {
++			var args = _normalizeArguments.apply(this, arguments);
++			args[1].mode = 'show';
++			return this.effect.apply(this, args);
++		}
++	},
++
++	_hide: $.fn.hide,
++	hide: function(speed) {
++		if ( standardSpeed( speed ) ) {
++			return this._hide.apply(this, arguments);
++		} else {
++			var args = _normalizeArguments.apply(this, arguments);
++			args[1].mode = 'hide';
++			return this.effect.apply(this, args);
++		}
++	},
++
++	// jQuery core overloads toggle and creates _toggle
++	__toggle: $.fn.toggle,
++	toggle: function(speed) {
++		if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
++			return this.__toggle.apply(this, arguments);
++		} else {
++			var args = _normalizeArguments.apply(this, arguments);
++			args[1].mode = 'toggle';
++			return this.effect.apply(this, args);
++		}
++	},
++
++	// helper functions
++	cssUnit: function(key) {
++		var style = this.css(key), val = [];
++		$.each( ['em','px','%','pt'], function(i, unit){
++			if(style.indexOf(unit) > 0)
++				val = [parseFloat(style), unit];
++		});
++		return val;
++	}
++});
++
++
++
++/******************************************************************************/
++/*********************************** EASING ***********************************/
++/******************************************************************************/
++
++/*
++ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
++ *
++ * Uses the built in easing capabilities added In jQuery 1.1
++ * to offer multiple easing options
++ *
++ * TERMS OF USE - jQuery Easing
++ *
++ * Open source under the BSD License.
++ *
++ * Copyright 2008 George McGinley Smith
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without modification,
++ * are permitted provided that the following conditions are met:
++ *
++ * Redistributions of source code must retain the above copyright notice, this list of
++ * conditions and the following disclaimer.
++ * Redistributions in binary form must reproduce the above copyright notice, this list
++ * of conditions and the following disclaimer in the documentation and/or other materials
++ * provided with the distribution.
++ *
++ * Neither the name of the author nor the names of contributors may be used to endorse
++ * or promote products derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
++ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
++ * OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++*/
++
++// t: current time, b: begInnIng value, c: change In value, d: duration
++$.easing.jswing = $.easing.swing;
++
++$.extend($.easing,
++{
++	def: 'easeOutQuad',
++	swing: function (x, t, b, c, d) {
++		//alert($.easing.default);
++		return $.easing[$.easing.def](x, t, b, c, d);
++	},
++	easeInQuad: function (x, t, b, c, d) {
++		return c*(t/=d)*t + b;
++	},
++	easeOutQuad: function (x, t, b, c, d) {
++		return -c *(t/=d)*(t-2) + b;
++	},
++	easeInOutQuad: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return c/2*t*t + b;
++		return -c/2 * ((--t)*(t-2) - 1) + b;
++	},
++	easeInCubic: function (x, t, b, c, d) {
++		return c*(t/=d)*t*t + b;
++	},
++	easeOutCubic: function (x, t, b, c, d) {
++		return c*((t=t/d-1)*t*t + 1) + b;
++	},
++	easeInOutCubic: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return c/2*t*t*t + b;
++		return c/2*((t-=2)*t*t + 2) + b;
++	},
++	easeInQuart: function (x, t, b, c, d) {
++		return c*(t/=d)*t*t*t + b;
++	},
++	easeOutQuart: function (x, t, b, c, d) {
++		return -c * ((t=t/d-1)*t*t*t - 1) + b;
++	},
++	easeInOutQuart: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
++		return -c/2 * ((t-=2)*t*t*t - 2) + b;
++	},
++	easeInQuint: function (x, t, b, c, d) {
++		return c*(t/=d)*t*t*t*t + b;
++	},
++	easeOutQuint: function (x, t, b, c, d) {
++		return c*((t=t/d-1)*t*t*t*t + 1) + b;
++	},
++	easeInOutQuint: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
++		return c/2*((t-=2)*t*t*t*t + 2) + b;
++	},
++	easeInSine: function (x, t, b, c, d) {
++		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
++	},
++	easeOutSine: function (x, t, b, c, d) {
++		return c * Math.sin(t/d * (Math.PI/2)) + b;
++	},
++	easeInOutSine: function (x, t, b, c, d) {
++		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
++	},
++	easeInExpo: function (x, t, b, c, d) {
++		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
++	},
++	easeOutExpo: function (x, t, b, c, d) {
++		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
++	},
++	easeInOutExpo: function (x, t, b, c, d) {
++		if (t==0) return b;
++		if (t==d) return b+c;
++		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
++		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
++	},
++	easeInCirc: function (x, t, b, c, d) {
++		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
++	},
++	easeOutCirc: function (x, t, b, c, d) {
++		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
++	},
++	easeInOutCirc: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
++		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
++	},
++	easeInElastic: function (x, t, b, c, d) {
++		var s=1.70158;var p=0;var a=c;
++		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
++		if (a < Math.abs(c)) { a=c; var s=p/4; }
++		else var s = p/(2*Math.PI) * Math.asin (c/a);
++		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
++	},
++	easeOutElastic: function (x, t, b, c, d) {
++		var s=1.70158;var p=0;var a=c;
++		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
++		if (a < Math.abs(c)) { a=c; var s=p/4; }
++		else var s = p/(2*Math.PI) * Math.asin (c/a);
++		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
++	},
++	easeInOutElastic: function (x, t, b, c, d) {
++		var s=1.70158;var p=0;var a=c;
++		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
++		if (a < Math.abs(c)) { a=c; var s=p/4; }
++		else var s = p/(2*Math.PI) * Math.asin (c/a);
++		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
++		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
++	},
++	easeInBack: function (x, t, b, c, d, s) {
++		if (s == undefined) s = 1.70158;
++		return c*(t/=d)*t*((s+1)*t - s) + b;
++	},
++	easeOutBack: function (x, t, b, c, d, s) {
++		if (s == undefined) s = 1.70158;
++		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
++	},
++	easeInOutBack: function (x, t, b, c, d, s) {
++		if (s == undefined) s = 1.70158;
++		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
++		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
++	},
++	easeInBounce: function (x, t, b, c, d) {
++		return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
++	},
++	easeOutBounce: function (x, t, b, c, d) {
++		if ((t/=d) < (1/2.75)) {
++			return c*(7.5625*t*t) + b;
++		} else if (t < (2/2.75)) {
++			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
++		} else if (t < (2.5/2.75)) {
++			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
++		} else {
++			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
++		}
++	},
++	easeInOutBounce: function (x, t, b, c, d) {
++		if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
++		return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
++	}
++});
++
++/*
++ *
++ * TERMS OF USE - EASING EQUATIONS
++ *
++ * Open source under the BSD License.
++ *
++ * Copyright 2001 Robert Penner
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without modification,
++ * are permitted provided that the following conditions are met:
++ *
++ * Redistributions of source code must retain the above copyright notice, this list of
++ * conditions and the following disclaimer.
++ * Redistributions in binary form must reproduce the above copyright notice, this list
++ * of conditions and the following disclaimer in the documentation and/or other materials
++ * provided with the distribution.
++ *
++ * Neither the name of the author nor the names of contributors may be used to endorse
++ * or promote products derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
++ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
++ * OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ */
++
++})(jQuery);
++/*
++ * jQuery UI Effects Blind 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Blind
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.blind = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
++		var direction = o.options.direction || 'vertical'; // Default direction
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
++		var ref = (direction == 'vertical') ? 'height' : 'width';
++		var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
++		if(mode == 'show') wrapper.css(ref, 0); // Shift
++
++		// Animation
++		var animation = {};
++		animation[ref] = mode == 'show' ? distance : 0;
++
++		// Animate
++		wrapper.animate(animation, o.duration, o.options.easing, function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(el[0], arguments); // Callback
++			el.dequeue();
++		});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Bounce 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Bounce
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.bounce = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
++		var direction = o.options.direction || 'up'; // Default direction
++		var distance = o.options.distance || 20; // Default distance
++		var times = o.options.times || 5; // Default # of times
++		var speed = o.duration || 250; // Default speed per bounce
++		if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		$.effects.createWrapper(el); // Create Wrapper
++		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
++		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
++		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3);
++		if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
++		if (mode == 'hide') distance = distance / (times * 2);
++		if (mode != 'hide') times--;
++
++		// Animate
++		if (mode == 'show') { // Show Bounce
++			var animation = {opacity: 1};
++			animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
++			el.animate(animation, speed / 2, o.options.easing);
++			distance = distance / 2;
++			times--;
++		};
++		for (var i = 0; i < times; i++) { // Bounces
++			var animation1 = {}, animation2 = {};
++			animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
++			animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
++			el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
++			distance = (mode == 'hide') ? distance * 2 : distance / 2;
++		};
++		if (mode == 'hide') { // Last Bounce
++			var animation = {opacity: 0};
++			animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
++			el.animate(animation, speed / 2, o.options.easing, function(){
++				el.hide(); // Hide
++				$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++				if(o.callback) o.callback.apply(this, arguments); // Callback
++			});
++		} else {
++			var animation1 = {}, animation2 = {};
++			animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
++			animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
++			el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){
++				$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++				if(o.callback) o.callback.apply(this, arguments); // Callback
++			});
++		};
++		el.queue('fx', function() { el.dequeue(); });
++		el.dequeue();
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Clip 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Clip
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.clip = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right','height','width'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
++		var direction = o.options.direction || 'vertical'; // Default direction
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
++		var animate = el[0].tagName == 'IMG' ? wrapper : el;
++		var ref = {
++			size: (direction == 'vertical') ? 'height' : 'width',
++			position: (direction == 'vertical') ? 'top' : 'left'
++		};
++		var distance = (direction == 'vertical') ? animate.height() : animate.width();
++		if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift
++
++		// Animation
++		var animation = {};
++		animation[ref.size] = mode == 'show' ? distance : 0;
++		animation[ref.position] = mode == 'show' ? 0 : distance / 2;
++
++		// Animate
++		animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(el[0], arguments); // Callback
++			el.dequeue();
++		}});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Drop 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Drop
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.drop = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right','opacity'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
++		var direction = o.options.direction || 'left'; // Default Direction
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		$.effects.createWrapper(el); // Create Wrapper
++		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
++		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
++		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2);
++		if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
++
++		// Animation
++		var animation = {opacity: mode == 'show' ? 1 : 0};
++		animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
++
++		// Animate
++		el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(this, arguments); // Callback
++			el.dequeue();
++		}});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Explode 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Explode
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.explode = function(o) {
++
++	return this.queue(function() {
++
++	var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
++	var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
++
++	o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
++	var el = $(this).show().css('visibility', 'hidden');
++	var offset = el.offset();
++
++	//Substract the margins - not fixing the problem yet.
++	offset.top -= parseInt(el.css("marginTop"),10) || 0;
++	offset.left -= parseInt(el.css("marginLeft"),10) || 0;
++
++	var width = el.outerWidth(true);
++	var height = el.outerHeight(true);
++
++	for(var i=0;i<rows;i++) { // =
++		for(var j=0;j<cells;j++) { // ||
++			el
++				.clone()
++				.appendTo('body')
++				.wrap('<div></div>')
++				.css({
++					position: 'absolute',
++					visibility: 'visible',
++					left: -j*(width/cells),
++					top: -i*(height/rows)
++				})
++				.parent()
++				.addClass('ui-effects-explode')
++				.css({
++					position: 'absolute',
++					overflow: 'hidden',
++					width: width/cells,
++					height: height/rows,
++					left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),
++					top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),
++					opacity: o.options.mode == 'show' ? 0 : 1
++				}).animate({
++					left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),
++					top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),
++					opacity: o.options.mode == 'show' ? 1 : 0
++				}, o.duration || 500);
++		}
++	}
++
++	// Set a timeout, to call the callback approx. when the other animations have finished
++	setTimeout(function() {
++
++		o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();
++				if(o.callback) o.callback.apply(el[0]); // Callback
++				el.dequeue();
++
++				$('div.ui-effects-explode').remove();
++
++	}, o.duration || 500);
++
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Fade 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Fade
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.fade = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			mode = $.effects.setMode(elem, o.options.mode || 'hide');
++
++		elem.animate({ opacity: mode }, {
++			queue: false,
++			duration: o.duration,
++			easing: o.options.easing,
++			complete: function() {
++				(o.callback && o.callback.apply(this, arguments));
++				elem.dequeue();
++			}
++		});
++	});
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Fold 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Fold
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.fold = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
++		var size = o.options.size || 15; // Default fold size
++		var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
++		var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
++		var widthFirst = ((mode == 'show') != horizFirst);
++		var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
++		var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
++		var percent = /([0-9]+)%/.exec(size);
++		if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
++		if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
++
++		// Animation
++		var animation1 = {}, animation2 = {};
++		animation1[ref[0]] = mode == 'show' ? distance[0] : size;
++		animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
++
++		// Animate
++		wrapper.animate(animation1, duration, o.options.easing)
++		.animate(animation2, duration, o.options.easing, function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(el[0], arguments); // Callback
++			el.dequeue();
++		});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Highlight 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Highlight
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.highlight = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			props = ['backgroundImage', 'backgroundColor', 'opacity'],
++			mode = $.effects.setMode(elem, o.options.mode || 'show'),
++			animation = {
++				backgroundColor: elem.css('backgroundColor')
++			};
++
++		if (mode == 'hide') {
++			animation.opacity = 0;
++		}
++
++		$.effects.save(elem, props);
++		elem
++			.show()
++			.css({
++				backgroundImage: 'none',
++				backgroundColor: o.options.color || '#ffff99'
++			})
++			.animate(animation, {
++				queue: false,
++				duration: o.duration,
++				easing: o.options.easing,
++				complete: function() {
++					(mode == 'hide' && elem.hide());
++					$.effects.restore(elem, props);
++					(mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter'));
++					(o.callback && o.callback.apply(this, arguments));
++					elem.dequeue();
++				}
++			});
++	});
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Pulsate 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Pulsate
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.pulsate = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			mode = $.effects.setMode(elem, o.options.mode || 'show');
++			times = ((o.options.times || 5) * 2) - 1;
++			duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2,
++			isVisible = elem.is(':visible'),
++			animateTo = 0;
++
++		if (!isVisible) {
++			elem.css('opacity', 0).show();
++			animateTo = 1;
++		}
++
++		if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) {
++			times--;
++		}
++
++		for (var i = 0; i < times; i++) {
++			elem.animate({ opacity: animateTo }, duration, o.options.easing);
++			animateTo = (animateTo + 1) % 2;
++		}
++
++		elem.animate({ opacity: animateTo }, duration, o.options.easing, function() {
++			if (animateTo == 0) {
++				elem.hide();
++			}
++			(o.callback && o.callback.apply(this, arguments));
++		});
++
++		elem
++			.queue('fx', function() { elem.dequeue(); })
++			.dequeue();
++	});
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Scale 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Scale
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.puff = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			mode = $.effects.setMode(elem, o.options.mode || 'hide'),
++			percent = parseInt(o.options.percent, 10) || 150,
++			factor = percent / 100,
++			original = { height: elem.height(), width: elem.width() };
++
++		$.extend(o.options, {
++			fade: true,
++			mode: mode,
++			percent: mode == 'hide' ? percent : 100,
++			from: mode == 'hide'
++				? original
++				: {
++					height: original.height * factor,
++					width: original.width * factor
++				}
++		});
++
++		elem.effect('scale', o.options, o.duration, o.callback);
++		elem.dequeue();
++	});
++};
++
++$.effects.scale = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this);
++
++		// Set options
++		var options = $.extend(true, {}, o.options);
++		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
++		var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
++		var direction = o.options.direction || 'both'; // Set default axis
++		var origin = o.options.origin; // The origin of the scaling
++		if (mode != 'effect') { // Set default origin and restore for show/hide
++			options.origin = origin || ['middle','center'];
++			options.restore = true;
++		}
++		var original = {height: el.height(), width: el.width()}; // Save original
++		el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
++
++		// Adjust
++		var factor = { // Set scaling factor
++			y: direction != 'horizontal' ? (percent / 100) : 1,
++			x: direction != 'vertical' ? (percent / 100) : 1
++		};
++		el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
++
++		if (o.options.fade) { // Fade option to support puff
++			if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
++			if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
++		};
++
++		// Animation
++		options.from = el.from; options.to = el.to; options.mode = mode;
++
++		// Animate
++		el.effect('size', options, o.duration, o.callback);
++		el.dequeue();
++	});
++
++};
++
++$.effects.size = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity'];
++		var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore
++		var props2 = ['width','height','overflow']; // Copy for children
++		var cProps = ['fontSize'];
++		var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
++		var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
++		var restore = o.options.restore || false; // Default restore
++		var scale = o.options.scale || 'both'; // Default scale mode
++		var origin = o.options.origin; // The origin of the sizing
++		var original = {height: el.height(), width: el.width()}; // Save original
++		el.from = o.options.from || original; // Default from state
++		el.to = o.options.to || original; // Default to state
++		// Adjust
++		if (origin) { // Calculate baseline shifts
++			var baseline = $.effects.getBaseline(origin, original);
++			el.from.top = (original.height - el.from.height) * baseline.y;
++			el.from.left = (original.width - el.from.width) * baseline.x;
++			el.to.top = (original.height - el.to.height) * baseline.y;
++			el.to.left = (original.width - el.to.width) * baseline.x;
++		};
++		var factor = { // Set scaling factor
++			from: {y: el.from.height / original.height, x: el.from.width / original.width},
++			to: {y: el.to.height / original.height, x: el.to.width / original.width}
++		};
++		if (scale == 'box' || scale == 'both') { // Scale the css box
++			if (factor.from.y != factor.to.y) { // Vertical props scaling
++				props = props.concat(vProps);
++				el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
++				el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
++			};
++			if (factor.from.x != factor.to.x) { // Horizontal props scaling
++				props = props.concat(hProps);
++				el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
++				el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
++			};
++		};
++		if (scale == 'content' || scale == 'both') { // Scale the content
++			if (factor.from.y != factor.to.y) { // Vertical props scaling
++				props = props.concat(cProps);
++				el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
++				el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
++			};
++		};
++		$.effects.save(el, restore ? props : props1); el.show(); // Save & Show
++		$.effects.createWrapper(el); // Create Wrapper
++		el.css('overflow','hidden').css(el.from); // Shift
++
++		// Animate
++		if (scale == 'content' || scale == 'both') { // Scale the children
++			vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
++			hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
++			props2 = props.concat(vProps).concat(hProps); // Concat
++			el.find("*[width]").each(function(){
++				child = $(this);
++				if (restore) $.effects.save(child, props2);
++				var c_original = {height: child.height(), width: child.width()}; // Save original
++				child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
++				child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
++				if (factor.from.y != factor.to.y) { // Vertical props scaling
++					child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
++					child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
++				};
++				if (factor.from.x != factor.to.x) { // Horizontal props scaling
++					child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
++					child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
++				};
++				child.css(child.from); // Shift children
++				child.animate(child.to, o.duration, o.options.easing, function(){
++					if (restore) $.effects.restore(child, props2); // Restore children
++				}); // Animate children
++			});
++		};
++
++		// Animate
++		el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
++			if (el.to.opacity === 0) {
++				el.css('opacity', el.from.opacity);
++			}
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(this, arguments); // Callback
++			el.dequeue();
++		}});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Shake 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Shake
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.shake = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
++		var direction = o.options.direction || 'left'; // Default direction
++		var distance = o.options.distance || 20; // Default distance
++		var times = o.options.times || 3; // Default # of times
++		var speed = o.duration || o.options.duration || 140; // Default speed per shake
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		$.effects.createWrapper(el); // Create Wrapper
++		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
++		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
++
++		// Animation
++		var animation = {}, animation1 = {}, animation2 = {};
++		animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
++		animation1[ref] = (motion == 'pos' ? '+=' : '-=')  + distance * 2;
++		animation2[ref] = (motion == 'pos' ? '-=' : '+=')  + distance * 2;
++
++		// Animate
++		el.animate(animation, speed, o.options.easing);
++		for (var i = 1; i < times; i++) { // Shakes
++			el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
++		};
++		el.animate(animation1, speed, o.options.easing).
++		animate(animation, speed / 2, o.options.easing, function(){ // Last shake
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(this, arguments); // Callback
++		});
++		el.queue('fx', function() { el.dequeue(); });
++		el.dequeue();
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Slide 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Slide
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.slide = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
++		var direction = o.options.direction || 'left'; // Default Direction
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		$.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
++		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
++		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
++		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
++		if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift
++
++		// Animation
++		var animation = {};
++		animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
++
++		// Animate
++		el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(this, arguments); // Callback
++			el.dequeue();
++		}});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Transfer 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Transfer
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.transfer = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			target = $(o.options.to),
++			endPosition = target.offset(),
++			animation = {
++				top: endPosition.top,
++				left: endPosition.left,
++				height: target.innerHeight(),
++				width: target.innerWidth()
++			},
++			startPosition = elem.offset(),
++			transfer = $('<div class="ui-effects-transfer"></div>')
++				.appendTo(document.body)
++				.addClass(o.options.className)
++				.css({
++					top: startPosition.top,
++					left: startPosition.left,
++					height: elem.innerHeight(),
++					width: elem.innerWidth(),
++					position: 'absolute'
++				})
++				.animate(animation, o.duration, o.options.easing, function() {
++					transfer.remove();
++					(o.callback && o.callback.apply(elem[0], arguments));
++					elem.dequeue();
++				});
++	});
++};
++
++})(jQuery);
++/*
++ * jQuery UI Accordion 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Accordion
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget( "ui.accordion", {
++	options: {
++		active: 0,
++		animated: "slide",
++		autoHeight: true,
++		clearStyle: false,
++		collapsible: false,
++		event: "click",
++		fillSpace: false,
++		header: "> li > :first-child,> :not(li):even",
++		icons: {
++			header: "ui-icon-triangle-1-e",
++			headerSelected: "ui-icon-triangle-1-s"
++		},
++		navigation: false,
++		navigationFilter: function() {
++			return this.href.toLowerCase() === location.href.toLowerCase();
++		}
++	},
++
++	_create: function() {
++		var self = this,
++			options = self.options;
++
++		self.running = 0;
++
++		self.element
++			.addClass( "ui-accordion ui-widget ui-helper-reset" )
++			// in lack of child-selectors in CSS
++			// we need to mark top-LIs in a UL-accordion for some IE-fix
++			.children( "li" )
++				.addClass( "ui-accordion-li-fix" );
++
++		self.headers = self.element.find( options.header )
++			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" )
++			.bind( "mouseenter.accordion", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).addClass( "ui-state-hover" );
++			})
++			.bind( "mouseleave.accordion", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( "ui-state-hover" );
++			})
++			.bind( "focus.accordion", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).addClass( "ui-state-focus" );
++			})
++			.bind( "blur.accordion", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( "ui-state-focus" );
++			});
++
++		self.headers.next()
++			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" );
++
++		if ( options.navigation ) {
++			var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 );
++			if ( current.length ) {
++				var header = current.closest( ".ui-accordion-header" );
++				if ( header.length ) {
++					// anchor within header
++					self.active = header;
++				} else {
++					// anchor within content
++					self.active = current.closest( ".ui-accordion-content" ).prev();
++				}
++			}
++		}
++
++		self.active = self._findActive( self.active || options.active )
++			.addClass( "ui-state-default ui-state-active" )
++			.toggleClass( "ui-corner-all" )
++			.toggleClass( "ui-corner-top" );
++		self.active.next().addClass( "ui-accordion-content-active" );
++
++		self._createIcons();
++		self.resize();
++		
++		// ARIA
++		self.element.attr( "role", "tablist" );
++
++		self.headers
++			.attr( "role", "tab" )
++			.bind( "keydown.accordion", function( event ) {
++				return self._keydown( event );
++			})
++			.next()
++				.attr( "role", "tabpanel" );
++
++		self.headers
++			.not( self.active || "" )
++			.attr({
++				"aria-expanded": "false",
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.next()
++				.hide();
++
++		// make sure at least one header is in the tab order
++		if ( !self.active.length ) {
++			self.headers.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			self.active
++				.attr({
++					"aria-expanded": "true",
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++		}
++
++		// only need links in tab order for Safari
++		if ( !$.browser.safari ) {
++			self.headers.find( "a" ).attr( "tabIndex", -1 );
++		}
++
++		if ( options.event ) {
++			self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) {
++				self._clickHandler.call( self, event, this );
++				event.preventDefault();
++			});
++		}
++	},
++
++	_createIcons: function() {
++		var options = this.options;
++		if ( options.icons ) {
++			$( "<span></span>" )
++				.addClass( "ui-icon " + options.icons.header )
++				.prependTo( this.headers );
++			this.active.children( ".ui-icon" )
++				.toggleClass(options.icons.header)
++				.toggleClass(options.icons.headerSelected);
++			this.element.addClass( "ui-accordion-icons" );
++		}
++	},
++
++	_destroyIcons: function() {
++		this.headers.children( ".ui-icon" ).remove();
++		this.element.removeClass( "ui-accordion-icons" );
++	},
++
++	destroy: function() {
++		var options = this.options;
++
++		this.element
++			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
++			.removeAttr( "role" );
++
++		this.headers
++			.unbind( ".accordion" )
++			.removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-expanded" )
++			.removeAttr( "aria-selected" )
++			.removeAttr( "tabIndex" );
++
++		this.headers.find( "a" ).removeAttr( "tabIndex" );
++		this._destroyIcons();
++		var contents = this.headers.next()
++			.css( "display", "" )
++			.removeAttr( "role" )
++			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" );
++		if ( options.autoHeight || options.fillHeight ) {
++			contents.css( "height", "" );
++		}
++
++		return $.Widget.prototype.destroy.call( this );
++	},
++
++	_setOption: function( key, value ) {
++		$.Widget.prototype._setOption.apply( this, arguments );
++			
++		if ( key == "active" ) {
++			this.activate( value );
++		}
++		if ( key == "icons" ) {
++			this._destroyIcons();
++			if ( value ) {
++				this._createIcons();
++			}
++		}
++		// #5332 - opacity doesn't cascade to positioned elements in IE
++		// so we need to add the disabled class to the headers and panels
++		if ( key == "disabled" ) {
++			this.headers.add(this.headers.next())
++				[ value ? "addClass" : "removeClass" ](
++					"ui-accordion-disabled ui-state-disabled" );
++		}
++	},
++
++	_keydown: function( event ) {
++		if ( this.options.disabled || event.altKey || event.ctrlKey ) {
++			return;
++		}
++
++		var keyCode = $.ui.keyCode,
++			length = this.headers.length,
++			currentIndex = this.headers.index( event.target ),
++			toFocus = false;
++
++		switch ( event.keyCode ) {
++			case keyCode.RIGHT:
++			case keyCode.DOWN:
++				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
++				break;
++			case keyCode.LEFT:
++			case keyCode.UP:
++				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
++				break;
++			case keyCode.SPACE:
++			case keyCode.ENTER:
++				this._clickHandler( { target: event.target }, event.target );
++				event.preventDefault();
++		}
++
++		if ( toFocus ) {
++			$( event.target ).attr( "tabIndex", -1 );
++			$( toFocus ).attr( "tabIndex", 0 );
++			toFocus.focus();
++			return false;
++		}
++
++		return true;
++	},
++
++	resize: function() {
++		var options = this.options,
++			maxHeight;
++
++		if ( options.fillSpace ) {
++			if ( $.browser.msie ) {
++				var defOverflow = this.element.parent().css( "overflow" );
++				this.element.parent().css( "overflow", "hidden");
++			}
++			maxHeight = this.element.parent().height();
++			if ($.browser.msie) {
++				this.element.parent().css( "overflow", defOverflow );
++			}
++
++			this.headers.each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.headers.next()
++				.each(function() {
++					$( this ).height( Math.max( 0, maxHeight -
++						$( this ).innerHeight() + $( this ).height() ) );
++				})
++				.css( "overflow", "auto" );
++		} else if ( options.autoHeight ) {
++			maxHeight = 0;
++			this.headers.next()
++				.each(function() {
++					maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
++				})
++				.height( maxHeight );
++		}
++
++		return this;
++	},
++
++	activate: function( index ) {
++		// TODO this gets called on init, changing the option without an explicit call for that
++		this.options.active = index;
++		// call clickHandler with custom event
++		var active = this._findActive( index )[ 0 ];
++		this._clickHandler( { target: active }, active );
++
++		return this;
++	},
++
++	_findActive: function( selector ) {
++		return selector
++			? typeof selector === "number"
++				? this.headers.filter( ":eq(" + selector + ")" )
++				: this.headers.not( this.headers.not( selector ) )
++			: selector === false
++				? $( [] )
++				: this.headers.filter( ":eq(0)" );
++	},
++
++	// TODO isn't event.target enough? why the separate target argument?
++	_clickHandler: function( event, target ) {
++		var options = this.options;
++		if ( options.disabled ) {
++			return;
++		}
++
++		// called only when using activate(false) to close all parts programmatically
++		if ( !event.target ) {
++			if ( !options.collapsible ) {
++				return;
++			}
++			this.active
++				.removeClass( "ui-state-active ui-corner-top" )
++				.addClass( "ui-state-default ui-corner-all" )
++				.children( ".ui-icon" )
++					.removeClass( options.icons.headerSelected )
++					.addClass( options.icons.header );
++			this.active.next().addClass( "ui-accordion-content-active" );
++			var toHide = this.active.next(),
++				data = {
++					options: options,
++					newHeader: $( [] ),
++					oldHeader: options.active,
++					newContent: $( [] ),
++					oldContent: toHide
++				},
++				toShow = ( this.active = $( [] ) );
++			this._toggle( toShow, toHide, data );
++			return;
++		}
++
++		// get the click target
++		var clicked = $( event.currentTarget || target ),
++			clickedIsActive = clicked[0] === this.active[0];
++
++		// TODO the option is changed, is that correct?
++		// TODO if it is correct, shouldn't that happen after determining that the click is valid?
++		options.active = options.collapsible && clickedIsActive ?
++			false :
++			this.headers.index( clicked );
++
++		// if animations are still active, or the active header is the target, ignore click
++		if ( this.running || ( !options.collapsible && clickedIsActive ) ) {
++			return;
++		}
++
++		// find elements to show and hide
++		var active = this.active,
++			toShow = clicked.next(),
++			toHide = this.active.next(),
++			data = {
++				options: options,
++				newHeader: clickedIsActive && options.collapsible ? $([]) : clicked,
++				oldHeader: this.active,
++				newContent: clickedIsActive && options.collapsible ? $([]) : toShow,
++				oldContent: toHide
++			},
++			down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
++
++		// when the call to ._toggle() comes after the class changes
++		// it causes a very odd bug in IE 8 (see #6720)
++		this.active = clickedIsActive ? $([]) : clicked;
++		this._toggle( toShow, toHide, data, clickedIsActive, down );
++
++		// switch classes
++		active
++			.removeClass( "ui-state-active ui-corner-top" )
++			.addClass( "ui-state-default ui-corner-all" )
++			.children( ".ui-icon" )
++				.removeClass( options.icons.headerSelected )
++				.addClass( options.icons.header );
++		if ( !clickedIsActive ) {
++			clicked
++				.removeClass( "ui-state-default ui-corner-all" )
++				.addClass( "ui-state-active ui-corner-top" )
++				.children( ".ui-icon" )
++					.removeClass( options.icons.header )
++					.addClass( options.icons.headerSelected );
++			clicked
++				.next()
++				.addClass( "ui-accordion-content-active" );
++		}
++
++		return;
++	},
++
++	_toggle: function( toShow, toHide, data, clickedIsActive, down ) {
++		var self = this,
++			options = self.options;
++
++		self.toShow = toShow;
++		self.toHide = toHide;
++		self.data = data;
++
++		var complete = function() {
++			if ( !self ) {
++				return;
++			}
++			return self._completed.apply( self, arguments );
++		};
++
++		// trigger changestart event
++		self._trigger( "changestart", null, self.data );
++
++		// count elements to animate
++		self.running = toHide.size() === 0 ? toShow.size() : toHide.size();
++
++		if ( options.animated ) {
++			var animOptions = {};
++
++			if ( options.collapsible && clickedIsActive ) {
++				animOptions = {
++					toShow: $( [] ),
++					toHide: toHide,
++					complete: complete,
++					down: down,
++					autoHeight: options.autoHeight || options.fillSpace
++				};
++			} else {
++				animOptions = {
++					toShow: toShow,
++					toHide: toHide,
++					complete: complete,
++					down: down,
++					autoHeight: options.autoHeight || options.fillSpace
++				};
++			}
++
++			if ( !options.proxied ) {
++				options.proxied = options.animated;
++			}
++
++			if ( !options.proxiedDuration ) {
++				options.proxiedDuration = options.duration;
++			}
++
++			options.animated = $.isFunction( options.proxied ) ?
++				options.proxied( animOptions ) :
++				options.proxied;
++
++			options.duration = $.isFunction( options.proxiedDuration ) ?
++				options.proxiedDuration( animOptions ) :
++				options.proxiedDuration;
++
++			var animations = $.ui.accordion.animations,
++				duration = options.duration,
++				easing = options.animated;
++
++			if ( easing && !animations[ easing ] && !$.easing[ easing ] ) {
++				easing = "slide";
++			}
++			if ( !animations[ easing ] ) {
++				animations[ easing ] = function( options ) {
++					this.slide( options, {
++						easing: easing,
++						duration: duration || 700
++					});
++				};
++			}
++
++			animations[ easing ]( animOptions );
++		} else {
++			if ( options.collapsible && clickedIsActive ) {
++				toShow.toggle();
++			} else {
++				toHide.hide();
++				toShow.show();
++			}
++
++			complete( true );
++		}
++
++		// TODO assert that the blur and focus triggers are really necessary, remove otherwise
++		toHide.prev()
++			.attr({
++				"aria-expanded": "false",
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.blur();
++		toShow.prev()
++			.attr({
++				"aria-expanded": "true",
++				"aria-selected": "true",
++				tabIndex: 0
++			})
++			.focus();
++	},
++
++	_completed: function( cancel ) {
++		this.running = cancel ? 0 : --this.running;
++		if ( this.running ) {
++			return;
++		}
++
++		if ( this.options.clearStyle ) {
++			this.toShow.add( this.toHide ).css({
++				height: "",
++				overflow: ""
++			});
++		}
++
++		// other classes are removed before the animation; this one needs to stay until completed
++		this.toHide.removeClass( "ui-accordion-content-active" );
++		// Work around for rendering bug in IE (#5421)
++		if ( this.toHide.length ) {
++			this.toHide.parent()[0].className = this.toHide.parent()[0].className;
++		}
++
++		this._trigger( "change", null, this.data );
++	}
++});
++
++$.extend( $.ui.accordion, {
++	version: "1.8.15",
++	animations: {
++		slide: function( options, additions ) {
++			options = $.extend({
++				easing: "swing",
++				duration: 300
++			}, options, additions );
++			if ( !options.toHide.size() ) {
++				options.toShow.animate({
++					height: "show",
++					paddingTop: "show",
++					paddingBottom: "show"
++				}, options );
++				return;
++			}
++			if ( !options.toShow.size() ) {
++				options.toHide.animate({
++					height: "hide",
++					paddingTop: "hide",
++					paddingBottom: "hide"
++				}, options );
++				return;
++			}
++			var overflow = options.toShow.css( "overflow" ),
++				percentDone = 0,
++				showProps = {},
++				hideProps = {},
++				fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
++				originalWidth;
++			// fix width before calculating height of hidden element
++			var s = options.toShow;
++			originalWidth = s[0].style.width;
++			s.width( parseInt( s.parent().width(), 10 )
++				- parseInt( s.css( "paddingLeft" ), 10 )
++				- parseInt( s.css( "paddingRight" ), 10 )
++				- ( parseInt( s.css( "borderLeftWidth" ), 10 ) || 0 )
++				- ( parseInt( s.css( "borderRightWidth" ), 10) || 0 ) );
++
++			$.each( fxAttrs, function( i, prop ) {
++				hideProps[ prop ] = "hide";
++
++				var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ );
++				showProps[ prop ] = {
++					value: parts[ 1 ],
++					unit: parts[ 2 ] || "px"
++				};
++			});
++			options.toShow.css({ height: 0, overflow: "hidden" }).show();
++			options.toHide
++				.filter( ":hidden" )
++					.each( options.complete )
++				.end()
++				.filter( ":visible" )
++				.animate( hideProps, {
++				step: function( now, settings ) {
++					// only calculate the percent when animating height
++					// IE gets very inconsistent results when animating elements
++					// with small values, which is common for padding
++					if ( settings.prop == "height" ) {
++						percentDone = ( settings.end - settings.start === 0 ) ? 0 :
++							( settings.now - settings.start ) / ( settings.end - settings.start );
++					}
++
++					options.toShow[ 0 ].style[ settings.prop ] =
++						( percentDone * showProps[ settings.prop ].value )
++						+ showProps[ settings.prop ].unit;
++				},
++				duration: options.duration,
++				easing: options.easing,
++				complete: function() {
++					if ( !options.autoHeight ) {
++						options.toShow.css( "height", "" );
++					}
++					options.toShow.css({
++						width: originalWidth,
++						overflow: overflow
++					});
++					options.complete();
++				}
++			});
++		},
++		bounceslide: function( options ) {
++			this.slide( options, {
++				easing: options.down ? "easeOutBounce" : "swing",
++				duration: options.down ? 1000 : 200
++			});
++		}
++	}
++});
++
++})( jQuery );
++/*
++ * jQuery UI Autocomplete 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Autocomplete
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.position.js
++ */
++(function( $, undefined ) {
++
++// used to prevent race conditions with remote data sources
++var requestIndex = 0;
++
++$.widget( "ui.autocomplete", {
++	options: {
++		appendTo: "body",
++		autoFocus: false,
++		delay: 300,
++		minLength: 1,
++		position: {
++			my: "left top",
++			at: "left bottom",
++			collision: "none"
++		},
++		source: null
++	},
++
++	pending: 0,
++
++	_create: function() {
++		var self = this,
++			doc = this.element[ 0 ].ownerDocument,
++			suppressKeyPress;
++
++		this.element
++			.addClass( "ui-autocomplete-input" )
++			.attr( "autocomplete", "off" )
++			// TODO verify these actually work as intended
++			.attr({
++				role: "textbox",
++				"aria-autocomplete": "list",
++				"aria-haspopup": "true"
++			})
++			.bind( "keydown.autocomplete", function( event ) {
++				if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) {
++					return;
++				}
++
++				suppressKeyPress = false;
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					self._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					self._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					self._move( "previous", event );
++					// prevent moving cursor to beginning of text field in some browsers
++					event.preventDefault();
++					break;
++				case keyCode.DOWN:
++					self._move( "next", event );
++					// prevent moving cursor to end of text field in some browsers
++					event.preventDefault();
++					break;
++				case keyCode.ENTER:
++				case keyCode.NUMPAD_ENTER:
++					// when menu is open and has focus
++					if ( self.menu.active ) {
++						// #6055 - Opera still allows the keypress to occur
++						// which causes forms to submit
++						suppressKeyPress = true;
++						event.preventDefault();
++					}
++					//passthrough - ENTER and TAB both select the current element
++				case keyCode.TAB:
++					if ( !self.menu.active ) {
++						return;
++					}
++					self.menu.select( event );
++					break;
++				case keyCode.ESCAPE:
++					self.element.val( self.term );
++					self.close( event );
++					break;
++				default:
++					// keypress is triggered before the input value is changed
++					clearTimeout( self.searching );
++					self.searching = setTimeout(function() {
++						// only search if the value has changed
++						if ( self.term != self.element.val() ) {
++							self.selectedItem = null;
++							self.search( null, event );
++						}
++					}, self.options.delay );
++					break;
++				}
++			})
++			.bind( "keypress.autocomplete", function( event ) {
++				if ( suppressKeyPress ) {
++					suppressKeyPress = false;
++					event.preventDefault();
++				}
++			})
++			.bind( "focus.autocomplete", function() {
++				if ( self.options.disabled ) {
++					return;
++				}
++
++				self.selectedItem = null;
++				self.previous = self.element.val();
++			})
++			.bind( "blur.autocomplete", function( event ) {
++				if ( self.options.disabled ) {
++					return;
++				}
++
++				clearTimeout( self.searching );
++				// clicks on the menu (or a button to trigger a search) will cause a blur event
++				self.closing = setTimeout(function() {
++					self.close( event );
++					self._change( event );
++				}, 150 );
++			});
++		this._initSource();
++		this.response = function() {
++			return self._response.apply( self, arguments );
++		};
++		this.menu = $( "<ul></ul>" )
++			.addClass( "ui-autocomplete" )
++			.appendTo( $( this.options.appendTo || "body", doc )[0] )
++			// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
++			.mousedown(function( event ) {
++				// clicking on the scrollbar causes focus to shift to the body
++				// but we can't detect a mouseup or a click immediately afterward
++				// so we have to track the next mousedown and close the menu if
++				// the user clicks somewhere outside of the autocomplete
++				var menuElement = self.menu.element[ 0 ];
++				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
++					setTimeout(function() {
++						$( document ).one( 'mousedown', function( event ) {
++							if ( event.target !== self.element[ 0 ] &&
++								event.target !== menuElement &&
++								!$.ui.contains( menuElement, event.target ) ) {
++								self.close();
++							}
++						});
++					}, 1 );
++				}
++
++				// use another timeout to make sure the blur-event-handler on the input was already triggered
++				setTimeout(function() {
++					clearTimeout( self.closing );
++				}, 13);
++			})
++			.menu({
++				focus: function( event, ui ) {
++					var item = ui.item.data( "item.autocomplete" );
++					if ( false !== self._trigger( "focus", event, { item: item } ) ) {
++						// use value to match what will end up in the input, if it was a key event
++						if ( /^key/.test(event.originalEvent.type) ) {
++							self.element.val( item.value );
++						}
++					}
++				},
++				selected: function( event, ui ) {
++					var item = ui.item.data( "item.autocomplete" ),
++						previous = self.previous;
++
++					// only trigger when focus was lost (click on menu)
++					if ( self.element[0] !== doc.activeElement ) {
++						self.element.focus();
++						self.previous = previous;
++						// #6109 - IE triggers two focus events and the second
++						// is asynchronous, so we need to reset the previous
++						// term synchronously and asynchronously :-(
++						setTimeout(function() {
++							self.previous = previous;
++							self.selectedItem = item;
++						}, 1);
++					}
++
++					if ( false !== self._trigger( "select", event, { item: item } ) ) {
++						self.element.val( item.value );
++					}
++					// reset the term after the select event
++					// this allows custom select handling to work properly
++					self.term = self.element.val();
++
++					self.close( event );
++					self.selectedItem = item;
++				},
++				blur: function( event, ui ) {
++					// don't set the value of the text field if it's already correct
++					// this prevents moving the cursor unnecessarily
++					if ( self.menu.element.is(":visible") &&
++						( self.element.val() !== self.term ) ) {
++						self.element.val( self.term );
++					}
++				}
++			})
++			.zIndex( this.element.zIndex() + 1 )
++			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
++			.css({ top: 0, left: 0 })
++			.hide()
++			.data( "menu" );
++		if ( $.fn.bgiframe ) {
++			 this.menu.element.bgiframe();
++		}
++	},
++
++	destroy: function() {
++		this.element
++			.removeClass( "ui-autocomplete-input" )
++			.removeAttr( "autocomplete" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-autocomplete" )
++			.removeAttr( "aria-haspopup" );
++		this.menu.element.remove();
++		$.Widget.prototype.destroy.call( this );
++	},
++
++	_setOption: function( key, value ) {
++		$.Widget.prototype._setOption.apply( this, arguments );
++		if ( key === "source" ) {
++			this._initSource();
++		}
++		if ( key === "appendTo" ) {
++			this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] )
++		}
++		if ( key === "disabled" && value && this.xhr ) {
++			this.xhr.abort();
++		}
++	},
++
++	_initSource: function() {
++		var self = this,
++			array,
++			url;
++		if ( $.isArray(this.options.source) ) {
++			array = this.options.source;
++			this.source = function( request, response ) {
++				response( $.ui.autocomplete.filter(array, request.term) );
++			};
++		} else if ( typeof this.options.source === "string" ) {
++			url = this.options.source;
++			this.source = function( request, response ) {
++				if ( self.xhr ) {
++					self.xhr.abort();
++				}
++				self.xhr = $.ajax({
++					url: url,
++					data: request,
++					dataType: "json",
++					autocompleteRequest: ++requestIndex,
++					success: function( data, status ) {
++						if ( this.autocompleteRequest === requestIndex ) {
++							response( data );
++						}
++					},
++					error: function() {
++						if ( this.autocompleteRequest === requestIndex ) {
++							response( [] );
++						}
++					}
++				});
++			};
++		} else {
++			this.source = this.options.source;
++		}
++	},
++
++	search: function( value, event ) {
++		value = value != null ? value : this.element.val();
++
++		// always save the actual value, not the one passed as an argument
++		this.term = this.element.val();
++
++		if ( value.length < this.options.minLength ) {
++			return this.close( event );
++		}
++
++		clearTimeout( this.closing );
++		if ( this._trigger( "search", event ) === false ) {
++			return;
++		}
++
++		return this._search( value );
++	},
++
++	_search: function( value ) {
++		this.pending++;
++		this.element.addClass( "ui-autocomplete-loading" );
++
++		this.source( { term: value }, this.response );
++	},
++
++	_response: function( content ) {
++		if ( !this.options.disabled && content && content.length ) {
++			content = this._normalize( content );
++			this._suggest( content );
++			this._trigger( "open" );
++		} else {
++			this.close();
++		}
++		this.pending--;
++		if ( !this.pending ) {
++			this.element.removeClass( "ui-autocomplete-loading" );
++		}
++	},
++
++	close: function( event ) {
++		clearTimeout( this.closing );
++		if ( this.menu.element.is(":visible") ) {
++			this.menu.element.hide();
++			this.menu.deactivate();
++			this._trigger( "close", event );
++		}
++	},
++	
++	_change: function( event ) {
++		if ( this.previous !== this.element.val() ) {
++			this._trigger( "change", event, { item: this.selectedItem } );
++		}
++	},
++
++	_normalize: function( items ) {
++		// assume all items have the right format when the first item is complete
++		if ( items.length && items[0].label && items[0].value ) {
++			return items;
++		}
++		return $.map( items, function(item) {
++			if ( typeof item === "string" ) {
++				return {
++					label: item,
++					value: item
++				};
++			}
++			return $.extend({
++				label: item.label || item.value,
++				value: item.value || item.label
++			}, item );
++		});
++	},
++
++	_suggest: function( items ) {
++		var ul = this.menu.element
++			.empty()
++			.zIndex( this.element.zIndex() + 1 );
++		this._renderMenu( ul, items );
++		// TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate
++		this.menu.deactivate();
++		this.menu.refresh();
++
++		// size and position menu
++		ul.show();
++		this._resizeMenu();
++		ul.position( $.extend({
++			of: this.element
++		}, this.options.position ));
++
++		if ( this.options.autoFocus ) {
++			this.menu.next( new $.Event("mouseover") );
++		}
++	},
++
++	_resizeMenu: function() {
++		var ul = this.menu.element;
++		ul.outerWidth( Math.max(
++			ul.width( "" ).outerWidth(),
++			this.element.outerWidth()
++		) );
++	},
++
++	_renderMenu: function( ul, items ) {
++		var self = this;
++		$.each( items, function( index, item ) {
++			self._renderItem( ul, item );
++		});
++	},
++
++	_renderItem: function( ul, item) {
++		return $( "<li></li>" )
++			.data( "item.autocomplete", item )
++			.append( $( "<a></a>" ).text( item.label ) )
++			.appendTo( ul );
++	},
++
++	_move: function( direction, event ) {
++		if ( !this.menu.element.is(":visible") ) {
++			this.search( null, event );
++			return;
++		}
++		if ( this.menu.first() && /^previous/.test(direction) ||
++				this.menu.last() && /^next/.test(direction) ) {
++			this.element.val( this.term );
++			this.menu.deactivate();
++			return;
++		}
++		this.menu[ direction ]( event );
++	},
++
++	widget: function() {
++		return this.menu.element;
++	}
++});
++
++$.extend( $.ui.autocomplete, {
++	escapeRegex: function( value ) {
++		return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
++	},
++	filter: function(array, term) {
++		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
++		return $.grep( array, function(value) {
++			return matcher.test( value.label || value.value || value );
++		});
++	}
++});
++
++}( jQuery ));
++
++/*
++ * jQuery UI Menu (not officially released)
++ * 
++ * This widget isn't yet finished and the API is subject to change. We plan to finish
++ * it for the next release. You're welcome to give it a try anyway and give us feedback,
++ * as long as you're okay with migrating your code later on. We can help with that, too.
++ *
++ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Menu
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *  jquery.ui.widget.js
++ */
++(function($) {
++
++$.widget("ui.menu", {
++	_create: function() {
++		var self = this;
++		this.element
++			.addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
++			.attr({
++				role: "listbox",
++				"aria-activedescendant": "ui-active-menuitem"
++			})
++			.click(function( event ) {
++				if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) {
++					return;
++				}
++				// temporary
++				event.preventDefault();
++				self.select( event );
++			});
++		this.refresh();
++	},
++	
++	refresh: function() {
++		var self = this;
++
++		// don't refresh list items that are already adapted
++		var items = this.element.children("li:not(.ui-menu-item):has(a)")
++			.addClass("ui-menu-item")
++			.attr("role", "menuitem");
++		
++		items.children("a")
++			.addClass("ui-corner-all")
++			.attr("tabindex", -1)
++			// mouseenter doesn't work with event delegation
++			.mouseenter(function( event ) {
++				self.activate( event, $(this).parent() );
++			})
++			.mouseleave(function() {
++				self.deactivate();
++			});
++	},
++
++	activate: function( event, item ) {
++		this.deactivate();
++		if (this.hasScroll()) {
++			var offset = item.offset().top - this.element.offset().top,
++				scroll = this.element.scrollTop(),
++				elementHeight = this.element.height();
++			if (offset < 0) {
++				this.element.scrollTop( scroll + offset);
++			} else if (offset >= elementHeight) {
++				this.element.scrollTop( scroll + offset - elementHeight + item.height());
++			}
++		}
++		this.active = item.eq(0)
++			.children("a")
++				.addClass("ui-state-hover")
++				.attr("id", "ui-active-menuitem")
++			.end();
++		this._trigger("focus", event, { item: item });
++	},
++
++	deactivate: function() {
++		if (!this.active) { return; }
++
++		this.active.children("a")
++			.removeClass("ui-state-hover")
++			.removeAttr("id");
++		this._trigger("blur");
++		this.active = null;
++	},
++
++	next: function(event) {
++		this.move("next", ".ui-menu-item:first", event);
++	},
++
++	previous: function(event) {
++		this.move("prev", ".ui-menu-item:last", event);
++	},
++
++	first: function() {
++		return this.active && !this.active.prevAll(".ui-menu-item").length;
++	},
++
++	last: function() {
++		return this.active && !this.active.nextAll(".ui-menu-item").length;
++	},
++
++	move: function(direction, edge, event) {
++		if (!this.active) {
++			this.activate(event, this.element.children(edge));
++			return;
++		}
++		var next = this.active[direction + "All"](".ui-menu-item").eq(0);
++		if (next.length) {
++			this.activate(event, next);
++		} else {
++			this.activate(event, this.element.children(edge));
++		}
++	},
++
++	// TODO merge with previousPage
++	nextPage: function(event) {
++		if (this.hasScroll()) {
++			// TODO merge with no-scroll-else
++			if (!this.active || this.last()) {
++				this.activate(event, this.element.children(".ui-menu-item:first"));
++				return;
++			}
++			var base = this.active.offset().top,
++				height = this.element.height(),
++				result = this.element.children(".ui-menu-item").filter(function() {
++					var close = $(this).offset().top - base - height + $(this).height();
++					// TODO improve approximation
++					return close < 10 && close > -10;
++				});
++
++			// TODO try to catch this earlier when scrollTop indicates the last page anyway
++			if (!result.length) {
++				result = this.element.children(".ui-menu-item:last");
++			}
++			this.activate(event, result);
++		} else {
++			this.activate(event, this.element.children(".ui-menu-item")
++				.filter(!this.active || this.last() ? ":first" : ":last"));
++		}
++	},
++
++	// TODO merge with nextPage
++	previousPage: function(event) {
++		if (this.hasScroll()) {
++			// TODO merge with no-scroll-else
++			if (!this.active || this.first()) {
++				this.activate(event, this.element.children(".ui-menu-item:last"));
++				return;
++			}
++
++			var base = this.active.offset().top,
++				height = this.element.height();
++				result = this.element.children(".ui-menu-item").filter(function() {
++					var close = $(this).offset().top - base + height - $(this).height();
++					// TODO improve approximation
++					return close < 10 && close > -10;
++				});
++
++			// TODO try to catch this earlier when scrollTop indicates the last page anyway
++			if (!result.length) {
++				result = this.element.children(".ui-menu-item:first");
++			}
++			this.activate(event, result);
++		} else {
++			this.activate(event, this.element.children(".ui-menu-item")
++				.filter(!this.active || this.first() ? ":last" : ":first"));
++		}
++	},
++
++	hasScroll: function() {
++		return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight");
++	},
++
++	select: function( event ) {
++		this._trigger("selected", event, { item: this.active });
++	}
++});
++
++}(jQuery));
++/*
++ * jQuery UI Button 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Button
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var lastActive, startXPos, startYPos, clickDragged,
++	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
++	stateClasses = "ui-state-hover ui-state-active ",
++	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
++	formResetHandler = function() {
++		var buttons = $( this ).find( ":ui-button" );
++		setTimeout(function() {
++			buttons.button( "refresh" );
++		}, 1 );
++	},
++	radioGroup = function( radio ) {
++		var name = radio.name,
++			form = radio.form,
++			radios = $( [] );
++		if ( name ) {
++			if ( form ) {
++				radios = $( form ).find( "[name='" + name + "']" );
++			} else {
++				radios = $( "[name='" + name + "']", radio.ownerDocument )
++					.filter(function() {
++						return !this.form;
++					});
++			}
++		}
++		return radios;
++	};
++
++$.widget( "ui.button", {
++	options: {
++		disabled: null,
++		text: true,
++		label: null,
++		icons: {
++			primary: null,
++			secondary: null
++		}
++	},
++	_create: function() {
++		this.element.closest( "form" )
++			.unbind( "reset.button" )
++			.bind( "reset.button", formResetHandler );
++
++		if ( typeof this.options.disabled !== "boolean" ) {
++			this.options.disabled = this.element.propAttr( "disabled" );
++		}
++
++		this._determineButtonType();
++		this.hasTitle = !!this.buttonElement.attr( "title" );
++
++		var self = this,
++			options = this.options,
++			toggleButton = this.type === "checkbox" || this.type === "radio",
++			hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ),
++			focusClass = "ui-state-focus";
++
++		if ( options.label === null ) {
++			options.label = this.buttonElement.html();
++		}
++
++		if ( this.element.is( ":disabled" ) ) {
++			options.disabled = true;
++		}
++
++		this.buttonElement
++			.addClass( baseClasses )
++			.attr( "role", "button" )
++			.bind( "mouseenter.button", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).addClass( "ui-state-hover" );
++				if ( this === lastActive ) {
++					$( this ).addClass( "ui-state-active" );
++				}
++			})
++			.bind( "mouseleave.button", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( hoverClass );
++			})
++			.bind( "click.button", function( event ) {
++				if ( options.disabled ) {
++					event.preventDefault();
++					event.stopImmediatePropagation();
++				}
++			});
++
++		this.element
++			.bind( "focus.button", function() {
++				// no need to check disabled, focus won't be triggered anyway
++				self.buttonElement.addClass( focusClass );
++			})
++			.bind( "blur.button", function() {
++				self.buttonElement.removeClass( focusClass );
++			});
++
++		if ( toggleButton ) {
++			this.element.bind( "change.button", function() {
++				if ( clickDragged ) {
++					return;
++				}
++				self.refresh();
++			});
++			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
++			// prevents issue where button state changes but checkbox/radio checked state
++			// does not in Firefox (see ticket #6970)
++			this.buttonElement
++				.bind( "mousedown.button", function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					clickDragged = false;
++					startXPos = event.pageX;
++					startYPos = event.pageY;
++				})
++				.bind( "mouseup.button", function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
++						clickDragged = true;
++					}
++			});
++		}
++
++		if ( this.type === "checkbox" ) {
++			this.buttonElement.bind( "click.button", function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).toggleClass( "ui-state-active" );
++				self.buttonElement.attr( "aria-pressed", self.element[0].checked );
++			});
++		} else if ( this.type === "radio" ) {
++			this.buttonElement.bind( "click.button", function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).addClass( "ui-state-active" );
++				self.buttonElement.attr( "aria-pressed", "true" );
++
++				var radio = self.element[ 0 ];
++				radioGroup( radio )
++					.not( radio )
++					.map(function() {
++						return $( this ).button( "widget" )[ 0 ];
++					})
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			});
++		} else {
++			this.buttonElement
++				.bind( "mousedown.button", function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).addClass( "ui-state-active" );
++					lastActive = this;
++					$( document ).one( "mouseup", function() {
++						lastActive = null;
++					});
++				})
++				.bind( "mouseup.button", function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).removeClass( "ui-state-active" );
++				})
++				.bind( "keydown.button", function(event) {
++					if ( options.disabled ) {
++						return false;
++					}
++					if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) {
++						$( this ).addClass( "ui-state-active" );
++					}
++				})
++				.bind( "keyup.button", function() {
++					$( this ).removeClass( "ui-state-active" );
++				});
++
++			if ( this.buttonElement.is("a") ) {
++				this.buttonElement.keyup(function(event) {
++					if ( event.keyCode === $.ui.keyCode.SPACE ) {
++						// TODO pass through original event correctly (just as 2nd argument doesn't work)
++						$( this ).click();
++					}
++				});
++			}
++		}
++
++		// TODO: pull out $.Widget's handling for the disabled option into
++		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
++		// be overridden by individual plugins
++		this._setOption( "disabled", options.disabled );
++		this._resetButton();
++	},
++
++	_determineButtonType: function() {
++
++		if ( this.element.is(":checkbox") ) {
++			this.type = "checkbox";
++		} else if ( this.element.is(":radio") ) {
++			this.type = "radio";
++		} else if ( this.element.is("input") ) {
++			this.type = "input";
++		} else {
++			this.type = "button";
++		}
++
++		if ( this.type === "checkbox" || this.type === "radio" ) {
++			// we don't search against the document in case the element
++			// is disconnected from the DOM
++			var ancestor = this.element.parents().filter(":last"),
++				labelSelector = "label[for=" + this.element.attr("id") + "]";
++			this.buttonElement = ancestor.find( labelSelector );
++			if ( !this.buttonElement.length ) {
++				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
++				this.buttonElement = ancestor.filter( labelSelector );
++				if ( !this.buttonElement.length ) {
++					this.buttonElement = ancestor.find( labelSelector );
++				}
++			}
++			this.element.addClass( "ui-helper-hidden-accessible" );
++
++			var checked = this.element.is( ":checked" );
++			if ( checked ) {
++				this.buttonElement.addClass( "ui-state-active" );
++			}
++			this.buttonElement.attr( "aria-pressed", checked );
++		} else {
++			this.buttonElement = this.element;
++		}
++	},
++
++	widget: function() {
++		return this.buttonElement;
++	},
++
++	destroy: function() {
++		this.element
++			.removeClass( "ui-helper-hidden-accessible" );
++		this.buttonElement
++			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
++			.removeAttr( "role" )
++			.removeAttr( "aria-pressed" )
++			.html( this.buttonElement.find(".ui-button-text").html() );
++
++		if ( !this.hasTitle ) {
++			this.buttonElement.removeAttr( "title" );
++		}
++
++		$.Widget.prototype.destroy.call( this );
++	},
++
++	_setOption: function( key, value ) {
++		$.Widget.prototype._setOption.apply( this, arguments );
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.propAttr( "disabled", true );
++			} else {
++				this.element.propAttr( "disabled", false );
++			}
++			return;
++		}
++		this._resetButton();
++	},
++
++	refresh: function() {
++		var isDisabled = this.element.is( ":disabled" );
++		if ( isDisabled !== this.options.disabled ) {
++			this._setOption( "disabled", isDisabled );
++		}
++		if ( this.type === "radio" ) {
++			radioGroup( this.element[0] ).each(function() {
++				if ( $( this ).is( ":checked" ) ) {
++					$( this ).button( "widget" )
++						.addClass( "ui-state-active" )
++						.attr( "aria-pressed", "true" );
++				} else {
++					$( this ).button( "widget" )
++						.removeClass( "ui-state-active" )
++						.attr( "aria-pressed", "false" );
++				}
++			});
++		} else if ( this.type === "checkbox" ) {
++			if ( this.element.is( ":checked" ) ) {
++				this.buttonElement
++					.addClass( "ui-state-active" )
++					.attr( "aria-pressed", "true" );
++			} else {
++				this.buttonElement
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			}
++		}
++	},
++
++	_resetButton: function() {
++		if ( this.type === "input" ) {
++			if ( this.options.label ) {
++				this.element.val( this.options.label );
++			}
++			return;
++		}
++		var buttonElement = this.buttonElement.removeClass( typeClasses ),
++			buttonText = $( "<span></span>" )
++				.addClass( "ui-button-text" )
++				.html( this.options.label )
++				.appendTo( buttonElement.empty() )
++				.text(),
++			icons = this.options.icons,
++			multipleIcons = icons.primary && icons.secondary,
++			buttonClasses = [];  
++
++		if ( icons.primary || icons.secondary ) {
++			if ( this.options.text ) {
++				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
++			}
++
++			if ( icons.primary ) {
++				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
++			}
++
++			if ( icons.secondary ) {
++				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
++			}
++
++			if ( !this.options.text ) {
++				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
++
++				if ( !this.hasTitle ) {
++					buttonElement.attr( "title", buttonText );
++				}
++			}
++		} else {
++			buttonClasses.push( "ui-button-text-only" );
++		}
++		buttonElement.addClass( buttonClasses.join( " " ) );
++	}
++});
++
++$.widget( "ui.buttonset", {
++	options: {
++		items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)"
++	},
++
++	_create: function() {
++		this.element.addClass( "ui-buttonset" );
++	},
++	
++	_init: function() {
++		this.refresh();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "disabled" ) {
++			this.buttons.button( "option", key, value );
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++	},
++	
++	refresh: function() {
++		var ltr = this.element.css( "direction" ) === "ltr";
++		
++		this.buttons = this.element.find( this.options.items )
++			.filter( ":ui-button" )
++				.button( "refresh" )
++			.end()
++			.not( ":ui-button" )
++				.button()
++			.end()
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
++				.filter( ":first" )
++					.addClass( ltr ? "ui-corner-left" : "ui-corner-right" )
++				.end()
++				.filter( ":last" )
++					.addClass( ltr ? "ui-corner-right" : "ui-corner-left" )
++				.end()
++			.end();
++	},
++
++	destroy: function() {
++		this.element.removeClass( "ui-buttonset" );
++		this.buttons
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-left ui-corner-right" )
++			.end()
++			.button( "destroy" );
++
++		$.Widget.prototype.destroy.call( this );
++	}
++});
++
++}( jQuery ) );
++/*
++ * jQuery UI Datepicker 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Datepicker
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ */
++(function( $, undefined ) {
++
++$.extend($.ui, { datepicker: { version: "1.8.15" } });
++
++var PROP_NAME = 'datepicker';
++var dpuuid = new Date().getTime();
++var instActive;
++
++/* Date picker manager.
++   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
++   Settings for (groups of) date pickers are maintained in an instance object,
++   allowing multiple different settings on the same page. */
++
++function Datepicker() {
++	this.debug = false; // Change this to true to start debugging
++	this._curInst = null; // The current instance in use
++	this._keyEvent = false; // If the last event was a key event
++	this._disabledInputs = []; // List of date picker inputs that have been disabled
++	this._datepickerShowing = false; // True if the popup picker is showing , false if not
++	this._inDialog = false; // True if showing within a "dialog", false if not
++	this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
++	this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
++	this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
++	this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
++	this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
++	this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
++	this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
++	this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
++	this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
++	this.regional = []; // Available regional settings, indexed by language code
++	this.regional[''] = { // Default regional settings
++		closeText: 'Done', // Display text for close link
++		prevText: 'Prev', // Display text for previous month link
++		nextText: 'Next', // Display text for next month link
++		currentText: 'Today', // Display text for current month link
++		monthNames: ['January','February','March','April','May','June',
++			'July','August','September','October','November','December'], // Names of months for drop-down and formatting
++		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
++		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
++		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
++		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
++		weekHeader: 'Wk', // Column header for week of the year
++		dateFormat: 'mm/dd/yy', // See format options on parseDate
++		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
++		isRTL: false, // True if right-to-left language, false if left-to-right
++		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
++		yearSuffix: '' // Additional text to append to the year in the month headers
++	};
++	this._defaults = { // Global defaults for all the date picker instances
++		showOn: 'focus', // 'focus' for popup on focus,
++			// 'button' for trigger button, or 'both' for either
++		showAnim: 'fadeIn', // Name of jQuery animation for popup
++		showOptions: {}, // Options for enhanced animations
++		defaultDate: null, // Used when field is blank: actual date,
++			// +/-number for offset from today, null for today
++		appendText: '', // Display text following the input box, e.g. showing the format
++		buttonText: '...', // Text for trigger button
++		buttonImage: '', // URL for trigger button image
++		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
++		hideIfNoPrevNext: false, // True to hide next/previous month links
++			// if not applicable, false to just disable them
++		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
++		gotoCurrent: false, // True if today link goes back to current selection instead
++		changeMonth: false, // True if month can be selected directly, false if only prev/next
++		changeYear: false, // True if year can be selected directly, false if only prev/next
++		yearRange: 'c-10:c+10', // Range of years to display in drop-down,
++			// either relative to today's year (-nn:+nn), relative to currently displayed year
++			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
++		showOtherMonths: false, // True to show dates in other months, false to leave blank
++		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
++		showWeek: false, // True to show week of the year, false to not show it
++		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
++			// takes a Date and returns the number of the week for it
++		shortYearCutoff: '+10', // Short year values < this are in the current century,
++			// > this are in the previous century,
++			// string value starting with '+' for current year + value
++		minDate: null, // The earliest selectable date, or null for no limit
++		maxDate: null, // The latest selectable date, or null for no limit
++		duration: 'fast', // Duration of display/closure
++		beforeShowDay: null, // Function that takes a date and returns an array with
++			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
++			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
++		beforeShow: null, // Function that takes an input field and
++			// returns a set of custom settings for the date picker
++		onSelect: null, // Define a callback function when a date is selected
++		onChangeMonthYear: null, // Define a callback function when the month or year is changed
++		onClose: null, // Define a callback function when the datepicker is closed
++		numberOfMonths: 1, // Number of months to show at a time
++		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
++		stepMonths: 1, // Number of months to step back/forward
++		stepBigMonths: 12, // Number of months to step back/forward for the big links
++		altField: '', // Selector for an alternate field to store selected dates into
++		altFormat: '', // The date format to use for the alternate field
++		constrainInput: true, // The input is constrained by the current date format
++		showButtonPanel: false, // True to show button panel, false to not show it
++		autoSize: false, // True to size the input for the date format, false to leave as is
++		disabled: false // The initial disabled state
++	};
++	$.extend(this._defaults, this.regional['']);
++	this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'));
++}
++
++$.extend(Datepicker.prototype, {
++	/* Class name added to elements to indicate already configured with a date picker. */
++	markerClassName: 'hasDatepicker',
++	
++	//Keep track of the maximum number of rows displayed (see #7043)
++	maxRows: 4,
++
++	/* Debug logging (if enabled). */
++	log: function () {
++		if (this.debug)
++			console.log.apply('', arguments);
++	},
++	
++	// TODO rename to "widget" when switching to widget factory
++	_widgetDatepicker: function() {
++		return this.dpDiv;
++	},
++
++	/* Override the default settings for all instances of the date picker.
++	   @param  settings  object - the new settings to use as defaults (anonymous object)
++	   @return the manager object */
++	setDefaults: function(settings) {
++		extendRemove(this._defaults, settings || {});
++		return this;
++	},
++
++	/* Attach the date picker to a jQuery selection.
++	   @param  target    element - the target input field or division or span
++	   @param  settings  object - the new settings to use for this date picker instance (anonymous) */
++	_attachDatepicker: function(target, settings) {
++		// check for settings on the control itself - in namespace 'date:'
++		var inlineSettings = null;
++		for (var attrName in this._defaults) {
++			var attrValue = target.getAttribute('date:' + attrName);
++			if (attrValue) {
++				inlineSettings = inlineSettings || {};
++				try {
++					inlineSettings[attrName] = eval(attrValue);
++				} catch (err) {
++					inlineSettings[attrName] = attrValue;
++				}
++			}
++		}
++		var nodeName = target.nodeName.toLowerCase();
++		var inline = (nodeName == 'div' || nodeName == 'span');
++		if (!target.id) {
++			this.uuid += 1;
++			target.id = 'dp' + this.uuid;
++		}
++		var inst = this._newInst($(target), inline);
++		inst.settings = $.extend({}, settings || {}, inlineSettings || {});
++		if (nodeName == 'input') {
++			this._connectDatepicker(target, inst);
++		} else if (inline) {
++			this._inlineDatepicker(target, inst);
++		}
++	},
++
++	/* Create a new instance object. */
++	_newInst: function(target, inline) {
++		var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars
++		return {id: id, input: target, // associated target
++			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
++			drawMonth: 0, drawYear: 0, // month being drawn
++			inline: inline, // is datepicker inline or not
++			dpDiv: (!inline ? this.dpDiv : // presentation div
++			bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')))};
++	},
++
++	/* Attach the date picker to an input field. */
++	_connectDatepicker: function(target, inst) {
++		var input = $(target);
++		inst.append = $([]);
++		inst.trigger = $([]);
++		if (input.hasClass(this.markerClassName))
++			return;
++		this._attachments(input, inst);
++		input.addClass(this.markerClassName).keydown(this._doKeyDown).
++			keypress(this._doKeyPress).keyup(this._doKeyUp).
++			bind("setData.datepicker", function(event, key, value) {
++				inst.settings[key] = value;
++			}).bind("getData.datepicker", function(event, key) {
++				return this._get(inst, key);
++			});
++		this._autoSize(inst);
++		$.data(target, PROP_NAME, inst);
++		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++	},
++
++	/* Make attachments based on settings. */
++	_attachments: function(input, inst) {
++		var appendText = this._get(inst, 'appendText');
++		var isRTL = this._get(inst, 'isRTL');
++		if (inst.append)
++			inst.append.remove();
++		if (appendText) {
++			inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
++			input[isRTL ? 'before' : 'after'](inst.append);
++		}
++		input.unbind('focus', this._showDatepicker);
++		if (inst.trigger)
++			inst.trigger.remove();
++		var showOn = this._get(inst, 'showOn');
++		if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
++			input.focus(this._showDatepicker);
++		if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
++			var buttonText = this._get(inst, 'buttonText');
++			var buttonImage = this._get(inst, 'buttonImage');
++			inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
++				$('<img/>').addClass(this._triggerClass).
++					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
++				$('<button type="button"></button>').addClass(this._triggerClass).
++					html(buttonImage == '' ? buttonText : $('<img/>').attr(
++					{ src:buttonImage, alt:buttonText, title:buttonText })));
++			input[isRTL ? 'before' : 'after'](inst.trigger);
++			inst.trigger.click(function() {
++				if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])
++					$.datepicker._hideDatepicker();
++				else
++					$.datepicker._showDatepicker(input[0]);
++				return false;
++			});
++		}
++	},
++
++	/* Apply the maximum length for the date format. */
++	_autoSize: function(inst) {
++		if (this._get(inst, 'autoSize') && !inst.inline) {
++			var date = new Date(2009, 12 - 1, 20); // Ensure double digits
++			var dateFormat = this._get(inst, 'dateFormat');
++			if (dateFormat.match(/[DM]/)) {
++				var findMax = function(names) {
++					var max = 0;
++					var maxI = 0;
++					for (var i = 0; i < names.length; i++) {
++						if (names[i].length > max) {
++							max = names[i].length;
++							maxI = i;
++						}
++					}
++					return maxI;
++				};
++				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
++					'monthNames' : 'monthNamesShort'))));
++				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
++					'dayNames' : 'dayNamesShort'))) + 20 - date.getDay());
++			}
++			inst.input.attr('size', this._formatDate(inst, date).length);
++		}
++	},
++
++	/* Attach an inline date picker to a div. */
++	_inlineDatepicker: function(target, inst) {
++		var divSpan = $(target);
++		if (divSpan.hasClass(this.markerClassName))
++			return;
++		divSpan.addClass(this.markerClassName).append(inst.dpDiv).
++			bind("setData.datepicker", function(event, key, value){
++				inst.settings[key] = value;
++			}).bind("getData.datepicker", function(event, key){
++				return this._get(inst, key);
++			});
++		$.data(target, PROP_NAME, inst);
++		this._setDate(inst, this._getDefaultDate(inst), true);
++		this._updateDatepicker(inst);
++		this._updateAlternate(inst);
++		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
++		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
++		inst.dpDiv.css( "display", "block" );
++	},
++
++	/* Pop-up the date picker in a "dialog" box.
++	   @param  input     element - ignored
++	   @param  date      string or Date - the initial date to display
++	   @param  onSelect  function - the function to call when a date is selected
++	   @param  settings  object - update the dialog date picker instance's settings (anonymous object)
++	   @param  pos       int[2] - coordinates for the dialog's position within the screen or
++	                     event - with x/y coordinates or
++	                     leave empty for default (screen centre)
++	   @return the manager object */
++	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
++		var inst = this._dialogInst; // internal instance
++		if (!inst) {
++			this.uuid += 1;
++			var id = 'dp' + this.uuid;
++			this._dialogInput = $('<input type="text" id="' + id +
++				'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
++			this._dialogInput.keydown(this._doKeyDown);
++			$('body').append(this._dialogInput);
++			inst = this._dialogInst = this._newInst(this._dialogInput, false);
++			inst.settings = {};
++			$.data(this._dialogInput[0], PROP_NAME, inst);
++		}
++		extendRemove(inst.settings, settings || {});
++		date = (date && date.constructor == Date ? this._formatDate(inst, date) : date);
++		this._dialogInput.val(date);
++
++		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
++		if (!this._pos) {
++			var browserWidth = document.documentElement.clientWidth;
++			var browserHeight = document.documentElement.clientHeight;
++			var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
++			var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
++			this._pos = // should use actual width/height below
++				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
++		}
++
++		// move input on screen for focus, but hidden behind dialog
++		this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px');
++		inst.settings.onSelect = onSelect;
++		this._inDialog = true;
++		this.dpDiv.addClass(this._dialogClass);
++		this._showDatepicker(this._dialogInput[0]);
++		if ($.blockUI)
++			$.blockUI(this.dpDiv);
++		$.data(this._dialogInput[0], PROP_NAME, inst);
++		return this;
++	},
++
++	/* Detach a datepicker from its control.
++	   @param  target    element - the target input field or division or span */
++	_destroyDatepicker: function(target) {
++		var $target = $(target);
++		var inst = $.data(target, PROP_NAME);
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++		var nodeName = target.nodeName.toLowerCase();
++		$.removeData(target, PROP_NAME);
++		if (nodeName == 'input') {
++			inst.append.remove();
++			inst.trigger.remove();
++			$target.removeClass(this.markerClassName).
++				unbind('focus', this._showDatepicker).
++				unbind('keydown', this._doKeyDown).
++				unbind('keypress', this._doKeyPress).
++				unbind('keyup', this._doKeyUp);
++		} else if (nodeName == 'div' || nodeName == 'span')
++			$target.removeClass(this.markerClassName).empty();
++	},
++
++	/* Enable the date picker to a jQuery selection.
++	   @param  target    element - the target input field or division or span */
++	_enableDatepicker: function(target) {
++		var $target = $(target);
++		var inst = $.data(target, PROP_NAME);
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++		var nodeName = target.nodeName.toLowerCase();
++		if (nodeName == 'input') {
++			target.disabled = false;
++			inst.trigger.filter('button').
++				each(function() { this.disabled = false; }).end().
++				filter('img').css({opacity: '1.0', cursor: ''});
++		}
++		else if (nodeName == 'div' || nodeName == 'span') {
++			var inline = $target.children('.' + this._inlineClass);
++			inline.children().removeClass('ui-state-disabled');
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				removeAttr("disabled");
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value == target ? null : value); }); // delete entry
++	},
++
++	/* Disable the date picker to a jQuery selection.
++	   @param  target    element - the target input field or division or span */
++	_disableDatepicker: function(target) {
++		var $target = $(target);
++		var inst = $.data(target, PROP_NAME);
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++		var nodeName = target.nodeName.toLowerCase();
++		if (nodeName == 'input') {
++			target.disabled = true;
++			inst.trigger.filter('button').
++				each(function() { this.disabled = true; }).end().
++				filter('img').css({opacity: '0.5', cursor: 'default'});
++		}
++		else if (nodeName == 'div' || nodeName == 'span') {
++			var inline = $target.children('.' + this._inlineClass);
++			inline.children().addClass('ui-state-disabled');
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				attr("disabled", "disabled");
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value == target ? null : value); }); // delete entry
++		this._disabledInputs[this._disabledInputs.length] = target;
++	},
++
++	/* Is the first field in a jQuery collection disabled as a datepicker?
++	   @param  target    element - the target input field or division or span
++	   @return boolean - true if disabled, false if enabled */
++	_isDisabledDatepicker: function(target) {
++		if (!target) {
++			return false;
++		}
++		for (var i = 0; i < this._disabledInputs.length; i++) {
++			if (this._disabledInputs[i] == target)
++				return true;
++		}
++		return false;
++	},
++
++	/* Retrieve the instance data for the target control.
++	   @param  target  element - the target input field or division or span
++	   @return  object - the associated instance data
++	   @throws  error if a jQuery problem getting data */
++	_getInst: function(target) {
++		try {
++			return $.data(target, PROP_NAME);
++		}
++		catch (err) {
++			throw 'Missing instance data for this datepicker';
++		}
++	},
++
++	/* Update or retrieve the settings for a date picker attached to an input field or division.
++	   @param  target  element - the target input field or division or span
++	   @param  name    object - the new settings to update or
++	                   string - the name of the setting to change or retrieve,
++	                   when retrieving also 'all' for all instance settings or
++	                   'defaults' for all global defaults
++	   @param  value   any - the new value for the setting
++	                   (omit if above is an object or to retrieve a value) */
++	_optionDatepicker: function(target, name, value) {
++		var inst = this._getInst(target);
++		if (arguments.length == 2 && typeof name == 'string') {
++			return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
++				(inst ? (name == 'all' ? $.extend({}, inst.settings) :
++				this._get(inst, name)) : null));
++		}
++		var settings = name || {};
++		if (typeof name == 'string') {
++			settings = {};
++			settings[name] = value;
++		}
++		if (inst) {
++			if (this._curInst == inst) {
++				this._hideDatepicker();
++			}
++			var date = this._getDateDatepicker(target, true);
++			var minDate = this._getMinMaxDate(inst, 'min');
++			var maxDate = this._getMinMaxDate(inst, 'max');
++			extendRemove(inst.settings, settings);
++			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
++			if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined)
++				inst.settings.minDate = this._formatDate(inst, minDate);
++			if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined)
++				inst.settings.maxDate = this._formatDate(inst, maxDate);
++			this._attachments($(target), inst);
++			this._autoSize(inst);
++			this._setDate(inst, date);
++			this._updateAlternate(inst);
++			this._updateDatepicker(inst);
++		}
++	},
++
++	// change method deprecated
++	_changeDatepicker: function(target, name, value) {
++		this._optionDatepicker(target, name, value);
++	},
++
++	/* Redraw the date picker attached to an input field or division.
++	   @param  target  element - the target input field or division or span */
++	_refreshDatepicker: function(target) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._updateDatepicker(inst);
++		}
++	},
++
++	/* Set the dates for a jQuery selection.
++	   @param  target   element - the target input field or division or span
++	   @param  date     Date - the new date */
++	_setDateDatepicker: function(target, date) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._setDate(inst, date);
++			this._updateDatepicker(inst);
++			this._updateAlternate(inst);
++		}
++	},
++
++	/* Get the date(s) for the first entry in a jQuery selection.
++	   @param  target     element - the target input field or division or span
++	   @param  noDefault  boolean - true if no default date is to be used
++	   @return Date - the current date */
++	_getDateDatepicker: function(target, noDefault) {
++		var inst = this._getInst(target);
++		if (inst && !inst.inline)
++			this._setDateFromField(inst, noDefault);
++		return (inst ? this._getDate(inst) : null);
++	},
++
++	/* Handle keystrokes. */
++	_doKeyDown: function(event) {
++		var inst = $.datepicker._getInst(event.target);
++		var handled = true;
++		var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
++		inst._keyEvent = true;
++		if ($.datepicker._datepickerShowing)
++			switch (event.keyCode) {
++				case 9: $.datepicker._hideDatepicker();
++						handled = false;
++						break; // hide on tab out
++				case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + 
++									$.datepicker._currentClass + ')', inst.dpDiv);
++						if (sel[0])
++							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
++							var onSelect = $.datepicker._get(inst, 'onSelect');
++							if (onSelect) {
++								var dateStr = $.datepicker._formatDate(inst);
++
++								// trigger custom callback
++								onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++							}
++						else
++							$.datepicker._hideDatepicker();
++						return false; // don't submit the form
++						break; // select the value on enter
++				case 27: $.datepicker._hideDatepicker();
++						break; // hide on escape
++				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							-$.datepicker._get(inst, 'stepBigMonths') :
++							-$.datepicker._get(inst, 'stepMonths')), 'M');
++						break; // previous month/year on page up/+ ctrl
++				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							+$.datepicker._get(inst, 'stepBigMonths') :
++							+$.datepicker._get(inst, 'stepMonths')), 'M');
++						break; // next month/year on page down/+ ctrl
++				case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
++						handled = event.ctrlKey || event.metaKey;
++						break; // clear on ctrl or command +end
++				case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
++						handled = event.ctrlKey || event.metaKey;
++						break; // current on ctrl or command +home
++				case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
++						handled = event.ctrlKey || event.metaKey;
++						// -1 day on ctrl or command +left
++						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++									-$.datepicker._get(inst, 'stepBigMonths') :
++									-$.datepicker._get(inst, 'stepMonths')), 'M');
++						// next month/year on alt +left on Mac
++						break;
++				case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
++						handled = event.ctrlKey || event.metaKey;
++						break; // -1 week on ctrl or command +up
++				case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
++						handled = event.ctrlKey || event.metaKey;
++						// +1 day on ctrl or command +right
++						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++									+$.datepicker._get(inst, 'stepBigMonths') :
++									+$.datepicker._get(inst, 'stepMonths')), 'M');
++						// next month/year on alt +right
++						break;
++				case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
++						handled = event.ctrlKey || event.metaKey;
++						break; // +1 week on ctrl or command +down
++				default: handled = false;
++			}
++		else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
++			$.datepicker._showDatepicker(this);
++		else {
++			handled = false;
++		}
++		if (handled) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++	},
++
++	/* Filter entered characters - based on date format. */
++	_doKeyPress: function(event) {
++		var inst = $.datepicker._getInst(event.target);
++		if ($.datepicker._get(inst, 'constrainInput')) {
++			var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
++			var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
++			return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
++		}
++	},
++
++	/* Synchronise manual entry and field/alternate field. */
++	_doKeyUp: function(event) {
++		var inst = $.datepicker._getInst(event.target);
++		if (inst.input.val() != inst.lastVal) {
++			try {
++				var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
++					(inst.input ? inst.input.val() : null),
++					$.datepicker._getFormatConfig(inst));
++				if (date) { // only if valid
++					$.datepicker._setDateFromField(inst);
++					$.datepicker._updateAlternate(inst);
++					$.datepicker._updateDatepicker(inst);
++				}
++			}
++			catch (event) {
++				$.datepicker.log(event);
++			}
++		}
++		return true;
++	},
++
++	/* Pop-up the date picker for a given input field.
++	   @param  input  element - the input field attached to the date picker or
++	                  event - if triggered by focus */
++	_showDatepicker: function(input) {
++		input = input.target || input;
++		if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
++			input = $('input', input.parentNode)[0];
++		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
++			return;
++		var inst = $.datepicker._getInst(input);
++		if ($.datepicker._curInst && $.datepicker._curInst != inst) {
++			if ( $.datepicker._datepickerShowing ) {
++				$.datepicker._triggerOnClose($.datepicker._curInst);
++			}
++			$.datepicker._curInst.dpDiv.stop(true, true);
++		}
++		var beforeShow = $.datepicker._get(inst, 'beforeShow');
++		extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
++		inst.lastVal = null;
++		$.datepicker._lastInput = input;
++		$.datepicker._setDateFromField(inst);
++		if ($.datepicker._inDialog) // hide cursor
++			input.value = '';
++		if (!$.datepicker._pos) { // position below input
++			$.datepicker._pos = $.datepicker._findPos(input);
++			$.datepicker._pos[1] += input.offsetHeight; // add the height
++		}
++		var isFixed = false;
++		$(input).parents().each(function() {
++			isFixed |= $(this).css('position') == 'fixed';
++			return !isFixed;
++		});
++		if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
++			$.datepicker._pos[0] -= document.documentElement.scrollLeft;
++			$.datepicker._pos[1] -= document.documentElement.scrollTop;
++		}
++		var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
++		$.datepicker._pos = null;
++		//to avoid flashes on Firefox
++		inst.dpDiv.empty();
++		// determine sizing offscreen
++		inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
++		$.datepicker._updateDatepicker(inst);
++		// fix width for dynamic number of date pickers
++		// and adjust position before showing
++		offset = $.datepicker._checkOffset(inst, offset, isFixed);
++		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
++			'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
++			left: offset.left + 'px', top: offset.top + 'px'});
++		if (!inst.inline) {
++			var showAnim = $.datepicker._get(inst, 'showAnim');
++			var duration = $.datepicker._get(inst, 'duration');
++			var postProcess = function() {
++				var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
++				if( !! cover.length ){
++					var borders = $.datepicker._getBorders(inst.dpDiv);
++					cover.css({left: -borders[0], top: -borders[1],
++						width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});
++				}
++			};
++			inst.dpDiv.zIndex($(input).zIndex()+1);
++			$.datepicker._datepickerShowing = true;
++			if ($.effects && $.effects[showAnim])
++				inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
++			else
++				inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);
++			if (!showAnim || !duration)
++				postProcess();
++			if (inst.input.is(':visible') && !inst.input.is(':disabled'))
++				inst.input.focus();
++			$.datepicker._curInst = inst;
++		}
++	},
++
++	/* Generate the date picker content. */
++	_updateDatepicker: function(inst) {
++		var self = this;
++		self.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
++		var borders = $.datepicker._getBorders(inst.dpDiv);
++		instActive = inst; // for delegate hover events
++		inst.dpDiv.empty().append(this._generateHTML(inst));
++		var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
++		if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
++			cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
++		}
++		inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover();
++		var numMonths = this._getNumberOfMonths(inst);
++		var cols = numMonths[1];
++		var width = 17;
++		inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
++		if (cols > 1)
++			inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
++		inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
++			'Class']('ui-datepicker-multi');
++		inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
++			'Class']('ui-datepicker-rtl');
++		if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
++				// #6694 - don't focus the input if it's already focused
++				// this breaks the change event in IE
++				inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)
++			inst.input.focus();
++		// deffered render of the years select (to avoid flashes on Firefox) 
++		if( inst.yearshtml ){
++			var origyearshtml = inst.yearshtml;
++			setTimeout(function(){
++				//assure that inst.yearshtml didn't change.
++				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
++					inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
++				}
++				origyearshtml = inst.yearshtml = null;
++			}, 0);
++		}
++	},
++
++	/* Retrieve the size of left and top borders for an element.
++	   @param  elem  (jQuery object) the element of interest
++	   @return  (number[2]) the left and top borders */
++	_getBorders: function(elem) {
++		var convert = function(value) {
++			return {thin: 1, medium: 2, thick: 3}[value] || value;
++		};
++		return [parseFloat(convert(elem.css('border-left-width'))),
++			parseFloat(convert(elem.css('border-top-width')))];
++	},
++
++	/* Check positioning to remain on screen. */
++	_checkOffset: function(inst, offset, isFixed) {
++		var dpWidth = inst.dpDiv.outerWidth();
++		var dpHeight = inst.dpDiv.outerHeight();
++		var inputWidth = inst.input ? inst.input.outerWidth() : 0;
++		var inputHeight = inst.input ? inst.input.outerHeight() : 0;
++		var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft();
++		var viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
++
++		offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
++		offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
++		offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
++
++		// now check if datepicker is showing outside window viewport - move to a better place if so.
++		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
++			Math.abs(offset.left + dpWidth - viewWidth) : 0);
++		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
++			Math.abs(dpHeight + inputHeight) : 0);
++
++		return offset;
++	},
++
++	/* Find an object's position on the screen. */
++	_findPos: function(obj) {
++		var inst = this._getInst(obj);
++		var isRTL = this._get(inst, 'isRTL');
++        while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {
++            obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
++        }
++        var position = $(obj).offset();
++	    return [position.left, position.top];
++	},
++
++	/* Trigger custom callback of onClose. */
++	_triggerOnClose: function(inst) {
++		var onClose = this._get(inst, 'onClose');
++		if (onClose)
++			onClose.apply((inst.input ? inst.input[0] : null),
++						  [(inst.input ? inst.input.val() : ''), inst]);
++	},
++
++	/* Hide the date picker from view.
++	   @param  input  element - the input field attached to the date picker */
++	_hideDatepicker: function(input) {
++		var inst = this._curInst;
++		if (!inst || (input && inst != $.data(input, PROP_NAME)))
++			return;
++		if (this._datepickerShowing) {
++			var showAnim = this._get(inst, 'showAnim');
++			var duration = this._get(inst, 'duration');
++			var postProcess = function() {
++				$.datepicker._tidyDialog(inst);
++				this._curInst = null;
++			};
++			if ($.effects && $.effects[showAnim])
++				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
++			else
++				inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
++					(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);
++			if (!showAnim)
++				postProcess();
++			$.datepicker._triggerOnClose(inst);
++			this._datepickerShowing = false;
++			this._lastInput = null;
++			if (this._inDialog) {
++				this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
++				if ($.blockUI) {
++					$.unblockUI();
++					$('body').append(this.dpDiv);
++				}
++			}
++			this._inDialog = false;
++		}
++	},
++
++	/* Tidy up after a dialog display. */
++	_tidyDialog: function(inst) {
++		inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
++	},
++
++	/* Close date picker if clicked elsewhere. */
++	_checkExternalClick: function(event) {
++		if (!$.datepicker._curInst)
++			return;
++		var $target = $(event.target);
++		if ($target[0].id != $.datepicker._mainDivId &&
++				$target.parents('#' + $.datepicker._mainDivId).length == 0 &&
++				!$target.hasClass($.datepicker.markerClassName) &&
++				!$target.hasClass($.datepicker._triggerClass) &&
++				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
++			$.datepicker._hideDatepicker();
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustDate: function(id, offset, period) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		if (this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		this._adjustInstDate(inst, offset +
++			(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
++			period);
++		this._updateDatepicker(inst);
++	},
++
++	/* Action for current link. */
++	_gotoToday: function(id) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
++			inst.selectedDay = inst.currentDay;
++			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
++			inst.drawYear = inst.selectedYear = inst.currentYear;
++		}
++		else {
++			var date = new Date();
++			inst.selectedDay = date.getDate();
++			inst.drawMonth = inst.selectedMonth = date.getMonth();
++			inst.drawYear = inst.selectedYear = date.getFullYear();
++		}
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a new month/year. */
++	_selectMonthYear: function(id, select, period) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
++		inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
++			parseInt(select.options[select.selectedIndex].value,10);
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a day. */
++	_selectDay: function(id, month, year, td) {
++		var target = $(id);
++		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		var inst = this._getInst(target[0]);
++		inst.selectedDay = inst.currentDay = $('a', td).html();
++		inst.selectedMonth = inst.currentMonth = month;
++		inst.selectedYear = inst.currentYear = year;
++		this._selectDate(id, this._formatDate(inst,
++			inst.currentDay, inst.currentMonth, inst.currentYear));
++	},
++
++	/* Erase the input field and hide the date picker. */
++	_clearDate: function(id) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		this._selectDate(target, '');
++	},
++
++	/* Update the input field with the selected date. */
++	_selectDate: function(id, dateStr) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
++		if (inst.input)
++			inst.input.val(dateStr);
++		this._updateAlternate(inst);
++		var onSelect = this._get(inst, 'onSelect');
++		if (onSelect)
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
++		else if (inst.input)
++			inst.input.trigger('change'); // fire the change event
++		if (inst.inline)
++			this._updateDatepicker(inst);
++		else {
++			this._hideDatepicker();
++			this._lastInput = inst.input[0];
++			inst.input.focus(); // restore focus
++			this._lastInput = null;
++		}
++	},
++
++	/* Update any alternate field to synchronise with the main field. */
++	_updateAlternate: function(inst) {
++		var altField = this._get(inst, 'altField');
++		if (altField) { // update alternate field too
++			var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
++			var date = this._getDate(inst);
++			var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
++			$(altField).each(function() { $(this).val(dateStr); });
++		}
++	},
++
++	/* Set as beforeShowDay function to prevent selection of weekends.
++	   @param  date  Date - the date to customise
++	   @return [boolean, string] - is this date selectable?, what is its CSS class? */
++	noWeekends: function(date) {
++		var day = date.getDay();
++		return [(day > 0 && day < 6), ''];
++	},
++
++	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++	   @param  date  Date - the date to get the week for
++	   @return  number - the number of the week within the year that contains this date */
++	iso8601Week: function(date) {
++		var checkDate = new Date(date.getTime());
++		// Find Thursday of this week starting on Monday
++		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++		var time = checkDate.getTime();
++		checkDate.setMonth(0); // Compare with Jan 1
++		checkDate.setDate(1);
++		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++	},
++
++	/* Parse a string value into a date object.
++	   See formatDate below for the possible formats.
++
++	   @param  format    string - the expected format of the date
++	   @param  value     string - the date in the above format
++	   @param  settings  Object - attributes include:
++	                     shortYearCutoff  number - the cutoff year for determining the century (optional)
++	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
++	                     dayNames         string[7] - names of the days from Sunday (optional)
++	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
++	                     monthNames       string[12] - names of the months (optional)
++	   @return  Date - the extracted date value or null if value is blank */
++	parseDate: function (format, value, settings) {
++		if (format == null || value == null)
++			throw 'Invalid arguments';
++		value = (typeof value == 'object' ? value.toString() : value + '');
++		if (value == '')
++			return null;
++		var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
++		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
++				new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
++		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
++		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
++		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
++		var year = -1;
++		var month = -1;
++		var day = -1;
++		var doy = -1;
++		var literal = false;
++		// Check whether a format character is doubled
++		var lookAhead = function(match) {
++			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
++			if (matches)
++				iFormat++;
++			return matches;
++		};
++		// Extract a number from the string value
++		var getNumber = function(match) {
++			var isDoubled = lookAhead(match);
++			var size = (match == '@' ? 14 : (match == '!' ? 20 :
++				(match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2))));
++			var digits = new RegExp('^\\d{1,' + size + '}');
++			var num = value.substring(iValue).match(digits);
++			if (!num)
++				throw 'Missing number at position ' + iValue;
++			iValue += num[0].length;
++			return parseInt(num[0], 10);
++		};
++		// Extract a name from the string value and convert to an index
++		var getName = function(match, shortNames, longNames) {
++			var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
++				return [ [k, v] ];
++			}).sort(function (a, b) {
++				return -(a[1].length - b[1].length);
++			});
++			var index = -1;
++			$.each(names, function (i, pair) {
++				var name = pair[1];
++				if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {
++					index = pair[0];
++					iValue += name.length;
++					return false;
++				}
++			});
++			if (index != -1)
++				return index + 1;
++			else
++				throw 'Unknown name at position ' + iValue;
++		};
++		// Confirm that a literal character matches the string value
++		var checkLiteral = function() {
++			if (value.charAt(iValue) != format.charAt(iFormat))
++				throw 'Unexpected literal at position ' + iValue;
++			iValue++;
++		};
++		var iValue = 0;
++		for (var iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal)
++				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
++					literal = false;
++				else
++					checkLiteral();
++			else
++				switch (format.charAt(iFormat)) {
++					case 'd':
++						day = getNumber('d');
++						break;
++					case 'D':
++						getName('D', dayNamesShort, dayNames);
++						break;
++					case 'o':
++						doy = getNumber('o');
++						break;
++					case 'm':
++						month = getNumber('m');
++						break;
++					case 'M':
++						month = getName('M', monthNamesShort, monthNames);
++						break;
++					case 'y':
++						year = getNumber('y');
++						break;
++					case '@':
++						var date = new Date(getNumber('@'));
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case '!':
++						var date = new Date((getNumber('!') - this._ticksTo1970) / 10000);
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "'":
++						if (lookAhead("'"))
++							checkLiteral();
++						else
++							literal = true;
++						break;
++					default:
++						checkLiteral();
++				}
++		}
++		if (iValue < value.length){
++			throw "Extra/unparsed characters found in date: " + value.substring(iValue);
++		}
++		if (year == -1)
++			year = new Date().getFullYear();
++		else if (year < 100)
++			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
++				(year <= shortYearCutoff ? 0 : -100);
++		if (doy > -1) {
++			month = 1;
++			day = doy;
++			do {
++				var dim = this._getDaysInMonth(year, month - 1);
++				if (day <= dim)
++					break;
++				month++;
++				day -= dim;
++			} while (true);
++		}
++		var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
++		if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
++			throw 'Invalid date'; // E.g. 31/02/00
++		return date;
++	},
++
++	/* Standard date formats. */
++	ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
++	COOKIE: 'D, dd M yy',
++	ISO_8601: 'yy-mm-dd',
++	RFC_822: 'D, d M y',
++	RFC_850: 'DD, dd-M-y',
++	RFC_1036: 'D, d M y',
++	RFC_1123: 'D, d M yy',
++	RFC_2822: 'D, d M yy',
++	RSS: 'D, d M y', // RFC 822
++	TICKS: '!',
++	TIMESTAMP: '@',
++	W3C: 'yy-mm-dd', // ISO 8601
++
++	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
++		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
++
++	/* Format a date object into a string value.
++	   The format can be combinations of the following:
++	   d  - day of month (no leading zero)
++	   dd - day of month (two digit)
++	   o  - day of year (no leading zeros)
++	   oo - day of year (three digit)
++	   D  - day name short
++	   DD - day name long
++	   m  - month of year (no leading zero)
++	   mm - month of year (two digit)
++	   M  - month name short
++	   MM - month name long
++	   y  - year (two digit)
++	   yy - year (four digit)
++	   @ - Unix timestamp (ms since 01/01/1970)
++	   ! - Windows ticks (100ns since 01/01/0001)
++	   '...' - literal text
++	   '' - single quote
++
++	   @param  format    string - the desired format of the date
++	   @param  date      Date - the date value to format
++	   @param  settings  Object - attributes include:
++	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
++	                     dayNames         string[7] - names of the days from Sunday (optional)
++	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
++	                     monthNames       string[12] - names of the months (optional)
++	   @return  string - the date in the above format */
++	formatDate: function (format, date, settings) {
++		if (!date)
++			return '';
++		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
++		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
++		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
++		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
++		// Check whether a format character is doubled
++		var lookAhead = function(match) {
++			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
++			if (matches)
++				iFormat++;
++			return matches;
++		};
++		// Format a number, with leading zero if necessary
++		var formatNumber = function(match, value, len) {
++			var num = '' + value;
++			if (lookAhead(match))
++				while (num.length < len)
++					num = '0' + num;
++			return num;
++		};
++		// Format a name, short or long as requested
++		var formatName = function(match, value, shortNames, longNames) {
++			return (lookAhead(match) ? longNames[value] : shortNames[value]);
++		};
++		var output = '';
++		var literal = false;
++		if (date)
++			for (var iFormat = 0; iFormat < format.length; iFormat++) {
++				if (literal)
++					if (format.charAt(iFormat) == "'" && !lookAhead("'"))
++						literal = false;
++					else
++						output += format.charAt(iFormat);
++				else
++					switch (format.charAt(iFormat)) {
++						case 'd':
++							output += formatNumber('d', date.getDate(), 2);
++							break;
++						case 'D':
++							output += formatName('D', date.getDay(), dayNamesShort, dayNames);
++							break;
++						case 'o':
++							output += formatNumber('o',
++								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
++							break;
++						case 'm':
++							output += formatNumber('m', date.getMonth() + 1, 2);
++							break;
++						case 'M':
++							output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
++							break;
++						case 'y':
++							output += (lookAhead('y') ? date.getFullYear() :
++								(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
++							break;
++						case '@':
++							output += date.getTime();
++							break;
++						case '!':
++							output += date.getTime() * 10000 + this._ticksTo1970;
++							break;
++						case "'":
++							if (lookAhead("'"))
++								output += "'";
++							else
++								literal = true;
++							break;
++						default:
++							output += format.charAt(iFormat);
++					}
++			}
++		return output;
++	},
++
++	/* Extract all possible characters from the date format. */
++	_possibleChars: function (format) {
++		var chars = '';
++		var literal = false;
++		// Check whether a format character is doubled
++		var lookAhead = function(match) {
++			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
++			if (matches)
++				iFormat++;
++			return matches;
++		};
++		for (var iFormat = 0; iFormat < format.length; iFormat++)
++			if (literal)
++				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
++					literal = false;
++				else
++					chars += format.charAt(iFormat);
++			else
++				switch (format.charAt(iFormat)) {
++					case 'd': case 'm': case 'y': case '@':
++						chars += '0123456789';
++						break;
++					case 'D': case 'M':
++						return null; // Accept anything
++					case "'":
++						if (lookAhead("'"))
++							chars += "'";
++						else
++							literal = true;
++						break;
++					default:
++						chars += format.charAt(iFormat);
++				}
++		return chars;
++	},
++
++	/* Get a setting value, defaulting if necessary. */
++	_get: function(inst, name) {
++		return inst.settings[name] !== undefined ?
++			inst.settings[name] : this._defaults[name];
++	},
++
++	/* Parse existing date and initialise date picker. */
++	_setDateFromField: function(inst, noDefault) {
++		if (inst.input.val() == inst.lastVal) {
++			return;
++		}
++		var dateFormat = this._get(inst, 'dateFormat');
++		var dates = inst.lastVal = inst.input ? inst.input.val() : null;
++		var date, defaultDate;
++		date = defaultDate = this._getDefaultDate(inst);
++		var settings = this._getFormatConfig(inst);
++		try {
++			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
++		} catch (event) {
++			this.log(event);
++			dates = (noDefault ? '' : dates);
++		}
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		inst.currentDay = (dates ? date.getDate() : 0);
++		inst.currentMonth = (dates ? date.getMonth() : 0);
++		inst.currentYear = (dates ? date.getFullYear() : 0);
++		this._adjustInstDate(inst);
++	},
++
++	/* Retrieve the default date shown on opening. */
++	_getDefaultDate: function(inst) {
++		return this._restrictMinMax(inst,
++			this._determineDate(inst, this._get(inst, 'defaultDate'), new Date()));
++	},
++
++	/* A date may be specified as an exact value or a relative one. */
++	_determineDate: function(inst, date, defaultDate) {
++		var offsetNumeric = function(offset) {
++			var date = new Date();
++			date.setDate(date.getDate() + offset);
++			return date;
++		};
++		var offsetString = function(offset) {
++			try {
++				return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
++					offset, $.datepicker._getFormatConfig(inst));
++			}
++			catch (e) {
++				// Ignore
++			}
++			var date = (offset.toLowerCase().match(/^c/) ?
++				$.datepicker._getDate(inst) : null) || new Date();
++			var year = date.getFullYear();
++			var month = date.getMonth();
++			var day = date.getDate();
++			var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
++			var matches = pattern.exec(offset);
++			while (matches) {
++				switch (matches[2] || 'd') {
++					case 'd' : case 'D' :
++						day += parseInt(matches[1],10); break;
++					case 'w' : case 'W' :
++						day += parseInt(matches[1],10) * 7; break;
++					case 'm' : case 'M' :
++						month += parseInt(matches[1],10);
++						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++						break;
++					case 'y': case 'Y' :
++						year += parseInt(matches[1],10);
++						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++						break;
++				}
++				matches = pattern.exec(offset);
++			}
++			return new Date(year, month, day);
++		};
++		var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) :
++			(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
++		newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
++		if (newDate) {
++			newDate.setHours(0);
++			newDate.setMinutes(0);
++			newDate.setSeconds(0);
++			newDate.setMilliseconds(0);
++		}
++		return this._daylightSavingAdjust(newDate);
++	},
++
++	/* Handle switch to/from daylight saving.
++	   Hours may be non-zero on daylight saving cut-over:
++	   > 12 when midnight changeover, but then cannot generate
++	   midnight datetime, so jump to 1AM, otherwise reset.
++	   @param  date  (Date) the date to check
++	   @return  (Date) the corrected date */
++	_daylightSavingAdjust: function(date) {
++		if (!date) return null;
++		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
++		return date;
++	},
++
++	/* Set the date(s) directly. */
++	_setDate: function(inst, date, noChange) {
++		var clear = !date;
++		var origMonth = inst.selectedMonth;
++		var origYear = inst.selectedYear;
++		var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
++		inst.selectedDay = inst.currentDay = newDate.getDate();
++		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
++		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
++		if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
++			this._notifyChange(inst);
++		this._adjustInstDate(inst);
++		if (inst.input) {
++			inst.input.val(clear ? '' : this._formatDate(inst));
++		}
++
++		var onSelect = this._get(inst, 'onSelect');
++		if (onSelect) {
++			var dateStr = this._formatDate(inst);
++
++			// trigger custom callback
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++		}
++	},
++
++	/* Retrieve the date(s) directly. */
++	_getDate: function(inst) {
++		var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
++			this._daylightSavingAdjust(new Date(
++			inst.currentYear, inst.currentMonth, inst.currentDay)));
++			return startDate;
++	},
++
++	/* Generate the HTML for the current state of the date picker. */
++	_generateHTML: function(inst) {
++		var today = new Date();
++		today = this._daylightSavingAdjust(
++			new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
++		var isRTL = this._get(inst, 'isRTL');
++		var showButtonPanel = this._get(inst, 'showButtonPanel');
++		var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
++		var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
++		var numMonths = this._getNumberOfMonths(inst);
++		var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
++		var stepMonths = this._get(inst, 'stepMonths');
++		var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
++		var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
++			new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		var minDate = this._getMinMaxDate(inst, 'min');
++		var maxDate = this._getMinMaxDate(inst, 'max');
++		var drawMonth = inst.drawMonth - showCurrentAtPos;
++		var drawYear = inst.drawYear;
++		if (drawMonth < 0) {
++			drawMonth += 12;
++			drawYear--;
++		}
++		if (maxDate) {
++			var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
++				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
++			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
++			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
++				drawMonth--;
++				if (drawMonth < 0) {
++					drawMonth = 11;
++					drawYear--;
++				}
++			}
++		}
++		inst.drawMonth = drawMonth;
++		inst.drawYear = drawYear;
++		var prevText = this._get(inst, 'prevText');
++		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
++			this._getFormatConfig(inst)));
++		var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
++			'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_' + dpuuid +
++			'.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
++			' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
++			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
++		var nextText = this._get(inst, 'nextText');
++		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
++			this._getFormatConfig(inst)));
++		var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
++			'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_' + dpuuid +
++			'.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
++			' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
++			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
++		var currentText = this._get(inst, 'currentText');
++		var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
++		currentText = (!navigationAsDateFormat ? currentText :
++			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
++		var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
++			'.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
++		var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
++			(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
++			'.datepicker._gotoToday(\'#' + inst.id + '\');"' +
++			'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
++		var firstDay = parseInt(this._get(inst, 'firstDay'),10);
++		firstDay = (isNaN(firstDay) ? 0 : firstDay);
++		var showWeek = this._get(inst, 'showWeek');
++		var dayNames = this._get(inst, 'dayNames');
++		var dayNamesShort = this._get(inst, 'dayNamesShort');
++		var dayNamesMin = this._get(inst, 'dayNamesMin');
++		var monthNames = this._get(inst, 'monthNames');
++		var monthNamesShort = this._get(inst, 'monthNamesShort');
++		var beforeShowDay = this._get(inst, 'beforeShowDay');
++		var showOtherMonths = this._get(inst, 'showOtherMonths');
++		var selectOtherMonths = this._get(inst, 'selectOtherMonths');
++		var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
++		var defaultDate = this._getDefaultDate(inst);
++		var html = '';
++		for (var row = 0; row < numMonths[0]; row++) {
++			var group = '';
++			this.maxRows = 4;
++			for (var col = 0; col < numMonths[1]; col++) {
++				var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
++				var cornerClass = ' ui-corner-all';
++				var calender = '';
++				if (isMultiMonth) {
++					calender += '<div class="ui-datepicker-group';
++					if (numMonths[1] > 1)
++						switch (col) {
++							case 0: calender += ' ui-datepicker-group-first';
++								cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
++							case numMonths[1]-1: calender += ' ui-datepicker-group-last';
++								cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
++							default: calender += ' ui-datepicker-group-middle'; cornerClass = ''; break;
++						}
++					calender += '">';
++				}
++				calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
++					(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
++					(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
++					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
++					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
++					'</div><table class="ui-datepicker-calendar"><thead>' +
++					'<tr>';
++				var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : '');
++				for (var dow = 0; dow < 7; dow++) { // days of the week
++					var day = (dow + firstDay) % 7;
++					thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
++						'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
++				}
++				calender += thead + '</tr></thead><tbody>';
++				var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
++				if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
++					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
++				var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
++				var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
++				var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
++				this.maxRows = numRows;
++				var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
++				for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
++					calender += '<tr>';
++					var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' +
++						this._get(inst, 'calculateWeek')(printDate) + '</td>');
++					for (var dow = 0; dow < 7; dow++) { // create date picker days
++						var daySettings = (beforeShowDay ?
++							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
++						var otherMonth = (printDate.getMonth() != drawMonth);
++						var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
++							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
++						tbody += '<td class="' +
++							((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
++							(otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
++							((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
++							(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
++							// or defaultDate is current printedDate and defaultDate is selectedDate
++							' ' + this._dayOverClass : '') + // highlight selected day
++							(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') +  // highlight unselectable days
++							(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
++							(printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day
++							(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
++							((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
++							(unselectable ? '' : ' onclick="DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' +
++							inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);return false;"') + '>' + // actions
++							(otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months
++							(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
++							(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
++							(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day
++							(otherMonth ? ' ui-priority-secondary' : '') + // distinguish dates from other months
++							'" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display selectable date
++						printDate.setDate(printDate.getDate() + 1);
++						printDate = this._daylightSavingAdjust(printDate);
++					}
++					calender += tbody + '</tr>';
++				}
++				drawMonth++;
++				if (drawMonth > 11) {
++					drawMonth = 0;
++					drawYear++;
++				}
++				calender += '</tbody></table>' + (isMultiMonth ? '</div>' + 
++							((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
++				group += calender;
++			}
++			html += group;
++		}
++		html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
++			'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
++		inst._keyEvent = false;
++		return html;
++	},
++
++	/* Generate the month and year header. */
++	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
++			secondary, monthNames, monthNamesShort) {
++		var changeMonth = this._get(inst, 'changeMonth');
++		var changeYear = this._get(inst, 'changeYear');
++		var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
++		var html = '<div class="ui-datepicker-title">';
++		var monthHtml = '';
++		// month selection
++		if (secondary || !changeMonth)
++			monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>';
++		else {
++			var inMinYear = (minDate && minDate.getFullYear() == drawYear);
++			var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
++			monthHtml += '<select class="ui-datepicker-month" ' +
++				'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
++			 	'>';
++			for (var month = 0; month < 12; month++) {
++				if ((!inMinYear || month >= minDate.getMonth()) &&
++						(!inMaxYear || month <= maxDate.getMonth()))
++					monthHtml += '<option value="' + month + '"' +
++						(month == drawMonth ? ' selected="selected"' : '') +
++						'>' + monthNamesShort[month] + '</option>';
++			}
++			monthHtml += '</select>';
++		}
++		if (!showMonthAfterYear)
++			html += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');
++		// year selection
++		if ( !inst.yearshtml ) {
++			inst.yearshtml = '';
++			if (secondary || !changeYear)
++				html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
++			else {
++				// determine range of years to display
++				var years = this._get(inst, 'yearRange').split(':');
++				var thisYear = new Date().getFullYear();
++				var determineYear = function(value) {
++					var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
++						(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
++						parseInt(value, 10)));
++					return (isNaN(year) ? thisYear : year);
++				};
++				var year = determineYear(years[0]);
++				var endYear = Math.max(year, determineYear(years[1] || ''));
++				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
++				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
++				inst.yearshtml += '<select class="ui-datepicker-year" ' +
++					'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
++					'>';
++				for (; year <= endYear; year++) {
++					inst.yearshtml += '<option value="' + year + '"' +
++						(year == drawYear ? ' selected="selected"' : '') +
++						'>' + year + '</option>';
++				}
++				inst.yearshtml += '</select>';
++				
++				html += inst.yearshtml;
++				inst.yearshtml = null;
++			}
++		}
++		html += this._get(inst, 'yearSuffix');
++		if (showMonthAfterYear)
++			html += (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '') + monthHtml;
++		html += '</div>'; // Close datepicker_header
++		return html;
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustInstDate: function(inst, offset, period) {
++		var year = inst.drawYear + (period == 'Y' ? offset : 0);
++		var month = inst.drawMonth + (period == 'M' ? offset : 0);
++		var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
++			(period == 'D' ? offset : 0);
++		var date = this._restrictMinMax(inst,
++			this._daylightSavingAdjust(new Date(year, month, day)));
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		if (period == 'M' || period == 'Y')
++			this._notifyChange(inst);
++	},
++
++	/* Ensure a date is within any min/max bounds. */
++	_restrictMinMax: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, 'min');
++		var maxDate = this._getMinMaxDate(inst, 'max');
++		var newDate = (minDate && date < minDate ? minDate : date);
++		newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
++		return newDate;
++	},
++
++	/* Notify change of month/year. */
++	_notifyChange: function(inst) {
++		var onChange = this._get(inst, 'onChangeMonthYear');
++		if (onChange)
++			onChange.apply((inst.input ? inst.input[0] : null),
++				[inst.selectedYear, inst.selectedMonth + 1, inst]);
++	},
++
++	/* Determine the number of months to show. */
++	_getNumberOfMonths: function(inst) {
++		var numMonths = this._get(inst, 'numberOfMonths');
++		return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
++	},
++
++	/* Determine the current maximum date - ensure no time components are set. */
++	_getMinMaxDate: function(inst, minMax) {
++		return this._determineDate(inst, this._get(inst, minMax + 'Date'), null);
++	},
++
++	/* Find the number of days in a given month. */
++	_getDaysInMonth: function(year, month) {
++		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
++	},
++
++	/* Find the day of the week of the first of a month. */
++	_getFirstDayOfMonth: function(year, month) {
++		return new Date(year, month, 1).getDay();
++	},
++
++	/* Determines if we should allow a "next/prev" month display change. */
++	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
++		var numMonths = this._getNumberOfMonths(inst);
++		var date = this._daylightSavingAdjust(new Date(curYear,
++			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
++		if (offset < 0)
++			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
++		return this._isInRange(inst, date);
++	},
++
++	/* Is the given date in the accepted range? */
++	_isInRange: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, 'min');
++		var maxDate = this._getMinMaxDate(inst, 'max');
++		return ((!minDate || date.getTime() >= minDate.getTime()) &&
++			(!maxDate || date.getTime() <= maxDate.getTime()));
++	},
++
++	/* Provide the configuration settings for formatting/parsing. */
++	_getFormatConfig: function(inst) {
++		var shortYearCutoff = this._get(inst, 'shortYearCutoff');
++		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
++			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		return {shortYearCutoff: shortYearCutoff,
++			dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
++			monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
++	},
++
++	/* Format the given date for display. */
++	_formatDate: function(inst, day, month, year) {
++		if (!day) {
++			inst.currentDay = inst.selectedDay;
++			inst.currentMonth = inst.selectedMonth;
++			inst.currentYear = inst.selectedYear;
++		}
++		var date = (day ? (typeof day == 'object' ? day :
++			this._daylightSavingAdjust(new Date(year, month, day))) :
++			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
++	}
++});
++
++/*
++ * Bind hover events for datepicker elements.
++ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
++ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
++ */ 
++function bindHover(dpDiv) {
++	var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';
++	return dpDiv.bind('mouseout', function(event) {
++			var elem = $( event.target ).closest( selector );
++			if ( !elem.length ) {
++				return;
++			}
++			elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" );
++		})
++		.bind('mouseover', function(event) {
++			var elem = $( event.target ).closest( selector );
++			if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) ||
++					!elem.length ) {
++				return;
++			}
++			elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
++			elem.addClass('ui-state-hover');
++			if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover');
++			if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover');
++		});
++}
++
++/* jQuery extend now ignores nulls! */
++function extendRemove(target, props) {
++	$.extend(target, props);
++	for (var name in props)
++		if (props[name] == null || props[name] == undefined)
++			target[name] = props[name];
++	return target;
++};
++
++/* Determine whether an object is an array. */
++function isArray(a) {
++	return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
++		(a.constructor && a.constructor.toString().match(/\Array\(\)/))));
++};
++
++/* Invoke the datepicker functionality.
++   @param  options  string - a command, optionally followed by additional parameters or
++                    Object - settings for attaching new datepicker functionality
++   @return  jQuery object */
++$.fn.datepicker = function(options){
++	
++	/* Verify an empty collection wasn't passed - Fixes #6976 */
++	if ( !this.length ) {
++		return this;
++	}
++	
++	/* Initialise the date picker. */
++	if (!$.datepicker.initialized) {
++		$(document).mousedown($.datepicker._checkExternalClick).
++			find('body').append($.datepicker.dpDiv);
++		$.datepicker.initialized = true;
++	}
++
++	var otherArgs = Array.prototype.slice.call(arguments, 1);
++	if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget'))
++		return $.datepicker['_' + options + 'Datepicker'].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
++		return $.datepicker['_' + options + 'Datepicker'].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	return this.each(function() {
++		typeof options == 'string' ?
++			$.datepicker['_' + options + 'Datepicker'].
++				apply($.datepicker, [this].concat(otherArgs)) :
++			$.datepicker._attachDatepicker(this, options);
++	});
++};
++
++$.datepicker = new Datepicker(); // singleton instance
++$.datepicker.initialized = false;
++$.datepicker.uuid = new Date().getTime();
++$.datepicker.version = "1.8.15";
++
++// Workaround for #4055
++// Add another global to avoid noConflict issues with inline event handlers
++window['DP_jQuery_' + dpuuid] = $;
++
++})(jQuery);
++/*
++ * jQuery UI Dialog 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Dialog
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *  jquery.ui.button.js
++ *	jquery.ui.draggable.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.position.js
++ *	jquery.ui.resizable.js
++ */
++(function( $, undefined ) {
++
++var uiDialogClasses =
++		'ui-dialog ' +
++		'ui-widget ' +
++		'ui-widget-content ' +
++		'ui-corner-all ',
++	sizeRelatedOptions = {
++		buttons: true,
++		height: true,
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true,
++		width: true
++	},
++	resizableRelatedOptions = {
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true
++	},
++	// support for jQuery 1.3.2 - handle common attrFn methods for dialog
++	attrFn = $.attrFn || {
++		val: true,
++		css: true,
++		html: true,
++		text: true,
++		data: true,
++		width: true,
++		height: true,
++		offset: true,
++		click: true
++	};
++
++$.widget("ui.dialog", {
++	options: {
++		autoOpen: true,
++		buttons: {},
++		closeOnEscape: true,
++		closeText: 'close',
++		dialogClass: '',
++		draggable: true,
++		hide: null,
++		height: 'auto',
++		maxHeight: false,
++		maxWidth: false,
++		minHeight: 150,
++		minWidth: 150,
++		modal: false,
++		position: {
++			my: 'center',
++			at: 'center',
++			collision: 'fit',
++			// ensure that the titlebar is never outside the document
++			using: function(pos) {
++				var topOffset = $(this).css(pos).offset().top;
++				if (topOffset < 0) {
++					$(this).css('top', pos.top - topOffset);
++				}
++			}
++		},
++		resizable: true,
++		show: null,
++		stack: true,
++		title: '',
++		width: 300,
++		zIndex: 1000
++	},
++
++	_create: function() {
++		this.originalTitle = this.element.attr('title');
++		// #5742 - .attr() might return a DOMElement
++		if ( typeof this.originalTitle !== "string" ) {
++			this.originalTitle = "";
++		}
++
++		this.options.title = this.options.title || this.originalTitle;
++		var self = this,
++			options = self.options,
++
++			title = options.title || '&#160;',
++			titleId = $.ui.dialog.getTitleId(self.element),
++
++			uiDialog = (self.uiDialog = $('<div></div>'))
++				.appendTo(document.body)
++				.hide()
++				.addClass(uiDialogClasses + options.dialogClass)
++				.css({
++					zIndex: options.zIndex
++				})
++				// setting tabIndex makes the div focusable
++				// setting outline to 0 prevents a border on focus in Mozilla
++				.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
++					if (options.closeOnEscape && event.keyCode &&
++						event.keyCode === $.ui.keyCode.ESCAPE) {
++						
++						self.close(event);
++						event.preventDefault();
++					}
++				})
++				.attr({
++					role: 'dialog',
++					'aria-labelledby': titleId
++				})
++				.mousedown(function(event) {
++					self.moveToTop(false, event);
++				}),
++
++			uiDialogContent = self.element
++				.show()
++				.removeAttr('title')
++				.addClass(
++					'ui-dialog-content ' +
++					'ui-widget-content')
++				.appendTo(uiDialog),
++
++			uiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>'))
++				.addClass(
++					'ui-dialog-titlebar ' +
++					'ui-widget-header ' +
++					'ui-corner-all ' +
++					'ui-helper-clearfix'
++				)
++				.prependTo(uiDialog),
++
++			uiDialogTitlebarClose = $('<a href="#"></a>')
++				.addClass(
++					'ui-dialog-titlebar-close ' +
++					'ui-corner-all'
++				)
++				.attr('role', 'button')
++				.hover(
++					function() {
++						uiDialogTitlebarClose.addClass('ui-state-hover');
++					},
++					function() {
++						uiDialogTitlebarClose.removeClass('ui-state-hover');
++					}
++				)
++				.focus(function() {
++					uiDialogTitlebarClose.addClass('ui-state-focus');
++				})
++				.blur(function() {
++					uiDialogTitlebarClose.removeClass('ui-state-focus');
++				})
++				.click(function(event) {
++					self.close(event);
++					return false;
++				})
++				.appendTo(uiDialogTitlebar),
++
++			uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>'))
++				.addClass(
++					'ui-icon ' +
++					'ui-icon-closethick'
++				)
++				.text(options.closeText)
++				.appendTo(uiDialogTitlebarClose),
++
++			uiDialogTitle = $('<span></span>')
++				.addClass('ui-dialog-title')
++				.attr('id', titleId)
++				.html(title)
++				.prependTo(uiDialogTitlebar);
++
++		//handling of deprecated beforeclose (vs beforeClose) option
++		//Ticket #4669 http://dev.jqueryui.com/ticket/4669
++		//TODO: remove in 1.9pre
++		if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) {
++			options.beforeClose = options.beforeclose;
++		}
++
++		uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
++
++		if (options.draggable && $.fn.draggable) {
++			self._makeDraggable();
++		}
++		if (options.resizable && $.fn.resizable) {
++			self._makeResizable();
++		}
++
++		self._createButtons(options.buttons);
++		self._isOpen = false;
++
++		if ($.fn.bgiframe) {
++			uiDialog.bgiframe();
++		}
++	},
++
++	_init: function() {
++		if ( this.options.autoOpen ) {
++			this.open();
++		}
++	},
++
++	destroy: function() {
++		var self = this;
++		
++		if (self.overlay) {
++			self.overlay.destroy();
++		}
++		self.uiDialog.hide();
++		self.element
++			.unbind('.dialog')
++			.removeData('dialog')
++			.removeClass('ui-dialog-content ui-widget-content')
++			.hide().appendTo('body');
++		self.uiDialog.remove();
++
++		if (self.originalTitle) {
++			self.element.attr('title', self.originalTitle);
++		}
++
++		return self;
++	},
++
++	widget: function() {
++		return this.uiDialog;
++	},
++
++	close: function(event) {
++		var self = this,
++			maxZ, thisZ;
++		
++		if (false === self._trigger('beforeClose', event)) {
++			return;
++		}
++
++		if (self.overlay) {
++			self.overlay.destroy();
++		}
++		self.uiDialog.unbind('keypress.ui-dialog');
++
++		self._isOpen = false;
++
++		if (self.options.hide) {
++			self.uiDialog.hide(self.options.hide, function() {
++				self._trigger('close', event);
++			});
++		} else {
++			self.uiDialog.hide();
++			self._trigger('close', event);
++		}
++
++		$.ui.dialog.overlay.resize();
++
++		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
++		if (self.options.modal) {
++			maxZ = 0;
++			$('.ui-dialog').each(function() {
++				if (this !== self.uiDialog[0]) {
++					thisZ = $(this).css('z-index');
++					if(!isNaN(thisZ)) {
++						maxZ = Math.max(maxZ, thisZ);
++					}
++				}
++			});
++			$.ui.dialog.maxZ = maxZ;
++		}
++
++		return self;
++	},
++
++	isOpen: function() {
++		return this._isOpen;
++	},
++
++	// the force parameter allows us to move modal dialogs to their correct
++	// position on open
++	moveToTop: function(force, event) {
++		var self = this,
++			options = self.options,
++			saveScroll;
++
++		if ((options.modal && !force) ||
++			(!options.stack && !options.modal)) {
++			return self._trigger('focus', event);
++		}
++
++		if (options.zIndex > $.ui.dialog.maxZ) {
++			$.ui.dialog.maxZ = options.zIndex;
++		}
++		if (self.overlay) {
++			$.ui.dialog.maxZ += 1;
++			self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ);
++		}
++
++		//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
++		//  http://ui.jquery.com/bugs/ticket/3193
++		saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() };
++		$.ui.dialog.maxZ += 1;
++		self.uiDialog.css('z-index', $.ui.dialog.maxZ);
++		self.element.attr(saveScroll);
++		self._trigger('focus', event);
++
++		return self;
++	},
++
++	open: function() {
++		if (this._isOpen) { return; }
++
++		var self = this,
++			options = self.options,
++			uiDialog = self.uiDialog;
++
++		self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
++		self._size();
++		self._position(options.position);
++		uiDialog.show(options.show);
++		self.moveToTop(true);
++
++		// prevent tabbing out of modal dialogs
++		if (options.modal) {
++			uiDialog.bind('keypress.ui-dialog', function(event) {
++				if (event.keyCode !== $.ui.keyCode.TAB) {
++					return;
++				}
++
++				var tabbables = $(':tabbable', this),
++					first = tabbables.filter(':first'),
++					last  = tabbables.filter(':last');
++
++				if (event.target === last[0] && !event.shiftKey) {
++					first.focus(1);
++					return false;
++				} else if (event.target === first[0] && event.shiftKey) {
++					last.focus(1);
++					return false;
++				}
++			});
++		}
++
++		// set focus to the first tabbable element in the content area or the first button
++		// if there are no tabbable elements, set focus on the dialog itself
++		$(self.element.find(':tabbable').get().concat(
++			uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
++				uiDialog.get()))).eq(0).focus();
++
++		self._isOpen = true;
++		self._trigger('open');
++
++		return self;
++	},
++
++	_createButtons: function(buttons) {
++		var self = this,
++			hasButtons = false,
++			uiDialogButtonPane = $('<div></div>')
++				.addClass(
++					'ui-dialog-buttonpane ' +
++					'ui-widget-content ' +
++					'ui-helper-clearfix'
++				),
++			uiButtonSet = $( "<div></div>" )
++				.addClass( "ui-dialog-buttonset" )
++				.appendTo( uiDialogButtonPane );
++
++		// if we already have a button pane, remove it
++		self.uiDialog.find('.ui-dialog-buttonpane').remove();
++
++		if (typeof buttons === 'object' && buttons !== null) {
++			$.each(buttons, function() {
++				return !(hasButtons = true);
++			});
++		}
++		if (hasButtons) {
++			$.each(buttons, function(name, props) {
++				props = $.isFunction( props ) ?
++					{ click: props, text: name } :
++					props;
++				var button = $('<button type="button"></button>')
++					.click(function() {
++						props.click.apply(self.element[0], arguments);
++					})
++					.appendTo(uiButtonSet);
++				// can't use .attr( props, true ) with jQuery 1.3.2.
++				$.each( props, function( key, value ) {
++					if ( key === "click" ) {
++						return;
++					}
++					if ( key in attrFn ) {
++						button[ key ]( value );
++					} else {
++						button.attr( key, value );
++					}
++				});
++				if ($.fn.button) {
++					button.button();
++				}
++			});
++			uiDialogButtonPane.appendTo(self.uiDialog);
++		}
++	},
++
++	_makeDraggable: function() {
++		var self = this,
++			options = self.options,
++			doc = $(document),
++			heightBeforeDrag;
++
++		function filteredUi(ui) {
++			return {
++				position: ui.position,
++				offset: ui.offset
++			};
++		}
++
++		self.uiDialog.draggable({
++			cancel: '.ui-dialog-content, .ui-dialog-titlebar-close',
++			handle: '.ui-dialog-titlebar',
++			containment: 'document',
++			start: function(event, ui) {
++				heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height();
++				$(this).height($(this).height()).addClass("ui-dialog-dragging");
++				self._trigger('dragStart', event, filteredUi(ui));
++			},
++			drag: function(event, ui) {
++				self._trigger('drag', event, filteredUi(ui));
++			},
++			stop: function(event, ui) {
++				options.position = [ui.position.left - doc.scrollLeft(),
++					ui.position.top - doc.scrollTop()];
++				$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
++				self._trigger('dragStop', event, filteredUi(ui));
++				$.ui.dialog.overlay.resize();
++			}
++		});
++	},
++
++	_makeResizable: function(handles) {
++		handles = (handles === undefined ? this.options.resizable : handles);
++		var self = this,
++			options = self.options,
++			// .ui-resizable has position: relative defined in the stylesheet
++			// but dialogs have to use absolute or fixed positioning
++			position = self.uiDialog.css('position'),
++			resizeHandles = (typeof handles === 'string' ?
++				handles	:
++				'n,e,s,w,se,sw,ne,nw'
++			);
++
++		function filteredUi(ui) {
++			return {
++				originalPosition: ui.originalPosition,
++				originalSize: ui.originalSize,
++				position: ui.position,
++				size: ui.size
++			};
++		}
++
++		self.uiDialog.resizable({
++			cancel: '.ui-dialog-content',
++			containment: 'document',
++			alsoResize: self.element,
++			maxWidth: options.maxWidth,
++			maxHeight: options.maxHeight,
++			minWidth: options.minWidth,
++			minHeight: self._minHeight(),
++			handles: resizeHandles,
++			start: function(event, ui) {
++				$(this).addClass("ui-dialog-resizing");
++				self._trigger('resizeStart', event, filteredUi(ui));
++			},
++			resize: function(event, ui) {
++				self._trigger('resize', event, filteredUi(ui));
++			},
++			stop: function(event, ui) {
++				$(this).removeClass("ui-dialog-resizing");
++				options.height = $(this).height();
++				options.width = $(this).width();
++				self._trigger('resizeStop', event, filteredUi(ui));
++				$.ui.dialog.overlay.resize();
++			}
++		})
++		.css('position', position)
++		.find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
++	},
++
++	_minHeight: function() {
++		var options = this.options;
++
++		if (options.height === 'auto') {
++			return options.minHeight;
++		} else {
++			return Math.min(options.minHeight, options.height);
++		}
++	},
++
++	_position: function(position) {
++		var myAt = [],
++			offset = [0, 0],
++			isVisible;
++
++		if (position) {
++			// deep extending converts arrays to objects in jQuery <= 1.3.2 :-(
++	//		if (typeof position == 'string' || $.isArray(position)) {
++	//			myAt = $.isArray(position) ? position : position.split(' ');
++
++			if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) {
++				myAt = position.split ? position.split(' ') : [position[0], position[1]];
++				if (myAt.length === 1) {
++					myAt[1] = myAt[0];
++				}
++
++				$.each(['left', 'top'], function(i, offsetPosition) {
++					if (+myAt[i] === myAt[i]) {
++						offset[i] = myAt[i];
++						myAt[i] = offsetPosition;
++					}
++				});
++
++				position = {
++					my: myAt.join(" "),
++					at: myAt.join(" "),
++					offset: offset.join(" ")
++				};
++			} 
++
++			position = $.extend({}, $.ui.dialog.prototype.options.position, position);
++		} else {
++			position = $.ui.dialog.prototype.options.position;
++		}
++
++		// need to show the dialog to get the actual offset in the position plugin
++		isVisible = this.uiDialog.is(':visible');
++		if (!isVisible) {
++			this.uiDialog.show();
++		}
++		this.uiDialog
++			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
++			.css({ top: 0, left: 0 })
++			.position($.extend({ of: window }, position));
++		if (!isVisible) {
++			this.uiDialog.hide();
++		}
++	},
++
++	_setOptions: function( options ) {
++		var self = this,
++			resizableOptions = {},
++			resize = false;
++
++		$.each( options, function( key, value ) {
++			self._setOption( key, value );
++			
++			if ( key in sizeRelatedOptions ) {
++				resize = true;
++			}
++			if ( key in resizableRelatedOptions ) {
++				resizableOptions[ key ] = value;
++			}
++		});
++
++		if ( resize ) {
++			this._size();
++		}
++		if ( this.uiDialog.is( ":data(resizable)" ) ) {
++			this.uiDialog.resizable( "option", resizableOptions );
++		}
++	},
++
++	_setOption: function(key, value){
++		var self = this,
++			uiDialog = self.uiDialog;
++
++		switch (key) {
++			//handling of deprecated beforeclose (vs beforeClose) option
++			//Ticket #4669 http://dev.jqueryui.com/ticket/4669
++			//TODO: remove in 1.9pre
++			case "beforeclose":
++				key = "beforeClose";
++				break;
++			case "buttons":
++				self._createButtons(value);
++				break;
++			case "closeText":
++				// ensure that we always pass a string
++				self.uiDialogTitlebarCloseText.text("" + value);
++				break;
++			case "dialogClass":
++				uiDialog
++					.removeClass(self.options.dialogClass)
++					.addClass(uiDialogClasses + value);
++				break;
++			case "disabled":
++				if (value) {
++					uiDialog.addClass('ui-dialog-disabled');
++				} else {
++					uiDialog.removeClass('ui-dialog-disabled');
++				}
++				break;
++			case "draggable":
++				var isDraggable = uiDialog.is( ":data(draggable)" );
++				if ( isDraggable && !value ) {
++					uiDialog.draggable( "destroy" );
++				}
++				
++				if ( !isDraggable && value ) {
++					self._makeDraggable();
++				}
++				break;
++			case "position":
++				self._position(value);
++				break;
++			case "resizable":
++				// currently resizable, becoming non-resizable
++				var isResizable = uiDialog.is( ":data(resizable)" );
++				if (isResizable && !value) {
++					uiDialog.resizable('destroy');
++				}
++
++				// currently resizable, changing handles
++				if (isResizable && typeof value === 'string') {
++					uiDialog.resizable('option', 'handles', value);
++				}
++
++				// currently non-resizable, becoming resizable
++				if (!isResizable && value !== false) {
++					self._makeResizable(value);
++				}
++				break;
++			case "title":
++				// convert whatever was passed in o a string, for html() to not throw up
++				$(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || '&#160;'));
++				break;
++		}
++
++		$.Widget.prototype._setOption.apply(self, arguments);
++	},
++
++	_size: function() {
++		/* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
++		 * divs will both have width and height set, so we need to reset them
++		 */
++		var options = this.options,
++			nonContentHeight,
++			minContentHeight,
++			isVisible = this.uiDialog.is( ":visible" );
++
++		// reset content sizing
++		this.element.show().css({
++			width: 'auto',
++			minHeight: 0,
++			height: 0
++		});
++
++		if (options.minWidth > options.width) {
++			options.width = options.minWidth;
++		}
++
++		// reset wrapper sizing
++		// determine the height of all the non-content elements
++		nonContentHeight = this.uiDialog.css({
++				height: 'auto',
++				width: options.width
++			})
++			.height();
++		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
++		
++		if ( options.height === "auto" ) {
++			// only needed for IE6 support
++			if ( $.support.minHeight ) {
++				this.element.css({
++					minHeight: minContentHeight,
++					height: "auto"
++				});
++			} else {
++				this.uiDialog.show();
++				var autoHeight = this.element.css( "height", "auto" ).height();
++				if ( !isVisible ) {
++					this.uiDialog.hide();
++				}
++				this.element.height( Math.max( autoHeight, minContentHeight ) );
++			}
++		} else {
++			this.element.height( Math.max( options.height - nonContentHeight, 0 ) );
++		}
++
++		if (this.uiDialog.is(':data(resizable)')) {
++			this.uiDialog.resizable('option', 'minHeight', this._minHeight());
++		}
++	}
++});
++
++$.extend($.ui.dialog, {
++	version: "1.8.15",
++
++	uuid: 0,
++	maxZ: 0,
++
++	getTitleId: function($el) {
++		var id = $el.attr('id');
++		if (!id) {
++			this.uuid += 1;
++			id = this.uuid;
++		}
++		return 'ui-dialog-title-' + id;
++	},
++
++	overlay: function(dialog) {
++		this.$el = $.ui.dialog.overlay.create(dialog);
++	}
++});
++
++$.extend($.ui.dialog.overlay, {
++	instances: [],
++	// reuse old instances due to IE memory leak with alpha transparency (see #5185)
++	oldInstances: [],
++	maxZ: 0,
++	events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
++		function(event) { return event + '.dialog-overlay'; }).join(' '),
++	create: function(dialog) {
++		if (this.instances.length === 0) {
++			// prevent use of anchors and inputs
++			// we use a setTimeout in case the overlay is created from an
++			// event that we're going to be cancelling (see #2804)
++			setTimeout(function() {
++				// handle $(el).dialog().dialog('close') (see #4065)
++				if ($.ui.dialog.overlay.instances.length) {
++					$(document).bind($.ui.dialog.overlay.events, function(event) {
++						// stop events if the z-index of the target is < the z-index of the overlay
++						// we cannot return true when we don't want to cancel the event (#3523)
++						if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
++							return false;
++						}
++					});
++				}
++			}, 1);
++
++			// allow closing by pressing the escape key
++			$(document).bind('keydown.dialog-overlay', function(event) {
++				if (dialog.options.closeOnEscape && event.keyCode &&
++					event.keyCode === $.ui.keyCode.ESCAPE) {
++					
++					dialog.close(event);
++					event.preventDefault();
++				}
++			});
++
++			// handle window resize
++			$(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
++		}
++
++		var $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay'))
++			.appendTo(document.body)
++			.css({
++				width: this.width(),
++				height: this.height()
++			});
++
++		if ($.fn.bgiframe) {
++			$el.bgiframe();
++		}
++
++		this.instances.push($el);
++		return $el;
++	},
++
++	destroy: function($el) {
++		var indexOf = $.inArray($el, this.instances);
++		if (indexOf != -1){
++			this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
++		}
++
++		if (this.instances.length === 0) {
++			$([document, window]).unbind('.dialog-overlay');
++		}
++
++		$el.remove();
++		
++		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
++		var maxZ = 0;
++		$.each(this.instances, function() {
++			maxZ = Math.max(maxZ, this.css('z-index'));
++		});
++		this.maxZ = maxZ;
++	},
++
++	height: function() {
++		var scrollHeight,
++			offsetHeight;
++		// handle IE 6
++		if ($.browser.msie && $.browser.version < 7) {
++			scrollHeight = Math.max(
++				document.documentElement.scrollHeight,
++				document.body.scrollHeight
++			);
++			offsetHeight = Math.max(
++				document.documentElement.offsetHeight,
++				document.body.offsetHeight
++			);
++
++			if (scrollHeight < offsetHeight) {
++				return $(window).height() + 'px';
++			} else {
++				return scrollHeight + 'px';
++			}
++		// handle "good" browsers
++		} else {
++			return $(document).height() + 'px';
++		}
++	},
++
++	width: function() {
++		var scrollWidth,
++			offsetWidth;
++		// handle IE
++		if ( $.browser.msie ) {
++			scrollWidth = Math.max(
++				document.documentElement.scrollWidth,
++				document.body.scrollWidth
++			);
++			offsetWidth = Math.max(
++				document.documentElement.offsetWidth,
++				document.body.offsetWidth
++			);
++
++			if (scrollWidth < offsetWidth) {
++				return $(window).width() + 'px';
++			} else {
++				return scrollWidth + 'px';
++			}
++		// handle "good" browsers
++		} else {
++			return $(document).width() + 'px';
++		}
++	},
++
++	resize: function() {
++		/* If the dialog is draggable and the user drags it past the
++		 * right edge of the window, the document becomes wider so we
++		 * need to stretch the overlay. If the user then drags the
++		 * dialog back to the left, the document will become narrower,
++		 * so we need to shrink the overlay to the appropriate size.
++		 * This is handled by shrinking the overlay before setting it
++		 * to the full document size.
++		 */
++		var $overlays = $([]);
++		$.each($.ui.dialog.overlay.instances, function() {
++			$overlays = $overlays.add(this);
++		});
++
++		$overlays.css({
++			width: 0,
++			height: 0
++		}).css({
++			width: $.ui.dialog.overlay.width(),
++			height: $.ui.dialog.overlay.height()
++		});
++	}
++});
++
++$.extend($.ui.dialog.overlay.prototype, {
++	destroy: function() {
++		$.ui.dialog.overlay.destroy(this.$el);
++	}
++});
++
++}(jQuery));
++/*
++ * jQuery UI Position 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Position
++ */
++(function( $, undefined ) {
++
++$.ui = $.ui || {};
++
++var horizontalPositions = /left|center|right/,
++	verticalPositions = /top|center|bottom/,
++	center = "center",
++	_position = $.fn.position,
++	_offset = $.fn.offset;
++
++$.fn.position = function( options ) {
++	if ( !options || !options.of ) {
++		return _position.apply( this, arguments );
++	}
++
++	// make a copy, we don't want to modify arguments
++	options = $.extend( {}, options );
++
++	var target = $( options.of ),
++		targetElem = target[0],
++		collision = ( options.collision || "flip" ).split( " " ),
++		offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ],
++		targetWidth,
++		targetHeight,
++		basePosition;
++
++	if ( targetElem.nodeType === 9 ) {
++		targetWidth = target.width();
++		targetHeight = target.height();
++		basePosition = { top: 0, left: 0 };
++	// TODO: use $.isWindow() in 1.9
++	} else if ( targetElem.setTimeout ) {
++		targetWidth = target.width();
++		targetHeight = target.height();
++		basePosition = { top: target.scrollTop(), left: target.scrollLeft() };
++	} else if ( targetElem.preventDefault ) {
++		// force left top to allow flipping
++		options.at = "left top";
++		targetWidth = targetHeight = 0;
++		basePosition = { top: options.of.pageY, left: options.of.pageX };
++	} else {
++		targetWidth = target.outerWidth();
++		targetHeight = target.outerHeight();
++		basePosition = target.offset();
++	}
++
++	// force my and at to have valid horizontal and veritcal positions
++	// if a value is missing or invalid, it will be converted to center 
++	$.each( [ "my", "at" ], function() {
++		var pos = ( options[this] || "" ).split( " " );
++		if ( pos.length === 1) {
++			pos = horizontalPositions.test( pos[0] ) ?
++				pos.concat( [center] ) :
++				verticalPositions.test( pos[0] ) ?
++					[ center ].concat( pos ) :
++					[ center, center ];
++		}
++		pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;
++		pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;
++		options[ this ] = pos;
++	});
++
++	// normalize collision option
++	if ( collision.length === 1 ) {
++		collision[ 1 ] = collision[ 0 ];
++	}
++
++	// normalize offset option
++	offset[ 0 ] = parseInt( offset[0], 10 ) || 0;
++	if ( offset.length === 1 ) {
++		offset[ 1 ] = offset[ 0 ];
++	}
++	offset[ 1 ] = parseInt( offset[1], 10 ) || 0;
++
++	if ( options.at[0] === "right" ) {
++		basePosition.left += targetWidth;
++	} else if ( options.at[0] === center ) {
++		basePosition.left += targetWidth / 2;
++	}
++
++	if ( options.at[1] === "bottom" ) {
++		basePosition.top += targetHeight;
++	} else if ( options.at[1] === center ) {
++		basePosition.top += targetHeight / 2;
++	}
++
++	basePosition.left += offset[ 0 ];
++	basePosition.top += offset[ 1 ];
++
++	return this.each(function() {
++		var elem = $( this ),
++			elemWidth = elem.outerWidth(),
++			elemHeight = elem.outerHeight(),
++			marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0,
++			marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0,
++			collisionWidth = elemWidth + marginLeft +
++				( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ),
++			collisionHeight = elemHeight + marginTop +
++				( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ),
++			position = $.extend( {}, basePosition ),
++			collisionPosition;
++
++		if ( options.my[0] === "right" ) {
++			position.left -= elemWidth;
++		} else if ( options.my[0] === center ) {
++			position.left -= elemWidth / 2;
++		}
++
++		if ( options.my[1] === "bottom" ) {
++			position.top -= elemHeight;
++		} else if ( options.my[1] === center ) {
++			position.top -= elemHeight / 2;
++		}
++
++		// prevent fractions (see #5280)
++		position.left = Math.round( position.left );
++		position.top = Math.round( position.top );
++
++		collisionPosition = {
++			left: position.left - marginLeft,
++			top: position.top - marginTop
++		};
++
++		$.each( [ "left", "top" ], function( i, dir ) {
++			if ( $.ui.position[ collision[i] ] ) {
++				$.ui.position[ collision[i] ][ dir ]( position, {
++					targetWidth: targetWidth,
++					targetHeight: targetHeight,
++					elemWidth: elemWidth,
++					elemHeight: elemHeight,
++					collisionPosition: collisionPosition,
++					collisionWidth: collisionWidth,
++					collisionHeight: collisionHeight,
++					offset: offset,
++					my: options.my,
++					at: options.at
++				});
++			}
++		});
++
++		if ( $.fn.bgiframe ) {
++			elem.bgiframe();
++		}
++		elem.offset( $.extend( position, { using: options.using } ) );
++	});
++};
++
++$.ui.position = {
++	fit: {
++		left: function( position, data ) {
++			var win = $( window ),
++				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();
++			position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );
++		},
++		top: function( position, data ) {
++			var win = $( window ),
++				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();
++			position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );
++		}
++	},
++
++	flip: {
++		left: function( position, data ) {
++			if ( data.at[0] === center ) {
++				return;
++			}
++			var win = $( window ),
++				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),
++				myOffset = data.my[ 0 ] === "left" ?
++					-data.elemWidth :
++					data.my[ 0 ] === "right" ?
++						data.elemWidth :
++						0,
++				atOffset = data.at[ 0 ] === "left" ?
++					data.targetWidth :
++					-data.targetWidth,
++				offset = -2 * data.offset[ 0 ];
++			position.left += data.collisionPosition.left < 0 ?
++				myOffset + atOffset + offset :
++				over > 0 ?
++					myOffset + atOffset + offset :
++					0;
++		},
++		top: function( position, data ) {
++			if ( data.at[1] === center ) {
++				return;
++			}
++			var win = $( window ),
++				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),
++				myOffset = data.my[ 1 ] === "top" ?
++					-data.elemHeight :
++					data.my[ 1 ] === "bottom" ?
++						data.elemHeight :
++						0,
++				atOffset = data.at[ 1 ] === "top" ?
++					data.targetHeight :
++					-data.targetHeight,
++				offset = -2 * data.offset[ 1 ];
++			position.top += data.collisionPosition.top < 0 ?
++				myOffset + atOffset + offset :
++				over > 0 ?
++					myOffset + atOffset + offset :
++					0;
++		}
++	}
++};
++
++// offset setter from jQuery 1.4
++if ( !$.offset.setOffset ) {
++	$.offset.setOffset = function( elem, options ) {
++		// set position first, in-case top/left are set even on static elem
++		if ( /static/.test( $.curCSS( elem, "position" ) ) ) {
++			elem.style.position = "relative";
++		}
++		var curElem   = $( elem ),
++			curOffset = curElem.offset(),
++			curTop    = parseInt( $.curCSS( elem, "top",  true ), 10 ) || 0,
++			curLeft   = parseInt( $.curCSS( elem, "left", true ), 10)  || 0,
++			props     = {
++				top:  (options.top  - curOffset.top)  + curTop,
++				left: (options.left - curOffset.left) + curLeft
++			};
++		
++		if ( 'using' in options ) {
++			options.using.call( elem, props );
++		} else {
++			curElem.css( props );
++		}
++	};
++
++	$.fn.offset = function( options ) {
++		var elem = this[ 0 ];
++		if ( !elem || !elem.ownerDocument ) { return null; }
++		if ( options ) { 
++			return this.each(function() {
++				$.offset.setOffset( this, options );
++			});
++		}
++		return _offset.call( this );
++	};
++}
++
++}( jQuery ));
++/*
++ * jQuery UI Progressbar 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Progressbar
++ *
++ * Depends:
++ *   jquery.ui.core.js
++ *   jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget( "ui.progressbar", {
++	options: {
++		value: 0,
++		max: 100
++	},
++
++	min: 0,
++
++	_create: function() {
++		this.element
++			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.attr({
++				role: "progressbar",
++				"aria-valuemin": this.min,
++				"aria-valuemax": this.options.max,
++				"aria-valuenow": this._value()
++			});
++
++		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
++			.appendTo( this.element );
++
++		this.oldValue = this._value();
++		this._refreshValue();
++	},
++
++	destroy: function() {
++		this.element
++			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++
++		this.valueDiv.remove();
++
++		$.Widget.prototype.destroy.apply( this, arguments );
++	},
++
++	value: function( newValue ) {
++		if ( newValue === undefined ) {
++			return this._value();
++		}
++
++		this._setOption( "value", newValue );
++		return this;
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "value" ) {
++			this.options.value = value;
++			this._refreshValue();
++			if ( this._value() === this.options.max ) {
++				this._trigger( "complete" );
++			}
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++	},
++
++	_value: function() {
++		var val = this.options.value;
++		// normalize invalid value
++		if ( typeof val !== "number" ) {
++			val = 0;
++		}
++		return Math.min( this.options.max, Math.max( this.min, val ) );
++	},
++
++	_percentage: function() {
++		return 100 * this._value() / this.options.max;
++	},
++
++	_refreshValue: function() {
++		var value = this.value();
++		var percentage = this._percentage();
++
++		if ( this.oldValue !== value ) {
++			this.oldValue = value;
++			this._trigger( "change" );
++		}
++
++		this.valueDiv
++			.toggle( value > this.min )
++			.toggleClass( "ui-corner-right", value === this.options.max )
++			.width( percentage.toFixed(0) + "%" );
++		this.element.attr( "aria-valuenow", value );
++	}
++});
++
++$.extend( $.ui.progressbar, {
++	version: "1.8.15"
++});
++
++})( jQuery );
++/*
++ * jQuery UI Slider 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Slider
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++// number of pages in a slider
++// (how many times can you page up/down to go through the whole range)
++var numPages = 5;
++
++$.widget( "ui.slider", $.ui.mouse, {
++
++	widgetEventPrefix: "slide",
++
++	options: {
++		animate: false,
++		distance: 0,
++		max: 100,
++		min: 0,
++		orientation: "horizontal",
++		range: false,
++		step: 1,
++		value: 0,
++		values: null
++	},
++
++	_create: function() {
++		var self = this,
++			o = this.options,
++			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
++			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
++			handleCount = ( o.values && o.values.length ) || 1,
++			handles = [];
++
++		this._keySliding = false;
++		this._mouseSliding = false;
++		this._animateOff = true;
++		this._handleIndex = null;
++		this._detectOrientation();
++		this._mouseInit();
++
++		this.element
++			.addClass( "ui-slider" +
++				" ui-slider-" + this.orientation +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" +
++				( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) );
++
++		this.range = $([]);
++
++		if ( o.range ) {
++			if ( o.range === true ) {
++				if ( !o.values ) {
++					o.values = [ this._valueMin(), this._valueMin() ];
++				}
++				if ( o.values.length && o.values.length !== 2 ) {
++					o.values = [ o.values[0], o.values[0] ];
++				}
++			}
++
++			this.range = $( "<div></div>" )
++				.appendTo( this.element )
++				.addClass( "ui-slider-range" +
++				// note: this isn't the most fittingly semantic framework class for this element,
++				// but worked best visually with a variety of themes
++				" ui-widget-header" + 
++				( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) );
++		}
++
++		for ( var i = existingHandles.length; i < handleCount; i += 1 ) {
++			handles.push( handle );
++		}
++
++		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) );
++
++		this.handle = this.handles.eq( 0 );
++
++		this.handles.add( this.range ).filter( "a" )
++			.click(function( event ) {
++				event.preventDefault();
++			})
++			.hover(function() {
++				if ( !o.disabled ) {
++					$( this ).addClass( "ui-state-hover" );
++				}
++			}, function() {
++				$( this ).removeClass( "ui-state-hover" );
++			})
++			.focus(function() {
++				if ( !o.disabled ) {
++					$( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" );
++					$( this ).addClass( "ui-state-focus" );
++				} else {
++					$( this ).blur();
++				}
++			})
++			.blur(function() {
++				$( this ).removeClass( "ui-state-focus" );
++			});
++
++		this.handles.each(function( i ) {
++			$( this ).data( "index.ui-slider-handle", i );
++		});
++
++		this.handles
++			.keydown(function( event ) {
++				var ret = true,
++					index = $( this ).data( "index.ui-slider-handle" ),
++					allowed,
++					curVal,
++					newVal,
++					step;
++	
++				if ( self.options.disabled ) {
++					return;
++				}
++	
++				switch ( event.keyCode ) {
++					case $.ui.keyCode.HOME:
++					case $.ui.keyCode.END:
++					case $.ui.keyCode.PAGE_UP:
++					case $.ui.keyCode.PAGE_DOWN:
++					case $.ui.keyCode.UP:
++					case $.ui.keyCode.RIGHT:
++					case $.ui.keyCode.DOWN:
++					case $.ui.keyCode.LEFT:
++						ret = false;
++						if ( !self._keySliding ) {
++							self._keySliding = true;
++							$( this ).addClass( "ui-state-active" );
++							allowed = self._start( event, index );
++							if ( allowed === false ) {
++								return;
++							}
++						}
++						break;
++				}
++	
++				step = self.options.step;
++				if ( self.options.values && self.options.values.length ) {
++					curVal = newVal = self.values( index );
++				} else {
++					curVal = newVal = self.value();
++				}
++	
++				switch ( event.keyCode ) {
++					case $.ui.keyCode.HOME:
++						newVal = self._valueMin();
++						break;
++					case $.ui.keyCode.END:
++						newVal = self._valueMax();
++						break;
++					case $.ui.keyCode.PAGE_UP:
++						newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) );
++						break;
++					case $.ui.keyCode.PAGE_DOWN:
++						newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) );
++						break;
++					case $.ui.keyCode.UP:
++					case $.ui.keyCode.RIGHT:
++						if ( curVal === self._valueMax() ) {
++							return;
++						}
++						newVal = self._trimAlignValue( curVal + step );
++						break;
++					case $.ui.keyCode.DOWN:
++					case $.ui.keyCode.LEFT:
++						if ( curVal === self._valueMin() ) {
++							return;
++						}
++						newVal = self._trimAlignValue( curVal - step );
++						break;
++				}
++	
++				self._slide( event, index, newVal );
++	
++				return ret;
++	
++			})
++			.keyup(function( event ) {
++				var index = $( this ).data( "index.ui-slider-handle" );
++	
++				if ( self._keySliding ) {
++					self._keySliding = false;
++					self._stop( event, index );
++					self._change( event, index );
++					$( this ).removeClass( "ui-state-active" );
++				}
++	
++			});
++
++		this._refreshValue();
++
++		this._animateOff = false;
++	},
++
++	destroy: function() {
++		this.handles.remove();
++		this.range.remove();
++
++		this.element
++			.removeClass( "ui-slider" +
++				" ui-slider-horizontal" +
++				" ui-slider-vertical" +
++				" ui-slider-disabled" +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" )
++			.removeData( "slider" )
++			.unbind( ".slider" );
++
++		this._mouseDestroy();
++
++		return this;
++	},
++
++	_mouseCapture: function( event ) {
++		var o = this.options,
++			position,
++			normValue,
++			distance,
++			closestHandle,
++			self,
++			index,
++			allowed,
++			offset,
++			mouseOverHandle;
++
++		if ( o.disabled ) {
++			return false;
++		}
++
++		this.elementSize = {
++			width: this.element.outerWidth(),
++			height: this.element.outerHeight()
++		};
++		this.elementOffset = this.element.offset();
++
++		position = { x: event.pageX, y: event.pageY };
++		normValue = this._normValueFromMouse( position );
++		distance = this._valueMax() - this._valueMin() + 1;
++		self = this;
++		this.handles.each(function( i ) {
++			var thisDistance = Math.abs( normValue - self.values(i) );
++			if ( distance > thisDistance ) {
++				distance = thisDistance;
++				closestHandle = $( this );
++				index = i;
++			}
++		});
++
++		// workaround for bug #3736 (if both handles of a range are at 0,
++		// the first is always used as the one with least distance,
++		// and moving it is obviously prevented by preventing negative ranges)
++		if( o.range === true && this.values(1) === o.min ) {
++			index += 1;
++			closestHandle = $( this.handles[index] );
++		}
++
++		allowed = this._start( event, index );
++		if ( allowed === false ) {
++			return false;
++		}
++		this._mouseSliding = true;
++
++		self._handleIndex = index;
++
++		closestHandle
++			.addClass( "ui-state-active" )
++			.focus();
++		
++		offset = closestHandle.offset();
++		mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" );
++		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
++			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
++			top: event.pageY - offset.top -
++				( closestHandle.height() / 2 ) -
++				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
++				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
++				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
++		};
++
++		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
++			this._slide( event, index, normValue );
++		}
++		this._animateOff = true;
++		return true;
++	},
++
++	_mouseStart: function( event ) {
++		return true;
++	},
++
++	_mouseDrag: function( event ) {
++		var position = { x: event.pageX, y: event.pageY },
++			normValue = this._normValueFromMouse( position );
++		
++		this._slide( event, this._handleIndex, normValue );
++
++		return false;
++	},
++
++	_mouseStop: function( event ) {
++		this.handles.removeClass( "ui-state-active" );
++		this._mouseSliding = false;
++
++		this._stop( event, this._handleIndex );
++		this._change( event, this._handleIndex );
++
++		this._handleIndex = null;
++		this._clickOffset = null;
++		this._animateOff = false;
++
++		return false;
++	},
++	
++	_detectOrientation: function() {
++		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
++	},
++
++	_normValueFromMouse: function( position ) {
++		var pixelTotal,
++			pixelMouse,
++			percentMouse,
++			valueTotal,
++			valueMouse;
++
++		if ( this.orientation === "horizontal" ) {
++			pixelTotal = this.elementSize.width;
++			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
++		} else {
++			pixelTotal = this.elementSize.height;
++			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
++		}
++
++		percentMouse = ( pixelMouse / pixelTotal );
++		if ( percentMouse > 1 ) {
++			percentMouse = 1;
++		}
++		if ( percentMouse < 0 ) {
++			percentMouse = 0;
++		}
++		if ( this.orientation === "vertical" ) {
++			percentMouse = 1 - percentMouse;
++		}
++
++		valueTotal = this._valueMax() - this._valueMin();
++		valueMouse = this._valueMin() + percentMouse * valueTotal;
++
++		return this._trimAlignValue( valueMouse );
++	},
++
++	_start: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++		return this._trigger( "start", event, uiHash );
++	},
++
++	_slide: function( event, index, newVal ) {
++		var otherVal,
++			newValues,
++			allowed;
++
++		if ( this.options.values && this.options.values.length ) {
++			otherVal = this.values( index ? 0 : 1 );
++
++			if ( ( this.options.values.length === 2 && this.options.range === true ) && 
++					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
++				) {
++				newVal = otherVal;
++			}
++
++			if ( newVal !== this.values( index ) ) {
++				newValues = this.values();
++				newValues[ index ] = newVal;
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal,
++					values: newValues
++				} );
++				otherVal = this.values( index ? 0 : 1 );
++				if ( allowed !== false ) {
++					this.values( index, newVal, true );
++				}
++			}
++		} else {
++			if ( newVal !== this.value() ) {
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal
++				} );
++				if ( allowed !== false ) {
++					this.value( newVal );
++				}
++			}
++		}
++	},
++
++	_stop: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++
++		this._trigger( "stop", event, uiHash );
++	},
++
++	_change: function( event, index ) {
++		if ( !this._keySliding && !this._mouseSliding ) {
++			var uiHash = {
++				handle: this.handles[ index ],
++				value: this.value()
++			};
++			if ( this.options.values && this.options.values.length ) {
++				uiHash.value = this.values( index );
++				uiHash.values = this.values();
++			}
++
++			this._trigger( "change", event, uiHash );
++		}
++	},
++
++	value: function( newValue ) {
++		if ( arguments.length ) {
++			this.options.value = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, 0 );
++			return;
++		}
++
++		return this._value();
++	},
++
++	values: function( index, newValue ) {
++		var vals,
++			newValues,
++			i;
++
++		if ( arguments.length > 1 ) {
++			this.options.values[ index ] = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, index );
++			return;
++		}
++
++		if ( arguments.length ) {
++			if ( $.isArray( arguments[ 0 ] ) ) {
++				vals = this.options.values;
++				newValues = arguments[ 0 ];
++				for ( i = 0; i < vals.length; i += 1 ) {
++					vals[ i ] = this._trimAlignValue( newValues[ i ] );
++					this._change( null, i );
++				}
++				this._refreshValue();
++			} else {
++				if ( this.options.values && this.options.values.length ) {
++					return this._values( index );
++				} else {
++					return this.value();
++				}
++			}
++		} else {
++			return this._values();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var i,
++			valsLength = 0;
++
++		if ( $.isArray( this.options.values ) ) {
++			valsLength = this.options.values.length;
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++
++		switch ( key ) {
++			case "disabled":
++				if ( value ) {
++					this.handles.filter( ".ui-state-focus" ).blur();
++					this.handles.removeClass( "ui-state-hover" );
++					this.handles.propAttr( "disabled", true );
++					this.element.addClass( "ui-disabled" );
++				} else {
++					this.handles.propAttr( "disabled", false );
++					this.element.removeClass( "ui-disabled" );
++				}
++				break;
++			case "orientation":
++				this._detectOrientation();
++				this.element
++					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
++					.addClass( "ui-slider-" + this.orientation );
++				this._refreshValue();
++				break;
++			case "value":
++				this._animateOff = true;
++				this._refreshValue();
++				this._change( null, 0 );
++				this._animateOff = false;
++				break;
++			case "values":
++				this._animateOff = true;
++				this._refreshValue();
++				for ( i = 0; i < valsLength; i += 1 ) {
++					this._change( null, i );
++				}
++				this._animateOff = false;
++				break;
++		}
++	},
++
++	//internal value getter
++	// _value() returns value trimmed by min and max, aligned by step
++	_value: function() {
++		var val = this.options.value;
++		val = this._trimAlignValue( val );
++
++		return val;
++	},
++
++	//internal values getter
++	// _values() returns array of values trimmed by min and max, aligned by step
++	// _values( index ) returns single value trimmed by min and max, aligned by step
++	_values: function( index ) {
++		var val,
++			vals,
++			i;
++
++		if ( arguments.length ) {
++			val = this.options.values[ index ];
++			val = this._trimAlignValue( val );
++
++			return val;
++		} else {
++			// .slice() creates a copy of the array
++			// this copy gets trimmed by min and max and then returned
++			vals = this.options.values.slice();
++			for ( i = 0; i < vals.length; i+= 1) {
++				vals[ i ] = this._trimAlignValue( vals[ i ] );
++			}
++
++			return vals;
++		}
++	},
++	
++	// returns the step-aligned value that val is closest to, between (inclusive) min and max
++	_trimAlignValue: function( val ) {
++		if ( val <= this._valueMin() ) {
++			return this._valueMin();
++		}
++		if ( val >= this._valueMax() ) {
++			return this._valueMax();
++		}
++		var step = ( this.options.step > 0 ) ? this.options.step : 1,
++			valModStep = (val - this._valueMin()) % step,
++			alignValue = val - valModStep;
++
++		if ( Math.abs(valModStep) * 2 >= step ) {
++			alignValue += ( valModStep > 0 ) ? step : ( -step );
++		}
++
++		// Since JavaScript has problems with large floats, round
++		// the final value to 5 digits after the decimal point (see #4124)
++		return parseFloat( alignValue.toFixed(5) );
++	},
++
++	_valueMin: function() {
++		return this.options.min;
++	},
++
++	_valueMax: function() {
++		return this.options.max;
++	},
++	
++	_refreshValue: function() {
++		var oRange = this.options.range,
++			o = this.options,
++			self = this,
++			animate = ( !this._animateOff ) ? o.animate : false,
++			valPercent,
++			_set = {},
++			lastValPercent,
++			value,
++			valueMin,
++			valueMax;
++
++		if ( this.options.values && this.options.values.length ) {
++			this.handles.each(function( i, j ) {
++				valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100;
++				_set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++				if ( self.options.range === true ) {
++					if ( self.orientation === "horizontal" ) {
++						if ( i === 0 ) {
++							self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					} else {
++						if ( i === 0 ) {
++							self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					}
++				}
++				lastValPercent = valPercent;
++			});
++		} else {
++			value = this.value();
++			valueMin = this._valueMin();
++			valueMax = this._valueMax();
++			valPercent = ( valueMax !== valueMin ) ?
++					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
++					0;
++			_set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++
++			if ( oRange === "min" && this.orientation === "horizontal" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "horizontal" ) {
++				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++			if ( oRange === "min" && this.orientation === "vertical" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "vertical" ) {
++				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++		}
++	}
++
++});
++
++$.extend( $.ui.slider, {
++	version: "1.8.15"
++});
++
++}(jQuery));
++/*
++ * jQuery UI Tabs 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Tabs
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var tabId = 0,
++	listId = 0;
++
++function getNextTabId() {
++	return ++tabId;
++}
++
++function getNextListId() {
++	return ++listId;
++}
++
++$.widget( "ui.tabs", {
++	options: {
++		add: null,
++		ajaxOptions: null,
++		cache: false,
++		cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
++		collapsible: false,
++		disable: null,
++		disabled: [],
++		enable: null,
++		event: "click",
++		fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
++		idPrefix: "ui-tabs-",
++		load: null,
++		panelTemplate: "<div></div>",
++		remove: null,
++		select: null,
++		show: null,
++		spinner: "<em>Loading&#8230;</em>",
++		tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
++	},
++
++	_create: function() {
++		this._tabify( true );
++	},
++
++	_setOption: function( key, value ) {
++		if ( key == "selected" ) {
++			if (this.options.collapsible && value == this.options.selected ) {
++				return;
++			}
++			this.select( value );
++		} else {
++			this.options[ key ] = value;
++			this._tabify();
++		}
++	},
++
++	_tabId: function( a ) {
++		return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
++			this.options.idPrefix + getNextTabId();
++	},
++
++	_sanitizeSelector: function( hash ) {
++		// we need this because an id may contain a ":"
++		return hash.replace( /:/g, "\\:" );
++	},
++
++	_cookie: function() {
++		var cookie = this.cookie ||
++			( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() );
++		return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );
++	},
++
++	_ui: function( tab, panel ) {
++		return {
++			tab: tab,
++			panel: panel,
++			index: this.anchors.index( tab )
++		};
++	},
++
++	_cleanup: function() {
++		// restore all former loading tabs labels
++		this.lis.filter( ".ui-state-processing" )
++			.removeClass( "ui-state-processing" )
++			.find( "span:data(label.tabs)" )
++				.each(function() {
++					var el = $( this );
++					el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" );
++				});
++	},
++
++	_tabify: function( init ) {
++		var self = this,
++			o = this.options,
++			fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
++
++		this.list = this.element.find( "ol,ul" ).eq( 0 );
++		this.lis = $( " > li:has(a[href])", this.list );
++		this.anchors = this.lis.map(function() {
++			return $( "a", this )[ 0 ];
++		});
++		this.panels = $( [] );
++
++		this.anchors.each(function( i, a ) {
++			var href = $( a ).attr( "href" );
++			// For dynamically created HTML that contains a hash as href IE < 8 expands
++			// such href to the full page url with hash and then misinterprets tab as ajax.
++			// Same consideration applies for an added tab with a fragment identifier
++			// since a[href=#fragment-identifier] does unexpectedly not match.
++			// Thus normalize href attribute...
++			var hrefBase = href.split( "#" )[ 0 ],
++				baseEl;
++			if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] ||
++					( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) {
++				href = a.hash;
++				a.href = href;
++			}
++
++			// inline tab
++			if ( fragmentId.test( href ) ) {
++				self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) );
++			// remote tab
++			// prevent loading the page itself if href is just "#"
++			} else if ( href && href !== "#" ) {
++				// required for restore on destroy
++				$.data( a, "href.tabs", href );
++
++				// TODO until #3808 is fixed strip fragment identifier from url
++				// (IE fails to load from such url)
++				$.data( a, "load.tabs", href.replace( /#.*$/, "" ) );
++
++				var id = self._tabId( a );
++				a.href = "#" + id;
++				var $panel = self.element.find( "#" + id );
++				if ( !$panel.length ) {
++					$panel = $( o.panelTemplate )
++						.attr( "id", id )
++						.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++						.insertAfter( self.panels[ i - 1 ] || self.list );
++					$panel.data( "destroy.tabs", true );
++				}
++				self.panels = self.panels.add( $panel );
++			// invalid tab href
++			} else {
++				o.disabled.push( i );
++			}
++		});
++
++		// initialization from scratch
++		if ( init ) {
++			// attach necessary classes for styling
++			this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" );
++			this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
++			this.lis.addClass( "ui-state-default ui-corner-top" );
++			this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" );
++
++			// Selected tab
++			// use "selected" option or try to retrieve:
++			// 1. from fragment identifier in url
++			// 2. from cookie
++			// 3. from selected class attribute on <li>
++			if ( o.selected === undefined ) {
++				if ( location.hash ) {
++					this.anchors.each(function( i, a ) {
++						if ( a.hash == location.hash ) {
++							o.selected = i;
++							return false;
++						}
++					});
++				}
++				if ( typeof o.selected !== "number" && o.cookie ) {
++					o.selected = parseInt( self._cookie(), 10 );
++				}
++				if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) {
++					o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
++				}
++				o.selected = o.selected || ( this.lis.length ? 0 : -1 );
++			} else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release
++				o.selected = -1;
++			}
++
++			// sanity check - default to first tab...
++			o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 )
++				? o.selected
++				: 0;
++
++			// Take disabling tabs via class attribute from HTML
++			// into account and update option properly.
++			// A selected tab cannot become disabled.
++			o.disabled = $.unique( o.disabled.concat(
++				$.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) {
++					return self.lis.index( n );
++				})
++			) ).sort();
++
++			if ( $.inArray( o.selected, o.disabled ) != -1 ) {
++				o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 );
++			}
++
++			// highlight selected tab
++			this.panels.addClass( "ui-tabs-hide" );
++			this.lis.removeClass( "ui-tabs-selected ui-state-active" );
++			// check for length avoids error when initializing empty list
++			if ( o.selected >= 0 && this.anchors.length ) {
++				self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
++				this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );
++
++				// seems to be expected behavior that the show callback is fired
++				self.element.queue( "tabs", function() {
++					self._trigger( "show", null,
++						self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) );
++				});
++
++				this.load( o.selected );
++			}
++
++			// clean up to avoid memory leaks in certain versions of IE 6
++			// TODO: namespace this event
++			$( window ).bind( "unload", function() {
++				self.lis.add( self.anchors ).unbind( ".tabs" );
++				self.lis = self.anchors = self.panels = null;
++			});
++		// update selected after add/remove
++		} else {
++			o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
++		}
++
++		// update collapsible
++		// TODO: use .toggleClass()
++		this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" );
++
++		// set or update cookie after init and add/remove respectively
++		if ( o.cookie ) {
++			this._cookie( o.selected, o.cookie );
++		}
++
++		// disable tabs
++		for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
++			$( li )[ $.inArray( i, o.disabled ) != -1 &&
++				// TODO: use .toggleClass()
++				!$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" );
++		}
++
++		// reset cache if switching from cached to not cached
++		if ( o.cache === false ) {
++			this.anchors.removeData( "cache.tabs" );
++		}
++
++		// remove all handlers before, tabify may run on existing tabs after add or option change
++		this.lis.add( this.anchors ).unbind( ".tabs" );
++
++		if ( o.event !== "mouseover" ) {
++			var addState = function( state, el ) {
++				if ( el.is( ":not(.ui-state-disabled)" ) ) {
++					el.addClass( "ui-state-" + state );
++				}
++			};
++			var removeState = function( state, el ) {
++				el.removeClass( "ui-state-" + state );
++			};
++			this.lis.bind( "mouseover.tabs" , function() {
++				addState( "hover", $( this ) );
++			});
++			this.lis.bind( "mouseout.tabs", function() {
++				removeState( "hover", $( this ) );
++			});
++			this.anchors.bind( "focus.tabs", function() {
++				addState( "focus", $( this ).closest( "li" ) );
++			});
++			this.anchors.bind( "blur.tabs", function() {
++				removeState( "focus", $( this ).closest( "li" ) );
++			});
++		}
++
++		// set up animations
++		var hideFx, showFx;
++		if ( o.fx ) {
++			if ( $.isArray( o.fx ) ) {
++				hideFx = o.fx[ 0 ];
++				showFx = o.fx[ 1 ];
++			} else {
++				hideFx = showFx = o.fx;
++			}
++		}
++
++		// Reset certain styles left over from animation
++		// and prevent IE's ClearType bug...
++		function resetStyle( $el, fx ) {
++			$el.css( "display", "" );
++			if ( !$.support.opacity && fx.opacity ) {
++				$el[ 0 ].style.removeAttribute( "filter" );
++			}
++		}
++
++		// Show a tab...
++		var showTab = showFx
++			? function( clicked, $show ) {
++				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
++				$show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way
++					.animate( showFx, showFx.duration || "normal", function() {
++						resetStyle( $show, showFx );
++						self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
++					});
++			}
++			: function( clicked, $show ) {
++				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
++				$show.removeClass( "ui-tabs-hide" );
++				self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
++			};
++
++		// Hide a tab, $show is optional...
++		var hideTab = hideFx
++			? function( clicked, $hide ) {
++				$hide.animate( hideFx, hideFx.duration || "normal", function() {
++					self.lis.removeClass( "ui-tabs-selected ui-state-active" );
++					$hide.addClass( "ui-tabs-hide" );
++					resetStyle( $hide, hideFx );
++					self.element.dequeue( "tabs" );
++				});
++			}
++			: function( clicked, $hide, $show ) {
++				self.lis.removeClass( "ui-tabs-selected ui-state-active" );
++				$hide.addClass( "ui-tabs-hide" );
++				self.element.dequeue( "tabs" );
++			};
++
++		// attach tab event handler, unbind to avoid duplicates from former tabifying...
++		this.anchors.bind( o.event + ".tabs", function() {
++			var el = this,
++				$li = $(el).closest( "li" ),
++				$hide = self.panels.filter( ":not(.ui-tabs-hide)" ),
++				$show = self.element.find( self._sanitizeSelector( el.hash ) );
++
++			// If tab is already selected and not collapsible or tab disabled or
++			// or is already loading or click callback returns false stop here.
++			// Check if click handler returns false last so that it is not executed
++			// for a disabled or loading tab!
++			if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) ||
++				$li.hasClass( "ui-state-disabled" ) ||
++				$li.hasClass( "ui-state-processing" ) ||
++				self.panels.filter( ":animated" ).length ||
++				self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) {
++				this.blur();
++				return false;
++			}
++
++			o.selected = self.anchors.index( this );
++
++			self.abort();
++
++			// if tab may be closed
++			if ( o.collapsible ) {
++				if ( $li.hasClass( "ui-tabs-selected" ) ) {
++					o.selected = -1;
++
++					if ( o.cookie ) {
++						self._cookie( o.selected, o.cookie );
++					}
++
++					self.element.queue( "tabs", function() {
++						hideTab( el, $hide );
++					}).dequeue( "tabs" );
++
++					this.blur();
++					return false;
++				} else if ( !$hide.length ) {
++					if ( o.cookie ) {
++						self._cookie( o.selected, o.cookie );
++					}
++
++					self.element.queue( "tabs", function() {
++						showTab( el, $show );
++					});
++
++					// TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
++					self.load( self.anchors.index( this ) );
++
++					this.blur();
++					return false;
++				}
++			}
++
++			if ( o.cookie ) {
++				self._cookie( o.selected, o.cookie );
++			}
++
++			// show new tab
++			if ( $show.length ) {
++				if ( $hide.length ) {
++					self.element.queue( "tabs", function() {
++						hideTab( el, $hide );
++					});
++				}
++				self.element.queue( "tabs", function() {
++					showTab( el, $show );
++				});
++
++				self.load( self.anchors.index( this ) );
++			} else {
++				throw "jQuery UI Tabs: Mismatching fragment identifier.";
++			}
++
++			// Prevent IE from keeping other link focussed when using the back button
++			// and remove dotted border from clicked link. This is controlled via CSS
++			// in modern browsers; blur() removes focus from address bar in Firefox
++			// which can become a usability and annoying problem with tabs('rotate').
++			if ( $.browser.msie ) {
++				this.blur();
++			}
++		});
++
++		// disable click in any case
++		this.anchors.bind( "click.tabs", function(){
++			return false;
++		});
++	},
++
++    _getIndex: function( index ) {
++		// meta-function to give users option to provide a href string instead of a numerical index.
++		// also sanitizes numerical indexes to valid values.
++		if ( typeof index == "string" ) {
++			index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) );
++		}
++
++		return index;
++	},
++
++	destroy: function() {
++		var o = this.options;
++
++		this.abort();
++
++		this.element
++			.unbind( ".tabs" )
++			.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" )
++			.removeData( "tabs" );
++
++		this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
++
++		this.anchors.each(function() {
++			var href = $.data( this, "href.tabs" );
++			if ( href ) {
++				this.href = href;
++			}
++			var $this = $( this ).unbind( ".tabs" );
++			$.each( [ "href", "load", "cache" ], function( i, prefix ) {
++				$this.removeData( prefix + ".tabs" );
++			});
++		});
++
++		this.lis.unbind( ".tabs" ).add( this.panels ).each(function() {
++			if ( $.data( this, "destroy.tabs" ) ) {
++				$( this ).remove();
++			} else {
++				$( this ).removeClass([
++					"ui-state-default",
++					"ui-corner-top",
++					"ui-tabs-selected",
++					"ui-state-active",
++					"ui-state-hover",
++					"ui-state-focus",
++					"ui-state-disabled",
++					"ui-tabs-panel",
++					"ui-widget-content",
++					"ui-corner-bottom",
++					"ui-tabs-hide"
++				].join( " " ) );
++			}
++		});
++
++		if ( o.cookie ) {
++			this._cookie( null, o.cookie );
++		}
++
++		return this;
++	},
++
++	add: function( url, label, index ) {
++		if ( index === undefined ) {
++			index = this.anchors.length;
++		}
++
++		var self = this,
++			o = this.options,
++			$li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ),
++			id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] );
++
++		$li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true );
++
++		// try to find an existing element before creating a new one
++		var $panel = self.element.find( "#" + id );
++		if ( !$panel.length ) {
++			$panel = $( o.panelTemplate )
++				.attr( "id", id )
++				.data( "destroy.tabs", true );
++		}
++		$panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );
++
++		if ( index >= this.lis.length ) {
++			$li.appendTo( this.list );
++			$panel.appendTo( this.list[ 0 ].parentNode );
++		} else {
++			$li.insertBefore( this.lis[ index ] );
++			$panel.insertBefore( this.panels[ index ] );
++		}
++
++		o.disabled = $.map( o.disabled, function( n, i ) {
++			return n >= index ? ++n : n;
++		});
++
++		this._tabify();
++
++		if ( this.anchors.length == 1 ) {
++			o.selected = 0;
++			$li.addClass( "ui-tabs-selected ui-state-active" );
++			$panel.removeClass( "ui-tabs-hide" );
++			this.element.queue( "tabs", function() {
++				self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) );
++			});
++
++			this.load( 0 );
++		}
++
++		this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
++		return this;
++	},
++
++	remove: function( index ) {
++		index = this._getIndex( index );
++		var o = this.options,
++			$li = this.lis.eq( index ).remove(),
++			$panel = this.panels.eq( index ).remove();
++
++		// If selected tab was removed focus tab to the right or
++		// in case the last tab was removed the tab to the left.
++		if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) {
++			this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );
++		}
++
++		o.disabled = $.map(
++			$.grep( o.disabled, function(n, i) {
++				return n != index;
++			}),
++			function( n, i ) {
++				return n >= index ? --n : n;
++			});
++
++		this._tabify();
++
++		this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) );
++		return this;
++	},
++
++	enable: function( index ) {
++		index = this._getIndex( index );
++		var o = this.options;
++		if ( $.inArray( index, o.disabled ) == -1 ) {
++			return;
++		}
++
++		this.lis.eq( index ).removeClass( "ui-state-disabled" );
++		o.disabled = $.grep( o.disabled, function( n, i ) {
++			return n != index;
++		});
++
++		this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
++		return this;
++	},
++
++	disable: function( index ) {
++		index = this._getIndex( index );
++		var self = this, o = this.options;
++		// cannot disable already selected tab
++		if ( index != o.selected ) {
++			this.lis.eq( index ).addClass( "ui-state-disabled" );
++
++			o.disabled.push( index );
++			o.disabled.sort();
++
++			this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
++		}
++
++		return this;
++	},
++
++	select: function( index ) {
++		index = this._getIndex( index );
++		if ( index == -1 ) {
++			if ( this.options.collapsible && this.options.selected != -1 ) {
++				index = this.options.selected;
++			} else {
++				return this;
++			}
++		}
++		this.anchors.eq( index ).trigger( this.options.event + ".tabs" );
++		return this;
++	},
++
++	load: function( index ) {
++		index = this._getIndex( index );
++		var self = this,
++			o = this.options,
++			a = this.anchors.eq( index )[ 0 ],
++			url = $.data( a, "load.tabs" );
++
++		this.abort();
++
++		// not remote or from cache
++		if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) {
++			this.element.dequeue( "tabs" );
++			return;
++		}
++
++		// load remote from here on
++		this.lis.eq( index ).addClass( "ui-state-processing" );
++
++		if ( o.spinner ) {
++			var span = $( "span", a );
++			span.data( "label.tabs", span.html() ).html( o.spinner );
++		}
++
++		this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {
++			url: url,
++			success: function( r, s ) {
++				self.element.find( self._sanitizeSelector( a.hash ) ).html( r );
++
++				// take care of tab labels
++				self._cleanup();
++
++				if ( o.cache ) {
++					$.data( a, "cache.tabs", true );
++				}
++
++				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
++				try {
++					o.ajaxOptions.success( r, s );
++				}
++				catch ( e ) {}
++			},
++			error: function( xhr, s, e ) {
++				// take care of tab labels
++				self._cleanup();
++
++				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
++				try {
++					// Passing index avoid a race condition when this method is
++					// called after the user has selected another tab.
++					// Pass the anchor that initiated this request allows
++					// loadError to manipulate the tab content panel via $(a.hash)
++					o.ajaxOptions.error( xhr, s, index, a );
++				}
++				catch ( e ) {}
++			}
++		} ) );
++
++		// last, so that load event is fired before show...
++		self.element.dequeue( "tabs" );
++
++		return this;
++	},
++
++	abort: function() {
++		// stop possibly running animations
++		this.element.queue( [] );
++		this.panels.stop( false, true );
++
++		// "tabs" queue must not contain more than two elements,
++		// which are the callbacks for the latest clicked tab...
++		this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) );
++
++		// terminate pending requests from other tabs
++		if ( this.xhr ) {
++			this.xhr.abort();
++			delete this.xhr;
++		}
++
++		// take care of tab labels
++		this._cleanup();
++		return this;
++	},
++
++	url: function( index, url ) {
++		this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url );
++		return this;
++	},
++
++	length: function() {
++		return this.anchors.length;
++	}
++});
++
++$.extend( $.ui.tabs, {
++	version: "1.8.15"
++});
++
++/*
++ * Tabs Extensions
++ */
++
++/*
++ * Rotate
++ */
++$.extend( $.ui.tabs.prototype, {
++	rotation: null,
++	rotate: function( ms, continuing ) {
++		var self = this,
++			o = this.options;
++
++		var rotate = self._rotate || ( self._rotate = function( e ) {
++			clearTimeout( self.rotation );
++			self.rotation = setTimeout(function() {
++				var t = o.selected;
++				self.select( ++t < self.anchors.length ? t : 0 );
++			}, ms );
++			
++			if ( e ) {
++				e.stopPropagation();
++			}
++		});
++
++		var stop = self._unrotate || ( self._unrotate = !continuing
++			? function(e) {
++				if (e.clientX) { // in case of a true click
++					self.rotate(null);
++				}
++			}
++			: function( e ) {
++				t = o.selected;
++				rotate();
++			});
++
++		// start rotation
++		if ( ms ) {
++			this.element.bind( "tabsshow", rotate );
++			this.anchors.bind( o.event + ".tabs", stop );
++			rotate();
++		// stop rotation
++		} else {
++			clearTimeout( self.rotation );
++			this.element.unbind( "tabsshow", rotate );
++			this.anchors.unbind( o.event + ".tabs", stop );
++			delete this._rotate;
++			delete this._unrotate;
++		}
++
++		return this;
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.min.js	(revision 15487)
+@@ -0,0 +1,413 @@
++/*!
++ * jQuery UI 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI
++ */
++(function(a,c){function d(h,g){var i=h.nodeName.toLowerCase();if("area"===i){g=h.parentNode;i=g.name;if(!h.href||!i||g.nodeName.toLowerCase()!=="map")return false;h=a("img[usemap=#"+i+"]")[0];return!!h&&e(h)}return(/input|select|textarea|button|object/.test(i)?!h.disabled:"a"==i?h.href||g:g)&&e(h)}function e(h){return!a(h).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.8.15",
++keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(h,g){return typeof h==="number"?this.each(function(){var i=
++this;setTimeout(function(){a(i).focus();g&&g.call(i)},h)}):this._focus.apply(this,arguments)},scrollParent:function(){var h;h=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,
++"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!h.length?a(document):h},zIndex:function(h){if(h!==c)return this.css("zIndex",h);if(this.length){h=a(this[0]);for(var g;h.length&&h[0]!==document;){g=h.css("position");if(g==="absolute"||g==="relative"||g==="fixed"){g=parseInt(h.css("zIndex"),10);if(!isNaN(g)&&g!==0)return g}h=h.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":
++"mousedown")+".ui-disableSelection",function(h){h.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(h,g){function i(l,o,n,k){a.each(b,function(){o-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(n)o-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(k)o-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return o}var b=g==="Width"?["Left","Right"]:["Top","Bottom"],f=g.toLowerCase(),j={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,
++outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+g]=function(l){if(l===c)return j["inner"+g].call(this);return this.each(function(){a(this).css(f,i(this,l)+"px")})};a.fn["outer"+g]=function(l,o){if(typeof l!=="number")return j["outer"+g].call(this,l);return this.each(function(){a(this).css(f,i(this,l,true,o)+"px")})}});a.extend(a.expr[":"],{data:function(h,g,i){return!!a.data(h,i[3])},focusable:function(h){return d(h,!isNaN(a.attr(h,"tabindex")))},tabbable:function(h){var g=a.attr(h,
++"tabindex"),i=isNaN(g);return(i||g>=0)&&d(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&&
++h.element[0].parentNode)for(var b=0;b<g.length;b++)h.options[g[b][0]]&&g[b][1].apply(h.element,i)}},contains:function(h,g){return document.compareDocumentPosition?h.compareDocumentPosition(g)&16:h!==g&&h.contains(g)},hasScroll:function(h,g){if(a(h).css("overflow")==="hidden")return false;g=g&&g==="left"?"scrollLeft":"scrollTop";var i=false;if(h[g]>0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h<g+i},isOver:function(h,g,i,b,f,j){return a.ui.isOverAxis(h,i,f)&&
++a.ui.isOverAxis(g,b,j)}})}})(jQuery);
++(function(a,c){if(a.cleanData){var d=a.cleanData;a.cleanData=function(h){for(var g=0,i;(i=h[g])!=null;g++)a(i).triggerHandler("remove");d(h)}}else{var e=a.fn.remove;a.fn.remove=function(h,g){return this.each(function(){if(!g)if(!h||a.filter(h,[this]).length)a("*",this).add([this]).each(function(){a(this).triggerHandler("remove")});return e.call(a(this),h,g)})}}a.widget=function(h,g,i){var b=h.split(".")[0],f;h=h.split(".")[1];f=b+"-"+h;if(!i){i=g;g=a.Widget}a.expr[":"][f]=function(j){return!!a.data(j,
++h)};a[b]=a[b]||{};a[b][h]=function(j,l){arguments.length&&this._createWidget(j,l)};g=new g;g.options=a.extend(true,{},g.options);a[b][h].prototype=a.extend(true,g,{namespace:b,widgetName:h,widgetEventPrefix:a[b][h].prototype.widgetEventPrefix||h,widgetBaseClass:f},i);a.widget.bridge(h,a[b][h])};a.widget.bridge=function(h,g){a.fn[h]=function(i){var b=typeof i==="string",f=Array.prototype.slice.call(arguments,1),j=this;i=!b&&f.length?a.extend.apply(null,[true,i].concat(f)):i;if(b&&i.charAt(0)==="_")return j;
++b?this.each(function(){var l=a.data(this,h),o=l&&a.isFunction(l[i])?l[i].apply(l,f):l;if(o!==l&&o!==c){j=o;return false}}):this.each(function(){var l=a.data(this,h);l?l.option(i||{})._init():a.data(this,h,new g(i,this))});return j}};a.Widget=function(h,g){arguments.length&&this._createWidget(h,g)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(h,g){a.data(g,this.widgetName,this);this.element=a(g);this.options=a.extend(true,{},this.options,
++this._getCreateOptions(),h);var i=this;this.element.bind("remove."+this.widgetName,function(){i.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
++widget:function(){return this.element},option:function(h,g){var i=h;if(arguments.length===0)return a.extend({},this.options);if(typeof h==="string"){if(g===c)return this.options[h];i={};i[h]=g}this._setOptions(i);return this},_setOptions:function(h){var g=this;a.each(h,function(i,b){g._setOption(i,b)});return this},_setOption:function(h,g){this.options[h]=g;if(h==="disabled")this.widget()[g?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",g);return this},
++enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(h,g,i){var b=this.options[h];g=a.Event(g);g.type=(h===this.widgetEventPrefix?h:this.widgetEventPrefix+h).toLowerCase();i=i||{};if(g.originalEvent){h=a.event.props.length;for(var f;h;){f=a.event.props[--h];g[f]=g.originalEvent[f]}}this.element.trigger(g,i);return!(a.isFunction(b)&&b.call(this.element[0],g,i)===false||g.isDefaultPrevented())}}})(jQuery);
++(function(a){a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(d){return c._mouseDown(d)}).bind("click."+this.widgetName,function(d){if(true===a.data(d.target,c.widgetName+".preventClickEvent")){a.removeData(d.target,c.widgetName+".preventClickEvent");d.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(c){c.originalEvent=
++c.originalEvent||{};if(!c.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var d=this,e=c.which==1,h=typeof this.options.cancel=="string"?a(c.target).closest(this.options.cancel).length:false;if(!e||h||!this._mouseCapture(c))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)){this._mouseStarted=this._mouseStart(c)!==
++false;if(!this._mouseStarted){c.preventDefault();return true}}true===a.data(c.target,this.widgetName+".preventClickEvent")&&a.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(g){return d._mouseMove(g)};this._mouseUpDelegate=function(g){return d._mouseUp(g)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return c.originalEvent.mouseHandled=true}},_mouseMove:function(c){if(a.browser.msie&&
++!(document.documentMode>=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
++false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
++(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
++"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(c){var d=
++this.options;if(this.helper||d.disabled||a(c.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(c);if(!this.handle)return false;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(c){var d=this.options;this.helper=
++this._createHelper(c);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:c.pageX-this.offset.left,top:c.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
++this.originalPosition=this.position=this._generatePosition(c);this.originalPageX=c.pageX;this.originalPageY=c.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);d.containment&&this._setContainment();if(this._trigger("start",c)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,c);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(c,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,c);return true},
++_mouseDrag:function(c,d){this.position=this._generatePosition(c);this.positionAbs=this._convertPositionTo("absolute");if(!d){d=this._uiHash();if(this._trigger("drag",c,d)===false){this._mouseUp({});return false}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,c);return false},_mouseStop:function(c){var d=
++false;if(a.ui.ddmanager&&!this.options.dropBehaviour)d=a.ui.ddmanager.drop(this,c);if(this.dropped){d=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!d||this.options.revert=="valid"&&d||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
++10),function(){e._trigger("stop",c)!==false&&e._clear()})}else this._trigger("stop",c)!==false&&this._clear();return false},_mouseUp:function(c){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,c);return a.ui.mouse.prototype._mouseUp.call(this,c)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(c){var d=!this.options.handle||
++!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==c.target)d=true});return d},_createHelper:function(c){var d=this.options;c=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):d.helper=="clone"?this.element.clone().removeAttr("id"):this.element;c.parents("body").length||c.appendTo(d.appendTo=="parent"?this.element[0].parentNode:d.appendTo);c[0]!=this.element[0]&&!/(fixed|absolute)/.test(c.css("position"))&&
++c.css("position","absolute");return c},_adjustOffsetFromHelper:function(c){if(typeof c=="string")c=c.split(" ");if(a.isArray(c))c={left:+c[0],top:+c[1]||0};if("left"in c)this.offset.click.left=c.left+this.margins.left;if("right"in c)this.offset.click.left=this.helperProportions.width-c.right+this.margins.left;if("top"in c)this.offset.click.top=c.top+this.margins.top;if("bottom"in c)this.offset.click.top=this.helperProportions.height-c.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
++this.helper.offsetParent();var c=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){c.left+=this.scrollParent.scrollLeft();c.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)c={top:0,left:0};return{top:c.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:c.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
++10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var c=this.element.position();return{top:c.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:c.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
++10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var c=this.options;if(c.containment=="parent")c.containment=this.helper[0].parentNode;if(c.containment=="document"||c.containment=="window")this.containment=[c.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,c.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
++(c.containment=="document"?0:a(window).scrollLeft())+a(c.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(c.containment=="document"?0:a(window).scrollTop())+(a(c.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(c.containment)&&c.containment.constructor!=Array){c=a(c.containment);var d=c[0];if(d){c.offset();var e=a(d).css("overflow")!=
++"hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(e?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),
++10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=c}}else if(c.containment.constructor==Array)this.containment=c.containment},_convertPositionTo:function(c,d){if(!d)d=this.position;c=c=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:d.top+
++this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*c)}},_generatePosition:function(c){var d=this.options,e=this.cssPosition=="absolute"&&
++!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=c.pageX,i=c.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(c.pageX-this.offset.click.left<b[0])g=b[0]+this.offset.click.left;
++if(c.pageY-this.offset.click.top<b[1])i=b[1]+this.offset.click.top;if(c.pageX-this.offset.click.left>b[2])g=b[2]+this.offset.click.left;if(c.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(d.grid){i=d.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/d.grid[1])*d.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.top<b[1]||i-this.offset.click.top>b[3])?i:!(i-this.offset.click.top<b[1])?i-d.grid[1]:i+d.grid[1]:i;g=d.grid[0]?this.originalPageX+Math.round((g-this.originalPageX)/
++d.grid[0])*d.grid[0]:this.originalPageX;g=b?!(g-this.offset.click.left<b[0]||g-this.offset.click.left>b[2])?g:!(g-this.offset.click.left<b[0])?g-d.grid[0]:g+d.grid[0]:g}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<
++526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(c,d,e){e=e||this._uiHash();a.ui.plugin.call(this,c,[d,e]);if(c=="drag")this.positionAbs=this._convertPositionTo("absolute");return a.Widget.prototype._trigger.call(this,c,d,
++e)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8.15"});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,d){var e=a(this).data("draggable"),h=e.options,g=a.extend({},d,{item:e.element});e.sortables=[];a(h.connectToSortable).each(function(){var i=a.data(this,"sortable");if(i&&!i.options.disabled){e.sortables.push({instance:i,shouldRevert:i.options.revert});
++i.refreshPositions();i._trigger("activate",c,g)}})},stop:function(c,d){var e=a(this).data("draggable"),h=a.extend({},d,{item:e.element});a.each(e.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;e.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;e.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
++false;this.instance._trigger("deactivate",c,h)}})},drag:function(c,d){var e=a(this).data("draggable"),h=this;a.each(e.sortables,function(){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(h).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
++this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return d.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;
++e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}this.instance.currentItem&&this.instance._mouseDrag(c)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
++this.instance.placeholder.remove();e._trigger("fromSortable",c);e.dropped=false}})}});a.ui.plugin.add("draggable","cursor",{start:function(){var c=a("body"),d=a(this).data("draggable").options;if(c.css("cursor"))d._cursor=c.css("cursor");c.css("cursor",d.cursor)},stop:function(){var c=a(this).data("draggable").options;c._cursor&&a("body").css("cursor",c._cursor)}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){c=a(d.helper);d=a(this).data("draggable").options;if(c.css("opacity"))d._opacity=
++c.css("opacity");c.css("opacity",d.opacity)},stop:function(c,d){c=a(this).data("draggable").options;c._opacity&&a(d.helper).css("opacity",c._opacity)}});a.ui.plugin.add("draggable","scroll",{start:function(){var c=a(this).data("draggable");if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML")c.overflowOffset=c.scrollParent.offset()},drag:function(c){var d=a(this).data("draggable"),e=d.options,h=false;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!=
++"x")if(d.overflowOffset.top+d.scrollParent[0].offsetHeight-c.pageY<e.scrollSensitivity)d.scrollParent[0].scrollTop=h=d.scrollParent[0].scrollTop+e.scrollSpeed;else if(c.pageY-d.overflowOffset.top<e.scrollSensitivity)d.scrollParent[0].scrollTop=h=d.scrollParent[0].scrollTop-e.scrollSpeed;if(!e.axis||e.axis!="y")if(d.overflowOffset.left+d.scrollParent[0].offsetWidth-c.pageX<e.scrollSensitivity)d.scrollParent[0].scrollLeft=h=d.scrollParent[0].scrollLeft+e.scrollSpeed;else if(c.pageX-d.overflowOffset.left<
++e.scrollSensitivity)d.scrollParent[0].scrollLeft=h=d.scrollParent[0].scrollLeft-e.scrollSpeed}else{if(!e.axis||e.axis!="x")if(c.pageY-a(document).scrollTop()<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed);else if(a(window).height()-(c.pageY-a(document).scrollTop())<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed);if(!e.axis||e.axis!="y")if(c.pageX-a(document).scrollLeft()<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()-
++e.scrollSpeed);else if(a(window).width()-(c.pageX-a(document).scrollLeft())<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed)}h!==false&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,c)}});a.ui.plugin.add("draggable","snap",{start:function(){var c=a(this).data("draggable"),d=c.options;c.snapElements=[];a(d.snap.constructor!=String?d.snap.items||":data(draggable)":d.snap).each(function(){var e=a(this),h=e.offset();this!=c.element[0]&&c.snapElements.push({item:this,
++width:e.outerWidth(),height:e.outerHeight(),top:h.top,left:h.left})})},drag:function(c,d){for(var e=a(this).data("draggable"),h=e.options,g=h.snapTolerance,i=d.offset.left,b=i+e.helperProportions.width,f=d.offset.top,j=f+e.helperProportions.height,l=e.snapElements.length-1;l>=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g<i&&i<n+g&&k-g<f&&f<m+g||o-g<i&&i<n+g&&k-g<j&&j<m+g||o-g<b&&b<n+g&&k-g<f&&f<m+g||o-g<b&&b<n+g&&k-g<j&&
++j<m+g){if(h.snapMode!="inner"){var p=Math.abs(k-j)<=g,q=Math.abs(m-f)<=g,s=Math.abs(o-b)<=g,r=Math.abs(n-i)<=g;if(p)d.position.top=e._convertPositionTo("relative",{top:k-e.helperProportions.height,left:0}).top-e.margins.top;if(q)d.position.top=e._convertPositionTo("relative",{top:m,left:0}).top-e.margins.top;if(s)d.position.left=e._convertPositionTo("relative",{top:0,left:o-e.helperProportions.width}).left-e.margins.left;if(r)d.position.left=e._convertPositionTo("relative",{top:0,left:n}).left-e.margins.left}var u=
++p||q||s||r;if(h.snapMode!="outer"){p=Math.abs(k-f)<=g;q=Math.abs(m-j)<=g;s=Math.abs(o-i)<=g;r=Math.abs(n-b)<=g;if(p)d.position.top=e._convertPositionTo("relative",{top:k,left:0}).top-e.margins.top;if(q)d.position.top=e._convertPositionTo("relative",{top:m-e.helperProportions.height,left:0}).top-e.margins.top;if(s)d.position.left=e._convertPositionTo("relative",{top:0,left:o}).left-e.margins.left;if(r)d.position.left=e._convertPositionTo("relative",{top:0,left:n-e.helperProportions.width}).left-e.margins.left}if(!e.snapElements[l].snapping&&
++(p||q||s||r||u))e.options.snap.snap&&e.options.snap.snap.call(e.element,c,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=p||q||s||r||u}else{e.snapElements[l].snapping&&e.options.snap.release&&e.options.snap.release.call(e.element,c,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=false}}}});a.ui.plugin.add("draggable","stack",{start:function(){var c=a(this).data("draggable").options;c=a.makeArray(a(c.stack)).sort(function(e,h){return(parseInt(a(e).css("zIndex"),
++10)||0)-(parseInt(a(h).css("zIndex"),10)||0)});if(c.length){var d=parseInt(c[0].style.zIndex)||0;a(c).each(function(e){this.style.zIndex=d+e});this[0].style.zIndex=d+c.length}}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){c=a(d.helper);d=a(this).data("draggable").options;if(c.css("zIndex"))d._zIndex=c.css("zIndex");c.css("zIndex",d.zIndex)},stop:function(c,d){c=a(this).data("draggable").options;c._zIndex&&a(d.helper).css("zIndex",c._zIndex)}})})(jQuery);
++(function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var c=this.options,d=c.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(d)?d:function(e){return e.is(d)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[c.scope]=a.ui.ddmanager.droppables[c.scope]||[];a.ui.ddmanager.droppables[c.scope].push(this);
++c.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var c=a.ui.ddmanager.droppables[this.options.scope],d=0;d<c.length;d++)c[d]==this&&c.splice(d,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(c,d){if(c=="accept")this.accept=a.isFunction(d)?d:function(e){return e.is(d)};a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(c){var d=a.ui.ddmanager.current;this.options.activeClass&&
++this.element.addClass(this.options.activeClass);d&&this._trigger("activate",c,this.ui(d))},_deactivate:function(c){var d=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);d&&this._trigger("deactivate",c,this.ui(d))},_over:function(c){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
++this._trigger("over",c,this.ui(d))}},_out:function(c){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",c,this.ui(d))}},_drop:function(c,d){var e=d||a.ui.ddmanager.current;if(!e||(e.currentItem||e.element)[0]==this.element[0])return false;var h=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
++a.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==e.options.scope&&g.accept.call(g.element[0],e.currentItem||e.element)&&a.ui.intersect(e,a.extend(g,{offset:g.element.offset()}),g.options.tolerance)){h=true;return false}});if(h)return false;if(this.accept.call(this.element[0],e.currentItem||e.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
++c,this.ui(e));return this.element}return false},ui:function(c){return{draggable:c.currentItem||c.element,helper:c.helper,position:c.position,offset:c.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8.15"});a.ui.intersect=function(c,d,e){if(!d.offset)return false;var h=(c.positionAbs||c.position.absolute).left,g=h+c.helperProportions.width,i=(c.positionAbs||c.position.absolute).top,b=i+c.helperProportions.height,f=d.offset.left,j=f+d.proportions.width,l=d.offset.top,o=l+d.proportions.height;
++switch(e){case "fit":return f<=h&&g<=j&&l<=i&&b<=o;case "intersect":return f<h+c.helperProportions.width/2&&g-c.helperProportions.width/2<j&&l<i+c.helperProportions.height/2&&b-c.helperProportions.height/2<o;case "pointer":return a.ui.isOver((c.positionAbs||c.position.absolute).top+(c.clickOffset||c.offset.click).top,(c.positionAbs||c.position.absolute).left+(c.clickOffset||c.offset.click).left,l,f,d.proportions.height,d.proportions.width);case "touch":return(i>=l&&i<=o||b>=l&&b<=o||i<l&&b>o)&&(h>=
++f&&h<=j||g>=f&&g<=j||h<f&&g>j);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(c,d){var e=a.ui.ddmanager.droppables[c.options.scope]||[],h=d?d.type:null,g=(c.currentItem||c.element).find(":data(droppable)").andSelf(),i=0;a:for(;i<e.length;i++)if(!(e[i].options.disabled||c&&!e[i].accept.call(e[i].element[0],c.currentItem||c.element))){for(var b=0;b<g.length;b++)if(g[b]==e[i].element[0]){e[i].proportions.height=0;continue a}e[i].visible=e[i].element.css("display")!=
++"none";if(e[i].visible){h=="mousedown"&&e[i]._activate.call(e[i],d);e[i].offset=e[i].element.offset();e[i].proportions={width:e[i].element[0].offsetWidth,height:e[i].element[0].offsetHeight}}}},drop:function(c,d){var e=false;a.each(a.ui.ddmanager.droppables[c.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&a.ui.intersect(c,this,this.options.tolerance))e=e||this._drop.call(this,d);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],c.currentItem||
++c.element)){this.isout=1;this.isover=0;this._deactivate.call(this,d)}}});return e},dragStart:function(c,d){c.element.parentsUntil("body").bind("scroll.droppable",function(){c.options.refreshPositions||a.ui.ddmanager.prepareOffsets(c,d)})},drag:function(c,d){c.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(c,d);a.each(a.ui.ddmanager.droppables[c.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var e=a.ui.intersect(c,this,this.options.tolerance);if(e=
++!e&&this.isover==1?"isout":e&&this.isover==0?"isover":null){var h;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){h=a.data(g[0],"droppable");h.greedyChild=e=="isover"?1:0}}if(h&&e=="isover"){h.isover=0;h.isout=1;h._out.call(h,d)}this[e]=1;this[e=="isout"?"isover":"isout"]=0;this[e=="isover"?"_over":"_out"].call(this,d);if(h&&e=="isout"){h.isout=0;h.isover=1;h._over.call(h,d)}}}})},dragStop:function(c,d){c.element.parentsUntil("body").unbind("scroll.droppable");
++c.options.refreshPositions||a.ui.ddmanager.prepareOffsets(c,d)}}})(jQuery);
++(function(a){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var e=this,h=this.options;this.element.addClass("ui-resizable");a.extend(this,{_aspectRatio:!!h.aspectRatio,aspectRatio:h.aspectRatio,originalElement:this.element,
++_proportionallyResizeElements:[],_helper:h.helper||h.ghost||h.animate?h.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
++top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
++this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
++nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i<g.length;i++){var b=a.trim(g[i]),f=a('<div class="ui-resizable-handle '+("ui-resizable-"+b)+'"></div>');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor==
++String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection();
++this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
++var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h=
++false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"});
++this._renderProxy();g=c(this.helper.css("left"));var b=c(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff=
++{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis];
++if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false},
++_mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b,
++{top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:d(h.minWidth)?h.minWidth:0,maxWidth:d(h.maxWidth)?h.maxWidth:Infinity,minHeight:d(h.minHeight)?h.minHeight:0,maxHeight:d(h.maxHeight)?h.maxHeight:
++Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(g<h.maxWidth)h.maxWidth=g;if(b<h.maxHeight)h.maxHeight=b}this._vBoundaries=h},_updateCache:function(e){this.offset=this.helper.offset();if(d(e.left))this.position.left=e.left;if(d(e.top))this.position.top=e.top;if(d(e.height))this.size.height=e.height;if(d(e.width))this.size.width=
++e.width},_updateRatio:function(e){var h=this.position,g=this.size,i=this.axis;if(d(e.height))e.width=e.height*this.aspectRatio;else if(d(e.width))e.height=e.width/this.aspectRatio;if(i=="sw"){e.left=h.left+(g.width-e.width);e.top=null}if(i=="nw"){e.top=h.top+(g.height-e.height);e.left=h.left+(g.width-e.width)}return e},_respectSize:function(e){var h=this._vBoundaries,g=this.axis,i=d(e.width)&&h.maxWidth&&h.maxWidth<e.width,b=d(e.height)&&h.maxHeight&&h.maxHeight<e.height,f=d(e.width)&&h.minWidth&&
++h.minWidth>e.width,j=d(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left=
++null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h<this._proportionallyResizeElements.length;h++){var g=this._proportionallyResizeElements[h];if(!this.borderDif){var i=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],b=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=a.map(i,function(f,j){f=parseInt(f,10)||
++0;j=parseInt(b[j],10)||0;return f+j})}a.browser.msie&&(a(e).is(":hidden")||a(e).parents(":hidden").length)||g.css({height:e.height()-this.borderDif[0]-this.borderDif[2]||0,width:e.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var e=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
++h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+
++g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]);
++e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.15"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(),
++10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top-
++b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?
++a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h=
++a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing,
++step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement=
++a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=c(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset;
++var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left:
++h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top-
++i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition,
++b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,
++display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e=
++a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height=
++i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var c=function(e){return parseInt(e,10)||0},d=function(e){return!isNaN(parseInt(e,10))}})(jQuery);
++(function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var d;this.refresh=function(){d=a(c.options.filter,c.element[0]);d.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"),
++selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=d.addClass("ui-selectee");this._mouseInit();this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var d=this;this.opos=[c.pageX,
++c.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",c);a(e.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!c.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;d._trigger("unselecting",
++c,{unselecting:h.element})}});a(c.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!c.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?d._trigger("selecting",c,{selecting:h.element}):d._trigger("unselecting",c,{unselecting:h.element});return false}})}},_mouseDrag:function(c){var d=this;this.dragged=true;if(!this.options.disabled){var e=
++this.options,h=this.opos[0],g=this.opos[1],i=c.pageX,b=c.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==d.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.right<h||j.top>b||j.bottom<g);else if(e.tolerance=="fit")l=j.left>h&&j.right<i&&j.top>g&&j.bottom<b;if(l){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");
++j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;d._trigger("selecting",c,{selecting:j.element})}}else{if(j.selecting)if(c.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}d._trigger("unselecting",c,{unselecting:j.element})}if(j.selected)if(!c.metaKey&&
++!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;d._trigger("unselecting",c,{unselecting:j.element})}}}});return false}},_mouseStop:function(c){var d=this;this.dragged=false;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;d._trigger("unselected",c,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=
++a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;d._trigger("selected",c,{selected:e.element})});this._trigger("stop",c);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8.15"})})(jQuery);
++(function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var c=this.options;this.containerCache={};this.element.addClass("ui-sortable");
++this.refresh();this.floating=this.items.length?c.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var c=this.items.length-1;c>=0;c--)this.items[c].item.removeData("sortable-item");return this},_setOption:function(c,d){if(c===
++"disabled"){this.options[c]=d;this.widget()[d?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(c,d){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(c);var e=null,h=this;a(c.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(c.target,"sortable-item")==h)e=a(c.target);if(!e)return false;if(this.options.handle&&
++!d){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==c.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(c,d,e){d=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(c);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
++left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:c.pageX-this.offset.left,top:c.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(c);this.originalPageX=c.pageX;this.originalPageY=c.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
++this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();d.containment&&this._setContainment();if(d.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",d.cursor)}if(d.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",d.opacity)}if(d.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",d.zIndex)}if(this.scrollParent[0]!=
++document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",c,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",c,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,c);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(c);
++return true},_mouseDrag:function(c){this.position=this._generatePosition(c);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var d=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-c.pageY<d.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop+d.scrollSpeed;else if(c.pageY-this.overflowOffset.top<
++d.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop-d.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-c.pageX<d.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft+d.scrollSpeed;else if(c.pageX-this.overflowOffset.left<d.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft-d.scrollSpeed}else{if(c.pageY-a(document).scrollTop()<d.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()-
++d.scrollSpeed);else if(a(window).height()-(c.pageY-a(document).scrollTop())<d.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()+d.scrollSpeed);if(c.pageX-a(document).scrollLeft()<d.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()-d.scrollSpeed);else if(a(window).width()-(c.pageX-a(document).scrollLeft())<d.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()+d.scrollSpeed)}e!==false&&a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,
++c)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(d=this.items.length-1;d>=0;d--){e=this.items[d];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],
++h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(c,e);else break;this._trigger("change",c,this._uiHash());break}}this._contactContainers(c);a.ui.ddmanager&&a.ui.ddmanager.drag(this,c);this._trigger("sort",c,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(c){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,c);if(this.options.revert){var e=this;d=e.placeholder.offset();
++e.reverting=true;a(this.helper).animate({left:d.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:d.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(c)})}else this._clear(c,d);return false}},cancel:function(){var c=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
++this.currentItem.show();for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("deactivate",null,c._uiHash(this));if(this.containers[d].containerCache.over){this.containers[d]._trigger("out",null,c._uiHash(this));this.containers[d].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null,
++dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(c){var d=this._getItemsAsjQuery(c&&c.connected),e=[];c=c||{};a(d).each(function(){var h=(a(c.item||this).attr(c.attribute||"id")||"").match(c.expression||/(.+)[-=_](.+)/);if(h)e.push((c.key||h[1]+"[]")+"="+(c.key&&c.expression?h[1]:h[2]))});!e.length&&c.key&&e.push(c.key+"=");return e.join("&")},
++toArray:function(c){var d=this._getItemsAsjQuery(c&&c.connected),e=[];c=c||{};d.each(function(){e.push(a(c.item||this).attr(c.attribute||"id")||"")});return e},_intersectsWith:function(c){var d=this.positionAbs.left,e=d+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=c.left,b=i+c.width,f=c.top,j=f+c.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+l<j&&d+o>i&&d+o<b;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
++this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>c[this.floating?"width":"height"]?l:i<d+this.helperProportions.width/2&&e-this.helperProportions.width/2<b&&f<h+this.helperProportions.height/2&&g-this.helperProportions.height/2<j},_intersectsWithPointer:function(c){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,c.top,c.height);c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,c.left,c.width);d=d&&c;c=this._getDragVerticalDirection();
++var e=this._getDragHorizontalDirection();if(!d)return false;return this.floating?e&&e=="right"||c=="down"?2:1:c&&(c=="down"?2:1)},_intersectsWithSides:function(c){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,c.top+c.height/2,c.height);c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,c.left+c.width/2,c.width);var e=this._getDragVerticalDirection(),h=this._getDragHorizontalDirection();return this.floating&&h?h=="right"&&c||h=="left"&&!c:e&&(e=="down"&&d||e=="up"&&!d)},
++_getDragVerticalDirection:function(){var c=this.positionAbs.top-this.lastPositionAbs.top;return c!=0&&(c>0?"down":"up")},_getDragHorizontalDirection:function(){var c=this.positionAbs.left-this.lastPositionAbs.left;return c!=0&&(c>0?"right":"left")},refresh:function(c){this._refreshItems(c);this.refreshPositions();return this},_connectWith:function(){var c=this.options;return c.connectWith.constructor==String?[c.connectWith]:c.connectWith},_getItemsAsjQuery:function(c){var d=[],e=[],h=this._connectWith();
++if(h&&c)for(c=h.length-1;c>=0;c--)for(var g=a(h[c]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
++this]);for(c=e.length-1;c>=0;c--)e[c][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){for(var c=this.currentItem.find(":data(sortable-item)"),d=0;d<this.items.length;d++)for(var e=0;e<c.length;e++)c[e]==this.items[d].item[0]&&this.items.splice(d,1)},_refreshItems:function(c){this.items=[];this.containers=[this];var d=this.items,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],c,{item:this.currentItem}):a(this.options.items,this.element),
++this]],h=this._connectWith();if(h)for(var g=h.length-1;g>=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],c,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){c=e[g][1];h=e[g][0];b=0;for(i=h.length;b<i;b++){f=a(h[b]);f.data("sortable-item",c);d.push({item:f,instance:c,width:0,height:0,left:0,top:0})}}},refreshPositions:function(c){if(this.offsetParent&&
++this.helper)this.offset.parent=this._getParentOffset();for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!c){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(d=
++this.containers.length-1;d>=0;d--){h=this.containers[d].element.offset();this.containers[d].containerCache.left=h.left;this.containers[d].containerCache.top=h.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}return this},_createPlaceholder:function(c){var d=c||this,e=d.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g=
++a(document.createElement(d.currentItem[0].nodeName)).addClass(h||d.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(d.currentItem.innerHeight()-parseInt(d.currentItem.css("paddingTop")||0,10)-parseInt(d.currentItem.css("paddingBottom")||0,10));i.width()||i.width(d.currentItem.innerWidth()-parseInt(d.currentItem.css("paddingLeft")||0,10)-parseInt(d.currentItem.css("paddingRight")||
++0,10))}}}}d.placeholder=a(e.placeholder.element.call(d.element,d.currentItem));d.currentItem.after(d.placeholder);e.placeholder.update(d,d.placeholder)},_contactContainers:function(c){for(var d=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(d&&a.ui.contains(this.containers[h].element[0],d.element[0]))){d=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out",
++c,this._uiHash(this));this.containers[h].containerCache.over=0}if(d)if(this.containers.length===1){this.containers[e]._trigger("over",c,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){d=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b-
++g)<d){d=Math.abs(b-g);h=this.items[i]}}if(h||this.options.dropOnEmpty){this.currentContainer=this.containers[e];h?this._rearrange(c,h,null,true):this._rearrange(c,null,this.containers[e].element,true);this._trigger("change",c,this._uiHash());this.containers[e]._trigger("change",c,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[e]._trigger("over",c,this._uiHash(this));this.containers[e].containerCache.over=1}}},_createHelper:function(c){var d=
++this.options;c=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):d.helper=="clone"?this.currentItem.clone():this.currentItem;c.parents("body").length||a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(c[0]);if(c[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(c[0].style.width==
++""||d.forceHelperSize)c.width(this.currentItem.width());if(c[0].style.height==""||d.forceHelperSize)c.height(this.currentItem.height());return c},_adjustOffsetFromHelper:function(c){if(typeof c=="string")c=c.split(" ");if(a.isArray(c))c={left:+c[0],top:+c[1]||0};if("left"in c)this.offset.click.left=c.left+this.margins.left;if("right"in c)this.offset.click.left=this.helperProportions.width-c.right+this.margins.left;if("top"in c)this.offset.click.top=c.top+this.margins.top;if("bottom"in c)this.offset.click.top=
++this.helperProportions.height-c.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var c=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){c.left+=this.scrollParent.scrollLeft();c.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)c=
++{top:0,left:0};return{top:c.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:c.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var c=this.currentItem.position();return{top:c.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:c.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
++10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var c=this.options;if(c.containment=="parent")c.containment=this.helper[0].parentNode;if(c.containment=="document"||c.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(c.containment=="document"?
++document:window).width()-this.helperProportions.width-this.margins.left,(a(c.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(c.containment)){var d=a(c.containment)[0];c=a(c.containment).offset();var e=a(d).css("overflow")!="hidden";this.containment=[c.left+(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0)-this.margins.left,c.top+(parseInt(a(d).css("borderTopWidth"),
++10)||0)+(parseInt(a(d).css("paddingTop"),10)||0)-this.margins.top,c.left+(e?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,c.top+(e?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(c,d){if(!d)d=
++this.position;c=c=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:d.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&
++this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*c)}},_generatePosition:function(c){var d=this.options,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
++var g=c.pageX,i=c.pageY;if(this.originalPosition){if(this.containment){if(c.pageX-this.offset.click.left<this.containment[0])g=this.containment[0]+this.offset.click.left;if(c.pageY-this.offset.click.top<this.containment[1])i=this.containment[1]+this.offset.click.top;if(c.pageX-this.offset.click.left>this.containment[2])g=this.containment[2]+this.offset.click.left;if(c.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(d.grid){i=this.originalPageY+Math.round((i-
++this.originalPageY)/d.grid[1])*d.grid[1];i=this.containment?!(i-this.offset.click.top<this.containment[1]||i-this.offset.click.top>this.containment[3])?i:!(i-this.offset.click.top<this.containment[1])?i-d.grid[1]:i+d.grid[1]:i;g=this.originalPageX+Math.round((g-this.originalPageX)/d.grid[0])*d.grid[0];g=this.containment?!(g-this.offset.click.left<this.containment[0]||g-this.offset.click.left>this.containment[2])?g:!(g-this.offset.click.left<this.containment[0])?g-d.grid[0]:g+d.grid[0]:g}}return{top:i-
++this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_rearrange:function(c,d,e,h){e?e[0].appendChild(this.placeholder[0]):d.item[0].parentNode.insertBefore(this.placeholder[0],
++this.direction=="down"?d.item[0]:d.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var g=this,i=this.counter;window.setTimeout(function(){i==g.counter&&g.refreshPositions(!h)},0)},_clear:function(c,d){this.reverting=false;var e=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var h in this._storedCSS)if(this._storedCSS[h]=="auto"||this._storedCSS[h]=="static")this._storedCSS[h]=
++"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!d&&e.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!d)e.push(function(g){this._trigger("update",g,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){d||e.push(function(g){this._trigger("remove",
++g,this._uiHash())});for(h=this.containers.length-1;h>=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!d){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){d||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this,
++this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!d){this._trigger("beforeStop",
++c,this._uiHash());for(h=0;h<e.length;h++)e[h].call(this,c);this._trigger("stop",c,this._uiHash())}return false}d||this._trigger("beforeStop",c,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!d){for(h=0;h<e.length;h++)e[h].call(this,c);this._trigger("stop",c,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
++_uiHash:function(c){var d=c||this;return{helper:d.helper,placeholder:d.placeholder||a([]),position:d.position,originalPosition:d.originalPosition,offset:d.positionAbs,item:d.currentItem,sender:c?c.element:null}}});a.extend(a.ui.sortable,{version:"1.8.15"})})(jQuery);
++jQuery.effects||function(a,c){function d(n){var k;if(n&&n.constructor==Array&&n.length==3)return n;if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)];if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55];if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return[parseInt(k[1],
++16),parseInt(k[2],16),parseInt(k[3],16)];if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(n))return j.transparent;return j[a.trim(n).toLowerCase()]}function e(n,k){var m;do{m=a.curCSS(n,k);if(m!=""&&m!="transparent"||a.nodeName(n,"body"))break;k="backgroundColor"}while(n=n.parentNode);return d(m)}function h(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
++k={},m,p;if(n&&n.length&&n[0]&&n[n[0]])for(var q=n.length;q--;){m=n[q];if(typeof n[m]=="string"){p=m.replace(/\-(\w)/g,function(s,r){return r.toUpperCase()});k[p]=n[m]}}else for(m in n)if(typeof n[m]==="string")k[m]=n[m];return k}function g(n){var k,m;for(k in n){m=n[k];if(m==null||a.isFunction(m)||k in o||/scrollbar/.test(k)||!/color/i.test(k)&&isNaN(parseFloat(m)))delete n[k]}return n}function i(n,k){var m={_:0},p;for(p in k)if(n[p]!=k[p])m[p]=k[p];return m}function b(n,k,m,p){if(typeof n=="object"){p=
++k;m=null;k=n;n=k.effect}if(a.isFunction(k)){p=k;m=null;k={}}if(typeof k=="number"||a.fx.speeds[k]){p=m;m=k;k={}}if(a.isFunction(m)){p=m;m=null}k=k||{};m=m||k.duration;m=a.fx.off?0:typeof m=="number"?m:m in a.fx.speeds?a.fx.speeds[m]:a.fx.speeds._default;p=p||k.complete;return[n,k,m,p]}function f(n){if(!n||typeof n==="number"||a.fx.speeds[n])return true;if(typeof n==="string"&&!a.effects[n])return true;return false}a.effects={};a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
++"borderTopColor","borderColor","color","outlineColor"],function(n,k){a.fx.step[k]=function(m){if(!m.colorInit){m.start=e(m.elem,k);m.end=d(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt(m.pos*(m.end[0]-m.start[0])+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[1]-m.start[1])+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[2]-m.start[2])+m.start[2],10),255),0)+")"}});var j={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
++0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
++211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},l=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(n,k,m,
++p){if(a.isFunction(m)){p=m;m=null}return this.queue(function(){var q=a(this),s=q.attr("style")||" ",r=g(h.call(this)),u,v=q.attr("class");a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});u=g(h.call(this));q.attr("class",v);q.animate(i(r,u),{queue:false,duration:k,easing:m,complete:function(){a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});if(typeof q.attr("style")=="object"){q.attr("style").cssText="";q.attr("style").cssText=s}else q.attr("style",s);p&&p.apply(this,arguments);a.dequeue(this)}})})};
++a.fn.extend({_addClass:a.fn.addClass,addClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{add:n},k,m,p]):this._addClass(n)},_removeClass:a.fn.removeClass,removeClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{remove:n},k,m,p]):this._removeClass(n)},_toggleClass:a.fn.toggleClass,toggleClass:function(n,k,m,p,q){return typeof k=="boolean"||k===c?m?a.effects.animateClass.apply(this,[k?{add:n}:{remove:n},m,p,q]):this._toggleClass(n,k):a.effects.animateClass.apply(this,
++[{toggle:n},k,m,p])},switchClass:function(n,k,m,p,q){return a.effects.animateClass.apply(this,[{add:k,remove:n},m,p,q])}});a.extend(a.effects,{version:"1.8.15",save:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.data("ec.storage."+k[m],n[0].style[k[m]])},restore:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.css(k[m],n.data("ec.storage."+k[m]))},setMode:function(n,k){if(k=="toggle")k=n.is(":hidden")?"show":"hide";return k},getBaseline:function(n,k){var m;switch(n[0]){case "top":m=
++0;break;case "middle":m=0.5;break;case "bottom":m=1;break;default:m=n[0]/k.height}switch(n[1]){case "left":n=0;break;case "center":n=0.5;break;case "right":n=1;break;default:n=n[1]/k.width}return{x:n,y:m}},createWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent();var k={width:n.outerWidth(true),height:n.outerHeight(true),"float":n.css("float")},m=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
++n.wrap(m);m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(p,q){k[q]=n.css(q);if(isNaN(parseInt(k[q],10)))k[q]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent().replaceWith(n);return n},setTransition:function(n,
++k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments);
++k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%",
++"pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p*
++((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m,p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/=
++q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n,k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/=
++q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/
++r);return-(r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s))+m},easeOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return r*Math.pow(2,-10*k)*Math.sin((k*q-n)*2*Math.PI/s)+p+m},easeInOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q/2)==2)return m+p;s||(s=q*0.3*1.5);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);if(k<1)return-0.5*
++r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)+m;return r*Math.pow(2,-10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)*0.5+p+m},easeInBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;return p*(k/=q)*k*((s+1)*k-s)+m},easeOutBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;return p*((k=k/q-1)*k*((s+1)*k+s)+1)+m},easeInOutBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;if((k/=q/2)<1)return p/2*k*k*(((s*=1.525)+1)*k-s)+m;return p/2*((k-=2)*k*(((s*=1.525)+1)*k+s)+2)+m},easeInBounce:function(n,k,m,p,q){return p-a.easing.easeOutBounce(n,
++q-k,0,p,q)+m},easeOutBounce:function(n,k,m,p,q){return(k/=q)<1/2.75?p*7.5625*k*k+m:k<2/2.75?p*(7.5625*(k-=1.5/2.75)*k+0.75)+m:k<2.5/2.75?p*(7.5625*(k-=2.25/2.75)*k+0.9375)+m:p*(7.5625*(k-=2.625/2.75)*k+0.984375)+m},easeInOutBounce:function(n,k,m,p,q){if(k<q/2)return a.easing.easeInBounce(n,k*2,0,p,q)*0.5+m;return a.easing.easeOutBounce(n,k*2-q,0,p,q)*0.5+p*0.5+m}})}(jQuery);
++(function(a){a.effects.blind=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"vertical";a.effects.save(d,e);d.show();var i=a.effects.createWrapper(d).css({overflow:"hidden"}),b=g=="vertical"?"height":"width";g=g=="vertical"?i.height():i.width();h=="show"&&i.css(b,0);var f={};f[b]=h=="show"?g:0;i.animate(f,c.duration,c.options.easing,function(){h=="hide"&&d.hide();a.effects.restore(d,
++e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()})})}})(jQuery);
++(function(a){a.effects.bounce=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"effect"),g=c.options.direction||"up",i=c.options.distance||20,b=c.options.times||5,f=c.duration||250;/show|hide/.test(h)&&e.push("opacity");a.effects.save(d,e);d.show();a.effects.createWrapper(d);var j=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";i=c.options.distance||(j=="top"?d.outerHeight({margin:true})/3:d.outerWidth({margin:true})/
++3);if(h=="show")d.css("opacity",0).css(j,g=="pos"?-i:i);if(h=="hide")i/=b*2;h!="hide"&&b--;if(h=="show"){var l={opacity:1};l[j]=(g=="pos"?"+=":"-=")+i;d.animate(l,f/2,c.options.easing);i/=2;b--}for(l=0;l<b;l++){var o={},n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;d.animate(o,f/2,c.options.easing).animate(n,f/2,c.options.easing);i=h=="hide"?i*2:i/2}if(h=="hide"){l={opacity:0};l[j]=(g=="pos"?"-=":"+=")+i;d.animate(l,f/2,c.options.easing,function(){d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);
++c.callback&&c.callback.apply(this,arguments)})}else{o={};n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;d.animate(o,f/2,c.options.easing).animate(n,f/2,c.options.easing,function(){a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments)})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);
++(function(a){a.effects.clip=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","height","width"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"vertical";a.effects.save(d,e);d.show();var i=a.effects.createWrapper(d).css({overflow:"hidden"});i=d[0].tagName=="IMG"?i:d;var b={size:g=="vertical"?"height":"width",position:g=="vertical"?"top":"left"};g=g=="vertical"?i.height():i.width();if(h=="show"){i.css(b.size,0);i.css(b.position,
++g/2)}var f={};f[b.size]=h=="show"?g:0;f[b.position]=h=="show"?0:g/2;i.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.drop=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","opacity"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"left";a.effects.save(d,e);d.show();a.effects.createWrapper(d);var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=c.options.distance||(i=="top"?d.outerHeight({margin:true})/2:d.outerWidth({margin:true})/2);if(h=="show")d.css("opacity",0).css(i,g=="pos"?-b:b);var f={opacity:h==
++"show"?1:0};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;d.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.explode=function(c){return this.queue(function(){var d=c.options.pieces?Math.round(Math.sqrt(c.options.pieces)):3,e=c.options.pieces?Math.round(Math.sqrt(c.options.pieces)):3;c.options.mode=c.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":c.options.mode;var h=a(this).show().css("visibility","hidden"),g=h.offset();g.top-=parseInt(h.css("marginTop"),10)||0;g.left-=parseInt(h.css("marginLeft"),10)||0;for(var i=h.outerWidth(true),b=h.outerHeight(true),f=0;f<d;f++)for(var j=
++0;j<e;j++)h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/d)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/d,left:g.left+j*(i/e)+(c.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/d)+(c.options.mode=="show"?(f-Math.floor(d/2))*(b/d):0),opacity:c.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(c.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+
++f*(b/d)+(c.options.mode=="show"?0:(f-Math.floor(d/2))*(b/d)),opacity:c.options.mode=="show"?1:0},c.duration||500);setTimeout(function(){c.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();c.callback&&c.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},c.duration||500)})}})(jQuery);
++(function(a){a.effects.fade=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"hide");d.animate({opacity:e},{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.fold=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.size||15,i=!!c.options.horizFirst,b=c.duration?c.duration/2:a.fx.speeds._default/2;a.effects.save(d,e);d.show();var f=a.effects.createWrapper(d).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1],
++10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,c.options.easing).animate(o,b,c.options.easing,function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()})})}})(jQuery);
++(function(a){a.effects.highlight=function(c){return this.queue(function(){var d=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(d,c.options.mode||"show"),g={backgroundColor:d.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(d,e);d.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(g,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);h=="show"&&!a.support.opacity&&
++this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.pulsate=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"show");times=(c.options.times||5)*2-1;duration=c.duration?c.duration/2:a.fx.speeds._default/2;isVisible=d.is(":visible");animateTo=0;if(!isVisible){d.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e<times;e++){d.animate({opacity:animateTo},duration,c.options.easing);animateTo=(animateTo+1)%2}d.animate({opacity:animateTo},duration,
++c.options.easing,function(){animateTo==0&&d.hide();c.callback&&c.callback.apply(this,arguments)});d.queue("fx",function(){d.dequeue()}).dequeue()})}})(jQuery);
++(function(a){a.effects.puff=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"hide"),h=parseInt(c.options.percent,10)||150,g=h/100,i={height:d.height(),width:d.width()};a.extend(c.options,{fade:true,mode:e,percent:e=="hide"?h:100,from:e=="hide"?i:{height:i.height*g,width:i.width*g}});d.effect("scale",c.options,c.duration,c.callback);d.dequeue()})};a.effects.scale=function(c){return this.queue(function(){var d=a(this),e=a.extend(true,{},c.options),h=a.effects.setMode(d,
++c.options.mode||"effect"),g=parseInt(c.options.percent,10)||(parseInt(c.options.percent,10)==0?0:h=="hide"?0:100),i=c.options.direction||"both",b=c.options.origin;if(h!="effect"){e.origin=b||["middle","center"];e.restore=true}b={height:d.height(),width:d.width()};d.from=c.options.from||(h=="show"?{height:0,width:0}:b);g={y:i!="horizontal"?g/100:1,x:i!="vertical"?g/100:1};d.to={height:b.height*g.y,width:b.width*g.x};if(c.options.fade){if(h=="show"){d.from.opacity=0;d.to.opacity=1}if(h=="hide"){d.from.opacity=
++1;d.to.opacity=0}}e.from=d.from;e.to=d.to;e.mode=h;d.effect("size",e,c.duration,c.callback);d.dequeue()})};a.effects.size=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],g=["width","height","overflow"],i=["fontSize"],b=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
++j=a.effects.setMode(d,c.options.mode||"effect"),l=c.options.restore||false,o=c.options.scale||"both",n=c.options.origin,k={height:d.height(),width:d.width()};d.from=c.options.from||k;d.to=c.options.to||k;if(n){n=a.effects.getBaseline(n,k);d.from.top=(k.height-d.from.height)*n.y;d.from.left=(k.width-d.from.width)*n.x;d.to.top=(k.height-d.to.height)*n.y;d.to.left=(k.width-d.to.width)*n.x}var m={from:{y:d.from.height/k.height,x:d.from.width/k.width},to:{y:d.to.height/k.height,x:d.to.width/k.width}};
++if(o=="box"||o=="both"){if(m.from.y!=m.to.y){e=e.concat(b);d.from=a.effects.setTransition(d,b,m.from.y,d.from);d.to=a.effects.setTransition(d,b,m.to.y,d.to)}if(m.from.x!=m.to.x){e=e.concat(f);d.from=a.effects.setTransition(d,f,m.from.x,d.from);d.to=a.effects.setTransition(d,f,m.to.x,d.to)}}if(o=="content"||o=="both")if(m.from.y!=m.to.y){e=e.concat(i);d.from=a.effects.setTransition(d,i,m.from.y,d.from);d.to=a.effects.setTransition(d,i,m.to.y,d.to)}a.effects.save(d,l?e:h);d.show();a.effects.createWrapper(d);
++d.css("overflow","hidden").css(d.from);if(o=="content"||o=="both"){b=b.concat(["marginTop","marginBottom"]).concat(i);f=f.concat(["marginLeft","marginRight"]);g=e.concat(b).concat(f);d.find("*[width]").each(function(){child=a(this);l&&a.effects.save(child,g);var p={height:child.height(),width:child.width()};child.from={height:p.height*m.from.y,width:p.width*m.from.x};child.to={height:p.height*m.to.y,width:p.width*m.to.x};if(m.from.y!=m.to.y){child.from=a.effects.setTransition(child,b,m.from.y,child.from);
++child.to=a.effects.setTransition(child,b,m.to.y,child.to)}if(m.from.x!=m.to.x){child.from=a.effects.setTransition(child,f,m.from.x,child.from);child.to=a.effects.setTransition(child,f,m.to.x,child.to)}child.css(child.from);child.animate(child.to,c.duration,c.options.easing,function(){l&&a.effects.restore(child,g)})})}d.animate(d.to,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d.to.opacity===0&&d.css("opacity",d.from.opacity);j=="hide"&&d.hide();a.effects.restore(d,
++l?e:h);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.shake=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"];a.effects.setMode(d,c.options.mode||"effect");var h=c.options.direction||"left",g=c.options.distance||20,i=c.options.times||3,b=c.duration||c.options.duration||140;a.effects.save(d,e);d.show();a.effects.createWrapper(d);var f=h=="up"||h=="down"?"top":"left",j=h=="up"||h=="left"?"pos":"neg";h={};var l={},o={};h[f]=(j=="pos"?"-=":"+=")+g;l[f]=(j=="pos"?"+=":"-=")+g*2;o[f]=
++(j=="pos"?"-=":"+=")+g*2;d.animate(h,b,c.options.easing);for(g=1;g<i;g++)d.animate(l,b,c.options.easing).animate(o,b,c.options.easing);d.animate(l,b,c.options.easing).animate(h,b/2,c.options.easing,function(){a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments)});d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);
++(function(a){a.effects.slide=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"show"),g=c.options.direction||"left";a.effects.save(d,e);d.show();a.effects.createWrapper(d).css({overflow:"hidden"});var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=c.options.distance||(i=="top"?d.outerHeight({margin:true}):d.outerWidth({margin:true}));if(h=="show")d.css(i,g=="pos"?isNaN(b)?"-"+b:-b:b);
++var f={};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;d.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.transfer=function(c){return this.queue(function(){var d=a(this),e=a(c.options.to),h=e.offset();e={top:h.top,left:h.left,height:e.innerHeight(),width:e.innerWidth()};h=d.offset();var g=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(c.options.className).css({top:h.top,left:h.left,height:d.innerHeight(),width:d.innerWidth(),position:"absolute"}).animate(e,c.duration,c.options.easing,function(){g.remove();c.callback&&c.callback.apply(d[0],arguments);
++d.dequeue()})})}})(jQuery);
++(function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var c=this,d=c.options;c.running=0;c.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");c.headers=
++c.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){d.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){d.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){d.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){d.disabled||a(this).removeClass("ui-state-focus")});c.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
++if(d.navigation){var e=c.element.find("a").filter(d.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");c.active=h.length?h:e.closest(".ui-accordion-content").prev()}}c.active=c._findActive(c.active||d.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");c.active.next().addClass("ui-accordion-content-active");c._createIcons();c.resize();c.element.attr("role","tablist");c.headers.attr("role","tab").bind("keydown.accordion",
++function(g){return c._keydown(g)}).next().attr("role","tabpanel");c.headers.not(c.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();c.active.length?c.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):c.headers.eq(0).attr("tabIndex",0);a.browser.safari||c.headers.find("a").attr("tabIndex",-1);d.event&&c.headers.bind(d.event.split(" ").join(".accordion ")+".accordion",function(g){c._clickHandler.call(c,g,this);g.preventDefault()})},_createIcons:function(){var c=
++this.options;if(c.icons){a("<span></span>").addClass("ui-icon "+c.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(c.icons.header).toggleClass(c.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
++this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var d=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(c.autoHeight||c.fillHeight)d.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(c,d){a.Widget.prototype._setOption.apply(this,arguments);c=="active"&&this.activate(d);if(c=="icons"){this._destroyIcons();
++d&&this._createIcons()}if(c=="disabled")this.headers.add(this.headers.next())[d?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(c){if(!(this.options.disabled||c.altKey||c.ctrlKey)){var d=a.ui.keyCode,e=this.headers.length,h=this.headers.index(c.target),g=false;switch(c.keyCode){case d.RIGHT:case d.DOWN:g=this.headers[(h+1)%e];break;case d.LEFT:case d.UP:g=this.headers[(h-1+e)%e];break;case d.SPACE:case d.ENTER:this._clickHandler({target:c.target},c.target);
++c.preventDefault()}if(g){a(c.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var c=this.options,d;if(c.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){d-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,d-a(this).innerHeight()+
++a(this).height()))}).css("overflow","auto")}else if(c.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).height("").height())}).height(d)}return this},activate:function(c){this.options.active=c;c=this._findActive(c)[0];this._clickHandler({target:c},c);return this},_findActive:function(c){return c?typeof c==="number"?this.headers.filter(":eq("+c+")"):this.headers.not(this.headers.not(c)):c===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(c,d){var e=this.options;
++if(!e.disabled)if(c.target){c=a(c.currentTarget||d);d=c[0]===this.active[0];e.active=e.collapsible&&d?false:this.headers.index(c);if(!(this.running||!e.collapsible&&d)){var h=this.active;f=c.next();i=this.active.next();b={options:e,newHeader:d&&e.collapsible?a([]):c,oldHeader:this.active,newContent:d&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(c[0]);this.active=d?a([]):c;this._toggle(f,i,b,d,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);
++if(!d){c.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);c.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(),
++b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(c,d,e,h,g){var i=this,b=i.options;i.toShow=c;i.toHide=d;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=d.size()===0?c.size():d.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:d,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:c,toHide:d,complete:f,down:g,autoHeight:b.autoHeight||
++b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)c.toggle();else{d.hide();c.show()}f(true)}d.prev().attr({"aria-expanded":"false",
++"aria-selected":"false",tabIndex:-1}).blur();c.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(c){this.running=c?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.15",
++animations:{slide:function(c,d){c=a.extend({easing:"swing",duration:300},c,d);if(c.toHide.size())if(c.toShow.size()){var e=c.toShow.css("overflow"),h=0,g={},i={},b;d=c.toShow;b=d[0].style.width;d.width(parseInt(d.parent().width(),10)-parseInt(d.css("paddingLeft"),10)-parseInt(d.css("paddingRight"),10)-(parseInt(d.css("borderLeftWidth"),10)||0)-(parseInt(d.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(c.toShow[0],j)).match(/^([\d+-.]+)(.*)$/);
++g[j]={value:f[1],unit:f[2]||"px"}});c.toShow.css({height:0,overflow:"hidden"}).show();c.toHide.filter(":hidden").each(c.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);c.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:c.duration,easing:c.easing,complete:function(){c.autoHeight||c.toShow.css("height","");c.toShow.css({width:b,overflow:e});c.complete()}})}else c.toHide.animate({height:"hide",
++paddingTop:"hide",paddingBottom:"hide"},c);else c.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},c)},bounceslide:function(c){this.slide(c,{easing:c.down?"easeOutBounce":"swing",duration:c.down?1E3:200})}}})})(jQuery);
++(function(a){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var d=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(d.options.disabled||d.element.propAttr("readOnly"))){h=
++false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:d._move("previousPage",g);break;case i.PAGE_DOWN:d._move("nextPage",g);break;case i.UP:d._move("previous",g);g.preventDefault();break;case i.DOWN:d._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(d.menu.active){h=true;g.preventDefault()}case i.TAB:if(!d.menu.active)return;d.menu.select(g);break;case i.ESCAPE:d.element.val(d.term);d.close(g);break;default:clearTimeout(d.searching);d.searching=setTimeout(function(){if(d.term!=
++d.element.val()){d.selectedItem=null;d.search(null,g)}},d.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!d.options.disabled){d.selectedItem=null;d.previous=d.element.val()}}).bind("blur.autocomplete",function(g){if(!d.options.disabled){clearTimeout(d.searching);d.closing=setTimeout(function(){d.close(g);d._change(g)},150)}});this._initSource();this.response=function(){return d._response.apply(d,arguments)};
++this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=d.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==d.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&d.close()})},1);setTimeout(function(){clearTimeout(d.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==d._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&&
++d.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=d.previous;if(d.element[0]!==e.activeElement){d.element.focus();d.previous=f;setTimeout(function(){d.previous=f;d.selectedItem=b},1)}false!==d._trigger("select",g,{item:b})&&d.element.val(b.value);d.term=d.element.val();d.close(g);d.selectedItem=b},blur:function(){d.menu.element.is(":visible")&&d.element.val()!==d.term&&d.element.val(d.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
++a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(d,e){a.Widget.prototype._setOption.apply(this,arguments);d==="source"&&this._initSource();if(d==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);d==="disabled"&&
++e&&this.xhr&&this.xhr.abort()},_initSource:function(){var d=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){d.xhr&&d.xhr.abort();d.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++c,success:function(b){this.autocompleteRequest===c&&i(b)},error:function(){this.autocompleteRequest===c&&i([])}})}}else this.source=
++this.options.source},search:function(d,e){d=d!=null?d:this.element.val();this.term=this.element.val();if(d.length<this.options.minLength)return this.close(e);clearTimeout(this.closing);if(this._trigger("search",e)!==false)return this._search(d)},_search:function(d){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:d},this.response)},_response:function(d){if(!this.options.disabled&&d&&d.length){d=this._normalize(d);this._suggest(d);this._trigger("open")}else this.close();
++this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(d){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",d)}},_change:function(d){this.previous!==this.element.val()&&this._trigger("change",d,{item:this.selectedItem})},_normalize:function(d){if(d.length&&d[0].label&&d[0].value)return d;return a.map(d,function(e){if(typeof e==="string")return{label:e,value:e};return a.extend({label:e.label||
++e.value,value:e.value||e.label},e)})},_suggest:function(d){var e=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(e,d);this.menu.deactivate();this.menu.refresh();e.show();this._resizeMenu();e.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var d=this.menu.element;d.outerWidth(Math.max(d.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(d,e){var h=this;
++a.each(e,function(g,i){h._renderItem(d,i)})},_renderItem:function(d,e){return a("<li></li>").data("item.autocomplete",e).append(a("<a></a>").text(e.label)).appendTo(d)},_move:function(d,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(d)||this.menu.last()&&/^next/.test(d)){this.element.val(this.term);this.menu.deactivate()}else this.menu[d](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(d){return d.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
++"\\$&")},filter:function(d,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(d,function(g){return h.test(g.label||g.value||g)})}})})(jQuery);
++(function(a){a.widget("ui.menu",{_create:function(){var c=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(d){if(a(d.target).closest(".ui-menu-item a").length){d.preventDefault();c.select(d)}});this.refresh()},refresh:function(){var c=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
++-1).mouseenter(function(d){c.activate(d,a(this).parent())}).mouseleave(function(){c.deactivate()})},activate:function(c,d){this.deactivate();if(this.hasScroll()){var e=d.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+d.height())}this.active=d.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",c,{item:d})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
++this._trigger("blur");this.active=null}},next:function(c){this.move("next",".ui-menu-item:first",c)},previous:function(c){this.move("prev",".ui-menu-item:last",c)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(c,d,e){if(this.active){c=this.active[c+"All"](".ui-menu-item").eq(0);c.length?this.activate(e,c):this.activate(e,this.element.children(d))}else this.activate(e,
++this.element.children(d))},nextPage:function(c){if(this.hasScroll())if(!this.active||this.last())this.activate(c,this.element.children(".ui-menu-item:first"));else{var d=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-d-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(c,h)}else this.activate(c,this.element.children(".ui-menu-item").filter(!this.active||
++this.last()?":first":":last"))},previousPage:function(c){if(this.hasScroll())if(!this.active||this.first())this.activate(c,this.element.children(".ui-menu-item:last"));else{var d=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-d+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(c,result)}else this.activate(c,this.element.children(".ui-menu-item").filter(!this.active||
++this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(c){this._trigger("selected",c,{item:this.active})}})})(jQuery);
++(function(a){var c,d,e,h,g=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var f=b.name,j=b.form,l=a([]);if(f)l=j?a(j).find("[name='"+f+"']"):a("[name='"+f+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",g);if(typeof this.options.disabled!==
++"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,f=this.options,j=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(!j?" ui-state-active":"");if(f.label===null)f.label=this.buttonElement.html();if(this.element.is(":disabled"))f.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!f.disabled){a(this).addClass("ui-state-hover");
++this===c&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){f.disabled||a(this).removeClass(l)}).bind("click.button",function(o){if(f.disabled){o.preventDefault();o.stopImmediatePropagation()}});this.element.bind("focus.button",function(){b.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){b.buttonElement.removeClass("ui-state-focus")});if(j){this.element.bind("change.button",function(){h||b.refresh()});this.buttonElement.bind("mousedown.button",function(o){if(!f.disabled){h=
++false;d=o.pageX;e=o.pageY}}).bind("mouseup.button",function(o){if(!f.disabled)if(d!==o.pageX||e!==o.pageY)h=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed","true");
++var o=b.element[0];i(o).not(o).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(f.disabled)return false;a(this).addClass("ui-state-active");c=this;a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(f.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(o){if(f.disabled)return false;if(o.keyCode==a.ui.keyCode.SPACE||
++o.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(o){o.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",f.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
++"radio"){var b=this.element.parents().filter(":last"),f="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(f);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(f);if(!this.buttonElement.length)this.buttonElement=b.find(f)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},
++widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
++a.Widget.prototype.destroy.call(this)},_setOption:function(b,f){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")f?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")i(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
++"true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
++f=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+j.primary+"'></span>");j.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+j.secondary+"'></span>");if(!this.options.text){o.push(l?"ui-button-icons-only":
++"ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")===
++"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
++a.Widget.prototype.destroy.call(this)}})})(jQuery);
++(function(a,c){function d(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
++"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
++"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
++minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function e(b){return b.bind("mouseout",
++function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
++f.addClass("ui-state-hover");f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==c)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.15"}});var g=(new Date).getTime(),i;a.extend(d.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
++setDefaults:function(b){h(this._defaults,b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,
++"\\\\$1"),input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
++function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f);f.settings.disabled&&this._disableDatepicker(b)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a('<span class="'+this._appendClass+'">'+j+"</span>");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j==
++"focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j=this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("<img/>").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('<button type="button"></button>').addClass(this._triggerClass).html(o==""?j:a("<img/>").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():
++a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;m<o.length;m++)if(o[m].length>n){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b,
++f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker",function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.settings.disabled&&this._disableDatepicker(b);f.dpDiv.css("display","block")}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+=
++1;this._dialogInput=a('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
++2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f=
++a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=
++b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b,
++"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==
++b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f<this._disabledInputs.length;f++)if(this._disabledInputs[f]==b)return true;return false},_getInst:function(b){try{return a.data(b,"datepicker")}catch(f){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(b,f,j){var l=this._getInst(b);if(arguments.length==2&&typeof f=="string")return f=="defaults"?a.extend({},a.datepicker._defaults):l?f=="all"?
++a.extend({},l.settings):this._get(l,f):null;var o=f||{};if(typeof f=="string"){o={};o[f]=j}if(l){this._curInst==l&&this._hideDatepicker();var n=this._getDateDatepicker(b,true),k=this._getMinMaxDate(l,"min"),m=this._getMinMaxDate(l,"max");h(l.settings,o);if(k!==null&&o.dateFormat!==c&&o.minDate===c)l.settings.minDate=this._formatDate(l,k);if(m!==null&&o.dateFormat!==c&&o.maxDate===c)l.settings.maxDate=this._formatDate(l,m);this._attachments(a(b),l);this._autoSize(l);this._setDate(l,n);this._updateAlternate(l);
++this._updateDatepicker(l)}},_changeDatepicker:function(b,f,j){this._optionDatepicker(b,f,j)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,f){if(b=this._getInst(b)){this._setDate(b,f);this._updateDatepicker(b);this._updateAlternate(b)}},_getDateDatepicker:function(b,f){(b=this._getInst(b))&&!b.inline&&this._setDateFromField(b,f);return b?this._getDate(b):null},_doKeyDown:function(b){var f=a.datepicker._getInst(b.target),j=true,l=f.dpDiv.is(".ui-datepicker-rtl");
++f._keyEvent=true;if(a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker();j=false;break;case 13:j=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",f.dpDiv);j[0]&&a.datepicker._selectDay(b.target,f.selectedMonth,f.selectedYear,j[0]);if(b=a.datepicker._get(f,"onSelect")){j=a.datepicker._formatDate(f);b.apply(f.input?f.input[0]:null,[j,f])}else a.datepicker._hideDatepicker();return false;case 27:a.datepicker._hideDatepicker();break;case 33:a.datepicker._adjustDate(b.target,
++b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 35:if(b.ctrlKey||b.metaKey)a.datepicker._clearDate(b.target);j=b.ctrlKey||b.metaKey;break;case 36:if(b.ctrlKey||b.metaKey)a.datepicker._gotoToday(b.target);j=b.ctrlKey||b.metaKey;break;case 37:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?+1:-1,"D");j=
++b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 38:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,-7,"D");j=b.ctrlKey||b.metaKey;break;case 39:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?-1:+1,"D");j=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,
++"stepMonths"),"M");break;case 40:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,+7,"D");j=b.ctrlKey||b.metaKey;break;default:j=false}else if(b.keyCode==36&&b.ctrlKey)a.datepicker._showDatepicker(this);else j=false;if(j){b.preventDefault();b.stopPropagation()}},_doKeyPress:function(b){var f=a.datepicker._getInst(b.target);if(a.datepicker._get(f,"constrainInput")){f=a.datepicker._possibleChars(a.datepicker._get(f,"dateFormat"));var j=String.fromCharCode(b.charCode==c?b.keyCode:b.charCode);
++return b.ctrlKey||b.metaKey||j<" "||!f||f.indexOf(j)>-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input",
++b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j=a.datepicker._get(f,"beforeShow");h(f.settings,j?j.apply(b,[b,f]):{});f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value="";if(!a.datepicker._pos){a.datepicker._pos=
++a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f);j=a.datepicker._checkOffset(f,
++j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover");if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=true;a.effects&&
++a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});b.dpDiv.find("."+
++this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&!b.input.is(":disabled")&&
++b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]||j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(),n=b.input?b.input.outerWidth():
++0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f=this._get(this._getInst(b),
++"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f=this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f);this._curInst=
++null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
++_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"):
++0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth=f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l["selected"+(j=="M"?
++"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b);
++this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b);b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField");if(f){var j=this._get(b,
++"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b));a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"?f.toString():f+"";if(f==
++"")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1<b.length&&b.charAt(H+1)==z)&&H++;return z},v=function(z){var I=u(z);z=new RegExp("^\\d{1,"+
++(z=="@"?14:z=="!"?20:z=="y"&&I?4:z=="o"?3:2)+"}");z=f.substring(y).match(z);if(!z)throw"Missing number at position "+y;y+=z[0].length;return parseInt(z[0],10)},w=function(z,I,N){z=a.map(u(z)?N:I,function(D,E){return[[E,D]]}).sort(function(D,E){return-(D[1].length-E[1].length)});var J=-1;a.each(z,function(D,E){D=E[1];if(f.substr(y,D.length).toLowerCase()==D.toLowerCase()){J=E[0];y+=D.length;return false}});if(J!=-1)return J+1;else throw"Unknown name at position "+y;},x=function(){if(f.charAt(y)!=b.charAt(H))throw"Unexpected literal at position "+
++y;y++},y=0,H=0;H<b.length;H++)if(r)if(b.charAt(H)=="'"&&!u("'"))r=false;else x();else switch(b.charAt(H)){case "d":q=v("d");break;case "D":w("D",o,n);break;case "o":s=v("o");break;case "m":p=v("m");break;case "M":p=w("M",k,m);break;case "y":j=v("y");break;case "@":var C=new Date(v("@"));j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "!":C=new Date((v("!")-this._ticksTo1970)/1E4);j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "'":if(u("'"))x();else r=true;break;default:x()}if(y<
++f.length)throw"Extra/unparsed characters found in date: "+f.substring(y);if(j==-1)j=(new Date).getFullYear();else if(j<100)j+=(new Date).getFullYear()-(new Date).getFullYear()%100+(j<=l?0:-100);if(s>-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",
++RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames:null)||this._defaults.monthNames;var k=function(u){(u=r+1<b.length&&
++b.charAt(r+1)==u)&&r++;return u},m=function(u,v,w){v=""+v;if(k(u))for(;v.length<w;)v="0"+v;return v},p=function(u,v,w,x){return k(u)?x[v]:w[v]},q="",s=false;if(f)for(var r=0;r<b.length;r++)if(s)if(b.charAt(r)=="'"&&!k("'"))s=false;else q+=b.charAt(r);else switch(b.charAt(r)){case "d":q+=m("d",f.getDate(),2);break;case "D":q+=p("D",f.getDay(),l,o);break;case "o":q+=m("o",Math.round(((new Date(f.getFullYear(),f.getMonth(),f.getDate())).getTime()-(new Date(f.getFullYear(),0,0)).getTime())/864E5),3);
++break;case "m":q+=m("m",f.getMonth()+1,2);break;case "M":q+=p("M",f.getMonth(),n,j);break;case "y":q+=k("y")?f.getFullYear():(f.getYear()%100<10?"0":"")+f.getYear()%100;break;case "@":q+=f.getTime();break;case "!":q+=f.getTime()*1E4+this._ticksTo1970;break;case "'":if(k("'"))q+="'";else s=true;break;default:q+=b.charAt(r)}return q},_possibleChars:function(b){for(var f="",j=false,l=function(n){(n=o+1<b.length&&b.charAt(o+1)==n)&&o++;return n},o=0;o<b.length;o++)if(j)if(b.charAt(o)=="'"&&!l("'"))j=
++false;else f+=b.charAt(o);else switch(b.charAt(o)){case "d":case "m":case "y":case "@":f+="0123456789";break;case "D":case "M":return null;case "'":if(l("'"))f+="'";else j=true;break;default:f+=b.charAt(o)}return f},_get:function(b,f){return b.settings[f]!==c?b.settings[f]:this._defaults[f]},_setDateFromField:function(b,f){if(b.input.val()!=b.lastVal){var j=this._get(b,"dateFormat"),l=b.lastVal=b.input?b.input.val():null,o,n;o=n=this._getDefaultDate(b);var k=this._getFormatConfig(b);try{o=this.parseDate(j,
++l,k)||n}catch(m){this.log(m);l=f?"":l}b.selectedDay=o.getDate();b.drawMonth=b.selectedMonth=o.getMonth();b.drawYear=b.selectedYear=o.getFullYear();b.currentDay=l?o.getDate():0;b.currentMonth=l?o.getMonth():0;b.currentYear=l?o.getFullYear():0;this._adjustInstDate(b)}},_getDefaultDate:function(b){return this._restrictMinMax(b,this._determineDate(b,this._get(b,"defaultDate"),new Date))},_determineDate:function(b,f,j){var l=function(n){var k=new Date;k.setDate(k.getDate()+n);return k},o=function(n){try{return a.datepicker.parseDate(a.datepicker._get(b,
++"dateFormat"),n,a.datepicker._getFormatConfig(b))}catch(k){}var m=(n.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,p=m.getFullYear(),q=m.getMonth();m=m.getDate();for(var s=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,r=s.exec(n);r;){switch(r[2]||"d"){case "d":case "D":m+=parseInt(r[1],10);break;case "w":case "W":m+=parseInt(r[1],10)*7;break;case "m":case "M":q+=parseInt(r[1],10);m=Math.min(m,a.datepicker._getDaysInMonth(p,q));break;case "y":case "Y":p+=parseInt(r[1],10);m=Math.min(m,
++a.datepicker._getDaysInMonth(p,q));break}r=s.exec(n)}return new Date(p,q,m)};if(f=(f=f==null||f===""?j:typeof f=="string"?o(f):typeof f=="number"?isNaN(f)?j:l(f):new Date(f.getTime()))&&f.toString()=="Invalid Date"?j:f){f.setHours(0);f.setMinutes(0);f.setSeconds(0);f.setMilliseconds(0)}return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(b){if(!b)return null;b.setHours(b.getHours()>12?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;
++f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay=b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b));if(j=this._get(b,"onSelect")){l=this._formatDate(b);j.apply(b.input?b.input[0]:null,[l,b])}},_getDate:function(b){return!b.currentYear||b.input&&b.input.val()==
++""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(),f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay?new Date(9999,
++9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&w<r?r:w;this._daylightSavingAdjust(new Date(v,m,1))>w;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b));
++w=this._canAdjustMonth(b,-1,v,m)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', -"+p+", 'M');\" title=\""+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>":o?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v,
++m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', +"+p+", 'M');\" title=\""+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>":o?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&&
++b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+g+'.datepicker._hideDatepicker();">'+this._get(b,"closeText")+"</button>":"";l=l?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(j?n:"")+(this._isInRange(b,x)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
++g+".datepicker._gotoToday('#"+b.id+"');\">"+p+"</button>":"")+(j?"":n)+"</div>":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H=this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E<k[0];E++){var P=
++"";this.maxRows=4;for(var L=0;L<k[1];L++){var Q=this._daylightSavingAdjust(new Date(v,m,b.selectedDay)),B=" ui-corner-all",F="";if(q){F+='<div class="ui-datepicker-group';if(k[1]>1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right":"left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+B+'">'+(/all|left/.test(B)&&
++E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var G=p?'<th class="ui-datepicker-week-col">'+this._get(b,"weekHeader")+"</th>":"";for(B=0;B<7;B++){var A=(B+n)%7;G+="<th"+((B+n+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+x[A]+'">'+y[A]+"</span></th>"}F+=G+"</tr></thead><tbody>";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,
++G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R<G;R++){F+="<tr>";var S=!p?"":'<td class="ui-datepicker-week-col">'+this._get(b,"calculateWeek")(A)+"</td>";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&A<r||u&&A>u;S+='<td class="'+((B+n+6)%7>=5?" ui-datepicker-week-end":"")+(K?" ui-datepicker-other-month":"")+(A.getTime()==
++Q.getTime()&&m==b.selectedMonth&&b._keyEvent||J.getTime()==A.getTime()&&J.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(K&&!I?"":" "+M[1]+(A.getTime()==s.getTime()?" "+this._currentClass:"")+(A.getTime()==f.getTime()?" ui-datepicker-today":""))+'"'+((!K||I)&&M[2]?' title="'+M[2]+'"':"")+(O?"":' onclick="DP_jQuery_'+g+".datepicker._selectDay('#"+b.id+"',"+A.getMonth()+","+A.getFullYear()+', this);return false;"')+">"+(K&&!I?"&#xa0;":O?'<span class="ui-state-default">'+
++A.getDate()+"</span>":'<a class="ui-state-default'+(A.getTime()==f.getTime()?" ui-state-highlight":"")+(A.getTime()==s.getTime()?" ui-state-active":"")+(K?" ui-priority-secondary":"")+'" href="#">'+A.getDate()+"</a>")+"</td>";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+"</tr>"}m++;if(m>11){m=0;v++}F+="</tbody></table>"+(q?"</div>"+(k[0]>0&&L==k[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
++"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='<div class="ui-datepicker-title">',u="";if(n||!p)u+='<span class="ui-datepicker-month">'+k[f]+"</span>";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'M');\" >";for(var w=0;w<12;w++)if((!k||w>=l.getMonth())&&
++(!v||w<=o.getMonth()))u+='<option value="'+w+'"'+(w==f?' selected="selected"':"")+">"+m[w]+"</option>";u+="</select>"}s||(r+=u+(n||!(p&&q)?"&#xa0;":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+='<span class="ui-datepicker-year">'+j+"</span>";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f,
++l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()):m;for(b.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'Y');\" >";f<=m;f++)b.yearshtml+='<option value="'+f+'"'+(f==j?' selected="selected"':"")+">"+f+"</option>";b.yearshtml+="</select>";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?"&#xa0;":"")+u;r+="</div>";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j=="Y"?f:0),o=b.drawMonth+
++(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&f<j?j:f;return f=b&&f>b?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear");if(f)f.apply(b.input?
++b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b);j=this._daylightSavingAdjust(new Date(j,
++l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b,
++"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this;
++if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));return this.each(function(){typeof b==
++"string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new d;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.15";window["DP_jQuery_"+g]=a})(jQuery);
++(function(a,c){var d={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
++position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||"&#160;",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
++i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j),
++o=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("<span></span>").addClass("ui-dialog-title").attr("id",
++f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
++g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!==
++i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.scrollTop(),scrollLeft:b.element.scrollLeft()};a.ui.dialog.maxZ+=1;
++b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target===
++l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g,
++function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('<button type="button"></button>').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
++handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition,
++originalSize:l.originalSize,position:l.position,size:l.size}}g=g===c?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize",
++l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "):
++[g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l);
++if(j in d)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"):
++f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||"&#160;"));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g=
++this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height-
++i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.15",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "),
++create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return false})},1);a(document).bind("keydown.dialog-overlay",function(b){if(g.options.closeOnEscape&&b.keyCode&&b.keyCode===a.ui.keyCode.ESCAPE){g.close(b);b.preventDefault()}});a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize)}var i=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
++height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&&a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
++i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g<i?a(window).height()+"px":g+"px"}else return a(document).height()+"px"},width:function(){var g,i;if(a.browser.msie){g=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);i=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return g<i?a(window).width()+"px":g+"px"}else return a(document).width()+"px"},resize:function(){var g=a([]);a.each(a.ui.dialog.overlay.instances,function(){g=
++g.add(this)});g.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}});a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
++(function(a){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e=a.fn.position,h=a.fn.offset;a.fn.position=function(g){if(!g||!g.of)return e.apply(this,arguments);g=a.extend({},g);var i=a(g.of),b=i[0],f=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],l,o,n;if(b.nodeType===9){l=i.width();o=i.height();n={top:0,left:0}}else if(b.setTimeout){l=i.width();o=i.height();n={top:i.scrollTop(),left:i.scrollLeft()}}else if(b.preventDefault){g.at="left top";l=o=0;n={top:g.of.pageY,
++left:g.of.pageX}}else{l=i.outerWidth();o=i.outerHeight();n=i.offset()}a.each(["my","at"],function(){var k=(g[this]||"").split(" ");if(k.length===1)k=c.test(k[0])?k.concat(["center"]):d.test(k[0])?["center"].concat(k):["center","center"];k[0]=c.test(k[0])?k[0]:"center";k[1]=d.test(k[1])?k[1]:"center";g[this]=k});if(f.length===1)f[1]=f[0];j[0]=parseInt(j[0],10)||0;if(j.length===1)j[1]=j[0];j[1]=parseInt(j[1],10)||0;if(g.at[0]==="right")n.left+=l;else if(g.at[0]==="center")n.left+=l/2;if(g.at[1]==="bottom")n.top+=
++o;else if(g.at[1]==="center")n.top+=o/2;n.left+=j[0];n.top+=j[1];return this.each(function(){var k=a(this),m=k.outerWidth(),p=k.outerHeight(),q=parseInt(a.curCSS(this,"marginLeft",true))||0,s=parseInt(a.curCSS(this,"marginTop",true))||0,r=m+q+(parseInt(a.curCSS(this,"marginRight",true))||0),u=p+s+(parseInt(a.curCSS(this,"marginBottom",true))||0),v=a.extend({},n),w;if(g.my[0]==="right")v.left-=m;else if(g.my[0]==="center")v.left-=m/2;if(g.my[1]==="bottom")v.top-=p;else if(g.my[1]==="center")v.top-=
++p/2;v.left=Math.round(v.left);v.top=Math.round(v.top);w={left:v.left-q,top:v.top-s};a.each(["left","top"],function(x,y){a.ui.position[f[x]]&&a.ui.position[f[x]][y](v,{targetWidth:l,targetHeight:o,elemWidth:m,elemHeight:p,collisionPosition:w,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});a.fn.bgiframe&&k.bgiframe();k.offset(a.extend(v,{using:g.using}))})};a.ui.position={fit:{left:function(g,i){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();g.left=
++b>0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+=
++i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g),
++f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery);
++(function(a,c){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
++this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(d){if(d===c)return this._value();this._setOption("value",d);return this},_setOption:function(d,e){if(d==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var d=this.options.value;if(typeof d!=="number")d=0;return Math.min(this.options.max,Math.max(this.min,d))},_percentage:function(){return 100*
++this._value()/this.options.max},_refreshValue:function(){var d=this.value(),e=this._percentage();if(this.oldValue!==d){this.oldValue=d;this._trigger("change")}this.valueDiv.toggle(d>this.min).toggleClass("ui-corner-right",d===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",d)}});a.extend(a.ui.progressbar,{version:"1.8.15"})})(jQuery);
++(function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var c=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=d.values&&d.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
++this.orientation+" ui-widget ui-widget-content ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(d.range){if(d.range===true){if(!d.values)d.values=[this._valueMin(),this._valueMin()];if(d.values.length&&d.values.length!==2)d.values=[d.values[0],d.values[0]]}this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:""))}for(var i=e.length;i<h;i+=1)g.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
++this.handles=e.add(a(g.join("")).appendTo(c.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(d.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle",
++b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!c.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!c._keySliding){c._keySliding=true;a(this).addClass("ui-state-active");l=c._start(b,j);if(l===false)return}break}n=c.options.step;l=c.options.values&&c.options.values.length?
++(o=c.values(j)):(o=c.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=c._valueMin();break;case a.ui.keyCode.END:o=c._valueMax();break;case a.ui.keyCode.PAGE_UP:o=c._trimAlignValue(l+(c._valueMax()-c._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=c._trimAlignValue(l-(c._valueMax()-c._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===c._valueMax())return;o=c._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===c._valueMin())return;o=c._trimAlignValue(l-
++n);break}c._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(c._keySliding){c._keySliding=false;c._stop(b,f);c._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
++return this},_mouseCapture:function(c){var d=this.options,e,h,g,i,b;if(d.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:c.pageX,y:c.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(d.range===true&&this.values(1)===d.min){b+=1;g=a(this.handles[b])}if(this._start(c,b)===false)return false;
++this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();d=g.offset();this._clickOffset=!a(c.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:c.pageX-d.left-g.width()/2,top:c.pageY-d.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(c,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(c){var d=
++this._normValueFromMouse({x:c.pageX,y:c.pageY});this._slide(c,this._handleIndex,d);return false},_mouseStop:function(c){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(c,this._handleIndex);this._change(c,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(c){var d;if(this.orientation==="horizontal"){d=
++this.elementSize.width;c=c.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;c=c.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}d=c/d;if(d>1)d=1;if(d<0)d=0;if(this.orientation==="vertical")d=1-d;c=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+d*c)},_start:function(c,d){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);
++e.values=this.values()}return this._trigger("start",c,e)},_slide:function(c,d,e){var h;if(this.options.values&&this.options.values.length){h=this.values(d?0:1);if(this.options.values.length===2&&this.options.range===true&&(d===0&&e>h||d===1&&e<h))e=h;if(e!==this.values(d)){h=this.values();h[d]=e;c=this._trigger("slide",c,{handle:this.handles[d],value:e,values:h});this.values(d?0:1);c!==false&&this.values(d,e,true)}}else if(e!==this.value()){c=this._trigger("slide",c,{handle:this.handles[d],value:e});
++c!==false&&this.value(e)}},_stop:function(c,d){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);e.values=this.values()}this._trigger("stop",c,e)},_change:function(c,d){if(!this._keySliding&&!this._mouseSliding){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);e.values=this.values()}this._trigger("change",c,e)}},value:function(c){if(arguments.length){this.options.value=
++this._trimAlignValue(c);this._refreshValue();this._change(null,0)}else return this._value()},values:function(c,d){var e,h,g;if(arguments.length>1){this.options.values[c]=this._trimAlignValue(d);this._refreshValue();this._change(null,c)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g<e.length;g+=1){e[g]=this._trimAlignValue(h[g]);this._change(null,g)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(c):
++this.value();else return this._values()},_setOption:function(c,d){var e,h=0;if(a.isArray(this.options.values))h=this.options.values.length;a.Widget.prototype._setOption.apply(this,arguments);switch(c){case "disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
++this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(e=0;e<h;e+=1)this._change(null,e);this._animateOff=false;break}},_value:function(){var c=this.options.value;return c=this._trimAlignValue(c)},_values:function(c){var d,e;if(arguments.length){d=this.options.values[c];
++return d=this._trimAlignValue(d)}else{d=this.options.values.slice();for(e=0;e<d.length;e+=1)d[e]=this._trimAlignValue(d[e]);return d}},_trimAlignValue:function(c){if(c<=this._valueMin())return this._valueMin();if(c>=this._valueMax())return this._valueMax();var d=this.options.step>0?this.options.step:1,e=(c-this._valueMin())%d;c=c-e;if(Math.abs(e)*2>=d)c+=e>0?d:-d;return parseFloat(c.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var c=
++this.options.range,d=this.options,e=this,h=!this._animateOff?d.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,d.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},d.animate);if(o===1)e.range[h?"animate":"css"]({width:g-
++b+"%"},{queue:false,duration:d.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},d.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:d.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,d.animate);if(c==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[h?"animate":"css"]({width:g+"%"},
++d.animate);if(c==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:d.animate});if(c==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},d.animate);if(c==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:d.animate})}}});a.extend(a.ui.slider,{version:"1.8.15"})})(jQuery);
++(function(a,c){function d(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&&
++b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+d()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i=
++a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]||
++(x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
++this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===c){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected=
++this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
++if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
++this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+
++r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal",
++function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")};
++this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected=
++-1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
++a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b=
++a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i,
++b,f){if(f===c)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]);
++o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove();
++if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1<this.anchors.length?1:-1));b.disabled=a.map(a.grep(b.disabled,function(l){return l!=i}),function(l){return l>=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null,
++this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this},
++load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j,
++"cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
++url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.15"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n<f.anchors.length?n:0)},i);o&&o.stopPropagation()});b=f._unrotate||(f._unrotate=!b?function(o){o.clientX&&
++f.rotate(null)}:function(){t=j.selected;l()});if(i){this.element.bind("tabsshow",l);this.anchors.bind(j.event+".tabs",b);l()}else{clearTimeout(f.rotation);this.element.unbind("tabsshow",l);this.anchors.unbind(j.event+".tabs",b);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.css	(revision 15487)
+@@ -0,0 +1,196 @@
++/** Font Family and Sizes */
++
++#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
++	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
++}
++
++#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
++#qunit-tests { font-size: smaller; }
++
++
++/** Resets */
++
++#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
++	margin: 0;
++	padding: 0;
++}
++
++
++/** Header */
++
++#qunit-header {
++	padding: 0.5em 0 0.5em 1em;
++
++	color: #8699a4;
++	background-color: #0d3349;
++
++	font-size: 1.5em;
++	line-height: 1em;
++	font-weight: normal;
++	
++	border-radius: 15px 15px 0 0;
++	-moz-border-radius: 15px 15px 0 0;
++	-webkit-border-top-right-radius: 15px;
++	-webkit-border-top-left-radius: 15px;
++}
++
++#qunit-header a {
++	text-decoration: none;
++	color: #c2ccd1;
++}
++
++#qunit-header a:hover,
++#qunit-header a:focus {
++	color: #fff;
++}
++
++#qunit-banner {
++	height: 5px;
++}
++
++#qunit-testrunner-toolbar {
++	padding: 0em 0 0.5em 2em;
++}
++
++#qunit-userAgent {
++	padding: 0.5em 0 0.5em 2.5em;
++	background-color: #2b81af;
++	color: #fff;
++	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
++}
++
++
++/** Tests: Pass/Fail */
++
++#qunit-tests {
++	list-style-position: inside;
++}
++
++#qunit-tests li {
++	padding: 0.4em 0.5em 0.4em 2.5em;
++	border-bottom: 1px solid #fff;
++	list-style-position: inside;
++}
++
++#qunit-tests li strong {
++	cursor: pointer;
++}
++
++#qunit-tests ol {
++	margin-top: 0.5em;
++	padding: 0.5em;
++	
++	background-color: #fff;
++	
++	border-radius: 15px;
++	-moz-border-radius: 15px;
++	-webkit-border-radius: 15px;
++	
++	box-shadow: inset 0px 2px 13px #999;
++	-moz-box-shadow: inset 0px 2px 13px #999;
++	-webkit-box-shadow: inset 0px 2px 13px #999;
++}
++
++#qunit-tests table {
++	border-collapse: collapse;
++	margin-top: .2em;
++}
++
++#qunit-tests th {
++	text-align: right;
++	vertical-align: top;
++	padding: 0 .5em 0 0;
++}
++
++#qunit-tests td {
++	vertical-align: top;
++}
++
++#qunit-tests pre {
++	margin: 0;
++	white-space: pre-wrap;
++	word-wrap: break-word;
++}
++
++#qunit-tests del {
++	background-color: #e0f2be;
++	color: #374e0c;
++	text-decoration: none;
++}
++
++#qunit-tests ins {
++	background-color: #ffcaca;
++	color: #500;
++	text-decoration: none;
++}
++
++/*** Test Counts */
++
++#qunit-tests b.counts                       { color: black; }
++#qunit-tests b.passed                       { color: #5E740B; }
++#qunit-tests b.failed                       { color: #710909; }
++
++#qunit-tests li li {
++	margin: 0.5em;
++	padding: 0.4em 0.5em 0.4em 0.5em;
++	background-color: #fff;
++	border-bottom: none;
++	list-style-position: inside;
++}
++
++/*** Passing Styles */
++
++#qunit-tests li li.pass {
++	color: #5E740B;
++	background-color: #fff;
++	border-left: 26px solid #C6E746;
++}
++
++#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
++#qunit-tests .pass .test-name               { color: #366097; }
++ 
++#qunit-tests .pass .test-actual,
++#qunit-tests .pass .test-expected           { color: #999999; }
++
++#qunit-banner.qunit-pass                    { background-color: #C6E746; }
++
++/*** Failing Styles */
++
++#qunit-tests li li.fail {
++	color: #710909;
++	background-color: #fff;
++	border-left: 26px solid #EE5757;
++}
++
++#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
++#qunit-tests .fail .test-name,
++#qunit-tests .fail .module-name             { color: #000000; }
++
++#qunit-tests .fail .test-actual             { color: #EE5757; }
++#qunit-tests .fail .test-expected           { color: green;   }
++
++#qunit-banner.qunit-fail, 
++#qunit-testrunner-toolbar                   { background-color: #EE5757; }
++
++
++/** Footer */
++
++#qunit-testresult {
++	padding: 0.5em 0.5em 0.5em 2.5em;
++
++	color: #2b81af;
++	background-color: #D2E0E6;
++
++	border-radius: 0 0 15px 15px;
++	-moz-border-radius: 0 0 15px 15px;
++	-webkit-border-bottom-right-radius: 15px;
++	-webkit-border-bottom-left-radius: 15px;
++}
++
++/** Fixture */
++
++#qunit-fixture {
++	position: absolute;
++	top: -10000px;
++	left: -10000px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.js	(revision 15487)
+@@ -0,0 +1,8981 @@
++/*!
++ * jQuery JavaScript Library v1.6.2
++ * http://jquery.com/
++ *
++ * Copyright 2011, John Resig
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * Includes Sizzle.js
++ * http://sizzlejs.com/
++ * Copyright 2011, The Dojo Foundation
++ * Released under the MIT, BSD, and GPL Licenses.
++ *
++ * Date: Thu Jun 30 14:16:56 2011 -0400
++ */
++(function( window, undefined ) {
++
++// Use the correct document accordingly with window argument (sandbox)
++var document = window.document,
++	navigator = window.navigator,
++	location = window.location;
++var jQuery = (function() {
++
++// Define a local copy of jQuery
++var jQuery = function( selector, context ) {
++		// The jQuery object is actually just the init constructor 'enhanced'
++		return new jQuery.fn.init( selector, context, rootjQuery );
++	},
++
++	// Map over jQuery in case of overwrite
++	_jQuery = window.jQuery,
++
++	// Map over the $ in case of overwrite
++	_$ = window.$,
++
++	// A central reference to the root jQuery(document)
++	rootjQuery,
++
++	// A simple way to check for HTML strings or ID strings
++	// (both of which we optimize for)
++	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
++
++	// Check if a string has a non-whitespace character in it
++	rnotwhite = /\S/,
++
++	// Used for trimming whitespace
++	trimLeft = /^\s+/,
++	trimRight = /\s+$/,
++
++	// Check for digits
++	rdigit = /\d/,
++
++	// Match a standalone tag
++	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
++
++	// JSON RegExp
++	rvalidchars = /^[\],:{}\s]*$/,
++	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
++	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
++	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
++
++	// Useragent RegExp
++	rwebkit = /(webkit)[ \/]([\w.]+)/,
++	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
++	rmsie = /(msie) ([\w.]+)/,
++	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
++
++	// Matches dashed string for camelizing
++	rdashAlpha = /-([a-z])/ig,
++
++	// Used by jQuery.camelCase as callback to replace()
++	fcamelCase = function( all, letter ) {
++		return letter.toUpperCase();
++	},
++
++	// Keep a UserAgent string for use with jQuery.browser
++	userAgent = navigator.userAgent,
++
++	// For matching the engine and version of the browser
++	browserMatch,
++
++	// The deferred used on DOM ready
++	readyList,
++
++	// The ready event handler
++	DOMContentLoaded,
++
++	// Save a reference to some core methods
++	toString = Object.prototype.toString,
++	hasOwn = Object.prototype.hasOwnProperty,
++	push = Array.prototype.push,
++	slice = Array.prototype.slice,
++	trim = String.prototype.trim,
++	indexOf = Array.prototype.indexOf,
++
++	// [[Class]] -> type pairs
++	class2type = {};
++
++jQuery.fn = jQuery.prototype = {
++	constructor: jQuery,
++	init: function( selector, context, rootjQuery ) {
++		var match, elem, ret, doc;
++
++		// Handle $(""), $(null), or $(undefined)
++		if ( !selector ) {
++			return this;
++		}
++
++		// Handle $(DOMElement)
++		if ( selector.nodeType ) {
++			this.context = this[0] = selector;
++			this.length = 1;
++			return this;
++		}
++
++		// The body element only exists once, optimize finding it
++		if ( selector === "body" && !context && document.body ) {
++			this.context = document;
++			this[0] = document.body;
++			this.selector = selector;
++			this.length = 1;
++			return this;
++		}
++
++		// Handle HTML strings
++		if ( typeof selector === "string" ) {
++			// Are we dealing with HTML string or an ID?
++			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
++				// Assume that strings that start and end with <> are HTML and skip the regex check
++				match = [ null, selector, null ];
++
++			} else {
++				match = quickExpr.exec( selector );
++			}
++
++			// Verify a match, and that no context was specified for #id
++			if ( match && (match[1] || !context) ) {
++
++				// HANDLE: $(html) -> $(array)
++				if ( match[1] ) {
++					context = context instanceof jQuery ? context[0] : context;
++					doc = (context ? context.ownerDocument || context : document);
++
++					// If a single string is passed in and it's a single tag
++					// just do a createElement and skip the rest
++					ret = rsingleTag.exec( selector );
++
++					if ( ret ) {
++						if ( jQuery.isPlainObject( context ) ) {
++							selector = [ document.createElement( ret[1] ) ];
++							jQuery.fn.attr.call( selector, context, true );
++
++						} else {
++							selector = [ doc.createElement( ret[1] ) ];
++						}
++
++					} else {
++						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
++						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
++					}
++
++					return jQuery.merge( this, selector );
++
++				// HANDLE: $("#id")
++				} else {
++					elem = document.getElementById( match[2] );
++
++					// Check parentNode to catch when Blackberry 4.6 returns
++					// nodes that are no longer in the document #6963
++					if ( elem && elem.parentNode ) {
++						// Handle the case where IE and Opera return items
++						// by name instead of ID
++						if ( elem.id !== match[2] ) {
++							return rootjQuery.find( selector );
++						}
++
++						// Otherwise, we inject the element directly into the jQuery object
++						this.length = 1;
++						this[0] = elem;
++					}
++
++					this.context = document;
++					this.selector = selector;
++					return this;
++				}
++
++			// HANDLE: $(expr, $(...))
++			} else if ( !context || context.jquery ) {
++				return (context || rootjQuery).find( selector );
++
++			// HANDLE: $(expr, context)
++			// (which is just equivalent to: $(context).find(expr)
++			} else {
++				return this.constructor( context ).find( selector );
++			}
++
++		// HANDLE: $(function)
++		// Shortcut for document ready
++		} else if ( jQuery.isFunction( selector ) ) {
++			return rootjQuery.ready( selector );
++		}
++
++		if (selector.selector !== undefined) {
++			this.selector = selector.selector;
++			this.context = selector.context;
++		}
++
++		return jQuery.makeArray( selector, this );
++	},
++
++	// Start with an empty selector
++	selector: "",
++
++	// The current version of jQuery being used
++	jquery: "1.6.2",
++
++	// The default length of a jQuery object is 0
++	length: 0,
++
++	// The number of elements contained in the matched element set
++	size: function() {
++		return this.length;
++	},
++
++	toArray: function() {
++		return slice.call( this, 0 );
++	},
++
++	// Get the Nth element in the matched element set OR
++	// Get the whole matched element set as a clean array
++	get: function( num ) {
++		return num == null ?
++
++			// Return a 'clean' array
++			this.toArray() :
++
++			// Return just the object
++			( num < 0 ? this[ this.length + num ] : this[ num ] );
++	},
++
++	// Take an array of elements and push it onto the stack
++	// (returning the new matched element set)
++	pushStack: function( elems, name, selector ) {
++		// Build a new jQuery matched element set
++		var ret = this.constructor();
++
++		if ( jQuery.isArray( elems ) ) {
++			push.apply( ret, elems );
++
++		} else {
++			jQuery.merge( ret, elems );
++		}
++
++		// Add the old object onto the stack (as a reference)
++		ret.prevObject = this;
++
++		ret.context = this.context;
++
++		if ( name === "find" ) {
++			ret.selector = this.selector + (this.selector ? " " : "") + selector;
++		} else if ( name ) {
++			ret.selector = this.selector + "." + name + "(" + selector + ")";
++		}
++
++		// Return the newly-formed element set
++		return ret;
++	},
++
++	// Execute a callback for every element in the matched set.
++	// (You can seed the arguments with an array of args, but this is
++	// only used internally.)
++	each: function( callback, args ) {
++		return jQuery.each( this, callback, args );
++	},
++
++	ready: function( fn ) {
++		// Attach the listeners
++		jQuery.bindReady();
++
++		// Add the callback
++		readyList.done( fn );
++
++		return this;
++	},
++
++	eq: function( i ) {
++		return i === -1 ?
++			this.slice( i ) :
++			this.slice( i, +i + 1 );
++	},
++
++	first: function() {
++		return this.eq( 0 );
++	},
++
++	last: function() {
++		return this.eq( -1 );
++	},
++
++	slice: function() {
++		return this.pushStack( slice.apply( this, arguments ),
++			"slice", slice.call(arguments).join(",") );
++	},
++
++	map: function( callback ) {
++		return this.pushStack( jQuery.map(this, function( elem, i ) {
++			return callback.call( elem, i, elem );
++		}));
++	},
++
++	end: function() {
++		return this.prevObject || this.constructor(null);
++	},
++
++	// For internal use only.
++	// Behaves like an Array's method, not like a jQuery method.
++	push: push,
++	sort: [].sort,
++	splice: [].splice
++};
++
++// Give the init function the jQuery prototype for later instantiation
++jQuery.fn.init.prototype = jQuery.fn;
++
++jQuery.extend = jQuery.fn.extend = function() {
++	var options, name, src, copy, copyIsArray, clone,
++		target = arguments[0] || {},
++		i = 1,
++		length = arguments.length,
++		deep = false;
++
++	// Handle a deep copy situation
++	if ( typeof target === "boolean" ) {
++		deep = target;
++		target = arguments[1] || {};
++		// skip the boolean and the target
++		i = 2;
++	}
++
++	// Handle case when target is a string or something (possible in deep copy)
++	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
++		target = {};
++	}
++
++	// extend jQuery itself if only one argument is passed
++	if ( length === i ) {
++		target = this;
++		--i;
++	}
++
++	for ( ; i < length; i++ ) {
++		// Only deal with non-null/undefined values
++		if ( (options = arguments[ i ]) != null ) {
++			// Extend the base object
++			for ( name in options ) {
++				src = target[ name ];
++				copy = options[ name ];
++
++				// Prevent never-ending loop
++				if ( target === copy ) {
++					continue;
++				}
++
++				// Recurse if we're merging plain objects or arrays
++				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
++					if ( copyIsArray ) {
++						copyIsArray = false;
++						clone = src && jQuery.isArray(src) ? src : [];
++
++					} else {
++						clone = src && jQuery.isPlainObject(src) ? src : {};
++					}
++
++					// Never move original objects, clone them
++					target[ name ] = jQuery.extend( deep, clone, copy );
++
++				// Don't bring in undefined values
++				} else if ( copy !== undefined ) {
++					target[ name ] = copy;
++				}
++			}
++		}
++	}
++
++	// Return the modified object
++	return target;
++};
++
++jQuery.extend({
++	noConflict: function( deep ) {
++		if ( window.$ === jQuery ) {
++			window.$ = _$;
++		}
++
++		if ( deep && window.jQuery === jQuery ) {
++			window.jQuery = _jQuery;
++		}
++
++		return jQuery;
++	},
++
++	// Is the DOM ready to be used? Set to true once it occurs.
++	isReady: false,
++
++	// A counter to track how many items to wait for before
++	// the ready event fires. See #6781
++	readyWait: 1,
++
++	// Hold (or release) the ready event
++	holdReady: function( hold ) {
++		if ( hold ) {
++			jQuery.readyWait++;
++		} else {
++			jQuery.ready( true );
++		}
++	},
++
++	// Handle when the DOM is ready
++	ready: function( wait ) {
++		// Either a released hold or an DOMready/load event and not yet ready
++		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
++			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
++			if ( !document.body ) {
++				return setTimeout( jQuery.ready, 1 );
++			}
++
++			// Remember that the DOM is ready
++			jQuery.isReady = true;
++
++			// If a normal DOM Ready event fired, decrement, and wait if need be
++			if ( wait !== true && --jQuery.readyWait > 0 ) {
++				return;
++			}
++
++			// If there are functions bound, to execute
++			readyList.resolveWith( document, [ jQuery ] );
++
++			// Trigger any bound ready events
++			if ( jQuery.fn.trigger ) {
++				jQuery( document ).trigger( "ready" ).unbind( "ready" );
++			}
++		}
++	},
++
++	bindReady: function() {
++		if ( readyList ) {
++			return;
++		}
++
++		readyList = jQuery._Deferred();
++
++		// Catch cases where $(document).ready() is called after the
++		// browser event has already occurred.
++		if ( document.readyState === "complete" ) {
++			// Handle it asynchronously to allow scripts the opportunity to delay ready
++			return setTimeout( jQuery.ready, 1 );
++		}
++
++		// Mozilla, Opera and webkit nightlies currently support this event
++		if ( document.addEventListener ) {
++			// Use the handy event callback
++			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
++
++			// A fallback to window.onload, that will always work
++			window.addEventListener( "load", jQuery.ready, false );
++
++		// If IE event model is used
++		} else if ( document.attachEvent ) {
++			// ensure firing before onload,
++			// maybe late but safe also for iframes
++			document.attachEvent( "onreadystatechange", DOMContentLoaded );
++
++			// A fallback to window.onload, that will always work
++			window.attachEvent( "onload", jQuery.ready );
++
++			// If IE and not a frame
++			// continually check to see if the document is ready
++			var toplevel = false;
++
++			try {
++				toplevel = window.frameElement == null;
++			} catch(e) {}
++
++			if ( document.documentElement.doScroll && toplevel ) {
++				doScrollCheck();
++			}
++		}
++	},
++
++	// See test/unit/core.js for details concerning isFunction.
++	// Since version 1.3, DOM methods and functions like alert
++	// aren't supported. They return false on IE (#2968).
++	isFunction: function( obj ) {
++		return jQuery.type(obj) === "function";
++	},
++
++	isArray: Array.isArray || function( obj ) {
++		return jQuery.type(obj) === "array";
++	},
++
++	// A crude way of determining if an object is a window
++	isWindow: function( obj ) {
++		return obj && typeof obj === "object" && "setInterval" in obj;
++	},
++
++	isNaN: function( obj ) {
++		return obj == null || !rdigit.test( obj ) || isNaN( obj );
++	},
++
++	type: function( obj ) {
++		return obj == null ?
++			String( obj ) :
++			class2type[ toString.call(obj) ] || "object";
++	},
++
++	isPlainObject: function( obj ) {
++		// Must be an Object.
++		// Because of IE, we also have to check the presence of the constructor property.
++		// Make sure that DOM nodes and window objects don't pass through, as well
++		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
++			return false;
++		}
++
++		// Not own constructor property must be Object
++		if ( obj.constructor &&
++			!hasOwn.call(obj, "constructor") &&
++			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
++			return false;
++		}
++
++		// Own properties are enumerated firstly, so to speed up,
++		// if last one is own, then all properties are own.
++
++		var key;
++		for ( key in obj ) {}
++
++		return key === undefined || hasOwn.call( obj, key );
++	},
++
++	isEmptyObject: function( obj ) {
++		for ( var name in obj ) {
++			return false;
++		}
++		return true;
++	},
++
++	error: function( msg ) {
++		throw msg;
++	},
++
++	parseJSON: function( data ) {
++		if ( typeof data !== "string" || !data ) {
++			return null;
++		}
++
++		// Make sure leading/trailing whitespace is removed (IE can't handle it)
++		data = jQuery.trim( data );
++
++		// Attempt to parse using the native JSON parser first
++		if ( window.JSON && window.JSON.parse ) {
++			return window.JSON.parse( data );
++		}
++
++		// Make sure the incoming data is actual JSON
++		// Logic borrowed from http://json.org/json2.js
++		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
++			.replace( rvalidtokens, "]" )
++			.replace( rvalidbraces, "")) ) {
++
++			return (new Function( "return " + data ))();
++
++		}
++		jQuery.error( "Invalid JSON: " + data );
++	},
++
++	// Cross-browser xml parsing
++	// (xml & tmp used internally)
++	parseXML: function( data , xml , tmp ) {
++
++		if ( window.DOMParser ) { // Standard
++			tmp = new DOMParser();
++			xml = tmp.parseFromString( data , "text/xml" );
++		} else { // IE
++			xml = new ActiveXObject( "Microsoft.XMLDOM" );
++			xml.async = "false";
++			xml.loadXML( data );
++		}
++
++		tmp = xml.documentElement;
++
++		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
++			jQuery.error( "Invalid XML: " + data );
++		}
++
++		return xml;
++	},
++
++	noop: function() {},
++
++	// Evaluates a script in a global context
++	// Workarounds based on findings by Jim Driscoll
++	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
++	globalEval: function( data ) {
++		if ( data && rnotwhite.test( data ) ) {
++			// We use execScript on Internet Explorer
++			// We use an anonymous function so that context is window
++			// rather than jQuery in Firefox
++			( window.execScript || function( data ) {
++				window[ "eval" ].call( window, data );
++			} )( data );
++		}
++	},
++
++	// Converts a dashed string to camelCased string;
++	// Used by both the css and data modules
++	camelCase: function( string ) {
++		return string.replace( rdashAlpha, fcamelCase );
++	},
++
++	nodeName: function( elem, name ) {
++		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
++	},
++
++	// args is for internal usage only
++	each: function( object, callback, args ) {
++		var name, i = 0,
++			length = object.length,
++			isObj = length === undefined || jQuery.isFunction( object );
++
++		if ( args ) {
++			if ( isObj ) {
++				for ( name in object ) {
++					if ( callback.apply( object[ name ], args ) === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( ; i < length; ) {
++					if ( callback.apply( object[ i++ ], args ) === false ) {
++						break;
++					}
++				}
++			}
++
++		// A special, fast, case for the most common use of each
++		} else {
++			if ( isObj ) {
++				for ( name in object ) {
++					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( ; i < length; ) {
++					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
++						break;
++					}
++				}
++			}
++		}
++
++		return object;
++	},
++
++	// Use native String.trim function wherever possible
++	trim: trim ?
++		function( text ) {
++			return text == null ?
++				"" :
++				trim.call( text );
++		} :
++
++		// Otherwise use our own trimming functionality
++		function( text ) {
++			return text == null ?
++				"" :
++				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
++		},
++
++	// results is for internal usage only
++	makeArray: function( array, results ) {
++		var ret = results || [];
++
++		if ( array != null ) {
++			// The window, strings (and functions) also have 'length'
++			// The extra typeof function check is to prevent crashes
++			// in Safari 2 (See: #3039)
++			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
++			var type = jQuery.type( array );
++
++			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
++				push.call( ret, array );
++			} else {
++				jQuery.merge( ret, array );
++			}
++		}
++
++		return ret;
++	},
++
++	inArray: function( elem, array ) {
++
++		if ( indexOf ) {
++			return indexOf.call( array, elem );
++		}
++
++		for ( var i = 0, length = array.length; i < length; i++ ) {
++			if ( array[ i ] === elem ) {
++				return i;
++			}
++		}
++
++		return -1;
++	},
++
++	merge: function( first, second ) {
++		var i = first.length,
++			j = 0;
++
++		if ( typeof second.length === "number" ) {
++			for ( var l = second.length; j < l; j++ ) {
++				first[ i++ ] = second[ j ];
++			}
++
++		} else {
++			while ( second[j] !== undefined ) {
++				first[ i++ ] = second[ j++ ];
++			}
++		}
++
++		first.length = i;
++
++		return first;
++	},
++
++	grep: function( elems, callback, inv ) {
++		var ret = [], retVal;
++		inv = !!inv;
++
++		// Go through the array, only saving the items
++		// that pass the validator function
++		for ( var i = 0, length = elems.length; i < length; i++ ) {
++			retVal = !!callback( elems[ i ], i );
++			if ( inv !== retVal ) {
++				ret.push( elems[ i ] );
++			}
++		}
++
++		return ret;
++	},
++
++	// arg is for internal usage only
++	map: function( elems, callback, arg ) {
++		var value, key, ret = [],
++			i = 0,
++			length = elems.length,
++			// jquery objects are treated as arrays
++			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
++
++		// Go through the array, translating each of the items to their
++		if ( isArray ) {
++			for ( ; i < length; i++ ) {
++				value = callback( elems[ i ], i, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++
++		// Go through every key on the object,
++		} else {
++			for ( key in elems ) {
++				value = callback( elems[ key ], key, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++		}
++
++		// Flatten any nested arrays
++		return ret.concat.apply( [], ret );
++	},
++
++	// A global GUID counter for objects
++	guid: 1,
++
++	// Bind a function to a context, optionally partially applying any
++	// arguments.
++	proxy: function( fn, context ) {
++		if ( typeof context === "string" ) {
++			var tmp = fn[ context ];
++			context = fn;
++			fn = tmp;
++		}
++
++		// Quick check to determine if target is callable, in the spec
++		// this throws a TypeError, but we will just return undefined.
++		if ( !jQuery.isFunction( fn ) ) {
++			return undefined;
++		}
++
++		// Simulated bind
++		var args = slice.call( arguments, 2 ),
++			proxy = function() {
++				return fn.apply( context, args.concat( slice.call( arguments ) ) );
++			};
++
++		// Set the guid of unique handler to the same of original handler, so it can be removed
++		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
++
++		return proxy;
++	},
++
++	// Mutifunctional method to get and set values to a collection
++	// The value/s can optionally be executed if it's a function
++	access: function( elems, key, value, exec, fn, pass ) {
++		var length = elems.length;
++
++		// Setting many attributes
++		if ( typeof key === "object" ) {
++			for ( var k in key ) {
++				jQuery.access( elems, k, key[k], exec, fn, value );
++			}
++			return elems;
++		}
++
++		// Setting one attribute
++		if ( value !== undefined ) {
++			// Optionally, function values get executed if exec is true
++			exec = !pass && exec && jQuery.isFunction(value);
++
++			for ( var i = 0; i < length; i++ ) {
++				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
++			}
++
++			return elems;
++		}
++
++		// Getting an attribute
++		return length ? fn( elems[0], key ) : undefined;
++	},
++
++	now: function() {
++		return (new Date()).getTime();
++	},
++
++	// Use of jQuery.browser is frowned upon.
++	// More details: http://docs.jquery.com/Utilities/jQuery.browser
++	uaMatch: function( ua ) {
++		ua = ua.toLowerCase();
++
++		var match = rwebkit.exec( ua ) ||
++			ropera.exec( ua ) ||
++			rmsie.exec( ua ) ||
++			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
++			[];
++
++		return { browser: match[1] || "", version: match[2] || "0" };
++	},
++
++	sub: function() {
++		function jQuerySub( selector, context ) {
++			return new jQuerySub.fn.init( selector, context );
++		}
++		jQuery.extend( true, jQuerySub, this );
++		jQuerySub.superclass = this;
++		jQuerySub.fn = jQuerySub.prototype = this();
++		jQuerySub.fn.constructor = jQuerySub;
++		jQuerySub.sub = this.sub;
++		jQuerySub.fn.init = function init( selector, context ) {
++			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
++				context = jQuerySub( context );
++			}
++
++			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
++		};
++		jQuerySub.fn.init.prototype = jQuerySub.fn;
++		var rootjQuerySub = jQuerySub(document);
++		return jQuerySub;
++	},
++
++	browser: {}
++});
++
++// Populate the class2type map
++jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
++	class2type[ "[object " + name + "]" ] = name.toLowerCase();
++});
++
++browserMatch = jQuery.uaMatch( userAgent );
++if ( browserMatch.browser ) {
++	jQuery.browser[ browserMatch.browser ] = true;
++	jQuery.browser.version = browserMatch.version;
++}
++
++// Deprecated, use jQuery.browser.webkit instead
++if ( jQuery.browser.webkit ) {
++	jQuery.browser.safari = true;
++}
++
++// IE doesn't match non-breaking spaces with \s
++if ( rnotwhite.test( "\xA0" ) ) {
++	trimLeft = /^[\s\xA0]+/;
++	trimRight = /[\s\xA0]+$/;
++}
++
++// All jQuery objects should point back to these
++rootjQuery = jQuery(document);
++
++// Cleanup functions for the document ready method
++if ( document.addEventListener ) {
++	DOMContentLoaded = function() {
++		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
++		jQuery.ready();
++	};
++
++} else if ( document.attachEvent ) {
++	DOMContentLoaded = function() {
++		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
++		if ( document.readyState === "complete" ) {
++			document.detachEvent( "onreadystatechange", DOMContentLoaded );
++			jQuery.ready();
++		}
++	};
++}
++
++// The DOM ready check for Internet Explorer
++function doScrollCheck() {
++	if ( jQuery.isReady ) {
++		return;
++	}
++
++	try {
++		// If IE is used, use the trick by Diego Perini
++		// http://javascript.nwbox.com/IEContentLoaded/
++		document.documentElement.doScroll("left");
++	} catch(e) {
++		setTimeout( doScrollCheck, 1 );
++		return;
++	}
++
++	// and execute any waiting functions
++	jQuery.ready();
++}
++
++return jQuery;
++
++})();
++
++
++var // Promise methods
++	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
++	// Static reference to slice
++	sliceDeferred = [].slice;
++
++jQuery.extend({
++	// Create a simple deferred (one callbacks list)
++	_Deferred: function() {
++		var // callbacks list
++			callbacks = [],
++			// stored [ context , args ]
++			fired,
++			// to avoid firing when already doing so
++			firing,
++			// flag to know if the deferred has been cancelled
++			cancelled,
++			// the deferred itself
++			deferred  = {
++
++				// done( f1, f2, ...)
++				done: function() {
++					if ( !cancelled ) {
++						var args = arguments,
++							i,
++							length,
++							elem,
++							type,
++							_fired;
++						if ( fired ) {
++							_fired = fired;
++							fired = 0;
++						}
++						for ( i = 0, length = args.length; i < length; i++ ) {
++							elem = args[ i ];
++							type = jQuery.type( elem );
++							if ( type === "array" ) {
++								deferred.done.apply( deferred, elem );
++							} else if ( type === "function" ) {
++								callbacks.push( elem );
++							}
++						}
++						if ( _fired ) {
++							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
++						}
++					}
++					return this;
++				},
++
++				// resolve with given context and args
++				resolveWith: function( context, args ) {
++					if ( !cancelled && !fired && !firing ) {
++						// make sure args are available (#8421)
++						args = args || [];
++						firing = 1;
++						try {
++							while( callbacks[ 0 ] ) {
++								callbacks.shift().apply( context, args );
++							}
++						}
++						finally {
++							fired = [ context, args ];
++							firing = 0;
++						}
++					}
++					return this;
++				},
++
++				// resolve with this as context and given arguments
++				resolve: function() {
++					deferred.resolveWith( this, arguments );
++					return this;
++				},
++
++				// Has this deferred been resolved?
++				isResolved: function() {
++					return !!( firing || fired );
++				},
++
++				// Cancel
++				cancel: function() {
++					cancelled = 1;
++					callbacks = [];
++					return this;
++				}
++			};
++
++		return deferred;
++	},
++
++	// Full fledged deferred (two callbacks list)
++	Deferred: function( func ) {
++		var deferred = jQuery._Deferred(),
++			failDeferred = jQuery._Deferred(),
++			promise;
++		// Add errorDeferred methods, then and promise
++		jQuery.extend( deferred, {
++			then: function( doneCallbacks, failCallbacks ) {
++				deferred.done( doneCallbacks ).fail( failCallbacks );
++				return this;
++			},
++			always: function() {
++				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
++			},
++			fail: failDeferred.done,
++			rejectWith: failDeferred.resolveWith,
++			reject: failDeferred.resolve,
++			isRejected: failDeferred.isResolved,
++			pipe: function( fnDone, fnFail ) {
++				return jQuery.Deferred(function( newDefer ) {
++					jQuery.each( {
++						done: [ fnDone, "resolve" ],
++						fail: [ fnFail, "reject" ]
++					}, function( handler, data ) {
++						var fn = data[ 0 ],
++							action = data[ 1 ],
++							returned;
++						if ( jQuery.isFunction( fn ) ) {
++							deferred[ handler ](function() {
++								returned = fn.apply( this, arguments );
++								if ( returned && jQuery.isFunction( returned.promise ) ) {
++									returned.promise().then( newDefer.resolve, newDefer.reject );
++								} else {
++									newDefer[ action ]( returned );
++								}
++							});
++						} else {
++							deferred[ handler ]( newDefer[ action ] );
++						}
++					});
++				}).promise();
++			},
++			// Get a promise for this deferred
++			// If obj is provided, the promise aspect is added to the object
++			promise: function( obj ) {
++				if ( obj == null ) {
++					if ( promise ) {
++						return promise;
++					}
++					promise = obj = {};
++				}
++				var i = promiseMethods.length;
++				while( i-- ) {
++					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
++				}
++				return obj;
++			}
++		});
++		// Make sure only one callback list will be used
++		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
++		// Unexpose cancel
++		delete deferred.cancel;
++		// Call given func if any
++		if ( func ) {
++			func.call( deferred, deferred );
++		}
++		return deferred;
++	},
++
++	// Deferred helper
++	when: function( firstParam ) {
++		var args = arguments,
++			i = 0,
++			length = args.length,
++			count = length,
++			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
++				firstParam :
++				jQuery.Deferred();
++		function resolveFunc( i ) {
++			return function( value ) {
++				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
++				if ( !( --count ) ) {
++					// Strange bug in FF4:
++					// Values changed onto the arguments object sometimes end up as undefined values
++					// outside the $.when method. Cloning the object into a fresh array solves the issue
++					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
++				}
++			};
++		}
++		if ( length > 1 ) {
++			for( ; i < length; i++ ) {
++				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
++					args[ i ].promise().then( resolveFunc(i), deferred.reject );
++				} else {
++					--count;
++				}
++			}
++			if ( !count ) {
++				deferred.resolveWith( deferred, args );
++			}
++		} else if ( deferred !== firstParam ) {
++			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
++		}
++		return deferred.promise();
++	}
++});
++
++
++
++jQuery.support = (function() {
++
++	var div = document.createElement( "div" ),
++		documentElement = document.documentElement,
++		all,
++		a,
++		select,
++		opt,
++		input,
++		marginDiv,
++		support,
++		fragment,
++		body,
++		testElementParent,
++		testElement,
++		testElementStyle,
++		tds,
++		events,
++		eventName,
++		i,
++		isSupported;
++
++	// Preliminary tests
++	div.setAttribute("className", "t");
++	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
++
++	all = div.getElementsByTagName( "*" );
++	a = div.getElementsByTagName( "a" )[ 0 ];
++
++	// Can't get basic test support
++	if ( !all || !all.length || !a ) {
++		return {};
++	}
++
++	// First batch of supports tests
++	select = document.createElement( "select" );
++	opt = select.appendChild( document.createElement("option") );
++	input = div.getElementsByTagName( "input" )[ 0 ];
++
++	support = {
++		// IE strips leading whitespace when .innerHTML is used
++		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
++
++		// Make sure that tbody elements aren't automatically inserted
++		// IE will insert them into empty tables
++		tbody: !div.getElementsByTagName( "tbody" ).length,
++
++		// Make sure that link elements get serialized correctly by innerHTML
++		// This requires a wrapper element in IE
++		htmlSerialize: !!div.getElementsByTagName( "link" ).length,
++
++		// Get the style information from getAttribute
++		// (IE uses .cssText instead)
++		style: /top/.test( a.getAttribute("style") ),
++
++		// Make sure that URLs aren't manipulated
++		// (IE normalizes it by default)
++		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
++
++		// Make sure that element opacity exists
++		// (IE uses filter instead)
++		// Use a regex to work around a WebKit issue. See #5145
++		opacity: /^0.55$/.test( a.style.opacity ),
++
++		// Verify style float existence
++		// (IE uses styleFloat instead of cssFloat)
++		cssFloat: !!a.style.cssFloat,
++
++		// Make sure that if no value is specified for a checkbox
++		// that it defaults to "on".
++		// (WebKit defaults to "" instead)
++		checkOn: ( input.value === "on" ),
++
++		// Make sure that a selected-by-default option has a working selected property.
++		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
++		optSelected: opt.selected,
++
++		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
++		getSetAttribute: div.className !== "t",
++
++		// Will be defined later
++		submitBubbles: true,
++		changeBubbles: true,
++		focusinBubbles: false,
++		deleteExpando: true,
++		noCloneEvent: true,
++		inlineBlockNeedsLayout: false,
++		shrinkWrapBlocks: false,
++		reliableMarginRight: true
++	};
++
++	// Make sure checked status is properly cloned
++	input.checked = true;
++	support.noCloneChecked = input.cloneNode( true ).checked;
++
++	// Make sure that the options inside disabled selects aren't marked as disabled
++	// (WebKit marks them as disabled)
++	select.disabled = true;
++	support.optDisabled = !opt.disabled;
++
++	// Test to see if it's possible to delete an expando from an element
++	// Fails in Internet Explorer
++	try {
++		delete div.test;
++	} catch( e ) {
++		support.deleteExpando = false;
++	}
++
++	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
++		div.attachEvent( "onclick", function() {
++			// Cloning a node shouldn't copy over any
++			// bound event handlers (IE does this)
++			support.noCloneEvent = false;
++		});
++		div.cloneNode( true ).fireEvent( "onclick" );
++	}
++
++	// Check if a radio maintains it's value
++	// after being appended to the DOM
++	input = document.createElement("input");
++	input.value = "t";
++	input.setAttribute("type", "radio");
++	support.radioValue = input.value === "t";
++
++	input.setAttribute("checked", "checked");
++	div.appendChild( input );
++	fragment = document.createDocumentFragment();
++	fragment.appendChild( div.firstChild );
++
++	// WebKit doesn't clone checked state correctly in fragments
++	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
++
++	div.innerHTML = "";
++
++	// Figure out if the W3C box model works as expected
++	div.style.width = div.style.paddingLeft = "1px";
++
++	body = document.getElementsByTagName( "body" )[ 0 ];
++	// We use our own, invisible, body unless the body is already present
++	// in which case we use a div (#9239)
++	testElement = document.createElement( body ? "div" : "body" );
++	testElementStyle = {
++		visibility: "hidden",
++		width: 0,
++		height: 0,
++		border: 0,
++		margin: 0
++	};
++	if ( body ) {
++		jQuery.extend( testElementStyle, {
++			position: "absolute",
++			left: -1000,
++			top: -1000
++		});
++	}
++	for ( i in testElementStyle ) {
++		testElement.style[ i ] = testElementStyle[ i ];
++	}
++	testElement.appendChild( div );
++	testElementParent = body || documentElement;
++	testElementParent.insertBefore( testElement, testElementParent.firstChild );
++
++	// Check if a disconnected checkbox will retain its checked
++	// value of true after appended to the DOM (IE6/7)
++	support.appendChecked = input.checked;
++
++	support.boxModel = div.offsetWidth === 2;
++
++	if ( "zoom" in div.style ) {
++		// Check if natively block-level elements act like inline-block
++		// elements when setting their display to 'inline' and giving
++		// them layout
++		// (IE < 8 does this)
++		div.style.display = "inline";
++		div.style.zoom = 1;
++		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
++
++		// Check if elements with layout shrink-wrap their children
++		// (IE 6 does this)
++		div.style.display = "";
++		div.innerHTML = "<div style='width:4px;'></div>";
++		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
++	}
++
++	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
++	tds = div.getElementsByTagName( "td" );
++
++	// Check if table cells still have offsetWidth/Height when they are set
++	// to display:none and there are still other visible table cells in a
++	// table row; if so, offsetWidth/Height are not reliable for use when
++	// determining if an element has been hidden directly using
++	// display:none (it is still safe to use offsets if a parent element is
++	// hidden; don safety goggles and see bug #4512 for more information).
++	// (only IE 8 fails this test)
++	isSupported = ( tds[ 0 ].offsetHeight === 0 );
++
++	tds[ 0 ].style.display = "";
++	tds[ 1 ].style.display = "none";
++
++	// Check if empty table cells still have offsetWidth/Height
++	// (IE < 8 fail this test)
++	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
++	div.innerHTML = "";
++
++	// Check if div with explicit width and no margin-right incorrectly
++	// gets computed margin-right based on width of container. For more
++	// info see bug #3333
++	// Fails in WebKit before Feb 2011 nightlies
++	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++	if ( document.defaultView && document.defaultView.getComputedStyle ) {
++		marginDiv = document.createElement( "div" );
++		marginDiv.style.width = "0";
++		marginDiv.style.marginRight = "0";
++		div.appendChild( marginDiv );
++		support.reliableMarginRight =
++			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
++	}
++
++	// Remove the body element we added
++	testElement.innerHTML = "";
++	testElementParent.removeChild( testElement );
++
++	// Technique from Juriy Zaytsev
++	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
++	// We only care about the case where non-standard event systems
++	// are used, namely in IE. Short-circuiting here helps us to
++	// avoid an eval call (in setAttribute) which can cause CSP
++	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
++	if ( div.attachEvent ) {
++		for( i in {
++			submit: 1,
++			change: 1,
++			focusin: 1
++		} ) {
++			eventName = "on" + i;
++			isSupported = ( eventName in div );
++			if ( !isSupported ) {
++				div.setAttribute( eventName, "return;" );
++				isSupported = ( typeof div[ eventName ] === "function" );
++			}
++			support[ i + "Bubbles" ] = isSupported;
++		}
++	}
++
++	// Null connected elements to avoid leaks in IE
++	testElement = fragment = select = opt = body = marginDiv = div = input = null;
++
++	return support;
++})();
++
++// Keep track of boxModel
++jQuery.boxModel = jQuery.support.boxModel;
++
++
++
++
++var rbrace = /^(?:\{.*\}|\[.*\])$/,
++	rmultiDash = /([a-z])([A-Z])/g;
++
++jQuery.extend({
++	cache: {},
++
++	// Please use with caution
++	uuid: 0,
++
++	// Unique for each copy of jQuery on the page
++	// Non-digits removed to match rinlinejQuery
++	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
++
++	// The following elements throw uncatchable exceptions if you
++	// attempt to add expando properties to them.
++	noData: {
++		"embed": true,
++		// Ban all objects except for Flash (which handle expandos)
++		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
++		"applet": true
++	},
++
++	hasData: function( elem ) {
++		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
++
++		return !!elem && !isEmptyDataObject( elem );
++	},
++
++	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
++		if ( !jQuery.acceptData( elem ) ) {
++			return;
++		}
++
++		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
++
++			// We have to handle DOM nodes and JS objects differently because IE6-7
++			// can't GC object references properly across the DOM-JS boundary
++			isNode = elem.nodeType,
++
++			// Only DOM nodes need the global jQuery cache; JS object data is
++			// attached directly to the object so GC can occur automatically
++			cache = isNode ? jQuery.cache : elem,
++
++			// Only defining an ID for JS objects if its cache already exists allows
++			// the code to shortcut on the same path as a DOM node with no cache
++			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
++
++		// Avoid doing any more work than we need to when trying to get data on an
++		// object that has no data at all
++		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
++			return;
++		}
++
++		if ( !id ) {
++			// Only DOM nodes need a new unique ID for each element since their data
++			// ends up in the global cache
++			if ( isNode ) {
++				elem[ jQuery.expando ] = id = ++jQuery.uuid;
++			} else {
++				id = jQuery.expando;
++			}
++		}
++
++		if ( !cache[ id ] ) {
++			cache[ id ] = {};
++
++			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
++			// metadata on plain JS objects when the object is serialized using
++			// JSON.stringify
++			if ( !isNode ) {
++				cache[ id ].toJSON = jQuery.noop;
++			}
++		}
++
++		// An object can be passed to jQuery.data instead of a key/value pair; this gets
++		// shallow copied over onto the existing cache
++		if ( typeof name === "object" || typeof name === "function" ) {
++			if ( pvt ) {
++				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
++			} else {
++				cache[ id ] = jQuery.extend(cache[ id ], name);
++			}
++		}
++
++		thisCache = cache[ id ];
++
++		// Internal jQuery data is stored in a separate object inside the object's data
++		// cache in order to avoid key collisions between internal data and user-defined
++		// data
++		if ( pvt ) {
++			if ( !thisCache[ internalKey ] ) {
++				thisCache[ internalKey ] = {};
++			}
++
++			thisCache = thisCache[ internalKey ];
++		}
++
++		if ( data !== undefined ) {
++			thisCache[ jQuery.camelCase( name ) ] = data;
++		}
++
++		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
++		// not attempt to inspect the internal events object using jQuery.data, as this
++		// internal data object is undocumented and subject to change.
++		if ( name === "events" && !thisCache[name] ) {
++			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
++		}
++
++		return getByName ? 
++			// Check for both converted-to-camel and non-converted data property names
++			thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] :
++			thisCache;
++	},
++
++	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
++		if ( !jQuery.acceptData( elem ) ) {
++			return;
++		}
++
++		var internalKey = jQuery.expando, isNode = elem.nodeType,
++
++			// See jQuery.data for more information
++			cache = isNode ? jQuery.cache : elem,
++
++			// See jQuery.data for more information
++			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
++
++		// If there is already no cache entry for this object, there is no
++		// purpose in continuing
++		if ( !cache[ id ] ) {
++			return;
++		}
++
++		if ( name ) {
++			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
++
++			if ( thisCache ) {
++				delete thisCache[ name ];
++
++				// If there is no data left in the cache, we want to continue
++				// and let the cache object itself get destroyed
++				if ( !isEmptyDataObject(thisCache) ) {
++					return;
++				}
++			}
++		}
++
++		// See jQuery.data for more information
++		if ( pvt ) {
++			delete cache[ id ][ internalKey ];
++
++			// Don't destroy the parent cache unless the internal data object
++			// had been the only thing left in it
++			if ( !isEmptyDataObject(cache[ id ]) ) {
++				return;
++			}
++		}
++
++		var internalCache = cache[ id ][ internalKey ];
++
++		// Browsers that fail expando deletion also refuse to delete expandos on
++		// the window, but it will allow it on all other JS objects; other browsers
++		// don't care
++		if ( jQuery.support.deleteExpando || cache != window ) {
++			delete cache[ id ];
++		} else {
++			cache[ id ] = null;
++		}
++
++		// We destroyed the entire user cache at once because it's faster than
++		// iterating through each key, but we need to continue to persist internal
++		// data if it existed
++		if ( internalCache ) {
++			cache[ id ] = {};
++			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
++			// metadata on plain JS objects when the object is serialized using
++			// JSON.stringify
++			if ( !isNode ) {
++				cache[ id ].toJSON = jQuery.noop;
++			}
++
++			cache[ id ][ internalKey ] = internalCache;
++
++		// Otherwise, we need to eliminate the expando on the node to avoid
++		// false lookups in the cache for entries that no longer exist
++		} else if ( isNode ) {
++			// IE does not allow us to delete expando properties from nodes,
++			// nor does it have a removeAttribute function on Document nodes;
++			// we must handle all of these cases
++			if ( jQuery.support.deleteExpando ) {
++				delete elem[ jQuery.expando ];
++			} else if ( elem.removeAttribute ) {
++				elem.removeAttribute( jQuery.expando );
++			} else {
++				elem[ jQuery.expando ] = null;
++			}
++		}
++	},
++
++	// For internal use only.
++	_data: function( elem, name, data ) {
++		return jQuery.data( elem, name, data, true );
++	},
++
++	// A method for determining if a DOM node can handle the data expando
++	acceptData: function( elem ) {
++		if ( elem.nodeName ) {
++			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
++
++			if ( match ) {
++				return !(match === true || elem.getAttribute("classid") !== match);
++			}
++		}
++
++		return true;
++	}
++});
++
++jQuery.fn.extend({
++	data: function( key, value ) {
++		var data = null;
++
++		if ( typeof key === "undefined" ) {
++			if ( this.length ) {
++				data = jQuery.data( this[0] );
++
++				if ( this[0].nodeType === 1 ) {
++			    var attr = this[0].attributes, name;
++					for ( var i = 0, l = attr.length; i < l; i++ ) {
++						name = attr[i].name;
++
++						if ( name.indexOf( "data-" ) === 0 ) {
++							name = jQuery.camelCase( name.substring(5) );
++
++							dataAttr( this[0], name, data[ name ] );
++						}
++					}
++				}
++			}
++
++			return data;
++
++		} else if ( typeof key === "object" ) {
++			return this.each(function() {
++				jQuery.data( this, key );
++			});
++		}
++
++		var parts = key.split(".");
++		parts[1] = parts[1] ? "." + parts[1] : "";
++
++		if ( value === undefined ) {
++			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
++
++			// Try to fetch any internally stored data first
++			if ( data === undefined && this.length ) {
++				data = jQuery.data( this[0], key );
++				data = dataAttr( this[0], key, data );
++			}
++
++			return data === undefined && parts[1] ?
++				this.data( parts[0] ) :
++				data;
++
++		} else {
++			return this.each(function() {
++				var $this = jQuery( this ),
++					args = [ parts[0], value ];
++
++				$this.triggerHandler( "setData" + parts[1] + "!", args );
++				jQuery.data( this, key, value );
++				$this.triggerHandler( "changeData" + parts[1] + "!", args );
++			});
++		}
++	},
++
++	removeData: function( key ) {
++		return this.each(function() {
++			jQuery.removeData( this, key );
++		});
++	}
++});
++
++function dataAttr( elem, key, data ) {
++	// If nothing was found internally, try to fetch any
++	// data from the HTML5 data-* attribute
++	if ( data === undefined && elem.nodeType === 1 ) {
++		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
++
++		data = elem.getAttribute( name );
++
++		if ( typeof data === "string" ) {
++			try {
++				data = data === "true" ? true :
++				data === "false" ? false :
++				data === "null" ? null :
++				!jQuery.isNaN( data ) ? parseFloat( data ) :
++					rbrace.test( data ) ? jQuery.parseJSON( data ) :
++					data;
++			} catch( e ) {}
++
++			// Make sure we set the data so it isn't changed later
++			jQuery.data( elem, key, data );
++
++		} else {
++			data = undefined;
++		}
++	}
++
++	return data;
++}
++
++// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
++// property to be considered empty objects; this property always exists in
++// order to make sure JSON.stringify does not expose internal metadata
++function isEmptyDataObject( obj ) {
++	for ( var name in obj ) {
++		if ( name !== "toJSON" ) {
++			return false;
++		}
++	}
++
++	return true;
++}
++
++
++
++
++function handleQueueMarkDefer( elem, type, src ) {
++	var deferDataKey = type + "defer",
++		queueDataKey = type + "queue",
++		markDataKey = type + "mark",
++		defer = jQuery.data( elem, deferDataKey, undefined, true );
++	if ( defer &&
++		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
++		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
++		// Give room for hard-coded callbacks to fire first
++		// and eventually mark/queue something else on the element
++		setTimeout( function() {
++			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
++				!jQuery.data( elem, markDataKey, undefined, true ) ) {
++				jQuery.removeData( elem, deferDataKey, true );
++				defer.resolve();
++			}
++		}, 0 );
++	}
++}
++
++jQuery.extend({
++
++	_mark: function( elem, type ) {
++		if ( elem ) {
++			type = (type || "fx") + "mark";
++			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
++		}
++	},
++
++	_unmark: function( force, elem, type ) {
++		if ( force !== true ) {
++			type = elem;
++			elem = force;
++			force = false;
++		}
++		if ( elem ) {
++			type = type || "fx";
++			var key = type + "mark",
++				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
++			if ( count ) {
++				jQuery.data( elem, key, count, true );
++			} else {
++				jQuery.removeData( elem, key, true );
++				handleQueueMarkDefer( elem, type, "mark" );
++			}
++		}
++	},
++
++	queue: function( elem, type, data ) {
++		if ( elem ) {
++			type = (type || "fx") + "queue";
++			var q = jQuery.data( elem, type, undefined, true );
++			// Speed up dequeue by getting out quickly if this is just a lookup
++			if ( data ) {
++				if ( !q || jQuery.isArray(data) ) {
++					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
++				} else {
++					q.push( data );
++				}
++			}
++			return q || [];
++		}
++	},
++
++	dequeue: function( elem, type ) {
++		type = type || "fx";
++
++		var queue = jQuery.queue( elem, type ),
++			fn = queue.shift(),
++			defer;
++
++		// If the fx queue is dequeued, always remove the progress sentinel
++		if ( fn === "inprogress" ) {
++			fn = queue.shift();
++		}
++
++		if ( fn ) {
++			// Add a progress sentinel to prevent the fx queue from being
++			// automatically dequeued
++			if ( type === "fx" ) {
++				queue.unshift("inprogress");
++			}
++
++			fn.call(elem, function() {
++				jQuery.dequeue(elem, type);
++			});
++		}
++
++		if ( !queue.length ) {
++			jQuery.removeData( elem, type + "queue", true );
++			handleQueueMarkDefer( elem, type, "queue" );
++		}
++	}
++});
++
++jQuery.fn.extend({
++	queue: function( type, data ) {
++		if ( typeof type !== "string" ) {
++			data = type;
++			type = "fx";
++		}
++
++		if ( data === undefined ) {
++			return jQuery.queue( this[0], type );
++		}
++		return this.each(function() {
++			var queue = jQuery.queue( this, type, data );
++
++			if ( type === "fx" && queue[0] !== "inprogress" ) {
++				jQuery.dequeue( this, type );
++			}
++		});
++	},
++	dequeue: function( type ) {
++		return this.each(function() {
++			jQuery.dequeue( this, type );
++		});
++	},
++	// Based off of the plugin by Clint Helfers, with permission.
++	// http://blindsignals.com/index.php/2009/07/jquery-delay/
++	delay: function( time, type ) {
++		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
++		type = type || "fx";
++
++		return this.queue( type, function() {
++			var elem = this;
++			setTimeout(function() {
++				jQuery.dequeue( elem, type );
++			}, time );
++		});
++	},
++	clearQueue: function( type ) {
++		return this.queue( type || "fx", [] );
++	},
++	// Get a promise resolved when queues of a certain type
++	// are emptied (fx is the type by default)
++	promise: function( type, object ) {
++		if ( typeof type !== "string" ) {
++			object = type;
++			type = undefined;
++		}
++		type = type || "fx";
++		var defer = jQuery.Deferred(),
++			elements = this,
++			i = elements.length,
++			count = 1,
++			deferDataKey = type + "defer",
++			queueDataKey = type + "queue",
++			markDataKey = type + "mark",
++			tmp;
++		function resolve() {
++			if ( !( --count ) ) {
++				defer.resolveWith( elements, [ elements ] );
++			}
++		}
++		while( i-- ) {
++			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
++					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
++						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
++					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
++				count++;
++				tmp.done( resolve );
++			}
++		}
++		resolve();
++		return defer.promise();
++	}
++});
++
++
++
++
++var rclass = /[\n\t\r]/g,
++	rspace = /\s+/,
++	rreturn = /\r/g,
++	rtype = /^(?:button|input)$/i,
++	rfocusable = /^(?:button|input|object|select|textarea)$/i,
++	rclickable = /^a(?:rea)?$/i,
++	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
++	rinvalidChar = /\:|^on/,
++	formHook, boolHook;
++
++jQuery.fn.extend({
++	attr: function( name, value ) {
++		return jQuery.access( this, name, value, true, jQuery.attr );
++	},
++
++	removeAttr: function( name ) {
++		return this.each(function() {
++			jQuery.removeAttr( this, name );
++		});
++	},
++	
++	prop: function( name, value ) {
++		return jQuery.access( this, name, value, true, jQuery.prop );
++	},
++	
++	removeProp: function( name ) {
++		name = jQuery.propFix[ name ] || name;
++		return this.each(function() {
++			// try/catch handles cases where IE balks (such as removing a property on window)
++			try {
++				this[ name ] = undefined;
++				delete this[ name ];
++			} catch( e ) {}
++		});
++	},
++
++	addClass: function( value ) {
++		var classNames, i, l, elem,
++			setClass, c, cl;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).addClass( value.call(this, j, this.className) );
++			});
++		}
++
++		if ( value && typeof value === "string" ) {
++			classNames = value.split( rspace );
++
++			for ( i = 0, l = this.length; i < l; i++ ) {
++				elem = this[ i ];
++
++				if ( elem.nodeType === 1 ) {
++					if ( !elem.className && classNames.length === 1 ) {
++						elem.className = value;
++
++					} else {
++						setClass = " " + elem.className + " ";
++
++						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
++							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
++								setClass += classNames[ c ] + " ";
++							}
++						}
++						elem.className = jQuery.trim( setClass );
++					}
++				}
++			}
++		}
++
++		return this;
++	},
++
++	removeClass: function( value ) {
++		var classNames, i, l, elem, className, c, cl;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).removeClass( value.call(this, j, this.className) );
++			});
++		}
++
++		if ( (value && typeof value === "string") || value === undefined ) {
++			classNames = (value || "").split( rspace );
++
++			for ( i = 0, l = this.length; i < l; i++ ) {
++				elem = this[ i ];
++
++				if ( elem.nodeType === 1 && elem.className ) {
++					if ( value ) {
++						className = (" " + elem.className + " ").replace( rclass, " " );
++						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
++							className = className.replace(" " + classNames[ c ] + " ", " ");
++						}
++						elem.className = jQuery.trim( className );
++
++					} else {
++						elem.className = "";
++					}
++				}
++			}
++		}
++
++		return this;
++	},
++
++	toggleClass: function( value, stateVal ) {
++		var type = typeof value,
++			isBool = typeof stateVal === "boolean";
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( i ) {
++				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
++			});
++		}
++
++		return this.each(function() {
++			if ( type === "string" ) {
++				// toggle individual class names
++				var className,
++					i = 0,
++					self = jQuery( this ),
++					state = stateVal,
++					classNames = value.split( rspace );
++
++				while ( (className = classNames[ i++ ]) ) {
++					// check each className given, space seperated list
++					state = isBool ? state : !self.hasClass( className );
++					self[ state ? "addClass" : "removeClass" ]( className );
++				}
++
++			} else if ( type === "undefined" || type === "boolean" ) {
++				if ( this.className ) {
++					// store className if set
++					jQuery._data( this, "__className__", this.className );
++				}
++
++				// toggle whole className
++				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
++			}
++		});
++	},
++
++	hasClass: function( selector ) {
++		var className = " " + selector + " ";
++		for ( var i = 0, l = this.length; i < l; i++ ) {
++			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
++				return true;
++			}
++		}
++
++		return false;
++	},
++
++	val: function( value ) {
++		var hooks, ret,
++			elem = this[0];
++		
++		if ( !arguments.length ) {
++			if ( elem ) {
++				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
++
++				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
++					return ret;
++				}
++
++				ret = elem.value;
++
++				return typeof ret === "string" ? 
++					// handle most common string cases
++					ret.replace(rreturn, "") : 
++					// handle cases where value is null/undef or number
++					ret == null ? "" : ret;
++			}
++
++			return undefined;
++		}
++
++		var isFunction = jQuery.isFunction( value );
++
++		return this.each(function( i ) {
++			var self = jQuery(this), val;
++
++			if ( this.nodeType !== 1 ) {
++				return;
++			}
++
++			if ( isFunction ) {
++				val = value.call( this, i, self.val() );
++			} else {
++				val = value;
++			}
++
++			// Treat null/undefined as ""; convert numbers to string
++			if ( val == null ) {
++				val = "";
++			} else if ( typeof val === "number" ) {
++				val += "";
++			} else if ( jQuery.isArray( val ) ) {
++				val = jQuery.map(val, function ( value ) {
++					return value == null ? "" : value + "";
++				});
++			}
++
++			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
++
++			// If set returns undefined, fall back to normal setting
++			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
++				this.value = val;
++			}
++		});
++	}
++});
++
++jQuery.extend({
++	valHooks: {
++		option: {
++			get: function( elem ) {
++				// attributes.value is undefined in Blackberry 4.7 but
++				// uses .value. See #6932
++				var val = elem.attributes.value;
++				return !val || val.specified ? elem.value : elem.text;
++			}
++		},
++		select: {
++			get: function( elem ) {
++				var value,
++					index = elem.selectedIndex,
++					values = [],
++					options = elem.options,
++					one = elem.type === "select-one";
++
++				// Nothing was selected
++				if ( index < 0 ) {
++					return null;
++				}
++
++				// Loop through all the selected options
++				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
++					var option = options[ i ];
++
++					// Don't return options that are disabled or in a disabled optgroup
++					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
++							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
++
++						// Get the specific value for the option
++						value = jQuery( option ).val();
++
++						// We don't need an array for one selects
++						if ( one ) {
++							return value;
++						}
++
++						// Multi-Selects return an array
++						values.push( value );
++					}
++				}
++
++				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
++				if ( one && !values.length && options.length ) {
++					return jQuery( options[ index ] ).val();
++				}
++
++				return values;
++			},
++
++			set: function( elem, value ) {
++				var values = jQuery.makeArray( value );
++
++				jQuery(elem).find("option").each(function() {
++					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
++				});
++
++				if ( !values.length ) {
++					elem.selectedIndex = -1;
++				}
++				return values;
++			}
++		}
++	},
++
++	attrFn: {
++		val: true,
++		css: true,
++		html: true,
++		text: true,
++		data: true,
++		width: true,
++		height: true,
++		offset: true
++	},
++	
++	attrFix: {
++		// Always normalize to ensure hook usage
++		tabindex: "tabIndex"
++	},
++	
++	attr: function( elem, name, value, pass ) {
++		var nType = elem.nodeType;
++		
++		// don't get/set attributes on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return undefined;
++		}
++
++		if ( pass && name in jQuery.attrFn ) {
++			return jQuery( elem )[ name ]( value );
++		}
++
++		// Fallback to prop when attributes are not supported
++		if ( !("getAttribute" in elem) ) {
++			return jQuery.prop( elem, name, value );
++		}
++
++		var ret, hooks,
++			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		// Normalize the name if needed
++		if ( notxml ) {
++			name = jQuery.attrFix[ name ] || name;
++
++			hooks = jQuery.attrHooks[ name ];
++
++			if ( !hooks ) {
++				// Use boolHook for boolean attributes
++				if ( rboolean.test( name ) ) {
++
++					hooks = boolHook;
++
++				// Use formHook for forms and if the name contains certain characters
++				} else if ( formHook && name !== "className" &&
++					(jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
++
++					hooks = formHook;
++				}
++			}
++		}
++
++		if ( value !== undefined ) {
++
++			if ( value === null ) {
++				jQuery.removeAttr( elem, name );
++				return undefined;
++
++			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				elem.setAttribute( name, "" + value );
++				return value;
++			}
++
++		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
++			return ret;
++
++		} else {
++
++			ret = elem.getAttribute( name );
++
++			// Non-existent attributes return null, we normalize to undefined
++			return ret === null ?
++				undefined :
++				ret;
++		}
++	},
++
++	removeAttr: function( elem, name ) {
++		var propName;
++		if ( elem.nodeType === 1 ) {
++			name = jQuery.attrFix[ name ] || name;
++		
++			if ( jQuery.support.getSetAttribute ) {
++				// Use removeAttribute in browsers that support it
++				elem.removeAttribute( name );
++			} else {
++				jQuery.attr( elem, name, "" );
++				elem.removeAttributeNode( elem.getAttributeNode( name ) );
++			}
++
++			// Set corresponding property to false for boolean attributes
++			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
++				elem[ propName ] = false;
++			}
++		}
++	},
++
++	attrHooks: {
++		type: {
++			set: function( elem, value ) {
++				// We can't allow the type property to be changed (since it causes problems in IE)
++				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
++					jQuery.error( "type property can't be changed" );
++				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
++					// Setting the type on a radio button after the value resets the value in IE6-9
++					// Reset value to it's default in case type is set after value
++					// This is for element creation
++					var val = elem.value;
++					elem.setAttribute( "type", value );
++					if ( val ) {
++						elem.value = val;
++					}
++					return value;
++				}
++			}
++		},
++		tabIndex: {
++			get: function( elem ) {
++				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
++				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
++				var attributeNode = elem.getAttributeNode("tabIndex");
++
++				return attributeNode && attributeNode.specified ?
++					parseInt( attributeNode.value, 10 ) :
++					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
++						0 :
++						undefined;
++			}
++		},
++		// Use the value property for back compat
++		// Use the formHook for button elements in IE6/7 (#1954)
++		value: {
++			get: function( elem, name ) {
++				if ( formHook && jQuery.nodeName( elem, "button" ) ) {
++					return formHook.get( elem, name );
++				}
++				return name in elem ?
++					elem.value :
++					null;
++			},
++			set: function( elem, value, name ) {
++				if ( formHook && jQuery.nodeName( elem, "button" ) ) {
++					return formHook.set( elem, value, name );
++				}
++				// Does not return so that setAttribute is also used
++				elem.value = value;
++			}
++		}
++	},
++
++	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( elem, name, value ) {
++		var nType = elem.nodeType;
++
++		// don't get/set properties on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return undefined;
++		}
++
++		var ret, hooks,
++			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		if ( notxml ) {
++			// Fix name and attach hooks
++			name = jQuery.propFix[ name ] || name;
++			hooks = jQuery.propHooks[ name ];
++		}
++
++		if ( value !== undefined ) {
++			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				return (elem[ name ] = value);
++			}
++
++		} else {
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				return elem[ name ];
++			}
++		}
++	},
++	
++	propHooks: {}
++});
++
++// Hook for boolean attributes
++boolHook = {
++	get: function( elem, name ) {
++		// Align boolean attributes with corresponding properties
++		return jQuery.prop( elem, name ) ?
++			name.toLowerCase() :
++			undefined;
++	},
++	set: function( elem, value, name ) {
++		var propName;
++		if ( value === false ) {
++			// Remove boolean attributes when set to false
++			jQuery.removeAttr( elem, name );
++		} else {
++			// value is true since we know at this point it's type boolean and not false
++			// Set boolean attributes to the same name and set the DOM property
++			propName = jQuery.propFix[ name ] || name;
++			if ( propName in elem ) {
++				// Only set the IDL specifically if it already exists on the element
++				elem[ propName ] = true;
++			}
++
++			elem.setAttribute( name, name.toLowerCase() );
++		}
++		return name;
++	}
++};
++
++// IE6/7 do not support getting/setting some attributes with get/setAttribute
++if ( !jQuery.support.getSetAttribute ) {
++
++	// propFix is more comprehensive and contains all fixes
++	jQuery.attrFix = jQuery.propFix;
++	
++	// Use this for any attribute on a form in IE6/7
++	formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = {
++		get: function( elem, name ) {
++			var ret;
++			ret = elem.getAttributeNode( name );
++			// Return undefined if nodeValue is empty string
++			return ret && ret.nodeValue !== "" ?
++				ret.nodeValue :
++				undefined;
++		},
++		set: function( elem, value, name ) {
++			// Check form objects in IE (multiple bugs related)
++			// Only use nodeValue if the attribute node exists on the form
++			var ret = elem.getAttributeNode( name );
++			if ( ret ) {
++				ret.nodeValue = value;
++				return value;
++			}
++		}
++	};
++
++	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
++	// This is for removals
++	jQuery.each([ "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			set: function( elem, value ) {
++				if ( value === "" ) {
++					elem.setAttribute( name, "auto" );
++					return value;
++				}
++			}
++		});
++	});
++}
++
++
++// Some attributes require a special call on IE
++if ( !jQuery.support.hrefNormalized ) {
++	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			get: function( elem ) {
++				var ret = elem.getAttribute( name, 2 );
++				return ret === null ? undefined : ret;
++			}
++		});
++	});
++}
++
++if ( !jQuery.support.style ) {
++	jQuery.attrHooks.style = {
++		get: function( elem ) {
++			// Return undefined in the case of empty string
++			// Normalize to lowercase since IE uppercases css property names
++			return elem.style.cssText.toLowerCase() || undefined;
++		},
++		set: function( elem, value ) {
++			return (elem.style.cssText = "" + value);
++		}
++	};
++}
++
++// Safari mis-reports the default selected property of an option
++// Accessing the parent's selectedIndex property fixes it
++if ( !jQuery.support.optSelected ) {
++	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
++		get: function( elem ) {
++			var parent = elem.parentNode;
++
++			if ( parent ) {
++				parent.selectedIndex;
++
++				// Make sure that it also works with optgroups, see #5701
++				if ( parent.parentNode ) {
++					parent.parentNode.selectedIndex;
++				}
++			}
++		}
++	});
++}
++
++// Radios and checkboxes getter/setter
++if ( !jQuery.support.checkOn ) {
++	jQuery.each([ "radio", "checkbox" ], function() {
++		jQuery.valHooks[ this ] = {
++			get: function( elem ) {
++				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
++				return elem.getAttribute("value") === null ? "on" : elem.value;
++			}
++		};
++	});
++}
++jQuery.each([ "radio", "checkbox" ], function() {
++	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
++		set: function( elem, value ) {
++			if ( jQuery.isArray( value ) ) {
++				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
++			}
++		}
++	});
++});
++
++
++
++
++var rnamespaces = /\.(.*)$/,
++	rformElems = /^(?:textarea|input|select)$/i,
++	rperiod = /\./g,
++	rspaces = / /g,
++	rescape = /[^\w\s.|`]/g,
++	fcleanup = function( nm ) {
++		return nm.replace(rescape, "\\$&");
++	};
++
++/*
++ * A number of helper functions used for managing events.
++ * Many of the ideas behind this code originated from
++ * Dean Edwards' addEvent library.
++ */
++jQuery.event = {
++
++	// Bind an event to an element
++	// Original by Dean Edwards
++	add: function( elem, types, handler, data ) {
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		if ( handler === false ) {
++			handler = returnFalse;
++		} else if ( !handler ) {
++			// Fixes bug #7229. Fix recommended by jdalton
++			return;
++		}
++
++		var handleObjIn, handleObj;
++
++		if ( handler.handler ) {
++			handleObjIn = handler;
++			handler = handleObjIn.handler;
++		}
++
++		// Make sure that the function being executed has a unique ID
++		if ( !handler.guid ) {
++			handler.guid = jQuery.guid++;
++		}
++
++		// Init the element's event structure
++		var elemData = jQuery._data( elem );
++
++		// If no elemData is found then we must be trying to bind to one of the
++		// banned noData elements
++		if ( !elemData ) {
++			return;
++		}
++
++		var events = elemData.events,
++			eventHandle = elemData.handle;
++
++		if ( !events ) {
++			elemData.events = events = {};
++		}
++
++		if ( !eventHandle ) {
++			elemData.handle = eventHandle = function( e ) {
++				// Discard the second event of a jQuery.event.trigger() and
++				// when an event is called after a page has unloaded
++				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
++					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
++					undefined;
++			};
++		}
++
++		// Add elem as a property of the handle function
++		// This is to prevent a memory leak with non-native events in IE.
++		eventHandle.elem = elem;
++
++		// Handle multiple events separated by a space
++		// jQuery(...).bind("mouseover mouseout", fn);
++		types = types.split(" ");
++
++		var type, i = 0, namespaces;
++
++		while ( (type = types[ i++ ]) ) {
++			handleObj = handleObjIn ?
++				jQuery.extend({}, handleObjIn) :
++				{ handler: handler, data: data };
++
++			// Namespaced event handlers
++			if ( type.indexOf(".") > -1 ) {
++				namespaces = type.split(".");
++				type = namespaces.shift();
++				handleObj.namespace = namespaces.slice(0).sort().join(".");
++
++			} else {
++				namespaces = [];
++				handleObj.namespace = "";
++			}
++
++			handleObj.type = type;
++			if ( !handleObj.guid ) {
++				handleObj.guid = handler.guid;
++			}
++
++			// Get the current list of functions bound to this event
++			var handlers = events[ type ],
++				special = jQuery.event.special[ type ] || {};
++
++			// Init the event handler queue
++			if ( !handlers ) {
++				handlers = events[ type ] = [];
++
++				// Check for a special event handler
++				// Only use addEventListener/attachEvent if the special
++				// events handler returns false
++				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
++					// Bind the global event handler to the element
++					if ( elem.addEventListener ) {
++						elem.addEventListener( type, eventHandle, false );
++
++					} else if ( elem.attachEvent ) {
++						elem.attachEvent( "on" + type, eventHandle );
++					}
++				}
++			}
++
++			if ( special.add ) {
++				special.add.call( elem, handleObj );
++
++				if ( !handleObj.handler.guid ) {
++					handleObj.handler.guid = handler.guid;
++				}
++			}
++
++			// Add the function to the element's handler list
++			handlers.push( handleObj );
++
++			// Keep track of which events have been used, for event optimization
++			jQuery.event.global[ type ] = true;
++		}
++
++		// Nullify elem to prevent memory leaks in IE
++		elem = null;
++	},
++
++	global: {},
++
++	// Detach an event or set of events from an element
++	remove: function( elem, types, handler, pos ) {
++		// don't do events on text and comment nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		if ( handler === false ) {
++			handler = returnFalse;
++		}
++
++		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
++			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
++			events = elemData && elemData.events;
++
++		if ( !elemData || !events ) {
++			return;
++		}
++
++		// types is actually an event object here
++		if ( types && types.type ) {
++			handler = types.handler;
++			types = types.type;
++		}
++
++		// Unbind all events for the element
++		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
++			types = types || "";
++
++			for ( type in events ) {
++				jQuery.event.remove( elem, type + types );
++			}
++
++			return;
++		}
++
++		// Handle multiple events separated by a space
++		// jQuery(...).unbind("mouseover mouseout", fn);
++		types = types.split(" ");
++
++		while ( (type = types[ i++ ]) ) {
++			origType = type;
++			handleObj = null;
++			all = type.indexOf(".") < 0;
++			namespaces = [];
++
++			if ( !all ) {
++				// Namespaced event handlers
++				namespaces = type.split(".");
++				type = namespaces.shift();
++
++				namespace = new RegExp("(^|\\.)" +
++					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
++			}
++
++			eventType = events[ type ];
++
++			if ( !eventType ) {
++				continue;
++			}
++
++			if ( !handler ) {
++				for ( j = 0; j < eventType.length; j++ ) {
++					handleObj = eventType[ j ];
++
++					if ( all || namespace.test( handleObj.namespace ) ) {
++						jQuery.event.remove( elem, origType, handleObj.handler, j );
++						eventType.splice( j--, 1 );
++					}
++				}
++
++				continue;
++			}
++
++			special = jQuery.event.special[ type ] || {};
++
++			for ( j = pos || 0; j < eventType.length; j++ ) {
++				handleObj = eventType[ j ];
++
++				if ( handler.guid === handleObj.guid ) {
++					// remove the given handler for the given type
++					if ( all || namespace.test( handleObj.namespace ) ) {
++						if ( pos == null ) {
++							eventType.splice( j--, 1 );
++						}
++
++						if ( special.remove ) {
++							special.remove.call( elem, handleObj );
++						}
++					}
++
++					if ( pos != null ) {
++						break;
++					}
++				}
++			}
++
++			// remove generic event handler if no more handlers exist
++			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
++				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
++					jQuery.removeEvent( elem, type, elemData.handle );
++				}
++
++				ret = null;
++				delete events[ type ];
++			}
++		}
++
++		// Remove the expando if it's no longer used
++		if ( jQuery.isEmptyObject( events ) ) {
++			var handle = elemData.handle;
++			if ( handle ) {
++				handle.elem = null;
++			}
++
++			delete elemData.events;
++			delete elemData.handle;
++
++			if ( jQuery.isEmptyObject( elemData ) ) {
++				jQuery.removeData( elem, undefined, true );
++			}
++		}
++	},
++	
++	// Events that are safe to short-circuit if no handlers are attached.
++	// Native DOM events should not be added, they may have inline handlers.
++	customEvent: {
++		"getData": true,
++		"setData": true,
++		"changeData": true
++	},
++
++	trigger: function( event, data, elem, onlyHandlers ) {
++		// Event object or event type
++		var type = event.type || event,
++			namespaces = [],
++			exclusive;
++
++		if ( type.indexOf("!") >= 0 ) {
++			// Exclusive events trigger only for the exact event (no namespaces)
++			type = type.slice(0, -1);
++			exclusive = true;
++		}
++
++		if ( type.indexOf(".") >= 0 ) {
++			// Namespaced trigger; create a regexp to match event type in handle()
++			namespaces = type.split(".");
++			type = namespaces.shift();
++			namespaces.sort();
++		}
++
++		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
++			// No jQuery handlers for this event type, and it can't have inline handlers
++			return;
++		}
++
++		// Caller can pass in an Event, Object, or just an event type string
++		event = typeof event === "object" ?
++			// jQuery.Event object
++			event[ jQuery.expando ] ? event :
++			// Object literal
++			new jQuery.Event( type, event ) :
++			// Just the event type (string)
++			new jQuery.Event( type );
++
++		event.type = type;
++		event.exclusive = exclusive;
++		event.namespace = namespaces.join(".");
++		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
++		
++		// triggerHandler() and global events don't bubble or run the default action
++		if ( onlyHandlers || !elem ) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++
++		// Handle a global trigger
++		if ( !elem ) {
++			// TODO: Stop taunting the data cache; remove global events and always attach to document
++			jQuery.each( jQuery.cache, function() {
++				// internalKey variable is just used to make it easier to find
++				// and potentially change this stuff later; currently it just
++				// points to jQuery.expando
++				var internalKey = jQuery.expando,
++					internalCache = this[ internalKey ];
++				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
++					jQuery.event.trigger( event, data, internalCache.handle.elem );
++				}
++			});
++			return;
++		}
++
++		// Don't do events on text and comment nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		// Clean up the event in case it is being reused
++		event.result = undefined;
++		event.target = elem;
++
++		// Clone any incoming data and prepend the event, creating the handler arg list
++		data = data != null ? jQuery.makeArray( data ) : [];
++		data.unshift( event );
++
++		var cur = elem,
++			// IE doesn't like method names with a colon (#3533, #8272)
++			ontype = type.indexOf(":") < 0 ? "on" + type : "";
++
++		// Fire event on the current element, then bubble up the DOM tree
++		do {
++			var handle = jQuery._data( cur, "handle" );
++
++			event.currentTarget = cur;
++			if ( handle ) {
++				handle.apply( cur, data );
++			}
++
++			// Trigger an inline bound script
++			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
++				event.result = false;
++				event.preventDefault();
++			}
++
++			// Bubble up to document, then to window
++			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
++		} while ( cur && !event.isPropagationStopped() );
++
++		// If nobody prevented the default action, do it now
++		if ( !event.isDefaultPrevented() ) {
++			var old,
++				special = jQuery.event.special[ type ] || {};
++
++			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
++				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
++
++				// Call a native DOM method on the target with the same name name as the event.
++				// Can't use an .isFunction)() check here because IE6/7 fails that test.
++				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
++				try {
++					if ( ontype && elem[ type ] ) {
++						// Don't re-trigger an onFOO event when we call its FOO() method
++						old = elem[ ontype ];
++
++						if ( old ) {
++							elem[ ontype ] = null;
++						}
++
++						jQuery.event.triggered = type;
++						elem[ type ]();
++					}
++				} catch ( ieError ) {}
++
++				if ( old ) {
++					elem[ ontype ] = old;
++				}
++
++				jQuery.event.triggered = undefined;
++			}
++		}
++		
++		return event.result;
++	},
++
++	handle: function( event ) {
++		event = jQuery.event.fix( event || window.event );
++		// Snapshot the handlers list since a called handler may add/remove events.
++		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
++			run_all = !event.exclusive && !event.namespace,
++			args = Array.prototype.slice.call( arguments, 0 );
++
++		// Use the fix-ed Event rather than the (read-only) native event
++		args[0] = event;
++		event.currentTarget = this;
++
++		for ( var j = 0, l = handlers.length; j < l; j++ ) {
++			var handleObj = handlers[ j ];
++
++			// Triggered event must 1) be non-exclusive and have no namespace, or
++			// 2) have namespace(s) a subset or equal to those in the bound event.
++			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
++				// Pass in a reference to the handler function itself
++				// So that we can later remove it
++				event.handler = handleObj.handler;
++				event.data = handleObj.data;
++				event.handleObj = handleObj;
++
++				var ret = handleObj.handler.apply( this, args );
++
++				if ( ret !== undefined ) {
++					event.result = ret;
++					if ( ret === false ) {
++						event.preventDefault();
++						event.stopPropagation();
++					}
++				}
++
++				if ( event.isImmediatePropagationStopped() ) {
++					break;
++				}
++			}
++		}
++		return event.result;
++	},
++
++	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
++
++	fix: function( event ) {
++		if ( event[ jQuery.expando ] ) {
++			return event;
++		}
++
++		// store a copy of the original event object
++		// and "clone" to set read-only properties
++		var originalEvent = event;
++		event = jQuery.Event( originalEvent );
++
++		for ( var i = this.props.length, prop; i; ) {
++			prop = this.props[ --i ];
++			event[ prop ] = originalEvent[ prop ];
++		}
++
++		// Fix target property, if necessary
++		if ( !event.target ) {
++			// Fixes #1925 where srcElement might not be defined either
++			event.target = event.srcElement || document;
++		}
++
++		// check if target is a textnode (safari)
++		if ( event.target.nodeType === 3 ) {
++			event.target = event.target.parentNode;
++		}
++
++		// Add relatedTarget, if necessary
++		if ( !event.relatedTarget && event.fromElement ) {
++			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
++		}
++
++		// Calculate pageX/Y if missing and clientX/Y available
++		if ( event.pageX == null && event.clientX != null ) {
++			var eventDocument = event.target.ownerDocument || document,
++				doc = eventDocument.documentElement,
++				body = eventDocument.body;
++
++			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
++			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
++		}
++
++		// Add which for key events
++		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
++			event.which = event.charCode != null ? event.charCode : event.keyCode;
++		}
++
++		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
++		if ( !event.metaKey && event.ctrlKey ) {
++			event.metaKey = event.ctrlKey;
++		}
++
++		// Add which for click: 1 === left; 2 === middle; 3 === right
++		// Note: button is not normalized, so don't use it
++		if ( !event.which && event.button !== undefined ) {
++			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
++		}
++
++		return event;
++	},
++
++	// Deprecated, use jQuery.guid instead
++	guid: 1E8,
++
++	// Deprecated, use jQuery.proxy instead
++	proxy: jQuery.proxy,
++
++	special: {
++		ready: {
++			// Make sure the ready event is setup
++			setup: jQuery.bindReady,
++			teardown: jQuery.noop
++		},
++
++		live: {
++			add: function( handleObj ) {
++				jQuery.event.add( this,
++					liveConvert( handleObj.origType, handleObj.selector ),
++					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
++			},
++
++			remove: function( handleObj ) {
++				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
++			}
++		},
++
++		beforeunload: {
++			setup: function( data, namespaces, eventHandle ) {
++				// We only want to do this special case on windows
++				if ( jQuery.isWindow( this ) ) {
++					this.onbeforeunload = eventHandle;
++				}
++			},
++
++			teardown: function( namespaces, eventHandle ) {
++				if ( this.onbeforeunload === eventHandle ) {
++					this.onbeforeunload = null;
++				}
++			}
++		}
++	}
++};
++
++jQuery.removeEvent = document.removeEventListener ?
++	function( elem, type, handle ) {
++		if ( elem.removeEventListener ) {
++			elem.removeEventListener( type, handle, false );
++		}
++	} :
++	function( elem, type, handle ) {
++		if ( elem.detachEvent ) {
++			elem.detachEvent( "on" + type, handle );
++		}
++	};
++
++jQuery.Event = function( src, props ) {
++	// Allow instantiation without the 'new' keyword
++	if ( !this.preventDefault ) {
++		return new jQuery.Event( src, props );
++	}
++
++	// Event object
++	if ( src && src.type ) {
++		this.originalEvent = src;
++		this.type = src.type;
++
++		// Events bubbling up the document may have been marked as prevented
++		// by a handler lower down the tree; reflect the correct value.
++		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
++			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
++
++	// Event type
++	} else {
++		this.type = src;
++	}
++
++	// Put explicitly provided properties onto the event object
++	if ( props ) {
++		jQuery.extend( this, props );
++	}
++
++	// timeStamp is buggy for some events on Firefox(#3843)
++	// So we won't rely on the native value
++	this.timeStamp = jQuery.now();
++
++	// Mark it as fixed
++	this[ jQuery.expando ] = true;
++};
++
++function returnFalse() {
++	return false;
++}
++function returnTrue() {
++	return true;
++}
++
++// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
++// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
++jQuery.Event.prototype = {
++	preventDefault: function() {
++		this.isDefaultPrevented = returnTrue;
++
++		var e = this.originalEvent;
++		if ( !e ) {
++			return;
++		}
++
++		// if preventDefault exists run it on the original event
++		if ( e.preventDefault ) {
++			e.preventDefault();
++
++		// otherwise set the returnValue property of the original event to false (IE)
++		} else {
++			e.returnValue = false;
++		}
++	},
++	stopPropagation: function() {
++		this.isPropagationStopped = returnTrue;
++
++		var e = this.originalEvent;
++		if ( !e ) {
++			return;
++		}
++		// if stopPropagation exists run it on the original event
++		if ( e.stopPropagation ) {
++			e.stopPropagation();
++		}
++		// otherwise set the cancelBubble property of the original event to true (IE)
++		e.cancelBubble = true;
++	},
++	stopImmediatePropagation: function() {
++		this.isImmediatePropagationStopped = returnTrue;
++		this.stopPropagation();
++	},
++	isDefaultPrevented: returnFalse,
++	isPropagationStopped: returnFalse,
++	isImmediatePropagationStopped: returnFalse
++};
++
++// Checks if an event happened on an element within another element
++// Used in jQuery.event.special.mouseenter and mouseleave handlers
++var withinElement = function( event ) {
++
++	// Check if mouse(over|out) are still within the same parent element
++	var related = event.relatedTarget,
++		inside = false,
++		eventType = event.type;
++
++	event.type = event.data;
++
++	if ( related !== this ) {
++
++		if ( related ) {
++			inside = jQuery.contains( this, related );
++		}
++
++		if ( !inside ) {
++
++			jQuery.event.handle.apply( this, arguments );
++
++			event.type = eventType;
++		}
++	}
++},
++
++// In case of event delegation, we only need to rename the event.type,
++// liveHandler will take care of the rest.
++delegate = function( event ) {
++	event.type = event.data;
++	jQuery.event.handle.apply( this, arguments );
++};
++
++// Create mouseenter and mouseleave events
++jQuery.each({
++	mouseenter: "mouseover",
++	mouseleave: "mouseout"
++}, function( orig, fix ) {
++	jQuery.event.special[ orig ] = {
++		setup: function( data ) {
++			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
++		},
++		teardown: function( data ) {
++			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
++		}
++	};
++});
++
++// submit delegation
++if ( !jQuery.support.submitBubbles ) {
++
++	jQuery.event.special.submit = {
++		setup: function( data, namespaces ) {
++			if ( !jQuery.nodeName( this, "form" ) ) {
++				jQuery.event.add(this, "click.specialSubmit", function( e ) {
++					var elem = e.target,
++						type = elem.type;
++
++					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
++						trigger( "submit", this, arguments );
++					}
++				});
++
++				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
++					var elem = e.target,
++						type = elem.type;
++
++					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
++						trigger( "submit", this, arguments );
++					}
++				});
++
++			} else {
++				return false;
++			}
++		},
++
++		teardown: function( namespaces ) {
++			jQuery.event.remove( this, ".specialSubmit" );
++		}
++	};
++
++}
++
++// change delegation, happens here so we have bind.
++if ( !jQuery.support.changeBubbles ) {
++
++	var changeFilters,
++
++	getVal = function( elem ) {
++		var type = elem.type, val = elem.value;
++
++		if ( type === "radio" || type === "checkbox" ) {
++			val = elem.checked;
++
++		} else if ( type === "select-multiple" ) {
++			val = elem.selectedIndex > -1 ?
++				jQuery.map( elem.options, function( elem ) {
++					return elem.selected;
++				}).join("-") :
++				"";
++
++		} else if ( jQuery.nodeName( elem, "select" ) ) {
++			val = elem.selectedIndex;
++		}
++
++		return val;
++	},
++
++	testChange = function testChange( e ) {
++		var elem = e.target, data, val;
++
++		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
++			return;
++		}
++
++		data = jQuery._data( elem, "_change_data" );
++		val = getVal(elem);
++
++		// the current data will be also retrieved by beforeactivate
++		if ( e.type !== "focusout" || elem.type !== "radio" ) {
++			jQuery._data( elem, "_change_data", val );
++		}
++
++		if ( data === undefined || val === data ) {
++			return;
++		}
++
++		if ( data != null || val ) {
++			e.type = "change";
++			e.liveFired = undefined;
++			jQuery.event.trigger( e, arguments[1], elem );
++		}
++	};
++
++	jQuery.event.special.change = {
++		filters: {
++			focusout: testChange,
++
++			beforedeactivate: testChange,
++
++			click: function( e ) {
++				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
++
++				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
++					testChange.call( this, e );
++				}
++			},
++
++			// Change has to be called before submit
++			// Keydown will be called before keypress, which is used in submit-event delegation
++			keydown: function( e ) {
++				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
++
++				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
++					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
++					type === "select-multiple" ) {
++					testChange.call( this, e );
++				}
++			},
++
++			// Beforeactivate happens also before the previous element is blurred
++			// with this event you can't trigger a change event, but you can store
++			// information
++			beforeactivate: function( e ) {
++				var elem = e.target;
++				jQuery._data( elem, "_change_data", getVal(elem) );
++			}
++		},
++
++		setup: function( data, namespaces ) {
++			if ( this.type === "file" ) {
++				return false;
++			}
++
++			for ( var type in changeFilters ) {
++				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
++			}
++
++			return rformElems.test( this.nodeName );
++		},
++
++		teardown: function( namespaces ) {
++			jQuery.event.remove( this, ".specialChange" );
++
++			return rformElems.test( this.nodeName );
++		}
++	};
++
++	changeFilters = jQuery.event.special.change.filters;
++
++	// Handle when the input is .focus()'d
++	changeFilters.focus = changeFilters.beforeactivate;
++}
++
++function trigger( type, elem, args ) {
++	// Piggyback on a donor event to simulate a different one.
++	// Fake originalEvent to avoid donor's stopPropagation, but if the
++	// simulated event prevents default then we do the same on the donor.
++	// Don't pass args or remember liveFired; they apply to the donor event.
++	var event = jQuery.extend( {}, args[ 0 ] );
++	event.type = type;
++	event.originalEvent = {};
++	event.liveFired = undefined;
++	jQuery.event.handle.call( elem, event );
++	if ( event.isDefaultPrevented() ) {
++		args[ 0 ].preventDefault();
++	}
++}
++
++// Create "bubbling" focus and blur events
++if ( !jQuery.support.focusinBubbles ) {
++	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
++
++		// Attach a single capturing handler while someone wants focusin/focusout
++		var attaches = 0;
++
++		jQuery.event.special[ fix ] = {
++			setup: function() {
++				if ( attaches++ === 0 ) {
++					document.addEventListener( orig, handler, true );
++				}
++			},
++			teardown: function() {
++				if ( --attaches === 0 ) {
++					document.removeEventListener( orig, handler, true );
++				}
++			}
++		};
++
++		function handler( donor ) {
++			// Donor event is always a native one; fix it and switch its type.
++			// Let focusin/out handler cancel the donor focus/blur event.
++			var e = jQuery.event.fix( donor );
++			e.type = fix;
++			e.originalEvent = {};
++			jQuery.event.trigger( e, null, e.target );
++			if ( e.isDefaultPrevented() ) {
++				donor.preventDefault();
++			}
++		}
++	});
++}
++
++jQuery.each(["bind", "one"], function( i, name ) {
++	jQuery.fn[ name ] = function( type, data, fn ) {
++		var handler;
++
++		// Handle object literals
++		if ( typeof type === "object" ) {
++			for ( var key in type ) {
++				this[ name ](key, data, type[key], fn);
++			}
++			return this;
++		}
++
++		if ( arguments.length === 2 || data === false ) {
++			fn = data;
++			data = undefined;
++		}
++
++		if ( name === "one" ) {
++			handler = function( event ) {
++				jQuery( this ).unbind( event, handler );
++				return fn.apply( this, arguments );
++			};
++			handler.guid = fn.guid || jQuery.guid++;
++		} else {
++			handler = fn;
++		}
++
++		if ( type === "unload" && name !== "one" ) {
++			this.one( type, data, fn );
++
++		} else {
++			for ( var i = 0, l = this.length; i < l; i++ ) {
++				jQuery.event.add( this[i], type, handler, data );
++			}
++		}
++
++		return this;
++	};
++});
++
++jQuery.fn.extend({
++	unbind: function( type, fn ) {
++		// Handle object literals
++		if ( typeof type === "object" && !type.preventDefault ) {
++			for ( var key in type ) {
++				this.unbind(key, type[key]);
++			}
++
++		} else {
++			for ( var i = 0, l = this.length; i < l; i++ ) {
++				jQuery.event.remove( this[i], type, fn );
++			}
++		}
++
++		return this;
++	},
++
++	delegate: function( selector, types, data, fn ) {
++		return this.live( types, data, fn, selector );
++	},
++
++	undelegate: function( selector, types, fn ) {
++		if ( arguments.length === 0 ) {
++			return this.unbind( "live" );
++
++		} else {
++			return this.die( types, null, fn, selector );
++		}
++	},
++
++	trigger: function( type, data ) {
++		return this.each(function() {
++			jQuery.event.trigger( type, data, this );
++		});
++	},
++
++	triggerHandler: function( type, data ) {
++		if ( this[0] ) {
++			return jQuery.event.trigger( type, data, this[0], true );
++		}
++	},
++
++	toggle: function( fn ) {
++		// Save reference to arguments for access in closure
++		var args = arguments,
++			guid = fn.guid || jQuery.guid++,
++			i = 0,
++			toggler = function( event ) {
++				// Figure out which function to execute
++				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
++				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
++
++				// Make sure that clicks stop
++				event.preventDefault();
++
++				// and execute the function
++				return args[ lastToggle ].apply( this, arguments ) || false;
++			};
++
++		// link all the functions, so any of them can unbind this click handler
++		toggler.guid = guid;
++		while ( i < args.length ) {
++			args[ i++ ].guid = guid;
++		}
++
++		return this.click( toggler );
++	},
++
++	hover: function( fnOver, fnOut ) {
++		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
++	}
++});
++
++var liveMap = {
++	focus: "focusin",
++	blur: "focusout",
++	mouseenter: "mouseover",
++	mouseleave: "mouseout"
++};
++
++jQuery.each(["live", "die"], function( i, name ) {
++	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
++		var type, i = 0, match, namespaces, preType,
++			selector = origSelector || this.selector,
++			context = origSelector ? this : jQuery( this.context );
++
++		if ( typeof types === "object" && !types.preventDefault ) {
++			for ( var key in types ) {
++				context[ name ]( key, data, types[key], selector );
++			}
++
++			return this;
++		}
++
++		if ( name === "die" && !types &&
++					origSelector && origSelector.charAt(0) === "." ) {
++
++			context.unbind( origSelector );
++
++			return this;
++		}
++
++		if ( data === false || jQuery.isFunction( data ) ) {
++			fn = data || returnFalse;
++			data = undefined;
++		}
++
++		types = (types || "").split(" ");
++
++		while ( (type = types[ i++ ]) != null ) {
++			match = rnamespaces.exec( type );
++			namespaces = "";
++
++			if ( match )  {
++				namespaces = match[0];
++				type = type.replace( rnamespaces, "" );
++			}
++
++			if ( type === "hover" ) {
++				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
++				continue;
++			}
++
++			preType = type;
++
++			if ( liveMap[ type ] ) {
++				types.push( liveMap[ type ] + namespaces );
++				type = type + namespaces;
++
++			} else {
++				type = (liveMap[ type ] || type) + namespaces;
++			}
++
++			if ( name === "live" ) {
++				// bind live handler
++				for ( var j = 0, l = context.length; j < l; j++ ) {
++					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
++						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
++				}
++
++			} else {
++				// unbind live handler
++				context.unbind( "live." + liveConvert( type, selector ), fn );
++			}
++		}
++
++		return this;
++	};
++});
++
++function liveHandler( event ) {
++	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
++		elems = [],
++		selectors = [],
++		events = jQuery._data( this, "events" );
++
++	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
++	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
++		return;
++	}
++
++	if ( event.namespace ) {
++		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
++	}
++
++	event.liveFired = this;
++
++	var live = events.live.slice(0);
++
++	for ( j = 0; j < live.length; j++ ) {
++		handleObj = live[j];
++
++		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
++			selectors.push( handleObj.selector );
++
++		} else {
++			live.splice( j--, 1 );
++		}
++	}
++
++	match = jQuery( event.target ).closest( selectors, event.currentTarget );
++
++	for ( i = 0, l = match.length; i < l; i++ ) {
++		close = match[i];
++
++		for ( j = 0; j < live.length; j++ ) {
++			handleObj = live[j];
++
++			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
++				elem = close.elem;
++				related = null;
++
++				// Those two events require additional checking
++				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
++					event.type = handleObj.preType;
++					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
++
++					// Make sure not to accidentally match a child element with the same selector
++					if ( related && jQuery.contains( elem, related ) ) {
++						related = elem;
++					}
++				}
++
++				if ( !related || related !== elem ) {
++					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
++				}
++			}
++		}
++	}
++
++	for ( i = 0, l = elems.length; i < l; i++ ) {
++		match = elems[i];
++
++		if ( maxLevel && match.level > maxLevel ) {
++			break;
++		}
++
++		event.currentTarget = match.elem;
++		event.data = match.handleObj.data;
++		event.handleObj = match.handleObj;
++
++		ret = match.handleObj.origHandler.apply( match.elem, arguments );
++
++		if ( ret === false || event.isPropagationStopped() ) {
++			maxLevel = match.level;
++
++			if ( ret === false ) {
++				stop = false;
++			}
++			if ( event.isImmediatePropagationStopped() ) {
++				break;
++			}
++		}
++	}
++
++	return stop;
++}
++
++function liveConvert( type, selector ) {
++	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
++}
++
++jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
++	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
++	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
++
++	// Handle event binding
++	jQuery.fn[ name ] = function( data, fn ) {
++		if ( fn == null ) {
++			fn = data;
++			data = null;
++		}
++
++		return arguments.length > 0 ?
++			this.bind( name, data, fn ) :
++			this.trigger( name );
++	};
++
++	if ( jQuery.attrFn ) {
++		jQuery.attrFn[ name ] = true;
++	}
++});
++
++
++
++/*!
++ * Sizzle CSS Selector Engine
++ *  Copyright 2011, The Dojo Foundation
++ *  Released under the MIT, BSD, and GPL Licenses.
++ *  More information: http://sizzlejs.com/
++ */
++(function(){
++
++var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
++	done = 0,
++	toString = Object.prototype.toString,
++	hasDuplicate = false,
++	baseHasDuplicate = true,
++	rBackslash = /\\/g,
++	rNonWord = /\W/;
++
++// Here we check if the JavaScript engine is using some sort of
++// optimization where it does not always call our comparision
++// function. If that is the case, discard the hasDuplicate value.
++//   Thus far that includes Google Chrome.
++[0, 0].sort(function() {
++	baseHasDuplicate = false;
++	return 0;
++});
++
++var Sizzle = function( selector, context, results, seed ) {
++	results = results || [];
++	context = context || document;
++
++	var origContext = context;
++
++	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
++		return [];
++	}
++	
++	if ( !selector || typeof selector !== "string" ) {
++		return results;
++	}
++
++	var m, set, checkSet, extra, ret, cur, pop, i,
++		prune = true,
++		contextXML = Sizzle.isXML( context ),
++		parts = [],
++		soFar = selector;
++	
++	// Reset the position of the chunker regexp (start from head)
++	do {
++		chunker.exec( "" );
++		m = chunker.exec( soFar );
++
++		if ( m ) {
++			soFar = m[3];
++		
++			parts.push( m[1] );
++		
++			if ( m[2] ) {
++				extra = m[3];
++				break;
++			}
++		}
++	} while ( m );
++
++	if ( parts.length > 1 && origPOS.exec( selector ) ) {
++
++		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
++			set = posProcess( parts[0] + parts[1], context );
++
++		} else {
++			set = Expr.relative[ parts[0] ] ?
++				[ context ] :
++				Sizzle( parts.shift(), context );
++
++			while ( parts.length ) {
++				selector = parts.shift();
++
++				if ( Expr.relative[ selector ] ) {
++					selector += parts.shift();
++				}
++				
++				set = posProcess( selector, set );
++			}
++		}
++
++	} else {
++		// Take a shortcut and set the context if the root selector is an ID
++		// (but not if it'll be faster if the inner selector is an ID)
++		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
++				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
++
++			ret = Sizzle.find( parts.shift(), context, contextXML );
++			context = ret.expr ?
++				Sizzle.filter( ret.expr, ret.set )[0] :
++				ret.set[0];
++		}
++
++		if ( context ) {
++			ret = seed ?
++				{ expr: parts.pop(), set: makeArray(seed) } :
++				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
++
++			set = ret.expr ?
++				Sizzle.filter( ret.expr, ret.set ) :
++				ret.set;
++
++			if ( parts.length > 0 ) {
++				checkSet = makeArray( set );
++
++			} else {
++				prune = false;
++			}
++
++			while ( parts.length ) {
++				cur = parts.pop();
++				pop = cur;
++
++				if ( !Expr.relative[ cur ] ) {
++					cur = "";
++				} else {
++					pop = parts.pop();
++				}
++
++				if ( pop == null ) {
++					pop = context;
++				}
++
++				Expr.relative[ cur ]( checkSet, pop, contextXML );
++			}
++
++		} else {
++			checkSet = parts = [];
++		}
++	}
++
++	if ( !checkSet ) {
++		checkSet = set;
++	}
++
++	if ( !checkSet ) {
++		Sizzle.error( cur || selector );
++	}
++
++	if ( toString.call(checkSet) === "[object Array]" ) {
++		if ( !prune ) {
++			results.push.apply( results, checkSet );
++
++		} else if ( context && context.nodeType === 1 ) {
++			for ( i = 0; checkSet[i] != null; i++ ) {
++				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
++					results.push( set[i] );
++				}
++			}
++
++		} else {
++			for ( i = 0; checkSet[i] != null; i++ ) {
++				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
++					results.push( set[i] );
++				}
++			}
++		}
++
++	} else {
++		makeArray( checkSet, results );
++	}
++
++	if ( extra ) {
++		Sizzle( extra, origContext, results, seed );
++		Sizzle.uniqueSort( results );
++	}
++
++	return results;
++};
++
++Sizzle.uniqueSort = function( results ) {
++	if ( sortOrder ) {
++		hasDuplicate = baseHasDuplicate;
++		results.sort( sortOrder );
++
++		if ( hasDuplicate ) {
++			for ( var i = 1; i < results.length; i++ ) {
++				if ( results[i] === results[ i - 1 ] ) {
++					results.splice( i--, 1 );
++				}
++			}
++		}
++	}
++
++	return results;
++};
++
++Sizzle.matches = function( expr, set ) {
++	return Sizzle( expr, null, null, set );
++};
++
++Sizzle.matchesSelector = function( node, expr ) {
++	return Sizzle( expr, null, null, [node] ).length > 0;
++};
++
++Sizzle.find = function( expr, context, isXML ) {
++	var set;
++
++	if ( !expr ) {
++		return [];
++	}
++
++	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
++		var match,
++			type = Expr.order[i];
++		
++		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
++			var left = match[1];
++			match.splice( 1, 1 );
++
++			if ( left.substr( left.length - 1 ) !== "\\" ) {
++				match[1] = (match[1] || "").replace( rBackslash, "" );
++				set = Expr.find[ type ]( match, context, isXML );
++
++				if ( set != null ) {
++					expr = expr.replace( Expr.match[ type ], "" );
++					break;
++				}
++			}
++		}
++	}
++
++	if ( !set ) {
++		set = typeof context.getElementsByTagName !== "undefined" ?
++			context.getElementsByTagName( "*" ) :
++			[];
++	}
++
++	return { set: set, expr: expr };
++};
++
++Sizzle.filter = function( expr, set, inplace, not ) {
++	var match, anyFound,
++		old = expr,
++		result = [],
++		curLoop = set,
++		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
++
++	while ( expr && set.length ) {
++		for ( var type in Expr.filter ) {
++			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
++				var found, item,
++					filter = Expr.filter[ type ],
++					left = match[1];
++
++				anyFound = false;
++
++				match.splice(1,1);
++
++				if ( left.substr( left.length - 1 ) === "\\" ) {
++					continue;
++				}
++
++				if ( curLoop === result ) {
++					result = [];
++				}
++
++				if ( Expr.preFilter[ type ] ) {
++					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
++
++					if ( !match ) {
++						anyFound = found = true;
++
++					} else if ( match === true ) {
++						continue;
++					}
++				}
++
++				if ( match ) {
++					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
++						if ( item ) {
++							found = filter( item, match, i, curLoop );
++							var pass = not ^ !!found;
++
++							if ( inplace && found != null ) {
++								if ( pass ) {
++									anyFound = true;
++
++								} else {
++									curLoop[i] = false;
++								}
++
++							} else if ( pass ) {
++								result.push( item );
++								anyFound = true;
++							}
++						}
++					}
++				}
++
++				if ( found !== undefined ) {
++					if ( !inplace ) {
++						curLoop = result;
++					}
++
++					expr = expr.replace( Expr.match[ type ], "" );
++
++					if ( !anyFound ) {
++						return [];
++					}
++
++					break;
++				}
++			}
++		}
++
++		// Improper expression
++		if ( expr === old ) {
++			if ( anyFound == null ) {
++				Sizzle.error( expr );
++
++			} else {
++				break;
++			}
++		}
++
++		old = expr;
++	}
++
++	return curLoop;
++};
++
++Sizzle.error = function( msg ) {
++	throw "Syntax error, unrecognized expression: " + msg;
++};
++
++var Expr = Sizzle.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( elem ) {
++			return elem.getAttribute( "href" );
++		},
++		type: function( elem ) {
++			return elem.getAttribute( "type" );
++		}
++	},
++
++	relative: {
++		"+": function(checkSet, part){
++			var isPartStr = typeof part === "string",
++				isTag = isPartStr && !rNonWord.test( part ),
++				isPartStrNotTag = isPartStr && !isTag;
++
++			if ( isTag ) {
++				part = part.toLowerCase();
++			}
++
++			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
++				if ( (elem = checkSet[i]) ) {
++					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
++
++					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
++						elem || false :
++						elem === part;
++				}
++			}
++
++			if ( isPartStrNotTag ) {
++				Sizzle.filter( part, checkSet, true );
++			}
++		},
++
++		">": function( checkSet, part ) {
++			var elem,
++				isPartStr = typeof part === "string",
++				i = 0,
++				l = checkSet.length;
++
++			if ( isPartStr && !rNonWord.test( part ) ) {
++				part = part.toLowerCase();
++
++				for ( ; i < l; i++ ) {
++					elem = checkSet[i];
++
++					if ( elem ) {
++						var parent = elem.parentNode;
++						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
++					}
++				}
++
++			} else {
++				for ( ; i < l; i++ ) {
++					elem = checkSet[i];
++
++					if ( elem ) {
++						checkSet[i] = isPartStr ?
++							elem.parentNode :
++							elem.parentNode === part;
++					}
++				}
++
++				if ( isPartStr ) {
++					Sizzle.filter( part, checkSet, true );
++				}
++			}
++		},
++
++		"": function(checkSet, part, isXML){
++			var nodeCheck,
++				doneName = done++,
++				checkFn = dirCheck;
++
++			if ( typeof part === "string" && !rNonWord.test( part ) ) {
++				part = part.toLowerCase();
++				nodeCheck = part;
++				checkFn = dirNodeCheck;
++			}
++
++			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
++		},
++
++		"~": function( checkSet, part, isXML ) {
++			var nodeCheck,
++				doneName = done++,
++				checkFn = dirCheck;
++
++			if ( typeof part === "string" && !rNonWord.test( part ) ) {
++				part = part.toLowerCase();
++				nodeCheck = part;
++				checkFn = dirNodeCheck;
++			}
++
++			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
++		}
++	},
++
++	find: {
++		ID: function( match, context, isXML ) {
++			if ( typeof context.getElementById !== "undefined" && !isXML ) {
++				var m = context.getElementById(match[1]);
++				// Check parentNode to catch when Blackberry 4.6 returns
++				// nodes that are no longer in the document #6963
++				return m && m.parentNode ? [m] : [];
++			}
++		},
++
++		NAME: function( match, context ) {
++			if ( typeof context.getElementsByName !== "undefined" ) {
++				var ret = [],
++					results = context.getElementsByName( match[1] );
++
++				for ( var i = 0, l = results.length; i < l; i++ ) {
++					if ( results[i].getAttribute("name") === match[1] ) {
++						ret.push( results[i] );
++					}
++				}
++
++				return ret.length === 0 ? null : ret;
++			}
++		},
++
++		TAG: function( match, context ) {
++			if ( typeof context.getElementsByTagName !== "undefined" ) {
++				return context.getElementsByTagName( match[1] );
++			}
++		}
++	},
++	preFilter: {
++		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
++			match = " " + match[1].replace( rBackslash, "" ) + " ";
++
++			if ( isXML ) {
++				return match;
++			}
++
++			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
++				if ( elem ) {
++					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
++						if ( !inplace ) {
++							result.push( elem );
++						}
++
++					} else if ( inplace ) {
++						curLoop[i] = false;
++					}
++				}
++			}
++
++			return false;
++		},
++
++		ID: function( match ) {
++			return match[1].replace( rBackslash, "" );
++		},
++
++		TAG: function( match, curLoop ) {
++			return match[1].replace( rBackslash, "" ).toLowerCase();
++		},
++
++		CHILD: function( match ) {
++			if ( match[1] === "nth" ) {
++				if ( !match[2] ) {
++					Sizzle.error( match[0] );
++				}
++
++				match[2] = match[2].replace(/^\+|\s*/g, '');
++
++				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
++				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
++					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
++					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
++
++				// calculate the numbers (first)n+(last) including if they are negative
++				match[2] = (test[1] + (test[2] || 1)) - 0;
++				match[3] = test[3] - 0;
++			}
++			else if ( match[2] ) {
++				Sizzle.error( match[0] );
++			}
++
++			// TODO: Move to normal caching system
++			match[0] = done++;
++
++			return match;
++		},
++
++		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
++			var name = match[1] = match[1].replace( rBackslash, "" );
++			
++			if ( !isXML && Expr.attrMap[name] ) {
++				match[1] = Expr.attrMap[name];
++			}
++
++			// Handle if an un-quoted value was used
++			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
++
++			if ( match[2] === "~=" ) {
++				match[4] = " " + match[4] + " ";
++			}
++
++			return match;
++		},
++
++		PSEUDO: function( match, curLoop, inplace, result, not ) {
++			if ( match[1] === "not" ) {
++				// If we're dealing with a complex expression, or a simple one
++				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
++					match[3] = Sizzle(match[3], null, null, curLoop);
++
++				} else {
++					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
++
++					if ( !inplace ) {
++						result.push.apply( result, ret );
++					}
++
++					return false;
++				}
++
++			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
++				return true;
++			}
++			
++			return match;
++		},
++
++		POS: function( match ) {
++			match.unshift( true );
++
++			return match;
++		}
++	},
++	
++	filters: {
++		enabled: function( elem ) {
++			return elem.disabled === false && elem.type !== "hidden";
++		},
++
++		disabled: function( elem ) {
++			return elem.disabled === true;
++		},
++
++		checked: function( elem ) {
++			return elem.checked === true;
++		},
++		
++		selected: function( elem ) {
++			// Accessing this property makes selected-by-default
++			// options in Safari work properly
++			if ( elem.parentNode ) {
++				elem.parentNode.selectedIndex;
++			}
++			
++			return elem.selected === true;
++		},
++
++		parent: function( elem ) {
++			return !!elem.firstChild;
++		},
++
++		empty: function( elem ) {
++			return !elem.firstChild;
++		},
++
++		has: function( elem, i, match ) {
++			return !!Sizzle( match[3], elem ).length;
++		},
++
++		header: function( elem ) {
++			return (/h\d/i).test( elem.nodeName );
++		},
++
++		text: function( elem ) {
++			var attr = elem.getAttribute( "type" ), type = elem.type;
++			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
++			// use getAttribute instead to test this case
++			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
++		},
++
++		radio: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
++		},
++
++		checkbox: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
++		},
++
++		file: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
++		},
++
++		password: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
++		},
++
++		submit: function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return (name === "input" || name === "button") && "submit" === elem.type;
++		},
++
++		image: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
++		},
++
++		reset: function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return (name === "input" || name === "button") && "reset" === elem.type;
++		},
++
++		button: function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return name === "input" && "button" === elem.type || name === "button";
++		},
++
++		input: function( elem ) {
++			return (/input|select|textarea|button/i).test( elem.nodeName );
++		},
++
++		focus: function( elem ) {
++			return elem === elem.ownerDocument.activeElement;
++		}
++	},
++	setFilters: {
++		first: function( elem, i ) {
++			return i === 0;
++		},
++
++		last: function( elem, i, match, array ) {
++			return i === array.length - 1;
++		},
++
++		even: function( elem, i ) {
++			return i % 2 === 0;
++		},
++
++		odd: function( elem, i ) {
++			return i % 2 === 1;
++		},
++
++		lt: function( elem, i, match ) {
++			return i < match[3] - 0;
++		},
++
++		gt: function( elem, i, match ) {
++			return i > match[3] - 0;
++		},
++
++		nth: function( elem, i, match ) {
++			return match[3] - 0 === i;
++		},
++
++		eq: function( elem, i, match ) {
++			return match[3] - 0 === i;
++		}
++	},
++	filter: {
++		PSEUDO: function( elem, match, i, array ) {
++			var name = match[1],
++				filter = Expr.filters[ name ];
++
++			if ( filter ) {
++				return filter( elem, i, match, array );
++
++			} else if ( name === "contains" ) {
++				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
++
++			} else if ( name === "not" ) {
++				var not = match[3];
++
++				for ( var j = 0, l = not.length; j < l; j++ ) {
++					if ( not[j] === elem ) {
++						return false;
++					}
++				}
++
++				return true;
++
++			} else {
++				Sizzle.error( name );
++			}
++		},
++
++		CHILD: function( elem, match ) {
++			var type = match[1],
++				node = elem;
++
++			switch ( type ) {
++				case "only":
++				case "first":
++					while ( (node = node.previousSibling) )	 {
++						if ( node.nodeType === 1 ) { 
++							return false; 
++						}
++					}
++
++					if ( type === "first" ) { 
++						return true; 
++					}
++
++					node = elem;
++
++				case "last":
++					while ( (node = node.nextSibling) )	 {
++						if ( node.nodeType === 1 ) { 
++							return false; 
++						}
++					}
++
++					return true;
++
++				case "nth":
++					var first = match[2],
++						last = match[3];
++
++					if ( first === 1 && last === 0 ) {
++						return true;
++					}
++					
++					var doneName = match[0],
++						parent = elem.parentNode;
++	
++					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
++						var count = 0;
++						
++						for ( node = parent.firstChild; node; node = node.nextSibling ) {
++							if ( node.nodeType === 1 ) {
++								node.nodeIndex = ++count;
++							}
++						} 
++
++						parent.sizcache = doneName;
++					}
++					
++					var diff = elem.nodeIndex - last;
++
++					if ( first === 0 ) {
++						return diff === 0;
++
++					} else {
++						return ( diff % first === 0 && diff / first >= 0 );
++					}
++			}
++		},
++
++		ID: function( elem, match ) {
++			return elem.nodeType === 1 && elem.getAttribute("id") === match;
++		},
++
++		TAG: function( elem, match ) {
++			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
++		},
++		
++		CLASS: function( elem, match ) {
++			return (" " + (elem.className || elem.getAttribute("class")) + " ")
++				.indexOf( match ) > -1;
++		},
++
++		ATTR: function( elem, match ) {
++			var name = match[1],
++				result = Expr.attrHandle[ name ] ?
++					Expr.attrHandle[ name ]( elem ) :
++					elem[ name ] != null ?
++						elem[ name ] :
++						elem.getAttribute( name ),
++				value = result + "",
++				type = match[2],
++				check = match[4];
++
++			return result == null ?
++				type === "!=" :
++				type === "=" ?
++				value === check :
++				type === "*=" ?
++				value.indexOf(check) >= 0 :
++				type === "~=" ?
++				(" " + value + " ").indexOf(check) >= 0 :
++				!check ?
++				value && result !== false :
++				type === "!=" ?
++				value !== check :
++				type === "^=" ?
++				value.indexOf(check) === 0 :
++				type === "$=" ?
++				value.substr(value.length - check.length) === check :
++				type === "|=" ?
++				value === check || value.substr(0, check.length + 1) === check + "-" :
++				false;
++		},
++
++		POS: function( elem, match, i, array ) {
++			var name = match[2],
++				filter = Expr.setFilters[ name ];
++
++			if ( filter ) {
++				return filter( elem, i, match, array );
++			}
++		}
++	}
++};
++
++var origPOS = Expr.match.POS,
++	fescape = function(all, num){
++		return "\\" + (num - 0 + 1);
++	};
++
++for ( var type in Expr.match ) {
++	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
++	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
++}
++
++var makeArray = function( array, results ) {
++	array = Array.prototype.slice.call( array, 0 );
++
++	if ( results ) {
++		results.push.apply( results, array );
++		return results;
++	}
++	
++	return array;
++};
++
++// Perform a simple check to determine if the browser is capable of
++// converting a NodeList to an array using builtin methods.
++// Also verifies that the returned array holds DOM nodes
++// (which is not the case in the Blackberry browser)
++try {
++	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
++
++// Provide a fallback method if it does not work
++} catch( e ) {
++	makeArray = function( array, results ) {
++		var i = 0,
++			ret = results || [];
++
++		if ( toString.call(array) === "[object Array]" ) {
++			Array.prototype.push.apply( ret, array );
++
++		} else {
++			if ( typeof array.length === "number" ) {
++				for ( var l = array.length; i < l; i++ ) {
++					ret.push( array[i] );
++				}
++
++			} else {
++				for ( ; array[i]; i++ ) {
++					ret.push( array[i] );
++				}
++			}
++		}
++
++		return ret;
++	};
++}
++
++var sortOrder, siblingCheck;
++
++if ( document.documentElement.compareDocumentPosition ) {
++	sortOrder = function( a, b ) {
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++		}
++
++		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
++			return a.compareDocumentPosition ? -1 : 1;
++		}
++
++		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
++	};
++
++} else {
++	sortOrder = function( a, b ) {
++		// The nodes are identical, we can exit early
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++
++		// Fallback to using sourceIndex (in IE) if it's available on both nodes
++		} else if ( a.sourceIndex && b.sourceIndex ) {
++			return a.sourceIndex - b.sourceIndex;
++		}
++
++		var al, bl,
++			ap = [],
++			bp = [],
++			aup = a.parentNode,
++			bup = b.parentNode,
++			cur = aup;
++
++		// If the nodes are siblings (or identical) we can do a quick check
++		if ( aup === bup ) {
++			return siblingCheck( a, b );
++
++		// If no parents were found then the nodes are disconnected
++		} else if ( !aup ) {
++			return -1;
++
++		} else if ( !bup ) {
++			return 1;
++		}
++
++		// Otherwise they're somewhere else in the tree so we need
++		// to build up a full list of the parentNodes for comparison
++		while ( cur ) {
++			ap.unshift( cur );
++			cur = cur.parentNode;
++		}
++
++		cur = bup;
++
++		while ( cur ) {
++			bp.unshift( cur );
++			cur = cur.parentNode;
++		}
++
++		al = ap.length;
++		bl = bp.length;
++
++		// Start walking down the tree looking for a discrepancy
++		for ( var i = 0; i < al && i < bl; i++ ) {
++			if ( ap[i] !== bp[i] ) {
++				return siblingCheck( ap[i], bp[i] );
++			}
++		}
++
++		// We ended someplace up the tree so do a sibling check
++		return i === al ?
++			siblingCheck( a, bp[i], -1 ) :
++			siblingCheck( ap[i], b, 1 );
++	};
++
++	siblingCheck = function( a, b, ret ) {
++		if ( a === b ) {
++			return ret;
++		}
++
++		var cur = a.nextSibling;
++
++		while ( cur ) {
++			if ( cur === b ) {
++				return -1;
++			}
++
++			cur = cur.nextSibling;
++		}
++
++		return 1;
++	};
++}
++
++// Utility function for retreiving the text value of an array of DOM nodes
++Sizzle.getText = function( elems ) {
++	var ret = "", elem;
++
++	for ( var i = 0; elems[i]; i++ ) {
++		elem = elems[i];
++
++		// Get the text from text nodes and CDATA nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
++			ret += elem.nodeValue;
++
++		// Traverse everything else, except comment nodes
++		} else if ( elem.nodeType !== 8 ) {
++			ret += Sizzle.getText( elem.childNodes );
++		}
++	}
++
++	return ret;
++};
++
++// Check to see if the browser returns elements by name when
++// querying by getElementById (and provide a workaround)
++(function(){
++	// We're going to inject a fake input element with a specified name
++	var form = document.createElement("div"),
++		id = "script" + (new Date()).getTime(),
++		root = document.documentElement;
++
++	form.innerHTML = "<a name='" + id + "'/>";
++
++	// Inject it into the root element, check its status, and remove it quickly
++	root.insertBefore( form, root.firstChild );
++
++	// The workaround has to do additional checks after a getElementById
++	// Which slows things down for other browsers (hence the branching)
++	if ( document.getElementById( id ) ) {
++		Expr.find.ID = function( match, context, isXML ) {
++			if ( typeof context.getElementById !== "undefined" && !isXML ) {
++				var m = context.getElementById(match[1]);
++
++				return m ?
++					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
++						[m] :
++						undefined :
++					[];
++			}
++		};
++
++		Expr.filter.ID = function( elem, match ) {
++			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
++
++			return elem.nodeType === 1 && node && node.nodeValue === match;
++		};
++	}
++
++	root.removeChild( form );
++
++	// release memory in IE
++	root = form = null;
++})();
++
++(function(){
++	// Check to see if the browser returns only elements
++	// when doing getElementsByTagName("*")
++
++	// Create a fake element
++	var div = document.createElement("div");
++	div.appendChild( document.createComment("") );
++
++	// Make sure no comments are found
++	if ( div.getElementsByTagName("*").length > 0 ) {
++		Expr.find.TAG = function( match, context ) {
++			var results = context.getElementsByTagName( match[1] );
++
++			// Filter out possible comments
++			if ( match[1] === "*" ) {
++				var tmp = [];
++
++				for ( var i = 0; results[i]; i++ ) {
++					if ( results[i].nodeType === 1 ) {
++						tmp.push( results[i] );
++					}
++				}
++
++				results = tmp;
++			}
++
++			return results;
++		};
++	}
++
++	// Check to see if an attribute returns normalized href attributes
++	div.innerHTML = "<a href='#'></a>";
++
++	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
++			div.firstChild.getAttribute("href") !== "#" ) {
++
++		Expr.attrHandle.href = function( elem ) {
++			return elem.getAttribute( "href", 2 );
++		};
++	}
++
++	// release memory in IE
++	div = null;
++})();
++
++if ( document.querySelectorAll ) {
++	(function(){
++		var oldSizzle = Sizzle,
++			div = document.createElement("div"),
++			id = "__sizzle__";
++
++		div.innerHTML = "<p class='TEST'></p>";
++
++		// Safari can't handle uppercase or unicode characters when
++		// in quirks mode.
++		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
++			return;
++		}
++	
++		Sizzle = function( query, context, extra, seed ) {
++			context = context || document;
++
++			// Only use querySelectorAll on non-XML documents
++			// (ID selectors don't work in non-HTML documents)
++			if ( !seed && !Sizzle.isXML(context) ) {
++				// See if we find a selector to speed up
++				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
++				
++				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
++					// Speed-up: Sizzle("TAG")
++					if ( match[1] ) {
++						return makeArray( context.getElementsByTagName( query ), extra );
++					
++					// Speed-up: Sizzle(".CLASS")
++					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
++						return makeArray( context.getElementsByClassName( match[2] ), extra );
++					}
++				}
++				
++				if ( context.nodeType === 9 ) {
++					// Speed-up: Sizzle("body")
++					// The body element only exists once, optimize finding it
++					if ( query === "body" && context.body ) {
++						return makeArray( [ context.body ], extra );
++						
++					// Speed-up: Sizzle("#ID")
++					} else if ( match && match[3] ) {
++						var elem = context.getElementById( match[3] );
++
++						// Check parentNode to catch when Blackberry 4.6 returns
++						// nodes that are no longer in the document #6963
++						if ( elem && elem.parentNode ) {
++							// Handle the case where IE and Opera return items
++							// by name instead of ID
++							if ( elem.id === match[3] ) {
++								return makeArray( [ elem ], extra );
++							}
++							
++						} else {
++							return makeArray( [], extra );
++						}
++					}
++					
++					try {
++						return makeArray( context.querySelectorAll(query), extra );
++					} catch(qsaError) {}
++
++				// qSA works strangely on Element-rooted queries
++				// We can work around this by specifying an extra ID on the root
++				// and working up from there (Thanks to Andrew Dupont for the technique)
++				// IE 8 doesn't work on object elements
++				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
++					var oldContext = context,
++						old = context.getAttribute( "id" ),
++						nid = old || id,
++						hasParent = context.parentNode,
++						relativeHierarchySelector = /^\s*[+~]/.test( query );
++
++					if ( !old ) {
++						context.setAttribute( "id", nid );
++					} else {
++						nid = nid.replace( /'/g, "\\$&" );
++					}
++					if ( relativeHierarchySelector && hasParent ) {
++						context = context.parentNode;
++					}
++
++					try {
++						if ( !relativeHierarchySelector || hasParent ) {
++							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
++						}
++
++					} catch(pseudoError) {
++					} finally {
++						if ( !old ) {
++							oldContext.removeAttribute( "id" );
++						}
++					}
++				}
++			}
++		
++			return oldSizzle(query, context, extra, seed);
++		};
++
++		for ( var prop in oldSizzle ) {
++			Sizzle[ prop ] = oldSizzle[ prop ];
++		}
++
++		// release memory in IE
++		div = null;
++	})();
++}
++
++(function(){
++	var html = document.documentElement,
++		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
++
++	if ( matches ) {
++		// Check to see if it's possible to do matchesSelector
++		// on a disconnected node (IE 9 fails this)
++		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
++			pseudoWorks = false;
++
++		try {
++			// This should fail with an exception
++			// Gecko does not error, returns false instead
++			matches.call( document.documentElement, "[test!='']:sizzle" );
++	
++		} catch( pseudoError ) {
++			pseudoWorks = true;
++		}
++
++		Sizzle.matchesSelector = function( node, expr ) {
++			// Make sure that attribute selectors are quoted
++			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
++
++			if ( !Sizzle.isXML( node ) ) {
++				try { 
++					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
++						var ret = matches.call( node, expr );
++
++						// IE 9's matchesSelector returns false on disconnected nodes
++						if ( ret || !disconnectedMatch ||
++								// As well, disconnected nodes are said to be in a document
++								// fragment in IE 9, so check for that
++								node.document && node.document.nodeType !== 11 ) {
++							return ret;
++						}
++					}
++				} catch(e) {}
++			}
++
++			return Sizzle(expr, null, null, [node]).length > 0;
++		};
++	}
++})();
++
++(function(){
++	var div = document.createElement("div");
++
++	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
++
++	// Opera can't find a second classname (in 9.6)
++	// Also, make sure that getElementsByClassName actually exists
++	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
++		return;
++	}
++
++	// Safari caches class attributes, doesn't catch changes (in 3.2)
++	div.lastChild.className = "e";
++
++	if ( div.getElementsByClassName("e").length === 1 ) {
++		return;
++	}
++	
++	Expr.order.splice(1, 0, "CLASS");
++	Expr.find.CLASS = function( match, context, isXML ) {
++		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
++			return context.getElementsByClassName(match[1]);
++		}
++	};
++
++	// release memory in IE
++	div = null;
++})();
++
++function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
++	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
++		var elem = checkSet[i];
++
++		if ( elem ) {
++			var match = false;
++
++			elem = elem[dir];
++
++			while ( elem ) {
++				if ( elem.sizcache === doneName ) {
++					match = checkSet[elem.sizset];
++					break;
++				}
++
++				if ( elem.nodeType === 1 && !isXML ){
++					elem.sizcache = doneName;
++					elem.sizset = i;
++				}
++
++				if ( elem.nodeName.toLowerCase() === cur ) {
++					match = elem;
++					break;
++				}
++
++				elem = elem[dir];
++			}
++
++			checkSet[i] = match;
++		}
++	}
++}
++
++function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
++	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
++		var elem = checkSet[i];
++
++		if ( elem ) {
++			var match = false;
++			
++			elem = elem[dir];
++
++			while ( elem ) {
++				if ( elem.sizcache === doneName ) {
++					match = checkSet[elem.sizset];
++					break;
++				}
++
++				if ( elem.nodeType === 1 ) {
++					if ( !isXML ) {
++						elem.sizcache = doneName;
++						elem.sizset = i;
++					}
++
++					if ( typeof cur !== "string" ) {
++						if ( elem === cur ) {
++							match = true;
++							break;
++						}
++
++					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
++						match = elem;
++						break;
++					}
++				}
++
++				elem = elem[dir];
++			}
++
++			checkSet[i] = match;
++		}
++	}
++}
++
++if ( document.documentElement.contains ) {
++	Sizzle.contains = function( a, b ) {
++		return a !== b && (a.contains ? a.contains(b) : true);
++	};
++
++} else if ( document.documentElement.compareDocumentPosition ) {
++	Sizzle.contains = function( a, b ) {
++		return !!(a.compareDocumentPosition(b) & 16);
++	};
++
++} else {
++	Sizzle.contains = function() {
++		return false;
++	};
++}
++
++Sizzle.isXML = function( elem ) {
++	// documentElement is verified for cases where it doesn't yet exist
++	// (such as loading iframes in IE - #4833) 
++	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
++
++	return documentElement ? documentElement.nodeName !== "HTML" : false;
++};
++
++var posProcess = function( selector, context ) {
++	var match,
++		tmpSet = [],
++		later = "",
++		root = context.nodeType ? [context] : context;
++
++	// Position selectors must be done after the filter
++	// And so must :not(positional) so we move all PSEUDOs to the end
++	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
++		later += match[0];
++		selector = selector.replace( Expr.match.PSEUDO, "" );
++	}
++
++	selector = Expr.relative[selector] ? selector + "*" : selector;
++
++	for ( var i = 0, l = root.length; i < l; i++ ) {
++		Sizzle( selector, root[i], tmpSet );
++	}
++
++	return Sizzle.filter( later, tmpSet );
++};
++
++// EXPOSE
++jQuery.find = Sizzle;
++jQuery.expr = Sizzle.selectors;
++jQuery.expr[":"] = jQuery.expr.filters;
++jQuery.unique = Sizzle.uniqueSort;
++jQuery.text = Sizzle.getText;
++jQuery.isXMLDoc = Sizzle.isXML;
++jQuery.contains = Sizzle.contains;
++
++
++})();
++
++
++var runtil = /Until$/,
++	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
++	// Note: This RegExp should be improved, or likely pulled from Sizzle
++	rmultiselector = /,/,
++	isSimple = /^.[^:#\[\.,]*$/,
++	slice = Array.prototype.slice,
++	POS = jQuery.expr.match.POS,
++	// methods guaranteed to produce a unique set when starting from a unique set
++	guaranteedUnique = {
++		children: true,
++		contents: true,
++		next: true,
++		prev: true
++	};
++
++jQuery.fn.extend({
++	find: function( selector ) {
++		var self = this,
++			i, l;
++
++		if ( typeof selector !== "string" ) {
++			return jQuery( selector ).filter(function() {
++				for ( i = 0, l = self.length; i < l; i++ ) {
++					if ( jQuery.contains( self[ i ], this ) ) {
++						return true;
++					}
++				}
++			});
++		}
++
++		var ret = this.pushStack( "", "find", selector ),
++			length, n, r;
++
++		for ( i = 0, l = this.length; i < l; i++ ) {
++			length = ret.length;
++			jQuery.find( selector, this[i], ret );
++
++			if ( i > 0 ) {
++				// Make sure that the results are unique
++				for ( n = length; n < ret.length; n++ ) {
++					for ( r = 0; r < length; r++ ) {
++						if ( ret[r] === ret[n] ) {
++							ret.splice(n--, 1);
++							break;
++						}
++					}
++				}
++			}
++		}
++
++		return ret;
++	},
++
++	has: function( target ) {
++		var targets = jQuery( target );
++		return this.filter(function() {
++			for ( var i = 0, l = targets.length; i < l; i++ ) {
++				if ( jQuery.contains( this, targets[i] ) ) {
++					return true;
++				}
++			}
++		});
++	},
++
++	not: function( selector ) {
++		return this.pushStack( winnow(this, selector, false), "not", selector);
++	},
++
++	filter: function( selector ) {
++		return this.pushStack( winnow(this, selector, true), "filter", selector );
++	},
++
++	is: function( selector ) {
++		return !!selector && ( typeof selector === "string" ?
++			jQuery.filter( selector, this ).length > 0 :
++			this.filter( selector ).length > 0 );
++	},
++
++	closest: function( selectors, context ) {
++		var ret = [], i, l, cur = this[0];
++		
++		// Array
++		if ( jQuery.isArray( selectors ) ) {
++			var match, selector,
++				matches = {},
++				level = 1;
++
++			if ( cur && selectors.length ) {
++				for ( i = 0, l = selectors.length; i < l; i++ ) {
++					selector = selectors[i];
++
++					if ( !matches[ selector ] ) {
++						matches[ selector ] = POS.test( selector ) ?
++							jQuery( selector, context || this.context ) :
++							selector;
++					}
++				}
++
++				while ( cur && cur.ownerDocument && cur !== context ) {
++					for ( selector in matches ) {
++						match = matches[ selector ];
++
++						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
++							ret.push({ selector: selector, elem: cur, level: level });
++						}
++					}
++
++					cur = cur.parentNode;
++					level++;
++				}
++			}
++
++			return ret;
++		}
++
++		// String
++		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
++				jQuery( selectors, context || this.context ) :
++				0;
++
++		for ( i = 0, l = this.length; i < l; i++ ) {
++			cur = this[i];
++
++			while ( cur ) {
++				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
++					ret.push( cur );
++					break;
++
++				} else {
++					cur = cur.parentNode;
++					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
++						break;
++					}
++				}
++			}
++		}
++
++		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
++
++		return this.pushStack( ret, "closest", selectors );
++	},
++
++	// Determine the position of an element within
++	// the matched set of elements
++	index: function( elem ) {
++		if ( !elem || typeof elem === "string" ) {
++			return jQuery.inArray( this[0],
++				// If it receives a string, the selector is used
++				// If it receives nothing, the siblings are used
++				elem ? jQuery( elem ) : this.parent().children() );
++		}
++		// Locate the position of the desired element
++		return jQuery.inArray(
++			// If it receives a jQuery object, the first element is used
++			elem.jquery ? elem[0] : elem, this );
++	},
++
++	add: function( selector, context ) {
++		var set = typeof selector === "string" ?
++				jQuery( selector, context ) :
++				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
++			all = jQuery.merge( this.get(), set );
++
++		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
++			all :
++			jQuery.unique( all ) );
++	},
++
++	andSelf: function() {
++		return this.add( this.prevObject );
++	}
++});
++
++// A painfully simple check to see if an element is disconnected
++// from a document (should be improved, where feasible).
++function isDisconnected( node ) {
++	return !node || !node.parentNode || node.parentNode.nodeType === 11;
++}
++
++jQuery.each({
++	parent: function( elem ) {
++		var parent = elem.parentNode;
++		return parent && parent.nodeType !== 11 ? parent : null;
++	},
++	parents: function( elem ) {
++		return jQuery.dir( elem, "parentNode" );
++	},
++	parentsUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "parentNode", until );
++	},
++	next: function( elem ) {
++		return jQuery.nth( elem, 2, "nextSibling" );
++	},
++	prev: function( elem ) {
++		return jQuery.nth( elem, 2, "previousSibling" );
++	},
++	nextAll: function( elem ) {
++		return jQuery.dir( elem, "nextSibling" );
++	},
++	prevAll: function( elem ) {
++		return jQuery.dir( elem, "previousSibling" );
++	},
++	nextUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "nextSibling", until );
++	},
++	prevUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "previousSibling", until );
++	},
++	siblings: function( elem ) {
++		return jQuery.sibling( elem.parentNode.firstChild, elem );
++	},
++	children: function( elem ) {
++		return jQuery.sibling( elem.firstChild );
++	},
++	contents: function( elem ) {
++		return jQuery.nodeName( elem, "iframe" ) ?
++			elem.contentDocument || elem.contentWindow.document :
++			jQuery.makeArray( elem.childNodes );
++	}
++}, function( name, fn ) {
++	jQuery.fn[ name ] = function( until, selector ) {
++		var ret = jQuery.map( this, fn, until ),
++			// The variable 'args' was introduced in
++			// https://github.com/jquery/jquery/commit/52a0238
++			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
++			// http://code.google.com/p/v8/issues/detail?id=1050
++			args = slice.call(arguments);
++
++		if ( !runtil.test( name ) ) {
++			selector = until;
++		}
++
++		if ( selector && typeof selector === "string" ) {
++			ret = jQuery.filter( selector, ret );
++		}
++
++		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
++
++		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
++			ret = ret.reverse();
++		}
++
++		return this.pushStack( ret, name, args.join(",") );
++	};
++});
++
++jQuery.extend({
++	filter: function( expr, elems, not ) {
++		if ( not ) {
++			expr = ":not(" + expr + ")";
++		}
++
++		return elems.length === 1 ?
++			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
++			jQuery.find.matches(expr, elems);
++	},
++
++	dir: function( elem, dir, until ) {
++		var matched = [],
++			cur = elem[ dir ];
++
++		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
++			if ( cur.nodeType === 1 ) {
++				matched.push( cur );
++			}
++			cur = cur[dir];
++		}
++		return matched;
++	},
++
++	nth: function( cur, result, dir, elem ) {
++		result = result || 1;
++		var num = 0;
++
++		for ( ; cur; cur = cur[dir] ) {
++			if ( cur.nodeType === 1 && ++num === result ) {
++				break;
++			}
++		}
++
++		return cur;
++	},
++
++	sibling: function( n, elem ) {
++		var r = [];
++
++		for ( ; n; n = n.nextSibling ) {
++			if ( n.nodeType === 1 && n !== elem ) {
++				r.push( n );
++			}
++		}
++
++		return r;
++	}
++});
++
++// Implement the identical functionality for filter and not
++function winnow( elements, qualifier, keep ) {
++
++	// Can't pass null or undefined to indexOf in Firefox 4
++	// Set to 0 to skip string check
++	qualifier = qualifier || 0;
++
++	if ( jQuery.isFunction( qualifier ) ) {
++		return jQuery.grep(elements, function( elem, i ) {
++			var retVal = !!qualifier.call( elem, i, elem );
++			return retVal === keep;
++		});
++
++	} else if ( qualifier.nodeType ) {
++		return jQuery.grep(elements, function( elem, i ) {
++			return (elem === qualifier) === keep;
++		});
++
++	} else if ( typeof qualifier === "string" ) {
++		var filtered = jQuery.grep(elements, function( elem ) {
++			return elem.nodeType === 1;
++		});
++
++		if ( isSimple.test( qualifier ) ) {
++			return jQuery.filter(qualifier, filtered, !keep);
++		} else {
++			qualifier = jQuery.filter( qualifier, filtered );
++		}
++	}
++
++	return jQuery.grep(elements, function( elem, i ) {
++		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
++	});
++}
++
++
++
++
++var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
++	rleadingWhitespace = /^\s+/,
++	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
++	rtagName = /<([\w:]+)/,
++	rtbody = /<tbody/i,
++	rhtml = /<|&#?\w+;/,
++	rnocache = /<(?:script|object|embed|option|style)/i,
++	// checked="checked" or checked
++	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
++	rscriptType = /\/(java|ecma)script/i,
++	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
++	wrapMap = {
++		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, "", "" ]
++	};
++
++wrapMap.optgroup = wrapMap.option;
++wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
++wrapMap.th = wrapMap.td;
++
++// IE can't serialize <link> and <script> tags normally
++if ( !jQuery.support.htmlSerialize ) {
++	wrapMap._default = [ 1, "div<div>", "</div>" ];
++}
++
++jQuery.fn.extend({
++	text: function( text ) {
++		if ( jQuery.isFunction(text) ) {
++			return this.each(function(i) {
++				var self = jQuery( this );
++
++				self.text( text.call(this, i, self.text()) );
++			});
++		}
++
++		if ( typeof text !== "object" && text !== undefined ) {
++			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
++		}
++
++		return jQuery.text( this );
++	},
++
++	wrapAll: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapAll( html.call(this, i) );
++			});
++		}
++
++		if ( this[0] ) {
++			// The elements to wrap the target around
++			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
++
++			if ( this[0].parentNode ) {
++				wrap.insertBefore( this[0] );
++			}
++
++			wrap.map(function() {
++				var elem = this;
++
++				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
++					elem = elem.firstChild;
++				}
++
++				return elem;
++			}).append( this );
++		}
++
++		return this;
++	},
++
++	wrapInner: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapInner( html.call(this, i) );
++			});
++		}
++
++		return this.each(function() {
++			var self = jQuery( this ),
++				contents = self.contents();
++
++			if ( contents.length ) {
++				contents.wrapAll( html );
++
++			} else {
++				self.append( html );
++			}
++		});
++	},
++
++	wrap: function( html ) {
++		return this.each(function() {
++			jQuery( this ).wrapAll( html );
++		});
++	},
++
++	unwrap: function() {
++		return this.parent().each(function() {
++			if ( !jQuery.nodeName( this, "body" ) ) {
++				jQuery( this ).replaceWith( this.childNodes );
++			}
++		}).end();
++	},
++
++	append: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 ) {
++				this.appendChild( elem );
++			}
++		});
++	},
++
++	prepend: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 ) {
++				this.insertBefore( elem, this.firstChild );
++			}
++		});
++	},
++
++	before: function() {
++		if ( this[0] && this[0].parentNode ) {
++			return this.domManip(arguments, false, function( elem ) {
++				this.parentNode.insertBefore( elem, this );
++			});
++		} else if ( arguments.length ) {
++			var set = jQuery(arguments[0]);
++			set.push.apply( set, this.toArray() );
++			return this.pushStack( set, "before", arguments );
++		}
++	},
++
++	after: function() {
++		if ( this[0] && this[0].parentNode ) {
++			return this.domManip(arguments, false, function( elem ) {
++				this.parentNode.insertBefore( elem, this.nextSibling );
++			});
++		} else if ( arguments.length ) {
++			var set = this.pushStack( this, "after", arguments );
++			set.push.apply( set, jQuery(arguments[0]).toArray() );
++			return set;
++		}
++	},
++
++	// keepData is for internal use only--do not document
++	remove: function( selector, keepData ) {
++		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
++			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
++				if ( !keepData && elem.nodeType === 1 ) {
++					jQuery.cleanData( elem.getElementsByTagName("*") );
++					jQuery.cleanData( [ elem ] );
++				}
++
++				if ( elem.parentNode ) {
++					elem.parentNode.removeChild( elem );
++				}
++			}
++		}
++
++		return this;
++	},
++
++	empty: function() {
++		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
++			// Remove element nodes and prevent memory leaks
++			if ( elem.nodeType === 1 ) {
++				jQuery.cleanData( elem.getElementsByTagName("*") );
++			}
++
++			// Remove any remaining nodes
++			while ( elem.firstChild ) {
++				elem.removeChild( elem.firstChild );
++			}
++		}
++
++		return this;
++	},
++
++	clone: function( dataAndEvents, deepDataAndEvents ) {
++		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
++		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
++
++		return this.map( function () {
++			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
++		});
++	},
++
++	html: function( value ) {
++		if ( value === undefined ) {
++			return this[0] && this[0].nodeType === 1 ?
++				this[0].innerHTML.replace(rinlinejQuery, "") :
++				null;
++
++		// See if we can take a shortcut and just use innerHTML
++		} else if ( typeof value === "string" && !rnocache.test( value ) &&
++			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
++			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
++
++			value = value.replace(rxhtmlTag, "<$1></$2>");
++
++			try {
++				for ( var i = 0, l = this.length; i < l; i++ ) {
++					// Remove element nodes and prevent memory leaks
++					if ( this[i].nodeType === 1 ) {
++						jQuery.cleanData( this[i].getElementsByTagName("*") );
++						this[i].innerHTML = value;
++					}
++				}
++
++			// If using innerHTML throws an exception, use the fallback method
++			} catch(e) {
++				this.empty().append( value );
++			}
++
++		} else if ( jQuery.isFunction( value ) ) {
++			this.each(function(i){
++				var self = jQuery( this );
++
++				self.html( value.call(this, i, self.html()) );
++			});
++
++		} else {
++			this.empty().append( value );
++		}
++
++		return this;
++	},
++
++	replaceWith: function( value ) {
++		if ( this[0] && this[0].parentNode ) {
++			// Make sure that the elements are removed from the DOM before they are inserted
++			// this can help fix replacing a parent with child elements
++			if ( jQuery.isFunction( value ) ) {
++				return this.each(function(i) {
++					var self = jQuery(this), old = self.html();
++					self.replaceWith( value.call( this, i, old ) );
++				});
++			}
++
++			if ( typeof value !== "string" ) {
++				value = jQuery( value ).detach();
++			}
++
++			return this.each(function() {
++				var next = this.nextSibling,
++					parent = this.parentNode;
++
++				jQuery( this ).remove();
++
++				if ( next ) {
++					jQuery(next).before( value );
++				} else {
++					jQuery(parent).append( value );
++				}
++			});
++		} else {
++			return this.length ?
++				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
++				this;
++		}
++	},
++
++	detach: function( selector ) {
++		return this.remove( selector, true );
++	},
++
++	domManip: function( args, table, callback ) {
++		var results, first, fragment, parent,
++			value = args[0],
++			scripts = [];
++
++		// We can't cloneNode fragments that contain checked, in WebKit
++		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
++			return this.each(function() {
++				jQuery(this).domManip( args, table, callback, true );
++			});
++		}
++
++		if ( jQuery.isFunction(value) ) {
++			return this.each(function(i) {
++				var self = jQuery(this);
++				args[0] = value.call(this, i, table ? self.html() : undefined);
++				self.domManip( args, table, callback );
++			});
++		}
++
++		if ( this[0] ) {
++			parent = value && value.parentNode;
++
++			// If we're in a fragment, just use that instead of building a new one
++			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
++				results = { fragment: parent };
++
++			} else {
++				results = jQuery.buildFragment( args, this, scripts );
++			}
++
++			fragment = results.fragment;
++
++			if ( fragment.childNodes.length === 1 ) {
++				first = fragment = fragment.firstChild;
++			} else {
++				first = fragment.firstChild;
++			}
++
++			if ( first ) {
++				table = table && jQuery.nodeName( first, "tr" );
++
++				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
++					callback.call(
++						table ?
++							root(this[i], first) :
++							this[i],
++						// Make sure that we do not leak memory by inadvertently discarding
++						// the original fragment (which might have attached data) instead of
++						// using it; in addition, use the original fragment object for the last
++						// item instead of first because it can end up being emptied incorrectly
++						// in certain situations (Bug #8070).
++						// Fragments from the fragment cache must always be cloned and never used
++						// in place.
++						results.cacheable || (l > 1 && i < lastIndex) ?
++							jQuery.clone( fragment, true, true ) :
++							fragment
++					);
++				}
++			}
++
++			if ( scripts.length ) {
++				jQuery.each( scripts, evalScript );
++			}
++		}
++
++		return this;
++	}
++});
++
++function root( elem, cur ) {
++	return jQuery.nodeName(elem, "table") ?
++		(elem.getElementsByTagName("tbody")[0] ||
++		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
++		elem;
++}
++
++function cloneCopyEvent( src, dest ) {
++
++	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
++		return;
++	}
++
++	var internalKey = jQuery.expando,
++		oldData = jQuery.data( src ),
++		curData = jQuery.data( dest, oldData );
++
++	// Switch to use the internal data object, if it exists, for the next
++	// stage of data copying
++	if ( (oldData = oldData[ internalKey ]) ) {
++		var events = oldData.events;
++				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
++
++		if ( events ) {
++			delete curData.handle;
++			curData.events = {};
++
++			for ( var type in events ) {
++				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
++					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
++				}
++			}
++		}
++	}
++}
++
++function cloneFixAttributes( src, dest ) {
++	var nodeName;
++
++	// We do not need to do anything for non-Elements
++	if ( dest.nodeType !== 1 ) {
++		return;
++	}
++
++	// clearAttributes removes the attributes, which we don't want,
++	// but also removes the attachEvent events, which we *do* want
++	if ( dest.clearAttributes ) {
++		dest.clearAttributes();
++	}
++
++	// mergeAttributes, in contrast, only merges back on the
++	// original attributes, not the events
++	if ( dest.mergeAttributes ) {
++		dest.mergeAttributes( src );
++	}
++
++	nodeName = dest.nodeName.toLowerCase();
++
++	// IE6-8 fail to clone children inside object elements that use
++	// the proprietary classid attribute value (rather than the type
++	// attribute) to identify the type of content to display
++	if ( nodeName === "object" ) {
++		dest.outerHTML = src.outerHTML;
++
++	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
++		// IE6-8 fails to persist the checked state of a cloned checkbox
++		// or radio button. Worse, IE6-7 fail to give the cloned element
++		// a checked appearance if the defaultChecked value isn't also set
++		if ( src.checked ) {
++			dest.defaultChecked = dest.checked = src.checked;
++		}
++
++		// IE6-7 get confused and end up setting the value of a cloned
++		// checkbox/radio button to an empty string instead of "on"
++		if ( dest.value !== src.value ) {
++			dest.value = src.value;
++		}
++
++	// IE6-8 fails to return the selected option to the default selected
++	// state when cloning options
++	} else if ( nodeName === "option" ) {
++		dest.selected = src.defaultSelected;
++
++	// IE6-8 fails to set the defaultValue to the correct value when
++	// cloning other types of input fields
++	} else if ( nodeName === "input" || nodeName === "textarea" ) {
++		dest.defaultValue = src.defaultValue;
++	}
++
++	// Event data gets referenced instead of copied if the expando
++	// gets copied too
++	dest.removeAttribute( jQuery.expando );
++}
++
++jQuery.buildFragment = function( args, nodes, scripts ) {
++	var fragment, cacheable, cacheresults, doc;
++
++  // nodes may contain either an explicit document object,
++  // a jQuery collection or context object.
++  // If nodes[0] contains a valid object to assign to doc
++  if ( nodes && nodes[0] ) {
++    doc = nodes[0].ownerDocument || nodes[0];
++  }
++
++  // Ensure that an attr object doesn't incorrectly stand in as a document object
++	// Chrome and Firefox seem to allow this to occur and will throw exception
++	// Fixes #8950
++	if ( !doc.createDocumentFragment ) {
++		doc = document;
++	}
++
++	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
++	// Cloning options loses the selected state, so don't cache them
++	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
++	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
++	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
++		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
++
++		cacheable = true;
++
++		cacheresults = jQuery.fragments[ args[0] ];
++		if ( cacheresults && cacheresults !== 1 ) {
++			fragment = cacheresults;
++		}
++	}
++
++	if ( !fragment ) {
++		fragment = doc.createDocumentFragment();
++		jQuery.clean( args, doc, fragment, scripts );
++	}
++
++	if ( cacheable ) {
++		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
++	}
++
++	return { fragment: fragment, cacheable: cacheable };
++};
++
++jQuery.fragments = {};
++
++jQuery.each({
++	appendTo: "append",
++	prependTo: "prepend",
++	insertBefore: "before",
++	insertAfter: "after",
++	replaceAll: "replaceWith"
++}, function( name, original ) {
++	jQuery.fn[ name ] = function( selector ) {
++		var ret = [],
++			insert = jQuery( selector ),
++			parent = this.length === 1 && this[0].parentNode;
++
++		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
++			insert[ original ]( this[0] );
++			return this;
++
++		} else {
++			for ( var i = 0, l = insert.length; i < l; i++ ) {
++				var elems = (i > 0 ? this.clone(true) : this).get();
++				jQuery( insert[i] )[ original ]( elems );
++				ret = ret.concat( elems );
++			}
++
++			return this.pushStack( ret, name, insert.selector );
++		}
++	};
++});
++
++function getAll( elem ) {
++	if ( "getElementsByTagName" in elem ) {
++		return elem.getElementsByTagName( "*" );
++
++	} else if ( "querySelectorAll" in elem ) {
++		return elem.querySelectorAll( "*" );
++
++	} else {
++		return [];
++	}
++}
++
++// Used in clean, fixes the defaultChecked property
++function fixDefaultChecked( elem ) {
++	if ( elem.type === "checkbox" || elem.type === "radio" ) {
++		elem.defaultChecked = elem.checked;
++	}
++}
++// Finds all inputs and passes them to fixDefaultChecked
++function findInputs( elem ) {
++	if ( jQuery.nodeName( elem, "input" ) ) {
++		fixDefaultChecked( elem );
++	} else if ( "getElementsByTagName" in elem ) {
++		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
++	}
++}
++
++jQuery.extend({
++	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
++		var clone = elem.cloneNode(true),
++				srcElements,
++				destElements,
++				i;
++
++		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
++				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
++			// IE copies events bound via attachEvent when using cloneNode.
++			// Calling detachEvent on the clone will also remove the events
++			// from the original. In order to get around this, we use some
++			// proprietary methods to clear the events. Thanks to MooTools
++			// guys for this hotness.
++
++			cloneFixAttributes( elem, clone );
++
++			// Using Sizzle here is crazy slow, so we use getElementsByTagName
++			// instead
++			srcElements = getAll( elem );
++			destElements = getAll( clone );
++
++			// Weird iteration because IE will replace the length property
++			// with an element if you are cloning the body and one of the
++			// elements on the page has a name or id of "length"
++			for ( i = 0; srcElements[i]; ++i ) {
++				cloneFixAttributes( srcElements[i], destElements[i] );
++			}
++		}
++
++		// Copy the events from the original to the clone
++		if ( dataAndEvents ) {
++			cloneCopyEvent( elem, clone );
++
++			if ( deepDataAndEvents ) {
++				srcElements = getAll( elem );
++				destElements = getAll( clone );
++
++				for ( i = 0; srcElements[i]; ++i ) {
++					cloneCopyEvent( srcElements[i], destElements[i] );
++				}
++			}
++		}
++
++		srcElements = destElements = null;
++
++		// Return the cloned set
++		return clone;
++	},
++
++	clean: function( elems, context, fragment, scripts ) {
++		var checkScriptType;
++
++		context = context || document;
++
++		// !context.createElement fails in IE with an error but returns typeof 'object'
++		if ( typeof context.createElement === "undefined" ) {
++			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
++		}
++
++		var ret = [], j;
++
++		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++			if ( typeof elem === "number" ) {
++				elem += "";
++			}
++
++			if ( !elem ) {
++				continue;
++			}
++
++			// Convert html string into DOM nodes
++			if ( typeof elem === "string" ) {
++				if ( !rhtml.test( elem ) ) {
++					elem = context.createTextNode( elem );
++				} else {
++					// Fix "XHTML"-style tags in all browsers
++					elem = elem.replace(rxhtmlTag, "<$1></$2>");
++
++					// Trim whitespace, otherwise indexOf won't work as expected
++					var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
++						wrap = wrapMap[ tag ] || wrapMap._default,
++						depth = wrap[0],
++						div = context.createElement("div");
++
++					// Go to html and back, then peel off extra wrappers
++					div.innerHTML = wrap[1] + elem + wrap[2];
++
++					// Move to the right depth
++					while ( depth-- ) {
++						div = div.lastChild;
++					}
++
++					// Remove IE's autoinserted <tbody> from table fragments
++					if ( !jQuery.support.tbody ) {
++
++						// String was a <table>, *may* have spurious <tbody>
++						var hasBody = rtbody.test(elem),
++							tbody = tag === "table" && !hasBody ?
++								div.firstChild && div.firstChild.childNodes :
++
++								// String was a bare <thead> or <tfoot>
++								wrap[1] === "<table>" && !hasBody ?
++									div.childNodes :
++									[];
++
++						for ( j = tbody.length - 1; j >= 0 ; --j ) {
++							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
++								tbody[ j ].parentNode.removeChild( tbody[ j ] );
++							}
++						}
++					}
++
++					// IE completely kills leading whitespace when innerHTML is used
++					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
++						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
++					}
++
++					elem = div.childNodes;
++				}
++			}
++
++			// Resets defaultChecked for any radios and checkboxes
++			// about to be appended to the DOM in IE 6/7 (#8060)
++			var len;
++			if ( !jQuery.support.appendChecked ) {
++				if ( elem[0] && typeof (len = elem.length) === "number" ) {
++					for ( j = 0; j < len; j++ ) {
++						findInputs( elem[j] );
++					}
++				} else {
++					findInputs( elem );
++				}
++			}
++
++			if ( elem.nodeType ) {
++				ret.push( elem );
++			} else {
++				ret = jQuery.merge( ret, elem );
++			}
++		}
++
++		if ( fragment ) {
++			checkScriptType = function( elem ) {
++				return !elem.type || rscriptType.test( elem.type );
++			};
++			for ( i = 0; ret[i]; i++ ) {
++				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
++					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
++
++				} else {
++					if ( ret[i].nodeType === 1 ) {
++						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
++
++						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
++					}
++					fragment.appendChild( ret[i] );
++				}
++			}
++		}
++
++		return ret;
++	},
++
++	cleanData: function( elems ) {
++		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
++			deleteExpando = jQuery.support.deleteExpando;
++
++		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
++				continue;
++			}
++
++			id = elem[ jQuery.expando ];
++
++			if ( id ) {
++				data = cache[ id ] && cache[ id ][ internalKey ];
++
++				if ( data && data.events ) {
++					for ( var type in data.events ) {
++						if ( special[ type ] ) {
++							jQuery.event.remove( elem, type );
++
++						// This is a shortcut to avoid jQuery.event.remove's overhead
++						} else {
++							jQuery.removeEvent( elem, type, data.handle );
++						}
++					}
++
++					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
++					if ( data.handle ) {
++						data.handle.elem = null;
++					}
++				}
++
++				if ( deleteExpando ) {
++					delete elem[ jQuery.expando ];
++
++				} else if ( elem.removeAttribute ) {
++					elem.removeAttribute( jQuery.expando );
++				}
++
++				delete cache[ id ];
++			}
++		}
++	}
++});
++
++function evalScript( i, elem ) {
++	if ( elem.src ) {
++		jQuery.ajax({
++			url: elem.src,
++			async: false,
++			dataType: "script"
++		});
++	} else {
++		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
++	}
++
++	if ( elem.parentNode ) {
++		elem.parentNode.removeChild( elem );
++	}
++}
++
++
++
++var ralpha = /alpha\([^)]*\)/i,
++	ropacity = /opacity=([^)]*)/,
++	// fixed for IE9, see #8346
++	rupper = /([A-Z]|^ms)/g,
++	rnumpx = /^-?\d+(?:px)?$/i,
++	rnum = /^-?\d/,
++	rrelNum = /^[+\-]=/,
++	rrelNumFilter = /[^+\-\.\de]+/g,
++
++	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
++	cssWidth = [ "Left", "Right" ],
++	cssHeight = [ "Top", "Bottom" ],
++	curCSS,
++
++	getComputedStyle,
++	currentStyle;
++
++jQuery.fn.css = function( name, value ) {
++	// Setting 'undefined' is a no-op
++	if ( arguments.length === 2 && value === undefined ) {
++		return this;
++	}
++
++	return jQuery.access( this, name, value, true, function( elem, name, value ) {
++		return value !== undefined ?
++			jQuery.style( elem, name, value ) :
++			jQuery.css( elem, name );
++	});
++};
++
++jQuery.extend({
++	// Add in style property hooks for overriding the default
++	// behavior of getting and setting a style property
++	cssHooks: {
++		opacity: {
++			get: function( elem, computed ) {
++				if ( computed ) {
++					// We should always get a number back from opacity
++					var ret = curCSS( elem, "opacity", "opacity" );
++					return ret === "" ? "1" : ret;
++
++				} else {
++					return elem.style.opacity;
++				}
++			}
++		}
++	},
++
++	// Exclude the following css properties to add px
++	cssNumber: {
++		"fillOpacity": true,
++		"fontWeight": true,
++		"lineHeight": true,
++		"opacity": true,
++		"orphans": true,
++		"widows": true,
++		"zIndex": true,
++		"zoom": true
++	},
++
++	// Add in properties whose names you wish to fix before
++	// setting or getting the value
++	cssProps: {
++		// normalize float css property
++		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
++	},
++
++	// Get and set the style property on a DOM Node
++	style: function( elem, name, value, extra ) {
++		// Don't set styles on text and comment nodes
++		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
++			return;
++		}
++
++		// Make sure that we're working with the right name
++		var ret, type, origName = jQuery.camelCase( name ),
++			style = elem.style, hooks = jQuery.cssHooks[ origName ];
++
++		name = jQuery.cssProps[ origName ] || origName;
++
++		// Check if we're setting a value
++		if ( value !== undefined ) {
++			type = typeof value;
++
++			// Make sure that NaN and null values aren't set. See: #7116
++			if ( type === "number" && isNaN( value ) || value == null ) {
++				return;
++			}
++
++			// convert relative number strings (+= or -=) to relative numbers. #7345
++			if ( type === "string" && rrelNum.test( value ) ) {
++				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
++				// Fixes bug #9237
++				type = "number";
++			}
++
++			// If a number was passed in, add 'px' to the (except for certain CSS properties)
++			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
++				value += "px";
++			}
++
++			// If a hook was provided, use that value, otherwise just set the specified value
++			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
++				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
++				// Fixes bug #5509
++				try {
++					style[ name ] = value;
++				} catch(e) {}
++			}
++
++		} else {
++			// If a hook was provided get the non-computed value from there
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
++				return ret;
++			}
++
++			// Otherwise just get the value from the style object
++			return style[ name ];
++		}
++	},
++
++	css: function( elem, name, extra ) {
++		var ret, hooks;
++
++		// Make sure that we're working with the right name
++		name = jQuery.camelCase( name );
++		hooks = jQuery.cssHooks[ name ];
++		name = jQuery.cssProps[ name ] || name;
++
++		// cssFloat needs a special treatment
++		if ( name === "cssFloat" ) {
++			name = "float";
++		}
++
++		// If a hook was provided get the computed value from there
++		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
++			return ret;
++
++		// Otherwise, if a way to get the computed value exists, use that
++		} else if ( curCSS ) {
++			return curCSS( elem, name );
++		}
++	},
++
++	// A method for quickly swapping in/out CSS properties to get correct calculations
++	swap: function( elem, options, callback ) {
++		var old = {};
++
++		// Remember the old values, and insert the new ones
++		for ( var name in options ) {
++			old[ name ] = elem.style[ name ];
++			elem.style[ name ] = options[ name ];
++		}
++
++		callback.call( elem );
++
++		// Revert the old values
++		for ( name in options ) {
++			elem.style[ name ] = old[ name ];
++		}
++	}
++});
++
++// DEPRECATED, Use jQuery.css() instead
++jQuery.curCSS = jQuery.css;
++
++jQuery.each(["height", "width"], function( i, name ) {
++	jQuery.cssHooks[ name ] = {
++		get: function( elem, computed, extra ) {
++			var val;
++
++			if ( computed ) {
++				if ( elem.offsetWidth !== 0 ) {
++					return getWH( elem, name, extra );
++				} else {
++					jQuery.swap( elem, cssShow, function() {
++						val = getWH( elem, name, extra );
++					});
++				}
++
++				return val;
++			}
++		},
++
++		set: function( elem, value ) {
++			if ( rnumpx.test( value ) ) {
++				// ignore negative width and height values #1599
++				value = parseFloat( value );
++
++				if ( value >= 0 ) {
++					return value + "px";
++				}
++
++			} else {
++				return value;
++			}
++		}
++	};
++});
++
++if ( !jQuery.support.opacity ) {
++	jQuery.cssHooks.opacity = {
++		get: function( elem, computed ) {
++			// IE uses filters for opacity
++			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
++				( parseFloat( RegExp.$1 ) / 100 ) + "" :
++				computed ? "1" : "";
++		},
++
++		set: function( elem, value ) {
++			var style = elem.style,
++				currentStyle = elem.currentStyle;
++
++			// IE has trouble with opacity if it does not have layout
++			// Force it by setting the zoom level
++			style.zoom = 1;
++
++			// Set the alpha filter to set the opacity
++			var opacity = jQuery.isNaN( value ) ?
++				"" :
++				"alpha(opacity=" + value * 100 + ")",
++				filter = currentStyle && currentStyle.filter || style.filter || "";
++
++			style.filter = ralpha.test( filter ) ?
++				filter.replace( ralpha, opacity ) :
++				filter + " " + opacity;
++		}
++	};
++}
++
++jQuery(function() {
++	// This hook cannot be added until DOM ready because the support test
++	// for it is not run until after DOM ready
++	if ( !jQuery.support.reliableMarginRight ) {
++		jQuery.cssHooks.marginRight = {
++			get: function( elem, computed ) {
++				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++				// Work around by temporarily setting element display to inline-block
++				var ret;
++				jQuery.swap( elem, { "display": "inline-block" }, function() {
++					if ( computed ) {
++						ret = curCSS( elem, "margin-right", "marginRight" );
++					} else {
++						ret = elem.style.marginRight;
++					}
++				});
++				return ret;
++			}
++		};
++	}
++});
++
++if ( document.defaultView && document.defaultView.getComputedStyle ) {
++	getComputedStyle = function( elem, name ) {
++		var ret, defaultView, computedStyle;
++
++		name = name.replace( rupper, "-$1" ).toLowerCase();
++
++		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
++			return undefined;
++		}
++
++		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
++			ret = computedStyle.getPropertyValue( name );
++			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
++				ret = jQuery.style( elem, name );
++			}
++		}
++
++		return ret;
++	};
++}
++
++if ( document.documentElement.currentStyle ) {
++	currentStyle = function( elem, name ) {
++		var left,
++			ret = elem.currentStyle && elem.currentStyle[ name ],
++			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
++			style = elem.style;
++
++		// From the awesome hack by Dean Edwards
++		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
++
++		// If we're not dealing with a regular pixel number
++		// but a number that has a weird ending, we need to convert it to pixels
++		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
++			// Remember the original values
++			left = style.left;
++
++			// Put in the new values to get a computed value out
++			if ( rsLeft ) {
++				elem.runtimeStyle.left = elem.currentStyle.left;
++			}
++			style.left = name === "fontSize" ? "1em" : (ret || 0);
++			ret = style.pixelLeft + "px";
++
++			// Revert the changed values
++			style.left = left;
++			if ( rsLeft ) {
++				elem.runtimeStyle.left = rsLeft;
++			}
++		}
++
++		return ret === "" ? "auto" : ret;
++	};
++}
++
++curCSS = getComputedStyle || currentStyle;
++
++function getWH( elem, name, extra ) {
++
++	// Start with offset property
++	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
++		which = name === "width" ? cssWidth : cssHeight;
++
++	if ( val > 0 ) {
++		if ( extra !== "border" ) {
++			jQuery.each( which, function() {
++				if ( !extra ) {
++					val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
++				}
++				if ( extra === "margin" ) {
++					val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
++				} else {
++					val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
++				}
++			});
++		}
++
++		return val + "px";
++	}
++
++	// Fall back to computed then uncomputed css if necessary
++	val = curCSS( elem, name, name );
++	if ( val < 0 || val == null ) {
++		val = elem.style[ name ] || 0;
++	}
++	// Normalize "", auto, and prepare for extra
++	val = parseFloat( val ) || 0;
++
++	// Add padding, border, margin
++	if ( extra ) {
++		jQuery.each( which, function() {
++			val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
++			if ( extra !== "padding" ) {
++				val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
++			}
++			if ( extra === "margin" ) {
++				val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
++			}
++		});
++	}
++
++	return val + "px";
++}
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.hidden = function( elem ) {
++		var width = elem.offsetWidth,
++			height = elem.offsetHeight;
++
++		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
++	};
++
++	jQuery.expr.filters.visible = function( elem ) {
++		return !jQuery.expr.filters.hidden( elem );
++	};
++}
++
++
++
++
++var r20 = /%20/g,
++	rbracket = /\[\]$/,
++	rCRLF = /\r?\n/g,
++	rhash = /#.*$/,
++	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
++	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
++	// #7653, #8125, #8152: local protocol detection
++	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
++	rnoContent = /^(?:GET|HEAD)$/,
++	rprotocol = /^\/\//,
++	rquery = /\?/,
++	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
++	rselectTextarea = /^(?:select|textarea)/i,
++	rspacesAjax = /\s+/,
++	rts = /([?&])_=[^&]*/,
++	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
++
++	// Keep a copy of the old load method
++	_load = jQuery.fn.load,
++
++	/* Prefilters
++	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
++	 * 2) These are called:
++	 *    - BEFORE asking for a transport
++	 *    - AFTER param serialization (s.data is a string if s.processData is true)
++	 * 3) key is the dataType
++	 * 4) the catchall symbol "*" can be used
++	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
++	 */
++	prefilters = {},
++
++	/* Transports bindings
++	 * 1) key is the dataType
++	 * 2) the catchall symbol "*" can be used
++	 * 3) selection will start with transport dataType and THEN go to "*" if needed
++	 */
++	transports = {},
++
++	// Document location
++	ajaxLocation,
++
++	// Document location segments
++	ajaxLocParts;
++
++// #8138, IE may throw an exception when accessing
++// a field from window.location if document.domain has been set
++try {
++	ajaxLocation = location.href;
++} catch( e ) {
++	// Use the href attribute of an A element
++	// since IE will modify it given document.location
++	ajaxLocation = document.createElement( "a" );
++	ajaxLocation.href = "";
++	ajaxLocation = ajaxLocation.href;
++}
++
++// Segment location into parts
++ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
++
++// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
++function addToPrefiltersOrTransports( structure ) {
++
++	// dataTypeExpression is optional and defaults to "*"
++	return function( dataTypeExpression, func ) {
++
++		if ( typeof dataTypeExpression !== "string" ) {
++			func = dataTypeExpression;
++			dataTypeExpression = "*";
++		}
++
++		if ( jQuery.isFunction( func ) ) {
++			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
++				i = 0,
++				length = dataTypes.length,
++				dataType,
++				list,
++				placeBefore;
++
++			// For each dataType in the dataTypeExpression
++			for(; i < length; i++ ) {
++				dataType = dataTypes[ i ];
++				// We control if we're asked to add before
++				// any existing element
++				placeBefore = /^\+/.test( dataType );
++				if ( placeBefore ) {
++					dataType = dataType.substr( 1 ) || "*";
++				}
++				list = structure[ dataType ] = structure[ dataType ] || [];
++				// then we add to the structure accordingly
++				list[ placeBefore ? "unshift" : "push" ]( func );
++			}
++		}
++	};
++}
++
++// Base inspection function for prefilters and transports
++function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
++		dataType /* internal */, inspected /* internal */ ) {
++
++	dataType = dataType || options.dataTypes[ 0 ];
++	inspected = inspected || {};
++
++	inspected[ dataType ] = true;
++
++	var list = structure[ dataType ],
++		i = 0,
++		length = list ? list.length : 0,
++		executeOnly = ( structure === prefilters ),
++		selection;
++
++	for(; i < length && ( executeOnly || !selection ); i++ ) {
++		selection = list[ i ]( options, originalOptions, jqXHR );
++		// If we got redirected to another dataType
++		// we try there if executing only and not done already
++		if ( typeof selection === "string" ) {
++			if ( !executeOnly || inspected[ selection ] ) {
++				selection = undefined;
++			} else {
++				options.dataTypes.unshift( selection );
++				selection = inspectPrefiltersOrTransports(
++						structure, options, originalOptions, jqXHR, selection, inspected );
++			}
++		}
++	}
++	// If we're only executing or nothing was selected
++	// we try the catchall dataType if not done already
++	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
++		selection = inspectPrefiltersOrTransports(
++				structure, options, originalOptions, jqXHR, "*", inspected );
++	}
++	// unnecessary when only executing (prefilters)
++	// but it'll be ignored by the caller in that case
++	return selection;
++}
++
++jQuery.fn.extend({
++	load: function( url, params, callback ) {
++		if ( typeof url !== "string" && _load ) {
++			return _load.apply( this, arguments );
++
++		// Don't do a request if no elements are being requested
++		} else if ( !this.length ) {
++			return this;
++		}
++
++		var off = url.indexOf( " " );
++		if ( off >= 0 ) {
++			var selector = url.slice( off, url.length );
++			url = url.slice( 0, off );
++		}
++
++		// Default to a GET request
++		var type = "GET";
++
++		// If the second parameter was provided
++		if ( params ) {
++			// If it's a function
++			if ( jQuery.isFunction( params ) ) {
++				// We assume that it's the callback
++				callback = params;
++				params = undefined;
++
++			// Otherwise, build a param string
++			} else if ( typeof params === "object" ) {
++				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
++				type = "POST";
++			}
++		}
++
++		var self = this;
++
++		// Request the remote document
++		jQuery.ajax({
++			url: url,
++			type: type,
++			dataType: "html",
++			data: params,
++			// Complete callback (responseText is used internally)
++			complete: function( jqXHR, status, responseText ) {
++				// Store the response as specified by the jqXHR object
++				responseText = jqXHR.responseText;
++				// If successful, inject the HTML into all the matched elements
++				if ( jqXHR.isResolved() ) {
++					// #4825: Get the actual response in case
++					// a dataFilter is present in ajaxSettings
++					jqXHR.done(function( r ) {
++						responseText = r;
++					});
++					// See if a selector was specified
++					self.html( selector ?
++						// Create a dummy div to hold the results
++						jQuery("<div>")
++							// inject the contents of the document in, removing the scripts
++							// to avoid any 'Permission Denied' errors in IE
++							.append(responseText.replace(rscript, ""))
++
++							// Locate the specified elements
++							.find(selector) :
++
++						// If not, just inject the full result
++						responseText );
++				}
++
++				if ( callback ) {
++					self.each( callback, [ responseText, status, jqXHR ] );
++				}
++			}
++		});
++
++		return this;
++	},
++
++	serialize: function() {
++		return jQuery.param( this.serializeArray() );
++	},
++
++	serializeArray: function() {
++		return this.map(function(){
++			return this.elements ? jQuery.makeArray( this.elements ) : this;
++		})
++		.filter(function(){
++			return this.name && !this.disabled &&
++				( this.checked || rselectTextarea.test( this.nodeName ) ||
++					rinput.test( this.type ) );
++		})
++		.map(function( i, elem ){
++			var val = jQuery( this ).val();
++
++			return val == null ?
++				null :
++				jQuery.isArray( val ) ?
++					jQuery.map( val, function( val, i ){
++						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++					}) :
++					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++		}).get();
++	}
++});
++
++// Attach a bunch of functions for handling common AJAX events
++jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
++	jQuery.fn[ o ] = function( f ){
++		return this.bind( o, f );
++	};
++});
++
++jQuery.each( [ "get", "post" ], function( i, method ) {
++	jQuery[ method ] = function( url, data, callback, type ) {
++		// shift arguments if data argument was omitted
++		if ( jQuery.isFunction( data ) ) {
++			type = type || callback;
++			callback = data;
++			data = undefined;
++		}
++
++		return jQuery.ajax({
++			type: method,
++			url: url,
++			data: data,
++			success: callback,
++			dataType: type
++		});
++	};
++});
++
++jQuery.extend({
++
++	getScript: function( url, callback ) {
++		return jQuery.get( url, undefined, callback, "script" );
++	},
++
++	getJSON: function( url, data, callback ) {
++		return jQuery.get( url, data, callback, "json" );
++	},
++
++	// Creates a full fledged settings object into target
++	// with both ajaxSettings and settings fields.
++	// If target is omitted, writes into ajaxSettings.
++	ajaxSetup: function ( target, settings ) {
++		if ( !settings ) {
++			// Only one parameter, we extend ajaxSettings
++			settings = target;
++			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
++		} else {
++			// target was provided, we extend into it
++			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
++		}
++		// Flatten fields we don't want deep extended
++		for( var field in { context: 1, url: 1 } ) {
++			if ( field in settings ) {
++				target[ field ] = settings[ field ];
++			} else if( field in jQuery.ajaxSettings ) {
++				target[ field ] = jQuery.ajaxSettings[ field ];
++			}
++		}
++		return target;
++	},
++
++	ajaxSettings: {
++		url: ajaxLocation,
++		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
++		global: true,
++		type: "GET",
++		contentType: "application/x-www-form-urlencoded",
++		processData: true,
++		async: true,
++		/*
++		timeout: 0,
++		data: null,
++		dataType: null,
++		username: null,
++		password: null,
++		cache: null,
++		traditional: false,
++		headers: {},
++		*/
++
++		accepts: {
++			xml: "application/xml, text/xml",
++			html: "text/html",
++			text: "text/plain",
++			json: "application/json, text/javascript",
++			"*": "*/*"
++		},
++
++		contents: {
++			xml: /xml/,
++			html: /html/,
++			json: /json/
++		},
++
++		responseFields: {
++			xml: "responseXML",
++			text: "responseText"
++		},
++
++		// List of data converters
++		// 1) key format is "source_type destination_type" (a single space in-between)
++		// 2) the catchall symbol "*" can be used for source_type
++		converters: {
++
++			// Convert anything to text
++			"* text": window.String,
++
++			// Text to html (true = no transformation)
++			"text html": true,
++
++			// Evaluate text as a json expression
++			"text json": jQuery.parseJSON,
++
++			// Parse text as xml
++			"text xml": jQuery.parseXML
++		}
++	},
++
++	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
++	ajaxTransport: addToPrefiltersOrTransports( transports ),
++
++	// Main method
++	ajax: function( url, options ) {
++
++		// If url is an object, simulate pre-1.5 signature
++		if ( typeof url === "object" ) {
++			options = url;
++			url = undefined;
++		}
++
++		// Force options to be an object
++		options = options || {};
++
++		var // Create the final options object
++			s = jQuery.ajaxSetup( {}, options ),
++			// Callbacks context
++			callbackContext = s.context || s,
++			// Context for global events
++			// It's the callbackContext if one was provided in the options
++			// and if it's a DOM node or a jQuery collection
++			globalEventContext = callbackContext !== s &&
++				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
++						jQuery( callbackContext ) : jQuery.event,
++			// Deferreds
++			deferred = jQuery.Deferred(),
++			completeDeferred = jQuery._Deferred(),
++			// Status-dependent callbacks
++			statusCode = s.statusCode || {},
++			// ifModified key
++			ifModifiedKey,
++			// Headers (they are sent all at once)
++			requestHeaders = {},
++			requestHeadersNames = {},
++			// Response headers
++			responseHeadersString,
++			responseHeaders,
++			// transport
++			transport,
++			// timeout handle
++			timeoutTimer,
++			// Cross-domain detection vars
++			parts,
++			// The jqXHR state
++			state = 0,
++			// To know if global events are to be dispatched
++			fireGlobals,
++			// Loop variable
++			i,
++			// Fake xhr
++			jqXHR = {
++
++				readyState: 0,
++
++				// Caches the header
++				setRequestHeader: function( name, value ) {
++					if ( !state ) {
++						var lname = name.toLowerCase();
++						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
++						requestHeaders[ name ] = value;
++					}
++					return this;
++				},
++
++				// Raw string
++				getAllResponseHeaders: function() {
++					return state === 2 ? responseHeadersString : null;
++				},
++
++				// Builds headers hashtable if needed
++				getResponseHeader: function( key ) {
++					var match;
++					if ( state === 2 ) {
++						if ( !responseHeaders ) {
++							responseHeaders = {};
++							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
++								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
++							}
++						}
++						match = responseHeaders[ key.toLowerCase() ];
++					}
++					return match === undefined ? null : match;
++				},
++
++				// Overrides response content-type header
++				overrideMimeType: function( type ) {
++					if ( !state ) {
++						s.mimeType = type;
++					}
++					return this;
++				},
++
++				// Cancel the request
++				abort: function( statusText ) {
++					statusText = statusText || "abort";
++					if ( transport ) {
++						transport.abort( statusText );
++					}
++					done( 0, statusText );
++					return this;
++				}
++			};
++
++		// Callback for when everything is done
++		// It is defined here because jslint complains if it is declared
++		// at the end of the function (which would be more logical and readable)
++		function done( status, statusText, responses, headers ) {
++
++			// Called once
++			if ( state === 2 ) {
++				return;
++			}
++
++			// State is "done" now
++			state = 2;
++
++			// Clear timeout if it exists
++			if ( timeoutTimer ) {
++				clearTimeout( timeoutTimer );
++			}
++
++			// Dereference transport for early garbage collection
++			// (no matter how long the jqXHR object will be used)
++			transport = undefined;
++
++			// Cache response headers
++			responseHeadersString = headers || "";
++
++			// Set readyState
++			jqXHR.readyState = status ? 4 : 0;
++
++			var isSuccess,
++				success,
++				error,
++				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
++				lastModified,
++				etag;
++
++			// If successful, handle type chaining
++			if ( status >= 200 && status < 300 || status === 304 ) {
++
++				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++				if ( s.ifModified ) {
++
++					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
++						jQuery.lastModified[ ifModifiedKey ] = lastModified;
++					}
++					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
++						jQuery.etag[ ifModifiedKey ] = etag;
++					}
++				}
++
++				// If not modified
++				if ( status === 304 ) {
++
++					statusText = "notmodified";
++					isSuccess = true;
++
++				// If we have data
++				} else {
++
++					try {
++						success = ajaxConvert( s, response );
++						statusText = "success";
++						isSuccess = true;
++					} catch(e) {
++						// We have a parsererror
++						statusText = "parsererror";
++						error = e;
++					}
++				}
++			} else {
++				// We extract error from statusText
++				// then normalize statusText and status for non-aborts
++				error = statusText;
++				if( !statusText || status ) {
++					statusText = "error";
++					if ( status < 0 ) {
++						status = 0;
++					}
++				}
++			}
++
++			// Set data for the fake xhr object
++			jqXHR.status = status;
++			jqXHR.statusText = statusText;
++
++			// Success/Error
++			if ( isSuccess ) {
++				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
++			} else {
++				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
++			}
++
++			// Status-dependent callbacks
++			jqXHR.statusCode( statusCode );
++			statusCode = undefined;
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
++						[ jqXHR, s, isSuccess ? success : error ] );
++			}
++
++			// Complete
++			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
++				// Handle the global AJAX counter
++				if ( !( --jQuery.active ) ) {
++					jQuery.event.trigger( "ajaxStop" );
++				}
++			}
++		}
++
++		// Attach deferreds
++		deferred.promise( jqXHR );
++		jqXHR.success = jqXHR.done;
++		jqXHR.error = jqXHR.fail;
++		jqXHR.complete = completeDeferred.done;
++
++		// Status-dependent callbacks
++		jqXHR.statusCode = function( map ) {
++			if ( map ) {
++				var tmp;
++				if ( state < 2 ) {
++					for( tmp in map ) {
++						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
++					}
++				} else {
++					tmp = map[ jqXHR.status ];
++					jqXHR.then( tmp, tmp );
++				}
++			}
++			return this;
++		};
++
++		// Remove hash character (#7531: and string promotion)
++		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
++		// We also use the url parameter if available
++		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
++
++		// Extract dataTypes list
++		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
++
++		// Determine if a cross-domain request is in order
++		if ( s.crossDomain == null ) {
++			parts = rurl.exec( s.url.toLowerCase() );
++			s.crossDomain = !!( parts &&
++				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
++					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
++						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
++			);
++		}
++
++		// Convert data if not already a string
++		if ( s.data && s.processData && typeof s.data !== "string" ) {
++			s.data = jQuery.param( s.data, s.traditional );
++		}
++
++		// Apply prefilters
++		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
++
++		// If request was aborted inside a prefiler, stop there
++		if ( state === 2 ) {
++			return false;
++		}
++
++		// We can fire global events as of now if asked to
++		fireGlobals = s.global;
++
++		// Uppercase the type
++		s.type = s.type.toUpperCase();
++
++		// Determine if request has content
++		s.hasContent = !rnoContent.test( s.type );
++
++		// Watch for a new set of requests
++		if ( fireGlobals && jQuery.active++ === 0 ) {
++			jQuery.event.trigger( "ajaxStart" );
++		}
++
++		// More options handling for requests with no content
++		if ( !s.hasContent ) {
++
++			// If data is available, append data to url
++			if ( s.data ) {
++				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
++			}
++
++			// Get ifModifiedKey before adding the anti-cache parameter
++			ifModifiedKey = s.url;
++
++			// Add anti-cache in url if needed
++			if ( s.cache === false ) {
++
++				var ts = jQuery.now(),
++					// try replacing _= if it is there
++					ret = s.url.replace( rts, "$1_=" + ts );
++
++				// if nothing was replaced, add timestamp to the end
++				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
++			}
++		}
++
++		// Set the correct header, if data is being sent
++		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
++			jqXHR.setRequestHeader( "Content-Type", s.contentType );
++		}
++
++		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++		if ( s.ifModified ) {
++			ifModifiedKey = ifModifiedKey || s.url;
++			if ( jQuery.lastModified[ ifModifiedKey ] ) {
++				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
++			}
++			if ( jQuery.etag[ ifModifiedKey ] ) {
++				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
++			}
++		}
++
++		// Set the Accepts header for the server, depending on the dataType
++		jqXHR.setRequestHeader(
++			"Accept",
++			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
++				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
++				s.accepts[ "*" ]
++		);
++
++		// Check for headers option
++		for ( i in s.headers ) {
++			jqXHR.setRequestHeader( i, s.headers[ i ] );
++		}
++
++		// Allow custom headers/mimetypes and early abort
++		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
++				// Abort if not done already
++				jqXHR.abort();
++				return false;
++
++		}
++
++		// Install callbacks on deferreds
++		for ( i in { success: 1, error: 1, complete: 1 } ) {
++			jqXHR[ i ]( s[ i ] );
++		}
++
++		// Get transport
++		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
++
++		// If no transport, we auto-abort
++		if ( !transport ) {
++			done( -1, "No Transport" );
++		} else {
++			jqXHR.readyState = 1;
++			// Send global event
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
++			}
++			// Timeout
++			if ( s.async && s.timeout > 0 ) {
++				timeoutTimer = setTimeout( function(){
++					jqXHR.abort( "timeout" );
++				}, s.timeout );
++			}
++
++			try {
++				state = 1;
++				transport.send( requestHeaders, done );
++			} catch (e) {
++				// Propagate exception as error if not done
++				if ( status < 2 ) {
++					done( -1, e );
++				// Simply rethrow otherwise
++				} else {
++					jQuery.error( e );
++				}
++			}
++		}
++
++		return jqXHR;
++	},
++
++	// Serialize an array of form elements or a set of
++	// key/values into a query string
++	param: function( a, traditional ) {
++		var s = [],
++			add = function( key, value ) {
++				// If value is a function, invoke it and return its value
++				value = jQuery.isFunction( value ) ? value() : value;
++				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
++			};
++
++		// Set traditional to true for jQuery <= 1.3.2 behavior.
++		if ( traditional === undefined ) {
++			traditional = jQuery.ajaxSettings.traditional;
++		}
++
++		// If an array was passed in, assume that it is an array of form elements.
++		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
++			// Serialize the form elements
++			jQuery.each( a, function() {
++				add( this.name, this.value );
++			});
++
++		} else {
++			// If traditional, encode the "old" way (the way 1.3.2 or older
++			// did it), otherwise encode params recursively.
++			for ( var prefix in a ) {
++				buildParams( prefix, a[ prefix ], traditional, add );
++			}
++		}
++
++		// Return the resulting serialization
++		return s.join( "&" ).replace( r20, "+" );
++	}
++});
++
++function buildParams( prefix, obj, traditional, add ) {
++	if ( jQuery.isArray( obj ) ) {
++		// Serialize array item.
++		jQuery.each( obj, function( i, v ) {
++			if ( traditional || rbracket.test( prefix ) ) {
++				// Treat each array item as a scalar.
++				add( prefix, v );
++
++			} else {
++				// If array item is non-scalar (array or object), encode its
++				// numeric index to resolve deserialization ambiguity issues.
++				// Note that rack (as of 1.0.0) can't currently deserialize
++				// nested arrays properly, and attempting to do so may cause
++				// a server error. Possible fixes are to modify rack's
++				// deserialization algorithm or to provide an option or flag
++				// to force array serialization to be shallow.
++				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
++			}
++		});
++
++	} else if ( !traditional && obj != null && typeof obj === "object" ) {
++		// Serialize object item.
++		for ( var name in obj ) {
++			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
++		}
++
++	} else {
++		// Serialize scalar item.
++		add( prefix, obj );
++	}
++}
++
++// This is still on the jQuery object... for now
++// Want to move this to jQuery.ajax some day
++jQuery.extend({
++
++	// Counter for holding the number of active queries
++	active: 0,
++
++	// Last-Modified header cache for next request
++	lastModified: {},
++	etag: {}
++
++});
++
++/* Handles responses to an ajax request:
++ * - sets all responseXXX fields accordingly
++ * - finds the right dataType (mediates between content-type and expected dataType)
++ * - returns the corresponding response
++ */
++function ajaxHandleResponses( s, jqXHR, responses ) {
++
++	var contents = s.contents,
++		dataTypes = s.dataTypes,
++		responseFields = s.responseFields,
++		ct,
++		type,
++		finalDataType,
++		firstDataType;
++
++	// Fill responseXXX fields
++	for( type in responseFields ) {
++		if ( type in responses ) {
++			jqXHR[ responseFields[type] ] = responses[ type ];
++		}
++	}
++
++	// Remove auto dataType and get content-type in the process
++	while( dataTypes[ 0 ] === "*" ) {
++		dataTypes.shift();
++		if ( ct === undefined ) {
++			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
++		}
++	}
++
++	// Check if we're dealing with a known content-type
++	if ( ct ) {
++		for ( type in contents ) {
++			if ( contents[ type ] && contents[ type ].test( ct ) ) {
++				dataTypes.unshift( type );
++				break;
++			}
++		}
++	}
++
++	// Check to see if we have a response for the expected dataType
++	if ( dataTypes[ 0 ] in responses ) {
++		finalDataType = dataTypes[ 0 ];
++	} else {
++		// Try convertible dataTypes
++		for ( type in responses ) {
++			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
++				finalDataType = type;
++				break;
++			}
++			if ( !firstDataType ) {
++				firstDataType = type;
++			}
++		}
++		// Or just use first one
++		finalDataType = finalDataType || firstDataType;
++	}
++
++	// If we found a dataType
++	// We add the dataType to the list if needed
++	// and return the corresponding response
++	if ( finalDataType ) {
++		if ( finalDataType !== dataTypes[ 0 ] ) {
++			dataTypes.unshift( finalDataType );
++		}
++		return responses[ finalDataType ];
++	}
++}
++
++// Chain conversions given the request and the original response
++function ajaxConvert( s, response ) {
++
++	// Apply the dataFilter if provided
++	if ( s.dataFilter ) {
++		response = s.dataFilter( response, s.dataType );
++	}
++
++	var dataTypes = s.dataTypes,
++		converters = {},
++		i,
++		key,
++		length = dataTypes.length,
++		tmp,
++		// Current and previous dataTypes
++		current = dataTypes[ 0 ],
++		prev,
++		// Conversion expression
++		conversion,
++		// Conversion function
++		conv,
++		// Conversion functions (transitive conversion)
++		conv1,
++		conv2;
++
++	// For each dataType in the chain
++	for( i = 1; i < length; i++ ) {
++
++		// Create converters map
++		// with lowercased keys
++		if ( i === 1 ) {
++			for( key in s.converters ) {
++				if( typeof key === "string" ) {
++					converters[ key.toLowerCase() ] = s.converters[ key ];
++				}
++			}
++		}
++
++		// Get the dataTypes
++		prev = current;
++		current = dataTypes[ i ];
++
++		// If current is auto dataType, update it to prev
++		if( current === "*" ) {
++			current = prev;
++		// If no auto and dataTypes are actually different
++		} else if ( prev !== "*" && prev !== current ) {
++
++			// Get the converter
++			conversion = prev + " " + current;
++			conv = converters[ conversion ] || converters[ "* " + current ];
++
++			// If there is no direct converter, search transitively
++			if ( !conv ) {
++				conv2 = undefined;
++				for( conv1 in converters ) {
++					tmp = conv1.split( " " );
++					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
++						conv2 = converters[ tmp[1] + " " + current ];
++						if ( conv2 ) {
++							conv1 = converters[ conv1 ];
++							if ( conv1 === true ) {
++								conv = conv2;
++							} else if ( conv2 === true ) {
++								conv = conv1;
++							}
++							break;
++						}
++					}
++				}
++			}
++			// If we found no converter, dispatch an error
++			if ( !( conv || conv2 ) ) {
++				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
++			}
++			// If found converter is not an equivalence
++			if ( conv !== true ) {
++				// Convert with 1 or 2 converters accordingly
++				response = conv ? conv( response ) : conv2( conv1(response) );
++			}
++		}
++	}
++	return response;
++}
++
++
++
++
++var jsc = jQuery.now(),
++	jsre = /(\=)\?(&|$)|\?\?/i;
++
++// Default jsonp settings
++jQuery.ajaxSetup({
++	jsonp: "callback",
++	jsonpCallback: function() {
++		return jQuery.expando + "_" + ( jsc++ );
++	}
++});
++
++// Detect, normalize options and install callbacks for jsonp requests
++jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
++
++	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
++		( typeof s.data === "string" );
++
++	if ( s.dataTypes[ 0 ] === "jsonp" ||
++		s.jsonp !== false && ( jsre.test( s.url ) ||
++				inspectData && jsre.test( s.data ) ) ) {
++
++		var responseContainer,
++			jsonpCallback = s.jsonpCallback =
++				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
++			previous = window[ jsonpCallback ],
++			url = s.url,
++			data = s.data,
++			replace = "$1" + jsonpCallback + "$2";
++
++		if ( s.jsonp !== false ) {
++			url = url.replace( jsre, replace );
++			if ( s.url === url ) {
++				if ( inspectData ) {
++					data = data.replace( jsre, replace );
++				}
++				if ( s.data === data ) {
++					// Add callback manually
++					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
++				}
++			}
++		}
++
++		s.url = url;
++		s.data = data;
++
++		// Install callback
++		window[ jsonpCallback ] = function( response ) {
++			responseContainer = [ response ];
++		};
++
++		// Clean-up function
++		jqXHR.always(function() {
++			// Set callback back to previous value
++			window[ jsonpCallback ] = previous;
++			// Call if it was a function and we have a response
++			if ( responseContainer && jQuery.isFunction( previous ) ) {
++				window[ jsonpCallback ]( responseContainer[ 0 ] );
++			}
++		});
++
++		// Use data converter to retrieve json after script execution
++		s.converters["script json"] = function() {
++			if ( !responseContainer ) {
++				jQuery.error( jsonpCallback + " was not called" );
++			}
++			return responseContainer[ 0 ];
++		};
++
++		// force json dataType
++		s.dataTypes[ 0 ] = "json";
++
++		// Delegate to script
++		return "script";
++	}
++});
++
++
++
++
++// Install script dataType
++jQuery.ajaxSetup({
++	accepts: {
++		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
++	},
++	contents: {
++		script: /javascript|ecmascript/
++	},
++	converters: {
++		"text script": function( text ) {
++			jQuery.globalEval( text );
++			return text;
++		}
++	}
++});
++
++// Handle cache's special case and global
++jQuery.ajaxPrefilter( "script", function( s ) {
++	if ( s.cache === undefined ) {
++		s.cache = false;
++	}
++	if ( s.crossDomain ) {
++		s.type = "GET";
++		s.global = false;
++	}
++});
++
++// Bind script tag hack transport
++jQuery.ajaxTransport( "script", function(s) {
++
++	// This transport only deals with cross domain requests
++	if ( s.crossDomain ) {
++
++		var script,
++			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
++
++		return {
++
++			send: function( _, callback ) {
++
++				script = document.createElement( "script" );
++
++				script.async = "async";
++
++				if ( s.scriptCharset ) {
++					script.charset = s.scriptCharset;
++				}
++
++				script.src = s.url;
++
++				// Attach handlers for all browsers
++				script.onload = script.onreadystatechange = function( _, isAbort ) {
++
++					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
++
++						// Handle memory leak in IE
++						script.onload = script.onreadystatechange = null;
++
++						// Remove the script
++						if ( head && script.parentNode ) {
++							head.removeChild( script );
++						}
++
++						// Dereference the script
++						script = undefined;
++
++						// Callback if not abort
++						if ( !isAbort ) {
++							callback( 200, "success" );
++						}
++					}
++				};
++				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
++				// This arises when a base node is used (#2709 and #4378).
++				head.insertBefore( script, head.firstChild );
++			},
++
++			abort: function() {
++				if ( script ) {
++					script.onload( 0, 1 );
++				}
++			}
++		};
++	}
++});
++
++
++
++
++var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
++	xhrOnUnloadAbort = window.ActiveXObject ? function() {
++		// Abort all pending requests
++		for ( var key in xhrCallbacks ) {
++			xhrCallbacks[ key ]( 0, 1 );
++		}
++	} : false,
++	xhrId = 0,
++	xhrCallbacks;
++
++// Functions to create xhrs
++function createStandardXHR() {
++	try {
++		return new window.XMLHttpRequest();
++	} catch( e ) {}
++}
++
++function createActiveXHR() {
++	try {
++		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
++	} catch( e ) {}
++}
++
++// Create the request object
++// (This is still attached to ajaxSettings for backward compatibility)
++jQuery.ajaxSettings.xhr = window.ActiveXObject ?
++	/* Microsoft failed to properly
++	 * implement the XMLHttpRequest in IE7 (can't request local files),
++	 * so we use the ActiveXObject when it is available
++	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
++	 * we need a fallback.
++	 */
++	function() {
++		return !this.isLocal && createStandardXHR() || createActiveXHR();
++	} :
++	// For all other browsers, use the standard XMLHttpRequest object
++	createStandardXHR;
++
++// Determine support properties
++(function( xhr ) {
++	jQuery.extend( jQuery.support, {
++		ajax: !!xhr,
++		cors: !!xhr && ( "withCredentials" in xhr )
++	});
++})( jQuery.ajaxSettings.xhr() );
++
++// Create transport if the browser can provide an xhr
++if ( jQuery.support.ajax ) {
++
++	jQuery.ajaxTransport(function( s ) {
++		// Cross domain only allowed if supported through XMLHttpRequest
++		if ( !s.crossDomain || jQuery.support.cors ) {
++
++			var callback;
++
++			return {
++				send: function( headers, complete ) {
++
++					// Get a new xhr
++					var xhr = s.xhr(),
++						handle,
++						i;
++
++					// Open the socket
++					// Passing null username, generates a login popup on Opera (#2865)
++					if ( s.username ) {
++						xhr.open( s.type, s.url, s.async, s.username, s.password );
++					} else {
++						xhr.open( s.type, s.url, s.async );
++					}
++
++					// Apply custom fields if provided
++					if ( s.xhrFields ) {
++						for ( i in s.xhrFields ) {
++							xhr[ i ] = s.xhrFields[ i ];
++						}
++					}
++
++					// Override mime type if needed
++					if ( s.mimeType && xhr.overrideMimeType ) {
++						xhr.overrideMimeType( s.mimeType );
++					}
++
++					// X-Requested-With header
++					// For cross-domain requests, seeing as conditions for a preflight are
++					// akin to a jigsaw puzzle, we simply never set it to be sure.
++					// (it can always be set on a per-request basis or even using ajaxSetup)
++					// For same-domain requests, won't change header if already provided.
++					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
++						headers[ "X-Requested-With" ] = "XMLHttpRequest";
++					}
++
++					// Need an extra try/catch for cross domain requests in Firefox 3
++					try {
++						for ( i in headers ) {
++							xhr.setRequestHeader( i, headers[ i ] );
++						}
++					} catch( _ ) {}
++
++					// Do send the request
++					// This may raise an exception which is actually
++					// handled in jQuery.ajax (so no try/catch here)
++					xhr.send( ( s.hasContent && s.data ) || null );
++
++					// Listener
++					callback = function( _, isAbort ) {
++
++						var status,
++							statusText,
++							responseHeaders,
++							responses,
++							xml;
++
++						// Firefox throws exceptions when accessing properties
++						// of an xhr when a network error occured
++						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
++						try {
++
++							// Was never called and is aborted or complete
++							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
++
++								// Only called once
++								callback = undefined;
++
++								// Do not keep as active anymore
++								if ( handle ) {
++									xhr.onreadystatechange = jQuery.noop;
++									if ( xhrOnUnloadAbort ) {
++										delete xhrCallbacks[ handle ];
++									}
++								}
++
++								// If it's an abort
++								if ( isAbort ) {
++									// Abort it manually if needed
++									if ( xhr.readyState !== 4 ) {
++										xhr.abort();
++									}
++								} else {
++									status = xhr.status;
++									responseHeaders = xhr.getAllResponseHeaders();
++									responses = {};
++									xml = xhr.responseXML;
++
++									// Construct response list
++									if ( xml && xml.documentElement /* #4958 */ ) {
++										responses.xml = xml;
++									}
++									responses.text = xhr.responseText;
++
++									// Firefox throws an exception when accessing
++									// statusText for faulty cross-domain requests
++									try {
++										statusText = xhr.statusText;
++									} catch( e ) {
++										// We normalize with Webkit giving an empty statusText
++										statusText = "";
++									}
++
++									// Filter status for non standard behaviors
++
++									// If the request is local and we have data: assume a success
++									// (success with no data won't get notified, that's the best we
++									// can do given current implementations)
++									if ( !status && s.isLocal && !s.crossDomain ) {
++										status = responses.text ? 200 : 404;
++									// IE - #1450: sometimes returns 1223 when it should be 204
++									} else if ( status === 1223 ) {
++										status = 204;
++									}
++								}
++							}
++						} catch( firefoxAccessException ) {
++							if ( !isAbort ) {
++								complete( -1, firefoxAccessException );
++							}
++						}
++
++						// Call complete if needed
++						if ( responses ) {
++							complete( status, statusText, responses, responseHeaders );
++						}
++					};
++
++					// if we're in sync mode or it's in cache
++					// and has been retrieved directly (IE6 & IE7)
++					// we need to manually fire the callback
++					if ( !s.async || xhr.readyState === 4 ) {
++						callback();
++					} else {
++						handle = ++xhrId;
++						if ( xhrOnUnloadAbort ) {
++							// Create the active xhrs callbacks list if needed
++							// and attach the unload handler
++							if ( !xhrCallbacks ) {
++								xhrCallbacks = {};
++								jQuery( window ).unload( xhrOnUnloadAbort );
++							}
++							// Add to list of active xhrs callbacks
++							xhrCallbacks[ handle ] = callback;
++						}
++						xhr.onreadystatechange = callback;
++					}
++				},
++
++				abort: function() {
++					if ( callback ) {
++						callback(0,1);
++					}
++				}
++			};
++		}
++	});
++}
++
++
++
++
++var elemdisplay = {},
++	iframe, iframeDoc,
++	rfxtypes = /^(?:toggle|show|hide)$/,
++	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
++	timerId,
++	fxAttrs = [
++		// height animations
++		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
++		// width animations
++		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
++		// opacity animations
++		[ "opacity" ]
++	],
++	fxNow,
++	requestAnimationFrame = window.webkitRequestAnimationFrame ||
++		window.mozRequestAnimationFrame ||
++		window.oRequestAnimationFrame;
++
++jQuery.fn.extend({
++	show: function( speed, easing, callback ) {
++		var elem, display;
++
++		if ( speed || speed === 0 ) {
++			return this.animate( genFx("show", 3), speed, easing, callback);
++
++		} else {
++			for ( var i = 0, j = this.length; i < j; i++ ) {
++				elem = this[i];
++
++				if ( elem.style ) {
++					display = elem.style.display;
++
++					// Reset the inline display of this element to learn if it is
++					// being hidden by cascaded rules or not
++					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
++						display = elem.style.display = "";
++					}
++
++					// Set elements which have been overridden with display: none
++					// in a stylesheet to whatever the default browser style is
++					// for such an element
++					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
++						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
++					}
++				}
++			}
++
++			// Set the display of most of the elements in a second loop
++			// to avoid the constant reflow
++			for ( i = 0; i < j; i++ ) {
++				elem = this[i];
++
++				if ( elem.style ) {
++					display = elem.style.display;
++
++					if ( display === "" || display === "none" ) {
++						elem.style.display = jQuery._data(elem, "olddisplay") || "";
++					}
++				}
++			}
++
++			return this;
++		}
++	},
++
++	hide: function( speed, easing, callback ) {
++		if ( speed || speed === 0 ) {
++			return this.animate( genFx("hide", 3), speed, easing, callback);
++
++		} else {
++			for ( var i = 0, j = this.length; i < j; i++ ) {
++				if ( this[i].style ) {
++					var display = jQuery.css( this[i], "display" );
++
++					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
++						jQuery._data( this[i], "olddisplay", display );
++					}
++				}
++			}
++
++			// Set the display of the elements in a second loop
++			// to avoid the constant reflow
++			for ( i = 0; i < j; i++ ) {
++				if ( this[i].style ) {
++					this[i].style.display = "none";
++				}
++			}
++
++			return this;
++		}
++	},
++
++	// Save the old toggle function
++	_toggle: jQuery.fn.toggle,
++
++	toggle: function( fn, fn2, callback ) {
++		var bool = typeof fn === "boolean";
++
++		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
++			this._toggle.apply( this, arguments );
++
++		} else if ( fn == null || bool ) {
++			this.each(function() {
++				var state = bool ? fn : jQuery(this).is(":hidden");
++				jQuery(this)[ state ? "show" : "hide" ]();
++			});
++
++		} else {
++			this.animate(genFx("toggle", 3), fn, fn2, callback);
++		}
++
++		return this;
++	},
++
++	fadeTo: function( speed, to, easing, callback ) {
++		return this.filter(":hidden").css("opacity", 0).show().end()
++					.animate({opacity: to}, speed, easing, callback);
++	},
++
++	animate: function( prop, speed, easing, callback ) {
++		var optall = jQuery.speed(speed, easing, callback);
++
++		if ( jQuery.isEmptyObject( prop ) ) {
++			return this.each( optall.complete, [ false ] );
++		}
++
++		// Do not change referenced properties as per-property easing will be lost
++		prop = jQuery.extend( {}, prop );
++
++		return this[ optall.queue === false ? "each" : "queue" ](function() {
++			// XXX 'this' does not always have a nodeName when running the
++			// test suite
++
++			if ( optall.queue === false ) {
++				jQuery._mark( this );
++			}
++
++			var opt = jQuery.extend( {}, optall ),
++				isElement = this.nodeType === 1,
++				hidden = isElement && jQuery(this).is(":hidden"),
++				name, val, p,
++				display, e,
++				parts, start, end, unit;
++
++			// will store per property easing and be used to determine when an animation is complete
++			opt.animatedProperties = {};
++
++			for ( p in prop ) {
++
++				// property name normalization
++				name = jQuery.camelCase( p );
++				if ( p !== name ) {
++					prop[ name ] = prop[ p ];
++					delete prop[ p ];
++				}
++
++				val = prop[ name ];
++
++				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
++				if ( jQuery.isArray( val ) ) {
++					opt.animatedProperties[ name ] = val[ 1 ];
++					val = prop[ name ] = val[ 0 ];
++				} else {
++					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
++				}
++
++				if ( val === "hide" && hidden || val === "show" && !hidden ) {
++					return opt.complete.call( this );
++				}
++
++				if ( isElement && ( name === "height" || name === "width" ) ) {
++					// Make sure that nothing sneaks out
++					// Record all 3 overflow attributes because IE does not
++					// change the overflow attribute when overflowX and
++					// overflowY are set to the same value
++					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
++
++					// Set display property to inline-block for height/width
++					// animations on inline elements that are having width/height
++					// animated
++					if ( jQuery.css( this, "display" ) === "inline" &&
++							jQuery.css( this, "float" ) === "none" ) {
++						if ( !jQuery.support.inlineBlockNeedsLayout ) {
++							this.style.display = "inline-block";
++
++						} else {
++							display = defaultDisplay( this.nodeName );
++
++							// inline-level elements accept inline-block;
++							// block-level elements need to be inline with layout
++							if ( display === "inline" ) {
++								this.style.display = "inline-block";
++
++							} else {
++								this.style.display = "inline";
++								this.style.zoom = 1;
++							}
++						}
++					}
++				}
++			}
++
++			if ( opt.overflow != null ) {
++				this.style.overflow = "hidden";
++			}
++
++			for ( p in prop ) {
++				e = new jQuery.fx( this, opt, p );
++				val = prop[ p ];
++
++				if ( rfxtypes.test(val) ) {
++					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
++
++				} else {
++					parts = rfxnum.exec( val );
++					start = e.cur();
++
++					if ( parts ) {
++						end = parseFloat( parts[2] );
++						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
++
++						// We need to compute starting value
++						if ( unit !== "px" ) {
++							jQuery.style( this, p, (end || 1) + unit);
++							start = ((end || 1) / e.cur()) * start;
++							jQuery.style( this, p, start + unit);
++						}
++
++						// If a +=/-= token was provided, we're doing a relative animation
++						if ( parts[1] ) {
++							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
++						}
++
++						e.custom( start, end, unit );
++
++					} else {
++						e.custom( start, val, "" );
++					}
++				}
++			}
++
++			// For JS strict compliance
++			return true;
++		});
++	},
++
++	stop: function( clearQueue, gotoEnd ) {
++		if ( clearQueue ) {
++			this.queue([]);
++		}
++
++		this.each(function() {
++			var timers = jQuery.timers,
++				i = timers.length;
++			// clear marker counters if we know they won't be
++			if ( !gotoEnd ) {
++				jQuery._unmark( true, this );
++			}
++			while ( i-- ) {
++				if ( timers[i].elem === this ) {
++					if (gotoEnd) {
++						// force the next step to be the last
++						timers[i](true);
++					}
++
++					timers.splice(i, 1);
++				}
++			}
++		});
++
++		// start the next in the queue if the last step wasn't forced
++		if ( !gotoEnd ) {
++			this.dequeue();
++		}
++
++		return this;
++	}
++
++});
++
++// Animations created synchronously will run synchronously
++function createFxNow() {
++	setTimeout( clearFxNow, 0 );
++	return ( fxNow = jQuery.now() );
++}
++
++function clearFxNow() {
++	fxNow = undefined;
++}
++
++// Generate parameters to create a standard animation
++function genFx( type, num ) {
++	var obj = {};
++
++	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
++		obj[ this ] = type;
++	});
++
++	return obj;
++}
++
++// Generate shortcuts for custom animations
++jQuery.each({
++	slideDown: genFx("show", 1),
++	slideUp: genFx("hide", 1),
++	slideToggle: genFx("toggle", 1),
++	fadeIn: { opacity: "show" },
++	fadeOut: { opacity: "hide" },
++	fadeToggle: { opacity: "toggle" }
++}, function( name, props ) {
++	jQuery.fn[ name ] = function( speed, easing, callback ) {
++		return this.animate( props, speed, easing, callback );
++	};
++});
++
++jQuery.extend({
++	speed: function( speed, easing, fn ) {
++		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
++			complete: fn || !fn && easing ||
++				jQuery.isFunction( speed ) && speed,
++			duration: speed,
++			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
++		};
++
++		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
++			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
++
++		// Queueing
++		opt.old = opt.complete;
++		opt.complete = function( noUnmark ) {
++			if ( jQuery.isFunction( opt.old ) ) {
++				opt.old.call( this );
++			}
++
++			if ( opt.queue !== false ) {
++				jQuery.dequeue( this );
++			} else if ( noUnmark !== false ) {
++				jQuery._unmark( this );
++			}
++		};
++
++		return opt;
++	},
++
++	easing: {
++		linear: function( p, n, firstNum, diff ) {
++			return firstNum + diff * p;
++		},
++		swing: function( p, n, firstNum, diff ) {
++			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
++		}
++	},
++
++	timers: [],
++
++	fx: function( elem, options, prop ) {
++		this.options = options;
++		this.elem = elem;
++		this.prop = prop;
++
++		options.orig = options.orig || {};
++	}
++
++});
++
++jQuery.fx.prototype = {
++	// Simple function for setting a style value
++	update: function() {
++		if ( this.options.step ) {
++			this.options.step.call( this.elem, this.now, this );
++		}
++
++		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
++	},
++
++	// Get the current size
++	cur: function() {
++		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
++			return this.elem[ this.prop ];
++		}
++
++		var parsed,
++			r = jQuery.css( this.elem, this.prop );
++		// Empty strings, null, undefined and "auto" are converted to 0,
++		// complex values such as "rotate(1rad)" are returned as is,
++		// simple values such as "10px" are parsed to Float.
++		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
++	},
++
++	// Start an animation from one number to another
++	custom: function( from, to, unit ) {
++		var self = this,
++			fx = jQuery.fx,
++			raf;
++
++		this.startTime = fxNow || createFxNow();
++		this.start = from;
++		this.end = to;
++		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
++		this.now = this.start;
++		this.pos = this.state = 0;
++
++		function t( gotoEnd ) {
++			return self.step(gotoEnd);
++		}
++
++		t.elem = this.elem;
++
++		if ( t() && jQuery.timers.push(t) && !timerId ) {
++			// Use requestAnimationFrame instead of setInterval if available
++			if ( requestAnimationFrame ) {
++				timerId = true;
++				raf = function() {
++					// When timerId gets set to null at any point, this stops
++					if ( timerId ) {
++						requestAnimationFrame( raf );
++						fx.tick();
++					}
++				};
++				requestAnimationFrame( raf );
++			} else {
++				timerId = setInterval( fx.tick, fx.interval );
++			}
++		}
++	},
++
++	// Simple 'show' function
++	show: function() {
++		// Remember where we started, so that we can go back to it later
++		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
++		this.options.show = true;
++
++		// Begin the animation
++		// Make sure that we start at a small width/height to avoid any
++		// flash of content
++		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
++
++		// Start by showing the element
++		jQuery( this.elem ).show();
++	},
++
++	// Simple 'hide' function
++	hide: function() {
++		// Remember where we started, so that we can go back to it later
++		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
++		this.options.hide = true;
++
++		// Begin the animation
++		this.custom(this.cur(), 0);
++	},
++
++	// Each step of an animation
++	step: function( gotoEnd ) {
++		var t = fxNow || createFxNow(),
++			done = true,
++			elem = this.elem,
++			options = this.options,
++			i, n;
++
++		if ( gotoEnd || t >= options.duration + this.startTime ) {
++			this.now = this.end;
++			this.pos = this.state = 1;
++			this.update();
++
++			options.animatedProperties[ this.prop ] = true;
++
++			for ( i in options.animatedProperties ) {
++				if ( options.animatedProperties[i] !== true ) {
++					done = false;
++				}
++			}
++
++			if ( done ) {
++				// Reset the overflow
++				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
++
++					jQuery.each( [ "", "X", "Y" ], function (index, value) {
++						elem.style[ "overflow" + value ] = options.overflow[index];
++					});
++				}
++
++				// Hide the element if the "hide" operation was done
++				if ( options.hide ) {
++					jQuery(elem).hide();
++				}
++
++				// Reset the properties, if the item has been hidden or shown
++				if ( options.hide || options.show ) {
++					for ( var p in options.animatedProperties ) {
++						jQuery.style( elem, p, options.orig[p] );
++					}
++				}
++
++				// Execute the complete function
++				options.complete.call( elem );
++			}
++
++			return false;
++
++		} else {
++			// classical easing cannot be used with an Infinity duration
++			if ( options.duration == Infinity ) {
++				this.now = t;
++			} else {
++				n = t - this.startTime;
++				this.state = n / options.duration;
++
++				// Perform the easing function, defaults to swing
++				this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
++				this.now = this.start + ((this.end - this.start) * this.pos);
++			}
++			// Perform the next step of the animation
++			this.update();
++		}
++
++		return true;
++	}
++};
++
++jQuery.extend( jQuery.fx, {
++	tick: function() {
++		for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
++			if ( !timers[i]() ) {
++				timers.splice(i--, 1);
++			}
++		}
++
++		if ( !timers.length ) {
++			jQuery.fx.stop();
++		}
++	},
++
++	interval: 13,
++
++	stop: function() {
++		clearInterval( timerId );
++		timerId = null;
++	},
++
++	speeds: {
++		slow: 600,
++		fast: 200,
++		// Default speed
++		_default: 400
++	},
++
++	step: {
++		opacity: function( fx ) {
++			jQuery.style( fx.elem, "opacity", fx.now );
++		},
++
++		_default: function( fx ) {
++			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
++				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
++			} else {
++				fx.elem[ fx.prop ] = fx.now;
++			}
++		}
++	}
++});
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.animated = function( elem ) {
++		return jQuery.grep(jQuery.timers, function( fn ) {
++			return elem === fn.elem;
++		}).length;
++	};
++}
++
++// Try to restore the default display value of an element
++function defaultDisplay( nodeName ) {
++
++	if ( !elemdisplay[ nodeName ] ) {
++
++		var body = document.body,
++			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
++			display = elem.css( "display" );
++
++		elem.remove();
++
++		// If the simple way fails,
++		// get element's real default display by attaching it to a temp iframe
++		if ( display === "none" || display === "" ) {
++			// No iframe to use yet, so create it
++			if ( !iframe ) {
++				iframe = document.createElement( "iframe" );
++				iframe.frameBorder = iframe.width = iframe.height = 0;
++			}
++
++			body.appendChild( iframe );
++
++			// Create a cacheable copy of the iframe document on first call.
++			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
++			// document to it; WebKit & Firefox won't allow reusing the iframe document.
++			if ( !iframeDoc || !iframe.createElement ) {
++				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
++				iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
++				iframeDoc.close();
++			}
++
++			elem = iframeDoc.createElement( nodeName );
++
++			iframeDoc.body.appendChild( elem );
++
++			display = jQuery.css( elem, "display" );
++
++			body.removeChild( iframe );
++		}
++
++		// Store the correct default display
++		elemdisplay[ nodeName ] = display;
++	}
++
++	return elemdisplay[ nodeName ];
++}
++
++
++
++
++var rtable = /^t(?:able|d|h)$/i,
++	rroot = /^(?:body|html)$/i;
++
++if ( "getBoundingClientRect" in document.documentElement ) {
++	jQuery.fn.offset = function( options ) {
++		var elem = this[0], box;
++
++		if ( options ) {
++			return this.each(function( i ) {
++				jQuery.offset.setOffset( this, options, i );
++			});
++		}
++
++		if ( !elem || !elem.ownerDocument ) {
++			return null;
++		}
++
++		if ( elem === elem.ownerDocument.body ) {
++			return jQuery.offset.bodyOffset( elem );
++		}
++
++		try {
++			box = elem.getBoundingClientRect();
++		} catch(e) {}
++
++		var doc = elem.ownerDocument,
++			docElem = doc.documentElement;
++
++		// Make sure we're not dealing with a disconnected DOM node
++		if ( !box || !jQuery.contains( docElem, elem ) ) {
++			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
++		}
++
++		var body = doc.body,
++			win = getWindow(doc),
++			clientTop  = docElem.clientTop  || body.clientTop  || 0,
++			clientLeft = docElem.clientLeft || body.clientLeft || 0,
++			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
++			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
++			top  = box.top  + scrollTop  - clientTop,
++			left = box.left + scrollLeft - clientLeft;
++
++		return { top: top, left: left };
++	};
++
++} else {
++	jQuery.fn.offset = function( options ) {
++		var elem = this[0];
++
++		if ( options ) {
++			return this.each(function( i ) {
++				jQuery.offset.setOffset( this, options, i );
++			});
++		}
++
++		if ( !elem || !elem.ownerDocument ) {
++			return null;
++		}
++
++		if ( elem === elem.ownerDocument.body ) {
++			return jQuery.offset.bodyOffset( elem );
++		}
++
++		jQuery.offset.initialize();
++
++		var computedStyle,
++			offsetParent = elem.offsetParent,
++			prevOffsetParent = elem,
++			doc = elem.ownerDocument,
++			docElem = doc.documentElement,
++			body = doc.body,
++			defaultView = doc.defaultView,
++			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
++			top = elem.offsetTop,
++			left = elem.offsetLeft;
++
++		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
++			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
++				break;
++			}
++
++			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
++			top  -= elem.scrollTop;
++			left -= elem.scrollLeft;
++
++			if ( elem === offsetParent ) {
++				top  += elem.offsetTop;
++				left += elem.offsetLeft;
++
++				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
++					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
++					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
++				}
++
++				prevOffsetParent = offsetParent;
++				offsetParent = elem.offsetParent;
++			}
++
++			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
++				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
++				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
++			}
++
++			prevComputedStyle = computedStyle;
++		}
++
++		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
++			top  += body.offsetTop;
++			left += body.offsetLeft;
++		}
++
++		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
++			top  += Math.max( docElem.scrollTop, body.scrollTop );
++			left += Math.max( docElem.scrollLeft, body.scrollLeft );
++		}
++
++		return { top: top, left: left };
++	};
++}
++
++jQuery.offset = {
++	initialize: function() {
++		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
++			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
++
++		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
++
++		container.innerHTML = html;
++		body.insertBefore( container, body.firstChild );
++		innerDiv = container.firstChild;
++		checkDiv = innerDiv.firstChild;
++		td = innerDiv.nextSibling.firstChild.firstChild;
++
++		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
++		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
++
++		checkDiv.style.position = "fixed";
++		checkDiv.style.top = "20px";
++
++		// safari subtracts parent border width here which is 5px
++		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
++		checkDiv.style.position = checkDiv.style.top = "";
++
++		innerDiv.style.overflow = "hidden";
++		innerDiv.style.position = "relative";
++
++		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
++
++		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
++
++		body.removeChild( container );
++		jQuery.offset.initialize = jQuery.noop;
++	},
++
++	bodyOffset: function( body ) {
++		var top = body.offsetTop,
++			left = body.offsetLeft;
++
++		jQuery.offset.initialize();
++
++		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
++			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
++			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
++		}
++
++		return { top: top, left: left };
++	},
++
++	setOffset: function( elem, options, i ) {
++		var position = jQuery.css( elem, "position" );
++
++		// set position first, in-case top/left are set even on static elem
++		if ( position === "static" ) {
++			elem.style.position = "relative";
++		}
++
++		var curElem = jQuery( elem ),
++			curOffset = curElem.offset(),
++			curCSSTop = jQuery.css( elem, "top" ),
++			curCSSLeft = jQuery.css( elem, "left" ),
++			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
++			props = {}, curPosition = {}, curTop, curLeft;
++
++		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
++		if ( calculatePosition ) {
++			curPosition = curElem.position();
++			curTop = curPosition.top;
++			curLeft = curPosition.left;
++		} else {
++			curTop = parseFloat( curCSSTop ) || 0;
++			curLeft = parseFloat( curCSSLeft ) || 0;
++		}
++
++		if ( jQuery.isFunction( options ) ) {
++			options = options.call( elem, i, curOffset );
++		}
++
++		if (options.top != null) {
++			props.top = (options.top - curOffset.top) + curTop;
++		}
++		if (options.left != null) {
++			props.left = (options.left - curOffset.left) + curLeft;
++		}
++
++		if ( "using" in options ) {
++			options.using.call( elem, props );
++		} else {
++			curElem.css( props );
++		}
++	}
++};
++
++
++jQuery.fn.extend({
++	position: function() {
++		if ( !this[0] ) {
++			return null;
++		}
++
++		var elem = this[0],
++
++		// Get *real* offsetParent
++		offsetParent = this.offsetParent(),
++
++		// Get correct offsets
++		offset       = this.offset(),
++		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
++
++		// Subtract element margins
++		// note: when an element has margin: auto the offsetLeft and marginLeft
++		// are the same in Safari causing offset.left to incorrectly be 0
++		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
++		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
++
++		// Add offsetParent borders
++		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
++		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
++
++		// Subtract the two offsets
++		return {
++			top:  offset.top  - parentOffset.top,
++			left: offset.left - parentOffset.left
++		};
++	},
++
++	offsetParent: function() {
++		return this.map(function() {
++			var offsetParent = this.offsetParent || document.body;
++			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
++				offsetParent = offsetParent.offsetParent;
++			}
++			return offsetParent;
++		});
++	}
++});
++
++
++// Create scrollLeft and scrollTop methods
++jQuery.each( ["Left", "Top"], function( i, name ) {
++	var method = "scroll" + name;
++
++	jQuery.fn[ method ] = function( val ) {
++		var elem, win;
++
++		if ( val === undefined ) {
++			elem = this[ 0 ];
++
++			if ( !elem ) {
++				return null;
++			}
++
++			win = getWindow( elem );
++
++			// Return the scroll offset
++			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
++				jQuery.support.boxModel && win.document.documentElement[ method ] ||
++					win.document.body[ method ] :
++				elem[ method ];
++		}
++
++		// Set the scroll offset
++		return this.each(function() {
++			win = getWindow( this );
++
++			if ( win ) {
++				win.scrollTo(
++					!i ? val : jQuery( win ).scrollLeft(),
++					 i ? val : jQuery( win ).scrollTop()
++				);
++
++			} else {
++				this[ method ] = val;
++			}
++		});
++	};
++});
++
++function getWindow( elem ) {
++	return jQuery.isWindow( elem ) ?
++		elem :
++		elem.nodeType === 9 ?
++			elem.defaultView || elem.parentWindow :
++			false;
++}
++
++
++
++
++// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
++jQuery.each([ "Height", "Width" ], function( i, name ) {
++
++	var type = name.toLowerCase();
++
++	// innerHeight and innerWidth
++	jQuery.fn[ "inner" + name ] = function() {
++		var elem = this[0];
++		return elem && elem.style ?
++			parseFloat( jQuery.css( elem, type, "padding" ) ) :
++			null;
++	};
++
++	// outerHeight and outerWidth
++	jQuery.fn[ "outer" + name ] = function( margin ) {
++		var elem = this[0];
++		return elem && elem.style ?
++			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
++			null;
++	};
++
++	jQuery.fn[ type ] = function( size ) {
++		// Get window width or height
++		var elem = this[0];
++		if ( !elem ) {
++			return size == null ? null : this;
++		}
++
++		if ( jQuery.isFunction( size ) ) {
++			return this.each(function( i ) {
++				var self = jQuery( this );
++				self[ type ]( size.call( this, i, self[ type ]() ) );
++			});
++		}
++
++		if ( jQuery.isWindow( elem ) ) {
++			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
++			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
++			var docElemProp = elem.document.documentElement[ "client" + name ];
++			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
++				elem.document.body[ "client" + name ] || docElemProp;
++
++		// Get document width or height
++		} else if ( elem.nodeType === 9 ) {
++			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
++			return Math.max(
++				elem.documentElement["client" + name],
++				elem.body["scroll" + name], elem.documentElement["scroll" + name],
++				elem.body["offset" + name], elem.documentElement["offset" + name]
++			);
++
++		// Get or set width or height on the element
++		} else if ( size === undefined ) {
++			var orig = jQuery.css( elem, type ),
++				ret = parseFloat( orig );
++
++			return jQuery.isNaN( ret ) ? orig : ret;
++
++		// Set the width or height on the element (default to pixels if value is unitless)
++		} else {
++			return this.css( type, typeof size === "string" ? size : size + "px" );
++		}
++	};
++
++});
++
++
++// Expose jQuery to the global object
++window.jQuery = window.$ = jQuery;
++})(window);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.js	(revision 15487)
+@@ -0,0 +1,1415 @@
++/*
++ * QUnit - A JavaScript Unit Testing Framework
++ * 
++ * http://docs.jquery.com/QUnit
++ *
++ * Copyright (c) 2011 John Resig, Jörn Zaefferer
++ * Dual licensed under the MIT (MIT-LICENSE.txt)
++ * or GPL (GPL-LICENSE.txt) licenses.
++ */
++
++(function(window) {
++
++var defined = {
++	setTimeout: typeof window.setTimeout !== "undefined",
++	sessionStorage: (function() {
++		try {
++			return !!sessionStorage.getItem;
++		} catch(e){
++			return false;
++		}
++  })()
++}
++
++var testId = 0;
++
++var Test = function(name, testName, expected, testEnvironmentArg, async, callback) {
++	this.name = name;
++	this.testName = testName;
++	this.expected = expected;
++	this.testEnvironmentArg = testEnvironmentArg;
++	this.async = async;
++	this.callback = callback;
++	this.assertions = [];
++};
++Test.prototype = {
++	init: function() {
++		var tests = id("qunit-tests");
++		if (tests) {
++			var b = document.createElement("strong");
++				b.innerHTML = "Running " + this.name;
++			var li = document.createElement("li");
++				li.appendChild( b );
++				li.id = this.id = "test-output" + testId++;
++			tests.appendChild( li );
++		}
++	},
++	setup: function() {
++		if (this.module != config.previousModule) {
++			if ( config.previousModule ) {
++				QUnit.moduleDone( {
++					name: config.previousModule,
++					failed: config.moduleStats.bad,
++					passed: config.moduleStats.all - config.moduleStats.bad,
++					total: config.moduleStats.all
++				} );
++			}
++			config.previousModule = this.module;
++			config.moduleStats = { all: 0, bad: 0 };
++			QUnit.moduleStart( {
++				name: this.module
++			} );
++		}
++
++		config.current = this;
++		this.testEnvironment = extend({
++			setup: function() {},
++			teardown: function() {}
++		}, this.moduleTestEnvironment);
++		if (this.testEnvironmentArg) {
++			extend(this.testEnvironment, this.testEnvironmentArg);
++		}
++
++		QUnit.testStart( {
++			name: this.testName
++		} );
++
++		// allow utility functions to access the current test environment
++		// TODO why??
++		QUnit.current_testEnvironment = this.testEnvironment;
++		
++		try {
++			if ( !config.pollution ) {
++				saveGlobal();
++			}
++
++			this.testEnvironment.setup.call(this.testEnvironment);
++		} catch(e) {
++			QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message );
++		}
++	},
++	run: function() {
++		if ( this.async ) {
++			QUnit.stop();
++		}
++
++		if ( config.notrycatch ) {
++			this.callback.call(this.testEnvironment);
++			return;
++		}
++		try {
++			this.callback.call(this.testEnvironment);
++		} catch(e) {
++			fail("Test " + this.testName + " died, exception and test follows", e, this.callback);
++			QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) );
++			// else next test will carry the responsibility
++			saveGlobal();
++
++			// Restart the tests if they're blocking
++			if ( config.blocking ) {
++				start();
++			}
++		}
++	},
++	teardown: function() {
++		try {
++			checkPollution();
++			this.testEnvironment.teardown.call(this.testEnvironment);
++		} catch(e) {
++			QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message );
++		}
++	},
++	finish: function() {
++		if ( this.expected && this.expected != this.assertions.length ) {
++			QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" );
++		}
++		
++		var good = 0, bad = 0,
++			tests = id("qunit-tests");
++
++		config.stats.all += this.assertions.length;
++		config.moduleStats.all += this.assertions.length;
++
++		if ( tests ) {
++			var ol  = document.createElement("ol");
++
++			for ( var i = 0; i < this.assertions.length; i++ ) {
++				var assertion = this.assertions[i];
++
++				var li = document.createElement("li");
++				li.className = assertion.result ? "pass" : "fail";
++				li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
++				ol.appendChild( li );
++
++				if ( assertion.result ) {
++					good++;
++				} else {
++					bad++;
++					config.stats.bad++;
++					config.moduleStats.bad++;
++				}
++			}
++
++			// store result when possible
++			defined.sessionStorage && sessionStorage.setItem("qunit-" + this.testName, bad);
++
++			if (bad == 0) {
++				ol.style.display = "none";
++			}
++
++			var b = document.createElement("strong");
++			b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
++			
++			addEvent(b, "click", function() {
++				var next = b.nextSibling, display = next.style.display;
++				next.style.display = display === "none" ? "block" : "none";
++			});
++			
++			addEvent(b, "dblclick", function(e) {
++				var target = e && e.target ? e.target : window.event.srcElement;
++				if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
++					target = target.parentNode;
++				}
++				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
++					window.location.search = "?" + encodeURIComponent(getText([target]).replace(/\(.+\)$/, "").replace(/(^\s*|\s*$)/g, ""));
++				}
++			});
++
++			var li = id(this.id);
++			li.className = bad ? "fail" : "pass";
++			li.style.display = resultDisplayStyle(!bad);
++			li.removeChild( li.firstChild );
++			li.appendChild( b );
++			li.appendChild( ol );
++
++		} else {
++			for ( var i = 0; i < this.assertions.length; i++ ) {
++				if ( !this.assertions[i].result ) {
++					bad++;
++					config.stats.bad++;
++					config.moduleStats.bad++;
++				}
++			}
++		}
++
++		try {
++			QUnit.reset();
++		} catch(e) {
++			fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
++		}
++
++		QUnit.testDone( {
++			name: this.testName,
++			failed: bad,
++			passed: this.assertions.length - bad,
++			total: this.assertions.length
++		} );
++	},
++	
++	queue: function() {
++		var test = this;
++		synchronize(function() {
++			test.init();
++		});
++		function run() {
++			// each of these can by async
++			synchronize(function() {
++				test.setup();
++			});
++			synchronize(function() {
++				test.run();
++			});
++			synchronize(function() {
++				test.teardown();
++			});
++			synchronize(function() {
++				test.finish();
++			});
++		}
++		// defer when previous test run passed, if storage is available
++		var bad = defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.testName);
++		if (bad) {
++			run();
++		} else {
++			synchronize(run);
++		};
++	}
++	
++}
++
++var QUnit = {
++
++	// call on start of module test to prepend name to all tests
++	module: function(name, testEnvironment) {
++		config.currentModule = name;
++		config.currentModuleTestEnviroment = testEnvironment;
++	},
++
++	asyncTest: function(testName, expected, callback) {
++		if ( arguments.length === 2 ) {
++			callback = expected;
++			expected = 0;
++		}
++
++		QUnit.test(testName, expected, callback, true);
++	},
++	
++	test: function(testName, expected, callback, async) {
++		var name = '<span class="test-name">' + testName + '</span>', testEnvironmentArg;
++
++		if ( arguments.length === 2 ) {
++			callback = expected;
++			expected = null;
++		}
++		// is 2nd argument a testEnvironment?
++		if ( expected && typeof expected === 'object') {
++			testEnvironmentArg =  expected;
++			expected = null;
++		}
++
++		if ( config.currentModule ) {
++			name = '<span class="module-name">' + config.currentModule + "</span>: " + name;
++		}
++
++		if ( !validTest(config.currentModule + ": " + testName) ) {
++			return;
++		}
++		
++		var test = new Test(name, testName, expected, testEnvironmentArg, async, callback);
++		test.module = config.currentModule;
++		test.moduleTestEnvironment = config.currentModuleTestEnviroment;
++		test.queue();
++	},
++	
++	/**
++	 * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
++	 */
++	expect: function(asserts) {
++		config.current.expected = asserts;
++	},
++
++	/**
++	 * Asserts true.
++	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
++	 */
++	ok: function(a, msg) {
++		a = !!a;
++		var details = {
++			result: a,
++			message: msg
++		};
++		msg = escapeHtml(msg);
++		QUnit.log(details);
++		config.current.assertions.push({
++			result: a,
++			message: msg
++		});
++	},
++
++	/**
++	 * Checks that the first two arguments are equal, with an optional message.
++	 * Prints out both actual and expected values.
++	 *
++	 * Prefered to ok( actual == expected, message )
++	 *
++	 * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
++	 *
++	 * @param Object actual
++	 * @param Object expected
++	 * @param String message (optional)
++	 */
++	equal: function(actual, expected, message) {
++		QUnit.push(expected == actual, actual, expected, message);
++	},
++
++	notEqual: function(actual, expected, message) {
++		QUnit.push(expected != actual, actual, expected, message);
++	},
++	
++	deepEqual: function(actual, expected, message) {
++		QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
++	},
++
++	notDeepEqual: function(actual, expected, message) {
++		QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);
++	},
++
++	strictEqual: function(actual, expected, message) {
++		QUnit.push(expected === actual, actual, expected, message);
++	},
++
++	notStrictEqual: function(actual, expected, message) {
++		QUnit.push(expected !== actual, actual, expected, message);
++	},
++
++	raises: function(block, expected, message) {
++		var actual, ok = false;
++	
++		if (typeof expected === 'string') {
++			message = expected;
++			expected = null;
++		}
++	
++		try {
++			block();
++		} catch (e) {
++			actual = e;
++		}
++	
++		if (actual) {
++			// we don't want to validate thrown error
++			if (!expected) {
++				ok = true;
++			// expected is a regexp	
++			} else if (QUnit.objectType(expected) === "regexp") {
++				ok = expected.test(actual);
++			// expected is a constructor	
++			} else if (actual instanceof expected) {
++				ok = true;
++			// expected is a validation function which returns true is validation passed	
++			} else if (expected.call({}, actual) === true) {
++				ok = true;
++			}
++		}
++			
++		QUnit.ok(ok, message);
++	},
++
++	start: function() {
++		config.semaphore--;
++		if (config.semaphore > 0) {
++			// don't start until equal number of stop-calls
++			return;
++		}
++		if (config.semaphore < 0) {
++			// ignore if start is called more often then stop
++			config.semaphore = 0;
++		}
++		// A slight delay, to avoid any current callbacks
++		if ( defined.setTimeout ) {
++			window.setTimeout(function() {
++				if ( config.timeout ) {
++					clearTimeout(config.timeout);
++				}
++
++				config.blocking = false;
++				process();
++			}, 13);
++		} else {
++			config.blocking = false;
++			process();
++		}
++	},
++	
++	stop: function(timeout) {
++		config.semaphore++;
++		config.blocking = true;
++
++		if ( timeout && defined.setTimeout ) {
++			clearTimeout(config.timeout);
++			config.timeout = window.setTimeout(function() {
++				QUnit.ok( false, "Test timed out" );
++				QUnit.start();
++			}, timeout);
++		}
++	}
++
++};
++
++// Backwards compatibility, deprecated
++QUnit.equals = QUnit.equal;
++QUnit.same = QUnit.deepEqual;
++
++// Maintain internal state
++var config = {
++	// The queue of tests to run
++	queue: [],
++
++	// block until document ready
++	blocking: true
++};
++
++// Load paramaters
++(function() {
++	var location = window.location || { search: "", protocol: "file:" },
++		GETParams = location.search.slice(1).split('&');
++
++	for ( var i = 0; i < GETParams.length; i++ ) {
++		GETParams[i] = decodeURIComponent( GETParams[i] );
++		if ( GETParams[i] === "noglobals" ) {
++			GETParams.splice( i, 1 );
++			i--;
++			config.noglobals = true;
++		} else if ( GETParams[i] === "notrycatch" ) {
++			GETParams.splice( i, 1 );
++			i--;
++			config.notrycatch = true;
++		} else if ( GETParams[i].search('=') > -1 ) {
++			GETParams.splice( i, 1 );
++			i--;
++		}
++	}
++	
++	// restrict modules/tests by get parameters
++	config.filters = GETParams;
++	
++	// Figure out if we're running the tests from a server or not
++	QUnit.isLocal = !!(location.protocol === 'file:');
++})();
++
++// Expose the API as global variables, unless an 'exports'
++// object exists, in that case we assume we're in CommonJS
++if ( typeof exports === "undefined" || typeof require === "undefined" ) {
++	extend(window, QUnit);
++	window.QUnit = QUnit;
++} else {
++	extend(exports, QUnit);
++	exports.QUnit = QUnit;
++}
++
++// define these after exposing globals to keep them in these QUnit namespace only
++extend(QUnit, {
++	config: config,
++
++	// Initialize the configuration options
++	init: function() {
++		extend(config, {
++			stats: { all: 0, bad: 0 },
++			moduleStats: { all: 0, bad: 0 },
++			started: +new Date,
++			updateRate: 1000,
++			blocking: false,
++			autostart: true,
++			autorun: false,
++			filters: [],
++			queue: [],
++			semaphore: 0
++		});
++
++		var tests = id("qunit-tests"),
++			banner = id("qunit-banner"),
++			result = id("qunit-testresult");
++
++		if ( tests ) {
++			tests.innerHTML = "";
++		}
++
++		if ( banner ) {
++			banner.className = "";
++		}
++
++		if ( result ) {
++			result.parentNode.removeChild( result );
++		}
++	},
++	
++	/**
++	 * Resets the test setup. Useful for tests that modify the DOM.
++	 * 
++	 * If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
++	 */
++	reset: function() {
++		if ( window.jQuery ) {
++			jQuery( "#main, #qunit-fixture" ).html( config.fixture );
++		} else {
++			var main = id( 'main' ) || id( 'qunit-fixture' );
++			if ( main ) {
++				main.innerHTML = config.fixture;
++			}
++		}
++	},
++	
++	/**
++	 * Trigger an event on an element.
++	 *
++	 * @example triggerEvent( document.body, "click" );
++	 *
++	 * @param DOMElement elem
++	 * @param String type
++	 */
++	triggerEvent: function( elem, type, event ) {
++		if ( document.createEvent ) {
++			event = document.createEvent("MouseEvents");
++			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
++				0, 0, 0, 0, 0, false, false, false, false, 0, null);
++			elem.dispatchEvent( event );
++
++		} else if ( elem.fireEvent ) {
++			elem.fireEvent("on"+type);
++		}
++	},
++	
++	// Safe object type checking
++	is: function( type, obj ) {
++		return QUnit.objectType( obj ) == type;
++	},
++	
++	objectType: function( obj ) {
++		if (typeof obj === "undefined") {
++				return "undefined";
++
++		// consider: typeof null === object
++		}
++		if (obj === null) {
++				return "null";
++		}
++
++		var type = Object.prototype.toString.call( obj )
++			.match(/^\[object\s(.*)\]$/)[1] || '';
++
++		switch (type) {
++				case 'Number':
++						if (isNaN(obj)) {
++								return "nan";
++						} else {
++								return "number";
++						}
++				case 'String':
++				case 'Boolean':
++				case 'Array':
++				case 'Date':
++				case 'RegExp':
++				case 'Function':
++						return type.toLowerCase();
++		}
++		if (typeof obj === "object") {
++				return "object";
++		}
++		return undefined;
++	},
++	
++	push: function(result, actual, expected, message) {
++		var details = {
++			result: result,
++			message: message,
++			actual: actual,
++			expected: expected
++		};
++		
++		message = escapeHtml(message) || (result ? "okay" : "failed");
++		message = '<span class="test-message">' + message + "</span>";
++		expected = escapeHtml(QUnit.jsDump.parse(expected));
++		actual = escapeHtml(QUnit.jsDump.parse(actual));
++		var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';
++		if (actual != expected) {
++			output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';
++			output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';
++		}
++		if (!result) {
++			var source = sourceFromStacktrace();
++			if (source) {
++				details.source = source;
++				output += '<tr class="test-source"><th>Source: </th><td><pre>' + source +'</pre></td></tr>';
++			}
++		}
++		output += "</table>";
++		
++		QUnit.log(details);
++		
++		config.current.assertions.push({
++			result: !!result,
++			message: output
++		});
++	},
++	
++	// Logging callbacks; all receive a single argument with the listed properties
++	// run test/logs.html for any related changes
++	begin: function() {},
++	// done: { failed, passed, total, runtime }
++	done: function() {},
++	// log: { result, actual, expected, message }
++	log: function() {},
++	// testStart: { name }
++	testStart: function() {},
++	// testDone: { name, failed, passed, total }
++	testDone: function() {},
++	// moduleStart: { name }
++	moduleStart: function() {},
++	// moduleDone: { name, failed, passed, total }
++	moduleDone: function() {}
++});
++
++if ( typeof document === "undefined" || document.readyState === "complete" ) {
++	config.autorun = true;
++}
++
++addEvent(window, "load", function() {
++	QUnit.begin({});
++	
++	// Initialize the config, saving the execution queue
++	var oldconfig = extend({}, config);
++	QUnit.init();
++	extend(config, oldconfig);
++
++	config.blocking = false;
++
++	var userAgent = id("qunit-userAgent");
++	if ( userAgent ) {
++		userAgent.innerHTML = navigator.userAgent;
++	}
++	var banner = id("qunit-header");
++	if ( banner ) {
++		var paramsIndex = location.href.lastIndexOf(location.search);
++		if ( paramsIndex > -1 ) {
++			var mainPageLocation = location.href.slice(0, paramsIndex);
++			if ( mainPageLocation == location.href ) {
++				banner.innerHTML = '<a href=""> ' + banner.innerHTML + '</a> ';
++			} else {
++				var testName = decodeURIComponent(location.search.slice(1));
++				banner.innerHTML = '<a href="' + mainPageLocation + '">' + banner.innerHTML + '</a> &#8250; <a href="">' + testName + '</a>';
++			}
++		}
++	}
++	
++	var toolbar = id("qunit-testrunner-toolbar");
++	if ( toolbar ) {
++		var filter = document.createElement("input");
++		filter.type = "checkbox";
++		filter.id = "qunit-filter-pass";
++		addEvent( filter, "click", function() {
++			var li = document.getElementsByTagName("li");
++			for ( var i = 0; i < li.length; i++ ) {
++				if ( li[i].className.indexOf("pass") > -1 ) {
++					li[i].style.display = filter.checked ? "none" : "";
++				}
++			}
++			if ( defined.sessionStorage ) {
++				sessionStorage.setItem("qunit-filter-passed-tests", filter.checked ? "true" : "");
++			}
++		});
++		if ( defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) {
++			filter.checked = true;
++		}
++		toolbar.appendChild( filter );
++
++		var label = document.createElement("label");
++		label.setAttribute("for", "qunit-filter-pass");
++		label.innerHTML = "Hide passed tests";
++		toolbar.appendChild( label );
++	}
++
++	var main = id('main') || id('qunit-fixture');
++	if ( main ) {
++		config.fixture = main.innerHTML;
++	}
++
++	if (config.autostart) {
++		QUnit.start();
++	}
++});
++
++function done() {
++	config.autorun = true;
++
++	// Log the last module results
++	if ( config.currentModule ) {
++		QUnit.moduleDone( {
++			name: config.currentModule,
++			failed: config.moduleStats.bad,
++			passed: config.moduleStats.all - config.moduleStats.bad,
++			total: config.moduleStats.all
++		} );
++	}
++
++	var banner = id("qunit-banner"),
++		tests = id("qunit-tests"),
++		runtime = +new Date - config.started,
++		passed = config.stats.all - config.stats.bad,
++		html = [
++			'Tests completed in ',
++			runtime,
++			' milliseconds.<br/>',
++			'<span class="passed">',
++			passed,
++			'</span> tests of <span class="total">',
++			config.stats.all,
++			'</span> passed, <span class="failed">',
++			config.stats.bad,
++			'</span> failed.'
++		].join('');
++
++	if ( banner ) {
++		banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
++	}
++
++	if ( tests ) {	
++		var result = id("qunit-testresult");
++
++		if ( !result ) {
++			result = document.createElement("p");
++			result.id = "qunit-testresult";
++			result.className = "result";
++			tests.parentNode.insertBefore( result, tests.nextSibling );
++		}
++
++		result.innerHTML = html;
++	}
++
++	QUnit.done( {
++		failed: config.stats.bad,
++		passed: passed, 
++		total: config.stats.all,
++		runtime: runtime
++	} );
++}
++
++function validTest( name ) {
++	var i = config.filters.length,
++		run = false;
++
++	if ( !i ) {
++		return true;
++	}
++	
++	while ( i-- ) {
++		var filter = config.filters[i],
++			not = filter.charAt(0) == '!';
++
++		if ( not ) {
++			filter = filter.slice(1);
++		}
++
++		if ( name.indexOf(filter) !== -1 ) {
++			return !not;
++		}
++
++		if ( not ) {
++			run = true;
++		}
++	}
++
++	return run;
++}
++
++// so far supports only Firefox, Chrome and Opera (buggy)
++// could be extended in the future to use something like https://github.com/csnover/TraceKit
++function sourceFromStacktrace() {
++	try {
++		throw new Error();
++	} catch ( e ) {
++		if (e.stacktrace) {
++			// Opera
++			return e.stacktrace.split("\n")[6];
++		} else if (e.stack) {
++			// Firefox, Chrome
++			return e.stack.split("\n")[4];
++		}
++	}
++}
++
++function resultDisplayStyle(passed) {
++	return passed && id("qunit-filter-pass") && id("qunit-filter-pass").checked ? 'none' : '';
++}
++
++function escapeHtml(s) {
++	if (!s) {
++		return "";
++	}
++	s = s + "";
++	return s.replace(/[\&"<>\\]/g, function(s) {
++		switch(s) {
++			case "&": return "&amp;";
++			case "\\": return "\\\\";
++			case '"': return '\"';
++			case "<": return "&lt;";
++			case ">": return "&gt;";
++			default: return s;
++		}
++	});
++}
++
++function synchronize( callback ) {
++	config.queue.push( callback );
++
++	if ( config.autorun && !config.blocking ) {
++		process();
++	}
++}
++
++function process() {
++	var start = (new Date()).getTime();
++
++	while ( config.queue.length && !config.blocking ) {
++		if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {
++			config.queue.shift()();
++		} else {
++			window.setTimeout( process, 13 );
++			break;
++		}
++	}
++  if (!config.blocking && !config.queue.length) {
++    done();
++  }
++}
++
++function saveGlobal() {
++	config.pollution = [];
++	
++	if ( config.noglobals ) {
++		for ( var key in window ) {
++			config.pollution.push( key );
++		}
++	}
++}
++
++function checkPollution( name ) {
++	var old = config.pollution;
++	saveGlobal();
++	
++	var newGlobals = diff( old, config.pollution );
++	if ( newGlobals.length > 0 ) {
++		ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
++		config.current.expected++;
++	}
++
++	var deletedGlobals = diff( config.pollution, old );
++	if ( deletedGlobals.length > 0 ) {
++		ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
++		config.current.expected++;
++	}
++}
++
++// returns a new Array with the elements that are in a but not in b
++function diff( a, b ) {
++	var result = a.slice();
++	for ( var i = 0; i < result.length; i++ ) {
++		for ( var j = 0; j < b.length; j++ ) {
++			if ( result[i] === b[j] ) {
++				result.splice(i, 1);
++				i--;
++				break;
++			}
++		}
++	}
++	return result;
++}
++
++function fail(message, exception, callback) {
++	if ( typeof console !== "undefined" && console.error && console.warn ) {
++		console.error(message);
++		console.error(exception);
++		console.warn(callback.toString());
++
++	} else if ( window.opera && opera.postError ) {
++		opera.postError(message, exception, callback.toString);
++	}
++}
++
++function extend(a, b) {
++	for ( var prop in b ) {
++		a[prop] = b[prop];
++	}
++
++	return a;
++}
++
++function addEvent(elem, type, fn) {
++	if ( elem.addEventListener ) {
++		elem.addEventListener( type, fn, false );
++	} else if ( elem.attachEvent ) {
++		elem.attachEvent( "on" + type, fn );
++	} else {
++		fn();
++	}
++}
++
++function id(name) {
++	return !!(typeof document !== "undefined" && document && document.getElementById) &&
++		document.getElementById( name );
++}
++
++// Test for equality any JavaScript type.
++// Discussions and reference: http://philrathe.com/articles/equiv
++// Test suites: http://philrathe.com/tests/equiv
++// Author: Philippe Rathé <prathe@gmail.com>
++QUnit.equiv = function () {
++
++    var innerEquiv; // the real equiv function
++    var callers = []; // stack to decide between skip/abort functions
++    var parents = []; // stack to avoiding loops from circular referencing
++
++    // Call the o related callback with the given arguments.
++    function bindCallbacks(o, callbacks, args) {
++        var prop = QUnit.objectType(o);
++        if (prop) {
++            if (QUnit.objectType(callbacks[prop]) === "function") {
++                return callbacks[prop].apply(callbacks, args);
++            } else {
++                return callbacks[prop]; // or undefined
++            }
++        }
++    }
++    
++    var callbacks = function () {
++
++        // for string, boolean, number and null
++        function useStrictEquality(b, a) {
++            if (b instanceof a.constructor || a instanceof b.constructor) {
++                // to catch short annotaion VS 'new' annotation of a declaration
++                // e.g. var i = 1;
++                //      var j = new Number(1);
++                return a == b;
++            } else {
++                return a === b;
++            }
++        }
++
++        return {
++            "string": useStrictEquality,
++            "boolean": useStrictEquality,
++            "number": useStrictEquality,
++            "null": useStrictEquality,
++            "undefined": useStrictEquality,
++
++            "nan": function (b) {
++                return isNaN(b);
++            },
++
++            "date": function (b, a) {
++                return QUnit.objectType(b) === "date" && a.valueOf() === b.valueOf();
++            },
++
++            "regexp": function (b, a) {
++                return QUnit.objectType(b) === "regexp" &&
++                    a.source === b.source && // the regex itself
++                    a.global === b.global && // and its modifers (gmi) ...
++                    a.ignoreCase === b.ignoreCase &&
++                    a.multiline === b.multiline;
++            },
++
++            // - skip when the property is a method of an instance (OOP)
++            // - abort otherwise,
++            //   initial === would have catch identical references anyway
++            "function": function () {
++                var caller = callers[callers.length - 1];
++                return caller !== Object &&
++                        typeof caller !== "undefined";
++            },
++
++            "array": function (b, a) {
++                var i, j, loop;
++                var len;
++
++                // b could be an object literal here
++                if ( ! (QUnit.objectType(b) === "array")) {
++                    return false;
++                }   
++                
++                len = a.length;
++                if (len !== b.length) { // safe and faster
++                    return false;
++                }
++                
++                //track reference to avoid circular references
++                parents.push(a);
++                for (i = 0; i < len; i++) {
++                    loop = false;
++                    for(j=0;j<parents.length;j++){
++                        if(parents[j] === a[i]){
++                            loop = true;//dont rewalk array
++                        }
++                    }
++                    if (!loop && ! innerEquiv(a[i], b[i])) {
++                        parents.pop();
++                        return false;
++                    }
++                }
++                parents.pop();
++                return true;
++            },
++
++            "object": function (b, a) {
++                var i, j, loop;
++                var eq = true; // unless we can proove it
++                var aProperties = [], bProperties = []; // collection of strings
++
++                // comparing constructors is more strict than using instanceof
++                if ( a.constructor !== b.constructor) {
++                    return false;
++                }
++
++                // stack constructor before traversing properties
++                callers.push(a.constructor);
++                //track reference to avoid circular references
++                parents.push(a);
++                
++                for (i in a) { // be strict: don't ensures hasOwnProperty and go deep
++                    loop = false;
++                    for(j=0;j<parents.length;j++){
++                        if(parents[j] === a[i])
++                            loop = true; //don't go down the same path twice
++                    }
++                    aProperties.push(i); // collect a's properties
++
++                    if (!loop && ! innerEquiv(a[i], b[i])) {
++                        eq = false;
++                        break;
++                    }
++                }
++
++                callers.pop(); // unstack, we are done
++                parents.pop();
++
++                for (i in b) {
++                    bProperties.push(i); // collect b's properties
++                }
++
++                // Ensures identical properties name
++                return eq && innerEquiv(aProperties.sort(), bProperties.sort());
++            }
++        };
++    }();
++
++    innerEquiv = function () { // can take multiple arguments
++        var args = Array.prototype.slice.apply(arguments);
++        if (args.length < 2) {
++            return true; // end transition
++        }
++
++        return (function (a, b) {
++            if (a === b) {
++                return true; // catch the most you can
++            } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || QUnit.objectType(a) !== QUnit.objectType(b)) {
++                return false; // don't lose time with error prone cases
++            } else {
++                return bindCallbacks(a, callbacks, [b, a]);
++            }
++
++        // apply transition with (1..n) arguments
++        })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1));
++    };
++
++    return innerEquiv;
++
++}();
++
++/**
++ * jsDump
++ * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
++ * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php)
++ * Date: 5/15/2008
++ * @projectDescription Advanced and extensible data dumping for Javascript.
++ * @version 1.0.0
++ * @author Ariel Flesler
++ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
++ */
++QUnit.jsDump = (function() {
++	function quote( str ) {
++		return '"' + str.toString().replace(/"/g, '\\"') + '"';
++	};
++	function literal( o ) {
++		return o + '';	
++	};
++	function join( pre, arr, post ) {
++		var s = jsDump.separator(),
++			base = jsDump.indent(),
++			inner = jsDump.indent(1);
++		if ( arr.join )
++			arr = arr.join( ',' + s + inner );
++		if ( !arr )
++			return pre + post;
++		return [ pre, inner + arr, base + post ].join(s);
++	};
++	function array( arr ) {
++		var i = arr.length,	ret = Array(i);					
++		this.up();
++		while ( i-- )
++			ret[i] = this.parse( arr[i] );				
++		this.down();
++		return join( '[', ret, ']' );
++	};
++	
++	var reName = /^function (\w+)/;
++	
++	var jsDump = {
++		parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance
++			var	parser = this.parsers[ type || this.typeOf(obj) ];
++			type = typeof parser;			
++			
++			return type == 'function' ? parser.call( this, obj ) :
++				   type == 'string' ? parser :
++				   this.parsers.error;
++		},
++		typeOf:function( obj ) {
++			var type;
++			if ( obj === null ) {
++				type = "null";
++			} else if (typeof obj === "undefined") {
++				type = "undefined";
++			} else if (QUnit.is("RegExp", obj)) {
++				type = "regexp";
++			} else if (QUnit.is("Date", obj)) {
++				type = "date";
++			} else if (QUnit.is("Function", obj)) {
++				type = "function";
++			} else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") {
++				type = "window";
++			} else if (obj.nodeType === 9) {
++				type = "document";
++			} else if (obj.nodeType) {
++				type = "node";
++			} else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {
++				type = "array";
++			} else {
++				type = typeof obj;
++			}
++			return type;
++		},
++		separator:function() {
++			return this.multiline ?	this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
++		},
++		indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
++			if ( !this.multiline )
++				return '';
++			var chr = this.indentChar;
++			if ( this.HTML )
++				chr = chr.replace(/\t/g,'   ').replace(/ /g,'&nbsp;');
++			return Array( this._depth_ + (extra||0) ).join(chr);
++		},
++		up:function( a ) {
++			this._depth_ += a || 1;
++		},
++		down:function( a ) {
++			this._depth_ -= a || 1;
++		},
++		setParser:function( name, parser ) {
++			this.parsers[name] = parser;
++		},
++		// The next 3 are exposed so you can use them
++		quote:quote, 
++		literal:literal,
++		join:join,
++		//
++		_depth_: 1,
++		// This is the list of parsers, to modify them, use jsDump.setParser
++		parsers:{
++			window: '[Window]',
++			document: '[Document]',
++			error:'[ERROR]', //when no parser is found, shouldn't happen
++			unknown: '[Unknown]',
++			'null':'null',
++			undefined:'undefined',
++			'function':function( fn ) {
++				var ret = 'function',
++					name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
++				if ( name )
++					ret += ' ' + name;
++				ret += '(';
++				
++				ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');
++				return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );
++			},
++			array: array,
++			nodelist: array,
++			arguments: array,
++			object:function( map ) {
++				var ret = [ ];
++				QUnit.jsDump.up();
++				for ( var key in map )
++					ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(map[key]) );
++				QUnit.jsDump.down();
++				return join( '{', ret, '}' );
++			},
++			node:function( node ) {
++				var open = QUnit.jsDump.HTML ? '&lt;' : '<',
++					close = QUnit.jsDump.HTML ? '&gt;' : '>';
++					
++				var tag = node.nodeName.toLowerCase(),
++					ret = open + tag;
++					
++				for ( var a in QUnit.jsDump.DOMAttrs ) {
++					var val = node[QUnit.jsDump.DOMAttrs[a]];
++					if ( val )
++						ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );
++				}
++				return ret + close + open + '/' + tag + close;
++			},
++			functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
++				var l = fn.length;
++				if ( !l ) return '';				
++				
++				var args = Array(l);
++				while ( l-- )
++					args[l] = String.fromCharCode(97+l);//97 is 'a'
++				return ' ' + args.join(', ') + ' ';
++			},
++			key:quote, //object calls it internally, the key part of an item in a map
++			functionCode:'[code]', //function calls it internally, it's the content of the function
++			attribute:quote, //node calls it internally, it's an html attribute value
++			string:quote,
++			date:quote,
++			regexp:literal, //regex
++			number:literal,
++			'boolean':literal
++		},
++		DOMAttrs:{//attributes to dump from nodes, name=>realName
++			id:'id',
++			name:'name',
++			'class':'className'
++		},
++		HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
++		indentChar:'  ',//indentation unit
++		multiline:true //if true, items in a collection, are separated by a \n, else just a space.
++	};
++
++	return jsDump;
++})();
++
++// from Sizzle.js
++function getText( elems ) {
++	var ret = "", elem;
++
++	for ( var i = 0; elems[i]; i++ ) {
++		elem = elems[i];
++
++		// Get the text from text nodes and CDATA nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
++			ret += elem.nodeValue;
++
++		// Traverse everything else, except comment nodes
++		} else if ( elem.nodeType !== 8 ) {
++			ret += getText( elem.childNodes );
++		}
++	}
++
++	return ret;
++};
++
++/*
++ * Javascript Diff Algorithm
++ *  By John Resig (http://ejohn.org/)
++ *  Modified by Chu Alan "sprite"
++ *
++ * Released under the MIT license.
++ *
++ * More Info:
++ *  http://ejohn.org/projects/javascript-diff-algorithm/
++ *  
++ * Usage: QUnit.diff(expected, actual)
++ * 
++ * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
++ */
++QUnit.diff = (function() {
++	function diff(o, n){
++		var ns = new Object();
++		var os = new Object();
++		
++		for (var i = 0; i < n.length; i++) {
++			if (ns[n[i]] == null) 
++				ns[n[i]] = {
++					rows: new Array(),
++					o: null
++				};
++			ns[n[i]].rows.push(i);
++		}
++		
++		for (var i = 0; i < o.length; i++) {
++			if (os[o[i]] == null) 
++				os[o[i]] = {
++					rows: new Array(),
++					n: null
++				};
++			os[o[i]].rows.push(i);
++		}
++		
++		for (var i in ns) {
++			if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
++				n[ns[i].rows[0]] = {
++					text: n[ns[i].rows[0]],
++					row: os[i].rows[0]
++				};
++				o[os[i].rows[0]] = {
++					text: o[os[i].rows[0]],
++					row: ns[i].rows[0]
++				};
++			}
++		}
++		
++		for (var i = 0; i < n.length - 1; i++) {
++			if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
++			n[i + 1] == o[n[i].row + 1]) {
++				n[i + 1] = {
++					text: n[i + 1],
++					row: n[i].row + 1
++				};
++				o[n[i].row + 1] = {
++					text: o[n[i].row + 1],
++					row: i + 1
++				};
++			}
++		}
++		
++		for (var i = n.length - 1; i > 0; i--) {
++			if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
++			n[i - 1] == o[n[i].row - 1]) {
++				n[i - 1] = {
++					text: n[i - 1],
++					row: n[i].row - 1
++				};
++				o[n[i].row - 1] = {
++					text: o[n[i].row - 1],
++					row: i - 1
++				};
++			}
++		}
++		
++		return {
++			o: o,
++			n: n
++		};
++	}
++	
++	return function(o, n){
++		o = o.replace(/\s+$/, '');
++		n = n.replace(/\s+$/, '');
++		var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/));
++
++		var str = "";
++		
++		var oSpace = o.match(/\s+/g);
++		if (oSpace == null) {
++			oSpace = [" "];
++		}
++		else {
++			oSpace.push(" ");
++		}
++		var nSpace = n.match(/\s+/g);
++		if (nSpace == null) {
++			nSpace = [" "];
++		}
++		else {
++			nSpace.push(" ");
++		}
++		
++		if (out.n.length == 0) {
++			for (var i = 0; i < out.o.length; i++) {
++				str += '<del>' + out.o[i] + oSpace[i] + "</del>";
++			}
++		}
++		else {
++			if (out.n[0].text == null) {
++				for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
++					str += '<del>' + out.o[n] + oSpace[n] + "</del>";
++				}
++			}
++			
++			for (var i = 0; i < out.n.length; i++) {
++				if (out.n[i].text == null) {
++					str += '<ins>' + out.n[i] + nSpace[i] + "</ins>";
++				}
++				else {
++					var pre = "";
++					
++					for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {
++						pre += '<del>' + out.o[n] + oSpace[n] + "</del>";
++					}
++					str += " " + out.n[i].text + nSpace[i] + pre;
++				}
++			}
++		}
++		
++		return str;
++	};
++})();
++
++})(this);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.min.js	(revision 15487)
+@@ -0,0 +1,18 @@
++/*!
++ * jQuery JavaScript Library v1.6.2
++ * http://jquery.com/
++ *
++ * Copyright 2011, John Resig
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * Includes Sizzle.js
++ * http://sizzlejs.com/
++ * Copyright 2011, The Dojo Foundation
++ * Released under the MIT, BSD, and GPL Licenses.
++ *
++ * Date: Thu Jun 30 14:16:56 2011 -0400
++ */
++(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(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 bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(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===bR,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=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),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 bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(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 bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}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=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,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=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",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.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(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.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();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},isNaN:function(a){return a==null||!m.test(a)||isNaN(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;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,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){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=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=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(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="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.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:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function 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._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;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(o);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(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");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(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.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=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?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}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
++shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){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=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={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,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
++)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");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&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.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++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.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.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{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;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),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 bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.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(bL,"")).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||bM.test(this.nodeName)||bG.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(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),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&&(ca.test(b.url)||e&&ca.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(ca,l),b.url===j&&(e&&(k=k.replace(ca,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 cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,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,cb&&delete cd[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=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("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",cs(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(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],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?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):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,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?: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=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.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&&!cu.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=cv(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=cv(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")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.js	(revision 15487)
+@@ -0,0 +1,240 @@
++(function( $ ) {
++
++    module( "jquery.sidebar" );
++    
++    var destroy = function destroy(){
++        $(".sidebar-container.left,.sidebar-container.top,.sidebar-container.right,.sidebar-container.bottom").remove();
++    };
++    
++    asyncTest( "default/left", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "left";
++            
++        elem.sidebar({
++            position : pos,
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-50px" );
++        
++        container.mouseenter();
++    });
++    asyncTest( "top", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "top";
++            
++        elem.sidebar({
++            position : pos,
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-150px" );
++        
++        container.mouseenter();
++    });
++    asyncTest( "right", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "right";
++            
++        elem.sidebar({
++            position : pos,
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-50px" );
++        
++        container.mouseenter();
++    });
++    
++    asyncTest( "bottom", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "bottom";
++            
++        elem.sidebar({
++            position : pos,
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-150px" );
++        
++        container.mouseenter();
++    });
++    
++    
++    asyncTest( "open-event", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "left";
++            
++        elem.sidebar({
++            position : pos,
++            open : "click",
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        container.mouseleave();
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-50px" );
++        
++        container.click();
++    });
++    
++    
++    asyncTest( "call open/close method manually", function() {
++        var elem = $("#sidebar"),
++            inject,
++            container,
++            body,
++            pos = "left";
++            
++        elem.sidebar({
++            position : pos,
++            open : "click",
++            callback : {
++                sidebar : {
++                    open : function(){
++                        ok( !inject.is(":visible") );
++                        ok( body.is(":visible") );
++                        elem.sidebar("close");
++                    },
++                    close : function(){
++                        ok( inject.is(":visible") );
++                        ok( !body.is(":visible") );
++                        destroy();
++                        start();
++                    }
++                }
++            }
++        });
++        
++        inject = $(".sidebar-inject."+pos);
++        container = $(".sidebar-container."+pos);
++        body = $(".sidebar-body");
++        
++        equal( inject.length, 1 );
++        equal( container.length, 1 );
++        equal( body.length, 1 );
++        equal( container.css( pos ), "-50px" );
++        
++        elem.sidebar("open");
++
++    });
++
++})( jQuery );
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.html	(revision 15487)
+@@ -0,0 +1,40 @@
++<!doctype html>
++<html lang="en">
++<head>
++    <meta charset="utf-8">
++    <title>jQuery SideBar Test Suite</title>
++
++
++    <link rel="stylesheet" type="text/css" href="../lib/qunit.css" />
++    <link rel="stylesheet" type="text/css" href="../css/dark-glass/sidebar.css" />
++    
++    <script type="text/javascript" src="../lib/jquery.js"></script>
++    <script type="text/javascript" src="../lib/jquery-ui.js"></script>
++    <script type="text/javascript" src="../lib/qunit.js" ></script>
++    <script type="text/javascript" src="../src/jquery.sidebar.js"></script>
++    <script type="text/javascript" src="jquery.sidebar.js"></script>
++    
++</head>
++<body>
++
++<h1 id="qunit-header">jQuery SideBar Test Suite</h1>
++<h2 id="qunit-banner"></h2>
++<div id="qunit-testrunner-toolbar"></div>
++<h2 id="qunit-userAgent"></h2>
++<ol id="qunit-tests"></ol>
++<div id="qunit-fixture">
++
++        <ul id="sidebar" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++</div>
++<script>
++if (location.hash === '#testem')
++    document.write('<script src="/testem.js"></'+'script>')
++</script>
++</body>
++</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.css	(revision 15487)
+@@ -0,0 +1,568 @@
++/*
++ * jQuery UI CSS Framework 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ */
++
++/* Layout helpers
++----------------------------------*/
++.ui-helper-hidden { display: none; }
++.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
++.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
++.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
++.ui-helper-clearfix { display: inline-block; }
++/* required comment for clearfix to work in Opera \*/
++* html .ui-helper-clearfix { height:1%; }
++.ui-helper-clearfix { display:block; }
++/* end clearfix */
++.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
++
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-disabled { cursor: default !important; }
++
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Overlays */
++.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
++
++
++/*
++ * jQuery UI CSS Framework 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Theming/API
++ *
++ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Segoe%20UI,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=333333&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=25&borderColorHeader=333333&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=000000&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=25&borderColorContent=666666&fcContent=ffffff&iconColorContent=cccccc&bgColorDefault=555555&bgTextureDefault=02_glass.png&bgImgOpacityDefault=20&borderColorDefault=666666&fcDefault=eeeeee&iconColorDefault=cccccc&bgColorHover=0078a3&bgTextureHover=02_glass.png&bgImgOpacityHover=40&borderColorHover=59b4d4&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=f58400&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=30&borderColorActive=ffaf0f&fcActive=ffffff&iconColorActive=222222&bgColorHighlight=eeeeee&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=80&borderColorHighlight=cccccc&fcHighlight=2e7db2&iconColorHighlight=4b8e0b&bgColorError=ffc73d&bgTextureError=02_glass.png&bgImgOpacityError=40&borderColorError=ffb73d&fcError=111111&iconColorError=a83300&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
++ */
++
++
++/* Component containers
++----------------------------------*/
++.ui-widget { font-family: Segoe UI, Arial, sans-serif; font-size: 1.1em; }
++.ui-widget .ui-widget { font-size: 1em; }
++.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Segoe UI, Arial, sans-serif; font-size: 1em; }
++.ui-widget-content { border: 1px solid #666666; background: #000000 url(images/ui-bg_inset-soft_25_000000_1x100.png) 50% bottom repeat-x; color: #ffffff; }
++.ui-widget-content a { color: #ffffff; }
++.ui-widget-header { border: 1px solid #333333; background: #333333 url(images/ui-bg_gloss-wave_25_333333_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
++.ui-widget-header a { color: #ffffff; }
++
++/* Interaction states
++----------------------------------*/
++.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #666666; background: #555555 url(images/ui-bg_glass_20_555555_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eeeeee; }
++.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #eeeeee; text-decoration: none; }
++.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #59b4d4; background: #0078a3 url(images/ui-bg_glass_40_0078a3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
++.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; }
++.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #ffaf0f; background: #f58400 url(images/ui-bg_inset-soft_30_f58400_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
++.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
++.ui-widget :active { outline: none; }
++
++/* Interaction Cues
++----------------------------------*/
++.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #cccccc; background: #eeeeee url(images/ui-bg_highlight-soft_80_eeeeee_1x100.png) 50% top repeat-x; color: #2e7db2; }
++.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #2e7db2; }
++.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ffb73d; background: #ffc73d url(images/ui-bg_glass_40_ffc73d_1x400.png) 50% 50% repeat-x; color: #111111; }
++.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #111111; }
++.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #111111; }
++.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
++.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
++.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
++
++/* Icons
++----------------------------------*/
++
++/* states and images */
++.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_cccccc_256x240.png); }
++.ui-widget-content .ui-icon {background-image: url(images/ui-icons_cccccc_256x240.png); }
++.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
++.ui-state-default .ui-icon { background-image: url(images/ui-icons_cccccc_256x240.png); }
++.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
++.ui-state-active .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
++.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_4b8e0b_256x240.png); }
++.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_a83300_256x240.png); }
++
++/* positioning */
++.ui-icon-carat-1-n { background-position: 0 0; }
++.ui-icon-carat-1-ne { background-position: -16px 0; }
++.ui-icon-carat-1-e { background-position: -32px 0; }
++.ui-icon-carat-1-se { background-position: -48px 0; }
++.ui-icon-carat-1-s { background-position: -64px 0; }
++.ui-icon-carat-1-sw { background-position: -80px 0; }
++.ui-icon-carat-1-w { background-position: -96px 0; }
++.ui-icon-carat-1-nw { background-position: -112px 0; }
++.ui-icon-carat-2-n-s { background-position: -128px 0; }
++.ui-icon-carat-2-e-w { background-position: -144px 0; }
++.ui-icon-triangle-1-n { background-position: 0 -16px; }
++.ui-icon-triangle-1-ne { background-position: -16px -16px; }
++.ui-icon-triangle-1-e { background-position: -32px -16px; }
++.ui-icon-triangle-1-se { background-position: -48px -16px; }
++.ui-icon-triangle-1-s { background-position: -64px -16px; }
++.ui-icon-triangle-1-sw { background-position: -80px -16px; }
++.ui-icon-triangle-1-w { background-position: -96px -16px; }
++.ui-icon-triangle-1-nw { background-position: -112px -16px; }
++.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
++.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
++.ui-icon-arrow-1-n { background-position: 0 -32px; }
++.ui-icon-arrow-1-ne { background-position: -16px -32px; }
++.ui-icon-arrow-1-e { background-position: -32px -32px; }
++.ui-icon-arrow-1-se { background-position: -48px -32px; }
++.ui-icon-arrow-1-s { background-position: -64px -32px; }
++.ui-icon-arrow-1-sw { background-position: -80px -32px; }
++.ui-icon-arrow-1-w { background-position: -96px -32px; }
++.ui-icon-arrow-1-nw { background-position: -112px -32px; }
++.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
++.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
++.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
++.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
++.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
++.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
++.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
++.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
++.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
++.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
++.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
++.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
++.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
++.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
++.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
++.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
++.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
++.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
++.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
++.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
++.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
++.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
++.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
++.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
++.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
++.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
++.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
++.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
++.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
++.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
++.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
++.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
++.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
++.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
++.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
++.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
++.ui-icon-arrow-4 { background-position: 0 -80px; }
++.ui-icon-arrow-4-diag { background-position: -16px -80px; }
++.ui-icon-extlink { background-position: -32px -80px; }
++.ui-icon-newwin { background-position: -48px -80px; }
++.ui-icon-refresh { background-position: -64px -80px; }
++.ui-icon-shuffle { background-position: -80px -80px; }
++.ui-icon-transfer-e-w { background-position: -96px -80px; }
++.ui-icon-transferthick-e-w { background-position: -112px -80px; }
++.ui-icon-folder-collapsed { background-position: 0 -96px; }
++.ui-icon-folder-open { background-position: -16px -96px; }
++.ui-icon-document { background-position: -32px -96px; }
++.ui-icon-document-b { background-position: -48px -96px; }
++.ui-icon-note { background-position: -64px -96px; }
++.ui-icon-mail-closed { background-position: -80px -96px; }
++.ui-icon-mail-open { background-position: -96px -96px; }
++.ui-icon-suitcase { background-position: -112px -96px; }
++.ui-icon-comment { background-position: -128px -96px; }
++.ui-icon-person { background-position: -144px -96px; }
++.ui-icon-print { background-position: -160px -96px; }
++.ui-icon-trash { background-position: -176px -96px; }
++.ui-icon-locked { background-position: -192px -96px; }
++.ui-icon-unlocked { background-position: -208px -96px; }
++.ui-icon-bookmark { background-position: -224px -96px; }
++.ui-icon-tag { background-position: -240px -96px; }
++.ui-icon-home { background-position: 0 -112px; }
++.ui-icon-flag { background-position: -16px -112px; }
++.ui-icon-calendar { background-position: -32px -112px; }
++.ui-icon-cart { background-position: -48px -112px; }
++.ui-icon-pencil { background-position: -64px -112px; }
++.ui-icon-clock { background-position: -80px -112px; }
++.ui-icon-disk { background-position: -96px -112px; }
++.ui-icon-calculator { background-position: -112px -112px; }
++.ui-icon-zoomin { background-position: -128px -112px; }
++.ui-icon-zoomout { background-position: -144px -112px; }
++.ui-icon-search { background-position: -160px -112px; }
++.ui-icon-wrench { background-position: -176px -112px; }
++.ui-icon-gear { background-position: -192px -112px; }
++.ui-icon-heart { background-position: -208px -112px; }
++.ui-icon-star { background-position: -224px -112px; }
++.ui-icon-link { background-position: -240px -112px; }
++.ui-icon-cancel { background-position: 0 -128px; }
++.ui-icon-plus { background-position: -16px -128px; }
++.ui-icon-plusthick { background-position: -32px -128px; }
++.ui-icon-minus { background-position: -48px -128px; }
++.ui-icon-minusthick { background-position: -64px -128px; }
++.ui-icon-close { background-position: -80px -128px; }
++.ui-icon-closethick { background-position: -96px -128px; }
++.ui-icon-key { background-position: -112px -128px; }
++.ui-icon-lightbulb { background-position: -128px -128px; }
++.ui-icon-scissors { background-position: -144px -128px; }
++.ui-icon-clipboard { background-position: -160px -128px; }
++.ui-icon-copy { background-position: -176px -128px; }
++.ui-icon-contact { background-position: -192px -128px; }
++.ui-icon-image { background-position: -208px -128px; }
++.ui-icon-video { background-position: -224px -128px; }
++.ui-icon-script { background-position: -240px -128px; }
++.ui-icon-alert { background-position: 0 -144px; }
++.ui-icon-info { background-position: -16px -144px; }
++.ui-icon-notice { background-position: -32px -144px; }
++.ui-icon-help { background-position: -48px -144px; }
++.ui-icon-check { background-position: -64px -144px; }
++.ui-icon-bullet { background-position: -80px -144px; }
++.ui-icon-radio-off { background-position: -96px -144px; }
++.ui-icon-radio-on { background-position: -112px -144px; }
++.ui-icon-pin-w { background-position: -128px -144px; }
++.ui-icon-pin-s { background-position: -144px -144px; }
++.ui-icon-play { background-position: 0 -160px; }
++.ui-icon-pause { background-position: -16px -160px; }
++.ui-icon-seek-next { background-position: -32px -160px; }
++.ui-icon-seek-prev { background-position: -48px -160px; }
++.ui-icon-seek-end { background-position: -64px -160px; }
++.ui-icon-seek-start { background-position: -80px -160px; }
++/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
++.ui-icon-seek-first { background-position: -80px -160px; }
++.ui-icon-stop { background-position: -96px -160px; }
++.ui-icon-eject { background-position: -112px -160px; }
++.ui-icon-volume-off { background-position: -128px -160px; }
++.ui-icon-volume-on { background-position: -144px -160px; }
++.ui-icon-power { background-position: 0 -176px; }
++.ui-icon-signal-diag { background-position: -16px -176px; }
++.ui-icon-signal { background-position: -32px -176px; }
++.ui-icon-battery-0 { background-position: -48px -176px; }
++.ui-icon-battery-1 { background-position: -64px -176px; }
++.ui-icon-battery-2 { background-position: -80px -176px; }
++.ui-icon-battery-3 { background-position: -96px -176px; }
++.ui-icon-circle-plus { background-position: 0 -192px; }
++.ui-icon-circle-minus { background-position: -16px -192px; }
++.ui-icon-circle-close { background-position: -32px -192px; }
++.ui-icon-circle-triangle-e { background-position: -48px -192px; }
++.ui-icon-circle-triangle-s { background-position: -64px -192px; }
++.ui-icon-circle-triangle-w { background-position: -80px -192px; }
++.ui-icon-circle-triangle-n { background-position: -96px -192px; }
++.ui-icon-circle-arrow-e { background-position: -112px -192px; }
++.ui-icon-circle-arrow-s { background-position: -128px -192px; }
++.ui-icon-circle-arrow-w { background-position: -144px -192px; }
++.ui-icon-circle-arrow-n { background-position: -160px -192px; }
++.ui-icon-circle-zoomin { background-position: -176px -192px; }
++.ui-icon-circle-zoomout { background-position: -192px -192px; }
++.ui-icon-circle-check { background-position: -208px -192px; }
++.ui-icon-circlesmall-plus { background-position: 0 -208px; }
++.ui-icon-circlesmall-minus { background-position: -16px -208px; }
++.ui-icon-circlesmall-close { background-position: -32px -208px; }
++.ui-icon-squaresmall-plus { background-position: -48px -208px; }
++.ui-icon-squaresmall-minus { background-position: -64px -208px; }
++.ui-icon-squaresmall-close { background-position: -80px -208px; }
++.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
++.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
++.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
++.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
++.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
++.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
++
++
++/* Misc visuals
++----------------------------------*/
++
++/* Corner radius */
++.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; }
++.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; }
++.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
++.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
++
++/* Overlays */
++.ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
++.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
++ * jQuery UI Resizable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Resizable#theming
++ */
++.ui-resizable { position: relative;}
++.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
++.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
++.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
++.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
++.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
++.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
++.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
++.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
++.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
++.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
++ * jQuery UI Selectable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Selectable#theming
++ */
++.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
++/*
++ * jQuery UI Accordion 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Accordion#theming
++ */
++/* IE/Win - Fix animation bug - #4615 */
++.ui-accordion { width: 100%; }
++.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
++.ui-accordion .ui-accordion-li-fix { display: inline; }
++.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
++.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
++.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
++.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
++.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
++.ui-accordion .ui-accordion-content-active { display: block; }
++/*
++ * jQuery UI Autocomplete 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Autocomplete#theming
++ */
++.ui-autocomplete { position: absolute; cursor: default; }	
++
++/* workarounds */
++* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
++
++/*
++ * jQuery UI Menu 1.8.15
++ *
++ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Menu#theming
++ */
++.ui-menu {
++	list-style:none;
++	padding: 2px;
++	margin: 0;
++	display:block;
++	float: left;
++}
++.ui-menu .ui-menu {
++	margin-top: -3px;
++}
++.ui-menu .ui-menu-item {
++	margin:0;
++	padding: 0;
++	zoom: 1;
++	float: left;
++	clear: left;
++	width: 100%;
++}
++.ui-menu .ui-menu-item a {
++	text-decoration:none;
++	display:block;
++	padding:.2em .4em;
++	line-height:1.5;
++	zoom:1;
++}
++.ui-menu .ui-menu-item a.ui-state-hover,
++.ui-menu .ui-menu-item a.ui-state-active {
++	font-weight: normal;
++	margin: -1px;
++}
++/*
++ * jQuery UI Button 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Button#theming
++ */
++.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
++.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
++button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
++.ui-button-icons-only { width: 3.4em; } 
++button.ui-button-icons-only { width: 3.7em; } 
++
++/*button text element */
++.ui-button .ui-button-text { display: block; line-height: 1.4;  }
++.ui-button-text-only .ui-button-text { padding: .4em 1em; }
++.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
++.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
++.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
++.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
++/* no icon support for input elements, provide padding by default */
++input.ui-button { padding: .4em 1em; }
++
++/*button icon element(s) */
++.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
++.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
++.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
++.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
++.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
++
++/*button sets*/
++.ui-buttonset { margin-right: 7px; }
++.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
++
++/* workarounds */
++button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
++/*
++ * jQuery UI Dialog 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Dialog#theming
++ */
++.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
++.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
++.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
++.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
++.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
++.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
++.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
++.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
++.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
++.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
++.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
++.ui-draggable .ui-dialog-titlebar { cursor: move; }
++/*
++ * jQuery UI Slider 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Slider#theming
++ */
++.ui-slider { position: relative; text-align: left; }
++.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
++.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
++
++.ui-slider-horizontal { height: .8em; }
++.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
++.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
++.ui-slider-horizontal .ui-slider-range-min { left: 0; }
++.ui-slider-horizontal .ui-slider-range-max { right: 0; }
++
++.ui-slider-vertical { width: .8em; height: 100px; }
++.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
++.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
++.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
++.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
++ * jQuery UI Tabs 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Tabs#theming
++ */
++.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
++.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
++.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
++.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
++.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
++.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
++.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
++.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
++.ui-tabs .ui-tabs-hide { display: none !important; }
++/*
++ * jQuery UI Datepicker 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Datepicker#theming
++ */
++.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
++.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
++.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
++.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
++.ui-datepicker .ui-datepicker-prev { left:2px; }
++.ui-datepicker .ui-datepicker-next { right:2px; }
++.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
++.ui-datepicker .ui-datepicker-next-hover { right:1px; }
++.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
++.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
++.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
++.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
++.ui-datepicker select.ui-datepicker-month, 
++.ui-datepicker select.ui-datepicker-year { width: 49%;}
++.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
++.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
++.ui-datepicker td { border: 0; padding: 1px; }
++.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
++.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
++.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
++.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
++
++/* with multiple calendars */
++.ui-datepicker.ui-datepicker-multi { width:auto; }
++.ui-datepicker-multi .ui-datepicker-group { float:left; }
++.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
++.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
++.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
++.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
++.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
++.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
++.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
++.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
++
++/* RTL support */
++.ui-datepicker-rtl { direction: rtl; }
++.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
++.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
++.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
++.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
++.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
++.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
++.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
++.ui-datepicker-rtl .ui-datepicker-group { float:right; }
++.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
++.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
++
++/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
++.ui-datepicker-cover {
++    display: none; /*sorry for IE5*/
++    display/**/: block; /*sorry for IE5*/
++    position: absolute; /*must have*/
++    z-index: -1; /*must have*/
++    filter: mask(); /*must have*/
++    top: -4px; /*must have*/
++    left: -4px; /*must have*/
++    width: 200px; /*must have*/
++    height: 200px; /*must have*/
++}/*
++ * jQuery UI Progressbar 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Progressbar#theming
++ */
++.ui-progressbar { height:2em; text-align: left; }
++.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.js	(revision 15487)
+@@ -0,0 +1,11737 @@
++/*!
++ * jQuery UI 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI
++ */
++(function( $, undefined ) {
++
++// prevent duplicate loading
++// this is only a problem because we proxy existing functions
++// and we don't want to double proxy them
++$.ui = $.ui || {};
++if ( $.ui.version ) {
++	return;
++}
++
++$.extend( $.ui, {
++	version: "1.8.15",
++
++	keyCode: {
++		ALT: 18,
++		BACKSPACE: 8,
++		CAPS_LOCK: 20,
++		COMMA: 188,
++		COMMAND: 91,
++		COMMAND_LEFT: 91, // COMMAND
++		COMMAND_RIGHT: 93,
++		CONTROL: 17,
++		DELETE: 46,
++		DOWN: 40,
++		END: 35,
++		ENTER: 13,
++		ESCAPE: 27,
++		HOME: 36,
++		INSERT: 45,
++		LEFT: 37,
++		MENU: 93, // COMMAND_RIGHT
++		NUMPAD_ADD: 107,
++		NUMPAD_DECIMAL: 110,
++		NUMPAD_DIVIDE: 111,
++		NUMPAD_ENTER: 108,
++		NUMPAD_MULTIPLY: 106,
++		NUMPAD_SUBTRACT: 109,
++		PAGE_DOWN: 34,
++		PAGE_UP: 33,
++		PERIOD: 190,
++		RIGHT: 39,
++		SHIFT: 16,
++		SPACE: 32,
++		TAB: 9,
++		UP: 38,
++		WINDOWS: 91 // COMMAND
++	}
++});
++
++// plugins
++$.fn.extend({
++	propAttr: $.fn.prop || $.fn.attr,
++
++	_focus: $.fn.focus,
++	focus: function( delay, fn ) {
++		return typeof delay === "number" ?
++			this.each(function() {
++				var elem = this;
++				setTimeout(function() {
++					$( elem ).focus();
++					if ( fn ) {
++						fn.call( elem );
++					}
++				}, delay );
++			}) :
++			this._focus.apply( this, arguments );
++	},
++
++	scrollParent: function() {
++		var scrollParent;
++		if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
++			scrollParent = this.parents().filter(function() {
++				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
++			}).eq(0);
++		} else {
++			scrollParent = this.parents().filter(function() {
++				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
++			}).eq(0);
++		}
++
++		return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
++	},
++
++	zIndex: function( zIndex ) {
++		if ( zIndex !== undefined ) {
++			return this.css( "zIndex", zIndex );
++		}
++
++		if ( this.length ) {
++			var elem = $( this[ 0 ] ), position, value;
++			while ( elem.length && elem[ 0 ] !== document ) {
++				// Ignore z-index if position is set to a value where z-index is ignored by the browser
++				// This makes behavior of this function consistent across browsers
++				// WebKit always returns auto if the element is positioned
++				position = elem.css( "position" );
++				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
++					// IE returns 0 when zIndex is not specified
++					// other browsers return a string
++					// we ignore the case of nested elements with an explicit value of 0
++					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
++					value = parseInt( elem.css( "zIndex" ), 10 );
++					if ( !isNaN( value ) && value !== 0 ) {
++						return value;
++					}
++				}
++				elem = elem.parent();
++			}
++		}
++
++		return 0;
++	},
++
++	disableSelection: function() {
++		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
++			".ui-disableSelection", function( event ) {
++				event.preventDefault();
++			});
++	},
++
++	enableSelection: function() {
++		return this.unbind( ".ui-disableSelection" );
++	}
++});
++
++$.each( [ "Width", "Height" ], function( i, name ) {
++	var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
++		type = name.toLowerCase(),
++		orig = {
++			innerWidth: $.fn.innerWidth,
++			innerHeight: $.fn.innerHeight,
++			outerWidth: $.fn.outerWidth,
++			outerHeight: $.fn.outerHeight
++		};
++
++	function reduce( elem, size, border, margin ) {
++		$.each( side, function() {
++			size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
++			if ( border ) {
++				size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
++			}
++			if ( margin ) {
++				size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
++			}
++		});
++		return size;
++	}
++
++	$.fn[ "inner" + name ] = function( size ) {
++		if ( size === undefined ) {
++			return orig[ "inner" + name ].call( this );
++		}
++
++		return this.each(function() {
++			$( this ).css( type, reduce( this, size ) + "px" );
++		});
++	};
++
++	$.fn[ "outer" + name] = function( size, margin ) {
++		if ( typeof size !== "number" ) {
++			return orig[ "outer" + name ].call( this, size );
++		}
++
++		return this.each(function() {
++			$( this).css( type, reduce( this, size, true, margin ) + "px" );
++		});
++	};
++});
++
++// selectors
++function focusable( element, isTabIndexNotNaN ) {
++	var nodeName = element.nodeName.toLowerCase();
++	if ( "area" === nodeName ) {
++		var map = element.parentNode,
++			mapName = map.name,
++			img;
++		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
++			return false;
++		}
++		img = $( "img[usemap=#" + mapName + "]" )[0];
++		return !!img && visible( img );
++	}
++	return ( /input|select|textarea|button|object/.test( nodeName )
++		? !element.disabled
++		: "a" == nodeName
++			? element.href || isTabIndexNotNaN
++			: isTabIndexNotNaN)
++		// the element and all of its ancestors must be visible
++		&& visible( element );
++}
++
++function visible( element ) {
++	return !$( element ).parents().andSelf().filter(function() {
++		return $.curCSS( this, "visibility" ) === "hidden" ||
++			$.expr.filters.hidden( this );
++	}).length;
++}
++
++$.extend( $.expr[ ":" ], {
++	data: function( elem, i, match ) {
++		return !!$.data( elem, match[ 3 ] );
++	},
++
++	focusable: function( element ) {
++		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
++	},
++
++	tabbable: function( element ) {
++		var tabIndex = $.attr( element, "tabindex" ),
++			isTabIndexNaN = isNaN( tabIndex );
++		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
++	}
++});
++
++// support
++$(function() {
++	var body = document.body,
++		div = body.appendChild( div = document.createElement( "div" ) );
++
++	$.extend( div.style, {
++		minHeight: "100px",
++		height: "auto",
++		padding: 0,
++		borderWidth: 0
++	});
++
++	$.support.minHeight = div.offsetHeight === 100;
++	$.support.selectstart = "onselectstart" in div;
++
++	// set display to none to avoid a layout bug in IE
++	// http://dev.jquery.com/ticket/4014
++	body.removeChild( div ).style.display = "none";
++});
++
++
++
++
++
++// deprecated
++$.extend( $.ui, {
++	// $.ui.plugin is deprecated.  Use the proxy pattern instead.
++	plugin: {
++		add: function( module, option, set ) {
++			var proto = $.ui[ module ].prototype;
++			for ( var i in set ) {
++				proto.plugins[ i ] = proto.plugins[ i ] || [];
++				proto.plugins[ i ].push( [ option, set[ i ] ] );
++			}
++		},
++		call: function( instance, name, args ) {
++			var set = instance.plugins[ name ];
++			if ( !set || !instance.element[ 0 ].parentNode ) {
++				return;
++			}
++	
++			for ( var i = 0; i < set.length; i++ ) {
++				if ( instance.options[ set[ i ][ 0 ] ] ) {
++					set[ i ][ 1 ].apply( instance.element, args );
++				}
++			}
++		}
++	},
++	
++	// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
++	contains: function( a, b ) {
++		return document.compareDocumentPosition ?
++			a.compareDocumentPosition( b ) & 16 :
++			a !== b && a.contains( b );
++	},
++	
++	// only used by resizable
++	hasScroll: function( el, a ) {
++	
++		//If overflow is hidden, the element might have extra content, but the user wants to hide it
++		if ( $( el ).css( "overflow" ) === "hidden") {
++			return false;
++		}
++	
++		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
++			has = false;
++	
++		if ( el[ scroll ] > 0 ) {
++			return true;
++		}
++	
++		// TODO: determine which cases actually cause this to happen
++		// if the element doesn't have the scroll set, see if it's possible to
++		// set the scroll
++		el[ scroll ] = 1;
++		has = ( el[ scroll ] > 0 );
++		el[ scroll ] = 0;
++		return has;
++	},
++	
++	// these are odd functions, fix the API or move into individual plugins
++	isOverAxis: function( x, reference, size ) {
++		//Determines when x coordinate is over "b" element axis
++		return ( x > reference ) && ( x < ( reference + size ) );
++	},
++	isOver: function( y, x, top, left, height, width ) {
++		//Determines when x, y coordinates is over "b" element
++		return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
++	}
++});
++
++})( jQuery );
++/*!
++ * jQuery UI Widget 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Widget
++ */
++(function( $, undefined ) {
++
++// jQuery 1.4+
++if ( $.cleanData ) {
++	var _cleanData = $.cleanData;
++	$.cleanData = function( elems ) {
++		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++			$( elem ).triggerHandler( "remove" );
++		}
++		_cleanData( elems );
++	};
++} else {
++	var _remove = $.fn.remove;
++	$.fn.remove = function( selector, keepData ) {
++		return this.each(function() {
++			if ( !keepData ) {
++				if ( !selector || $.filter( selector, [ this ] ).length ) {
++					$( "*", this ).add( [ this ] ).each(function() {
++						$( this ).triggerHandler( "remove" );
++					});
++				}
++			}
++			return _remove.call( $(this), selector, keepData );
++		});
++	};
++}
++
++$.widget = function( name, base, prototype ) {
++	var namespace = name.split( "." )[ 0 ],
++		fullName;
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName ] = function( elem ) {
++		return !!$.data( elem, name );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	$[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without initializing for simple inheritance
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++
++	var basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++//	$.each( basePrototype, function( key, val ) {
++//		if ( $.isPlainObject(val) ) {
++//			basePrototype[ key ] = $.extend( {}, val );
++//		}
++//	});
++	basePrototype.options = $.extend( true, {}, basePrototype.options );
++	$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
++		namespace: namespace,
++		widgetName: name,
++		widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
++		widgetBaseClass: fullName
++	}, prototype );
++
++	$.widget.bridge( name, $[ namespace ][ name ] );
++};
++
++$.widget.bridge = function( name, object ) {
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = Array.prototype.slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.extend.apply( null, [ true, options ].concat(args) ) :
++			options;
++
++		// prevent calls to internal methods
++		if ( isMethodCall && options.charAt( 0 ) === "_" ) {
++			return returnValue;
++		}
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var instance = $.data( this, name ),
++					methodValue = instance && $.isFunction( instance[options] ) ?
++						instance[ options ].apply( instance, args ) :
++						instance;
++				// TODO: add this back in 1.9 and use $.error() (see #5972)
++//				if ( !instance ) {
++//					throw "cannot call methods on " + name + " prior to initialization; " +
++//						"attempted to call method '" + options + "'";
++//				}
++//				if ( !$.isFunction( instance[options] ) ) {
++//					throw "no such method '" + options + "' for " + name + " widget instance";
++//				}
++//				var methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, name );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					$.data( this, name, new object( options, this ) );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( options, element ) {
++	// allow instantiation without initializing for simple inheritance
++	if ( arguments.length ) {
++		this._createWidget( options, element );
++	}
++};
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	options: {
++		disabled: false
++	},
++	_createWidget: function( options, element ) {
++		// $.widget.bridge stores the plugin instance, but we do it anyway
++		// so that it's stored even before the _create function runs
++		$.data( element, this.widgetName, this );
++		this.element = $( element );
++		this.options = $.extend( true, {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		var self = this;
++		this.element.bind( "remove." + this.widgetName, function() {
++			self.destroy();
++		});
++
++		this._create();
++		this._trigger( "create" );
++		this._init();
++	},
++	_getCreateOptions: function() {
++		return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
++	},
++	_create: function() {},
++	_init: function() {},
++
++	destroy: function() {
++		this.element
++			.unbind( "." + this.widgetName )
++			.removeData( this.widgetName );
++		this.widget()
++			.unbind( "." + this.widgetName )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetBaseClass + "-disabled " +
++				"ui-state-disabled" );
++	},
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.extend( {}, this.options );
++		}
++
++		if  (typeof key === "string" ) {
++			if ( value === undefined ) {
++				return this.options[ key ];
++			}
++			options = {};
++			options[ key ] = value;
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var self = this;
++		$.each( options, function( key, value ) {
++			self._setOption( key, value );
++		});
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				[ value ? "addClass" : "removeClass"](
++					this.widgetBaseClass + "-disabled" + " " +
++					"ui-state-disabled" )
++				.attr( "aria-disabled", value );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_trigger: function( type, event, data ) {
++		var callback = this.options[ type ];
++
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		data = data || {};
++
++		// copy original event properties over to the new event
++		// this would happen if we could call $.event.fix instead of $.Event
++		// but we don't have a way to force an event to be fixed multiple times
++		if ( event.originalEvent ) {
++			for ( var i = $.event.props.length, prop; i; ) {
++				prop = $.event.props[ --i ];
++				event[ prop ] = event.originalEvent[ prop ];
++			}
++		}
++
++		this.element.trigger( event, data );
++
++		return !( $.isFunction(callback) &&
++			callback.call( this.element[0], event, data ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++})( jQuery );
++/*!
++ * jQuery UI Mouse 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Mouse
++ *
++ * Depends:
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.mouse", {
++	options: {
++		cancel: ':input,option',
++		distance: 1,
++		delay: 0
++	},
++	_mouseInit: function() {
++		var self = this;
++
++		this.element
++			.bind('mousedown.'+this.widgetName, function(event) {
++				return self._mouseDown(event);
++			})
++			.bind('click.'+this.widgetName, function(event) {
++				if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
++				    $.removeData(event.target, self.widgetName + '.preventClickEvent');
++					event.stopImmediatePropagation();
++					return false;
++				}
++			});
++
++		this.started = false;
++	},
++
++	// TODO: make sure destroying one instance of mouse doesn't mess with
++	// other instances of mouse
++	_mouseDestroy: function() {
++		this.element.unbind('.'+this.widgetName);
++	},
++
++	_mouseDown: function(event) {
++		// don't let more than one widget handle mouseStart
++		// TODO: figure out why we have to use originalEvent
++		event.originalEvent = event.originalEvent || {};
++		if (event.originalEvent.mouseHandled) { return; }
++
++		// we may have missed mouseup (out of window)
++		(this._mouseStarted && this._mouseUp(event));
++
++		this._mouseDownEvent = event;
++
++		var self = this,
++			btnIsLeft = (event.which == 1),
++			elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).closest(this.options.cancel).length : false);
++		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
++			return true;
++		}
++
++		this.mouseDelayMet = !this.options.delay;
++		if (!this.mouseDelayMet) {
++			this._mouseDelayTimer = setTimeout(function() {
++				self.mouseDelayMet = true;
++			}, this.options.delay);
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted = (this._mouseStart(event) !== false);
++			if (!this._mouseStarted) {
++				event.preventDefault();
++				return true;
++			}
++		}
++
++		// Click event may never have fired (Gecko & Opera)
++		if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
++			$.removeData(event.target, this.widgetName + '.preventClickEvent');
++		}
++
++		// these delegates are required to keep context
++		this._mouseMoveDelegate = function(event) {
++			return self._mouseMove(event);
++		};
++		this._mouseUpDelegate = function(event) {
++			return self._mouseUp(event);
++		};
++		$(document)
++			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
++			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
++
++		event.preventDefault();
++		event.originalEvent.mouseHandled = true;
++		return true;
++	},
++
++	_mouseMove: function(event) {
++		// IE mouseup check - mouseup happened when mouse was out of window
++		if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
++			return this._mouseUp(event);
++		}
++
++		if (this._mouseStarted) {
++			this._mouseDrag(event);
++			return event.preventDefault();
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted =
++				(this._mouseStart(this._mouseDownEvent, event) !== false);
++			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
++		}
++
++		return !this._mouseStarted;
++	},
++
++	_mouseUp: function(event) {
++		$(document)
++			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
++			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
++
++		if (this._mouseStarted) {
++			this._mouseStarted = false;
++
++			if (event.target == this._mouseDownEvent.target) {
++			    $.data(event.target, this.widgetName + '.preventClickEvent', true);
++			}
++
++			this._mouseStop(event);
++		}
++
++		return false;
++	},
++
++	_mouseDistanceMet: function(event) {
++		return (Math.max(
++				Math.abs(this._mouseDownEvent.pageX - event.pageX),
++				Math.abs(this._mouseDownEvent.pageY - event.pageY)
++			) >= this.options.distance
++		);
++	},
++
++	_mouseDelayMet: function(event) {
++		return this.mouseDelayMet;
++	},
++
++	// These are placeholder methods, to be overriden by extending plugin
++	_mouseStart: function(event) {},
++	_mouseDrag: function(event) {},
++	_mouseStop: function(event) {},
++	_mouseCapture: function(event) { return true; }
++});
++
++})(jQuery);
++/*
++ * jQuery UI Draggable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Draggables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.draggable", $.ui.mouse, {
++	widgetEventPrefix: "drag",
++	options: {
++		addClasses: true,
++		appendTo: "parent",
++		axis: false,
++		connectToSortable: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		iframeFix: false,
++		opacity: false,
++		refreshPositions: false,
++		revert: false,
++		revertDuration: 500,
++		scope: "default",
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		snap: false,
++		snapMode: "both",
++		snapTolerance: 20,
++		stack: false,
++		zIndex: false
++	},
++	_create: function() {
++
++		if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
++			this.element[0].style.position = 'relative';
++
++		(this.options.addClasses && this.element.addClass("ui-draggable"));
++		(this.options.disabled && this.element.addClass("ui-draggable-disabled"));
++
++		this._mouseInit();
++
++	},
++
++	destroy: function() {
++		if(!this.element.data('draggable')) return;
++		this.element
++			.removeData("draggable")
++			.unbind(".draggable")
++			.removeClass("ui-draggable"
++				+ " ui-draggable-dragging"
++				+ " ui-draggable-disabled");
++		this._mouseDestroy();
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++
++		var o = this.options;
++
++		// among others, prevent a drag on a resizable-handle
++		if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
++			return false;
++
++		//Quit if we're not on a valid handle
++		this.handle = this._getHandle(event);
++		if (!this.handle)
++			return false;
++		
++		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
++			$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
++			.css({
++				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
++				position: "absolute", opacity: "0.001", zIndex: 1000
++			})
++			.css($(this).offset())
++			.appendTo("body");
++		});
++
++		return true;
++
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options;
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		//If ddmanager is used for droppables, set the global draggable
++		if($.ui.ddmanager)
++			$.ui.ddmanager.current = this;
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Store the helper's css position
++		this.cssPosition = this.helper.css("position");
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.positionAbs = this.element.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this.position = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Set a containment if given in the options
++		if(o.containment)
++			this._setContainment();
++
++		//Trigger event + callbacks
++		if(this._trigger("start", event) === false) {
++			this._clear();
++			return false;
++		}
++
++		//Recache the helper size
++		this._cacheHelperProportions();
++
++		//Prepare the droppable offsets
++		if ($.ui.ddmanager && !o.dropBehaviour)
++			$.ui.ddmanager.prepareOffsets(this, event);
++
++		this.helper.addClass("ui-draggable-dragging");
++		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		
++		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
++		if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);
++		
++		return true;
++	},
++
++	_mouseDrag: function(event, noPropagation) {
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Call plugins and callbacks and use the resulting position if something is returned
++		if (!noPropagation) {
++			var ui = this._uiHash();
++			if(this._trigger('drag', event, ui) === false) {
++				this._mouseUp({});
++				return false;
++			}
++			this.position = ui.position;
++		}
++
++		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
++		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
++		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		//If we are using droppables, inform the manager about the drop
++		var dropped = false;
++		if ($.ui.ddmanager && !this.options.dropBehaviour)
++			dropped = $.ui.ddmanager.drop(this, event);
++
++		//if a drop comes from outside (a sortable)
++		if(this.dropped) {
++			dropped = this.dropped;
++			this.dropped = false;
++		}
++		
++		//if the original element is removed, don't bother to continue if helper is set to "original"
++		if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original")
++			return false;
++
++		if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
++			var self = this;
++			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
++				if(self._trigger("stop", event) !== false) {
++					self._clear();
++				}
++			});
++		} else {
++			if(this._trigger("stop", event) !== false) {
++				this._clear();
++			}
++		}
++
++		return false;
++	},
++	
++	_mouseUp: function(event) {
++		if (this.options.iframeFix === true) {
++			$("div.ui-draggable-iframeFix").each(function() { 
++				this.parentNode.removeChild(this); 
++			}); //Remove frame helpers
++		}
++		
++		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
++		if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);
++		
++		return $.ui.mouse.prototype._mouseUp.call(this, event);
++	},
++	
++	cancel: function() {
++		
++		if(this.helper.is(".ui-draggable-dragging")) {
++			this._mouseUp({});
++		} else {
++			this._clear();
++		}
++		
++		return this;
++		
++	},
++
++	_getHandle: function(event) {
++
++		var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
++		$(this.options.handle, this.element)
++			.find("*")
++			.andSelf()
++			.each(function() {
++				if(this == event.target) handle = true;
++			});
++
++		return handle;
++
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options;
++		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
++
++		if(!helper.parents('body').length)
++			helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
++
++		if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
++			helper.css("position", "absolute");
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj == 'string') {
++			obj = obj.split(' ');
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ('left' in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ('right' in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ('top' in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ('bottom' in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
++		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
++			po = { top: 0, left: 0 };
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition == "relative") {
++			var p = this.element.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.element.css("marginLeft"),10) || 0),
++			top: (parseInt(this.element.css("marginTop"),10) || 0),
++			right: (parseInt(this.element.css("marginRight"),10) || 0),
++			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var o = this.options;
++		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
++		if(o.containment == 'document' || o.containment == 'window') this.containment = [
++			o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
++			o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
++			(o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
++			(o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++		];
++
++		if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
++		        var c = $(o.containment);
++			var ce = c[0]; if(!ce) return;
++			var co = c.offset();
++			var over = ($(ce).css("overflow") != 'hidden');
++
++			this.containment = [
++				(parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
++				(parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
++				(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
++				(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top  - this.margins.bottom
++			];
++			this.relative_container = c;
++
++		} else if(o.containment.constructor == Array) {
++			this.containment = o.containment;
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) pos = this.position;
++		var mod = d == "absolute" ? 1 : -1;
++		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top																	// The absolute mouse position
++				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
++				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
++				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left																// The absolute mouse position
++				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
++				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
++				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++		var pageX = event.pageX;
++		var pageY = event.pageY;
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++		         var containment;
++		         if(this.containment) {
++				 if (this.relative_container){
++				     var co = this.relative_container.offset();
++				     containment = [ this.containment[0] + co.left,
++						     this.containment[1] + co.top,
++						     this.containment[2] + co.left,
++						     this.containment[3] + co.top ];
++				 }
++				 else {
++				     containment = this.containment;
++				 }
++
++				if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;
++				if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;
++				if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left;
++				if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top;
++			}
++
++			if(o.grid) {
++				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
++				var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
++				pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
++				pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY																// The absolute mouse position
++				- this.offset.click.top													// Click offset (relative to the element)
++				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
++				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
++				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX																// The absolute mouse position
++				- this.offset.click.left												// Click offset (relative to the element)
++				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
++				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
++				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_clear: function() {
++		this.helper.removeClass("ui-draggable-dragging");
++		if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
++		//if($.ui.ddmanager) $.ui.ddmanager.current = null;
++		this.helper = null;
++		this.cancelHelperRemoval = false;
++	},
++
++	// From now on bulk stuff - mainly helpers
++
++	_trigger: function(type, event, ui) {
++		ui = ui || this._uiHash();
++		$.ui.plugin.call(this, type, [event, ui]);
++		if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
++		return $.Widget.prototype._trigger.call(this, type, event, ui);
++	},
++
++	plugins: {},
++
++	_uiHash: function(event) {
++		return {
++			helper: this.helper,
++			position: this.position,
++			originalPosition: this.originalPosition,
++			offset: this.positionAbs
++		};
++	}
++
++});
++
++$.extend($.ui.draggable, {
++	version: "1.8.15"
++});
++
++$.ui.plugin.add("draggable", "connectToSortable", {
++	start: function(event, ui) {
++
++		var inst = $(this).data("draggable"), o = inst.options,
++			uiSortable = $.extend({}, ui, { item: inst.element });
++		inst.sortables = [];
++		$(o.connectToSortable).each(function() {
++			var sortable = $.data(this, 'sortable');
++			if (sortable && !sortable.options.disabled) {
++				inst.sortables.push({
++					instance: sortable,
++					shouldRevert: sortable.options.revert
++				});
++				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
++				sortable._trigger("activate", event, uiSortable);
++			}
++		});
++
++	},
++	stop: function(event, ui) {
++
++		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
++		var inst = $(this).data("draggable"),
++			uiSortable = $.extend({}, ui, { item: inst.element });
++
++		$.each(inst.sortables, function() {
++			if(this.instance.isOver) {
++
++				this.instance.isOver = 0;
++
++				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
++				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
++
++				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
++				if(this.shouldRevert) this.instance.options.revert = true;
++
++				//Trigger the stop of the sortable
++				this.instance._mouseStop(event);
++
++				this.instance.options.helper = this.instance.options._helper;
++
++				//If the helper has been the original item, restore properties in the sortable
++				if(inst.options.helper == 'original')
++					this.instance.currentItem.css({ top: 'auto', left: 'auto' });
++
++			} else {
++				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
++				this.instance._trigger("deactivate", event, uiSortable);
++			}
++
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("draggable"), self = this;
++
++		var checkPos = function(o) {
++			var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
++			var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
++			var itemHeight = o.height, itemWidth = o.width;
++			var itemTop = o.top, itemLeft = o.left;
++
++			return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
++		};
++
++		$.each(inst.sortables, function(i) {
++			
++			//Copy over some variables to allow calling the sortable's native _intersectsWith
++			this.instance.positionAbs = inst.positionAbs;
++			this.instance.helperProportions = inst.helperProportions;
++			this.instance.offset.click = inst.offset.click;
++			
++			if(this.instance._intersectsWith(this.instance.containerCache)) {
++
++				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
++				if(!this.instance.isOver) {
++
++					this.instance.isOver = 1;
++					//Now we fake the start of dragging for the sortable instance,
++					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
++					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
++					this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
++					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
++					this.instance.options.helper = function() { return ui.helper[0]; };
++
++					event.target = this.instance.currentItem[0];
++					this.instance._mouseCapture(event, true);
++					this.instance._mouseStart(event, true, true);
++
++					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
++					this.instance.offset.click.top = inst.offset.click.top;
++					this.instance.offset.click.left = inst.offset.click.left;
++					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
++					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
++
++					inst._trigger("toSortable", event);
++					inst.dropped = this.instance.element; //draggable revert needs that
++					//hack so receive/update callbacks work (mostly)
++					inst.currentItem = inst.element;
++					this.instance.fromOutside = inst;
++
++				}
++
++				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
++				if(this.instance.currentItem) this.instance._mouseDrag(event);
++
++			} else {
++
++				//If it doesn't intersect with the sortable, and it intersected before,
++				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
++				if(this.instance.isOver) {
++
++					this.instance.isOver = 0;
++					this.instance.cancelHelperRemoval = true;
++					
++					//Prevent reverting on this forced stop
++					this.instance.options.revert = false;
++					
++					// The out event needs to be triggered independently
++					this.instance._trigger('out', event, this.instance._uiHash(this.instance));
++					
++					this.instance._mouseStop(event, true);
++					this.instance.options.helper = this.instance.options._helper;
++
++					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
++					this.instance.currentItem.remove();
++					if(this.instance.placeholder) this.instance.placeholder.remove();
++
++					inst._trigger("fromSortable", event);
++					inst.dropped = false; //draggable revert needs that
++				}
++
++			};
++
++		});
++
++	}
++});
++
++$.ui.plugin.add("draggable", "cursor", {
++	start: function(event, ui) {
++		var t = $('body'), o = $(this).data('draggable').options;
++		if (t.css("cursor")) o._cursor = t.css("cursor");
++		t.css("cursor", o.cursor);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data('draggable').options;
++		if (o._cursor) $('body').css("cursor", o._cursor);
++	}
++});
++
++$.ui.plugin.add("draggable", "opacity", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data('draggable').options;
++		if(t.css("opacity")) o._opacity = t.css("opacity");
++		t.css('opacity', o.opacity);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data('draggable').options;
++		if(o._opacity) $(ui.helper).css('opacity', o._opacity);
++	}
++});
++
++$.ui.plugin.add("draggable", "scroll", {
++	start: function(event, ui) {
++		var i = $(this).data("draggable");
++		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
++	},
++	drag: function(event, ui) {
++
++		var i = $(this).data("draggable"), o = i.options, scrolled = false;
++
++		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
++
++			if(!o.axis || o.axis != 'x') {
++				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
++				else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
++			}
++
++			if(!o.axis || o.axis != 'y') {
++				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
++				else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
++			}
++
++		} else {
++
++			if(!o.axis || o.axis != 'x') {
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++			}
++
++			if(!o.axis || o.axis != 'y') {
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++			}
++
++		}
++
++		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
++			$.ui.ddmanager.prepareOffsets(i, event);
++
++	}
++});
++
++$.ui.plugin.add("draggable", "snap", {
++	start: function(event, ui) {
++
++		var i = $(this).data("draggable"), o = i.options;
++		i.snapElements = [];
++
++		$(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
++			var $t = $(this); var $o = $t.offset();
++			if(this != i.element[0]) i.snapElements.push({
++				item: this,
++				width: $t.outerWidth(), height: $t.outerHeight(),
++				top: $o.top, left: $o.left
++			});
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("draggable"), o = inst.options;
++		var d = o.snapTolerance;
++
++		var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
++			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
++
++		for (var i = inst.snapElements.length - 1; i >= 0; i--){
++
++			var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
++				t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
++
++			//Yes, I know, this is insane ;)
++			if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
++				if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++				inst.snapElements[i].snapping = false;
++				continue;
++			}
++
++			if(o.snapMode != 'inner') {
++				var ts = Math.abs(t - y2) <= d;
++				var bs = Math.abs(b - y1) <= d;
++				var ls = Math.abs(l - x2) <= d;
++				var rs = Math.abs(r - x1) <= d;
++				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
++				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
++				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
++			}
++
++			var first = (ts || bs || ls || rs);
++
++			if(o.snapMode != 'outer') {
++				var ts = Math.abs(t - y1) <= d;
++				var bs = Math.abs(b - y2) <= d;
++				var ls = Math.abs(l - x1) <= d;
++				var rs = Math.abs(r - x2) <= d;
++				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
++				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
++				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
++			}
++
++			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
++				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
++
++		};
++
++	}
++});
++
++$.ui.plugin.add("draggable", "stack", {
++	start: function(event, ui) {
++
++		var o = $(this).data("draggable").options;
++
++		var group = $.makeArray($(o.stack)).sort(function(a,b) {
++			return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
++		});
++		if (!group.length) { return; }
++		
++		var min = parseInt(group[0].style.zIndex) || 0;
++		$(group).each(function(i) {
++			this.style.zIndex = min + i;
++		});
++
++		this[0].style.zIndex = min + group.length;
++
++	}
++});
++
++$.ui.plugin.add("draggable", "zIndex", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("draggable").options;
++		if(t.css("zIndex")) o._zIndex = t.css("zIndex");
++		t.css('zIndex', o.zIndex);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("draggable").options;
++		if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
++	}
++});
++
++})(jQuery);
++/*
++ * jQuery UI Droppable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Droppables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.draggable.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.droppable", {
++	widgetEventPrefix: "drop",
++	options: {
++		accept: '*',
++		activeClass: false,
++		addClasses: true,
++		greedy: false,
++		hoverClass: false,
++		scope: 'default',
++		tolerance: 'intersect'
++	},
++	_create: function() {
++
++		var o = this.options, accept = o.accept;
++		this.isover = 0; this.isout = 1;
++
++		this.accept = $.isFunction(accept) ? accept : function(d) {
++			return d.is(accept);
++		};
++
++		//Store the droppable's proportions
++		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
++
++		// Add the reference and positions to the manager
++		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
++		$.ui.ddmanager.droppables[o.scope].push(this);
++
++		(o.addClasses && this.element.addClass("ui-droppable"));
++
++	},
++
++	destroy: function() {
++		var drop = $.ui.ddmanager.droppables[this.options.scope];
++		for ( var i = 0; i < drop.length; i++ )
++			if ( drop[i] == this )
++				drop.splice(i, 1);
++
++		this.element
++			.removeClass("ui-droppable ui-droppable-disabled")
++			.removeData("droppable")
++			.unbind(".droppable");
++
++		return this;
++	},
++
++	_setOption: function(key, value) {
++
++		if(key == 'accept') {
++			this.accept = $.isFunction(value) ? value : function(d) {
++				return d.is(value);
++			};
++		}
++		$.Widget.prototype._setOption.apply(this, arguments);
++	},
++
++	_activate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) this.element.addClass(this.options.activeClass);
++		(draggable && this._trigger('activate', event, this.ui(draggable)));
++	},
++
++	_deactivate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
++		(draggable && this._trigger('deactivate', event, this.ui(draggable)));
++	},
++
++	_over: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) this.element.addClass(this.options.hoverClass);
++			this._trigger('over', event, this.ui(draggable));
++		}
++
++	},
++
++	_out: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
++			this._trigger('out', event, this.ui(draggable));
++		}
++
++	},
++
++	_drop: function(event,custom) {
++
++		var draggable = custom || $.ui.ddmanager.current;
++		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element
++
++		var childrenIntersection = false;
++		this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() {
++			var inst = $.data(this, 'droppable');
++			if(
++				inst.options.greedy
++				&& !inst.options.disabled
++				&& inst.options.scope == draggable.options.scope
++				&& inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element))
++				&& $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
++			) { childrenIntersection = true; return false; }
++		});
++		if(childrenIntersection) return false;
++
++		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
++			if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
++			this._trigger('drop', event, this.ui(draggable));
++			return this.element;
++		}
++
++		return false;
++
++	},
++
++	ui: function(c) {
++		return {
++			draggable: (c.currentItem || c.element),
++			helper: c.helper,
++			position: c.position,
++			offset: c.positionAbs
++		};
++	}
++
++});
++
++$.extend($.ui.droppable, {
++	version: "1.8.15"
++});
++
++$.ui.intersect = function(draggable, droppable, toleranceMode) {
++
++	if (!droppable.offset) return false;
++
++	var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
++		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;
++	var l = droppable.offset.left, r = l + droppable.proportions.width,
++		t = droppable.offset.top, b = t + droppable.proportions.height;
++
++	switch (toleranceMode) {
++		case 'fit':
++			return (l <= x1 && x2 <= r
++				&& t <= y1 && y2 <= b);
++			break;
++		case 'intersect':
++			return (l < x1 + (draggable.helperProportions.width / 2) // Right Half
++				&& x2 - (draggable.helperProportions.width / 2) < r // Left Half
++				&& t < y1 + (draggable.helperProportions.height / 2) // Bottom Half
++				&& y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
++			break;
++		case 'pointer':
++			var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),
++				draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),
++				isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);
++			return isOver;
++			break;
++		case 'touch':
++			return (
++					(y1 >= t && y1 <= b) ||	// Top edge touching
++					(y2 >= t && y2 <= b) ||	// Bottom edge touching
++					(y1 < t && y2 > b)		// Surrounded vertically
++				) && (
++					(x1 >= l && x1 <= r) ||	// Left edge touching
++					(x2 >= l && x2 <= r) ||	// Right edge touching
++					(x1 < l && x2 > r)		// Surrounded horizontally
++				);
++			break;
++		default:
++			return false;
++			break;
++		}
++
++};
++
++/*
++	This manager tracks offsets of draggables and droppables
++*/
++$.ui.ddmanager = {
++	current: null,
++	droppables: { 'default': [] },
++	prepareOffsets: function(t, event) {
++
++		var m = $.ui.ddmanager.droppables[t.options.scope] || [];
++		var type = event ? event.type : null; // workaround for #2317
++		var list = (t.currentItem || t.element).find(":data(droppable)").andSelf();
++
++		droppablesLoop: for (var i = 0; i < m.length; i++) {
++
++			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue;	//No disabled and non-accepted
++			for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item
++			m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; 									//If the element is not visible, continue
++
++			if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables
++
++			m[i].offset = m[i].element.offset();
++			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
++
++		}
++
++	},
++	drop: function(draggable, event) {
++
++		var dropped = false;
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(!this.options) return;
++			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
++				dropped = dropped || this._drop.call(this, event);
++
++			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++				this.isout = 1; this.isover = 0;
++				this._deactivate.call(this, event);
++			}
++
++		});
++		return dropped;
++
++	},
++	dragStart: function( draggable, event ) {
++		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
++		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
++			if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
++		});
++	},
++	drag: function(draggable, event) {
++
++		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
++		if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);
++
++		//Run through all droppables and check their positions based on specific tolerance options
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(this.options.disabled || this.greedyChild || !this.visible) return;
++			var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
++
++			var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
++			if(!c) return;
++
++			var parentInstance;
++			if (this.options.greedy) {
++				var parent = this.element.parents(':data(droppable):eq(0)');
++				if (parent.length) {
++					parentInstance = $.data(parent[0], 'droppable');
++					parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
++				}
++			}
++
++			// we just moved into a greedy child
++			if (parentInstance && c == 'isover') {
++				parentInstance['isover'] = 0;
++				parentInstance['isout'] = 1;
++				parentInstance._out.call(parentInstance, event);
++			}
++
++			this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;
++			this[c == "isover" ? "_over" : "_out"].call(this, event);
++
++			// we just moved out of a greedy child
++			if (parentInstance && c == 'isout') {
++				parentInstance['isout'] = 0;
++				parentInstance['isover'] = 1;
++				parentInstance._over.call(parentInstance, event);
++			}
++		});
++
++	},
++	dragStop: function( draggable, event ) {
++		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
++		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
++		if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
++	}
++};
++
++})(jQuery);
++/*
++ * jQuery UI Resizable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Resizables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.resizable", $.ui.mouse, {
++	widgetEventPrefix: "resize",
++	options: {
++		alsoResize: false,
++		animate: false,
++		animateDuration: "slow",
++		animateEasing: "swing",
++		aspectRatio: false,
++		autoHide: false,
++		containment: false,
++		ghost: false,
++		grid: false,
++		handles: "e,s,se",
++		helper: false,
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 10,
++		minWidth: 10,
++		zIndex: 1000
++	},
++	_create: function() {
++
++		var self = this, o = this.options;
++		this.element.addClass("ui-resizable");
++
++		$.extend(this, {
++			_aspectRatio: !!(o.aspectRatio),
++			aspectRatio: o.aspectRatio,
++			originalElement: this.element,
++			_proportionallyResizeElements: [],
++			_helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
++		});
++
++		//Wrap the element if it cannot hold child nodes
++		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
++
++			//Opera fix for relative positioning
++			if (/relative/.test(this.element.css('position')) && $.browser.opera)
++				this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
++
++			//Create a wrapper element and set the wrapper to the new current internal element
++			this.element.wrap(
++				$('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
++					position: this.element.css('position'),
++					width: this.element.outerWidth(),
++					height: this.element.outerHeight(),
++					top: this.element.css('top'),
++					left: this.element.css('left')
++				})
++			);
++
++			//Overwrite the original this.element
++			this.element = this.element.parent().data(
++				"resizable", this.element.data('resizable')
++			);
++
++			this.elementIsWrapper = true;
++
++			//Move margins to the wrapper
++			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
++			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
++
++			//Prevent Safari textarea resize
++			this.originalResizeStyle = this.originalElement.css('resize');
++			this.originalElement.css('resize', 'none');
++
++			//Push the actual element to our proportionallyResize internal array
++			this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
++
++			// avoid IE jump (hard set the margin)
++			this.originalElement.css({ margin: this.originalElement.css('margin') });
++
++			// fix handlers offset
++			this._proportionallyResize();
++
++		}
++
++		this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
++		if(this.handles.constructor == String) {
++
++			if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
++			var n = this.handles.split(","); this.handles = {};
++
++			for(var i = 0; i < n.length; i++) {
++
++				var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
++				var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
++
++				// increase zIndex of sw, se, ne, nw axis
++				//TODO : this modifies original option
++				if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
++
++				//TODO : What's going on here?
++				if ('se' == handle) {
++					axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
++				};
++
++				//Insert into internal handles object and append to element
++				this.handles[handle] = '.ui-resizable-'+handle;
++				this.element.append(axis);
++			}
++
++		}
++
++		this._renderAxis = function(target) {
++
++			target = target || this.element;
++
++			for(var i in this.handles) {
++
++				if(this.handles[i].constructor == String)
++					this.handles[i] = $(this.handles[i], this.element).show();
++
++				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
++				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
++
++					var axis = $(this.handles[i], this.element), padWrapper = 0;
++
++					//Checking the correct pad and border
++					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
++
++					//The padding type i have to apply...
++					var padPos = [ 'padding',
++						/ne|nw|n/.test(i) ? 'Top' :
++						/se|sw|s/.test(i) ? 'Bottom' :
++						/^e$/.test(i) ? 'Right' : 'Left' ].join("");
++
++					target.css(padPos, padWrapper);
++
++					this._proportionallyResize();
++
++				}
++
++				//TODO: What's that good for? There's not anything to be executed left
++				if(!$(this.handles[i]).length)
++					continue;
++
++			}
++		};
++
++		//TODO: make renderAxis a prototype function
++		this._renderAxis(this.element);
++
++		this._handles = $('.ui-resizable-handle', this.element)
++			.disableSelection();
++
++		//Matching axis name
++		this._handles.mouseover(function() {
++			if (!self.resizing) {
++				if (this.className)
++					var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
++				//Axis, default = se
++				self.axis = axis && axis[1] ? axis[1] : 'se';
++			}
++		});
++
++		//If we want to auto hide the elements
++		if (o.autoHide) {
++			this._handles.hide();
++			$(this.element)
++				.addClass("ui-resizable-autohide")
++				.hover(function() {
++					if (o.disabled) return;
++					$(this).removeClass("ui-resizable-autohide");
++					self._handles.show();
++				},
++				function(){
++					if (o.disabled) return;
++					if (!self.resizing) {
++						$(this).addClass("ui-resizable-autohide");
++						self._handles.hide();
++					}
++				});
++		}
++
++		//Initialize the mouse interaction
++		this._mouseInit();
++
++	},
++
++	destroy: function() {
++
++		this._mouseDestroy();
++
++		var _destroy = function(exp) {
++			$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
++				.removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
++		};
++
++		//TODO: Unwrap at same DOM position
++		if (this.elementIsWrapper) {
++			_destroy(this.element);
++			var wrapper = this.element;
++			wrapper.after(
++				this.originalElement.css({
++					position: wrapper.css('position'),
++					width: wrapper.outerWidth(),
++					height: wrapper.outerHeight(),
++					top: wrapper.css('top'),
++					left: wrapper.css('left')
++				})
++			).remove();
++		}
++
++		this.originalElement.css('resize', this.originalResizeStyle);
++		_destroy(this.originalElement);
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++		var handle = false;
++		for (var i in this.handles) {
++			if ($(this.handles[i])[0] == event.target) {
++				handle = true;
++			}
++		}
++
++		return !this.options.disabled && handle;
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options, iniPos = this.element.position(), el = this.element;
++
++		this.resizing = true;
++		this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
++
++		// bugfix for http://dev.jquery.com/ticket/1749
++		if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
++			el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
++		}
++
++		//Opera fixing relative position
++		if ($.browser.opera && (/relative/).test(el.css('position')))
++			el.css({ position: 'relative', top: 'auto', left: 'auto' });
++
++		this._renderProxy();
++
++		var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
++
++		if (o.containment) {
++			curleft += $(o.containment).scrollLeft() || 0;
++			curtop += $(o.containment).scrollTop() || 0;
++		}
++
++		//Store needed variables
++		this.offset = this.helper.offset();
++		this.position = { left: curleft, top: curtop };
++		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalPosition = { left: curleft, top: curtop };
++		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
++		this.originalMousePosition = { left: event.pageX, top: event.pageY };
++
++		//Aspect Ratio
++		this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
++
++	    var cursor = $('.ui-resizable-' + this.axis).css('cursor');
++	    $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
++
++		el.addClass("ui-resizable-resizing");
++		this._propagate("start", event);
++		return true;
++	},
++
++	_mouseDrag: function(event) {
++
++		//Increase performance, avoid regex
++		var el = this.helper, o = this.options, props = {},
++			self = this, smp = this.originalMousePosition, a = this.axis;
++
++		var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
++		var trigger = this._change[a];
++		if (!trigger) return false;
++
++		// Calculate the attrs that will be change
++		var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
++
++		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
++		this._updateVirtualBoundaries(event.shiftKey);
++		if (this._aspectRatio || event.shiftKey)
++			data = this._updateRatio(data, event);
++
++		data = this._respectSize(data, event);
++
++		// plugins callbacks need to be called first
++		this._propagate("resize", event);
++
++		el.css({
++			top: this.position.top + "px", left: this.position.left + "px",
++			width: this.size.width + "px", height: this.size.height + "px"
++		});
++
++		if (!this._helper && this._proportionallyResizeElements.length)
++			this._proportionallyResize();
++
++		this._updateCache(data);
++
++		// calling the user callback at the end
++		this._trigger('resize', event, this.ui());
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		this.resizing = false;
++		var o = this.options, self = this;
++
++		if(this._helper) {
++			var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++				soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
++				soffsetw = ista ? 0 : self.sizeDiff.width;
++
++			var s = { width: (self.helper.width()  - soffsetw), height: (self.helper.height() - soffseth) },
++				left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
++				top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
++
++			if (!o.animate)
++				this.element.css($.extend(s, { top: top, left: left }));
++
++			self.helper.height(self.size.height);
++			self.helper.width(self.size.width);
++
++			if (this._helper && !o.animate) this._proportionallyResize();
++		}
++
++		$('body').css('cursor', 'auto');
++
++		this.element.removeClass("ui-resizable-resizing");
++
++		this._propagate("stop", event);
++
++		if (this._helper) this.helper.remove();
++		return false;
++
++	},
++
++    _updateVirtualBoundaries: function(forceAspectRatio) {
++        var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
++
++        b = {
++            minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
++            maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
++            minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
++            maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
++        };
++
++        if(this._aspectRatio || forceAspectRatio) {
++            // We want to create an enclosing box whose aspect ration is the requested one
++            // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
++            pMinWidth = b.minHeight * this.aspectRatio;
++            pMinHeight = b.minWidth / this.aspectRatio;
++            pMaxWidth = b.maxHeight * this.aspectRatio;
++            pMaxHeight = b.maxWidth / this.aspectRatio;
++
++            if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
++            if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
++            if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
++            if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
++        }
++        this._vBoundaries = b;
++    },
++
++	_updateCache: function(data) {
++		var o = this.options;
++		this.offset = this.helper.offset();
++		if (isNumber(data.left)) this.position.left = data.left;
++		if (isNumber(data.top)) this.position.top = data.top;
++		if (isNumber(data.height)) this.size.height = data.height;
++		if (isNumber(data.width)) this.size.width = data.width;
++	},
++
++	_updateRatio: function(data, event) {
++
++		var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
++
++		if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
++		else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
++
++		if (a == 'sw') {
++			data.left = cpos.left + (csize.width - data.width);
++			data.top = null;
++		}
++		if (a == 'nw') {
++			data.top = cpos.top + (csize.height - data.height);
++			data.left = cpos.left + (csize.width - data.width);
++		}
++
++		return data;
++	},
++
++	_respectSize: function(data, event) {
++
++		var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
++				ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
++					isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
++
++		if (isminw) data.width = o.minWidth;
++		if (isminh) data.height = o.minHeight;
++		if (ismaxw) data.width = o.maxWidth;
++		if (ismaxh) data.height = o.maxHeight;
++
++		var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
++		var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
++
++		if (isminw && cw) data.left = dw - o.minWidth;
++		if (ismaxw && cw) data.left = dw - o.maxWidth;
++		if (isminh && ch)	data.top = dh - o.minHeight;
++		if (ismaxh && ch)	data.top = dh - o.maxHeight;
++
++		// fixing jump error on top/left - bug #2330
++		var isNotwh = !data.width && !data.height;
++		if (isNotwh && !data.left && data.top) data.top = null;
++		else if (isNotwh && !data.top && data.left) data.left = null;
++
++		return data;
++	},
++
++	_proportionallyResize: function() {
++
++		var o = this.options;
++		if (!this._proportionallyResizeElements.length) return;
++		var element = this.helper || this.element;
++
++		for (var i=0; i < this._proportionallyResizeElements.length; i++) {
++
++			var prel = this._proportionallyResizeElements[i];
++
++			if (!this.borderDif) {
++				var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
++					p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
++
++				this.borderDif = $.map(b, function(v, i) {
++					var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
++					return border + padding;
++				});
++			}
++
++			if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
++				continue;
++
++			prel.css({
++				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
++				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
++			});
++
++		};
++
++	},
++
++	_renderProxy: function() {
++
++		var el = this.element, o = this.options;
++		this.elementOffset = el.offset();
++
++		if(this._helper) {
++
++			this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
++
++			// fix ie6 offset TODO: This seems broken
++			var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
++			pxyoffset = ( ie6 ? 2 : -1 );
++
++			this.helper.addClass(this._helper).css({
++				width: this.element.outerWidth() + pxyoffset,
++				height: this.element.outerHeight() + pxyoffset,
++				position: 'absolute',
++				left: this.elementOffset.left - ie6offset +'px',
++				top: this.elementOffset.top - ie6offset +'px',
++				zIndex: ++o.zIndex //TODO: Don't modify option
++			});
++
++			this.helper
++				.appendTo("body")
++				.disableSelection();
++
++		} else {
++			this.helper = this.element;
++		}
++
++	},
++
++	_change: {
++		e: function(event, dx, dy) {
++			return { width: this.originalSize.width + dx };
++		},
++		w: function(event, dx, dy) {
++			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
++			return { left: sp.left + dx, width: cs.width - dx };
++		},
++		n: function(event, dx, dy) {
++			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
++			return { top: sp.top + dy, height: cs.height - dy };
++		},
++		s: function(event, dx, dy) {
++			return { height: this.originalSize.height + dy };
++		},
++		se: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		sw: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		},
++		ne: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		nw: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		}
++	},
++
++	_propagate: function(n, event) {
++		$.ui.plugin.call(this, n, [event, this.ui()]);
++		(n != "resize" && this._trigger(n, event, this.ui()));
++	},
++
++	plugins: {},
++
++	ui: function() {
++		return {
++			originalElement: this.originalElement,
++			element: this.element,
++			helper: this.helper,
++			position: this.position,
++			size: this.size,
++			originalSize: this.originalSize,
++			originalPosition: this.originalPosition
++		};
++	}
++
++});
++
++$.extend($.ui.resizable, {
++	version: "1.8.15"
++});
++
++/*
++ * Resizable Extensions
++ */
++
++$.ui.plugin.add("resizable", "alsoResize", {
++
++	start: function (event, ui) {
++		var self = $(this).data("resizable"), o = self.options;
++
++		var _store = function (exp) {
++			$(exp).each(function() {
++				var el = $(this);
++				el.data("resizable-alsoresize", {
++					width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
++					left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10),
++					position: el.css('position') // to reset Opera on stop()
++				});
++			});
++		};
++
++		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
++			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
++			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
++		}else{
++			_store(o.alsoResize);
++		}
++	},
++
++	resize: function (event, ui) {
++		var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
++
++		var delta = {
++			height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
++			top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
++		},
++
++		_alsoResize = function (exp, c) {
++			$(exp).each(function() {
++				var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, 
++					css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
++
++				$.each(css, function (i, prop) {
++					var sum = (start[prop]||0) + (delta[prop]||0);
++					if (sum && sum >= 0)
++						style[prop] = sum || null;
++				});
++
++				// Opera fixing relative position
++				if ($.browser.opera && /relative/.test(el.css('position'))) {
++					self._revertToRelativePosition = true;
++					el.css({ position: 'absolute', top: 'auto', left: 'auto' });
++				}
++
++				el.css(style);
++			});
++		};
++
++		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
++			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
++		}else{
++			_alsoResize(o.alsoResize);
++		}
++	},
++
++	stop: function (event, ui) {
++		var self = $(this).data("resizable"), o = self.options;
++
++		var _reset = function (exp) {
++			$(exp).each(function() {
++				var el = $(this);
++				// reset position for Opera - no need to verify it was changed
++				el.css({ position: el.data("resizable-alsoresize").position });
++			});
++		};
++
++		if (self._revertToRelativePosition) {
++			self._revertToRelativePosition = false;
++			if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
++				$.each(o.alsoResize, function (exp) { _reset(exp); });
++			}else{
++				_reset(o.alsoResize);
++			}
++		}
++
++		$(this).removeData("resizable-alsoresize");
++	}
++});
++
++$.ui.plugin.add("resizable", "animate", {
++
++	stop: function(event, ui) {
++		var self = $(this).data("resizable"), o = self.options;
++
++		var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++					soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
++						soffsetw = ista ? 0 : self.sizeDiff.width;
++
++		var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
++					left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
++						top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
++
++		self.element.animate(
++			$.extend(style, top && left ? { top: top, left: left } : {}), {
++				duration: o.animateDuration,
++				easing: o.animateEasing,
++				step: function() {
++
++					var data = {
++						width: parseInt(self.element.css('width'), 10),
++						height: parseInt(self.element.css('height'), 10),
++						top: parseInt(self.element.css('top'), 10),
++						left: parseInt(self.element.css('left'), 10)
++					};
++
++					if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
++
++					// propagating resize, and updating values for each animation step
++					self._updateCache(data);
++					self._propagate("resize", event);
++
++				}
++			}
++		);
++	}
++
++});
++
++$.ui.plugin.add("resizable", "containment", {
++
++	start: function(event, ui) {
++		var self = $(this).data("resizable"), o = self.options, el = self.element;
++		var oc = o.containment,	ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
++		if (!ce) return;
++
++		self.containerElement = $(ce);
++
++		if (/document/.test(oc) || oc == document) {
++			self.containerOffset = { left: 0, top: 0 };
++			self.containerPosition = { left: 0, top: 0 };
++
++			self.parentData = {
++				element: $(document), left: 0, top: 0,
++				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
++			};
++		}
++
++		// i'm a node, so compute top, left, right, bottom
++		else {
++			var element = $(ce), p = [];
++			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
++
++			self.containerOffset = element.offset();
++			self.containerPosition = element.position();
++			self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
++
++			var co = self.containerOffset, ch = self.containerSize.height,	cw = self.containerSize.width,
++						width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
++
++			self.parentData = {
++				element: ce, left: co.left, top: co.top, width: width, height: height
++			};
++		}
++	},
++
++	resize: function(event, ui) {
++		var self = $(this).data("resizable"), o = self.options,
++				ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
++				pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
++
++		if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
++
++		if (cp.left < (self._helper ? co.left : 0)) {
++			self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
++			if (pRatio) self.size.height = self.size.width / o.aspectRatio;
++			self.position.left = o.helper ? co.left : 0;
++		}
++
++		if (cp.top < (self._helper ? co.top : 0)) {
++			self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
++			if (pRatio) self.size.width = self.size.height * o.aspectRatio;
++			self.position.top = self._helper ? co.top : 0;
++		}
++
++		self.offset.left = self.parentData.left+self.position.left;
++		self.offset.top = self.parentData.top+self.position.top;
++
++		var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
++					hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
++
++		var isParent = self.containerElement.get(0) == self.element.parent().get(0),
++		    isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
++
++		if(isParent && isOffsetRelative) woset -= self.parentData.left;
++
++		if (woset + self.size.width >= self.parentData.width) {
++			self.size.width = self.parentData.width - woset;
++			if (pRatio) self.size.height = self.size.width / self.aspectRatio;
++		}
++
++		if (hoset + self.size.height >= self.parentData.height) {
++			self.size.height = self.parentData.height - hoset;
++			if (pRatio) self.size.width = self.size.height * self.aspectRatio;
++		}
++	},
++
++	stop: function(event, ui){
++		var self = $(this).data("resizable"), o = self.options, cp = self.position,
++				co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
++
++		var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
++
++		if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++
++		if (self._helper && !o.animate && (/static/).test(ce.css('position')))
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++
++	}
++});
++
++$.ui.plugin.add("resizable", "ghost", {
++
++	start: function(event, ui) {
++
++		var self = $(this).data("resizable"), o = self.options, cs = self.size;
++
++		self.ghost = self.originalElement.clone();
++		self.ghost
++			.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
++			.addClass('ui-resizable-ghost')
++			.addClass(typeof o.ghost == 'string' ? o.ghost : '');
++
++		self.ghost.appendTo(self.helper);
++
++	},
++
++	resize: function(event, ui){
++		var self = $(this).data("resizable"), o = self.options;
++		if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
++	},
++
++	stop: function(event, ui){
++		var self = $(this).data("resizable"), o = self.options;
++		if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
++	}
++
++});
++
++$.ui.plugin.add("resizable", "grid", {
++
++	resize: function(event, ui) {
++		var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
++		o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
++		var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
++
++		if (/^(se|s|e)$/.test(a)) {
++			self.size.width = os.width + ox;
++			self.size.height = os.height + oy;
++		}
++		else if (/^(ne)$/.test(a)) {
++			self.size.width = os.width + ox;
++			self.size.height = os.height + oy;
++			self.position.top = op.top - oy;
++		}
++		else if (/^(sw)$/.test(a)) {
++			self.size.width = os.width + ox;
++			self.size.height = os.height + oy;
++			self.position.left = op.left - ox;
++		}
++		else {
++			self.size.width = os.width + ox;
++			self.size.height = os.height + oy;
++			self.position.top = op.top - oy;
++			self.position.left = op.left - ox;
++		}
++	}
++
++});
++
++var num = function(v) {
++	return parseInt(v, 10) || 0;
++};
++
++var isNumber = function(value) {
++	return !isNaN(parseInt(value, 10));
++};
++
++})(jQuery);
++/*
++ * jQuery UI Selectable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Selectables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.selectable", $.ui.mouse, {
++	options: {
++		appendTo: 'body',
++		autoRefresh: true,
++		distance: 0,
++		filter: '*',
++		tolerance: 'touch'
++	},
++	_create: function() {
++		var self = this;
++
++		this.element.addClass("ui-selectable");
++
++		this.dragged = false;
++
++		// cache selectee children based on filter
++		var selectees;
++		this.refresh = function() {
++			selectees = $(self.options.filter, self.element[0]);
++			selectees.each(function() {
++				var $this = $(this);
++				var pos = $this.offset();
++				$.data(this, "selectable-item", {
++					element: this,
++					$element: $this,
++					left: pos.left,
++					top: pos.top,
++					right: pos.left + $this.outerWidth(),
++					bottom: pos.top + $this.outerHeight(),
++					startselected: false,
++					selected: $this.hasClass('ui-selected'),
++					selecting: $this.hasClass('ui-selecting'),
++					unselecting: $this.hasClass('ui-unselecting')
++				});
++			});
++		};
++		this.refresh();
++
++		this.selectees = selectees.addClass("ui-selectee");
++
++		this._mouseInit();
++
++		this.helper = $("<div class='ui-selectable-helper'></div>");
++	},
++
++	destroy: function() {
++		this.selectees
++			.removeClass("ui-selectee")
++			.removeData("selectable-item");
++		this.element
++			.removeClass("ui-selectable ui-selectable-disabled")
++			.removeData("selectable")
++			.unbind(".selectable");
++		this._mouseDestroy();
++
++		return this;
++	},
++
++	_mouseStart: function(event) {
++		var self = this;
++
++		this.opos = [event.pageX, event.pageY];
++
++		if (this.options.disabled)
++			return;
++
++		var options = this.options;
++
++		this.selectees = $(options.filter, this.element[0]);
++
++		this._trigger("start", event);
++
++		$(options.appendTo).append(this.helper);
++		// position helper (lasso)
++		this.helper.css({
++			"left": event.clientX,
++			"top": event.clientY,
++			"width": 0,
++			"height": 0
++		});
++
++		if (options.autoRefresh) {
++			this.refresh();
++		}
++
++		this.selectees.filter('.ui-selected').each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.startselected = true;
++			if (!event.metaKey) {
++				selectee.$element.removeClass('ui-selected');
++				selectee.selected = false;
++				selectee.$element.addClass('ui-unselecting');
++				selectee.unselecting = true;
++				// selectable UNSELECTING callback
++				self._trigger("unselecting", event, {
++					unselecting: selectee.element
++				});
++			}
++		});
++
++		$(event.target).parents().andSelf().each(function() {
++			var selectee = $.data(this, "selectable-item");
++			if (selectee) {
++				var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected');
++				selectee.$element
++					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
++					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
++				selectee.unselecting = !doSelect;
++				selectee.selecting = doSelect;
++				selectee.selected = doSelect;
++				// selectable (UN)SELECTING callback
++				if (doSelect) {
++					self._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				} else {
++					self._trigger("unselecting", event, {
++						unselecting: selectee.element
++					});
++				}
++				return false;
++			}
++		});
++
++	},
++
++	_mouseDrag: function(event) {
++		var self = this;
++		this.dragged = true;
++
++		if (this.options.disabled)
++			return;
++
++		var options = this.options;
++
++		var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
++		if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
++		if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
++		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
++
++		this.selectees.each(function() {
++			var selectee = $.data(this, "selectable-item");
++			//prevent helper from being selected if appendTo: selectable
++			if (!selectee || selectee.element == self.element[0])
++				return;
++			var hit = false;
++			if (options.tolerance == 'touch') {
++				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
++			} else if (options.tolerance == 'fit') {
++				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
++			}
++
++			if (hit) {
++				// SELECT
++				if (selectee.selected) {
++					selectee.$element.removeClass('ui-selected');
++					selectee.selected = false;
++				}
++				if (selectee.unselecting) {
++					selectee.$element.removeClass('ui-unselecting');
++					selectee.unselecting = false;
++				}
++				if (!selectee.selecting) {
++					selectee.$element.addClass('ui-selecting');
++					selectee.selecting = true;
++					// selectable SELECTING callback
++					self._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				}
++			} else {
++				// UNSELECT
++				if (selectee.selecting) {
++					if (event.metaKey && selectee.startselected) {
++						selectee.$element.removeClass('ui-selecting');
++						selectee.selecting = false;
++						selectee.$element.addClass('ui-selected');
++						selectee.selected = true;
++					} else {
++						selectee.$element.removeClass('ui-selecting');
++						selectee.selecting = false;
++						if (selectee.startselected) {
++							selectee.$element.addClass('ui-unselecting');
++							selectee.unselecting = true;
++						}
++						// selectable UNSELECTING callback
++						self._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++				if (selectee.selected) {
++					if (!event.metaKey && !selectee.startselected) {
++						selectee.$element.removeClass('ui-selected');
++						selectee.selected = false;
++
++						selectee.$element.addClass('ui-unselecting');
++						selectee.unselecting = true;
++						// selectable UNSELECTING callback
++						self._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++			}
++		});
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++		var self = this;
++
++		this.dragged = false;
++
++		var options = this.options;
++
++		$('.ui-unselecting', this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass('ui-unselecting');
++			selectee.unselecting = false;
++			selectee.startselected = false;
++			self._trigger("unselected", event, {
++				unselected: selectee.element
++			});
++		});
++		$('.ui-selecting', this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
++			selectee.selecting = false;
++			selectee.selected = true;
++			selectee.startselected = true;
++			self._trigger("selected", event, {
++				selected: selectee.element
++			});
++		});
++		this._trigger("stop", event);
++
++		this.helper.remove();
++
++		return false;
++	}
++
++});
++
++$.extend($.ui.selectable, {
++	version: "1.8.15"
++});
++
++})(jQuery);
++/*
++ * jQuery UI Sortable 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Sortables
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget("ui.sortable", $.ui.mouse, {
++	widgetEventPrefix: "sort",
++	options: {
++		appendTo: "parent",
++		axis: false,
++		connectWith: false,
++		containment: false,
++		cursor: 'auto',
++		cursorAt: false,
++		dropOnEmpty: true,
++		forcePlaceholderSize: false,
++		forceHelperSize: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		items: '> *',
++		opacity: false,
++		placeholder: false,
++		revert: false,
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		scope: "default",
++		tolerance: "intersect",
++		zIndex: 1000
++	},
++	_create: function() {
++
++		var o = this.options;
++		this.containerCache = {};
++		this.element.addClass("ui-sortable");
++
++		//Get the items
++		this.refresh();
++
++		//Let's determine if the items are being displayed horizontally
++		this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
++
++		//Let's determine the parent's offset
++		this.offset = this.element.offset();
++
++		//Initialize mouse events for interaction
++		this._mouseInit();
++
++	},
++
++	destroy: function() {
++		this.element
++			.removeClass("ui-sortable ui-sortable-disabled")
++			.removeData("sortable")
++			.unbind(".sortable");
++		this._mouseDestroy();
++
++		for ( var i = this.items.length - 1; i >= 0; i-- )
++			this.items[i].item.removeData("sortable-item");
++
++		return this;
++	},
++
++	_setOption: function(key, value){
++		if ( key === "disabled" ) {
++			this.options[ key ] = value;
++	
++			this.widget()
++				[ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" );
++		} else {
++			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
++			$.Widget.prototype._setOption.apply(this, arguments);
++		}
++	},
++
++	_mouseCapture: function(event, overrideHandle) {
++
++		if (this.reverting) {
++			return false;
++		}
++
++		if(this.options.disabled || this.options.type == 'static') return false;
++
++		//We have to refresh the items data once first
++		this._refreshItems(event);
++
++		//Find out if the clicked node (or one of its parents) is a actual item in this.items
++		var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
++			if($.data(this, 'sortable-item') == self) {
++				currentItem = $(this);
++				return false;
++			}
++		});
++		if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target);
++
++		if(!currentItem) return false;
++		if(this.options.handle && !overrideHandle) {
++			var validHandle = false;
++
++			$(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
++			if(!validHandle) return false;
++		}
++
++		this.currentItem = currentItem;
++		this._removeCurrentsFromItems();
++		return true;
++
++	},
++
++	_mouseStart: function(event, overrideHandle, noActivation) {
++
++		var o = this.options, self = this;
++		this.currentContainer = this;
++
++		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
++		this.refreshPositions();
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Get the next scrolling parent
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.currentItem.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		// Only after we got the offset, we can change the helper's position to absolute
++		// TODO: Still need to figure out a way to make relative sorting possible
++		this.helper.css("position", "absolute");
++		this.cssPosition = this.helper.css("position");
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Cache the former DOM position
++		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
++
++		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
++		if(this.helper[0] != this.currentItem[0]) {
++			this.currentItem.hide();
++		}
++
++		//Create the placeholder
++		this._createPlaceholder();
++
++		//Set a containment if given in the options
++		if(o.containment)
++			this._setContainment();
++
++		if(o.cursor) { // cursor option
++			if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor");
++			$('body').css("cursor", o.cursor);
++		}
++
++		if(o.opacity) { // opacity option
++			if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity");
++			this.helper.css("opacity", o.opacity);
++		}
++
++		if(o.zIndex) { // zIndex option
++			if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex");
++			this.helper.css("zIndex", o.zIndex);
++		}
++
++		//Prepare scrolling
++		if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
++			this.overflowOffset = this.scrollParent.offset();
++
++		//Call callbacks
++		this._trigger("start", event, this._uiHash());
++
++		//Recache the helper size
++		if(!this._preserveHelperProportions)
++			this._cacheHelperProportions();
++
++
++		//Post 'activate' events to possible containers
++		if(!noActivation) {
++			 for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); }
++		}
++
++		//Prepare possible droppables
++		if($.ui.ddmanager)
++			$.ui.ddmanager.current = this;
++
++		if ($.ui.ddmanager && !o.dropBehaviour)
++			$.ui.ddmanager.prepareOffsets(this, event);
++
++		this.dragging = true;
++
++		this.helper.addClass("ui-sortable-helper");
++		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		return true;
++
++	},
++
++	_mouseDrag: function(event) {
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		if (!this.lastPositionAbs) {
++			this.lastPositionAbs = this.positionAbs;
++		}
++
++		//Do scrolling
++		if(this.options.scroll) {
++			var o = this.options, scrolled = false;
++			if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
++
++				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
++				else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
++
++				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
++				else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
++
++			} else {
++
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++
++			}
++
++			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
++				$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++		//Regenerate the absolute position used for position checks
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Set the helper position
++		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
++		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
++
++		//Rearrange
++		for (var i = this.items.length - 1; i >= 0; i--) {
++
++			//Cache variables and intersection, continue if no intersection
++			var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
++			if (!intersection) continue;
++
++			if(itemElement != this.currentItem[0] //cannot intersect with itself
++				&&	this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
++				&&	!$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
++				&& (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
++				//&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
++			) {
++
++				this.direction = intersection == 1 ? "down" : "up";
++
++				if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
++					this._rearrange(event, item);
++				} else {
++					break;
++				}
++
++				this._trigger("change", event, this._uiHash());
++				break;
++			}
++		}
++
++		//Post events to containers
++		this._contactContainers(event);
++
++		//Interconnect with droppables
++		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
++
++		//Call callbacks
++		this._trigger('sort', event, this._uiHash());
++
++		this.lastPositionAbs = this.positionAbs;
++		return false;
++
++	},
++
++	_mouseStop: function(event, noPropagation) {
++
++		if(!event) return;
++
++		//If we are using droppables, inform the manager about the drop
++		if ($.ui.ddmanager && !this.options.dropBehaviour)
++			$.ui.ddmanager.drop(this, event);
++
++		if(this.options.revert) {
++			var self = this;
++			var cur = self.placeholder.offset();
++
++			self.reverting = true;
++
++			$(this.helper).animate({
++				left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
++				top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
++			}, parseInt(this.options.revert, 10) || 500, function() {
++				self._clear(event);
++			});
++		} else {
++			this._clear(event, noPropagation);
++		}
++
++		return false;
++
++	},
++
++	cancel: function() {
++
++		var self = this;
++
++		if(this.dragging) {
++
++			this._mouseUp({ target: null });
++
++			if(this.options.helper == "original")
++				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++			else
++				this.currentItem.show();
++
++			//Post deactivating events to containers
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				this.containers[i]._trigger("deactivate", null, self._uiHash(this));
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", null, self._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		if (this.placeholder) {
++			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++			if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++			if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
++
++			$.extend(this, {
++				helper: null,
++				dragging: false,
++				reverting: false,
++				_noFinalSort: null
++			});
++
++			if(this.domPosition.prev) {
++				$(this.domPosition.prev).after(this.currentItem);
++			} else {
++				$(this.domPosition.parent).prepend(this.currentItem);
++			}
++		}
++
++		return this;
++
++	},
++
++	serialize: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected);
++		var str = []; o = o || {};
++
++		$(items).each(function() {
++			var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
++			if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
++		});
++
++		if(!str.length && o.key) {
++			str.push(o.key + '=');
++		}
++
++		return str.join('&');
++
++	},
++
++	toArray: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected);
++		var ret = []; o = o || {};
++
++		items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
++		return ret;
++
++	},
++
++	/* Be careful with the following core functions */
++	_intersectsWith: function(item) {
++
++		var x1 = this.positionAbs.left,
++			x2 = x1 + this.helperProportions.width,
++			y1 = this.positionAbs.top,
++			y2 = y1 + this.helperProportions.height;
++
++		var l = item.left,
++			r = l + item.width,
++			t = item.top,
++			b = t + item.height;
++
++		var dyClick = this.offset.click.top,
++			dxClick = this.offset.click.left;
++
++		var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
++
++		if(	   this.options.tolerance == "pointer"
++			|| this.options.forcePointerForContainers
++			|| (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
++		) {
++			return isOverElement;
++		} else {
++
++			return (l < x1 + (this.helperProportions.width / 2) // Right Half
++				&& x2 - (this.helperProportions.width / 2) < r // Left Half
++				&& t < y1 + (this.helperProportions.height / 2) // Bottom Half
++				&& y2 - (this.helperProportions.height / 2) < b ); // Top Half
++
++		}
++	},
++
++	_intersectsWithPointer: function(item) {
++
++		var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
++			isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
++			isOverElement = isOverElementHeight && isOverElementWidth,
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (!isOverElement)
++			return false;
++
++		return this.floating ?
++			( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
++			: ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );
++
++	},
++
++	_intersectsWithSides: function(item) {
++
++		var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
++			isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (this.floating && horizontalDirection) {
++			return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
++		} else {
++			return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
++		}
++
++	},
++
++	_getDragVerticalDirection: function() {
++		var delta = this.positionAbs.top - this.lastPositionAbs.top;
++		return delta != 0 && (delta > 0 ? "down" : "up");
++	},
++
++	_getDragHorizontalDirection: function() {
++		var delta = this.positionAbs.left - this.lastPositionAbs.left;
++		return delta != 0 && (delta > 0 ? "right" : "left");
++	},
++
++	refresh: function(event) {
++		this._refreshItems(event);
++		this.refreshPositions();
++		return this;
++	},
++
++	_connectWith: function() {
++		var options = this.options;
++		return options.connectWith.constructor == String
++			? [options.connectWith]
++			: options.connectWith;
++	},
++	
++	_getItemsAsjQuery: function(connected) {
++
++		var self = this;
++		var items = [];
++		var queries = [];
++		var connectWith = this._connectWith();
++
++		if(connectWith && connected) {
++			for (var i = connectWith.length - 1; i >= 0; i--){
++				var cur = $(connectWith[i]);
++				for (var j = cur.length - 1; j >= 0; j--){
++					var inst = $.data(cur[j], 'sortable');
++					if(inst && inst != this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]);
++					}
++				};
++			};
++		}
++
++		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]);
++
++		for (var i = queries.length - 1; i >= 0; i--){
++			queries[i][0].each(function() {
++				items.push(this);
++			});
++		};
++
++		return $(items);
++
++	},
++
++	_removeCurrentsFromItems: function() {
++
++		var list = this.currentItem.find(":data(sortable-item)");
++
++		for (var i=0; i < this.items.length; i++) {
++
++			for (var j=0; j < list.length; j++) {
++				if(list[j] == this.items[i].item[0])
++					this.items.splice(i,1);
++			};
++
++		};
++
++	},
++
++	_refreshItems: function(event) {
++
++		this.items = [];
++		this.containers = [this];
++		var items = this.items;
++		var self = this;
++		var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
++		var connectWith = this._connectWith();
++
++		if(connectWith) {
++			for (var i = connectWith.length - 1; i >= 0; i--){
++				var cur = $(connectWith[i]);
++				for (var j = cur.length - 1; j >= 0; j--){
++					var inst = $.data(cur[j], 'sortable');
++					if(inst && inst != this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
++						this.containers.push(inst);
++					}
++				};
++			};
++		}
++
++		for (var i = queries.length - 1; i >= 0; i--) {
++			var targetData = queries[i][1];
++			var _queries = queries[i][0];
++
++			for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
++				var item = $(_queries[j]);
++
++				item.data('sortable-item', targetData); // Data for target checking (mouse manager)
++
++				items.push({
++					item: item,
++					instance: targetData,
++					width: 0, height: 0,
++					left: 0, top: 0
++				});
++			};
++		};
++
++	},
++
++	refreshPositions: function(fast) {
++
++		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
++		if(this.offsetParent && this.helper) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		for (var i = this.items.length - 1; i >= 0; i--){
++			var item = this.items[i];
++
++			//We ignore calculating positions of all connected containers when we're not over them
++			if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
++				continue;
++
++			var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
++
++			if (!fast) {
++				item.width = t.outerWidth();
++				item.height = t.outerHeight();
++			}
++
++			var p = t.offset();
++			item.left = p.left;
++			item.top = p.top;
++		};
++
++		if(this.options.custom && this.options.custom.refreshContainers) {
++			this.options.custom.refreshContainers.call(this);
++		} else {
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				var p = this.containers[i].element.offset();
++				this.containers[i].containerCache.left = p.left;
++				this.containers[i].containerCache.top = p.top;
++				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
++				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
++			};
++		}
++
++		return this;
++	},
++
++	_createPlaceholder: function(that) {
++
++		var self = that || this, o = self.options;
++
++		if(!o.placeholder || o.placeholder.constructor == String) {
++			var className = o.placeholder;
++			o.placeholder = {
++				element: function() {
++
++					var el = $(document.createElement(self.currentItem[0].nodeName))
++						.addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
++						.removeClass("ui-sortable-helper")[0];
++
++					if(!className)
++						el.style.visibility = "hidden";
++
++					return el;
++				},
++				update: function(container, p) {
++
++					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
++					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
++					if(className && !o.forcePlaceholderSize) return;
++
++					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
++					if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
++					if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
++				}
++			};
++		}
++
++		//Create the placeholder
++		self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
++
++		//Append it after the actual current item
++		self.currentItem.after(self.placeholder);
++
++		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
++		o.placeholder.update(self, self.placeholder);
++
++	},
++
++	_contactContainers: function(event) {
++		
++		// get innermost container that intersects with item 
++		var innermostContainer = null, innermostIndex = null;		
++		
++		
++		for (var i = this.containers.length - 1; i >= 0; i--){
++
++			// never consider a container that's located within the item itself 
++			if($.ui.contains(this.currentItem[0], this.containers[i].element[0]))
++				continue;
++
++			if(this._intersectsWith(this.containers[i].containerCache)) {
++
++				// if we've already found a container and it's more "inner" than this, then continue 
++				if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0]))
++					continue;
++
++				innermostContainer = this.containers[i]; 
++				innermostIndex = i;
++					
++			} else {
++				// container doesn't intersect. trigger "out" event if necessary 
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", event, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++		
++		// if no intersecting containers found, return 
++		if(!innermostContainer) return; 
++
++		// move the item into the container if it's not there already
++		if(this.containers.length === 1) {
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++			this.containers[innermostIndex].containerCache.over = 1;
++		} else if(this.currentContainer != this.containers[innermostIndex]) { 
++
++			//When entering a new container, we will find the item with the least distance and append our item near it 
++			var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; 
++			for (var j = this.items.length - 1; j >= 0; j--) { 
++				if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; 
++				var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; 
++				if(Math.abs(cur - base) < dist) { 
++					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; 
++				} 
++			} 
++
++			if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled 
++				return; 
++
++			this.currentContainer = this.containers[innermostIndex]; 
++			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); 
++			this._trigger("change", event, this._uiHash()); 
++			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); 
++
++			//Update the placeholder 
++			this.options.placeholder.update(this.currentContainer, this.placeholder); 
++		
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); 
++			this.containers[innermostIndex].containerCache.over = 1;
++		} 
++	
++		
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options;
++		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
++
++		if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
++			$(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
++
++		if(helper[0] == this.currentItem[0])
++			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
++
++		if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
++		if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj == 'string') {
++			obj = obj.split(' ');
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ('left' in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ('right' in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ('top' in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ('bottom' in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
++		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
++			po = { top: 0, left: 0 };
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition == "relative") {
++			var p = this.currentItem.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
++			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var o = this.options;
++		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
++		if(o.containment == 'document' || o.containment == 'window') this.containment = [
++			0 - this.offset.relative.left - this.offset.parent.left,
++			0 - this.offset.relative.top - this.offset.parent.top,
++			$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
++			($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++		];
++
++		if(!(/^(document|window|parent)$/).test(o.containment)) {
++			var ce = $(o.containment)[0];
++			var co = $(o.containment).offset();
++			var over = ($(ce).css("overflow") != 'hidden');
++
++			this.containment = [
++				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
++				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
++				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
++				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) pos = this.position;
++		var mod = d == "absolute" ? 1 : -1;
++		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top																	// The absolute mouse position
++				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
++				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
++				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left																// The absolute mouse position
++				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
++				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
++				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		// This is another very weird special case that only happens for relative elements:
++		// 1. If the css position is relative
++		// 2. and the scroll parent is the document or similar to the offset parent
++		// we have to refresh the relative offset during the scroll so there are no jumps
++		if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
++			this.offset.relative = this._getRelativeOffset();
++		}
++
++		var pageX = event.pageX;
++		var pageY = event.pageY;
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++
++			if(this.containment) {
++				if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
++				if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
++				if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
++				if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
++			}
++
++			if(o.grid) {
++				var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
++				pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
++				pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY																// The absolute mouse position
++				- this.offset.click.top													// Click offset (relative to the element)
++				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
++				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
++				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX																// The absolute mouse position
++				- this.offset.click.left												// Click offset (relative to the element)
++				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
++				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
++				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_rearrange: function(event, i, a, hardRefresh) {
++
++		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
++
++		//Various things done here to improve the performance:
++		// 1. we create a setTimeout, that calls refreshPositions
++		// 2. on the instance, we have a counter variable, that get's higher after every append
++		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
++		// 4. this lets only the last addition to the timeout stack through
++		this.counter = this.counter ? ++this.counter : 1;
++		var self = this, counter = this.counter;
++
++		window.setTimeout(function() {
++			if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
++		},0);
++
++	},
++
++	_clear: function(event, noPropagation) {
++
++		this.reverting = false;
++		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
++		// everything else normalized again
++		var delayedTriggers = [], self = this;
++
++		// We first have to update the dom position of the actual currentItem
++		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
++		if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem);
++		this._noFinalSort = null;
++
++		if(this.helper[0] == this.currentItem[0]) {
++			for(var i in this._storedCSS) {
++				if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
++			}
++			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++		} else {
++			this.currentItem.show();
++		}
++
++		if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
++		if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
++		if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element
++			if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) {
++					delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++					delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.containers[i]));
++				}
++			};
++		};
++
++		//Post events to containers
++		for (var i = this.containers.length - 1; i >= 0; i--){
++			if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++			if(this.containers[i].containerCache.over) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++				this.containers[i].containerCache.over = 0;
++			}
++		}
++
++		//Do what was originally in plugins
++		if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor
++		if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity
++		if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index
++
++		this.dragging = false;
++		if(this.cancelHelperRemoval) {
++			if(!noPropagation) {
++				this._trigger("beforeStop", event, this._uiHash());
++				for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
++				this._trigger("stop", event, this._uiHash());
++			}
++			return false;
++		}
++
++		if(!noPropagation) this._trigger("beforeStop", event, this._uiHash());
++
++		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++
++		if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
++
++		if(!noPropagation) {
++			for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
++			this._trigger("stop", event, this._uiHash());
++		}
++
++		this.fromOutside = false;
++		return true;
++
++	},
++
++	_trigger: function() {
++		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
++			this.cancel();
++		}
++	},
++
++	_uiHash: function(inst) {
++		var self = inst || this;
++		return {
++			helper: self.helper,
++			placeholder: self.placeholder || $([]),
++			position: self.position,
++			originalPosition: self.originalPosition,
++			offset: self.positionAbs,
++			item: self.currentItem,
++			sender: inst ? inst.element : null
++		};
++	}
++
++});
++
++$.extend($.ui.sortable, {
++	version: "1.8.15"
++});
++
++})(jQuery);
++/*
++ * jQuery UI Effects 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/
++ */
++;jQuery.effects || (function($, undefined) {
++
++$.effects = {};
++
++
++
++/******************************************************************************/
++/****************************** COLOR ANIMATIONS ******************************/
++/******************************************************************************/
++
++// override the animation for color styles
++$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',
++	'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'],
++function(i, attr) {
++	$.fx.step[attr] = function(fx) {
++		if (!fx.colorInit) {
++			fx.start = getColor(fx.elem, attr);
++			fx.end = getRGB(fx.end);
++			fx.colorInit = true;
++		}
++
++		fx.elem.style[attr] = 'rgb(' +
++			Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +
++			Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +
++			Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';
++	};
++});
++
++// Color Conversion functions from highlightFade
++// By Blair Mitchelmore
++// http://jquery.offput.ca/highlightFade/
++
++// Parse strings looking for color tuples [255,255,255]
++function getRGB(color) {
++		var result;
++
++		// Check if we're already dealing with an array of colors
++		if ( color && color.constructor == Array && color.length == 3 )
++				return color;
++
++		// Look for rgb(num,num,num)
++		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
++				return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
++
++		// Look for rgb(num%,num%,num%)
++		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
++				return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
++
++		// Look for #a0b1c2
++		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
++				return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
++
++		// Look for #fff
++		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
++				return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
++
++		// Look for rgba(0, 0, 0, 0) == transparent in Safari 3
++		if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
++				return colors['transparent'];
++
++		// Otherwise, we're most likely dealing with a named color
++		return colors[$.trim(color).toLowerCase()];
++}
++
++function getColor(elem, attr) {
++		var color;
++
++		do {
++				color = $.curCSS(elem, attr);
++
++				// Keep going until we find an element that has color, or we hit the body
++				if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
++						break;
++
++				attr = "backgroundColor";
++		} while ( elem = elem.parentNode );
++
++		return getRGB(color);
++};
++
++// Some named colors to work with
++// From Interface by Stefan Petre
++// http://interface.eyecon.ro/
++
++var colors = {
++	aqua:[0,255,255],
++	azure:[240,255,255],
++	beige:[245,245,220],
++	black:[0,0,0],
++	blue:[0,0,255],
++	brown:[165,42,42],
++	cyan:[0,255,255],
++	darkblue:[0,0,139],
++	darkcyan:[0,139,139],
++	darkgrey:[169,169,169],
++	darkgreen:[0,100,0],
++	darkkhaki:[189,183,107],
++	darkmagenta:[139,0,139],
++	darkolivegreen:[85,107,47],
++	darkorange:[255,140,0],
++	darkorchid:[153,50,204],
++	darkred:[139,0,0],
++	darksalmon:[233,150,122],
++	darkviolet:[148,0,211],
++	fuchsia:[255,0,255],
++	gold:[255,215,0],
++	green:[0,128,0],
++	indigo:[75,0,130],
++	khaki:[240,230,140],
++	lightblue:[173,216,230],
++	lightcyan:[224,255,255],
++	lightgreen:[144,238,144],
++	lightgrey:[211,211,211],
++	lightpink:[255,182,193],
++	lightyellow:[255,255,224],
++	lime:[0,255,0],
++	magenta:[255,0,255],
++	maroon:[128,0,0],
++	navy:[0,0,128],
++	olive:[128,128,0],
++	orange:[255,165,0],
++	pink:[255,192,203],
++	purple:[128,0,128],
++	violet:[128,0,128],
++	red:[255,0,0],
++	silver:[192,192,192],
++	white:[255,255,255],
++	yellow:[255,255,0],
++	transparent: [255,255,255]
++};
++
++
++
++/******************************************************************************/
++/****************************** CLASS ANIMATIONS ******************************/
++/******************************************************************************/
++
++var classAnimationActions = ['add', 'remove', 'toggle'],
++	shorthandStyles = {
++		border: 1,
++		borderBottom: 1,
++		borderColor: 1,
++		borderLeft: 1,
++		borderRight: 1,
++		borderTop: 1,
++		borderWidth: 1,
++		margin: 1,
++		padding: 1
++	};
++
++function getElementStyles() {
++	var style = document.defaultView
++			? document.defaultView.getComputedStyle(this, null)
++			: this.currentStyle,
++		newStyle = {},
++		key,
++		camelCase;
++
++	// webkit enumerates style porperties
++	if (style && style.length && style[0] && style[style[0]]) {
++		var len = style.length;
++		while (len--) {
++			key = style[len];
++			if (typeof style[key] == 'string') {
++				camelCase = key.replace(/\-(\w)/g, function(all, letter){
++					return letter.toUpperCase();
++				});
++				newStyle[camelCase] = style[key];
++			}
++		}
++	} else {
++		for (key in style) {
++			if (typeof style[key] === 'string') {
++				newStyle[key] = style[key];
++			}
++		}
++	}
++	
++	return newStyle;
++}
++
++function filterStyles(styles) {
++	var name, value;
++	for (name in styles) {
++		value = styles[name];
++		if (
++			// ignore null and undefined values
++			value == null ||
++			// ignore functions (when does this occur?)
++			$.isFunction(value) ||
++			// shorthand styles that need to be expanded
++			name in shorthandStyles ||
++			// ignore scrollbars (break in IE)
++			(/scrollbar/).test(name) ||
++
++			// only colors or values that can be converted to numbers
++			(!(/color/i).test(name) && isNaN(parseFloat(value)))
++		) {
++			delete styles[name];
++		}
++	}
++	
++	return styles;
++}
++
++function styleDifference(oldStyle, newStyle) {
++	var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459
++		name;
++
++	for (name in newStyle) {
++		if (oldStyle[name] != newStyle[name]) {
++			diff[name] = newStyle[name];
++		}
++	}
++
++	return diff;
++}
++
++$.effects.animateClass = function(value, duration, easing, callback) {
++	if ($.isFunction(easing)) {
++		callback = easing;
++		easing = null;
++	}
++
++	return this.queue(function() {
++		var that = $(this),
++			originalStyleAttr = that.attr('style') || ' ',
++			originalStyle = filterStyles(getElementStyles.call(this)),
++			newStyle,
++			className = that.attr('class');
++
++		$.each(classAnimationActions, function(i, action) {
++			if (value[action]) {
++				that[action + 'Class'](value[action]);
++			}
++		});
++		newStyle = filterStyles(getElementStyles.call(this));
++		that.attr('class', className);
++
++		that.animate(styleDifference(originalStyle, newStyle), {
++			queue: false,
++			duration: duration,
++			easing: easing,
++			complete: function() {
++				$.each(classAnimationActions, function(i, action) {
++					if (value[action]) { that[action + 'Class'](value[action]); }
++				});
++				// work around bug in IE by clearing the cssText before setting it
++				if (typeof that.attr('style') == 'object') {
++					that.attr('style').cssText = '';
++					that.attr('style').cssText = originalStyleAttr;
++				} else {
++					that.attr('style', originalStyleAttr);
++				}
++				if (callback) { callback.apply(this, arguments); }
++				$.dequeue( this );
++			}
++		});
++	});
++};
++
++$.fn.extend({
++	_addClass: $.fn.addClass,
++	addClass: function(classNames, speed, easing, callback) {
++		return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
++	},
++
++	_removeClass: $.fn.removeClass,
++	removeClass: function(classNames,speed,easing,callback) {
++		return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
++	},
++
++	_toggleClass: $.fn.toggleClass,
++	toggleClass: function(classNames, force, speed, easing, callback) {
++		if ( typeof force == "boolean" || force === undefined ) {
++			if ( !speed ) {
++				// without speed parameter;
++				return this._toggleClass(classNames, force);
++			} else {
++				return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);
++			}
++		} else {
++			// without switch parameter;
++			return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);
++		}
++	},
++
++	switchClass: function(remove,add,speed,easing,callback) {
++		return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
++	}
++});
++
++
++
++/******************************************************************************/
++/*********************************** EFFECTS **********************************/
++/******************************************************************************/
++
++$.extend($.effects, {
++	version: "1.8.15",
++
++	// Saves a set of properties in a data storage
++	save: function(element, set) {
++		for(var i=0; i < set.length; i++) {
++			if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
++		}
++	},
++
++	// Restores a set of previously saved properties from a data storage
++	restore: function(element, set) {
++		for(var i=0; i < set.length; i++) {
++			if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
++		}
++	},
++
++	setMode: function(el, mode) {
++		if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
++		return mode;
++	},
++
++	getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
++		// this should be a little more flexible in the future to handle a string & hash
++		var y, x;
++		switch (origin[0]) {
++			case 'top': y = 0; break;
++			case 'middle': y = 0.5; break;
++			case 'bottom': y = 1; break;
++			default: y = origin[0] / original.height;
++		};
++		switch (origin[1]) {
++			case 'left': x = 0; break;
++			case 'center': x = 0.5; break;
++			case 'right': x = 1; break;
++			default: x = origin[1] / original.width;
++		};
++		return {x: x, y: y};
++	},
++
++	// Wraps the element around a wrapper that copies position properties
++	createWrapper: function(element) {
++
++		// if the element is already wrapped, return it
++		if (element.parent().is('.ui-effects-wrapper')) {
++			return element.parent();
++		}
++
++		// wrap the element
++		var props = {
++				width: element.outerWidth(true),
++				height: element.outerHeight(true),
++				'float': element.css('float')
++			},
++			wrapper = $('<div></div>')
++				.addClass('ui-effects-wrapper')
++				.css({
++					fontSize: '100%',
++					background: 'transparent',
++					border: 'none',
++					margin: 0,
++					padding: 0
++				});
++
++		element.wrap(wrapper);
++		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
++
++		// transfer positioning properties to the wrapper
++		if (element.css('position') == 'static') {
++			wrapper.css({ position: 'relative' });
++			element.css({ position: 'relative' });
++		} else {
++			$.extend(props, {
++				position: element.css('position'),
++				zIndex: element.css('z-index')
++			});
++			$.each(['top', 'left', 'bottom', 'right'], function(i, pos) {
++				props[pos] = element.css(pos);
++				if (isNaN(parseInt(props[pos], 10))) {
++					props[pos] = 'auto';
++				}
++			});
++			element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' });
++		}
++
++		return wrapper.css(props).show();
++	},
++
++	removeWrapper: function(element) {
++		if (element.parent().is('.ui-effects-wrapper'))
++			return element.parent().replaceWith(element);
++		return element;
++	},
++
++	setTransition: function(element, list, factor, value) {
++		value = value || {};
++		$.each(list, function(i, x){
++			unit = element.cssUnit(x);
++			if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
++		});
++		return value;
++	}
++});
++
++
++function _normalizeArguments(effect, options, speed, callback) {
++	// shift params for method overloading
++	if (typeof effect == 'object') {
++		callback = options;
++		speed = null;
++		options = effect;
++		effect = options.effect;
++	}
++	if ($.isFunction(options)) {
++		callback = options;
++		speed = null;
++		options = {};
++	}
++        if (typeof options == 'number' || $.fx.speeds[options]) {
++		callback = speed;
++		speed = options;
++		options = {};
++	}
++	if ($.isFunction(speed)) {
++		callback = speed;
++		speed = null;
++	}
++
++	options = options || {};
++
++	speed = speed || options.duration;
++	speed = $.fx.off ? 0 : typeof speed == 'number'
++		? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default;
++
++	callback = callback || options.complete;
++
++	return [effect, options, speed, callback];
++}
++
++function standardSpeed( speed ) {
++	// valid standard speeds
++	if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
++		return true;
++	}
++	
++	// invalid strings - treat as "normal" speed
++	if ( typeof speed === "string" && !$.effects[ speed ] ) {
++		return true;
++	}
++	
++	return false;
++}
++
++$.fn.extend({
++	effect: function(effect, options, speed, callback) {
++		var args = _normalizeArguments.apply(this, arguments),
++			// TODO: make effects take actual parameters instead of a hash
++			args2 = {
++				options: args[1],
++				duration: args[2],
++				callback: args[3]
++			},
++			mode = args2.options.mode,
++			effectMethod = $.effects[effect];
++		
++		if ( $.fx.off || !effectMethod ) {
++			// delegate to the original method (e.g., .show()) if possible
++			if ( mode ) {
++				return this[ mode ]( args2.duration, args2.callback );
++			} else {
++				return this.each(function() {
++					if ( args2.callback ) {
++						args2.callback.call( this );
++					}
++				});
++			}
++		}
++		
++		return effectMethod.call(this, args2);
++	},
++
++	_show: $.fn.show,
++	show: function(speed) {
++		if ( standardSpeed( speed ) ) {
++			return this._show.apply(this, arguments);
++		} else {
++			var args = _normalizeArguments.apply(this, arguments);
++			args[1].mode = 'show';
++			return this.effect.apply(this, args);
++		}
++	},
++
++	_hide: $.fn.hide,
++	hide: function(speed) {
++		if ( standardSpeed( speed ) ) {
++			return this._hide.apply(this, arguments);
++		} else {
++			var args = _normalizeArguments.apply(this, arguments);
++			args[1].mode = 'hide';
++			return this.effect.apply(this, args);
++		}
++	},
++
++	// jQuery core overloads toggle and creates _toggle
++	__toggle: $.fn.toggle,
++	toggle: function(speed) {
++		if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
++			return this.__toggle.apply(this, arguments);
++		} else {
++			var args = _normalizeArguments.apply(this, arguments);
++			args[1].mode = 'toggle';
++			return this.effect.apply(this, args);
++		}
++	},
++
++	// helper functions
++	cssUnit: function(key) {
++		var style = this.css(key), val = [];
++		$.each( ['em','px','%','pt'], function(i, unit){
++			if(style.indexOf(unit) > 0)
++				val = [parseFloat(style), unit];
++		});
++		return val;
++	}
++});
++
++
++
++/******************************************************************************/
++/*********************************** EASING ***********************************/
++/******************************************************************************/
++
++/*
++ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
++ *
++ * Uses the built in easing capabilities added In jQuery 1.1
++ * to offer multiple easing options
++ *
++ * TERMS OF USE - jQuery Easing
++ *
++ * Open source under the BSD License.
++ *
++ * Copyright 2008 George McGinley Smith
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without modification,
++ * are permitted provided that the following conditions are met:
++ *
++ * Redistributions of source code must retain the above copyright notice, this list of
++ * conditions and the following disclaimer.
++ * Redistributions in binary form must reproduce the above copyright notice, this list
++ * of conditions and the following disclaimer in the documentation and/or other materials
++ * provided with the distribution.
++ *
++ * Neither the name of the author nor the names of contributors may be used to endorse
++ * or promote products derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
++ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
++ * OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++*/
++
++// t: current time, b: begInnIng value, c: change In value, d: duration
++$.easing.jswing = $.easing.swing;
++
++$.extend($.easing,
++{
++	def: 'easeOutQuad',
++	swing: function (x, t, b, c, d) {
++		//alert($.easing.default);
++		return $.easing[$.easing.def](x, t, b, c, d);
++	},
++	easeInQuad: function (x, t, b, c, d) {
++		return c*(t/=d)*t + b;
++	},
++	easeOutQuad: function (x, t, b, c, d) {
++		return -c *(t/=d)*(t-2) + b;
++	},
++	easeInOutQuad: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return c/2*t*t + b;
++		return -c/2 * ((--t)*(t-2) - 1) + b;
++	},
++	easeInCubic: function (x, t, b, c, d) {
++		return c*(t/=d)*t*t + b;
++	},
++	easeOutCubic: function (x, t, b, c, d) {
++		return c*((t=t/d-1)*t*t + 1) + b;
++	},
++	easeInOutCubic: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return c/2*t*t*t + b;
++		return c/2*((t-=2)*t*t + 2) + b;
++	},
++	easeInQuart: function (x, t, b, c, d) {
++		return c*(t/=d)*t*t*t + b;
++	},
++	easeOutQuart: function (x, t, b, c, d) {
++		return -c * ((t=t/d-1)*t*t*t - 1) + b;
++	},
++	easeInOutQuart: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
++		return -c/2 * ((t-=2)*t*t*t - 2) + b;
++	},
++	easeInQuint: function (x, t, b, c, d) {
++		return c*(t/=d)*t*t*t*t + b;
++	},
++	easeOutQuint: function (x, t, b, c, d) {
++		return c*((t=t/d-1)*t*t*t*t + 1) + b;
++	},
++	easeInOutQuint: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
++		return c/2*((t-=2)*t*t*t*t + 2) + b;
++	},
++	easeInSine: function (x, t, b, c, d) {
++		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
++	},
++	easeOutSine: function (x, t, b, c, d) {
++		return c * Math.sin(t/d * (Math.PI/2)) + b;
++	},
++	easeInOutSine: function (x, t, b, c, d) {
++		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
++	},
++	easeInExpo: function (x, t, b, c, d) {
++		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
++	},
++	easeOutExpo: function (x, t, b, c, d) {
++		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
++	},
++	easeInOutExpo: function (x, t, b, c, d) {
++		if (t==0) return b;
++		if (t==d) return b+c;
++		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
++		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
++	},
++	easeInCirc: function (x, t, b, c, d) {
++		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
++	},
++	easeOutCirc: function (x, t, b, c, d) {
++		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
++	},
++	easeInOutCirc: function (x, t, b, c, d) {
++		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
++		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
++	},
++	easeInElastic: function (x, t, b, c, d) {
++		var s=1.70158;var p=0;var a=c;
++		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
++		if (a < Math.abs(c)) { a=c; var s=p/4; }
++		else var s = p/(2*Math.PI) * Math.asin (c/a);
++		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
++	},
++	easeOutElastic: function (x, t, b, c, d) {
++		var s=1.70158;var p=0;var a=c;
++		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
++		if (a < Math.abs(c)) { a=c; var s=p/4; }
++		else var s = p/(2*Math.PI) * Math.asin (c/a);
++		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
++	},
++	easeInOutElastic: function (x, t, b, c, d) {
++		var s=1.70158;var p=0;var a=c;
++		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
++		if (a < Math.abs(c)) { a=c; var s=p/4; }
++		else var s = p/(2*Math.PI) * Math.asin (c/a);
++		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
++		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
++	},
++	easeInBack: function (x, t, b, c, d, s) {
++		if (s == undefined) s = 1.70158;
++		return c*(t/=d)*t*((s+1)*t - s) + b;
++	},
++	easeOutBack: function (x, t, b, c, d, s) {
++		if (s == undefined) s = 1.70158;
++		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
++	},
++	easeInOutBack: function (x, t, b, c, d, s) {
++		if (s == undefined) s = 1.70158;
++		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
++		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
++	},
++	easeInBounce: function (x, t, b, c, d) {
++		return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
++	},
++	easeOutBounce: function (x, t, b, c, d) {
++		if ((t/=d) < (1/2.75)) {
++			return c*(7.5625*t*t) + b;
++		} else if (t < (2/2.75)) {
++			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
++		} else if (t < (2.5/2.75)) {
++			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
++		} else {
++			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
++		}
++	},
++	easeInOutBounce: function (x, t, b, c, d) {
++		if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
++		return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
++	}
++});
++
++/*
++ *
++ * TERMS OF USE - EASING EQUATIONS
++ *
++ * Open source under the BSD License.
++ *
++ * Copyright 2001 Robert Penner
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without modification,
++ * are permitted provided that the following conditions are met:
++ *
++ * Redistributions of source code must retain the above copyright notice, this list of
++ * conditions and the following disclaimer.
++ * Redistributions in binary form must reproduce the above copyright notice, this list
++ * of conditions and the following disclaimer in the documentation and/or other materials
++ * provided with the distribution.
++ *
++ * Neither the name of the author nor the names of contributors may be used to endorse
++ * or promote products derived from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
++ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
++ * OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ */
++
++})(jQuery);
++/*
++ * jQuery UI Effects Blind 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Blind
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.blind = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
++		var direction = o.options.direction || 'vertical'; // Default direction
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
++		var ref = (direction == 'vertical') ? 'height' : 'width';
++		var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
++		if(mode == 'show') wrapper.css(ref, 0); // Shift
++
++		// Animation
++		var animation = {};
++		animation[ref] = mode == 'show' ? distance : 0;
++
++		// Animate
++		wrapper.animate(animation, o.duration, o.options.easing, function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(el[0], arguments); // Callback
++			el.dequeue();
++		});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Bounce 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Bounce
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.bounce = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
++		var direction = o.options.direction || 'up'; // Default direction
++		var distance = o.options.distance || 20; // Default distance
++		var times = o.options.times || 5; // Default # of times
++		var speed = o.duration || 250; // Default speed per bounce
++		if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		$.effects.createWrapper(el); // Create Wrapper
++		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
++		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
++		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3);
++		if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
++		if (mode == 'hide') distance = distance / (times * 2);
++		if (mode != 'hide') times--;
++
++		// Animate
++		if (mode == 'show') { // Show Bounce
++			var animation = {opacity: 1};
++			animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
++			el.animate(animation, speed / 2, o.options.easing);
++			distance = distance / 2;
++			times--;
++		};
++		for (var i = 0; i < times; i++) { // Bounces
++			var animation1 = {}, animation2 = {};
++			animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
++			animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
++			el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
++			distance = (mode == 'hide') ? distance * 2 : distance / 2;
++		};
++		if (mode == 'hide') { // Last Bounce
++			var animation = {opacity: 0};
++			animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
++			el.animate(animation, speed / 2, o.options.easing, function(){
++				el.hide(); // Hide
++				$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++				if(o.callback) o.callback.apply(this, arguments); // Callback
++			});
++		} else {
++			var animation1 = {}, animation2 = {};
++			animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
++			animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
++			el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){
++				$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++				if(o.callback) o.callback.apply(this, arguments); // Callback
++			});
++		};
++		el.queue('fx', function() { el.dequeue(); });
++		el.dequeue();
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Clip 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Clip
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.clip = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right','height','width'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
++		var direction = o.options.direction || 'vertical'; // Default direction
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
++		var animate = el[0].tagName == 'IMG' ? wrapper : el;
++		var ref = {
++			size: (direction == 'vertical') ? 'height' : 'width',
++			position: (direction == 'vertical') ? 'top' : 'left'
++		};
++		var distance = (direction == 'vertical') ? animate.height() : animate.width();
++		if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift
++
++		// Animation
++		var animation = {};
++		animation[ref.size] = mode == 'show' ? distance : 0;
++		animation[ref.position] = mode == 'show' ? 0 : distance / 2;
++
++		// Animate
++		animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(el[0], arguments); // Callback
++			el.dequeue();
++		}});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Drop 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Drop
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.drop = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right','opacity'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
++		var direction = o.options.direction || 'left'; // Default Direction
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		$.effects.createWrapper(el); // Create Wrapper
++		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
++		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
++		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2);
++		if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
++
++		// Animation
++		var animation = {opacity: mode == 'show' ? 1 : 0};
++		animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
++
++		// Animate
++		el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(this, arguments); // Callback
++			el.dequeue();
++		}});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Explode 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Explode
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.explode = function(o) {
++
++	return this.queue(function() {
++
++	var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
++	var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
++
++	o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
++	var el = $(this).show().css('visibility', 'hidden');
++	var offset = el.offset();
++
++	//Substract the margins - not fixing the problem yet.
++	offset.top -= parseInt(el.css("marginTop"),10) || 0;
++	offset.left -= parseInt(el.css("marginLeft"),10) || 0;
++
++	var width = el.outerWidth(true);
++	var height = el.outerHeight(true);
++
++	for(var i=0;i<rows;i++) { // =
++		for(var j=0;j<cells;j++) { // ||
++			el
++				.clone()
++				.appendTo('body')
++				.wrap('<div></div>')
++				.css({
++					position: 'absolute',
++					visibility: 'visible',
++					left: -j*(width/cells),
++					top: -i*(height/rows)
++				})
++				.parent()
++				.addClass('ui-effects-explode')
++				.css({
++					position: 'absolute',
++					overflow: 'hidden',
++					width: width/cells,
++					height: height/rows,
++					left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),
++					top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),
++					opacity: o.options.mode == 'show' ? 0 : 1
++				}).animate({
++					left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),
++					top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),
++					opacity: o.options.mode == 'show' ? 1 : 0
++				}, o.duration || 500);
++		}
++	}
++
++	// Set a timeout, to call the callback approx. when the other animations have finished
++	setTimeout(function() {
++
++		o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();
++				if(o.callback) o.callback.apply(el[0]); // Callback
++				el.dequeue();
++
++				$('div.ui-effects-explode').remove();
++
++	}, o.duration || 500);
++
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Fade 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Fade
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.fade = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			mode = $.effects.setMode(elem, o.options.mode || 'hide');
++
++		elem.animate({ opacity: mode }, {
++			queue: false,
++			duration: o.duration,
++			easing: o.options.easing,
++			complete: function() {
++				(o.callback && o.callback.apply(this, arguments));
++				elem.dequeue();
++			}
++		});
++	});
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Fold 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Fold
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.fold = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
++		var size = o.options.size || 15; // Default fold size
++		var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
++		var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
++		var widthFirst = ((mode == 'show') != horizFirst);
++		var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
++		var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
++		var percent = /([0-9]+)%/.exec(size);
++		if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
++		if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
++
++		// Animation
++		var animation1 = {}, animation2 = {};
++		animation1[ref[0]] = mode == 'show' ? distance[0] : size;
++		animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
++
++		// Animate
++		wrapper.animate(animation1, duration, o.options.easing)
++		.animate(animation2, duration, o.options.easing, function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(el[0], arguments); // Callback
++			el.dequeue();
++		});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Highlight 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Highlight
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.highlight = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			props = ['backgroundImage', 'backgroundColor', 'opacity'],
++			mode = $.effects.setMode(elem, o.options.mode || 'show'),
++			animation = {
++				backgroundColor: elem.css('backgroundColor')
++			};
++
++		if (mode == 'hide') {
++			animation.opacity = 0;
++		}
++
++		$.effects.save(elem, props);
++		elem
++			.show()
++			.css({
++				backgroundImage: 'none',
++				backgroundColor: o.options.color || '#ffff99'
++			})
++			.animate(animation, {
++				queue: false,
++				duration: o.duration,
++				easing: o.options.easing,
++				complete: function() {
++					(mode == 'hide' && elem.hide());
++					$.effects.restore(elem, props);
++					(mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter'));
++					(o.callback && o.callback.apply(this, arguments));
++					elem.dequeue();
++				}
++			});
++	});
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Pulsate 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Pulsate
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.pulsate = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			mode = $.effects.setMode(elem, o.options.mode || 'show');
++			times = ((o.options.times || 5) * 2) - 1;
++			duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2,
++			isVisible = elem.is(':visible'),
++			animateTo = 0;
++
++		if (!isVisible) {
++			elem.css('opacity', 0).show();
++			animateTo = 1;
++		}
++
++		if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) {
++			times--;
++		}
++
++		for (var i = 0; i < times; i++) {
++			elem.animate({ opacity: animateTo }, duration, o.options.easing);
++			animateTo = (animateTo + 1) % 2;
++		}
++
++		elem.animate({ opacity: animateTo }, duration, o.options.easing, function() {
++			if (animateTo == 0) {
++				elem.hide();
++			}
++			(o.callback && o.callback.apply(this, arguments));
++		});
++
++		elem
++			.queue('fx', function() { elem.dequeue(); })
++			.dequeue();
++	});
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Scale 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Scale
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.puff = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			mode = $.effects.setMode(elem, o.options.mode || 'hide'),
++			percent = parseInt(o.options.percent, 10) || 150,
++			factor = percent / 100,
++			original = { height: elem.height(), width: elem.width() };
++
++		$.extend(o.options, {
++			fade: true,
++			mode: mode,
++			percent: mode == 'hide' ? percent : 100,
++			from: mode == 'hide'
++				? original
++				: {
++					height: original.height * factor,
++					width: original.width * factor
++				}
++		});
++
++		elem.effect('scale', o.options, o.duration, o.callback);
++		elem.dequeue();
++	});
++};
++
++$.effects.scale = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this);
++
++		// Set options
++		var options = $.extend(true, {}, o.options);
++		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
++		var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
++		var direction = o.options.direction || 'both'; // Set default axis
++		var origin = o.options.origin; // The origin of the scaling
++		if (mode != 'effect') { // Set default origin and restore for show/hide
++			options.origin = origin || ['middle','center'];
++			options.restore = true;
++		}
++		var original = {height: el.height(), width: el.width()}; // Save original
++		el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
++
++		// Adjust
++		var factor = { // Set scaling factor
++			y: direction != 'horizontal' ? (percent / 100) : 1,
++			x: direction != 'vertical' ? (percent / 100) : 1
++		};
++		el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
++
++		if (o.options.fade) { // Fade option to support puff
++			if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
++			if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
++		};
++
++		// Animation
++		options.from = el.from; options.to = el.to; options.mode = mode;
++
++		// Animate
++		el.effect('size', options, o.duration, o.callback);
++		el.dequeue();
++	});
++
++};
++
++$.effects.size = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity'];
++		var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore
++		var props2 = ['width','height','overflow']; // Copy for children
++		var cProps = ['fontSize'];
++		var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
++		var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
++		var restore = o.options.restore || false; // Default restore
++		var scale = o.options.scale || 'both'; // Default scale mode
++		var origin = o.options.origin; // The origin of the sizing
++		var original = {height: el.height(), width: el.width()}; // Save original
++		el.from = o.options.from || original; // Default from state
++		el.to = o.options.to || original; // Default to state
++		// Adjust
++		if (origin) { // Calculate baseline shifts
++			var baseline = $.effects.getBaseline(origin, original);
++			el.from.top = (original.height - el.from.height) * baseline.y;
++			el.from.left = (original.width - el.from.width) * baseline.x;
++			el.to.top = (original.height - el.to.height) * baseline.y;
++			el.to.left = (original.width - el.to.width) * baseline.x;
++		};
++		var factor = { // Set scaling factor
++			from: {y: el.from.height / original.height, x: el.from.width / original.width},
++			to: {y: el.to.height / original.height, x: el.to.width / original.width}
++		};
++		if (scale == 'box' || scale == 'both') { // Scale the css box
++			if (factor.from.y != factor.to.y) { // Vertical props scaling
++				props = props.concat(vProps);
++				el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
++				el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
++			};
++			if (factor.from.x != factor.to.x) { // Horizontal props scaling
++				props = props.concat(hProps);
++				el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
++				el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
++			};
++		};
++		if (scale == 'content' || scale == 'both') { // Scale the content
++			if (factor.from.y != factor.to.y) { // Vertical props scaling
++				props = props.concat(cProps);
++				el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
++				el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
++			};
++		};
++		$.effects.save(el, restore ? props : props1); el.show(); // Save & Show
++		$.effects.createWrapper(el); // Create Wrapper
++		el.css('overflow','hidden').css(el.from); // Shift
++
++		// Animate
++		if (scale == 'content' || scale == 'both') { // Scale the children
++			vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
++			hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
++			props2 = props.concat(vProps).concat(hProps); // Concat
++			el.find("*[width]").each(function(){
++				child = $(this);
++				if (restore) $.effects.save(child, props2);
++				var c_original = {height: child.height(), width: child.width()}; // Save original
++				child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
++				child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
++				if (factor.from.y != factor.to.y) { // Vertical props scaling
++					child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
++					child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
++				};
++				if (factor.from.x != factor.to.x) { // Horizontal props scaling
++					child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
++					child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
++				};
++				child.css(child.from); // Shift children
++				child.animate(child.to, o.duration, o.options.easing, function(){
++					if (restore) $.effects.restore(child, props2); // Restore children
++				}); // Animate children
++			});
++		};
++
++		// Animate
++		el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
++			if (el.to.opacity === 0) {
++				el.css('opacity', el.from.opacity);
++			}
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(this, arguments); // Callback
++			el.dequeue();
++		}});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Shake 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Shake
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.shake = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
++		var direction = o.options.direction || 'left'; // Default direction
++		var distance = o.options.distance || 20; // Default distance
++		var times = o.options.times || 3; // Default # of times
++		var speed = o.duration || o.options.duration || 140; // Default speed per shake
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		$.effects.createWrapper(el); // Create Wrapper
++		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
++		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
++
++		// Animation
++		var animation = {}, animation1 = {}, animation2 = {};
++		animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
++		animation1[ref] = (motion == 'pos' ? '+=' : '-=')  + distance * 2;
++		animation2[ref] = (motion == 'pos' ? '-=' : '+=')  + distance * 2;
++
++		// Animate
++		el.animate(animation, speed, o.options.easing);
++		for (var i = 1; i < times; i++) { // Shakes
++			el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
++		};
++		el.animate(animation1, speed, o.options.easing).
++		animate(animation, speed / 2, o.options.easing, function(){ // Last shake
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(this, arguments); // Callback
++		});
++		el.queue('fx', function() { el.dequeue(); });
++		el.dequeue();
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Slide 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Slide
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.slide = function(o) {
++
++	return this.queue(function() {
++
++		// Create element
++		var el = $(this), props = ['position','top','bottom','left','right'];
++
++		// Set options
++		var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
++		var direction = o.options.direction || 'left'; // Default Direction
++
++		// Adjust
++		$.effects.save(el, props); el.show(); // Save & Show
++		$.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
++		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
++		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
++		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
++		if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift
++
++		// Animation
++		var animation = {};
++		animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
++
++		// Animate
++		el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
++			if(mode == 'hide') el.hide(); // Hide
++			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
++			if(o.callback) o.callback.apply(this, arguments); // Callback
++			el.dequeue();
++		}});
++
++	});
++
++};
++
++})(jQuery);
++/*
++ * jQuery UI Effects Transfer 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Effects/Transfer
++ *
++ * Depends:
++ *	jquery.effects.core.js
++ */
++(function( $, undefined ) {
++
++$.effects.transfer = function(o) {
++	return this.queue(function() {
++		var elem = $(this),
++			target = $(o.options.to),
++			endPosition = target.offset(),
++			animation = {
++				top: endPosition.top,
++				left: endPosition.left,
++				height: target.innerHeight(),
++				width: target.innerWidth()
++			},
++			startPosition = elem.offset(),
++			transfer = $('<div class="ui-effects-transfer"></div>')
++				.appendTo(document.body)
++				.addClass(o.options.className)
++				.css({
++					top: startPosition.top,
++					left: startPosition.left,
++					height: elem.innerHeight(),
++					width: elem.innerWidth(),
++					position: 'absolute'
++				})
++				.animate(animation, o.duration, o.options.easing, function() {
++					transfer.remove();
++					(o.callback && o.callback.apply(elem[0], arguments));
++					elem.dequeue();
++				});
++	});
++};
++
++})(jQuery);
++/*
++ * jQuery UI Accordion 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Accordion
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget( "ui.accordion", {
++	options: {
++		active: 0,
++		animated: "slide",
++		autoHeight: true,
++		clearStyle: false,
++		collapsible: false,
++		event: "click",
++		fillSpace: false,
++		header: "> li > :first-child,> :not(li):even",
++		icons: {
++			header: "ui-icon-triangle-1-e",
++			headerSelected: "ui-icon-triangle-1-s"
++		},
++		navigation: false,
++		navigationFilter: function() {
++			return this.href.toLowerCase() === location.href.toLowerCase();
++		}
++	},
++
++	_create: function() {
++		var self = this,
++			options = self.options;
++
++		self.running = 0;
++
++		self.element
++			.addClass( "ui-accordion ui-widget ui-helper-reset" )
++			// in lack of child-selectors in CSS
++			// we need to mark top-LIs in a UL-accordion for some IE-fix
++			.children( "li" )
++				.addClass( "ui-accordion-li-fix" );
++
++		self.headers = self.element.find( options.header )
++			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" )
++			.bind( "mouseenter.accordion", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).addClass( "ui-state-hover" );
++			})
++			.bind( "mouseleave.accordion", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( "ui-state-hover" );
++			})
++			.bind( "focus.accordion", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).addClass( "ui-state-focus" );
++			})
++			.bind( "blur.accordion", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( "ui-state-focus" );
++			});
++
++		self.headers.next()
++			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" );
++
++		if ( options.navigation ) {
++			var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 );
++			if ( current.length ) {
++				var header = current.closest( ".ui-accordion-header" );
++				if ( header.length ) {
++					// anchor within header
++					self.active = header;
++				} else {
++					// anchor within content
++					self.active = current.closest( ".ui-accordion-content" ).prev();
++				}
++			}
++		}
++
++		self.active = self._findActive( self.active || options.active )
++			.addClass( "ui-state-default ui-state-active" )
++			.toggleClass( "ui-corner-all" )
++			.toggleClass( "ui-corner-top" );
++		self.active.next().addClass( "ui-accordion-content-active" );
++
++		self._createIcons();
++		self.resize();
++		
++		// ARIA
++		self.element.attr( "role", "tablist" );
++
++		self.headers
++			.attr( "role", "tab" )
++			.bind( "keydown.accordion", function( event ) {
++				return self._keydown( event );
++			})
++			.next()
++				.attr( "role", "tabpanel" );
++
++		self.headers
++			.not( self.active || "" )
++			.attr({
++				"aria-expanded": "false",
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.next()
++				.hide();
++
++		// make sure at least one header is in the tab order
++		if ( !self.active.length ) {
++			self.headers.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			self.active
++				.attr({
++					"aria-expanded": "true",
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++		}
++
++		// only need links in tab order for Safari
++		if ( !$.browser.safari ) {
++			self.headers.find( "a" ).attr( "tabIndex", -1 );
++		}
++
++		if ( options.event ) {
++			self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) {
++				self._clickHandler.call( self, event, this );
++				event.preventDefault();
++			});
++		}
++	},
++
++	_createIcons: function() {
++		var options = this.options;
++		if ( options.icons ) {
++			$( "<span></span>" )
++				.addClass( "ui-icon " + options.icons.header )
++				.prependTo( this.headers );
++			this.active.children( ".ui-icon" )
++				.toggleClass(options.icons.header)
++				.toggleClass(options.icons.headerSelected);
++			this.element.addClass( "ui-accordion-icons" );
++		}
++	},
++
++	_destroyIcons: function() {
++		this.headers.children( ".ui-icon" ).remove();
++		this.element.removeClass( "ui-accordion-icons" );
++	},
++
++	destroy: function() {
++		var options = this.options;
++
++		this.element
++			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
++			.removeAttr( "role" );
++
++		this.headers
++			.unbind( ".accordion" )
++			.removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-expanded" )
++			.removeAttr( "aria-selected" )
++			.removeAttr( "tabIndex" );
++
++		this.headers.find( "a" ).removeAttr( "tabIndex" );
++		this._destroyIcons();
++		var contents = this.headers.next()
++			.css( "display", "" )
++			.removeAttr( "role" )
++			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" );
++		if ( options.autoHeight || options.fillHeight ) {
++			contents.css( "height", "" );
++		}
++
++		return $.Widget.prototype.destroy.call( this );
++	},
++
++	_setOption: function( key, value ) {
++		$.Widget.prototype._setOption.apply( this, arguments );
++			
++		if ( key == "active" ) {
++			this.activate( value );
++		}
++		if ( key == "icons" ) {
++			this._destroyIcons();
++			if ( value ) {
++				this._createIcons();
++			}
++		}
++		// #5332 - opacity doesn't cascade to positioned elements in IE
++		// so we need to add the disabled class to the headers and panels
++		if ( key == "disabled" ) {
++			this.headers.add(this.headers.next())
++				[ value ? "addClass" : "removeClass" ](
++					"ui-accordion-disabled ui-state-disabled" );
++		}
++	},
++
++	_keydown: function( event ) {
++		if ( this.options.disabled || event.altKey || event.ctrlKey ) {
++			return;
++		}
++
++		var keyCode = $.ui.keyCode,
++			length = this.headers.length,
++			currentIndex = this.headers.index( event.target ),
++			toFocus = false;
++
++		switch ( event.keyCode ) {
++			case keyCode.RIGHT:
++			case keyCode.DOWN:
++				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
++				break;
++			case keyCode.LEFT:
++			case keyCode.UP:
++				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
++				break;
++			case keyCode.SPACE:
++			case keyCode.ENTER:
++				this._clickHandler( { target: event.target }, event.target );
++				event.preventDefault();
++		}
++
++		if ( toFocus ) {
++			$( event.target ).attr( "tabIndex", -1 );
++			$( toFocus ).attr( "tabIndex", 0 );
++			toFocus.focus();
++			return false;
++		}
++
++		return true;
++	},
++
++	resize: function() {
++		var options = this.options,
++			maxHeight;
++
++		if ( options.fillSpace ) {
++			if ( $.browser.msie ) {
++				var defOverflow = this.element.parent().css( "overflow" );
++				this.element.parent().css( "overflow", "hidden");
++			}
++			maxHeight = this.element.parent().height();
++			if ($.browser.msie) {
++				this.element.parent().css( "overflow", defOverflow );
++			}
++
++			this.headers.each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.headers.next()
++				.each(function() {
++					$( this ).height( Math.max( 0, maxHeight -
++						$( this ).innerHeight() + $( this ).height() ) );
++				})
++				.css( "overflow", "auto" );
++		} else if ( options.autoHeight ) {
++			maxHeight = 0;
++			this.headers.next()
++				.each(function() {
++					maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
++				})
++				.height( maxHeight );
++		}
++
++		return this;
++	},
++
++	activate: function( index ) {
++		// TODO this gets called on init, changing the option without an explicit call for that
++		this.options.active = index;
++		// call clickHandler with custom event
++		var active = this._findActive( index )[ 0 ];
++		this._clickHandler( { target: active }, active );
++
++		return this;
++	},
++
++	_findActive: function( selector ) {
++		return selector
++			? typeof selector === "number"
++				? this.headers.filter( ":eq(" + selector + ")" )
++				: this.headers.not( this.headers.not( selector ) )
++			: selector === false
++				? $( [] )
++				: this.headers.filter( ":eq(0)" );
++	},
++
++	// TODO isn't event.target enough? why the separate target argument?
++	_clickHandler: function( event, target ) {
++		var options = this.options;
++		if ( options.disabled ) {
++			return;
++		}
++
++		// called only when using activate(false) to close all parts programmatically
++		if ( !event.target ) {
++			if ( !options.collapsible ) {
++				return;
++			}
++			this.active
++				.removeClass( "ui-state-active ui-corner-top" )
++				.addClass( "ui-state-default ui-corner-all" )
++				.children( ".ui-icon" )
++					.removeClass( options.icons.headerSelected )
++					.addClass( options.icons.header );
++			this.active.next().addClass( "ui-accordion-content-active" );
++			var toHide = this.active.next(),
++				data = {
++					options: options,
++					newHeader: $( [] ),
++					oldHeader: options.active,
++					newContent: $( [] ),
++					oldContent: toHide
++				},
++				toShow = ( this.active = $( [] ) );
++			this._toggle( toShow, toHide, data );
++			return;
++		}
++
++		// get the click target
++		var clicked = $( event.currentTarget || target ),
++			clickedIsActive = clicked[0] === this.active[0];
++
++		// TODO the option is changed, is that correct?
++		// TODO if it is correct, shouldn't that happen after determining that the click is valid?
++		options.active = options.collapsible && clickedIsActive ?
++			false :
++			this.headers.index( clicked );
++
++		// if animations are still active, or the active header is the target, ignore click
++		if ( this.running || ( !options.collapsible && clickedIsActive ) ) {
++			return;
++		}
++
++		// find elements to show and hide
++		var active = this.active,
++			toShow = clicked.next(),
++			toHide = this.active.next(),
++			data = {
++				options: options,
++				newHeader: clickedIsActive && options.collapsible ? $([]) : clicked,
++				oldHeader: this.active,
++				newContent: clickedIsActive && options.collapsible ? $([]) : toShow,
++				oldContent: toHide
++			},
++			down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
++
++		// when the call to ._toggle() comes after the class changes
++		// it causes a very odd bug in IE 8 (see #6720)
++		this.active = clickedIsActive ? $([]) : clicked;
++		this._toggle( toShow, toHide, data, clickedIsActive, down );
++
++		// switch classes
++		active
++			.removeClass( "ui-state-active ui-corner-top" )
++			.addClass( "ui-state-default ui-corner-all" )
++			.children( ".ui-icon" )
++				.removeClass( options.icons.headerSelected )
++				.addClass( options.icons.header );
++		if ( !clickedIsActive ) {
++			clicked
++				.removeClass( "ui-state-default ui-corner-all" )
++				.addClass( "ui-state-active ui-corner-top" )
++				.children( ".ui-icon" )
++					.removeClass( options.icons.header )
++					.addClass( options.icons.headerSelected );
++			clicked
++				.next()
++				.addClass( "ui-accordion-content-active" );
++		}
++
++		return;
++	},
++
++	_toggle: function( toShow, toHide, data, clickedIsActive, down ) {
++		var self = this,
++			options = self.options;
++
++		self.toShow = toShow;
++		self.toHide = toHide;
++		self.data = data;
++
++		var complete = function() {
++			if ( !self ) {
++				return;
++			}
++			return self._completed.apply( self, arguments );
++		};
++
++		// trigger changestart event
++		self._trigger( "changestart", null, self.data );
++
++		// count elements to animate
++		self.running = toHide.size() === 0 ? toShow.size() : toHide.size();
++
++		if ( options.animated ) {
++			var animOptions = {};
++
++			if ( options.collapsible && clickedIsActive ) {
++				animOptions = {
++					toShow: $( [] ),
++					toHide: toHide,
++					complete: complete,
++					down: down,
++					autoHeight: options.autoHeight || options.fillSpace
++				};
++			} else {
++				animOptions = {
++					toShow: toShow,
++					toHide: toHide,
++					complete: complete,
++					down: down,
++					autoHeight: options.autoHeight || options.fillSpace
++				};
++			}
++
++			if ( !options.proxied ) {
++				options.proxied = options.animated;
++			}
++
++			if ( !options.proxiedDuration ) {
++				options.proxiedDuration = options.duration;
++			}
++
++			options.animated = $.isFunction( options.proxied ) ?
++				options.proxied( animOptions ) :
++				options.proxied;
++
++			options.duration = $.isFunction( options.proxiedDuration ) ?
++				options.proxiedDuration( animOptions ) :
++				options.proxiedDuration;
++
++			var animations = $.ui.accordion.animations,
++				duration = options.duration,
++				easing = options.animated;
++
++			if ( easing && !animations[ easing ] && !$.easing[ easing ] ) {
++				easing = "slide";
++			}
++			if ( !animations[ easing ] ) {
++				animations[ easing ] = function( options ) {
++					this.slide( options, {
++						easing: easing,
++						duration: duration || 700
++					});
++				};
++			}
++
++			animations[ easing ]( animOptions );
++		} else {
++			if ( options.collapsible && clickedIsActive ) {
++				toShow.toggle();
++			} else {
++				toHide.hide();
++				toShow.show();
++			}
++
++			complete( true );
++		}
++
++		// TODO assert that the blur and focus triggers are really necessary, remove otherwise
++		toHide.prev()
++			.attr({
++				"aria-expanded": "false",
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.blur();
++		toShow.prev()
++			.attr({
++				"aria-expanded": "true",
++				"aria-selected": "true",
++				tabIndex: 0
++			})
++			.focus();
++	},
++
++	_completed: function( cancel ) {
++		this.running = cancel ? 0 : --this.running;
++		if ( this.running ) {
++			return;
++		}
++
++		if ( this.options.clearStyle ) {
++			this.toShow.add( this.toHide ).css({
++				height: "",
++				overflow: ""
++			});
++		}
++
++		// other classes are removed before the animation; this one needs to stay until completed
++		this.toHide.removeClass( "ui-accordion-content-active" );
++		// Work around for rendering bug in IE (#5421)
++		if ( this.toHide.length ) {
++			this.toHide.parent()[0].className = this.toHide.parent()[0].className;
++		}
++
++		this._trigger( "change", null, this.data );
++	}
++});
++
++$.extend( $.ui.accordion, {
++	version: "1.8.15",
++	animations: {
++		slide: function( options, additions ) {
++			options = $.extend({
++				easing: "swing",
++				duration: 300
++			}, options, additions );
++			if ( !options.toHide.size() ) {
++				options.toShow.animate({
++					height: "show",
++					paddingTop: "show",
++					paddingBottom: "show"
++				}, options );
++				return;
++			}
++			if ( !options.toShow.size() ) {
++				options.toHide.animate({
++					height: "hide",
++					paddingTop: "hide",
++					paddingBottom: "hide"
++				}, options );
++				return;
++			}
++			var overflow = options.toShow.css( "overflow" ),
++				percentDone = 0,
++				showProps = {},
++				hideProps = {},
++				fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
++				originalWidth;
++			// fix width before calculating height of hidden element
++			var s = options.toShow;
++			originalWidth = s[0].style.width;
++			s.width( parseInt( s.parent().width(), 10 )
++				- parseInt( s.css( "paddingLeft" ), 10 )
++				- parseInt( s.css( "paddingRight" ), 10 )
++				- ( parseInt( s.css( "borderLeftWidth" ), 10 ) || 0 )
++				- ( parseInt( s.css( "borderRightWidth" ), 10) || 0 ) );
++
++			$.each( fxAttrs, function( i, prop ) {
++				hideProps[ prop ] = "hide";
++
++				var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ );
++				showProps[ prop ] = {
++					value: parts[ 1 ],
++					unit: parts[ 2 ] || "px"
++				};
++			});
++			options.toShow.css({ height: 0, overflow: "hidden" }).show();
++			options.toHide
++				.filter( ":hidden" )
++					.each( options.complete )
++				.end()
++				.filter( ":visible" )
++				.animate( hideProps, {
++				step: function( now, settings ) {
++					// only calculate the percent when animating height
++					// IE gets very inconsistent results when animating elements
++					// with small values, which is common for padding
++					if ( settings.prop == "height" ) {
++						percentDone = ( settings.end - settings.start === 0 ) ? 0 :
++							( settings.now - settings.start ) / ( settings.end - settings.start );
++					}
++
++					options.toShow[ 0 ].style[ settings.prop ] =
++						( percentDone * showProps[ settings.prop ].value )
++						+ showProps[ settings.prop ].unit;
++				},
++				duration: options.duration,
++				easing: options.easing,
++				complete: function() {
++					if ( !options.autoHeight ) {
++						options.toShow.css( "height", "" );
++					}
++					options.toShow.css({
++						width: originalWidth,
++						overflow: overflow
++					});
++					options.complete();
++				}
++			});
++		},
++		bounceslide: function( options ) {
++			this.slide( options, {
++				easing: options.down ? "easeOutBounce" : "swing",
++				duration: options.down ? 1000 : 200
++			});
++		}
++	}
++});
++
++})( jQuery );
++/*
++ * jQuery UI Autocomplete 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Autocomplete
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *	jquery.ui.position.js
++ */
++(function( $, undefined ) {
++
++// used to prevent race conditions with remote data sources
++var requestIndex = 0;
++
++$.widget( "ui.autocomplete", {
++	options: {
++		appendTo: "body",
++		autoFocus: false,
++		delay: 300,
++		minLength: 1,
++		position: {
++			my: "left top",
++			at: "left bottom",
++			collision: "none"
++		},
++		source: null
++	},
++
++	pending: 0,
++
++	_create: function() {
++		var self = this,
++			doc = this.element[ 0 ].ownerDocument,
++			suppressKeyPress;
++
++		this.element
++			.addClass( "ui-autocomplete-input" )
++			.attr( "autocomplete", "off" )
++			// TODO verify these actually work as intended
++			.attr({
++				role: "textbox",
++				"aria-autocomplete": "list",
++				"aria-haspopup": "true"
++			})
++			.bind( "keydown.autocomplete", function( event ) {
++				if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) {
++					return;
++				}
++
++				suppressKeyPress = false;
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					self._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					self._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					self._move( "previous", event );
++					// prevent moving cursor to beginning of text field in some browsers
++					event.preventDefault();
++					break;
++				case keyCode.DOWN:
++					self._move( "next", event );
++					// prevent moving cursor to end of text field in some browsers
++					event.preventDefault();
++					break;
++				case keyCode.ENTER:
++				case keyCode.NUMPAD_ENTER:
++					// when menu is open and has focus
++					if ( self.menu.active ) {
++						// #6055 - Opera still allows the keypress to occur
++						// which causes forms to submit
++						suppressKeyPress = true;
++						event.preventDefault();
++					}
++					//passthrough - ENTER and TAB both select the current element
++				case keyCode.TAB:
++					if ( !self.menu.active ) {
++						return;
++					}
++					self.menu.select( event );
++					break;
++				case keyCode.ESCAPE:
++					self.element.val( self.term );
++					self.close( event );
++					break;
++				default:
++					// keypress is triggered before the input value is changed
++					clearTimeout( self.searching );
++					self.searching = setTimeout(function() {
++						// only search if the value has changed
++						if ( self.term != self.element.val() ) {
++							self.selectedItem = null;
++							self.search( null, event );
++						}
++					}, self.options.delay );
++					break;
++				}
++			})
++			.bind( "keypress.autocomplete", function( event ) {
++				if ( suppressKeyPress ) {
++					suppressKeyPress = false;
++					event.preventDefault();
++				}
++			})
++			.bind( "focus.autocomplete", function() {
++				if ( self.options.disabled ) {
++					return;
++				}
++
++				self.selectedItem = null;
++				self.previous = self.element.val();
++			})
++			.bind( "blur.autocomplete", function( event ) {
++				if ( self.options.disabled ) {
++					return;
++				}
++
++				clearTimeout( self.searching );
++				// clicks on the menu (or a button to trigger a search) will cause a blur event
++				self.closing = setTimeout(function() {
++					self.close( event );
++					self._change( event );
++				}, 150 );
++			});
++		this._initSource();
++		this.response = function() {
++			return self._response.apply( self, arguments );
++		};
++		this.menu = $( "<ul></ul>" )
++			.addClass( "ui-autocomplete" )
++			.appendTo( $( this.options.appendTo || "body", doc )[0] )
++			// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
++			.mousedown(function( event ) {
++				// clicking on the scrollbar causes focus to shift to the body
++				// but we can't detect a mouseup or a click immediately afterward
++				// so we have to track the next mousedown and close the menu if
++				// the user clicks somewhere outside of the autocomplete
++				var menuElement = self.menu.element[ 0 ];
++				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
++					setTimeout(function() {
++						$( document ).one( 'mousedown', function( event ) {
++							if ( event.target !== self.element[ 0 ] &&
++								event.target !== menuElement &&
++								!$.ui.contains( menuElement, event.target ) ) {
++								self.close();
++							}
++						});
++					}, 1 );
++				}
++
++				// use another timeout to make sure the blur-event-handler on the input was already triggered
++				setTimeout(function() {
++					clearTimeout( self.closing );
++				}, 13);
++			})
++			.menu({
++				focus: function( event, ui ) {
++					var item = ui.item.data( "item.autocomplete" );
++					if ( false !== self._trigger( "focus", event, { item: item } ) ) {
++						// use value to match what will end up in the input, if it was a key event
++						if ( /^key/.test(event.originalEvent.type) ) {
++							self.element.val( item.value );
++						}
++					}
++				},
++				selected: function( event, ui ) {
++					var item = ui.item.data( "item.autocomplete" ),
++						previous = self.previous;
++
++					// only trigger when focus was lost (click on menu)
++					if ( self.element[0] !== doc.activeElement ) {
++						self.element.focus();
++						self.previous = previous;
++						// #6109 - IE triggers two focus events and the second
++						// is asynchronous, so we need to reset the previous
++						// term synchronously and asynchronously :-(
++						setTimeout(function() {
++							self.previous = previous;
++							self.selectedItem = item;
++						}, 1);
++					}
++
++					if ( false !== self._trigger( "select", event, { item: item } ) ) {
++						self.element.val( item.value );
++					}
++					// reset the term after the select event
++					// this allows custom select handling to work properly
++					self.term = self.element.val();
++
++					self.close( event );
++					self.selectedItem = item;
++				},
++				blur: function( event, ui ) {
++					// don't set the value of the text field if it's already correct
++					// this prevents moving the cursor unnecessarily
++					if ( self.menu.element.is(":visible") &&
++						( self.element.val() !== self.term ) ) {
++						self.element.val( self.term );
++					}
++				}
++			})
++			.zIndex( this.element.zIndex() + 1 )
++			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
++			.css({ top: 0, left: 0 })
++			.hide()
++			.data( "menu" );
++		if ( $.fn.bgiframe ) {
++			 this.menu.element.bgiframe();
++		}
++	},
++
++	destroy: function() {
++		this.element
++			.removeClass( "ui-autocomplete-input" )
++			.removeAttr( "autocomplete" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-autocomplete" )
++			.removeAttr( "aria-haspopup" );
++		this.menu.element.remove();
++		$.Widget.prototype.destroy.call( this );
++	},
++
++	_setOption: function( key, value ) {
++		$.Widget.prototype._setOption.apply( this, arguments );
++		if ( key === "source" ) {
++			this._initSource();
++		}
++		if ( key === "appendTo" ) {
++			this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] )
++		}
++		if ( key === "disabled" && value && this.xhr ) {
++			this.xhr.abort();
++		}
++	},
++
++	_initSource: function() {
++		var self = this,
++			array,
++			url;
++		if ( $.isArray(this.options.source) ) {
++			array = this.options.source;
++			this.source = function( request, response ) {
++				response( $.ui.autocomplete.filter(array, request.term) );
++			};
++		} else if ( typeof this.options.source === "string" ) {
++			url = this.options.source;
++			this.source = function( request, response ) {
++				if ( self.xhr ) {
++					self.xhr.abort();
++				}
++				self.xhr = $.ajax({
++					url: url,
++					data: request,
++					dataType: "json",
++					autocompleteRequest: ++requestIndex,
++					success: function( data, status ) {
++						if ( this.autocompleteRequest === requestIndex ) {
++							response( data );
++						}
++					},
++					error: function() {
++						if ( this.autocompleteRequest === requestIndex ) {
++							response( [] );
++						}
++					}
++				});
++			};
++		} else {
++			this.source = this.options.source;
++		}
++	},
++
++	search: function( value, event ) {
++		value = value != null ? value : this.element.val();
++
++		// always save the actual value, not the one passed as an argument
++		this.term = this.element.val();
++
++		if ( value.length < this.options.minLength ) {
++			return this.close( event );
++		}
++
++		clearTimeout( this.closing );
++		if ( this._trigger( "search", event ) === false ) {
++			return;
++		}
++
++		return this._search( value );
++	},
++
++	_search: function( value ) {
++		this.pending++;
++		this.element.addClass( "ui-autocomplete-loading" );
++
++		this.source( { term: value }, this.response );
++	},
++
++	_response: function( content ) {
++		if ( !this.options.disabled && content && content.length ) {
++			content = this._normalize( content );
++			this._suggest( content );
++			this._trigger( "open" );
++		} else {
++			this.close();
++		}
++		this.pending--;
++		if ( !this.pending ) {
++			this.element.removeClass( "ui-autocomplete-loading" );
++		}
++	},
++
++	close: function( event ) {
++		clearTimeout( this.closing );
++		if ( this.menu.element.is(":visible") ) {
++			this.menu.element.hide();
++			this.menu.deactivate();
++			this._trigger( "close", event );
++		}
++	},
++	
++	_change: function( event ) {
++		if ( this.previous !== this.element.val() ) {
++			this._trigger( "change", event, { item: this.selectedItem } );
++		}
++	},
++
++	_normalize: function( items ) {
++		// assume all items have the right format when the first item is complete
++		if ( items.length && items[0].label && items[0].value ) {
++			return items;
++		}
++		return $.map( items, function(item) {
++			if ( typeof item === "string" ) {
++				return {
++					label: item,
++					value: item
++				};
++			}
++			return $.extend({
++				label: item.label || item.value,
++				value: item.value || item.label
++			}, item );
++		});
++	},
++
++	_suggest: function( items ) {
++		var ul = this.menu.element
++			.empty()
++			.zIndex( this.element.zIndex() + 1 );
++		this._renderMenu( ul, items );
++		// TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate
++		this.menu.deactivate();
++		this.menu.refresh();
++
++		// size and position menu
++		ul.show();
++		this._resizeMenu();
++		ul.position( $.extend({
++			of: this.element
++		}, this.options.position ));
++
++		if ( this.options.autoFocus ) {
++			this.menu.next( new $.Event("mouseover") );
++		}
++	},
++
++	_resizeMenu: function() {
++		var ul = this.menu.element;
++		ul.outerWidth( Math.max(
++			ul.width( "" ).outerWidth(),
++			this.element.outerWidth()
++		) );
++	},
++
++	_renderMenu: function( ul, items ) {
++		var self = this;
++		$.each( items, function( index, item ) {
++			self._renderItem( ul, item );
++		});
++	},
++
++	_renderItem: function( ul, item) {
++		return $( "<li></li>" )
++			.data( "item.autocomplete", item )
++			.append( $( "<a></a>" ).text( item.label ) )
++			.appendTo( ul );
++	},
++
++	_move: function( direction, event ) {
++		if ( !this.menu.element.is(":visible") ) {
++			this.search( null, event );
++			return;
++		}
++		if ( this.menu.first() && /^previous/.test(direction) ||
++				this.menu.last() && /^next/.test(direction) ) {
++			this.element.val( this.term );
++			this.menu.deactivate();
++			return;
++		}
++		this.menu[ direction ]( event );
++	},
++
++	widget: function() {
++		return this.menu.element;
++	}
++});
++
++$.extend( $.ui.autocomplete, {
++	escapeRegex: function( value ) {
++		return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
++	},
++	filter: function(array, term) {
++		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
++		return $.grep( array, function(value) {
++			return matcher.test( value.label || value.value || value );
++		});
++	}
++});
++
++}( jQuery ));
++
++/*
++ * jQuery UI Menu (not officially released)
++ * 
++ * This widget isn't yet finished and the API is subject to change. We plan to finish
++ * it for the next release. You're welcome to give it a try anyway and give us feedback,
++ * as long as you're okay with migrating your code later on. We can help with that, too.
++ *
++ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Menu
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *  jquery.ui.widget.js
++ */
++(function($) {
++
++$.widget("ui.menu", {
++	_create: function() {
++		var self = this;
++		this.element
++			.addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
++			.attr({
++				role: "listbox",
++				"aria-activedescendant": "ui-active-menuitem"
++			})
++			.click(function( event ) {
++				if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) {
++					return;
++				}
++				// temporary
++				event.preventDefault();
++				self.select( event );
++			});
++		this.refresh();
++	},
++	
++	refresh: function() {
++		var self = this;
++
++		// don't refresh list items that are already adapted
++		var items = this.element.children("li:not(.ui-menu-item):has(a)")
++			.addClass("ui-menu-item")
++			.attr("role", "menuitem");
++		
++		items.children("a")
++			.addClass("ui-corner-all")
++			.attr("tabindex", -1)
++			// mouseenter doesn't work with event delegation
++			.mouseenter(function( event ) {
++				self.activate( event, $(this).parent() );
++			})
++			.mouseleave(function() {
++				self.deactivate();
++			});
++	},
++
++	activate: function( event, item ) {
++		this.deactivate();
++		if (this.hasScroll()) {
++			var offset = item.offset().top - this.element.offset().top,
++				scroll = this.element.scrollTop(),
++				elementHeight = this.element.height();
++			if (offset < 0) {
++				this.element.scrollTop( scroll + offset);
++			} else if (offset >= elementHeight) {
++				this.element.scrollTop( scroll + offset - elementHeight + item.height());
++			}
++		}
++		this.active = item.eq(0)
++			.children("a")
++				.addClass("ui-state-hover")
++				.attr("id", "ui-active-menuitem")
++			.end();
++		this._trigger("focus", event, { item: item });
++	},
++
++	deactivate: function() {
++		if (!this.active) { return; }
++
++		this.active.children("a")
++			.removeClass("ui-state-hover")
++			.removeAttr("id");
++		this._trigger("blur");
++		this.active = null;
++	},
++
++	next: function(event) {
++		this.move("next", ".ui-menu-item:first", event);
++	},
++
++	previous: function(event) {
++		this.move("prev", ".ui-menu-item:last", event);
++	},
++
++	first: function() {
++		return this.active && !this.active.prevAll(".ui-menu-item").length;
++	},
++
++	last: function() {
++		return this.active && !this.active.nextAll(".ui-menu-item").length;
++	},
++
++	move: function(direction, edge, event) {
++		if (!this.active) {
++			this.activate(event, this.element.children(edge));
++			return;
++		}
++		var next = this.active[direction + "All"](".ui-menu-item").eq(0);
++		if (next.length) {
++			this.activate(event, next);
++		} else {
++			this.activate(event, this.element.children(edge));
++		}
++	},
++
++	// TODO merge with previousPage
++	nextPage: function(event) {
++		if (this.hasScroll()) {
++			// TODO merge with no-scroll-else
++			if (!this.active || this.last()) {
++				this.activate(event, this.element.children(".ui-menu-item:first"));
++				return;
++			}
++			var base = this.active.offset().top,
++				height = this.element.height(),
++				result = this.element.children(".ui-menu-item").filter(function() {
++					var close = $(this).offset().top - base - height + $(this).height();
++					// TODO improve approximation
++					return close < 10 && close > -10;
++				});
++
++			// TODO try to catch this earlier when scrollTop indicates the last page anyway
++			if (!result.length) {
++				result = this.element.children(".ui-menu-item:last");
++			}
++			this.activate(event, result);
++		} else {
++			this.activate(event, this.element.children(".ui-menu-item")
++				.filter(!this.active || this.last() ? ":first" : ":last"));
++		}
++	},
++
++	// TODO merge with nextPage
++	previousPage: function(event) {
++		if (this.hasScroll()) {
++			// TODO merge with no-scroll-else
++			if (!this.active || this.first()) {
++				this.activate(event, this.element.children(".ui-menu-item:last"));
++				return;
++			}
++
++			var base = this.active.offset().top,
++				height = this.element.height();
++				result = this.element.children(".ui-menu-item").filter(function() {
++					var close = $(this).offset().top - base + height - $(this).height();
++					// TODO improve approximation
++					return close < 10 && close > -10;
++				});
++
++			// TODO try to catch this earlier when scrollTop indicates the last page anyway
++			if (!result.length) {
++				result = this.element.children(".ui-menu-item:first");
++			}
++			this.activate(event, result);
++		} else {
++			this.activate(event, this.element.children(".ui-menu-item")
++				.filter(!this.active || this.first() ? ":last" : ":first"));
++		}
++	},
++
++	hasScroll: function() {
++		return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight");
++	},
++
++	select: function( event ) {
++		this._trigger("selected", event, { item: this.active });
++	}
++});
++
++}(jQuery));
++/*
++ * jQuery UI Button 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Button
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var lastActive, startXPos, startYPos, clickDragged,
++	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
++	stateClasses = "ui-state-hover ui-state-active ",
++	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
++	formResetHandler = function() {
++		var buttons = $( this ).find( ":ui-button" );
++		setTimeout(function() {
++			buttons.button( "refresh" );
++		}, 1 );
++	},
++	radioGroup = function( radio ) {
++		var name = radio.name,
++			form = radio.form,
++			radios = $( [] );
++		if ( name ) {
++			if ( form ) {
++				radios = $( form ).find( "[name='" + name + "']" );
++			} else {
++				radios = $( "[name='" + name + "']", radio.ownerDocument )
++					.filter(function() {
++						return !this.form;
++					});
++			}
++		}
++		return radios;
++	};
++
++$.widget( "ui.button", {
++	options: {
++		disabled: null,
++		text: true,
++		label: null,
++		icons: {
++			primary: null,
++			secondary: null
++		}
++	},
++	_create: function() {
++		this.element.closest( "form" )
++			.unbind( "reset.button" )
++			.bind( "reset.button", formResetHandler );
++
++		if ( typeof this.options.disabled !== "boolean" ) {
++			this.options.disabled = this.element.propAttr( "disabled" );
++		}
++
++		this._determineButtonType();
++		this.hasTitle = !!this.buttonElement.attr( "title" );
++
++		var self = this,
++			options = this.options,
++			toggleButton = this.type === "checkbox" || this.type === "radio",
++			hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ),
++			focusClass = "ui-state-focus";
++
++		if ( options.label === null ) {
++			options.label = this.buttonElement.html();
++		}
++
++		if ( this.element.is( ":disabled" ) ) {
++			options.disabled = true;
++		}
++
++		this.buttonElement
++			.addClass( baseClasses )
++			.attr( "role", "button" )
++			.bind( "mouseenter.button", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).addClass( "ui-state-hover" );
++				if ( this === lastActive ) {
++					$( this ).addClass( "ui-state-active" );
++				}
++			})
++			.bind( "mouseleave.button", function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( hoverClass );
++			})
++			.bind( "click.button", function( event ) {
++				if ( options.disabled ) {
++					event.preventDefault();
++					event.stopImmediatePropagation();
++				}
++			});
++
++		this.element
++			.bind( "focus.button", function() {
++				// no need to check disabled, focus won't be triggered anyway
++				self.buttonElement.addClass( focusClass );
++			})
++			.bind( "blur.button", function() {
++				self.buttonElement.removeClass( focusClass );
++			});
++
++		if ( toggleButton ) {
++			this.element.bind( "change.button", function() {
++				if ( clickDragged ) {
++					return;
++				}
++				self.refresh();
++			});
++			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
++			// prevents issue where button state changes but checkbox/radio checked state
++			// does not in Firefox (see ticket #6970)
++			this.buttonElement
++				.bind( "mousedown.button", function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					clickDragged = false;
++					startXPos = event.pageX;
++					startYPos = event.pageY;
++				})
++				.bind( "mouseup.button", function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
++						clickDragged = true;
++					}
++			});
++		}
++
++		if ( this.type === "checkbox" ) {
++			this.buttonElement.bind( "click.button", function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).toggleClass( "ui-state-active" );
++				self.buttonElement.attr( "aria-pressed", self.element[0].checked );
++			});
++		} else if ( this.type === "radio" ) {
++			this.buttonElement.bind( "click.button", function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).addClass( "ui-state-active" );
++				self.buttonElement.attr( "aria-pressed", "true" );
++
++				var radio = self.element[ 0 ];
++				radioGroup( radio )
++					.not( radio )
++					.map(function() {
++						return $( this ).button( "widget" )[ 0 ];
++					})
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			});
++		} else {
++			this.buttonElement
++				.bind( "mousedown.button", function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).addClass( "ui-state-active" );
++					lastActive = this;
++					$( document ).one( "mouseup", function() {
++						lastActive = null;
++					});
++				})
++				.bind( "mouseup.button", function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).removeClass( "ui-state-active" );
++				})
++				.bind( "keydown.button", function(event) {
++					if ( options.disabled ) {
++						return false;
++					}
++					if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) {
++						$( this ).addClass( "ui-state-active" );
++					}
++				})
++				.bind( "keyup.button", function() {
++					$( this ).removeClass( "ui-state-active" );
++				});
++
++			if ( this.buttonElement.is("a") ) {
++				this.buttonElement.keyup(function(event) {
++					if ( event.keyCode === $.ui.keyCode.SPACE ) {
++						// TODO pass through original event correctly (just as 2nd argument doesn't work)
++						$( this ).click();
++					}
++				});
++			}
++		}
++
++		// TODO: pull out $.Widget's handling for the disabled option into
++		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
++		// be overridden by individual plugins
++		this._setOption( "disabled", options.disabled );
++		this._resetButton();
++	},
++
++	_determineButtonType: function() {
++
++		if ( this.element.is(":checkbox") ) {
++			this.type = "checkbox";
++		} else if ( this.element.is(":radio") ) {
++			this.type = "radio";
++		} else if ( this.element.is("input") ) {
++			this.type = "input";
++		} else {
++			this.type = "button";
++		}
++
++		if ( this.type === "checkbox" || this.type === "radio" ) {
++			// we don't search against the document in case the element
++			// is disconnected from the DOM
++			var ancestor = this.element.parents().filter(":last"),
++				labelSelector = "label[for=" + this.element.attr("id") + "]";
++			this.buttonElement = ancestor.find( labelSelector );
++			if ( !this.buttonElement.length ) {
++				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
++				this.buttonElement = ancestor.filter( labelSelector );
++				if ( !this.buttonElement.length ) {
++					this.buttonElement = ancestor.find( labelSelector );
++				}
++			}
++			this.element.addClass( "ui-helper-hidden-accessible" );
++
++			var checked = this.element.is( ":checked" );
++			if ( checked ) {
++				this.buttonElement.addClass( "ui-state-active" );
++			}
++			this.buttonElement.attr( "aria-pressed", checked );
++		} else {
++			this.buttonElement = this.element;
++		}
++	},
++
++	widget: function() {
++		return this.buttonElement;
++	},
++
++	destroy: function() {
++		this.element
++			.removeClass( "ui-helper-hidden-accessible" );
++		this.buttonElement
++			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
++			.removeAttr( "role" )
++			.removeAttr( "aria-pressed" )
++			.html( this.buttonElement.find(".ui-button-text").html() );
++
++		if ( !this.hasTitle ) {
++			this.buttonElement.removeAttr( "title" );
++		}
++
++		$.Widget.prototype.destroy.call( this );
++	},
++
++	_setOption: function( key, value ) {
++		$.Widget.prototype._setOption.apply( this, arguments );
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.propAttr( "disabled", true );
++			} else {
++				this.element.propAttr( "disabled", false );
++			}
++			return;
++		}
++		this._resetButton();
++	},
++
++	refresh: function() {
++		var isDisabled = this.element.is( ":disabled" );
++		if ( isDisabled !== this.options.disabled ) {
++			this._setOption( "disabled", isDisabled );
++		}
++		if ( this.type === "radio" ) {
++			radioGroup( this.element[0] ).each(function() {
++				if ( $( this ).is( ":checked" ) ) {
++					$( this ).button( "widget" )
++						.addClass( "ui-state-active" )
++						.attr( "aria-pressed", "true" );
++				} else {
++					$( this ).button( "widget" )
++						.removeClass( "ui-state-active" )
++						.attr( "aria-pressed", "false" );
++				}
++			});
++		} else if ( this.type === "checkbox" ) {
++			if ( this.element.is( ":checked" ) ) {
++				this.buttonElement
++					.addClass( "ui-state-active" )
++					.attr( "aria-pressed", "true" );
++			} else {
++				this.buttonElement
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			}
++		}
++	},
++
++	_resetButton: function() {
++		if ( this.type === "input" ) {
++			if ( this.options.label ) {
++				this.element.val( this.options.label );
++			}
++			return;
++		}
++		var buttonElement = this.buttonElement.removeClass( typeClasses ),
++			buttonText = $( "<span></span>" )
++				.addClass( "ui-button-text" )
++				.html( this.options.label )
++				.appendTo( buttonElement.empty() )
++				.text(),
++			icons = this.options.icons,
++			multipleIcons = icons.primary && icons.secondary,
++			buttonClasses = [];  
++
++		if ( icons.primary || icons.secondary ) {
++			if ( this.options.text ) {
++				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
++			}
++
++			if ( icons.primary ) {
++				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
++			}
++
++			if ( icons.secondary ) {
++				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
++			}
++
++			if ( !this.options.text ) {
++				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
++
++				if ( !this.hasTitle ) {
++					buttonElement.attr( "title", buttonText );
++				}
++			}
++		} else {
++			buttonClasses.push( "ui-button-text-only" );
++		}
++		buttonElement.addClass( buttonClasses.join( " " ) );
++	}
++});
++
++$.widget( "ui.buttonset", {
++	options: {
++		items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)"
++	},
++
++	_create: function() {
++		this.element.addClass( "ui-buttonset" );
++	},
++	
++	_init: function() {
++		this.refresh();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "disabled" ) {
++			this.buttons.button( "option", key, value );
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++	},
++	
++	refresh: function() {
++		var ltr = this.element.css( "direction" ) === "ltr";
++		
++		this.buttons = this.element.find( this.options.items )
++			.filter( ":ui-button" )
++				.button( "refresh" )
++			.end()
++			.not( ":ui-button" )
++				.button()
++			.end()
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
++				.filter( ":first" )
++					.addClass( ltr ? "ui-corner-left" : "ui-corner-right" )
++				.end()
++				.filter( ":last" )
++					.addClass( ltr ? "ui-corner-right" : "ui-corner-left" )
++				.end()
++			.end();
++	},
++
++	destroy: function() {
++		this.element.removeClass( "ui-buttonset" );
++		this.buttons
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-left ui-corner-right" )
++			.end()
++			.button( "destroy" );
++
++		$.Widget.prototype.destroy.call( this );
++	}
++});
++
++}( jQuery ) );
++/*
++ * jQuery UI Datepicker 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Datepicker
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ */
++(function( $, undefined ) {
++
++$.extend($.ui, { datepicker: { version: "1.8.15" } });
++
++var PROP_NAME = 'datepicker';
++var dpuuid = new Date().getTime();
++var instActive;
++
++/* Date picker manager.
++   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
++   Settings for (groups of) date pickers are maintained in an instance object,
++   allowing multiple different settings on the same page. */
++
++function Datepicker() {
++	this.debug = false; // Change this to true to start debugging
++	this._curInst = null; // The current instance in use
++	this._keyEvent = false; // If the last event was a key event
++	this._disabledInputs = []; // List of date picker inputs that have been disabled
++	this._datepickerShowing = false; // True if the popup picker is showing , false if not
++	this._inDialog = false; // True if showing within a "dialog", false if not
++	this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
++	this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
++	this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
++	this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
++	this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
++	this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
++	this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
++	this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
++	this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
++	this.regional = []; // Available regional settings, indexed by language code
++	this.regional[''] = { // Default regional settings
++		closeText: 'Done', // Display text for close link
++		prevText: 'Prev', // Display text for previous month link
++		nextText: 'Next', // Display text for next month link
++		currentText: 'Today', // Display text for current month link
++		monthNames: ['January','February','March','April','May','June',
++			'July','August','September','October','November','December'], // Names of months for drop-down and formatting
++		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
++		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
++		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
++		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
++		weekHeader: 'Wk', // Column header for week of the year
++		dateFormat: 'mm/dd/yy', // See format options on parseDate
++		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
++		isRTL: false, // True if right-to-left language, false if left-to-right
++		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
++		yearSuffix: '' // Additional text to append to the year in the month headers
++	};
++	this._defaults = { // Global defaults for all the date picker instances
++		showOn: 'focus', // 'focus' for popup on focus,
++			// 'button' for trigger button, or 'both' for either
++		showAnim: 'fadeIn', // Name of jQuery animation for popup
++		showOptions: {}, // Options for enhanced animations
++		defaultDate: null, // Used when field is blank: actual date,
++			// +/-number for offset from today, null for today
++		appendText: '', // Display text following the input box, e.g. showing the format
++		buttonText: '...', // Text for trigger button
++		buttonImage: '', // URL for trigger button image
++		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
++		hideIfNoPrevNext: false, // True to hide next/previous month links
++			// if not applicable, false to just disable them
++		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
++		gotoCurrent: false, // True if today link goes back to current selection instead
++		changeMonth: false, // True if month can be selected directly, false if only prev/next
++		changeYear: false, // True if year can be selected directly, false if only prev/next
++		yearRange: 'c-10:c+10', // Range of years to display in drop-down,
++			// either relative to today's year (-nn:+nn), relative to currently displayed year
++			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
++		showOtherMonths: false, // True to show dates in other months, false to leave blank
++		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
++		showWeek: false, // True to show week of the year, false to not show it
++		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
++			// takes a Date and returns the number of the week for it
++		shortYearCutoff: '+10', // Short year values < this are in the current century,
++			// > this are in the previous century,
++			// string value starting with '+' for current year + value
++		minDate: null, // The earliest selectable date, or null for no limit
++		maxDate: null, // The latest selectable date, or null for no limit
++		duration: 'fast', // Duration of display/closure
++		beforeShowDay: null, // Function that takes a date and returns an array with
++			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
++			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
++		beforeShow: null, // Function that takes an input field and
++			// returns a set of custom settings for the date picker
++		onSelect: null, // Define a callback function when a date is selected
++		onChangeMonthYear: null, // Define a callback function when the month or year is changed
++		onClose: null, // Define a callback function when the datepicker is closed
++		numberOfMonths: 1, // Number of months to show at a time
++		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
++		stepMonths: 1, // Number of months to step back/forward
++		stepBigMonths: 12, // Number of months to step back/forward for the big links
++		altField: '', // Selector for an alternate field to store selected dates into
++		altFormat: '', // The date format to use for the alternate field
++		constrainInput: true, // The input is constrained by the current date format
++		showButtonPanel: false, // True to show button panel, false to not show it
++		autoSize: false, // True to size the input for the date format, false to leave as is
++		disabled: false // The initial disabled state
++	};
++	$.extend(this._defaults, this.regional['']);
++	this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'));
++}
++
++$.extend(Datepicker.prototype, {
++	/* Class name added to elements to indicate already configured with a date picker. */
++	markerClassName: 'hasDatepicker',
++	
++	//Keep track of the maximum number of rows displayed (see #7043)
++	maxRows: 4,
++
++	/* Debug logging (if enabled). */
++	log: function () {
++		if (this.debug)
++			console.log.apply('', arguments);
++	},
++	
++	// TODO rename to "widget" when switching to widget factory
++	_widgetDatepicker: function() {
++		return this.dpDiv;
++	},
++
++	/* Override the default settings for all instances of the date picker.
++	   @param  settings  object - the new settings to use as defaults (anonymous object)
++	   @return the manager object */
++	setDefaults: function(settings) {
++		extendRemove(this._defaults, settings || {});
++		return this;
++	},
++
++	/* Attach the date picker to a jQuery selection.
++	   @param  target    element - the target input field or division or span
++	   @param  settings  object - the new settings to use for this date picker instance (anonymous) */
++	_attachDatepicker: function(target, settings) {
++		// check for settings on the control itself - in namespace 'date:'
++		var inlineSettings = null;
++		for (var attrName in this._defaults) {
++			var attrValue = target.getAttribute('date:' + attrName);
++			if (attrValue) {
++				inlineSettings = inlineSettings || {};
++				try {
++					inlineSettings[attrName] = eval(attrValue);
++				} catch (err) {
++					inlineSettings[attrName] = attrValue;
++				}
++			}
++		}
++		var nodeName = target.nodeName.toLowerCase();
++		var inline = (nodeName == 'div' || nodeName == 'span');
++		if (!target.id) {
++			this.uuid += 1;
++			target.id = 'dp' + this.uuid;
++		}
++		var inst = this._newInst($(target), inline);
++		inst.settings = $.extend({}, settings || {}, inlineSettings || {});
++		if (nodeName == 'input') {
++			this._connectDatepicker(target, inst);
++		} else if (inline) {
++			this._inlineDatepicker(target, inst);
++		}
++	},
++
++	/* Create a new instance object. */
++	_newInst: function(target, inline) {
++		var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars
++		return {id: id, input: target, // associated target
++			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
++			drawMonth: 0, drawYear: 0, // month being drawn
++			inline: inline, // is datepicker inline or not
++			dpDiv: (!inline ? this.dpDiv : // presentation div
++			bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')))};
++	},
++
++	/* Attach the date picker to an input field. */
++	_connectDatepicker: function(target, inst) {
++		var input = $(target);
++		inst.append = $([]);
++		inst.trigger = $([]);
++		if (input.hasClass(this.markerClassName))
++			return;
++		this._attachments(input, inst);
++		input.addClass(this.markerClassName).keydown(this._doKeyDown).
++			keypress(this._doKeyPress).keyup(this._doKeyUp).
++			bind("setData.datepicker", function(event, key, value) {
++				inst.settings[key] = value;
++			}).bind("getData.datepicker", function(event, key) {
++				return this._get(inst, key);
++			});
++		this._autoSize(inst);
++		$.data(target, PROP_NAME, inst);
++		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++	},
++
++	/* Make attachments based on settings. */
++	_attachments: function(input, inst) {
++		var appendText = this._get(inst, 'appendText');
++		var isRTL = this._get(inst, 'isRTL');
++		if (inst.append)
++			inst.append.remove();
++		if (appendText) {
++			inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
++			input[isRTL ? 'before' : 'after'](inst.append);
++		}
++		input.unbind('focus', this._showDatepicker);
++		if (inst.trigger)
++			inst.trigger.remove();
++		var showOn = this._get(inst, 'showOn');
++		if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
++			input.focus(this._showDatepicker);
++		if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
++			var buttonText = this._get(inst, 'buttonText');
++			var buttonImage = this._get(inst, 'buttonImage');
++			inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
++				$('<img/>').addClass(this._triggerClass).
++					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
++				$('<button type="button"></button>').addClass(this._triggerClass).
++					html(buttonImage == '' ? buttonText : $('<img/>').attr(
++					{ src:buttonImage, alt:buttonText, title:buttonText })));
++			input[isRTL ? 'before' : 'after'](inst.trigger);
++			inst.trigger.click(function() {
++				if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])
++					$.datepicker._hideDatepicker();
++				else
++					$.datepicker._showDatepicker(input[0]);
++				return false;
++			});
++		}
++	},
++
++	/* Apply the maximum length for the date format. */
++	_autoSize: function(inst) {
++		if (this._get(inst, 'autoSize') && !inst.inline) {
++			var date = new Date(2009, 12 - 1, 20); // Ensure double digits
++			var dateFormat = this._get(inst, 'dateFormat');
++			if (dateFormat.match(/[DM]/)) {
++				var findMax = function(names) {
++					var max = 0;
++					var maxI = 0;
++					for (var i = 0; i < names.length; i++) {
++						if (names[i].length > max) {
++							max = names[i].length;
++							maxI = i;
++						}
++					}
++					return maxI;
++				};
++				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
++					'monthNames' : 'monthNamesShort'))));
++				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
++					'dayNames' : 'dayNamesShort'))) + 20 - date.getDay());
++			}
++			inst.input.attr('size', this._formatDate(inst, date).length);
++		}
++	},
++
++	/* Attach an inline date picker to a div. */
++	_inlineDatepicker: function(target, inst) {
++		var divSpan = $(target);
++		if (divSpan.hasClass(this.markerClassName))
++			return;
++		divSpan.addClass(this.markerClassName).append(inst.dpDiv).
++			bind("setData.datepicker", function(event, key, value){
++				inst.settings[key] = value;
++			}).bind("getData.datepicker", function(event, key){
++				return this._get(inst, key);
++			});
++		$.data(target, PROP_NAME, inst);
++		this._setDate(inst, this._getDefaultDate(inst), true);
++		this._updateDatepicker(inst);
++		this._updateAlternate(inst);
++		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
++		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
++		inst.dpDiv.css( "display", "block" );
++	},
++
++	/* Pop-up the date picker in a "dialog" box.
++	   @param  input     element - ignored
++	   @param  date      string or Date - the initial date to display
++	   @param  onSelect  function - the function to call when a date is selected
++	   @param  settings  object - update the dialog date picker instance's settings (anonymous object)
++	   @param  pos       int[2] - coordinates for the dialog's position within the screen or
++	                     event - with x/y coordinates or
++	                     leave empty for default (screen centre)
++	   @return the manager object */
++	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
++		var inst = this._dialogInst; // internal instance
++		if (!inst) {
++			this.uuid += 1;
++			var id = 'dp' + this.uuid;
++			this._dialogInput = $('<input type="text" id="' + id +
++				'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
++			this._dialogInput.keydown(this._doKeyDown);
++			$('body').append(this._dialogInput);
++			inst = this._dialogInst = this._newInst(this._dialogInput, false);
++			inst.settings = {};
++			$.data(this._dialogInput[0], PROP_NAME, inst);
++		}
++		extendRemove(inst.settings, settings || {});
++		date = (date && date.constructor == Date ? this._formatDate(inst, date) : date);
++		this._dialogInput.val(date);
++
++		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
++		if (!this._pos) {
++			var browserWidth = document.documentElement.clientWidth;
++			var browserHeight = document.documentElement.clientHeight;
++			var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
++			var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
++			this._pos = // should use actual width/height below
++				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
++		}
++
++		// move input on screen for focus, but hidden behind dialog
++		this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px');
++		inst.settings.onSelect = onSelect;
++		this._inDialog = true;
++		this.dpDiv.addClass(this._dialogClass);
++		this._showDatepicker(this._dialogInput[0]);
++		if ($.blockUI)
++			$.blockUI(this.dpDiv);
++		$.data(this._dialogInput[0], PROP_NAME, inst);
++		return this;
++	},
++
++	/* Detach a datepicker from its control.
++	   @param  target    element - the target input field or division or span */
++	_destroyDatepicker: function(target) {
++		var $target = $(target);
++		var inst = $.data(target, PROP_NAME);
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++		var nodeName = target.nodeName.toLowerCase();
++		$.removeData(target, PROP_NAME);
++		if (nodeName == 'input') {
++			inst.append.remove();
++			inst.trigger.remove();
++			$target.removeClass(this.markerClassName).
++				unbind('focus', this._showDatepicker).
++				unbind('keydown', this._doKeyDown).
++				unbind('keypress', this._doKeyPress).
++				unbind('keyup', this._doKeyUp);
++		} else if (nodeName == 'div' || nodeName == 'span')
++			$target.removeClass(this.markerClassName).empty();
++	},
++
++	/* Enable the date picker to a jQuery selection.
++	   @param  target    element - the target input field or division or span */
++	_enableDatepicker: function(target) {
++		var $target = $(target);
++		var inst = $.data(target, PROP_NAME);
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++		var nodeName = target.nodeName.toLowerCase();
++		if (nodeName == 'input') {
++			target.disabled = false;
++			inst.trigger.filter('button').
++				each(function() { this.disabled = false; }).end().
++				filter('img').css({opacity: '1.0', cursor: ''});
++		}
++		else if (nodeName == 'div' || nodeName == 'span') {
++			var inline = $target.children('.' + this._inlineClass);
++			inline.children().removeClass('ui-state-disabled');
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				removeAttr("disabled");
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value == target ? null : value); }); // delete entry
++	},
++
++	/* Disable the date picker to a jQuery selection.
++	   @param  target    element - the target input field or division or span */
++	_disableDatepicker: function(target) {
++		var $target = $(target);
++		var inst = $.data(target, PROP_NAME);
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++		var nodeName = target.nodeName.toLowerCase();
++		if (nodeName == 'input') {
++			target.disabled = true;
++			inst.trigger.filter('button').
++				each(function() { this.disabled = true; }).end().
++				filter('img').css({opacity: '0.5', cursor: 'default'});
++		}
++		else if (nodeName == 'div' || nodeName == 'span') {
++			var inline = $target.children('.' + this._inlineClass);
++			inline.children().addClass('ui-state-disabled');
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				attr("disabled", "disabled");
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value == target ? null : value); }); // delete entry
++		this._disabledInputs[this._disabledInputs.length] = target;
++	},
++
++	/* Is the first field in a jQuery collection disabled as a datepicker?
++	   @param  target    element - the target input field or division or span
++	   @return boolean - true if disabled, false if enabled */
++	_isDisabledDatepicker: function(target) {
++		if (!target) {
++			return false;
++		}
++		for (var i = 0; i < this._disabledInputs.length; i++) {
++			if (this._disabledInputs[i] == target)
++				return true;
++		}
++		return false;
++	},
++
++	/* Retrieve the instance data for the target control.
++	   @param  target  element - the target input field or division or span
++	   @return  object - the associated instance data
++	   @throws  error if a jQuery problem getting data */
++	_getInst: function(target) {
++		try {
++			return $.data(target, PROP_NAME);
++		}
++		catch (err) {
++			throw 'Missing instance data for this datepicker';
++		}
++	},
++
++	/* Update or retrieve the settings for a date picker attached to an input field or division.
++	   @param  target  element - the target input field or division or span
++	   @param  name    object - the new settings to update or
++	                   string - the name of the setting to change or retrieve,
++	                   when retrieving also 'all' for all instance settings or
++	                   'defaults' for all global defaults
++	   @param  value   any - the new value for the setting
++	                   (omit if above is an object or to retrieve a value) */
++	_optionDatepicker: function(target, name, value) {
++		var inst = this._getInst(target);
++		if (arguments.length == 2 && typeof name == 'string') {
++			return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
++				(inst ? (name == 'all' ? $.extend({}, inst.settings) :
++				this._get(inst, name)) : null));
++		}
++		var settings = name || {};
++		if (typeof name == 'string') {
++			settings = {};
++			settings[name] = value;
++		}
++		if (inst) {
++			if (this._curInst == inst) {
++				this._hideDatepicker();
++			}
++			var date = this._getDateDatepicker(target, true);
++			var minDate = this._getMinMaxDate(inst, 'min');
++			var maxDate = this._getMinMaxDate(inst, 'max');
++			extendRemove(inst.settings, settings);
++			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
++			if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined)
++				inst.settings.minDate = this._formatDate(inst, minDate);
++			if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined)
++				inst.settings.maxDate = this._formatDate(inst, maxDate);
++			this._attachments($(target), inst);
++			this._autoSize(inst);
++			this._setDate(inst, date);
++			this._updateAlternate(inst);
++			this._updateDatepicker(inst);
++		}
++	},
++
++	// change method deprecated
++	_changeDatepicker: function(target, name, value) {
++		this._optionDatepicker(target, name, value);
++	},
++
++	/* Redraw the date picker attached to an input field or division.
++	   @param  target  element - the target input field or division or span */
++	_refreshDatepicker: function(target) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._updateDatepicker(inst);
++		}
++	},
++
++	/* Set the dates for a jQuery selection.
++	   @param  target   element - the target input field or division or span
++	   @param  date     Date - the new date */
++	_setDateDatepicker: function(target, date) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._setDate(inst, date);
++			this._updateDatepicker(inst);
++			this._updateAlternate(inst);
++		}
++	},
++
++	/* Get the date(s) for the first entry in a jQuery selection.
++	   @param  target     element - the target input field or division or span
++	   @param  noDefault  boolean - true if no default date is to be used
++	   @return Date - the current date */
++	_getDateDatepicker: function(target, noDefault) {
++		var inst = this._getInst(target);
++		if (inst && !inst.inline)
++			this._setDateFromField(inst, noDefault);
++		return (inst ? this._getDate(inst) : null);
++	},
++
++	/* Handle keystrokes. */
++	_doKeyDown: function(event) {
++		var inst = $.datepicker._getInst(event.target);
++		var handled = true;
++		var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
++		inst._keyEvent = true;
++		if ($.datepicker._datepickerShowing)
++			switch (event.keyCode) {
++				case 9: $.datepicker._hideDatepicker();
++						handled = false;
++						break; // hide on tab out
++				case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + 
++									$.datepicker._currentClass + ')', inst.dpDiv);
++						if (sel[0])
++							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
++							var onSelect = $.datepicker._get(inst, 'onSelect');
++							if (onSelect) {
++								var dateStr = $.datepicker._formatDate(inst);
++
++								// trigger custom callback
++								onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++							}
++						else
++							$.datepicker._hideDatepicker();
++						return false; // don't submit the form
++						break; // select the value on enter
++				case 27: $.datepicker._hideDatepicker();
++						break; // hide on escape
++				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							-$.datepicker._get(inst, 'stepBigMonths') :
++							-$.datepicker._get(inst, 'stepMonths')), 'M');
++						break; // previous month/year on page up/+ ctrl
++				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							+$.datepicker._get(inst, 'stepBigMonths') :
++							+$.datepicker._get(inst, 'stepMonths')), 'M');
++						break; // next month/year on page down/+ ctrl
++				case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
++						handled = event.ctrlKey || event.metaKey;
++						break; // clear on ctrl or command +end
++				case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
++						handled = event.ctrlKey || event.metaKey;
++						break; // current on ctrl or command +home
++				case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
++						handled = event.ctrlKey || event.metaKey;
++						// -1 day on ctrl or command +left
++						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++									-$.datepicker._get(inst, 'stepBigMonths') :
++									-$.datepicker._get(inst, 'stepMonths')), 'M');
++						// next month/year on alt +left on Mac
++						break;
++				case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
++						handled = event.ctrlKey || event.metaKey;
++						break; // -1 week on ctrl or command +up
++				case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
++						handled = event.ctrlKey || event.metaKey;
++						// +1 day on ctrl or command +right
++						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++									+$.datepicker._get(inst, 'stepBigMonths') :
++									+$.datepicker._get(inst, 'stepMonths')), 'M');
++						// next month/year on alt +right
++						break;
++				case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
++						handled = event.ctrlKey || event.metaKey;
++						break; // +1 week on ctrl or command +down
++				default: handled = false;
++			}
++		else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
++			$.datepicker._showDatepicker(this);
++		else {
++			handled = false;
++		}
++		if (handled) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++	},
++
++	/* Filter entered characters - based on date format. */
++	_doKeyPress: function(event) {
++		var inst = $.datepicker._getInst(event.target);
++		if ($.datepicker._get(inst, 'constrainInput')) {
++			var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
++			var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
++			return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
++		}
++	},
++
++	/* Synchronise manual entry and field/alternate field. */
++	_doKeyUp: function(event) {
++		var inst = $.datepicker._getInst(event.target);
++		if (inst.input.val() != inst.lastVal) {
++			try {
++				var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
++					(inst.input ? inst.input.val() : null),
++					$.datepicker._getFormatConfig(inst));
++				if (date) { // only if valid
++					$.datepicker._setDateFromField(inst);
++					$.datepicker._updateAlternate(inst);
++					$.datepicker._updateDatepicker(inst);
++				}
++			}
++			catch (event) {
++				$.datepicker.log(event);
++			}
++		}
++		return true;
++	},
++
++	/* Pop-up the date picker for a given input field.
++	   @param  input  element - the input field attached to the date picker or
++	                  event - if triggered by focus */
++	_showDatepicker: function(input) {
++		input = input.target || input;
++		if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
++			input = $('input', input.parentNode)[0];
++		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
++			return;
++		var inst = $.datepicker._getInst(input);
++		if ($.datepicker._curInst && $.datepicker._curInst != inst) {
++			if ( $.datepicker._datepickerShowing ) {
++				$.datepicker._triggerOnClose($.datepicker._curInst);
++			}
++			$.datepicker._curInst.dpDiv.stop(true, true);
++		}
++		var beforeShow = $.datepicker._get(inst, 'beforeShow');
++		extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
++		inst.lastVal = null;
++		$.datepicker._lastInput = input;
++		$.datepicker._setDateFromField(inst);
++		if ($.datepicker._inDialog) // hide cursor
++			input.value = '';
++		if (!$.datepicker._pos) { // position below input
++			$.datepicker._pos = $.datepicker._findPos(input);
++			$.datepicker._pos[1] += input.offsetHeight; // add the height
++		}
++		var isFixed = false;
++		$(input).parents().each(function() {
++			isFixed |= $(this).css('position') == 'fixed';
++			return !isFixed;
++		});
++		if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
++			$.datepicker._pos[0] -= document.documentElement.scrollLeft;
++			$.datepicker._pos[1] -= document.documentElement.scrollTop;
++		}
++		var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
++		$.datepicker._pos = null;
++		//to avoid flashes on Firefox
++		inst.dpDiv.empty();
++		// determine sizing offscreen
++		inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
++		$.datepicker._updateDatepicker(inst);
++		// fix width for dynamic number of date pickers
++		// and adjust position before showing
++		offset = $.datepicker._checkOffset(inst, offset, isFixed);
++		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
++			'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
++			left: offset.left + 'px', top: offset.top + 'px'});
++		if (!inst.inline) {
++			var showAnim = $.datepicker._get(inst, 'showAnim');
++			var duration = $.datepicker._get(inst, 'duration');
++			var postProcess = function() {
++				var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
++				if( !! cover.length ){
++					var borders = $.datepicker._getBorders(inst.dpDiv);
++					cover.css({left: -borders[0], top: -borders[1],
++						width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});
++				}
++			};
++			inst.dpDiv.zIndex($(input).zIndex()+1);
++			$.datepicker._datepickerShowing = true;
++			if ($.effects && $.effects[showAnim])
++				inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
++			else
++				inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);
++			if (!showAnim || !duration)
++				postProcess();
++			if (inst.input.is(':visible') && !inst.input.is(':disabled'))
++				inst.input.focus();
++			$.datepicker._curInst = inst;
++		}
++	},
++
++	/* Generate the date picker content. */
++	_updateDatepicker: function(inst) {
++		var self = this;
++		self.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
++		var borders = $.datepicker._getBorders(inst.dpDiv);
++		instActive = inst; // for delegate hover events
++		inst.dpDiv.empty().append(this._generateHTML(inst));
++		var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
++		if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
++			cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
++		}
++		inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover();
++		var numMonths = this._getNumberOfMonths(inst);
++		var cols = numMonths[1];
++		var width = 17;
++		inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
++		if (cols > 1)
++			inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
++		inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
++			'Class']('ui-datepicker-multi');
++		inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
++			'Class']('ui-datepicker-rtl');
++		if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
++				// #6694 - don't focus the input if it's already focused
++				// this breaks the change event in IE
++				inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)
++			inst.input.focus();
++		// deffered render of the years select (to avoid flashes on Firefox) 
++		if( inst.yearshtml ){
++			var origyearshtml = inst.yearshtml;
++			setTimeout(function(){
++				//assure that inst.yearshtml didn't change.
++				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
++					inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
++				}
++				origyearshtml = inst.yearshtml = null;
++			}, 0);
++		}
++	},
++
++	/* Retrieve the size of left and top borders for an element.
++	   @param  elem  (jQuery object) the element of interest
++	   @return  (number[2]) the left and top borders */
++	_getBorders: function(elem) {
++		var convert = function(value) {
++			return {thin: 1, medium: 2, thick: 3}[value] || value;
++		};
++		return [parseFloat(convert(elem.css('border-left-width'))),
++			parseFloat(convert(elem.css('border-top-width')))];
++	},
++
++	/* Check positioning to remain on screen. */
++	_checkOffset: function(inst, offset, isFixed) {
++		var dpWidth = inst.dpDiv.outerWidth();
++		var dpHeight = inst.dpDiv.outerHeight();
++		var inputWidth = inst.input ? inst.input.outerWidth() : 0;
++		var inputHeight = inst.input ? inst.input.outerHeight() : 0;
++		var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft();
++		var viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
++
++		offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
++		offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
++		offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
++
++		// now check if datepicker is showing outside window viewport - move to a better place if so.
++		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
++			Math.abs(offset.left + dpWidth - viewWidth) : 0);
++		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
++			Math.abs(dpHeight + inputHeight) : 0);
++
++		return offset;
++	},
++
++	/* Find an object's position on the screen. */
++	_findPos: function(obj) {
++		var inst = this._getInst(obj);
++		var isRTL = this._get(inst, 'isRTL');
++        while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {
++            obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
++        }
++        var position = $(obj).offset();
++	    return [position.left, position.top];
++	},
++
++	/* Trigger custom callback of onClose. */
++	_triggerOnClose: function(inst) {
++		var onClose = this._get(inst, 'onClose');
++		if (onClose)
++			onClose.apply((inst.input ? inst.input[0] : null),
++						  [(inst.input ? inst.input.val() : ''), inst]);
++	},
++
++	/* Hide the date picker from view.
++	   @param  input  element - the input field attached to the date picker */
++	_hideDatepicker: function(input) {
++		var inst = this._curInst;
++		if (!inst || (input && inst != $.data(input, PROP_NAME)))
++			return;
++		if (this._datepickerShowing) {
++			var showAnim = this._get(inst, 'showAnim');
++			var duration = this._get(inst, 'duration');
++			var postProcess = function() {
++				$.datepicker._tidyDialog(inst);
++				this._curInst = null;
++			};
++			if ($.effects && $.effects[showAnim])
++				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
++			else
++				inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
++					(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);
++			if (!showAnim)
++				postProcess();
++			$.datepicker._triggerOnClose(inst);
++			this._datepickerShowing = false;
++			this._lastInput = null;
++			if (this._inDialog) {
++				this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
++				if ($.blockUI) {
++					$.unblockUI();
++					$('body').append(this.dpDiv);
++				}
++			}
++			this._inDialog = false;
++		}
++	},
++
++	/* Tidy up after a dialog display. */
++	_tidyDialog: function(inst) {
++		inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
++	},
++
++	/* Close date picker if clicked elsewhere. */
++	_checkExternalClick: function(event) {
++		if (!$.datepicker._curInst)
++			return;
++		var $target = $(event.target);
++		if ($target[0].id != $.datepicker._mainDivId &&
++				$target.parents('#' + $.datepicker._mainDivId).length == 0 &&
++				!$target.hasClass($.datepicker.markerClassName) &&
++				!$target.hasClass($.datepicker._triggerClass) &&
++				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
++			$.datepicker._hideDatepicker();
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustDate: function(id, offset, period) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		if (this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		this._adjustInstDate(inst, offset +
++			(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
++			period);
++		this._updateDatepicker(inst);
++	},
++
++	/* Action for current link. */
++	_gotoToday: function(id) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
++			inst.selectedDay = inst.currentDay;
++			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
++			inst.drawYear = inst.selectedYear = inst.currentYear;
++		}
++		else {
++			var date = new Date();
++			inst.selectedDay = date.getDate();
++			inst.drawMonth = inst.selectedMonth = date.getMonth();
++			inst.drawYear = inst.selectedYear = date.getFullYear();
++		}
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a new month/year. */
++	_selectMonthYear: function(id, select, period) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
++		inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
++			parseInt(select.options[select.selectedIndex].value,10);
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a day. */
++	_selectDay: function(id, month, year, td) {
++		var target = $(id);
++		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		var inst = this._getInst(target[0]);
++		inst.selectedDay = inst.currentDay = $('a', td).html();
++		inst.selectedMonth = inst.currentMonth = month;
++		inst.selectedYear = inst.currentYear = year;
++		this._selectDate(id, this._formatDate(inst,
++			inst.currentDay, inst.currentMonth, inst.currentYear));
++	},
++
++	/* Erase the input field and hide the date picker. */
++	_clearDate: function(id) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		this._selectDate(target, '');
++	},
++
++	/* Update the input field with the selected date. */
++	_selectDate: function(id, dateStr) {
++		var target = $(id);
++		var inst = this._getInst(target[0]);
++		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
++		if (inst.input)
++			inst.input.val(dateStr);
++		this._updateAlternate(inst);
++		var onSelect = this._get(inst, 'onSelect');
++		if (onSelect)
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
++		else if (inst.input)
++			inst.input.trigger('change'); // fire the change event
++		if (inst.inline)
++			this._updateDatepicker(inst);
++		else {
++			this._hideDatepicker();
++			this._lastInput = inst.input[0];
++			inst.input.focus(); // restore focus
++			this._lastInput = null;
++		}
++	},
++
++	/* Update any alternate field to synchronise with the main field. */
++	_updateAlternate: function(inst) {
++		var altField = this._get(inst, 'altField');
++		if (altField) { // update alternate field too
++			var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
++			var date = this._getDate(inst);
++			var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
++			$(altField).each(function() { $(this).val(dateStr); });
++		}
++	},
++
++	/* Set as beforeShowDay function to prevent selection of weekends.
++	   @param  date  Date - the date to customise
++	   @return [boolean, string] - is this date selectable?, what is its CSS class? */
++	noWeekends: function(date) {
++		var day = date.getDay();
++		return [(day > 0 && day < 6), ''];
++	},
++
++	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++	   @param  date  Date - the date to get the week for
++	   @return  number - the number of the week within the year that contains this date */
++	iso8601Week: function(date) {
++		var checkDate = new Date(date.getTime());
++		// Find Thursday of this week starting on Monday
++		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++		var time = checkDate.getTime();
++		checkDate.setMonth(0); // Compare with Jan 1
++		checkDate.setDate(1);
++		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++	},
++
++	/* Parse a string value into a date object.
++	   See formatDate below for the possible formats.
++
++	   @param  format    string - the expected format of the date
++	   @param  value     string - the date in the above format
++	   @param  settings  Object - attributes include:
++	                     shortYearCutoff  number - the cutoff year for determining the century (optional)
++	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
++	                     dayNames         string[7] - names of the days from Sunday (optional)
++	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
++	                     monthNames       string[12] - names of the months (optional)
++	   @return  Date - the extracted date value or null if value is blank */
++	parseDate: function (format, value, settings) {
++		if (format == null || value == null)
++			throw 'Invalid arguments';
++		value = (typeof value == 'object' ? value.toString() : value + '');
++		if (value == '')
++			return null;
++		var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
++		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
++				new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
++		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
++		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
++		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
++		var year = -1;
++		var month = -1;
++		var day = -1;
++		var doy = -1;
++		var literal = false;
++		// Check whether a format character is doubled
++		var lookAhead = function(match) {
++			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
++			if (matches)
++				iFormat++;
++			return matches;
++		};
++		// Extract a number from the string value
++		var getNumber = function(match) {
++			var isDoubled = lookAhead(match);
++			var size = (match == '@' ? 14 : (match == '!' ? 20 :
++				(match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2))));
++			var digits = new RegExp('^\\d{1,' + size + '}');
++			var num = value.substring(iValue).match(digits);
++			if (!num)
++				throw 'Missing number at position ' + iValue;
++			iValue += num[0].length;
++			return parseInt(num[0], 10);
++		};
++		// Extract a name from the string value and convert to an index
++		var getName = function(match, shortNames, longNames) {
++			var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
++				return [ [k, v] ];
++			}).sort(function (a, b) {
++				return -(a[1].length - b[1].length);
++			});
++			var index = -1;
++			$.each(names, function (i, pair) {
++				var name = pair[1];
++				if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {
++					index = pair[0];
++					iValue += name.length;
++					return false;
++				}
++			});
++			if (index != -1)
++				return index + 1;
++			else
++				throw 'Unknown name at position ' + iValue;
++		};
++		// Confirm that a literal character matches the string value
++		var checkLiteral = function() {
++			if (value.charAt(iValue) != format.charAt(iFormat))
++				throw 'Unexpected literal at position ' + iValue;
++			iValue++;
++		};
++		var iValue = 0;
++		for (var iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal)
++				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
++					literal = false;
++				else
++					checkLiteral();
++			else
++				switch (format.charAt(iFormat)) {
++					case 'd':
++						day = getNumber('d');
++						break;
++					case 'D':
++						getName('D', dayNamesShort, dayNames);
++						break;
++					case 'o':
++						doy = getNumber('o');
++						break;
++					case 'm':
++						month = getNumber('m');
++						break;
++					case 'M':
++						month = getName('M', monthNamesShort, monthNames);
++						break;
++					case 'y':
++						year = getNumber('y');
++						break;
++					case '@':
++						var date = new Date(getNumber('@'));
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case '!':
++						var date = new Date((getNumber('!') - this._ticksTo1970) / 10000);
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "'":
++						if (lookAhead("'"))
++							checkLiteral();
++						else
++							literal = true;
++						break;
++					default:
++						checkLiteral();
++				}
++		}
++		if (iValue < value.length){
++			throw "Extra/unparsed characters found in date: " + value.substring(iValue);
++		}
++		if (year == -1)
++			year = new Date().getFullYear();
++		else if (year < 100)
++			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
++				(year <= shortYearCutoff ? 0 : -100);
++		if (doy > -1) {
++			month = 1;
++			day = doy;
++			do {
++				var dim = this._getDaysInMonth(year, month - 1);
++				if (day <= dim)
++					break;
++				month++;
++				day -= dim;
++			} while (true);
++		}
++		var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
++		if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
++			throw 'Invalid date'; // E.g. 31/02/00
++		return date;
++	},
++
++	/* Standard date formats. */
++	ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
++	COOKIE: 'D, dd M yy',
++	ISO_8601: 'yy-mm-dd',
++	RFC_822: 'D, d M y',
++	RFC_850: 'DD, dd-M-y',
++	RFC_1036: 'D, d M y',
++	RFC_1123: 'D, d M yy',
++	RFC_2822: 'D, d M yy',
++	RSS: 'D, d M y', // RFC 822
++	TICKS: '!',
++	TIMESTAMP: '@',
++	W3C: 'yy-mm-dd', // ISO 8601
++
++	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
++		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
++
++	/* Format a date object into a string value.
++	   The format can be combinations of the following:
++	   d  - day of month (no leading zero)
++	   dd - day of month (two digit)
++	   o  - day of year (no leading zeros)
++	   oo - day of year (three digit)
++	   D  - day name short
++	   DD - day name long
++	   m  - month of year (no leading zero)
++	   mm - month of year (two digit)
++	   M  - month name short
++	   MM - month name long
++	   y  - year (two digit)
++	   yy - year (four digit)
++	   @ - Unix timestamp (ms since 01/01/1970)
++	   ! - Windows ticks (100ns since 01/01/0001)
++	   '...' - literal text
++	   '' - single quote
++
++	   @param  format    string - the desired format of the date
++	   @param  date      Date - the date value to format
++	   @param  settings  Object - attributes include:
++	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
++	                     dayNames         string[7] - names of the days from Sunday (optional)
++	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
++	                     monthNames       string[12] - names of the months (optional)
++	   @return  string - the date in the above format */
++	formatDate: function (format, date, settings) {
++		if (!date)
++			return '';
++		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
++		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
++		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
++		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
++		// Check whether a format character is doubled
++		var lookAhead = function(match) {
++			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
++			if (matches)
++				iFormat++;
++			return matches;
++		};
++		// Format a number, with leading zero if necessary
++		var formatNumber = function(match, value, len) {
++			var num = '' + value;
++			if (lookAhead(match))
++				while (num.length < len)
++					num = '0' + num;
++			return num;
++		};
++		// Format a name, short or long as requested
++		var formatName = function(match, value, shortNames, longNames) {
++			return (lookAhead(match) ? longNames[value] : shortNames[value]);
++		};
++		var output = '';
++		var literal = false;
++		if (date)
++			for (var iFormat = 0; iFormat < format.length; iFormat++) {
++				if (literal)
++					if (format.charAt(iFormat) == "'" && !lookAhead("'"))
++						literal = false;
++					else
++						output += format.charAt(iFormat);
++				else
++					switch (format.charAt(iFormat)) {
++						case 'd':
++							output += formatNumber('d', date.getDate(), 2);
++							break;
++						case 'D':
++							output += formatName('D', date.getDay(), dayNamesShort, dayNames);
++							break;
++						case 'o':
++							output += formatNumber('o',
++								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
++							break;
++						case 'm':
++							output += formatNumber('m', date.getMonth() + 1, 2);
++							break;
++						case 'M':
++							output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
++							break;
++						case 'y':
++							output += (lookAhead('y') ? date.getFullYear() :
++								(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
++							break;
++						case '@':
++							output += date.getTime();
++							break;
++						case '!':
++							output += date.getTime() * 10000 + this._ticksTo1970;
++							break;
++						case "'":
++							if (lookAhead("'"))
++								output += "'";
++							else
++								literal = true;
++							break;
++						default:
++							output += format.charAt(iFormat);
++					}
++			}
++		return output;
++	},
++
++	/* Extract all possible characters from the date format. */
++	_possibleChars: function (format) {
++		var chars = '';
++		var literal = false;
++		// Check whether a format character is doubled
++		var lookAhead = function(match) {
++			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
++			if (matches)
++				iFormat++;
++			return matches;
++		};
++		for (var iFormat = 0; iFormat < format.length; iFormat++)
++			if (literal)
++				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
++					literal = false;
++				else
++					chars += format.charAt(iFormat);
++			else
++				switch (format.charAt(iFormat)) {
++					case 'd': case 'm': case 'y': case '@':
++						chars += '0123456789';
++						break;
++					case 'D': case 'M':
++						return null; // Accept anything
++					case "'":
++						if (lookAhead("'"))
++							chars += "'";
++						else
++							literal = true;
++						break;
++					default:
++						chars += format.charAt(iFormat);
++				}
++		return chars;
++	},
++
++	/* Get a setting value, defaulting if necessary. */
++	_get: function(inst, name) {
++		return inst.settings[name] !== undefined ?
++			inst.settings[name] : this._defaults[name];
++	},
++
++	/* Parse existing date and initialise date picker. */
++	_setDateFromField: function(inst, noDefault) {
++		if (inst.input.val() == inst.lastVal) {
++			return;
++		}
++		var dateFormat = this._get(inst, 'dateFormat');
++		var dates = inst.lastVal = inst.input ? inst.input.val() : null;
++		var date, defaultDate;
++		date = defaultDate = this._getDefaultDate(inst);
++		var settings = this._getFormatConfig(inst);
++		try {
++			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
++		} catch (event) {
++			this.log(event);
++			dates = (noDefault ? '' : dates);
++		}
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		inst.currentDay = (dates ? date.getDate() : 0);
++		inst.currentMonth = (dates ? date.getMonth() : 0);
++		inst.currentYear = (dates ? date.getFullYear() : 0);
++		this._adjustInstDate(inst);
++	},
++
++	/* Retrieve the default date shown on opening. */
++	_getDefaultDate: function(inst) {
++		return this._restrictMinMax(inst,
++			this._determineDate(inst, this._get(inst, 'defaultDate'), new Date()));
++	},
++
++	/* A date may be specified as an exact value or a relative one. */
++	_determineDate: function(inst, date, defaultDate) {
++		var offsetNumeric = function(offset) {
++			var date = new Date();
++			date.setDate(date.getDate() + offset);
++			return date;
++		};
++		var offsetString = function(offset) {
++			try {
++				return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
++					offset, $.datepicker._getFormatConfig(inst));
++			}
++			catch (e) {
++				// Ignore
++			}
++			var date = (offset.toLowerCase().match(/^c/) ?
++				$.datepicker._getDate(inst) : null) || new Date();
++			var year = date.getFullYear();
++			var month = date.getMonth();
++			var day = date.getDate();
++			var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
++			var matches = pattern.exec(offset);
++			while (matches) {
++				switch (matches[2] || 'd') {
++					case 'd' : case 'D' :
++						day += parseInt(matches[1],10); break;
++					case 'w' : case 'W' :
++						day += parseInt(matches[1],10) * 7; break;
++					case 'm' : case 'M' :
++						month += parseInt(matches[1],10);
++						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++						break;
++					case 'y': case 'Y' :
++						year += parseInt(matches[1],10);
++						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++						break;
++				}
++				matches = pattern.exec(offset);
++			}
++			return new Date(year, month, day);
++		};
++		var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) :
++			(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
++		newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
++		if (newDate) {
++			newDate.setHours(0);
++			newDate.setMinutes(0);
++			newDate.setSeconds(0);
++			newDate.setMilliseconds(0);
++		}
++		return this._daylightSavingAdjust(newDate);
++	},
++
++	/* Handle switch to/from daylight saving.
++	   Hours may be non-zero on daylight saving cut-over:
++	   > 12 when midnight changeover, but then cannot generate
++	   midnight datetime, so jump to 1AM, otherwise reset.
++	   @param  date  (Date) the date to check
++	   @return  (Date) the corrected date */
++	_daylightSavingAdjust: function(date) {
++		if (!date) return null;
++		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
++		return date;
++	},
++
++	/* Set the date(s) directly. */
++	_setDate: function(inst, date, noChange) {
++		var clear = !date;
++		var origMonth = inst.selectedMonth;
++		var origYear = inst.selectedYear;
++		var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
++		inst.selectedDay = inst.currentDay = newDate.getDate();
++		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
++		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
++		if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
++			this._notifyChange(inst);
++		this._adjustInstDate(inst);
++		if (inst.input) {
++			inst.input.val(clear ? '' : this._formatDate(inst));
++		}
++
++		var onSelect = this._get(inst, 'onSelect');
++		if (onSelect) {
++			var dateStr = this._formatDate(inst);
++
++			// trigger custom callback
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++		}
++	},
++
++	/* Retrieve the date(s) directly. */
++	_getDate: function(inst) {
++		var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
++			this._daylightSavingAdjust(new Date(
++			inst.currentYear, inst.currentMonth, inst.currentDay)));
++			return startDate;
++	},
++
++	/* Generate the HTML for the current state of the date picker. */
++	_generateHTML: function(inst) {
++		var today = new Date();
++		today = this._daylightSavingAdjust(
++			new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
++		var isRTL = this._get(inst, 'isRTL');
++		var showButtonPanel = this._get(inst, 'showButtonPanel');
++		var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
++		var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
++		var numMonths = this._getNumberOfMonths(inst);
++		var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
++		var stepMonths = this._get(inst, 'stepMonths');
++		var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
++		var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
++			new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		var minDate = this._getMinMaxDate(inst, 'min');
++		var maxDate = this._getMinMaxDate(inst, 'max');
++		var drawMonth = inst.drawMonth - showCurrentAtPos;
++		var drawYear = inst.drawYear;
++		if (drawMonth < 0) {
++			drawMonth += 12;
++			drawYear--;
++		}
++		if (maxDate) {
++			var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
++				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
++			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
++			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
++				drawMonth--;
++				if (drawMonth < 0) {
++					drawMonth = 11;
++					drawYear--;
++				}
++			}
++		}
++		inst.drawMonth = drawMonth;
++		inst.drawYear = drawYear;
++		var prevText = this._get(inst, 'prevText');
++		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
++			this._getFormatConfig(inst)));
++		var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
++			'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_' + dpuuid +
++			'.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
++			' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
++			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
++		var nextText = this._get(inst, 'nextText');
++		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
++			this._getFormatConfig(inst)));
++		var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
++			'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_' + dpuuid +
++			'.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
++			' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
++			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
++		var currentText = this._get(inst, 'currentText');
++		var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
++		currentText = (!navigationAsDateFormat ? currentText :
++			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
++		var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
++			'.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
++		var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
++			(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
++			'.datepicker._gotoToday(\'#' + inst.id + '\');"' +
++			'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
++		var firstDay = parseInt(this._get(inst, 'firstDay'),10);
++		firstDay = (isNaN(firstDay) ? 0 : firstDay);
++		var showWeek = this._get(inst, 'showWeek');
++		var dayNames = this._get(inst, 'dayNames');
++		var dayNamesShort = this._get(inst, 'dayNamesShort');
++		var dayNamesMin = this._get(inst, 'dayNamesMin');
++		var monthNames = this._get(inst, 'monthNames');
++		var monthNamesShort = this._get(inst, 'monthNamesShort');
++		var beforeShowDay = this._get(inst, 'beforeShowDay');
++		var showOtherMonths = this._get(inst, 'showOtherMonths');
++		var selectOtherMonths = this._get(inst, 'selectOtherMonths');
++		var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
++		var defaultDate = this._getDefaultDate(inst);
++		var html = '';
++		for (var row = 0; row < numMonths[0]; row++) {
++			var group = '';
++			this.maxRows = 4;
++			for (var col = 0; col < numMonths[1]; col++) {
++				var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
++				var cornerClass = ' ui-corner-all';
++				var calender = '';
++				if (isMultiMonth) {
++					calender += '<div class="ui-datepicker-group';
++					if (numMonths[1] > 1)
++						switch (col) {
++							case 0: calender += ' ui-datepicker-group-first';
++								cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
++							case numMonths[1]-1: calender += ' ui-datepicker-group-last';
++								cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
++							default: calender += ' ui-datepicker-group-middle'; cornerClass = ''; break;
++						}
++					calender += '">';
++				}
++				calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
++					(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
++					(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
++					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
++					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
++					'</div><table class="ui-datepicker-calendar"><thead>' +
++					'<tr>';
++				var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : '');
++				for (var dow = 0; dow < 7; dow++) { // days of the week
++					var day = (dow + firstDay) % 7;
++					thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
++						'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
++				}
++				calender += thead + '</tr></thead><tbody>';
++				var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
++				if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
++					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
++				var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
++				var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
++				var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
++				this.maxRows = numRows;
++				var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
++				for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
++					calender += '<tr>';
++					var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' +
++						this._get(inst, 'calculateWeek')(printDate) + '</td>');
++					for (var dow = 0; dow < 7; dow++) { // create date picker days
++						var daySettings = (beforeShowDay ?
++							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
++						var otherMonth = (printDate.getMonth() != drawMonth);
++						var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
++							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
++						tbody += '<td class="' +
++							((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
++							(otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
++							((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
++							(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
++							// or defaultDate is current printedDate and defaultDate is selectedDate
++							' ' + this._dayOverClass : '') + // highlight selected day
++							(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') +  // highlight unselectable days
++							(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
++							(printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day
++							(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
++							((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
++							(unselectable ? '' : ' onclick="DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' +
++							inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);return false;"') + '>' + // actions
++							(otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months
++							(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
++							(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
++							(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day
++							(otherMonth ? ' ui-priority-secondary' : '') + // distinguish dates from other months
++							'" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display selectable date
++						printDate.setDate(printDate.getDate() + 1);
++						printDate = this._daylightSavingAdjust(printDate);
++					}
++					calender += tbody + '</tr>';
++				}
++				drawMonth++;
++				if (drawMonth > 11) {
++					drawMonth = 0;
++					drawYear++;
++				}
++				calender += '</tbody></table>' + (isMultiMonth ? '</div>' + 
++							((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
++				group += calender;
++			}
++			html += group;
++		}
++		html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
++			'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
++		inst._keyEvent = false;
++		return html;
++	},
++
++	/* Generate the month and year header. */
++	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
++			secondary, monthNames, monthNamesShort) {
++		var changeMonth = this._get(inst, 'changeMonth');
++		var changeYear = this._get(inst, 'changeYear');
++		var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
++		var html = '<div class="ui-datepicker-title">';
++		var monthHtml = '';
++		// month selection
++		if (secondary || !changeMonth)
++			monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>';
++		else {
++			var inMinYear = (minDate && minDate.getFullYear() == drawYear);
++			var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
++			monthHtml += '<select class="ui-datepicker-month" ' +
++				'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
++			 	'>';
++			for (var month = 0; month < 12; month++) {
++				if ((!inMinYear || month >= minDate.getMonth()) &&
++						(!inMaxYear || month <= maxDate.getMonth()))
++					monthHtml += '<option value="' + month + '"' +
++						(month == drawMonth ? ' selected="selected"' : '') +
++						'>' + monthNamesShort[month] + '</option>';
++			}
++			monthHtml += '</select>';
++		}
++		if (!showMonthAfterYear)
++			html += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');
++		// year selection
++		if ( !inst.yearshtml ) {
++			inst.yearshtml = '';
++			if (secondary || !changeYear)
++				html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
++			else {
++				// determine range of years to display
++				var years = this._get(inst, 'yearRange').split(':');
++				var thisYear = new Date().getFullYear();
++				var determineYear = function(value) {
++					var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
++						(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
++						parseInt(value, 10)));
++					return (isNaN(year) ? thisYear : year);
++				};
++				var year = determineYear(years[0]);
++				var endYear = Math.max(year, determineYear(years[1] || ''));
++				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
++				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
++				inst.yearshtml += '<select class="ui-datepicker-year" ' +
++					'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
++					'>';
++				for (; year <= endYear; year++) {
++					inst.yearshtml += '<option value="' + year + '"' +
++						(year == drawYear ? ' selected="selected"' : '') +
++						'>' + year + '</option>';
++				}
++				inst.yearshtml += '</select>';
++				
++				html += inst.yearshtml;
++				inst.yearshtml = null;
++			}
++		}
++		html += this._get(inst, 'yearSuffix');
++		if (showMonthAfterYear)
++			html += (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '') + monthHtml;
++		html += '</div>'; // Close datepicker_header
++		return html;
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustInstDate: function(inst, offset, period) {
++		var year = inst.drawYear + (period == 'Y' ? offset : 0);
++		var month = inst.drawMonth + (period == 'M' ? offset : 0);
++		var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
++			(period == 'D' ? offset : 0);
++		var date = this._restrictMinMax(inst,
++			this._daylightSavingAdjust(new Date(year, month, day)));
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		if (period == 'M' || period == 'Y')
++			this._notifyChange(inst);
++	},
++
++	/* Ensure a date is within any min/max bounds. */
++	_restrictMinMax: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, 'min');
++		var maxDate = this._getMinMaxDate(inst, 'max');
++		var newDate = (minDate && date < minDate ? minDate : date);
++		newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
++		return newDate;
++	},
++
++	/* Notify change of month/year. */
++	_notifyChange: function(inst) {
++		var onChange = this._get(inst, 'onChangeMonthYear');
++		if (onChange)
++			onChange.apply((inst.input ? inst.input[0] : null),
++				[inst.selectedYear, inst.selectedMonth + 1, inst]);
++	},
++
++	/* Determine the number of months to show. */
++	_getNumberOfMonths: function(inst) {
++		var numMonths = this._get(inst, 'numberOfMonths');
++		return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
++	},
++
++	/* Determine the current maximum date - ensure no time components are set. */
++	_getMinMaxDate: function(inst, minMax) {
++		return this._determineDate(inst, this._get(inst, minMax + 'Date'), null);
++	},
++
++	/* Find the number of days in a given month. */
++	_getDaysInMonth: function(year, month) {
++		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
++	},
++
++	/* Find the day of the week of the first of a month. */
++	_getFirstDayOfMonth: function(year, month) {
++		return new Date(year, month, 1).getDay();
++	},
++
++	/* Determines if we should allow a "next/prev" month display change. */
++	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
++		var numMonths = this._getNumberOfMonths(inst);
++		var date = this._daylightSavingAdjust(new Date(curYear,
++			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
++		if (offset < 0)
++			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
++		return this._isInRange(inst, date);
++	},
++
++	/* Is the given date in the accepted range? */
++	_isInRange: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, 'min');
++		var maxDate = this._getMinMaxDate(inst, 'max');
++		return ((!minDate || date.getTime() >= minDate.getTime()) &&
++			(!maxDate || date.getTime() <= maxDate.getTime()));
++	},
++
++	/* Provide the configuration settings for formatting/parsing. */
++	_getFormatConfig: function(inst) {
++		var shortYearCutoff = this._get(inst, 'shortYearCutoff');
++		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
++			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		return {shortYearCutoff: shortYearCutoff,
++			dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
++			monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
++	},
++
++	/* Format the given date for display. */
++	_formatDate: function(inst, day, month, year) {
++		if (!day) {
++			inst.currentDay = inst.selectedDay;
++			inst.currentMonth = inst.selectedMonth;
++			inst.currentYear = inst.selectedYear;
++		}
++		var date = (day ? (typeof day == 'object' ? day :
++			this._daylightSavingAdjust(new Date(year, month, day))) :
++			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
++	}
++});
++
++/*
++ * Bind hover events for datepicker elements.
++ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
++ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
++ */ 
++function bindHover(dpDiv) {
++	var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';
++	return dpDiv.bind('mouseout', function(event) {
++			var elem = $( event.target ).closest( selector );
++			if ( !elem.length ) {
++				return;
++			}
++			elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" );
++		})
++		.bind('mouseover', function(event) {
++			var elem = $( event.target ).closest( selector );
++			if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) ||
++					!elem.length ) {
++				return;
++			}
++			elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
++			elem.addClass('ui-state-hover');
++			if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover');
++			if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover');
++		});
++}
++
++/* jQuery extend now ignores nulls! */
++function extendRemove(target, props) {
++	$.extend(target, props);
++	for (var name in props)
++		if (props[name] == null || props[name] == undefined)
++			target[name] = props[name];
++	return target;
++};
++
++/* Determine whether an object is an array. */
++function isArray(a) {
++	return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
++		(a.constructor && a.constructor.toString().match(/\Array\(\)/))));
++};
++
++/* Invoke the datepicker functionality.
++   @param  options  string - a command, optionally followed by additional parameters or
++                    Object - settings for attaching new datepicker functionality
++   @return  jQuery object */
++$.fn.datepicker = function(options){
++	
++	/* Verify an empty collection wasn't passed - Fixes #6976 */
++	if ( !this.length ) {
++		return this;
++	}
++	
++	/* Initialise the date picker. */
++	if (!$.datepicker.initialized) {
++		$(document).mousedown($.datepicker._checkExternalClick).
++			find('body').append($.datepicker.dpDiv);
++		$.datepicker.initialized = true;
++	}
++
++	var otherArgs = Array.prototype.slice.call(arguments, 1);
++	if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget'))
++		return $.datepicker['_' + options + 'Datepicker'].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
++		return $.datepicker['_' + options + 'Datepicker'].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	return this.each(function() {
++		typeof options == 'string' ?
++			$.datepicker['_' + options + 'Datepicker'].
++				apply($.datepicker, [this].concat(otherArgs)) :
++			$.datepicker._attachDatepicker(this, options);
++	});
++};
++
++$.datepicker = new Datepicker(); // singleton instance
++$.datepicker.initialized = false;
++$.datepicker.uuid = new Date().getTime();
++$.datepicker.version = "1.8.15";
++
++// Workaround for #4055
++// Add another global to avoid noConflict issues with inline event handlers
++window['DP_jQuery_' + dpuuid] = $;
++
++})(jQuery);
++/*
++ * jQuery UI Dialog 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Dialog
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ *  jquery.ui.button.js
++ *	jquery.ui.draggable.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.position.js
++ *	jquery.ui.resizable.js
++ */
++(function( $, undefined ) {
++
++var uiDialogClasses =
++		'ui-dialog ' +
++		'ui-widget ' +
++		'ui-widget-content ' +
++		'ui-corner-all ',
++	sizeRelatedOptions = {
++		buttons: true,
++		height: true,
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true,
++		width: true
++	},
++	resizableRelatedOptions = {
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true
++	},
++	// support for jQuery 1.3.2 - handle common attrFn methods for dialog
++	attrFn = $.attrFn || {
++		val: true,
++		css: true,
++		html: true,
++		text: true,
++		data: true,
++		width: true,
++		height: true,
++		offset: true,
++		click: true
++	};
++
++$.widget("ui.dialog", {
++	options: {
++		autoOpen: true,
++		buttons: {},
++		closeOnEscape: true,
++		closeText: 'close',
++		dialogClass: '',
++		draggable: true,
++		hide: null,
++		height: 'auto',
++		maxHeight: false,
++		maxWidth: false,
++		minHeight: 150,
++		minWidth: 150,
++		modal: false,
++		position: {
++			my: 'center',
++			at: 'center',
++			collision: 'fit',
++			// ensure that the titlebar is never outside the document
++			using: function(pos) {
++				var topOffset = $(this).css(pos).offset().top;
++				if (topOffset < 0) {
++					$(this).css('top', pos.top - topOffset);
++				}
++			}
++		},
++		resizable: true,
++		show: null,
++		stack: true,
++		title: '',
++		width: 300,
++		zIndex: 1000
++	},
++
++	_create: function() {
++		this.originalTitle = this.element.attr('title');
++		// #5742 - .attr() might return a DOMElement
++		if ( typeof this.originalTitle !== "string" ) {
++			this.originalTitle = "";
++		}
++
++		this.options.title = this.options.title || this.originalTitle;
++		var self = this,
++			options = self.options,
++
++			title = options.title || '&#160;',
++			titleId = $.ui.dialog.getTitleId(self.element),
++
++			uiDialog = (self.uiDialog = $('<div></div>'))
++				.appendTo(document.body)
++				.hide()
++				.addClass(uiDialogClasses + options.dialogClass)
++				.css({
++					zIndex: options.zIndex
++				})
++				// setting tabIndex makes the div focusable
++				// setting outline to 0 prevents a border on focus in Mozilla
++				.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
++					if (options.closeOnEscape && event.keyCode &&
++						event.keyCode === $.ui.keyCode.ESCAPE) {
++						
++						self.close(event);
++						event.preventDefault();
++					}
++				})
++				.attr({
++					role: 'dialog',
++					'aria-labelledby': titleId
++				})
++				.mousedown(function(event) {
++					self.moveToTop(false, event);
++				}),
++
++			uiDialogContent = self.element
++				.show()
++				.removeAttr('title')
++				.addClass(
++					'ui-dialog-content ' +
++					'ui-widget-content')
++				.appendTo(uiDialog),
++
++			uiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>'))
++				.addClass(
++					'ui-dialog-titlebar ' +
++					'ui-widget-header ' +
++					'ui-corner-all ' +
++					'ui-helper-clearfix'
++				)
++				.prependTo(uiDialog),
++
++			uiDialogTitlebarClose = $('<a href="#"></a>')
++				.addClass(
++					'ui-dialog-titlebar-close ' +
++					'ui-corner-all'
++				)
++				.attr('role', 'button')
++				.hover(
++					function() {
++						uiDialogTitlebarClose.addClass('ui-state-hover');
++					},
++					function() {
++						uiDialogTitlebarClose.removeClass('ui-state-hover');
++					}
++				)
++				.focus(function() {
++					uiDialogTitlebarClose.addClass('ui-state-focus');
++				})
++				.blur(function() {
++					uiDialogTitlebarClose.removeClass('ui-state-focus');
++				})
++				.click(function(event) {
++					self.close(event);
++					return false;
++				})
++				.appendTo(uiDialogTitlebar),
++
++			uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>'))
++				.addClass(
++					'ui-icon ' +
++					'ui-icon-closethick'
++				)
++				.text(options.closeText)
++				.appendTo(uiDialogTitlebarClose),
++
++			uiDialogTitle = $('<span></span>')
++				.addClass('ui-dialog-title')
++				.attr('id', titleId)
++				.html(title)
++				.prependTo(uiDialogTitlebar);
++
++		//handling of deprecated beforeclose (vs beforeClose) option
++		//Ticket #4669 http://dev.jqueryui.com/ticket/4669
++		//TODO: remove in 1.9pre
++		if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) {
++			options.beforeClose = options.beforeclose;
++		}
++
++		uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
++
++		if (options.draggable && $.fn.draggable) {
++			self._makeDraggable();
++		}
++		if (options.resizable && $.fn.resizable) {
++			self._makeResizable();
++		}
++
++		self._createButtons(options.buttons);
++		self._isOpen = false;
++
++		if ($.fn.bgiframe) {
++			uiDialog.bgiframe();
++		}
++	},
++
++	_init: function() {
++		if ( this.options.autoOpen ) {
++			this.open();
++		}
++	},
++
++	destroy: function() {
++		var self = this;
++		
++		if (self.overlay) {
++			self.overlay.destroy();
++		}
++		self.uiDialog.hide();
++		self.element
++			.unbind('.dialog')
++			.removeData('dialog')
++			.removeClass('ui-dialog-content ui-widget-content')
++			.hide().appendTo('body');
++		self.uiDialog.remove();
++
++		if (self.originalTitle) {
++			self.element.attr('title', self.originalTitle);
++		}
++
++		return self;
++	},
++
++	widget: function() {
++		return this.uiDialog;
++	},
++
++	close: function(event) {
++		var self = this,
++			maxZ, thisZ;
++		
++		if (false === self._trigger('beforeClose', event)) {
++			return;
++		}
++
++		if (self.overlay) {
++			self.overlay.destroy();
++		}
++		self.uiDialog.unbind('keypress.ui-dialog');
++
++		self._isOpen = false;
++
++		if (self.options.hide) {
++			self.uiDialog.hide(self.options.hide, function() {
++				self._trigger('close', event);
++			});
++		} else {
++			self.uiDialog.hide();
++			self._trigger('close', event);
++		}
++
++		$.ui.dialog.overlay.resize();
++
++		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
++		if (self.options.modal) {
++			maxZ = 0;
++			$('.ui-dialog').each(function() {
++				if (this !== self.uiDialog[0]) {
++					thisZ = $(this).css('z-index');
++					if(!isNaN(thisZ)) {
++						maxZ = Math.max(maxZ, thisZ);
++					}
++				}
++			});
++			$.ui.dialog.maxZ = maxZ;
++		}
++
++		return self;
++	},
++
++	isOpen: function() {
++		return this._isOpen;
++	},
++
++	// the force parameter allows us to move modal dialogs to their correct
++	// position on open
++	moveToTop: function(force, event) {
++		var self = this,
++			options = self.options,
++			saveScroll;
++
++		if ((options.modal && !force) ||
++			(!options.stack && !options.modal)) {
++			return self._trigger('focus', event);
++		}
++
++		if (options.zIndex > $.ui.dialog.maxZ) {
++			$.ui.dialog.maxZ = options.zIndex;
++		}
++		if (self.overlay) {
++			$.ui.dialog.maxZ += 1;
++			self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ);
++		}
++
++		//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
++		//  http://ui.jquery.com/bugs/ticket/3193
++		saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() };
++		$.ui.dialog.maxZ += 1;
++		self.uiDialog.css('z-index', $.ui.dialog.maxZ);
++		self.element.attr(saveScroll);
++		self._trigger('focus', event);
++
++		return self;
++	},
++
++	open: function() {
++		if (this._isOpen) { return; }
++
++		var self = this,
++			options = self.options,
++			uiDialog = self.uiDialog;
++
++		self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
++		self._size();
++		self._position(options.position);
++		uiDialog.show(options.show);
++		self.moveToTop(true);
++
++		// prevent tabbing out of modal dialogs
++		if (options.modal) {
++			uiDialog.bind('keypress.ui-dialog', function(event) {
++				if (event.keyCode !== $.ui.keyCode.TAB) {
++					return;
++				}
++
++				var tabbables = $(':tabbable', this),
++					first = tabbables.filter(':first'),
++					last  = tabbables.filter(':last');
++
++				if (event.target === last[0] && !event.shiftKey) {
++					first.focus(1);
++					return false;
++				} else if (event.target === first[0] && event.shiftKey) {
++					last.focus(1);
++					return false;
++				}
++			});
++		}
++
++		// set focus to the first tabbable element in the content area or the first button
++		// if there are no tabbable elements, set focus on the dialog itself
++		$(self.element.find(':tabbable').get().concat(
++			uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
++				uiDialog.get()))).eq(0).focus();
++
++		self._isOpen = true;
++		self._trigger('open');
++
++		return self;
++	},
++
++	_createButtons: function(buttons) {
++		var self = this,
++			hasButtons = false,
++			uiDialogButtonPane = $('<div></div>')
++				.addClass(
++					'ui-dialog-buttonpane ' +
++					'ui-widget-content ' +
++					'ui-helper-clearfix'
++				),
++			uiButtonSet = $( "<div></div>" )
++				.addClass( "ui-dialog-buttonset" )
++				.appendTo( uiDialogButtonPane );
++
++		// if we already have a button pane, remove it
++		self.uiDialog.find('.ui-dialog-buttonpane').remove();
++
++		if (typeof buttons === 'object' && buttons !== null) {
++			$.each(buttons, function() {
++				return !(hasButtons = true);
++			});
++		}
++		if (hasButtons) {
++			$.each(buttons, function(name, props) {
++				props = $.isFunction( props ) ?
++					{ click: props, text: name } :
++					props;
++				var button = $('<button type="button"></button>')
++					.click(function() {
++						props.click.apply(self.element[0], arguments);
++					})
++					.appendTo(uiButtonSet);
++				// can't use .attr( props, true ) with jQuery 1.3.2.
++				$.each( props, function( key, value ) {
++					if ( key === "click" ) {
++						return;
++					}
++					if ( key in attrFn ) {
++						button[ key ]( value );
++					} else {
++						button.attr( key, value );
++					}
++				});
++				if ($.fn.button) {
++					button.button();
++				}
++			});
++			uiDialogButtonPane.appendTo(self.uiDialog);
++		}
++	},
++
++	_makeDraggable: function() {
++		var self = this,
++			options = self.options,
++			doc = $(document),
++			heightBeforeDrag;
++
++		function filteredUi(ui) {
++			return {
++				position: ui.position,
++				offset: ui.offset
++			};
++		}
++
++		self.uiDialog.draggable({
++			cancel: '.ui-dialog-content, .ui-dialog-titlebar-close',
++			handle: '.ui-dialog-titlebar',
++			containment: 'document',
++			start: function(event, ui) {
++				heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height();
++				$(this).height($(this).height()).addClass("ui-dialog-dragging");
++				self._trigger('dragStart', event, filteredUi(ui));
++			},
++			drag: function(event, ui) {
++				self._trigger('drag', event, filteredUi(ui));
++			},
++			stop: function(event, ui) {
++				options.position = [ui.position.left - doc.scrollLeft(),
++					ui.position.top - doc.scrollTop()];
++				$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
++				self._trigger('dragStop', event, filteredUi(ui));
++				$.ui.dialog.overlay.resize();
++			}
++		});
++	},
++
++	_makeResizable: function(handles) {
++		handles = (handles === undefined ? this.options.resizable : handles);
++		var self = this,
++			options = self.options,
++			// .ui-resizable has position: relative defined in the stylesheet
++			// but dialogs have to use absolute or fixed positioning
++			position = self.uiDialog.css('position'),
++			resizeHandles = (typeof handles === 'string' ?
++				handles	:
++				'n,e,s,w,se,sw,ne,nw'
++			);
++
++		function filteredUi(ui) {
++			return {
++				originalPosition: ui.originalPosition,
++				originalSize: ui.originalSize,
++				position: ui.position,
++				size: ui.size
++			};
++		}
++
++		self.uiDialog.resizable({
++			cancel: '.ui-dialog-content',
++			containment: 'document',
++			alsoResize: self.element,
++			maxWidth: options.maxWidth,
++			maxHeight: options.maxHeight,
++			minWidth: options.minWidth,
++			minHeight: self._minHeight(),
++			handles: resizeHandles,
++			start: function(event, ui) {
++				$(this).addClass("ui-dialog-resizing");
++				self._trigger('resizeStart', event, filteredUi(ui));
++			},
++			resize: function(event, ui) {
++				self._trigger('resize', event, filteredUi(ui));
++			},
++			stop: function(event, ui) {
++				$(this).removeClass("ui-dialog-resizing");
++				options.height = $(this).height();
++				options.width = $(this).width();
++				self._trigger('resizeStop', event, filteredUi(ui));
++				$.ui.dialog.overlay.resize();
++			}
++		})
++		.css('position', position)
++		.find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
++	},
++
++	_minHeight: function() {
++		var options = this.options;
++
++		if (options.height === 'auto') {
++			return options.minHeight;
++		} else {
++			return Math.min(options.minHeight, options.height);
++		}
++	},
++
++	_position: function(position) {
++		var myAt = [],
++			offset = [0, 0],
++			isVisible;
++
++		if (position) {
++			// deep extending converts arrays to objects in jQuery <= 1.3.2 :-(
++	//		if (typeof position == 'string' || $.isArray(position)) {
++	//			myAt = $.isArray(position) ? position : position.split(' ');
++
++			if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) {
++				myAt = position.split ? position.split(' ') : [position[0], position[1]];
++				if (myAt.length === 1) {
++					myAt[1] = myAt[0];
++				}
++
++				$.each(['left', 'top'], function(i, offsetPosition) {
++					if (+myAt[i] === myAt[i]) {
++						offset[i] = myAt[i];
++						myAt[i] = offsetPosition;
++					}
++				});
++
++				position = {
++					my: myAt.join(" "),
++					at: myAt.join(" "),
++					offset: offset.join(" ")
++				};
++			} 
++
++			position = $.extend({}, $.ui.dialog.prototype.options.position, position);
++		} else {
++			position = $.ui.dialog.prototype.options.position;
++		}
++
++		// need to show the dialog to get the actual offset in the position plugin
++		isVisible = this.uiDialog.is(':visible');
++		if (!isVisible) {
++			this.uiDialog.show();
++		}
++		this.uiDialog
++			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
++			.css({ top: 0, left: 0 })
++			.position($.extend({ of: window }, position));
++		if (!isVisible) {
++			this.uiDialog.hide();
++		}
++	},
++
++	_setOptions: function( options ) {
++		var self = this,
++			resizableOptions = {},
++			resize = false;
++
++		$.each( options, function( key, value ) {
++			self._setOption( key, value );
++			
++			if ( key in sizeRelatedOptions ) {
++				resize = true;
++			}
++			if ( key in resizableRelatedOptions ) {
++				resizableOptions[ key ] = value;
++			}
++		});
++
++		if ( resize ) {
++			this._size();
++		}
++		if ( this.uiDialog.is( ":data(resizable)" ) ) {
++			this.uiDialog.resizable( "option", resizableOptions );
++		}
++	},
++
++	_setOption: function(key, value){
++		var self = this,
++			uiDialog = self.uiDialog;
++
++		switch (key) {
++			//handling of deprecated beforeclose (vs beforeClose) option
++			//Ticket #4669 http://dev.jqueryui.com/ticket/4669
++			//TODO: remove in 1.9pre
++			case "beforeclose":
++				key = "beforeClose";
++				break;
++			case "buttons":
++				self._createButtons(value);
++				break;
++			case "closeText":
++				// ensure that we always pass a string
++				self.uiDialogTitlebarCloseText.text("" + value);
++				break;
++			case "dialogClass":
++				uiDialog
++					.removeClass(self.options.dialogClass)
++					.addClass(uiDialogClasses + value);
++				break;
++			case "disabled":
++				if (value) {
++					uiDialog.addClass('ui-dialog-disabled');
++				} else {
++					uiDialog.removeClass('ui-dialog-disabled');
++				}
++				break;
++			case "draggable":
++				var isDraggable = uiDialog.is( ":data(draggable)" );
++				if ( isDraggable && !value ) {
++					uiDialog.draggable( "destroy" );
++				}
++				
++				if ( !isDraggable && value ) {
++					self._makeDraggable();
++				}
++				break;
++			case "position":
++				self._position(value);
++				break;
++			case "resizable":
++				// currently resizable, becoming non-resizable
++				var isResizable = uiDialog.is( ":data(resizable)" );
++				if (isResizable && !value) {
++					uiDialog.resizable('destroy');
++				}
++
++				// currently resizable, changing handles
++				if (isResizable && typeof value === 'string') {
++					uiDialog.resizable('option', 'handles', value);
++				}
++
++				// currently non-resizable, becoming resizable
++				if (!isResizable && value !== false) {
++					self._makeResizable(value);
++				}
++				break;
++			case "title":
++				// convert whatever was passed in o a string, for html() to not throw up
++				$(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || '&#160;'));
++				break;
++		}
++
++		$.Widget.prototype._setOption.apply(self, arguments);
++	},
++
++	_size: function() {
++		/* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
++		 * divs will both have width and height set, so we need to reset them
++		 */
++		var options = this.options,
++			nonContentHeight,
++			minContentHeight,
++			isVisible = this.uiDialog.is( ":visible" );
++
++		// reset content sizing
++		this.element.show().css({
++			width: 'auto',
++			minHeight: 0,
++			height: 0
++		});
++
++		if (options.minWidth > options.width) {
++			options.width = options.minWidth;
++		}
++
++		// reset wrapper sizing
++		// determine the height of all the non-content elements
++		nonContentHeight = this.uiDialog.css({
++				height: 'auto',
++				width: options.width
++			})
++			.height();
++		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
++		
++		if ( options.height === "auto" ) {
++			// only needed for IE6 support
++			if ( $.support.minHeight ) {
++				this.element.css({
++					minHeight: minContentHeight,
++					height: "auto"
++				});
++			} else {
++				this.uiDialog.show();
++				var autoHeight = this.element.css( "height", "auto" ).height();
++				if ( !isVisible ) {
++					this.uiDialog.hide();
++				}
++				this.element.height( Math.max( autoHeight, minContentHeight ) );
++			}
++		} else {
++			this.element.height( Math.max( options.height - nonContentHeight, 0 ) );
++		}
++
++		if (this.uiDialog.is(':data(resizable)')) {
++			this.uiDialog.resizable('option', 'minHeight', this._minHeight());
++		}
++	}
++});
++
++$.extend($.ui.dialog, {
++	version: "1.8.15",
++
++	uuid: 0,
++	maxZ: 0,
++
++	getTitleId: function($el) {
++		var id = $el.attr('id');
++		if (!id) {
++			this.uuid += 1;
++			id = this.uuid;
++		}
++		return 'ui-dialog-title-' + id;
++	},
++
++	overlay: function(dialog) {
++		this.$el = $.ui.dialog.overlay.create(dialog);
++	}
++});
++
++$.extend($.ui.dialog.overlay, {
++	instances: [],
++	// reuse old instances due to IE memory leak with alpha transparency (see #5185)
++	oldInstances: [],
++	maxZ: 0,
++	events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
++		function(event) { return event + '.dialog-overlay'; }).join(' '),
++	create: function(dialog) {
++		if (this.instances.length === 0) {
++			// prevent use of anchors and inputs
++			// we use a setTimeout in case the overlay is created from an
++			// event that we're going to be cancelling (see #2804)
++			setTimeout(function() {
++				// handle $(el).dialog().dialog('close') (see #4065)
++				if ($.ui.dialog.overlay.instances.length) {
++					$(document).bind($.ui.dialog.overlay.events, function(event) {
++						// stop events if the z-index of the target is < the z-index of the overlay
++						// we cannot return true when we don't want to cancel the event (#3523)
++						if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
++							return false;
++						}
++					});
++				}
++			}, 1);
++
++			// allow closing by pressing the escape key
++			$(document).bind('keydown.dialog-overlay', function(event) {
++				if (dialog.options.closeOnEscape && event.keyCode &&
++					event.keyCode === $.ui.keyCode.ESCAPE) {
++					
++					dialog.close(event);
++					event.preventDefault();
++				}
++			});
++
++			// handle window resize
++			$(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
++		}
++
++		var $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay'))
++			.appendTo(document.body)
++			.css({
++				width: this.width(),
++				height: this.height()
++			});
++
++		if ($.fn.bgiframe) {
++			$el.bgiframe();
++		}
++
++		this.instances.push($el);
++		return $el;
++	},
++
++	destroy: function($el) {
++		var indexOf = $.inArray($el, this.instances);
++		if (indexOf != -1){
++			this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
++		}
++
++		if (this.instances.length === 0) {
++			$([document, window]).unbind('.dialog-overlay');
++		}
++
++		$el.remove();
++		
++		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
++		var maxZ = 0;
++		$.each(this.instances, function() {
++			maxZ = Math.max(maxZ, this.css('z-index'));
++		});
++		this.maxZ = maxZ;
++	},
++
++	height: function() {
++		var scrollHeight,
++			offsetHeight;
++		// handle IE 6
++		if ($.browser.msie && $.browser.version < 7) {
++			scrollHeight = Math.max(
++				document.documentElement.scrollHeight,
++				document.body.scrollHeight
++			);
++			offsetHeight = Math.max(
++				document.documentElement.offsetHeight,
++				document.body.offsetHeight
++			);
++
++			if (scrollHeight < offsetHeight) {
++				return $(window).height() + 'px';
++			} else {
++				return scrollHeight + 'px';
++			}
++		// handle "good" browsers
++		} else {
++			return $(document).height() + 'px';
++		}
++	},
++
++	width: function() {
++		var scrollWidth,
++			offsetWidth;
++		// handle IE
++		if ( $.browser.msie ) {
++			scrollWidth = Math.max(
++				document.documentElement.scrollWidth,
++				document.body.scrollWidth
++			);
++			offsetWidth = Math.max(
++				document.documentElement.offsetWidth,
++				document.body.offsetWidth
++			);
++
++			if (scrollWidth < offsetWidth) {
++				return $(window).width() + 'px';
++			} else {
++				return scrollWidth + 'px';
++			}
++		// handle "good" browsers
++		} else {
++			return $(document).width() + 'px';
++		}
++	},
++
++	resize: function() {
++		/* If the dialog is draggable and the user drags it past the
++		 * right edge of the window, the document becomes wider so we
++		 * need to stretch the overlay. If the user then drags the
++		 * dialog back to the left, the document will become narrower,
++		 * so we need to shrink the overlay to the appropriate size.
++		 * This is handled by shrinking the overlay before setting it
++		 * to the full document size.
++		 */
++		var $overlays = $([]);
++		$.each($.ui.dialog.overlay.instances, function() {
++			$overlays = $overlays.add(this);
++		});
++
++		$overlays.css({
++			width: 0,
++			height: 0
++		}).css({
++			width: $.ui.dialog.overlay.width(),
++			height: $.ui.dialog.overlay.height()
++		});
++	}
++});
++
++$.extend($.ui.dialog.overlay.prototype, {
++	destroy: function() {
++		$.ui.dialog.overlay.destroy(this.$el);
++	}
++});
++
++}(jQuery));
++/*
++ * jQuery UI Position 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Position
++ */
++(function( $, undefined ) {
++
++$.ui = $.ui || {};
++
++var horizontalPositions = /left|center|right/,
++	verticalPositions = /top|center|bottom/,
++	center = "center",
++	_position = $.fn.position,
++	_offset = $.fn.offset;
++
++$.fn.position = function( options ) {
++	if ( !options || !options.of ) {
++		return _position.apply( this, arguments );
++	}
++
++	// make a copy, we don't want to modify arguments
++	options = $.extend( {}, options );
++
++	var target = $( options.of ),
++		targetElem = target[0],
++		collision = ( options.collision || "flip" ).split( " " ),
++		offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ],
++		targetWidth,
++		targetHeight,
++		basePosition;
++
++	if ( targetElem.nodeType === 9 ) {
++		targetWidth = target.width();
++		targetHeight = target.height();
++		basePosition = { top: 0, left: 0 };
++	// TODO: use $.isWindow() in 1.9
++	} else if ( targetElem.setTimeout ) {
++		targetWidth = target.width();
++		targetHeight = target.height();
++		basePosition = { top: target.scrollTop(), left: target.scrollLeft() };
++	} else if ( targetElem.preventDefault ) {
++		// force left top to allow flipping
++		options.at = "left top";
++		targetWidth = targetHeight = 0;
++		basePosition = { top: options.of.pageY, left: options.of.pageX };
++	} else {
++		targetWidth = target.outerWidth();
++		targetHeight = target.outerHeight();
++		basePosition = target.offset();
++	}
++
++	// force my and at to have valid horizontal and veritcal positions
++	// if a value is missing or invalid, it will be converted to center 
++	$.each( [ "my", "at" ], function() {
++		var pos = ( options[this] || "" ).split( " " );
++		if ( pos.length === 1) {
++			pos = horizontalPositions.test( pos[0] ) ?
++				pos.concat( [center] ) :
++				verticalPositions.test( pos[0] ) ?
++					[ center ].concat( pos ) :
++					[ center, center ];
++		}
++		pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;
++		pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;
++		options[ this ] = pos;
++	});
++
++	// normalize collision option
++	if ( collision.length === 1 ) {
++		collision[ 1 ] = collision[ 0 ];
++	}
++
++	// normalize offset option
++	offset[ 0 ] = parseInt( offset[0], 10 ) || 0;
++	if ( offset.length === 1 ) {
++		offset[ 1 ] = offset[ 0 ];
++	}
++	offset[ 1 ] = parseInt( offset[1], 10 ) || 0;
++
++	if ( options.at[0] === "right" ) {
++		basePosition.left += targetWidth;
++	} else if ( options.at[0] === center ) {
++		basePosition.left += targetWidth / 2;
++	}
++
++	if ( options.at[1] === "bottom" ) {
++		basePosition.top += targetHeight;
++	} else if ( options.at[1] === center ) {
++		basePosition.top += targetHeight / 2;
++	}
++
++	basePosition.left += offset[ 0 ];
++	basePosition.top += offset[ 1 ];
++
++	return this.each(function() {
++		var elem = $( this ),
++			elemWidth = elem.outerWidth(),
++			elemHeight = elem.outerHeight(),
++			marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0,
++			marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0,
++			collisionWidth = elemWidth + marginLeft +
++				( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ),
++			collisionHeight = elemHeight + marginTop +
++				( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ),
++			position = $.extend( {}, basePosition ),
++			collisionPosition;
++
++		if ( options.my[0] === "right" ) {
++			position.left -= elemWidth;
++		} else if ( options.my[0] === center ) {
++			position.left -= elemWidth / 2;
++		}
++
++		if ( options.my[1] === "bottom" ) {
++			position.top -= elemHeight;
++		} else if ( options.my[1] === center ) {
++			position.top -= elemHeight / 2;
++		}
++
++		// prevent fractions (see #5280)
++		position.left = Math.round( position.left );
++		position.top = Math.round( position.top );
++
++		collisionPosition = {
++			left: position.left - marginLeft,
++			top: position.top - marginTop
++		};
++
++		$.each( [ "left", "top" ], function( i, dir ) {
++			if ( $.ui.position[ collision[i] ] ) {
++				$.ui.position[ collision[i] ][ dir ]( position, {
++					targetWidth: targetWidth,
++					targetHeight: targetHeight,
++					elemWidth: elemWidth,
++					elemHeight: elemHeight,
++					collisionPosition: collisionPosition,
++					collisionWidth: collisionWidth,
++					collisionHeight: collisionHeight,
++					offset: offset,
++					my: options.my,
++					at: options.at
++				});
++			}
++		});
++
++		if ( $.fn.bgiframe ) {
++			elem.bgiframe();
++		}
++		elem.offset( $.extend( position, { using: options.using } ) );
++	});
++};
++
++$.ui.position = {
++	fit: {
++		left: function( position, data ) {
++			var win = $( window ),
++				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();
++			position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );
++		},
++		top: function( position, data ) {
++			var win = $( window ),
++				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();
++			position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );
++		}
++	},
++
++	flip: {
++		left: function( position, data ) {
++			if ( data.at[0] === center ) {
++				return;
++			}
++			var win = $( window ),
++				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),
++				myOffset = data.my[ 0 ] === "left" ?
++					-data.elemWidth :
++					data.my[ 0 ] === "right" ?
++						data.elemWidth :
++						0,
++				atOffset = data.at[ 0 ] === "left" ?
++					data.targetWidth :
++					-data.targetWidth,
++				offset = -2 * data.offset[ 0 ];
++			position.left += data.collisionPosition.left < 0 ?
++				myOffset + atOffset + offset :
++				over > 0 ?
++					myOffset + atOffset + offset :
++					0;
++		},
++		top: function( position, data ) {
++			if ( data.at[1] === center ) {
++				return;
++			}
++			var win = $( window ),
++				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),
++				myOffset = data.my[ 1 ] === "top" ?
++					-data.elemHeight :
++					data.my[ 1 ] === "bottom" ?
++						data.elemHeight :
++						0,
++				atOffset = data.at[ 1 ] === "top" ?
++					data.targetHeight :
++					-data.targetHeight,
++				offset = -2 * data.offset[ 1 ];
++			position.top += data.collisionPosition.top < 0 ?
++				myOffset + atOffset + offset :
++				over > 0 ?
++					myOffset + atOffset + offset :
++					0;
++		}
++	}
++};
++
++// offset setter from jQuery 1.4
++if ( !$.offset.setOffset ) {
++	$.offset.setOffset = function( elem, options ) {
++		// set position first, in-case top/left are set even on static elem
++		if ( /static/.test( $.curCSS( elem, "position" ) ) ) {
++			elem.style.position = "relative";
++		}
++		var curElem   = $( elem ),
++			curOffset = curElem.offset(),
++			curTop    = parseInt( $.curCSS( elem, "top",  true ), 10 ) || 0,
++			curLeft   = parseInt( $.curCSS( elem, "left", true ), 10)  || 0,
++			props     = {
++				top:  (options.top  - curOffset.top)  + curTop,
++				left: (options.left - curOffset.left) + curLeft
++			};
++		
++		if ( 'using' in options ) {
++			options.using.call( elem, props );
++		} else {
++			curElem.css( props );
++		}
++	};
++
++	$.fn.offset = function( options ) {
++		var elem = this[ 0 ];
++		if ( !elem || !elem.ownerDocument ) { return null; }
++		if ( options ) { 
++			return this.each(function() {
++				$.offset.setOffset( this, options );
++			});
++		}
++		return _offset.call( this );
++	};
++}
++
++}( jQuery ));
++/*
++ * jQuery UI Progressbar 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Progressbar
++ *
++ * Depends:
++ *   jquery.ui.core.js
++ *   jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++$.widget( "ui.progressbar", {
++	options: {
++		value: 0,
++		max: 100
++	},
++
++	min: 0,
++
++	_create: function() {
++		this.element
++			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.attr({
++				role: "progressbar",
++				"aria-valuemin": this.min,
++				"aria-valuemax": this.options.max,
++				"aria-valuenow": this._value()
++			});
++
++		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
++			.appendTo( this.element );
++
++		this.oldValue = this._value();
++		this._refreshValue();
++	},
++
++	destroy: function() {
++		this.element
++			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++
++		this.valueDiv.remove();
++
++		$.Widget.prototype.destroy.apply( this, arguments );
++	},
++
++	value: function( newValue ) {
++		if ( newValue === undefined ) {
++			return this._value();
++		}
++
++		this._setOption( "value", newValue );
++		return this;
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "value" ) {
++			this.options.value = value;
++			this._refreshValue();
++			if ( this._value() === this.options.max ) {
++				this._trigger( "complete" );
++			}
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++	},
++
++	_value: function() {
++		var val = this.options.value;
++		// normalize invalid value
++		if ( typeof val !== "number" ) {
++			val = 0;
++		}
++		return Math.min( this.options.max, Math.max( this.min, val ) );
++	},
++
++	_percentage: function() {
++		return 100 * this._value() / this.options.max;
++	},
++
++	_refreshValue: function() {
++		var value = this.value();
++		var percentage = this._percentage();
++
++		if ( this.oldValue !== value ) {
++			this.oldValue = value;
++			this._trigger( "change" );
++		}
++
++		this.valueDiv
++			.toggle( value > this.min )
++			.toggleClass( "ui-corner-right", value === this.options.max )
++			.width( percentage.toFixed(0) + "%" );
++		this.element.attr( "aria-valuenow", value );
++	}
++});
++
++$.extend( $.ui.progressbar, {
++	version: "1.8.15"
++});
++
++})( jQuery );
++/*
++ * jQuery UI Slider 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Slider
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.mouse.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++// number of pages in a slider
++// (how many times can you page up/down to go through the whole range)
++var numPages = 5;
++
++$.widget( "ui.slider", $.ui.mouse, {
++
++	widgetEventPrefix: "slide",
++
++	options: {
++		animate: false,
++		distance: 0,
++		max: 100,
++		min: 0,
++		orientation: "horizontal",
++		range: false,
++		step: 1,
++		value: 0,
++		values: null
++	},
++
++	_create: function() {
++		var self = this,
++			o = this.options,
++			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
++			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
++			handleCount = ( o.values && o.values.length ) || 1,
++			handles = [];
++
++		this._keySliding = false;
++		this._mouseSliding = false;
++		this._animateOff = true;
++		this._handleIndex = null;
++		this._detectOrientation();
++		this._mouseInit();
++
++		this.element
++			.addClass( "ui-slider" +
++				" ui-slider-" + this.orientation +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" +
++				( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) );
++
++		this.range = $([]);
++
++		if ( o.range ) {
++			if ( o.range === true ) {
++				if ( !o.values ) {
++					o.values = [ this._valueMin(), this._valueMin() ];
++				}
++				if ( o.values.length && o.values.length !== 2 ) {
++					o.values = [ o.values[0], o.values[0] ];
++				}
++			}
++
++			this.range = $( "<div></div>" )
++				.appendTo( this.element )
++				.addClass( "ui-slider-range" +
++				// note: this isn't the most fittingly semantic framework class for this element,
++				// but worked best visually with a variety of themes
++				" ui-widget-header" + 
++				( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) );
++		}
++
++		for ( var i = existingHandles.length; i < handleCount; i += 1 ) {
++			handles.push( handle );
++		}
++
++		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) );
++
++		this.handle = this.handles.eq( 0 );
++
++		this.handles.add( this.range ).filter( "a" )
++			.click(function( event ) {
++				event.preventDefault();
++			})
++			.hover(function() {
++				if ( !o.disabled ) {
++					$( this ).addClass( "ui-state-hover" );
++				}
++			}, function() {
++				$( this ).removeClass( "ui-state-hover" );
++			})
++			.focus(function() {
++				if ( !o.disabled ) {
++					$( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" );
++					$( this ).addClass( "ui-state-focus" );
++				} else {
++					$( this ).blur();
++				}
++			})
++			.blur(function() {
++				$( this ).removeClass( "ui-state-focus" );
++			});
++
++		this.handles.each(function( i ) {
++			$( this ).data( "index.ui-slider-handle", i );
++		});
++
++		this.handles
++			.keydown(function( event ) {
++				var ret = true,
++					index = $( this ).data( "index.ui-slider-handle" ),
++					allowed,
++					curVal,
++					newVal,
++					step;
++	
++				if ( self.options.disabled ) {
++					return;
++				}
++	
++				switch ( event.keyCode ) {
++					case $.ui.keyCode.HOME:
++					case $.ui.keyCode.END:
++					case $.ui.keyCode.PAGE_UP:
++					case $.ui.keyCode.PAGE_DOWN:
++					case $.ui.keyCode.UP:
++					case $.ui.keyCode.RIGHT:
++					case $.ui.keyCode.DOWN:
++					case $.ui.keyCode.LEFT:
++						ret = false;
++						if ( !self._keySliding ) {
++							self._keySliding = true;
++							$( this ).addClass( "ui-state-active" );
++							allowed = self._start( event, index );
++							if ( allowed === false ) {
++								return;
++							}
++						}
++						break;
++				}
++	
++				step = self.options.step;
++				if ( self.options.values && self.options.values.length ) {
++					curVal = newVal = self.values( index );
++				} else {
++					curVal = newVal = self.value();
++				}
++	
++				switch ( event.keyCode ) {
++					case $.ui.keyCode.HOME:
++						newVal = self._valueMin();
++						break;
++					case $.ui.keyCode.END:
++						newVal = self._valueMax();
++						break;
++					case $.ui.keyCode.PAGE_UP:
++						newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) );
++						break;
++					case $.ui.keyCode.PAGE_DOWN:
++						newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) );
++						break;
++					case $.ui.keyCode.UP:
++					case $.ui.keyCode.RIGHT:
++						if ( curVal === self._valueMax() ) {
++							return;
++						}
++						newVal = self._trimAlignValue( curVal + step );
++						break;
++					case $.ui.keyCode.DOWN:
++					case $.ui.keyCode.LEFT:
++						if ( curVal === self._valueMin() ) {
++							return;
++						}
++						newVal = self._trimAlignValue( curVal - step );
++						break;
++				}
++	
++				self._slide( event, index, newVal );
++	
++				return ret;
++	
++			})
++			.keyup(function( event ) {
++				var index = $( this ).data( "index.ui-slider-handle" );
++	
++				if ( self._keySliding ) {
++					self._keySliding = false;
++					self._stop( event, index );
++					self._change( event, index );
++					$( this ).removeClass( "ui-state-active" );
++				}
++	
++			});
++
++		this._refreshValue();
++
++		this._animateOff = false;
++	},
++
++	destroy: function() {
++		this.handles.remove();
++		this.range.remove();
++
++		this.element
++			.removeClass( "ui-slider" +
++				" ui-slider-horizontal" +
++				" ui-slider-vertical" +
++				" ui-slider-disabled" +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" )
++			.removeData( "slider" )
++			.unbind( ".slider" );
++
++		this._mouseDestroy();
++
++		return this;
++	},
++
++	_mouseCapture: function( event ) {
++		var o = this.options,
++			position,
++			normValue,
++			distance,
++			closestHandle,
++			self,
++			index,
++			allowed,
++			offset,
++			mouseOverHandle;
++
++		if ( o.disabled ) {
++			return false;
++		}
++
++		this.elementSize = {
++			width: this.element.outerWidth(),
++			height: this.element.outerHeight()
++		};
++		this.elementOffset = this.element.offset();
++
++		position = { x: event.pageX, y: event.pageY };
++		normValue = this._normValueFromMouse( position );
++		distance = this._valueMax() - this._valueMin() + 1;
++		self = this;
++		this.handles.each(function( i ) {
++			var thisDistance = Math.abs( normValue - self.values(i) );
++			if ( distance > thisDistance ) {
++				distance = thisDistance;
++				closestHandle = $( this );
++				index = i;
++			}
++		});
++
++		// workaround for bug #3736 (if both handles of a range are at 0,
++		// the first is always used as the one with least distance,
++		// and moving it is obviously prevented by preventing negative ranges)
++		if( o.range === true && this.values(1) === o.min ) {
++			index += 1;
++			closestHandle = $( this.handles[index] );
++		}
++
++		allowed = this._start( event, index );
++		if ( allowed === false ) {
++			return false;
++		}
++		this._mouseSliding = true;
++
++		self._handleIndex = index;
++
++		closestHandle
++			.addClass( "ui-state-active" )
++			.focus();
++		
++		offset = closestHandle.offset();
++		mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" );
++		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
++			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
++			top: event.pageY - offset.top -
++				( closestHandle.height() / 2 ) -
++				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
++				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
++				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
++		};
++
++		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
++			this._slide( event, index, normValue );
++		}
++		this._animateOff = true;
++		return true;
++	},
++
++	_mouseStart: function( event ) {
++		return true;
++	},
++
++	_mouseDrag: function( event ) {
++		var position = { x: event.pageX, y: event.pageY },
++			normValue = this._normValueFromMouse( position );
++		
++		this._slide( event, this._handleIndex, normValue );
++
++		return false;
++	},
++
++	_mouseStop: function( event ) {
++		this.handles.removeClass( "ui-state-active" );
++		this._mouseSliding = false;
++
++		this._stop( event, this._handleIndex );
++		this._change( event, this._handleIndex );
++
++		this._handleIndex = null;
++		this._clickOffset = null;
++		this._animateOff = false;
++
++		return false;
++	},
++	
++	_detectOrientation: function() {
++		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
++	},
++
++	_normValueFromMouse: function( position ) {
++		var pixelTotal,
++			pixelMouse,
++			percentMouse,
++			valueTotal,
++			valueMouse;
++
++		if ( this.orientation === "horizontal" ) {
++			pixelTotal = this.elementSize.width;
++			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
++		} else {
++			pixelTotal = this.elementSize.height;
++			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
++		}
++
++		percentMouse = ( pixelMouse / pixelTotal );
++		if ( percentMouse > 1 ) {
++			percentMouse = 1;
++		}
++		if ( percentMouse < 0 ) {
++			percentMouse = 0;
++		}
++		if ( this.orientation === "vertical" ) {
++			percentMouse = 1 - percentMouse;
++		}
++
++		valueTotal = this._valueMax() - this._valueMin();
++		valueMouse = this._valueMin() + percentMouse * valueTotal;
++
++		return this._trimAlignValue( valueMouse );
++	},
++
++	_start: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++		return this._trigger( "start", event, uiHash );
++	},
++
++	_slide: function( event, index, newVal ) {
++		var otherVal,
++			newValues,
++			allowed;
++
++		if ( this.options.values && this.options.values.length ) {
++			otherVal = this.values( index ? 0 : 1 );
++
++			if ( ( this.options.values.length === 2 && this.options.range === true ) && 
++					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
++				) {
++				newVal = otherVal;
++			}
++
++			if ( newVal !== this.values( index ) ) {
++				newValues = this.values();
++				newValues[ index ] = newVal;
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal,
++					values: newValues
++				} );
++				otherVal = this.values( index ? 0 : 1 );
++				if ( allowed !== false ) {
++					this.values( index, newVal, true );
++				}
++			}
++		} else {
++			if ( newVal !== this.value() ) {
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal
++				} );
++				if ( allowed !== false ) {
++					this.value( newVal );
++				}
++			}
++		}
++	},
++
++	_stop: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++
++		this._trigger( "stop", event, uiHash );
++	},
++
++	_change: function( event, index ) {
++		if ( !this._keySliding && !this._mouseSliding ) {
++			var uiHash = {
++				handle: this.handles[ index ],
++				value: this.value()
++			};
++			if ( this.options.values && this.options.values.length ) {
++				uiHash.value = this.values( index );
++				uiHash.values = this.values();
++			}
++
++			this._trigger( "change", event, uiHash );
++		}
++	},
++
++	value: function( newValue ) {
++		if ( arguments.length ) {
++			this.options.value = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, 0 );
++			return;
++		}
++
++		return this._value();
++	},
++
++	values: function( index, newValue ) {
++		var vals,
++			newValues,
++			i;
++
++		if ( arguments.length > 1 ) {
++			this.options.values[ index ] = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, index );
++			return;
++		}
++
++		if ( arguments.length ) {
++			if ( $.isArray( arguments[ 0 ] ) ) {
++				vals = this.options.values;
++				newValues = arguments[ 0 ];
++				for ( i = 0; i < vals.length; i += 1 ) {
++					vals[ i ] = this._trimAlignValue( newValues[ i ] );
++					this._change( null, i );
++				}
++				this._refreshValue();
++			} else {
++				if ( this.options.values && this.options.values.length ) {
++					return this._values( index );
++				} else {
++					return this.value();
++				}
++			}
++		} else {
++			return this._values();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var i,
++			valsLength = 0;
++
++		if ( $.isArray( this.options.values ) ) {
++			valsLength = this.options.values.length;
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++
++		switch ( key ) {
++			case "disabled":
++				if ( value ) {
++					this.handles.filter( ".ui-state-focus" ).blur();
++					this.handles.removeClass( "ui-state-hover" );
++					this.handles.propAttr( "disabled", true );
++					this.element.addClass( "ui-disabled" );
++				} else {
++					this.handles.propAttr( "disabled", false );
++					this.element.removeClass( "ui-disabled" );
++				}
++				break;
++			case "orientation":
++				this._detectOrientation();
++				this.element
++					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
++					.addClass( "ui-slider-" + this.orientation );
++				this._refreshValue();
++				break;
++			case "value":
++				this._animateOff = true;
++				this._refreshValue();
++				this._change( null, 0 );
++				this._animateOff = false;
++				break;
++			case "values":
++				this._animateOff = true;
++				this._refreshValue();
++				for ( i = 0; i < valsLength; i += 1 ) {
++					this._change( null, i );
++				}
++				this._animateOff = false;
++				break;
++		}
++	},
++
++	//internal value getter
++	// _value() returns value trimmed by min and max, aligned by step
++	_value: function() {
++		var val = this.options.value;
++		val = this._trimAlignValue( val );
++
++		return val;
++	},
++
++	//internal values getter
++	// _values() returns array of values trimmed by min and max, aligned by step
++	// _values( index ) returns single value trimmed by min and max, aligned by step
++	_values: function( index ) {
++		var val,
++			vals,
++			i;
++
++		if ( arguments.length ) {
++			val = this.options.values[ index ];
++			val = this._trimAlignValue( val );
++
++			return val;
++		} else {
++			// .slice() creates a copy of the array
++			// this copy gets trimmed by min and max and then returned
++			vals = this.options.values.slice();
++			for ( i = 0; i < vals.length; i+= 1) {
++				vals[ i ] = this._trimAlignValue( vals[ i ] );
++			}
++
++			return vals;
++		}
++	},
++	
++	// returns the step-aligned value that val is closest to, between (inclusive) min and max
++	_trimAlignValue: function( val ) {
++		if ( val <= this._valueMin() ) {
++			return this._valueMin();
++		}
++		if ( val >= this._valueMax() ) {
++			return this._valueMax();
++		}
++		var step = ( this.options.step > 0 ) ? this.options.step : 1,
++			valModStep = (val - this._valueMin()) % step,
++			alignValue = val - valModStep;
++
++		if ( Math.abs(valModStep) * 2 >= step ) {
++			alignValue += ( valModStep > 0 ) ? step : ( -step );
++		}
++
++		// Since JavaScript has problems with large floats, round
++		// the final value to 5 digits after the decimal point (see #4124)
++		return parseFloat( alignValue.toFixed(5) );
++	},
++
++	_valueMin: function() {
++		return this.options.min;
++	},
++
++	_valueMax: function() {
++		return this.options.max;
++	},
++	
++	_refreshValue: function() {
++		var oRange = this.options.range,
++			o = this.options,
++			self = this,
++			animate = ( !this._animateOff ) ? o.animate : false,
++			valPercent,
++			_set = {},
++			lastValPercent,
++			value,
++			valueMin,
++			valueMax;
++
++		if ( this.options.values && this.options.values.length ) {
++			this.handles.each(function( i, j ) {
++				valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100;
++				_set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++				if ( self.options.range === true ) {
++					if ( self.orientation === "horizontal" ) {
++						if ( i === 0 ) {
++							self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					} else {
++						if ( i === 0 ) {
++							self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					}
++				}
++				lastValPercent = valPercent;
++			});
++		} else {
++			value = this.value();
++			valueMin = this._valueMin();
++			valueMax = this._valueMax();
++			valPercent = ( valueMax !== valueMin ) ?
++					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
++					0;
++			_set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++
++			if ( oRange === "min" && this.orientation === "horizontal" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "horizontal" ) {
++				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++			if ( oRange === "min" && this.orientation === "vertical" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "vertical" ) {
++				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++		}
++	}
++
++});
++
++$.extend( $.ui.slider, {
++	version: "1.8.15"
++});
++
++}(jQuery));
++/*
++ * jQuery UI Tabs 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI/Tabs
++ *
++ * Depends:
++ *	jquery.ui.core.js
++ *	jquery.ui.widget.js
++ */
++(function( $, undefined ) {
++
++var tabId = 0,
++	listId = 0;
++
++function getNextTabId() {
++	return ++tabId;
++}
++
++function getNextListId() {
++	return ++listId;
++}
++
++$.widget( "ui.tabs", {
++	options: {
++		add: null,
++		ajaxOptions: null,
++		cache: false,
++		cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
++		collapsible: false,
++		disable: null,
++		disabled: [],
++		enable: null,
++		event: "click",
++		fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
++		idPrefix: "ui-tabs-",
++		load: null,
++		panelTemplate: "<div></div>",
++		remove: null,
++		select: null,
++		show: null,
++		spinner: "<em>Loading&#8230;</em>",
++		tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
++	},
++
++	_create: function() {
++		this._tabify( true );
++	},
++
++	_setOption: function( key, value ) {
++		if ( key == "selected" ) {
++			if (this.options.collapsible && value == this.options.selected ) {
++				return;
++			}
++			this.select( value );
++		} else {
++			this.options[ key ] = value;
++			this._tabify();
++		}
++	},
++
++	_tabId: function( a ) {
++		return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
++			this.options.idPrefix + getNextTabId();
++	},
++
++	_sanitizeSelector: function( hash ) {
++		// we need this because an id may contain a ":"
++		return hash.replace( /:/g, "\\:" );
++	},
++
++	_cookie: function() {
++		var cookie = this.cookie ||
++			( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() );
++		return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );
++	},
++
++	_ui: function( tab, panel ) {
++		return {
++			tab: tab,
++			panel: panel,
++			index: this.anchors.index( tab )
++		};
++	},
++
++	_cleanup: function() {
++		// restore all former loading tabs labels
++		this.lis.filter( ".ui-state-processing" )
++			.removeClass( "ui-state-processing" )
++			.find( "span:data(label.tabs)" )
++				.each(function() {
++					var el = $( this );
++					el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" );
++				});
++	},
++
++	_tabify: function( init ) {
++		var self = this,
++			o = this.options,
++			fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
++
++		this.list = this.element.find( "ol,ul" ).eq( 0 );
++		this.lis = $( " > li:has(a[href])", this.list );
++		this.anchors = this.lis.map(function() {
++			return $( "a", this )[ 0 ];
++		});
++		this.panels = $( [] );
++
++		this.anchors.each(function( i, a ) {
++			var href = $( a ).attr( "href" );
++			// For dynamically created HTML that contains a hash as href IE < 8 expands
++			// such href to the full page url with hash and then misinterprets tab as ajax.
++			// Same consideration applies for an added tab with a fragment identifier
++			// since a[href=#fragment-identifier] does unexpectedly not match.
++			// Thus normalize href attribute...
++			var hrefBase = href.split( "#" )[ 0 ],
++				baseEl;
++			if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] ||
++					( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) {
++				href = a.hash;
++				a.href = href;
++			}
++
++			// inline tab
++			if ( fragmentId.test( href ) ) {
++				self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) );
++			// remote tab
++			// prevent loading the page itself if href is just "#"
++			} else if ( href && href !== "#" ) {
++				// required for restore on destroy
++				$.data( a, "href.tabs", href );
++
++				// TODO until #3808 is fixed strip fragment identifier from url
++				// (IE fails to load from such url)
++				$.data( a, "load.tabs", href.replace( /#.*$/, "" ) );
++
++				var id = self._tabId( a );
++				a.href = "#" + id;
++				var $panel = self.element.find( "#" + id );
++				if ( !$panel.length ) {
++					$panel = $( o.panelTemplate )
++						.attr( "id", id )
++						.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++						.insertAfter( self.panels[ i - 1 ] || self.list );
++					$panel.data( "destroy.tabs", true );
++				}
++				self.panels = self.panels.add( $panel );
++			// invalid tab href
++			} else {
++				o.disabled.push( i );
++			}
++		});
++
++		// initialization from scratch
++		if ( init ) {
++			// attach necessary classes for styling
++			this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" );
++			this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
++			this.lis.addClass( "ui-state-default ui-corner-top" );
++			this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" );
++
++			// Selected tab
++			// use "selected" option or try to retrieve:
++			// 1. from fragment identifier in url
++			// 2. from cookie
++			// 3. from selected class attribute on <li>
++			if ( o.selected === undefined ) {
++				if ( location.hash ) {
++					this.anchors.each(function( i, a ) {
++						if ( a.hash == location.hash ) {
++							o.selected = i;
++							return false;
++						}
++					});
++				}
++				if ( typeof o.selected !== "number" && o.cookie ) {
++					o.selected = parseInt( self._cookie(), 10 );
++				}
++				if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) {
++					o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
++				}
++				o.selected = o.selected || ( this.lis.length ? 0 : -1 );
++			} else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release
++				o.selected = -1;
++			}
++
++			// sanity check - default to first tab...
++			o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 )
++				? o.selected
++				: 0;
++
++			// Take disabling tabs via class attribute from HTML
++			// into account and update option properly.
++			// A selected tab cannot become disabled.
++			o.disabled = $.unique( o.disabled.concat(
++				$.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) {
++					return self.lis.index( n );
++				})
++			) ).sort();
++
++			if ( $.inArray( o.selected, o.disabled ) != -1 ) {
++				o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 );
++			}
++
++			// highlight selected tab
++			this.panels.addClass( "ui-tabs-hide" );
++			this.lis.removeClass( "ui-tabs-selected ui-state-active" );
++			// check for length avoids error when initializing empty list
++			if ( o.selected >= 0 && this.anchors.length ) {
++				self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
++				this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );
++
++				// seems to be expected behavior that the show callback is fired
++				self.element.queue( "tabs", function() {
++					self._trigger( "show", null,
++						self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) );
++				});
++
++				this.load( o.selected );
++			}
++
++			// clean up to avoid memory leaks in certain versions of IE 6
++			// TODO: namespace this event
++			$( window ).bind( "unload", function() {
++				self.lis.add( self.anchors ).unbind( ".tabs" );
++				self.lis = self.anchors = self.panels = null;
++			});
++		// update selected after add/remove
++		} else {
++			o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
++		}
++
++		// update collapsible
++		// TODO: use .toggleClass()
++		this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" );
++
++		// set or update cookie after init and add/remove respectively
++		if ( o.cookie ) {
++			this._cookie( o.selected, o.cookie );
++		}
++
++		// disable tabs
++		for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
++			$( li )[ $.inArray( i, o.disabled ) != -1 &&
++				// TODO: use .toggleClass()
++				!$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" );
++		}
++
++		// reset cache if switching from cached to not cached
++		if ( o.cache === false ) {
++			this.anchors.removeData( "cache.tabs" );
++		}
++
++		// remove all handlers before, tabify may run on existing tabs after add or option change
++		this.lis.add( this.anchors ).unbind( ".tabs" );
++
++		if ( o.event !== "mouseover" ) {
++			var addState = function( state, el ) {
++				if ( el.is( ":not(.ui-state-disabled)" ) ) {
++					el.addClass( "ui-state-" + state );
++				}
++			};
++			var removeState = function( state, el ) {
++				el.removeClass( "ui-state-" + state );
++			};
++			this.lis.bind( "mouseover.tabs" , function() {
++				addState( "hover", $( this ) );
++			});
++			this.lis.bind( "mouseout.tabs", function() {
++				removeState( "hover", $( this ) );
++			});
++			this.anchors.bind( "focus.tabs", function() {
++				addState( "focus", $( this ).closest( "li" ) );
++			});
++			this.anchors.bind( "blur.tabs", function() {
++				removeState( "focus", $( this ).closest( "li" ) );
++			});
++		}
++
++		// set up animations
++		var hideFx, showFx;
++		if ( o.fx ) {
++			if ( $.isArray( o.fx ) ) {
++				hideFx = o.fx[ 0 ];
++				showFx = o.fx[ 1 ];
++			} else {
++				hideFx = showFx = o.fx;
++			}
++		}
++
++		// Reset certain styles left over from animation
++		// and prevent IE's ClearType bug...
++		function resetStyle( $el, fx ) {
++			$el.css( "display", "" );
++			if ( !$.support.opacity && fx.opacity ) {
++				$el[ 0 ].style.removeAttribute( "filter" );
++			}
++		}
++
++		// Show a tab...
++		var showTab = showFx
++			? function( clicked, $show ) {
++				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
++				$show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way
++					.animate( showFx, showFx.duration || "normal", function() {
++						resetStyle( $show, showFx );
++						self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
++					});
++			}
++			: function( clicked, $show ) {
++				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
++				$show.removeClass( "ui-tabs-hide" );
++				self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
++			};
++
++		// Hide a tab, $show is optional...
++		var hideTab = hideFx
++			? function( clicked, $hide ) {
++				$hide.animate( hideFx, hideFx.duration || "normal", function() {
++					self.lis.removeClass( "ui-tabs-selected ui-state-active" );
++					$hide.addClass( "ui-tabs-hide" );
++					resetStyle( $hide, hideFx );
++					self.element.dequeue( "tabs" );
++				});
++			}
++			: function( clicked, $hide, $show ) {
++				self.lis.removeClass( "ui-tabs-selected ui-state-active" );
++				$hide.addClass( "ui-tabs-hide" );
++				self.element.dequeue( "tabs" );
++			};
++
++		// attach tab event handler, unbind to avoid duplicates from former tabifying...
++		this.anchors.bind( o.event + ".tabs", function() {
++			var el = this,
++				$li = $(el).closest( "li" ),
++				$hide = self.panels.filter( ":not(.ui-tabs-hide)" ),
++				$show = self.element.find( self._sanitizeSelector( el.hash ) );
++
++			// If tab is already selected and not collapsible or tab disabled or
++			// or is already loading or click callback returns false stop here.
++			// Check if click handler returns false last so that it is not executed
++			// for a disabled or loading tab!
++			if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) ||
++				$li.hasClass( "ui-state-disabled" ) ||
++				$li.hasClass( "ui-state-processing" ) ||
++				self.panels.filter( ":animated" ).length ||
++				self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) {
++				this.blur();
++				return false;
++			}
++
++			o.selected = self.anchors.index( this );
++
++			self.abort();
++
++			// if tab may be closed
++			if ( o.collapsible ) {
++				if ( $li.hasClass( "ui-tabs-selected" ) ) {
++					o.selected = -1;
++
++					if ( o.cookie ) {
++						self._cookie( o.selected, o.cookie );
++					}
++
++					self.element.queue( "tabs", function() {
++						hideTab( el, $hide );
++					}).dequeue( "tabs" );
++
++					this.blur();
++					return false;
++				} else if ( !$hide.length ) {
++					if ( o.cookie ) {
++						self._cookie( o.selected, o.cookie );
++					}
++
++					self.element.queue( "tabs", function() {
++						showTab( el, $show );
++					});
++
++					// TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
++					self.load( self.anchors.index( this ) );
++
++					this.blur();
++					return false;
++				}
++			}
++
++			if ( o.cookie ) {
++				self._cookie( o.selected, o.cookie );
++			}
++
++			// show new tab
++			if ( $show.length ) {
++				if ( $hide.length ) {
++					self.element.queue( "tabs", function() {
++						hideTab( el, $hide );
++					});
++				}
++				self.element.queue( "tabs", function() {
++					showTab( el, $show );
++				});
++
++				self.load( self.anchors.index( this ) );
++			} else {
++				throw "jQuery UI Tabs: Mismatching fragment identifier.";
++			}
++
++			// Prevent IE from keeping other link focussed when using the back button
++			// and remove dotted border from clicked link. This is controlled via CSS
++			// in modern browsers; blur() removes focus from address bar in Firefox
++			// which can become a usability and annoying problem with tabs('rotate').
++			if ( $.browser.msie ) {
++				this.blur();
++			}
++		});
++
++		// disable click in any case
++		this.anchors.bind( "click.tabs", function(){
++			return false;
++		});
++	},
++
++    _getIndex: function( index ) {
++		// meta-function to give users option to provide a href string instead of a numerical index.
++		// also sanitizes numerical indexes to valid values.
++		if ( typeof index == "string" ) {
++			index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) );
++		}
++
++		return index;
++	},
++
++	destroy: function() {
++		var o = this.options;
++
++		this.abort();
++
++		this.element
++			.unbind( ".tabs" )
++			.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" )
++			.removeData( "tabs" );
++
++		this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
++
++		this.anchors.each(function() {
++			var href = $.data( this, "href.tabs" );
++			if ( href ) {
++				this.href = href;
++			}
++			var $this = $( this ).unbind( ".tabs" );
++			$.each( [ "href", "load", "cache" ], function( i, prefix ) {
++				$this.removeData( prefix + ".tabs" );
++			});
++		});
++
++		this.lis.unbind( ".tabs" ).add( this.panels ).each(function() {
++			if ( $.data( this, "destroy.tabs" ) ) {
++				$( this ).remove();
++			} else {
++				$( this ).removeClass([
++					"ui-state-default",
++					"ui-corner-top",
++					"ui-tabs-selected",
++					"ui-state-active",
++					"ui-state-hover",
++					"ui-state-focus",
++					"ui-state-disabled",
++					"ui-tabs-panel",
++					"ui-widget-content",
++					"ui-corner-bottom",
++					"ui-tabs-hide"
++				].join( " " ) );
++			}
++		});
++
++		if ( o.cookie ) {
++			this._cookie( null, o.cookie );
++		}
++
++		return this;
++	},
++
++	add: function( url, label, index ) {
++		if ( index === undefined ) {
++			index = this.anchors.length;
++		}
++
++		var self = this,
++			o = this.options,
++			$li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ),
++			id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] );
++
++		$li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true );
++
++		// try to find an existing element before creating a new one
++		var $panel = self.element.find( "#" + id );
++		if ( !$panel.length ) {
++			$panel = $( o.panelTemplate )
++				.attr( "id", id )
++				.data( "destroy.tabs", true );
++		}
++		$panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );
++
++		if ( index >= this.lis.length ) {
++			$li.appendTo( this.list );
++			$panel.appendTo( this.list[ 0 ].parentNode );
++		} else {
++			$li.insertBefore( this.lis[ index ] );
++			$panel.insertBefore( this.panels[ index ] );
++		}
++
++		o.disabled = $.map( o.disabled, function( n, i ) {
++			return n >= index ? ++n : n;
++		});
++
++		this._tabify();
++
++		if ( this.anchors.length == 1 ) {
++			o.selected = 0;
++			$li.addClass( "ui-tabs-selected ui-state-active" );
++			$panel.removeClass( "ui-tabs-hide" );
++			this.element.queue( "tabs", function() {
++				self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) );
++			});
++
++			this.load( 0 );
++		}
++
++		this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
++		return this;
++	},
++
++	remove: function( index ) {
++		index = this._getIndex( index );
++		var o = this.options,
++			$li = this.lis.eq( index ).remove(),
++			$panel = this.panels.eq( index ).remove();
++
++		// If selected tab was removed focus tab to the right or
++		// in case the last tab was removed the tab to the left.
++		if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) {
++			this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );
++		}
++
++		o.disabled = $.map(
++			$.grep( o.disabled, function(n, i) {
++				return n != index;
++			}),
++			function( n, i ) {
++				return n >= index ? --n : n;
++			});
++
++		this._tabify();
++
++		this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) );
++		return this;
++	},
++
++	enable: function( index ) {
++		index = this._getIndex( index );
++		var o = this.options;
++		if ( $.inArray( index, o.disabled ) == -1 ) {
++			return;
++		}
++
++		this.lis.eq( index ).removeClass( "ui-state-disabled" );
++		o.disabled = $.grep( o.disabled, function( n, i ) {
++			return n != index;
++		});
++
++		this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
++		return this;
++	},
++
++	disable: function( index ) {
++		index = this._getIndex( index );
++		var self = this, o = this.options;
++		// cannot disable already selected tab
++		if ( index != o.selected ) {
++			this.lis.eq( index ).addClass( "ui-state-disabled" );
++
++			o.disabled.push( index );
++			o.disabled.sort();
++
++			this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
++		}
++
++		return this;
++	},
++
++	select: function( index ) {
++		index = this._getIndex( index );
++		if ( index == -1 ) {
++			if ( this.options.collapsible && this.options.selected != -1 ) {
++				index = this.options.selected;
++			} else {
++				return this;
++			}
++		}
++		this.anchors.eq( index ).trigger( this.options.event + ".tabs" );
++		return this;
++	},
++
++	load: function( index ) {
++		index = this._getIndex( index );
++		var self = this,
++			o = this.options,
++			a = this.anchors.eq( index )[ 0 ],
++			url = $.data( a, "load.tabs" );
++
++		this.abort();
++
++		// not remote or from cache
++		if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) {
++			this.element.dequeue( "tabs" );
++			return;
++		}
++
++		// load remote from here on
++		this.lis.eq( index ).addClass( "ui-state-processing" );
++
++		if ( o.spinner ) {
++			var span = $( "span", a );
++			span.data( "label.tabs", span.html() ).html( o.spinner );
++		}
++
++		this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {
++			url: url,
++			success: function( r, s ) {
++				self.element.find( self._sanitizeSelector( a.hash ) ).html( r );
++
++				// take care of tab labels
++				self._cleanup();
++
++				if ( o.cache ) {
++					$.data( a, "cache.tabs", true );
++				}
++
++				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
++				try {
++					o.ajaxOptions.success( r, s );
++				}
++				catch ( e ) {}
++			},
++			error: function( xhr, s, e ) {
++				// take care of tab labels
++				self._cleanup();
++
++				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
++				try {
++					// Passing index avoid a race condition when this method is
++					// called after the user has selected another tab.
++					// Pass the anchor that initiated this request allows
++					// loadError to manipulate the tab content panel via $(a.hash)
++					o.ajaxOptions.error( xhr, s, index, a );
++				}
++				catch ( e ) {}
++			}
++		} ) );
++
++		// last, so that load event is fired before show...
++		self.element.dequeue( "tabs" );
++
++		return this;
++	},
++
++	abort: function() {
++		// stop possibly running animations
++		this.element.queue( [] );
++		this.panels.stop( false, true );
++
++		// "tabs" queue must not contain more than two elements,
++		// which are the callbacks for the latest clicked tab...
++		this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) );
++
++		// terminate pending requests from other tabs
++		if ( this.xhr ) {
++			this.xhr.abort();
++			delete this.xhr;
++		}
++
++		// take care of tab labels
++		this._cleanup();
++		return this;
++	},
++
++	url: function( index, url ) {
++		this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url );
++		return this;
++	},
++
++	length: function() {
++		return this.anchors.length;
++	}
++});
++
++$.extend( $.ui.tabs, {
++	version: "1.8.15"
++});
++
++/*
++ * Tabs Extensions
++ */
++
++/*
++ * Rotate
++ */
++$.extend( $.ui.tabs.prototype, {
++	rotation: null,
++	rotate: function( ms, continuing ) {
++		var self = this,
++			o = this.options;
++
++		var rotate = self._rotate || ( self._rotate = function( e ) {
++			clearTimeout( self.rotation );
++			self.rotation = setTimeout(function() {
++				var t = o.selected;
++				self.select( ++t < self.anchors.length ? t : 0 );
++			}, ms );
++			
++			if ( e ) {
++				e.stopPropagation();
++			}
++		});
++
++		var stop = self._unrotate || ( self._unrotate = !continuing
++			? function(e) {
++				if (e.clientX) { // in case of a true click
++					self.rotate(null);
++				}
++			}
++			: function( e ) {
++				t = o.selected;
++				rotate();
++			});
++
++		// start rotation
++		if ( ms ) {
++			this.element.bind( "tabsshow", rotate );
++			this.anchors.bind( o.event + ".tabs", stop );
++			rotate();
++		// stop rotation
++		} else {
++			clearTimeout( self.rotation );
++			this.element.unbind( "tabsshow", rotate );
++			this.anchors.unbind( o.event + ".tabs", stop );
++			delete this._rotate;
++			delete this._unrotate;
++		}
++
++		return this;
++	}
++});
++
++})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.min.js	(revision 15487)
+@@ -0,0 +1,413 @@
++/*!
++ * jQuery UI 1.8.15
++ *
++ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * http://docs.jquery.com/UI
++ */
++(function(a,c){function d(h,g){var i=h.nodeName.toLowerCase();if("area"===i){g=h.parentNode;i=g.name;if(!h.href||!i||g.nodeName.toLowerCase()!=="map")return false;h=a("img[usemap=#"+i+"]")[0];return!!h&&e(h)}return(/input|select|textarea|button|object/.test(i)?!h.disabled:"a"==i?h.href||g:g)&&e(h)}function e(h){return!a(h).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.8.15",
++keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(h,g){return typeof h==="number"?this.each(function(){var i=
++this;setTimeout(function(){a(i).focus();g&&g.call(i)},h)}):this._focus.apply(this,arguments)},scrollParent:function(){var h;h=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,
++"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!h.length?a(document):h},zIndex:function(h){if(h!==c)return this.css("zIndex",h);if(this.length){h=a(this[0]);for(var g;h.length&&h[0]!==document;){g=h.css("position");if(g==="absolute"||g==="relative"||g==="fixed"){g=parseInt(h.css("zIndex"),10);if(!isNaN(g)&&g!==0)return g}h=h.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":
++"mousedown")+".ui-disableSelection",function(h){h.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(h,g){function i(l,o,n,k){a.each(b,function(){o-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(n)o-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(k)o-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return o}var b=g==="Width"?["Left","Right"]:["Top","Bottom"],f=g.toLowerCase(),j={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,
++outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+g]=function(l){if(l===c)return j["inner"+g].call(this);return this.each(function(){a(this).css(f,i(this,l)+"px")})};a.fn["outer"+g]=function(l,o){if(typeof l!=="number")return j["outer"+g].call(this,l);return this.each(function(){a(this).css(f,i(this,l,true,o)+"px")})}});a.extend(a.expr[":"],{data:function(h,g,i){return!!a.data(h,i[3])},focusable:function(h){return d(h,!isNaN(a.attr(h,"tabindex")))},tabbable:function(h){var g=a.attr(h,
++"tabindex"),i=isNaN(g);return(i||g>=0)&&d(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&&
++h.element[0].parentNode)for(var b=0;b<g.length;b++)h.options[g[b][0]]&&g[b][1].apply(h.element,i)}},contains:function(h,g){return document.compareDocumentPosition?h.compareDocumentPosition(g)&16:h!==g&&h.contains(g)},hasScroll:function(h,g){if(a(h).css("overflow")==="hidden")return false;g=g&&g==="left"?"scrollLeft":"scrollTop";var i=false;if(h[g]>0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h<g+i},isOver:function(h,g,i,b,f,j){return a.ui.isOverAxis(h,i,f)&&
++a.ui.isOverAxis(g,b,j)}})}})(jQuery);
++(function(a,c){if(a.cleanData){var d=a.cleanData;a.cleanData=function(h){for(var g=0,i;(i=h[g])!=null;g++)a(i).triggerHandler("remove");d(h)}}else{var e=a.fn.remove;a.fn.remove=function(h,g){return this.each(function(){if(!g)if(!h||a.filter(h,[this]).length)a("*",this).add([this]).each(function(){a(this).triggerHandler("remove")});return e.call(a(this),h,g)})}}a.widget=function(h,g,i){var b=h.split(".")[0],f;h=h.split(".")[1];f=b+"-"+h;if(!i){i=g;g=a.Widget}a.expr[":"][f]=function(j){return!!a.data(j,
++h)};a[b]=a[b]||{};a[b][h]=function(j,l){arguments.length&&this._createWidget(j,l)};g=new g;g.options=a.extend(true,{},g.options);a[b][h].prototype=a.extend(true,g,{namespace:b,widgetName:h,widgetEventPrefix:a[b][h].prototype.widgetEventPrefix||h,widgetBaseClass:f},i);a.widget.bridge(h,a[b][h])};a.widget.bridge=function(h,g){a.fn[h]=function(i){var b=typeof i==="string",f=Array.prototype.slice.call(arguments,1),j=this;i=!b&&f.length?a.extend.apply(null,[true,i].concat(f)):i;if(b&&i.charAt(0)==="_")return j;
++b?this.each(function(){var l=a.data(this,h),o=l&&a.isFunction(l[i])?l[i].apply(l,f):l;if(o!==l&&o!==c){j=o;return false}}):this.each(function(){var l=a.data(this,h);l?l.option(i||{})._init():a.data(this,h,new g(i,this))});return j}};a.Widget=function(h,g){arguments.length&&this._createWidget(h,g)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(h,g){a.data(g,this.widgetName,this);this.element=a(g);this.options=a.extend(true,{},this.options,
++this._getCreateOptions(),h);var i=this;this.element.bind("remove."+this.widgetName,function(){i.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
++widget:function(){return this.element},option:function(h,g){var i=h;if(arguments.length===0)return a.extend({},this.options);if(typeof h==="string"){if(g===c)return this.options[h];i={};i[h]=g}this._setOptions(i);return this},_setOptions:function(h){var g=this;a.each(h,function(i,b){g._setOption(i,b)});return this},_setOption:function(h,g){this.options[h]=g;if(h==="disabled")this.widget()[g?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",g);return this},
++enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(h,g,i){var b=this.options[h];g=a.Event(g);g.type=(h===this.widgetEventPrefix?h:this.widgetEventPrefix+h).toLowerCase();i=i||{};if(g.originalEvent){h=a.event.props.length;for(var f;h;){f=a.event.props[--h];g[f]=g.originalEvent[f]}}this.element.trigger(g,i);return!(a.isFunction(b)&&b.call(this.element[0],g,i)===false||g.isDefaultPrevented())}}})(jQuery);
++(function(a){a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(d){return c._mouseDown(d)}).bind("click."+this.widgetName,function(d){if(true===a.data(d.target,c.widgetName+".preventClickEvent")){a.removeData(d.target,c.widgetName+".preventClickEvent");d.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(c){c.originalEvent=
++c.originalEvent||{};if(!c.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var d=this,e=c.which==1,h=typeof this.options.cancel=="string"?a(c.target).closest(this.options.cancel).length:false;if(!e||h||!this._mouseCapture(c))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)){this._mouseStarted=this._mouseStart(c)!==
++false;if(!this._mouseStarted){c.preventDefault();return true}}true===a.data(c.target,this.widgetName+".preventClickEvent")&&a.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(g){return d._mouseMove(g)};this._mouseUpDelegate=function(g){return d._mouseUp(g)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return c.originalEvent.mouseHandled=true}},_mouseMove:function(c){if(a.browser.msie&&
++!(document.documentMode>=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
++false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
++(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
++"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(c){var d=
++this.options;if(this.helper||d.disabled||a(c.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(c);if(!this.handle)return false;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(c){var d=this.options;this.helper=
++this._createHelper(c);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:c.pageX-this.offset.left,top:c.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
++this.originalPosition=this.position=this._generatePosition(c);this.originalPageX=c.pageX;this.originalPageY=c.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);d.containment&&this._setContainment();if(this._trigger("start",c)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,c);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(c,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,c);return true},
++_mouseDrag:function(c,d){this.position=this._generatePosition(c);this.positionAbs=this._convertPositionTo("absolute");if(!d){d=this._uiHash();if(this._trigger("drag",c,d)===false){this._mouseUp({});return false}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,c);return false},_mouseStop:function(c){var d=
++false;if(a.ui.ddmanager&&!this.options.dropBehaviour)d=a.ui.ddmanager.drop(this,c);if(this.dropped){d=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!d||this.options.revert=="valid"&&d||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
++10),function(){e._trigger("stop",c)!==false&&e._clear()})}else this._trigger("stop",c)!==false&&this._clear();return false},_mouseUp:function(c){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,c);return a.ui.mouse.prototype._mouseUp.call(this,c)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(c){var d=!this.options.handle||
++!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==c.target)d=true});return d},_createHelper:function(c){var d=this.options;c=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):d.helper=="clone"?this.element.clone().removeAttr("id"):this.element;c.parents("body").length||c.appendTo(d.appendTo=="parent"?this.element[0].parentNode:d.appendTo);c[0]!=this.element[0]&&!/(fixed|absolute)/.test(c.css("position"))&&
++c.css("position","absolute");return c},_adjustOffsetFromHelper:function(c){if(typeof c=="string")c=c.split(" ");if(a.isArray(c))c={left:+c[0],top:+c[1]||0};if("left"in c)this.offset.click.left=c.left+this.margins.left;if("right"in c)this.offset.click.left=this.helperProportions.width-c.right+this.margins.left;if("top"in c)this.offset.click.top=c.top+this.margins.top;if("bottom"in c)this.offset.click.top=this.helperProportions.height-c.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
++this.helper.offsetParent();var c=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){c.left+=this.scrollParent.scrollLeft();c.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)c={top:0,left:0};return{top:c.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:c.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
++10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var c=this.element.position();return{top:c.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:c.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
++10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var c=this.options;if(c.containment=="parent")c.containment=this.helper[0].parentNode;if(c.containment=="document"||c.containment=="window")this.containment=[c.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,c.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
++(c.containment=="document"?0:a(window).scrollLeft())+a(c.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(c.containment=="document"?0:a(window).scrollTop())+(a(c.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(c.containment)&&c.containment.constructor!=Array){c=a(c.containment);var d=c[0];if(d){c.offset();var e=a(d).css("overflow")!=
++"hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(e?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),
++10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=c}}else if(c.containment.constructor==Array)this.containment=c.containment},_convertPositionTo:function(c,d){if(!d)d=this.position;c=c=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:d.top+
++this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*c)}},_generatePosition:function(c){var d=this.options,e=this.cssPosition=="absolute"&&
++!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=c.pageX,i=c.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(c.pageX-this.offset.click.left<b[0])g=b[0]+this.offset.click.left;
++if(c.pageY-this.offset.click.top<b[1])i=b[1]+this.offset.click.top;if(c.pageX-this.offset.click.left>b[2])g=b[2]+this.offset.click.left;if(c.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(d.grid){i=d.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/d.grid[1])*d.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.top<b[1]||i-this.offset.click.top>b[3])?i:!(i-this.offset.click.top<b[1])?i-d.grid[1]:i+d.grid[1]:i;g=d.grid[0]?this.originalPageX+Math.round((g-this.originalPageX)/
++d.grid[0])*d.grid[0]:this.originalPageX;g=b?!(g-this.offset.click.left<b[0]||g-this.offset.click.left>b[2])?g:!(g-this.offset.click.left<b[0])?g-d.grid[0]:g+d.grid[0]:g}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<
++526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(c,d,e){e=e||this._uiHash();a.ui.plugin.call(this,c,[d,e]);if(c=="drag")this.positionAbs=this._convertPositionTo("absolute");return a.Widget.prototype._trigger.call(this,c,d,
++e)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8.15"});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,d){var e=a(this).data("draggable"),h=e.options,g=a.extend({},d,{item:e.element});e.sortables=[];a(h.connectToSortable).each(function(){var i=a.data(this,"sortable");if(i&&!i.options.disabled){e.sortables.push({instance:i,shouldRevert:i.options.revert});
++i.refreshPositions();i._trigger("activate",c,g)}})},stop:function(c,d){var e=a(this).data("draggable"),h=a.extend({},d,{item:e.element});a.each(e.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;e.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;e.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
++false;this.instance._trigger("deactivate",c,h)}})},drag:function(c,d){var e=a(this).data("draggable"),h=this;a.each(e.sortables,function(){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(h).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
++this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return d.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;
++e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}this.instance.currentItem&&this.instance._mouseDrag(c)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
++this.instance.placeholder.remove();e._trigger("fromSortable",c);e.dropped=false}})}});a.ui.plugin.add("draggable","cursor",{start:function(){var c=a("body"),d=a(this).data("draggable").options;if(c.css("cursor"))d._cursor=c.css("cursor");c.css("cursor",d.cursor)},stop:function(){var c=a(this).data("draggable").options;c._cursor&&a("body").css("cursor",c._cursor)}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){c=a(d.helper);d=a(this).data("draggable").options;if(c.css("opacity"))d._opacity=
++c.css("opacity");c.css("opacity",d.opacity)},stop:function(c,d){c=a(this).data("draggable").options;c._opacity&&a(d.helper).css("opacity",c._opacity)}});a.ui.plugin.add("draggable","scroll",{start:function(){var c=a(this).data("draggable");if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML")c.overflowOffset=c.scrollParent.offset()},drag:function(c){var d=a(this).data("draggable"),e=d.options,h=false;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!=
++"x")if(d.overflowOffset.top+d.scrollParent[0].offsetHeight-c.pageY<e.scrollSensitivity)d.scrollParent[0].scrollTop=h=d.scrollParent[0].scrollTop+e.scrollSpeed;else if(c.pageY-d.overflowOffset.top<e.scrollSensitivity)d.scrollParent[0].scrollTop=h=d.scrollParent[0].scrollTop-e.scrollSpeed;if(!e.axis||e.axis!="y")if(d.overflowOffset.left+d.scrollParent[0].offsetWidth-c.pageX<e.scrollSensitivity)d.scrollParent[0].scrollLeft=h=d.scrollParent[0].scrollLeft+e.scrollSpeed;else if(c.pageX-d.overflowOffset.left<
++e.scrollSensitivity)d.scrollParent[0].scrollLeft=h=d.scrollParent[0].scrollLeft-e.scrollSpeed}else{if(!e.axis||e.axis!="x")if(c.pageY-a(document).scrollTop()<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed);else if(a(window).height()-(c.pageY-a(document).scrollTop())<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed);if(!e.axis||e.axis!="y")if(c.pageX-a(document).scrollLeft()<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()-
++e.scrollSpeed);else if(a(window).width()-(c.pageX-a(document).scrollLeft())<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed)}h!==false&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,c)}});a.ui.plugin.add("draggable","snap",{start:function(){var c=a(this).data("draggable"),d=c.options;c.snapElements=[];a(d.snap.constructor!=String?d.snap.items||":data(draggable)":d.snap).each(function(){var e=a(this),h=e.offset();this!=c.element[0]&&c.snapElements.push({item:this,
++width:e.outerWidth(),height:e.outerHeight(),top:h.top,left:h.left})})},drag:function(c,d){for(var e=a(this).data("draggable"),h=e.options,g=h.snapTolerance,i=d.offset.left,b=i+e.helperProportions.width,f=d.offset.top,j=f+e.helperProportions.height,l=e.snapElements.length-1;l>=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g<i&&i<n+g&&k-g<f&&f<m+g||o-g<i&&i<n+g&&k-g<j&&j<m+g||o-g<b&&b<n+g&&k-g<f&&f<m+g||o-g<b&&b<n+g&&k-g<j&&
++j<m+g){if(h.snapMode!="inner"){var p=Math.abs(k-j)<=g,q=Math.abs(m-f)<=g,s=Math.abs(o-b)<=g,r=Math.abs(n-i)<=g;if(p)d.position.top=e._convertPositionTo("relative",{top:k-e.helperProportions.height,left:0}).top-e.margins.top;if(q)d.position.top=e._convertPositionTo("relative",{top:m,left:0}).top-e.margins.top;if(s)d.position.left=e._convertPositionTo("relative",{top:0,left:o-e.helperProportions.width}).left-e.margins.left;if(r)d.position.left=e._convertPositionTo("relative",{top:0,left:n}).left-e.margins.left}var u=
++p||q||s||r;if(h.snapMode!="outer"){p=Math.abs(k-f)<=g;q=Math.abs(m-j)<=g;s=Math.abs(o-i)<=g;r=Math.abs(n-b)<=g;if(p)d.position.top=e._convertPositionTo("relative",{top:k,left:0}).top-e.margins.top;if(q)d.position.top=e._convertPositionTo("relative",{top:m-e.helperProportions.height,left:0}).top-e.margins.top;if(s)d.position.left=e._convertPositionTo("relative",{top:0,left:o}).left-e.margins.left;if(r)d.position.left=e._convertPositionTo("relative",{top:0,left:n-e.helperProportions.width}).left-e.margins.left}if(!e.snapElements[l].snapping&&
++(p||q||s||r||u))e.options.snap.snap&&e.options.snap.snap.call(e.element,c,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=p||q||s||r||u}else{e.snapElements[l].snapping&&e.options.snap.release&&e.options.snap.release.call(e.element,c,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=false}}}});a.ui.plugin.add("draggable","stack",{start:function(){var c=a(this).data("draggable").options;c=a.makeArray(a(c.stack)).sort(function(e,h){return(parseInt(a(e).css("zIndex"),
++10)||0)-(parseInt(a(h).css("zIndex"),10)||0)});if(c.length){var d=parseInt(c[0].style.zIndex)||0;a(c).each(function(e){this.style.zIndex=d+e});this[0].style.zIndex=d+c.length}}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){c=a(d.helper);d=a(this).data("draggable").options;if(c.css("zIndex"))d._zIndex=c.css("zIndex");c.css("zIndex",d.zIndex)},stop:function(c,d){c=a(this).data("draggable").options;c._zIndex&&a(d.helper).css("zIndex",c._zIndex)}})})(jQuery);
++(function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var c=this.options,d=c.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(d)?d:function(e){return e.is(d)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[c.scope]=a.ui.ddmanager.droppables[c.scope]||[];a.ui.ddmanager.droppables[c.scope].push(this);
++c.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var c=a.ui.ddmanager.droppables[this.options.scope],d=0;d<c.length;d++)c[d]==this&&c.splice(d,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(c,d){if(c=="accept")this.accept=a.isFunction(d)?d:function(e){return e.is(d)};a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(c){var d=a.ui.ddmanager.current;this.options.activeClass&&
++this.element.addClass(this.options.activeClass);d&&this._trigger("activate",c,this.ui(d))},_deactivate:function(c){var d=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);d&&this._trigger("deactivate",c,this.ui(d))},_over:function(c){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
++this._trigger("over",c,this.ui(d))}},_out:function(c){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",c,this.ui(d))}},_drop:function(c,d){var e=d||a.ui.ddmanager.current;if(!e||(e.currentItem||e.element)[0]==this.element[0])return false;var h=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
++a.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==e.options.scope&&g.accept.call(g.element[0],e.currentItem||e.element)&&a.ui.intersect(e,a.extend(g,{offset:g.element.offset()}),g.options.tolerance)){h=true;return false}});if(h)return false;if(this.accept.call(this.element[0],e.currentItem||e.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
++c,this.ui(e));return this.element}return false},ui:function(c){return{draggable:c.currentItem||c.element,helper:c.helper,position:c.position,offset:c.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8.15"});a.ui.intersect=function(c,d,e){if(!d.offset)return false;var h=(c.positionAbs||c.position.absolute).left,g=h+c.helperProportions.width,i=(c.positionAbs||c.position.absolute).top,b=i+c.helperProportions.height,f=d.offset.left,j=f+d.proportions.width,l=d.offset.top,o=l+d.proportions.height;
++switch(e){case "fit":return f<=h&&g<=j&&l<=i&&b<=o;case "intersect":return f<h+c.helperProportions.width/2&&g-c.helperProportions.width/2<j&&l<i+c.helperProportions.height/2&&b-c.helperProportions.height/2<o;case "pointer":return a.ui.isOver((c.positionAbs||c.position.absolute).top+(c.clickOffset||c.offset.click).top,(c.positionAbs||c.position.absolute).left+(c.clickOffset||c.offset.click).left,l,f,d.proportions.height,d.proportions.width);case "touch":return(i>=l&&i<=o||b>=l&&b<=o||i<l&&b>o)&&(h>=
++f&&h<=j||g>=f&&g<=j||h<f&&g>j);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(c,d){var e=a.ui.ddmanager.droppables[c.options.scope]||[],h=d?d.type:null,g=(c.currentItem||c.element).find(":data(droppable)").andSelf(),i=0;a:for(;i<e.length;i++)if(!(e[i].options.disabled||c&&!e[i].accept.call(e[i].element[0],c.currentItem||c.element))){for(var b=0;b<g.length;b++)if(g[b]==e[i].element[0]){e[i].proportions.height=0;continue a}e[i].visible=e[i].element.css("display")!=
++"none";if(e[i].visible){h=="mousedown"&&e[i]._activate.call(e[i],d);e[i].offset=e[i].element.offset();e[i].proportions={width:e[i].element[0].offsetWidth,height:e[i].element[0].offsetHeight}}}},drop:function(c,d){var e=false;a.each(a.ui.ddmanager.droppables[c.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&a.ui.intersect(c,this,this.options.tolerance))e=e||this._drop.call(this,d);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],c.currentItem||
++c.element)){this.isout=1;this.isover=0;this._deactivate.call(this,d)}}});return e},dragStart:function(c,d){c.element.parentsUntil("body").bind("scroll.droppable",function(){c.options.refreshPositions||a.ui.ddmanager.prepareOffsets(c,d)})},drag:function(c,d){c.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(c,d);a.each(a.ui.ddmanager.droppables[c.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var e=a.ui.intersect(c,this,this.options.tolerance);if(e=
++!e&&this.isover==1?"isout":e&&this.isover==0?"isover":null){var h;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){h=a.data(g[0],"droppable");h.greedyChild=e=="isover"?1:0}}if(h&&e=="isover"){h.isover=0;h.isout=1;h._out.call(h,d)}this[e]=1;this[e=="isout"?"isover":"isout"]=0;this[e=="isover"?"_over":"_out"].call(this,d);if(h&&e=="isout"){h.isout=0;h.isover=1;h._over.call(h,d)}}}})},dragStop:function(c,d){c.element.parentsUntil("body").unbind("scroll.droppable");
++c.options.refreshPositions||a.ui.ddmanager.prepareOffsets(c,d)}}})(jQuery);
++(function(a){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var e=this,h=this.options;this.element.addClass("ui-resizable");a.extend(this,{_aspectRatio:!!h.aspectRatio,aspectRatio:h.aspectRatio,originalElement:this.element,
++_proportionallyResizeElements:[],_helper:h.helper||h.ghost||h.animate?h.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
++top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
++this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
++nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i<g.length;i++){var b=a.trim(g[i]),f=a('<div class="ui-resizable-handle '+("ui-resizable-"+b)+'"></div>');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor==
++String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection();
++this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
++var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h=
++false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"});
++this._renderProxy();g=c(this.helper.css("left"));var b=c(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff=
++{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis];
++if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false},
++_mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b,
++{top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:d(h.minWidth)?h.minWidth:0,maxWidth:d(h.maxWidth)?h.maxWidth:Infinity,minHeight:d(h.minHeight)?h.minHeight:0,maxHeight:d(h.maxHeight)?h.maxHeight:
++Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(g<h.maxWidth)h.maxWidth=g;if(b<h.maxHeight)h.maxHeight=b}this._vBoundaries=h},_updateCache:function(e){this.offset=this.helper.offset();if(d(e.left))this.position.left=e.left;if(d(e.top))this.position.top=e.top;if(d(e.height))this.size.height=e.height;if(d(e.width))this.size.width=
++e.width},_updateRatio:function(e){var h=this.position,g=this.size,i=this.axis;if(d(e.height))e.width=e.height*this.aspectRatio;else if(d(e.width))e.height=e.width/this.aspectRatio;if(i=="sw"){e.left=h.left+(g.width-e.width);e.top=null}if(i=="nw"){e.top=h.top+(g.height-e.height);e.left=h.left+(g.width-e.width)}return e},_respectSize:function(e){var h=this._vBoundaries,g=this.axis,i=d(e.width)&&h.maxWidth&&h.maxWidth<e.width,b=d(e.height)&&h.maxHeight&&h.maxHeight<e.height,f=d(e.width)&&h.minWidth&&
++h.minWidth>e.width,j=d(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left=
++null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h<this._proportionallyResizeElements.length;h++){var g=this._proportionallyResizeElements[h];if(!this.borderDif){var i=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],b=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=a.map(i,function(f,j){f=parseInt(f,10)||
++0;j=parseInt(b[j],10)||0;return f+j})}a.browser.msie&&(a(e).is(":hidden")||a(e).parents(":hidden").length)||g.css({height:e.height()-this.borderDif[0]-this.borderDif[2]||0,width:e.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var e=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
++h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+
++g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]);
++e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.15"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(),
++10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top-
++b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?
++a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h=
++a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing,
++step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement=
++a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=c(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset;
++var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left:
++h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top-
++i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition,
++b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,
++display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e=
++a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height=
++i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var c=function(e){return parseInt(e,10)||0},d=function(e){return!isNaN(parseInt(e,10))}})(jQuery);
++(function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var d;this.refresh=function(){d=a(c.options.filter,c.element[0]);d.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"),
++selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=d.addClass("ui-selectee");this._mouseInit();this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var d=this;this.opos=[c.pageX,
++c.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",c);a(e.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!c.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;d._trigger("unselecting",
++c,{unselecting:h.element})}});a(c.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!c.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?d._trigger("selecting",c,{selecting:h.element}):d._trigger("unselecting",c,{unselecting:h.element});return false}})}},_mouseDrag:function(c){var d=this;this.dragged=true;if(!this.options.disabled){var e=
++this.options,h=this.opos[0],g=this.opos[1],i=c.pageX,b=c.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==d.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.right<h||j.top>b||j.bottom<g);else if(e.tolerance=="fit")l=j.left>h&&j.right<i&&j.top>g&&j.bottom<b;if(l){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");
++j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;d._trigger("selecting",c,{selecting:j.element})}}else{if(j.selecting)if(c.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}d._trigger("unselecting",c,{unselecting:j.element})}if(j.selected)if(!c.metaKey&&
++!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;d._trigger("unselecting",c,{unselecting:j.element})}}}});return false}},_mouseStop:function(c){var d=this;this.dragged=false;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;d._trigger("unselected",c,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=
++a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;d._trigger("selected",c,{selected:e.element})});this._trigger("stop",c);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8.15"})})(jQuery);
++(function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var c=this.options;this.containerCache={};this.element.addClass("ui-sortable");
++this.refresh();this.floating=this.items.length?c.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var c=this.items.length-1;c>=0;c--)this.items[c].item.removeData("sortable-item");return this},_setOption:function(c,d){if(c===
++"disabled"){this.options[c]=d;this.widget()[d?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(c,d){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(c);var e=null,h=this;a(c.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(c.target,"sortable-item")==h)e=a(c.target);if(!e)return false;if(this.options.handle&&
++!d){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==c.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(c,d,e){d=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(c);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
++left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:c.pageX-this.offset.left,top:c.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(c);this.originalPageX=c.pageX;this.originalPageY=c.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
++this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();d.containment&&this._setContainment();if(d.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",d.cursor)}if(d.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",d.opacity)}if(d.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",d.zIndex)}if(this.scrollParent[0]!=
++document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",c,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",c,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,c);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(c);
++return true},_mouseDrag:function(c){this.position=this._generatePosition(c);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var d=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-c.pageY<d.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop+d.scrollSpeed;else if(c.pageY-this.overflowOffset.top<
++d.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop-d.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-c.pageX<d.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft+d.scrollSpeed;else if(c.pageX-this.overflowOffset.left<d.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft-d.scrollSpeed}else{if(c.pageY-a(document).scrollTop()<d.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()-
++d.scrollSpeed);else if(a(window).height()-(c.pageY-a(document).scrollTop())<d.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()+d.scrollSpeed);if(c.pageX-a(document).scrollLeft()<d.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()-d.scrollSpeed);else if(a(window).width()-(c.pageX-a(document).scrollLeft())<d.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()+d.scrollSpeed)}e!==false&&a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,
++c)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(d=this.items.length-1;d>=0;d--){e=this.items[d];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],
++h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(c,e);else break;this._trigger("change",c,this._uiHash());break}}this._contactContainers(c);a.ui.ddmanager&&a.ui.ddmanager.drag(this,c);this._trigger("sort",c,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(c){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,c);if(this.options.revert){var e=this;d=e.placeholder.offset();
++e.reverting=true;a(this.helper).animate({left:d.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:d.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(c)})}else this._clear(c,d);return false}},cancel:function(){var c=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
++this.currentItem.show();for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("deactivate",null,c._uiHash(this));if(this.containers[d].containerCache.over){this.containers[d]._trigger("out",null,c._uiHash(this));this.containers[d].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null,
++dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(c){var d=this._getItemsAsjQuery(c&&c.connected),e=[];c=c||{};a(d).each(function(){var h=(a(c.item||this).attr(c.attribute||"id")||"").match(c.expression||/(.+)[-=_](.+)/);if(h)e.push((c.key||h[1]+"[]")+"="+(c.key&&c.expression?h[1]:h[2]))});!e.length&&c.key&&e.push(c.key+"=");return e.join("&")},
++toArray:function(c){var d=this._getItemsAsjQuery(c&&c.connected),e=[];c=c||{};d.each(function(){e.push(a(c.item||this).attr(c.attribute||"id")||"")});return e},_intersectsWith:function(c){var d=this.positionAbs.left,e=d+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=c.left,b=i+c.width,f=c.top,j=f+c.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+l<j&&d+o>i&&d+o<b;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
++this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>c[this.floating?"width":"height"]?l:i<d+this.helperProportions.width/2&&e-this.helperProportions.width/2<b&&f<h+this.helperProportions.height/2&&g-this.helperProportions.height/2<j},_intersectsWithPointer:function(c){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,c.top,c.height);c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,c.left,c.width);d=d&&c;c=this._getDragVerticalDirection();
++var e=this._getDragHorizontalDirection();if(!d)return false;return this.floating?e&&e=="right"||c=="down"?2:1:c&&(c=="down"?2:1)},_intersectsWithSides:function(c){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,c.top+c.height/2,c.height);c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,c.left+c.width/2,c.width);var e=this._getDragVerticalDirection(),h=this._getDragHorizontalDirection();return this.floating&&h?h=="right"&&c||h=="left"&&!c:e&&(e=="down"&&d||e=="up"&&!d)},
++_getDragVerticalDirection:function(){var c=this.positionAbs.top-this.lastPositionAbs.top;return c!=0&&(c>0?"down":"up")},_getDragHorizontalDirection:function(){var c=this.positionAbs.left-this.lastPositionAbs.left;return c!=0&&(c>0?"right":"left")},refresh:function(c){this._refreshItems(c);this.refreshPositions();return this},_connectWith:function(){var c=this.options;return c.connectWith.constructor==String?[c.connectWith]:c.connectWith},_getItemsAsjQuery:function(c){var d=[],e=[],h=this._connectWith();
++if(h&&c)for(c=h.length-1;c>=0;c--)for(var g=a(h[c]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
++this]);for(c=e.length-1;c>=0;c--)e[c][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){for(var c=this.currentItem.find(":data(sortable-item)"),d=0;d<this.items.length;d++)for(var e=0;e<c.length;e++)c[e]==this.items[d].item[0]&&this.items.splice(d,1)},_refreshItems:function(c){this.items=[];this.containers=[this];var d=this.items,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],c,{item:this.currentItem}):a(this.options.items,this.element),
++this]],h=this._connectWith();if(h)for(var g=h.length-1;g>=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],c,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){c=e[g][1];h=e[g][0];b=0;for(i=h.length;b<i;b++){f=a(h[b]);f.data("sortable-item",c);d.push({item:f,instance:c,width:0,height:0,left:0,top:0})}}},refreshPositions:function(c){if(this.offsetParent&&
++this.helper)this.offset.parent=this._getParentOffset();for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!c){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(d=
++this.containers.length-1;d>=0;d--){h=this.containers[d].element.offset();this.containers[d].containerCache.left=h.left;this.containers[d].containerCache.top=h.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}return this},_createPlaceholder:function(c){var d=c||this,e=d.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g=
++a(document.createElement(d.currentItem[0].nodeName)).addClass(h||d.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(d.currentItem.innerHeight()-parseInt(d.currentItem.css("paddingTop")||0,10)-parseInt(d.currentItem.css("paddingBottom")||0,10));i.width()||i.width(d.currentItem.innerWidth()-parseInt(d.currentItem.css("paddingLeft")||0,10)-parseInt(d.currentItem.css("paddingRight")||
++0,10))}}}}d.placeholder=a(e.placeholder.element.call(d.element,d.currentItem));d.currentItem.after(d.placeholder);e.placeholder.update(d,d.placeholder)},_contactContainers:function(c){for(var d=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(d&&a.ui.contains(this.containers[h].element[0],d.element[0]))){d=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out",
++c,this._uiHash(this));this.containers[h].containerCache.over=0}if(d)if(this.containers.length===1){this.containers[e]._trigger("over",c,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){d=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b-
++g)<d){d=Math.abs(b-g);h=this.items[i]}}if(h||this.options.dropOnEmpty){this.currentContainer=this.containers[e];h?this._rearrange(c,h,null,true):this._rearrange(c,null,this.containers[e].element,true);this._trigger("change",c,this._uiHash());this.containers[e]._trigger("change",c,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[e]._trigger("over",c,this._uiHash(this));this.containers[e].containerCache.over=1}}},_createHelper:function(c){var d=
++this.options;c=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):d.helper=="clone"?this.currentItem.clone():this.currentItem;c.parents("body").length||a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(c[0]);if(c[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(c[0].style.width==
++""||d.forceHelperSize)c.width(this.currentItem.width());if(c[0].style.height==""||d.forceHelperSize)c.height(this.currentItem.height());return c},_adjustOffsetFromHelper:function(c){if(typeof c=="string")c=c.split(" ");if(a.isArray(c))c={left:+c[0],top:+c[1]||0};if("left"in c)this.offset.click.left=c.left+this.margins.left;if("right"in c)this.offset.click.left=this.helperProportions.width-c.right+this.margins.left;if("top"in c)this.offset.click.top=c.top+this.margins.top;if("bottom"in c)this.offset.click.top=
++this.helperProportions.height-c.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var c=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){c.left+=this.scrollParent.scrollLeft();c.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)c=
++{top:0,left:0};return{top:c.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:c.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var c=this.currentItem.position();return{top:c.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:c.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
++10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var c=this.options;if(c.containment=="parent")c.containment=this.helper[0].parentNode;if(c.containment=="document"||c.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(c.containment=="document"?
++document:window).width()-this.helperProportions.width-this.margins.left,(a(c.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(c.containment)){var d=a(c.containment)[0];c=a(c.containment).offset();var e=a(d).css("overflow")!="hidden";this.containment=[c.left+(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0)-this.margins.left,c.top+(parseInt(a(d).css("borderTopWidth"),
++10)||0)+(parseInt(a(d).css("paddingTop"),10)||0)-this.margins.top,c.left+(e?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,c.top+(e?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(c,d){if(!d)d=
++this.position;c=c=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:d.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&
++this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*c)}},_generatePosition:function(c){var d=this.options,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
++var g=c.pageX,i=c.pageY;if(this.originalPosition){if(this.containment){if(c.pageX-this.offset.click.left<this.containment[0])g=this.containment[0]+this.offset.click.left;if(c.pageY-this.offset.click.top<this.containment[1])i=this.containment[1]+this.offset.click.top;if(c.pageX-this.offset.click.left>this.containment[2])g=this.containment[2]+this.offset.click.left;if(c.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(d.grid){i=this.originalPageY+Math.round((i-
++this.originalPageY)/d.grid[1])*d.grid[1];i=this.containment?!(i-this.offset.click.top<this.containment[1]||i-this.offset.click.top>this.containment[3])?i:!(i-this.offset.click.top<this.containment[1])?i-d.grid[1]:i+d.grid[1]:i;g=this.originalPageX+Math.round((g-this.originalPageX)/d.grid[0])*d.grid[0];g=this.containment?!(g-this.offset.click.left<this.containment[0]||g-this.offset.click.left>this.containment[2])?g:!(g-this.offset.click.left<this.containment[0])?g-d.grid[0]:g+d.grid[0]:g}}return{top:i-
++this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_rearrange:function(c,d,e,h){e?e[0].appendChild(this.placeholder[0]):d.item[0].parentNode.insertBefore(this.placeholder[0],
++this.direction=="down"?d.item[0]:d.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var g=this,i=this.counter;window.setTimeout(function(){i==g.counter&&g.refreshPositions(!h)},0)},_clear:function(c,d){this.reverting=false;var e=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var h in this._storedCSS)if(this._storedCSS[h]=="auto"||this._storedCSS[h]=="static")this._storedCSS[h]=
++"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!d&&e.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!d)e.push(function(g){this._trigger("update",g,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){d||e.push(function(g){this._trigger("remove",
++g,this._uiHash())});for(h=this.containers.length-1;h>=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!d){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){d||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this,
++this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!d){this._trigger("beforeStop",
++c,this._uiHash());for(h=0;h<e.length;h++)e[h].call(this,c);this._trigger("stop",c,this._uiHash())}return false}d||this._trigger("beforeStop",c,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!d){for(h=0;h<e.length;h++)e[h].call(this,c);this._trigger("stop",c,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
++_uiHash:function(c){var d=c||this;return{helper:d.helper,placeholder:d.placeholder||a([]),position:d.position,originalPosition:d.originalPosition,offset:d.positionAbs,item:d.currentItem,sender:c?c.element:null}}});a.extend(a.ui.sortable,{version:"1.8.15"})})(jQuery);
++jQuery.effects||function(a,c){function d(n){var k;if(n&&n.constructor==Array&&n.length==3)return n;if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)];if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55];if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return[parseInt(k[1],
++16),parseInt(k[2],16),parseInt(k[3],16)];if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(n))return j.transparent;return j[a.trim(n).toLowerCase()]}function e(n,k){var m;do{m=a.curCSS(n,k);if(m!=""&&m!="transparent"||a.nodeName(n,"body"))break;k="backgroundColor"}while(n=n.parentNode);return d(m)}function h(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
++k={},m,p;if(n&&n.length&&n[0]&&n[n[0]])for(var q=n.length;q--;){m=n[q];if(typeof n[m]=="string"){p=m.replace(/\-(\w)/g,function(s,r){return r.toUpperCase()});k[p]=n[m]}}else for(m in n)if(typeof n[m]==="string")k[m]=n[m];return k}function g(n){var k,m;for(k in n){m=n[k];if(m==null||a.isFunction(m)||k in o||/scrollbar/.test(k)||!/color/i.test(k)&&isNaN(parseFloat(m)))delete n[k]}return n}function i(n,k){var m={_:0},p;for(p in k)if(n[p]!=k[p])m[p]=k[p];return m}function b(n,k,m,p){if(typeof n=="object"){p=
++k;m=null;k=n;n=k.effect}if(a.isFunction(k)){p=k;m=null;k={}}if(typeof k=="number"||a.fx.speeds[k]){p=m;m=k;k={}}if(a.isFunction(m)){p=m;m=null}k=k||{};m=m||k.duration;m=a.fx.off?0:typeof m=="number"?m:m in a.fx.speeds?a.fx.speeds[m]:a.fx.speeds._default;p=p||k.complete;return[n,k,m,p]}function f(n){if(!n||typeof n==="number"||a.fx.speeds[n])return true;if(typeof n==="string"&&!a.effects[n])return true;return false}a.effects={};a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
++"borderTopColor","borderColor","color","outlineColor"],function(n,k){a.fx.step[k]=function(m){if(!m.colorInit){m.start=e(m.elem,k);m.end=d(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt(m.pos*(m.end[0]-m.start[0])+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[1]-m.start[1])+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[2]-m.start[2])+m.start[2],10),255),0)+")"}});var j={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
++0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
++211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},l=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(n,k,m,
++p){if(a.isFunction(m)){p=m;m=null}return this.queue(function(){var q=a(this),s=q.attr("style")||" ",r=g(h.call(this)),u,v=q.attr("class");a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});u=g(h.call(this));q.attr("class",v);q.animate(i(r,u),{queue:false,duration:k,easing:m,complete:function(){a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});if(typeof q.attr("style")=="object"){q.attr("style").cssText="";q.attr("style").cssText=s}else q.attr("style",s);p&&p.apply(this,arguments);a.dequeue(this)}})})};
++a.fn.extend({_addClass:a.fn.addClass,addClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{add:n},k,m,p]):this._addClass(n)},_removeClass:a.fn.removeClass,removeClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{remove:n},k,m,p]):this._removeClass(n)},_toggleClass:a.fn.toggleClass,toggleClass:function(n,k,m,p,q){return typeof k=="boolean"||k===c?m?a.effects.animateClass.apply(this,[k?{add:n}:{remove:n},m,p,q]):this._toggleClass(n,k):a.effects.animateClass.apply(this,
++[{toggle:n},k,m,p])},switchClass:function(n,k,m,p,q){return a.effects.animateClass.apply(this,[{add:k,remove:n},m,p,q])}});a.extend(a.effects,{version:"1.8.15",save:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.data("ec.storage."+k[m],n[0].style[k[m]])},restore:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.css(k[m],n.data("ec.storage."+k[m]))},setMode:function(n,k){if(k=="toggle")k=n.is(":hidden")?"show":"hide";return k},getBaseline:function(n,k){var m;switch(n[0]){case "top":m=
++0;break;case "middle":m=0.5;break;case "bottom":m=1;break;default:m=n[0]/k.height}switch(n[1]){case "left":n=0;break;case "center":n=0.5;break;case "right":n=1;break;default:n=n[1]/k.width}return{x:n,y:m}},createWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent();var k={width:n.outerWidth(true),height:n.outerHeight(true),"float":n.css("float")},m=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
++n.wrap(m);m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(p,q){k[q]=n.css(q);if(isNaN(parseInt(k[q],10)))k[q]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent().replaceWith(n);return n},setTransition:function(n,
++k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments);
++k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%",
++"pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p*
++((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m,p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/=
++q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n,k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/=
++q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/
++r);return-(r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s))+m},easeOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return r*Math.pow(2,-10*k)*Math.sin((k*q-n)*2*Math.PI/s)+p+m},easeInOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q/2)==2)return m+p;s||(s=q*0.3*1.5);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);if(k<1)return-0.5*
++r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)+m;return r*Math.pow(2,-10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)*0.5+p+m},easeInBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;return p*(k/=q)*k*((s+1)*k-s)+m},easeOutBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;return p*((k=k/q-1)*k*((s+1)*k+s)+1)+m},easeInOutBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;if((k/=q/2)<1)return p/2*k*k*(((s*=1.525)+1)*k-s)+m;return p/2*((k-=2)*k*(((s*=1.525)+1)*k+s)+2)+m},easeInBounce:function(n,k,m,p,q){return p-a.easing.easeOutBounce(n,
++q-k,0,p,q)+m},easeOutBounce:function(n,k,m,p,q){return(k/=q)<1/2.75?p*7.5625*k*k+m:k<2/2.75?p*(7.5625*(k-=1.5/2.75)*k+0.75)+m:k<2.5/2.75?p*(7.5625*(k-=2.25/2.75)*k+0.9375)+m:p*(7.5625*(k-=2.625/2.75)*k+0.984375)+m},easeInOutBounce:function(n,k,m,p,q){if(k<q/2)return a.easing.easeInBounce(n,k*2,0,p,q)*0.5+m;return a.easing.easeOutBounce(n,k*2-q,0,p,q)*0.5+p*0.5+m}})}(jQuery);
++(function(a){a.effects.blind=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"vertical";a.effects.save(d,e);d.show();var i=a.effects.createWrapper(d).css({overflow:"hidden"}),b=g=="vertical"?"height":"width";g=g=="vertical"?i.height():i.width();h=="show"&&i.css(b,0);var f={};f[b]=h=="show"?g:0;i.animate(f,c.duration,c.options.easing,function(){h=="hide"&&d.hide();a.effects.restore(d,
++e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()})})}})(jQuery);
++(function(a){a.effects.bounce=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"effect"),g=c.options.direction||"up",i=c.options.distance||20,b=c.options.times||5,f=c.duration||250;/show|hide/.test(h)&&e.push("opacity");a.effects.save(d,e);d.show();a.effects.createWrapper(d);var j=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";i=c.options.distance||(j=="top"?d.outerHeight({margin:true})/3:d.outerWidth({margin:true})/
++3);if(h=="show")d.css("opacity",0).css(j,g=="pos"?-i:i);if(h=="hide")i/=b*2;h!="hide"&&b--;if(h=="show"){var l={opacity:1};l[j]=(g=="pos"?"+=":"-=")+i;d.animate(l,f/2,c.options.easing);i/=2;b--}for(l=0;l<b;l++){var o={},n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;d.animate(o,f/2,c.options.easing).animate(n,f/2,c.options.easing);i=h=="hide"?i*2:i/2}if(h=="hide"){l={opacity:0};l[j]=(g=="pos"?"-=":"+=")+i;d.animate(l,f/2,c.options.easing,function(){d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);
++c.callback&&c.callback.apply(this,arguments)})}else{o={};n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;d.animate(o,f/2,c.options.easing).animate(n,f/2,c.options.easing,function(){a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments)})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);
++(function(a){a.effects.clip=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","height","width"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"vertical";a.effects.save(d,e);d.show();var i=a.effects.createWrapper(d).css({overflow:"hidden"});i=d[0].tagName=="IMG"?i:d;var b={size:g=="vertical"?"height":"width",position:g=="vertical"?"top":"left"};g=g=="vertical"?i.height():i.width();if(h=="show"){i.css(b.size,0);i.css(b.position,
++g/2)}var f={};f[b.size]=h=="show"?g:0;f[b.position]=h=="show"?0:g/2;i.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.drop=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","opacity"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"left";a.effects.save(d,e);d.show();a.effects.createWrapper(d);var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=c.options.distance||(i=="top"?d.outerHeight({margin:true})/2:d.outerWidth({margin:true})/2);if(h=="show")d.css("opacity",0).css(i,g=="pos"?-b:b);var f={opacity:h==
++"show"?1:0};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;d.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.explode=function(c){return this.queue(function(){var d=c.options.pieces?Math.round(Math.sqrt(c.options.pieces)):3,e=c.options.pieces?Math.round(Math.sqrt(c.options.pieces)):3;c.options.mode=c.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":c.options.mode;var h=a(this).show().css("visibility","hidden"),g=h.offset();g.top-=parseInt(h.css("marginTop"),10)||0;g.left-=parseInt(h.css("marginLeft"),10)||0;for(var i=h.outerWidth(true),b=h.outerHeight(true),f=0;f<d;f++)for(var j=
++0;j<e;j++)h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/d)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/d,left:g.left+j*(i/e)+(c.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/d)+(c.options.mode=="show"?(f-Math.floor(d/2))*(b/d):0),opacity:c.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(c.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+
++f*(b/d)+(c.options.mode=="show"?0:(f-Math.floor(d/2))*(b/d)),opacity:c.options.mode=="show"?1:0},c.duration||500);setTimeout(function(){c.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();c.callback&&c.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},c.duration||500)})}})(jQuery);
++(function(a){a.effects.fade=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"hide");d.animate({opacity:e},{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.fold=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.size||15,i=!!c.options.horizFirst,b=c.duration?c.duration/2:a.fx.speeds._default/2;a.effects.save(d,e);d.show();var f=a.effects.createWrapper(d).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1],
++10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,c.options.easing).animate(o,b,c.options.easing,function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()})})}})(jQuery);
++(function(a){a.effects.highlight=function(c){return this.queue(function(){var d=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(d,c.options.mode||"show"),g={backgroundColor:d.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(d,e);d.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(g,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);h=="show"&&!a.support.opacity&&
++this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.pulsate=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"show");times=(c.options.times||5)*2-1;duration=c.duration?c.duration/2:a.fx.speeds._default/2;isVisible=d.is(":visible");animateTo=0;if(!isVisible){d.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e<times;e++){d.animate({opacity:animateTo},duration,c.options.easing);animateTo=(animateTo+1)%2}d.animate({opacity:animateTo},duration,
++c.options.easing,function(){animateTo==0&&d.hide();c.callback&&c.callback.apply(this,arguments)});d.queue("fx",function(){d.dequeue()}).dequeue()})}})(jQuery);
++(function(a){a.effects.puff=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"hide"),h=parseInt(c.options.percent,10)||150,g=h/100,i={height:d.height(),width:d.width()};a.extend(c.options,{fade:true,mode:e,percent:e=="hide"?h:100,from:e=="hide"?i:{height:i.height*g,width:i.width*g}});d.effect("scale",c.options,c.duration,c.callback);d.dequeue()})};a.effects.scale=function(c){return this.queue(function(){var d=a(this),e=a.extend(true,{},c.options),h=a.effects.setMode(d,
++c.options.mode||"effect"),g=parseInt(c.options.percent,10)||(parseInt(c.options.percent,10)==0?0:h=="hide"?0:100),i=c.options.direction||"both",b=c.options.origin;if(h!="effect"){e.origin=b||["middle","center"];e.restore=true}b={height:d.height(),width:d.width()};d.from=c.options.from||(h=="show"?{height:0,width:0}:b);g={y:i!="horizontal"?g/100:1,x:i!="vertical"?g/100:1};d.to={height:b.height*g.y,width:b.width*g.x};if(c.options.fade){if(h=="show"){d.from.opacity=0;d.to.opacity=1}if(h=="hide"){d.from.opacity=
++1;d.to.opacity=0}}e.from=d.from;e.to=d.to;e.mode=h;d.effect("size",e,c.duration,c.callback);d.dequeue()})};a.effects.size=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],g=["width","height","overflow"],i=["fontSize"],b=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
++j=a.effects.setMode(d,c.options.mode||"effect"),l=c.options.restore||false,o=c.options.scale||"both",n=c.options.origin,k={height:d.height(),width:d.width()};d.from=c.options.from||k;d.to=c.options.to||k;if(n){n=a.effects.getBaseline(n,k);d.from.top=(k.height-d.from.height)*n.y;d.from.left=(k.width-d.from.width)*n.x;d.to.top=(k.height-d.to.height)*n.y;d.to.left=(k.width-d.to.width)*n.x}var m={from:{y:d.from.height/k.height,x:d.from.width/k.width},to:{y:d.to.height/k.height,x:d.to.width/k.width}};
++if(o=="box"||o=="both"){if(m.from.y!=m.to.y){e=e.concat(b);d.from=a.effects.setTransition(d,b,m.from.y,d.from);d.to=a.effects.setTransition(d,b,m.to.y,d.to)}if(m.from.x!=m.to.x){e=e.concat(f);d.from=a.effects.setTransition(d,f,m.from.x,d.from);d.to=a.effects.setTransition(d,f,m.to.x,d.to)}}if(o=="content"||o=="both")if(m.from.y!=m.to.y){e=e.concat(i);d.from=a.effects.setTransition(d,i,m.from.y,d.from);d.to=a.effects.setTransition(d,i,m.to.y,d.to)}a.effects.save(d,l?e:h);d.show();a.effects.createWrapper(d);
++d.css("overflow","hidden").css(d.from);if(o=="content"||o=="both"){b=b.concat(["marginTop","marginBottom"]).concat(i);f=f.concat(["marginLeft","marginRight"]);g=e.concat(b).concat(f);d.find("*[width]").each(function(){child=a(this);l&&a.effects.save(child,g);var p={height:child.height(),width:child.width()};child.from={height:p.height*m.from.y,width:p.width*m.from.x};child.to={height:p.height*m.to.y,width:p.width*m.to.x};if(m.from.y!=m.to.y){child.from=a.effects.setTransition(child,b,m.from.y,child.from);
++child.to=a.effects.setTransition(child,b,m.to.y,child.to)}if(m.from.x!=m.to.x){child.from=a.effects.setTransition(child,f,m.from.x,child.from);child.to=a.effects.setTransition(child,f,m.to.x,child.to)}child.css(child.from);child.animate(child.to,c.duration,c.options.easing,function(){l&&a.effects.restore(child,g)})})}d.animate(d.to,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d.to.opacity===0&&d.css("opacity",d.from.opacity);j=="hide"&&d.hide();a.effects.restore(d,
++l?e:h);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.shake=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"];a.effects.setMode(d,c.options.mode||"effect");var h=c.options.direction||"left",g=c.options.distance||20,i=c.options.times||3,b=c.duration||c.options.duration||140;a.effects.save(d,e);d.show();a.effects.createWrapper(d);var f=h=="up"||h=="down"?"top":"left",j=h=="up"||h=="left"?"pos":"neg";h={};var l={},o={};h[f]=(j=="pos"?"-=":"+=")+g;l[f]=(j=="pos"?"+=":"-=")+g*2;o[f]=
++(j=="pos"?"-=":"+=")+g*2;d.animate(h,b,c.options.easing);for(g=1;g<i;g++)d.animate(l,b,c.options.easing).animate(o,b,c.options.easing);d.animate(l,b,c.options.easing).animate(h,b/2,c.options.easing,function(){a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments)});d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);
++(function(a){a.effects.slide=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"show"),g=c.options.direction||"left";a.effects.save(d,e);d.show();a.effects.createWrapper(d).css({overflow:"hidden"});var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=c.options.distance||(i=="top"?d.outerHeight({margin:true}):d.outerWidth({margin:true}));if(h=="show")d.css(i,g=="pos"?isNaN(b)?"-"+b:-b:b);
++var f={};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;d.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
++(function(a){a.effects.transfer=function(c){return this.queue(function(){var d=a(this),e=a(c.options.to),h=e.offset();e={top:h.top,left:h.left,height:e.innerHeight(),width:e.innerWidth()};h=d.offset();var g=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(c.options.className).css({top:h.top,left:h.left,height:d.innerHeight(),width:d.innerWidth(),position:"absolute"}).animate(e,c.duration,c.options.easing,function(){g.remove();c.callback&&c.callback.apply(d[0],arguments);
++d.dequeue()})})}})(jQuery);
++(function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var c=this,d=c.options;c.running=0;c.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");c.headers=
++c.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){d.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){d.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){d.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){d.disabled||a(this).removeClass("ui-state-focus")});c.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
++if(d.navigation){var e=c.element.find("a").filter(d.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");c.active=h.length?h:e.closest(".ui-accordion-content").prev()}}c.active=c._findActive(c.active||d.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");c.active.next().addClass("ui-accordion-content-active");c._createIcons();c.resize();c.element.attr("role","tablist");c.headers.attr("role","tab").bind("keydown.accordion",
++function(g){return c._keydown(g)}).next().attr("role","tabpanel");c.headers.not(c.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();c.active.length?c.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):c.headers.eq(0).attr("tabIndex",0);a.browser.safari||c.headers.find("a").attr("tabIndex",-1);d.event&&c.headers.bind(d.event.split(" ").join(".accordion ")+".accordion",function(g){c._clickHandler.call(c,g,this);g.preventDefault()})},_createIcons:function(){var c=
++this.options;if(c.icons){a("<span></span>").addClass("ui-icon "+c.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(c.icons.header).toggleClass(c.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
++this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var d=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(c.autoHeight||c.fillHeight)d.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(c,d){a.Widget.prototype._setOption.apply(this,arguments);c=="active"&&this.activate(d);if(c=="icons"){this._destroyIcons();
++d&&this._createIcons()}if(c=="disabled")this.headers.add(this.headers.next())[d?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(c){if(!(this.options.disabled||c.altKey||c.ctrlKey)){var d=a.ui.keyCode,e=this.headers.length,h=this.headers.index(c.target),g=false;switch(c.keyCode){case d.RIGHT:case d.DOWN:g=this.headers[(h+1)%e];break;case d.LEFT:case d.UP:g=this.headers[(h-1+e)%e];break;case d.SPACE:case d.ENTER:this._clickHandler({target:c.target},c.target);
++c.preventDefault()}if(g){a(c.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var c=this.options,d;if(c.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){d-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,d-a(this).innerHeight()+
++a(this).height()))}).css("overflow","auto")}else if(c.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).height("").height())}).height(d)}return this},activate:function(c){this.options.active=c;c=this._findActive(c)[0];this._clickHandler({target:c},c);return this},_findActive:function(c){return c?typeof c==="number"?this.headers.filter(":eq("+c+")"):this.headers.not(this.headers.not(c)):c===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(c,d){var e=this.options;
++if(!e.disabled)if(c.target){c=a(c.currentTarget||d);d=c[0]===this.active[0];e.active=e.collapsible&&d?false:this.headers.index(c);if(!(this.running||!e.collapsible&&d)){var h=this.active;f=c.next();i=this.active.next();b={options:e,newHeader:d&&e.collapsible?a([]):c,oldHeader:this.active,newContent:d&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(c[0]);this.active=d?a([]):c;this._toggle(f,i,b,d,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);
++if(!d){c.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);c.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(),
++b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(c,d,e,h,g){var i=this,b=i.options;i.toShow=c;i.toHide=d;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=d.size()===0?c.size():d.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:d,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:c,toHide:d,complete:f,down:g,autoHeight:b.autoHeight||
++b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)c.toggle();else{d.hide();c.show()}f(true)}d.prev().attr({"aria-expanded":"false",
++"aria-selected":"false",tabIndex:-1}).blur();c.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(c){this.running=c?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.15",
++animations:{slide:function(c,d){c=a.extend({easing:"swing",duration:300},c,d);if(c.toHide.size())if(c.toShow.size()){var e=c.toShow.css("overflow"),h=0,g={},i={},b;d=c.toShow;b=d[0].style.width;d.width(parseInt(d.parent().width(),10)-parseInt(d.css("paddingLeft"),10)-parseInt(d.css("paddingRight"),10)-(parseInt(d.css("borderLeftWidth"),10)||0)-(parseInt(d.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(c.toShow[0],j)).match(/^([\d+-.]+)(.*)$/);
++g[j]={value:f[1],unit:f[2]||"px"}});c.toShow.css({height:0,overflow:"hidden"}).show();c.toHide.filter(":hidden").each(c.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);c.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:c.duration,easing:c.easing,complete:function(){c.autoHeight||c.toShow.css("height","");c.toShow.css({width:b,overflow:e});c.complete()}})}else c.toHide.animate({height:"hide",
++paddingTop:"hide",paddingBottom:"hide"},c);else c.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},c)},bounceslide:function(c){this.slide(c,{easing:c.down?"easeOutBounce":"swing",duration:c.down?1E3:200})}}})})(jQuery);
++(function(a){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var d=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(d.options.disabled||d.element.propAttr("readOnly"))){h=
++false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:d._move("previousPage",g);break;case i.PAGE_DOWN:d._move("nextPage",g);break;case i.UP:d._move("previous",g);g.preventDefault();break;case i.DOWN:d._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(d.menu.active){h=true;g.preventDefault()}case i.TAB:if(!d.menu.active)return;d.menu.select(g);break;case i.ESCAPE:d.element.val(d.term);d.close(g);break;default:clearTimeout(d.searching);d.searching=setTimeout(function(){if(d.term!=
++d.element.val()){d.selectedItem=null;d.search(null,g)}},d.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!d.options.disabled){d.selectedItem=null;d.previous=d.element.val()}}).bind("blur.autocomplete",function(g){if(!d.options.disabled){clearTimeout(d.searching);d.closing=setTimeout(function(){d.close(g);d._change(g)},150)}});this._initSource();this.response=function(){return d._response.apply(d,arguments)};
++this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=d.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==d.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&d.close()})},1);setTimeout(function(){clearTimeout(d.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==d._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&&
++d.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=d.previous;if(d.element[0]!==e.activeElement){d.element.focus();d.previous=f;setTimeout(function(){d.previous=f;d.selectedItem=b},1)}false!==d._trigger("select",g,{item:b})&&d.element.val(b.value);d.term=d.element.val();d.close(g);d.selectedItem=b},blur:function(){d.menu.element.is(":visible")&&d.element.val()!==d.term&&d.element.val(d.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
++a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(d,e){a.Widget.prototype._setOption.apply(this,arguments);d==="source"&&this._initSource();if(d==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);d==="disabled"&&
++e&&this.xhr&&this.xhr.abort()},_initSource:function(){var d=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){d.xhr&&d.xhr.abort();d.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++c,success:function(b){this.autocompleteRequest===c&&i(b)},error:function(){this.autocompleteRequest===c&&i([])}})}}else this.source=
++this.options.source},search:function(d,e){d=d!=null?d:this.element.val();this.term=this.element.val();if(d.length<this.options.minLength)return this.close(e);clearTimeout(this.closing);if(this._trigger("search",e)!==false)return this._search(d)},_search:function(d){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:d},this.response)},_response:function(d){if(!this.options.disabled&&d&&d.length){d=this._normalize(d);this._suggest(d);this._trigger("open")}else this.close();
++this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(d){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",d)}},_change:function(d){this.previous!==this.element.val()&&this._trigger("change",d,{item:this.selectedItem})},_normalize:function(d){if(d.length&&d[0].label&&d[0].value)return d;return a.map(d,function(e){if(typeof e==="string")return{label:e,value:e};return a.extend({label:e.label||
++e.value,value:e.value||e.label},e)})},_suggest:function(d){var e=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(e,d);this.menu.deactivate();this.menu.refresh();e.show();this._resizeMenu();e.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var d=this.menu.element;d.outerWidth(Math.max(d.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(d,e){var h=this;
++a.each(e,function(g,i){h._renderItem(d,i)})},_renderItem:function(d,e){return a("<li></li>").data("item.autocomplete",e).append(a("<a></a>").text(e.label)).appendTo(d)},_move:function(d,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(d)||this.menu.last()&&/^next/.test(d)){this.element.val(this.term);this.menu.deactivate()}else this.menu[d](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(d){return d.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
++"\\$&")},filter:function(d,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(d,function(g){return h.test(g.label||g.value||g)})}})})(jQuery);
++(function(a){a.widget("ui.menu",{_create:function(){var c=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(d){if(a(d.target).closest(".ui-menu-item a").length){d.preventDefault();c.select(d)}});this.refresh()},refresh:function(){var c=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
++-1).mouseenter(function(d){c.activate(d,a(this).parent())}).mouseleave(function(){c.deactivate()})},activate:function(c,d){this.deactivate();if(this.hasScroll()){var e=d.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+d.height())}this.active=d.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",c,{item:d})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
++this._trigger("blur");this.active=null}},next:function(c){this.move("next",".ui-menu-item:first",c)},previous:function(c){this.move("prev",".ui-menu-item:last",c)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(c,d,e){if(this.active){c=this.active[c+"All"](".ui-menu-item").eq(0);c.length?this.activate(e,c):this.activate(e,this.element.children(d))}else this.activate(e,
++this.element.children(d))},nextPage:function(c){if(this.hasScroll())if(!this.active||this.last())this.activate(c,this.element.children(".ui-menu-item:first"));else{var d=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-d-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(c,h)}else this.activate(c,this.element.children(".ui-menu-item").filter(!this.active||
++this.last()?":first":":last"))},previousPage:function(c){if(this.hasScroll())if(!this.active||this.first())this.activate(c,this.element.children(".ui-menu-item:last"));else{var d=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-d+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(c,result)}else this.activate(c,this.element.children(".ui-menu-item").filter(!this.active||
++this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(c){this._trigger("selected",c,{item:this.active})}})})(jQuery);
++(function(a){var c,d,e,h,g=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var f=b.name,j=b.form,l=a([]);if(f)l=j?a(j).find("[name='"+f+"']"):a("[name='"+f+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",g);if(typeof this.options.disabled!==
++"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,f=this.options,j=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(!j?" ui-state-active":"");if(f.label===null)f.label=this.buttonElement.html();if(this.element.is(":disabled"))f.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!f.disabled){a(this).addClass("ui-state-hover");
++this===c&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){f.disabled||a(this).removeClass(l)}).bind("click.button",function(o){if(f.disabled){o.preventDefault();o.stopImmediatePropagation()}});this.element.bind("focus.button",function(){b.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){b.buttonElement.removeClass("ui-state-focus")});if(j){this.element.bind("change.button",function(){h||b.refresh()});this.buttonElement.bind("mousedown.button",function(o){if(!f.disabled){h=
++false;d=o.pageX;e=o.pageY}}).bind("mouseup.button",function(o){if(!f.disabled)if(d!==o.pageX||e!==o.pageY)h=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed","true");
++var o=b.element[0];i(o).not(o).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(f.disabled)return false;a(this).addClass("ui-state-active");c=this;a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(f.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(o){if(f.disabled)return false;if(o.keyCode==a.ui.keyCode.SPACE||
++o.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(o){o.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",f.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
++"radio"){var b=this.element.parents().filter(":last"),f="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(f);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(f);if(!this.buttonElement.length)this.buttonElement=b.find(f)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},
++widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
++a.Widget.prototype.destroy.call(this)},_setOption:function(b,f){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")f?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")i(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
++"true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
++f=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+j.primary+"'></span>");j.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+j.secondary+"'></span>");if(!this.options.text){o.push(l?"ui-button-icons-only":
++"ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")===
++"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
++a.Widget.prototype.destroy.call(this)}})})(jQuery);
++(function(a,c){function d(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
++"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
++"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
++minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function e(b){return b.bind("mouseout",
++function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
++f.addClass("ui-state-hover");f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==c)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.15"}});var g=(new Date).getTime(),i;a.extend(d.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
++setDefaults:function(b){h(this._defaults,b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,
++"\\\\$1"),input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
++function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f);f.settings.disabled&&this._disableDatepicker(b)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a('<span class="'+this._appendClass+'">'+j+"</span>");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j==
++"focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j=this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("<img/>").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('<button type="button"></button>').addClass(this._triggerClass).html(o==""?j:a("<img/>").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():
++a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;m<o.length;m++)if(o[m].length>n){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b,
++f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker",function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.settings.disabled&&this._disableDatepicker(b);f.dpDiv.css("display","block")}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+=
++1;this._dialogInput=a('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
++2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f=
++a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=
++b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b,
++"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==
++b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f<this._disabledInputs.length;f++)if(this._disabledInputs[f]==b)return true;return false},_getInst:function(b){try{return a.data(b,"datepicker")}catch(f){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(b,f,j){var l=this._getInst(b);if(arguments.length==2&&typeof f=="string")return f=="defaults"?a.extend({},a.datepicker._defaults):l?f=="all"?
++a.extend({},l.settings):this._get(l,f):null;var o=f||{};if(typeof f=="string"){o={};o[f]=j}if(l){this._curInst==l&&this._hideDatepicker();var n=this._getDateDatepicker(b,true),k=this._getMinMaxDate(l,"min"),m=this._getMinMaxDate(l,"max");h(l.settings,o);if(k!==null&&o.dateFormat!==c&&o.minDate===c)l.settings.minDate=this._formatDate(l,k);if(m!==null&&o.dateFormat!==c&&o.maxDate===c)l.settings.maxDate=this._formatDate(l,m);this._attachments(a(b),l);this._autoSize(l);this._setDate(l,n);this._updateAlternate(l);
++this._updateDatepicker(l)}},_changeDatepicker:function(b,f,j){this._optionDatepicker(b,f,j)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,f){if(b=this._getInst(b)){this._setDate(b,f);this._updateDatepicker(b);this._updateAlternate(b)}},_getDateDatepicker:function(b,f){(b=this._getInst(b))&&!b.inline&&this._setDateFromField(b,f);return b?this._getDate(b):null},_doKeyDown:function(b){var f=a.datepicker._getInst(b.target),j=true,l=f.dpDiv.is(".ui-datepicker-rtl");
++f._keyEvent=true;if(a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker();j=false;break;case 13:j=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",f.dpDiv);j[0]&&a.datepicker._selectDay(b.target,f.selectedMonth,f.selectedYear,j[0]);if(b=a.datepicker._get(f,"onSelect")){j=a.datepicker._formatDate(f);b.apply(f.input?f.input[0]:null,[j,f])}else a.datepicker._hideDatepicker();return false;case 27:a.datepicker._hideDatepicker();break;case 33:a.datepicker._adjustDate(b.target,
++b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 35:if(b.ctrlKey||b.metaKey)a.datepicker._clearDate(b.target);j=b.ctrlKey||b.metaKey;break;case 36:if(b.ctrlKey||b.metaKey)a.datepicker._gotoToday(b.target);j=b.ctrlKey||b.metaKey;break;case 37:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?+1:-1,"D");j=
++b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 38:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,-7,"D");j=b.ctrlKey||b.metaKey;break;case 39:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?-1:+1,"D");j=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,
++"stepMonths"),"M");break;case 40:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,+7,"D");j=b.ctrlKey||b.metaKey;break;default:j=false}else if(b.keyCode==36&&b.ctrlKey)a.datepicker._showDatepicker(this);else j=false;if(j){b.preventDefault();b.stopPropagation()}},_doKeyPress:function(b){var f=a.datepicker._getInst(b.target);if(a.datepicker._get(f,"constrainInput")){f=a.datepicker._possibleChars(a.datepicker._get(f,"dateFormat"));var j=String.fromCharCode(b.charCode==c?b.keyCode:b.charCode);
++return b.ctrlKey||b.metaKey||j<" "||!f||f.indexOf(j)>-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input",
++b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j=a.datepicker._get(f,"beforeShow");h(f.settings,j?j.apply(b,[b,f]):{});f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value="";if(!a.datepicker._pos){a.datepicker._pos=
++a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f);j=a.datepicker._checkOffset(f,
++j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover");if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=true;a.effects&&
++a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});b.dpDiv.find("."+
++this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&!b.input.is(":disabled")&&
++b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]||j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(),n=b.input?b.input.outerWidth():
++0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f=this._get(this._getInst(b),
++"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f=this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f);this._curInst=
++null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
++_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"):
++0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth=f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l["selected"+(j=="M"?
++"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b);
++this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b);b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField");if(f){var j=this._get(b,
++"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b));a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"?f.toString():f+"";if(f==
++"")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1<b.length&&b.charAt(H+1)==z)&&H++;return z},v=function(z){var I=u(z);z=new RegExp("^\\d{1,"+
++(z=="@"?14:z=="!"?20:z=="y"&&I?4:z=="o"?3:2)+"}");z=f.substring(y).match(z);if(!z)throw"Missing number at position "+y;y+=z[0].length;return parseInt(z[0],10)},w=function(z,I,N){z=a.map(u(z)?N:I,function(D,E){return[[E,D]]}).sort(function(D,E){return-(D[1].length-E[1].length)});var J=-1;a.each(z,function(D,E){D=E[1];if(f.substr(y,D.length).toLowerCase()==D.toLowerCase()){J=E[0];y+=D.length;return false}});if(J!=-1)return J+1;else throw"Unknown name at position "+y;},x=function(){if(f.charAt(y)!=b.charAt(H))throw"Unexpected literal at position "+
++y;y++},y=0,H=0;H<b.length;H++)if(r)if(b.charAt(H)=="'"&&!u("'"))r=false;else x();else switch(b.charAt(H)){case "d":q=v("d");break;case "D":w("D",o,n);break;case "o":s=v("o");break;case "m":p=v("m");break;case "M":p=w("M",k,m);break;case "y":j=v("y");break;case "@":var C=new Date(v("@"));j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "!":C=new Date((v("!")-this._ticksTo1970)/1E4);j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "'":if(u("'"))x();else r=true;break;default:x()}if(y<
++f.length)throw"Extra/unparsed characters found in date: "+f.substring(y);if(j==-1)j=(new Date).getFullYear();else if(j<100)j+=(new Date).getFullYear()-(new Date).getFullYear()%100+(j<=l?0:-100);if(s>-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",
++RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames:null)||this._defaults.monthNames;var k=function(u){(u=r+1<b.length&&
++b.charAt(r+1)==u)&&r++;return u},m=function(u,v,w){v=""+v;if(k(u))for(;v.length<w;)v="0"+v;return v},p=function(u,v,w,x){return k(u)?x[v]:w[v]},q="",s=false;if(f)for(var r=0;r<b.length;r++)if(s)if(b.charAt(r)=="'"&&!k("'"))s=false;else q+=b.charAt(r);else switch(b.charAt(r)){case "d":q+=m("d",f.getDate(),2);break;case "D":q+=p("D",f.getDay(),l,o);break;case "o":q+=m("o",Math.round(((new Date(f.getFullYear(),f.getMonth(),f.getDate())).getTime()-(new Date(f.getFullYear(),0,0)).getTime())/864E5),3);
++break;case "m":q+=m("m",f.getMonth()+1,2);break;case "M":q+=p("M",f.getMonth(),n,j);break;case "y":q+=k("y")?f.getFullYear():(f.getYear()%100<10?"0":"")+f.getYear()%100;break;case "@":q+=f.getTime();break;case "!":q+=f.getTime()*1E4+this._ticksTo1970;break;case "'":if(k("'"))q+="'";else s=true;break;default:q+=b.charAt(r)}return q},_possibleChars:function(b){for(var f="",j=false,l=function(n){(n=o+1<b.length&&b.charAt(o+1)==n)&&o++;return n},o=0;o<b.length;o++)if(j)if(b.charAt(o)=="'"&&!l("'"))j=
++false;else f+=b.charAt(o);else switch(b.charAt(o)){case "d":case "m":case "y":case "@":f+="0123456789";break;case "D":case "M":return null;case "'":if(l("'"))f+="'";else j=true;break;default:f+=b.charAt(o)}return f},_get:function(b,f){return b.settings[f]!==c?b.settings[f]:this._defaults[f]},_setDateFromField:function(b,f){if(b.input.val()!=b.lastVal){var j=this._get(b,"dateFormat"),l=b.lastVal=b.input?b.input.val():null,o,n;o=n=this._getDefaultDate(b);var k=this._getFormatConfig(b);try{o=this.parseDate(j,
++l,k)||n}catch(m){this.log(m);l=f?"":l}b.selectedDay=o.getDate();b.drawMonth=b.selectedMonth=o.getMonth();b.drawYear=b.selectedYear=o.getFullYear();b.currentDay=l?o.getDate():0;b.currentMonth=l?o.getMonth():0;b.currentYear=l?o.getFullYear():0;this._adjustInstDate(b)}},_getDefaultDate:function(b){return this._restrictMinMax(b,this._determineDate(b,this._get(b,"defaultDate"),new Date))},_determineDate:function(b,f,j){var l=function(n){var k=new Date;k.setDate(k.getDate()+n);return k},o=function(n){try{return a.datepicker.parseDate(a.datepicker._get(b,
++"dateFormat"),n,a.datepicker._getFormatConfig(b))}catch(k){}var m=(n.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,p=m.getFullYear(),q=m.getMonth();m=m.getDate();for(var s=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,r=s.exec(n);r;){switch(r[2]||"d"){case "d":case "D":m+=parseInt(r[1],10);break;case "w":case "W":m+=parseInt(r[1],10)*7;break;case "m":case "M":q+=parseInt(r[1],10);m=Math.min(m,a.datepicker._getDaysInMonth(p,q));break;case "y":case "Y":p+=parseInt(r[1],10);m=Math.min(m,
++a.datepicker._getDaysInMonth(p,q));break}r=s.exec(n)}return new Date(p,q,m)};if(f=(f=f==null||f===""?j:typeof f=="string"?o(f):typeof f=="number"?isNaN(f)?j:l(f):new Date(f.getTime()))&&f.toString()=="Invalid Date"?j:f){f.setHours(0);f.setMinutes(0);f.setSeconds(0);f.setMilliseconds(0)}return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(b){if(!b)return null;b.setHours(b.getHours()>12?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;
++f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay=b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b));if(j=this._get(b,"onSelect")){l=this._formatDate(b);j.apply(b.input?b.input[0]:null,[l,b])}},_getDate:function(b){return!b.currentYear||b.input&&b.input.val()==
++""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(),f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay?new Date(9999,
++9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&w<r?r:w;this._daylightSavingAdjust(new Date(v,m,1))>w;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b));
++w=this._canAdjustMonth(b,-1,v,m)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', -"+p+", 'M');\" title=\""+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>":o?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v,
++m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', +"+p+", 'M');\" title=\""+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>":o?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&&
++b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+g+'.datepicker._hideDatepicker();">'+this._get(b,"closeText")+"</button>":"";l=l?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(j?n:"")+(this._isInRange(b,x)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
++g+".datepicker._gotoToday('#"+b.id+"');\">"+p+"</button>":"")+(j?"":n)+"</div>":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H=this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E<k[0];E++){var P=
++"";this.maxRows=4;for(var L=0;L<k[1];L++){var Q=this._daylightSavingAdjust(new Date(v,m,b.selectedDay)),B=" ui-corner-all",F="";if(q){F+='<div class="ui-datepicker-group';if(k[1]>1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right":"left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+B+'">'+(/all|left/.test(B)&&
++E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var G=p?'<th class="ui-datepicker-week-col">'+this._get(b,"weekHeader")+"</th>":"";for(B=0;B<7;B++){var A=(B+n)%7;G+="<th"+((B+n+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+x[A]+'">'+y[A]+"</span></th>"}F+=G+"</tr></thead><tbody>";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,
++G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R<G;R++){F+="<tr>";var S=!p?"":'<td class="ui-datepicker-week-col">'+this._get(b,"calculateWeek")(A)+"</td>";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&A<r||u&&A>u;S+='<td class="'+((B+n+6)%7>=5?" ui-datepicker-week-end":"")+(K?" ui-datepicker-other-month":"")+(A.getTime()==
++Q.getTime()&&m==b.selectedMonth&&b._keyEvent||J.getTime()==A.getTime()&&J.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(K&&!I?"":" "+M[1]+(A.getTime()==s.getTime()?" "+this._currentClass:"")+(A.getTime()==f.getTime()?" ui-datepicker-today":""))+'"'+((!K||I)&&M[2]?' title="'+M[2]+'"':"")+(O?"":' onclick="DP_jQuery_'+g+".datepicker._selectDay('#"+b.id+"',"+A.getMonth()+","+A.getFullYear()+', this);return false;"')+">"+(K&&!I?"&#xa0;":O?'<span class="ui-state-default">'+
++A.getDate()+"</span>":'<a class="ui-state-default'+(A.getTime()==f.getTime()?" ui-state-highlight":"")+(A.getTime()==s.getTime()?" ui-state-active":"")+(K?" ui-priority-secondary":"")+'" href="#">'+A.getDate()+"</a>")+"</td>";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+"</tr>"}m++;if(m>11){m=0;v++}F+="</tbody></table>"+(q?"</div>"+(k[0]>0&&L==k[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
++"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='<div class="ui-datepicker-title">',u="";if(n||!p)u+='<span class="ui-datepicker-month">'+k[f]+"</span>";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'M');\" >";for(var w=0;w<12;w++)if((!k||w>=l.getMonth())&&
++(!v||w<=o.getMonth()))u+='<option value="'+w+'"'+(w==f?' selected="selected"':"")+">"+m[w]+"</option>";u+="</select>"}s||(r+=u+(n||!(p&&q)?"&#xa0;":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+='<span class="ui-datepicker-year">'+j+"</span>";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f,
++l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()):m;for(b.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'Y');\" >";f<=m;f++)b.yearshtml+='<option value="'+f+'"'+(f==j?' selected="selected"':"")+">"+f+"</option>";b.yearshtml+="</select>";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?"&#xa0;":"")+u;r+="</div>";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j=="Y"?f:0),o=b.drawMonth+
++(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&f<j?j:f;return f=b&&f>b?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear");if(f)f.apply(b.input?
++b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b);j=this._daylightSavingAdjust(new Date(j,
++l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b,
++"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this;
++if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));return this.each(function(){typeof b==
++"string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new d;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.15";window["DP_jQuery_"+g]=a})(jQuery);
++(function(a,c){var d={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
++position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||"&#160;",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
++i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j),
++o=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("<span></span>").addClass("ui-dialog-title").attr("id",
++f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
++g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!==
++i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.scrollTop(),scrollLeft:b.element.scrollLeft()};a.ui.dialog.maxZ+=1;
++b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target===
++l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g,
++function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('<button type="button"></button>').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
++handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition,
++originalSize:l.originalSize,position:l.position,size:l.size}}g=g===c?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize",
++l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "):
++[g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l);
++if(j in d)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"):
++f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||"&#160;"));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g=
++this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height-
++i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.15",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "),
++create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return false})},1);a(document).bind("keydown.dialog-overlay",function(b){if(g.options.closeOnEscape&&b.keyCode&&b.keyCode===a.ui.keyCode.ESCAPE){g.close(b);b.preventDefault()}});a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize)}var i=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
++height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&&a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
++i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g<i?a(window).height()+"px":g+"px"}else return a(document).height()+"px"},width:function(){var g,i;if(a.browser.msie){g=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);i=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return g<i?a(window).width()+"px":g+"px"}else return a(document).width()+"px"},resize:function(){var g=a([]);a.each(a.ui.dialog.overlay.instances,function(){g=
++g.add(this)});g.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}});a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
++(function(a){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e=a.fn.position,h=a.fn.offset;a.fn.position=function(g){if(!g||!g.of)return e.apply(this,arguments);g=a.extend({},g);var i=a(g.of),b=i[0],f=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],l,o,n;if(b.nodeType===9){l=i.width();o=i.height();n={top:0,left:0}}else if(b.setTimeout){l=i.width();o=i.height();n={top:i.scrollTop(),left:i.scrollLeft()}}else if(b.preventDefault){g.at="left top";l=o=0;n={top:g.of.pageY,
++left:g.of.pageX}}else{l=i.outerWidth();o=i.outerHeight();n=i.offset()}a.each(["my","at"],function(){var k=(g[this]||"").split(" ");if(k.length===1)k=c.test(k[0])?k.concat(["center"]):d.test(k[0])?["center"].concat(k):["center","center"];k[0]=c.test(k[0])?k[0]:"center";k[1]=d.test(k[1])?k[1]:"center";g[this]=k});if(f.length===1)f[1]=f[0];j[0]=parseInt(j[0],10)||0;if(j.length===1)j[1]=j[0];j[1]=parseInt(j[1],10)||0;if(g.at[0]==="right")n.left+=l;else if(g.at[0]==="center")n.left+=l/2;if(g.at[1]==="bottom")n.top+=
++o;else if(g.at[1]==="center")n.top+=o/2;n.left+=j[0];n.top+=j[1];return this.each(function(){var k=a(this),m=k.outerWidth(),p=k.outerHeight(),q=parseInt(a.curCSS(this,"marginLeft",true))||0,s=parseInt(a.curCSS(this,"marginTop",true))||0,r=m+q+(parseInt(a.curCSS(this,"marginRight",true))||0),u=p+s+(parseInt(a.curCSS(this,"marginBottom",true))||0),v=a.extend({},n),w;if(g.my[0]==="right")v.left-=m;else if(g.my[0]==="center")v.left-=m/2;if(g.my[1]==="bottom")v.top-=p;else if(g.my[1]==="center")v.top-=
++p/2;v.left=Math.round(v.left);v.top=Math.round(v.top);w={left:v.left-q,top:v.top-s};a.each(["left","top"],function(x,y){a.ui.position[f[x]]&&a.ui.position[f[x]][y](v,{targetWidth:l,targetHeight:o,elemWidth:m,elemHeight:p,collisionPosition:w,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});a.fn.bgiframe&&k.bgiframe();k.offset(a.extend(v,{using:g.using}))})};a.ui.position={fit:{left:function(g,i){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();g.left=
++b>0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+=
++i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g),
++f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery);
++(function(a,c){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
++this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(d){if(d===c)return this._value();this._setOption("value",d);return this},_setOption:function(d,e){if(d==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var d=this.options.value;if(typeof d!=="number")d=0;return Math.min(this.options.max,Math.max(this.min,d))},_percentage:function(){return 100*
++this._value()/this.options.max},_refreshValue:function(){var d=this.value(),e=this._percentage();if(this.oldValue!==d){this.oldValue=d;this._trigger("change")}this.valueDiv.toggle(d>this.min).toggleClass("ui-corner-right",d===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",d)}});a.extend(a.ui.progressbar,{version:"1.8.15"})})(jQuery);
++(function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var c=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=d.values&&d.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
++this.orientation+" ui-widget ui-widget-content ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(d.range){if(d.range===true){if(!d.values)d.values=[this._valueMin(),this._valueMin()];if(d.values.length&&d.values.length!==2)d.values=[d.values[0],d.values[0]]}this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:""))}for(var i=e.length;i<h;i+=1)g.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
++this.handles=e.add(a(g.join("")).appendTo(c.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(d.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle",
++b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!c.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!c._keySliding){c._keySliding=true;a(this).addClass("ui-state-active");l=c._start(b,j);if(l===false)return}break}n=c.options.step;l=c.options.values&&c.options.values.length?
++(o=c.values(j)):(o=c.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=c._valueMin();break;case a.ui.keyCode.END:o=c._valueMax();break;case a.ui.keyCode.PAGE_UP:o=c._trimAlignValue(l+(c._valueMax()-c._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=c._trimAlignValue(l-(c._valueMax()-c._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===c._valueMax())return;o=c._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===c._valueMin())return;o=c._trimAlignValue(l-
++n);break}c._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(c._keySliding){c._keySliding=false;c._stop(b,f);c._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
++return this},_mouseCapture:function(c){var d=this.options,e,h,g,i,b;if(d.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:c.pageX,y:c.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(d.range===true&&this.values(1)===d.min){b+=1;g=a(this.handles[b])}if(this._start(c,b)===false)return false;
++this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();d=g.offset();this._clickOffset=!a(c.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:c.pageX-d.left-g.width()/2,top:c.pageY-d.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(c,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(c){var d=
++this._normValueFromMouse({x:c.pageX,y:c.pageY});this._slide(c,this._handleIndex,d);return false},_mouseStop:function(c){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(c,this._handleIndex);this._change(c,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(c){var d;if(this.orientation==="horizontal"){d=
++this.elementSize.width;c=c.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;c=c.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}d=c/d;if(d>1)d=1;if(d<0)d=0;if(this.orientation==="vertical")d=1-d;c=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+d*c)},_start:function(c,d){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);
++e.values=this.values()}return this._trigger("start",c,e)},_slide:function(c,d,e){var h;if(this.options.values&&this.options.values.length){h=this.values(d?0:1);if(this.options.values.length===2&&this.options.range===true&&(d===0&&e>h||d===1&&e<h))e=h;if(e!==this.values(d)){h=this.values();h[d]=e;c=this._trigger("slide",c,{handle:this.handles[d],value:e,values:h});this.values(d?0:1);c!==false&&this.values(d,e,true)}}else if(e!==this.value()){c=this._trigger("slide",c,{handle:this.handles[d],value:e});
++c!==false&&this.value(e)}},_stop:function(c,d){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);e.values=this.values()}this._trigger("stop",c,e)},_change:function(c,d){if(!this._keySliding&&!this._mouseSliding){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);e.values=this.values()}this._trigger("change",c,e)}},value:function(c){if(arguments.length){this.options.value=
++this._trimAlignValue(c);this._refreshValue();this._change(null,0)}else return this._value()},values:function(c,d){var e,h,g;if(arguments.length>1){this.options.values[c]=this._trimAlignValue(d);this._refreshValue();this._change(null,c)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g<e.length;g+=1){e[g]=this._trimAlignValue(h[g]);this._change(null,g)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(c):
++this.value();else return this._values()},_setOption:function(c,d){var e,h=0;if(a.isArray(this.options.values))h=this.options.values.length;a.Widget.prototype._setOption.apply(this,arguments);switch(c){case "disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
++this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(e=0;e<h;e+=1)this._change(null,e);this._animateOff=false;break}},_value:function(){var c=this.options.value;return c=this._trimAlignValue(c)},_values:function(c){var d,e;if(arguments.length){d=this.options.values[c];
++return d=this._trimAlignValue(d)}else{d=this.options.values.slice();for(e=0;e<d.length;e+=1)d[e]=this._trimAlignValue(d[e]);return d}},_trimAlignValue:function(c){if(c<=this._valueMin())return this._valueMin();if(c>=this._valueMax())return this._valueMax();var d=this.options.step>0?this.options.step:1,e=(c-this._valueMin())%d;c=c-e;if(Math.abs(e)*2>=d)c+=e>0?d:-d;return parseFloat(c.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var c=
++this.options.range,d=this.options,e=this,h=!this._animateOff?d.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,d.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},d.animate);if(o===1)e.range[h?"animate":"css"]({width:g-
++b+"%"},{queue:false,duration:d.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},d.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:d.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,d.animate);if(c==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[h?"animate":"css"]({width:g+"%"},
++d.animate);if(c==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:d.animate});if(c==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},d.animate);if(c==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:d.animate})}}});a.extend(a.ui.slider,{version:"1.8.15"})})(jQuery);
++(function(a,c){function d(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&&
++b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+d()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i=
++a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]||
++(x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
++this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===c){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected=
++this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
++if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
++this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+
++r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal",
++function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")};
++this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected=
++-1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
++a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b=
++a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i,
++b,f){if(f===c)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]);
++o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove();
++if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1<this.anchors.length?1:-1));b.disabled=a.map(a.grep(b.disabled,function(l){return l!=i}),function(l){return l>=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null,
++this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this},
++load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j,
++"cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
++url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.15"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n<f.anchors.length?n:0)},i);o&&o.stopPropagation()});b=f._unrotate||(f._unrotate=!b?function(o){o.clientX&&
++f.rotate(null)}:function(){t=j.selected;l()});if(i){this.element.bind("tabsshow",l);this.anchors.bind(j.event+".tabs",b);l()}else{clearTimeout(f.rotation);this.element.unbind("tabsshow",l);this.anchors.unbind(j.event+".tabs",b);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.css	(revision 15487)
+@@ -0,0 +1,196 @@
++/** Font Family and Sizes */
++
++#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
++	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
++}
++
++#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
++#qunit-tests { font-size: smaller; }
++
++
++/** Resets */
++
++#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
++	margin: 0;
++	padding: 0;
++}
++
++
++/** Header */
++
++#qunit-header {
++	padding: 0.5em 0 0.5em 1em;
++
++	color: #8699a4;
++	background-color: #0d3349;
++
++	font-size: 1.5em;
++	line-height: 1em;
++	font-weight: normal;
++	
++	border-radius: 15px 15px 0 0;
++	-moz-border-radius: 15px 15px 0 0;
++	-webkit-border-top-right-radius: 15px;
++	-webkit-border-top-left-radius: 15px;
++}
++
++#qunit-header a {
++	text-decoration: none;
++	color: #c2ccd1;
++}
++
++#qunit-header a:hover,
++#qunit-header a:focus {
++	color: #fff;
++}
++
++#qunit-banner {
++	height: 5px;
++}
++
++#qunit-testrunner-toolbar {
++	padding: 0em 0 0.5em 2em;
++}
++
++#qunit-userAgent {
++	padding: 0.5em 0 0.5em 2.5em;
++	background-color: #2b81af;
++	color: #fff;
++	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
++}
++
++
++/** Tests: Pass/Fail */
++
++#qunit-tests {
++	list-style-position: inside;
++}
++
++#qunit-tests li {
++	padding: 0.4em 0.5em 0.4em 2.5em;
++	border-bottom: 1px solid #fff;
++	list-style-position: inside;
++}
++
++#qunit-tests li strong {
++	cursor: pointer;
++}
++
++#qunit-tests ol {
++	margin-top: 0.5em;
++	padding: 0.5em;
++	
++	background-color: #fff;
++	
++	border-radius: 15px;
++	-moz-border-radius: 15px;
++	-webkit-border-radius: 15px;
++	
++	box-shadow: inset 0px 2px 13px #999;
++	-moz-box-shadow: inset 0px 2px 13px #999;
++	-webkit-box-shadow: inset 0px 2px 13px #999;
++}
++
++#qunit-tests table {
++	border-collapse: collapse;
++	margin-top: .2em;
++}
++
++#qunit-tests th {
++	text-align: right;
++	vertical-align: top;
++	padding: 0 .5em 0 0;
++}
++
++#qunit-tests td {
++	vertical-align: top;
++}
++
++#qunit-tests pre {
++	margin: 0;
++	white-space: pre-wrap;
++	word-wrap: break-word;
++}
++
++#qunit-tests del {
++	background-color: #e0f2be;
++	color: #374e0c;
++	text-decoration: none;
++}
++
++#qunit-tests ins {
++	background-color: #ffcaca;
++	color: #500;
++	text-decoration: none;
++}
++
++/*** Test Counts */
++
++#qunit-tests b.counts                       { color: black; }
++#qunit-tests b.passed                       { color: #5E740B; }
++#qunit-tests b.failed                       { color: #710909; }
++
++#qunit-tests li li {
++	margin: 0.5em;
++	padding: 0.4em 0.5em 0.4em 0.5em;
++	background-color: #fff;
++	border-bottom: none;
++	list-style-position: inside;
++}
++
++/*** Passing Styles */
++
++#qunit-tests li li.pass {
++	color: #5E740B;
++	background-color: #fff;
++	border-left: 26px solid #C6E746;
++}
++
++#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
++#qunit-tests .pass .test-name               { color: #366097; }
++ 
++#qunit-tests .pass .test-actual,
++#qunit-tests .pass .test-expected           { color: #999999; }
++
++#qunit-banner.qunit-pass                    { background-color: #C6E746; }
++
++/*** Failing Styles */
++
++#qunit-tests li li.fail {
++	color: #710909;
++	background-color: #fff;
++	border-left: 26px solid #EE5757;
++}
++
++#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
++#qunit-tests .fail .test-name,
++#qunit-tests .fail .module-name             { color: #000000; }
++
++#qunit-tests .fail .test-actual             { color: #EE5757; }
++#qunit-tests .fail .test-expected           { color: green;   }
++
++#qunit-banner.qunit-fail, 
++#qunit-testrunner-toolbar                   { background-color: #EE5757; }
++
++
++/** Footer */
++
++#qunit-testresult {
++	padding: 0.5em 0.5em 0.5em 2.5em;
++
++	color: #2b81af;
++	background-color: #D2E0E6;
++
++	border-radius: 0 0 15px 15px;
++	-moz-border-radius: 0 0 15px 15px;
++	-webkit-border-bottom-right-radius: 15px;
++	-webkit-border-bottom-left-radius: 15px;
++}
++
++/** Fixture */
++
++#qunit-fixture {
++	position: absolute;
++	top: -10000px;
++	left: -10000px;
++}
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.js	(revision 15487)
+@@ -0,0 +1,8981 @@
++/*!
++ * jQuery JavaScript Library v1.6.2
++ * http://jquery.com/
++ *
++ * Copyright 2011, John Resig
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * Includes Sizzle.js
++ * http://sizzlejs.com/
++ * Copyright 2011, The Dojo Foundation
++ * Released under the MIT, BSD, and GPL Licenses.
++ *
++ * Date: Thu Jun 30 14:16:56 2011 -0400
++ */
++(function( window, undefined ) {
++
++// Use the correct document accordingly with window argument (sandbox)
++var document = window.document,
++	navigator = window.navigator,
++	location = window.location;
++var jQuery = (function() {
++
++// Define a local copy of jQuery
++var jQuery = function( selector, context ) {
++		// The jQuery object is actually just the init constructor 'enhanced'
++		return new jQuery.fn.init( selector, context, rootjQuery );
++	},
++
++	// Map over jQuery in case of overwrite
++	_jQuery = window.jQuery,
++
++	// Map over the $ in case of overwrite
++	_$ = window.$,
++
++	// A central reference to the root jQuery(document)
++	rootjQuery,
++
++	// A simple way to check for HTML strings or ID strings
++	// (both of which we optimize for)
++	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
++
++	// Check if a string has a non-whitespace character in it
++	rnotwhite = /\S/,
++
++	// Used for trimming whitespace
++	trimLeft = /^\s+/,
++	trimRight = /\s+$/,
++
++	// Check for digits
++	rdigit = /\d/,
++
++	// Match a standalone tag
++	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
++
++	// JSON RegExp
++	rvalidchars = /^[\],:{}\s]*$/,
++	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
++	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
++	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
++
++	// Useragent RegExp
++	rwebkit = /(webkit)[ \/]([\w.]+)/,
++	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
++	rmsie = /(msie) ([\w.]+)/,
++	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
++
++	// Matches dashed string for camelizing
++	rdashAlpha = /-([a-z])/ig,
++
++	// Used by jQuery.camelCase as callback to replace()
++	fcamelCase = function( all, letter ) {
++		return letter.toUpperCase();
++	},
++
++	// Keep a UserAgent string for use with jQuery.browser
++	userAgent = navigator.userAgent,
++
++	// For matching the engine and version of the browser
++	browserMatch,
++
++	// The deferred used on DOM ready
++	readyList,
++
++	// The ready event handler
++	DOMContentLoaded,
++
++	// Save a reference to some core methods
++	toString = Object.prototype.toString,
++	hasOwn = Object.prototype.hasOwnProperty,
++	push = Array.prototype.push,
++	slice = Array.prototype.slice,
++	trim = String.prototype.trim,
++	indexOf = Array.prototype.indexOf,
++
++	// [[Class]] -> type pairs
++	class2type = {};
++
++jQuery.fn = jQuery.prototype = {
++	constructor: jQuery,
++	init: function( selector, context, rootjQuery ) {
++		var match, elem, ret, doc;
++
++		// Handle $(""), $(null), or $(undefined)
++		if ( !selector ) {
++			return this;
++		}
++
++		// Handle $(DOMElement)
++		if ( selector.nodeType ) {
++			this.context = this[0] = selector;
++			this.length = 1;
++			return this;
++		}
++
++		// The body element only exists once, optimize finding it
++		if ( selector === "body" && !context && document.body ) {
++			this.context = document;
++			this[0] = document.body;
++			this.selector = selector;
++			this.length = 1;
++			return this;
++		}
++
++		// Handle HTML strings
++		if ( typeof selector === "string" ) {
++			// Are we dealing with HTML string or an ID?
++			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
++				// Assume that strings that start and end with <> are HTML and skip the regex check
++				match = [ null, selector, null ];
++
++			} else {
++				match = quickExpr.exec( selector );
++			}
++
++			// Verify a match, and that no context was specified for #id
++			if ( match && (match[1] || !context) ) {
++
++				// HANDLE: $(html) -> $(array)
++				if ( match[1] ) {
++					context = context instanceof jQuery ? context[0] : context;
++					doc = (context ? context.ownerDocument || context : document);
++
++					// If a single string is passed in and it's a single tag
++					// just do a createElement and skip the rest
++					ret = rsingleTag.exec( selector );
++
++					if ( ret ) {
++						if ( jQuery.isPlainObject( context ) ) {
++							selector = [ document.createElement( ret[1] ) ];
++							jQuery.fn.attr.call( selector, context, true );
++
++						} else {
++							selector = [ doc.createElement( ret[1] ) ];
++						}
++
++					} else {
++						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
++						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
++					}
++
++					return jQuery.merge( this, selector );
++
++				// HANDLE: $("#id")
++				} else {
++					elem = document.getElementById( match[2] );
++
++					// Check parentNode to catch when Blackberry 4.6 returns
++					// nodes that are no longer in the document #6963
++					if ( elem && elem.parentNode ) {
++						// Handle the case where IE and Opera return items
++						// by name instead of ID
++						if ( elem.id !== match[2] ) {
++							return rootjQuery.find( selector );
++						}
++
++						// Otherwise, we inject the element directly into the jQuery object
++						this.length = 1;
++						this[0] = elem;
++					}
++
++					this.context = document;
++					this.selector = selector;
++					return this;
++				}
++
++			// HANDLE: $(expr, $(...))
++			} else if ( !context || context.jquery ) {
++				return (context || rootjQuery).find( selector );
++
++			// HANDLE: $(expr, context)
++			// (which is just equivalent to: $(context).find(expr)
++			} else {
++				return this.constructor( context ).find( selector );
++			}
++
++		// HANDLE: $(function)
++		// Shortcut for document ready
++		} else if ( jQuery.isFunction( selector ) ) {
++			return rootjQuery.ready( selector );
++		}
++
++		if (selector.selector !== undefined) {
++			this.selector = selector.selector;
++			this.context = selector.context;
++		}
++
++		return jQuery.makeArray( selector, this );
++	},
++
++	// Start with an empty selector
++	selector: "",
++
++	// The current version of jQuery being used
++	jquery: "1.6.2",
++
++	// The default length of a jQuery object is 0
++	length: 0,
++
++	// The number of elements contained in the matched element set
++	size: function() {
++		return this.length;
++	},
++
++	toArray: function() {
++		return slice.call( this, 0 );
++	},
++
++	// Get the Nth element in the matched element set OR
++	// Get the whole matched element set as a clean array
++	get: function( num ) {
++		return num == null ?
++
++			// Return a 'clean' array
++			this.toArray() :
++
++			// Return just the object
++			( num < 0 ? this[ this.length + num ] : this[ num ] );
++	},
++
++	// Take an array of elements and push it onto the stack
++	// (returning the new matched element set)
++	pushStack: function( elems, name, selector ) {
++		// Build a new jQuery matched element set
++		var ret = this.constructor();
++
++		if ( jQuery.isArray( elems ) ) {
++			push.apply( ret, elems );
++
++		} else {
++			jQuery.merge( ret, elems );
++		}
++
++		// Add the old object onto the stack (as a reference)
++		ret.prevObject = this;
++
++		ret.context = this.context;
++
++		if ( name === "find" ) {
++			ret.selector = this.selector + (this.selector ? " " : "") + selector;
++		} else if ( name ) {
++			ret.selector = this.selector + "." + name + "(" + selector + ")";
++		}
++
++		// Return the newly-formed element set
++		return ret;
++	},
++
++	// Execute a callback for every element in the matched set.
++	// (You can seed the arguments with an array of args, but this is
++	// only used internally.)
++	each: function( callback, args ) {
++		return jQuery.each( this, callback, args );
++	},
++
++	ready: function( fn ) {
++		// Attach the listeners
++		jQuery.bindReady();
++
++		// Add the callback
++		readyList.done( fn );
++
++		return this;
++	},
++
++	eq: function( i ) {
++		return i === -1 ?
++			this.slice( i ) :
++			this.slice( i, +i + 1 );
++	},
++
++	first: function() {
++		return this.eq( 0 );
++	},
++
++	last: function() {
++		return this.eq( -1 );
++	},
++
++	slice: function() {
++		return this.pushStack( slice.apply( this, arguments ),
++			"slice", slice.call(arguments).join(",") );
++	},
++
++	map: function( callback ) {
++		return this.pushStack( jQuery.map(this, function( elem, i ) {
++			return callback.call( elem, i, elem );
++		}));
++	},
++
++	end: function() {
++		return this.prevObject || this.constructor(null);
++	},
++
++	// For internal use only.
++	// Behaves like an Array's method, not like a jQuery method.
++	push: push,
++	sort: [].sort,
++	splice: [].splice
++};
++
++// Give the init function the jQuery prototype for later instantiation
++jQuery.fn.init.prototype = jQuery.fn;
++
++jQuery.extend = jQuery.fn.extend = function() {
++	var options, name, src, copy, copyIsArray, clone,
++		target = arguments[0] || {},
++		i = 1,
++		length = arguments.length,
++		deep = false;
++
++	// Handle a deep copy situation
++	if ( typeof target === "boolean" ) {
++		deep = target;
++		target = arguments[1] || {};
++		// skip the boolean and the target
++		i = 2;
++	}
++
++	// Handle case when target is a string or something (possible in deep copy)
++	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
++		target = {};
++	}
++
++	// extend jQuery itself if only one argument is passed
++	if ( length === i ) {
++		target = this;
++		--i;
++	}
++
++	for ( ; i < length; i++ ) {
++		// Only deal with non-null/undefined values
++		if ( (options = arguments[ i ]) != null ) {
++			// Extend the base object
++			for ( name in options ) {
++				src = target[ name ];
++				copy = options[ name ];
++
++				// Prevent never-ending loop
++				if ( target === copy ) {
++					continue;
++				}
++
++				// Recurse if we're merging plain objects or arrays
++				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
++					if ( copyIsArray ) {
++						copyIsArray = false;
++						clone = src && jQuery.isArray(src) ? src : [];
++
++					} else {
++						clone = src && jQuery.isPlainObject(src) ? src : {};
++					}
++
++					// Never move original objects, clone them
++					target[ name ] = jQuery.extend( deep, clone, copy );
++
++				// Don't bring in undefined values
++				} else if ( copy !== undefined ) {
++					target[ name ] = copy;
++				}
++			}
++		}
++	}
++
++	// Return the modified object
++	return target;
++};
++
++jQuery.extend({
++	noConflict: function( deep ) {
++		if ( window.$ === jQuery ) {
++			window.$ = _$;
++		}
++
++		if ( deep && window.jQuery === jQuery ) {
++			window.jQuery = _jQuery;
++		}
++
++		return jQuery;
++	},
++
++	// Is the DOM ready to be used? Set to true once it occurs.
++	isReady: false,
++
++	// A counter to track how many items to wait for before
++	// the ready event fires. See #6781
++	readyWait: 1,
++
++	// Hold (or release) the ready event
++	holdReady: function( hold ) {
++		if ( hold ) {
++			jQuery.readyWait++;
++		} else {
++			jQuery.ready( true );
++		}
++	},
++
++	// Handle when the DOM is ready
++	ready: function( wait ) {
++		// Either a released hold or an DOMready/load event and not yet ready
++		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
++			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
++			if ( !document.body ) {
++				return setTimeout( jQuery.ready, 1 );
++			}
++
++			// Remember that the DOM is ready
++			jQuery.isReady = true;
++
++			// If a normal DOM Ready event fired, decrement, and wait if need be
++			if ( wait !== true && --jQuery.readyWait > 0 ) {
++				return;
++			}
++
++			// If there are functions bound, to execute
++			readyList.resolveWith( document, [ jQuery ] );
++
++			// Trigger any bound ready events
++			if ( jQuery.fn.trigger ) {
++				jQuery( document ).trigger( "ready" ).unbind( "ready" );
++			}
++		}
++	},
++
++	bindReady: function() {
++		if ( readyList ) {
++			return;
++		}
++
++		readyList = jQuery._Deferred();
++
++		// Catch cases where $(document).ready() is called after the
++		// browser event has already occurred.
++		if ( document.readyState === "complete" ) {
++			// Handle it asynchronously to allow scripts the opportunity to delay ready
++			return setTimeout( jQuery.ready, 1 );
++		}
++
++		// Mozilla, Opera and webkit nightlies currently support this event
++		if ( document.addEventListener ) {
++			// Use the handy event callback
++			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
++
++			// A fallback to window.onload, that will always work
++			window.addEventListener( "load", jQuery.ready, false );
++
++		// If IE event model is used
++		} else if ( document.attachEvent ) {
++			// ensure firing before onload,
++			// maybe late but safe also for iframes
++			document.attachEvent( "onreadystatechange", DOMContentLoaded );
++
++			// A fallback to window.onload, that will always work
++			window.attachEvent( "onload", jQuery.ready );
++
++			// If IE and not a frame
++			// continually check to see if the document is ready
++			var toplevel = false;
++
++			try {
++				toplevel = window.frameElement == null;
++			} catch(e) {}
++
++			if ( document.documentElement.doScroll && toplevel ) {
++				doScrollCheck();
++			}
++		}
++	},
++
++	// See test/unit/core.js for details concerning isFunction.
++	// Since version 1.3, DOM methods and functions like alert
++	// aren't supported. They return false on IE (#2968).
++	isFunction: function( obj ) {
++		return jQuery.type(obj) === "function";
++	},
++
++	isArray: Array.isArray || function( obj ) {
++		return jQuery.type(obj) === "array";
++	},
++
++	// A crude way of determining if an object is a window
++	isWindow: function( obj ) {
++		return obj && typeof obj === "object" && "setInterval" in obj;
++	},
++
++	isNaN: function( obj ) {
++		return obj == null || !rdigit.test( obj ) || isNaN( obj );
++	},
++
++	type: function( obj ) {
++		return obj == null ?
++			String( obj ) :
++			class2type[ toString.call(obj) ] || "object";
++	},
++
++	isPlainObject: function( obj ) {
++		// Must be an Object.
++		// Because of IE, we also have to check the presence of the constructor property.
++		// Make sure that DOM nodes and window objects don't pass through, as well
++		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
++			return false;
++		}
++
++		// Not own constructor property must be Object
++		if ( obj.constructor &&
++			!hasOwn.call(obj, "constructor") &&
++			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
++			return false;
++		}
++
++		// Own properties are enumerated firstly, so to speed up,
++		// if last one is own, then all properties are own.
++
++		var key;
++		for ( key in obj ) {}
++
++		return key === undefined || hasOwn.call( obj, key );
++	},
++
++	isEmptyObject: function( obj ) {
++		for ( var name in obj ) {
++			return false;
++		}
++		return true;
++	},
++
++	error: function( msg ) {
++		throw msg;
++	},
++
++	parseJSON: function( data ) {
++		if ( typeof data !== "string" || !data ) {
++			return null;
++		}
++
++		// Make sure leading/trailing whitespace is removed (IE can't handle it)
++		data = jQuery.trim( data );
++
++		// Attempt to parse using the native JSON parser first
++		if ( window.JSON && window.JSON.parse ) {
++			return window.JSON.parse( data );
++		}
++
++		// Make sure the incoming data is actual JSON
++		// Logic borrowed from http://json.org/json2.js
++		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
++			.replace( rvalidtokens, "]" )
++			.replace( rvalidbraces, "")) ) {
++
++			return (new Function( "return " + data ))();
++
++		}
++		jQuery.error( "Invalid JSON: " + data );
++	},
++
++	// Cross-browser xml parsing
++	// (xml & tmp used internally)
++	parseXML: function( data , xml , tmp ) {
++
++		if ( window.DOMParser ) { // Standard
++			tmp = new DOMParser();
++			xml = tmp.parseFromString( data , "text/xml" );
++		} else { // IE
++			xml = new ActiveXObject( "Microsoft.XMLDOM" );
++			xml.async = "false";
++			xml.loadXML( data );
++		}
++
++		tmp = xml.documentElement;
++
++		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
++			jQuery.error( "Invalid XML: " + data );
++		}
++
++		return xml;
++	},
++
++	noop: function() {},
++
++	// Evaluates a script in a global context
++	// Workarounds based on findings by Jim Driscoll
++	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
++	globalEval: function( data ) {
++		if ( data && rnotwhite.test( data ) ) {
++			// We use execScript on Internet Explorer
++			// We use an anonymous function so that context is window
++			// rather than jQuery in Firefox
++			( window.execScript || function( data ) {
++				window[ "eval" ].call( window, data );
++			} )( data );
++		}
++	},
++
++	// Converts a dashed string to camelCased string;
++	// Used by both the css and data modules
++	camelCase: function( string ) {
++		return string.replace( rdashAlpha, fcamelCase );
++	},
++
++	nodeName: function( elem, name ) {
++		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
++	},
++
++	// args is for internal usage only
++	each: function( object, callback, args ) {
++		var name, i = 0,
++			length = object.length,
++			isObj = length === undefined || jQuery.isFunction( object );
++
++		if ( args ) {
++			if ( isObj ) {
++				for ( name in object ) {
++					if ( callback.apply( object[ name ], args ) === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( ; i < length; ) {
++					if ( callback.apply( object[ i++ ], args ) === false ) {
++						break;
++					}
++				}
++			}
++
++		// A special, fast, case for the most common use of each
++		} else {
++			if ( isObj ) {
++				for ( name in object ) {
++					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
++						break;
++					}
++				}
++			} else {
++				for ( ; i < length; ) {
++					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
++						break;
++					}
++				}
++			}
++		}
++
++		return object;
++	},
++
++	// Use native String.trim function wherever possible
++	trim: trim ?
++		function( text ) {
++			return text == null ?
++				"" :
++				trim.call( text );
++		} :
++
++		// Otherwise use our own trimming functionality
++		function( text ) {
++			return text == null ?
++				"" :
++				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
++		},
++
++	// results is for internal usage only
++	makeArray: function( array, results ) {
++		var ret = results || [];
++
++		if ( array != null ) {
++			// The window, strings (and functions) also have 'length'
++			// The extra typeof function check is to prevent crashes
++			// in Safari 2 (See: #3039)
++			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
++			var type = jQuery.type( array );
++
++			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
++				push.call( ret, array );
++			} else {
++				jQuery.merge( ret, array );
++			}
++		}
++
++		return ret;
++	},
++
++	inArray: function( elem, array ) {
++
++		if ( indexOf ) {
++			return indexOf.call( array, elem );
++		}
++
++		for ( var i = 0, length = array.length; i < length; i++ ) {
++			if ( array[ i ] === elem ) {
++				return i;
++			}
++		}
++
++		return -1;
++	},
++
++	merge: function( first, second ) {
++		var i = first.length,
++			j = 0;
++
++		if ( typeof second.length === "number" ) {
++			for ( var l = second.length; j < l; j++ ) {
++				first[ i++ ] = second[ j ];
++			}
++
++		} else {
++			while ( second[j] !== undefined ) {
++				first[ i++ ] = second[ j++ ];
++			}
++		}
++
++		first.length = i;
++
++		return first;
++	},
++
++	grep: function( elems, callback, inv ) {
++		var ret = [], retVal;
++		inv = !!inv;
++
++		// Go through the array, only saving the items
++		// that pass the validator function
++		for ( var i = 0, length = elems.length; i < length; i++ ) {
++			retVal = !!callback( elems[ i ], i );
++			if ( inv !== retVal ) {
++				ret.push( elems[ i ] );
++			}
++		}
++
++		return ret;
++	},
++
++	// arg is for internal usage only
++	map: function( elems, callback, arg ) {
++		var value, key, ret = [],
++			i = 0,
++			length = elems.length,
++			// jquery objects are treated as arrays
++			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
++
++		// Go through the array, translating each of the items to their
++		if ( isArray ) {
++			for ( ; i < length; i++ ) {
++				value = callback( elems[ i ], i, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++
++		// Go through every key on the object,
++		} else {
++			for ( key in elems ) {
++				value = callback( elems[ key ], key, arg );
++
++				if ( value != null ) {
++					ret[ ret.length ] = value;
++				}
++			}
++		}
++
++		// Flatten any nested arrays
++		return ret.concat.apply( [], ret );
++	},
++
++	// A global GUID counter for objects
++	guid: 1,
++
++	// Bind a function to a context, optionally partially applying any
++	// arguments.
++	proxy: function( fn, context ) {
++		if ( typeof context === "string" ) {
++			var tmp = fn[ context ];
++			context = fn;
++			fn = tmp;
++		}
++
++		// Quick check to determine if target is callable, in the spec
++		// this throws a TypeError, but we will just return undefined.
++		if ( !jQuery.isFunction( fn ) ) {
++			return undefined;
++		}
++
++		// Simulated bind
++		var args = slice.call( arguments, 2 ),
++			proxy = function() {
++				return fn.apply( context, args.concat( slice.call( arguments ) ) );
++			};
++
++		// Set the guid of unique handler to the same of original handler, so it can be removed
++		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
++
++		return proxy;
++	},
++
++	// Mutifunctional method to get and set values to a collection
++	// The value/s can optionally be executed if it's a function
++	access: function( elems, key, value, exec, fn, pass ) {
++		var length = elems.length;
++
++		// Setting many attributes
++		if ( typeof key === "object" ) {
++			for ( var k in key ) {
++				jQuery.access( elems, k, key[k], exec, fn, value );
++			}
++			return elems;
++		}
++
++		// Setting one attribute
++		if ( value !== undefined ) {
++			// Optionally, function values get executed if exec is true
++			exec = !pass && exec && jQuery.isFunction(value);
++
++			for ( var i = 0; i < length; i++ ) {
++				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
++			}
++
++			return elems;
++		}
++
++		// Getting an attribute
++		return length ? fn( elems[0], key ) : undefined;
++	},
++
++	now: function() {
++		return (new Date()).getTime();
++	},
++
++	// Use of jQuery.browser is frowned upon.
++	// More details: http://docs.jquery.com/Utilities/jQuery.browser
++	uaMatch: function( ua ) {
++		ua = ua.toLowerCase();
++
++		var match = rwebkit.exec( ua ) ||
++			ropera.exec( ua ) ||
++			rmsie.exec( ua ) ||
++			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
++			[];
++
++		return { browser: match[1] || "", version: match[2] || "0" };
++	},
++
++	sub: function() {
++		function jQuerySub( selector, context ) {
++			return new jQuerySub.fn.init( selector, context );
++		}
++		jQuery.extend( true, jQuerySub, this );
++		jQuerySub.superclass = this;
++		jQuerySub.fn = jQuerySub.prototype = this();
++		jQuerySub.fn.constructor = jQuerySub;
++		jQuerySub.sub = this.sub;
++		jQuerySub.fn.init = function init( selector, context ) {
++			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
++				context = jQuerySub( context );
++			}
++
++			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
++		};
++		jQuerySub.fn.init.prototype = jQuerySub.fn;
++		var rootjQuerySub = jQuerySub(document);
++		return jQuerySub;
++	},
++
++	browser: {}
++});
++
++// Populate the class2type map
++jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
++	class2type[ "[object " + name + "]" ] = name.toLowerCase();
++});
++
++browserMatch = jQuery.uaMatch( userAgent );
++if ( browserMatch.browser ) {
++	jQuery.browser[ browserMatch.browser ] = true;
++	jQuery.browser.version = browserMatch.version;
++}
++
++// Deprecated, use jQuery.browser.webkit instead
++if ( jQuery.browser.webkit ) {
++	jQuery.browser.safari = true;
++}
++
++// IE doesn't match non-breaking spaces with \s
++if ( rnotwhite.test( "\xA0" ) ) {
++	trimLeft = /^[\s\xA0]+/;
++	trimRight = /[\s\xA0]+$/;
++}
++
++// All jQuery objects should point back to these
++rootjQuery = jQuery(document);
++
++// Cleanup functions for the document ready method
++if ( document.addEventListener ) {
++	DOMContentLoaded = function() {
++		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
++		jQuery.ready();
++	};
++
++} else if ( document.attachEvent ) {
++	DOMContentLoaded = function() {
++		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
++		if ( document.readyState === "complete" ) {
++			document.detachEvent( "onreadystatechange", DOMContentLoaded );
++			jQuery.ready();
++		}
++	};
++}
++
++// The DOM ready check for Internet Explorer
++function doScrollCheck() {
++	if ( jQuery.isReady ) {
++		return;
++	}
++
++	try {
++		// If IE is used, use the trick by Diego Perini
++		// http://javascript.nwbox.com/IEContentLoaded/
++		document.documentElement.doScroll("left");
++	} catch(e) {
++		setTimeout( doScrollCheck, 1 );
++		return;
++	}
++
++	// and execute any waiting functions
++	jQuery.ready();
++}
++
++return jQuery;
++
++})();
++
++
++var // Promise methods
++	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
++	// Static reference to slice
++	sliceDeferred = [].slice;
++
++jQuery.extend({
++	// Create a simple deferred (one callbacks list)
++	_Deferred: function() {
++		var // callbacks list
++			callbacks = [],
++			// stored [ context , args ]
++			fired,
++			// to avoid firing when already doing so
++			firing,
++			// flag to know if the deferred has been cancelled
++			cancelled,
++			// the deferred itself
++			deferred  = {
++
++				// done( f1, f2, ...)
++				done: function() {
++					if ( !cancelled ) {
++						var args = arguments,
++							i,
++							length,
++							elem,
++							type,
++							_fired;
++						if ( fired ) {
++							_fired = fired;
++							fired = 0;
++						}
++						for ( i = 0, length = args.length; i < length; i++ ) {
++							elem = args[ i ];
++							type = jQuery.type( elem );
++							if ( type === "array" ) {
++								deferred.done.apply( deferred, elem );
++							} else if ( type === "function" ) {
++								callbacks.push( elem );
++							}
++						}
++						if ( _fired ) {
++							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
++						}
++					}
++					return this;
++				},
++
++				// resolve with given context and args
++				resolveWith: function( context, args ) {
++					if ( !cancelled && !fired && !firing ) {
++						// make sure args are available (#8421)
++						args = args || [];
++						firing = 1;
++						try {
++							while( callbacks[ 0 ] ) {
++								callbacks.shift().apply( context, args );
++							}
++						}
++						finally {
++							fired = [ context, args ];
++							firing = 0;
++						}
++					}
++					return this;
++				},
++
++				// resolve with this as context and given arguments
++				resolve: function() {
++					deferred.resolveWith( this, arguments );
++					return this;
++				},
++
++				// Has this deferred been resolved?
++				isResolved: function() {
++					return !!( firing || fired );
++				},
++
++				// Cancel
++				cancel: function() {
++					cancelled = 1;
++					callbacks = [];
++					return this;
++				}
++			};
++
++		return deferred;
++	},
++
++	// Full fledged deferred (two callbacks list)
++	Deferred: function( func ) {
++		var deferred = jQuery._Deferred(),
++			failDeferred = jQuery._Deferred(),
++			promise;
++		// Add errorDeferred methods, then and promise
++		jQuery.extend( deferred, {
++			then: function( doneCallbacks, failCallbacks ) {
++				deferred.done( doneCallbacks ).fail( failCallbacks );
++				return this;
++			},
++			always: function() {
++				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
++			},
++			fail: failDeferred.done,
++			rejectWith: failDeferred.resolveWith,
++			reject: failDeferred.resolve,
++			isRejected: failDeferred.isResolved,
++			pipe: function( fnDone, fnFail ) {
++				return jQuery.Deferred(function( newDefer ) {
++					jQuery.each( {
++						done: [ fnDone, "resolve" ],
++						fail: [ fnFail, "reject" ]
++					}, function( handler, data ) {
++						var fn = data[ 0 ],
++							action = data[ 1 ],
++							returned;
++						if ( jQuery.isFunction( fn ) ) {
++							deferred[ handler ](function() {
++								returned = fn.apply( this, arguments );
++								if ( returned && jQuery.isFunction( returned.promise ) ) {
++									returned.promise().then( newDefer.resolve, newDefer.reject );
++								} else {
++									newDefer[ action ]( returned );
++								}
++							});
++						} else {
++							deferred[ handler ]( newDefer[ action ] );
++						}
++					});
++				}).promise();
++			},
++			// Get a promise for this deferred
++			// If obj is provided, the promise aspect is added to the object
++			promise: function( obj ) {
++				if ( obj == null ) {
++					if ( promise ) {
++						return promise;
++					}
++					promise = obj = {};
++				}
++				var i = promiseMethods.length;
++				while( i-- ) {
++					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
++				}
++				return obj;
++			}
++		});
++		// Make sure only one callback list will be used
++		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
++		// Unexpose cancel
++		delete deferred.cancel;
++		// Call given func if any
++		if ( func ) {
++			func.call( deferred, deferred );
++		}
++		return deferred;
++	},
++
++	// Deferred helper
++	when: function( firstParam ) {
++		var args = arguments,
++			i = 0,
++			length = args.length,
++			count = length,
++			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
++				firstParam :
++				jQuery.Deferred();
++		function resolveFunc( i ) {
++			return function( value ) {
++				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
++				if ( !( --count ) ) {
++					// Strange bug in FF4:
++					// Values changed onto the arguments object sometimes end up as undefined values
++					// outside the $.when method. Cloning the object into a fresh array solves the issue
++					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
++				}
++			};
++		}
++		if ( length > 1 ) {
++			for( ; i < length; i++ ) {
++				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
++					args[ i ].promise().then( resolveFunc(i), deferred.reject );
++				} else {
++					--count;
++				}
++			}
++			if ( !count ) {
++				deferred.resolveWith( deferred, args );
++			}
++		} else if ( deferred !== firstParam ) {
++			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
++		}
++		return deferred.promise();
++	}
++});
++
++
++
++jQuery.support = (function() {
++
++	var div = document.createElement( "div" ),
++		documentElement = document.documentElement,
++		all,
++		a,
++		select,
++		opt,
++		input,
++		marginDiv,
++		support,
++		fragment,
++		body,
++		testElementParent,
++		testElement,
++		testElementStyle,
++		tds,
++		events,
++		eventName,
++		i,
++		isSupported;
++
++	// Preliminary tests
++	div.setAttribute("className", "t");
++	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
++
++	all = div.getElementsByTagName( "*" );
++	a = div.getElementsByTagName( "a" )[ 0 ];
++
++	// Can't get basic test support
++	if ( !all || !all.length || !a ) {
++		return {};
++	}
++
++	// First batch of supports tests
++	select = document.createElement( "select" );
++	opt = select.appendChild( document.createElement("option") );
++	input = div.getElementsByTagName( "input" )[ 0 ];
++
++	support = {
++		// IE strips leading whitespace when .innerHTML is used
++		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
++
++		// Make sure that tbody elements aren't automatically inserted
++		// IE will insert them into empty tables
++		tbody: !div.getElementsByTagName( "tbody" ).length,
++
++		// Make sure that link elements get serialized correctly by innerHTML
++		// This requires a wrapper element in IE
++		htmlSerialize: !!div.getElementsByTagName( "link" ).length,
++
++		// Get the style information from getAttribute
++		// (IE uses .cssText instead)
++		style: /top/.test( a.getAttribute("style") ),
++
++		// Make sure that URLs aren't manipulated
++		// (IE normalizes it by default)
++		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
++
++		// Make sure that element opacity exists
++		// (IE uses filter instead)
++		// Use a regex to work around a WebKit issue. See #5145
++		opacity: /^0.55$/.test( a.style.opacity ),
++
++		// Verify style float existence
++		// (IE uses styleFloat instead of cssFloat)
++		cssFloat: !!a.style.cssFloat,
++
++		// Make sure that if no value is specified for a checkbox
++		// that it defaults to "on".
++		// (WebKit defaults to "" instead)
++		checkOn: ( input.value === "on" ),
++
++		// Make sure that a selected-by-default option has a working selected property.
++		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
++		optSelected: opt.selected,
++
++		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
++		getSetAttribute: div.className !== "t",
++
++		// Will be defined later
++		submitBubbles: true,
++		changeBubbles: true,
++		focusinBubbles: false,
++		deleteExpando: true,
++		noCloneEvent: true,
++		inlineBlockNeedsLayout: false,
++		shrinkWrapBlocks: false,
++		reliableMarginRight: true
++	};
++
++	// Make sure checked status is properly cloned
++	input.checked = true;
++	support.noCloneChecked = input.cloneNode( true ).checked;
++
++	// Make sure that the options inside disabled selects aren't marked as disabled
++	// (WebKit marks them as disabled)
++	select.disabled = true;
++	support.optDisabled = !opt.disabled;
++
++	// Test to see if it's possible to delete an expando from an element
++	// Fails in Internet Explorer
++	try {
++		delete div.test;
++	} catch( e ) {
++		support.deleteExpando = false;
++	}
++
++	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
++		div.attachEvent( "onclick", function() {
++			// Cloning a node shouldn't copy over any
++			// bound event handlers (IE does this)
++			support.noCloneEvent = false;
++		});
++		div.cloneNode( true ).fireEvent( "onclick" );
++	}
++
++	// Check if a radio maintains it's value
++	// after being appended to the DOM
++	input = document.createElement("input");
++	input.value = "t";
++	input.setAttribute("type", "radio");
++	support.radioValue = input.value === "t";
++
++	input.setAttribute("checked", "checked");
++	div.appendChild( input );
++	fragment = document.createDocumentFragment();
++	fragment.appendChild( div.firstChild );
++
++	// WebKit doesn't clone checked state correctly in fragments
++	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
++
++	div.innerHTML = "";
++
++	// Figure out if the W3C box model works as expected
++	div.style.width = div.style.paddingLeft = "1px";
++
++	body = document.getElementsByTagName( "body" )[ 0 ];
++	// We use our own, invisible, body unless the body is already present
++	// in which case we use a div (#9239)
++	testElement = document.createElement( body ? "div" : "body" );
++	testElementStyle = {
++		visibility: "hidden",
++		width: 0,
++		height: 0,
++		border: 0,
++		margin: 0
++	};
++	if ( body ) {
++		jQuery.extend( testElementStyle, {
++			position: "absolute",
++			left: -1000,
++			top: -1000
++		});
++	}
++	for ( i in testElementStyle ) {
++		testElement.style[ i ] = testElementStyle[ i ];
++	}
++	testElement.appendChild( div );
++	testElementParent = body || documentElement;
++	testElementParent.insertBefore( testElement, testElementParent.firstChild );
++
++	// Check if a disconnected checkbox will retain its checked
++	// value of true after appended to the DOM (IE6/7)
++	support.appendChecked = input.checked;
++
++	support.boxModel = div.offsetWidth === 2;
++
++	if ( "zoom" in div.style ) {
++		// Check if natively block-level elements act like inline-block
++		// elements when setting their display to 'inline' and giving
++		// them layout
++		// (IE < 8 does this)
++		div.style.display = "inline";
++		div.style.zoom = 1;
++		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
++
++		// Check if elements with layout shrink-wrap their children
++		// (IE 6 does this)
++		div.style.display = "";
++		div.innerHTML = "<div style='width:4px;'></div>";
++		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
++	}
++
++	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
++	tds = div.getElementsByTagName( "td" );
++
++	// Check if table cells still have offsetWidth/Height when they are set
++	// to display:none and there are still other visible table cells in a
++	// table row; if so, offsetWidth/Height are not reliable for use when
++	// determining if an element has been hidden directly using
++	// display:none (it is still safe to use offsets if a parent element is
++	// hidden; don safety goggles and see bug #4512 for more information).
++	// (only IE 8 fails this test)
++	isSupported = ( tds[ 0 ].offsetHeight === 0 );
++
++	tds[ 0 ].style.display = "";
++	tds[ 1 ].style.display = "none";
++
++	// Check if empty table cells still have offsetWidth/Height
++	// (IE < 8 fail this test)
++	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
++	div.innerHTML = "";
++
++	// Check if div with explicit width and no margin-right incorrectly
++	// gets computed margin-right based on width of container. For more
++	// info see bug #3333
++	// Fails in WebKit before Feb 2011 nightlies
++	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++	if ( document.defaultView && document.defaultView.getComputedStyle ) {
++		marginDiv = document.createElement( "div" );
++		marginDiv.style.width = "0";
++		marginDiv.style.marginRight = "0";
++		div.appendChild( marginDiv );
++		support.reliableMarginRight =
++			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
++	}
++
++	// Remove the body element we added
++	testElement.innerHTML = "";
++	testElementParent.removeChild( testElement );
++
++	// Technique from Juriy Zaytsev
++	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
++	// We only care about the case where non-standard event systems
++	// are used, namely in IE. Short-circuiting here helps us to
++	// avoid an eval call (in setAttribute) which can cause CSP
++	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
++	if ( div.attachEvent ) {
++		for( i in {
++			submit: 1,
++			change: 1,
++			focusin: 1
++		} ) {
++			eventName = "on" + i;
++			isSupported = ( eventName in div );
++			if ( !isSupported ) {
++				div.setAttribute( eventName, "return;" );
++				isSupported = ( typeof div[ eventName ] === "function" );
++			}
++			support[ i + "Bubbles" ] = isSupported;
++		}
++	}
++
++	// Null connected elements to avoid leaks in IE
++	testElement = fragment = select = opt = body = marginDiv = div = input = null;
++
++	return support;
++})();
++
++// Keep track of boxModel
++jQuery.boxModel = jQuery.support.boxModel;
++
++
++
++
++var rbrace = /^(?:\{.*\}|\[.*\])$/,
++	rmultiDash = /([a-z])([A-Z])/g;
++
++jQuery.extend({
++	cache: {},
++
++	// Please use with caution
++	uuid: 0,
++
++	// Unique for each copy of jQuery on the page
++	// Non-digits removed to match rinlinejQuery
++	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
++
++	// The following elements throw uncatchable exceptions if you
++	// attempt to add expando properties to them.
++	noData: {
++		"embed": true,
++		// Ban all objects except for Flash (which handle expandos)
++		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
++		"applet": true
++	},
++
++	hasData: function( elem ) {
++		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
++
++		return !!elem && !isEmptyDataObject( elem );
++	},
++
++	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
++		if ( !jQuery.acceptData( elem ) ) {
++			return;
++		}
++
++		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
++
++			// We have to handle DOM nodes and JS objects differently because IE6-7
++			// can't GC object references properly across the DOM-JS boundary
++			isNode = elem.nodeType,
++
++			// Only DOM nodes need the global jQuery cache; JS object data is
++			// attached directly to the object so GC can occur automatically
++			cache = isNode ? jQuery.cache : elem,
++
++			// Only defining an ID for JS objects if its cache already exists allows
++			// the code to shortcut on the same path as a DOM node with no cache
++			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
++
++		// Avoid doing any more work than we need to when trying to get data on an
++		// object that has no data at all
++		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
++			return;
++		}
++
++		if ( !id ) {
++			// Only DOM nodes need a new unique ID for each element since their data
++			// ends up in the global cache
++			if ( isNode ) {
++				elem[ jQuery.expando ] = id = ++jQuery.uuid;
++			} else {
++				id = jQuery.expando;
++			}
++		}
++
++		if ( !cache[ id ] ) {
++			cache[ id ] = {};
++
++			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
++			// metadata on plain JS objects when the object is serialized using
++			// JSON.stringify
++			if ( !isNode ) {
++				cache[ id ].toJSON = jQuery.noop;
++			}
++		}
++
++		// An object can be passed to jQuery.data instead of a key/value pair; this gets
++		// shallow copied over onto the existing cache
++		if ( typeof name === "object" || typeof name === "function" ) {
++			if ( pvt ) {
++				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
++			} else {
++				cache[ id ] = jQuery.extend(cache[ id ], name);
++			}
++		}
++
++		thisCache = cache[ id ];
++
++		// Internal jQuery data is stored in a separate object inside the object's data
++		// cache in order to avoid key collisions between internal data and user-defined
++		// data
++		if ( pvt ) {
++			if ( !thisCache[ internalKey ] ) {
++				thisCache[ internalKey ] = {};
++			}
++
++			thisCache = thisCache[ internalKey ];
++		}
++
++		if ( data !== undefined ) {
++			thisCache[ jQuery.camelCase( name ) ] = data;
++		}
++
++		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
++		// not attempt to inspect the internal events object using jQuery.data, as this
++		// internal data object is undocumented and subject to change.
++		if ( name === "events" && !thisCache[name] ) {
++			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
++		}
++
++		return getByName ? 
++			// Check for both converted-to-camel and non-converted data property names
++			thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] :
++			thisCache;
++	},
++
++	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
++		if ( !jQuery.acceptData( elem ) ) {
++			return;
++		}
++
++		var internalKey = jQuery.expando, isNode = elem.nodeType,
++
++			// See jQuery.data for more information
++			cache = isNode ? jQuery.cache : elem,
++
++			// See jQuery.data for more information
++			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
++
++		// If there is already no cache entry for this object, there is no
++		// purpose in continuing
++		if ( !cache[ id ] ) {
++			return;
++		}
++
++		if ( name ) {
++			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
++
++			if ( thisCache ) {
++				delete thisCache[ name ];
++
++				// If there is no data left in the cache, we want to continue
++				// and let the cache object itself get destroyed
++				if ( !isEmptyDataObject(thisCache) ) {
++					return;
++				}
++			}
++		}
++
++		// See jQuery.data for more information
++		if ( pvt ) {
++			delete cache[ id ][ internalKey ];
++
++			// Don't destroy the parent cache unless the internal data object
++			// had been the only thing left in it
++			if ( !isEmptyDataObject(cache[ id ]) ) {
++				return;
++			}
++		}
++
++		var internalCache = cache[ id ][ internalKey ];
++
++		// Browsers that fail expando deletion also refuse to delete expandos on
++		// the window, but it will allow it on all other JS objects; other browsers
++		// don't care
++		if ( jQuery.support.deleteExpando || cache != window ) {
++			delete cache[ id ];
++		} else {
++			cache[ id ] = null;
++		}
++
++		// We destroyed the entire user cache at once because it's faster than
++		// iterating through each key, but we need to continue to persist internal
++		// data if it existed
++		if ( internalCache ) {
++			cache[ id ] = {};
++			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
++			// metadata on plain JS objects when the object is serialized using
++			// JSON.stringify
++			if ( !isNode ) {
++				cache[ id ].toJSON = jQuery.noop;
++			}
++
++			cache[ id ][ internalKey ] = internalCache;
++
++		// Otherwise, we need to eliminate the expando on the node to avoid
++		// false lookups in the cache for entries that no longer exist
++		} else if ( isNode ) {
++			// IE does not allow us to delete expando properties from nodes,
++			// nor does it have a removeAttribute function on Document nodes;
++			// we must handle all of these cases
++			if ( jQuery.support.deleteExpando ) {
++				delete elem[ jQuery.expando ];
++			} else if ( elem.removeAttribute ) {
++				elem.removeAttribute( jQuery.expando );
++			} else {
++				elem[ jQuery.expando ] = null;
++			}
++		}
++	},
++
++	// For internal use only.
++	_data: function( elem, name, data ) {
++		return jQuery.data( elem, name, data, true );
++	},
++
++	// A method for determining if a DOM node can handle the data expando
++	acceptData: function( elem ) {
++		if ( elem.nodeName ) {
++			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
++
++			if ( match ) {
++				return !(match === true || elem.getAttribute("classid") !== match);
++			}
++		}
++
++		return true;
++	}
++});
++
++jQuery.fn.extend({
++	data: function( key, value ) {
++		var data = null;
++
++		if ( typeof key === "undefined" ) {
++			if ( this.length ) {
++				data = jQuery.data( this[0] );
++
++				if ( this[0].nodeType === 1 ) {
++			    var attr = this[0].attributes, name;
++					for ( var i = 0, l = attr.length; i < l; i++ ) {
++						name = attr[i].name;
++
++						if ( name.indexOf( "data-" ) === 0 ) {
++							name = jQuery.camelCase( name.substring(5) );
++
++							dataAttr( this[0], name, data[ name ] );
++						}
++					}
++				}
++			}
++
++			return data;
++
++		} else if ( typeof key === "object" ) {
++			return this.each(function() {
++				jQuery.data( this, key );
++			});
++		}
++
++		var parts = key.split(".");
++		parts[1] = parts[1] ? "." + parts[1] : "";
++
++		if ( value === undefined ) {
++			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
++
++			// Try to fetch any internally stored data first
++			if ( data === undefined && this.length ) {
++				data = jQuery.data( this[0], key );
++				data = dataAttr( this[0], key, data );
++			}
++
++			return data === undefined && parts[1] ?
++				this.data( parts[0] ) :
++				data;
++
++		} else {
++			return this.each(function() {
++				var $this = jQuery( this ),
++					args = [ parts[0], value ];
++
++				$this.triggerHandler( "setData" + parts[1] + "!", args );
++				jQuery.data( this, key, value );
++				$this.triggerHandler( "changeData" + parts[1] + "!", args );
++			});
++		}
++	},
++
++	removeData: function( key ) {
++		return this.each(function() {
++			jQuery.removeData( this, key );
++		});
++	}
++});
++
++function dataAttr( elem, key, data ) {
++	// If nothing was found internally, try to fetch any
++	// data from the HTML5 data-* attribute
++	if ( data === undefined && elem.nodeType === 1 ) {
++		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
++
++		data = elem.getAttribute( name );
++
++		if ( typeof data === "string" ) {
++			try {
++				data = data === "true" ? true :
++				data === "false" ? false :
++				data === "null" ? null :
++				!jQuery.isNaN( data ) ? parseFloat( data ) :
++					rbrace.test( data ) ? jQuery.parseJSON( data ) :
++					data;
++			} catch( e ) {}
++
++			// Make sure we set the data so it isn't changed later
++			jQuery.data( elem, key, data );
++
++		} else {
++			data = undefined;
++		}
++	}
++
++	return data;
++}
++
++// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
++// property to be considered empty objects; this property always exists in
++// order to make sure JSON.stringify does not expose internal metadata
++function isEmptyDataObject( obj ) {
++	for ( var name in obj ) {
++		if ( name !== "toJSON" ) {
++			return false;
++		}
++	}
++
++	return true;
++}
++
++
++
++
++function handleQueueMarkDefer( elem, type, src ) {
++	var deferDataKey = type + "defer",
++		queueDataKey = type + "queue",
++		markDataKey = type + "mark",
++		defer = jQuery.data( elem, deferDataKey, undefined, true );
++	if ( defer &&
++		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
++		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
++		// Give room for hard-coded callbacks to fire first
++		// and eventually mark/queue something else on the element
++		setTimeout( function() {
++			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
++				!jQuery.data( elem, markDataKey, undefined, true ) ) {
++				jQuery.removeData( elem, deferDataKey, true );
++				defer.resolve();
++			}
++		}, 0 );
++	}
++}
++
++jQuery.extend({
++
++	_mark: function( elem, type ) {
++		if ( elem ) {
++			type = (type || "fx") + "mark";
++			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
++		}
++	},
++
++	_unmark: function( force, elem, type ) {
++		if ( force !== true ) {
++			type = elem;
++			elem = force;
++			force = false;
++		}
++		if ( elem ) {
++			type = type || "fx";
++			var key = type + "mark",
++				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
++			if ( count ) {
++				jQuery.data( elem, key, count, true );
++			} else {
++				jQuery.removeData( elem, key, true );
++				handleQueueMarkDefer( elem, type, "mark" );
++			}
++		}
++	},
++
++	queue: function( elem, type, data ) {
++		if ( elem ) {
++			type = (type || "fx") + "queue";
++			var q = jQuery.data( elem, type, undefined, true );
++			// Speed up dequeue by getting out quickly if this is just a lookup
++			if ( data ) {
++				if ( !q || jQuery.isArray(data) ) {
++					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
++				} else {
++					q.push( data );
++				}
++			}
++			return q || [];
++		}
++	},
++
++	dequeue: function( elem, type ) {
++		type = type || "fx";
++
++		var queue = jQuery.queue( elem, type ),
++			fn = queue.shift(),
++			defer;
++
++		// If the fx queue is dequeued, always remove the progress sentinel
++		if ( fn === "inprogress" ) {
++			fn = queue.shift();
++		}
++
++		if ( fn ) {
++			// Add a progress sentinel to prevent the fx queue from being
++			// automatically dequeued
++			if ( type === "fx" ) {
++				queue.unshift("inprogress");
++			}
++
++			fn.call(elem, function() {
++				jQuery.dequeue(elem, type);
++			});
++		}
++
++		if ( !queue.length ) {
++			jQuery.removeData( elem, type + "queue", true );
++			handleQueueMarkDefer( elem, type, "queue" );
++		}
++	}
++});
++
++jQuery.fn.extend({
++	queue: function( type, data ) {
++		if ( typeof type !== "string" ) {
++			data = type;
++			type = "fx";
++		}
++
++		if ( data === undefined ) {
++			return jQuery.queue( this[0], type );
++		}
++		return this.each(function() {
++			var queue = jQuery.queue( this, type, data );
++
++			if ( type === "fx" && queue[0] !== "inprogress" ) {
++				jQuery.dequeue( this, type );
++			}
++		});
++	},
++	dequeue: function( type ) {
++		return this.each(function() {
++			jQuery.dequeue( this, type );
++		});
++	},
++	// Based off of the plugin by Clint Helfers, with permission.
++	// http://blindsignals.com/index.php/2009/07/jquery-delay/
++	delay: function( time, type ) {
++		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
++		type = type || "fx";
++
++		return this.queue( type, function() {
++			var elem = this;
++			setTimeout(function() {
++				jQuery.dequeue( elem, type );
++			}, time );
++		});
++	},
++	clearQueue: function( type ) {
++		return this.queue( type || "fx", [] );
++	},
++	// Get a promise resolved when queues of a certain type
++	// are emptied (fx is the type by default)
++	promise: function( type, object ) {
++		if ( typeof type !== "string" ) {
++			object = type;
++			type = undefined;
++		}
++		type = type || "fx";
++		var defer = jQuery.Deferred(),
++			elements = this,
++			i = elements.length,
++			count = 1,
++			deferDataKey = type + "defer",
++			queueDataKey = type + "queue",
++			markDataKey = type + "mark",
++			tmp;
++		function resolve() {
++			if ( !( --count ) ) {
++				defer.resolveWith( elements, [ elements ] );
++			}
++		}
++		while( i-- ) {
++			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
++					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
++						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
++					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
++				count++;
++				tmp.done( resolve );
++			}
++		}
++		resolve();
++		return defer.promise();
++	}
++});
++
++
++
++
++var rclass = /[\n\t\r]/g,
++	rspace = /\s+/,
++	rreturn = /\r/g,
++	rtype = /^(?:button|input)$/i,
++	rfocusable = /^(?:button|input|object|select|textarea)$/i,
++	rclickable = /^a(?:rea)?$/i,
++	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
++	rinvalidChar = /\:|^on/,
++	formHook, boolHook;
++
++jQuery.fn.extend({
++	attr: function( name, value ) {
++		return jQuery.access( this, name, value, true, jQuery.attr );
++	},
++
++	removeAttr: function( name ) {
++		return this.each(function() {
++			jQuery.removeAttr( this, name );
++		});
++	},
++	
++	prop: function( name, value ) {
++		return jQuery.access( this, name, value, true, jQuery.prop );
++	},
++	
++	removeProp: function( name ) {
++		name = jQuery.propFix[ name ] || name;
++		return this.each(function() {
++			// try/catch handles cases where IE balks (such as removing a property on window)
++			try {
++				this[ name ] = undefined;
++				delete this[ name ];
++			} catch( e ) {}
++		});
++	},
++
++	addClass: function( value ) {
++		var classNames, i, l, elem,
++			setClass, c, cl;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).addClass( value.call(this, j, this.className) );
++			});
++		}
++
++		if ( value && typeof value === "string" ) {
++			classNames = value.split( rspace );
++
++			for ( i = 0, l = this.length; i < l; i++ ) {
++				elem = this[ i ];
++
++				if ( elem.nodeType === 1 ) {
++					if ( !elem.className && classNames.length === 1 ) {
++						elem.className = value;
++
++					} else {
++						setClass = " " + elem.className + " ";
++
++						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
++							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
++								setClass += classNames[ c ] + " ";
++							}
++						}
++						elem.className = jQuery.trim( setClass );
++					}
++				}
++			}
++		}
++
++		return this;
++	},
++
++	removeClass: function( value ) {
++		var classNames, i, l, elem, className, c, cl;
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( j ) {
++				jQuery( this ).removeClass( value.call(this, j, this.className) );
++			});
++		}
++
++		if ( (value && typeof value === "string") || value === undefined ) {
++			classNames = (value || "").split( rspace );
++
++			for ( i = 0, l = this.length; i < l; i++ ) {
++				elem = this[ i ];
++
++				if ( elem.nodeType === 1 && elem.className ) {
++					if ( value ) {
++						className = (" " + elem.className + " ").replace( rclass, " " );
++						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
++							className = className.replace(" " + classNames[ c ] + " ", " ");
++						}
++						elem.className = jQuery.trim( className );
++
++					} else {
++						elem.className = "";
++					}
++				}
++			}
++		}
++
++		return this;
++	},
++
++	toggleClass: function( value, stateVal ) {
++		var type = typeof value,
++			isBool = typeof stateVal === "boolean";
++
++		if ( jQuery.isFunction( value ) ) {
++			return this.each(function( i ) {
++				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
++			});
++		}
++
++		return this.each(function() {
++			if ( type === "string" ) {
++				// toggle individual class names
++				var className,
++					i = 0,
++					self = jQuery( this ),
++					state = stateVal,
++					classNames = value.split( rspace );
++
++				while ( (className = classNames[ i++ ]) ) {
++					// check each className given, space seperated list
++					state = isBool ? state : !self.hasClass( className );
++					self[ state ? "addClass" : "removeClass" ]( className );
++				}
++
++			} else if ( type === "undefined" || type === "boolean" ) {
++				if ( this.className ) {
++					// store className if set
++					jQuery._data( this, "__className__", this.className );
++				}
++
++				// toggle whole className
++				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
++			}
++		});
++	},
++
++	hasClass: function( selector ) {
++		var className = " " + selector + " ";
++		for ( var i = 0, l = this.length; i < l; i++ ) {
++			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
++				return true;
++			}
++		}
++
++		return false;
++	},
++
++	val: function( value ) {
++		var hooks, ret,
++			elem = this[0];
++		
++		if ( !arguments.length ) {
++			if ( elem ) {
++				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
++
++				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
++					return ret;
++				}
++
++				ret = elem.value;
++
++				return typeof ret === "string" ? 
++					// handle most common string cases
++					ret.replace(rreturn, "") : 
++					// handle cases where value is null/undef or number
++					ret == null ? "" : ret;
++			}
++
++			return undefined;
++		}
++
++		var isFunction = jQuery.isFunction( value );
++
++		return this.each(function( i ) {
++			var self = jQuery(this), val;
++
++			if ( this.nodeType !== 1 ) {
++				return;
++			}
++
++			if ( isFunction ) {
++				val = value.call( this, i, self.val() );
++			} else {
++				val = value;
++			}
++
++			// Treat null/undefined as ""; convert numbers to string
++			if ( val == null ) {
++				val = "";
++			} else if ( typeof val === "number" ) {
++				val += "";
++			} else if ( jQuery.isArray( val ) ) {
++				val = jQuery.map(val, function ( value ) {
++					return value == null ? "" : value + "";
++				});
++			}
++
++			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
++
++			// If set returns undefined, fall back to normal setting
++			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
++				this.value = val;
++			}
++		});
++	}
++});
++
++jQuery.extend({
++	valHooks: {
++		option: {
++			get: function( elem ) {
++				// attributes.value is undefined in Blackberry 4.7 but
++				// uses .value. See #6932
++				var val = elem.attributes.value;
++				return !val || val.specified ? elem.value : elem.text;
++			}
++		},
++		select: {
++			get: function( elem ) {
++				var value,
++					index = elem.selectedIndex,
++					values = [],
++					options = elem.options,
++					one = elem.type === "select-one";
++
++				// Nothing was selected
++				if ( index < 0 ) {
++					return null;
++				}
++
++				// Loop through all the selected options
++				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
++					var option = options[ i ];
++
++					// Don't return options that are disabled or in a disabled optgroup
++					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
++							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
++
++						// Get the specific value for the option
++						value = jQuery( option ).val();
++
++						// We don't need an array for one selects
++						if ( one ) {
++							return value;
++						}
++
++						// Multi-Selects return an array
++						values.push( value );
++					}
++				}
++
++				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
++				if ( one && !values.length && options.length ) {
++					return jQuery( options[ index ] ).val();
++				}
++
++				return values;
++			},
++
++			set: function( elem, value ) {
++				var values = jQuery.makeArray( value );
++
++				jQuery(elem).find("option").each(function() {
++					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
++				});
++
++				if ( !values.length ) {
++					elem.selectedIndex = -1;
++				}
++				return values;
++			}
++		}
++	},
++
++	attrFn: {
++		val: true,
++		css: true,
++		html: true,
++		text: true,
++		data: true,
++		width: true,
++		height: true,
++		offset: true
++	},
++	
++	attrFix: {
++		// Always normalize to ensure hook usage
++		tabindex: "tabIndex"
++	},
++	
++	attr: function( elem, name, value, pass ) {
++		var nType = elem.nodeType;
++		
++		// don't get/set attributes on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return undefined;
++		}
++
++		if ( pass && name in jQuery.attrFn ) {
++			return jQuery( elem )[ name ]( value );
++		}
++
++		// Fallback to prop when attributes are not supported
++		if ( !("getAttribute" in elem) ) {
++			return jQuery.prop( elem, name, value );
++		}
++
++		var ret, hooks,
++			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		// Normalize the name if needed
++		if ( notxml ) {
++			name = jQuery.attrFix[ name ] || name;
++
++			hooks = jQuery.attrHooks[ name ];
++
++			if ( !hooks ) {
++				// Use boolHook for boolean attributes
++				if ( rboolean.test( name ) ) {
++
++					hooks = boolHook;
++
++				// Use formHook for forms and if the name contains certain characters
++				} else if ( formHook && name !== "className" &&
++					(jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
++
++					hooks = formHook;
++				}
++			}
++		}
++
++		if ( value !== undefined ) {
++
++			if ( value === null ) {
++				jQuery.removeAttr( elem, name );
++				return undefined;
++
++			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				elem.setAttribute( name, "" + value );
++				return value;
++			}
++
++		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
++			return ret;
++
++		} else {
++
++			ret = elem.getAttribute( name );
++
++			// Non-existent attributes return null, we normalize to undefined
++			return ret === null ?
++				undefined :
++				ret;
++		}
++	},
++
++	removeAttr: function( elem, name ) {
++		var propName;
++		if ( elem.nodeType === 1 ) {
++			name = jQuery.attrFix[ name ] || name;
++		
++			if ( jQuery.support.getSetAttribute ) {
++				// Use removeAttribute in browsers that support it
++				elem.removeAttribute( name );
++			} else {
++				jQuery.attr( elem, name, "" );
++				elem.removeAttributeNode( elem.getAttributeNode( name ) );
++			}
++
++			// Set corresponding property to false for boolean attributes
++			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
++				elem[ propName ] = false;
++			}
++		}
++	},
++
++	attrHooks: {
++		type: {
++			set: function( elem, value ) {
++				// We can't allow the type property to be changed (since it causes problems in IE)
++				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
++					jQuery.error( "type property can't be changed" );
++				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
++					// Setting the type on a radio button after the value resets the value in IE6-9
++					// Reset value to it's default in case type is set after value
++					// This is for element creation
++					var val = elem.value;
++					elem.setAttribute( "type", value );
++					if ( val ) {
++						elem.value = val;
++					}
++					return value;
++				}
++			}
++		},
++		tabIndex: {
++			get: function( elem ) {
++				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
++				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
++				var attributeNode = elem.getAttributeNode("tabIndex");
++
++				return attributeNode && attributeNode.specified ?
++					parseInt( attributeNode.value, 10 ) :
++					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
++						0 :
++						undefined;
++			}
++		},
++		// Use the value property for back compat
++		// Use the formHook for button elements in IE6/7 (#1954)
++		value: {
++			get: function( elem, name ) {
++				if ( formHook && jQuery.nodeName( elem, "button" ) ) {
++					return formHook.get( elem, name );
++				}
++				return name in elem ?
++					elem.value :
++					null;
++			},
++			set: function( elem, value, name ) {
++				if ( formHook && jQuery.nodeName( elem, "button" ) ) {
++					return formHook.set( elem, value, name );
++				}
++				// Does not return so that setAttribute is also used
++				elem.value = value;
++			}
++		}
++	},
++
++	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( elem, name, value ) {
++		var nType = elem.nodeType;
++
++		// don't get/set properties on text, comment and attribute nodes
++		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
++			return undefined;
++		}
++
++		var ret, hooks,
++			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
++
++		if ( notxml ) {
++			// Fix name and attach hooks
++			name = jQuery.propFix[ name ] || name;
++			hooks = jQuery.propHooks[ name ];
++		}
++
++		if ( value !== undefined ) {
++			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				return (elem[ name ] = value);
++			}
++
++		} else {
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
++				return ret;
++
++			} else {
++				return elem[ name ];
++			}
++		}
++	},
++	
++	propHooks: {}
++});
++
++// Hook for boolean attributes
++boolHook = {
++	get: function( elem, name ) {
++		// Align boolean attributes with corresponding properties
++		return jQuery.prop( elem, name ) ?
++			name.toLowerCase() :
++			undefined;
++	},
++	set: function( elem, value, name ) {
++		var propName;
++		if ( value === false ) {
++			// Remove boolean attributes when set to false
++			jQuery.removeAttr( elem, name );
++		} else {
++			// value is true since we know at this point it's type boolean and not false
++			// Set boolean attributes to the same name and set the DOM property
++			propName = jQuery.propFix[ name ] || name;
++			if ( propName in elem ) {
++				// Only set the IDL specifically if it already exists on the element
++				elem[ propName ] = true;
++			}
++
++			elem.setAttribute( name, name.toLowerCase() );
++		}
++		return name;
++	}
++};
++
++// IE6/7 do not support getting/setting some attributes with get/setAttribute
++if ( !jQuery.support.getSetAttribute ) {
++
++	// propFix is more comprehensive and contains all fixes
++	jQuery.attrFix = jQuery.propFix;
++	
++	// Use this for any attribute on a form in IE6/7
++	formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = {
++		get: function( elem, name ) {
++			var ret;
++			ret = elem.getAttributeNode( name );
++			// Return undefined if nodeValue is empty string
++			return ret && ret.nodeValue !== "" ?
++				ret.nodeValue :
++				undefined;
++		},
++		set: function( elem, value, name ) {
++			// Check form objects in IE (multiple bugs related)
++			// Only use nodeValue if the attribute node exists on the form
++			var ret = elem.getAttributeNode( name );
++			if ( ret ) {
++				ret.nodeValue = value;
++				return value;
++			}
++		}
++	};
++
++	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
++	// This is for removals
++	jQuery.each([ "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			set: function( elem, value ) {
++				if ( value === "" ) {
++					elem.setAttribute( name, "auto" );
++					return value;
++				}
++			}
++		});
++	});
++}
++
++
++// Some attributes require a special call on IE
++if ( !jQuery.support.hrefNormalized ) {
++	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
++		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
++			get: function( elem ) {
++				var ret = elem.getAttribute( name, 2 );
++				return ret === null ? undefined : ret;
++			}
++		});
++	});
++}
++
++if ( !jQuery.support.style ) {
++	jQuery.attrHooks.style = {
++		get: function( elem ) {
++			// Return undefined in the case of empty string
++			// Normalize to lowercase since IE uppercases css property names
++			return elem.style.cssText.toLowerCase() || undefined;
++		},
++		set: function( elem, value ) {
++			return (elem.style.cssText = "" + value);
++		}
++	};
++}
++
++// Safari mis-reports the default selected property of an option
++// Accessing the parent's selectedIndex property fixes it
++if ( !jQuery.support.optSelected ) {
++	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
++		get: function( elem ) {
++			var parent = elem.parentNode;
++
++			if ( parent ) {
++				parent.selectedIndex;
++
++				// Make sure that it also works with optgroups, see #5701
++				if ( parent.parentNode ) {
++					parent.parentNode.selectedIndex;
++				}
++			}
++		}
++	});
++}
++
++// Radios and checkboxes getter/setter
++if ( !jQuery.support.checkOn ) {
++	jQuery.each([ "radio", "checkbox" ], function() {
++		jQuery.valHooks[ this ] = {
++			get: function( elem ) {
++				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
++				return elem.getAttribute("value") === null ? "on" : elem.value;
++			}
++		};
++	});
++}
++jQuery.each([ "radio", "checkbox" ], function() {
++	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
++		set: function( elem, value ) {
++			if ( jQuery.isArray( value ) ) {
++				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
++			}
++		}
++	});
++});
++
++
++
++
++var rnamespaces = /\.(.*)$/,
++	rformElems = /^(?:textarea|input|select)$/i,
++	rperiod = /\./g,
++	rspaces = / /g,
++	rescape = /[^\w\s.|`]/g,
++	fcleanup = function( nm ) {
++		return nm.replace(rescape, "\\$&");
++	};
++
++/*
++ * A number of helper functions used for managing events.
++ * Many of the ideas behind this code originated from
++ * Dean Edwards' addEvent library.
++ */
++jQuery.event = {
++
++	// Bind an event to an element
++	// Original by Dean Edwards
++	add: function( elem, types, handler, data ) {
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		if ( handler === false ) {
++			handler = returnFalse;
++		} else if ( !handler ) {
++			// Fixes bug #7229. Fix recommended by jdalton
++			return;
++		}
++
++		var handleObjIn, handleObj;
++
++		if ( handler.handler ) {
++			handleObjIn = handler;
++			handler = handleObjIn.handler;
++		}
++
++		// Make sure that the function being executed has a unique ID
++		if ( !handler.guid ) {
++			handler.guid = jQuery.guid++;
++		}
++
++		// Init the element's event structure
++		var elemData = jQuery._data( elem );
++
++		// If no elemData is found then we must be trying to bind to one of the
++		// banned noData elements
++		if ( !elemData ) {
++			return;
++		}
++
++		var events = elemData.events,
++			eventHandle = elemData.handle;
++
++		if ( !events ) {
++			elemData.events = events = {};
++		}
++
++		if ( !eventHandle ) {
++			elemData.handle = eventHandle = function( e ) {
++				// Discard the second event of a jQuery.event.trigger() and
++				// when an event is called after a page has unloaded
++				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
++					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
++					undefined;
++			};
++		}
++
++		// Add elem as a property of the handle function
++		// This is to prevent a memory leak with non-native events in IE.
++		eventHandle.elem = elem;
++
++		// Handle multiple events separated by a space
++		// jQuery(...).bind("mouseover mouseout", fn);
++		types = types.split(" ");
++
++		var type, i = 0, namespaces;
++
++		while ( (type = types[ i++ ]) ) {
++			handleObj = handleObjIn ?
++				jQuery.extend({}, handleObjIn) :
++				{ handler: handler, data: data };
++
++			// Namespaced event handlers
++			if ( type.indexOf(".") > -1 ) {
++				namespaces = type.split(".");
++				type = namespaces.shift();
++				handleObj.namespace = namespaces.slice(0).sort().join(".");
++
++			} else {
++				namespaces = [];
++				handleObj.namespace = "";
++			}
++
++			handleObj.type = type;
++			if ( !handleObj.guid ) {
++				handleObj.guid = handler.guid;
++			}
++
++			// Get the current list of functions bound to this event
++			var handlers = events[ type ],
++				special = jQuery.event.special[ type ] || {};
++
++			// Init the event handler queue
++			if ( !handlers ) {
++				handlers = events[ type ] = [];
++
++				// Check for a special event handler
++				// Only use addEventListener/attachEvent if the special
++				// events handler returns false
++				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
++					// Bind the global event handler to the element
++					if ( elem.addEventListener ) {
++						elem.addEventListener( type, eventHandle, false );
++
++					} else if ( elem.attachEvent ) {
++						elem.attachEvent( "on" + type, eventHandle );
++					}
++				}
++			}
++
++			if ( special.add ) {
++				special.add.call( elem, handleObj );
++
++				if ( !handleObj.handler.guid ) {
++					handleObj.handler.guid = handler.guid;
++				}
++			}
++
++			// Add the function to the element's handler list
++			handlers.push( handleObj );
++
++			// Keep track of which events have been used, for event optimization
++			jQuery.event.global[ type ] = true;
++		}
++
++		// Nullify elem to prevent memory leaks in IE
++		elem = null;
++	},
++
++	global: {},
++
++	// Detach an event or set of events from an element
++	remove: function( elem, types, handler, pos ) {
++		// don't do events on text and comment nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		if ( handler === false ) {
++			handler = returnFalse;
++		}
++
++		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
++			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
++			events = elemData && elemData.events;
++
++		if ( !elemData || !events ) {
++			return;
++		}
++
++		// types is actually an event object here
++		if ( types && types.type ) {
++			handler = types.handler;
++			types = types.type;
++		}
++
++		// Unbind all events for the element
++		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
++			types = types || "";
++
++			for ( type in events ) {
++				jQuery.event.remove( elem, type + types );
++			}
++
++			return;
++		}
++
++		// Handle multiple events separated by a space
++		// jQuery(...).unbind("mouseover mouseout", fn);
++		types = types.split(" ");
++
++		while ( (type = types[ i++ ]) ) {
++			origType = type;
++			handleObj = null;
++			all = type.indexOf(".") < 0;
++			namespaces = [];
++
++			if ( !all ) {
++				// Namespaced event handlers
++				namespaces = type.split(".");
++				type = namespaces.shift();
++
++				namespace = new RegExp("(^|\\.)" +
++					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
++			}
++
++			eventType = events[ type ];
++
++			if ( !eventType ) {
++				continue;
++			}
++
++			if ( !handler ) {
++				for ( j = 0; j < eventType.length; j++ ) {
++					handleObj = eventType[ j ];
++
++					if ( all || namespace.test( handleObj.namespace ) ) {
++						jQuery.event.remove( elem, origType, handleObj.handler, j );
++						eventType.splice( j--, 1 );
++					}
++				}
++
++				continue;
++			}
++
++			special = jQuery.event.special[ type ] || {};
++
++			for ( j = pos || 0; j < eventType.length; j++ ) {
++				handleObj = eventType[ j ];
++
++				if ( handler.guid === handleObj.guid ) {
++					// remove the given handler for the given type
++					if ( all || namespace.test( handleObj.namespace ) ) {
++						if ( pos == null ) {
++							eventType.splice( j--, 1 );
++						}
++
++						if ( special.remove ) {
++							special.remove.call( elem, handleObj );
++						}
++					}
++
++					if ( pos != null ) {
++						break;
++					}
++				}
++			}
++
++			// remove generic event handler if no more handlers exist
++			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
++				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
++					jQuery.removeEvent( elem, type, elemData.handle );
++				}
++
++				ret = null;
++				delete events[ type ];
++			}
++		}
++
++		// Remove the expando if it's no longer used
++		if ( jQuery.isEmptyObject( events ) ) {
++			var handle = elemData.handle;
++			if ( handle ) {
++				handle.elem = null;
++			}
++
++			delete elemData.events;
++			delete elemData.handle;
++
++			if ( jQuery.isEmptyObject( elemData ) ) {
++				jQuery.removeData( elem, undefined, true );
++			}
++		}
++	},
++	
++	// Events that are safe to short-circuit if no handlers are attached.
++	// Native DOM events should not be added, they may have inline handlers.
++	customEvent: {
++		"getData": true,
++		"setData": true,
++		"changeData": true
++	},
++
++	trigger: function( event, data, elem, onlyHandlers ) {
++		// Event object or event type
++		var type = event.type || event,
++			namespaces = [],
++			exclusive;
++
++		if ( type.indexOf("!") >= 0 ) {
++			// Exclusive events trigger only for the exact event (no namespaces)
++			type = type.slice(0, -1);
++			exclusive = true;
++		}
++
++		if ( type.indexOf(".") >= 0 ) {
++			// Namespaced trigger; create a regexp to match event type in handle()
++			namespaces = type.split(".");
++			type = namespaces.shift();
++			namespaces.sort();
++		}
++
++		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
++			// No jQuery handlers for this event type, and it can't have inline handlers
++			return;
++		}
++
++		// Caller can pass in an Event, Object, or just an event type string
++		event = typeof event === "object" ?
++			// jQuery.Event object
++			event[ jQuery.expando ] ? event :
++			// Object literal
++			new jQuery.Event( type, event ) :
++			// Just the event type (string)
++			new jQuery.Event( type );
++
++		event.type = type;
++		event.exclusive = exclusive;
++		event.namespace = namespaces.join(".");
++		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
++		
++		// triggerHandler() and global events don't bubble or run the default action
++		if ( onlyHandlers || !elem ) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++
++		// Handle a global trigger
++		if ( !elem ) {
++			// TODO: Stop taunting the data cache; remove global events and always attach to document
++			jQuery.each( jQuery.cache, function() {
++				// internalKey variable is just used to make it easier to find
++				// and potentially change this stuff later; currently it just
++				// points to jQuery.expando
++				var internalKey = jQuery.expando,
++					internalCache = this[ internalKey ];
++				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
++					jQuery.event.trigger( event, data, internalCache.handle.elem );
++				}
++			});
++			return;
++		}
++
++		// Don't do events on text and comment nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
++			return;
++		}
++
++		// Clean up the event in case it is being reused
++		event.result = undefined;
++		event.target = elem;
++
++		// Clone any incoming data and prepend the event, creating the handler arg list
++		data = data != null ? jQuery.makeArray( data ) : [];
++		data.unshift( event );
++
++		var cur = elem,
++			// IE doesn't like method names with a colon (#3533, #8272)
++			ontype = type.indexOf(":") < 0 ? "on" + type : "";
++
++		// Fire event on the current element, then bubble up the DOM tree
++		do {
++			var handle = jQuery._data( cur, "handle" );
++
++			event.currentTarget = cur;
++			if ( handle ) {
++				handle.apply( cur, data );
++			}
++
++			// Trigger an inline bound script
++			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
++				event.result = false;
++				event.preventDefault();
++			}
++
++			// Bubble up to document, then to window
++			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
++		} while ( cur && !event.isPropagationStopped() );
++
++		// If nobody prevented the default action, do it now
++		if ( !event.isDefaultPrevented() ) {
++			var old,
++				special = jQuery.event.special[ type ] || {};
++
++			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
++				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
++
++				// Call a native DOM method on the target with the same name name as the event.
++				// Can't use an .isFunction)() check here because IE6/7 fails that test.
++				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
++				try {
++					if ( ontype && elem[ type ] ) {
++						// Don't re-trigger an onFOO event when we call its FOO() method
++						old = elem[ ontype ];
++
++						if ( old ) {
++							elem[ ontype ] = null;
++						}
++
++						jQuery.event.triggered = type;
++						elem[ type ]();
++					}
++				} catch ( ieError ) {}
++
++				if ( old ) {
++					elem[ ontype ] = old;
++				}
++
++				jQuery.event.triggered = undefined;
++			}
++		}
++		
++		return event.result;
++	},
++
++	handle: function( event ) {
++		event = jQuery.event.fix( event || window.event );
++		// Snapshot the handlers list since a called handler may add/remove events.
++		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
++			run_all = !event.exclusive && !event.namespace,
++			args = Array.prototype.slice.call( arguments, 0 );
++
++		// Use the fix-ed Event rather than the (read-only) native event
++		args[0] = event;
++		event.currentTarget = this;
++
++		for ( var j = 0, l = handlers.length; j < l; j++ ) {
++			var handleObj = handlers[ j ];
++
++			// Triggered event must 1) be non-exclusive and have no namespace, or
++			// 2) have namespace(s) a subset or equal to those in the bound event.
++			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
++				// Pass in a reference to the handler function itself
++				// So that we can later remove it
++				event.handler = handleObj.handler;
++				event.data = handleObj.data;
++				event.handleObj = handleObj;
++
++				var ret = handleObj.handler.apply( this, args );
++
++				if ( ret !== undefined ) {
++					event.result = ret;
++					if ( ret === false ) {
++						event.preventDefault();
++						event.stopPropagation();
++					}
++				}
++
++				if ( event.isImmediatePropagationStopped() ) {
++					break;
++				}
++			}
++		}
++		return event.result;
++	},
++
++	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
++
++	fix: function( event ) {
++		if ( event[ jQuery.expando ] ) {
++			return event;
++		}
++
++		// store a copy of the original event object
++		// and "clone" to set read-only properties
++		var originalEvent = event;
++		event = jQuery.Event( originalEvent );
++
++		for ( var i = this.props.length, prop; i; ) {
++			prop = this.props[ --i ];
++			event[ prop ] = originalEvent[ prop ];
++		}
++
++		// Fix target property, if necessary
++		if ( !event.target ) {
++			// Fixes #1925 where srcElement might not be defined either
++			event.target = event.srcElement || document;
++		}
++
++		// check if target is a textnode (safari)
++		if ( event.target.nodeType === 3 ) {
++			event.target = event.target.parentNode;
++		}
++
++		// Add relatedTarget, if necessary
++		if ( !event.relatedTarget && event.fromElement ) {
++			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
++		}
++
++		// Calculate pageX/Y if missing and clientX/Y available
++		if ( event.pageX == null && event.clientX != null ) {
++			var eventDocument = event.target.ownerDocument || document,
++				doc = eventDocument.documentElement,
++				body = eventDocument.body;
++
++			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
++			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
++		}
++
++		// Add which for key events
++		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
++			event.which = event.charCode != null ? event.charCode : event.keyCode;
++		}
++
++		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
++		if ( !event.metaKey && event.ctrlKey ) {
++			event.metaKey = event.ctrlKey;
++		}
++
++		// Add which for click: 1 === left; 2 === middle; 3 === right
++		// Note: button is not normalized, so don't use it
++		if ( !event.which && event.button !== undefined ) {
++			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
++		}
++
++		return event;
++	},
++
++	// Deprecated, use jQuery.guid instead
++	guid: 1E8,
++
++	// Deprecated, use jQuery.proxy instead
++	proxy: jQuery.proxy,
++
++	special: {
++		ready: {
++			// Make sure the ready event is setup
++			setup: jQuery.bindReady,
++			teardown: jQuery.noop
++		},
++
++		live: {
++			add: function( handleObj ) {
++				jQuery.event.add( this,
++					liveConvert( handleObj.origType, handleObj.selector ),
++					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
++			},
++
++			remove: function( handleObj ) {
++				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
++			}
++		},
++
++		beforeunload: {
++			setup: function( data, namespaces, eventHandle ) {
++				// We only want to do this special case on windows
++				if ( jQuery.isWindow( this ) ) {
++					this.onbeforeunload = eventHandle;
++				}
++			},
++
++			teardown: function( namespaces, eventHandle ) {
++				if ( this.onbeforeunload === eventHandle ) {
++					this.onbeforeunload = null;
++				}
++			}
++		}
++	}
++};
++
++jQuery.removeEvent = document.removeEventListener ?
++	function( elem, type, handle ) {
++		if ( elem.removeEventListener ) {
++			elem.removeEventListener( type, handle, false );
++		}
++	} :
++	function( elem, type, handle ) {
++		if ( elem.detachEvent ) {
++			elem.detachEvent( "on" + type, handle );
++		}
++	};
++
++jQuery.Event = function( src, props ) {
++	// Allow instantiation without the 'new' keyword
++	if ( !this.preventDefault ) {
++		return new jQuery.Event( src, props );
++	}
++
++	// Event object
++	if ( src && src.type ) {
++		this.originalEvent = src;
++		this.type = src.type;
++
++		// Events bubbling up the document may have been marked as prevented
++		// by a handler lower down the tree; reflect the correct value.
++		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
++			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
++
++	// Event type
++	} else {
++		this.type = src;
++	}
++
++	// Put explicitly provided properties onto the event object
++	if ( props ) {
++		jQuery.extend( this, props );
++	}
++
++	// timeStamp is buggy for some events on Firefox(#3843)
++	// So we won't rely on the native value
++	this.timeStamp = jQuery.now();
++
++	// Mark it as fixed
++	this[ jQuery.expando ] = true;
++};
++
++function returnFalse() {
++	return false;
++}
++function returnTrue() {
++	return true;
++}
++
++// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
++// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
++jQuery.Event.prototype = {
++	preventDefault: function() {
++		this.isDefaultPrevented = returnTrue;
++
++		var e = this.originalEvent;
++		if ( !e ) {
++			return;
++		}
++
++		// if preventDefault exists run it on the original event
++		if ( e.preventDefault ) {
++			e.preventDefault();
++
++		// otherwise set the returnValue property of the original event to false (IE)
++		} else {
++			e.returnValue = false;
++		}
++	},
++	stopPropagation: function() {
++		this.isPropagationStopped = returnTrue;
++
++		var e = this.originalEvent;
++		if ( !e ) {
++			return;
++		}
++		// if stopPropagation exists run it on the original event
++		if ( e.stopPropagation ) {
++			e.stopPropagation();
++		}
++		// otherwise set the cancelBubble property of the original event to true (IE)
++		e.cancelBubble = true;
++	},
++	stopImmediatePropagation: function() {
++		this.isImmediatePropagationStopped = returnTrue;
++		this.stopPropagation();
++	},
++	isDefaultPrevented: returnFalse,
++	isPropagationStopped: returnFalse,
++	isImmediatePropagationStopped: returnFalse
++};
++
++// Checks if an event happened on an element within another element
++// Used in jQuery.event.special.mouseenter and mouseleave handlers
++var withinElement = function( event ) {
++
++	// Check if mouse(over|out) are still within the same parent element
++	var related = event.relatedTarget,
++		inside = false,
++		eventType = event.type;
++
++	event.type = event.data;
++
++	if ( related !== this ) {
++
++		if ( related ) {
++			inside = jQuery.contains( this, related );
++		}
++
++		if ( !inside ) {
++
++			jQuery.event.handle.apply( this, arguments );
++
++			event.type = eventType;
++		}
++	}
++},
++
++// In case of event delegation, we only need to rename the event.type,
++// liveHandler will take care of the rest.
++delegate = function( event ) {
++	event.type = event.data;
++	jQuery.event.handle.apply( this, arguments );
++};
++
++// Create mouseenter and mouseleave events
++jQuery.each({
++	mouseenter: "mouseover",
++	mouseleave: "mouseout"
++}, function( orig, fix ) {
++	jQuery.event.special[ orig ] = {
++		setup: function( data ) {
++			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
++		},
++		teardown: function( data ) {
++			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
++		}
++	};
++});
++
++// submit delegation
++if ( !jQuery.support.submitBubbles ) {
++
++	jQuery.event.special.submit = {
++		setup: function( data, namespaces ) {
++			if ( !jQuery.nodeName( this, "form" ) ) {
++				jQuery.event.add(this, "click.specialSubmit", function( e ) {
++					var elem = e.target,
++						type = elem.type;
++
++					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
++						trigger( "submit", this, arguments );
++					}
++				});
++
++				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
++					var elem = e.target,
++						type = elem.type;
++
++					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
++						trigger( "submit", this, arguments );
++					}
++				});
++
++			} else {
++				return false;
++			}
++		},
++
++		teardown: function( namespaces ) {
++			jQuery.event.remove( this, ".specialSubmit" );
++		}
++	};
++
++}
++
++// change delegation, happens here so we have bind.
++if ( !jQuery.support.changeBubbles ) {
++
++	var changeFilters,
++
++	getVal = function( elem ) {
++		var type = elem.type, val = elem.value;
++
++		if ( type === "radio" || type === "checkbox" ) {
++			val = elem.checked;
++
++		} else if ( type === "select-multiple" ) {
++			val = elem.selectedIndex > -1 ?
++				jQuery.map( elem.options, function( elem ) {
++					return elem.selected;
++				}).join("-") :
++				"";
++
++		} else if ( jQuery.nodeName( elem, "select" ) ) {
++			val = elem.selectedIndex;
++		}
++
++		return val;
++	},
++
++	testChange = function testChange( e ) {
++		var elem = e.target, data, val;
++
++		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
++			return;
++		}
++
++		data = jQuery._data( elem, "_change_data" );
++		val = getVal(elem);
++
++		// the current data will be also retrieved by beforeactivate
++		if ( e.type !== "focusout" || elem.type !== "radio" ) {
++			jQuery._data( elem, "_change_data", val );
++		}
++
++		if ( data === undefined || val === data ) {
++			return;
++		}
++
++		if ( data != null || val ) {
++			e.type = "change";
++			e.liveFired = undefined;
++			jQuery.event.trigger( e, arguments[1], elem );
++		}
++	};
++
++	jQuery.event.special.change = {
++		filters: {
++			focusout: testChange,
++
++			beforedeactivate: testChange,
++
++			click: function( e ) {
++				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
++
++				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
++					testChange.call( this, e );
++				}
++			},
++
++			// Change has to be called before submit
++			// Keydown will be called before keypress, which is used in submit-event delegation
++			keydown: function( e ) {
++				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
++
++				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
++					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
++					type === "select-multiple" ) {
++					testChange.call( this, e );
++				}
++			},
++
++			// Beforeactivate happens also before the previous element is blurred
++			// with this event you can't trigger a change event, but you can store
++			// information
++			beforeactivate: function( e ) {
++				var elem = e.target;
++				jQuery._data( elem, "_change_data", getVal(elem) );
++			}
++		},
++
++		setup: function( data, namespaces ) {
++			if ( this.type === "file" ) {
++				return false;
++			}
++
++			for ( var type in changeFilters ) {
++				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
++			}
++
++			return rformElems.test( this.nodeName );
++		},
++
++		teardown: function( namespaces ) {
++			jQuery.event.remove( this, ".specialChange" );
++
++			return rformElems.test( this.nodeName );
++		}
++	};
++
++	changeFilters = jQuery.event.special.change.filters;
++
++	// Handle when the input is .focus()'d
++	changeFilters.focus = changeFilters.beforeactivate;
++}
++
++function trigger( type, elem, args ) {
++	// Piggyback on a donor event to simulate a different one.
++	// Fake originalEvent to avoid donor's stopPropagation, but if the
++	// simulated event prevents default then we do the same on the donor.
++	// Don't pass args or remember liveFired; they apply to the donor event.
++	var event = jQuery.extend( {}, args[ 0 ] );
++	event.type = type;
++	event.originalEvent = {};
++	event.liveFired = undefined;
++	jQuery.event.handle.call( elem, event );
++	if ( event.isDefaultPrevented() ) {
++		args[ 0 ].preventDefault();
++	}
++}
++
++// Create "bubbling" focus and blur events
++if ( !jQuery.support.focusinBubbles ) {
++	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
++
++		// Attach a single capturing handler while someone wants focusin/focusout
++		var attaches = 0;
++
++		jQuery.event.special[ fix ] = {
++			setup: function() {
++				if ( attaches++ === 0 ) {
++					document.addEventListener( orig, handler, true );
++				}
++			},
++			teardown: function() {
++				if ( --attaches === 0 ) {
++					document.removeEventListener( orig, handler, true );
++				}
++			}
++		};
++
++		function handler( donor ) {
++			// Donor event is always a native one; fix it and switch its type.
++			// Let focusin/out handler cancel the donor focus/blur event.
++			var e = jQuery.event.fix( donor );
++			e.type = fix;
++			e.originalEvent = {};
++			jQuery.event.trigger( e, null, e.target );
++			if ( e.isDefaultPrevented() ) {
++				donor.preventDefault();
++			}
++		}
++	});
++}
++
++jQuery.each(["bind", "one"], function( i, name ) {
++	jQuery.fn[ name ] = function( type, data, fn ) {
++		var handler;
++
++		// Handle object literals
++		if ( typeof type === "object" ) {
++			for ( var key in type ) {
++				this[ name ](key, data, type[key], fn);
++			}
++			return this;
++		}
++
++		if ( arguments.length === 2 || data === false ) {
++			fn = data;
++			data = undefined;
++		}
++
++		if ( name === "one" ) {
++			handler = function( event ) {
++				jQuery( this ).unbind( event, handler );
++				return fn.apply( this, arguments );
++			};
++			handler.guid = fn.guid || jQuery.guid++;
++		} else {
++			handler = fn;
++		}
++
++		if ( type === "unload" && name !== "one" ) {
++			this.one( type, data, fn );
++
++		} else {
++			for ( var i = 0, l = this.length; i < l; i++ ) {
++				jQuery.event.add( this[i], type, handler, data );
++			}
++		}
++
++		return this;
++	};
++});
++
++jQuery.fn.extend({
++	unbind: function( type, fn ) {
++		// Handle object literals
++		if ( typeof type === "object" && !type.preventDefault ) {
++			for ( var key in type ) {
++				this.unbind(key, type[key]);
++			}
++
++		} else {
++			for ( var i = 0, l = this.length; i < l; i++ ) {
++				jQuery.event.remove( this[i], type, fn );
++			}
++		}
++
++		return this;
++	},
++
++	delegate: function( selector, types, data, fn ) {
++		return this.live( types, data, fn, selector );
++	},
++
++	undelegate: function( selector, types, fn ) {
++		if ( arguments.length === 0 ) {
++			return this.unbind( "live" );
++
++		} else {
++			return this.die( types, null, fn, selector );
++		}
++	},
++
++	trigger: function( type, data ) {
++		return this.each(function() {
++			jQuery.event.trigger( type, data, this );
++		});
++	},
++
++	triggerHandler: function( type, data ) {
++		if ( this[0] ) {
++			return jQuery.event.trigger( type, data, this[0], true );
++		}
++	},
++
++	toggle: function( fn ) {
++		// Save reference to arguments for access in closure
++		var args = arguments,
++			guid = fn.guid || jQuery.guid++,
++			i = 0,
++			toggler = function( event ) {
++				// Figure out which function to execute
++				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
++				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
++
++				// Make sure that clicks stop
++				event.preventDefault();
++
++				// and execute the function
++				return args[ lastToggle ].apply( this, arguments ) || false;
++			};
++
++		// link all the functions, so any of them can unbind this click handler
++		toggler.guid = guid;
++		while ( i < args.length ) {
++			args[ i++ ].guid = guid;
++		}
++
++		return this.click( toggler );
++	},
++
++	hover: function( fnOver, fnOut ) {
++		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
++	}
++});
++
++var liveMap = {
++	focus: "focusin",
++	blur: "focusout",
++	mouseenter: "mouseover",
++	mouseleave: "mouseout"
++};
++
++jQuery.each(["live", "die"], function( i, name ) {
++	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
++		var type, i = 0, match, namespaces, preType,
++			selector = origSelector || this.selector,
++			context = origSelector ? this : jQuery( this.context );
++
++		if ( typeof types === "object" && !types.preventDefault ) {
++			for ( var key in types ) {
++				context[ name ]( key, data, types[key], selector );
++			}
++
++			return this;
++		}
++
++		if ( name === "die" && !types &&
++					origSelector && origSelector.charAt(0) === "." ) {
++
++			context.unbind( origSelector );
++
++			return this;
++		}
++
++		if ( data === false || jQuery.isFunction( data ) ) {
++			fn = data || returnFalse;
++			data = undefined;
++		}
++
++		types = (types || "").split(" ");
++
++		while ( (type = types[ i++ ]) != null ) {
++			match = rnamespaces.exec( type );
++			namespaces = "";
++
++			if ( match )  {
++				namespaces = match[0];
++				type = type.replace( rnamespaces, "" );
++			}
++
++			if ( type === "hover" ) {
++				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
++				continue;
++			}
++
++			preType = type;
++
++			if ( liveMap[ type ] ) {
++				types.push( liveMap[ type ] + namespaces );
++				type = type + namespaces;
++
++			} else {
++				type = (liveMap[ type ] || type) + namespaces;
++			}
++
++			if ( name === "live" ) {
++				// bind live handler
++				for ( var j = 0, l = context.length; j < l; j++ ) {
++					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
++						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
++				}
++
++			} else {
++				// unbind live handler
++				context.unbind( "live." + liveConvert( type, selector ), fn );
++			}
++		}
++
++		return this;
++	};
++});
++
++function liveHandler( event ) {
++	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
++		elems = [],
++		selectors = [],
++		events = jQuery._data( this, "events" );
++
++	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
++	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
++		return;
++	}
++
++	if ( event.namespace ) {
++		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
++	}
++
++	event.liveFired = this;
++
++	var live = events.live.slice(0);
++
++	for ( j = 0; j < live.length; j++ ) {
++		handleObj = live[j];
++
++		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
++			selectors.push( handleObj.selector );
++
++		} else {
++			live.splice( j--, 1 );
++		}
++	}
++
++	match = jQuery( event.target ).closest( selectors, event.currentTarget );
++
++	for ( i = 0, l = match.length; i < l; i++ ) {
++		close = match[i];
++
++		for ( j = 0; j < live.length; j++ ) {
++			handleObj = live[j];
++
++			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
++				elem = close.elem;
++				related = null;
++
++				// Those two events require additional checking
++				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
++					event.type = handleObj.preType;
++					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
++
++					// Make sure not to accidentally match a child element with the same selector
++					if ( related && jQuery.contains( elem, related ) ) {
++						related = elem;
++					}
++				}
++
++				if ( !related || related !== elem ) {
++					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
++				}
++			}
++		}
++	}
++
++	for ( i = 0, l = elems.length; i < l; i++ ) {
++		match = elems[i];
++
++		if ( maxLevel && match.level > maxLevel ) {
++			break;
++		}
++
++		event.currentTarget = match.elem;
++		event.data = match.handleObj.data;
++		event.handleObj = match.handleObj;
++
++		ret = match.handleObj.origHandler.apply( match.elem, arguments );
++
++		if ( ret === false || event.isPropagationStopped() ) {
++			maxLevel = match.level;
++
++			if ( ret === false ) {
++				stop = false;
++			}
++			if ( event.isImmediatePropagationStopped() ) {
++				break;
++			}
++		}
++	}
++
++	return stop;
++}
++
++function liveConvert( type, selector ) {
++	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
++}
++
++jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
++	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
++	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
++
++	// Handle event binding
++	jQuery.fn[ name ] = function( data, fn ) {
++		if ( fn == null ) {
++			fn = data;
++			data = null;
++		}
++
++		return arguments.length > 0 ?
++			this.bind( name, data, fn ) :
++			this.trigger( name );
++	};
++
++	if ( jQuery.attrFn ) {
++		jQuery.attrFn[ name ] = true;
++	}
++});
++
++
++
++/*!
++ * Sizzle CSS Selector Engine
++ *  Copyright 2011, The Dojo Foundation
++ *  Released under the MIT, BSD, and GPL Licenses.
++ *  More information: http://sizzlejs.com/
++ */
++(function(){
++
++var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
++	done = 0,
++	toString = Object.prototype.toString,
++	hasDuplicate = false,
++	baseHasDuplicate = true,
++	rBackslash = /\\/g,
++	rNonWord = /\W/;
++
++// Here we check if the JavaScript engine is using some sort of
++// optimization where it does not always call our comparision
++// function. If that is the case, discard the hasDuplicate value.
++//   Thus far that includes Google Chrome.
++[0, 0].sort(function() {
++	baseHasDuplicate = false;
++	return 0;
++});
++
++var Sizzle = function( selector, context, results, seed ) {
++	results = results || [];
++	context = context || document;
++
++	var origContext = context;
++
++	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
++		return [];
++	}
++	
++	if ( !selector || typeof selector !== "string" ) {
++		return results;
++	}
++
++	var m, set, checkSet, extra, ret, cur, pop, i,
++		prune = true,
++		contextXML = Sizzle.isXML( context ),
++		parts = [],
++		soFar = selector;
++	
++	// Reset the position of the chunker regexp (start from head)
++	do {
++		chunker.exec( "" );
++		m = chunker.exec( soFar );
++
++		if ( m ) {
++			soFar = m[3];
++		
++			parts.push( m[1] );
++		
++			if ( m[2] ) {
++				extra = m[3];
++				break;
++			}
++		}
++	} while ( m );
++
++	if ( parts.length > 1 && origPOS.exec( selector ) ) {
++
++		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
++			set = posProcess( parts[0] + parts[1], context );
++
++		} else {
++			set = Expr.relative[ parts[0] ] ?
++				[ context ] :
++				Sizzle( parts.shift(), context );
++
++			while ( parts.length ) {
++				selector = parts.shift();
++
++				if ( Expr.relative[ selector ] ) {
++					selector += parts.shift();
++				}
++				
++				set = posProcess( selector, set );
++			}
++		}
++
++	} else {
++		// Take a shortcut and set the context if the root selector is an ID
++		// (but not if it'll be faster if the inner selector is an ID)
++		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
++				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
++
++			ret = Sizzle.find( parts.shift(), context, contextXML );
++			context = ret.expr ?
++				Sizzle.filter( ret.expr, ret.set )[0] :
++				ret.set[0];
++		}
++
++		if ( context ) {
++			ret = seed ?
++				{ expr: parts.pop(), set: makeArray(seed) } :
++				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
++
++			set = ret.expr ?
++				Sizzle.filter( ret.expr, ret.set ) :
++				ret.set;
++
++			if ( parts.length > 0 ) {
++				checkSet = makeArray( set );
++
++			} else {
++				prune = false;
++			}
++
++			while ( parts.length ) {
++				cur = parts.pop();
++				pop = cur;
++
++				if ( !Expr.relative[ cur ] ) {
++					cur = "";
++				} else {
++					pop = parts.pop();
++				}
++
++				if ( pop == null ) {
++					pop = context;
++				}
++
++				Expr.relative[ cur ]( checkSet, pop, contextXML );
++			}
++
++		} else {
++			checkSet = parts = [];
++		}
++	}
++
++	if ( !checkSet ) {
++		checkSet = set;
++	}
++
++	if ( !checkSet ) {
++		Sizzle.error( cur || selector );
++	}
++
++	if ( toString.call(checkSet) === "[object Array]" ) {
++		if ( !prune ) {
++			results.push.apply( results, checkSet );
++
++		} else if ( context && context.nodeType === 1 ) {
++			for ( i = 0; checkSet[i] != null; i++ ) {
++				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
++					results.push( set[i] );
++				}
++			}
++
++		} else {
++			for ( i = 0; checkSet[i] != null; i++ ) {
++				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
++					results.push( set[i] );
++				}
++			}
++		}
++
++	} else {
++		makeArray( checkSet, results );
++	}
++
++	if ( extra ) {
++		Sizzle( extra, origContext, results, seed );
++		Sizzle.uniqueSort( results );
++	}
++
++	return results;
++};
++
++Sizzle.uniqueSort = function( results ) {
++	if ( sortOrder ) {
++		hasDuplicate = baseHasDuplicate;
++		results.sort( sortOrder );
++
++		if ( hasDuplicate ) {
++			for ( var i = 1; i < results.length; i++ ) {
++				if ( results[i] === results[ i - 1 ] ) {
++					results.splice( i--, 1 );
++				}
++			}
++		}
++	}
++
++	return results;
++};
++
++Sizzle.matches = function( expr, set ) {
++	return Sizzle( expr, null, null, set );
++};
++
++Sizzle.matchesSelector = function( node, expr ) {
++	return Sizzle( expr, null, null, [node] ).length > 0;
++};
++
++Sizzle.find = function( expr, context, isXML ) {
++	var set;
++
++	if ( !expr ) {
++		return [];
++	}
++
++	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
++		var match,
++			type = Expr.order[i];
++		
++		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
++			var left = match[1];
++			match.splice( 1, 1 );
++
++			if ( left.substr( left.length - 1 ) !== "\\" ) {
++				match[1] = (match[1] || "").replace( rBackslash, "" );
++				set = Expr.find[ type ]( match, context, isXML );
++
++				if ( set != null ) {
++					expr = expr.replace( Expr.match[ type ], "" );
++					break;
++				}
++			}
++		}
++	}
++
++	if ( !set ) {
++		set = typeof context.getElementsByTagName !== "undefined" ?
++			context.getElementsByTagName( "*" ) :
++			[];
++	}
++
++	return { set: set, expr: expr };
++};
++
++Sizzle.filter = function( expr, set, inplace, not ) {
++	var match, anyFound,
++		old = expr,
++		result = [],
++		curLoop = set,
++		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
++
++	while ( expr && set.length ) {
++		for ( var type in Expr.filter ) {
++			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
++				var found, item,
++					filter = Expr.filter[ type ],
++					left = match[1];
++
++				anyFound = false;
++
++				match.splice(1,1);
++
++				if ( left.substr( left.length - 1 ) === "\\" ) {
++					continue;
++				}
++
++				if ( curLoop === result ) {
++					result = [];
++				}
++
++				if ( Expr.preFilter[ type ] ) {
++					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
++
++					if ( !match ) {
++						anyFound = found = true;
++
++					} else if ( match === true ) {
++						continue;
++					}
++				}
++
++				if ( match ) {
++					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
++						if ( item ) {
++							found = filter( item, match, i, curLoop );
++							var pass = not ^ !!found;
++
++							if ( inplace && found != null ) {
++								if ( pass ) {
++									anyFound = true;
++
++								} else {
++									curLoop[i] = false;
++								}
++
++							} else if ( pass ) {
++								result.push( item );
++								anyFound = true;
++							}
++						}
++					}
++				}
++
++				if ( found !== undefined ) {
++					if ( !inplace ) {
++						curLoop = result;
++					}
++
++					expr = expr.replace( Expr.match[ type ], "" );
++
++					if ( !anyFound ) {
++						return [];
++					}
++
++					break;
++				}
++			}
++		}
++
++		// Improper expression
++		if ( expr === old ) {
++			if ( anyFound == null ) {
++				Sizzle.error( expr );
++
++			} else {
++				break;
++			}
++		}
++
++		old = expr;
++	}
++
++	return curLoop;
++};
++
++Sizzle.error = function( msg ) {
++	throw "Syntax error, unrecognized expression: " + msg;
++};
++
++var Expr = Sizzle.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( elem ) {
++			return elem.getAttribute( "href" );
++		},
++		type: function( elem ) {
++			return elem.getAttribute( "type" );
++		}
++	},
++
++	relative: {
++		"+": function(checkSet, part){
++			var isPartStr = typeof part === "string",
++				isTag = isPartStr && !rNonWord.test( part ),
++				isPartStrNotTag = isPartStr && !isTag;
++
++			if ( isTag ) {
++				part = part.toLowerCase();
++			}
++
++			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
++				if ( (elem = checkSet[i]) ) {
++					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
++
++					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
++						elem || false :
++						elem === part;
++				}
++			}
++
++			if ( isPartStrNotTag ) {
++				Sizzle.filter( part, checkSet, true );
++			}
++		},
++
++		">": function( checkSet, part ) {
++			var elem,
++				isPartStr = typeof part === "string",
++				i = 0,
++				l = checkSet.length;
++
++			if ( isPartStr && !rNonWord.test( part ) ) {
++				part = part.toLowerCase();
++
++				for ( ; i < l; i++ ) {
++					elem = checkSet[i];
++
++					if ( elem ) {
++						var parent = elem.parentNode;
++						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
++					}
++				}
++
++			} else {
++				for ( ; i < l; i++ ) {
++					elem = checkSet[i];
++
++					if ( elem ) {
++						checkSet[i] = isPartStr ?
++							elem.parentNode :
++							elem.parentNode === part;
++					}
++				}
++
++				if ( isPartStr ) {
++					Sizzle.filter( part, checkSet, true );
++				}
++			}
++		},
++
++		"": function(checkSet, part, isXML){
++			var nodeCheck,
++				doneName = done++,
++				checkFn = dirCheck;
++
++			if ( typeof part === "string" && !rNonWord.test( part ) ) {
++				part = part.toLowerCase();
++				nodeCheck = part;
++				checkFn = dirNodeCheck;
++			}
++
++			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
++		},
++
++		"~": function( checkSet, part, isXML ) {
++			var nodeCheck,
++				doneName = done++,
++				checkFn = dirCheck;
++
++			if ( typeof part === "string" && !rNonWord.test( part ) ) {
++				part = part.toLowerCase();
++				nodeCheck = part;
++				checkFn = dirNodeCheck;
++			}
++
++			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
++		}
++	},
++
++	find: {
++		ID: function( match, context, isXML ) {
++			if ( typeof context.getElementById !== "undefined" && !isXML ) {
++				var m = context.getElementById(match[1]);
++				// Check parentNode to catch when Blackberry 4.6 returns
++				// nodes that are no longer in the document #6963
++				return m && m.parentNode ? [m] : [];
++			}
++		},
++
++		NAME: function( match, context ) {
++			if ( typeof context.getElementsByName !== "undefined" ) {
++				var ret = [],
++					results = context.getElementsByName( match[1] );
++
++				for ( var i = 0, l = results.length; i < l; i++ ) {
++					if ( results[i].getAttribute("name") === match[1] ) {
++						ret.push( results[i] );
++					}
++				}
++
++				return ret.length === 0 ? null : ret;
++			}
++		},
++
++		TAG: function( match, context ) {
++			if ( typeof context.getElementsByTagName !== "undefined" ) {
++				return context.getElementsByTagName( match[1] );
++			}
++		}
++	},
++	preFilter: {
++		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
++			match = " " + match[1].replace( rBackslash, "" ) + " ";
++
++			if ( isXML ) {
++				return match;
++			}
++
++			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
++				if ( elem ) {
++					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
++						if ( !inplace ) {
++							result.push( elem );
++						}
++
++					} else if ( inplace ) {
++						curLoop[i] = false;
++					}
++				}
++			}
++
++			return false;
++		},
++
++		ID: function( match ) {
++			return match[1].replace( rBackslash, "" );
++		},
++
++		TAG: function( match, curLoop ) {
++			return match[1].replace( rBackslash, "" ).toLowerCase();
++		},
++
++		CHILD: function( match ) {
++			if ( match[1] === "nth" ) {
++				if ( !match[2] ) {
++					Sizzle.error( match[0] );
++				}
++
++				match[2] = match[2].replace(/^\+|\s*/g, '');
++
++				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
++				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
++					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
++					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
++
++				// calculate the numbers (first)n+(last) including if they are negative
++				match[2] = (test[1] + (test[2] || 1)) - 0;
++				match[3] = test[3] - 0;
++			}
++			else if ( match[2] ) {
++				Sizzle.error( match[0] );
++			}
++
++			// TODO: Move to normal caching system
++			match[0] = done++;
++
++			return match;
++		},
++
++		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
++			var name = match[1] = match[1].replace( rBackslash, "" );
++			
++			if ( !isXML && Expr.attrMap[name] ) {
++				match[1] = Expr.attrMap[name];
++			}
++
++			// Handle if an un-quoted value was used
++			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
++
++			if ( match[2] === "~=" ) {
++				match[4] = " " + match[4] + " ";
++			}
++
++			return match;
++		},
++
++		PSEUDO: function( match, curLoop, inplace, result, not ) {
++			if ( match[1] === "not" ) {
++				// If we're dealing with a complex expression, or a simple one
++				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
++					match[3] = Sizzle(match[3], null, null, curLoop);
++
++				} else {
++					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
++
++					if ( !inplace ) {
++						result.push.apply( result, ret );
++					}
++
++					return false;
++				}
++
++			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
++				return true;
++			}
++			
++			return match;
++		},
++
++		POS: function( match ) {
++			match.unshift( true );
++
++			return match;
++		}
++	},
++	
++	filters: {
++		enabled: function( elem ) {
++			return elem.disabled === false && elem.type !== "hidden";
++		},
++
++		disabled: function( elem ) {
++			return elem.disabled === true;
++		},
++
++		checked: function( elem ) {
++			return elem.checked === true;
++		},
++		
++		selected: function( elem ) {
++			// Accessing this property makes selected-by-default
++			// options in Safari work properly
++			if ( elem.parentNode ) {
++				elem.parentNode.selectedIndex;
++			}
++			
++			return elem.selected === true;
++		},
++
++		parent: function( elem ) {
++			return !!elem.firstChild;
++		},
++
++		empty: function( elem ) {
++			return !elem.firstChild;
++		},
++
++		has: function( elem, i, match ) {
++			return !!Sizzle( match[3], elem ).length;
++		},
++
++		header: function( elem ) {
++			return (/h\d/i).test( elem.nodeName );
++		},
++
++		text: function( elem ) {
++			var attr = elem.getAttribute( "type" ), type = elem.type;
++			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
++			// use getAttribute instead to test this case
++			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
++		},
++
++		radio: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
++		},
++
++		checkbox: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
++		},
++
++		file: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
++		},
++
++		password: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
++		},
++
++		submit: function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return (name === "input" || name === "button") && "submit" === elem.type;
++		},
++
++		image: function( elem ) {
++			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
++		},
++
++		reset: function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return (name === "input" || name === "button") && "reset" === elem.type;
++		},
++
++		button: function( elem ) {
++			var name = elem.nodeName.toLowerCase();
++			return name === "input" && "button" === elem.type || name === "button";
++		},
++
++		input: function( elem ) {
++			return (/input|select|textarea|button/i).test( elem.nodeName );
++		},
++
++		focus: function( elem ) {
++			return elem === elem.ownerDocument.activeElement;
++		}
++	},
++	setFilters: {
++		first: function( elem, i ) {
++			return i === 0;
++		},
++
++		last: function( elem, i, match, array ) {
++			return i === array.length - 1;
++		},
++
++		even: function( elem, i ) {
++			return i % 2 === 0;
++		},
++
++		odd: function( elem, i ) {
++			return i % 2 === 1;
++		},
++
++		lt: function( elem, i, match ) {
++			return i < match[3] - 0;
++		},
++
++		gt: function( elem, i, match ) {
++			return i > match[3] - 0;
++		},
++
++		nth: function( elem, i, match ) {
++			return match[3] - 0 === i;
++		},
++
++		eq: function( elem, i, match ) {
++			return match[3] - 0 === i;
++		}
++	},
++	filter: {
++		PSEUDO: function( elem, match, i, array ) {
++			var name = match[1],
++				filter = Expr.filters[ name ];
++
++			if ( filter ) {
++				return filter( elem, i, match, array );
++
++			} else if ( name === "contains" ) {
++				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
++
++			} else if ( name === "not" ) {
++				var not = match[3];
++
++				for ( var j = 0, l = not.length; j < l; j++ ) {
++					if ( not[j] === elem ) {
++						return false;
++					}
++				}
++
++				return true;
++
++			} else {
++				Sizzle.error( name );
++			}
++		},
++
++		CHILD: function( elem, match ) {
++			var type = match[1],
++				node = elem;
++
++			switch ( type ) {
++				case "only":
++				case "first":
++					while ( (node = node.previousSibling) )	 {
++						if ( node.nodeType === 1 ) { 
++							return false; 
++						}
++					}
++
++					if ( type === "first" ) { 
++						return true; 
++					}
++
++					node = elem;
++
++				case "last":
++					while ( (node = node.nextSibling) )	 {
++						if ( node.nodeType === 1 ) { 
++							return false; 
++						}
++					}
++
++					return true;
++
++				case "nth":
++					var first = match[2],
++						last = match[3];
++
++					if ( first === 1 && last === 0 ) {
++						return true;
++					}
++					
++					var doneName = match[0],
++						parent = elem.parentNode;
++	
++					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
++						var count = 0;
++						
++						for ( node = parent.firstChild; node; node = node.nextSibling ) {
++							if ( node.nodeType === 1 ) {
++								node.nodeIndex = ++count;
++							}
++						} 
++
++						parent.sizcache = doneName;
++					}
++					
++					var diff = elem.nodeIndex - last;
++
++					if ( first === 0 ) {
++						return diff === 0;
++
++					} else {
++						return ( diff % first === 0 && diff / first >= 0 );
++					}
++			}
++		},
++
++		ID: function( elem, match ) {
++			return elem.nodeType === 1 && elem.getAttribute("id") === match;
++		},
++
++		TAG: function( elem, match ) {
++			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
++		},
++		
++		CLASS: function( elem, match ) {
++			return (" " + (elem.className || elem.getAttribute("class")) + " ")
++				.indexOf( match ) > -1;
++		},
++
++		ATTR: function( elem, match ) {
++			var name = match[1],
++				result = Expr.attrHandle[ name ] ?
++					Expr.attrHandle[ name ]( elem ) :
++					elem[ name ] != null ?
++						elem[ name ] :
++						elem.getAttribute( name ),
++				value = result + "",
++				type = match[2],
++				check = match[4];
++
++			return result == null ?
++				type === "!=" :
++				type === "=" ?
++				value === check :
++				type === "*=" ?
++				value.indexOf(check) >= 0 :
++				type === "~=" ?
++				(" " + value + " ").indexOf(check) >= 0 :
++				!check ?
++				value && result !== false :
++				type === "!=" ?
++				value !== check :
++				type === "^=" ?
++				value.indexOf(check) === 0 :
++				type === "$=" ?
++				value.substr(value.length - check.length) === check :
++				type === "|=" ?
++				value === check || value.substr(0, check.length + 1) === check + "-" :
++				false;
++		},
++
++		POS: function( elem, match, i, array ) {
++			var name = match[2],
++				filter = Expr.setFilters[ name ];
++
++			if ( filter ) {
++				return filter( elem, i, match, array );
++			}
++		}
++	}
++};
++
++var origPOS = Expr.match.POS,
++	fescape = function(all, num){
++		return "\\" + (num - 0 + 1);
++	};
++
++for ( var type in Expr.match ) {
++	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
++	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
++}
++
++var makeArray = function( array, results ) {
++	array = Array.prototype.slice.call( array, 0 );
++
++	if ( results ) {
++		results.push.apply( results, array );
++		return results;
++	}
++	
++	return array;
++};
++
++// Perform a simple check to determine if the browser is capable of
++// converting a NodeList to an array using builtin methods.
++// Also verifies that the returned array holds DOM nodes
++// (which is not the case in the Blackberry browser)
++try {
++	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
++
++// Provide a fallback method if it does not work
++} catch( e ) {
++	makeArray = function( array, results ) {
++		var i = 0,
++			ret = results || [];
++
++		if ( toString.call(array) === "[object Array]" ) {
++			Array.prototype.push.apply( ret, array );
++
++		} else {
++			if ( typeof array.length === "number" ) {
++				for ( var l = array.length; i < l; i++ ) {
++					ret.push( array[i] );
++				}
++
++			} else {
++				for ( ; array[i]; i++ ) {
++					ret.push( array[i] );
++				}
++			}
++		}
++
++		return ret;
++	};
++}
++
++var sortOrder, siblingCheck;
++
++if ( document.documentElement.compareDocumentPosition ) {
++	sortOrder = function( a, b ) {
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++		}
++
++		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
++			return a.compareDocumentPosition ? -1 : 1;
++		}
++
++		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
++	};
++
++} else {
++	sortOrder = function( a, b ) {
++		// The nodes are identical, we can exit early
++		if ( a === b ) {
++			hasDuplicate = true;
++			return 0;
++
++		// Fallback to using sourceIndex (in IE) if it's available on both nodes
++		} else if ( a.sourceIndex && b.sourceIndex ) {
++			return a.sourceIndex - b.sourceIndex;
++		}
++
++		var al, bl,
++			ap = [],
++			bp = [],
++			aup = a.parentNode,
++			bup = b.parentNode,
++			cur = aup;
++
++		// If the nodes are siblings (or identical) we can do a quick check
++		if ( aup === bup ) {
++			return siblingCheck( a, b );
++
++		// If no parents were found then the nodes are disconnected
++		} else if ( !aup ) {
++			return -1;
++
++		} else if ( !bup ) {
++			return 1;
++		}
++
++		// Otherwise they're somewhere else in the tree so we need
++		// to build up a full list of the parentNodes for comparison
++		while ( cur ) {
++			ap.unshift( cur );
++			cur = cur.parentNode;
++		}
++
++		cur = bup;
++
++		while ( cur ) {
++			bp.unshift( cur );
++			cur = cur.parentNode;
++		}
++
++		al = ap.length;
++		bl = bp.length;
++
++		// Start walking down the tree looking for a discrepancy
++		for ( var i = 0; i < al && i < bl; i++ ) {
++			if ( ap[i] !== bp[i] ) {
++				return siblingCheck( ap[i], bp[i] );
++			}
++		}
++
++		// We ended someplace up the tree so do a sibling check
++		return i === al ?
++			siblingCheck( a, bp[i], -1 ) :
++			siblingCheck( ap[i], b, 1 );
++	};
++
++	siblingCheck = function( a, b, ret ) {
++		if ( a === b ) {
++			return ret;
++		}
++
++		var cur = a.nextSibling;
++
++		while ( cur ) {
++			if ( cur === b ) {
++				return -1;
++			}
++
++			cur = cur.nextSibling;
++		}
++
++		return 1;
++	};
++}
++
++// Utility function for retreiving the text value of an array of DOM nodes
++Sizzle.getText = function( elems ) {
++	var ret = "", elem;
++
++	for ( var i = 0; elems[i]; i++ ) {
++		elem = elems[i];
++
++		// Get the text from text nodes and CDATA nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
++			ret += elem.nodeValue;
++
++		// Traverse everything else, except comment nodes
++		} else if ( elem.nodeType !== 8 ) {
++			ret += Sizzle.getText( elem.childNodes );
++		}
++	}
++
++	return ret;
++};
++
++// Check to see if the browser returns elements by name when
++// querying by getElementById (and provide a workaround)
++(function(){
++	// We're going to inject a fake input element with a specified name
++	var form = document.createElement("div"),
++		id = "script" + (new Date()).getTime(),
++		root = document.documentElement;
++
++	form.innerHTML = "<a name='" + id + "'/>";
++
++	// Inject it into the root element, check its status, and remove it quickly
++	root.insertBefore( form, root.firstChild );
++
++	// The workaround has to do additional checks after a getElementById
++	// Which slows things down for other browsers (hence the branching)
++	if ( document.getElementById( id ) ) {
++		Expr.find.ID = function( match, context, isXML ) {
++			if ( typeof context.getElementById !== "undefined" && !isXML ) {
++				var m = context.getElementById(match[1]);
++
++				return m ?
++					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
++						[m] :
++						undefined :
++					[];
++			}
++		};
++
++		Expr.filter.ID = function( elem, match ) {
++			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
++
++			return elem.nodeType === 1 && node && node.nodeValue === match;
++		};
++	}
++
++	root.removeChild( form );
++
++	// release memory in IE
++	root = form = null;
++})();
++
++(function(){
++	// Check to see if the browser returns only elements
++	// when doing getElementsByTagName("*")
++
++	// Create a fake element
++	var div = document.createElement("div");
++	div.appendChild( document.createComment("") );
++
++	// Make sure no comments are found
++	if ( div.getElementsByTagName("*").length > 0 ) {
++		Expr.find.TAG = function( match, context ) {
++			var results = context.getElementsByTagName( match[1] );
++
++			// Filter out possible comments
++			if ( match[1] === "*" ) {
++				var tmp = [];
++
++				for ( var i = 0; results[i]; i++ ) {
++					if ( results[i].nodeType === 1 ) {
++						tmp.push( results[i] );
++					}
++				}
++
++				results = tmp;
++			}
++
++			return results;
++		};
++	}
++
++	// Check to see if an attribute returns normalized href attributes
++	div.innerHTML = "<a href='#'></a>";
++
++	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
++			div.firstChild.getAttribute("href") !== "#" ) {
++
++		Expr.attrHandle.href = function( elem ) {
++			return elem.getAttribute( "href", 2 );
++		};
++	}
++
++	// release memory in IE
++	div = null;
++})();
++
++if ( document.querySelectorAll ) {
++	(function(){
++		var oldSizzle = Sizzle,
++			div = document.createElement("div"),
++			id = "__sizzle__";
++
++		div.innerHTML = "<p class='TEST'></p>";
++
++		// Safari can't handle uppercase or unicode characters when
++		// in quirks mode.
++		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
++			return;
++		}
++	
++		Sizzle = function( query, context, extra, seed ) {
++			context = context || document;
++
++			// Only use querySelectorAll on non-XML documents
++			// (ID selectors don't work in non-HTML documents)
++			if ( !seed && !Sizzle.isXML(context) ) {
++				// See if we find a selector to speed up
++				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
++				
++				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
++					// Speed-up: Sizzle("TAG")
++					if ( match[1] ) {
++						return makeArray( context.getElementsByTagName( query ), extra );
++					
++					// Speed-up: Sizzle(".CLASS")
++					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
++						return makeArray( context.getElementsByClassName( match[2] ), extra );
++					}
++				}
++				
++				if ( context.nodeType === 9 ) {
++					// Speed-up: Sizzle("body")
++					// The body element only exists once, optimize finding it
++					if ( query === "body" && context.body ) {
++						return makeArray( [ context.body ], extra );
++						
++					// Speed-up: Sizzle("#ID")
++					} else if ( match && match[3] ) {
++						var elem = context.getElementById( match[3] );
++
++						// Check parentNode to catch when Blackberry 4.6 returns
++						// nodes that are no longer in the document #6963
++						if ( elem && elem.parentNode ) {
++							// Handle the case where IE and Opera return items
++							// by name instead of ID
++							if ( elem.id === match[3] ) {
++								return makeArray( [ elem ], extra );
++							}
++							
++						} else {
++							return makeArray( [], extra );
++						}
++					}
++					
++					try {
++						return makeArray( context.querySelectorAll(query), extra );
++					} catch(qsaError) {}
++
++				// qSA works strangely on Element-rooted queries
++				// We can work around this by specifying an extra ID on the root
++				// and working up from there (Thanks to Andrew Dupont for the technique)
++				// IE 8 doesn't work on object elements
++				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
++					var oldContext = context,
++						old = context.getAttribute( "id" ),
++						nid = old || id,
++						hasParent = context.parentNode,
++						relativeHierarchySelector = /^\s*[+~]/.test( query );
++
++					if ( !old ) {
++						context.setAttribute( "id", nid );
++					} else {
++						nid = nid.replace( /'/g, "\\$&" );
++					}
++					if ( relativeHierarchySelector && hasParent ) {
++						context = context.parentNode;
++					}
++
++					try {
++						if ( !relativeHierarchySelector || hasParent ) {
++							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
++						}
++
++					} catch(pseudoError) {
++					} finally {
++						if ( !old ) {
++							oldContext.removeAttribute( "id" );
++						}
++					}
++				}
++			}
++		
++			return oldSizzle(query, context, extra, seed);
++		};
++
++		for ( var prop in oldSizzle ) {
++			Sizzle[ prop ] = oldSizzle[ prop ];
++		}
++
++		// release memory in IE
++		div = null;
++	})();
++}
++
++(function(){
++	var html = document.documentElement,
++		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
++
++	if ( matches ) {
++		// Check to see if it's possible to do matchesSelector
++		// on a disconnected node (IE 9 fails this)
++		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
++			pseudoWorks = false;
++
++		try {
++			// This should fail with an exception
++			// Gecko does not error, returns false instead
++			matches.call( document.documentElement, "[test!='']:sizzle" );
++	
++		} catch( pseudoError ) {
++			pseudoWorks = true;
++		}
++
++		Sizzle.matchesSelector = function( node, expr ) {
++			// Make sure that attribute selectors are quoted
++			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
++
++			if ( !Sizzle.isXML( node ) ) {
++				try { 
++					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
++						var ret = matches.call( node, expr );
++
++						// IE 9's matchesSelector returns false on disconnected nodes
++						if ( ret || !disconnectedMatch ||
++								// As well, disconnected nodes are said to be in a document
++								// fragment in IE 9, so check for that
++								node.document && node.document.nodeType !== 11 ) {
++							return ret;
++						}
++					}
++				} catch(e) {}
++			}
++
++			return Sizzle(expr, null, null, [node]).length > 0;
++		};
++	}
++})();
++
++(function(){
++	var div = document.createElement("div");
++
++	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
++
++	// Opera can't find a second classname (in 9.6)
++	// Also, make sure that getElementsByClassName actually exists
++	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
++		return;
++	}
++
++	// Safari caches class attributes, doesn't catch changes (in 3.2)
++	div.lastChild.className = "e";
++
++	if ( div.getElementsByClassName("e").length === 1 ) {
++		return;
++	}
++	
++	Expr.order.splice(1, 0, "CLASS");
++	Expr.find.CLASS = function( match, context, isXML ) {
++		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
++			return context.getElementsByClassName(match[1]);
++		}
++	};
++
++	// release memory in IE
++	div = null;
++})();
++
++function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
++	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
++		var elem = checkSet[i];
++
++		if ( elem ) {
++			var match = false;
++
++			elem = elem[dir];
++
++			while ( elem ) {
++				if ( elem.sizcache === doneName ) {
++					match = checkSet[elem.sizset];
++					break;
++				}
++
++				if ( elem.nodeType === 1 && !isXML ){
++					elem.sizcache = doneName;
++					elem.sizset = i;
++				}
++
++				if ( elem.nodeName.toLowerCase() === cur ) {
++					match = elem;
++					break;
++				}
++
++				elem = elem[dir];
++			}
++
++			checkSet[i] = match;
++		}
++	}
++}
++
++function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
++	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
++		var elem = checkSet[i];
++
++		if ( elem ) {
++			var match = false;
++			
++			elem = elem[dir];
++
++			while ( elem ) {
++				if ( elem.sizcache === doneName ) {
++					match = checkSet[elem.sizset];
++					break;
++				}
++
++				if ( elem.nodeType === 1 ) {
++					if ( !isXML ) {
++						elem.sizcache = doneName;
++						elem.sizset = i;
++					}
++
++					if ( typeof cur !== "string" ) {
++						if ( elem === cur ) {
++							match = true;
++							break;
++						}
++
++					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
++						match = elem;
++						break;
++					}
++				}
++
++				elem = elem[dir];
++			}
++
++			checkSet[i] = match;
++		}
++	}
++}
++
++if ( document.documentElement.contains ) {
++	Sizzle.contains = function( a, b ) {
++		return a !== b && (a.contains ? a.contains(b) : true);
++	};
++
++} else if ( document.documentElement.compareDocumentPosition ) {
++	Sizzle.contains = function( a, b ) {
++		return !!(a.compareDocumentPosition(b) & 16);
++	};
++
++} else {
++	Sizzle.contains = function() {
++		return false;
++	};
++}
++
++Sizzle.isXML = function( elem ) {
++	// documentElement is verified for cases where it doesn't yet exist
++	// (such as loading iframes in IE - #4833) 
++	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
++
++	return documentElement ? documentElement.nodeName !== "HTML" : false;
++};
++
++var posProcess = function( selector, context ) {
++	var match,
++		tmpSet = [],
++		later = "",
++		root = context.nodeType ? [context] : context;
++
++	// Position selectors must be done after the filter
++	// And so must :not(positional) so we move all PSEUDOs to the end
++	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
++		later += match[0];
++		selector = selector.replace( Expr.match.PSEUDO, "" );
++	}
++
++	selector = Expr.relative[selector] ? selector + "*" : selector;
++
++	for ( var i = 0, l = root.length; i < l; i++ ) {
++		Sizzle( selector, root[i], tmpSet );
++	}
++
++	return Sizzle.filter( later, tmpSet );
++};
++
++// EXPOSE
++jQuery.find = Sizzle;
++jQuery.expr = Sizzle.selectors;
++jQuery.expr[":"] = jQuery.expr.filters;
++jQuery.unique = Sizzle.uniqueSort;
++jQuery.text = Sizzle.getText;
++jQuery.isXMLDoc = Sizzle.isXML;
++jQuery.contains = Sizzle.contains;
++
++
++})();
++
++
++var runtil = /Until$/,
++	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
++	// Note: This RegExp should be improved, or likely pulled from Sizzle
++	rmultiselector = /,/,
++	isSimple = /^.[^:#\[\.,]*$/,
++	slice = Array.prototype.slice,
++	POS = jQuery.expr.match.POS,
++	// methods guaranteed to produce a unique set when starting from a unique set
++	guaranteedUnique = {
++		children: true,
++		contents: true,
++		next: true,
++		prev: true
++	};
++
++jQuery.fn.extend({
++	find: function( selector ) {
++		var self = this,
++			i, l;
++
++		if ( typeof selector !== "string" ) {
++			return jQuery( selector ).filter(function() {
++				for ( i = 0, l = self.length; i < l; i++ ) {
++					if ( jQuery.contains( self[ i ], this ) ) {
++						return true;
++					}
++				}
++			});
++		}
++
++		var ret = this.pushStack( "", "find", selector ),
++			length, n, r;
++
++		for ( i = 0, l = this.length; i < l; i++ ) {
++			length = ret.length;
++			jQuery.find( selector, this[i], ret );
++
++			if ( i > 0 ) {
++				// Make sure that the results are unique
++				for ( n = length; n < ret.length; n++ ) {
++					for ( r = 0; r < length; r++ ) {
++						if ( ret[r] === ret[n] ) {
++							ret.splice(n--, 1);
++							break;
++						}
++					}
++				}
++			}
++		}
++
++		return ret;
++	},
++
++	has: function( target ) {
++		var targets = jQuery( target );
++		return this.filter(function() {
++			for ( var i = 0, l = targets.length; i < l; i++ ) {
++				if ( jQuery.contains( this, targets[i] ) ) {
++					return true;
++				}
++			}
++		});
++	},
++
++	not: function( selector ) {
++		return this.pushStack( winnow(this, selector, false), "not", selector);
++	},
++
++	filter: function( selector ) {
++		return this.pushStack( winnow(this, selector, true), "filter", selector );
++	},
++
++	is: function( selector ) {
++		return !!selector && ( typeof selector === "string" ?
++			jQuery.filter( selector, this ).length > 0 :
++			this.filter( selector ).length > 0 );
++	},
++
++	closest: function( selectors, context ) {
++		var ret = [], i, l, cur = this[0];
++		
++		// Array
++		if ( jQuery.isArray( selectors ) ) {
++			var match, selector,
++				matches = {},
++				level = 1;
++
++			if ( cur && selectors.length ) {
++				for ( i = 0, l = selectors.length; i < l; i++ ) {
++					selector = selectors[i];
++
++					if ( !matches[ selector ] ) {
++						matches[ selector ] = POS.test( selector ) ?
++							jQuery( selector, context || this.context ) :
++							selector;
++					}
++				}
++
++				while ( cur && cur.ownerDocument && cur !== context ) {
++					for ( selector in matches ) {
++						match = matches[ selector ];
++
++						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
++							ret.push({ selector: selector, elem: cur, level: level });
++						}
++					}
++
++					cur = cur.parentNode;
++					level++;
++				}
++			}
++
++			return ret;
++		}
++
++		// String
++		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
++				jQuery( selectors, context || this.context ) :
++				0;
++
++		for ( i = 0, l = this.length; i < l; i++ ) {
++			cur = this[i];
++
++			while ( cur ) {
++				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
++					ret.push( cur );
++					break;
++
++				} else {
++					cur = cur.parentNode;
++					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
++						break;
++					}
++				}
++			}
++		}
++
++		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
++
++		return this.pushStack( ret, "closest", selectors );
++	},
++
++	// Determine the position of an element within
++	// the matched set of elements
++	index: function( elem ) {
++		if ( !elem || typeof elem === "string" ) {
++			return jQuery.inArray( this[0],
++				// If it receives a string, the selector is used
++				// If it receives nothing, the siblings are used
++				elem ? jQuery( elem ) : this.parent().children() );
++		}
++		// Locate the position of the desired element
++		return jQuery.inArray(
++			// If it receives a jQuery object, the first element is used
++			elem.jquery ? elem[0] : elem, this );
++	},
++
++	add: function( selector, context ) {
++		var set = typeof selector === "string" ?
++				jQuery( selector, context ) :
++				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
++			all = jQuery.merge( this.get(), set );
++
++		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
++			all :
++			jQuery.unique( all ) );
++	},
++
++	andSelf: function() {
++		return this.add( this.prevObject );
++	}
++});
++
++// A painfully simple check to see if an element is disconnected
++// from a document (should be improved, where feasible).
++function isDisconnected( node ) {
++	return !node || !node.parentNode || node.parentNode.nodeType === 11;
++}
++
++jQuery.each({
++	parent: function( elem ) {
++		var parent = elem.parentNode;
++		return parent && parent.nodeType !== 11 ? parent : null;
++	},
++	parents: function( elem ) {
++		return jQuery.dir( elem, "parentNode" );
++	},
++	parentsUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "parentNode", until );
++	},
++	next: function( elem ) {
++		return jQuery.nth( elem, 2, "nextSibling" );
++	},
++	prev: function( elem ) {
++		return jQuery.nth( elem, 2, "previousSibling" );
++	},
++	nextAll: function( elem ) {
++		return jQuery.dir( elem, "nextSibling" );
++	},
++	prevAll: function( elem ) {
++		return jQuery.dir( elem, "previousSibling" );
++	},
++	nextUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "nextSibling", until );
++	},
++	prevUntil: function( elem, i, until ) {
++		return jQuery.dir( elem, "previousSibling", until );
++	},
++	siblings: function( elem ) {
++		return jQuery.sibling( elem.parentNode.firstChild, elem );
++	},
++	children: function( elem ) {
++		return jQuery.sibling( elem.firstChild );
++	},
++	contents: function( elem ) {
++		return jQuery.nodeName( elem, "iframe" ) ?
++			elem.contentDocument || elem.contentWindow.document :
++			jQuery.makeArray( elem.childNodes );
++	}
++}, function( name, fn ) {
++	jQuery.fn[ name ] = function( until, selector ) {
++		var ret = jQuery.map( this, fn, until ),
++			// The variable 'args' was introduced in
++			// https://github.com/jquery/jquery/commit/52a0238
++			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
++			// http://code.google.com/p/v8/issues/detail?id=1050
++			args = slice.call(arguments);
++
++		if ( !runtil.test( name ) ) {
++			selector = until;
++		}
++
++		if ( selector && typeof selector === "string" ) {
++			ret = jQuery.filter( selector, ret );
++		}
++
++		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
++
++		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
++			ret = ret.reverse();
++		}
++
++		return this.pushStack( ret, name, args.join(",") );
++	};
++});
++
++jQuery.extend({
++	filter: function( expr, elems, not ) {
++		if ( not ) {
++			expr = ":not(" + expr + ")";
++		}
++
++		return elems.length === 1 ?
++			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
++			jQuery.find.matches(expr, elems);
++	},
++
++	dir: function( elem, dir, until ) {
++		var matched = [],
++			cur = elem[ dir ];
++
++		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
++			if ( cur.nodeType === 1 ) {
++				matched.push( cur );
++			}
++			cur = cur[dir];
++		}
++		return matched;
++	},
++
++	nth: function( cur, result, dir, elem ) {
++		result = result || 1;
++		var num = 0;
++
++		for ( ; cur; cur = cur[dir] ) {
++			if ( cur.nodeType === 1 && ++num === result ) {
++				break;
++			}
++		}
++
++		return cur;
++	},
++
++	sibling: function( n, elem ) {
++		var r = [];
++
++		for ( ; n; n = n.nextSibling ) {
++			if ( n.nodeType === 1 && n !== elem ) {
++				r.push( n );
++			}
++		}
++
++		return r;
++	}
++});
++
++// Implement the identical functionality for filter and not
++function winnow( elements, qualifier, keep ) {
++
++	// Can't pass null or undefined to indexOf in Firefox 4
++	// Set to 0 to skip string check
++	qualifier = qualifier || 0;
++
++	if ( jQuery.isFunction( qualifier ) ) {
++		return jQuery.grep(elements, function( elem, i ) {
++			var retVal = !!qualifier.call( elem, i, elem );
++			return retVal === keep;
++		});
++
++	} else if ( qualifier.nodeType ) {
++		return jQuery.grep(elements, function( elem, i ) {
++			return (elem === qualifier) === keep;
++		});
++
++	} else if ( typeof qualifier === "string" ) {
++		var filtered = jQuery.grep(elements, function( elem ) {
++			return elem.nodeType === 1;
++		});
++
++		if ( isSimple.test( qualifier ) ) {
++			return jQuery.filter(qualifier, filtered, !keep);
++		} else {
++			qualifier = jQuery.filter( qualifier, filtered );
++		}
++	}
++
++	return jQuery.grep(elements, function( elem, i ) {
++		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
++	});
++}
++
++
++
++
++var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
++	rleadingWhitespace = /^\s+/,
++	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
++	rtagName = /<([\w:]+)/,
++	rtbody = /<tbody/i,
++	rhtml = /<|&#?\w+;/,
++	rnocache = /<(?:script|object|embed|option|style)/i,
++	// checked="checked" or checked
++	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
++	rscriptType = /\/(java|ecma)script/i,
++	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
++	wrapMap = {
++		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, "", "" ]
++	};
++
++wrapMap.optgroup = wrapMap.option;
++wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
++wrapMap.th = wrapMap.td;
++
++// IE can't serialize <link> and <script> tags normally
++if ( !jQuery.support.htmlSerialize ) {
++	wrapMap._default = [ 1, "div<div>", "</div>" ];
++}
++
++jQuery.fn.extend({
++	text: function( text ) {
++		if ( jQuery.isFunction(text) ) {
++			return this.each(function(i) {
++				var self = jQuery( this );
++
++				self.text( text.call(this, i, self.text()) );
++			});
++		}
++
++		if ( typeof text !== "object" && text !== undefined ) {
++			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
++		}
++
++		return jQuery.text( this );
++	},
++
++	wrapAll: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapAll( html.call(this, i) );
++			});
++		}
++
++		if ( this[0] ) {
++			// The elements to wrap the target around
++			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
++
++			if ( this[0].parentNode ) {
++				wrap.insertBefore( this[0] );
++			}
++
++			wrap.map(function() {
++				var elem = this;
++
++				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
++					elem = elem.firstChild;
++				}
++
++				return elem;
++			}).append( this );
++		}
++
++		return this;
++	},
++
++	wrapInner: function( html ) {
++		if ( jQuery.isFunction( html ) ) {
++			return this.each(function(i) {
++				jQuery(this).wrapInner( html.call(this, i) );
++			});
++		}
++
++		return this.each(function() {
++			var self = jQuery( this ),
++				contents = self.contents();
++
++			if ( contents.length ) {
++				contents.wrapAll( html );
++
++			} else {
++				self.append( html );
++			}
++		});
++	},
++
++	wrap: function( html ) {
++		return this.each(function() {
++			jQuery( this ).wrapAll( html );
++		});
++	},
++
++	unwrap: function() {
++		return this.parent().each(function() {
++			if ( !jQuery.nodeName( this, "body" ) ) {
++				jQuery( this ).replaceWith( this.childNodes );
++			}
++		}).end();
++	},
++
++	append: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 ) {
++				this.appendChild( elem );
++			}
++		});
++	},
++
++	prepend: function() {
++		return this.domManip(arguments, true, function( elem ) {
++			if ( this.nodeType === 1 ) {
++				this.insertBefore( elem, this.firstChild );
++			}
++		});
++	},
++
++	before: function() {
++		if ( this[0] && this[0].parentNode ) {
++			return this.domManip(arguments, false, function( elem ) {
++				this.parentNode.insertBefore( elem, this );
++			});
++		} else if ( arguments.length ) {
++			var set = jQuery(arguments[0]);
++			set.push.apply( set, this.toArray() );
++			return this.pushStack( set, "before", arguments );
++		}
++	},
++
++	after: function() {
++		if ( this[0] && this[0].parentNode ) {
++			return this.domManip(arguments, false, function( elem ) {
++				this.parentNode.insertBefore( elem, this.nextSibling );
++			});
++		} else if ( arguments.length ) {
++			var set = this.pushStack( this, "after", arguments );
++			set.push.apply( set, jQuery(arguments[0]).toArray() );
++			return set;
++		}
++	},
++
++	// keepData is for internal use only--do not document
++	remove: function( selector, keepData ) {
++		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
++			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
++				if ( !keepData && elem.nodeType === 1 ) {
++					jQuery.cleanData( elem.getElementsByTagName("*") );
++					jQuery.cleanData( [ elem ] );
++				}
++
++				if ( elem.parentNode ) {
++					elem.parentNode.removeChild( elem );
++				}
++			}
++		}
++
++		return this;
++	},
++
++	empty: function() {
++		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
++			// Remove element nodes and prevent memory leaks
++			if ( elem.nodeType === 1 ) {
++				jQuery.cleanData( elem.getElementsByTagName("*") );
++			}
++
++			// Remove any remaining nodes
++			while ( elem.firstChild ) {
++				elem.removeChild( elem.firstChild );
++			}
++		}
++
++		return this;
++	},
++
++	clone: function( dataAndEvents, deepDataAndEvents ) {
++		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
++		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
++
++		return this.map( function () {
++			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
++		});
++	},
++
++	html: function( value ) {
++		if ( value === undefined ) {
++			return this[0] && this[0].nodeType === 1 ?
++				this[0].innerHTML.replace(rinlinejQuery, "") :
++				null;
++
++		// See if we can take a shortcut and just use innerHTML
++		} else if ( typeof value === "string" && !rnocache.test( value ) &&
++			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
++			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
++
++			value = value.replace(rxhtmlTag, "<$1></$2>");
++
++			try {
++				for ( var i = 0, l = this.length; i < l; i++ ) {
++					// Remove element nodes and prevent memory leaks
++					if ( this[i].nodeType === 1 ) {
++						jQuery.cleanData( this[i].getElementsByTagName("*") );
++						this[i].innerHTML = value;
++					}
++				}
++
++			// If using innerHTML throws an exception, use the fallback method
++			} catch(e) {
++				this.empty().append( value );
++			}
++
++		} else if ( jQuery.isFunction( value ) ) {
++			this.each(function(i){
++				var self = jQuery( this );
++
++				self.html( value.call(this, i, self.html()) );
++			});
++
++		} else {
++			this.empty().append( value );
++		}
++
++		return this;
++	},
++
++	replaceWith: function( value ) {
++		if ( this[0] && this[0].parentNode ) {
++			// Make sure that the elements are removed from the DOM before they are inserted
++			// this can help fix replacing a parent with child elements
++			if ( jQuery.isFunction( value ) ) {
++				return this.each(function(i) {
++					var self = jQuery(this), old = self.html();
++					self.replaceWith( value.call( this, i, old ) );
++				});
++			}
++
++			if ( typeof value !== "string" ) {
++				value = jQuery( value ).detach();
++			}
++
++			return this.each(function() {
++				var next = this.nextSibling,
++					parent = this.parentNode;
++
++				jQuery( this ).remove();
++
++				if ( next ) {
++					jQuery(next).before( value );
++				} else {
++					jQuery(parent).append( value );
++				}
++			});
++		} else {
++			return this.length ?
++				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
++				this;
++		}
++	},
++
++	detach: function( selector ) {
++		return this.remove( selector, true );
++	},
++
++	domManip: function( args, table, callback ) {
++		var results, first, fragment, parent,
++			value = args[0],
++			scripts = [];
++
++		// We can't cloneNode fragments that contain checked, in WebKit
++		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
++			return this.each(function() {
++				jQuery(this).domManip( args, table, callback, true );
++			});
++		}
++
++		if ( jQuery.isFunction(value) ) {
++			return this.each(function(i) {
++				var self = jQuery(this);
++				args[0] = value.call(this, i, table ? self.html() : undefined);
++				self.domManip( args, table, callback );
++			});
++		}
++
++		if ( this[0] ) {
++			parent = value && value.parentNode;
++
++			// If we're in a fragment, just use that instead of building a new one
++			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
++				results = { fragment: parent };
++
++			} else {
++				results = jQuery.buildFragment( args, this, scripts );
++			}
++
++			fragment = results.fragment;
++
++			if ( fragment.childNodes.length === 1 ) {
++				first = fragment = fragment.firstChild;
++			} else {
++				first = fragment.firstChild;
++			}
++
++			if ( first ) {
++				table = table && jQuery.nodeName( first, "tr" );
++
++				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
++					callback.call(
++						table ?
++							root(this[i], first) :
++							this[i],
++						// Make sure that we do not leak memory by inadvertently discarding
++						// the original fragment (which might have attached data) instead of
++						// using it; in addition, use the original fragment object for the last
++						// item instead of first because it can end up being emptied incorrectly
++						// in certain situations (Bug #8070).
++						// Fragments from the fragment cache must always be cloned and never used
++						// in place.
++						results.cacheable || (l > 1 && i < lastIndex) ?
++							jQuery.clone( fragment, true, true ) :
++							fragment
++					);
++				}
++			}
++
++			if ( scripts.length ) {
++				jQuery.each( scripts, evalScript );
++			}
++		}
++
++		return this;
++	}
++});
++
++function root( elem, cur ) {
++	return jQuery.nodeName(elem, "table") ?
++		(elem.getElementsByTagName("tbody")[0] ||
++		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
++		elem;
++}
++
++function cloneCopyEvent( src, dest ) {
++
++	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
++		return;
++	}
++
++	var internalKey = jQuery.expando,
++		oldData = jQuery.data( src ),
++		curData = jQuery.data( dest, oldData );
++
++	// Switch to use the internal data object, if it exists, for the next
++	// stage of data copying
++	if ( (oldData = oldData[ internalKey ]) ) {
++		var events = oldData.events;
++				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
++
++		if ( events ) {
++			delete curData.handle;
++			curData.events = {};
++
++			for ( var type in events ) {
++				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
++					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
++				}
++			}
++		}
++	}
++}
++
++function cloneFixAttributes( src, dest ) {
++	var nodeName;
++
++	// We do not need to do anything for non-Elements
++	if ( dest.nodeType !== 1 ) {
++		return;
++	}
++
++	// clearAttributes removes the attributes, which we don't want,
++	// but also removes the attachEvent events, which we *do* want
++	if ( dest.clearAttributes ) {
++		dest.clearAttributes();
++	}
++
++	// mergeAttributes, in contrast, only merges back on the
++	// original attributes, not the events
++	if ( dest.mergeAttributes ) {
++		dest.mergeAttributes( src );
++	}
++
++	nodeName = dest.nodeName.toLowerCase();
++
++	// IE6-8 fail to clone children inside object elements that use
++	// the proprietary classid attribute value (rather than the type
++	// attribute) to identify the type of content to display
++	if ( nodeName === "object" ) {
++		dest.outerHTML = src.outerHTML;
++
++	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
++		// IE6-8 fails to persist the checked state of a cloned checkbox
++		// or radio button. Worse, IE6-7 fail to give the cloned element
++		// a checked appearance if the defaultChecked value isn't also set
++		if ( src.checked ) {
++			dest.defaultChecked = dest.checked = src.checked;
++		}
++
++		// IE6-7 get confused and end up setting the value of a cloned
++		// checkbox/radio button to an empty string instead of "on"
++		if ( dest.value !== src.value ) {
++			dest.value = src.value;
++		}
++
++	// IE6-8 fails to return the selected option to the default selected
++	// state when cloning options
++	} else if ( nodeName === "option" ) {
++		dest.selected = src.defaultSelected;
++
++	// IE6-8 fails to set the defaultValue to the correct value when
++	// cloning other types of input fields
++	} else if ( nodeName === "input" || nodeName === "textarea" ) {
++		dest.defaultValue = src.defaultValue;
++	}
++
++	// Event data gets referenced instead of copied if the expando
++	// gets copied too
++	dest.removeAttribute( jQuery.expando );
++}
++
++jQuery.buildFragment = function( args, nodes, scripts ) {
++	var fragment, cacheable, cacheresults, doc;
++
++  // nodes may contain either an explicit document object,
++  // a jQuery collection or context object.
++  // If nodes[0] contains a valid object to assign to doc
++  if ( nodes && nodes[0] ) {
++    doc = nodes[0].ownerDocument || nodes[0];
++  }
++
++  // Ensure that an attr object doesn't incorrectly stand in as a document object
++	// Chrome and Firefox seem to allow this to occur and will throw exception
++	// Fixes #8950
++	if ( !doc.createDocumentFragment ) {
++		doc = document;
++	}
++
++	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
++	// Cloning options loses the selected state, so don't cache them
++	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
++	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
++	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
++		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
++
++		cacheable = true;
++
++		cacheresults = jQuery.fragments[ args[0] ];
++		if ( cacheresults && cacheresults !== 1 ) {
++			fragment = cacheresults;
++		}
++	}
++
++	if ( !fragment ) {
++		fragment = doc.createDocumentFragment();
++		jQuery.clean( args, doc, fragment, scripts );
++	}
++
++	if ( cacheable ) {
++		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
++	}
++
++	return { fragment: fragment, cacheable: cacheable };
++};
++
++jQuery.fragments = {};
++
++jQuery.each({
++	appendTo: "append",
++	prependTo: "prepend",
++	insertBefore: "before",
++	insertAfter: "after",
++	replaceAll: "replaceWith"
++}, function( name, original ) {
++	jQuery.fn[ name ] = function( selector ) {
++		var ret = [],
++			insert = jQuery( selector ),
++			parent = this.length === 1 && this[0].parentNode;
++
++		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
++			insert[ original ]( this[0] );
++			return this;
++
++		} else {
++			for ( var i = 0, l = insert.length; i < l; i++ ) {
++				var elems = (i > 0 ? this.clone(true) : this).get();
++				jQuery( insert[i] )[ original ]( elems );
++				ret = ret.concat( elems );
++			}
++
++			return this.pushStack( ret, name, insert.selector );
++		}
++	};
++});
++
++function getAll( elem ) {
++	if ( "getElementsByTagName" in elem ) {
++		return elem.getElementsByTagName( "*" );
++
++	} else if ( "querySelectorAll" in elem ) {
++		return elem.querySelectorAll( "*" );
++
++	} else {
++		return [];
++	}
++}
++
++// Used in clean, fixes the defaultChecked property
++function fixDefaultChecked( elem ) {
++	if ( elem.type === "checkbox" || elem.type === "radio" ) {
++		elem.defaultChecked = elem.checked;
++	}
++}
++// Finds all inputs and passes them to fixDefaultChecked
++function findInputs( elem ) {
++	if ( jQuery.nodeName( elem, "input" ) ) {
++		fixDefaultChecked( elem );
++	} else if ( "getElementsByTagName" in elem ) {
++		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
++	}
++}
++
++jQuery.extend({
++	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
++		var clone = elem.cloneNode(true),
++				srcElements,
++				destElements,
++				i;
++
++		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
++				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
++			// IE copies events bound via attachEvent when using cloneNode.
++			// Calling detachEvent on the clone will also remove the events
++			// from the original. In order to get around this, we use some
++			// proprietary methods to clear the events. Thanks to MooTools
++			// guys for this hotness.
++
++			cloneFixAttributes( elem, clone );
++
++			// Using Sizzle here is crazy slow, so we use getElementsByTagName
++			// instead
++			srcElements = getAll( elem );
++			destElements = getAll( clone );
++
++			// Weird iteration because IE will replace the length property
++			// with an element if you are cloning the body and one of the
++			// elements on the page has a name or id of "length"
++			for ( i = 0; srcElements[i]; ++i ) {
++				cloneFixAttributes( srcElements[i], destElements[i] );
++			}
++		}
++
++		// Copy the events from the original to the clone
++		if ( dataAndEvents ) {
++			cloneCopyEvent( elem, clone );
++
++			if ( deepDataAndEvents ) {
++				srcElements = getAll( elem );
++				destElements = getAll( clone );
++
++				for ( i = 0; srcElements[i]; ++i ) {
++					cloneCopyEvent( srcElements[i], destElements[i] );
++				}
++			}
++		}
++
++		srcElements = destElements = null;
++
++		// Return the cloned set
++		return clone;
++	},
++
++	clean: function( elems, context, fragment, scripts ) {
++		var checkScriptType;
++
++		context = context || document;
++
++		// !context.createElement fails in IE with an error but returns typeof 'object'
++		if ( typeof context.createElement === "undefined" ) {
++			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
++		}
++
++		var ret = [], j;
++
++		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++			if ( typeof elem === "number" ) {
++				elem += "";
++			}
++
++			if ( !elem ) {
++				continue;
++			}
++
++			// Convert html string into DOM nodes
++			if ( typeof elem === "string" ) {
++				if ( !rhtml.test( elem ) ) {
++					elem = context.createTextNode( elem );
++				} else {
++					// Fix "XHTML"-style tags in all browsers
++					elem = elem.replace(rxhtmlTag, "<$1></$2>");
++
++					// Trim whitespace, otherwise indexOf won't work as expected
++					var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
++						wrap = wrapMap[ tag ] || wrapMap._default,
++						depth = wrap[0],
++						div = context.createElement("div");
++
++					// Go to html and back, then peel off extra wrappers
++					div.innerHTML = wrap[1] + elem + wrap[2];
++
++					// Move to the right depth
++					while ( depth-- ) {
++						div = div.lastChild;
++					}
++
++					// Remove IE's autoinserted <tbody> from table fragments
++					if ( !jQuery.support.tbody ) {
++
++						// String was a <table>, *may* have spurious <tbody>
++						var hasBody = rtbody.test(elem),
++							tbody = tag === "table" && !hasBody ?
++								div.firstChild && div.firstChild.childNodes :
++
++								// String was a bare <thead> or <tfoot>
++								wrap[1] === "<table>" && !hasBody ?
++									div.childNodes :
++									[];
++
++						for ( j = tbody.length - 1; j >= 0 ; --j ) {
++							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
++								tbody[ j ].parentNode.removeChild( tbody[ j ] );
++							}
++						}
++					}
++
++					// IE completely kills leading whitespace when innerHTML is used
++					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
++						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
++					}
++
++					elem = div.childNodes;
++				}
++			}
++
++			// Resets defaultChecked for any radios and checkboxes
++			// about to be appended to the DOM in IE 6/7 (#8060)
++			var len;
++			if ( !jQuery.support.appendChecked ) {
++				if ( elem[0] && typeof (len = elem.length) === "number" ) {
++					for ( j = 0; j < len; j++ ) {
++						findInputs( elem[j] );
++					}
++				} else {
++					findInputs( elem );
++				}
++			}
++
++			if ( elem.nodeType ) {
++				ret.push( elem );
++			} else {
++				ret = jQuery.merge( ret, elem );
++			}
++		}
++
++		if ( fragment ) {
++			checkScriptType = function( elem ) {
++				return !elem.type || rscriptType.test( elem.type );
++			};
++			for ( i = 0; ret[i]; i++ ) {
++				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
++					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
++
++				} else {
++					if ( ret[i].nodeType === 1 ) {
++						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
++
++						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
++					}
++					fragment.appendChild( ret[i] );
++				}
++			}
++		}
++
++		return ret;
++	},
++
++	cleanData: function( elems ) {
++		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
++			deleteExpando = jQuery.support.deleteExpando;
++
++		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
++				continue;
++			}
++
++			id = elem[ jQuery.expando ];
++
++			if ( id ) {
++				data = cache[ id ] && cache[ id ][ internalKey ];
++
++				if ( data && data.events ) {
++					for ( var type in data.events ) {
++						if ( special[ type ] ) {
++							jQuery.event.remove( elem, type );
++
++						// This is a shortcut to avoid jQuery.event.remove's overhead
++						} else {
++							jQuery.removeEvent( elem, type, data.handle );
++						}
++					}
++
++					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
++					if ( data.handle ) {
++						data.handle.elem = null;
++					}
++				}
++
++				if ( deleteExpando ) {
++					delete elem[ jQuery.expando ];
++
++				} else if ( elem.removeAttribute ) {
++					elem.removeAttribute( jQuery.expando );
++				}
++
++				delete cache[ id ];
++			}
++		}
++	}
++});
++
++function evalScript( i, elem ) {
++	if ( elem.src ) {
++		jQuery.ajax({
++			url: elem.src,
++			async: false,
++			dataType: "script"
++		});
++	} else {
++		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
++	}
++
++	if ( elem.parentNode ) {
++		elem.parentNode.removeChild( elem );
++	}
++}
++
++
++
++var ralpha = /alpha\([^)]*\)/i,
++	ropacity = /opacity=([^)]*)/,
++	// fixed for IE9, see #8346
++	rupper = /([A-Z]|^ms)/g,
++	rnumpx = /^-?\d+(?:px)?$/i,
++	rnum = /^-?\d/,
++	rrelNum = /^[+\-]=/,
++	rrelNumFilter = /[^+\-\.\de]+/g,
++
++	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
++	cssWidth = [ "Left", "Right" ],
++	cssHeight = [ "Top", "Bottom" ],
++	curCSS,
++
++	getComputedStyle,
++	currentStyle;
++
++jQuery.fn.css = function( name, value ) {
++	// Setting 'undefined' is a no-op
++	if ( arguments.length === 2 && value === undefined ) {
++		return this;
++	}
++
++	return jQuery.access( this, name, value, true, function( elem, name, value ) {
++		return value !== undefined ?
++			jQuery.style( elem, name, value ) :
++			jQuery.css( elem, name );
++	});
++};
++
++jQuery.extend({
++	// Add in style property hooks for overriding the default
++	// behavior of getting and setting a style property
++	cssHooks: {
++		opacity: {
++			get: function( elem, computed ) {
++				if ( computed ) {
++					// We should always get a number back from opacity
++					var ret = curCSS( elem, "opacity", "opacity" );
++					return ret === "" ? "1" : ret;
++
++				} else {
++					return elem.style.opacity;
++				}
++			}
++		}
++	},
++
++	// Exclude the following css properties to add px
++	cssNumber: {
++		"fillOpacity": true,
++		"fontWeight": true,
++		"lineHeight": true,
++		"opacity": true,
++		"orphans": true,
++		"widows": true,
++		"zIndex": true,
++		"zoom": true
++	},
++
++	// Add in properties whose names you wish to fix before
++	// setting or getting the value
++	cssProps: {
++		// normalize float css property
++		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
++	},
++
++	// Get and set the style property on a DOM Node
++	style: function( elem, name, value, extra ) {
++		// Don't set styles on text and comment nodes
++		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
++			return;
++		}
++
++		// Make sure that we're working with the right name
++		var ret, type, origName = jQuery.camelCase( name ),
++			style = elem.style, hooks = jQuery.cssHooks[ origName ];
++
++		name = jQuery.cssProps[ origName ] || origName;
++
++		// Check if we're setting a value
++		if ( value !== undefined ) {
++			type = typeof value;
++
++			// Make sure that NaN and null values aren't set. See: #7116
++			if ( type === "number" && isNaN( value ) || value == null ) {
++				return;
++			}
++
++			// convert relative number strings (+= or -=) to relative numbers. #7345
++			if ( type === "string" && rrelNum.test( value ) ) {
++				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
++				// Fixes bug #9237
++				type = "number";
++			}
++
++			// If a number was passed in, add 'px' to the (except for certain CSS properties)
++			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
++				value += "px";
++			}
++
++			// If a hook was provided, use that value, otherwise just set the specified value
++			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
++				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
++				// Fixes bug #5509
++				try {
++					style[ name ] = value;
++				} catch(e) {}
++			}
++
++		} else {
++			// If a hook was provided get the non-computed value from there
++			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
++				return ret;
++			}
++
++			// Otherwise just get the value from the style object
++			return style[ name ];
++		}
++	},
++
++	css: function( elem, name, extra ) {
++		var ret, hooks;
++
++		// Make sure that we're working with the right name
++		name = jQuery.camelCase( name );
++		hooks = jQuery.cssHooks[ name ];
++		name = jQuery.cssProps[ name ] || name;
++
++		// cssFloat needs a special treatment
++		if ( name === "cssFloat" ) {
++			name = "float";
++		}
++
++		// If a hook was provided get the computed value from there
++		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
++			return ret;
++
++		// Otherwise, if a way to get the computed value exists, use that
++		} else if ( curCSS ) {
++			return curCSS( elem, name );
++		}
++	},
++
++	// A method for quickly swapping in/out CSS properties to get correct calculations
++	swap: function( elem, options, callback ) {
++		var old = {};
++
++		// Remember the old values, and insert the new ones
++		for ( var name in options ) {
++			old[ name ] = elem.style[ name ];
++			elem.style[ name ] = options[ name ];
++		}
++
++		callback.call( elem );
++
++		// Revert the old values
++		for ( name in options ) {
++			elem.style[ name ] = old[ name ];
++		}
++	}
++});
++
++// DEPRECATED, Use jQuery.css() instead
++jQuery.curCSS = jQuery.css;
++
++jQuery.each(["height", "width"], function( i, name ) {
++	jQuery.cssHooks[ name ] = {
++		get: function( elem, computed, extra ) {
++			var val;
++
++			if ( computed ) {
++				if ( elem.offsetWidth !== 0 ) {
++					return getWH( elem, name, extra );
++				} else {
++					jQuery.swap( elem, cssShow, function() {
++						val = getWH( elem, name, extra );
++					});
++				}
++
++				return val;
++			}
++		},
++
++		set: function( elem, value ) {
++			if ( rnumpx.test( value ) ) {
++				// ignore negative width and height values #1599
++				value = parseFloat( value );
++
++				if ( value >= 0 ) {
++					return value + "px";
++				}
++
++			} else {
++				return value;
++			}
++		}
++	};
++});
++
++if ( !jQuery.support.opacity ) {
++	jQuery.cssHooks.opacity = {
++		get: function( elem, computed ) {
++			// IE uses filters for opacity
++			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
++				( parseFloat( RegExp.$1 ) / 100 ) + "" :
++				computed ? "1" : "";
++		},
++
++		set: function( elem, value ) {
++			var style = elem.style,
++				currentStyle = elem.currentStyle;
++
++			// IE has trouble with opacity if it does not have layout
++			// Force it by setting the zoom level
++			style.zoom = 1;
++
++			// Set the alpha filter to set the opacity
++			var opacity = jQuery.isNaN( value ) ?
++				"" :
++				"alpha(opacity=" + value * 100 + ")",
++				filter = currentStyle && currentStyle.filter || style.filter || "";
++
++			style.filter = ralpha.test( filter ) ?
++				filter.replace( ralpha, opacity ) :
++				filter + " " + opacity;
++		}
++	};
++}
++
++jQuery(function() {
++	// This hook cannot be added until DOM ready because the support test
++	// for it is not run until after DOM ready
++	if ( !jQuery.support.reliableMarginRight ) {
++		jQuery.cssHooks.marginRight = {
++			get: function( elem, computed ) {
++				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
++				// Work around by temporarily setting element display to inline-block
++				var ret;
++				jQuery.swap( elem, { "display": "inline-block" }, function() {
++					if ( computed ) {
++						ret = curCSS( elem, "margin-right", "marginRight" );
++					} else {
++						ret = elem.style.marginRight;
++					}
++				});
++				return ret;
++			}
++		};
++	}
++});
++
++if ( document.defaultView && document.defaultView.getComputedStyle ) {
++	getComputedStyle = function( elem, name ) {
++		var ret, defaultView, computedStyle;
++
++		name = name.replace( rupper, "-$1" ).toLowerCase();
++
++		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
++			return undefined;
++		}
++
++		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
++			ret = computedStyle.getPropertyValue( name );
++			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
++				ret = jQuery.style( elem, name );
++			}
++		}
++
++		return ret;
++	};
++}
++
++if ( document.documentElement.currentStyle ) {
++	currentStyle = function( elem, name ) {
++		var left,
++			ret = elem.currentStyle && elem.currentStyle[ name ],
++			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
++			style = elem.style;
++
++		// From the awesome hack by Dean Edwards
++		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
++
++		// If we're not dealing with a regular pixel number
++		// but a number that has a weird ending, we need to convert it to pixels
++		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
++			// Remember the original values
++			left = style.left;
++
++			// Put in the new values to get a computed value out
++			if ( rsLeft ) {
++				elem.runtimeStyle.left = elem.currentStyle.left;
++			}
++			style.left = name === "fontSize" ? "1em" : (ret || 0);
++			ret = style.pixelLeft + "px";
++
++			// Revert the changed values
++			style.left = left;
++			if ( rsLeft ) {
++				elem.runtimeStyle.left = rsLeft;
++			}
++		}
++
++		return ret === "" ? "auto" : ret;
++	};
++}
++
++curCSS = getComputedStyle || currentStyle;
++
++function getWH( elem, name, extra ) {
++
++	// Start with offset property
++	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
++		which = name === "width" ? cssWidth : cssHeight;
++
++	if ( val > 0 ) {
++		if ( extra !== "border" ) {
++			jQuery.each( which, function() {
++				if ( !extra ) {
++					val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
++				}
++				if ( extra === "margin" ) {
++					val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
++				} else {
++					val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
++				}
++			});
++		}
++
++		return val + "px";
++	}
++
++	// Fall back to computed then uncomputed css if necessary
++	val = curCSS( elem, name, name );
++	if ( val < 0 || val == null ) {
++		val = elem.style[ name ] || 0;
++	}
++	// Normalize "", auto, and prepare for extra
++	val = parseFloat( val ) || 0;
++
++	// Add padding, border, margin
++	if ( extra ) {
++		jQuery.each( which, function() {
++			val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
++			if ( extra !== "padding" ) {
++				val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
++			}
++			if ( extra === "margin" ) {
++				val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
++			}
++		});
++	}
++
++	return val + "px";
++}
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.hidden = function( elem ) {
++		var width = elem.offsetWidth,
++			height = elem.offsetHeight;
++
++		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
++	};
++
++	jQuery.expr.filters.visible = function( elem ) {
++		return !jQuery.expr.filters.hidden( elem );
++	};
++}
++
++
++
++
++var r20 = /%20/g,
++	rbracket = /\[\]$/,
++	rCRLF = /\r?\n/g,
++	rhash = /#.*$/,
++	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
++	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
++	// #7653, #8125, #8152: local protocol detection
++	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
++	rnoContent = /^(?:GET|HEAD)$/,
++	rprotocol = /^\/\//,
++	rquery = /\?/,
++	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
++	rselectTextarea = /^(?:select|textarea)/i,
++	rspacesAjax = /\s+/,
++	rts = /([?&])_=[^&]*/,
++	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
++
++	// Keep a copy of the old load method
++	_load = jQuery.fn.load,
++
++	/* Prefilters
++	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
++	 * 2) These are called:
++	 *    - BEFORE asking for a transport
++	 *    - AFTER param serialization (s.data is a string if s.processData is true)
++	 * 3) key is the dataType
++	 * 4) the catchall symbol "*" can be used
++	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
++	 */
++	prefilters = {},
++
++	/* Transports bindings
++	 * 1) key is the dataType
++	 * 2) the catchall symbol "*" can be used
++	 * 3) selection will start with transport dataType and THEN go to "*" if needed
++	 */
++	transports = {},
++
++	// Document location
++	ajaxLocation,
++
++	// Document location segments
++	ajaxLocParts;
++
++// #8138, IE may throw an exception when accessing
++// a field from window.location if document.domain has been set
++try {
++	ajaxLocation = location.href;
++} catch( e ) {
++	// Use the href attribute of an A element
++	// since IE will modify it given document.location
++	ajaxLocation = document.createElement( "a" );
++	ajaxLocation.href = "";
++	ajaxLocation = ajaxLocation.href;
++}
++
++// Segment location into parts
++ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
++
++// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
++function addToPrefiltersOrTransports( structure ) {
++
++	// dataTypeExpression is optional and defaults to "*"
++	return function( dataTypeExpression, func ) {
++
++		if ( typeof dataTypeExpression !== "string" ) {
++			func = dataTypeExpression;
++			dataTypeExpression = "*";
++		}
++
++		if ( jQuery.isFunction( func ) ) {
++			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
++				i = 0,
++				length = dataTypes.length,
++				dataType,
++				list,
++				placeBefore;
++
++			// For each dataType in the dataTypeExpression
++			for(; i < length; i++ ) {
++				dataType = dataTypes[ i ];
++				// We control if we're asked to add before
++				// any existing element
++				placeBefore = /^\+/.test( dataType );
++				if ( placeBefore ) {
++					dataType = dataType.substr( 1 ) || "*";
++				}
++				list = structure[ dataType ] = structure[ dataType ] || [];
++				// then we add to the structure accordingly
++				list[ placeBefore ? "unshift" : "push" ]( func );
++			}
++		}
++	};
++}
++
++// Base inspection function for prefilters and transports
++function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
++		dataType /* internal */, inspected /* internal */ ) {
++
++	dataType = dataType || options.dataTypes[ 0 ];
++	inspected = inspected || {};
++
++	inspected[ dataType ] = true;
++
++	var list = structure[ dataType ],
++		i = 0,
++		length = list ? list.length : 0,
++		executeOnly = ( structure === prefilters ),
++		selection;
++
++	for(; i < length && ( executeOnly || !selection ); i++ ) {
++		selection = list[ i ]( options, originalOptions, jqXHR );
++		// If we got redirected to another dataType
++		// we try there if executing only and not done already
++		if ( typeof selection === "string" ) {
++			if ( !executeOnly || inspected[ selection ] ) {
++				selection = undefined;
++			} else {
++				options.dataTypes.unshift( selection );
++				selection = inspectPrefiltersOrTransports(
++						structure, options, originalOptions, jqXHR, selection, inspected );
++			}
++		}
++	}
++	// If we're only executing or nothing was selected
++	// we try the catchall dataType if not done already
++	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
++		selection = inspectPrefiltersOrTransports(
++				structure, options, originalOptions, jqXHR, "*", inspected );
++	}
++	// unnecessary when only executing (prefilters)
++	// but it'll be ignored by the caller in that case
++	return selection;
++}
++
++jQuery.fn.extend({
++	load: function( url, params, callback ) {
++		if ( typeof url !== "string" && _load ) {
++			return _load.apply( this, arguments );
++
++		// Don't do a request if no elements are being requested
++		} else if ( !this.length ) {
++			return this;
++		}
++
++		var off = url.indexOf( " " );
++		if ( off >= 0 ) {
++			var selector = url.slice( off, url.length );
++			url = url.slice( 0, off );
++		}
++
++		// Default to a GET request
++		var type = "GET";
++
++		// If the second parameter was provided
++		if ( params ) {
++			// If it's a function
++			if ( jQuery.isFunction( params ) ) {
++				// We assume that it's the callback
++				callback = params;
++				params = undefined;
++
++			// Otherwise, build a param string
++			} else if ( typeof params === "object" ) {
++				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
++				type = "POST";
++			}
++		}
++
++		var self = this;
++
++		// Request the remote document
++		jQuery.ajax({
++			url: url,
++			type: type,
++			dataType: "html",
++			data: params,
++			// Complete callback (responseText is used internally)
++			complete: function( jqXHR, status, responseText ) {
++				// Store the response as specified by the jqXHR object
++				responseText = jqXHR.responseText;
++				// If successful, inject the HTML into all the matched elements
++				if ( jqXHR.isResolved() ) {
++					// #4825: Get the actual response in case
++					// a dataFilter is present in ajaxSettings
++					jqXHR.done(function( r ) {
++						responseText = r;
++					});
++					// See if a selector was specified
++					self.html( selector ?
++						// Create a dummy div to hold the results
++						jQuery("<div>")
++							// inject the contents of the document in, removing the scripts
++							// to avoid any 'Permission Denied' errors in IE
++							.append(responseText.replace(rscript, ""))
++
++							// Locate the specified elements
++							.find(selector) :
++
++						// If not, just inject the full result
++						responseText );
++				}
++
++				if ( callback ) {
++					self.each( callback, [ responseText, status, jqXHR ] );
++				}
++			}
++		});
++
++		return this;
++	},
++
++	serialize: function() {
++		return jQuery.param( this.serializeArray() );
++	},
++
++	serializeArray: function() {
++		return this.map(function(){
++			return this.elements ? jQuery.makeArray( this.elements ) : this;
++		})
++		.filter(function(){
++			return this.name && !this.disabled &&
++				( this.checked || rselectTextarea.test( this.nodeName ) ||
++					rinput.test( this.type ) );
++		})
++		.map(function( i, elem ){
++			var val = jQuery( this ).val();
++
++			return val == null ?
++				null :
++				jQuery.isArray( val ) ?
++					jQuery.map( val, function( val, i ){
++						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++					}) :
++					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
++		}).get();
++	}
++});
++
++// Attach a bunch of functions for handling common AJAX events
++jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
++	jQuery.fn[ o ] = function( f ){
++		return this.bind( o, f );
++	};
++});
++
++jQuery.each( [ "get", "post" ], function( i, method ) {
++	jQuery[ method ] = function( url, data, callback, type ) {
++		// shift arguments if data argument was omitted
++		if ( jQuery.isFunction( data ) ) {
++			type = type || callback;
++			callback = data;
++			data = undefined;
++		}
++
++		return jQuery.ajax({
++			type: method,
++			url: url,
++			data: data,
++			success: callback,
++			dataType: type
++		});
++	};
++});
++
++jQuery.extend({
++
++	getScript: function( url, callback ) {
++		return jQuery.get( url, undefined, callback, "script" );
++	},
++
++	getJSON: function( url, data, callback ) {
++		return jQuery.get( url, data, callback, "json" );
++	},
++
++	// Creates a full fledged settings object into target
++	// with both ajaxSettings and settings fields.
++	// If target is omitted, writes into ajaxSettings.
++	ajaxSetup: function ( target, settings ) {
++		if ( !settings ) {
++			// Only one parameter, we extend ajaxSettings
++			settings = target;
++			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
++		} else {
++			// target was provided, we extend into it
++			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
++		}
++		// Flatten fields we don't want deep extended
++		for( var field in { context: 1, url: 1 } ) {
++			if ( field in settings ) {
++				target[ field ] = settings[ field ];
++			} else if( field in jQuery.ajaxSettings ) {
++				target[ field ] = jQuery.ajaxSettings[ field ];
++			}
++		}
++		return target;
++	},
++
++	ajaxSettings: {
++		url: ajaxLocation,
++		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
++		global: true,
++		type: "GET",
++		contentType: "application/x-www-form-urlencoded",
++		processData: true,
++		async: true,
++		/*
++		timeout: 0,
++		data: null,
++		dataType: null,
++		username: null,
++		password: null,
++		cache: null,
++		traditional: false,
++		headers: {},
++		*/
++
++		accepts: {
++			xml: "application/xml, text/xml",
++			html: "text/html",
++			text: "text/plain",
++			json: "application/json, text/javascript",
++			"*": "*/*"
++		},
++
++		contents: {
++			xml: /xml/,
++			html: /html/,
++			json: /json/
++		},
++
++		responseFields: {
++			xml: "responseXML",
++			text: "responseText"
++		},
++
++		// List of data converters
++		// 1) key format is "source_type destination_type" (a single space in-between)
++		// 2) the catchall symbol "*" can be used for source_type
++		converters: {
++
++			// Convert anything to text
++			"* text": window.String,
++
++			// Text to html (true = no transformation)
++			"text html": true,
++
++			// Evaluate text as a json expression
++			"text json": jQuery.parseJSON,
++
++			// Parse text as xml
++			"text xml": jQuery.parseXML
++		}
++	},
++
++	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
++	ajaxTransport: addToPrefiltersOrTransports( transports ),
++
++	// Main method
++	ajax: function( url, options ) {
++
++		// If url is an object, simulate pre-1.5 signature
++		if ( typeof url === "object" ) {
++			options = url;
++			url = undefined;
++		}
++
++		// Force options to be an object
++		options = options || {};
++
++		var // Create the final options object
++			s = jQuery.ajaxSetup( {}, options ),
++			// Callbacks context
++			callbackContext = s.context || s,
++			// Context for global events
++			// It's the callbackContext if one was provided in the options
++			// and if it's a DOM node or a jQuery collection
++			globalEventContext = callbackContext !== s &&
++				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
++						jQuery( callbackContext ) : jQuery.event,
++			// Deferreds
++			deferred = jQuery.Deferred(),
++			completeDeferred = jQuery._Deferred(),
++			// Status-dependent callbacks
++			statusCode = s.statusCode || {},
++			// ifModified key
++			ifModifiedKey,
++			// Headers (they are sent all at once)
++			requestHeaders = {},
++			requestHeadersNames = {},
++			// Response headers
++			responseHeadersString,
++			responseHeaders,
++			// transport
++			transport,
++			// timeout handle
++			timeoutTimer,
++			// Cross-domain detection vars
++			parts,
++			// The jqXHR state
++			state = 0,
++			// To know if global events are to be dispatched
++			fireGlobals,
++			// Loop variable
++			i,
++			// Fake xhr
++			jqXHR = {
++
++				readyState: 0,
++
++				// Caches the header
++				setRequestHeader: function( name, value ) {
++					if ( !state ) {
++						var lname = name.toLowerCase();
++						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
++						requestHeaders[ name ] = value;
++					}
++					return this;
++				},
++
++				// Raw string
++				getAllResponseHeaders: function() {
++					return state === 2 ? responseHeadersString : null;
++				},
++
++				// Builds headers hashtable if needed
++				getResponseHeader: function( key ) {
++					var match;
++					if ( state === 2 ) {
++						if ( !responseHeaders ) {
++							responseHeaders = {};
++							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
++								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
++							}
++						}
++						match = responseHeaders[ key.toLowerCase() ];
++					}
++					return match === undefined ? null : match;
++				},
++
++				// Overrides response content-type header
++				overrideMimeType: function( type ) {
++					if ( !state ) {
++						s.mimeType = type;
++					}
++					return this;
++				},
++
++				// Cancel the request
++				abort: function( statusText ) {
++					statusText = statusText || "abort";
++					if ( transport ) {
++						transport.abort( statusText );
++					}
++					done( 0, statusText );
++					return this;
++				}
++			};
++
++		// Callback for when everything is done
++		// It is defined here because jslint complains if it is declared
++		// at the end of the function (which would be more logical and readable)
++		function done( status, statusText, responses, headers ) {
++
++			// Called once
++			if ( state === 2 ) {
++				return;
++			}
++
++			// State is "done" now
++			state = 2;
++
++			// Clear timeout if it exists
++			if ( timeoutTimer ) {
++				clearTimeout( timeoutTimer );
++			}
++
++			// Dereference transport for early garbage collection
++			// (no matter how long the jqXHR object will be used)
++			transport = undefined;
++
++			// Cache response headers
++			responseHeadersString = headers || "";
++
++			// Set readyState
++			jqXHR.readyState = status ? 4 : 0;
++
++			var isSuccess,
++				success,
++				error,
++				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
++				lastModified,
++				etag;
++
++			// If successful, handle type chaining
++			if ( status >= 200 && status < 300 || status === 304 ) {
++
++				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++				if ( s.ifModified ) {
++
++					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
++						jQuery.lastModified[ ifModifiedKey ] = lastModified;
++					}
++					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
++						jQuery.etag[ ifModifiedKey ] = etag;
++					}
++				}
++
++				// If not modified
++				if ( status === 304 ) {
++
++					statusText = "notmodified";
++					isSuccess = true;
++
++				// If we have data
++				} else {
++
++					try {
++						success = ajaxConvert( s, response );
++						statusText = "success";
++						isSuccess = true;
++					} catch(e) {
++						// We have a parsererror
++						statusText = "parsererror";
++						error = e;
++					}
++				}
++			} else {
++				// We extract error from statusText
++				// then normalize statusText and status for non-aborts
++				error = statusText;
++				if( !statusText || status ) {
++					statusText = "error";
++					if ( status < 0 ) {
++						status = 0;
++					}
++				}
++			}
++
++			// Set data for the fake xhr object
++			jqXHR.status = status;
++			jqXHR.statusText = statusText;
++
++			// Success/Error
++			if ( isSuccess ) {
++				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
++			} else {
++				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
++			}
++
++			// Status-dependent callbacks
++			jqXHR.statusCode( statusCode );
++			statusCode = undefined;
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
++						[ jqXHR, s, isSuccess ? success : error ] );
++			}
++
++			// Complete
++			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
++
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
++				// Handle the global AJAX counter
++				if ( !( --jQuery.active ) ) {
++					jQuery.event.trigger( "ajaxStop" );
++				}
++			}
++		}
++
++		// Attach deferreds
++		deferred.promise( jqXHR );
++		jqXHR.success = jqXHR.done;
++		jqXHR.error = jqXHR.fail;
++		jqXHR.complete = completeDeferred.done;
++
++		// Status-dependent callbacks
++		jqXHR.statusCode = function( map ) {
++			if ( map ) {
++				var tmp;
++				if ( state < 2 ) {
++					for( tmp in map ) {
++						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
++					}
++				} else {
++					tmp = map[ jqXHR.status ];
++					jqXHR.then( tmp, tmp );
++				}
++			}
++			return this;
++		};
++
++		// Remove hash character (#7531: and string promotion)
++		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
++		// We also use the url parameter if available
++		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
++
++		// Extract dataTypes list
++		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
++
++		// Determine if a cross-domain request is in order
++		if ( s.crossDomain == null ) {
++			parts = rurl.exec( s.url.toLowerCase() );
++			s.crossDomain = !!( parts &&
++				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
++					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
++						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
++			);
++		}
++
++		// Convert data if not already a string
++		if ( s.data && s.processData && typeof s.data !== "string" ) {
++			s.data = jQuery.param( s.data, s.traditional );
++		}
++
++		// Apply prefilters
++		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
++
++		// If request was aborted inside a prefiler, stop there
++		if ( state === 2 ) {
++			return false;
++		}
++
++		// We can fire global events as of now if asked to
++		fireGlobals = s.global;
++
++		// Uppercase the type
++		s.type = s.type.toUpperCase();
++
++		// Determine if request has content
++		s.hasContent = !rnoContent.test( s.type );
++
++		// Watch for a new set of requests
++		if ( fireGlobals && jQuery.active++ === 0 ) {
++			jQuery.event.trigger( "ajaxStart" );
++		}
++
++		// More options handling for requests with no content
++		if ( !s.hasContent ) {
++
++			// If data is available, append data to url
++			if ( s.data ) {
++				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
++			}
++
++			// Get ifModifiedKey before adding the anti-cache parameter
++			ifModifiedKey = s.url;
++
++			// Add anti-cache in url if needed
++			if ( s.cache === false ) {
++
++				var ts = jQuery.now(),
++					// try replacing _= if it is there
++					ret = s.url.replace( rts, "$1_=" + ts );
++
++				// if nothing was replaced, add timestamp to the end
++				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
++			}
++		}
++
++		// Set the correct header, if data is being sent
++		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
++			jqXHR.setRequestHeader( "Content-Type", s.contentType );
++		}
++
++		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
++		if ( s.ifModified ) {
++			ifModifiedKey = ifModifiedKey || s.url;
++			if ( jQuery.lastModified[ ifModifiedKey ] ) {
++				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
++			}
++			if ( jQuery.etag[ ifModifiedKey ] ) {
++				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
++			}
++		}
++
++		// Set the Accepts header for the server, depending on the dataType
++		jqXHR.setRequestHeader(
++			"Accept",
++			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
++				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
++				s.accepts[ "*" ]
++		);
++
++		// Check for headers option
++		for ( i in s.headers ) {
++			jqXHR.setRequestHeader( i, s.headers[ i ] );
++		}
++
++		// Allow custom headers/mimetypes and early abort
++		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
++				// Abort if not done already
++				jqXHR.abort();
++				return false;
++
++		}
++
++		// Install callbacks on deferreds
++		for ( i in { success: 1, error: 1, complete: 1 } ) {
++			jqXHR[ i ]( s[ i ] );
++		}
++
++		// Get transport
++		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
++
++		// If no transport, we auto-abort
++		if ( !transport ) {
++			done( -1, "No Transport" );
++		} else {
++			jqXHR.readyState = 1;
++			// Send global event
++			if ( fireGlobals ) {
++				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
++			}
++			// Timeout
++			if ( s.async && s.timeout > 0 ) {
++				timeoutTimer = setTimeout( function(){
++					jqXHR.abort( "timeout" );
++				}, s.timeout );
++			}
++
++			try {
++				state = 1;
++				transport.send( requestHeaders, done );
++			} catch (e) {
++				// Propagate exception as error if not done
++				if ( status < 2 ) {
++					done( -1, e );
++				// Simply rethrow otherwise
++				} else {
++					jQuery.error( e );
++				}
++			}
++		}
++
++		return jqXHR;
++	},
++
++	// Serialize an array of form elements or a set of
++	// key/values into a query string
++	param: function( a, traditional ) {
++		var s = [],
++			add = function( key, value ) {
++				// If value is a function, invoke it and return its value
++				value = jQuery.isFunction( value ) ? value() : value;
++				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
++			};
++
++		// Set traditional to true for jQuery <= 1.3.2 behavior.
++		if ( traditional === undefined ) {
++			traditional = jQuery.ajaxSettings.traditional;
++		}
++
++		// If an array was passed in, assume that it is an array of form elements.
++		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
++			// Serialize the form elements
++			jQuery.each( a, function() {
++				add( this.name, this.value );
++			});
++
++		} else {
++			// If traditional, encode the "old" way (the way 1.3.2 or older
++			// did it), otherwise encode params recursively.
++			for ( var prefix in a ) {
++				buildParams( prefix, a[ prefix ], traditional, add );
++			}
++		}
++
++		// Return the resulting serialization
++		return s.join( "&" ).replace( r20, "+" );
++	}
++});
++
++function buildParams( prefix, obj, traditional, add ) {
++	if ( jQuery.isArray( obj ) ) {
++		// Serialize array item.
++		jQuery.each( obj, function( i, v ) {
++			if ( traditional || rbracket.test( prefix ) ) {
++				// Treat each array item as a scalar.
++				add( prefix, v );
++
++			} else {
++				// If array item is non-scalar (array or object), encode its
++				// numeric index to resolve deserialization ambiguity issues.
++				// Note that rack (as of 1.0.0) can't currently deserialize
++				// nested arrays properly, and attempting to do so may cause
++				// a server error. Possible fixes are to modify rack's
++				// deserialization algorithm or to provide an option or flag
++				// to force array serialization to be shallow.
++				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
++			}
++		});
++
++	} else if ( !traditional && obj != null && typeof obj === "object" ) {
++		// Serialize object item.
++		for ( var name in obj ) {
++			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
++		}
++
++	} else {
++		// Serialize scalar item.
++		add( prefix, obj );
++	}
++}
++
++// This is still on the jQuery object... for now
++// Want to move this to jQuery.ajax some day
++jQuery.extend({
++
++	// Counter for holding the number of active queries
++	active: 0,
++
++	// Last-Modified header cache for next request
++	lastModified: {},
++	etag: {}
++
++});
++
++/* Handles responses to an ajax request:
++ * - sets all responseXXX fields accordingly
++ * - finds the right dataType (mediates between content-type and expected dataType)
++ * - returns the corresponding response
++ */
++function ajaxHandleResponses( s, jqXHR, responses ) {
++
++	var contents = s.contents,
++		dataTypes = s.dataTypes,
++		responseFields = s.responseFields,
++		ct,
++		type,
++		finalDataType,
++		firstDataType;
++
++	// Fill responseXXX fields
++	for( type in responseFields ) {
++		if ( type in responses ) {
++			jqXHR[ responseFields[type] ] = responses[ type ];
++		}
++	}
++
++	// Remove auto dataType and get content-type in the process
++	while( dataTypes[ 0 ] === "*" ) {
++		dataTypes.shift();
++		if ( ct === undefined ) {
++			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
++		}
++	}
++
++	// Check if we're dealing with a known content-type
++	if ( ct ) {
++		for ( type in contents ) {
++			if ( contents[ type ] && contents[ type ].test( ct ) ) {
++				dataTypes.unshift( type );
++				break;
++			}
++		}
++	}
++
++	// Check to see if we have a response for the expected dataType
++	if ( dataTypes[ 0 ] in responses ) {
++		finalDataType = dataTypes[ 0 ];
++	} else {
++		// Try convertible dataTypes
++		for ( type in responses ) {
++			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
++				finalDataType = type;
++				break;
++			}
++			if ( !firstDataType ) {
++				firstDataType = type;
++			}
++		}
++		// Or just use first one
++		finalDataType = finalDataType || firstDataType;
++	}
++
++	// If we found a dataType
++	// We add the dataType to the list if needed
++	// and return the corresponding response
++	if ( finalDataType ) {
++		if ( finalDataType !== dataTypes[ 0 ] ) {
++			dataTypes.unshift( finalDataType );
++		}
++		return responses[ finalDataType ];
++	}
++}
++
++// Chain conversions given the request and the original response
++function ajaxConvert( s, response ) {
++
++	// Apply the dataFilter if provided
++	if ( s.dataFilter ) {
++		response = s.dataFilter( response, s.dataType );
++	}
++
++	var dataTypes = s.dataTypes,
++		converters = {},
++		i,
++		key,
++		length = dataTypes.length,
++		tmp,
++		// Current and previous dataTypes
++		current = dataTypes[ 0 ],
++		prev,
++		// Conversion expression
++		conversion,
++		// Conversion function
++		conv,
++		// Conversion functions (transitive conversion)
++		conv1,
++		conv2;
++
++	// For each dataType in the chain
++	for( i = 1; i < length; i++ ) {
++
++		// Create converters map
++		// with lowercased keys
++		if ( i === 1 ) {
++			for( key in s.converters ) {
++				if( typeof key === "string" ) {
++					converters[ key.toLowerCase() ] = s.converters[ key ];
++				}
++			}
++		}
++
++		// Get the dataTypes
++		prev = current;
++		current = dataTypes[ i ];
++
++		// If current is auto dataType, update it to prev
++		if( current === "*" ) {
++			current = prev;
++		// If no auto and dataTypes are actually different
++		} else if ( prev !== "*" && prev !== current ) {
++
++			// Get the converter
++			conversion = prev + " " + current;
++			conv = converters[ conversion ] || converters[ "* " + current ];
++
++			// If there is no direct converter, search transitively
++			if ( !conv ) {
++				conv2 = undefined;
++				for( conv1 in converters ) {
++					tmp = conv1.split( " " );
++					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
++						conv2 = converters[ tmp[1] + " " + current ];
++						if ( conv2 ) {
++							conv1 = converters[ conv1 ];
++							if ( conv1 === true ) {
++								conv = conv2;
++							} else if ( conv2 === true ) {
++								conv = conv1;
++							}
++							break;
++						}
++					}
++				}
++			}
++			// If we found no converter, dispatch an error
++			if ( !( conv || conv2 ) ) {
++				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
++			}
++			// If found converter is not an equivalence
++			if ( conv !== true ) {
++				// Convert with 1 or 2 converters accordingly
++				response = conv ? conv( response ) : conv2( conv1(response) );
++			}
++		}
++	}
++	return response;
++}
++
++
++
++
++var jsc = jQuery.now(),
++	jsre = /(\=)\?(&|$)|\?\?/i;
++
++// Default jsonp settings
++jQuery.ajaxSetup({
++	jsonp: "callback",
++	jsonpCallback: function() {
++		return jQuery.expando + "_" + ( jsc++ );
++	}
++});
++
++// Detect, normalize options and install callbacks for jsonp requests
++jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
++
++	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
++		( typeof s.data === "string" );
++
++	if ( s.dataTypes[ 0 ] === "jsonp" ||
++		s.jsonp !== false && ( jsre.test( s.url ) ||
++				inspectData && jsre.test( s.data ) ) ) {
++
++		var responseContainer,
++			jsonpCallback = s.jsonpCallback =
++				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
++			previous = window[ jsonpCallback ],
++			url = s.url,
++			data = s.data,
++			replace = "$1" + jsonpCallback + "$2";
++
++		if ( s.jsonp !== false ) {
++			url = url.replace( jsre, replace );
++			if ( s.url === url ) {
++				if ( inspectData ) {
++					data = data.replace( jsre, replace );
++				}
++				if ( s.data === data ) {
++					// Add callback manually
++					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
++				}
++			}
++		}
++
++		s.url = url;
++		s.data = data;
++
++		// Install callback
++		window[ jsonpCallback ] = function( response ) {
++			responseContainer = [ response ];
++		};
++
++		// Clean-up function
++		jqXHR.always(function() {
++			// Set callback back to previous value
++			window[ jsonpCallback ] = previous;
++			// Call if it was a function and we have a response
++			if ( responseContainer && jQuery.isFunction( previous ) ) {
++				window[ jsonpCallback ]( responseContainer[ 0 ] );
++			}
++		});
++
++		// Use data converter to retrieve json after script execution
++		s.converters["script json"] = function() {
++			if ( !responseContainer ) {
++				jQuery.error( jsonpCallback + " was not called" );
++			}
++			return responseContainer[ 0 ];
++		};
++
++		// force json dataType
++		s.dataTypes[ 0 ] = "json";
++
++		// Delegate to script
++		return "script";
++	}
++});
++
++
++
++
++// Install script dataType
++jQuery.ajaxSetup({
++	accepts: {
++		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
++	},
++	contents: {
++		script: /javascript|ecmascript/
++	},
++	converters: {
++		"text script": function( text ) {
++			jQuery.globalEval( text );
++			return text;
++		}
++	}
++});
++
++// Handle cache's special case and global
++jQuery.ajaxPrefilter( "script", function( s ) {
++	if ( s.cache === undefined ) {
++		s.cache = false;
++	}
++	if ( s.crossDomain ) {
++		s.type = "GET";
++		s.global = false;
++	}
++});
++
++// Bind script tag hack transport
++jQuery.ajaxTransport( "script", function(s) {
++
++	// This transport only deals with cross domain requests
++	if ( s.crossDomain ) {
++
++		var script,
++			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
++
++		return {
++
++			send: function( _, callback ) {
++
++				script = document.createElement( "script" );
++
++				script.async = "async";
++
++				if ( s.scriptCharset ) {
++					script.charset = s.scriptCharset;
++				}
++
++				script.src = s.url;
++
++				// Attach handlers for all browsers
++				script.onload = script.onreadystatechange = function( _, isAbort ) {
++
++					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
++
++						// Handle memory leak in IE
++						script.onload = script.onreadystatechange = null;
++
++						// Remove the script
++						if ( head && script.parentNode ) {
++							head.removeChild( script );
++						}
++
++						// Dereference the script
++						script = undefined;
++
++						// Callback if not abort
++						if ( !isAbort ) {
++							callback( 200, "success" );
++						}
++					}
++				};
++				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
++				// This arises when a base node is used (#2709 and #4378).
++				head.insertBefore( script, head.firstChild );
++			},
++
++			abort: function() {
++				if ( script ) {
++					script.onload( 0, 1 );
++				}
++			}
++		};
++	}
++});
++
++
++
++
++var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
++	xhrOnUnloadAbort = window.ActiveXObject ? function() {
++		// Abort all pending requests
++		for ( var key in xhrCallbacks ) {
++			xhrCallbacks[ key ]( 0, 1 );
++		}
++	} : false,
++	xhrId = 0,
++	xhrCallbacks;
++
++// Functions to create xhrs
++function createStandardXHR() {
++	try {
++		return new window.XMLHttpRequest();
++	} catch( e ) {}
++}
++
++function createActiveXHR() {
++	try {
++		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
++	} catch( e ) {}
++}
++
++// Create the request object
++// (This is still attached to ajaxSettings for backward compatibility)
++jQuery.ajaxSettings.xhr = window.ActiveXObject ?
++	/* Microsoft failed to properly
++	 * implement the XMLHttpRequest in IE7 (can't request local files),
++	 * so we use the ActiveXObject when it is available
++	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
++	 * we need a fallback.
++	 */
++	function() {
++		return !this.isLocal && createStandardXHR() || createActiveXHR();
++	} :
++	// For all other browsers, use the standard XMLHttpRequest object
++	createStandardXHR;
++
++// Determine support properties
++(function( xhr ) {
++	jQuery.extend( jQuery.support, {
++		ajax: !!xhr,
++		cors: !!xhr && ( "withCredentials" in xhr )
++	});
++})( jQuery.ajaxSettings.xhr() );
++
++// Create transport if the browser can provide an xhr
++if ( jQuery.support.ajax ) {
++
++	jQuery.ajaxTransport(function( s ) {
++		// Cross domain only allowed if supported through XMLHttpRequest
++		if ( !s.crossDomain || jQuery.support.cors ) {
++
++			var callback;
++
++			return {
++				send: function( headers, complete ) {
++
++					// Get a new xhr
++					var xhr = s.xhr(),
++						handle,
++						i;
++
++					// Open the socket
++					// Passing null username, generates a login popup on Opera (#2865)
++					if ( s.username ) {
++						xhr.open( s.type, s.url, s.async, s.username, s.password );
++					} else {
++						xhr.open( s.type, s.url, s.async );
++					}
++
++					// Apply custom fields if provided
++					if ( s.xhrFields ) {
++						for ( i in s.xhrFields ) {
++							xhr[ i ] = s.xhrFields[ i ];
++						}
++					}
++
++					// Override mime type if needed
++					if ( s.mimeType && xhr.overrideMimeType ) {
++						xhr.overrideMimeType( s.mimeType );
++					}
++
++					// X-Requested-With header
++					// For cross-domain requests, seeing as conditions for a preflight are
++					// akin to a jigsaw puzzle, we simply never set it to be sure.
++					// (it can always be set on a per-request basis or even using ajaxSetup)
++					// For same-domain requests, won't change header if already provided.
++					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
++						headers[ "X-Requested-With" ] = "XMLHttpRequest";
++					}
++
++					// Need an extra try/catch for cross domain requests in Firefox 3
++					try {
++						for ( i in headers ) {
++							xhr.setRequestHeader( i, headers[ i ] );
++						}
++					} catch( _ ) {}
++
++					// Do send the request
++					// This may raise an exception which is actually
++					// handled in jQuery.ajax (so no try/catch here)
++					xhr.send( ( s.hasContent && s.data ) || null );
++
++					// Listener
++					callback = function( _, isAbort ) {
++
++						var status,
++							statusText,
++							responseHeaders,
++							responses,
++							xml;
++
++						// Firefox throws exceptions when accessing properties
++						// of an xhr when a network error occured
++						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
++						try {
++
++							// Was never called and is aborted or complete
++							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
++
++								// Only called once
++								callback = undefined;
++
++								// Do not keep as active anymore
++								if ( handle ) {
++									xhr.onreadystatechange = jQuery.noop;
++									if ( xhrOnUnloadAbort ) {
++										delete xhrCallbacks[ handle ];
++									}
++								}
++
++								// If it's an abort
++								if ( isAbort ) {
++									// Abort it manually if needed
++									if ( xhr.readyState !== 4 ) {
++										xhr.abort();
++									}
++								} else {
++									status = xhr.status;
++									responseHeaders = xhr.getAllResponseHeaders();
++									responses = {};
++									xml = xhr.responseXML;
++
++									// Construct response list
++									if ( xml && xml.documentElement /* #4958 */ ) {
++										responses.xml = xml;
++									}
++									responses.text = xhr.responseText;
++
++									// Firefox throws an exception when accessing
++									// statusText for faulty cross-domain requests
++									try {
++										statusText = xhr.statusText;
++									} catch( e ) {
++										// We normalize with Webkit giving an empty statusText
++										statusText = "";
++									}
++
++									// Filter status for non standard behaviors
++
++									// If the request is local and we have data: assume a success
++									// (success with no data won't get notified, that's the best we
++									// can do given current implementations)
++									if ( !status && s.isLocal && !s.crossDomain ) {
++										status = responses.text ? 200 : 404;
++									// IE - #1450: sometimes returns 1223 when it should be 204
++									} else if ( status === 1223 ) {
++										status = 204;
++									}
++								}
++							}
++						} catch( firefoxAccessException ) {
++							if ( !isAbort ) {
++								complete( -1, firefoxAccessException );
++							}
++						}
++
++						// Call complete if needed
++						if ( responses ) {
++							complete( status, statusText, responses, responseHeaders );
++						}
++					};
++
++					// if we're in sync mode or it's in cache
++					// and has been retrieved directly (IE6 & IE7)
++					// we need to manually fire the callback
++					if ( !s.async || xhr.readyState === 4 ) {
++						callback();
++					} else {
++						handle = ++xhrId;
++						if ( xhrOnUnloadAbort ) {
++							// Create the active xhrs callbacks list if needed
++							// and attach the unload handler
++							if ( !xhrCallbacks ) {
++								xhrCallbacks = {};
++								jQuery( window ).unload( xhrOnUnloadAbort );
++							}
++							// Add to list of active xhrs callbacks
++							xhrCallbacks[ handle ] = callback;
++						}
++						xhr.onreadystatechange = callback;
++					}
++				},
++
++				abort: function() {
++					if ( callback ) {
++						callback(0,1);
++					}
++				}
++			};
++		}
++	});
++}
++
++
++
++
++var elemdisplay = {},
++	iframe, iframeDoc,
++	rfxtypes = /^(?:toggle|show|hide)$/,
++	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
++	timerId,
++	fxAttrs = [
++		// height animations
++		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
++		// width animations
++		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
++		// opacity animations
++		[ "opacity" ]
++	],
++	fxNow,
++	requestAnimationFrame = window.webkitRequestAnimationFrame ||
++		window.mozRequestAnimationFrame ||
++		window.oRequestAnimationFrame;
++
++jQuery.fn.extend({
++	show: function( speed, easing, callback ) {
++		var elem, display;
++
++		if ( speed || speed === 0 ) {
++			return this.animate( genFx("show", 3), speed, easing, callback);
++
++		} else {
++			for ( var i = 0, j = this.length; i < j; i++ ) {
++				elem = this[i];
++
++				if ( elem.style ) {
++					display = elem.style.display;
++
++					// Reset the inline display of this element to learn if it is
++					// being hidden by cascaded rules or not
++					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
++						display = elem.style.display = "";
++					}
++
++					// Set elements which have been overridden with display: none
++					// in a stylesheet to whatever the default browser style is
++					// for such an element
++					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
++						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
++					}
++				}
++			}
++
++			// Set the display of most of the elements in a second loop
++			// to avoid the constant reflow
++			for ( i = 0; i < j; i++ ) {
++				elem = this[i];
++
++				if ( elem.style ) {
++					display = elem.style.display;
++
++					if ( display === "" || display === "none" ) {
++						elem.style.display = jQuery._data(elem, "olddisplay") || "";
++					}
++				}
++			}
++
++			return this;
++		}
++	},
++
++	hide: function( speed, easing, callback ) {
++		if ( speed || speed === 0 ) {
++			return this.animate( genFx("hide", 3), speed, easing, callback);
++
++		} else {
++			for ( var i = 0, j = this.length; i < j; i++ ) {
++				if ( this[i].style ) {
++					var display = jQuery.css( this[i], "display" );
++
++					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
++						jQuery._data( this[i], "olddisplay", display );
++					}
++				}
++			}
++
++			// Set the display of the elements in a second loop
++			// to avoid the constant reflow
++			for ( i = 0; i < j; i++ ) {
++				if ( this[i].style ) {
++					this[i].style.display = "none";
++				}
++			}
++
++			return this;
++		}
++	},
++
++	// Save the old toggle function
++	_toggle: jQuery.fn.toggle,
++
++	toggle: function( fn, fn2, callback ) {
++		var bool = typeof fn === "boolean";
++
++		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
++			this._toggle.apply( this, arguments );
++
++		} else if ( fn == null || bool ) {
++			this.each(function() {
++				var state = bool ? fn : jQuery(this).is(":hidden");
++				jQuery(this)[ state ? "show" : "hide" ]();
++			});
++
++		} else {
++			this.animate(genFx("toggle", 3), fn, fn2, callback);
++		}
++
++		return this;
++	},
++
++	fadeTo: function( speed, to, easing, callback ) {
++		return this.filter(":hidden").css("opacity", 0).show().end()
++					.animate({opacity: to}, speed, easing, callback);
++	},
++
++	animate: function( prop, speed, easing, callback ) {
++		var optall = jQuery.speed(speed, easing, callback);
++
++		if ( jQuery.isEmptyObject( prop ) ) {
++			return this.each( optall.complete, [ false ] );
++		}
++
++		// Do not change referenced properties as per-property easing will be lost
++		prop = jQuery.extend( {}, prop );
++
++		return this[ optall.queue === false ? "each" : "queue" ](function() {
++			// XXX 'this' does not always have a nodeName when running the
++			// test suite
++
++			if ( optall.queue === false ) {
++				jQuery._mark( this );
++			}
++
++			var opt = jQuery.extend( {}, optall ),
++				isElement = this.nodeType === 1,
++				hidden = isElement && jQuery(this).is(":hidden"),
++				name, val, p,
++				display, e,
++				parts, start, end, unit;
++
++			// will store per property easing and be used to determine when an animation is complete
++			opt.animatedProperties = {};
++
++			for ( p in prop ) {
++
++				// property name normalization
++				name = jQuery.camelCase( p );
++				if ( p !== name ) {
++					prop[ name ] = prop[ p ];
++					delete prop[ p ];
++				}
++
++				val = prop[ name ];
++
++				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
++				if ( jQuery.isArray( val ) ) {
++					opt.animatedProperties[ name ] = val[ 1 ];
++					val = prop[ name ] = val[ 0 ];
++				} else {
++					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
++				}
++
++				if ( val === "hide" && hidden || val === "show" && !hidden ) {
++					return opt.complete.call( this );
++				}
++
++				if ( isElement && ( name === "height" || name === "width" ) ) {
++					// Make sure that nothing sneaks out
++					// Record all 3 overflow attributes because IE does not
++					// change the overflow attribute when overflowX and
++					// overflowY are set to the same value
++					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
++
++					// Set display property to inline-block for height/width
++					// animations on inline elements that are having width/height
++					// animated
++					if ( jQuery.css( this, "display" ) === "inline" &&
++							jQuery.css( this, "float" ) === "none" ) {
++						if ( !jQuery.support.inlineBlockNeedsLayout ) {
++							this.style.display = "inline-block";
++
++						} else {
++							display = defaultDisplay( this.nodeName );
++
++							// inline-level elements accept inline-block;
++							// block-level elements need to be inline with layout
++							if ( display === "inline" ) {
++								this.style.display = "inline-block";
++
++							} else {
++								this.style.display = "inline";
++								this.style.zoom = 1;
++							}
++						}
++					}
++				}
++			}
++
++			if ( opt.overflow != null ) {
++				this.style.overflow = "hidden";
++			}
++
++			for ( p in prop ) {
++				e = new jQuery.fx( this, opt, p );
++				val = prop[ p ];
++
++				if ( rfxtypes.test(val) ) {
++					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
++
++				} else {
++					parts = rfxnum.exec( val );
++					start = e.cur();
++
++					if ( parts ) {
++						end = parseFloat( parts[2] );
++						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
++
++						// We need to compute starting value
++						if ( unit !== "px" ) {
++							jQuery.style( this, p, (end || 1) + unit);
++							start = ((end || 1) / e.cur()) * start;
++							jQuery.style( this, p, start + unit);
++						}
++
++						// If a +=/-= token was provided, we're doing a relative animation
++						if ( parts[1] ) {
++							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
++						}
++
++						e.custom( start, end, unit );
++
++					} else {
++						e.custom( start, val, "" );
++					}
++				}
++			}
++
++			// For JS strict compliance
++			return true;
++		});
++	},
++
++	stop: function( clearQueue, gotoEnd ) {
++		if ( clearQueue ) {
++			this.queue([]);
++		}
++
++		this.each(function() {
++			var timers = jQuery.timers,
++				i = timers.length;
++			// clear marker counters if we know they won't be
++			if ( !gotoEnd ) {
++				jQuery._unmark( true, this );
++			}
++			while ( i-- ) {
++				if ( timers[i].elem === this ) {
++					if (gotoEnd) {
++						// force the next step to be the last
++						timers[i](true);
++					}
++
++					timers.splice(i, 1);
++				}
++			}
++		});
++
++		// start the next in the queue if the last step wasn't forced
++		if ( !gotoEnd ) {
++			this.dequeue();
++		}
++
++		return this;
++	}
++
++});
++
++// Animations created synchronously will run synchronously
++function createFxNow() {
++	setTimeout( clearFxNow, 0 );
++	return ( fxNow = jQuery.now() );
++}
++
++function clearFxNow() {
++	fxNow = undefined;
++}
++
++// Generate parameters to create a standard animation
++function genFx( type, num ) {
++	var obj = {};
++
++	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
++		obj[ this ] = type;
++	});
++
++	return obj;
++}
++
++// Generate shortcuts for custom animations
++jQuery.each({
++	slideDown: genFx("show", 1),
++	slideUp: genFx("hide", 1),
++	slideToggle: genFx("toggle", 1),
++	fadeIn: { opacity: "show" },
++	fadeOut: { opacity: "hide" },
++	fadeToggle: { opacity: "toggle" }
++}, function( name, props ) {
++	jQuery.fn[ name ] = function( speed, easing, callback ) {
++		return this.animate( props, speed, easing, callback );
++	};
++});
++
++jQuery.extend({
++	speed: function( speed, easing, fn ) {
++		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
++			complete: fn || !fn && easing ||
++				jQuery.isFunction( speed ) && speed,
++			duration: speed,
++			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
++		};
++
++		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
++			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
++
++		// Queueing
++		opt.old = opt.complete;
++		opt.complete = function( noUnmark ) {
++			if ( jQuery.isFunction( opt.old ) ) {
++				opt.old.call( this );
++			}
++
++			if ( opt.queue !== false ) {
++				jQuery.dequeue( this );
++			} else if ( noUnmark !== false ) {
++				jQuery._unmark( this );
++			}
++		};
++
++		return opt;
++	},
++
++	easing: {
++		linear: function( p, n, firstNum, diff ) {
++			return firstNum + diff * p;
++		},
++		swing: function( p, n, firstNum, diff ) {
++			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
++		}
++	},
++
++	timers: [],
++
++	fx: function( elem, options, prop ) {
++		this.options = options;
++		this.elem = elem;
++		this.prop = prop;
++
++		options.orig = options.orig || {};
++	}
++
++});
++
++jQuery.fx.prototype = {
++	// Simple function for setting a style value
++	update: function() {
++		if ( this.options.step ) {
++			this.options.step.call( this.elem, this.now, this );
++		}
++
++		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
++	},
++
++	// Get the current size
++	cur: function() {
++		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
++			return this.elem[ this.prop ];
++		}
++
++		var parsed,
++			r = jQuery.css( this.elem, this.prop );
++		// Empty strings, null, undefined and "auto" are converted to 0,
++		// complex values such as "rotate(1rad)" are returned as is,
++		// simple values such as "10px" are parsed to Float.
++		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
++	},
++
++	// Start an animation from one number to another
++	custom: function( from, to, unit ) {
++		var self = this,
++			fx = jQuery.fx,
++			raf;
++
++		this.startTime = fxNow || createFxNow();
++		this.start = from;
++		this.end = to;
++		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
++		this.now = this.start;
++		this.pos = this.state = 0;
++
++		function t( gotoEnd ) {
++			return self.step(gotoEnd);
++		}
++
++		t.elem = this.elem;
++
++		if ( t() && jQuery.timers.push(t) && !timerId ) {
++			// Use requestAnimationFrame instead of setInterval if available
++			if ( requestAnimationFrame ) {
++				timerId = true;
++				raf = function() {
++					// When timerId gets set to null at any point, this stops
++					if ( timerId ) {
++						requestAnimationFrame( raf );
++						fx.tick();
++					}
++				};
++				requestAnimationFrame( raf );
++			} else {
++				timerId = setInterval( fx.tick, fx.interval );
++			}
++		}
++	},
++
++	// Simple 'show' function
++	show: function() {
++		// Remember where we started, so that we can go back to it later
++		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
++		this.options.show = true;
++
++		// Begin the animation
++		// Make sure that we start at a small width/height to avoid any
++		// flash of content
++		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
++
++		// Start by showing the element
++		jQuery( this.elem ).show();
++	},
++
++	// Simple 'hide' function
++	hide: function() {
++		// Remember where we started, so that we can go back to it later
++		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
++		this.options.hide = true;
++
++		// Begin the animation
++		this.custom(this.cur(), 0);
++	},
++
++	// Each step of an animation
++	step: function( gotoEnd ) {
++		var t = fxNow || createFxNow(),
++			done = true,
++			elem = this.elem,
++			options = this.options,
++			i, n;
++
++		if ( gotoEnd || t >= options.duration + this.startTime ) {
++			this.now = this.end;
++			this.pos = this.state = 1;
++			this.update();
++
++			options.animatedProperties[ this.prop ] = true;
++
++			for ( i in options.animatedProperties ) {
++				if ( options.animatedProperties[i] !== true ) {
++					done = false;
++				}
++			}
++
++			if ( done ) {
++				// Reset the overflow
++				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
++
++					jQuery.each( [ "", "X", "Y" ], function (index, value) {
++						elem.style[ "overflow" + value ] = options.overflow[index];
++					});
++				}
++
++				// Hide the element if the "hide" operation was done
++				if ( options.hide ) {
++					jQuery(elem).hide();
++				}
++
++				// Reset the properties, if the item has been hidden or shown
++				if ( options.hide || options.show ) {
++					for ( var p in options.animatedProperties ) {
++						jQuery.style( elem, p, options.orig[p] );
++					}
++				}
++
++				// Execute the complete function
++				options.complete.call( elem );
++			}
++
++			return false;
++
++		} else {
++			// classical easing cannot be used with an Infinity duration
++			if ( options.duration == Infinity ) {
++				this.now = t;
++			} else {
++				n = t - this.startTime;
++				this.state = n / options.duration;
++
++				// Perform the easing function, defaults to swing
++				this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
++				this.now = this.start + ((this.end - this.start) * this.pos);
++			}
++			// Perform the next step of the animation
++			this.update();
++		}
++
++		return true;
++	}
++};
++
++jQuery.extend( jQuery.fx, {
++	tick: function() {
++		for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
++			if ( !timers[i]() ) {
++				timers.splice(i--, 1);
++			}
++		}
++
++		if ( !timers.length ) {
++			jQuery.fx.stop();
++		}
++	},
++
++	interval: 13,
++
++	stop: function() {
++		clearInterval( timerId );
++		timerId = null;
++	},
++
++	speeds: {
++		slow: 600,
++		fast: 200,
++		// Default speed
++		_default: 400
++	},
++
++	step: {
++		opacity: function( fx ) {
++			jQuery.style( fx.elem, "opacity", fx.now );
++		},
++
++		_default: function( fx ) {
++			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
++				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
++			} else {
++				fx.elem[ fx.prop ] = fx.now;
++			}
++		}
++	}
++});
++
++if ( jQuery.expr && jQuery.expr.filters ) {
++	jQuery.expr.filters.animated = function( elem ) {
++		return jQuery.grep(jQuery.timers, function( fn ) {
++			return elem === fn.elem;
++		}).length;
++	};
++}
++
++// Try to restore the default display value of an element
++function defaultDisplay( nodeName ) {
++
++	if ( !elemdisplay[ nodeName ] ) {
++
++		var body = document.body,
++			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
++			display = elem.css( "display" );
++
++		elem.remove();
++
++		// If the simple way fails,
++		// get element's real default display by attaching it to a temp iframe
++		if ( display === "none" || display === "" ) {
++			// No iframe to use yet, so create it
++			if ( !iframe ) {
++				iframe = document.createElement( "iframe" );
++				iframe.frameBorder = iframe.width = iframe.height = 0;
++			}
++
++			body.appendChild( iframe );
++
++			// Create a cacheable copy of the iframe document on first call.
++			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
++			// document to it; WebKit & Firefox won't allow reusing the iframe document.
++			if ( !iframeDoc || !iframe.createElement ) {
++				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
++				iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
++				iframeDoc.close();
++			}
++
++			elem = iframeDoc.createElement( nodeName );
++
++			iframeDoc.body.appendChild( elem );
++
++			display = jQuery.css( elem, "display" );
++
++			body.removeChild( iframe );
++		}
++
++		// Store the correct default display
++		elemdisplay[ nodeName ] = display;
++	}
++
++	return elemdisplay[ nodeName ];
++}
++
++
++
++
++var rtable = /^t(?:able|d|h)$/i,
++	rroot = /^(?:body|html)$/i;
++
++if ( "getBoundingClientRect" in document.documentElement ) {
++	jQuery.fn.offset = function( options ) {
++		var elem = this[0], box;
++
++		if ( options ) {
++			return this.each(function( i ) {
++				jQuery.offset.setOffset( this, options, i );
++			});
++		}
++
++		if ( !elem || !elem.ownerDocument ) {
++			return null;
++		}
++
++		if ( elem === elem.ownerDocument.body ) {
++			return jQuery.offset.bodyOffset( elem );
++		}
++
++		try {
++			box = elem.getBoundingClientRect();
++		} catch(e) {}
++
++		var doc = elem.ownerDocument,
++			docElem = doc.documentElement;
++
++		// Make sure we're not dealing with a disconnected DOM node
++		if ( !box || !jQuery.contains( docElem, elem ) ) {
++			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
++		}
++
++		var body = doc.body,
++			win = getWindow(doc),
++			clientTop  = docElem.clientTop  || body.clientTop  || 0,
++			clientLeft = docElem.clientLeft || body.clientLeft || 0,
++			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
++			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
++			top  = box.top  + scrollTop  - clientTop,
++			left = box.left + scrollLeft - clientLeft;
++
++		return { top: top, left: left };
++	};
++
++} else {
++	jQuery.fn.offset = function( options ) {
++		var elem = this[0];
++
++		if ( options ) {
++			return this.each(function( i ) {
++				jQuery.offset.setOffset( this, options, i );
++			});
++		}
++
++		if ( !elem || !elem.ownerDocument ) {
++			return null;
++		}
++
++		if ( elem === elem.ownerDocument.body ) {
++			return jQuery.offset.bodyOffset( elem );
++		}
++
++		jQuery.offset.initialize();
++
++		var computedStyle,
++			offsetParent = elem.offsetParent,
++			prevOffsetParent = elem,
++			doc = elem.ownerDocument,
++			docElem = doc.documentElement,
++			body = doc.body,
++			defaultView = doc.defaultView,
++			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
++			top = elem.offsetTop,
++			left = elem.offsetLeft;
++
++		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
++			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
++				break;
++			}
++
++			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
++			top  -= elem.scrollTop;
++			left -= elem.scrollLeft;
++
++			if ( elem === offsetParent ) {
++				top  += elem.offsetTop;
++				left += elem.offsetLeft;
++
++				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
++					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
++					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
++				}
++
++				prevOffsetParent = offsetParent;
++				offsetParent = elem.offsetParent;
++			}
++
++			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
++				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
++				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
++			}
++
++			prevComputedStyle = computedStyle;
++		}
++
++		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
++			top  += body.offsetTop;
++			left += body.offsetLeft;
++		}
++
++		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
++			top  += Math.max( docElem.scrollTop, body.scrollTop );
++			left += Math.max( docElem.scrollLeft, body.scrollLeft );
++		}
++
++		return { top: top, left: left };
++	};
++}
++
++jQuery.offset = {
++	initialize: function() {
++		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
++			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
++
++		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
++
++		container.innerHTML = html;
++		body.insertBefore( container, body.firstChild );
++		innerDiv = container.firstChild;
++		checkDiv = innerDiv.firstChild;
++		td = innerDiv.nextSibling.firstChild.firstChild;
++
++		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
++		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
++
++		checkDiv.style.position = "fixed";
++		checkDiv.style.top = "20px";
++
++		// safari subtracts parent border width here which is 5px
++		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
++		checkDiv.style.position = checkDiv.style.top = "";
++
++		innerDiv.style.overflow = "hidden";
++		innerDiv.style.position = "relative";
++
++		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
++
++		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
++
++		body.removeChild( container );
++		jQuery.offset.initialize = jQuery.noop;
++	},
++
++	bodyOffset: function( body ) {
++		var top = body.offsetTop,
++			left = body.offsetLeft;
++
++		jQuery.offset.initialize();
++
++		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
++			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
++			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
++		}
++
++		return { top: top, left: left };
++	},
++
++	setOffset: function( elem, options, i ) {
++		var position = jQuery.css( elem, "position" );
++
++		// set position first, in-case top/left are set even on static elem
++		if ( position === "static" ) {
++			elem.style.position = "relative";
++		}
++
++		var curElem = jQuery( elem ),
++			curOffset = curElem.offset(),
++			curCSSTop = jQuery.css( elem, "top" ),
++			curCSSLeft = jQuery.css( elem, "left" ),
++			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
++			props = {}, curPosition = {}, curTop, curLeft;
++
++		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
++		if ( calculatePosition ) {
++			curPosition = curElem.position();
++			curTop = curPosition.top;
++			curLeft = curPosition.left;
++		} else {
++			curTop = parseFloat( curCSSTop ) || 0;
++			curLeft = parseFloat( curCSSLeft ) || 0;
++		}
++
++		if ( jQuery.isFunction( options ) ) {
++			options = options.call( elem, i, curOffset );
++		}
++
++		if (options.top != null) {
++			props.top = (options.top - curOffset.top) + curTop;
++		}
++		if (options.left != null) {
++			props.left = (options.left - curOffset.left) + curLeft;
++		}
++
++		if ( "using" in options ) {
++			options.using.call( elem, props );
++		} else {
++			curElem.css( props );
++		}
++	}
++};
++
++
++jQuery.fn.extend({
++	position: function() {
++		if ( !this[0] ) {
++			return null;
++		}
++
++		var elem = this[0],
++
++		// Get *real* offsetParent
++		offsetParent = this.offsetParent(),
++
++		// Get correct offsets
++		offset       = this.offset(),
++		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
++
++		// Subtract element margins
++		// note: when an element has margin: auto the offsetLeft and marginLeft
++		// are the same in Safari causing offset.left to incorrectly be 0
++		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
++		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
++
++		// Add offsetParent borders
++		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
++		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
++
++		// Subtract the two offsets
++		return {
++			top:  offset.top  - parentOffset.top,
++			left: offset.left - parentOffset.left
++		};
++	},
++
++	offsetParent: function() {
++		return this.map(function() {
++			var offsetParent = this.offsetParent || document.body;
++			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
++				offsetParent = offsetParent.offsetParent;
++			}
++			return offsetParent;
++		});
++	}
++});
++
++
++// Create scrollLeft and scrollTop methods
++jQuery.each( ["Left", "Top"], function( i, name ) {
++	var method = "scroll" + name;
++
++	jQuery.fn[ method ] = function( val ) {
++		var elem, win;
++
++		if ( val === undefined ) {
++			elem = this[ 0 ];
++
++			if ( !elem ) {
++				return null;
++			}
++
++			win = getWindow( elem );
++
++			// Return the scroll offset
++			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
++				jQuery.support.boxModel && win.document.documentElement[ method ] ||
++					win.document.body[ method ] :
++				elem[ method ];
++		}
++
++		// Set the scroll offset
++		return this.each(function() {
++			win = getWindow( this );
++
++			if ( win ) {
++				win.scrollTo(
++					!i ? val : jQuery( win ).scrollLeft(),
++					 i ? val : jQuery( win ).scrollTop()
++				);
++
++			} else {
++				this[ method ] = val;
++			}
++		});
++	};
++});
++
++function getWindow( elem ) {
++	return jQuery.isWindow( elem ) ?
++		elem :
++		elem.nodeType === 9 ?
++			elem.defaultView || elem.parentWindow :
++			false;
++}
++
++
++
++
++// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
++jQuery.each([ "Height", "Width" ], function( i, name ) {
++
++	var type = name.toLowerCase();
++
++	// innerHeight and innerWidth
++	jQuery.fn[ "inner" + name ] = function() {
++		var elem = this[0];
++		return elem && elem.style ?
++			parseFloat( jQuery.css( elem, type, "padding" ) ) :
++			null;
++	};
++
++	// outerHeight and outerWidth
++	jQuery.fn[ "outer" + name ] = function( margin ) {
++		var elem = this[0];
++		return elem && elem.style ?
++			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
++			null;
++	};
++
++	jQuery.fn[ type ] = function( size ) {
++		// Get window width or height
++		var elem = this[0];
++		if ( !elem ) {
++			return size == null ? null : this;
++		}
++
++		if ( jQuery.isFunction( size ) ) {
++			return this.each(function( i ) {
++				var self = jQuery( this );
++				self[ type ]( size.call( this, i, self[ type ]() ) );
++			});
++		}
++
++		if ( jQuery.isWindow( elem ) ) {
++			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
++			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
++			var docElemProp = elem.document.documentElement[ "client" + name ];
++			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
++				elem.document.body[ "client" + name ] || docElemProp;
++
++		// Get document width or height
++		} else if ( elem.nodeType === 9 ) {
++			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
++			return Math.max(
++				elem.documentElement["client" + name],
++				elem.body["scroll" + name], elem.documentElement["scroll" + name],
++				elem.body["offset" + name], elem.documentElement["offset" + name]
++			);
++
++		// Get or set width or height on the element
++		} else if ( size === undefined ) {
++			var orig = jQuery.css( elem, type ),
++				ret = parseFloat( orig );
++
++			return jQuery.isNaN( ret ) ? orig : ret;
++
++		// Set the width or height on the element (default to pixels if value is unitless)
++		} else {
++			return this.css( type, typeof size === "string" ? size : size + "px" );
++		}
++	};
++
++});
++
++
++// Expose jQuery to the global object
++window.jQuery = window.$ = jQuery;
++})(window);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.js	(revision 15487)
+@@ -0,0 +1,1415 @@
++/*
++ * QUnit - A JavaScript Unit Testing Framework
++ * 
++ * http://docs.jquery.com/QUnit
++ *
++ * Copyright (c) 2011 John Resig, Jörn Zaefferer
++ * Dual licensed under the MIT (MIT-LICENSE.txt)
++ * or GPL (GPL-LICENSE.txt) licenses.
++ */
++
++(function(window) {
++
++var defined = {
++	setTimeout: typeof window.setTimeout !== "undefined",
++	sessionStorage: (function() {
++		try {
++			return !!sessionStorage.getItem;
++		} catch(e){
++			return false;
++		}
++  })()
++}
++
++var testId = 0;
++
++var Test = function(name, testName, expected, testEnvironmentArg, async, callback) {
++	this.name = name;
++	this.testName = testName;
++	this.expected = expected;
++	this.testEnvironmentArg = testEnvironmentArg;
++	this.async = async;
++	this.callback = callback;
++	this.assertions = [];
++};
++Test.prototype = {
++	init: function() {
++		var tests = id("qunit-tests");
++		if (tests) {
++			var b = document.createElement("strong");
++				b.innerHTML = "Running " + this.name;
++			var li = document.createElement("li");
++				li.appendChild( b );
++				li.id = this.id = "test-output" + testId++;
++			tests.appendChild( li );
++		}
++	},
++	setup: function() {
++		if (this.module != config.previousModule) {
++			if ( config.previousModule ) {
++				QUnit.moduleDone( {
++					name: config.previousModule,
++					failed: config.moduleStats.bad,
++					passed: config.moduleStats.all - config.moduleStats.bad,
++					total: config.moduleStats.all
++				} );
++			}
++			config.previousModule = this.module;
++			config.moduleStats = { all: 0, bad: 0 };
++			QUnit.moduleStart( {
++				name: this.module
++			} );
++		}
++
++		config.current = this;
++		this.testEnvironment = extend({
++			setup: function() {},
++			teardown: function() {}
++		}, this.moduleTestEnvironment);
++		if (this.testEnvironmentArg) {
++			extend(this.testEnvironment, this.testEnvironmentArg);
++		}
++
++		QUnit.testStart( {
++			name: this.testName
++		} );
++
++		// allow utility functions to access the current test environment
++		// TODO why??
++		QUnit.current_testEnvironment = this.testEnvironment;
++		
++		try {
++			if ( !config.pollution ) {
++				saveGlobal();
++			}
++
++			this.testEnvironment.setup.call(this.testEnvironment);
++		} catch(e) {
++			QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message );
++		}
++	},
++	run: function() {
++		if ( this.async ) {
++			QUnit.stop();
++		}
++
++		if ( config.notrycatch ) {
++			this.callback.call(this.testEnvironment);
++			return;
++		}
++		try {
++			this.callback.call(this.testEnvironment);
++		} catch(e) {
++			fail("Test " + this.testName + " died, exception and test follows", e, this.callback);
++			QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) );
++			// else next test will carry the responsibility
++			saveGlobal();
++
++			// Restart the tests if they're blocking
++			if ( config.blocking ) {
++				start();
++			}
++		}
++	},
++	teardown: function() {
++		try {
++			checkPollution();
++			this.testEnvironment.teardown.call(this.testEnvironment);
++		} catch(e) {
++			QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message );
++		}
++	},
++	finish: function() {
++		if ( this.expected && this.expected != this.assertions.length ) {
++			QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" );
++		}
++		
++		var good = 0, bad = 0,
++			tests = id("qunit-tests");
++
++		config.stats.all += this.assertions.length;
++		config.moduleStats.all += this.assertions.length;
++
++		if ( tests ) {
++			var ol  = document.createElement("ol");
++
++			for ( var i = 0; i < this.assertions.length; i++ ) {
++				var assertion = this.assertions[i];
++
++				var li = document.createElement("li");
++				li.className = assertion.result ? "pass" : "fail";
++				li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
++				ol.appendChild( li );
++
++				if ( assertion.result ) {
++					good++;
++				} else {
++					bad++;
++					config.stats.bad++;
++					config.moduleStats.bad++;
++				}
++			}
++
++			// store result when possible
++			defined.sessionStorage && sessionStorage.setItem("qunit-" + this.testName, bad);
++
++			if (bad == 0) {
++				ol.style.display = "none";
++			}
++
++			var b = document.createElement("strong");
++			b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
++			
++			addEvent(b, "click", function() {
++				var next = b.nextSibling, display = next.style.display;
++				next.style.display = display === "none" ? "block" : "none";
++			});
++			
++			addEvent(b, "dblclick", function(e) {
++				var target = e && e.target ? e.target : window.event.srcElement;
++				if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
++					target = target.parentNode;
++				}
++				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
++					window.location.search = "?" + encodeURIComponent(getText([target]).replace(/\(.+\)$/, "").replace(/(^\s*|\s*$)/g, ""));
++				}
++			});
++
++			var li = id(this.id);
++			li.className = bad ? "fail" : "pass";
++			li.style.display = resultDisplayStyle(!bad);
++			li.removeChild( li.firstChild );
++			li.appendChild( b );
++			li.appendChild( ol );
++
++		} else {
++			for ( var i = 0; i < this.assertions.length; i++ ) {
++				if ( !this.assertions[i].result ) {
++					bad++;
++					config.stats.bad++;
++					config.moduleStats.bad++;
++				}
++			}
++		}
++
++		try {
++			QUnit.reset();
++		} catch(e) {
++			fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
++		}
++
++		QUnit.testDone( {
++			name: this.testName,
++			failed: bad,
++			passed: this.assertions.length - bad,
++			total: this.assertions.length
++		} );
++	},
++	
++	queue: function() {
++		var test = this;
++		synchronize(function() {
++			test.init();
++		});
++		function run() {
++			// each of these can by async
++			synchronize(function() {
++				test.setup();
++			});
++			synchronize(function() {
++				test.run();
++			});
++			synchronize(function() {
++				test.teardown();
++			});
++			synchronize(function() {
++				test.finish();
++			});
++		}
++		// defer when previous test run passed, if storage is available
++		var bad = defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.testName);
++		if (bad) {
++			run();
++		} else {
++			synchronize(run);
++		};
++	}
++	
++}
++
++var QUnit = {
++
++	// call on start of module test to prepend name to all tests
++	module: function(name, testEnvironment) {
++		config.currentModule = name;
++		config.currentModuleTestEnviroment = testEnvironment;
++	},
++
++	asyncTest: function(testName, expected, callback) {
++		if ( arguments.length === 2 ) {
++			callback = expected;
++			expected = 0;
++		}
++
++		QUnit.test(testName, expected, callback, true);
++	},
++	
++	test: function(testName, expected, callback, async) {
++		var name = '<span class="test-name">' + testName + '</span>', testEnvironmentArg;
++
++		if ( arguments.length === 2 ) {
++			callback = expected;
++			expected = null;
++		}
++		// is 2nd argument a testEnvironment?
++		if ( expected && typeof expected === 'object') {
++			testEnvironmentArg =  expected;
++			expected = null;
++		}
++
++		if ( config.currentModule ) {
++			name = '<span class="module-name">' + config.currentModule + "</span>: " + name;
++		}
++
++		if ( !validTest(config.currentModule + ": " + testName) ) {
++			return;
++		}
++		
++		var test = new Test(name, testName, expected, testEnvironmentArg, async, callback);
++		test.module = config.currentModule;
++		test.moduleTestEnvironment = config.currentModuleTestEnviroment;
++		test.queue();
++	},
++	
++	/**
++	 * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
++	 */
++	expect: function(asserts) {
++		config.current.expected = asserts;
++	},
++
++	/**
++	 * Asserts true.
++	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
++	 */
++	ok: function(a, msg) {
++		a = !!a;
++		var details = {
++			result: a,
++			message: msg
++		};
++		msg = escapeHtml(msg);
++		QUnit.log(details);
++		config.current.assertions.push({
++			result: a,
++			message: msg
++		});
++	},
++
++	/**
++	 * Checks that the first two arguments are equal, with an optional message.
++	 * Prints out both actual and expected values.
++	 *
++	 * Prefered to ok( actual == expected, message )
++	 *
++	 * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
++	 *
++	 * @param Object actual
++	 * @param Object expected
++	 * @param String message (optional)
++	 */
++	equal: function(actual, expected, message) {
++		QUnit.push(expected == actual, actual, expected, message);
++	},
++
++	notEqual: function(actual, expected, message) {
++		QUnit.push(expected != actual, actual, expected, message);
++	},
++	
++	deepEqual: function(actual, expected, message) {
++		QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
++	},
++
++	notDeepEqual: function(actual, expected, message) {
++		QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);
++	},
++
++	strictEqual: function(actual, expected, message) {
++		QUnit.push(expected === actual, actual, expected, message);
++	},
++
++	notStrictEqual: function(actual, expected, message) {
++		QUnit.push(expected !== actual, actual, expected, message);
++	},
++
++	raises: function(block, expected, message) {
++		var actual, ok = false;
++	
++		if (typeof expected === 'string') {
++			message = expected;
++			expected = null;
++		}
++	
++		try {
++			block();
++		} catch (e) {
++			actual = e;
++		}
++	
++		if (actual) {
++			// we don't want to validate thrown error
++			if (!expected) {
++				ok = true;
++			// expected is a regexp	
++			} else if (QUnit.objectType(expected) === "regexp") {
++				ok = expected.test(actual);
++			// expected is a constructor	
++			} else if (actual instanceof expected) {
++				ok = true;
++			// expected is a validation function which returns true is validation passed	
++			} else if (expected.call({}, actual) === true) {
++				ok = true;
++			}
++		}
++			
++		QUnit.ok(ok, message);
++	},
++
++	start: function() {
++		config.semaphore--;
++		if (config.semaphore > 0) {
++			// don't start until equal number of stop-calls
++			return;
++		}
++		if (config.semaphore < 0) {
++			// ignore if start is called more often then stop
++			config.semaphore = 0;
++		}
++		// A slight delay, to avoid any current callbacks
++		if ( defined.setTimeout ) {
++			window.setTimeout(function() {
++				if ( config.timeout ) {
++					clearTimeout(config.timeout);
++				}
++
++				config.blocking = false;
++				process();
++			}, 13);
++		} else {
++			config.blocking = false;
++			process();
++		}
++	},
++	
++	stop: function(timeout) {
++		config.semaphore++;
++		config.blocking = true;
++
++		if ( timeout && defined.setTimeout ) {
++			clearTimeout(config.timeout);
++			config.timeout = window.setTimeout(function() {
++				QUnit.ok( false, "Test timed out" );
++				QUnit.start();
++			}, timeout);
++		}
++	}
++
++};
++
++// Backwards compatibility, deprecated
++QUnit.equals = QUnit.equal;
++QUnit.same = QUnit.deepEqual;
++
++// Maintain internal state
++var config = {
++	// The queue of tests to run
++	queue: [],
++
++	// block until document ready
++	blocking: true
++};
++
++// Load paramaters
++(function() {
++	var location = window.location || { search: "", protocol: "file:" },
++		GETParams = location.search.slice(1).split('&');
++
++	for ( var i = 0; i < GETParams.length; i++ ) {
++		GETParams[i] = decodeURIComponent( GETParams[i] );
++		if ( GETParams[i] === "noglobals" ) {
++			GETParams.splice( i, 1 );
++			i--;
++			config.noglobals = true;
++		} else if ( GETParams[i] === "notrycatch" ) {
++			GETParams.splice( i, 1 );
++			i--;
++			config.notrycatch = true;
++		} else if ( GETParams[i].search('=') > -1 ) {
++			GETParams.splice( i, 1 );
++			i--;
++		}
++	}
++	
++	// restrict modules/tests by get parameters
++	config.filters = GETParams;
++	
++	// Figure out if we're running the tests from a server or not
++	QUnit.isLocal = !!(location.protocol === 'file:');
++})();
++
++// Expose the API as global variables, unless an 'exports'
++// object exists, in that case we assume we're in CommonJS
++if ( typeof exports === "undefined" || typeof require === "undefined" ) {
++	extend(window, QUnit);
++	window.QUnit = QUnit;
++} else {
++	extend(exports, QUnit);
++	exports.QUnit = QUnit;
++}
++
++// define these after exposing globals to keep them in these QUnit namespace only
++extend(QUnit, {
++	config: config,
++
++	// Initialize the configuration options
++	init: function() {
++		extend(config, {
++			stats: { all: 0, bad: 0 },
++			moduleStats: { all: 0, bad: 0 },
++			started: +new Date,
++			updateRate: 1000,
++			blocking: false,
++			autostart: true,
++			autorun: false,
++			filters: [],
++			queue: [],
++			semaphore: 0
++		});
++
++		var tests = id("qunit-tests"),
++			banner = id("qunit-banner"),
++			result = id("qunit-testresult");
++
++		if ( tests ) {
++			tests.innerHTML = "";
++		}
++
++		if ( banner ) {
++			banner.className = "";
++		}
++
++		if ( result ) {
++			result.parentNode.removeChild( result );
++		}
++	},
++	
++	/**
++	 * Resets the test setup. Useful for tests that modify the DOM.
++	 * 
++	 * If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
++	 */
++	reset: function() {
++		if ( window.jQuery ) {
++			jQuery( "#main, #qunit-fixture" ).html( config.fixture );
++		} else {
++			var main = id( 'main' ) || id( 'qunit-fixture' );
++			if ( main ) {
++				main.innerHTML = config.fixture;
++			}
++		}
++	},
++	
++	/**
++	 * Trigger an event on an element.
++	 *
++	 * @example triggerEvent( document.body, "click" );
++	 *
++	 * @param DOMElement elem
++	 * @param String type
++	 */
++	triggerEvent: function( elem, type, event ) {
++		if ( document.createEvent ) {
++			event = document.createEvent("MouseEvents");
++			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
++				0, 0, 0, 0, 0, false, false, false, false, 0, null);
++			elem.dispatchEvent( event );
++
++		} else if ( elem.fireEvent ) {
++			elem.fireEvent("on"+type);
++		}
++	},
++	
++	// Safe object type checking
++	is: function( type, obj ) {
++		return QUnit.objectType( obj ) == type;
++	},
++	
++	objectType: function( obj ) {
++		if (typeof obj === "undefined") {
++				return "undefined";
++
++		// consider: typeof null === object
++		}
++		if (obj === null) {
++				return "null";
++		}
++
++		var type = Object.prototype.toString.call( obj )
++			.match(/^\[object\s(.*)\]$/)[1] || '';
++
++		switch (type) {
++				case 'Number':
++						if (isNaN(obj)) {
++								return "nan";
++						} else {
++								return "number";
++						}
++				case 'String':
++				case 'Boolean':
++				case 'Array':
++				case 'Date':
++				case 'RegExp':
++				case 'Function':
++						return type.toLowerCase();
++		}
++		if (typeof obj === "object") {
++				return "object";
++		}
++		return undefined;
++	},
++	
++	push: function(result, actual, expected, message) {
++		var details = {
++			result: result,
++			message: message,
++			actual: actual,
++			expected: expected
++		};
++		
++		message = escapeHtml(message) || (result ? "okay" : "failed");
++		message = '<span class="test-message">' + message + "</span>";
++		expected = escapeHtml(QUnit.jsDump.parse(expected));
++		actual = escapeHtml(QUnit.jsDump.parse(actual));
++		var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';
++		if (actual != expected) {
++			output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';
++			output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';
++		}
++		if (!result) {
++			var source = sourceFromStacktrace();
++			if (source) {
++				details.source = source;
++				output += '<tr class="test-source"><th>Source: </th><td><pre>' + source +'</pre></td></tr>';
++			}
++		}
++		output += "</table>";
++		
++		QUnit.log(details);
++		
++		config.current.assertions.push({
++			result: !!result,
++			message: output
++		});
++	},
++	
++	// Logging callbacks; all receive a single argument with the listed properties
++	// run test/logs.html for any related changes
++	begin: function() {},
++	// done: { failed, passed, total, runtime }
++	done: function() {},
++	// log: { result, actual, expected, message }
++	log: function() {},
++	// testStart: { name }
++	testStart: function() {},
++	// testDone: { name, failed, passed, total }
++	testDone: function() {},
++	// moduleStart: { name }
++	moduleStart: function() {},
++	// moduleDone: { name, failed, passed, total }
++	moduleDone: function() {}
++});
++
++if ( typeof document === "undefined" || document.readyState === "complete" ) {
++	config.autorun = true;
++}
++
++addEvent(window, "load", function() {
++	QUnit.begin({});
++	
++	// Initialize the config, saving the execution queue
++	var oldconfig = extend({}, config);
++	QUnit.init();
++	extend(config, oldconfig);
++
++	config.blocking = false;
++
++	var userAgent = id("qunit-userAgent");
++	if ( userAgent ) {
++		userAgent.innerHTML = navigator.userAgent;
++	}
++	var banner = id("qunit-header");
++	if ( banner ) {
++		var paramsIndex = location.href.lastIndexOf(location.search);
++		if ( paramsIndex > -1 ) {
++			var mainPageLocation = location.href.slice(0, paramsIndex);
++			if ( mainPageLocation == location.href ) {
++				banner.innerHTML = '<a href=""> ' + banner.innerHTML + '</a> ';
++			} else {
++				var testName = decodeURIComponent(location.search.slice(1));
++				banner.innerHTML = '<a href="' + mainPageLocation + '">' + banner.innerHTML + '</a> &#8250; <a href="">' + testName + '</a>';
++			}
++		}
++	}
++	
++	var toolbar = id("qunit-testrunner-toolbar");
++	if ( toolbar ) {
++		var filter = document.createElement("input");
++		filter.type = "checkbox";
++		filter.id = "qunit-filter-pass";
++		addEvent( filter, "click", function() {
++			var li = document.getElementsByTagName("li");
++			for ( var i = 0; i < li.length; i++ ) {
++				if ( li[i].className.indexOf("pass") > -1 ) {
++					li[i].style.display = filter.checked ? "none" : "";
++				}
++			}
++			if ( defined.sessionStorage ) {
++				sessionStorage.setItem("qunit-filter-passed-tests", filter.checked ? "true" : "");
++			}
++		});
++		if ( defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) {
++			filter.checked = true;
++		}
++		toolbar.appendChild( filter );
++
++		var label = document.createElement("label");
++		label.setAttribute("for", "qunit-filter-pass");
++		label.innerHTML = "Hide passed tests";
++		toolbar.appendChild( label );
++	}
++
++	var main = id('main') || id('qunit-fixture');
++	if ( main ) {
++		config.fixture = main.innerHTML;
++	}
++
++	if (config.autostart) {
++		QUnit.start();
++	}
++});
++
++function done() {
++	config.autorun = true;
++
++	// Log the last module results
++	if ( config.currentModule ) {
++		QUnit.moduleDone( {
++			name: config.currentModule,
++			failed: config.moduleStats.bad,
++			passed: config.moduleStats.all - config.moduleStats.bad,
++			total: config.moduleStats.all
++		} );
++	}
++
++	var banner = id("qunit-banner"),
++		tests = id("qunit-tests"),
++		runtime = +new Date - config.started,
++		passed = config.stats.all - config.stats.bad,
++		html = [
++			'Tests completed in ',
++			runtime,
++			' milliseconds.<br/>',
++			'<span class="passed">',
++			passed,
++			'</span> tests of <span class="total">',
++			config.stats.all,
++			'</span> passed, <span class="failed">',
++			config.stats.bad,
++			'</span> failed.'
++		].join('');
++
++	if ( banner ) {
++		banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
++	}
++
++	if ( tests ) {	
++		var result = id("qunit-testresult");
++
++		if ( !result ) {
++			result = document.createElement("p");
++			result.id = "qunit-testresult";
++			result.className = "result";
++			tests.parentNode.insertBefore( result, tests.nextSibling );
++		}
++
++		result.innerHTML = html;
++	}
++
++	QUnit.done( {
++		failed: config.stats.bad,
++		passed: passed, 
++		total: config.stats.all,
++		runtime: runtime
++	} );
++}
++
++function validTest( name ) {
++	var i = config.filters.length,
++		run = false;
++
++	if ( !i ) {
++		return true;
++	}
++	
++	while ( i-- ) {
++		var filter = config.filters[i],
++			not = filter.charAt(0) == '!';
++
++		if ( not ) {
++			filter = filter.slice(1);
++		}
++
++		if ( name.indexOf(filter) !== -1 ) {
++			return !not;
++		}
++
++		if ( not ) {
++			run = true;
++		}
++	}
++
++	return run;
++}
++
++// so far supports only Firefox, Chrome and Opera (buggy)
++// could be extended in the future to use something like https://github.com/csnover/TraceKit
++function sourceFromStacktrace() {
++	try {
++		throw new Error();
++	} catch ( e ) {
++		if (e.stacktrace) {
++			// Opera
++			return e.stacktrace.split("\n")[6];
++		} else if (e.stack) {
++			// Firefox, Chrome
++			return e.stack.split("\n")[4];
++		}
++	}
++}
++
++function resultDisplayStyle(passed) {
++	return passed && id("qunit-filter-pass") && id("qunit-filter-pass").checked ? 'none' : '';
++}
++
++function escapeHtml(s) {
++	if (!s) {
++		return "";
++	}
++	s = s + "";
++	return s.replace(/[\&"<>\\]/g, function(s) {
++		switch(s) {
++			case "&": return "&amp;";
++			case "\\": return "\\\\";
++			case '"': return '\"';
++			case "<": return "&lt;";
++			case ">": return "&gt;";
++			default: return s;
++		}
++	});
++}
++
++function synchronize( callback ) {
++	config.queue.push( callback );
++
++	if ( config.autorun && !config.blocking ) {
++		process();
++	}
++}
++
++function process() {
++	var start = (new Date()).getTime();
++
++	while ( config.queue.length && !config.blocking ) {
++		if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {
++			config.queue.shift()();
++		} else {
++			window.setTimeout( process, 13 );
++			break;
++		}
++	}
++  if (!config.blocking && !config.queue.length) {
++    done();
++  }
++}
++
++function saveGlobal() {
++	config.pollution = [];
++	
++	if ( config.noglobals ) {
++		for ( var key in window ) {
++			config.pollution.push( key );
++		}
++	}
++}
++
++function checkPollution( name ) {
++	var old = config.pollution;
++	saveGlobal();
++	
++	var newGlobals = diff( old, config.pollution );
++	if ( newGlobals.length > 0 ) {
++		ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
++		config.current.expected++;
++	}
++
++	var deletedGlobals = diff( config.pollution, old );
++	if ( deletedGlobals.length > 0 ) {
++		ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
++		config.current.expected++;
++	}
++}
++
++// returns a new Array with the elements that are in a but not in b
++function diff( a, b ) {
++	var result = a.slice();
++	for ( var i = 0; i < result.length; i++ ) {
++		for ( var j = 0; j < b.length; j++ ) {
++			if ( result[i] === b[j] ) {
++				result.splice(i, 1);
++				i--;
++				break;
++			}
++		}
++	}
++	return result;
++}
++
++function fail(message, exception, callback) {
++	if ( typeof console !== "undefined" && console.error && console.warn ) {
++		console.error(message);
++		console.error(exception);
++		console.warn(callback.toString());
++
++	} else if ( window.opera && opera.postError ) {
++		opera.postError(message, exception, callback.toString);
++	}
++}
++
++function extend(a, b) {
++	for ( var prop in b ) {
++		a[prop] = b[prop];
++	}
++
++	return a;
++}
++
++function addEvent(elem, type, fn) {
++	if ( elem.addEventListener ) {
++		elem.addEventListener( type, fn, false );
++	} else if ( elem.attachEvent ) {
++		elem.attachEvent( "on" + type, fn );
++	} else {
++		fn();
++	}
++}
++
++function id(name) {
++	return !!(typeof document !== "undefined" && document && document.getElementById) &&
++		document.getElementById( name );
++}
++
++// Test for equality any JavaScript type.
++// Discussions and reference: http://philrathe.com/articles/equiv
++// Test suites: http://philrathe.com/tests/equiv
++// Author: Philippe Rathé <prathe@gmail.com>
++QUnit.equiv = function () {
++
++    var innerEquiv; // the real equiv function
++    var callers = []; // stack to decide between skip/abort functions
++    var parents = []; // stack to avoiding loops from circular referencing
++
++    // Call the o related callback with the given arguments.
++    function bindCallbacks(o, callbacks, args) {
++        var prop = QUnit.objectType(o);
++        if (prop) {
++            if (QUnit.objectType(callbacks[prop]) === "function") {
++                return callbacks[prop].apply(callbacks, args);
++            } else {
++                return callbacks[prop]; // or undefined
++            }
++        }
++    }
++    
++    var callbacks = function () {
++
++        // for string, boolean, number and null
++        function useStrictEquality(b, a) {
++            if (b instanceof a.constructor || a instanceof b.constructor) {
++                // to catch short annotaion VS 'new' annotation of a declaration
++                // e.g. var i = 1;
++                //      var j = new Number(1);
++                return a == b;
++            } else {
++                return a === b;
++            }
++        }
++
++        return {
++            "string": useStrictEquality,
++            "boolean": useStrictEquality,
++            "number": useStrictEquality,
++            "null": useStrictEquality,
++            "undefined": useStrictEquality,
++
++            "nan": function (b) {
++                return isNaN(b);
++            },
++
++            "date": function (b, a) {
++                return QUnit.objectType(b) === "date" && a.valueOf() === b.valueOf();
++            },
++
++            "regexp": function (b, a) {
++                return QUnit.objectType(b) === "regexp" &&
++                    a.source === b.source && // the regex itself
++                    a.global === b.global && // and its modifers (gmi) ...
++                    a.ignoreCase === b.ignoreCase &&
++                    a.multiline === b.multiline;
++            },
++
++            // - skip when the property is a method of an instance (OOP)
++            // - abort otherwise,
++            //   initial === would have catch identical references anyway
++            "function": function () {
++                var caller = callers[callers.length - 1];
++                return caller !== Object &&
++                        typeof caller !== "undefined";
++            },
++
++            "array": function (b, a) {
++                var i, j, loop;
++                var len;
++
++                // b could be an object literal here
++                if ( ! (QUnit.objectType(b) === "array")) {
++                    return false;
++                }   
++                
++                len = a.length;
++                if (len !== b.length) { // safe and faster
++                    return false;
++                }
++                
++                //track reference to avoid circular references
++                parents.push(a);
++                for (i = 0; i < len; i++) {
++                    loop = false;
++                    for(j=0;j<parents.length;j++){
++                        if(parents[j] === a[i]){
++                            loop = true;//dont rewalk array
++                        }
++                    }
++                    if (!loop && ! innerEquiv(a[i], b[i])) {
++                        parents.pop();
++                        return false;
++                    }
++                }
++                parents.pop();
++                return true;
++            },
++
++            "object": function (b, a) {
++                var i, j, loop;
++                var eq = true; // unless we can proove it
++                var aProperties = [], bProperties = []; // collection of strings
++
++                // comparing constructors is more strict than using instanceof
++                if ( a.constructor !== b.constructor) {
++                    return false;
++                }
++
++                // stack constructor before traversing properties
++                callers.push(a.constructor);
++                //track reference to avoid circular references
++                parents.push(a);
++                
++                for (i in a) { // be strict: don't ensures hasOwnProperty and go deep
++                    loop = false;
++                    for(j=0;j<parents.length;j++){
++                        if(parents[j] === a[i])
++                            loop = true; //don't go down the same path twice
++                    }
++                    aProperties.push(i); // collect a's properties
++
++                    if (!loop && ! innerEquiv(a[i], b[i])) {
++                        eq = false;
++                        break;
++                    }
++                }
++
++                callers.pop(); // unstack, we are done
++                parents.pop();
++
++                for (i in b) {
++                    bProperties.push(i); // collect b's properties
++                }
++
++                // Ensures identical properties name
++                return eq && innerEquiv(aProperties.sort(), bProperties.sort());
++            }
++        };
++    }();
++
++    innerEquiv = function () { // can take multiple arguments
++        var args = Array.prototype.slice.apply(arguments);
++        if (args.length < 2) {
++            return true; // end transition
++        }
++
++        return (function (a, b) {
++            if (a === b) {
++                return true; // catch the most you can
++            } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || QUnit.objectType(a) !== QUnit.objectType(b)) {
++                return false; // don't lose time with error prone cases
++            } else {
++                return bindCallbacks(a, callbacks, [b, a]);
++            }
++
++        // apply transition with (1..n) arguments
++        })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1));
++    };
++
++    return innerEquiv;
++
++}();
++
++/**
++ * jsDump
++ * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
++ * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php)
++ * Date: 5/15/2008
++ * @projectDescription Advanced and extensible data dumping for Javascript.
++ * @version 1.0.0
++ * @author Ariel Flesler
++ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
++ */
++QUnit.jsDump = (function() {
++	function quote( str ) {
++		return '"' + str.toString().replace(/"/g, '\\"') + '"';
++	};
++	function literal( o ) {
++		return o + '';	
++	};
++	function join( pre, arr, post ) {
++		var s = jsDump.separator(),
++			base = jsDump.indent(),
++			inner = jsDump.indent(1);
++		if ( arr.join )
++			arr = arr.join( ',' + s + inner );
++		if ( !arr )
++			return pre + post;
++		return [ pre, inner + arr, base + post ].join(s);
++	};
++	function array( arr ) {
++		var i = arr.length,	ret = Array(i);					
++		this.up();
++		while ( i-- )
++			ret[i] = this.parse( arr[i] );				
++		this.down();
++		return join( '[', ret, ']' );
++	};
++	
++	var reName = /^function (\w+)/;
++	
++	var jsDump = {
++		parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance
++			var	parser = this.parsers[ type || this.typeOf(obj) ];
++			type = typeof parser;			
++			
++			return type == 'function' ? parser.call( this, obj ) :
++				   type == 'string' ? parser :
++				   this.parsers.error;
++		},
++		typeOf:function( obj ) {
++			var type;
++			if ( obj === null ) {
++				type = "null";
++			} else if (typeof obj === "undefined") {
++				type = "undefined";
++			} else if (QUnit.is("RegExp", obj)) {
++				type = "regexp";
++			} else if (QUnit.is("Date", obj)) {
++				type = "date";
++			} else if (QUnit.is("Function", obj)) {
++				type = "function";
++			} else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") {
++				type = "window";
++			} else if (obj.nodeType === 9) {
++				type = "document";
++			} else if (obj.nodeType) {
++				type = "node";
++			} else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {
++				type = "array";
++			} else {
++				type = typeof obj;
++			}
++			return type;
++		},
++		separator:function() {
++			return this.multiline ?	this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
++		},
++		indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
++			if ( !this.multiline )
++				return '';
++			var chr = this.indentChar;
++			if ( this.HTML )
++				chr = chr.replace(/\t/g,'   ').replace(/ /g,'&nbsp;');
++			return Array( this._depth_ + (extra||0) ).join(chr);
++		},
++		up:function( a ) {
++			this._depth_ += a || 1;
++		},
++		down:function( a ) {
++			this._depth_ -= a || 1;
++		},
++		setParser:function( name, parser ) {
++			this.parsers[name] = parser;
++		},
++		// The next 3 are exposed so you can use them
++		quote:quote, 
++		literal:literal,
++		join:join,
++		//
++		_depth_: 1,
++		// This is the list of parsers, to modify them, use jsDump.setParser
++		parsers:{
++			window: '[Window]',
++			document: '[Document]',
++			error:'[ERROR]', //when no parser is found, shouldn't happen
++			unknown: '[Unknown]',
++			'null':'null',
++			undefined:'undefined',
++			'function':function( fn ) {
++				var ret = 'function',
++					name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
++				if ( name )
++					ret += ' ' + name;
++				ret += '(';
++				
++				ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');
++				return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );
++			},
++			array: array,
++			nodelist: array,
++			arguments: array,
++			object:function( map ) {
++				var ret = [ ];
++				QUnit.jsDump.up();
++				for ( var key in map )
++					ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(map[key]) );
++				QUnit.jsDump.down();
++				return join( '{', ret, '}' );
++			},
++			node:function( node ) {
++				var open = QUnit.jsDump.HTML ? '&lt;' : '<',
++					close = QUnit.jsDump.HTML ? '&gt;' : '>';
++					
++				var tag = node.nodeName.toLowerCase(),
++					ret = open + tag;
++					
++				for ( var a in QUnit.jsDump.DOMAttrs ) {
++					var val = node[QUnit.jsDump.DOMAttrs[a]];
++					if ( val )
++						ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );
++				}
++				return ret + close + open + '/' + tag + close;
++			},
++			functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
++				var l = fn.length;
++				if ( !l ) return '';				
++				
++				var args = Array(l);
++				while ( l-- )
++					args[l] = String.fromCharCode(97+l);//97 is 'a'
++				return ' ' + args.join(', ') + ' ';
++			},
++			key:quote, //object calls it internally, the key part of an item in a map
++			functionCode:'[code]', //function calls it internally, it's the content of the function
++			attribute:quote, //node calls it internally, it's an html attribute value
++			string:quote,
++			date:quote,
++			regexp:literal, //regex
++			number:literal,
++			'boolean':literal
++		},
++		DOMAttrs:{//attributes to dump from nodes, name=>realName
++			id:'id',
++			name:'name',
++			'class':'className'
++		},
++		HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
++		indentChar:'  ',//indentation unit
++		multiline:true //if true, items in a collection, are separated by a \n, else just a space.
++	};
++
++	return jsDump;
++})();
++
++// from Sizzle.js
++function getText( elems ) {
++	var ret = "", elem;
++
++	for ( var i = 0; elems[i]; i++ ) {
++		elem = elems[i];
++
++		// Get the text from text nodes and CDATA nodes
++		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
++			ret += elem.nodeValue;
++
++		// Traverse everything else, except comment nodes
++		} else if ( elem.nodeType !== 8 ) {
++			ret += getText( elem.childNodes );
++		}
++	}
++
++	return ret;
++};
++
++/*
++ * Javascript Diff Algorithm
++ *  By John Resig (http://ejohn.org/)
++ *  Modified by Chu Alan "sprite"
++ *
++ * Released under the MIT license.
++ *
++ * More Info:
++ *  http://ejohn.org/projects/javascript-diff-algorithm/
++ *  
++ * Usage: QUnit.diff(expected, actual)
++ * 
++ * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
++ */
++QUnit.diff = (function() {
++	function diff(o, n){
++		var ns = new Object();
++		var os = new Object();
++		
++		for (var i = 0; i < n.length; i++) {
++			if (ns[n[i]] == null) 
++				ns[n[i]] = {
++					rows: new Array(),
++					o: null
++				};
++			ns[n[i]].rows.push(i);
++		}
++		
++		for (var i = 0; i < o.length; i++) {
++			if (os[o[i]] == null) 
++				os[o[i]] = {
++					rows: new Array(),
++					n: null
++				};
++			os[o[i]].rows.push(i);
++		}
++		
++		for (var i in ns) {
++			if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
++				n[ns[i].rows[0]] = {
++					text: n[ns[i].rows[0]],
++					row: os[i].rows[0]
++				};
++				o[os[i].rows[0]] = {
++					text: o[os[i].rows[0]],
++					row: ns[i].rows[0]
++				};
++			}
++		}
++		
++		for (var i = 0; i < n.length - 1; i++) {
++			if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
++			n[i + 1] == o[n[i].row + 1]) {
++				n[i + 1] = {
++					text: n[i + 1],
++					row: n[i].row + 1
++				};
++				o[n[i].row + 1] = {
++					text: o[n[i].row + 1],
++					row: i + 1
++				};
++			}
++		}
++		
++		for (var i = n.length - 1; i > 0; i--) {
++			if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
++			n[i - 1] == o[n[i].row - 1]) {
++				n[i - 1] = {
++					text: n[i - 1],
++					row: n[i].row - 1
++				};
++				o[n[i].row - 1] = {
++					text: o[n[i].row - 1],
++					row: i - 1
++				};
++			}
++		}
++		
++		return {
++			o: o,
++			n: n
++		};
++	}
++	
++	return function(o, n){
++		o = o.replace(/\s+$/, '');
++		n = n.replace(/\s+$/, '');
++		var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/));
++
++		var str = "";
++		
++		var oSpace = o.match(/\s+/g);
++		if (oSpace == null) {
++			oSpace = [" "];
++		}
++		else {
++			oSpace.push(" ");
++		}
++		var nSpace = n.match(/\s+/g);
++		if (nSpace == null) {
++			nSpace = [" "];
++		}
++		else {
++			nSpace.push(" ");
++		}
++		
++		if (out.n.length == 0) {
++			for (var i = 0; i < out.o.length; i++) {
++				str += '<del>' + out.o[i] + oSpace[i] + "</del>";
++			}
++		}
++		else {
++			if (out.n[0].text == null) {
++				for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
++					str += '<del>' + out.o[n] + oSpace[n] + "</del>";
++				}
++			}
++			
++			for (var i = 0; i < out.n.length; i++) {
++				if (out.n[i].text == null) {
++					str += '<ins>' + out.n[i] + nSpace[i] + "</ins>";
++				}
++				else {
++					var pre = "";
++					
++					for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {
++						pre += '<del>' + out.o[n] + oSpace[n] + "</del>";
++					}
++					str += " " + out.n[i].text + nSpace[i] + pre;
++				}
++			}
++		}
++		
++		return str;
++	};
++})();
++
++})(this);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.min.js	(revision 15487)
+@@ -0,0 +1,18 @@
++/*!
++ * jQuery JavaScript Library v1.6.2
++ * http://jquery.com/
++ *
++ * Copyright 2011, John Resig
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * http://jquery.org/license
++ *
++ * Includes Sizzle.js
++ * http://sizzlejs.com/
++ * Copyright 2011, The Dojo Foundation
++ * Released under the MIT, BSD, and GPL Licenses.
++ *
++ * Date: Thu Jun 30 14:16:56 2011 -0400
++ */
++(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(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 bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(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===bR,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=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),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 bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(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 bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}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=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,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=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",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.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(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.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();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},isNaN:function(a){return a==null||!m.test(a)||isNaN(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;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,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){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=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=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(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="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.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:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function 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._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;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(o);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(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");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(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.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=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?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}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
++shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){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=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={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,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
++)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");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&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.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++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.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.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{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;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),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 bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.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(bL,"")).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||bM.test(this.nodeName)||bG.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(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),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&&(ca.test(b.url)||e&&ca.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(ca,l),b.url===j&&(e&&(k=k.replace(ca,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 cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,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,cb&&delete cd[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=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("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",cs(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(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],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?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):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,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?: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=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.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&&!cu.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=cv(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=cv(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")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/src/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/src/jquery.sidebar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/src/jquery.sidebar.js	(revision 15487)
+@@ -0,0 +1,281 @@
++/* automatically generated by JSCoverage - do not edit */
++if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
++if (! _$jscoverage['jquery.sidebar.js']) {
++  _$jscoverage['jquery.sidebar.js'] = [];
++  _$jscoverage['jquery.sidebar.js'][10] = 0;
++  _$jscoverage['jquery.sidebar.js'][11] = 0;
++  _$jscoverage['jquery.sidebar.js'][13] = 0;
++  _$jscoverage['jquery.sidebar.js'][14] = 0;
++  _$jscoverage['jquery.sidebar.js'][37] = 0;
++  _$jscoverage['jquery.sidebar.js'][43] = 0;
++  _$jscoverage['jquery.sidebar.js'][44] = 0;
++  _$jscoverage['jquery.sidebar.js'][46] = 0;
++  _$jscoverage['jquery.sidebar.js'][47] = 0;
++  _$jscoverage['jquery.sidebar.js'][48] = 0;
++  _$jscoverage['jquery.sidebar.js'][51] = 0;
++  _$jscoverage['jquery.sidebar.js'][52] = 0;
++  _$jscoverage['jquery.sidebar.js'][53] = 0;
++  _$jscoverage['jquery.sidebar.js'][54] = 0;
++  _$jscoverage['jquery.sidebar.js'][55] = 0;
++  _$jscoverage['jquery.sidebar.js'][63] = 0;
++  _$jscoverage['jquery.sidebar.js'][69] = 0;
++  _$jscoverage['jquery.sidebar.js'][70] = 0;
++  _$jscoverage['jquery.sidebar.js'][72] = 0;
++  _$jscoverage['jquery.sidebar.js'][73] = 0;
++  _$jscoverage['jquery.sidebar.js'][76] = 0;
++  _$jscoverage['jquery.sidebar.js'][77] = 0;
++  _$jscoverage['jquery.sidebar.js'][78] = 0;
++  _$jscoverage['jquery.sidebar.js'][79] = 0;
++  _$jscoverage['jquery.sidebar.js'][80] = 0;
++  _$jscoverage['jquery.sidebar.js'][81] = 0;
++  _$jscoverage['jquery.sidebar.js'][90] = 0;
++  _$jscoverage['jquery.sidebar.js'][91] = 0;
++  _$jscoverage['jquery.sidebar.js'][93] = 0;
++  _$jscoverage['jquery.sidebar.js'][94] = 0;
++  _$jscoverage['jquery.sidebar.js'][96] = 0;
++  _$jscoverage['jquery.sidebar.js'][97] = 0;
++  _$jscoverage['jquery.sidebar.js'][99] = 0;
++  _$jscoverage['jquery.sidebar.js'][103] = 0;
++  _$jscoverage['jquery.sidebar.js'][109] = 0;
++  _$jscoverage['jquery.sidebar.js'][112] = 0;
++  _$jscoverage['jquery.sidebar.js'][135] = 0;
++  _$jscoverage['jquery.sidebar.js'][136] = 0;
++  _$jscoverage['jquery.sidebar.js'][137] = 0;
++  _$jscoverage['jquery.sidebar.js'][139] = 0;
++  _$jscoverage['jquery.sidebar.js'][140] = 0;
++  _$jscoverage['jquery.sidebar.js'][142] = 0;
++  _$jscoverage['jquery.sidebar.js'][143] = 0;
++  _$jscoverage['jquery.sidebar.js'][144] = 0;
++  _$jscoverage['jquery.sidebar.js'][147] = 0;
++  _$jscoverage['jquery.sidebar.js'][148] = 0;
++  _$jscoverage['jquery.sidebar.js'][149] = 0;
++  _$jscoverage['jquery.sidebar.js'][150] = 0;
++  _$jscoverage['jquery.sidebar.js'][152] = 0;
++  _$jscoverage['jquery.sidebar.js'][153] = 0;
++  _$jscoverage['jquery.sidebar.js'][154] = 0;
++  _$jscoverage['jquery.sidebar.js'][155] = 0;
++  _$jscoverage['jquery.sidebar.js'][157] = 0;
++  _$jscoverage['jquery.sidebar.js'][161] = 0;
++  _$jscoverage['jquery.sidebar.js'][166] = 0;
++  _$jscoverage['jquery.sidebar.js'][167] = 0;
++  _$jscoverage['jquery.sidebar.js'][168] = 0;
++  _$jscoverage['jquery.sidebar.js'][172] = 0;
++  _$jscoverage['jquery.sidebar.js'][175] = 0;
++  _$jscoverage['jquery.sidebar.js'][176] = 0;
++  _$jscoverage['jquery.sidebar.js'][180] = 0;
++  _$jscoverage['jquery.sidebar.js'][183] = 0;
++  _$jscoverage['jquery.sidebar.js'][184] = 0;
++  _$jscoverage['jquery.sidebar.js'][185] = 0;
++  _$jscoverage['jquery.sidebar.js'][186] = 0;
++  _$jscoverage['jquery.sidebar.js'][189] = 0;
++  _$jscoverage['jquery.sidebar.js'][192] = 0;
++  _$jscoverage['jquery.sidebar.js'][195] = 0;
++  _$jscoverage['jquery.sidebar.js'][198] = 0;
++  _$jscoverage['jquery.sidebar.js'][203] = 0;
++  _$jscoverage['jquery.sidebar.js'][204] = 0;
++  _$jscoverage['jquery.sidebar.js'][206] = 0;
++  _$jscoverage['jquery.sidebar.js'][207] = 0;
++  _$jscoverage['jquery.sidebar.js'][211] = 0;
++  _$jscoverage['jquery.sidebar.js'][212] = 0;
++  _$jscoverage['jquery.sidebar.js'][213] = 0;
++  _$jscoverage['jquery.sidebar.js'][214] = 0;
++  _$jscoverage['jquery.sidebar.js'][216] = 0;
++  _$jscoverage['jquery.sidebar.js'][217] = 0;
++  _$jscoverage['jquery.sidebar.js'][218] = 0;
++  _$jscoverage['jquery.sidebar.js'][220] = 0;
++}
++_$jscoverage['jquery.sidebar.js'][10]++;
++(function ($, _window) {
++  _$jscoverage['jquery.sidebar.js'][11]++;
++  $.fn.sidebar = (function (options) {
++  _$jscoverage['jquery.sidebar.js'][13]++;
++  return this.each((function () {
++  _$jscoverage['jquery.sidebar.js'][14]++;
++  var elem = $(this), data = elem.data("sidebar") || {}, margin, width, height, duration = data.duration, injectWidth, injectHeight, injectCss, containerCss, bodyCss, position, enter, leave, opened, closed, isInnerElement, container = $("<div><div/>"), inject = $("<div><div/>"), body = $("<div><div/>"), root, parent, open = (function () {
++  _$jscoverage['jquery.sidebar.js'][37]++;
++  var data = elem.data("sidebar") || {}, opened = data.callback.sidebar.open, container = data.container, inject = data.inject, body = data.body;
++  _$jscoverage['jquery.sidebar.js'][43]++;
++  if (data.isEnter || data.isProcessing) {
++    _$jscoverage['jquery.sidebar.js'][44]++;
++    return;
++  }
++  _$jscoverage['jquery.sidebar.js'][46]++;
++  data.isEnter = true;
++  _$jscoverage['jquery.sidebar.js'][47]++;
++  data.isProcessing = true;
++  _$jscoverage['jquery.sidebar.js'][48]++;
++  container.animate(data.animate.container.enter, {duration: duration, complete: (function () {
++  _$jscoverage['jquery.sidebar.js'][51]++;
++  inject.fadeOut(duration, (function () {
++  _$jscoverage['jquery.sidebar.js'][52]++;
++  body.show("clip", duration, (function () {
++  _$jscoverage['jquery.sidebar.js'][53]++;
++  data.isProcessing = false;
++  _$jscoverage['jquery.sidebar.js'][54]++;
++  if (opened) {
++    _$jscoverage['jquery.sidebar.js'][55]++;
++    opened();
++  }
++}));
++}));
++})});
++}), close = (function () {
++  _$jscoverage['jquery.sidebar.js'][63]++;
++  var data = elem.data("sidebar") || {}, closed = data.callback.sidebar.close, container = data.container, inject = data.inject, body = data.body;
++  _$jscoverage['jquery.sidebar.js'][69]++;
++  if (! data.isEnter || data.isProcessing) {
++    _$jscoverage['jquery.sidebar.js'][70]++;
++    return;
++  }
++  _$jscoverage['jquery.sidebar.js'][72]++;
++  data.isProcessing = true;
++  _$jscoverage['jquery.sidebar.js'][73]++;
++  container.animate(data.animate.container.leave, {duration: duration, complete: (function () {
++  _$jscoverage['jquery.sidebar.js'][76]++;
++  body.hide("clip", duration, (function () {
++  _$jscoverage['jquery.sidebar.js'][77]++;
++  inject.fadeIn(duration, (function () {
++  _$jscoverage['jquery.sidebar.js'][78]++;
++  data.isEnter = false;
++  _$jscoverage['jquery.sidebar.js'][79]++;
++  data.isProcessing = false;
++  _$jscoverage['jquery.sidebar.js'][80]++;
++  if (closed) {
++    _$jscoverage['jquery.sidebar.js'][81]++;
++    closed();
++  }
++}));
++}));
++})});
++});
++  _$jscoverage['jquery.sidebar.js'][90]++;
++  if (typeof options === "string") {
++    _$jscoverage['jquery.sidebar.js'][91]++;
++    switch (options) {
++    case "open":
++      _$jscoverage['jquery.sidebar.js'][93]++;
++      open();
++      _$jscoverage['jquery.sidebar.js'][94]++;
++      break;
++    case "close":
++      _$jscoverage['jquery.sidebar.js'][96]++;
++      close();
++      _$jscoverage['jquery.sidebar.js'][97]++;
++      break;
++    }
++    _$jscoverage['jquery.sidebar.js'][99]++;
++    return;
++  }
++  _$jscoverage['jquery.sidebar.js'][103]++;
++  options = $.extend(true, {root: $(document.body), position: "left", callback: {item: {enter: (function () {
++  _$jscoverage['jquery.sidebar.js'][109]++;
++  $(this).animate({marginLeft: "5px"}, 250);
++}), leave: (function () {
++  _$jscoverage['jquery.sidebar.js'][112]++;
++  $(this).animate({marginLeft: "0px"}, 250);
++})}, sidebar: {open: (function () {
++}), close: (function () {
++})}}, animate: {container: {enter: {}, leave: {}}}, duration: 200, open: "mouseenter.sidebar", close: "mouseleave.sidebar"}, options);
++  _$jscoverage['jquery.sidebar.js'][135]++;
++  root = options.root;
++  _$jscoverage['jquery.sidebar.js'][136]++;
++  isInnerElement = ! root.is(document.body);
++  _$jscoverage['jquery.sidebar.js'][137]++;
++  parent = isInnerElement? root.addClass("sidebar-root"): $(_window);
++  _$jscoverage['jquery.sidebar.js'][139]++;
++  position = options.position;
++  _$jscoverage['jquery.sidebar.js'][140]++;
++  duration = options.duration;
++  _$jscoverage['jquery.sidebar.js'][142]++;
++  container.attr("id", "jquerySideBar" + new Date().getTime()).addClass("sidebar-container").addClass(position);
++  _$jscoverage['jquery.sidebar.js'][143]++;
++  inject.addClass("sidebar-inject").addClass(position);
++  _$jscoverage['jquery.sidebar.js'][144]++;
++  body.addClass("sidebar-body");
++  _$jscoverage['jquery.sidebar.js'][147]++;
++  body.append(this);
++  _$jscoverage['jquery.sidebar.js'][148]++;
++  container.append(body);
++  _$jscoverage['jquery.sidebar.js'][149]++;
++  container.append(inject);
++  _$jscoverage['jquery.sidebar.js'][150]++;
++  root.append(container);
++  _$jscoverage['jquery.sidebar.js'][152]++;
++  width = container.width();
++  _$jscoverage['jquery.sidebar.js'][153]++;
++  height = container.height();
++  _$jscoverage['jquery.sidebar.js'][154]++;
++  injectWidth = inject.width();
++  _$jscoverage['jquery.sidebar.js'][155]++;
++  injectHeight = inject.height();
++  _$jscoverage['jquery.sidebar.js'][157]++;
++  containerCss = {height: height, width: width};
++  _$jscoverage['jquery.sidebar.js'][161]++;
++  bodyCss = {height: height, width: width};
++  _$jscoverage['jquery.sidebar.js'][166]++;
++  if (position === "left" || position === "right") {
++    _$jscoverage['jquery.sidebar.js'][167]++;
++    margin = width - injectWidth;
++    _$jscoverage['jquery.sidebar.js'][168]++;
++    injectCss = {height: height, width: injectWidth};
++    _$jscoverage['jquery.sidebar.js'][172]++;
++    containerCss.top = options.top || (parent.height() / 2) - (height / 2) + "px";
++  }
++  else {
++    _$jscoverage['jquery.sidebar.js'][175]++;
++    margin = height - injectHeight;
++    _$jscoverage['jquery.sidebar.js'][176]++;
++    injectCss = {height: injectHeight, width: width};
++    _$jscoverage['jquery.sidebar.js'][180]++;
++    containerCss.left = options.left || (parent.width() / 2) - (width / 2) + "px";
++  }
++  _$jscoverage['jquery.sidebar.js'][183]++;
++  containerCss[position] = "-" + margin + "px";
++  _$jscoverage['jquery.sidebar.js'][184]++;
++  injectCss[position] = margin + "px";
++  _$jscoverage['jquery.sidebar.js'][185]++;
++  options.animate.container.enter[position] = 0;
++  _$jscoverage['jquery.sidebar.js'][186]++;
++  options.animate.container.leave[position] = "-" + margin;
++  _$jscoverage['jquery.sidebar.js'][189]++;
++  container.css(containerCss);
++  _$jscoverage['jquery.sidebar.js'][192]++;
++  inject.css(injectCss);
++  _$jscoverage['jquery.sidebar.js'][195]++;
++  body.css(bodyCss).hide();
++  _$jscoverage['jquery.sidebar.js'][198]++;
++  $(this).addClass("sidebar-menu").find("li").bind("mouseenter.sidebar", options.callback.item.enter).bind("mouseleave.sidebar", options.callback.item.leave);
++  _$jscoverage['jquery.sidebar.js'][203]++;
++  if (options.open) {
++    _$jscoverage['jquery.sidebar.js'][204]++;
++    container.bind(options.open, open);
++  }
++  _$jscoverage['jquery.sidebar.js'][206]++;
++  if (options.close) {
++    _$jscoverage['jquery.sidebar.js'][207]++;
++    container.bind(options.close, close);
++  }
++  _$jscoverage['jquery.sidebar.js'][211]++;
++  options.container = container;
++  _$jscoverage['jquery.sidebar.js'][212]++;
++  options.inject = inject;
++  _$jscoverage['jquery.sidebar.js'][213]++;
++  options.body = body;
++  _$jscoverage['jquery.sidebar.js'][214]++;
++  elem.data("sidebar", options);
++  _$jscoverage['jquery.sidebar.js'][216]++;
++  parent.resize((function () {
++  _$jscoverage['jquery.sidebar.js'][217]++;
++  if (position === "left" || position === "right") {
++    _$jscoverage['jquery.sidebar.js'][218]++;
++    container.css({top: ($(this).height() / 2) - (height / 2) + "px"});
++  }
++  else {
++    _$jscoverage['jquery.sidebar.js'][220]++;
++    container.css({left: ($(this).width() / 2) - (width / 2) + "px"});
++  }
++}));
++}));
++});
++})(jQuery, this);
++_$jscoverage['jquery.sidebar.js'].source = ["/*!"," * jquery.sidebar v1.0.2"," * http://sideroad.secret.jp/"," *"," * Copyright (c) 2009 sideroad"," *"," * Dual licensed under the MIT or GPL Version 2 licenses."," * Date: 2009-09-01"," */","(function( $, _window ) {","    $.fn.sidebar = function(options){","","        return this.each(function(){","            var elem = $(this),","                data = elem.data(\"sidebar\")||{},","                margin,","                width,","                height,","                duration = data.duration,","                injectWidth,","                injectHeight,","                injectCss,","                containerCss,","                bodyCss,","                position,","                enter,","                leave,","                opened,","                closed,","                isInnerElement,","                container = $(\"&lt;div&gt;&lt;div/&gt;\"),","                inject = $(\"&lt;div&gt;&lt;div/&gt;\"),","                body = $(\"&lt;div&gt;&lt;div/&gt;\"),","                root,","                parent,","                open = function(){","                    var data = elem.data(\"sidebar\") || {},","                        opened = data.callback.sidebar.open,","                        container = data.container,","                        inject = data.inject,","                        body = data.body;","                    ","                    if (data.isEnter || data.isProcessing) {","                        return;","                    }","                    data.isEnter = true;","                    data.isProcessing = true;","                    container.animate(data.animate.container.enter, {","                        duration: duration,","                        complete: function(){","                            inject.fadeOut(duration, function(){","                                body.show(\"clip\", duration,function(){","                                    data.isProcessing = false;","                                    if(opened) {","                                        opened();","                                    }","                                });","                            });","                        }","                    });","                },","                close = function(){","                    var data = elem.data(\"sidebar\") || {},","                        closed = data.callback.sidebar.close,","                        container = data.container,","                        inject = data.inject,","                        body = data.body;","                       ","                    if(!data.isEnter || data.isProcessing ) {","                        return;","                    }","                    data.isProcessing = true;","                    container.animate(data.animate.container.leave, {","                        duration: duration,","                        complete: function(){","                            body.hide(\"clip\", duration, function(){","                                inject.fadeIn(duration, function(){","                                    data.isEnter = false;","                                    data.isProcessing = false;","                                    if(closed) {","                                        closed();","                                    }","                                });","                            });","                        }","                    });","                };","            ","            ","            if(typeof options === \"string\"){","                switch(options){","                    case \"open\" :","                        open();","                        break;","                    case \"close\" : ","                        close();","                        break;","                }","                return;","            }","                ","            //default setting","            options = $.extend(true, {","                root : $(document.body),","                position : \"left\",","                callback: {","                    item : {","                        enter : function(){","                            $(this).animate({marginLeft:\"5px\"},250);","                        },","                        leave : function(){","                            $(this).animate({marginLeft:\"0px\"},250);","                        }","                    },","                    sidebar : {","                        open : function(){","                            ","                        },","                        close : function(){","                            ","                        }","                    }","                },","                animate : {","                    container : {","                        enter : {},","                        leave : {}","                    }","                },","                duration : 200,","                open : \"mouseenter.sidebar\",","                close : \"mouseleave.sidebar\"","            }, options);","            ","            root = options.root;","            isInnerElement = !root.is(document.body);","            parent = ( isInnerElement ) ? root.addClass(\"sidebar-root\") : $(_window);","            ","            position = options.position;","            duration = options.duration;","            ","            container.attr(\"id\", \"jquerySideBar\" + new Date().getTime()).addClass(\"sidebar-container\").addClass(position);","            inject.addClass(\"sidebar-inject\").addClass(position);","            body.addClass(\"sidebar-body\");","            ","            //append to body","            body.append(this);","            container.append(body);","            container.append(inject);","            root.append(container);","            ","            width = container.width();","            height = container.height();","            injectWidth = inject.width();","            injectHeight = inject.height();","            ","            containerCss = {","                height: height,","                width: width","            };","            bodyCss = {","                height: height,","                width: width","            };","            ","            if(position === \"left\" || position === \"right\") {","                margin = width - injectWidth;","                injectCss = {","                    height : height,","                    width : injectWidth","                };","                containerCss.top = options.top || (parent.height()/2) - (height/2) + \"px\";","                ","            } else {","                margin = height - injectHeight;","                injectCss = {","                    height : injectHeight,","                    width : width","                };","                containerCss.left = options.left || (parent.width()/2) - (width/2) + \"px\";","            }","            ","            containerCss[position] = \"-\" + margin + \"px\";","            injectCss[position] = margin + \"px\";","            options.animate.container.enter[position] = 0;","            options.animate.container.leave[position] = \"-\" + margin;","            ","            //container","            container.css(containerCss);","            ","            //inject","            inject.css(injectCss);","            ","            //body","            body.css(bodyCss).hide();","            ","            //menu callback","            $(this).addClass(\"sidebar-menu\").find(\"li\")","                .bind(\"mouseenter.sidebar\",options.callback.item.enter)","                .bind(\"mouseleave.sidebar\",options.callback.item.leave);","            ","            //container events","            if(options.open) {","                container.bind(options.open,open);","            }","            if(options.close) {","                container.bind(options.close,close);","            }","            ","            //store data","            options.container = container;","            options.inject = inject;","            options.body = body;","            elem.data(\"sidebar\", options);","            ","            parent.resize(function(){","                if(position === \"left\" || position === \"right\") {","                    container.css({top:($(this).height()/2) - (height/2) + \"px\"});","                } else {","                    container.css({left:($(this).width()/2) - (width/2) + \"px\"});","                }","            });","            ","        });","    };","}(jQuery, this));"];
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-top.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-top.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-top.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-top.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/sidebar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/sidebar.css	(revision 15487)
+@@ -0,0 +1,127 @@
++* {
++    margin:0;
++    padding:0;
++}
++
++.sidebar-root{
++    position : relative;
++    overflow : hidden;
++}
++
++.sidebar-root div.sidebar-container{
++    position: absolute;
++}
++
++div.sidebar-container {
++    width : 100px;
++    height : 200px;
++    position:fixed;
++    background-color:#FF3F3F;
++    filter: alpha(opacity=87);
++    -moz-opacity:0.87;
++    opacity:0.87;
++    -moz-box-shadow:0px 0px 20px #FF3F3F;
++    -webkit-box-shadow:0px 0px 20px #FF3F3F;
++    box-shadow:0px 0px 20px #FF3F3F;
++}
++
++div.sidebar-container.left {
++    top:50%;
++    left:0px;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-topright: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-top-right-radius: 10px;
++}
++
++div.sidebar-container.right {
++    top:50%;
++    right:0px;
++    -moz-border-radius-bottomleft: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-bottom-left-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-container.top {
++    top:0px;
++    left:50%;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-bottomleft: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-bottom-left-radius: 10px;
++}
++
++div.sidebar-container.bottom {
++    bottom:0px;
++    left:50%;
++    -moz-border-radius-topright: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-top-right-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-inject {
++    position:absolute;
++}
++div.sidebar-inject.left {
++    background:url("inject-left.png") center no-repeat;
++    top:0px;
++    right:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.right {
++    background:url("inject-right.png") center no-repeat;
++    top:0px;
++    left:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.top {
++    background:url("inject-top.png") center no-repeat;
++    bottom:0px;
++    left:0px;
++    height : 50px;
++}
++
++div.sidebar-inject.bottom {
++    background:url("inject-bottom.png") center no-repeat;
++    top:0px;
++    right:0px;
++    height : 50px;
++}
++
++div.sidebar-body {
++    margin:20px;
++    position:absolute;
++    top:0px;
++    left:0px;
++    color:#FFFFFF;
++}
++
++ul.sidebar-menu {
++    font-size:12pt;
++    font-weight:bold;
++    list-style:none;
++    text-decoration:none;
++    color:white;
++}
++
++ul.sidebar-menu li{
++    line-height:1.5em;
++}
++
++a,a:visited {
++    color:white;
++    text-decoration:none;
++    font-weight:bold;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-bottom.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-bottom.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-bottom.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-bottom.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-left.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-left.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-left.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-left.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-right.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-right.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-right.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-right.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-top.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-top.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-top.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-top.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/sidebar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/sidebar.css	(revision 15487)
+@@ -0,0 +1,127 @@
++* {
++    margin:0;
++    padding:0;
++}
++
++.sidebar-root{
++    position : relative;
++    overflow : hidden;
++}
++
++.sidebar-root div.sidebar-container{
++    position: absolute;
++}
++
++div.sidebar-container {
++    width : 100px;
++    height : 200px;
++    position:fixed;
++    background-color:#000000;
++    filter: alpha(opacity=87);
++    -moz-opacity:0.87;
++    opacity:0.87;
++    -moz-box-shadow:0px 0px 20px #000000;
++    -webkit-box-shadow:0px 0px 20px #000000;
++    box-shadow:0px 0px 20px #000000;
++}
++
++div.sidebar-container.left {
++    top:50%;
++    left:0px;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-topright: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-top-right-radius: 10px;
++}
++
++div.sidebar-container.right {
++    top:50%;
++    right:0px;
++    -moz-border-radius-bottomleft: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-bottom-left-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-container.top {
++    top:0px;
++    left:50%;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-bottomleft: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-bottom-left-radius: 10px;
++}
++
++div.sidebar-container.bottom {
++    bottom:0px;
++    left:50%;
++    -moz-border-radius-topright: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-top-right-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-inject {
++    position:absolute;
++}
++div.sidebar-inject.left {
++    background:url("inject-left.png") center no-repeat;
++    top:0px;
++    right:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.right {
++    background:url("inject-right.png") center no-repeat;
++    top:0px;
++    left:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.top {
++    background:url("inject-top.png") center no-repeat;
++    bottom:0px;
++    left:0px;
++    height : 50px;
++}
++
++div.sidebar-inject.bottom {
++    background:url("inject-bottom.png") center no-repeat;
++    top:0px;
++    right:0px;
++    height : 50px;
++}
++
++div.sidebar-body {
++    margin:20px;
++    position:absolute;
++    top:0px;
++    left:0px;
++    color:#FFFFFF;
++}
++
++ul.sidebar-menu {
++    font-size:12pt;
++    font-weight:bold;
++    list-style:none;
++    text-decoration:none;
++    color:white;
++}
++
++ul.sidebar-menu li{
++    line-height:1.5em;
++}
++
++a,a:visited {
++    color:white;
++    text-decoration:none;
++    font-weight:bold;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-bottom.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-bottom.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-bottom.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-bottom.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-left.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-left.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-left.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-left.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-right.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-right.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-right.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-right.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-top.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-top.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-top.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-top.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/sidebar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/sidebar.css	(revision 15487)
+@@ -0,0 +1,127 @@
++* {
++    margin:0;
++    padding:0;
++}
++
++.sidebar-root{
++    position : relative;
++    overflow : hidden;
++}
++
++.sidebar-root div.sidebar-container{
++    position: absolute;
++}
++
++div.sidebar-container {
++    width : 100px;
++    height : 200px;
++    position:fixed;
++    background-color:#4F8FFF;
++    filter: alpha(opacity=87);
++    -moz-opacity:0.87;
++    opacity:0.87;
++    -moz-box-shadow:0px 0px 20px #4F8FFF;
++    -webkit-box-shadow:0px 0px 20px #4F8FFF;
++    box-shadow:0px 0px 20px #4F8FFF;
++}
++
++div.sidebar-container.left {
++    top:50%;
++    left:0px;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-topright: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-top-right-radius: 10px;
++}
++
++div.sidebar-container.right {
++    top:50%;
++    right:0px;
++    -moz-border-radius-bottomleft: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-bottom-left-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-container.top {
++    top:0px;
++    left:50%;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-bottomleft: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-bottom-left-radius: 10px;
++}
++
++div.sidebar-container.bottom {
++    bottom:0px;
++    left:50%;
++    -moz-border-radius-topright: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-top-right-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-inject {
++    position:absolute;
++}
++div.sidebar-inject.left {
++    background:url("inject-left.png") center no-repeat;
++    top:0px;
++    right:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.right {
++    background:url("inject-right.png") center no-repeat;
++    top:0px;
++    left:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.top {
++    background:url("inject-top.png") center no-repeat;
++    bottom:0px;
++    left:0px;
++    height : 50px;
++}
++
++div.sidebar-inject.bottom {
++    background:url("inject-bottom.png") center no-repeat;
++    top:0px;
++    right:0px;
++    height : 50px;
++}
++
++div.sidebar-body {
++    margin:20px;
++    position:absolute;
++    top:0px;
++    left:0px;
++    color:#FFFFFF;
++}
++
++ul.sidebar-menu {
++    font-size:12pt;
++    font-weight:bold;
++    list-style:none;
++    text-decoration:none;
++    color:white;
++}
++
++ul.sidebar-menu li{
++    line-height:1.5em;
++}
++
++a,a:visited {
++    color:white;
++    text-decoration:none;
++    font-weight:bold;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-bottom.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-bottom.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-bottom.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-bottom.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-left.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-left.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-left.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-left.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-right.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-right.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-right.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-right.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/jquery.sidebar.js.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/jquery.sidebar.js.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/jquery.sidebar.js.html	(revision 15487)
+@@ -0,0 +1,260 @@
++<!DOCTYPE html>
++<html>
++<head>
++    <style>
++        .code {
++            white-space: pre;
++            font-family: courier new;
++            width: 100%;            
++        }
++        
++        .miss {
++            background-color: #FF0000;
++        }
++        
++        .hit {
++            background-color: #94FF7C;
++        }
++        
++        .undef {
++            background-color: #FFFFFF;
++        } 
++
++        .nottested {
++            background-color: #FFFF00;
++        }         
++    </style>
++</head>
++<body>
++
++<div class="code undef">/*!</div>
++<div class="code undef"> * jquery.sidebar v1.0.2</div>
++<div class="code undef"> * http://sideroad.secret.jp/</div>
++<div class="code undef"> *</div>
++<div class="code undef"> * Copyright (c) 2009 sideroad</div>
++<div class="code undef"> *</div>
++<div class="code undef"> * Dual licensed under the MIT or GPL Version 2 licenses.</div>
++<div class="code undef"> * Date: 2009-09-01</div>
++<div class="code undef"> */</div>
++<div class="code hit">(function( $, _window ) {</div>
++<div class="code hit">    $.fn.sidebar = function(options){</div>
++<div class="code undef"></div>
++<div class="code hit">        return this.each(function(){</div>
++<div class="code hit">            var elem = $(this),</div>
++<div class="code undef">                data = elem.data("sidebar")||{},</div>
++<div class="code undef">                margin,</div>
++<div class="code undef">                width,</div>
++<div class="code undef">                height,</div>
++<div class="code undef">                duration = data.duration,</div>
++<div class="code undef">                injectWidth,</div>
++<div class="code undef">                injectHeight,</div>
++<div class="code undef">                injectCss,</div>
++<div class="code undef">                containerCss,</div>
++<div class="code undef">                bodyCss,</div>
++<div class="code undef">                position,</div>
++<div class="code undef">                enter,</div>
++<div class="code undef">                leave,</div>
++<div class="code undef">                opened,</div>
++<div class="code undef">                closed,</div>
++<div class="code undef">                isInnerElement,</div>
++<div class="code undef">                container = $("&lt;div&gt;<div/>"),</div>
++<div class="code undef">                inject = $("&lt;div&gt;<div/>"),</div>
++<div class="code undef">                body = $("&lt;div&gt;<div/>"),</div>
++<div class="code undef">                root,</div>
++<div class="code undef">                parent,</div>
++<div class="code undef">                open = function(){</div>
++<div class="code hit">                    var data = elem.data("sidebar") || {},</div>
++<div class="code undef">                        opened = data.callback.sidebar.open,</div>
++<div class="code undef">                        container = data.container,</div>
++<div class="code undef">                        inject = data.inject,</div>
++<div class="code undef">                        body = data.body;</div>
++<div class="code undef">                    </div>
++<div class="code hit">                    if (data.isEnter || data.isProcessing) {</div>
++<div class="code miss">                        return;</div>
++<div class="code undef">                    }</div>
++<div class="code hit">                    data.isEnter = true;</div>
++<div class="code hit">                    data.isProcessing = true;</div>
++<div class="code hit">                    container.animate(data.animate.container.enter, {</div>
++<div class="code undef">                        duration: duration,</div>
++<div class="code undef">                        complete: function(){</div>
++<div class="code hit">                            inject.fadeOut(duration, function(){</div>
++<div class="code hit">                                body.show("clip", duration,function(){</div>
++<div class="code hit">                                    data.isProcessing = false;</div>
++<div class="code hit">                                    if(opened) {</div>
++<div class="code hit">                                        opened();</div>
++<div class="code undef">                                    }</div>
++<div class="code undef">                                });</div>
++<div class="code undef">                            });</div>
++<div class="code undef">                        }</div>
++<div class="code undef">                    });</div>
++<div class="code undef">                },</div>
++<div class="code undef">                close = function(){</div>
++<div class="code hit">                    var data = elem.data("sidebar") || {},</div>
++<div class="code undef">                        closed = data.callback.sidebar.close,</div>
++<div class="code undef">                        container = data.container,</div>
++<div class="code undef">                        inject = data.inject,</div>
++<div class="code undef">                        body = data.body;</div>
++<div class="code undef">                       </div>
++<div class="code hit">                    if(!data.isEnter || data.isProcessing ) {</div>
++<div class="code miss">                        return;</div>
++<div class="code undef">                    }</div>
++<div class="code hit">                    data.isProcessing = true;</div>
++<div class="code hit">                    container.animate(data.animate.container.leave, {</div>
++<div class="code undef">                        duration: duration,</div>
++<div class="code undef">                        complete: function(){</div>
++<div class="code hit">                            body.hide("clip", duration, function(){</div>
++<div class="code hit">                                inject.fadeIn(duration, function(){</div>
++<div class="code hit">                                    data.isEnter = false;</div>
++<div class="code hit">                                    data.isProcessing = false;</div>
++<div class="code hit">                                    if(closed) {</div>
++<div class="code hit">                                        closed();</div>
++<div class="code undef">                                    }</div>
++<div class="code undef">                                });</div>
++<div class="code undef">                            });</div>
++<div class="code undef">                        }</div>
++<div class="code undef">                    });</div>
++<div class="code undef">                };</div>
++<div class="code undef">            </div>
++<div class="code undef">            </div>
++<div class="code hit">            if(typeof options === "string"){</div>
++<div class="code hit">                switch(options){</div>
++<div class="code undef">                    case "open" :</div>
++<div class="code hit">                        open();</div>
++<div class="code hit">                        break;</div>
++<div class="code undef">                    case "close" : </div>
++<div class="code hit">                        close();</div>
++<div class="code hit">                        break;</div>
++<div class="code undef">                }</div>
++<div class="code hit">                return;</div>
++<div class="code undef">            }</div>
++<div class="code undef">                </div>
++<div class="code undef">            //default setting</div>
++<div class="code hit">            options = $.extend(true, {</div>
++<div class="code undef">                root : $(document.body),</div>
++<div class="code undef">                position : "left",</div>
++<div class="code undef">                callback: {</div>
++<div class="code undef">                    item : {</div>
++<div class="code undef">                        enter : function(){</div>
++<div class="code miss">                            $(this).animate({marginLeft:"5px"},250);</div>
++<div class="code undef">                        },</div>
++<div class="code undef">                        leave : function(){</div>
++<div class="code miss">                            $(this).animate({marginLeft:"0px"},250);</div>
++<div class="code undef">                        }</div>
++<div class="code undef">                    },</div>
++<div class="code undef">                    sidebar : {</div>
++<div class="code undef">                        open : function(){</div>
++<div class="code undef">                            </div>
++<div class="code undef">                        },</div>
++<div class="code undef">                        close : function(){</div>
++<div class="code undef">                            </div>
++<div class="code undef">                        }</div>
++<div class="code undef">                    }</div>
++<div class="code undef">                },</div>
++<div class="code undef">                animate : {</div>
++<div class="code undef">                    container : {</div>
++<div class="code undef">                        enter : {},</div>
++<div class="code undef">                        leave : {}</div>
++<div class="code undef">                    }</div>
++<div class="code undef">                },</div>
++<div class="code undef">                duration : 200,</div>
++<div class="code undef">                open : "mouseenter.sidebar",</div>
++<div class="code undef">                close : "mouseleave.sidebar"</div>
++<div class="code undef">            }, options);</div>
++<div class="code undef">            </div>
++<div class="code hit">            root = options.root;</div>
++<div class="code hit">            isInnerElement = !root.is(document.body);</div>
++<div class="code hit">            parent = ( isInnerElement ) ? root.addClass("sidebar-root") : $(_window);</div>
++<div class="code undef">            </div>
++<div class="code hit">            position = options.position;</div>
++<div class="code hit">            duration = options.duration;</div>
++<div class="code undef">            </div>
++<div class="code hit">            container.attr("id", "jquerySideBar" + new Date().getTime()).addClass("sidebar-container").addClass(position);</div>
++<div class="code hit">            inject.addClass("sidebar-inject").addClass(position);</div>
++<div class="code hit">            body.addClass("sidebar-body");</div>
++<div class="code undef">            </div>
++<div class="code undef">            //append to body</div>
++<div class="code hit">            body.append(this);</div>
++<div class="code hit">            container.append(body);</div>
++<div class="code hit">            container.append(inject);</div>
++<div class="code hit">            root.append(container);</div>
++<div class="code undef">            </div>
++<div class="code hit">            width = container.width();</div>
++<div class="code hit">            height = container.height();</div>
++<div class="code hit">            injectWidth = inject.width();</div>
++<div class="code hit">            injectHeight = inject.height();</div>
++<div class="code undef">            </div>
++<div class="code hit">            containerCss = {</div>
++<div class="code undef">                height: height,</div>
++<div class="code undef">                width: width</div>
++<div class="code undef">            };</div>
++<div class="code hit">            bodyCss = {</div>
++<div class="code undef">                height: height,</div>
++<div class="code undef">                width: width</div>
++<div class="code undef">            };</div>
++<div class="code undef">            </div>
++<div class="code hit">            if(position === "left" || position === "right") {</div>
++<div class="code hit">                margin = width - injectWidth;</div>
++<div class="code hit">                injectCss = {</div>
++<div class="code undef">                    height : height,</div>
++<div class="code undef">                    width : injectWidth</div>
++<div class="code undef">                };</div>
++<div class="code hit">                containerCss.top = options.top || (parent.height()/2) - (height/2) + "px";</div>
++<div class="code undef">                </div>
++<div class="code undef">            } else {</div>
++<div class="code hit">                margin = height - injectHeight;</div>
++<div class="code hit">                injectCss = {</div>
++<div class="code undef">                    height : injectHeight,</div>
++<div class="code undef">                    width : width</div>
++<div class="code undef">                };</div>
++<div class="code hit">                containerCss.left = options.left || (parent.width()/2) - (width/2) + "px";</div>
++<div class="code undef">            }</div>
++<div class="code undef">            </div>
++<div class="code hit">            containerCss[position] = "-" + margin + "px";</div>
++<div class="code hit">            injectCss[position] = margin + "px";</div>
++<div class="code hit">            options.animate.container.enter[position] = 0;</div>
++<div class="code hit">            options.animate.container.leave[position] = "-" + margin;</div>
++<div class="code undef">            </div>
++<div class="code undef">            //container</div>
++<div class="code hit">            container.css(containerCss);</div>
++<div class="code undef">            </div>
++<div class="code undef">            //inject</div>
++<div class="code hit">            inject.css(injectCss);</div>
++<div class="code undef">            </div>
++<div class="code undef">            //body</div>
++<div class="code hit">            body.css(bodyCss).hide();</div>
++<div class="code undef">            </div>
++<div class="code undef">            //menu callback</div>
++<div class="code hit">            $(this).addClass("sidebar-menu").find("li")</div>
++<div class="code undef">                .bind("mouseenter.sidebar",options.callback.item.enter)</div>
++<div class="code undef">                .bind("mouseleave.sidebar",options.callback.item.leave);</div>
++<div class="code undef">            </div>
++<div class="code undef">            //container events</div>
++<div class="code hit">            if(options.open) {</div>
++<div class="code hit">                container.bind(options.open,open);</div>
++<div class="code undef">            }</div>
++<div class="code hit">            if(options.close) {</div>
++<div class="code hit">                container.bind(options.close,close);</div>
++<div class="code undef">            }</div>
++<div class="code undef">            </div>
++<div class="code undef">            //store data</div>
++<div class="code hit">            options.container = container;</div>
++<div class="code hit">            options.inject = inject;</div>
++<div class="code hit">            options.body = body;</div>
++<div class="code hit">            elem.data("sidebar", options);</div>
++<div class="code undef">            </div>
++<div class="code hit">            parent.resize(function(){</div>
++<div class="code miss">                if(position === "left" || position === "right") {</div>
++<div class="code miss">                    container.css({top:($(this).height()/2) - (height/2) + "px"});</div>
++<div class="code undef">                } else {</div>
++<div class="code miss">                    container.css({left:($(this).width()/2) - (width/2) + "px"});</div>
++<div class="code undef">                }</div>
++<div class="code undef">            });</div>
++<div class="code undef">            </div>
++<div class="code undef">        });</div>
++<div class="code undef">    };</div>
++<div class="code undef">}(jQuery, this));</div>
++<div class="code undef"></div>
++
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/out.temp
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/out.temp	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/out.temp	(revision 15487)
+@@ -0,0 +1,89 @@
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/test/jquery.sidebar.html"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/qunit.css"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/sidebar.css"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/jquery.js"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/jquery-ui.js"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/qunit.js"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/src/jquery.sidebar.js"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/test/jquery.sidebar.js"]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/test/jquery.sidebar.html"]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/qunit.css"]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/sidebar.css"]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/jquery.js"]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/jquery-ui.js"]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/qunit.js"]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/src/jquery.sidebar.js"]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/test/jquery.sidebar.js"]
++["debug","inject","/Users/sideroad/workspace/jquery.sidebar/node_modules/grunt-qunit-cov/tasks/qunit-cov/qunit.js"]
++["begin"]
++["moduleStart","jquery.sidebar"]
++["testStart","default/left"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-left.png"]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"\"-50px\"","\"-50px\"",null,null]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-left.png"]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["testDone","default/left",0,8,8]
++["testStart","top"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-top.png"]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"\"-150px\"","\"-150px\"",null,null]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-top.png"]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["testDone","top",0,8,8]
++["testStart","right"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-right.png"]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"\"-50px\"","\"-50px\"",null,null]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-right.png"]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["testDone","right",0,8,8]
++["testStart","bottom"]
++["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-bottom.png"]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"\"-150px\"","\"-150px\"",null,null]
++["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-bottom.png"]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["testDone","bottom",0,8,8]
++["testStart","open-event"]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"\"-50px\"","\"-50px\"",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["testDone","open-event",0,8,8]
++["testStart","call open/close method manually"]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"1","1",null,null]
++["log",true,"\"-50px\"","\"-50px\"",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["log",true,"undefined","undefined",null,null]
++["testDone","call open/close method manually",0,8,8]
++["moduleDone","jquery.sidebar",0,48,48]
++["done",0,48,48,7650,{"jquery.sidebar.js":[null,null,null,null,null,null,null,null,null,null,1,1,null,8,8,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,6,null,null,null,null,null,6,0,null,6,6,6,null,null,6,6,6,6,6,null,null,null,null,null,null,null,6,null,null,null,null,null,6,0,null,6,6,null,null,6,6,6,6,6,6,null,null,null,null,null,null,null,null,8,2,null,1,1,null,1,1,null,2,null,null,null,6,null,null,null,null,null,0,null,null,0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,6,6,6,null,6,6,null,6,6,6,null,null,6,6,6,6,null,6,6,6,6,null,6,null,null,null,6,null,null,null,null,6,4,4,null,null,null,4,null,null,2,2,null,null,null,2,null,null,6,6,6,6,null,null,6,null,null,6,null,null,6,null,null,6,null,null,null,null,6,6,null,6,6,null,null,null,6,6,6,6,null,6,0,0,null,0]}]
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/coverage.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/coverage.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/coverage.html	(revision 15487)
+@@ -0,0 +1 @@
++<h2>Total Coverage</h2><table><tr><td width="150"><table width="100%" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td width="91%" bgcolor="#00CC33">&nbsp;</td><td width=" 10091%" bgcolor="#990000"></td></tr></tbody></table></td><td width="25" align="right"><strong>91%</strong></td><td></td></tr></table><h2>Detailed Coverage</h2><table><tr><td width="150"><table width="100%" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td width="91%" bgcolor="#00CC33">&nbsp;</td><td width=" 10091%" bgcolor="#990000"></td></tr></tbody></table></td><td width="25" align="right"><strong>91%</strong></td><td><a href="jquery.sidebar.js.html">jquery.sidebar.js</a></td></tr></table><table><h2>Uncovered Files</h2></table>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/demo.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/demo.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/demo.html	(revision 15487)
+@@ -0,0 +1,67 @@
++﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
++"http://www.w3.org/TR/html4/loose.dtd">
++<html xmlns="http://www.w3.org/1999/xhtml">
++    <head>
++        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
++        <title>jquery.sidebar.js</title>
++        <link rel="stylesheet" type="text/css" href="css/dark-glass/sidebar.css" />
++        <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
++        <script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
++        <script type="text/javascript" src="src/jquery.sidebar.js"></script>
++    </head>
++    <body>
++        <ul id="demo_menu1" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu2" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu3" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu4" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++
++        <b style="font-size:80px;position:absolute;top:42%;left:35%;" >jquery.sidebar</b>
++        <script type="text/javascript">
++        $("ul#demo_menu1").sidebar();
++        $("ul#demo_menu2").sidebar({
++            position:"right",
++            callback:{
++                item : {
++                    enter : function(){
++                        $(this).find("a").animate({color:"red"}, 250);
++                    },
++                    leave : function(){
++                        $(this).find("a").animate({color:"white"}, 250);
++                    }
++                }
++            }
++        });
++        $("ul#demo_menu3").sidebar({
++            position:"top",
++          open:"click"
++        });
++        $("ul#demo_menu4").sidebar({
++            position:"bottom"
++        });
++        </script>
++    </body>
++</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/src/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/src/jquery.sidebar.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/src/jquery.sidebar.js	(revision 15487)
+@@ -0,0 +1,226 @@
++/*!
++ * jquery.sidebar v1.0.2
++ * http://sideroad.secret.jp/
++ *
++ * Copyright (c) 2009 sideroad
++ *
++ * Dual licensed under the MIT or GPL Version 2 licenses.
++ * Date: 2009-09-01
++ */
++(function( $, _window ) {
++    $.fn.sidebar = function(options){
++
++        return this.each(function(){
++            var elem = $(this),
++                data = elem.data("sidebar")||{},
++                margin,
++                width,
++                height,
++                duration = data.duration,
++                injectWidth,
++                injectHeight,
++                injectCss,
++                containerCss,
++                bodyCss,
++                position,
++                enter,
++                leave,
++                opened,
++                closed,
++                isInnerElement,
++                container = $("<div><div/>"),
++                inject = $("<div><div/>"),
++                body = $("<div><div/>"),
++                root,
++                parent,
++                open = function(){
++                    var data = elem.data("sidebar") || {},
++                        opened = data.callback.sidebar.open,
++                        container = data.container,
++                        inject = data.inject,
++                        body = data.body;
++                    
++                    if (data.isEnter || data.isProcessing) {
++                        return;
++                    }
++                    data.isEnter = true;
++                    data.isProcessing = true;
++                    container.animate(data.animate.container.enter, {
++                        duration: duration,
++                        complete: function(){
++                            inject.fadeOut(duration, function(){
++                                body.show("clip", duration,function(){
++                                    data.isProcessing = false;
++                                    if(opened) {
++                                        opened();
++                                    }
++                                });
++                            });
++                        }
++                    });
++                },
++                close = function(){
++                    var data = elem.data("sidebar") || {},
++                        closed = data.callback.sidebar.close,
++                        container = data.container,
++                        inject = data.inject,
++                        body = data.body;
++                       
++                    if(!data.isEnter || data.isProcessing ) {
++                        return;
++                    }
++                    data.isProcessing = true;
++                    container.animate(data.animate.container.leave, {
++                        duration: duration,
++                        complete: function(){
++                            body.hide("clip", duration, function(){
++                                inject.fadeIn(duration, function(){
++                                    data.isEnter = false;
++                                    data.isProcessing = false;
++                                    if(closed) {
++                                        closed();
++                                    }
++                                });
++                            });
++                        }
++                    });
++                };
++            
++            
++            if(typeof options === "string"){
++                switch(options){
++                    case "open" :
++                        open();
++                        break;
++                    case "close" : 
++                        close();
++                        break;
++                }
++                return;
++            }
++                
++            //default setting
++            options = $.extend(true, {
++                root : $(document.body),
++                position : "left",
++                callback: {
++                    item : {
++                        enter : function(){
++                            $(this).animate({marginLeft:"5px"},250);
++                        },
++                        leave : function(){
++                            $(this).animate({marginLeft:"0px"},250);
++                        }
++                    },
++                    sidebar : {
++                        open : function(){
++                            
++                        },
++                        close : function(){
++                            
++                        }
++                    }
++                },
++                animate : {
++                    container : {
++                        enter : {},
++                        leave : {}
++                    }
++                },
++                duration : 200,
++                open : "mouseenter.sidebar",
++                close : "mouseleave.sidebar"
++            }, options);
++            
++            root = options.root;
++            isInnerElement = !root.is(document.body);
++            parent = ( isInnerElement ) ? root.addClass("sidebar-root") : $(_window);
++            
++            position = options.position;
++            duration = options.duration;
++            
++            container.attr("id", "jquerySideBar" + new Date().getTime()).addClass("sidebar-container").addClass(position);
++            inject.addClass("sidebar-inject").addClass(position);
++            body.addClass("sidebar-body");
++            
++            //append to body
++            body.append(this);
++            container.append(body);
++            container.append(inject);
++            root.append(container);
++            
++            width = container.width();
++            height = container.height();
++            injectWidth = inject.width();
++            injectHeight = inject.height();
++            
++            containerCss = {
++                height: height,
++                width: width
++            };
++            bodyCss = {
++                height: height,
++                width: width
++            };
++            
++            if(position === "left" || position === "right") {
++                margin = width - injectWidth;
++                injectCss = {
++                    height : height,
++                    width : injectWidth
++                };
++                containerCss.top = options.top || (parent.height()/2) - (height/2) + "px";
++                
++            } else {
++                margin = height - injectHeight;
++                injectCss = {
++                    height : injectHeight,
++                    width : width
++                };
++                containerCss.left = options.left || (parent.width()/2) - (width/2) + "px";
++            }
++            
++            containerCss[position] = "-" + margin + "px";
++            injectCss[position] = margin + "px";
++            options.animate.container.enter[position] = 0;
++            options.animate.container.leave[position] = "-" + margin;
++            
++            //container
++            container.css(containerCss);
++            
++            //inject
++            inject.css(injectCss);
++            
++            //body
++            body.css(bodyCss).hide();
++            
++            //menu callback
++            $(this).addClass("sidebar-menu").find("li")
++                .bind("mouseenter.sidebar",options.callback.item.enter)
++                .bind("mouseleave.sidebar",options.callback.item.leave);
++            
++            //container events
++            if(options.open) {
++                container.bind(options.open,open);
++            }
++            if(options.close) {
++                container.bind(options.close,close);
++            }
++            
++            //store data
++            options.container = container;
++            options.inject = inject;
++            options.body = body;
++            elem.data("sidebar", options);
++            
++            parent.resize(function(){
++                if(position === "left" || position === "right") {
++                    container.css({top:($(this).height()/2) - (height/2) + "px"});
++                } else {
++                    container.css({left:($(this).width()/2) - (width/2) + "px"});
++                }
++            });
++            
++        });
++    };
++}(jQuery, this));
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-top.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-top.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-top.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-top.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/sidebar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/sidebar.css	(revision 15487)
+@@ -0,0 +1,127 @@
++* {
++    margin:0;
++    padding:0;
++}
++
++.sidebar-root{
++    position : relative;
++    overflow : hidden;
++}
++
++.sidebar-root div.sidebar-container{
++    position: absolute;
++}
++
++div.sidebar-container {
++    width : 100px;
++    height : 200px;
++    position:fixed;
++    background-color:#FF3F3F;
++    filter: alpha(opacity=87);
++    -moz-opacity:0.87;
++    opacity:0.87;
++    -moz-box-shadow:0px 0px 20px #FF3F3F;
++    -webkit-box-shadow:0px 0px 20px #FF3F3F;
++    box-shadow:0px 0px 20px #FF3F3F;
++}
++
++div.sidebar-container.left {
++    top:50%;
++    left:0px;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-topright: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-top-right-radius: 10px;
++}
++
++div.sidebar-container.right {
++    top:50%;
++    right:0px;
++    -moz-border-radius-bottomleft: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-bottom-left-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-container.top {
++    top:0px;
++    left:50%;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-bottomleft: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-bottom-left-radius: 10px;
++}
++
++div.sidebar-container.bottom {
++    bottom:0px;
++    left:50%;
++    -moz-border-radius-topright: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-top-right-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-inject {
++    position:absolute;
++}
++div.sidebar-inject.left {
++    background:url("inject-left.png") center no-repeat;
++    top:0px;
++    right:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.right {
++    background:url("inject-right.png") center no-repeat;
++    top:0px;
++    left:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.top {
++    background:url("inject-top.png") center no-repeat;
++    bottom:0px;
++    left:0px;
++    height : 50px;
++}
++
++div.sidebar-inject.bottom {
++    background:url("inject-bottom.png") center no-repeat;
++    top:0px;
++    right:0px;
++    height : 50px;
++}
++
++div.sidebar-body {
++    margin:20px;
++    position:absolute;
++    top:0px;
++    left:0px;
++    color:#FFFFFF;
++}
++
++ul.sidebar-menu {
++    font-size:12pt;
++    font-weight:bold;
++    list-style:none;
++    text-decoration:none;
++    color:white;
++}
++
++ul.sidebar-menu li{
++    line-height:1.5em;
++}
++
++a,a:visited {
++    color:white;
++    text-decoration:none;
++    font-weight:bold;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-bottom.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-bottom.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-bottom.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-bottom.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-left.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-left.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-left.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-left.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-right.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-right.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-right.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-right.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-top.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-top.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-top.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-top.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/sidebar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/sidebar.css	(revision 15487)
+@@ -0,0 +1,127 @@
++* {
++    margin:0;
++    padding:0;
++}
++
++.sidebar-root{
++    position : relative;
++    overflow : hidden;
++}
++
++.sidebar-root div.sidebar-container{
++    position: absolute;
++}
++
++div.sidebar-container {
++    width : 100px;
++    height : 200px;
++    position:fixed;
++    background-color:#000000;
++    filter: alpha(opacity=87);
++    -moz-opacity:0.87;
++    opacity:0.87;
++    -moz-box-shadow:0px 0px 20px #000000;
++    -webkit-box-shadow:0px 0px 20px #000000;
++    box-shadow:0px 0px 20px #000000;
++}
++
++div.sidebar-container.left {
++    top:50%;
++    left:0px;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-topright: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-top-right-radius: 10px;
++}
++
++div.sidebar-container.right {
++    top:50%;
++    right:0px;
++    -moz-border-radius-bottomleft: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-bottom-left-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-container.top {
++    top:0px;
++    left:50%;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-bottomleft: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-bottom-left-radius: 10px;
++}
++
++div.sidebar-container.bottom {
++    bottom:0px;
++    left:50%;
++    -moz-border-radius-topright: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-top-right-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-inject {
++    position:absolute;
++}
++div.sidebar-inject.left {
++    background:url("inject-left.png") center no-repeat;
++    top:0px;
++    right:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.right {
++    background:url("inject-right.png") center no-repeat;
++    top:0px;
++    left:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.top {
++    background:url("inject-top.png") center no-repeat;
++    bottom:0px;
++    left:0px;
++    height : 50px;
++}
++
++div.sidebar-inject.bottom {
++    background:url("inject-bottom.png") center no-repeat;
++    top:0px;
++    right:0px;
++    height : 50px;
++}
++
++div.sidebar-body {
++    margin:20px;
++    position:absolute;
++    top:0px;
++    left:0px;
++    color:#FFFFFF;
++}
++
++ul.sidebar-menu {
++    font-size:12pt;
++    font-weight:bold;
++    list-style:none;
++    text-decoration:none;
++    color:white;
++}
++
++ul.sidebar-menu li{
++    line-height:1.5em;
++}
++
++a,a:visited {
++    color:white;
++    text-decoration:none;
++    font-weight:bold;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-bottom.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-bottom.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-bottom.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-bottom.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-left.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-left.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-left.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-left.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-right.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-right.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-right.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-right.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-top.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-top.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-top.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-top.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/sidebar.css	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/sidebar.css	(revision 15487)
+@@ -0,0 +1,127 @@
++* {
++    margin:0;
++    padding:0;
++}
++
++.sidebar-root{
++    position : relative;
++    overflow : hidden;
++}
++
++.sidebar-root div.sidebar-container{
++    position: absolute;
++}
++
++div.sidebar-container {
++    width : 100px;
++    height : 200px;
++    position:fixed;
++    background-color:#3764b2;
++    filter: alpha(opacity=87);
++    -moz-opacity:0.87;
++    opacity:0.87;
++    -moz-box-shadow:0px 0px 20px #3764b2;
++    -webkit-box-shadow:0px 0px 20px #3764b2;
++    box-shadow:0px 0px 20px #3764b2;
++}
++
++div.sidebar-container.left {
++    top:50%;
++    left:0px;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-topright: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-top-right-radius: 10px;
++}
++
++div.sidebar-container.right {
++    top:50%;
++    right:0px;
++    -moz-border-radius-bottomleft: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-bottom-left-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-container.top {
++    top:0px;
++    left:50%;
++    -moz-border-radius-bottomright: 10px;
++    -moz-border-radius-bottomleft: 10px;
++    -webkit-border-bottom-right-radius: 10px;
++    -webkit-border-bottom-left-radius: 10px;
++    border-bottom-right-radius: 10px;
++    border-bottom-left-radius: 10px;
++}
++
++div.sidebar-container.bottom {
++    bottom:0px;
++    left:50%;
++    -moz-border-radius-topright: 10px;
++    -moz-border-radius-topleft: 10px;
++    -webkit-border-top-right-radius: 10px;
++    -webkit-border-top-left-radius: 10px;
++    border-top-right-radius: 10px;
++    border-top-left-radius: 10px;
++}
++
++div.sidebar-inject {
++    position:absolute;
++}
++div.sidebar-inject.left {
++    background:url("inject-left.png") center no-repeat;
++    top:0px;
++    right:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.right {
++    background:url("inject-right.png") center no-repeat;
++    top:0px;
++    left:0px;
++    width : 50px;
++}
++
++div.sidebar-inject.top {
++    background:url("inject-top.png") center no-repeat;
++    bottom:0px;
++    left:0px;
++    height : 50px;
++}
++
++div.sidebar-inject.bottom {
++    background:url("inject-bottom.png") center no-repeat;
++    top:0px;
++    right:0px;
++    height : 50px;
++}
++
++div.sidebar-body {
++    margin:20px;
++    position:absolute;
++    top:0px;
++    left:0px;
++    color:#FFFFFF;
++}
++
++ul.sidebar-menu {
++    font-size:12pt;
++    font-weight:bold;
++    list-style:none;
++    text-decoration:none;
++    color:white;
++}
++
++ul.sidebar-menu li{
++    line-height:1.5em;
++}
++
++a,a:visited {
++    color:white;
++    text-decoration:none;
++    font-weight:bold;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-bottom.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-bottom.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-bottom.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-bottom.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-left.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-left.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-left.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-left.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-right.png
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-right.png	(revision 15486)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-right.png	(revision 15487)
+
+Property changes on: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-right.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/demo1.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/demo1.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/demo1.html	(revision 15487)
+@@ -0,0 +1,67 @@
++﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
++"http://www.w3.org/TR/html4/loose.dtd">
++<html xmlns="http://www.w3.org/1999/xhtml">
++    <head>
++        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
++        <title>jquery.sidebar.js</title>
++        <link rel="stylesheet" type="text/css" href="css/blue-glass/sidebar.css" />
++        <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
++        <script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
++        <script type="text/javascript" src="src/jquery.sidebar.js"></script>
++    </head>
++    <body>
++        <ul id="demo_menu1" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu2" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu3" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++        <ul id="demo_menu4" >
++            <li><a href="#" >jQuery</a></li>
++            <li><a href="#" >Write</a></li>
++            <li><a href="#" >Less</a></li>
++            <li><a href="#" >Do</a></li>
++            <li><a href="#" >More</a></li>
++        </ul>
++
++        <b style="font-size:80px;position:absolute;top:42%;left:35%;" >jquery.sidebar</b>
++        <script type="text/javascript">
++        $("ul#demo_menu1").sidebar();
++        $("ul#demo_menu2").sidebar({
++            position:"right",
++            callback:{
++                item : {
++                    enter : function(){
++                        $(this).find("a").animate({color:"red"}, 250);
++                    },
++                    leave : function(){
++                        $(this).find("a").animate({color:"white"}, 250);
++                    }
++                }
++            }
++        });
++        $("ul#demo_menu3").sidebar({
++            position:"top",
++          open:"click"
++        });
++        $("ul#demo_menu4").sidebar({
++            position:"bottom"
++        });
++        </script>
++    </body>
++</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/testem.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/testem.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/testem.json	(revision 15487)
+@@ -0,0 +1 @@
++{"launch_in_ci":["PhantomJS"],"tap":"tests.tap","test_page":"test/jquery.sidebar.html"}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/Gruntfile.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/Gruntfile.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/Gruntfile.js	(revision 15487)
+@@ -0,0 +1,83 @@
++/*global module:false*/
++module.exports = function(grunt) {
++  "use strict";
++
++  // Project configuration.
++  grunt.initConfig({
++    pkg: grunt.file.readJSON('package.json'),
++    testem : {
++      options: {
++        launch_in_ci: [
++          'PhantomJS'
++        ],
++        tap: 'tests.tap'
++      },
++      main: {
++        files: {
++          test: [
++            "test/*.html"
++          ]
++        }
++      }
++    },
++    concat: {
++      dist: {
++        src: ['src/<%= pkg.name %>.js'],
++        dest: 'dist/<%= pkg.name %>.js'
++      }
++    },
++    min: {
++      dist: {
++        files: {
++          'dist/<%= pkg.name %>.min.js': ['dist/<%= pkg.name %>.js']
++        }
++      }
++    },
++    "qunit-cov": {
++      test:{
++        minimum: 0.9,
++        srcDir: 'src',
++        depDirs: ['lib', 'test', 'css'],
++        outDir: 'cov',
++        testFiles: ['test/*.html']
++      }
++    },
++    qunit: {
++      files: ['test/**/*.html']
++    },
++    lint: {
++      files: ['grunt.js', 'src/**/*.js']
++    },
++    watch: {
++      files: '<config:lint.files>',
++      tasks: 'default'
++    },
++    jshint: {
++      options: {
++        curly: true,
++        eqeqeq: true,
++        immed: true,
++        latedef: true,
++        newcap: true,
++        noarg: true,
++        sub: true,
++        undef: true,
++        boss: true,
++        eqnull: true,
++        browser: true
++      },
++      globals: {
++        jQuery: true
++      }
++    }
++  });
++
++  // Default task.
++  grunt.loadNpmTasks('grunt-contrib-concat');
++  grunt.loadNpmTasks('grunt-yui-compressor');
++  grunt.loadNpmTasks('grunt-qunit-cov');
++  grunt.loadNpmTasks('grunt-testem');
++  grunt.loadNpmTasks('grunt-devtools');
++  grunt.registerTask('default', ['testem', 'qunit-cov', 'concat', 'min']);
++
++};
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/component.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/component.json	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/component.json	(revision 15487)
+@@ -0,0 +1,23 @@
++{
++  "name": "jquery.sidebar",
++  "version": "0.0.0",
++  "main": "./dist/jquery.sidebar.js",
++  "ignore": [
++    "**/.*",
++    "node_modules",
++    "components",
++    "**/*.html",
++    "package.json",
++    "*.tap",
++    "testem.json"
++  ],
++  "dependencies": {
++    "jquery": ">= 1.8",
++    "jquery-ui": ">= 1.8"
++  },
++  "repository": {
++    "type": "git",
++    "url": "git://github.com/sideroad/jquery.sidebar"
++  }
++
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/README.md
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/README.md	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/README.md	(revision 15487)
+@@ -0,0 +1,9 @@
++
++### Install 
++```sh
++jam install jquery.sidebar
++```
++
++### Usage
++Please check the [jquery.sidebar](http://sideroad.secret.jp/plugins/jQuerySideBar/)
++
+Index: ../trunk-jpl/src/mobile/web/js/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/index.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/index.html	(revision 15487)
+@@ -0,0 +1,450 @@
++<!doctype html>
++<html lang="us">
++<head>
++	<meta charset="utf-8">
++	<title>jQuery UI Example Page</title>
++	<link href="css/ui-lightness/jquery-ui-1.10.3.custom.css" rel="stylesheet">
++	<script src="js/jquery-1.9.1.js"></script>
++	<script src="js/jquery-ui-1.10.3.custom.js"></script>
++	<script>
++	$(function() {
++		
++		$( "#accordion" ).accordion();
++		
++
++		
++		var availableTags = [
++			"ActionScript",
++			"AppleScript",
++			"Asp",
++			"BASIC",
++			"C",
++			"C++",
++			"Clojure",
++			"COBOL",
++			"ColdFusion",
++			"Erlang",
++			"Fortran",
++			"Groovy",
++			"Haskell",
++			"Java",
++			"JavaScript",
++			"Lisp",
++			"Perl",
++			"PHP",
++			"Python",
++			"Ruby",
++			"Scala",
++			"Scheme"
++		];
++		$( "#autocomplete" ).autocomplete({
++			source: availableTags
++		});
++		
++
++		
++		$( "#button" ).button();
++		$( "#radioset" ).buttonset();
++		
++
++		
++		$( "#tabs" ).tabs();
++		
++
++		
++		$( "#dialog" ).dialog({
++			autoOpen: false,
++			width: 400,
++			buttons: [
++				{
++					text: "Ok",
++					click: function() {
++						$( this ).dialog( "close" );
++					}
++				},
++				{
++					text: "Cancel",
++					click: function() {
++						$( this ).dialog( "close" );
++					}
++				}
++			]
++		});
++
++		// Link to open the dialog
++		$( "#dialog-link" ).click(function( event ) {
++			$( "#dialog" ).dialog( "open" );
++			event.preventDefault();
++		});
++		
++
++		
++		$( "#datepicker" ).datepicker({
++			inline: true
++		});
++		
++
++		
++		$( "#slider" ).slider({
++			range: true,
++			values: [ 17, 67 ]
++		});
++		
++
++		
++		$( "#progressbar" ).progressbar({
++			value: 20
++		});
++		
++
++		// Hover states on the static widgets
++		$( "#dialog-link, #icons li" ).hover(
++			function() {
++				$( this ).addClass( "ui-state-hover" );
++			},
++			function() {
++				$( this ).removeClass( "ui-state-hover" );
++			}
++		);
++	});
++	</script>
++	<style>
++	body{
++		font: 62.5% "Trebuchet MS", sans-serif;
++		margin: 50px;
++	}
++	.demoHeaders {
++		margin-top: 2em;
++	}
++	#dialog-link {
++		padding: .4em 1em .4em 20px;
++		text-decoration: none;
++		position: relative;
++	}
++	#dialog-link span.ui-icon {
++		margin: 0 5px 0 0;
++		position: absolute;
++		left: .2em;
++		top: 50%;
++		margin-top: -8px;
++	}
++	#icons {
++		margin: 0;
++		padding: 0;
++	}
++	#icons li {
++		margin: 2px;
++		position: relative;
++		padding: 4px 0;
++		cursor: pointer;
++		float: left;
++		list-style: none;
++	}
++	#icons span.ui-icon {
++		float: left;
++		margin: 0 4px;
++	}
++	.fakewindowcontain .ui-widget-overlay {
++		position: absolute;
++	}
++	</style>
++</head>
++<body>
++
++<h1>Welcome to jQuery UI!</h1>
++
++<div class="ui-widget">
++	<p>This page demonstrates the widgets you downloaded using the theme you selected in the download builder. We've included and linked to minified versions of <a href="js/jquery-1.9.1.js">jQuery</a>, your personalized copy of <a href="js/jquery-ui-1.10.3.custom.min.js">jQuery UI (js/jquery-ui-1.10.3.custom.min.js)</a>, and <a href="css/ui-lightness/jquery-ui-1.10.3.custom.min.css">css/ui-lightness/jquery-ui-1.10.3.custom.min.css</a> which imports the entire jQuery UI CSS Framework. You can choose to link a subset of the CSS Framework depending on your needs. </p>
++	<p>You've downloaded components and a theme that are compatible with jQuery 1.6+. Please make sure you are using jQuery 1.6+ in your production environment.</p>
++</div>
++
++<h1>YOUR COMPONENTS:</h1>
++
++
++<!-- Accordion -->
++<h2 class="demoHeaders">Accordion</h2>
++<div id="accordion">
++	<h3>First</h3>
++	<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
++	<h3>Second</h3>
++	<div>Phasellus mattis tincidunt nibh.</div>
++	<h3>Third</h3>
++	<div>Nam dui erat, auctor a, dignissim quis.</div>
++</div>
++
++
++
++<!-- Autocomplete -->
++<h2 class="demoHeaders">Autocomplete</h2>
++<div>
++	<input id="autocomplete" title="type &quot;a&quot;">
++</div>
++
++
++
++<!-- Button -->
++<h2 class="demoHeaders">Button</h2>
++<button id="button">A button element</button>
++<form style="margin-top: 1em;">
++	<div id="radioset">
++		<input type="radio" id="radio1" name="radio"><label for="radio1">Choice 1</label>
++		<input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2">Choice 2</label>
++		<input type="radio" id="radio3" name="radio"><label for="radio3">Choice 3</label>
++	</div>
++</form>
++
++
++
++<!-- Tabs -->
++<h2 class="demoHeaders">Tabs</h2>
++<div id="tabs">
++	<ul>
++		<li><a href="#tabs-1">First</a></li>
++		<li><a href="#tabs-2">Second</a></li>
++		<li><a href="#tabs-3">Third</a></li>
++	</ul>
++	<div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
++	<div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>
++	<div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>
++</div>
++
++
++
++<!-- Dialog NOTE: Dialog is not generated by UI in this demo so it can be visually styled in themeroller-->
++<h2 class="demoHeaders">Dialog</h2>
++<p><a href="#" id="dialog-link" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span>Open Dialog</a></p>
++
++<h2 class="demoHeaders">Overlay and Shadow Classes <em>(not currently used in UI widgets)</em></h2>
++<div style="position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;" class="fakewindowcontain">
++	<p>Lorem ipsum dolor sit amet,  Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>
++
++	<!-- ui-dialog -->
++	<div class="ui-overlay"><div class="ui-widget-overlay"></div><div class="ui-widget-shadow ui-corner-all" style="width: 302px; height: 152px; position: absolute; left: 50px; top: 30px;"></div></div>
++	<div style="position: absolute; width: 280px; height: 130px;left: 50px; top: 30px; padding: 10px;" class="ui-widget ui-widget-content ui-corner-all">
++		<div class="ui-dialog-content ui-widget-content" style="background: none; border: 0;">
++			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
++		</div>
++	</div>
++
++</div>
++
++<!-- ui-dialog -->
++<div id="dialog" title="Dialog Title">
++	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
++</div>
++
++
++
++<h2 class="demoHeaders">Framework Icons (content color preview)</h2>
++<ul id="icons" class="ui-widget ui-helper-clearfix">
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-n"><span class="ui-icon ui-icon-carat-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-ne"><span class="ui-icon ui-icon-carat-1-ne"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-e"><span class="ui-icon ui-icon-carat-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-se"><span class="ui-icon ui-icon-carat-1-se"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-s"><span class="ui-icon ui-icon-carat-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-sw"><span class="ui-icon ui-icon-carat-1-sw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-w"><span class="ui-icon ui-icon-carat-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-nw"><span class="ui-icon ui-icon-carat-1-nw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-n-s"><span class="ui-icon ui-icon-carat-2-n-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-e-w"><span class="ui-icon ui-icon-carat-2-e-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li>
++	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li>
++</ul>
++
++
++<!-- Slider -->
++<h2 class="demoHeaders">Slider</h2>
++<div id="slider"></div>
++
++
++
++<!-- Datepicker -->
++<h2 class="demoHeaders">Datepicker</h2>
++<div id="datepicker"></div>
++
++
++
++<!-- Progressbar -->
++<h2 class="demoHeaders">Progressbar</h2>
++<div id="progressbar"></div>
++
++
++<!-- Highlight / Error -->
++<h2 class="demoHeaders">Highlight / Error</h2>
++<div class="ui-widget">
++	<div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
++		<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
++		<strong>Hey!</strong> Sample ui-state-highlight style.</p>
++	</div>
++</div>
++<br>
++<div class="ui-widget">
++	<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">
++		<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
++		<strong>Alert:</strong> Sample ui-state-error style.</p>
++	</div>
++</div>
++
++</body>
++</html>
+Index: ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.min.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.min.js	(revision 15487)
+@@ -0,0 +1,7 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td>&#160;</td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);
++return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html("&#160;"),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/jquery-ui.custom.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery-ui.custom.js	(revision 0)
++++ ../trunk-jpl/src/mobile/web/js/jquery-ui.custom.js	(revision 15487)
+@@ -0,0 +1,14971 @@
++/*! jQuery UI - v1.10.3 - 2013-06-08
++* http://jqueryui.com
++* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
++* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
++
++(function( $, undefined ) {
++
++var uuid = 0,
++	runiqueId = /^ui-id-\d+$/;
++
++// $.ui might exist from components with no dependencies, e.g., $.ui.position
++$.ui = $.ui || {};
++
++$.extend( $.ui, {
++	version: "1.10.3",
++
++	keyCode: {
++		BACKSPACE: 8,
++		COMMA: 188,
++		DELETE: 46,
++		DOWN: 40,
++		END: 35,
++		ENTER: 13,
++		ESCAPE: 27,
++		HOME: 36,
++		LEFT: 37,
++		NUMPAD_ADD: 107,
++		NUMPAD_DECIMAL: 110,
++		NUMPAD_DIVIDE: 111,
++		NUMPAD_ENTER: 108,
++		NUMPAD_MULTIPLY: 106,
++		NUMPAD_SUBTRACT: 109,
++		PAGE_DOWN: 34,
++		PAGE_UP: 33,
++		PERIOD: 190,
++		RIGHT: 39,
++		SPACE: 32,
++		TAB: 9,
++		UP: 38
++	}
++});
++
++// plugins
++$.fn.extend({
++	focus: (function( orig ) {
++		return function( delay, fn ) {
++			return typeof delay === "number" ?
++				this.each(function() {
++					var elem = this;
++					setTimeout(function() {
++						$( elem ).focus();
++						if ( fn ) {
++							fn.call( elem );
++						}
++					}, delay );
++				}) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.focus ),
++
++	scrollParent: function() {
++		var scrollParent;
++		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
++			scrollParent = this.parents().filter(function() {
++				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		} else {
++			scrollParent = this.parents().filter(function() {
++				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
++			}).eq(0);
++		}
++
++		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
++	},
++
++	zIndex: function( zIndex ) {
++		if ( zIndex !== undefined ) {
++			return this.css( "zIndex", zIndex );
++		}
++
++		if ( this.length ) {
++			var elem = $( this[ 0 ] ), position, value;
++			while ( elem.length && elem[ 0 ] !== document ) {
++				// Ignore z-index if position is set to a value where z-index is ignored by the browser
++				// This makes behavior of this function consistent across browsers
++				// WebKit always returns auto if the element is positioned
++				position = elem.css( "position" );
++				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
++					// IE returns 0 when zIndex is not specified
++					// other browsers return a string
++					// we ignore the case of nested elements with an explicit value of 0
++					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
++					value = parseInt( elem.css( "zIndex" ), 10 );
++					if ( !isNaN( value ) && value !== 0 ) {
++						return value;
++					}
++				}
++				elem = elem.parent();
++			}
++		}
++
++		return 0;
++	},
++
++	uniqueId: function() {
++		return this.each(function() {
++			if ( !this.id ) {
++				this.id = "ui-id-" + (++uuid);
++			}
++		});
++	},
++
++	removeUniqueId: function() {
++		return this.each(function() {
++			if ( runiqueId.test( this.id ) ) {
++				$( this ).removeAttr( "id" );
++			}
++		});
++	}
++});
++
++// selectors
++function focusable( element, isTabIndexNotNaN ) {
++	var map, mapName, img,
++		nodeName = element.nodeName.toLowerCase();
++	if ( "area" === nodeName ) {
++		map = element.parentNode;
++		mapName = map.name;
++		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
++			return false;
++		}
++		img = $( "img[usemap=#" + mapName + "]" )[0];
++		return !!img && visible( img );
++	}
++	return ( /input|select|textarea|button|object/.test( nodeName ) ?
++		!element.disabled :
++		"a" === nodeName ?
++			element.href || isTabIndexNotNaN :
++			isTabIndexNotNaN) &&
++		// the element and all of its ancestors must be visible
++		visible( element );
++}
++
++function visible( element ) {
++	return $.expr.filters.visible( element ) &&
++		!$( element ).parents().addBack().filter(function() {
++			return $.css( this, "visibility" ) === "hidden";
++		}).length;
++}
++
++$.extend( $.expr[ ":" ], {
++	data: $.expr.createPseudo ?
++		$.expr.createPseudo(function( dataName ) {
++			return function( elem ) {
++				return !!$.data( elem, dataName );
++			};
++		}) :
++		// support: jQuery <1.8
++		function( elem, i, match ) {
++			return !!$.data( elem, match[ 3 ] );
++		},
++
++	focusable: function( element ) {
++		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
++	},
++
++	tabbable: function( element ) {
++		var tabIndex = $.attr( element, "tabindex" ),
++			isTabIndexNaN = isNaN( tabIndex );
++		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
++	}
++});
++
++// support: jQuery <1.8
++if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
++	$.each( [ "Width", "Height" ], function( i, name ) {
++		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
++			type = name.toLowerCase(),
++			orig = {
++				innerWidth: $.fn.innerWidth,
++				innerHeight: $.fn.innerHeight,
++				outerWidth: $.fn.outerWidth,
++				outerHeight: $.fn.outerHeight
++			};
++
++		function reduce( elem, size, border, margin ) {
++			$.each( side, function() {
++				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
++				if ( border ) {
++					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
++				}
++				if ( margin ) {
++					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
++				}
++			});
++			return size;
++		}
++
++		$.fn[ "inner" + name ] = function( size ) {
++			if ( size === undefined ) {
++				return orig[ "inner" + name ].call( this );
++			}
++
++			return this.each(function() {
++				$( this ).css( type, reduce( this, size ) + "px" );
++			});
++		};
++
++		$.fn[ "outer" + name] = function( size, margin ) {
++			if ( typeof size !== "number" ) {
++				return orig[ "outer" + name ].call( this, size );
++			}
++
++			return this.each(function() {
++				$( this).css( type, reduce( this, size, true, margin ) + "px" );
++			});
++		};
++	});
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
++if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
++	$.fn.removeData = (function( removeData ) {
++		return function( key ) {
++			if ( arguments.length ) {
++				return removeData.call( this, $.camelCase( key ) );
++			} else {
++				return removeData.call( this );
++			}
++		};
++	})( $.fn.removeData );
++}
++
++
++
++
++
++// deprecated
++$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
++
++$.support.selectstart = "onselectstart" in document.createElement( "div" );
++$.fn.extend({
++	disableSelection: function() {
++		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
++			".ui-disableSelection", function( event ) {
++				event.preventDefault();
++			});
++	},
++
++	enableSelection: function() {
++		return this.unbind( ".ui-disableSelection" );
++	}
++});
++
++$.extend( $.ui, {
++	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
++	plugin: {
++		add: function( module, option, set ) {
++			var i,
++				proto = $.ui[ module ].prototype;
++			for ( i in set ) {
++				proto.plugins[ i ] = proto.plugins[ i ] || [];
++				proto.plugins[ i ].push( [ option, set[ i ] ] );
++			}
++		},
++		call: function( instance, name, args ) {
++			var i,
++				set = instance.plugins[ name ];
++			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
++				return;
++			}
++
++			for ( i = 0; i < set.length; i++ ) {
++				if ( instance.options[ set[ i ][ 0 ] ] ) {
++					set[ i ][ 1 ].apply( instance.element, args );
++				}
++			}
++		}
++	},
++
++	// only used by resizable
++	hasScroll: function( el, a ) {
++
++		//If overflow is hidden, the element might have extra content, but the user wants to hide it
++		if ( $( el ).css( "overflow" ) === "hidden") {
++			return false;
++		}
++
++		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
++			has = false;
++
++		if ( el[ scroll ] > 0 ) {
++			return true;
++		}
++
++		// TODO: determine which cases actually cause this to happen
++		// if the element doesn't have the scroll set, see if it's possible to
++		// set the scroll
++		el[ scroll ] = 1;
++		has = ( el[ scroll ] > 0 );
++		el[ scroll ] = 0;
++		return has;
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++var uuid = 0,
++	slice = Array.prototype.slice,
++	_cleanData = $.cleanData;
++$.cleanData = function( elems ) {
++	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
++		try {
++			$( elem ).triggerHandler( "remove" );
++		// http://bugs.jquery.com/ticket/8235
++		} catch( e ) {}
++	}
++	_cleanData( elems );
++};
++
++$.widget = function( name, base, prototype ) {
++	var fullName, existingConstructor, constructor, basePrototype,
++		// proxiedPrototype allows the provided prototype to remain unmodified
++		// so that it can be used as a mixin for multiple widgets (#8876)
++		proxiedPrototype = {},
++		namespace = name.split( "." )[ 0 ];
++
++	name = name.split( "." )[ 1 ];
++	fullName = namespace + "-" + name;
++
++	if ( !prototype ) {
++		prototype = base;
++		base = $.Widget;
++	}
++
++	// create selector for plugin
++	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
++		return !!$.data( elem, fullName );
++	};
++
++	$[ namespace ] = $[ namespace ] || {};
++	existingConstructor = $[ namespace ][ name ];
++	constructor = $[ namespace ][ name ] = function( options, element ) {
++		// allow instantiation without "new" keyword
++		if ( !this._createWidget ) {
++			return new constructor( options, element );
++		}
++
++		// allow instantiation without initializing for simple inheritance
++		// must use "new" keyword (the code above always passes args)
++		if ( arguments.length ) {
++			this._createWidget( options, element );
++		}
++	};
++	// extend with the existing constructor to carry over any static properties
++	$.extend( constructor, existingConstructor, {
++		version: prototype.version,
++		// copy the object used to create the prototype in case we need to
++		// redefine the widget later
++		_proto: $.extend( {}, prototype ),
++		// track widgets that inherit from this widget in case this widget is
++		// redefined after a widget inherits from it
++		_childConstructors: []
++	});
++
++	basePrototype = new base();
++	// we need to make the options hash a property directly on the new instance
++	// otherwise we'll modify the options hash on the prototype that we're
++	// inheriting from
++	basePrototype.options = $.widget.extend( {}, basePrototype.options );
++	$.each( prototype, function( prop, value ) {
++		if ( !$.isFunction( value ) ) {
++			proxiedPrototype[ prop ] = value;
++			return;
++		}
++		proxiedPrototype[ prop ] = (function() {
++			var _super = function() {
++					return base.prototype[ prop ].apply( this, arguments );
++				},
++				_superApply = function( args ) {
++					return base.prototype[ prop ].apply( this, args );
++				};
++			return function() {
++				var __super = this._super,
++					__superApply = this._superApply,
++					returnValue;
++
++				this._super = _super;
++				this._superApply = _superApply;
++
++				returnValue = value.apply( this, arguments );
++
++				this._super = __super;
++				this._superApply = __superApply;
++
++				return returnValue;
++			};
++		})();
++	});
++	constructor.prototype = $.widget.extend( basePrototype, {
++		// TODO: remove support for widgetEventPrefix
++		// always use the name + a colon as the prefix, e.g., draggable:start
++		// don't prefix for widgets that aren't DOM-based
++		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
++	}, proxiedPrototype, {
++		constructor: constructor,
++		namespace: namespace,
++		widgetName: name,
++		widgetFullName: fullName
++	});
++
++	// If this widget is being redefined then we need to find all widgets that
++	// are inheriting from it and redefine all of them so that they inherit from
++	// the new version of this widget. We're essentially trying to replace one
++	// level in the prototype chain.
++	if ( existingConstructor ) {
++		$.each( existingConstructor._childConstructors, function( i, child ) {
++			var childPrototype = child.prototype;
++
++			// redefine the child widget using the same prototype that was
++			// originally used, but inherit from the new version of the base
++			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
++		});
++		// remove the list of existing child constructors from the old constructor
++		// so the old child constructors can be garbage collected
++		delete existingConstructor._childConstructors;
++	} else {
++		base._childConstructors.push( constructor );
++	}
++
++	$.widget.bridge( name, constructor );
++};
++
++$.widget.extend = function( target ) {
++	var input = slice.call( arguments, 1 ),
++		inputIndex = 0,
++		inputLength = input.length,
++		key,
++		value;
++	for ( ; inputIndex < inputLength; inputIndex++ ) {
++		for ( key in input[ inputIndex ] ) {
++			value = input[ inputIndex ][ key ];
++			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
++				// Clone objects
++				if ( $.isPlainObject( value ) ) {
++					target[ key ] = $.isPlainObject( target[ key ] ) ?
++						$.widget.extend( {}, target[ key ], value ) :
++						// Don't extend strings, arrays, etc. with objects
++						$.widget.extend( {}, value );
++				// Copy everything else by reference
++				} else {
++					target[ key ] = value;
++				}
++			}
++		}
++	}
++	return target;
++};
++
++$.widget.bridge = function( name, object ) {
++	var fullName = object.prototype.widgetFullName || name;
++	$.fn[ name ] = function( options ) {
++		var isMethodCall = typeof options === "string",
++			args = slice.call( arguments, 1 ),
++			returnValue = this;
++
++		// allow multiple hashes to be passed on init
++		options = !isMethodCall && args.length ?
++			$.widget.extend.apply( null, [ options ].concat(args) ) :
++			options;
++
++		if ( isMethodCall ) {
++			this.each(function() {
++				var methodValue,
++					instance = $.data( this, fullName );
++				if ( !instance ) {
++					return $.error( "cannot call methods on " + name + " prior to initialization; " +
++						"attempted to call method '" + options + "'" );
++				}
++				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
++					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
++				}
++				methodValue = instance[ options ].apply( instance, args );
++				if ( methodValue !== instance && methodValue !== undefined ) {
++					returnValue = methodValue && methodValue.jquery ?
++						returnValue.pushStack( methodValue.get() ) :
++						methodValue;
++					return false;
++				}
++			});
++		} else {
++			this.each(function() {
++				var instance = $.data( this, fullName );
++				if ( instance ) {
++					instance.option( options || {} )._init();
++				} else {
++					$.data( this, fullName, new object( options, this ) );
++				}
++			});
++		}
++
++		return returnValue;
++	};
++};
++
++$.Widget = function( /* options, element */ ) {};
++$.Widget._childConstructors = [];
++
++$.Widget.prototype = {
++	widgetName: "widget",
++	widgetEventPrefix: "",
++	defaultElement: "<div>",
++	options: {
++		disabled: false,
++
++		// callbacks
++		create: null
++	},
++	_createWidget: function( options, element ) {
++		element = $( element || this.defaultElement || this )[ 0 ];
++		this.element = $( element );
++		this.uuid = uuid++;
++		this.eventNamespace = "." + this.widgetName + this.uuid;
++		this.options = $.widget.extend( {},
++			this.options,
++			this._getCreateOptions(),
++			options );
++
++		this.bindings = $();
++		this.hoverable = $();
++		this.focusable = $();
++
++		if ( element !== this ) {
++			$.data( element, this.widgetFullName, this );
++			this._on( true, this.element, {
++				remove: function( event ) {
++					if ( event.target === element ) {
++						this.destroy();
++					}
++				}
++			});
++			this.document = $( element.style ?
++				// element within the document
++				element.ownerDocument :
++				// element is window or document
++				element.document || element );
++			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
++		}
++
++		this._create();
++		this._trigger( "create", null, this._getCreateEventData() );
++		this._init();
++	},
++	_getCreateOptions: $.noop,
++	_getCreateEventData: $.noop,
++	_create: $.noop,
++	_init: $.noop,
++
++	destroy: function() {
++		this._destroy();
++		// we can probably remove the unbind calls in 2.0
++		// all event bindings should go through this._on()
++		this.element
++			.unbind( this.eventNamespace )
++			// 1.9 BC for #7810
++			// TODO remove dual storage
++			.removeData( this.widgetName )
++			.removeData( this.widgetFullName )
++			// support: jquery <1.6.3
++			// http://bugs.jquery.com/ticket/9413
++			.removeData( $.camelCase( this.widgetFullName ) );
++		this.widget()
++			.unbind( this.eventNamespace )
++			.removeAttr( "aria-disabled" )
++			.removeClass(
++				this.widgetFullName + "-disabled " +
++				"ui-state-disabled" );
++
++		// clean up events and states
++		this.bindings.unbind( this.eventNamespace );
++		this.hoverable.removeClass( "ui-state-hover" );
++		this.focusable.removeClass( "ui-state-focus" );
++	},
++	_destroy: $.noop,
++
++	widget: function() {
++		return this.element;
++	},
++
++	option: function( key, value ) {
++		var options = key,
++			parts,
++			curOption,
++			i;
++
++		if ( arguments.length === 0 ) {
++			// don't return a reference to the internal hash
++			return $.widget.extend( {}, this.options );
++		}
++
++		if ( typeof key === "string" ) {
++			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
++			options = {};
++			parts = key.split( "." );
++			key = parts.shift();
++			if ( parts.length ) {
++				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
++				for ( i = 0; i < parts.length - 1; i++ ) {
++					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
++					curOption = curOption[ parts[ i ] ];
++				}
++				key = parts.pop();
++				if ( value === undefined ) {
++					return curOption[ key ] === undefined ? null : curOption[ key ];
++				}
++				curOption[ key ] = value;
++			} else {
++				if ( value === undefined ) {
++					return this.options[ key ] === undefined ? null : this.options[ key ];
++				}
++				options[ key ] = value;
++			}
++		}
++
++		this._setOptions( options );
++
++		return this;
++	},
++	_setOptions: function( options ) {
++		var key;
++
++		for ( key in options ) {
++			this._setOption( key, options[ key ] );
++		}
++
++		return this;
++	},
++	_setOption: function( key, value ) {
++		this.options[ key ] = value;
++
++		if ( key === "disabled" ) {
++			this.widget()
++				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
++				.attr( "aria-disabled", value );
++			this.hoverable.removeClass( "ui-state-hover" );
++			this.focusable.removeClass( "ui-state-focus" );
++		}
++
++		return this;
++	},
++
++	enable: function() {
++		return this._setOption( "disabled", false );
++	},
++	disable: function() {
++		return this._setOption( "disabled", true );
++	},
++
++	_on: function( suppressDisabledCheck, element, handlers ) {
++		var delegateElement,
++			instance = this;
++
++		// no suppressDisabledCheck flag, shuffle arguments
++		if ( typeof suppressDisabledCheck !== "boolean" ) {
++			handlers = element;
++			element = suppressDisabledCheck;
++			suppressDisabledCheck = false;
++		}
++
++		// no element argument, shuffle and use this.element
++		if ( !handlers ) {
++			handlers = element;
++			element = this.element;
++			delegateElement = this.widget();
++		} else {
++			// accept selectors, DOM elements
++			element = delegateElement = $( element );
++			this.bindings = this.bindings.add( element );
++		}
++
++		$.each( handlers, function( event, handler ) {
++			function handlerProxy() {
++				// allow widgets to customize the disabled handling
++				// - disabled as an array instead of boolean
++				// - disabled class as method for disabling individual parts
++				if ( !suppressDisabledCheck &&
++						( instance.options.disabled === true ||
++							$( this ).hasClass( "ui-state-disabled" ) ) ) {
++					return;
++				}
++				return ( typeof handler === "string" ? instance[ handler ] : handler )
++					.apply( instance, arguments );
++			}
++
++			// copy the guid so direct unbinding works
++			if ( typeof handler !== "string" ) {
++				handlerProxy.guid = handler.guid =
++					handler.guid || handlerProxy.guid || $.guid++;
++			}
++
++			var match = event.match( /^(\w+)\s*(.*)$/ ),
++				eventName = match[1] + instance.eventNamespace,
++				selector = match[2];
++			if ( selector ) {
++				delegateElement.delegate( selector, eventName, handlerProxy );
++			} else {
++				element.bind( eventName, handlerProxy );
++			}
++		});
++	},
++
++	_off: function( element, eventName ) {
++		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
++		element.unbind( eventName ).undelegate( eventName );
++	},
++
++	_delay: function( handler, delay ) {
++		function handlerProxy() {
++			return ( typeof handler === "string" ? instance[ handler ] : handler )
++				.apply( instance, arguments );
++		}
++		var instance = this;
++		return setTimeout( handlerProxy, delay || 0 );
++	},
++
++	_hoverable: function( element ) {
++		this.hoverable = this.hoverable.add( element );
++		this._on( element, {
++			mouseenter: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-hover" );
++			},
++			mouseleave: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-hover" );
++			}
++		});
++	},
++
++	_focusable: function( element ) {
++		this.focusable = this.focusable.add( element );
++		this._on( element, {
++			focusin: function( event ) {
++				$( event.currentTarget ).addClass( "ui-state-focus" );
++			},
++			focusout: function( event ) {
++				$( event.currentTarget ).removeClass( "ui-state-focus" );
++			}
++		});
++	},
++
++	_trigger: function( type, event, data ) {
++		var prop, orig,
++			callback = this.options[ type ];
++
++		data = data || {};
++		event = $.Event( event );
++		event.type = ( type === this.widgetEventPrefix ?
++			type :
++			this.widgetEventPrefix + type ).toLowerCase();
++		// the original event may come from any element
++		// so we need to reset the target on the new event
++		event.target = this.element[ 0 ];
++
++		// copy original event properties over to the new event
++		orig = event.originalEvent;
++		if ( orig ) {
++			for ( prop in orig ) {
++				if ( !( prop in event ) ) {
++					event[ prop ] = orig[ prop ];
++				}
++			}
++		}
++
++		this.element.trigger( event, data );
++		return !( $.isFunction( callback ) &&
++			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
++			event.isDefaultPrevented() );
++	}
++};
++
++$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
++	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
++		if ( typeof options === "string" ) {
++			options = { effect: options };
++		}
++		var hasOptions,
++			effectName = !options ?
++				method :
++				options === true || typeof options === "number" ?
++					defaultEffect :
++					options.effect || defaultEffect;
++		options = options || {};
++		if ( typeof options === "number" ) {
++			options = { duration: options };
++		}
++		hasOptions = !$.isEmptyObject( options );
++		options.complete = callback;
++		if ( options.delay ) {
++			element.delay( options.delay );
++		}
++		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
++			element[ method ]( options );
++		} else if ( effectName !== method && element[ effectName ] ) {
++			element[ effectName ]( options.duration, options.easing, callback );
++		} else {
++			element.queue(function( next ) {
++				$( this )[ method ]();
++				if ( callback ) {
++					callback.call( element[ 0 ] );
++				}
++				next();
++			});
++		}
++	};
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++var mouseHandled = false;
++$( document ).mouseup( function() {
++	mouseHandled = false;
++});
++
++$.widget("ui.mouse", {
++	version: "1.10.3",
++	options: {
++		cancel: "input,textarea,button,select,option",
++		distance: 1,
++		delay: 0
++	},
++	_mouseInit: function() {
++		var that = this;
++
++		this.element
++			.bind("mousedown."+this.widgetName, function(event) {
++				return that._mouseDown(event);
++			})
++			.bind("click."+this.widgetName, function(event) {
++				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
++					$.removeData(event.target, that.widgetName + ".preventClickEvent");
++					event.stopImmediatePropagation();
++					return false;
++				}
++			});
++
++		this.started = false;
++	},
++
++	// TODO: make sure destroying one instance of mouse doesn't mess with
++	// other instances of mouse
++	_mouseDestroy: function() {
++		this.element.unbind("."+this.widgetName);
++		if ( this._mouseMoveDelegate ) {
++			$(document)
++				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++		}
++	},
++
++	_mouseDown: function(event) {
++		// don't let more than one widget handle mouseStart
++		if( mouseHandled ) { return; }
++
++		// we may have missed mouseup (out of window)
++		(this._mouseStarted && this._mouseUp(event));
++
++		this._mouseDownEvent = event;
++
++		var that = this,
++			btnIsLeft = (event.which === 1),
++			// event.target.nodeName works around a bug in IE 8 with
++			// disabled inputs (#7620)
++			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
++		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
++			return true;
++		}
++
++		this.mouseDelayMet = !this.options.delay;
++		if (!this.mouseDelayMet) {
++			this._mouseDelayTimer = setTimeout(function() {
++				that.mouseDelayMet = true;
++			}, this.options.delay);
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted = (this._mouseStart(event) !== false);
++			if (!this._mouseStarted) {
++				event.preventDefault();
++				return true;
++			}
++		}
++
++		// Click event may never have fired (Gecko & Opera)
++		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
++			$.removeData(event.target, this.widgetName + ".preventClickEvent");
++		}
++
++		// these delegates are required to keep context
++		this._mouseMoveDelegate = function(event) {
++			return that._mouseMove(event);
++		};
++		this._mouseUpDelegate = function(event) {
++			return that._mouseUp(event);
++		};
++		$(document)
++			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		event.preventDefault();
++
++		mouseHandled = true;
++		return true;
++	},
++
++	_mouseMove: function(event) {
++		// IE mouseup check - mouseup happened when mouse was out of window
++		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
++			return this._mouseUp(event);
++		}
++
++		if (this._mouseStarted) {
++			this._mouseDrag(event);
++			return event.preventDefault();
++		}
++
++		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
++			this._mouseStarted =
++				(this._mouseStart(this._mouseDownEvent, event) !== false);
++			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
++		}
++
++		return !this._mouseStarted;
++	},
++
++	_mouseUp: function(event) {
++		$(document)
++			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
++			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
++
++		if (this._mouseStarted) {
++			this._mouseStarted = false;
++
++			if (event.target === this._mouseDownEvent.target) {
++				$.data(event.target, this.widgetName + ".preventClickEvent", true);
++			}
++
++			this._mouseStop(event);
++		}
++
++		return false;
++	},
++
++	_mouseDistanceMet: function(event) {
++		return (Math.max(
++				Math.abs(this._mouseDownEvent.pageX - event.pageX),
++				Math.abs(this._mouseDownEvent.pageY - event.pageY)
++			) >= this.options.distance
++		);
++	},
++
++	_mouseDelayMet: function(/* event */) {
++		return this.mouseDelayMet;
++	},
++
++	// These are placeholder methods, to be overriden by extending plugin
++	_mouseStart: function(/* event */) {},
++	_mouseDrag: function(/* event */) {},
++	_mouseStop: function(/* event */) {},
++	_mouseCapture: function(/* event */) { return true; }
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.ui = $.ui || {};
++
++var cachedScrollbarWidth,
++	max = Math.max,
++	abs = Math.abs,
++	round = Math.round,
++	rhorizontal = /left|center|right/,
++	rvertical = /top|center|bottom/,
++	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
++	rposition = /^\w+/,
++	rpercent = /%$/,
++	_position = $.fn.position;
++
++function getOffsets( offsets, width, height ) {
++	return [
++		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
++		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
++	];
++}
++
++function parseCss( element, property ) {
++	return parseInt( $.css( element, property ), 10 ) || 0;
++}
++
++function getDimensions( elem ) {
++	var raw = elem[0];
++	if ( raw.nodeType === 9 ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: 0, left: 0 }
++		};
++	}
++	if ( $.isWindow( raw ) ) {
++		return {
++			width: elem.width(),
++			height: elem.height(),
++			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
++		};
++	}
++	if ( raw.preventDefault ) {
++		return {
++			width: 0,
++			height: 0,
++			offset: { top: raw.pageY, left: raw.pageX }
++		};
++	}
++	return {
++		width: elem.outerWidth(),
++		height: elem.outerHeight(),
++		offset: elem.offset()
++	};
++}
++
++$.position = {
++	scrollbarWidth: function() {
++		if ( cachedScrollbarWidth !== undefined ) {
++			return cachedScrollbarWidth;
++		}
++		var w1, w2,
++			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
++			innerDiv = div.children()[0];
++
++		$( "body" ).append( div );
++		w1 = innerDiv.offsetWidth;
++		div.css( "overflow", "scroll" );
++
++		w2 = innerDiv.offsetWidth;
++
++		if ( w1 === w2 ) {
++			w2 = div[0].clientWidth;
++		}
++
++		div.remove();
++
++		return (cachedScrollbarWidth = w1 - w2);
++	},
++	getScrollInfo: function( within ) {
++		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
++			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
++			hasOverflowX = overflowX === "scroll" ||
++				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
++			hasOverflowY = overflowY === "scroll" ||
++				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
++		return {
++			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
++			height: hasOverflowX ? $.position.scrollbarWidth() : 0
++		};
++	},
++	getWithinInfo: function( element ) {
++		var withinElement = $( element || window ),
++			isWindow = $.isWindow( withinElement[0] );
++		return {
++			element: withinElement,
++			isWindow: isWindow,
++			offset: withinElement.offset() || { left: 0, top: 0 },
++			scrollLeft: withinElement.scrollLeft(),
++			scrollTop: withinElement.scrollTop(),
++			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
++			height: isWindow ? withinElement.height() : withinElement.outerHeight()
++		};
++	}
++};
++
++$.fn.position = function( options ) {
++	if ( !options || !options.of ) {
++		return _position.apply( this, arguments );
++	}
++
++	// make a copy, we don't want to modify arguments
++	options = $.extend( {}, options );
++
++	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
++		target = $( options.of ),
++		within = $.position.getWithinInfo( options.within ),
++		scrollInfo = $.position.getScrollInfo( within ),
++		collision = ( options.collision || "flip" ).split( " " ),
++		offsets = {};
++
++	dimensions = getDimensions( target );
++	if ( target[0].preventDefault ) {
++		// force left top to allow flipping
++		options.at = "left top";
++	}
++	targetWidth = dimensions.width;
++	targetHeight = dimensions.height;
++	targetOffset = dimensions.offset;
++	// clone to reuse original targetOffset later
++	basePosition = $.extend( {}, targetOffset );
++
++	// force my and at to have valid horizontal and vertical positions
++	// if a value is missing or invalid, it will be converted to center
++	$.each( [ "my", "at" ], function() {
++		var pos = ( options[ this ] || "" ).split( " " ),
++			horizontalOffset,
++			verticalOffset;
++
++		if ( pos.length === 1) {
++			pos = rhorizontal.test( pos[ 0 ] ) ?
++				pos.concat( [ "center" ] ) :
++				rvertical.test( pos[ 0 ] ) ?
++					[ "center" ].concat( pos ) :
++					[ "center", "center" ];
++		}
++		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
++		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
++
++		// calculate offsets
++		horizontalOffset = roffset.exec( pos[ 0 ] );
++		verticalOffset = roffset.exec( pos[ 1 ] );
++		offsets[ this ] = [
++			horizontalOffset ? horizontalOffset[ 0 ] : 0,
++			verticalOffset ? verticalOffset[ 0 ] : 0
++		];
++
++		// reduce to just the positions without the offsets
++		options[ this ] = [
++			rposition.exec( pos[ 0 ] )[ 0 ],
++			rposition.exec( pos[ 1 ] )[ 0 ]
++		];
++	});
++
++	// normalize collision option
++	if ( collision.length === 1 ) {
++		collision[ 1 ] = collision[ 0 ];
++	}
++
++	if ( options.at[ 0 ] === "right" ) {
++		basePosition.left += targetWidth;
++	} else if ( options.at[ 0 ] === "center" ) {
++		basePosition.left += targetWidth / 2;
++	}
++
++	if ( options.at[ 1 ] === "bottom" ) {
++		basePosition.top += targetHeight;
++	} else if ( options.at[ 1 ] === "center" ) {
++		basePosition.top += targetHeight / 2;
++	}
++
++	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
++	basePosition.left += atOffset[ 0 ];
++	basePosition.top += atOffset[ 1 ];
++
++	return this.each(function() {
++		var collisionPosition, using,
++			elem = $( this ),
++			elemWidth = elem.outerWidth(),
++			elemHeight = elem.outerHeight(),
++			marginLeft = parseCss( this, "marginLeft" ),
++			marginTop = parseCss( this, "marginTop" ),
++			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
++			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
++			position = $.extend( {}, basePosition ),
++			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
++
++		if ( options.my[ 0 ] === "right" ) {
++			position.left -= elemWidth;
++		} else if ( options.my[ 0 ] === "center" ) {
++			position.left -= elemWidth / 2;
++		}
++
++		if ( options.my[ 1 ] === "bottom" ) {
++			position.top -= elemHeight;
++		} else if ( options.my[ 1 ] === "center" ) {
++			position.top -= elemHeight / 2;
++		}
++
++		position.left += myOffset[ 0 ];
++		position.top += myOffset[ 1 ];
++
++		// if the browser doesn't support fractions, then round for consistent results
++		if ( !$.support.offsetFractions ) {
++			position.left = round( position.left );
++			position.top = round( position.top );
++		}
++
++		collisionPosition = {
++			marginLeft: marginLeft,
++			marginTop: marginTop
++		};
++
++		$.each( [ "left", "top" ], function( i, dir ) {
++			if ( $.ui.position[ collision[ i ] ] ) {
++				$.ui.position[ collision[ i ] ][ dir ]( position, {
++					targetWidth: targetWidth,
++					targetHeight: targetHeight,
++					elemWidth: elemWidth,
++					elemHeight: elemHeight,
++					collisionPosition: collisionPosition,
++					collisionWidth: collisionWidth,
++					collisionHeight: collisionHeight,
++					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
++					my: options.my,
++					at: options.at,
++					within: within,
++					elem : elem
++				});
++			}
++		});
++
++		if ( options.using ) {
++			// adds feedback as second argument to using callback, if present
++			using = function( props ) {
++				var left = targetOffset.left - position.left,
++					right = left + targetWidth - elemWidth,
++					top = targetOffset.top - position.top,
++					bottom = top + targetHeight - elemHeight,
++					feedback = {
++						target: {
++							element: target,
++							left: targetOffset.left,
++							top: targetOffset.top,
++							width: targetWidth,
++							height: targetHeight
++						},
++						element: {
++							element: elem,
++							left: position.left,
++							top: position.top,
++							width: elemWidth,
++							height: elemHeight
++						},
++						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
++						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
++					};
++				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
++					feedback.horizontal = "center";
++				}
++				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
++					feedback.vertical = "middle";
++				}
++				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
++					feedback.important = "horizontal";
++				} else {
++					feedback.important = "vertical";
++				}
++				options.using.call( this, props, feedback );
++			};
++		}
++
++		elem.offset( $.extend( position, { using: using } ) );
++	});
++};
++
++$.ui.position = {
++	fit: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
++				outerWidth = within.width,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = withinOffset - collisionPosLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
++				newOverRight;
++
++			// element is wider than within
++			if ( data.collisionWidth > outerWidth ) {
++				// element is initially over the left side of within
++				if ( overLeft > 0 && overRight <= 0 ) {
++					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
++					position.left += overLeft - newOverRight;
++				// element is initially over right side of within
++				} else if ( overRight > 0 && overLeft <= 0 ) {
++					position.left = withinOffset;
++				// element is initially over both left and right sides of within
++				} else {
++					if ( overLeft > overRight ) {
++						position.left = withinOffset + outerWidth - data.collisionWidth;
++					} else {
++						position.left = withinOffset;
++					}
++				}
++			// too far left -> align with left edge
++			} else if ( overLeft > 0 ) {
++				position.left += overLeft;
++			// too far right -> align with right edge
++			} else if ( overRight > 0 ) {
++				position.left -= overRight;
++			// adjust based on position and margin
++			} else {
++				position.left = max( position.left - collisionPosLeft, position.left );
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
++				outerHeight = data.within.height,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = withinOffset - collisionPosTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
++				newOverBottom;
++
++			// element is taller than within
++			if ( data.collisionHeight > outerHeight ) {
++				// element is initially over the top of within
++				if ( overTop > 0 && overBottom <= 0 ) {
++					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
++					position.top += overTop - newOverBottom;
++				// element is initially over bottom of within
++				} else if ( overBottom > 0 && overTop <= 0 ) {
++					position.top = withinOffset;
++				// element is initially over both top and bottom of within
++				} else {
++					if ( overTop > overBottom ) {
++						position.top = withinOffset + outerHeight - data.collisionHeight;
++					} else {
++						position.top = withinOffset;
++					}
++				}
++			// too far up -> align with top
++			} else if ( overTop > 0 ) {
++				position.top += overTop;
++			// too far down -> align with bottom edge
++			} else if ( overBottom > 0 ) {
++				position.top -= overBottom;
++			// adjust based on position and margin
++			} else {
++				position.top = max( position.top - collisionPosTop, position.top );
++			}
++		}
++	},
++	flip: {
++		left: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.left + within.scrollLeft,
++				outerWidth = within.width,
++				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
++				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
++				overLeft = collisionPosLeft - offsetLeft,
++				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
++				myOffset = data.my[ 0 ] === "left" ?
++					-data.elemWidth :
++					data.my[ 0 ] === "right" ?
++						data.elemWidth :
++						0,
++				atOffset = data.at[ 0 ] === "left" ?
++					data.targetWidth :
++					data.at[ 0 ] === "right" ?
++						-data.targetWidth :
++						0,
++				offset = -2 * data.offset[ 0 ],
++				newOverRight,
++				newOverLeft;
++
++			if ( overLeft < 0 ) {
++				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
++				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overRight > 0 ) {
++				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
++				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
++					position.left += myOffset + atOffset + offset;
++				}
++			}
++		},
++		top: function( position, data ) {
++			var within = data.within,
++				withinOffset = within.offset.top + within.scrollTop,
++				outerHeight = within.height,
++				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
++				collisionPosTop = position.top - data.collisionPosition.marginTop,
++				overTop = collisionPosTop - offsetTop,
++				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
++				top = data.my[ 1 ] === "top",
++				myOffset = top ?
++					-data.elemHeight :
++					data.my[ 1 ] === "bottom" ?
++						data.elemHeight :
++						0,
++				atOffset = data.at[ 1 ] === "top" ?
++					data.targetHeight :
++					data.at[ 1 ] === "bottom" ?
++						-data.targetHeight :
++						0,
++				offset = -2 * data.offset[ 1 ],
++				newOverTop,
++				newOverBottom;
++			if ( overTop < 0 ) {
++				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
++				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++			else if ( overBottom > 0 ) {
++				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
++				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
++					position.top += myOffset + atOffset + offset;
++				}
++			}
++		}
++	},
++	flipfit: {
++		left: function() {
++			$.ui.position.flip.left.apply( this, arguments );
++			$.ui.position.fit.left.apply( this, arguments );
++		},
++		top: function() {
++			$.ui.position.flip.top.apply( this, arguments );
++			$.ui.position.fit.top.apply( this, arguments );
++		}
++	}
++};
++
++// fraction support test
++(function () {
++	var testElement, testElementParent, testElementStyle, offsetLeft, i,
++		body = document.getElementsByTagName( "body" )[ 0 ],
++		div = document.createElement( "div" );
++
++	//Create a "fake body" for testing based on method used in jQuery.support
++	testElement = document.createElement( body ? "div" : "body" );
++	testElementStyle = {
++		visibility: "hidden",
++		width: 0,
++		height: 0,
++		border: 0,
++		margin: 0,
++		background: "none"
++	};
++	if ( body ) {
++		$.extend( testElementStyle, {
++			position: "absolute",
++			left: "-1000px",
++			top: "-1000px"
++		});
++	}
++	for ( i in testElementStyle ) {
++		testElement.style[ i ] = testElementStyle[ i ];
++	}
++	testElement.appendChild( div );
++	testElementParent = body || document.documentElement;
++	testElementParent.insertBefore( testElement, testElementParent.firstChild );
++
++	div.style.cssText = "position: absolute; left: 10.7432222px;";
++
++	offsetLeft = $( div ).offset().left;
++	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
++
++	testElement.innerHTML = "";
++	testElementParent.removeChild( testElement );
++})();
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.widget("ui.draggable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "drag",
++	options: {
++		addClasses: true,
++		appendTo: "parent",
++		axis: false,
++		connectToSortable: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		iframeFix: false,
++		opacity: false,
++		refreshPositions: false,
++		revert: false,
++		revertDuration: 500,
++		scope: "default",
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		snap: false,
++		snapMode: "both",
++		snapTolerance: 20,
++		stack: false,
++		zIndex: false,
++
++		// callbacks
++		drag: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
++			this.element[0].style.position = "relative";
++		}
++		if (this.options.addClasses){
++			this.element.addClass("ui-draggable");
++		}
++		if (this.options.disabled){
++			this.element.addClass("ui-draggable-disabled");
++		}
++
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function(event) {
++
++		var o = this.options;
++
++		// among others, prevent a drag on a resizable-handle
++		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
++			return false;
++		}
++
++		//Quit if we're not on a valid handle
++		this.handle = this._getHandle(event);
++		if (!this.handle) {
++			return false;
++		}
++
++		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
++			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
++			.css({
++				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
++				position: "absolute", opacity: "0.001", zIndex: 1000
++			})
++			.css($(this).offset())
++			.appendTo("body");
++		});
++
++		return true;
++
++	},
++
++	_mouseStart: function(event) {
++
++		var o = this.options;
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		this.helper.addClass("ui-draggable-dragging");
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		//If ddmanager is used for droppables, set the global draggable
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Store the helper's css position
++		this.cssPosition = this.helper.css( "position" );
++		this.scrollParent = this.helper.scrollParent();
++		this.offsetParent = this.helper.offsetParent();
++		this.offsetParentCssPosition = this.offsetParent.css( "position" );
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.positionAbs = this.element.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		//Reset scroll cache
++		this.offset.scroll = false;
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		//Generate the original position
++		this.originalPosition = this.position = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Set a containment if given in the options
++		this._setContainment();
++
++		//Trigger event + callbacks
++		if(this._trigger("start", event) === false) {
++			this._clear();
++			return false;
++		}
++
++		//Recache the helper size
++		this._cacheHelperProportions();
++
++		//Prepare the droppable offsets
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++
++		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
++		if ( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStart(this, event);
++		}
++
++		return true;
++	},
++
++	_mouseDrag: function(event, noPropagation) {
++		// reset any necessary cached properties (see #5009)
++		if ( this.offsetParentCssPosition === "fixed" ) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Call plugins and callbacks and use the resulting position if something is returned
++		if (!noPropagation) {
++			var ui = this._uiHash();
++			if(this._trigger("drag", event, ui) === false) {
++				this._mouseUp({});
++				return false;
++			}
++			this.position = ui.position;
++		}
++
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		//If we are using droppables, inform the manager about the drop
++		var that = this,
++			dropped = false;
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			dropped = $.ui.ddmanager.drop(this, event);
++		}
++
++		//if a drop comes from outside (a sortable)
++		if(this.dropped) {
++			dropped = this.dropped;
++			this.dropped = false;
++		}
++
++		//if the original element is no longer in the DOM don't bother to continue (see #8269)
++		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
++			return false;
++		}
++
++		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
++			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
++				if(that._trigger("stop", event) !== false) {
++					that._clear();
++				}
++			});
++		} else {
++			if(this._trigger("stop", event) !== false) {
++				this._clear();
++			}
++		}
++
++		return false;
++	},
++
++	_mouseUp: function(event) {
++		//Remove frame helpers
++		$("div.ui-draggable-iframeFix").each(function() {
++			this.parentNode.removeChild(this);
++		});
++
++		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
++		if( $.ui.ddmanager ) {
++			$.ui.ddmanager.dragStop(this, event);
++		}
++
++		return $.ui.mouse.prototype._mouseUp.call(this, event);
++	},
++
++	cancel: function() {
++
++		if(this.helper.is(".ui-draggable-dragging")) {
++			this._mouseUp({});
++		} else {
++			this._clear();
++		}
++
++		return this;
++
++	},
++
++	_getHandle: function(event) {
++		return this.options.handle ?
++			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
++			true;
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
++
++		if(!helper.parents("body").length) {
++			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
++		}
++
++		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
++			helper.css("position", "absolute");
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++		//Get the offsetParent and cache its position
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		//This needs to be actually done for all browsers, since pageX/pageY includes this information
++		//Ugly IE fix
++		if((this.offsetParent[0] === document.body) ||
++			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.element.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.element.css("marginLeft"),10) || 0),
++			top: (parseInt(this.element.css("marginTop"),10) || 0),
++			right: (parseInt(this.element.css("marginRight"),10) || 0),
++			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var over, c, ce,
++			o = this.options;
++
++		if ( !o.containment ) {
++			this.containment = null;
++			return;
++		}
++
++		if ( o.containment === "window" ) {
++			this.containment = [
++				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
++				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
++				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
++				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment === "document") {
++			this.containment = [
++				0,
++				0,
++				$( document ).width() - this.helperProportions.width - this.margins.left,
++				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
++			];
++			return;
++		}
++
++		if ( o.containment.constructor === Array ) {
++			this.containment = o.containment;
++			return;
++		}
++
++		if ( o.containment === "parent" ) {
++			o.containment = this.helper[ 0 ].parentNode;
++		}
++
++		c = $( o.containment );
++		ce = c[ 0 ];
++
++		if( !ce ) {
++			return;
++		}
++
++		over = c.css( "overflow" ) !== "hidden";
++
++		this.containment = [
++			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
++			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
++			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
++			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
++		];
++		this.relative_container = c;
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var containment, co, top, left,
++			o = this.options,
++			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
++			pageX = event.pageX,
++			pageY = event.pageY;
++
++		//Cache the scroll
++		if (!this.offset.scroll) {
++			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		// If we are not dragging yet, we won't check for options
++		if ( this.originalPosition ) {
++			if ( this.containment ) {
++				if ( this.relative_container ){
++					co = this.relative_container.offset();
++					containment = [
++						this.containment[ 0 ] + co.left,
++						this.containment[ 1 ] + co.top,
++						this.containment[ 2 ] + co.left,
++						this.containment[ 3 ] + co.top
++					];
++				}
++				else {
++					containment = this.containment;
++				}
++
++				if(event.pageX - this.offset.click.left < containment[0]) {
++					pageX = containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < containment[1]) {
++					pageY = containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > containment[2]) {
++					pageX = containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > containment[3]) {
++					pageY = containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
++				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
++				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
++				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																	// The absolute mouse position
++				this.offset.click.top	-												// Click offset (relative to the element)
++				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
++			),
++			left: (
++				pageX -																	// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
++			)
++		};
++
++	},
++
++	_clear: function() {
++		this.helper.removeClass("ui-draggable-dragging");
++		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
++			this.helper.remove();
++		}
++		this.helper = null;
++		this.cancelHelperRemoval = false;
++	},
++
++	// From now on bulk stuff - mainly helpers
++
++	_trigger: function(type, event, ui) {
++		ui = ui || this._uiHash();
++		$.ui.plugin.call(this, type, [event, ui]);
++		//The absolute position has to be recalculated after plugins
++		if(type === "drag") {
++			this.positionAbs = this._convertPositionTo("absolute");
++		}
++		return $.Widget.prototype._trigger.call(this, type, event, ui);
++	},
++
++	plugins: {},
++
++	_uiHash: function() {
++		return {
++			helper: this.helper,
++			position: this.position,
++			originalPosition: this.originalPosition,
++			offset: this.positionAbs
++		};
++	}
++
++});
++
++$.ui.plugin.add("draggable", "connectToSortable", {
++	start: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), o = inst.options,
++			uiSortable = $.extend({}, ui, { item: inst.element });
++		inst.sortables = [];
++		$(o.connectToSortable).each(function() {
++			var sortable = $.data(this, "ui-sortable");
++			if (sortable && !sortable.options.disabled) {
++				inst.sortables.push({
++					instance: sortable,
++					shouldRevert: sortable.options.revert
++				});
++				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
++				sortable._trigger("activate", event, uiSortable);
++			}
++		});
++
++	},
++	stop: function(event, ui) {
++
++		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
++		var inst = $(this).data("ui-draggable"),
++			uiSortable = $.extend({}, ui, { item: inst.element });
++
++		$.each(inst.sortables, function() {
++			if(this.instance.isOver) {
++
++				this.instance.isOver = 0;
++
++				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
++				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
++
++				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
++				if(this.shouldRevert) {
++					this.instance.options.revert = this.shouldRevert;
++				}
++
++				//Trigger the stop of the sortable
++				this.instance._mouseStop(event);
++
++				this.instance.options.helper = this.instance.options._helper;
++
++				//If the helper has been the original item, restore properties in the sortable
++				if(inst.options.helper === "original") {
++					this.instance.currentItem.css({ top: "auto", left: "auto" });
++				}
++
++			} else {
++				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
++				this.instance._trigger("deactivate", event, uiSortable);
++			}
++
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var inst = $(this).data("ui-draggable"), that = this;
++
++		$.each(inst.sortables, function() {
++
++			var innermostIntersecting = false,
++				thisSortable = this;
++
++			//Copy over some variables to allow calling the sortable's native _intersectsWith
++			this.instance.positionAbs = inst.positionAbs;
++			this.instance.helperProportions = inst.helperProportions;
++			this.instance.offset.click = inst.offset.click;
++
++			if(this.instance._intersectsWith(this.instance.containerCache)) {
++				innermostIntersecting = true;
++				$.each(inst.sortables, function () {
++					this.instance.positionAbs = inst.positionAbs;
++					this.instance.helperProportions = inst.helperProportions;
++					this.instance.offset.click = inst.offset.click;
++					if (this !== thisSortable &&
++						this.instance._intersectsWith(this.instance.containerCache) &&
++						$.contains(thisSortable.instance.element[0], this.instance.element[0])
++					) {
++						innermostIntersecting = false;
++					}
++					return innermostIntersecting;
++				});
++			}
++
++
++			if(innermostIntersecting) {
++				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
++				if(!this.instance.isOver) {
++
++					this.instance.isOver = 1;
++					//Now we fake the start of dragging for the sortable instance,
++					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
++					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
++					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
++					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
++					this.instance.options.helper = function() { return ui.helper[0]; };
++
++					event.target = this.instance.currentItem[0];
++					this.instance._mouseCapture(event, true);
++					this.instance._mouseStart(event, true, true);
++
++					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
++					this.instance.offset.click.top = inst.offset.click.top;
++					this.instance.offset.click.left = inst.offset.click.left;
++					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
++					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
++
++					inst._trigger("toSortable", event);
++					inst.dropped = this.instance.element; //draggable revert needs that
++					//hack so receive/update callbacks work (mostly)
++					inst.currentItem = inst.element;
++					this.instance.fromOutside = inst;
++
++				}
++
++				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
++				if(this.instance.currentItem) {
++					this.instance._mouseDrag(event);
++				}
++
++			} else {
++
++				//If it doesn't intersect with the sortable, and it intersected before,
++				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
++				if(this.instance.isOver) {
++
++					this.instance.isOver = 0;
++					this.instance.cancelHelperRemoval = true;
++
++					//Prevent reverting on this forced stop
++					this.instance.options.revert = false;
++
++					// The out event needs to be triggered independently
++					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
++
++					this.instance._mouseStop(event, true);
++					this.instance.options.helper = this.instance.options._helper;
++
++					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
++					this.instance.currentItem.remove();
++					if(this.instance.placeholder) {
++						this.instance.placeholder.remove();
++					}
++
++					inst._trigger("fromSortable", event);
++					inst.dropped = false; //draggable revert needs that
++				}
++
++			}
++
++		});
++
++	}
++});
++
++$.ui.plugin.add("draggable", "cursor", {
++	start: function() {
++		var t = $("body"), o = $(this).data("ui-draggable").options;
++		if (t.css("cursor")) {
++			o._cursor = t.css("cursor");
++		}
++		t.css("cursor", o.cursor);
++	},
++	stop: function() {
++		var o = $(this).data("ui-draggable").options;
++		if (o._cursor) {
++			$("body").css("cursor", o._cursor);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "opacity", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("opacity")) {
++			o._opacity = t.css("opacity");
++		}
++		t.css("opacity", o.opacity);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._opacity) {
++			$(ui.helper).css("opacity", o._opacity);
++		}
++	}
++});
++
++$.ui.plugin.add("draggable", "scroll", {
++	start: function() {
++		var i = $(this).data("ui-draggable");
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++			i.overflowOffset = i.scrollParent.offset();
++		}
++	},
++	drag: function( event ) {
++
++		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
++
++		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
++
++			if(!o.axis || o.axis !== "x") {
++				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
++					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
++					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++			}
++
++		} else {
++
++			if(!o.axis || o.axis !== "x") {
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++			}
++
++			if(!o.axis || o.axis !== "y") {
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++			}
++
++		}
++
++		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(i, event);
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "snap", {
++	start: function() {
++
++		var i = $(this).data("ui-draggable"),
++			o = i.options;
++
++		i.snapElements = [];
++
++		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
++			var $t = $(this),
++				$o = $t.offset();
++			if(this !== i.element[0]) {
++				i.snapElements.push({
++					item: this,
++					width: $t.outerWidth(), height: $t.outerHeight(),
++					top: $o.top, left: $o.left
++				});
++			}
++		});
++
++	},
++	drag: function(event, ui) {
++
++		var ts, bs, ls, rs, l, r, t, b, i, first,
++			inst = $(this).data("ui-draggable"),
++			o = inst.options,
++			d = o.snapTolerance,
++			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
++			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
++
++		for (i = inst.snapElements.length - 1; i >= 0; i--){
++
++			l = inst.snapElements[i].left;
++			r = l + inst.snapElements[i].width;
++			t = inst.snapElements[i].top;
++			b = t + inst.snapElements[i].height;
++
++			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
++				if(inst.snapElements[i].snapping) {
++					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++				}
++				inst.snapElements[i].snapping = false;
++				continue;
++			}
++
++			if(o.snapMode !== "inner") {
++				ts = Math.abs(t - y2) <= d;
++				bs = Math.abs(b - y1) <= d;
++				ls = Math.abs(l - x2) <= d;
++				rs = Math.abs(r - x1) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
++				}
++			}
++
++			first = (ts || bs || ls || rs);
++
++			if(o.snapMode !== "outer") {
++				ts = Math.abs(t - y1) <= d;
++				bs = Math.abs(b - y2) <= d;
++				ls = Math.abs(l - x1) <= d;
++				rs = Math.abs(r - x2) <= d;
++				if(ts) {
++					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
++				}
++				if(bs) {
++					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
++				}
++				if(ls) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
++				}
++				if(rs) {
++					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
++				}
++			}
++
++			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
++				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
++			}
++			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
++
++		}
++
++	}
++});
++
++$.ui.plugin.add("draggable", "stack", {
++	start: function() {
++		var min,
++			o = this.data("ui-draggable").options,
++			group = $.makeArray($(o.stack)).sort(function(a,b) {
++				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
++			});
++
++		if (!group.length) { return; }
++
++		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
++		$(group).each(function(i) {
++			$(this).css("zIndex", min + i);
++		});
++		this.css("zIndex", (min + group.length));
++	}
++});
++
++$.ui.plugin.add("draggable", "zIndex", {
++	start: function(event, ui) {
++		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
++		if(t.css("zIndex")) {
++			o._zIndex = t.css("zIndex");
++		}
++		t.css("zIndex", o.zIndex);
++	},
++	stop: function(event, ui) {
++		var o = $(this).data("ui-draggable").options;
++		if(o._zIndex) {
++			$(ui.helper).css("zIndex", o._zIndex);
++		}
++	}
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++$.widget("ui.droppable", {
++	version: "1.10.3",
++	widgetEventPrefix: "drop",
++	options: {
++		accept: "*",
++		activeClass: false,
++		addClasses: true,
++		greedy: false,
++		hoverClass: false,
++		scope: "default",
++		tolerance: "intersect",
++
++		// callbacks
++		activate: null,
++		deactivate: null,
++		drop: null,
++		out: null,
++		over: null
++	},
++	_create: function() {
++
++		var o = this.options,
++			accept = o.accept;
++
++		this.isover = false;
++		this.isout = true;
++
++		this.accept = $.isFunction(accept) ? accept : function(d) {
++			return d.is(accept);
++		};
++
++		//Store the droppable's proportions
++		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
++
++		// Add the reference and positions to the manager
++		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
++		$.ui.ddmanager.droppables[o.scope].push(this);
++
++		(o.addClasses && this.element.addClass("ui-droppable"));
++
++	},
++
++	_destroy: function() {
++		var i = 0,
++			drop = $.ui.ddmanager.droppables[this.options.scope];
++
++		for ( ; i < drop.length; i++ ) {
++			if ( drop[i] === this ) {
++				drop.splice(i, 1);
++			}
++		}
++
++		this.element.removeClass("ui-droppable ui-droppable-disabled");
++	},
++
++	_setOption: function(key, value) {
++
++		if(key === "accept") {
++			this.accept = $.isFunction(value) ? value : function(d) {
++				return d.is(value);
++			};
++		}
++		$.Widget.prototype._setOption.apply(this, arguments);
++	},
++
++	_activate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.addClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("activate", event, this.ui(draggable));
++		}
++	},
++
++	_deactivate: function(event) {
++		var draggable = $.ui.ddmanager.current;
++		if(this.options.activeClass) {
++			this.element.removeClass(this.options.activeClass);
++		}
++		if(draggable){
++			this._trigger("deactivate", event, this.ui(draggable));
++		}
++	},
++
++	_over: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.addClass(this.options.hoverClass);
++			}
++			this._trigger("over", event, this.ui(draggable));
++		}
++
++	},
++
++	_out: function(event) {
++
++		var draggable = $.ui.ddmanager.current;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return;
++		}
++
++		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("out", event, this.ui(draggable));
++		}
++
++	},
++
++	_drop: function(event,custom) {
++
++		var draggable = custom || $.ui.ddmanager.current,
++			childrenIntersection = false;
++
++		// Bail if draggable and droppable are same element
++		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
++			return false;
++		}
++
++		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
++			var inst = $.data(this, "ui-droppable");
++			if(
++				inst.options.greedy &&
++				!inst.options.disabled &&
++				inst.options.scope === draggable.options.scope &&
++				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
++				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
++			) { childrenIntersection = true; return false; }
++		});
++		if(childrenIntersection) {
++			return false;
++		}
++
++		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++			if(this.options.activeClass) {
++				this.element.removeClass(this.options.activeClass);
++			}
++			if(this.options.hoverClass) {
++				this.element.removeClass(this.options.hoverClass);
++			}
++			this._trigger("drop", event, this.ui(draggable));
++			return this.element;
++		}
++
++		return false;
++
++	},
++
++	ui: function(c) {
++		return {
++			draggable: (c.currentItem || c.element),
++			helper: c.helper,
++			position: c.position,
++			offset: c.positionAbs
++		};
++	}
++
++});
++
++$.ui.intersect = function(draggable, droppable, toleranceMode) {
++
++	if (!droppable.offset) {
++		return false;
++	}
++
++	var draggableLeft, draggableTop,
++		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
++		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
++		l = droppable.offset.left, r = l + droppable.proportions.width,
++		t = droppable.offset.top, b = t + droppable.proportions.height;
++
++	switch (toleranceMode) {
++		case "fit":
++			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
++		case "intersect":
++			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
++				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
++				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
++		case "pointer":
++			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
++			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
++			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
++		case "touch":
++			return (
++				(y1 >= t && y1 <= b) ||	// Top edge touching
++				(y2 >= t && y2 <= b) ||	// Bottom edge touching
++				(y1 < t && y2 > b)		// Surrounded vertically
++			) && (
++				(x1 >= l && x1 <= r) ||	// Left edge touching
++				(x2 >= l && x2 <= r) ||	// Right edge touching
++				(x1 < l && x2 > r)		// Surrounded horizontally
++			);
++		default:
++			return false;
++		}
++
++};
++
++/*
++	This manager tracks offsets of draggables and droppables
++*/
++$.ui.ddmanager = {
++	current: null,
++	droppables: { "default": [] },
++	prepareOffsets: function(t, event) {
++
++		var i, j,
++			m = $.ui.ddmanager.droppables[t.options.scope] || [],
++			type = event ? event.type : null, // workaround for #2317
++			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
++
++		droppablesLoop: for (i = 0; i < m.length; i++) {
++
++			//No disabled and non-accepted
++			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
++				continue;
++			}
++
++			// Filter out elements in the current dragged item
++			for (j=0; j < list.length; j++) {
++				if(list[j] === m[i].element[0]) {
++					m[i].proportions.height = 0;
++					continue droppablesLoop;
++				}
++			}
++
++			m[i].visible = m[i].element.css("display") !== "none";
++			if(!m[i].visible) {
++				continue;
++			}
++
++			//Activate the droppable if used directly from draggables
++			if(type === "mousedown") {
++				m[i]._activate.call(m[i], event);
++			}
++
++			m[i].offset = m[i].element.offset();
++			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
++
++		}
++
++	},
++	drop: function(draggable, event) {
++
++		var dropped = false;
++		// Create a copy of the droppables in case the list changes during the drop (#9116)
++		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
++
++			if(!this.options) {
++				return;
++			}
++			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
++				dropped = this._drop.call(this, event) || dropped;
++			}
++
++			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
++				this.isout = true;
++				this.isover = false;
++				this._deactivate.call(this, event);
++			}
++
++		});
++		return dropped;
++
++	},
++	dragStart: function( draggable, event ) {
++		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
++		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
++			if( !draggable.options.refreshPositions ) {
++				$.ui.ddmanager.prepareOffsets( draggable, event );
++			}
++		});
++	},
++	drag: function(draggable, event) {
++
++		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
++		if(draggable.options.refreshPositions) {
++			$.ui.ddmanager.prepareOffsets(draggable, event);
++		}
++
++		//Run through all droppables and check their positions based on specific tolerance options
++		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
++
++			if(this.options.disabled || this.greedyChild || !this.visible) {
++				return;
++			}
++
++			var parentInstance, scope, parent,
++				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
++				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
++			if(!c) {
++				return;
++			}
++
++			if (this.options.greedy) {
++				// find droppable parents with same scope
++				scope = this.options.scope;
++				parent = this.element.parents(":data(ui-droppable)").filter(function () {
++					return $.data(this, "ui-droppable").options.scope === scope;
++				});
++
++				if (parent.length) {
++					parentInstance = $.data(parent[0], "ui-droppable");
++					parentInstance.greedyChild = (c === "isover");
++				}
++			}
++
++			// we just moved into a greedy child
++			if (parentInstance && c === "isover") {
++				parentInstance.isover = false;
++				parentInstance.isout = true;
++				parentInstance._out.call(parentInstance, event);
++			}
++
++			this[c] = true;
++			this[c === "isout" ? "isover" : "isout"] = false;
++			this[c === "isover" ? "_over" : "_out"].call(this, event);
++
++			// we just moved out of a greedy child
++			if (parentInstance && c === "isout") {
++				parentInstance.isout = false;
++				parentInstance.isover = true;
++				parentInstance._over.call(parentInstance, event);
++			}
++		});
++
++	},
++	dragStop: function( draggable, event ) {
++		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
++		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
++		if( !draggable.options.refreshPositions ) {
++			$.ui.ddmanager.prepareOffsets( draggable, event );
++		}
++	}
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++function num(v) {
++	return parseInt(v, 10) || 0;
++}
++
++function isNumber(value) {
++	return !isNaN(parseInt(value, 10));
++}
++
++$.widget("ui.resizable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "resize",
++	options: {
++		alsoResize: false,
++		animate: false,
++		animateDuration: "slow",
++		animateEasing: "swing",
++		aspectRatio: false,
++		autoHide: false,
++		containment: false,
++		ghost: false,
++		grid: false,
++		handles: "e,s,se",
++		helper: false,
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 10,
++		minWidth: 10,
++		// See #7960
++		zIndex: 90,
++
++		// callbacks
++		resize: null,
++		start: null,
++		stop: null
++	},
++	_create: function() {
++
++		var n, i, handle, axis, hname,
++			that = this,
++			o = this.options;
++		this.element.addClass("ui-resizable");
++
++		$.extend(this, {
++			_aspectRatio: !!(o.aspectRatio),
++			aspectRatio: o.aspectRatio,
++			originalElement: this.element,
++			_proportionallyResizeElements: [],
++			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
++		});
++
++		//Wrap the element if it cannot hold child nodes
++		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
++
++			//Create a wrapper element and set the wrapper to the new current internal element
++			this.element.wrap(
++				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
++					position: this.element.css("position"),
++					width: this.element.outerWidth(),
++					height: this.element.outerHeight(),
++					top: this.element.css("top"),
++					left: this.element.css("left")
++				})
++			);
++
++			//Overwrite the original this.element
++			this.element = this.element.parent().data(
++				"ui-resizable", this.element.data("ui-resizable")
++			);
++
++			this.elementIsWrapper = true;
++
++			//Move margins to the wrapper
++			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
++			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
++
++			//Prevent Safari textarea resize
++			this.originalResizeStyle = this.originalElement.css("resize");
++			this.originalElement.css("resize", "none");
++
++			//Push the actual element to our proportionallyResize internal array
++			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
++
++			// avoid IE jump (hard set the margin)
++			this.originalElement.css({ margin: this.originalElement.css("margin") });
++
++			// fix handlers offset
++			this._proportionallyResize();
++
++		}
++
++		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
++		if(this.handles.constructor === String) {
++
++			if ( this.handles === "all") {
++				this.handles = "n,e,s,w,se,sw,ne,nw";
++			}
++
++			n = this.handles.split(",");
++			this.handles = {};
++
++			for(i = 0; i < n.length; i++) {
++
++				handle = $.trim(n[i]);
++				hname = "ui-resizable-"+handle;
++				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
++
++				// Apply zIndex to all handles - see #7960
++				axis.css({ zIndex: o.zIndex });
++
++				//TODO : What's going on here?
++				if ("se" === handle) {
++					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
++				}
++
++				//Insert into internal handles object and append to element
++				this.handles[handle] = ".ui-resizable-"+handle;
++				this.element.append(axis);
++			}
++
++		}
++
++		this._renderAxis = function(target) {
++
++			var i, axis, padPos, padWrapper;
++
++			target = target || this.element;
++
++			for(i in this.handles) {
++
++				if(this.handles[i].constructor === String) {
++					this.handles[i] = $(this.handles[i], this.element).show();
++				}
++
++				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
++				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
++
++					axis = $(this.handles[i], this.element);
++
++					//Checking the correct pad and border
++					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
++
++					//The padding type i have to apply...
++					padPos = [ "padding",
++						/ne|nw|n/.test(i) ? "Top" :
++						/se|sw|s/.test(i) ? "Bottom" :
++						/^e$/.test(i) ? "Right" : "Left" ].join("");
++
++					target.css(padPos, padWrapper);
++
++					this._proportionallyResize();
++
++				}
++
++				//TODO: What's that good for? There's not anything to be executed left
++				if(!$(this.handles[i]).length) {
++					continue;
++				}
++			}
++		};
++
++		//TODO: make renderAxis a prototype function
++		this._renderAxis(this.element);
++
++		this._handles = $(".ui-resizable-handle", this.element)
++			.disableSelection();
++
++		//Matching axis name
++		this._handles.mouseover(function() {
++			if (!that.resizing) {
++				if (this.className) {
++					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
++				}
++				//Axis, default = se
++				that.axis = axis && axis[1] ? axis[1] : "se";
++			}
++		});
++
++		//If we want to auto hide the elements
++		if (o.autoHide) {
++			this._handles.hide();
++			$(this.element)
++				.addClass("ui-resizable-autohide")
++				.mouseenter(function() {
++					if (o.disabled) {
++						return;
++					}
++					$(this).removeClass("ui-resizable-autohide");
++					that._handles.show();
++				})
++				.mouseleave(function(){
++					if (o.disabled) {
++						return;
++					}
++					if (!that.resizing) {
++						$(this).addClass("ui-resizable-autohide");
++						that._handles.hide();
++					}
++				});
++		}
++
++		//Initialize the mouse interaction
++		this._mouseInit();
++
++	},
++
++	_destroy: function() {
++
++		this._mouseDestroy();
++
++		var wrapper,
++			_destroy = function(exp) {
++				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
++					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
++			};
++
++		//TODO: Unwrap at same DOM position
++		if (this.elementIsWrapper) {
++			_destroy(this.element);
++			wrapper = this.element;
++			this.originalElement.css({
++				position: wrapper.css("position"),
++				width: wrapper.outerWidth(),
++				height: wrapper.outerHeight(),
++				top: wrapper.css("top"),
++				left: wrapper.css("left")
++			}).insertAfter( wrapper );
++			wrapper.remove();
++		}
++
++		this.originalElement.css("resize", this.originalResizeStyle);
++		_destroy(this.originalElement);
++
++		return this;
++	},
++
++	_mouseCapture: function(event) {
++		var i, handle,
++			capture = false;
++
++		for (i in this.handles) {
++			handle = $(this.handles[i])[0];
++			if (handle === event.target || $.contains(handle, event.target)) {
++				capture = true;
++			}
++		}
++
++		return !this.options.disabled && capture;
++	},
++
++	_mouseStart: function(event) {
++
++		var curleft, curtop, cursor,
++			o = this.options,
++			iniPos = this.element.position(),
++			el = this.element;
++
++		this.resizing = true;
++
++		// bugfix for http://dev.jquery.com/ticket/1749
++		if ( (/absolute/).test( el.css("position") ) ) {
++			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
++		} else if (el.is(".ui-draggable")) {
++			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
++		}
++
++		this._renderProxy();
++
++		curleft = num(this.helper.css("left"));
++		curtop = num(this.helper.css("top"));
++
++		if (o.containment) {
++			curleft += $(o.containment).scrollLeft() || 0;
++			curtop += $(o.containment).scrollTop() || 0;
++		}
++
++		//Store needed variables
++		this.offset = this.helper.offset();
++		this.position = { left: curleft, top: curtop };
++		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
++		this.originalPosition = { left: curleft, top: curtop };
++		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
++		this.originalMousePosition = { left: event.pageX, top: event.pageY };
++
++		//Aspect Ratio
++		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
++
++		cursor = $(".ui-resizable-" + this.axis).css("cursor");
++		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
++
++		el.addClass("ui-resizable-resizing");
++		this._propagate("start", event);
++		return true;
++	},
++
++	_mouseDrag: function(event) {
++
++		//Increase performance, avoid regex
++		var data,
++			el = this.helper, props = {},
++			smp = this.originalMousePosition,
++			a = this.axis,
++			prevTop = this.position.top,
++			prevLeft = this.position.left,
++			prevWidth = this.size.width,
++			prevHeight = this.size.height,
++			dx = (event.pageX-smp.left)||0,
++			dy = (event.pageY-smp.top)||0,
++			trigger = this._change[a];
++
++		if (!trigger) {
++			return false;
++		}
++
++		// Calculate the attrs that will be change
++		data = trigger.apply(this, [event, dx, dy]);
++
++		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
++		this._updateVirtualBoundaries(event.shiftKey);
++		if (this._aspectRatio || event.shiftKey) {
++			data = this._updateRatio(data, event);
++		}
++
++		data = this._respectSize(data, event);
++
++		this._updateCache(data);
++
++		// plugins callbacks need to be called first
++		this._propagate("resize", event);
++
++		if (this.position.top !== prevTop) {
++			props.top = this.position.top + "px";
++		}
++		if (this.position.left !== prevLeft) {
++			props.left = this.position.left + "px";
++		}
++		if (this.size.width !== prevWidth) {
++			props.width = this.size.width + "px";
++		}
++		if (this.size.height !== prevHeight) {
++			props.height = this.size.height + "px";
++		}
++		el.css(props);
++
++		if (!this._helper && this._proportionallyResizeElements.length) {
++			this._proportionallyResize();
++		}
++
++		// Call the user callback if the element was resized
++		if ( ! $.isEmptyObject(props) ) {
++			this._trigger("resize", event, this.ui());
++		}
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++
++		this.resizing = false;
++		var pr, ista, soffseth, soffsetw, s, left, top,
++			o = this.options, that = this;
++
++		if(this._helper) {
++
++			pr = this._proportionallyResizeElements;
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
++			soffsetw = ista ? 0 : that.sizeDiff.width;
++
++			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++			if (!o.animate) {
++				this.element.css($.extend(s, { top: top, left: left }));
++			}
++
++			that.helper.height(that.size.height);
++			that.helper.width(that.size.width);
++
++			if (this._helper && !o.animate) {
++				this._proportionallyResize();
++			}
++		}
++
++		$("body").css("cursor", "auto");
++
++		this.element.removeClass("ui-resizable-resizing");
++
++		this._propagate("stop", event);
++
++		if (this._helper) {
++			this.helper.remove();
++		}
++
++		return false;
++
++	},
++
++	_updateVirtualBoundaries: function(forceAspectRatio) {
++		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
++			o = this.options;
++
++		b = {
++			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
++			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
++			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
++			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
++		};
++
++		if(this._aspectRatio || forceAspectRatio) {
++			// We want to create an enclosing box whose aspect ration is the requested one
++			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
++			pMinWidth = b.minHeight * this.aspectRatio;
++			pMinHeight = b.minWidth / this.aspectRatio;
++			pMaxWidth = b.maxHeight * this.aspectRatio;
++			pMaxHeight = b.maxWidth / this.aspectRatio;
++
++			if(pMinWidth > b.minWidth) {
++				b.minWidth = pMinWidth;
++			}
++			if(pMinHeight > b.minHeight) {
++				b.minHeight = pMinHeight;
++			}
++			if(pMaxWidth < b.maxWidth) {
++				b.maxWidth = pMaxWidth;
++			}
++			if(pMaxHeight < b.maxHeight) {
++				b.maxHeight = pMaxHeight;
++			}
++		}
++		this._vBoundaries = b;
++	},
++
++	_updateCache: function(data) {
++		this.offset = this.helper.offset();
++		if (isNumber(data.left)) {
++			this.position.left = data.left;
++		}
++		if (isNumber(data.top)) {
++			this.position.top = data.top;
++		}
++		if (isNumber(data.height)) {
++			this.size.height = data.height;
++		}
++		if (isNumber(data.width)) {
++			this.size.width = data.width;
++		}
++	},
++
++	_updateRatio: function( data ) {
++
++		var cpos = this.position,
++			csize = this.size,
++			a = this.axis;
++
++		if (isNumber(data.height)) {
++			data.width = (data.height * this.aspectRatio);
++		} else if (isNumber(data.width)) {
++			data.height = (data.width / this.aspectRatio);
++		}
++
++		if (a === "sw") {
++			data.left = cpos.left + (csize.width - data.width);
++			data.top = null;
++		}
++		if (a === "nw") {
++			data.top = cpos.top + (csize.height - data.height);
++			data.left = cpos.left + (csize.width - data.width);
++		}
++
++		return data;
++	},
++
++	_respectSize: function( data ) {
++
++		var o = this._vBoundaries,
++			a = this.axis,
++			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
++			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
++			dw = this.originalPosition.left + this.originalSize.width,
++			dh = this.position.top + this.size.height,
++			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
++		if (isminw) {
++			data.width = o.minWidth;
++		}
++		if (isminh) {
++			data.height = o.minHeight;
++		}
++		if (ismaxw) {
++			data.width = o.maxWidth;
++		}
++		if (ismaxh) {
++			data.height = o.maxHeight;
++		}
++
++		if (isminw && cw) {
++			data.left = dw - o.minWidth;
++		}
++		if (ismaxw && cw) {
++			data.left = dw - o.maxWidth;
++		}
++		if (isminh && ch) {
++			data.top = dh - o.minHeight;
++		}
++		if (ismaxh && ch) {
++			data.top = dh - o.maxHeight;
++		}
++
++		// fixing jump error on top/left - bug #2330
++		if (!data.width && !data.height && !data.left && data.top) {
++			data.top = null;
++		} else if (!data.width && !data.height && !data.top && data.left) {
++			data.left = null;
++		}
++
++		return data;
++	},
++
++	_proportionallyResize: function() {
++
++		if (!this._proportionallyResizeElements.length) {
++			return;
++		}
++
++		var i, j, borders, paddings, prel,
++			element = this.helper || this.element;
++
++		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
++
++			prel = this._proportionallyResizeElements[i];
++
++			if (!this.borderDif) {
++				this.borderDif = [];
++				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
++				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
++
++				for ( j = 0; j < borders.length; j++ ) {
++					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
++				}
++			}
++
++			prel.css({
++				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
++				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
++			});
++
++		}
++
++	},
++
++	_renderProxy: function() {
++
++		var el = this.element, o = this.options;
++		this.elementOffset = el.offset();
++
++		if(this._helper) {
++
++			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
++
++			this.helper.addClass(this._helper).css({
++				width: this.element.outerWidth() - 1,
++				height: this.element.outerHeight() - 1,
++				position: "absolute",
++				left: this.elementOffset.left +"px",
++				top: this.elementOffset.top +"px",
++				zIndex: ++o.zIndex //TODO: Don't modify option
++			});
++
++			this.helper
++				.appendTo("body")
++				.disableSelection();
++
++		} else {
++			this.helper = this.element;
++		}
++
++	},
++
++	_change: {
++		e: function(event, dx) {
++			return { width: this.originalSize.width + dx };
++		},
++		w: function(event, dx) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { left: sp.left + dx, width: cs.width - dx };
++		},
++		n: function(event, dx, dy) {
++			var cs = this.originalSize, sp = this.originalPosition;
++			return { top: sp.top + dy, height: cs.height - dy };
++		},
++		s: function(event, dx, dy) {
++			return { height: this.originalSize.height + dy };
++		},
++		se: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		sw: function(event, dx, dy) {
++			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		},
++		ne: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
++		},
++		nw: function(event, dx, dy) {
++			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
++		}
++	},
++
++	_propagate: function(n, event) {
++		$.ui.plugin.call(this, n, [event, this.ui()]);
++		(n !== "resize" && this._trigger(n, event, this.ui()));
++	},
++
++	plugins: {},
++
++	ui: function() {
++		return {
++			originalElement: this.originalElement,
++			element: this.element,
++			helper: this.helper,
++			position: this.position,
++			size: this.size,
++			originalSize: this.originalSize,
++			originalPosition: this.originalPosition
++		};
++	}
++
++});
++
++/*
++ * Resizable Extensions
++ */
++
++$.ui.plugin.add("resizable", "animate", {
++
++	stop: function( event ) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			pr = that._proportionallyResizeElements,
++			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
++			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
++			soffsetw = ista ? 0 : that.sizeDiff.width,
++			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
++			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
++			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
++
++		that.element.animate(
++			$.extend(style, top && left ? { top: top, left: left } : {}), {
++				duration: o.animateDuration,
++				easing: o.animateEasing,
++				step: function() {
++
++					var data = {
++						width: parseInt(that.element.css("width"), 10),
++						height: parseInt(that.element.css("height"), 10),
++						top: parseInt(that.element.css("top"), 10),
++						left: parseInt(that.element.css("left"), 10)
++					};
++
++					if (pr && pr.length) {
++						$(pr[0]).css({ width: data.width, height: data.height });
++					}
++
++					// propagating resize, and updating values for each animation step
++					that._updateCache(data);
++					that._propagate("resize", event);
++
++				}
++			}
++		);
++	}
++
++});
++
++$.ui.plugin.add("resizable", "containment", {
++
++	start: function() {
++		var element, p, co, ch, cw, width, height,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			el = that.element,
++			oc = o.containment,
++			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
++
++		if (!ce) {
++			return;
++		}
++
++		that.containerElement = $(ce);
++
++		if (/document/.test(oc) || oc === document) {
++			that.containerOffset = { left: 0, top: 0 };
++			that.containerPosition = { left: 0, top: 0 };
++
++			that.parentData = {
++				element: $(document), left: 0, top: 0,
++				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
++			};
++		}
++
++		// i'm a node, so compute top, left, right, bottom
++		else {
++			element = $(ce);
++			p = [];
++			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
++
++			that.containerOffset = element.offset();
++			that.containerPosition = element.position();
++			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
++
++			co = that.containerOffset;
++			ch = that.containerSize.height;
++			cw = that.containerSize.width;
++			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
++			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
++
++			that.parentData = {
++				element: ce, left: co.left, top: co.top, width: width, height: height
++			};
++		}
++	},
++
++	resize: function( event ) {
++		var woset, hoset, isParent, isOffsetRelative,
++			that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset, cp = that.position,
++			pRatio = that._aspectRatio || event.shiftKey,
++			cop = { top:0, left:0 }, ce = that.containerElement;
++
++		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
++			cop = co;
++		}
++
++		if (cp.left < (that._helper ? co.left : 0)) {
++			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++			that.position.left = o.helper ? co.left : 0;
++		}
++
++		if (cp.top < (that._helper ? co.top : 0)) {
++			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++			that.position.top = that._helper ? co.top : 0;
++		}
++
++		that.offset.left = that.parentData.left+that.position.left;
++		that.offset.top = that.parentData.top+that.position.top;
++
++		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
++		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
++
++		isParent = that.containerElement.get(0) === that.element.parent().get(0);
++		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
++
++		if(isParent && isOffsetRelative) {
++			woset -= that.parentData.left;
++		}
++
++		if (woset + that.size.width >= that.parentData.width) {
++			that.size.width = that.parentData.width - woset;
++			if (pRatio) {
++				that.size.height = that.size.width / that.aspectRatio;
++			}
++		}
++
++		if (hoset + that.size.height >= that.parentData.height) {
++			that.size.height = that.parentData.height - hoset;
++			if (pRatio) {
++				that.size.width = that.size.height * that.aspectRatio;
++			}
++		}
++	},
++
++	stop: function(){
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			co = that.containerOffset,
++			cop = that.containerPosition,
++			ce = that.containerElement,
++			helper = $(that.helper),
++			ho = helper.offset(),
++			w = helper.outerWidth() - that.sizeDiff.width,
++			h = helper.outerHeight() - that.sizeDiff.height;
++
++		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
++			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
++		}
++
++	}
++});
++
++$.ui.plugin.add("resizable", "alsoResize", {
++
++	start: function () {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			_store = function (exp) {
++				$(exp).each(function() {
++					var el = $(this);
++					el.data("ui-resizable-alsoresize", {
++						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
++						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
++					});
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
++			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
++			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
++		}else{
++			_store(o.alsoResize);
++		}
++	},
++
++	resize: function (event, ui) {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			os = that.originalSize,
++			op = that.originalPosition,
++			delta = {
++				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
++				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
++			},
++
++			_alsoResize = function (exp, c) {
++				$(exp).each(function() {
++					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
++						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
++
++					$.each(css, function (i, prop) {
++						var sum = (start[prop]||0) + (delta[prop]||0);
++						if (sum && sum >= 0) {
++							style[prop] = sum || null;
++						}
++					});
++
++					el.css(style);
++				});
++			};
++
++		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
++			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
++		}else{
++			_alsoResize(o.alsoResize);
++		}
++	},
++
++	stop: function () {
++		$(this).removeData("resizable-alsoresize");
++	}
++});
++
++$.ui.plugin.add("resizable", "ghost", {
++
++	start: function() {
++
++		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
++
++		that.ghost = that.originalElement.clone();
++		that.ghost
++			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
++			.addClass("ui-resizable-ghost")
++			.addClass(typeof o.ghost === "string" ? o.ghost : "");
++
++		that.ghost.appendTo(that.helper);
++
++	},
++
++	resize: function(){
++		var that = $(this).data("ui-resizable");
++		if (that.ghost) {
++			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
++		}
++	},
++
++	stop: function() {
++		var that = $(this).data("ui-resizable");
++		if (that.ghost && that.helper) {
++			that.helper.get(0).removeChild(that.ghost.get(0));
++		}
++	}
++
++});
++
++$.ui.plugin.add("resizable", "grid", {
++
++	resize: function() {
++		var that = $(this).data("ui-resizable"),
++			o = that.options,
++			cs = that.size,
++			os = that.originalSize,
++			op = that.originalPosition,
++			a = that.axis,
++			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
++			gridX = (grid[0]||1),
++			gridY = (grid[1]||1),
++			ox = Math.round((cs.width - os.width) / gridX) * gridX,
++			oy = Math.round((cs.height - os.height) / gridY) * gridY,
++			newWidth = os.width + ox,
++			newHeight = os.height + oy,
++			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
++			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
++			isMinWidth = o.minWidth && (o.minWidth > newWidth),
++			isMinHeight = o.minHeight && (o.minHeight > newHeight);
++
++		o.grid = grid;
++
++		if (isMinWidth) {
++			newWidth = newWidth + gridX;
++		}
++		if (isMinHeight) {
++			newHeight = newHeight + gridY;
++		}
++		if (isMaxWidth) {
++			newWidth = newWidth - gridX;
++		}
++		if (isMaxHeight) {
++			newHeight = newHeight - gridY;
++		}
++
++		if (/^(se|s|e)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++		} else if (/^(ne)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++		} else if (/^(sw)$/.test(a)) {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.left = op.left - ox;
++		} else {
++			that.size.width = newWidth;
++			that.size.height = newHeight;
++			that.position.top = op.top - oy;
++			that.position.left = op.left - ox;
++		}
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.widget("ui.selectable", $.ui.mouse, {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoRefresh: true,
++		distance: 0,
++		filter: "*",
++		tolerance: "touch",
++
++		// callbacks
++		selected: null,
++		selecting: null,
++		start: null,
++		stop: null,
++		unselected: null,
++		unselecting: null
++	},
++	_create: function() {
++		var selectees,
++			that = this;
++
++		this.element.addClass("ui-selectable");
++
++		this.dragged = false;
++
++		// cache selectee children based on filter
++		this.refresh = function() {
++			selectees = $(that.options.filter, that.element[0]);
++			selectees.addClass("ui-selectee");
++			selectees.each(function() {
++				var $this = $(this),
++					pos = $this.offset();
++				$.data(this, "selectable-item", {
++					element: this,
++					$element: $this,
++					left: pos.left,
++					top: pos.top,
++					right: pos.left + $this.outerWidth(),
++					bottom: pos.top + $this.outerHeight(),
++					startselected: false,
++					selected: $this.hasClass("ui-selected"),
++					selecting: $this.hasClass("ui-selecting"),
++					unselecting: $this.hasClass("ui-unselecting")
++				});
++			});
++		};
++		this.refresh();
++
++		this.selectees = selectees.addClass("ui-selectee");
++
++		this._mouseInit();
++
++		this.helper = $("<div class='ui-selectable-helper'></div>");
++	},
++
++	_destroy: function() {
++		this.selectees
++			.removeClass("ui-selectee")
++			.removeData("selectable-item");
++		this.element
++			.removeClass("ui-selectable ui-selectable-disabled");
++		this._mouseDestroy();
++	},
++
++	_mouseStart: function(event) {
++		var that = this,
++			options = this.options;
++
++		this.opos = [event.pageX, event.pageY];
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		this.selectees = $(options.filter, this.element[0]);
++
++		this._trigger("start", event);
++
++		$(options.appendTo).append(this.helper);
++		// position helper (lasso)
++		this.helper.css({
++			"left": event.pageX,
++			"top": event.pageY,
++			"width": 0,
++			"height": 0
++		});
++
++		if (options.autoRefresh) {
++			this.refresh();
++		}
++
++		this.selectees.filter(".ui-selected").each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.startselected = true;
++			if (!event.metaKey && !event.ctrlKey) {
++				selectee.$element.removeClass("ui-selected");
++				selectee.selected = false;
++				selectee.$element.addClass("ui-unselecting");
++				selectee.unselecting = true;
++				// selectable UNSELECTING callback
++				that._trigger("unselecting", event, {
++					unselecting: selectee.element
++				});
++			}
++		});
++
++		$(event.target).parents().addBack().each(function() {
++			var doSelect,
++				selectee = $.data(this, "selectable-item");
++			if (selectee) {
++				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
++				selectee.$element
++					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
++					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
++				selectee.unselecting = !doSelect;
++				selectee.selecting = doSelect;
++				selectee.selected = doSelect;
++				// selectable (UN)SELECTING callback
++				if (doSelect) {
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				} else {
++					that._trigger("unselecting", event, {
++						unselecting: selectee.element
++					});
++				}
++				return false;
++			}
++		});
++
++	},
++
++	_mouseDrag: function(event) {
++
++		this.dragged = true;
++
++		if (this.options.disabled) {
++			return;
++		}
++
++		var tmp,
++			that = this,
++			options = this.options,
++			x1 = this.opos[0],
++			y1 = this.opos[1],
++			x2 = event.pageX,
++			y2 = event.pageY;
++
++		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
++		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
++		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
++
++		this.selectees.each(function() {
++			var selectee = $.data(this, "selectable-item"),
++				hit = false;
++
++			//prevent helper from being selected if appendTo: selectable
++			if (!selectee || selectee.element === that.element[0]) {
++				return;
++			}
++
++			if (options.tolerance === "touch") {
++				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
++			} else if (options.tolerance === "fit") {
++				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
++			}
++
++			if (hit) {
++				// SELECT
++				if (selectee.selected) {
++					selectee.$element.removeClass("ui-selected");
++					selectee.selected = false;
++				}
++				if (selectee.unselecting) {
++					selectee.$element.removeClass("ui-unselecting");
++					selectee.unselecting = false;
++				}
++				if (!selectee.selecting) {
++					selectee.$element.addClass("ui-selecting");
++					selectee.selecting = true;
++					// selectable SELECTING callback
++					that._trigger("selecting", event, {
++						selecting: selectee.element
++					});
++				}
++			} else {
++				// UNSELECT
++				if (selectee.selecting) {
++					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						selectee.$element.addClass("ui-selected");
++						selectee.selected = true;
++					} else {
++						selectee.$element.removeClass("ui-selecting");
++						selectee.selecting = false;
++						if (selectee.startselected) {
++							selectee.$element.addClass("ui-unselecting");
++							selectee.unselecting = true;
++						}
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++				if (selectee.selected) {
++					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
++						selectee.$element.removeClass("ui-selected");
++						selectee.selected = false;
++
++						selectee.$element.addClass("ui-unselecting");
++						selectee.unselecting = true;
++						// selectable UNSELECTING callback
++						that._trigger("unselecting", event, {
++							unselecting: selectee.element
++						});
++					}
++				}
++			}
++		});
++
++		return false;
++	},
++
++	_mouseStop: function(event) {
++		var that = this;
++
++		this.dragged = false;
++
++		$(".ui-unselecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-unselecting");
++			selectee.unselecting = false;
++			selectee.startselected = false;
++			that._trigger("unselected", event, {
++				unselected: selectee.element
++			});
++		});
++		$(".ui-selecting", this.element[0]).each(function() {
++			var selectee = $.data(this, "selectable-item");
++			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
++			selectee.selecting = false;
++			selectee.selected = true;
++			selectee.startselected = true;
++			that._trigger("selected", event, {
++				selected: selectee.element
++			});
++		});
++		this._trigger("stop", event);
++
++		this.helper.remove();
++
++		return false;
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++/*jshint loopfunc: true */
++
++function isOverAxis( x, reference, size ) {
++	return ( x > reference ) && ( x < ( reference + size ) );
++}
++
++function isFloating(item) {
++	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
++}
++
++$.widget("ui.sortable", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "sort",
++	ready: false,
++	options: {
++		appendTo: "parent",
++		axis: false,
++		connectWith: false,
++		containment: false,
++		cursor: "auto",
++		cursorAt: false,
++		dropOnEmpty: true,
++		forcePlaceholderSize: false,
++		forceHelperSize: false,
++		grid: false,
++		handle: false,
++		helper: "original",
++		items: "> *",
++		opacity: false,
++		placeholder: false,
++		revert: false,
++		scroll: true,
++		scrollSensitivity: 20,
++		scrollSpeed: 20,
++		scope: "default",
++		tolerance: "intersect",
++		zIndex: 1000,
++
++		// callbacks
++		activate: null,
++		beforeStop: null,
++		change: null,
++		deactivate: null,
++		out: null,
++		over: null,
++		receive: null,
++		remove: null,
++		sort: null,
++		start: null,
++		stop: null,
++		update: null
++	},
++	_create: function() {
++
++		var o = this.options;
++		this.containerCache = {};
++		this.element.addClass("ui-sortable");
++
++		//Get the items
++		this.refresh();
++
++		//Let's determine if the items are being displayed horizontally
++		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
++
++		//Let's determine the parent's offset
++		this.offset = this.element.offset();
++
++		//Initialize mouse events for interaction
++		this._mouseInit();
++
++		//We're ready to go
++		this.ready = true;
++
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass("ui-sortable ui-sortable-disabled");
++		this._mouseDestroy();
++
++		for ( var i = this.items.length - 1; i >= 0; i-- ) {
++			this.items[i].item.removeData(this.widgetName + "-item");
++		}
++
++		return this;
++	},
++
++	_setOption: function(key, value){
++		if ( key === "disabled" ) {
++			this.options[ key ] = value;
++
++			this.widget().toggleClass( "ui-sortable-disabled", !!value );
++		} else {
++			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
++			$.Widget.prototype._setOption.apply(this, arguments);
++		}
++	},
++
++	_mouseCapture: function(event, overrideHandle) {
++		var currentItem = null,
++			validHandle = false,
++			that = this;
++
++		if (this.reverting) {
++			return false;
++		}
++
++		if(this.options.disabled || this.options.type === "static") {
++			return false;
++		}
++
++		//We have to refresh the items data once first
++		this._refreshItems(event);
++
++		//Find out if the clicked node (or one of its parents) is a actual item in this.items
++		$(event.target).parents().each(function() {
++			if($.data(this, that.widgetName + "-item") === that) {
++				currentItem = $(this);
++				return false;
++			}
++		});
++		if($.data(event.target, that.widgetName + "-item") === that) {
++			currentItem = $(event.target);
++		}
++
++		if(!currentItem) {
++			return false;
++		}
++		if(this.options.handle && !overrideHandle) {
++			$(this.options.handle, currentItem).find("*").addBack().each(function() {
++				if(this === event.target) {
++					validHandle = true;
++				}
++			});
++			if(!validHandle) {
++				return false;
++			}
++		}
++
++		this.currentItem = currentItem;
++		this._removeCurrentsFromItems();
++		return true;
++
++	},
++
++	_mouseStart: function(event, overrideHandle, noActivation) {
++
++		var i, body,
++			o = this.options;
++
++		this.currentContainer = this;
++
++		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
++		this.refreshPositions();
++
++		//Create and append the visible helper
++		this.helper = this._createHelper(event);
++
++		//Cache the helper size
++		this._cacheHelperProportions();
++
++		/*
++		 * - Position generation -
++		 * This block generates everything position related - it's the core of draggables.
++		 */
++
++		//Cache the margins of the original element
++		this._cacheMargins();
++
++		//Get the next scrolling parent
++		this.scrollParent = this.helper.scrollParent();
++
++		//The element's absolute position on the page minus margins
++		this.offset = this.currentItem.offset();
++		this.offset = {
++			top: this.offset.top - this.margins.top,
++			left: this.offset.left - this.margins.left
++		};
++
++		$.extend(this.offset, {
++			click: { //Where the click happened, relative to the element
++				left: event.pageX - this.offset.left,
++				top: event.pageY - this.offset.top
++			},
++			parent: this._getParentOffset(),
++			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
++		});
++
++		// Only after we got the offset, we can change the helper's position to absolute
++		// TODO: Still need to figure out a way to make relative sorting possible
++		this.helper.css("position", "absolute");
++		this.cssPosition = this.helper.css("position");
++
++		//Generate the original position
++		this.originalPosition = this._generatePosition(event);
++		this.originalPageX = event.pageX;
++		this.originalPageY = event.pageY;
++
++		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
++		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
++
++		//Cache the former DOM position
++		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
++
++		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.currentItem.hide();
++		}
++
++		//Create the placeholder
++		this._createPlaceholder();
++
++		//Set a containment if given in the options
++		if(o.containment) {
++			this._setContainment();
++		}
++
++		if( o.cursor && o.cursor !== "auto" ) { // cursor option
++			body = this.document.find( "body" );
++
++			// support: IE
++			this.storedCursor = body.css( "cursor" );
++			body.css( "cursor", o.cursor );
++
++			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
++		}
++
++		if(o.opacity) { // opacity option
++			if (this.helper.css("opacity")) {
++				this._storedOpacity = this.helper.css("opacity");
++			}
++			this.helper.css("opacity", o.opacity);
++		}
++
++		if(o.zIndex) { // zIndex option
++			if (this.helper.css("zIndex")) {
++				this._storedZIndex = this.helper.css("zIndex");
++			}
++			this.helper.css("zIndex", o.zIndex);
++		}
++
++		//Prepare scrolling
++		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++			this.overflowOffset = this.scrollParent.offset();
++		}
++
++		//Call callbacks
++		this._trigger("start", event, this._uiHash());
++
++		//Recache the helper size
++		if(!this._preserveHelperProportions) {
++			this._cacheHelperProportions();
++		}
++
++
++		//Post "activate" events to possible containers
++		if( !noActivation ) {
++			for ( i = this.containers.length - 1; i >= 0; i-- ) {
++				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
++			}
++		}
++
++		//Prepare possible droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.current = this;
++		}
++
++		if ($.ui.ddmanager && !o.dropBehaviour) {
++			$.ui.ddmanager.prepareOffsets(this, event);
++		}
++
++		this.dragging = true;
++
++		this.helper.addClass("ui-sortable-helper");
++		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
++		return true;
++
++	},
++
++	_mouseDrag: function(event) {
++		var i, item, itemElement, intersection,
++			o = this.options,
++			scrolled = false;
++
++		//Compute the helpers position
++		this.position = this._generatePosition(event);
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		if (!this.lastPositionAbs) {
++			this.lastPositionAbs = this.positionAbs;
++		}
++
++		//Do scrolling
++		if(this.options.scroll) {
++			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
++
++				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
++				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
++					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
++				}
++
++				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
++				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
++					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
++				}
++
++			} else {
++
++				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
++				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
++				}
++
++				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
++				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
++					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
++				}
++
++			}
++
++			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
++				$.ui.ddmanager.prepareOffsets(this, event);
++			}
++		}
++
++		//Regenerate the absolute position used for position checks
++		this.positionAbs = this._convertPositionTo("absolute");
++
++		//Set the helper position
++		if(!this.options.axis || this.options.axis !== "y") {
++			this.helper[0].style.left = this.position.left+"px";
++		}
++		if(!this.options.axis || this.options.axis !== "x") {
++			this.helper[0].style.top = this.position.top+"px";
++		}
++
++		//Rearrange
++		for (i = this.items.length - 1; i >= 0; i--) {
++
++			//Cache variables and intersection, continue if no intersection
++			item = this.items[i];
++			itemElement = item.item[0];
++			intersection = this._intersectsWithPointer(item);
++			if (!intersection) {
++				continue;
++			}
++
++			// Only put the placeholder inside the current Container, skip all
++			// items form other containers. This works because when moving
++			// an item from one container to another the
++			// currentContainer is switched before the placeholder is moved.
++			//
++			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
++			// beetween the outer and inner container.
++			if (item.instance !== this.currentContainer) {
++				continue;
++			}
++
++			// cannot intersect with itself
++			// no useless actions that have been done before
++			// no action if the item moved is the parent of the item checked
++			if (itemElement !== this.currentItem[0] &&
++				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
++				!$.contains(this.placeholder[0], itemElement) &&
++				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
++			) {
++
++				this.direction = intersection === 1 ? "down" : "up";
++
++				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
++					this._rearrange(event, item);
++				} else {
++					break;
++				}
++
++				this._trigger("change", event, this._uiHash());
++				break;
++			}
++		}
++
++		//Post events to containers
++		this._contactContainers(event);
++
++		//Interconnect with droppables
++		if($.ui.ddmanager) {
++			$.ui.ddmanager.drag(this, event);
++		}
++
++		//Call callbacks
++		this._trigger("sort", event, this._uiHash());
++
++		this.lastPositionAbs = this.positionAbs;
++		return false;
++
++	},
++
++	_mouseStop: function(event, noPropagation) {
++
++		if(!event) {
++			return;
++		}
++
++		//If we are using droppables, inform the manager about the drop
++		if ($.ui.ddmanager && !this.options.dropBehaviour) {
++			$.ui.ddmanager.drop(this, event);
++		}
++
++		if(this.options.revert) {
++			var that = this,
++				cur = this.placeholder.offset(),
++				axis = this.options.axis,
++				animation = {};
++
++			if ( !axis || axis === "x" ) {
++				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
++			}
++			if ( !axis || axis === "y" ) {
++				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
++			}
++			this.reverting = true;
++			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
++				that._clear(event);
++			});
++		} else {
++			this._clear(event, noPropagation);
++		}
++
++		return false;
++
++	},
++
++	cancel: function() {
++
++		if(this.dragging) {
++
++			this._mouseUp({ target: null });
++
++			if(this.options.helper === "original") {
++				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++			} else {
++				this.currentItem.show();
++			}
++
++			//Post deactivating events to containers
++			for (var i = this.containers.length - 1; i >= 0; i--){
++				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", null, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		if (this.placeholder) {
++			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++			if(this.placeholder[0].parentNode) {
++				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++			}
++			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
++				this.helper.remove();
++			}
++
++			$.extend(this, {
++				helper: null,
++				dragging: false,
++				reverting: false,
++				_noFinalSort: null
++			});
++
++			if(this.domPosition.prev) {
++				$(this.domPosition.prev).after(this.currentItem);
++			} else {
++				$(this.domPosition.parent).prepend(this.currentItem);
++			}
++		}
++
++		return this;
++
++	},
++
++	serialize: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			str = [];
++		o = o || {};
++
++		$(items).each(function() {
++			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
++			if (res) {
++				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
++			}
++		});
++
++		if(!str.length && o.key) {
++			str.push(o.key + "=");
++		}
++
++		return str.join("&");
++
++	},
++
++	toArray: function(o) {
++
++		var items = this._getItemsAsjQuery(o && o.connected),
++			ret = [];
++
++		o = o || {};
++
++		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
++		return ret;
++
++	},
++
++	/* Be careful with the following core functions */
++	_intersectsWith: function(item) {
++
++		var x1 = this.positionAbs.left,
++			x2 = x1 + this.helperProportions.width,
++			y1 = this.positionAbs.top,
++			y2 = y1 + this.helperProportions.height,
++			l = item.left,
++			r = l + item.width,
++			t = item.top,
++			b = t + item.height,
++			dyClick = this.offset.click.top,
++			dxClick = this.offset.click.left,
++			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
++			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
++			isOverElement = isOverElementHeight && isOverElementWidth;
++
++		if ( this.options.tolerance === "pointer" ||
++			this.options.forcePointerForContainers ||
++			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
++		) {
++			return isOverElement;
++		} else {
++
++			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
++				x2 - (this.helperProportions.width / 2) < r && // Left Half
++				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
++				y2 - (this.helperProportions.height / 2) < b ); // Top Half
++
++		}
++	},
++
++	_intersectsWithPointer: function(item) {
++
++		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
++			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
++			isOverElement = isOverElementHeight && isOverElementWidth,
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (!isOverElement) {
++			return false;
++		}
++
++		return this.floating ?
++			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
++			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
++
++	},
++
++	_intersectsWithSides: function(item) {
++
++		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
++			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
++			verticalDirection = this._getDragVerticalDirection(),
++			horizontalDirection = this._getDragHorizontalDirection();
++
++		if (this.floating && horizontalDirection) {
++			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
++		} else {
++			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
++		}
++
++	},
++
++	_getDragVerticalDirection: function() {
++		var delta = this.positionAbs.top - this.lastPositionAbs.top;
++		return delta !== 0 && (delta > 0 ? "down" : "up");
++	},
++
++	_getDragHorizontalDirection: function() {
++		var delta = this.positionAbs.left - this.lastPositionAbs.left;
++		return delta !== 0 && (delta > 0 ? "right" : "left");
++	},
++
++	refresh: function(event) {
++		this._refreshItems(event);
++		this.refreshPositions();
++		return this;
++	},
++
++	_connectWith: function() {
++		var options = this.options;
++		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
++	},
++
++	_getItemsAsjQuery: function(connected) {
++
++		var i, j, cur, inst,
++			items = [],
++			queries = [],
++			connectWith = this._connectWith();
++
++		if(connectWith && connected) {
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for ( j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
++					}
++				}
++			}
++		}
++
++		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
++
++		for (i = queries.length - 1; i >= 0; i--){
++			queries[i][0].each(function() {
++				items.push(this);
++			});
++		}
++
++		return $(items);
++
++	},
++
++	_removeCurrentsFromItems: function() {
++
++		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
++
++		this.items = $.grep(this.items, function (item) {
++			for (var j=0; j < list.length; j++) {
++				if(list[j] === item.item[0]) {
++					return false;
++				}
++			}
++			return true;
++		});
++
++	},
++
++	_refreshItems: function(event) {
++
++		this.items = [];
++		this.containers = [this];
++
++		var i, j, cur, inst, targetData, _queries, item, queriesLength,
++			items = this.items,
++			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
++			connectWith = this._connectWith();
++
++		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
++			for (i = connectWith.length - 1; i >= 0; i--){
++				cur = $(connectWith[i]);
++				for (j = cur.length - 1; j >= 0; j--){
++					inst = $.data(cur[j], this.widgetFullName);
++					if(inst && inst !== this && !inst.options.disabled) {
++						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
++						this.containers.push(inst);
++					}
++				}
++			}
++		}
++
++		for (i = queries.length - 1; i >= 0; i--) {
++			targetData = queries[i][1];
++			_queries = queries[i][0];
++
++			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
++				item = $(_queries[j]);
++
++				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
++
++				items.push({
++					item: item,
++					instance: targetData,
++					width: 0, height: 0,
++					left: 0, top: 0
++				});
++			}
++		}
++
++	},
++
++	refreshPositions: function(fast) {
++
++		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
++		if(this.offsetParent && this.helper) {
++			this.offset.parent = this._getParentOffset();
++		}
++
++		var i, item, t, p;
++
++		for (i = this.items.length - 1; i >= 0; i--){
++			item = this.items[i];
++
++			//We ignore calculating positions of all connected containers when we're not over them
++			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
++				continue;
++			}
++
++			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
++
++			if (!fast) {
++				item.width = t.outerWidth();
++				item.height = t.outerHeight();
++			}
++
++			p = t.offset();
++			item.left = p.left;
++			item.top = p.top;
++		}
++
++		if(this.options.custom && this.options.custom.refreshContainers) {
++			this.options.custom.refreshContainers.call(this);
++		} else {
++			for (i = this.containers.length - 1; i >= 0; i--){
++				p = this.containers[i].element.offset();
++				this.containers[i].containerCache.left = p.left;
++				this.containers[i].containerCache.top = p.top;
++				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
++				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
++			}
++		}
++
++		return this;
++	},
++
++	_createPlaceholder: function(that) {
++		that = that || this;
++		var className,
++			o = that.options;
++
++		if(!o.placeholder || o.placeholder.constructor === String) {
++			className = o.placeholder;
++			o.placeholder = {
++				element: function() {
++
++					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
++						element = $( "<" + nodeName + ">", that.document[0] )
++							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
++							.removeClass("ui-sortable-helper");
++
++					if ( nodeName === "tr" ) {
++						that.currentItem.children().each(function() {
++							$( "<td>&#160;</td>", that.document[0] )
++								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
++								.appendTo( element );
++						});
++					} else if ( nodeName === "img" ) {
++						element.attr( "src", that.currentItem.attr( "src" ) );
++					}
++
++					if ( !className ) {
++						element.css( "visibility", "hidden" );
++					}
++
++					return element;
++				},
++				update: function(container, p) {
++
++					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
++					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
++					if(className && !o.forcePlaceholderSize) {
++						return;
++					}
++
++					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
++					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
++					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
++				}
++			};
++		}
++
++		//Create the placeholder
++		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
++
++		//Append it after the actual current item
++		that.currentItem.after(that.placeholder);
++
++		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
++		o.placeholder.update(that, that.placeholder);
++
++	},
++
++	_contactContainers: function(event) {
++		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
++			innermostContainer = null,
++			innermostIndex = null;
++
++		// get innermost container that intersects with item
++		for (i = this.containers.length - 1; i >= 0; i--) {
++
++			// never consider a container that's located within the item itself
++			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
++				continue;
++			}
++
++			if(this._intersectsWith(this.containers[i].containerCache)) {
++
++				// if we've already found a container and it's more "inner" than this, then continue
++				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
++					continue;
++				}
++
++				innermostContainer = this.containers[i];
++				innermostIndex = i;
++
++			} else {
++				// container doesn't intersect. trigger "out" event if necessary
++				if(this.containers[i].containerCache.over) {
++					this.containers[i]._trigger("out", event, this._uiHash(this));
++					this.containers[i].containerCache.over = 0;
++				}
++			}
++
++		}
++
++		// if no intersecting containers found, return
++		if(!innermostContainer) {
++			return;
++		}
++
++		// move the item into the container if it's not there already
++		if(this.containers.length === 1) {
++			if (!this.containers[innermostIndex].containerCache.over) {
++				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++				this.containers[innermostIndex].containerCache.over = 1;
++			}
++		} else {
++
++			//When entering a new container, we will find the item with the least distance and append our item near it
++			dist = 10000;
++			itemWithLeastDistance = null;
++			floating = innermostContainer.floating || isFloating(this.currentItem);
++			posProperty = floating ? "left" : "top";
++			sizeProperty = floating ? "width" : "height";
++			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
++			for (j = this.items.length - 1; j >= 0; j--) {
++				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
++					continue;
++				}
++				if(this.items[j].item[0] === this.currentItem[0]) {
++					continue;
++				}
++				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
++					continue;
++				}
++				cur = this.items[j].item.offset()[posProperty];
++				nearBottom = false;
++				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
++					nearBottom = true;
++					cur += this.items[j][sizeProperty];
++				}
++
++				if(Math.abs(cur - base) < dist) {
++					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
++					this.direction = nearBottom ? "up": "down";
++				}
++			}
++
++			//Check if dropOnEmpty is enabled
++			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
++				return;
++			}
++
++			if(this.currentContainer === this.containers[innermostIndex]) {
++				return;
++			}
++
++			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
++			this._trigger("change", event, this._uiHash());
++			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
++			this.currentContainer = this.containers[innermostIndex];
++
++			//Update the placeholder
++			this.options.placeholder.update(this.currentContainer, this.placeholder);
++
++			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
++			this.containers[innermostIndex].containerCache.over = 1;
++		}
++
++
++	},
++
++	_createHelper: function(event) {
++
++		var o = this.options,
++			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
++
++		//Add the helper to the DOM if that didn't happen already
++		if(!helper.parents("body").length) {
++			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
++		}
++
++		if(helper[0] === this.currentItem[0]) {
++			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
++		}
++
++		if(!helper[0].style.width || o.forceHelperSize) {
++			helper.width(this.currentItem.width());
++		}
++		if(!helper[0].style.height || o.forceHelperSize) {
++			helper.height(this.currentItem.height());
++		}
++
++		return helper;
++
++	},
++
++	_adjustOffsetFromHelper: function(obj) {
++		if (typeof obj === "string") {
++			obj = obj.split(" ");
++		}
++		if ($.isArray(obj)) {
++			obj = {left: +obj[0], top: +obj[1] || 0};
++		}
++		if ("left" in obj) {
++			this.offset.click.left = obj.left + this.margins.left;
++		}
++		if ("right" in obj) {
++			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
++		}
++		if ("top" in obj) {
++			this.offset.click.top = obj.top + this.margins.top;
++		}
++		if ("bottom" in obj) {
++			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
++		}
++	},
++
++	_getParentOffset: function() {
++
++
++		//Get the offsetParent and cache its position
++		this.offsetParent = this.helper.offsetParent();
++		var po = this.offsetParent.offset();
++
++		// This is a special case where we need to modify a offset calculated on start, since the following happened:
++		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
++		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
++		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
++		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
++			po.left += this.scrollParent.scrollLeft();
++			po.top += this.scrollParent.scrollTop();
++		}
++
++		// This needs to be actually done for all browsers, since pageX/pageY includes this information
++		// with an ugly IE fix
++		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
++			po = { top: 0, left: 0 };
++		}
++
++		return {
++			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
++			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
++		};
++
++	},
++
++	_getRelativeOffset: function() {
++
++		if(this.cssPosition === "relative") {
++			var p = this.currentItem.position();
++			return {
++				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
++				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
++			};
++		} else {
++			return { top: 0, left: 0 };
++		}
++
++	},
++
++	_cacheMargins: function() {
++		this.margins = {
++			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
++			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
++		};
++	},
++
++	_cacheHelperProportions: function() {
++		this.helperProportions = {
++			width: this.helper.outerWidth(),
++			height: this.helper.outerHeight()
++		};
++	},
++
++	_setContainment: function() {
++
++		var ce, co, over,
++			o = this.options;
++		if(o.containment === "parent") {
++			o.containment = this.helper[0].parentNode;
++		}
++		if(o.containment === "document" || o.containment === "window") {
++			this.containment = [
++				0 - this.offset.relative.left - this.offset.parent.left,
++				0 - this.offset.relative.top - this.offset.parent.top,
++				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
++				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++		if(!(/^(document|window|parent)$/).test(o.containment)) {
++			ce = $(o.containment)[0];
++			co = $(o.containment).offset();
++			over = ($(ce).css("overflow") !== "hidden");
++
++			this.containment = [
++				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
++				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
++				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
++				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
++			];
++		}
++
++	},
++
++	_convertPositionTo: function(d, pos) {
++
++		if(!pos) {
++			pos = this.position;
++		}
++		var mod = d === "absolute" ? 1 : -1,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
++			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		return {
++			top: (
++				pos.top	+																// The absolute mouse position
++				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
++			),
++			left: (
++				pos.left +																// The absolute mouse position
++				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
++			)
++		};
++
++	},
++
++	_generatePosition: function(event) {
++
++		var top, left,
++			o = this.options,
++			pageX = event.pageX,
++			pageY = event.pageY,
++			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
++
++		// This is another very weird special case that only happens for relative elements:
++		// 1. If the css position is relative
++		// 2. and the scroll parent is the document or similar to the offset parent
++		// we have to refresh the relative offset during the scroll so there are no jumps
++		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
++			this.offset.relative = this._getRelativeOffset();
++		}
++
++		/*
++		 * - Position constraining -
++		 * Constrain the position to a mix of grid, containment.
++		 */
++
++		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
++
++			if(this.containment) {
++				if(event.pageX - this.offset.click.left < this.containment[0]) {
++					pageX = this.containment[0] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top < this.containment[1]) {
++					pageY = this.containment[1] + this.offset.click.top;
++				}
++				if(event.pageX - this.offset.click.left > this.containment[2]) {
++					pageX = this.containment[2] + this.offset.click.left;
++				}
++				if(event.pageY - this.offset.click.top > this.containment[3]) {
++					pageY = this.containment[3] + this.offset.click.top;
++				}
++			}
++
++			if(o.grid) {
++				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
++				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
++
++				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
++				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
++			}
++
++		}
++
++		return {
++			top: (
++				pageY -																// The absolute mouse position
++				this.offset.click.top -													// Click offset (relative to the element)
++				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
++			),
++			left: (
++				pageX -																// The absolute mouse position
++				this.offset.click.left -												// Click offset (relative to the element)
++				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
++				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
++				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
++			)
++		};
++
++	},
++
++	_rearrange: function(event, i, a, hardRefresh) {
++
++		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
++
++		//Various things done here to improve the performance:
++		// 1. we create a setTimeout, that calls refreshPositions
++		// 2. on the instance, we have a counter variable, that get's higher after every append
++		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
++		// 4. this lets only the last addition to the timeout stack through
++		this.counter = this.counter ? ++this.counter : 1;
++		var counter = this.counter;
++
++		this._delay(function() {
++			if(counter === this.counter) {
++				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
++			}
++		});
++
++	},
++
++	_clear: function(event, noPropagation) {
++
++		this.reverting = false;
++		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
++		// everything else normalized again
++		var i,
++			delayedTriggers = [];
++
++		// We first have to update the dom position of the actual currentItem
++		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
++		if(!this._noFinalSort && this.currentItem.parent().length) {
++			this.placeholder.before(this.currentItem);
++		}
++		this._noFinalSort = null;
++
++		if(this.helper[0] === this.currentItem[0]) {
++			for(i in this._storedCSS) {
++				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
++					this._storedCSS[i] = "";
++				}
++			}
++			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
++		} else {
++			this.currentItem.show();
++		}
++
++		if(this.fromOutside && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
++		}
++		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
++			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
++		}
++
++		// Check if the items Container has Changed and trigger appropriate
++		// events.
++		if (this !== this.currentContainer) {
++			if(!noPropagation) {
++				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
++			}
++		}
++
++
++		//Post events to containers
++		for (i = this.containers.length - 1; i >= 0; i--){
++			if(!noPropagation) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++			}
++			if(this.containers[i].containerCache.over) {
++				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
++				this.containers[i].containerCache.over = 0;
++			}
++		}
++
++		//Do what was originally in plugins
++		if ( this.storedCursor ) {
++			this.document.find( "body" ).css( "cursor", this.storedCursor );
++			this.storedStylesheet.remove();
++		}
++		if(this._storedOpacity) {
++			this.helper.css("opacity", this._storedOpacity);
++		}
++		if(this._storedZIndex) {
++			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
++		}
++
++		this.dragging = false;
++		if(this.cancelHelperRemoval) {
++			if(!noPropagation) {
++				this._trigger("beforeStop", event, this._uiHash());
++				for (i=0; i < delayedTriggers.length; i++) {
++					delayedTriggers[i].call(this, event);
++				} //Trigger all delayed events
++				this._trigger("stop", event, this._uiHash());
++			}
++
++			this.fromOutside = false;
++			return false;
++		}
++
++		if(!noPropagation) {
++			this._trigger("beforeStop", event, this._uiHash());
++		}
++
++		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
++		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
++
++		if(this.helper[0] !== this.currentItem[0]) {
++			this.helper.remove();
++		}
++		this.helper = null;
++
++		if(!noPropagation) {
++			for (i=0; i < delayedTriggers.length; i++) {
++				delayedTriggers[i].call(this, event);
++			} //Trigger all delayed events
++			this._trigger("stop", event, this._uiHash());
++		}
++
++		this.fromOutside = false;
++		return true;
++
++	},
++
++	_trigger: function() {
++		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
++			this.cancel();
++		}
++	},
++
++	_uiHash: function(_inst) {
++		var inst = _inst || this;
++		return {
++			helper: inst.helper,
++			placeholder: inst.placeholder || $([]),
++			position: inst.position,
++			originalPosition: inst.originalPosition,
++			offset: inst.positionAbs,
++			item: inst.currentItem,
++			sender: _inst ? _inst.element : null
++		};
++	}
++
++});
++
++})(jQuery);
++(function( $, undefined ) {
++
++var uid = 0,
++	hideProps = {},
++	showProps = {};
++
++hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
++	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
++showProps.height = showProps.paddingTop = showProps.paddingBottom =
++	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
++
++$.widget( "ui.accordion", {
++	version: "1.10.3",
++	options: {
++		active: 0,
++		animate: {},
++		collapsible: false,
++		event: "click",
++		header: "> li > :first-child,> :not(li):even",
++		heightStyle: "auto",
++		icons: {
++			activeHeader: "ui-icon-triangle-1-s",
++			header: "ui-icon-triangle-1-e"
++		},
++
++		// callbacks
++		activate: null,
++		beforeActivate: null
++	},
++
++	_create: function() {
++		var options = this.options;
++		this.prevShow = this.prevHide = $();
++		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
++			// ARIA
++			.attr( "role", "tablist" );
++
++		// don't allow collapsible: false and active: false / null
++		if ( !options.collapsible && (options.active === false || options.active == null) ) {
++			options.active = 0;
++		}
++
++		this._processPanels();
++		// handle negative values
++		if ( options.active < 0 ) {
++			options.active += this.headers.length;
++		}
++		this._refresh();
++	},
++
++	_getCreateEventData: function() {
++		return {
++			header: this.active,
++			panel: !this.active.length ? $() : this.active.next(),
++			content: !this.active.length ? $() : this.active.next()
++		};
++	},
++
++	_createIcons: function() {
++		var icons = this.options.icons;
++		if ( icons ) {
++			$( "<span>" )
++				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
++				.prependTo( this.headers );
++			this.active.children( ".ui-accordion-header-icon" )
++				.removeClass( icons.header )
++				.addClass( icons.activeHeader );
++			this.headers.addClass( "ui-accordion-icons" );
++		}
++	},
++
++	_destroyIcons: function() {
++		this.headers
++			.removeClass( "ui-accordion-icons" )
++			.children( ".ui-accordion-header-icon" )
++				.remove();
++	},
++
++	_destroy: function() {
++		var contents;
++
++		// clean up main element
++		this.element
++			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
++			.removeAttr( "role" );
++
++		// clean up headers
++		this.headers
++			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-selected" )
++			.removeAttr( "aria-controls" )
++			.removeAttr( "tabIndex" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		this._destroyIcons();
++
++		// clean up content panels
++		contents = this.headers.next()
++			.css( "display", "" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-expanded" )
++			.removeAttr( "aria-hidden" )
++			.removeAttr( "aria-labelledby" )
++			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
++			.each(function() {
++				if ( /^ui-accordion/.test( this.id ) ) {
++					this.removeAttribute( "id" );
++				}
++			});
++		if ( this.options.heightStyle !== "content" ) {
++			contents.css( "height", "" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "event" ) {
++			if ( this.options.event ) {
++				this._off( this.headers, this.options.event );
++			}
++			this._setupEvents( value );
++		}
++
++		this._super( key, value );
++
++		// setting collapsible: false while collapsed; open first panel
++		if ( key === "collapsible" && !value && this.options.active === false ) {
++			this._activate( 0 );
++		}
++
++		if ( key === "icons" ) {
++			this._destroyIcons();
++			if ( value ) {
++				this._createIcons();
++			}
++		}
++
++		// #5332 - opacity doesn't cascade to positioned elements in IE
++		// so we need to add the disabled class to the headers and panels
++		if ( key === "disabled" ) {
++			this.headers.add( this.headers.next() )
++				.toggleClass( "ui-state-disabled", !!value );
++		}
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		if ( event.altKey || event.ctrlKey ) {
++			return;
++		}
++
++		var keyCode = $.ui.keyCode,
++			length = this.headers.length,
++			currentIndex = this.headers.index( event.target ),
++			toFocus = false;
++
++		switch ( event.keyCode ) {
++			case keyCode.RIGHT:
++			case keyCode.DOWN:
++				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
++				break;
++			case keyCode.LEFT:
++			case keyCode.UP:
++				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
++				break;
++			case keyCode.SPACE:
++			case keyCode.ENTER:
++				this._eventHandler( event );
++				break;
++			case keyCode.HOME:
++				toFocus = this.headers[ 0 ];
++				break;
++			case keyCode.END:
++				toFocus = this.headers[ length - 1 ];
++				break;
++		}
++
++		if ( toFocus ) {
++			$( event.target ).attr( "tabIndex", -1 );
++			$( toFocus ).attr( "tabIndex", 0 );
++			toFocus.focus();
++			event.preventDefault();
++		}
++	},
++
++	_panelKeyDown : function( event ) {
++		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
++			$( event.currentTarget ).prev().focus();
++		}
++	},
++
++	refresh: function() {
++		var options = this.options;
++		this._processPanels();
++
++		// was collapsed or no panel
++		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
++			options.active = false;
++			this.active = $();
++		// active false only when collapsible is true
++		} else if ( options.active === false ) {
++			this._activate( 0 );
++		// was active, but active panel is gone
++		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining panel are disabled
++			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous panel
++			} else {
++				this._activate( Math.max( 0, options.active - 1 ) );
++			}
++		// was active, active panel still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.headers.index( this.active );
++		}
++
++		this._destroyIcons();
++
++		this._refresh();
++	},
++
++	_processPanels: function() {
++		this.headers = this.element.find( this.options.header )
++			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
++
++		this.headers.next()
++			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
++			.filter(":not(.ui-accordion-content-active)")
++			.hide();
++	},
++
++	_refresh: function() {
++		var maxHeight,
++			options = this.options,
++			heightStyle = options.heightStyle,
++			parent = this.element.parent(),
++			accordionId = this.accordionId = "ui-accordion-" +
++				(this.element.attr( "id" ) || ++uid);
++
++		this.active = this._findActive( options.active )
++			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
++			.removeClass( "ui-corner-all" );
++		this.active.next()
++			.addClass( "ui-accordion-content-active" )
++			.show();
++
++		this.headers
++			.attr( "role", "tab" )
++			.each(function( i ) {
++				var header = $( this ),
++					headerId = header.attr( "id" ),
++					panel = header.next(),
++					panelId = panel.attr( "id" );
++				if ( !headerId ) {
++					headerId = accordionId + "-header-" + i;
++					header.attr( "id", headerId );
++				}
++				if ( !panelId ) {
++					panelId = accordionId + "-panel-" + i;
++					panel.attr( "id", panelId );
++				}
++				header.attr( "aria-controls", panelId );
++				panel.attr( "aria-labelledby", headerId );
++			})
++			.next()
++				.attr( "role", "tabpanel" );
++
++		this.headers
++			.not( this.active )
++			.attr({
++				"aria-selected": "false",
++				tabIndex: -1
++			})
++			.next()
++				.attr({
++					"aria-expanded": "false",
++					"aria-hidden": "true"
++				})
++				.hide();
++
++		// make sure at least one header is in the tab order
++		if ( !this.active.length ) {
++			this.headers.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active.attr({
++				"aria-selected": "true",
++				tabIndex: 0
++			})
++			.next()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++
++		this._createIcons();
++
++		this._setupEvents( options.event );
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.headers.each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.headers.next()
++				.each(function() {
++					$( this ).height( Math.max( 0, maxHeight -
++						$( this ).innerHeight() + $( this ).height() ) );
++				})
++				.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.headers.next()
++				.each(function() {
++					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
++				})
++				.height( maxHeight );
++		}
++	},
++
++	_activate: function( index ) {
++		var active = this._findActive( index )[ 0 ];
++
++		// trying to activate the already active panel
++		if ( active === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the currently active header
++		active = active || this.active[ 0 ];
++
++		this._eventHandler({
++			target: active,
++			currentTarget: active,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( selector ) {
++		return typeof selector === "number" ? this.headers.eq( selector ) : $();
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			keydown: "_keydown"
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.headers.add( this.headers.next() ) );
++		this._on( this.headers, events );
++		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
++		this._hoverable( this.headers );
++		this._focusable( this.headers );
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			clicked = $( event.currentTarget ),
++			clickedIsActive = clicked[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : clicked.next(),
++			toHide = active.next(),
++			eventData = {
++				oldHeader: active,
++				oldPanel: toHide,
++				newHeader: collapsing ? $() : clicked,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if (
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.headers.index( clicked );
++
++		// when the call to ._toggle() comes after the class changes
++		// it causes a very odd bug in IE 8 (see #6720)
++		this.active = clickedIsActive ? $() : clicked;
++		this._toggle( eventData );
++
++		// switch classes
++		// corner classes on the previously active header stay after the animation
++		active.removeClass( "ui-accordion-header-active ui-state-active" );
++		if ( options.icons ) {
++			active.children( ".ui-accordion-header-icon" )
++				.removeClass( options.icons.activeHeader )
++				.addClass( options.icons.header );
++		}
++
++		if ( !clickedIsActive ) {
++			clicked
++				.removeClass( "ui-corner-all" )
++				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
++			if ( options.icons ) {
++				clicked.children( ".ui-accordion-header-icon" )
++					.removeClass( options.icons.header )
++					.addClass( options.icons.activeHeader );
++			}
++
++			clicked
++				.next()
++				.addClass( "ui-accordion-content-active" );
++		}
++	},
++
++	_toggle: function( data ) {
++		var toShow = data.newPanel,
++			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
++
++		// handle activating a panel during the animation for another activation
++		this.prevShow.add( this.prevHide ).stop( true, true );
++		this.prevShow = toShow;
++		this.prevHide = toHide;
++
++		if ( this.options.animate ) {
++			this._animate( toShow, toHide, data );
++		} else {
++			toHide.hide();
++			toShow.show();
++			this._toggleComplete( data );
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		toHide.prev().attr( "aria-selected", "false" );
++		// if we're switching panels, remove the old header from the tab order
++		// if we're opening from collapsed state, remove the previous header from the tab order
++		// if we're collapsing, then keep the collapsing header in the tab order
++		if ( toShow.length && toHide.length ) {
++			toHide.prev().attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.headers.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow
++			.attr({
++				"aria-expanded": "true",
++				"aria-hidden": "false"
++			})
++			.prev()
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++	},
++
++	_animate: function( toShow, toHide, data ) {
++		var total, easing, duration,
++			that = this,
++			adjust = 0,
++			down = toShow.length &&
++				( !toHide.length || ( toShow.index() < toHide.index() ) ),
++			animate = this.options.animate || {},
++			options = down && animate.down || animate,
++			complete = function() {
++				that._toggleComplete( data );
++			};
++
++		if ( typeof options === "number" ) {
++			duration = options;
++		}
++		if ( typeof options === "string" ) {
++			easing = options;
++		}
++		// fall back from options to animation in case of partial down settings
++		easing = easing || options.easing || animate.easing;
++		duration = duration || options.duration || animate.duration;
++
++		if ( !toHide.length ) {
++			return toShow.animate( showProps, duration, easing, complete );
++		}
++		if ( !toShow.length ) {
++			return toHide.animate( hideProps, duration, easing, complete );
++		}
++
++		total = toShow.show().outerHeight();
++		toHide.animate( hideProps, {
++			duration: duration,
++			easing: easing,
++			step: function( now, fx ) {
++				fx.now = Math.round( now );
++			}
++		});
++		toShow
++			.hide()
++			.animate( showProps, {
++				duration: duration,
++				easing: easing,
++				complete: complete,
++				step: function( now, fx ) {
++					fx.now = Math.round( now );
++					if ( fx.prop !== "height" ) {
++						adjust += fx.now;
++					} else if ( that.options.heightStyle !== "content" ) {
++						fx.now = Math.round( total - toHide.outerHeight() - adjust );
++						adjust = 0;
++					}
++				}
++			});
++	},
++
++	_toggleComplete: function( data ) {
++		var toHide = data.oldPanel;
++
++		toHide
++			.removeClass( "ui-accordion-content-active" )
++			.prev()
++				.removeClass( "ui-corner-top" )
++				.addClass( "ui-corner-all" );
++
++		// Work around for rendering bug in IE (#5421)
++		if ( toHide.length ) {
++			toHide.parent()[0].className = toHide.parent()[0].className;
++		}
++
++		this._trigger( "activate", null, data );
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++// used to prevent race conditions with remote data sources
++var requestIndex = 0;
++
++$.widget( "ui.autocomplete", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	options: {
++		appendTo: null,
++		autoFocus: false,
++		delay: 300,
++		minLength: 1,
++		position: {
++			my: "left top",
++			at: "left bottom",
++			collision: "none"
++		},
++		source: null,
++
++		// callbacks
++		change: null,
++		close: null,
++		focus: null,
++		open: null,
++		response: null,
++		search: null,
++		select: null
++	},
++
++	pending: 0,
++
++	_create: function() {
++		// Some browsers only repeat keydown events, not keypress events,
++		// so we use the suppressKeyPress flag to determine if we've already
++		// handled the keydown event. #7269
++		// Unfortunately the code for & in keypress is the same as the up arrow,
++		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
++		// events when we know the keydown event was used to modify the
++		// search term. #7799
++		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
++			nodeName = this.element[0].nodeName.toLowerCase(),
++			isTextarea = nodeName === "textarea",
++			isInput = nodeName === "input";
++
++		this.isMultiLine =
++			// Textareas are always multi-line
++			isTextarea ? true :
++			// Inputs are always single-line, even if inside a contentEditable element
++			// IE also treats inputs as contentEditable
++			isInput ? false :
++			// All other element types are determined by whether or not they're contentEditable
++			this.element.prop( "isContentEditable" );
++
++		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
++		this.isNewMenu = true;
++
++		this.element
++			.addClass( "ui-autocomplete-input" )
++			.attr( "autocomplete", "off" );
++
++		this._on( this.element, {
++			keydown: function( event ) {
++				/*jshint maxcomplexity:15*/
++				if ( this.element.prop( "readOnly" ) ) {
++					suppressKeyPress = true;
++					suppressInput = true;
++					suppressKeyPressRepeat = true;
++					return;
++				}
++
++				suppressKeyPress = false;
++				suppressInput = false;
++				suppressKeyPressRepeat = false;
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					suppressKeyPress = true;
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					suppressKeyPress = true;
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					suppressKeyPress = true;
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					suppressKeyPress = true;
++					this._keyEvent( "next", event );
++					break;
++				case keyCode.ENTER:
++				case keyCode.NUMPAD_ENTER:
++					// when menu is open and has focus
++					if ( this.menu.active ) {
++						// #6055 - Opera still allows the keypress to occur
++						// which causes forms to submit
++						suppressKeyPress = true;
++						event.preventDefault();
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.TAB:
++					if ( this.menu.active ) {
++						this.menu.select( event );
++					}
++					break;
++				case keyCode.ESCAPE:
++					if ( this.menu.element.is( ":visible" ) ) {
++						this._value( this.term );
++						this.close( event );
++						// Different browsers have different default behavior for escape
++						// Single press can mean undo or clear
++						// Double press in IE means clear the whole form
++						event.preventDefault();
++					}
++					break;
++				default:
++					suppressKeyPressRepeat = true;
++					// search timeout should be triggered before the input value is changed
++					this._searchTimeout( event );
++					break;
++				}
++			},
++			keypress: function( event ) {
++				if ( suppressKeyPress ) {
++					suppressKeyPress = false;
++					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++						event.preventDefault();
++					}
++					return;
++				}
++				if ( suppressKeyPressRepeat ) {
++					return;
++				}
++
++				// replicate some key handlers to allow them to repeat in Firefox and Opera
++				var keyCode = $.ui.keyCode;
++				switch( event.keyCode ) {
++				case keyCode.PAGE_UP:
++					this._move( "previousPage", event );
++					break;
++				case keyCode.PAGE_DOWN:
++					this._move( "nextPage", event );
++					break;
++				case keyCode.UP:
++					this._keyEvent( "previous", event );
++					break;
++				case keyCode.DOWN:
++					this._keyEvent( "next", event );
++					break;
++				}
++			},
++			input: function( event ) {
++				if ( suppressInput ) {
++					suppressInput = false;
++					event.preventDefault();
++					return;
++				}
++				this._searchTimeout( event );
++			},
++			focus: function() {
++				this.selectedItem = null;
++				this.previous = this._value();
++			},
++			blur: function( event ) {
++				if ( this.cancelBlur ) {
++					delete this.cancelBlur;
++					return;
++				}
++
++				clearTimeout( this.searching );
++				this.close( event );
++				this._change( event );
++			}
++		});
++
++		this._initSource();
++		this.menu = $( "<ul>" )
++			.addClass( "ui-autocomplete ui-front" )
++			.appendTo( this._appendTo() )
++			.menu({
++				// disable ARIA support, the live region takes care of that
++				role: null
++			})
++			.hide()
++			.data( "ui-menu" );
++
++		this._on( this.menu.element, {
++			mousedown: function( event ) {
++				// prevent moving focus out of the text field
++				event.preventDefault();
++
++				// IE doesn't prevent moving focus even with event.preventDefault()
++				// so we set a flag to know when we should ignore the blur event
++				this.cancelBlur = true;
++				this._delay(function() {
++					delete this.cancelBlur;
++				});
++
++				// clicking on the scrollbar causes focus to shift to the body
++				// but we can't detect a mouseup or a click immediately afterward
++				// so we have to track the next mousedown and close the menu if
++				// the user clicks somewhere outside of the autocomplete
++				var menuElement = this.menu.element[ 0 ];
++				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
++					this._delay(function() {
++						var that = this;
++						this.document.one( "mousedown", function( event ) {
++							if ( event.target !== that.element[ 0 ] &&
++									event.target !== menuElement &&
++									!$.contains( menuElement, event.target ) ) {
++								that.close();
++							}
++						});
++					});
++				}
++			},
++			menufocus: function( event, ui ) {
++				// support: Firefox
++				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
++				if ( this.isNewMenu ) {
++					this.isNewMenu = false;
++					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
++						this.menu.blur();
++
++						this.document.one( "mousemove", function() {
++							$( event.target ).trigger( event.originalEvent );
++						});
++
++						return;
++					}
++				}
++
++				var item = ui.item.data( "ui-autocomplete-item" );
++				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
++					// use value to match what will end up in the input, if it was a key event
++					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
++						this._value( item.value );
++					}
++				} else {
++					// Normally the input is populated with the item's value as the
++					// menu is navigated, causing screen readers to notice a change and
++					// announce the item. Since the focus event was canceled, this doesn't
++					// happen, so we update the live region so that screen readers can
++					// still notice the change and announce it.
++					this.liveRegion.text( item.value );
++				}
++			},
++			menuselect: function( event, ui ) {
++				var item = ui.item.data( "ui-autocomplete-item" ),
++					previous = this.previous;
++
++				// only trigger when focus was lost (click on menu)
++				if ( this.element[0] !== this.document[0].activeElement ) {
++					this.element.focus();
++					this.previous = previous;
++					// #6109 - IE triggers two focus events and the second
++					// is asynchronous, so we need to reset the previous
++					// term synchronously and asynchronously :-(
++					this._delay(function() {
++						this.previous = previous;
++						this.selectedItem = item;
++					});
++				}
++
++				if ( false !== this._trigger( "select", event, { item: item } ) ) {
++					this._value( item.value );
++				}
++				// reset the term after the select event
++				// this allows custom select handling to work properly
++				this.term = this._value();
++
++				this.close( event );
++				this.selectedItem = item;
++			}
++		});
++
++		this.liveRegion = $( "<span>", {
++				role: "status",
++				"aria-live": "polite"
++			})
++			.addClass( "ui-helper-hidden-accessible" )
++			.insertBefore( this.element );
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_destroy: function() {
++		clearTimeout( this.searching );
++		this.element
++			.removeClass( "ui-autocomplete-input" )
++			.removeAttr( "autocomplete" );
++		this.menu.element.remove();
++		this.liveRegion.remove();
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "source" ) {
++			this._initSource();
++		}
++		if ( key === "appendTo" ) {
++			this.menu.element.appendTo( this._appendTo() );
++		}
++		if ( key === "disabled" && value && this.xhr ) {
++			this.xhr.abort();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++
++		if ( element ) {
++			element = element.jquery || element.nodeType ?
++				$( element ) :
++				this.document.find( element ).eq( 0 );
++		}
++
++		if ( !element ) {
++			element = this.element.closest( ".ui-front" );
++		}
++
++		if ( !element.length ) {
++			element = this.document[0].body;
++		}
++
++		return element;
++	},
++
++	_initSource: function() {
++		var array, url,
++			that = this;
++		if ( $.isArray(this.options.source) ) {
++			array = this.options.source;
++			this.source = function( request, response ) {
++				response( $.ui.autocomplete.filter( array, request.term ) );
++			};
++		} else if ( typeof this.options.source === "string" ) {
++			url = this.options.source;
++			this.source = function( request, response ) {
++				if ( that.xhr ) {
++					that.xhr.abort();
++				}
++				that.xhr = $.ajax({
++					url: url,
++					data: request,
++					dataType: "json",
++					success: function( data ) {
++						response( data );
++					},
++					error: function() {
++						response( [] );
++					}
++				});
++			};
++		} else {
++			this.source = this.options.source;
++		}
++	},
++
++	_searchTimeout: function( event ) {
++		clearTimeout( this.searching );
++		this.searching = this._delay(function() {
++			// only search if the value has changed
++			if ( this.term !== this._value() ) {
++				this.selectedItem = null;
++				this.search( null, event );
++			}
++		}, this.options.delay );
++	},
++
++	search: function( value, event ) {
++		value = value != null ? value : this._value();
++
++		// always save the actual value, not the one passed as an argument
++		this.term = this._value();
++
++		if ( value.length < this.options.minLength ) {
++			return this.close( event );
++		}
++
++		if ( this._trigger( "search", event ) === false ) {
++			return;
++		}
++
++		return this._search( value );
++	},
++
++	_search: function( value ) {
++		this.pending++;
++		this.element.addClass( "ui-autocomplete-loading" );
++		this.cancelSearch = false;
++
++		this.source( { term: value }, this._response() );
++	},
++
++	_response: function() {
++		var that = this,
++			index = ++requestIndex;
++
++		return function( content ) {
++			if ( index === requestIndex ) {
++				that.__response( content );
++			}
++
++			that.pending--;
++			if ( !that.pending ) {
++				that.element.removeClass( "ui-autocomplete-loading" );
++			}
++		};
++	},
++
++	__response: function( content ) {
++		if ( content ) {
++			content = this._normalize( content );
++		}
++		this._trigger( "response", null, { content: content } );
++		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
++			this._suggest( content );
++			this._trigger( "open" );
++		} else {
++			// use ._close() instead of .close() so we don't cancel future searches
++			this._close();
++		}
++	},
++
++	close: function( event ) {
++		this.cancelSearch = true;
++		this._close( event );
++	},
++
++	_close: function( event ) {
++		if ( this.menu.element.is( ":visible" ) ) {
++			this.menu.element.hide();
++			this.menu.blur();
++			this.isNewMenu = true;
++			this._trigger( "close", event );
++		}
++	},
++
++	_change: function( event ) {
++		if ( this.previous !== this._value() ) {
++			this._trigger( "change", event, { item: this.selectedItem } );
++		}
++	},
++
++	_normalize: function( items ) {
++		// assume all items have the right format when the first item is complete
++		if ( items.length && items[0].label && items[0].value ) {
++			return items;
++		}
++		return $.map( items, function( item ) {
++			if ( typeof item === "string" ) {
++				return {
++					label: item,
++					value: item
++				};
++			}
++			return $.extend({
++				label: item.label || item.value,
++				value: item.value || item.label
++			}, item );
++		});
++	},
++
++	_suggest: function( items ) {
++		var ul = this.menu.element.empty();
++		this._renderMenu( ul, items );
++		this.isNewMenu = true;
++		this.menu.refresh();
++
++		// size and position menu
++		ul.show();
++		this._resizeMenu();
++		ul.position( $.extend({
++			of: this.element
++		}, this.options.position ));
++
++		if ( this.options.autoFocus ) {
++			this.menu.next();
++		}
++	},
++
++	_resizeMenu: function() {
++		var ul = this.menu.element;
++		ul.outerWidth( Math.max(
++			// Firefox wraps long text (possibly a rounding bug)
++			// so we add 1px to avoid the wrapping (#7513)
++			ul.width( "" ).outerWidth() + 1,
++			this.element.outerWidth()
++		) );
++	},
++
++	_renderMenu: function( ul, items ) {
++		var that = this;
++		$.each( items, function( index, item ) {
++			that._renderItemData( ul, item );
++		});
++	},
++
++	_renderItemData: function( ul, item ) {
++		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
++	},
++
++	_renderItem: function( ul, item ) {
++		return $( "<li>" )
++			.append( $( "<a>" ).text( item.label ) )
++			.appendTo( ul );
++	},
++
++	_move: function( direction, event ) {
++		if ( !this.menu.element.is( ":visible" ) ) {
++			this.search( null, event );
++			return;
++		}
++		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
++				this.menu.isLastItem() && /^next/.test( direction ) ) {
++			this._value( this.term );
++			this.menu.blur();
++			return;
++		}
++		this.menu[ direction ]( event );
++	},
++
++	widget: function() {
++		return this.menu.element;
++	},
++
++	_value: function() {
++		return this.valueMethod.apply( this.element, arguments );
++	},
++
++	_keyEvent: function( keyEvent, event ) {
++		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
++			this._move( keyEvent, event );
++
++			// prevents moving cursor to beginning/end of the text field in some browsers
++			event.preventDefault();
++		}
++	}
++});
++
++$.extend( $.ui.autocomplete, {
++	escapeRegex: function( value ) {
++		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
++	},
++	filter: function(array, term) {
++		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
++		return $.grep( array, function(value) {
++			return matcher.test( value.label || value.value || value );
++		});
++	}
++});
++
++
++// live region extension, adding a `messages` option
++// NOTE: This is an experimental API. We are still investigating
++// a full solution for string manipulation and internationalization.
++$.widget( "ui.autocomplete", $.ui.autocomplete, {
++	options: {
++		messages: {
++			noResults: "No search results.",
++			results: function( amount ) {
++				return amount + ( amount > 1 ? " results are" : " result is" ) +
++					" available, use up and down arrow keys to navigate.";
++			}
++		}
++	},
++
++	__response: function( content ) {
++		var message;
++		this._superApply( arguments );
++		if ( this.options.disabled || this.cancelSearch ) {
++			return;
++		}
++		if ( content && content.length ) {
++			message = this.options.messages.results( content.length );
++		} else {
++			message = this.options.messages.noResults;
++		}
++		this.liveRegion.text( message );
++	}
++});
++
++}( jQuery ));
++(function( $, undefined ) {
++
++var lastActive, startXPos, startYPos, clickDragged,
++	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
++	stateClasses = "ui-state-hover ui-state-active ",
++	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
++	formResetHandler = function() {
++		var form = $( this );
++		setTimeout(function() {
++			form.find( ":ui-button" ).button( "refresh" );
++		}, 1 );
++	},
++	radioGroup = function( radio ) {
++		var name = radio.name,
++			form = radio.form,
++			radios = $( [] );
++		if ( name ) {
++			name = name.replace( /'/g, "\\'" );
++			if ( form ) {
++				radios = $( form ).find( "[name='" + name + "']" );
++			} else {
++				radios = $( "[name='" + name + "']", radio.ownerDocument )
++					.filter(function() {
++						return !this.form;
++					});
++			}
++		}
++		return radios;
++	};
++
++$.widget( "ui.button", {
++	version: "1.10.3",
++	defaultElement: "<button>",
++	options: {
++		disabled: null,
++		text: true,
++		label: null,
++		icons: {
++			primary: null,
++			secondary: null
++		}
++	},
++	_create: function() {
++		this.element.closest( "form" )
++			.unbind( "reset" + this.eventNamespace )
++			.bind( "reset" + this.eventNamespace, formResetHandler );
++
++		if ( typeof this.options.disabled !== "boolean" ) {
++			this.options.disabled = !!this.element.prop( "disabled" );
++		} else {
++			this.element.prop( "disabled", this.options.disabled );
++		}
++
++		this._determineButtonType();
++		this.hasTitle = !!this.buttonElement.attr( "title" );
++
++		var that = this,
++			options = this.options,
++			toggleButton = this.type === "checkbox" || this.type === "radio",
++			activeClass = !toggleButton ? "ui-state-active" : "",
++			focusClass = "ui-state-focus";
++
++		if ( options.label === null ) {
++			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
++		}
++
++		this._hoverable( this.buttonElement );
++
++		this.buttonElement
++			.addClass( baseClasses )
++			.attr( "role", "button" )
++			.bind( "mouseenter" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				if ( this === lastActive ) {
++					$( this ).addClass( "ui-state-active" );
++				}
++			})
++			.bind( "mouseleave" + this.eventNamespace, function() {
++				if ( options.disabled ) {
++					return;
++				}
++				$( this ).removeClass( activeClass );
++			})
++			.bind( "click" + this.eventNamespace, function( event ) {
++				if ( options.disabled ) {
++					event.preventDefault();
++					event.stopImmediatePropagation();
++				}
++			});
++
++		this.element
++			.bind( "focus" + this.eventNamespace, function() {
++				// no need to check disabled, focus won't be triggered anyway
++				that.buttonElement.addClass( focusClass );
++			})
++			.bind( "blur" + this.eventNamespace, function() {
++				that.buttonElement.removeClass( focusClass );
++			});
++
++		if ( toggleButton ) {
++			this.element.bind( "change" + this.eventNamespace, function() {
++				if ( clickDragged ) {
++					return;
++				}
++				that.refresh();
++			});
++			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
++			// prevents issue where button state changes but checkbox/radio checked state
++			// does not in Firefox (see ticket #6970)
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					clickDragged = false;
++					startXPos = event.pageX;
++					startYPos = event.pageY;
++				})
++				.bind( "mouseup" + this.eventNamespace, function( event ) {
++					if ( options.disabled ) {
++						return;
++					}
++					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
++						clickDragged = true;
++					}
++			});
++		}
++
++		if ( this.type === "checkbox" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++			});
++		} else if ( this.type === "radio" ) {
++			this.buttonElement.bind( "click" + this.eventNamespace, function() {
++				if ( options.disabled || clickDragged ) {
++					return false;
++				}
++				$( this ).addClass( "ui-state-active" );
++				that.buttonElement.attr( "aria-pressed", "true" );
++
++				var radio = that.element[ 0 ];
++				radioGroup( radio )
++					.not( radio )
++					.map(function() {
++						return $( this ).button( "widget" )[ 0 ];
++					})
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			});
++		} else {
++			this.buttonElement
++				.bind( "mousedown" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).addClass( "ui-state-active" );
++					lastActive = this;
++					that.document.one( "mouseup", function() {
++						lastActive = null;
++					});
++				})
++				.bind( "mouseup" + this.eventNamespace, function() {
++					if ( options.disabled ) {
++						return false;
++					}
++					$( this ).removeClass( "ui-state-active" );
++				})
++				.bind( "keydown" + this.eventNamespace, function(event) {
++					if ( options.disabled ) {
++						return false;
++					}
++					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
++						$( this ).addClass( "ui-state-active" );
++					}
++				})
++				// see #8559, we bind to blur here in case the button element loses
++				// focus between keydown and keyup, it would be left in an "active" state
++				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
++					$( this ).removeClass( "ui-state-active" );
++				});
++
++			if ( this.buttonElement.is("a") ) {
++				this.buttonElement.keyup(function(event) {
++					if ( event.keyCode === $.ui.keyCode.SPACE ) {
++						// TODO pass through original event correctly (just as 2nd argument doesn't work)
++						$( this ).click();
++					}
++				});
++			}
++		}
++
++		// TODO: pull out $.Widget's handling for the disabled option into
++		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
++		// be overridden by individual plugins
++		this._setOption( "disabled", options.disabled );
++		this._resetButton();
++	},
++
++	_determineButtonType: function() {
++		var ancestor, labelSelector, checked;
++
++		if ( this.element.is("[type=checkbox]") ) {
++			this.type = "checkbox";
++		} else if ( this.element.is("[type=radio]") ) {
++			this.type = "radio";
++		} else if ( this.element.is("input") ) {
++			this.type = "input";
++		} else {
++			this.type = "button";
++		}
++
++		if ( this.type === "checkbox" || this.type === "radio" ) {
++			// we don't search against the document in case the element
++			// is disconnected from the DOM
++			ancestor = this.element.parents().last();
++			labelSelector = "label[for='" + this.element.attr("id") + "']";
++			this.buttonElement = ancestor.find( labelSelector );
++			if ( !this.buttonElement.length ) {
++				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
++				this.buttonElement = ancestor.filter( labelSelector );
++				if ( !this.buttonElement.length ) {
++					this.buttonElement = ancestor.find( labelSelector );
++				}
++			}
++			this.element.addClass( "ui-helper-hidden-accessible" );
++
++			checked = this.element.is( ":checked" );
++			if ( checked ) {
++				this.buttonElement.addClass( "ui-state-active" );
++			}
++			this.buttonElement.prop( "aria-pressed", checked );
++		} else {
++			this.buttonElement = this.element;
++		}
++	},
++
++	widget: function() {
++		return this.buttonElement;
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-helper-hidden-accessible" );
++		this.buttonElement
++			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
++			.removeAttr( "role" )
++			.removeAttr( "aria-pressed" )
++			.html( this.buttonElement.find(".ui-button-text").html() );
++
++		if ( !this.hasTitle ) {
++			this.buttonElement.removeAttr( "title" );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		this._super( key, value );
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++			} else {
++				this.element.prop( "disabled", false );
++			}
++			return;
++		}
++		this._resetButton();
++	},
++
++	refresh: function() {
++		//See #8237 & #8828
++		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
++
++		if ( isDisabled !== this.options.disabled ) {
++			this._setOption( "disabled", isDisabled );
++		}
++		if ( this.type === "radio" ) {
++			radioGroup( this.element[0] ).each(function() {
++				if ( $( this ).is( ":checked" ) ) {
++					$( this ).button( "widget" )
++						.addClass( "ui-state-active" )
++						.attr( "aria-pressed", "true" );
++				} else {
++					$( this ).button( "widget" )
++						.removeClass( "ui-state-active" )
++						.attr( "aria-pressed", "false" );
++				}
++			});
++		} else if ( this.type === "checkbox" ) {
++			if ( this.element.is( ":checked" ) ) {
++				this.buttonElement
++					.addClass( "ui-state-active" )
++					.attr( "aria-pressed", "true" );
++			} else {
++				this.buttonElement
++					.removeClass( "ui-state-active" )
++					.attr( "aria-pressed", "false" );
++			}
++		}
++	},
++
++	_resetButton: function() {
++		if ( this.type === "input" ) {
++			if ( this.options.label ) {
++				this.element.val( this.options.label );
++			}
++			return;
++		}
++		var buttonElement = this.buttonElement.removeClass( typeClasses ),
++			buttonText = $( "<span></span>", this.document[0] )
++				.addClass( "ui-button-text" )
++				.html( this.options.label )
++				.appendTo( buttonElement.empty() )
++				.text(),
++			icons = this.options.icons,
++			multipleIcons = icons.primary && icons.secondary,
++			buttonClasses = [];
++
++		if ( icons.primary || icons.secondary ) {
++			if ( this.options.text ) {
++				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
++			}
++
++			if ( icons.primary ) {
++				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
++			}
++
++			if ( icons.secondary ) {
++				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
++			}
++
++			if ( !this.options.text ) {
++				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
++
++				if ( !this.hasTitle ) {
++					buttonElement.attr( "title", $.trim( buttonText ) );
++				}
++			}
++		} else {
++			buttonClasses.push( "ui-button-text-only" );
++		}
++		buttonElement.addClass( buttonClasses.join( " " ) );
++	}
++});
++
++$.widget( "ui.buttonset", {
++	version: "1.10.3",
++	options: {
++		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
++	},
++
++	_create: function() {
++		this.element.addClass( "ui-buttonset" );
++	},
++
++	_init: function() {
++		this.refresh();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "disabled" ) {
++			this.buttons.button( "option", key, value );
++		}
++
++		this._super( key, value );
++	},
++
++	refresh: function() {
++		var rtl = this.element.css( "direction" ) === "rtl";
++
++		this.buttons = this.element.find( this.options.items )
++			.filter( ":ui-button" )
++				.button( "refresh" )
++			.end()
++			.not( ":ui-button" )
++				.button()
++			.end()
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
++				.filter( ":first" )
++					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
++				.end()
++				.filter( ":last" )
++					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
++				.end()
++			.end();
++	},
++
++	_destroy: function() {
++		this.element.removeClass( "ui-buttonset" );
++		this.buttons
++			.map(function() {
++				return $( this ).button( "widget" )[ 0 ];
++			})
++				.removeClass( "ui-corner-left ui-corner-right" )
++			.end()
++			.button( "destroy" );
++	}
++});
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.extend($.ui, { datepicker: { version: "1.10.3" } });
++
++var PROP_NAME = "datepicker",
++	instActive;
++
++/* Date picker manager.
++   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
++   Settings for (groups of) date pickers are maintained in an instance object,
++   allowing multiple different settings on the same page. */
++
++function Datepicker() {
++	this._curInst = null; // The current instance in use
++	this._keyEvent = false; // If the last event was a key event
++	this._disabledInputs = []; // List of date picker inputs that have been disabled
++	this._datepickerShowing = false; // True if the popup picker is showing , false if not
++	this._inDialog = false; // True if showing within a "dialog", false if not
++	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
++	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
++	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
++	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
++	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
++	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
++	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
++	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
++	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
++	this.regional = []; // Available regional settings, indexed by language code
++	this.regional[""] = { // Default regional settings
++		closeText: "Done", // Display text for close link
++		prevText: "Prev", // Display text for previous month link
++		nextText: "Next", // Display text for next month link
++		currentText: "Today", // Display text for current month link
++		monthNames: ["January","February","March","April","May","June",
++			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
++		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
++		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
++		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
++		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
++		weekHeader: "Wk", // Column header for week of the year
++		dateFormat: "mm/dd/yy", // See format options on parseDate
++		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
++		isRTL: false, // True if right-to-left language, false if left-to-right
++		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
++		yearSuffix: "" // Additional text to append to the year in the month headers
++	};
++	this._defaults = { // Global defaults for all the date picker instances
++		showOn: "focus", // "focus" for popup on focus,
++			// "button" for trigger button, or "both" for either
++		showAnim: "fadeIn", // Name of jQuery animation for popup
++		showOptions: {}, // Options for enhanced animations
++		defaultDate: null, // Used when field is blank: actual date,
++			// +/-number for offset from today, null for today
++		appendText: "", // Display text following the input box, e.g. showing the format
++		buttonText: "...", // Text for trigger button
++		buttonImage: "", // URL for trigger button image
++		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
++		hideIfNoPrevNext: false, // True to hide next/previous month links
++			// if not applicable, false to just disable them
++		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
++		gotoCurrent: false, // True if today link goes back to current selection instead
++		changeMonth: false, // True if month can be selected directly, false if only prev/next
++		changeYear: false, // True if year can be selected directly, false if only prev/next
++		yearRange: "c-10:c+10", // Range of years to display in drop-down,
++			// either relative to today's year (-nn:+nn), relative to currently displayed year
++			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
++		showOtherMonths: false, // True to show dates in other months, false to leave blank
++		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
++		showWeek: false, // True to show week of the year, false to not show it
++		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
++			// takes a Date and returns the number of the week for it
++		shortYearCutoff: "+10", // Short year values < this are in the current century,
++			// > this are in the previous century,
++			// string value starting with "+" for current year + value
++		minDate: null, // The earliest selectable date, or null for no limit
++		maxDate: null, // The latest selectable date, or null for no limit
++		duration: "fast", // Duration of display/closure
++		beforeShowDay: null, // Function that takes a date and returns an array with
++			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
++			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
++		beforeShow: null, // Function that takes an input field and
++			// returns a set of custom settings for the date picker
++		onSelect: null, // Define a callback function when a date is selected
++		onChangeMonthYear: null, // Define a callback function when the month or year is changed
++		onClose: null, // Define a callback function when the datepicker is closed
++		numberOfMonths: 1, // Number of months to show at a time
++		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
++		stepMonths: 1, // Number of months to step back/forward
++		stepBigMonths: 12, // Number of months to step back/forward for the big links
++		altField: "", // Selector for an alternate field to store selected dates into
++		altFormat: "", // The date format to use for the alternate field
++		constrainInput: true, // The input is constrained by the current date format
++		showButtonPanel: false, // True to show button panel, false to not show it
++		autoSize: false, // True to size the input for the date format, false to leave as is
++		disabled: false // The initial disabled state
++	};
++	$.extend(this._defaults, this.regional[""]);
++	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
++}
++
++$.extend(Datepicker.prototype, {
++	/* Class name added to elements to indicate already configured with a date picker. */
++	markerClassName: "hasDatepicker",
++
++	//Keep track of the maximum number of rows displayed (see #7043)
++	maxRows: 4,
++
++	// TODO rename to "widget" when switching to widget factory
++	_widgetDatepicker: function() {
++		return this.dpDiv;
++	},
++
++	/* Override the default settings for all instances of the date picker.
++	 * @param  settings  object - the new settings to use as defaults (anonymous object)
++	 * @return the manager object
++	 */
++	setDefaults: function(settings) {
++		extendRemove(this._defaults, settings || {});
++		return this;
++	},
++
++	/* Attach the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
++	 */
++	_attachDatepicker: function(target, settings) {
++		var nodeName, inline, inst;
++		nodeName = target.nodeName.toLowerCase();
++		inline = (nodeName === "div" || nodeName === "span");
++		if (!target.id) {
++			this.uuid += 1;
++			target.id = "dp" + this.uuid;
++		}
++		inst = this._newInst($(target), inline);
++		inst.settings = $.extend({}, settings || {});
++		if (nodeName === "input") {
++			this._connectDatepicker(target, inst);
++		} else if (inline) {
++			this._inlineDatepicker(target, inst);
++		}
++	},
++
++	/* Create a new instance object. */
++	_newInst: function(target, inline) {
++		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
++		return {id: id, input: target, // associated target
++			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
++			drawMonth: 0, drawYear: 0, // month being drawn
++			inline: inline, // is datepicker inline or not
++			dpDiv: (!inline ? this.dpDiv : // presentation div
++			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
++	},
++
++	/* Attach the date picker to an input field. */
++	_connectDatepicker: function(target, inst) {
++		var input = $(target);
++		inst.append = $([]);
++		inst.trigger = $([]);
++		if (input.hasClass(this.markerClassName)) {
++			return;
++		}
++		this._attachments(input, inst);
++		input.addClass(this.markerClassName).keydown(this._doKeyDown).
++			keypress(this._doKeyPress).keyup(this._doKeyUp);
++		this._autoSize(inst);
++		$.data(target, PROP_NAME, inst);
++		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++	},
++
++	/* Make attachments based on settings. */
++	_attachments: function(input, inst) {
++		var showOn, buttonText, buttonImage,
++			appendText = this._get(inst, "appendText"),
++			isRTL = this._get(inst, "isRTL");
++
++		if (inst.append) {
++			inst.append.remove();
++		}
++		if (appendText) {
++			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
++			input[isRTL ? "before" : "after"](inst.append);
++		}
++
++		input.unbind("focus", this._showDatepicker);
++
++		if (inst.trigger) {
++			inst.trigger.remove();
++		}
++
++		showOn = this._get(inst, "showOn");
++		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
++			input.focus(this._showDatepicker);
++		}
++		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
++			buttonText = this._get(inst, "buttonText");
++			buttonImage = this._get(inst, "buttonImage");
++			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
++				$("<img/>").addClass(this._triggerClass).
++					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
++				$("<button type='button'></button>").addClass(this._triggerClass).
++					html(!buttonImage ? buttonText : $("<img/>").attr(
++					{ src:buttonImage, alt:buttonText, title:buttonText })));
++			input[isRTL ? "before" : "after"](inst.trigger);
++			inst.trigger.click(function() {
++				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
++					$.datepicker._hideDatepicker();
++				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
++					$.datepicker._hideDatepicker();
++					$.datepicker._showDatepicker(input[0]);
++				} else {
++					$.datepicker._showDatepicker(input[0]);
++				}
++				return false;
++			});
++		}
++	},
++
++	/* Apply the maximum length for the date format. */
++	_autoSize: function(inst) {
++		if (this._get(inst, "autoSize") && !inst.inline) {
++			var findMax, max, maxI, i,
++				date = new Date(2009, 12 - 1, 20), // Ensure double digits
++				dateFormat = this._get(inst, "dateFormat");
++
++			if (dateFormat.match(/[DM]/)) {
++				findMax = function(names) {
++					max = 0;
++					maxI = 0;
++					for (i = 0; i < names.length; i++) {
++						if (names[i].length > max) {
++							max = names[i].length;
++							maxI = i;
++						}
++					}
++					return maxI;
++				};
++				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
++					"monthNames" : "monthNamesShort"))));
++				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
++					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
++			}
++			inst.input.attr("size", this._formatDate(inst, date).length);
++		}
++	},
++
++	/* Attach an inline date picker to a div. */
++	_inlineDatepicker: function(target, inst) {
++		var divSpan = $(target);
++		if (divSpan.hasClass(this.markerClassName)) {
++			return;
++		}
++		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
++		$.data(target, PROP_NAME, inst);
++		this._setDate(inst, this._getDefaultDate(inst), true);
++		this._updateDatepicker(inst);
++		this._updateAlternate(inst);
++		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
++		if( inst.settings.disabled ) {
++			this._disableDatepicker( target );
++		}
++		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
++		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
++		inst.dpDiv.css( "display", "block" );
++	},
++
++	/* Pop-up the date picker in a "dialog" box.
++	 * @param  input element - ignored
++	 * @param  date	string or Date - the initial date to display
++	 * @param  onSelect  function - the function to call when a date is selected
++	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
++	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
++	 *					event - with x/y coordinates or
++	 *					leave empty for default (screen centre)
++	 * @return the manager object
++	 */
++	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
++		var id, browserWidth, browserHeight, scrollX, scrollY,
++			inst = this._dialogInst; // internal instance
++
++		if (!inst) {
++			this.uuid += 1;
++			id = "dp" + this.uuid;
++			this._dialogInput = $("<input type='text' id='" + id +
++				"' style='position: absolute; top: -100px; width: 0px;'/>");
++			this._dialogInput.keydown(this._doKeyDown);
++			$("body").append(this._dialogInput);
++			inst = this._dialogInst = this._newInst(this._dialogInput, false);
++			inst.settings = {};
++			$.data(this._dialogInput[0], PROP_NAME, inst);
++		}
++		extendRemove(inst.settings, settings || {});
++		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
++		this._dialogInput.val(date);
++
++		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
++		if (!this._pos) {
++			browserWidth = document.documentElement.clientWidth;
++			browserHeight = document.documentElement.clientHeight;
++			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
++			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
++			this._pos = // should use actual width/height below
++				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
++		}
++
++		// move input on screen for focus, but hidden behind dialog
++		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
++		inst.settings.onSelect = onSelect;
++		this._inDialog = true;
++		this.dpDiv.addClass(this._dialogClass);
++		this._showDatepicker(this._dialogInput[0]);
++		if ($.blockUI) {
++			$.blockUI(this.dpDiv);
++		}
++		$.data(this._dialogInput[0], PROP_NAME, inst);
++		return this;
++	},
++
++	/* Detach a datepicker from its control.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_destroyDatepicker: function(target) {
++		var nodeName,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		$.removeData(target, PROP_NAME);
++		if (nodeName === "input") {
++			inst.append.remove();
++			inst.trigger.remove();
++			$target.removeClass(this.markerClassName).
++				unbind("focus", this._showDatepicker).
++				unbind("keydown", this._doKeyDown).
++				unbind("keypress", this._doKeyPress).
++				unbind("keyup", this._doKeyUp);
++		} else if (nodeName === "div" || nodeName === "span") {
++			$target.removeClass(this.markerClassName).empty();
++		}
++	},
++
++	/* Enable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_enableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = false;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = false; }).end().
++				filter("img").css({opacity: "1.0", cursor: ""});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().removeClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", false);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++	},
++
++	/* Disable the date picker to a jQuery selection.
++	 * @param  target	element - the target input field or division or span
++	 */
++	_disableDatepicker: function(target) {
++		var nodeName, inline,
++			$target = $(target),
++			inst = $.data(target, PROP_NAME);
++
++		if (!$target.hasClass(this.markerClassName)) {
++			return;
++		}
++
++		nodeName = target.nodeName.toLowerCase();
++		if (nodeName === "input") {
++			target.disabled = true;
++			inst.trigger.filter("button").
++				each(function() { this.disabled = true; }).end().
++				filter("img").css({opacity: "0.5", cursor: "default"});
++		} else if (nodeName === "div" || nodeName === "span") {
++			inline = $target.children("." + this._inlineClass);
++			inline.children().addClass("ui-state-disabled");
++			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
++				prop("disabled", true);
++		}
++		this._disabledInputs = $.map(this._disabledInputs,
++			function(value) { return (value === target ? null : value); }); // delete entry
++		this._disabledInputs[this._disabledInputs.length] = target;
++	},
++
++	/* Is the first field in a jQuery collection disabled as a datepicker?
++	 * @param  target	element - the target input field or division or span
++	 * @return boolean - true if disabled, false if enabled
++	 */
++	_isDisabledDatepicker: function(target) {
++		if (!target) {
++			return false;
++		}
++		for (var i = 0; i < this._disabledInputs.length; i++) {
++			if (this._disabledInputs[i] === target) {
++				return true;
++			}
++		}
++		return false;
++	},
++
++	/* Retrieve the instance data for the target control.
++	 * @param  target  element - the target input field or division or span
++	 * @return  object - the associated instance data
++	 * @throws  error if a jQuery problem getting data
++	 */
++	_getInst: function(target) {
++		try {
++			return $.data(target, PROP_NAME);
++		}
++		catch (err) {
++			throw "Missing instance data for this datepicker";
++		}
++	},
++
++	/* Update or retrieve the settings for a date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 * @param  name	object - the new settings to update or
++	 *				string - the name of the setting to change or retrieve,
++	 *				when retrieving also "all" for all instance settings or
++	 *				"defaults" for all global defaults
++	 * @param  value   any - the new value for the setting
++	 *				(omit if above is an object or to retrieve a value)
++	 */
++	_optionDatepicker: function(target, name, value) {
++		var settings, date, minDate, maxDate,
++			inst = this._getInst(target);
++
++		if (arguments.length === 2 && typeof name === "string") {
++			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
++				(inst ? (name === "all" ? $.extend({}, inst.settings) :
++				this._get(inst, name)) : null));
++		}
++
++		settings = name || {};
++		if (typeof name === "string") {
++			settings = {};
++			settings[name] = value;
++		}
++
++		if (inst) {
++			if (this._curInst === inst) {
++				this._hideDatepicker();
++			}
++
++			date = this._getDateDatepicker(target, true);
++			minDate = this._getMinMaxDate(inst, "min");
++			maxDate = this._getMinMaxDate(inst, "max");
++			extendRemove(inst.settings, settings);
++			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
++			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
++				inst.settings.minDate = this._formatDate(inst, minDate);
++			}
++			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
++				inst.settings.maxDate = this._formatDate(inst, maxDate);
++			}
++			if ( "disabled" in settings ) {
++				if ( settings.disabled ) {
++					this._disableDatepicker(target);
++				} else {
++					this._enableDatepicker(target);
++				}
++			}
++			this._attachments($(target), inst);
++			this._autoSize(inst);
++			this._setDate(inst, date);
++			this._updateAlternate(inst);
++			this._updateDatepicker(inst);
++		}
++	},
++
++	// change method deprecated
++	_changeDatepicker: function(target, name, value) {
++		this._optionDatepicker(target, name, value);
++	},
++
++	/* Redraw the date picker attached to an input field or division.
++	 * @param  target  element - the target input field or division or span
++	 */
++	_refreshDatepicker: function(target) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._updateDatepicker(inst);
++		}
++	},
++
++	/* Set the dates for a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  date	Date - the new date
++	 */
++	_setDateDatepicker: function(target, date) {
++		var inst = this._getInst(target);
++		if (inst) {
++			this._setDate(inst, date);
++			this._updateDatepicker(inst);
++			this._updateAlternate(inst);
++		}
++	},
++
++	/* Get the date(s) for the first entry in a jQuery selection.
++	 * @param  target element - the target input field or division or span
++	 * @param  noDefault boolean - true if no default date is to be used
++	 * @return Date - the current date
++	 */
++	_getDateDatepicker: function(target, noDefault) {
++		var inst = this._getInst(target);
++		if (inst && !inst.inline) {
++			this._setDateFromField(inst, noDefault);
++		}
++		return (inst ? this._getDate(inst) : null);
++	},
++
++	/* Handle keystrokes. */
++	_doKeyDown: function(event) {
++		var onSelect, dateStr, sel,
++			inst = $.datepicker._getInst(event.target),
++			handled = true,
++			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
++
++		inst._keyEvent = true;
++		if ($.datepicker._datepickerShowing) {
++			switch (event.keyCode) {
++				case 9: $.datepicker._hideDatepicker();
++						handled = false;
++						break; // hide on tab out
++				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
++									$.datepicker._currentClass + ")", inst.dpDiv);
++						if (sel[0]) {
++							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
++						}
++
++						onSelect = $.datepicker._get(inst, "onSelect");
++						if (onSelect) {
++							dateStr = $.datepicker._formatDate(inst);
++
++							// trigger custom callback
++							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
++						} else {
++							$.datepicker._hideDatepicker();
++						}
++
++						return false; // don't submit the form
++				case 27: $.datepicker._hideDatepicker();
++						break; // hide on escape
++				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							-$.datepicker._get(inst, "stepBigMonths") :
++							-$.datepicker._get(inst, "stepMonths")), "M");
++						break; // previous month/year on page up/+ ctrl
++				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
++							+$.datepicker._get(inst, "stepBigMonths") :
++							+$.datepicker._get(inst, "stepMonths")), "M");
++						break; // next month/year on page down/+ ctrl
++				case 35: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._clearDate(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // clear on ctrl or command +end
++				case 36: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._gotoToday(event.target);
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // current on ctrl or command +home
++				case 37: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// -1 day on ctrl or command +left
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								-$.datepicker._get(inst, "stepBigMonths") :
++								-$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +left on Mac
++						break;
++				case 38: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, -7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // -1 week on ctrl or command +up
++				case 39: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						// +1 day on ctrl or command +right
++						if (event.originalEvent.altKey) {
++							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
++								+$.datepicker._get(inst, "stepBigMonths") :
++								+$.datepicker._get(inst, "stepMonths")), "M");
++						}
++						// next month/year on alt +right
++						break;
++				case 40: if (event.ctrlKey || event.metaKey) {
++							$.datepicker._adjustDate(event.target, +7, "D");
++						}
++						handled = event.ctrlKey || event.metaKey;
++						break; // +1 week on ctrl or command +down
++				default: handled = false;
++			}
++		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
++			$.datepicker._showDatepicker(this);
++		} else {
++			handled = false;
++		}
++
++		if (handled) {
++			event.preventDefault();
++			event.stopPropagation();
++		}
++	},
++
++	/* Filter entered characters - based on date format. */
++	_doKeyPress: function(event) {
++		var chars, chr,
++			inst = $.datepicker._getInst(event.target);
++
++		if ($.datepicker._get(inst, "constrainInput")) {
++			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
++			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
++			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
++		}
++	},
++
++	/* Synchronise manual entry and field/alternate field. */
++	_doKeyUp: function(event) {
++		var date,
++			inst = $.datepicker._getInst(event.target);
++
++		if (inst.input.val() !== inst.lastVal) {
++			try {
++				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++					(inst.input ? inst.input.val() : null),
++					$.datepicker._getFormatConfig(inst));
++
++				if (date) { // only if valid
++					$.datepicker._setDateFromField(inst);
++					$.datepicker._updateAlternate(inst);
++					$.datepicker._updateDatepicker(inst);
++				}
++			}
++			catch (err) {
++			}
++		}
++		return true;
++	},
++
++	/* Pop-up the date picker for a given input field.
++	 * If false returned from beforeShow event handler do not show.
++	 * @param  input  element - the input field attached to the date picker or
++	 *					event - if triggered by focus
++	 */
++	_showDatepicker: function(input) {
++		input = input.target || input;
++		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
++			input = $("input", input.parentNode)[0];
++		}
++
++		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
++			return;
++		}
++
++		var inst, beforeShow, beforeShowSettings, isFixed,
++			offset, showAnim, duration;
++
++		inst = $.datepicker._getInst(input);
++		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
++			$.datepicker._curInst.dpDiv.stop(true, true);
++			if ( inst && $.datepicker._datepickerShowing ) {
++				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
++			}
++		}
++
++		beforeShow = $.datepicker._get(inst, "beforeShow");
++		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
++		if(beforeShowSettings === false){
++			return;
++		}
++		extendRemove(inst.settings, beforeShowSettings);
++
++		inst.lastVal = null;
++		$.datepicker._lastInput = input;
++		$.datepicker._setDateFromField(inst);
++
++		if ($.datepicker._inDialog) { // hide cursor
++			input.value = "";
++		}
++		if (!$.datepicker._pos) { // position below input
++			$.datepicker._pos = $.datepicker._findPos(input);
++			$.datepicker._pos[1] += input.offsetHeight; // add the height
++		}
++
++		isFixed = false;
++		$(input).parents().each(function() {
++			isFixed |= $(this).css("position") === "fixed";
++			return !isFixed;
++		});
++
++		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
++		$.datepicker._pos = null;
++		//to avoid flashes on Firefox
++		inst.dpDiv.empty();
++		// determine sizing offscreen
++		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
++		$.datepicker._updateDatepicker(inst);
++		// fix width for dynamic number of date pickers
++		// and adjust position before showing
++		offset = $.datepicker._checkOffset(inst, offset, isFixed);
++		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
++			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
++			left: offset.left + "px", top: offset.top + "px"});
++
++		if (!inst.inline) {
++			showAnim = $.datepicker._get(inst, "showAnim");
++			duration = $.datepicker._get(inst, "duration");
++			inst.dpDiv.zIndex($(input).zIndex()+1);
++			$.datepicker._datepickerShowing = true;
++
++			if ( $.effects && $.effects.effect[ showAnim ] ) {
++				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
++			} else {
++				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
++			}
++
++			if ( $.datepicker._shouldFocusInput( inst ) ) {
++				inst.input.focus();
++			}
++
++			$.datepicker._curInst = inst;
++		}
++	},
++
++	/* Generate the date picker content. */
++	_updateDatepicker: function(inst) {
++		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
++		instActive = inst; // for delegate hover events
++		inst.dpDiv.empty().append(this._generateHTML(inst));
++		this._attachHandlers(inst);
++		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
++
++		var origyearshtml,
++			numMonths = this._getNumberOfMonths(inst),
++			cols = numMonths[1],
++			width = 17;
++
++		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
++		if (cols > 1) {
++			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
++		}
++		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
++			"Class"]("ui-datepicker-multi");
++		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
++			"Class"]("ui-datepicker-rtl");
++
++		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
++			inst.input.focus();
++		}
++
++		// deffered render of the years select (to avoid flashes on Firefox)
++		if( inst.yearshtml ){
++			origyearshtml = inst.yearshtml;
++			setTimeout(function(){
++				//assure that inst.yearshtml didn't change.
++				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
++					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
++				}
++				origyearshtml = inst.yearshtml = null;
++			}, 0);
++		}
++	},
++
++	// #6694 - don't focus the input if it's already focused
++	// this breaks the change event in IE
++	// Support: IE and jQuery <1.9
++	_shouldFocusInput: function( inst ) {
++		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
++	},
++
++	/* Check positioning to remain on screen. */
++	_checkOffset: function(inst, offset, isFixed) {
++		var dpWidth = inst.dpDiv.outerWidth(),
++			dpHeight = inst.dpDiv.outerHeight(),
++			inputWidth = inst.input ? inst.input.outerWidth() : 0,
++			inputHeight = inst.input ? inst.input.outerHeight() : 0,
++			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
++			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
++
++		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
++		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
++		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
++
++		// now check if datepicker is showing outside window viewport - move to a better place if so.
++		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
++			Math.abs(offset.left + dpWidth - viewWidth) : 0);
++		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
++			Math.abs(dpHeight + inputHeight) : 0);
++
++		return offset;
++	},
++
++	/* Find an object's position on the screen. */
++	_findPos: function(obj) {
++		var position,
++			inst = this._getInst(obj),
++			isRTL = this._get(inst, "isRTL");
++
++		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
++			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
++		}
++
++		position = $(obj).offset();
++		return [position.left, position.top];
++	},
++
++	/* Hide the date picker from view.
++	 * @param  input  element - the input field attached to the date picker
++	 */
++	_hideDatepicker: function(input) {
++		var showAnim, duration, postProcess, onClose,
++			inst = this._curInst;
++
++		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
++			return;
++		}
++
++		if (this._datepickerShowing) {
++			showAnim = this._get(inst, "showAnim");
++			duration = this._get(inst, "duration");
++			postProcess = function() {
++				$.datepicker._tidyDialog(inst);
++			};
++
++			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
++			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
++				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
++			} else {
++				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
++					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
++			}
++
++			if (!showAnim) {
++				postProcess();
++			}
++			this._datepickerShowing = false;
++
++			onClose = this._get(inst, "onClose");
++			if (onClose) {
++				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
++			}
++
++			this._lastInput = null;
++			if (this._inDialog) {
++				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
++				if ($.blockUI) {
++					$.unblockUI();
++					$("body").append(this.dpDiv);
++				}
++			}
++			this._inDialog = false;
++		}
++	},
++
++	/* Tidy up after a dialog display. */
++	_tidyDialog: function(inst) {
++		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
++	},
++
++	/* Close date picker if clicked elsewhere. */
++	_checkExternalClick: function(event) {
++		if (!$.datepicker._curInst) {
++			return;
++		}
++
++		var $target = $(event.target),
++			inst = $.datepicker._getInst($target[0]);
++
++		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
++				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
++				!$target.hasClass($.datepicker.markerClassName) &&
++				!$target.closest("." + $.datepicker._triggerClass).length &&
++				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
++			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
++				$.datepicker._hideDatepicker();
++		}
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustDate: function(id, offset, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++		this._adjustInstDate(inst, offset +
++			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
++			period);
++		this._updateDatepicker(inst);
++	},
++
++	/* Action for current link. */
++	_gotoToday: function(id) {
++		var date,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
++			inst.selectedDay = inst.currentDay;
++			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
++			inst.drawYear = inst.selectedYear = inst.currentYear;
++		} else {
++			date = new Date();
++			inst.selectedDay = date.getDate();
++			inst.drawMonth = inst.selectedMonth = date.getMonth();
++			inst.drawYear = inst.selectedYear = date.getFullYear();
++		}
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a new month/year. */
++	_selectMonthYear: function(id, select, period) {
++		var target = $(id),
++			inst = this._getInst(target[0]);
++
++		inst["selected" + (period === "M" ? "Month" : "Year")] =
++		inst["draw" + (period === "M" ? "Month" : "Year")] =
++			parseInt(select.options[select.selectedIndex].value,10);
++
++		this._notifyChange(inst);
++		this._adjustDate(target);
++	},
++
++	/* Action for selecting a day. */
++	_selectDay: function(id, month, year, td) {
++		var inst,
++			target = $(id);
++
++		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
++			return;
++		}
++
++		inst = this._getInst(target[0]);
++		inst.selectedDay = inst.currentDay = $("a", td).html();
++		inst.selectedMonth = inst.currentMonth = month;
++		inst.selectedYear = inst.currentYear = year;
++		this._selectDate(id, this._formatDate(inst,
++			inst.currentDay, inst.currentMonth, inst.currentYear));
++	},
++
++	/* Erase the input field and hide the date picker. */
++	_clearDate: function(id) {
++		var target = $(id);
++		this._selectDate(target, "");
++	},
++
++	/* Update the input field with the selected date. */
++	_selectDate: function(id, dateStr) {
++		var onSelect,
++			target = $(id),
++			inst = this._getInst(target[0]);
++
++		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
++		if (inst.input) {
++			inst.input.val(dateStr);
++		}
++		this._updateAlternate(inst);
++
++		onSelect = this._get(inst, "onSelect");
++		if (onSelect) {
++			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
++		} else if (inst.input) {
++			inst.input.trigger("change"); // fire the change event
++		}
++
++		if (inst.inline){
++			this._updateDatepicker(inst);
++		} else {
++			this._hideDatepicker();
++			this._lastInput = inst.input[0];
++			if (typeof(inst.input[0]) !== "object") {
++				inst.input.focus(); // restore focus
++			}
++			this._lastInput = null;
++		}
++	},
++
++	/* Update any alternate field to synchronise with the main field. */
++	_updateAlternate: function(inst) {
++		var altFormat, date, dateStr,
++			altField = this._get(inst, "altField");
++
++		if (altField) { // update alternate field too
++			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
++			date = this._getDate(inst);
++			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
++			$(altField).each(function() { $(this).val(dateStr); });
++		}
++	},
++
++	/* Set as beforeShowDay function to prevent selection of weekends.
++	 * @param  date  Date - the date to customise
++	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
++	 */
++	noWeekends: function(date) {
++		var day = date.getDay();
++		return [(day > 0 && day < 6), ""];
++	},
++
++	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++	 * @param  date  Date - the date to get the week for
++	 * @return  number - the number of the week within the year that contains this date
++	 */
++	iso8601Week: function(date) {
++		var time,
++			checkDate = new Date(date.getTime());
++
++		// Find Thursday of this week starting on Monday
++		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++
++		time = checkDate.getTime();
++		checkDate.setMonth(0); // Compare with Jan 1
++		checkDate.setDate(1);
++		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++	},
++
++	/* Parse a string value into a date object.
++	 * See formatDate below for the possible formats.
++	 *
++	 * @param  format string - the expected format of the date
++	 * @param  value string - the date in the above format
++	 * @param  settings Object - attributes include:
++	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  Date - the extracted date value or null if value is blank
++	 */
++	parseDate: function (format, value, settings) {
++		if (format == null || value == null) {
++			throw "Invalid arguments";
++		}
++
++		value = (typeof value === "object" ? value.toString() : value + "");
++		if (value === "") {
++			return null;
++		}
++
++		var iFormat, dim, extra,
++			iValue = 0,
++			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
++			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
++				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			year = -1,
++			month = -1,
++			day = -1,
++			doy = -1,
++			literal = false,
++			date,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Extract a number from the string value
++			getNumber = function(match) {
++				var isDoubled = lookAhead(match),
++					size = (match === "@" ? 14 : (match === "!" ? 20 :
++					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
++					digits = new RegExp("^\\d{1," + size + "}"),
++					num = value.substring(iValue).match(digits);
++				if (!num) {
++					throw "Missing number at position " + iValue;
++				}
++				iValue += num[0].length;
++				return parseInt(num[0], 10);
++			},
++			// Extract a name from the string value and convert to an index
++			getName = function(match, shortNames, longNames) {
++				var index = -1,
++					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
++						return [ [k, v] ];
++					}).sort(function (a, b) {
++						return -(a[1].length - b[1].length);
++					});
++
++				$.each(names, function (i, pair) {
++					var name = pair[1];
++					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
++						index = pair[0];
++						iValue += name.length;
++						return false;
++					}
++				});
++				if (index !== -1) {
++					return index + 1;
++				} else {
++					throw "Unknown name at position " + iValue;
++				}
++			},
++			// Confirm that a literal character matches the string value
++			checkLiteral = function() {
++				if (value.charAt(iValue) !== format.charAt(iFormat)) {
++					throw "Unexpected literal at position " + iValue;
++				}
++				iValue++;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					checkLiteral();
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d":
++						day = getNumber("d");
++						break;
++					case "D":
++						getName("D", dayNamesShort, dayNames);
++						break;
++					case "o":
++						doy = getNumber("o");
++						break;
++					case "m":
++						month = getNumber("m");
++						break;
++					case "M":
++						month = getName("M", monthNamesShort, monthNames);
++						break;
++					case "y":
++						year = getNumber("y");
++						break;
++					case "@":
++						date = new Date(getNumber("@"));
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "!":
++						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
++						year = date.getFullYear();
++						month = date.getMonth() + 1;
++						day = date.getDate();
++						break;
++					case "'":
++						if (lookAhead("'")){
++							checkLiteral();
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						checkLiteral();
++				}
++			}
++		}
++
++		if (iValue < value.length){
++			extra = value.substr(iValue);
++			if (!/^\s+/.test(extra)) {
++				throw "Extra/unparsed characters found in date: " + extra;
++			}
++		}
++
++		if (year === -1) {
++			year = new Date().getFullYear();
++		} else if (year < 100) {
++			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
++				(year <= shortYearCutoff ? 0 : -100);
++		}
++
++		if (doy > -1) {
++			month = 1;
++			day = doy;
++			do {
++				dim = this._getDaysInMonth(year, month - 1);
++				if (day <= dim) {
++					break;
++				}
++				month++;
++				day -= dim;
++			} while (true);
++		}
++
++		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
++		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
++			throw "Invalid date"; // E.g. 31/02/00
++		}
++		return date;
++	},
++
++	/* Standard date formats. */
++	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
++	COOKIE: "D, dd M yy",
++	ISO_8601: "yy-mm-dd",
++	RFC_822: "D, d M y",
++	RFC_850: "DD, dd-M-y",
++	RFC_1036: "D, d M y",
++	RFC_1123: "D, d M yy",
++	RFC_2822: "D, d M yy",
++	RSS: "D, d M y", // RFC 822
++	TICKS: "!",
++	TIMESTAMP: "@",
++	W3C: "yy-mm-dd", // ISO 8601
++
++	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
++		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
++
++	/* Format a date object into a string value.
++	 * The format can be combinations of the following:
++	 * d  - day of month (no leading zero)
++	 * dd - day of month (two digit)
++	 * o  - day of year (no leading zeros)
++	 * oo - day of year (three digit)
++	 * D  - day name short
++	 * DD - day name long
++	 * m  - month of year (no leading zero)
++	 * mm - month of year (two digit)
++	 * M  - month name short
++	 * MM - month name long
++	 * y  - year (two digit)
++	 * yy - year (four digit)
++	 * @ - Unix timestamp (ms since 01/01/1970)
++	 * ! - Windows ticks (100ns since 01/01/0001)
++	 * "..." - literal text
++	 * '' - single quote
++	 *
++	 * @param  format string - the desired format of the date
++	 * @param  date Date - the date value to format
++	 * @param  settings Object - attributes include:
++	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
++	 *					dayNames		string[7] - names of the days from Sunday (optional)
++	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
++	 *					monthNames		string[12] - names of the months (optional)
++	 * @return  string - the date in the above format
++	 */
++	formatDate: function (format, date, settings) {
++		if (!date) {
++			return "";
++		}
++
++		var iFormat,
++			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
++			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
++			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
++			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			},
++			// Format a number, with leading zero if necessary
++			formatNumber = function(match, value, len) {
++				var num = "" + value;
++				if (lookAhead(match)) {
++					while (num.length < len) {
++						num = "0" + num;
++					}
++				}
++				return num;
++			},
++			// Format a name, short or long as requested
++			formatName = function(match, value, shortNames, longNames) {
++				return (lookAhead(match) ? longNames[value] : shortNames[value]);
++			},
++			output = "",
++			literal = false;
++
++		if (date) {
++			for (iFormat = 0; iFormat < format.length; iFormat++) {
++				if (literal) {
++					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++						literal = false;
++					} else {
++						output += format.charAt(iFormat);
++					}
++				} else {
++					switch (format.charAt(iFormat)) {
++						case "d":
++							output += formatNumber("d", date.getDate(), 2);
++							break;
++						case "D":
++							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
++							break;
++						case "o":
++							output += formatNumber("o",
++								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
++							break;
++						case "m":
++							output += formatNumber("m", date.getMonth() + 1, 2);
++							break;
++						case "M":
++							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
++							break;
++						case "y":
++							output += (lookAhead("y") ? date.getFullYear() :
++								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
++							break;
++						case "@":
++							output += date.getTime();
++							break;
++						case "!":
++							output += date.getTime() * 10000 + this._ticksTo1970;
++							break;
++						case "'":
++							if (lookAhead("'")) {
++								output += "'";
++							} else {
++								literal = true;
++							}
++							break;
++						default:
++							output += format.charAt(iFormat);
++					}
++				}
++			}
++		}
++		return output;
++	},
++
++	/* Extract all possible characters from the date format. */
++	_possibleChars: function (format) {
++		var iFormat,
++			chars = "",
++			literal = false,
++			// Check whether a format character is doubled
++			lookAhead = function(match) {
++				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
++				if (matches) {
++					iFormat++;
++				}
++				return matches;
++			};
++
++		for (iFormat = 0; iFormat < format.length; iFormat++) {
++			if (literal) {
++				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
++					literal = false;
++				} else {
++					chars += format.charAt(iFormat);
++				}
++			} else {
++				switch (format.charAt(iFormat)) {
++					case "d": case "m": case "y": case "@":
++						chars += "0123456789";
++						break;
++					case "D": case "M":
++						return null; // Accept anything
++					case "'":
++						if (lookAhead("'")) {
++							chars += "'";
++						} else {
++							literal = true;
++						}
++						break;
++					default:
++						chars += format.charAt(iFormat);
++				}
++			}
++		}
++		return chars;
++	},
++
++	/* Get a setting value, defaulting if necessary. */
++	_get: function(inst, name) {
++		return inst.settings[name] !== undefined ?
++			inst.settings[name] : this._defaults[name];
++	},
++
++	/* Parse existing date and initialise date picker. */
++	_setDateFromField: function(inst, noDefault) {
++		if (inst.input.val() === inst.lastVal) {
++			return;
++		}
++
++		var dateFormat = this._get(inst, "dateFormat"),
++			dates = inst.lastVal = inst.input ? inst.input.val() : null,
++			defaultDate = this._getDefaultDate(inst),
++			date = defaultDate,
++			settings = this._getFormatConfig(inst);
++
++		try {
++			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
++		} catch (event) {
++			dates = (noDefault ? "" : dates);
++		}
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		inst.currentDay = (dates ? date.getDate() : 0);
++		inst.currentMonth = (dates ? date.getMonth() : 0);
++		inst.currentYear = (dates ? date.getFullYear() : 0);
++		this._adjustInstDate(inst);
++	},
++
++	/* Retrieve the default date shown on opening. */
++	_getDefaultDate: function(inst) {
++		return this._restrictMinMax(inst,
++			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
++	},
++
++	/* A date may be specified as an exact value or a relative one. */
++	_determineDate: function(inst, date, defaultDate) {
++		var offsetNumeric = function(offset) {
++				var date = new Date();
++				date.setDate(date.getDate() + offset);
++				return date;
++			},
++			offsetString = function(offset) {
++				try {
++					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
++						offset, $.datepicker._getFormatConfig(inst));
++				}
++				catch (e) {
++					// Ignore
++				}
++
++				var date = (offset.toLowerCase().match(/^c/) ?
++					$.datepicker._getDate(inst) : null) || new Date(),
++					year = date.getFullYear(),
++					month = date.getMonth(),
++					day = date.getDate(),
++					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
++					matches = pattern.exec(offset);
++
++				while (matches) {
++					switch (matches[2] || "d") {
++						case "d" : case "D" :
++							day += parseInt(matches[1],10); break;
++						case "w" : case "W" :
++							day += parseInt(matches[1],10) * 7; break;
++						case "m" : case "M" :
++							month += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++						case "y": case "Y" :
++							year += parseInt(matches[1],10);
++							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
++							break;
++					}
++					matches = pattern.exec(offset);
++				}
++				return new Date(year, month, day);
++			},
++			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
++				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
++
++		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
++		if (newDate) {
++			newDate.setHours(0);
++			newDate.setMinutes(0);
++			newDate.setSeconds(0);
++			newDate.setMilliseconds(0);
++		}
++		return this._daylightSavingAdjust(newDate);
++	},
++
++	/* Handle switch to/from daylight saving.
++	 * Hours may be non-zero on daylight saving cut-over:
++	 * > 12 when midnight changeover, but then cannot generate
++	 * midnight datetime, so jump to 1AM, otherwise reset.
++	 * @param  date  (Date) the date to check
++	 * @return  (Date) the corrected date
++	 */
++	_daylightSavingAdjust: function(date) {
++		if (!date) {
++			return null;
++		}
++		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
++		return date;
++	},
++
++	/* Set the date(s) directly. */
++	_setDate: function(inst, date, noChange) {
++		var clear = !date,
++			origMonth = inst.selectedMonth,
++			origYear = inst.selectedYear,
++			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
++
++		inst.selectedDay = inst.currentDay = newDate.getDate();
++		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
++		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
++		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
++			this._notifyChange(inst);
++		}
++		this._adjustInstDate(inst);
++		if (inst.input) {
++			inst.input.val(clear ? "" : this._formatDate(inst));
++		}
++	},
++
++	/* Retrieve the date(s) directly. */
++	_getDate: function(inst) {
++		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
++			this._daylightSavingAdjust(new Date(
++			inst.currentYear, inst.currentMonth, inst.currentDay)));
++			return startDate;
++	},
++
++	/* Attach the onxxx handlers.  These are declared statically so
++	 * they work with static code transformers like Caja.
++	 */
++	_attachHandlers: function(inst) {
++		var stepMonths = this._get(inst, "stepMonths"),
++			id = "#" + inst.id.replace( /\\\\/g, "\\" );
++		inst.dpDiv.find("[data-handler]").map(function () {
++			var handler = {
++				prev: function () {
++					$.datepicker._adjustDate(id, -stepMonths, "M");
++				},
++				next: function () {
++					$.datepicker._adjustDate(id, +stepMonths, "M");
++				},
++				hide: function () {
++					$.datepicker._hideDatepicker();
++				},
++				today: function () {
++					$.datepicker._gotoToday(id);
++				},
++				selectDay: function () {
++					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
++					return false;
++				},
++				selectMonth: function () {
++					$.datepicker._selectMonthYear(id, this, "M");
++					return false;
++				},
++				selectYear: function () {
++					$.datepicker._selectMonthYear(id, this, "Y");
++					return false;
++				}
++			};
++			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
++		});
++	},
++
++	/* Generate the HTML for the current state of the date picker. */
++	_generateHTML: function(inst) {
++		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
++			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
++			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
++			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
++			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
++			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
++			tempDate = new Date(),
++			today = this._daylightSavingAdjust(
++				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
++			isRTL = this._get(inst, "isRTL"),
++			showButtonPanel = this._get(inst, "showButtonPanel"),
++			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
++			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
++			numMonths = this._getNumberOfMonths(inst),
++			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
++			stepMonths = this._get(inst, "stepMonths"),
++			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
++			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
++				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			drawMonth = inst.drawMonth - showCurrentAtPos,
++			drawYear = inst.drawYear;
++
++		if (drawMonth < 0) {
++			drawMonth += 12;
++			drawYear--;
++		}
++		if (maxDate) {
++			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
++				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
++			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
++			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
++				drawMonth--;
++				if (drawMonth < 0) {
++					drawMonth = 11;
++					drawYear--;
++				}
++			}
++		}
++		inst.drawMonth = drawMonth;
++		inst.drawYear = drawYear;
++
++		prevText = this._get(inst, "prevText");
++		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
++			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
++
++		nextText = this._get(inst, "nextText");
++		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
++			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
++			this._getFormatConfig(inst)));
++
++		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
++			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
++			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
++			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
++
++		currentText = this._get(inst, "currentText");
++		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
++		currentText = (!navigationAsDateFormat ? currentText :
++			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
++
++		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
++			this._get(inst, "closeText") + "</button>" : "");
++
++		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
++			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
++			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
++
++		firstDay = parseInt(this._get(inst, "firstDay"),10);
++		firstDay = (isNaN(firstDay) ? 0 : firstDay);
++
++		showWeek = this._get(inst, "showWeek");
++		dayNames = this._get(inst, "dayNames");
++		dayNamesMin = this._get(inst, "dayNamesMin");
++		monthNames = this._get(inst, "monthNames");
++		monthNamesShort = this._get(inst, "monthNamesShort");
++		beforeShowDay = this._get(inst, "beforeShowDay");
++		showOtherMonths = this._get(inst, "showOtherMonths");
++		selectOtherMonths = this._get(inst, "selectOtherMonths");
++		defaultDate = this._getDefaultDate(inst);
++		html = "";
++		dow;
++		for (row = 0; row < numMonths[0]; row++) {
++			group = "";
++			this.maxRows = 4;
++			for (col = 0; col < numMonths[1]; col++) {
++				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
++				cornerClass = " ui-corner-all";
++				calender = "";
++				if (isMultiMonth) {
++					calender += "<div class='ui-datepicker-group";
++					if (numMonths[1] > 1) {
++						switch (col) {
++							case 0: calender += " ui-datepicker-group-first";
++								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
++							case numMonths[1]-1: calender += " ui-datepicker-group-last";
++								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
++							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
++						}
++					}
++					calender += "'>";
++				}
++				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
++					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
++					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
++					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
++					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
++					"</div><table class='ui-datepicker-calendar'><thead>" +
++					"<tr>";
++				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
++				for (dow = 0; dow < 7; dow++) { // days of the week
++					day = (dow + firstDay) % 7;
++					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
++						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
++				}
++				calender += thead + "</tr></thead><tbody>";
++				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
++				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
++					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
++				}
++				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
++				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
++				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
++				this.maxRows = numRows;
++				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
++				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
++					calender += "<tr>";
++					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
++						this._get(inst, "calculateWeek")(printDate) + "</td>");
++					for (dow = 0; dow < 7; dow++) { // create date picker days
++						daySettings = (beforeShowDay ?
++							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
++						otherMonth = (printDate.getMonth() !== drawMonth);
++						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
++							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
++						tbody += "<td class='" +
++							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
++							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
++							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
++							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
++							// or defaultDate is current printedDate and defaultDate is selectedDate
++							" " + this._dayOverClass : "") + // highlight selected day
++							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
++							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
++							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
++							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
++							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
++							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
++							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
++							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
++							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
++							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
++							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
++							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
++						printDate.setDate(printDate.getDate() + 1);
++						printDate = this._daylightSavingAdjust(printDate);
++					}
++					calender += tbody + "</tr>";
++				}
++				drawMonth++;
++				if (drawMonth > 11) {
++					drawMonth = 0;
++					drawYear++;
++				}
++				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
++							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
++				group += calender;
++			}
++			html += group;
++		}
++		html += buttonPanel;
++		inst._keyEvent = false;
++		return html;
++	},
++
++	/* Generate the month and year header. */
++	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
++			secondary, monthNames, monthNamesShort) {
++
++		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
++			changeMonth = this._get(inst, "changeMonth"),
++			changeYear = this._get(inst, "changeYear"),
++			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
++			html = "<div class='ui-datepicker-title'>",
++			monthHtml = "";
++
++		// month selection
++		if (secondary || !changeMonth) {
++			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
++		} else {
++			inMinYear = (minDate && minDate.getFullYear() === drawYear);
++			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
++			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
++			for ( month = 0; month < 12; month++) {
++				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
++					monthHtml += "<option value='" + month + "'" +
++						(month === drawMonth ? " selected='selected'" : "") +
++						">" + monthNamesShort[month] + "</option>";
++				}
++			}
++			monthHtml += "</select>";
++		}
++
++		if (!showMonthAfterYear) {
++			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
++		}
++
++		// year selection
++		if ( !inst.yearshtml ) {
++			inst.yearshtml = "";
++			if (secondary || !changeYear) {
++				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
++			} else {
++				// determine range of years to display
++				years = this._get(inst, "yearRange").split(":");
++				thisYear = new Date().getFullYear();
++				determineYear = function(value) {
++					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
++						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
++						parseInt(value, 10)));
++					return (isNaN(year) ? thisYear : year);
++				};
++				year = determineYear(years[0]);
++				endYear = Math.max(year, determineYear(years[1] || ""));
++				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
++				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
++				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
++				for (; year <= endYear; year++) {
++					inst.yearshtml += "<option value='" + year + "'" +
++						(year === drawYear ? " selected='selected'" : "") +
++						">" + year + "</option>";
++				}
++				inst.yearshtml += "</select>";
++
++				html += inst.yearshtml;
++				inst.yearshtml = null;
++			}
++		}
++
++		html += this._get(inst, "yearSuffix");
++		if (showMonthAfterYear) {
++			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
++		}
++		html += "</div>"; // Close datepicker_header
++		return html;
++	},
++
++	/* Adjust one of the date sub-fields. */
++	_adjustInstDate: function(inst, offset, period) {
++		var year = inst.drawYear + (period === "Y" ? offset : 0),
++			month = inst.drawMonth + (period === "M" ? offset : 0),
++			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
++			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
++
++		inst.selectedDay = date.getDate();
++		inst.drawMonth = inst.selectedMonth = date.getMonth();
++		inst.drawYear = inst.selectedYear = date.getFullYear();
++		if (period === "M" || period === "Y") {
++			this._notifyChange(inst);
++		}
++	},
++
++	/* Ensure a date is within any min/max bounds. */
++	_restrictMinMax: function(inst, date) {
++		var minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			newDate = (minDate && date < minDate ? minDate : date);
++		return (maxDate && newDate > maxDate ? maxDate : newDate);
++	},
++
++	/* Notify change of month/year. */
++	_notifyChange: function(inst) {
++		var onChange = this._get(inst, "onChangeMonthYear");
++		if (onChange) {
++			onChange.apply((inst.input ? inst.input[0] : null),
++				[inst.selectedYear, inst.selectedMonth + 1, inst]);
++		}
++	},
++
++	/* Determine the number of months to show. */
++	_getNumberOfMonths: function(inst) {
++		var numMonths = this._get(inst, "numberOfMonths");
++		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
++	},
++
++	/* Determine the current maximum date - ensure no time components are set. */
++	_getMinMaxDate: function(inst, minMax) {
++		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
++	},
++
++	/* Find the number of days in a given month. */
++	_getDaysInMonth: function(year, month) {
++		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
++	},
++
++	/* Find the day of the week of the first of a month. */
++	_getFirstDayOfMonth: function(year, month) {
++		return new Date(year, month, 1).getDay();
++	},
++
++	/* Determines if we should allow a "next/prev" month display change. */
++	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
++		var numMonths = this._getNumberOfMonths(inst),
++			date = this._daylightSavingAdjust(new Date(curYear,
++			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
++
++		if (offset < 0) {
++			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
++		}
++		return this._isInRange(inst, date);
++	},
++
++	/* Is the given date in the accepted range? */
++	_isInRange: function(inst, date) {
++		var yearSplit, currentYear,
++			minDate = this._getMinMaxDate(inst, "min"),
++			maxDate = this._getMinMaxDate(inst, "max"),
++			minYear = null,
++			maxYear = null,
++			years = this._get(inst, "yearRange");
++			if (years){
++				yearSplit = years.split(":");
++				currentYear = new Date().getFullYear();
++				minYear = parseInt(yearSplit[0], 10);
++				maxYear = parseInt(yearSplit[1], 10);
++				if ( yearSplit[0].match(/[+\-].*/) ) {
++					minYear += currentYear;
++				}
++				if ( yearSplit[1].match(/[+\-].*/) ) {
++					maxYear += currentYear;
++				}
++			}
++
++		return ((!minDate || date.getTime() >= minDate.getTime()) &&
++			(!maxDate || date.getTime() <= maxDate.getTime()) &&
++			(!minYear || date.getFullYear() >= minYear) &&
++			(!maxYear || date.getFullYear() <= maxYear));
++	},
++
++	/* Provide the configuration settings for formatting/parsing. */
++	_getFormatConfig: function(inst) {
++		var shortYearCutoff = this._get(inst, "shortYearCutoff");
++		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
++			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
++		return {shortYearCutoff: shortYearCutoff,
++			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
++			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
++	},
++
++	/* Format the given date for display. */
++	_formatDate: function(inst, day, month, year) {
++		if (!day) {
++			inst.currentDay = inst.selectedDay;
++			inst.currentMonth = inst.selectedMonth;
++			inst.currentYear = inst.selectedYear;
++		}
++		var date = (day ? (typeof day === "object" ? day :
++			this._daylightSavingAdjust(new Date(year, month, day))) :
++			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
++		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
++	}
++});
++
++/*
++ * Bind hover events for datepicker elements.
++ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
++ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
++ */
++function bindHover(dpDiv) {
++	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
++	return dpDiv.delegate(selector, "mouseout", function() {
++			$(this).removeClass("ui-state-hover");
++			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++				$(this).removeClass("ui-datepicker-prev-hover");
++			}
++			if (this.className.indexOf("ui-datepicker-next") !== -1) {
++				$(this).removeClass("ui-datepicker-next-hover");
++			}
++		})
++		.delegate(selector, "mouseover", function(){
++			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
++				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
++				$(this).addClass("ui-state-hover");
++				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
++					$(this).addClass("ui-datepicker-prev-hover");
++				}
++				if (this.className.indexOf("ui-datepicker-next") !== -1) {
++					$(this).addClass("ui-datepicker-next-hover");
++				}
++			}
++		});
++}
++
++/* jQuery extend now ignores nulls! */
++function extendRemove(target, props) {
++	$.extend(target, props);
++	for (var name in props) {
++		if (props[name] == null) {
++			target[name] = props[name];
++		}
++	}
++	return target;
++}
++
++/* Invoke the datepicker functionality.
++   @param  options  string - a command, optionally followed by additional parameters or
++					Object - settings for attaching new datepicker functionality
++   @return  jQuery object */
++$.fn.datepicker = function(options){
++
++	/* Verify an empty collection wasn't passed - Fixes #6976 */
++	if ( !this.length ) {
++		return this;
++	}
++
++	/* Initialise the date picker. */
++	if (!$.datepicker.initialized) {
++		$(document).mousedown($.datepicker._checkExternalClick);
++		$.datepicker.initialized = true;
++	}
++
++	/* Append datepicker main container to body if not exist. */
++	if ($("#"+$.datepicker._mainDivId).length === 0) {
++		$("body").append($.datepicker.dpDiv);
++	}
++
++	var otherArgs = Array.prototype.slice.call(arguments, 1);
++	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
++		return $.datepicker["_" + options + "Datepicker"].
++			apply($.datepicker, [this[0]].concat(otherArgs));
++	}
++	return this.each(function() {
++		typeof options === "string" ?
++			$.datepicker["_" + options + "Datepicker"].
++				apply($.datepicker, [this].concat(otherArgs)) :
++			$.datepicker._attachDatepicker(this, options);
++	});
++};
++
++$.datepicker = new Datepicker(); // singleton instance
++$.datepicker.initialized = false;
++$.datepicker.uuid = new Date().getTime();
++$.datepicker.version = "1.10.3";
++
++})(jQuery);
++(function( $, undefined ) {
++
++var sizeRelatedOptions = {
++		buttons: true,
++		height: true,
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true,
++		width: true
++	},
++	resizableRelatedOptions = {
++		maxHeight: true,
++		maxWidth: true,
++		minHeight: true,
++		minWidth: true
++	};
++
++$.widget( "ui.dialog", {
++	version: "1.10.3",
++	options: {
++		appendTo: "body",
++		autoOpen: true,
++		buttons: [],
++		closeOnEscape: true,
++		closeText: "close",
++		dialogClass: "",
++		draggable: true,
++		hide: null,
++		height: "auto",
++		maxHeight: null,
++		maxWidth: null,
++		minHeight: 150,
++		minWidth: 150,
++		modal: false,
++		position: {
++			my: "center",
++			at: "center",
++			of: window,
++			collision: "fit",
++			// Ensure the titlebar is always visible
++			using: function( pos ) {
++				var topOffset = $( this ).css( pos ).offset().top;
++				if ( topOffset < 0 ) {
++					$( this ).css( "top", pos.top - topOffset );
++				}
++			}
++		},
++		resizable: true,
++		show: null,
++		title: null,
++		width: 300,
++
++		// callbacks
++		beforeClose: null,
++		close: null,
++		drag: null,
++		dragStart: null,
++		dragStop: null,
++		focus: null,
++		open: null,
++		resize: null,
++		resizeStart: null,
++		resizeStop: null
++	},
++
++	_create: function() {
++		this.originalCss = {
++			display: this.element[0].style.display,
++			width: this.element[0].style.width,
++			minHeight: this.element[0].style.minHeight,
++			maxHeight: this.element[0].style.maxHeight,
++			height: this.element[0].style.height
++		};
++		this.originalPosition = {
++			parent: this.element.parent(),
++			index: this.element.parent().children().index( this.element )
++		};
++		this.originalTitle = this.element.attr("title");
++		this.options.title = this.options.title || this.originalTitle;
++
++		this._createWrapper();
++
++		this.element
++			.show()
++			.removeAttr("title")
++			.addClass("ui-dialog-content ui-widget-content")
++			.appendTo( this.uiDialog );
++
++		this._createTitlebar();
++		this._createButtonPane();
++
++		if ( this.options.draggable && $.fn.draggable ) {
++			this._makeDraggable();
++		}
++		if ( this.options.resizable && $.fn.resizable ) {
++			this._makeResizable();
++		}
++
++		this._isOpen = false;
++	},
++
++	_init: function() {
++		if ( this.options.autoOpen ) {
++			this.open();
++		}
++	},
++
++	_appendTo: function() {
++		var element = this.options.appendTo;
++		if ( element && (element.jquery || element.nodeType) ) {
++			return $( element );
++		}
++		return this.document.find( element || "body" ).eq( 0 );
++	},
++
++	_destroy: function() {
++		var next,
++			originalPosition = this.originalPosition;
++
++		this._destroyOverlay();
++
++		this.element
++			.removeUniqueId()
++			.removeClass("ui-dialog-content ui-widget-content")
++			.css( this.originalCss )
++			// Without detaching first, the following becomes really slow
++			.detach();
++
++		this.uiDialog.stop( true, true ).remove();
++
++		if ( this.originalTitle ) {
++			this.element.attr( "title", this.originalTitle );
++		}
++
++		next = originalPosition.parent.children().eq( originalPosition.index );
++		// Don't try to place the dialog next to itself (#8613)
++		if ( next.length && next[0] !== this.element[0] ) {
++			next.before( this.element );
++		} else {
++			originalPosition.parent.append( this.element );
++		}
++	},
++
++	widget: function() {
++		return this.uiDialog;
++	},
++
++	disable: $.noop,
++	enable: $.noop,
++
++	close: function( event ) {
++		var that = this;
++
++		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
++			return;
++		}
++
++		this._isOpen = false;
++		this._destroyOverlay();
++
++		if ( !this.opener.filter(":focusable").focus().length ) {
++			// Hiding a focused element doesn't trigger blur in WebKit
++			// so in case we have nothing to focus on, explicitly blur the active element
++			// https://bugs.webkit.org/show_bug.cgi?id=47182
++			$( this.document[0].activeElement ).blur();
++		}
++
++		this._hide( this.uiDialog, this.options.hide, function() {
++			that._trigger( "close", event );
++		});
++	},
++
++	isOpen: function() {
++		return this._isOpen;
++	},
++
++	moveToTop: function() {
++		this._moveToTop();
++	},
++
++	_moveToTop: function( event, silent ) {
++		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
++		if ( moved && !silent ) {
++			this._trigger( "focus", event );
++		}
++		return moved;
++	},
++
++	open: function() {
++		var that = this;
++		if ( this._isOpen ) {
++			if ( this._moveToTop() ) {
++				this._focusTabbable();
++			}
++			return;
++		}
++
++		this._isOpen = true;
++		this.opener = $( this.document[0].activeElement );
++
++		this._size();
++		this._position();
++		this._createOverlay();
++		this._moveToTop( null, true );
++		this._show( this.uiDialog, this.options.show, function() {
++			that._focusTabbable();
++			that._trigger("focus");
++		});
++
++		this._trigger("open");
++	},
++
++	_focusTabbable: function() {
++		// Set focus to the first match:
++		// 1. First element inside the dialog matching [autofocus]
++		// 2. Tabbable element inside the content element
++		// 3. Tabbable element inside the buttonpane
++		// 4. The close button
++		// 5. The dialog itself
++		var hasFocus = this.element.find("[autofocus]");
++		if ( !hasFocus.length ) {
++			hasFocus = this.element.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogButtonPane.find(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
++		}
++		if ( !hasFocus.length ) {
++			hasFocus = this.uiDialog;
++		}
++		hasFocus.eq( 0 ).focus();
++	},
++
++	_keepFocus: function( event ) {
++		function checkFocus() {
++			var activeElement = this.document[0].activeElement,
++				isActive = this.uiDialog[0] === activeElement ||
++					$.contains( this.uiDialog[0], activeElement );
++			if ( !isActive ) {
++				this._focusTabbable();
++			}
++		}
++		event.preventDefault();
++		checkFocus.call( this );
++		// support: IE
++		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
++		// so we check again later
++		this._delay( checkFocus );
++	},
++
++	_createWrapper: function() {
++		this.uiDialog = $("<div>")
++			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
++				this.options.dialogClass )
++			.hide()
++			.attr({
++				// Setting tabIndex makes the div focusable
++				tabIndex: -1,
++				role: "dialog"
++			})
++			.appendTo( this._appendTo() );
++
++		this._on( this.uiDialog, {
++			keydown: function( event ) {
++				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
++						event.keyCode === $.ui.keyCode.ESCAPE ) {
++					event.preventDefault();
++					this.close( event );
++					return;
++				}
++
++				// prevent tabbing out of dialogs
++				if ( event.keyCode !== $.ui.keyCode.TAB ) {
++					return;
++				}
++				var tabbables = this.uiDialog.find(":tabbable"),
++					first = tabbables.filter(":first"),
++					last  = tabbables.filter(":last");
++
++				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
++					first.focus( 1 );
++					event.preventDefault();
++				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
++					last.focus( 1 );
++					event.preventDefault();
++				}
++			},
++			mousedown: function( event ) {
++				if ( this._moveToTop( event ) ) {
++					this._focusTabbable();
++				}
++			}
++		});
++
++		// We assume that any existing aria-describedby attribute means
++		// that the dialog content is marked up properly
++		// otherwise we brute force the content as the description
++		if ( !this.element.find("[aria-describedby]").length ) {
++			this.uiDialog.attr({
++				"aria-describedby": this.element.uniqueId().attr("id")
++			});
++		}
++	},
++
++	_createTitlebar: function() {
++		var uiDialogTitle;
++
++		this.uiDialogTitlebar = $("<div>")
++			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
++			.prependTo( this.uiDialog );
++		this._on( this.uiDialogTitlebar, {
++			mousedown: function( event ) {
++				// Don't prevent click on close button (#8838)
++				// Focusing a dialog that is partially scrolled out of view
++				// causes the browser to scroll it into view, preventing the click event
++				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
++					// Dialog isn't getting focus when dragging (#8063)
++					this.uiDialog.focus();
++				}
++			}
++		});
++
++		this.uiDialogTitlebarClose = $("<button></button>")
++			.button({
++				label: this.options.closeText,
++				icons: {
++					primary: "ui-icon-closethick"
++				},
++				text: false
++			})
++			.addClass("ui-dialog-titlebar-close")
++			.appendTo( this.uiDialogTitlebar );
++		this._on( this.uiDialogTitlebarClose, {
++			click: function( event ) {
++				event.preventDefault();
++				this.close( event );
++			}
++		});
++
++		uiDialogTitle = $("<span>")
++			.uniqueId()
++			.addClass("ui-dialog-title")
++			.prependTo( this.uiDialogTitlebar );
++		this._title( uiDialogTitle );
++
++		this.uiDialog.attr({
++			"aria-labelledby": uiDialogTitle.attr("id")
++		});
++	},
++
++	_title: function( title ) {
++		if ( !this.options.title ) {
++			title.html("&#160;");
++		}
++		title.text( this.options.title );
++	},
++
++	_createButtonPane: function() {
++		this.uiDialogButtonPane = $("<div>")
++			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
++
++		this.uiButtonSet = $("<div>")
++			.addClass("ui-dialog-buttonset")
++			.appendTo( this.uiDialogButtonPane );
++
++		this._createButtons();
++	},
++
++	_createButtons: function() {
++		var that = this,
++			buttons = this.options.buttons;
++
++		// if we already have a button pane, remove it
++		this.uiDialogButtonPane.remove();
++		this.uiButtonSet.empty();
++
++		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
++			this.uiDialog.removeClass("ui-dialog-buttons");
++			return;
++		}
++
++		$.each( buttons, function( name, props ) {
++			var click, buttonOptions;
++			props = $.isFunction( props ) ?
++				{ click: props, text: name } :
++				props;
++			// Default to a non-submitting button
++			props = $.extend( { type: "button" }, props );
++			// Change the context for the click callback to be the main element
++			click = props.click;
++			props.click = function() {
++				click.apply( that.element[0], arguments );
++			};
++			buttonOptions = {
++				icons: props.icons,
++				text: props.showText
++			};
++			delete props.icons;
++			delete props.showText;
++			$( "<button></button>", props )
++				.button( buttonOptions )
++				.appendTo( that.uiButtonSet );
++		});
++		this.uiDialog.addClass("ui-dialog-buttons");
++		this.uiDialogButtonPane.appendTo( this.uiDialog );
++	},
++
++	_makeDraggable: function() {
++		var that = this,
++			options = this.options;
++
++		function filteredUi( ui ) {
++			return {
++				position: ui.position,
++				offset: ui.offset
++			};
++		}
++
++		this.uiDialog.draggable({
++			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
++			handle: ".ui-dialog-titlebar",
++			containment: "document",
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-dragging");
++				that._blockFrames();
++				that._trigger( "dragStart", event, filteredUi( ui ) );
++			},
++			drag: function( event, ui ) {
++				that._trigger( "drag", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.position = [
++					ui.position.left - that.document.scrollLeft(),
++					ui.position.top - that.document.scrollTop()
++				];
++				$( this ).removeClass("ui-dialog-dragging");
++				that._unblockFrames();
++				that._trigger( "dragStop", event, filteredUi( ui ) );
++			}
++		});
++	},
++
++	_makeResizable: function() {
++		var that = this,
++			options = this.options,
++			handles = options.resizable,
++			// .ui-resizable has position: relative defined in the stylesheet
++			// but dialogs have to use absolute or fixed positioning
++			position = this.uiDialog.css("position"),
++			resizeHandles = typeof handles === "string" ?
++				handles	:
++				"n,e,s,w,se,sw,ne,nw";
++
++		function filteredUi( ui ) {
++			return {
++				originalPosition: ui.originalPosition,
++				originalSize: ui.originalSize,
++				position: ui.position,
++				size: ui.size
++			};
++		}
++
++		this.uiDialog.resizable({
++			cancel: ".ui-dialog-content",
++			containment: "document",
++			alsoResize: this.element,
++			maxWidth: options.maxWidth,
++			maxHeight: options.maxHeight,
++			minWidth: options.minWidth,
++			minHeight: this._minHeight(),
++			handles: resizeHandles,
++			start: function( event, ui ) {
++				$( this ).addClass("ui-dialog-resizing");
++				that._blockFrames();
++				that._trigger( "resizeStart", event, filteredUi( ui ) );
++			},
++			resize: function( event, ui ) {
++				that._trigger( "resize", event, filteredUi( ui ) );
++			},
++			stop: function( event, ui ) {
++				options.height = $( this ).height();
++				options.width = $( this ).width();
++				$( this ).removeClass("ui-dialog-resizing");
++				that._unblockFrames();
++				that._trigger( "resizeStop", event, filteredUi( ui ) );
++			}
++		})
++		.css( "position", position );
++	},
++
++	_minHeight: function() {
++		var options = this.options;
++
++		return options.height === "auto" ?
++			options.minHeight :
++			Math.min( options.minHeight, options.height );
++	},
++
++	_position: function() {
++		// Need to show the dialog to get the actual offset in the position plugin
++		var isVisible = this.uiDialog.is(":visible");
++		if ( !isVisible ) {
++			this.uiDialog.show();
++		}
++		this.uiDialog.position( this.options.position );
++		if ( !isVisible ) {
++			this.uiDialog.hide();
++		}
++	},
++
++	_setOptions: function( options ) {
++		var that = this,
++			resize = false,
++			resizableOptions = {};
++
++		$.each( options, function( key, value ) {
++			that._setOption( key, value );
++
++			if ( key in sizeRelatedOptions ) {
++				resize = true;
++			}
++			if ( key in resizableRelatedOptions ) {
++				resizableOptions[ key ] = value;
++			}
++		});
++
++		if ( resize ) {
++			this._size();
++			this._position();
++		}
++		if ( this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", resizableOptions );
++		}
++	},
++
++	_setOption: function( key, value ) {
++		/*jshint maxcomplexity:15*/
++		var isDraggable, isResizable,
++			uiDialog = this.uiDialog;
++
++		if ( key === "dialogClass" ) {
++			uiDialog
++				.removeClass( this.options.dialogClass )
++				.addClass( value );
++		}
++
++		if ( key === "disabled" ) {
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "appendTo" ) {
++			this.uiDialog.appendTo( this._appendTo() );
++		}
++
++		if ( key === "buttons" ) {
++			this._createButtons();
++		}
++
++		if ( key === "closeText" ) {
++			this.uiDialogTitlebarClose.button({
++				// Ensure that we always pass a string
++				label: "" + value
++			});
++		}
++
++		if ( key === "draggable" ) {
++			isDraggable = uiDialog.is(":data(ui-draggable)");
++			if ( isDraggable && !value ) {
++				uiDialog.draggable("destroy");
++			}
++
++			if ( !isDraggable && value ) {
++				this._makeDraggable();
++			}
++		}
++
++		if ( key === "position" ) {
++			this._position();
++		}
++
++		if ( key === "resizable" ) {
++			// currently resizable, becoming non-resizable
++			isResizable = uiDialog.is(":data(ui-resizable)");
++			if ( isResizable && !value ) {
++				uiDialog.resizable("destroy");
++			}
++
++			// currently resizable, changing handles
++			if ( isResizable && typeof value === "string" ) {
++				uiDialog.resizable( "option", "handles", value );
++			}
++
++			// currently non-resizable, becoming resizable
++			if ( !isResizable && value !== false ) {
++				this._makeResizable();
++			}
++		}
++
++		if ( key === "title" ) {
++			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
++		}
++	},
++
++	_size: function() {
++		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
++		// divs will both have width and height set, so we need to reset them
++		var nonContentHeight, minContentHeight, maxContentHeight,
++			options = this.options;
++
++		// Reset content sizing
++		this.element.show().css({
++			width: "auto",
++			minHeight: 0,
++			maxHeight: "none",
++			height: 0
++		});
++
++		if ( options.minWidth > options.width ) {
++			options.width = options.minWidth;
++		}
++
++		// reset wrapper sizing
++		// determine the height of all the non-content elements
++		nonContentHeight = this.uiDialog.css({
++				height: "auto",
++				width: options.width
++			})
++			.outerHeight();
++		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
++		maxContentHeight = typeof options.maxHeight === "number" ?
++			Math.max( 0, options.maxHeight - nonContentHeight ) :
++			"none";
++
++		if ( options.height === "auto" ) {
++			this.element.css({
++				minHeight: minContentHeight,
++				maxHeight: maxContentHeight,
++				height: "auto"
++			});
++		} else {
++			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
++		}
++
++		if (this.uiDialog.is(":data(ui-resizable)") ) {
++			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
++		}
++	},
++
++	_blockFrames: function() {
++		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
++			var iframe = $( this );
++
++			return $( "<div>" )
++				.css({
++					position: "absolute",
++					width: iframe.outerWidth(),
++					height: iframe.outerHeight()
++				})
++				.appendTo( iframe.parent() )
++				.offset( iframe.offset() )[0];
++		});
++	},
++
++	_unblockFrames: function() {
++		if ( this.iframeBlocks ) {
++			this.iframeBlocks.remove();
++			delete this.iframeBlocks;
++		}
++	},
++
++	_allowInteraction: function( event ) {
++		if ( $( event.target ).closest(".ui-dialog").length ) {
++			return true;
++		}
++
++		// TODO: Remove hack when datepicker implements
++		// the .ui-front logic (#8989)
++		return !!$( event.target ).closest(".ui-datepicker").length;
++	},
++
++	_createOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		var that = this,
++			widgetFullName = this.widgetFullName;
++		if ( !$.ui.dialog.overlayInstances ) {
++			// Prevent use of anchors and inputs.
++			// We use a delay in case the overlay is created from an
++			// event that we're going to be cancelling. (#2804)
++			this._delay(function() {
++				// Handle .dialog().dialog("close") (#4065)
++				if ( $.ui.dialog.overlayInstances ) {
++					this.document.bind( "focusin.dialog", function( event ) {
++						if ( !that._allowInteraction( event ) ) {
++							event.preventDefault();
++							$(".ui-dialog:visible:last .ui-dialog-content")
++								.data( widgetFullName )._focusTabbable();
++						}
++					});
++				}
++			});
++		}
++
++		this.overlay = $("<div>")
++			.addClass("ui-widget-overlay ui-front")
++			.appendTo( this._appendTo() );
++		this._on( this.overlay, {
++			mousedown: "_keepFocus"
++		});
++		$.ui.dialog.overlayInstances++;
++	},
++
++	_destroyOverlay: function() {
++		if ( !this.options.modal ) {
++			return;
++		}
++
++		if ( this.overlay ) {
++			$.ui.dialog.overlayInstances--;
++
++			if ( !$.ui.dialog.overlayInstances ) {
++				this.document.unbind( "focusin.dialog" );
++			}
++			this.overlay.remove();
++			this.overlay = null;
++		}
++	}
++});
++
++$.ui.dialog.overlayInstances = 0;
++
++// DEPRECATED
++if ( $.uiBackCompat !== false ) {
++	// position option with array notation
++	// just override with old implementation
++	$.widget( "ui.dialog", $.ui.dialog, {
++		_position: function() {
++			var position = this.options.position,
++				myAt = [],
++				offset = [ 0, 0 ],
++				isVisible;
++
++			if ( position ) {
++				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
++					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
++					if ( myAt.length === 1 ) {
++						myAt[1] = myAt[0];
++					}
++
++					$.each( [ "left", "top" ], function( i, offsetPosition ) {
++						if ( +myAt[ i ] === myAt[ i ] ) {
++							offset[ i ] = myAt[ i ];
++							myAt[ i ] = offsetPosition;
++						}
++					});
++
++					position = {
++						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
++							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
++						at: myAt.join(" ")
++					};
++				}
++
++				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
++			} else {
++				position = $.ui.dialog.prototype.options.position;
++			}
++
++			// need to show the dialog to get the actual offset in the position plugin
++			isVisible = this.uiDialog.is(":visible");
++			if ( !isVisible ) {
++				this.uiDialog.show();
++			}
++			this.uiDialog.position( position );
++			if ( !isVisible ) {
++				this.uiDialog.hide();
++			}
++		}
++	});
++}
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++$.widget( "ui.menu", {
++	version: "1.10.3",
++	defaultElement: "<ul>",
++	delay: 300,
++	options: {
++		icons: {
++			submenu: "ui-icon-carat-1-e"
++		},
++		menus: "ul",
++		position: {
++			my: "left top",
++			at: "right top"
++		},
++		role: "menu",
++
++		// callbacks
++		blur: null,
++		focus: null,
++		select: null
++	},
++
++	_create: function() {
++		this.activeMenu = this.element;
++		// flag used to prevent firing of the click handler
++		// as the event bubbles up through nested menus
++		this.mouseHandled = false;
++		this.element
++			.uniqueId()
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
++			.attr({
++				role: this.options.role,
++				tabIndex: 0
++			})
++			// need to catch all clicks on disabled menu
++			// not possible through _on
++			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
++				if ( this.options.disabled ) {
++					event.preventDefault();
++				}
++			}, this ));
++
++		if ( this.options.disabled ) {
++			this.element
++				.addClass( "ui-state-disabled" )
++				.attr( "aria-disabled", "true" );
++		}
++
++		this._on({
++			// Prevent focus from sticking to links inside menu after clicking
++			// them (focus should always stay on UL during navigation).
++			"mousedown .ui-menu-item > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-state-disabled > a": function( event ) {
++				event.preventDefault();
++			},
++			"click .ui-menu-item:has(a)": function( event ) {
++				var target = $( event.target ).closest( ".ui-menu-item" );
++				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
++					this.mouseHandled = true;
++
++					this.select( event );
++					// Open submenu on click
++					if ( target.has( ".ui-menu" ).length ) {
++						this.expand( event );
++					} else if ( !this.element.is( ":focus" ) ) {
++						// Redirect focus to the menu
++						this.element.trigger( "focus", [ true ] );
++
++						// If the active item is on the top level, let it stay active.
++						// Otherwise, blur the active item since it is no longer visible.
++						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
++							clearTimeout( this.timer );
++						}
++					}
++				}
++			},
++			"mouseenter .ui-menu-item": function( event ) {
++				var target = $( event.currentTarget );
++				// Remove ui-state-active class from siblings of the newly focused menu item
++				// to avoid a jump caused by adjacent elements both having a class with a border
++				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
++				this.focus( event, target );
++			},
++			mouseleave: "collapseAll",
++			"mouseleave .ui-menu": "collapseAll",
++			focus: function( event, keepActiveItem ) {
++				// If there's already an active item, keep it active
++				// If not, activate the first item
++				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
++
++				if ( !keepActiveItem ) {
++					this.focus( event, item );
++				}
++			},
++			blur: function( event ) {
++				this._delay(function() {
++					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
++						this.collapseAll( event );
++					}
++				});
++			},
++			keydown: "_keydown"
++		});
++
++		this.refresh();
++
++		// Clicks outside of a menu collapse any open menus
++		this._on( this.document, {
++			click: function( event ) {
++				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
++					this.collapseAll( event );
++				}
++
++				// Reset the mouseHandled flag
++				this.mouseHandled = false;
++			}
++		});
++	},
++
++	_destroy: function() {
++		// Destroy (sub)menus
++		this.element
++			.removeAttr( "aria-activedescendant" )
++			.find( ".ui-menu" ).addBack()
++				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
++				.removeAttr( "role" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "aria-labelledby" )
++				.removeAttr( "aria-expanded" )
++				.removeAttr( "aria-hidden" )
++				.removeAttr( "aria-disabled" )
++				.removeUniqueId()
++				.show();
++
++		// Destroy menu items
++		this.element.find( ".ui-menu-item" )
++			.removeClass( "ui-menu-item" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-disabled" )
++			.children( "a" )
++				.removeUniqueId()
++				.removeClass( "ui-corner-all ui-state-hover" )
++				.removeAttr( "tabIndex" )
++				.removeAttr( "role" )
++				.removeAttr( "aria-haspopup" )
++				.children().each( function() {
++					var elem = $( this );
++					if ( elem.data( "ui-menu-submenu-carat" ) ) {
++						elem.remove();
++					}
++				});
++
++		// Destroy menu dividers
++		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
++	},
++
++	_keydown: function( event ) {
++		/*jshint maxcomplexity:20*/
++		var match, prev, character, skip, regex,
++			preventDefault = true;
++
++		function escape( value ) {
++			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
++		}
++
++		switch ( event.keyCode ) {
++		case $.ui.keyCode.PAGE_UP:
++			this.previousPage( event );
++			break;
++		case $.ui.keyCode.PAGE_DOWN:
++			this.nextPage( event );
++			break;
++		case $.ui.keyCode.HOME:
++			this._move( "first", "first", event );
++			break;
++		case $.ui.keyCode.END:
++			this._move( "last", "last", event );
++			break;
++		case $.ui.keyCode.UP:
++			this.previous( event );
++			break;
++		case $.ui.keyCode.DOWN:
++			this.next( event );
++			break;
++		case $.ui.keyCode.LEFT:
++			this.collapse( event );
++			break;
++		case $.ui.keyCode.RIGHT:
++			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
++				this.expand( event );
++			}
++			break;
++		case $.ui.keyCode.ENTER:
++		case $.ui.keyCode.SPACE:
++			this._activate( event );
++			break;
++		case $.ui.keyCode.ESCAPE:
++			this.collapse( event );
++			break;
++		default:
++			preventDefault = false;
++			prev = this.previousFilter || "";
++			character = String.fromCharCode( event.keyCode );
++			skip = false;
++
++			clearTimeout( this.filterTimer );
++
++			if ( character === prev ) {
++				skip = true;
++			} else {
++				character = prev + character;
++			}
++
++			regex = new RegExp( "^" + escape( character ), "i" );
++			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++				return regex.test( $( this ).children( "a" ).text() );
++			});
++			match = skip && match.index( this.active.next() ) !== -1 ?
++				this.active.nextAll( ".ui-menu-item" ) :
++				match;
++
++			// If no matches on the current filter, reset to the last character pressed
++			// to move down the menu to the first item that starts with that character
++			if ( !match.length ) {
++				character = String.fromCharCode( event.keyCode );
++				regex = new RegExp( "^" + escape( character ), "i" );
++				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
++					return regex.test( $( this ).children( "a" ).text() );
++				});
++			}
++
++			if ( match.length ) {
++				this.focus( event, match );
++				if ( match.length > 1 ) {
++					this.previousFilter = character;
++					this.filterTimer = this._delay(function() {
++						delete this.previousFilter;
++					}, 1000 );
++				} else {
++					delete this.previousFilter;
++				}
++			} else {
++				delete this.previousFilter;
++			}
++		}
++
++		if ( preventDefault ) {
++			event.preventDefault();
++		}
++	},
++
++	_activate: function( event ) {
++		if ( !this.active.is( ".ui-state-disabled" ) ) {
++			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
++				this.expand( event );
++			} else {
++				this.select( event );
++			}
++		}
++	},
++
++	refresh: function() {
++		var menus,
++			icon = this.options.icons.submenu,
++			submenus = this.element.find( this.options.menus );
++
++		// Initialize nested menus
++		submenus.filter( ":not(.ui-menu)" )
++			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
++			.hide()
++			.attr({
++				role: this.options.role,
++				"aria-hidden": "true",
++				"aria-expanded": "false"
++			})
++			.each(function() {
++				var menu = $( this ),
++					item = menu.prev( "a" ),
++					submenuCarat = $( "<span>" )
++						.addClass( "ui-menu-icon ui-icon " + icon )
++						.data( "ui-menu-submenu-carat", true );
++
++				item
++					.attr( "aria-haspopup", "true" )
++					.prepend( submenuCarat );
++				menu.attr( "aria-labelledby", item.attr( "id" ) );
++			});
++
++		menus = submenus.add( this.element );
++
++		// Don't refresh list items that are already adapted
++		menus.children( ":not(.ui-menu-item):has(a)" )
++			.addClass( "ui-menu-item" )
++			.attr( "role", "presentation" )
++			.children( "a" )
++				.uniqueId()
++				.addClass( "ui-corner-all" )
++				.attr({
++					tabIndex: -1,
++					role: this._itemRole()
++				});
++
++		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
++		menus.children( ":not(.ui-menu-item)" ).each(function() {
++			var item = $( this );
++			// hyphen, em dash, en dash
++			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
++				item.addClass( "ui-widget-content ui-menu-divider" );
++			}
++		});
++
++		// Add aria-disabled attribute to any disabled menu item
++		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
++
++		// If the active item has been removed, blur the menu
++		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
++			this.blur();
++		}
++	},
++
++	_itemRole: function() {
++		return {
++			menu: "menuitem",
++			listbox: "option"
++		}[ this.options.role ];
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "icons" ) {
++			this.element.find( ".ui-menu-icon" )
++				.removeClass( this.options.icons.submenu )
++				.addClass( value.submenu );
++		}
++		this._super( key, value );
++	},
++
++	focus: function( event, item ) {
++		var nested, focused;
++		this.blur( event, event && event.type === "focus" );
++
++		this._scrollIntoView( item );
++
++		this.active = item.first();
++		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
++		// Only update aria-activedescendant if there's a role
++		// otherwise we assume focus is managed elsewhere
++		if ( this.options.role ) {
++			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
++		}
++
++		// Highlight active parent menu item, if any
++		this.active
++			.parent()
++			.closest( ".ui-menu-item" )
++			.children( "a:first" )
++			.addClass( "ui-state-active" );
++
++		if ( event && event.type === "keydown" ) {
++			this._close();
++		} else {
++			this.timer = this._delay(function() {
++				this._close();
++			}, this.delay );
++		}
++
++		nested = item.children( ".ui-menu" );
++		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
++			this._startOpening(nested);
++		}
++		this.activeMenu = item.parent();
++
++		this._trigger( "focus", event, { item: item } );
++	},
++
++	_scrollIntoView: function( item ) {
++		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
++		if ( this._hasScroll() ) {
++			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
++			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
++			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
++			scroll = this.activeMenu.scrollTop();
++			elementHeight = this.activeMenu.height();
++			itemHeight = item.height();
++
++			if ( offset < 0 ) {
++				this.activeMenu.scrollTop( scroll + offset );
++			} else if ( offset + itemHeight > elementHeight ) {
++				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
++			}
++		}
++	},
++
++	blur: function( event, fromFocus ) {
++		if ( !fromFocus ) {
++			clearTimeout( this.timer );
++		}
++
++		if ( !this.active ) {
++			return;
++		}
++
++		this.active.children( "a" ).removeClass( "ui-state-focus" );
++		this.active = null;
++
++		this._trigger( "blur", event, { item: this.active } );
++	},
++
++	_startOpening: function( submenu ) {
++		clearTimeout( this.timer );
++
++		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
++		// shift in the submenu position when mousing over the carat icon
++		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
++			return;
++		}
++
++		this.timer = this._delay(function() {
++			this._close();
++			this._open( submenu );
++		}, this.delay );
++	},
++
++	_open: function( submenu ) {
++		var position = $.extend({
++			of: this.active
++		}, this.options.position );
++
++		clearTimeout( this.timer );
++		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
++			.hide()
++			.attr( "aria-hidden", "true" );
++
++		submenu
++			.show()
++			.removeAttr( "aria-hidden" )
++			.attr( "aria-expanded", "true" )
++			.position( position );
++	},
++
++	collapseAll: function( event, all ) {
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			// If we were passed an event, look for the submenu that contains the event
++			var currentMenu = all ? this.element :
++				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
++
++			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
++			if ( !currentMenu.length ) {
++				currentMenu = this.element;
++			}
++
++			this._close( currentMenu );
++
++			this.blur( event );
++			this.activeMenu = currentMenu;
++		}, this.delay );
++	},
++
++	// With no arguments, closes the currently active menu - if nothing is active
++	// it closes all menus.  If passed an argument, it will search for menus BELOW
++	_close: function( startMenu ) {
++		if ( !startMenu ) {
++			startMenu = this.active ? this.active.parent() : this.element;
++		}
++
++		startMenu
++			.find( ".ui-menu" )
++				.hide()
++				.attr( "aria-hidden", "true" )
++				.attr( "aria-expanded", "false" )
++			.end()
++			.find( "a.ui-state-active" )
++				.removeClass( "ui-state-active" );
++	},
++
++	collapse: function( event ) {
++		var newItem = this.active &&
++			this.active.parent().closest( ".ui-menu-item", this.element );
++		if ( newItem && newItem.length ) {
++			this._close();
++			this.focus( event, newItem );
++		}
++	},
++
++	expand: function( event ) {
++		var newItem = this.active &&
++			this.active
++				.children( ".ui-menu " )
++				.children( ".ui-menu-item" )
++				.first();
++
++		if ( newItem && newItem.length ) {
++			this._open( newItem.parent() );
++
++			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
++			this._delay(function() {
++				this.focus( event, newItem );
++			});
++		}
++	},
++
++	next: function( event ) {
++		this._move( "next", "first", event );
++	},
++
++	previous: function( event ) {
++		this._move( "prev", "last", event );
++	},
++
++	isFirstItem: function() {
++		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
++	},
++
++	isLastItem: function() {
++		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
++	},
++
++	_move: function( direction, filter, event ) {
++		var next;
++		if ( this.active ) {
++			if ( direction === "first" || direction === "last" ) {
++				next = this.active
++					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
++					.eq( -1 );
++			} else {
++				next = this.active
++					[ direction + "All" ]( ".ui-menu-item" )
++					.eq( 0 );
++			}
++		}
++		if ( !next || !next.length || !this.active ) {
++			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
++		}
++
++		this.focus( event, next );
++	},
++
++	nextPage: function( event ) {
++		var item, base, height;
++
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isLastItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.nextAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base - height < 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
++				[ !this.active ? "first" : "last" ]() );
++		}
++	},
++
++	previousPage: function( event ) {
++		var item, base, height;
++		if ( !this.active ) {
++			this.next( event );
++			return;
++		}
++		if ( this.isFirstItem() ) {
++			return;
++		}
++		if ( this._hasScroll() ) {
++			base = this.active.offset().top;
++			height = this.element.height();
++			this.active.prevAll( ".ui-menu-item" ).each(function() {
++				item = $( this );
++				return item.offset().top - base + height > 0;
++			});
++
++			this.focus( event, item );
++		} else {
++			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
++		}
++	},
++
++	_hasScroll: function() {
++		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
++	},
++
++	select: function( event ) {
++		// TODO: It should never be possible to not have an active item at this
++		// point, but the tests don't trigger mouseenter before click.
++		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
++		var ui = { item: this.active };
++		if ( !this.active.has( ".ui-menu" ).length ) {
++			this.collapseAll( event, true );
++		}
++		this._trigger( "select", event, ui );
++	}
++});
++
++}( jQuery ));
++(function( $, undefined ) {
++
++$.widget( "ui.progressbar", {
++	version: "1.10.3",
++	options: {
++		max: 100,
++		value: 0,
++
++		change: null,
++		complete: null
++	},
++
++	min: 0,
++
++	_create: function() {
++		// Constrain initial value
++		this.oldValue = this.options.value = this._constrainedValue();
++
++		this.element
++			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.attr({
++				// Only set static values, aria-valuenow and aria-valuemax are
++				// set inside _refreshValue()
++				role: "progressbar",
++				"aria-valuemin": this.min
++			});
++
++		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
++			.appendTo( this.element );
++
++		this._refreshValue();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++
++		this.valueDiv.remove();
++	},
++
++	value: function( newValue ) {
++		if ( newValue === undefined ) {
++			return this.options.value;
++		}
++
++		this.options.value = this._constrainedValue( newValue );
++		this._refreshValue();
++	},
++
++	_constrainedValue: function( newValue ) {
++		if ( newValue === undefined ) {
++			newValue = this.options.value;
++		}
++
++		this.indeterminate = newValue === false;
++
++		// sanitize value
++		if ( typeof newValue !== "number" ) {
++			newValue = 0;
++		}
++
++		return this.indeterminate ? false :
++			Math.min( this.options.max, Math.max( this.min, newValue ) );
++	},
++
++	_setOptions: function( options ) {
++		// Ensure "value" option is set after other values (like max)
++		var value = options.value;
++		delete options.value;
++
++		this._super( options );
++
++		this.options.value = this._constrainedValue( value );
++		this._refreshValue();
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "max" ) {
++			// Don't allow a max less than min
++			value = Math.max( this.min, value );
++		}
++
++		this._super( key, value );
++	},
++
++	_percentage: function() {
++		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
++	},
++
++	_refreshValue: function() {
++		var value = this.options.value,
++			percentage = this._percentage();
++
++		this.valueDiv
++			.toggle( this.indeterminate || value > this.min )
++			.toggleClass( "ui-corner-right", value === this.options.max )
++			.width( percentage.toFixed(0) + "%" );
++
++		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
++
++		if ( this.indeterminate ) {
++			this.element.removeAttr( "aria-valuenow" );
++			if ( !this.overlayDiv ) {
++				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
++			}
++		} else {
++			this.element.attr({
++				"aria-valuemax": this.options.max,
++				"aria-valuenow": value
++			});
++			if ( this.overlayDiv ) {
++				this.overlayDiv.remove();
++				this.overlayDiv = null;
++			}
++		}
++
++		if ( this.oldValue !== value ) {
++			this.oldValue = value;
++			this._trigger( "change" );
++		}
++		if ( value === this.options.max ) {
++			this._trigger( "complete" );
++		}
++	}
++});
++
++})( jQuery );
++(function( $, undefined ) {
++
++// number of pages in a slider
++// (how many times can you page up/down to go through the whole range)
++var numPages = 5;
++
++$.widget( "ui.slider", $.ui.mouse, {
++	version: "1.10.3",
++	widgetEventPrefix: "slide",
++
++	options: {
++		animate: false,
++		distance: 0,
++		max: 100,
++		min: 0,
++		orientation: "horizontal",
++		range: false,
++		step: 1,
++		value: 0,
++		values: null,
++
++		// callbacks
++		change: null,
++		slide: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		this._keySliding = false;
++		this._mouseSliding = false;
++		this._animateOff = true;
++		this._handleIndex = null;
++		this._detectOrientation();
++		this._mouseInit();
++
++		this.element
++			.addClass( "ui-slider" +
++				" ui-slider-" + this.orientation +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all");
++
++		this._refresh();
++		this._setOption( "disabled", this.options.disabled );
++
++		this._animateOff = false;
++	},
++
++	_refresh: function() {
++		this._createRange();
++		this._createHandles();
++		this._setupEvents();
++		this._refreshValue();
++	},
++
++	_createHandles: function() {
++		var i, handleCount,
++			options = this.options,
++			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
++			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
++			handles = [];
++
++		handleCount = ( options.values && options.values.length ) || 1;
++
++		if ( existingHandles.length > handleCount ) {
++			existingHandles.slice( handleCount ).remove();
++			existingHandles = existingHandles.slice( 0, handleCount );
++		}
++
++		for ( i = existingHandles.length; i < handleCount; i++ ) {
++			handles.push( handle );
++		}
++
++		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
++
++		this.handle = this.handles.eq( 0 );
++
++		this.handles.each(function( i ) {
++			$( this ).data( "ui-slider-handle-index", i );
++		});
++	},
++
++	_createRange: function() {
++		var options = this.options,
++			classes = "";
++
++		if ( options.range ) {
++			if ( options.range === true ) {
++				if ( !options.values ) {
++					options.values = [ this._valueMin(), this._valueMin() ];
++				} else if ( options.values.length && options.values.length !== 2 ) {
++					options.values = [ options.values[0], options.values[0] ];
++				} else if ( $.isArray( options.values ) ) {
++					options.values = options.values.slice(0);
++				}
++			}
++
++			if ( !this.range || !this.range.length ) {
++				this.range = $( "<div></div>" )
++					.appendTo( this.element );
++
++				classes = "ui-slider-range" +
++				// note: this isn't the most fittingly semantic framework class for this element,
++				// but worked best visually with a variety of themes
++				" ui-widget-header ui-corner-all";
++			} else {
++				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
++					// Handle range switching from true to min/max
++					.css({
++						"left": "",
++						"bottom": ""
++					});
++			}
++
++			this.range.addClass( classes +
++				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
++		} else {
++			this.range = $([]);
++		}
++	},
++
++	_setupEvents: function() {
++		var elements = this.handles.add( this.range ).filter( "a" );
++		this._off( elements );
++		this._on( elements, this._handleEvents );
++		this._hoverable( elements );
++		this._focusable( elements );
++	},
++
++	_destroy: function() {
++		this.handles.remove();
++		this.range.remove();
++
++		this.element
++			.removeClass( "ui-slider" +
++				" ui-slider-horizontal" +
++				" ui-slider-vertical" +
++				" ui-widget" +
++				" ui-widget-content" +
++				" ui-corner-all" );
++
++		this._mouseDestroy();
++	},
++
++	_mouseCapture: function( event ) {
++		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
++			that = this,
++			o = this.options;
++
++		if ( o.disabled ) {
++			return false;
++		}
++
++		this.elementSize = {
++			width: this.element.outerWidth(),
++			height: this.element.outerHeight()
++		};
++		this.elementOffset = this.element.offset();
++
++		position = { x: event.pageX, y: event.pageY };
++		normValue = this._normValueFromMouse( position );
++		distance = this._valueMax() - this._valueMin() + 1;
++		this.handles.each(function( i ) {
++			var thisDistance = Math.abs( normValue - that.values(i) );
++			if (( distance > thisDistance ) ||
++				( distance === thisDistance &&
++					(i === that._lastChangedValue || that.values(i) === o.min ))) {
++				distance = thisDistance;
++				closestHandle = $( this );
++				index = i;
++			}
++		});
++
++		allowed = this._start( event, index );
++		if ( allowed === false ) {
++			return false;
++		}
++		this._mouseSliding = true;
++
++		this._handleIndex = index;
++
++		closestHandle
++			.addClass( "ui-state-active" )
++			.focus();
++
++		offset = closestHandle.offset();
++		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
++		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
++			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
++			top: event.pageY - offset.top -
++				( closestHandle.height() / 2 ) -
++				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
++				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
++				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
++		};
++
++		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
++			this._slide( event, index, normValue );
++		}
++		this._animateOff = true;
++		return true;
++	},
++
++	_mouseStart: function() {
++		return true;
++	},
++
++	_mouseDrag: function( event ) {
++		var position = { x: event.pageX, y: event.pageY },
++			normValue = this._normValueFromMouse( position );
++
++		this._slide( event, this._handleIndex, normValue );
++
++		return false;
++	},
++
++	_mouseStop: function( event ) {
++		this.handles.removeClass( "ui-state-active" );
++		this._mouseSliding = false;
++
++		this._stop( event, this._handleIndex );
++		this._change( event, this._handleIndex );
++
++		this._handleIndex = null;
++		this._clickOffset = null;
++		this._animateOff = false;
++
++		return false;
++	},
++
++	_detectOrientation: function() {
++		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
++	},
++
++	_normValueFromMouse: function( position ) {
++		var pixelTotal,
++			pixelMouse,
++			percentMouse,
++			valueTotal,
++			valueMouse;
++
++		if ( this.orientation === "horizontal" ) {
++			pixelTotal = this.elementSize.width;
++			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
++		} else {
++			pixelTotal = this.elementSize.height;
++			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
++		}
++
++		percentMouse = ( pixelMouse / pixelTotal );
++		if ( percentMouse > 1 ) {
++			percentMouse = 1;
++		}
++		if ( percentMouse < 0 ) {
++			percentMouse = 0;
++		}
++		if ( this.orientation === "vertical" ) {
++			percentMouse = 1 - percentMouse;
++		}
++
++		valueTotal = this._valueMax() - this._valueMin();
++		valueMouse = this._valueMin() + percentMouse * valueTotal;
++
++		return this._trimAlignValue( valueMouse );
++	},
++
++	_start: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++		return this._trigger( "start", event, uiHash );
++	},
++
++	_slide: function( event, index, newVal ) {
++		var otherVal,
++			newValues,
++			allowed;
++
++		if ( this.options.values && this.options.values.length ) {
++			otherVal = this.values( index ? 0 : 1 );
++
++			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
++					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
++				) {
++				newVal = otherVal;
++			}
++
++			if ( newVal !== this.values( index ) ) {
++				newValues = this.values();
++				newValues[ index ] = newVal;
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal,
++					values: newValues
++				} );
++				otherVal = this.values( index ? 0 : 1 );
++				if ( allowed !== false ) {
++					this.values( index, newVal, true );
++				}
++			}
++		} else {
++			if ( newVal !== this.value() ) {
++				// A slide can be canceled by returning false from the slide callback
++				allowed = this._trigger( "slide", event, {
++					handle: this.handles[ index ],
++					value: newVal
++				} );
++				if ( allowed !== false ) {
++					this.value( newVal );
++				}
++			}
++		}
++	},
++
++	_stop: function( event, index ) {
++		var uiHash = {
++			handle: this.handles[ index ],
++			value: this.value()
++		};
++		if ( this.options.values && this.options.values.length ) {
++			uiHash.value = this.values( index );
++			uiHash.values = this.values();
++		}
++
++		this._trigger( "stop", event, uiHash );
++	},
++
++	_change: function( event, index ) {
++		if ( !this._keySliding && !this._mouseSliding ) {
++			var uiHash = {
++				handle: this.handles[ index ],
++				value: this.value()
++			};
++			if ( this.options.values && this.options.values.length ) {
++				uiHash.value = this.values( index );
++				uiHash.values = this.values();
++			}
++
++			//store the last changed value index for reference when handles overlap
++			this._lastChangedValue = index;
++
++			this._trigger( "change", event, uiHash );
++		}
++	},
++
++	value: function( newValue ) {
++		if ( arguments.length ) {
++			this.options.value = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, 0 );
++			return;
++		}
++
++		return this._value();
++	},
++
++	values: function( index, newValue ) {
++		var vals,
++			newValues,
++			i;
++
++		if ( arguments.length > 1 ) {
++			this.options.values[ index ] = this._trimAlignValue( newValue );
++			this._refreshValue();
++			this._change( null, index );
++			return;
++		}
++
++		if ( arguments.length ) {
++			if ( $.isArray( arguments[ 0 ] ) ) {
++				vals = this.options.values;
++				newValues = arguments[ 0 ];
++				for ( i = 0; i < vals.length; i += 1 ) {
++					vals[ i ] = this._trimAlignValue( newValues[ i ] );
++					this._change( null, i );
++				}
++				this._refreshValue();
++			} else {
++				if ( this.options.values && this.options.values.length ) {
++					return this._values( index );
++				} else {
++					return this.value();
++				}
++			}
++		} else {
++			return this._values();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var i,
++			valsLength = 0;
++
++		if ( key === "range" && this.options.range === true ) {
++			if ( value === "min" ) {
++				this.options.value = this._values( 0 );
++				this.options.values = null;
++			} else if ( value === "max" ) {
++				this.options.value = this._values( this.options.values.length-1 );
++				this.options.values = null;
++			}
++		}
++
++		if ( $.isArray( this.options.values ) ) {
++			valsLength = this.options.values.length;
++		}
++
++		$.Widget.prototype._setOption.apply( this, arguments );
++
++		switch ( key ) {
++			case "orientation":
++				this._detectOrientation();
++				this.element
++					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
++					.addClass( "ui-slider-" + this.orientation );
++				this._refreshValue();
++				break;
++			case "value":
++				this._animateOff = true;
++				this._refreshValue();
++				this._change( null, 0 );
++				this._animateOff = false;
++				break;
++			case "values":
++				this._animateOff = true;
++				this._refreshValue();
++				for ( i = 0; i < valsLength; i += 1 ) {
++					this._change( null, i );
++				}
++				this._animateOff = false;
++				break;
++			case "min":
++			case "max":
++				this._animateOff = true;
++				this._refreshValue();
++				this._animateOff = false;
++				break;
++			case "range":
++				this._animateOff = true;
++				this._refresh();
++				this._animateOff = false;
++				break;
++		}
++	},
++
++	//internal value getter
++	// _value() returns value trimmed by min and max, aligned by step
++	_value: function() {
++		var val = this.options.value;
++		val = this._trimAlignValue( val );
++
++		return val;
++	},
++
++	//internal values getter
++	// _values() returns array of values trimmed by min and max, aligned by step
++	// _values( index ) returns single value trimmed by min and max, aligned by step
++	_values: function( index ) {
++		var val,
++			vals,
++			i;
++
++		if ( arguments.length ) {
++			val = this.options.values[ index ];
++			val = this._trimAlignValue( val );
++
++			return val;
++		} else if ( this.options.values && this.options.values.length ) {
++			// .slice() creates a copy of the array
++			// this copy gets trimmed by min and max and then returned
++			vals = this.options.values.slice();
++			for ( i = 0; i < vals.length; i+= 1) {
++				vals[ i ] = this._trimAlignValue( vals[ i ] );
++			}
++
++			return vals;
++		} else {
++			return [];
++		}
++	},
++
++	// returns the step-aligned value that val is closest to, between (inclusive) min and max
++	_trimAlignValue: function( val ) {
++		if ( val <= this._valueMin() ) {
++			return this._valueMin();
++		}
++		if ( val >= this._valueMax() ) {
++			return this._valueMax();
++		}
++		var step = ( this.options.step > 0 ) ? this.options.step : 1,
++			valModStep = (val - this._valueMin()) % step,
++			alignValue = val - valModStep;
++
++		if ( Math.abs(valModStep) * 2 >= step ) {
++			alignValue += ( valModStep > 0 ) ? step : ( -step );
++		}
++
++		// Since JavaScript has problems with large floats, round
++		// the final value to 5 digits after the decimal point (see #4124)
++		return parseFloat( alignValue.toFixed(5) );
++	},
++
++	_valueMin: function() {
++		return this.options.min;
++	},
++
++	_valueMax: function() {
++		return this.options.max;
++	},
++
++	_refreshValue: function() {
++		var lastValPercent, valPercent, value, valueMin, valueMax,
++			oRange = this.options.range,
++			o = this.options,
++			that = this,
++			animate = ( !this._animateOff ) ? o.animate : false,
++			_set = {};
++
++		if ( this.options.values && this.options.values.length ) {
++			this.handles.each(function( i ) {
++				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
++				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++				if ( that.options.range === true ) {
++					if ( that.orientation === "horizontal" ) {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					} else {
++						if ( i === 0 ) {
++							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
++						}
++						if ( i === 1 ) {
++							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
++						}
++					}
++				}
++				lastValPercent = valPercent;
++			});
++		} else {
++			value = this.value();
++			valueMin = this._valueMin();
++			valueMax = this._valueMax();
++			valPercent = ( valueMax !== valueMin ) ?
++					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
++					0;
++			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
++			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
++
++			if ( oRange === "min" && this.orientation === "horizontal" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "horizontal" ) {
++				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++			if ( oRange === "min" && this.orientation === "vertical" ) {
++				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
++			}
++			if ( oRange === "max" && this.orientation === "vertical" ) {
++				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
++			}
++		}
++	},
++
++	_handleEvents: {
++		keydown: function( event ) {
++			/*jshint maxcomplexity:25*/
++			var allowed, curVal, newVal, step,
++				index = $( event.target ).data( "ui-slider-handle-index" );
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++				case $.ui.keyCode.END:
++				case $.ui.keyCode.PAGE_UP:
++				case $.ui.keyCode.PAGE_DOWN:
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					event.preventDefault();
++					if ( !this._keySliding ) {
++						this._keySliding = true;
++						$( event.target ).addClass( "ui-state-active" );
++						allowed = this._start( event, index );
++						if ( allowed === false ) {
++							return;
++						}
++					}
++					break;
++			}
++
++			step = this.options.step;
++			if ( this.options.values && this.options.values.length ) {
++				curVal = newVal = this.values( index );
++			} else {
++				curVal = newVal = this.value();
++			}
++
++			switch ( event.keyCode ) {
++				case $.ui.keyCode.HOME:
++					newVal = this._valueMin();
++					break;
++				case $.ui.keyCode.END:
++					newVal = this._valueMax();
++					break;
++				case $.ui.keyCode.PAGE_UP:
++					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.PAGE_DOWN:
++					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
++					break;
++				case $.ui.keyCode.UP:
++				case $.ui.keyCode.RIGHT:
++					if ( curVal === this._valueMax() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal + step );
++					break;
++				case $.ui.keyCode.DOWN:
++				case $.ui.keyCode.LEFT:
++					if ( curVal === this._valueMin() ) {
++						return;
++					}
++					newVal = this._trimAlignValue( curVal - step );
++					break;
++			}
++
++			this._slide( event, index, newVal );
++		},
++		click: function( event ) {
++			event.preventDefault();
++		},
++		keyup: function( event ) {
++			var index = $( event.target ).data( "ui-slider-handle-index" );
++
++			if ( this._keySliding ) {
++				this._keySliding = false;
++				this._stop( event, index );
++				this._change( event, index );
++				$( event.target ).removeClass( "ui-state-active" );
++			}
++		}
++	}
++
++});
++
++}(jQuery));
++(function( $ ) {
++
++function modifier( fn ) {
++	return function() {
++		var previous = this.element.val();
++		fn.apply( this, arguments );
++		this._refresh();
++		if ( previous !== this.element.val() ) {
++			this._trigger( "change" );
++		}
++	};
++}
++
++$.widget( "ui.spinner", {
++	version: "1.10.3",
++	defaultElement: "<input>",
++	widgetEventPrefix: "spin",
++	options: {
++		culture: null,
++		icons: {
++			down: "ui-icon-triangle-1-s",
++			up: "ui-icon-triangle-1-n"
++		},
++		incremental: true,
++		max: null,
++		min: null,
++		numberFormat: null,
++		page: 10,
++		step: 1,
++
++		change: null,
++		spin: null,
++		start: null,
++		stop: null
++	},
++
++	_create: function() {
++		// handle string values that need to be parsed
++		this._setOption( "max", this.options.max );
++		this._setOption( "min", this.options.min );
++		this._setOption( "step", this.options.step );
++
++		// format the value, but don't constrain
++		this._value( this.element.val(), true );
++
++		this._draw();
++		this._on( this._events );
++		this._refresh();
++
++		// turning off autocomplete prevents the browser from remembering the
++		// value when navigating through history, so we re-enable autocomplete
++		// if the page is unloaded before the widget is destroyed. #7790
++		this._on( this.window, {
++			beforeunload: function() {
++				this.element.removeAttr( "autocomplete" );
++			}
++		});
++	},
++
++	_getCreateOptions: function() {
++		var options = {},
++			element = this.element;
++
++		$.each( [ "min", "max", "step" ], function( i, option ) {
++			var value = element.attr( option );
++			if ( value !== undefined && value.length ) {
++				options[ option ] = value;
++			}
++		});
++
++		return options;
++	},
++
++	_events: {
++		keydown: function( event ) {
++			if ( this._start( event ) && this._keydown( event ) ) {
++				event.preventDefault();
++			}
++		},
++		keyup: "_stop",
++		focus: function() {
++			this.previous = this.element.val();
++		},
++		blur: function( event ) {
++			if ( this.cancelBlur ) {
++				delete this.cancelBlur;
++				return;
++			}
++
++			this._stop();
++			this._refresh();
++			if ( this.previous !== this.element.val() ) {
++				this._trigger( "change", event );
++			}
++		},
++		mousewheel: function( event, delta ) {
++			if ( !delta ) {
++				return;
++			}
++			if ( !this.spinning && !this._start( event ) ) {
++				return false;
++			}
++
++			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
++			clearTimeout( this.mousewheelTimer );
++			this.mousewheelTimer = this._delay(function() {
++				if ( this.spinning ) {
++					this._stop( event );
++				}
++			}, 100 );
++			event.preventDefault();
++		},
++		"mousedown .ui-spinner-button": function( event ) {
++			var previous;
++
++			// We never want the buttons to have focus; whenever the user is
++			// interacting with the spinner, the focus should be on the input.
++			// If the input is focused then this.previous is properly set from
++			// when the input first received focus. If the input is not focused
++			// then we need to set this.previous based on the value before spinning.
++			previous = this.element[0] === this.document[0].activeElement ?
++				this.previous : this.element.val();
++			function checkFocus() {
++				var isActive = this.element[0] === this.document[0].activeElement;
++				if ( !isActive ) {
++					this.element.focus();
++					this.previous = previous;
++					// support: IE
++					// IE sets focus asynchronously, so we need to check if focus
++					// moved off of the input because the user clicked on the button.
++					this._delay(function() {
++						this.previous = previous;
++					});
++				}
++			}
++
++			// ensure focus is on (or stays on) the text field
++			event.preventDefault();
++			checkFocus.call( this );
++
++			// support: IE
++			// IE doesn't prevent moving focus even with event.preventDefault()
++			// so we set a flag to know when we should ignore the blur event
++			// and check (again) if focus moved off of the input.
++			this.cancelBlur = true;
++			this._delay(function() {
++				delete this.cancelBlur;
++				checkFocus.call( this );
++			});
++
++			if ( this._start( event ) === false ) {
++				return;
++			}
++
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		"mouseup .ui-spinner-button": "_stop",
++		"mouseenter .ui-spinner-button": function( event ) {
++			// button will add ui-state-active if mouse was down while mouseleave and kept down
++			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
++				return;
++			}
++
++			if ( this._start( event ) === false ) {
++				return false;
++			}
++			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
++		},
++		// TODO: do we really want to consider this a stop?
++		// shouldn't we just stop the repeater and wait until mouseup before
++		// we trigger the stop event?
++		"mouseleave .ui-spinner-button": "_stop"
++	},
++
++	_draw: function() {
++		var uiSpinner = this.uiSpinner = this.element
++			.addClass( "ui-spinner-input" )
++			.attr( "autocomplete", "off" )
++			.wrap( this._uiSpinnerHtml() )
++			.parent()
++				// add buttons
++				.append( this._buttonHtml() );
++
++		this.element.attr( "role", "spinbutton" );
++
++		// button bindings
++		this.buttons = uiSpinner.find( ".ui-spinner-button" )
++			.attr( "tabIndex", -1 )
++			.button()
++			.removeClass( "ui-corner-all" );
++
++		// IE 6 doesn't understand height: 50% for the buttons
++		// unless the wrapper has an explicit height
++		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
++				uiSpinner.height() > 0 ) {
++			uiSpinner.height( uiSpinner.height() );
++		}
++
++		// disable spinner if element was already disabled
++		if ( this.options.disabled ) {
++			this.disable();
++		}
++	},
++
++	_keydown: function( event ) {
++		var options = this.options,
++			keyCode = $.ui.keyCode;
++
++		switch ( event.keyCode ) {
++		case keyCode.UP:
++			this._repeat( null, 1, event );
++			return true;
++		case keyCode.DOWN:
++			this._repeat( null, -1, event );
++			return true;
++		case keyCode.PAGE_UP:
++			this._repeat( null, options.page, event );
++			return true;
++		case keyCode.PAGE_DOWN:
++			this._repeat( null, -options.page, event );
++			return true;
++		}
++
++		return false;
++	},
++
++	_uiSpinnerHtml: function() {
++		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
++	},
++
++	_buttonHtml: function() {
++		return "" +
++			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
++				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
++			"</a>" +
++			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
++				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
++			"</a>";
++	},
++
++	_start: function( event ) {
++		if ( !this.spinning && this._trigger( "start", event ) === false ) {
++			return false;
++		}
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++		this.spinning = true;
++		return true;
++	},
++
++	_repeat: function( i, steps, event ) {
++		i = i || 500;
++
++		clearTimeout( this.timer );
++		this.timer = this._delay(function() {
++			this._repeat( 40, steps, event );
++		}, i );
++
++		this._spin( steps * this.options.step, event );
++	},
++
++	_spin: function( step, event ) {
++		var value = this.value() || 0;
++
++		if ( !this.counter ) {
++			this.counter = 1;
++		}
++
++		value = this._adjustValue( value + step * this._increment( this.counter ) );
++
++		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
++			this._value( value );
++			this.counter++;
++		}
++	},
++
++	_increment: function( i ) {
++		var incremental = this.options.incremental;
++
++		if ( incremental ) {
++			return $.isFunction( incremental ) ?
++				incremental( i ) :
++				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
++		}
++
++		return 1;
++	},
++
++	_precision: function() {
++		var precision = this._precisionOf( this.options.step );
++		if ( this.options.min !== null ) {
++			precision = Math.max( precision, this._precisionOf( this.options.min ) );
++		}
++		return precision;
++	},
++
++	_precisionOf: function( num ) {
++		var str = num.toString(),
++			decimal = str.indexOf( "." );
++		return decimal === -1 ? 0 : str.length - decimal - 1;
++	},
++
++	_adjustValue: function( value ) {
++		var base, aboveMin,
++			options = this.options;
++
++		// make sure we're at a valid step
++		// - find out where we are relative to the base (min or 0)
++		base = options.min !== null ? options.min : 0;
++		aboveMin = value - base;
++		// - round to the nearest step
++		aboveMin = Math.round(aboveMin / options.step) * options.step;
++		// - rounding is based on 0, so adjust back to our base
++		value = base + aboveMin;
++
++		// fix precision from bad JS floating point math
++		value = parseFloat( value.toFixed( this._precision() ) );
++
++		// clamp the value
++		if ( options.max !== null && value > options.max) {
++			return options.max;
++		}
++		if ( options.min !== null && value < options.min ) {
++			return options.min;
++		}
++
++		return value;
++	},
++
++	_stop: function( event ) {
++		if ( !this.spinning ) {
++			return;
++		}
++
++		clearTimeout( this.timer );
++		clearTimeout( this.mousewheelTimer );
++		this.counter = 0;
++		this.spinning = false;
++		this._trigger( "stop", event );
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "culture" || key === "numberFormat" ) {
++			var prevValue = this._parse( this.element.val() );
++			this.options[ key ] = value;
++			this.element.val( this._format( prevValue ) );
++			return;
++		}
++
++		if ( key === "max" || key === "min" || key === "step" ) {
++			if ( typeof value === "string" ) {
++				value = this._parse( value );
++			}
++		}
++		if ( key === "icons" ) {
++			this.buttons.first().find( ".ui-icon" )
++				.removeClass( this.options.icons.up )
++				.addClass( value.up );
++			this.buttons.last().find( ".ui-icon" )
++				.removeClass( this.options.icons.down )
++				.addClass( value.down );
++		}
++
++		this._super( key, value );
++
++		if ( key === "disabled" ) {
++			if ( value ) {
++				this.element.prop( "disabled", true );
++				this.buttons.button( "disable" );
++			} else {
++				this.element.prop( "disabled", false );
++				this.buttons.button( "enable" );
++			}
++		}
++	},
++
++	_setOptions: modifier(function( options ) {
++		this._super( options );
++		this._value( this.element.val() );
++	}),
++
++	_parse: function( val ) {
++		if ( typeof val === "string" && val !== "" ) {
++			val = window.Globalize && this.options.numberFormat ?
++				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
++		}
++		return val === "" || isNaN( val ) ? null : val;
++	},
++
++	_format: function( value ) {
++		if ( value === "" ) {
++			return "";
++		}
++		return window.Globalize && this.options.numberFormat ?
++			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
++			value;
++	},
++
++	_refresh: function() {
++		this.element.attr({
++			"aria-valuemin": this.options.min,
++			"aria-valuemax": this.options.max,
++			// TODO: what should we do with values that can't be parsed?
++			"aria-valuenow": this._parse( this.element.val() )
++		});
++	},
++
++	// update the value without triggering change
++	_value: function( value, allowAny ) {
++		var parsed;
++		if ( value !== "" ) {
++			parsed = this._parse( value );
++			if ( parsed !== null ) {
++				if ( !allowAny ) {
++					parsed = this._adjustValue( parsed );
++				}
++				value = this._format( parsed );
++			}
++		}
++		this.element.val( value );
++		this._refresh();
++	},
++
++	_destroy: function() {
++		this.element
++			.removeClass( "ui-spinner-input" )
++			.prop( "disabled", false )
++			.removeAttr( "autocomplete" )
++			.removeAttr( "role" )
++			.removeAttr( "aria-valuemin" )
++			.removeAttr( "aria-valuemax" )
++			.removeAttr( "aria-valuenow" );
++		this.uiSpinner.replaceWith( this.element );
++	},
++
++	stepUp: modifier(function( steps ) {
++		this._stepUp( steps );
++	}),
++	_stepUp: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * this.options.step );
++			this._stop();
++		}
++	},
++
++	stepDown: modifier(function( steps ) {
++		this._stepDown( steps );
++	}),
++	_stepDown: function( steps ) {
++		if ( this._start() ) {
++			this._spin( (steps || 1) * -this.options.step );
++			this._stop();
++		}
++	},
++
++	pageUp: modifier(function( pages ) {
++		this._stepUp( (pages || 1) * this.options.page );
++	}),
++
++	pageDown: modifier(function( pages ) {
++		this._stepDown( (pages || 1) * this.options.page );
++	}),
++
++	value: function( newVal ) {
++		if ( !arguments.length ) {
++			return this._parse( this.element.val() );
++		}
++		modifier( this._value ).call( this, newVal );
++	},
++
++	widget: function() {
++		return this.uiSpinner;
++	}
++});
++
++}( jQuery ) );
++(function( $, undefined ) {
++
++var tabId = 0,
++	rhash = /#.*$/;
++
++function getNextTabId() {
++	return ++tabId;
++}
++
++function isLocal( anchor ) {
++	return anchor.hash.length > 1 &&
++		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
++			decodeURIComponent( location.href.replace( rhash, "" ) );
++}
++
++$.widget( "ui.tabs", {
++	version: "1.10.3",
++	delay: 300,
++	options: {
++		active: null,
++		collapsible: false,
++		event: "click",
++		heightStyle: "content",
++		hide: null,
++		show: null,
++
++		// callbacks
++		activate: null,
++		beforeActivate: null,
++		beforeLoad: null,
++		load: null
++	},
++
++	_create: function() {
++		var that = this,
++			options = this.options;
++
++		this.running = false;
++
++		this.element
++			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
++			.toggleClass( "ui-tabs-collapsible", options.collapsible )
++			// Prevent users from focusing disabled tabs via click
++			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
++				if ( $( this ).is( ".ui-state-disabled" ) ) {
++					event.preventDefault();
++				}
++			})
++			// support: IE <9
++			// Preventing the default action in mousedown doesn't prevent IE
++			// from focusing the element, so if the anchor gets focused, blur.
++			// We don't have to worry about focusing the previously focused
++			// element since clicking on a non-focusable element should focus
++			// the body anyway.
++			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
++				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
++					this.blur();
++				}
++			});
++
++		this._processTabs();
++		options.active = this._initialActive();
++
++		// Take disabling tabs via class attribute from HTML
++		// into account and update option properly.
++		if ( $.isArray( options.disabled ) ) {
++			options.disabled = $.unique( options.disabled.concat(
++				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
++					return that.tabs.index( li );
++				})
++			) ).sort();
++		}
++
++		// check for length avoids error when initializing empty list
++		if ( this.options.active !== false && this.anchors.length ) {
++			this.active = this._findActive( options.active );
++		} else {
++			this.active = $();
++		}
++
++		this._refresh();
++
++		if ( this.active.length ) {
++			this.load( options.active );
++		}
++	},
++
++	_initialActive: function() {
++		var active = this.options.active,
++			collapsible = this.options.collapsible,
++			locationHash = location.hash.substring( 1 );
++
++		if ( active === null ) {
++			// check the fragment identifier in the URL
++			if ( locationHash ) {
++				this.tabs.each(function( i, tab ) {
++					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
++						active = i;
++						return false;
++					}
++				});
++			}
++
++			// check for a tab marked active via a class
++			if ( active === null ) {
++				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
++			}
++
++			// no active tab, set to false
++			if ( active === null || active === -1 ) {
++				active = this.tabs.length ? 0 : false;
++			}
++		}
++
++		// handle numbers: negative, out of range
++		if ( active !== false ) {
++			active = this.tabs.index( this.tabs.eq( active ) );
++			if ( active === -1 ) {
++				active = collapsible ? false : 0;
++			}
++		}
++
++		// don't allow collapsible: false and active: false
++		if ( !collapsible && active === false && this.anchors.length ) {
++			active = 0;
++		}
++
++		return active;
++	},
++
++	_getCreateEventData: function() {
++		return {
++			tab: this.active,
++			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
++		};
++	},
++
++	_tabKeydown: function( event ) {
++		/*jshint maxcomplexity:15*/
++		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
++			selectedIndex = this.tabs.index( focusedTab ),
++			goingForward = true;
++
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		switch ( event.keyCode ) {
++			case $.ui.keyCode.RIGHT:
++			case $.ui.keyCode.DOWN:
++				selectedIndex++;
++				break;
++			case $.ui.keyCode.UP:
++			case $.ui.keyCode.LEFT:
++				goingForward = false;
++				selectedIndex--;
++				break;
++			case $.ui.keyCode.END:
++				selectedIndex = this.anchors.length - 1;
++				break;
++			case $.ui.keyCode.HOME:
++				selectedIndex = 0;
++				break;
++			case $.ui.keyCode.SPACE:
++				// Activate only, no collapsing
++				event.preventDefault();
++				clearTimeout( this.activating );
++				this._activate( selectedIndex );
++				return;
++			case $.ui.keyCode.ENTER:
++				// Toggle (cancel delayed activation, allow collapsing)
++				event.preventDefault();
++				clearTimeout( this.activating );
++				// Determine if we should collapse or activate
++				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
++				return;
++			default:
++				return;
++		}
++
++		// Focus the appropriate tab, based on which key was pressed
++		event.preventDefault();
++		clearTimeout( this.activating );
++		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
++
++		// Navigating with control key will prevent automatic activation
++		if ( !event.ctrlKey ) {
++			// Update aria-selected immediately so that AT think the tab is already selected.
++			// Otherwise AT may confuse the user by stating that they need to activate the tab,
++			// but the tab will already be activated by the time the announcement finishes.
++			focusedTab.attr( "aria-selected", "false" );
++			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
++
++			this.activating = this._delay(function() {
++				this.option( "active", selectedIndex );
++			}, this.delay );
++		}
++	},
++
++	_panelKeydown: function( event ) {
++		if ( this._handlePageNav( event ) ) {
++			return;
++		}
++
++		// Ctrl+up moves focus to the current tab
++		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
++			event.preventDefault();
++			this.active.focus();
++		}
++	},
++
++	// Alt+page up/down moves focus to the previous/next tab (and activates)
++	_handlePageNav: function( event ) {
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
++			this._activate( this._focusNextTab( this.options.active - 1, false ) );
++			return true;
++		}
++		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
++			this._activate( this._focusNextTab( this.options.active + 1, true ) );
++			return true;
++		}
++	},
++
++	_findNextTab: function( index, goingForward ) {
++		var lastTabIndex = this.tabs.length - 1;
++
++		function constrain() {
++			if ( index > lastTabIndex ) {
++				index = 0;
++			}
++			if ( index < 0 ) {
++				index = lastTabIndex;
++			}
++			return index;
++		}
++
++		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
++			index = goingForward ? index + 1 : index - 1;
++		}
++
++		return index;
++	},
++
++	_focusNextTab: function( index, goingForward ) {
++		index = this._findNextTab( index, goingForward );
++		this.tabs.eq( index ).focus();
++		return index;
++	},
++
++	_setOption: function( key, value ) {
++		if ( key === "active" ) {
++			// _activate() will handle invalid values and update this.options
++			this._activate( value );
++			return;
++		}
++
++		if ( key === "disabled" ) {
++			// don't use the widget factory's disabled handling
++			this._setupDisabled( value );
++			return;
++		}
++
++		this._super( key, value);
++
++		if ( key === "collapsible" ) {
++			this.element.toggleClass( "ui-tabs-collapsible", value );
++			// Setting collapsible: false while collapsed; open first panel
++			if ( !value && this.options.active === false ) {
++				this._activate( 0 );
++			}
++		}
++
++		if ( key === "event" ) {
++			this._setupEvents( value );
++		}
++
++		if ( key === "heightStyle" ) {
++			this._setupHeightStyle( value );
++		}
++	},
++
++	_tabId: function( tab ) {
++		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
++	},
++
++	_sanitizeSelector: function( hash ) {
++		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
++	},
++
++	refresh: function() {
++		var options = this.options,
++			lis = this.tablist.children( ":has(a[href])" );
++
++		// get disabled tabs from class attribute from HTML
++		// this will get converted to a boolean if needed in _refresh()
++		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
++			return lis.index( tab );
++		});
++
++		this._processTabs();
++
++		// was collapsed or no tabs
++		if ( options.active === false || !this.anchors.length ) {
++			options.active = false;
++			this.active = $();
++		// was active, but active tab is gone
++		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
++			// all remaining tabs are disabled
++			if ( this.tabs.length === options.disabled.length ) {
++				options.active = false;
++				this.active = $();
++			// activate previous tab
++			} else {
++				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
++			}
++		// was active, active tab still exists
++		} else {
++			// make sure active index is correct
++			options.active = this.tabs.index( this.active );
++		}
++
++		this._refresh();
++	},
++
++	_refresh: function() {
++		this._setupDisabled( this.options.disabled );
++		this._setupEvents( this.options.event );
++		this._setupHeightStyle( this.options.heightStyle );
++
++		this.tabs.not( this.active ).attr({
++			"aria-selected": "false",
++			tabIndex: -1
++		});
++		this.panels.not( this._getPanelForTab( this.active ) )
++			.hide()
++			.attr({
++				"aria-expanded": "false",
++				"aria-hidden": "true"
++			});
++
++		// Make sure one tab is in the tab order
++		if ( !this.active.length ) {
++			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
++		} else {
++			this.active
++				.addClass( "ui-tabs-active ui-state-active" )
++				.attr({
++					"aria-selected": "true",
++					tabIndex: 0
++				});
++			this._getPanelForTab( this.active )
++				.show()
++				.attr({
++					"aria-expanded": "true",
++					"aria-hidden": "false"
++				});
++		}
++	},
++
++	_processTabs: function() {
++		var that = this;
++
++		this.tablist = this._getList()
++			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.attr( "role", "tablist" );
++
++		this.tabs = this.tablist.find( "> li:has(a[href])" )
++			.addClass( "ui-state-default ui-corner-top" )
++			.attr({
++				role: "tab",
++				tabIndex: -1
++			});
++
++		this.anchors = this.tabs.map(function() {
++				return $( "a", this )[ 0 ];
++			})
++			.addClass( "ui-tabs-anchor" )
++			.attr({
++				role: "presentation",
++				tabIndex: -1
++			});
++
++		this.panels = $();
++
++		this.anchors.each(function( i, anchor ) {
++			var selector, panel, panelId,
++				anchorId = $( anchor ).uniqueId().attr( "id" ),
++				tab = $( anchor ).closest( "li" ),
++				originalAriaControls = tab.attr( "aria-controls" );
++
++			// inline tab
++			if ( isLocal( anchor ) ) {
++				selector = anchor.hash;
++				panel = that.element.find( that._sanitizeSelector( selector ) );
++			// remote tab
++			} else {
++				panelId = that._tabId( tab );
++				selector = "#" + panelId;
++				panel = that.element.find( selector );
++				if ( !panel.length ) {
++					panel = that._createPanel( panelId );
++					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
++				}
++				panel.attr( "aria-live", "polite" );
++			}
++
++			if ( panel.length) {
++				that.panels = that.panels.add( panel );
++			}
++			if ( originalAriaControls ) {
++				tab.data( "ui-tabs-aria-controls", originalAriaControls );
++			}
++			tab.attr({
++				"aria-controls": selector.substring( 1 ),
++				"aria-labelledby": anchorId
++			});
++			panel.attr( "aria-labelledby", anchorId );
++		});
++
++		this.panels
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.attr( "role", "tabpanel" );
++	},
++
++	// allow overriding how to find the list for rare usage scenarios (#7715)
++	_getList: function() {
++		return this.element.find( "ol,ul" ).eq( 0 );
++	},
++
++	_createPanel: function( id ) {
++		return $( "<div>" )
++			.attr( "id", id )
++			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
++			.data( "ui-tabs-destroy", true );
++	},
++
++	_setupDisabled: function( disabled ) {
++		if ( $.isArray( disabled ) ) {
++			if ( !disabled.length ) {
++				disabled = false;
++			} else if ( disabled.length === this.anchors.length ) {
++				disabled = true;
++			}
++		}
++
++		// disable tabs
++		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
++			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
++				$( li )
++					.addClass( "ui-state-disabled" )
++					.attr( "aria-disabled", "true" );
++			} else {
++				$( li )
++					.removeClass( "ui-state-disabled" )
++					.removeAttr( "aria-disabled" );
++			}
++		}
++
++		this.options.disabled = disabled;
++	},
++
++	_setupEvents: function( event ) {
++		var events = {
++			click: function( event ) {
++				event.preventDefault();
++			}
++		};
++		if ( event ) {
++			$.each( event.split(" "), function( index, eventName ) {
++				events[ eventName ] = "_eventHandler";
++			});
++		}
++
++		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
++		this._on( this.anchors, events );
++		this._on( this.tabs, { keydown: "_tabKeydown" } );
++		this._on( this.panels, { keydown: "_panelKeydown" } );
++
++		this._focusable( this.tabs );
++		this._hoverable( this.tabs );
++	},
++
++	_setupHeightStyle: function( heightStyle ) {
++		var maxHeight,
++			parent = this.element.parent();
++
++		if ( heightStyle === "fill" ) {
++			maxHeight = parent.height();
++			maxHeight -= this.element.outerHeight() - this.element.height();
++
++			this.element.siblings( ":visible" ).each(function() {
++				var elem = $( this ),
++					position = elem.css( "position" );
++
++				if ( position === "absolute" || position === "fixed" ) {
++					return;
++				}
++				maxHeight -= elem.outerHeight( true );
++			});
++
++			this.element.children().not( this.panels ).each(function() {
++				maxHeight -= $( this ).outerHeight( true );
++			});
++
++			this.panels.each(function() {
++				$( this ).height( Math.max( 0, maxHeight -
++					$( this ).innerHeight() + $( this ).height() ) );
++			})
++			.css( "overflow", "auto" );
++		} else if ( heightStyle === "auto" ) {
++			maxHeight = 0;
++			this.panels.each(function() {
++				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
++			}).height( maxHeight );
++		}
++	},
++
++	_eventHandler: function( event ) {
++		var options = this.options,
++			active = this.active,
++			anchor = $( event.currentTarget ),
++			tab = anchor.closest( "li" ),
++			clickedIsActive = tab[ 0 ] === active[ 0 ],
++			collapsing = clickedIsActive && options.collapsible,
++			toShow = collapsing ? $() : this._getPanelForTab( tab ),
++			toHide = !active.length ? $() : this._getPanelForTab( active ),
++			eventData = {
++				oldTab: active,
++				oldPanel: toHide,
++				newTab: collapsing ? $() : tab,
++				newPanel: toShow
++			};
++
++		event.preventDefault();
++
++		if ( tab.hasClass( "ui-state-disabled" ) ||
++				// tab is already loading
++				tab.hasClass( "ui-tabs-loading" ) ||
++				// can't switch durning an animation
++				this.running ||
++				// click on active header, but not collapsible
++				( clickedIsActive && !options.collapsible ) ||
++				// allow canceling activation
++				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
++			return;
++		}
++
++		options.active = collapsing ? false : this.tabs.index( tab );
++
++		this.active = clickedIsActive ? $() : tab;
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		if ( !toHide.length && !toShow.length ) {
++			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
++		}
++
++		if ( toShow.length ) {
++			this.load( this.tabs.index( tab ), event );
++		}
++		this._toggle( event, eventData );
++	},
++
++	// handles show/hide for selecting tabs
++	_toggle: function( event, eventData ) {
++		var that = this,
++			toShow = eventData.newPanel,
++			toHide = eventData.oldPanel;
++
++		this.running = true;
++
++		function complete() {
++			that.running = false;
++			that._trigger( "activate", event, eventData );
++		}
++
++		function show() {
++			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
++
++			if ( toShow.length && that.options.show ) {
++				that._show( toShow, that.options.show, complete );
++			} else {
++				toShow.show();
++				complete();
++			}
++		}
++
++		// start out by hiding, then showing, then completing
++		if ( toHide.length && this.options.hide ) {
++			this._hide( toHide, this.options.hide, function() {
++				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++				show();
++			});
++		} else {
++			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
++			toHide.hide();
++			show();
++		}
++
++		toHide.attr({
++			"aria-expanded": "false",
++			"aria-hidden": "true"
++		});
++		eventData.oldTab.attr( "aria-selected", "false" );
++		// If we're switching tabs, remove the old tab from the tab order.
++		// If we're opening from collapsed state, remove the previous tab from the tab order.
++		// If we're collapsing, then keep the collapsing tab in the tab order.
++		if ( toShow.length && toHide.length ) {
++			eventData.oldTab.attr( "tabIndex", -1 );
++		} else if ( toShow.length ) {
++			this.tabs.filter(function() {
++				return $( this ).attr( "tabIndex" ) === 0;
++			})
++			.attr( "tabIndex", -1 );
++		}
++
++		toShow.attr({
++			"aria-expanded": "true",
++			"aria-hidden": "false"
++		});
++		eventData.newTab.attr({
++			"aria-selected": "true",
++			tabIndex: 0
++		});
++	},
++
++	_activate: function( index ) {
++		var anchor,
++			active = this._findActive( index );
++
++		// trying to activate the already active panel
++		if ( active[ 0 ] === this.active[ 0 ] ) {
++			return;
++		}
++
++		// trying to collapse, simulate a click on the current active header
++		if ( !active.length ) {
++			active = this.active;
++		}
++
++		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
++		this._eventHandler({
++			target: anchor,
++			currentTarget: anchor,
++			preventDefault: $.noop
++		});
++	},
++
++	_findActive: function( index ) {
++		return index === false ? $() : this.tabs.eq( index );
++	},
++
++	_getIndex: function( index ) {
++		// meta-function to give users option to provide a href string instead of a numerical index.
++		if ( typeof index === "string" ) {
++			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
++		}
++
++		return index;
++	},
++
++	_destroy: function() {
++		if ( this.xhr ) {
++			this.xhr.abort();
++		}
++
++		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
++
++		this.tablist
++			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
++			.removeAttr( "role" );
++
++		this.anchors
++			.removeClass( "ui-tabs-anchor" )
++			.removeAttr( "role" )
++			.removeAttr( "tabIndex" )
++			.removeUniqueId();
++
++		this.tabs.add( this.panels ).each(function() {
++			if ( $.data( this, "ui-tabs-destroy" ) ) {
++				$( this ).remove();
++			} else {
++				$( this )
++					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
++						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
++					.removeAttr( "tabIndex" )
++					.removeAttr( "aria-live" )
++					.removeAttr( "aria-busy" )
++					.removeAttr( "aria-selected" )
++					.removeAttr( "aria-labelledby" )
++					.removeAttr( "aria-hidden" )
++					.removeAttr( "aria-expanded" )
++					.removeAttr( "role" );
++			}
++		});
++
++		this.tabs.each(function() {
++			var li = $( this ),
++				prev = li.data( "ui-tabs-aria-controls" );
++			if ( prev ) {
++				li
++					.attr( "aria-controls", prev )
++					.removeData( "ui-tabs-aria-controls" );
++			} else {
++				li.removeAttr( "aria-controls" );
++			}
++		});
++
++		this.panels.show();
++
++		if ( this.options.heightStyle !== "content" ) {
++			this.panels.css( "height", "" );
++		}
++	},
++
++	enable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === false ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = false;
++		} else {
++			index = this._getIndex( index );
++			if ( $.isArray( disabled ) ) {
++				disabled = $.map( disabled, function( num ) {
++					return num !== index ? num : null;
++				});
++			} else {
++				disabled = $.map( this.tabs, function( li, num ) {
++					return num !== index ? num : null;
++				});
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	disable: function( index ) {
++		var disabled = this.options.disabled;
++		if ( disabled === true ) {
++			return;
++		}
++
++		if ( index === undefined ) {
++			disabled = true;
++		} else {
++			index = this._getIndex( index );
++			if ( $.inArray( index, disabled ) !== -1 ) {
++				return;
++			}
++			if ( $.isArray( disabled ) ) {
++				disabled = $.merge( [ index ], disabled ).sort();
++			} else {
++				disabled = [ index ];
++			}
++		}
++		this._setupDisabled( disabled );
++	},
++
++	load: function( index, event ) {
++		index = this._getIndex( index );
++		var that = this,
++			tab = this.tabs.eq( index ),
++			anchor = tab.find( ".ui-tabs-anchor" ),
++			panel = this._getPanelForTab( tab ),
++			eventData = {
++				tab: tab,
++				panel: panel
++			};
++
++		// not remote
++		if ( isLocal( anchor[ 0 ] ) ) {
++			return;
++		}
++
++		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
++
++		// support: jQuery <1.8
++		// jQuery <1.8 returns false if the request is canceled in beforeSend,
++		// but as of 1.8, $.ajax() always returns a jqXHR object.
++		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
++			tab.addClass( "ui-tabs-loading" );
++			panel.attr( "aria-busy", "true" );
++
++			this.xhr
++				.success(function( response ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						panel.html( response );
++						that._trigger( "load", event, eventData );
++					}, 1 );
++				})
++				.complete(function( jqXHR, status ) {
++					// support: jQuery <1.8
++					// http://bugs.jquery.com/ticket/11778
++					setTimeout(function() {
++						if ( status === "abort" ) {
++							that.panels.stop( false, true );
++						}
++
++						tab.removeClass( "ui-tabs-loading" );
++						panel.removeAttr( "aria-busy" );
++
++						if ( jqXHR === that.xhr ) {
++							delete that.xhr;
++						}
++					}, 1 );
++				});
++		}
++	},
++
++	_ajaxSettings: function( anchor, event, eventData ) {
++		var that = this;
++		return {
++			url: anchor.attr( "href" ),
++			beforeSend: function( jqXHR, settings ) {
++				return that._trigger( "beforeLoad", event,
++					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
++			}
++		};
++	},
++
++	_getPanelForTab: function( tab ) {
++		var id = $( tab ).attr( "aria-controls" );
++		return this.element.find( this._sanitizeSelector( "#" + id ) );
++	}
++});
++
++})( jQuery );
++(function( $ ) {
++
++var increments = 0;
++
++function addDescribedBy( elem, id ) {
++	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
++	describedby.push( id );
++	elem
++		.data( "ui-tooltip-id", id )
++		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
++}
++
++function removeDescribedBy( elem ) {
++	var id = elem.data( "ui-tooltip-id" ),
++		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
++		index = $.inArray( id, describedby );
++	if ( index !== -1 ) {
++		describedby.splice( index, 1 );
++	}
++
++	elem.removeData( "ui-tooltip-id" );
++	describedby = $.trim( describedby.join( " " ) );
++	if ( describedby ) {
++		elem.attr( "aria-describedby", describedby );
++	} else {
++		elem.removeAttr( "aria-describedby" );
++	}
++}
++
++$.widget( "ui.tooltip", {
++	version: "1.10.3",
++	options: {
++		content: function() {
++			// support: IE<9, Opera in jQuery <1.7
++			// .text() can't accept undefined, so coerce to a string
++			var title = $( this ).attr( "title" ) || "";
++			// Escape title, since we're going from an attribute to raw HTML
++			return $( "<a>" ).text( title ).html();
++		},
++		hide: true,
++		// Disabled elements have inconsistent behavior across browsers (#8661)
++		items: "[title]:not([disabled])",
++		position: {
++			my: "left top+15",
++			at: "left bottom",
++			collision: "flipfit flip"
++		},
++		show: true,
++		tooltipClass: null,
++		track: false,
++
++		// callbacks
++		close: null,
++		open: null
++	},
++
++	_create: function() {
++		this._on({
++			mouseover: "open",
++			focusin: "open"
++		});
++
++		// IDs of generated tooltips, needed for destroy
++		this.tooltips = {};
++		// IDs of parent tooltips where we removed the title attribute
++		this.parents = {};
++
++		if ( this.options.disabled ) {
++			this._disable();
++		}
++	},
++
++	_setOption: function( key, value ) {
++		var that = this;
++
++		if ( key === "disabled" ) {
++			this[ value ? "_disable" : "_enable" ]();
++			this.options[ key ] = value;
++			// disable element style changes
++			return;
++		}
++
++		this._super( key, value );
++
++		if ( key === "content" ) {
++			$.each( this.tooltips, function( id, element ) {
++				that._updateContent( element );
++			});
++		}
++	},
++
++	_disable: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++		});
++
++		// remove title attributes to prevent native tooltips
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.is( "[title]" ) ) {
++				element
++					.data( "ui-tooltip-title", element.attr( "title" ) )
++					.attr( "title", "" );
++			}
++		});
++	},
++
++	_enable: function() {
++		// restore title attributes
++		this.element.find( this.options.items ).addBack().each(function() {
++			var element = $( this );
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++			}
++		});
++	},
++
++	open: function( event ) {
++		var that = this,
++			target = $( event ? event.target : this.element )
++				// we need closest here due to mouseover bubbling,
++				// but always pointing at the same event target
++				.closest( this.options.items );
++
++		// No element to show a tooltip for or the tooltip is already open
++		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
++			return;
++		}
++
++		if ( target.attr( "title" ) ) {
++			target.data( "ui-tooltip-title", target.attr( "title" ) );
++		}
++
++		target.data( "ui-tooltip-open", true );
++
++		// kill parent tooltips, custom or native, for hover
++		if ( event && event.type === "mouseover" ) {
++			target.parents().each(function() {
++				var parent = $( this ),
++					blurEvent;
++				if ( parent.data( "ui-tooltip-open" ) ) {
++					blurEvent = $.Event( "blur" );
++					blurEvent.target = blurEvent.currentTarget = this;
++					that.close( blurEvent, true );
++				}
++				if ( parent.attr( "title" ) ) {
++					parent.uniqueId();
++					that.parents[ this.id ] = {
++						element: this,
++						title: parent.attr( "title" )
++					};
++					parent.attr( "title", "" );
++				}
++			});
++		}
++
++		this._updateContent( target, event );
++	},
++
++	_updateContent: function( target, event ) {
++		var content,
++			contentOption = this.options.content,
++			that = this,
++			eventType = event ? event.type : null;
++
++		if ( typeof contentOption === "string" ) {
++			return this._open( event, target, contentOption );
++		}
++
++		content = contentOption.call( target[0], function( response ) {
++			// ignore async response if tooltip was closed already
++			if ( !target.data( "ui-tooltip-open" ) ) {
++				return;
++			}
++			// IE may instantly serve a cached response for ajax requests
++			// delay this call to _open so the other call to _open runs first
++			that._delay(function() {
++				// jQuery creates a special event for focusin when it doesn't
++				// exist natively. To improve performance, the native event
++				// object is reused and the type is changed. Therefore, we can't
++				// rely on the type being correct after the event finished
++				// bubbling, so we set it back to the previous value. (#8740)
++				if ( event ) {
++					event.type = eventType;
++				}
++				this._open( event, target, response );
++			});
++		});
++		if ( content ) {
++			this._open( event, target, content );
++		}
++	},
++
++	_open: function( event, target, content ) {
++		var tooltip, events, delayedShow,
++			positionOption = $.extend( {}, this.options.position );
++
++		if ( !content ) {
++			return;
++		}
++
++		// Content can be updated multiple times. If the tooltip already
++		// exists, then just update the content and bail.
++		tooltip = this._find( target );
++		if ( tooltip.length ) {
++			tooltip.find( ".ui-tooltip-content" ).html( content );
++			return;
++		}
++
++		// if we have a title, clear it to prevent the native tooltip
++		// we have to check first to avoid defining a title if none exists
++		// (we don't want to cause an element to start matching [title])
++		//
++		// We use removeAttr only for key events, to allow IE to export the correct
++		// accessible attributes. For mouse events, set to empty string to avoid
++		// native tooltip showing up (happens only when removing inside mouseover).
++		if ( target.is( "[title]" ) ) {
++			if ( event && event.type === "mouseover" ) {
++				target.attr( "title", "" );
++			} else {
++				target.removeAttr( "title" );
++			}
++		}
++
++		tooltip = this._tooltip( target );
++		addDescribedBy( target, tooltip.attr( "id" ) );
++		tooltip.find( ".ui-tooltip-content" ).html( content );
++
++		function position( event ) {
++			positionOption.of = event;
++			if ( tooltip.is( ":hidden" ) ) {
++				return;
++			}
++			tooltip.position( positionOption );
++		}
++		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
++			this._on( this.document, {
++				mousemove: position
++			});
++			// trigger once to override element-relative positioning
++			position( event );
++		} else {
++			tooltip.position( $.extend({
++				of: target
++			}, this.options.position ) );
++		}
++
++		tooltip.hide();
++
++		this._show( tooltip, this.options.show );
++		// Handle tracking tooltips that are shown with a delay (#8644). As soon
++		// as the tooltip is visible, position the tooltip using the most recent
++		// event.
++		if ( this.options.show && this.options.show.delay ) {
++			delayedShow = this.delayedShow = setInterval(function() {
++				if ( tooltip.is( ":visible" ) ) {
++					position( positionOption.of );
++					clearInterval( delayedShow );
++				}
++			}, $.fx.interval );
++		}
++
++		this._trigger( "open", event, { tooltip: tooltip } );
++
++		events = {
++			keyup: function( event ) {
++				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
++					var fakeEvent = $.Event(event);
++					fakeEvent.currentTarget = target[0];
++					this.close( fakeEvent, true );
++				}
++			},
++			remove: function() {
++				this._removeTooltip( tooltip );
++			}
++		};
++		if ( !event || event.type === "mouseover" ) {
++			events.mouseleave = "close";
++		}
++		if ( !event || event.type === "focusin" ) {
++			events.focusout = "close";
++		}
++		this._on( true, target, events );
++	},
++
++	close: function( event ) {
++		var that = this,
++			target = $( event ? event.currentTarget : this.element ),
++			tooltip = this._find( target );
++
++		// disabling closes the tooltip, so we need to track when we're closing
++		// to avoid an infinite loop in case the tooltip becomes disabled on close
++		if ( this.closing ) {
++			return;
++		}
++
++		// Clear the interval for delayed tracking tooltips
++		clearInterval( this.delayedShow );
++
++		// only set title if we had one before (see comment in _open())
++		if ( target.data( "ui-tooltip-title" ) ) {
++			target.attr( "title", target.data( "ui-tooltip-title" ) );
++		}
++
++		removeDescribedBy( target );
++
++		tooltip.stop( true );
++		this._hide( tooltip, this.options.hide, function() {
++			that._removeTooltip( $( this ) );
++		});
++
++		target.removeData( "ui-tooltip-open" );
++		this._off( target, "mouseleave focusout keyup" );
++		// Remove 'remove' binding only on delegated targets
++		if ( target[0] !== this.element[0] ) {
++			this._off( target, "remove" );
++		}
++		this._off( this.document, "mousemove" );
++
++		if ( event && event.type === "mouseleave" ) {
++			$.each( this.parents, function( id, parent ) {
++				$( parent.element ).attr( "title", parent.title );
++				delete that.parents[ id ];
++			});
++		}
++
++		this.closing = true;
++		this._trigger( "close", event, { tooltip: tooltip } );
++		this.closing = false;
++	},
++
++	_tooltip: function( element ) {
++		var id = "ui-tooltip-" + increments++,
++			tooltip = $( "<div>" )
++				.attr({
++					id: id,
++					role: "tooltip"
++				})
++				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
++					( this.options.tooltipClass || "" ) );
++		$( "<div>" )
++			.addClass( "ui-tooltip-content" )
++			.appendTo( tooltip );
++		tooltip.appendTo( this.document[0].body );
++		this.tooltips[ id ] = element;
++		return tooltip;
++	},
++
++	_find: function( target ) {
++		var id = target.data( "ui-tooltip-id" );
++		return id ? $( "#" + id ) : $();
++	},
++
++	_removeTooltip: function( tooltip ) {
++		tooltip.remove();
++		delete this.tooltips[ tooltip.attr( "id" ) ];
++	},
++
++	_destroy: function() {
++		var that = this;
++
++		// close open tooltips
++		$.each( this.tooltips, function( id, element ) {
++			// Delegate to close method to handle common cleanup
++			var event = $.Event( "blur" );
++			event.target = event.currentTarget = element[0];
++			that.close( event, true );
++
++			// Remove immediately; destroying an open tooltip doesn't use the
++			// hide animation
++			$( "#" + id ).remove();
++
++			// Restore the title
++			if ( element.data( "ui-tooltip-title" ) ) {
++				element.attr( "title", element.data( "ui-tooltip-title" ) );
++				element.removeData( "ui-tooltip-title" );
++			}
++		});
++	}
++});
++
++}( jQuery ) );
++(function($, undefined) {
++
++var dataSpace = "ui-effects-";
++
++$.effects = {
++	effect: {}
++};
++
++/*!
++ * jQuery Color Animations v2.1.2
++ * https://github.com/jquery/jquery-color
++ *
++ * Copyright 2013 jQuery Foundation and other contributors
++ * Released under the MIT license.
++ * http://jquery.org/license
++ *
++ * Date: Wed Jan 16 08:47:09 2013 -0600
++ */
++(function( jQuery, undefined ) {
++
++	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
++
++	// plusequals test for += 100 -= 100
++	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
++	// a set of RE's that can match strings and generate color tuples.
++	stringParsers = [{
++			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ],
++					execResult[ 3 ],
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ] * 2.55,
++					execResult[ 2 ] * 2.55,
++					execResult[ 3 ] * 2.55,
++					execResult[ 4 ]
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			// this regex ignores A-F because it's compared against an already lowercased string
++			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
++			parse: function( execResult ) {
++				return [
++					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
++					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
++					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
++				];
++			}
++		}, {
++			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
++			space: "hsla",
++			parse: function( execResult ) {
++				return [
++					execResult[ 1 ],
++					execResult[ 2 ] / 100,
++					execResult[ 3 ] / 100,
++					execResult[ 4 ]
++				];
++			}
++		}],
++
++	// jQuery.Color( )
++	color = jQuery.Color = function( color, green, blue, alpha ) {
++		return new jQuery.Color.fn.parse( color, green, blue, alpha );
++	},
++	spaces = {
++		rgba: {
++			props: {
++				red: {
++					idx: 0,
++					type: "byte"
++				},
++				green: {
++					idx: 1,
++					type: "byte"
++				},
++				blue: {
++					idx: 2,
++					type: "byte"
++				}
++			}
++		},
++
++		hsla: {
++			props: {
++				hue: {
++					idx: 0,
++					type: "degrees"
++				},
++				saturation: {
++					idx: 1,
++					type: "percent"
++				},
++				lightness: {
++					idx: 2,
++					type: "percent"
++				}
++			}
++		}
++	},
++	propTypes = {
++		"byte": {
++			floor: true,
++			max: 255
++		},
++		"percent": {
++			max: 1
++		},
++		"degrees": {
++			mod: 360,
++			floor: true
++		}
++	},
++	support = color.support = {},
++
++	// element for support tests
++	supportElem = jQuery( "<p>" )[ 0 ],
++
++	// colors = jQuery.Color.names
++	colors,
++
++	// local aliases of functions called often
++	each = jQuery.each;
++
++// determine rgba support immediately
++supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
++support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
++
++// define cache name and alpha properties
++// for rgba and hsla spaces
++each( spaces, function( spaceName, space ) {
++	space.cache = "_" + spaceName;
++	space.props.alpha = {
++		idx: 3,
++		type: "percent",
++		def: 1
++	};
++});
++
++function clamp( value, prop, allowEmpty ) {
++	var type = propTypes[ prop.type ] || {};
++
++	if ( value == null ) {
++		return (allowEmpty || !prop.def) ? null : prop.def;
++	}
++
++	// ~~ is an short way of doing floor for positive numbers
++	value = type.floor ? ~~value : parseFloat( value );
++
++	// IE will pass in empty strings as value for alpha,
++	// which will hit this case
++	if ( isNaN( value ) ) {
++		return prop.def;
++	}
++
++	if ( type.mod ) {
++		// we add mod before modding to make sure that negatives values
++		// get converted properly: -10 -> 350
++		return (value + type.mod) % type.mod;
++	}
++
++	// for now all property types without mod have min and max
++	return 0 > value ? 0 : type.max < value ? type.max : value;
++}
++
++function stringParse( string ) {
++	var inst = color(),
++		rgba = inst._rgba = [];
++
++	string = string.toLowerCase();
++
++	each( stringParsers, function( i, parser ) {
++		var parsed,
++			match = parser.re.exec( string ),
++			values = match && parser.parse( match ),
++			spaceName = parser.space || "rgba";
++
++		if ( values ) {
++			parsed = inst[ spaceName ]( values );
++
++			// if this was an rgba parse the assignment might happen twice
++			// oh well....
++			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
++			rgba = inst._rgba = parsed._rgba;
++
++			// exit each( stringParsers ) here because we matched
++			return false;
++		}
++	});
++
++	// Found a stringParser that handled it
++	if ( rgba.length ) {
++
++		// if this came from a parsed string, force "transparent" when alpha is 0
++		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
++		if ( rgba.join() === "0,0,0,0" ) {
++			jQuery.extend( rgba, colors.transparent );
++		}
++		return inst;
++	}
++
++	// named colors
++	return colors[ string ];
++}
++
++color.fn = jQuery.extend( color.prototype, {
++	parse: function( red, green, blue, alpha ) {
++		if ( red === undefined ) {
++			this._rgba = [ null, null, null, null ];
++			return this;
++		}
++		if ( red.jquery || red.nodeType ) {
++			red = jQuery( red ).css( green );
++			green = undefined;
++		}
++
++		var inst = this,
++			type = jQuery.type( red ),
++			rgba = this._rgba = [];
++
++		// more than 1 argument specified - assume ( red, green, blue, alpha )
++		if ( green !== undefined ) {
++			red = [ red, green, blue, alpha ];
++			type = "array";
++		}
++
++		if ( type === "string" ) {
++			return this.parse( stringParse( red ) || colors._default );
++		}
++
++		if ( type === "array" ) {
++			each( spaces.rgba.props, function( key, prop ) {
++				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
++			});
++			return this;
++		}
++
++		if ( type === "object" ) {
++			if ( red instanceof color ) {
++				each( spaces, function( spaceName, space ) {
++					if ( red[ space.cache ] ) {
++						inst[ space.cache ] = red[ space.cache ].slice();
++					}
++				});
++			} else {
++				each( spaces, function( spaceName, space ) {
++					var cache = space.cache;
++					each( space.props, function( key, prop ) {
++
++						// if the cache doesn't exist, and we know how to convert
++						if ( !inst[ cache ] && space.to ) {
++
++							// if the value was null, we don't need to copy it
++							// if the key was alpha, we don't need to copy it either
++							if ( key === "alpha" || red[ key ] == null ) {
++								return;
++							}
++							inst[ cache ] = space.to( inst._rgba );
++						}
++
++						// this is the only case where we allow nulls for ALL properties.
++						// call clamp with alwaysAllowEmpty
++						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
++					});
++
++					// everything defined but alpha?
++					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
++						// use the default of 1
++						inst[ cache ][ 3 ] = 1;
++						if ( space.from ) {
++							inst._rgba = space.from( inst[ cache ] );
++						}
++					}
++				});
++			}
++			return this;
++		}
++	},
++	is: function( compare ) {
++		var is = color( compare ),
++			same = true,
++			inst = this;
++
++		each( spaces, function( _, space ) {
++			var localCache,
++				isCache = is[ space.cache ];
++			if (isCache) {
++				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
++				each( space.props, function( _, prop ) {
++					if ( isCache[ prop.idx ] != null ) {
++						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
++						return same;
++					}
++				});
++			}
++			return same;
++		});
++		return same;
++	},
++	_space: function() {
++		var used = [],
++			inst = this;
++		each( spaces, function( spaceName, space ) {
++			if ( inst[ space.cache ] ) {
++				used.push( spaceName );
++			}
++		});
++		return used.pop();
++	},
++	transition: function( other, distance ) {
++		var end = color( other ),
++			spaceName = end._space(),
++			space = spaces[ spaceName ],
++			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
++			start = startColor[ space.cache ] || space.to( startColor._rgba ),
++			result = start.slice();
++
++		end = end[ space.cache ];
++		each( space.props, function( key, prop ) {
++			var index = prop.idx,
++				startValue = start[ index ],
++				endValue = end[ index ],
++				type = propTypes[ prop.type ] || {};
++
++			// if null, don't override start value
++			if ( endValue === null ) {
++				return;
++			}
++			// if null - use end
++			if ( startValue === null ) {
++				result[ index ] = endValue;
++			} else {
++				if ( type.mod ) {
++					if ( endValue - startValue > type.mod / 2 ) {
++						startValue += type.mod;
++					} else if ( startValue - endValue > type.mod / 2 ) {
++						startValue -= type.mod;
++					}
++				}
++				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
++			}
++		});
++		return this[ spaceName ]( result );
++	},
++	blend: function( opaque ) {
++		// if we are already opaque - return ourself
++		if ( this._rgba[ 3 ] === 1 ) {
++			return this;
++		}
++
++		var rgb = this._rgba.slice(),
++			a = rgb.pop(),
++			blend = color( opaque )._rgba;
++
++		return color( jQuery.map( rgb, function( v, i ) {
++			return ( 1 - a ) * blend[ i ] + a * v;
++		}));
++	},
++	toRgbaString: function() {
++		var prefix = "rgba(",
++			rgba = jQuery.map( this._rgba, function( v, i ) {
++				return v == null ? ( i > 2 ? 1 : 0 ) : v;
++			});
++
++		if ( rgba[ 3 ] === 1 ) {
++			rgba.pop();
++			prefix = "rgb(";
++		}
++
++		return prefix + rgba.join() + ")";
++	},
++	toHslaString: function() {
++		var prefix = "hsla(",
++			hsla = jQuery.map( this.hsla(), function( v, i ) {
++				if ( v == null ) {
++					v = i > 2 ? 1 : 0;
++				}
++
++				// catch 1 and 2
++				if ( i && i < 3 ) {
++					v = Math.round( v * 100 ) + "%";
++				}
++				return v;
++			});
++
++		if ( hsla[ 3 ] === 1 ) {
++			hsla.pop();
++			prefix = "hsl(";
++		}
++		return prefix + hsla.join() + ")";
++	},
++	toHexString: function( includeAlpha ) {
++		var rgba = this._rgba.slice(),
++			alpha = rgba.pop();
++
++		if ( includeAlpha ) {
++			rgba.push( ~~( alpha * 255 ) );
++		}
++
++		return "#" + jQuery.map( rgba, function( v ) {
++
++			// default to 0 when nulls exist
++			v = ( v || 0 ).toString( 16 );
++			return v.length === 1 ? "0" + v : v;
++		}).join("");
++	},
++	toString: function() {
++		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
++	}
++});
++color.fn.parse.prototype = color.fn;
++
++// hsla conversions adapted from:
++// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
++
++function hue2rgb( p, q, h ) {
++	h = ( h + 1 ) % 1;
++	if ( h * 6 < 1 ) {
++		return p + (q - p) * h * 6;
++	}
++	if ( h * 2 < 1) {
++		return q;
++	}
++	if ( h * 3 < 2 ) {
++		return p + (q - p) * ((2/3) - h) * 6;
++	}
++	return p;
++}
++
++spaces.hsla.to = function ( rgba ) {
++	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
++		return [ null, null, null, rgba[ 3 ] ];
++	}
++	var r = rgba[ 0 ] / 255,
++		g = rgba[ 1 ] / 255,
++		b = rgba[ 2 ] / 255,
++		a = rgba[ 3 ],
++		max = Math.max( r, g, b ),
++		min = Math.min( r, g, b ),
++		diff = max - min,
++		add = max + min,
++		l = add * 0.5,
++		h, s;
++
++	if ( min === max ) {
++		h = 0;
++	} else if ( r === max ) {
++		h = ( 60 * ( g - b ) / diff ) + 360;
++	} else if ( g === max ) {
++		h = ( 60 * ( b - r ) / diff ) + 120;
++	} else {
++		h = ( 60 * ( r - g ) / diff ) + 240;
++	}
++
++	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
++	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
++	if ( diff === 0 ) {
++		s = 0;
++	} else if ( l <= 0.5 ) {
++		s = diff / add;
++	} else {
++		s = diff / ( 2 - add );
++	}
++	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
++};
++
++spaces.hsla.from = function ( hsla ) {
++	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
++		return [ null, null, null, hsla[ 3 ] ];
++	}
++	var h = hsla[ 0 ] / 360,
++		s = hsla[ 1 ],
++		l = hsla[ 2 ],
++		a = hsla[ 3 ],
++		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
++		p = 2 * l - q;
++
++	return [
++		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
++		Math.round( hue2rgb( p, q, h ) * 255 ),
++		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
++		a
++	];
++};
++
++
++each( spaces, function( spaceName, space ) {
++	var props = space.props,
++		cache = space.cache,
++		to = space.to,
++		from = space.from;
++
++	// makes rgba() and hsla()
++	color.fn[ spaceName ] = function( value ) {
++
++		// generate a cache for this space if it doesn't exist
++		if ( to && !this[ cache ] ) {
++			this[ cache ] = to( this._rgba );
++		}
++		if ( value === undefined ) {
++			return this[ cache ].slice();
++		}
++
++		var ret,
++			type = jQuery.type( value ),
++			arr = ( type === "array" || type === "object" ) ? value : arguments,
++			local = this[ cache ].slice();
++
++		each( props, function( key, prop ) {
++			var val = arr[ type === "object" ? key : prop.idx ];
++			if ( val == null ) {
++				val = local[ prop.idx ];
++			}
++			local[ prop.idx ] = clamp( val, prop );
++		});
++
++		if ( from ) {
++			ret = color( from( local ) );
++			ret[ cache ] = local;
++			return ret;
++		} else {
++			return color( local );
++		}
++	};
++
++	// makes red() green() blue() alpha() hue() saturation() lightness()
++	each( props, function( key, prop ) {
++		// alpha is included in more than one space
++		if ( color.fn[ key ] ) {
++			return;
++		}
++		color.fn[ key ] = function( value ) {
++			var vtype = jQuery.type( value ),
++				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
++				local = this[ fn ](),
++				cur = local[ prop.idx ],
++				match;
++
++			if ( vtype === "undefined" ) {
++				return cur;
++			}
++
++			if ( vtype === "function" ) {
++				value = value.call( this, cur );
++				vtype = jQuery.type( value );
++			}
++			if ( value == null && prop.empty ) {
++				return this;
++			}
++			if ( vtype === "string" ) {
++				match = rplusequals.exec( value );
++				if ( match ) {
++					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
++				}
++			}
++			local[ prop.idx ] = value;
++			return this[ fn ]( local );
++		};
++	});
++});
++
++// add cssHook and .fx.step function for each named hook.
++// accept a space separated string of properties
++color.hook = function( hook ) {
++	var hooks = hook.split( " " );
++	each( hooks, function( i, hook ) {
++		jQuery.cssHooks[ hook ] = {
++			set: function( elem, value ) {
++				var parsed, curElem,
++					backgroundColor = "";
++
++				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
++					value = color( parsed || value );
++					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
++						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
++						while (
++							(backgroundColor === "" || backgroundColor === "transparent") &&
++							curElem && curElem.style
++						) {
++							try {
++								backgroundColor = jQuery.css( curElem, "backgroundColor" );
++								curElem = curElem.parentNode;
++							} catch ( e ) {
++							}
++						}
++
++						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
++							backgroundColor :
++							"_default" );
++					}
++
++					value = value.toRgbaString();
++				}
++				try {
++					elem.style[ hook ] = value;
++				} catch( e ) {
++					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
++				}
++			}
++		};
++		jQuery.fx.step[ hook ] = function( fx ) {
++			if ( !fx.colorInit ) {
++				fx.start = color( fx.elem, hook );
++				fx.end = color( fx.end );
++				fx.colorInit = true;
++			}
++			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
++		};
++	});
++
++};
++
++color.hook( stepHooks );
++
++jQuery.cssHooks.borderColor = {
++	expand: function( value ) {
++		var expanded = {};
++
++		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
++			expanded[ "border" + part + "Color" ] = value;
++		});
++		return expanded;
++	}
++};
++
++// Basic color names only.
++// Usage of any of the other color names requires adding yourself or including
++// jquery.color.svg-names.js.
++colors = jQuery.Color.names = {
++	// 4.1. Basic color keywords
++	aqua: "#00ffff",
++	black: "#000000",
++	blue: "#0000ff",
++	fuchsia: "#ff00ff",
++	gray: "#808080",
++	green: "#008000",
++	lime: "#00ff00",
++	maroon: "#800000",
++	navy: "#000080",
++	olive: "#808000",
++	purple: "#800080",
++	red: "#ff0000",
++	silver: "#c0c0c0",
++	teal: "#008080",
++	white: "#ffffff",
++	yellow: "#ffff00",
++
++	// 4.2.3. "transparent" color keyword
++	transparent: [ null, null, null, 0 ],
++
++	_default: "#ffffff"
++};
++
++})( jQuery );
++
++
++/******************************************************************************/
++/****************************** CLASS ANIMATIONS ******************************/
++/******************************************************************************/
++(function() {
++
++var classAnimationActions = [ "add", "remove", "toggle" ],
++	shorthandStyles = {
++		border: 1,
++		borderBottom: 1,
++		borderColor: 1,
++		borderLeft: 1,
++		borderRight: 1,
++		borderTop: 1,
++		borderWidth: 1,
++		margin: 1,
++		padding: 1
++	};
++
++$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
++	$.fx.step[ prop ] = function( fx ) {
++		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
++			jQuery.style( fx.elem, prop, fx.end );
++			fx.setAttr = true;
++		}
++	};
++});
++
++function getElementStyles( elem ) {
++	var key, len,
++		style = elem.ownerDocument.defaultView ?
++			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
++			elem.currentStyle,
++		styles = {};
++
++	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
++		len = style.length;
++		while ( len-- ) {
++			key = style[ len ];
++			if ( typeof style[ key ] === "string" ) {
++				styles[ $.camelCase( key ) ] = style[ key ];
++			}
++		}
++	// support: Opera, IE <9
++	} else {
++		for ( key in style ) {
++			if ( typeof style[ key ] === "string" ) {
++				styles[ key ] = style[ key ];
++			}
++		}
++	}
++
++	return styles;
++}
++
++
++function styleDifference( oldStyle, newStyle ) {
++	var diff = {},
++		name, value;
++
++	for ( name in newStyle ) {
++		value = newStyle[ name ];
++		if ( oldStyle[ name ] !== value ) {
++			if ( !shorthandStyles[ name ] ) {
++				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
++					diff[ name ] = value;
++				}
++			}
++		}
++	}
++
++	return diff;
++}
++
++// support: jQuery <1.8
++if ( !$.fn.addBack ) {
++	$.fn.addBack = function( selector ) {
++		return this.add( selector == null ?
++			this.prevObject : this.prevObject.filter( selector )
++		);
++	};
++}
++
++$.effects.animateClass = function( value, duration, easing, callback ) {
++	var o = $.speed( duration, easing, callback );
++
++	return this.queue( function() {
++		var animated = $( this ),
++			baseClass = animated.attr( "class" ) || "",
++			applyClassChange,
++			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
++
++		// map the animated objects to store the original styles.
++		allAnimations = allAnimations.map(function() {
++			var el = $( this );
++			return {
++				el: el,
++				start: getElementStyles( this )
++			};
++		});
++
++		// apply class change
++		applyClassChange = function() {
++			$.each( classAnimationActions, function(i, action) {
++				if ( value[ action ] ) {
++					animated[ action + "Class" ]( value[ action ] );
++				}
++			});
++		};
++		applyClassChange();
++
++		// map all animated objects again - calculate new styles and diff
++		allAnimations = allAnimations.map(function() {
++			this.end = getElementStyles( this.el[ 0 ] );
++			this.diff = styleDifference( this.start, this.end );
++			return this;
++		});
++
++		// apply original class
++		animated.attr( "class", baseClass );
++
++		// map all animated objects again - this time collecting a promise
++		allAnimations = allAnimations.map(function() {
++			var styleInfo = this,
++				dfd = $.Deferred(),
++				opts = $.extend({}, o, {
++					queue: false,
++					complete: function() {
++						dfd.resolve( styleInfo );
++					}
++				});
++
++			this.el.animate( this.diff, opts );
++			return dfd.promise();
++		});
++
++		// once all animations have completed:
++		$.when.apply( $, allAnimations.get() ).done(function() {
++
++			// set the final class
++			applyClassChange();
++
++			// for each animated element,
++			// clear all css properties that were animated
++			$.each( arguments, function() {
++				var el = this.el;
++				$.each( this.diff, function(key) {
++					el.css( key, "" );
++				});
++			});
++
++			// this is guarnteed to be there if you use jQuery.speed()
++			// it also handles dequeuing the next anim...
++			o.complete.call( animated[ 0 ] );
++		});
++	});
++};
++
++$.fn.extend({
++	addClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return speed ?
++				$.effects.animateClass.call( this,
++					{ add: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.addClass ),
++
++	removeClass: (function( orig ) {
++		return function( classNames, speed, easing, callback ) {
++			return arguments.length > 1 ?
++				$.effects.animateClass.call( this,
++					{ remove: classNames }, speed, easing, callback ) :
++				orig.apply( this, arguments );
++		};
++	})( $.fn.removeClass ),
++
++	toggleClass: (function( orig ) {
++		return function( classNames, force, speed, easing, callback ) {
++			if ( typeof force === "boolean" || force === undefined ) {
++				if ( !speed ) {
++					// without speed parameter
++					return orig.apply( this, arguments );
++				} else {
++					return $.effects.animateClass.call( this,
++						(force ? { add: classNames } : { remove: classNames }),
++						speed, easing, callback );
++				}
++			} else {
++				// without force parameter
++				return $.effects.animateClass.call( this,
++					{ toggle: classNames }, force, speed, easing );
++			}
++		};
++	})( $.fn.toggleClass ),
++
++	switchClass: function( remove, add, speed, easing, callback) {
++		return $.effects.animateClass.call( this, {
++			add: add,
++			remove: remove
++		}, speed, easing, callback );
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EFFECTS **********************************/
++/******************************************************************************/
++
++(function() {
++
++$.extend( $.effects, {
++	version: "1.10.3",
++
++	// Saves a set of properties in a data storage
++	save: function( element, set ) {
++		for( var i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
++			}
++		}
++	},
++
++	// Restores a set of previously saved properties from a data storage
++	restore: function( element, set ) {
++		var val, i;
++		for( i=0; i < set.length; i++ ) {
++			if ( set[ i ] !== null ) {
++				val = element.data( dataSpace + set[ i ] );
++				// support: jQuery 1.6.2
++				// http://bugs.jquery.com/ticket/9917
++				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
++				// We can't differentiate between "" and 0 here, so we just assume
++				// empty string since it's likely to be a more common value...
++				if ( val === undefined ) {
++					val = "";
++				}
++				element.css( set[ i ], val );
++			}
++		}
++	},
++
++	setMode: function( el, mode ) {
++		if (mode === "toggle") {
++			mode = el.is( ":hidden" ) ? "show" : "hide";
++		}
++		return mode;
++	},
++
++	// Translates a [top,left] array into a baseline value
++	// this should be a little more flexible in the future to handle a string & hash
++	getBaseline: function( origin, original ) {
++		var y, x;
++		switch ( origin[ 0 ] ) {
++			case "top": y = 0; break;
++			case "middle": y = 0.5; break;
++			case "bottom": y = 1; break;
++			default: y = origin[ 0 ] / original.height;
++		}
++		switch ( origin[ 1 ] ) {
++			case "left": x = 0; break;
++			case "center": x = 0.5; break;
++			case "right": x = 1; break;
++			default: x = origin[ 1 ] / original.width;
++		}
++		return {
++			x: x,
++			y: y
++		};
++	},
++
++	// Wraps the element around a wrapper that copies position properties
++	createWrapper: function( element ) {
++
++		// if the element is already wrapped, return it
++		if ( element.parent().is( ".ui-effects-wrapper" )) {
++			return element.parent();
++		}
++
++		// wrap the element
++		var props = {
++				width: element.outerWidth(true),
++				height: element.outerHeight(true),
++				"float": element.css( "float" )
++			},
++			wrapper = $( "<div></div>" )
++				.addClass( "ui-effects-wrapper" )
++				.css({
++					fontSize: "100%",
++					background: "transparent",
++					border: "none",
++					margin: 0,
++					padding: 0
++				}),
++			// Store the size in case width/height are defined in % - Fixes #5245
++			size = {
++				width: element.width(),
++				height: element.height()
++			},
++			active = document.activeElement;
++
++		// support: Firefox
++		// Firefox incorrectly exposes anonymous content
++		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
++		try {
++			active.id;
++		} catch( e ) {
++			active = document.body;
++		}
++
++		element.wrap( wrapper );
++
++		// Fixes #7595 - Elements lose focus when wrapped.
++		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++			$( active ).focus();
++		}
++
++		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
++
++		// transfer positioning properties to the wrapper
++		if ( element.css( "position" ) === "static" ) {
++			wrapper.css({ position: "relative" });
++			element.css({ position: "relative" });
++		} else {
++			$.extend( props, {
++				position: element.css( "position" ),
++				zIndex: element.css( "z-index" )
++			});
++			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
++				props[ pos ] = element.css( pos );
++				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
++					props[ pos ] = "auto";
++				}
++			});
++			element.css({
++				position: "relative",
++				top: 0,
++				left: 0,
++				right: "auto",
++				bottom: "auto"
++			});
++		}
++		element.css(size);
++
++		return wrapper.css( props ).show();
++	},
++
++	removeWrapper: function( element ) {
++		var active = document.activeElement;
++
++		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
++			element.parent().replaceWith( element );
++
++			// Fixes #7595 - Elements lose focus when wrapped.
++			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
++				$( active ).focus();
++			}
++		}
++
++
++		return element;
++	},
++
++	setTransition: function( element, list, factor, value ) {
++		value = value || {};
++		$.each( list, function( i, x ) {
++			var unit = element.cssUnit( x );
++			if ( unit[ 0 ] > 0 ) {
++				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
++			}
++		});
++		return value;
++	}
++});
++
++// return an effect options object for the given parameters:
++function _normalizeArguments( effect, options, speed, callback ) {
++
++	// allow passing all options as the first parameter
++	if ( $.isPlainObject( effect ) ) {
++		options = effect;
++		effect = effect.effect;
++	}
++
++	// convert to an object
++	effect = { effect: effect };
++
++	// catch (effect, null, ...)
++	if ( options == null ) {
++		options = {};
++	}
++
++	// catch (effect, callback)
++	if ( $.isFunction( options ) ) {
++		callback = options;
++		speed = null;
++		options = {};
++	}
++
++	// catch (effect, speed, ?)
++	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
++		callback = speed;
++		speed = options;
++		options = {};
++	}
++
++	// catch (effect, options, callback)
++	if ( $.isFunction( speed ) ) {
++		callback = speed;
++		speed = null;
++	}
++
++	// add options to effect
++	if ( options ) {
++		$.extend( effect, options );
++	}
++
++	speed = speed || options.duration;
++	effect.duration = $.fx.off ? 0 :
++		typeof speed === "number" ? speed :
++		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
++		$.fx.speeds._default;
++
++	effect.complete = callback || options.complete;
++
++	return effect;
++}
++
++function standardAnimationOption( option ) {
++	// Valid standard speeds (nothing, number, named speed)
++	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
++		return true;
++	}
++
++	// Invalid strings - treat as "normal" speed
++	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
++		return true;
++	}
++
++	// Complete callback
++	if ( $.isFunction( option ) ) {
++		return true;
++	}
++
++	// Options hash (but not naming an effect)
++	if ( typeof option === "object" && !option.effect ) {
++		return true;
++	}
++
++	// Didn't match any standard API
++	return false;
++}
++
++$.fn.extend({
++	effect: function( /* effect, options, speed, callback */ ) {
++		var args = _normalizeArguments.apply( this, arguments ),
++			mode = args.mode,
++			queue = args.queue,
++			effectMethod = $.effects.effect[ args.effect ];
++
++		if ( $.fx.off || !effectMethod ) {
++			// delegate to the original method (e.g., .show()) if possible
++			if ( mode ) {
++				return this[ mode ]( args.duration, args.complete );
++			} else {
++				return this.each( function() {
++					if ( args.complete ) {
++						args.complete.call( this );
++					}
++				});
++			}
++		}
++
++		function run( next ) {
++			var elem = $( this ),
++				complete = args.complete,
++				mode = args.mode;
++
++			function done() {
++				if ( $.isFunction( complete ) ) {
++					complete.call( elem[0] );
++				}
++				if ( $.isFunction( next ) ) {
++					next();
++				}
++			}
++
++			// If the element already has the correct final state, delegate to
++			// the core methods so the internal tracking of "olddisplay" works.
++			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
++				elem[ mode ]();
++				done();
++			} else {
++				effectMethod.call( elem[0], args, done );
++			}
++		}
++
++		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
++	},
++
++	show: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "show";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.show ),
++
++	hide: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "hide";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.hide ),
++
++	toggle: (function( orig ) {
++		return function( option ) {
++			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
++				return orig.apply( this, arguments );
++			} else {
++				var args = _normalizeArguments.apply( this, arguments );
++				args.mode = "toggle";
++				return this.effect.call( this, args );
++			}
++		};
++	})( $.fn.toggle ),
++
++	// helper functions
++	cssUnit: function(key) {
++		var style = this.css( key ),
++			val = [];
++
++		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
++			if ( style.indexOf( unit ) > 0 ) {
++				val = [ parseFloat( style ), unit ];
++			}
++		});
++		return val;
++	}
++});
++
++})();
++
++/******************************************************************************/
++/*********************************** EASING ***********************************/
++/******************************************************************************/
++
++(function() {
++
++// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
++
++var baseEasings = {};
++
++$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
++	baseEasings[ name ] = function( p ) {
++		return Math.pow( p, i + 2 );
++	};
++});
++
++$.extend( baseEasings, {
++	Sine: function ( p ) {
++		return 1 - Math.cos( p * Math.PI / 2 );
++	},
++	Circ: function ( p ) {
++		return 1 - Math.sqrt( 1 - p * p );
++	},
++	Elastic: function( p ) {
++		return p === 0 || p === 1 ? p :
++			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
++	},
++	Back: function( p ) {
++		return p * p * ( 3 * p - 2 );
++	},
++	Bounce: function ( p ) {
++		var pow2,
++			bounce = 4;
++
++		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
++		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
++	}
++});
++
++$.each( baseEasings, function( name, easeIn ) {
++	$.easing[ "easeIn" + name ] = easeIn;
++	$.easing[ "easeOut" + name ] = function( p ) {
++		return 1 - easeIn( 1 - p );
++	};
++	$.easing[ "easeInOut" + name ] = function( p ) {
++		return p < 0.5 ?
++			easeIn( p * 2 ) / 2 :
++			1 - easeIn( p * -2 + 2 ) / 2;
++	};
++});
++
++})();
++
++})(jQuery);
++(function( $, undefined ) {
++
++var rvertical = /up|down|vertical/,
++	rpositivemotion = /up|left|vertical|horizontal/;
++
++$.effects.effect.blind = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		direction = o.direction || "up",
++		vertical = rvertical.test( direction ),
++		ref = vertical ? "height" : "width",
++		ref2 = vertical ? "top" : "left",
++		motion = rpositivemotion.test( direction ),
++		animation = {},
++		show = mode === "show",
++		wrapper, distance, margin;
++
++	// if already wrapped, the wrapper's properties are my property. #6245
++	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
++		$.effects.save( el.parent(), props );
++	} else {
++		$.effects.save( el, props );
++	}
++	el.show();
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	distance = wrapper[ ref ]();
++	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
++
++	animation[ ref ] = show ? distance : 0;
++	if ( !motion ) {
++		el
++			.css( vertical ? "bottom" : "right", 0 )
++			.css( vertical ? "top" : "left", "auto" )
++			.css({ position: "absolute" });
++
++		animation[ ref2 ] = show ? margin : distance + margin;
++	}
++
++	// start at 0 if we are showing
++	if ( show ) {
++		wrapper.css( ref, 0 );
++		if ( ! motion ) {
++			wrapper.css( ref2, margin + distance );
++		}
++	}
++
++	// Animate
++	wrapper.animate( animation, {
++		duration: o.duration,
++		easing: o.easing,
++		queue: false,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.bounce = function( o, done ) {
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++
++		// defaults:
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		hide = mode === "hide",
++		show = mode === "show",
++		direction = o.direction || "up",
++		distance = o.distance,
++		times = o.times || 5,
++
++		// number of internal animations
++		anims = times * 2 + ( show || hide ? 1 : 0 ),
++		speed = o.duration / anims,
++		easing = o.easing,
++
++		// utility:
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ),
++		i,
++		upAnim,
++		downAnim,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	// Avoid touching opacity to prevent clearType and PNG issues in IE
++	if ( show || hide ) {
++		props.push( "opacity" );
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el ); // Create Wrapper
++
++	// default distance for the BIGGEST bounce is the outer Distance / 3
++	if ( !distance ) {
++		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
++	}
++
++	if ( show ) {
++		downAnim = { opacity: 1 };
++		downAnim[ ref ] = 0;
++
++		// if we are showing, force opacity 0 and set the initial position
++		// then do the "first" animation
++		el.css( "opacity", 0 )
++			.css( ref, motion ? -distance * 2 : distance * 2 )
++			.animate( downAnim, speed, easing );
++	}
++
++	// start at the smallest distance if we are hiding
++	if ( hide ) {
++		distance = distance / Math.pow( 2, times - 1 );
++	}
++
++	downAnim = {};
++	downAnim[ ref ] = 0;
++	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
++	for ( i = 0; i < times; i++ ) {
++		upAnim = {};
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing )
++			.animate( downAnim, speed, easing );
++
++		distance = hide ? distance * 2 : distance / 2;
++	}
++
++	// Last Bounce when Hiding
++	if ( hide ) {
++		upAnim = { opacity: 0 };
++		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
++
++		el.animate( upAnim, speed, easing );
++	}
++
++	el.queue(function() {
++		if ( hide ) {
++			el.hide();
++		}
++		$.effects.restore( el, props );
++		$.effects.removeWrapper( el );
++		done();
++	});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.clip = function( o, done ) {
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "vertical",
++		vert = direction === "vertical",
++		size = vert ? "height" : "width",
++		position = vert ? "top" : "left",
++		animation = {},
++		wrapper, animate, distance;
++
++	// Save & Show
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
++	distance = animate[ size ]();
++
++	// Shift
++	if ( show ) {
++		animate.css( size, 0 );
++		animate.css( position, distance / 2 );
++	}
++
++	// Create Animation Object:
++	animation[ size ] = show ? distance : 0;
++	animation[ position ] = show ? 0 : distance / 2;
++
++	// Animate
++	animate.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( !show ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.drop = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
++		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
++		animation = {
++			opacity: show ? 1 : 0
++		},
++		distance;
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
++
++	if ( show ) {
++		el
++			.css( "opacity", 0 )
++			.css( ref, motion === "pos" ? -distance : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( motion === "pos" ? "+=" : "-=" ) :
++		( motion === "pos" ? "-=" : "+=" ) ) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.explode = function( o, done ) {
++
++	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
++		cells = rows,
++		el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++
++		// show and then visibility:hidden the element before calculating offset
++		offset = el.show().css( "visibility", "hidden" ).offset(),
++
++		// width and height of a piece
++		width = Math.ceil( el.outerWidth() / cells ),
++		height = Math.ceil( el.outerHeight() / rows ),
++		pieces = [],
++
++		// loop
++		i, j, left, top, mx, my;
++
++	// children animate complete:
++	function childComplete() {
++		pieces.push( this );
++		if ( pieces.length === rows * cells ) {
++			animComplete();
++		}
++	}
++
++	// clone the element for each row and cell.
++	for( i = 0; i < rows ; i++ ) { // ===>
++		top = offset.top + i * height;
++		my = i - ( rows - 1 ) / 2 ;
++
++		for( j = 0; j < cells ; j++ ) { // |||
++			left = offset.left + j * width;
++			mx = j - ( cells - 1 ) / 2 ;
++
++			// Create a clone of the now hidden main element that will be absolute positioned
++			// within a wrapper div off the -left and -top equal to size of our pieces
++			el
++				.clone()
++				.appendTo( "body" )
++				.wrap( "<div></div>" )
++				.css({
++					position: "absolute",
++					visibility: "visible",
++					left: -j * width,
++					top: -i * height
++				})
++
++			// select the wrapper - make it overflow: hidden and absolute positioned based on
++			// where the original was located +left and +top equal to the size of pieces
++				.parent()
++				.addClass( "ui-effects-explode" )
++				.css({
++					position: "absolute",
++					overflow: "hidden",
++					width: width,
++					height: height,
++					left: left + ( show ? mx * width : 0 ),
++					top: top + ( show ? my * height : 0 ),
++					opacity: show ? 0 : 1
++				}).animate({
++					left: left + ( show ? 0 : mx * width ),
++					top: top + ( show ? 0 : my * height ),
++					opacity: show ? 1 : 0
++				}, o.duration || 500, o.easing, childComplete );
++		}
++	}
++
++	function animComplete() {
++		el.css({
++			visibility: "visible"
++		});
++		$( pieces ).remove();
++		if ( !show ) {
++			el.hide();
++		}
++		done();
++	}
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.fade = function( o, done ) {
++	var el = $( this ),
++		mode = $.effects.setMode( el, o.mode || "toggle" );
++
++	el.animate({
++		opacity: mode
++	}, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: done
++	});
++};
++
++})( jQuery );
++(function( $, undefined ) {
++
++$.effects.effect.fold = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "hide" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		size = o.size || 15,
++		percent = /([0-9]+)%/.exec( size ),
++		horizFirst = !!o.horizFirst,
++		widthFirst = show !== horizFirst,
++		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
++		duration = o.duration / 2,
++		wrapper, distance,
++		animation1 = {},
++		animation2 = {};
++
++	$.effects.save( el, props );
++	el.show();
++
++	// Create Wrapper
++	wrapper = $.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++	distance = widthFirst ?
++		[ wrapper.width(), wrapper.height() ] :
++		[ wrapper.height(), wrapper.width() ];
++
++	if ( percent ) {
++		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
++	}
++	if ( show ) {
++		wrapper.css( horizFirst ? {
++			height: 0,
++			width: size
++		} : {
++			height: size,
++			width: 0
++		});
++	}
++
++	// Animation
++	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
++	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
++
++	// Animate
++	wrapper
++		.animate( animation1, duration, o.easing )
++		.animate( animation2, duration, o.easing, function() {
++			if ( hide ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.highlight = function( o, done ) {
++	var elem = $( this ),
++		props = [ "backgroundImage", "backgroundColor", "opacity" ],
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		animation = {
++			backgroundColor: elem.css( "backgroundColor" )
++		};
++
++	if (mode === "hide") {
++		animation.opacity = 0;
++	}
++
++	$.effects.save( elem, props );
++
++	elem
++		.show()
++		.css({
++			backgroundImage: "none",
++			backgroundColor: o.color || "#ffff99"
++		})
++		.animate( animation, {
++			queue: false,
++			duration: o.duration,
++			easing: o.easing,
++			complete: function() {
++				if ( mode === "hide" ) {
++					elem.hide();
++				}
++				$.effects.restore( elem, props );
++				done();
++			}
++		});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.pulsate = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "show" ),
++		show = mode === "show",
++		hide = mode === "hide",
++		showhide = ( show || mode === "hide" ),
++
++		// showing or hiding leaves of the "last" animation
++		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
++		duration = o.duration / anims,
++		animateTo = 0,
++		queue = elem.queue(),
++		queuelen = queue.length,
++		i;
++
++	if ( show || !elem.is(":visible")) {
++		elem.css( "opacity", 0 ).show();
++		animateTo = 1;
++	}
++
++	// anims - 1 opacity "toggles"
++	for ( i = 1; i < anims; i++ ) {
++		elem.animate({
++			opacity: animateTo
++		}, duration, o.easing );
++		animateTo = 1 - animateTo;
++	}
++
++	elem.animate({
++		opacity: animateTo
++	}, duration, o.easing);
++
++	elem.queue(function() {
++		if ( hide ) {
++			elem.hide();
++		}
++		done();
++	});
++
++	// We just queued up "anims" animations, we need to put them next in the queue
++	if ( queuelen > 1 ) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	elem.dequeue();
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.puff = function( o, done ) {
++	var elem = $( this ),
++		mode = $.effects.setMode( elem, o.mode || "hide" ),
++		hide = mode === "hide",
++		percent = parseInt( o.percent, 10 ) || 150,
++		factor = percent / 100,
++		original = {
++			height: elem.height(),
++			width: elem.width(),
++			outerHeight: elem.outerHeight(),
++			outerWidth: elem.outerWidth()
++		};
++
++	$.extend( o, {
++		effect: "scale",
++		queue: false,
++		fade: true,
++		mode: mode,
++		complete: done,
++		percent: hide ? percent : 100,
++		from: hide ?
++			original :
++			{
++				height: original.height * factor,
++				width: original.width * factor,
++				outerHeight: original.outerHeight * factor,
++				outerWidth: original.outerWidth * factor
++			}
++	});
++
++	elem.effect( o );
++};
++
++$.effects.effect.scale = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		options = $.extend( true, {}, o ),
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		percent = parseInt( o.percent, 10 ) ||
++			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
++		direction = o.direction || "both",
++		origin = o.origin,
++		original = {
++			height: el.height(),
++			width: el.width(),
++			outerHeight: el.outerHeight(),
++			outerWidth: el.outerWidth()
++		},
++		factor = {
++			y: direction !== "horizontal" ? (percent / 100) : 1,
++			x: direction !== "vertical" ? (percent / 100) : 1
++		};
++
++	// We are going to pass this effect to the size effect:
++	options.effect = "size";
++	options.queue = false;
++	options.complete = done;
++
++	// Set default origin and restore for show/hide
++	if ( mode !== "effect" ) {
++		options.origin = origin || ["middle","center"];
++		options.restore = true;
++	}
++
++	options.from = o.from || ( mode === "show" ? {
++		height: 0,
++		width: 0,
++		outerHeight: 0,
++		outerWidth: 0
++	} : original );
++	options.to = {
++		height: original.height * factor.y,
++		width: original.width * factor.x,
++		outerHeight: original.outerHeight * factor.y,
++		outerWidth: original.outerWidth * factor.x
++	};
++
++	// Fade option to support puff
++	if ( options.fade ) {
++		if ( mode === "show" ) {
++			options.from.opacity = 0;
++			options.to.opacity = 1;
++		}
++		if ( mode === "hide" ) {
++			options.from.opacity = 1;
++			options.to.opacity = 0;
++		}
++	}
++
++	// Animate
++	el.effect( options );
++
++};
++
++$.effects.effect.size = function( o, done ) {
++
++	// Create element
++	var original, baseline, factor,
++		el = $( this ),
++		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
++
++		// Always restore
++		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
++
++		// Copy for children
++		props2 = [ "width", "height", "overflow" ],
++		cProps = [ "fontSize" ],
++		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
++		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
++
++		// Set options
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		restore = o.restore || mode !== "effect",
++		scale = o.scale || "both",
++		origin = o.origin || [ "middle", "center" ],
++		position = el.css( "position" ),
++		props = restore ? props0 : props1,
++		zero = {
++			height: 0,
++			width: 0,
++			outerHeight: 0,
++			outerWidth: 0
++		};
++
++	if ( mode === "show" ) {
++		el.show();
++	}
++	original = {
++		height: el.height(),
++		width: el.width(),
++		outerHeight: el.outerHeight(),
++		outerWidth: el.outerWidth()
++	};
++
++	if ( o.mode === "toggle" && mode === "show" ) {
++		el.from = o.to || zero;
++		el.to = o.from || original;
++	} else {
++		el.from = o.from || ( mode === "show" ? zero : original );
++		el.to = o.to || ( mode === "hide" ? zero : original );
++	}
++
++	// Set scaling factor
++	factor = {
++		from: {
++			y: el.from.height / original.height,
++			x: el.from.width / original.width
++		},
++		to: {
++			y: el.to.height / original.height,
++			x: el.to.width / original.width
++		}
++	};
++
++	// Scale the css box
++	if ( scale === "box" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( vProps );
++			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
++		}
++
++		// Horizontal props scaling
++		if ( factor.from.x !== factor.to.x ) {
++			props = props.concat( hProps );
++			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
++			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
++		}
++	}
++
++	// Scale the content
++	if ( scale === "content" || scale === "both" ) {
++
++		// Vertical props scaling
++		if ( factor.from.y !== factor.to.y ) {
++			props = props.concat( cProps ).concat( props2 );
++			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
++			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
++		}
++	}
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++	el.css( "overflow", "hidden" ).css( el.from );
++
++	// Adjust
++	if (origin) { // Calculate baseline shifts
++		baseline = $.effects.getBaseline( origin, original );
++		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
++		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
++		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
++		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
++	}
++	el.css( el.from ); // set top & left
++
++	// Animate
++	if ( scale === "content" || scale === "both" ) { // Scale the children
++
++		// Add margins/font-size
++		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
++		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
++		props2 = props0.concat(vProps).concat(hProps);
++
++		el.find( "*[width]" ).each( function(){
++			var child = $( this ),
++				c_original = {
++					height: child.height(),
++					width: child.width(),
++					outerHeight: child.outerHeight(),
++					outerWidth: child.outerWidth()
++				};
++			if (restore) {
++				$.effects.save(child, props2);
++			}
++
++			child.from = {
++				height: c_original.height * factor.from.y,
++				width: c_original.width * factor.from.x,
++				outerHeight: c_original.outerHeight * factor.from.y,
++				outerWidth: c_original.outerWidth * factor.from.x
++			};
++			child.to = {
++				height: c_original.height * factor.to.y,
++				width: c_original.width * factor.to.x,
++				outerHeight: c_original.height * factor.to.y,
++				outerWidth: c_original.width * factor.to.x
++			};
++
++			// Vertical props scaling
++			if ( factor.from.y !== factor.to.y ) {
++				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
++				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
++			}
++
++			// Horizontal props scaling
++			if ( factor.from.x !== factor.to.x ) {
++				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
++				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
++			}
++
++			// Animate children
++			child.css( child.from );
++			child.animate( child.to, o.duration, o.easing, function() {
++
++				// Restore children
++				if ( restore ) {
++					$.effects.restore( child, props2 );
++				}
++			});
++		});
++	}
++
++	// Animate
++	el.animate( el.to, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( el.to.opacity === 0 ) {
++				el.css( "opacity", el.from.opacity );
++			}
++			if( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			if ( !restore ) {
++
++				// we need to calculate our new positioning based on the scaling
++				if ( position === "static" ) {
++					el.css({
++						position: "relative",
++						top: el.to.top,
++						left: el.to.left
++					});
++				} else {
++					$.each([ "top", "left" ], function( idx, pos ) {
++						el.css( pos, function( _, str ) {
++							var val = parseInt( str, 10 ),
++								toRef = idx ? el.to.left : el.to.top;
++
++							// if original was "auto", recalculate the new value from wrapper
++							if ( str === "auto" ) {
++								return toRef + "px";
++							}
++
++							return val + toRef + "px";
++						});
++					});
++				}
++			}
++
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.shake = function( o, done ) {
++
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
++		mode = $.effects.setMode( el, o.mode || "effect" ),
++		direction = o.direction || "left",
++		distance = o.distance || 20,
++		times = o.times || 3,
++		anims = times * 2 + 1,
++		speed = Math.round(o.duration/anims),
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		animation = {},
++		animation1 = {},
++		animation2 = {},
++		i,
++
++		// we will need to re-assemble the queue to stack our animations in place
++		queue = el.queue(),
++		queuelen = queue.length;
++
++	$.effects.save( el, props );
++	el.show();
++	$.effects.createWrapper( el );
++
++	// Animation
++	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
++	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
++	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
++
++	// Animate
++	el.animate( animation, speed, o.easing );
++
++	// Shakes
++	for ( i = 1; i < times; i++ ) {
++		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
++	}
++	el
++		.animate( animation1, speed, o.easing )
++		.animate( animation, speed / 2, o.easing )
++		.queue(function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		});
++
++	// inject all the animations we just queued to be first in line (after "inprogress")
++	if ( queuelen > 1) {
++		queue.splice.apply( queue,
++			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
++	}
++	el.dequeue();
++
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.slide = function( o, done ) {
++
++	// Create element
++	var el = $( this ),
++		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
++		mode = $.effects.setMode( el, o.mode || "show" ),
++		show = mode === "show",
++		direction = o.direction || "left",
++		ref = (direction === "up" || direction === "down") ? "top" : "left",
++		positiveMotion = (direction === "up" || direction === "left"),
++		distance,
++		animation = {};
++
++	// Adjust
++	$.effects.save( el, props );
++	el.show();
++	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
++
++	$.effects.createWrapper( el ).css({
++		overflow: "hidden"
++	});
++
++	if ( show ) {
++		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
++	}
++
++	// Animation
++	animation[ ref ] = ( show ?
++		( positiveMotion ? "+=" : "-=") :
++		( positiveMotion ? "-=" : "+=")) +
++		distance;
++
++	// Animate
++	el.animate( animation, {
++		queue: false,
++		duration: o.duration,
++		easing: o.easing,
++		complete: function() {
++			if ( mode === "hide" ) {
++				el.hide();
++			}
++			$.effects.restore( el, props );
++			$.effects.removeWrapper( el );
++			done();
++		}
++	});
++};
++
++})(jQuery);
++(function( $, undefined ) {
++
++$.effects.effect.transfer = function( o, done ) {
++	var elem = $( this ),
++		target = $( o.to ),
++		targetFixed = target.css( "position" ) === "fixed",
++		body = $("body"),
++		fixTop = targetFixed ? body.scrollTop() : 0,
++		fixLeft = targetFixed ? body.scrollLeft() : 0,
++		endPosition = target.offset(),
++		animation = {
++			top: endPosition.top - fixTop ,
++			left: endPosition.left - fixLeft ,
++			height: target.innerHeight(),
++			width: target.innerWidth()
++		},
++		startPosition = elem.offset(),
++		transfer = $( "<div class='ui-effects-transfer'></div>" )
++			.appendTo( document.body )
++			.addClass( o.className )
++			.css({
++				top: startPosition.top - fixTop ,
++				left: startPosition.left - fixLeft ,
++				height: elem.innerHeight(),
++				width: elem.innerWidth(),
++				position: targetFixed ? "fixed" : "absolute"
++			})
++			.animate( animation, o.duration, o.easing, function() {
++				transfer.remove();
++				done();
++			});
++};
++
++})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/ISSM.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/ISSM.html	(revision 0)
++++ ../trunk-jpl/src/mobile/web/ISSM.html	(revision 15487)
+@@ -0,0 +1,581 @@
++<html>
++
++<head>
++<title>ISSM Web APP &mdash; Testing</title>
++<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
++
++
++<!-- CSS -->
++<link rel="stylesheet" href="css/animate.css"/>
++<link rel="stylesheet" href="css/jquery.ui.all.css"/>
++<link rel="stylesheet" type="text/css" href="js/sidebar/css/blue-glass/sidebar.css" />
++<link rel="stylesheet" href="css/mystyle.css"/>
++
++<!-- JavaScript -->
++<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
++<script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
++<script type="text/javascript" src="src/glMatrix-0.9.5.min.js"></script>
++<script type="text/javascript" src="src/coordinate.js"></script>
++<script type="text/javascript" src="src/color.js"></script>
++<script type="text/javascript" src="src/webgl-utils.js"></script>
++<script type="text/javascript" src="js/sidebar/src/jquery.sidebar.js"></script>
++
++    <script id="shader-fs1" type="x-shader/x-fragment">
++        precision mediump float;
++
++        varying vec2 vTextureCoord;
++        uniform sampler2D uSampler;
++
++        void main(void) {
++            gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
++        }
++    </script>
++
++    <script id="shader-vs1" type="x-shader/x-vertex">
++        attribute vec3 aVertexPosition;
++        attribute vec2 aTextureCoord;
++
++        uniform mat4 uMVMatrix;
++        uniform mat4 uPMatrix;
++
++        varying vec2 vTextureCoord;
++
++        void main(void) {
++            gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
++            vTextureCoord = aTextureCoord;
++        }
++    </script>
++
++    <script id="shader-fs2" type="x-shader/x-fragment">
++        precision mediump float;
++
++        varying vec4 vColor;
++
++        void main(void) {
++            gl_FragColor = vColor;
++        }
++    </script>
++
++    <script id="shader-vs2" type="x-shader/x-vertex">
++        attribute vec3 aVertexPosition;
++        attribute vec4 aVertexColor;
++
++        uniform mat4 uMVMatrix;
++        uniform mat4 uPMatrix;
++
++        varying vec4 vColor;
++
++        void main(void) {
++            gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
++            vColor = aVertexColor;
++        }
++    </script>
++
++    <script type="text/javascript">
++
++        var gl;
++
++        function initGL(canvas) {
++            try {
++                gl = canvas.getContext("experimental-webgl");
++                gl.viewportWidth = canvas.width;
++                gl.viewportHeight = canvas.height;
++            } catch (e) {
++            }
++            if (!gl) {
++                alert("Could not initialise WebGL, sorry :-(");
++            }
++        }
++
++
++        function getShader(gl, id) {
++            var shaderScript = document.getElementById(id);
++            if (!shaderScript) {
++                return null;
++            }
++
++            var str = "";
++            var k = shaderScript.firstChild;
++            while (k) {
++                if (k.nodeType == 3) {
++                    str += k.textContent;
++                }
++                k = k.nextSibling;
++            }
++
++            var shader;
++            if (shaderScript.type == "x-shader/x-fragment") {
++                shader = gl.createShader(gl.FRAGMENT_SHADER);
++            } else if (shaderScript.type == "x-shader/x-vertex") {
++                shader = gl.createShader(gl.VERTEX_SHADER);
++            } else {
++                return null;
++            }
++
++            gl.shaderSource(shader, str);
++            gl.compileShader(shader);
++
++            if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
++                alert(gl.getShaderInfoLog(shader));
++                return null;
++            }
++
++            return shader;
++        }
++    	
++
++
++        var shaderProgram1;
++    	
++        function initShaders1() {
++            var fragmentShader = getShader(gl, "shader-fs1");
++            var vertexShader = getShader(gl, "shader-vs1");
++    		
++            shaderProgram1 = gl.createProgram();
++            gl.attachShader(shaderProgram1, vertexShader);
++            gl.attachShader(shaderProgram1, fragmentShader);
++            gl.linkProgram(shaderProgram1);
++    		
++            if (!gl.getProgramParameter(shaderProgram1, gl.LINK_STATUS) ) 
++    		{
++                alert("Could not initialise shaders");
++            }
++    		
++    		gl.useProgram(shaderProgram1);
++
++            shaderProgram1.vertexPositionAttribute = gl.getAttribLocation(shaderProgram1, "aVertexPosition");
++            gl.enableVertexAttribArray(shaderProgram1.vertexPositionAttribute);
++
++            shaderProgram1.textureCoordAttribute = gl.getAttribLocation(shaderProgram1, "aTextureCoord");
++            gl.enableVertexAttribArray(shaderProgram1.textureCoordAttribute);
++
++            shaderProgram1.pMatrixUniform = gl.getUniformLocation(shaderProgram1, "uPMatrix");
++            shaderProgram1.mvMatrixUniform = gl.getUniformLocation(shaderProgram1, "uMVMatrix");
++            shaderProgram1.samplerUniform = gl.getUniformLocation(shaderProgram1, "uSampler");
++        }
++    	
++    	
++    	var shaderProgram2;
++    	
++        function initShaders2() {
++            var fragmentShader = getShader(gl, "shader-fs2");
++            var vertexShader = getShader(gl, "shader-vs2");
++    		
++            shaderProgram2 = gl.createProgram();
++            gl.attachShader(shaderProgram2, vertexShader);
++            gl.attachShader(shaderProgram2, fragmentShader);
++            gl.linkProgram(shaderProgram2);
++    		
++            if (!gl.getProgramParameter(shaderProgram2, gl.LINK_STATUS) ) 
++    		{
++                alert("Could not initialise shaders");
++            }
++    		
++    		gl.useProgram(shaderProgram2);
++
++            shaderProgram2.vertexPositionAttribute = gl.getAttribLocation(shaderProgram2, "aVertexPosition");
++            gl.enableVertexAttribArray(shaderProgram2.vertexPositionAttribute);
++
++            shaderProgram2.vertexColorAttribute = gl.getAttribLocation(shaderProgram2, "aVertexColor");
++            gl.enableVertexAttribArray(shaderProgram2.vertexColorAttribute);
++
++            shaderProgram2.pMatrixUniform = gl.getUniformLocation(shaderProgram2, "uPMatrix");
++            shaderProgram2.mvMatrixUniform = gl.getUniformLocation(shaderProgram2, "uMVMatrix");
++        }
++    	
++        function handleLoadedTexture(texture) {
++            gl.bindTexture(gl.TEXTURE_2D, texture);
++            gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
++            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
++            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
++            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
++            gl.bindTexture(gl.TEXTURE_2D, null);
++        }
++
++
++        var neheTexture;
++
++        function initTexture() {
++            neheTexture = gl.createTexture();
++            neheTexture.image = new Image();
++            neheTexture.image.onload = function () {
++                handleLoadedTexture(neheTexture)
++            }
++
++            neheTexture.image.src = "images/greenland.png";
++        }
++
++
++        var mvMatrix = mat4.create();
++        var mvMatrixStack = [];
++        var pMatrix = mat4.create();
++
++        function mvPushMatrix() {
++            var copy = mat4.create();
++            mat4.set(mvMatrix, copy);
++            mvMatrixStack.push(copy);
++        }
++
++        function mvPopMatrix() {
++            if (mvMatrixStack.length == 0) {
++                throw "Invalid popMatrix!";
++            }
++            mvMatrix = mvMatrixStack.pop();
++        }
++
++
++        function setMatrixUniforms1() {
++            gl.uniformMatrix4fv(shaderProgram1.pMatrixUniform, false, pMatrix);
++            gl.uniformMatrix4fv(shaderProgram1.mvMatrixUniform, false, mvMatrix);
++        }
++    	
++    	function setMatrixUniforms2() {
++            gl.uniformMatrix4fv(shaderProgram2.pMatrixUniform, false, pMatrix);
++            gl.uniformMatrix4fv(shaderProgram2.mvMatrixUniform, false, mvMatrix);
++        }
++
++
++        function degToRad(degrees) {
++            return degrees * Math.PI / 180;
++        }
++
++    	var triangleVertexPositionBuffer;
++        var triangleVertexColorBuffer;
++    	var col = 9;
++    	function VertexArray(x1,y1,z1,x2,y2,z2,x3,y3,z3)
++    	{
++    		return [x1,y1,z1,x2,y2,z2,x3,y3,z3];
++    	}
++    	
++    	function ColorsArray(R1,G1,B1,A1,R2,G2,B2,A2,R3,G3,B3,A3)
++    	{
++    		return [R1,G1,B1,A1,R2,G2,B2,A2,R3,G3,B3,A3];
++    	}
++    	function generateTriangle(row)
++    	{
++    		var x1 = coordinate[col*row+0];
++    		var y1 = coordinate[col*row+1];
++    		var z1 = coordinate[col*row+2];
++    		var x2 = coordinate[col*row+3];
++    		var y2 = coordinate[col*row+4];
++    		var z2 = coordinate[col*row+5];
++    		var x3 = coordinate[col*row+6];
++    		var y3 = coordinate[col*row+7];
++    		var z3 = coordinate[col*row+8];
++    		
++    		var result;
++    		result = new VertexArray(x1,y1,z1,x2,y2,z2,x3,y3,z3);
++    		return result; 	
++    	}
++    	
++    	function generateTriangleColor(row)
++    	{
++    		var R1 = color[col*row+0];
++    		var G1 = color[col*row+1];
++    		var B1 = color[col*row+2];
++    		var R2 = color[col*row+3];
++    		var G2 = color[col*row+4];
++    		var B2 = color[col*row+5];
++    		var R3 = color[col*row+6];
++    		var G3 = color[col*row+7];
++    		var B3 = color[col*row+8];
++    		
++    		var result;
++    		result = new ColorsArray(R1,G1,B1,1.0,R2,G2,B2,1.0,R3,G3,B3,1.0);
++    		return result;
++    	}
++
++    	var size = 252;
++    	function createTriangles()
++    	{
++    		triangleVertexPositionBuffer = new Array(size);
++    		triangleVertexColorBuffer    = new Array(size);
++    		triangleVertexPositionBuffer.itemSize = 3;
++    		triangleVertexPositionBuffer.numItems = 3;
++    		triangleVertexColorBuffer.itemSize = 4;
++    		triangleVertexColorBuffer.numItems = 3;
++    		
++    		var triangleVertex;
++    		var triangleColor;
++    		
++    		for(var i = 0; i < size; i++)
++    		{
++    			triangleVertex = generateTriangle(i);
++    			triangleColor = generateTriangleColor(i);
++    			
++    			//create buffer on GL side for vertex
++    			triangleVertexPositionBuffer[i] = gl.createBuffer();
++    			gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer[i]);
++    			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVertex), gl.STATIC_DRAW);
++
++    			//create buffer on GL side for color
++    			triangleVertexColorBuffer[i] = gl.createBuffer();
++    			gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer[i]);
++    			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleColor), gl.STATIC_DRAW);
++    		}
++    	}
++    	
++    	
++        function initBuffers() 
++    	{
++    		createTriangles();
++        }
++    	
++    	
++    	
++        var squareVertexPositionBuffer;
++        var squareVertexTextureCoordBuffer;
++        var squareVertexIndexBuffer;
++    	
++        function initBuffers() {
++            squareVertexPositionBuffer = gl.createBuffer();
++            gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
++            vertices = [
++                // Front face
++                -1.0, -1.0,  0.0,
++                 1.0, -1.0,  0.0,
++                 1.0,  1.0,  0.0,
++                -1.0,  1.0,  0.0,
++            ];
++            gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
++            squareVertexPositionBuffer.itemSize = 3;
++            squareVertexPositionBuffer.numItems = 4;
++
++            squareVertexTextureCoordBuffer = gl.createBuffer();
++            gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexTextureCoordBuffer);
++            var textureCoords = [
++              // Front face
++              0.0, 0.0,
++              1.0, 0.0,
++              1.0, 1.0,
++              0.0, 1.0,        
++            ];
++            gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(textureCoords), gl.STATIC_DRAW);
++            squareVertexTextureCoordBuffer.itemSize = 2;
++            squareVertexTextureCoordBuffer.numItems = 4;
++
++            squareVertexIndexBuffer = gl.createBuffer();
++            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, squareVertexIndexBuffer);
++            var squareVertexIndices = [
++                0, 1, 2,      0, 2, 3,    // Front face
++            ];
++            gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(squareVertexIndices), gl.STATIC_DRAW);
++            squareVertexIndexBuffer.itemSize = 1;
++            squareVertexIndexBuffer.numItems = 6;
++    		
++    		createTriangles();
++        }
++    	
++    	function drawScene() {
++    		gl.useProgram(shaderProgram2);
++            gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
++            gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
++
++            mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
++
++            mat4.identity(mvMatrix);
++            mat4.translate(mvMatrix, [0, 0, -3.0]);
++    		
++    			
++    		for(var i = 0; i < size; i++)
++    		{
++    			gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer[i]);
++    			gl.vertexAttribPointer(shaderProgram2.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
++    			
++    			gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer[i]);
++    			gl.vertexAttribPointer(shaderProgram2.vertexColorAttribute, triangleVertexColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
++
++    			setMatrixUniforms2();
++    			gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer.numItems);
++    		}
++        }
++
++
++        var xRot = 0;
++        var yRot = 0;
++        var zRot = 0;
++    	
++    	function drawBackground()
++    	{
++    		gl.useProgram(shaderProgram1);
++    		gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
++            gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
++    		
++            mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
++
++            mat4.identity(mvMatrix);
++    		mat4.translate(mvMatrix, [0.0, 0.0, -2.0]);
++    		
++    		// draw background position
++            gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
++            gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
++
++            mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
++
++            mat4.identity(mvMatrix);
++
++            mat4.translate(mvMatrix, [0.0, 0.0, -3.0]);
++
++            gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
++            gl.vertexAttribPointer(shaderProgram1.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
++
++            gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexTextureCoordBuffer);
++            gl.vertexAttribPointer(shaderProgram1.textureCoordAttribute, squareVertexTextureCoordBuffer.itemSize, gl.FLOAT, false, 0, 0);
++
++            gl.activeTexture(gl.TEXTURE0);
++            gl.bindTexture(gl.TEXTURE_2D, neheTexture);
++            gl.uniform1i(shaderProgram1.samplerUniform, 0);
++
++            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, squareVertexIndexBuffer);
++            setMatrixUniforms1();
++            gl.drawElements(gl.TRIANGLES, squareVertexIndexBuffer.numItems, gl.UNSIGNED_SHORT, 0);
++    	}
++
++        var lastTime = 0;
++
++        function animate() {
++            var timeNow = new Date().getTime();
++            if (lastTime != 0) {
++                var elapsed = timeNow - lastTime;
++
++                //xRot += (90 * elapsed) / 1000.0;
++                //yRot += (90 * elapsed) / 1000.0;
++                //zRot += (90 * elapsed) / 1000.0;
++            }
++            lastTime = timeNow;
++        }
++
++    	var drawFigure = 0;
++    	
++        function tick() {
++            requestAnimFrame(tick);
++    		if( drawFigure == 0)
++    			drawBackground();
++    		else
++    			drawScene();
++            //animate();
++        }
++
++    	function triggerDrawFigure()
++    	{
++    		drawFigure = 1;
++    	}
++
++        function webGLStart() {
++            var canvas = document.getElementById("ISSM-canvas");
++            initGL(canvas);
++            initShaders1();
++    		initShaders2();
++            initBuffers();
++            initTexture();
++
++            gl.clearColor(0.0, 0.0, 0.0, 1.0);
++            gl.enable(gl.DEPTH_TEST);
++    		
++    		tick();
++        }
++
++
++    </script>
++
++   <script>
++        $(function() {
++            $( "input[type=submit], button" )
++                .button()
++                .click(function( event ) {
++                    event.preventDefault();
++                });
++        });
++        
++        $(function() {
++            $( "#friction-slider" ).slider({
++                range: "min",
++                value: 20,
++                min: 10,
++                max: 500,
++                slide: function( event, ui ) {
++                    $( "#amount1" ).val( "    " + ui.value );
++                }
++            });
++            $( "#amount1" ).val( "    " + $( "#friction-slider" ).slider( "value" ) );
++            
++            $( "#temperature-slider" ).slider({
++                range: "min",
++                value: 20,
++                min: 10,
++                max: 500,
++                slide: function( event, ui ) {
++                    $( "#amount2" ).val( "    " + ui.value );
++                }
++            });
++            $( "#amount2" ).val( "    " + $( "#temperature-slider" ).slider( "value" ) );
++            
++            $( "#sea-slider" ).slider({
++                range: "min",
++                value: 20,
++                min: 10,
++                max: 500,
++                slide: function( event, ui ) {
++                    $( "#amount3" ).val( "    " + ui.value );
++                }
++            });
++            $( "#amount3" ).val( "    " + $( "#sea-slider" ).slider( "value" ) );
++        });
++    </script>
++
++</head>
++
++<body onload="webGLStart();">
++	<div id="frame" style="position: relative; left: 0; top: 0;" >
++		<img src="images/ISSMJPLTOP.png" class="imageBorder" width="750" height="120" style="top: 0; left: 0;">
++		<a href="ISSM.html" target=""><img src="images/ISSMlogo.png" width="500" height="70" style="position: absolute; top: 30; left: 250;"></a>
++         <ul id="sidebar" >
++            <li><a href="gallery.html" >Gallery</a></li>
++            <li><a href="ISSM.html" >Simulator</a></li>
++            <li><a href="http://issm.jpl.nasa.gov/" >Visit Us</a></li>
++        </ul>
++        <script type="text/javascript">
++            $("ul#sidebar").sidebar();
++        </script>   
++		<div id="canvasframe">
++			<canvas class="animated bounceInDown" id="ISSM-canvas" style="border: none;" width="700" height="580"></canvas>
++			<br/>
++			<br/>
++				<table id="sliderTable">
++					<tr>
++					<td width="10%">
++						<label class="sliderLabel" for="amount1">Friction:</label> <td/>
++					<td width="10%">
++						<input type="text" class="borderText" id="amount1" style=" width:50; border:0; color:#f6931f; font-weight:bold;" />
++					<td width="80%">
++						<div id="friction-slider"></div>
++					</td>
++					
++					<tr>
++					<td width="10%">
++						<label class="sliderLabel" for="amount2">Temperature:</label> <td/>
++					<td width="10%">
++						<input type="text" class="borderText" id="amount2" style=" width:50; border:0; color:#f6931f; font-weight:bold;" />
++					<td width="80%">
++						<div id="temperature-slider"></div>
++					</td>
++					
++					
++					<tr>
++					<td width="10%">
++						<label class="sliderLabel" for="amount3">Sea Level:</label> <td/>
++					<td width="10%">
++						<input type="text" class="borderText" id="amount3" style=" width:50; border:0; color:#f6931f; font-weight:bold;" />
++					<td width="80%">
++						<div id="sea-slider"></div>
++					</td>
++					
++				</table>
++			<br/>
++			<input type="submit" style="width:700" onclick="triggerDrawFigure()" value="Run" />
++		</div>
++	</div>
++	<img src="images/globe.png" alt="globe" height="350" width="500" align="right">
++</body>
++
++</html>
+\ No newline at end of file
Index: /issm/oecreview/Archive/15392-16133/ISSM-15487-15488.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15487-15488.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15487-15488.diff	(revision 16134)
@@ -0,0 +1,225792 @@
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_228ef1_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/globe.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ffd27a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ISSMlogo.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/greenland.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ffffff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ISSMJPLTOP.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-icons_ef8c08_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img15.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img16.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img17.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img1.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img2.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img3.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img4.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img5.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img6.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img7.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img8.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img9.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img10.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img11.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img12.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img13.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/issm_img/img14.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/src/color.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/color.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/src/color.js	(revision 15488)
+@@ -1,253 +0,0 @@
+-var color = [
+-1.0,0.0469,0.0,1.0,0.89065,0.0,0.01565,1.0,0.03125,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,0.01565,1.0,0.03125,1.0,0.89065,0.0,
+-1.0,0.32815,0.0,1.0,0.0,0.0938,0.0,0.4844,1.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
+-1.0,0.51565,0.0,1.0,0.89065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.51565,0.0,1.0,0.14065,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,0.45315,1.0,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-0.07815,0.0,1.0,1.0,0.32815,0.0,0.0,0.4844,1.0,
+-1.0,0.70315,0.0,1.0,0.6094,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.4219,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.70315,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.4219,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.70315,0.0,0.82815,1.0,0.0,0.0,1.0,0.20315,
+-1.0,0.6094,0.0,0.0,1.0,0.4844,0.0,1.0,0.95315,
+-1.0,0.0469,0.0,1.0,0.0,0.0,1.0,0.0,0.0,
+-1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.14065,0.0,
+-0.64065,1.0,0.0,1.0,0.4219,0.0,0.82815,1.0,0.0,
+-0.26565,1.0,0.0,1.0,0.32815,0.0,1.0,0.2344,0.0,
+-1.0,0.14065,0.0,1.0,0.0,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.70315,0.0,0.64065,1.0,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.2344,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.2344,0.0,1.0,0.14065,0.0,1.0,0.6094,0.0,
+-1.0,0.14065,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,0.26565,1.0,0.0,1.0,0.4219,0.0,
+-1.0,0.6094,0.0,1.0,0.70315,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.51565,0.0,1.0,0.0,0.0938,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.14065,0.0,
+-1.0,0.14065,0.0,1.0,0.70315,0.0,1.0,0.0469,0.0,
+-1.0,0.51565,0.0,1.0,0.0469,0.0,1.0,0.70315,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.51565,0.0,1.0,0.51565,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
+-1.0,0.4219,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.51565,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.51565,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.51565,0.0,0.45315,1.0,0.0,1.0,0.0,0.0938,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.4219,0.0,0.0,1.0,0.20315,0.82815,1.0,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.89065,0.0,0.0,1.0,0.95315,0.0,1.0,0.4844,
+-1.0,0.0469,0.0,1.0,0.51565,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.70315,0.0,
+-1.0,0.14065,0.0,0.7344,1.0,0.0,1.0,0.70315,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.6094,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.89065,0.0,0.07815,0.0,1.0,0.0,1.0,0.4844,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,0.07815,0.0,1.0,1.0,0.89065,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.70315,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.70315,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.14065,0.0,1.0,0.70315,0.0,
+-1.0,0.89065,0.0,0.0,1.0,0.4844,1.0,0.32815,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.6094,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.89065,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
+-1.0,0.70315,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
+-1.0,0.70315,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.4219,0.0,0.82815,1.0,0.0,1.0,0.4219,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.51565,0.0,1.0,0.0469,0.0,1.0,0.89065,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.6094,0.0,1.0,0.14065,0.0,
+-1.0,0.2344,0.0,1.0,0.7969,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.6094,0.0,1.0,0.14065,0.0,1.0,0.14065,0.0,
+-1.0,0.4219,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.14065,0.0,1.0,0.6094,0.0,0.0,1.0,0.95315,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.4219,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.6094,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.6094,0.0,1.0,0.14065,0.0,
+-1.0,0.14065,0.0,1.0,0.4219,0.0,0.26565,1.0,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-0.7344,1.0,0.0,1.0,0.4219,0.0,0.64065,1.0,0.0,
+-1.0,0.14065,0.0,0.26565,1.0,0.0,1.0,0.32815,0.0,
+-1.0,0.4219,0.0,1.0,0.32815,0.0,0.26565,1.0,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.89065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-0.64065,1.0,0.0,1.0,0.70315,0.0,0.7344,1.0,0.0,
+-1.0,0.0469,0.0,1.0,0.7969,0.0,1.0,0.2344,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.89065,0.0,0.0,1.0,0.4844,0.07815,0.0,1.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-0.0,1.0,0.20315,0.1719,1.0,0.0,1.0,0.51565,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-0.1719,1.0,0.0,0.0,1.0,0.20315,1.0,0.4219,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.51565,0.0,
+-1.0,0.0469,0.0,0.01565,1.0,0.03125,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.2344,0.0,
+-1.0,0.14065,0.0,1.0,0.6094,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.4219,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.51565,0.0,1.0,0.70315,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.2344,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-0.26565,1.0,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.70315,0.0,0.64065,1.0,0.0,0.82815,1.0,0.0,
+-1.0,0.51565,0.0,1.0,0.0469,0.0,0.45315,1.0,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.4219,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.4219,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-0.26565,1.0,0.0,1.0,0.2344,0.0,1.0,0.4219,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
+-1.0,0.2344,0.0,1.0,0.51565,0.0,0.1719,1.0,0.0,
+-1.0,0.14065,0.0,1.0,0.14065,0.0,1.0,0.70315,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.14065,0.0,
+-1.0,0.2344,0.0,1.0,0.14065,0.0,1.0,0.14065,0.0,
+-1.0,0.51565,0.0,1.0,0.32815,0.0,0.0,1.0,0.20315,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.6094,0.0,
+-0.0,1.0,0.4844,1.0,0.6094,0.0,1.0,0.32815,0.0,
+-1.0,0.2344,0.0,0.64065,1.0,0.0,1.0,0.70315,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.70315,0.0,0.0,1.0,0.20315,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.4219,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.70315,0.0,
+-1.0,0.51565,0.0,1.0,0.0469,0.0,1.0,0.51565,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.89065,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.14065,0.0,0.64065,1.0,0.0,1.0,0.2344,0.0,
+-1.0,0.51565,0.0,1.0,0.0469,0.0,1.0,0.32815,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.2344,0.0,1.0,0.70315,0.0,
+-1.0,0.0469,0.0,1.0,0.14065,0.0,1.0,0.2344,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.14065,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.51565,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.2344,0.0,
+-1.0,0.14065,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.32815,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.0469,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0,
+-1.0,0.32815,0.0,1.0,0.0469,0.0,1.0,0.0469,0.0];
+Index: ../trunk-jpl/src/mobile/web/src/webgl-utils.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/webgl-utils.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/src/webgl-utils.js	(revision 15488)
+@@ -1,174 +0,0 @@
+-/*
+- * Copyright 2010, Google Inc.
+- * All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without
+- * modification, are permitted provided that the following conditions are
+- * met:
+- *
+- *     * Redistributions of source code must retain the above copyright
+- * notice, this list of conditions and the following disclaimer.
+- *     * Redistributions in binary form must reproduce the above
+- * copyright notice, this list of conditions and the following disclaimer
+- * in the documentation and/or other materials provided with the
+- * distribution.
+- *     * Neither the name of Google Inc. nor the names of its
+- * contributors may be used to endorse or promote products derived from
+- * this software without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- */
+-
+-
+-/**
+- * @fileoverview This file contains functions every webgl program will need
+- * a version of one way or another.
+- *
+- * Instead of setting up a context manually it is recommended to
+- * use. This will check for success or failure. On failure it
+- * will attempt to present an approriate message to the user.
+- *
+- *       gl = WebGLUtils.setupWebGL(canvas);
+- *
+- * For animated WebGL apps use of setTimeout or setInterval are
+- * discouraged. It is recommended you structure your rendering
+- * loop like this.
+- *
+- *       function render() {
+- *         window.requestAnimFrame(render, canvas);
+- *
+- *         // do rendering
+- *         ...
+- *       }
+- *       render();
+- *
+- * This will call your rendering function up to the refresh rate
+- * of your display but will stop rendering if your app is not
+- * visible.
+- */
+-
+-WebGLUtils = function() {
+-
+-/**
+- * Creates the HTLM for a failure message
+- * @param {string} canvasContainerId id of container of th
+- *        canvas.
+- * @return {string} The html.
+- */
+-var makeFailHTML = function(msg) {
+-  return '' +
+-    '<table style="background-color: #8CE; width: 100%; height: 100%;"><tr>' +
+-    '<td align="center">' +
+-    '<div style="display: table-cell; vertical-align: middle;">' +
+-    '<div style="">' + msg + '</div>' +
+-    '</div>' +
+-    '</td></tr></table>';
+-};
+-
+-/**
+- * Mesasge for getting a webgl browser
+- * @type {string}
+- */
+-var GET_A_WEBGL_BROWSER = '' +
+-  'This page requires a browser that supports WebGL.<br/>' +
+-  '<a href="http://get.webgl.org">Click here to upgrade your browser.</a>';
+-
+-/**
+- * Mesasge for need better hardware
+- * @type {string}
+- */
+-var OTHER_PROBLEM = '' +
+-  "It doesn't appear your computer can support WebGL.<br/>" +
+-  '<a href="http://get.webgl.org/troubleshooting/">Click here for more information.</a>';
+-
+-/**
+- * Creates a webgl context. If creation fails it will
+- * change the contents of the container of the <canvas>
+- * tag to an error message with the correct links for WebGL.
+- * @param {Element} canvas. The canvas element to create a
+- *     context from.
+- * @param {WebGLContextCreationAttirbutes} opt_attribs Any
+- *     creation attributes you want to pass in.
+- * @param {function:(msg)} opt_onError An function to call
+- *     if there is an error during creation.
+- * @return {WebGLRenderingContext} The created context.
+- */
+-var setupWebGL = function(canvas, opt_attribs, opt_onError) {
+-  function handleCreationError(msg) {
+-    var container = canvas.parentNode;
+-    if (container) {
+-      var str = window.WebGLRenderingContext ?
+-           OTHER_PROBLEM :
+-           GET_A_WEBGL_BROWSER;
+-      if (msg) {
+-        str += "<br/><br/>Status: " + msg;
+-      }
+-      container.innerHTML = makeFailHTML(str);
+-    }
+-  };
+-
+-  opt_onError = opt_onError || handleCreationError;
+-
+-  if (canvas.addEventListener) {
+-    canvas.addEventListener("webglcontextcreationerror", function(event) {
+-          opt_onError(event.statusMessage);
+-        }, false);
+-  }
+-  var context = create3DContext(canvas, opt_attribs);
+-  if (!context) {
+-    if (!window.WebGLRenderingContext) {
+-      opt_onError("");
+-    }
+-  }
+-  return context;
+-};
+-
+-/**
+- * Creates a webgl context.
+- * @param {!Canvas} canvas The canvas tag to get context
+- *     from. If one is not passed in one will be created.
+- * @return {!WebGLContext} The created context.
+- */
+-var create3DContext = function(canvas, opt_attribs) {
+-  var names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];
+-  var context = null;
+-  for (var ii = 0; ii < names.length; ++ii) {
+-    try {
+-      context = canvas.getContext(names[ii], opt_attribs);
+-    } catch(e) {}
+-    if (context) {
+-      break;
+-    }
+-  }
+-  return context;
+-}
+-
+-return {
+-  create3DContext: create3DContext,
+-  setupWebGL: setupWebGL
+-};
+-}();
+-
+-/**
+- * Provides requestAnimationFrame in a cross browser way.
+- */
+-window.requestAnimFrame = (function() {
+-  return window.requestAnimationFrame ||
+-         window.webkitRequestAnimationFrame ||
+-         window.mozRequestAnimationFrame ||
+-         window.oRequestAnimationFrame ||
+-         window.msRequestAnimationFrame ||
+-         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
+-           window.setTimeout(callback, 1000/60);
+-         };
+-})();
+Index: ../trunk-jpl/src/mobile/web/src/glMatrix-0.9.5.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/glMatrix-0.9.5.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/src/glMatrix-0.9.5.min.js	(revision 15488)
+@@ -1,32 +0,0 @@
+-// glMatrix v0.9.5
+-glMatrixArrayType=typeof Float32Array!="undefined"?Float32Array:typeof WebGLFloatArray!="undefined"?WebGLFloatArray:Array;var vec3={};vec3.create=function(a){var b=new glMatrixArrayType(3);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2]}return b};vec3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];return b};vec3.add=function(a,b,c){if(!c||a==c){a[0]+=b[0];a[1]+=b[1];a[2]+=b[2];return a}c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];return c};
+-vec3.subtract=function(a,b,c){if(!c||a==c){a[0]-=b[0];a[1]-=b[1];a[2]-=b[2];return a}c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];return c};vec3.negate=function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];return b};vec3.scale=function(a,b,c){if(!c||a==c){a[0]*=b;a[1]*=b;a[2]*=b;return a}c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;return c};
+-vec3.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=Math.sqrt(c*c+d*d+e*e);if(g){if(g==1){b[0]=c;b[1]=d;b[2]=e;return b}}else{b[0]=0;b[1]=0;b[2]=0;return b}g=1/g;b[0]=c*g;b[1]=d*g;b[2]=e*g;return b};vec3.cross=function(a,b,c){c||(c=a);var d=a[0],e=a[1];a=a[2];var g=b[0],f=b[1];b=b[2];c[0]=e*b-a*f;c[1]=a*g-d*b;c[2]=d*f-e*g;return c};vec3.length=function(a){var b=a[0],c=a[1];a=a[2];return Math.sqrt(b*b+c*c+a*a)};vec3.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]};
+-vec3.direction=function(a,b,c){c||(c=a);var d=a[0]-b[0],e=a[1]-b[1];a=a[2]-b[2];b=Math.sqrt(d*d+e*e+a*a);if(!b){c[0]=0;c[1]=0;c[2]=0;return c}b=1/b;c[0]=d*b;c[1]=e*b;c[2]=a*b;return c};vec3.lerp=function(a,b,c,d){d||(d=a);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);d[2]=a[2]+c*(b[2]-a[2]);return d};vec3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var mat3={};
+-mat3.create=function(a){var b=new glMatrixArrayType(9);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9]}return b};mat3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return b};mat3.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a};
+-mat3.transpose=function(a,b){if(!b||a==b){var c=a[1],d=a[2],e=a[5];a[1]=a[3];a[2]=a[6];a[3]=c;a[5]=a[7];a[6]=d;a[7]=e;return a}b[0]=a[0];b[1]=a[3];b[2]=a[6];b[3]=a[1];b[4]=a[4];b[5]=a[7];b[6]=a[2];b[7]=a[5];b[8]=a[8];return b};mat3.toMat4=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=0;b[4]=a[3];b[5]=a[4];b[6]=a[5];b[7]=0;b[8]=a[6];b[9]=a[7];b[10]=a[8];b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};
+-mat3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+"]"};var mat4={};mat4.create=function(a){var b=new glMatrixArrayType(16);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15]}return b};
+-mat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b};mat4.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a};
+-mat4.transpose=function(a,b){if(!b||a==b){var c=a[1],d=a[2],e=a[3],g=a[6],f=a[7],h=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=c;a[6]=a[9];a[7]=a[13];a[8]=d;a[9]=g;a[11]=a[14];a[12]=e;a[13]=f;a[14]=h;return a}b[0]=a[0];b[1]=a[4];b[2]=a[8];b[3]=a[12];b[4]=a[1];b[5]=a[5];b[6]=a[9];b[7]=a[13];b[8]=a[2];b[9]=a[6];b[10]=a[10];b[11]=a[14];b[12]=a[3];b[13]=a[7];b[14]=a[11];b[15]=a[15];return b};
+-mat4.determinant=function(a){var b=a[0],c=a[1],d=a[2],e=a[3],g=a[4],f=a[5],h=a[6],i=a[7],j=a[8],k=a[9],l=a[10],o=a[11],m=a[12],n=a[13],p=a[14];a=a[15];return m*k*h*e-j*n*h*e-m*f*l*e+g*n*l*e+j*f*p*e-g*k*p*e-m*k*d*i+j*n*d*i+m*c*l*i-b*n*l*i-j*c*p*i+b*k*p*i+m*f*d*o-g*n*d*o-m*c*h*o+b*n*h*o+g*c*p*o-b*f*p*o-j*f*d*a+g*k*d*a+j*c*h*a-b*k*h*a-g*c*l*a+b*f*l*a};
+-mat4.inverse=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=a[4],h=a[5],i=a[6],j=a[7],k=a[8],l=a[9],o=a[10],m=a[11],n=a[12],p=a[13],r=a[14],s=a[15],A=c*h-d*f,B=c*i-e*f,t=c*j-g*f,u=d*i-e*h,v=d*j-g*h,w=e*j-g*i,x=k*p-l*n,y=k*r-o*n,z=k*s-m*n,C=l*r-o*p,D=l*s-m*p,E=o*s-m*r,q=1/(A*E-B*D+t*C+u*z-v*y+w*x);b[0]=(h*E-i*D+j*C)*q;b[1]=(-d*E+e*D-g*C)*q;b[2]=(p*w-r*v+s*u)*q;b[3]=(-l*w+o*v-m*u)*q;b[4]=(-f*E+i*z-j*y)*q;b[5]=(c*E-e*z+g*y)*q;b[6]=(-n*w+r*t-s*B)*q;b[7]=(k*w-o*t+m*B)*q;b[8]=(f*D-h*z+j*x)*q;
+-b[9]=(-c*D+d*z-g*x)*q;b[10]=(n*v-p*t+s*A)*q;b[11]=(-k*v+l*t-m*A)*q;b[12]=(-f*C+h*y-i*x)*q;b[13]=(c*C-d*y+e*x)*q;b[14]=(-n*u+p*B-r*A)*q;b[15]=(k*u-l*B+o*A)*q;return b};mat4.toRotationMat=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};
+-mat4.toMat3=function(a,b){b||(b=mat3.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[4];b[4]=a[5];b[5]=a[6];b[6]=a[8];b[7]=a[9];b[8]=a[10];return b};mat4.toInverseMat3=function(a,b){var c=a[0],d=a[1],e=a[2],g=a[4],f=a[5],h=a[6],i=a[8],j=a[9],k=a[10],l=k*f-h*j,o=-k*g+h*i,m=j*g-f*i,n=c*l+d*o+e*m;if(!n)return null;n=1/n;b||(b=mat3.create());b[0]=l*n;b[1]=(-k*d+e*j)*n;b[2]=(h*d-e*f)*n;b[3]=o*n;b[4]=(k*c-e*i)*n;b[5]=(-h*c+e*g)*n;b[6]=m*n;b[7]=(-j*c+d*i)*n;b[8]=(f*c-d*g)*n;return b};
+-mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],f=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],o=a[9],m=a[10],n=a[11],p=a[12],r=a[13],s=a[14];a=a[15];var A=b[0],B=b[1],t=b[2],u=b[3],v=b[4],w=b[5],x=b[6],y=b[7],z=b[8],C=b[9],D=b[10],E=b[11],q=b[12],F=b[13],G=b[14];b=b[15];c[0]=A*d+B*h+t*l+u*p;c[1]=A*e+B*i+t*o+u*r;c[2]=A*g+B*j+t*m+u*s;c[3]=A*f+B*k+t*n+u*a;c[4]=v*d+w*h+x*l+y*p;c[5]=v*e+w*i+x*o+y*r;c[6]=v*g+w*j+x*m+y*s;c[7]=v*f+w*k+x*n+y*a;c[8]=z*d+C*h+D*l+E*p;c[9]=z*e+C*i+D*o+E*r;c[10]=z*
+-g+C*j+D*m+E*s;c[11]=z*f+C*k+D*n+E*a;c[12]=q*d+F*h+G*l+b*p;c[13]=q*e+F*i+G*o+b*r;c[14]=q*g+F*j+G*m+b*s;c[15]=q*f+F*k+G*n+b*a;return c};mat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1];b=b[2];c[0]=a[0]*d+a[4]*e+a[8]*b+a[12];c[1]=a[1]*d+a[5]*e+a[9]*b+a[13];c[2]=a[2]*d+a[6]*e+a[10]*b+a[14];return c};
+-mat4.multiplyVec4=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2];b=b[3];c[0]=a[0]*d+a[4]*e+a[8]*g+a[12]*b;c[1]=a[1]*d+a[5]*e+a[9]*g+a[13]*b;c[2]=a[2]*d+a[6]*e+a[10]*g+a[14]*b;c[3]=a[3]*d+a[7]*e+a[11]*g+a[15]*b;return c};
+-mat4.translate=function(a,b,c){var d=b[0],e=b[1];b=b[2];if(!c||a==c){a[12]=a[0]*d+a[4]*e+a[8]*b+a[12];a[13]=a[1]*d+a[5]*e+a[9]*b+a[13];a[14]=a[2]*d+a[6]*e+a[10]*b+a[14];a[15]=a[3]*d+a[7]*e+a[11]*b+a[15];return a}var g=a[0],f=a[1],h=a[2],i=a[3],j=a[4],k=a[5],l=a[6],o=a[7],m=a[8],n=a[9],p=a[10],r=a[11];c[0]=g;c[1]=f;c[2]=h;c[3]=i;c[4]=j;c[5]=k;c[6]=l;c[7]=o;c[8]=m;c[9]=n;c[10]=p;c[11]=r;c[12]=g*d+j*e+m*b+a[12];c[13]=f*d+k*e+n*b+a[13];c[14]=h*d+l*e+p*b+a[14];c[15]=i*d+o*e+r*b+a[15];return c};
+-mat4.scale=function(a,b,c){var d=b[0],e=b[1];b=b[2];if(!c||a==c){a[0]*=d;a[1]*=d;a[2]*=d;a[3]*=d;a[4]*=e;a[5]*=e;a[6]*=e;a[7]*=e;a[8]*=b;a[9]*=b;a[10]*=b;a[11]*=b;return a}c[0]=a[0]*d;c[1]=a[1]*d;c[2]=a[2]*d;c[3]=a[3]*d;c[4]=a[4]*e;c[5]=a[5]*e;c[6]=a[6]*e;c[7]=a[7]*e;c[8]=a[8]*b;c[9]=a[9]*b;c[10]=a[10]*b;c[11]=a[11]*b;c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15];return c};
+-mat4.rotate=function(a,b,c,d){var e=c[0],g=c[1];c=c[2];var f=Math.sqrt(e*e+g*g+c*c);if(!f)return null;if(f!=1){f=1/f;e*=f;g*=f;c*=f}var h=Math.sin(b),i=Math.cos(b),j=1-i;b=a[0];f=a[1];var k=a[2],l=a[3],o=a[4],m=a[5],n=a[6],p=a[7],r=a[8],s=a[9],A=a[10],B=a[11],t=e*e*j+i,u=g*e*j+c*h,v=c*e*j-g*h,w=e*g*j-c*h,x=g*g*j+i,y=c*g*j+e*h,z=e*c*j+g*h;e=g*c*j-e*h;g=c*c*j+i;if(d){if(a!=d){d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15]}}else d=a;d[0]=b*t+o*u+r*v;d[1]=f*t+m*u+s*v;d[2]=k*t+n*u+A*v;d[3]=l*t+p*u+B*
+-v;d[4]=b*w+o*x+r*y;d[5]=f*w+m*x+s*y;d[6]=k*w+n*x+A*y;d[7]=l*w+p*x+B*y;d[8]=b*z+o*e+r*g;d[9]=f*z+m*e+s*g;d[10]=k*z+n*e+A*g;d[11]=l*z+p*e+B*g;return d};mat4.rotateX=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[4],g=a[5],f=a[6],h=a[7],i=a[8],j=a[9],k=a[10],l=a[11];if(c){if(a!=c){c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[4]=e*b+i*d;c[5]=g*b+j*d;c[6]=f*b+k*d;c[7]=h*b+l*d;c[8]=e*-d+i*b;c[9]=g*-d+j*b;c[10]=f*-d+k*b;c[11]=h*-d+l*b;return c};
+-mat4.rotateY=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[0],g=a[1],f=a[2],h=a[3],i=a[8],j=a[9],k=a[10],l=a[11];if(c){if(a!=c){c[4]=a[4];c[5]=a[5];c[6]=a[6];c[7]=a[7];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[0]=e*b+i*-d;c[1]=g*b+j*-d;c[2]=f*b+k*-d;c[3]=h*b+l*-d;c[8]=e*d+i*b;c[9]=g*d+j*b;c[10]=f*d+k*b;c[11]=h*d+l*b;return c};
+-mat4.rotateZ=function(a,b,c){var d=Math.sin(b);b=Math.cos(b);var e=a[0],g=a[1],f=a[2],h=a[3],i=a[4],j=a[5],k=a[6],l=a[7];if(c){if(a!=c){c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15]}}else c=a;c[0]=e*b+i*d;c[1]=g*b+j*d;c[2]=f*b+k*d;c[3]=h*b+l*d;c[4]=e*-d+i*b;c[5]=g*-d+j*b;c[6]=f*-d+k*b;c[7]=h*-d+l*b;return c};
+-mat4.frustum=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=e*2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=e*2/i;f[6]=0;f[7]=0;f[8]=(b+a)/h;f[9]=(d+c)/i;f[10]=-(g+e)/j;f[11]=-1;f[12]=0;f[13]=0;f[14]=-(g*e*2)/j;f[15]=0;return f};mat4.perspective=function(a,b,c,d,e){a=c*Math.tan(a*Math.PI/360);b=a*b;return mat4.frustum(-b,b,-a,a,c,d,e)};
+-mat4.ortho=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=2/i;f[6]=0;f[7]=0;f[8]=0;f[9]=0;f[10]=-2/j;f[11]=0;f[12]=-(a+b)/h;f[13]=-(d+c)/i;f[14]=-(g+e)/j;f[15]=1;return f};
+-mat4.lookAt=function(a,b,c,d){d||(d=mat4.create());var e=a[0],g=a[1];a=a[2];var f=c[0],h=c[1],i=c[2];c=b[1];var j=b[2];if(e==b[0]&&g==c&&a==j)return mat4.identity(d);var k,l,o,m;c=e-b[0];j=g-b[1];b=a-b[2];m=1/Math.sqrt(c*c+j*j+b*b);c*=m;j*=m;b*=m;k=h*b-i*j;i=i*c-f*b;f=f*j-h*c;if(m=Math.sqrt(k*k+i*i+f*f)){m=1/m;k*=m;i*=m;f*=m}else f=i=k=0;h=j*f-b*i;l=b*k-c*f;o=c*i-j*k;if(m=Math.sqrt(h*h+l*l+o*o)){m=1/m;h*=m;l*=m;o*=m}else o=l=h=0;d[0]=k;d[1]=h;d[2]=c;d[3]=0;d[4]=i;d[5]=l;d[6]=j;d[7]=0;d[8]=f;d[9]=
+-o;d[10]=b;d[11]=0;d[12]=-(k*e+i*g+f*a);d[13]=-(h*e+l*g+o*a);d[14]=-(c*e+j*g+b*a);d[15]=1;return d};mat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"};quat4={};quat4.create=function(a){var b=new glMatrixArrayType(4);if(a){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3]}return b};quat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b};
+-quat4.calculateW=function(a,b){var c=a[0],d=a[1],e=a[2];if(!b||a==b){a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return a}b[0]=c;b[1]=d;b[2]=e;b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return b};quat4.inverse=function(a,b){if(!b||a==b){a[0]*=1;a[1]*=1;a[2]*=1;return a}b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=a[3];return b};quat4.length=function(a){var b=a[0],c=a[1],d=a[2];a=a[3];return Math.sqrt(b*b+c*c+d*d+a*a)};
+-quat4.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=Math.sqrt(c*c+d*d+e*e+g*g);if(f==0){b[0]=0;b[1]=0;b[2]=0;b[3]=0;return b}f=1/f;b[0]=c*f;b[1]=d*f;b[2]=e*f;b[3]=g*f;return b};quat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2];a=a[3];var f=b[0],h=b[1],i=b[2];b=b[3];c[0]=d*b+a*f+e*i-g*h;c[1]=e*b+a*h+g*f-d*i;c[2]=g*b+a*i+d*h-e*f;c[3]=a*b-d*f-e*h-g*i;return c};
+-quat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2];b=a[0];var f=a[1],h=a[2];a=a[3];var i=a*d+f*g-h*e,j=a*e+h*d-b*g,k=a*g+b*e-f*d;d=-b*d-f*e-h*g;c[0]=i*a+d*-b+j*-h-k*-f;c[1]=j*a+d*-f+k*-b-i*-h;c[2]=k*a+d*-h+i*-f-j*-b;return c};quat4.toMat3=function(a,b){b||(b=mat3.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c=c*i;var l=d*h;d=d*i;e=e*i;f=g*f;h=g*h;g=g*i;b[0]=1-(l+e);b[1]=k-g;b[2]=c+h;b[3]=k+g;b[4]=1-(j+e);b[5]=d-f;b[6]=c-h;b[7]=d+f;b[8]=1-(j+l);return b};
+-quat4.toMat4=function(a,b){b||(b=mat4.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c=c*i;var l=d*h;d=d*i;e=e*i;f=g*f;h=g*h;g=g*i;b[0]=1-(l+e);b[1]=k-g;b[2]=c+h;b[3]=0;b[4]=k+g;b[5]=1-(j+e);b[6]=d-f;b[7]=0;b[8]=c-h;b[9]=d+f;b[10]=1-(j+l);b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};quat4.slerp=function(a,b,c,d){d||(d=a);var e=c;if(a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]<0)e=-1*c;d[0]=1-c*a[0]+e*b[0];d[1]=1-c*a[1]+e*b[1];d[2]=1-c*a[2]+e*b[2];d[3]=1-c*a[3]+e*b[3];return d};
+-quat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"};
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/src/coordinate.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/src/coordinate.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/src/coordinate.js	(revision 15488)
+@@ -1,253 +0,0 @@
+-var coordinate = [ 
+-0.1722815,-0.6249968,0.0,0.028602958,-0.59071255,0.0,0.07361174,-0.66233075,0.0     ,
+--0.97861487,0.47404182,0.0,-1.0188555,0.49031258,0.0,-0.99149925,0.46910655,0.0     ,
+--0.16846454,-0.65885043,0.0,0.07361174,-0.66233075,0.0,0.028602958,-0.59071255,0.0  ,
+--0.49141604,0.28358424,0.0,-0.7172656,0.3111843,0.0,-0.71527505,0.25273192,0.0      ,
+-0.7866467,0.1019814,0.0,0.61278033,0.15770888,0.0,0.68886554,0.066627026,0.0        ,
+-0.1722815,-0.6249968,0.0,0.2330749,-0.5733323,0.0,0.15787399,-0.5458735,0.0         ,
+-0.15787399,-0.5458735,0.0,0.028602958,-0.59071255,0.0,0.1722815,-0.6249968,0.0      ,
+-0.6919304,-0.27098197,0.0,0.8031138,-0.36101806,0.0,0.88863707,-0.32047856,0.0      ,
+--0.82303256,0.39813554,0.0,-0.6723132,0.39743114,0.0,-0.7951531,0.43768227,0.0      ,
+--0.50945973,-0.6791605,0.0,-0.31120718,-0.74901634,0.0,-0.16846454,-0.65885043,0.0  ,
+--0.90793777,0.38406122,0.0,-0.79631823,0.35794616,0.0,-0.82303256,0.39813554,0.0    ,
+-0.029369593,-0.7232344,0.0,-0.10685843,-0.79375434,0.0,0.013136864,-0.7805554,0.0   ,
+-0.8245338,0.15600598,0.0,0.9128773,0.2109667,0.0,0.7759683,0.2296145,0.0            ,
+-0.48667216,0.65818167,0.0,0.31415915,0.7068391,0.0,0.14486158,0.6431035,0.0         ,
+--0.66352123,0.19767356,0.0,-0.49141604,0.28358424,0.0,-0.71527505,0.25273192,0.0    ,
+--0.52258784,-0.5863955,0.0,-0.69702816,-0.64494777,0.0,-0.50945973,-0.6791605,0.0   ,
+--0.2523167,-0.9805183,0.0,-0.14696288,-0.9495336,0.0,-0.1924783,-0.8969807,0.0      ,
+-0.61278033,0.15770888,0.0,0.7759683,0.2296145,0.0,0.6630316,0.26985943,0.0          ,
+--0.8231783,0.4837699,0.0,-0.63187575,0.48362064,0.0,-0.77416193,0.53749883,0.0      ,
+--0.18770391,-0.8363681,0.0,-0.49923497,-0.8415496,0.0,-0.37126845,-0.9161034,0.0    ,
+--0.14729428,0.5239761,0.0,-0.23570663,0.42825544,0.0,0.066693306,0.47821677,0.0     ,
+--0.37126845,-0.9161034,0.0,-0.2523167,-0.9805183,0.0,-0.1924783,-0.8969807,0.0      ,
+--0.46721613,-0.7685304,0.0,-0.49923497,-0.8415496,0.0,-0.31120718,-0.74901634,0.0   ,
+--0.39459217,-1.0,0.0,-0.29496747,-1.0340356,0.0,-0.2523167,-0.9805183,0.0           ,
+--0.39459217,-1.0,0.0,-0.2523167,-0.9805183,0.0,-0.37126845,-0.9161034,0.0           ,
+--0.22433949,-0.25822878,0.0,-0.4276088,-0.24063492,0.0,-0.40343392,-0.3059004,0.0   ,
+--0.51540923,0.009509206,0.0,-0.5501056,0.11640835,0.0,-0.6668889,0.08406842,0.0     ,
+--0.37126845,-0.9161034,0.0,-0.52700067,-0.994104,0.0,-0.39459217,-1.0,0.0           ,
+--0.6462797,-0.97818947,0.0,-0.52700067,-0.994104,0.0,-0.65169054,-0.9217171,0.0     ,
+--0.31965226,-0.17364204,0.0,-0.54482484,-0.20234817,0.0,-0.4276088,-0.24063492,0.0  ,
+-0.6387942,0.50387466,0.0,0.5045388,0.33103216,0.0,0.79156303,0.43412304,0.0         ,
+--0.65169054,-0.9217171,0.0,-0.52700067,-0.994104,0.0,-0.37126845,-0.9161034,0.0     ,
+--0.65169054,-0.9217171,0.0,-0.49923497,-0.8415496,0.0,-0.7201228,-0.87319046,0.0    ,
+--0.6133511,-0.8003795,0.0,-0.7541798,-0.8161504,0.0,-0.7201228,-0.87319046,0.0      ,
+--0.14749932,-0.07488638,0.0,-0.40625852,-0.11763275,0.0,-0.31965226,-0.17364204,0.0 ,
+--0.6133511,-0.8003795,0.0,-0.7201228,-0.87319046,0.0,-0.49923497,-0.8415496,0.0     ,
+--0.7541798,-0.8161504,0.0,-0.6133511,-0.8003795,0.0,-0.7295215,-0.7604479,0.0       ,
+--0.6133511,-0.8003795,0.0,-0.46721613,-0.7685304,0.0,-0.7049238,-0.7021444,0.0      ,
+-0.6630316,0.26985943,0.0,0.71094215,0.33645523,0.0,0.5045388,0.33103216,0.0         ,
+--0.7049238,-0.7021444,0.0,-0.7295215,-0.7604479,0.0,-0.6133511,-0.8003795,0.0       ,
+--0.7049238,-0.7021444,0.0,-0.50945973,-0.6791605,0.0,-0.69702816,-0.64494777,0.0    ,
+--0.7951531,0.43768227,0.0,-0.8748502,0.46837437,0.0,-0.8944029,0.42357707,0.0       ,
+-0.38599896,0.4090873,0.0,0.6387942,0.50387466,0.0,0.494058,0.5507779,0.0            ,
+--0.69702816,-0.64494777,0.0,-0.52258784,-0.5863955,0.0,-0.6903474,-0.5873822,0.0    ,
+--0.49141604,0.28358424,0.0,-0.6723132,0.39743114,0.0,-0.7172656,0.3111843,0.0       ,
+--0.6903474,-0.5873822,0.0,-0.6667415,-0.5468402,0.0,-0.79450804,-0.55195713,0.0     ,
+--0.6667415,-0.5468402,0.0,-0.52258784,-0.5863955,0.0,-0.62953156,-0.49027336,0.0    ,
+--0.4414333,-0.47731763,0.0,-0.62953156,-0.49027336,0.0,-0.52258784,-0.5863955,0.0   ,
+-0.7076447,-0.100810766,0.0,0.64160895,-0.04644382,0.0,0.46548855,-0.12757361,0.0    ,
+--0.6054545,-0.43295234,0.0,-0.4414333,-0.47731763,0.0,-0.39712143,-0.3920853,0.0    ,
+--0.8944029,0.42357707,0.0,-0.82303256,0.39813554,0.0,-0.7951531,0.43768227,0.0      ,
+-0.2330749,-0.5733323,0.0,0.2531271,-0.55117697,0.0,0.15787399,-0.5458735,0.0        ,
+-0.494058,0.5507779,0.0,0.6643573,0.5729065,0.0,0.59051406,0.6191362,0.0             ,
+--0.39712143,-0.3920853,0.0,-0.621089,-0.3767627,0.0,-0.6054545,-0.43295234,0.0      ,
+--0.07924831,-0.46268785,0.0,0.15787399,-0.5458735,0.0,0.22590232,-0.47071034,0.0    ,
+--0.09364933,0.69693434,0.0,-0.14648539,0.7489834,0.0,-0.17767781,0.6913909,0.0      ,
+--0.6723132,0.39743114,0.0,-0.79631823,0.35794616,0.0,-0.7172656,0.3111843,0.0       ,
+-0.6059511,-0.42446738,0.0,0.48391414,-0.41054082,0.0,0.52064955,-0.4659497,0.0      ,
+-0.64160895,-0.04644382,0.0,0.7197397,0.004403591,0.0,0.55547774,0.019833326,0.0     ,
+--0.56392217,-0.26155484,0.0,-0.40343392,-0.3059004,0.0,-0.4276088,-0.24063492,0.0   ,
+-0.36244297,-0.3196875,0.0,0.08679438,-0.3363713,0.0,0.34073508,-0.38852262,0.0      ,
+-0.7759683,0.2296145,0.0,0.9128773,0.2109667,0.0,0.8920522,0.26791072,0.0            ,
+--0.67580104,0.14063537,0.0,-0.6668889,0.08406842,0.0,-0.5501056,0.11640835,0.0      ,
+--0.62953156,-0.49027336,0.0,-0.4414333,-0.47731763,0.0,-0.6054545,-0.43295234,0.0   ,
+-0.55547774,0.019833326,0.0,0.7197397,0.004403591,0.0,0.68886554,0.066627026,0.0     ,
+--0.3819729,-0.0047768354,0.0,-0.5394139,-0.08657479,0.0,-0.40625852,-0.11763275,0.0 ,
+--0.5394139,-0.08657479,0.0,-0.54418826,-0.14389586,0.0,-0.40625852,-0.11763275,0.0  ,
+--0.8944029,0.42357707,0.0,-1.0,0.41589725,0.0,-0.9818319,0.39157045,0.0             ,
+--0.8748502,0.46837437,0.0,-0.9265223,0.4529786,0.0,-0.8944029,0.42357707,0.0        ,
+--0.3819729,-0.0047768354,0.0,-0.51540923,0.009509206,0.0,-0.5394139,-0.08657479,0.0 ,
+--1.0,0.41589725,0.0,-1.0341103,0.39688313,0.0,-0.9818319,0.39157045,0.0             ,
+--0.4502468,0.15912282,0.0,-0.66352123,0.19767356,0.0,-0.5501056,0.11640835,0.0      ,
+-0.64160895,-0.04644382,0.0,0.55547774,0.019833326,0.0,0.47039258,-0.048672557,0.0   ,
+--0.49141604,0.28358424,0.0,-0.66352123,0.19767356,0.0,-0.4502468,0.15912282,0.0     ,
+--0.9265223,0.4529786,0.0,-0.97861487,0.47404182,0.0,-0.99149925,0.46910655,0.0      ,
+--0.40625852,-0.11763275,0.0,-0.14749932,-0.07488638,0.0,-0.3819729,-0.0047768354,0.0,
+--0.6667415,-0.5468402,0.0,-0.6903474,-0.5873822,0.0,-0.52258784,-0.5863955,0.0      ,
+--0.99149925,0.46910655,0.0,-0.95512664,0.44091082,0.0,-0.9265223,0.4529786,0.0      ,
+--0.8748502,0.46837437,0.0,-0.7951531,0.43768227,0.0,-0.8231783,0.4837699,0.0        ,
+--0.4502468,0.15912282,0.0,-0.5501056,0.11640835,0.0,-0.38387418,0.0800246,0.0       ,
+--0.16846454,-0.65885043,0.0,-0.31120718,-0.74901634,0.0,-0.10685843,-0.79375434,0.0 ,
+--0.8944029,0.42357707,0.0,-0.95512664,0.44091082,0.0,-1.0,0.41589725,0.0            ,
+-0.68372,-0.3432938,0.0,0.574661,-0.30440927,0.0,0.56902957,-0.36790055,0.0          ,
+--0.90793777,0.38406122,0.0,-0.8944029,0.42357707,0.0,-0.9818319,0.39157045,0.0      ,
+--0.90793777,0.38406122,0.0,-0.82303256,0.39813554,0.0,-0.8944029,0.42357707,0.0     ,
+--0.38387418,0.0800246,0.0,-0.1826595,0.16134393,0.0,-0.4502468,0.15912282,0.0       ,
+--0.28274482,0.630533,0.0,-0.368652,0.5123328,0.0,-0.14729428,0.5239761,0.0          ,
+-0.5045388,0.33103216,0.0,0.71094215,0.33645523,0.0,0.79156303,0.43412304,0.0        ,
+--0.8231783,0.4837699,0.0,-0.7951531,0.43768227,0.0,-0.63187575,0.48362064,0.0       ,
+--0.95512664,0.44091082,0.0,-0.8944029,0.42357707,0.0,-0.9265223,0.4529786,0.0       ,
+--0.87085134,0.575071,0.0,-0.9939028,0.56997836,0.0,-0.9127836,0.52632856,0.0        ,
+-0.6919304,-0.27098197,0.0,0.5478718,-0.2240535,0.0,0.574661,-0.30440927,0.0         ,
+--0.16846454,-0.65885043,0.0,-0.07924831,-0.46268785,0.0,-0.4414333,-0.47731763,0.0  ,
+--0.8231783,0.4837699,0.0,-0.77416193,0.53749883,0.0,-0.9127836,0.52632856,0.0       ,
+-0.47039258,-0.048672557,0.0,0.16675663,-0.08414775,0.0,0.46548855,-0.12757361,0.0   ,
+--0.56392217,-0.26155484,0.0,-0.4276088,-0.24063492,0.0,-0.54482484,-0.20234817,0.0  ,
+-0.48391414,-0.41054082,0.0,0.36244297,-0.3196875,0.0,0.34073508,-0.38852262,0.0     ,
+--0.9127836,0.52632856,0.0,-0.77416193,0.53749883,0.0,-0.87085134,0.575071,0.0       ,
+--0.77416193,0.53749883,0.0,-0.754539,0.59507716,0.0,-0.87085134,0.575071,0.0        ,
+--0.62201965,0.55598676,0.0,-0.754539,0.59507716,0.0,-0.77416193,0.53749883,0.0      ,
+-0.15787399,-0.5458735,0.0,-0.07924831,-0.46268785,0.0,0.028602958,-0.59071255,0.0   ,
+-0.37535036,-0.5432576,0.0,0.37237883,-0.45653516,0.0,0.22590232,-0.47071034,0.0     ,
+-0.48391414,-0.41054082,0.0,0.56902957,-0.36790055,0.0,0.36244297,-0.3196875,0.0     ,
+--0.62201965,0.55598676,0.0,-0.64771193,0.63114166,0.0,-0.754539,0.59507716,0.0      ,
+--0.28274482,0.630533,0.0,-0.47297096,0.69339406,0.0,-0.51403034,0.6374332,0.0       ,
+--0.40286767,0.7442751,0.0,-0.47297096,0.69339406,0.0,-0.2956041,0.70807576,0.0      ,
+--0.09825462,-0.1743601,0.0,0.08679438,-0.3363713,0.0,0.3089533,-0.21166879,0.0      ,
+-0.574661,-0.30440927,0.0,0.5478718,-0.2240535,0.0,0.36244297,-0.3196875,0.0         ,
+-0.46548855,-0.12757361,0.0,0.71599984,-0.19942552,0.0,0.7076447,-0.100810766,0.0    ,
+--0.28274482,0.630533,0.0,-0.2956041,0.70807576,0.0,-0.47297096,0.69339406,0.0       ,
+--0.2956041,0.70807576,0.0,-0.28274482,0.630533,0.0,-0.17767781,0.6913909,0.0        ,
+-0.68372,-0.3432938,0.0,0.6919304,-0.27098197,0.0,0.574661,-0.30440927,0.0           ,
+-0.52064955,-0.4659497,0.0,0.48391414,-0.41054082,0.0,0.37237883,-0.45653516,0.0     ,
+-0.45038712,0.7146003,0.0,0.31415915,0.7068391,0.0,0.48667216,0.65818167,0.0         ,
+--0.51540923,0.009509206,0.0,-0.64906466,0.023353457,0.0,-0.6089602,-0.036607325,0.0 ,
+--0.11433816,0.62551737,0.0,-0.09364933,0.69693434,0.0,-0.17767781,0.6913909,0.0     ,
+-0.017433643,0.7249608,0.0,0.018481731,0.6633153,0.0,0.14486158,0.6431035,0.0        ,
+-0.10193956,0.7677351,0.0,0.017433643,0.7249608,0.0,0.21206772,0.7389668,0.0         ,
+-0.5478718,-0.2240535,0.0,0.3089533,-0.21166879,0.0,0.36244297,-0.3196875,0.0        ,
+--0.64906466,0.023353457,0.0,-0.51540923,0.009509206,0.0,-0.6668889,0.08406842,0.0   ,
+-0.5478718,-0.2240535,0.0,0.6919304,-0.27098197,0.0,0.71599984,-0.19942552,0.0       ,
+-0.21206772,0.7389668,0.0,0.017433643,0.7249608,0.0,0.14486158,0.6431035,0.0         ,
+--0.09364933,0.69693434,0.0,0.018481731,0.6633153,0.0,0.017433643,0.7249608,0.0      ,
+--0.15414602,0.038713098,0.0,-0.1826595,0.16134393,0.0,-0.38387418,0.0800246,0.0     ,
+-0.22590232,-0.47071034,0.0,0.37237883,-0.45653516,0.0,0.34073508,-0.38852262,0.0    ,
+-0.59051406,0.6191362,0.0,0.48667216,0.65818167,0.0,0.494058,0.5507779,0.0           ,
+--0.6089602,-0.036607325,0.0,-0.5394139,-0.08657479,0.0,-0.51540923,0.009509206,0.0  ,
+-0.31415915,0.7068391,0.0,0.21206772,0.7389668,0.0,0.14486158,0.6431035,0.0          ,
+-0.36244297,-0.3196875,0.0,0.56902957,-0.36790055,0.0,0.574661,-0.30440927,0.0       ,
+-0.6643573,0.5729065,0.0,0.494058,0.5507779,0.0,0.6387942,0.50387466,0.0             ,
+-0.77128017,0.60570896,0.0,0.6643573,0.5729065,0.0,0.7547418,0.5491421,0.0           ,
+-0.7759683,0.2296145,0.0,0.61278033,0.15770888,0.0,0.8245338,0.15600598,0.0          ,
+-0.71599984,-0.19942552,0.0,0.46548855,-0.12757361,0.0,0.5478718,-0.2240535,0.0      ,
+-0.37237883,-0.45653516,0.0,0.48391414,-0.41054082,0.0,0.34073508,-0.38852262,0.0    ,
+--0.54418826,-0.14389586,0.0,-0.54482484,-0.20234817,0.0,-0.31965226,-0.17364204,0.0 ,
+-0.6643573,0.5729065,0.0,0.6387942,0.50387466,0.0,0.7547418,0.5491421,0.0            ,
+-0.78937876,0.49446082,0.0,0.7547418,0.5491421,0.0,0.6387942,0.50387466,0.0          ,
+--0.62201965,0.55598676,0.0,-0.63187575,0.48362064,0.0,-0.368652,0.5123328,0.0       ,
+--0.368652,0.5123328,0.0,-0.51403034,0.6374332,0.0,-0.62201965,0.55598676,0.0        ,
+-0.6630316,0.26985943,0.0,0.86050856,0.32334626,0.0,0.71094215,0.33645523,0.0        ,
+-0.86050856,0.32334626,0.0,0.83110833,0.3795359,0.0,0.71094215,0.33645523,0.0        ,
+--0.16846454,-0.65885043,0.0,-0.10685843,-0.79375434,0.0,0.029369593,-0.7232344,0.0  ,
+--0.14729428,0.5239761,0.0,-0.11433816,0.62551737,0.0,-0.28274482,0.630533,0.0       ,
+-0.83110833,0.3795359,0.0,0.79156303,0.43412304,0.0,0.71094215,0.33645523,0.0        ,
+-0.6630316,0.26985943,0.0,0.7759683,0.2296145,0.0,0.86050856,0.32334626,0.0          ,
+--0.16846454,-0.65885043,0.0,0.028602958,-0.59071255,0.0,-0.07924831,-0.46268785,0.0 ,
+-0.5478718,-0.2240535,0.0,0.46548855,-0.12757361,0.0,0.3089533,-0.21166879,0.0       ,
+--0.31965226,-0.17364204,0.0,-0.40625852,-0.11763275,0.0,-0.54418826,-0.14389586,0.0 ,
+--0.51403034,0.6374332,0.0,-0.64771193,0.63114166,0.0,-0.62201965,0.55598676,0.0     ,
+-0.9542211,0.15628552,0.0,0.9128773,0.2109667,0.0,0.8245338,0.15600598,0.0           ,
+-0.7759683,0.2296145,0.0,0.8920522,0.26791072,0.0,0.86050856,0.32334626,0.0          ,
+--0.67580104,0.14063537,0.0,-0.5501056,0.11640835,0.0,-0.66352123,0.19767356,0.0     ,
+--0.31120718,-0.74901634,0.0,-0.49923497,-0.8415496,0.0,-0.18770391,-0.8363681,0.0   ,
+-0.7866467,0.1019814,0.0,0.8245338,0.15600598,0.0,0.61278033,0.15770888,0.0          ,
+-0.77607703,-0.05291754,0.0,0.7197397,0.004403591,0.0,0.64160895,-0.04644382,0.0     ,
+--0.62201965,0.55598676,0.0,-0.77416193,0.53749883,0.0,-0.63187575,0.48362064,0.0    ,
+--0.368652,0.5123328,0.0,-0.28274482,0.630533,0.0,-0.51403034,0.6374332,0.0          ,
+-0.018481731,0.6633153,0.0,0.0308038,0.5856633,0.0,0.14486158,0.6431035,0.0          ,
+--0.40343392,-0.3059004,0.0,-0.5884305,-0.31887585,0.0,-0.39712143,-0.3920853,0.0    ,
+-0.8422811,-0.0038929582,0.0,0.7197397,0.004403591,0.0,0.77607703,-0.05291754,0.0    ,
+-0.55547774,0.019833326,0.0,0.68886554,0.066627026,0.0,0.61278033,0.15770888,0.0     ,
+--0.5884305,-0.31887585,0.0,-0.40343392,-0.3059004,0.0,-0.56392217,-0.26155484,0.0   ,
+-0.78411376,-0.14776129,0.0,0.7076447,-0.100810766,0.0,0.71599984,-0.19942552,0.0    ,
+--0.63187575,0.48362064,0.0,-0.7951531,0.43768227,0.0,-0.6723132,0.39743114,0.0      ,
+-0.029369593,-0.7232344,0.0,0.07361174,-0.66233075,0.0,-0.16846454,-0.65885043,0.0   ,
+-0.7076447,-0.100810766,0.0,0.77607703,-0.05291754,0.0,0.64160895,-0.04644382,0.0    ,
+-0.6919304,-0.27098197,0.0,0.88863707,-0.32047856,0.0,0.82199025,-0.2303487,0.0      ,
+-0.93943906,-0.20809925,0.0,1.0524786,-0.2390225,0.0,1.0524786,-0.18207848,0.0       ,
+--0.09364933,0.69693434,0.0,-0.11433816,0.62551737,0.0,0.018481731,0.6633153,0.0     ,
+-0.6059511,-0.42446738,0.0,0.56902957,-0.36790055,0.0,0.48391414,-0.41054082,0.0     ,
+-1.0,-0.29068673,0.0,0.93943906,-0.20809925,0.0,0.82199025,-0.2303487,0.0            ,
+--0.18770391,-0.8363681,0.0,-0.37126845,-0.9161034,0.0,-0.1924783,-0.8969807,0.0     ,
+--0.46721613,-0.7685304,0.0,-0.6133511,-0.8003795,0.0,-0.49923497,-0.8415496,0.0     ,
+-0.22590232,-0.47071034,0.0,0.08679438,-0.3363713,0.0,-0.07924831,-0.46268785,0.0    ,
+--0.37126845,-0.9161034,0.0,-0.49923497,-0.8415496,0.0,-0.65169054,-0.9217171,0.0    ,
+-1.0,-0.29068673,0.0,1.0524786,-0.2390225,0.0,0.93943906,-0.20809925,0.0             ,
+--0.16846454,-0.65885043,0.0,-0.4414333,-0.47731763,0.0,-0.52258784,-0.5863955,0.0   ,
+-1.0,-0.29068673,0.0,0.82199025,-0.2303487,0.0,0.88863707,-0.32047856,0.0            ,
+-0.71599984,-0.19942552,0.0,0.6919304,-0.27098197,0.0,0.82199025,-0.2303487,0.0      ,
+--0.46097404,0.42148364,0.0,-0.368652,0.5123328,0.0,-0.63187575,0.48362064,0.0       ,
+-0.6387942,0.50387466,0.0,0.38599896,0.4090873,0.0,0.5045388,0.33103216,0.0          ,
+--0.22433949,-0.25822878,0.0,-0.31965226,-0.17364204,0.0,-0.4276088,-0.24063492,0.0  ,
+--0.6723132,0.39743114,0.0,-0.82303256,0.39813554,0.0,-0.79631823,0.35794616,0.0     ,
+-0.6919304,-0.27098197,0.0,0.68372,-0.3432938,0.0,0.8031138,-0.36101806,0.0          ,
+-0.2531271,-0.55117697,0.0,0.37535036,-0.5432576,0.0,0.22590232,-0.47071034,0.0      ,
+--0.28274482,0.630533,0.0,-0.11433816,0.62551737,0.0,-0.17767781,0.6913909,0.0       ,
+--0.10685843,-0.79375434,0.0,-0.31120718,-0.74901634,0.0,-0.18770391,-0.8363681,0.0  ,
+-0.14486158,0.6431035,0.0,0.0308038,0.5856633,0.0,0.25395918,0.54432976,0.0          ,
+-0.52064955,-0.4659497,0.0,0.37237883,-0.45653516,0.0,0.49932408,-0.5274189,0.0      ,
+-0.14486158,0.6431035,0.0,0.25395918,0.54432976,0.0,0.48667216,0.65818167,0.0        ,
+-0.0308038,0.5856633,0.0,0.018481731,0.6633153,0.0,-0.11433816,0.62551737,0.0        ,
+-0.37237883,-0.45653516,0.0,0.37535036,-0.5432576,0.0,0.49932408,-0.5274189,0.0      ,
+-0.6387942,0.50387466,0.0,0.79156303,0.43412304,0.0,0.78937876,0.49446082,0.0        ,
+-0.2531271,-0.55117697,0.0,0.22590232,-0.47071034,0.0,0.15787399,-0.5458735,0.0      ,
+--0.621089,-0.3767627,0.0,-0.39712143,-0.3920853,0.0,-0.5884305,-0.31887585,0.0      ,
+--0.50945973,-0.6791605,0.0,-0.16846454,-0.65885043,0.0,-0.52258784,-0.5863955,0.0   ,
+--0.31120718,-0.74901634,0.0,-0.50945973,-0.6791605,0.0,-0.46721613,-0.7685304,0.0   ,
+--0.7049238,-0.7021444,0.0,-0.46721613,-0.7685304,0.0,-0.50945973,-0.6791605,0.0     ,
+--0.39712143,-0.3920853,0.0,-0.23325467,-0.34639496,0.0,-0.40343392,-0.3059004,0.0   ,
+-0.08679438,-0.3363713,0.0,0.36244297,-0.3196875,0.0,0.3089533,-0.21166879,0.0       ,
+--0.15414602,0.038713098,0.0,-0.3819729,-0.0047768354,0.0,-0.14749932,-0.07488638,0.0,
+--0.3819729,-0.0047768354,0.0,-0.15414602,0.038713098,0.0,-0.38387418,0.0800246,0.0  ,
+--0.3819729,-0.0047768354,0.0,-0.38387418,0.0800246,0.0,-0.51540923,0.009509206,0.0  ,
+--0.5501056,0.11640835,0.0,-0.51540923,0.009509206,0.0,-0.38387418,0.0800246,0.0     ,  
+--0.09825462,-0.1743601,0.0,-0.31965226,-0.17364204,0.0,-0.22433949,-0.25822878,0.0  ,
+-0.47039258,-0.048672557,0.0,0.46548855,-0.12757361,0.0,0.64160895,-0.04644382,0.0   ,
+--0.22433949,-0.25822878,0.0,-0.40343392,-0.3059004,0.0,-0.23325467,-0.34639496,0.0  ,
+-0.22590232,-0.47071034,0.0,0.34073508,-0.38852262,0.0,0.08679438,-0.3363713,0.0     ,
+--0.46097404,0.42148364,0.0,-0.63187575,0.48362064,0.0,-0.6723132,0.39743114,0.0     ,
+--0.1826595,0.16134393,0.0,0.11466038,0.17841125,0.0,-0.06773716,0.29468977,0.0      ,
+-0.25395918,0.54432976,0.0,0.494058,0.5507779,0.0,0.48667216,0.65818167,0.0          ,
+-0.0308038,0.5856633,0.0,-0.11433816,0.62551737,0.0,-0.14729428,0.5239761,0.0        ,
+-0.066693306,0.47821677,0.0,0.0308038,0.5856633,0.0,-0.14729428,0.5239761,0.0        ,
+-0.38599896,0.4090873,0.0,0.494058,0.5507779,0.0,0.25395918,0.54432976,0.0           ,
+-0.24940693,0.05508876,0.0,0.47039258,-0.048672557,0.0,0.55547774,0.019833326,0.0    ,
+-0.47039258,-0.048672557,0.0,0.24940693,0.05508876,0.0,0.16675663,-0.08414775,0.0    ,
+--0.23325467,-0.34639496,0.0,0.08679438,-0.3363713,0.0,-0.22433949,-0.25822878,0.0   ,
+--0.4414333,-0.47731763,0.0,-0.07924831,-0.46268785,0.0,-0.39712143,-0.3920853,0.0   ,
+--0.368652,0.5123328,0.0,-0.46097404,0.42148364,0.0,-0.23570663,0.42825544,0.0       ,
+-0.0308038,0.5856633,0.0,0.066693306,0.47821677,0.0,0.25395918,0.54432976,0.0        ,
+--0.4502468,0.15912282,0.0,-0.1826595,0.16134393,0.0,-0.49141604,0.28358424,0.0      ,
+-0.6630316,0.26985943,0.0,0.5045388,0.33103216,0.0,0.45748365,0.23095214,0.0         ,
+-0.61278033,0.15770888,0.0,0.3969196,0.13209689,0.0,0.55547774,0.019833326,0.0       ,
+-0.45748365,0.23095214,0.0,0.61278033,0.15770888,0.0,0.6630316,0.26985943,0.0        ,
+--0.15414602,0.038713098,0.0,0.16675663,-0.08414775,0.0,0.24940693,0.05508876,0.0    ,
+--0.14749932,-0.07488638,0.0,-0.31965226,-0.17364204,0.0,-0.09825462,-0.1743601,0.0  ,
+--0.39712143,-0.3920853,0.0,-0.07924831,-0.46268785,0.0,-0.23325467,-0.34639496,0.0  ,
+-0.08679438,-0.3363713,0.0,-0.23325467,-0.34639496,0.0,-0.07924831,-0.46268785,0.0   ,
+-0.08679438,-0.3363713,0.0,-0.09825462,-0.1743601,0.0,-0.22433949,-0.25822878,0.0    ,
+-0.16675663,-0.08414775,0.0,-0.14749932,-0.07488638,0.0,-0.09825462,-0.1743601,0.0   ,
+-0.16675663,-0.08414775,0.0,-0.15414602,0.038713098,0.0,-0.14749932,-0.07488638,0.0  ,
+--0.15414602,0.038713098,0.0,0.11466038,0.17841125,0.0,-0.1826595,0.16134393,0.0     ,
+--0.6723132,0.39743114,0.0,-0.49141604,0.28358424,0.0,-0.46097404,0.42148364,0.0     ,
+-0.066693306,0.47821677,0.0,-0.23570663,0.42825544,0.0,-0.06773716,0.29468977,0.0    ,
+-0.2428385,0.30477345,0.0,0.5045388,0.33103216,0.0,0.38599896,0.4090873,0.0          ,
+-0.55547774,0.019833326,0.0,0.3969196,0.13209689,0.0,0.24940693,0.05508876,0.0       ,
+-0.11466038,0.17841125,0.0,-0.15414602,0.038713098,0.0,0.24940693,0.05508876,0.0     ,
+-0.45748365,0.23095214,0.0,0.5045388,0.33103216,0.0,0.2428385,0.30477345,0.0         ,
+-0.2428385,0.30477345,0.0,0.38599896,0.4090873,0.0,0.066693306,0.47821677,0.0        ,
+-0.11466038,0.17841125,0.0,0.24940693,0.05508876,0.0,0.3969196,0.13209689,0.0        ,
+-0.46548855,-0.12757361,0.0,0.16675663,-0.08414775,0.0,0.3089533,-0.21166879,0.0     ,
+-0.3089533,-0.21166879,0.0,0.16675663,-0.08414775,0.0,-0.09825462,-0.1743601,0.0     ,
+--0.368652,0.5123328,0.0,-0.23570663,0.42825544,0.0,-0.14729428,0.5239761,0.0        ,
+-0.38599896,0.4090873,0.0,0.25395918,0.54432976,0.0,0.066693306,0.47821677,0.0       ,
+--0.46097404,0.42148364,0.0,-0.49141604,0.28358424,0.0,-0.23570663,0.42825544,0.0    ,
+--0.06773716,0.29468977,0.0,-0.49141604,0.28358424,0.0,-0.1826595,0.16134393,0.0     ,
+-0.61278033,0.15770888,0.0,0.45748365,0.23095214,0.0,0.3969196,0.13209689,0.0        ,
+-0.11466038,0.17841125,0.0,0.45748365,0.23095214,0.0,0.2428385,0.30477345,0.0        ,
+-0.45748365,0.23095214,0.0,0.11466038,0.17841125,0.0,0.3969196,0.13209689,0.0        ,
+--0.06773716,0.29468977,0.0,0.11466038,0.17841125,0.0,0.2428385,0.30477345,0.0       ,
+-0.066693306,0.47821677,0.0,-0.06773716,0.29468977,0.0,0.2428385,0.30477345,0.0      ,
+--0.49141604,0.28358424,0.0,-0.06773716,0.29468977,0.0,-0.23570663,0.42825544,0.0    ];
+Index: ../trunk-jpl/src/mobile/web/src/greenland.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.slider.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.slider.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.slider.css	(revision 15488)
+@@ -1,73 +0,0 @@
+-/*!
+- * jQuery UI Slider 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Slider#theming
+- */
+-.ui-slider {
+-	position: relative;
+-	text-align: left;
+-}
+-.ui-slider .ui-slider-handle {
+-	position: absolute;
+-	z-index: 2;
+-	width: 1.2em;
+-	height: 1.2em;
+-	cursor: default;
+-}
+-.ui-slider .ui-slider-range {
+-	position: absolute;
+-	z-index: 1;
+-	font-size: .7em;
+-	display: block;
+-	border: 0;
+-	background-position: 0 0;
+-}
+-
+-/* For IE8 - See #6727 */
+-.ui-slider.ui-state-disabled .ui-slider-handle,
+-.ui-slider.ui-state-disabled .ui-slider-range {
+-	filter: inherit;
+-}
+-
+-.ui-slider-horizontal {
+-	height: .8em;
+-}
+-.ui-slider-horizontal .ui-slider-handle {
+-	top: -.3em;
+-	margin-left: -.6em;
+-}
+-.ui-slider-horizontal .ui-slider-range {
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-slider-horizontal .ui-slider-range-min {
+-	left: 0;
+-}
+-.ui-slider-horizontal .ui-slider-range-max {
+-	right: 0;
+-}
+-
+-.ui-slider-vertical {
+-	width: .8em;
+-	height: 100px;
+-}
+-.ui-slider-vertical .ui-slider-handle {
+-	left: -.3em;
+-	margin-left: 0;
+-	margin-bottom: -.6em;
+-}
+-.ui-slider-vertical .ui-slider-range {
+-	left: 0;
+-	width: 100%;
+-}
+-.ui-slider-vertical .ui-slider-range-min {
+-	bottom: 0;
+-}
+-.ui-slider-vertical .ui-slider-range-max {
+-	top: 0;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/animate.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/animate.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/animate.css	(revision 15488)
+@@ -1,3202 +0,0 @@
+-.animated{-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;}.animated.hinge{-webkit-animation-duration:2s;-moz-animation-duration:2s;-ms-animation-duration:2s;-o-animation-duration:2s;animation-duration:2s;}@-webkit-keyframes flash {
+-	0%, 50%, 100% {opacity: 1;}	25%, 75% {opacity: 0;}
+-}
+-
+-@-moz-keyframes flash {
+-	0%, 50%, 100% {opacity: 1;}	
+-	25%, 75% {opacity: 0;}
+-}
+-
+-@-o-keyframes flash {
+-	0%, 50%, 100% {opacity: 1;}	
+-	25%, 75% {opacity: 0;}
+-}
+-
+-@keyframes flash {
+-	0%, 50%, 100% {opacity: 1;}	
+-	25%, 75% {opacity: 0;}
+-}
+-
+-.flash {
+-	-webkit-animation-name: flash;
+-	-moz-animation-name: flash;
+-	-o-animation-name: flash;
+-	animation-name: flash;
+-}
+-@-webkit-keyframes shake {
+-	0%, 100% {-webkit-transform: translateX(0);}
+-	10%, 30%, 50%, 70%, 90% {-webkit-transform: translateX(-10px);}
+-	20%, 40%, 60%, 80% {-webkit-transform: translateX(10px);}
+-}
+-
+-@-moz-keyframes shake {
+-	0%, 100% {-moz-transform: translateX(0);}
+-	10%, 30%, 50%, 70%, 90% {-moz-transform: translateX(-10px);}
+-	20%, 40%, 60%, 80% {-moz-transform: translateX(10px);}
+-}
+-
+-@-o-keyframes shake {
+-	0%, 100% {-o-transform: translateX(0);}
+-	10%, 30%, 50%, 70%, 90% {-o-transform: translateX(-10px);}
+-	20%, 40%, 60%, 80% {-o-transform: translateX(10px);}
+-}
+-
+-@keyframes shake {
+-	0%, 100% {transform: translateX(0);}
+-	10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);}
+-	20%, 40%, 60%, 80% {transform: translateX(10px);}
+-}
+-
+-.shake {
+-	-webkit-animation-name: shake;
+-	-moz-animation-name: shake;
+-	-o-animation-name: shake;
+-	animation-name: shake;
+-}
+-@-webkit-keyframes bounce {
+-	0%, 20%, 50%, 80%, 100% {-webkit-transform: translateY(0);}
+-	40% {-webkit-transform: translateY(-30px);}
+-	60% {-webkit-transform: translateY(-15px);}
+-}
+-
+-@-moz-keyframes bounce {
+-	0%, 20%, 50%, 80%, 100% {-moz-transform: translateY(0);}
+-	40% {-moz-transform: translateY(-30px);}
+-	60% {-moz-transform: translateY(-15px);}
+-}
+-
+-@-o-keyframes bounce {
+-	0%, 20%, 50%, 80%, 100% {-o-transform: translateY(0);}
+-	40% {-o-transform: translateY(-30px);}
+-	60% {-o-transform: translateY(-15px);}
+-}
+-@keyframes bounce {
+-	0%, 20%, 50%, 80%, 100% {transform: translateY(0);}
+-	40% {transform: translateY(-30px);}
+-	60% {transform: translateY(-15px);}
+-}
+-
+-.bounce {
+-	-webkit-animation-name: bounce;
+-	-moz-animation-name: bounce;
+-	-o-animation-name: bounce;
+-	animation-name: bounce;
+-}
+-@-webkit-keyframes tada {
+-	0% {-webkit-transform: scale(1);}	
+-	10%, 20% {-webkit-transform: scale(0.9) rotate(-3deg);}
+-	30%, 50%, 70%, 90% {-webkit-transform: scale(1.1) rotate(3deg);}
+-	40%, 60%, 80% {-webkit-transform: scale(1.1) rotate(-3deg);}
+-	100% {-webkit-transform: scale(1) rotate(0);}
+-}
+-
+-@-moz-keyframes tada {
+-	0% {-moz-transform: scale(1);}	
+-	10%, 20% {-moz-transform: scale(0.9) rotate(-3deg);}
+-	30%, 50%, 70%, 90% {-moz-transform: scale(1.1) rotate(3deg);}
+-	40%, 60%, 80% {-moz-transform: scale(1.1) rotate(-3deg);}
+-	100% {-moz-transform: scale(1) rotate(0);}
+-}
+-
+-@-o-keyframes tada {
+-	0% {-o-transform: scale(1);}	
+-	10%, 20% {-o-transform: scale(0.9) rotate(-3deg);}
+-	30%, 50%, 70%, 90% {-o-transform: scale(1.1) rotate(3deg);}
+-	40%, 60%, 80% {-o-transform: scale(1.1) rotate(-3deg);}
+-	100% {-o-transform: scale(1) rotate(0);}
+-}
+-
+-@keyframes tada {
+-	0% {transform: scale(1);}	
+-	10%, 20% {transform: scale(0.9) rotate(-3deg);}
+-	30%, 50%, 70%, 90% {transform: scale(1.1) rotate(3deg);}
+-	40%, 60%, 80% {transform: scale(1.1) rotate(-3deg);}
+-	100% {transform: scale(1) rotate(0);}
+-}
+-
+-.tada {
+-	-webkit-animation-name: tada;
+-	-moz-animation-name: tada;
+-	-o-animation-name: tada;
+-	animation-name: tada;
+-}
+-@-webkit-keyframes swing {
+-	20%, 40%, 60%, 80%, 100% { -webkit-transform-origin: top center; }
+-	20% { -webkit-transform: rotate(15deg); }	
+-	40% { -webkit-transform: rotate(-10deg); }
+-	60% { -webkit-transform: rotate(5deg); }	
+-	80% { -webkit-transform: rotate(-5deg); }	
+-	100% { -webkit-transform: rotate(0deg); }
+-}
+-
+-@-moz-keyframes swing {
+-	20% { -moz-transform: rotate(15deg); }	
+-	40% { -moz-transform: rotate(-10deg); }
+-	60% { -moz-transform: rotate(5deg); }	
+-	80% { -moz-transform: rotate(-5deg); }	
+-	100% { -moz-transform: rotate(0deg); }
+-}
+-
+-@-o-keyframes swing {
+-	20% { -o-transform: rotate(15deg); }	
+-	40% { -o-transform: rotate(-10deg); }
+-	60% { -o-transform: rotate(5deg); }	
+-	80% { -o-transform: rotate(-5deg); }	
+-	100% { -o-transform: rotate(0deg); }
+-}
+-
+-@keyframes swing {
+-	20% { transform: rotate(15deg); }	
+-	40% { transform: rotate(-10deg); }
+-	60% { transform: rotate(5deg); }	
+-	80% { transform: rotate(-5deg); }	
+-	100% { transform: rotate(0deg); }
+-}
+-
+-.swing {
+-	-webkit-transform-origin: top center;
+-	-moz-transform-origin: top center;
+-	-o-transform-origin: top center;
+-	transform-origin: top center;
+-	-webkit-animation-name: swing;
+-	-moz-animation-name: swing;
+-	-o-animation-name: swing;
+-	animation-name: swing;
+-}
+-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+-
+-@-webkit-keyframes wobble {
+-  0% { -webkit-transform: translateX(0%); }
+-  15% { -webkit-transform: translateX(-25%) rotate(-5deg); }
+-  30% { -webkit-transform: translateX(20%) rotate(3deg); }
+-  45% { -webkit-transform: translateX(-15%) rotate(-3deg); }
+-  60% { -webkit-transform: translateX(10%) rotate(2deg); }
+-  75% { -webkit-transform: translateX(-5%) rotate(-1deg); }
+-  100% { -webkit-transform: translateX(0%); }
+-}
+-
+-@-moz-keyframes wobble {
+-  0% { -moz-transform: translateX(0%); }
+-  15% { -moz-transform: translateX(-25%) rotate(-5deg); }
+-  30% { -moz-transform: translateX(20%) rotate(3deg); }
+-  45% { -moz-transform: translateX(-15%) rotate(-3deg); }
+-  60% { -moz-transform: translateX(10%) rotate(2deg); }
+-  75% { -moz-transform: translateX(-5%) rotate(-1deg); }
+-  100% { -moz-transform: translateX(0%); }
+-}
+-
+-@-o-keyframes wobble {
+-  0% { -o-transform: translateX(0%); }
+-  15% { -o-transform: translateX(-25%) rotate(-5deg); }
+-  30% { -o-transform: translateX(20%) rotate(3deg); }
+-  45% { -o-transform: translateX(-15%) rotate(-3deg); }
+-  60% { -o-transform: translateX(10%) rotate(2deg); }
+-  75% { -o-transform: translateX(-5%) rotate(-1deg); }
+-  100% { -o-transform: translateX(0%); }
+-}
+-
+-@keyframes wobble {
+-  0% { transform: translateX(0%); }
+-  15% { transform: translateX(-25%) rotate(-5deg); }
+-  30% { transform: translateX(20%) rotate(3deg); }
+-  45% { transform: translateX(-15%) rotate(-3deg); }
+-  60% { transform: translateX(10%) rotate(2deg); }
+-  75% { transform: translateX(-5%) rotate(-1deg); }
+-  100% { transform: translateX(0%); }
+-}
+-
+-.wobble {
+-	-webkit-animation-name: wobble;
+-	-moz-animation-name: wobble;
+-	-o-animation-name: wobble;
+-	animation-name: wobble;
+-}
+-@-webkit-keyframes wiggle {
+-    0% { -webkit-transform: skewX(9deg); }
+-    10% { -webkit-transform: skewX(-8deg); }
+-    20% { -webkit-transform: skewX(7deg); }
+-    30% { -webkit-transform: skewX(-6deg); }
+-    40% { -webkit-transform: skewX(5deg); }
+-    50% { -webkit-transform: skewX(-4deg); }
+-    60% { -webkit-transform: skewX(3deg); }
+-    70% { -webkit-transform: skewX(-2deg); }
+-    80% { -webkit-transform: skewX(1deg); }
+-    90% { -webkit-transform: skewX(0deg); }
+-	100% { -webkit-transform: skewX(0deg); }
+-}
+-
+-@-moz-keyframes wiggle {
+-    0% { -moz-transform: skewX(9deg); }
+-    10% { -moz-transform: skewX(-8deg); }
+-    20% { -moz-transform: skewX(7deg); }
+-    30% { -moz-transform: skewX(-6deg); }
+-    40% { -moz-transform: skewX(5deg); }
+-    50% { -moz-transform: skewX(-4deg); }
+-    60% { -moz-transform: skewX(3deg); }
+-    70% { -moz-transform: skewX(-2deg); }
+-    80% { -moz-transform: skewX(1deg); }
+-    90% { -moz-transform: skewX(0deg); }
+-	100% { -moz-transform: skewX(0deg); }
+-}
+-
+-@-o-keyframes wiggle {
+-    0% { -o-transform: skewX(9deg); }
+-    10% { -o-transform: skewX(-8deg); }
+-    20% { -o-transform: skewX(7deg); }
+-    30% { -o-transform: skewX(-6deg); }
+-    40% { -o-transform: skewX(5deg); }
+-    50% { -o-transform: skewX(-4deg); }
+-    60% { -o-transform: skewX(3deg); }
+-    70% { -o-transform: skewX(-2deg); }
+-    80% { -o-transform: skewX(1deg); }
+-    90% { -o-transform: skewX(0deg); }
+-	100% { -o-transform: skewX(0deg); }
+-}
+-
+-@keyframes wiggle {
+-    0% { transform: skewX(9deg); }
+-    10% { transform: skewX(-8deg); }
+-    20% { transform: skewX(7deg); }
+-    30% { transform: skewX(-6deg); }
+-    40% { transform: skewX(5deg); }
+-    50% { transform: skewX(-4deg); }
+-    60% { transform: skewX(3deg); }
+-    70% { transform: skewX(-2deg); }
+-    80% { transform: skewX(1deg); }
+-    90% { transform: skewX(0deg); }
+-	100% { transform: skewX(0deg); }
+-}
+-
+-.wiggle {
+-    -webkit-animation-name: wiggle;
+-    -moz-animation-name: wiggle;
+-    -o-animation-name: wiggle;
+-    animation-name: wiggle;
+-
+-    -webkit-animation-timing-function: ease-in;
+-    -moz-animation-timing-function: ease-in;
+-    -o-animation-timing-function: ease-in;
+-    animation-timing-function: ease-in;
+-}
+-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+-
+-@-webkit-keyframes pulse {
+-    0% { -webkit-transform: scale(1); }	
+-	50% { -webkit-transform: scale(1.1); }
+-    100% { -webkit-transform: scale(1); }
+-}
+-@-moz-keyframes pulse {
+-    0% { -moz-transform: scale(1); }	
+-	50% { -moz-transform: scale(1.1); }
+-    100% { -moz-transform: scale(1); }
+-}
+-@-o-keyframes pulse {
+-    0% { -o-transform: scale(1); }	
+-	50% { -o-transform: scale(1.1); }
+-    100% { -o-transform: scale(1); }
+-}
+-@keyframes pulse {
+-    0% { transform: scale(1); }	
+-	50% { transform: scale(1.1); }
+-    100% { transform: scale(1); }
+-}
+-
+-.pulse {
+-	-webkit-animation-name: pulse;
+-	-moz-animation-name: pulse;
+-	-o-animation-name: pulse;
+-	animation-name: pulse;
+-}
+-@-webkit-keyframes flip {
+-	0% {
+-		-webkit-transform: perspective(400px) rotateY(0);
+-		-webkit-animation-timing-function: ease-out;
+-	}
+-	40% {
+-		-webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg);
+-		-webkit-animation-timing-function: ease-out;
+-	}
+-	50% {
+-		-webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+-		-webkit-animation-timing-function: ease-in;
+-	}
+-	80% {
+-		-webkit-transform: perspective(400px) rotateY(360deg) scale(.95);
+-		-webkit-animation-timing-function: ease-in;
+-	}
+-	100% {
+-		-webkit-transform: perspective(400px) scale(1);
+-		-webkit-animation-timing-function: ease-in;
+-	}
+-}
+-@-moz-keyframes flip {
+-	0% {
+-		-moz-transform: perspective(400px) rotateY(0);
+-		-moz-animation-timing-function: ease-out;
+-	}
+-	40% {
+-		-moz-transform: perspective(400px) translateZ(150px) rotateY(170deg);
+-		-moz-animation-timing-function: ease-out;
+-	}
+-	50% {
+-		-moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+-		-moz-animation-timing-function: ease-in;
+-	}
+-	80% {
+-		-moz-transform: perspective(400px) rotateY(360deg) scale(.95);
+-		-moz-animation-timing-function: ease-in;
+-	}
+-	100% {
+-		-moz-transform: perspective(400px) scale(1);
+-		-moz-animation-timing-function: ease-in;
+-	}
+-}
+-@-o-keyframes flip {
+-	0% {
+-		-o-transform: perspective(400px) rotateY(0);
+-		-o-animation-timing-function: ease-out;
+-	}
+-	40% {
+-		-o-transform: perspective(400px) translateZ(150px) rotateY(170deg);
+-		-o-animation-timing-function: ease-out;
+-	}
+-	50% {
+-		-o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+-		-o-animation-timing-function: ease-in;
+-	}
+-	80% {
+-		-o-transform: perspective(400px) rotateY(360deg) scale(.95);
+-		-o-animation-timing-function: ease-in;
+-	}
+-	100% {
+-		-o-transform: perspective(400px) scale(1);
+-		-o-animation-timing-function: ease-in;
+-	}
+-}
+-@keyframes flip {
+-	0% {
+-		transform: perspective(400px) rotateY(0);
+-		animation-timing-function: ease-out;
+-	}
+-	40% {
+-		transform: perspective(400px) translateZ(150px) rotateY(170deg);
+-		animation-timing-function: ease-out;
+-	}
+-	50% {
+-		transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
+-		animation-timing-function: ease-in;
+-	}
+-	80% {
+-		transform: perspective(400px) rotateY(360deg) scale(.95);
+-		animation-timing-function: ease-in;
+-	}
+-	100% {
+-		transform: perspective(400px) scale(1);
+-		animation-timing-function: ease-in;
+-	}
+-}
+-
+-.flip {
+-	-webkit-transform-style: preserve-3d;
+-	-moz-transform-style: preserve-3d;
+-	-o-transform-style: preserve-3d;
+-	transform-style: preserve-3d;
+-	-webkit-backface-visibility: visible !important;
+-	-webkit-animation-name: flip;
+-	-moz-backface-visibility: visible !important;
+-	-moz-animation-name: flip;
+-	-o-backface-visibility: visible !important;
+-	-o-animation-name: flip;
+-	backface-visibility: visible !important;
+-	animation-name: flip;
+-}
+-@-webkit-keyframes flipInX {
+-    0% {
+-        -webkit-transform: perspective(400px) rotateX(90deg);
+-        opacity: 0;
+-    }
+-    
+-    40% {
+-        -webkit-transform: perspective(400px) rotateX(-10deg);
+-    }
+-    
+-    70% {
+-        -webkit-transform: perspective(400px) rotateX(10deg);
+-    }
+-    
+-    100% {
+-        -webkit-transform: perspective(400px) rotateX(0deg);
+-        opacity: 1;
+-    }
+-}
+-@-moz-keyframes flipInX {
+-    0% {
+-        -moz-transform: perspective(400px) rotateX(90deg);
+-        opacity: 0;
+-    }
+-    
+-    40% {
+-        -moz-transform: perspective(400px) rotateX(-10deg);
+-    }
+-    
+-    70% {
+-        -moz-transform: perspective(400px) rotateX(10deg);
+-    }
+-    
+-    100% {
+-        -moz-transform: perspective(400px) rotateX(0deg);
+-        opacity: 1;
+-    }
+-}
+-@-o-keyframes flipInX {
+-    0% {
+-        -o-transform: perspective(400px) rotateX(90deg);
+-        opacity: 0;
+-    }
+-    
+-    40% {
+-        -o-transform: perspective(400px) rotateX(-10deg);
+-    }
+-    
+-    70% {
+-        -o-transform: perspective(400px) rotateX(10deg);
+-    }
+-    
+-    100% {
+-        -o-transform: perspective(400px) rotateX(0deg);
+-        opacity: 1;
+-    }
+-}
+-@keyframes flipInX {
+-    0% {
+-        transform: perspective(400px) rotateX(90deg);
+-        opacity: 0;
+-    }
+-    
+-    40% {
+-        transform: perspective(400px) rotateX(-10deg);
+-    }
+-    
+-    70% {
+-        transform: perspective(400px) rotateX(10deg);
+-    }
+-    
+-    100% {
+-        transform: perspective(400px) rotateX(0deg);
+-        opacity: 1;
+-    }
+-}
+-
+-.flipInX {
+-	-webkit-backface-visibility: visible !important;
+-	-webkit-animation-name: flipInX;
+-	-moz-backface-visibility: visible !important;
+-	-moz-animation-name: flipInX;
+-	-o-backface-visibility: visible !important;
+-	-o-animation-name: flipInX;
+-	backface-visibility: visible !important;
+-	animation-name: flipInX;
+-}
+-@-webkit-keyframes flipOutX {
+-    0% {
+-        -webkit-transform: perspective(400px) rotateX(0deg);
+-        opacity: 1;
+-    }
+-	100% {
+-        -webkit-transform: perspective(400px) rotateX(90deg);
+-        opacity: 0;
+-    }
+-}
+-
+-@-moz-keyframes flipOutX {
+-    0% {
+-        -moz-transform: perspective(400px) rotateX(0deg);
+-        opacity: 1;
+-    }
+-	100% {
+-        -moz-transform: perspective(400px) rotateX(90deg);
+-        opacity: 0;
+-    }
+-}
+-
+-@-o-keyframes flipOutX {
+-    0% {
+-        -o-transform: perspective(400px) rotateX(0deg);
+-        opacity: 1;
+-    }
+-	100% {
+-        -o-transform: perspective(400px) rotateX(90deg);
+-        opacity: 0;
+-    }
+-}
+-
+-@keyframes flipOutX {
+-    0% {
+-        transform: perspective(400px) rotateX(0deg);
+-        opacity: 1;
+-    }
+-	100% {
+-        transform: perspective(400px) rotateX(90deg);
+-        opacity: 0;
+-    }
+-}
+-
+-.flipOutX {
+-	-webkit-animation-name: flipOutX;
+-	-webkit-backface-visibility: visible !important;
+-	-moz-animation-name: flipOutX;
+-	-moz-backface-visibility: visible !important;
+-	-o-animation-name: flipOutX;
+-	-o-backface-visibility: visible !important;
+-	animation-name: flipOutX;
+-	backface-visibility: visible !important;
+-}
+-@-webkit-keyframes flipInY {
+-    0% {
+-        -webkit-transform: perspective(400px) rotateY(90deg);
+-        opacity: 0;
+-    }
+-    
+-    40% {
+-        -webkit-transform: perspective(400px) rotateY(-10deg);
+-    }
+-    
+-    70% {
+-        -webkit-transform: perspective(400px) rotateY(10deg);
+-    }
+-    
+-    100% {
+-        -webkit-transform: perspective(400px) rotateY(0deg);
+-        opacity: 1;
+-    }
+-}
+-@-moz-keyframes flipInY {
+-    0% {
+-        -moz-transform: perspective(400px) rotateY(90deg);
+-        opacity: 0;
+-    }
+-    
+-    40% {
+-        -moz-transform: perspective(400px) rotateY(-10deg);
+-    }
+-    
+-    70% {
+-        -moz-transform: perspective(400px) rotateY(10deg);
+-    }
+-    
+-    100% {
+-        -moz-transform: perspective(400px) rotateY(0deg);
+-        opacity: 1;
+-    }
+-}
+-@-o-keyframes flipInY {
+-    0% {
+-        -o-transform: perspective(400px) rotateY(90deg);
+-        opacity: 0;
+-    }
+-    
+-    40% {
+-        -o-transform: perspective(400px) rotateY(-10deg);
+-    }
+-    
+-    70% {
+-        -o-transform: perspective(400px) rotateY(10deg);
+-    }
+-    
+-    100% {
+-        -o-transform: perspective(400px) rotateY(0deg);
+-        opacity: 1;
+-    }
+-}
+-@keyframes flipInY {
+-    0% {
+-        transform: perspective(400px) rotateY(90deg);
+-        opacity: 0;
+-    }
+-    
+-    40% {
+-        transform: perspective(400px) rotateY(-10deg);
+-    }
+-    
+-    70% {
+-        transform: perspective(400px) rotateY(10deg);
+-    }
+-    
+-    100% {
+-        transform: perspective(400px) rotateY(0deg);
+-        opacity: 1;
+-    }
+-}
+-
+-.flipInY {
+-	-webkit-backface-visibility: visible !important;
+-	-webkit-animation-name: flipInY;
+-	-moz-backface-visibility: visible !important;
+-	-moz-animation-name: flipInY;
+-	-o-backface-visibility: visible !important;
+-	-o-animation-name: flipInY;
+-	backface-visibility: visible !important;
+-	animation-name: flipInY;
+-}
+-@-webkit-keyframes flipOutY {
+-    0% {
+-        -webkit-transform: perspective(400px) rotateY(0deg);
+-        opacity: 1;
+-    }
+-	100% {
+-        -webkit-transform: perspective(400px) rotateY(90deg);
+-        opacity: 0;
+-    }
+-}
+-@-moz-keyframes flipOutY {
+-    0% {
+-        -moz-transform: perspective(400px) rotateY(0deg);
+-        opacity: 1;
+-    }
+-	100% {
+-        -moz-transform: perspective(400px) rotateY(90deg);
+-        opacity: 0;
+-    }
+-}
+-@-o-keyframes flipOutY {
+-    0% {
+-        -o-transform: perspective(400px) rotateY(0deg);
+-        opacity: 1;
+-    }
+-	100% {
+-        -o-transform: perspective(400px) rotateY(90deg);
+-        opacity: 0;
+-    }
+-}
+-@keyframes flipOutY {
+-    0% {
+-        transform: perspective(400px) rotateY(0deg);
+-        opacity: 1;
+-    }
+-	100% {
+-        transform: perspective(400px) rotateY(90deg);
+-        opacity: 0;
+-    }
+-}
+-
+-.flipOutY {
+-	-webkit-backface-visibility: visible !important;
+-	-webkit-animation-name: flipOutY;
+-	-moz-backface-visibility: visible !important;
+-	-moz-animation-name: flipOutY;
+-	-o-backface-visibility: visible !important;
+-	-o-animation-name: flipOutY;
+-	backface-visibility: visible !important;
+-	animation-name: flipOutY;
+-}
+-@-webkit-keyframes fadeIn {
+-	0% {opacity: 0;}	
+-	100% {opacity: 1;}
+-}
+-
+-@-moz-keyframes fadeIn {
+-	0% {opacity: 0;}	
+-	100% {opacity: 1;}
+-}
+-
+-@-o-keyframes fadeIn {
+-	0% {opacity: 0;}	
+-	100% {opacity: 1;}
+-}
+-
+-@keyframes fadeIn {
+-	0% {opacity: 0;}	
+-	100% {opacity: 1;}
+-}
+-
+-.fadeIn {
+-	-webkit-animation-name: fadeIn;
+-	-moz-animation-name: fadeIn;
+-	-o-animation-name: fadeIn;
+-	animation-name: fadeIn;
+-}
+-@-webkit-keyframes fadeInUp {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateY(20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-webkit-transform: translateY(0);
+-	}
+-}
+-
+-@-moz-keyframes fadeInUp {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateY(20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-moz-transform: translateY(0);
+-	}
+-}
+-
+-@-o-keyframes fadeInUp {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateY(20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-o-transform: translateY(0);
+-	}
+-}
+-
+-@keyframes fadeInUp {
+-	0% {
+-		opacity: 0;
+-		transform: translateY(20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		transform: translateY(0);
+-	}
+-}
+-
+-.fadeInUp {
+-	-webkit-animation-name: fadeInUp;
+-	-moz-animation-name: fadeInUp;
+-	-o-animation-name: fadeInUp;
+-	animation-name: fadeInUp;
+-}
+-@-webkit-keyframes fadeInDown {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateY(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-webkit-transform: translateY(0);
+-	}
+-}
+-
+-@-moz-keyframes fadeInDown {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateY(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-moz-transform: translateY(0);
+-	}
+-}
+-
+-@-o-keyframes fadeInDown {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateY(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-o-transform: translateY(0);
+-	}
+-}
+-
+-@keyframes fadeInDown {
+-	0% {
+-		opacity: 0;
+-		transform: translateY(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		transform: translateY(0);
+-	}
+-}
+-
+-.fadeInDown {
+-	-webkit-animation-name: fadeInDown;
+-	-moz-animation-name: fadeInDown;
+-	-o-animation-name: fadeInDown;
+-	animation-name: fadeInDown;
+-}
+-@-webkit-keyframes fadeInLeft {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateX(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0);
+-	}
+-}
+-
+-@-moz-keyframes fadeInLeft {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateX(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-moz-transform: translateX(0);
+-	}
+-}
+-
+-@-o-keyframes fadeInLeft {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateX(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-o-transform: translateX(0);
+-	}
+-}
+-
+-@keyframes fadeInLeft {
+-	0% {
+-		opacity: 0;
+-		transform: translateX(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		transform: translateX(0);
+-	}
+-}
+-
+-.fadeInLeft {
+-	-webkit-animation-name: fadeInLeft;
+-	-moz-animation-name: fadeInLeft;
+-	-o-animation-name: fadeInLeft;
+-	animation-name: fadeInLeft;
+-}
+-@-webkit-keyframes fadeInRight {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateX(20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0);
+-	}
+-}
+-
+-@-moz-keyframes fadeInRight {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateX(20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-moz-transform: translateX(0);
+-	}
+-}
+-
+-@-o-keyframes fadeInRight {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateX(20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-o-transform: translateX(0);
+-	}
+-}
+-
+-@keyframes fadeInRight {
+-	0% {
+-		opacity: 0;
+-		transform: translateX(20px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		transform: translateX(0);
+-	}
+-}
+-
+-.fadeInRight {
+-	-webkit-animation-name: fadeInRight;
+-	-moz-animation-name: fadeInRight;
+-	-o-animation-name: fadeInRight;
+-	animation-name: fadeInRight;
+-}
+-@-webkit-keyframes fadeInUpBig {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateY(2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-webkit-transform: translateY(0);
+-	}
+-}
+-
+-@-moz-keyframes fadeInUpBig {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateY(2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-moz-transform: translateY(0);
+-	}
+-}
+-
+-@-o-keyframes fadeInUpBig {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateY(2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-o-transform: translateY(0);
+-	}
+-}
+-
+-@keyframes fadeInUpBig {
+-	0% {
+-		opacity: 0;
+-		transform: translateY(2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		transform: translateY(0);
+-	}
+-}
+-
+-.fadeInUpBig {
+-	-webkit-animation-name: fadeInUpBig;
+-	-moz-animation-name: fadeInUpBig;
+-	-o-animation-name: fadeInUpBig;
+-	animation-name: fadeInUpBig;
+-}
+-@-webkit-keyframes fadeInDownBig {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateY(-2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-webkit-transform: translateY(0);
+-	}
+-}
+-
+-@-moz-keyframes fadeInDownBig {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateY(-2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-moz-transform: translateY(0);
+-	}
+-}
+-
+-@-o-keyframes fadeInDownBig {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateY(-2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-o-transform: translateY(0);
+-	}
+-}
+-
+-@keyframes fadeInDownBig {
+-	0% {
+-		opacity: 0;
+-		transform: translateY(-2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		transform: translateY(0);
+-	}
+-}
+-
+-.fadeInDownBig {
+-	-webkit-animation-name: fadeInDownBig;
+-	-moz-animation-name: fadeInDownBig;
+-	-o-animation-name: fadeInDownBig;
+-	animation-name: fadeInDownBig;
+-}
+-@-webkit-keyframes fadeInLeftBig {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateX(-2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0);
+-	}
+-}
+-@-moz-keyframes fadeInLeftBig {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateX(-2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-moz-transform: translateX(0);
+-	}
+-}
+-@-o-keyframes fadeInLeftBig {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateX(-2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-o-transform: translateX(0);
+-	}
+-}
+-@keyframes fadeInLeftBig {
+-	0% {
+-		opacity: 0;
+-		transform: translateX(-2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		transform: translateX(0);
+-	}
+-}
+-
+-.fadeInLeftBig {
+-	-webkit-animation-name: fadeInLeftBig;
+-	-moz-animation-name: fadeInLeftBig;
+-	-o-animation-name: fadeInLeftBig;
+-	animation-name: fadeInLeftBig;
+-}
+-@-webkit-keyframes fadeInRightBig {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateX(2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0);
+-	}
+-}
+-
+-@-moz-keyframes fadeInRightBig {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateX(2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-moz-transform: translateX(0);
+-	}
+-}
+-
+-@-o-keyframes fadeInRightBig {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateX(2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		-o-transform: translateX(0);
+-	}
+-}
+-
+-@keyframes fadeInRightBig {
+-	0% {
+-		opacity: 0;
+-		transform: translateX(2000px);
+-	}
+-	
+-	100% {
+-		opacity: 1;
+-		transform: translateX(0);
+-	}
+-}
+-
+-.fadeInRightBig {
+-	-webkit-animation-name: fadeInRightBig;
+-	-moz-animation-name: fadeInRightBig;
+-	-o-animation-name: fadeInRightBig;
+-	animation-name: fadeInRightBig;
+-}
+-@-webkit-keyframes fadeOut {
+-	0% {opacity: 1;}
+-	100% {opacity: 0;}
+-}
+-
+-@-moz-keyframes fadeOut {
+-	0% {opacity: 1;}
+-	100% {opacity: 0;}
+-}
+-
+-@-o-keyframes fadeOut {
+-	0% {opacity: 1;}
+-	100% {opacity: 0;}
+-}
+-
+-@keyframes fadeOut {
+-	0% {opacity: 1;}
+-	100% {opacity: 0;}
+-}
+-
+-.fadeOut {
+-	-webkit-animation-name: fadeOut;
+-	-moz-animation-name: fadeOut;
+-	-o-animation-name: fadeOut;
+-	animation-name: fadeOut;
+-}
+-@-webkit-keyframes fadeOutUp {
+-	0% {
+-		opacity: 1;
+-		-webkit-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateY(-20px);
+-	}
+-}
+-@-moz-keyframes fadeOutUp {
+-	0% {
+-		opacity: 1;
+-		-moz-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateY(-20px);
+-	}
+-}
+-@-o-keyframes fadeOutUp {
+-	0% {
+-		opacity: 1;
+-		-o-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateY(-20px);
+-	}
+-}
+-@keyframes fadeOutUp {
+-	0% {
+-		opacity: 1;
+-		transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateY(-20px);
+-	}
+-}
+-
+-.fadeOutUp {
+-	-webkit-animation-name: fadeOutUp;
+-	-moz-animation-name: fadeOutUp;
+-	-o-animation-name: fadeOutUp;
+-	animation-name: fadeOutUp;
+-}
+-@-webkit-keyframes fadeOutDown {
+-	0% {
+-		opacity: 1;
+-		-webkit-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateY(20px);
+-	}
+-}
+-
+-@-moz-keyframes fadeOutDown {
+-	0% {
+-		opacity: 1;
+-		-moz-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateY(20px);
+-	}
+-}
+-
+-@-o-keyframes fadeOutDown {
+-	0% {
+-		opacity: 1;
+-		-o-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateY(20px);
+-	}
+-}
+-
+-@keyframes fadeOutDown {
+-	0% {
+-		opacity: 1;
+-		transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateY(20px);
+-	}
+-}
+-
+-.fadeOutDown {
+-	-webkit-animation-name: fadeOutDown;
+-	-moz-animation-name: fadeOutDown;
+-	-o-animation-name: fadeOutDown;
+-	animation-name: fadeOutDown;
+-}
+-@-webkit-keyframes fadeOutLeft {
+-	0% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateX(-20px);
+-	}
+-}
+-
+-@-moz-keyframes fadeOutLeft {
+-	0% {
+-		opacity: 1;
+-		-moz-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateX(-20px);
+-	}
+-}
+-
+-@-o-keyframes fadeOutLeft {
+-	0% {
+-		opacity: 1;
+-		-o-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateX(-20px);
+-	}
+-}
+-
+-@keyframes fadeOutLeft {
+-	0% {
+-		opacity: 1;
+-		transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateX(-20px);
+-	}
+-}
+-
+-.fadeOutLeft {
+-	-webkit-animation-name: fadeOutLeft;
+-	-moz-animation-name: fadeOutLeft;
+-	-o-animation-name: fadeOutLeft;
+-	animation-name: fadeOutLeft;
+-}
+-@-webkit-keyframes fadeOutRight {
+-	0% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateX(20px);
+-	}
+-}
+-
+-@-moz-keyframes fadeOutRight {
+-	0% {
+-		opacity: 1;
+-		-moz-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateX(20px);
+-	}
+-}
+-
+-@-o-keyframes fadeOutRight {
+-	0% {
+-		opacity: 1;
+-		-o-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateX(20px);
+-	}
+-}
+-
+-@keyframes fadeOutRight {
+-	0% {
+-		opacity: 1;
+-		transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateX(20px);
+-	}
+-}
+-
+-.fadeOutRight {
+-	-webkit-animation-name: fadeOutRight;
+-	-moz-animation-name: fadeOutRight;
+-	-o-animation-name: fadeOutRight;
+-	animation-name: fadeOutRight;
+-}
+-@-webkit-keyframes fadeOutUpBig {
+-	0% {
+-		opacity: 1;
+-		-webkit-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateY(-2000px);
+-	}
+-}
+-
+-@-moz-keyframes fadeOutUpBig {
+-	0% {
+-		opacity: 1;
+-		-moz-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateY(-2000px);
+-	}
+-}
+-
+-@-o-keyframes fadeOutUpBig {
+-	0% {
+-		opacity: 1;
+-		-o-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateY(-2000px);
+-	}
+-}
+-
+-@keyframes fadeOutUpBig {
+-	0% {
+-		opacity: 1;
+-		transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateY(-2000px);
+-	}
+-}
+-
+-.fadeOutUpBig {
+-	-webkit-animation-name: fadeOutUpBig;
+-	-moz-animation-name: fadeOutUpBig;
+-	-o-animation-name: fadeOutUpBig;
+-	animation-name: fadeOutUpBig;
+-}
+-@-webkit-keyframes fadeOutDownBig {
+-	0% {
+-		opacity: 1;
+-		-webkit-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateY(2000px);
+-	}
+-}
+-
+-@-moz-keyframes fadeOutDownBig {
+-	0% {
+-		opacity: 1;
+-		-moz-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateY(2000px);
+-	}
+-}
+-
+-@-o-keyframes fadeOutDownBig {
+-	0% {
+-		opacity: 1;
+-		-o-transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateY(2000px);
+-	}
+-}
+-
+-@keyframes fadeOutDownBig {
+-	0% {
+-		opacity: 1;
+-		transform: translateY(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateY(2000px);
+-	}
+-}
+-
+-.fadeOutDownBig {
+-	-webkit-animation-name: fadeOutDownBig;
+-	-moz-animation-name: fadeOutDownBig;
+-	-o-animation-name: fadeOutDownBig;
+-	animation-name: fadeOutDownBig;
+-}
+-@-webkit-keyframes fadeOutLeftBig {
+-	0% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateX(-2000px);
+-	}
+-}
+-
+-@-moz-keyframes fadeOutLeftBig {
+-	0% {
+-		opacity: 1;
+-		-moz-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateX(-2000px);
+-	}
+-}
+-
+-@-o-keyframes fadeOutLeftBig {
+-	0% {
+-		opacity: 1;
+-		-o-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateX(-2000px);
+-	}
+-}
+-
+-@keyframes fadeOutLeftBig {
+-	0% {
+-		opacity: 1;
+-		transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateX(-2000px);
+-	}
+-}
+-
+-.fadeOutLeftBig {
+-	-webkit-animation-name: fadeOutLeftBig;
+-	-moz-animation-name: fadeOutLeftBig;
+-	-o-animation-name: fadeOutLeftBig;
+-	animation-name: fadeOutLeftBig;
+-}
+-@-webkit-keyframes fadeOutRightBig {
+-	0% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateX(2000px);
+-	}
+-}
+-@-moz-keyframes fadeOutRightBig {
+-	0% {
+-		opacity: 1;
+-		-moz-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateX(2000px);
+-	}
+-}
+-@-o-keyframes fadeOutRightBig {
+-	0% {
+-		opacity: 1;
+-		-o-transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateX(2000px);
+-	}
+-}
+-@keyframes fadeOutRightBig {
+-	0% {
+-		opacity: 1;
+-		transform: translateX(0);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateX(2000px);
+-	}
+-}
+-
+-.fadeOutRightBig {
+-	-webkit-animation-name: fadeOutRightBig;
+-	-moz-animation-name: fadeOutRightBig;
+-	-o-animation-name: fadeOutRightBig;
+-	animation-name: fadeOutRightBig;
+-}
+-@-webkit-keyframes bounceIn {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: scale(.3);
+-	}
+-	
+-	50% {
+-		opacity: 1;
+-		-webkit-transform: scale(1.05);
+-	}
+-	
+-	70% {
+-		-webkit-transform: scale(.9);
+-	}
+-	
+-	100% {
+-		-webkit-transform: scale(1);
+-	}
+-}
+-
+-@-moz-keyframes bounceIn {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: scale(.3);
+-	}
+-	
+-	50% {
+-		opacity: 1;
+-		-moz-transform: scale(1.05);
+-	}
+-	
+-	70% {
+-		-moz-transform: scale(.9);
+-	}
+-	
+-	100% {
+-		-moz-transform: scale(1);
+-	}
+-}
+-
+-@-o-keyframes bounceIn {
+-	0% {
+-		opacity: 0;
+-		-o-transform: scale(.3);
+-	}
+-	
+-	50% {
+-		opacity: 1;
+-		-o-transform: scale(1.05);
+-	}
+-	
+-	70% {
+-		-o-transform: scale(.9);
+-	}
+-	
+-	100% {
+-		-o-transform: scale(1);
+-	}
+-}
+-
+-@keyframes bounceIn {
+-	0% {
+-		opacity: 0;
+-		transform: scale(.3);
+-	}
+-	
+-	50% {
+-		opacity: 1;
+-		transform: scale(1.05);
+-	}
+-	
+-	70% {
+-		transform: scale(.9);
+-	}
+-	
+-	100% {
+-		transform: scale(1);
+-	}
+-}
+-
+-.bounceIn {
+-	-webkit-animation-name: bounceIn;
+-	-moz-animation-name: bounceIn;
+-	-o-animation-name: bounceIn;
+-	animation-name: bounceIn;
+-}
+-@-webkit-keyframes bounceInUp {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateY(2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-webkit-transform: translateY(-30px);
+-	}
+-	
+-	80% {
+-		-webkit-transform: translateY(10px);
+-	}
+-	
+-	100% {
+-		-webkit-transform: translateY(0);
+-	}
+-}
+-@-moz-keyframes bounceInUp {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateY(2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-moz-transform: translateY(-30px);
+-	}
+-	
+-	80% {
+-		-moz-transform: translateY(10px);
+-	}
+-	
+-	100% {
+-		-moz-transform: translateY(0);
+-	}
+-}
+-
+-@-o-keyframes bounceInUp {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateY(2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-o-transform: translateY(-30px);
+-	}
+-	
+-	80% {
+-		-o-transform: translateY(10px);
+-	}
+-	
+-	100% {
+-		-o-transform: translateY(0);
+-	}
+-}
+-
+-@keyframes bounceInUp {
+-	0% {
+-		opacity: 0;
+-		transform: translateY(2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		transform: translateY(-30px);
+-	}
+-	
+-	80% {
+-		transform: translateY(10px);
+-	}
+-	
+-	100% {
+-		transform: translateY(0);
+-	}
+-}
+-
+-.bounceInUp {
+-	-webkit-animation-name: bounceInUp;
+-	-moz-animation-name: bounceInUp;
+-	-o-animation-name: bounceInUp;
+-	animation-name: bounceInUp;
+-}
+-@-webkit-keyframes bounceInDown {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateY(-2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-webkit-transform: translateY(30px);
+-	}
+-	
+-	80% {
+-		-webkit-transform: translateY(-10px);
+-	}
+-	
+-	100% {
+-		-webkit-transform: translateY(0);
+-	}
+-}
+-
+-@-moz-keyframes bounceInDown {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateY(-2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-moz-transform: translateY(30px);
+-	}
+-	
+-	80% {
+-		-moz-transform: translateY(-10px);
+-	}
+-	
+-	100% {
+-		-moz-transform: translateY(0);
+-	}
+-}
+-
+-@-o-keyframes bounceInDown {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateY(-2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-o-transform: translateY(30px);
+-	}
+-	
+-	80% {
+-		-o-transform: translateY(-10px);
+-	}
+-	
+-	100% {
+-		-o-transform: translateY(0);
+-	}
+-}
+-
+-@keyframes bounceInDown {
+-	0% {
+-		opacity: 0;
+-		transform: translateY(-2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		transform: translateY(30px);
+-	}
+-	
+-	80% {
+-		transform: translateY(-10px);
+-	}
+-	
+-	100% {
+-		transform: translateY(0);
+-	}
+-}
+-
+-.bounceInDown {
+-	-webkit-animation-name: bounceInDown;
+-	-moz-animation-name: bounceInDown;
+-	-o-animation-name: bounceInDown;
+-	animation-name: bounceInDown;
+-}
+-@-webkit-keyframes bounceInLeft {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateX(-2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-webkit-transform: translateX(30px);
+-	}
+-	
+-	80% {
+-		-webkit-transform: translateX(-10px);
+-	}
+-	
+-	100% {
+-		-webkit-transform: translateX(0);
+-	}
+-}
+-
+-@-moz-keyframes bounceInLeft {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateX(-2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-moz-transform: translateX(30px);
+-	}
+-	
+-	80% {
+-		-moz-transform: translateX(-10px);
+-	}
+-	
+-	100% {
+-		-moz-transform: translateX(0);
+-	}
+-}
+-
+-@-o-keyframes bounceInLeft {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateX(-2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-o-transform: translateX(30px);
+-	}
+-	
+-	80% {
+-		-o-transform: translateX(-10px);
+-	}
+-	
+-	100% {
+-		-o-transform: translateX(0);
+-	}
+-}
+-
+-@keyframes bounceInLeft {
+-	0% {
+-		opacity: 0;
+-		transform: translateX(-2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		transform: translateX(30px);
+-	}
+-	
+-	80% {
+-		transform: translateX(-10px);
+-	}
+-	
+-	100% {
+-		transform: translateX(0);
+-	}
+-}
+-
+-.bounceInLeft {
+-	-webkit-animation-name: bounceInLeft;
+-	-moz-animation-name: bounceInLeft;
+-	-o-animation-name: bounceInLeft;
+-	animation-name: bounceInLeft;
+-}
+-@-webkit-keyframes bounceInRight {
+-	0% {
+-		opacity: 0;
+-		-webkit-transform: translateX(2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-webkit-transform: translateX(-30px);
+-	}
+-	
+-	80% {
+-		-webkit-transform: translateX(10px);
+-	}
+-	
+-	100% {
+-		-webkit-transform: translateX(0);
+-	}
+-}
+-
+-@-moz-keyframes bounceInRight {
+-	0% {
+-		opacity: 0;
+-		-moz-transform: translateX(2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-moz-transform: translateX(-30px);
+-	}
+-	
+-	80% {
+-		-moz-transform: translateX(10px);
+-	}
+-	
+-	100% {
+-		-moz-transform: translateX(0);
+-	}
+-}
+-
+-@-o-keyframes bounceInRight {
+-	0% {
+-		opacity: 0;
+-		-o-transform: translateX(2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		-o-transform: translateX(-30px);
+-	}
+-	
+-	80% {
+-		-o-transform: translateX(10px);
+-	}
+-	
+-	100% {
+-		-o-transform: translateX(0);
+-	}
+-}
+-
+-@keyframes bounceInRight {
+-	0% {
+-		opacity: 0;
+-		transform: translateX(2000px);
+-	}
+-	
+-	60% {
+-		opacity: 1;
+-		transform: translateX(-30px);
+-	}
+-	
+-	80% {
+-		transform: translateX(10px);
+-	}
+-	
+-	100% {
+-		transform: translateX(0);
+-	}
+-}
+-
+-.bounceInRight {
+-	-webkit-animation-name: bounceInRight;
+-	-moz-animation-name: bounceInRight;
+-	-o-animation-name: bounceInRight;
+-	animation-name: bounceInRight;
+-}
+-@-webkit-keyframes bounceOut {
+-	0% {
+-		-webkit-transform: scale(1);
+-	}
+-	
+-	25% {
+-		-webkit-transform: scale(.95);
+-	}
+-	
+-	50% {
+-		opacity: 1;
+-		-webkit-transform: scale(1.1);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: scale(.3);
+-	}	
+-}
+-
+-@-moz-keyframes bounceOut {
+-	0% {
+-		-moz-transform: scale(1);
+-	}
+-	
+-	25% {
+-		-moz-transform: scale(.95);
+-	}
+-	
+-	50% {
+-		opacity: 1;
+-		-moz-transform: scale(1.1);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: scale(.3);
+-	}	
+-}
+-
+-@-o-keyframes bounceOut {
+-	0% {
+-		-o-transform: scale(1);
+-	}
+-	
+-	25% {
+-		-o-transform: scale(.95);
+-	}
+-	
+-	50% {
+-		opacity: 1;
+-		-o-transform: scale(1.1);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: scale(.3);
+-	}	
+-}
+-
+-@keyframes bounceOut {
+-	0% {
+-		transform: scale(1);
+-	}
+-	
+-	25% {
+-		transform: scale(.95);
+-	}
+-	
+-	50% {
+-		opacity: 1;
+-		transform: scale(1.1);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: scale(.3);
+-	}	
+-}
+-
+-.bounceOut {
+-	-webkit-animation-name: bounceOut;
+-	-moz-animation-name: bounceOut;
+-	-o-animation-name: bounceOut;
+-	animation-name: bounceOut;
+-}
+-@-webkit-keyframes bounceOutUp {
+-	0% {
+-		-webkit-transform: translateY(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-webkit-transform: translateY(20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateY(-2000px);
+-	}
+-}
+-
+-@-moz-keyframes bounceOutUp {
+-	0% {
+-		-moz-transform: translateY(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-moz-transform: translateY(20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateY(-2000px);
+-	}
+-}
+-
+-@-o-keyframes bounceOutUp {
+-	0% {
+-		-o-transform: translateY(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-o-transform: translateY(20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateY(-2000px);
+-	}
+-}
+-
+-@keyframes bounceOutUp {
+-	0% {
+-		transform: translateY(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		transform: translateY(20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateY(-2000px);
+-	}
+-}
+-
+-.bounceOutUp {
+-	-webkit-animation-name: bounceOutUp;
+-	-moz-animation-name: bounceOutUp;
+-	-o-animation-name: bounceOutUp;
+-	animation-name: bounceOutUp;
+-}
+-@-webkit-keyframes bounceOutDown {
+-	0% {
+-		-webkit-transform: translateY(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-webkit-transform: translateY(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateY(2000px);
+-	}
+-}
+-
+-@-moz-keyframes bounceOutDown {
+-	0% {
+-		-moz-transform: translateY(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-moz-transform: translateY(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateY(2000px);
+-	}
+-}
+-
+-@-o-keyframes bounceOutDown {
+-	0% {
+-		-o-transform: translateY(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-o-transform: translateY(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateY(2000px);
+-	}
+-}
+-
+-@keyframes bounceOutDown {
+-	0% {
+-		transform: translateY(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		transform: translateY(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateY(2000px);
+-	}
+-}
+-
+-.bounceOutDown {
+-	-webkit-animation-name: bounceOutDown;
+-	-moz-animation-name: bounceOutDown;
+-	-o-animation-name: bounceOutDown;
+-	animation-name: bounceOutDown;
+-}
+-@-webkit-keyframes bounceOutLeft {
+-	0% {
+-		-webkit-transform: translateX(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-webkit-transform: translateX(20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateX(-2000px);
+-	}
+-}
+-
+-@-moz-keyframes bounceOutLeft {
+-	0% {
+-		-moz-transform: translateX(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-moz-transform: translateX(20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateX(-2000px);
+-	}
+-}
+-
+-@-o-keyframes bounceOutLeft {
+-	0% {
+-		-o-transform: translateX(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-o-transform: translateX(20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateX(-2000px);
+-	}
+-}
+-
+-@keyframes bounceOutLeft {
+-	0% {
+-		transform: translateX(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		transform: translateX(20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateX(-2000px);
+-	}
+-}
+-
+-.bounceOutLeft {
+-	-webkit-animation-name: bounceOutLeft;
+-	-moz-animation-name: bounceOutLeft;
+-	-o-animation-name: bounceOutLeft;
+-	animation-name: bounceOutLeft;
+-}
+-@-webkit-keyframes bounceOutRight {
+-	0% {
+-		-webkit-transform: translateX(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-webkit-transform: translateX(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-webkit-transform: translateX(2000px);
+-	}
+-}
+-
+-@-moz-keyframes bounceOutRight {
+-	0% {
+-		-moz-transform: translateX(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-moz-transform: translateX(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-moz-transform: translateX(2000px);
+-	}
+-}
+-
+-@-o-keyframes bounceOutRight {
+-	0% {
+-		-o-transform: translateX(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		-o-transform: translateX(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		-o-transform: translateX(2000px);
+-	}
+-}
+-
+-@keyframes bounceOutRight {
+-	0% {
+-		transform: translateX(0);
+-	}
+-	
+-	20% {
+-		opacity: 1;
+-		transform: translateX(-20px);
+-	}
+-	
+-	100% {
+-		opacity: 0;
+-		transform: translateX(2000px);
+-	}
+-}
+-
+-.bounceOutRight {
+-	-webkit-animation-name: bounceOutRight;
+-	-moz-animation-name: bounceOutRight;
+-	-o-animation-name: bounceOutRight;
+-	animation-name: bounceOutRight;
+-}
+-@-webkit-keyframes rotateIn {
+-	0% {
+-		-webkit-transform-origin: center center;
+-		-webkit-transform: rotate(-200deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: center center;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-@-moz-keyframes rotateIn {
+-	0% {
+-		-moz-transform-origin: center center;
+-		-moz-transform: rotate(-200deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: center center;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-@-o-keyframes rotateIn {
+-	0% {
+-		-o-transform-origin: center center;
+-		-o-transform: rotate(-200deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: center center;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-@keyframes rotateIn {
+-	0% {
+-		transform-origin: center center;
+-		transform: rotate(-200deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		transform-origin: center center;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-.rotateIn {
+-	-webkit-animation-name: rotateIn;
+-	-moz-animation-name: rotateIn;
+-	-o-animation-name: rotateIn;
+-	animation-name: rotateIn;
+-}
+-@-webkit-keyframes rotateInUpLeft {
+-	0% {
+-		-webkit-transform-origin: left bottom;
+-		-webkit-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: left bottom;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@-moz-keyframes rotateInUpLeft {
+-	0% {
+-		-moz-transform-origin: left bottom;
+-		-moz-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: left bottom;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@-o-keyframes rotateInUpLeft {
+-	0% {
+-		-o-transform-origin: left bottom;
+-		-o-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: left bottom;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@keyframes rotateInUpLeft {
+-	0% {
+-		transform-origin: left bottom;
+-		transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		transform-origin: left bottom;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-.rotateInUpLeft {
+-	-webkit-animation-name: rotateInUpLeft;
+-	-moz-animation-name: rotateInUpLeft;
+-	-o-animation-name: rotateInUpLeft;
+-	animation-name: rotateInUpLeft;
+-}
+-@-webkit-keyframes rotateInDownLeft {
+-	0% {
+-		-webkit-transform-origin: left bottom;
+-		-webkit-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: left bottom;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@-moz-keyframes rotateInDownLeft {
+-	0% {
+-		-moz-transform-origin: left bottom;
+-		-moz-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: left bottom;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@-o-keyframes rotateInDownLeft {
+-	0% {
+-		-o-transform-origin: left bottom;
+-		-o-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: left bottom;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@keyframes rotateInDownLeft {
+-	0% {
+-		transform-origin: left bottom;
+-		transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		transform-origin: left bottom;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-.rotateInDownLeft {
+-	-webkit-animation-name: rotateInDownLeft;
+-	-moz-animation-name: rotateInDownLeft;
+-	-o-animation-name: rotateInDownLeft;
+-	animation-name: rotateInDownLeft;
+-}
+-@-webkit-keyframes rotateInUpRight {
+-	0% {
+-		-webkit-transform-origin: right bottom;
+-		-webkit-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: right bottom;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@-moz-keyframes rotateInUpRight {
+-	0% {
+-		-moz-transform-origin: right bottom;
+-		-moz-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: right bottom;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@-o-keyframes rotateInUpRight {
+-	0% {
+-		-o-transform-origin: right bottom;
+-		-o-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: right bottom;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@keyframes rotateInUpRight {
+-	0% {
+-		transform-origin: right bottom;
+-		transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		transform-origin: right bottom;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-.rotateInUpRight {
+-	-webkit-animation-name: rotateInUpRight;
+-	-moz-animation-name: rotateInUpRight;
+-	-o-animation-name: rotateInUpRight;
+-	animation-name: rotateInUpRight;
+-}
+-@-webkit-keyframes rotateInDownRight {
+-	0% {
+-		-webkit-transform-origin: right bottom;
+-		-webkit-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: right bottom;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@-moz-keyframes rotateInDownRight {
+-	0% {
+-		-moz-transform-origin: right bottom;
+-		-moz-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: right bottom;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@-o-keyframes rotateInDownRight {
+-	0% {
+-		-o-transform-origin: right bottom;
+-		-o-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: right bottom;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-@keyframes rotateInDownRight {
+-	0% {
+-		transform-origin: right bottom;
+-		transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-	
+-	100% {
+-		transform-origin: right bottom;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-}
+-
+-.rotateInDownRight {
+-	-webkit-animation-name: rotateInDownRight;
+-	-moz-animation-name: rotateInDownRight;
+-	-o-animation-name: rotateInDownRight;
+-	animation-name: rotateInDownRight;
+-}
+-@-webkit-keyframes rotateOut {
+-	0% {
+-		-webkit-transform-origin: center center;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: center center;
+-		-webkit-transform: rotate(200deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-moz-keyframes rotateOut {
+-	0% {
+-		-moz-transform-origin: center center;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: center center;
+-		-moz-transform: rotate(200deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-o-keyframes rotateOut {
+-	0% {
+-		-o-transform-origin: center center;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: center center;
+-		-o-transform: rotate(200deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@keyframes rotateOut {
+-	0% {
+-		transform-origin: center center;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		transform-origin: center center;
+-		transform: rotate(200deg);
+-		opacity: 0;
+-	}
+-}
+-
+-.rotateOut {
+-	-webkit-animation-name: rotateOut;
+-	-moz-animation-name: rotateOut;
+-	-o-animation-name: rotateOut;
+-	animation-name: rotateOut;
+-}
+-@-webkit-keyframes rotateOutUpLeft {
+-	0% {
+-		-webkit-transform-origin: left bottom;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: left bottom;
+-		-webkit-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-moz-keyframes rotateOutUpLeft {
+-	0% {
+-		-moz-transform-origin: left bottom;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: left bottom;
+-		-moz-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-o-keyframes rotateOutUpLeft {
+-	0% {
+-		-o-transform-origin: left bottom;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: left bottom;
+-		-o-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@keyframes rotateOutUpLeft {
+-	0% {
+-		transform-origin: left bottom;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-transform-origin: left bottom;
+-		-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-.rotateOutUpLeft {
+-	-webkit-animation-name: rotateOutUpLeft;
+-	-moz-animation-name: rotateOutUpLeft;
+-	-o-animation-name: rotateOutUpLeft;
+-	animation-name: rotateOutUpLeft;
+-}
+-@-webkit-keyframes rotateOutDownLeft {
+-	0% {
+-		-webkit-transform-origin: left bottom;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: left bottom;
+-		-webkit-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-moz-keyframes rotateOutDownLeft {
+-	0% {
+-		-moz-transform-origin: left bottom;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: left bottom;
+-		-moz-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-o-keyframes rotateOutDownLeft {
+-	0% {
+-		-o-transform-origin: left bottom;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: left bottom;
+-		-o-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@keyframes rotateOutDownLeft {
+-	0% {
+-		transform-origin: left bottom;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		transform-origin: left bottom;
+-		transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-.rotateOutDownLeft {
+-	-webkit-animation-name: rotateOutDownLeft;
+-	-moz-animation-name: rotateOutDownLeft;
+-	-o-animation-name: rotateOutDownLeft;
+-	animation-name: rotateOutDownLeft;
+-}
+-@-webkit-keyframes rotateOutUpRight {
+-	0% {
+-		-webkit-transform-origin: right bottom;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: right bottom;
+-		-webkit-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-moz-keyframes rotateOutUpRight {
+-	0% {
+-		-moz-transform-origin: right bottom;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: right bottom;
+-		-moz-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-o-keyframes rotateOutUpRight {
+-	0% {
+-		-o-transform-origin: right bottom;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: right bottom;
+-		-o-transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@keyframes rotateOutUpRight {
+-	0% {
+-		transform-origin: right bottom;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		transform-origin: right bottom;
+-		transform: rotate(90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-.rotateOutUpRight {
+-	-webkit-animation-name: rotateOutUpRight;
+-	-moz-animation-name: rotateOutUpRight;
+-	-o-animation-name: rotateOutUpRight;
+-	animation-name: rotateOutUpRight;
+-}
+-@-webkit-keyframes rotateOutDownRight {
+-	0% {
+-		-webkit-transform-origin: right bottom;
+-		-webkit-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-webkit-transform-origin: right bottom;
+-		-webkit-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-moz-keyframes rotateOutDownRight {
+-	0% {
+-		-moz-transform-origin: right bottom;
+-		-moz-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-moz-transform-origin: right bottom;
+-		-moz-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@-o-keyframes rotateOutDownRight {
+-	0% {
+-		-o-transform-origin: right bottom;
+-		-o-transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		-o-transform-origin: right bottom;
+-		-o-transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-@keyframes rotateOutDownRight {
+-	0% {
+-		transform-origin: right bottom;
+-		transform: rotate(0);
+-		opacity: 1;
+-	}
+-	
+-	100% {
+-		transform-origin: right bottom;
+-		transform: rotate(-90deg);
+-		opacity: 0;
+-	}
+-}
+-
+-.rotateOutDownRight {
+-	-webkit-animation-name: rotateOutDownRight;
+-	-moz-animation-name: rotateOutDownRight;
+-	-o-animation-name: rotateOutDownRight;
+-	animation-name: rotateOutDownRight;
+-}
+-@-webkit-keyframes lightSpeedIn {
+-	0% { -webkit-transform: translateX(100%) skewX(-30deg); opacity: 0; }
+-	60% { -webkit-transform: translateX(-20%) skewX(30deg); opacity: 1; }
+-	80% { -webkit-transform: translateX(0%) skewX(-15deg); opacity: 1; }
+-	100% { -webkit-transform: translateX(0%) skewX(0deg); opacity: 1; }
+-}
+-
+-@-moz-keyframes lightSpeedIn {
+-	0% { -moz-transform: translateX(100%) skewX(-30deg); opacity: 0; }
+-	60% { -moz-transform: translateX(-20%) skewX(30deg); opacity: 1; }
+-	80% { -moz-transform: translateX(0%) skewX(-15deg); opacity: 1; }
+-	100% { -moz-transform: translateX(0%) skewX(0deg); opacity: 1; }
+-}
+-
+-@-o-keyframes lightSpeedIn {
+-	0% { -o-transform: translateX(100%) skewX(-30deg); opacity: 0; }
+-	60% { -o-transform: translateX(-20%) skewX(30deg); opacity: 1; }
+-	80% { -o-transform: translateX(0%) skewX(-15deg); opacity: 1; }
+-	100% { -o-transform: translateX(0%) skewX(0deg); opacity: 1; }
+-}
+-
+-@keyframes lightSpeedIn {
+-	0% { transform: translateX(100%) skewX(-30deg); opacity: 0; }
+-	60% { transform: translateX(-20%) skewX(30deg); opacity: 1; }
+-	80% { transform: translateX(0%) skewX(-15deg); opacity: 1; }
+-	100% { transform: translateX(0%) skewX(0deg); opacity: 1; }
+-}
+-
+-.lightSpeedIn {
+-    -webkit-animation-name: lightSpeedIn;
+-    -moz-animation-name: lightSpeedIn;
+-    -o-animation-name: lightSpeedIn;
+-    animation-name: lightSpeedIn;
+-
+-    -webkit-animation-timing-function: ease-out;
+-    -moz-animation-timing-function: ease-out;
+-    -o-animation-timing-function: ease-out;
+-    animation-timing-function: ease-out;
+-}
+-@-webkit-keyframes lightSpeedOut {
+-    0% { -webkit-transform: translateX(0%) skewX(0deg); opacity: 1; }
+-	100% { -webkit-transform: translateX(100%) skewX(-30deg); opacity: 0; }
+-}
+-
+-@-moz-keyframes lightSpeedOut {
+-	0% { -moz-transform: translateX(0%) skewX(0deg); opacity: 1; }
+-	100% { -moz-transform: translateX(100%) skewX(-30deg); opacity: 0; }
+-}
+-
+-@-o-keyframes lightSpeedOut {
+-	0% { -o-transform: translateX(0%) skewX(0deg); opacity: 1; }
+-	100% { -o-transform: translateX(100%) skewX(-30deg); opacity: 0; }
+-}
+-
+-@keyframes lightSpeedOut {
+-	0% { transform: translateX(0%) skewX(0deg); opacity: 1; }
+-	100% { transform: translateX(100%) skewX(-30deg); opacity: 0; }
+-}
+-
+-.lightSpeedOut {
+-    -webkit-animation-name: lightSpeedOut;
+-    -moz-animation-name: lightSpeedOut;
+-    -o-animation-name: lightSpeedOut;
+-    animation-name: lightSpeedOut;
+-
+-    -webkit-animation-timing-function: ease-in;
+-    -moz-animation-timing-function: ease-in;
+-    -o-animation-timing-function: ease-in;
+-    animation-timing-function: ease-in;
+-}
+-@-webkit-keyframes hinge {
+-	0% { -webkit-transform: rotate(0); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }	
+-	20%, 60% { -webkit-transform: rotate(80deg); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }	
+-	40% { -webkit-transform: rotate(60deg); -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }	
+-	80% { -webkit-transform: rotate(60deg) translateY(0); opacity: 1; -webkit-transform-origin: top left; -webkit-animation-timing-function: ease-in-out; }	
+-	100% { -webkit-transform: translateY(700px); opacity: 0; }
+-}
+-
+-@-moz-keyframes hinge {
+-	0% { -moz-transform: rotate(0); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; }	
+-	20%, 60% { -moz-transform: rotate(80deg); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; }	
+-	40% { -moz-transform: rotate(60deg); -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; }	
+-	80% { -moz-transform: rotate(60deg) translateY(0); opacity: 1; -moz-transform-origin: top left; -moz-animation-timing-function: ease-in-out; }	
+-	100% { -moz-transform: translateY(700px); opacity: 0; }
+-}
+-
+-@-o-keyframes hinge {
+-	0% { -o-transform: rotate(0); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; }	
+-	20%, 60% { -o-transform: rotate(80deg); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; }	
+-	40% { -o-transform: rotate(60deg); -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; }	
+-	80% { -o-transform: rotate(60deg) translateY(0); opacity: 1; -o-transform-origin: top left; -o-animation-timing-function: ease-in-out; }	
+-	100% { -o-transform: translateY(700px); opacity: 0; }
+-}
+-
+-@keyframes hinge {
+-	0% { transform: rotate(0); transform-origin: top left; animation-timing-function: ease-in-out; }	
+-	20%, 60% { transform: rotate(80deg); transform-origin: top left; animation-timing-function: ease-in-out; }	
+-	40% { transform: rotate(60deg); transform-origin: top left; animation-timing-function: ease-in-out; }	
+-	80% { transform: rotate(60deg) translateY(0); opacity: 1; transform-origin: top left; animation-timing-function: ease-in-out; }	
+-	100% { transform: translateY(700px); opacity: 0; }
+-}
+-
+-.hinge {
+-	-webkit-animation-name: hinge;
+-	-moz-animation-name: hinge;
+-	-o-animation-name: hinge;
+-	animation-name: hinge;
+-}
+-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+-
+-@-webkit-keyframes rollIn {
+-	0% { opacity: 0; -webkit-transform: translateX(-100%) rotate(-120deg); }
+-	100% { opacity: 1; -webkit-transform: translateX(0px) rotate(0deg); }
+-}
+-
+-@-moz-keyframes rollIn {
+-	0% { opacity: 0; -moz-transform: translateX(-100%) rotate(-120deg); }
+-	100% { opacity: 1; -moz-transform: translateX(0px) rotate(0deg); }
+-}
+-
+-@-o-keyframes rollIn {
+-	0% { opacity: 0; -o-transform: translateX(-100%) rotate(-120deg); }
+-	100% { opacity: 1; -o-transform: translateX(0px) rotate(0deg); }
+-}
+-
+-@keyframes rollIn {
+-	0% { opacity: 0; transform: translateX(-100%) rotate(-120deg); }
+-	100% { opacity: 1; transform: translateX(0px) rotate(0deg); }
+-}
+-
+-.rollIn {
+-	-webkit-animation-name: rollIn;
+-	-moz-animation-name: rollIn;
+-	-o-animation-name: rollIn;
+-	animation-name: rollIn;
+-}
+-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+-
+-@-webkit-keyframes rollOut {
+-    0% {
+-		opacity: 1;
+-		-webkit-transform: translateX(0px) rotate(0deg);
+-	}
+-
+-    100% {
+-		opacity: 0;
+-		-webkit-transform: translateX(100%) rotate(120deg);
+-	}
+-}
+-
+-@-moz-keyframes rollOut {
+-    0% {
+-		opacity: 1;
+-		-moz-transform: translateX(0px) rotate(0deg);
+-	}
+-
+-    100% {
+-		opacity: 0;
+-		-moz-transform: translateX(100%) rotate(120deg);
+-	}
+-}
+-
+-@-o-keyframes rollOut {
+-    0% {
+-		opacity: 1;
+-		-o-transform: translateX(0px) rotate(0deg);
+-	}
+-
+-    100% {
+-		opacity: 0;
+-		-o-transform: translateX(100%) rotate(120deg);
+-	}
+-}
+-
+-@keyframes rollOut {
+-    0% {
+-		opacity: 1;
+-		transform: translateX(0px) rotate(0deg);
+-	}
+-
+-    100% {
+-		opacity: 0;
+-		transform: translateX(100%) rotate(120deg);
+-	}
+-}
+-
+-.rollOut {
+-	-webkit-animation-name: rollOut;
+-	-moz-animation-name: rollOut;
+-	-o-animation-name: rollOut;
+-	animation-name: rollOut;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffffff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ef8c08_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_2e83ff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/border.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_888888_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_228ef1_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/globe.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_ffd27a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-icons_454545_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.core.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.core.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.core.css	(revision 15488)
+@@ -1,93 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden {
+-	display: none;
+-}
+-.ui-helper-hidden-accessible {
+-	border: 0;
+-	clip: rect(0 0 0 0);
+-	height: 1px;
+-	margin: -1px;
+-	overflow: hidden;
+-	padding: 0;
+-	position: absolute;
+-	width: 1px;
+-}
+-.ui-helper-reset {
+-	margin: 0;
+-	padding: 0;
+-	border: 0;
+-	outline: 0;
+-	line-height: 1.3;
+-	text-decoration: none;
+-	font-size: 100%;
+-	list-style: none;
+-}
+-.ui-helper-clearfix:before,
+-.ui-helper-clearfix:after {
+-	content: "";
+-	display: table;
+-	border-collapse: collapse;
+-}
+-.ui-helper-clearfix:after {
+-	clear: both;
+-}
+-.ui-helper-clearfix {
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-helper-zfix {
+-	width: 100%;
+-	height: 100%;
+-	top: 0;
+-	left: 0;
+-	position: absolute;
+-	opacity: 0;
+-	filter:Alpha(Opacity=0);
+-}
+-
+-.ui-front {
+-	z-index: 100;
+-}
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled {
+-	cursor: default !important;
+-}
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	display: block;
+-	text-indent: -99999px;
+-	overflow: hidden;
+-	background-repeat: no-repeat;
+-}
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	position: fixed;
+-	top: 0;
+-	left: 0;
+-	width: 100%;
+-	height: 100%;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.tabs.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.tabs.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.tabs.css	(revision 15488)
+@@ -1,52 +0,0 @@
+-/*!
+- * jQuery UI Tabs 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Tabs#theming
+- */
+-.ui-tabs {
+-	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-	padding: .2em;
+-}
+-.ui-tabs .ui-tabs-nav {
+-	margin: 0;
+-	padding: .2em .2em 0;
+-}
+-.ui-tabs .ui-tabs-nav li {
+-	list-style: none;
+-	float: left;
+-	position: relative;
+-	top: 0;
+-	margin: 1px .2em 0 0;
+-	border-bottom-width: 0;
+-	padding: 0;
+-	white-space: nowrap;
+-}
+-.ui-tabs .ui-tabs-nav li a {
+-	float: left;
+-	padding: .5em 1em;
+-	text-decoration: none;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+-	margin-bottom: -1px;
+-	padding-bottom: 1px;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+-	cursor: text;
+-}
+-.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+-	cursor: pointer;
+-}
+-.ui-tabs .ui-tabs-panel {
+-	display: block;
+-	border-width: 0;
+-	padding: 1em 1.4em;
+-	background: none;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.progressbar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.progressbar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.progressbar.css	(revision 15488)
+@@ -1,28 +0,0 @@
+-/*!
+- * jQuery UI Progressbar 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Progressbar#theming
+- */
+-.ui-progressbar {
+-	height: 2em;
+-	text-align: left;
+-	overflow: hidden;
+-}
+-.ui-progressbar .ui-progressbar-value {
+-	margin: -1px;
+-	height: 100%;
+-}
+-.ui-progressbar .ui-progressbar-overlay {
+-	background: url("images/animated-overlay.gif");
+-	height: 100%;
+-	filter: alpha(opacity=25);
+-	opacity: 0.25;
+-}
+-.ui-progressbar-indeterminate .ui-progressbar-value {
+-	background-image: none;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.tooltip.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.tooltip.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.tooltip.css	(revision 15488)
+@@ -1,19 +0,0 @@
+-/*!
+- * jQuery UI Tooltip 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- */
+-.ui-tooltip {
+-	padding: 8px;
+-	position: absolute;
+-	z-index: 9999;
+-	max-width: 300px;
+-	-webkit-box-shadow: 0 0 5px #aaa;
+-	box-shadow: 0 0 5px #aaa;
+-}
+-body .ui-tooltip {
+-	border-width: 2px;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.dialog.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.dialog.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.dialog.css	(revision 15488)
+@@ -1,69 +0,0 @@
+-/*!
+- * jQuery UI Dialog 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Dialog#theming
+- */
+-.ui-dialog {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	padding: .2em;
+-	outline: 0;
+-}
+-.ui-dialog .ui-dialog-titlebar {
+-	padding: .4em 1em;
+-	position: relative;
+-}
+-.ui-dialog .ui-dialog-title {
+-	float: left;
+-	margin: .1em 0;
+-	white-space: nowrap;
+-	width: 90%;
+-	overflow: hidden;
+-	text-overflow: ellipsis;
+-}
+-.ui-dialog .ui-dialog-titlebar-close {
+-	position: absolute;
+-	right: .3em;
+-	top: 50%;
+-	width: 21px;
+-	margin: -10px 0 0 0;
+-	padding: 1px;
+-	height: 20px;
+-}
+-.ui-dialog .ui-dialog-content {
+-	position: relative;
+-	border: 0;
+-	padding: .5em 1em;
+-	background: none;
+-	overflow: auto;
+-}
+-.ui-dialog .ui-dialog-buttonpane {
+-	text-align: left;
+-	border-width: 1px 0 0 0;
+-	background-image: none;
+-	margin-top: .5em;
+-	padding: .3em 1em .5em .4em;
+-}
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+-	float: right;
+-}
+-.ui-dialog .ui-dialog-buttonpane button {
+-	margin: .5em .4em .5em 0;
+-	cursor: pointer;
+-}
+-.ui-dialog .ui-resizable-se {
+-	width: 12px;
+-	height: 12px;
+-	right: -5px;
+-	bottom: -5px;
+-	background-position: 16px 16px;
+-}
+-.ui-draggable .ui-dialog-titlebar {
+-	cursor: move;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery-ui.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery-ui.css	(revision 15488)
+@@ -1,1176 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden {
+-	display: none;
+-}
+-.ui-helper-hidden-accessible {
+-	border: 0;
+-	clip: rect(0 0 0 0);
+-	height: 1px;
+-	margin: -1px;
+-	overflow: hidden;
+-	padding: 0;
+-	position: absolute;
+-	width: 1px;
+-}
+-.ui-helper-reset {
+-	margin: 0;
+-	padding: 0;
+-	border: 0;
+-	outline: 0;
+-	line-height: 1.3;
+-	text-decoration: none;
+-	font-size: 100%;
+-	list-style: none;
+-}
+-.ui-helper-clearfix:before,
+-.ui-helper-clearfix:after {
+-	content: "";
+-	display: table;
+-	border-collapse: collapse;
+-}
+-.ui-helper-clearfix:after {
+-	clear: both;
+-}
+-.ui-helper-clearfix {
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-helper-zfix {
+-	width: 100%;
+-	height: 100%;
+-	top: 0;
+-	left: 0;
+-	position: absolute;
+-	opacity: 0;
+-	filter:Alpha(Opacity=0);
+-}
+-
+-.ui-front {
+-	z-index: 100;
+-}
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled {
+-	cursor: default !important;
+-}
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	display: block;
+-	text-indent: -99999px;
+-	overflow: hidden;
+-	background-repeat: no-repeat;
+-}
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	position: fixed;
+-	top: 0;
+-	left: 0;
+-	width: 100%;
+-	height: 100%;
+-}
+-.ui-resizable {
+-	position: relative;
+-}
+-.ui-resizable-handle {
+-	position: absolute;
+-	font-size: 0.1px;
+-	display: block;
+-}
+-.ui-resizable-disabled .ui-resizable-handle,
+-.ui-resizable-autohide .ui-resizable-handle {
+-	display: none;
+-}
+-.ui-resizable-n {
+-	cursor: n-resize;
+-	height: 7px;
+-	width: 100%;
+-	top: -5px;
+-	left: 0;
+-}
+-.ui-resizable-s {
+-	cursor: s-resize;
+-	height: 7px;
+-	width: 100%;
+-	bottom: -5px;
+-	left: 0;
+-}
+-.ui-resizable-e {
+-	cursor: e-resize;
+-	width: 7px;
+-	right: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-w {
+-	cursor: w-resize;
+-	width: 7px;
+-	left: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-se {
+-	cursor: se-resize;
+-	width: 12px;
+-	height: 12px;
+-	right: 1px;
+-	bottom: 1px;
+-}
+-.ui-resizable-sw {
+-	cursor: sw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	bottom: -5px;
+-}
+-.ui-resizable-nw {
+-	cursor: nw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	top: -5px;
+-}
+-.ui-resizable-ne {
+-	cursor: ne-resize;
+-	width: 9px;
+-	height: 9px;
+-	right: -5px;
+-	top: -5px;
+-}
+-.ui-selectable-helper {
+-	position: absolute;
+-	z-index: 100;
+-	border: 1px dotted black;
+-}
+-.ui-accordion .ui-accordion-header {
+-	display: block;
+-	cursor: pointer;
+-	position: relative;
+-	margin-top: 2px;
+-	padding: .5em .5em .5em .7em;
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-accordion .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-noicons {
+-	padding-left: .7em;
+-}
+-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+-	position: absolute;
+-	left: .5em;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-accordion .ui-accordion-content {
+-	padding: 1em 2.2em;
+-	border-top: 0;
+-	overflow: auto;
+-}
+-.ui-autocomplete {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	cursor: default;
+-}
+-.ui-button {
+-	display: inline-block;
+-	position: relative;
+-	padding: 0;
+-	line-height: normal;
+-	margin-right: .1em;
+-	cursor: pointer;
+-	vertical-align: middle;
+-	text-align: center;
+-	overflow: visible; /* removes extra width in IE */
+-}
+-.ui-button,
+-.ui-button:link,
+-.ui-button:visited,
+-.ui-button:hover,
+-.ui-button:active {
+-	text-decoration: none;
+-}
+-/* to make room for the icon, a width needs to be set here */
+-.ui-button-icon-only {
+-	width: 2.2em;
+-}
+-/* button elements seem to need a little more width */
+-button.ui-button-icon-only {
+-	width: 2.4em;
+-}
+-.ui-button-icons-only {
+-	width: 3.4em;
+-}
+-button.ui-button-icons-only {
+-	width: 3.7em;
+-}
+-
+-/* button text element */
+-.ui-button .ui-button-text {
+-	display: block;
+-	line-height: normal;
+-}
+-.ui-button-text-only .ui-button-text {
+-	padding: .4em 1em;
+-}
+-.ui-button-icon-only .ui-button-text,
+-.ui-button-icons-only .ui-button-text {
+-	padding: .4em;
+-	text-indent: -9999999px;
+-}
+-.ui-button-text-icon-primary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 1em .4em 2.1em;
+-}
+-.ui-button-text-icon-secondary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 2.1em .4em 1em;
+-}
+-.ui-button-text-icons .ui-button-text {
+-	padding-left: 2.1em;
+-	padding-right: 2.1em;
+-}
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button {
+-	padding: .4em 1em;
+-}
+-
+-/* button icon element(s) */
+-.ui-button-icon-only .ui-icon,
+-.ui-button-text-icon-primary .ui-icon,
+-.ui-button-text-icon-secondary .ui-icon,
+-.ui-button-text-icons .ui-icon,
+-.ui-button-icons-only .ui-icon {
+-	position: absolute;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-button-icon-only .ui-icon {
+-	left: 50%;
+-	margin-left: -8px;
+-}
+-.ui-button-text-icon-primary .ui-button-icon-primary,
+-.ui-button-text-icons .ui-button-icon-primary,
+-.ui-button-icons-only .ui-button-icon-primary {
+-	left: .5em;
+-}
+-.ui-button-text-icon-secondary .ui-button-icon-secondary,
+-.ui-button-text-icons .ui-button-icon-secondary,
+-.ui-button-icons-only .ui-button-icon-secondary {
+-	right: .5em;
+-}
+-
+-/* button sets */
+-.ui-buttonset {
+-	margin-right: 7px;
+-}
+-.ui-buttonset .ui-button {
+-	margin-left: 0;
+-	margin-right: -.3em;
+-}
+-
+-/* workarounds */
+-/* reset extra padding in Firefox, see h5bp.com/l */
+-input.ui-button::-moz-focus-inner,
+-button.ui-button::-moz-focus-inner {
+-	border: 0;
+-	padding: 0;
+-}
+-.ui-datepicker {
+-	width: 17em;
+-	padding: .2em .2em 0;
+-	display: none;
+-}
+-.ui-datepicker .ui-datepicker-header {
+-	position: relative;
+-	padding: .2em 0;
+-}
+-.ui-datepicker .ui-datepicker-prev,
+-.ui-datepicker .ui-datepicker-next {
+-	position: absolute;
+-	top: 2px;
+-	width: 1.8em;
+-	height: 1.8em;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover,
+-.ui-datepicker .ui-datepicker-next-hover {
+-	top: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev {
+-	left: 2px;
+-}
+-.ui-datepicker .ui-datepicker-next {
+-	right: 2px;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover {
+-	left: 1px;
+-}
+-.ui-datepicker .ui-datepicker-next-hover {
+-	right: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev span,
+-.ui-datepicker .ui-datepicker-next span {
+-	display: block;
+-	position: absolute;
+-	left: 50%;
+-	margin-left: -8px;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-datepicker .ui-datepicker-title {
+-	margin: 0 2.3em;
+-	line-height: 1.8em;
+-	text-align: center;
+-}
+-.ui-datepicker .ui-datepicker-title select {
+-	font-size: 1em;
+-	margin: 1px 0;
+-}
+-.ui-datepicker select.ui-datepicker-month-year {
+-	width: 100%;
+-}
+-.ui-datepicker select.ui-datepicker-month,
+-.ui-datepicker select.ui-datepicker-year {
+-	width: 49%;
+-}
+-.ui-datepicker table {
+-	width: 100%;
+-	font-size: .9em;
+-	border-collapse: collapse;
+-	margin: 0 0 .4em;
+-}
+-.ui-datepicker th {
+-	padding: .7em .3em;
+-	text-align: center;
+-	font-weight: bold;
+-	border: 0;
+-}
+-.ui-datepicker td {
+-	border: 0;
+-	padding: 1px;
+-}
+-.ui-datepicker td span,
+-.ui-datepicker td a {
+-	display: block;
+-	padding: .2em;
+-	text-align: right;
+-	text-decoration: none;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane {
+-	background-image: none;
+-	margin: .7em 0 0 0;
+-	padding: 0 .2em;
+-	border-left: 0;
+-	border-right: 0;
+-	border-bottom: 0;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button {
+-	float: right;
+-	margin: .5em .2em .4em;
+-	cursor: pointer;
+-	padding: .2em .6em .3em .6em;
+-	width: auto;
+-	overflow: visible;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+-	float: left;
+-}
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi {
+-	width: auto;
+-}
+-.ui-datepicker-multi .ui-datepicker-group {
+-	float: left;
+-}
+-.ui-datepicker-multi .ui-datepicker-group table {
+-	width: 95%;
+-	margin: 0 auto .4em;
+-}
+-.ui-datepicker-multi-2 .ui-datepicker-group {
+-	width: 50%;
+-}
+-.ui-datepicker-multi-3 .ui-datepicker-group {
+-	width: 33.3%;
+-}
+-.ui-datepicker-multi-4 .ui-datepicker-group {
+-	width: 25%;
+-}
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-left-width: 0;
+-}
+-.ui-datepicker-multi .ui-datepicker-buttonpane {
+-	clear: left;
+-}
+-.ui-datepicker-row-break {
+-	clear: both;
+-	width: 100%;
+-	font-size: 0;
+-}
+-
+-/* RTL support */
+-.ui-datepicker-rtl {
+-	direction: rtl;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev {
+-	right: 2px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next {
+-	left: 2px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev:hover {
+-	right: 1px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next:hover {
+-	left: 1px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane {
+-	clear: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+-	float: left;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+-.ui-datepicker-rtl .ui-datepicker-group {
+-	float: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-right-width: 0;
+-	border-left-width: 1px;
+-}
+-.ui-dialog {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	padding: .2em;
+-	outline: 0;
+-}
+-.ui-dialog .ui-dialog-titlebar {
+-	padding: .4em 1em;
+-	position: relative;
+-}
+-.ui-dialog .ui-dialog-title {
+-	float: left;
+-	margin: .1em 0;
+-	white-space: nowrap;
+-	width: 90%;
+-	overflow: hidden;
+-	text-overflow: ellipsis;
+-}
+-.ui-dialog .ui-dialog-titlebar-close {
+-	position: absolute;
+-	right: .3em;
+-	top: 50%;
+-	width: 21px;
+-	margin: -10px 0 0 0;
+-	padding: 1px;
+-	height: 20px;
+-}
+-.ui-dialog .ui-dialog-content {
+-	position: relative;
+-	border: 0;
+-	padding: .5em 1em;
+-	background: none;
+-	overflow: auto;
+-}
+-.ui-dialog .ui-dialog-buttonpane {
+-	text-align: left;
+-	border-width: 1px 0 0 0;
+-	background-image: none;
+-	margin-top: .5em;
+-	padding: .3em 1em .5em .4em;
+-}
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+-	float: right;
+-}
+-.ui-dialog .ui-dialog-buttonpane button {
+-	margin: .5em .4em .5em 0;
+-	cursor: pointer;
+-}
+-.ui-dialog .ui-resizable-se {
+-	width: 12px;
+-	height: 12px;
+-	right: -5px;
+-	bottom: -5px;
+-	background-position: 16px 16px;
+-}
+-.ui-draggable .ui-dialog-titlebar {
+-	cursor: move;
+-}
+-.ui-menu {
+-	list-style: none;
+-	padding: 2px;
+-	margin: 0;
+-	display: block;
+-	outline: none;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-	position: absolute;
+-}
+-.ui-menu .ui-menu-item {
+-	margin: 0;
+-	padding: 0;
+-	width: 100%;
+-	/* support: IE10, see #8844 */
+-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+-}
+-.ui-menu .ui-menu-divider {
+-	margin: 5px -2px 5px -2px;
+-	height: 0;
+-	font-size: 0;
+-	line-height: 0;
+-	border-width: 1px 0 0 0;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration: none;
+-	display: block;
+-	padding: 2px .4em;
+-	line-height: 1.5;
+-	min-height: 0; /* support: IE7 */
+-	font-weight: normal;
+-}
+-.ui-menu .ui-menu-item a.ui-state-focus,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-
+-.ui-menu .ui-state-disabled {
+-	font-weight: normal;
+-	margin: .4em 0 .2em;
+-	line-height: 1.5;
+-}
+-.ui-menu .ui-state-disabled a {
+-	cursor: default;
+-}
+-
+-/* icon support */
+-.ui-menu-icons {
+-	position: relative;
+-}
+-.ui-menu-icons .ui-menu-item a {
+-	position: relative;
+-	padding-left: 2em;
+-}
+-
+-/* left-aligned */
+-.ui-menu .ui-icon {
+-	position: absolute;
+-	top: .2em;
+-	left: .2em;
+-}
+-
+-/* right-aligned */
+-.ui-menu .ui-menu-icon {
+-	position: static;
+-	float: right;
+-}
+-.ui-progressbar {
+-	height: 2em;
+-	text-align: left;
+-	overflow: hidden;
+-}
+-.ui-progressbar .ui-progressbar-value {
+-	margin: -1px;
+-	height: 100%;
+-}
+-.ui-progressbar .ui-progressbar-overlay {
+-	background: url("images/animated-overlay.gif");
+-	height: 100%;
+-	filter: alpha(opacity=25);
+-	opacity: 0.25;
+-}
+-.ui-progressbar-indeterminate .ui-progressbar-value {
+-	background-image: none;
+-}
+-.ui-slider {
+-	position: relative;
+-	text-align: left;
+-}
+-.ui-slider .ui-slider-handle {
+-	position: absolute;
+-	z-index: 2;
+-	width: 1.2em;
+-	height: 1.2em;
+-	cursor: default;
+-}
+-.ui-slider .ui-slider-range {
+-	position: absolute;
+-	z-index: 1;
+-	font-size: .7em;
+-	display: block;
+-	border: 0;
+-	background-position: 0 0;
+-}
+-
+-/* For IE8 - See #6727 */
+-.ui-slider.ui-state-disabled .ui-slider-handle,
+-.ui-slider.ui-state-disabled .ui-slider-range {
+-	filter: inherit;
+-}
+-
+-.ui-slider-horizontal {
+-	height: .8em;
+-}
+-.ui-slider-horizontal .ui-slider-handle {
+-	top: -.3em;
+-	margin-left: -.6em;
+-}
+-.ui-slider-horizontal .ui-slider-range {
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-slider-horizontal .ui-slider-range-min {
+-	left: 0;
+-}
+-.ui-slider-horizontal .ui-slider-range-max {
+-	right: 0;
+-}
+-
+-.ui-slider-vertical {
+-	width: .8em;
+-	height: 100px;
+-}
+-.ui-slider-vertical .ui-slider-handle {
+-	left: -.3em;
+-	margin-left: 0;
+-	margin-bottom: -.6em;
+-}
+-.ui-slider-vertical .ui-slider-range {
+-	left: 0;
+-	width: 100%;
+-}
+-.ui-slider-vertical .ui-slider-range-min {
+-	bottom: 0;
+-}
+-.ui-slider-vertical .ui-slider-range-max {
+-	top: 0;
+-}
+-.ui-spinner {
+-	position: relative;
+-	display: inline-block;
+-	overflow: hidden;
+-	padding: 0;
+-	vertical-align: middle;
+-}
+-.ui-spinner-input {
+-	border: none;
+-	background: none;
+-	color: inherit;
+-	padding: 0;
+-	margin: .2em 0;
+-	vertical-align: middle;
+-	margin-left: .4em;
+-	margin-right: 22px;
+-}
+-.ui-spinner-button {
+-	width: 16px;
+-	height: 50%;
+-	font-size: .5em;
+-	padding: 0;
+-	margin: 0;
+-	text-align: center;
+-	position: absolute;
+-	cursor: default;
+-	display: block;
+-	overflow: hidden;
+-	right: 0;
+-}
+-/* more specificity required here to overide default borders */
+-.ui-spinner a.ui-spinner-button {
+-	border-top: none;
+-	border-bottom: none;
+-	border-right: none;
+-}
+-/* vertical centre icon */
+-.ui-spinner .ui-icon {
+-	position: absolute;
+-	margin-top: -8px;
+-	top: 50%;
+-	left: 0;
+-}
+-.ui-spinner-up {
+-	top: 0;
+-}
+-.ui-spinner-down {
+-	bottom: 0;
+-}
+-
+-/* TR overrides */
+-.ui-spinner .ui-icon-triangle-1-s {
+-	/* need to fix icons sprite */
+-	background-position: -65px -16px;
+-}
+-.ui-tabs {
+-	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-	padding: .2em;
+-}
+-.ui-tabs .ui-tabs-nav {
+-	margin: 0;
+-	padding: .2em .2em 0;
+-}
+-.ui-tabs .ui-tabs-nav li {
+-	list-style: none;
+-	float: left;
+-	position: relative;
+-	top: 0;
+-	margin: 1px .2em 0 0;
+-	border-bottom-width: 0;
+-	padding: 0;
+-	white-space: nowrap;
+-}
+-.ui-tabs .ui-tabs-nav li a {
+-	float: left;
+-	padding: .5em 1em;
+-	text-decoration: none;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+-	margin-bottom: -1px;
+-	padding-bottom: 1px;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+-	cursor: text;
+-}
+-.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+-	cursor: pointer;
+-}
+-.ui-tabs .ui-tabs-panel {
+-	display: block;
+-	border-width: 0;
+-	padding: 1em 1.4em;
+-	background: none;
+-}
+-.ui-tooltip {
+-	padding: 8px;
+-	position: absolute;
+-	z-index: 9999;
+-	max-width: 300px;
+-	-webkit-box-shadow: 0 0 5px #aaa;
+-	box-shadow: 0 0 5px #aaa;
+-}
+-body .ui-tooltip {
+-	border-width: 2px;
+-}
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget {
+-	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+-	font-size: 1.1em/*{fsDefault}*/;
+-}
+-.ui-widget .ui-widget {
+-	font-size: 1em;
+-}
+-.ui-widget input,
+-.ui-widget select,
+-.ui-widget textarea,
+-.ui-widget button {
+-	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+-	font-size: 1em;
+-}
+-.ui-widget-content {
+-	border: 1px solid #aaaaaa/*{borderColorContent}*/;
+-	background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
+-	color: #222222/*{fcContent}*/;
+-}
+-.ui-widget-content a {
+-	color: #222222/*{fcContent}*/;
+-}
+-.ui-widget-header {
+-	border: 1px solid #aaaaaa/*{borderColorHeader}*/;
+-	background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
+-	color: #222222/*{fcHeader}*/;
+-	font-weight: bold;
+-}
+-.ui-widget-header a {
+-	color: #222222/*{fcHeader}*/;
+-}
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default,
+-.ui-widget-content .ui-state-default,
+-.ui-widget-header .ui-state-default {
+-	border: 1px solid #d3d3d3/*{borderColorDefault}*/;
+-	background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #555555/*{fcDefault}*/;
+-}
+-.ui-state-default a,
+-.ui-state-default a:link,
+-.ui-state-default a:visited {
+-	color: #555555/*{fcDefault}*/;
+-	text-decoration: none;
+-}
+-.ui-state-hover,
+-.ui-widget-content .ui-state-hover,
+-.ui-widget-header .ui-state-hover,
+-.ui-state-focus,
+-.ui-widget-content .ui-state-focus,
+-.ui-widget-header .ui-state-focus {
+-	border: 1px solid #999999/*{borderColorHover}*/;
+-	background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #212121/*{fcHover}*/;
+-}
+-.ui-state-hover a,
+-.ui-state-hover a:hover,
+-.ui-state-hover a:link,
+-.ui-state-hover a:visited {
+-	color: #212121/*{fcHover}*/;
+-	text-decoration: none;
+-}
+-.ui-state-active,
+-.ui-widget-content .ui-state-active,
+-.ui-widget-header .ui-state-active {
+-	border: 1px solid #aaaaaa/*{borderColorActive}*/;
+-	background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #212121/*{fcActive}*/;
+-}
+-.ui-state-active a,
+-.ui-state-active a:link,
+-.ui-state-active a:visited {
+-	color: #212121/*{fcActive}*/;
+-	text-decoration: none;
+-}
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight,
+-.ui-widget-content .ui-state-highlight,
+-.ui-widget-header .ui-state-highlight {
+-	border: 1px solid #fcefa1/*{borderColorHighlight}*/;
+-	background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
+-	color: #363636/*{fcHighlight}*/;
+-}
+-.ui-state-highlight a,
+-.ui-widget-content .ui-state-highlight a,
+-.ui-widget-header .ui-state-highlight a {
+-	color: #363636/*{fcHighlight}*/;
+-}
+-.ui-state-error,
+-.ui-widget-content .ui-state-error,
+-.ui-widget-header .ui-state-error {
+-	border: 1px solid #cd0a0a/*{borderColorError}*/;
+-	background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-state-error a,
+-.ui-widget-content .ui-state-error a,
+-.ui-widget-header .ui-state-error a {
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-state-error-text,
+-.ui-widget-content .ui-state-error-text,
+-.ui-widget-header .ui-state-error-text {
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-priority-primary,
+-.ui-widget-content .ui-priority-primary,
+-.ui-widget-header .ui-priority-primary {
+-	font-weight: bold;
+-}
+-.ui-priority-secondary,
+-.ui-widget-content .ui-priority-secondary,
+-.ui-widget-header .ui-priority-secondary {
+-	opacity: .7;
+-	filter:Alpha(Opacity=70);
+-	font-weight: normal;
+-}
+-.ui-state-disabled,
+-.ui-widget-content .ui-state-disabled,
+-.ui-widget-header .ui-state-disabled {
+-	opacity: .35;
+-	filter:Alpha(Opacity=35);
+-	background-image: none;
+-}
+-.ui-state-disabled .ui-icon {
+-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+-}
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	width: 16px;
+-	height: 16px;
+-}
+-.ui-icon,
+-.ui-widget-content .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
+-}
+-.ui-widget-header .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
+-}
+-.ui-state-default .ui-icon {
+-	background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
+-}
+-.ui-state-hover .ui-icon,
+-.ui-state-focus .ui-icon {
+-	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
+-}
+-.ui-state-active .ui-icon {
+-	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
+-}
+-.ui-state-highlight .ui-icon {
+-	background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
+-}
+-.ui-state-error .ui-icon,
+-.ui-state-error-text .ui-icon {
+-	background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
+-}
+-
+-/* positioning */
+-.ui-icon-blank { background-position: 16px 16px; }
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-on { background-position: -96px -144px; }
+-.ui-icon-radio-off { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-left,
+-.ui-corner-tl {
+-	border-top-left-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-right,
+-.ui-corner-tr {
+-	border-top-right-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-left,
+-.ui-corner-bl {
+-	border-bottom-left-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-right,
+-.ui-corner-br {
+-	border-bottom-right-radius: 4px/*{cornerRadius}*/;
+-}
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
+-	opacity: .3/*{opacityOverlay}*/;
+-	filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
+-}
+-.ui-widget-shadow {
+-	margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
+-	padding: 8px/*{thicknessShadow}*/;
+-	background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
+-	opacity: .3/*{opacityShadow}*/;
+-	filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
+-	border-radius: 8px/*{cornerRadiusShadow}*/;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.autocomplete.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.autocomplete.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.autocomplete.css	(revision 15488)
+@@ -1,16 +0,0 @@
+-/*!
+- * jQuery UI Autocomplete 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Autocomplete#theming
+- */
+-.ui-autocomplete {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	cursor: default;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.accordion.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.accordion.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.accordion.css	(revision 15488)
+@@ -1,38 +0,0 @@
+-/*!
+- * jQuery UI Accordion 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Accordion#theming
+- */
+-.ui-accordion .ui-accordion-header {
+-	display: block;
+-	cursor: pointer;
+-	position: relative;
+-	margin-top: 2px;
+-	padding: .5em .5em .5em .7em;
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-accordion .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-noicons {
+-	padding-left: .7em;
+-}
+-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+-	position: absolute;
+-	left: .5em;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-accordion .ui-accordion-content {
+-	padding: 1em 2.2em;
+-	border-top: 0;
+-	overflow: auto;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.theme.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.theme.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.theme.css	(revision 15488)
+@@ -1,406 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- *
+- * To view and modify this theme, visit http://jqueryui.com/themeroller/
+- */
+-
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget {
+-	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+-	font-size: 1.1em/*{fsDefault}*/;
+-}
+-.ui-widget .ui-widget {
+-	font-size: 1em;
+-}
+-.ui-widget input,
+-.ui-widget select,
+-.ui-widget textarea,
+-.ui-widget button {
+-	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+-	font-size: 1em;
+-}
+-.ui-widget-content {
+-	border: 1px solid #aaaaaa/*{borderColorContent}*/;
+-	background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
+-	color: #222222/*{fcContent}*/;
+-}
+-.ui-widget-content a {
+-	color: #222222/*{fcContent}*/;
+-}
+-.ui-widget-header {
+-	border: 1px solid #aaaaaa/*{borderColorHeader}*/;
+-	background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
+-	color: #222222/*{fcHeader}*/;
+-	font-weight: bold;
+-}
+-.ui-widget-header a {
+-	color: #222222/*{fcHeader}*/;
+-}
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default,
+-.ui-widget-content .ui-state-default,
+-.ui-widget-header .ui-state-default {
+-	border: 1px solid #d3d3d3/*{borderColorDefault}*/;
+-	background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #555555/*{fcDefault}*/;
+-}
+-.ui-state-default a,
+-.ui-state-default a:link,
+-.ui-state-default a:visited {
+-	color: #555555/*{fcDefault}*/;
+-	text-decoration: none;
+-}
+-.ui-state-hover,
+-.ui-widget-content .ui-state-hover,
+-.ui-widget-header .ui-state-hover,
+-.ui-state-focus,
+-.ui-widget-content .ui-state-focus,
+-.ui-widget-header .ui-state-focus {
+-	border: 1px solid #999999/*{borderColorHover}*/;
+-	background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #212121/*{fcHover}*/;
+-}
+-.ui-state-hover a,
+-.ui-state-hover a:hover,
+-.ui-state-hover a:link,
+-.ui-state-hover a:visited {
+-	color: #212121/*{fcHover}*/;
+-	text-decoration: none;
+-}
+-.ui-state-active,
+-.ui-widget-content .ui-state-active,
+-.ui-widget-header .ui-state-active {
+-	border: 1px solid #aaaaaa/*{borderColorActive}*/;
+-	background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #212121/*{fcActive}*/;
+-}
+-.ui-state-active a,
+-.ui-state-active a:link,
+-.ui-state-active a:visited {
+-	color: #212121/*{fcActive}*/;
+-	text-decoration: none;
+-}
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight,
+-.ui-widget-content .ui-state-highlight,
+-.ui-widget-header .ui-state-highlight {
+-	border: 1px solid #fcefa1/*{borderColorHighlight}*/;
+-	background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
+-	color: #363636/*{fcHighlight}*/;
+-}
+-.ui-state-highlight a,
+-.ui-widget-content .ui-state-highlight a,
+-.ui-widget-header .ui-state-highlight a {
+-	color: #363636/*{fcHighlight}*/;
+-}
+-.ui-state-error,
+-.ui-widget-content .ui-state-error,
+-.ui-widget-header .ui-state-error {
+-	border: 1px solid #cd0a0a/*{borderColorError}*/;
+-	background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-state-error a,
+-.ui-widget-content .ui-state-error a,
+-.ui-widget-header .ui-state-error a {
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-state-error-text,
+-.ui-widget-content .ui-state-error-text,
+-.ui-widget-header .ui-state-error-text {
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-priority-primary,
+-.ui-widget-content .ui-priority-primary,
+-.ui-widget-header .ui-priority-primary {
+-	font-weight: bold;
+-}
+-.ui-priority-secondary,
+-.ui-widget-content .ui-priority-secondary,
+-.ui-widget-header .ui-priority-secondary {
+-	opacity: .7;
+-	filter:Alpha(Opacity=70);
+-	font-weight: normal;
+-}
+-.ui-state-disabled,
+-.ui-widget-content .ui-state-disabled,
+-.ui-widget-header .ui-state-disabled {
+-	opacity: .35;
+-	filter:Alpha(Opacity=35);
+-	background-image: none;
+-}
+-.ui-state-disabled .ui-icon {
+-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+-}
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	width: 16px;
+-	height: 16px;
+-}
+-.ui-icon,
+-.ui-widget-content .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
+-}
+-.ui-widget-header .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
+-}
+-.ui-state-default .ui-icon {
+-	background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
+-}
+-.ui-state-hover .ui-icon,
+-.ui-state-focus .ui-icon {
+-	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
+-}
+-.ui-state-active .ui-icon {
+-	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
+-}
+-.ui-state-highlight .ui-icon {
+-	background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
+-}
+-.ui-state-error .ui-icon,
+-.ui-state-error-text .ui-icon {
+-	background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
+-}
+-
+-/* positioning */
+-.ui-icon-blank { background-position: 16px 16px; }
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-on { background-position: -96px -144px; }
+-.ui-icon-radio-off { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-left,
+-.ui-corner-tl {
+-	border-top-left-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-right,
+-.ui-corner-tr {
+-	border-top-right-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-left,
+-.ui-corner-bl {
+-	border-bottom-left-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-right,
+-.ui-corner-br {
+-	border-bottom-right-radius: 4px/*{cornerRadius}*/;
+-}
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
+-	opacity: .3/*{opacityOverlay}*/;
+-	filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
+-}
+-.ui-widget-shadow {
+-	margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
+-	padding: 8px/*{thicknessShadow}*/;
+-	background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
+-	opacity: .3/*{opacityShadow}*/;
+-	filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
+-	border-radius: 8px/*{cornerRadiusShadow}*/;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.selectable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.selectable.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.selectable.css	(revision 15488)
+@@ -1,15 +0,0 @@
+-/*!
+- * jQuery UI Selectable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Selectable#theming
+- */
+-.ui-selectable-helper {
+-	position: absolute;
+-	z-index: 100;
+-	border: 1px dotted black;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.menu.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.menu.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.menu.css	(revision 15488)
+@@ -1,79 +0,0 @@
+-/*!
+- * jQuery UI Menu 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Menu#theming
+- */
+-.ui-menu {
+-	list-style: none;
+-	padding: 2px;
+-	margin: 0;
+-	display: block;
+-	outline: none;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-	position: absolute;
+-}
+-.ui-menu .ui-menu-item {
+-	margin: 0;
+-	padding: 0;
+-	width: 100%;
+-	/* support: IE10, see #8844 */
+-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+-}
+-.ui-menu .ui-menu-divider {
+-	margin: 5px -2px 5px -2px;
+-	height: 0;
+-	font-size: 0;
+-	line-height: 0;
+-	border-width: 1px 0 0 0;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration: none;
+-	display: block;
+-	padding: 2px .4em;
+-	line-height: 1.5;
+-	min-height: 0; /* support: IE7 */
+-	font-weight: normal;
+-}
+-.ui-menu .ui-menu-item a.ui-state-focus,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-
+-.ui-menu .ui-state-disabled {
+-	font-weight: normal;
+-	margin: .4em 0 .2em;
+-	line-height: 1.5;
+-}
+-.ui-menu .ui-state-disabled a {
+-	cursor: default;
+-}
+-
+-/* icon support */
+-.ui-menu-icons {
+-	position: relative;
+-}
+-.ui-menu-icons .ui-menu-item a {
+-	position: relative;
+-	padding-left: 2em;
+-}
+-
+-/* left-aligned */
+-.ui-menu .ui-icon {
+-	position: absolute;
+-	top: .2em;
+-	left: .2em;
+-}
+-
+-/* right-aligned */
+-.ui-menu .ui-menu-icon {
+-	position: static;
+-	float: right;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.all.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.all.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.all.css	(revision 15488)
+@@ -1,12 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming
+- */
+-@import "jquery.ui.base.css";
+-@import "jquery.ui.theme.css";
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.base.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.base.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.base.css	(revision 15488)
+@@ -1,25 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming
+- */
+-@import url("jquery.ui.core.css");
+-
+-@import url("jquery.ui.accordion.css");
+-@import url("jquery.ui.autocomplete.css");
+-@import url("jquery.ui.button.css");
+-@import url("jquery.ui.datepicker.css");
+-@import url("jquery.ui.dialog.css");
+-@import url("jquery.ui.menu.css");
+-@import url("jquery.ui.progressbar.css");
+-@import url("jquery.ui.resizable.css");
+-@import url("jquery.ui.selectable.css");
+-@import url("jquery.ui.slider.css");
+-@import url("jquery.ui.spinner.css");
+-@import url("jquery.ui.tabs.css");
+-@import url("jquery.ui.tooltip.css");
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.button.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.button.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.button.css	(revision 15488)
+@@ -1,114 +0,0 @@
+-/*!
+- * jQuery UI Button 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Button#theming
+- */
+-.ui-button {
+-	display: inline-block;
+-	position: relative;
+-	padding: 0;
+-	line-height: normal;
+-	margin-right: .1em;
+-	cursor: pointer;
+-	vertical-align: middle;
+-	text-align: center;
+-	overflow: visible; /* removes extra width in IE */
+-}
+-.ui-button,
+-.ui-button:link,
+-.ui-button:visited,
+-.ui-button:hover,
+-.ui-button:active {
+-	text-decoration: none;
+-}
+-/* to make room for the icon, a width needs to be set here */
+-.ui-button-icon-only {
+-	width: 2.2em;
+-}
+-/* button elements seem to need a little more width */
+-button.ui-button-icon-only {
+-	width: 2.4em;
+-}
+-.ui-button-icons-only {
+-	width: 3.4em;
+-}
+-button.ui-button-icons-only {
+-	width: 3.7em;
+-}
+-
+-/* button text element */
+-.ui-button .ui-button-text {
+-	display: block;
+-	line-height: normal;
+-}
+-.ui-button-text-only .ui-button-text {
+-	padding: .4em 1em;
+-}
+-.ui-button-icon-only .ui-button-text,
+-.ui-button-icons-only .ui-button-text {
+-	padding: .4em;
+-	text-indent: -9999999px;
+-}
+-.ui-button-text-icon-primary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 1em .4em 2.1em;
+-}
+-.ui-button-text-icon-secondary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 2.1em .4em 1em;
+-}
+-.ui-button-text-icons .ui-button-text {
+-	padding-left: 2.1em;
+-	padding-right: 2.1em;
+-}
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button {
+-	padding: .4em 1em;
+-}
+-
+-/* button icon element(s) */
+-.ui-button-icon-only .ui-icon,
+-.ui-button-text-icon-primary .ui-icon,
+-.ui-button-text-icon-secondary .ui-icon,
+-.ui-button-text-icons .ui-icon,
+-.ui-button-icons-only .ui-icon {
+-	position: absolute;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-button-icon-only .ui-icon {
+-	left: 50%;
+-	margin-left: -8px;
+-}
+-.ui-button-text-icon-primary .ui-button-icon-primary,
+-.ui-button-text-icons .ui-button-icon-primary,
+-.ui-button-icons-only .ui-button-icon-primary {
+-	left: .5em;
+-}
+-.ui-button-text-icon-secondary .ui-button-icon-secondary,
+-.ui-button-text-icons .ui-button-icon-secondary,
+-.ui-button-icons-only .ui-button-icon-secondary {
+-	right: .5em;
+-}
+-
+-/* button sets */
+-.ui-buttonset {
+-	margin-right: 7px;
+-}
+-.ui-buttonset .ui-button {
+-	margin-left: 0;
+-	margin-right: -.3em;
+-}
+-
+-/* workarounds */
+-/* reset extra padding in Firefox, see h5bp.com/l */
+-input.ui-button::-moz-focus-inner,
+-button.ui-button::-moz-focus-inner {
+-	border: 0;
+-	padding: 0;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.datepicker.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.datepicker.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.datepicker.css	(revision 15488)
+@@ -1,178 +0,0 @@
+-/*!
+- * jQuery UI Datepicker 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Datepicker#theming
+- */
+-.ui-datepicker {
+-	width: 17em;
+-	padding: .2em .2em 0;
+-	display: none;
+-}
+-.ui-datepicker .ui-datepicker-header {
+-	position: relative;
+-	padding: .2em 0;
+-}
+-.ui-datepicker .ui-datepicker-prev,
+-.ui-datepicker .ui-datepicker-next {
+-	position: absolute;
+-	top: 2px;
+-	width: 1.8em;
+-	height: 1.8em;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover,
+-.ui-datepicker .ui-datepicker-next-hover {
+-	top: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev {
+-	left: 2px;
+-}
+-.ui-datepicker .ui-datepicker-next {
+-	right: 2px;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover {
+-	left: 1px;
+-}
+-.ui-datepicker .ui-datepicker-next-hover {
+-	right: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev span,
+-.ui-datepicker .ui-datepicker-next span {
+-	display: block;
+-	position: absolute;
+-	left: 50%;
+-	margin-left: -8px;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-datepicker .ui-datepicker-title {
+-	margin: 0 2.3em;
+-	line-height: 1.8em;
+-	text-align: center;
+-}
+-.ui-datepicker .ui-datepicker-title select {
+-	font-size: 1em;
+-	margin: 1px 0;
+-}
+-.ui-datepicker select.ui-datepicker-month-year {
+-	width: 100%;
+-}
+-.ui-datepicker select.ui-datepicker-month,
+-.ui-datepicker select.ui-datepicker-year {
+-	width: 49%;
+-}
+-.ui-datepicker table {
+-	width: 100%;
+-	font-size: .9em;
+-	border-collapse: collapse;
+-	margin: 0 0 .4em;
+-}
+-.ui-datepicker th {
+-	padding: .7em .3em;
+-	text-align: center;
+-	font-weight: bold;
+-	border: 0;
+-}
+-.ui-datepicker td {
+-	border: 0;
+-	padding: 1px;
+-}
+-.ui-datepicker td span,
+-.ui-datepicker td a {
+-	display: block;
+-	padding: .2em;
+-	text-align: right;
+-	text-decoration: none;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane {
+-	background-image: none;
+-	margin: .7em 0 0 0;
+-	padding: 0 .2em;
+-	border-left: 0;
+-	border-right: 0;
+-	border-bottom: 0;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button {
+-	float: right;
+-	margin: .5em .2em .4em;
+-	cursor: pointer;
+-	padding: .2em .6em .3em .6em;
+-	width: auto;
+-	overflow: visible;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+-	float: left;
+-}
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi {
+-	width: auto;
+-}
+-.ui-datepicker-multi .ui-datepicker-group {
+-	float: left;
+-}
+-.ui-datepicker-multi .ui-datepicker-group table {
+-	width: 95%;
+-	margin: 0 auto .4em;
+-}
+-.ui-datepicker-multi-2 .ui-datepicker-group {
+-	width: 50%;
+-}
+-.ui-datepicker-multi-3 .ui-datepicker-group {
+-	width: 33.3%;
+-}
+-.ui-datepicker-multi-4 .ui-datepicker-group {
+-	width: 25%;
+-}
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-left-width: 0;
+-}
+-.ui-datepicker-multi .ui-datepicker-buttonpane {
+-	clear: left;
+-}
+-.ui-datepicker-row-break {
+-	clear: both;
+-	width: 100%;
+-	font-size: 0;
+-}
+-
+-/* RTL support */
+-.ui-datepicker-rtl {
+-	direction: rtl;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev {
+-	right: 2px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next {
+-	left: 2px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev:hover {
+-	right: 1px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next:hover {
+-	left: 1px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane {
+-	clear: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+-	float: left;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+-.ui-datepicker-rtl .ui-datepicker-group {
+-	float: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-right-width: 0;
+-	border-left-width: 1px;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/mystyle.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/mystyle.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/mystyle.css	(revision 15488)
+@@ -1,48 +0,0 @@
+-#frame {
+-	width: 760px;
+-	height: 550px;
+-	margin: 0px auto;
+-} 
+-
+-#canvasframe {
+-	width: 700px;
+-	height: 580px;
+-	margin: 0px auto;
+-	border: double orange 1em;
+-	border-image: url("images/border.png") 27 round stretch;
+-} 
+-
+-body
+-{
+-	background-image: -webkit-gradient(radial, right bottom, 0, right bottom, 1012, color-stop(0, #FFFFFF), color-stop(1, #658fd5));
+-	background-image: -moz-linear-gradient(bottom right, #FFFFFF 0%, #658fd5 100%);
+-}
+-
+-a:hover, a:active {
+-	color:#000;
+-	text-decoration:none;
+-}
+-
+-#sliderTable
+-{
+-	border: 0;
+-	width : 700px;
+-}
+-
+-.imageBorder
+-{	
+-	box-sizing: border-box;
+-	border-radius: 2em 0.5em 2em 0.5em;
+-}
+-.sliderLabel
+-{
+-	font:italic bold 12px/30px Georgia,serif;
+-}
+-
+-.borderText
+-{
+-	box-sizing: border-box;
+-	width: 2em;
+-	height: 2em;
+-	border-radius: 0.5em 2em 0.5em 2em
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.spinner.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.spinner.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.spinner.css	(revision 15488)
+@@ -1,65 +0,0 @@
+-/*!
+- * jQuery UI Spinner 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Spinner#theming
+- */
+-.ui-spinner {
+-	position: relative;
+-	display: inline-block;
+-	overflow: hidden;
+-	padding: 0;
+-	vertical-align: middle;
+-}
+-.ui-spinner-input {
+-	border: none;
+-	background: none;
+-	color: inherit;
+-	padding: 0;
+-	margin: .2em 0;
+-	vertical-align: middle;
+-	margin-left: .4em;
+-	margin-right: 22px;
+-}
+-.ui-spinner-button {
+-	width: 16px;
+-	height: 50%;
+-	font-size: .5em;
+-	padding: 0;
+-	margin: 0;
+-	text-align: center;
+-	position: absolute;
+-	cursor: default;
+-	display: block;
+-	overflow: hidden;
+-	right: 0;
+-}
+-/* more specificity required here to overide default borders */
+-.ui-spinner a.ui-spinner-button {
+-	border-top: none;
+-	border-bottom: none;
+-	border-right: none;
+-}
+-/* vertical centre icon */
+-.ui-spinner .ui-icon {
+-	position: absolute;
+-	margin-top: -8px;
+-	top: 50%;
+-	left: 0;
+-}
+-.ui-spinner-up {
+-	top: 0;
+-}
+-.ui-spinner-down {
+-	bottom: 0;
+-}
+-
+-/* TR overrides */
+-.ui-spinner .ui-icon-triangle-1-s {
+-	/* need to fix icons sprite */
+-	background-position: -65px -16px;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery-ui-1.10.3.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery-ui-1.10.3.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery-ui-1.10.3.css	(revision 15488)
+@@ -1,1177 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden {
+-	display: none;
+-}
+-.ui-helper-hidden-accessible {
+-	border: 0;
+-	clip: rect(0 0 0 0);
+-	height: 1px;
+-	margin: -1px;
+-	overflow: hidden;
+-	padding: 0;
+-	position: absolute;
+-	width: 1px;
+-}
+-.ui-helper-reset {
+-	margin: 0;
+-	padding: 0;
+-	border: 0;
+-	outline: 0;
+-	line-height: 1.3;
+-	text-decoration: none;
+-	font-size: 100%;
+-	list-style: none;
+-}
+-.ui-helper-clearfix:before,
+-.ui-helper-clearfix:after {
+-	content: "";
+-	display: table;
+-	border-collapse: collapse;
+-}
+-.ui-helper-clearfix:after {
+-	clear: both;
+-}
+-.ui-helper-clearfix {
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-helper-zfix {
+-	width: 100%;
+-	height: 100%;
+-	top: 0;
+-	left: 0;
+-	position: absolute;
+-	opacity: 0;
+-	filter:Alpha(Opacity=0);
+-}
+-
+-.ui-front {
+-	z-index: 100;
+-}
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled {
+-	cursor: default !important;
+-}
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	display: block;
+-	text-indent: -99999px;
+-	overflow: hidden;
+-	background-repeat: no-repeat;
+-}
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	position: fixed;
+-	top: 0;
+-	left: 0;
+-	width: 100%;
+-	height: 100%;
+-}
+-.ui-resizable {
+-	position: relative;
+-}
+-.ui-resizable-handle {
+-	position: absolute;
+-	font-size: 0.1px;
+-	display: block;
+-}
+-.ui-resizable-disabled .ui-resizable-handle,
+-.ui-resizable-autohide .ui-resizable-handle {
+-	display: none;
+-}
+-.ui-resizable-n {
+-	cursor: n-resize;
+-	height: 7px;
+-	width: 100%;
+-	top: -5px;
+-	left: 0;
+-}
+-.ui-resizable-s {
+-	cursor: s-resize;
+-	height: 7px;
+-	width: 100%;
+-	bottom: -5px;
+-	left: 0;
+-}
+-.ui-resizable-e {
+-	cursor: e-resize;
+-	width: 7px;
+-	right: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-w {
+-	cursor: w-resize;
+-	width: 7px;
+-	left: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-se {
+-	cursor: se-resize;
+-	width: 12px;
+-	height: 12px;
+-	right: 1px;
+-	bottom: 1px;
+-}
+-.ui-resizable-sw {
+-	cursor: sw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	bottom: -5px;
+-}
+-.ui-resizable-nw {
+-	cursor: nw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	top: -5px;
+-}
+-.ui-resizable-ne {
+-	cursor: ne-resize;
+-	width: 9px;
+-	height: 9px;
+-	right: -5px;
+-	top: -5px;
+-}
+-.ui-selectable-helper {
+-	position: absolute;
+-	z-index: 100;
+-	border: 1px dotted black;
+-}
+-.ui-accordion .ui-accordion-header {
+-	display: block;
+-	cursor: pointer;
+-	position: relative;
+-	margin-top: 2px;
+-	padding: .5em .5em .5em .7em;
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-accordion .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-noicons {
+-	padding-left: .7em;
+-}
+-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+-	position: absolute;
+-	left: .5em;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-accordion .ui-accordion-content {
+-	padding: 1em 2.2em;
+-	border-top: 0;
+-	overflow: auto;
+-}
+-.ui-autocomplete {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	cursor: default;
+-}
+-.ui-button {
+-	display: inline-block;
+-	position: relative;
+-	padding: 0;
+-	line-height: normal;
+-	margin-right: .1em;
+-	cursor: pointer;
+-	vertical-align: middle;
+-	text-align: center;
+-	overflow: visible; /* removes extra width in IE */
+-}
+-.ui-button,
+-.ui-button:link,
+-.ui-button:visited,
+-.ui-button:hover,
+-.ui-button:active {
+-	text-decoration: none;
+-}
+-/* to make room for the icon, a width needs to be set here */
+-.ui-button-icon-only {
+-	width: 2.2em;
+-}
+-/* button elements seem to need a little more width */
+-button.ui-button-icon-only {
+-	width: 2.4em;
+-}
+-.ui-button-icons-only {
+-	width: 3.4em;
+-}
+-button.ui-button-icons-only {
+-	width: 3.7em;
+-}
+-
+-/* button text element */
+-.ui-button .ui-button-text {
+-	display: block;
+-	line-height: normal;
+-}
+-.ui-button-text-only .ui-button-text {
+-	padding: .4em 1em;
+-}
+-.ui-button-icon-only .ui-button-text,
+-.ui-button-icons-only .ui-button-text {
+-	padding: .4em;
+-	text-indent: -9999999px;
+-}
+-.ui-button-text-icon-primary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 1em .4em 2.1em;
+-}
+-.ui-button-text-icon-secondary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 2.1em .4em 1em;
+-}
+-.ui-button-text-icons .ui-button-text {
+-	padding-left: 2.1em;
+-	padding-right: 2.1em;
+-}
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button {
+-	padding: .4em 1em;
+-}
+-
+-/* button icon element(s) */
+-.ui-button-icon-only .ui-icon,
+-.ui-button-text-icon-primary .ui-icon,
+-.ui-button-text-icon-secondary .ui-icon,
+-.ui-button-text-icons .ui-icon,
+-.ui-button-icons-only .ui-icon {
+-	position: absolute;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-button-icon-only .ui-icon {
+-	left: 50%;
+-	margin-left: -8px;
+-}
+-.ui-button-text-icon-primary .ui-button-icon-primary,
+-.ui-button-text-icons .ui-button-icon-primary,
+-.ui-button-icons-only .ui-button-icon-primary {
+-	left: .5em;
+-}
+-.ui-button-text-icon-secondary .ui-button-icon-secondary,
+-.ui-button-text-icons .ui-button-icon-secondary,
+-.ui-button-icons-only .ui-button-icon-secondary {
+-	right: .5em;
+-}
+-
+-/* button sets */
+-.ui-buttonset {
+-	margin-right: 7px;
+-}
+-.ui-buttonset .ui-button {
+-	margin-left: 0;
+-	margin-right: -.3em;
+-}
+-
+-/* workarounds */
+-/* reset extra padding in Firefox, see h5bp.com/l */
+-input.ui-button::-moz-focus-inner,
+-button.ui-button::-moz-focus-inner {
+-	border: 0;
+-	padding: 0;
+-}
+-.ui-datepicker {
+-	width: 17em;
+-	padding: .2em .2em 0;
+-	display: none;
+-}
+-.ui-datepicker .ui-datepicker-header {
+-	position: relative;
+-	padding: .2em 0;
+-}
+-.ui-datepicker .ui-datepicker-prev,
+-.ui-datepicker .ui-datepicker-next {
+-	position: absolute;
+-	top: 2px;
+-	width: 1.8em;
+-	height: 1.8em;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover,
+-.ui-datepicker .ui-datepicker-next-hover {
+-	top: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev {
+-	left: 2px;
+-}
+-.ui-datepicker .ui-datepicker-next {
+-	right: 2px;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover {
+-	left: 1px;
+-}
+-.ui-datepicker .ui-datepicker-next-hover {
+-	right: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev span,
+-.ui-datepicker .ui-datepicker-next span {
+-	display: block;
+-	position: absolute;
+-	left: 50%;
+-	margin-left: -8px;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-datepicker .ui-datepicker-title {
+-	margin: 0 2.3em;
+-	line-height: 1.8em;
+-	text-align: center;
+-}
+-.ui-datepicker .ui-datepicker-title select {
+-	font-size: 1em;
+-	margin: 1px 0;
+-}
+-.ui-datepicker select.ui-datepicker-month-year {
+-	width: 100%;
+-}
+-.ui-datepicker select.ui-datepicker-month,
+-.ui-datepicker select.ui-datepicker-year {
+-	width: 49%;
+-}
+-.ui-datepicker table {
+-	width: 100%;
+-	font-size: .9em;
+-	border-collapse: collapse;
+-	margin: 0 0 .4em;
+-}
+-.ui-datepicker th {
+-	padding: .7em .3em;
+-	text-align: center;
+-	font-weight: bold;
+-	border: 0;
+-}
+-.ui-datepicker td {
+-	border: 0;
+-	padding: 1px;
+-}
+-.ui-datepicker td span,
+-.ui-datepicker td a {
+-	display: block;
+-	padding: .2em;
+-	text-align: right;
+-	text-decoration: none;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane {
+-	background-image: none;
+-	margin: .7em 0 0 0;
+-	padding: 0 .2em;
+-	border-left: 0;
+-	border-right: 0;
+-	border-bottom: 0;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button {
+-	float: right;
+-	margin: .5em .2em .4em;
+-	cursor: pointer;
+-	padding: .2em .6em .3em .6em;
+-	width: auto;
+-	overflow: visible;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+-	float: left;
+-}
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi {
+-	width: auto;
+-}
+-.ui-datepicker-multi .ui-datepicker-group {
+-	float: left;
+-}
+-.ui-datepicker-multi .ui-datepicker-group table {
+-	width: 95%;
+-	margin: 0 auto .4em;
+-}
+-.ui-datepicker-multi-2 .ui-datepicker-group {
+-	width: 50%;
+-}
+-.ui-datepicker-multi-3 .ui-datepicker-group {
+-	width: 33.3%;
+-}
+-.ui-datepicker-multi-4 .ui-datepicker-group {
+-	width: 25%;
+-}
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-left-width: 0;
+-}
+-.ui-datepicker-multi .ui-datepicker-buttonpane {
+-	clear: left;
+-}
+-.ui-datepicker-row-break {
+-	clear: both;
+-	width: 100%;
+-	font-size: 0;
+-}
+-
+-/* RTL support */
+-.ui-datepicker-rtl {
+-	direction: rtl;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev {
+-	right: 2px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next {
+-	left: 2px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev:hover {
+-	right: 1px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next:hover {
+-	left: 1px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane {
+-	clear: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+-	float: left;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+-.ui-datepicker-rtl .ui-datepicker-group {
+-	float: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-right-width: 0;
+-	border-left-width: 1px;
+-}
+-.ui-dialog {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	padding: .2em;
+-	outline: 0;
+-}
+-.ui-dialog .ui-dialog-titlebar {
+-	padding: .4em 1em;
+-	position: relative;
+-}
+-.ui-dialog .ui-dialog-title {
+-	float: left;
+-	margin: .1em 0;
+-	white-space: nowrap;
+-	width: 90%;
+-	overflow: hidden;
+-	text-overflow: ellipsis;
+-}
+-.ui-dialog .ui-dialog-titlebar-close {
+-	position: absolute;
+-	right: .3em;
+-	top: 50%;
+-	width: 21px;
+-	margin: -10px 0 0 0;
+-	padding: 1px;
+-	height: 20px;
+-}
+-.ui-dialog .ui-dialog-content {
+-	position: relative;
+-	border: 0;
+-	padding: .5em 1em;
+-	background: none;
+-	overflow: auto;
+-}
+-.ui-dialog .ui-dialog-buttonpane {
+-	text-align: left;
+-	border-width: 1px 0 0 0;
+-	background-image: none;
+-	margin-top: .5em;
+-	padding: .3em 1em .5em .4em;
+-}
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+-	float: right;
+-}
+-.ui-dialog .ui-dialog-buttonpane button {
+-	margin: .5em .4em .5em 0;
+-	cursor: pointer;
+-}
+-.ui-dialog .ui-resizable-se {
+-	width: 12px;
+-	height: 12px;
+-	right: -5px;
+-	bottom: -5px;
+-	background-position: 16px 16px;
+-}
+-.ui-draggable .ui-dialog-titlebar {
+-	cursor: move;
+-}
+-.ui-menu {
+-	list-style: none;
+-	padding: 2px;
+-	margin: 0;
+-	display: block;
+-	outline: none;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-	position: absolute;
+-}
+-.ui-menu .ui-menu-item {
+-	margin: 0;
+-	padding: 0;
+-	width: 100%;
+-	/* support: IE10, see #8844 */
+-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+-}
+-.ui-menu .ui-menu-divider {
+-	margin: 5px -2px 5px -2px;
+-	height: 0;
+-	font-size: 0;
+-	line-height: 0;
+-	border-width: 1px 0 0 0;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration: none;
+-	display: block;
+-	padding: 2px .4em;
+-	line-height: 1.5;
+-	min-height: 0; /* support: IE7 */
+-	font-weight: normal;
+-}
+-.ui-menu .ui-menu-item a.ui-state-focus,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-
+-.ui-menu .ui-state-disabled {
+-	font-weight: normal;
+-	margin: .4em 0 .2em;
+-	line-height: 1.5;
+-}
+-.ui-menu .ui-state-disabled a {
+-	cursor: default;
+-}
+-
+-/* icon support */
+-.ui-menu-icons {
+-	position: relative;
+-}
+-.ui-menu-icons .ui-menu-item a {
+-	position: relative;
+-	padding-left: 2em;
+-}
+-
+-/* left-aligned */
+-.ui-menu .ui-icon {
+-	position: absolute;
+-	top: .2em;
+-	left: .2em;
+-}
+-
+-/* right-aligned */
+-.ui-menu .ui-menu-icon {
+-	position: static;
+-	float: right;
+-}
+-.ui-progressbar {
+-	height: 2em;
+-	text-align: left;
+-	overflow: hidden;
+-}
+-.ui-progressbar .ui-progressbar-value {
+-	margin: -1px;
+-	height: 100%;
+-}
+-.ui-progressbar .ui-progressbar-overlay {
+-	background: url("images/animated-overlay.gif");
+-	height: 100%;
+-	filter: alpha(opacity=25);
+-	opacity: 0.25;
+-}
+-.ui-progressbar-indeterminate .ui-progressbar-value {
+-	background-image: none;
+-}
+-.ui-slider {
+-	position: relative;
+-	text-align: left;
+-}
+-.ui-slider .ui-slider-handle {
+-	position: absolute;
+-	z-index: 2;
+-	width: 1.2em;
+-	height: 1.2em;
+-	cursor: default;
+-}
+-.ui-slider .ui-slider-range {
+-	position: absolute;
+-	z-index: 1;
+-	font-size: .7em;
+-	display: block;
+-	border: 0;
+-	background-position: 0 0;
+-}
+-
+-/* For IE8 - See #6727 */
+-.ui-slider.ui-state-disabled .ui-slider-handle,
+-.ui-slider.ui-state-disabled .ui-slider-range {
+-	filter: inherit;
+-}
+-
+-.ui-slider-horizontal {
+-	height: .8em;
+-}
+-.ui-slider-horizontal .ui-slider-handle {
+-	top: -.3em;
+-	margin-left: -.6em;
+-}
+-.ui-slider-horizontal .ui-slider-range {
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-slider-horizontal .ui-slider-range-min {
+-	left: 0;
+-}
+-.ui-slider-horizontal .ui-slider-range-max {
+-	right: 0;
+-}
+-
+-.ui-slider-vertical {
+-	width: .8em;
+-	height: 100px;
+-}
+-.ui-slider-vertical .ui-slider-handle {
+-	left: -.3em;
+-	margin-left: 0;
+-	margin-bottom: -.6em;
+-}
+-.ui-slider-vertical .ui-slider-range {
+-	left: 0;
+-	width: 100%;
+-}
+-.ui-slider-vertical .ui-slider-range-min {
+-	bottom: 0;
+-}
+-.ui-slider-vertical .ui-slider-range-max {
+-	top: 0;
+-}
+-.ui-spinner {
+-	position: relative;
+-	display: inline-block;
+-	overflow: hidden;
+-	padding: 0;
+-	vertical-align: middle;
+-}
+-.ui-spinner-input {
+-	border: none;
+-	background: none;
+-	color: inherit;
+-	padding: 0;
+-	margin: .2em 0;
+-	vertical-align: middle;
+-	margin-left: .4em;
+-	margin-right: 22px;
+-}
+-.ui-spinner-button {
+-	width: 16px;
+-	height: 50%;
+-	font-size: .5em;
+-	padding: 0;
+-	margin: 0;
+-	text-align: center;
+-	position: absolute;
+-	cursor: default;
+-	display: block;
+-	overflow: hidden;
+-	right: 0;
+-}
+-/* more specificity required here to overide default borders */
+-.ui-spinner a.ui-spinner-button {
+-	border-top: none;
+-	border-bottom: none;
+-	border-right: none;
+-}
+-/* vertical centre icon */
+-.ui-spinner .ui-icon {
+-	position: absolute;
+-	margin-top: -8px;
+-	top: 50%;
+-	left: 0;
+-}
+-.ui-spinner-up {
+-	top: 0;
+-}
+-.ui-spinner-down {
+-	bottom: 0;
+-}
+-
+-/* TR overrides */
+-.ui-spinner .ui-icon-triangle-1-s {
+-	/* need to fix icons sprite */
+-	background-position: -65px -16px;
+-}
+-.ui-tabs {
+-	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-	padding: .2em;
+-}
+-.ui-tabs .ui-tabs-nav {
+-	margin: 0;
+-	padding: .2em .2em 0;
+-}
+-.ui-tabs .ui-tabs-nav li {
+-	list-style: none;
+-	float: left;
+-	position: relative;
+-	top: 0;
+-	margin: 1px .2em 0 0;
+-	border-bottom-width: 0;
+-	padding: 0;
+-	white-space: nowrap;
+-}
+-.ui-tabs .ui-tabs-nav li a {
+-	float: left;
+-	padding: .5em 1em;
+-	text-decoration: none;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+-	margin-bottom: -1px;
+-	padding-bottom: 1px;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+-	cursor: text;
+-}
+-.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+-	cursor: pointer;
+-}
+-.ui-tabs .ui-tabs-panel {
+-	display: block;
+-	border-width: 0;
+-	padding: 1em 1.4em;
+-	background: none;
+-}
+-.ui-tooltip {
+-	padding: 8px;
+-	position: absolute;
+-	z-index: 9999;
+-	max-width: 300px;
+-	-webkit-box-shadow: 0 0 5px #aaa;
+-	box-shadow: 0 0 5px #aaa;
+-}
+-body .ui-tooltip {
+-	border-width: 2px;
+-}
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget {
+-	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+-	font-size: 1.1em;
+-}
+-.ui-widget .ui-widget {
+-	font-size: 1em;
+-}
+-.ui-widget input,
+-.ui-widget select,
+-.ui-widget textarea,
+-.ui-widget button {
+-	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+-	font-size: 1em;
+-}
+-.ui-widget-content {
+-	border: 1px solid #dddddd;
+-	background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
+-	color: #333333;
+-}
+-.ui-widget-content a {
+-	color: #333333;
+-}
+-.ui-widget-header {
+-	border: 1px solid #e78f08;
+-	background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
+-	color: #ffffff;
+-	font-weight: bold;
+-}
+-.ui-widget-header a {
+-	color: #ffffff;
+-}
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default,
+-.ui-widget-content .ui-state-default,
+-.ui-widget-header .ui-state-default {
+-	border: 1px solid #cccccc;
+-	background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #1c94c4;
+-}
+-.ui-state-default a,
+-.ui-state-default a:link,
+-.ui-state-default a:visited {
+-	color: #1c94c4;
+-	text-decoration: none;
+-}
+-.ui-state-hover,
+-.ui-widget-content .ui-state-hover,
+-.ui-widget-header .ui-state-hover,
+-.ui-state-focus,
+-.ui-widget-content .ui-state-focus,
+-.ui-widget-header .ui-state-focus {
+-	border: 1px solid #fbcb09;
+-	background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #c77405;
+-}
+-.ui-state-hover a,
+-.ui-state-hover a:hover,
+-.ui-state-hover a:link,
+-.ui-state-hover a:visited {
+-	color: #c77405;
+-	text-decoration: none;
+-}
+-.ui-state-active,
+-.ui-widget-content .ui-state-active,
+-.ui-widget-header .ui-state-active {
+-	border: 1px solid #fbd850;
+-	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #eb8f00;
+-}
+-.ui-state-active a,
+-.ui-state-active a:link,
+-.ui-state-active a:visited {
+-	color: #eb8f00;
+-	text-decoration: none;
+-}
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight,
+-.ui-widget-content .ui-state-highlight,
+-.ui-widget-header .ui-state-highlight {
+-	border: 1px solid #fed22f;
+-	background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
+-	color: #363636;
+-}
+-.ui-state-highlight a,
+-.ui-widget-content .ui-state-highlight a,
+-.ui-widget-header .ui-state-highlight a {
+-	color: #363636;
+-}
+-.ui-state-error,
+-.ui-widget-content .ui-state-error,
+-.ui-widget-header .ui-state-error {
+-	border: 1px solid #cd0a0a;
+-	background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
+-	color: #ffffff;
+-}
+-.ui-state-error a,
+-.ui-widget-content .ui-state-error a,
+-.ui-widget-header .ui-state-error a {
+-	color: #ffffff;
+-}
+-.ui-state-error-text,
+-.ui-widget-content .ui-state-error-text,
+-.ui-widget-header .ui-state-error-text {
+-	color: #ffffff;
+-}
+-.ui-priority-primary,
+-.ui-widget-content .ui-priority-primary,
+-.ui-widget-header .ui-priority-primary {
+-	font-weight: bold;
+-}
+-.ui-priority-secondary,
+-.ui-widget-content .ui-priority-secondary,
+-.ui-widget-header .ui-priority-secondary {
+-	opacity: .7;
+-	filter:Alpha(Opacity=70);
+-	font-weight: normal;
+-}
+-.ui-state-disabled,
+-.ui-widget-content .ui-state-disabled,
+-.ui-widget-header .ui-state-disabled {
+-	opacity: .35;
+-	filter:Alpha(Opacity=35);
+-	background-image: none;
+-}
+-.ui-state-disabled .ui-icon {
+-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+-}
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	width: 16px;
+-	height: 16px;
+-}
+-.ui-icon,
+-.ui-widget-content .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png);
+-}
+-.ui-widget-header .ui-icon {
+-	background-image: url(images/ui-icons_ffffff_256x240.png);
+-}
+-.ui-state-default .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-hover .ui-icon,
+-.ui-state-focus .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-active .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-highlight .ui-icon {
+-	background-image: url(images/ui-icons_228ef1_256x240.png);
+-}
+-.ui-state-error .ui-icon,
+-.ui-state-error-text .ui-icon {
+-	background-image: url(images/ui-icons_ffd27a_256x240.png);
+-}
+-
+-/* positioning */
+-.ui-icon-blank { background-position: 16px 16px; }
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-on { background-position: -96px -144px; }
+-.ui-icon-radio-off { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-left,
+-.ui-corner-tl {
+-	border-top-left-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-right,
+-.ui-corner-tr {
+-	border-top-right-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-left,
+-.ui-corner-bl {
+-	border-bottom-left-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-right,
+-.ui-corner-br {
+-	border-bottom-right-radius: 4px;
+-}
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
+-	opacity: .5;
+-	filter: Alpha(Opacity=50);
+-}
+-.ui-widget-shadow {
+-	margin: -5px 0 0 -5px;
+-	padding: 5px;
+-	background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+-	opacity: .2;
+-	filter: Alpha(Opacity=20);
+-	border-radius: 5px;
+-}
+Index: ../trunk-jpl/src/mobile/web/css/jquery.ui.resizable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/css/jquery.ui.resizable.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/css/jquery.ui.resizable.css	(revision 15488)
+@@ -1,78 +0,0 @@
+-/*!
+- * jQuery UI Resizable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Resizable#theming
+- */
+-.ui-resizable {
+-	position: relative;
+-}
+-.ui-resizable-handle {
+-	position: absolute;
+-	font-size: 0.1px;
+-	display: block;
+-}
+-.ui-resizable-disabled .ui-resizable-handle,
+-.ui-resizable-autohide .ui-resizable-handle {
+-	display: none;
+-}
+-.ui-resizable-n {
+-	cursor: n-resize;
+-	height: 7px;
+-	width: 100%;
+-	top: -5px;
+-	left: 0;
+-}
+-.ui-resizable-s {
+-	cursor: s-resize;
+-	height: 7px;
+-	width: 100%;
+-	bottom: -5px;
+-	left: 0;
+-}
+-.ui-resizable-e {
+-	cursor: e-resize;
+-	width: 7px;
+-	right: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-w {
+-	cursor: w-resize;
+-	width: 7px;
+-	left: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-se {
+-	cursor: se-resize;
+-	width: 12px;
+-	height: 12px;
+-	right: 1px;
+-	bottom: 1px;
+-}
+-.ui-resizable-sw {
+-	cursor: sw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	bottom: -5px;
+-}
+-.ui-resizable-nw {
+-	cursor: nw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	top: -5px;
+-}
+-.ui-resizable-ne {
+-	cursor: ne-resize;
+-	width: 9px;
+-	height: 9px;
+-	right: -5px;
+-	top: -5px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-transfer.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-transfer.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-transfer.js	(revision 15488)
+@@ -1,47 +0,0 @@
+-/*!
+- * jQuery UI Effects Transfer 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/transfer-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.transfer = function( o, done ) {
+-	var elem = $( this ),
+-		target = $( o.to ),
+-		targetFixed = target.css( "position" ) === "fixed",
+-		body = $("body"),
+-		fixTop = targetFixed ? body.scrollTop() : 0,
+-		fixLeft = targetFixed ? body.scrollLeft() : 0,
+-		endPosition = target.offset(),
+-		animation = {
+-			top: endPosition.top - fixTop ,
+-			left: endPosition.left - fixLeft ,
+-			height: target.innerHeight(),
+-			width: target.innerWidth()
+-		},
+-		startPosition = elem.offset(),
+-		transfer = $( "<div class='ui-effects-transfer'></div>" )
+-			.appendTo( document.body )
+-			.addClass( o.className )
+-			.css({
+-				top: startPosition.top - fixTop ,
+-				left: startPosition.left - fixLeft ,
+-				height: elem.innerHeight(),
+-				width: elem.innerWidth(),
+-				position: targetFixed ? "fixed" : "absolute"
+-			})
+-			.animate( animation, o.duration, o.easing, function() {
+-				transfer.remove();
+-				done();
+-			});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/README
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/README	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/README	(revision 15488)
+@@ -1 +0,0 @@
+-Nivo Slider is "The Most Awesome jQuery Image Slider". See http://nivo.dev7studios.com for more info.
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/license.txt
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/license.txt	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/license.txt	(revision 15488)
+@@ -1,22 +0,0 @@
+- Copyright (c) 2010-2012 Dev7studios
+-
+- Permission is hereby granted, free of charge, to any person
+- obtaining a copy of this software and associated documentation
+- files (the "Software"), to deal in the Software without
+- restriction, including without limitation the rights to use,
+- copy, modify, merge, publish, distribute, sublicense, and/or sell
+- copies of the Software, and to permit persons to whom the
+- Software is furnished to do so, subject to the following
+- conditions:
+-
+- The above copyright notice and this permission notice shall be
+- included in all copies or substantial portions of the Software.
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- OTHER DEALINGS IN THE SOFTWARE.
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.pack.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.pack.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.pack.js	(revision 15488)
+@@ -1,10 +0,0 @@
+-/*
+- * jQuery Nivo Slider v3.2
+- * http://nivo.dev7studios.com
+- *
+- * Copyright 2012, Dev7studios
+- * Free to use and abuse under the MIT license.
+- * http://www.opensource.org/licenses/mit-license.php
+- */
+-
+-(function(e){var t=function(t,n){var r=e.extend({},e.fn.nivoSlider.defaults,n);var i={currentSlide:0,currentImage:"",totalSlides:0,running:false,paused:false,stop:false,controlNavEl:false};var s=e(t);s.data("nivo:vars",i).addClass("nivoSlider");var o=s.children();o.each(function(){var t=e(this);var n="";if(!t.is("img")){if(t.is("a")){t.addClass("nivo-imageLink");n=t}t=t.find("img:first")}var r=r===0?t.attr("width"):t.width(),s=s===0?t.attr("height"):t.height();if(n!==""){n.css("display","none")}t.css("display","none");i.totalSlides++});if(r.randomStart){r.startSlide=Math.floor(Math.random()*i.totalSlides)}if(r.startSlide>0){if(r.startSlide>=i.totalSlides){r.startSlide=i.totalSlides-1}i.currentSlide=r.startSlide}if(e(o[i.currentSlide]).is("img")){i.currentImage=e(o[i.currentSlide])}else{i.currentImage=e(o[i.currentSlide]).find("img:first")}if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}var u=e("<img/>").addClass("nivo-main-image");u.attr("src",i.currentImage.attr("src")).show();s.append(u);e(window).resize(function(){s.children("img").width(s.width());u.attr("src",i.currentImage.attr("src"));u.stop().height("auto");e(".nivo-slice").remove();e(".nivo-box").remove()});s.append(e('<div class="nivo-caption"></div>'));var a=function(t){var n=e(".nivo-caption",s);if(i.currentImage.attr("title")!=""&&i.currentImage.attr("title")!=undefined){var r=i.currentImage.attr("title");if(r.substr(0,1)=="#")r=e(r).html();if(n.css("display")=="block"){setTimeout(function(){n.html(r)},t.animSpeed)}else{n.html(r);n.stop().fadeIn(t.animSpeed)}}else{n.stop().fadeOut(t.animSpeed)}};a(r);var f=0;if(!r.manualAdvance&&o.length>1){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}if(r.directionNav){s.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+r.prevText+'</a><a class="nivo-nextNav">'+r.nextText+"</a></div>");e(s).on("click","a.nivo-prevNav",function(){if(i.running){return false}clearInterval(f);f="";i.currentSlide-=2;d(s,o,r,"prev")});e(s).on("click","a.nivo-nextNav",function(){if(i.running){return false}clearInterval(f);f="";d(s,o,r,"next")})}if(r.controlNav){i.controlNavEl=e('<div class="nivo-controlNav"></div>');s.after(i.controlNavEl);for(var l=0;l<o.length;l++){if(r.controlNavThumbs){i.controlNavEl.addClass("nivo-thumbs-enabled");var c=o.eq(l);if(!c.is("img")){c=c.find("img:first")}if(c.attr("data-thumb"))i.controlNavEl.append('<a class="nivo-control" rel="'+l+'"><img src="'+c.attr("data-thumb")+'" alt="" /></a>')}else{i.controlNavEl.append('<a class="nivo-control" rel="'+l+'">'+(l+1)+"</a>")}}e("a:eq("+i.currentSlide+")",i.controlNavEl).addClass("active");e("a",i.controlNavEl).bind("click",function(){if(i.running)return false;if(e(this).hasClass("active"))return false;clearInterval(f);f="";u.attr("src",i.currentImage.attr("src"));i.currentSlide=e(this).attr("rel")-1;d(s,o,r,"control")})}if(r.pauseOnHover){s.hover(function(){i.paused=true;clearInterval(f);f=""},function(){i.paused=false;if(f===""&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}})}s.bind("nivo:animFinished",function(){u.attr("src",i.currentImage.attr("src"));i.running=false;e(o).each(function(){if(e(this).is("a")){e(this).css("display","none")}});if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}if(f===""&&!i.paused&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}r.afterChange.call(this)});var h=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().is("a")?e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().height():e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height();for(var s=0;s<n.slices;s++){var o=Math.round(t.width()/n.slices);if(s===n.slices-1){t.append(e('<div class="nivo-slice" name="'+s+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block !important; top:0; left:-"+(o+s*o-o)+'px;" /></div>').css({left:o*s+"px",width:t.width()-o*s+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}else{t.append(e('<div class="nivo-slice" name="'+s+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block !important; top:0; left:-"+(o+s*o-o)+'px;" /></div>').css({left:o*s+"px",width:o+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}}e(".nivo-slice",t).height(i);u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var p=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=Math.round(t.width()/n.boxCols),s=Math.round(e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height()/n.boxRows);for(var o=0;o<n.boxRows;o++){for(var a=0;a<n.boxCols;a++){if(a===n.boxCols-1){t.append(e('<div class="nivo-box" name="'+a+'" rel="'+o+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block; top:-"+s*o+"px; left:-"+i*a+'px;" /></div>').css({opacity:0,left:i*a+"px",top:s*o+"px",width:t.width()-i*a+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}else{t.append(e('<div class="nivo-box" name="'+a+'" rel="'+o+'"><img src="'+r.currentImage.attr("src")+'" style="position:absolute; width:'+t.width()+"px; height:auto; display:block; top:-"+s*o+"px; left:-"+i*a+'px;" /></div>').css({opacity:0,left:i*a+"px",top:s*o+"px",width:i+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}}}u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var d=function(t,n,r,i){var s=t.data("nivo:vars");if(s&&s.currentSlide===s.totalSlides-1){r.lastSlide.call(this)}if((!s||s.stop)&&!i){return false}r.beforeChange.call(this);if(!i){u.attr("src",s.currentImage.attr("src"))}else{if(i==="prev"){u.attr("src",s.currentImage.attr("src"))}if(i==="next"){u.attr("src",s.currentImage.attr("src"))}}s.currentSlide++;if(s.currentSlide===s.totalSlides){s.currentSlide=0;r.slideshowEnd.call(this)}if(s.currentSlide<0){s.currentSlide=s.totalSlides-1}if(e(n[s.currentSlide]).is("img")){s.currentImage=e(n[s.currentSlide])}else{s.currentImage=e(n[s.currentSlide]).find("img:first")}if(r.controlNav){e("a",s.controlNavEl).removeClass("active");e("a:eq("+s.currentSlide+")",s.controlNavEl).addClass("active")}a(r);e(".nivo-slice",t).remove();e(".nivo-box",t).remove();var o=r.effect,f="";if(r.effect==="random"){f=new Array("sliceDownRight","sliceDownLeft","sliceUpRight","sliceUpLeft","sliceUpDown","sliceUpDownLeft","fold","fade","boxRandom","boxRain","boxRainReverse","boxRainGrow","boxRainGrowReverse");o=f[Math.floor(Math.random()*(f.length+1))];if(o===undefined){o="fade"}}if(r.effect.indexOf(",")!==-1){f=r.effect.split(",");o=f[Math.floor(Math.random()*f.length)];if(o===undefined){o="fade"}}if(s.currentImage.attr("data-transition")){o=s.currentImage.attr("data-transition")}s.running=true;var l=0,c=0,d="",m="",g="",y="";if(o==="sliceDown"||o==="sliceDownRight"||o==="sliceDownLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({top:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUp"||o==="sliceUpRight"||o==="sliceUpLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceUpLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({bottom:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUpDown"||o==="sliceUpDownRight"||o==="sliceUpDownLeft"){h(t,r,s);l=0;c=0;var b=0;d=e(".nivo-slice",t);if(o==="sliceUpDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);if(c===0){n.css("top","0px");c++}else{n.css("bottom","0px");c=0}if(b===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;b++})}else if(o==="fold"){h(t,r,s);l=0;c=0;e(".nivo-slice",t).each(function(){var n=e(this);var i=n.width();n.css({top:"0px",width:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="fade"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:t.width()+"px"});m.animate({opacity:"1.0"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInRight"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInLeft"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1",left:"",right:"0px"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){m.css({left:"0px",right:""});t.trigger("nivo:animFinished")})}else if(o==="boxRandom"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;y=v(e(".nivo-box",t));y.each(function(){var n=e(this);if(c===g-1){setTimeout(function(){n.animate({opacity:"1"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1"},r.animSpeed)},100+l)}l+=20;c++})}else if(o==="boxRain"||o==="boxRainReverse"||o==="boxRainGrow"||o==="boxRainGrowReverse"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;var w=0;var E=0;var S=[];S[w]=[];y=e(".nivo-box",t);if(o==="boxRainReverse"||o==="boxRainGrowReverse"){y=e(".nivo-box",t)._reverse()}y.each(function(){S[w][E]=e(this);E++;if(E===r.boxCols){w++;E=0;S[w]=[]}});for(var x=0;x<r.boxCols*2;x++){var T=x;for(var N=0;N<r.boxRows;N++){if(T>=0&&T<r.boxCols){(function(n,i,s,u,a){var f=e(S[n][i]);var l=f.width();var c=f.height();if(o==="boxRainGrow"||o==="boxRainGrowReverse"){f.width(0).height(0)}if(u===a-1){setTimeout(function(){f.animate({opacity:"1",width:l,height:c},r.animSpeed/1.3,"",function(){t.trigger("nivo:animFinished")})},100+s)}else{setTimeout(function(){f.animate({opacity:"1",width:l,height:c},r.animSpeed/1.3)},100+s)}})(N,T,l,c,g);c++}T--}l+=100}}};var v=function(e){for(var t,n,r=e.length;r;t=parseInt(Math.random()*r,10),n=e[--r],e[r]=e[t],e[t]=n);return e};var m=function(e){if(this.console&&typeof console.log!=="undefined"){console.log(e)}};this.stop=function(){if(!e(t).data("nivo:vars").stop){e(t).data("nivo:vars").stop=true;m("Stop Slider")}};this.start=function(){if(e(t).data("nivo:vars").stop){e(t).data("nivo:vars").stop=false;m("Start Slider")}};r.afterLoad.call(this);return this};e.fn.nivoSlider=function(n){return this.each(function(r,i){var s=e(this);if(s.data("nivoslider")){return s.data("nivoslider")}var o=new t(this,n);s.data("nivoslider",o)})};e.fn.nivoSlider.defaults={effect:"random",slices:15,boxCols:8,boxRows:4,animSpeed:500,pauseTime:3e3,startSlide:0,directionNav:true,controlNav:true,controlNavThumbs:false,pauseOnHover:true,manualAdvance:false,prevText:"Prev",nextText:"Next",randomStart:false,beforeChange:function(){},afterChange:function(){},slideshowEnd:function(){},lastSlide:function(){},afterLoad:function(){}};e.fn._reverse=[].reverse})(jQuery)
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/nivo-slider.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/nivo-slider.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/nivo-slider.css	(revision 15488)
+@@ -1,113 +0,0 @@
+-/*
+- * jQuery Nivo Slider v3.2
+- * http://nivo.dev7studios.com
+- *
+- * Copyright 2012, Dev7studios
+- * Free to use and abuse under the MIT license.
+- * http://www.opensource.org/licenses/mit-license.php
+- */
+- 
+-/* The Nivo Slider styles */
+-.nivoSlider {
+-	position:relative;
+-	width:100%;
+-	height:auto;
+-	overflow: hidden;
+-}
+-.nivoSlider img {
+-	position:absolute;
+-	top:0px;
+-	left:0px;
+-	max-width: none;
+-}
+-.nivo-main-image {
+-	display: block !important;
+-	position: relative !important; 
+-	width: 100% !important;
+-}
+-
+-/* If an image is wrapped in a link */
+-.nivoSlider a.nivo-imageLink {
+-	position:absolute;
+-	top:0px;
+-	left:0px;
+-	width:100%;
+-	height:100%;
+-	border:0;
+-	padding:0;
+-	margin:0;
+-	z-index:6;
+-	display:none;
+-	background:white; 
+-	filter:alpha(opacity=0); 
+-	opacity:0;
+-}
+-/* The slices and boxes in the Slider */
+-.nivo-slice {
+-	display:block;
+-	position:absolute;
+-	z-index:5;
+-	height:100%;
+-	top:0;
+-}
+-.nivo-box {
+-	display:block;
+-	position:absolute;
+-	z-index:5;
+-	overflow:hidden;
+-}
+-.nivo-box img { display:block; }
+-
+-/* Caption styles */
+-.nivo-caption {
+-	position:absolute;
+-	left:0px;
+-	bottom:0px;
+-	background:#000;
+-	color:#fff;
+-	width:100%;
+-	z-index:8;
+-	padding: 5px 10px;
+-	opacity: 0.8;
+-	overflow: hidden;
+-	display: none;
+-	-moz-opacity: 0.8;
+-	filter:alpha(opacity=8);
+-	-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
+-	-moz-box-sizing: border-box;    /* Firefox, other Gecko */
+-	box-sizing: border-box;         /* Opera/IE 8+ */
+-}
+-.nivo-caption p {
+-	padding:5px;
+-	margin:0;
+-}
+-.nivo-caption a {
+-	display:inline !important;
+-}
+-.nivo-html-caption {
+-    display:none;
+-}
+-/* Direction nav styles (e.g. Next & Prev) */
+-.nivo-directionNav a {
+-	position:absolute;
+-	top:45%;
+-	z-index:9;
+-	cursor:pointer;
+-}
+-.nivo-prevNav {
+-	left:0px;
+-}
+-.nivo-nextNav {
+-	right:0px;
+-}
+-/* Control nav styles (e.g. 1,2,3...) */
+-.nivo-controlNav {
+-	text-align:center;
+-	padding: 15px 0;
+-}
+-.nivo-controlNav a {
+-	cursor:pointer;
+-}
+-.nivo-controlNav a.active {
+-	font-weight:bold;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/dev7logo.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/toystory.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/nemo.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/up.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/images/walle.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/demo.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/demo.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/demo.html	(revision 15488)
+@@ -1,38 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+-<html lang="en">
+-<head>
+-    <title>Nivo Slider Demo</title>
+-    <link rel="stylesheet" href="../themes/default/default.css" type="text/css" media="screen" />
+-    <link rel="stylesheet" href="../themes/light/light.css" type="text/css" media="screen" />
+-    <link rel="stylesheet" href="../themes/dark/dark.css" type="text/css" media="screen" />
+-    <link rel="stylesheet" href="../themes/bar/bar.css" type="text/css" media="screen" />
+-    <link rel="stylesheet" href="../nivo-slider.css" type="text/css" media="screen" />
+-    <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
+-</head>
+-<body>
+-    <div id="wrapper">
+-        <a href="http://dev7studios.com" id="dev7link" title="Go to dev7studios">dev7studios</a>
+-
+-        <div class="slider-wrapper theme-default">
+-            <div id="slider" class="nivoSlider">
+-                <img src="images/toystory.jpg" data-thumb="images/toystory.jpg" alt="" />
+-                <a href="http://dev7studios.com"><img src="images/up.jpg" data-thumb="images/up.jpg" alt="" title="This is an example of a caption" /></a>
+-                <img src="images/walle.jpg" data-thumb="images/walle.jpg" alt="" data-transition="slideInLeft" />
+-                <img src="images/nemo.jpg" data-thumb="images/nemo.jpg" alt="" title="#htmlcaption" />
+-            </div>
+-            <div id="htmlcaption" class="nivo-html-caption">
+-                <strong>This</strong> is an example of a <em>HTML</em> caption with <a href="#">a link</a>. 
+-            </div>
+-        </div>
+-
+-    </div>
+-    <script type="text/javascript" src="scripts/jquery-1.9.0.min.js"></script>
+-    <script type="text/javascript" src="../jquery.nivo.slider.js"></script>
+-    <script type="text/javascript">
+-    $(window).load(function() {
+-        $('#slider').nivoSlider();
+-    });
+-    </script>
+-</body>
+-</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/scripts/jquery-1.9.0.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/scripts/jquery-1.9.0.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/scripts/jquery-1.9.0.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(cn[0].contentWindow||cn[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=A(e,t),cn.detach()),bn[e]=n),n}function A(e,t){var n=st(t.createElement(e)).appendTo(t.body),r=st.css(n[0],"display");return n.remove(),r}function j(e,t,n,r){var i;if(st.isArray(t))st.each(t,function(t,i){n||kn.test(e)?r(e,i):j(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==st.type(t))r(e,t);else for(i in t)j(e+"["+i+"]",t[i],n,r)}function D(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(lt)||[];if(st.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function L(e,n,r,i){function o(u){var l;return a[u]=!0,st.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||s||a[c]?s?!(l=c):t:(n.dataTypes.unshift(c),o(c),!1)}),l}var a={},s=e===$n;return o(n.dataTypes[0])||!a["*"]&&o("*")}function H(e,n){var r,i,o=st.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((o[r]?e:i||(i={}))[r]=n[r]);return i&&st.extend(!0,e,i),e}function M(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(o in c)o in r&&(n[c[o]]=r[o]);for(;"*"===l[0];)l.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("Content-Type"));if(i)for(o in u)if(u[o]&&u[o].test(i)){l.unshift(o);break}if(l[0]in r)a=l[0];else{for(o in r){if(!l[0]||e.converters[o+" "+l[0]]){a=o;break}s||(s=o)}a=a||s}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function q(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=u[++s];)if("*"!==i){if("*"!==l&&l!==i){if(n=a[l+" "+i]||a["* "+i],!n)for(r in a)if(o=r.split(" "),o[1]===i&&(n=a[l+" "+o[0]]||a["* "+o[0]])){n===!0?n=a[r]:a[r]!==!0&&(i=o[0],u.splice(s--,0,i));break}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(c){return{state:"parsererror",error:n?c:"No conversion from "+l+" to "+i}}}l=i}return{state:"success",data:t}}function _(){try{return new e.XMLHttpRequest}catch(t){}}function F(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function O(){return setTimeout(function(){Qn=t}),Qn=st.now()}function B(e,t){st.each(t,function(t,n){for(var r=(rr[t]||[]).concat(rr["*"]),i=0,o=r.length;o>i;i++)if(r[i].call(e,t,n))return})}function P(e,t,n){var r,i,o=0,a=nr.length,s=st.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=Qn||O(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:st.extend({},t),opts:st.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Qn||O(),duration:n.duration,tweens:[],createTween:function(t,n){var r=st.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(R(c,l.opts.specialEasing);a>o;o++)if(r=nr[o].call(l,e,c,l.opts))return r;return B(l,c),st.isFunction(l.opts.start)&&l.opts.start.call(e,l),st.fx.timer(st.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function R(e,t){var n,r,i,o,a;for(n in e)if(r=st.camelCase(n),i=t[r],o=e[n],st.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=st.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function W(e,t,n){var r,i,o,a,s,u,l,c,f,p=this,d=e.style,h={},g=[],m=e.nodeType&&w(e);n.queue||(c=st._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,f=c.empty.fire,c.empty.fire=function(){c.unqueued||f()}),c.unqueued++,p.always(function(){p.always(function(){c.unqueued--,st.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===st.css(e,"display")&&"none"===st.css(e,"float")&&(st.support.inlineBlockNeedsLayout&&"inline"!==S(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",st.support.shrinkWrapBlocks||p.done(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(r in t)if(o=t[r],Zn.exec(o)){if(delete t[r],u=u||"toggle"===o,o===(m?"hide":"show"))continue;g.push(r)}if(a=g.length){s=st._data(e,"fxshow")||st._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?st(e).show():p.done(function(){st(e).hide()}),p.done(function(){var t;st._removeData(e,"fxshow");for(t in h)st.style(e,t,h[t])});for(r=0;a>r;r++)i=g[r],l=p.createTween(i,m?s[i]:0),h[i]=s[i]||st.style(e,i),i in s||(s[i]=l.start,m&&(l.end=l.start,l.start="width"===i||"height"===i?1:0))}}function $(e,t,n,r,i){return new $.prototype.init(e,t,n,r,i)}function I(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=wn[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function z(e){return st.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}var X,U,V=e.document,Y=e.location,J=e.jQuery,G=e.$,Q={},K=[],Z="1.9.0",et=K.concat,tt=K.push,nt=K.slice,rt=K.indexOf,it=Q.toString,ot=Q.hasOwnProperty,at=Z.trim,st=function(e,t){return new st.fn.init(e,t,X)},ut=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,lt=/\S+/g,ct=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ft=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,pt=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,dt=/^[\],:{}\s]*$/,ht=/(?:^|:|,)(?:\s*\[)+/g,gt=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,mt=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,yt=/^-ms-/,vt=/-([\da-z])/gi,bt=function(e,t){return t.toUpperCase()},xt=function(){V.addEventListener?(V.removeEventListener("DOMContentLoaded",xt,!1),st.ready()):"complete"===V.readyState&&(V.detachEvent("onreadystatechange",xt),st.ready())};st.fn=st.prototype={jquery:Z,constructor:st,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ft.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof st?n[0]:n,st.merge(this,st.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:V,!0)),pt.test(i[1])&&st.isPlainObject(n))for(i in n)st.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=V.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=V,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):st.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),st.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return nt.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=st.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return st.each(this,e,t)},ready:function(e){return st.ready.promise().done(e),this},slice:function(){return this.pushStack(nt.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(st.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:tt,sort:[].sort,splice:[].splice},st.fn.init.prototype=st.fn,st.extend=st.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||st.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(e=arguments[u]))for(n in e)r=s[n],i=e[n],s!==i&&(c&&i&&(st.isPlainObject(i)||(o=st.isArray(i)))?(o?(o=!1,a=r&&st.isArray(r)?r:[]):a=r&&st.isPlainObject(r)?r:{},s[n]=st.extend(c,a,i)):i!==t&&(s[n]=i));return s},st.extend({noConflict:function(t){return e.$===st&&(e.$=G),t&&e.jQuery===st&&(e.jQuery=J),st},isReady:!1,readyWait:1,holdReady:function(e){e?st.readyWait++:st.ready(!0)},ready:function(e){if(e===!0?!--st.readyWait:!st.isReady){if(!V.body)return setTimeout(st.ready);st.isReady=!0,e!==!0&&--st.readyWait>0||(U.resolveWith(V,[st]),st.fn.trigger&&st(V).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===st.type(e)},isArray:Array.isArray||function(e){return"array"===st.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?Q[it.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==st.type(e)||e.nodeType||st.isWindow(e))return!1;try{if(e.constructor&&!ot.call(e,"constructor")&&!ot.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||ot.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||V;var r=pt.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=st.buildFragment([e],t,i),i&&st(i).remove(),st.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=st.trim(n),n&&dt.test(n.replace(gt,"@").replace(mt,"]").replace(ht,"")))?Function("return "+n)():(st.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||st.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&st.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(yt,"ms-").replace(vt,bt)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,r){var i,o=0,a=e.length,s=n(e);if(r){if(s)for(;a>o&&(i=t.apply(e[o],r),i!==!1);o++);else for(o in e)if(i=t.apply(e[o],r),i===!1)break}else if(s)for(;a>o&&(i=t.call(e[o],o,e[o]),i!==!1);o++);else for(o in e)if(i=t.call(e[o],o,e[o]),i===!1)break;return e},trim:at&&!at.call("\ufeff\u00a0")?function(e){return null==e?"":at.call(e)}:function(e){return null==e?"":(e+"").replace(ct,"")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?st.merge(r,"string"==typeof e?[e]:e):tt.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(rt)return rt.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else for(;n[o]!==t;)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,r){var i,o=0,a=e.length,s=n(e),u=[];if(s)for(;a>o;o++)i=t(e[o],o,r),null!=i&&(u[u.length]=i);else for(o in e)i=t(e[o],o,r),null!=i&&(u[u.length]=i);return et.apply([],u)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(r=e[n],n=e,e=r),st.isFunction(e)?(i=nt.call(arguments,2),o=function(){return e.apply(n||this,i.concat(nt.call(arguments)))},o.guid=e.guid=e.guid||st.guid++,o):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===st.type(r)){o=!0;for(u in r)st.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,st.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(st(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),st.ready.promise=function(t){if(!U)if(U=st.Deferred(),"complete"===V.readyState)setTimeout(st.ready);else if(V.addEventListener)V.addEventListener("DOMContentLoaded",xt,!1),e.addEventListener("load",st.ready,!1);else{V.attachEvent("onreadystatechange",xt),e.attachEvent("onload",st.ready);var n=!1;try{n=null==e.frameElement&&V.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!st.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}st.ready()}}()}return U.promise(t)},st.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){Q["[object "+t+"]"]=t.toLowerCase()}),X=st(V);var Tt={};st.Callbacks=function(e){e="string"==typeof e?Tt[e]||r(e):st.extend({},e);var n,i,o,a,s,u,l=[],c=!e.once&&[],f=function(t){for(n=e.memory&&t,i=!0,u=a||0,a=0,s=l.length,o=!0;l&&s>u;u++)if(l[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}o=!1,l&&(c?c.length&&f(c.shift()):n?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function r(t){st.each(t,function(t,n){var i=st.type(n);"function"===i?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==i&&r(n)})})(arguments),o?s=l.length:n&&(a=t,f(n))}return this},remove:function(){return l&&st.each(arguments,function(e,t){for(var n;(n=st.inArray(t,l,n))>-1;)l.splice(n,1),o&&(s>=n&&s--,u>=n&&u--)}),this},has:function(e){return st.inArray(e,l)>-1},empty:function(){return l=[],this},disable:function(){return l=c=n=t,this},disabled:function(){return!l},lock:function(){return c=t,n||p.disable(),this},locked:function(){return!c},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!c||(o?c.push(t):f(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},st.extend({Deferred:function(e){var t=[["resolve","done",st.Callbacks("once memory"),"resolved"],["reject","fail",st.Callbacks("once memory"),"rejected"],["notify","progress",st.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return st.Deferred(function(n){st.each(t,function(t,o){var a=o[0],s=st.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&st.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?st.extend(e,r):r}},i={};return r.pipe=r.then,st.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=nt.call(arguments),a=o.length,s=1!==a||e&&st.isFunction(e.promise)?a:0,u=1===s?e:st.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?nt.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=Array(a),n=Array(a),r=Array(a);a>i;i++)o[i]&&st.isFunction(o[i].promise)?o[i].promise().done(l(i,r,o)).fail(u.reject).progress(l(i,n,t)):--s;return s||u.resolveWith(r,o),u.promise()}}),st.support=function(){var n,r,i,o,a,s,u,l,c,f,p=V.createElement("div");if(p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",r=p.getElementsByTagName("*"),i=p.getElementsByTagName("a")[0],!r||!i||!r.length)return{};o=V.createElement("select"),a=o.appendChild(V.createElement("option")),s=p.getElementsByTagName("input")[0],i.style.cssText="top:1px;float:left;opacity:.5",n={getSetAttribute:"t"!==p.className,leadingWhitespace:3===p.firstChild.nodeType,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(i.getAttribute("style")),hrefNormalized:"/a"===i.getAttribute("href"),opacity:/^0.5/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:!!s.value,optSelected:a.selected,enctype:!!V.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==V.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===V.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},s.checked=!0,n.noCloneChecked=s.cloneNode(!0).checked,o.disabled=!0,n.optDisabled=!a.disabled;try{delete p.test}catch(d){n.deleteExpando=!1}s=V.createElement("input"),s.setAttribute("value",""),n.input=""===s.getAttribute("value"),s.value="t",s.setAttribute("type","radio"),n.radioValue="t"===s.value,s.setAttribute("checked","t"),s.setAttribute("name","t"),u=V.createDocumentFragment(),u.appendChild(s),n.appendChecked=s.checked,n.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,p.attachEvent&&(p.attachEvent("onclick",function(){n.noCloneEvent=!1}),p.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})p.setAttribute(l="on"+f,"t"),n[f+"Bubbles"]=l in e||p.attributes[l].expando===!1;return p.style.backgroundClip="content-box",p.cloneNode(!0).style.backgroundClip="",n.clearCloneStyle="content-box"===p.style.backgroundClip,st(function(){var r,i,o,a="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",s=V.getElementsByTagName("body")[0];s&&(r=V.createElement("div"),r.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",s.appendChild(r).appendChild(p),p.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=p.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",c=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",n.reliableHiddenOffsets=c&&0===o[0].offsetHeight,p.innerHTML="",p.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%;",n.boxSizing=4===p.offsetWidth,n.doesNotIncludeMarginInBodyOffset=1!==s.offsetTop,e.getComputedStyle&&(n.pixelPosition="1%"!==(e.getComputedStyle(p,null)||{}).top,n.boxSizingReliable="4px"===(e.getComputedStyle(p,null)||{width:"4px"}).width,i=p.appendChild(V.createElement("div")),i.style.cssText=p.style.cssText=a,i.style.marginRight=i.style.width="0",p.style.width="1px",n.reliableMarginRight=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight)),p.style.zoom!==t&&(p.innerHTML="",p.style.cssText=a+"width:1px;padding:1px;display:inline;zoom:1",n.inlineBlockNeedsLayout=3===p.offsetWidth,p.style.display="block",p.innerHTML="<div></div>",p.firstChild.style.width="5px",n.shrinkWrapBlocks=3!==p.offsetWidth,s.style.zoom=1),s.removeChild(r),r=p=o=i=null)}),r=o=u=a=i=s=null,n}();var wt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Nt=/([A-Z])/g;st.extend({cache:{},expando:"jQuery"+(Z+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?st.cache[e[st.expando]]:e[st.expando],!!e&&!s(e)},data:function(e,t,n){return i(e,t,n,!1)},removeData:function(e,t){return o(e,t,!1)},_data:function(e,t,n){return i(e,t,n,!0)},_removeData:function(e,t){return o(e,t,!0)},acceptData:function(e){var t=e.nodeName&&st.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),st.fn.extend({data:function(e,n){var r,i,o=this[0],s=0,u=null;if(e===t){if(this.length&&(u=st.data(o),1===o.nodeType&&!st._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>s;s++)i=r[s].name,i.indexOf("data-")||(i=st.camelCase(i.substring(5)),a(o,i,u[i]));st._data(o,"parsedAttrs",!0)}return u}return"object"==typeof e?this.each(function(){st.data(this,e)}):st.access(this,function(n){return n===t?o?a(o,e,st.data(o,e)):null:(this.each(function(){st.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){st.removeData(this,e)})}}),st.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=st._data(e,n),r&&(!i||st.isArray(r)?i=st._data(e,n,st.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=st.queue(e,t),r=n.length,i=n.shift(),o=st._queueHooks(e,t),a=function(){st.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return st._data(e,n)||st._data(e,n,{empty:st.Callbacks("once memory").add(function(){st._removeData(e,t+"queue"),st._removeData(e,n)})})}}),st.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?st.queue(this[0],e):n===t?this:this.each(function(){var t=st.queue(this,e,n);st._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&st.dequeue(this,e)})},dequeue:function(e){return this.each(function(){st.dequeue(this,e)})},delay:function(e,t){return e=st.fx?st.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=st.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};for("string"!=typeof e&&(n=e,e=t),e=e||"fx";s--;)r=st._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var Ct,kt,Et=/[\t\r\n]/g,St=/\r/g,At=/^(?:input|select|textarea|button|object)$/i,jt=/^(?:a|area)$/i,Dt=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,Lt=/^(?:checked|selected)$/i,Ht=st.support.getSetAttribute,Mt=st.support.input;st.fn.extend({attr:function(e,t){return st.access(this,st.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){st.removeAttr(this,e)})},prop:function(e,t){return st.access(this,st.prop,e,t,arguments.length>1)},removeProp:function(e){return e=st.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):" ")){for(o=0;i=t[o++];)0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=st.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):"")){for(o=0;i=t[o++];)for(;r.indexOf(" "+i+" ")>=0;)r=r.replace(" "+i+" "," ");n.className=e?st.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return st.isFunction(e)?this.each(function(n){st(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n)for(var i,o=0,a=st(this),s=t,u=e.match(lt)||[];i=u[o++];)s=r?s:!a.hasClass(i),a[s?"addClass":"removeClass"](i);else("undefined"===n||"boolean"===n)&&(this.className&&st._data(this,"__className__",this.className),this.className=this.className||e===!1?"":st._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Et," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=st.isFunction(e),this.each(function(r){var o,a=st(this);1===this.nodeType&&(o=i?e.call(this,r,a.val()):e,null==o?o="":"number"==typeof o?o+="":st.isArray(o)&&(o=st.map(o,function(e){return null==e?"":e+""})),n=st.valHooks[this.type]||st.valHooks[this.nodeName.toLowerCase()],n&&"set"in n&&n.set(this,o,"value")!==t||(this.value=o))});if(o)return n=st.valHooks[o.type]||st.valHooks[o.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(o,"value"))!==t?r:(r=o.value,"string"==typeof r?r.replace(St,""):null==r?"":r)}}}),st.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(st.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&st.nodeName(n.parentNode,"optgroup"))){if(t=st(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=st.makeArray(t);return st(e).find("option").each(function(){this.selected=st.inArray(st(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return e.getAttribute===t?st.prop(e,n,r):(a=1!==s||!st.isXMLDoc(e),a&&(n=n.toLowerCase(),o=st.attrHooks[n]||(Dt.test(n)?kt:Ct)),r===t?o&&a&&"get"in o&&null!==(i=o.get(e,n))?i:(e.getAttribute!==t&&(i=e.getAttribute(n)),null==i?t:i):null!==r?o&&a&&"set"in o&&(i=o.set(e,r,n))!==t?i:(e.setAttribute(n,r+""),r):(st.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(lt);if(o&&1===e.nodeType)for(;n=o[i++];)r=st.propFix[n]||n,Dt.test(n)?!Ht&&Lt.test(n)?e[st.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:st.attr(e,n,""),e.removeAttribute(Ht?n:r)},attrHooks:{type:{set:function(e,t){if(!st.support.radioValue&&"radio"===t&&st.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},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(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!st.isXMLDoc(e),a&&(n=st.propFix[n]||n,o=st.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):At.test(e.nodeName)||jt.test(e.nodeName)&&e.href?0:t}}}}),kt={get:function(e,n){var r=st.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?Mt&&Ht?null!=i:Lt.test(n)?e[st.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?st.removeAttr(e,n):Mt&&Ht||!Lt.test(n)?e.setAttribute(!Ht&&st.propFix[n]||n,n):e[st.camelCase("default-"+n)]=e[n]=!0,n}},Mt&&Ht||(st.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return st.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t
+-},set:function(e,n,r){return st.nodeName(e,"input")?(e.defaultValue=n,t):Ct&&Ct.set(e,n,r)}}),Ht||(Ct=st.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},st.attrHooks.contenteditable={get:Ct.get,set:function(e,t,n){Ct.set(e,""===t?!1:t,n)}},st.each(["width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),st.support.hrefNormalized||(st.each(["href","src","width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),st.each(["href","src"],function(e,t){st.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),st.support.style||(st.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),st.support.optSelected||(st.propHooks.selected=st.extend(st.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),st.support.enctype||(st.propFix.enctype="encoding"),st.support.checkOn||st.each(["radio","checkbox"],function(){st.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),st.each(["radio","checkbox"],function(){st.valHooks[this]=st.extend(st.valHooks[this],{set:function(e,n){return st.isArray(n)?e.checked=st.inArray(st(e).val(),n)>=0:t}})});var qt=/^(?:input|select|textarea)$/i,_t=/^key/,Ft=/^(?:mouse|contextmenu)|click/,Ot=/^(?:focusinfocus|focusoutblur)$/,Bt=/^([^.]*)(?:\.(.+)|)$/;st.event={global:{},add:function(e,n,r,i,o){var a,s,u,l,c,f,p,d,h,g,m,y=3!==e.nodeType&&8!==e.nodeType&&st._data(e);if(y){for(r.handler&&(a=r,r=a.handler,o=a.selector),r.guid||(r.guid=st.guid++),(l=y.events)||(l=y.events={}),(s=y.handle)||(s=y.handle=function(e){return st===t||e&&st.event.triggered===e.type?t:st.event.dispatch.apply(s.elem,arguments)},s.elem=e),n=(n||"").match(lt)||[""],c=n.length;c--;)u=Bt.exec(n[c])||[],h=m=u[1],g=(u[2]||"").split(".").sort(),p=st.event.special[h]||{},h=(o?p.delegateType:p.bindType)||h,p=st.event.special[h]||{},f=st.extend({type:h,origType:m,data:i,handler:r,guid:r.guid,selector:o,needsContext:o&&st.expr.match.needsContext.test(o),namespace:g.join(".")},a),(d=l[h])||(d=l[h]=[],d.delegateCount=0,p.setup&&p.setup.call(e,i,g,s)!==!1||(e.addEventListener?e.addEventListener(h,s,!1):e.attachEvent&&e.attachEvent("on"+h,s))),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=r.guid)),o?d.splice(d.delegateCount++,0,f):d.push(f),st.event.global[h]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,m=st.hasData(e)&&st._data(e);if(m&&(u=m.events)){for(t=(t||"").match(lt)||[""],l=t.length;l--;)if(s=Bt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){for(f=st.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&f.teardown.call(e,h,m.handle)!==!1||st.removeEvent(e,d,m.handle),delete u[d])}else for(d in u)st.event.remove(e,d+t[l],n,r,!0);st.isEmptyObject(u)&&(delete m.handle,st._removeData(e,"events"))}},trigger:function(n,r,i,o){var a,s,u,l,c,f,p,d=[i||V],h=n.type||n,g=n.namespace?n.namespace.split("."):[];if(s=u=i=i||V,3!==i.nodeType&&8!==i.nodeType&&!Ot.test(h+st.event.triggered)&&(h.indexOf(".")>=0&&(g=h.split("."),h=g.shift(),g.sort()),c=0>h.indexOf(":")&&"on"+h,n=n[st.expando]?n:new st.Event(h,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=g.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:st.makeArray(r,[n]),p=st.event.special[h]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!st.isWindow(i)){for(l=p.delegateType||h,Ot.test(l+h)||(s=s.parentNode);s;s=s.parentNode)d.push(s),u=s;u===(i.ownerDocument||V)&&d.push(u.defaultView||u.parentWindow||e)}for(a=0;(s=d[a++])&&!n.isPropagationStopped();)n.type=a>1?l:p.bindType||h,f=(st._data(s,"events")||{})[n.type]&&st._data(s,"handle"),f&&f.apply(s,r),f=c&&s[c],f&&st.acceptData(s)&&f.apply&&f.apply(s,r)===!1&&n.preventDefault();if(n.type=h,!(o||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===h&&st.nodeName(i,"a")||!st.acceptData(i)||!c||!i[h]||st.isWindow(i))){u=i[c],u&&(i[c]=null),st.event.triggered=h;try{i[h]()}catch(m){}st.event.triggered=t,u&&(i[c]=u)}return n.result}},dispatch:function(e){e=st.event.fix(e);var n,r,i,o,a,s=[],u=nt.call(arguments),l=(st._data(this,"events")||{})[e.type]||[],c=st.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=st.event.handlers.call(this,e,l),n=0;(o=s[n++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(a=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,i=((st.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u),i!==t&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(l.disabled!==!0||"click"!==e.type){for(i=[],r=0;u>r;r++)a=n[r],o=a.selector+" ",i[o]===t&&(i[o]=a.needsContext?st(o,this).index(l)>=0:st.find(o,this,null,[l]).length),i[o]&&i.push(a);i.length&&s.push({elem:l,handlers:i})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[st.expando])return e;var t,n,r=e,i=st.event.fixHooks[e.type]||{},o=i.props?this.props.concat(i.props):this.props;for(e=new st.Event(r),t=o.length;t--;)n=o[t],e[n]=r[n];return e.target||(e.target=r.srcElement||V),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,i.filter?i.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,a=n.button,s=n.fromElement;return null==e.pageX&&null!=n.clientX&&(r=e.target.ownerDocument||V,i=r.documentElement,o=r.body,e.pageX=n.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&s&&(e.relatedTarget=s===e.target?n.toElement:s),e.which||a===t||(e.which=1&a?1:2&a?3:4&a?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return st.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==V.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===V.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=st.extend(new st.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?st.event.trigger(i,null,t):st.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},st.removeEvent=V.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,n,r){var i="on"+n;e.detachEvent&&(e[i]===t&&(e[i]=null),e.detachEvent(i,r))},st.Event=function(e,n){return this instanceof st.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?u:l):this.type=e,n&&st.extend(this,n),this.timeStamp=e&&e.timeStamp||st.now(),this[st.expando]=!0,t):new st.Event(e,n)},st.Event.prototype={isDefaultPrevented:l,isPropagationStopped:l,isImmediatePropagationStopped:l,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=u,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=u,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u,this.stopPropagation()}},st.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){st.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!st.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),st.support.submitBubbles||(st.event.special.submit={setup:function(){return st.nodeName(this,"form")?!1:(st.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=st.nodeName(n,"input")||st.nodeName(n,"button")?n.form:t;r&&!st._data(r,"submitBubbles")&&(st.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),st._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&st.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return st.nodeName(this,"form")?!1:(st.event.remove(this,"._submit"),t)}}),st.support.changeBubbles||(st.event.special.change={setup:function(){return qt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(st.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),st.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),st.event.simulate("change",this,e,!0)})),!1):(st.event.add(this,"beforeactivate._change",function(e){var t=e.target;qt.test(t.nodeName)&&!st._data(t,"changeBubbles")&&(st.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||st.event.simulate("change",this.parentNode,e,!0)}),st._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return st.event.remove(this,"._change"),!qt.test(this.nodeName)}}),st.support.focusinBubbles||st.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){st.event.simulate(t,e.target,st.event.fix(e),!0)};st.event.special[t]={setup:function(){0===n++&&V.addEventListener(e,r,!0)},teardown:function(){0===--n&&V.removeEventListener(e,r,!0)}}}),st.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(s in e)this.on(s,n,r,e[s],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=l;else if(!i)return this;return 1===o&&(a=i,i=function(e){return st().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=st.guid++)),this.each(function(){st.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,st(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=l),this.each(function(){st.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){st.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?st.event.trigger(e,n,r,!0):t},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),st.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(e,t){st.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)},_t.test(t)&&(st.event.fixHooks[t]=st.event.keyHooks),Ft.test(t)&&(st.event.fixHooks[t]=st.event.mouseHooks)}),function(e,t){function n(e){return ht.test(e+"")}function r(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>C.cacheLength&&delete e[t.shift()],e[n]=r}}function i(e){return e[P]=!0,e}function o(e){var t=L.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function a(e,t,n,r){var i,o,a,s,u,l,c,d,h,g;if((t?t.ownerDocument||t:R)!==L&&D(t),t=t||L,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!M&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Q.apply(n,K.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&W.getByClassName&&t.getElementsByClassName)return Q.apply(n,K.call(t.getElementsByClassName(a),0)),n}if(W.qsa&&!q.test(e)){if(c=!0,d=P,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(l=f(e),(c=t.getAttribute("id"))?d=c.replace(vt,"\\$&"):t.setAttribute("id",d),d="[id='"+d+"'] ",u=l.length;u--;)l[u]=d+p(l[u]);h=dt.test(e)&&t.parentNode||t,g=l.join(",")}if(g)try{return Q.apply(n,K.call(h.querySelectorAll(g),0)),n}catch(m){}finally{c||t.removeAttribute("id")}}}return x(e.replace(at,"$1"),t,n,r)}function s(e,t){for(var n=e&&t&&e.nextSibling;n;n=n.nextSibling)if(n===t)return-1;return e?1:-1}function u(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return i(function(t){return t=+t,i(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function f(e,t){var n,r,i,o,s,u,l,c=X[e+" "];if(c)return t?0:c.slice(0);for(s=e,u=[],l=C.preFilter;s;){(!n||(r=ut.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(i=[])),n=!1,(r=lt.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(at," ")}),s=s.slice(n.length));for(o in C.filter)!(r=pt[o].exec(s))||l[o]&&!(r=l[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?a.error(e):X(e,u).slice(0)}function p(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,i=n&&"parentNode"===t.dir,o=I++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,u,l,c=$+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(l=t[P]||(t[P]={}),(u=l[r])&&u[0]===c){if((s=u[1])===!0||s===N)return s===!0}else if(u=l[r]=[c],u[1]=e(t,n,a)||N,u[1]===!0)return!0}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function m(e,t,n,r,o,a){return r&&!r[P]&&(r=m(r)),o&&!o[P]&&(o=m(o,a)),i(function(i,a,s,u){var l,c,f,p=[],d=[],h=a.length,m=i||b(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?m:g(m,p,e,s,u),v=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r)for(l=g(v,d),r(l,[],s,u),c=l.length;c--;)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f));if(i){if(o||e){if(o){for(l=[],c=v.length;c--;)(f=v[c])&&l.push(y[c]=f);o(null,v=[],l,u)}for(c=v.length;c--;)(f=v[c])&&(l=o?Z.call(i,f):p[c])>-1&&(i[l]=!(a[l]=f))}}else v=g(v===a?v.splice(h,v.length):v),o?o(null,a,v,u):Q.apply(a,v)})}function y(e){for(var t,n,r,i=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=o?1:0,u=d(function(e){return e===t},a,!0),l=d(function(e){return Z.call(t,e)>-1},a,!0),c=[function(e,n,r){return!o&&(r||n!==j)||((t=n).nodeType?u(e,n,r):l(e,n,r))}];i>s;s++)if(n=C.relative[e[s].type])c=[d(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[P]){for(r=++s;i>r&&!C.relative[e[r].type];r++);return m(s>1&&h(c),s>1&&p(e.slice(0,s-1)).replace(at,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&p(e))}c.push(n)}return h(c)}function v(e,t){var n=0,r=t.length>0,o=e.length>0,s=function(i,s,u,l,c){var f,p,d,h=[],m=0,y="0",v=i&&[],b=null!=c,x=j,T=i||o&&C.find.TAG("*",c&&s.parentNode||s),w=$+=null==x?1:Math.E;for(b&&(j=s!==L&&s,N=n);null!=(f=T[y]);y++){if(o&&f){for(p=0;d=e[p];p++)if(d(f,s,u)){l.push(f);break}b&&($=w,N=++n)}r&&((f=!d&&f)&&m--,i&&v.push(f))}if(m+=y,r&&y!==m){for(p=0;d=t[p];p++)d(v,h,s,u);if(i){if(m>0)for(;y--;)v[y]||h[y]||(h[y]=G.call(l));h=g(h)}Q.apply(l,h),b&&!i&&h.length>0&&m+t.length>1&&a.uniqueSort(l)}return b&&($=w,j=x),v};return r?i(s):s}function b(e,t,n){for(var r=0,i=t.length;i>r;r++)a(e,t[r],n);return n}function x(e,t,n,r){var i,o,a,s,u,l=f(e);if(!r&&1===l.length){if(o=l[0]=l[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&!M&&C.relative[o[1].type]){if(t=C.find.ID(a.matches[0].replace(xt,Tt),t)[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?-1:o.length-1;i>=0&&(a=o[i],!C.relative[s=a.type]);i--)if((u=C.find[s])&&(r=u(a.matches[0].replace(xt,Tt),dt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return Q.apply(n,K.call(r,0)),n;break}}return S(e,l)(r,t,M,n,dt.test(e)),n}function T(){}var w,N,C,k,E,S,A,j,D,L,H,M,q,_,F,O,B,P="sizzle"+-new Date,R=e.document,W={},$=0,I=0,z=r(),X=r(),U=r(),V=typeof t,Y=1<<31,J=[],G=J.pop,Q=J.push,K=J.slice,Z=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},et="[\\x20\\t\\r\\n\\f]",tt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",nt=tt.replace("w","w#"),rt="([*^$|!~]?=)",it="\\["+et+"*("+tt+")"+et+"*(?:"+rt+et+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+nt+")|)|)"+et+"*\\]",ot=":("+tt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+it.replace(3,8)+")*)|.*)\\)|)",at=RegExp("^"+et+"+|((?:^|[^\\\\])(?:\\\\.)*)"+et+"+$","g"),ut=RegExp("^"+et+"*,"+et+"*"),lt=RegExp("^"+et+"*([\\x20\\t\\r\\n\\f>+~])"+et+"*"),ct=RegExp(ot),ft=RegExp("^"+nt+"$"),pt={ID:RegExp("^#("+tt+")"),CLASS:RegExp("^\\.("+tt+")"),NAME:RegExp("^\\[name=['\"]?("+tt+")['\"]?\\]"),TAG:RegExp("^("+tt.replace("w","w*")+")"),ATTR:RegExp("^"+it),PSEUDO:RegExp("^"+ot),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+et+"*(even|odd|(([+-]|)(\\d*)n|)"+et+"*(?:([+-]|)"+et+"*(\\d+)|))"+et+"*\\)|)","i"),needsContext:RegExp("^"+et+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+et+"*((?:-\\d)?\\d*)"+et+"*\\)|)(?=[^-]|$)","i")},dt=/[\x20\t\r\n\f]*[+~]/,ht=/\{\s*\[native code\]\s*\}/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,vt=/'|\\/g,bt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,Tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{K.call(H.childNodes,0)[0].nodeType}catch(wt){K=function(e){for(var t,n=[];t=this[e];e++)n.push(t);return n}}E=a.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},D=a.setDocument=function(e){var r=e?e.ownerDocument||e:R;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=r.documentElement,M=E(r),W.tagNameNoComments=o(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),W.attributes=o(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),W.getByClassName=o(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),W.getByName=o(function(e){e.id=P+0,e.innerHTML="<a name='"+P+"'></a><div name='"+P+"'></div>",H.insertBefore(e,H.firstChild);var t=r.getElementsByName&&r.getElementsByName(P).length===2+r.getElementsByName(P+0).length;return W.getIdNotName=!r.getElementById(P),H.removeChild(e),t}),C.attrHandle=o(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==V&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},W.getIdNotName?(C.find.ID=function(e,t){if(typeof t.getElementById!==V&&!M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){return e.getAttribute("id")===t}}):(C.find.ID=function(e,n){if(typeof n.getElementById!==V&&!M){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==V&&r.getAttributeNode("id").value===e?[r]:t:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){var n=typeof e.getAttributeNode!==V&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=W.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==V?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i];i++)1===n.nodeType&&r.push(n);return r}return o},C.find.NAME=W.getByName&&function(e,n){return typeof n.getElementsByName!==V?n.getElementsByName(name):t},C.find.CLASS=W.getByClassName&&function(e,n){return typeof n.getElementsByClassName===V||M?t:n.getElementsByClassName(e)},_=[],q=[":focus"],(W.qsa=n(r.querySelectorAll))&&(o(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||q.push("\\["+et+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||q.push(":checked")}),o(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&q.push("[*^$]="+et+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),q.push(",.*:")})),(W.matchesSelector=n(F=H.matchesSelector||H.mozMatchesSelector||H.webkitMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){W.disconnectedMatch=F.call(e,"div"),F.call(e,"[s!='']:x"),_.push("!=",ot)}),q=RegExp(q.join("|")),_=RegExp(_.join("|")),O=n(H.contains)||H.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},B=H.compareDocumentPosition?function(e,t){var n;return e===t?(A=!0,0):(n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&n||e.parentNode&&11===e.parentNode.nodeType?e===r||O(R,e)?-1:t===r||O(R,t)?1:0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,a=t.parentNode,u=[e],l=[t];if(e===t)return A=!0,0;if(e.sourceIndex&&t.sourceIndex)return(~t.sourceIndex||Y)-(O(R,e)&&~e.sourceIndex||Y);if(!o||!a)return e===r?-1:t===r?1:o?-1:a?1:0;if(o===a)return s(e,t);for(n=e;n=n.parentNode;)u.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;u[i]===l[i];)i++;return i?s(u[i],l[i]):u[i]===R?-1:l[i]===R?1:0},A=!1,[0,0].sort(B),W.detectDuplicates=A,L):L},a.matches=function(e,t){return a(e,null,null,t)},a.matchesSelector=function(e,t){if((e.ownerDocument||e)!==L&&D(e),t=t.replace(bt,"='$1']"),!(!W.matchesSelector||M||_&&_.test(t)||q.test(t)))try{var n=F.call(e,t);if(n||W.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return a(t,L,null,[e]).length>0},a.contains=function(e,t){return(e.ownerDocument||e)!==L&&D(e),O(e,t)},a.attr=function(e,t){var n;return(e.ownerDocument||e)!==L&&D(e),M||(t=t.toLowerCase()),(n=C.attrHandle[t])?n(e):M||W.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},a.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},a.uniqueSort=function(e){var t,n=[],r=1,i=0;if(A=!W.detectDuplicates,e.sort(B),A){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return e},k=a.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=k(t);return n},C=a.selectors={cacheLength:50,createPseudo:i,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,Tt),e[3]=(e[4]||e[5]||"").replace(xt,Tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||a.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&a.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&ct.test(n)&&(t=f(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,Tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=z[e+" "];return t||(t=RegExp("(^|"+et+")"+e+"("+et+"|$)"))&&z(e,function(e){return t.test(e.className||typeof e.getAttribute!==V&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=a.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.substr(i.length-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){for(;g;){for(f=t;f=f[g];)if(s?f.nodeName.toLowerCase()===y:1===f.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(c=m[P]||(m[P]={}),l=c[e]||[],d=l[0]===$&&l[1],p=l[0]===$&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(p=d=0)||h.pop();)if(1===f.nodeType&&++p&&f===t){c[e]=[$,d,p];break}}else if(v&&(l=(t[P]||(t[P]={}))[e])&&l[0]===$)p=l[1];else for(;(f=++d&&f&&f[g]||(p=d=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==y:1!==f.nodeType)||!++p||(v&&((f[P]||(f[P]={}))[e]=[$,p]),f!==t)););return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,r=C.pseudos[e]||C.setFilters[e.toLowerCase()]||a.error("unsupported pseudo: "+e);return r[P]?r(t):r.length>1?(n=[e,e,"",t],C.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,n){for(var i,o=r(e,t),a=o.length;a--;)i=Z.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:i(function(e){var t=[],n=[],r=S(e.replace(at,"$1"));return r[P]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:i(function(e){return function(t){return a(e,t).length>0}}),contains:i(function(e){return function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:i(function(e){return ft.test(e||"")||a.error("unsupported lang: "+e),e=e.replace(xt,Tt).toLowerCase(),function(t){var n;do if(n=M?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return mt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;t>++r;)e.push(r);return e})}};for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})C.pseudos[w]=u(w);for(w in{submit:!0,reset:!0})C.pseudos[w]=l(w);S=a.compile=function(e,t){var n,r=[],i=[],o=U[e+" "];if(!o){for(t||(t=f(e)),n=t.length;n--;)o=y(t[n]),o[P]?r.push(o):i.push(o);o=U(e,v(i,r))}return o},C.pseudos.nth=C.pseudos.eq,C.filters=T.prototype=C.pseudos,C.setFilters=new T,D(),a.attr=st.attr,st.find=a,st.expr=a.selectors,st.expr[":"]=st.expr.pseudos,st.unique=a.uniqueSort,st.text=a.getText,st.isXMLDoc=a.isXML,st.contains=a.contains}(e);var Pt=/Until$/,Rt=/^(?:parents|prev(?:Until|All))/,Wt=/^.[^:#\[\.,]*$/,$t=st.expr.match.needsContext,It={children:!0,contents:!0,next:!0,prev:!0};st.fn.extend({find:function(e){var t,n,r;if("string"!=typeof e)return r=this,this.pushStack(st(e).filter(function(){for(t=0;r.length>t;t++)if(st.contains(r[t],this))return!0}));for(n=[],t=0;this.length>t;t++)st.find(e,this[t],n);return n=this.pushStack(st.unique(n)),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=st(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(st.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(f(this,e,!1))},filter:function(e){return this.pushStack(f(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?$t.test(e)?st(e,this.context).index(this[0])>=0:st.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=$t.test(e)||"string"!=typeof e?st(e,t||this.context):0;i>r;r++)for(n=this[r];n&&n.ownerDocument&&n!==t&&11!==n.nodeType;){if(a?a.index(n)>-1:st.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}return this.pushStack(o.length>1?st.unique(o):o)},index:function(e){return e?"string"==typeof e?st.inArray(this[0],st(e)):st.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?st(e,t):st.makeArray(e&&e.nodeType?[e]:e),r=st.merge(this.get(),n);return this.pushStack(st.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),st.fn.andSelf=st.fn.addBack,st.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return st.dir(e,"parentNode")},parentsUntil:function(e,t,n){return st.dir(e,"parentNode",n)},next:function(e){return c(e,"nextSibling")},prev:function(e){return c(e,"previousSibling")
+-},nextAll:function(e){return st.dir(e,"nextSibling")},prevAll:function(e){return st.dir(e,"previousSibling")},nextUntil:function(e,t,n){return st.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return st.dir(e,"previousSibling",n)},siblings:function(e){return st.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return st.sibling(e.firstChild)},contents:function(e){return st.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:st.merge([],e.childNodes)}},function(e,t){st.fn[e]=function(n,r){var i=st.map(this,t,n);return Pt.test(e)||(r=n),r&&"string"==typeof r&&(i=st.filter(r,i)),i=this.length>1&&!It[e]?st.unique(i):i,this.length>1&&Rt.test(e)&&(i=i.reverse()),this.pushStack(i)}}),st.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?st.find.matchesSelector(t[0],e)?[t[0]]:[]:st.find.matches(e,t)},dir:function(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!st(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});var zt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Xt=/ jQuery\d+="(?:null|\d+)"/g,Ut=RegExp("<(?:"+zt+")[\\s/>]","i"),Vt=/^\s+/,Yt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Jt=/<([\w:]+)/,Gt=/<tbody/i,Qt=/<|&#?\w+;/,Kt=/<(?:script|style|link)/i,Zt=/^(?:checkbox|radio)$/i,en=/checked\s*(?:[^=]|=\s*.checked.)/i,tn=/^$|\/(?:java|ecma)script/i,nn=/^true\/(.*)/,rn=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,on={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:st.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},an=p(V),sn=an.appendChild(V.createElement("div"));on.optgroup=on.option,on.tbody=on.tfoot=on.colgroup=on.caption=on.thead,on.th=on.td,st.fn.extend({text:function(e){return st.access(this,function(e){return e===t?st.text(this):this.empty().append((this[0]&&this[0].ownerDocument||V).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(st.isFunction(e))return this.each(function(t){st(this).wrapAll(e.call(this,t))});if(this[0]){var t=st(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return st.isFunction(e)?this.each(function(t){st(this).wrapInner(e.call(this,t))}):this.each(function(){var t=st(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=st.isFunction(e);return this.each(function(n){st(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){st.nodeName(this,"body")||st(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,r=0;null!=(n=this[r]);r++)(!e||st.filter(e,[n]).length>0)&&(t||1!==n.nodeType||st.cleanData(b(n)),n.parentNode&&(t&&st.contains(n.ownerDocument,n)&&m(b(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&st.cleanData(b(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&st.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return st.clone(this,e,t)})},html:function(e){return st.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(Xt,""):t;if(!("string"!=typeof e||Kt.test(e)||!st.support.htmlSerialize&&Ut.test(e)||!st.support.leadingWhitespace&&Vt.test(e)||on[(Jt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Yt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(st.cleanData(b(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=st.isFunction(e);return t||"string"==typeof e||(e=st(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;(n&&1===this.nodeType||11===this.nodeType)&&(st(this).remove(),t?t.parentNode.insertBefore(e,t):n.appendChild(e))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=et.apply([],e);var i,o,a,s,u,l,c=0,f=this.length,p=this,m=f-1,y=e[0],v=st.isFunction(y);if(v||!(1>=f||"string"!=typeof y||st.support.checkClone)&&en.test(y))return this.each(function(i){var o=p.eq(i);v&&(e[0]=y.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(f&&(i=st.buildFragment(e,this[0].ownerDocument,!1,this),o=i.firstChild,1===i.childNodes.length&&(i=o),o)){for(n=n&&st.nodeName(o,"tr"),a=st.map(b(i,"script"),h),s=a.length;f>c;c++)u=i,c!==m&&(u=st.clone(u,!0,!0),s&&st.merge(a,b(u,"script"))),r.call(n&&st.nodeName(this[c],"table")?d(this[c],"tbody"):this[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,st.map(a,g),c=0;s>c;c++)u=a[c],tn.test(u.type||"")&&!st._data(u,"globalEval")&&st.contains(l,u)&&(u.src?st.ajax({url:u.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):st.globalEval((u.text||u.textContent||u.innerHTML||"").replace(rn,"")));i=o=null}return this}}),st.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){st.fn[e]=function(e){for(var n,r=0,i=[],o=st(e),a=o.length-1;a>=r;r++)n=r===a?this:this.clone(!0),st(o[r])[t](n),tt.apply(i,n.get());return this.pushStack(i)}}),st.extend({clone:function(e,t,n){var r,i,o,a,s,u=st.contains(e.ownerDocument,e);if(st.support.html5Clone||st.isXMLDoc(e)||!Ut.test("<"+e.nodeName+">")?s=e.cloneNode(!0):(sn.innerHTML=e.outerHTML,sn.removeChild(s=sn.firstChild)),!(st.support.noCloneEvent&&st.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||st.isXMLDoc(e)))for(r=b(s),i=b(e),a=0;null!=(o=i[a]);++a)r[a]&&v(o,r[a]);if(t)if(n)for(i=i||b(e),r=r||b(s),a=0;null!=(o=i[a]);a++)y(o,r[a]);else y(e,s);return r=b(s,"script"),r.length>0&&m(r,!u&&b(e,"script")),r=i=o=null,s},buildFragment:function(e,t,n,r){for(var i,o,a,s,u,l,c,f=e.length,d=p(t),h=[],g=0;f>g;g++)if(o=e[g],o||0===o)if("object"===st.type(o))st.merge(h,o.nodeType?[o]:o);else if(Qt.test(o)){for(s=s||d.appendChild(t.createElement("div")),a=(Jt.exec(o)||["",""])[1].toLowerCase(),u=on[a]||on._default,s.innerHTML=u[1]+o.replace(Yt,"<$1></$2>")+u[2],c=u[0];c--;)s=s.lastChild;if(!st.support.leadingWhitespace&&Vt.test(o)&&h.push(t.createTextNode(Vt.exec(o)[0])),!st.support.tbody)for(o="table"!==a||Gt.test(o)?"<table>"!==u[1]||Gt.test(o)?0:s:s.firstChild,c=o&&o.childNodes.length;c--;)st.nodeName(l=o.childNodes[c],"tbody")&&!l.childNodes.length&&o.removeChild(l);for(st.merge(h,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=d.lastChild}else h.push(t.createTextNode(o));for(s&&d.removeChild(s),st.support.appendChecked||st.grep(b(h,"input"),x),g=0;o=h[g++];)if((!r||-1===st.inArray(o,r))&&(i=st.contains(o.ownerDocument,o),s=b(d.appendChild(o),"script"),i&&m(s),n))for(c=0;o=s[c++];)tn.test(o.type||"")&&n.push(o);return s=null,d},cleanData:function(e,n){for(var r,i,o,a,s=0,u=st.expando,l=st.cache,c=st.support.deleteExpando,f=st.event.special;null!=(o=e[s]);s++)if((n||st.acceptData(o))&&(i=o[u],r=i&&l[i])){if(r.events)for(a in r.events)f[a]?st.event.remove(o,a):st.removeEvent(o,a,r.handle);l[i]&&(delete l[i],c?delete o[u]:o.removeAttribute!==t?o.removeAttribute(u):o[u]=null,K.push(i))}}});var un,ln,cn,fn=/alpha\([^)]*\)/i,pn=/opacity\s*=\s*([^)]*)/,dn=/^(top|right|bottom|left)$/,hn=/^(none|table(?!-c[ea]).+)/,gn=/^margin/,mn=RegExp("^("+ut+")(.*)$","i"),yn=RegExp("^("+ut+")(?!px)[a-z%]+$","i"),vn=RegExp("^([+-])=("+ut+")","i"),bn={BODY:"block"},xn={position:"absolute",visibility:"hidden",display:"block"},Tn={letterSpacing:0,fontWeight:400},wn=["Top","Right","Bottom","Left"],Nn=["Webkit","O","Moz","ms"];st.fn.extend({css:function(e,n){return st.access(this,function(e,n,r){var i,o,a={},s=0;if(st.isArray(n)){for(i=ln(e),o=n.length;o>s;s++)a[n[s]]=st.css(e,n[s],!1,i);return a}return r!==t?st.style(e,n,r):st.css(e,n)},e,n,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:w(this))?st(this).show():st(this).hide()})}}),st.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=un(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":st.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=st.camelCase(n),l=e.style;if(n=st.cssProps[u]||(st.cssProps[u]=T(l,u)),s=st.cssHooks[n]||st.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=vn.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(st.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||st.cssNumber[u]||(r+="px"),st.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=st.camelCase(n);return n=st.cssProps[u]||(st.cssProps[u]=T(e.style,u)),s=st.cssHooks[n]||st.cssHooks[u],s&&"get"in s&&(o=s.get(e,!0,r)),o===t&&(o=un(e,n,i)),"normal"===o&&n in Tn&&(o=Tn[n]),r?(a=parseFloat(o),r===!0||st.isNumeric(a)?a||0:o):o},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(ln=function(t){return e.getComputedStyle(t,null)},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||st.contains(e.ownerDocument,e)||(u=st.style(e,n)),yn.test(u)&&gn.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):V.documentElement.currentStyle&&(ln=function(e){return e.currentStyle},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),yn.test(u)&&!dn.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u}),st.each(["height","width"],function(e,n){st.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&hn.test(st.css(e,"display"))?st.swap(e,xn,function(){return E(e,n,i)}):E(e,n,i):t},set:function(e,t,r){var i=r&&ln(e);return C(e,t,r?k(e,n,r,st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,i),i):0)}}}),st.support.opacity||(st.cssHooks.opacity={get:function(e,t){return pn.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=st.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===st.trim(o.replace(fn,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=fn.test(o)?o.replace(fn,i):o+" "+i)}}),st(function(){st.support.reliableMarginRight||(st.cssHooks.marginRight={get:function(e,n){return n?st.swap(e,{display:"inline-block"},un,[e,"marginRight"]):t}}),!st.support.pixelPosition&&st.fn.position&&st.each(["top","left"],function(e,n){st.cssHooks[n]={get:function(e,r){return r?(r=un(e,n),yn.test(r)?st(e).position()[n]+"px":r):t}}})}),st.expr&&st.expr.filters&&(st.expr.filters.hidden=function(e){return 0===e.offsetWidth&&0===e.offsetHeight||!st.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||st.css(e,"display"))},st.expr.filters.visible=function(e){return!st.expr.filters.hidden(e)}),st.each({margin:"",padding:"",border:"Width"},function(e,t){st.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];4>r;r++)i[e+wn[r]+t]=o[r]||o[r-2]||o[0];return i}},gn.test(e)||(st.cssHooks[e+t].set=C)});var Cn=/%20/g,kn=/\[\]$/,En=/\r?\n/g,Sn=/^(?:submit|button|image|reset)$/i,An=/^(?:input|select|textarea|keygen)/i;st.fn.extend({serialize:function(){return st.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=st.prop(this,"elements");return e?st.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!st(this).is(":disabled")&&An.test(this.nodeName)&&!Sn.test(e)&&(this.checked||!Zt.test(e))}).map(function(e,t){var n=st(this).val();return null==n?null:st.isArray(n)?st.map(n,function(e){return{name:t.name,value:e.replace(En,"\r\n")}}):{name:t.name,value:n.replace(En,"\r\n")}}).get()}}),st.param=function(e,n){var r,i=[],o=function(e,t){t=st.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=st.ajaxSettings&&st.ajaxSettings.traditional),st.isArray(e)||e.jquery&&!st.isPlainObject(e))st.each(e,function(){o(this.name,this.value)});else for(r in e)j(r,e[r],n,o);return i.join("&").replace(Cn,"+")};var jn,Dn,Ln=st.now(),Hn=/\?/,Mn=/#.*$/,qn=/([?&])_=[^&]*/,_n=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Fn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,On=/^(?:GET|HEAD)$/,Bn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Rn=st.fn.load,Wn={},$n={},In="*/".concat("*");try{Dn=Y.href}catch(zn){Dn=V.createElement("a"),Dn.href="",Dn=Dn.href}jn=Pn.exec(Dn.toLowerCase())||[],st.fn.load=function(e,n,r){if("string"!=typeof e&&Rn)return Rn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),st.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(o="POST"),s.length>0&&st.ajax({url:e,type:o,dataType:"html",data:n}).done(function(e){a=arguments,s.html(i?st("<div>").append(st.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,a||[e.responseText,t,e])}),this},st.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){st.fn[t]=function(e){return this.on(t,e)}}),st.each(["get","post"],function(e,n){st[n]=function(e,r,i,o){return st.isFunction(r)&&(o=o||i,i=r,r=t),st.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),st.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Dn,type:"GET",isLocal:Fn.test(jn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":In,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":st.parseJSON,"text xml":st.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?H(H(e,st.ajaxSettings),t):H(st.ajaxSettings,e)},ajaxPrefilter:D(Wn),ajaxTransport:D($n),ajax:function(e,n){function r(e,n,r,s){var l,f,v,b,T,N=n;2!==x&&(x=2,u&&clearTimeout(u),i=t,a=s||"",w.readyState=e>0?4:0,r&&(b=M(p,w,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=w.getResponseHeader("Last-Modified"),T&&(st.lastModified[o]=T),T=w.getResponseHeader("etag"),T&&(st.etag[o]=T)),304===e?(l=!0,N="notmodified"):(l=q(p,b),N=l.state,f=l.data,v=l.error,l=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),w.status=e,w.statusText=(n||N)+"",l?g.resolveWith(d,[f,N,w]):g.rejectWith(d,[w,N,v]),w.statusCode(y),y=t,c&&h.trigger(l?"ajaxSuccess":"ajaxError",[w,p,l?f:v]),m.fireWith(d,[w,N]),c&&(h.trigger("ajaxComplete",[w,p]),--st.active||st.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=t),n=n||{};var i,o,a,s,u,l,c,f,p=st.ajaxSetup({},n),d=p.context||p,h=p.context&&(d.nodeType||d.jquery)?st(d):st.event,g=st.Deferred(),m=st.Callbacks("once memory"),y=p.statusCode||{},v={},b={},x=0,T="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!s)for(s={};t=_n.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=b[n]=b[n]||e,v[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)y[t]=[y[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,p.url=((e||p.url||Dn)+"").replace(Mn,"").replace(Bn,jn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=st.trim(p.dataType||"*").toLowerCase().match(lt)||[""],null==p.crossDomain&&(l=Pn.exec(p.url.toLowerCase()),p.crossDomain=!(!l||l[1]===jn[1]&&l[2]===jn[2]&&(l[3]||("http:"===l[1]?80:443))==(jn[3]||("http:"===jn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=st.param(p.data,p.traditional)),L(Wn,p,n,w),2===x)return w;c=p.global,c&&0===st.active++&&st.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!On.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(Hn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=qn.test(o)?o.replace(qn,"$1_="+Ln++):o+(Hn.test(o)?"&":"?")+"_="+Ln++)),p.ifModified&&(st.lastModified[o]&&w.setRequestHeader("If-Modified-Since",st.lastModified[o]),st.etag[o]&&w.setRequestHeader("If-None-Match",st.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",p.contentType),w.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+In+"; q=0.01":""):p.accepts["*"]);for(f in p.headers)w.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(p.beforeSend.call(d,w,p)===!1||2===x))return w.abort();T="abort";for(f in{success:1,error:1,complete:1})w[f](p[f]);if(i=L($n,p,n,w)){w.readyState=1,c&&h.trigger("ajaxSend",[w,p]),p.async&&p.timeout>0&&(u=setTimeout(function(){w.abort("timeout")},p.timeout));try{x=1,i.send(v,r)}catch(N){if(!(2>x))throw N;r(-1,N)}}else r(-1,"No Transport");return w},getScript:function(e,n){return st.get(e,t,n,"script")},getJSON:function(e,t,n){return st.get(e,t,n,"json")}}),st.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return st.globalEval(e),e}}}),st.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),st.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=V.head||st("head")[0]||V.documentElement;return{send:function(t,i){n=V.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Xn=[],Un=/(=)\?(?=&|$)|\?\?/;st.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xn.pop()||st.expando+"_"+Ln++;return this[e]=!0,e}}),st.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Un.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Un.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=st.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Un,"$1"+o):n.jsonp!==!1&&(n.url+=(Hn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||st.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Xn.push(o)),s&&st.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Vn,Yn,Jn=0,Gn=e.ActiveXObject&&function(){var e;for(e in Vn)Vn[e](t,!0)};st.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&_()||F()}:_,Yn=st.ajaxSettings.xhr(),st.support.cors=!!Yn&&"withCredentials"in Yn,Yn=st.support.ajax=!!Yn,Yn&&st.ajaxTransport(function(n){if(!n.crossDomain||st.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,f,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=st.noop,Gn&&delete Vn[a]),i)4!==u.readyState&&u.abort();else{f={},s=u.status,p=u.responseXML,c=u.getAllResponseHeaders(),p&&p.documentElement&&(f.xml=p),"string"==typeof u.responseText&&(f.text=u.responseText);try{l=u.statusText}catch(d){l=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=f.text?200:404}}catch(h){i||o(-1,h)}f&&o(s,l,f,c)},n.async?4===u.readyState?setTimeout(r):(a=++Jn,Gn&&(Vn||(Vn={},st(e).unload(Gn)),Vn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Qn,Kn,Zn=/^(?:toggle|show|hide)$/,er=RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),tr=/queueHooks$/,nr=[W],rr={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=er.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(st.cssNumber[e]?"":"px"),"px"!==r&&s){s=st.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,st.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};st.Animation=st.extend(P,{tweener:function(e,t){st.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,i=e.length;i>r;r++)n=e[r],rr[n]=rr[n]||[],rr[n].unshift(t)},prefilter:function(e,t){t?nr.unshift(e):nr.push(e)}}),st.Tween=$,$.prototype={constructor:$,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(st.cssNumber[n]?"":"px")},cur:function(){var e=$.propHooks[this.prop];return e&&e.get?e.get(this):$.propHooks._default.get(this)},run:function(e){var t,n=$.propHooks[this.prop];return this.pos=t=this.options.duration?st.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):$.propHooks._default.set(this),this}},$.prototype.init.prototype=$.prototype,$.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=st.css(e.elem,e.prop,"auto"),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){st.fx.step[e.prop]?st.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[st.cssProps[e.prop]]||st.cssHooks[e.prop])?st.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},$.propHooks.scrollTop=$.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},st.each(["toggle","show","hide"],function(e,t){var n=st.fn[t];st.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,r,i)}}),st.fn.extend({fadeTo:function(e,t,n,r){return this.filter(w).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=st.isEmptyObject(e),o=st.speed(t,n,r),a=function(){var t=P(this,st.extend({},e),o);a.finish=function(){t.stop(!0)},(i||st._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=st.timers,a=st._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&tr.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&st.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=st._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=st.timers,a=r?r.length:0;for(n.finish=!0,st.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),st.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){st.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),st.speed=function(e,t,n){var r=e&&"object"==typeof e?st.extend({},e):{complete:n||!n&&t||st.isFunction(e)&&e,duration:e,easing:n&&t||t&&!st.isFunction(t)&&t};return r.duration=st.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in st.fx.speeds?st.fx.speeds[r.duration]:st.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){st.isFunction(r.old)&&r.old.call(this),r.queue&&st.dequeue(this,r.queue)},r},st.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},st.timers=[],st.fx=$.prototype.init,st.fx.tick=function(){var e,n=st.timers,r=0;for(Qn=st.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||st.fx.stop(),Qn=t},st.fx.timer=function(e){e()&&st.timers.push(e)&&st.fx.start()},st.fx.interval=13,st.fx.start=function(){Kn||(Kn=setInterval(st.fx.tick,st.fx.interval))},st.fx.stop=function(){clearInterval(Kn),Kn=null},st.fx.speeds={slow:600,fast:200,_default:400},st.fx.step={},st.expr&&st.expr.filters&&(st.expr.filters.animated=function(e){return st.grep(st.timers,function(t){return e===t.elem}).length}),st.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){st.offset.setOffset(this,e,t)});var n,r,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return n=a.documentElement,st.contains(n,o)?(o.getBoundingClientRect!==t&&(i=o.getBoundingClientRect()),r=z(a),{top:i.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:i.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):i},st.offset={setOffset:function(e,t,n){var r=st.css(e,"position");"static"===r&&(e.style.position="relative");var i,o,a=st(e),s=a.offset(),u=st.css(e,"top"),l=st.css(e,"left"),c=("absolute"===r||"fixed"===r)&&st.inArray("auto",[u,l])>-1,f={},p={};c?(p=a.position(),i=p.top,o=p.left):(i=parseFloat(u)||0,o=parseFloat(l)||0),st.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+i),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):a.css(f)}},st.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===st.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),st.nodeName(e[0],"html")||(n=e.offset()),n.top+=st.css(e[0],"borderTopWidth",!0),n.left+=st.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-st.css(r,"marginTop",!0),left:t.left-n.left-st.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||V.documentElement;e&&!st.nodeName(e,"html")&&"static"===st.css(e,"position");)e=e.offsetParent;return e||V.documentElement})}}),st.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);st.fn[e]=function(i){return st.access(this,function(e,i,o){var a=z(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?st(a).scrollLeft():o,r?o:st(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}}),st.each({Height:"height",Width:"width"},function(e,n){st.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){st.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return st.access(this,function(n,r,i){var o;return st.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?st.css(n,r,s):st.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=st,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return st})})(window);
+-//@ sourceMappingURL=jquery.min.map
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/demo/style.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/demo/style.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/demo/style.css	(revision 15488)
+@@ -1,96 +0,0 @@
+-/*=================================*/
+-/* Nivo Slider Demo
+-/* November 2010
+-/* By: Gilbert Pellegrom
+-/* http://dev7studios.com
+-/*=================================*/
+-
+-/*====================*/
+-/*=== Reset Styles ===*/
+-/*====================*/
+-html, body, div, span, applet, object, iframe,
+-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+-a, abbr, acronym, address, big, cite, code,
+-del, dfn, em, font, img, ins, kbd, q, s, samp,
+-small, strike, strong, sub, sup, tt, var,
+-dl, dt, dd, ol, ul, li,
+-fieldset, form, label, legend,
+-table, caption, tbody, tfoot, thead, tr, th, td {
+-	margin:0;
+-	padding:0;
+-	border:0;
+-	outline:0;
+-	font-weight:inherit;
+-	font-style:inherit;
+-	font-size:100%;
+-	font-family:inherit;
+-	vertical-align:baseline;
+-}
+-body {
+-	line-height:1;
+-	color:black;
+-	background:white;
+-}
+-table {
+-	border-collapse:separate;
+-	border-spacing:0;
+-}
+-caption, th, td {
+-	text-align:left;
+-	font-weight:normal;
+-}
+-blockquote:before, blockquote:after,
+-q:before, q:after {
+-	content:"";
+-}
+-blockquote, q {
+-	quotes:"" "";
+-}
+-/* HTML5 tags */
+-header, section, footer,
+-aside, nav, article, figure {
+-	display: block;
+-}
+-
+-/*===================*/
+-/*=== Main Styles ===*/
+-/*===================*/
+-body {
+-	font:14px/1.6 Georgia, Palatino, Palatino Linotype, Times, Times New Roman, serif;
+-	color:#333;
+-	background:#eee;
+-}
+-
+-a, a:visited {
+-	color:blue;
+-	text-decoration:none;
+-}
+-a:hover, a:active {
+-	color:#000;
+-	text-decoration:none;
+-}
+-
+-#dev7link {
+-    position:absolute;
+-    top:0;
+-    left:50px;
+-    background:url(images/dev7logo.png) no-repeat;
+-    width:60px;
+-    height:67px;
+-    border:0;
+-    display:block;
+-    text-indent:-9999px;
+-}
+-
+-.slider-wrapper { 
+-	width: 1000px;
+-	height: 1000px;
+-	margin: 100px auto;
+-}
+-
+-/*====================*/
+-/*=== Other Styles ===*/
+-/*====================*/
+-.clear {
+-	clear:both;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.js	(revision 15488)
+@@ -1,662 +0,0 @@
+-/*
+- * jQuery Nivo Slider v3.2
+- * http://nivo.dev7studios.com
+- *
+- * Copyright 2012, Dev7studios
+- * Free to use and abuse under the MIT license.
+- * http://www.opensource.org/licenses/mit-license.php
+- */
+-
+-(function($) {
+-    var NivoSlider = function(element, options){
+-        // Defaults are below
+-        var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
+-
+-        // Useful variables. Play carefully.
+-        var vars = {
+-            currentSlide: 0,
+-            currentImage: '',
+-            totalSlides: 0,
+-            running: false,
+-            paused: false,
+-            stop: false,
+-            controlNavEl: false
+-        };
+-
+-        // Get this slider
+-        var slider = $(element);
+-        slider.data('nivo:vars', vars).addClass('nivoSlider');
+-
+-        // Find our slider children
+-        var kids = slider.children();
+-        kids.each(function() {
+-            var child = $(this);
+-            var link = '';
+-            if(!child.is('img')){
+-                if(child.is('a')){
+-                    child.addClass('nivo-imageLink');
+-                    link = child;
+-                }
+-                child = child.find('img:first');
+-            }
+-            // Get img width & height
+-            var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
+-                childHeight = (childHeight === 0) ? child.attr('height') : child.height();
+-
+-            if(link !== ''){
+-                link.css('display','none');
+-            }
+-            child.css('display','none');
+-            vars.totalSlides++;
+-        });
+-         
+-        // If randomStart
+-        if(settings.randomStart){
+-            settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
+-        }
+-        
+-        // Set startSlide
+-        if(settings.startSlide > 0){
+-            if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
+-            vars.currentSlide = settings.startSlide;
+-        }
+-        
+-        // Get initial image
+-        if($(kids[vars.currentSlide]).is('img')){
+-            vars.currentImage = $(kids[vars.currentSlide]);
+-        } else {
+-            vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
+-        }
+-        
+-        // Show initial link
+-        if($(kids[vars.currentSlide]).is('a')){
+-            $(kids[vars.currentSlide]).css('display','block');
+-        }
+-        
+-        // Set first background
+-        var sliderImg = $('<img/>').addClass('nivo-main-image');
+-        sliderImg.attr('src', vars.currentImage.attr('src')).show();
+-        slider.append(sliderImg);
+-
+-        // Detect Window Resize
+-        $(window).resize(function() {
+-            slider.children('img').width(slider.width());
+-            sliderImg.attr('src', vars.currentImage.attr('src'));
+-            sliderImg.stop().height('auto');
+-            $('.nivo-slice').remove();
+-            $('.nivo-box').remove();
+-        });
+-
+-        //Create caption
+-        slider.append($('<div class="nivo-caption"></div>'));
+-        
+-        // Process caption function
+-        var processCaption = function(settings){
+-            var nivoCaption = $('.nivo-caption', slider);
+-            if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
+-                var title = vars.currentImage.attr('title');
+-                if(title.substr(0,1) == '#') title = $(title).html();   
+-
+-                if(nivoCaption.css('display') == 'block'){
+-                    setTimeout(function(){
+-                        nivoCaption.html(title);
+-                    }, settings.animSpeed);
+-                } else {
+-                    nivoCaption.html(title);
+-                    nivoCaption.stop().fadeIn(settings.animSpeed);
+-                }
+-            } else {
+-                nivoCaption.stop().fadeOut(settings.animSpeed);
+-            }
+-        }
+-        
+-        //Process initial  caption
+-        processCaption(settings);
+-        
+-        // In the words of Super Mario "let's a go!"
+-        var timer = 0;
+-        if(!settings.manualAdvance && kids.length > 1){
+-            timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
+-        }
+-        
+-        // Add Direction nav
+-        if(settings.directionNav){
+-            slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
+-            
+-            $(slider).on('click', 'a.nivo-prevNav', function(){
+-                if(vars.running) { return false; }
+-                clearInterval(timer);
+-                timer = '';
+-                vars.currentSlide -= 2;
+-                nivoRun(slider, kids, settings, 'prev');
+-            });
+-            
+-            $(slider).on('click', 'a.nivo-nextNav', function(){
+-                if(vars.running) { return false; }
+-                clearInterval(timer);
+-                timer = '';
+-                nivoRun(slider, kids, settings, 'next');
+-            });
+-        }
+-        
+-        // Add Control nav
+-        if(settings.controlNav){
+-            vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
+-            slider.after(vars.controlNavEl);
+-            for(var i = 0; i < kids.length; i++){
+-                if(settings.controlNavThumbs){
+-                    vars.controlNavEl.addClass('nivo-thumbs-enabled');
+-                    var child = kids.eq(i);
+-                    if(!child.is('img')){
+-                        child = child.find('img:first');
+-                    }
+-                    if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
+-                } else {
+-                    vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
+-                }
+-            }
+-
+-            //Set initial active link
+-            $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
+-            
+-            $('a', vars.controlNavEl).bind('click', function(){
+-                if(vars.running) return false;
+-                if($(this).hasClass('active')) return false;
+-                clearInterval(timer);
+-                timer = '';
+-                sliderImg.attr('src', vars.currentImage.attr('src'));
+-                vars.currentSlide = $(this).attr('rel') - 1;
+-                nivoRun(slider, kids, settings, 'control');
+-            });
+-        }
+-        
+-        //For pauseOnHover setting
+-        if(settings.pauseOnHover){
+-            slider.hover(function(){
+-                vars.paused = true;
+-                clearInterval(timer);
+-                timer = '';
+-            }, function(){
+-                vars.paused = false;
+-                // Restart the timer
+-                if(timer === '' && !settings.manualAdvance){
+-                    timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
+-                }
+-            });
+-        }
+-        
+-        // Event when Animation finishes
+-        slider.bind('nivo:animFinished', function(){
+-            sliderImg.attr('src', vars.currentImage.attr('src'));
+-            vars.running = false; 
+-            // Hide child links
+-            $(kids).each(function(){
+-                if($(this).is('a')){
+-                   $(this).css('display','none');
+-                }
+-            });
+-            // Show current link
+-            if($(kids[vars.currentSlide]).is('a')){
+-                $(kids[vars.currentSlide]).css('display','block');
+-            }
+-            // Restart the timer
+-            if(timer === '' && !vars.paused && !settings.manualAdvance){
+-                timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
+-            }
+-            // Trigger the afterChange callback
+-            settings.afterChange.call(this);
+-        }); 
+-        
+-        // Add slices for slice animations
+-        var createSlices = function(slider, settings, vars) {
+-        	if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
+-            $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
+-            var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();
+-
+-            for(var i = 0; i < settings.slices; i++){
+-                var sliceWidth = Math.round(slider.width()/settings.slices);
+-                
+-                if(i === settings.slices-1){
+-                    slider.append(
+-                        $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({ 
+-                            left:(sliceWidth*i)+'px', 
+-                            width:(slider.width()-(sliceWidth*i))+'px',
+-                            height:sliceHeight+'px', 
+-                            opacity:'0',
+-                            overflow:'hidden'
+-                        })
+-                    );
+-                } else {
+-                    slider.append(
+-                        $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({ 
+-                            left:(sliceWidth*i)+'px', 
+-                            width:sliceWidth+'px',
+-                            height:sliceHeight+'px',
+-                            opacity:'0',
+-                            overflow:'hidden'
+-                        })
+-                    );
+-                }
+-            }
+-            
+-            $('.nivo-slice', slider).height(sliceHeight);
+-            sliderImg.stop().animate({
+-                height: $(vars.currentImage).height()
+-            }, settings.animSpeed);
+-        };
+-        
+-        // Add boxes for box animations
+-        var createBoxes = function(slider, settings, vars){
+-        	if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
+-            $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
+-            var boxWidth = Math.round(slider.width()/settings.boxCols),
+-                boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);
+-            
+-                        
+-            for(var rows = 0; rows < settings.boxRows; rows++){
+-                for(var cols = 0; cols < settings.boxCols; cols++){
+-                    if(cols === settings.boxCols-1){
+-                        slider.append(
+-                            $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({ 
+-                                opacity:0,
+-                                left:(boxWidth*cols)+'px', 
+-                                top:(boxHeight*rows)+'px',
+-                                width:(slider.width()-(boxWidth*cols))+'px'
+-                                
+-                            })
+-                        );
+-                        $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
+-                    } else {
+-                        slider.append(
+-                            $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({ 
+-                                opacity:0,
+-                                left:(boxWidth*cols)+'px', 
+-                                top:(boxHeight*rows)+'px',
+-                                width:boxWidth+'px'
+-                            })
+-                        );
+-                        $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
+-                    }
+-                }
+-            }
+-            
+-            sliderImg.stop().animate({
+-                height: $(vars.currentImage).height()
+-            }, settings.animSpeed);
+-        };
+-
+-        // Private run method
+-        var nivoRun = function(slider, kids, settings, nudge){          
+-            // Get our vars
+-            var vars = slider.data('nivo:vars');
+-            
+-            // Trigger the lastSlide callback
+-            if(vars && (vars.currentSlide === vars.totalSlides - 1)){ 
+-                settings.lastSlide.call(this);
+-            }
+-            
+-            // Stop
+-            if((!vars || vars.stop) && !nudge) { return false; }
+-            
+-            // Trigger the beforeChange callback
+-            settings.beforeChange.call(this);
+-
+-            // Set current background before change
+-            if(!nudge){
+-                sliderImg.attr('src', vars.currentImage.attr('src'));
+-            } else {
+-                if(nudge === 'prev'){
+-                    sliderImg.attr('src', vars.currentImage.attr('src'));
+-                }
+-                if(nudge === 'next'){
+-                    sliderImg.attr('src', vars.currentImage.attr('src'));
+-                }
+-            }
+-            
+-            vars.currentSlide++;
+-            // Trigger the slideshowEnd callback
+-            if(vars.currentSlide === vars.totalSlides){ 
+-                vars.currentSlide = 0;
+-                settings.slideshowEnd.call(this);
+-            }
+-            if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
+-            // Set vars.currentImage
+-            if($(kids[vars.currentSlide]).is('img')){
+-                vars.currentImage = $(kids[vars.currentSlide]);
+-            } else {
+-                vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
+-            }
+-            
+-            // Set active links
+-            if(settings.controlNav){
+-                $('a', vars.controlNavEl).removeClass('active');
+-                $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
+-            }
+-            
+-            // Process caption
+-            processCaption(settings);            
+-            
+-            // Remove any slices from last transition
+-            $('.nivo-slice', slider).remove();
+-            
+-            // Remove any boxes from last transition
+-            $('.nivo-box', slider).remove();
+-            
+-            var currentEffect = settings.effect,
+-                anims = '';
+-                
+-            // Generate random effect
+-            if(settings.effect === 'random'){
+-                anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
+-                'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
+-                currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
+-                if(currentEffect === undefined) { currentEffect = 'fade'; }
+-            }
+-            
+-            // Run random effect from specified set (eg: effect:'fold,fade')
+-            if(settings.effect.indexOf(',') !== -1){
+-                anims = settings.effect.split(',');
+-                currentEffect = anims[Math.floor(Math.random()*(anims.length))];
+-                if(currentEffect === undefined) { currentEffect = 'fade'; }
+-            }
+-            
+-            // Custom transition as defined by "data-transition" attribute
+-            if(vars.currentImage.attr('data-transition')){
+-                currentEffect = vars.currentImage.attr('data-transition');
+-            }
+-        
+-            // Run effects
+-            vars.running = true;
+-            var timeBuff = 0,
+-                i = 0,
+-                slices = '',
+-                firstSlice = '',
+-                totalBoxes = '',
+-                boxes = '';
+-            
+-            if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
+-                createSlices(slider, settings, vars);
+-                timeBuff = 0;
+-                i = 0;
+-                slices = $('.nivo-slice', slider);
+-                if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
+-                
+-                slices.each(function(){
+-                    var slice = $(this);
+-                    slice.css({ 'top': '0px' });
+-                    if(i === settings.slices-1){
+-                        setTimeout(function(){
+-                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
+-                        }, (100 + timeBuff));
+-                    } else {
+-                        setTimeout(function(){
+-                            slice.animate({opacity:'1.0' }, settings.animSpeed);
+-                        }, (100 + timeBuff));
+-                    }
+-                    timeBuff += 50;
+-                    i++;
+-                });
+-            } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
+-                createSlices(slider, settings, vars);
+-                timeBuff = 0;
+-                i = 0;
+-                slices = $('.nivo-slice', slider);
+-                if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); }
+-                
+-                slices.each(function(){
+-                    var slice = $(this);
+-                    slice.css({ 'bottom': '0px' });
+-                    if(i === settings.slices-1){
+-                        setTimeout(function(){
+-                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
+-                        }, (100 + timeBuff));
+-                    } else {
+-                        setTimeout(function(){
+-                            slice.animate({opacity:'1.0' }, settings.animSpeed);
+-                        }, (100 + timeBuff));
+-                    }
+-                    timeBuff += 50;
+-                    i++;
+-                });
+-            } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
+-                createSlices(slider, settings, vars);
+-                timeBuff = 0;
+-                i = 0;
+-                var v = 0;
+-                slices = $('.nivo-slice', slider);
+-                if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
+-                
+-                slices.each(function(){
+-                    var slice = $(this);
+-                    if(i === 0){
+-                        slice.css('top','0px');
+-                        i++;
+-                    } else {
+-                        slice.css('bottom','0px');
+-                        i = 0;
+-                    }
+-                    
+-                    if(v === settings.slices-1){
+-                        setTimeout(function(){
+-                            slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
+-                        }, (100 + timeBuff));
+-                    } else {
+-                        setTimeout(function(){
+-                            slice.animate({opacity:'1.0' }, settings.animSpeed);
+-                        }, (100 + timeBuff));
+-                    }
+-                    timeBuff += 50;
+-                    v++;
+-                });
+-            } else if(currentEffect === 'fold'){
+-                createSlices(slider, settings, vars);
+-                timeBuff = 0;
+-                i = 0;
+-                
+-                $('.nivo-slice', slider).each(function(){
+-                    var slice = $(this);
+-                    var origWidth = slice.width();
+-                    slice.css({ top:'0px', width:'0px' });
+-                    if(i === settings.slices-1){
+-                        setTimeout(function(){
+-                            slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
+-                        }, (100 + timeBuff));
+-                    } else {
+-                        setTimeout(function(){
+-                            slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
+-                        }, (100 + timeBuff));
+-                    }
+-                    timeBuff += 50;
+-                    i++;
+-                });
+-            } else if(currentEffect === 'fade'){
+-                createSlices(slider, settings, vars);
+-                
+-                firstSlice = $('.nivo-slice:first', slider);
+-                firstSlice.css({
+-                    'width': slider.width() + 'px'
+-                });
+-    
+-                firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
+-            } else if(currentEffect === 'slideInRight'){
+-                createSlices(slider, settings, vars);
+-                
+-                firstSlice = $('.nivo-slice:first', slider);
+-                firstSlice.css({
+-                    'width': '0px',
+-                    'opacity': '1'
+-                });
+-
+-                firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
+-            } else if(currentEffect === 'slideInLeft'){
+-                createSlices(slider, settings, vars);
+-                
+-                firstSlice = $('.nivo-slice:first', slider);
+-                firstSlice.css({
+-                    'width': '0px',
+-                    'opacity': '1',
+-                    'left': '',
+-                    'right': '0px'
+-                });
+-
+-                firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ 
+-                    // Reset positioning
+-                    firstSlice.css({
+-                        'left': '0px',
+-                        'right': ''
+-                    });
+-                    slider.trigger('nivo:animFinished'); 
+-                });
+-            } else if(currentEffect === 'boxRandom'){
+-                createBoxes(slider, settings, vars);
+-                
+-                totalBoxes = settings.boxCols * settings.boxRows;
+-                i = 0;
+-                timeBuff = 0;
+-
+-                boxes = shuffle($('.nivo-box', slider));
+-                boxes.each(function(){
+-                    var box = $(this);
+-                    if(i === totalBoxes-1){
+-                        setTimeout(function(){
+-                            box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
+-                        }, (100 + timeBuff));
+-                    } else {
+-                        setTimeout(function(){
+-                            box.animate({ opacity:'1' }, settings.animSpeed);
+-                        }, (100 + timeBuff));
+-                    }
+-                    timeBuff += 20;
+-                    i++;
+-                });
+-            } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
+-                createBoxes(slider, settings, vars);
+-                
+-                totalBoxes = settings.boxCols * settings.boxRows;
+-                i = 0;
+-                timeBuff = 0;
+-                
+-                // Split boxes into 2D array
+-                var rowIndex = 0;
+-                var colIndex = 0;
+-                var box2Darr = [];
+-                box2Darr[rowIndex] = [];
+-                boxes = $('.nivo-box', slider);
+-                if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
+-                    boxes = $('.nivo-box', slider)._reverse();
+-                }
+-                boxes.each(function(){
+-                    box2Darr[rowIndex][colIndex] = $(this);
+-                    colIndex++;
+-                    if(colIndex === settings.boxCols){
+-                        rowIndex++;
+-                        colIndex = 0;
+-                        box2Darr[rowIndex] = [];
+-                    }
+-                });
+-                
+-                // Run animation
+-                for(var cols = 0; cols < (settings.boxCols * 2); cols++){
+-                    var prevCol = cols;
+-                    for(var rows = 0; rows < settings.boxRows; rows++){
+-                        if(prevCol >= 0 && prevCol < settings.boxCols){
+-                            /* Due to some weird JS bug with loop vars 
+-                            being used in setTimeout, this is wrapped
+-                            with an anonymous function call */
+-                            (function(row, col, time, i, totalBoxes) {
+-                                var box = $(box2Darr[row][col]);
+-                                var w = box.width();
+-                                var h = box.height();
+-                                if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
+-                                    box.width(0).height(0);
+-                                }
+-                                if(i === totalBoxes-1){
+-                                    setTimeout(function(){
+-                                        box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
+-                                    }, (100 + time));
+-                                } else {
+-                                    setTimeout(function(){
+-                                        box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
+-                                    }, (100 + time));
+-                                }
+-                            })(rows, prevCol, timeBuff, i, totalBoxes);
+-                            i++;
+-                        }
+-                        prevCol--;
+-                    }
+-                    timeBuff += 100;
+-                }
+-            }           
+-        };
+-        
+-        // Shuffle an array
+-        var shuffle = function(arr){
+-            for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
+-            return arr;
+-        };
+-        
+-        // For debugging
+-        var trace = function(msg){
+-            if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
+-        };
+-        
+-        // Start / Stop
+-        this.stop = function(){
+-            if(!$(element).data('nivo:vars').stop){
+-                $(element).data('nivo:vars').stop = true;
+-                trace('Stop Slider');
+-            }
+-        };
+-        
+-        this.start = function(){
+-            if($(element).data('nivo:vars').stop){
+-                $(element).data('nivo:vars').stop = false;
+-                trace('Start Slider');
+-            }
+-        };
+-        
+-        // Trigger the afterLoad callback
+-        settings.afterLoad.call(this);
+-        
+-        return this;
+-    };
+-        
+-    $.fn.nivoSlider = function(options) {
+-        return this.each(function(key, value){
+-            var element = $(this);
+-            // Return early if this element already has a plugin instance
+-            if (element.data('nivoslider')) { return element.data('nivoslider'); }
+-            // Pass options to plugin constructor
+-            var nivoslider = new NivoSlider(this, options);
+-            // Store plugin object in this element's data
+-            element.data('nivoslider', nivoslider);
+-        });
+-    };
+-    
+-    //Default settings
+-    $.fn.nivoSlider.defaults = {
+-        effect: 'random',
+-        slices: 15,
+-        boxCols: 8,
+-        boxRows: 4,
+-        animSpeed: 500,
+-        pauseTime: 3000,
+-        startSlide: 0,
+-        directionNav: true,
+-        controlNav: true,
+-        controlNavThumbs: false,
+-        pauseOnHover: true,
+-        manualAdvance: false,
+-        prevText: 'Prev',
+-        nextText: 'Next',
+-        randomStart: false,
+-        beforeChange: function(){},
+-        afterChange: function(){},
+-        slideshowEnd: function(){},
+-        lastSlide: function(){},
+-        afterLoad: function(){}
+-    };
+-
+-    $.fn._reverse = [].reverse;
+-    
+-})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/arrows.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/loading.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bar.css	(revision 15488)
+@@ -1,132 +0,0 @@
+-/*
+-Skin Name: Nivo Slider Bar Theme
+-Skin URI: http://nivo.dev7studios.com
+-Description: The bottom bar skin for the Nivo Slider.
+-Version: 1.0
+-Author: Gilbert Pellegrom
+-Author URI: http://dev7studios.com
+-Supports Thumbs: false
+-*/
+-
+-.theme-bar.slider-wrapper {
+-    position: relative;
+-    border: 1px solid #333;
+-    overflow: hidden;
+-}
+-.theme-bar .nivoSlider {
+-	position:relative;
+-	background:#fff url(loading.gif) no-repeat 50% 50%;
+-}
+-.theme-bar .nivoSlider img {
+-	position:absolute;
+-	top:0px;
+-	left:0px;
+-	display:none;
+-}
+-.theme-bar .nivoSlider a {
+-	border:0;
+-	display:block;
+-}
+-
+-.theme-bar .nivo-controlNav {
+-    position: absolute;
+-    left: 0;
+-    bottom: -41px;
+-    z-index: 10;
+-    width: 100%;
+-    height: 30px;
+-	text-align: center;
+-	padding: 5px 0;
+-	border-top: 1px solid #333;
+-	background: #333;
+-    background: -moz-linear-gradient(top,  #565656 0%, #333333 100%); /* FF3.6+ */
+-    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#565656), color-stop(100%,#333333)); /* Chrome,Safari4+ */
+-    background: -webkit-linear-gradient(top,  #565656 0%,#333333 100%); /* Chrome10+,Safari5.1+ */
+-    background: -o-linear-gradient(top,  #565656 0%,#333333 100%); /* Opera 11.10+ */
+-    background: -ms-linear-gradient(top,  #565656 0%,#333333 100%); /* IE10+ */
+-    background: linear-gradient(to bottom,  #565656 0%,#333333 100%); /* W3C */
+-    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#565656', endColorstr='#333333',GradientType=0 ); /* IE6-9 */
+-    opacity: 0.5;
+-    -webkit-transition: all 200ms ease-in-out;
+-    -moz-transition: all 200ms ease-in-out;
+-    -o-transition: all 200ms ease-in-out;
+-    transition: all 200ms ease-in-out;
+-}
+-.theme-bar:hover .nivo-controlNav {
+-    bottom: 0;
+-    opacity: 1;
+-}
+-.theme-bar .nivo-controlNav a {
+-	display:inline-block;
+-	width:22px;
+-	height:22px;
+-	background:url(bullets.png) no-repeat;
+-	text-indent:-9999px;
+-	border:0;
+-	margin: 5px 2px 0 2px;
+-}
+-.theme-bar .nivo-controlNav a.active {
+-	background-position:0 -22px;
+-}
+-
+-.theme-bar .nivo-directionNav a {
+-	display:block;
+-	border:0;
+-	color: #fff;
+-	text-transform: uppercase;
+-	top: auto;
+-	bottom: 10px;
+-	z-index: 11;
+-	font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+-	font-size: 13px;
+-	line-height: 20px;
+-	opacity: 0.5;
+-    -webkit-transition: all 200ms ease-in-out;
+-    -moz-transition: all 200ms ease-in-out;
+-    -o-transition: all 200ms ease-in-out;
+-    transition: all 200ms ease-in-out;
+-}
+-.theme-bar a.nivo-nextNav { right: -50px; }
+-.theme-bar a.nivo-prevNav { left: -50px; }
+-.theme-bar:hover a.nivo-nextNav { 
+-    right: 15px; 
+-    opacity: 1;
+-}
+-.theme-bar:hover a.nivo-prevNav { 
+-    left: 15px; 
+-    opacity: 1;
+-}
+-.theme-bar .nivo-directionNav a:hover { color: #ddd; }
+-
+-.theme-bar .nivo-caption {
+-    font-family: Helvetica, Arial, sans-serif;
+-    -webkit-transition: all 200ms ease-in-out;
+-    -moz-transition: all 200ms ease-in-out;
+-    -o-transition: all 200ms ease-in-out;
+-    transition: all 200ms ease-in-out;
+-}
+-.theme-bar:hover .nivo-caption {
+-    bottom: 41px;
+-}
+-.theme-bar .nivo-caption a {
+-    color:#fff;
+-    border-bottom:1px dotted #fff;
+-}
+-.theme-bar .nivo-caption a:hover {
+-    color:#fff;
+-}
+-
+-.theme-bar .nivo-controlNav.nivo-thumbs-enabled {
+-	width: 100%;
+-}
+-.theme-bar .nivo-controlNav.nivo-thumbs-enabled a {
+-	width: auto;
+-	height: auto;
+-	background: none;
+-	margin-bottom: 5px;
+-}
+-.theme-bar .nivo-controlNav.nivo-thumbs-enabled img {
+-	display: block;
+-	width: 120px;
+-	height: auto;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bullets.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/default.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/default.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/default.css	(revision 15488)
+@@ -1,93 +0,0 @@
+-/*
+-Skin Name: Nivo Slider Default Theme
+-Skin URI: http://nivo.dev7studios.com
+-Description: The default skin for the Nivo Slider.
+-Version: 1.3
+-Author: Gilbert Pellegrom
+-Author URI: http://dev7studios.com
+-Supports Thumbs: true
+-*/
+-
+-.theme-default .nivoSlider {
+-	position:relative;
+-	background:#fff url(loading.gif) no-repeat 50% 50%;
+-    margin-bottom:10px;
+-    -webkit-box-shadow: 0px 1px 5px 0px #4a4a4a;
+-    -moz-box-shadow: 0px 1px 5px 0px #4a4a4a;
+-    box-shadow: 0px 1px 5px 0px #4a4a4a;
+-}
+-.theme-default .nivoSlider img {
+-	position:absolute;
+-	top:0px;
+-	left:0px;
+-	display:none;
+-}
+-.theme-default .nivoSlider a {
+-	border:0;
+-	display:block;
+-}
+-
+-.theme-default .nivo-controlNav {
+-	text-align: center;
+-	padding: 20px 0;
+-}
+-.theme-default .nivo-controlNav a {
+-	display:inline-block;
+-	width:22px;
+-	height:22px;
+-	background:url(bullets.png) no-repeat;
+-	text-indent:-9999px;
+-	border:0;
+-	margin: 0 2px;
+-}
+-.theme-default .nivo-controlNav a.active {
+-	background-position:0 -22px;
+-}
+-
+-.theme-default .nivo-directionNav a {
+-	display:block;
+-	width:30px;
+-	height:30px;
+-	background:url(arrows.png) no-repeat;
+-	text-indent:-9999px;
+-	border:0;
+-	opacity: 0;
+-	-webkit-transition: all 200ms ease-in-out;
+-    -moz-transition: all 200ms ease-in-out;
+-    -o-transition: all 200ms ease-in-out;
+-    transition: all 200ms ease-in-out;
+-}
+-.theme-default:hover .nivo-directionNav a { opacity: 1; }
+-.theme-default a.nivo-nextNav {
+-	background-position:-30px 0;
+-	right:15px;
+-}
+-.theme-default a.nivo-prevNav {
+-	left:15px;
+-}
+-
+-.theme-default .nivo-caption {
+-    font-family: Helvetica, Arial, sans-serif;
+-}
+-.theme-default .nivo-caption a {
+-    color:#fff;
+-    border-bottom:1px dotted #fff;
+-}
+-.theme-default .nivo-caption a:hover {
+-    color:#fff;
+-}
+-
+-.theme-default .nivo-controlNav.nivo-thumbs-enabled {
+-	width: 100%;
+-}
+-.theme-default .nivo-controlNav.nivo-thumbs-enabled a {
+-	width: auto;
+-	height: auto;
+-	background: none;
+-	margin-bottom: 5px;
+-}
+-.theme-default .nivo-controlNav.nivo-thumbs-enabled img {
+-	display: block;
+-	width: 120px;
+-	height: auto;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/bullets.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/arrows.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/default/loading.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/bullets.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/light.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/light.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/light.css	(revision 15488)
+@@ -1,102 +0,0 @@
+-/*
+-Skin Name: Nivo Slider Light Theme
+-Skin URI: http://nivo.dev7studios.com
+-Description: A light skin for the Nivo Slider.
+-Version: 1.0
+-Author: Gilbert Pellegrom
+-Author URI: http://dev7studios.com
+-Supports Thumbs: true
+-*/
+-
+-.theme-light.slider-wrapper {
+-    background: #fff;
+-    padding: 10px;
+-}
+-.theme-light .nivoSlider {
+-	position:relative;
+-	background:#fff url(loading.gif) no-repeat 50% 50%;
+-    margin-bottom:10px;
+-    overflow: visible;
+-}
+-.theme-light .nivoSlider img {
+-	position:absolute;
+-	top:0px;
+-	left:0px;
+-	display:none;
+-}
+-.theme-light .nivoSlider a {
+-	border:0;
+-	display:block;
+-}
+-
+-.theme-light .nivo-controlNav {
+-	text-align: left;
+-	padding: 0;
+-	position: relative;
+-	z-index: 10;
+-}
+-.theme-light .nivo-controlNav a {
+-	display:inline-block;
+-	width:10px;
+-	height:10px;
+-	background:url(bullets.png) no-repeat;
+-	text-indent:-9999px;
+-	border:0;
+-	margin: 0 2px;
+-}
+-.theme-light .nivo-controlNav a.active {
+-	background-position:0 100%;
+-}
+-
+-.theme-light .nivo-directionNav a {
+-	display:block;
+-	width:30px;
+-	height:30px;
+-	background: url(arrows.png) no-repeat;
+-	text-indent:-9999px;
+-	border:0;
+-	top: auto;
+-	bottom: -36px;
+-	z-index: 11;
+-}
+-.theme-light .nivo-directionNav a:hover {
+-    background-color: #eee;
+-    -webkit-border-radius: 2px;
+-    -moz-border-radius: 2px;
+-    border-radius: 2px;
+-}
+-.theme-light a.nivo-nextNav {
+-	background-position:160% 50%;
+-	right:0px;
+-}
+-.theme-light a.nivo-prevNav {
+-    background-position:-60% 50%;
+-    left: auto;
+-	right: 35px;
+-}
+-
+-.theme-light .nivo-caption {
+-    font-family: Helvetica, Arial, sans-serif;
+-}
+-.theme-light .nivo-caption a {
+-    color:#fff;
+-    border-bottom:1px dotted #fff;
+-}
+-.theme-light .nivo-caption a:hover {
+-    color:#fff;
+-}
+-
+-.theme-light .nivo-controlNav.nivo-thumbs-enabled {
+-	width: 80%;
+-}
+-.theme-light .nivo-controlNav.nivo-thumbs-enabled a {
+-	width: auto;
+-	height: auto;
+-	background: none;
+-	margin-bottom: 5px;
+-}
+-.theme-light .nivo-controlNav.nivo-thumbs-enabled img {
+-	display: block;
+-	width: 120px;
+-	height: auto;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/arrows.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/light/loading.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/dark.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/dark.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/dark.css	(revision 15488)
+@@ -1,102 +0,0 @@
+-/*
+-Skin Name: Nivo Slider Dark Theme
+-Skin URI: http://nivo.dev7studios.com
+-Description: A dark skin for the Nivo Slider.
+-Version: 1.0
+-Author: Gilbert Pellegrom
+-Author URI: http://dev7studios.com
+-Supports Thumbs: true
+-*/
+-
+-.theme-dark.slider-wrapper {
+-    background: #222;
+-    padding: 10px;
+-}
+-.theme-dark .nivoSlider {
+-	position:relative;
+-	background:#fff url(loading.gif) no-repeat 50% 50%;
+-    margin-bottom:10px;
+-    overflow: visible;
+-}
+-.theme-dark .nivoSlider img {
+-	position:absolute;
+-	top:0px;
+-	left:0px;
+-	display:none;
+-}
+-.theme-dark .nivoSlider a {
+-	border:0;
+-	display:block;
+-}
+-
+-.theme-dark .nivo-controlNav {
+-	text-align: left;
+-	padding: 0;
+-	position: relative;
+-	z-index: 10;
+-}
+-.theme-dark .nivo-controlNav a {
+-	display:inline-block;
+-	width:10px;
+-	height:10px;
+-	background:url(bullets.png) no-repeat 0 2px;
+-	text-indent:-9999px;
+-	border:0;
+-	margin: 0 2px;
+-}
+-.theme-dark .nivo-controlNav a.active {
+-	background-position:0 100%;
+-}
+-
+-.theme-dark .nivo-directionNav a {
+-	display:block;
+-	width:30px;
+-	height:30px;
+-	background: url(arrows.png) no-repeat;
+-	text-indent:-9999px;
+-	border:0;
+-	top: auto;
+-	bottom: -36px;
+-	z-index: 11;
+-}
+-.theme-dark .nivo-directionNav a:hover {
+-    background-color: #333;
+-    -webkit-border-radius: 2px;
+-    -moz-border-radius: 2px;
+-    border-radius: 2px;
+-}
+-.theme-dark a.nivo-nextNav {
+-	background-position:-16px 50%;
+-	right:0px;
+-}
+-.theme-dark a.nivo-prevNav {
+-    background-position:11px 50%;
+-    left: auto;
+-	right: 35px;
+-}
+-
+-.theme-dark .nivo-caption {
+-    font-family: Helvetica, Arial, sans-serif;
+-}
+-.theme-dark .nivo-caption a {
+-    color:#fff;
+-    border-bottom:1px dotted #fff;
+-}
+-.theme-dark .nivo-caption a:hover {
+-    color:#fff;
+-}
+-
+-.theme-dark .nivo-controlNav.nivo-thumbs-enabled {
+-	width: 80%;
+-}
+-.theme-dark .nivo-controlNav.nivo-thumbs-enabled a {
+-	width: auto;
+-	height: auto;
+-	background: none;
+-	margin-bottom: 5px;
+-}
+-.theme-dark .nivo-controlNav.nivo-thumbs-enabled img {
+-	display: block;
+-	width: 120px;
+-	height: auto;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/bullets.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/arrows.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/themes/dark/loading.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/imageslider/style.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/imageslider/style.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/imageslider/style.css	(revision 15488)
+@@ -1,90 +0,0 @@
+-/*=================================*/
+-/* Nivo Slider Demo
+-/* November 2010
+-/* By: Gilbert Pellegrom
+-/* http://dev7studios.com
+-/*=================================*/
+-
+-/*====================*/
+-/*=== Reset Styles ===*/
+-/*====================*/
+-html, body, div, span, applet, object, iframe,
+-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+-a, abbr, acronym, address, big, cite, code,
+-del, dfn, em, font, img, ins, kbd, q, s, samp,
+-small, strike, strong, sub, sup, tt, var,
+-dl, dt, dd, ol, ul, li,
+-fieldset, form, label, legend,
+-table, caption, tbody, tfoot, thead, tr, th, td {
+-	margin:0;
+-	padding:0;
+-	border:0;
+-	outline:0;
+-	font-weight:inherit;
+-	font-style:inherit;
+-	font-size:100%;
+-	font-family:inherit;
+-	vertical-align:baseline;
+-}
+-body {
+-	line-height:1;
+-	color:black;
+-	background:white;
+-}
+-table {
+-	border-collapse:separate;
+-	border-spacing:0;
+-}
+-caption, th, td {
+-	text-align:left;
+-	font-weight:normal;
+-}
+-blockquote:before, blockquote:after,
+-q:before, q:after {
+-	content:"";
+-}
+-blockquote, q {
+-	quotes:"" "";
+-}
+-/* HTML5 tags */
+-header, section, footer,
+-aside, nav, article, figure {
+-	display: block;
+-}
+-
+-/*===================*/
+-/*=== Main Styles ===*/
+-/*===================*/
+-body {
+-	background-image: -webkit-gradient(radial, right bottom, 0, right bottom, 1012, color-stop(0, #FFFFFF), color-stop(1, #658fd5));
+-	background-image: -moz-linear-gradient(bottom right, #FFFFFF 0%, #658fd5 100%);
+-}
+-
+-a:hover, a:active {
+-	color:#000;
+-	text-decoration:none;
+-}
+-
+-#dev7link {
+-    position:absolute;
+-    top:0;
+-    left:50px;
+-    background:url(images/dev7logo.png) no-repeat;
+-    width:60px;
+-    height:67px;
+-    border:0;
+-    display:block;
+-    text-indent:-9999px;
+-}
+-
+-.slider-wrapper { 
+-	width: 700px;
+-	margin: 30px auto;
+-}
+-
+-/*====================*/
+-/*=== Other Styles ===*/
+-/*====================*/
+-.clear {
+-	clear:both;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-clip.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-clip.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-clip.js	(revision 15488)
+@@ -1,67 +0,0 @@
+-/*!
+- * jQuery UI Effects Clip 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/clip-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.clip = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "vertical",
+-		vert = direction === "vertical",
+-		size = vert ? "height" : "width",
+-		position = vert ? "top" : "left",
+-		animation = {},
+-		wrapper, animate, distance;
+-
+-	// Save & Show
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+-	distance = animate[ size ]();
+-
+-	// Shift
+-	if ( show ) {
+-		animate.css( size, 0 );
+-		animate.css( position, distance / 2 );
+-	}
+-
+-	// Create Animation Object:
+-	animation[ size ] = show ? distance : 0;
+-	animation[ position ] = show ? 0 : distance / 2;
+-
+-	// Animate
+-	animate.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( !show ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.slider.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.slider.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.slider.js	(revision 15488)
+@@ -1,672 +0,0 @@
+-/*!
+- * jQuery UI Slider 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/slider/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-// number of pages in a slider
+-// (how many times can you page up/down to go through the whole range)
+-var numPages = 5;
+-
+-$.widget( "ui.slider", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "slide",
+-
+-	options: {
+-		animate: false,
+-		distance: 0,
+-		max: 100,
+-		min: 0,
+-		orientation: "horizontal",
+-		range: false,
+-		step: 1,
+-		value: 0,
+-		values: null,
+-
+-		// callbacks
+-		change: null,
+-		slide: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		this._keySliding = false;
+-		this._mouseSliding = false;
+-		this._animateOff = true;
+-		this._handleIndex = null;
+-		this._detectOrientation();
+-		this._mouseInit();
+-
+-		this.element
+-			.addClass( "ui-slider" +
+-				" ui-slider-" + this.orientation +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all");
+-
+-		this._refresh();
+-		this._setOption( "disabled", this.options.disabled );
+-
+-		this._animateOff = false;
+-	},
+-
+-	_refresh: function() {
+-		this._createRange();
+-		this._createHandles();
+-		this._setupEvents();
+-		this._refreshValue();
+-	},
+-
+-	_createHandles: function() {
+-		var i, handleCount,
+-			options = this.options,
+-			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+-			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+-			handles = [];
+-
+-		handleCount = ( options.values && options.values.length ) || 1;
+-
+-		if ( existingHandles.length > handleCount ) {
+-			existingHandles.slice( handleCount ).remove();
+-			existingHandles = existingHandles.slice( 0, handleCount );
+-		}
+-
+-		for ( i = existingHandles.length; i < handleCount; i++ ) {
+-			handles.push( handle );
+-		}
+-
+-		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+-
+-		this.handle = this.handles.eq( 0 );
+-
+-		this.handles.each(function( i ) {
+-			$( this ).data( "ui-slider-handle-index", i );
+-		});
+-	},
+-
+-	_createRange: function() {
+-		var options = this.options,
+-			classes = "";
+-
+-		if ( options.range ) {
+-			if ( options.range === true ) {
+-				if ( !options.values ) {
+-					options.values = [ this._valueMin(), this._valueMin() ];
+-				} else if ( options.values.length && options.values.length !== 2 ) {
+-					options.values = [ options.values[0], options.values[0] ];
+-				} else if ( $.isArray( options.values ) ) {
+-					options.values = options.values.slice(0);
+-				}
+-			}
+-
+-			if ( !this.range || !this.range.length ) {
+-				this.range = $( "<div></div>" )
+-					.appendTo( this.element );
+-
+-				classes = "ui-slider-range" +
+-				// note: this isn't the most fittingly semantic framework class for this element,
+-				// but worked best visually with a variety of themes
+-				" ui-widget-header ui-corner-all";
+-			} else {
+-				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+-					// Handle range switching from true to min/max
+-					.css({
+-						"left": "",
+-						"bottom": ""
+-					});
+-			}
+-
+-			this.range.addClass( classes +
+-				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+-		} else {
+-			this.range = $([]);
+-		}
+-	},
+-
+-	_setupEvents: function() {
+-		var elements = this.handles.add( this.range ).filter( "a" );
+-		this._off( elements );
+-		this._on( elements, this._handleEvents );
+-		this._hoverable( elements );
+-		this._focusable( elements );
+-	},
+-
+-	_destroy: function() {
+-		this.handles.remove();
+-		this.range.remove();
+-
+-		this.element
+-			.removeClass( "ui-slider" +
+-				" ui-slider-horizontal" +
+-				" ui-slider-vertical" +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" );
+-
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function( event ) {
+-		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+-			that = this,
+-			o = this.options;
+-
+-		if ( o.disabled ) {
+-			return false;
+-		}
+-
+-		this.elementSize = {
+-			width: this.element.outerWidth(),
+-			height: this.element.outerHeight()
+-		};
+-		this.elementOffset = this.element.offset();
+-
+-		position = { x: event.pageX, y: event.pageY };
+-		normValue = this._normValueFromMouse( position );
+-		distance = this._valueMax() - this._valueMin() + 1;
+-		this.handles.each(function( i ) {
+-			var thisDistance = Math.abs( normValue - that.values(i) );
+-			if (( distance > thisDistance ) ||
+-				( distance === thisDistance &&
+-					(i === that._lastChangedValue || that.values(i) === o.min ))) {
+-				distance = thisDistance;
+-				closestHandle = $( this );
+-				index = i;
+-			}
+-		});
+-
+-		allowed = this._start( event, index );
+-		if ( allowed === false ) {
+-			return false;
+-		}
+-		this._mouseSliding = true;
+-
+-		this._handleIndex = index;
+-
+-		closestHandle
+-			.addClass( "ui-state-active" )
+-			.focus();
+-
+-		offset = closestHandle.offset();
+-		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+-		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+-			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+-			top: event.pageY - offset.top -
+-				( closestHandle.height() / 2 ) -
+-				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+-				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+-				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+-		};
+-
+-		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+-			this._slide( event, index, normValue );
+-		}
+-		this._animateOff = true;
+-		return true;
+-	},
+-
+-	_mouseStart: function() {
+-		return true;
+-	},
+-
+-	_mouseDrag: function( event ) {
+-		var position = { x: event.pageX, y: event.pageY },
+-			normValue = this._normValueFromMouse( position );
+-
+-		this._slide( event, this._handleIndex, normValue );
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function( event ) {
+-		this.handles.removeClass( "ui-state-active" );
+-		this._mouseSliding = false;
+-
+-		this._stop( event, this._handleIndex );
+-		this._change( event, this._handleIndex );
+-
+-		this._handleIndex = null;
+-		this._clickOffset = null;
+-		this._animateOff = false;
+-
+-		return false;
+-	},
+-
+-	_detectOrientation: function() {
+-		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+-	},
+-
+-	_normValueFromMouse: function( position ) {
+-		var pixelTotal,
+-			pixelMouse,
+-			percentMouse,
+-			valueTotal,
+-			valueMouse;
+-
+-		if ( this.orientation === "horizontal" ) {
+-			pixelTotal = this.elementSize.width;
+-			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+-		} else {
+-			pixelTotal = this.elementSize.height;
+-			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+-		}
+-
+-		percentMouse = ( pixelMouse / pixelTotal );
+-		if ( percentMouse > 1 ) {
+-			percentMouse = 1;
+-		}
+-		if ( percentMouse < 0 ) {
+-			percentMouse = 0;
+-		}
+-		if ( this.orientation === "vertical" ) {
+-			percentMouse = 1 - percentMouse;
+-		}
+-
+-		valueTotal = this._valueMax() - this._valueMin();
+-		valueMouse = this._valueMin() + percentMouse * valueTotal;
+-
+-		return this._trimAlignValue( valueMouse );
+-	},
+-
+-	_start: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-		return this._trigger( "start", event, uiHash );
+-	},
+-
+-	_slide: function( event, index, newVal ) {
+-		var otherVal,
+-			newValues,
+-			allowed;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			otherVal = this.values( index ? 0 : 1 );
+-
+-			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+-					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+-				) {
+-				newVal = otherVal;
+-			}
+-
+-			if ( newVal !== this.values( index ) ) {
+-				newValues = this.values();
+-				newValues[ index ] = newVal;
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal,
+-					values: newValues
+-				} );
+-				otherVal = this.values( index ? 0 : 1 );
+-				if ( allowed !== false ) {
+-					this.values( index, newVal, true );
+-				}
+-			}
+-		} else {
+-			if ( newVal !== this.value() ) {
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal
+-				} );
+-				if ( allowed !== false ) {
+-					this.value( newVal );
+-				}
+-			}
+-		}
+-	},
+-
+-	_stop: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-
+-		this._trigger( "stop", event, uiHash );
+-	},
+-
+-	_change: function( event, index ) {
+-		if ( !this._keySliding && !this._mouseSliding ) {
+-			var uiHash = {
+-				handle: this.handles[ index ],
+-				value: this.value()
+-			};
+-			if ( this.options.values && this.options.values.length ) {
+-				uiHash.value = this.values( index );
+-				uiHash.values = this.values();
+-			}
+-
+-			//store the last changed value index for reference when handles overlap
+-			this._lastChangedValue = index;
+-
+-			this._trigger( "change", event, uiHash );
+-		}
+-	},
+-
+-	value: function( newValue ) {
+-		if ( arguments.length ) {
+-			this.options.value = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, 0 );
+-			return;
+-		}
+-
+-		return this._value();
+-	},
+-
+-	values: function( index, newValue ) {
+-		var vals,
+-			newValues,
+-			i;
+-
+-		if ( arguments.length > 1 ) {
+-			this.options.values[ index ] = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, index );
+-			return;
+-		}
+-
+-		if ( arguments.length ) {
+-			if ( $.isArray( arguments[ 0 ] ) ) {
+-				vals = this.options.values;
+-				newValues = arguments[ 0 ];
+-				for ( i = 0; i < vals.length; i += 1 ) {
+-					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+-					this._change( null, i );
+-				}
+-				this._refreshValue();
+-			} else {
+-				if ( this.options.values && this.options.values.length ) {
+-					return this._values( index );
+-				} else {
+-					return this.value();
+-				}
+-			}
+-		} else {
+-			return this._values();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var i,
+-			valsLength = 0;
+-
+-		if ( key === "range" && this.options.range === true ) {
+-			if ( value === "min" ) {
+-				this.options.value = this._values( 0 );
+-				this.options.values = null;
+-			} else if ( value === "max" ) {
+-				this.options.value = this._values( this.options.values.length-1 );
+-				this.options.values = null;
+-			}
+-		}
+-
+-		if ( $.isArray( this.options.values ) ) {
+-			valsLength = this.options.values.length;
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-
+-		switch ( key ) {
+-			case "orientation":
+-				this._detectOrientation();
+-				this.element
+-					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+-					.addClass( "ui-slider-" + this.orientation );
+-				this._refreshValue();
+-				break;
+-			case "value":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._change( null, 0 );
+-				this._animateOff = false;
+-				break;
+-			case "values":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				for ( i = 0; i < valsLength; i += 1 ) {
+-					this._change( null, i );
+-				}
+-				this._animateOff = false;
+-				break;
+-			case "min":
+-			case "max":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._animateOff = false;
+-				break;
+-			case "range":
+-				this._animateOff = true;
+-				this._refresh();
+-				this._animateOff = false;
+-				break;
+-		}
+-	},
+-
+-	//internal value getter
+-	// _value() returns value trimmed by min and max, aligned by step
+-	_value: function() {
+-		var val = this.options.value;
+-		val = this._trimAlignValue( val );
+-
+-		return val;
+-	},
+-
+-	//internal values getter
+-	// _values() returns array of values trimmed by min and max, aligned by step
+-	// _values( index ) returns single value trimmed by min and max, aligned by step
+-	_values: function( index ) {
+-		var val,
+-			vals,
+-			i;
+-
+-		if ( arguments.length ) {
+-			val = this.options.values[ index ];
+-			val = this._trimAlignValue( val );
+-
+-			return val;
+-		} else if ( this.options.values && this.options.values.length ) {
+-			// .slice() creates a copy of the array
+-			// this copy gets trimmed by min and max and then returned
+-			vals = this.options.values.slice();
+-			for ( i = 0; i < vals.length; i+= 1) {
+-				vals[ i ] = this._trimAlignValue( vals[ i ] );
+-			}
+-
+-			return vals;
+-		} else {
+-			return [];
+-		}
+-	},
+-
+-	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+-	_trimAlignValue: function( val ) {
+-		if ( val <= this._valueMin() ) {
+-			return this._valueMin();
+-		}
+-		if ( val >= this._valueMax() ) {
+-			return this._valueMax();
+-		}
+-		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+-			valModStep = (val - this._valueMin()) % step,
+-			alignValue = val - valModStep;
+-
+-		if ( Math.abs(valModStep) * 2 >= step ) {
+-			alignValue += ( valModStep > 0 ) ? step : ( -step );
+-		}
+-
+-		// Since JavaScript has problems with large floats, round
+-		// the final value to 5 digits after the decimal point (see #4124)
+-		return parseFloat( alignValue.toFixed(5) );
+-	},
+-
+-	_valueMin: function() {
+-		return this.options.min;
+-	},
+-
+-	_valueMax: function() {
+-		return this.options.max;
+-	},
+-
+-	_refreshValue: function() {
+-		var lastValPercent, valPercent, value, valueMin, valueMax,
+-			oRange = this.options.range,
+-			o = this.options,
+-			that = this,
+-			animate = ( !this._animateOff ) ? o.animate : false,
+-			_set = {};
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			this.handles.each(function( i ) {
+-				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+-				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-				if ( that.options.range === true ) {
+-					if ( that.orientation === "horizontal" ) {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					} else {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					}
+-				}
+-				lastValPercent = valPercent;
+-			});
+-		} else {
+-			value = this.value();
+-			valueMin = this._valueMin();
+-			valueMax = this._valueMax();
+-			valPercent = ( valueMax !== valueMin ) ?
+-					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+-					0;
+-			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-
+-			if ( oRange === "min" && this.orientation === "horizontal" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "horizontal" ) {
+-				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-			if ( oRange === "min" && this.orientation === "vertical" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "vertical" ) {
+-				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-		}
+-	},
+-
+-	_handleEvents: {
+-		keydown: function( event ) {
+-			/*jshint maxcomplexity:25*/
+-			var allowed, curVal, newVal, step,
+-				index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-				case $.ui.keyCode.END:
+-				case $.ui.keyCode.PAGE_UP:
+-				case $.ui.keyCode.PAGE_DOWN:
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					event.preventDefault();
+-					if ( !this._keySliding ) {
+-						this._keySliding = true;
+-						$( event.target ).addClass( "ui-state-active" );
+-						allowed = this._start( event, index );
+-						if ( allowed === false ) {
+-							return;
+-						}
+-					}
+-					break;
+-			}
+-
+-			step = this.options.step;
+-			if ( this.options.values && this.options.values.length ) {
+-				curVal = newVal = this.values( index );
+-			} else {
+-				curVal = newVal = this.value();
+-			}
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-					newVal = this._valueMin();
+-					break;
+-				case $.ui.keyCode.END:
+-					newVal = this._valueMax();
+-					break;
+-				case $.ui.keyCode.PAGE_UP:
+-					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.PAGE_DOWN:
+-					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-					if ( curVal === this._valueMax() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal + step );
+-					break;
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					if ( curVal === this._valueMin() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal - step );
+-					break;
+-			}
+-
+-			this._slide( event, index, newVal );
+-		},
+-		click: function( event ) {
+-			event.preventDefault();
+-		},
+-		keyup: function( event ) {
+-			var index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			if ( this._keySliding ) {
+-				this._keySliding = false;
+-				this._stop( event, index );
+-				this._change( event, index );
+-				$( event.target ).removeClass( "ui-state-active" );
+-			}
+-		}
+-	}
+-
+-});
+-
+-}(jQuery));
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.widget.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.widget.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.widget.js	(revision 15488)
+@@ -1,521 +0,0 @@
+-/*!
+- * jQuery UI Widget 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/jQuery.widget/
+- */
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	slice = Array.prototype.slice,
+-	_cleanData = $.cleanData;
+-$.cleanData = function( elems ) {
+-	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-		try {
+-			$( elem ).triggerHandler( "remove" );
+-		// http://bugs.jquery.com/ticket/8235
+-		} catch( e ) {}
+-	}
+-	_cleanData( elems );
+-};
+-
+-$.widget = function( name, base, prototype ) {
+-	var fullName, existingConstructor, constructor, basePrototype,
+-		// proxiedPrototype allows the provided prototype to remain unmodified
+-		// so that it can be used as a mixin for multiple widgets (#8876)
+-		proxiedPrototype = {},
+-		namespace = name.split( "." )[ 0 ];
+-
+-	name = name.split( "." )[ 1 ];
+-	fullName = namespace + "-" + name;
+-
+-	if ( !prototype ) {
+-		prototype = base;
+-		base = $.Widget;
+-	}
+-
+-	// create selector for plugin
+-	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+-		return !!$.data( elem, fullName );
+-	};
+-
+-	$[ namespace ] = $[ namespace ] || {};
+-	existingConstructor = $[ namespace ][ name ];
+-	constructor = $[ namespace ][ name ] = function( options, element ) {
+-		// allow instantiation without "new" keyword
+-		if ( !this._createWidget ) {
+-			return new constructor( options, element );
+-		}
+-
+-		// allow instantiation without initializing for simple inheritance
+-		// must use "new" keyword (the code above always passes args)
+-		if ( arguments.length ) {
+-			this._createWidget( options, element );
+-		}
+-	};
+-	// extend with the existing constructor to carry over any static properties
+-	$.extend( constructor, existingConstructor, {
+-		version: prototype.version,
+-		// copy the object used to create the prototype in case we need to
+-		// redefine the widget later
+-		_proto: $.extend( {}, prototype ),
+-		// track widgets that inherit from this widget in case this widget is
+-		// redefined after a widget inherits from it
+-		_childConstructors: []
+-	});
+-
+-	basePrototype = new base();
+-	// we need to make the options hash a property directly on the new instance
+-	// otherwise we'll modify the options hash on the prototype that we're
+-	// inheriting from
+-	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+-	$.each( prototype, function( prop, value ) {
+-		if ( !$.isFunction( value ) ) {
+-			proxiedPrototype[ prop ] = value;
+-			return;
+-		}
+-		proxiedPrototype[ prop ] = (function() {
+-			var _super = function() {
+-					return base.prototype[ prop ].apply( this, arguments );
+-				},
+-				_superApply = function( args ) {
+-					return base.prototype[ prop ].apply( this, args );
+-				};
+-			return function() {
+-				var __super = this._super,
+-					__superApply = this._superApply,
+-					returnValue;
+-
+-				this._super = _super;
+-				this._superApply = _superApply;
+-
+-				returnValue = value.apply( this, arguments );
+-
+-				this._super = __super;
+-				this._superApply = __superApply;
+-
+-				return returnValue;
+-			};
+-		})();
+-	});
+-	constructor.prototype = $.widget.extend( basePrototype, {
+-		// TODO: remove support for widgetEventPrefix
+-		// always use the name + a colon as the prefix, e.g., draggable:start
+-		// don't prefix for widgets that aren't DOM-based
+-		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+-	}, proxiedPrototype, {
+-		constructor: constructor,
+-		namespace: namespace,
+-		widgetName: name,
+-		widgetFullName: fullName
+-	});
+-
+-	// If this widget is being redefined then we need to find all widgets that
+-	// are inheriting from it and redefine all of them so that they inherit from
+-	// the new version of this widget. We're essentially trying to replace one
+-	// level in the prototype chain.
+-	if ( existingConstructor ) {
+-		$.each( existingConstructor._childConstructors, function( i, child ) {
+-			var childPrototype = child.prototype;
+-
+-			// redefine the child widget using the same prototype that was
+-			// originally used, but inherit from the new version of the base
+-			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+-		});
+-		// remove the list of existing child constructors from the old constructor
+-		// so the old child constructors can be garbage collected
+-		delete existingConstructor._childConstructors;
+-	} else {
+-		base._childConstructors.push( constructor );
+-	}
+-
+-	$.widget.bridge( name, constructor );
+-};
+-
+-$.widget.extend = function( target ) {
+-	var input = slice.call( arguments, 1 ),
+-		inputIndex = 0,
+-		inputLength = input.length,
+-		key,
+-		value;
+-	for ( ; inputIndex < inputLength; inputIndex++ ) {
+-		for ( key in input[ inputIndex ] ) {
+-			value = input[ inputIndex ][ key ];
+-			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+-				// Clone objects
+-				if ( $.isPlainObject( value ) ) {
+-					target[ key ] = $.isPlainObject( target[ key ] ) ?
+-						$.widget.extend( {}, target[ key ], value ) :
+-						// Don't extend strings, arrays, etc. with objects
+-						$.widget.extend( {}, value );
+-				// Copy everything else by reference
+-				} else {
+-					target[ key ] = value;
+-				}
+-			}
+-		}
+-	}
+-	return target;
+-};
+-
+-$.widget.bridge = function( name, object ) {
+-	var fullName = object.prototype.widgetFullName || name;
+-	$.fn[ name ] = function( options ) {
+-		var isMethodCall = typeof options === "string",
+-			args = slice.call( arguments, 1 ),
+-			returnValue = this;
+-
+-		// allow multiple hashes to be passed on init
+-		options = !isMethodCall && args.length ?
+-			$.widget.extend.apply( null, [ options ].concat(args) ) :
+-			options;
+-
+-		if ( isMethodCall ) {
+-			this.each(function() {
+-				var methodValue,
+-					instance = $.data( this, fullName );
+-				if ( !instance ) {
+-					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+-						"attempted to call method '" + options + "'" );
+-				}
+-				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+-					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+-				}
+-				methodValue = instance[ options ].apply( instance, args );
+-				if ( methodValue !== instance && methodValue !== undefined ) {
+-					returnValue = methodValue && methodValue.jquery ?
+-						returnValue.pushStack( methodValue.get() ) :
+-						methodValue;
+-					return false;
+-				}
+-			});
+-		} else {
+-			this.each(function() {
+-				var instance = $.data( this, fullName );
+-				if ( instance ) {
+-					instance.option( options || {} )._init();
+-				} else {
+-					$.data( this, fullName, new object( options, this ) );
+-				}
+-			});
+-		}
+-
+-		return returnValue;
+-	};
+-};
+-
+-$.Widget = function( /* options, element */ ) {};
+-$.Widget._childConstructors = [];
+-
+-$.Widget.prototype = {
+-	widgetName: "widget",
+-	widgetEventPrefix: "",
+-	defaultElement: "<div>",
+-	options: {
+-		disabled: false,
+-
+-		// callbacks
+-		create: null
+-	},
+-	_createWidget: function( options, element ) {
+-		element = $( element || this.defaultElement || this )[ 0 ];
+-		this.element = $( element );
+-		this.uuid = uuid++;
+-		this.eventNamespace = "." + this.widgetName + this.uuid;
+-		this.options = $.widget.extend( {},
+-			this.options,
+-			this._getCreateOptions(),
+-			options );
+-
+-		this.bindings = $();
+-		this.hoverable = $();
+-		this.focusable = $();
+-
+-		if ( element !== this ) {
+-			$.data( element, this.widgetFullName, this );
+-			this._on( true, this.element, {
+-				remove: function( event ) {
+-					if ( event.target === element ) {
+-						this.destroy();
+-					}
+-				}
+-			});
+-			this.document = $( element.style ?
+-				// element within the document
+-				element.ownerDocument :
+-				// element is window or document
+-				element.document || element );
+-			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+-		}
+-
+-		this._create();
+-		this._trigger( "create", null, this._getCreateEventData() );
+-		this._init();
+-	},
+-	_getCreateOptions: $.noop,
+-	_getCreateEventData: $.noop,
+-	_create: $.noop,
+-	_init: $.noop,
+-
+-	destroy: function() {
+-		this._destroy();
+-		// we can probably remove the unbind calls in 2.0
+-		// all event bindings should go through this._on()
+-		this.element
+-			.unbind( this.eventNamespace )
+-			// 1.9 BC for #7810
+-			// TODO remove dual storage
+-			.removeData( this.widgetName )
+-			.removeData( this.widgetFullName )
+-			// support: jquery <1.6.3
+-			// http://bugs.jquery.com/ticket/9413
+-			.removeData( $.camelCase( this.widgetFullName ) );
+-		this.widget()
+-			.unbind( this.eventNamespace )
+-			.removeAttr( "aria-disabled" )
+-			.removeClass(
+-				this.widgetFullName + "-disabled " +
+-				"ui-state-disabled" );
+-
+-		// clean up events and states
+-		this.bindings.unbind( this.eventNamespace );
+-		this.hoverable.removeClass( "ui-state-hover" );
+-		this.focusable.removeClass( "ui-state-focus" );
+-	},
+-	_destroy: $.noop,
+-
+-	widget: function() {
+-		return this.element;
+-	},
+-
+-	option: function( key, value ) {
+-		var options = key,
+-			parts,
+-			curOption,
+-			i;
+-
+-		if ( arguments.length === 0 ) {
+-			// don't return a reference to the internal hash
+-			return $.widget.extend( {}, this.options );
+-		}
+-
+-		if ( typeof key === "string" ) {
+-			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+-			options = {};
+-			parts = key.split( "." );
+-			key = parts.shift();
+-			if ( parts.length ) {
+-				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+-				for ( i = 0; i < parts.length - 1; i++ ) {
+-					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+-					curOption = curOption[ parts[ i ] ];
+-				}
+-				key = parts.pop();
+-				if ( value === undefined ) {
+-					return curOption[ key ] === undefined ? null : curOption[ key ];
+-				}
+-				curOption[ key ] = value;
+-			} else {
+-				if ( value === undefined ) {
+-					return this.options[ key ] === undefined ? null : this.options[ key ];
+-				}
+-				options[ key ] = value;
+-			}
+-		}
+-
+-		this._setOptions( options );
+-
+-		return this;
+-	},
+-	_setOptions: function( options ) {
+-		var key;
+-
+-		for ( key in options ) {
+-			this._setOption( key, options[ key ] );
+-		}
+-
+-		return this;
+-	},
+-	_setOption: function( key, value ) {
+-		this.options[ key ] = value;
+-
+-		if ( key === "disabled" ) {
+-			this.widget()
+-				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+-				.attr( "aria-disabled", value );
+-			this.hoverable.removeClass( "ui-state-hover" );
+-			this.focusable.removeClass( "ui-state-focus" );
+-		}
+-
+-		return this;
+-	},
+-
+-	enable: function() {
+-		return this._setOption( "disabled", false );
+-	},
+-	disable: function() {
+-		return this._setOption( "disabled", true );
+-	},
+-
+-	_on: function( suppressDisabledCheck, element, handlers ) {
+-		var delegateElement,
+-			instance = this;
+-
+-		// no suppressDisabledCheck flag, shuffle arguments
+-		if ( typeof suppressDisabledCheck !== "boolean" ) {
+-			handlers = element;
+-			element = suppressDisabledCheck;
+-			suppressDisabledCheck = false;
+-		}
+-
+-		// no element argument, shuffle and use this.element
+-		if ( !handlers ) {
+-			handlers = element;
+-			element = this.element;
+-			delegateElement = this.widget();
+-		} else {
+-			// accept selectors, DOM elements
+-			element = delegateElement = $( element );
+-			this.bindings = this.bindings.add( element );
+-		}
+-
+-		$.each( handlers, function( event, handler ) {
+-			function handlerProxy() {
+-				// allow widgets to customize the disabled handling
+-				// - disabled as an array instead of boolean
+-				// - disabled class as method for disabling individual parts
+-				if ( !suppressDisabledCheck &&
+-						( instance.options.disabled === true ||
+-							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+-					return;
+-				}
+-				return ( typeof handler === "string" ? instance[ handler ] : handler )
+-					.apply( instance, arguments );
+-			}
+-
+-			// copy the guid so direct unbinding works
+-			if ( typeof handler !== "string" ) {
+-				handlerProxy.guid = handler.guid =
+-					handler.guid || handlerProxy.guid || $.guid++;
+-			}
+-
+-			var match = event.match( /^(\w+)\s*(.*)$/ ),
+-				eventName = match[1] + instance.eventNamespace,
+-				selector = match[2];
+-			if ( selector ) {
+-				delegateElement.delegate( selector, eventName, handlerProxy );
+-			} else {
+-				element.bind( eventName, handlerProxy );
+-			}
+-		});
+-	},
+-
+-	_off: function( element, eventName ) {
+-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+-		element.unbind( eventName ).undelegate( eventName );
+-	},
+-
+-	_delay: function( handler, delay ) {
+-		function handlerProxy() {
+-			return ( typeof handler === "string" ? instance[ handler ] : handler )
+-				.apply( instance, arguments );
+-		}
+-		var instance = this;
+-		return setTimeout( handlerProxy, delay || 0 );
+-	},
+-
+-	_hoverable: function( element ) {
+-		this.hoverable = this.hoverable.add( element );
+-		this._on( element, {
+-			mouseenter: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-hover" );
+-			},
+-			mouseleave: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-hover" );
+-			}
+-		});
+-	},
+-
+-	_focusable: function( element ) {
+-		this.focusable = this.focusable.add( element );
+-		this._on( element, {
+-			focusin: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-focus" );
+-			},
+-			focusout: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-focus" );
+-			}
+-		});
+-	},
+-
+-	_trigger: function( type, event, data ) {
+-		var prop, orig,
+-			callback = this.options[ type ];
+-
+-		data = data || {};
+-		event = $.Event( event );
+-		event.type = ( type === this.widgetEventPrefix ?
+-			type :
+-			this.widgetEventPrefix + type ).toLowerCase();
+-		// the original event may come from any element
+-		// so we need to reset the target on the new event
+-		event.target = this.element[ 0 ];
+-
+-		// copy original event properties over to the new event
+-		orig = event.originalEvent;
+-		if ( orig ) {
+-			for ( prop in orig ) {
+-				if ( !( prop in event ) ) {
+-					event[ prop ] = orig[ prop ];
+-				}
+-			}
+-		}
+-
+-		this.element.trigger( event, data );
+-		return !( $.isFunction( callback ) &&
+-			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+-			event.isDefaultPrevented() );
+-	}
+-};
+-
+-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+-	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+-		if ( typeof options === "string" ) {
+-			options = { effect: options };
+-		}
+-		var hasOptions,
+-			effectName = !options ?
+-				method :
+-				options === true || typeof options === "number" ?
+-					defaultEffect :
+-					options.effect || defaultEffect;
+-		options = options || {};
+-		if ( typeof options === "number" ) {
+-			options = { duration: options };
+-		}
+-		hasOptions = !$.isEmptyObject( options );
+-		options.complete = callback;
+-		if ( options.delay ) {
+-			element.delay( options.delay );
+-		}
+-		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+-			element[ method ]( options );
+-		} else if ( effectName !== method && element[ effectName ] ) {
+-			element[ effectName ]( options.duration, options.easing, callback );
+-		} else {
+-			element.queue(function( next ) {
+-				$( this )[ method ]();
+-				if ( callback ) {
+-					callback.call( element[ 0 ] );
+-				}
+-				next();
+-			});
+-		}
+-	};
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.progressbar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.progressbar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.progressbar.js	(revision 15488)
+@@ -1,145 +0,0 @@
+-/*!
+- * jQuery UI Progressbar 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/progressbar/
+- *
+- * Depends:
+- *   jquery.ui.core.js
+- *   jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget( "ui.progressbar", {
+-	version: "1.10.3",
+-	options: {
+-		max: 100,
+-		value: 0,
+-
+-		change: null,
+-		complete: null
+-	},
+-
+-	min: 0,
+-
+-	_create: function() {
+-		// Constrain initial value
+-		this.oldValue = this.options.value = this._constrainedValue();
+-
+-		this.element
+-			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.attr({
+-				// Only set static values, aria-valuenow and aria-valuemax are
+-				// set inside _refreshValue()
+-				role: "progressbar",
+-				"aria-valuemin": this.min
+-			});
+-
+-		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+-			.appendTo( this.element );
+-
+-		this._refreshValue();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-
+-		this.valueDiv.remove();
+-	},
+-
+-	value: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			return this.options.value;
+-		}
+-
+-		this.options.value = this._constrainedValue( newValue );
+-		this._refreshValue();
+-	},
+-
+-	_constrainedValue: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			newValue = this.options.value;
+-		}
+-
+-		this.indeterminate = newValue === false;
+-
+-		// sanitize value
+-		if ( typeof newValue !== "number" ) {
+-			newValue = 0;
+-		}
+-
+-		return this.indeterminate ? false :
+-			Math.min( this.options.max, Math.max( this.min, newValue ) );
+-	},
+-
+-	_setOptions: function( options ) {
+-		// Ensure "value" option is set after other values (like max)
+-		var value = options.value;
+-		delete options.value;
+-
+-		this._super( options );
+-
+-		this.options.value = this._constrainedValue( value );
+-		this._refreshValue();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "max" ) {
+-			// Don't allow a max less than min
+-			value = Math.max( this.min, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	_percentage: function() {
+-		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+-	},
+-
+-	_refreshValue: function() {
+-		var value = this.options.value,
+-			percentage = this._percentage();
+-
+-		this.valueDiv
+-			.toggle( this.indeterminate || value > this.min )
+-			.toggleClass( "ui-corner-right", value === this.options.max )
+-			.width( percentage.toFixed(0) + "%" );
+-
+-		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+-
+-		if ( this.indeterminate ) {
+-			this.element.removeAttr( "aria-valuenow" );
+-			if ( !this.overlayDiv ) {
+-				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+-			}
+-		} else {
+-			this.element.attr({
+-				"aria-valuemax": this.options.max,
+-				"aria-valuenow": value
+-			});
+-			if ( this.overlayDiv ) {
+-				this.overlayDiv.remove();
+-				this.overlayDiv = null;
+-			}
+-		}
+-
+-		if ( this.oldValue !== value ) {
+-			this.oldValue = value;
+-			this._trigger( "change" );
+-		}
+-		if ( value === this.options.max ) {
+-			this._trigger( "complete" );
+-		}
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.tooltip.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.tooltip.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.tooltip.js	(revision 15488)
+@@ -1,402 +0,0 @@
+-/*!
+- * jQuery UI Tooltip 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/tooltip/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.position.js
+- */
+-(function( $ ) {
+-
+-var increments = 0;
+-
+-function addDescribedBy( elem, id ) {
+-	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+-	describedby.push( id );
+-	elem
+-		.data( "ui-tooltip-id", id )
+-		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+-}
+-
+-function removeDescribedBy( elem ) {
+-	var id = elem.data( "ui-tooltip-id" ),
+-		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+-		index = $.inArray( id, describedby );
+-	if ( index !== -1 ) {
+-		describedby.splice( index, 1 );
+-	}
+-
+-	elem.removeData( "ui-tooltip-id" );
+-	describedby = $.trim( describedby.join( " " ) );
+-	if ( describedby ) {
+-		elem.attr( "aria-describedby", describedby );
+-	} else {
+-		elem.removeAttr( "aria-describedby" );
+-	}
+-}
+-
+-$.widget( "ui.tooltip", {
+-	version: "1.10.3",
+-	options: {
+-		content: function() {
+-			// support: IE<9, Opera in jQuery <1.7
+-			// .text() can't accept undefined, so coerce to a string
+-			var title = $( this ).attr( "title" ) || "";
+-			// Escape title, since we're going from an attribute to raw HTML
+-			return $( "<a>" ).text( title ).html();
+-		},
+-		hide: true,
+-		// Disabled elements have inconsistent behavior across browsers (#8661)
+-		items: "[title]:not([disabled])",
+-		position: {
+-			my: "left top+15",
+-			at: "left bottom",
+-			collision: "flipfit flip"
+-		},
+-		show: true,
+-		tooltipClass: null,
+-		track: false,
+-
+-		// callbacks
+-		close: null,
+-		open: null
+-	},
+-
+-	_create: function() {
+-		this._on({
+-			mouseover: "open",
+-			focusin: "open"
+-		});
+-
+-		// IDs of generated tooltips, needed for destroy
+-		this.tooltips = {};
+-		// IDs of parent tooltips where we removed the title attribute
+-		this.parents = {};
+-
+-		if ( this.options.disabled ) {
+-			this._disable();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var that = this;
+-
+-		if ( key === "disabled" ) {
+-			this[ value ? "_disable" : "_enable" ]();
+-			this.options[ key ] = value;
+-			// disable element style changes
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "content" ) {
+-			$.each( this.tooltips, function( id, element ) {
+-				that._updateContent( element );
+-			});
+-		}
+-	},
+-
+-	_disable: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-		});
+-
+-		// remove title attributes to prevent native tooltips
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.is( "[title]" ) ) {
+-				element
+-					.data( "ui-tooltip-title", element.attr( "title" ) )
+-					.attr( "title", "" );
+-			}
+-		});
+-	},
+-
+-	_enable: function() {
+-		// restore title attributes
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-			}
+-		});
+-	},
+-
+-	open: function( event ) {
+-		var that = this,
+-			target = $( event ? event.target : this.element )
+-				// we need closest here due to mouseover bubbling,
+-				// but always pointing at the same event target
+-				.closest( this.options.items );
+-
+-		// No element to show a tooltip for or the tooltip is already open
+-		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+-			return;
+-		}
+-
+-		if ( target.attr( "title" ) ) {
+-			target.data( "ui-tooltip-title", target.attr( "title" ) );
+-		}
+-
+-		target.data( "ui-tooltip-open", true );
+-
+-		// kill parent tooltips, custom or native, for hover
+-		if ( event && event.type === "mouseover" ) {
+-			target.parents().each(function() {
+-				var parent = $( this ),
+-					blurEvent;
+-				if ( parent.data( "ui-tooltip-open" ) ) {
+-					blurEvent = $.Event( "blur" );
+-					blurEvent.target = blurEvent.currentTarget = this;
+-					that.close( blurEvent, true );
+-				}
+-				if ( parent.attr( "title" ) ) {
+-					parent.uniqueId();
+-					that.parents[ this.id ] = {
+-						element: this,
+-						title: parent.attr( "title" )
+-					};
+-					parent.attr( "title", "" );
+-				}
+-			});
+-		}
+-
+-		this._updateContent( target, event );
+-	},
+-
+-	_updateContent: function( target, event ) {
+-		var content,
+-			contentOption = this.options.content,
+-			that = this,
+-			eventType = event ? event.type : null;
+-
+-		if ( typeof contentOption === "string" ) {
+-			return this._open( event, target, contentOption );
+-		}
+-
+-		content = contentOption.call( target[0], function( response ) {
+-			// ignore async response if tooltip was closed already
+-			if ( !target.data( "ui-tooltip-open" ) ) {
+-				return;
+-			}
+-			// IE may instantly serve a cached response for ajax requests
+-			// delay this call to _open so the other call to _open runs first
+-			that._delay(function() {
+-				// jQuery creates a special event for focusin when it doesn't
+-				// exist natively. To improve performance, the native event
+-				// object is reused and the type is changed. Therefore, we can't
+-				// rely on the type being correct after the event finished
+-				// bubbling, so we set it back to the previous value. (#8740)
+-				if ( event ) {
+-					event.type = eventType;
+-				}
+-				this._open( event, target, response );
+-			});
+-		});
+-		if ( content ) {
+-			this._open( event, target, content );
+-		}
+-	},
+-
+-	_open: function( event, target, content ) {
+-		var tooltip, events, delayedShow,
+-			positionOption = $.extend( {}, this.options.position );
+-
+-		if ( !content ) {
+-			return;
+-		}
+-
+-		// Content can be updated multiple times. If the tooltip already
+-		// exists, then just update the content and bail.
+-		tooltip = this._find( target );
+-		if ( tooltip.length ) {
+-			tooltip.find( ".ui-tooltip-content" ).html( content );
+-			return;
+-		}
+-
+-		// if we have a title, clear it to prevent the native tooltip
+-		// we have to check first to avoid defining a title if none exists
+-		// (we don't want to cause an element to start matching [title])
+-		//
+-		// We use removeAttr only for key events, to allow IE to export the correct
+-		// accessible attributes. For mouse events, set to empty string to avoid
+-		// native tooltip showing up (happens only when removing inside mouseover).
+-		if ( target.is( "[title]" ) ) {
+-			if ( event && event.type === "mouseover" ) {
+-				target.attr( "title", "" );
+-			} else {
+-				target.removeAttr( "title" );
+-			}
+-		}
+-
+-		tooltip = this._tooltip( target );
+-		addDescribedBy( target, tooltip.attr( "id" ) );
+-		tooltip.find( ".ui-tooltip-content" ).html( content );
+-
+-		function position( event ) {
+-			positionOption.of = event;
+-			if ( tooltip.is( ":hidden" ) ) {
+-				return;
+-			}
+-			tooltip.position( positionOption );
+-		}
+-		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+-			this._on( this.document, {
+-				mousemove: position
+-			});
+-			// trigger once to override element-relative positioning
+-			position( event );
+-		} else {
+-			tooltip.position( $.extend({
+-				of: target
+-			}, this.options.position ) );
+-		}
+-
+-		tooltip.hide();
+-
+-		this._show( tooltip, this.options.show );
+-		// Handle tracking tooltips that are shown with a delay (#8644). As soon
+-		// as the tooltip is visible, position the tooltip using the most recent
+-		// event.
+-		if ( this.options.show && this.options.show.delay ) {
+-			delayedShow = this.delayedShow = setInterval(function() {
+-				if ( tooltip.is( ":visible" ) ) {
+-					position( positionOption.of );
+-					clearInterval( delayedShow );
+-				}
+-			}, $.fx.interval );
+-		}
+-
+-		this._trigger( "open", event, { tooltip: tooltip } );
+-
+-		events = {
+-			keyup: function( event ) {
+-				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					var fakeEvent = $.Event(event);
+-					fakeEvent.currentTarget = target[0];
+-					this.close( fakeEvent, true );
+-				}
+-			},
+-			remove: function() {
+-				this._removeTooltip( tooltip );
+-			}
+-		};
+-		if ( !event || event.type === "mouseover" ) {
+-			events.mouseleave = "close";
+-		}
+-		if ( !event || event.type === "focusin" ) {
+-			events.focusout = "close";
+-		}
+-		this._on( true, target, events );
+-	},
+-
+-	close: function( event ) {
+-		var that = this,
+-			target = $( event ? event.currentTarget : this.element ),
+-			tooltip = this._find( target );
+-
+-		// disabling closes the tooltip, so we need to track when we're closing
+-		// to avoid an infinite loop in case the tooltip becomes disabled on close
+-		if ( this.closing ) {
+-			return;
+-		}
+-
+-		// Clear the interval for delayed tracking tooltips
+-		clearInterval( this.delayedShow );
+-
+-		// only set title if we had one before (see comment in _open())
+-		if ( target.data( "ui-tooltip-title" ) ) {
+-			target.attr( "title", target.data( "ui-tooltip-title" ) );
+-		}
+-
+-		removeDescribedBy( target );
+-
+-		tooltip.stop( true );
+-		this._hide( tooltip, this.options.hide, function() {
+-			that._removeTooltip( $( this ) );
+-		});
+-
+-		target.removeData( "ui-tooltip-open" );
+-		this._off( target, "mouseleave focusout keyup" );
+-		// Remove 'remove' binding only on delegated targets
+-		if ( target[0] !== this.element[0] ) {
+-			this._off( target, "remove" );
+-		}
+-		this._off( this.document, "mousemove" );
+-
+-		if ( event && event.type === "mouseleave" ) {
+-			$.each( this.parents, function( id, parent ) {
+-				$( parent.element ).attr( "title", parent.title );
+-				delete that.parents[ id ];
+-			});
+-		}
+-
+-		this.closing = true;
+-		this._trigger( "close", event, { tooltip: tooltip } );
+-		this.closing = false;
+-	},
+-
+-	_tooltip: function( element ) {
+-		var id = "ui-tooltip-" + increments++,
+-			tooltip = $( "<div>" )
+-				.attr({
+-					id: id,
+-					role: "tooltip"
+-				})
+-				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+-					( this.options.tooltipClass || "" ) );
+-		$( "<div>" )
+-			.addClass( "ui-tooltip-content" )
+-			.appendTo( tooltip );
+-		tooltip.appendTo( this.document[0].body );
+-		this.tooltips[ id ] = element;
+-		return tooltip;
+-	},
+-
+-	_find: function( target ) {
+-		var id = target.data( "ui-tooltip-id" );
+-		return id ? $( "#" + id ) : $();
+-	},
+-
+-	_removeTooltip: function( tooltip ) {
+-		tooltip.remove();
+-		delete this.tooltips[ tooltip.attr( "id" ) ];
+-	},
+-
+-	_destroy: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			// Delegate to close method to handle common cleanup
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-
+-			// Remove immediately; destroying an open tooltip doesn't use the
+-			// hide animation
+-			$( "#" + id ).remove();
+-
+-			// Restore the title
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-				element.removeData( "ui-tooltip-title" );
+-			}
+-		});
+-	}
+-});
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-explode.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-explode.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-explode.js	(revision 15488)
+@@ -1,97 +0,0 @@
+-/*!
+- * jQuery UI Effects Explode 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/explode-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.explode = function( o, done ) {
+-
+-	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+-		cells = rows,
+-		el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-
+-		// show and then visibility:hidden the element before calculating offset
+-		offset = el.show().css( "visibility", "hidden" ).offset(),
+-
+-		// width and height of a piece
+-		width = Math.ceil( el.outerWidth() / cells ),
+-		height = Math.ceil( el.outerHeight() / rows ),
+-		pieces = [],
+-
+-		// loop
+-		i, j, left, top, mx, my;
+-
+-	// children animate complete:
+-	function childComplete() {
+-		pieces.push( this );
+-		if ( pieces.length === rows * cells ) {
+-			animComplete();
+-		}
+-	}
+-
+-	// clone the element for each row and cell.
+-	for( i = 0; i < rows ; i++ ) { // ===>
+-		top = offset.top + i * height;
+-		my = i - ( rows - 1 ) / 2 ;
+-
+-		for( j = 0; j < cells ; j++ ) { // |||
+-			left = offset.left + j * width;
+-			mx = j - ( cells - 1 ) / 2 ;
+-
+-			// Create a clone of the now hidden main element that will be absolute positioned
+-			// within a wrapper div off the -left and -top equal to size of our pieces
+-			el
+-				.clone()
+-				.appendTo( "body" )
+-				.wrap( "<div></div>" )
+-				.css({
+-					position: "absolute",
+-					visibility: "visible",
+-					left: -j * width,
+-					top: -i * height
+-				})
+-
+-			// select the wrapper - make it overflow: hidden and absolute positioned based on
+-			// where the original was located +left and +top equal to the size of pieces
+-				.parent()
+-				.addClass( "ui-effects-explode" )
+-				.css({
+-					position: "absolute",
+-					overflow: "hidden",
+-					width: width,
+-					height: height,
+-					left: left + ( show ? mx * width : 0 ),
+-					top: top + ( show ? my * height : 0 ),
+-					opacity: show ? 0 : 1
+-				}).animate({
+-					left: left + ( show ? 0 : mx * width ),
+-					top: top + ( show ? 0 : my * height ),
+-					opacity: show ? 1 : 0
+-				}, o.duration || 500, o.easing, childComplete );
+-		}
+-	}
+-
+-	function animComplete() {
+-		el.css({
+-			visibility: "visible"
+-		});
+-		$( pieces ).remove();
+-		if ( !show ) {
+-			el.hide();
+-		}
+-		done();
+-	}
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect.js	(revision 15488)
+@@ -1,1289 +0,0 @@
+-/*!
+- * jQuery UI Effects 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/category/effects-core/
+- */
+-(function($, undefined) {
+-
+-var dataSpace = "ui-effects-";
+-
+-$.effects = {
+-	effect: {}
+-};
+-
+-/*!
+- * jQuery Color Animations v2.1.2
+- * https://github.com/jquery/jquery-color
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * Date: Wed Jan 16 08:47:09 2013 -0600
+- */
+-(function( jQuery, undefined ) {
+-
+-	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+-
+-	// plusequals test for += 100 -= 100
+-	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+-	// a set of RE's that can match strings and generate color tuples.
+-	stringParsers = [{
+-			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ],
+-					execResult[ 3 ],
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ] * 2.55,
+-					execResult[ 2 ] * 2.55,
+-					execResult[ 3 ] * 2.55,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			space: "hsla",
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ] / 100,
+-					execResult[ 3 ] / 100,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}],
+-
+-	// jQuery.Color( )
+-	color = jQuery.Color = function( color, green, blue, alpha ) {
+-		return new jQuery.Color.fn.parse( color, green, blue, alpha );
+-	},
+-	spaces = {
+-		rgba: {
+-			props: {
+-				red: {
+-					idx: 0,
+-					type: "byte"
+-				},
+-				green: {
+-					idx: 1,
+-					type: "byte"
+-				},
+-				blue: {
+-					idx: 2,
+-					type: "byte"
+-				}
+-			}
+-		},
+-
+-		hsla: {
+-			props: {
+-				hue: {
+-					idx: 0,
+-					type: "degrees"
+-				},
+-				saturation: {
+-					idx: 1,
+-					type: "percent"
+-				},
+-				lightness: {
+-					idx: 2,
+-					type: "percent"
+-				}
+-			}
+-		}
+-	},
+-	propTypes = {
+-		"byte": {
+-			floor: true,
+-			max: 255
+-		},
+-		"percent": {
+-			max: 1
+-		},
+-		"degrees": {
+-			mod: 360,
+-			floor: true
+-		}
+-	},
+-	support = color.support = {},
+-
+-	// element for support tests
+-	supportElem = jQuery( "<p>" )[ 0 ],
+-
+-	// colors = jQuery.Color.names
+-	colors,
+-
+-	// local aliases of functions called often
+-	each = jQuery.each;
+-
+-// determine rgba support immediately
+-supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+-support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+-
+-// define cache name and alpha properties
+-// for rgba and hsla spaces
+-each( spaces, function( spaceName, space ) {
+-	space.cache = "_" + spaceName;
+-	space.props.alpha = {
+-		idx: 3,
+-		type: "percent",
+-		def: 1
+-	};
+-});
+-
+-function clamp( value, prop, allowEmpty ) {
+-	var type = propTypes[ prop.type ] || {};
+-
+-	if ( value == null ) {
+-		return (allowEmpty || !prop.def) ? null : prop.def;
+-	}
+-
+-	// ~~ is an short way of doing floor for positive numbers
+-	value = type.floor ? ~~value : parseFloat( value );
+-
+-	// IE will pass in empty strings as value for alpha,
+-	// which will hit this case
+-	if ( isNaN( value ) ) {
+-		return prop.def;
+-	}
+-
+-	if ( type.mod ) {
+-		// we add mod before modding to make sure that negatives values
+-		// get converted properly: -10 -> 350
+-		return (value + type.mod) % type.mod;
+-	}
+-
+-	// for now all property types without mod have min and max
+-	return 0 > value ? 0 : type.max < value ? type.max : value;
+-}
+-
+-function stringParse( string ) {
+-	var inst = color(),
+-		rgba = inst._rgba = [];
+-
+-	string = string.toLowerCase();
+-
+-	each( stringParsers, function( i, parser ) {
+-		var parsed,
+-			match = parser.re.exec( string ),
+-			values = match && parser.parse( match ),
+-			spaceName = parser.space || "rgba";
+-
+-		if ( values ) {
+-			parsed = inst[ spaceName ]( values );
+-
+-			// if this was an rgba parse the assignment might happen twice
+-			// oh well....
+-			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+-			rgba = inst._rgba = parsed._rgba;
+-
+-			// exit each( stringParsers ) here because we matched
+-			return false;
+-		}
+-	});
+-
+-	// Found a stringParser that handled it
+-	if ( rgba.length ) {
+-
+-		// if this came from a parsed string, force "transparent" when alpha is 0
+-		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+-		if ( rgba.join() === "0,0,0,0" ) {
+-			jQuery.extend( rgba, colors.transparent );
+-		}
+-		return inst;
+-	}
+-
+-	// named colors
+-	return colors[ string ];
+-}
+-
+-color.fn = jQuery.extend( color.prototype, {
+-	parse: function( red, green, blue, alpha ) {
+-		if ( red === undefined ) {
+-			this._rgba = [ null, null, null, null ];
+-			return this;
+-		}
+-		if ( red.jquery || red.nodeType ) {
+-			red = jQuery( red ).css( green );
+-			green = undefined;
+-		}
+-
+-		var inst = this,
+-			type = jQuery.type( red ),
+-			rgba = this._rgba = [];
+-
+-		// more than 1 argument specified - assume ( red, green, blue, alpha )
+-		if ( green !== undefined ) {
+-			red = [ red, green, blue, alpha ];
+-			type = "array";
+-		}
+-
+-		if ( type === "string" ) {
+-			return this.parse( stringParse( red ) || colors._default );
+-		}
+-
+-		if ( type === "array" ) {
+-			each( spaces.rgba.props, function( key, prop ) {
+-				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+-			});
+-			return this;
+-		}
+-
+-		if ( type === "object" ) {
+-			if ( red instanceof color ) {
+-				each( spaces, function( spaceName, space ) {
+-					if ( red[ space.cache ] ) {
+-						inst[ space.cache ] = red[ space.cache ].slice();
+-					}
+-				});
+-			} else {
+-				each( spaces, function( spaceName, space ) {
+-					var cache = space.cache;
+-					each( space.props, function( key, prop ) {
+-
+-						// if the cache doesn't exist, and we know how to convert
+-						if ( !inst[ cache ] && space.to ) {
+-
+-							// if the value was null, we don't need to copy it
+-							// if the key was alpha, we don't need to copy it either
+-							if ( key === "alpha" || red[ key ] == null ) {
+-								return;
+-							}
+-							inst[ cache ] = space.to( inst._rgba );
+-						}
+-
+-						// this is the only case where we allow nulls for ALL properties.
+-						// call clamp with alwaysAllowEmpty
+-						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+-					});
+-
+-					// everything defined but alpha?
+-					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+-						// use the default of 1
+-						inst[ cache ][ 3 ] = 1;
+-						if ( space.from ) {
+-							inst._rgba = space.from( inst[ cache ] );
+-						}
+-					}
+-				});
+-			}
+-			return this;
+-		}
+-	},
+-	is: function( compare ) {
+-		var is = color( compare ),
+-			same = true,
+-			inst = this;
+-
+-		each( spaces, function( _, space ) {
+-			var localCache,
+-				isCache = is[ space.cache ];
+-			if (isCache) {
+-				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+-				each( space.props, function( _, prop ) {
+-					if ( isCache[ prop.idx ] != null ) {
+-						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+-						return same;
+-					}
+-				});
+-			}
+-			return same;
+-		});
+-		return same;
+-	},
+-	_space: function() {
+-		var used = [],
+-			inst = this;
+-		each( spaces, function( spaceName, space ) {
+-			if ( inst[ space.cache ] ) {
+-				used.push( spaceName );
+-			}
+-		});
+-		return used.pop();
+-	},
+-	transition: function( other, distance ) {
+-		var end = color( other ),
+-			spaceName = end._space(),
+-			space = spaces[ spaceName ],
+-			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+-			start = startColor[ space.cache ] || space.to( startColor._rgba ),
+-			result = start.slice();
+-
+-		end = end[ space.cache ];
+-		each( space.props, function( key, prop ) {
+-			var index = prop.idx,
+-				startValue = start[ index ],
+-				endValue = end[ index ],
+-				type = propTypes[ prop.type ] || {};
+-
+-			// if null, don't override start value
+-			if ( endValue === null ) {
+-				return;
+-			}
+-			// if null - use end
+-			if ( startValue === null ) {
+-				result[ index ] = endValue;
+-			} else {
+-				if ( type.mod ) {
+-					if ( endValue - startValue > type.mod / 2 ) {
+-						startValue += type.mod;
+-					} else if ( startValue - endValue > type.mod / 2 ) {
+-						startValue -= type.mod;
+-					}
+-				}
+-				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+-			}
+-		});
+-		return this[ spaceName ]( result );
+-	},
+-	blend: function( opaque ) {
+-		// if we are already opaque - return ourself
+-		if ( this._rgba[ 3 ] === 1 ) {
+-			return this;
+-		}
+-
+-		var rgb = this._rgba.slice(),
+-			a = rgb.pop(),
+-			blend = color( opaque )._rgba;
+-
+-		return color( jQuery.map( rgb, function( v, i ) {
+-			return ( 1 - a ) * blend[ i ] + a * v;
+-		}));
+-	},
+-	toRgbaString: function() {
+-		var prefix = "rgba(",
+-			rgba = jQuery.map( this._rgba, function( v, i ) {
+-				return v == null ? ( i > 2 ? 1 : 0 ) : v;
+-			});
+-
+-		if ( rgba[ 3 ] === 1 ) {
+-			rgba.pop();
+-			prefix = "rgb(";
+-		}
+-
+-		return prefix + rgba.join() + ")";
+-	},
+-	toHslaString: function() {
+-		var prefix = "hsla(",
+-			hsla = jQuery.map( this.hsla(), function( v, i ) {
+-				if ( v == null ) {
+-					v = i > 2 ? 1 : 0;
+-				}
+-
+-				// catch 1 and 2
+-				if ( i && i < 3 ) {
+-					v = Math.round( v * 100 ) + "%";
+-				}
+-				return v;
+-			});
+-
+-		if ( hsla[ 3 ] === 1 ) {
+-			hsla.pop();
+-			prefix = "hsl(";
+-		}
+-		return prefix + hsla.join() + ")";
+-	},
+-	toHexString: function( includeAlpha ) {
+-		var rgba = this._rgba.slice(),
+-			alpha = rgba.pop();
+-
+-		if ( includeAlpha ) {
+-			rgba.push( ~~( alpha * 255 ) );
+-		}
+-
+-		return "#" + jQuery.map( rgba, function( v ) {
+-
+-			// default to 0 when nulls exist
+-			v = ( v || 0 ).toString( 16 );
+-			return v.length === 1 ? "0" + v : v;
+-		}).join("");
+-	},
+-	toString: function() {
+-		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+-	}
+-});
+-color.fn.parse.prototype = color.fn;
+-
+-// hsla conversions adapted from:
+-// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+-
+-function hue2rgb( p, q, h ) {
+-	h = ( h + 1 ) % 1;
+-	if ( h * 6 < 1 ) {
+-		return p + (q - p) * h * 6;
+-	}
+-	if ( h * 2 < 1) {
+-		return q;
+-	}
+-	if ( h * 3 < 2 ) {
+-		return p + (q - p) * ((2/3) - h) * 6;
+-	}
+-	return p;
+-}
+-
+-spaces.hsla.to = function ( rgba ) {
+-	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+-		return [ null, null, null, rgba[ 3 ] ];
+-	}
+-	var r = rgba[ 0 ] / 255,
+-		g = rgba[ 1 ] / 255,
+-		b = rgba[ 2 ] / 255,
+-		a = rgba[ 3 ],
+-		max = Math.max( r, g, b ),
+-		min = Math.min( r, g, b ),
+-		diff = max - min,
+-		add = max + min,
+-		l = add * 0.5,
+-		h, s;
+-
+-	if ( min === max ) {
+-		h = 0;
+-	} else if ( r === max ) {
+-		h = ( 60 * ( g - b ) / diff ) + 360;
+-	} else if ( g === max ) {
+-		h = ( 60 * ( b - r ) / diff ) + 120;
+-	} else {
+-		h = ( 60 * ( r - g ) / diff ) + 240;
+-	}
+-
+-	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+-	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+-	if ( diff === 0 ) {
+-		s = 0;
+-	} else if ( l <= 0.5 ) {
+-		s = diff / add;
+-	} else {
+-		s = diff / ( 2 - add );
+-	}
+-	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+-};
+-
+-spaces.hsla.from = function ( hsla ) {
+-	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+-		return [ null, null, null, hsla[ 3 ] ];
+-	}
+-	var h = hsla[ 0 ] / 360,
+-		s = hsla[ 1 ],
+-		l = hsla[ 2 ],
+-		a = hsla[ 3 ],
+-		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+-		p = 2 * l - q;
+-
+-	return [
+-		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+-		Math.round( hue2rgb( p, q, h ) * 255 ),
+-		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+-		a
+-	];
+-};
+-
+-
+-each( spaces, function( spaceName, space ) {
+-	var props = space.props,
+-		cache = space.cache,
+-		to = space.to,
+-		from = space.from;
+-
+-	// makes rgba() and hsla()
+-	color.fn[ spaceName ] = function( value ) {
+-
+-		// generate a cache for this space if it doesn't exist
+-		if ( to && !this[ cache ] ) {
+-			this[ cache ] = to( this._rgba );
+-		}
+-		if ( value === undefined ) {
+-			return this[ cache ].slice();
+-		}
+-
+-		var ret,
+-			type = jQuery.type( value ),
+-			arr = ( type === "array" || type === "object" ) ? value : arguments,
+-			local = this[ cache ].slice();
+-
+-		each( props, function( key, prop ) {
+-			var val = arr[ type === "object" ? key : prop.idx ];
+-			if ( val == null ) {
+-				val = local[ prop.idx ];
+-			}
+-			local[ prop.idx ] = clamp( val, prop );
+-		});
+-
+-		if ( from ) {
+-			ret = color( from( local ) );
+-			ret[ cache ] = local;
+-			return ret;
+-		} else {
+-			return color( local );
+-		}
+-	};
+-
+-	// makes red() green() blue() alpha() hue() saturation() lightness()
+-	each( props, function( key, prop ) {
+-		// alpha is included in more than one space
+-		if ( color.fn[ key ] ) {
+-			return;
+-		}
+-		color.fn[ key ] = function( value ) {
+-			var vtype = jQuery.type( value ),
+-				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+-				local = this[ fn ](),
+-				cur = local[ prop.idx ],
+-				match;
+-
+-			if ( vtype === "undefined" ) {
+-				return cur;
+-			}
+-
+-			if ( vtype === "function" ) {
+-				value = value.call( this, cur );
+-				vtype = jQuery.type( value );
+-			}
+-			if ( value == null && prop.empty ) {
+-				return this;
+-			}
+-			if ( vtype === "string" ) {
+-				match = rplusequals.exec( value );
+-				if ( match ) {
+-					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+-				}
+-			}
+-			local[ prop.idx ] = value;
+-			return this[ fn ]( local );
+-		};
+-	});
+-});
+-
+-// add cssHook and .fx.step function for each named hook.
+-// accept a space separated string of properties
+-color.hook = function( hook ) {
+-	var hooks = hook.split( " " );
+-	each( hooks, function( i, hook ) {
+-		jQuery.cssHooks[ hook ] = {
+-			set: function( elem, value ) {
+-				var parsed, curElem,
+-					backgroundColor = "";
+-
+-				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+-					value = color( parsed || value );
+-					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+-						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+-						while (
+-							(backgroundColor === "" || backgroundColor === "transparent") &&
+-							curElem && curElem.style
+-						) {
+-							try {
+-								backgroundColor = jQuery.css( curElem, "backgroundColor" );
+-								curElem = curElem.parentNode;
+-							} catch ( e ) {
+-							}
+-						}
+-
+-						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+-							backgroundColor :
+-							"_default" );
+-					}
+-
+-					value = value.toRgbaString();
+-				}
+-				try {
+-					elem.style[ hook ] = value;
+-				} catch( e ) {
+-					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+-				}
+-			}
+-		};
+-		jQuery.fx.step[ hook ] = function( fx ) {
+-			if ( !fx.colorInit ) {
+-				fx.start = color( fx.elem, hook );
+-				fx.end = color( fx.end );
+-				fx.colorInit = true;
+-			}
+-			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+-		};
+-	});
+-
+-};
+-
+-color.hook( stepHooks );
+-
+-jQuery.cssHooks.borderColor = {
+-	expand: function( value ) {
+-		var expanded = {};
+-
+-		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+-			expanded[ "border" + part + "Color" ] = value;
+-		});
+-		return expanded;
+-	}
+-};
+-
+-// Basic color names only.
+-// Usage of any of the other color names requires adding yourself or including
+-// jquery.color.svg-names.js.
+-colors = jQuery.Color.names = {
+-	// 4.1. Basic color keywords
+-	aqua: "#00ffff",
+-	black: "#000000",
+-	blue: "#0000ff",
+-	fuchsia: "#ff00ff",
+-	gray: "#808080",
+-	green: "#008000",
+-	lime: "#00ff00",
+-	maroon: "#800000",
+-	navy: "#000080",
+-	olive: "#808000",
+-	purple: "#800080",
+-	red: "#ff0000",
+-	silver: "#c0c0c0",
+-	teal: "#008080",
+-	white: "#ffffff",
+-	yellow: "#ffff00",
+-
+-	// 4.2.3. "transparent" color keyword
+-	transparent: [ null, null, null, 0 ],
+-
+-	_default: "#ffffff"
+-};
+-
+-})( jQuery );
+-
+-
+-/******************************************************************************/
+-/****************************** CLASS ANIMATIONS ******************************/
+-/******************************************************************************/
+-(function() {
+-
+-var classAnimationActions = [ "add", "remove", "toggle" ],
+-	shorthandStyles = {
+-		border: 1,
+-		borderBottom: 1,
+-		borderColor: 1,
+-		borderLeft: 1,
+-		borderRight: 1,
+-		borderTop: 1,
+-		borderWidth: 1,
+-		margin: 1,
+-		padding: 1
+-	};
+-
+-$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+-	$.fx.step[ prop ] = function( fx ) {
+-		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+-			jQuery.style( fx.elem, prop, fx.end );
+-			fx.setAttr = true;
+-		}
+-	};
+-});
+-
+-function getElementStyles( elem ) {
+-	var key, len,
+-		style = elem.ownerDocument.defaultView ?
+-			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+-			elem.currentStyle,
+-		styles = {};
+-
+-	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+-		len = style.length;
+-		while ( len-- ) {
+-			key = style[ len ];
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ $.camelCase( key ) ] = style[ key ];
+-			}
+-		}
+-	// support: Opera, IE <9
+-	} else {
+-		for ( key in style ) {
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ key ] = style[ key ];
+-			}
+-		}
+-	}
+-
+-	return styles;
+-}
+-
+-
+-function styleDifference( oldStyle, newStyle ) {
+-	var diff = {},
+-		name, value;
+-
+-	for ( name in newStyle ) {
+-		value = newStyle[ name ];
+-		if ( oldStyle[ name ] !== value ) {
+-			if ( !shorthandStyles[ name ] ) {
+-				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+-					diff[ name ] = value;
+-				}
+-			}
+-		}
+-	}
+-
+-	return diff;
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-$.effects.animateClass = function( value, duration, easing, callback ) {
+-	var o = $.speed( duration, easing, callback );
+-
+-	return this.queue( function() {
+-		var animated = $( this ),
+-			baseClass = animated.attr( "class" ) || "",
+-			applyClassChange,
+-			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+-
+-		// map the animated objects to store the original styles.
+-		allAnimations = allAnimations.map(function() {
+-			var el = $( this );
+-			return {
+-				el: el,
+-				start: getElementStyles( this )
+-			};
+-		});
+-
+-		// apply class change
+-		applyClassChange = function() {
+-			$.each( classAnimationActions, function(i, action) {
+-				if ( value[ action ] ) {
+-					animated[ action + "Class" ]( value[ action ] );
+-				}
+-			});
+-		};
+-		applyClassChange();
+-
+-		// map all animated objects again - calculate new styles and diff
+-		allAnimations = allAnimations.map(function() {
+-			this.end = getElementStyles( this.el[ 0 ] );
+-			this.diff = styleDifference( this.start, this.end );
+-			return this;
+-		});
+-
+-		// apply original class
+-		animated.attr( "class", baseClass );
+-
+-		// map all animated objects again - this time collecting a promise
+-		allAnimations = allAnimations.map(function() {
+-			var styleInfo = this,
+-				dfd = $.Deferred(),
+-				opts = $.extend({}, o, {
+-					queue: false,
+-					complete: function() {
+-						dfd.resolve( styleInfo );
+-					}
+-				});
+-
+-			this.el.animate( this.diff, opts );
+-			return dfd.promise();
+-		});
+-
+-		// once all animations have completed:
+-		$.when.apply( $, allAnimations.get() ).done(function() {
+-
+-			// set the final class
+-			applyClassChange();
+-
+-			// for each animated element,
+-			// clear all css properties that were animated
+-			$.each( arguments, function() {
+-				var el = this.el;
+-				$.each( this.diff, function(key) {
+-					el.css( key, "" );
+-				});
+-			});
+-
+-			// this is guarnteed to be there if you use jQuery.speed()
+-			// it also handles dequeuing the next anim...
+-			o.complete.call( animated[ 0 ] );
+-		});
+-	});
+-};
+-
+-$.fn.extend({
+-	addClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return speed ?
+-				$.effects.animateClass.call( this,
+-					{ add: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.addClass ),
+-
+-	removeClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return arguments.length > 1 ?
+-				$.effects.animateClass.call( this,
+-					{ remove: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.removeClass ),
+-
+-	toggleClass: (function( orig ) {
+-		return function( classNames, force, speed, easing, callback ) {
+-			if ( typeof force === "boolean" || force === undefined ) {
+-				if ( !speed ) {
+-					// without speed parameter
+-					return orig.apply( this, arguments );
+-				} else {
+-					return $.effects.animateClass.call( this,
+-						(force ? { add: classNames } : { remove: classNames }),
+-						speed, easing, callback );
+-				}
+-			} else {
+-				// without force parameter
+-				return $.effects.animateClass.call( this,
+-					{ toggle: classNames }, force, speed, easing );
+-			}
+-		};
+-	})( $.fn.toggleClass ),
+-
+-	switchClass: function( remove, add, speed, easing, callback) {
+-		return $.effects.animateClass.call( this, {
+-			add: add,
+-			remove: remove
+-		}, speed, easing, callback );
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EFFECTS **********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-$.extend( $.effects, {
+-	version: "1.10.3",
+-
+-	// Saves a set of properties in a data storage
+-	save: function( element, set ) {
+-		for( var i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+-			}
+-		}
+-	},
+-
+-	// Restores a set of previously saved properties from a data storage
+-	restore: function( element, set ) {
+-		var val, i;
+-		for( i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				val = element.data( dataSpace + set[ i ] );
+-				// support: jQuery 1.6.2
+-				// http://bugs.jquery.com/ticket/9917
+-				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+-				// We can't differentiate between "" and 0 here, so we just assume
+-				// empty string since it's likely to be a more common value...
+-				if ( val === undefined ) {
+-					val = "";
+-				}
+-				element.css( set[ i ], val );
+-			}
+-		}
+-	},
+-
+-	setMode: function( el, mode ) {
+-		if (mode === "toggle") {
+-			mode = el.is( ":hidden" ) ? "show" : "hide";
+-		}
+-		return mode;
+-	},
+-
+-	// Translates a [top,left] array into a baseline value
+-	// this should be a little more flexible in the future to handle a string & hash
+-	getBaseline: function( origin, original ) {
+-		var y, x;
+-		switch ( origin[ 0 ] ) {
+-			case "top": y = 0; break;
+-			case "middle": y = 0.5; break;
+-			case "bottom": y = 1; break;
+-			default: y = origin[ 0 ] / original.height;
+-		}
+-		switch ( origin[ 1 ] ) {
+-			case "left": x = 0; break;
+-			case "center": x = 0.5; break;
+-			case "right": x = 1; break;
+-			default: x = origin[ 1 ] / original.width;
+-		}
+-		return {
+-			x: x,
+-			y: y
+-		};
+-	},
+-
+-	// Wraps the element around a wrapper that copies position properties
+-	createWrapper: function( element ) {
+-
+-		// if the element is already wrapped, return it
+-		if ( element.parent().is( ".ui-effects-wrapper" )) {
+-			return element.parent();
+-		}
+-
+-		// wrap the element
+-		var props = {
+-				width: element.outerWidth(true),
+-				height: element.outerHeight(true),
+-				"float": element.css( "float" )
+-			},
+-			wrapper = $( "<div></div>" )
+-				.addClass( "ui-effects-wrapper" )
+-				.css({
+-					fontSize: "100%",
+-					background: "transparent",
+-					border: "none",
+-					margin: 0,
+-					padding: 0
+-				}),
+-			// Store the size in case width/height are defined in % - Fixes #5245
+-			size = {
+-				width: element.width(),
+-				height: element.height()
+-			},
+-			active = document.activeElement;
+-
+-		// support: Firefox
+-		// Firefox incorrectly exposes anonymous content
+-		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+-		try {
+-			active.id;
+-		} catch( e ) {
+-			active = document.body;
+-		}
+-
+-		element.wrap( wrapper );
+-
+-		// Fixes #7595 - Elements lose focus when wrapped.
+-		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-			$( active ).focus();
+-		}
+-
+-		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+-
+-		// transfer positioning properties to the wrapper
+-		if ( element.css( "position" ) === "static" ) {
+-			wrapper.css({ position: "relative" });
+-			element.css({ position: "relative" });
+-		} else {
+-			$.extend( props, {
+-				position: element.css( "position" ),
+-				zIndex: element.css( "z-index" )
+-			});
+-			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+-				props[ pos ] = element.css( pos );
+-				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+-					props[ pos ] = "auto";
+-				}
+-			});
+-			element.css({
+-				position: "relative",
+-				top: 0,
+-				left: 0,
+-				right: "auto",
+-				bottom: "auto"
+-			});
+-		}
+-		element.css(size);
+-
+-		return wrapper.css( props ).show();
+-	},
+-
+-	removeWrapper: function( element ) {
+-		var active = document.activeElement;
+-
+-		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+-			element.parent().replaceWith( element );
+-
+-			// Fixes #7595 - Elements lose focus when wrapped.
+-			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-				$( active ).focus();
+-			}
+-		}
+-
+-
+-		return element;
+-	},
+-
+-	setTransition: function( element, list, factor, value ) {
+-		value = value || {};
+-		$.each( list, function( i, x ) {
+-			var unit = element.cssUnit( x );
+-			if ( unit[ 0 ] > 0 ) {
+-				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+-			}
+-		});
+-		return value;
+-	}
+-});
+-
+-// return an effect options object for the given parameters:
+-function _normalizeArguments( effect, options, speed, callback ) {
+-
+-	// allow passing all options as the first parameter
+-	if ( $.isPlainObject( effect ) ) {
+-		options = effect;
+-		effect = effect.effect;
+-	}
+-
+-	// convert to an object
+-	effect = { effect: effect };
+-
+-	// catch (effect, null, ...)
+-	if ( options == null ) {
+-		options = {};
+-	}
+-
+-	// catch (effect, callback)
+-	if ( $.isFunction( options ) ) {
+-		callback = options;
+-		speed = null;
+-		options = {};
+-	}
+-
+-	// catch (effect, speed, ?)
+-	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+-		callback = speed;
+-		speed = options;
+-		options = {};
+-	}
+-
+-	// catch (effect, options, callback)
+-	if ( $.isFunction( speed ) ) {
+-		callback = speed;
+-		speed = null;
+-	}
+-
+-	// add options to effect
+-	if ( options ) {
+-		$.extend( effect, options );
+-	}
+-
+-	speed = speed || options.duration;
+-	effect.duration = $.fx.off ? 0 :
+-		typeof speed === "number" ? speed :
+-		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+-		$.fx.speeds._default;
+-
+-	effect.complete = callback || options.complete;
+-
+-	return effect;
+-}
+-
+-function standardAnimationOption( option ) {
+-	// Valid standard speeds (nothing, number, named speed)
+-	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+-		return true;
+-	}
+-
+-	// Invalid strings - treat as "normal" speed
+-	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+-		return true;
+-	}
+-
+-	// Complete callback
+-	if ( $.isFunction( option ) ) {
+-		return true;
+-	}
+-
+-	// Options hash (but not naming an effect)
+-	if ( typeof option === "object" && !option.effect ) {
+-		return true;
+-	}
+-
+-	// Didn't match any standard API
+-	return false;
+-}
+-
+-$.fn.extend({
+-	effect: function( /* effect, options, speed, callback */ ) {
+-		var args = _normalizeArguments.apply( this, arguments ),
+-			mode = args.mode,
+-			queue = args.queue,
+-			effectMethod = $.effects.effect[ args.effect ];
+-
+-		if ( $.fx.off || !effectMethod ) {
+-			// delegate to the original method (e.g., .show()) if possible
+-			if ( mode ) {
+-				return this[ mode ]( args.duration, args.complete );
+-			} else {
+-				return this.each( function() {
+-					if ( args.complete ) {
+-						args.complete.call( this );
+-					}
+-				});
+-			}
+-		}
+-
+-		function run( next ) {
+-			var elem = $( this ),
+-				complete = args.complete,
+-				mode = args.mode;
+-
+-			function done() {
+-				if ( $.isFunction( complete ) ) {
+-					complete.call( elem[0] );
+-				}
+-				if ( $.isFunction( next ) ) {
+-					next();
+-				}
+-			}
+-
+-			// If the element already has the correct final state, delegate to
+-			// the core methods so the internal tracking of "olddisplay" works.
+-			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+-				elem[ mode ]();
+-				done();
+-			} else {
+-				effectMethod.call( elem[0], args, done );
+-			}
+-		}
+-
+-		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+-	},
+-
+-	show: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "show";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.show ),
+-
+-	hide: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "hide";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.hide ),
+-
+-	toggle: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "toggle";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.toggle ),
+-
+-	// helper functions
+-	cssUnit: function(key) {
+-		var style = this.css( key ),
+-			val = [];
+-
+-		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+-			if ( style.indexOf( unit ) > 0 ) {
+-				val = [ parseFloat( style ), unit ];
+-			}
+-		});
+-		return val;
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EASING ***********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+-
+-var baseEasings = {};
+-
+-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+-	baseEasings[ name ] = function( p ) {
+-		return Math.pow( p, i + 2 );
+-	};
+-});
+-
+-$.extend( baseEasings, {
+-	Sine: function ( p ) {
+-		return 1 - Math.cos( p * Math.PI / 2 );
+-	},
+-	Circ: function ( p ) {
+-		return 1 - Math.sqrt( 1 - p * p );
+-	},
+-	Elastic: function( p ) {
+-		return p === 0 || p === 1 ? p :
+-			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+-	},
+-	Back: function( p ) {
+-		return p * p * ( 3 * p - 2 );
+-	},
+-	Bounce: function ( p ) {
+-		var pow2,
+-			bounce = 4;
+-
+-		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+-		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+-	}
+-});
+-
+-$.each( baseEasings, function( name, easeIn ) {
+-	$.easing[ "easeIn" + name ] = easeIn;
+-	$.easing[ "easeOut" + name ] = function( p ) {
+-		return 1 - easeIn( 1 - p );
+-	};
+-	$.easing[ "easeInOut" + name ] = function( p ) {
+-		return p < 0.5 ?
+-			easeIn( p * 2 ) / 2 :
+-			1 - easeIn( p * -2 + 2 ) / 2;
+-	};
+-});
+-
+-})();
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-drop.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-drop.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-drop.js	(revision 15488)
+@@ -1,65 +0,0 @@
+-/*!
+- * jQuery UI Effects Drop 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/drop-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.drop = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+-		animation = {
+-			opacity: show ? 1 : 0
+-		},
+-		distance;
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+-
+-	if ( show ) {
+-		el
+-			.css( "opacity", 0 )
+-			.css( ref, motion === "pos" ? -distance : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( motion === "pos" ? "+=" : "-=" ) :
+-		( motion === "pos" ? "-=" : "+=" ) ) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.position.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.position.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.position.js	(revision 15488)
+@@ -1,497 +0,0 @@
+-/*!
+- * jQuery UI Position 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/position/
+- */
+-(function( $, undefined ) {
+-
+-$.ui = $.ui || {};
+-
+-var cachedScrollbarWidth,
+-	max = Math.max,
+-	abs = Math.abs,
+-	round = Math.round,
+-	rhorizontal = /left|center|right/,
+-	rvertical = /top|center|bottom/,
+-	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+-	rposition = /^\w+/,
+-	rpercent = /%$/,
+-	_position = $.fn.position;
+-
+-function getOffsets( offsets, width, height ) {
+-	return [
+-		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+-		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+-	];
+-}
+-
+-function parseCss( element, property ) {
+-	return parseInt( $.css( element, property ), 10 ) || 0;
+-}
+-
+-function getDimensions( elem ) {
+-	var raw = elem[0];
+-	if ( raw.nodeType === 9 ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: 0, left: 0 }
+-		};
+-	}
+-	if ( $.isWindow( raw ) ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+-		};
+-	}
+-	if ( raw.preventDefault ) {
+-		return {
+-			width: 0,
+-			height: 0,
+-			offset: { top: raw.pageY, left: raw.pageX }
+-		};
+-	}
+-	return {
+-		width: elem.outerWidth(),
+-		height: elem.outerHeight(),
+-		offset: elem.offset()
+-	};
+-}
+-
+-$.position = {
+-	scrollbarWidth: function() {
+-		if ( cachedScrollbarWidth !== undefined ) {
+-			return cachedScrollbarWidth;
+-		}
+-		var w1, w2,
+-			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+-			innerDiv = div.children()[0];
+-
+-		$( "body" ).append( div );
+-		w1 = innerDiv.offsetWidth;
+-		div.css( "overflow", "scroll" );
+-
+-		w2 = innerDiv.offsetWidth;
+-
+-		if ( w1 === w2 ) {
+-			w2 = div[0].clientWidth;
+-		}
+-
+-		div.remove();
+-
+-		return (cachedScrollbarWidth = w1 - w2);
+-	},
+-	getScrollInfo: function( within ) {
+-		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
+-			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+-			hasOverflowX = overflowX === "scroll" ||
+-				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+-			hasOverflowY = overflowY === "scroll" ||
+-				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+-		return {
+-			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+-			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+-		};
+-	},
+-	getWithinInfo: function( element ) {
+-		var withinElement = $( element || window ),
+-			isWindow = $.isWindow( withinElement[0] );
+-		return {
+-			element: withinElement,
+-			isWindow: isWindow,
+-			offset: withinElement.offset() || { left: 0, top: 0 },
+-			scrollLeft: withinElement.scrollLeft(),
+-			scrollTop: withinElement.scrollTop(),
+-			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+-			height: isWindow ? withinElement.height() : withinElement.outerHeight()
+-		};
+-	}
+-};
+-
+-$.fn.position = function( options ) {
+-	if ( !options || !options.of ) {
+-		return _position.apply( this, arguments );
+-	}
+-
+-	// make a copy, we don't want to modify arguments
+-	options = $.extend( {}, options );
+-
+-	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+-		target = $( options.of ),
+-		within = $.position.getWithinInfo( options.within ),
+-		scrollInfo = $.position.getScrollInfo( within ),
+-		collision = ( options.collision || "flip" ).split( " " ),
+-		offsets = {};
+-
+-	dimensions = getDimensions( target );
+-	if ( target[0].preventDefault ) {
+-		// force left top to allow flipping
+-		options.at = "left top";
+-	}
+-	targetWidth = dimensions.width;
+-	targetHeight = dimensions.height;
+-	targetOffset = dimensions.offset;
+-	// clone to reuse original targetOffset later
+-	basePosition = $.extend( {}, targetOffset );
+-
+-	// force my and at to have valid horizontal and vertical positions
+-	// if a value is missing or invalid, it will be converted to center
+-	$.each( [ "my", "at" ], function() {
+-		var pos = ( options[ this ] || "" ).split( " " ),
+-			horizontalOffset,
+-			verticalOffset;
+-
+-		if ( pos.length === 1) {
+-			pos = rhorizontal.test( pos[ 0 ] ) ?
+-				pos.concat( [ "center" ] ) :
+-				rvertical.test( pos[ 0 ] ) ?
+-					[ "center" ].concat( pos ) :
+-					[ "center", "center" ];
+-		}
+-		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+-		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+-
+-		// calculate offsets
+-		horizontalOffset = roffset.exec( pos[ 0 ] );
+-		verticalOffset = roffset.exec( pos[ 1 ] );
+-		offsets[ this ] = [
+-			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+-			verticalOffset ? verticalOffset[ 0 ] : 0
+-		];
+-
+-		// reduce to just the positions without the offsets
+-		options[ this ] = [
+-			rposition.exec( pos[ 0 ] )[ 0 ],
+-			rposition.exec( pos[ 1 ] )[ 0 ]
+-		];
+-	});
+-
+-	// normalize collision option
+-	if ( collision.length === 1 ) {
+-		collision[ 1 ] = collision[ 0 ];
+-	}
+-
+-	if ( options.at[ 0 ] === "right" ) {
+-		basePosition.left += targetWidth;
+-	} else if ( options.at[ 0 ] === "center" ) {
+-		basePosition.left += targetWidth / 2;
+-	}
+-
+-	if ( options.at[ 1 ] === "bottom" ) {
+-		basePosition.top += targetHeight;
+-	} else if ( options.at[ 1 ] === "center" ) {
+-		basePosition.top += targetHeight / 2;
+-	}
+-
+-	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+-	basePosition.left += atOffset[ 0 ];
+-	basePosition.top += atOffset[ 1 ];
+-
+-	return this.each(function() {
+-		var collisionPosition, using,
+-			elem = $( this ),
+-			elemWidth = elem.outerWidth(),
+-			elemHeight = elem.outerHeight(),
+-			marginLeft = parseCss( this, "marginLeft" ),
+-			marginTop = parseCss( this, "marginTop" ),
+-			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+-			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+-			position = $.extend( {}, basePosition ),
+-			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+-
+-		if ( options.my[ 0 ] === "right" ) {
+-			position.left -= elemWidth;
+-		} else if ( options.my[ 0 ] === "center" ) {
+-			position.left -= elemWidth / 2;
+-		}
+-
+-		if ( options.my[ 1 ] === "bottom" ) {
+-			position.top -= elemHeight;
+-		} else if ( options.my[ 1 ] === "center" ) {
+-			position.top -= elemHeight / 2;
+-		}
+-
+-		position.left += myOffset[ 0 ];
+-		position.top += myOffset[ 1 ];
+-
+-		// if the browser doesn't support fractions, then round for consistent results
+-		if ( !$.support.offsetFractions ) {
+-			position.left = round( position.left );
+-			position.top = round( position.top );
+-		}
+-
+-		collisionPosition = {
+-			marginLeft: marginLeft,
+-			marginTop: marginTop
+-		};
+-
+-		$.each( [ "left", "top" ], function( i, dir ) {
+-			if ( $.ui.position[ collision[ i ] ] ) {
+-				$.ui.position[ collision[ i ] ][ dir ]( position, {
+-					targetWidth: targetWidth,
+-					targetHeight: targetHeight,
+-					elemWidth: elemWidth,
+-					elemHeight: elemHeight,
+-					collisionPosition: collisionPosition,
+-					collisionWidth: collisionWidth,
+-					collisionHeight: collisionHeight,
+-					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+-					my: options.my,
+-					at: options.at,
+-					within: within,
+-					elem : elem
+-				});
+-			}
+-		});
+-
+-		if ( options.using ) {
+-			// adds feedback as second argument to using callback, if present
+-			using = function( props ) {
+-				var left = targetOffset.left - position.left,
+-					right = left + targetWidth - elemWidth,
+-					top = targetOffset.top - position.top,
+-					bottom = top + targetHeight - elemHeight,
+-					feedback = {
+-						target: {
+-							element: target,
+-							left: targetOffset.left,
+-							top: targetOffset.top,
+-							width: targetWidth,
+-							height: targetHeight
+-						},
+-						element: {
+-							element: elem,
+-							left: position.left,
+-							top: position.top,
+-							width: elemWidth,
+-							height: elemHeight
+-						},
+-						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+-						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+-					};
+-				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+-					feedback.horizontal = "center";
+-				}
+-				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+-					feedback.vertical = "middle";
+-				}
+-				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+-					feedback.important = "horizontal";
+-				} else {
+-					feedback.important = "vertical";
+-				}
+-				options.using.call( this, props, feedback );
+-			};
+-		}
+-
+-		elem.offset( $.extend( position, { using: using } ) );
+-	});
+-};
+-
+-$.ui.position = {
+-	fit: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+-				outerWidth = within.width,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = withinOffset - collisionPosLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+-				newOverRight;
+-
+-			// element is wider than within
+-			if ( data.collisionWidth > outerWidth ) {
+-				// element is initially over the left side of within
+-				if ( overLeft > 0 && overRight <= 0 ) {
+-					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+-					position.left += overLeft - newOverRight;
+-				// element is initially over right side of within
+-				} else if ( overRight > 0 && overLeft <= 0 ) {
+-					position.left = withinOffset;
+-				// element is initially over both left and right sides of within
+-				} else {
+-					if ( overLeft > overRight ) {
+-						position.left = withinOffset + outerWidth - data.collisionWidth;
+-					} else {
+-						position.left = withinOffset;
+-					}
+-				}
+-			// too far left -> align with left edge
+-			} else if ( overLeft > 0 ) {
+-				position.left += overLeft;
+-			// too far right -> align with right edge
+-			} else if ( overRight > 0 ) {
+-				position.left -= overRight;
+-			// adjust based on position and margin
+-			} else {
+-				position.left = max( position.left - collisionPosLeft, position.left );
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+-				outerHeight = data.within.height,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = withinOffset - collisionPosTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+-				newOverBottom;
+-
+-			// element is taller than within
+-			if ( data.collisionHeight > outerHeight ) {
+-				// element is initially over the top of within
+-				if ( overTop > 0 && overBottom <= 0 ) {
+-					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+-					position.top += overTop - newOverBottom;
+-				// element is initially over bottom of within
+-				} else if ( overBottom > 0 && overTop <= 0 ) {
+-					position.top = withinOffset;
+-				// element is initially over both top and bottom of within
+-				} else {
+-					if ( overTop > overBottom ) {
+-						position.top = withinOffset + outerHeight - data.collisionHeight;
+-					} else {
+-						position.top = withinOffset;
+-					}
+-				}
+-			// too far up -> align with top
+-			} else if ( overTop > 0 ) {
+-				position.top += overTop;
+-			// too far down -> align with bottom edge
+-			} else if ( overBottom > 0 ) {
+-				position.top -= overBottom;
+-			// adjust based on position and margin
+-			} else {
+-				position.top = max( position.top - collisionPosTop, position.top );
+-			}
+-		}
+-	},
+-	flip: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.left + within.scrollLeft,
+-				outerWidth = within.width,
+-				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = collisionPosLeft - offsetLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+-				myOffset = data.my[ 0 ] === "left" ?
+-					-data.elemWidth :
+-					data.my[ 0 ] === "right" ?
+-						data.elemWidth :
+-						0,
+-				atOffset = data.at[ 0 ] === "left" ?
+-					data.targetWidth :
+-					data.at[ 0 ] === "right" ?
+-						-data.targetWidth :
+-						0,
+-				offset = -2 * data.offset[ 0 ],
+-				newOverRight,
+-				newOverLeft;
+-
+-			if ( overLeft < 0 ) {
+-				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+-				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overRight > 0 ) {
+-				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+-				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.top + within.scrollTop,
+-				outerHeight = within.height,
+-				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = collisionPosTop - offsetTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+-				top = data.my[ 1 ] === "top",
+-				myOffset = top ?
+-					-data.elemHeight :
+-					data.my[ 1 ] === "bottom" ?
+-						data.elemHeight :
+-						0,
+-				atOffset = data.at[ 1 ] === "top" ?
+-					data.targetHeight :
+-					data.at[ 1 ] === "bottom" ?
+-						-data.targetHeight :
+-						0,
+-				offset = -2 * data.offset[ 1 ],
+-				newOverTop,
+-				newOverBottom;
+-			if ( overTop < 0 ) {
+-				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+-				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overBottom > 0 ) {
+-				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+-				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-		}
+-	},
+-	flipfit: {
+-		left: function() {
+-			$.ui.position.flip.left.apply( this, arguments );
+-			$.ui.position.fit.left.apply( this, arguments );
+-		},
+-		top: function() {
+-			$.ui.position.flip.top.apply( this, arguments );
+-			$.ui.position.fit.top.apply( this, arguments );
+-		}
+-	}
+-};
+-
+-// fraction support test
+-(function () {
+-	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+-		body = document.getElementsByTagName( "body" )[ 0 ],
+-		div = document.createElement( "div" );
+-
+-	//Create a "fake body" for testing based on method used in jQuery.support
+-	testElement = document.createElement( body ? "div" : "body" );
+-	testElementStyle = {
+-		visibility: "hidden",
+-		width: 0,
+-		height: 0,
+-		border: 0,
+-		margin: 0,
+-		background: "none"
+-	};
+-	if ( body ) {
+-		$.extend( testElementStyle, {
+-			position: "absolute",
+-			left: "-1000px",
+-			top: "-1000px"
+-		});
+-	}
+-	for ( i in testElementStyle ) {
+-		testElement.style[ i ] = testElementStyle[ i ];
+-	}
+-	testElement.appendChild( div );
+-	testElementParent = body || document.documentElement;
+-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+-
+-	div.style.cssText = "position: absolute; left: 10.7432222px;";
+-
+-	offsetLeft = $( div ).offset().left;
+-	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+-
+-	testElement.innerHTML = "";
+-	testElementParent.removeChild( testElement );
+-})();
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/package.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/package.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/package.json	(revision 15488)
+@@ -1,45 +0,0 @@
+-{
+-  "name": "jquery.sidebar",
+-  "title": "jQuery SideBar",
+-  "description": "A jQuery plugin that displays sidebar menu.",
+-  "version": "1.0.2",
+-  "homepage": "https://github.com/sideroad/jquery.sidebar",
+-  "author": {
+-    "name": "sideroad",
+-    "url": "http://sideroad.secret.jp/"
+-  },
+-  "maintainers": [
+-    {
+-      "name": "sideroad",
+-      "email": "sideroad.jp@gmail.com",
+-      "url": "http://sideroad.secret.jp/"
+-    }
+-  ],
+-  "repository": {
+-    "type": "git",
+-    "url": "git://github.com/sideroad/jquery.sidebar.git"
+-  },
+-  "bugs": "https://github.com/sideroad/jquery.sidebar/issues",
+-  "licenses": [
+-    {
+-      "type": "MIT",
+-      "url": "http://www.opensource.org/licenses/MIT"
+-    },
+-    {
+-      "type": "GPL",
+-      "url": "http://www.opensource.org/licenses/GPL-2.0"
+-    }
+-  ],
+-  "devDependencies": {
+-    "grunt-qunit-cov": "~0.3.2",
+-    "grunt-testem": "~0.3.2",
+-    "grunt-yui-compressor": "~0.2.2",
+-    "grunt-contrib-concat": "~0.1.3",
+-    "grunt-devtools": "~0.1.0",
+-    "grunt": "~0.4.1"
+-  },
+-  "keywords": [
+-    "sidebar",
+-    "menu"
+-  ]
+-}
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.js	(revision 15488)
+@@ -1,226 +0,0 @@
+-/*!
+- * jquery.sidebar v1.0.2
+- * http://sideroad.secret.jp/
+- *
+- * Copyright (c) 2009 sideroad
+- *
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * Date: 2009-09-01
+- */
+-(function( $, _window ) {
+-    $.fn.sidebar = function(options){
+-
+-        return this.each(function(){
+-            var elem = $(this),
+-                data = elem.data("sidebar")||{},
+-                margin,
+-                width,
+-                height,
+-                duration = data.duration,
+-                injectWidth,
+-                injectHeight,
+-                injectCss,
+-                containerCss,
+-                bodyCss,
+-                position,
+-                enter,
+-                leave,
+-                opened,
+-                closed,
+-                isInnerElement,
+-                container = $("<div><div/>"),
+-                inject = $("<div><div/>"),
+-                body = $("<div><div/>"),
+-                root,
+-                parent,
+-                open = function(){
+-                    var data = elem.data("sidebar") || {},
+-                        opened = data.callback.sidebar.open,
+-                        container = data.container,
+-                        inject = data.inject,
+-                        body = data.body;
+-                    
+-                    if (data.isEnter || data.isProcessing) {
+-                        return;
+-                    }
+-                    data.isEnter = true;
+-                    data.isProcessing = true;
+-                    container.animate(data.animate.container.enter, {
+-                        duration: duration,
+-                        complete: function(){
+-                            inject.fadeOut(duration, function(){
+-                                body.show("clip", duration,function(){
+-                                    data.isProcessing = false;
+-                                    if(opened) {
+-                                        opened();
+-                                    }
+-                                });
+-                            });
+-                        }
+-                    });
+-                },
+-                close = function(){
+-                    var data = elem.data("sidebar") || {},
+-                        closed = data.callback.sidebar.close,
+-                        container = data.container,
+-                        inject = data.inject,
+-                        body = data.body;
+-                       
+-                    if(!data.isEnter || data.isProcessing ) {
+-                        return;
+-                    }
+-                    data.isProcessing = true;
+-                    container.animate(data.animate.container.leave, {
+-                        duration: duration,
+-                        complete: function(){
+-                            body.hide("clip", duration, function(){
+-                                inject.fadeIn(duration, function(){
+-                                    data.isEnter = false;
+-                                    data.isProcessing = false;
+-                                    if(closed) {
+-                                        closed();
+-                                    }
+-                                });
+-                            });
+-                        }
+-                    });
+-                };
+-            
+-            
+-            if(typeof options === "string"){
+-                switch(options){
+-                    case "open" :
+-                        open();
+-                        break;
+-                    case "close" : 
+-                        close();
+-                        break;
+-                }
+-                return;
+-            }
+-                
+-            //default setting
+-            options = $.extend(true, {
+-                root : $(document.body),
+-                position : "left",
+-                callback: {
+-                    item : {
+-                        enter : function(){
+-                            $(this).animate({marginLeft:"5px"},250);
+-                        },
+-                        leave : function(){
+-                            $(this).animate({marginLeft:"0px"},250);
+-                        }
+-                    },
+-                    sidebar : {
+-                        open : function(){
+-                            
+-                        },
+-                        close : function(){
+-                            
+-                        }
+-                    }
+-                },
+-                animate : {
+-                    container : {
+-                        enter : {},
+-                        leave : {}
+-                    }
+-                },
+-                duration : 200,
+-                open : "mouseenter.sidebar",
+-                close : "mouseleave.sidebar"
+-            }, options);
+-            
+-            root = options.root;
+-            isInnerElement = !root.is(document.body);
+-            parent = ( isInnerElement ) ? root.addClass("sidebar-root") : $(_window);
+-            
+-            position = options.position;
+-            duration = options.duration;
+-            
+-            container.attr("id", "jquerySideBar" + new Date().getTime()).addClass("sidebar-container").addClass(position);
+-            inject.addClass("sidebar-inject").addClass(position);
+-            body.addClass("sidebar-body");
+-            
+-            //append to body
+-            body.append(this);
+-            container.append(body);
+-            container.append(inject);
+-            root.append(container);
+-            
+-            width = container.width();
+-            height = container.height();
+-            injectWidth = inject.width();
+-            injectHeight = inject.height();
+-            
+-            containerCss = {
+-                height: height,
+-                width: width
+-            };
+-            bodyCss = {
+-                height: height,
+-                width: width
+-            };
+-            
+-            if(position === "left" || position === "right") {
+-                margin = width - injectWidth;
+-                injectCss = {
+-                    height : height,
+-                    width : injectWidth
+-                };
+-                containerCss.top = options.top || (parent.height()/2) - (height/2) + "px";
+-                
+-            } else {
+-                margin = height - injectHeight;
+-                injectCss = {
+-                    height : injectHeight,
+-                    width : width
+-                };
+-                containerCss.left = options.left || (parent.width()/2) - (width/2) + "px";
+-            }
+-            
+-            containerCss[position] = "-" + margin + "px";
+-            injectCss[position] = margin + "px";
+-            options.animate.container.enter[position] = 0;
+-            options.animate.container.leave[position] = "-" + margin;
+-            
+-            //container
+-            container.css(containerCss);
+-            
+-            //inject
+-            inject.css(injectCss);
+-            
+-            //body
+-            body.css(bodyCss).hide();
+-            
+-            //menu callback
+-            $(this).addClass("sidebar-menu").find("li")
+-                .bind("mouseenter.sidebar",options.callback.item.enter)
+-                .bind("mouseleave.sidebar",options.callback.item.leave);
+-            
+-            //container events
+-            if(options.open) {
+-                container.bind(options.open,open);
+-            }
+-            if(options.close) {
+-                container.bind(options.close,close);
+-            }
+-            
+-            //store data
+-            options.container = container;
+-            options.inject = inject;
+-            options.body = body;
+-            elem.data("sidebar", options);
+-            
+-            parent.resize(function(){
+-                if(position === "left" || position === "right") {
+-                    container.css({top:($(this).height()/2) - (height/2) + "px"});
+-                } else {
+-                    container.css({left:($(this).width()/2) - (width/2) + "px"});
+-                }
+-            });
+-            
+-        });
+-    };
+-}(jQuery, this));
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.min.js	(revision 15488)
+@@ -1,10 +0,0 @@
+-/*!
+- * jquery.sidebar v1.0.2
+- * http://sideroad.secret.jp/
+- *
+- * Copyright (c) 2009 sideroad
+- *
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * Date: 2009-09-01
+- */
+-(function(a,b){a.fn.sidebar=function(c){return this.each(function(){var x=a(this),A=x.data("sidebar")||{},p,u,q,d=A.duration,j,s,e,i,g,z,w,h,y,f,r,m=a("<div><div/>"),t=a("<div><div/>"),l=a("<div><div/>"),v,k,n=function(){var E=x.data("sidebar")||{},F=E.callback.sidebar.open,C=E.container,D=E.inject,B=E.body;if(E.isEnter||E.isProcessing){return}E.isEnter=true;E.isProcessing=true;C.animate(E.animate.container.enter,{duration:d,complete:function(){D.fadeOut(d,function(){B.show("clip",d,function(){E.isProcessing=false;if(F){F()}})})}})},o=function(){var F=x.data("sidebar")||{},D=F.callback.sidebar.close,C=F.container,E=F.inject,B=F.body;if(!F.isEnter||F.isProcessing){return}F.isProcessing=true;C.animate(F.animate.container.leave,{duration:d,complete:function(){B.hide("clip",d,function(){E.fadeIn(d,function(){F.isEnter=false;F.isProcessing=false;if(D){D()}})})}})};if(typeof c==="string"){switch(c){case"open":n();break;case"close":o();break}return}c=a.extend(true,{root:a(document.body),position:"left",callback:{item:{enter:function(){a(this).animate({marginLeft:"5px"},250)},leave:function(){a(this).animate({marginLeft:"0px"},250)}},sidebar:{open:function(){},close:function(){}}},animate:{container:{enter:{},leave:{}}},duration:200,open:"mouseenter.sidebar",close:"mouseleave.sidebar"},c);v=c.root;r=!v.is(document.body);k=(r)?v.addClass("sidebar-root"):a(b);z=c.position;d=c.duration;m.attr("id","jquerySideBar"+new Date().getTime()).addClass("sidebar-container").addClass(z);t.addClass("sidebar-inject").addClass(z);l.addClass("sidebar-body");l.append(this);m.append(l);m.append(t);v.append(m);u=m.width();q=m.height();j=t.width();s=t.height();i={height:q,width:u};g={height:q,width:u};if(z==="left"||z==="right"){p=u-j;e={height:q,width:j};i.top=c.top||(k.height()/2)-(q/2)+"px"}else{p=q-s;e={height:s,width:u};i.left=c.left||(k.width()/2)-(u/2)+"px"}i[z]="-"+p+"px";e[z]=p+"px";c.animate.container.enter[z]=0;c.animate.container.leave[z]="-"+p;m.css(i);t.css(e);l.css(g).hide();a(this).addClass("sidebar-menu").find("li").bind("mouseenter.sidebar",c.callback.item.enter).bind("mouseleave.sidebar",c.callback.item.leave);if(c.open){m.bind(c.open,n)}if(c.close){m.bind(c.close,o)}c.container=m;c.inject=t;c.body=l;x.data("sidebar",c);k.resize(function(){if(z==="left"||z==="right"){m.css({top:(a(this).height()/2)-(q/2)+"px"})}else{m.css({left:(a(this).width()/2)-(u/2)+"px"})}})})}}(jQuery,this));
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/touch.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/touch.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/touch.html	(revision 15488)
+@@ -1,63 +0,0 @@
+-﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+-"http://www.w3.org/TR/html4/loose.dtd">
+-<html xmlns="http://www.w3.org/1999/xhtml">
+-    <head>
+-        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+-        <title>jquery.sidebar.js</title>
+-        <link rel="stylesheet" type="text/css" href="css/dark-glass/sidebar.css" />
+-        <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
+-        <script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
+-        <script type="text/javascript" src="src/jquery.sidebar.js"></script>
+-    </head>
+-    <body>
+-        <ul id="demo_menu1" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu2" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu3" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu4" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-
+-        <b style="font-size:80px;position:absolute;top:42%;left:35%;" >jquery.sidebar</b>
+-        <script type="text/javascript">
+-        var elem = $("ul#demo_menu1").sidebar({
+-            open : "touchstart",
+-            close : false
+-        }),
+-        data = elem.data("sidebar");
+-    
+-    
+-        $(document.body).bind("touchstart", function(e){
+-            var target = $(e.target),
+-                id = data.container.attr("id");
+-    
+-            if(!target.is("#"+id) && !target.parents("#"+id).length ){
+-                elem.sidebar("close");
+-            }
+-            
+-        });
+-        
+-        </script>
+-    </body>
+-</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/tests.tap
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/tests.tap	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/tests.tap	(revision 15488)
+@@ -1,12 +0,0 @@
+-TAP version 13
+-ok 1 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: default/left
+-ok 2 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: top
+-ok 3 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: right
+-ok 4 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: bottom
+-ok 5 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: open-event
+-ok 6 - test/jquery.sidebar.html - PhantomJS jquery.sidebar: call open/close method manually
+-
+-1..6
+-# tests 6
+-# pass 6
+-# fail 0
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.min.js	(revision 15488)
+@@ -1,18 +0,0 @@
+-/*!
+- * jQuery JavaScript Library v1.6.2
+- * http://jquery.com/
+- *
+- * Copyright 2011, John Resig
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * Includes Sizzle.js
+- * http://sizzlejs.com/
+- * Copyright 2011, The Dojo Foundation
+- * Released under the MIT, BSD, and GPL Licenses.
+- *
+- * Date: Thu Jun 30 14:16:56 2011 -0400
+- */
+-(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(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 bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(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===bR,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=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),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 bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(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 bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}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=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,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=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",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.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(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.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();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},isNaN:function(a){return a==null||!m.test(a)||isNaN(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;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,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){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=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=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(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="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.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:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function 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._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;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(o);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(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");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(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.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=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?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}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
+-shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){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=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={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,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
+-)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");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&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.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++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.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.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{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;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),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 bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.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(bL,"")).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||bM.test(this.nodeName)||bG.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(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),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&&(ca.test(b.url)||e&&ca.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(ca,l),b.url===j&&(e&&(k=k.replace(ca,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 cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,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,cb&&delete cd[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=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("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",cs(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(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],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?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):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,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?: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=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.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&&!cu.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=cv(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=cv(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")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.css	(revision 15488)
+@@ -1,568 +0,0 @@
+-/*
+- * jQuery UI CSS Framework 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden { display: none; }
+-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+-.ui-helper-clearfix { display: inline-block; }
+-/* required comment for clearfix to work in Opera \*/
+-* html .ui-helper-clearfix { height:1%; }
+-.ui-helper-clearfix { display:block; }
+-/* end clearfix */
+-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled { cursor: default !important; }
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+-
+-
+-/*
+- * jQuery UI CSS Framework 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- *
+- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Segoe%20UI,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=333333&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=25&borderColorHeader=333333&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=000000&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=25&borderColorContent=666666&fcContent=ffffff&iconColorContent=cccccc&bgColorDefault=555555&bgTextureDefault=02_glass.png&bgImgOpacityDefault=20&borderColorDefault=666666&fcDefault=eeeeee&iconColorDefault=cccccc&bgColorHover=0078a3&bgTextureHover=02_glass.png&bgImgOpacityHover=40&borderColorHover=59b4d4&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=f58400&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=30&borderColorActive=ffaf0f&fcActive=ffffff&iconColorActive=222222&bgColorHighlight=eeeeee&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=80&borderColorHighlight=cccccc&fcHighlight=2e7db2&iconColorHighlight=4b8e0b&bgColorError=ffc73d&bgTextureError=02_glass.png&bgImgOpacityError=40&borderColorError=ffb73d&fcError=111111&iconColorError=a83300&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
+- */
+-
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget { font-family: Segoe UI, Arial, sans-serif; font-size: 1.1em; }
+-.ui-widget .ui-widget { font-size: 1em; }
+-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Segoe UI, Arial, sans-serif; font-size: 1em; }
+-.ui-widget-content { border: 1px solid #666666; background: #000000 url(images/ui-bg_inset-soft_25_000000_1x100.png) 50% bottom repeat-x; color: #ffffff; }
+-.ui-widget-content a { color: #ffffff; }
+-.ui-widget-header { border: 1px solid #333333; background: #333333 url(images/ui-bg_gloss-wave_25_333333_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+-.ui-widget-header a { color: #ffffff; }
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #666666; background: #555555 url(images/ui-bg_glass_20_555555_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eeeeee; }
+-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #eeeeee; text-decoration: none; }
+-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #59b4d4; background: #0078a3 url(images/ui-bg_glass_40_0078a3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
+-.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; }
+-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #ffaf0f; background: #f58400 url(images/ui-bg_inset-soft_30_f58400_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
+-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
+-.ui-widget :active { outline: none; }
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #cccccc; background: #eeeeee url(images/ui-bg_highlight-soft_80_eeeeee_1x100.png) 50% top repeat-x; color: #2e7db2; }
+-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #2e7db2; }
+-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ffb73d; background: #ffc73d url(images/ui-bg_glass_40_ffc73d_1x400.png) 50% 50% repeat-x; color: #111111; }
+-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #111111; }
+-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #111111; }
+-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_cccccc_256x240.png); }
+-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_cccccc_256x240.png); }
+-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+-.ui-state-default .ui-icon { background-image: url(images/ui-icons_cccccc_256x240.png); }
+-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+-.ui-state-active .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_4b8e0b_256x240.png); }
+-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_a83300_256x240.png); }
+-
+-/* positioning */
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-off { background-position: -96px -144px; }
+-.ui-icon-radio-on { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; }
+-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; }
+-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
+-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
+-
+-/* Overlays */
+-.ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
+-.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
+- * jQuery UI Resizable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Resizable#theming
+- */
+-.ui-resizable { position: relative;}
+-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+- * jQuery UI Selectable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Selectable#theming
+- */
+-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+-/*
+- * jQuery UI Accordion 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Accordion#theming
+- */
+-/* IE/Win - Fix animation bug - #4615 */
+-.ui-accordion { width: 100%; }
+-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+-.ui-accordion .ui-accordion-li-fix { display: inline; }
+-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+-.ui-accordion .ui-accordion-content-active { display: block; }
+-/*
+- * jQuery UI Autocomplete 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Autocomplete#theming
+- */
+-.ui-autocomplete { position: absolute; cursor: default; }	
+-
+-/* workarounds */
+-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+-
+-/*
+- * jQuery UI Menu 1.8.15
+- *
+- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Menu#theming
+- */
+-.ui-menu {
+-	list-style:none;
+-	padding: 2px;
+-	margin: 0;
+-	display:block;
+-	float: left;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-}
+-.ui-menu .ui-menu-item {
+-	margin:0;
+-	padding: 0;
+-	zoom: 1;
+-	float: left;
+-	clear: left;
+-	width: 100%;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration:none;
+-	display:block;
+-	padding:.2em .4em;
+-	line-height:1.5;
+-	zoom:1;
+-}
+-.ui-menu .ui-menu-item a.ui-state-hover,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-/*
+- * jQuery UI Button 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Button#theming
+- */
+-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+-.ui-button-icons-only { width: 3.4em; } 
+-button.ui-button-icons-only { width: 3.7em; } 
+-
+-/*button text element */
+-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
+-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button { padding: .4em 1em; }
+-
+-/*button icon element(s) */
+-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+-
+-/*button sets*/
+-.ui-buttonset { margin-right: 7px; }
+-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+-
+-/* workarounds */
+-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+-/*
+- * jQuery UI Dialog 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Dialog#theming
+- */
+-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
+-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
+-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+-.ui-draggable .ui-dialog-titlebar { cursor: move; }
+-/*
+- * jQuery UI Slider 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Slider#theming
+- */
+-.ui-slider { position: relative; text-align: left; }
+-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+-
+-.ui-slider-horizontal { height: .8em; }
+-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+-
+-.ui-slider-vertical { width: .8em; height: 100px; }
+-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+- * jQuery UI Tabs 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Tabs#theming
+- */
+-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+-.ui-tabs .ui-tabs-hide { display: none !important; }
+-/*
+- * jQuery UI Datepicker 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Datepicker#theming
+- */
+-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+-.ui-datepicker .ui-datepicker-prev { left:2px; }
+-.ui-datepicker .ui-datepicker-next { right:2px; }
+-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+-.ui-datepicker select.ui-datepicker-month, 
+-.ui-datepicker select.ui-datepicker-year { width: 49%;}
+-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+-.ui-datepicker td { border: 0; padding: 1px; }
+-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi { width:auto; }
+-.ui-datepicker-multi .ui-datepicker-group { float:left; }
+-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+-
+-/* RTL support */
+-.ui-datepicker-rtl { direction: rtl; }
+-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+-
+-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+-.ui-datepicker-cover {
+-    display: none; /*sorry for IE5*/
+-    display/**/: block; /*sorry for IE5*/
+-    position: absolute; /*must have*/
+-    z-index: -1; /*must have*/
+-    filter: mask(); /*must have*/
+-    top: -4px; /*must have*/
+-    left: -4px; /*must have*/
+-    width: 200px; /*must have*/
+-    height: 200px; /*must have*/
+-}/*
+- * jQuery UI Progressbar 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Progressbar#theming
+- */
+-.ui-progressbar { height:2em; text-align: left; }
+-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.js	(revision 15488)
+@@ -1,11737 +0,0 @@
+-/*!
+- * jQuery UI 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI
+- */
+-(function( $, undefined ) {
+-
+-// prevent duplicate loading
+-// this is only a problem because we proxy existing functions
+-// and we don't want to double proxy them
+-$.ui = $.ui || {};
+-if ( $.ui.version ) {
+-	return;
+-}
+-
+-$.extend( $.ui, {
+-	version: "1.8.15",
+-
+-	keyCode: {
+-		ALT: 18,
+-		BACKSPACE: 8,
+-		CAPS_LOCK: 20,
+-		COMMA: 188,
+-		COMMAND: 91,
+-		COMMAND_LEFT: 91, // COMMAND
+-		COMMAND_RIGHT: 93,
+-		CONTROL: 17,
+-		DELETE: 46,
+-		DOWN: 40,
+-		END: 35,
+-		ENTER: 13,
+-		ESCAPE: 27,
+-		HOME: 36,
+-		INSERT: 45,
+-		LEFT: 37,
+-		MENU: 93, // COMMAND_RIGHT
+-		NUMPAD_ADD: 107,
+-		NUMPAD_DECIMAL: 110,
+-		NUMPAD_DIVIDE: 111,
+-		NUMPAD_ENTER: 108,
+-		NUMPAD_MULTIPLY: 106,
+-		NUMPAD_SUBTRACT: 109,
+-		PAGE_DOWN: 34,
+-		PAGE_UP: 33,
+-		PERIOD: 190,
+-		RIGHT: 39,
+-		SHIFT: 16,
+-		SPACE: 32,
+-		TAB: 9,
+-		UP: 38,
+-		WINDOWS: 91 // COMMAND
+-	}
+-});
+-
+-// plugins
+-$.fn.extend({
+-	propAttr: $.fn.prop || $.fn.attr,
+-
+-	_focus: $.fn.focus,
+-	focus: function( delay, fn ) {
+-		return typeof delay === "number" ?
+-			this.each(function() {
+-				var elem = this;
+-				setTimeout(function() {
+-					$( elem ).focus();
+-					if ( fn ) {
+-						fn.call( elem );
+-					}
+-				}, delay );
+-			}) :
+-			this._focus.apply( this, arguments );
+-	},
+-
+-	scrollParent: function() {
+-		var scrollParent;
+-		if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+-			}).eq(0);
+-		} else {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+-			}).eq(0);
+-		}
+-
+-		return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
+-	},
+-
+-	zIndex: function( zIndex ) {
+-		if ( zIndex !== undefined ) {
+-			return this.css( "zIndex", zIndex );
+-		}
+-
+-		if ( this.length ) {
+-			var elem = $( this[ 0 ] ), position, value;
+-			while ( elem.length && elem[ 0 ] !== document ) {
+-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+-				// This makes behavior of this function consistent across browsers
+-				// WebKit always returns auto if the element is positioned
+-				position = elem.css( "position" );
+-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+-					// IE returns 0 when zIndex is not specified
+-					// other browsers return a string
+-					// we ignore the case of nested elements with an explicit value of 0
+-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+-					value = parseInt( elem.css( "zIndex" ), 10 );
+-					if ( !isNaN( value ) && value !== 0 ) {
+-						return value;
+-					}
+-				}
+-				elem = elem.parent();
+-			}
+-		}
+-
+-		return 0;
+-	},
+-
+-	disableSelection: function() {
+-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+-			".ui-disableSelection", function( event ) {
+-				event.preventDefault();
+-			});
+-	},
+-
+-	enableSelection: function() {
+-		return this.unbind( ".ui-disableSelection" );
+-	}
+-});
+-
+-$.each( [ "Width", "Height" ], function( i, name ) {
+-	var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+-		type = name.toLowerCase(),
+-		orig = {
+-			innerWidth: $.fn.innerWidth,
+-			innerHeight: $.fn.innerHeight,
+-			outerWidth: $.fn.outerWidth,
+-			outerHeight: $.fn.outerHeight
+-		};
+-
+-	function reduce( elem, size, border, margin ) {
+-		$.each( side, function() {
+-			size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
+-			if ( border ) {
+-				size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
+-			}
+-			if ( margin ) {
+-				size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
+-			}
+-		});
+-		return size;
+-	}
+-
+-	$.fn[ "inner" + name ] = function( size ) {
+-		if ( size === undefined ) {
+-			return orig[ "inner" + name ].call( this );
+-		}
+-
+-		return this.each(function() {
+-			$( this ).css( type, reduce( this, size ) + "px" );
+-		});
+-	};
+-
+-	$.fn[ "outer" + name] = function( size, margin ) {
+-		if ( typeof size !== "number" ) {
+-			return orig[ "outer" + name ].call( this, size );
+-		}
+-
+-		return this.each(function() {
+-			$( this).css( type, reduce( this, size, true, margin ) + "px" );
+-		});
+-	};
+-});
+-
+-// selectors
+-function focusable( element, isTabIndexNotNaN ) {
+-	var nodeName = element.nodeName.toLowerCase();
+-	if ( "area" === nodeName ) {
+-		var map = element.parentNode,
+-			mapName = map.name,
+-			img;
+-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+-			return false;
+-		}
+-		img = $( "img[usemap=#" + mapName + "]" )[0];
+-		return !!img && visible( img );
+-	}
+-	return ( /input|select|textarea|button|object/.test( nodeName )
+-		? !element.disabled
+-		: "a" == nodeName
+-			? element.href || isTabIndexNotNaN
+-			: isTabIndexNotNaN)
+-		// the element and all of its ancestors must be visible
+-		&& visible( element );
+-}
+-
+-function visible( element ) {
+-	return !$( element ).parents().andSelf().filter(function() {
+-		return $.curCSS( this, "visibility" ) === "hidden" ||
+-			$.expr.filters.hidden( this );
+-	}).length;
+-}
+-
+-$.extend( $.expr[ ":" ], {
+-	data: function( elem, i, match ) {
+-		return !!$.data( elem, match[ 3 ] );
+-	},
+-
+-	focusable: function( element ) {
+-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+-	},
+-
+-	tabbable: function( element ) {
+-		var tabIndex = $.attr( element, "tabindex" ),
+-			isTabIndexNaN = isNaN( tabIndex );
+-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+-	}
+-});
+-
+-// support
+-$(function() {
+-	var body = document.body,
+-		div = body.appendChild( div = document.createElement( "div" ) );
+-
+-	$.extend( div.style, {
+-		minHeight: "100px",
+-		height: "auto",
+-		padding: 0,
+-		borderWidth: 0
+-	});
+-
+-	$.support.minHeight = div.offsetHeight === 100;
+-	$.support.selectstart = "onselectstart" in div;
+-
+-	// set display to none to avoid a layout bug in IE
+-	// http://dev.jquery.com/ticket/4014
+-	body.removeChild( div ).style.display = "none";
+-});
+-
+-
+-
+-
+-
+-// deprecated
+-$.extend( $.ui, {
+-	// $.ui.plugin is deprecated.  Use the proxy pattern instead.
+-	plugin: {
+-		add: function( module, option, set ) {
+-			var proto = $.ui[ module ].prototype;
+-			for ( var i in set ) {
+-				proto.plugins[ i ] = proto.plugins[ i ] || [];
+-				proto.plugins[ i ].push( [ option, set[ i ] ] );
+-			}
+-		},
+-		call: function( instance, name, args ) {
+-			var set = instance.plugins[ name ];
+-			if ( !set || !instance.element[ 0 ].parentNode ) {
+-				return;
+-			}
+-	
+-			for ( var i = 0; i < set.length; i++ ) {
+-				if ( instance.options[ set[ i ][ 0 ] ] ) {
+-					set[ i ][ 1 ].apply( instance.element, args );
+-				}
+-			}
+-		}
+-	},
+-	
+-	// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
+-	contains: function( a, b ) {
+-		return document.compareDocumentPosition ?
+-			a.compareDocumentPosition( b ) & 16 :
+-			a !== b && a.contains( b );
+-	},
+-	
+-	// only used by resizable
+-	hasScroll: function( el, a ) {
+-	
+-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+-		if ( $( el ).css( "overflow" ) === "hidden") {
+-			return false;
+-		}
+-	
+-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+-			has = false;
+-	
+-		if ( el[ scroll ] > 0 ) {
+-			return true;
+-		}
+-	
+-		// TODO: determine which cases actually cause this to happen
+-		// if the element doesn't have the scroll set, see if it's possible to
+-		// set the scroll
+-		el[ scroll ] = 1;
+-		has = ( el[ scroll ] > 0 );
+-		el[ scroll ] = 0;
+-		return has;
+-	},
+-	
+-	// these are odd functions, fix the API or move into individual plugins
+-	isOverAxis: function( x, reference, size ) {
+-		//Determines when x coordinate is over "b" element axis
+-		return ( x > reference ) && ( x < ( reference + size ) );
+-	},
+-	isOver: function( y, x, top, left, height, width ) {
+-		//Determines when x, y coordinates is over "b" element
+-		return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
+-	}
+-});
+-
+-})( jQuery );
+-/*!
+- * jQuery UI Widget 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Widget
+- */
+-(function( $, undefined ) {
+-
+-// jQuery 1.4+
+-if ( $.cleanData ) {
+-	var _cleanData = $.cleanData;
+-	$.cleanData = function( elems ) {
+-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-			$( elem ).triggerHandler( "remove" );
+-		}
+-		_cleanData( elems );
+-	};
+-} else {
+-	var _remove = $.fn.remove;
+-	$.fn.remove = function( selector, keepData ) {
+-		return this.each(function() {
+-			if ( !keepData ) {
+-				if ( !selector || $.filter( selector, [ this ] ).length ) {
+-					$( "*", this ).add( [ this ] ).each(function() {
+-						$( this ).triggerHandler( "remove" );
+-					});
+-				}
+-			}
+-			return _remove.call( $(this), selector, keepData );
+-		});
+-	};
+-}
+-
+-$.widget = function( name, base, prototype ) {
+-	var namespace = name.split( "." )[ 0 ],
+-		fullName;
+-	name = name.split( "." )[ 1 ];
+-	fullName = namespace + "-" + name;
+-
+-	if ( !prototype ) {
+-		prototype = base;
+-		base = $.Widget;
+-	}
+-
+-	// create selector for plugin
+-	$.expr[ ":" ][ fullName ] = function( elem ) {
+-		return !!$.data( elem, name );
+-	};
+-
+-	$[ namespace ] = $[ namespace ] || {};
+-	$[ namespace ][ name ] = function( options, element ) {
+-		// allow instantiation without initializing for simple inheritance
+-		if ( arguments.length ) {
+-			this._createWidget( options, element );
+-		}
+-	};
+-
+-	var basePrototype = new base();
+-	// we need to make the options hash a property directly on the new instance
+-	// otherwise we'll modify the options hash on the prototype that we're
+-	// inheriting from
+-//	$.each( basePrototype, function( key, val ) {
+-//		if ( $.isPlainObject(val) ) {
+-//			basePrototype[ key ] = $.extend( {}, val );
+-//		}
+-//	});
+-	basePrototype.options = $.extend( true, {}, basePrototype.options );
+-	$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+-		namespace: namespace,
+-		widgetName: name,
+-		widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+-		widgetBaseClass: fullName
+-	}, prototype );
+-
+-	$.widget.bridge( name, $[ namespace ][ name ] );
+-};
+-
+-$.widget.bridge = function( name, object ) {
+-	$.fn[ name ] = function( options ) {
+-		var isMethodCall = typeof options === "string",
+-			args = Array.prototype.slice.call( arguments, 1 ),
+-			returnValue = this;
+-
+-		// allow multiple hashes to be passed on init
+-		options = !isMethodCall && args.length ?
+-			$.extend.apply( null, [ true, options ].concat(args) ) :
+-			options;
+-
+-		// prevent calls to internal methods
+-		if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+-			return returnValue;
+-		}
+-
+-		if ( isMethodCall ) {
+-			this.each(function() {
+-				var instance = $.data( this, name ),
+-					methodValue = instance && $.isFunction( instance[options] ) ?
+-						instance[ options ].apply( instance, args ) :
+-						instance;
+-				// TODO: add this back in 1.9 and use $.error() (see #5972)
+-//				if ( !instance ) {
+-//					throw "cannot call methods on " + name + " prior to initialization; " +
+-//						"attempted to call method '" + options + "'";
+-//				}
+-//				if ( !$.isFunction( instance[options] ) ) {
+-//					throw "no such method '" + options + "' for " + name + " widget instance";
+-//				}
+-//				var methodValue = instance[ options ].apply( instance, args );
+-				if ( methodValue !== instance && methodValue !== undefined ) {
+-					returnValue = methodValue;
+-					return false;
+-				}
+-			});
+-		} else {
+-			this.each(function() {
+-				var instance = $.data( this, name );
+-				if ( instance ) {
+-					instance.option( options || {} )._init();
+-				} else {
+-					$.data( this, name, new object( options, this ) );
+-				}
+-			});
+-		}
+-
+-		return returnValue;
+-	};
+-};
+-
+-$.Widget = function( options, element ) {
+-	// allow instantiation without initializing for simple inheritance
+-	if ( arguments.length ) {
+-		this._createWidget( options, element );
+-	}
+-};
+-
+-$.Widget.prototype = {
+-	widgetName: "widget",
+-	widgetEventPrefix: "",
+-	options: {
+-		disabled: false
+-	},
+-	_createWidget: function( options, element ) {
+-		// $.widget.bridge stores the plugin instance, but we do it anyway
+-		// so that it's stored even before the _create function runs
+-		$.data( element, this.widgetName, this );
+-		this.element = $( element );
+-		this.options = $.extend( true, {},
+-			this.options,
+-			this._getCreateOptions(),
+-			options );
+-
+-		var self = this;
+-		this.element.bind( "remove." + this.widgetName, function() {
+-			self.destroy();
+-		});
+-
+-		this._create();
+-		this._trigger( "create" );
+-		this._init();
+-	},
+-	_getCreateOptions: function() {
+-		return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
+-	},
+-	_create: function() {},
+-	_init: function() {},
+-
+-	destroy: function() {
+-		this.element
+-			.unbind( "." + this.widgetName )
+-			.removeData( this.widgetName );
+-		this.widget()
+-			.unbind( "." + this.widgetName )
+-			.removeAttr( "aria-disabled" )
+-			.removeClass(
+-				this.widgetBaseClass + "-disabled " +
+-				"ui-state-disabled" );
+-	},
+-
+-	widget: function() {
+-		return this.element;
+-	},
+-
+-	option: function( key, value ) {
+-		var options = key;
+-
+-		if ( arguments.length === 0 ) {
+-			// don't return a reference to the internal hash
+-			return $.extend( {}, this.options );
+-		}
+-
+-		if  (typeof key === "string" ) {
+-			if ( value === undefined ) {
+-				return this.options[ key ];
+-			}
+-			options = {};
+-			options[ key ] = value;
+-		}
+-
+-		this._setOptions( options );
+-
+-		return this;
+-	},
+-	_setOptions: function( options ) {
+-		var self = this;
+-		$.each( options, function( key, value ) {
+-			self._setOption( key, value );
+-		});
+-
+-		return this;
+-	},
+-	_setOption: function( key, value ) {
+-		this.options[ key ] = value;
+-
+-		if ( key === "disabled" ) {
+-			this.widget()
+-				[ value ? "addClass" : "removeClass"](
+-					this.widgetBaseClass + "-disabled" + " " +
+-					"ui-state-disabled" )
+-				.attr( "aria-disabled", value );
+-		}
+-
+-		return this;
+-	},
+-
+-	enable: function() {
+-		return this._setOption( "disabled", false );
+-	},
+-	disable: function() {
+-		return this._setOption( "disabled", true );
+-	},
+-
+-	_trigger: function( type, event, data ) {
+-		var callback = this.options[ type ];
+-
+-		event = $.Event( event );
+-		event.type = ( type === this.widgetEventPrefix ?
+-			type :
+-			this.widgetEventPrefix + type ).toLowerCase();
+-		data = data || {};
+-
+-		// copy original event properties over to the new event
+-		// this would happen if we could call $.event.fix instead of $.Event
+-		// but we don't have a way to force an event to be fixed multiple times
+-		if ( event.originalEvent ) {
+-			for ( var i = $.event.props.length, prop; i; ) {
+-				prop = $.event.props[ --i ];
+-				event[ prop ] = event.originalEvent[ prop ];
+-			}
+-		}
+-
+-		this.element.trigger( event, data );
+-
+-		return !( $.isFunction(callback) &&
+-			callback.call( this.element[0], event, data ) === false ||
+-			event.isDefaultPrevented() );
+-	}
+-};
+-
+-})( jQuery );
+-/*!
+- * jQuery UI Mouse 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Mouse
+- *
+- * Depends:
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.mouse", {
+-	options: {
+-		cancel: ':input,option',
+-		distance: 1,
+-		delay: 0
+-	},
+-	_mouseInit: function() {
+-		var self = this;
+-
+-		this.element
+-			.bind('mousedown.'+this.widgetName, function(event) {
+-				return self._mouseDown(event);
+-			})
+-			.bind('click.'+this.widgetName, function(event) {
+-				if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
+-				    $.removeData(event.target, self.widgetName + '.preventClickEvent');
+-					event.stopImmediatePropagation();
+-					return false;
+-				}
+-			});
+-
+-		this.started = false;
+-	},
+-
+-	// TODO: make sure destroying one instance of mouse doesn't mess with
+-	// other instances of mouse
+-	_mouseDestroy: function() {
+-		this.element.unbind('.'+this.widgetName);
+-	},
+-
+-	_mouseDown: function(event) {
+-		// don't let more than one widget handle mouseStart
+-		// TODO: figure out why we have to use originalEvent
+-		event.originalEvent = event.originalEvent || {};
+-		if (event.originalEvent.mouseHandled) { return; }
+-
+-		// we may have missed mouseup (out of window)
+-		(this._mouseStarted && this._mouseUp(event));
+-
+-		this._mouseDownEvent = event;
+-
+-		var self = this,
+-			btnIsLeft = (event.which == 1),
+-			elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).closest(this.options.cancel).length : false);
+-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+-			return true;
+-		}
+-
+-		this.mouseDelayMet = !this.options.delay;
+-		if (!this.mouseDelayMet) {
+-			this._mouseDelayTimer = setTimeout(function() {
+-				self.mouseDelayMet = true;
+-			}, this.options.delay);
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted = (this._mouseStart(event) !== false);
+-			if (!this._mouseStarted) {
+-				event.preventDefault();
+-				return true;
+-			}
+-		}
+-
+-		// Click event may never have fired (Gecko & Opera)
+-		if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
+-			$.removeData(event.target, this.widgetName + '.preventClickEvent');
+-		}
+-
+-		// these delegates are required to keep context
+-		this._mouseMoveDelegate = function(event) {
+-			return self._mouseMove(event);
+-		};
+-		this._mouseUpDelegate = function(event) {
+-			return self._mouseUp(event);
+-		};
+-		$(document)
+-			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+-			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+-
+-		event.preventDefault();
+-		event.originalEvent.mouseHandled = true;
+-		return true;
+-	},
+-
+-	_mouseMove: function(event) {
+-		// IE mouseup check - mouseup happened when mouse was out of window
+-		if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
+-			return this._mouseUp(event);
+-		}
+-
+-		if (this._mouseStarted) {
+-			this._mouseDrag(event);
+-			return event.preventDefault();
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted =
+-				(this._mouseStart(this._mouseDownEvent, event) !== false);
+-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+-		}
+-
+-		return !this._mouseStarted;
+-	},
+-
+-	_mouseUp: function(event) {
+-		$(document)
+-			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+-			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+-
+-		if (this._mouseStarted) {
+-			this._mouseStarted = false;
+-
+-			if (event.target == this._mouseDownEvent.target) {
+-			    $.data(event.target, this.widgetName + '.preventClickEvent', true);
+-			}
+-
+-			this._mouseStop(event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseDistanceMet: function(event) {
+-		return (Math.max(
+-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+-			) >= this.options.distance
+-		);
+-	},
+-
+-	_mouseDelayMet: function(event) {
+-		return this.mouseDelayMet;
+-	},
+-
+-	// These are placeholder methods, to be overriden by extending plugin
+-	_mouseStart: function(event) {},
+-	_mouseDrag: function(event) {},
+-	_mouseStop: function(event) {},
+-	_mouseCapture: function(event) { return true; }
+-});
+-
+-})(jQuery);
+-/*
+- * jQuery UI Draggable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Draggables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.draggable", $.ui.mouse, {
+-	widgetEventPrefix: "drag",
+-	options: {
+-		addClasses: true,
+-		appendTo: "parent",
+-		axis: false,
+-		connectToSortable: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		iframeFix: false,
+-		opacity: false,
+-		refreshPositions: false,
+-		revert: false,
+-		revertDuration: 500,
+-		scope: "default",
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		snap: false,
+-		snapMode: "both",
+-		snapTolerance: 20,
+-		stack: false,
+-		zIndex: false
+-	},
+-	_create: function() {
+-
+-		if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
+-			this.element[0].style.position = 'relative';
+-
+-		(this.options.addClasses && this.element.addClass("ui-draggable"));
+-		(this.options.disabled && this.element.addClass("ui-draggable-disabled"));
+-
+-		this._mouseInit();
+-
+-	},
+-
+-	destroy: function() {
+-		if(!this.element.data('draggable')) return;
+-		this.element
+-			.removeData("draggable")
+-			.unbind(".draggable")
+-			.removeClass("ui-draggable"
+-				+ " ui-draggable-dragging"
+-				+ " ui-draggable-disabled");
+-		this._mouseDestroy();
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-
+-		var o = this.options;
+-
+-		// among others, prevent a drag on a resizable-handle
+-		if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
+-			return false;
+-
+-		//Quit if we're not on a valid handle
+-		this.handle = this._getHandle(event);
+-		if (!this.handle)
+-			return false;
+-		
+-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+-			$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
+-			.css({
+-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+-				position: "absolute", opacity: "0.001", zIndex: 1000
+-			})
+-			.css($(this).offset())
+-			.appendTo("body");
+-		});
+-
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options;
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		//If ddmanager is used for droppables, set the global draggable
+-		if($.ui.ddmanager)
+-			$.ui.ddmanager.current = this;
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Store the helper's css position
+-		this.cssPosition = this.helper.css("position");
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.positionAbs = this.element.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this.position = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Set a containment if given in the options
+-		if(o.containment)
+-			this._setContainment();
+-
+-		//Trigger event + callbacks
+-		if(this._trigger("start", event) === false) {
+-			this._clear();
+-			return false;
+-		}
+-
+-		//Recache the helper size
+-		this._cacheHelperProportions();
+-
+-		//Prepare the droppable offsets
+-		if ($.ui.ddmanager && !o.dropBehaviour)
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-
+-		this.helper.addClass("ui-draggable-dragging");
+-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		
+-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+-		if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);
+-		
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event, noPropagation) {
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Call plugins and callbacks and use the resulting position if something is returned
+-		if (!noPropagation) {
+-			var ui = this._uiHash();
+-			if(this._trigger('drag', event, ui) === false) {
+-				this._mouseUp({});
+-				return false;
+-			}
+-			this.position = ui.position;
+-		}
+-
+-		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
+-		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
+-		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		//If we are using droppables, inform the manager about the drop
+-		var dropped = false;
+-		if ($.ui.ddmanager && !this.options.dropBehaviour)
+-			dropped = $.ui.ddmanager.drop(this, event);
+-
+-		//if a drop comes from outside (a sortable)
+-		if(this.dropped) {
+-			dropped = this.dropped;
+-			this.dropped = false;
+-		}
+-		
+-		//if the original element is removed, don't bother to continue if helper is set to "original"
+-		if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original")
+-			return false;
+-
+-		if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+-			var self = this;
+-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+-				if(self._trigger("stop", event) !== false) {
+-					self._clear();
+-				}
+-			});
+-		} else {
+-			if(this._trigger("stop", event) !== false) {
+-				this._clear();
+-			}
+-		}
+-
+-		return false;
+-	},
+-	
+-	_mouseUp: function(event) {
+-		if (this.options.iframeFix === true) {
+-			$("div.ui-draggable-iframeFix").each(function() { 
+-				this.parentNode.removeChild(this); 
+-			}); //Remove frame helpers
+-		}
+-		
+-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+-		if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);
+-		
+-		return $.ui.mouse.prototype._mouseUp.call(this, event);
+-	},
+-	
+-	cancel: function() {
+-		
+-		if(this.helper.is(".ui-draggable-dragging")) {
+-			this._mouseUp({});
+-		} else {
+-			this._clear();
+-		}
+-		
+-		return this;
+-		
+-	},
+-
+-	_getHandle: function(event) {
+-
+-		var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
+-		$(this.options.handle, this.element)
+-			.find("*")
+-			.andSelf()
+-			.each(function() {
+-				if(this == event.target) handle = true;
+-			});
+-
+-		return handle;
+-
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options;
+-		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
+-
+-		if(!helper.parents('body').length)
+-			helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
+-
+-		if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
+-			helper.css("position", "absolute");
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj == 'string') {
+-			obj = obj.split(' ');
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ('left' in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ('right' in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ('top' in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ('bottom' in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+-			po = { top: 0, left: 0 };
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition == "relative") {
+-			var p = this.element.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.element.css("marginTop"),10) || 0),
+-			right: (parseInt(this.element.css("marginRight"),10) || 0),
+-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var o = this.options;
+-		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
+-		if(o.containment == 'document' || o.containment == 'window') this.containment = [
+-			o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+-			o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+-			(o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
+-			(o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-		];
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
+-		        var c = $(o.containment);
+-			var ce = c[0]; if(!ce) return;
+-			var co = c.offset();
+-			var over = ($(ce).css("overflow") != 'hidden');
+-
+-			this.containment = [
+-				(parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
+-				(parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
+-				(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
+-				(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+-			];
+-			this.relative_container = c;
+-
+-		} else if(o.containment.constructor == Array) {
+-			this.containment = o.containment;
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) pos = this.position;
+-		var mod = d == "absolute" ? 1 : -1;
+-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top																	// The absolute mouse position
+-				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
+-				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left																// The absolute mouse position
+-				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
+-				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-		var pageX = event.pageX;
+-		var pageY = event.pageY;
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-		         var containment;
+-		         if(this.containment) {
+-				 if (this.relative_container){
+-				     var co = this.relative_container.offset();
+-				     containment = [ this.containment[0] + co.left,
+-						     this.containment[1] + co.top,
+-						     this.containment[2] + co.left,
+-						     this.containment[3] + co.top ];
+-				 }
+-				 else {
+-				     containment = this.containment;
+-				 }
+-
+-				if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;
+-				if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;
+-				if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left;
+-				if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top;
+-			}
+-
+-			if(o.grid) {
+-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+-				var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+-				pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+-				pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY																// The absolute mouse position
+-				- this.offset.click.top													// Click offset (relative to the element)
+-				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
+-				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX																// The absolute mouse position
+-				- this.offset.click.left												// Click offset (relative to the element)
+-				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
+-				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_clear: function() {
+-		this.helper.removeClass("ui-draggable-dragging");
+-		if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
+-		//if($.ui.ddmanager) $.ui.ddmanager.current = null;
+-		this.helper = null;
+-		this.cancelHelperRemoval = false;
+-	},
+-
+-	// From now on bulk stuff - mainly helpers
+-
+-	_trigger: function(type, event, ui) {
+-		ui = ui || this._uiHash();
+-		$.ui.plugin.call(this, type, [event, ui]);
+-		if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
+-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+-	},
+-
+-	plugins: {},
+-
+-	_uiHash: function(event) {
+-		return {
+-			helper: this.helper,
+-			position: this.position,
+-			originalPosition: this.originalPosition,
+-			offset: this.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.extend($.ui.draggable, {
+-	version: "1.8.15"
+-});
+-
+-$.ui.plugin.add("draggable", "connectToSortable", {
+-	start: function(event, ui) {
+-
+-		var inst = $(this).data("draggable"), o = inst.options,
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-		inst.sortables = [];
+-		$(o.connectToSortable).each(function() {
+-			var sortable = $.data(this, 'sortable');
+-			if (sortable && !sortable.options.disabled) {
+-				inst.sortables.push({
+-					instance: sortable,
+-					shouldRevert: sortable.options.revert
+-				});
+-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+-				sortable._trigger("activate", event, uiSortable);
+-			}
+-		});
+-
+-	},
+-	stop: function(event, ui) {
+-
+-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+-		var inst = $(this).data("draggable"),
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-
+-		$.each(inst.sortables, function() {
+-			if(this.instance.isOver) {
+-
+-				this.instance.isOver = 0;
+-
+-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+-
+-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
+-				if(this.shouldRevert) this.instance.options.revert = true;
+-
+-				//Trigger the stop of the sortable
+-				this.instance._mouseStop(event);
+-
+-				this.instance.options.helper = this.instance.options._helper;
+-
+-				//If the helper has been the original item, restore properties in the sortable
+-				if(inst.options.helper == 'original')
+-					this.instance.currentItem.css({ top: 'auto', left: 'auto' });
+-
+-			} else {
+-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+-				this.instance._trigger("deactivate", event, uiSortable);
+-			}
+-
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("draggable"), self = this;
+-
+-		var checkPos = function(o) {
+-			var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
+-			var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
+-			var itemHeight = o.height, itemWidth = o.width;
+-			var itemTop = o.top, itemLeft = o.left;
+-
+-			return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
+-		};
+-
+-		$.each(inst.sortables, function(i) {
+-			
+-			//Copy over some variables to allow calling the sortable's native _intersectsWith
+-			this.instance.positionAbs = inst.positionAbs;
+-			this.instance.helperProportions = inst.helperProportions;
+-			this.instance.offset.click = inst.offset.click;
+-			
+-			if(this.instance._intersectsWith(this.instance.containerCache)) {
+-
+-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+-				if(!this.instance.isOver) {
+-
+-					this.instance.isOver = 1;
+-					//Now we fake the start of dragging for the sortable instance,
+-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+-					this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
+-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+-					this.instance.options.helper = function() { return ui.helper[0]; };
+-
+-					event.target = this.instance.currentItem[0];
+-					this.instance._mouseCapture(event, true);
+-					this.instance._mouseStart(event, true, true);
+-
+-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+-					this.instance.offset.click.top = inst.offset.click.top;
+-					this.instance.offset.click.left = inst.offset.click.left;
+-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+-
+-					inst._trigger("toSortable", event);
+-					inst.dropped = this.instance.element; //draggable revert needs that
+-					//hack so receive/update callbacks work (mostly)
+-					inst.currentItem = inst.element;
+-					this.instance.fromOutside = inst;
+-
+-				}
+-
+-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+-				if(this.instance.currentItem) this.instance._mouseDrag(event);
+-
+-			} else {
+-
+-				//If it doesn't intersect with the sortable, and it intersected before,
+-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+-				if(this.instance.isOver) {
+-
+-					this.instance.isOver = 0;
+-					this.instance.cancelHelperRemoval = true;
+-					
+-					//Prevent reverting on this forced stop
+-					this.instance.options.revert = false;
+-					
+-					// The out event needs to be triggered independently
+-					this.instance._trigger('out', event, this.instance._uiHash(this.instance));
+-					
+-					this.instance._mouseStop(event, true);
+-					this.instance.options.helper = this.instance.options._helper;
+-
+-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+-					this.instance.currentItem.remove();
+-					if(this.instance.placeholder) this.instance.placeholder.remove();
+-
+-					inst._trigger("fromSortable", event);
+-					inst.dropped = false; //draggable revert needs that
+-				}
+-
+-			};
+-
+-		});
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "cursor", {
+-	start: function(event, ui) {
+-		var t = $('body'), o = $(this).data('draggable').options;
+-		if (t.css("cursor")) o._cursor = t.css("cursor");
+-		t.css("cursor", o.cursor);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data('draggable').options;
+-		if (o._cursor) $('body').css("cursor", o._cursor);
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "opacity", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data('draggable').options;
+-		if(t.css("opacity")) o._opacity = t.css("opacity");
+-		t.css('opacity', o.opacity);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data('draggable').options;
+-		if(o._opacity) $(ui.helper).css('opacity', o._opacity);
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "scroll", {
+-	start: function(event, ui) {
+-		var i = $(this).data("draggable");
+-		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
+-	},
+-	drag: function(event, ui) {
+-
+-		var i = $(this).data("draggable"), o = i.options, scrolled = false;
+-
+-		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
+-
+-			if(!o.axis || o.axis != 'x') {
+-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+-				else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+-			}
+-
+-			if(!o.axis || o.axis != 'y') {
+-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+-			}
+-
+-		} else {
+-
+-			if(!o.axis || o.axis != 'x') {
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-			}
+-
+-			if(!o.axis || o.axis != 'y') {
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-			}
+-
+-		}
+-
+-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
+-			$.ui.ddmanager.prepareOffsets(i, event);
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "snap", {
+-	start: function(event, ui) {
+-
+-		var i = $(this).data("draggable"), o = i.options;
+-		i.snapElements = [];
+-
+-		$(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
+-			var $t = $(this); var $o = $t.offset();
+-			if(this != i.element[0]) i.snapElements.push({
+-				item: this,
+-				width: $t.outerWidth(), height: $t.outerHeight(),
+-				top: $o.top, left: $o.left
+-			});
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("draggable"), o = inst.options;
+-		var d = o.snapTolerance;
+-
+-		var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+-
+-		for (var i = inst.snapElements.length - 1; i >= 0; i--){
+-
+-			var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
+-				t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
+-
+-			//Yes, I know, this is insane ;)
+-			if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
+-				if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-				inst.snapElements[i].snapping = false;
+-				continue;
+-			}
+-
+-			if(o.snapMode != 'inner') {
+-				var ts = Math.abs(t - y2) <= d;
+-				var bs = Math.abs(b - y1) <= d;
+-				var ls = Math.abs(l - x2) <= d;
+-				var rs = Math.abs(r - x1) <= d;
+-				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+-				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+-				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+-			}
+-
+-			var first = (ts || bs || ls || rs);
+-
+-			if(o.snapMode != 'outer') {
+-				var ts = Math.abs(t - y1) <= d;
+-				var bs = Math.abs(b - y2) <= d;
+-				var ls = Math.abs(l - x1) <= d;
+-				var rs = Math.abs(r - x2) <= d;
+-				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+-				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+-				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+-			}
+-
+-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
+-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+-
+-		};
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "stack", {
+-	start: function(event, ui) {
+-
+-		var o = $(this).data("draggable").options;
+-
+-		var group = $.makeArray($(o.stack)).sort(function(a,b) {
+-			return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+-		});
+-		if (!group.length) { return; }
+-		
+-		var min = parseInt(group[0].style.zIndex) || 0;
+-		$(group).each(function(i) {
+-			this.style.zIndex = min + i;
+-		});
+-
+-		this[0].style.zIndex = min + group.length;
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "zIndex", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("draggable").options;
+-		if(t.css("zIndex")) o._zIndex = t.css("zIndex");
+-		t.css('zIndex', o.zIndex);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("draggable").options;
+-		if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
+-	}
+-});
+-
+-})(jQuery);
+-/*
+- * jQuery UI Droppable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Droppables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.draggable.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.droppable", {
+-	widgetEventPrefix: "drop",
+-	options: {
+-		accept: '*',
+-		activeClass: false,
+-		addClasses: true,
+-		greedy: false,
+-		hoverClass: false,
+-		scope: 'default',
+-		tolerance: 'intersect'
+-	},
+-	_create: function() {
+-
+-		var o = this.options, accept = o.accept;
+-		this.isover = 0; this.isout = 1;
+-
+-		this.accept = $.isFunction(accept) ? accept : function(d) {
+-			return d.is(accept);
+-		};
+-
+-		//Store the droppable's proportions
+-		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+-
+-		// Add the reference and positions to the manager
+-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+-		$.ui.ddmanager.droppables[o.scope].push(this);
+-
+-		(o.addClasses && this.element.addClass("ui-droppable"));
+-
+-	},
+-
+-	destroy: function() {
+-		var drop = $.ui.ddmanager.droppables[this.options.scope];
+-		for ( var i = 0; i < drop.length; i++ )
+-			if ( drop[i] == this )
+-				drop.splice(i, 1);
+-
+-		this.element
+-			.removeClass("ui-droppable ui-droppable-disabled")
+-			.removeData("droppable")
+-			.unbind(".droppable");
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value) {
+-
+-		if(key == 'accept') {
+-			this.accept = $.isFunction(value) ? value : function(d) {
+-				return d.is(value);
+-			};
+-		}
+-		$.Widget.prototype._setOption.apply(this, arguments);
+-	},
+-
+-	_activate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) this.element.addClass(this.options.activeClass);
+-		(draggable && this._trigger('activate', event, this.ui(draggable)));
+-	},
+-
+-	_deactivate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
+-		(draggable && this._trigger('deactivate', event, this.ui(draggable)));
+-	},
+-
+-	_over: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) this.element.addClass(this.options.hoverClass);
+-			this._trigger('over', event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_out: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
+-			this._trigger('out', event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_drop: function(event,custom) {
+-
+-		var draggable = custom || $.ui.ddmanager.current;
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element
+-
+-		var childrenIntersection = false;
+-		this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() {
+-			var inst = $.data(this, 'droppable');
+-			if(
+-				inst.options.greedy
+-				&& !inst.options.disabled
+-				&& inst.options.scope == draggable.options.scope
+-				&& inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element))
+-				&& $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+-			) { childrenIntersection = true; return false; }
+-		});
+-		if(childrenIntersection) return false;
+-
+-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
+-			if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
+-			this._trigger('drop', event, this.ui(draggable));
+-			return this.element;
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	ui: function(c) {
+-		return {
+-			draggable: (c.currentItem || c.element),
+-			helper: c.helper,
+-			position: c.position,
+-			offset: c.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.extend($.ui.droppable, {
+-	version: "1.8.15"
+-});
+-
+-$.ui.intersect = function(draggable, droppable, toleranceMode) {
+-
+-	if (!droppable.offset) return false;
+-
+-	var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+-		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;
+-	var l = droppable.offset.left, r = l + droppable.proportions.width,
+-		t = droppable.offset.top, b = t + droppable.proportions.height;
+-
+-	switch (toleranceMode) {
+-		case 'fit':
+-			return (l <= x1 && x2 <= r
+-				&& t <= y1 && y2 <= b);
+-			break;
+-		case 'intersect':
+-			return (l < x1 + (draggable.helperProportions.width / 2) // Right Half
+-				&& x2 - (draggable.helperProportions.width / 2) < r // Left Half
+-				&& t < y1 + (draggable.helperProportions.height / 2) // Bottom Half
+-				&& y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+-			break;
+-		case 'pointer':
+-			var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),
+-				draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),
+-				isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);
+-			return isOver;
+-			break;
+-		case 'touch':
+-			return (
+-					(y1 >= t && y1 <= b) ||	// Top edge touching
+-					(y2 >= t && y2 <= b) ||	// Bottom edge touching
+-					(y1 < t && y2 > b)		// Surrounded vertically
+-				) && (
+-					(x1 >= l && x1 <= r) ||	// Left edge touching
+-					(x2 >= l && x2 <= r) ||	// Right edge touching
+-					(x1 < l && x2 > r)		// Surrounded horizontally
+-				);
+-			break;
+-		default:
+-			return false;
+-			break;
+-		}
+-
+-};
+-
+-/*
+-	This manager tracks offsets of draggables and droppables
+-*/
+-$.ui.ddmanager = {
+-	current: null,
+-	droppables: { 'default': [] },
+-	prepareOffsets: function(t, event) {
+-
+-		var m = $.ui.ddmanager.droppables[t.options.scope] || [];
+-		var type = event ? event.type : null; // workaround for #2317
+-		var list = (t.currentItem || t.element).find(":data(droppable)").andSelf();
+-
+-		droppablesLoop: for (var i = 0; i < m.length; i++) {
+-
+-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue;	//No disabled and non-accepted
+-			for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item
+-			m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; 									//If the element is not visible, continue
+-
+-			if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables
+-
+-			m[i].offset = m[i].element.offset();
+-			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+-
+-		}
+-
+-	},
+-	drop: function(draggable, event) {
+-
+-		var dropped = false;
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(!this.options) return;
+-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
+-				dropped = dropped || this._drop.call(this, event);
+-
+-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-				this.isout = 1; this.isover = 0;
+-				this._deactivate.call(this, event);
+-			}
+-
+-		});
+-		return dropped;
+-
+-	},
+-	dragStart: function( draggable, event ) {
+-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+-			if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
+-		});
+-	},
+-	drag: function(draggable, event) {
+-
+-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+-		if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);
+-
+-		//Run through all droppables and check their positions based on specific tolerance options
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(this.options.disabled || this.greedyChild || !this.visible) return;
+-			var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
+-
+-			var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
+-			if(!c) return;
+-
+-			var parentInstance;
+-			if (this.options.greedy) {
+-				var parent = this.element.parents(':data(droppable):eq(0)');
+-				if (parent.length) {
+-					parentInstance = $.data(parent[0], 'droppable');
+-					parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
+-				}
+-			}
+-
+-			// we just moved into a greedy child
+-			if (parentInstance && c == 'isover') {
+-				parentInstance['isover'] = 0;
+-				parentInstance['isout'] = 1;
+-				parentInstance._out.call(parentInstance, event);
+-			}
+-
+-			this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;
+-			this[c == "isover" ? "_over" : "_out"].call(this, event);
+-
+-			// we just moved out of a greedy child
+-			if (parentInstance && c == 'isout') {
+-				parentInstance['isout'] = 0;
+-				parentInstance['isover'] = 1;
+-				parentInstance._over.call(parentInstance, event);
+-			}
+-		});
+-
+-	},
+-	dragStop: function( draggable, event ) {
+-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+-		if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
+-	}
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Resizable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Resizables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.resizable", $.ui.mouse, {
+-	widgetEventPrefix: "resize",
+-	options: {
+-		alsoResize: false,
+-		animate: false,
+-		animateDuration: "slow",
+-		animateEasing: "swing",
+-		aspectRatio: false,
+-		autoHide: false,
+-		containment: false,
+-		ghost: false,
+-		grid: false,
+-		handles: "e,s,se",
+-		helper: false,
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 10,
+-		minWidth: 10,
+-		zIndex: 1000
+-	},
+-	_create: function() {
+-
+-		var self = this, o = this.options;
+-		this.element.addClass("ui-resizable");
+-
+-		$.extend(this, {
+-			_aspectRatio: !!(o.aspectRatio),
+-			aspectRatio: o.aspectRatio,
+-			originalElement: this.element,
+-			_proportionallyResizeElements: [],
+-			_helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
+-		});
+-
+-		//Wrap the element if it cannot hold child nodes
+-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+-
+-			//Opera fix for relative positioning
+-			if (/relative/.test(this.element.css('position')) && $.browser.opera)
+-				this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
+-
+-			//Create a wrapper element and set the wrapper to the new current internal element
+-			this.element.wrap(
+-				$('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
+-					position: this.element.css('position'),
+-					width: this.element.outerWidth(),
+-					height: this.element.outerHeight(),
+-					top: this.element.css('top'),
+-					left: this.element.css('left')
+-				})
+-			);
+-
+-			//Overwrite the original this.element
+-			this.element = this.element.parent().data(
+-				"resizable", this.element.data('resizable')
+-			);
+-
+-			this.elementIsWrapper = true;
+-
+-			//Move margins to the wrapper
+-			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+-			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+-
+-			//Prevent Safari textarea resize
+-			this.originalResizeStyle = this.originalElement.css('resize');
+-			this.originalElement.css('resize', 'none');
+-
+-			//Push the actual element to our proportionallyResize internal array
+-			this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
+-
+-			// avoid IE jump (hard set the margin)
+-			this.originalElement.css({ margin: this.originalElement.css('margin') });
+-
+-			// fix handlers offset
+-			this._proportionallyResize();
+-
+-		}
+-
+-		this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
+-		if(this.handles.constructor == String) {
+-
+-			if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
+-			var n = this.handles.split(","); this.handles = {};
+-
+-			for(var i = 0; i < n.length; i++) {
+-
+-				var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
+-				var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
+-
+-				// increase zIndex of sw, se, ne, nw axis
+-				//TODO : this modifies original option
+-				if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
+-
+-				//TODO : What's going on here?
+-				if ('se' == handle) {
+-					axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
+-				};
+-
+-				//Insert into internal handles object and append to element
+-				this.handles[handle] = '.ui-resizable-'+handle;
+-				this.element.append(axis);
+-			}
+-
+-		}
+-
+-		this._renderAxis = function(target) {
+-
+-			target = target || this.element;
+-
+-			for(var i in this.handles) {
+-
+-				if(this.handles[i].constructor == String)
+-					this.handles[i] = $(this.handles[i], this.element).show();
+-
+-				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+-
+-					var axis = $(this.handles[i], this.element), padWrapper = 0;
+-
+-					//Checking the correct pad and border
+-					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+-
+-					//The padding type i have to apply...
+-					var padPos = [ 'padding',
+-						/ne|nw|n/.test(i) ? 'Top' :
+-						/se|sw|s/.test(i) ? 'Bottom' :
+-						/^e$/.test(i) ? 'Right' : 'Left' ].join("");
+-
+-					target.css(padPos, padWrapper);
+-
+-					this._proportionallyResize();
+-
+-				}
+-
+-				//TODO: What's that good for? There's not anything to be executed left
+-				if(!$(this.handles[i]).length)
+-					continue;
+-
+-			}
+-		};
+-
+-		//TODO: make renderAxis a prototype function
+-		this._renderAxis(this.element);
+-
+-		this._handles = $('.ui-resizable-handle', this.element)
+-			.disableSelection();
+-
+-		//Matching axis name
+-		this._handles.mouseover(function() {
+-			if (!self.resizing) {
+-				if (this.className)
+-					var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+-				//Axis, default = se
+-				self.axis = axis && axis[1] ? axis[1] : 'se';
+-			}
+-		});
+-
+-		//If we want to auto hide the elements
+-		if (o.autoHide) {
+-			this._handles.hide();
+-			$(this.element)
+-				.addClass("ui-resizable-autohide")
+-				.hover(function() {
+-					if (o.disabled) return;
+-					$(this).removeClass("ui-resizable-autohide");
+-					self._handles.show();
+-				},
+-				function(){
+-					if (o.disabled) return;
+-					if (!self.resizing) {
+-						$(this).addClass("ui-resizable-autohide");
+-						self._handles.hide();
+-					}
+-				});
+-		}
+-
+-		//Initialize the mouse interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	destroy: function() {
+-
+-		this._mouseDestroy();
+-
+-		var _destroy = function(exp) {
+-			$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+-				.removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
+-		};
+-
+-		//TODO: Unwrap at same DOM position
+-		if (this.elementIsWrapper) {
+-			_destroy(this.element);
+-			var wrapper = this.element;
+-			wrapper.after(
+-				this.originalElement.css({
+-					position: wrapper.css('position'),
+-					width: wrapper.outerWidth(),
+-					height: wrapper.outerHeight(),
+-					top: wrapper.css('top'),
+-					left: wrapper.css('left')
+-				})
+-			).remove();
+-		}
+-
+-		this.originalElement.css('resize', this.originalResizeStyle);
+-		_destroy(this.originalElement);
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-		var handle = false;
+-		for (var i in this.handles) {
+-			if ($(this.handles[i])[0] == event.target) {
+-				handle = true;
+-			}
+-		}
+-
+-		return !this.options.disabled && handle;
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options, iniPos = this.element.position(), el = this.element;
+-
+-		this.resizing = true;
+-		this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
+-
+-		// bugfix for http://dev.jquery.com/ticket/1749
+-		if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
+-			el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
+-		}
+-
+-		//Opera fixing relative position
+-		if ($.browser.opera && (/relative/).test(el.css('position')))
+-			el.css({ position: 'relative', top: 'auto', left: 'auto' });
+-
+-		this._renderProxy();
+-
+-		var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
+-
+-		if (o.containment) {
+-			curleft += $(o.containment).scrollLeft() || 0;
+-			curtop += $(o.containment).scrollTop() || 0;
+-		}
+-
+-		//Store needed variables
+-		this.offset = this.helper.offset();
+-		this.position = { left: curleft, top: curtop };
+-		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalPosition = { left: curleft, top: curtop };
+-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+-		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+-
+-		//Aspect Ratio
+-		this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+-
+-	    var cursor = $('.ui-resizable-' + this.axis).css('cursor');
+-	    $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
+-
+-		el.addClass("ui-resizable-resizing");
+-		this._propagate("start", event);
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Increase performance, avoid regex
+-		var el = this.helper, o = this.options, props = {},
+-			self = this, smp = this.originalMousePosition, a = this.axis;
+-
+-		var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
+-		var trigger = this._change[a];
+-		if (!trigger) return false;
+-
+-		// Calculate the attrs that will be change
+-		var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
+-
+-		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+-		this._updateVirtualBoundaries(event.shiftKey);
+-		if (this._aspectRatio || event.shiftKey)
+-			data = this._updateRatio(data, event);
+-
+-		data = this._respectSize(data, event);
+-
+-		// plugins callbacks need to be called first
+-		this._propagate("resize", event);
+-
+-		el.css({
+-			top: this.position.top + "px", left: this.position.left + "px",
+-			width: this.size.width + "px", height: this.size.height + "px"
+-		});
+-
+-		if (!this._helper && this._proportionallyResizeElements.length)
+-			this._proportionallyResize();
+-
+-		this._updateCache(data);
+-
+-		// calling the user callback at the end
+-		this._trigger('resize', event, this.ui());
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		this.resizing = false;
+-		var o = this.options, self = this;
+-
+-		if(this._helper) {
+-			var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-				soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+-				soffsetw = ista ? 0 : self.sizeDiff.width;
+-
+-			var s = { width: (self.helper.width()  - soffsetw), height: (self.helper.height() - soffseth) },
+-				left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+-				top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+-
+-			if (!o.animate)
+-				this.element.css($.extend(s, { top: top, left: left }));
+-
+-			self.helper.height(self.size.height);
+-			self.helper.width(self.size.width);
+-
+-			if (this._helper && !o.animate) this._proportionallyResize();
+-		}
+-
+-		$('body').css('cursor', 'auto');
+-
+-		this.element.removeClass("ui-resizable-resizing");
+-
+-		this._propagate("stop", event);
+-
+-		if (this._helper) this.helper.remove();
+-		return false;
+-
+-	},
+-
+-    _updateVirtualBoundaries: function(forceAspectRatio) {
+-        var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
+-
+-        b = {
+-            minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+-            maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+-            minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+-            maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+-        };
+-
+-        if(this._aspectRatio || forceAspectRatio) {
+-            // We want to create an enclosing box whose aspect ration is the requested one
+-            // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+-            pMinWidth = b.minHeight * this.aspectRatio;
+-            pMinHeight = b.minWidth / this.aspectRatio;
+-            pMaxWidth = b.maxHeight * this.aspectRatio;
+-            pMaxHeight = b.maxWidth / this.aspectRatio;
+-
+-            if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
+-            if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
+-            if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
+-            if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
+-        }
+-        this._vBoundaries = b;
+-    },
+-
+-	_updateCache: function(data) {
+-		var o = this.options;
+-		this.offset = this.helper.offset();
+-		if (isNumber(data.left)) this.position.left = data.left;
+-		if (isNumber(data.top)) this.position.top = data.top;
+-		if (isNumber(data.height)) this.size.height = data.height;
+-		if (isNumber(data.width)) this.size.width = data.width;
+-	},
+-
+-	_updateRatio: function(data, event) {
+-
+-		var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
+-
+-		if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
+-		else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
+-
+-		if (a == 'sw') {
+-			data.left = cpos.left + (csize.width - data.width);
+-			data.top = null;
+-		}
+-		if (a == 'nw') {
+-			data.top = cpos.top + (csize.height - data.height);
+-			data.left = cpos.left + (csize.width - data.width);
+-		}
+-
+-		return data;
+-	},
+-
+-	_respectSize: function(data, event) {
+-
+-		var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
+-				ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+-					isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
+-
+-		if (isminw) data.width = o.minWidth;
+-		if (isminh) data.height = o.minHeight;
+-		if (ismaxw) data.width = o.maxWidth;
+-		if (ismaxh) data.height = o.maxHeight;
+-
+-		var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
+-		var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+-
+-		if (isminw && cw) data.left = dw - o.minWidth;
+-		if (ismaxw && cw) data.left = dw - o.maxWidth;
+-		if (isminh && ch)	data.top = dh - o.minHeight;
+-		if (ismaxh && ch)	data.top = dh - o.maxHeight;
+-
+-		// fixing jump error on top/left - bug #2330
+-		var isNotwh = !data.width && !data.height;
+-		if (isNotwh && !data.left && data.top) data.top = null;
+-		else if (isNotwh && !data.top && data.left) data.left = null;
+-
+-		return data;
+-	},
+-
+-	_proportionallyResize: function() {
+-
+-		var o = this.options;
+-		if (!this._proportionallyResizeElements.length) return;
+-		var element = this.helper || this.element;
+-
+-		for (var i=0; i < this._proportionallyResizeElements.length; i++) {
+-
+-			var prel = this._proportionallyResizeElements[i];
+-
+-			if (!this.borderDif) {
+-				var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
+-					p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
+-
+-				this.borderDif = $.map(b, function(v, i) {
+-					var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
+-					return border + padding;
+-				});
+-			}
+-
+-			if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
+-				continue;
+-
+-			prel.css({
+-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+-			});
+-
+-		};
+-
+-	},
+-
+-	_renderProxy: function() {
+-
+-		var el = this.element, o = this.options;
+-		this.elementOffset = el.offset();
+-
+-		if(this._helper) {
+-
+-			this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
+-
+-			// fix ie6 offset TODO: This seems broken
+-			var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
+-			pxyoffset = ( ie6 ? 2 : -1 );
+-
+-			this.helper.addClass(this._helper).css({
+-				width: this.element.outerWidth() + pxyoffset,
+-				height: this.element.outerHeight() + pxyoffset,
+-				position: 'absolute',
+-				left: this.elementOffset.left - ie6offset +'px',
+-				top: this.elementOffset.top - ie6offset +'px',
+-				zIndex: ++o.zIndex //TODO: Don't modify option
+-			});
+-
+-			this.helper
+-				.appendTo("body")
+-				.disableSelection();
+-
+-		} else {
+-			this.helper = this.element;
+-		}
+-
+-	},
+-
+-	_change: {
+-		e: function(event, dx, dy) {
+-			return { width: this.originalSize.width + dx };
+-		},
+-		w: function(event, dx, dy) {
+-			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+-			return { left: sp.left + dx, width: cs.width - dx };
+-		},
+-		n: function(event, dx, dy) {
+-			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+-			return { top: sp.top + dy, height: cs.height - dy };
+-		},
+-		s: function(event, dx, dy) {
+-			return { height: this.originalSize.height + dy };
+-		},
+-		se: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		sw: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		},
+-		ne: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		nw: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		}
+-	},
+-
+-	_propagate: function(n, event) {
+-		$.ui.plugin.call(this, n, [event, this.ui()]);
+-		(n != "resize" && this._trigger(n, event, this.ui()));
+-	},
+-
+-	plugins: {},
+-
+-	ui: function() {
+-		return {
+-			originalElement: this.originalElement,
+-			element: this.element,
+-			helper: this.helper,
+-			position: this.position,
+-			size: this.size,
+-			originalSize: this.originalSize,
+-			originalPosition: this.originalPosition
+-		};
+-	}
+-
+-});
+-
+-$.extend($.ui.resizable, {
+-	version: "1.8.15"
+-});
+-
+-/*
+- * Resizable Extensions
+- */
+-
+-$.ui.plugin.add("resizable", "alsoResize", {
+-
+-	start: function (event, ui) {
+-		var self = $(this).data("resizable"), o = self.options;
+-
+-		var _store = function (exp) {
+-			$(exp).each(function() {
+-				var el = $(this);
+-				el.data("resizable-alsoresize", {
+-					width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+-					left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10),
+-					position: el.css('position') // to reset Opera on stop()
+-				});
+-			});
+-		};
+-
+-		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
+-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+-		}else{
+-			_store(o.alsoResize);
+-		}
+-	},
+-
+-	resize: function (event, ui) {
+-		var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
+-
+-		var delta = {
+-			height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
+-			top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
+-		},
+-
+-		_alsoResize = function (exp, c) {
+-			$(exp).each(function() {
+-				var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, 
+-					css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
+-
+-				$.each(css, function (i, prop) {
+-					var sum = (start[prop]||0) + (delta[prop]||0);
+-					if (sum && sum >= 0)
+-						style[prop] = sum || null;
+-				});
+-
+-				// Opera fixing relative position
+-				if ($.browser.opera && /relative/.test(el.css('position'))) {
+-					self._revertToRelativePosition = true;
+-					el.css({ position: 'absolute', top: 'auto', left: 'auto' });
+-				}
+-
+-				el.css(style);
+-			});
+-		};
+-
+-		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+-		}else{
+-			_alsoResize(o.alsoResize);
+-		}
+-	},
+-
+-	stop: function (event, ui) {
+-		var self = $(this).data("resizable"), o = self.options;
+-
+-		var _reset = function (exp) {
+-			$(exp).each(function() {
+-				var el = $(this);
+-				// reset position for Opera - no need to verify it was changed
+-				el.css({ position: el.data("resizable-alsoresize").position });
+-			});
+-		};
+-
+-		if (self._revertToRelativePosition) {
+-			self._revertToRelativePosition = false;
+-			if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+-				$.each(o.alsoResize, function (exp) { _reset(exp); });
+-			}else{
+-				_reset(o.alsoResize);
+-			}
+-		}
+-
+-		$(this).removeData("resizable-alsoresize");
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "animate", {
+-
+-	stop: function(event, ui) {
+-		var self = $(this).data("resizable"), o = self.options;
+-
+-		var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-					soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+-						soffsetw = ista ? 0 : self.sizeDiff.width;
+-
+-		var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
+-					left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+-						top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+-
+-		self.element.animate(
+-			$.extend(style, top && left ? { top: top, left: left } : {}), {
+-				duration: o.animateDuration,
+-				easing: o.animateEasing,
+-				step: function() {
+-
+-					var data = {
+-						width: parseInt(self.element.css('width'), 10),
+-						height: parseInt(self.element.css('height'), 10),
+-						top: parseInt(self.element.css('top'), 10),
+-						left: parseInt(self.element.css('left'), 10)
+-					};
+-
+-					if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
+-
+-					// propagating resize, and updating values for each animation step
+-					self._updateCache(data);
+-					self._propagate("resize", event);
+-
+-				}
+-			}
+-		);
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "containment", {
+-
+-	start: function(event, ui) {
+-		var self = $(this).data("resizable"), o = self.options, el = self.element;
+-		var oc = o.containment,	ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+-		if (!ce) return;
+-
+-		self.containerElement = $(ce);
+-
+-		if (/document/.test(oc) || oc == document) {
+-			self.containerOffset = { left: 0, top: 0 };
+-			self.containerPosition = { left: 0, top: 0 };
+-
+-			self.parentData = {
+-				element: $(document), left: 0, top: 0,
+-				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+-			};
+-		}
+-
+-		// i'm a node, so compute top, left, right, bottom
+-		else {
+-			var element = $(ce), p = [];
+-			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+-
+-			self.containerOffset = element.offset();
+-			self.containerPosition = element.position();
+-			self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+-
+-			var co = self.containerOffset, ch = self.containerSize.height,	cw = self.containerSize.width,
+-						width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+-
+-			self.parentData = {
+-				element: ce, left: co.left, top: co.top, width: width, height: height
+-			};
+-		}
+-	},
+-
+-	resize: function(event, ui) {
+-		var self = $(this).data("resizable"), o = self.options,
+-				ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
+-				pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
+-
+-		if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
+-
+-		if (cp.left < (self._helper ? co.left : 0)) {
+-			self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
+-			if (pRatio) self.size.height = self.size.width / o.aspectRatio;
+-			self.position.left = o.helper ? co.left : 0;
+-		}
+-
+-		if (cp.top < (self._helper ? co.top : 0)) {
+-			self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
+-			if (pRatio) self.size.width = self.size.height * o.aspectRatio;
+-			self.position.top = self._helper ? co.top : 0;
+-		}
+-
+-		self.offset.left = self.parentData.left+self.position.left;
+-		self.offset.top = self.parentData.top+self.position.top;
+-
+-		var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
+-					hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
+-
+-		var isParent = self.containerElement.get(0) == self.element.parent().get(0),
+-		    isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
+-
+-		if(isParent && isOffsetRelative) woset -= self.parentData.left;
+-
+-		if (woset + self.size.width >= self.parentData.width) {
+-			self.size.width = self.parentData.width - woset;
+-			if (pRatio) self.size.height = self.size.width / self.aspectRatio;
+-		}
+-
+-		if (hoset + self.size.height >= self.parentData.height) {
+-			self.size.height = self.parentData.height - hoset;
+-			if (pRatio) self.size.width = self.size.height * self.aspectRatio;
+-		}
+-	},
+-
+-	stop: function(event, ui){
+-		var self = $(this).data("resizable"), o = self.options, cp = self.position,
+-				co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
+-
+-		var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
+-
+-		if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-
+-		if (self._helper && !o.animate && (/static/).test(ce.css('position')))
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "ghost", {
+-
+-	start: function(event, ui) {
+-
+-		var self = $(this).data("resizable"), o = self.options, cs = self.size;
+-
+-		self.ghost = self.originalElement.clone();
+-		self.ghost
+-			.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+-			.addClass('ui-resizable-ghost')
+-			.addClass(typeof o.ghost == 'string' ? o.ghost : '');
+-
+-		self.ghost.appendTo(self.helper);
+-
+-	},
+-
+-	resize: function(event, ui){
+-		var self = $(this).data("resizable"), o = self.options;
+-		if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
+-	},
+-
+-	stop: function(event, ui){
+-		var self = $(this).data("resizable"), o = self.options;
+-		if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "grid", {
+-
+-	resize: function(event, ui) {
+-		var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
+-		o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
+-		var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
+-
+-		if (/^(se|s|e)$/.test(a)) {
+-			self.size.width = os.width + ox;
+-			self.size.height = os.height + oy;
+-		}
+-		else if (/^(ne)$/.test(a)) {
+-			self.size.width = os.width + ox;
+-			self.size.height = os.height + oy;
+-			self.position.top = op.top - oy;
+-		}
+-		else if (/^(sw)$/.test(a)) {
+-			self.size.width = os.width + ox;
+-			self.size.height = os.height + oy;
+-			self.position.left = op.left - ox;
+-		}
+-		else {
+-			self.size.width = os.width + ox;
+-			self.size.height = os.height + oy;
+-			self.position.top = op.top - oy;
+-			self.position.left = op.left - ox;
+-		}
+-	}
+-
+-});
+-
+-var num = function(v) {
+-	return parseInt(v, 10) || 0;
+-};
+-
+-var isNumber = function(value) {
+-	return !isNaN(parseInt(value, 10));
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Selectable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Selectables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.selectable", $.ui.mouse, {
+-	options: {
+-		appendTo: 'body',
+-		autoRefresh: true,
+-		distance: 0,
+-		filter: '*',
+-		tolerance: 'touch'
+-	},
+-	_create: function() {
+-		var self = this;
+-
+-		this.element.addClass("ui-selectable");
+-
+-		this.dragged = false;
+-
+-		// cache selectee children based on filter
+-		var selectees;
+-		this.refresh = function() {
+-			selectees = $(self.options.filter, self.element[0]);
+-			selectees.each(function() {
+-				var $this = $(this);
+-				var pos = $this.offset();
+-				$.data(this, "selectable-item", {
+-					element: this,
+-					$element: $this,
+-					left: pos.left,
+-					top: pos.top,
+-					right: pos.left + $this.outerWidth(),
+-					bottom: pos.top + $this.outerHeight(),
+-					startselected: false,
+-					selected: $this.hasClass('ui-selected'),
+-					selecting: $this.hasClass('ui-selecting'),
+-					unselecting: $this.hasClass('ui-unselecting')
+-				});
+-			});
+-		};
+-		this.refresh();
+-
+-		this.selectees = selectees.addClass("ui-selectee");
+-
+-		this._mouseInit();
+-
+-		this.helper = $("<div class='ui-selectable-helper'></div>");
+-	},
+-
+-	destroy: function() {
+-		this.selectees
+-			.removeClass("ui-selectee")
+-			.removeData("selectable-item");
+-		this.element
+-			.removeClass("ui-selectable ui-selectable-disabled")
+-			.removeData("selectable")
+-			.unbind(".selectable");
+-		this._mouseDestroy();
+-
+-		return this;
+-	},
+-
+-	_mouseStart: function(event) {
+-		var self = this;
+-
+-		this.opos = [event.pageX, event.pageY];
+-
+-		if (this.options.disabled)
+-			return;
+-
+-		var options = this.options;
+-
+-		this.selectees = $(options.filter, this.element[0]);
+-
+-		this._trigger("start", event);
+-
+-		$(options.appendTo).append(this.helper);
+-		// position helper (lasso)
+-		this.helper.css({
+-			"left": event.clientX,
+-			"top": event.clientY,
+-			"width": 0,
+-			"height": 0
+-		});
+-
+-		if (options.autoRefresh) {
+-			this.refresh();
+-		}
+-
+-		this.selectees.filter('.ui-selected').each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.startselected = true;
+-			if (!event.metaKey) {
+-				selectee.$element.removeClass('ui-selected');
+-				selectee.selected = false;
+-				selectee.$element.addClass('ui-unselecting');
+-				selectee.unselecting = true;
+-				// selectable UNSELECTING callback
+-				self._trigger("unselecting", event, {
+-					unselecting: selectee.element
+-				});
+-			}
+-		});
+-
+-		$(event.target).parents().andSelf().each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			if (selectee) {
+-				var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected');
+-				selectee.$element
+-					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+-					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+-				selectee.unselecting = !doSelect;
+-				selectee.selecting = doSelect;
+-				selectee.selected = doSelect;
+-				// selectable (UN)SELECTING callback
+-				if (doSelect) {
+-					self._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				} else {
+-					self._trigger("unselecting", event, {
+-						unselecting: selectee.element
+-					});
+-				}
+-				return false;
+-			}
+-		});
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-		var self = this;
+-		this.dragged = true;
+-
+-		if (this.options.disabled)
+-			return;
+-
+-		var options = this.options;
+-
+-		var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
+-		if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
+-		if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
+-		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+-
+-		this.selectees.each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			//prevent helper from being selected if appendTo: selectable
+-			if (!selectee || selectee.element == self.element[0])
+-				return;
+-			var hit = false;
+-			if (options.tolerance == 'touch') {
+-				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+-			} else if (options.tolerance == 'fit') {
+-				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+-			}
+-
+-			if (hit) {
+-				// SELECT
+-				if (selectee.selected) {
+-					selectee.$element.removeClass('ui-selected');
+-					selectee.selected = false;
+-				}
+-				if (selectee.unselecting) {
+-					selectee.$element.removeClass('ui-unselecting');
+-					selectee.unselecting = false;
+-				}
+-				if (!selectee.selecting) {
+-					selectee.$element.addClass('ui-selecting');
+-					selectee.selecting = true;
+-					// selectable SELECTING callback
+-					self._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				}
+-			} else {
+-				// UNSELECT
+-				if (selectee.selecting) {
+-					if (event.metaKey && selectee.startselected) {
+-						selectee.$element.removeClass('ui-selecting');
+-						selectee.selecting = false;
+-						selectee.$element.addClass('ui-selected');
+-						selectee.selected = true;
+-					} else {
+-						selectee.$element.removeClass('ui-selecting');
+-						selectee.selecting = false;
+-						if (selectee.startselected) {
+-							selectee.$element.addClass('ui-unselecting');
+-							selectee.unselecting = true;
+-						}
+-						// selectable UNSELECTING callback
+-						self._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-				if (selectee.selected) {
+-					if (!event.metaKey && !selectee.startselected) {
+-						selectee.$element.removeClass('ui-selected');
+-						selectee.selected = false;
+-
+-						selectee.$element.addClass('ui-unselecting');
+-						selectee.unselecting = true;
+-						// selectable UNSELECTING callback
+-						self._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-			}
+-		});
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-		var self = this;
+-
+-		this.dragged = false;
+-
+-		var options = this.options;
+-
+-		$('.ui-unselecting', this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass('ui-unselecting');
+-			selectee.unselecting = false;
+-			selectee.startselected = false;
+-			self._trigger("unselected", event, {
+-				unselected: selectee.element
+-			});
+-		});
+-		$('.ui-selecting', this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
+-			selectee.selecting = false;
+-			selectee.selected = true;
+-			selectee.startselected = true;
+-			self._trigger("selected", event, {
+-				selected: selectee.element
+-			});
+-		});
+-		this._trigger("stop", event);
+-
+-		this.helper.remove();
+-
+-		return false;
+-	}
+-
+-});
+-
+-$.extend($.ui.selectable, {
+-	version: "1.8.15"
+-});
+-
+-})(jQuery);
+-/*
+- * jQuery UI Sortable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Sortables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.sortable", $.ui.mouse, {
+-	widgetEventPrefix: "sort",
+-	options: {
+-		appendTo: "parent",
+-		axis: false,
+-		connectWith: false,
+-		containment: false,
+-		cursor: 'auto',
+-		cursorAt: false,
+-		dropOnEmpty: true,
+-		forcePlaceholderSize: false,
+-		forceHelperSize: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		items: '> *',
+-		opacity: false,
+-		placeholder: false,
+-		revert: false,
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		scope: "default",
+-		tolerance: "intersect",
+-		zIndex: 1000
+-	},
+-	_create: function() {
+-
+-		var o = this.options;
+-		this.containerCache = {};
+-		this.element.addClass("ui-sortable");
+-
+-		//Get the items
+-		this.refresh();
+-
+-		//Let's determine if the items are being displayed horizontally
+-		this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
+-
+-		//Let's determine the parent's offset
+-		this.offset = this.element.offset();
+-
+-		//Initialize mouse events for interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	destroy: function() {
+-		this.element
+-			.removeClass("ui-sortable ui-sortable-disabled")
+-			.removeData("sortable")
+-			.unbind(".sortable");
+-		this._mouseDestroy();
+-
+-		for ( var i = this.items.length - 1; i >= 0; i-- )
+-			this.items[i].item.removeData("sortable-item");
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value){
+-		if ( key === "disabled" ) {
+-			this.options[ key ] = value;
+-	
+-			this.widget()
+-				[ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" );
+-		} else {
+-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
+-			$.Widget.prototype._setOption.apply(this, arguments);
+-		}
+-	},
+-
+-	_mouseCapture: function(event, overrideHandle) {
+-
+-		if (this.reverting) {
+-			return false;
+-		}
+-
+-		if(this.options.disabled || this.options.type == 'static') return false;
+-
+-		//We have to refresh the items data once first
+-		this._refreshItems(event);
+-
+-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+-		var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
+-			if($.data(this, 'sortable-item') == self) {
+-				currentItem = $(this);
+-				return false;
+-			}
+-		});
+-		if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target);
+-
+-		if(!currentItem) return false;
+-		if(this.options.handle && !overrideHandle) {
+-			var validHandle = false;
+-
+-			$(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
+-			if(!validHandle) return false;
+-		}
+-
+-		this.currentItem = currentItem;
+-		this._removeCurrentsFromItems();
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event, overrideHandle, noActivation) {
+-
+-		var o = this.options, self = this;
+-		this.currentContainer = this;
+-
+-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+-		this.refreshPositions();
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Get the next scrolling parent
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.currentItem.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		// Only after we got the offset, we can change the helper's position to absolute
+-		// TODO: Still need to figure out a way to make relative sorting possible
+-		this.helper.css("position", "absolute");
+-		this.cssPosition = this.helper.css("position");
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Cache the former DOM position
+-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+-
+-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+-		if(this.helper[0] != this.currentItem[0]) {
+-			this.currentItem.hide();
+-		}
+-
+-		//Create the placeholder
+-		this._createPlaceholder();
+-
+-		//Set a containment if given in the options
+-		if(o.containment)
+-			this._setContainment();
+-
+-		if(o.cursor) { // cursor option
+-			if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor");
+-			$('body').css("cursor", o.cursor);
+-		}
+-
+-		if(o.opacity) { // opacity option
+-			if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity");
+-			this.helper.css("opacity", o.opacity);
+-		}
+-
+-		if(o.zIndex) { // zIndex option
+-			if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex");
+-			this.helper.css("zIndex", o.zIndex);
+-		}
+-
+-		//Prepare scrolling
+-		if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
+-			this.overflowOffset = this.scrollParent.offset();
+-
+-		//Call callbacks
+-		this._trigger("start", event, this._uiHash());
+-
+-		//Recache the helper size
+-		if(!this._preserveHelperProportions)
+-			this._cacheHelperProportions();
+-
+-
+-		//Post 'activate' events to possible containers
+-		if(!noActivation) {
+-			 for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); }
+-		}
+-
+-		//Prepare possible droppables
+-		if($.ui.ddmanager)
+-			$.ui.ddmanager.current = this;
+-
+-		if ($.ui.ddmanager && !o.dropBehaviour)
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-
+-		this.dragging = true;
+-
+-		this.helper.addClass("ui-sortable-helper");
+-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		return true;
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		if (!this.lastPositionAbs) {
+-			this.lastPositionAbs = this.positionAbs;
+-		}
+-
+-		//Do scrolling
+-		if(this.options.scroll) {
+-			var o = this.options, scrolled = false;
+-			if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
+-
+-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+-				else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+-
+-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+-
+-			} else {
+-
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-
+-			}
+-
+-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
+-				$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-		//Regenerate the absolute position used for position checks
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Set the helper position
+-		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
+-		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
+-
+-		//Rearrange
+-		for (var i = this.items.length - 1; i >= 0; i--) {
+-
+-			//Cache variables and intersection, continue if no intersection
+-			var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
+-			if (!intersection) continue;
+-
+-			if(itemElement != this.currentItem[0] //cannot intersect with itself
+-				&&	this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
+-				&&	!$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
+-				&& (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
+-				//&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
+-			) {
+-
+-				this.direction = intersection == 1 ? "down" : "up";
+-
+-				if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
+-					this._rearrange(event, item);
+-				} else {
+-					break;
+-				}
+-
+-				this._trigger("change", event, this._uiHash());
+-				break;
+-			}
+-		}
+-
+-		//Post events to containers
+-		this._contactContainers(event);
+-
+-		//Interconnect with droppables
+-		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
+-
+-		//Call callbacks
+-		this._trigger('sort', event, this._uiHash());
+-
+-		this.lastPositionAbs = this.positionAbs;
+-		return false;
+-
+-	},
+-
+-	_mouseStop: function(event, noPropagation) {
+-
+-		if(!event) return;
+-
+-		//If we are using droppables, inform the manager about the drop
+-		if ($.ui.ddmanager && !this.options.dropBehaviour)
+-			$.ui.ddmanager.drop(this, event);
+-
+-		if(this.options.revert) {
+-			var self = this;
+-			var cur = self.placeholder.offset();
+-
+-			self.reverting = true;
+-
+-			$(this.helper).animate({
+-				left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
+-				top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
+-			}, parseInt(this.options.revert, 10) || 500, function() {
+-				self._clear(event);
+-			});
+-		} else {
+-			this._clear(event, noPropagation);
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	cancel: function() {
+-
+-		var self = this;
+-
+-		if(this.dragging) {
+-
+-			this._mouseUp({ target: null });
+-
+-			if(this.options.helper == "original")
+-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-			else
+-				this.currentItem.show();
+-
+-			//Post deactivating events to containers
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				this.containers[i]._trigger("deactivate", null, self._uiHash(this));
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", null, self._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		if (this.placeholder) {
+-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-			if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-			if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
+-
+-			$.extend(this, {
+-				helper: null,
+-				dragging: false,
+-				reverting: false,
+-				_noFinalSort: null
+-			});
+-
+-			if(this.domPosition.prev) {
+-				$(this.domPosition.prev).after(this.currentItem);
+-			} else {
+-				$(this.domPosition.parent).prepend(this.currentItem);
+-			}
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	serialize: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected);
+-		var str = []; o = o || {};
+-
+-		$(items).each(function() {
+-			var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
+-			if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
+-		});
+-
+-		if(!str.length && o.key) {
+-			str.push(o.key + '=');
+-		}
+-
+-		return str.join('&');
+-
+-	},
+-
+-	toArray: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected);
+-		var ret = []; o = o || {};
+-
+-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
+-		return ret;
+-
+-	},
+-
+-	/* Be careful with the following core functions */
+-	_intersectsWith: function(item) {
+-
+-		var x1 = this.positionAbs.left,
+-			x2 = x1 + this.helperProportions.width,
+-			y1 = this.positionAbs.top,
+-			y2 = y1 + this.helperProportions.height;
+-
+-		var l = item.left,
+-			r = l + item.width,
+-			t = item.top,
+-			b = t + item.height;
+-
+-		var dyClick = this.offset.click.top,
+-			dxClick = this.offset.click.left;
+-
+-		var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
+-
+-		if(	   this.options.tolerance == "pointer"
+-			|| this.options.forcePointerForContainers
+-			|| (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
+-		) {
+-			return isOverElement;
+-		} else {
+-
+-			return (l < x1 + (this.helperProportions.width / 2) // Right Half
+-				&& x2 - (this.helperProportions.width / 2) < r // Left Half
+-				&& t < y1 + (this.helperProportions.height / 2) // Bottom Half
+-				&& y2 - (this.helperProportions.height / 2) < b ); // Top Half
+-
+-		}
+-	},
+-
+-	_intersectsWithPointer: function(item) {
+-
+-		var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+-			isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+-			isOverElement = isOverElementHeight && isOverElementWidth,
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (!isOverElement)
+-			return false;
+-
+-		return this.floating ?
+-			( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
+-			: ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );
+-
+-	},
+-
+-	_intersectsWithSides: function(item) {
+-
+-		var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+-			isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (this.floating && horizontalDirection) {
+-			return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
+-		} else {
+-			return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
+-		}
+-
+-	},
+-
+-	_getDragVerticalDirection: function() {
+-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+-		return delta != 0 && (delta > 0 ? "down" : "up");
+-	},
+-
+-	_getDragHorizontalDirection: function() {
+-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+-		return delta != 0 && (delta > 0 ? "right" : "left");
+-	},
+-
+-	refresh: function(event) {
+-		this._refreshItems(event);
+-		this.refreshPositions();
+-		return this;
+-	},
+-
+-	_connectWith: function() {
+-		var options = this.options;
+-		return options.connectWith.constructor == String
+-			? [options.connectWith]
+-			: options.connectWith;
+-	},
+-	
+-	_getItemsAsjQuery: function(connected) {
+-
+-		var self = this;
+-		var items = [];
+-		var queries = [];
+-		var connectWith = this._connectWith();
+-
+-		if(connectWith && connected) {
+-			for (var i = connectWith.length - 1; i >= 0; i--){
+-				var cur = $(connectWith[i]);
+-				for (var j = cur.length - 1; j >= 0; j--){
+-					var inst = $.data(cur[j], 'sortable');
+-					if(inst && inst != this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]);
+-					}
+-				};
+-			};
+-		}
+-
+-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]);
+-
+-		for (var i = queries.length - 1; i >= 0; i--){
+-			queries[i][0].each(function() {
+-				items.push(this);
+-			});
+-		};
+-
+-		return $(items);
+-
+-	},
+-
+-	_removeCurrentsFromItems: function() {
+-
+-		var list = this.currentItem.find(":data(sortable-item)");
+-
+-		for (var i=0; i < this.items.length; i++) {
+-
+-			for (var j=0; j < list.length; j++) {
+-				if(list[j] == this.items[i].item[0])
+-					this.items.splice(i,1);
+-			};
+-
+-		};
+-
+-	},
+-
+-	_refreshItems: function(event) {
+-
+-		this.items = [];
+-		this.containers = [this];
+-		var items = this.items;
+-		var self = this;
+-		var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
+-		var connectWith = this._connectWith();
+-
+-		if(connectWith) {
+-			for (var i = connectWith.length - 1; i >= 0; i--){
+-				var cur = $(connectWith[i]);
+-				for (var j = cur.length - 1; j >= 0; j--){
+-					var inst = $.data(cur[j], 'sortable');
+-					if(inst && inst != this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+-						this.containers.push(inst);
+-					}
+-				};
+-			};
+-		}
+-
+-		for (var i = queries.length - 1; i >= 0; i--) {
+-			var targetData = queries[i][1];
+-			var _queries = queries[i][0];
+-
+-			for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+-				var item = $(_queries[j]);
+-
+-				item.data('sortable-item', targetData); // Data for target checking (mouse manager)
+-
+-				items.push({
+-					item: item,
+-					instance: targetData,
+-					width: 0, height: 0,
+-					left: 0, top: 0
+-				});
+-			};
+-		};
+-
+-	},
+-
+-	refreshPositions: function(fast) {
+-
+-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+-		if(this.offsetParent && this.helper) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		for (var i = this.items.length - 1; i >= 0; i--){
+-			var item = this.items[i];
+-
+-			//We ignore calculating positions of all connected containers when we're not over them
+-			if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
+-				continue;
+-
+-			var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+-
+-			if (!fast) {
+-				item.width = t.outerWidth();
+-				item.height = t.outerHeight();
+-			}
+-
+-			var p = t.offset();
+-			item.left = p.left;
+-			item.top = p.top;
+-		};
+-
+-		if(this.options.custom && this.options.custom.refreshContainers) {
+-			this.options.custom.refreshContainers.call(this);
+-		} else {
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				var p = this.containers[i].element.offset();
+-				this.containers[i].containerCache.left = p.left;
+-				this.containers[i].containerCache.top = p.top;
+-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
+-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+-			};
+-		}
+-
+-		return this;
+-	},
+-
+-	_createPlaceholder: function(that) {
+-
+-		var self = that || this, o = self.options;
+-
+-		if(!o.placeholder || o.placeholder.constructor == String) {
+-			var className = o.placeholder;
+-			o.placeholder = {
+-				element: function() {
+-
+-					var el = $(document.createElement(self.currentItem[0].nodeName))
+-						.addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
+-						.removeClass("ui-sortable-helper")[0];
+-
+-					if(!className)
+-						el.style.visibility = "hidden";
+-
+-					return el;
+-				},
+-				update: function(container, p) {
+-
+-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+-					if(className && !o.forcePlaceholderSize) return;
+-
+-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+-					if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
+-					if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
+-				}
+-			};
+-		}
+-
+-		//Create the placeholder
+-		self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
+-
+-		//Append it after the actual current item
+-		self.currentItem.after(self.placeholder);
+-
+-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+-		o.placeholder.update(self, self.placeholder);
+-
+-	},
+-
+-	_contactContainers: function(event) {
+-		
+-		// get innermost container that intersects with item 
+-		var innermostContainer = null, innermostIndex = null;		
+-		
+-		
+-		for (var i = this.containers.length - 1; i >= 0; i--){
+-
+-			// never consider a container that's located within the item itself 
+-			if($.ui.contains(this.currentItem[0], this.containers[i].element[0]))
+-				continue;
+-
+-			if(this._intersectsWith(this.containers[i].containerCache)) {
+-
+-				// if we've already found a container and it's more "inner" than this, then continue 
+-				if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0]))
+-					continue;
+-
+-				innermostContainer = this.containers[i]; 
+-				innermostIndex = i;
+-					
+-			} else {
+-				// container doesn't intersect. trigger "out" event if necessary 
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", event, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-		
+-		// if no intersecting containers found, return 
+-		if(!innermostContainer) return; 
+-
+-		// move the item into the container if it's not there already
+-		if(this.containers.length === 1) {
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		} else if(this.currentContainer != this.containers[innermostIndex]) { 
+-
+-			//When entering a new container, we will find the item with the least distance and append our item near it 
+-			var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; 
+-			for (var j = this.items.length - 1; j >= 0; j--) { 
+-				if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; 
+-				var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; 
+-				if(Math.abs(cur - base) < dist) { 
+-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; 
+-				} 
+-			} 
+-
+-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled 
+-				return; 
+-
+-			this.currentContainer = this.containers[innermostIndex]; 
+-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); 
+-			this._trigger("change", event, this._uiHash()); 
+-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); 
+-
+-			//Update the placeholder 
+-			this.options.placeholder.update(this.currentContainer, this.placeholder); 
+-		
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); 
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		} 
+-	
+-		
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options;
+-		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
+-
+-		if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
+-			$(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+-
+-		if(helper[0] == this.currentItem[0])
+-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+-
+-		if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
+-		if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj == 'string') {
+-			obj = obj.split(' ');
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ('left' in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ('right' in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ('top' in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ('bottom' in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+-			po = { top: 0, left: 0 };
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition == "relative") {
+-			var p = this.currentItem.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var o = this.options;
+-		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
+-		if(o.containment == 'document' || o.containment == 'window') this.containment = [
+-			0 - this.offset.relative.left - this.offset.parent.left,
+-			0 - this.offset.relative.top - this.offset.parent.top,
+-			$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
+-			($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-		];
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment)) {
+-			var ce = $(o.containment)[0];
+-			var co = $(o.containment).offset();
+-			var over = ($(ce).css("overflow") != 'hidden');
+-
+-			this.containment = [
+-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) pos = this.position;
+-		var mod = d == "absolute" ? 1 : -1;
+-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top																	// The absolute mouse position
+-				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
+-				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left																// The absolute mouse position
+-				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
+-				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		// This is another very weird special case that only happens for relative elements:
+-		// 1. If the css position is relative
+-		// 2. and the scroll parent is the document or similar to the offset parent
+-		// we have to refresh the relative offset during the scroll so there are no jumps
+-		if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
+-			this.offset.relative = this._getRelativeOffset();
+-		}
+-
+-		var pageX = event.pageX;
+-		var pageY = event.pageY;
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-
+-			if(this.containment) {
+-				if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
+-				if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
+-				if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
+-				if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
+-			}
+-
+-			if(o.grid) {
+-				var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+-				pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+-				pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY																// The absolute mouse position
+-				- this.offset.click.top													// Click offset (relative to the element)
+-				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
+-				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX																// The absolute mouse position
+-				- this.offset.click.left												// Click offset (relative to the element)
+-				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
+-				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_rearrange: function(event, i, a, hardRefresh) {
+-
+-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
+-
+-		//Various things done here to improve the performance:
+-		// 1. we create a setTimeout, that calls refreshPositions
+-		// 2. on the instance, we have a counter variable, that get's higher after every append
+-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+-		// 4. this lets only the last addition to the timeout stack through
+-		this.counter = this.counter ? ++this.counter : 1;
+-		var self = this, counter = this.counter;
+-
+-		window.setTimeout(function() {
+-			if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+-		},0);
+-
+-	},
+-
+-	_clear: function(event, noPropagation) {
+-
+-		this.reverting = false;
+-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+-		// everything else normalized again
+-		var delayedTriggers = [], self = this;
+-
+-		// We first have to update the dom position of the actual currentItem
+-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+-		if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem);
+-		this._noFinalSort = null;
+-
+-		if(this.helper[0] == this.currentItem[0]) {
+-			for(var i in this._storedCSS) {
+-				if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
+-			}
+-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-		} else {
+-			this.currentItem.show();
+-		}
+-
+-		if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+-		if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+-		if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element
+-			if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) {
+-					delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-					delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.containers[i]));
+-				}
+-			};
+-		};
+-
+-		//Post events to containers
+-		for (var i = this.containers.length - 1; i >= 0; i--){
+-			if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-			if(this.containers[i].containerCache.over) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-				this.containers[i].containerCache.over = 0;
+-			}
+-		}
+-
+-		//Do what was originally in plugins
+-		if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor
+-		if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity
+-		if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index
+-
+-		this.dragging = false;
+-		if(this.cancelHelperRemoval) {
+-			if(!noPropagation) {
+-				this._trigger("beforeStop", event, this._uiHash());
+-				for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
+-				this._trigger("stop", event, this._uiHash());
+-			}
+-			return false;
+-		}
+-
+-		if(!noPropagation) this._trigger("beforeStop", event, this._uiHash());
+-
+-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-
+-		if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
+-
+-		if(!noPropagation) {
+-			for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
+-			this._trigger("stop", event, this._uiHash());
+-		}
+-
+-		this.fromOutside = false;
+-		return true;
+-
+-	},
+-
+-	_trigger: function() {
+-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+-			this.cancel();
+-		}
+-	},
+-
+-	_uiHash: function(inst) {
+-		var self = inst || this;
+-		return {
+-			helper: self.helper,
+-			placeholder: self.placeholder || $([]),
+-			position: self.position,
+-			originalPosition: self.originalPosition,
+-			offset: self.positionAbs,
+-			item: self.currentItem,
+-			sender: inst ? inst.element : null
+-		};
+-	}
+-
+-});
+-
+-$.extend($.ui.sortable, {
+-	version: "1.8.15"
+-});
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/
+- */
+-;jQuery.effects || (function($, undefined) {
+-
+-$.effects = {};
+-
+-
+-
+-/******************************************************************************/
+-/****************************** COLOR ANIMATIONS ******************************/
+-/******************************************************************************/
+-
+-// override the animation for color styles
+-$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',
+-	'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'],
+-function(i, attr) {
+-	$.fx.step[attr] = function(fx) {
+-		if (!fx.colorInit) {
+-			fx.start = getColor(fx.elem, attr);
+-			fx.end = getRGB(fx.end);
+-			fx.colorInit = true;
+-		}
+-
+-		fx.elem.style[attr] = 'rgb(' +
+-			Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +
+-			Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +
+-			Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';
+-	};
+-});
+-
+-// Color Conversion functions from highlightFade
+-// By Blair Mitchelmore
+-// http://jquery.offput.ca/highlightFade/
+-
+-// Parse strings looking for color tuples [255,255,255]
+-function getRGB(color) {
+-		var result;
+-
+-		// Check if we're already dealing with an array of colors
+-		if ( color && color.constructor == Array && color.length == 3 )
+-				return color;
+-
+-		// Look for rgb(num,num,num)
+-		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
+-				return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
+-
+-		// Look for rgb(num%,num%,num%)
+-		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
+-				return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
+-
+-		// Look for #a0b1c2
+-		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
+-				return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
+-
+-		// Look for #fff
+-		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
+-				return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
+-
+-		// Look for rgba(0, 0, 0, 0) == transparent in Safari 3
+-		if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
+-				return colors['transparent'];
+-
+-		// Otherwise, we're most likely dealing with a named color
+-		return colors[$.trim(color).toLowerCase()];
+-}
+-
+-function getColor(elem, attr) {
+-		var color;
+-
+-		do {
+-				color = $.curCSS(elem, attr);
+-
+-				// Keep going until we find an element that has color, or we hit the body
+-				if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
+-						break;
+-
+-				attr = "backgroundColor";
+-		} while ( elem = elem.parentNode );
+-
+-		return getRGB(color);
+-};
+-
+-// Some named colors to work with
+-// From Interface by Stefan Petre
+-// http://interface.eyecon.ro/
+-
+-var colors = {
+-	aqua:[0,255,255],
+-	azure:[240,255,255],
+-	beige:[245,245,220],
+-	black:[0,0,0],
+-	blue:[0,0,255],
+-	brown:[165,42,42],
+-	cyan:[0,255,255],
+-	darkblue:[0,0,139],
+-	darkcyan:[0,139,139],
+-	darkgrey:[169,169,169],
+-	darkgreen:[0,100,0],
+-	darkkhaki:[189,183,107],
+-	darkmagenta:[139,0,139],
+-	darkolivegreen:[85,107,47],
+-	darkorange:[255,140,0],
+-	darkorchid:[153,50,204],
+-	darkred:[139,0,0],
+-	darksalmon:[233,150,122],
+-	darkviolet:[148,0,211],
+-	fuchsia:[255,0,255],
+-	gold:[255,215,0],
+-	green:[0,128,0],
+-	indigo:[75,0,130],
+-	khaki:[240,230,140],
+-	lightblue:[173,216,230],
+-	lightcyan:[224,255,255],
+-	lightgreen:[144,238,144],
+-	lightgrey:[211,211,211],
+-	lightpink:[255,182,193],
+-	lightyellow:[255,255,224],
+-	lime:[0,255,0],
+-	magenta:[255,0,255],
+-	maroon:[128,0,0],
+-	navy:[0,0,128],
+-	olive:[128,128,0],
+-	orange:[255,165,0],
+-	pink:[255,192,203],
+-	purple:[128,0,128],
+-	violet:[128,0,128],
+-	red:[255,0,0],
+-	silver:[192,192,192],
+-	white:[255,255,255],
+-	yellow:[255,255,0],
+-	transparent: [255,255,255]
+-};
+-
+-
+-
+-/******************************************************************************/
+-/****************************** CLASS ANIMATIONS ******************************/
+-/******************************************************************************/
+-
+-var classAnimationActions = ['add', 'remove', 'toggle'],
+-	shorthandStyles = {
+-		border: 1,
+-		borderBottom: 1,
+-		borderColor: 1,
+-		borderLeft: 1,
+-		borderRight: 1,
+-		borderTop: 1,
+-		borderWidth: 1,
+-		margin: 1,
+-		padding: 1
+-	};
+-
+-function getElementStyles() {
+-	var style = document.defaultView
+-			? document.defaultView.getComputedStyle(this, null)
+-			: this.currentStyle,
+-		newStyle = {},
+-		key,
+-		camelCase;
+-
+-	// webkit enumerates style porperties
+-	if (style && style.length && style[0] && style[style[0]]) {
+-		var len = style.length;
+-		while (len--) {
+-			key = style[len];
+-			if (typeof style[key] == 'string') {
+-				camelCase = key.replace(/\-(\w)/g, function(all, letter){
+-					return letter.toUpperCase();
+-				});
+-				newStyle[camelCase] = style[key];
+-			}
+-		}
+-	} else {
+-		for (key in style) {
+-			if (typeof style[key] === 'string') {
+-				newStyle[key] = style[key];
+-			}
+-		}
+-	}
+-	
+-	return newStyle;
+-}
+-
+-function filterStyles(styles) {
+-	var name, value;
+-	for (name in styles) {
+-		value = styles[name];
+-		if (
+-			// ignore null and undefined values
+-			value == null ||
+-			// ignore functions (when does this occur?)
+-			$.isFunction(value) ||
+-			// shorthand styles that need to be expanded
+-			name in shorthandStyles ||
+-			// ignore scrollbars (break in IE)
+-			(/scrollbar/).test(name) ||
+-
+-			// only colors or values that can be converted to numbers
+-			(!(/color/i).test(name) && isNaN(parseFloat(value)))
+-		) {
+-			delete styles[name];
+-		}
+-	}
+-	
+-	return styles;
+-}
+-
+-function styleDifference(oldStyle, newStyle) {
+-	var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459
+-		name;
+-
+-	for (name in newStyle) {
+-		if (oldStyle[name] != newStyle[name]) {
+-			diff[name] = newStyle[name];
+-		}
+-	}
+-
+-	return diff;
+-}
+-
+-$.effects.animateClass = function(value, duration, easing, callback) {
+-	if ($.isFunction(easing)) {
+-		callback = easing;
+-		easing = null;
+-	}
+-
+-	return this.queue(function() {
+-		var that = $(this),
+-			originalStyleAttr = that.attr('style') || ' ',
+-			originalStyle = filterStyles(getElementStyles.call(this)),
+-			newStyle,
+-			className = that.attr('class');
+-
+-		$.each(classAnimationActions, function(i, action) {
+-			if (value[action]) {
+-				that[action + 'Class'](value[action]);
+-			}
+-		});
+-		newStyle = filterStyles(getElementStyles.call(this));
+-		that.attr('class', className);
+-
+-		that.animate(styleDifference(originalStyle, newStyle), {
+-			queue: false,
+-			duration: duration,
+-			easing: easing,
+-			complete: function() {
+-				$.each(classAnimationActions, function(i, action) {
+-					if (value[action]) { that[action + 'Class'](value[action]); }
+-				});
+-				// work around bug in IE by clearing the cssText before setting it
+-				if (typeof that.attr('style') == 'object') {
+-					that.attr('style').cssText = '';
+-					that.attr('style').cssText = originalStyleAttr;
+-				} else {
+-					that.attr('style', originalStyleAttr);
+-				}
+-				if (callback) { callback.apply(this, arguments); }
+-				$.dequeue( this );
+-			}
+-		});
+-	});
+-};
+-
+-$.fn.extend({
+-	_addClass: $.fn.addClass,
+-	addClass: function(classNames, speed, easing, callback) {
+-		return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
+-	},
+-
+-	_removeClass: $.fn.removeClass,
+-	removeClass: function(classNames,speed,easing,callback) {
+-		return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
+-	},
+-
+-	_toggleClass: $.fn.toggleClass,
+-	toggleClass: function(classNames, force, speed, easing, callback) {
+-		if ( typeof force == "boolean" || force === undefined ) {
+-			if ( !speed ) {
+-				// without speed parameter;
+-				return this._toggleClass(classNames, force);
+-			} else {
+-				return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);
+-			}
+-		} else {
+-			// without switch parameter;
+-			return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);
+-		}
+-	},
+-
+-	switchClass: function(remove,add,speed,easing,callback) {
+-		return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
+-	}
+-});
+-
+-
+-
+-/******************************************************************************/
+-/*********************************** EFFECTS **********************************/
+-/******************************************************************************/
+-
+-$.extend($.effects, {
+-	version: "1.8.15",
+-
+-	// Saves a set of properties in a data storage
+-	save: function(element, set) {
+-		for(var i=0; i < set.length; i++) {
+-			if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
+-		}
+-	},
+-
+-	// Restores a set of previously saved properties from a data storage
+-	restore: function(element, set) {
+-		for(var i=0; i < set.length; i++) {
+-			if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
+-		}
+-	},
+-
+-	setMode: function(el, mode) {
+-		if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
+-		return mode;
+-	},
+-
+-	getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
+-		// this should be a little more flexible in the future to handle a string & hash
+-		var y, x;
+-		switch (origin[0]) {
+-			case 'top': y = 0; break;
+-			case 'middle': y = 0.5; break;
+-			case 'bottom': y = 1; break;
+-			default: y = origin[0] / original.height;
+-		};
+-		switch (origin[1]) {
+-			case 'left': x = 0; break;
+-			case 'center': x = 0.5; break;
+-			case 'right': x = 1; break;
+-			default: x = origin[1] / original.width;
+-		};
+-		return {x: x, y: y};
+-	},
+-
+-	// Wraps the element around a wrapper that copies position properties
+-	createWrapper: function(element) {
+-
+-		// if the element is already wrapped, return it
+-		if (element.parent().is('.ui-effects-wrapper')) {
+-			return element.parent();
+-		}
+-
+-		// wrap the element
+-		var props = {
+-				width: element.outerWidth(true),
+-				height: element.outerHeight(true),
+-				'float': element.css('float')
+-			},
+-			wrapper = $('<div></div>')
+-				.addClass('ui-effects-wrapper')
+-				.css({
+-					fontSize: '100%',
+-					background: 'transparent',
+-					border: 'none',
+-					margin: 0,
+-					padding: 0
+-				});
+-
+-		element.wrap(wrapper);
+-		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
+-
+-		// transfer positioning properties to the wrapper
+-		if (element.css('position') == 'static') {
+-			wrapper.css({ position: 'relative' });
+-			element.css({ position: 'relative' });
+-		} else {
+-			$.extend(props, {
+-				position: element.css('position'),
+-				zIndex: element.css('z-index')
+-			});
+-			$.each(['top', 'left', 'bottom', 'right'], function(i, pos) {
+-				props[pos] = element.css(pos);
+-				if (isNaN(parseInt(props[pos], 10))) {
+-					props[pos] = 'auto';
+-				}
+-			});
+-			element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' });
+-		}
+-
+-		return wrapper.css(props).show();
+-	},
+-
+-	removeWrapper: function(element) {
+-		if (element.parent().is('.ui-effects-wrapper'))
+-			return element.parent().replaceWith(element);
+-		return element;
+-	},
+-
+-	setTransition: function(element, list, factor, value) {
+-		value = value || {};
+-		$.each(list, function(i, x){
+-			unit = element.cssUnit(x);
+-			if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
+-		});
+-		return value;
+-	}
+-});
+-
+-
+-function _normalizeArguments(effect, options, speed, callback) {
+-	// shift params for method overloading
+-	if (typeof effect == 'object') {
+-		callback = options;
+-		speed = null;
+-		options = effect;
+-		effect = options.effect;
+-	}
+-	if ($.isFunction(options)) {
+-		callback = options;
+-		speed = null;
+-		options = {};
+-	}
+-        if (typeof options == 'number' || $.fx.speeds[options]) {
+-		callback = speed;
+-		speed = options;
+-		options = {};
+-	}
+-	if ($.isFunction(speed)) {
+-		callback = speed;
+-		speed = null;
+-	}
+-
+-	options = options || {};
+-
+-	speed = speed || options.duration;
+-	speed = $.fx.off ? 0 : typeof speed == 'number'
+-		? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default;
+-
+-	callback = callback || options.complete;
+-
+-	return [effect, options, speed, callback];
+-}
+-
+-function standardSpeed( speed ) {
+-	// valid standard speeds
+-	if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
+-		return true;
+-	}
+-	
+-	// invalid strings - treat as "normal" speed
+-	if ( typeof speed === "string" && !$.effects[ speed ] ) {
+-		return true;
+-	}
+-	
+-	return false;
+-}
+-
+-$.fn.extend({
+-	effect: function(effect, options, speed, callback) {
+-		var args = _normalizeArguments.apply(this, arguments),
+-			// TODO: make effects take actual parameters instead of a hash
+-			args2 = {
+-				options: args[1],
+-				duration: args[2],
+-				callback: args[3]
+-			},
+-			mode = args2.options.mode,
+-			effectMethod = $.effects[effect];
+-		
+-		if ( $.fx.off || !effectMethod ) {
+-			// delegate to the original method (e.g., .show()) if possible
+-			if ( mode ) {
+-				return this[ mode ]( args2.duration, args2.callback );
+-			} else {
+-				return this.each(function() {
+-					if ( args2.callback ) {
+-						args2.callback.call( this );
+-					}
+-				});
+-			}
+-		}
+-		
+-		return effectMethod.call(this, args2);
+-	},
+-
+-	_show: $.fn.show,
+-	show: function(speed) {
+-		if ( standardSpeed( speed ) ) {
+-			return this._show.apply(this, arguments);
+-		} else {
+-			var args = _normalizeArguments.apply(this, arguments);
+-			args[1].mode = 'show';
+-			return this.effect.apply(this, args);
+-		}
+-	},
+-
+-	_hide: $.fn.hide,
+-	hide: function(speed) {
+-		if ( standardSpeed( speed ) ) {
+-			return this._hide.apply(this, arguments);
+-		} else {
+-			var args = _normalizeArguments.apply(this, arguments);
+-			args[1].mode = 'hide';
+-			return this.effect.apply(this, args);
+-		}
+-	},
+-
+-	// jQuery core overloads toggle and creates _toggle
+-	__toggle: $.fn.toggle,
+-	toggle: function(speed) {
+-		if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
+-			return this.__toggle.apply(this, arguments);
+-		} else {
+-			var args = _normalizeArguments.apply(this, arguments);
+-			args[1].mode = 'toggle';
+-			return this.effect.apply(this, args);
+-		}
+-	},
+-
+-	// helper functions
+-	cssUnit: function(key) {
+-		var style = this.css(key), val = [];
+-		$.each( ['em','px','%','pt'], function(i, unit){
+-			if(style.indexOf(unit) > 0)
+-				val = [parseFloat(style), unit];
+-		});
+-		return val;
+-	}
+-});
+-
+-
+-
+-/******************************************************************************/
+-/*********************************** EASING ***********************************/
+-/******************************************************************************/
+-
+-/*
+- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+- *
+- * Uses the built in easing capabilities added In jQuery 1.1
+- * to offer multiple easing options
+- *
+- * TERMS OF USE - jQuery Easing
+- *
+- * Open source under the BSD License.
+- *
+- * Copyright 2008 George McGinley Smith
+- * All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without modification,
+- * are permitted provided that the following conditions are met:
+- *
+- * Redistributions of source code must retain the above copyright notice, this list of
+- * conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above copyright notice, this list
+- * of conditions and the following disclaimer in the documentation and/or other materials
+- * provided with the distribution.
+- *
+- * Neither the name of the author nor the names of contributors may be used to endorse
+- * or promote products derived from this software without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+- * OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+-*/
+-
+-// t: current time, b: begInnIng value, c: change In value, d: duration
+-$.easing.jswing = $.easing.swing;
+-
+-$.extend($.easing,
+-{
+-	def: 'easeOutQuad',
+-	swing: function (x, t, b, c, d) {
+-		//alert($.easing.default);
+-		return $.easing[$.easing.def](x, t, b, c, d);
+-	},
+-	easeInQuad: function (x, t, b, c, d) {
+-		return c*(t/=d)*t + b;
+-	},
+-	easeOutQuad: function (x, t, b, c, d) {
+-		return -c *(t/=d)*(t-2) + b;
+-	},
+-	easeInOutQuad: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return c/2*t*t + b;
+-		return -c/2 * ((--t)*(t-2) - 1) + b;
+-	},
+-	easeInCubic: function (x, t, b, c, d) {
+-		return c*(t/=d)*t*t + b;
+-	},
+-	easeOutCubic: function (x, t, b, c, d) {
+-		return c*((t=t/d-1)*t*t + 1) + b;
+-	},
+-	easeInOutCubic: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return c/2*t*t*t + b;
+-		return c/2*((t-=2)*t*t + 2) + b;
+-	},
+-	easeInQuart: function (x, t, b, c, d) {
+-		return c*(t/=d)*t*t*t + b;
+-	},
+-	easeOutQuart: function (x, t, b, c, d) {
+-		return -c * ((t=t/d-1)*t*t*t - 1) + b;
+-	},
+-	easeInOutQuart: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+-		return -c/2 * ((t-=2)*t*t*t - 2) + b;
+-	},
+-	easeInQuint: function (x, t, b, c, d) {
+-		return c*(t/=d)*t*t*t*t + b;
+-	},
+-	easeOutQuint: function (x, t, b, c, d) {
+-		return c*((t=t/d-1)*t*t*t*t + 1) + b;
+-	},
+-	easeInOutQuint: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+-		return c/2*((t-=2)*t*t*t*t + 2) + b;
+-	},
+-	easeInSine: function (x, t, b, c, d) {
+-		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+-	},
+-	easeOutSine: function (x, t, b, c, d) {
+-		return c * Math.sin(t/d * (Math.PI/2)) + b;
+-	},
+-	easeInOutSine: function (x, t, b, c, d) {
+-		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+-	},
+-	easeInExpo: function (x, t, b, c, d) {
+-		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+-	},
+-	easeOutExpo: function (x, t, b, c, d) {
+-		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+-	},
+-	easeInOutExpo: function (x, t, b, c, d) {
+-		if (t==0) return b;
+-		if (t==d) return b+c;
+-		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+-		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+-	},
+-	easeInCirc: function (x, t, b, c, d) {
+-		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+-	},
+-	easeOutCirc: function (x, t, b, c, d) {
+-		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+-	},
+-	easeInOutCirc: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+-		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+-	},
+-	easeInElastic: function (x, t, b, c, d) {
+-		var s=1.70158;var p=0;var a=c;
+-		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
+-		if (a < Math.abs(c)) { a=c; var s=p/4; }
+-		else var s = p/(2*Math.PI) * Math.asin (c/a);
+-		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+-	},
+-	easeOutElastic: function (x, t, b, c, d) {
+-		var s=1.70158;var p=0;var a=c;
+-		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
+-		if (a < Math.abs(c)) { a=c; var s=p/4; }
+-		else var s = p/(2*Math.PI) * Math.asin (c/a);
+-		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+-	},
+-	easeInOutElastic: function (x, t, b, c, d) {
+-		var s=1.70158;var p=0;var a=c;
+-		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
+-		if (a < Math.abs(c)) { a=c; var s=p/4; }
+-		else var s = p/(2*Math.PI) * Math.asin (c/a);
+-		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+-		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+-	},
+-	easeInBack: function (x, t, b, c, d, s) {
+-		if (s == undefined) s = 1.70158;
+-		return c*(t/=d)*t*((s+1)*t - s) + b;
+-	},
+-	easeOutBack: function (x, t, b, c, d, s) {
+-		if (s == undefined) s = 1.70158;
+-		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+-	},
+-	easeInOutBack: function (x, t, b, c, d, s) {
+-		if (s == undefined) s = 1.70158;
+-		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+-		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+-	},
+-	easeInBounce: function (x, t, b, c, d) {
+-		return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+-	},
+-	easeOutBounce: function (x, t, b, c, d) {
+-		if ((t/=d) < (1/2.75)) {
+-			return c*(7.5625*t*t) + b;
+-		} else if (t < (2/2.75)) {
+-			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+-		} else if (t < (2.5/2.75)) {
+-			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+-		} else {
+-			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+-		}
+-	},
+-	easeInOutBounce: function (x, t, b, c, d) {
+-		if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+-		return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+-	}
+-});
+-
+-/*
+- *
+- * TERMS OF USE - EASING EQUATIONS
+- *
+- * Open source under the BSD License.
+- *
+- * Copyright 2001 Robert Penner
+- * All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without modification,
+- * are permitted provided that the following conditions are met:
+- *
+- * Redistributions of source code must retain the above copyright notice, this list of
+- * conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above copyright notice, this list
+- * of conditions and the following disclaimer in the documentation and/or other materials
+- * provided with the distribution.
+- *
+- * Neither the name of the author nor the names of contributors may be used to endorse
+- * or promote products derived from this software without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+- * OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- */
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Blind 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Blind
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.blind = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+-		var direction = o.options.direction || 'vertical'; // Default direction
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+-		var ref = (direction == 'vertical') ? 'height' : 'width';
+-		var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
+-		if(mode == 'show') wrapper.css(ref, 0); // Shift
+-
+-		// Animation
+-		var animation = {};
+-		animation[ref] = mode == 'show' ? distance : 0;
+-
+-		// Animate
+-		wrapper.animate(animation, o.duration, o.options.easing, function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(el[0], arguments); // Callback
+-			el.dequeue();
+-		});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Bounce 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Bounce
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.bounce = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+-		var direction = o.options.direction || 'up'; // Default direction
+-		var distance = o.options.distance || 20; // Default distance
+-		var times = o.options.times || 5; // Default # of times
+-		var speed = o.duration || 250; // Default speed per bounce
+-		if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		$.effects.createWrapper(el); // Create Wrapper
+-		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+-		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+-		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3);
+-		if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
+-		if (mode == 'hide') distance = distance / (times * 2);
+-		if (mode != 'hide') times--;
+-
+-		// Animate
+-		if (mode == 'show') { // Show Bounce
+-			var animation = {opacity: 1};
+-			animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+-			el.animate(animation, speed / 2, o.options.easing);
+-			distance = distance / 2;
+-			times--;
+-		};
+-		for (var i = 0; i < times; i++) { // Bounces
+-			var animation1 = {}, animation2 = {};
+-			animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
+-			animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+-			el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
+-			distance = (mode == 'hide') ? distance * 2 : distance / 2;
+-		};
+-		if (mode == 'hide') { // Last Bounce
+-			var animation = {opacity: 0};
+-			animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
+-			el.animate(animation, speed / 2, o.options.easing, function(){
+-				el.hide(); // Hide
+-				$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-				if(o.callback) o.callback.apply(this, arguments); // Callback
+-			});
+-		} else {
+-			var animation1 = {}, animation2 = {};
+-			animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
+-			animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+-			el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){
+-				$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-				if(o.callback) o.callback.apply(this, arguments); // Callback
+-			});
+-		};
+-		el.queue('fx', function() { el.dequeue(); });
+-		el.dequeue();
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Clip 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Clip
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.clip = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right','height','width'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+-		var direction = o.options.direction || 'vertical'; // Default direction
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+-		var animate = el[0].tagName == 'IMG' ? wrapper : el;
+-		var ref = {
+-			size: (direction == 'vertical') ? 'height' : 'width',
+-			position: (direction == 'vertical') ? 'top' : 'left'
+-		};
+-		var distance = (direction == 'vertical') ? animate.height() : animate.width();
+-		if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift
+-
+-		// Animation
+-		var animation = {};
+-		animation[ref.size] = mode == 'show' ? distance : 0;
+-		animation[ref.position] = mode == 'show' ? 0 : distance / 2;
+-
+-		// Animate
+-		animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(el[0], arguments); // Callback
+-			el.dequeue();
+-		}});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Drop 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Drop
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.drop = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right','opacity'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+-		var direction = o.options.direction || 'left'; // Default Direction
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		$.effects.createWrapper(el); // Create Wrapper
+-		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+-		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+-		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2);
+-		if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
+-
+-		// Animation
+-		var animation = {opacity: mode == 'show' ? 1 : 0};
+-		animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
+-
+-		// Animate
+-		el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(this, arguments); // Callback
+-			el.dequeue();
+-		}});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Explode 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Explode
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.explode = function(o) {
+-
+-	return this.queue(function() {
+-
+-	var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
+-	var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
+-
+-	o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
+-	var el = $(this).show().css('visibility', 'hidden');
+-	var offset = el.offset();
+-
+-	//Substract the margins - not fixing the problem yet.
+-	offset.top -= parseInt(el.css("marginTop"),10) || 0;
+-	offset.left -= parseInt(el.css("marginLeft"),10) || 0;
+-
+-	var width = el.outerWidth(true);
+-	var height = el.outerHeight(true);
+-
+-	for(var i=0;i<rows;i++) { // =
+-		for(var j=0;j<cells;j++) { // ||
+-			el
+-				.clone()
+-				.appendTo('body')
+-				.wrap('<div></div>')
+-				.css({
+-					position: 'absolute',
+-					visibility: 'visible',
+-					left: -j*(width/cells),
+-					top: -i*(height/rows)
+-				})
+-				.parent()
+-				.addClass('ui-effects-explode')
+-				.css({
+-					position: 'absolute',
+-					overflow: 'hidden',
+-					width: width/cells,
+-					height: height/rows,
+-					left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),
+-					top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),
+-					opacity: o.options.mode == 'show' ? 0 : 1
+-				}).animate({
+-					left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),
+-					top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),
+-					opacity: o.options.mode == 'show' ? 1 : 0
+-				}, o.duration || 500);
+-		}
+-	}
+-
+-	// Set a timeout, to call the callback approx. when the other animations have finished
+-	setTimeout(function() {
+-
+-		o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();
+-				if(o.callback) o.callback.apply(el[0]); // Callback
+-				el.dequeue();
+-
+-				$('div.ui-effects-explode').remove();
+-
+-	}, o.duration || 500);
+-
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Fade 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Fade
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.fade = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			mode = $.effects.setMode(elem, o.options.mode || 'hide');
+-
+-		elem.animate({ opacity: mode }, {
+-			queue: false,
+-			duration: o.duration,
+-			easing: o.options.easing,
+-			complete: function() {
+-				(o.callback && o.callback.apply(this, arguments));
+-				elem.dequeue();
+-			}
+-		});
+-	});
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Fold 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Fold
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.fold = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+-		var size = o.options.size || 15; // Default fold size
+-		var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
+-		var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+-		var widthFirst = ((mode == 'show') != horizFirst);
+-		var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
+-		var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
+-		var percent = /([0-9]+)%/.exec(size);
+-		if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
+-		if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
+-
+-		// Animation
+-		var animation1 = {}, animation2 = {};
+-		animation1[ref[0]] = mode == 'show' ? distance[0] : size;
+-		animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
+-
+-		// Animate
+-		wrapper.animate(animation1, duration, o.options.easing)
+-		.animate(animation2, duration, o.options.easing, function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(el[0], arguments); // Callback
+-			el.dequeue();
+-		});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Highlight 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Highlight
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.highlight = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			props = ['backgroundImage', 'backgroundColor', 'opacity'],
+-			mode = $.effects.setMode(elem, o.options.mode || 'show'),
+-			animation = {
+-				backgroundColor: elem.css('backgroundColor')
+-			};
+-
+-		if (mode == 'hide') {
+-			animation.opacity = 0;
+-		}
+-
+-		$.effects.save(elem, props);
+-		elem
+-			.show()
+-			.css({
+-				backgroundImage: 'none',
+-				backgroundColor: o.options.color || '#ffff99'
+-			})
+-			.animate(animation, {
+-				queue: false,
+-				duration: o.duration,
+-				easing: o.options.easing,
+-				complete: function() {
+-					(mode == 'hide' && elem.hide());
+-					$.effects.restore(elem, props);
+-					(mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter'));
+-					(o.callback && o.callback.apply(this, arguments));
+-					elem.dequeue();
+-				}
+-			});
+-	});
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Pulsate 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Pulsate
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.pulsate = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			mode = $.effects.setMode(elem, o.options.mode || 'show');
+-			times = ((o.options.times || 5) * 2) - 1;
+-			duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2,
+-			isVisible = elem.is(':visible'),
+-			animateTo = 0;
+-
+-		if (!isVisible) {
+-			elem.css('opacity', 0).show();
+-			animateTo = 1;
+-		}
+-
+-		if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) {
+-			times--;
+-		}
+-
+-		for (var i = 0; i < times; i++) {
+-			elem.animate({ opacity: animateTo }, duration, o.options.easing);
+-			animateTo = (animateTo + 1) % 2;
+-		}
+-
+-		elem.animate({ opacity: animateTo }, duration, o.options.easing, function() {
+-			if (animateTo == 0) {
+-				elem.hide();
+-			}
+-			(o.callback && o.callback.apply(this, arguments));
+-		});
+-
+-		elem
+-			.queue('fx', function() { elem.dequeue(); })
+-			.dequeue();
+-	});
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Scale 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Scale
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.puff = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			mode = $.effects.setMode(elem, o.options.mode || 'hide'),
+-			percent = parseInt(o.options.percent, 10) || 150,
+-			factor = percent / 100,
+-			original = { height: elem.height(), width: elem.width() };
+-
+-		$.extend(o.options, {
+-			fade: true,
+-			mode: mode,
+-			percent: mode == 'hide' ? percent : 100,
+-			from: mode == 'hide'
+-				? original
+-				: {
+-					height: original.height * factor,
+-					width: original.width * factor
+-				}
+-		});
+-
+-		elem.effect('scale', o.options, o.duration, o.callback);
+-		elem.dequeue();
+-	});
+-};
+-
+-$.effects.scale = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this);
+-
+-		// Set options
+-		var options = $.extend(true, {}, o.options);
+-		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+-		var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
+-		var direction = o.options.direction || 'both'; // Set default axis
+-		var origin = o.options.origin; // The origin of the scaling
+-		if (mode != 'effect') { // Set default origin and restore for show/hide
+-			options.origin = origin || ['middle','center'];
+-			options.restore = true;
+-		}
+-		var original = {height: el.height(), width: el.width()}; // Save original
+-		el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
+-
+-		// Adjust
+-		var factor = { // Set scaling factor
+-			y: direction != 'horizontal' ? (percent / 100) : 1,
+-			x: direction != 'vertical' ? (percent / 100) : 1
+-		};
+-		el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
+-
+-		if (o.options.fade) { // Fade option to support puff
+-			if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
+-			if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
+-		};
+-
+-		// Animation
+-		options.from = el.from; options.to = el.to; options.mode = mode;
+-
+-		// Animate
+-		el.effect('size', options, o.duration, o.callback);
+-		el.dequeue();
+-	});
+-
+-};
+-
+-$.effects.size = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity'];
+-		var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore
+-		var props2 = ['width','height','overflow']; // Copy for children
+-		var cProps = ['fontSize'];
+-		var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
+-		var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+-		var restore = o.options.restore || false; // Default restore
+-		var scale = o.options.scale || 'both'; // Default scale mode
+-		var origin = o.options.origin; // The origin of the sizing
+-		var original = {height: el.height(), width: el.width()}; // Save original
+-		el.from = o.options.from || original; // Default from state
+-		el.to = o.options.to || original; // Default to state
+-		// Adjust
+-		if (origin) { // Calculate baseline shifts
+-			var baseline = $.effects.getBaseline(origin, original);
+-			el.from.top = (original.height - el.from.height) * baseline.y;
+-			el.from.left = (original.width - el.from.width) * baseline.x;
+-			el.to.top = (original.height - el.to.height) * baseline.y;
+-			el.to.left = (original.width - el.to.width) * baseline.x;
+-		};
+-		var factor = { // Set scaling factor
+-			from: {y: el.from.height / original.height, x: el.from.width / original.width},
+-			to: {y: el.to.height / original.height, x: el.to.width / original.width}
+-		};
+-		if (scale == 'box' || scale == 'both') { // Scale the css box
+-			if (factor.from.y != factor.to.y) { // Vertical props scaling
+-				props = props.concat(vProps);
+-				el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
+-				el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
+-			};
+-			if (factor.from.x != factor.to.x) { // Horizontal props scaling
+-				props = props.concat(hProps);
+-				el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
+-				el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
+-			};
+-		};
+-		if (scale == 'content' || scale == 'both') { // Scale the content
+-			if (factor.from.y != factor.to.y) { // Vertical props scaling
+-				props = props.concat(cProps);
+-				el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
+-				el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
+-			};
+-		};
+-		$.effects.save(el, restore ? props : props1); el.show(); // Save & Show
+-		$.effects.createWrapper(el); // Create Wrapper
+-		el.css('overflow','hidden').css(el.from); // Shift
+-
+-		// Animate
+-		if (scale == 'content' || scale == 'both') { // Scale the children
+-			vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
+-			hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
+-			props2 = props.concat(vProps).concat(hProps); // Concat
+-			el.find("*[width]").each(function(){
+-				child = $(this);
+-				if (restore) $.effects.save(child, props2);
+-				var c_original = {height: child.height(), width: child.width()}; // Save original
+-				child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
+-				child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
+-				if (factor.from.y != factor.to.y) { // Vertical props scaling
+-					child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
+-					child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
+-				};
+-				if (factor.from.x != factor.to.x) { // Horizontal props scaling
+-					child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
+-					child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
+-				};
+-				child.css(child.from); // Shift children
+-				child.animate(child.to, o.duration, o.options.easing, function(){
+-					if (restore) $.effects.restore(child, props2); // Restore children
+-				}); // Animate children
+-			});
+-		};
+-
+-		// Animate
+-		el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+-			if (el.to.opacity === 0) {
+-				el.css('opacity', el.from.opacity);
+-			}
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(this, arguments); // Callback
+-			el.dequeue();
+-		}});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Shake 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Shake
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.shake = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+-		var direction = o.options.direction || 'left'; // Default direction
+-		var distance = o.options.distance || 20; // Default distance
+-		var times = o.options.times || 3; // Default # of times
+-		var speed = o.duration || o.options.duration || 140; // Default speed per shake
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		$.effects.createWrapper(el); // Create Wrapper
+-		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+-		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+-
+-		// Animation
+-		var animation = {}, animation1 = {}, animation2 = {};
+-		animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
+-		animation1[ref] = (motion == 'pos' ? '+=' : '-=')  + distance * 2;
+-		animation2[ref] = (motion == 'pos' ? '-=' : '+=')  + distance * 2;
+-
+-		// Animate
+-		el.animate(animation, speed, o.options.easing);
+-		for (var i = 1; i < times; i++) { // Shakes
+-			el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
+-		};
+-		el.animate(animation1, speed, o.options.easing).
+-		animate(animation, speed / 2, o.options.easing, function(){ // Last shake
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(this, arguments); // Callback
+-		});
+-		el.queue('fx', function() { el.dequeue(); });
+-		el.dequeue();
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Slide 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Slide
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.slide = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
+-		var direction = o.options.direction || 'left'; // Default Direction
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		$.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+-		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+-		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+-		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
+-		if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift
+-
+-		// Animation
+-		var animation = {};
+-		animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
+-
+-		// Animate
+-		el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(this, arguments); // Callback
+-			el.dequeue();
+-		}});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Transfer 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Transfer
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.transfer = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			target = $(o.options.to),
+-			endPosition = target.offset(),
+-			animation = {
+-				top: endPosition.top,
+-				left: endPosition.left,
+-				height: target.innerHeight(),
+-				width: target.innerWidth()
+-			},
+-			startPosition = elem.offset(),
+-			transfer = $('<div class="ui-effects-transfer"></div>')
+-				.appendTo(document.body)
+-				.addClass(o.options.className)
+-				.css({
+-					top: startPosition.top,
+-					left: startPosition.left,
+-					height: elem.innerHeight(),
+-					width: elem.innerWidth(),
+-					position: 'absolute'
+-				})
+-				.animate(animation, o.duration, o.options.easing, function() {
+-					transfer.remove();
+-					(o.callback && o.callback.apply(elem[0], arguments));
+-					elem.dequeue();
+-				});
+-	});
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Accordion 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Accordion
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget( "ui.accordion", {
+-	options: {
+-		active: 0,
+-		animated: "slide",
+-		autoHeight: true,
+-		clearStyle: false,
+-		collapsible: false,
+-		event: "click",
+-		fillSpace: false,
+-		header: "> li > :first-child,> :not(li):even",
+-		icons: {
+-			header: "ui-icon-triangle-1-e",
+-			headerSelected: "ui-icon-triangle-1-s"
+-		},
+-		navigation: false,
+-		navigationFilter: function() {
+-			return this.href.toLowerCase() === location.href.toLowerCase();
+-		}
+-	},
+-
+-	_create: function() {
+-		var self = this,
+-			options = self.options;
+-
+-		self.running = 0;
+-
+-		self.element
+-			.addClass( "ui-accordion ui-widget ui-helper-reset" )
+-			// in lack of child-selectors in CSS
+-			// we need to mark top-LIs in a UL-accordion for some IE-fix
+-			.children( "li" )
+-				.addClass( "ui-accordion-li-fix" );
+-
+-		self.headers = self.element.find( options.header )
+-			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" )
+-			.bind( "mouseenter.accordion", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).addClass( "ui-state-hover" );
+-			})
+-			.bind( "mouseleave.accordion", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( "ui-state-hover" );
+-			})
+-			.bind( "focus.accordion", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).addClass( "ui-state-focus" );
+-			})
+-			.bind( "blur.accordion", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( "ui-state-focus" );
+-			});
+-
+-		self.headers.next()
+-			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" );
+-
+-		if ( options.navigation ) {
+-			var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 );
+-			if ( current.length ) {
+-				var header = current.closest( ".ui-accordion-header" );
+-				if ( header.length ) {
+-					// anchor within header
+-					self.active = header;
+-				} else {
+-					// anchor within content
+-					self.active = current.closest( ".ui-accordion-content" ).prev();
+-				}
+-			}
+-		}
+-
+-		self.active = self._findActive( self.active || options.active )
+-			.addClass( "ui-state-default ui-state-active" )
+-			.toggleClass( "ui-corner-all" )
+-			.toggleClass( "ui-corner-top" );
+-		self.active.next().addClass( "ui-accordion-content-active" );
+-
+-		self._createIcons();
+-		self.resize();
+-		
+-		// ARIA
+-		self.element.attr( "role", "tablist" );
+-
+-		self.headers
+-			.attr( "role", "tab" )
+-			.bind( "keydown.accordion", function( event ) {
+-				return self._keydown( event );
+-			})
+-			.next()
+-				.attr( "role", "tabpanel" );
+-
+-		self.headers
+-			.not( self.active || "" )
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.next()
+-				.hide();
+-
+-		// make sure at least one header is in the tab order
+-		if ( !self.active.length ) {
+-			self.headers.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			self.active
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-		}
+-
+-		// only need links in tab order for Safari
+-		if ( !$.browser.safari ) {
+-			self.headers.find( "a" ).attr( "tabIndex", -1 );
+-		}
+-
+-		if ( options.event ) {
+-			self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) {
+-				self._clickHandler.call( self, event, this );
+-				event.preventDefault();
+-			});
+-		}
+-	},
+-
+-	_createIcons: function() {
+-		var options = this.options;
+-		if ( options.icons ) {
+-			$( "<span></span>" )
+-				.addClass( "ui-icon " + options.icons.header )
+-				.prependTo( this.headers );
+-			this.active.children( ".ui-icon" )
+-				.toggleClass(options.icons.header)
+-				.toggleClass(options.icons.headerSelected);
+-			this.element.addClass( "ui-accordion-icons" );
+-		}
+-	},
+-
+-	_destroyIcons: function() {
+-		this.headers.children( ".ui-icon" ).remove();
+-		this.element.removeClass( "ui-accordion-icons" );
+-	},
+-
+-	destroy: function() {
+-		var options = this.options;
+-
+-		this.element
+-			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+-			.removeAttr( "role" );
+-
+-		this.headers
+-			.unbind( ".accordion" )
+-			.removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-expanded" )
+-			.removeAttr( "aria-selected" )
+-			.removeAttr( "tabIndex" );
+-
+-		this.headers.find( "a" ).removeAttr( "tabIndex" );
+-		this._destroyIcons();
+-		var contents = this.headers.next()
+-			.css( "display", "" )
+-			.removeAttr( "role" )
+-			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" );
+-		if ( options.autoHeight || options.fillHeight ) {
+-			contents.css( "height", "" );
+-		}
+-
+-		return $.Widget.prototype.destroy.call( this );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-			
+-		if ( key == "active" ) {
+-			this.activate( value );
+-		}
+-		if ( key == "icons" ) {
+-			this._destroyIcons();
+-			if ( value ) {
+-				this._createIcons();
+-			}
+-		}
+-		// #5332 - opacity doesn't cascade to positioned elements in IE
+-		// so we need to add the disabled class to the headers and panels
+-		if ( key == "disabled" ) {
+-			this.headers.add(this.headers.next())
+-				[ value ? "addClass" : "removeClass" ](
+-					"ui-accordion-disabled ui-state-disabled" );
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		if ( this.options.disabled || event.altKey || event.ctrlKey ) {
+-			return;
+-		}
+-
+-		var keyCode = $.ui.keyCode,
+-			length = this.headers.length,
+-			currentIndex = this.headers.index( event.target ),
+-			toFocus = false;
+-
+-		switch ( event.keyCode ) {
+-			case keyCode.RIGHT:
+-			case keyCode.DOWN:
+-				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+-				break;
+-			case keyCode.LEFT:
+-			case keyCode.UP:
+-				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+-				break;
+-			case keyCode.SPACE:
+-			case keyCode.ENTER:
+-				this._clickHandler( { target: event.target }, event.target );
+-				event.preventDefault();
+-		}
+-
+-		if ( toFocus ) {
+-			$( event.target ).attr( "tabIndex", -1 );
+-			$( toFocus ).attr( "tabIndex", 0 );
+-			toFocus.focus();
+-			return false;
+-		}
+-
+-		return true;
+-	},
+-
+-	resize: function() {
+-		var options = this.options,
+-			maxHeight;
+-
+-		if ( options.fillSpace ) {
+-			if ( $.browser.msie ) {
+-				var defOverflow = this.element.parent().css( "overflow" );
+-				this.element.parent().css( "overflow", "hidden");
+-			}
+-			maxHeight = this.element.parent().height();
+-			if ($.browser.msie) {
+-				this.element.parent().css( "overflow", defOverflow );
+-			}
+-
+-			this.headers.each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.headers.next()
+-				.each(function() {
+-					$( this ).height( Math.max( 0, maxHeight -
+-						$( this ).innerHeight() + $( this ).height() ) );
+-				})
+-				.css( "overflow", "auto" );
+-		} else if ( options.autoHeight ) {
+-			maxHeight = 0;
+-			this.headers.next()
+-				.each(function() {
+-					maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+-				})
+-				.height( maxHeight );
+-		}
+-
+-		return this;
+-	},
+-
+-	activate: function( index ) {
+-		// TODO this gets called on init, changing the option without an explicit call for that
+-		this.options.active = index;
+-		// call clickHandler with custom event
+-		var active = this._findActive( index )[ 0 ];
+-		this._clickHandler( { target: active }, active );
+-
+-		return this;
+-	},
+-
+-	_findActive: function( selector ) {
+-		return selector
+-			? typeof selector === "number"
+-				? this.headers.filter( ":eq(" + selector + ")" )
+-				: this.headers.not( this.headers.not( selector ) )
+-			: selector === false
+-				? $( [] )
+-				: this.headers.filter( ":eq(0)" );
+-	},
+-
+-	// TODO isn't event.target enough? why the separate target argument?
+-	_clickHandler: function( event, target ) {
+-		var options = this.options;
+-		if ( options.disabled ) {
+-			return;
+-		}
+-
+-		// called only when using activate(false) to close all parts programmatically
+-		if ( !event.target ) {
+-			if ( !options.collapsible ) {
+-				return;
+-			}
+-			this.active
+-				.removeClass( "ui-state-active ui-corner-top" )
+-				.addClass( "ui-state-default ui-corner-all" )
+-				.children( ".ui-icon" )
+-					.removeClass( options.icons.headerSelected )
+-					.addClass( options.icons.header );
+-			this.active.next().addClass( "ui-accordion-content-active" );
+-			var toHide = this.active.next(),
+-				data = {
+-					options: options,
+-					newHeader: $( [] ),
+-					oldHeader: options.active,
+-					newContent: $( [] ),
+-					oldContent: toHide
+-				},
+-				toShow = ( this.active = $( [] ) );
+-			this._toggle( toShow, toHide, data );
+-			return;
+-		}
+-
+-		// get the click target
+-		var clicked = $( event.currentTarget || target ),
+-			clickedIsActive = clicked[0] === this.active[0];
+-
+-		// TODO the option is changed, is that correct?
+-		// TODO if it is correct, shouldn't that happen after determining that the click is valid?
+-		options.active = options.collapsible && clickedIsActive ?
+-			false :
+-			this.headers.index( clicked );
+-
+-		// if animations are still active, or the active header is the target, ignore click
+-		if ( this.running || ( !options.collapsible && clickedIsActive ) ) {
+-			return;
+-		}
+-
+-		// find elements to show and hide
+-		var active = this.active,
+-			toShow = clicked.next(),
+-			toHide = this.active.next(),
+-			data = {
+-				options: options,
+-				newHeader: clickedIsActive && options.collapsible ? $([]) : clicked,
+-				oldHeader: this.active,
+-				newContent: clickedIsActive && options.collapsible ? $([]) : toShow,
+-				oldContent: toHide
+-			},
+-			down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
+-
+-		// when the call to ._toggle() comes after the class changes
+-		// it causes a very odd bug in IE 8 (see #6720)
+-		this.active = clickedIsActive ? $([]) : clicked;
+-		this._toggle( toShow, toHide, data, clickedIsActive, down );
+-
+-		// switch classes
+-		active
+-			.removeClass( "ui-state-active ui-corner-top" )
+-			.addClass( "ui-state-default ui-corner-all" )
+-			.children( ".ui-icon" )
+-				.removeClass( options.icons.headerSelected )
+-				.addClass( options.icons.header );
+-		if ( !clickedIsActive ) {
+-			clicked
+-				.removeClass( "ui-state-default ui-corner-all" )
+-				.addClass( "ui-state-active ui-corner-top" )
+-				.children( ".ui-icon" )
+-					.removeClass( options.icons.header )
+-					.addClass( options.icons.headerSelected );
+-			clicked
+-				.next()
+-				.addClass( "ui-accordion-content-active" );
+-		}
+-
+-		return;
+-	},
+-
+-	_toggle: function( toShow, toHide, data, clickedIsActive, down ) {
+-		var self = this,
+-			options = self.options;
+-
+-		self.toShow = toShow;
+-		self.toHide = toHide;
+-		self.data = data;
+-
+-		var complete = function() {
+-			if ( !self ) {
+-				return;
+-			}
+-			return self._completed.apply( self, arguments );
+-		};
+-
+-		// trigger changestart event
+-		self._trigger( "changestart", null, self.data );
+-
+-		// count elements to animate
+-		self.running = toHide.size() === 0 ? toShow.size() : toHide.size();
+-
+-		if ( options.animated ) {
+-			var animOptions = {};
+-
+-			if ( options.collapsible && clickedIsActive ) {
+-				animOptions = {
+-					toShow: $( [] ),
+-					toHide: toHide,
+-					complete: complete,
+-					down: down,
+-					autoHeight: options.autoHeight || options.fillSpace
+-				};
+-			} else {
+-				animOptions = {
+-					toShow: toShow,
+-					toHide: toHide,
+-					complete: complete,
+-					down: down,
+-					autoHeight: options.autoHeight || options.fillSpace
+-				};
+-			}
+-
+-			if ( !options.proxied ) {
+-				options.proxied = options.animated;
+-			}
+-
+-			if ( !options.proxiedDuration ) {
+-				options.proxiedDuration = options.duration;
+-			}
+-
+-			options.animated = $.isFunction( options.proxied ) ?
+-				options.proxied( animOptions ) :
+-				options.proxied;
+-
+-			options.duration = $.isFunction( options.proxiedDuration ) ?
+-				options.proxiedDuration( animOptions ) :
+-				options.proxiedDuration;
+-
+-			var animations = $.ui.accordion.animations,
+-				duration = options.duration,
+-				easing = options.animated;
+-
+-			if ( easing && !animations[ easing ] && !$.easing[ easing ] ) {
+-				easing = "slide";
+-			}
+-			if ( !animations[ easing ] ) {
+-				animations[ easing ] = function( options ) {
+-					this.slide( options, {
+-						easing: easing,
+-						duration: duration || 700
+-					});
+-				};
+-			}
+-
+-			animations[ easing ]( animOptions );
+-		} else {
+-			if ( options.collapsible && clickedIsActive ) {
+-				toShow.toggle();
+-			} else {
+-				toHide.hide();
+-				toShow.show();
+-			}
+-
+-			complete( true );
+-		}
+-
+-		// TODO assert that the blur and focus triggers are really necessary, remove otherwise
+-		toHide.prev()
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.blur();
+-		toShow.prev()
+-			.attr({
+-				"aria-expanded": "true",
+-				"aria-selected": "true",
+-				tabIndex: 0
+-			})
+-			.focus();
+-	},
+-
+-	_completed: function( cancel ) {
+-		this.running = cancel ? 0 : --this.running;
+-		if ( this.running ) {
+-			return;
+-		}
+-
+-		if ( this.options.clearStyle ) {
+-			this.toShow.add( this.toHide ).css({
+-				height: "",
+-				overflow: ""
+-			});
+-		}
+-
+-		// other classes are removed before the animation; this one needs to stay until completed
+-		this.toHide.removeClass( "ui-accordion-content-active" );
+-		// Work around for rendering bug in IE (#5421)
+-		if ( this.toHide.length ) {
+-			this.toHide.parent()[0].className = this.toHide.parent()[0].className;
+-		}
+-
+-		this._trigger( "change", null, this.data );
+-	}
+-});
+-
+-$.extend( $.ui.accordion, {
+-	version: "1.8.15",
+-	animations: {
+-		slide: function( options, additions ) {
+-			options = $.extend({
+-				easing: "swing",
+-				duration: 300
+-			}, options, additions );
+-			if ( !options.toHide.size() ) {
+-				options.toShow.animate({
+-					height: "show",
+-					paddingTop: "show",
+-					paddingBottom: "show"
+-				}, options );
+-				return;
+-			}
+-			if ( !options.toShow.size() ) {
+-				options.toHide.animate({
+-					height: "hide",
+-					paddingTop: "hide",
+-					paddingBottom: "hide"
+-				}, options );
+-				return;
+-			}
+-			var overflow = options.toShow.css( "overflow" ),
+-				percentDone = 0,
+-				showProps = {},
+-				hideProps = {},
+-				fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
+-				originalWidth;
+-			// fix width before calculating height of hidden element
+-			var s = options.toShow;
+-			originalWidth = s[0].style.width;
+-			s.width( parseInt( s.parent().width(), 10 )
+-				- parseInt( s.css( "paddingLeft" ), 10 )
+-				- parseInt( s.css( "paddingRight" ), 10 )
+-				- ( parseInt( s.css( "borderLeftWidth" ), 10 ) || 0 )
+-				- ( parseInt( s.css( "borderRightWidth" ), 10) || 0 ) );
+-
+-			$.each( fxAttrs, function( i, prop ) {
+-				hideProps[ prop ] = "hide";
+-
+-				var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ );
+-				showProps[ prop ] = {
+-					value: parts[ 1 ],
+-					unit: parts[ 2 ] || "px"
+-				};
+-			});
+-			options.toShow.css({ height: 0, overflow: "hidden" }).show();
+-			options.toHide
+-				.filter( ":hidden" )
+-					.each( options.complete )
+-				.end()
+-				.filter( ":visible" )
+-				.animate( hideProps, {
+-				step: function( now, settings ) {
+-					// only calculate the percent when animating height
+-					// IE gets very inconsistent results when animating elements
+-					// with small values, which is common for padding
+-					if ( settings.prop == "height" ) {
+-						percentDone = ( settings.end - settings.start === 0 ) ? 0 :
+-							( settings.now - settings.start ) / ( settings.end - settings.start );
+-					}
+-
+-					options.toShow[ 0 ].style[ settings.prop ] =
+-						( percentDone * showProps[ settings.prop ].value )
+-						+ showProps[ settings.prop ].unit;
+-				},
+-				duration: options.duration,
+-				easing: options.easing,
+-				complete: function() {
+-					if ( !options.autoHeight ) {
+-						options.toShow.css( "height", "" );
+-					}
+-					options.toShow.css({
+-						width: originalWidth,
+-						overflow: overflow
+-					});
+-					options.complete();
+-				}
+-			});
+-		},
+-		bounceslide: function( options ) {
+-			this.slide( options, {
+-				easing: options.down ? "easeOutBounce" : "swing",
+-				duration: options.down ? 1000 : 200
+-			});
+-		}
+-	}
+-});
+-
+-})( jQuery );
+-/*
+- * jQuery UI Autocomplete 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Autocomplete
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.position.js
+- */
+-(function( $, undefined ) {
+-
+-// used to prevent race conditions with remote data sources
+-var requestIndex = 0;
+-
+-$.widget( "ui.autocomplete", {
+-	options: {
+-		appendTo: "body",
+-		autoFocus: false,
+-		delay: 300,
+-		minLength: 1,
+-		position: {
+-			my: "left top",
+-			at: "left bottom",
+-			collision: "none"
+-		},
+-		source: null
+-	},
+-
+-	pending: 0,
+-
+-	_create: function() {
+-		var self = this,
+-			doc = this.element[ 0 ].ownerDocument,
+-			suppressKeyPress;
+-
+-		this.element
+-			.addClass( "ui-autocomplete-input" )
+-			.attr( "autocomplete", "off" )
+-			// TODO verify these actually work as intended
+-			.attr({
+-				role: "textbox",
+-				"aria-autocomplete": "list",
+-				"aria-haspopup": "true"
+-			})
+-			.bind( "keydown.autocomplete", function( event ) {
+-				if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) {
+-					return;
+-				}
+-
+-				suppressKeyPress = false;
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					self._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					self._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					self._move( "previous", event );
+-					// prevent moving cursor to beginning of text field in some browsers
+-					event.preventDefault();
+-					break;
+-				case keyCode.DOWN:
+-					self._move( "next", event );
+-					// prevent moving cursor to end of text field in some browsers
+-					event.preventDefault();
+-					break;
+-				case keyCode.ENTER:
+-				case keyCode.NUMPAD_ENTER:
+-					// when menu is open and has focus
+-					if ( self.menu.active ) {
+-						// #6055 - Opera still allows the keypress to occur
+-						// which causes forms to submit
+-						suppressKeyPress = true;
+-						event.preventDefault();
+-					}
+-					//passthrough - ENTER and TAB both select the current element
+-				case keyCode.TAB:
+-					if ( !self.menu.active ) {
+-						return;
+-					}
+-					self.menu.select( event );
+-					break;
+-				case keyCode.ESCAPE:
+-					self.element.val( self.term );
+-					self.close( event );
+-					break;
+-				default:
+-					// keypress is triggered before the input value is changed
+-					clearTimeout( self.searching );
+-					self.searching = setTimeout(function() {
+-						// only search if the value has changed
+-						if ( self.term != self.element.val() ) {
+-							self.selectedItem = null;
+-							self.search( null, event );
+-						}
+-					}, self.options.delay );
+-					break;
+-				}
+-			})
+-			.bind( "keypress.autocomplete", function( event ) {
+-				if ( suppressKeyPress ) {
+-					suppressKeyPress = false;
+-					event.preventDefault();
+-				}
+-			})
+-			.bind( "focus.autocomplete", function() {
+-				if ( self.options.disabled ) {
+-					return;
+-				}
+-
+-				self.selectedItem = null;
+-				self.previous = self.element.val();
+-			})
+-			.bind( "blur.autocomplete", function( event ) {
+-				if ( self.options.disabled ) {
+-					return;
+-				}
+-
+-				clearTimeout( self.searching );
+-				// clicks on the menu (or a button to trigger a search) will cause a blur event
+-				self.closing = setTimeout(function() {
+-					self.close( event );
+-					self._change( event );
+-				}, 150 );
+-			});
+-		this._initSource();
+-		this.response = function() {
+-			return self._response.apply( self, arguments );
+-		};
+-		this.menu = $( "<ul></ul>" )
+-			.addClass( "ui-autocomplete" )
+-			.appendTo( $( this.options.appendTo || "body", doc )[0] )
+-			// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
+-			.mousedown(function( event ) {
+-				// clicking on the scrollbar causes focus to shift to the body
+-				// but we can't detect a mouseup or a click immediately afterward
+-				// so we have to track the next mousedown and close the menu if
+-				// the user clicks somewhere outside of the autocomplete
+-				var menuElement = self.menu.element[ 0 ];
+-				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+-					setTimeout(function() {
+-						$( document ).one( 'mousedown', function( event ) {
+-							if ( event.target !== self.element[ 0 ] &&
+-								event.target !== menuElement &&
+-								!$.ui.contains( menuElement, event.target ) ) {
+-								self.close();
+-							}
+-						});
+-					}, 1 );
+-				}
+-
+-				// use another timeout to make sure the blur-event-handler on the input was already triggered
+-				setTimeout(function() {
+-					clearTimeout( self.closing );
+-				}, 13);
+-			})
+-			.menu({
+-				focus: function( event, ui ) {
+-					var item = ui.item.data( "item.autocomplete" );
+-					if ( false !== self._trigger( "focus", event, { item: item } ) ) {
+-						// use value to match what will end up in the input, if it was a key event
+-						if ( /^key/.test(event.originalEvent.type) ) {
+-							self.element.val( item.value );
+-						}
+-					}
+-				},
+-				selected: function( event, ui ) {
+-					var item = ui.item.data( "item.autocomplete" ),
+-						previous = self.previous;
+-
+-					// only trigger when focus was lost (click on menu)
+-					if ( self.element[0] !== doc.activeElement ) {
+-						self.element.focus();
+-						self.previous = previous;
+-						// #6109 - IE triggers two focus events and the second
+-						// is asynchronous, so we need to reset the previous
+-						// term synchronously and asynchronously :-(
+-						setTimeout(function() {
+-							self.previous = previous;
+-							self.selectedItem = item;
+-						}, 1);
+-					}
+-
+-					if ( false !== self._trigger( "select", event, { item: item } ) ) {
+-						self.element.val( item.value );
+-					}
+-					// reset the term after the select event
+-					// this allows custom select handling to work properly
+-					self.term = self.element.val();
+-
+-					self.close( event );
+-					self.selectedItem = item;
+-				},
+-				blur: function( event, ui ) {
+-					// don't set the value of the text field if it's already correct
+-					// this prevents moving the cursor unnecessarily
+-					if ( self.menu.element.is(":visible") &&
+-						( self.element.val() !== self.term ) ) {
+-						self.element.val( self.term );
+-					}
+-				}
+-			})
+-			.zIndex( this.element.zIndex() + 1 )
+-			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
+-			.css({ top: 0, left: 0 })
+-			.hide()
+-			.data( "menu" );
+-		if ( $.fn.bgiframe ) {
+-			 this.menu.element.bgiframe();
+-		}
+-	},
+-
+-	destroy: function() {
+-		this.element
+-			.removeClass( "ui-autocomplete-input" )
+-			.removeAttr( "autocomplete" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-autocomplete" )
+-			.removeAttr( "aria-haspopup" );
+-		this.menu.element.remove();
+-		$.Widget.prototype.destroy.call( this );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-		if ( key === "source" ) {
+-			this._initSource();
+-		}
+-		if ( key === "appendTo" ) {
+-			this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] )
+-		}
+-		if ( key === "disabled" && value && this.xhr ) {
+-			this.xhr.abort();
+-		}
+-	},
+-
+-	_initSource: function() {
+-		var self = this,
+-			array,
+-			url;
+-		if ( $.isArray(this.options.source) ) {
+-			array = this.options.source;
+-			this.source = function( request, response ) {
+-				response( $.ui.autocomplete.filter(array, request.term) );
+-			};
+-		} else if ( typeof this.options.source === "string" ) {
+-			url = this.options.source;
+-			this.source = function( request, response ) {
+-				if ( self.xhr ) {
+-					self.xhr.abort();
+-				}
+-				self.xhr = $.ajax({
+-					url: url,
+-					data: request,
+-					dataType: "json",
+-					autocompleteRequest: ++requestIndex,
+-					success: function( data, status ) {
+-						if ( this.autocompleteRequest === requestIndex ) {
+-							response( data );
+-						}
+-					},
+-					error: function() {
+-						if ( this.autocompleteRequest === requestIndex ) {
+-							response( [] );
+-						}
+-					}
+-				});
+-			};
+-		} else {
+-			this.source = this.options.source;
+-		}
+-	},
+-
+-	search: function( value, event ) {
+-		value = value != null ? value : this.element.val();
+-
+-		// always save the actual value, not the one passed as an argument
+-		this.term = this.element.val();
+-
+-		if ( value.length < this.options.minLength ) {
+-			return this.close( event );
+-		}
+-
+-		clearTimeout( this.closing );
+-		if ( this._trigger( "search", event ) === false ) {
+-			return;
+-		}
+-
+-		return this._search( value );
+-	},
+-
+-	_search: function( value ) {
+-		this.pending++;
+-		this.element.addClass( "ui-autocomplete-loading" );
+-
+-		this.source( { term: value }, this.response );
+-	},
+-
+-	_response: function( content ) {
+-		if ( !this.options.disabled && content && content.length ) {
+-			content = this._normalize( content );
+-			this._suggest( content );
+-			this._trigger( "open" );
+-		} else {
+-			this.close();
+-		}
+-		this.pending--;
+-		if ( !this.pending ) {
+-			this.element.removeClass( "ui-autocomplete-loading" );
+-		}
+-	},
+-
+-	close: function( event ) {
+-		clearTimeout( this.closing );
+-		if ( this.menu.element.is(":visible") ) {
+-			this.menu.element.hide();
+-			this.menu.deactivate();
+-			this._trigger( "close", event );
+-		}
+-	},
+-	
+-	_change: function( event ) {
+-		if ( this.previous !== this.element.val() ) {
+-			this._trigger( "change", event, { item: this.selectedItem } );
+-		}
+-	},
+-
+-	_normalize: function( items ) {
+-		// assume all items have the right format when the first item is complete
+-		if ( items.length && items[0].label && items[0].value ) {
+-			return items;
+-		}
+-		return $.map( items, function(item) {
+-			if ( typeof item === "string" ) {
+-				return {
+-					label: item,
+-					value: item
+-				};
+-			}
+-			return $.extend({
+-				label: item.label || item.value,
+-				value: item.value || item.label
+-			}, item );
+-		});
+-	},
+-
+-	_suggest: function( items ) {
+-		var ul = this.menu.element
+-			.empty()
+-			.zIndex( this.element.zIndex() + 1 );
+-		this._renderMenu( ul, items );
+-		// TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate
+-		this.menu.deactivate();
+-		this.menu.refresh();
+-
+-		// size and position menu
+-		ul.show();
+-		this._resizeMenu();
+-		ul.position( $.extend({
+-			of: this.element
+-		}, this.options.position ));
+-
+-		if ( this.options.autoFocus ) {
+-			this.menu.next( new $.Event("mouseover") );
+-		}
+-	},
+-
+-	_resizeMenu: function() {
+-		var ul = this.menu.element;
+-		ul.outerWidth( Math.max(
+-			ul.width( "" ).outerWidth(),
+-			this.element.outerWidth()
+-		) );
+-	},
+-
+-	_renderMenu: function( ul, items ) {
+-		var self = this;
+-		$.each( items, function( index, item ) {
+-			self._renderItem( ul, item );
+-		});
+-	},
+-
+-	_renderItem: function( ul, item) {
+-		return $( "<li></li>" )
+-			.data( "item.autocomplete", item )
+-			.append( $( "<a></a>" ).text( item.label ) )
+-			.appendTo( ul );
+-	},
+-
+-	_move: function( direction, event ) {
+-		if ( !this.menu.element.is(":visible") ) {
+-			this.search( null, event );
+-			return;
+-		}
+-		if ( this.menu.first() && /^previous/.test(direction) ||
+-				this.menu.last() && /^next/.test(direction) ) {
+-			this.element.val( this.term );
+-			this.menu.deactivate();
+-			return;
+-		}
+-		this.menu[ direction ]( event );
+-	},
+-
+-	widget: function() {
+-		return this.menu.element;
+-	}
+-});
+-
+-$.extend( $.ui.autocomplete, {
+-	escapeRegex: function( value ) {
+-		return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+-	},
+-	filter: function(array, term) {
+-		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+-		return $.grep( array, function(value) {
+-			return matcher.test( value.label || value.value || value );
+-		});
+-	}
+-});
+-
+-}( jQuery ));
+-
+-/*
+- * jQuery UI Menu (not officially released)
+- * 
+- * This widget isn't yet finished and the API is subject to change. We plan to finish
+- * it for the next release. You're welcome to give it a try anyway and give us feedback,
+- * as long as you're okay with migrating your code later on. We can help with that, too.
+- *
+- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Menu
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *  jquery.ui.widget.js
+- */
+-(function($) {
+-
+-$.widget("ui.menu", {
+-	_create: function() {
+-		var self = this;
+-		this.element
+-			.addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
+-			.attr({
+-				role: "listbox",
+-				"aria-activedescendant": "ui-active-menuitem"
+-			})
+-			.click(function( event ) {
+-				if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) {
+-					return;
+-				}
+-				// temporary
+-				event.preventDefault();
+-				self.select( event );
+-			});
+-		this.refresh();
+-	},
+-	
+-	refresh: function() {
+-		var self = this;
+-
+-		// don't refresh list items that are already adapted
+-		var items = this.element.children("li:not(.ui-menu-item):has(a)")
+-			.addClass("ui-menu-item")
+-			.attr("role", "menuitem");
+-		
+-		items.children("a")
+-			.addClass("ui-corner-all")
+-			.attr("tabindex", -1)
+-			// mouseenter doesn't work with event delegation
+-			.mouseenter(function( event ) {
+-				self.activate( event, $(this).parent() );
+-			})
+-			.mouseleave(function() {
+-				self.deactivate();
+-			});
+-	},
+-
+-	activate: function( event, item ) {
+-		this.deactivate();
+-		if (this.hasScroll()) {
+-			var offset = item.offset().top - this.element.offset().top,
+-				scroll = this.element.scrollTop(),
+-				elementHeight = this.element.height();
+-			if (offset < 0) {
+-				this.element.scrollTop( scroll + offset);
+-			} else if (offset >= elementHeight) {
+-				this.element.scrollTop( scroll + offset - elementHeight + item.height());
+-			}
+-		}
+-		this.active = item.eq(0)
+-			.children("a")
+-				.addClass("ui-state-hover")
+-				.attr("id", "ui-active-menuitem")
+-			.end();
+-		this._trigger("focus", event, { item: item });
+-	},
+-
+-	deactivate: function() {
+-		if (!this.active) { return; }
+-
+-		this.active.children("a")
+-			.removeClass("ui-state-hover")
+-			.removeAttr("id");
+-		this._trigger("blur");
+-		this.active = null;
+-	},
+-
+-	next: function(event) {
+-		this.move("next", ".ui-menu-item:first", event);
+-	},
+-
+-	previous: function(event) {
+-		this.move("prev", ".ui-menu-item:last", event);
+-	},
+-
+-	first: function() {
+-		return this.active && !this.active.prevAll(".ui-menu-item").length;
+-	},
+-
+-	last: function() {
+-		return this.active && !this.active.nextAll(".ui-menu-item").length;
+-	},
+-
+-	move: function(direction, edge, event) {
+-		if (!this.active) {
+-			this.activate(event, this.element.children(edge));
+-			return;
+-		}
+-		var next = this.active[direction + "All"](".ui-menu-item").eq(0);
+-		if (next.length) {
+-			this.activate(event, next);
+-		} else {
+-			this.activate(event, this.element.children(edge));
+-		}
+-	},
+-
+-	// TODO merge with previousPage
+-	nextPage: function(event) {
+-		if (this.hasScroll()) {
+-			// TODO merge with no-scroll-else
+-			if (!this.active || this.last()) {
+-				this.activate(event, this.element.children(".ui-menu-item:first"));
+-				return;
+-			}
+-			var base = this.active.offset().top,
+-				height = this.element.height(),
+-				result = this.element.children(".ui-menu-item").filter(function() {
+-					var close = $(this).offset().top - base - height + $(this).height();
+-					// TODO improve approximation
+-					return close < 10 && close > -10;
+-				});
+-
+-			// TODO try to catch this earlier when scrollTop indicates the last page anyway
+-			if (!result.length) {
+-				result = this.element.children(".ui-menu-item:last");
+-			}
+-			this.activate(event, result);
+-		} else {
+-			this.activate(event, this.element.children(".ui-menu-item")
+-				.filter(!this.active || this.last() ? ":first" : ":last"));
+-		}
+-	},
+-
+-	// TODO merge with nextPage
+-	previousPage: function(event) {
+-		if (this.hasScroll()) {
+-			// TODO merge with no-scroll-else
+-			if (!this.active || this.first()) {
+-				this.activate(event, this.element.children(".ui-menu-item:last"));
+-				return;
+-			}
+-
+-			var base = this.active.offset().top,
+-				height = this.element.height();
+-				result = this.element.children(".ui-menu-item").filter(function() {
+-					var close = $(this).offset().top - base + height - $(this).height();
+-					// TODO improve approximation
+-					return close < 10 && close > -10;
+-				});
+-
+-			// TODO try to catch this earlier when scrollTop indicates the last page anyway
+-			if (!result.length) {
+-				result = this.element.children(".ui-menu-item:first");
+-			}
+-			this.activate(event, result);
+-		} else {
+-			this.activate(event, this.element.children(".ui-menu-item")
+-				.filter(!this.active || this.first() ? ":last" : ":first"));
+-		}
+-	},
+-
+-	hasScroll: function() {
+-		return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight");
+-	},
+-
+-	select: function( event ) {
+-		this._trigger("selected", event, { item: this.active });
+-	}
+-});
+-
+-}(jQuery));
+-/*
+- * jQuery UI Button 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Button
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var lastActive, startXPos, startYPos, clickDragged,
+-	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+-	stateClasses = "ui-state-hover ui-state-active ",
+-	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+-	formResetHandler = function() {
+-		var buttons = $( this ).find( ":ui-button" );
+-		setTimeout(function() {
+-			buttons.button( "refresh" );
+-		}, 1 );
+-	},
+-	radioGroup = function( radio ) {
+-		var name = radio.name,
+-			form = radio.form,
+-			radios = $( [] );
+-		if ( name ) {
+-			if ( form ) {
+-				radios = $( form ).find( "[name='" + name + "']" );
+-			} else {
+-				radios = $( "[name='" + name + "']", radio.ownerDocument )
+-					.filter(function() {
+-						return !this.form;
+-					});
+-			}
+-		}
+-		return radios;
+-	};
+-
+-$.widget( "ui.button", {
+-	options: {
+-		disabled: null,
+-		text: true,
+-		label: null,
+-		icons: {
+-			primary: null,
+-			secondary: null
+-		}
+-	},
+-	_create: function() {
+-		this.element.closest( "form" )
+-			.unbind( "reset.button" )
+-			.bind( "reset.button", formResetHandler );
+-
+-		if ( typeof this.options.disabled !== "boolean" ) {
+-			this.options.disabled = this.element.propAttr( "disabled" );
+-		}
+-
+-		this._determineButtonType();
+-		this.hasTitle = !!this.buttonElement.attr( "title" );
+-
+-		var self = this,
+-			options = this.options,
+-			toggleButton = this.type === "checkbox" || this.type === "radio",
+-			hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ),
+-			focusClass = "ui-state-focus";
+-
+-		if ( options.label === null ) {
+-			options.label = this.buttonElement.html();
+-		}
+-
+-		if ( this.element.is( ":disabled" ) ) {
+-			options.disabled = true;
+-		}
+-
+-		this.buttonElement
+-			.addClass( baseClasses )
+-			.attr( "role", "button" )
+-			.bind( "mouseenter.button", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).addClass( "ui-state-hover" );
+-				if ( this === lastActive ) {
+-					$( this ).addClass( "ui-state-active" );
+-				}
+-			})
+-			.bind( "mouseleave.button", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( hoverClass );
+-			})
+-			.bind( "click.button", function( event ) {
+-				if ( options.disabled ) {
+-					event.preventDefault();
+-					event.stopImmediatePropagation();
+-				}
+-			});
+-
+-		this.element
+-			.bind( "focus.button", function() {
+-				// no need to check disabled, focus won't be triggered anyway
+-				self.buttonElement.addClass( focusClass );
+-			})
+-			.bind( "blur.button", function() {
+-				self.buttonElement.removeClass( focusClass );
+-			});
+-
+-		if ( toggleButton ) {
+-			this.element.bind( "change.button", function() {
+-				if ( clickDragged ) {
+-					return;
+-				}
+-				self.refresh();
+-			});
+-			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+-			// prevents issue where button state changes but checkbox/radio checked state
+-			// does not in Firefox (see ticket #6970)
+-			this.buttonElement
+-				.bind( "mousedown.button", function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					clickDragged = false;
+-					startXPos = event.pageX;
+-					startYPos = event.pageY;
+-				})
+-				.bind( "mouseup.button", function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+-						clickDragged = true;
+-					}
+-			});
+-		}
+-
+-		if ( this.type === "checkbox" ) {
+-			this.buttonElement.bind( "click.button", function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).toggleClass( "ui-state-active" );
+-				self.buttonElement.attr( "aria-pressed", self.element[0].checked );
+-			});
+-		} else if ( this.type === "radio" ) {
+-			this.buttonElement.bind( "click.button", function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).addClass( "ui-state-active" );
+-				self.buttonElement.attr( "aria-pressed", "true" );
+-
+-				var radio = self.element[ 0 ];
+-				radioGroup( radio )
+-					.not( radio )
+-					.map(function() {
+-						return $( this ).button( "widget" )[ 0 ];
+-					})
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			});
+-		} else {
+-			this.buttonElement
+-				.bind( "mousedown.button", function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).addClass( "ui-state-active" );
+-					lastActive = this;
+-					$( document ).one( "mouseup", function() {
+-						lastActive = null;
+-					});
+-				})
+-				.bind( "mouseup.button", function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).removeClass( "ui-state-active" );
+-				})
+-				.bind( "keydown.button", function(event) {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) {
+-						$( this ).addClass( "ui-state-active" );
+-					}
+-				})
+-				.bind( "keyup.button", function() {
+-					$( this ).removeClass( "ui-state-active" );
+-				});
+-
+-			if ( this.buttonElement.is("a") ) {
+-				this.buttonElement.keyup(function(event) {
+-					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+-						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+-						$( this ).click();
+-					}
+-				});
+-			}
+-		}
+-
+-		// TODO: pull out $.Widget's handling for the disabled option into
+-		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+-		// be overridden by individual plugins
+-		this._setOption( "disabled", options.disabled );
+-		this._resetButton();
+-	},
+-
+-	_determineButtonType: function() {
+-
+-		if ( this.element.is(":checkbox") ) {
+-			this.type = "checkbox";
+-		} else if ( this.element.is(":radio") ) {
+-			this.type = "radio";
+-		} else if ( this.element.is("input") ) {
+-			this.type = "input";
+-		} else {
+-			this.type = "button";
+-		}
+-
+-		if ( this.type === "checkbox" || this.type === "radio" ) {
+-			// we don't search against the document in case the element
+-			// is disconnected from the DOM
+-			var ancestor = this.element.parents().filter(":last"),
+-				labelSelector = "label[for=" + this.element.attr("id") + "]";
+-			this.buttonElement = ancestor.find( labelSelector );
+-			if ( !this.buttonElement.length ) {
+-				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+-				this.buttonElement = ancestor.filter( labelSelector );
+-				if ( !this.buttonElement.length ) {
+-					this.buttonElement = ancestor.find( labelSelector );
+-				}
+-			}
+-			this.element.addClass( "ui-helper-hidden-accessible" );
+-
+-			var checked = this.element.is( ":checked" );
+-			if ( checked ) {
+-				this.buttonElement.addClass( "ui-state-active" );
+-			}
+-			this.buttonElement.attr( "aria-pressed", checked );
+-		} else {
+-			this.buttonElement = this.element;
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.buttonElement;
+-	},
+-
+-	destroy: function() {
+-		this.element
+-			.removeClass( "ui-helper-hidden-accessible" );
+-		this.buttonElement
+-			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-pressed" )
+-			.html( this.buttonElement.find(".ui-button-text").html() );
+-
+-		if ( !this.hasTitle ) {
+-			this.buttonElement.removeAttr( "title" );
+-		}
+-
+-		$.Widget.prototype.destroy.call( this );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.propAttr( "disabled", true );
+-			} else {
+-				this.element.propAttr( "disabled", false );
+-			}
+-			return;
+-		}
+-		this._resetButton();
+-	},
+-
+-	refresh: function() {
+-		var isDisabled = this.element.is( ":disabled" );
+-		if ( isDisabled !== this.options.disabled ) {
+-			this._setOption( "disabled", isDisabled );
+-		}
+-		if ( this.type === "radio" ) {
+-			radioGroup( this.element[0] ).each(function() {
+-				if ( $( this ).is( ":checked" ) ) {
+-					$( this ).button( "widget" )
+-						.addClass( "ui-state-active" )
+-						.attr( "aria-pressed", "true" );
+-				} else {
+-					$( this ).button( "widget" )
+-						.removeClass( "ui-state-active" )
+-						.attr( "aria-pressed", "false" );
+-				}
+-			});
+-		} else if ( this.type === "checkbox" ) {
+-			if ( this.element.is( ":checked" ) ) {
+-				this.buttonElement
+-					.addClass( "ui-state-active" )
+-					.attr( "aria-pressed", "true" );
+-			} else {
+-				this.buttonElement
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			}
+-		}
+-	},
+-
+-	_resetButton: function() {
+-		if ( this.type === "input" ) {
+-			if ( this.options.label ) {
+-				this.element.val( this.options.label );
+-			}
+-			return;
+-		}
+-		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+-			buttonText = $( "<span></span>" )
+-				.addClass( "ui-button-text" )
+-				.html( this.options.label )
+-				.appendTo( buttonElement.empty() )
+-				.text(),
+-			icons = this.options.icons,
+-			multipleIcons = icons.primary && icons.secondary,
+-			buttonClasses = [];  
+-
+-		if ( icons.primary || icons.secondary ) {
+-			if ( this.options.text ) {
+-				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+-			}
+-
+-			if ( icons.primary ) {
+-				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+-			}
+-
+-			if ( icons.secondary ) {
+-				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+-			}
+-
+-			if ( !this.options.text ) {
+-				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+-
+-				if ( !this.hasTitle ) {
+-					buttonElement.attr( "title", buttonText );
+-				}
+-			}
+-		} else {
+-			buttonClasses.push( "ui-button-text-only" );
+-		}
+-		buttonElement.addClass( buttonClasses.join( " " ) );
+-	}
+-});
+-
+-$.widget( "ui.buttonset", {
+-	options: {
+-		items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)"
+-	},
+-
+-	_create: function() {
+-		this.element.addClass( "ui-buttonset" );
+-	},
+-	
+-	_init: function() {
+-		this.refresh();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "disabled" ) {
+-			this.buttons.button( "option", key, value );
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-	},
+-	
+-	refresh: function() {
+-		var ltr = this.element.css( "direction" ) === "ltr";
+-		
+-		this.buttons = this.element.find( this.options.items )
+-			.filter( ":ui-button" )
+-				.button( "refresh" )
+-			.end()
+-			.not( ":ui-button" )
+-				.button()
+-			.end()
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+-				.filter( ":first" )
+-					.addClass( ltr ? "ui-corner-left" : "ui-corner-right" )
+-				.end()
+-				.filter( ":last" )
+-					.addClass( ltr ? "ui-corner-right" : "ui-corner-left" )
+-				.end()
+-			.end();
+-	},
+-
+-	destroy: function() {
+-		this.element.removeClass( "ui-buttonset" );
+-		this.buttons
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-left ui-corner-right" )
+-			.end()
+-			.button( "destroy" );
+-
+-		$.Widget.prototype.destroy.call( this );
+-	}
+-});
+-
+-}( jQuery ) );
+-/*
+- * jQuery UI Datepicker 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Datepicker
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.extend($.ui, { datepicker: { version: "1.8.15" } });
+-
+-var PROP_NAME = 'datepicker';
+-var dpuuid = new Date().getTime();
+-var instActive;
+-
+-/* Date picker manager.
+-   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+-   Settings for (groups of) date pickers are maintained in an instance object,
+-   allowing multiple different settings on the same page. */
+-
+-function Datepicker() {
+-	this.debug = false; // Change this to true to start debugging
+-	this._curInst = null; // The current instance in use
+-	this._keyEvent = false; // If the last event was a key event
+-	this._disabledInputs = []; // List of date picker inputs that have been disabled
+-	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+-	this._inDialog = false; // True if showing within a "dialog", false if not
+-	this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
+-	this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
+-	this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
+-	this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
+-	this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
+-	this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
+-	this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
+-	this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
+-	this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
+-	this.regional = []; // Available regional settings, indexed by language code
+-	this.regional[''] = { // Default regional settings
+-		closeText: 'Done', // Display text for close link
+-		prevText: 'Prev', // Display text for previous month link
+-		nextText: 'Next', // Display text for next month link
+-		currentText: 'Today', // Display text for current month link
+-		monthNames: ['January','February','March','April','May','June',
+-			'July','August','September','October','November','December'], // Names of months for drop-down and formatting
+-		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
+-		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
+-		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
+-		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
+-		weekHeader: 'Wk', // Column header for week of the year
+-		dateFormat: 'mm/dd/yy', // See format options on parseDate
+-		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+-		isRTL: false, // True if right-to-left language, false if left-to-right
+-		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+-		yearSuffix: '' // Additional text to append to the year in the month headers
+-	};
+-	this._defaults = { // Global defaults for all the date picker instances
+-		showOn: 'focus', // 'focus' for popup on focus,
+-			// 'button' for trigger button, or 'both' for either
+-		showAnim: 'fadeIn', // Name of jQuery animation for popup
+-		showOptions: {}, // Options for enhanced animations
+-		defaultDate: null, // Used when field is blank: actual date,
+-			// +/-number for offset from today, null for today
+-		appendText: '', // Display text following the input box, e.g. showing the format
+-		buttonText: '...', // Text for trigger button
+-		buttonImage: '', // URL for trigger button image
+-		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+-		hideIfNoPrevNext: false, // True to hide next/previous month links
+-			// if not applicable, false to just disable them
+-		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+-		gotoCurrent: false, // True if today link goes back to current selection instead
+-		changeMonth: false, // True if month can be selected directly, false if only prev/next
+-		changeYear: false, // True if year can be selected directly, false if only prev/next
+-		yearRange: 'c-10:c+10', // Range of years to display in drop-down,
+-			// either relative to today's year (-nn:+nn), relative to currently displayed year
+-			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+-		showOtherMonths: false, // True to show dates in other months, false to leave blank
+-		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+-		showWeek: false, // True to show week of the year, false to not show it
+-		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+-			// takes a Date and returns the number of the week for it
+-		shortYearCutoff: '+10', // Short year values < this are in the current century,
+-			// > this are in the previous century,
+-			// string value starting with '+' for current year + value
+-		minDate: null, // The earliest selectable date, or null for no limit
+-		maxDate: null, // The latest selectable date, or null for no limit
+-		duration: 'fast', // Duration of display/closure
+-		beforeShowDay: null, // Function that takes a date and returns an array with
+-			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
+-			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+-		beforeShow: null, // Function that takes an input field and
+-			// returns a set of custom settings for the date picker
+-		onSelect: null, // Define a callback function when a date is selected
+-		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+-		onClose: null, // Define a callback function when the datepicker is closed
+-		numberOfMonths: 1, // Number of months to show at a time
+-		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+-		stepMonths: 1, // Number of months to step back/forward
+-		stepBigMonths: 12, // Number of months to step back/forward for the big links
+-		altField: '', // Selector for an alternate field to store selected dates into
+-		altFormat: '', // The date format to use for the alternate field
+-		constrainInput: true, // The input is constrained by the current date format
+-		showButtonPanel: false, // True to show button panel, false to not show it
+-		autoSize: false, // True to size the input for the date format, false to leave as is
+-		disabled: false // The initial disabled state
+-	};
+-	$.extend(this._defaults, this.regional['']);
+-	this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'));
+-}
+-
+-$.extend(Datepicker.prototype, {
+-	/* Class name added to elements to indicate already configured with a date picker. */
+-	markerClassName: 'hasDatepicker',
+-	
+-	//Keep track of the maximum number of rows displayed (see #7043)
+-	maxRows: 4,
+-
+-	/* Debug logging (if enabled). */
+-	log: function () {
+-		if (this.debug)
+-			console.log.apply('', arguments);
+-	},
+-	
+-	// TODO rename to "widget" when switching to widget factory
+-	_widgetDatepicker: function() {
+-		return this.dpDiv;
+-	},
+-
+-	/* Override the default settings for all instances of the date picker.
+-	   @param  settings  object - the new settings to use as defaults (anonymous object)
+-	   @return the manager object */
+-	setDefaults: function(settings) {
+-		extendRemove(this._defaults, settings || {});
+-		return this;
+-	},
+-
+-	/* Attach the date picker to a jQuery selection.
+-	   @param  target    element - the target input field or division or span
+-	   @param  settings  object - the new settings to use for this date picker instance (anonymous) */
+-	_attachDatepicker: function(target, settings) {
+-		// check for settings on the control itself - in namespace 'date:'
+-		var inlineSettings = null;
+-		for (var attrName in this._defaults) {
+-			var attrValue = target.getAttribute('date:' + attrName);
+-			if (attrValue) {
+-				inlineSettings = inlineSettings || {};
+-				try {
+-					inlineSettings[attrName] = eval(attrValue);
+-				} catch (err) {
+-					inlineSettings[attrName] = attrValue;
+-				}
+-			}
+-		}
+-		var nodeName = target.nodeName.toLowerCase();
+-		var inline = (nodeName == 'div' || nodeName == 'span');
+-		if (!target.id) {
+-			this.uuid += 1;
+-			target.id = 'dp' + this.uuid;
+-		}
+-		var inst = this._newInst($(target), inline);
+-		inst.settings = $.extend({}, settings || {}, inlineSettings || {});
+-		if (nodeName == 'input') {
+-			this._connectDatepicker(target, inst);
+-		} else if (inline) {
+-			this._inlineDatepicker(target, inst);
+-		}
+-	},
+-
+-	/* Create a new instance object. */
+-	_newInst: function(target, inline) {
+-		var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars
+-		return {id: id, input: target, // associated target
+-			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+-			drawMonth: 0, drawYear: 0, // month being drawn
+-			inline: inline, // is datepicker inline or not
+-			dpDiv: (!inline ? this.dpDiv : // presentation div
+-			bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')))};
+-	},
+-
+-	/* Attach the date picker to an input field. */
+-	_connectDatepicker: function(target, inst) {
+-		var input = $(target);
+-		inst.append = $([]);
+-		inst.trigger = $([]);
+-		if (input.hasClass(this.markerClassName))
+-			return;
+-		this._attachments(input, inst);
+-		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+-			keypress(this._doKeyPress).keyup(this._doKeyUp).
+-			bind("setData.datepicker", function(event, key, value) {
+-				inst.settings[key] = value;
+-			}).bind("getData.datepicker", function(event, key) {
+-				return this._get(inst, key);
+-			});
+-		this._autoSize(inst);
+-		$.data(target, PROP_NAME, inst);
+-		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-	},
+-
+-	/* Make attachments based on settings. */
+-	_attachments: function(input, inst) {
+-		var appendText = this._get(inst, 'appendText');
+-		var isRTL = this._get(inst, 'isRTL');
+-		if (inst.append)
+-			inst.append.remove();
+-		if (appendText) {
+-			inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
+-			input[isRTL ? 'before' : 'after'](inst.append);
+-		}
+-		input.unbind('focus', this._showDatepicker);
+-		if (inst.trigger)
+-			inst.trigger.remove();
+-		var showOn = this._get(inst, 'showOn');
+-		if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
+-			input.focus(this._showDatepicker);
+-		if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
+-			var buttonText = this._get(inst, 'buttonText');
+-			var buttonImage = this._get(inst, 'buttonImage');
+-			inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
+-				$('<img/>').addClass(this._triggerClass).
+-					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+-				$('<button type="button"></button>').addClass(this._triggerClass).
+-					html(buttonImage == '' ? buttonText : $('<img/>').attr(
+-					{ src:buttonImage, alt:buttonText, title:buttonText })));
+-			input[isRTL ? 'before' : 'after'](inst.trigger);
+-			inst.trigger.click(function() {
+-				if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])
+-					$.datepicker._hideDatepicker();
+-				else
+-					$.datepicker._showDatepicker(input[0]);
+-				return false;
+-			});
+-		}
+-	},
+-
+-	/* Apply the maximum length for the date format. */
+-	_autoSize: function(inst) {
+-		if (this._get(inst, 'autoSize') && !inst.inline) {
+-			var date = new Date(2009, 12 - 1, 20); // Ensure double digits
+-			var dateFormat = this._get(inst, 'dateFormat');
+-			if (dateFormat.match(/[DM]/)) {
+-				var findMax = function(names) {
+-					var max = 0;
+-					var maxI = 0;
+-					for (var i = 0; i < names.length; i++) {
+-						if (names[i].length > max) {
+-							max = names[i].length;
+-							maxI = i;
+-						}
+-					}
+-					return maxI;
+-				};
+-				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+-					'monthNames' : 'monthNamesShort'))));
+-				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+-					'dayNames' : 'dayNamesShort'))) + 20 - date.getDay());
+-			}
+-			inst.input.attr('size', this._formatDate(inst, date).length);
+-		}
+-	},
+-
+-	/* Attach an inline date picker to a div. */
+-	_inlineDatepicker: function(target, inst) {
+-		var divSpan = $(target);
+-		if (divSpan.hasClass(this.markerClassName))
+-			return;
+-		divSpan.addClass(this.markerClassName).append(inst.dpDiv).
+-			bind("setData.datepicker", function(event, key, value){
+-				inst.settings[key] = value;
+-			}).bind("getData.datepicker", function(event, key){
+-				return this._get(inst, key);
+-			});
+-		$.data(target, PROP_NAME, inst);
+-		this._setDate(inst, this._getDefaultDate(inst), true);
+-		this._updateDatepicker(inst);
+-		this._updateAlternate(inst);
+-		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+-		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+-		inst.dpDiv.css( "display", "block" );
+-	},
+-
+-	/* Pop-up the date picker in a "dialog" box.
+-	   @param  input     element - ignored
+-	   @param  date      string or Date - the initial date to display
+-	   @param  onSelect  function - the function to call when a date is selected
+-	   @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+-	   @param  pos       int[2] - coordinates for the dialog's position within the screen or
+-	                     event - with x/y coordinates or
+-	                     leave empty for default (screen centre)
+-	   @return the manager object */
+-	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+-		var inst = this._dialogInst; // internal instance
+-		if (!inst) {
+-			this.uuid += 1;
+-			var id = 'dp' + this.uuid;
+-			this._dialogInput = $('<input type="text" id="' + id +
+-				'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
+-			this._dialogInput.keydown(this._doKeyDown);
+-			$('body').append(this._dialogInput);
+-			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+-			inst.settings = {};
+-			$.data(this._dialogInput[0], PROP_NAME, inst);
+-		}
+-		extendRemove(inst.settings, settings || {});
+-		date = (date && date.constructor == Date ? this._formatDate(inst, date) : date);
+-		this._dialogInput.val(date);
+-
+-		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+-		if (!this._pos) {
+-			var browserWidth = document.documentElement.clientWidth;
+-			var browserHeight = document.documentElement.clientHeight;
+-			var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+-			var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+-			this._pos = // should use actual width/height below
+-				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+-		}
+-
+-		// move input on screen for focus, but hidden behind dialog
+-		this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px');
+-		inst.settings.onSelect = onSelect;
+-		this._inDialog = true;
+-		this.dpDiv.addClass(this._dialogClass);
+-		this._showDatepicker(this._dialogInput[0]);
+-		if ($.blockUI)
+-			$.blockUI(this.dpDiv);
+-		$.data(this._dialogInput[0], PROP_NAME, inst);
+-		return this;
+-	},
+-
+-	/* Detach a datepicker from its control.
+-	   @param  target    element - the target input field or division or span */
+-	_destroyDatepicker: function(target) {
+-		var $target = $(target);
+-		var inst = $.data(target, PROP_NAME);
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		var nodeName = target.nodeName.toLowerCase();
+-		$.removeData(target, PROP_NAME);
+-		if (nodeName == 'input') {
+-			inst.append.remove();
+-			inst.trigger.remove();
+-			$target.removeClass(this.markerClassName).
+-				unbind('focus', this._showDatepicker).
+-				unbind('keydown', this._doKeyDown).
+-				unbind('keypress', this._doKeyPress).
+-				unbind('keyup', this._doKeyUp);
+-		} else if (nodeName == 'div' || nodeName == 'span')
+-			$target.removeClass(this.markerClassName).empty();
+-	},
+-
+-	/* Enable the date picker to a jQuery selection.
+-	   @param  target    element - the target input field or division or span */
+-	_enableDatepicker: function(target) {
+-		var $target = $(target);
+-		var inst = $.data(target, PROP_NAME);
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		var nodeName = target.nodeName.toLowerCase();
+-		if (nodeName == 'input') {
+-			target.disabled = false;
+-			inst.trigger.filter('button').
+-				each(function() { this.disabled = false; }).end().
+-				filter('img').css({opacity: '1.0', cursor: ''});
+-		}
+-		else if (nodeName == 'div' || nodeName == 'span') {
+-			var inline = $target.children('.' + this._inlineClass);
+-			inline.children().removeClass('ui-state-disabled');
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				removeAttr("disabled");
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value == target ? null : value); }); // delete entry
+-	},
+-
+-	/* Disable the date picker to a jQuery selection.
+-	   @param  target    element - the target input field or division or span */
+-	_disableDatepicker: function(target) {
+-		var $target = $(target);
+-		var inst = $.data(target, PROP_NAME);
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		var nodeName = target.nodeName.toLowerCase();
+-		if (nodeName == 'input') {
+-			target.disabled = true;
+-			inst.trigger.filter('button').
+-				each(function() { this.disabled = true; }).end().
+-				filter('img').css({opacity: '0.5', cursor: 'default'});
+-		}
+-		else if (nodeName == 'div' || nodeName == 'span') {
+-			var inline = $target.children('.' + this._inlineClass);
+-			inline.children().addClass('ui-state-disabled');
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				attr("disabled", "disabled");
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value == target ? null : value); }); // delete entry
+-		this._disabledInputs[this._disabledInputs.length] = target;
+-	},
+-
+-	/* Is the first field in a jQuery collection disabled as a datepicker?
+-	   @param  target    element - the target input field or division or span
+-	   @return boolean - true if disabled, false if enabled */
+-	_isDisabledDatepicker: function(target) {
+-		if (!target) {
+-			return false;
+-		}
+-		for (var i = 0; i < this._disabledInputs.length; i++) {
+-			if (this._disabledInputs[i] == target)
+-				return true;
+-		}
+-		return false;
+-	},
+-
+-	/* Retrieve the instance data for the target control.
+-	   @param  target  element - the target input field or division or span
+-	   @return  object - the associated instance data
+-	   @throws  error if a jQuery problem getting data */
+-	_getInst: function(target) {
+-		try {
+-			return $.data(target, PROP_NAME);
+-		}
+-		catch (err) {
+-			throw 'Missing instance data for this datepicker';
+-		}
+-	},
+-
+-	/* Update or retrieve the settings for a date picker attached to an input field or division.
+-	   @param  target  element - the target input field or division or span
+-	   @param  name    object - the new settings to update or
+-	                   string - the name of the setting to change or retrieve,
+-	                   when retrieving also 'all' for all instance settings or
+-	                   'defaults' for all global defaults
+-	   @param  value   any - the new value for the setting
+-	                   (omit if above is an object or to retrieve a value) */
+-	_optionDatepicker: function(target, name, value) {
+-		var inst = this._getInst(target);
+-		if (arguments.length == 2 && typeof name == 'string') {
+-			return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
+-				(inst ? (name == 'all' ? $.extend({}, inst.settings) :
+-				this._get(inst, name)) : null));
+-		}
+-		var settings = name || {};
+-		if (typeof name == 'string') {
+-			settings = {};
+-			settings[name] = value;
+-		}
+-		if (inst) {
+-			if (this._curInst == inst) {
+-				this._hideDatepicker();
+-			}
+-			var date = this._getDateDatepicker(target, true);
+-			var minDate = this._getMinMaxDate(inst, 'min');
+-			var maxDate = this._getMinMaxDate(inst, 'max');
+-			extendRemove(inst.settings, settings);
+-			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+-			if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined)
+-				inst.settings.minDate = this._formatDate(inst, minDate);
+-			if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined)
+-				inst.settings.maxDate = this._formatDate(inst, maxDate);
+-			this._attachments($(target), inst);
+-			this._autoSize(inst);
+-			this._setDate(inst, date);
+-			this._updateAlternate(inst);
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	// change method deprecated
+-	_changeDatepicker: function(target, name, value) {
+-		this._optionDatepicker(target, name, value);
+-	},
+-
+-	/* Redraw the date picker attached to an input field or division.
+-	   @param  target  element - the target input field or division or span */
+-	_refreshDatepicker: function(target) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	/* Set the dates for a jQuery selection.
+-	   @param  target   element - the target input field or division or span
+-	   @param  date     Date - the new date */
+-	_setDateDatepicker: function(target, date) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._setDate(inst, date);
+-			this._updateDatepicker(inst);
+-			this._updateAlternate(inst);
+-		}
+-	},
+-
+-	/* Get the date(s) for the first entry in a jQuery selection.
+-	   @param  target     element - the target input field or division or span
+-	   @param  noDefault  boolean - true if no default date is to be used
+-	   @return Date - the current date */
+-	_getDateDatepicker: function(target, noDefault) {
+-		var inst = this._getInst(target);
+-		if (inst && !inst.inline)
+-			this._setDateFromField(inst, noDefault);
+-		return (inst ? this._getDate(inst) : null);
+-	},
+-
+-	/* Handle keystrokes. */
+-	_doKeyDown: function(event) {
+-		var inst = $.datepicker._getInst(event.target);
+-		var handled = true;
+-		var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
+-		inst._keyEvent = true;
+-		if ($.datepicker._datepickerShowing)
+-			switch (event.keyCode) {
+-				case 9: $.datepicker._hideDatepicker();
+-						handled = false;
+-						break; // hide on tab out
+-				case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + 
+-									$.datepicker._currentClass + ')', inst.dpDiv);
+-						if (sel[0])
+-							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+-							var onSelect = $.datepicker._get(inst, 'onSelect');
+-							if (onSelect) {
+-								var dateStr = $.datepicker._formatDate(inst);
+-
+-								// trigger custom callback
+-								onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-							}
+-						else
+-							$.datepicker._hideDatepicker();
+-						return false; // don't submit the form
+-						break; // select the value on enter
+-				case 27: $.datepicker._hideDatepicker();
+-						break; // hide on escape
+-				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							-$.datepicker._get(inst, 'stepBigMonths') :
+-							-$.datepicker._get(inst, 'stepMonths')), 'M');
+-						break; // previous month/year on page up/+ ctrl
+-				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							+$.datepicker._get(inst, 'stepBigMonths') :
+-							+$.datepicker._get(inst, 'stepMonths')), 'M');
+-						break; // next month/year on page down/+ ctrl
+-				case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // clear on ctrl or command +end
+-				case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // current on ctrl or command +home
+-				case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
+-						handled = event.ctrlKey || event.metaKey;
+-						// -1 day on ctrl or command +left
+-						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-									-$.datepicker._get(inst, 'stepBigMonths') :
+-									-$.datepicker._get(inst, 'stepMonths')), 'M');
+-						// next month/year on alt +left on Mac
+-						break;
+-				case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // -1 week on ctrl or command +up
+-				case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
+-						handled = event.ctrlKey || event.metaKey;
+-						// +1 day on ctrl or command +right
+-						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-									+$.datepicker._get(inst, 'stepBigMonths') :
+-									+$.datepicker._get(inst, 'stepMonths')), 'M');
+-						// next month/year on alt +right
+-						break;
+-				case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // +1 week on ctrl or command +down
+-				default: handled = false;
+-			}
+-		else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
+-			$.datepicker._showDatepicker(this);
+-		else {
+-			handled = false;
+-		}
+-		if (handled) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-	},
+-
+-	/* Filter entered characters - based on date format. */
+-	_doKeyPress: function(event) {
+-		var inst = $.datepicker._getInst(event.target);
+-		if ($.datepicker._get(inst, 'constrainInput')) {
+-			var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
+-			var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
+-			return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
+-		}
+-	},
+-
+-	/* Synchronise manual entry and field/alternate field. */
+-	_doKeyUp: function(event) {
+-		var inst = $.datepicker._getInst(event.target);
+-		if (inst.input.val() != inst.lastVal) {
+-			try {
+-				var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
+-					(inst.input ? inst.input.val() : null),
+-					$.datepicker._getFormatConfig(inst));
+-				if (date) { // only if valid
+-					$.datepicker._setDateFromField(inst);
+-					$.datepicker._updateAlternate(inst);
+-					$.datepicker._updateDatepicker(inst);
+-				}
+-			}
+-			catch (event) {
+-				$.datepicker.log(event);
+-			}
+-		}
+-		return true;
+-	},
+-
+-	/* Pop-up the date picker for a given input field.
+-	   @param  input  element - the input field attached to the date picker or
+-	                  event - if triggered by focus */
+-	_showDatepicker: function(input) {
+-		input = input.target || input;
+-		if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
+-			input = $('input', input.parentNode)[0];
+-		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
+-			return;
+-		var inst = $.datepicker._getInst(input);
+-		if ($.datepicker._curInst && $.datepicker._curInst != inst) {
+-			if ( $.datepicker._datepickerShowing ) {
+-				$.datepicker._triggerOnClose($.datepicker._curInst);
+-			}
+-			$.datepicker._curInst.dpDiv.stop(true, true);
+-		}
+-		var beforeShow = $.datepicker._get(inst, 'beforeShow');
+-		extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
+-		inst.lastVal = null;
+-		$.datepicker._lastInput = input;
+-		$.datepicker._setDateFromField(inst);
+-		if ($.datepicker._inDialog) // hide cursor
+-			input.value = '';
+-		if (!$.datepicker._pos) { // position below input
+-			$.datepicker._pos = $.datepicker._findPos(input);
+-			$.datepicker._pos[1] += input.offsetHeight; // add the height
+-		}
+-		var isFixed = false;
+-		$(input).parents().each(function() {
+-			isFixed |= $(this).css('position') == 'fixed';
+-			return !isFixed;
+-		});
+-		if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
+-			$.datepicker._pos[0] -= document.documentElement.scrollLeft;
+-			$.datepicker._pos[1] -= document.documentElement.scrollTop;
+-		}
+-		var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+-		$.datepicker._pos = null;
+-		//to avoid flashes on Firefox
+-		inst.dpDiv.empty();
+-		// determine sizing offscreen
+-		inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
+-		$.datepicker._updateDatepicker(inst);
+-		// fix width for dynamic number of date pickers
+-		// and adjust position before showing
+-		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+-		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+-			'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
+-			left: offset.left + 'px', top: offset.top + 'px'});
+-		if (!inst.inline) {
+-			var showAnim = $.datepicker._get(inst, 'showAnim');
+-			var duration = $.datepicker._get(inst, 'duration');
+-			var postProcess = function() {
+-				var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
+-				if( !! cover.length ){
+-					var borders = $.datepicker._getBorders(inst.dpDiv);
+-					cover.css({left: -borders[0], top: -borders[1],
+-						width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});
+-				}
+-			};
+-			inst.dpDiv.zIndex($(input).zIndex()+1);
+-			$.datepicker._datepickerShowing = true;
+-			if ($.effects && $.effects[showAnim])
+-				inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
+-			else
+-				inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);
+-			if (!showAnim || !duration)
+-				postProcess();
+-			if (inst.input.is(':visible') && !inst.input.is(':disabled'))
+-				inst.input.focus();
+-			$.datepicker._curInst = inst;
+-		}
+-	},
+-
+-	/* Generate the date picker content. */
+-	_updateDatepicker: function(inst) {
+-		var self = this;
+-		self.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+-		var borders = $.datepicker._getBorders(inst.dpDiv);
+-		instActive = inst; // for delegate hover events
+-		inst.dpDiv.empty().append(this._generateHTML(inst));
+-		var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
+-		if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
+-			cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
+-		}
+-		inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover();
+-		var numMonths = this._getNumberOfMonths(inst);
+-		var cols = numMonths[1];
+-		var width = 17;
+-		inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
+-		if (cols > 1)
+-			inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
+-		inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
+-			'Class']('ui-datepicker-multi');
+-		inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
+-			'Class']('ui-datepicker-rtl');
+-		if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
+-				// #6694 - don't focus the input if it's already focused
+-				// this breaks the change event in IE
+-				inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)
+-			inst.input.focus();
+-		// deffered render of the years select (to avoid flashes on Firefox) 
+-		if( inst.yearshtml ){
+-			var origyearshtml = inst.yearshtml;
+-			setTimeout(function(){
+-				//assure that inst.yearshtml didn't change.
+-				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+-					inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
+-				}
+-				origyearshtml = inst.yearshtml = null;
+-			}, 0);
+-		}
+-	},
+-
+-	/* Retrieve the size of left and top borders for an element.
+-	   @param  elem  (jQuery object) the element of interest
+-	   @return  (number[2]) the left and top borders */
+-	_getBorders: function(elem) {
+-		var convert = function(value) {
+-			return {thin: 1, medium: 2, thick: 3}[value] || value;
+-		};
+-		return [parseFloat(convert(elem.css('border-left-width'))),
+-			parseFloat(convert(elem.css('border-top-width')))];
+-	},
+-
+-	/* Check positioning to remain on screen. */
+-	_checkOffset: function(inst, offset, isFixed) {
+-		var dpWidth = inst.dpDiv.outerWidth();
+-		var dpHeight = inst.dpDiv.outerHeight();
+-		var inputWidth = inst.input ? inst.input.outerWidth() : 0;
+-		var inputHeight = inst.input ? inst.input.outerHeight() : 0;
+-		var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft();
+-		var viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
+-
+-		offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
+-		offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
+-		offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+-
+-		// now check if datepicker is showing outside window viewport - move to a better place if so.
+-		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+-			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+-		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+-			Math.abs(dpHeight + inputHeight) : 0);
+-
+-		return offset;
+-	},
+-
+-	/* Find an object's position on the screen. */
+-	_findPos: function(obj) {
+-		var inst = this._getInst(obj);
+-		var isRTL = this._get(inst, 'isRTL');
+-        while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {
+-            obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
+-        }
+-        var position = $(obj).offset();
+-	    return [position.left, position.top];
+-	},
+-
+-	/* Trigger custom callback of onClose. */
+-	_triggerOnClose: function(inst) {
+-		var onClose = this._get(inst, 'onClose');
+-		if (onClose)
+-			onClose.apply((inst.input ? inst.input[0] : null),
+-						  [(inst.input ? inst.input.val() : ''), inst]);
+-	},
+-
+-	/* Hide the date picker from view.
+-	   @param  input  element - the input field attached to the date picker */
+-	_hideDatepicker: function(input) {
+-		var inst = this._curInst;
+-		if (!inst || (input && inst != $.data(input, PROP_NAME)))
+-			return;
+-		if (this._datepickerShowing) {
+-			var showAnim = this._get(inst, 'showAnim');
+-			var duration = this._get(inst, 'duration');
+-			var postProcess = function() {
+-				$.datepicker._tidyDialog(inst);
+-				this._curInst = null;
+-			};
+-			if ($.effects && $.effects[showAnim])
+-				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
+-			else
+-				inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
+-					(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);
+-			if (!showAnim)
+-				postProcess();
+-			$.datepicker._triggerOnClose(inst);
+-			this._datepickerShowing = false;
+-			this._lastInput = null;
+-			if (this._inDialog) {
+-				this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
+-				if ($.blockUI) {
+-					$.unblockUI();
+-					$('body').append(this.dpDiv);
+-				}
+-			}
+-			this._inDialog = false;
+-		}
+-	},
+-
+-	/* Tidy up after a dialog display. */
+-	_tidyDialog: function(inst) {
+-		inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
+-	},
+-
+-	/* Close date picker if clicked elsewhere. */
+-	_checkExternalClick: function(event) {
+-		if (!$.datepicker._curInst)
+-			return;
+-		var $target = $(event.target);
+-		if ($target[0].id != $.datepicker._mainDivId &&
+-				$target.parents('#' + $.datepicker._mainDivId).length == 0 &&
+-				!$target.hasClass($.datepicker.markerClassName) &&
+-				!$target.hasClass($.datepicker._triggerClass) &&
+-				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
+-			$.datepicker._hideDatepicker();
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustDate: function(id, offset, period) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		if (this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		this._adjustInstDate(inst, offset +
+-			(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
+-			period);
+-		this._updateDatepicker(inst);
+-	},
+-
+-	/* Action for current link. */
+-	_gotoToday: function(id) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
+-			inst.selectedDay = inst.currentDay;
+-			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+-			inst.drawYear = inst.selectedYear = inst.currentYear;
+-		}
+-		else {
+-			var date = new Date();
+-			inst.selectedDay = date.getDate();
+-			inst.drawMonth = inst.selectedMonth = date.getMonth();
+-			inst.drawYear = inst.selectedYear = date.getFullYear();
+-		}
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a new month/year. */
+-	_selectMonthYear: function(id, select, period) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
+-		inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
+-			parseInt(select.options[select.selectedIndex].value,10);
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a day. */
+-	_selectDay: function(id, month, year, td) {
+-		var target = $(id);
+-		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		var inst = this._getInst(target[0]);
+-		inst.selectedDay = inst.currentDay = $('a', td).html();
+-		inst.selectedMonth = inst.currentMonth = month;
+-		inst.selectedYear = inst.currentYear = year;
+-		this._selectDate(id, this._formatDate(inst,
+-			inst.currentDay, inst.currentMonth, inst.currentYear));
+-	},
+-
+-	/* Erase the input field and hide the date picker. */
+-	_clearDate: function(id) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		this._selectDate(target, '');
+-	},
+-
+-	/* Update the input field with the selected date. */
+-	_selectDate: function(id, dateStr) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+-		if (inst.input)
+-			inst.input.val(dateStr);
+-		this._updateAlternate(inst);
+-		var onSelect = this._get(inst, 'onSelect');
+-		if (onSelect)
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+-		else if (inst.input)
+-			inst.input.trigger('change'); // fire the change event
+-		if (inst.inline)
+-			this._updateDatepicker(inst);
+-		else {
+-			this._hideDatepicker();
+-			this._lastInput = inst.input[0];
+-			inst.input.focus(); // restore focus
+-			this._lastInput = null;
+-		}
+-	},
+-
+-	/* Update any alternate field to synchronise with the main field. */
+-	_updateAlternate: function(inst) {
+-		var altField = this._get(inst, 'altField');
+-		if (altField) { // update alternate field too
+-			var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
+-			var date = this._getDate(inst);
+-			var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+-			$(altField).each(function() { $(this).val(dateStr); });
+-		}
+-	},
+-
+-	/* Set as beforeShowDay function to prevent selection of weekends.
+-	   @param  date  Date - the date to customise
+-	   @return [boolean, string] - is this date selectable?, what is its CSS class? */
+-	noWeekends: function(date) {
+-		var day = date.getDay();
+-		return [(day > 0 && day < 6), ''];
+-	},
+-
+-	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+-	   @param  date  Date - the date to get the week for
+-	   @return  number - the number of the week within the year that contains this date */
+-	iso8601Week: function(date) {
+-		var checkDate = new Date(date.getTime());
+-		// Find Thursday of this week starting on Monday
+-		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+-		var time = checkDate.getTime();
+-		checkDate.setMonth(0); // Compare with Jan 1
+-		checkDate.setDate(1);
+-		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+-	},
+-
+-	/* Parse a string value into a date object.
+-	   See formatDate below for the possible formats.
+-
+-	   @param  format    string - the expected format of the date
+-	   @param  value     string - the date in the above format
+-	   @param  settings  Object - attributes include:
+-	                     shortYearCutoff  number - the cutoff year for determining the century (optional)
+-	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
+-	                     dayNames         string[7] - names of the days from Sunday (optional)
+-	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
+-	                     monthNames       string[12] - names of the months (optional)
+-	   @return  Date - the extracted date value or null if value is blank */
+-	parseDate: function (format, value, settings) {
+-		if (format == null || value == null)
+-			throw 'Invalid arguments';
+-		value = (typeof value == 'object' ? value.toString() : value + '');
+-		if (value == '')
+-			return null;
+-		var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
+-		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
+-				new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+-		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+-		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+-		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+-		var year = -1;
+-		var month = -1;
+-		var day = -1;
+-		var doy = -1;
+-		var literal = false;
+-		// Check whether a format character is doubled
+-		var lookAhead = function(match) {
+-			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+-			if (matches)
+-				iFormat++;
+-			return matches;
+-		};
+-		// Extract a number from the string value
+-		var getNumber = function(match) {
+-			var isDoubled = lookAhead(match);
+-			var size = (match == '@' ? 14 : (match == '!' ? 20 :
+-				(match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2))));
+-			var digits = new RegExp('^\\d{1,' + size + '}');
+-			var num = value.substring(iValue).match(digits);
+-			if (!num)
+-				throw 'Missing number at position ' + iValue;
+-			iValue += num[0].length;
+-			return parseInt(num[0], 10);
+-		};
+-		// Extract a name from the string value and convert to an index
+-		var getName = function(match, shortNames, longNames) {
+-			var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+-				return [ [k, v] ];
+-			}).sort(function (a, b) {
+-				return -(a[1].length - b[1].length);
+-			});
+-			var index = -1;
+-			$.each(names, function (i, pair) {
+-				var name = pair[1];
+-				if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {
+-					index = pair[0];
+-					iValue += name.length;
+-					return false;
+-				}
+-			});
+-			if (index != -1)
+-				return index + 1;
+-			else
+-				throw 'Unknown name at position ' + iValue;
+-		};
+-		// Confirm that a literal character matches the string value
+-		var checkLiteral = function() {
+-			if (value.charAt(iValue) != format.charAt(iFormat))
+-				throw 'Unexpected literal at position ' + iValue;
+-			iValue++;
+-		};
+-		var iValue = 0;
+-		for (var iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal)
+-				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+-					literal = false;
+-				else
+-					checkLiteral();
+-			else
+-				switch (format.charAt(iFormat)) {
+-					case 'd':
+-						day = getNumber('d');
+-						break;
+-					case 'D':
+-						getName('D', dayNamesShort, dayNames);
+-						break;
+-					case 'o':
+-						doy = getNumber('o');
+-						break;
+-					case 'm':
+-						month = getNumber('m');
+-						break;
+-					case 'M':
+-						month = getName('M', monthNamesShort, monthNames);
+-						break;
+-					case 'y':
+-						year = getNumber('y');
+-						break;
+-					case '@':
+-						var date = new Date(getNumber('@'));
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case '!':
+-						var date = new Date((getNumber('!') - this._ticksTo1970) / 10000);
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "'":
+-						if (lookAhead("'"))
+-							checkLiteral();
+-						else
+-							literal = true;
+-						break;
+-					default:
+-						checkLiteral();
+-				}
+-		}
+-		if (iValue < value.length){
+-			throw "Extra/unparsed characters found in date: " + value.substring(iValue);
+-		}
+-		if (year == -1)
+-			year = new Date().getFullYear();
+-		else if (year < 100)
+-			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+-				(year <= shortYearCutoff ? 0 : -100);
+-		if (doy > -1) {
+-			month = 1;
+-			day = doy;
+-			do {
+-				var dim = this._getDaysInMonth(year, month - 1);
+-				if (day <= dim)
+-					break;
+-				month++;
+-				day -= dim;
+-			} while (true);
+-		}
+-		var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+-		if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
+-			throw 'Invalid date'; // E.g. 31/02/00
+-		return date;
+-	},
+-
+-	/* Standard date formats. */
+-	ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
+-	COOKIE: 'D, dd M yy',
+-	ISO_8601: 'yy-mm-dd',
+-	RFC_822: 'D, d M y',
+-	RFC_850: 'DD, dd-M-y',
+-	RFC_1036: 'D, d M y',
+-	RFC_1123: 'D, d M yy',
+-	RFC_2822: 'D, d M yy',
+-	RSS: 'D, d M y', // RFC 822
+-	TICKS: '!',
+-	TIMESTAMP: '@',
+-	W3C: 'yy-mm-dd', // ISO 8601
+-
+-	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+-		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+-
+-	/* Format a date object into a string value.
+-	   The format can be combinations of the following:
+-	   d  - day of month (no leading zero)
+-	   dd - day of month (two digit)
+-	   o  - day of year (no leading zeros)
+-	   oo - day of year (three digit)
+-	   D  - day name short
+-	   DD - day name long
+-	   m  - month of year (no leading zero)
+-	   mm - month of year (two digit)
+-	   M  - month name short
+-	   MM - month name long
+-	   y  - year (two digit)
+-	   yy - year (four digit)
+-	   @ - Unix timestamp (ms since 01/01/1970)
+-	   ! - Windows ticks (100ns since 01/01/0001)
+-	   '...' - literal text
+-	   '' - single quote
+-
+-	   @param  format    string - the desired format of the date
+-	   @param  date      Date - the date value to format
+-	   @param  settings  Object - attributes include:
+-	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
+-	                     dayNames         string[7] - names of the days from Sunday (optional)
+-	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
+-	                     monthNames       string[12] - names of the months (optional)
+-	   @return  string - the date in the above format */
+-	formatDate: function (format, date, settings) {
+-		if (!date)
+-			return '';
+-		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+-		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+-		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+-		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+-		// Check whether a format character is doubled
+-		var lookAhead = function(match) {
+-			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+-			if (matches)
+-				iFormat++;
+-			return matches;
+-		};
+-		// Format a number, with leading zero if necessary
+-		var formatNumber = function(match, value, len) {
+-			var num = '' + value;
+-			if (lookAhead(match))
+-				while (num.length < len)
+-					num = '0' + num;
+-			return num;
+-		};
+-		// Format a name, short or long as requested
+-		var formatName = function(match, value, shortNames, longNames) {
+-			return (lookAhead(match) ? longNames[value] : shortNames[value]);
+-		};
+-		var output = '';
+-		var literal = false;
+-		if (date)
+-			for (var iFormat = 0; iFormat < format.length; iFormat++) {
+-				if (literal)
+-					if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+-						literal = false;
+-					else
+-						output += format.charAt(iFormat);
+-				else
+-					switch (format.charAt(iFormat)) {
+-						case 'd':
+-							output += formatNumber('d', date.getDate(), 2);
+-							break;
+-						case 'D':
+-							output += formatName('D', date.getDay(), dayNamesShort, dayNames);
+-							break;
+-						case 'o':
+-							output += formatNumber('o',
+-								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+-							break;
+-						case 'm':
+-							output += formatNumber('m', date.getMonth() + 1, 2);
+-							break;
+-						case 'M':
+-							output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
+-							break;
+-						case 'y':
+-							output += (lookAhead('y') ? date.getFullYear() :
+-								(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
+-							break;
+-						case '@':
+-							output += date.getTime();
+-							break;
+-						case '!':
+-							output += date.getTime() * 10000 + this._ticksTo1970;
+-							break;
+-						case "'":
+-							if (lookAhead("'"))
+-								output += "'";
+-							else
+-								literal = true;
+-							break;
+-						default:
+-							output += format.charAt(iFormat);
+-					}
+-			}
+-		return output;
+-	},
+-
+-	/* Extract all possible characters from the date format. */
+-	_possibleChars: function (format) {
+-		var chars = '';
+-		var literal = false;
+-		// Check whether a format character is doubled
+-		var lookAhead = function(match) {
+-			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+-			if (matches)
+-				iFormat++;
+-			return matches;
+-		};
+-		for (var iFormat = 0; iFormat < format.length; iFormat++)
+-			if (literal)
+-				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+-					literal = false;
+-				else
+-					chars += format.charAt(iFormat);
+-			else
+-				switch (format.charAt(iFormat)) {
+-					case 'd': case 'm': case 'y': case '@':
+-						chars += '0123456789';
+-						break;
+-					case 'D': case 'M':
+-						return null; // Accept anything
+-					case "'":
+-						if (lookAhead("'"))
+-							chars += "'";
+-						else
+-							literal = true;
+-						break;
+-					default:
+-						chars += format.charAt(iFormat);
+-				}
+-		return chars;
+-	},
+-
+-	/* Get a setting value, defaulting if necessary. */
+-	_get: function(inst, name) {
+-		return inst.settings[name] !== undefined ?
+-			inst.settings[name] : this._defaults[name];
+-	},
+-
+-	/* Parse existing date and initialise date picker. */
+-	_setDateFromField: function(inst, noDefault) {
+-		if (inst.input.val() == inst.lastVal) {
+-			return;
+-		}
+-		var dateFormat = this._get(inst, 'dateFormat');
+-		var dates = inst.lastVal = inst.input ? inst.input.val() : null;
+-		var date, defaultDate;
+-		date = defaultDate = this._getDefaultDate(inst);
+-		var settings = this._getFormatConfig(inst);
+-		try {
+-			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+-		} catch (event) {
+-			this.log(event);
+-			dates = (noDefault ? '' : dates);
+-		}
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		inst.currentDay = (dates ? date.getDate() : 0);
+-		inst.currentMonth = (dates ? date.getMonth() : 0);
+-		inst.currentYear = (dates ? date.getFullYear() : 0);
+-		this._adjustInstDate(inst);
+-	},
+-
+-	/* Retrieve the default date shown on opening. */
+-	_getDefaultDate: function(inst) {
+-		return this._restrictMinMax(inst,
+-			this._determineDate(inst, this._get(inst, 'defaultDate'), new Date()));
+-	},
+-
+-	/* A date may be specified as an exact value or a relative one. */
+-	_determineDate: function(inst, date, defaultDate) {
+-		var offsetNumeric = function(offset) {
+-			var date = new Date();
+-			date.setDate(date.getDate() + offset);
+-			return date;
+-		};
+-		var offsetString = function(offset) {
+-			try {
+-				return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
+-					offset, $.datepicker._getFormatConfig(inst));
+-			}
+-			catch (e) {
+-				// Ignore
+-			}
+-			var date = (offset.toLowerCase().match(/^c/) ?
+-				$.datepicker._getDate(inst) : null) || new Date();
+-			var year = date.getFullYear();
+-			var month = date.getMonth();
+-			var day = date.getDate();
+-			var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
+-			var matches = pattern.exec(offset);
+-			while (matches) {
+-				switch (matches[2] || 'd') {
+-					case 'd' : case 'D' :
+-						day += parseInt(matches[1],10); break;
+-					case 'w' : case 'W' :
+-						day += parseInt(matches[1],10) * 7; break;
+-					case 'm' : case 'M' :
+-						month += parseInt(matches[1],10);
+-						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-						break;
+-					case 'y': case 'Y' :
+-						year += parseInt(matches[1],10);
+-						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-						break;
+-				}
+-				matches = pattern.exec(offset);
+-			}
+-			return new Date(year, month, day);
+-		};
+-		var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) :
+-			(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+-		newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
+-		if (newDate) {
+-			newDate.setHours(0);
+-			newDate.setMinutes(0);
+-			newDate.setSeconds(0);
+-			newDate.setMilliseconds(0);
+-		}
+-		return this._daylightSavingAdjust(newDate);
+-	},
+-
+-	/* Handle switch to/from daylight saving.
+-	   Hours may be non-zero on daylight saving cut-over:
+-	   > 12 when midnight changeover, but then cannot generate
+-	   midnight datetime, so jump to 1AM, otherwise reset.
+-	   @param  date  (Date) the date to check
+-	   @return  (Date) the corrected date */
+-	_daylightSavingAdjust: function(date) {
+-		if (!date) return null;
+-		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+-		return date;
+-	},
+-
+-	/* Set the date(s) directly. */
+-	_setDate: function(inst, date, noChange) {
+-		var clear = !date;
+-		var origMonth = inst.selectedMonth;
+-		var origYear = inst.selectedYear;
+-		var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+-		inst.selectedDay = inst.currentDay = newDate.getDate();
+-		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+-		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+-		if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
+-			this._notifyChange(inst);
+-		this._adjustInstDate(inst);
+-		if (inst.input) {
+-			inst.input.val(clear ? '' : this._formatDate(inst));
+-		}
+-
+-		var onSelect = this._get(inst, 'onSelect');
+-		if (onSelect) {
+-			var dateStr = this._formatDate(inst);
+-
+-			// trigger custom callback
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-		}
+-	},
+-
+-	/* Retrieve the date(s) directly. */
+-	_getDate: function(inst) {
+-		var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
+-			this._daylightSavingAdjust(new Date(
+-			inst.currentYear, inst.currentMonth, inst.currentDay)));
+-			return startDate;
+-	},
+-
+-	/* Generate the HTML for the current state of the date picker. */
+-	_generateHTML: function(inst) {
+-		var today = new Date();
+-		today = this._daylightSavingAdjust(
+-			new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
+-		var isRTL = this._get(inst, 'isRTL');
+-		var showButtonPanel = this._get(inst, 'showButtonPanel');
+-		var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
+-		var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
+-		var numMonths = this._getNumberOfMonths(inst);
+-		var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
+-		var stepMonths = this._get(inst, 'stepMonths');
+-		var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
+-		var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+-			new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		var minDate = this._getMinMaxDate(inst, 'min');
+-		var maxDate = this._getMinMaxDate(inst, 'max');
+-		var drawMonth = inst.drawMonth - showCurrentAtPos;
+-		var drawYear = inst.drawYear;
+-		if (drawMonth < 0) {
+-			drawMonth += 12;
+-			drawYear--;
+-		}
+-		if (maxDate) {
+-			var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+-				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+-			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+-			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+-				drawMonth--;
+-				if (drawMonth < 0) {
+-					drawMonth = 11;
+-					drawYear--;
+-				}
+-			}
+-		}
+-		inst.drawMonth = drawMonth;
+-		inst.drawYear = drawYear;
+-		var prevText = this._get(inst, 'prevText');
+-		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-		var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+-			'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+-			'.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
+-			' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
+-			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
+-		var nextText = this._get(inst, 'nextText');
+-		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-		var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+-			'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+-			'.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
+-			' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
+-			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
+-		var currentText = this._get(inst, 'currentText');
+-		var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
+-		currentText = (!navigationAsDateFormat ? currentText :
+-			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+-		var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+-			'.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
+-		var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
+-			(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+-			'.datepicker._gotoToday(\'#' + inst.id + '\');"' +
+-			'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
+-		var firstDay = parseInt(this._get(inst, 'firstDay'),10);
+-		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+-		var showWeek = this._get(inst, 'showWeek');
+-		var dayNames = this._get(inst, 'dayNames');
+-		var dayNamesShort = this._get(inst, 'dayNamesShort');
+-		var dayNamesMin = this._get(inst, 'dayNamesMin');
+-		var monthNames = this._get(inst, 'monthNames');
+-		var monthNamesShort = this._get(inst, 'monthNamesShort');
+-		var beforeShowDay = this._get(inst, 'beforeShowDay');
+-		var showOtherMonths = this._get(inst, 'showOtherMonths');
+-		var selectOtherMonths = this._get(inst, 'selectOtherMonths');
+-		var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
+-		var defaultDate = this._getDefaultDate(inst);
+-		var html = '';
+-		for (var row = 0; row < numMonths[0]; row++) {
+-			var group = '';
+-			this.maxRows = 4;
+-			for (var col = 0; col < numMonths[1]; col++) {
+-				var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+-				var cornerClass = ' ui-corner-all';
+-				var calender = '';
+-				if (isMultiMonth) {
+-					calender += '<div class="ui-datepicker-group';
+-					if (numMonths[1] > 1)
+-						switch (col) {
+-							case 0: calender += ' ui-datepicker-group-first';
+-								cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
+-							case numMonths[1]-1: calender += ' ui-datepicker-group-last';
+-								cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
+-							default: calender += ' ui-datepicker-group-middle'; cornerClass = ''; break;
+-						}
+-					calender += '">';
+-				}
+-				calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
+-					(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
+-					(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
+-					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+-					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+-					'</div><table class="ui-datepicker-calendar"><thead>' +
+-					'<tr>';
+-				var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : '');
+-				for (var dow = 0; dow < 7; dow++) { // days of the week
+-					var day = (dow + firstDay) % 7;
+-					thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
+-						'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
+-				}
+-				calender += thead + '</tr></thead><tbody>';
+-				var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+-				if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
+-					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+-				var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+-				var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+-				var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+-				this.maxRows = numRows;
+-				var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+-				for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+-					calender += '<tr>';
+-					var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' +
+-						this._get(inst, 'calculateWeek')(printDate) + '</td>');
+-					for (var dow = 0; dow < 7; dow++) { // create date picker days
+-						var daySettings = (beforeShowDay ?
+-							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
+-						var otherMonth = (printDate.getMonth() != drawMonth);
+-						var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+-							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+-						tbody += '<td class="' +
+-							((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
+-							(otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
+-							((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
+-							(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
+-							// or defaultDate is current printedDate and defaultDate is selectedDate
+-							' ' + this._dayOverClass : '') + // highlight selected day
+-							(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') +  // highlight unselectable days
+-							(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
+-							(printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day
+-							(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
+-							((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
+-							(unselectable ? '' : ' onclick="DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' +
+-							inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);return false;"') + '>' + // actions
+-							(otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months
+-							(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
+-							(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
+-							(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day
+-							(otherMonth ? ' ui-priority-secondary' : '') + // distinguish dates from other months
+-							'" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display selectable date
+-						printDate.setDate(printDate.getDate() + 1);
+-						printDate = this._daylightSavingAdjust(printDate);
+-					}
+-					calender += tbody + '</tr>';
+-				}
+-				drawMonth++;
+-				if (drawMonth > 11) {
+-					drawMonth = 0;
+-					drawYear++;
+-				}
+-				calender += '</tbody></table>' + (isMultiMonth ? '</div>' + 
+-							((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
+-				group += calender;
+-			}
+-			html += group;
+-		}
+-		html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
+-			'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
+-		inst._keyEvent = false;
+-		return html;
+-	},
+-
+-	/* Generate the month and year header. */
+-	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+-			secondary, monthNames, monthNamesShort) {
+-		var changeMonth = this._get(inst, 'changeMonth');
+-		var changeYear = this._get(inst, 'changeYear');
+-		var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
+-		var html = '<div class="ui-datepicker-title">';
+-		var monthHtml = '';
+-		// month selection
+-		if (secondary || !changeMonth)
+-			monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>';
+-		else {
+-			var inMinYear = (minDate && minDate.getFullYear() == drawYear);
+-			var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
+-			monthHtml += '<select class="ui-datepicker-month" ' +
+-				'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
+-			 	'>';
+-			for (var month = 0; month < 12; month++) {
+-				if ((!inMinYear || month >= minDate.getMonth()) &&
+-						(!inMaxYear || month <= maxDate.getMonth()))
+-					monthHtml += '<option value="' + month + '"' +
+-						(month == drawMonth ? ' selected="selected"' : '') +
+-						'>' + monthNamesShort[month] + '</option>';
+-			}
+-			monthHtml += '</select>';
+-		}
+-		if (!showMonthAfterYear)
+-			html += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');
+-		// year selection
+-		if ( !inst.yearshtml ) {
+-			inst.yearshtml = '';
+-			if (secondary || !changeYear)
+-				html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
+-			else {
+-				// determine range of years to display
+-				var years = this._get(inst, 'yearRange').split(':');
+-				var thisYear = new Date().getFullYear();
+-				var determineYear = function(value) {
+-					var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+-						(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
+-						parseInt(value, 10)));
+-					return (isNaN(year) ? thisYear : year);
+-				};
+-				var year = determineYear(years[0]);
+-				var endYear = Math.max(year, determineYear(years[1] || ''));
+-				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+-				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+-				inst.yearshtml += '<select class="ui-datepicker-year" ' +
+-					'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
+-					'>';
+-				for (; year <= endYear; year++) {
+-					inst.yearshtml += '<option value="' + year + '"' +
+-						(year == drawYear ? ' selected="selected"' : '') +
+-						'>' + year + '</option>';
+-				}
+-				inst.yearshtml += '</select>';
+-				
+-				html += inst.yearshtml;
+-				inst.yearshtml = null;
+-			}
+-		}
+-		html += this._get(inst, 'yearSuffix');
+-		if (showMonthAfterYear)
+-			html += (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '') + monthHtml;
+-		html += '</div>'; // Close datepicker_header
+-		return html;
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustInstDate: function(inst, offset, period) {
+-		var year = inst.drawYear + (period == 'Y' ? offset : 0);
+-		var month = inst.drawMonth + (period == 'M' ? offset : 0);
+-		var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
+-			(period == 'D' ? offset : 0);
+-		var date = this._restrictMinMax(inst,
+-			this._daylightSavingAdjust(new Date(year, month, day)));
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		if (period == 'M' || period == 'Y')
+-			this._notifyChange(inst);
+-	},
+-
+-	/* Ensure a date is within any min/max bounds. */
+-	_restrictMinMax: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, 'min');
+-		var maxDate = this._getMinMaxDate(inst, 'max');
+-		var newDate = (minDate && date < minDate ? minDate : date);
+-		newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
+-		return newDate;
+-	},
+-
+-	/* Notify change of month/year. */
+-	_notifyChange: function(inst) {
+-		var onChange = this._get(inst, 'onChangeMonthYear');
+-		if (onChange)
+-			onChange.apply((inst.input ? inst.input[0] : null),
+-				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+-	},
+-
+-	/* Determine the number of months to show. */
+-	_getNumberOfMonths: function(inst) {
+-		var numMonths = this._get(inst, 'numberOfMonths');
+-		return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
+-	},
+-
+-	/* Determine the current maximum date - ensure no time components are set. */
+-	_getMinMaxDate: function(inst, minMax) {
+-		return this._determineDate(inst, this._get(inst, minMax + 'Date'), null);
+-	},
+-
+-	/* Find the number of days in a given month. */
+-	_getDaysInMonth: function(year, month) {
+-		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+-	},
+-
+-	/* Find the day of the week of the first of a month. */
+-	_getFirstDayOfMonth: function(year, month) {
+-		return new Date(year, month, 1).getDay();
+-	},
+-
+-	/* Determines if we should allow a "next/prev" month display change. */
+-	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+-		var numMonths = this._getNumberOfMonths(inst);
+-		var date = this._daylightSavingAdjust(new Date(curYear,
+-			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+-		if (offset < 0)
+-			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+-		return this._isInRange(inst, date);
+-	},
+-
+-	/* Is the given date in the accepted range? */
+-	_isInRange: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, 'min');
+-		var maxDate = this._getMinMaxDate(inst, 'max');
+-		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+-			(!maxDate || date.getTime() <= maxDate.getTime()));
+-	},
+-
+-	/* Provide the configuration settings for formatting/parsing. */
+-	_getFormatConfig: function(inst) {
+-		var shortYearCutoff = this._get(inst, 'shortYearCutoff');
+-		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
+-			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		return {shortYearCutoff: shortYearCutoff,
+-			dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
+-			monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
+-	},
+-
+-	/* Format the given date for display. */
+-	_formatDate: function(inst, day, month, year) {
+-		if (!day) {
+-			inst.currentDay = inst.selectedDay;
+-			inst.currentMonth = inst.selectedMonth;
+-			inst.currentYear = inst.selectedYear;
+-		}
+-		var date = (day ? (typeof day == 'object' ? day :
+-			this._daylightSavingAdjust(new Date(year, month, day))) :
+-			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
+-	}
+-});
+-
+-/*
+- * Bind hover events for datepicker elements.
+- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+- */ 
+-function bindHover(dpDiv) {
+-	var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';
+-	return dpDiv.bind('mouseout', function(event) {
+-			var elem = $( event.target ).closest( selector );
+-			if ( !elem.length ) {
+-				return;
+-			}
+-			elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" );
+-		})
+-		.bind('mouseover', function(event) {
+-			var elem = $( event.target ).closest( selector );
+-			if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) ||
+-					!elem.length ) {
+-				return;
+-			}
+-			elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
+-			elem.addClass('ui-state-hover');
+-			if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover');
+-			if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover');
+-		});
+-}
+-
+-/* jQuery extend now ignores nulls! */
+-function extendRemove(target, props) {
+-	$.extend(target, props);
+-	for (var name in props)
+-		if (props[name] == null || props[name] == undefined)
+-			target[name] = props[name];
+-	return target;
+-};
+-
+-/* Determine whether an object is an array. */
+-function isArray(a) {
+-	return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
+-		(a.constructor && a.constructor.toString().match(/\Array\(\)/))));
+-};
+-
+-/* Invoke the datepicker functionality.
+-   @param  options  string - a command, optionally followed by additional parameters or
+-                    Object - settings for attaching new datepicker functionality
+-   @return  jQuery object */
+-$.fn.datepicker = function(options){
+-	
+-	/* Verify an empty collection wasn't passed - Fixes #6976 */
+-	if ( !this.length ) {
+-		return this;
+-	}
+-	
+-	/* Initialise the date picker. */
+-	if (!$.datepicker.initialized) {
+-		$(document).mousedown($.datepicker._checkExternalClick).
+-			find('body').append($.datepicker.dpDiv);
+-		$.datepicker.initialized = true;
+-	}
+-
+-	var otherArgs = Array.prototype.slice.call(arguments, 1);
+-	if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget'))
+-		return $.datepicker['_' + options + 'Datepicker'].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
+-		return $.datepicker['_' + options + 'Datepicker'].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	return this.each(function() {
+-		typeof options == 'string' ?
+-			$.datepicker['_' + options + 'Datepicker'].
+-				apply($.datepicker, [this].concat(otherArgs)) :
+-			$.datepicker._attachDatepicker(this, options);
+-	});
+-};
+-
+-$.datepicker = new Datepicker(); // singleton instance
+-$.datepicker.initialized = false;
+-$.datepicker.uuid = new Date().getTime();
+-$.datepicker.version = "1.8.15";
+-
+-// Workaround for #4055
+-// Add another global to avoid noConflict issues with inline event handlers
+-window['DP_jQuery_' + dpuuid] = $;
+-
+-})(jQuery);
+-/*
+- * jQuery UI Dialog 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Dialog
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *  jquery.ui.button.js
+- *	jquery.ui.draggable.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.position.js
+- *	jquery.ui.resizable.js
+- */
+-(function( $, undefined ) {
+-
+-var uiDialogClasses =
+-		'ui-dialog ' +
+-		'ui-widget ' +
+-		'ui-widget-content ' +
+-		'ui-corner-all ',
+-	sizeRelatedOptions = {
+-		buttons: true,
+-		height: true,
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true,
+-		width: true
+-	},
+-	resizableRelatedOptions = {
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true
+-	},
+-	// support for jQuery 1.3.2 - handle common attrFn methods for dialog
+-	attrFn = $.attrFn || {
+-		val: true,
+-		css: true,
+-		html: true,
+-		text: true,
+-		data: true,
+-		width: true,
+-		height: true,
+-		offset: true,
+-		click: true
+-	};
+-
+-$.widget("ui.dialog", {
+-	options: {
+-		autoOpen: true,
+-		buttons: {},
+-		closeOnEscape: true,
+-		closeText: 'close',
+-		dialogClass: '',
+-		draggable: true,
+-		hide: null,
+-		height: 'auto',
+-		maxHeight: false,
+-		maxWidth: false,
+-		minHeight: 150,
+-		minWidth: 150,
+-		modal: false,
+-		position: {
+-			my: 'center',
+-			at: 'center',
+-			collision: 'fit',
+-			// ensure that the titlebar is never outside the document
+-			using: function(pos) {
+-				var topOffset = $(this).css(pos).offset().top;
+-				if (topOffset < 0) {
+-					$(this).css('top', pos.top - topOffset);
+-				}
+-			}
+-		},
+-		resizable: true,
+-		show: null,
+-		stack: true,
+-		title: '',
+-		width: 300,
+-		zIndex: 1000
+-	},
+-
+-	_create: function() {
+-		this.originalTitle = this.element.attr('title');
+-		// #5742 - .attr() might return a DOMElement
+-		if ( typeof this.originalTitle !== "string" ) {
+-			this.originalTitle = "";
+-		}
+-
+-		this.options.title = this.options.title || this.originalTitle;
+-		var self = this,
+-			options = self.options,
+-
+-			title = options.title || '&#160;',
+-			titleId = $.ui.dialog.getTitleId(self.element),
+-
+-			uiDialog = (self.uiDialog = $('<div></div>'))
+-				.appendTo(document.body)
+-				.hide()
+-				.addClass(uiDialogClasses + options.dialogClass)
+-				.css({
+-					zIndex: options.zIndex
+-				})
+-				// setting tabIndex makes the div focusable
+-				// setting outline to 0 prevents a border on focus in Mozilla
+-				.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
+-					if (options.closeOnEscape && event.keyCode &&
+-						event.keyCode === $.ui.keyCode.ESCAPE) {
+-						
+-						self.close(event);
+-						event.preventDefault();
+-					}
+-				})
+-				.attr({
+-					role: 'dialog',
+-					'aria-labelledby': titleId
+-				})
+-				.mousedown(function(event) {
+-					self.moveToTop(false, event);
+-				}),
+-
+-			uiDialogContent = self.element
+-				.show()
+-				.removeAttr('title')
+-				.addClass(
+-					'ui-dialog-content ' +
+-					'ui-widget-content')
+-				.appendTo(uiDialog),
+-
+-			uiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>'))
+-				.addClass(
+-					'ui-dialog-titlebar ' +
+-					'ui-widget-header ' +
+-					'ui-corner-all ' +
+-					'ui-helper-clearfix'
+-				)
+-				.prependTo(uiDialog),
+-
+-			uiDialogTitlebarClose = $('<a href="#"></a>')
+-				.addClass(
+-					'ui-dialog-titlebar-close ' +
+-					'ui-corner-all'
+-				)
+-				.attr('role', 'button')
+-				.hover(
+-					function() {
+-						uiDialogTitlebarClose.addClass('ui-state-hover');
+-					},
+-					function() {
+-						uiDialogTitlebarClose.removeClass('ui-state-hover');
+-					}
+-				)
+-				.focus(function() {
+-					uiDialogTitlebarClose.addClass('ui-state-focus');
+-				})
+-				.blur(function() {
+-					uiDialogTitlebarClose.removeClass('ui-state-focus');
+-				})
+-				.click(function(event) {
+-					self.close(event);
+-					return false;
+-				})
+-				.appendTo(uiDialogTitlebar),
+-
+-			uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>'))
+-				.addClass(
+-					'ui-icon ' +
+-					'ui-icon-closethick'
+-				)
+-				.text(options.closeText)
+-				.appendTo(uiDialogTitlebarClose),
+-
+-			uiDialogTitle = $('<span></span>')
+-				.addClass('ui-dialog-title')
+-				.attr('id', titleId)
+-				.html(title)
+-				.prependTo(uiDialogTitlebar);
+-
+-		//handling of deprecated beforeclose (vs beforeClose) option
+-		//Ticket #4669 http://dev.jqueryui.com/ticket/4669
+-		//TODO: remove in 1.9pre
+-		if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) {
+-			options.beforeClose = options.beforeclose;
+-		}
+-
+-		uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
+-
+-		if (options.draggable && $.fn.draggable) {
+-			self._makeDraggable();
+-		}
+-		if (options.resizable && $.fn.resizable) {
+-			self._makeResizable();
+-		}
+-
+-		self._createButtons(options.buttons);
+-		self._isOpen = false;
+-
+-		if ($.fn.bgiframe) {
+-			uiDialog.bgiframe();
+-		}
+-	},
+-
+-	_init: function() {
+-		if ( this.options.autoOpen ) {
+-			this.open();
+-		}
+-	},
+-
+-	destroy: function() {
+-		var self = this;
+-		
+-		if (self.overlay) {
+-			self.overlay.destroy();
+-		}
+-		self.uiDialog.hide();
+-		self.element
+-			.unbind('.dialog')
+-			.removeData('dialog')
+-			.removeClass('ui-dialog-content ui-widget-content')
+-			.hide().appendTo('body');
+-		self.uiDialog.remove();
+-
+-		if (self.originalTitle) {
+-			self.element.attr('title', self.originalTitle);
+-		}
+-
+-		return self;
+-	},
+-
+-	widget: function() {
+-		return this.uiDialog;
+-	},
+-
+-	close: function(event) {
+-		var self = this,
+-			maxZ, thisZ;
+-		
+-		if (false === self._trigger('beforeClose', event)) {
+-			return;
+-		}
+-
+-		if (self.overlay) {
+-			self.overlay.destroy();
+-		}
+-		self.uiDialog.unbind('keypress.ui-dialog');
+-
+-		self._isOpen = false;
+-
+-		if (self.options.hide) {
+-			self.uiDialog.hide(self.options.hide, function() {
+-				self._trigger('close', event);
+-			});
+-		} else {
+-			self.uiDialog.hide();
+-			self._trigger('close', event);
+-		}
+-
+-		$.ui.dialog.overlay.resize();
+-
+-		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+-		if (self.options.modal) {
+-			maxZ = 0;
+-			$('.ui-dialog').each(function() {
+-				if (this !== self.uiDialog[0]) {
+-					thisZ = $(this).css('z-index');
+-					if(!isNaN(thisZ)) {
+-						maxZ = Math.max(maxZ, thisZ);
+-					}
+-				}
+-			});
+-			$.ui.dialog.maxZ = maxZ;
+-		}
+-
+-		return self;
+-	},
+-
+-	isOpen: function() {
+-		return this._isOpen;
+-	},
+-
+-	// the force parameter allows us to move modal dialogs to their correct
+-	// position on open
+-	moveToTop: function(force, event) {
+-		var self = this,
+-			options = self.options,
+-			saveScroll;
+-
+-		if ((options.modal && !force) ||
+-			(!options.stack && !options.modal)) {
+-			return self._trigger('focus', event);
+-		}
+-
+-		if (options.zIndex > $.ui.dialog.maxZ) {
+-			$.ui.dialog.maxZ = options.zIndex;
+-		}
+-		if (self.overlay) {
+-			$.ui.dialog.maxZ += 1;
+-			self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ);
+-		}
+-
+-		//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
+-		//  http://ui.jquery.com/bugs/ticket/3193
+-		saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() };
+-		$.ui.dialog.maxZ += 1;
+-		self.uiDialog.css('z-index', $.ui.dialog.maxZ);
+-		self.element.attr(saveScroll);
+-		self._trigger('focus', event);
+-
+-		return self;
+-	},
+-
+-	open: function() {
+-		if (this._isOpen) { return; }
+-
+-		var self = this,
+-			options = self.options,
+-			uiDialog = self.uiDialog;
+-
+-		self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
+-		self._size();
+-		self._position(options.position);
+-		uiDialog.show(options.show);
+-		self.moveToTop(true);
+-
+-		// prevent tabbing out of modal dialogs
+-		if (options.modal) {
+-			uiDialog.bind('keypress.ui-dialog', function(event) {
+-				if (event.keyCode !== $.ui.keyCode.TAB) {
+-					return;
+-				}
+-
+-				var tabbables = $(':tabbable', this),
+-					first = tabbables.filter(':first'),
+-					last  = tabbables.filter(':last');
+-
+-				if (event.target === last[0] && !event.shiftKey) {
+-					first.focus(1);
+-					return false;
+-				} else if (event.target === first[0] && event.shiftKey) {
+-					last.focus(1);
+-					return false;
+-				}
+-			});
+-		}
+-
+-		// set focus to the first tabbable element in the content area or the first button
+-		// if there are no tabbable elements, set focus on the dialog itself
+-		$(self.element.find(':tabbable').get().concat(
+-			uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
+-				uiDialog.get()))).eq(0).focus();
+-
+-		self._isOpen = true;
+-		self._trigger('open');
+-
+-		return self;
+-	},
+-
+-	_createButtons: function(buttons) {
+-		var self = this,
+-			hasButtons = false,
+-			uiDialogButtonPane = $('<div></div>')
+-				.addClass(
+-					'ui-dialog-buttonpane ' +
+-					'ui-widget-content ' +
+-					'ui-helper-clearfix'
+-				),
+-			uiButtonSet = $( "<div></div>" )
+-				.addClass( "ui-dialog-buttonset" )
+-				.appendTo( uiDialogButtonPane );
+-
+-		// if we already have a button pane, remove it
+-		self.uiDialog.find('.ui-dialog-buttonpane').remove();
+-
+-		if (typeof buttons === 'object' && buttons !== null) {
+-			$.each(buttons, function() {
+-				return !(hasButtons = true);
+-			});
+-		}
+-		if (hasButtons) {
+-			$.each(buttons, function(name, props) {
+-				props = $.isFunction( props ) ?
+-					{ click: props, text: name } :
+-					props;
+-				var button = $('<button type="button"></button>')
+-					.click(function() {
+-						props.click.apply(self.element[0], arguments);
+-					})
+-					.appendTo(uiButtonSet);
+-				// can't use .attr( props, true ) with jQuery 1.3.2.
+-				$.each( props, function( key, value ) {
+-					if ( key === "click" ) {
+-						return;
+-					}
+-					if ( key in attrFn ) {
+-						button[ key ]( value );
+-					} else {
+-						button.attr( key, value );
+-					}
+-				});
+-				if ($.fn.button) {
+-					button.button();
+-				}
+-			});
+-			uiDialogButtonPane.appendTo(self.uiDialog);
+-		}
+-	},
+-
+-	_makeDraggable: function() {
+-		var self = this,
+-			options = self.options,
+-			doc = $(document),
+-			heightBeforeDrag;
+-
+-		function filteredUi(ui) {
+-			return {
+-				position: ui.position,
+-				offset: ui.offset
+-			};
+-		}
+-
+-		self.uiDialog.draggable({
+-			cancel: '.ui-dialog-content, .ui-dialog-titlebar-close',
+-			handle: '.ui-dialog-titlebar',
+-			containment: 'document',
+-			start: function(event, ui) {
+-				heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height();
+-				$(this).height($(this).height()).addClass("ui-dialog-dragging");
+-				self._trigger('dragStart', event, filteredUi(ui));
+-			},
+-			drag: function(event, ui) {
+-				self._trigger('drag', event, filteredUi(ui));
+-			},
+-			stop: function(event, ui) {
+-				options.position = [ui.position.left - doc.scrollLeft(),
+-					ui.position.top - doc.scrollTop()];
+-				$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
+-				self._trigger('dragStop', event, filteredUi(ui));
+-				$.ui.dialog.overlay.resize();
+-			}
+-		});
+-	},
+-
+-	_makeResizable: function(handles) {
+-		handles = (handles === undefined ? this.options.resizable : handles);
+-		var self = this,
+-			options = self.options,
+-			// .ui-resizable has position: relative defined in the stylesheet
+-			// but dialogs have to use absolute or fixed positioning
+-			position = self.uiDialog.css('position'),
+-			resizeHandles = (typeof handles === 'string' ?
+-				handles	:
+-				'n,e,s,w,se,sw,ne,nw'
+-			);
+-
+-		function filteredUi(ui) {
+-			return {
+-				originalPosition: ui.originalPosition,
+-				originalSize: ui.originalSize,
+-				position: ui.position,
+-				size: ui.size
+-			};
+-		}
+-
+-		self.uiDialog.resizable({
+-			cancel: '.ui-dialog-content',
+-			containment: 'document',
+-			alsoResize: self.element,
+-			maxWidth: options.maxWidth,
+-			maxHeight: options.maxHeight,
+-			minWidth: options.minWidth,
+-			minHeight: self._minHeight(),
+-			handles: resizeHandles,
+-			start: function(event, ui) {
+-				$(this).addClass("ui-dialog-resizing");
+-				self._trigger('resizeStart', event, filteredUi(ui));
+-			},
+-			resize: function(event, ui) {
+-				self._trigger('resize', event, filteredUi(ui));
+-			},
+-			stop: function(event, ui) {
+-				$(this).removeClass("ui-dialog-resizing");
+-				options.height = $(this).height();
+-				options.width = $(this).width();
+-				self._trigger('resizeStop', event, filteredUi(ui));
+-				$.ui.dialog.overlay.resize();
+-			}
+-		})
+-		.css('position', position)
+-		.find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
+-	},
+-
+-	_minHeight: function() {
+-		var options = this.options;
+-
+-		if (options.height === 'auto') {
+-			return options.minHeight;
+-		} else {
+-			return Math.min(options.minHeight, options.height);
+-		}
+-	},
+-
+-	_position: function(position) {
+-		var myAt = [],
+-			offset = [0, 0],
+-			isVisible;
+-
+-		if (position) {
+-			// deep extending converts arrays to objects in jQuery <= 1.3.2 :-(
+-	//		if (typeof position == 'string' || $.isArray(position)) {
+-	//			myAt = $.isArray(position) ? position : position.split(' ');
+-
+-			if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) {
+-				myAt = position.split ? position.split(' ') : [position[0], position[1]];
+-				if (myAt.length === 1) {
+-					myAt[1] = myAt[0];
+-				}
+-
+-				$.each(['left', 'top'], function(i, offsetPosition) {
+-					if (+myAt[i] === myAt[i]) {
+-						offset[i] = myAt[i];
+-						myAt[i] = offsetPosition;
+-					}
+-				});
+-
+-				position = {
+-					my: myAt.join(" "),
+-					at: myAt.join(" "),
+-					offset: offset.join(" ")
+-				};
+-			} 
+-
+-			position = $.extend({}, $.ui.dialog.prototype.options.position, position);
+-		} else {
+-			position = $.ui.dialog.prototype.options.position;
+-		}
+-
+-		// need to show the dialog to get the actual offset in the position plugin
+-		isVisible = this.uiDialog.is(':visible');
+-		if (!isVisible) {
+-			this.uiDialog.show();
+-		}
+-		this.uiDialog
+-			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
+-			.css({ top: 0, left: 0 })
+-			.position($.extend({ of: window }, position));
+-		if (!isVisible) {
+-			this.uiDialog.hide();
+-		}
+-	},
+-
+-	_setOptions: function( options ) {
+-		var self = this,
+-			resizableOptions = {},
+-			resize = false;
+-
+-		$.each( options, function( key, value ) {
+-			self._setOption( key, value );
+-			
+-			if ( key in sizeRelatedOptions ) {
+-				resize = true;
+-			}
+-			if ( key in resizableRelatedOptions ) {
+-				resizableOptions[ key ] = value;
+-			}
+-		});
+-
+-		if ( resize ) {
+-			this._size();
+-		}
+-		if ( this.uiDialog.is( ":data(resizable)" ) ) {
+-			this.uiDialog.resizable( "option", resizableOptions );
+-		}
+-	},
+-
+-	_setOption: function(key, value){
+-		var self = this,
+-			uiDialog = self.uiDialog;
+-
+-		switch (key) {
+-			//handling of deprecated beforeclose (vs beforeClose) option
+-			//Ticket #4669 http://dev.jqueryui.com/ticket/4669
+-			//TODO: remove in 1.9pre
+-			case "beforeclose":
+-				key = "beforeClose";
+-				break;
+-			case "buttons":
+-				self._createButtons(value);
+-				break;
+-			case "closeText":
+-				// ensure that we always pass a string
+-				self.uiDialogTitlebarCloseText.text("" + value);
+-				break;
+-			case "dialogClass":
+-				uiDialog
+-					.removeClass(self.options.dialogClass)
+-					.addClass(uiDialogClasses + value);
+-				break;
+-			case "disabled":
+-				if (value) {
+-					uiDialog.addClass('ui-dialog-disabled');
+-				} else {
+-					uiDialog.removeClass('ui-dialog-disabled');
+-				}
+-				break;
+-			case "draggable":
+-				var isDraggable = uiDialog.is( ":data(draggable)" );
+-				if ( isDraggable && !value ) {
+-					uiDialog.draggable( "destroy" );
+-				}
+-				
+-				if ( !isDraggable && value ) {
+-					self._makeDraggable();
+-				}
+-				break;
+-			case "position":
+-				self._position(value);
+-				break;
+-			case "resizable":
+-				// currently resizable, becoming non-resizable
+-				var isResizable = uiDialog.is( ":data(resizable)" );
+-				if (isResizable && !value) {
+-					uiDialog.resizable('destroy');
+-				}
+-
+-				// currently resizable, changing handles
+-				if (isResizable && typeof value === 'string') {
+-					uiDialog.resizable('option', 'handles', value);
+-				}
+-
+-				// currently non-resizable, becoming resizable
+-				if (!isResizable && value !== false) {
+-					self._makeResizable(value);
+-				}
+-				break;
+-			case "title":
+-				// convert whatever was passed in o a string, for html() to not throw up
+-				$(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || '&#160;'));
+-				break;
+-		}
+-
+-		$.Widget.prototype._setOption.apply(self, arguments);
+-	},
+-
+-	_size: function() {
+-		/* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+-		 * divs will both have width and height set, so we need to reset them
+-		 */
+-		var options = this.options,
+-			nonContentHeight,
+-			minContentHeight,
+-			isVisible = this.uiDialog.is( ":visible" );
+-
+-		// reset content sizing
+-		this.element.show().css({
+-			width: 'auto',
+-			minHeight: 0,
+-			height: 0
+-		});
+-
+-		if (options.minWidth > options.width) {
+-			options.width = options.minWidth;
+-		}
+-
+-		// reset wrapper sizing
+-		// determine the height of all the non-content elements
+-		nonContentHeight = this.uiDialog.css({
+-				height: 'auto',
+-				width: options.width
+-			})
+-			.height();
+-		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+-		
+-		if ( options.height === "auto" ) {
+-			// only needed for IE6 support
+-			if ( $.support.minHeight ) {
+-				this.element.css({
+-					minHeight: minContentHeight,
+-					height: "auto"
+-				});
+-			} else {
+-				this.uiDialog.show();
+-				var autoHeight = this.element.css( "height", "auto" ).height();
+-				if ( !isVisible ) {
+-					this.uiDialog.hide();
+-				}
+-				this.element.height( Math.max( autoHeight, minContentHeight ) );
+-			}
+-		} else {
+-			this.element.height( Math.max( options.height - nonContentHeight, 0 ) );
+-		}
+-
+-		if (this.uiDialog.is(':data(resizable)')) {
+-			this.uiDialog.resizable('option', 'minHeight', this._minHeight());
+-		}
+-	}
+-});
+-
+-$.extend($.ui.dialog, {
+-	version: "1.8.15",
+-
+-	uuid: 0,
+-	maxZ: 0,
+-
+-	getTitleId: function($el) {
+-		var id = $el.attr('id');
+-		if (!id) {
+-			this.uuid += 1;
+-			id = this.uuid;
+-		}
+-		return 'ui-dialog-title-' + id;
+-	},
+-
+-	overlay: function(dialog) {
+-		this.$el = $.ui.dialog.overlay.create(dialog);
+-	}
+-});
+-
+-$.extend($.ui.dialog.overlay, {
+-	instances: [],
+-	// reuse old instances due to IE memory leak with alpha transparency (see #5185)
+-	oldInstances: [],
+-	maxZ: 0,
+-	events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
+-		function(event) { return event + '.dialog-overlay'; }).join(' '),
+-	create: function(dialog) {
+-		if (this.instances.length === 0) {
+-			// prevent use of anchors and inputs
+-			// we use a setTimeout in case the overlay is created from an
+-			// event that we're going to be cancelling (see #2804)
+-			setTimeout(function() {
+-				// handle $(el).dialog().dialog('close') (see #4065)
+-				if ($.ui.dialog.overlay.instances.length) {
+-					$(document).bind($.ui.dialog.overlay.events, function(event) {
+-						// stop events if the z-index of the target is < the z-index of the overlay
+-						// we cannot return true when we don't want to cancel the event (#3523)
+-						if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
+-							return false;
+-						}
+-					});
+-				}
+-			}, 1);
+-
+-			// allow closing by pressing the escape key
+-			$(document).bind('keydown.dialog-overlay', function(event) {
+-				if (dialog.options.closeOnEscape && event.keyCode &&
+-					event.keyCode === $.ui.keyCode.ESCAPE) {
+-					
+-					dialog.close(event);
+-					event.preventDefault();
+-				}
+-			});
+-
+-			// handle window resize
+-			$(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
+-		}
+-
+-		var $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay'))
+-			.appendTo(document.body)
+-			.css({
+-				width: this.width(),
+-				height: this.height()
+-			});
+-
+-		if ($.fn.bgiframe) {
+-			$el.bgiframe();
+-		}
+-
+-		this.instances.push($el);
+-		return $el;
+-	},
+-
+-	destroy: function($el) {
+-		var indexOf = $.inArray($el, this.instances);
+-		if (indexOf != -1){
+-			this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
+-		}
+-
+-		if (this.instances.length === 0) {
+-			$([document, window]).unbind('.dialog-overlay');
+-		}
+-
+-		$el.remove();
+-		
+-		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+-		var maxZ = 0;
+-		$.each(this.instances, function() {
+-			maxZ = Math.max(maxZ, this.css('z-index'));
+-		});
+-		this.maxZ = maxZ;
+-	},
+-
+-	height: function() {
+-		var scrollHeight,
+-			offsetHeight;
+-		// handle IE 6
+-		if ($.browser.msie && $.browser.version < 7) {
+-			scrollHeight = Math.max(
+-				document.documentElement.scrollHeight,
+-				document.body.scrollHeight
+-			);
+-			offsetHeight = Math.max(
+-				document.documentElement.offsetHeight,
+-				document.body.offsetHeight
+-			);
+-
+-			if (scrollHeight < offsetHeight) {
+-				return $(window).height() + 'px';
+-			} else {
+-				return scrollHeight + 'px';
+-			}
+-		// handle "good" browsers
+-		} else {
+-			return $(document).height() + 'px';
+-		}
+-	},
+-
+-	width: function() {
+-		var scrollWidth,
+-			offsetWidth;
+-		// handle IE
+-		if ( $.browser.msie ) {
+-			scrollWidth = Math.max(
+-				document.documentElement.scrollWidth,
+-				document.body.scrollWidth
+-			);
+-			offsetWidth = Math.max(
+-				document.documentElement.offsetWidth,
+-				document.body.offsetWidth
+-			);
+-
+-			if (scrollWidth < offsetWidth) {
+-				return $(window).width() + 'px';
+-			} else {
+-				return scrollWidth + 'px';
+-			}
+-		// handle "good" browsers
+-		} else {
+-			return $(document).width() + 'px';
+-		}
+-	},
+-
+-	resize: function() {
+-		/* If the dialog is draggable and the user drags it past the
+-		 * right edge of the window, the document becomes wider so we
+-		 * need to stretch the overlay. If the user then drags the
+-		 * dialog back to the left, the document will become narrower,
+-		 * so we need to shrink the overlay to the appropriate size.
+-		 * This is handled by shrinking the overlay before setting it
+-		 * to the full document size.
+-		 */
+-		var $overlays = $([]);
+-		$.each($.ui.dialog.overlay.instances, function() {
+-			$overlays = $overlays.add(this);
+-		});
+-
+-		$overlays.css({
+-			width: 0,
+-			height: 0
+-		}).css({
+-			width: $.ui.dialog.overlay.width(),
+-			height: $.ui.dialog.overlay.height()
+-		});
+-	}
+-});
+-
+-$.extend($.ui.dialog.overlay.prototype, {
+-	destroy: function() {
+-		$.ui.dialog.overlay.destroy(this.$el);
+-	}
+-});
+-
+-}(jQuery));
+-/*
+- * jQuery UI Position 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Position
+- */
+-(function( $, undefined ) {
+-
+-$.ui = $.ui || {};
+-
+-var horizontalPositions = /left|center|right/,
+-	verticalPositions = /top|center|bottom/,
+-	center = "center",
+-	_position = $.fn.position,
+-	_offset = $.fn.offset;
+-
+-$.fn.position = function( options ) {
+-	if ( !options || !options.of ) {
+-		return _position.apply( this, arguments );
+-	}
+-
+-	// make a copy, we don't want to modify arguments
+-	options = $.extend( {}, options );
+-
+-	var target = $( options.of ),
+-		targetElem = target[0],
+-		collision = ( options.collision || "flip" ).split( " " ),
+-		offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ],
+-		targetWidth,
+-		targetHeight,
+-		basePosition;
+-
+-	if ( targetElem.nodeType === 9 ) {
+-		targetWidth = target.width();
+-		targetHeight = target.height();
+-		basePosition = { top: 0, left: 0 };
+-	// TODO: use $.isWindow() in 1.9
+-	} else if ( targetElem.setTimeout ) {
+-		targetWidth = target.width();
+-		targetHeight = target.height();
+-		basePosition = { top: target.scrollTop(), left: target.scrollLeft() };
+-	} else if ( targetElem.preventDefault ) {
+-		// force left top to allow flipping
+-		options.at = "left top";
+-		targetWidth = targetHeight = 0;
+-		basePosition = { top: options.of.pageY, left: options.of.pageX };
+-	} else {
+-		targetWidth = target.outerWidth();
+-		targetHeight = target.outerHeight();
+-		basePosition = target.offset();
+-	}
+-
+-	// force my and at to have valid horizontal and veritcal positions
+-	// if a value is missing or invalid, it will be converted to center 
+-	$.each( [ "my", "at" ], function() {
+-		var pos = ( options[this] || "" ).split( " " );
+-		if ( pos.length === 1) {
+-			pos = horizontalPositions.test( pos[0] ) ?
+-				pos.concat( [center] ) :
+-				verticalPositions.test( pos[0] ) ?
+-					[ center ].concat( pos ) :
+-					[ center, center ];
+-		}
+-		pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;
+-		pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;
+-		options[ this ] = pos;
+-	});
+-
+-	// normalize collision option
+-	if ( collision.length === 1 ) {
+-		collision[ 1 ] = collision[ 0 ];
+-	}
+-
+-	// normalize offset option
+-	offset[ 0 ] = parseInt( offset[0], 10 ) || 0;
+-	if ( offset.length === 1 ) {
+-		offset[ 1 ] = offset[ 0 ];
+-	}
+-	offset[ 1 ] = parseInt( offset[1], 10 ) || 0;
+-
+-	if ( options.at[0] === "right" ) {
+-		basePosition.left += targetWidth;
+-	} else if ( options.at[0] === center ) {
+-		basePosition.left += targetWidth / 2;
+-	}
+-
+-	if ( options.at[1] === "bottom" ) {
+-		basePosition.top += targetHeight;
+-	} else if ( options.at[1] === center ) {
+-		basePosition.top += targetHeight / 2;
+-	}
+-
+-	basePosition.left += offset[ 0 ];
+-	basePosition.top += offset[ 1 ];
+-
+-	return this.each(function() {
+-		var elem = $( this ),
+-			elemWidth = elem.outerWidth(),
+-			elemHeight = elem.outerHeight(),
+-			marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0,
+-			marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0,
+-			collisionWidth = elemWidth + marginLeft +
+-				( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ),
+-			collisionHeight = elemHeight + marginTop +
+-				( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ),
+-			position = $.extend( {}, basePosition ),
+-			collisionPosition;
+-
+-		if ( options.my[0] === "right" ) {
+-			position.left -= elemWidth;
+-		} else if ( options.my[0] === center ) {
+-			position.left -= elemWidth / 2;
+-		}
+-
+-		if ( options.my[1] === "bottom" ) {
+-			position.top -= elemHeight;
+-		} else if ( options.my[1] === center ) {
+-			position.top -= elemHeight / 2;
+-		}
+-
+-		// prevent fractions (see #5280)
+-		position.left = Math.round( position.left );
+-		position.top = Math.round( position.top );
+-
+-		collisionPosition = {
+-			left: position.left - marginLeft,
+-			top: position.top - marginTop
+-		};
+-
+-		$.each( [ "left", "top" ], function( i, dir ) {
+-			if ( $.ui.position[ collision[i] ] ) {
+-				$.ui.position[ collision[i] ][ dir ]( position, {
+-					targetWidth: targetWidth,
+-					targetHeight: targetHeight,
+-					elemWidth: elemWidth,
+-					elemHeight: elemHeight,
+-					collisionPosition: collisionPosition,
+-					collisionWidth: collisionWidth,
+-					collisionHeight: collisionHeight,
+-					offset: offset,
+-					my: options.my,
+-					at: options.at
+-				});
+-			}
+-		});
+-
+-		if ( $.fn.bgiframe ) {
+-			elem.bgiframe();
+-		}
+-		elem.offset( $.extend( position, { using: options.using } ) );
+-	});
+-};
+-
+-$.ui.position = {
+-	fit: {
+-		left: function( position, data ) {
+-			var win = $( window ),
+-				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();
+-			position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );
+-		},
+-		top: function( position, data ) {
+-			var win = $( window ),
+-				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();
+-			position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );
+-		}
+-	},
+-
+-	flip: {
+-		left: function( position, data ) {
+-			if ( data.at[0] === center ) {
+-				return;
+-			}
+-			var win = $( window ),
+-				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),
+-				myOffset = data.my[ 0 ] === "left" ?
+-					-data.elemWidth :
+-					data.my[ 0 ] === "right" ?
+-						data.elemWidth :
+-						0,
+-				atOffset = data.at[ 0 ] === "left" ?
+-					data.targetWidth :
+-					-data.targetWidth,
+-				offset = -2 * data.offset[ 0 ];
+-			position.left += data.collisionPosition.left < 0 ?
+-				myOffset + atOffset + offset :
+-				over > 0 ?
+-					myOffset + atOffset + offset :
+-					0;
+-		},
+-		top: function( position, data ) {
+-			if ( data.at[1] === center ) {
+-				return;
+-			}
+-			var win = $( window ),
+-				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),
+-				myOffset = data.my[ 1 ] === "top" ?
+-					-data.elemHeight :
+-					data.my[ 1 ] === "bottom" ?
+-						data.elemHeight :
+-						0,
+-				atOffset = data.at[ 1 ] === "top" ?
+-					data.targetHeight :
+-					-data.targetHeight,
+-				offset = -2 * data.offset[ 1 ];
+-			position.top += data.collisionPosition.top < 0 ?
+-				myOffset + atOffset + offset :
+-				over > 0 ?
+-					myOffset + atOffset + offset :
+-					0;
+-		}
+-	}
+-};
+-
+-// offset setter from jQuery 1.4
+-if ( !$.offset.setOffset ) {
+-	$.offset.setOffset = function( elem, options ) {
+-		// set position first, in-case top/left are set even on static elem
+-		if ( /static/.test( $.curCSS( elem, "position" ) ) ) {
+-			elem.style.position = "relative";
+-		}
+-		var curElem   = $( elem ),
+-			curOffset = curElem.offset(),
+-			curTop    = parseInt( $.curCSS( elem, "top",  true ), 10 ) || 0,
+-			curLeft   = parseInt( $.curCSS( elem, "left", true ), 10)  || 0,
+-			props     = {
+-				top:  (options.top  - curOffset.top)  + curTop,
+-				left: (options.left - curOffset.left) + curLeft
+-			};
+-		
+-		if ( 'using' in options ) {
+-			options.using.call( elem, props );
+-		} else {
+-			curElem.css( props );
+-		}
+-	};
+-
+-	$.fn.offset = function( options ) {
+-		var elem = this[ 0 ];
+-		if ( !elem || !elem.ownerDocument ) { return null; }
+-		if ( options ) { 
+-			return this.each(function() {
+-				$.offset.setOffset( this, options );
+-			});
+-		}
+-		return _offset.call( this );
+-	};
+-}
+-
+-}( jQuery ));
+-/*
+- * jQuery UI Progressbar 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Progressbar
+- *
+- * Depends:
+- *   jquery.ui.core.js
+- *   jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget( "ui.progressbar", {
+-	options: {
+-		value: 0,
+-		max: 100
+-	},
+-
+-	min: 0,
+-
+-	_create: function() {
+-		this.element
+-			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.attr({
+-				role: "progressbar",
+-				"aria-valuemin": this.min,
+-				"aria-valuemax": this.options.max,
+-				"aria-valuenow": this._value()
+-			});
+-
+-		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+-			.appendTo( this.element );
+-
+-		this.oldValue = this._value();
+-		this._refreshValue();
+-	},
+-
+-	destroy: function() {
+-		this.element
+-			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-
+-		this.valueDiv.remove();
+-
+-		$.Widget.prototype.destroy.apply( this, arguments );
+-	},
+-
+-	value: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			return this._value();
+-		}
+-
+-		this._setOption( "value", newValue );
+-		return this;
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "value" ) {
+-			this.options.value = value;
+-			this._refreshValue();
+-			if ( this._value() === this.options.max ) {
+-				this._trigger( "complete" );
+-			}
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-	},
+-
+-	_value: function() {
+-		var val = this.options.value;
+-		// normalize invalid value
+-		if ( typeof val !== "number" ) {
+-			val = 0;
+-		}
+-		return Math.min( this.options.max, Math.max( this.min, val ) );
+-	},
+-
+-	_percentage: function() {
+-		return 100 * this._value() / this.options.max;
+-	},
+-
+-	_refreshValue: function() {
+-		var value = this.value();
+-		var percentage = this._percentage();
+-
+-		if ( this.oldValue !== value ) {
+-			this.oldValue = value;
+-			this._trigger( "change" );
+-		}
+-
+-		this.valueDiv
+-			.toggle( value > this.min )
+-			.toggleClass( "ui-corner-right", value === this.options.max )
+-			.width( percentage.toFixed(0) + "%" );
+-		this.element.attr( "aria-valuenow", value );
+-	}
+-});
+-
+-$.extend( $.ui.progressbar, {
+-	version: "1.8.15"
+-});
+-
+-})( jQuery );
+-/*
+- * jQuery UI Slider 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Slider
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-// number of pages in a slider
+-// (how many times can you page up/down to go through the whole range)
+-var numPages = 5;
+-
+-$.widget( "ui.slider", $.ui.mouse, {
+-
+-	widgetEventPrefix: "slide",
+-
+-	options: {
+-		animate: false,
+-		distance: 0,
+-		max: 100,
+-		min: 0,
+-		orientation: "horizontal",
+-		range: false,
+-		step: 1,
+-		value: 0,
+-		values: null
+-	},
+-
+-	_create: function() {
+-		var self = this,
+-			o = this.options,
+-			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+-			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+-			handleCount = ( o.values && o.values.length ) || 1,
+-			handles = [];
+-
+-		this._keySliding = false;
+-		this._mouseSliding = false;
+-		this._animateOff = true;
+-		this._handleIndex = null;
+-		this._detectOrientation();
+-		this._mouseInit();
+-
+-		this.element
+-			.addClass( "ui-slider" +
+-				" ui-slider-" + this.orientation +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" +
+-				( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) );
+-
+-		this.range = $([]);
+-
+-		if ( o.range ) {
+-			if ( o.range === true ) {
+-				if ( !o.values ) {
+-					o.values = [ this._valueMin(), this._valueMin() ];
+-				}
+-				if ( o.values.length && o.values.length !== 2 ) {
+-					o.values = [ o.values[0], o.values[0] ];
+-				}
+-			}
+-
+-			this.range = $( "<div></div>" )
+-				.appendTo( this.element )
+-				.addClass( "ui-slider-range" +
+-				// note: this isn't the most fittingly semantic framework class for this element,
+-				// but worked best visually with a variety of themes
+-				" ui-widget-header" + 
+-				( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) );
+-		}
+-
+-		for ( var i = existingHandles.length; i < handleCount; i += 1 ) {
+-			handles.push( handle );
+-		}
+-
+-		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) );
+-
+-		this.handle = this.handles.eq( 0 );
+-
+-		this.handles.add( this.range ).filter( "a" )
+-			.click(function( event ) {
+-				event.preventDefault();
+-			})
+-			.hover(function() {
+-				if ( !o.disabled ) {
+-					$( this ).addClass( "ui-state-hover" );
+-				}
+-			}, function() {
+-				$( this ).removeClass( "ui-state-hover" );
+-			})
+-			.focus(function() {
+-				if ( !o.disabled ) {
+-					$( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" );
+-					$( this ).addClass( "ui-state-focus" );
+-				} else {
+-					$( this ).blur();
+-				}
+-			})
+-			.blur(function() {
+-				$( this ).removeClass( "ui-state-focus" );
+-			});
+-
+-		this.handles.each(function( i ) {
+-			$( this ).data( "index.ui-slider-handle", i );
+-		});
+-
+-		this.handles
+-			.keydown(function( event ) {
+-				var ret = true,
+-					index = $( this ).data( "index.ui-slider-handle" ),
+-					allowed,
+-					curVal,
+-					newVal,
+-					step;
+-	
+-				if ( self.options.disabled ) {
+-					return;
+-				}
+-	
+-				switch ( event.keyCode ) {
+-					case $.ui.keyCode.HOME:
+-					case $.ui.keyCode.END:
+-					case $.ui.keyCode.PAGE_UP:
+-					case $.ui.keyCode.PAGE_DOWN:
+-					case $.ui.keyCode.UP:
+-					case $.ui.keyCode.RIGHT:
+-					case $.ui.keyCode.DOWN:
+-					case $.ui.keyCode.LEFT:
+-						ret = false;
+-						if ( !self._keySliding ) {
+-							self._keySliding = true;
+-							$( this ).addClass( "ui-state-active" );
+-							allowed = self._start( event, index );
+-							if ( allowed === false ) {
+-								return;
+-							}
+-						}
+-						break;
+-				}
+-	
+-				step = self.options.step;
+-				if ( self.options.values && self.options.values.length ) {
+-					curVal = newVal = self.values( index );
+-				} else {
+-					curVal = newVal = self.value();
+-				}
+-	
+-				switch ( event.keyCode ) {
+-					case $.ui.keyCode.HOME:
+-						newVal = self._valueMin();
+-						break;
+-					case $.ui.keyCode.END:
+-						newVal = self._valueMax();
+-						break;
+-					case $.ui.keyCode.PAGE_UP:
+-						newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) );
+-						break;
+-					case $.ui.keyCode.PAGE_DOWN:
+-						newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) );
+-						break;
+-					case $.ui.keyCode.UP:
+-					case $.ui.keyCode.RIGHT:
+-						if ( curVal === self._valueMax() ) {
+-							return;
+-						}
+-						newVal = self._trimAlignValue( curVal + step );
+-						break;
+-					case $.ui.keyCode.DOWN:
+-					case $.ui.keyCode.LEFT:
+-						if ( curVal === self._valueMin() ) {
+-							return;
+-						}
+-						newVal = self._trimAlignValue( curVal - step );
+-						break;
+-				}
+-	
+-				self._slide( event, index, newVal );
+-	
+-				return ret;
+-	
+-			})
+-			.keyup(function( event ) {
+-				var index = $( this ).data( "index.ui-slider-handle" );
+-	
+-				if ( self._keySliding ) {
+-					self._keySliding = false;
+-					self._stop( event, index );
+-					self._change( event, index );
+-					$( this ).removeClass( "ui-state-active" );
+-				}
+-	
+-			});
+-
+-		this._refreshValue();
+-
+-		this._animateOff = false;
+-	},
+-
+-	destroy: function() {
+-		this.handles.remove();
+-		this.range.remove();
+-
+-		this.element
+-			.removeClass( "ui-slider" +
+-				" ui-slider-horizontal" +
+-				" ui-slider-vertical" +
+-				" ui-slider-disabled" +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" )
+-			.removeData( "slider" )
+-			.unbind( ".slider" );
+-
+-		this._mouseDestroy();
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function( event ) {
+-		var o = this.options,
+-			position,
+-			normValue,
+-			distance,
+-			closestHandle,
+-			self,
+-			index,
+-			allowed,
+-			offset,
+-			mouseOverHandle;
+-
+-		if ( o.disabled ) {
+-			return false;
+-		}
+-
+-		this.elementSize = {
+-			width: this.element.outerWidth(),
+-			height: this.element.outerHeight()
+-		};
+-		this.elementOffset = this.element.offset();
+-
+-		position = { x: event.pageX, y: event.pageY };
+-		normValue = this._normValueFromMouse( position );
+-		distance = this._valueMax() - this._valueMin() + 1;
+-		self = this;
+-		this.handles.each(function( i ) {
+-			var thisDistance = Math.abs( normValue - self.values(i) );
+-			if ( distance > thisDistance ) {
+-				distance = thisDistance;
+-				closestHandle = $( this );
+-				index = i;
+-			}
+-		});
+-
+-		// workaround for bug #3736 (if both handles of a range are at 0,
+-		// the first is always used as the one with least distance,
+-		// and moving it is obviously prevented by preventing negative ranges)
+-		if( o.range === true && this.values(1) === o.min ) {
+-			index += 1;
+-			closestHandle = $( this.handles[index] );
+-		}
+-
+-		allowed = this._start( event, index );
+-		if ( allowed === false ) {
+-			return false;
+-		}
+-		this._mouseSliding = true;
+-
+-		self._handleIndex = index;
+-
+-		closestHandle
+-			.addClass( "ui-state-active" )
+-			.focus();
+-		
+-		offset = closestHandle.offset();
+-		mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" );
+-		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+-			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+-			top: event.pageY - offset.top -
+-				( closestHandle.height() / 2 ) -
+-				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+-				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+-				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+-		};
+-
+-		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+-			this._slide( event, index, normValue );
+-		}
+-		this._animateOff = true;
+-		return true;
+-	},
+-
+-	_mouseStart: function( event ) {
+-		return true;
+-	},
+-
+-	_mouseDrag: function( event ) {
+-		var position = { x: event.pageX, y: event.pageY },
+-			normValue = this._normValueFromMouse( position );
+-		
+-		this._slide( event, this._handleIndex, normValue );
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function( event ) {
+-		this.handles.removeClass( "ui-state-active" );
+-		this._mouseSliding = false;
+-
+-		this._stop( event, this._handleIndex );
+-		this._change( event, this._handleIndex );
+-
+-		this._handleIndex = null;
+-		this._clickOffset = null;
+-		this._animateOff = false;
+-
+-		return false;
+-	},
+-	
+-	_detectOrientation: function() {
+-		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+-	},
+-
+-	_normValueFromMouse: function( position ) {
+-		var pixelTotal,
+-			pixelMouse,
+-			percentMouse,
+-			valueTotal,
+-			valueMouse;
+-
+-		if ( this.orientation === "horizontal" ) {
+-			pixelTotal = this.elementSize.width;
+-			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+-		} else {
+-			pixelTotal = this.elementSize.height;
+-			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+-		}
+-
+-		percentMouse = ( pixelMouse / pixelTotal );
+-		if ( percentMouse > 1 ) {
+-			percentMouse = 1;
+-		}
+-		if ( percentMouse < 0 ) {
+-			percentMouse = 0;
+-		}
+-		if ( this.orientation === "vertical" ) {
+-			percentMouse = 1 - percentMouse;
+-		}
+-
+-		valueTotal = this._valueMax() - this._valueMin();
+-		valueMouse = this._valueMin() + percentMouse * valueTotal;
+-
+-		return this._trimAlignValue( valueMouse );
+-	},
+-
+-	_start: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-		return this._trigger( "start", event, uiHash );
+-	},
+-
+-	_slide: function( event, index, newVal ) {
+-		var otherVal,
+-			newValues,
+-			allowed;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			otherVal = this.values( index ? 0 : 1 );
+-
+-			if ( ( this.options.values.length === 2 && this.options.range === true ) && 
+-					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+-				) {
+-				newVal = otherVal;
+-			}
+-
+-			if ( newVal !== this.values( index ) ) {
+-				newValues = this.values();
+-				newValues[ index ] = newVal;
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal,
+-					values: newValues
+-				} );
+-				otherVal = this.values( index ? 0 : 1 );
+-				if ( allowed !== false ) {
+-					this.values( index, newVal, true );
+-				}
+-			}
+-		} else {
+-			if ( newVal !== this.value() ) {
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal
+-				} );
+-				if ( allowed !== false ) {
+-					this.value( newVal );
+-				}
+-			}
+-		}
+-	},
+-
+-	_stop: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-
+-		this._trigger( "stop", event, uiHash );
+-	},
+-
+-	_change: function( event, index ) {
+-		if ( !this._keySliding && !this._mouseSliding ) {
+-			var uiHash = {
+-				handle: this.handles[ index ],
+-				value: this.value()
+-			};
+-			if ( this.options.values && this.options.values.length ) {
+-				uiHash.value = this.values( index );
+-				uiHash.values = this.values();
+-			}
+-
+-			this._trigger( "change", event, uiHash );
+-		}
+-	},
+-
+-	value: function( newValue ) {
+-		if ( arguments.length ) {
+-			this.options.value = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, 0 );
+-			return;
+-		}
+-
+-		return this._value();
+-	},
+-
+-	values: function( index, newValue ) {
+-		var vals,
+-			newValues,
+-			i;
+-
+-		if ( arguments.length > 1 ) {
+-			this.options.values[ index ] = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, index );
+-			return;
+-		}
+-
+-		if ( arguments.length ) {
+-			if ( $.isArray( arguments[ 0 ] ) ) {
+-				vals = this.options.values;
+-				newValues = arguments[ 0 ];
+-				for ( i = 0; i < vals.length; i += 1 ) {
+-					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+-					this._change( null, i );
+-				}
+-				this._refreshValue();
+-			} else {
+-				if ( this.options.values && this.options.values.length ) {
+-					return this._values( index );
+-				} else {
+-					return this.value();
+-				}
+-			}
+-		} else {
+-			return this._values();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var i,
+-			valsLength = 0;
+-
+-		if ( $.isArray( this.options.values ) ) {
+-			valsLength = this.options.values.length;
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-
+-		switch ( key ) {
+-			case "disabled":
+-				if ( value ) {
+-					this.handles.filter( ".ui-state-focus" ).blur();
+-					this.handles.removeClass( "ui-state-hover" );
+-					this.handles.propAttr( "disabled", true );
+-					this.element.addClass( "ui-disabled" );
+-				} else {
+-					this.handles.propAttr( "disabled", false );
+-					this.element.removeClass( "ui-disabled" );
+-				}
+-				break;
+-			case "orientation":
+-				this._detectOrientation();
+-				this.element
+-					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+-					.addClass( "ui-slider-" + this.orientation );
+-				this._refreshValue();
+-				break;
+-			case "value":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._change( null, 0 );
+-				this._animateOff = false;
+-				break;
+-			case "values":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				for ( i = 0; i < valsLength; i += 1 ) {
+-					this._change( null, i );
+-				}
+-				this._animateOff = false;
+-				break;
+-		}
+-	},
+-
+-	//internal value getter
+-	// _value() returns value trimmed by min and max, aligned by step
+-	_value: function() {
+-		var val = this.options.value;
+-		val = this._trimAlignValue( val );
+-
+-		return val;
+-	},
+-
+-	//internal values getter
+-	// _values() returns array of values trimmed by min and max, aligned by step
+-	// _values( index ) returns single value trimmed by min and max, aligned by step
+-	_values: function( index ) {
+-		var val,
+-			vals,
+-			i;
+-
+-		if ( arguments.length ) {
+-			val = this.options.values[ index ];
+-			val = this._trimAlignValue( val );
+-
+-			return val;
+-		} else {
+-			// .slice() creates a copy of the array
+-			// this copy gets trimmed by min and max and then returned
+-			vals = this.options.values.slice();
+-			for ( i = 0; i < vals.length; i+= 1) {
+-				vals[ i ] = this._trimAlignValue( vals[ i ] );
+-			}
+-
+-			return vals;
+-		}
+-	},
+-	
+-	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+-	_trimAlignValue: function( val ) {
+-		if ( val <= this._valueMin() ) {
+-			return this._valueMin();
+-		}
+-		if ( val >= this._valueMax() ) {
+-			return this._valueMax();
+-		}
+-		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+-			valModStep = (val - this._valueMin()) % step,
+-			alignValue = val - valModStep;
+-
+-		if ( Math.abs(valModStep) * 2 >= step ) {
+-			alignValue += ( valModStep > 0 ) ? step : ( -step );
+-		}
+-
+-		// Since JavaScript has problems with large floats, round
+-		// the final value to 5 digits after the decimal point (see #4124)
+-		return parseFloat( alignValue.toFixed(5) );
+-	},
+-
+-	_valueMin: function() {
+-		return this.options.min;
+-	},
+-
+-	_valueMax: function() {
+-		return this.options.max;
+-	},
+-	
+-	_refreshValue: function() {
+-		var oRange = this.options.range,
+-			o = this.options,
+-			self = this,
+-			animate = ( !this._animateOff ) ? o.animate : false,
+-			valPercent,
+-			_set = {},
+-			lastValPercent,
+-			value,
+-			valueMin,
+-			valueMax;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			this.handles.each(function( i, j ) {
+-				valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100;
+-				_set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-				if ( self.options.range === true ) {
+-					if ( self.orientation === "horizontal" ) {
+-						if ( i === 0 ) {
+-							self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					} else {
+-						if ( i === 0 ) {
+-							self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					}
+-				}
+-				lastValPercent = valPercent;
+-			});
+-		} else {
+-			value = this.value();
+-			valueMin = this._valueMin();
+-			valueMax = this._valueMax();
+-			valPercent = ( valueMax !== valueMin ) ?
+-					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+-					0;
+-			_set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-
+-			if ( oRange === "min" && this.orientation === "horizontal" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "horizontal" ) {
+-				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-			if ( oRange === "min" && this.orientation === "vertical" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "vertical" ) {
+-				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-		}
+-	}
+-
+-});
+-
+-$.extend( $.ui.slider, {
+-	version: "1.8.15"
+-});
+-
+-}(jQuery));
+-/*
+- * jQuery UI Tabs 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Tabs
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var tabId = 0,
+-	listId = 0;
+-
+-function getNextTabId() {
+-	return ++tabId;
+-}
+-
+-function getNextListId() {
+-	return ++listId;
+-}
+-
+-$.widget( "ui.tabs", {
+-	options: {
+-		add: null,
+-		ajaxOptions: null,
+-		cache: false,
+-		cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
+-		collapsible: false,
+-		disable: null,
+-		disabled: [],
+-		enable: null,
+-		event: "click",
+-		fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
+-		idPrefix: "ui-tabs-",
+-		load: null,
+-		panelTemplate: "<div></div>",
+-		remove: null,
+-		select: null,
+-		show: null,
+-		spinner: "<em>Loading&#8230;</em>",
+-		tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
+-	},
+-
+-	_create: function() {
+-		this._tabify( true );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key == "selected" ) {
+-			if (this.options.collapsible && value == this.options.selected ) {
+-				return;
+-			}
+-			this.select( value );
+-		} else {
+-			this.options[ key ] = value;
+-			this._tabify();
+-		}
+-	},
+-
+-	_tabId: function( a ) {
+-		return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
+-			this.options.idPrefix + getNextTabId();
+-	},
+-
+-	_sanitizeSelector: function( hash ) {
+-		// we need this because an id may contain a ":"
+-		return hash.replace( /:/g, "\\:" );
+-	},
+-
+-	_cookie: function() {
+-		var cookie = this.cookie ||
+-			( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() );
+-		return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );
+-	},
+-
+-	_ui: function( tab, panel ) {
+-		return {
+-			tab: tab,
+-			panel: panel,
+-			index: this.anchors.index( tab )
+-		};
+-	},
+-
+-	_cleanup: function() {
+-		// restore all former loading tabs labels
+-		this.lis.filter( ".ui-state-processing" )
+-			.removeClass( "ui-state-processing" )
+-			.find( "span:data(label.tabs)" )
+-				.each(function() {
+-					var el = $( this );
+-					el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" );
+-				});
+-	},
+-
+-	_tabify: function( init ) {
+-		var self = this,
+-			o = this.options,
+-			fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
+-
+-		this.list = this.element.find( "ol,ul" ).eq( 0 );
+-		this.lis = $( " > li:has(a[href])", this.list );
+-		this.anchors = this.lis.map(function() {
+-			return $( "a", this )[ 0 ];
+-		});
+-		this.panels = $( [] );
+-
+-		this.anchors.each(function( i, a ) {
+-			var href = $( a ).attr( "href" );
+-			// For dynamically created HTML that contains a hash as href IE < 8 expands
+-			// such href to the full page url with hash and then misinterprets tab as ajax.
+-			// Same consideration applies for an added tab with a fragment identifier
+-			// since a[href=#fragment-identifier] does unexpectedly not match.
+-			// Thus normalize href attribute...
+-			var hrefBase = href.split( "#" )[ 0 ],
+-				baseEl;
+-			if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] ||
+-					( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) {
+-				href = a.hash;
+-				a.href = href;
+-			}
+-
+-			// inline tab
+-			if ( fragmentId.test( href ) ) {
+-				self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) );
+-			// remote tab
+-			// prevent loading the page itself if href is just "#"
+-			} else if ( href && href !== "#" ) {
+-				// required for restore on destroy
+-				$.data( a, "href.tabs", href );
+-
+-				// TODO until #3808 is fixed strip fragment identifier from url
+-				// (IE fails to load from such url)
+-				$.data( a, "load.tabs", href.replace( /#.*$/, "" ) );
+-
+-				var id = self._tabId( a );
+-				a.href = "#" + id;
+-				var $panel = self.element.find( "#" + id );
+-				if ( !$panel.length ) {
+-					$panel = $( o.panelTemplate )
+-						.attr( "id", id )
+-						.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-						.insertAfter( self.panels[ i - 1 ] || self.list );
+-					$panel.data( "destroy.tabs", true );
+-				}
+-				self.panels = self.panels.add( $panel );
+-			// invalid tab href
+-			} else {
+-				o.disabled.push( i );
+-			}
+-		});
+-
+-		// initialization from scratch
+-		if ( init ) {
+-			// attach necessary classes for styling
+-			this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" );
+-			this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
+-			this.lis.addClass( "ui-state-default ui-corner-top" );
+-			this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" );
+-
+-			// Selected tab
+-			// use "selected" option or try to retrieve:
+-			// 1. from fragment identifier in url
+-			// 2. from cookie
+-			// 3. from selected class attribute on <li>
+-			if ( o.selected === undefined ) {
+-				if ( location.hash ) {
+-					this.anchors.each(function( i, a ) {
+-						if ( a.hash == location.hash ) {
+-							o.selected = i;
+-							return false;
+-						}
+-					});
+-				}
+-				if ( typeof o.selected !== "number" && o.cookie ) {
+-					o.selected = parseInt( self._cookie(), 10 );
+-				}
+-				if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) {
+-					o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
+-				}
+-				o.selected = o.selected || ( this.lis.length ? 0 : -1 );
+-			} else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release
+-				o.selected = -1;
+-			}
+-
+-			// sanity check - default to first tab...
+-			o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 )
+-				? o.selected
+-				: 0;
+-
+-			// Take disabling tabs via class attribute from HTML
+-			// into account and update option properly.
+-			// A selected tab cannot become disabled.
+-			o.disabled = $.unique( o.disabled.concat(
+-				$.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) {
+-					return self.lis.index( n );
+-				})
+-			) ).sort();
+-
+-			if ( $.inArray( o.selected, o.disabled ) != -1 ) {
+-				o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 );
+-			}
+-
+-			// highlight selected tab
+-			this.panels.addClass( "ui-tabs-hide" );
+-			this.lis.removeClass( "ui-tabs-selected ui-state-active" );
+-			// check for length avoids error when initializing empty list
+-			if ( o.selected >= 0 && this.anchors.length ) {
+-				self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
+-				this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );
+-
+-				// seems to be expected behavior that the show callback is fired
+-				self.element.queue( "tabs", function() {
+-					self._trigger( "show", null,
+-						self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) );
+-				});
+-
+-				this.load( o.selected );
+-			}
+-
+-			// clean up to avoid memory leaks in certain versions of IE 6
+-			// TODO: namespace this event
+-			$( window ).bind( "unload", function() {
+-				self.lis.add( self.anchors ).unbind( ".tabs" );
+-				self.lis = self.anchors = self.panels = null;
+-			});
+-		// update selected after add/remove
+-		} else {
+-			o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
+-		}
+-
+-		// update collapsible
+-		// TODO: use .toggleClass()
+-		this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" );
+-
+-		// set or update cookie after init and add/remove respectively
+-		if ( o.cookie ) {
+-			this._cookie( o.selected, o.cookie );
+-		}
+-
+-		// disable tabs
+-		for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
+-			$( li )[ $.inArray( i, o.disabled ) != -1 &&
+-				// TODO: use .toggleClass()
+-				!$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" );
+-		}
+-
+-		// reset cache if switching from cached to not cached
+-		if ( o.cache === false ) {
+-			this.anchors.removeData( "cache.tabs" );
+-		}
+-
+-		// remove all handlers before, tabify may run on existing tabs after add or option change
+-		this.lis.add( this.anchors ).unbind( ".tabs" );
+-
+-		if ( o.event !== "mouseover" ) {
+-			var addState = function( state, el ) {
+-				if ( el.is( ":not(.ui-state-disabled)" ) ) {
+-					el.addClass( "ui-state-" + state );
+-				}
+-			};
+-			var removeState = function( state, el ) {
+-				el.removeClass( "ui-state-" + state );
+-			};
+-			this.lis.bind( "mouseover.tabs" , function() {
+-				addState( "hover", $( this ) );
+-			});
+-			this.lis.bind( "mouseout.tabs", function() {
+-				removeState( "hover", $( this ) );
+-			});
+-			this.anchors.bind( "focus.tabs", function() {
+-				addState( "focus", $( this ).closest( "li" ) );
+-			});
+-			this.anchors.bind( "blur.tabs", function() {
+-				removeState( "focus", $( this ).closest( "li" ) );
+-			});
+-		}
+-
+-		// set up animations
+-		var hideFx, showFx;
+-		if ( o.fx ) {
+-			if ( $.isArray( o.fx ) ) {
+-				hideFx = o.fx[ 0 ];
+-				showFx = o.fx[ 1 ];
+-			} else {
+-				hideFx = showFx = o.fx;
+-			}
+-		}
+-
+-		// Reset certain styles left over from animation
+-		// and prevent IE's ClearType bug...
+-		function resetStyle( $el, fx ) {
+-			$el.css( "display", "" );
+-			if ( !$.support.opacity && fx.opacity ) {
+-				$el[ 0 ].style.removeAttribute( "filter" );
+-			}
+-		}
+-
+-		// Show a tab...
+-		var showTab = showFx
+-			? function( clicked, $show ) {
+-				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
+-				$show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way
+-					.animate( showFx, showFx.duration || "normal", function() {
+-						resetStyle( $show, showFx );
+-						self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
+-					});
+-			}
+-			: function( clicked, $show ) {
+-				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
+-				$show.removeClass( "ui-tabs-hide" );
+-				self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
+-			};
+-
+-		// Hide a tab, $show is optional...
+-		var hideTab = hideFx
+-			? function( clicked, $hide ) {
+-				$hide.animate( hideFx, hideFx.duration || "normal", function() {
+-					self.lis.removeClass( "ui-tabs-selected ui-state-active" );
+-					$hide.addClass( "ui-tabs-hide" );
+-					resetStyle( $hide, hideFx );
+-					self.element.dequeue( "tabs" );
+-				});
+-			}
+-			: function( clicked, $hide, $show ) {
+-				self.lis.removeClass( "ui-tabs-selected ui-state-active" );
+-				$hide.addClass( "ui-tabs-hide" );
+-				self.element.dequeue( "tabs" );
+-			};
+-
+-		// attach tab event handler, unbind to avoid duplicates from former tabifying...
+-		this.anchors.bind( o.event + ".tabs", function() {
+-			var el = this,
+-				$li = $(el).closest( "li" ),
+-				$hide = self.panels.filter( ":not(.ui-tabs-hide)" ),
+-				$show = self.element.find( self._sanitizeSelector( el.hash ) );
+-
+-			// If tab is already selected and not collapsible or tab disabled or
+-			// or is already loading or click callback returns false stop here.
+-			// Check if click handler returns false last so that it is not executed
+-			// for a disabled or loading tab!
+-			if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) ||
+-				$li.hasClass( "ui-state-disabled" ) ||
+-				$li.hasClass( "ui-state-processing" ) ||
+-				self.panels.filter( ":animated" ).length ||
+-				self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) {
+-				this.blur();
+-				return false;
+-			}
+-
+-			o.selected = self.anchors.index( this );
+-
+-			self.abort();
+-
+-			// if tab may be closed
+-			if ( o.collapsible ) {
+-				if ( $li.hasClass( "ui-tabs-selected" ) ) {
+-					o.selected = -1;
+-
+-					if ( o.cookie ) {
+-						self._cookie( o.selected, o.cookie );
+-					}
+-
+-					self.element.queue( "tabs", function() {
+-						hideTab( el, $hide );
+-					}).dequeue( "tabs" );
+-
+-					this.blur();
+-					return false;
+-				} else if ( !$hide.length ) {
+-					if ( o.cookie ) {
+-						self._cookie( o.selected, o.cookie );
+-					}
+-
+-					self.element.queue( "tabs", function() {
+-						showTab( el, $show );
+-					});
+-
+-					// TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
+-					self.load( self.anchors.index( this ) );
+-
+-					this.blur();
+-					return false;
+-				}
+-			}
+-
+-			if ( o.cookie ) {
+-				self._cookie( o.selected, o.cookie );
+-			}
+-
+-			// show new tab
+-			if ( $show.length ) {
+-				if ( $hide.length ) {
+-					self.element.queue( "tabs", function() {
+-						hideTab( el, $hide );
+-					});
+-				}
+-				self.element.queue( "tabs", function() {
+-					showTab( el, $show );
+-				});
+-
+-				self.load( self.anchors.index( this ) );
+-			} else {
+-				throw "jQuery UI Tabs: Mismatching fragment identifier.";
+-			}
+-
+-			// Prevent IE from keeping other link focussed when using the back button
+-			// and remove dotted border from clicked link. This is controlled via CSS
+-			// in modern browsers; blur() removes focus from address bar in Firefox
+-			// which can become a usability and annoying problem with tabs('rotate').
+-			if ( $.browser.msie ) {
+-				this.blur();
+-			}
+-		});
+-
+-		// disable click in any case
+-		this.anchors.bind( "click.tabs", function(){
+-			return false;
+-		});
+-	},
+-
+-    _getIndex: function( index ) {
+-		// meta-function to give users option to provide a href string instead of a numerical index.
+-		// also sanitizes numerical indexes to valid values.
+-		if ( typeof index == "string" ) {
+-			index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) );
+-		}
+-
+-		return index;
+-	},
+-
+-	destroy: function() {
+-		var o = this.options;
+-
+-		this.abort();
+-
+-		this.element
+-			.unbind( ".tabs" )
+-			.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" )
+-			.removeData( "tabs" );
+-
+-		this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
+-
+-		this.anchors.each(function() {
+-			var href = $.data( this, "href.tabs" );
+-			if ( href ) {
+-				this.href = href;
+-			}
+-			var $this = $( this ).unbind( ".tabs" );
+-			$.each( [ "href", "load", "cache" ], function( i, prefix ) {
+-				$this.removeData( prefix + ".tabs" );
+-			});
+-		});
+-
+-		this.lis.unbind( ".tabs" ).add( this.panels ).each(function() {
+-			if ( $.data( this, "destroy.tabs" ) ) {
+-				$( this ).remove();
+-			} else {
+-				$( this ).removeClass([
+-					"ui-state-default",
+-					"ui-corner-top",
+-					"ui-tabs-selected",
+-					"ui-state-active",
+-					"ui-state-hover",
+-					"ui-state-focus",
+-					"ui-state-disabled",
+-					"ui-tabs-panel",
+-					"ui-widget-content",
+-					"ui-corner-bottom",
+-					"ui-tabs-hide"
+-				].join( " " ) );
+-			}
+-		});
+-
+-		if ( o.cookie ) {
+-			this._cookie( null, o.cookie );
+-		}
+-
+-		return this;
+-	},
+-
+-	add: function( url, label, index ) {
+-		if ( index === undefined ) {
+-			index = this.anchors.length;
+-		}
+-
+-		var self = this,
+-			o = this.options,
+-			$li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ),
+-			id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] );
+-
+-		$li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true );
+-
+-		// try to find an existing element before creating a new one
+-		var $panel = self.element.find( "#" + id );
+-		if ( !$panel.length ) {
+-			$panel = $( o.panelTemplate )
+-				.attr( "id", id )
+-				.data( "destroy.tabs", true );
+-		}
+-		$panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );
+-
+-		if ( index >= this.lis.length ) {
+-			$li.appendTo( this.list );
+-			$panel.appendTo( this.list[ 0 ].parentNode );
+-		} else {
+-			$li.insertBefore( this.lis[ index ] );
+-			$panel.insertBefore( this.panels[ index ] );
+-		}
+-
+-		o.disabled = $.map( o.disabled, function( n, i ) {
+-			return n >= index ? ++n : n;
+-		});
+-
+-		this._tabify();
+-
+-		if ( this.anchors.length == 1 ) {
+-			o.selected = 0;
+-			$li.addClass( "ui-tabs-selected ui-state-active" );
+-			$panel.removeClass( "ui-tabs-hide" );
+-			this.element.queue( "tabs", function() {
+-				self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) );
+-			});
+-
+-			this.load( 0 );
+-		}
+-
+-		this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+-		return this;
+-	},
+-
+-	remove: function( index ) {
+-		index = this._getIndex( index );
+-		var o = this.options,
+-			$li = this.lis.eq( index ).remove(),
+-			$panel = this.panels.eq( index ).remove();
+-
+-		// If selected tab was removed focus tab to the right or
+-		// in case the last tab was removed the tab to the left.
+-		if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) {
+-			this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );
+-		}
+-
+-		o.disabled = $.map(
+-			$.grep( o.disabled, function(n, i) {
+-				return n != index;
+-			}),
+-			function( n, i ) {
+-				return n >= index ? --n : n;
+-			});
+-
+-		this._tabify();
+-
+-		this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) );
+-		return this;
+-	},
+-
+-	enable: function( index ) {
+-		index = this._getIndex( index );
+-		var o = this.options;
+-		if ( $.inArray( index, o.disabled ) == -1 ) {
+-			return;
+-		}
+-
+-		this.lis.eq( index ).removeClass( "ui-state-disabled" );
+-		o.disabled = $.grep( o.disabled, function( n, i ) {
+-			return n != index;
+-		});
+-
+-		this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+-		return this;
+-	},
+-
+-	disable: function( index ) {
+-		index = this._getIndex( index );
+-		var self = this, o = this.options;
+-		// cannot disable already selected tab
+-		if ( index != o.selected ) {
+-			this.lis.eq( index ).addClass( "ui-state-disabled" );
+-
+-			o.disabled.push( index );
+-			o.disabled.sort();
+-
+-			this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+-		}
+-
+-		return this;
+-	},
+-
+-	select: function( index ) {
+-		index = this._getIndex( index );
+-		if ( index == -1 ) {
+-			if ( this.options.collapsible && this.options.selected != -1 ) {
+-				index = this.options.selected;
+-			} else {
+-				return this;
+-			}
+-		}
+-		this.anchors.eq( index ).trigger( this.options.event + ".tabs" );
+-		return this;
+-	},
+-
+-	load: function( index ) {
+-		index = this._getIndex( index );
+-		var self = this,
+-			o = this.options,
+-			a = this.anchors.eq( index )[ 0 ],
+-			url = $.data( a, "load.tabs" );
+-
+-		this.abort();
+-
+-		// not remote or from cache
+-		if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) {
+-			this.element.dequeue( "tabs" );
+-			return;
+-		}
+-
+-		// load remote from here on
+-		this.lis.eq( index ).addClass( "ui-state-processing" );
+-
+-		if ( o.spinner ) {
+-			var span = $( "span", a );
+-			span.data( "label.tabs", span.html() ).html( o.spinner );
+-		}
+-
+-		this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {
+-			url: url,
+-			success: function( r, s ) {
+-				self.element.find( self._sanitizeSelector( a.hash ) ).html( r );
+-
+-				// take care of tab labels
+-				self._cleanup();
+-
+-				if ( o.cache ) {
+-					$.data( a, "cache.tabs", true );
+-				}
+-
+-				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
+-				try {
+-					o.ajaxOptions.success( r, s );
+-				}
+-				catch ( e ) {}
+-			},
+-			error: function( xhr, s, e ) {
+-				// take care of tab labels
+-				self._cleanup();
+-
+-				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
+-				try {
+-					// Passing index avoid a race condition when this method is
+-					// called after the user has selected another tab.
+-					// Pass the anchor that initiated this request allows
+-					// loadError to manipulate the tab content panel via $(a.hash)
+-					o.ajaxOptions.error( xhr, s, index, a );
+-				}
+-				catch ( e ) {}
+-			}
+-		} ) );
+-
+-		// last, so that load event is fired before show...
+-		self.element.dequeue( "tabs" );
+-
+-		return this;
+-	},
+-
+-	abort: function() {
+-		// stop possibly running animations
+-		this.element.queue( [] );
+-		this.panels.stop( false, true );
+-
+-		// "tabs" queue must not contain more than two elements,
+-		// which are the callbacks for the latest clicked tab...
+-		this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) );
+-
+-		// terminate pending requests from other tabs
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-			delete this.xhr;
+-		}
+-
+-		// take care of tab labels
+-		this._cleanup();
+-		return this;
+-	},
+-
+-	url: function( index, url ) {
+-		this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url );
+-		return this;
+-	},
+-
+-	length: function() {
+-		return this.anchors.length;
+-	}
+-});
+-
+-$.extend( $.ui.tabs, {
+-	version: "1.8.15"
+-});
+-
+-/*
+- * Tabs Extensions
+- */
+-
+-/*
+- * Rotate
+- */
+-$.extend( $.ui.tabs.prototype, {
+-	rotation: null,
+-	rotate: function( ms, continuing ) {
+-		var self = this,
+-			o = this.options;
+-
+-		var rotate = self._rotate || ( self._rotate = function( e ) {
+-			clearTimeout( self.rotation );
+-			self.rotation = setTimeout(function() {
+-				var t = o.selected;
+-				self.select( ++t < self.anchors.length ? t : 0 );
+-			}, ms );
+-			
+-			if ( e ) {
+-				e.stopPropagation();
+-			}
+-		});
+-
+-		var stop = self._unrotate || ( self._unrotate = !continuing
+-			? function(e) {
+-				if (e.clientX) { // in case of a true click
+-					self.rotate(null);
+-				}
+-			}
+-			: function( e ) {
+-				t = o.selected;
+-				rotate();
+-			});
+-
+-		// start rotation
+-		if ( ms ) {
+-			this.element.bind( "tabsshow", rotate );
+-			this.anchors.bind( o.event + ".tabs", stop );
+-			rotate();
+-		// stop rotation
+-		} else {
+-			clearTimeout( self.rotation );
+-			this.element.unbind( "tabsshow", rotate );
+-			this.anchors.unbind( o.event + ".tabs", stop );
+-			delete this._rotate;
+-			delete this._unrotate;
+-		}
+-
+-		return this;
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.min.js	(revision 15488)
+@@ -1,413 +0,0 @@
+-/*!
+- * jQuery UI 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI
+- */
+-(function(a,c){function d(h,g){var i=h.nodeName.toLowerCase();if("area"===i){g=h.parentNode;i=g.name;if(!h.href||!i||g.nodeName.toLowerCase()!=="map")return false;h=a("img[usemap=#"+i+"]")[0];return!!h&&e(h)}return(/input|select|textarea|button|object/.test(i)?!h.disabled:"a"==i?h.href||g:g)&&e(h)}function e(h){return!a(h).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.8.15",
+-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(h,g){return typeof h==="number"?this.each(function(){var i=
+-this;setTimeout(function(){a(i).focus();g&&g.call(i)},h)}):this._focus.apply(this,arguments)},scrollParent:function(){var h;h=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,
+-"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!h.length?a(document):h},zIndex:function(h){if(h!==c)return this.css("zIndex",h);if(this.length){h=a(this[0]);for(var g;h.length&&h[0]!==document;){g=h.css("position");if(g==="absolute"||g==="relative"||g==="fixed"){g=parseInt(h.css("zIndex"),10);if(!isNaN(g)&&g!==0)return g}h=h.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":
+-"mousedown")+".ui-disableSelection",function(h){h.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(h,g){function i(l,o,n,k){a.each(b,function(){o-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(n)o-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(k)o-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return o}var b=g==="Width"?["Left","Right"]:["Top","Bottom"],f=g.toLowerCase(),j={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,
+-outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+g]=function(l){if(l===c)return j["inner"+g].call(this);return this.each(function(){a(this).css(f,i(this,l)+"px")})};a.fn["outer"+g]=function(l,o){if(typeof l!=="number")return j["outer"+g].call(this,l);return this.each(function(){a(this).css(f,i(this,l,true,o)+"px")})}});a.extend(a.expr[":"],{data:function(h,g,i){return!!a.data(h,i[3])},focusable:function(h){return d(h,!isNaN(a.attr(h,"tabindex")))},tabbable:function(h){var g=a.attr(h,
+-"tabindex"),i=isNaN(g);return(i||g>=0)&&d(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&&
+-h.element[0].parentNode)for(var b=0;b<g.length;b++)h.options[g[b][0]]&&g[b][1].apply(h.element,i)}},contains:function(h,g){return document.compareDocumentPosition?h.compareDocumentPosition(g)&16:h!==g&&h.contains(g)},hasScroll:function(h,g){if(a(h).css("overflow")==="hidden")return false;g=g&&g==="left"?"scrollLeft":"scrollTop";var i=false;if(h[g]>0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h<g+i},isOver:function(h,g,i,b,f,j){return a.ui.isOverAxis(h,i,f)&&
+-a.ui.isOverAxis(g,b,j)}})}})(jQuery);
+-(function(a,c){if(a.cleanData){var d=a.cleanData;a.cleanData=function(h){for(var g=0,i;(i=h[g])!=null;g++)a(i).triggerHandler("remove");d(h)}}else{var e=a.fn.remove;a.fn.remove=function(h,g){return this.each(function(){if(!g)if(!h||a.filter(h,[this]).length)a("*",this).add([this]).each(function(){a(this).triggerHandler("remove")});return e.call(a(this),h,g)})}}a.widget=function(h,g,i){var b=h.split(".")[0],f;h=h.split(".")[1];f=b+"-"+h;if(!i){i=g;g=a.Widget}a.expr[":"][f]=function(j){return!!a.data(j,
+-h)};a[b]=a[b]||{};a[b][h]=function(j,l){arguments.length&&this._createWidget(j,l)};g=new g;g.options=a.extend(true,{},g.options);a[b][h].prototype=a.extend(true,g,{namespace:b,widgetName:h,widgetEventPrefix:a[b][h].prototype.widgetEventPrefix||h,widgetBaseClass:f},i);a.widget.bridge(h,a[b][h])};a.widget.bridge=function(h,g){a.fn[h]=function(i){var b=typeof i==="string",f=Array.prototype.slice.call(arguments,1),j=this;i=!b&&f.length?a.extend.apply(null,[true,i].concat(f)):i;if(b&&i.charAt(0)==="_")return j;
+-b?this.each(function(){var l=a.data(this,h),o=l&&a.isFunction(l[i])?l[i].apply(l,f):l;if(o!==l&&o!==c){j=o;return false}}):this.each(function(){var l=a.data(this,h);l?l.option(i||{})._init():a.data(this,h,new g(i,this))});return j}};a.Widget=function(h,g){arguments.length&&this._createWidget(h,g)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(h,g){a.data(g,this.widgetName,this);this.element=a(g);this.options=a.extend(true,{},this.options,
+-this._getCreateOptions(),h);var i=this;this.element.bind("remove."+this.widgetName,function(){i.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
+-widget:function(){return this.element},option:function(h,g){var i=h;if(arguments.length===0)return a.extend({},this.options);if(typeof h==="string"){if(g===c)return this.options[h];i={};i[h]=g}this._setOptions(i);return this},_setOptions:function(h){var g=this;a.each(h,function(i,b){g._setOption(i,b)});return this},_setOption:function(h,g){this.options[h]=g;if(h==="disabled")this.widget()[g?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",g);return this},
+-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(h,g,i){var b=this.options[h];g=a.Event(g);g.type=(h===this.widgetEventPrefix?h:this.widgetEventPrefix+h).toLowerCase();i=i||{};if(g.originalEvent){h=a.event.props.length;for(var f;h;){f=a.event.props[--h];g[f]=g.originalEvent[f]}}this.element.trigger(g,i);return!(a.isFunction(b)&&b.call(this.element[0],g,i)===false||g.isDefaultPrevented())}}})(jQuery);
+-(function(a){a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(d){return c._mouseDown(d)}).bind("click."+this.widgetName,function(d){if(true===a.data(d.target,c.widgetName+".preventClickEvent")){a.removeData(d.target,c.widgetName+".preventClickEvent");d.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(c){c.originalEvent=
+-c.originalEvent||{};if(!c.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var d=this,e=c.which==1,h=typeof this.options.cancel=="string"?a(c.target).closest(this.options.cancel).length:false;if(!e||h||!this._mouseCapture(c))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)){this._mouseStarted=this._mouseStart(c)!==
+-false;if(!this._mouseStarted){c.preventDefault();return true}}true===a.data(c.target,this.widgetName+".preventClickEvent")&&a.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(g){return d._mouseMove(g)};this._mouseUpDelegate=function(g){return d._mouseUp(g)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return c.originalEvent.mouseHandled=true}},_mouseMove:function(c){if(a.browser.msie&&
+-!(document.documentMode>=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+-false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+-(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(c){var d=
+-this.options;if(this.helper||d.disabled||a(c.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(c);if(!this.handle)return false;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(c){var d=this.options;this.helper=
+-this._createHelper(c);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:c.pageX-this.offset.left,top:c.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+-this.originalPosition=this.position=this._generatePosition(c);this.originalPageX=c.pageX;this.originalPageY=c.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);d.containment&&this._setContainment();if(this._trigger("start",c)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,c);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(c,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,c);return true},
+-_mouseDrag:function(c,d){this.position=this._generatePosition(c);this.positionAbs=this._convertPositionTo("absolute");if(!d){d=this._uiHash();if(this._trigger("drag",c,d)===false){this._mouseUp({});return false}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,c);return false},_mouseStop:function(c){var d=
+-false;if(a.ui.ddmanager&&!this.options.dropBehaviour)d=a.ui.ddmanager.drop(this,c);if(this.dropped){d=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!d||this.options.revert=="valid"&&d||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
+-10),function(){e._trigger("stop",c)!==false&&e._clear()})}else this._trigger("stop",c)!==false&&this._clear();return false},_mouseUp:function(c){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,c);return a.ui.mouse.prototype._mouseUp.call(this,c)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(c){var d=!this.options.handle||
+-!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==c.target)d=true});return d},_createHelper:function(c){var d=this.options;c=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):d.helper=="clone"?this.element.clone().removeAttr("id"):this.element;c.parents("body").length||c.appendTo(d.appendTo=="parent"?this.element[0].parentNode:d.appendTo);c[0]!=this.element[0]&&!/(fixed|absolute)/.test(c.css("position"))&&
+-c.css("position","absolute");return c},_adjustOffsetFromHelper:function(c){if(typeof c=="string")c=c.split(" ");if(a.isArray(c))c={left:+c[0],top:+c[1]||0};if("left"in c)this.offset.click.left=c.left+this.margins.left;if("right"in c)this.offset.click.left=this.helperProportions.width-c.right+this.margins.left;if("top"in c)this.offset.click.top=c.top+this.margins.top;if("bottom"in c)this.offset.click.top=this.helperProportions.height-c.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
+-this.helper.offsetParent();var c=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){c.left+=this.scrollParent.scrollLeft();c.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)c={top:0,left:0};return{top:c.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:c.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+-10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var c=this.element.position();return{top:c.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:c.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
+-10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var c=this.options;if(c.containment=="parent")c.containment=this.helper[0].parentNode;if(c.containment=="document"||c.containment=="window")this.containment=[c.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,c.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
+-(c.containment=="document"?0:a(window).scrollLeft())+a(c.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(c.containment=="document"?0:a(window).scrollTop())+(a(c.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(c.containment)&&c.containment.constructor!=Array){c=a(c.containment);var d=c[0];if(d){c.offset();var e=a(d).css("overflow")!=
+-"hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(e?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),
+-10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=c}}else if(c.containment.constructor==Array)this.containment=c.containment},_convertPositionTo:function(c,d){if(!d)d=this.position;c=c=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:d.top+
+-this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*c)}},_generatePosition:function(c){var d=this.options,e=this.cssPosition=="absolute"&&
+-!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=c.pageX,i=c.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(c.pageX-this.offset.click.left<b[0])g=b[0]+this.offset.click.left;
+-if(c.pageY-this.offset.click.top<b[1])i=b[1]+this.offset.click.top;if(c.pageX-this.offset.click.left>b[2])g=b[2]+this.offset.click.left;if(c.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(d.grid){i=d.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/d.grid[1])*d.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.top<b[1]||i-this.offset.click.top>b[3])?i:!(i-this.offset.click.top<b[1])?i-d.grid[1]:i+d.grid[1]:i;g=d.grid[0]?this.originalPageX+Math.round((g-this.originalPageX)/
+-d.grid[0])*d.grid[0]:this.originalPageX;g=b?!(g-this.offset.click.left<b[0]||g-this.offset.click.left>b[2])?g:!(g-this.offset.click.left<b[0])?g-d.grid[0]:g+d.grid[0]:g}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<
+-526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(c,d,e){e=e||this._uiHash();a.ui.plugin.call(this,c,[d,e]);if(c=="drag")this.positionAbs=this._convertPositionTo("absolute");return a.Widget.prototype._trigger.call(this,c,d,
+-e)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8.15"});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,d){var e=a(this).data("draggable"),h=e.options,g=a.extend({},d,{item:e.element});e.sortables=[];a(h.connectToSortable).each(function(){var i=a.data(this,"sortable");if(i&&!i.options.disabled){e.sortables.push({instance:i,shouldRevert:i.options.revert});
+-i.refreshPositions();i._trigger("activate",c,g)}})},stop:function(c,d){var e=a(this).data("draggable"),h=a.extend({},d,{item:e.element});a.each(e.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;e.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;e.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
+-false;this.instance._trigger("deactivate",c,h)}})},drag:function(c,d){var e=a(this).data("draggable"),h=this;a.each(e.sortables,function(){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(h).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
+-this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return d.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;
+-e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}this.instance.currentItem&&this.instance._mouseDrag(c)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
+-this.instance.placeholder.remove();e._trigger("fromSortable",c);e.dropped=false}})}});a.ui.plugin.add("draggable","cursor",{start:function(){var c=a("body"),d=a(this).data("draggable").options;if(c.css("cursor"))d._cursor=c.css("cursor");c.css("cursor",d.cursor)},stop:function(){var c=a(this).data("draggable").options;c._cursor&&a("body").css("cursor",c._cursor)}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){c=a(d.helper);d=a(this).data("draggable").options;if(c.css("opacity"))d._opacity=
+-c.css("opacity");c.css("opacity",d.opacity)},stop:function(c,d){c=a(this).data("draggable").options;c._opacity&&a(d.helper).css("opacity",c._opacity)}});a.ui.plugin.add("draggable","scroll",{start:function(){var c=a(this).data("draggable");if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML")c.overflowOffset=c.scrollParent.offset()},drag:function(c){var d=a(this).data("draggable"),e=d.options,h=false;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!=
+-"x")if(d.overflowOffset.top+d.scrollParent[0].offsetHeight-c.pageY<e.scrollSensitivity)d.scrollParent[0].scrollTop=h=d.scrollParent[0].scrollTop+e.scrollSpeed;else if(c.pageY-d.overflowOffset.top<e.scrollSensitivity)d.scrollParent[0].scrollTop=h=d.scrollParent[0].scrollTop-e.scrollSpeed;if(!e.axis||e.axis!="y")if(d.overflowOffset.left+d.scrollParent[0].offsetWidth-c.pageX<e.scrollSensitivity)d.scrollParent[0].scrollLeft=h=d.scrollParent[0].scrollLeft+e.scrollSpeed;else if(c.pageX-d.overflowOffset.left<
+-e.scrollSensitivity)d.scrollParent[0].scrollLeft=h=d.scrollParent[0].scrollLeft-e.scrollSpeed}else{if(!e.axis||e.axis!="x")if(c.pageY-a(document).scrollTop()<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed);else if(a(window).height()-(c.pageY-a(document).scrollTop())<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed);if(!e.axis||e.axis!="y")if(c.pageX-a(document).scrollLeft()<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()-
+-e.scrollSpeed);else if(a(window).width()-(c.pageX-a(document).scrollLeft())<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed)}h!==false&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,c)}});a.ui.plugin.add("draggable","snap",{start:function(){var c=a(this).data("draggable"),d=c.options;c.snapElements=[];a(d.snap.constructor!=String?d.snap.items||":data(draggable)":d.snap).each(function(){var e=a(this),h=e.offset();this!=c.element[0]&&c.snapElements.push({item:this,
+-width:e.outerWidth(),height:e.outerHeight(),top:h.top,left:h.left})})},drag:function(c,d){for(var e=a(this).data("draggable"),h=e.options,g=h.snapTolerance,i=d.offset.left,b=i+e.helperProportions.width,f=d.offset.top,j=f+e.helperProportions.height,l=e.snapElements.length-1;l>=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g<i&&i<n+g&&k-g<f&&f<m+g||o-g<i&&i<n+g&&k-g<j&&j<m+g||o-g<b&&b<n+g&&k-g<f&&f<m+g||o-g<b&&b<n+g&&k-g<j&&
+-j<m+g){if(h.snapMode!="inner"){var p=Math.abs(k-j)<=g,q=Math.abs(m-f)<=g,s=Math.abs(o-b)<=g,r=Math.abs(n-i)<=g;if(p)d.position.top=e._convertPositionTo("relative",{top:k-e.helperProportions.height,left:0}).top-e.margins.top;if(q)d.position.top=e._convertPositionTo("relative",{top:m,left:0}).top-e.margins.top;if(s)d.position.left=e._convertPositionTo("relative",{top:0,left:o-e.helperProportions.width}).left-e.margins.left;if(r)d.position.left=e._convertPositionTo("relative",{top:0,left:n}).left-e.margins.left}var u=
+-p||q||s||r;if(h.snapMode!="outer"){p=Math.abs(k-f)<=g;q=Math.abs(m-j)<=g;s=Math.abs(o-i)<=g;r=Math.abs(n-b)<=g;if(p)d.position.top=e._convertPositionTo("relative",{top:k,left:0}).top-e.margins.top;if(q)d.position.top=e._convertPositionTo("relative",{top:m-e.helperProportions.height,left:0}).top-e.margins.top;if(s)d.position.left=e._convertPositionTo("relative",{top:0,left:o}).left-e.margins.left;if(r)d.position.left=e._convertPositionTo("relative",{top:0,left:n-e.helperProportions.width}).left-e.margins.left}if(!e.snapElements[l].snapping&&
+-(p||q||s||r||u))e.options.snap.snap&&e.options.snap.snap.call(e.element,c,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=p||q||s||r||u}else{e.snapElements[l].snapping&&e.options.snap.release&&e.options.snap.release.call(e.element,c,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=false}}}});a.ui.plugin.add("draggable","stack",{start:function(){var c=a(this).data("draggable").options;c=a.makeArray(a(c.stack)).sort(function(e,h){return(parseInt(a(e).css("zIndex"),
+-10)||0)-(parseInt(a(h).css("zIndex"),10)||0)});if(c.length){var d=parseInt(c[0].style.zIndex)||0;a(c).each(function(e){this.style.zIndex=d+e});this[0].style.zIndex=d+c.length}}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){c=a(d.helper);d=a(this).data("draggable").options;if(c.css("zIndex"))d._zIndex=c.css("zIndex");c.css("zIndex",d.zIndex)},stop:function(c,d){c=a(this).data("draggable").options;c._zIndex&&a(d.helper).css("zIndex",c._zIndex)}})})(jQuery);
+-(function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var c=this.options,d=c.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(d)?d:function(e){return e.is(d)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[c.scope]=a.ui.ddmanager.droppables[c.scope]||[];a.ui.ddmanager.droppables[c.scope].push(this);
+-c.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var c=a.ui.ddmanager.droppables[this.options.scope],d=0;d<c.length;d++)c[d]==this&&c.splice(d,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(c,d){if(c=="accept")this.accept=a.isFunction(d)?d:function(e){return e.is(d)};a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(c){var d=a.ui.ddmanager.current;this.options.activeClass&&
+-this.element.addClass(this.options.activeClass);d&&this._trigger("activate",c,this.ui(d))},_deactivate:function(c){var d=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);d&&this._trigger("deactivate",c,this.ui(d))},_over:function(c){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+-this._trigger("over",c,this.ui(d))}},_out:function(c){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",c,this.ui(d))}},_drop:function(c,d){var e=d||a.ui.ddmanager.current;if(!e||(e.currentItem||e.element)[0]==this.element[0])return false;var h=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+-a.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==e.options.scope&&g.accept.call(g.element[0],e.currentItem||e.element)&&a.ui.intersect(e,a.extend(g,{offset:g.element.offset()}),g.options.tolerance)){h=true;return false}});if(h)return false;if(this.accept.call(this.element[0],e.currentItem||e.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+-c,this.ui(e));return this.element}return false},ui:function(c){return{draggable:c.currentItem||c.element,helper:c.helper,position:c.position,offset:c.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8.15"});a.ui.intersect=function(c,d,e){if(!d.offset)return false;var h=(c.positionAbs||c.position.absolute).left,g=h+c.helperProportions.width,i=(c.positionAbs||c.position.absolute).top,b=i+c.helperProportions.height,f=d.offset.left,j=f+d.proportions.width,l=d.offset.top,o=l+d.proportions.height;
+-switch(e){case "fit":return f<=h&&g<=j&&l<=i&&b<=o;case "intersect":return f<h+c.helperProportions.width/2&&g-c.helperProportions.width/2<j&&l<i+c.helperProportions.height/2&&b-c.helperProportions.height/2<o;case "pointer":return a.ui.isOver((c.positionAbs||c.position.absolute).top+(c.clickOffset||c.offset.click).top,(c.positionAbs||c.position.absolute).left+(c.clickOffset||c.offset.click).left,l,f,d.proportions.height,d.proportions.width);case "touch":return(i>=l&&i<=o||b>=l&&b<=o||i<l&&b>o)&&(h>=
+-f&&h<=j||g>=f&&g<=j||h<f&&g>j);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(c,d){var e=a.ui.ddmanager.droppables[c.options.scope]||[],h=d?d.type:null,g=(c.currentItem||c.element).find(":data(droppable)").andSelf(),i=0;a:for(;i<e.length;i++)if(!(e[i].options.disabled||c&&!e[i].accept.call(e[i].element[0],c.currentItem||c.element))){for(var b=0;b<g.length;b++)if(g[b]==e[i].element[0]){e[i].proportions.height=0;continue a}e[i].visible=e[i].element.css("display")!=
+-"none";if(e[i].visible){h=="mousedown"&&e[i]._activate.call(e[i],d);e[i].offset=e[i].element.offset();e[i].proportions={width:e[i].element[0].offsetWidth,height:e[i].element[0].offsetHeight}}}},drop:function(c,d){var e=false;a.each(a.ui.ddmanager.droppables[c.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&a.ui.intersect(c,this,this.options.tolerance))e=e||this._drop.call(this,d);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],c.currentItem||
+-c.element)){this.isout=1;this.isover=0;this._deactivate.call(this,d)}}});return e},dragStart:function(c,d){c.element.parentsUntil("body").bind("scroll.droppable",function(){c.options.refreshPositions||a.ui.ddmanager.prepareOffsets(c,d)})},drag:function(c,d){c.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(c,d);a.each(a.ui.ddmanager.droppables[c.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var e=a.ui.intersect(c,this,this.options.tolerance);if(e=
+-!e&&this.isover==1?"isout":e&&this.isover==0?"isover":null){var h;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){h=a.data(g[0],"droppable");h.greedyChild=e=="isover"?1:0}}if(h&&e=="isover"){h.isover=0;h.isout=1;h._out.call(h,d)}this[e]=1;this[e=="isout"?"isover":"isout"]=0;this[e=="isover"?"_over":"_out"].call(this,d);if(h&&e=="isout"){h.isout=0;h.isover=1;h._over.call(h,d)}}}})},dragStop:function(c,d){c.element.parentsUntil("body").unbind("scroll.droppable");
+-c.options.refreshPositions||a.ui.ddmanager.prepareOffsets(c,d)}}})(jQuery);
+-(function(a){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var e=this,h=this.options;this.element.addClass("ui-resizable");a.extend(this,{_aspectRatio:!!h.aspectRatio,aspectRatio:h.aspectRatio,originalElement:this.element,
+-_proportionallyResizeElements:[],_helper:h.helper||h.ghost||h.animate?h.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i<g.length;i++){var b=a.trim(g[i]),f=a('<div class="ui-resizable-handle '+("ui-resizable-"+b)+'"></div>');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor==
+-String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection();
+-this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+-var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h=
+-false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"});
+-this._renderProxy();g=c(this.helper.css("left"));var b=c(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff=
+-{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis];
+-if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false},
+-_mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b,
+-{top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:d(h.minWidth)?h.minWidth:0,maxWidth:d(h.maxWidth)?h.maxWidth:Infinity,minHeight:d(h.minHeight)?h.minHeight:0,maxHeight:d(h.maxHeight)?h.maxHeight:
+-Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(g<h.maxWidth)h.maxWidth=g;if(b<h.maxHeight)h.maxHeight=b}this._vBoundaries=h},_updateCache:function(e){this.offset=this.helper.offset();if(d(e.left))this.position.left=e.left;if(d(e.top))this.position.top=e.top;if(d(e.height))this.size.height=e.height;if(d(e.width))this.size.width=
+-e.width},_updateRatio:function(e){var h=this.position,g=this.size,i=this.axis;if(d(e.height))e.width=e.height*this.aspectRatio;else if(d(e.width))e.height=e.width/this.aspectRatio;if(i=="sw"){e.left=h.left+(g.width-e.width);e.top=null}if(i=="nw"){e.top=h.top+(g.height-e.height);e.left=h.left+(g.width-e.width)}return e},_respectSize:function(e){var h=this._vBoundaries,g=this.axis,i=d(e.width)&&h.maxWidth&&h.maxWidth<e.width,b=d(e.height)&&h.maxHeight&&h.maxHeight<e.height,f=d(e.width)&&h.minWidth&&
+-h.minWidth>e.width,j=d(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left=
+-null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h<this._proportionallyResizeElements.length;h++){var g=this._proportionallyResizeElements[h];if(!this.borderDif){var i=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],b=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=a.map(i,function(f,j){f=parseInt(f,10)||
+-0;j=parseInt(b[j],10)||0;return f+j})}a.browser.msie&&(a(e).is(":hidden")||a(e).parents(":hidden").length)||g.css({height:e.height()-this.borderDif[0]-this.borderDif[2]||0,width:e.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var e=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
+-h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+
+-g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]);
+-e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.15"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(),
+-10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top-
+-b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?
+-a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h=
+-a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing,
+-step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement=
+-a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=c(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset;
+-var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left:
+-h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top-
+-i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition,
+-b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,
+-display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e=
+-a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height=
+-i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var c=function(e){return parseInt(e,10)||0},d=function(e){return!isNaN(parseInt(e,10))}})(jQuery);
+-(function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var d;this.refresh=function(){d=a(c.options.filter,c.element[0]);d.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"),
+-selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=d.addClass("ui-selectee");this._mouseInit();this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var d=this;this.opos=[c.pageX,
+-c.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",c);a(e.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!c.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;d._trigger("unselecting",
+-c,{unselecting:h.element})}});a(c.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!c.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?d._trigger("selecting",c,{selecting:h.element}):d._trigger("unselecting",c,{unselecting:h.element});return false}})}},_mouseDrag:function(c){var d=this;this.dragged=true;if(!this.options.disabled){var e=
+-this.options,h=this.opos[0],g=this.opos[1],i=c.pageX,b=c.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==d.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.right<h||j.top>b||j.bottom<g);else if(e.tolerance=="fit")l=j.left>h&&j.right<i&&j.top>g&&j.bottom<b;if(l){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");
+-j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;d._trigger("selecting",c,{selecting:j.element})}}else{if(j.selecting)if(c.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}d._trigger("unselecting",c,{unselecting:j.element})}if(j.selected)if(!c.metaKey&&
+-!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;d._trigger("unselecting",c,{unselecting:j.element})}}}});return false}},_mouseStop:function(c){var d=this;this.dragged=false;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;d._trigger("unselected",c,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=
+-a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;d._trigger("selected",c,{selected:e.element})});this._trigger("stop",c);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8.15"})})(jQuery);
+-(function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var c=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+-this.refresh();this.floating=this.items.length?c.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var c=this.items.length-1;c>=0;c--)this.items[c].item.removeData("sortable-item");return this},_setOption:function(c,d){if(c===
+-"disabled"){this.options[c]=d;this.widget()[d?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(c,d){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(c);var e=null,h=this;a(c.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(c.target,"sortable-item")==h)e=a(c.target);if(!e)return false;if(this.options.handle&&
+-!d){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==c.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(c,d,e){d=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(c);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:c.pageX-this.offset.left,top:c.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(c);this.originalPageX=c.pageX;this.originalPageY=c.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();d.containment&&this._setContainment();if(d.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",d.cursor)}if(d.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",d.opacity)}if(d.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",d.zIndex)}if(this.scrollParent[0]!=
+-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",c,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",c,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,c);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(c);
+-return true},_mouseDrag:function(c){this.position=this._generatePosition(c);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var d=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-c.pageY<d.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop+d.scrollSpeed;else if(c.pageY-this.overflowOffset.top<
+-d.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop-d.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-c.pageX<d.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft+d.scrollSpeed;else if(c.pageX-this.overflowOffset.left<d.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft-d.scrollSpeed}else{if(c.pageY-a(document).scrollTop()<d.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()-
+-d.scrollSpeed);else if(a(window).height()-(c.pageY-a(document).scrollTop())<d.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()+d.scrollSpeed);if(c.pageX-a(document).scrollLeft()<d.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()-d.scrollSpeed);else if(a(window).width()-(c.pageX-a(document).scrollLeft())<d.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()+d.scrollSpeed)}e!==false&&a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,
+-c)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(d=this.items.length-1;d>=0;d--){e=this.items[d];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],
+-h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(c,e);else break;this._trigger("change",c,this._uiHash());break}}this._contactContainers(c);a.ui.ddmanager&&a.ui.ddmanager.drag(this,c);this._trigger("sort",c,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(c){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,c);if(this.options.revert){var e=this;d=e.placeholder.offset();
+-e.reverting=true;a(this.helper).animate({left:d.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:d.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(c)})}else this._clear(c,d);return false}},cancel:function(){var c=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+-this.currentItem.show();for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("deactivate",null,c._uiHash(this));if(this.containers[d].containerCache.over){this.containers[d]._trigger("out",null,c._uiHash(this));this.containers[d].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null,
+-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(c){var d=this._getItemsAsjQuery(c&&c.connected),e=[];c=c||{};a(d).each(function(){var h=(a(c.item||this).attr(c.attribute||"id")||"").match(c.expression||/(.+)[-=_](.+)/);if(h)e.push((c.key||h[1]+"[]")+"="+(c.key&&c.expression?h[1]:h[2]))});!e.length&&c.key&&e.push(c.key+"=");return e.join("&")},
+-toArray:function(c){var d=this._getItemsAsjQuery(c&&c.connected),e=[];c=c||{};d.each(function(){e.push(a(c.item||this).attr(c.attribute||"id")||"")});return e},_intersectsWith:function(c){var d=this.positionAbs.left,e=d+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=c.left,b=i+c.width,f=c.top,j=f+c.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+l<j&&d+o>i&&d+o<b;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>c[this.floating?"width":"height"]?l:i<d+this.helperProportions.width/2&&e-this.helperProportions.width/2<b&&f<h+this.helperProportions.height/2&&g-this.helperProportions.height/2<j},_intersectsWithPointer:function(c){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,c.top,c.height);c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,c.left,c.width);d=d&&c;c=this._getDragVerticalDirection();
+-var e=this._getDragHorizontalDirection();if(!d)return false;return this.floating?e&&e=="right"||c=="down"?2:1:c&&(c=="down"?2:1)},_intersectsWithSides:function(c){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,c.top+c.height/2,c.height);c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,c.left+c.width/2,c.width);var e=this._getDragVerticalDirection(),h=this._getDragHorizontalDirection();return this.floating&&h?h=="right"&&c||h=="left"&&!c:e&&(e=="down"&&d||e=="up"&&!d)},
+-_getDragVerticalDirection:function(){var c=this.positionAbs.top-this.lastPositionAbs.top;return c!=0&&(c>0?"down":"up")},_getDragHorizontalDirection:function(){var c=this.positionAbs.left-this.lastPositionAbs.left;return c!=0&&(c>0?"right":"left")},refresh:function(c){this._refreshItems(c);this.refreshPositions();return this},_connectWith:function(){var c=this.options;return c.connectWith.constructor==String?[c.connectWith]:c.connectWith},_getItemsAsjQuery:function(c){var d=[],e=[],h=this._connectWith();
+-if(h&&c)for(c=h.length-1;c>=0;c--)for(var g=a(h[c]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+-this]);for(c=e.length-1;c>=0;c--)e[c][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){for(var c=this.currentItem.find(":data(sortable-item)"),d=0;d<this.items.length;d++)for(var e=0;e<c.length;e++)c[e]==this.items[d].item[0]&&this.items.splice(d,1)},_refreshItems:function(c){this.items=[];this.containers=[this];var d=this.items,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],c,{item:this.currentItem}):a(this.options.items,this.element),
+-this]],h=this._connectWith();if(h)for(var g=h.length-1;g>=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],c,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){c=e[g][1];h=e[g][0];b=0;for(i=h.length;b<i;b++){f=a(h[b]);f.data("sortable-item",c);d.push({item:f,instance:c,width:0,height:0,left:0,top:0})}}},refreshPositions:function(c){if(this.offsetParent&&
+-this.helper)this.offset.parent=this._getParentOffset();for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!c){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(d=
+-this.containers.length-1;d>=0;d--){h=this.containers[d].element.offset();this.containers[d].containerCache.left=h.left;this.containers[d].containerCache.top=h.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}return this},_createPlaceholder:function(c){var d=c||this,e=d.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g=
+-a(document.createElement(d.currentItem[0].nodeName)).addClass(h||d.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(d.currentItem.innerHeight()-parseInt(d.currentItem.css("paddingTop")||0,10)-parseInt(d.currentItem.css("paddingBottom")||0,10));i.width()||i.width(d.currentItem.innerWidth()-parseInt(d.currentItem.css("paddingLeft")||0,10)-parseInt(d.currentItem.css("paddingRight")||
+-0,10))}}}}d.placeholder=a(e.placeholder.element.call(d.element,d.currentItem));d.currentItem.after(d.placeholder);e.placeholder.update(d,d.placeholder)},_contactContainers:function(c){for(var d=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(d&&a.ui.contains(this.containers[h].element[0],d.element[0]))){d=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out",
+-c,this._uiHash(this));this.containers[h].containerCache.over=0}if(d)if(this.containers.length===1){this.containers[e]._trigger("over",c,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){d=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b-
+-g)<d){d=Math.abs(b-g);h=this.items[i]}}if(h||this.options.dropOnEmpty){this.currentContainer=this.containers[e];h?this._rearrange(c,h,null,true):this._rearrange(c,null,this.containers[e].element,true);this._trigger("change",c,this._uiHash());this.containers[e]._trigger("change",c,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[e]._trigger("over",c,this._uiHash(this));this.containers[e].containerCache.over=1}}},_createHelper:function(c){var d=
+-this.options;c=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):d.helper=="clone"?this.currentItem.clone():this.currentItem;c.parents("body").length||a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(c[0]);if(c[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(c[0].style.width==
+-""||d.forceHelperSize)c.width(this.currentItem.width());if(c[0].style.height==""||d.forceHelperSize)c.height(this.currentItem.height());return c},_adjustOffsetFromHelper:function(c){if(typeof c=="string")c=c.split(" ");if(a.isArray(c))c={left:+c[0],top:+c[1]||0};if("left"in c)this.offset.click.left=c.left+this.margins.left;if("right"in c)this.offset.click.left=this.helperProportions.width-c.right+this.margins.left;if("top"in c)this.offset.click.top=c.top+this.margins.top;if("bottom"in c)this.offset.click.top=
+-this.helperProportions.height-c.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var c=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){c.left+=this.scrollParent.scrollLeft();c.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)c=
+-{top:0,left:0};return{top:c.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:c.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var c=this.currentItem.position();return{top:c.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:c.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var c=this.options;if(c.containment=="parent")c.containment=this.helper[0].parentNode;if(c.containment=="document"||c.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(c.containment=="document"?
+-document:window).width()-this.helperProportions.width-this.margins.left,(a(c.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(c.containment)){var d=a(c.containment)[0];c=a(c.containment).offset();var e=a(d).css("overflow")!="hidden";this.containment=[c.left+(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0)-this.margins.left,c.top+(parseInt(a(d).css("borderTopWidth"),
+-10)||0)+(parseInt(a(d).css("paddingTop"),10)||0)-this.margins.top,c.left+(e?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,c.top+(e?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(c,d){if(!d)d=
+-this.position;c=c=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:d.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&
+-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*c)}},_generatePosition:function(c){var d=this.options,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+-var g=c.pageX,i=c.pageY;if(this.originalPosition){if(this.containment){if(c.pageX-this.offset.click.left<this.containment[0])g=this.containment[0]+this.offset.click.left;if(c.pageY-this.offset.click.top<this.containment[1])i=this.containment[1]+this.offset.click.top;if(c.pageX-this.offset.click.left>this.containment[2])g=this.containment[2]+this.offset.click.left;if(c.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(d.grid){i=this.originalPageY+Math.round((i-
+-this.originalPageY)/d.grid[1])*d.grid[1];i=this.containment?!(i-this.offset.click.top<this.containment[1]||i-this.offset.click.top>this.containment[3])?i:!(i-this.offset.click.top<this.containment[1])?i-d.grid[1]:i+d.grid[1]:i;g=this.originalPageX+Math.round((g-this.originalPageX)/d.grid[0])*d.grid[0];g=this.containment?!(g-this.offset.click.left<this.containment[0]||g-this.offset.click.left>this.containment[2])?g:!(g-this.offset.click.left<this.containment[0])?g-d.grid[0]:g+d.grid[0]:g}}return{top:i-
+-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_rearrange:function(c,d,e,h){e?e[0].appendChild(this.placeholder[0]):d.item[0].parentNode.insertBefore(this.placeholder[0],
+-this.direction=="down"?d.item[0]:d.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var g=this,i=this.counter;window.setTimeout(function(){i==g.counter&&g.refreshPositions(!h)},0)},_clear:function(c,d){this.reverting=false;var e=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var h in this._storedCSS)if(this._storedCSS[h]=="auto"||this._storedCSS[h]=="static")this._storedCSS[h]=
+-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!d&&e.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!d)e.push(function(g){this._trigger("update",g,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){d||e.push(function(g){this._trigger("remove",
+-g,this._uiHash())});for(h=this.containers.length-1;h>=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!d){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){d||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this,
+-this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!d){this._trigger("beforeStop",
+-c,this._uiHash());for(h=0;h<e.length;h++)e[h].call(this,c);this._trigger("stop",c,this._uiHash())}return false}d||this._trigger("beforeStop",c,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!d){for(h=0;h<e.length;h++)e[h].call(this,c);this._trigger("stop",c,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+-_uiHash:function(c){var d=c||this;return{helper:d.helper,placeholder:d.placeholder||a([]),position:d.position,originalPosition:d.originalPosition,offset:d.positionAbs,item:d.currentItem,sender:c?c.element:null}}});a.extend(a.ui.sortable,{version:"1.8.15"})})(jQuery);
+-jQuery.effects||function(a,c){function d(n){var k;if(n&&n.constructor==Array&&n.length==3)return n;if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)];if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55];if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return[parseInt(k[1],
+-16),parseInt(k[2],16),parseInt(k[3],16)];if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(n))return j.transparent;return j[a.trim(n).toLowerCase()]}function e(n,k){var m;do{m=a.curCSS(n,k);if(m!=""&&m!="transparent"||a.nodeName(n,"body"))break;k="backgroundColor"}while(n=n.parentNode);return d(m)}function h(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+-k={},m,p;if(n&&n.length&&n[0]&&n[n[0]])for(var q=n.length;q--;){m=n[q];if(typeof n[m]=="string"){p=m.replace(/\-(\w)/g,function(s,r){return r.toUpperCase()});k[p]=n[m]}}else for(m in n)if(typeof n[m]==="string")k[m]=n[m];return k}function g(n){var k,m;for(k in n){m=n[k];if(m==null||a.isFunction(m)||k in o||/scrollbar/.test(k)||!/color/i.test(k)&&isNaN(parseFloat(m)))delete n[k]}return n}function i(n,k){var m={_:0},p;for(p in k)if(n[p]!=k[p])m[p]=k[p];return m}function b(n,k,m,p){if(typeof n=="object"){p=
+-k;m=null;k=n;n=k.effect}if(a.isFunction(k)){p=k;m=null;k={}}if(typeof k=="number"||a.fx.speeds[k]){p=m;m=k;k={}}if(a.isFunction(m)){p=m;m=null}k=k||{};m=m||k.duration;m=a.fx.off?0:typeof m=="number"?m:m in a.fx.speeds?a.fx.speeds[m]:a.fx.speeds._default;p=p||k.complete;return[n,k,m,p]}function f(n){if(!n||typeof n==="number"||a.fx.speeds[n])return true;if(typeof n==="string"&&!a.effects[n])return true;return false}a.effects={};a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+-"borderTopColor","borderColor","color","outlineColor"],function(n,k){a.fx.step[k]=function(m){if(!m.colorInit){m.start=e(m.elem,k);m.end=d(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt(m.pos*(m.end[0]-m.start[0])+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[1]-m.start[1])+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[2]-m.start[2])+m.start[2],10),255),0)+")"}});var j={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},l=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(n,k,m,
+-p){if(a.isFunction(m)){p=m;m=null}return this.queue(function(){var q=a(this),s=q.attr("style")||" ",r=g(h.call(this)),u,v=q.attr("class");a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});u=g(h.call(this));q.attr("class",v);q.animate(i(r,u),{queue:false,duration:k,easing:m,complete:function(){a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});if(typeof q.attr("style")=="object"){q.attr("style").cssText="";q.attr("style").cssText=s}else q.attr("style",s);p&&p.apply(this,arguments);a.dequeue(this)}})})};
+-a.fn.extend({_addClass:a.fn.addClass,addClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{add:n},k,m,p]):this._addClass(n)},_removeClass:a.fn.removeClass,removeClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{remove:n},k,m,p]):this._removeClass(n)},_toggleClass:a.fn.toggleClass,toggleClass:function(n,k,m,p,q){return typeof k=="boolean"||k===c?m?a.effects.animateClass.apply(this,[k?{add:n}:{remove:n},m,p,q]):this._toggleClass(n,k):a.effects.animateClass.apply(this,
+-[{toggle:n},k,m,p])},switchClass:function(n,k,m,p,q){return a.effects.animateClass.apply(this,[{add:k,remove:n},m,p,q])}});a.extend(a.effects,{version:"1.8.15",save:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.data("ec.storage."+k[m],n[0].style[k[m]])},restore:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.css(k[m],n.data("ec.storage."+k[m]))},setMode:function(n,k){if(k=="toggle")k=n.is(":hidden")?"show":"hide";return k},getBaseline:function(n,k){var m;switch(n[0]){case "top":m=
+-0;break;case "middle":m=0.5;break;case "bottom":m=1;break;default:m=n[0]/k.height}switch(n[1]){case "left":n=0;break;case "center":n=0.5;break;case "right":n=1;break;default:n=n[1]/k.width}return{x:n,y:m}},createWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent();var k={width:n.outerWidth(true),height:n.outerHeight(true),"float":n.css("float")},m=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
+-n.wrap(m);m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(p,q){k[q]=n.css(q);if(isNaN(parseInt(k[q],10)))k[q]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent().replaceWith(n);return n},setTransition:function(n,
+-k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments);
+-k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%",
+-"pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p*
+-((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m,p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/=
+-q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n,k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/=
+-q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/
+-r);return-(r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s))+m},easeOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return r*Math.pow(2,-10*k)*Math.sin((k*q-n)*2*Math.PI/s)+p+m},easeInOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q/2)==2)return m+p;s||(s=q*0.3*1.5);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);if(k<1)return-0.5*
+-r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)+m;return r*Math.pow(2,-10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)*0.5+p+m},easeInBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;return p*(k/=q)*k*((s+1)*k-s)+m},easeOutBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;return p*((k=k/q-1)*k*((s+1)*k+s)+1)+m},easeInOutBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;if((k/=q/2)<1)return p/2*k*k*(((s*=1.525)+1)*k-s)+m;return p/2*((k-=2)*k*(((s*=1.525)+1)*k+s)+2)+m},easeInBounce:function(n,k,m,p,q){return p-a.easing.easeOutBounce(n,
+-q-k,0,p,q)+m},easeOutBounce:function(n,k,m,p,q){return(k/=q)<1/2.75?p*7.5625*k*k+m:k<2/2.75?p*(7.5625*(k-=1.5/2.75)*k+0.75)+m:k<2.5/2.75?p*(7.5625*(k-=2.25/2.75)*k+0.9375)+m:p*(7.5625*(k-=2.625/2.75)*k+0.984375)+m},easeInOutBounce:function(n,k,m,p,q){if(k<q/2)return a.easing.easeInBounce(n,k*2,0,p,q)*0.5+m;return a.easing.easeOutBounce(n,k*2-q,0,p,q)*0.5+p*0.5+m}})}(jQuery);
+-(function(a){a.effects.blind=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"vertical";a.effects.save(d,e);d.show();var i=a.effects.createWrapper(d).css({overflow:"hidden"}),b=g=="vertical"?"height":"width";g=g=="vertical"?i.height():i.width();h=="show"&&i.css(b,0);var f={};f[b]=h=="show"?g:0;i.animate(f,c.duration,c.options.easing,function(){h=="hide"&&d.hide();a.effects.restore(d,
+-e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()})})}})(jQuery);
+-(function(a){a.effects.bounce=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"effect"),g=c.options.direction||"up",i=c.options.distance||20,b=c.options.times||5,f=c.duration||250;/show|hide/.test(h)&&e.push("opacity");a.effects.save(d,e);d.show();a.effects.createWrapper(d);var j=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";i=c.options.distance||(j=="top"?d.outerHeight({margin:true})/3:d.outerWidth({margin:true})/
+-3);if(h=="show")d.css("opacity",0).css(j,g=="pos"?-i:i);if(h=="hide")i/=b*2;h!="hide"&&b--;if(h=="show"){var l={opacity:1};l[j]=(g=="pos"?"+=":"-=")+i;d.animate(l,f/2,c.options.easing);i/=2;b--}for(l=0;l<b;l++){var o={},n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;d.animate(o,f/2,c.options.easing).animate(n,f/2,c.options.easing);i=h=="hide"?i*2:i/2}if(h=="hide"){l={opacity:0};l[j]=(g=="pos"?"-=":"+=")+i;d.animate(l,f/2,c.options.easing,function(){d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);
+-c.callback&&c.callback.apply(this,arguments)})}else{o={};n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;d.animate(o,f/2,c.options.easing).animate(n,f/2,c.options.easing,function(){a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments)})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);
+-(function(a){a.effects.clip=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","height","width"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"vertical";a.effects.save(d,e);d.show();var i=a.effects.createWrapper(d).css({overflow:"hidden"});i=d[0].tagName=="IMG"?i:d;var b={size:g=="vertical"?"height":"width",position:g=="vertical"?"top":"left"};g=g=="vertical"?i.height():i.width();if(h=="show"){i.css(b.size,0);i.css(b.position,
+-g/2)}var f={};f[b.size]=h=="show"?g:0;f[b.position]=h=="show"?0:g/2;i.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.drop=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","opacity"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"left";a.effects.save(d,e);d.show();a.effects.createWrapper(d);var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=c.options.distance||(i=="top"?d.outerHeight({margin:true})/2:d.outerWidth({margin:true})/2);if(h=="show")d.css("opacity",0).css(i,g=="pos"?-b:b);var f={opacity:h==
+-"show"?1:0};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;d.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.explode=function(c){return this.queue(function(){var d=c.options.pieces?Math.round(Math.sqrt(c.options.pieces)):3,e=c.options.pieces?Math.round(Math.sqrt(c.options.pieces)):3;c.options.mode=c.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":c.options.mode;var h=a(this).show().css("visibility","hidden"),g=h.offset();g.top-=parseInt(h.css("marginTop"),10)||0;g.left-=parseInt(h.css("marginLeft"),10)||0;for(var i=h.outerWidth(true),b=h.outerHeight(true),f=0;f<d;f++)for(var j=
+-0;j<e;j++)h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/d)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/d,left:g.left+j*(i/e)+(c.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/d)+(c.options.mode=="show"?(f-Math.floor(d/2))*(b/d):0),opacity:c.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(c.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+
+-f*(b/d)+(c.options.mode=="show"?0:(f-Math.floor(d/2))*(b/d)),opacity:c.options.mode=="show"?1:0},c.duration||500);setTimeout(function(){c.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();c.callback&&c.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},c.duration||500)})}})(jQuery);
+-(function(a){a.effects.fade=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"hide");d.animate({opacity:e},{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.fold=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.size||15,i=!!c.options.horizFirst,b=c.duration?c.duration/2:a.fx.speeds._default/2;a.effects.save(d,e);d.show();var f=a.effects.createWrapper(d).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1],
+-10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,c.options.easing).animate(o,b,c.options.easing,function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()})})}})(jQuery);
+-(function(a){a.effects.highlight=function(c){return this.queue(function(){var d=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(d,c.options.mode||"show"),g={backgroundColor:d.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(d,e);d.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(g,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);h=="show"&&!a.support.opacity&&
+-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.pulsate=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"show");times=(c.options.times||5)*2-1;duration=c.duration?c.duration/2:a.fx.speeds._default/2;isVisible=d.is(":visible");animateTo=0;if(!isVisible){d.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e<times;e++){d.animate({opacity:animateTo},duration,c.options.easing);animateTo=(animateTo+1)%2}d.animate({opacity:animateTo},duration,
+-c.options.easing,function(){animateTo==0&&d.hide();c.callback&&c.callback.apply(this,arguments)});d.queue("fx",function(){d.dequeue()}).dequeue()})}})(jQuery);
+-(function(a){a.effects.puff=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"hide"),h=parseInt(c.options.percent,10)||150,g=h/100,i={height:d.height(),width:d.width()};a.extend(c.options,{fade:true,mode:e,percent:e=="hide"?h:100,from:e=="hide"?i:{height:i.height*g,width:i.width*g}});d.effect("scale",c.options,c.duration,c.callback);d.dequeue()})};a.effects.scale=function(c){return this.queue(function(){var d=a(this),e=a.extend(true,{},c.options),h=a.effects.setMode(d,
+-c.options.mode||"effect"),g=parseInt(c.options.percent,10)||(parseInt(c.options.percent,10)==0?0:h=="hide"?0:100),i=c.options.direction||"both",b=c.options.origin;if(h!="effect"){e.origin=b||["middle","center"];e.restore=true}b={height:d.height(),width:d.width()};d.from=c.options.from||(h=="show"?{height:0,width:0}:b);g={y:i!="horizontal"?g/100:1,x:i!="vertical"?g/100:1};d.to={height:b.height*g.y,width:b.width*g.x};if(c.options.fade){if(h=="show"){d.from.opacity=0;d.to.opacity=1}if(h=="hide"){d.from.opacity=
+-1;d.to.opacity=0}}e.from=d.from;e.to=d.to;e.mode=h;d.effect("size",e,c.duration,c.callback);d.dequeue()})};a.effects.size=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],g=["width","height","overflow"],i=["fontSize"],b=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
+-j=a.effects.setMode(d,c.options.mode||"effect"),l=c.options.restore||false,o=c.options.scale||"both",n=c.options.origin,k={height:d.height(),width:d.width()};d.from=c.options.from||k;d.to=c.options.to||k;if(n){n=a.effects.getBaseline(n,k);d.from.top=(k.height-d.from.height)*n.y;d.from.left=(k.width-d.from.width)*n.x;d.to.top=(k.height-d.to.height)*n.y;d.to.left=(k.width-d.to.width)*n.x}var m={from:{y:d.from.height/k.height,x:d.from.width/k.width},to:{y:d.to.height/k.height,x:d.to.width/k.width}};
+-if(o=="box"||o=="both"){if(m.from.y!=m.to.y){e=e.concat(b);d.from=a.effects.setTransition(d,b,m.from.y,d.from);d.to=a.effects.setTransition(d,b,m.to.y,d.to)}if(m.from.x!=m.to.x){e=e.concat(f);d.from=a.effects.setTransition(d,f,m.from.x,d.from);d.to=a.effects.setTransition(d,f,m.to.x,d.to)}}if(o=="content"||o=="both")if(m.from.y!=m.to.y){e=e.concat(i);d.from=a.effects.setTransition(d,i,m.from.y,d.from);d.to=a.effects.setTransition(d,i,m.to.y,d.to)}a.effects.save(d,l?e:h);d.show();a.effects.createWrapper(d);
+-d.css("overflow","hidden").css(d.from);if(o=="content"||o=="both"){b=b.concat(["marginTop","marginBottom"]).concat(i);f=f.concat(["marginLeft","marginRight"]);g=e.concat(b).concat(f);d.find("*[width]").each(function(){child=a(this);l&&a.effects.save(child,g);var p={height:child.height(),width:child.width()};child.from={height:p.height*m.from.y,width:p.width*m.from.x};child.to={height:p.height*m.to.y,width:p.width*m.to.x};if(m.from.y!=m.to.y){child.from=a.effects.setTransition(child,b,m.from.y,child.from);
+-child.to=a.effects.setTransition(child,b,m.to.y,child.to)}if(m.from.x!=m.to.x){child.from=a.effects.setTransition(child,f,m.from.x,child.from);child.to=a.effects.setTransition(child,f,m.to.x,child.to)}child.css(child.from);child.animate(child.to,c.duration,c.options.easing,function(){l&&a.effects.restore(child,g)})})}d.animate(d.to,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d.to.opacity===0&&d.css("opacity",d.from.opacity);j=="hide"&&d.hide();a.effects.restore(d,
+-l?e:h);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.shake=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"];a.effects.setMode(d,c.options.mode||"effect");var h=c.options.direction||"left",g=c.options.distance||20,i=c.options.times||3,b=c.duration||c.options.duration||140;a.effects.save(d,e);d.show();a.effects.createWrapper(d);var f=h=="up"||h=="down"?"top":"left",j=h=="up"||h=="left"?"pos":"neg";h={};var l={},o={};h[f]=(j=="pos"?"-=":"+=")+g;l[f]=(j=="pos"?"+=":"-=")+g*2;o[f]=
+-(j=="pos"?"-=":"+=")+g*2;d.animate(h,b,c.options.easing);for(g=1;g<i;g++)d.animate(l,b,c.options.easing).animate(o,b,c.options.easing);d.animate(l,b,c.options.easing).animate(h,b/2,c.options.easing,function(){a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments)});d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);
+-(function(a){a.effects.slide=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"show"),g=c.options.direction||"left";a.effects.save(d,e);d.show();a.effects.createWrapper(d).css({overflow:"hidden"});var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=c.options.distance||(i=="top"?d.outerHeight({margin:true}):d.outerWidth({margin:true}));if(h=="show")d.css(i,g=="pos"?isNaN(b)?"-"+b:-b:b);
+-var f={};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;d.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.transfer=function(c){return this.queue(function(){var d=a(this),e=a(c.options.to),h=e.offset();e={top:h.top,left:h.left,height:e.innerHeight(),width:e.innerWidth()};h=d.offset();var g=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(c.options.className).css({top:h.top,left:h.left,height:d.innerHeight(),width:d.innerWidth(),position:"absolute"}).animate(e,c.duration,c.options.easing,function(){g.remove();c.callback&&c.callback.apply(d[0],arguments);
+-d.dequeue()})})}})(jQuery);
+-(function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var c=this,d=c.options;c.running=0;c.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");c.headers=
+-c.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){d.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){d.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){d.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){d.disabled||a(this).removeClass("ui-state-focus")});c.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
+-if(d.navigation){var e=c.element.find("a").filter(d.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");c.active=h.length?h:e.closest(".ui-accordion-content").prev()}}c.active=c._findActive(c.active||d.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");c.active.next().addClass("ui-accordion-content-active");c._createIcons();c.resize();c.element.attr("role","tablist");c.headers.attr("role","tab").bind("keydown.accordion",
+-function(g){return c._keydown(g)}).next().attr("role","tabpanel");c.headers.not(c.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();c.active.length?c.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):c.headers.eq(0).attr("tabIndex",0);a.browser.safari||c.headers.find("a").attr("tabIndex",-1);d.event&&c.headers.bind(d.event.split(" ").join(".accordion ")+".accordion",function(g){c._clickHandler.call(c,g,this);g.preventDefault()})},_createIcons:function(){var c=
+-this.options;if(c.icons){a("<span></span>").addClass("ui-icon "+c.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(c.icons.header).toggleClass(c.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
+-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var d=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(c.autoHeight||c.fillHeight)d.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(c,d){a.Widget.prototype._setOption.apply(this,arguments);c=="active"&&this.activate(d);if(c=="icons"){this._destroyIcons();
+-d&&this._createIcons()}if(c=="disabled")this.headers.add(this.headers.next())[d?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(c){if(!(this.options.disabled||c.altKey||c.ctrlKey)){var d=a.ui.keyCode,e=this.headers.length,h=this.headers.index(c.target),g=false;switch(c.keyCode){case d.RIGHT:case d.DOWN:g=this.headers[(h+1)%e];break;case d.LEFT:case d.UP:g=this.headers[(h-1+e)%e];break;case d.SPACE:case d.ENTER:this._clickHandler({target:c.target},c.target);
+-c.preventDefault()}if(g){a(c.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var c=this.options,d;if(c.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){d-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,d-a(this).innerHeight()+
+-a(this).height()))}).css("overflow","auto")}else if(c.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).height("").height())}).height(d)}return this},activate:function(c){this.options.active=c;c=this._findActive(c)[0];this._clickHandler({target:c},c);return this},_findActive:function(c){return c?typeof c==="number"?this.headers.filter(":eq("+c+")"):this.headers.not(this.headers.not(c)):c===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(c,d){var e=this.options;
+-if(!e.disabled)if(c.target){c=a(c.currentTarget||d);d=c[0]===this.active[0];e.active=e.collapsible&&d?false:this.headers.index(c);if(!(this.running||!e.collapsible&&d)){var h=this.active;f=c.next();i=this.active.next();b={options:e,newHeader:d&&e.collapsible?a([]):c,oldHeader:this.active,newContent:d&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(c[0]);this.active=d?a([]):c;this._toggle(f,i,b,d,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);
+-if(!d){c.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);c.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(),
+-b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(c,d,e,h,g){var i=this,b=i.options;i.toShow=c;i.toHide=d;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=d.size()===0?c.size():d.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:d,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:c,toHide:d,complete:f,down:g,autoHeight:b.autoHeight||
+-b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)c.toggle();else{d.hide();c.show()}f(true)}d.prev().attr({"aria-expanded":"false",
+-"aria-selected":"false",tabIndex:-1}).blur();c.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(c){this.running=c?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.15",
+-animations:{slide:function(c,d){c=a.extend({easing:"swing",duration:300},c,d);if(c.toHide.size())if(c.toShow.size()){var e=c.toShow.css("overflow"),h=0,g={},i={},b;d=c.toShow;b=d[0].style.width;d.width(parseInt(d.parent().width(),10)-parseInt(d.css("paddingLeft"),10)-parseInt(d.css("paddingRight"),10)-(parseInt(d.css("borderLeftWidth"),10)||0)-(parseInt(d.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(c.toShow[0],j)).match(/^([\d+-.]+)(.*)$/);
+-g[j]={value:f[1],unit:f[2]||"px"}});c.toShow.css({height:0,overflow:"hidden"}).show();c.toHide.filter(":hidden").each(c.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);c.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:c.duration,easing:c.easing,complete:function(){c.autoHeight||c.toShow.css("height","");c.toShow.css({width:b,overflow:e});c.complete()}})}else c.toHide.animate({height:"hide",
+-paddingTop:"hide",paddingBottom:"hide"},c);else c.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},c)},bounceslide:function(c){this.slide(c,{easing:c.down?"easeOutBounce":"swing",duration:c.down?1E3:200})}}})})(jQuery);
+-(function(a){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var d=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(d.options.disabled||d.element.propAttr("readOnly"))){h=
+-false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:d._move("previousPage",g);break;case i.PAGE_DOWN:d._move("nextPage",g);break;case i.UP:d._move("previous",g);g.preventDefault();break;case i.DOWN:d._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(d.menu.active){h=true;g.preventDefault()}case i.TAB:if(!d.menu.active)return;d.menu.select(g);break;case i.ESCAPE:d.element.val(d.term);d.close(g);break;default:clearTimeout(d.searching);d.searching=setTimeout(function(){if(d.term!=
+-d.element.val()){d.selectedItem=null;d.search(null,g)}},d.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!d.options.disabled){d.selectedItem=null;d.previous=d.element.val()}}).bind("blur.autocomplete",function(g){if(!d.options.disabled){clearTimeout(d.searching);d.closing=setTimeout(function(){d.close(g);d._change(g)},150)}});this._initSource();this.response=function(){return d._response.apply(d,arguments)};
+-this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=d.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==d.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&d.close()})},1);setTimeout(function(){clearTimeout(d.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==d._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&&
+-d.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=d.previous;if(d.element[0]!==e.activeElement){d.element.focus();d.previous=f;setTimeout(function(){d.previous=f;d.selectedItem=b},1)}false!==d._trigger("select",g,{item:b})&&d.element.val(b.value);d.term=d.element.val();d.close(g);d.selectedItem=b},blur:function(){d.menu.element.is(":visible")&&d.element.val()!==d.term&&d.element.val(d.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+-a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(d,e){a.Widget.prototype._setOption.apply(this,arguments);d==="source"&&this._initSource();if(d==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);d==="disabled"&&
+-e&&this.xhr&&this.xhr.abort()},_initSource:function(){var d=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){d.xhr&&d.xhr.abort();d.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++c,success:function(b){this.autocompleteRequest===c&&i(b)},error:function(){this.autocompleteRequest===c&&i([])}})}}else this.source=
+-this.options.source},search:function(d,e){d=d!=null?d:this.element.val();this.term=this.element.val();if(d.length<this.options.minLength)return this.close(e);clearTimeout(this.closing);if(this._trigger("search",e)!==false)return this._search(d)},_search:function(d){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:d},this.response)},_response:function(d){if(!this.options.disabled&&d&&d.length){d=this._normalize(d);this._suggest(d);this._trigger("open")}else this.close();
+-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(d){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",d)}},_change:function(d){this.previous!==this.element.val()&&this._trigger("change",d,{item:this.selectedItem})},_normalize:function(d){if(d.length&&d[0].label&&d[0].value)return d;return a.map(d,function(e){if(typeof e==="string")return{label:e,value:e};return a.extend({label:e.label||
+-e.value,value:e.value||e.label},e)})},_suggest:function(d){var e=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(e,d);this.menu.deactivate();this.menu.refresh();e.show();this._resizeMenu();e.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var d=this.menu.element;d.outerWidth(Math.max(d.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(d,e){var h=this;
+-a.each(e,function(g,i){h._renderItem(d,i)})},_renderItem:function(d,e){return a("<li></li>").data("item.autocomplete",e).append(a("<a></a>").text(e.label)).appendTo(d)},_move:function(d,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(d)||this.menu.last()&&/^next/.test(d)){this.element.val(this.term);this.menu.deactivate()}else this.menu[d](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(d){return d.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+-"\\$&")},filter:function(d,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(d,function(g){return h.test(g.label||g.value||g)})}})})(jQuery);
+-(function(a){a.widget("ui.menu",{_create:function(){var c=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(d){if(a(d.target).closest(".ui-menu-item a").length){d.preventDefault();c.select(d)}});this.refresh()},refresh:function(){var c=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+--1).mouseenter(function(d){c.activate(d,a(this).parent())}).mouseleave(function(){c.deactivate()})},activate:function(c,d){this.deactivate();if(this.hasScroll()){var e=d.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+d.height())}this.active=d.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",c,{item:d})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+-this._trigger("blur");this.active=null}},next:function(c){this.move("next",".ui-menu-item:first",c)},previous:function(c){this.move("prev",".ui-menu-item:last",c)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(c,d,e){if(this.active){c=this.active[c+"All"](".ui-menu-item").eq(0);c.length?this.activate(e,c):this.activate(e,this.element.children(d))}else this.activate(e,
+-this.element.children(d))},nextPage:function(c){if(this.hasScroll())if(!this.active||this.last())this.activate(c,this.element.children(".ui-menu-item:first"));else{var d=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-d-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(c,h)}else this.activate(c,this.element.children(".ui-menu-item").filter(!this.active||
+-this.last()?":first":":last"))},previousPage:function(c){if(this.hasScroll())if(!this.active||this.first())this.activate(c,this.element.children(".ui-menu-item:last"));else{var d=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-d+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(c,result)}else this.activate(c,this.element.children(".ui-menu-item").filter(!this.active||
+-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(c){this._trigger("selected",c,{item:this.active})}})})(jQuery);
+-(function(a){var c,d,e,h,g=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var f=b.name,j=b.form,l=a([]);if(f)l=j?a(j).find("[name='"+f+"']"):a("[name='"+f+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",g);if(typeof this.options.disabled!==
+-"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,f=this.options,j=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(!j?" ui-state-active":"");if(f.label===null)f.label=this.buttonElement.html();if(this.element.is(":disabled"))f.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!f.disabled){a(this).addClass("ui-state-hover");
+-this===c&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){f.disabled||a(this).removeClass(l)}).bind("click.button",function(o){if(f.disabled){o.preventDefault();o.stopImmediatePropagation()}});this.element.bind("focus.button",function(){b.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){b.buttonElement.removeClass("ui-state-focus")});if(j){this.element.bind("change.button",function(){h||b.refresh()});this.buttonElement.bind("mousedown.button",function(o){if(!f.disabled){h=
+-false;d=o.pageX;e=o.pageY}}).bind("mouseup.button",function(o){if(!f.disabled)if(d!==o.pageX||e!==o.pageY)h=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed","true");
+-var o=b.element[0];i(o).not(o).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(f.disabled)return false;a(this).addClass("ui-state-active");c=this;a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(f.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(o){if(f.disabled)return false;if(o.keyCode==a.ui.keyCode.SPACE||
+-o.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(o){o.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",f.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
+-"radio"){var b=this.element.parents().filter(":last"),f="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(f);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(f);if(!this.buttonElement.length)this.buttonElement=b.find(f)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},
+-widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
+-a.Widget.prototype.destroy.call(this)},_setOption:function(b,f){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")f?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")i(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+-"true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+-f=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+j.primary+"'></span>");j.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+j.secondary+"'></span>");if(!this.options.text){o.push(l?"ui-button-icons-only":
+-"ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")===
+-"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
+-a.Widget.prototype.destroy.call(this)}})})(jQuery);
+-(function(a,c){function d(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function e(b){return b.bind("mouseout",
+-function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+-f.addClass("ui-state-hover");f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==c)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.15"}});var g=(new Date).getTime(),i;a.extend(d.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
+-setDefaults:function(b){h(this._defaults,b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,
+-"\\\\$1"),input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+-function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f);f.settings.disabled&&this._disableDatepicker(b)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a('<span class="'+this._appendClass+'">'+j+"</span>");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j==
+-"focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j=this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("<img/>").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('<button type="button"></button>').addClass(this._triggerClass).html(o==""?j:a("<img/>").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():
+-a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;m<o.length;m++)if(o[m].length>n){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b,
+-f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker",function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.settings.disabled&&this._disableDatepicker(b);f.dpDiv.css("display","block")}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+=
+-1;this._dialogInput=a('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
+-2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f=
+-a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=
+-b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b,
+-"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==
+-b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f<this._disabledInputs.length;f++)if(this._disabledInputs[f]==b)return true;return false},_getInst:function(b){try{return a.data(b,"datepicker")}catch(f){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(b,f,j){var l=this._getInst(b);if(arguments.length==2&&typeof f=="string")return f=="defaults"?a.extend({},a.datepicker._defaults):l?f=="all"?
+-a.extend({},l.settings):this._get(l,f):null;var o=f||{};if(typeof f=="string"){o={};o[f]=j}if(l){this._curInst==l&&this._hideDatepicker();var n=this._getDateDatepicker(b,true),k=this._getMinMaxDate(l,"min"),m=this._getMinMaxDate(l,"max");h(l.settings,o);if(k!==null&&o.dateFormat!==c&&o.minDate===c)l.settings.minDate=this._formatDate(l,k);if(m!==null&&o.dateFormat!==c&&o.maxDate===c)l.settings.maxDate=this._formatDate(l,m);this._attachments(a(b),l);this._autoSize(l);this._setDate(l,n);this._updateAlternate(l);
+-this._updateDatepicker(l)}},_changeDatepicker:function(b,f,j){this._optionDatepicker(b,f,j)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,f){if(b=this._getInst(b)){this._setDate(b,f);this._updateDatepicker(b);this._updateAlternate(b)}},_getDateDatepicker:function(b,f){(b=this._getInst(b))&&!b.inline&&this._setDateFromField(b,f);return b?this._getDate(b):null},_doKeyDown:function(b){var f=a.datepicker._getInst(b.target),j=true,l=f.dpDiv.is(".ui-datepicker-rtl");
+-f._keyEvent=true;if(a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker();j=false;break;case 13:j=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",f.dpDiv);j[0]&&a.datepicker._selectDay(b.target,f.selectedMonth,f.selectedYear,j[0]);if(b=a.datepicker._get(f,"onSelect")){j=a.datepicker._formatDate(f);b.apply(f.input?f.input[0]:null,[j,f])}else a.datepicker._hideDatepicker();return false;case 27:a.datepicker._hideDatepicker();break;case 33:a.datepicker._adjustDate(b.target,
+-b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 35:if(b.ctrlKey||b.metaKey)a.datepicker._clearDate(b.target);j=b.ctrlKey||b.metaKey;break;case 36:if(b.ctrlKey||b.metaKey)a.datepicker._gotoToday(b.target);j=b.ctrlKey||b.metaKey;break;case 37:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?+1:-1,"D");j=
+-b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 38:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,-7,"D");j=b.ctrlKey||b.metaKey;break;case 39:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?-1:+1,"D");j=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,
+-"stepMonths"),"M");break;case 40:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,+7,"D");j=b.ctrlKey||b.metaKey;break;default:j=false}else if(b.keyCode==36&&b.ctrlKey)a.datepicker._showDatepicker(this);else j=false;if(j){b.preventDefault();b.stopPropagation()}},_doKeyPress:function(b){var f=a.datepicker._getInst(b.target);if(a.datepicker._get(f,"constrainInput")){f=a.datepicker._possibleChars(a.datepicker._get(f,"dateFormat"));var j=String.fromCharCode(b.charCode==c?b.keyCode:b.charCode);
+-return b.ctrlKey||b.metaKey||j<" "||!f||f.indexOf(j)>-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input",
+-b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j=a.datepicker._get(f,"beforeShow");h(f.settings,j?j.apply(b,[b,f]):{});f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value="";if(!a.datepicker._pos){a.datepicker._pos=
+-a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f);j=a.datepicker._checkOffset(f,
+-j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover");if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=true;a.effects&&
+-a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});b.dpDiv.find("."+
+-this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&!b.input.is(":disabled")&&
+-b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]||j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(),n=b.input?b.input.outerWidth():
+-0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f=this._get(this._getInst(b),
+-"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f=this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f);this._curInst=
+-null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+-_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"):
+-0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth=f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l["selected"+(j=="M"?
+-"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b);
+-this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b);b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField");if(f){var j=this._get(b,
+-"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b));a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"?f.toString():f+"";if(f==
+-"")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1<b.length&&b.charAt(H+1)==z)&&H++;return z},v=function(z){var I=u(z);z=new RegExp("^\\d{1,"+
+-(z=="@"?14:z=="!"?20:z=="y"&&I?4:z=="o"?3:2)+"}");z=f.substring(y).match(z);if(!z)throw"Missing number at position "+y;y+=z[0].length;return parseInt(z[0],10)},w=function(z,I,N){z=a.map(u(z)?N:I,function(D,E){return[[E,D]]}).sort(function(D,E){return-(D[1].length-E[1].length)});var J=-1;a.each(z,function(D,E){D=E[1];if(f.substr(y,D.length).toLowerCase()==D.toLowerCase()){J=E[0];y+=D.length;return false}});if(J!=-1)return J+1;else throw"Unknown name at position "+y;},x=function(){if(f.charAt(y)!=b.charAt(H))throw"Unexpected literal at position "+
+-y;y++},y=0,H=0;H<b.length;H++)if(r)if(b.charAt(H)=="'"&&!u("'"))r=false;else x();else switch(b.charAt(H)){case "d":q=v("d");break;case "D":w("D",o,n);break;case "o":s=v("o");break;case "m":p=v("m");break;case "M":p=w("M",k,m);break;case "y":j=v("y");break;case "@":var C=new Date(v("@"));j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "!":C=new Date((v("!")-this._ticksTo1970)/1E4);j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "'":if(u("'"))x();else r=true;break;default:x()}if(y<
+-f.length)throw"Extra/unparsed characters found in date: "+f.substring(y);if(j==-1)j=(new Date).getFullYear();else if(j<100)j+=(new Date).getFullYear()-(new Date).getFullYear()%100+(j<=l?0:-100);if(s>-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",
+-RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames:null)||this._defaults.monthNames;var k=function(u){(u=r+1<b.length&&
+-b.charAt(r+1)==u)&&r++;return u},m=function(u,v,w){v=""+v;if(k(u))for(;v.length<w;)v="0"+v;return v},p=function(u,v,w,x){return k(u)?x[v]:w[v]},q="",s=false;if(f)for(var r=0;r<b.length;r++)if(s)if(b.charAt(r)=="'"&&!k("'"))s=false;else q+=b.charAt(r);else switch(b.charAt(r)){case "d":q+=m("d",f.getDate(),2);break;case "D":q+=p("D",f.getDay(),l,o);break;case "o":q+=m("o",Math.round(((new Date(f.getFullYear(),f.getMonth(),f.getDate())).getTime()-(new Date(f.getFullYear(),0,0)).getTime())/864E5),3);
+-break;case "m":q+=m("m",f.getMonth()+1,2);break;case "M":q+=p("M",f.getMonth(),n,j);break;case "y":q+=k("y")?f.getFullYear():(f.getYear()%100<10?"0":"")+f.getYear()%100;break;case "@":q+=f.getTime();break;case "!":q+=f.getTime()*1E4+this._ticksTo1970;break;case "'":if(k("'"))q+="'";else s=true;break;default:q+=b.charAt(r)}return q},_possibleChars:function(b){for(var f="",j=false,l=function(n){(n=o+1<b.length&&b.charAt(o+1)==n)&&o++;return n},o=0;o<b.length;o++)if(j)if(b.charAt(o)=="'"&&!l("'"))j=
+-false;else f+=b.charAt(o);else switch(b.charAt(o)){case "d":case "m":case "y":case "@":f+="0123456789";break;case "D":case "M":return null;case "'":if(l("'"))f+="'";else j=true;break;default:f+=b.charAt(o)}return f},_get:function(b,f){return b.settings[f]!==c?b.settings[f]:this._defaults[f]},_setDateFromField:function(b,f){if(b.input.val()!=b.lastVal){var j=this._get(b,"dateFormat"),l=b.lastVal=b.input?b.input.val():null,o,n;o=n=this._getDefaultDate(b);var k=this._getFormatConfig(b);try{o=this.parseDate(j,
+-l,k)||n}catch(m){this.log(m);l=f?"":l}b.selectedDay=o.getDate();b.drawMonth=b.selectedMonth=o.getMonth();b.drawYear=b.selectedYear=o.getFullYear();b.currentDay=l?o.getDate():0;b.currentMonth=l?o.getMonth():0;b.currentYear=l?o.getFullYear():0;this._adjustInstDate(b)}},_getDefaultDate:function(b){return this._restrictMinMax(b,this._determineDate(b,this._get(b,"defaultDate"),new Date))},_determineDate:function(b,f,j){var l=function(n){var k=new Date;k.setDate(k.getDate()+n);return k},o=function(n){try{return a.datepicker.parseDate(a.datepicker._get(b,
+-"dateFormat"),n,a.datepicker._getFormatConfig(b))}catch(k){}var m=(n.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,p=m.getFullYear(),q=m.getMonth();m=m.getDate();for(var s=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,r=s.exec(n);r;){switch(r[2]||"d"){case "d":case "D":m+=parseInt(r[1],10);break;case "w":case "W":m+=parseInt(r[1],10)*7;break;case "m":case "M":q+=parseInt(r[1],10);m=Math.min(m,a.datepicker._getDaysInMonth(p,q));break;case "y":case "Y":p+=parseInt(r[1],10);m=Math.min(m,
+-a.datepicker._getDaysInMonth(p,q));break}r=s.exec(n)}return new Date(p,q,m)};if(f=(f=f==null||f===""?j:typeof f=="string"?o(f):typeof f=="number"?isNaN(f)?j:l(f):new Date(f.getTime()))&&f.toString()=="Invalid Date"?j:f){f.setHours(0);f.setMinutes(0);f.setSeconds(0);f.setMilliseconds(0)}return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(b){if(!b)return null;b.setHours(b.getHours()>12?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;
+-f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay=b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b));if(j=this._get(b,"onSelect")){l=this._formatDate(b);j.apply(b.input?b.input[0]:null,[l,b])}},_getDate:function(b){return!b.currentYear||b.input&&b.input.val()==
+-""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(),f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay?new Date(9999,
+-9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&w<r?r:w;this._daylightSavingAdjust(new Date(v,m,1))>w;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b));
+-w=this._canAdjustMonth(b,-1,v,m)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', -"+p+", 'M');\" title=\""+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>":o?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v,
+-m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', +"+p+", 'M');\" title=\""+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>":o?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&&
+-b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+g+'.datepicker._hideDatepicker();">'+this._get(b,"closeText")+"</button>":"";l=l?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(j?n:"")+(this._isInRange(b,x)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+-g+".datepicker._gotoToday('#"+b.id+"');\">"+p+"</button>":"")+(j?"":n)+"</div>":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H=this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E<k[0];E++){var P=
+-"";this.maxRows=4;for(var L=0;L<k[1];L++){var Q=this._daylightSavingAdjust(new Date(v,m,b.selectedDay)),B=" ui-corner-all",F="";if(q){F+='<div class="ui-datepicker-group';if(k[1]>1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right":"left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+B+'">'+(/all|left/.test(B)&&
+-E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var G=p?'<th class="ui-datepicker-week-col">'+this._get(b,"weekHeader")+"</th>":"";for(B=0;B<7;B++){var A=(B+n)%7;G+="<th"+((B+n+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+x[A]+'">'+y[A]+"</span></th>"}F+=G+"</tr></thead><tbody>";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,
+-G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R<G;R++){F+="<tr>";var S=!p?"":'<td class="ui-datepicker-week-col">'+this._get(b,"calculateWeek")(A)+"</td>";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&A<r||u&&A>u;S+='<td class="'+((B+n+6)%7>=5?" ui-datepicker-week-end":"")+(K?" ui-datepicker-other-month":"")+(A.getTime()==
+-Q.getTime()&&m==b.selectedMonth&&b._keyEvent||J.getTime()==A.getTime()&&J.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(K&&!I?"":" "+M[1]+(A.getTime()==s.getTime()?" "+this._currentClass:"")+(A.getTime()==f.getTime()?" ui-datepicker-today":""))+'"'+((!K||I)&&M[2]?' title="'+M[2]+'"':"")+(O?"":' onclick="DP_jQuery_'+g+".datepicker._selectDay('#"+b.id+"',"+A.getMonth()+","+A.getFullYear()+', this);return false;"')+">"+(K&&!I?"&#xa0;":O?'<span class="ui-state-default">'+
+-A.getDate()+"</span>":'<a class="ui-state-default'+(A.getTime()==f.getTime()?" ui-state-highlight":"")+(A.getTime()==s.getTime()?" ui-state-active":"")+(K?" ui-priority-secondary":"")+'" href="#">'+A.getDate()+"</a>")+"</td>";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+"</tr>"}m++;if(m>11){m=0;v++}F+="</tbody></table>"+(q?"</div>"+(k[0]>0&&L==k[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+-"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='<div class="ui-datepicker-title">',u="";if(n||!p)u+='<span class="ui-datepicker-month">'+k[f]+"</span>";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'M');\" >";for(var w=0;w<12;w++)if((!k||w>=l.getMonth())&&
+-(!v||w<=o.getMonth()))u+='<option value="'+w+'"'+(w==f?' selected="selected"':"")+">"+m[w]+"</option>";u+="</select>"}s||(r+=u+(n||!(p&&q)?"&#xa0;":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+='<span class="ui-datepicker-year">'+j+"</span>";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f,
+-l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()):m;for(b.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'Y');\" >";f<=m;f++)b.yearshtml+='<option value="'+f+'"'+(f==j?' selected="selected"':"")+">"+f+"</option>";b.yearshtml+="</select>";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?"&#xa0;":"")+u;r+="</div>";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j=="Y"?f:0),o=b.drawMonth+
+-(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&f<j?j:f;return f=b&&f>b?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear");if(f)f.apply(b.input?
+-b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b);j=this._daylightSavingAdjust(new Date(j,
+-l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b,
+-"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this;
+-if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));return this.each(function(){typeof b==
+-"string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new d;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.15";window["DP_jQuery_"+g]=a})(jQuery);
+-(function(a,c){var d={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
+-position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||"&#160;",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
+-i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j),
+-o=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("<span></span>").addClass("ui-dialog-title").attr("id",
+-f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
+-g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!==
+-i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.scrollTop(),scrollLeft:b.element.scrollLeft()};a.ui.dialog.maxZ+=1;
+-b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target===
+-l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g,
+-function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('<button type="button"></button>').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
+-handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition,
+-originalSize:l.originalSize,position:l.position,size:l.size}}g=g===c?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize",
+-l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "):
+-[g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l);
+-if(j in d)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"):
+-f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||"&#160;"));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g=
+-this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height-
+-i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.15",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "),
+-create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return false})},1);a(document).bind("keydown.dialog-overlay",function(b){if(g.options.closeOnEscape&&b.keyCode&&b.keyCode===a.ui.keyCode.ESCAPE){g.close(b);b.preventDefault()}});a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize)}var i=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
+-height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&&a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
+-i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g<i?a(window).height()+"px":g+"px"}else return a(document).height()+"px"},width:function(){var g,i;if(a.browser.msie){g=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);i=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return g<i?a(window).width()+"px":g+"px"}else return a(document).width()+"px"},resize:function(){var g=a([]);a.each(a.ui.dialog.overlay.instances,function(){g=
+-g.add(this)});g.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}});a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+-(function(a){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e=a.fn.position,h=a.fn.offset;a.fn.position=function(g){if(!g||!g.of)return e.apply(this,arguments);g=a.extend({},g);var i=a(g.of),b=i[0],f=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],l,o,n;if(b.nodeType===9){l=i.width();o=i.height();n={top:0,left:0}}else if(b.setTimeout){l=i.width();o=i.height();n={top:i.scrollTop(),left:i.scrollLeft()}}else if(b.preventDefault){g.at="left top";l=o=0;n={top:g.of.pageY,
+-left:g.of.pageX}}else{l=i.outerWidth();o=i.outerHeight();n=i.offset()}a.each(["my","at"],function(){var k=(g[this]||"").split(" ");if(k.length===1)k=c.test(k[0])?k.concat(["center"]):d.test(k[0])?["center"].concat(k):["center","center"];k[0]=c.test(k[0])?k[0]:"center";k[1]=d.test(k[1])?k[1]:"center";g[this]=k});if(f.length===1)f[1]=f[0];j[0]=parseInt(j[0],10)||0;if(j.length===1)j[1]=j[0];j[1]=parseInt(j[1],10)||0;if(g.at[0]==="right")n.left+=l;else if(g.at[0]==="center")n.left+=l/2;if(g.at[1]==="bottom")n.top+=
+-o;else if(g.at[1]==="center")n.top+=o/2;n.left+=j[0];n.top+=j[1];return this.each(function(){var k=a(this),m=k.outerWidth(),p=k.outerHeight(),q=parseInt(a.curCSS(this,"marginLeft",true))||0,s=parseInt(a.curCSS(this,"marginTop",true))||0,r=m+q+(parseInt(a.curCSS(this,"marginRight",true))||0),u=p+s+(parseInt(a.curCSS(this,"marginBottom",true))||0),v=a.extend({},n),w;if(g.my[0]==="right")v.left-=m;else if(g.my[0]==="center")v.left-=m/2;if(g.my[1]==="bottom")v.top-=p;else if(g.my[1]==="center")v.top-=
+-p/2;v.left=Math.round(v.left);v.top=Math.round(v.top);w={left:v.left-q,top:v.top-s};a.each(["left","top"],function(x,y){a.ui.position[f[x]]&&a.ui.position[f[x]][y](v,{targetWidth:l,targetHeight:o,elemWidth:m,elemHeight:p,collisionPosition:w,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});a.fn.bgiframe&&k.bgiframe();k.offset(a.extend(v,{using:g.using}))})};a.ui.position={fit:{left:function(g,i){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();g.left=
+-b>0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+=
+-i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g),
+-f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery);
+-(function(a,c){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+-this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(d){if(d===c)return this._value();this._setOption("value",d);return this},_setOption:function(d,e){if(d==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var d=this.options.value;if(typeof d!=="number")d=0;return Math.min(this.options.max,Math.max(this.min,d))},_percentage:function(){return 100*
+-this._value()/this.options.max},_refreshValue:function(){var d=this.value(),e=this._percentage();if(this.oldValue!==d){this.oldValue=d;this._trigger("change")}this.valueDiv.toggle(d>this.min).toggleClass("ui-corner-right",d===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",d)}});a.extend(a.ui.progressbar,{version:"1.8.15"})})(jQuery);
+-(function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var c=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=d.values&&d.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(d.range){if(d.range===true){if(!d.values)d.values=[this._valueMin(),this._valueMin()];if(d.values.length&&d.values.length!==2)d.values=[d.values[0],d.values[0]]}this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:""))}for(var i=e.length;i<h;i+=1)g.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+-this.handles=e.add(a(g.join("")).appendTo(c.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(d.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle",
+-b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!c.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!c._keySliding){c._keySliding=true;a(this).addClass("ui-state-active");l=c._start(b,j);if(l===false)return}break}n=c.options.step;l=c.options.values&&c.options.values.length?
+-(o=c.values(j)):(o=c.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=c._valueMin();break;case a.ui.keyCode.END:o=c._valueMax();break;case a.ui.keyCode.PAGE_UP:o=c._trimAlignValue(l+(c._valueMax()-c._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=c._trimAlignValue(l-(c._valueMax()-c._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===c._valueMax())return;o=c._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===c._valueMin())return;o=c._trimAlignValue(l-
+-n);break}c._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(c._keySliding){c._keySliding=false;c._stop(b,f);c._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+-return this},_mouseCapture:function(c){var d=this.options,e,h,g,i,b;if(d.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:c.pageX,y:c.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(d.range===true&&this.values(1)===d.min){b+=1;g=a(this.handles[b])}if(this._start(c,b)===false)return false;
+-this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();d=g.offset();this._clickOffset=!a(c.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:c.pageX-d.left-g.width()/2,top:c.pageY-d.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(c,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(c){var d=
+-this._normValueFromMouse({x:c.pageX,y:c.pageY});this._slide(c,this._handleIndex,d);return false},_mouseStop:function(c){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(c,this._handleIndex);this._change(c,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(c){var d;if(this.orientation==="horizontal"){d=
+-this.elementSize.width;c=c.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;c=c.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}d=c/d;if(d>1)d=1;if(d<0)d=0;if(this.orientation==="vertical")d=1-d;c=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+d*c)},_start:function(c,d){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);
+-e.values=this.values()}return this._trigger("start",c,e)},_slide:function(c,d,e){var h;if(this.options.values&&this.options.values.length){h=this.values(d?0:1);if(this.options.values.length===2&&this.options.range===true&&(d===0&&e>h||d===1&&e<h))e=h;if(e!==this.values(d)){h=this.values();h[d]=e;c=this._trigger("slide",c,{handle:this.handles[d],value:e,values:h});this.values(d?0:1);c!==false&&this.values(d,e,true)}}else if(e!==this.value()){c=this._trigger("slide",c,{handle:this.handles[d],value:e});
+-c!==false&&this.value(e)}},_stop:function(c,d){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);e.values=this.values()}this._trigger("stop",c,e)},_change:function(c,d){if(!this._keySliding&&!this._mouseSliding){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);e.values=this.values()}this._trigger("change",c,e)}},value:function(c){if(arguments.length){this.options.value=
+-this._trimAlignValue(c);this._refreshValue();this._change(null,0)}else return this._value()},values:function(c,d){var e,h,g;if(arguments.length>1){this.options.values[c]=this._trimAlignValue(d);this._refreshValue();this._change(null,c)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g<e.length;g+=1){e[g]=this._trimAlignValue(h[g]);this._change(null,g)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(c):
+-this.value();else return this._values()},_setOption:function(c,d){var e,h=0;if(a.isArray(this.options.values))h=this.options.values.length;a.Widget.prototype._setOption.apply(this,arguments);switch(c){case "disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(e=0;e<h;e+=1)this._change(null,e);this._animateOff=false;break}},_value:function(){var c=this.options.value;return c=this._trimAlignValue(c)},_values:function(c){var d,e;if(arguments.length){d=this.options.values[c];
+-return d=this._trimAlignValue(d)}else{d=this.options.values.slice();for(e=0;e<d.length;e+=1)d[e]=this._trimAlignValue(d[e]);return d}},_trimAlignValue:function(c){if(c<=this._valueMin())return this._valueMin();if(c>=this._valueMax())return this._valueMax();var d=this.options.step>0?this.options.step:1,e=(c-this._valueMin())%d;c=c-e;if(Math.abs(e)*2>=d)c+=e>0?d:-d;return parseFloat(c.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var c=
+-this.options.range,d=this.options,e=this,h=!this._animateOff?d.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,d.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},d.animate);if(o===1)e.range[h?"animate":"css"]({width:g-
+-b+"%"},{queue:false,duration:d.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},d.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:d.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,d.animate);if(c==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[h?"animate":"css"]({width:g+"%"},
+-d.animate);if(c==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:d.animate});if(c==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},d.animate);if(c==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:d.animate})}}});a.extend(a.ui.slider,{version:"1.8.15"})})(jQuery);
+-(function(a,c){function d(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&&
+-b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+d()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i=
+-a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]||
+-(x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===c){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected=
+-this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+-if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+-this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+
+-r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal",
+-function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")};
+-this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected=
+--1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+-a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b=
+-a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i,
+-b,f){if(f===c)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]);
+-o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove();
+-if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1<this.anchors.length?1:-1));b.disabled=a.map(a.grep(b.disabled,function(l){return l!=i}),function(l){return l>=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null,
+-this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this},
+-load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j,
+-"cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+-url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.15"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n<f.anchors.length?n:0)},i);o&&o.stopPropagation()});b=f._unrotate||(f._unrotate=!b?function(o){o.clientX&&
+-f.rotate(null)}:function(){t=j.selected;l()});if(i){this.element.bind("tabsshow",l);this.anchors.bind(j.event+".tabs",b);l()}else{clearTimeout(f.rotation);this.element.unbind("tabsshow",l);this.anchors.unbind(j.event+".tabs",b);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.css	(revision 15488)
+@@ -1,196 +0,0 @@
+-/** Font Family and Sizes */
+-
+-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+-	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
+-}
+-
+-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+-#qunit-tests { font-size: smaller; }
+-
+-
+-/** Resets */
+-
+-#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
+-	margin: 0;
+-	padding: 0;
+-}
+-
+-
+-/** Header */
+-
+-#qunit-header {
+-	padding: 0.5em 0 0.5em 1em;
+-
+-	color: #8699a4;
+-	background-color: #0d3349;
+-
+-	font-size: 1.5em;
+-	line-height: 1em;
+-	font-weight: normal;
+-	
+-	border-radius: 15px 15px 0 0;
+-	-moz-border-radius: 15px 15px 0 0;
+-	-webkit-border-top-right-radius: 15px;
+-	-webkit-border-top-left-radius: 15px;
+-}
+-
+-#qunit-header a {
+-	text-decoration: none;
+-	color: #c2ccd1;
+-}
+-
+-#qunit-header a:hover,
+-#qunit-header a:focus {
+-	color: #fff;
+-}
+-
+-#qunit-banner {
+-	height: 5px;
+-}
+-
+-#qunit-testrunner-toolbar {
+-	padding: 0em 0 0.5em 2em;
+-}
+-
+-#qunit-userAgent {
+-	padding: 0.5em 0 0.5em 2.5em;
+-	background-color: #2b81af;
+-	color: #fff;
+-	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+-}
+-
+-
+-/** Tests: Pass/Fail */
+-
+-#qunit-tests {
+-	list-style-position: inside;
+-}
+-
+-#qunit-tests li {
+-	padding: 0.4em 0.5em 0.4em 2.5em;
+-	border-bottom: 1px solid #fff;
+-	list-style-position: inside;
+-}
+-
+-#qunit-tests li strong {
+-	cursor: pointer;
+-}
+-
+-#qunit-tests ol {
+-	margin-top: 0.5em;
+-	padding: 0.5em;
+-	
+-	background-color: #fff;
+-	
+-	border-radius: 15px;
+-	-moz-border-radius: 15px;
+-	-webkit-border-radius: 15px;
+-	
+-	box-shadow: inset 0px 2px 13px #999;
+-	-moz-box-shadow: inset 0px 2px 13px #999;
+-	-webkit-box-shadow: inset 0px 2px 13px #999;
+-}
+-
+-#qunit-tests table {
+-	border-collapse: collapse;
+-	margin-top: .2em;
+-}
+-
+-#qunit-tests th {
+-	text-align: right;
+-	vertical-align: top;
+-	padding: 0 .5em 0 0;
+-}
+-
+-#qunit-tests td {
+-	vertical-align: top;
+-}
+-
+-#qunit-tests pre {
+-	margin: 0;
+-	white-space: pre-wrap;
+-	word-wrap: break-word;
+-}
+-
+-#qunit-tests del {
+-	background-color: #e0f2be;
+-	color: #374e0c;
+-	text-decoration: none;
+-}
+-
+-#qunit-tests ins {
+-	background-color: #ffcaca;
+-	color: #500;
+-	text-decoration: none;
+-}
+-
+-/*** Test Counts */
+-
+-#qunit-tests b.counts                       { color: black; }
+-#qunit-tests b.passed                       { color: #5E740B; }
+-#qunit-tests b.failed                       { color: #710909; }
+-
+-#qunit-tests li li {
+-	margin: 0.5em;
+-	padding: 0.4em 0.5em 0.4em 0.5em;
+-	background-color: #fff;
+-	border-bottom: none;
+-	list-style-position: inside;
+-}
+-
+-/*** Passing Styles */
+-
+-#qunit-tests li li.pass {
+-	color: #5E740B;
+-	background-color: #fff;
+-	border-left: 26px solid #C6E746;
+-}
+-
+-#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
+-#qunit-tests .pass .test-name               { color: #366097; }
+- 
+-#qunit-tests .pass .test-actual,
+-#qunit-tests .pass .test-expected           { color: #999999; }
+-
+-#qunit-banner.qunit-pass                    { background-color: #C6E746; }
+-
+-/*** Failing Styles */
+-
+-#qunit-tests li li.fail {
+-	color: #710909;
+-	background-color: #fff;
+-	border-left: 26px solid #EE5757;
+-}
+-
+-#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
+-#qunit-tests .fail .test-name,
+-#qunit-tests .fail .module-name             { color: #000000; }
+-
+-#qunit-tests .fail .test-actual             { color: #EE5757; }
+-#qunit-tests .fail .test-expected           { color: green;   }
+-
+-#qunit-banner.qunit-fail, 
+-#qunit-testrunner-toolbar                   { background-color: #EE5757; }
+-
+-
+-/** Footer */
+-
+-#qunit-testresult {
+-	padding: 0.5em 0.5em 0.5em 2.5em;
+-
+-	color: #2b81af;
+-	background-color: #D2E0E6;
+-
+-	border-radius: 0 0 15px 15px;
+-	-moz-border-radius: 0 0 15px 15px;
+-	-webkit-border-bottom-right-radius: 15px;
+-	-webkit-border-bottom-left-radius: 15px;
+-}
+-
+-/** Fixture */
+-
+-#qunit-fixture {
+-	position: absolute;
+-	top: -10000px;
+-	left: -10000px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.js	(revision 15488)
+@@ -1,8981 +0,0 @@
+-/*!
+- * jQuery JavaScript Library v1.6.2
+- * http://jquery.com/
+- *
+- * Copyright 2011, John Resig
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * Includes Sizzle.js
+- * http://sizzlejs.com/
+- * Copyright 2011, The Dojo Foundation
+- * Released under the MIT, BSD, and GPL Licenses.
+- *
+- * Date: Thu Jun 30 14:16:56 2011 -0400
+- */
+-(function( window, undefined ) {
+-
+-// Use the correct document accordingly with window argument (sandbox)
+-var document = window.document,
+-	navigator = window.navigator,
+-	location = window.location;
+-var jQuery = (function() {
+-
+-// Define a local copy of jQuery
+-var jQuery = function( selector, context ) {
+-		// The jQuery object is actually just the init constructor 'enhanced'
+-		return new jQuery.fn.init( selector, context, rootjQuery );
+-	},
+-
+-	// Map over jQuery in case of overwrite
+-	_jQuery = window.jQuery,
+-
+-	// Map over the $ in case of overwrite
+-	_$ = window.$,
+-
+-	// A central reference to the root jQuery(document)
+-	rootjQuery,
+-
+-	// A simple way to check for HTML strings or ID strings
+-	// (both of which we optimize for)
+-	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+-
+-	// Check if a string has a non-whitespace character in it
+-	rnotwhite = /\S/,
+-
+-	// Used for trimming whitespace
+-	trimLeft = /^\s+/,
+-	trimRight = /\s+$/,
+-
+-	// Check for digits
+-	rdigit = /\d/,
+-
+-	// Match a standalone tag
+-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+-
+-	// JSON RegExp
+-	rvalidchars = /^[\],:{}\s]*$/,
+-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+-
+-	// Useragent RegExp
+-	rwebkit = /(webkit)[ \/]([\w.]+)/,
+-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+-	rmsie = /(msie) ([\w.]+)/,
+-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+-
+-	// Matches dashed string for camelizing
+-	rdashAlpha = /-([a-z])/ig,
+-
+-	// Used by jQuery.camelCase as callback to replace()
+-	fcamelCase = function( all, letter ) {
+-		return letter.toUpperCase();
+-	},
+-
+-	// Keep a UserAgent string for use with jQuery.browser
+-	userAgent = navigator.userAgent,
+-
+-	// For matching the engine and version of the browser
+-	browserMatch,
+-
+-	// The deferred used on DOM ready
+-	readyList,
+-
+-	// The ready event handler
+-	DOMContentLoaded,
+-
+-	// Save a reference to some core methods
+-	toString = Object.prototype.toString,
+-	hasOwn = Object.prototype.hasOwnProperty,
+-	push = Array.prototype.push,
+-	slice = Array.prototype.slice,
+-	trim = String.prototype.trim,
+-	indexOf = Array.prototype.indexOf,
+-
+-	// [[Class]] -> type pairs
+-	class2type = {};
+-
+-jQuery.fn = jQuery.prototype = {
+-	constructor: jQuery,
+-	init: function( selector, context, rootjQuery ) {
+-		var match, elem, ret, doc;
+-
+-		// Handle $(""), $(null), or $(undefined)
+-		if ( !selector ) {
+-			return this;
+-		}
+-
+-		// Handle $(DOMElement)
+-		if ( selector.nodeType ) {
+-			this.context = this[0] = selector;
+-			this.length = 1;
+-			return this;
+-		}
+-
+-		// The body element only exists once, optimize finding it
+-		if ( selector === "body" && !context && document.body ) {
+-			this.context = document;
+-			this[0] = document.body;
+-			this.selector = selector;
+-			this.length = 1;
+-			return this;
+-		}
+-
+-		// Handle HTML strings
+-		if ( typeof selector === "string" ) {
+-			// Are we dealing with HTML string or an ID?
+-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+-				// Assume that strings that start and end with <> are HTML and skip the regex check
+-				match = [ null, selector, null ];
+-
+-			} else {
+-				match = quickExpr.exec( selector );
+-			}
+-
+-			// Verify a match, and that no context was specified for #id
+-			if ( match && (match[1] || !context) ) {
+-
+-				// HANDLE: $(html) -> $(array)
+-				if ( match[1] ) {
+-					context = context instanceof jQuery ? context[0] : context;
+-					doc = (context ? context.ownerDocument || context : document);
+-
+-					// If a single string is passed in and it's a single tag
+-					// just do a createElement and skip the rest
+-					ret = rsingleTag.exec( selector );
+-
+-					if ( ret ) {
+-						if ( jQuery.isPlainObject( context ) ) {
+-							selector = [ document.createElement( ret[1] ) ];
+-							jQuery.fn.attr.call( selector, context, true );
+-
+-						} else {
+-							selector = [ doc.createElement( ret[1] ) ];
+-						}
+-
+-					} else {
+-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+-						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
+-					}
+-
+-					return jQuery.merge( this, selector );
+-
+-				// HANDLE: $("#id")
+-				} else {
+-					elem = document.getElementById( match[2] );
+-
+-					// Check parentNode to catch when Blackberry 4.6 returns
+-					// nodes that are no longer in the document #6963
+-					if ( elem && elem.parentNode ) {
+-						// Handle the case where IE and Opera return items
+-						// by name instead of ID
+-						if ( elem.id !== match[2] ) {
+-							return rootjQuery.find( selector );
+-						}
+-
+-						// Otherwise, we inject the element directly into the jQuery object
+-						this.length = 1;
+-						this[0] = elem;
+-					}
+-
+-					this.context = document;
+-					this.selector = selector;
+-					return this;
+-				}
+-
+-			// HANDLE: $(expr, $(...))
+-			} else if ( !context || context.jquery ) {
+-				return (context || rootjQuery).find( selector );
+-
+-			// HANDLE: $(expr, context)
+-			// (which is just equivalent to: $(context).find(expr)
+-			} else {
+-				return this.constructor( context ).find( selector );
+-			}
+-
+-		// HANDLE: $(function)
+-		// Shortcut for document ready
+-		} else if ( jQuery.isFunction( selector ) ) {
+-			return rootjQuery.ready( selector );
+-		}
+-
+-		if (selector.selector !== undefined) {
+-			this.selector = selector.selector;
+-			this.context = selector.context;
+-		}
+-
+-		return jQuery.makeArray( selector, this );
+-	},
+-
+-	// Start with an empty selector
+-	selector: "",
+-
+-	// The current version of jQuery being used
+-	jquery: "1.6.2",
+-
+-	// The default length of a jQuery object is 0
+-	length: 0,
+-
+-	// The number of elements contained in the matched element set
+-	size: function() {
+-		return this.length;
+-	},
+-
+-	toArray: function() {
+-		return slice.call( this, 0 );
+-	},
+-
+-	// Get the Nth element in the matched element set OR
+-	// Get the whole matched element set as a clean array
+-	get: function( num ) {
+-		return num == null ?
+-
+-			// Return a 'clean' array
+-			this.toArray() :
+-
+-			// Return just the object
+-			( num < 0 ? this[ this.length + num ] : this[ num ] );
+-	},
+-
+-	// Take an array of elements and push it onto the stack
+-	// (returning the new matched element set)
+-	pushStack: function( elems, name, selector ) {
+-		// Build a new jQuery matched element set
+-		var ret = this.constructor();
+-
+-		if ( jQuery.isArray( elems ) ) {
+-			push.apply( ret, elems );
+-
+-		} else {
+-			jQuery.merge( ret, elems );
+-		}
+-
+-		// Add the old object onto the stack (as a reference)
+-		ret.prevObject = this;
+-
+-		ret.context = this.context;
+-
+-		if ( name === "find" ) {
+-			ret.selector = this.selector + (this.selector ? " " : "") + selector;
+-		} else if ( name ) {
+-			ret.selector = this.selector + "." + name + "(" + selector + ")";
+-		}
+-
+-		// Return the newly-formed element set
+-		return ret;
+-	},
+-
+-	// Execute a callback for every element in the matched set.
+-	// (You can seed the arguments with an array of args, but this is
+-	// only used internally.)
+-	each: function( callback, args ) {
+-		return jQuery.each( this, callback, args );
+-	},
+-
+-	ready: function( fn ) {
+-		// Attach the listeners
+-		jQuery.bindReady();
+-
+-		// Add the callback
+-		readyList.done( fn );
+-
+-		return this;
+-	},
+-
+-	eq: function( i ) {
+-		return i === -1 ?
+-			this.slice( i ) :
+-			this.slice( i, +i + 1 );
+-	},
+-
+-	first: function() {
+-		return this.eq( 0 );
+-	},
+-
+-	last: function() {
+-		return this.eq( -1 );
+-	},
+-
+-	slice: function() {
+-		return this.pushStack( slice.apply( this, arguments ),
+-			"slice", slice.call(arguments).join(",") );
+-	},
+-
+-	map: function( callback ) {
+-		return this.pushStack( jQuery.map(this, function( elem, i ) {
+-			return callback.call( elem, i, elem );
+-		}));
+-	},
+-
+-	end: function() {
+-		return this.prevObject || this.constructor(null);
+-	},
+-
+-	// For internal use only.
+-	// Behaves like an Array's method, not like a jQuery method.
+-	push: push,
+-	sort: [].sort,
+-	splice: [].splice
+-};
+-
+-// Give the init function the jQuery prototype for later instantiation
+-jQuery.fn.init.prototype = jQuery.fn;
+-
+-jQuery.extend = jQuery.fn.extend = function() {
+-	var options, name, src, copy, copyIsArray, clone,
+-		target = arguments[0] || {},
+-		i = 1,
+-		length = arguments.length,
+-		deep = false;
+-
+-	// Handle a deep copy situation
+-	if ( typeof target === "boolean" ) {
+-		deep = target;
+-		target = arguments[1] || {};
+-		// skip the boolean and the target
+-		i = 2;
+-	}
+-
+-	// Handle case when target is a string or something (possible in deep copy)
+-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+-		target = {};
+-	}
+-
+-	// extend jQuery itself if only one argument is passed
+-	if ( length === i ) {
+-		target = this;
+-		--i;
+-	}
+-
+-	for ( ; i < length; i++ ) {
+-		// Only deal with non-null/undefined values
+-		if ( (options = arguments[ i ]) != null ) {
+-			// Extend the base object
+-			for ( name in options ) {
+-				src = target[ name ];
+-				copy = options[ name ];
+-
+-				// Prevent never-ending loop
+-				if ( target === copy ) {
+-					continue;
+-				}
+-
+-				// Recurse if we're merging plain objects or arrays
+-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+-					if ( copyIsArray ) {
+-						copyIsArray = false;
+-						clone = src && jQuery.isArray(src) ? src : [];
+-
+-					} else {
+-						clone = src && jQuery.isPlainObject(src) ? src : {};
+-					}
+-
+-					// Never move original objects, clone them
+-					target[ name ] = jQuery.extend( deep, clone, copy );
+-
+-				// Don't bring in undefined values
+-				} else if ( copy !== undefined ) {
+-					target[ name ] = copy;
+-				}
+-			}
+-		}
+-	}
+-
+-	// Return the modified object
+-	return target;
+-};
+-
+-jQuery.extend({
+-	noConflict: function( deep ) {
+-		if ( window.$ === jQuery ) {
+-			window.$ = _$;
+-		}
+-
+-		if ( deep && window.jQuery === jQuery ) {
+-			window.jQuery = _jQuery;
+-		}
+-
+-		return jQuery;
+-	},
+-
+-	// Is the DOM ready to be used? Set to true once it occurs.
+-	isReady: false,
+-
+-	// A counter to track how many items to wait for before
+-	// the ready event fires. See #6781
+-	readyWait: 1,
+-
+-	// Hold (or release) the ready event
+-	holdReady: function( hold ) {
+-		if ( hold ) {
+-			jQuery.readyWait++;
+-		} else {
+-			jQuery.ready( true );
+-		}
+-	},
+-
+-	// Handle when the DOM is ready
+-	ready: function( wait ) {
+-		// Either a released hold or an DOMready/load event and not yet ready
+-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+-			if ( !document.body ) {
+-				return setTimeout( jQuery.ready, 1 );
+-			}
+-
+-			// Remember that the DOM is ready
+-			jQuery.isReady = true;
+-
+-			// If a normal DOM Ready event fired, decrement, and wait if need be
+-			if ( wait !== true && --jQuery.readyWait > 0 ) {
+-				return;
+-			}
+-
+-			// If there are functions bound, to execute
+-			readyList.resolveWith( document, [ jQuery ] );
+-
+-			// Trigger any bound ready events
+-			if ( jQuery.fn.trigger ) {
+-				jQuery( document ).trigger( "ready" ).unbind( "ready" );
+-			}
+-		}
+-	},
+-
+-	bindReady: function() {
+-		if ( readyList ) {
+-			return;
+-		}
+-
+-		readyList = jQuery._Deferred();
+-
+-		// Catch cases where $(document).ready() is called after the
+-		// browser event has already occurred.
+-		if ( document.readyState === "complete" ) {
+-			// Handle it asynchronously to allow scripts the opportunity to delay ready
+-			return setTimeout( jQuery.ready, 1 );
+-		}
+-
+-		// Mozilla, Opera and webkit nightlies currently support this event
+-		if ( document.addEventListener ) {
+-			// Use the handy event callback
+-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+-
+-			// A fallback to window.onload, that will always work
+-			window.addEventListener( "load", jQuery.ready, false );
+-
+-		// If IE event model is used
+-		} else if ( document.attachEvent ) {
+-			// ensure firing before onload,
+-			// maybe late but safe also for iframes
+-			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+-
+-			// A fallback to window.onload, that will always work
+-			window.attachEvent( "onload", jQuery.ready );
+-
+-			// If IE and not a frame
+-			// continually check to see if the document is ready
+-			var toplevel = false;
+-
+-			try {
+-				toplevel = window.frameElement == null;
+-			} catch(e) {}
+-
+-			if ( document.documentElement.doScroll && toplevel ) {
+-				doScrollCheck();
+-			}
+-		}
+-	},
+-
+-	// See test/unit/core.js for details concerning isFunction.
+-	// Since version 1.3, DOM methods and functions like alert
+-	// aren't supported. They return false on IE (#2968).
+-	isFunction: function( obj ) {
+-		return jQuery.type(obj) === "function";
+-	},
+-
+-	isArray: Array.isArray || function( obj ) {
+-		return jQuery.type(obj) === "array";
+-	},
+-
+-	// A crude way of determining if an object is a window
+-	isWindow: function( obj ) {
+-		return obj && typeof obj === "object" && "setInterval" in obj;
+-	},
+-
+-	isNaN: function( obj ) {
+-		return obj == null || !rdigit.test( obj ) || isNaN( obj );
+-	},
+-
+-	type: function( obj ) {
+-		return obj == null ?
+-			String( obj ) :
+-			class2type[ toString.call(obj) ] || "object";
+-	},
+-
+-	isPlainObject: function( obj ) {
+-		// Must be an Object.
+-		// Because of IE, we also have to check the presence of the constructor property.
+-		// Make sure that DOM nodes and window objects don't pass through, as well
+-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+-			return false;
+-		}
+-
+-		// Not own constructor property must be Object
+-		if ( obj.constructor &&
+-			!hasOwn.call(obj, "constructor") &&
+-			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+-			return false;
+-		}
+-
+-		// Own properties are enumerated firstly, so to speed up,
+-		// if last one is own, then all properties are own.
+-
+-		var key;
+-		for ( key in obj ) {}
+-
+-		return key === undefined || hasOwn.call( obj, key );
+-	},
+-
+-	isEmptyObject: function( obj ) {
+-		for ( var name in obj ) {
+-			return false;
+-		}
+-		return true;
+-	},
+-
+-	error: function( msg ) {
+-		throw msg;
+-	},
+-
+-	parseJSON: function( data ) {
+-		if ( typeof data !== "string" || !data ) {
+-			return null;
+-		}
+-
+-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+-		data = jQuery.trim( data );
+-
+-		// Attempt to parse using the native JSON parser first
+-		if ( window.JSON && window.JSON.parse ) {
+-			return window.JSON.parse( data );
+-		}
+-
+-		// Make sure the incoming data is actual JSON
+-		// Logic borrowed from http://json.org/json2.js
+-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+-			.replace( rvalidtokens, "]" )
+-			.replace( rvalidbraces, "")) ) {
+-
+-			return (new Function( "return " + data ))();
+-
+-		}
+-		jQuery.error( "Invalid JSON: " + data );
+-	},
+-
+-	// Cross-browser xml parsing
+-	// (xml & tmp used internally)
+-	parseXML: function( data , xml , tmp ) {
+-
+-		if ( window.DOMParser ) { // Standard
+-			tmp = new DOMParser();
+-			xml = tmp.parseFromString( data , "text/xml" );
+-		} else { // IE
+-			xml = new ActiveXObject( "Microsoft.XMLDOM" );
+-			xml.async = "false";
+-			xml.loadXML( data );
+-		}
+-
+-		tmp = xml.documentElement;
+-
+-		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+-			jQuery.error( "Invalid XML: " + data );
+-		}
+-
+-		return xml;
+-	},
+-
+-	noop: function() {},
+-
+-	// Evaluates a script in a global context
+-	// Workarounds based on findings by Jim Driscoll
+-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+-	globalEval: function( data ) {
+-		if ( data && rnotwhite.test( data ) ) {
+-			// We use execScript on Internet Explorer
+-			// We use an anonymous function so that context is window
+-			// rather than jQuery in Firefox
+-			( window.execScript || function( data ) {
+-				window[ "eval" ].call( window, data );
+-			} )( data );
+-		}
+-	},
+-
+-	// Converts a dashed string to camelCased string;
+-	// Used by both the css and data modules
+-	camelCase: function( string ) {
+-		return string.replace( rdashAlpha, fcamelCase );
+-	},
+-
+-	nodeName: function( elem, name ) {
+-		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+-	},
+-
+-	// args is for internal usage only
+-	each: function( object, callback, args ) {
+-		var name, i = 0,
+-			length = object.length,
+-			isObj = length === undefined || jQuery.isFunction( object );
+-
+-		if ( args ) {
+-			if ( isObj ) {
+-				for ( name in object ) {
+-					if ( callback.apply( object[ name ], args ) === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( ; i < length; ) {
+-					if ( callback.apply( object[ i++ ], args ) === false ) {
+-						break;
+-					}
+-				}
+-			}
+-
+-		// A special, fast, case for the most common use of each
+-		} else {
+-			if ( isObj ) {
+-				for ( name in object ) {
+-					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( ; i < length; ) {
+-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+-						break;
+-					}
+-				}
+-			}
+-		}
+-
+-		return object;
+-	},
+-
+-	// Use native String.trim function wherever possible
+-	trim: trim ?
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				trim.call( text );
+-		} :
+-
+-		// Otherwise use our own trimming functionality
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+-		},
+-
+-	// results is for internal usage only
+-	makeArray: function( array, results ) {
+-		var ret = results || [];
+-
+-		if ( array != null ) {
+-			// The window, strings (and functions) also have 'length'
+-			// The extra typeof function check is to prevent crashes
+-			// in Safari 2 (See: #3039)
+-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+-			var type = jQuery.type( array );
+-
+-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+-				push.call( ret, array );
+-			} else {
+-				jQuery.merge( ret, array );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	inArray: function( elem, array ) {
+-
+-		if ( indexOf ) {
+-			return indexOf.call( array, elem );
+-		}
+-
+-		for ( var i = 0, length = array.length; i < length; i++ ) {
+-			if ( array[ i ] === elem ) {
+-				return i;
+-			}
+-		}
+-
+-		return -1;
+-	},
+-
+-	merge: function( first, second ) {
+-		var i = first.length,
+-			j = 0;
+-
+-		if ( typeof second.length === "number" ) {
+-			for ( var l = second.length; j < l; j++ ) {
+-				first[ i++ ] = second[ j ];
+-			}
+-
+-		} else {
+-			while ( second[j] !== undefined ) {
+-				first[ i++ ] = second[ j++ ];
+-			}
+-		}
+-
+-		first.length = i;
+-
+-		return first;
+-	},
+-
+-	grep: function( elems, callback, inv ) {
+-		var ret = [], retVal;
+-		inv = !!inv;
+-
+-		// Go through the array, only saving the items
+-		// that pass the validator function
+-		for ( var i = 0, length = elems.length; i < length; i++ ) {
+-			retVal = !!callback( elems[ i ], i );
+-			if ( inv !== retVal ) {
+-				ret.push( elems[ i ] );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	// arg is for internal usage only
+-	map: function( elems, callback, arg ) {
+-		var value, key, ret = [],
+-			i = 0,
+-			length = elems.length,
+-			// jquery objects are treated as arrays
+-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+-
+-		// Go through the array, translating each of the items to their
+-		if ( isArray ) {
+-			for ( ; i < length; i++ ) {
+-				value = callback( elems[ i ], i, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-
+-		// Go through every key on the object,
+-		} else {
+-			for ( key in elems ) {
+-				value = callback( elems[ key ], key, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-		}
+-
+-		// Flatten any nested arrays
+-		return ret.concat.apply( [], ret );
+-	},
+-
+-	// A global GUID counter for objects
+-	guid: 1,
+-
+-	// Bind a function to a context, optionally partially applying any
+-	// arguments.
+-	proxy: function( fn, context ) {
+-		if ( typeof context === "string" ) {
+-			var tmp = fn[ context ];
+-			context = fn;
+-			fn = tmp;
+-		}
+-
+-		// Quick check to determine if target is callable, in the spec
+-		// this throws a TypeError, but we will just return undefined.
+-		if ( !jQuery.isFunction( fn ) ) {
+-			return undefined;
+-		}
+-
+-		// Simulated bind
+-		var args = slice.call( arguments, 2 ),
+-			proxy = function() {
+-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
+-			};
+-
+-		// Set the guid of unique handler to the same of original handler, so it can be removed
+-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+-
+-		return proxy;
+-	},
+-
+-	// Mutifunctional method to get and set values to a collection
+-	// The value/s can optionally be executed if it's a function
+-	access: function( elems, key, value, exec, fn, pass ) {
+-		var length = elems.length;
+-
+-		// Setting many attributes
+-		if ( typeof key === "object" ) {
+-			for ( var k in key ) {
+-				jQuery.access( elems, k, key[k], exec, fn, value );
+-			}
+-			return elems;
+-		}
+-
+-		// Setting one attribute
+-		if ( value !== undefined ) {
+-			// Optionally, function values get executed if exec is true
+-			exec = !pass && exec && jQuery.isFunction(value);
+-
+-			for ( var i = 0; i < length; i++ ) {
+-				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+-			}
+-
+-			return elems;
+-		}
+-
+-		// Getting an attribute
+-		return length ? fn( elems[0], key ) : undefined;
+-	},
+-
+-	now: function() {
+-		return (new Date()).getTime();
+-	},
+-
+-	// Use of jQuery.browser is frowned upon.
+-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+-	uaMatch: function( ua ) {
+-		ua = ua.toLowerCase();
+-
+-		var match = rwebkit.exec( ua ) ||
+-			ropera.exec( ua ) ||
+-			rmsie.exec( ua ) ||
+-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+-			[];
+-
+-		return { browser: match[1] || "", version: match[2] || "0" };
+-	},
+-
+-	sub: function() {
+-		function jQuerySub( selector, context ) {
+-			return new jQuerySub.fn.init( selector, context );
+-		}
+-		jQuery.extend( true, jQuerySub, this );
+-		jQuerySub.superclass = this;
+-		jQuerySub.fn = jQuerySub.prototype = this();
+-		jQuerySub.fn.constructor = jQuerySub;
+-		jQuerySub.sub = this.sub;
+-		jQuerySub.fn.init = function init( selector, context ) {
+-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+-				context = jQuerySub( context );
+-			}
+-
+-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+-		};
+-		jQuerySub.fn.init.prototype = jQuerySub.fn;
+-		var rootjQuerySub = jQuerySub(document);
+-		return jQuerySub;
+-	},
+-
+-	browser: {}
+-});
+-
+-// Populate the class2type map
+-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+-});
+-
+-browserMatch = jQuery.uaMatch( userAgent );
+-if ( browserMatch.browser ) {
+-	jQuery.browser[ browserMatch.browser ] = true;
+-	jQuery.browser.version = browserMatch.version;
+-}
+-
+-// Deprecated, use jQuery.browser.webkit instead
+-if ( jQuery.browser.webkit ) {
+-	jQuery.browser.safari = true;
+-}
+-
+-// IE doesn't match non-breaking spaces with \s
+-if ( rnotwhite.test( "\xA0" ) ) {
+-	trimLeft = /^[\s\xA0]+/;
+-	trimRight = /[\s\xA0]+$/;
+-}
+-
+-// All jQuery objects should point back to these
+-rootjQuery = jQuery(document);
+-
+-// Cleanup functions for the document ready method
+-if ( document.addEventListener ) {
+-	DOMContentLoaded = function() {
+-		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+-		jQuery.ready();
+-	};
+-
+-} else if ( document.attachEvent ) {
+-	DOMContentLoaded = function() {
+-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+-		if ( document.readyState === "complete" ) {
+-			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+-			jQuery.ready();
+-		}
+-	};
+-}
+-
+-// The DOM ready check for Internet Explorer
+-function doScrollCheck() {
+-	if ( jQuery.isReady ) {
+-		return;
+-	}
+-
+-	try {
+-		// If IE is used, use the trick by Diego Perini
+-		// http://javascript.nwbox.com/IEContentLoaded/
+-		document.documentElement.doScroll("left");
+-	} catch(e) {
+-		setTimeout( doScrollCheck, 1 );
+-		return;
+-	}
+-
+-	// and execute any waiting functions
+-	jQuery.ready();
+-}
+-
+-return jQuery;
+-
+-})();
+-
+-
+-var // Promise methods
+-	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
+-	// Static reference to slice
+-	sliceDeferred = [].slice;
+-
+-jQuery.extend({
+-	// Create a simple deferred (one callbacks list)
+-	_Deferred: function() {
+-		var // callbacks list
+-			callbacks = [],
+-			// stored [ context , args ]
+-			fired,
+-			// to avoid firing when already doing so
+-			firing,
+-			// flag to know if the deferred has been cancelled
+-			cancelled,
+-			// the deferred itself
+-			deferred  = {
+-
+-				// done( f1, f2, ...)
+-				done: function() {
+-					if ( !cancelled ) {
+-						var args = arguments,
+-							i,
+-							length,
+-							elem,
+-							type,
+-							_fired;
+-						if ( fired ) {
+-							_fired = fired;
+-							fired = 0;
+-						}
+-						for ( i = 0, length = args.length; i < length; i++ ) {
+-							elem = args[ i ];
+-							type = jQuery.type( elem );
+-							if ( type === "array" ) {
+-								deferred.done.apply( deferred, elem );
+-							} else if ( type === "function" ) {
+-								callbacks.push( elem );
+-							}
+-						}
+-						if ( _fired ) {
+-							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
+-						}
+-					}
+-					return this;
+-				},
+-
+-				// resolve with given context and args
+-				resolveWith: function( context, args ) {
+-					if ( !cancelled && !fired && !firing ) {
+-						// make sure args are available (#8421)
+-						args = args || [];
+-						firing = 1;
+-						try {
+-							while( callbacks[ 0 ] ) {
+-								callbacks.shift().apply( context, args );
+-							}
+-						}
+-						finally {
+-							fired = [ context, args ];
+-							firing = 0;
+-						}
+-					}
+-					return this;
+-				},
+-
+-				// resolve with this as context and given arguments
+-				resolve: function() {
+-					deferred.resolveWith( this, arguments );
+-					return this;
+-				},
+-
+-				// Has this deferred been resolved?
+-				isResolved: function() {
+-					return !!( firing || fired );
+-				},
+-
+-				// Cancel
+-				cancel: function() {
+-					cancelled = 1;
+-					callbacks = [];
+-					return this;
+-				}
+-			};
+-
+-		return deferred;
+-	},
+-
+-	// Full fledged deferred (two callbacks list)
+-	Deferred: function( func ) {
+-		var deferred = jQuery._Deferred(),
+-			failDeferred = jQuery._Deferred(),
+-			promise;
+-		// Add errorDeferred methods, then and promise
+-		jQuery.extend( deferred, {
+-			then: function( doneCallbacks, failCallbacks ) {
+-				deferred.done( doneCallbacks ).fail( failCallbacks );
+-				return this;
+-			},
+-			always: function() {
+-				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
+-			},
+-			fail: failDeferred.done,
+-			rejectWith: failDeferred.resolveWith,
+-			reject: failDeferred.resolve,
+-			isRejected: failDeferred.isResolved,
+-			pipe: function( fnDone, fnFail ) {
+-				return jQuery.Deferred(function( newDefer ) {
+-					jQuery.each( {
+-						done: [ fnDone, "resolve" ],
+-						fail: [ fnFail, "reject" ]
+-					}, function( handler, data ) {
+-						var fn = data[ 0 ],
+-							action = data[ 1 ],
+-							returned;
+-						if ( jQuery.isFunction( fn ) ) {
+-							deferred[ handler ](function() {
+-								returned = fn.apply( this, arguments );
+-								if ( returned && jQuery.isFunction( returned.promise ) ) {
+-									returned.promise().then( newDefer.resolve, newDefer.reject );
+-								} else {
+-									newDefer[ action ]( returned );
+-								}
+-							});
+-						} else {
+-							deferred[ handler ]( newDefer[ action ] );
+-						}
+-					});
+-				}).promise();
+-			},
+-			// Get a promise for this deferred
+-			// If obj is provided, the promise aspect is added to the object
+-			promise: function( obj ) {
+-				if ( obj == null ) {
+-					if ( promise ) {
+-						return promise;
+-					}
+-					promise = obj = {};
+-				}
+-				var i = promiseMethods.length;
+-				while( i-- ) {
+-					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
+-				}
+-				return obj;
+-			}
+-		});
+-		// Make sure only one callback list will be used
+-		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
+-		// Unexpose cancel
+-		delete deferred.cancel;
+-		// Call given func if any
+-		if ( func ) {
+-			func.call( deferred, deferred );
+-		}
+-		return deferred;
+-	},
+-
+-	// Deferred helper
+-	when: function( firstParam ) {
+-		var args = arguments,
+-			i = 0,
+-			length = args.length,
+-			count = length,
+-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+-				firstParam :
+-				jQuery.Deferred();
+-		function resolveFunc( i ) {
+-			return function( value ) {
+-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+-				if ( !( --count ) ) {
+-					// Strange bug in FF4:
+-					// Values changed onto the arguments object sometimes end up as undefined values
+-					// outside the $.when method. Cloning the object into a fresh array solves the issue
+-					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
+-				}
+-			};
+-		}
+-		if ( length > 1 ) {
+-			for( ; i < length; i++ ) {
+-				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
+-					args[ i ].promise().then( resolveFunc(i), deferred.reject );
+-				} else {
+-					--count;
+-				}
+-			}
+-			if ( !count ) {
+-				deferred.resolveWith( deferred, args );
+-			}
+-		} else if ( deferred !== firstParam ) {
+-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+-		}
+-		return deferred.promise();
+-	}
+-});
+-
+-
+-
+-jQuery.support = (function() {
+-
+-	var div = document.createElement( "div" ),
+-		documentElement = document.documentElement,
+-		all,
+-		a,
+-		select,
+-		opt,
+-		input,
+-		marginDiv,
+-		support,
+-		fragment,
+-		body,
+-		testElementParent,
+-		testElement,
+-		testElementStyle,
+-		tds,
+-		events,
+-		eventName,
+-		i,
+-		isSupported;
+-
+-	// Preliminary tests
+-	div.setAttribute("className", "t");
+-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+-
+-	all = div.getElementsByTagName( "*" );
+-	a = div.getElementsByTagName( "a" )[ 0 ];
+-
+-	// Can't get basic test support
+-	if ( !all || !all.length || !a ) {
+-		return {};
+-	}
+-
+-	// First batch of supports tests
+-	select = document.createElement( "select" );
+-	opt = select.appendChild( document.createElement("option") );
+-	input = div.getElementsByTagName( "input" )[ 0 ];
+-
+-	support = {
+-		// IE strips leading whitespace when .innerHTML is used
+-		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+-
+-		// Make sure that tbody elements aren't automatically inserted
+-		// IE will insert them into empty tables
+-		tbody: !div.getElementsByTagName( "tbody" ).length,
+-
+-		// Make sure that link elements get serialized correctly by innerHTML
+-		// This requires a wrapper element in IE
+-		htmlSerialize: !!div.getElementsByTagName( "link" ).length,
+-
+-		// Get the style information from getAttribute
+-		// (IE uses .cssText instead)
+-		style: /top/.test( a.getAttribute("style") ),
+-
+-		// Make sure that URLs aren't manipulated
+-		// (IE normalizes it by default)
+-		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
+-
+-		// Make sure that element opacity exists
+-		// (IE uses filter instead)
+-		// Use a regex to work around a WebKit issue. See #5145
+-		opacity: /^0.55$/.test( a.style.opacity ),
+-
+-		// Verify style float existence
+-		// (IE uses styleFloat instead of cssFloat)
+-		cssFloat: !!a.style.cssFloat,
+-
+-		// Make sure that if no value is specified for a checkbox
+-		// that it defaults to "on".
+-		// (WebKit defaults to "" instead)
+-		checkOn: ( input.value === "on" ),
+-
+-		// Make sure that a selected-by-default option has a working selected property.
+-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+-		optSelected: opt.selected,
+-
+-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+-		getSetAttribute: div.className !== "t",
+-
+-		// Will be defined later
+-		submitBubbles: true,
+-		changeBubbles: true,
+-		focusinBubbles: false,
+-		deleteExpando: true,
+-		noCloneEvent: true,
+-		inlineBlockNeedsLayout: false,
+-		shrinkWrapBlocks: false,
+-		reliableMarginRight: true
+-	};
+-
+-	// Make sure checked status is properly cloned
+-	input.checked = true;
+-	support.noCloneChecked = input.cloneNode( true ).checked;
+-
+-	// Make sure that the options inside disabled selects aren't marked as disabled
+-	// (WebKit marks them as disabled)
+-	select.disabled = true;
+-	support.optDisabled = !opt.disabled;
+-
+-	// Test to see if it's possible to delete an expando from an element
+-	// Fails in Internet Explorer
+-	try {
+-		delete div.test;
+-	} catch( e ) {
+-		support.deleteExpando = false;
+-	}
+-
+-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+-		div.attachEvent( "onclick", function() {
+-			// Cloning a node shouldn't copy over any
+-			// bound event handlers (IE does this)
+-			support.noCloneEvent = false;
+-		});
+-		div.cloneNode( true ).fireEvent( "onclick" );
+-	}
+-
+-	// Check if a radio maintains it's value
+-	// after being appended to the DOM
+-	input = document.createElement("input");
+-	input.value = "t";
+-	input.setAttribute("type", "radio");
+-	support.radioValue = input.value === "t";
+-
+-	input.setAttribute("checked", "checked");
+-	div.appendChild( input );
+-	fragment = document.createDocumentFragment();
+-	fragment.appendChild( div.firstChild );
+-
+-	// WebKit doesn't clone checked state correctly in fragments
+-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+-
+-	div.innerHTML = "";
+-
+-	// Figure out if the W3C box model works as expected
+-	div.style.width = div.style.paddingLeft = "1px";
+-
+-	body = document.getElementsByTagName( "body" )[ 0 ];
+-	// We use our own, invisible, body unless the body is already present
+-	// in which case we use a div (#9239)
+-	testElement = document.createElement( body ? "div" : "body" );
+-	testElementStyle = {
+-		visibility: "hidden",
+-		width: 0,
+-		height: 0,
+-		border: 0,
+-		margin: 0
+-	};
+-	if ( body ) {
+-		jQuery.extend( testElementStyle, {
+-			position: "absolute",
+-			left: -1000,
+-			top: -1000
+-		});
+-	}
+-	for ( i in testElementStyle ) {
+-		testElement.style[ i ] = testElementStyle[ i ];
+-	}
+-	testElement.appendChild( div );
+-	testElementParent = body || documentElement;
+-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+-
+-	// Check if a disconnected checkbox will retain its checked
+-	// value of true after appended to the DOM (IE6/7)
+-	support.appendChecked = input.checked;
+-
+-	support.boxModel = div.offsetWidth === 2;
+-
+-	if ( "zoom" in div.style ) {
+-		// Check if natively block-level elements act like inline-block
+-		// elements when setting their display to 'inline' and giving
+-		// them layout
+-		// (IE < 8 does this)
+-		div.style.display = "inline";
+-		div.style.zoom = 1;
+-		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+-
+-		// Check if elements with layout shrink-wrap their children
+-		// (IE 6 does this)
+-		div.style.display = "";
+-		div.innerHTML = "<div style='width:4px;'></div>";
+-		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+-	}
+-
+-	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+-	tds = div.getElementsByTagName( "td" );
+-
+-	// Check if table cells still have offsetWidth/Height when they are set
+-	// to display:none and there are still other visible table cells in a
+-	// table row; if so, offsetWidth/Height are not reliable for use when
+-	// determining if an element has been hidden directly using
+-	// display:none (it is still safe to use offsets if a parent element is
+-	// hidden; don safety goggles and see bug #4512 for more information).
+-	// (only IE 8 fails this test)
+-	isSupported = ( tds[ 0 ].offsetHeight === 0 );
+-
+-	tds[ 0 ].style.display = "";
+-	tds[ 1 ].style.display = "none";
+-
+-	// Check if empty table cells still have offsetWidth/Height
+-	// (IE < 8 fail this test)
+-	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+-	div.innerHTML = "";
+-
+-	// Check if div with explicit width and no margin-right incorrectly
+-	// gets computed margin-right based on width of container. For more
+-	// info see bug #3333
+-	// Fails in WebKit before Feb 2011 nightlies
+-	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-	if ( document.defaultView && document.defaultView.getComputedStyle ) {
+-		marginDiv = document.createElement( "div" );
+-		marginDiv.style.width = "0";
+-		marginDiv.style.marginRight = "0";
+-		div.appendChild( marginDiv );
+-		support.reliableMarginRight =
+-			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+-	}
+-
+-	// Remove the body element we added
+-	testElement.innerHTML = "";
+-	testElementParent.removeChild( testElement );
+-
+-	// Technique from Juriy Zaytsev
+-	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+-	// We only care about the case where non-standard event systems
+-	// are used, namely in IE. Short-circuiting here helps us to
+-	// avoid an eval call (in setAttribute) which can cause CSP
+-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+-	if ( div.attachEvent ) {
+-		for( i in {
+-			submit: 1,
+-			change: 1,
+-			focusin: 1
+-		} ) {
+-			eventName = "on" + i;
+-			isSupported = ( eventName in div );
+-			if ( !isSupported ) {
+-				div.setAttribute( eventName, "return;" );
+-				isSupported = ( typeof div[ eventName ] === "function" );
+-			}
+-			support[ i + "Bubbles" ] = isSupported;
+-		}
+-	}
+-
+-	// Null connected elements to avoid leaks in IE
+-	testElement = fragment = select = opt = body = marginDiv = div = input = null;
+-
+-	return support;
+-})();
+-
+-// Keep track of boxModel
+-jQuery.boxModel = jQuery.support.boxModel;
+-
+-
+-
+-
+-var rbrace = /^(?:\{.*\}|\[.*\])$/,
+-	rmultiDash = /([a-z])([A-Z])/g;
+-
+-jQuery.extend({
+-	cache: {},
+-
+-	// Please use with caution
+-	uuid: 0,
+-
+-	// Unique for each copy of jQuery on the page
+-	// Non-digits removed to match rinlinejQuery
+-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+-
+-	// The following elements throw uncatchable exceptions if you
+-	// attempt to add expando properties to them.
+-	noData: {
+-		"embed": true,
+-		// Ban all objects except for Flash (which handle expandos)
+-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+-		"applet": true
+-	},
+-
+-	hasData: function( elem ) {
+-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+-
+-		return !!elem && !isEmptyDataObject( elem );
+-	},
+-
+-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+-		if ( !jQuery.acceptData( elem ) ) {
+-			return;
+-		}
+-
+-		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
+-
+-			// We have to handle DOM nodes and JS objects differently because IE6-7
+-			// can't GC object references properly across the DOM-JS boundary
+-			isNode = elem.nodeType,
+-
+-			// Only DOM nodes need the global jQuery cache; JS object data is
+-			// attached directly to the object so GC can occur automatically
+-			cache = isNode ? jQuery.cache : elem,
+-
+-			// Only defining an ID for JS objects if its cache already exists allows
+-			// the code to shortcut on the same path as a DOM node with no cache
+-			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
+-
+-		// Avoid doing any more work than we need to when trying to get data on an
+-		// object that has no data at all
+-		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
+-			return;
+-		}
+-
+-		if ( !id ) {
+-			// Only DOM nodes need a new unique ID for each element since their data
+-			// ends up in the global cache
+-			if ( isNode ) {
+-				elem[ jQuery.expando ] = id = ++jQuery.uuid;
+-			} else {
+-				id = jQuery.expando;
+-			}
+-		}
+-
+-		if ( !cache[ id ] ) {
+-			cache[ id ] = {};
+-
+-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+-			// metadata on plain JS objects when the object is serialized using
+-			// JSON.stringify
+-			if ( !isNode ) {
+-				cache[ id ].toJSON = jQuery.noop;
+-			}
+-		}
+-
+-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
+-		// shallow copied over onto the existing cache
+-		if ( typeof name === "object" || typeof name === "function" ) {
+-			if ( pvt ) {
+-				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
+-			} else {
+-				cache[ id ] = jQuery.extend(cache[ id ], name);
+-			}
+-		}
+-
+-		thisCache = cache[ id ];
+-
+-		// Internal jQuery data is stored in a separate object inside the object's data
+-		// cache in order to avoid key collisions between internal data and user-defined
+-		// data
+-		if ( pvt ) {
+-			if ( !thisCache[ internalKey ] ) {
+-				thisCache[ internalKey ] = {};
+-			}
+-
+-			thisCache = thisCache[ internalKey ];
+-		}
+-
+-		if ( data !== undefined ) {
+-			thisCache[ jQuery.camelCase( name ) ] = data;
+-		}
+-
+-		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+-		// not attempt to inspect the internal events object using jQuery.data, as this
+-		// internal data object is undocumented and subject to change.
+-		if ( name === "events" && !thisCache[name] ) {
+-			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+-		}
+-
+-		return getByName ? 
+-			// Check for both converted-to-camel and non-converted data property names
+-			thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] :
+-			thisCache;
+-	},
+-
+-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+-		if ( !jQuery.acceptData( elem ) ) {
+-			return;
+-		}
+-
+-		var internalKey = jQuery.expando, isNode = elem.nodeType,
+-
+-			// See jQuery.data for more information
+-			cache = isNode ? jQuery.cache : elem,
+-
+-			// See jQuery.data for more information
+-			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+-
+-		// If there is already no cache entry for this object, there is no
+-		// purpose in continuing
+-		if ( !cache[ id ] ) {
+-			return;
+-		}
+-
+-		if ( name ) {
+-			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+-
+-			if ( thisCache ) {
+-				delete thisCache[ name ];
+-
+-				// If there is no data left in the cache, we want to continue
+-				// and let the cache object itself get destroyed
+-				if ( !isEmptyDataObject(thisCache) ) {
+-					return;
+-				}
+-			}
+-		}
+-
+-		// See jQuery.data for more information
+-		if ( pvt ) {
+-			delete cache[ id ][ internalKey ];
+-
+-			// Don't destroy the parent cache unless the internal data object
+-			// had been the only thing left in it
+-			if ( !isEmptyDataObject(cache[ id ]) ) {
+-				return;
+-			}
+-		}
+-
+-		var internalCache = cache[ id ][ internalKey ];
+-
+-		// Browsers that fail expando deletion also refuse to delete expandos on
+-		// the window, but it will allow it on all other JS objects; other browsers
+-		// don't care
+-		if ( jQuery.support.deleteExpando || cache != window ) {
+-			delete cache[ id ];
+-		} else {
+-			cache[ id ] = null;
+-		}
+-
+-		// We destroyed the entire user cache at once because it's faster than
+-		// iterating through each key, but we need to continue to persist internal
+-		// data if it existed
+-		if ( internalCache ) {
+-			cache[ id ] = {};
+-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+-			// metadata on plain JS objects when the object is serialized using
+-			// JSON.stringify
+-			if ( !isNode ) {
+-				cache[ id ].toJSON = jQuery.noop;
+-			}
+-
+-			cache[ id ][ internalKey ] = internalCache;
+-
+-		// Otherwise, we need to eliminate the expando on the node to avoid
+-		// false lookups in the cache for entries that no longer exist
+-		} else if ( isNode ) {
+-			// IE does not allow us to delete expando properties from nodes,
+-			// nor does it have a removeAttribute function on Document nodes;
+-			// we must handle all of these cases
+-			if ( jQuery.support.deleteExpando ) {
+-				delete elem[ jQuery.expando ];
+-			} else if ( elem.removeAttribute ) {
+-				elem.removeAttribute( jQuery.expando );
+-			} else {
+-				elem[ jQuery.expando ] = null;
+-			}
+-		}
+-	},
+-
+-	// For internal use only.
+-	_data: function( elem, name, data ) {
+-		return jQuery.data( elem, name, data, true );
+-	},
+-
+-	// A method for determining if a DOM node can handle the data expando
+-	acceptData: function( elem ) {
+-		if ( elem.nodeName ) {
+-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+-
+-			if ( match ) {
+-				return !(match === true || elem.getAttribute("classid") !== match);
+-			}
+-		}
+-
+-		return true;
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	data: function( key, value ) {
+-		var data = null;
+-
+-		if ( typeof key === "undefined" ) {
+-			if ( this.length ) {
+-				data = jQuery.data( this[0] );
+-
+-				if ( this[0].nodeType === 1 ) {
+-			    var attr = this[0].attributes, name;
+-					for ( var i = 0, l = attr.length; i < l; i++ ) {
+-						name = attr[i].name;
+-
+-						if ( name.indexOf( "data-" ) === 0 ) {
+-							name = jQuery.camelCase( name.substring(5) );
+-
+-							dataAttr( this[0], name, data[ name ] );
+-						}
+-					}
+-				}
+-			}
+-
+-			return data;
+-
+-		} else if ( typeof key === "object" ) {
+-			return this.each(function() {
+-				jQuery.data( this, key );
+-			});
+-		}
+-
+-		var parts = key.split(".");
+-		parts[1] = parts[1] ? "." + parts[1] : "";
+-
+-		if ( value === undefined ) {
+-			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+-
+-			// Try to fetch any internally stored data first
+-			if ( data === undefined && this.length ) {
+-				data = jQuery.data( this[0], key );
+-				data = dataAttr( this[0], key, data );
+-			}
+-
+-			return data === undefined && parts[1] ?
+-				this.data( parts[0] ) :
+-				data;
+-
+-		} else {
+-			return this.each(function() {
+-				var $this = jQuery( this ),
+-					args = [ parts[0], value ];
+-
+-				$this.triggerHandler( "setData" + parts[1] + "!", args );
+-				jQuery.data( this, key, value );
+-				$this.triggerHandler( "changeData" + parts[1] + "!", args );
+-			});
+-		}
+-	},
+-
+-	removeData: function( key ) {
+-		return this.each(function() {
+-			jQuery.removeData( this, key );
+-		});
+-	}
+-});
+-
+-function dataAttr( elem, key, data ) {
+-	// If nothing was found internally, try to fetch any
+-	// data from the HTML5 data-* attribute
+-	if ( data === undefined && elem.nodeType === 1 ) {
+-		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
+-
+-		data = elem.getAttribute( name );
+-
+-		if ( typeof data === "string" ) {
+-			try {
+-				data = data === "true" ? true :
+-				data === "false" ? false :
+-				data === "null" ? null :
+-				!jQuery.isNaN( data ) ? parseFloat( data ) :
+-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+-					data;
+-			} catch( e ) {}
+-
+-			// Make sure we set the data so it isn't changed later
+-			jQuery.data( elem, key, data );
+-
+-		} else {
+-			data = undefined;
+-		}
+-	}
+-
+-	return data;
+-}
+-
+-// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
+-// property to be considered empty objects; this property always exists in
+-// order to make sure JSON.stringify does not expose internal metadata
+-function isEmptyDataObject( obj ) {
+-	for ( var name in obj ) {
+-		if ( name !== "toJSON" ) {
+-			return false;
+-		}
+-	}
+-
+-	return true;
+-}
+-
+-
+-
+-
+-function handleQueueMarkDefer( elem, type, src ) {
+-	var deferDataKey = type + "defer",
+-		queueDataKey = type + "queue",
+-		markDataKey = type + "mark",
+-		defer = jQuery.data( elem, deferDataKey, undefined, true );
+-	if ( defer &&
+-		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
+-		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
+-		// Give room for hard-coded callbacks to fire first
+-		// and eventually mark/queue something else on the element
+-		setTimeout( function() {
+-			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
+-				!jQuery.data( elem, markDataKey, undefined, true ) ) {
+-				jQuery.removeData( elem, deferDataKey, true );
+-				defer.resolve();
+-			}
+-		}, 0 );
+-	}
+-}
+-
+-jQuery.extend({
+-
+-	_mark: function( elem, type ) {
+-		if ( elem ) {
+-			type = (type || "fx") + "mark";
+-			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
+-		}
+-	},
+-
+-	_unmark: function( force, elem, type ) {
+-		if ( force !== true ) {
+-			type = elem;
+-			elem = force;
+-			force = false;
+-		}
+-		if ( elem ) {
+-			type = type || "fx";
+-			var key = type + "mark",
+-				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
+-			if ( count ) {
+-				jQuery.data( elem, key, count, true );
+-			} else {
+-				jQuery.removeData( elem, key, true );
+-				handleQueueMarkDefer( elem, type, "mark" );
+-			}
+-		}
+-	},
+-
+-	queue: function( elem, type, data ) {
+-		if ( elem ) {
+-			type = (type || "fx") + "queue";
+-			var q = jQuery.data( elem, type, undefined, true );
+-			// Speed up dequeue by getting out quickly if this is just a lookup
+-			if ( data ) {
+-				if ( !q || jQuery.isArray(data) ) {
+-					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
+-				} else {
+-					q.push( data );
+-				}
+-			}
+-			return q || [];
+-		}
+-	},
+-
+-	dequeue: function( elem, type ) {
+-		type = type || "fx";
+-
+-		var queue = jQuery.queue( elem, type ),
+-			fn = queue.shift(),
+-			defer;
+-
+-		// If the fx queue is dequeued, always remove the progress sentinel
+-		if ( fn === "inprogress" ) {
+-			fn = queue.shift();
+-		}
+-
+-		if ( fn ) {
+-			// Add a progress sentinel to prevent the fx queue from being
+-			// automatically dequeued
+-			if ( type === "fx" ) {
+-				queue.unshift("inprogress");
+-			}
+-
+-			fn.call(elem, function() {
+-				jQuery.dequeue(elem, type);
+-			});
+-		}
+-
+-		if ( !queue.length ) {
+-			jQuery.removeData( elem, type + "queue", true );
+-			handleQueueMarkDefer( elem, type, "queue" );
+-		}
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	queue: function( type, data ) {
+-		if ( typeof type !== "string" ) {
+-			data = type;
+-			type = "fx";
+-		}
+-
+-		if ( data === undefined ) {
+-			return jQuery.queue( this[0], type );
+-		}
+-		return this.each(function() {
+-			var queue = jQuery.queue( this, type, data );
+-
+-			if ( type === "fx" && queue[0] !== "inprogress" ) {
+-				jQuery.dequeue( this, type );
+-			}
+-		});
+-	},
+-	dequeue: function( type ) {
+-		return this.each(function() {
+-			jQuery.dequeue( this, type );
+-		});
+-	},
+-	// Based off of the plugin by Clint Helfers, with permission.
+-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+-	delay: function( time, type ) {
+-		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+-		type = type || "fx";
+-
+-		return this.queue( type, function() {
+-			var elem = this;
+-			setTimeout(function() {
+-				jQuery.dequeue( elem, type );
+-			}, time );
+-		});
+-	},
+-	clearQueue: function( type ) {
+-		return this.queue( type || "fx", [] );
+-	},
+-	// Get a promise resolved when queues of a certain type
+-	// are emptied (fx is the type by default)
+-	promise: function( type, object ) {
+-		if ( typeof type !== "string" ) {
+-			object = type;
+-			type = undefined;
+-		}
+-		type = type || "fx";
+-		var defer = jQuery.Deferred(),
+-			elements = this,
+-			i = elements.length,
+-			count = 1,
+-			deferDataKey = type + "defer",
+-			queueDataKey = type + "queue",
+-			markDataKey = type + "mark",
+-			tmp;
+-		function resolve() {
+-			if ( !( --count ) ) {
+-				defer.resolveWith( elements, [ elements ] );
+-			}
+-		}
+-		while( i-- ) {
+-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+-					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
+-				count++;
+-				tmp.done( resolve );
+-			}
+-		}
+-		resolve();
+-		return defer.promise();
+-	}
+-});
+-
+-
+-
+-
+-var rclass = /[\n\t\r]/g,
+-	rspace = /\s+/,
+-	rreturn = /\r/g,
+-	rtype = /^(?:button|input)$/i,
+-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+-	rclickable = /^a(?:rea)?$/i,
+-	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+-	rinvalidChar = /\:|^on/,
+-	formHook, boolHook;
+-
+-jQuery.fn.extend({
+-	attr: function( name, value ) {
+-		return jQuery.access( this, name, value, true, jQuery.attr );
+-	},
+-
+-	removeAttr: function( name ) {
+-		return this.each(function() {
+-			jQuery.removeAttr( this, name );
+-		});
+-	},
+-	
+-	prop: function( name, value ) {
+-		return jQuery.access( this, name, value, true, jQuery.prop );
+-	},
+-	
+-	removeProp: function( name ) {
+-		name = jQuery.propFix[ name ] || name;
+-		return this.each(function() {
+-			// try/catch handles cases where IE balks (such as removing a property on window)
+-			try {
+-				this[ name ] = undefined;
+-				delete this[ name ];
+-			} catch( e ) {}
+-		});
+-	},
+-
+-	addClass: function( value ) {
+-		var classNames, i, l, elem,
+-			setClass, c, cl;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).addClass( value.call(this, j, this.className) );
+-			});
+-		}
+-
+-		if ( value && typeof value === "string" ) {
+-			classNames = value.split( rspace );
+-
+-			for ( i = 0, l = this.length; i < l; i++ ) {
+-				elem = this[ i ];
+-
+-				if ( elem.nodeType === 1 ) {
+-					if ( !elem.className && classNames.length === 1 ) {
+-						elem.className = value;
+-
+-					} else {
+-						setClass = " " + elem.className + " ";
+-
+-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+-							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+-								setClass += classNames[ c ] + " ";
+-							}
+-						}
+-						elem.className = jQuery.trim( setClass );
+-					}
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	removeClass: function( value ) {
+-		var classNames, i, l, elem, className, c, cl;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).removeClass( value.call(this, j, this.className) );
+-			});
+-		}
+-
+-		if ( (value && typeof value === "string") || value === undefined ) {
+-			classNames = (value || "").split( rspace );
+-
+-			for ( i = 0, l = this.length; i < l; i++ ) {
+-				elem = this[ i ];
+-
+-				if ( elem.nodeType === 1 && elem.className ) {
+-					if ( value ) {
+-						className = (" " + elem.className + " ").replace( rclass, " " );
+-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+-							className = className.replace(" " + classNames[ c ] + " ", " ");
+-						}
+-						elem.className = jQuery.trim( className );
+-
+-					} else {
+-						elem.className = "";
+-					}
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	toggleClass: function( value, stateVal ) {
+-		var type = typeof value,
+-			isBool = typeof stateVal === "boolean";
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( i ) {
+-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			if ( type === "string" ) {
+-				// toggle individual class names
+-				var className,
+-					i = 0,
+-					self = jQuery( this ),
+-					state = stateVal,
+-					classNames = value.split( rspace );
+-
+-				while ( (className = classNames[ i++ ]) ) {
+-					// check each className given, space seperated list
+-					state = isBool ? state : !self.hasClass( className );
+-					self[ state ? "addClass" : "removeClass" ]( className );
+-				}
+-
+-			} else if ( type === "undefined" || type === "boolean" ) {
+-				if ( this.className ) {
+-					// store className if set
+-					jQuery._data( this, "__className__", this.className );
+-				}
+-
+-				// toggle whole className
+-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+-			}
+-		});
+-	},
+-
+-	hasClass: function( selector ) {
+-		var className = " " + selector + " ";
+-		for ( var i = 0, l = this.length; i < l; i++ ) {
+-			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+-				return true;
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	val: function( value ) {
+-		var hooks, ret,
+-			elem = this[0];
+-		
+-		if ( !arguments.length ) {
+-			if ( elem ) {
+-				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+-
+-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+-					return ret;
+-				}
+-
+-				ret = elem.value;
+-
+-				return typeof ret === "string" ? 
+-					// handle most common string cases
+-					ret.replace(rreturn, "") : 
+-					// handle cases where value is null/undef or number
+-					ret == null ? "" : ret;
+-			}
+-
+-			return undefined;
+-		}
+-
+-		var isFunction = jQuery.isFunction( value );
+-
+-		return this.each(function( i ) {
+-			var self = jQuery(this), val;
+-
+-			if ( this.nodeType !== 1 ) {
+-				return;
+-			}
+-
+-			if ( isFunction ) {
+-				val = value.call( this, i, self.val() );
+-			} else {
+-				val = value;
+-			}
+-
+-			// Treat null/undefined as ""; convert numbers to string
+-			if ( val == null ) {
+-				val = "";
+-			} else if ( typeof val === "number" ) {
+-				val += "";
+-			} else if ( jQuery.isArray( val ) ) {
+-				val = jQuery.map(val, function ( value ) {
+-					return value == null ? "" : value + "";
+-				});
+-			}
+-
+-			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+-
+-			// If set returns undefined, fall back to normal setting
+-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+-				this.value = val;
+-			}
+-		});
+-	}
+-});
+-
+-jQuery.extend({
+-	valHooks: {
+-		option: {
+-			get: function( elem ) {
+-				// attributes.value is undefined in Blackberry 4.7 but
+-				// uses .value. See #6932
+-				var val = elem.attributes.value;
+-				return !val || val.specified ? elem.value : elem.text;
+-			}
+-		},
+-		select: {
+-			get: function( elem ) {
+-				var value,
+-					index = elem.selectedIndex,
+-					values = [],
+-					options = elem.options,
+-					one = elem.type === "select-one";
+-
+-				// Nothing was selected
+-				if ( index < 0 ) {
+-					return null;
+-				}
+-
+-				// Loop through all the selected options
+-				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+-					var option = options[ i ];
+-
+-					// Don't return options that are disabled or in a disabled optgroup
+-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+-
+-						// Get the specific value for the option
+-						value = jQuery( option ).val();
+-
+-						// We don't need an array for one selects
+-						if ( one ) {
+-							return value;
+-						}
+-
+-						// Multi-Selects return an array
+-						values.push( value );
+-					}
+-				}
+-
+-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+-				if ( one && !values.length && options.length ) {
+-					return jQuery( options[ index ] ).val();
+-				}
+-
+-				return values;
+-			},
+-
+-			set: function( elem, value ) {
+-				var values = jQuery.makeArray( value );
+-
+-				jQuery(elem).find("option").each(function() {
+-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+-				});
+-
+-				if ( !values.length ) {
+-					elem.selectedIndex = -1;
+-				}
+-				return values;
+-			}
+-		}
+-	},
+-
+-	attrFn: {
+-		val: true,
+-		css: true,
+-		html: true,
+-		text: true,
+-		data: true,
+-		width: true,
+-		height: true,
+-		offset: true
+-	},
+-	
+-	attrFix: {
+-		// Always normalize to ensure hook usage
+-		tabindex: "tabIndex"
+-	},
+-	
+-	attr: function( elem, name, value, pass ) {
+-		var nType = elem.nodeType;
+-		
+-		// don't get/set attributes on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return undefined;
+-		}
+-
+-		if ( pass && name in jQuery.attrFn ) {
+-			return jQuery( elem )[ name ]( value );
+-		}
+-
+-		// Fallback to prop when attributes are not supported
+-		if ( !("getAttribute" in elem) ) {
+-			return jQuery.prop( elem, name, value );
+-		}
+-
+-		var ret, hooks,
+-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		// Normalize the name if needed
+-		if ( notxml ) {
+-			name = jQuery.attrFix[ name ] || name;
+-
+-			hooks = jQuery.attrHooks[ name ];
+-
+-			if ( !hooks ) {
+-				// Use boolHook for boolean attributes
+-				if ( rboolean.test( name ) ) {
+-
+-					hooks = boolHook;
+-
+-				// Use formHook for forms and if the name contains certain characters
+-				} else if ( formHook && name !== "className" &&
+-					(jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
+-
+-					hooks = formHook;
+-				}
+-			}
+-		}
+-
+-		if ( value !== undefined ) {
+-
+-			if ( value === null ) {
+-				jQuery.removeAttr( elem, name );
+-				return undefined;
+-
+-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				elem.setAttribute( name, "" + value );
+-				return value;
+-			}
+-
+-		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+-			return ret;
+-
+-		} else {
+-
+-			ret = elem.getAttribute( name );
+-
+-			// Non-existent attributes return null, we normalize to undefined
+-			return ret === null ?
+-				undefined :
+-				ret;
+-		}
+-	},
+-
+-	removeAttr: function( elem, name ) {
+-		var propName;
+-		if ( elem.nodeType === 1 ) {
+-			name = jQuery.attrFix[ name ] || name;
+-		
+-			if ( jQuery.support.getSetAttribute ) {
+-				// Use removeAttribute in browsers that support it
+-				elem.removeAttribute( name );
+-			} else {
+-				jQuery.attr( elem, name, "" );
+-				elem.removeAttributeNode( elem.getAttributeNode( name ) );
+-			}
+-
+-			// Set corresponding property to false for boolean attributes
+-			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
+-				elem[ propName ] = false;
+-			}
+-		}
+-	},
+-
+-	attrHooks: {
+-		type: {
+-			set: function( elem, value ) {
+-				// We can't allow the type property to be changed (since it causes problems in IE)
+-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+-					jQuery.error( "type property can't be changed" );
+-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+-					// Setting the type on a radio button after the value resets the value in IE6-9
+-					// Reset value to it's default in case type is set after value
+-					// This is for element creation
+-					var val = elem.value;
+-					elem.setAttribute( "type", value );
+-					if ( val ) {
+-						elem.value = val;
+-					}
+-					return value;
+-				}
+-			}
+-		},
+-		tabIndex: {
+-			get: function( elem ) {
+-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+-				var attributeNode = elem.getAttributeNode("tabIndex");
+-
+-				return attributeNode && attributeNode.specified ?
+-					parseInt( attributeNode.value, 10 ) :
+-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+-						0 :
+-						undefined;
+-			}
+-		},
+-		// Use the value property for back compat
+-		// Use the formHook for button elements in IE6/7 (#1954)
+-		value: {
+-			get: function( elem, name ) {
+-				if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+-					return formHook.get( elem, name );
+-				}
+-				return name in elem ?
+-					elem.value :
+-					null;
+-			},
+-			set: function( elem, value, name ) {
+-				if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+-					return formHook.set( elem, value, name );
+-				}
+-				// Does not return so that setAttribute is also used
+-				elem.value = value;
+-			}
+-		}
+-	},
+-
+-	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( elem, name, value ) {
+-		var nType = elem.nodeType;
+-
+-		// don't get/set properties on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return undefined;
+-		}
+-
+-		var ret, hooks,
+-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		if ( notxml ) {
+-			// Fix name and attach hooks
+-			name = jQuery.propFix[ name ] || name;
+-			hooks = jQuery.propHooks[ name ];
+-		}
+-
+-		if ( value !== undefined ) {
+-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				return (elem[ name ] = value);
+-			}
+-
+-		} else {
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				return elem[ name ];
+-			}
+-		}
+-	},
+-	
+-	propHooks: {}
+-});
+-
+-// Hook for boolean attributes
+-boolHook = {
+-	get: function( elem, name ) {
+-		// Align boolean attributes with corresponding properties
+-		return jQuery.prop( elem, name ) ?
+-			name.toLowerCase() :
+-			undefined;
+-	},
+-	set: function( elem, value, name ) {
+-		var propName;
+-		if ( value === false ) {
+-			// Remove boolean attributes when set to false
+-			jQuery.removeAttr( elem, name );
+-		} else {
+-			// value is true since we know at this point it's type boolean and not false
+-			// Set boolean attributes to the same name and set the DOM property
+-			propName = jQuery.propFix[ name ] || name;
+-			if ( propName in elem ) {
+-				// Only set the IDL specifically if it already exists on the element
+-				elem[ propName ] = true;
+-			}
+-
+-			elem.setAttribute( name, name.toLowerCase() );
+-		}
+-		return name;
+-	}
+-};
+-
+-// IE6/7 do not support getting/setting some attributes with get/setAttribute
+-if ( !jQuery.support.getSetAttribute ) {
+-
+-	// propFix is more comprehensive and contains all fixes
+-	jQuery.attrFix = jQuery.propFix;
+-	
+-	// Use this for any attribute on a form in IE6/7
+-	formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = {
+-		get: function( elem, name ) {
+-			var ret;
+-			ret = elem.getAttributeNode( name );
+-			// Return undefined if nodeValue is empty string
+-			return ret && ret.nodeValue !== "" ?
+-				ret.nodeValue :
+-				undefined;
+-		},
+-		set: function( elem, value, name ) {
+-			// Check form objects in IE (multiple bugs related)
+-			// Only use nodeValue if the attribute node exists on the form
+-			var ret = elem.getAttributeNode( name );
+-			if ( ret ) {
+-				ret.nodeValue = value;
+-				return value;
+-			}
+-		}
+-	};
+-
+-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+-	// This is for removals
+-	jQuery.each([ "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			set: function( elem, value ) {
+-				if ( value === "" ) {
+-					elem.setAttribute( name, "auto" );
+-					return value;
+-				}
+-			}
+-		});
+-	});
+-}
+-
+-
+-// Some attributes require a special call on IE
+-if ( !jQuery.support.hrefNormalized ) {
+-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			get: function( elem ) {
+-				var ret = elem.getAttribute( name, 2 );
+-				return ret === null ? undefined : ret;
+-			}
+-		});
+-	});
+-}
+-
+-if ( !jQuery.support.style ) {
+-	jQuery.attrHooks.style = {
+-		get: function( elem ) {
+-			// Return undefined in the case of empty string
+-			// Normalize to lowercase since IE uppercases css property names
+-			return elem.style.cssText.toLowerCase() || undefined;
+-		},
+-		set: function( elem, value ) {
+-			return (elem.style.cssText = "" + value);
+-		}
+-	};
+-}
+-
+-// Safari mis-reports the default selected property of an option
+-// Accessing the parent's selectedIndex property fixes it
+-if ( !jQuery.support.optSelected ) {
+-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+-		get: function( elem ) {
+-			var parent = elem.parentNode;
+-
+-			if ( parent ) {
+-				parent.selectedIndex;
+-
+-				// Make sure that it also works with optgroups, see #5701
+-				if ( parent.parentNode ) {
+-					parent.parentNode.selectedIndex;
+-				}
+-			}
+-		}
+-	});
+-}
+-
+-// Radios and checkboxes getter/setter
+-if ( !jQuery.support.checkOn ) {
+-	jQuery.each([ "radio", "checkbox" ], function() {
+-		jQuery.valHooks[ this ] = {
+-			get: function( elem ) {
+-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+-				return elem.getAttribute("value") === null ? "on" : elem.value;
+-			}
+-		};
+-	});
+-}
+-jQuery.each([ "radio", "checkbox" ], function() {
+-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+-		set: function( elem, value ) {
+-			if ( jQuery.isArray( value ) ) {
+-				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+-			}
+-		}
+-	});
+-});
+-
+-
+-
+-
+-var rnamespaces = /\.(.*)$/,
+-	rformElems = /^(?:textarea|input|select)$/i,
+-	rperiod = /\./g,
+-	rspaces = / /g,
+-	rescape = /[^\w\s.|`]/g,
+-	fcleanup = function( nm ) {
+-		return nm.replace(rescape, "\\$&");
+-	};
+-
+-/*
+- * A number of helper functions used for managing events.
+- * Many of the ideas behind this code originated from
+- * Dean Edwards' addEvent library.
+- */
+-jQuery.event = {
+-
+-	// Bind an event to an element
+-	// Original by Dean Edwards
+-	add: function( elem, types, handler, data ) {
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		if ( handler === false ) {
+-			handler = returnFalse;
+-		} else if ( !handler ) {
+-			// Fixes bug #7229. Fix recommended by jdalton
+-			return;
+-		}
+-
+-		var handleObjIn, handleObj;
+-
+-		if ( handler.handler ) {
+-			handleObjIn = handler;
+-			handler = handleObjIn.handler;
+-		}
+-
+-		// Make sure that the function being executed has a unique ID
+-		if ( !handler.guid ) {
+-			handler.guid = jQuery.guid++;
+-		}
+-
+-		// Init the element's event structure
+-		var elemData = jQuery._data( elem );
+-
+-		// If no elemData is found then we must be trying to bind to one of the
+-		// banned noData elements
+-		if ( !elemData ) {
+-			return;
+-		}
+-
+-		var events = elemData.events,
+-			eventHandle = elemData.handle;
+-
+-		if ( !events ) {
+-			elemData.events = events = {};
+-		}
+-
+-		if ( !eventHandle ) {
+-			elemData.handle = eventHandle = function( e ) {
+-				// Discard the second event of a jQuery.event.trigger() and
+-				// when an event is called after a page has unloaded
+-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+-					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+-					undefined;
+-			};
+-		}
+-
+-		// Add elem as a property of the handle function
+-		// This is to prevent a memory leak with non-native events in IE.
+-		eventHandle.elem = elem;
+-
+-		// Handle multiple events separated by a space
+-		// jQuery(...).bind("mouseover mouseout", fn);
+-		types = types.split(" ");
+-
+-		var type, i = 0, namespaces;
+-
+-		while ( (type = types[ i++ ]) ) {
+-			handleObj = handleObjIn ?
+-				jQuery.extend({}, handleObjIn) :
+-				{ handler: handler, data: data };
+-
+-			// Namespaced event handlers
+-			if ( type.indexOf(".") > -1 ) {
+-				namespaces = type.split(".");
+-				type = namespaces.shift();
+-				handleObj.namespace = namespaces.slice(0).sort().join(".");
+-
+-			} else {
+-				namespaces = [];
+-				handleObj.namespace = "";
+-			}
+-
+-			handleObj.type = type;
+-			if ( !handleObj.guid ) {
+-				handleObj.guid = handler.guid;
+-			}
+-
+-			// Get the current list of functions bound to this event
+-			var handlers = events[ type ],
+-				special = jQuery.event.special[ type ] || {};
+-
+-			// Init the event handler queue
+-			if ( !handlers ) {
+-				handlers = events[ type ] = [];
+-
+-				// Check for a special event handler
+-				// Only use addEventListener/attachEvent if the special
+-				// events handler returns false
+-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+-					// Bind the global event handler to the element
+-					if ( elem.addEventListener ) {
+-						elem.addEventListener( type, eventHandle, false );
+-
+-					} else if ( elem.attachEvent ) {
+-						elem.attachEvent( "on" + type, eventHandle );
+-					}
+-				}
+-			}
+-
+-			if ( special.add ) {
+-				special.add.call( elem, handleObj );
+-
+-				if ( !handleObj.handler.guid ) {
+-					handleObj.handler.guid = handler.guid;
+-				}
+-			}
+-
+-			// Add the function to the element's handler list
+-			handlers.push( handleObj );
+-
+-			// Keep track of which events have been used, for event optimization
+-			jQuery.event.global[ type ] = true;
+-		}
+-
+-		// Nullify elem to prevent memory leaks in IE
+-		elem = null;
+-	},
+-
+-	global: {},
+-
+-	// Detach an event or set of events from an element
+-	remove: function( elem, types, handler, pos ) {
+-		// don't do events on text and comment nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		if ( handler === false ) {
+-			handler = returnFalse;
+-		}
+-
+-		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+-			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+-			events = elemData && elemData.events;
+-
+-		if ( !elemData || !events ) {
+-			return;
+-		}
+-
+-		// types is actually an event object here
+-		if ( types && types.type ) {
+-			handler = types.handler;
+-			types = types.type;
+-		}
+-
+-		// Unbind all events for the element
+-		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+-			types = types || "";
+-
+-			for ( type in events ) {
+-				jQuery.event.remove( elem, type + types );
+-			}
+-
+-			return;
+-		}
+-
+-		// Handle multiple events separated by a space
+-		// jQuery(...).unbind("mouseover mouseout", fn);
+-		types = types.split(" ");
+-
+-		while ( (type = types[ i++ ]) ) {
+-			origType = type;
+-			handleObj = null;
+-			all = type.indexOf(".") < 0;
+-			namespaces = [];
+-
+-			if ( !all ) {
+-				// Namespaced event handlers
+-				namespaces = type.split(".");
+-				type = namespaces.shift();
+-
+-				namespace = new RegExp("(^|\\.)" +
+-					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
+-			}
+-
+-			eventType = events[ type ];
+-
+-			if ( !eventType ) {
+-				continue;
+-			}
+-
+-			if ( !handler ) {
+-				for ( j = 0; j < eventType.length; j++ ) {
+-					handleObj = eventType[ j ];
+-
+-					if ( all || namespace.test( handleObj.namespace ) ) {
+-						jQuery.event.remove( elem, origType, handleObj.handler, j );
+-						eventType.splice( j--, 1 );
+-					}
+-				}
+-
+-				continue;
+-			}
+-
+-			special = jQuery.event.special[ type ] || {};
+-
+-			for ( j = pos || 0; j < eventType.length; j++ ) {
+-				handleObj = eventType[ j ];
+-
+-				if ( handler.guid === handleObj.guid ) {
+-					// remove the given handler for the given type
+-					if ( all || namespace.test( handleObj.namespace ) ) {
+-						if ( pos == null ) {
+-							eventType.splice( j--, 1 );
+-						}
+-
+-						if ( special.remove ) {
+-							special.remove.call( elem, handleObj );
+-						}
+-					}
+-
+-					if ( pos != null ) {
+-						break;
+-					}
+-				}
+-			}
+-
+-			// remove generic event handler if no more handlers exist
+-			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+-				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+-					jQuery.removeEvent( elem, type, elemData.handle );
+-				}
+-
+-				ret = null;
+-				delete events[ type ];
+-			}
+-		}
+-
+-		// Remove the expando if it's no longer used
+-		if ( jQuery.isEmptyObject( events ) ) {
+-			var handle = elemData.handle;
+-			if ( handle ) {
+-				handle.elem = null;
+-			}
+-
+-			delete elemData.events;
+-			delete elemData.handle;
+-
+-			if ( jQuery.isEmptyObject( elemData ) ) {
+-				jQuery.removeData( elem, undefined, true );
+-			}
+-		}
+-	},
+-	
+-	// Events that are safe to short-circuit if no handlers are attached.
+-	// Native DOM events should not be added, they may have inline handlers.
+-	customEvent: {
+-		"getData": true,
+-		"setData": true,
+-		"changeData": true
+-	},
+-
+-	trigger: function( event, data, elem, onlyHandlers ) {
+-		// Event object or event type
+-		var type = event.type || event,
+-			namespaces = [],
+-			exclusive;
+-
+-		if ( type.indexOf("!") >= 0 ) {
+-			// Exclusive events trigger only for the exact event (no namespaces)
+-			type = type.slice(0, -1);
+-			exclusive = true;
+-		}
+-
+-		if ( type.indexOf(".") >= 0 ) {
+-			// Namespaced trigger; create a regexp to match event type in handle()
+-			namespaces = type.split(".");
+-			type = namespaces.shift();
+-			namespaces.sort();
+-		}
+-
+-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+-			// No jQuery handlers for this event type, and it can't have inline handlers
+-			return;
+-		}
+-
+-		// Caller can pass in an Event, Object, or just an event type string
+-		event = typeof event === "object" ?
+-			// jQuery.Event object
+-			event[ jQuery.expando ] ? event :
+-			// Object literal
+-			new jQuery.Event( type, event ) :
+-			// Just the event type (string)
+-			new jQuery.Event( type );
+-
+-		event.type = type;
+-		event.exclusive = exclusive;
+-		event.namespace = namespaces.join(".");
+-		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
+-		
+-		// triggerHandler() and global events don't bubble or run the default action
+-		if ( onlyHandlers || !elem ) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-
+-		// Handle a global trigger
+-		if ( !elem ) {
+-			// TODO: Stop taunting the data cache; remove global events and always attach to document
+-			jQuery.each( jQuery.cache, function() {
+-				// internalKey variable is just used to make it easier to find
+-				// and potentially change this stuff later; currently it just
+-				// points to jQuery.expando
+-				var internalKey = jQuery.expando,
+-					internalCache = this[ internalKey ];
+-				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
+-					jQuery.event.trigger( event, data, internalCache.handle.elem );
+-				}
+-			});
+-			return;
+-		}
+-
+-		// Don't do events on text and comment nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		// Clean up the event in case it is being reused
+-		event.result = undefined;
+-		event.target = elem;
+-
+-		// Clone any incoming data and prepend the event, creating the handler arg list
+-		data = data != null ? jQuery.makeArray( data ) : [];
+-		data.unshift( event );
+-
+-		var cur = elem,
+-			// IE doesn't like method names with a colon (#3533, #8272)
+-			ontype = type.indexOf(":") < 0 ? "on" + type : "";
+-
+-		// Fire event on the current element, then bubble up the DOM tree
+-		do {
+-			var handle = jQuery._data( cur, "handle" );
+-
+-			event.currentTarget = cur;
+-			if ( handle ) {
+-				handle.apply( cur, data );
+-			}
+-
+-			// Trigger an inline bound script
+-			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
+-				event.result = false;
+-				event.preventDefault();
+-			}
+-
+-			// Bubble up to document, then to window
+-			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
+-		} while ( cur && !event.isPropagationStopped() );
+-
+-		// If nobody prevented the default action, do it now
+-		if ( !event.isDefaultPrevented() ) {
+-			var old,
+-				special = jQuery.event.special[ type ] || {};
+-
+-			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
+-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+-
+-				// Call a native DOM method on the target with the same name name as the event.
+-				// Can't use an .isFunction)() check here because IE6/7 fails that test.
+-				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
+-				try {
+-					if ( ontype && elem[ type ] ) {
+-						// Don't re-trigger an onFOO event when we call its FOO() method
+-						old = elem[ ontype ];
+-
+-						if ( old ) {
+-							elem[ ontype ] = null;
+-						}
+-
+-						jQuery.event.triggered = type;
+-						elem[ type ]();
+-					}
+-				} catch ( ieError ) {}
+-
+-				if ( old ) {
+-					elem[ ontype ] = old;
+-				}
+-
+-				jQuery.event.triggered = undefined;
+-			}
+-		}
+-		
+-		return event.result;
+-	},
+-
+-	handle: function( event ) {
+-		event = jQuery.event.fix( event || window.event );
+-		// Snapshot the handlers list since a called handler may add/remove events.
+-		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
+-			run_all = !event.exclusive && !event.namespace,
+-			args = Array.prototype.slice.call( arguments, 0 );
+-
+-		// Use the fix-ed Event rather than the (read-only) native event
+-		args[0] = event;
+-		event.currentTarget = this;
+-
+-		for ( var j = 0, l = handlers.length; j < l; j++ ) {
+-			var handleObj = handlers[ j ];
+-
+-			// Triggered event must 1) be non-exclusive and have no namespace, or
+-			// 2) have namespace(s) a subset or equal to those in the bound event.
+-			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
+-				// Pass in a reference to the handler function itself
+-				// So that we can later remove it
+-				event.handler = handleObj.handler;
+-				event.data = handleObj.data;
+-				event.handleObj = handleObj;
+-
+-				var ret = handleObj.handler.apply( this, args );
+-
+-				if ( ret !== undefined ) {
+-					event.result = ret;
+-					if ( ret === false ) {
+-						event.preventDefault();
+-						event.stopPropagation();
+-					}
+-				}
+-
+-				if ( event.isImmediatePropagationStopped() ) {
+-					break;
+-				}
+-			}
+-		}
+-		return event.result;
+-	},
+-
+-	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+-
+-	fix: function( event ) {
+-		if ( event[ jQuery.expando ] ) {
+-			return event;
+-		}
+-
+-		// store a copy of the original event object
+-		// and "clone" to set read-only properties
+-		var originalEvent = event;
+-		event = jQuery.Event( originalEvent );
+-
+-		for ( var i = this.props.length, prop; i; ) {
+-			prop = this.props[ --i ];
+-			event[ prop ] = originalEvent[ prop ];
+-		}
+-
+-		// Fix target property, if necessary
+-		if ( !event.target ) {
+-			// Fixes #1925 where srcElement might not be defined either
+-			event.target = event.srcElement || document;
+-		}
+-
+-		// check if target is a textnode (safari)
+-		if ( event.target.nodeType === 3 ) {
+-			event.target = event.target.parentNode;
+-		}
+-
+-		// Add relatedTarget, if necessary
+-		if ( !event.relatedTarget && event.fromElement ) {
+-			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+-		}
+-
+-		// Calculate pageX/Y if missing and clientX/Y available
+-		if ( event.pageX == null && event.clientX != null ) {
+-			var eventDocument = event.target.ownerDocument || document,
+-				doc = eventDocument.documentElement,
+-				body = eventDocument.body;
+-
+-			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+-			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
+-		}
+-
+-		// Add which for key events
+-		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
+-			event.which = event.charCode != null ? event.charCode : event.keyCode;
+-		}
+-
+-		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+-		if ( !event.metaKey && event.ctrlKey ) {
+-			event.metaKey = event.ctrlKey;
+-		}
+-
+-		// Add which for click: 1 === left; 2 === middle; 3 === right
+-		// Note: button is not normalized, so don't use it
+-		if ( !event.which && event.button !== undefined ) {
+-			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+-		}
+-
+-		return event;
+-	},
+-
+-	// Deprecated, use jQuery.guid instead
+-	guid: 1E8,
+-
+-	// Deprecated, use jQuery.proxy instead
+-	proxy: jQuery.proxy,
+-
+-	special: {
+-		ready: {
+-			// Make sure the ready event is setup
+-			setup: jQuery.bindReady,
+-			teardown: jQuery.noop
+-		},
+-
+-		live: {
+-			add: function( handleObj ) {
+-				jQuery.event.add( this,
+-					liveConvert( handleObj.origType, handleObj.selector ),
+-					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+-			},
+-
+-			remove: function( handleObj ) {
+-				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+-			}
+-		},
+-
+-		beforeunload: {
+-			setup: function( data, namespaces, eventHandle ) {
+-				// We only want to do this special case on windows
+-				if ( jQuery.isWindow( this ) ) {
+-					this.onbeforeunload = eventHandle;
+-				}
+-			},
+-
+-			teardown: function( namespaces, eventHandle ) {
+-				if ( this.onbeforeunload === eventHandle ) {
+-					this.onbeforeunload = null;
+-				}
+-			}
+-		}
+-	}
+-};
+-
+-jQuery.removeEvent = document.removeEventListener ?
+-	function( elem, type, handle ) {
+-		if ( elem.removeEventListener ) {
+-			elem.removeEventListener( type, handle, false );
+-		}
+-	} :
+-	function( elem, type, handle ) {
+-		if ( elem.detachEvent ) {
+-			elem.detachEvent( "on" + type, handle );
+-		}
+-	};
+-
+-jQuery.Event = function( src, props ) {
+-	// Allow instantiation without the 'new' keyword
+-	if ( !this.preventDefault ) {
+-		return new jQuery.Event( src, props );
+-	}
+-
+-	// Event object
+-	if ( src && src.type ) {
+-		this.originalEvent = src;
+-		this.type = src.type;
+-
+-		// Events bubbling up the document may have been marked as prevented
+-		// by a handler lower down the tree; reflect the correct value.
+-		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+-			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+-
+-	// Event type
+-	} else {
+-		this.type = src;
+-	}
+-
+-	// Put explicitly provided properties onto the event object
+-	if ( props ) {
+-		jQuery.extend( this, props );
+-	}
+-
+-	// timeStamp is buggy for some events on Firefox(#3843)
+-	// So we won't rely on the native value
+-	this.timeStamp = jQuery.now();
+-
+-	// Mark it as fixed
+-	this[ jQuery.expando ] = true;
+-};
+-
+-function returnFalse() {
+-	return false;
+-}
+-function returnTrue() {
+-	return true;
+-}
+-
+-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+-jQuery.Event.prototype = {
+-	preventDefault: function() {
+-		this.isDefaultPrevented = returnTrue;
+-
+-		var e = this.originalEvent;
+-		if ( !e ) {
+-			return;
+-		}
+-
+-		// if preventDefault exists run it on the original event
+-		if ( e.preventDefault ) {
+-			e.preventDefault();
+-
+-		// otherwise set the returnValue property of the original event to false (IE)
+-		} else {
+-			e.returnValue = false;
+-		}
+-	},
+-	stopPropagation: function() {
+-		this.isPropagationStopped = returnTrue;
+-
+-		var e = this.originalEvent;
+-		if ( !e ) {
+-			return;
+-		}
+-		// if stopPropagation exists run it on the original event
+-		if ( e.stopPropagation ) {
+-			e.stopPropagation();
+-		}
+-		// otherwise set the cancelBubble property of the original event to true (IE)
+-		e.cancelBubble = true;
+-	},
+-	stopImmediatePropagation: function() {
+-		this.isImmediatePropagationStopped = returnTrue;
+-		this.stopPropagation();
+-	},
+-	isDefaultPrevented: returnFalse,
+-	isPropagationStopped: returnFalse,
+-	isImmediatePropagationStopped: returnFalse
+-};
+-
+-// Checks if an event happened on an element within another element
+-// Used in jQuery.event.special.mouseenter and mouseleave handlers
+-var withinElement = function( event ) {
+-
+-	// Check if mouse(over|out) are still within the same parent element
+-	var related = event.relatedTarget,
+-		inside = false,
+-		eventType = event.type;
+-
+-	event.type = event.data;
+-
+-	if ( related !== this ) {
+-
+-		if ( related ) {
+-			inside = jQuery.contains( this, related );
+-		}
+-
+-		if ( !inside ) {
+-
+-			jQuery.event.handle.apply( this, arguments );
+-
+-			event.type = eventType;
+-		}
+-	}
+-},
+-
+-// In case of event delegation, we only need to rename the event.type,
+-// liveHandler will take care of the rest.
+-delegate = function( event ) {
+-	event.type = event.data;
+-	jQuery.event.handle.apply( this, arguments );
+-};
+-
+-// Create mouseenter and mouseleave events
+-jQuery.each({
+-	mouseenter: "mouseover",
+-	mouseleave: "mouseout"
+-}, function( orig, fix ) {
+-	jQuery.event.special[ orig ] = {
+-		setup: function( data ) {
+-			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+-		},
+-		teardown: function( data ) {
+-			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+-		}
+-	};
+-});
+-
+-// submit delegation
+-if ( !jQuery.support.submitBubbles ) {
+-
+-	jQuery.event.special.submit = {
+-		setup: function( data, namespaces ) {
+-			if ( !jQuery.nodeName( this, "form" ) ) {
+-				jQuery.event.add(this, "click.specialSubmit", function( e ) {
+-					var elem = e.target,
+-						type = elem.type;
+-
+-					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+-						trigger( "submit", this, arguments );
+-					}
+-				});
+-
+-				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+-					var elem = e.target,
+-						type = elem.type;
+-
+-					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+-						trigger( "submit", this, arguments );
+-					}
+-				});
+-
+-			} else {
+-				return false;
+-			}
+-		},
+-
+-		teardown: function( namespaces ) {
+-			jQuery.event.remove( this, ".specialSubmit" );
+-		}
+-	};
+-
+-}
+-
+-// change delegation, happens here so we have bind.
+-if ( !jQuery.support.changeBubbles ) {
+-
+-	var changeFilters,
+-
+-	getVal = function( elem ) {
+-		var type = elem.type, val = elem.value;
+-
+-		if ( type === "radio" || type === "checkbox" ) {
+-			val = elem.checked;
+-
+-		} else if ( type === "select-multiple" ) {
+-			val = elem.selectedIndex > -1 ?
+-				jQuery.map( elem.options, function( elem ) {
+-					return elem.selected;
+-				}).join("-") :
+-				"";
+-
+-		} else if ( jQuery.nodeName( elem, "select" ) ) {
+-			val = elem.selectedIndex;
+-		}
+-
+-		return val;
+-	},
+-
+-	testChange = function testChange( e ) {
+-		var elem = e.target, data, val;
+-
+-		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
+-			return;
+-		}
+-
+-		data = jQuery._data( elem, "_change_data" );
+-		val = getVal(elem);
+-
+-		// the current data will be also retrieved by beforeactivate
+-		if ( e.type !== "focusout" || elem.type !== "radio" ) {
+-			jQuery._data( elem, "_change_data", val );
+-		}
+-
+-		if ( data === undefined || val === data ) {
+-			return;
+-		}
+-
+-		if ( data != null || val ) {
+-			e.type = "change";
+-			e.liveFired = undefined;
+-			jQuery.event.trigger( e, arguments[1], elem );
+-		}
+-	};
+-
+-	jQuery.event.special.change = {
+-		filters: {
+-			focusout: testChange,
+-
+-			beforedeactivate: testChange,
+-
+-			click: function( e ) {
+-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+-
+-				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
+-					testChange.call( this, e );
+-				}
+-			},
+-
+-			// Change has to be called before submit
+-			// Keydown will be called before keypress, which is used in submit-event delegation
+-			keydown: function( e ) {
+-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+-
+-				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
+-					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+-					type === "select-multiple" ) {
+-					testChange.call( this, e );
+-				}
+-			},
+-
+-			// Beforeactivate happens also before the previous element is blurred
+-			// with this event you can't trigger a change event, but you can store
+-			// information
+-			beforeactivate: function( e ) {
+-				var elem = e.target;
+-				jQuery._data( elem, "_change_data", getVal(elem) );
+-			}
+-		},
+-
+-		setup: function( data, namespaces ) {
+-			if ( this.type === "file" ) {
+-				return false;
+-			}
+-
+-			for ( var type in changeFilters ) {
+-				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+-			}
+-
+-			return rformElems.test( this.nodeName );
+-		},
+-
+-		teardown: function( namespaces ) {
+-			jQuery.event.remove( this, ".specialChange" );
+-
+-			return rformElems.test( this.nodeName );
+-		}
+-	};
+-
+-	changeFilters = jQuery.event.special.change.filters;
+-
+-	// Handle when the input is .focus()'d
+-	changeFilters.focus = changeFilters.beforeactivate;
+-}
+-
+-function trigger( type, elem, args ) {
+-	// Piggyback on a donor event to simulate a different one.
+-	// Fake originalEvent to avoid donor's stopPropagation, but if the
+-	// simulated event prevents default then we do the same on the donor.
+-	// Don't pass args or remember liveFired; they apply to the donor event.
+-	var event = jQuery.extend( {}, args[ 0 ] );
+-	event.type = type;
+-	event.originalEvent = {};
+-	event.liveFired = undefined;
+-	jQuery.event.handle.call( elem, event );
+-	if ( event.isDefaultPrevented() ) {
+-		args[ 0 ].preventDefault();
+-	}
+-}
+-
+-// Create "bubbling" focus and blur events
+-if ( !jQuery.support.focusinBubbles ) {
+-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+-
+-		// Attach a single capturing handler while someone wants focusin/focusout
+-		var attaches = 0;
+-
+-		jQuery.event.special[ fix ] = {
+-			setup: function() {
+-				if ( attaches++ === 0 ) {
+-					document.addEventListener( orig, handler, true );
+-				}
+-			},
+-			teardown: function() {
+-				if ( --attaches === 0 ) {
+-					document.removeEventListener( orig, handler, true );
+-				}
+-			}
+-		};
+-
+-		function handler( donor ) {
+-			// Donor event is always a native one; fix it and switch its type.
+-			// Let focusin/out handler cancel the donor focus/blur event.
+-			var e = jQuery.event.fix( donor );
+-			e.type = fix;
+-			e.originalEvent = {};
+-			jQuery.event.trigger( e, null, e.target );
+-			if ( e.isDefaultPrevented() ) {
+-				donor.preventDefault();
+-			}
+-		}
+-	});
+-}
+-
+-jQuery.each(["bind", "one"], function( i, name ) {
+-	jQuery.fn[ name ] = function( type, data, fn ) {
+-		var handler;
+-
+-		// Handle object literals
+-		if ( typeof type === "object" ) {
+-			for ( var key in type ) {
+-				this[ name ](key, data, type[key], fn);
+-			}
+-			return this;
+-		}
+-
+-		if ( arguments.length === 2 || data === false ) {
+-			fn = data;
+-			data = undefined;
+-		}
+-
+-		if ( name === "one" ) {
+-			handler = function( event ) {
+-				jQuery( this ).unbind( event, handler );
+-				return fn.apply( this, arguments );
+-			};
+-			handler.guid = fn.guid || jQuery.guid++;
+-		} else {
+-			handler = fn;
+-		}
+-
+-		if ( type === "unload" && name !== "one" ) {
+-			this.one( type, data, fn );
+-
+-		} else {
+-			for ( var i = 0, l = this.length; i < l; i++ ) {
+-				jQuery.event.add( this[i], type, handler, data );
+-			}
+-		}
+-
+-		return this;
+-	};
+-});
+-
+-jQuery.fn.extend({
+-	unbind: function( type, fn ) {
+-		// Handle object literals
+-		if ( typeof type === "object" && !type.preventDefault ) {
+-			for ( var key in type ) {
+-				this.unbind(key, type[key]);
+-			}
+-
+-		} else {
+-			for ( var i = 0, l = this.length; i < l; i++ ) {
+-				jQuery.event.remove( this[i], type, fn );
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	delegate: function( selector, types, data, fn ) {
+-		return this.live( types, data, fn, selector );
+-	},
+-
+-	undelegate: function( selector, types, fn ) {
+-		if ( arguments.length === 0 ) {
+-			return this.unbind( "live" );
+-
+-		} else {
+-			return this.die( types, null, fn, selector );
+-		}
+-	},
+-
+-	trigger: function( type, data ) {
+-		return this.each(function() {
+-			jQuery.event.trigger( type, data, this );
+-		});
+-	},
+-
+-	triggerHandler: function( type, data ) {
+-		if ( this[0] ) {
+-			return jQuery.event.trigger( type, data, this[0], true );
+-		}
+-	},
+-
+-	toggle: function( fn ) {
+-		// Save reference to arguments for access in closure
+-		var args = arguments,
+-			guid = fn.guid || jQuery.guid++,
+-			i = 0,
+-			toggler = function( event ) {
+-				// Figure out which function to execute
+-				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+-				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+-
+-				// Make sure that clicks stop
+-				event.preventDefault();
+-
+-				// and execute the function
+-				return args[ lastToggle ].apply( this, arguments ) || false;
+-			};
+-
+-		// link all the functions, so any of them can unbind this click handler
+-		toggler.guid = guid;
+-		while ( i < args.length ) {
+-			args[ i++ ].guid = guid;
+-		}
+-
+-		return this.click( toggler );
+-	},
+-
+-	hover: function( fnOver, fnOut ) {
+-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+-	}
+-});
+-
+-var liveMap = {
+-	focus: "focusin",
+-	blur: "focusout",
+-	mouseenter: "mouseover",
+-	mouseleave: "mouseout"
+-};
+-
+-jQuery.each(["live", "die"], function( i, name ) {
+-	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+-		var type, i = 0, match, namespaces, preType,
+-			selector = origSelector || this.selector,
+-			context = origSelector ? this : jQuery( this.context );
+-
+-		if ( typeof types === "object" && !types.preventDefault ) {
+-			for ( var key in types ) {
+-				context[ name ]( key, data, types[key], selector );
+-			}
+-
+-			return this;
+-		}
+-
+-		if ( name === "die" && !types &&
+-					origSelector && origSelector.charAt(0) === "." ) {
+-
+-			context.unbind( origSelector );
+-
+-			return this;
+-		}
+-
+-		if ( data === false || jQuery.isFunction( data ) ) {
+-			fn = data || returnFalse;
+-			data = undefined;
+-		}
+-
+-		types = (types || "").split(" ");
+-
+-		while ( (type = types[ i++ ]) != null ) {
+-			match = rnamespaces.exec( type );
+-			namespaces = "";
+-
+-			if ( match )  {
+-				namespaces = match[0];
+-				type = type.replace( rnamespaces, "" );
+-			}
+-
+-			if ( type === "hover" ) {
+-				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+-				continue;
+-			}
+-
+-			preType = type;
+-
+-			if ( liveMap[ type ] ) {
+-				types.push( liveMap[ type ] + namespaces );
+-				type = type + namespaces;
+-
+-			} else {
+-				type = (liveMap[ type ] || type) + namespaces;
+-			}
+-
+-			if ( name === "live" ) {
+-				// bind live handler
+-				for ( var j = 0, l = context.length; j < l; j++ ) {
+-					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+-						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+-				}
+-
+-			} else {
+-				// unbind live handler
+-				context.unbind( "live." + liveConvert( type, selector ), fn );
+-			}
+-		}
+-
+-		return this;
+-	};
+-});
+-
+-function liveHandler( event ) {
+-	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+-		elems = [],
+-		selectors = [],
+-		events = jQuery._data( this, "events" );
+-
+-	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
+-	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
+-		return;
+-	}
+-
+-	if ( event.namespace ) {
+-		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+-	}
+-
+-	event.liveFired = this;
+-
+-	var live = events.live.slice(0);
+-
+-	for ( j = 0; j < live.length; j++ ) {
+-		handleObj = live[j];
+-
+-		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+-			selectors.push( handleObj.selector );
+-
+-		} else {
+-			live.splice( j--, 1 );
+-		}
+-	}
+-
+-	match = jQuery( event.target ).closest( selectors, event.currentTarget );
+-
+-	for ( i = 0, l = match.length; i < l; i++ ) {
+-		close = match[i];
+-
+-		for ( j = 0; j < live.length; j++ ) {
+-			handleObj = live[j];
+-
+-			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
+-				elem = close.elem;
+-				related = null;
+-
+-				// Those two events require additional checking
+-				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+-					event.type = handleObj.preType;
+-					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+-
+-					// Make sure not to accidentally match a child element with the same selector
+-					if ( related && jQuery.contains( elem, related ) ) {
+-						related = elem;
+-					}
+-				}
+-
+-				if ( !related || related !== elem ) {
+-					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+-				}
+-			}
+-		}
+-	}
+-
+-	for ( i = 0, l = elems.length; i < l; i++ ) {
+-		match = elems[i];
+-
+-		if ( maxLevel && match.level > maxLevel ) {
+-			break;
+-		}
+-
+-		event.currentTarget = match.elem;
+-		event.data = match.handleObj.data;
+-		event.handleObj = match.handleObj;
+-
+-		ret = match.handleObj.origHandler.apply( match.elem, arguments );
+-
+-		if ( ret === false || event.isPropagationStopped() ) {
+-			maxLevel = match.level;
+-
+-			if ( ret === false ) {
+-				stop = false;
+-			}
+-			if ( event.isImmediatePropagationStopped() ) {
+-				break;
+-			}
+-		}
+-	}
+-
+-	return stop;
+-}
+-
+-function liveConvert( type, selector ) {
+-	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
+-}
+-
+-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+-	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+-
+-	// Handle event binding
+-	jQuery.fn[ name ] = function( data, fn ) {
+-		if ( fn == null ) {
+-			fn = data;
+-			data = null;
+-		}
+-
+-		return arguments.length > 0 ?
+-			this.bind( name, data, fn ) :
+-			this.trigger( name );
+-	};
+-
+-	if ( jQuery.attrFn ) {
+-		jQuery.attrFn[ name ] = true;
+-	}
+-});
+-
+-
+-
+-/*!
+- * Sizzle CSS Selector Engine
+- *  Copyright 2011, The Dojo Foundation
+- *  Released under the MIT, BSD, and GPL Licenses.
+- *  More information: http://sizzlejs.com/
+- */
+-(function(){
+-
+-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+-	done = 0,
+-	toString = Object.prototype.toString,
+-	hasDuplicate = false,
+-	baseHasDuplicate = true,
+-	rBackslash = /\\/g,
+-	rNonWord = /\W/;
+-
+-// Here we check if the JavaScript engine is using some sort of
+-// optimization where it does not always call our comparision
+-// function. If that is the case, discard the hasDuplicate value.
+-//   Thus far that includes Google Chrome.
+-[0, 0].sort(function() {
+-	baseHasDuplicate = false;
+-	return 0;
+-});
+-
+-var Sizzle = function( selector, context, results, seed ) {
+-	results = results || [];
+-	context = context || document;
+-
+-	var origContext = context;
+-
+-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+-		return [];
+-	}
+-	
+-	if ( !selector || typeof selector !== "string" ) {
+-		return results;
+-	}
+-
+-	var m, set, checkSet, extra, ret, cur, pop, i,
+-		prune = true,
+-		contextXML = Sizzle.isXML( context ),
+-		parts = [],
+-		soFar = selector;
+-	
+-	// Reset the position of the chunker regexp (start from head)
+-	do {
+-		chunker.exec( "" );
+-		m = chunker.exec( soFar );
+-
+-		if ( m ) {
+-			soFar = m[3];
+-		
+-			parts.push( m[1] );
+-		
+-			if ( m[2] ) {
+-				extra = m[3];
+-				break;
+-			}
+-		}
+-	} while ( m );
+-
+-	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+-
+-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+-			set = posProcess( parts[0] + parts[1], context );
+-
+-		} else {
+-			set = Expr.relative[ parts[0] ] ?
+-				[ context ] :
+-				Sizzle( parts.shift(), context );
+-
+-			while ( parts.length ) {
+-				selector = parts.shift();
+-
+-				if ( Expr.relative[ selector ] ) {
+-					selector += parts.shift();
+-				}
+-				
+-				set = posProcess( selector, set );
+-			}
+-		}
+-
+-	} else {
+-		// Take a shortcut and set the context if the root selector is an ID
+-		// (but not if it'll be faster if the inner selector is an ID)
+-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+-
+-			ret = Sizzle.find( parts.shift(), context, contextXML );
+-			context = ret.expr ?
+-				Sizzle.filter( ret.expr, ret.set )[0] :
+-				ret.set[0];
+-		}
+-
+-		if ( context ) {
+-			ret = seed ?
+-				{ expr: parts.pop(), set: makeArray(seed) } :
+-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+-
+-			set = ret.expr ?
+-				Sizzle.filter( ret.expr, ret.set ) :
+-				ret.set;
+-
+-			if ( parts.length > 0 ) {
+-				checkSet = makeArray( set );
+-
+-			} else {
+-				prune = false;
+-			}
+-
+-			while ( parts.length ) {
+-				cur = parts.pop();
+-				pop = cur;
+-
+-				if ( !Expr.relative[ cur ] ) {
+-					cur = "";
+-				} else {
+-					pop = parts.pop();
+-				}
+-
+-				if ( pop == null ) {
+-					pop = context;
+-				}
+-
+-				Expr.relative[ cur ]( checkSet, pop, contextXML );
+-			}
+-
+-		} else {
+-			checkSet = parts = [];
+-		}
+-	}
+-
+-	if ( !checkSet ) {
+-		checkSet = set;
+-	}
+-
+-	if ( !checkSet ) {
+-		Sizzle.error( cur || selector );
+-	}
+-
+-	if ( toString.call(checkSet) === "[object Array]" ) {
+-		if ( !prune ) {
+-			results.push.apply( results, checkSet );
+-
+-		} else if ( context && context.nodeType === 1 ) {
+-			for ( i = 0; checkSet[i] != null; i++ ) {
+-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+-					results.push( set[i] );
+-				}
+-			}
+-
+-		} else {
+-			for ( i = 0; checkSet[i] != null; i++ ) {
+-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+-					results.push( set[i] );
+-				}
+-			}
+-		}
+-
+-	} else {
+-		makeArray( checkSet, results );
+-	}
+-
+-	if ( extra ) {
+-		Sizzle( extra, origContext, results, seed );
+-		Sizzle.uniqueSort( results );
+-	}
+-
+-	return results;
+-};
+-
+-Sizzle.uniqueSort = function( results ) {
+-	if ( sortOrder ) {
+-		hasDuplicate = baseHasDuplicate;
+-		results.sort( sortOrder );
+-
+-		if ( hasDuplicate ) {
+-			for ( var i = 1; i < results.length; i++ ) {
+-				if ( results[i] === results[ i - 1 ] ) {
+-					results.splice( i--, 1 );
+-				}
+-			}
+-		}
+-	}
+-
+-	return results;
+-};
+-
+-Sizzle.matches = function( expr, set ) {
+-	return Sizzle( expr, null, null, set );
+-};
+-
+-Sizzle.matchesSelector = function( node, expr ) {
+-	return Sizzle( expr, null, null, [node] ).length > 0;
+-};
+-
+-Sizzle.find = function( expr, context, isXML ) {
+-	var set;
+-
+-	if ( !expr ) {
+-		return [];
+-	}
+-
+-	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+-		var match,
+-			type = Expr.order[i];
+-		
+-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+-			var left = match[1];
+-			match.splice( 1, 1 );
+-
+-			if ( left.substr( left.length - 1 ) !== "\\" ) {
+-				match[1] = (match[1] || "").replace( rBackslash, "" );
+-				set = Expr.find[ type ]( match, context, isXML );
+-
+-				if ( set != null ) {
+-					expr = expr.replace( Expr.match[ type ], "" );
+-					break;
+-				}
+-			}
+-		}
+-	}
+-
+-	if ( !set ) {
+-		set = typeof context.getElementsByTagName !== "undefined" ?
+-			context.getElementsByTagName( "*" ) :
+-			[];
+-	}
+-
+-	return { set: set, expr: expr };
+-};
+-
+-Sizzle.filter = function( expr, set, inplace, not ) {
+-	var match, anyFound,
+-		old = expr,
+-		result = [],
+-		curLoop = set,
+-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+-
+-	while ( expr && set.length ) {
+-		for ( var type in Expr.filter ) {
+-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+-				var found, item,
+-					filter = Expr.filter[ type ],
+-					left = match[1];
+-
+-				anyFound = false;
+-
+-				match.splice(1,1);
+-
+-				if ( left.substr( left.length - 1 ) === "\\" ) {
+-					continue;
+-				}
+-
+-				if ( curLoop === result ) {
+-					result = [];
+-				}
+-
+-				if ( Expr.preFilter[ type ] ) {
+-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+-
+-					if ( !match ) {
+-						anyFound = found = true;
+-
+-					} else if ( match === true ) {
+-						continue;
+-					}
+-				}
+-
+-				if ( match ) {
+-					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+-						if ( item ) {
+-							found = filter( item, match, i, curLoop );
+-							var pass = not ^ !!found;
+-
+-							if ( inplace && found != null ) {
+-								if ( pass ) {
+-									anyFound = true;
+-
+-								} else {
+-									curLoop[i] = false;
+-								}
+-
+-							} else if ( pass ) {
+-								result.push( item );
+-								anyFound = true;
+-							}
+-						}
+-					}
+-				}
+-
+-				if ( found !== undefined ) {
+-					if ( !inplace ) {
+-						curLoop = result;
+-					}
+-
+-					expr = expr.replace( Expr.match[ type ], "" );
+-
+-					if ( !anyFound ) {
+-						return [];
+-					}
+-
+-					break;
+-				}
+-			}
+-		}
+-
+-		// Improper expression
+-		if ( expr === old ) {
+-			if ( anyFound == null ) {
+-				Sizzle.error( expr );
+-
+-			} else {
+-				break;
+-			}
+-		}
+-
+-		old = expr;
+-	}
+-
+-	return curLoop;
+-};
+-
+-Sizzle.error = function( msg ) {
+-	throw "Syntax error, unrecognized expression: " + msg;
+-};
+-
+-var Expr = Sizzle.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( elem ) {
+-			return elem.getAttribute( "href" );
+-		},
+-		type: function( elem ) {
+-			return elem.getAttribute( "type" );
+-		}
+-	},
+-
+-	relative: {
+-		"+": function(checkSet, part){
+-			var isPartStr = typeof part === "string",
+-				isTag = isPartStr && !rNonWord.test( part ),
+-				isPartStrNotTag = isPartStr && !isTag;
+-
+-			if ( isTag ) {
+-				part = part.toLowerCase();
+-			}
+-
+-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+-				if ( (elem = checkSet[i]) ) {
+-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+-
+-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+-						elem || false :
+-						elem === part;
+-				}
+-			}
+-
+-			if ( isPartStrNotTag ) {
+-				Sizzle.filter( part, checkSet, true );
+-			}
+-		},
+-
+-		">": function( checkSet, part ) {
+-			var elem,
+-				isPartStr = typeof part === "string",
+-				i = 0,
+-				l = checkSet.length;
+-
+-			if ( isPartStr && !rNonWord.test( part ) ) {
+-				part = part.toLowerCase();
+-
+-				for ( ; i < l; i++ ) {
+-					elem = checkSet[i];
+-
+-					if ( elem ) {
+-						var parent = elem.parentNode;
+-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+-					}
+-				}
+-
+-			} else {
+-				for ( ; i < l; i++ ) {
+-					elem = checkSet[i];
+-
+-					if ( elem ) {
+-						checkSet[i] = isPartStr ?
+-							elem.parentNode :
+-							elem.parentNode === part;
+-					}
+-				}
+-
+-				if ( isPartStr ) {
+-					Sizzle.filter( part, checkSet, true );
+-				}
+-			}
+-		},
+-
+-		"": function(checkSet, part, isXML){
+-			var nodeCheck,
+-				doneName = done++,
+-				checkFn = dirCheck;
+-
+-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+-				part = part.toLowerCase();
+-				nodeCheck = part;
+-				checkFn = dirNodeCheck;
+-			}
+-
+-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+-		},
+-
+-		"~": function( checkSet, part, isXML ) {
+-			var nodeCheck,
+-				doneName = done++,
+-				checkFn = dirCheck;
+-
+-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+-				part = part.toLowerCase();
+-				nodeCheck = part;
+-				checkFn = dirNodeCheck;
+-			}
+-
+-			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+-		}
+-	},
+-
+-	find: {
+-		ID: function( match, context, isXML ) {
+-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+-				var m = context.getElementById(match[1]);
+-				// Check parentNode to catch when Blackberry 4.6 returns
+-				// nodes that are no longer in the document #6963
+-				return m && m.parentNode ? [m] : [];
+-			}
+-		},
+-
+-		NAME: function( match, context ) {
+-			if ( typeof context.getElementsByName !== "undefined" ) {
+-				var ret = [],
+-					results = context.getElementsByName( match[1] );
+-
+-				for ( var i = 0, l = results.length; i < l; i++ ) {
+-					if ( results[i].getAttribute("name") === match[1] ) {
+-						ret.push( results[i] );
+-					}
+-				}
+-
+-				return ret.length === 0 ? null : ret;
+-			}
+-		},
+-
+-		TAG: function( match, context ) {
+-			if ( typeof context.getElementsByTagName !== "undefined" ) {
+-				return context.getElementsByTagName( match[1] );
+-			}
+-		}
+-	},
+-	preFilter: {
+-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+-			match = " " + match[1].replace( rBackslash, "" ) + " ";
+-
+-			if ( isXML ) {
+-				return match;
+-			}
+-
+-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+-				if ( elem ) {
+-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+-						if ( !inplace ) {
+-							result.push( elem );
+-						}
+-
+-					} else if ( inplace ) {
+-						curLoop[i] = false;
+-					}
+-				}
+-			}
+-
+-			return false;
+-		},
+-
+-		ID: function( match ) {
+-			return match[1].replace( rBackslash, "" );
+-		},
+-
+-		TAG: function( match, curLoop ) {
+-			return match[1].replace( rBackslash, "" ).toLowerCase();
+-		},
+-
+-		CHILD: function( match ) {
+-			if ( match[1] === "nth" ) {
+-				if ( !match[2] ) {
+-					Sizzle.error( match[0] );
+-				}
+-
+-				match[2] = match[2].replace(/^\+|\s*/g, '');
+-
+-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+-				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+-
+-				// calculate the numbers (first)n+(last) including if they are negative
+-				match[2] = (test[1] + (test[2] || 1)) - 0;
+-				match[3] = test[3] - 0;
+-			}
+-			else if ( match[2] ) {
+-				Sizzle.error( match[0] );
+-			}
+-
+-			// TODO: Move to normal caching system
+-			match[0] = done++;
+-
+-			return match;
+-		},
+-
+-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+-			var name = match[1] = match[1].replace( rBackslash, "" );
+-			
+-			if ( !isXML && Expr.attrMap[name] ) {
+-				match[1] = Expr.attrMap[name];
+-			}
+-
+-			// Handle if an un-quoted value was used
+-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+-
+-			if ( match[2] === "~=" ) {
+-				match[4] = " " + match[4] + " ";
+-			}
+-
+-			return match;
+-		},
+-
+-		PSEUDO: function( match, curLoop, inplace, result, not ) {
+-			if ( match[1] === "not" ) {
+-				// If we're dealing with a complex expression, or a simple one
+-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+-					match[3] = Sizzle(match[3], null, null, curLoop);
+-
+-				} else {
+-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+-
+-					if ( !inplace ) {
+-						result.push.apply( result, ret );
+-					}
+-
+-					return false;
+-				}
+-
+-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+-				return true;
+-			}
+-			
+-			return match;
+-		},
+-
+-		POS: function( match ) {
+-			match.unshift( true );
+-
+-			return match;
+-		}
+-	},
+-	
+-	filters: {
+-		enabled: function( elem ) {
+-			return elem.disabled === false && elem.type !== "hidden";
+-		},
+-
+-		disabled: function( elem ) {
+-			return elem.disabled === true;
+-		},
+-
+-		checked: function( elem ) {
+-			return elem.checked === true;
+-		},
+-		
+-		selected: function( elem ) {
+-			// Accessing this property makes selected-by-default
+-			// options in Safari work properly
+-			if ( elem.parentNode ) {
+-				elem.parentNode.selectedIndex;
+-			}
+-			
+-			return elem.selected === true;
+-		},
+-
+-		parent: function( elem ) {
+-			return !!elem.firstChild;
+-		},
+-
+-		empty: function( elem ) {
+-			return !elem.firstChild;
+-		},
+-
+-		has: function( elem, i, match ) {
+-			return !!Sizzle( match[3], elem ).length;
+-		},
+-
+-		header: function( elem ) {
+-			return (/h\d/i).test( elem.nodeName );
+-		},
+-
+-		text: function( elem ) {
+-			var attr = elem.getAttribute( "type" ), type = elem.type;
+-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
+-			// use getAttribute instead to test this case
+-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+-		},
+-
+-		radio: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+-		},
+-
+-		checkbox: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+-		},
+-
+-		file: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+-		},
+-
+-		password: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+-		},
+-
+-		submit: function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return (name === "input" || name === "button") && "submit" === elem.type;
+-		},
+-
+-		image: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+-		},
+-
+-		reset: function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return (name === "input" || name === "button") && "reset" === elem.type;
+-		},
+-
+-		button: function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return name === "input" && "button" === elem.type || name === "button";
+-		},
+-
+-		input: function( elem ) {
+-			return (/input|select|textarea|button/i).test( elem.nodeName );
+-		},
+-
+-		focus: function( elem ) {
+-			return elem === elem.ownerDocument.activeElement;
+-		}
+-	},
+-	setFilters: {
+-		first: function( elem, i ) {
+-			return i === 0;
+-		},
+-
+-		last: function( elem, i, match, array ) {
+-			return i === array.length - 1;
+-		},
+-
+-		even: function( elem, i ) {
+-			return i % 2 === 0;
+-		},
+-
+-		odd: function( elem, i ) {
+-			return i % 2 === 1;
+-		},
+-
+-		lt: function( elem, i, match ) {
+-			return i < match[3] - 0;
+-		},
+-
+-		gt: function( elem, i, match ) {
+-			return i > match[3] - 0;
+-		},
+-
+-		nth: function( elem, i, match ) {
+-			return match[3] - 0 === i;
+-		},
+-
+-		eq: function( elem, i, match ) {
+-			return match[3] - 0 === i;
+-		}
+-	},
+-	filter: {
+-		PSEUDO: function( elem, match, i, array ) {
+-			var name = match[1],
+-				filter = Expr.filters[ name ];
+-
+-			if ( filter ) {
+-				return filter( elem, i, match, array );
+-
+-			} else if ( name === "contains" ) {
+-				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+-
+-			} else if ( name === "not" ) {
+-				var not = match[3];
+-
+-				for ( var j = 0, l = not.length; j < l; j++ ) {
+-					if ( not[j] === elem ) {
+-						return false;
+-					}
+-				}
+-
+-				return true;
+-
+-			} else {
+-				Sizzle.error( name );
+-			}
+-		},
+-
+-		CHILD: function( elem, match ) {
+-			var type = match[1],
+-				node = elem;
+-
+-			switch ( type ) {
+-				case "only":
+-				case "first":
+-					while ( (node = node.previousSibling) )	 {
+-						if ( node.nodeType === 1 ) { 
+-							return false; 
+-						}
+-					}
+-
+-					if ( type === "first" ) { 
+-						return true; 
+-					}
+-
+-					node = elem;
+-
+-				case "last":
+-					while ( (node = node.nextSibling) )	 {
+-						if ( node.nodeType === 1 ) { 
+-							return false; 
+-						}
+-					}
+-
+-					return true;
+-
+-				case "nth":
+-					var first = match[2],
+-						last = match[3];
+-
+-					if ( first === 1 && last === 0 ) {
+-						return true;
+-					}
+-					
+-					var doneName = match[0],
+-						parent = elem.parentNode;
+-	
+-					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+-						var count = 0;
+-						
+-						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+-							if ( node.nodeType === 1 ) {
+-								node.nodeIndex = ++count;
+-							}
+-						} 
+-
+-						parent.sizcache = doneName;
+-					}
+-					
+-					var diff = elem.nodeIndex - last;
+-
+-					if ( first === 0 ) {
+-						return diff === 0;
+-
+-					} else {
+-						return ( diff % first === 0 && diff / first >= 0 );
+-					}
+-			}
+-		},
+-
+-		ID: function( elem, match ) {
+-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+-		},
+-
+-		TAG: function( elem, match ) {
+-			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+-		},
+-		
+-		CLASS: function( elem, match ) {
+-			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+-				.indexOf( match ) > -1;
+-		},
+-
+-		ATTR: function( elem, match ) {
+-			var name = match[1],
+-				result = Expr.attrHandle[ name ] ?
+-					Expr.attrHandle[ name ]( elem ) :
+-					elem[ name ] != null ?
+-						elem[ name ] :
+-						elem.getAttribute( name ),
+-				value = result + "",
+-				type = match[2],
+-				check = match[4];
+-
+-			return result == null ?
+-				type === "!=" :
+-				type === "=" ?
+-				value === check :
+-				type === "*=" ?
+-				value.indexOf(check) >= 0 :
+-				type === "~=" ?
+-				(" " + value + " ").indexOf(check) >= 0 :
+-				!check ?
+-				value && result !== false :
+-				type === "!=" ?
+-				value !== check :
+-				type === "^=" ?
+-				value.indexOf(check) === 0 :
+-				type === "$=" ?
+-				value.substr(value.length - check.length) === check :
+-				type === "|=" ?
+-				value === check || value.substr(0, check.length + 1) === check + "-" :
+-				false;
+-		},
+-
+-		POS: function( elem, match, i, array ) {
+-			var name = match[2],
+-				filter = Expr.setFilters[ name ];
+-
+-			if ( filter ) {
+-				return filter( elem, i, match, array );
+-			}
+-		}
+-	}
+-};
+-
+-var origPOS = Expr.match.POS,
+-	fescape = function(all, num){
+-		return "\\" + (num - 0 + 1);
+-	};
+-
+-for ( var type in Expr.match ) {
+-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+-}
+-
+-var makeArray = function( array, results ) {
+-	array = Array.prototype.slice.call( array, 0 );
+-
+-	if ( results ) {
+-		results.push.apply( results, array );
+-		return results;
+-	}
+-	
+-	return array;
+-};
+-
+-// Perform a simple check to determine if the browser is capable of
+-// converting a NodeList to an array using builtin methods.
+-// Also verifies that the returned array holds DOM nodes
+-// (which is not the case in the Blackberry browser)
+-try {
+-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+-
+-// Provide a fallback method if it does not work
+-} catch( e ) {
+-	makeArray = function( array, results ) {
+-		var i = 0,
+-			ret = results || [];
+-
+-		if ( toString.call(array) === "[object Array]" ) {
+-			Array.prototype.push.apply( ret, array );
+-
+-		} else {
+-			if ( typeof array.length === "number" ) {
+-				for ( var l = array.length; i < l; i++ ) {
+-					ret.push( array[i] );
+-				}
+-
+-			} else {
+-				for ( ; array[i]; i++ ) {
+-					ret.push( array[i] );
+-				}
+-			}
+-		}
+-
+-		return ret;
+-	};
+-}
+-
+-var sortOrder, siblingCheck;
+-
+-if ( document.documentElement.compareDocumentPosition ) {
+-	sortOrder = function( a, b ) {
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-		}
+-
+-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+-			return a.compareDocumentPosition ? -1 : 1;
+-		}
+-
+-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+-	};
+-
+-} else {
+-	sortOrder = function( a, b ) {
+-		// The nodes are identical, we can exit early
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-
+-		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+-		} else if ( a.sourceIndex && b.sourceIndex ) {
+-			return a.sourceIndex - b.sourceIndex;
+-		}
+-
+-		var al, bl,
+-			ap = [],
+-			bp = [],
+-			aup = a.parentNode,
+-			bup = b.parentNode,
+-			cur = aup;
+-
+-		// If the nodes are siblings (or identical) we can do a quick check
+-		if ( aup === bup ) {
+-			return siblingCheck( a, b );
+-
+-		// If no parents were found then the nodes are disconnected
+-		} else if ( !aup ) {
+-			return -1;
+-
+-		} else if ( !bup ) {
+-			return 1;
+-		}
+-
+-		// Otherwise they're somewhere else in the tree so we need
+-		// to build up a full list of the parentNodes for comparison
+-		while ( cur ) {
+-			ap.unshift( cur );
+-			cur = cur.parentNode;
+-		}
+-
+-		cur = bup;
+-
+-		while ( cur ) {
+-			bp.unshift( cur );
+-			cur = cur.parentNode;
+-		}
+-
+-		al = ap.length;
+-		bl = bp.length;
+-
+-		// Start walking down the tree looking for a discrepancy
+-		for ( var i = 0; i < al && i < bl; i++ ) {
+-			if ( ap[i] !== bp[i] ) {
+-				return siblingCheck( ap[i], bp[i] );
+-			}
+-		}
+-
+-		// We ended someplace up the tree so do a sibling check
+-		return i === al ?
+-			siblingCheck( a, bp[i], -1 ) :
+-			siblingCheck( ap[i], b, 1 );
+-	};
+-
+-	siblingCheck = function( a, b, ret ) {
+-		if ( a === b ) {
+-			return ret;
+-		}
+-
+-		var cur = a.nextSibling;
+-
+-		while ( cur ) {
+-			if ( cur === b ) {
+-				return -1;
+-			}
+-
+-			cur = cur.nextSibling;
+-		}
+-
+-		return 1;
+-	};
+-}
+-
+-// Utility function for retreiving the text value of an array of DOM nodes
+-Sizzle.getText = function( elems ) {
+-	var ret = "", elem;
+-
+-	for ( var i = 0; elems[i]; i++ ) {
+-		elem = elems[i];
+-
+-		// Get the text from text nodes and CDATA nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+-			ret += elem.nodeValue;
+-
+-		// Traverse everything else, except comment nodes
+-		} else if ( elem.nodeType !== 8 ) {
+-			ret += Sizzle.getText( elem.childNodes );
+-		}
+-	}
+-
+-	return ret;
+-};
+-
+-// Check to see if the browser returns elements by name when
+-// querying by getElementById (and provide a workaround)
+-(function(){
+-	// We're going to inject a fake input element with a specified name
+-	var form = document.createElement("div"),
+-		id = "script" + (new Date()).getTime(),
+-		root = document.documentElement;
+-
+-	form.innerHTML = "<a name='" + id + "'/>";
+-
+-	// Inject it into the root element, check its status, and remove it quickly
+-	root.insertBefore( form, root.firstChild );
+-
+-	// The workaround has to do additional checks after a getElementById
+-	// Which slows things down for other browsers (hence the branching)
+-	if ( document.getElementById( id ) ) {
+-		Expr.find.ID = function( match, context, isXML ) {
+-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+-				var m = context.getElementById(match[1]);
+-
+-				return m ?
+-					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+-						[m] :
+-						undefined :
+-					[];
+-			}
+-		};
+-
+-		Expr.filter.ID = function( elem, match ) {
+-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+-
+-			return elem.nodeType === 1 && node && node.nodeValue === match;
+-		};
+-	}
+-
+-	root.removeChild( form );
+-
+-	// release memory in IE
+-	root = form = null;
+-})();
+-
+-(function(){
+-	// Check to see if the browser returns only elements
+-	// when doing getElementsByTagName("*")
+-
+-	// Create a fake element
+-	var div = document.createElement("div");
+-	div.appendChild( document.createComment("") );
+-
+-	// Make sure no comments are found
+-	if ( div.getElementsByTagName("*").length > 0 ) {
+-		Expr.find.TAG = function( match, context ) {
+-			var results = context.getElementsByTagName( match[1] );
+-
+-			// Filter out possible comments
+-			if ( match[1] === "*" ) {
+-				var tmp = [];
+-
+-				for ( var i = 0; results[i]; i++ ) {
+-					if ( results[i].nodeType === 1 ) {
+-						tmp.push( results[i] );
+-					}
+-				}
+-
+-				results = tmp;
+-			}
+-
+-			return results;
+-		};
+-	}
+-
+-	// Check to see if an attribute returns normalized href attributes
+-	div.innerHTML = "<a href='#'></a>";
+-
+-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+-			div.firstChild.getAttribute("href") !== "#" ) {
+-
+-		Expr.attrHandle.href = function( elem ) {
+-			return elem.getAttribute( "href", 2 );
+-		};
+-	}
+-
+-	// release memory in IE
+-	div = null;
+-})();
+-
+-if ( document.querySelectorAll ) {
+-	(function(){
+-		var oldSizzle = Sizzle,
+-			div = document.createElement("div"),
+-			id = "__sizzle__";
+-
+-		div.innerHTML = "<p class='TEST'></p>";
+-
+-		// Safari can't handle uppercase or unicode characters when
+-		// in quirks mode.
+-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+-			return;
+-		}
+-	
+-		Sizzle = function( query, context, extra, seed ) {
+-			context = context || document;
+-
+-			// Only use querySelectorAll on non-XML documents
+-			// (ID selectors don't work in non-HTML documents)
+-			if ( !seed && !Sizzle.isXML(context) ) {
+-				// See if we find a selector to speed up
+-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+-				
+-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+-					// Speed-up: Sizzle("TAG")
+-					if ( match[1] ) {
+-						return makeArray( context.getElementsByTagName( query ), extra );
+-					
+-					// Speed-up: Sizzle(".CLASS")
+-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+-						return makeArray( context.getElementsByClassName( match[2] ), extra );
+-					}
+-				}
+-				
+-				if ( context.nodeType === 9 ) {
+-					// Speed-up: Sizzle("body")
+-					// The body element only exists once, optimize finding it
+-					if ( query === "body" && context.body ) {
+-						return makeArray( [ context.body ], extra );
+-						
+-					// Speed-up: Sizzle("#ID")
+-					} else if ( match && match[3] ) {
+-						var elem = context.getElementById( match[3] );
+-
+-						// Check parentNode to catch when Blackberry 4.6 returns
+-						// nodes that are no longer in the document #6963
+-						if ( elem && elem.parentNode ) {
+-							// Handle the case where IE and Opera return items
+-							// by name instead of ID
+-							if ( elem.id === match[3] ) {
+-								return makeArray( [ elem ], extra );
+-							}
+-							
+-						} else {
+-							return makeArray( [], extra );
+-						}
+-					}
+-					
+-					try {
+-						return makeArray( context.querySelectorAll(query), extra );
+-					} catch(qsaError) {}
+-
+-				// qSA works strangely on Element-rooted queries
+-				// We can work around this by specifying an extra ID on the root
+-				// and working up from there (Thanks to Andrew Dupont for the technique)
+-				// IE 8 doesn't work on object elements
+-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+-					var oldContext = context,
+-						old = context.getAttribute( "id" ),
+-						nid = old || id,
+-						hasParent = context.parentNode,
+-						relativeHierarchySelector = /^\s*[+~]/.test( query );
+-
+-					if ( !old ) {
+-						context.setAttribute( "id", nid );
+-					} else {
+-						nid = nid.replace( /'/g, "\\$&" );
+-					}
+-					if ( relativeHierarchySelector && hasParent ) {
+-						context = context.parentNode;
+-					}
+-
+-					try {
+-						if ( !relativeHierarchySelector || hasParent ) {
+-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+-						}
+-
+-					} catch(pseudoError) {
+-					} finally {
+-						if ( !old ) {
+-							oldContext.removeAttribute( "id" );
+-						}
+-					}
+-				}
+-			}
+-		
+-			return oldSizzle(query, context, extra, seed);
+-		};
+-
+-		for ( var prop in oldSizzle ) {
+-			Sizzle[ prop ] = oldSizzle[ prop ];
+-		}
+-
+-		// release memory in IE
+-		div = null;
+-	})();
+-}
+-
+-(function(){
+-	var html = document.documentElement,
+-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+-
+-	if ( matches ) {
+-		// Check to see if it's possible to do matchesSelector
+-		// on a disconnected node (IE 9 fails this)
+-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+-			pseudoWorks = false;
+-
+-		try {
+-			// This should fail with an exception
+-			// Gecko does not error, returns false instead
+-			matches.call( document.documentElement, "[test!='']:sizzle" );
+-	
+-		} catch( pseudoError ) {
+-			pseudoWorks = true;
+-		}
+-
+-		Sizzle.matchesSelector = function( node, expr ) {
+-			// Make sure that attribute selectors are quoted
+-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+-
+-			if ( !Sizzle.isXML( node ) ) {
+-				try { 
+-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+-						var ret = matches.call( node, expr );
+-
+-						// IE 9's matchesSelector returns false on disconnected nodes
+-						if ( ret || !disconnectedMatch ||
+-								// As well, disconnected nodes are said to be in a document
+-								// fragment in IE 9, so check for that
+-								node.document && node.document.nodeType !== 11 ) {
+-							return ret;
+-						}
+-					}
+-				} catch(e) {}
+-			}
+-
+-			return Sizzle(expr, null, null, [node]).length > 0;
+-		};
+-	}
+-})();
+-
+-(function(){
+-	var div = document.createElement("div");
+-
+-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+-
+-	// Opera can't find a second classname (in 9.6)
+-	// Also, make sure that getElementsByClassName actually exists
+-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+-		return;
+-	}
+-
+-	// Safari caches class attributes, doesn't catch changes (in 3.2)
+-	div.lastChild.className = "e";
+-
+-	if ( div.getElementsByClassName("e").length === 1 ) {
+-		return;
+-	}
+-	
+-	Expr.order.splice(1, 0, "CLASS");
+-	Expr.find.CLASS = function( match, context, isXML ) {
+-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+-			return context.getElementsByClassName(match[1]);
+-		}
+-	};
+-
+-	// release memory in IE
+-	div = null;
+-})();
+-
+-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+-		var elem = checkSet[i];
+-
+-		if ( elem ) {
+-			var match = false;
+-
+-			elem = elem[dir];
+-
+-			while ( elem ) {
+-				if ( elem.sizcache === doneName ) {
+-					match = checkSet[elem.sizset];
+-					break;
+-				}
+-
+-				if ( elem.nodeType === 1 && !isXML ){
+-					elem.sizcache = doneName;
+-					elem.sizset = i;
+-				}
+-
+-				if ( elem.nodeName.toLowerCase() === cur ) {
+-					match = elem;
+-					break;
+-				}
+-
+-				elem = elem[dir];
+-			}
+-
+-			checkSet[i] = match;
+-		}
+-	}
+-}
+-
+-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+-		var elem = checkSet[i];
+-
+-		if ( elem ) {
+-			var match = false;
+-			
+-			elem = elem[dir];
+-
+-			while ( elem ) {
+-				if ( elem.sizcache === doneName ) {
+-					match = checkSet[elem.sizset];
+-					break;
+-				}
+-
+-				if ( elem.nodeType === 1 ) {
+-					if ( !isXML ) {
+-						elem.sizcache = doneName;
+-						elem.sizset = i;
+-					}
+-
+-					if ( typeof cur !== "string" ) {
+-						if ( elem === cur ) {
+-							match = true;
+-							break;
+-						}
+-
+-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+-						match = elem;
+-						break;
+-					}
+-				}
+-
+-				elem = elem[dir];
+-			}
+-
+-			checkSet[i] = match;
+-		}
+-	}
+-}
+-
+-if ( document.documentElement.contains ) {
+-	Sizzle.contains = function( a, b ) {
+-		return a !== b && (a.contains ? a.contains(b) : true);
+-	};
+-
+-} else if ( document.documentElement.compareDocumentPosition ) {
+-	Sizzle.contains = function( a, b ) {
+-		return !!(a.compareDocumentPosition(b) & 16);
+-	};
+-
+-} else {
+-	Sizzle.contains = function() {
+-		return false;
+-	};
+-}
+-
+-Sizzle.isXML = function( elem ) {
+-	// documentElement is verified for cases where it doesn't yet exist
+-	// (such as loading iframes in IE - #4833) 
+-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+-
+-	return documentElement ? documentElement.nodeName !== "HTML" : false;
+-};
+-
+-var posProcess = function( selector, context ) {
+-	var match,
+-		tmpSet = [],
+-		later = "",
+-		root = context.nodeType ? [context] : context;
+-
+-	// Position selectors must be done after the filter
+-	// And so must :not(positional) so we move all PSEUDOs to the end
+-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+-		later += match[0];
+-		selector = selector.replace( Expr.match.PSEUDO, "" );
+-	}
+-
+-	selector = Expr.relative[selector] ? selector + "*" : selector;
+-
+-	for ( var i = 0, l = root.length; i < l; i++ ) {
+-		Sizzle( selector, root[i], tmpSet );
+-	}
+-
+-	return Sizzle.filter( later, tmpSet );
+-};
+-
+-// EXPOSE
+-jQuery.find = Sizzle;
+-jQuery.expr = Sizzle.selectors;
+-jQuery.expr[":"] = jQuery.expr.filters;
+-jQuery.unique = Sizzle.uniqueSort;
+-jQuery.text = Sizzle.getText;
+-jQuery.isXMLDoc = Sizzle.isXML;
+-jQuery.contains = Sizzle.contains;
+-
+-
+-})();
+-
+-
+-var runtil = /Until$/,
+-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+-	// Note: This RegExp should be improved, or likely pulled from Sizzle
+-	rmultiselector = /,/,
+-	isSimple = /^.[^:#\[\.,]*$/,
+-	slice = Array.prototype.slice,
+-	POS = jQuery.expr.match.POS,
+-	// methods guaranteed to produce a unique set when starting from a unique set
+-	guaranteedUnique = {
+-		children: true,
+-		contents: true,
+-		next: true,
+-		prev: true
+-	};
+-
+-jQuery.fn.extend({
+-	find: function( selector ) {
+-		var self = this,
+-			i, l;
+-
+-		if ( typeof selector !== "string" ) {
+-			return jQuery( selector ).filter(function() {
+-				for ( i = 0, l = self.length; i < l; i++ ) {
+-					if ( jQuery.contains( self[ i ], this ) ) {
+-						return true;
+-					}
+-				}
+-			});
+-		}
+-
+-		var ret = this.pushStack( "", "find", selector ),
+-			length, n, r;
+-
+-		for ( i = 0, l = this.length; i < l; i++ ) {
+-			length = ret.length;
+-			jQuery.find( selector, this[i], ret );
+-
+-			if ( i > 0 ) {
+-				// Make sure that the results are unique
+-				for ( n = length; n < ret.length; n++ ) {
+-					for ( r = 0; r < length; r++ ) {
+-						if ( ret[r] === ret[n] ) {
+-							ret.splice(n--, 1);
+-							break;
+-						}
+-					}
+-				}
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	has: function( target ) {
+-		var targets = jQuery( target );
+-		return this.filter(function() {
+-			for ( var i = 0, l = targets.length; i < l; i++ ) {
+-				if ( jQuery.contains( this, targets[i] ) ) {
+-					return true;
+-				}
+-			}
+-		});
+-	},
+-
+-	not: function( selector ) {
+-		return this.pushStack( winnow(this, selector, false), "not", selector);
+-	},
+-
+-	filter: function( selector ) {
+-		return this.pushStack( winnow(this, selector, true), "filter", selector );
+-	},
+-
+-	is: function( selector ) {
+-		return !!selector && ( typeof selector === "string" ?
+-			jQuery.filter( selector, this ).length > 0 :
+-			this.filter( selector ).length > 0 );
+-	},
+-
+-	closest: function( selectors, context ) {
+-		var ret = [], i, l, cur = this[0];
+-		
+-		// Array
+-		if ( jQuery.isArray( selectors ) ) {
+-			var match, selector,
+-				matches = {},
+-				level = 1;
+-
+-			if ( cur && selectors.length ) {
+-				for ( i = 0, l = selectors.length; i < l; i++ ) {
+-					selector = selectors[i];
+-
+-					if ( !matches[ selector ] ) {
+-						matches[ selector ] = POS.test( selector ) ?
+-							jQuery( selector, context || this.context ) :
+-							selector;
+-					}
+-				}
+-
+-				while ( cur && cur.ownerDocument && cur !== context ) {
+-					for ( selector in matches ) {
+-						match = matches[ selector ];
+-
+-						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
+-							ret.push({ selector: selector, elem: cur, level: level });
+-						}
+-					}
+-
+-					cur = cur.parentNode;
+-					level++;
+-				}
+-			}
+-
+-			return ret;
+-		}
+-
+-		// String
+-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+-				jQuery( selectors, context || this.context ) :
+-				0;
+-
+-		for ( i = 0, l = this.length; i < l; i++ ) {
+-			cur = this[i];
+-
+-			while ( cur ) {
+-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+-					ret.push( cur );
+-					break;
+-
+-				} else {
+-					cur = cur.parentNode;
+-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+-						break;
+-					}
+-				}
+-			}
+-		}
+-
+-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+-
+-		return this.pushStack( ret, "closest", selectors );
+-	},
+-
+-	// Determine the position of an element within
+-	// the matched set of elements
+-	index: function( elem ) {
+-		if ( !elem || typeof elem === "string" ) {
+-			return jQuery.inArray( this[0],
+-				// If it receives a string, the selector is used
+-				// If it receives nothing, the siblings are used
+-				elem ? jQuery( elem ) : this.parent().children() );
+-		}
+-		// Locate the position of the desired element
+-		return jQuery.inArray(
+-			// If it receives a jQuery object, the first element is used
+-			elem.jquery ? elem[0] : elem, this );
+-	},
+-
+-	add: function( selector, context ) {
+-		var set = typeof selector === "string" ?
+-				jQuery( selector, context ) :
+-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+-			all = jQuery.merge( this.get(), set );
+-
+-		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+-			all :
+-			jQuery.unique( all ) );
+-	},
+-
+-	andSelf: function() {
+-		return this.add( this.prevObject );
+-	}
+-});
+-
+-// A painfully simple check to see if an element is disconnected
+-// from a document (should be improved, where feasible).
+-function isDisconnected( node ) {
+-	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+-}
+-
+-jQuery.each({
+-	parent: function( elem ) {
+-		var parent = elem.parentNode;
+-		return parent && parent.nodeType !== 11 ? parent : null;
+-	},
+-	parents: function( elem ) {
+-		return jQuery.dir( elem, "parentNode" );
+-	},
+-	parentsUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "parentNode", until );
+-	},
+-	next: function( elem ) {
+-		return jQuery.nth( elem, 2, "nextSibling" );
+-	},
+-	prev: function( elem ) {
+-		return jQuery.nth( elem, 2, "previousSibling" );
+-	},
+-	nextAll: function( elem ) {
+-		return jQuery.dir( elem, "nextSibling" );
+-	},
+-	prevAll: function( elem ) {
+-		return jQuery.dir( elem, "previousSibling" );
+-	},
+-	nextUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "nextSibling", until );
+-	},
+-	prevUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "previousSibling", until );
+-	},
+-	siblings: function( elem ) {
+-		return jQuery.sibling( elem.parentNode.firstChild, elem );
+-	},
+-	children: function( elem ) {
+-		return jQuery.sibling( elem.firstChild );
+-	},
+-	contents: function( elem ) {
+-		return jQuery.nodeName( elem, "iframe" ) ?
+-			elem.contentDocument || elem.contentWindow.document :
+-			jQuery.makeArray( elem.childNodes );
+-	}
+-}, function( name, fn ) {
+-	jQuery.fn[ name ] = function( until, selector ) {
+-		var ret = jQuery.map( this, fn, until ),
+-			// The variable 'args' was introduced in
+-			// https://github.com/jquery/jquery/commit/52a0238
+-			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+-			// http://code.google.com/p/v8/issues/detail?id=1050
+-			args = slice.call(arguments);
+-
+-		if ( !runtil.test( name ) ) {
+-			selector = until;
+-		}
+-
+-		if ( selector && typeof selector === "string" ) {
+-			ret = jQuery.filter( selector, ret );
+-		}
+-
+-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+-
+-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+-			ret = ret.reverse();
+-		}
+-
+-		return this.pushStack( ret, name, args.join(",") );
+-	};
+-});
+-
+-jQuery.extend({
+-	filter: function( expr, elems, not ) {
+-		if ( not ) {
+-			expr = ":not(" + expr + ")";
+-		}
+-
+-		return elems.length === 1 ?
+-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+-			jQuery.find.matches(expr, elems);
+-	},
+-
+-	dir: function( elem, dir, until ) {
+-		var matched = [],
+-			cur = elem[ dir ];
+-
+-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+-			if ( cur.nodeType === 1 ) {
+-				matched.push( cur );
+-			}
+-			cur = cur[dir];
+-		}
+-		return matched;
+-	},
+-
+-	nth: function( cur, result, dir, elem ) {
+-		result = result || 1;
+-		var num = 0;
+-
+-		for ( ; cur; cur = cur[dir] ) {
+-			if ( cur.nodeType === 1 && ++num === result ) {
+-				break;
+-			}
+-		}
+-
+-		return cur;
+-	},
+-
+-	sibling: function( n, elem ) {
+-		var r = [];
+-
+-		for ( ; n; n = n.nextSibling ) {
+-			if ( n.nodeType === 1 && n !== elem ) {
+-				r.push( n );
+-			}
+-		}
+-
+-		return r;
+-	}
+-});
+-
+-// Implement the identical functionality for filter and not
+-function winnow( elements, qualifier, keep ) {
+-
+-	// Can't pass null or undefined to indexOf in Firefox 4
+-	// Set to 0 to skip string check
+-	qualifier = qualifier || 0;
+-
+-	if ( jQuery.isFunction( qualifier ) ) {
+-		return jQuery.grep(elements, function( elem, i ) {
+-			var retVal = !!qualifier.call( elem, i, elem );
+-			return retVal === keep;
+-		});
+-
+-	} else if ( qualifier.nodeType ) {
+-		return jQuery.grep(elements, function( elem, i ) {
+-			return (elem === qualifier) === keep;
+-		});
+-
+-	} else if ( typeof qualifier === "string" ) {
+-		var filtered = jQuery.grep(elements, function( elem ) {
+-			return elem.nodeType === 1;
+-		});
+-
+-		if ( isSimple.test( qualifier ) ) {
+-			return jQuery.filter(qualifier, filtered, !keep);
+-		} else {
+-			qualifier = jQuery.filter( qualifier, filtered );
+-		}
+-	}
+-
+-	return jQuery.grep(elements, function( elem, i ) {
+-		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+-	});
+-}
+-
+-
+-
+-
+-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+-	rleadingWhitespace = /^\s+/,
+-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+-	rtagName = /<([\w:]+)/,
+-	rtbody = /<tbody/i,
+-	rhtml = /<|&#?\w+;/,
+-	rnocache = /<(?:script|object|embed|option|style)/i,
+-	// checked="checked" or checked
+-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+-	rscriptType = /\/(java|ecma)script/i,
+-	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+-	wrapMap = {
+-		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, "", "" ]
+-	};
+-
+-wrapMap.optgroup = wrapMap.option;
+-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+-wrapMap.th = wrapMap.td;
+-
+-// IE can't serialize <link> and <script> tags normally
+-if ( !jQuery.support.htmlSerialize ) {
+-	wrapMap._default = [ 1, "div<div>", "</div>" ];
+-}
+-
+-jQuery.fn.extend({
+-	text: function( text ) {
+-		if ( jQuery.isFunction(text) ) {
+-			return this.each(function(i) {
+-				var self = jQuery( this );
+-
+-				self.text( text.call(this, i, self.text()) );
+-			});
+-		}
+-
+-		if ( typeof text !== "object" && text !== undefined ) {
+-			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+-		}
+-
+-		return jQuery.text( this );
+-	},
+-
+-	wrapAll: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapAll( html.call(this, i) );
+-			});
+-		}
+-
+-		if ( this[0] ) {
+-			// The elements to wrap the target around
+-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+-
+-			if ( this[0].parentNode ) {
+-				wrap.insertBefore( this[0] );
+-			}
+-
+-			wrap.map(function() {
+-				var elem = this;
+-
+-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+-					elem = elem.firstChild;
+-				}
+-
+-				return elem;
+-			}).append( this );
+-		}
+-
+-		return this;
+-	},
+-
+-	wrapInner: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapInner( html.call(this, i) );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			var self = jQuery( this ),
+-				contents = self.contents();
+-
+-			if ( contents.length ) {
+-				contents.wrapAll( html );
+-
+-			} else {
+-				self.append( html );
+-			}
+-		});
+-	},
+-
+-	wrap: function( html ) {
+-		return this.each(function() {
+-			jQuery( this ).wrapAll( html );
+-		});
+-	},
+-
+-	unwrap: function() {
+-		return this.parent().each(function() {
+-			if ( !jQuery.nodeName( this, "body" ) ) {
+-				jQuery( this ).replaceWith( this.childNodes );
+-			}
+-		}).end();
+-	},
+-
+-	append: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 ) {
+-				this.appendChild( elem );
+-			}
+-		});
+-	},
+-
+-	prepend: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 ) {
+-				this.insertBefore( elem, this.firstChild );
+-			}
+-		});
+-	},
+-
+-	before: function() {
+-		if ( this[0] && this[0].parentNode ) {
+-			return this.domManip(arguments, false, function( elem ) {
+-				this.parentNode.insertBefore( elem, this );
+-			});
+-		} else if ( arguments.length ) {
+-			var set = jQuery(arguments[0]);
+-			set.push.apply( set, this.toArray() );
+-			return this.pushStack( set, "before", arguments );
+-		}
+-	},
+-
+-	after: function() {
+-		if ( this[0] && this[0].parentNode ) {
+-			return this.domManip(arguments, false, function( elem ) {
+-				this.parentNode.insertBefore( elem, this.nextSibling );
+-			});
+-		} else if ( arguments.length ) {
+-			var set = this.pushStack( this, "after", arguments );
+-			set.push.apply( set, jQuery(arguments[0]).toArray() );
+-			return set;
+-		}
+-	},
+-
+-	// keepData is for internal use only--do not document
+-	remove: function( selector, keepData ) {
+-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+-			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+-				if ( !keepData && elem.nodeType === 1 ) {
+-					jQuery.cleanData( elem.getElementsByTagName("*") );
+-					jQuery.cleanData( [ elem ] );
+-				}
+-
+-				if ( elem.parentNode ) {
+-					elem.parentNode.removeChild( elem );
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	empty: function() {
+-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+-			// Remove element nodes and prevent memory leaks
+-			if ( elem.nodeType === 1 ) {
+-				jQuery.cleanData( elem.getElementsByTagName("*") );
+-			}
+-
+-			// Remove any remaining nodes
+-			while ( elem.firstChild ) {
+-				elem.removeChild( elem.firstChild );
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	clone: function( dataAndEvents, deepDataAndEvents ) {
+-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+-
+-		return this.map( function () {
+-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+-		});
+-	},
+-
+-	html: function( value ) {
+-		if ( value === undefined ) {
+-			return this[0] && this[0].nodeType === 1 ?
+-				this[0].innerHTML.replace(rinlinejQuery, "") :
+-				null;
+-
+-		// See if we can take a shortcut and just use innerHTML
+-		} else if ( typeof value === "string" && !rnocache.test( value ) &&
+-			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+-			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+-
+-			value = value.replace(rxhtmlTag, "<$1></$2>");
+-
+-			try {
+-				for ( var i = 0, l = this.length; i < l; i++ ) {
+-					// Remove element nodes and prevent memory leaks
+-					if ( this[i].nodeType === 1 ) {
+-						jQuery.cleanData( this[i].getElementsByTagName("*") );
+-						this[i].innerHTML = value;
+-					}
+-				}
+-
+-			// If using innerHTML throws an exception, use the fallback method
+-			} catch(e) {
+-				this.empty().append( value );
+-			}
+-
+-		} else if ( jQuery.isFunction( value ) ) {
+-			this.each(function(i){
+-				var self = jQuery( this );
+-
+-				self.html( value.call(this, i, self.html()) );
+-			});
+-
+-		} else {
+-			this.empty().append( value );
+-		}
+-
+-		return this;
+-	},
+-
+-	replaceWith: function( value ) {
+-		if ( this[0] && this[0].parentNode ) {
+-			// Make sure that the elements are removed from the DOM before they are inserted
+-			// this can help fix replacing a parent with child elements
+-			if ( jQuery.isFunction( value ) ) {
+-				return this.each(function(i) {
+-					var self = jQuery(this), old = self.html();
+-					self.replaceWith( value.call( this, i, old ) );
+-				});
+-			}
+-
+-			if ( typeof value !== "string" ) {
+-				value = jQuery( value ).detach();
+-			}
+-
+-			return this.each(function() {
+-				var next = this.nextSibling,
+-					parent = this.parentNode;
+-
+-				jQuery( this ).remove();
+-
+-				if ( next ) {
+-					jQuery(next).before( value );
+-				} else {
+-					jQuery(parent).append( value );
+-				}
+-			});
+-		} else {
+-			return this.length ?
+-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+-				this;
+-		}
+-	},
+-
+-	detach: function( selector ) {
+-		return this.remove( selector, true );
+-	},
+-
+-	domManip: function( args, table, callback ) {
+-		var results, first, fragment, parent,
+-			value = args[0],
+-			scripts = [];
+-
+-		// We can't cloneNode fragments that contain checked, in WebKit
+-		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+-			return this.each(function() {
+-				jQuery(this).domManip( args, table, callback, true );
+-			});
+-		}
+-
+-		if ( jQuery.isFunction(value) ) {
+-			return this.each(function(i) {
+-				var self = jQuery(this);
+-				args[0] = value.call(this, i, table ? self.html() : undefined);
+-				self.domManip( args, table, callback );
+-			});
+-		}
+-
+-		if ( this[0] ) {
+-			parent = value && value.parentNode;
+-
+-			// If we're in a fragment, just use that instead of building a new one
+-			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+-				results = { fragment: parent };
+-
+-			} else {
+-				results = jQuery.buildFragment( args, this, scripts );
+-			}
+-
+-			fragment = results.fragment;
+-
+-			if ( fragment.childNodes.length === 1 ) {
+-				first = fragment = fragment.firstChild;
+-			} else {
+-				first = fragment.firstChild;
+-			}
+-
+-			if ( first ) {
+-				table = table && jQuery.nodeName( first, "tr" );
+-
+-				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+-					callback.call(
+-						table ?
+-							root(this[i], first) :
+-							this[i],
+-						// Make sure that we do not leak memory by inadvertently discarding
+-						// the original fragment (which might have attached data) instead of
+-						// using it; in addition, use the original fragment object for the last
+-						// item instead of first because it can end up being emptied incorrectly
+-						// in certain situations (Bug #8070).
+-						// Fragments from the fragment cache must always be cloned and never used
+-						// in place.
+-						results.cacheable || (l > 1 && i < lastIndex) ?
+-							jQuery.clone( fragment, true, true ) :
+-							fragment
+-					);
+-				}
+-			}
+-
+-			if ( scripts.length ) {
+-				jQuery.each( scripts, evalScript );
+-			}
+-		}
+-
+-		return this;
+-	}
+-});
+-
+-function root( elem, cur ) {
+-	return jQuery.nodeName(elem, "table") ?
+-		(elem.getElementsByTagName("tbody")[0] ||
+-		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+-		elem;
+-}
+-
+-function cloneCopyEvent( src, dest ) {
+-
+-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+-		return;
+-	}
+-
+-	var internalKey = jQuery.expando,
+-		oldData = jQuery.data( src ),
+-		curData = jQuery.data( dest, oldData );
+-
+-	// Switch to use the internal data object, if it exists, for the next
+-	// stage of data copying
+-	if ( (oldData = oldData[ internalKey ]) ) {
+-		var events = oldData.events;
+-				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
+-
+-		if ( events ) {
+-			delete curData.handle;
+-			curData.events = {};
+-
+-			for ( var type in events ) {
+-				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+-					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+-				}
+-			}
+-		}
+-	}
+-}
+-
+-function cloneFixAttributes( src, dest ) {
+-	var nodeName;
+-
+-	// We do not need to do anything for non-Elements
+-	if ( dest.nodeType !== 1 ) {
+-		return;
+-	}
+-
+-	// clearAttributes removes the attributes, which we don't want,
+-	// but also removes the attachEvent events, which we *do* want
+-	if ( dest.clearAttributes ) {
+-		dest.clearAttributes();
+-	}
+-
+-	// mergeAttributes, in contrast, only merges back on the
+-	// original attributes, not the events
+-	if ( dest.mergeAttributes ) {
+-		dest.mergeAttributes( src );
+-	}
+-
+-	nodeName = dest.nodeName.toLowerCase();
+-
+-	// IE6-8 fail to clone children inside object elements that use
+-	// the proprietary classid attribute value (rather than the type
+-	// attribute) to identify the type of content to display
+-	if ( nodeName === "object" ) {
+-		dest.outerHTML = src.outerHTML;
+-
+-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+-		// IE6-8 fails to persist the checked state of a cloned checkbox
+-		// or radio button. Worse, IE6-7 fail to give the cloned element
+-		// a checked appearance if the defaultChecked value isn't also set
+-		if ( src.checked ) {
+-			dest.defaultChecked = dest.checked = src.checked;
+-		}
+-
+-		// IE6-7 get confused and end up setting the value of a cloned
+-		// checkbox/radio button to an empty string instead of "on"
+-		if ( dest.value !== src.value ) {
+-			dest.value = src.value;
+-		}
+-
+-	// IE6-8 fails to return the selected option to the default selected
+-	// state when cloning options
+-	} else if ( nodeName === "option" ) {
+-		dest.selected = src.defaultSelected;
+-
+-	// IE6-8 fails to set the defaultValue to the correct value when
+-	// cloning other types of input fields
+-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+-		dest.defaultValue = src.defaultValue;
+-	}
+-
+-	// Event data gets referenced instead of copied if the expando
+-	// gets copied too
+-	dest.removeAttribute( jQuery.expando );
+-}
+-
+-jQuery.buildFragment = function( args, nodes, scripts ) {
+-	var fragment, cacheable, cacheresults, doc;
+-
+-  // nodes may contain either an explicit document object,
+-  // a jQuery collection or context object.
+-  // If nodes[0] contains a valid object to assign to doc
+-  if ( nodes && nodes[0] ) {
+-    doc = nodes[0].ownerDocument || nodes[0];
+-  }
+-
+-  // Ensure that an attr object doesn't incorrectly stand in as a document object
+-	// Chrome and Firefox seem to allow this to occur and will throw exception
+-	// Fixes #8950
+-	if ( !doc.createDocumentFragment ) {
+-		doc = document;
+-	}
+-
+-	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+-	// Cloning options loses the selected state, so don't cache them
+-	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+-	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+-	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+-		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+-
+-		cacheable = true;
+-
+-		cacheresults = jQuery.fragments[ args[0] ];
+-		if ( cacheresults && cacheresults !== 1 ) {
+-			fragment = cacheresults;
+-		}
+-	}
+-
+-	if ( !fragment ) {
+-		fragment = doc.createDocumentFragment();
+-		jQuery.clean( args, doc, fragment, scripts );
+-	}
+-
+-	if ( cacheable ) {
+-		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+-	}
+-
+-	return { fragment: fragment, cacheable: cacheable };
+-};
+-
+-jQuery.fragments = {};
+-
+-jQuery.each({
+-	appendTo: "append",
+-	prependTo: "prepend",
+-	insertBefore: "before",
+-	insertAfter: "after",
+-	replaceAll: "replaceWith"
+-}, function( name, original ) {
+-	jQuery.fn[ name ] = function( selector ) {
+-		var ret = [],
+-			insert = jQuery( selector ),
+-			parent = this.length === 1 && this[0].parentNode;
+-
+-		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+-			insert[ original ]( this[0] );
+-			return this;
+-
+-		} else {
+-			for ( var i = 0, l = insert.length; i < l; i++ ) {
+-				var elems = (i > 0 ? this.clone(true) : this).get();
+-				jQuery( insert[i] )[ original ]( elems );
+-				ret = ret.concat( elems );
+-			}
+-
+-			return this.pushStack( ret, name, insert.selector );
+-		}
+-	};
+-});
+-
+-function getAll( elem ) {
+-	if ( "getElementsByTagName" in elem ) {
+-		return elem.getElementsByTagName( "*" );
+-
+-	} else if ( "querySelectorAll" in elem ) {
+-		return elem.querySelectorAll( "*" );
+-
+-	} else {
+-		return [];
+-	}
+-}
+-
+-// Used in clean, fixes the defaultChecked property
+-function fixDefaultChecked( elem ) {
+-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
+-		elem.defaultChecked = elem.checked;
+-	}
+-}
+-// Finds all inputs and passes them to fixDefaultChecked
+-function findInputs( elem ) {
+-	if ( jQuery.nodeName( elem, "input" ) ) {
+-		fixDefaultChecked( elem );
+-	} else if ( "getElementsByTagName" in elem ) {
+-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+-	}
+-}
+-
+-jQuery.extend({
+-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+-		var clone = elem.cloneNode(true),
+-				srcElements,
+-				destElements,
+-				i;
+-
+-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+-			// IE copies events bound via attachEvent when using cloneNode.
+-			// Calling detachEvent on the clone will also remove the events
+-			// from the original. In order to get around this, we use some
+-			// proprietary methods to clear the events. Thanks to MooTools
+-			// guys for this hotness.
+-
+-			cloneFixAttributes( elem, clone );
+-
+-			// Using Sizzle here is crazy slow, so we use getElementsByTagName
+-			// instead
+-			srcElements = getAll( elem );
+-			destElements = getAll( clone );
+-
+-			// Weird iteration because IE will replace the length property
+-			// with an element if you are cloning the body and one of the
+-			// elements on the page has a name or id of "length"
+-			for ( i = 0; srcElements[i]; ++i ) {
+-				cloneFixAttributes( srcElements[i], destElements[i] );
+-			}
+-		}
+-
+-		// Copy the events from the original to the clone
+-		if ( dataAndEvents ) {
+-			cloneCopyEvent( elem, clone );
+-
+-			if ( deepDataAndEvents ) {
+-				srcElements = getAll( elem );
+-				destElements = getAll( clone );
+-
+-				for ( i = 0; srcElements[i]; ++i ) {
+-					cloneCopyEvent( srcElements[i], destElements[i] );
+-				}
+-			}
+-		}
+-
+-		srcElements = destElements = null;
+-
+-		// Return the cloned set
+-		return clone;
+-	},
+-
+-	clean: function( elems, context, fragment, scripts ) {
+-		var checkScriptType;
+-
+-		context = context || document;
+-
+-		// !context.createElement fails in IE with an error but returns typeof 'object'
+-		if ( typeof context.createElement === "undefined" ) {
+-			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+-		}
+-
+-		var ret = [], j;
+-
+-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-			if ( typeof elem === "number" ) {
+-				elem += "";
+-			}
+-
+-			if ( !elem ) {
+-				continue;
+-			}
+-
+-			// Convert html string into DOM nodes
+-			if ( typeof elem === "string" ) {
+-				if ( !rhtml.test( elem ) ) {
+-					elem = context.createTextNode( elem );
+-				} else {
+-					// Fix "XHTML"-style tags in all browsers
+-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
+-
+-					// Trim whitespace, otherwise indexOf won't work as expected
+-					var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+-						wrap = wrapMap[ tag ] || wrapMap._default,
+-						depth = wrap[0],
+-						div = context.createElement("div");
+-
+-					// Go to html and back, then peel off extra wrappers
+-					div.innerHTML = wrap[1] + elem + wrap[2];
+-
+-					// Move to the right depth
+-					while ( depth-- ) {
+-						div = div.lastChild;
+-					}
+-
+-					// Remove IE's autoinserted <tbody> from table fragments
+-					if ( !jQuery.support.tbody ) {
+-
+-						// String was a <table>, *may* have spurious <tbody>
+-						var hasBody = rtbody.test(elem),
+-							tbody = tag === "table" && !hasBody ?
+-								div.firstChild && div.firstChild.childNodes :
+-
+-								// String was a bare <thead> or <tfoot>
+-								wrap[1] === "<table>" && !hasBody ?
+-									div.childNodes :
+-									[];
+-
+-						for ( j = tbody.length - 1; j >= 0 ; --j ) {
+-							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+-								tbody[ j ].parentNode.removeChild( tbody[ j ] );
+-							}
+-						}
+-					}
+-
+-					// IE completely kills leading whitespace when innerHTML is used
+-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+-						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+-					}
+-
+-					elem = div.childNodes;
+-				}
+-			}
+-
+-			// Resets defaultChecked for any radios and checkboxes
+-			// about to be appended to the DOM in IE 6/7 (#8060)
+-			var len;
+-			if ( !jQuery.support.appendChecked ) {
+-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
+-					for ( j = 0; j < len; j++ ) {
+-						findInputs( elem[j] );
+-					}
+-				} else {
+-					findInputs( elem );
+-				}
+-			}
+-
+-			if ( elem.nodeType ) {
+-				ret.push( elem );
+-			} else {
+-				ret = jQuery.merge( ret, elem );
+-			}
+-		}
+-
+-		if ( fragment ) {
+-			checkScriptType = function( elem ) {
+-				return !elem.type || rscriptType.test( elem.type );
+-			};
+-			for ( i = 0; ret[i]; i++ ) {
+-				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+-					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+-
+-				} else {
+-					if ( ret[i].nodeType === 1 ) {
+-						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+-
+-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+-					}
+-					fragment.appendChild( ret[i] );
+-				}
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	cleanData: function( elems ) {
+-		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
+-			deleteExpando = jQuery.support.deleteExpando;
+-
+-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+-				continue;
+-			}
+-
+-			id = elem[ jQuery.expando ];
+-
+-			if ( id ) {
+-				data = cache[ id ] && cache[ id ][ internalKey ];
+-
+-				if ( data && data.events ) {
+-					for ( var type in data.events ) {
+-						if ( special[ type ] ) {
+-							jQuery.event.remove( elem, type );
+-
+-						// This is a shortcut to avoid jQuery.event.remove's overhead
+-						} else {
+-							jQuery.removeEvent( elem, type, data.handle );
+-						}
+-					}
+-
+-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
+-					if ( data.handle ) {
+-						data.handle.elem = null;
+-					}
+-				}
+-
+-				if ( deleteExpando ) {
+-					delete elem[ jQuery.expando ];
+-
+-				} else if ( elem.removeAttribute ) {
+-					elem.removeAttribute( jQuery.expando );
+-				}
+-
+-				delete cache[ id ];
+-			}
+-		}
+-	}
+-});
+-
+-function evalScript( i, elem ) {
+-	if ( elem.src ) {
+-		jQuery.ajax({
+-			url: elem.src,
+-			async: false,
+-			dataType: "script"
+-		});
+-	} else {
+-		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+-	}
+-
+-	if ( elem.parentNode ) {
+-		elem.parentNode.removeChild( elem );
+-	}
+-}
+-
+-
+-
+-var ralpha = /alpha\([^)]*\)/i,
+-	ropacity = /opacity=([^)]*)/,
+-	// fixed for IE9, see #8346
+-	rupper = /([A-Z]|^ms)/g,
+-	rnumpx = /^-?\d+(?:px)?$/i,
+-	rnum = /^-?\d/,
+-	rrelNum = /^[+\-]=/,
+-	rrelNumFilter = /[^+\-\.\de]+/g,
+-
+-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+-	cssWidth = [ "Left", "Right" ],
+-	cssHeight = [ "Top", "Bottom" ],
+-	curCSS,
+-
+-	getComputedStyle,
+-	currentStyle;
+-
+-jQuery.fn.css = function( name, value ) {
+-	// Setting 'undefined' is a no-op
+-	if ( arguments.length === 2 && value === undefined ) {
+-		return this;
+-	}
+-
+-	return jQuery.access( this, name, value, true, function( elem, name, value ) {
+-		return value !== undefined ?
+-			jQuery.style( elem, name, value ) :
+-			jQuery.css( elem, name );
+-	});
+-};
+-
+-jQuery.extend({
+-	// Add in style property hooks for overriding the default
+-	// behavior of getting and setting a style property
+-	cssHooks: {
+-		opacity: {
+-			get: function( elem, computed ) {
+-				if ( computed ) {
+-					// We should always get a number back from opacity
+-					var ret = curCSS( elem, "opacity", "opacity" );
+-					return ret === "" ? "1" : ret;
+-
+-				} else {
+-					return elem.style.opacity;
+-				}
+-			}
+-		}
+-	},
+-
+-	// Exclude the following css properties to add px
+-	cssNumber: {
+-		"fillOpacity": true,
+-		"fontWeight": true,
+-		"lineHeight": true,
+-		"opacity": true,
+-		"orphans": true,
+-		"widows": true,
+-		"zIndex": true,
+-		"zoom": true
+-	},
+-
+-	// Add in properties whose names you wish to fix before
+-	// setting or getting the value
+-	cssProps: {
+-		// normalize float css property
+-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+-	},
+-
+-	// Get and set the style property on a DOM Node
+-	style: function( elem, name, value, extra ) {
+-		// Don't set styles on text and comment nodes
+-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+-			return;
+-		}
+-
+-		// Make sure that we're working with the right name
+-		var ret, type, origName = jQuery.camelCase( name ),
+-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
+-
+-		name = jQuery.cssProps[ origName ] || origName;
+-
+-		// Check if we're setting a value
+-		if ( value !== undefined ) {
+-			type = typeof value;
+-
+-			// Make sure that NaN and null values aren't set. See: #7116
+-			if ( type === "number" && isNaN( value ) || value == null ) {
+-				return;
+-			}
+-
+-			// convert relative number strings (+= or -=) to relative numbers. #7345
+-			if ( type === "string" && rrelNum.test( value ) ) {
+-				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+-				// Fixes bug #9237
+-				type = "number";
+-			}
+-
+-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+-				value += "px";
+-			}
+-
+-			// If a hook was provided, use that value, otherwise just set the specified value
+-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+-				// Fixes bug #5509
+-				try {
+-					style[ name ] = value;
+-				} catch(e) {}
+-			}
+-
+-		} else {
+-			// If a hook was provided get the non-computed value from there
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+-				return ret;
+-			}
+-
+-			// Otherwise just get the value from the style object
+-			return style[ name ];
+-		}
+-	},
+-
+-	css: function( elem, name, extra ) {
+-		var ret, hooks;
+-
+-		// Make sure that we're working with the right name
+-		name = jQuery.camelCase( name );
+-		hooks = jQuery.cssHooks[ name ];
+-		name = jQuery.cssProps[ name ] || name;
+-
+-		// cssFloat needs a special treatment
+-		if ( name === "cssFloat" ) {
+-			name = "float";
+-		}
+-
+-		// If a hook was provided get the computed value from there
+-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+-			return ret;
+-
+-		// Otherwise, if a way to get the computed value exists, use that
+-		} else if ( curCSS ) {
+-			return curCSS( elem, name );
+-		}
+-	},
+-
+-	// A method for quickly swapping in/out CSS properties to get correct calculations
+-	swap: function( elem, options, callback ) {
+-		var old = {};
+-
+-		// Remember the old values, and insert the new ones
+-		for ( var name in options ) {
+-			old[ name ] = elem.style[ name ];
+-			elem.style[ name ] = options[ name ];
+-		}
+-
+-		callback.call( elem );
+-
+-		// Revert the old values
+-		for ( name in options ) {
+-			elem.style[ name ] = old[ name ];
+-		}
+-	}
+-});
+-
+-// DEPRECATED, Use jQuery.css() instead
+-jQuery.curCSS = jQuery.css;
+-
+-jQuery.each(["height", "width"], function( i, name ) {
+-	jQuery.cssHooks[ name ] = {
+-		get: function( elem, computed, extra ) {
+-			var val;
+-
+-			if ( computed ) {
+-				if ( elem.offsetWidth !== 0 ) {
+-					return getWH( elem, name, extra );
+-				} else {
+-					jQuery.swap( elem, cssShow, function() {
+-						val = getWH( elem, name, extra );
+-					});
+-				}
+-
+-				return val;
+-			}
+-		},
+-
+-		set: function( elem, value ) {
+-			if ( rnumpx.test( value ) ) {
+-				// ignore negative width and height values #1599
+-				value = parseFloat( value );
+-
+-				if ( value >= 0 ) {
+-					return value + "px";
+-				}
+-
+-			} else {
+-				return value;
+-			}
+-		}
+-	};
+-});
+-
+-if ( !jQuery.support.opacity ) {
+-	jQuery.cssHooks.opacity = {
+-		get: function( elem, computed ) {
+-			// IE uses filters for opacity
+-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
+-				computed ? "1" : "";
+-		},
+-
+-		set: function( elem, value ) {
+-			var style = elem.style,
+-				currentStyle = elem.currentStyle;
+-
+-			// IE has trouble with opacity if it does not have layout
+-			// Force it by setting the zoom level
+-			style.zoom = 1;
+-
+-			// Set the alpha filter to set the opacity
+-			var opacity = jQuery.isNaN( value ) ?
+-				"" :
+-				"alpha(opacity=" + value * 100 + ")",
+-				filter = currentStyle && currentStyle.filter || style.filter || "";
+-
+-			style.filter = ralpha.test( filter ) ?
+-				filter.replace( ralpha, opacity ) :
+-				filter + " " + opacity;
+-		}
+-	};
+-}
+-
+-jQuery(function() {
+-	// This hook cannot be added until DOM ready because the support test
+-	// for it is not run until after DOM ready
+-	if ( !jQuery.support.reliableMarginRight ) {
+-		jQuery.cssHooks.marginRight = {
+-			get: function( elem, computed ) {
+-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-				// Work around by temporarily setting element display to inline-block
+-				var ret;
+-				jQuery.swap( elem, { "display": "inline-block" }, function() {
+-					if ( computed ) {
+-						ret = curCSS( elem, "margin-right", "marginRight" );
+-					} else {
+-						ret = elem.style.marginRight;
+-					}
+-				});
+-				return ret;
+-			}
+-		};
+-	}
+-});
+-
+-if ( document.defaultView && document.defaultView.getComputedStyle ) {
+-	getComputedStyle = function( elem, name ) {
+-		var ret, defaultView, computedStyle;
+-
+-		name = name.replace( rupper, "-$1" ).toLowerCase();
+-
+-		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+-			return undefined;
+-		}
+-
+-		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+-			ret = computedStyle.getPropertyValue( name );
+-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+-				ret = jQuery.style( elem, name );
+-			}
+-		}
+-
+-		return ret;
+-	};
+-}
+-
+-if ( document.documentElement.currentStyle ) {
+-	currentStyle = function( elem, name ) {
+-		var left,
+-			ret = elem.currentStyle && elem.currentStyle[ name ],
+-			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
+-			style = elem.style;
+-
+-		// From the awesome hack by Dean Edwards
+-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+-
+-		// If we're not dealing with a regular pixel number
+-		// but a number that has a weird ending, we need to convert it to pixels
+-		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+-			// Remember the original values
+-			left = style.left;
+-
+-			// Put in the new values to get a computed value out
+-			if ( rsLeft ) {
+-				elem.runtimeStyle.left = elem.currentStyle.left;
+-			}
+-			style.left = name === "fontSize" ? "1em" : (ret || 0);
+-			ret = style.pixelLeft + "px";
+-
+-			// Revert the changed values
+-			style.left = left;
+-			if ( rsLeft ) {
+-				elem.runtimeStyle.left = rsLeft;
+-			}
+-		}
+-
+-		return ret === "" ? "auto" : ret;
+-	};
+-}
+-
+-curCSS = getComputedStyle || currentStyle;
+-
+-function getWH( elem, name, extra ) {
+-
+-	// Start with offset property
+-	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+-		which = name === "width" ? cssWidth : cssHeight;
+-
+-	if ( val > 0 ) {
+-		if ( extra !== "border" ) {
+-			jQuery.each( which, function() {
+-				if ( !extra ) {
+-					val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+-				}
+-				if ( extra === "margin" ) {
+-					val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+-				} else {
+-					val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+-				}
+-			});
+-		}
+-
+-		return val + "px";
+-	}
+-
+-	// Fall back to computed then uncomputed css if necessary
+-	val = curCSS( elem, name, name );
+-	if ( val < 0 || val == null ) {
+-		val = elem.style[ name ] || 0;
+-	}
+-	// Normalize "", auto, and prepare for extra
+-	val = parseFloat( val ) || 0;
+-
+-	// Add padding, border, margin
+-	if ( extra ) {
+-		jQuery.each( which, function() {
+-			val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+-			if ( extra !== "padding" ) {
+-				val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+-			}
+-			if ( extra === "margin" ) {
+-				val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+-			}
+-		});
+-	}
+-
+-	return val + "px";
+-}
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.hidden = function( elem ) {
+-		var width = elem.offsetWidth,
+-			height = elem.offsetHeight;
+-
+-		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+-	};
+-
+-	jQuery.expr.filters.visible = function( elem ) {
+-		return !jQuery.expr.filters.hidden( elem );
+-	};
+-}
+-
+-
+-
+-
+-var r20 = /%20/g,
+-	rbracket = /\[\]$/,
+-	rCRLF = /\r?\n/g,
+-	rhash = /#.*$/,
+-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+-	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+-	// #7653, #8125, #8152: local protocol detection
+-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
+-	rnoContent = /^(?:GET|HEAD)$/,
+-	rprotocol = /^\/\//,
+-	rquery = /\?/,
+-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+-	rselectTextarea = /^(?:select|textarea)/i,
+-	rspacesAjax = /\s+/,
+-	rts = /([?&])_=[^&]*/,
+-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+-
+-	// Keep a copy of the old load method
+-	_load = jQuery.fn.load,
+-
+-	/* Prefilters
+-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+-	 * 2) These are called:
+-	 *    - BEFORE asking for a transport
+-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+-	 * 3) key is the dataType
+-	 * 4) the catchall symbol "*" can be used
+-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+-	 */
+-	prefilters = {},
+-
+-	/* Transports bindings
+-	 * 1) key is the dataType
+-	 * 2) the catchall symbol "*" can be used
+-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+-	 */
+-	transports = {},
+-
+-	// Document location
+-	ajaxLocation,
+-
+-	// Document location segments
+-	ajaxLocParts;
+-
+-// #8138, IE may throw an exception when accessing
+-// a field from window.location if document.domain has been set
+-try {
+-	ajaxLocation = location.href;
+-} catch( e ) {
+-	// Use the href attribute of an A element
+-	// since IE will modify it given document.location
+-	ajaxLocation = document.createElement( "a" );
+-	ajaxLocation.href = "";
+-	ajaxLocation = ajaxLocation.href;
+-}
+-
+-// Segment location into parts
+-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+-
+-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+-function addToPrefiltersOrTransports( structure ) {
+-
+-	// dataTypeExpression is optional and defaults to "*"
+-	return function( dataTypeExpression, func ) {
+-
+-		if ( typeof dataTypeExpression !== "string" ) {
+-			func = dataTypeExpression;
+-			dataTypeExpression = "*";
+-		}
+-
+-		if ( jQuery.isFunction( func ) ) {
+-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+-				i = 0,
+-				length = dataTypes.length,
+-				dataType,
+-				list,
+-				placeBefore;
+-
+-			// For each dataType in the dataTypeExpression
+-			for(; i < length; i++ ) {
+-				dataType = dataTypes[ i ];
+-				// We control if we're asked to add before
+-				// any existing element
+-				placeBefore = /^\+/.test( dataType );
+-				if ( placeBefore ) {
+-					dataType = dataType.substr( 1 ) || "*";
+-				}
+-				list = structure[ dataType ] = structure[ dataType ] || [];
+-				// then we add to the structure accordingly
+-				list[ placeBefore ? "unshift" : "push" ]( func );
+-			}
+-		}
+-	};
+-}
+-
+-// Base inspection function for prefilters and transports
+-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+-		dataType /* internal */, inspected /* internal */ ) {
+-
+-	dataType = dataType || options.dataTypes[ 0 ];
+-	inspected = inspected || {};
+-
+-	inspected[ dataType ] = true;
+-
+-	var list = structure[ dataType ],
+-		i = 0,
+-		length = list ? list.length : 0,
+-		executeOnly = ( structure === prefilters ),
+-		selection;
+-
+-	for(; i < length && ( executeOnly || !selection ); i++ ) {
+-		selection = list[ i ]( options, originalOptions, jqXHR );
+-		// If we got redirected to another dataType
+-		// we try there if executing only and not done already
+-		if ( typeof selection === "string" ) {
+-			if ( !executeOnly || inspected[ selection ] ) {
+-				selection = undefined;
+-			} else {
+-				options.dataTypes.unshift( selection );
+-				selection = inspectPrefiltersOrTransports(
+-						structure, options, originalOptions, jqXHR, selection, inspected );
+-			}
+-		}
+-	}
+-	// If we're only executing or nothing was selected
+-	// we try the catchall dataType if not done already
+-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+-		selection = inspectPrefiltersOrTransports(
+-				structure, options, originalOptions, jqXHR, "*", inspected );
+-	}
+-	// unnecessary when only executing (prefilters)
+-	// but it'll be ignored by the caller in that case
+-	return selection;
+-}
+-
+-jQuery.fn.extend({
+-	load: function( url, params, callback ) {
+-		if ( typeof url !== "string" && _load ) {
+-			return _load.apply( this, arguments );
+-
+-		// Don't do a request if no elements are being requested
+-		} else if ( !this.length ) {
+-			return this;
+-		}
+-
+-		var off = url.indexOf( " " );
+-		if ( off >= 0 ) {
+-			var selector = url.slice( off, url.length );
+-			url = url.slice( 0, off );
+-		}
+-
+-		// Default to a GET request
+-		var type = "GET";
+-
+-		// If the second parameter was provided
+-		if ( params ) {
+-			// If it's a function
+-			if ( jQuery.isFunction( params ) ) {
+-				// We assume that it's the callback
+-				callback = params;
+-				params = undefined;
+-
+-			// Otherwise, build a param string
+-			} else if ( typeof params === "object" ) {
+-				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+-				type = "POST";
+-			}
+-		}
+-
+-		var self = this;
+-
+-		// Request the remote document
+-		jQuery.ajax({
+-			url: url,
+-			type: type,
+-			dataType: "html",
+-			data: params,
+-			// Complete callback (responseText is used internally)
+-			complete: function( jqXHR, status, responseText ) {
+-				// Store the response as specified by the jqXHR object
+-				responseText = jqXHR.responseText;
+-				// If successful, inject the HTML into all the matched elements
+-				if ( jqXHR.isResolved() ) {
+-					// #4825: Get the actual response in case
+-					// a dataFilter is present in ajaxSettings
+-					jqXHR.done(function( r ) {
+-						responseText = r;
+-					});
+-					// See if a selector was specified
+-					self.html( selector ?
+-						// Create a dummy div to hold the results
+-						jQuery("<div>")
+-							// inject the contents of the document in, removing the scripts
+-							// to avoid any 'Permission Denied' errors in IE
+-							.append(responseText.replace(rscript, ""))
+-
+-							// Locate the specified elements
+-							.find(selector) :
+-
+-						// If not, just inject the full result
+-						responseText );
+-				}
+-
+-				if ( callback ) {
+-					self.each( callback, [ responseText, status, jqXHR ] );
+-				}
+-			}
+-		});
+-
+-		return this;
+-	},
+-
+-	serialize: function() {
+-		return jQuery.param( this.serializeArray() );
+-	},
+-
+-	serializeArray: function() {
+-		return this.map(function(){
+-			return this.elements ? jQuery.makeArray( this.elements ) : this;
+-		})
+-		.filter(function(){
+-			return this.name && !this.disabled &&
+-				( this.checked || rselectTextarea.test( this.nodeName ) ||
+-					rinput.test( this.type ) );
+-		})
+-		.map(function( i, elem ){
+-			var val = jQuery( this ).val();
+-
+-			return val == null ?
+-				null :
+-				jQuery.isArray( val ) ?
+-					jQuery.map( val, function( val, i ){
+-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-					}) :
+-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-		}).get();
+-	}
+-});
+-
+-// Attach a bunch of functions for handling common AJAX events
+-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+-	jQuery.fn[ o ] = function( f ){
+-		return this.bind( o, f );
+-	};
+-});
+-
+-jQuery.each( [ "get", "post" ], function( i, method ) {
+-	jQuery[ method ] = function( url, data, callback, type ) {
+-		// shift arguments if data argument was omitted
+-		if ( jQuery.isFunction( data ) ) {
+-			type = type || callback;
+-			callback = data;
+-			data = undefined;
+-		}
+-
+-		return jQuery.ajax({
+-			type: method,
+-			url: url,
+-			data: data,
+-			success: callback,
+-			dataType: type
+-		});
+-	};
+-});
+-
+-jQuery.extend({
+-
+-	getScript: function( url, callback ) {
+-		return jQuery.get( url, undefined, callback, "script" );
+-	},
+-
+-	getJSON: function( url, data, callback ) {
+-		return jQuery.get( url, data, callback, "json" );
+-	},
+-
+-	// Creates a full fledged settings object into target
+-	// with both ajaxSettings and settings fields.
+-	// If target is omitted, writes into ajaxSettings.
+-	ajaxSetup: function ( target, settings ) {
+-		if ( !settings ) {
+-			// Only one parameter, we extend ajaxSettings
+-			settings = target;
+-			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+-		} else {
+-			// target was provided, we extend into it
+-			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
+-		}
+-		// Flatten fields we don't want deep extended
+-		for( var field in { context: 1, url: 1 } ) {
+-			if ( field in settings ) {
+-				target[ field ] = settings[ field ];
+-			} else if( field in jQuery.ajaxSettings ) {
+-				target[ field ] = jQuery.ajaxSettings[ field ];
+-			}
+-		}
+-		return target;
+-	},
+-
+-	ajaxSettings: {
+-		url: ajaxLocation,
+-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+-		global: true,
+-		type: "GET",
+-		contentType: "application/x-www-form-urlencoded",
+-		processData: true,
+-		async: true,
+-		/*
+-		timeout: 0,
+-		data: null,
+-		dataType: null,
+-		username: null,
+-		password: null,
+-		cache: null,
+-		traditional: false,
+-		headers: {},
+-		*/
+-
+-		accepts: {
+-			xml: "application/xml, text/xml",
+-			html: "text/html",
+-			text: "text/plain",
+-			json: "application/json, text/javascript",
+-			"*": "*/*"
+-		},
+-
+-		contents: {
+-			xml: /xml/,
+-			html: /html/,
+-			json: /json/
+-		},
+-
+-		responseFields: {
+-			xml: "responseXML",
+-			text: "responseText"
+-		},
+-
+-		// List of data converters
+-		// 1) key format is "source_type destination_type" (a single space in-between)
+-		// 2) the catchall symbol "*" can be used for source_type
+-		converters: {
+-
+-			// Convert anything to text
+-			"* text": window.String,
+-
+-			// Text to html (true = no transformation)
+-			"text html": true,
+-
+-			// Evaluate text as a json expression
+-			"text json": jQuery.parseJSON,
+-
+-			// Parse text as xml
+-			"text xml": jQuery.parseXML
+-		}
+-	},
+-
+-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+-	ajaxTransport: addToPrefiltersOrTransports( transports ),
+-
+-	// Main method
+-	ajax: function( url, options ) {
+-
+-		// If url is an object, simulate pre-1.5 signature
+-		if ( typeof url === "object" ) {
+-			options = url;
+-			url = undefined;
+-		}
+-
+-		// Force options to be an object
+-		options = options || {};
+-
+-		var // Create the final options object
+-			s = jQuery.ajaxSetup( {}, options ),
+-			// Callbacks context
+-			callbackContext = s.context || s,
+-			// Context for global events
+-			// It's the callbackContext if one was provided in the options
+-			// and if it's a DOM node or a jQuery collection
+-			globalEventContext = callbackContext !== s &&
+-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+-						jQuery( callbackContext ) : jQuery.event,
+-			// Deferreds
+-			deferred = jQuery.Deferred(),
+-			completeDeferred = jQuery._Deferred(),
+-			// Status-dependent callbacks
+-			statusCode = s.statusCode || {},
+-			// ifModified key
+-			ifModifiedKey,
+-			// Headers (they are sent all at once)
+-			requestHeaders = {},
+-			requestHeadersNames = {},
+-			// Response headers
+-			responseHeadersString,
+-			responseHeaders,
+-			// transport
+-			transport,
+-			// timeout handle
+-			timeoutTimer,
+-			// Cross-domain detection vars
+-			parts,
+-			// The jqXHR state
+-			state = 0,
+-			// To know if global events are to be dispatched
+-			fireGlobals,
+-			// Loop variable
+-			i,
+-			// Fake xhr
+-			jqXHR = {
+-
+-				readyState: 0,
+-
+-				// Caches the header
+-				setRequestHeader: function( name, value ) {
+-					if ( !state ) {
+-						var lname = name.toLowerCase();
+-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+-						requestHeaders[ name ] = value;
+-					}
+-					return this;
+-				},
+-
+-				// Raw string
+-				getAllResponseHeaders: function() {
+-					return state === 2 ? responseHeadersString : null;
+-				},
+-
+-				// Builds headers hashtable if needed
+-				getResponseHeader: function( key ) {
+-					var match;
+-					if ( state === 2 ) {
+-						if ( !responseHeaders ) {
+-							responseHeaders = {};
+-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+-							}
+-						}
+-						match = responseHeaders[ key.toLowerCase() ];
+-					}
+-					return match === undefined ? null : match;
+-				},
+-
+-				// Overrides response content-type header
+-				overrideMimeType: function( type ) {
+-					if ( !state ) {
+-						s.mimeType = type;
+-					}
+-					return this;
+-				},
+-
+-				// Cancel the request
+-				abort: function( statusText ) {
+-					statusText = statusText || "abort";
+-					if ( transport ) {
+-						transport.abort( statusText );
+-					}
+-					done( 0, statusText );
+-					return this;
+-				}
+-			};
+-
+-		// Callback for when everything is done
+-		// It is defined here because jslint complains if it is declared
+-		// at the end of the function (which would be more logical and readable)
+-		function done( status, statusText, responses, headers ) {
+-
+-			// Called once
+-			if ( state === 2 ) {
+-				return;
+-			}
+-
+-			// State is "done" now
+-			state = 2;
+-
+-			// Clear timeout if it exists
+-			if ( timeoutTimer ) {
+-				clearTimeout( timeoutTimer );
+-			}
+-
+-			// Dereference transport for early garbage collection
+-			// (no matter how long the jqXHR object will be used)
+-			transport = undefined;
+-
+-			// Cache response headers
+-			responseHeadersString = headers || "";
+-
+-			// Set readyState
+-			jqXHR.readyState = status ? 4 : 0;
+-
+-			var isSuccess,
+-				success,
+-				error,
+-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+-				lastModified,
+-				etag;
+-
+-			// If successful, handle type chaining
+-			if ( status >= 200 && status < 300 || status === 304 ) {
+-
+-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-				if ( s.ifModified ) {
+-
+-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
+-					}
+-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+-						jQuery.etag[ ifModifiedKey ] = etag;
+-					}
+-				}
+-
+-				// If not modified
+-				if ( status === 304 ) {
+-
+-					statusText = "notmodified";
+-					isSuccess = true;
+-
+-				// If we have data
+-				} else {
+-
+-					try {
+-						success = ajaxConvert( s, response );
+-						statusText = "success";
+-						isSuccess = true;
+-					} catch(e) {
+-						// We have a parsererror
+-						statusText = "parsererror";
+-						error = e;
+-					}
+-				}
+-			} else {
+-				// We extract error from statusText
+-				// then normalize statusText and status for non-aborts
+-				error = statusText;
+-				if( !statusText || status ) {
+-					statusText = "error";
+-					if ( status < 0 ) {
+-						status = 0;
+-					}
+-				}
+-			}
+-
+-			// Set data for the fake xhr object
+-			jqXHR.status = status;
+-			jqXHR.statusText = statusText;
+-
+-			// Success/Error
+-			if ( isSuccess ) {
+-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+-			} else {
+-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+-			}
+-
+-			// Status-dependent callbacks
+-			jqXHR.statusCode( statusCode );
+-			statusCode = undefined;
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+-						[ jqXHR, s, isSuccess ? success : error ] );
+-			}
+-
+-			// Complete
+-			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
+-				// Handle the global AJAX counter
+-				if ( !( --jQuery.active ) ) {
+-					jQuery.event.trigger( "ajaxStop" );
+-				}
+-			}
+-		}
+-
+-		// Attach deferreds
+-		deferred.promise( jqXHR );
+-		jqXHR.success = jqXHR.done;
+-		jqXHR.error = jqXHR.fail;
+-		jqXHR.complete = completeDeferred.done;
+-
+-		// Status-dependent callbacks
+-		jqXHR.statusCode = function( map ) {
+-			if ( map ) {
+-				var tmp;
+-				if ( state < 2 ) {
+-					for( tmp in map ) {
+-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+-					}
+-				} else {
+-					tmp = map[ jqXHR.status ];
+-					jqXHR.then( tmp, tmp );
+-				}
+-			}
+-			return this;
+-		};
+-
+-		// Remove hash character (#7531: and string promotion)
+-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+-		// We also use the url parameter if available
+-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+-
+-		// Extract dataTypes list
+-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+-
+-		// Determine if a cross-domain request is in order
+-		if ( s.crossDomain == null ) {
+-			parts = rurl.exec( s.url.toLowerCase() );
+-			s.crossDomain = !!( parts &&
+-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+-			);
+-		}
+-
+-		// Convert data if not already a string
+-		if ( s.data && s.processData && typeof s.data !== "string" ) {
+-			s.data = jQuery.param( s.data, s.traditional );
+-		}
+-
+-		// Apply prefilters
+-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+-
+-		// If request was aborted inside a prefiler, stop there
+-		if ( state === 2 ) {
+-			return false;
+-		}
+-
+-		// We can fire global events as of now if asked to
+-		fireGlobals = s.global;
+-
+-		// Uppercase the type
+-		s.type = s.type.toUpperCase();
+-
+-		// Determine if request has content
+-		s.hasContent = !rnoContent.test( s.type );
+-
+-		// Watch for a new set of requests
+-		if ( fireGlobals && jQuery.active++ === 0 ) {
+-			jQuery.event.trigger( "ajaxStart" );
+-		}
+-
+-		// More options handling for requests with no content
+-		if ( !s.hasContent ) {
+-
+-			// If data is available, append data to url
+-			if ( s.data ) {
+-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+-			}
+-
+-			// Get ifModifiedKey before adding the anti-cache parameter
+-			ifModifiedKey = s.url;
+-
+-			// Add anti-cache in url if needed
+-			if ( s.cache === false ) {
+-
+-				var ts = jQuery.now(),
+-					// try replacing _= if it is there
+-					ret = s.url.replace( rts, "$1_=" + ts );
+-
+-				// if nothing was replaced, add timestamp to the end
+-				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+-			}
+-		}
+-
+-		// Set the correct header, if data is being sent
+-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+-		}
+-
+-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-		if ( s.ifModified ) {
+-			ifModifiedKey = ifModifiedKey || s.url;
+-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
+-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+-			}
+-			if ( jQuery.etag[ ifModifiedKey ] ) {
+-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+-			}
+-		}
+-
+-		// Set the Accepts header for the server, depending on the dataType
+-		jqXHR.setRequestHeader(
+-			"Accept",
+-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
+-				s.accepts[ "*" ]
+-		);
+-
+-		// Check for headers option
+-		for ( i in s.headers ) {
+-			jqXHR.setRequestHeader( i, s.headers[ i ] );
+-		}
+-
+-		// Allow custom headers/mimetypes and early abort
+-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+-				// Abort if not done already
+-				jqXHR.abort();
+-				return false;
+-
+-		}
+-
+-		// Install callbacks on deferreds
+-		for ( i in { success: 1, error: 1, complete: 1 } ) {
+-			jqXHR[ i ]( s[ i ] );
+-		}
+-
+-		// Get transport
+-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+-
+-		// If no transport, we auto-abort
+-		if ( !transport ) {
+-			done( -1, "No Transport" );
+-		} else {
+-			jqXHR.readyState = 1;
+-			// Send global event
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+-			}
+-			// Timeout
+-			if ( s.async && s.timeout > 0 ) {
+-				timeoutTimer = setTimeout( function(){
+-					jqXHR.abort( "timeout" );
+-				}, s.timeout );
+-			}
+-
+-			try {
+-				state = 1;
+-				transport.send( requestHeaders, done );
+-			} catch (e) {
+-				// Propagate exception as error if not done
+-				if ( status < 2 ) {
+-					done( -1, e );
+-				// Simply rethrow otherwise
+-				} else {
+-					jQuery.error( e );
+-				}
+-			}
+-		}
+-
+-		return jqXHR;
+-	},
+-
+-	// Serialize an array of form elements or a set of
+-	// key/values into a query string
+-	param: function( a, traditional ) {
+-		var s = [],
+-			add = function( key, value ) {
+-				// If value is a function, invoke it and return its value
+-				value = jQuery.isFunction( value ) ? value() : value;
+-				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+-			};
+-
+-		// Set traditional to true for jQuery <= 1.3.2 behavior.
+-		if ( traditional === undefined ) {
+-			traditional = jQuery.ajaxSettings.traditional;
+-		}
+-
+-		// If an array was passed in, assume that it is an array of form elements.
+-		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+-			// Serialize the form elements
+-			jQuery.each( a, function() {
+-				add( this.name, this.value );
+-			});
+-
+-		} else {
+-			// If traditional, encode the "old" way (the way 1.3.2 or older
+-			// did it), otherwise encode params recursively.
+-			for ( var prefix in a ) {
+-				buildParams( prefix, a[ prefix ], traditional, add );
+-			}
+-		}
+-
+-		// Return the resulting serialization
+-		return s.join( "&" ).replace( r20, "+" );
+-	}
+-});
+-
+-function buildParams( prefix, obj, traditional, add ) {
+-	if ( jQuery.isArray( obj ) ) {
+-		// Serialize array item.
+-		jQuery.each( obj, function( i, v ) {
+-			if ( traditional || rbracket.test( prefix ) ) {
+-				// Treat each array item as a scalar.
+-				add( prefix, v );
+-
+-			} else {
+-				// If array item is non-scalar (array or object), encode its
+-				// numeric index to resolve deserialization ambiguity issues.
+-				// Note that rack (as of 1.0.0) can't currently deserialize
+-				// nested arrays properly, and attempting to do so may cause
+-				// a server error. Possible fixes are to modify rack's
+-				// deserialization algorithm or to provide an option or flag
+-				// to force array serialization to be shallow.
+-				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+-			}
+-		});
+-
+-	} else if ( !traditional && obj != null && typeof obj === "object" ) {
+-		// Serialize object item.
+-		for ( var name in obj ) {
+-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+-		}
+-
+-	} else {
+-		// Serialize scalar item.
+-		add( prefix, obj );
+-	}
+-}
+-
+-// This is still on the jQuery object... for now
+-// Want to move this to jQuery.ajax some day
+-jQuery.extend({
+-
+-	// Counter for holding the number of active queries
+-	active: 0,
+-
+-	// Last-Modified header cache for next request
+-	lastModified: {},
+-	etag: {}
+-
+-});
+-
+-/* Handles responses to an ajax request:
+- * - sets all responseXXX fields accordingly
+- * - finds the right dataType (mediates between content-type and expected dataType)
+- * - returns the corresponding response
+- */
+-function ajaxHandleResponses( s, jqXHR, responses ) {
+-
+-	var contents = s.contents,
+-		dataTypes = s.dataTypes,
+-		responseFields = s.responseFields,
+-		ct,
+-		type,
+-		finalDataType,
+-		firstDataType;
+-
+-	// Fill responseXXX fields
+-	for( type in responseFields ) {
+-		if ( type in responses ) {
+-			jqXHR[ responseFields[type] ] = responses[ type ];
+-		}
+-	}
+-
+-	// Remove auto dataType and get content-type in the process
+-	while( dataTypes[ 0 ] === "*" ) {
+-		dataTypes.shift();
+-		if ( ct === undefined ) {
+-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+-		}
+-	}
+-
+-	// Check if we're dealing with a known content-type
+-	if ( ct ) {
+-		for ( type in contents ) {
+-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+-				dataTypes.unshift( type );
+-				break;
+-			}
+-		}
+-	}
+-
+-	// Check to see if we have a response for the expected dataType
+-	if ( dataTypes[ 0 ] in responses ) {
+-		finalDataType = dataTypes[ 0 ];
+-	} else {
+-		// Try convertible dataTypes
+-		for ( type in responses ) {
+-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+-				finalDataType = type;
+-				break;
+-			}
+-			if ( !firstDataType ) {
+-				firstDataType = type;
+-			}
+-		}
+-		// Or just use first one
+-		finalDataType = finalDataType || firstDataType;
+-	}
+-
+-	// If we found a dataType
+-	// We add the dataType to the list if needed
+-	// and return the corresponding response
+-	if ( finalDataType ) {
+-		if ( finalDataType !== dataTypes[ 0 ] ) {
+-			dataTypes.unshift( finalDataType );
+-		}
+-		return responses[ finalDataType ];
+-	}
+-}
+-
+-// Chain conversions given the request and the original response
+-function ajaxConvert( s, response ) {
+-
+-	// Apply the dataFilter if provided
+-	if ( s.dataFilter ) {
+-		response = s.dataFilter( response, s.dataType );
+-	}
+-
+-	var dataTypes = s.dataTypes,
+-		converters = {},
+-		i,
+-		key,
+-		length = dataTypes.length,
+-		tmp,
+-		// Current and previous dataTypes
+-		current = dataTypes[ 0 ],
+-		prev,
+-		// Conversion expression
+-		conversion,
+-		// Conversion function
+-		conv,
+-		// Conversion functions (transitive conversion)
+-		conv1,
+-		conv2;
+-
+-	// For each dataType in the chain
+-	for( i = 1; i < length; i++ ) {
+-
+-		// Create converters map
+-		// with lowercased keys
+-		if ( i === 1 ) {
+-			for( key in s.converters ) {
+-				if( typeof key === "string" ) {
+-					converters[ key.toLowerCase() ] = s.converters[ key ];
+-				}
+-			}
+-		}
+-
+-		// Get the dataTypes
+-		prev = current;
+-		current = dataTypes[ i ];
+-
+-		// If current is auto dataType, update it to prev
+-		if( current === "*" ) {
+-			current = prev;
+-		// If no auto and dataTypes are actually different
+-		} else if ( prev !== "*" && prev !== current ) {
+-
+-			// Get the converter
+-			conversion = prev + " " + current;
+-			conv = converters[ conversion ] || converters[ "* " + current ];
+-
+-			// If there is no direct converter, search transitively
+-			if ( !conv ) {
+-				conv2 = undefined;
+-				for( conv1 in converters ) {
+-					tmp = conv1.split( " " );
+-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+-						conv2 = converters[ tmp[1] + " " + current ];
+-						if ( conv2 ) {
+-							conv1 = converters[ conv1 ];
+-							if ( conv1 === true ) {
+-								conv = conv2;
+-							} else if ( conv2 === true ) {
+-								conv = conv1;
+-							}
+-							break;
+-						}
+-					}
+-				}
+-			}
+-			// If we found no converter, dispatch an error
+-			if ( !( conv || conv2 ) ) {
+-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+-			}
+-			// If found converter is not an equivalence
+-			if ( conv !== true ) {
+-				// Convert with 1 or 2 converters accordingly
+-				response = conv ? conv( response ) : conv2( conv1(response) );
+-			}
+-		}
+-	}
+-	return response;
+-}
+-
+-
+-
+-
+-var jsc = jQuery.now(),
+-	jsre = /(\=)\?(&|$)|\?\?/i;
+-
+-// Default jsonp settings
+-jQuery.ajaxSetup({
+-	jsonp: "callback",
+-	jsonpCallback: function() {
+-		return jQuery.expando + "_" + ( jsc++ );
+-	}
+-});
+-
+-// Detect, normalize options and install callbacks for jsonp requests
+-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+-
+-	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+-		( typeof s.data === "string" );
+-
+-	if ( s.dataTypes[ 0 ] === "jsonp" ||
+-		s.jsonp !== false && ( jsre.test( s.url ) ||
+-				inspectData && jsre.test( s.data ) ) ) {
+-
+-		var responseContainer,
+-			jsonpCallback = s.jsonpCallback =
+-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+-			previous = window[ jsonpCallback ],
+-			url = s.url,
+-			data = s.data,
+-			replace = "$1" + jsonpCallback + "$2";
+-
+-		if ( s.jsonp !== false ) {
+-			url = url.replace( jsre, replace );
+-			if ( s.url === url ) {
+-				if ( inspectData ) {
+-					data = data.replace( jsre, replace );
+-				}
+-				if ( s.data === data ) {
+-					// Add callback manually
+-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+-				}
+-			}
+-		}
+-
+-		s.url = url;
+-		s.data = data;
+-
+-		// Install callback
+-		window[ jsonpCallback ] = function( response ) {
+-			responseContainer = [ response ];
+-		};
+-
+-		// Clean-up function
+-		jqXHR.always(function() {
+-			// Set callback back to previous value
+-			window[ jsonpCallback ] = previous;
+-			// Call if it was a function and we have a response
+-			if ( responseContainer && jQuery.isFunction( previous ) ) {
+-				window[ jsonpCallback ]( responseContainer[ 0 ] );
+-			}
+-		});
+-
+-		// Use data converter to retrieve json after script execution
+-		s.converters["script json"] = function() {
+-			if ( !responseContainer ) {
+-				jQuery.error( jsonpCallback + " was not called" );
+-			}
+-			return responseContainer[ 0 ];
+-		};
+-
+-		// force json dataType
+-		s.dataTypes[ 0 ] = "json";
+-
+-		// Delegate to script
+-		return "script";
+-	}
+-});
+-
+-
+-
+-
+-// Install script dataType
+-jQuery.ajaxSetup({
+-	accepts: {
+-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+-	},
+-	contents: {
+-		script: /javascript|ecmascript/
+-	},
+-	converters: {
+-		"text script": function( text ) {
+-			jQuery.globalEval( text );
+-			return text;
+-		}
+-	}
+-});
+-
+-// Handle cache's special case and global
+-jQuery.ajaxPrefilter( "script", function( s ) {
+-	if ( s.cache === undefined ) {
+-		s.cache = false;
+-	}
+-	if ( s.crossDomain ) {
+-		s.type = "GET";
+-		s.global = false;
+-	}
+-});
+-
+-// Bind script tag hack transport
+-jQuery.ajaxTransport( "script", function(s) {
+-
+-	// This transport only deals with cross domain requests
+-	if ( s.crossDomain ) {
+-
+-		var script,
+-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+-
+-		return {
+-
+-			send: function( _, callback ) {
+-
+-				script = document.createElement( "script" );
+-
+-				script.async = "async";
+-
+-				if ( s.scriptCharset ) {
+-					script.charset = s.scriptCharset;
+-				}
+-
+-				script.src = s.url;
+-
+-				// Attach handlers for all browsers
+-				script.onload = script.onreadystatechange = function( _, isAbort ) {
+-
+-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+-
+-						// Handle memory leak in IE
+-						script.onload = script.onreadystatechange = null;
+-
+-						// Remove the script
+-						if ( head && script.parentNode ) {
+-							head.removeChild( script );
+-						}
+-
+-						// Dereference the script
+-						script = undefined;
+-
+-						// Callback if not abort
+-						if ( !isAbort ) {
+-							callback( 200, "success" );
+-						}
+-					}
+-				};
+-				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+-				// This arises when a base node is used (#2709 and #4378).
+-				head.insertBefore( script, head.firstChild );
+-			},
+-
+-			abort: function() {
+-				if ( script ) {
+-					script.onload( 0, 1 );
+-				}
+-			}
+-		};
+-	}
+-});
+-
+-
+-
+-
+-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
+-		// Abort all pending requests
+-		for ( var key in xhrCallbacks ) {
+-			xhrCallbacks[ key ]( 0, 1 );
+-		}
+-	} : false,
+-	xhrId = 0,
+-	xhrCallbacks;
+-
+-// Functions to create xhrs
+-function createStandardXHR() {
+-	try {
+-		return new window.XMLHttpRequest();
+-	} catch( e ) {}
+-}
+-
+-function createActiveXHR() {
+-	try {
+-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+-	} catch( e ) {}
+-}
+-
+-// Create the request object
+-// (This is still attached to ajaxSettings for backward compatibility)
+-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+-	/* Microsoft failed to properly
+-	 * implement the XMLHttpRequest in IE7 (can't request local files),
+-	 * so we use the ActiveXObject when it is available
+-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+-	 * we need a fallback.
+-	 */
+-	function() {
+-		return !this.isLocal && createStandardXHR() || createActiveXHR();
+-	} :
+-	// For all other browsers, use the standard XMLHttpRequest object
+-	createStandardXHR;
+-
+-// Determine support properties
+-(function( xhr ) {
+-	jQuery.extend( jQuery.support, {
+-		ajax: !!xhr,
+-		cors: !!xhr && ( "withCredentials" in xhr )
+-	});
+-})( jQuery.ajaxSettings.xhr() );
+-
+-// Create transport if the browser can provide an xhr
+-if ( jQuery.support.ajax ) {
+-
+-	jQuery.ajaxTransport(function( s ) {
+-		// Cross domain only allowed if supported through XMLHttpRequest
+-		if ( !s.crossDomain || jQuery.support.cors ) {
+-
+-			var callback;
+-
+-			return {
+-				send: function( headers, complete ) {
+-
+-					// Get a new xhr
+-					var xhr = s.xhr(),
+-						handle,
+-						i;
+-
+-					// Open the socket
+-					// Passing null username, generates a login popup on Opera (#2865)
+-					if ( s.username ) {
+-						xhr.open( s.type, s.url, s.async, s.username, s.password );
+-					} else {
+-						xhr.open( s.type, s.url, s.async );
+-					}
+-
+-					// Apply custom fields if provided
+-					if ( s.xhrFields ) {
+-						for ( i in s.xhrFields ) {
+-							xhr[ i ] = s.xhrFields[ i ];
+-						}
+-					}
+-
+-					// Override mime type if needed
+-					if ( s.mimeType && xhr.overrideMimeType ) {
+-						xhr.overrideMimeType( s.mimeType );
+-					}
+-
+-					// X-Requested-With header
+-					// For cross-domain requests, seeing as conditions for a preflight are
+-					// akin to a jigsaw puzzle, we simply never set it to be sure.
+-					// (it can always be set on a per-request basis or even using ajaxSetup)
+-					// For same-domain requests, won't change header if already provided.
+-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+-					}
+-
+-					// Need an extra try/catch for cross domain requests in Firefox 3
+-					try {
+-						for ( i in headers ) {
+-							xhr.setRequestHeader( i, headers[ i ] );
+-						}
+-					} catch( _ ) {}
+-
+-					// Do send the request
+-					// This may raise an exception which is actually
+-					// handled in jQuery.ajax (so no try/catch here)
+-					xhr.send( ( s.hasContent && s.data ) || null );
+-
+-					// Listener
+-					callback = function( _, isAbort ) {
+-
+-						var status,
+-							statusText,
+-							responseHeaders,
+-							responses,
+-							xml;
+-
+-						// Firefox throws exceptions when accessing properties
+-						// of an xhr when a network error occured
+-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+-						try {
+-
+-							// Was never called and is aborted or complete
+-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+-
+-								// Only called once
+-								callback = undefined;
+-
+-								// Do not keep as active anymore
+-								if ( handle ) {
+-									xhr.onreadystatechange = jQuery.noop;
+-									if ( xhrOnUnloadAbort ) {
+-										delete xhrCallbacks[ handle ];
+-									}
+-								}
+-
+-								// If it's an abort
+-								if ( isAbort ) {
+-									// Abort it manually if needed
+-									if ( xhr.readyState !== 4 ) {
+-										xhr.abort();
+-									}
+-								} else {
+-									status = xhr.status;
+-									responseHeaders = xhr.getAllResponseHeaders();
+-									responses = {};
+-									xml = xhr.responseXML;
+-
+-									// Construct response list
+-									if ( xml && xml.documentElement /* #4958 */ ) {
+-										responses.xml = xml;
+-									}
+-									responses.text = xhr.responseText;
+-
+-									// Firefox throws an exception when accessing
+-									// statusText for faulty cross-domain requests
+-									try {
+-										statusText = xhr.statusText;
+-									} catch( e ) {
+-										// We normalize with Webkit giving an empty statusText
+-										statusText = "";
+-									}
+-
+-									// Filter status for non standard behaviors
+-
+-									// If the request is local and we have data: assume a success
+-									// (success with no data won't get notified, that's the best we
+-									// can do given current implementations)
+-									if ( !status && s.isLocal && !s.crossDomain ) {
+-										status = responses.text ? 200 : 404;
+-									// IE - #1450: sometimes returns 1223 when it should be 204
+-									} else if ( status === 1223 ) {
+-										status = 204;
+-									}
+-								}
+-							}
+-						} catch( firefoxAccessException ) {
+-							if ( !isAbort ) {
+-								complete( -1, firefoxAccessException );
+-							}
+-						}
+-
+-						// Call complete if needed
+-						if ( responses ) {
+-							complete( status, statusText, responses, responseHeaders );
+-						}
+-					};
+-
+-					// if we're in sync mode or it's in cache
+-					// and has been retrieved directly (IE6 & IE7)
+-					// we need to manually fire the callback
+-					if ( !s.async || xhr.readyState === 4 ) {
+-						callback();
+-					} else {
+-						handle = ++xhrId;
+-						if ( xhrOnUnloadAbort ) {
+-							// Create the active xhrs callbacks list if needed
+-							// and attach the unload handler
+-							if ( !xhrCallbacks ) {
+-								xhrCallbacks = {};
+-								jQuery( window ).unload( xhrOnUnloadAbort );
+-							}
+-							// Add to list of active xhrs callbacks
+-							xhrCallbacks[ handle ] = callback;
+-						}
+-						xhr.onreadystatechange = callback;
+-					}
+-				},
+-
+-				abort: function() {
+-					if ( callback ) {
+-						callback(0,1);
+-					}
+-				}
+-			};
+-		}
+-	});
+-}
+-
+-
+-
+-
+-var elemdisplay = {},
+-	iframe, iframeDoc,
+-	rfxtypes = /^(?:toggle|show|hide)$/,
+-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+-	timerId,
+-	fxAttrs = [
+-		// height animations
+-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+-		// width animations
+-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+-		// opacity animations
+-		[ "opacity" ]
+-	],
+-	fxNow,
+-	requestAnimationFrame = window.webkitRequestAnimationFrame ||
+-		window.mozRequestAnimationFrame ||
+-		window.oRequestAnimationFrame;
+-
+-jQuery.fn.extend({
+-	show: function( speed, easing, callback ) {
+-		var elem, display;
+-
+-		if ( speed || speed === 0 ) {
+-			return this.animate( genFx("show", 3), speed, easing, callback);
+-
+-		} else {
+-			for ( var i = 0, j = this.length; i < j; i++ ) {
+-				elem = this[i];
+-
+-				if ( elem.style ) {
+-					display = elem.style.display;
+-
+-					// Reset the inline display of this element to learn if it is
+-					// being hidden by cascaded rules or not
+-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+-						display = elem.style.display = "";
+-					}
+-
+-					// Set elements which have been overridden with display: none
+-					// in a stylesheet to whatever the default browser style is
+-					// for such an element
+-					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+-						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+-					}
+-				}
+-			}
+-
+-			// Set the display of most of the elements in a second loop
+-			// to avoid the constant reflow
+-			for ( i = 0; i < j; i++ ) {
+-				elem = this[i];
+-
+-				if ( elem.style ) {
+-					display = elem.style.display;
+-
+-					if ( display === "" || display === "none" ) {
+-						elem.style.display = jQuery._data(elem, "olddisplay") || "";
+-					}
+-				}
+-			}
+-
+-			return this;
+-		}
+-	},
+-
+-	hide: function( speed, easing, callback ) {
+-		if ( speed || speed === 0 ) {
+-			return this.animate( genFx("hide", 3), speed, easing, callback);
+-
+-		} else {
+-			for ( var i = 0, j = this.length; i < j; i++ ) {
+-				if ( this[i].style ) {
+-					var display = jQuery.css( this[i], "display" );
+-
+-					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+-						jQuery._data( this[i], "olddisplay", display );
+-					}
+-				}
+-			}
+-
+-			// Set the display of the elements in a second loop
+-			// to avoid the constant reflow
+-			for ( i = 0; i < j; i++ ) {
+-				if ( this[i].style ) {
+-					this[i].style.display = "none";
+-				}
+-			}
+-
+-			return this;
+-		}
+-	},
+-
+-	// Save the old toggle function
+-	_toggle: jQuery.fn.toggle,
+-
+-	toggle: function( fn, fn2, callback ) {
+-		var bool = typeof fn === "boolean";
+-
+-		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+-			this._toggle.apply( this, arguments );
+-
+-		} else if ( fn == null || bool ) {
+-			this.each(function() {
+-				var state = bool ? fn : jQuery(this).is(":hidden");
+-				jQuery(this)[ state ? "show" : "hide" ]();
+-			});
+-
+-		} else {
+-			this.animate(genFx("toggle", 3), fn, fn2, callback);
+-		}
+-
+-		return this;
+-	},
+-
+-	fadeTo: function( speed, to, easing, callback ) {
+-		return this.filter(":hidden").css("opacity", 0).show().end()
+-					.animate({opacity: to}, speed, easing, callback);
+-	},
+-
+-	animate: function( prop, speed, easing, callback ) {
+-		var optall = jQuery.speed(speed, easing, callback);
+-
+-		if ( jQuery.isEmptyObject( prop ) ) {
+-			return this.each( optall.complete, [ false ] );
+-		}
+-
+-		// Do not change referenced properties as per-property easing will be lost
+-		prop = jQuery.extend( {}, prop );
+-
+-		return this[ optall.queue === false ? "each" : "queue" ](function() {
+-			// XXX 'this' does not always have a nodeName when running the
+-			// test suite
+-
+-			if ( optall.queue === false ) {
+-				jQuery._mark( this );
+-			}
+-
+-			var opt = jQuery.extend( {}, optall ),
+-				isElement = this.nodeType === 1,
+-				hidden = isElement && jQuery(this).is(":hidden"),
+-				name, val, p,
+-				display, e,
+-				parts, start, end, unit;
+-
+-			// will store per property easing and be used to determine when an animation is complete
+-			opt.animatedProperties = {};
+-
+-			for ( p in prop ) {
+-
+-				// property name normalization
+-				name = jQuery.camelCase( p );
+-				if ( p !== name ) {
+-					prop[ name ] = prop[ p ];
+-					delete prop[ p ];
+-				}
+-
+-				val = prop[ name ];
+-
+-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+-				if ( jQuery.isArray( val ) ) {
+-					opt.animatedProperties[ name ] = val[ 1 ];
+-					val = prop[ name ] = val[ 0 ];
+-				} else {
+-					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+-				}
+-
+-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
+-					return opt.complete.call( this );
+-				}
+-
+-				if ( isElement && ( name === "height" || name === "width" ) ) {
+-					// Make sure that nothing sneaks out
+-					// Record all 3 overflow attributes because IE does not
+-					// change the overflow attribute when overflowX and
+-					// overflowY are set to the same value
+-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+-
+-					// Set display property to inline-block for height/width
+-					// animations on inline elements that are having width/height
+-					// animated
+-					if ( jQuery.css( this, "display" ) === "inline" &&
+-							jQuery.css( this, "float" ) === "none" ) {
+-						if ( !jQuery.support.inlineBlockNeedsLayout ) {
+-							this.style.display = "inline-block";
+-
+-						} else {
+-							display = defaultDisplay( this.nodeName );
+-
+-							// inline-level elements accept inline-block;
+-							// block-level elements need to be inline with layout
+-							if ( display === "inline" ) {
+-								this.style.display = "inline-block";
+-
+-							} else {
+-								this.style.display = "inline";
+-								this.style.zoom = 1;
+-							}
+-						}
+-					}
+-				}
+-			}
+-
+-			if ( opt.overflow != null ) {
+-				this.style.overflow = "hidden";
+-			}
+-
+-			for ( p in prop ) {
+-				e = new jQuery.fx( this, opt, p );
+-				val = prop[ p ];
+-
+-				if ( rfxtypes.test(val) ) {
+-					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
+-
+-				} else {
+-					parts = rfxnum.exec( val );
+-					start = e.cur();
+-
+-					if ( parts ) {
+-						end = parseFloat( parts[2] );
+-						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+-
+-						// We need to compute starting value
+-						if ( unit !== "px" ) {
+-							jQuery.style( this, p, (end || 1) + unit);
+-							start = ((end || 1) / e.cur()) * start;
+-							jQuery.style( this, p, start + unit);
+-						}
+-
+-						// If a +=/-= token was provided, we're doing a relative animation
+-						if ( parts[1] ) {
+-							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+-						}
+-
+-						e.custom( start, end, unit );
+-
+-					} else {
+-						e.custom( start, val, "" );
+-					}
+-				}
+-			}
+-
+-			// For JS strict compliance
+-			return true;
+-		});
+-	},
+-
+-	stop: function( clearQueue, gotoEnd ) {
+-		if ( clearQueue ) {
+-			this.queue([]);
+-		}
+-
+-		this.each(function() {
+-			var timers = jQuery.timers,
+-				i = timers.length;
+-			// clear marker counters if we know they won't be
+-			if ( !gotoEnd ) {
+-				jQuery._unmark( true, this );
+-			}
+-			while ( i-- ) {
+-				if ( timers[i].elem === this ) {
+-					if (gotoEnd) {
+-						// force the next step to be the last
+-						timers[i](true);
+-					}
+-
+-					timers.splice(i, 1);
+-				}
+-			}
+-		});
+-
+-		// start the next in the queue if the last step wasn't forced
+-		if ( !gotoEnd ) {
+-			this.dequeue();
+-		}
+-
+-		return this;
+-	}
+-
+-});
+-
+-// Animations created synchronously will run synchronously
+-function createFxNow() {
+-	setTimeout( clearFxNow, 0 );
+-	return ( fxNow = jQuery.now() );
+-}
+-
+-function clearFxNow() {
+-	fxNow = undefined;
+-}
+-
+-// Generate parameters to create a standard animation
+-function genFx( type, num ) {
+-	var obj = {};
+-
+-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+-		obj[ this ] = type;
+-	});
+-
+-	return obj;
+-}
+-
+-// Generate shortcuts for custom animations
+-jQuery.each({
+-	slideDown: genFx("show", 1),
+-	slideUp: genFx("hide", 1),
+-	slideToggle: genFx("toggle", 1),
+-	fadeIn: { opacity: "show" },
+-	fadeOut: { opacity: "hide" },
+-	fadeToggle: { opacity: "toggle" }
+-}, function( name, props ) {
+-	jQuery.fn[ name ] = function( speed, easing, callback ) {
+-		return this.animate( props, speed, easing, callback );
+-	};
+-});
+-
+-jQuery.extend({
+-	speed: function( speed, easing, fn ) {
+-		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+-			complete: fn || !fn && easing ||
+-				jQuery.isFunction( speed ) && speed,
+-			duration: speed,
+-			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+-		};
+-
+-		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+-
+-		// Queueing
+-		opt.old = opt.complete;
+-		opt.complete = function( noUnmark ) {
+-			if ( jQuery.isFunction( opt.old ) ) {
+-				opt.old.call( this );
+-			}
+-
+-			if ( opt.queue !== false ) {
+-				jQuery.dequeue( this );
+-			} else if ( noUnmark !== false ) {
+-				jQuery._unmark( this );
+-			}
+-		};
+-
+-		return opt;
+-	},
+-
+-	easing: {
+-		linear: function( p, n, firstNum, diff ) {
+-			return firstNum + diff * p;
+-		},
+-		swing: function( p, n, firstNum, diff ) {
+-			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+-		}
+-	},
+-
+-	timers: [],
+-
+-	fx: function( elem, options, prop ) {
+-		this.options = options;
+-		this.elem = elem;
+-		this.prop = prop;
+-
+-		options.orig = options.orig || {};
+-	}
+-
+-});
+-
+-jQuery.fx.prototype = {
+-	// Simple function for setting a style value
+-	update: function() {
+-		if ( this.options.step ) {
+-			this.options.step.call( this.elem, this.now, this );
+-		}
+-
+-		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+-	},
+-
+-	// Get the current size
+-	cur: function() {
+-		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+-			return this.elem[ this.prop ];
+-		}
+-
+-		var parsed,
+-			r = jQuery.css( this.elem, this.prop );
+-		// Empty strings, null, undefined and "auto" are converted to 0,
+-		// complex values such as "rotate(1rad)" are returned as is,
+-		// simple values such as "10px" are parsed to Float.
+-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+-	},
+-
+-	// Start an animation from one number to another
+-	custom: function( from, to, unit ) {
+-		var self = this,
+-			fx = jQuery.fx,
+-			raf;
+-
+-		this.startTime = fxNow || createFxNow();
+-		this.start = from;
+-		this.end = to;
+-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+-		this.now = this.start;
+-		this.pos = this.state = 0;
+-
+-		function t( gotoEnd ) {
+-			return self.step(gotoEnd);
+-		}
+-
+-		t.elem = this.elem;
+-
+-		if ( t() && jQuery.timers.push(t) && !timerId ) {
+-			// Use requestAnimationFrame instead of setInterval if available
+-			if ( requestAnimationFrame ) {
+-				timerId = true;
+-				raf = function() {
+-					// When timerId gets set to null at any point, this stops
+-					if ( timerId ) {
+-						requestAnimationFrame( raf );
+-						fx.tick();
+-					}
+-				};
+-				requestAnimationFrame( raf );
+-			} else {
+-				timerId = setInterval( fx.tick, fx.interval );
+-			}
+-		}
+-	},
+-
+-	// Simple 'show' function
+-	show: function() {
+-		// Remember where we started, so that we can go back to it later
+-		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+-		this.options.show = true;
+-
+-		// Begin the animation
+-		// Make sure that we start at a small width/height to avoid any
+-		// flash of content
+-		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+-
+-		// Start by showing the element
+-		jQuery( this.elem ).show();
+-	},
+-
+-	// Simple 'hide' function
+-	hide: function() {
+-		// Remember where we started, so that we can go back to it later
+-		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+-		this.options.hide = true;
+-
+-		// Begin the animation
+-		this.custom(this.cur(), 0);
+-	},
+-
+-	// Each step of an animation
+-	step: function( gotoEnd ) {
+-		var t = fxNow || createFxNow(),
+-			done = true,
+-			elem = this.elem,
+-			options = this.options,
+-			i, n;
+-
+-		if ( gotoEnd || t >= options.duration + this.startTime ) {
+-			this.now = this.end;
+-			this.pos = this.state = 1;
+-			this.update();
+-
+-			options.animatedProperties[ this.prop ] = true;
+-
+-			for ( i in options.animatedProperties ) {
+-				if ( options.animatedProperties[i] !== true ) {
+-					done = false;
+-				}
+-			}
+-
+-			if ( done ) {
+-				// Reset the overflow
+-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+-
+-					jQuery.each( [ "", "X", "Y" ], function (index, value) {
+-						elem.style[ "overflow" + value ] = options.overflow[index];
+-					});
+-				}
+-
+-				// Hide the element if the "hide" operation was done
+-				if ( options.hide ) {
+-					jQuery(elem).hide();
+-				}
+-
+-				// Reset the properties, if the item has been hidden or shown
+-				if ( options.hide || options.show ) {
+-					for ( var p in options.animatedProperties ) {
+-						jQuery.style( elem, p, options.orig[p] );
+-					}
+-				}
+-
+-				// Execute the complete function
+-				options.complete.call( elem );
+-			}
+-
+-			return false;
+-
+-		} else {
+-			// classical easing cannot be used with an Infinity duration
+-			if ( options.duration == Infinity ) {
+-				this.now = t;
+-			} else {
+-				n = t - this.startTime;
+-				this.state = n / options.duration;
+-
+-				// Perform the easing function, defaults to swing
+-				this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
+-				this.now = this.start + ((this.end - this.start) * this.pos);
+-			}
+-			// Perform the next step of the animation
+-			this.update();
+-		}
+-
+-		return true;
+-	}
+-};
+-
+-jQuery.extend( jQuery.fx, {
+-	tick: function() {
+-		for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
+-			if ( !timers[i]() ) {
+-				timers.splice(i--, 1);
+-			}
+-		}
+-
+-		if ( !timers.length ) {
+-			jQuery.fx.stop();
+-		}
+-	},
+-
+-	interval: 13,
+-
+-	stop: function() {
+-		clearInterval( timerId );
+-		timerId = null;
+-	},
+-
+-	speeds: {
+-		slow: 600,
+-		fast: 200,
+-		// Default speed
+-		_default: 400
+-	},
+-
+-	step: {
+-		opacity: function( fx ) {
+-			jQuery.style( fx.elem, "opacity", fx.now );
+-		},
+-
+-		_default: function( fx ) {
+-			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+-				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+-			} else {
+-				fx.elem[ fx.prop ] = fx.now;
+-			}
+-		}
+-	}
+-});
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.animated = function( elem ) {
+-		return jQuery.grep(jQuery.timers, function( fn ) {
+-			return elem === fn.elem;
+-		}).length;
+-	};
+-}
+-
+-// Try to restore the default display value of an element
+-function defaultDisplay( nodeName ) {
+-
+-	if ( !elemdisplay[ nodeName ] ) {
+-
+-		var body = document.body,
+-			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+-			display = elem.css( "display" );
+-
+-		elem.remove();
+-
+-		// If the simple way fails,
+-		// get element's real default display by attaching it to a temp iframe
+-		if ( display === "none" || display === "" ) {
+-			// No iframe to use yet, so create it
+-			if ( !iframe ) {
+-				iframe = document.createElement( "iframe" );
+-				iframe.frameBorder = iframe.width = iframe.height = 0;
+-			}
+-
+-			body.appendChild( iframe );
+-
+-			// Create a cacheable copy of the iframe document on first call.
+-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+-			// document to it; WebKit & Firefox won't allow reusing the iframe document.
+-			if ( !iframeDoc || !iframe.createElement ) {
+-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+-				iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
+-				iframeDoc.close();
+-			}
+-
+-			elem = iframeDoc.createElement( nodeName );
+-
+-			iframeDoc.body.appendChild( elem );
+-
+-			display = jQuery.css( elem, "display" );
+-
+-			body.removeChild( iframe );
+-		}
+-
+-		// Store the correct default display
+-		elemdisplay[ nodeName ] = display;
+-	}
+-
+-	return elemdisplay[ nodeName ];
+-}
+-
+-
+-
+-
+-var rtable = /^t(?:able|d|h)$/i,
+-	rroot = /^(?:body|html)$/i;
+-
+-if ( "getBoundingClientRect" in document.documentElement ) {
+-	jQuery.fn.offset = function( options ) {
+-		var elem = this[0], box;
+-
+-		if ( options ) {
+-			return this.each(function( i ) {
+-				jQuery.offset.setOffset( this, options, i );
+-			});
+-		}
+-
+-		if ( !elem || !elem.ownerDocument ) {
+-			return null;
+-		}
+-
+-		if ( elem === elem.ownerDocument.body ) {
+-			return jQuery.offset.bodyOffset( elem );
+-		}
+-
+-		try {
+-			box = elem.getBoundingClientRect();
+-		} catch(e) {}
+-
+-		var doc = elem.ownerDocument,
+-			docElem = doc.documentElement;
+-
+-		// Make sure we're not dealing with a disconnected DOM node
+-		if ( !box || !jQuery.contains( docElem, elem ) ) {
+-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+-		}
+-
+-		var body = doc.body,
+-			win = getWindow(doc),
+-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
+-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
+-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+-			top  = box.top  + scrollTop  - clientTop,
+-			left = box.left + scrollLeft - clientLeft;
+-
+-		return { top: top, left: left };
+-	};
+-
+-} else {
+-	jQuery.fn.offset = function( options ) {
+-		var elem = this[0];
+-
+-		if ( options ) {
+-			return this.each(function( i ) {
+-				jQuery.offset.setOffset( this, options, i );
+-			});
+-		}
+-
+-		if ( !elem || !elem.ownerDocument ) {
+-			return null;
+-		}
+-
+-		if ( elem === elem.ownerDocument.body ) {
+-			return jQuery.offset.bodyOffset( elem );
+-		}
+-
+-		jQuery.offset.initialize();
+-
+-		var computedStyle,
+-			offsetParent = elem.offsetParent,
+-			prevOffsetParent = elem,
+-			doc = elem.ownerDocument,
+-			docElem = doc.documentElement,
+-			body = doc.body,
+-			defaultView = doc.defaultView,
+-			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+-			top = elem.offsetTop,
+-			left = elem.offsetLeft;
+-
+-		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+-			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+-				break;
+-			}
+-
+-			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+-			top  -= elem.scrollTop;
+-			left -= elem.scrollLeft;
+-
+-			if ( elem === offsetParent ) {
+-				top  += elem.offsetTop;
+-				left += elem.offsetLeft;
+-
+-				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+-					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+-					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+-				}
+-
+-				prevOffsetParent = offsetParent;
+-				offsetParent = elem.offsetParent;
+-			}
+-
+-			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+-				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+-				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+-			}
+-
+-			prevComputedStyle = computedStyle;
+-		}
+-
+-		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+-			top  += body.offsetTop;
+-			left += body.offsetLeft;
+-		}
+-
+-		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+-			top  += Math.max( docElem.scrollTop, body.scrollTop );
+-			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+-		}
+-
+-		return { top: top, left: left };
+-	};
+-}
+-
+-jQuery.offset = {
+-	initialize: function() {
+-		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
+-			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+-
+-		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+-
+-		container.innerHTML = html;
+-		body.insertBefore( container, body.firstChild );
+-		innerDiv = container.firstChild;
+-		checkDiv = innerDiv.firstChild;
+-		td = innerDiv.nextSibling.firstChild.firstChild;
+-
+-		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+-		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+-
+-		checkDiv.style.position = "fixed";
+-		checkDiv.style.top = "20px";
+-
+-		// safari subtracts parent border width here which is 5px
+-		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+-		checkDiv.style.position = checkDiv.style.top = "";
+-
+-		innerDiv.style.overflow = "hidden";
+-		innerDiv.style.position = "relative";
+-
+-		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+-
+-		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+-
+-		body.removeChild( container );
+-		jQuery.offset.initialize = jQuery.noop;
+-	},
+-
+-	bodyOffset: function( body ) {
+-		var top = body.offsetTop,
+-			left = body.offsetLeft;
+-
+-		jQuery.offset.initialize();
+-
+-		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+-			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+-		}
+-
+-		return { top: top, left: left };
+-	},
+-
+-	setOffset: function( elem, options, i ) {
+-		var position = jQuery.css( elem, "position" );
+-
+-		// set position first, in-case top/left are set even on static elem
+-		if ( position === "static" ) {
+-			elem.style.position = "relative";
+-		}
+-
+-		var curElem = jQuery( elem ),
+-			curOffset = curElem.offset(),
+-			curCSSTop = jQuery.css( elem, "top" ),
+-			curCSSLeft = jQuery.css( elem, "left" ),
+-			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+-			props = {}, curPosition = {}, curTop, curLeft;
+-
+-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+-		if ( calculatePosition ) {
+-			curPosition = curElem.position();
+-			curTop = curPosition.top;
+-			curLeft = curPosition.left;
+-		} else {
+-			curTop = parseFloat( curCSSTop ) || 0;
+-			curLeft = parseFloat( curCSSLeft ) || 0;
+-		}
+-
+-		if ( jQuery.isFunction( options ) ) {
+-			options = options.call( elem, i, curOffset );
+-		}
+-
+-		if (options.top != null) {
+-			props.top = (options.top - curOffset.top) + curTop;
+-		}
+-		if (options.left != null) {
+-			props.left = (options.left - curOffset.left) + curLeft;
+-		}
+-
+-		if ( "using" in options ) {
+-			options.using.call( elem, props );
+-		} else {
+-			curElem.css( props );
+-		}
+-	}
+-};
+-
+-
+-jQuery.fn.extend({
+-	position: function() {
+-		if ( !this[0] ) {
+-			return null;
+-		}
+-
+-		var elem = this[0],
+-
+-		// Get *real* offsetParent
+-		offsetParent = this.offsetParent(),
+-
+-		// Get correct offsets
+-		offset       = this.offset(),
+-		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+-
+-		// Subtract element margins
+-		// note: when an element has margin: auto the offsetLeft and marginLeft
+-		// are the same in Safari causing offset.left to incorrectly be 0
+-		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+-
+-		// Add offsetParent borders
+-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+-
+-		// Subtract the two offsets
+-		return {
+-			top:  offset.top  - parentOffset.top,
+-			left: offset.left - parentOffset.left
+-		};
+-	},
+-
+-	offsetParent: function() {
+-		return this.map(function() {
+-			var offsetParent = this.offsetParent || document.body;
+-			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+-				offsetParent = offsetParent.offsetParent;
+-			}
+-			return offsetParent;
+-		});
+-	}
+-});
+-
+-
+-// Create scrollLeft and scrollTop methods
+-jQuery.each( ["Left", "Top"], function( i, name ) {
+-	var method = "scroll" + name;
+-
+-	jQuery.fn[ method ] = function( val ) {
+-		var elem, win;
+-
+-		if ( val === undefined ) {
+-			elem = this[ 0 ];
+-
+-			if ( !elem ) {
+-				return null;
+-			}
+-
+-			win = getWindow( elem );
+-
+-			// Return the scroll offset
+-			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+-				jQuery.support.boxModel && win.document.documentElement[ method ] ||
+-					win.document.body[ method ] :
+-				elem[ method ];
+-		}
+-
+-		// Set the scroll offset
+-		return this.each(function() {
+-			win = getWindow( this );
+-
+-			if ( win ) {
+-				win.scrollTo(
+-					!i ? val : jQuery( win ).scrollLeft(),
+-					 i ? val : jQuery( win ).scrollTop()
+-				);
+-
+-			} else {
+-				this[ method ] = val;
+-			}
+-		});
+-	};
+-});
+-
+-function getWindow( elem ) {
+-	return jQuery.isWindow( elem ) ?
+-		elem :
+-		elem.nodeType === 9 ?
+-			elem.defaultView || elem.parentWindow :
+-			false;
+-}
+-
+-
+-
+-
+-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+-jQuery.each([ "Height", "Width" ], function( i, name ) {
+-
+-	var type = name.toLowerCase();
+-
+-	// innerHeight and innerWidth
+-	jQuery.fn[ "inner" + name ] = function() {
+-		var elem = this[0];
+-		return elem && elem.style ?
+-			parseFloat( jQuery.css( elem, type, "padding" ) ) :
+-			null;
+-	};
+-
+-	// outerHeight and outerWidth
+-	jQuery.fn[ "outer" + name ] = function( margin ) {
+-		var elem = this[0];
+-		return elem && elem.style ?
+-			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+-			null;
+-	};
+-
+-	jQuery.fn[ type ] = function( size ) {
+-		// Get window width or height
+-		var elem = this[0];
+-		if ( !elem ) {
+-			return size == null ? null : this;
+-		}
+-
+-		if ( jQuery.isFunction( size ) ) {
+-			return this.each(function( i ) {
+-				var self = jQuery( this );
+-				self[ type ]( size.call( this, i, self[ type ]() ) );
+-			});
+-		}
+-
+-		if ( jQuery.isWindow( elem ) ) {
+-			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+-			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+-			var docElemProp = elem.document.documentElement[ "client" + name ];
+-			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+-				elem.document.body[ "client" + name ] || docElemProp;
+-
+-		// Get document width or height
+-		} else if ( elem.nodeType === 9 ) {
+-			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+-			return Math.max(
+-				elem.documentElement["client" + name],
+-				elem.body["scroll" + name], elem.documentElement["scroll" + name],
+-				elem.body["offset" + name], elem.documentElement["offset" + name]
+-			);
+-
+-		// Get or set width or height on the element
+-		} else if ( size === undefined ) {
+-			var orig = jQuery.css( elem, type ),
+-				ret = parseFloat( orig );
+-
+-			return jQuery.isNaN( ret ) ? orig : ret;
+-
+-		// Set the width or height on the element (default to pixels if value is unitless)
+-		} else {
+-			return this.css( type, typeof size === "string" ? size : size + "px" );
+-		}
+-	};
+-
+-});
+-
+-
+-// Expose jQuery to the global object
+-window.jQuery = window.$ = jQuery;
+-})(window);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.js	(revision 15488)
+@@ -1,1415 +0,0 @@
+-/*
+- * QUnit - A JavaScript Unit Testing Framework
+- * 
+- * http://docs.jquery.com/QUnit
+- *
+- * Copyright (c) 2011 John Resig, Jörn Zaefferer
+- * Dual licensed under the MIT (MIT-LICENSE.txt)
+- * or GPL (GPL-LICENSE.txt) licenses.
+- */
+-
+-(function(window) {
+-
+-var defined = {
+-	setTimeout: typeof window.setTimeout !== "undefined",
+-	sessionStorage: (function() {
+-		try {
+-			return !!sessionStorage.getItem;
+-		} catch(e){
+-			return false;
+-		}
+-  })()
+-}
+-
+-var testId = 0;
+-
+-var Test = function(name, testName, expected, testEnvironmentArg, async, callback) {
+-	this.name = name;
+-	this.testName = testName;
+-	this.expected = expected;
+-	this.testEnvironmentArg = testEnvironmentArg;
+-	this.async = async;
+-	this.callback = callback;
+-	this.assertions = [];
+-};
+-Test.prototype = {
+-	init: function() {
+-		var tests = id("qunit-tests");
+-		if (tests) {
+-			var b = document.createElement("strong");
+-				b.innerHTML = "Running " + this.name;
+-			var li = document.createElement("li");
+-				li.appendChild( b );
+-				li.id = this.id = "test-output" + testId++;
+-			tests.appendChild( li );
+-		}
+-	},
+-	setup: function() {
+-		if (this.module != config.previousModule) {
+-			if ( config.previousModule ) {
+-				QUnit.moduleDone( {
+-					name: config.previousModule,
+-					failed: config.moduleStats.bad,
+-					passed: config.moduleStats.all - config.moduleStats.bad,
+-					total: config.moduleStats.all
+-				} );
+-			}
+-			config.previousModule = this.module;
+-			config.moduleStats = { all: 0, bad: 0 };
+-			QUnit.moduleStart( {
+-				name: this.module
+-			} );
+-		}
+-
+-		config.current = this;
+-		this.testEnvironment = extend({
+-			setup: function() {},
+-			teardown: function() {}
+-		}, this.moduleTestEnvironment);
+-		if (this.testEnvironmentArg) {
+-			extend(this.testEnvironment, this.testEnvironmentArg);
+-		}
+-
+-		QUnit.testStart( {
+-			name: this.testName
+-		} );
+-
+-		// allow utility functions to access the current test environment
+-		// TODO why??
+-		QUnit.current_testEnvironment = this.testEnvironment;
+-		
+-		try {
+-			if ( !config.pollution ) {
+-				saveGlobal();
+-			}
+-
+-			this.testEnvironment.setup.call(this.testEnvironment);
+-		} catch(e) {
+-			QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message );
+-		}
+-	},
+-	run: function() {
+-		if ( this.async ) {
+-			QUnit.stop();
+-		}
+-
+-		if ( config.notrycatch ) {
+-			this.callback.call(this.testEnvironment);
+-			return;
+-		}
+-		try {
+-			this.callback.call(this.testEnvironment);
+-		} catch(e) {
+-			fail("Test " + this.testName + " died, exception and test follows", e, this.callback);
+-			QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) );
+-			// else next test will carry the responsibility
+-			saveGlobal();
+-
+-			// Restart the tests if they're blocking
+-			if ( config.blocking ) {
+-				start();
+-			}
+-		}
+-	},
+-	teardown: function() {
+-		try {
+-			checkPollution();
+-			this.testEnvironment.teardown.call(this.testEnvironment);
+-		} catch(e) {
+-			QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message );
+-		}
+-	},
+-	finish: function() {
+-		if ( this.expected && this.expected != this.assertions.length ) {
+-			QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" );
+-		}
+-		
+-		var good = 0, bad = 0,
+-			tests = id("qunit-tests");
+-
+-		config.stats.all += this.assertions.length;
+-		config.moduleStats.all += this.assertions.length;
+-
+-		if ( tests ) {
+-			var ol  = document.createElement("ol");
+-
+-			for ( var i = 0; i < this.assertions.length; i++ ) {
+-				var assertion = this.assertions[i];
+-
+-				var li = document.createElement("li");
+-				li.className = assertion.result ? "pass" : "fail";
+-				li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
+-				ol.appendChild( li );
+-
+-				if ( assertion.result ) {
+-					good++;
+-				} else {
+-					bad++;
+-					config.stats.bad++;
+-					config.moduleStats.bad++;
+-				}
+-			}
+-
+-			// store result when possible
+-			defined.sessionStorage && sessionStorage.setItem("qunit-" + this.testName, bad);
+-
+-			if (bad == 0) {
+-				ol.style.display = "none";
+-			}
+-
+-			var b = document.createElement("strong");
+-			b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
+-			
+-			addEvent(b, "click", function() {
+-				var next = b.nextSibling, display = next.style.display;
+-				next.style.display = display === "none" ? "block" : "none";
+-			});
+-			
+-			addEvent(b, "dblclick", function(e) {
+-				var target = e && e.target ? e.target : window.event.srcElement;
+-				if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
+-					target = target.parentNode;
+-				}
+-				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
+-					window.location.search = "?" + encodeURIComponent(getText([target]).replace(/\(.+\)$/, "").replace(/(^\s*|\s*$)/g, ""));
+-				}
+-			});
+-
+-			var li = id(this.id);
+-			li.className = bad ? "fail" : "pass";
+-			li.style.display = resultDisplayStyle(!bad);
+-			li.removeChild( li.firstChild );
+-			li.appendChild( b );
+-			li.appendChild( ol );
+-
+-		} else {
+-			for ( var i = 0; i < this.assertions.length; i++ ) {
+-				if ( !this.assertions[i].result ) {
+-					bad++;
+-					config.stats.bad++;
+-					config.moduleStats.bad++;
+-				}
+-			}
+-		}
+-
+-		try {
+-			QUnit.reset();
+-		} catch(e) {
+-			fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
+-		}
+-
+-		QUnit.testDone( {
+-			name: this.testName,
+-			failed: bad,
+-			passed: this.assertions.length - bad,
+-			total: this.assertions.length
+-		} );
+-	},
+-	
+-	queue: function() {
+-		var test = this;
+-		synchronize(function() {
+-			test.init();
+-		});
+-		function run() {
+-			// each of these can by async
+-			synchronize(function() {
+-				test.setup();
+-			});
+-			synchronize(function() {
+-				test.run();
+-			});
+-			synchronize(function() {
+-				test.teardown();
+-			});
+-			synchronize(function() {
+-				test.finish();
+-			});
+-		}
+-		// defer when previous test run passed, if storage is available
+-		var bad = defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.testName);
+-		if (bad) {
+-			run();
+-		} else {
+-			synchronize(run);
+-		};
+-	}
+-	
+-}
+-
+-var QUnit = {
+-
+-	// call on start of module test to prepend name to all tests
+-	module: function(name, testEnvironment) {
+-		config.currentModule = name;
+-		config.currentModuleTestEnviroment = testEnvironment;
+-	},
+-
+-	asyncTest: function(testName, expected, callback) {
+-		if ( arguments.length === 2 ) {
+-			callback = expected;
+-			expected = 0;
+-		}
+-
+-		QUnit.test(testName, expected, callback, true);
+-	},
+-	
+-	test: function(testName, expected, callback, async) {
+-		var name = '<span class="test-name">' + testName + '</span>', testEnvironmentArg;
+-
+-		if ( arguments.length === 2 ) {
+-			callback = expected;
+-			expected = null;
+-		}
+-		// is 2nd argument a testEnvironment?
+-		if ( expected && typeof expected === 'object') {
+-			testEnvironmentArg =  expected;
+-			expected = null;
+-		}
+-
+-		if ( config.currentModule ) {
+-			name = '<span class="module-name">' + config.currentModule + "</span>: " + name;
+-		}
+-
+-		if ( !validTest(config.currentModule + ": " + testName) ) {
+-			return;
+-		}
+-		
+-		var test = new Test(name, testName, expected, testEnvironmentArg, async, callback);
+-		test.module = config.currentModule;
+-		test.moduleTestEnvironment = config.currentModuleTestEnviroment;
+-		test.queue();
+-	},
+-	
+-	/**
+-	 * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
+-	 */
+-	expect: function(asserts) {
+-		config.current.expected = asserts;
+-	},
+-
+-	/**
+-	 * Asserts true.
+-	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+-	 */
+-	ok: function(a, msg) {
+-		a = !!a;
+-		var details = {
+-			result: a,
+-			message: msg
+-		};
+-		msg = escapeHtml(msg);
+-		QUnit.log(details);
+-		config.current.assertions.push({
+-			result: a,
+-			message: msg
+-		});
+-	},
+-
+-	/**
+-	 * Checks that the first two arguments are equal, with an optional message.
+-	 * Prints out both actual and expected values.
+-	 *
+-	 * Prefered to ok( actual == expected, message )
+-	 *
+-	 * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
+-	 *
+-	 * @param Object actual
+-	 * @param Object expected
+-	 * @param String message (optional)
+-	 */
+-	equal: function(actual, expected, message) {
+-		QUnit.push(expected == actual, actual, expected, message);
+-	},
+-
+-	notEqual: function(actual, expected, message) {
+-		QUnit.push(expected != actual, actual, expected, message);
+-	},
+-	
+-	deepEqual: function(actual, expected, message) {
+-		QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
+-	},
+-
+-	notDeepEqual: function(actual, expected, message) {
+-		QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);
+-	},
+-
+-	strictEqual: function(actual, expected, message) {
+-		QUnit.push(expected === actual, actual, expected, message);
+-	},
+-
+-	notStrictEqual: function(actual, expected, message) {
+-		QUnit.push(expected !== actual, actual, expected, message);
+-	},
+-
+-	raises: function(block, expected, message) {
+-		var actual, ok = false;
+-	
+-		if (typeof expected === 'string') {
+-			message = expected;
+-			expected = null;
+-		}
+-	
+-		try {
+-			block();
+-		} catch (e) {
+-			actual = e;
+-		}
+-	
+-		if (actual) {
+-			// we don't want to validate thrown error
+-			if (!expected) {
+-				ok = true;
+-			// expected is a regexp	
+-			} else if (QUnit.objectType(expected) === "regexp") {
+-				ok = expected.test(actual);
+-			// expected is a constructor	
+-			} else if (actual instanceof expected) {
+-				ok = true;
+-			// expected is a validation function which returns true is validation passed	
+-			} else if (expected.call({}, actual) === true) {
+-				ok = true;
+-			}
+-		}
+-			
+-		QUnit.ok(ok, message);
+-	},
+-
+-	start: function() {
+-		config.semaphore--;
+-		if (config.semaphore > 0) {
+-			// don't start until equal number of stop-calls
+-			return;
+-		}
+-		if (config.semaphore < 0) {
+-			// ignore if start is called more often then stop
+-			config.semaphore = 0;
+-		}
+-		// A slight delay, to avoid any current callbacks
+-		if ( defined.setTimeout ) {
+-			window.setTimeout(function() {
+-				if ( config.timeout ) {
+-					clearTimeout(config.timeout);
+-				}
+-
+-				config.blocking = false;
+-				process();
+-			}, 13);
+-		} else {
+-			config.blocking = false;
+-			process();
+-		}
+-	},
+-	
+-	stop: function(timeout) {
+-		config.semaphore++;
+-		config.blocking = true;
+-
+-		if ( timeout && defined.setTimeout ) {
+-			clearTimeout(config.timeout);
+-			config.timeout = window.setTimeout(function() {
+-				QUnit.ok( false, "Test timed out" );
+-				QUnit.start();
+-			}, timeout);
+-		}
+-	}
+-
+-};
+-
+-// Backwards compatibility, deprecated
+-QUnit.equals = QUnit.equal;
+-QUnit.same = QUnit.deepEqual;
+-
+-// Maintain internal state
+-var config = {
+-	// The queue of tests to run
+-	queue: [],
+-
+-	// block until document ready
+-	blocking: true
+-};
+-
+-// Load paramaters
+-(function() {
+-	var location = window.location || { search: "", protocol: "file:" },
+-		GETParams = location.search.slice(1).split('&');
+-
+-	for ( var i = 0; i < GETParams.length; i++ ) {
+-		GETParams[i] = decodeURIComponent( GETParams[i] );
+-		if ( GETParams[i] === "noglobals" ) {
+-			GETParams.splice( i, 1 );
+-			i--;
+-			config.noglobals = true;
+-		} else if ( GETParams[i] === "notrycatch" ) {
+-			GETParams.splice( i, 1 );
+-			i--;
+-			config.notrycatch = true;
+-		} else if ( GETParams[i].search('=') > -1 ) {
+-			GETParams.splice( i, 1 );
+-			i--;
+-		}
+-	}
+-	
+-	// restrict modules/tests by get parameters
+-	config.filters = GETParams;
+-	
+-	// Figure out if we're running the tests from a server or not
+-	QUnit.isLocal = !!(location.protocol === 'file:');
+-})();
+-
+-// Expose the API as global variables, unless an 'exports'
+-// object exists, in that case we assume we're in CommonJS
+-if ( typeof exports === "undefined" || typeof require === "undefined" ) {
+-	extend(window, QUnit);
+-	window.QUnit = QUnit;
+-} else {
+-	extend(exports, QUnit);
+-	exports.QUnit = QUnit;
+-}
+-
+-// define these after exposing globals to keep them in these QUnit namespace only
+-extend(QUnit, {
+-	config: config,
+-
+-	// Initialize the configuration options
+-	init: function() {
+-		extend(config, {
+-			stats: { all: 0, bad: 0 },
+-			moduleStats: { all: 0, bad: 0 },
+-			started: +new Date,
+-			updateRate: 1000,
+-			blocking: false,
+-			autostart: true,
+-			autorun: false,
+-			filters: [],
+-			queue: [],
+-			semaphore: 0
+-		});
+-
+-		var tests = id("qunit-tests"),
+-			banner = id("qunit-banner"),
+-			result = id("qunit-testresult");
+-
+-		if ( tests ) {
+-			tests.innerHTML = "";
+-		}
+-
+-		if ( banner ) {
+-			banner.className = "";
+-		}
+-
+-		if ( result ) {
+-			result.parentNode.removeChild( result );
+-		}
+-	},
+-	
+-	/**
+-	 * Resets the test setup. Useful for tests that modify the DOM.
+-	 * 
+-	 * If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
+-	 */
+-	reset: function() {
+-		if ( window.jQuery ) {
+-			jQuery( "#main, #qunit-fixture" ).html( config.fixture );
+-		} else {
+-			var main = id( 'main' ) || id( 'qunit-fixture' );
+-			if ( main ) {
+-				main.innerHTML = config.fixture;
+-			}
+-		}
+-	},
+-	
+-	/**
+-	 * Trigger an event on an element.
+-	 *
+-	 * @example triggerEvent( document.body, "click" );
+-	 *
+-	 * @param DOMElement elem
+-	 * @param String type
+-	 */
+-	triggerEvent: function( elem, type, event ) {
+-		if ( document.createEvent ) {
+-			event = document.createEvent("MouseEvents");
+-			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
+-				0, 0, 0, 0, 0, false, false, false, false, 0, null);
+-			elem.dispatchEvent( event );
+-
+-		} else if ( elem.fireEvent ) {
+-			elem.fireEvent("on"+type);
+-		}
+-	},
+-	
+-	// Safe object type checking
+-	is: function( type, obj ) {
+-		return QUnit.objectType( obj ) == type;
+-	},
+-	
+-	objectType: function( obj ) {
+-		if (typeof obj === "undefined") {
+-				return "undefined";
+-
+-		// consider: typeof null === object
+-		}
+-		if (obj === null) {
+-				return "null";
+-		}
+-
+-		var type = Object.prototype.toString.call( obj )
+-			.match(/^\[object\s(.*)\]$/)[1] || '';
+-
+-		switch (type) {
+-				case 'Number':
+-						if (isNaN(obj)) {
+-								return "nan";
+-						} else {
+-								return "number";
+-						}
+-				case 'String':
+-				case 'Boolean':
+-				case 'Array':
+-				case 'Date':
+-				case 'RegExp':
+-				case 'Function':
+-						return type.toLowerCase();
+-		}
+-		if (typeof obj === "object") {
+-				return "object";
+-		}
+-		return undefined;
+-	},
+-	
+-	push: function(result, actual, expected, message) {
+-		var details = {
+-			result: result,
+-			message: message,
+-			actual: actual,
+-			expected: expected
+-		};
+-		
+-		message = escapeHtml(message) || (result ? "okay" : "failed");
+-		message = '<span class="test-message">' + message + "</span>";
+-		expected = escapeHtml(QUnit.jsDump.parse(expected));
+-		actual = escapeHtml(QUnit.jsDump.parse(actual));
+-		var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';
+-		if (actual != expected) {
+-			output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';
+-			output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';
+-		}
+-		if (!result) {
+-			var source = sourceFromStacktrace();
+-			if (source) {
+-				details.source = source;
+-				output += '<tr class="test-source"><th>Source: </th><td><pre>' + source +'</pre></td></tr>';
+-			}
+-		}
+-		output += "</table>";
+-		
+-		QUnit.log(details);
+-		
+-		config.current.assertions.push({
+-			result: !!result,
+-			message: output
+-		});
+-	},
+-	
+-	// Logging callbacks; all receive a single argument with the listed properties
+-	// run test/logs.html for any related changes
+-	begin: function() {},
+-	// done: { failed, passed, total, runtime }
+-	done: function() {},
+-	// log: { result, actual, expected, message }
+-	log: function() {},
+-	// testStart: { name }
+-	testStart: function() {},
+-	// testDone: { name, failed, passed, total }
+-	testDone: function() {},
+-	// moduleStart: { name }
+-	moduleStart: function() {},
+-	// moduleDone: { name, failed, passed, total }
+-	moduleDone: function() {}
+-});
+-
+-if ( typeof document === "undefined" || document.readyState === "complete" ) {
+-	config.autorun = true;
+-}
+-
+-addEvent(window, "load", function() {
+-	QUnit.begin({});
+-	
+-	// Initialize the config, saving the execution queue
+-	var oldconfig = extend({}, config);
+-	QUnit.init();
+-	extend(config, oldconfig);
+-
+-	config.blocking = false;
+-
+-	var userAgent = id("qunit-userAgent");
+-	if ( userAgent ) {
+-		userAgent.innerHTML = navigator.userAgent;
+-	}
+-	var banner = id("qunit-header");
+-	if ( banner ) {
+-		var paramsIndex = location.href.lastIndexOf(location.search);
+-		if ( paramsIndex > -1 ) {
+-			var mainPageLocation = location.href.slice(0, paramsIndex);
+-			if ( mainPageLocation == location.href ) {
+-				banner.innerHTML = '<a href=""> ' + banner.innerHTML + '</a> ';
+-			} else {
+-				var testName = decodeURIComponent(location.search.slice(1));
+-				banner.innerHTML = '<a href="' + mainPageLocation + '">' + banner.innerHTML + '</a> &#8250; <a href="">' + testName + '</a>';
+-			}
+-		}
+-	}
+-	
+-	var toolbar = id("qunit-testrunner-toolbar");
+-	if ( toolbar ) {
+-		var filter = document.createElement("input");
+-		filter.type = "checkbox";
+-		filter.id = "qunit-filter-pass";
+-		addEvent( filter, "click", function() {
+-			var li = document.getElementsByTagName("li");
+-			for ( var i = 0; i < li.length; i++ ) {
+-				if ( li[i].className.indexOf("pass") > -1 ) {
+-					li[i].style.display = filter.checked ? "none" : "";
+-				}
+-			}
+-			if ( defined.sessionStorage ) {
+-				sessionStorage.setItem("qunit-filter-passed-tests", filter.checked ? "true" : "");
+-			}
+-		});
+-		if ( defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) {
+-			filter.checked = true;
+-		}
+-		toolbar.appendChild( filter );
+-
+-		var label = document.createElement("label");
+-		label.setAttribute("for", "qunit-filter-pass");
+-		label.innerHTML = "Hide passed tests";
+-		toolbar.appendChild( label );
+-	}
+-
+-	var main = id('main') || id('qunit-fixture');
+-	if ( main ) {
+-		config.fixture = main.innerHTML;
+-	}
+-
+-	if (config.autostart) {
+-		QUnit.start();
+-	}
+-});
+-
+-function done() {
+-	config.autorun = true;
+-
+-	// Log the last module results
+-	if ( config.currentModule ) {
+-		QUnit.moduleDone( {
+-			name: config.currentModule,
+-			failed: config.moduleStats.bad,
+-			passed: config.moduleStats.all - config.moduleStats.bad,
+-			total: config.moduleStats.all
+-		} );
+-	}
+-
+-	var banner = id("qunit-banner"),
+-		tests = id("qunit-tests"),
+-		runtime = +new Date - config.started,
+-		passed = config.stats.all - config.stats.bad,
+-		html = [
+-			'Tests completed in ',
+-			runtime,
+-			' milliseconds.<br/>',
+-			'<span class="passed">',
+-			passed,
+-			'</span> tests of <span class="total">',
+-			config.stats.all,
+-			'</span> passed, <span class="failed">',
+-			config.stats.bad,
+-			'</span> failed.'
+-		].join('');
+-
+-	if ( banner ) {
+-		banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
+-	}
+-
+-	if ( tests ) {	
+-		var result = id("qunit-testresult");
+-
+-		if ( !result ) {
+-			result = document.createElement("p");
+-			result.id = "qunit-testresult";
+-			result.className = "result";
+-			tests.parentNode.insertBefore( result, tests.nextSibling );
+-		}
+-
+-		result.innerHTML = html;
+-	}
+-
+-	QUnit.done( {
+-		failed: config.stats.bad,
+-		passed: passed, 
+-		total: config.stats.all,
+-		runtime: runtime
+-	} );
+-}
+-
+-function validTest( name ) {
+-	var i = config.filters.length,
+-		run = false;
+-
+-	if ( !i ) {
+-		return true;
+-	}
+-	
+-	while ( i-- ) {
+-		var filter = config.filters[i],
+-			not = filter.charAt(0) == '!';
+-
+-		if ( not ) {
+-			filter = filter.slice(1);
+-		}
+-
+-		if ( name.indexOf(filter) !== -1 ) {
+-			return !not;
+-		}
+-
+-		if ( not ) {
+-			run = true;
+-		}
+-	}
+-
+-	return run;
+-}
+-
+-// so far supports only Firefox, Chrome and Opera (buggy)
+-// could be extended in the future to use something like https://github.com/csnover/TraceKit
+-function sourceFromStacktrace() {
+-	try {
+-		throw new Error();
+-	} catch ( e ) {
+-		if (e.stacktrace) {
+-			// Opera
+-			return e.stacktrace.split("\n")[6];
+-		} else if (e.stack) {
+-			// Firefox, Chrome
+-			return e.stack.split("\n")[4];
+-		}
+-	}
+-}
+-
+-function resultDisplayStyle(passed) {
+-	return passed && id("qunit-filter-pass") && id("qunit-filter-pass").checked ? 'none' : '';
+-}
+-
+-function escapeHtml(s) {
+-	if (!s) {
+-		return "";
+-	}
+-	s = s + "";
+-	return s.replace(/[\&"<>\\]/g, function(s) {
+-		switch(s) {
+-			case "&": return "&amp;";
+-			case "\\": return "\\\\";
+-			case '"': return '\"';
+-			case "<": return "&lt;";
+-			case ">": return "&gt;";
+-			default: return s;
+-		}
+-	});
+-}
+-
+-function synchronize( callback ) {
+-	config.queue.push( callback );
+-
+-	if ( config.autorun && !config.blocking ) {
+-		process();
+-	}
+-}
+-
+-function process() {
+-	var start = (new Date()).getTime();
+-
+-	while ( config.queue.length && !config.blocking ) {
+-		if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {
+-			config.queue.shift()();
+-		} else {
+-			window.setTimeout( process, 13 );
+-			break;
+-		}
+-	}
+-  if (!config.blocking && !config.queue.length) {
+-    done();
+-  }
+-}
+-
+-function saveGlobal() {
+-	config.pollution = [];
+-	
+-	if ( config.noglobals ) {
+-		for ( var key in window ) {
+-			config.pollution.push( key );
+-		}
+-	}
+-}
+-
+-function checkPollution( name ) {
+-	var old = config.pollution;
+-	saveGlobal();
+-	
+-	var newGlobals = diff( old, config.pollution );
+-	if ( newGlobals.length > 0 ) {
+-		ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
+-		config.current.expected++;
+-	}
+-
+-	var deletedGlobals = diff( config.pollution, old );
+-	if ( deletedGlobals.length > 0 ) {
+-		ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
+-		config.current.expected++;
+-	}
+-}
+-
+-// returns a new Array with the elements that are in a but not in b
+-function diff( a, b ) {
+-	var result = a.slice();
+-	for ( var i = 0; i < result.length; i++ ) {
+-		for ( var j = 0; j < b.length; j++ ) {
+-			if ( result[i] === b[j] ) {
+-				result.splice(i, 1);
+-				i--;
+-				break;
+-			}
+-		}
+-	}
+-	return result;
+-}
+-
+-function fail(message, exception, callback) {
+-	if ( typeof console !== "undefined" && console.error && console.warn ) {
+-		console.error(message);
+-		console.error(exception);
+-		console.warn(callback.toString());
+-
+-	} else if ( window.opera && opera.postError ) {
+-		opera.postError(message, exception, callback.toString);
+-	}
+-}
+-
+-function extend(a, b) {
+-	for ( var prop in b ) {
+-		a[prop] = b[prop];
+-	}
+-
+-	return a;
+-}
+-
+-function addEvent(elem, type, fn) {
+-	if ( elem.addEventListener ) {
+-		elem.addEventListener( type, fn, false );
+-	} else if ( elem.attachEvent ) {
+-		elem.attachEvent( "on" + type, fn );
+-	} else {
+-		fn();
+-	}
+-}
+-
+-function id(name) {
+-	return !!(typeof document !== "undefined" && document && document.getElementById) &&
+-		document.getElementById( name );
+-}
+-
+-// Test for equality any JavaScript type.
+-// Discussions and reference: http://philrathe.com/articles/equiv
+-// Test suites: http://philrathe.com/tests/equiv
+-// Author: Philippe Rathé <prathe@gmail.com>
+-QUnit.equiv = function () {
+-
+-    var innerEquiv; // the real equiv function
+-    var callers = []; // stack to decide between skip/abort functions
+-    var parents = []; // stack to avoiding loops from circular referencing
+-
+-    // Call the o related callback with the given arguments.
+-    function bindCallbacks(o, callbacks, args) {
+-        var prop = QUnit.objectType(o);
+-        if (prop) {
+-            if (QUnit.objectType(callbacks[prop]) === "function") {
+-                return callbacks[prop].apply(callbacks, args);
+-            } else {
+-                return callbacks[prop]; // or undefined
+-            }
+-        }
+-    }
+-    
+-    var callbacks = function () {
+-
+-        // for string, boolean, number and null
+-        function useStrictEquality(b, a) {
+-            if (b instanceof a.constructor || a instanceof b.constructor) {
+-                // to catch short annotaion VS 'new' annotation of a declaration
+-                // e.g. var i = 1;
+-                //      var j = new Number(1);
+-                return a == b;
+-            } else {
+-                return a === b;
+-            }
+-        }
+-
+-        return {
+-            "string": useStrictEquality,
+-            "boolean": useStrictEquality,
+-            "number": useStrictEquality,
+-            "null": useStrictEquality,
+-            "undefined": useStrictEquality,
+-
+-            "nan": function (b) {
+-                return isNaN(b);
+-            },
+-
+-            "date": function (b, a) {
+-                return QUnit.objectType(b) === "date" && a.valueOf() === b.valueOf();
+-            },
+-
+-            "regexp": function (b, a) {
+-                return QUnit.objectType(b) === "regexp" &&
+-                    a.source === b.source && // the regex itself
+-                    a.global === b.global && // and its modifers (gmi) ...
+-                    a.ignoreCase === b.ignoreCase &&
+-                    a.multiline === b.multiline;
+-            },
+-
+-            // - skip when the property is a method of an instance (OOP)
+-            // - abort otherwise,
+-            //   initial === would have catch identical references anyway
+-            "function": function () {
+-                var caller = callers[callers.length - 1];
+-                return caller !== Object &&
+-                        typeof caller !== "undefined";
+-            },
+-
+-            "array": function (b, a) {
+-                var i, j, loop;
+-                var len;
+-
+-                // b could be an object literal here
+-                if ( ! (QUnit.objectType(b) === "array")) {
+-                    return false;
+-                }   
+-                
+-                len = a.length;
+-                if (len !== b.length) { // safe and faster
+-                    return false;
+-                }
+-                
+-                //track reference to avoid circular references
+-                parents.push(a);
+-                for (i = 0; i < len; i++) {
+-                    loop = false;
+-                    for(j=0;j<parents.length;j++){
+-                        if(parents[j] === a[i]){
+-                            loop = true;//dont rewalk array
+-                        }
+-                    }
+-                    if (!loop && ! innerEquiv(a[i], b[i])) {
+-                        parents.pop();
+-                        return false;
+-                    }
+-                }
+-                parents.pop();
+-                return true;
+-            },
+-
+-            "object": function (b, a) {
+-                var i, j, loop;
+-                var eq = true; // unless we can proove it
+-                var aProperties = [], bProperties = []; // collection of strings
+-
+-                // comparing constructors is more strict than using instanceof
+-                if ( a.constructor !== b.constructor) {
+-                    return false;
+-                }
+-
+-                // stack constructor before traversing properties
+-                callers.push(a.constructor);
+-                //track reference to avoid circular references
+-                parents.push(a);
+-                
+-                for (i in a) { // be strict: don't ensures hasOwnProperty and go deep
+-                    loop = false;
+-                    for(j=0;j<parents.length;j++){
+-                        if(parents[j] === a[i])
+-                            loop = true; //don't go down the same path twice
+-                    }
+-                    aProperties.push(i); // collect a's properties
+-
+-                    if (!loop && ! innerEquiv(a[i], b[i])) {
+-                        eq = false;
+-                        break;
+-                    }
+-                }
+-
+-                callers.pop(); // unstack, we are done
+-                parents.pop();
+-
+-                for (i in b) {
+-                    bProperties.push(i); // collect b's properties
+-                }
+-
+-                // Ensures identical properties name
+-                return eq && innerEquiv(aProperties.sort(), bProperties.sort());
+-            }
+-        };
+-    }();
+-
+-    innerEquiv = function () { // can take multiple arguments
+-        var args = Array.prototype.slice.apply(arguments);
+-        if (args.length < 2) {
+-            return true; // end transition
+-        }
+-
+-        return (function (a, b) {
+-            if (a === b) {
+-                return true; // catch the most you can
+-            } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || QUnit.objectType(a) !== QUnit.objectType(b)) {
+-                return false; // don't lose time with error prone cases
+-            } else {
+-                return bindCallbacks(a, callbacks, [b, a]);
+-            }
+-
+-        // apply transition with (1..n) arguments
+-        })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1));
+-    };
+-
+-    return innerEquiv;
+-
+-}();
+-
+-/**
+- * jsDump
+- * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+- * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php)
+- * Date: 5/15/2008
+- * @projectDescription Advanced and extensible data dumping for Javascript.
+- * @version 1.0.0
+- * @author Ariel Flesler
+- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+- */
+-QUnit.jsDump = (function() {
+-	function quote( str ) {
+-		return '"' + str.toString().replace(/"/g, '\\"') + '"';
+-	};
+-	function literal( o ) {
+-		return o + '';	
+-	};
+-	function join( pre, arr, post ) {
+-		var s = jsDump.separator(),
+-			base = jsDump.indent(),
+-			inner = jsDump.indent(1);
+-		if ( arr.join )
+-			arr = arr.join( ',' + s + inner );
+-		if ( !arr )
+-			return pre + post;
+-		return [ pre, inner + arr, base + post ].join(s);
+-	};
+-	function array( arr ) {
+-		var i = arr.length,	ret = Array(i);					
+-		this.up();
+-		while ( i-- )
+-			ret[i] = this.parse( arr[i] );				
+-		this.down();
+-		return join( '[', ret, ']' );
+-	};
+-	
+-	var reName = /^function (\w+)/;
+-	
+-	var jsDump = {
+-		parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance
+-			var	parser = this.parsers[ type || this.typeOf(obj) ];
+-			type = typeof parser;			
+-			
+-			return type == 'function' ? parser.call( this, obj ) :
+-				   type == 'string' ? parser :
+-				   this.parsers.error;
+-		},
+-		typeOf:function( obj ) {
+-			var type;
+-			if ( obj === null ) {
+-				type = "null";
+-			} else if (typeof obj === "undefined") {
+-				type = "undefined";
+-			} else if (QUnit.is("RegExp", obj)) {
+-				type = "regexp";
+-			} else if (QUnit.is("Date", obj)) {
+-				type = "date";
+-			} else if (QUnit.is("Function", obj)) {
+-				type = "function";
+-			} else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") {
+-				type = "window";
+-			} else if (obj.nodeType === 9) {
+-				type = "document";
+-			} else if (obj.nodeType) {
+-				type = "node";
+-			} else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {
+-				type = "array";
+-			} else {
+-				type = typeof obj;
+-			}
+-			return type;
+-		},
+-		separator:function() {
+-			return this.multiline ?	this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
+-		},
+-		indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
+-			if ( !this.multiline )
+-				return '';
+-			var chr = this.indentChar;
+-			if ( this.HTML )
+-				chr = chr.replace(/\t/g,'   ').replace(/ /g,'&nbsp;');
+-			return Array( this._depth_ + (extra||0) ).join(chr);
+-		},
+-		up:function( a ) {
+-			this._depth_ += a || 1;
+-		},
+-		down:function( a ) {
+-			this._depth_ -= a || 1;
+-		},
+-		setParser:function( name, parser ) {
+-			this.parsers[name] = parser;
+-		},
+-		// The next 3 are exposed so you can use them
+-		quote:quote, 
+-		literal:literal,
+-		join:join,
+-		//
+-		_depth_: 1,
+-		// This is the list of parsers, to modify them, use jsDump.setParser
+-		parsers:{
+-			window: '[Window]',
+-			document: '[Document]',
+-			error:'[ERROR]', //when no parser is found, shouldn't happen
+-			unknown: '[Unknown]',
+-			'null':'null',
+-			undefined:'undefined',
+-			'function':function( fn ) {
+-				var ret = 'function',
+-					name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
+-				if ( name )
+-					ret += ' ' + name;
+-				ret += '(';
+-				
+-				ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');
+-				return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );
+-			},
+-			array: array,
+-			nodelist: array,
+-			arguments: array,
+-			object:function( map ) {
+-				var ret = [ ];
+-				QUnit.jsDump.up();
+-				for ( var key in map )
+-					ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(map[key]) );
+-				QUnit.jsDump.down();
+-				return join( '{', ret, '}' );
+-			},
+-			node:function( node ) {
+-				var open = QUnit.jsDump.HTML ? '&lt;' : '<',
+-					close = QUnit.jsDump.HTML ? '&gt;' : '>';
+-					
+-				var tag = node.nodeName.toLowerCase(),
+-					ret = open + tag;
+-					
+-				for ( var a in QUnit.jsDump.DOMAttrs ) {
+-					var val = node[QUnit.jsDump.DOMAttrs[a]];
+-					if ( val )
+-						ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );
+-				}
+-				return ret + close + open + '/' + tag + close;
+-			},
+-			functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
+-				var l = fn.length;
+-				if ( !l ) return '';				
+-				
+-				var args = Array(l);
+-				while ( l-- )
+-					args[l] = String.fromCharCode(97+l);//97 is 'a'
+-				return ' ' + args.join(', ') + ' ';
+-			},
+-			key:quote, //object calls it internally, the key part of an item in a map
+-			functionCode:'[code]', //function calls it internally, it's the content of the function
+-			attribute:quote, //node calls it internally, it's an html attribute value
+-			string:quote,
+-			date:quote,
+-			regexp:literal, //regex
+-			number:literal,
+-			'boolean':literal
+-		},
+-		DOMAttrs:{//attributes to dump from nodes, name=>realName
+-			id:'id',
+-			name:'name',
+-			'class':'className'
+-		},
+-		HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
+-		indentChar:'  ',//indentation unit
+-		multiline:true //if true, items in a collection, are separated by a \n, else just a space.
+-	};
+-
+-	return jsDump;
+-})();
+-
+-// from Sizzle.js
+-function getText( elems ) {
+-	var ret = "", elem;
+-
+-	for ( var i = 0; elems[i]; i++ ) {
+-		elem = elems[i];
+-
+-		// Get the text from text nodes and CDATA nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+-			ret += elem.nodeValue;
+-
+-		// Traverse everything else, except comment nodes
+-		} else if ( elem.nodeType !== 8 ) {
+-			ret += getText( elem.childNodes );
+-		}
+-	}
+-
+-	return ret;
+-};
+-
+-/*
+- * Javascript Diff Algorithm
+- *  By John Resig (http://ejohn.org/)
+- *  Modified by Chu Alan "sprite"
+- *
+- * Released under the MIT license.
+- *
+- * More Info:
+- *  http://ejohn.org/projects/javascript-diff-algorithm/
+- *  
+- * Usage: QUnit.diff(expected, actual)
+- * 
+- * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+- */
+-QUnit.diff = (function() {
+-	function diff(o, n){
+-		var ns = new Object();
+-		var os = new Object();
+-		
+-		for (var i = 0; i < n.length; i++) {
+-			if (ns[n[i]] == null) 
+-				ns[n[i]] = {
+-					rows: new Array(),
+-					o: null
+-				};
+-			ns[n[i]].rows.push(i);
+-		}
+-		
+-		for (var i = 0; i < o.length; i++) {
+-			if (os[o[i]] == null) 
+-				os[o[i]] = {
+-					rows: new Array(),
+-					n: null
+-				};
+-			os[o[i]].rows.push(i);
+-		}
+-		
+-		for (var i in ns) {
+-			if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
+-				n[ns[i].rows[0]] = {
+-					text: n[ns[i].rows[0]],
+-					row: os[i].rows[0]
+-				};
+-				o[os[i].rows[0]] = {
+-					text: o[os[i].rows[0]],
+-					row: ns[i].rows[0]
+-				};
+-			}
+-		}
+-		
+-		for (var i = 0; i < n.length - 1; i++) {
+-			if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
+-			n[i + 1] == o[n[i].row + 1]) {
+-				n[i + 1] = {
+-					text: n[i + 1],
+-					row: n[i].row + 1
+-				};
+-				o[n[i].row + 1] = {
+-					text: o[n[i].row + 1],
+-					row: i + 1
+-				};
+-			}
+-		}
+-		
+-		for (var i = n.length - 1; i > 0; i--) {
+-			if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
+-			n[i - 1] == o[n[i].row - 1]) {
+-				n[i - 1] = {
+-					text: n[i - 1],
+-					row: n[i].row - 1
+-				};
+-				o[n[i].row - 1] = {
+-					text: o[n[i].row - 1],
+-					row: i - 1
+-				};
+-			}
+-		}
+-		
+-		return {
+-			o: o,
+-			n: n
+-		};
+-	}
+-	
+-	return function(o, n){
+-		o = o.replace(/\s+$/, '');
+-		n = n.replace(/\s+$/, '');
+-		var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/));
+-
+-		var str = "";
+-		
+-		var oSpace = o.match(/\s+/g);
+-		if (oSpace == null) {
+-			oSpace = [" "];
+-		}
+-		else {
+-			oSpace.push(" ");
+-		}
+-		var nSpace = n.match(/\s+/g);
+-		if (nSpace == null) {
+-			nSpace = [" "];
+-		}
+-		else {
+-			nSpace.push(" ");
+-		}
+-		
+-		if (out.n.length == 0) {
+-			for (var i = 0; i < out.o.length; i++) {
+-				str += '<del>' + out.o[i] + oSpace[i] + "</del>";
+-			}
+-		}
+-		else {
+-			if (out.n[0].text == null) {
+-				for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
+-					str += '<del>' + out.o[n] + oSpace[n] + "</del>";
+-				}
+-			}
+-			
+-			for (var i = 0; i < out.n.length; i++) {
+-				if (out.n[i].text == null) {
+-					str += '<ins>' + out.n[i] + nSpace[i] + "</ins>";
+-				}
+-				else {
+-					var pre = "";
+-					
+-					for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {
+-						pre += '<del>' + out.o[n] + oSpace[n] + "</del>";
+-					}
+-					str += " " + out.n[i].text + nSpace[i] + pre;
+-				}
+-			}
+-		}
+-		
+-		return str;
+-	};
+-})();
+-
+-})(this);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/src/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/src/jquery.sidebar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/src/jquery.sidebar.js	(revision 15488)
+@@ -1,226 +0,0 @@
+-/*!
+- * jquery.sidebar v1.0.2
+- * http://sideroad.secret.jp/
+- *
+- * Copyright (c) 2009 sideroad
+- *
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * Date: 2009-09-01
+- */
+-(function( $, _window ) {
+-    $.fn.sidebar = function(options){
+-
+-        return this.each(function(){
+-            var elem = $(this),
+-                data = elem.data("sidebar")||{},
+-                margin,
+-                width,
+-                height,
+-                duration = data.duration,
+-                injectWidth,
+-                injectHeight,
+-                injectCss,
+-                containerCss,
+-                bodyCss,
+-                position,
+-                enter,
+-                leave,
+-                opened,
+-                closed,
+-                isInnerElement,
+-                container = $("<div><div/>"),
+-                inject = $("<div><div/>"),
+-                body = $("<div><div/>"),
+-                root,
+-                parent,
+-                open = function(){
+-                    var data = elem.data("sidebar") || {},
+-                        opened = data.callback.sidebar.open,
+-                        container = data.container,
+-                        inject = data.inject,
+-                        body = data.body;
+-                    
+-                    if (data.isEnter || data.isProcessing) {
+-                        return;
+-                    }
+-                    data.isEnter = true;
+-                    data.isProcessing = true;
+-                    container.animate(data.animate.container.enter, {
+-                        duration: duration,
+-                        complete: function(){
+-                            inject.fadeOut(duration, function(){
+-                                body.show("clip", duration,function(){
+-                                    data.isProcessing = false;
+-                                    if(opened) {
+-                                        opened();
+-                                    }
+-                                });
+-                            });
+-                        }
+-                    });
+-                },
+-                close = function(){
+-                    var data = elem.data("sidebar") || {},
+-                        closed = data.callback.sidebar.close,
+-                        container = data.container,
+-                        inject = data.inject,
+-                        body = data.body;
+-                       
+-                    if(!data.isEnter || data.isProcessing ) {
+-                        return;
+-                    }
+-                    data.isProcessing = true;
+-                    container.animate(data.animate.container.leave, {
+-                        duration: duration,
+-                        complete: function(){
+-                            body.hide("clip", duration, function(){
+-                                inject.fadeIn(duration, function(){
+-                                    data.isEnter = false;
+-                                    data.isProcessing = false;
+-                                    if(closed) {
+-                                        closed();
+-                                    }
+-                                });
+-                            });
+-                        }
+-                    });
+-                };
+-            
+-            
+-            if(typeof options === "string"){
+-                switch(options){
+-                    case "open" :
+-                        open();
+-                        break;
+-                    case "close" : 
+-                        close();
+-                        break;
+-                }
+-                return;
+-            }
+-                
+-            //default setting
+-            options = $.extend(true, {
+-                root : $(document.body),
+-                position : "left",
+-                callback: {
+-                    item : {
+-                        enter : function(){
+-                            $(this).animate({marginLeft:"5px"},250);
+-                        },
+-                        leave : function(){
+-                            $(this).animate({marginLeft:"0px"},250);
+-                        }
+-                    },
+-                    sidebar : {
+-                        open : function(){
+-                            
+-                        },
+-                        close : function(){
+-                            
+-                        }
+-                    }
+-                },
+-                animate : {
+-                    container : {
+-                        enter : {},
+-                        leave : {}
+-                    }
+-                },
+-                duration : 200,
+-                open : "mouseenter.sidebar",
+-                close : "mouseleave.sidebar"
+-            }, options);
+-            
+-            root = options.root;
+-            isInnerElement = !root.is(document.body);
+-            parent = ( isInnerElement ) ? root.addClass("sidebar-root") : $(_window);
+-            
+-            position = options.position;
+-            duration = options.duration;
+-            
+-            container.attr("id", "jquerySideBar" + new Date().getTime()).addClass("sidebar-container").addClass(position);
+-            inject.addClass("sidebar-inject").addClass(position);
+-            body.addClass("sidebar-body");
+-            
+-            //append to body
+-            body.append(this);
+-            container.append(body);
+-            container.append(inject);
+-            root.append(container);
+-            
+-            width = container.width();
+-            height = container.height();
+-            injectWidth = inject.width();
+-            injectHeight = inject.height();
+-            
+-            containerCss = {
+-                height: height,
+-                width: width
+-            };
+-            bodyCss = {
+-                height: height,
+-                width: width
+-            };
+-            
+-            if(position === "left" || position === "right") {
+-                margin = width - injectWidth;
+-                injectCss = {
+-                    height : height,
+-                    width : injectWidth
+-                };
+-                containerCss.top = options.top || (parent.height()/2) - (height/2) + "px";
+-                
+-            } else {
+-                margin = height - injectHeight;
+-                injectCss = {
+-                    height : injectHeight,
+-                    width : width
+-                };
+-                containerCss.left = options.left || (parent.width()/2) - (width/2) + "px";
+-            }
+-            
+-            containerCss[position] = "-" + margin + "px";
+-            injectCss[position] = margin + "px";
+-            options.animate.container.enter[position] = 0;
+-            options.animate.container.leave[position] = "-" + margin;
+-            
+-            //container
+-            container.css(containerCss);
+-            
+-            //inject
+-            inject.css(injectCss);
+-            
+-            //body
+-            body.css(bodyCss).hide();
+-            
+-            //menu callback
+-            $(this).addClass("sidebar-menu").find("li")
+-                .bind("mouseenter.sidebar",options.callback.item.enter)
+-                .bind("mouseleave.sidebar",options.callback.item.leave);
+-            
+-            //container events
+-            if(options.open) {
+-                container.bind(options.open,open);
+-            }
+-            if(options.close) {
+-                container.bind(options.close,close);
+-            }
+-            
+-            //store data
+-            options.container = container;
+-            options.inject = inject;
+-            options.body = body;
+-            elem.data("sidebar", options);
+-            
+-            parent.resize(function(){
+-                if(position === "left" || position === "right") {
+-                    container.css({top:($(this).height()/2) - (height/2) + "px"});
+-                } else {
+-                    container.css({left:($(this).width()/2) - (width/2) + "px"});
+-                }
+-            });
+-            
+-        });
+-    };
+-}(jQuery, this));
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/demo.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/demo.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/demo.html	(revision 15488)
+@@ -1,67 +0,0 @@
+-﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+-"http://www.w3.org/TR/html4/loose.dtd">
+-<html xmlns="http://www.w3.org/1999/xhtml">
+-    <head>
+-        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+-        <title>jquery.sidebar.js</title>
+-        <link rel="stylesheet" type="text/css" href="css/dark-glass/sidebar.css" />
+-        <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
+-        <script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
+-        <script type="text/javascript" src="src/jquery.sidebar.js"></script>
+-    </head>
+-    <body>
+-        <ul id="demo_menu1" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu2" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu3" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu4" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-
+-        <b style="font-size:80px;position:absolute;top:42%;left:35%;" >jquery.sidebar</b>
+-        <script type="text/javascript">
+-        $("ul#demo_menu1").sidebar();
+-        $("ul#demo_menu2").sidebar({
+-            position:"right",
+-            callback:{
+-                item : {
+-                    enter : function(){
+-                        $(this).find("a").animate({color:"red"}, 250);
+-                    },
+-                    leave : function(){
+-                        $(this).find("a").animate({color:"white"}, 250);
+-                    }
+-                }
+-            }
+-        });
+-        $("ul#demo_menu3").sidebar({
+-            position:"top",
+-          open:"click"
+-        });
+-        $("ul#demo_menu4").sidebar({
+-            position:"bottom"
+-        });
+-        </script>
+-    </body>
+-</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.js	(revision 15488)
+@@ -1,240 +0,0 @@
+-(function( $ ) {
+-
+-    module( "jquery.sidebar" );
+-    
+-    var destroy = function destroy(){
+-        $(".sidebar-container.left,.sidebar-container.top,.sidebar-container.right,.sidebar-container.bottom").remove();
+-    };
+-    
+-    asyncTest( "default/left", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "left";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-50px" );
+-        
+-        container.mouseenter();
+-    });
+-    asyncTest( "top", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "top";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-150px" );
+-        
+-        container.mouseenter();
+-    });
+-    asyncTest( "right", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "right";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-50px" );
+-        
+-        container.mouseenter();
+-    });
+-    
+-    asyncTest( "bottom", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "bottom";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-150px" );
+-        
+-        container.mouseenter();
+-    });
+-    
+-    
+-    asyncTest( "open-event", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "left";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            open : "click",
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-50px" );
+-        
+-        container.click();
+-    });
+-    
+-    
+-    asyncTest( "call open/close method manually", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "left";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            open : "click",
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        elem.sidebar("close");
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-50px" );
+-        
+-        elem.sidebar("open");
+-
+-    });
+-
+-})( jQuery );
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.html	(revision 15488)
+@@ -1,40 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-    <meta charset="utf-8">
+-    <title>jQuery SideBar Test Suite</title>
+-
+-
+-    <link rel="stylesheet" type="text/css" href="../lib/qunit.css" />
+-    <link rel="stylesheet" type="text/css" href="../css/dark-glass/sidebar.css" />
+-    
+-    <script type="text/javascript" src="../lib/jquery.js"></script>
+-    <script type="text/javascript" src="../lib/jquery-ui.js"></script>
+-    <script type="text/javascript" src="../lib/qunit.js" ></script>
+-    <script type="text/javascript" src="../src/jquery.sidebar.js"></script>
+-    <script type="text/javascript" src="jquery.sidebar.js"></script>
+-    
+-</head>
+-<body>
+-
+-<h1 id="qunit-header">jQuery SideBar Test Suite</h1>
+-<h2 id="qunit-banner"></h2>
+-<div id="qunit-testrunner-toolbar"></div>
+-<h2 id="qunit-userAgent"></h2>
+-<ol id="qunit-tests"></ol>
+-<div id="qunit-fixture">
+-
+-        <ul id="sidebar" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-</div>
+-<script>
+-if (location.hash === '#testem')
+-    document.write('<script src="/testem.js"></'+'script>')
+-</script>
+-</body>
+-</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.js	(revision 15488)
+@@ -1,11737 +0,0 @@
+-/*!
+- * jQuery UI 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI
+- */
+-(function( $, undefined ) {
+-
+-// prevent duplicate loading
+-// this is only a problem because we proxy existing functions
+-// and we don't want to double proxy them
+-$.ui = $.ui || {};
+-if ( $.ui.version ) {
+-	return;
+-}
+-
+-$.extend( $.ui, {
+-	version: "1.8.15",
+-
+-	keyCode: {
+-		ALT: 18,
+-		BACKSPACE: 8,
+-		CAPS_LOCK: 20,
+-		COMMA: 188,
+-		COMMAND: 91,
+-		COMMAND_LEFT: 91, // COMMAND
+-		COMMAND_RIGHT: 93,
+-		CONTROL: 17,
+-		DELETE: 46,
+-		DOWN: 40,
+-		END: 35,
+-		ENTER: 13,
+-		ESCAPE: 27,
+-		HOME: 36,
+-		INSERT: 45,
+-		LEFT: 37,
+-		MENU: 93, // COMMAND_RIGHT
+-		NUMPAD_ADD: 107,
+-		NUMPAD_DECIMAL: 110,
+-		NUMPAD_DIVIDE: 111,
+-		NUMPAD_ENTER: 108,
+-		NUMPAD_MULTIPLY: 106,
+-		NUMPAD_SUBTRACT: 109,
+-		PAGE_DOWN: 34,
+-		PAGE_UP: 33,
+-		PERIOD: 190,
+-		RIGHT: 39,
+-		SHIFT: 16,
+-		SPACE: 32,
+-		TAB: 9,
+-		UP: 38,
+-		WINDOWS: 91 // COMMAND
+-	}
+-});
+-
+-// plugins
+-$.fn.extend({
+-	propAttr: $.fn.prop || $.fn.attr,
+-
+-	_focus: $.fn.focus,
+-	focus: function( delay, fn ) {
+-		return typeof delay === "number" ?
+-			this.each(function() {
+-				var elem = this;
+-				setTimeout(function() {
+-					$( elem ).focus();
+-					if ( fn ) {
+-						fn.call( elem );
+-					}
+-				}, delay );
+-			}) :
+-			this._focus.apply( this, arguments );
+-	},
+-
+-	scrollParent: function() {
+-		var scrollParent;
+-		if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+-			}).eq(0);
+-		} else {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+-			}).eq(0);
+-		}
+-
+-		return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
+-	},
+-
+-	zIndex: function( zIndex ) {
+-		if ( zIndex !== undefined ) {
+-			return this.css( "zIndex", zIndex );
+-		}
+-
+-		if ( this.length ) {
+-			var elem = $( this[ 0 ] ), position, value;
+-			while ( elem.length && elem[ 0 ] !== document ) {
+-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+-				// This makes behavior of this function consistent across browsers
+-				// WebKit always returns auto if the element is positioned
+-				position = elem.css( "position" );
+-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+-					// IE returns 0 when zIndex is not specified
+-					// other browsers return a string
+-					// we ignore the case of nested elements with an explicit value of 0
+-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+-					value = parseInt( elem.css( "zIndex" ), 10 );
+-					if ( !isNaN( value ) && value !== 0 ) {
+-						return value;
+-					}
+-				}
+-				elem = elem.parent();
+-			}
+-		}
+-
+-		return 0;
+-	},
+-
+-	disableSelection: function() {
+-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+-			".ui-disableSelection", function( event ) {
+-				event.preventDefault();
+-			});
+-	},
+-
+-	enableSelection: function() {
+-		return this.unbind( ".ui-disableSelection" );
+-	}
+-});
+-
+-$.each( [ "Width", "Height" ], function( i, name ) {
+-	var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+-		type = name.toLowerCase(),
+-		orig = {
+-			innerWidth: $.fn.innerWidth,
+-			innerHeight: $.fn.innerHeight,
+-			outerWidth: $.fn.outerWidth,
+-			outerHeight: $.fn.outerHeight
+-		};
+-
+-	function reduce( elem, size, border, margin ) {
+-		$.each( side, function() {
+-			size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
+-			if ( border ) {
+-				size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
+-			}
+-			if ( margin ) {
+-				size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
+-			}
+-		});
+-		return size;
+-	}
+-
+-	$.fn[ "inner" + name ] = function( size ) {
+-		if ( size === undefined ) {
+-			return orig[ "inner" + name ].call( this );
+-		}
+-
+-		return this.each(function() {
+-			$( this ).css( type, reduce( this, size ) + "px" );
+-		});
+-	};
+-
+-	$.fn[ "outer" + name] = function( size, margin ) {
+-		if ( typeof size !== "number" ) {
+-			return orig[ "outer" + name ].call( this, size );
+-		}
+-
+-		return this.each(function() {
+-			$( this).css( type, reduce( this, size, true, margin ) + "px" );
+-		});
+-	};
+-});
+-
+-// selectors
+-function focusable( element, isTabIndexNotNaN ) {
+-	var nodeName = element.nodeName.toLowerCase();
+-	if ( "area" === nodeName ) {
+-		var map = element.parentNode,
+-			mapName = map.name,
+-			img;
+-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+-			return false;
+-		}
+-		img = $( "img[usemap=#" + mapName + "]" )[0];
+-		return !!img && visible( img );
+-	}
+-	return ( /input|select|textarea|button|object/.test( nodeName )
+-		? !element.disabled
+-		: "a" == nodeName
+-			? element.href || isTabIndexNotNaN
+-			: isTabIndexNotNaN)
+-		// the element and all of its ancestors must be visible
+-		&& visible( element );
+-}
+-
+-function visible( element ) {
+-	return !$( element ).parents().andSelf().filter(function() {
+-		return $.curCSS( this, "visibility" ) === "hidden" ||
+-			$.expr.filters.hidden( this );
+-	}).length;
+-}
+-
+-$.extend( $.expr[ ":" ], {
+-	data: function( elem, i, match ) {
+-		return !!$.data( elem, match[ 3 ] );
+-	},
+-
+-	focusable: function( element ) {
+-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+-	},
+-
+-	tabbable: function( element ) {
+-		var tabIndex = $.attr( element, "tabindex" ),
+-			isTabIndexNaN = isNaN( tabIndex );
+-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+-	}
+-});
+-
+-// support
+-$(function() {
+-	var body = document.body,
+-		div = body.appendChild( div = document.createElement( "div" ) );
+-
+-	$.extend( div.style, {
+-		minHeight: "100px",
+-		height: "auto",
+-		padding: 0,
+-		borderWidth: 0
+-	});
+-
+-	$.support.minHeight = div.offsetHeight === 100;
+-	$.support.selectstart = "onselectstart" in div;
+-
+-	// set display to none to avoid a layout bug in IE
+-	// http://dev.jquery.com/ticket/4014
+-	body.removeChild( div ).style.display = "none";
+-});
+-
+-
+-
+-
+-
+-// deprecated
+-$.extend( $.ui, {
+-	// $.ui.plugin is deprecated.  Use the proxy pattern instead.
+-	plugin: {
+-		add: function( module, option, set ) {
+-			var proto = $.ui[ module ].prototype;
+-			for ( var i in set ) {
+-				proto.plugins[ i ] = proto.plugins[ i ] || [];
+-				proto.plugins[ i ].push( [ option, set[ i ] ] );
+-			}
+-		},
+-		call: function( instance, name, args ) {
+-			var set = instance.plugins[ name ];
+-			if ( !set || !instance.element[ 0 ].parentNode ) {
+-				return;
+-			}
+-	
+-			for ( var i = 0; i < set.length; i++ ) {
+-				if ( instance.options[ set[ i ][ 0 ] ] ) {
+-					set[ i ][ 1 ].apply( instance.element, args );
+-				}
+-			}
+-		}
+-	},
+-	
+-	// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
+-	contains: function( a, b ) {
+-		return document.compareDocumentPosition ?
+-			a.compareDocumentPosition( b ) & 16 :
+-			a !== b && a.contains( b );
+-	},
+-	
+-	// only used by resizable
+-	hasScroll: function( el, a ) {
+-	
+-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+-		if ( $( el ).css( "overflow" ) === "hidden") {
+-			return false;
+-		}
+-	
+-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+-			has = false;
+-	
+-		if ( el[ scroll ] > 0 ) {
+-			return true;
+-		}
+-	
+-		// TODO: determine which cases actually cause this to happen
+-		// if the element doesn't have the scroll set, see if it's possible to
+-		// set the scroll
+-		el[ scroll ] = 1;
+-		has = ( el[ scroll ] > 0 );
+-		el[ scroll ] = 0;
+-		return has;
+-	},
+-	
+-	// these are odd functions, fix the API or move into individual plugins
+-	isOverAxis: function( x, reference, size ) {
+-		//Determines when x coordinate is over "b" element axis
+-		return ( x > reference ) && ( x < ( reference + size ) );
+-	},
+-	isOver: function( y, x, top, left, height, width ) {
+-		//Determines when x, y coordinates is over "b" element
+-		return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
+-	}
+-});
+-
+-})( jQuery );
+-/*!
+- * jQuery UI Widget 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Widget
+- */
+-(function( $, undefined ) {
+-
+-// jQuery 1.4+
+-if ( $.cleanData ) {
+-	var _cleanData = $.cleanData;
+-	$.cleanData = function( elems ) {
+-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-			$( elem ).triggerHandler( "remove" );
+-		}
+-		_cleanData( elems );
+-	};
+-} else {
+-	var _remove = $.fn.remove;
+-	$.fn.remove = function( selector, keepData ) {
+-		return this.each(function() {
+-			if ( !keepData ) {
+-				if ( !selector || $.filter( selector, [ this ] ).length ) {
+-					$( "*", this ).add( [ this ] ).each(function() {
+-						$( this ).triggerHandler( "remove" );
+-					});
+-				}
+-			}
+-			return _remove.call( $(this), selector, keepData );
+-		});
+-	};
+-}
+-
+-$.widget = function( name, base, prototype ) {
+-	var namespace = name.split( "." )[ 0 ],
+-		fullName;
+-	name = name.split( "." )[ 1 ];
+-	fullName = namespace + "-" + name;
+-
+-	if ( !prototype ) {
+-		prototype = base;
+-		base = $.Widget;
+-	}
+-
+-	// create selector for plugin
+-	$.expr[ ":" ][ fullName ] = function( elem ) {
+-		return !!$.data( elem, name );
+-	};
+-
+-	$[ namespace ] = $[ namespace ] || {};
+-	$[ namespace ][ name ] = function( options, element ) {
+-		// allow instantiation without initializing for simple inheritance
+-		if ( arguments.length ) {
+-			this._createWidget( options, element );
+-		}
+-	};
+-
+-	var basePrototype = new base();
+-	// we need to make the options hash a property directly on the new instance
+-	// otherwise we'll modify the options hash on the prototype that we're
+-	// inheriting from
+-//	$.each( basePrototype, function( key, val ) {
+-//		if ( $.isPlainObject(val) ) {
+-//			basePrototype[ key ] = $.extend( {}, val );
+-//		}
+-//	});
+-	basePrototype.options = $.extend( true, {}, basePrototype.options );
+-	$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+-		namespace: namespace,
+-		widgetName: name,
+-		widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+-		widgetBaseClass: fullName
+-	}, prototype );
+-
+-	$.widget.bridge( name, $[ namespace ][ name ] );
+-};
+-
+-$.widget.bridge = function( name, object ) {
+-	$.fn[ name ] = function( options ) {
+-		var isMethodCall = typeof options === "string",
+-			args = Array.prototype.slice.call( arguments, 1 ),
+-			returnValue = this;
+-
+-		// allow multiple hashes to be passed on init
+-		options = !isMethodCall && args.length ?
+-			$.extend.apply( null, [ true, options ].concat(args) ) :
+-			options;
+-
+-		// prevent calls to internal methods
+-		if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+-			return returnValue;
+-		}
+-
+-		if ( isMethodCall ) {
+-			this.each(function() {
+-				var instance = $.data( this, name ),
+-					methodValue = instance && $.isFunction( instance[options] ) ?
+-						instance[ options ].apply( instance, args ) :
+-						instance;
+-				// TODO: add this back in 1.9 and use $.error() (see #5972)
+-//				if ( !instance ) {
+-//					throw "cannot call methods on " + name + " prior to initialization; " +
+-//						"attempted to call method '" + options + "'";
+-//				}
+-//				if ( !$.isFunction( instance[options] ) ) {
+-//					throw "no such method '" + options + "' for " + name + " widget instance";
+-//				}
+-//				var methodValue = instance[ options ].apply( instance, args );
+-				if ( methodValue !== instance && methodValue !== undefined ) {
+-					returnValue = methodValue;
+-					return false;
+-				}
+-			});
+-		} else {
+-			this.each(function() {
+-				var instance = $.data( this, name );
+-				if ( instance ) {
+-					instance.option( options || {} )._init();
+-				} else {
+-					$.data( this, name, new object( options, this ) );
+-				}
+-			});
+-		}
+-
+-		return returnValue;
+-	};
+-};
+-
+-$.Widget = function( options, element ) {
+-	// allow instantiation without initializing for simple inheritance
+-	if ( arguments.length ) {
+-		this._createWidget( options, element );
+-	}
+-};
+-
+-$.Widget.prototype = {
+-	widgetName: "widget",
+-	widgetEventPrefix: "",
+-	options: {
+-		disabled: false
+-	},
+-	_createWidget: function( options, element ) {
+-		// $.widget.bridge stores the plugin instance, but we do it anyway
+-		// so that it's stored even before the _create function runs
+-		$.data( element, this.widgetName, this );
+-		this.element = $( element );
+-		this.options = $.extend( true, {},
+-			this.options,
+-			this._getCreateOptions(),
+-			options );
+-
+-		var self = this;
+-		this.element.bind( "remove." + this.widgetName, function() {
+-			self.destroy();
+-		});
+-
+-		this._create();
+-		this._trigger( "create" );
+-		this._init();
+-	},
+-	_getCreateOptions: function() {
+-		return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
+-	},
+-	_create: function() {},
+-	_init: function() {},
+-
+-	destroy: function() {
+-		this.element
+-			.unbind( "." + this.widgetName )
+-			.removeData( this.widgetName );
+-		this.widget()
+-			.unbind( "." + this.widgetName )
+-			.removeAttr( "aria-disabled" )
+-			.removeClass(
+-				this.widgetBaseClass + "-disabled " +
+-				"ui-state-disabled" );
+-	},
+-
+-	widget: function() {
+-		return this.element;
+-	},
+-
+-	option: function( key, value ) {
+-		var options = key;
+-
+-		if ( arguments.length === 0 ) {
+-			// don't return a reference to the internal hash
+-			return $.extend( {}, this.options );
+-		}
+-
+-		if  (typeof key === "string" ) {
+-			if ( value === undefined ) {
+-				return this.options[ key ];
+-			}
+-			options = {};
+-			options[ key ] = value;
+-		}
+-
+-		this._setOptions( options );
+-
+-		return this;
+-	},
+-	_setOptions: function( options ) {
+-		var self = this;
+-		$.each( options, function( key, value ) {
+-			self._setOption( key, value );
+-		});
+-
+-		return this;
+-	},
+-	_setOption: function( key, value ) {
+-		this.options[ key ] = value;
+-
+-		if ( key === "disabled" ) {
+-			this.widget()
+-				[ value ? "addClass" : "removeClass"](
+-					this.widgetBaseClass + "-disabled" + " " +
+-					"ui-state-disabled" )
+-				.attr( "aria-disabled", value );
+-		}
+-
+-		return this;
+-	},
+-
+-	enable: function() {
+-		return this._setOption( "disabled", false );
+-	},
+-	disable: function() {
+-		return this._setOption( "disabled", true );
+-	},
+-
+-	_trigger: function( type, event, data ) {
+-		var callback = this.options[ type ];
+-
+-		event = $.Event( event );
+-		event.type = ( type === this.widgetEventPrefix ?
+-			type :
+-			this.widgetEventPrefix + type ).toLowerCase();
+-		data = data || {};
+-
+-		// copy original event properties over to the new event
+-		// this would happen if we could call $.event.fix instead of $.Event
+-		// but we don't have a way to force an event to be fixed multiple times
+-		if ( event.originalEvent ) {
+-			for ( var i = $.event.props.length, prop; i; ) {
+-				prop = $.event.props[ --i ];
+-				event[ prop ] = event.originalEvent[ prop ];
+-			}
+-		}
+-
+-		this.element.trigger( event, data );
+-
+-		return !( $.isFunction(callback) &&
+-			callback.call( this.element[0], event, data ) === false ||
+-			event.isDefaultPrevented() );
+-	}
+-};
+-
+-})( jQuery );
+-/*!
+- * jQuery UI Mouse 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Mouse
+- *
+- * Depends:
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.mouse", {
+-	options: {
+-		cancel: ':input,option',
+-		distance: 1,
+-		delay: 0
+-	},
+-	_mouseInit: function() {
+-		var self = this;
+-
+-		this.element
+-			.bind('mousedown.'+this.widgetName, function(event) {
+-				return self._mouseDown(event);
+-			})
+-			.bind('click.'+this.widgetName, function(event) {
+-				if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
+-				    $.removeData(event.target, self.widgetName + '.preventClickEvent');
+-					event.stopImmediatePropagation();
+-					return false;
+-				}
+-			});
+-
+-		this.started = false;
+-	},
+-
+-	// TODO: make sure destroying one instance of mouse doesn't mess with
+-	// other instances of mouse
+-	_mouseDestroy: function() {
+-		this.element.unbind('.'+this.widgetName);
+-	},
+-
+-	_mouseDown: function(event) {
+-		// don't let more than one widget handle mouseStart
+-		// TODO: figure out why we have to use originalEvent
+-		event.originalEvent = event.originalEvent || {};
+-		if (event.originalEvent.mouseHandled) { return; }
+-
+-		// we may have missed mouseup (out of window)
+-		(this._mouseStarted && this._mouseUp(event));
+-
+-		this._mouseDownEvent = event;
+-
+-		var self = this,
+-			btnIsLeft = (event.which == 1),
+-			elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).closest(this.options.cancel).length : false);
+-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+-			return true;
+-		}
+-
+-		this.mouseDelayMet = !this.options.delay;
+-		if (!this.mouseDelayMet) {
+-			this._mouseDelayTimer = setTimeout(function() {
+-				self.mouseDelayMet = true;
+-			}, this.options.delay);
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted = (this._mouseStart(event) !== false);
+-			if (!this._mouseStarted) {
+-				event.preventDefault();
+-				return true;
+-			}
+-		}
+-
+-		// Click event may never have fired (Gecko & Opera)
+-		if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
+-			$.removeData(event.target, this.widgetName + '.preventClickEvent');
+-		}
+-
+-		// these delegates are required to keep context
+-		this._mouseMoveDelegate = function(event) {
+-			return self._mouseMove(event);
+-		};
+-		this._mouseUpDelegate = function(event) {
+-			return self._mouseUp(event);
+-		};
+-		$(document)
+-			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+-			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+-
+-		event.preventDefault();
+-		event.originalEvent.mouseHandled = true;
+-		return true;
+-	},
+-
+-	_mouseMove: function(event) {
+-		// IE mouseup check - mouseup happened when mouse was out of window
+-		if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
+-			return this._mouseUp(event);
+-		}
+-
+-		if (this._mouseStarted) {
+-			this._mouseDrag(event);
+-			return event.preventDefault();
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted =
+-				(this._mouseStart(this._mouseDownEvent, event) !== false);
+-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+-		}
+-
+-		return !this._mouseStarted;
+-	},
+-
+-	_mouseUp: function(event) {
+-		$(document)
+-			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+-			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+-
+-		if (this._mouseStarted) {
+-			this._mouseStarted = false;
+-
+-			if (event.target == this._mouseDownEvent.target) {
+-			    $.data(event.target, this.widgetName + '.preventClickEvent', true);
+-			}
+-
+-			this._mouseStop(event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseDistanceMet: function(event) {
+-		return (Math.max(
+-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+-			) >= this.options.distance
+-		);
+-	},
+-
+-	_mouseDelayMet: function(event) {
+-		return this.mouseDelayMet;
+-	},
+-
+-	// These are placeholder methods, to be overriden by extending plugin
+-	_mouseStart: function(event) {},
+-	_mouseDrag: function(event) {},
+-	_mouseStop: function(event) {},
+-	_mouseCapture: function(event) { return true; }
+-});
+-
+-})(jQuery);
+-/*
+- * jQuery UI Draggable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Draggables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.draggable", $.ui.mouse, {
+-	widgetEventPrefix: "drag",
+-	options: {
+-		addClasses: true,
+-		appendTo: "parent",
+-		axis: false,
+-		connectToSortable: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		iframeFix: false,
+-		opacity: false,
+-		refreshPositions: false,
+-		revert: false,
+-		revertDuration: 500,
+-		scope: "default",
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		snap: false,
+-		snapMode: "both",
+-		snapTolerance: 20,
+-		stack: false,
+-		zIndex: false
+-	},
+-	_create: function() {
+-
+-		if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
+-			this.element[0].style.position = 'relative';
+-
+-		(this.options.addClasses && this.element.addClass("ui-draggable"));
+-		(this.options.disabled && this.element.addClass("ui-draggable-disabled"));
+-
+-		this._mouseInit();
+-
+-	},
+-
+-	destroy: function() {
+-		if(!this.element.data('draggable')) return;
+-		this.element
+-			.removeData("draggable")
+-			.unbind(".draggable")
+-			.removeClass("ui-draggable"
+-				+ " ui-draggable-dragging"
+-				+ " ui-draggable-disabled");
+-		this._mouseDestroy();
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-
+-		var o = this.options;
+-
+-		// among others, prevent a drag on a resizable-handle
+-		if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))
+-			return false;
+-
+-		//Quit if we're not on a valid handle
+-		this.handle = this._getHandle(event);
+-		if (!this.handle)
+-			return false;
+-		
+-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+-			$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
+-			.css({
+-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+-				position: "absolute", opacity: "0.001", zIndex: 1000
+-			})
+-			.css($(this).offset())
+-			.appendTo("body");
+-		});
+-
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options;
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		//If ddmanager is used for droppables, set the global draggable
+-		if($.ui.ddmanager)
+-			$.ui.ddmanager.current = this;
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Store the helper's css position
+-		this.cssPosition = this.helper.css("position");
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.positionAbs = this.element.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this.position = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Set a containment if given in the options
+-		if(o.containment)
+-			this._setContainment();
+-
+-		//Trigger event + callbacks
+-		if(this._trigger("start", event) === false) {
+-			this._clear();
+-			return false;
+-		}
+-
+-		//Recache the helper size
+-		this._cacheHelperProportions();
+-
+-		//Prepare the droppable offsets
+-		if ($.ui.ddmanager && !o.dropBehaviour)
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-
+-		this.helper.addClass("ui-draggable-dragging");
+-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		
+-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+-		if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);
+-		
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event, noPropagation) {
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Call plugins and callbacks and use the resulting position if something is returned
+-		if (!noPropagation) {
+-			var ui = this._uiHash();
+-			if(this._trigger('drag', event, ui) === false) {
+-				this._mouseUp({});
+-				return false;
+-			}
+-			this.position = ui.position;
+-		}
+-
+-		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
+-		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
+-		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		//If we are using droppables, inform the manager about the drop
+-		var dropped = false;
+-		if ($.ui.ddmanager && !this.options.dropBehaviour)
+-			dropped = $.ui.ddmanager.drop(this, event);
+-
+-		//if a drop comes from outside (a sortable)
+-		if(this.dropped) {
+-			dropped = this.dropped;
+-			this.dropped = false;
+-		}
+-		
+-		//if the original element is removed, don't bother to continue if helper is set to "original"
+-		if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original")
+-			return false;
+-
+-		if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+-			var self = this;
+-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+-				if(self._trigger("stop", event) !== false) {
+-					self._clear();
+-				}
+-			});
+-		} else {
+-			if(this._trigger("stop", event) !== false) {
+-				this._clear();
+-			}
+-		}
+-
+-		return false;
+-	},
+-	
+-	_mouseUp: function(event) {
+-		if (this.options.iframeFix === true) {
+-			$("div.ui-draggable-iframeFix").each(function() { 
+-				this.parentNode.removeChild(this); 
+-			}); //Remove frame helpers
+-		}
+-		
+-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+-		if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);
+-		
+-		return $.ui.mouse.prototype._mouseUp.call(this, event);
+-	},
+-	
+-	cancel: function() {
+-		
+-		if(this.helper.is(".ui-draggable-dragging")) {
+-			this._mouseUp({});
+-		} else {
+-			this._clear();
+-		}
+-		
+-		return this;
+-		
+-	},
+-
+-	_getHandle: function(event) {
+-
+-		var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
+-		$(this.options.handle, this.element)
+-			.find("*")
+-			.andSelf()
+-			.each(function() {
+-				if(this == event.target) handle = true;
+-			});
+-
+-		return handle;
+-
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options;
+-		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
+-
+-		if(!helper.parents('body').length)
+-			helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
+-
+-		if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
+-			helper.css("position", "absolute");
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj == 'string') {
+-			obj = obj.split(' ');
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ('left' in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ('right' in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ('top' in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ('bottom' in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+-			po = { top: 0, left: 0 };
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition == "relative") {
+-			var p = this.element.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.element.css("marginTop"),10) || 0),
+-			right: (parseInt(this.element.css("marginRight"),10) || 0),
+-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var o = this.options;
+-		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
+-		if(o.containment == 'document' || o.containment == 'window') this.containment = [
+-			o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+-			o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+-			(o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
+-			(o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-		];
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
+-		        var c = $(o.containment);
+-			var ce = c[0]; if(!ce) return;
+-			var co = c.offset();
+-			var over = ($(ce).css("overflow") != 'hidden');
+-
+-			this.containment = [
+-				(parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
+-				(parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
+-				(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
+-				(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+-			];
+-			this.relative_container = c;
+-
+-		} else if(o.containment.constructor == Array) {
+-			this.containment = o.containment;
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) pos = this.position;
+-		var mod = d == "absolute" ? 1 : -1;
+-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top																	// The absolute mouse position
+-				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
+-				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left																// The absolute mouse position
+-				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
+-				- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-		var pageX = event.pageX;
+-		var pageY = event.pageY;
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-		         var containment;
+-		         if(this.containment) {
+-				 if (this.relative_container){
+-				     var co = this.relative_container.offset();
+-				     containment = [ this.containment[0] + co.left,
+-						     this.containment[1] + co.top,
+-						     this.containment[2] + co.left,
+-						     this.containment[3] + co.top ];
+-				 }
+-				 else {
+-				     containment = this.containment;
+-				 }
+-
+-				if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;
+-				if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;
+-				if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left;
+-				if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top;
+-			}
+-
+-			if(o.grid) {
+-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+-				var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+-				pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+-				pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY																// The absolute mouse position
+-				- this.offset.click.top													// Click offset (relative to the element)
+-				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
+-				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX																// The absolute mouse position
+-				- this.offset.click.left												// Click offset (relative to the element)
+-				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
+-				+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_clear: function() {
+-		this.helper.removeClass("ui-draggable-dragging");
+-		if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
+-		//if($.ui.ddmanager) $.ui.ddmanager.current = null;
+-		this.helper = null;
+-		this.cancelHelperRemoval = false;
+-	},
+-
+-	// From now on bulk stuff - mainly helpers
+-
+-	_trigger: function(type, event, ui) {
+-		ui = ui || this._uiHash();
+-		$.ui.plugin.call(this, type, [event, ui]);
+-		if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
+-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+-	},
+-
+-	plugins: {},
+-
+-	_uiHash: function(event) {
+-		return {
+-			helper: this.helper,
+-			position: this.position,
+-			originalPosition: this.originalPosition,
+-			offset: this.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.extend($.ui.draggable, {
+-	version: "1.8.15"
+-});
+-
+-$.ui.plugin.add("draggable", "connectToSortable", {
+-	start: function(event, ui) {
+-
+-		var inst = $(this).data("draggable"), o = inst.options,
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-		inst.sortables = [];
+-		$(o.connectToSortable).each(function() {
+-			var sortable = $.data(this, 'sortable');
+-			if (sortable && !sortable.options.disabled) {
+-				inst.sortables.push({
+-					instance: sortable,
+-					shouldRevert: sortable.options.revert
+-				});
+-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+-				sortable._trigger("activate", event, uiSortable);
+-			}
+-		});
+-
+-	},
+-	stop: function(event, ui) {
+-
+-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+-		var inst = $(this).data("draggable"),
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-
+-		$.each(inst.sortables, function() {
+-			if(this.instance.isOver) {
+-
+-				this.instance.isOver = 0;
+-
+-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+-
+-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
+-				if(this.shouldRevert) this.instance.options.revert = true;
+-
+-				//Trigger the stop of the sortable
+-				this.instance._mouseStop(event);
+-
+-				this.instance.options.helper = this.instance.options._helper;
+-
+-				//If the helper has been the original item, restore properties in the sortable
+-				if(inst.options.helper == 'original')
+-					this.instance.currentItem.css({ top: 'auto', left: 'auto' });
+-
+-			} else {
+-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+-				this.instance._trigger("deactivate", event, uiSortable);
+-			}
+-
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("draggable"), self = this;
+-
+-		var checkPos = function(o) {
+-			var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
+-			var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
+-			var itemHeight = o.height, itemWidth = o.width;
+-			var itemTop = o.top, itemLeft = o.left;
+-
+-			return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
+-		};
+-
+-		$.each(inst.sortables, function(i) {
+-			
+-			//Copy over some variables to allow calling the sortable's native _intersectsWith
+-			this.instance.positionAbs = inst.positionAbs;
+-			this.instance.helperProportions = inst.helperProportions;
+-			this.instance.offset.click = inst.offset.click;
+-			
+-			if(this.instance._intersectsWith(this.instance.containerCache)) {
+-
+-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+-				if(!this.instance.isOver) {
+-
+-					this.instance.isOver = 1;
+-					//Now we fake the start of dragging for the sortable instance,
+-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+-					this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
+-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+-					this.instance.options.helper = function() { return ui.helper[0]; };
+-
+-					event.target = this.instance.currentItem[0];
+-					this.instance._mouseCapture(event, true);
+-					this.instance._mouseStart(event, true, true);
+-
+-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+-					this.instance.offset.click.top = inst.offset.click.top;
+-					this.instance.offset.click.left = inst.offset.click.left;
+-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+-
+-					inst._trigger("toSortable", event);
+-					inst.dropped = this.instance.element; //draggable revert needs that
+-					//hack so receive/update callbacks work (mostly)
+-					inst.currentItem = inst.element;
+-					this.instance.fromOutside = inst;
+-
+-				}
+-
+-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+-				if(this.instance.currentItem) this.instance._mouseDrag(event);
+-
+-			} else {
+-
+-				//If it doesn't intersect with the sortable, and it intersected before,
+-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+-				if(this.instance.isOver) {
+-
+-					this.instance.isOver = 0;
+-					this.instance.cancelHelperRemoval = true;
+-					
+-					//Prevent reverting on this forced stop
+-					this.instance.options.revert = false;
+-					
+-					// The out event needs to be triggered independently
+-					this.instance._trigger('out', event, this.instance._uiHash(this.instance));
+-					
+-					this.instance._mouseStop(event, true);
+-					this.instance.options.helper = this.instance.options._helper;
+-
+-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+-					this.instance.currentItem.remove();
+-					if(this.instance.placeholder) this.instance.placeholder.remove();
+-
+-					inst._trigger("fromSortable", event);
+-					inst.dropped = false; //draggable revert needs that
+-				}
+-
+-			};
+-
+-		});
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "cursor", {
+-	start: function(event, ui) {
+-		var t = $('body'), o = $(this).data('draggable').options;
+-		if (t.css("cursor")) o._cursor = t.css("cursor");
+-		t.css("cursor", o.cursor);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data('draggable').options;
+-		if (o._cursor) $('body').css("cursor", o._cursor);
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "opacity", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data('draggable').options;
+-		if(t.css("opacity")) o._opacity = t.css("opacity");
+-		t.css('opacity', o.opacity);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data('draggable').options;
+-		if(o._opacity) $(ui.helper).css('opacity', o._opacity);
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "scroll", {
+-	start: function(event, ui) {
+-		var i = $(this).data("draggable");
+-		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
+-	},
+-	drag: function(event, ui) {
+-
+-		var i = $(this).data("draggable"), o = i.options, scrolled = false;
+-
+-		if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {
+-
+-			if(!o.axis || o.axis != 'x') {
+-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+-				else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+-			}
+-
+-			if(!o.axis || o.axis != 'y') {
+-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+-			}
+-
+-		} else {
+-
+-			if(!o.axis || o.axis != 'x') {
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-			}
+-
+-			if(!o.axis || o.axis != 'y') {
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-			}
+-
+-		}
+-
+-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
+-			$.ui.ddmanager.prepareOffsets(i, event);
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "snap", {
+-	start: function(event, ui) {
+-
+-		var i = $(this).data("draggable"), o = i.options;
+-		i.snapElements = [];
+-
+-		$(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {
+-			var $t = $(this); var $o = $t.offset();
+-			if(this != i.element[0]) i.snapElements.push({
+-				item: this,
+-				width: $t.outerWidth(), height: $t.outerHeight(),
+-				top: $o.top, left: $o.left
+-			});
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("draggable"), o = inst.options;
+-		var d = o.snapTolerance;
+-
+-		var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+-
+-		for (var i = inst.snapElements.length - 1; i >= 0; i--){
+-
+-			var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
+-				t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;
+-
+-			//Yes, I know, this is insane ;)
+-			if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
+-				if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-				inst.snapElements[i].snapping = false;
+-				continue;
+-			}
+-
+-			if(o.snapMode != 'inner') {
+-				var ts = Math.abs(t - y2) <= d;
+-				var bs = Math.abs(b - y1) <= d;
+-				var ls = Math.abs(l - x2) <= d;
+-				var rs = Math.abs(r - x1) <= d;
+-				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+-				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+-				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+-			}
+-
+-			var first = (ts || bs || ls || rs);
+-
+-			if(o.snapMode != 'outer') {
+-				var ts = Math.abs(t - y1) <= d;
+-				var bs = Math.abs(b - y2) <= d;
+-				var ls = Math.abs(l - x1) <= d;
+-				var rs = Math.abs(r - x2) <= d;
+-				if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+-				if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+-				if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+-			}
+-
+-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
+-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+-
+-		};
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "stack", {
+-	start: function(event, ui) {
+-
+-		var o = $(this).data("draggable").options;
+-
+-		var group = $.makeArray($(o.stack)).sort(function(a,b) {
+-			return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+-		});
+-		if (!group.length) { return; }
+-		
+-		var min = parseInt(group[0].style.zIndex) || 0;
+-		$(group).each(function(i) {
+-			this.style.zIndex = min + i;
+-		});
+-
+-		this[0].style.zIndex = min + group.length;
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "zIndex", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("draggable").options;
+-		if(t.css("zIndex")) o._zIndex = t.css("zIndex");
+-		t.css('zIndex', o.zIndex);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("draggable").options;
+-		if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);
+-	}
+-});
+-
+-})(jQuery);
+-/*
+- * jQuery UI Droppable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Droppables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.draggable.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.droppable", {
+-	widgetEventPrefix: "drop",
+-	options: {
+-		accept: '*',
+-		activeClass: false,
+-		addClasses: true,
+-		greedy: false,
+-		hoverClass: false,
+-		scope: 'default',
+-		tolerance: 'intersect'
+-	},
+-	_create: function() {
+-
+-		var o = this.options, accept = o.accept;
+-		this.isover = 0; this.isout = 1;
+-
+-		this.accept = $.isFunction(accept) ? accept : function(d) {
+-			return d.is(accept);
+-		};
+-
+-		//Store the droppable's proportions
+-		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+-
+-		// Add the reference and positions to the manager
+-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+-		$.ui.ddmanager.droppables[o.scope].push(this);
+-
+-		(o.addClasses && this.element.addClass("ui-droppable"));
+-
+-	},
+-
+-	destroy: function() {
+-		var drop = $.ui.ddmanager.droppables[this.options.scope];
+-		for ( var i = 0; i < drop.length; i++ )
+-			if ( drop[i] == this )
+-				drop.splice(i, 1);
+-
+-		this.element
+-			.removeClass("ui-droppable ui-droppable-disabled")
+-			.removeData("droppable")
+-			.unbind(".droppable");
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value) {
+-
+-		if(key == 'accept') {
+-			this.accept = $.isFunction(value) ? value : function(d) {
+-				return d.is(value);
+-			};
+-		}
+-		$.Widget.prototype._setOption.apply(this, arguments);
+-	},
+-
+-	_activate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) this.element.addClass(this.options.activeClass);
+-		(draggable && this._trigger('activate', event, this.ui(draggable)));
+-	},
+-
+-	_deactivate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
+-		(draggable && this._trigger('deactivate', event, this.ui(draggable)));
+-	},
+-
+-	_over: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) this.element.addClass(this.options.hoverClass);
+-			this._trigger('over', event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_out: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
+-			this._trigger('out', event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_drop: function(event,custom) {
+-
+-		var draggable = custom || $.ui.ddmanager.current;
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element
+-
+-		var childrenIntersection = false;
+-		this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() {
+-			var inst = $.data(this, 'droppable');
+-			if(
+-				inst.options.greedy
+-				&& !inst.options.disabled
+-				&& inst.options.scope == draggable.options.scope
+-				&& inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element))
+-				&& $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+-			) { childrenIntersection = true; return false; }
+-		});
+-		if(childrenIntersection) return false;
+-
+-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.activeClass) this.element.removeClass(this.options.activeClass);
+-			if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
+-			this._trigger('drop', event, this.ui(draggable));
+-			return this.element;
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	ui: function(c) {
+-		return {
+-			draggable: (c.currentItem || c.element),
+-			helper: c.helper,
+-			position: c.position,
+-			offset: c.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.extend($.ui.droppable, {
+-	version: "1.8.15"
+-});
+-
+-$.ui.intersect = function(draggable, droppable, toleranceMode) {
+-
+-	if (!droppable.offset) return false;
+-
+-	var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+-		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;
+-	var l = droppable.offset.left, r = l + droppable.proportions.width,
+-		t = droppable.offset.top, b = t + droppable.proportions.height;
+-
+-	switch (toleranceMode) {
+-		case 'fit':
+-			return (l <= x1 && x2 <= r
+-				&& t <= y1 && y2 <= b);
+-			break;
+-		case 'intersect':
+-			return (l < x1 + (draggable.helperProportions.width / 2) // Right Half
+-				&& x2 - (draggable.helperProportions.width / 2) < r // Left Half
+-				&& t < y1 + (draggable.helperProportions.height / 2) // Bottom Half
+-				&& y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+-			break;
+-		case 'pointer':
+-			var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),
+-				draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),
+-				isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);
+-			return isOver;
+-			break;
+-		case 'touch':
+-			return (
+-					(y1 >= t && y1 <= b) ||	// Top edge touching
+-					(y2 >= t && y2 <= b) ||	// Bottom edge touching
+-					(y1 < t && y2 > b)		// Surrounded vertically
+-				) && (
+-					(x1 >= l && x1 <= r) ||	// Left edge touching
+-					(x2 >= l && x2 <= r) ||	// Right edge touching
+-					(x1 < l && x2 > r)		// Surrounded horizontally
+-				);
+-			break;
+-		default:
+-			return false;
+-			break;
+-		}
+-
+-};
+-
+-/*
+-	This manager tracks offsets of draggables and droppables
+-*/
+-$.ui.ddmanager = {
+-	current: null,
+-	droppables: { 'default': [] },
+-	prepareOffsets: function(t, event) {
+-
+-		var m = $.ui.ddmanager.droppables[t.options.scope] || [];
+-		var type = event ? event.type : null; // workaround for #2317
+-		var list = (t.currentItem || t.element).find(":data(droppable)").andSelf();
+-
+-		droppablesLoop: for (var i = 0; i < m.length; i++) {
+-
+-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue;	//No disabled and non-accepted
+-			for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item
+-			m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; 									//If the element is not visible, continue
+-
+-			if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables
+-
+-			m[i].offset = m[i].element.offset();
+-			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+-
+-		}
+-
+-	},
+-	drop: function(draggable, event) {
+-
+-		var dropped = false;
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(!this.options) return;
+-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))
+-				dropped = dropped || this._drop.call(this, event);
+-
+-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-				this.isout = 1; this.isover = 0;
+-				this._deactivate.call(this, event);
+-			}
+-
+-		});
+-		return dropped;
+-
+-	},
+-	dragStart: function( draggable, event ) {
+-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+-			if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
+-		});
+-	},
+-	drag: function(draggable, event) {
+-
+-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+-		if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);
+-
+-		//Run through all droppables and check their positions based on specific tolerance options
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(this.options.disabled || this.greedyChild || !this.visible) return;
+-			var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
+-
+-			var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
+-			if(!c) return;
+-
+-			var parentInstance;
+-			if (this.options.greedy) {
+-				var parent = this.element.parents(':data(droppable):eq(0)');
+-				if (parent.length) {
+-					parentInstance = $.data(parent[0], 'droppable');
+-					parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
+-				}
+-			}
+-
+-			// we just moved into a greedy child
+-			if (parentInstance && c == 'isover') {
+-				parentInstance['isover'] = 0;
+-				parentInstance['isout'] = 1;
+-				parentInstance._out.call(parentInstance, event);
+-			}
+-
+-			this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;
+-			this[c == "isover" ? "_over" : "_out"].call(this, event);
+-
+-			// we just moved out of a greedy child
+-			if (parentInstance && c == 'isout') {
+-				parentInstance['isout'] = 0;
+-				parentInstance['isover'] = 1;
+-				parentInstance._over.call(parentInstance, event);
+-			}
+-		});
+-
+-	},
+-	dragStop: function( draggable, event ) {
+-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+-		if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
+-	}
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Resizable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Resizables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.resizable", $.ui.mouse, {
+-	widgetEventPrefix: "resize",
+-	options: {
+-		alsoResize: false,
+-		animate: false,
+-		animateDuration: "slow",
+-		animateEasing: "swing",
+-		aspectRatio: false,
+-		autoHide: false,
+-		containment: false,
+-		ghost: false,
+-		grid: false,
+-		handles: "e,s,se",
+-		helper: false,
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 10,
+-		minWidth: 10,
+-		zIndex: 1000
+-	},
+-	_create: function() {
+-
+-		var self = this, o = this.options;
+-		this.element.addClass("ui-resizable");
+-
+-		$.extend(this, {
+-			_aspectRatio: !!(o.aspectRatio),
+-			aspectRatio: o.aspectRatio,
+-			originalElement: this.element,
+-			_proportionallyResizeElements: [],
+-			_helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
+-		});
+-
+-		//Wrap the element if it cannot hold child nodes
+-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+-
+-			//Opera fix for relative positioning
+-			if (/relative/.test(this.element.css('position')) && $.browser.opera)
+-				this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
+-
+-			//Create a wrapper element and set the wrapper to the new current internal element
+-			this.element.wrap(
+-				$('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
+-					position: this.element.css('position'),
+-					width: this.element.outerWidth(),
+-					height: this.element.outerHeight(),
+-					top: this.element.css('top'),
+-					left: this.element.css('left')
+-				})
+-			);
+-
+-			//Overwrite the original this.element
+-			this.element = this.element.parent().data(
+-				"resizable", this.element.data('resizable')
+-			);
+-
+-			this.elementIsWrapper = true;
+-
+-			//Move margins to the wrapper
+-			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+-			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+-
+-			//Prevent Safari textarea resize
+-			this.originalResizeStyle = this.originalElement.css('resize');
+-			this.originalElement.css('resize', 'none');
+-
+-			//Push the actual element to our proportionallyResize internal array
+-			this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
+-
+-			// avoid IE jump (hard set the margin)
+-			this.originalElement.css({ margin: this.originalElement.css('margin') });
+-
+-			// fix handlers offset
+-			this._proportionallyResize();
+-
+-		}
+-
+-		this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
+-		if(this.handles.constructor == String) {
+-
+-			if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
+-			var n = this.handles.split(","); this.handles = {};
+-
+-			for(var i = 0; i < n.length; i++) {
+-
+-				var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
+-				var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
+-
+-				// increase zIndex of sw, se, ne, nw axis
+-				//TODO : this modifies original option
+-				if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
+-
+-				//TODO : What's going on here?
+-				if ('se' == handle) {
+-					axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
+-				};
+-
+-				//Insert into internal handles object and append to element
+-				this.handles[handle] = '.ui-resizable-'+handle;
+-				this.element.append(axis);
+-			}
+-
+-		}
+-
+-		this._renderAxis = function(target) {
+-
+-			target = target || this.element;
+-
+-			for(var i in this.handles) {
+-
+-				if(this.handles[i].constructor == String)
+-					this.handles[i] = $(this.handles[i], this.element).show();
+-
+-				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+-
+-					var axis = $(this.handles[i], this.element), padWrapper = 0;
+-
+-					//Checking the correct pad and border
+-					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+-
+-					//The padding type i have to apply...
+-					var padPos = [ 'padding',
+-						/ne|nw|n/.test(i) ? 'Top' :
+-						/se|sw|s/.test(i) ? 'Bottom' :
+-						/^e$/.test(i) ? 'Right' : 'Left' ].join("");
+-
+-					target.css(padPos, padWrapper);
+-
+-					this._proportionallyResize();
+-
+-				}
+-
+-				//TODO: What's that good for? There's not anything to be executed left
+-				if(!$(this.handles[i]).length)
+-					continue;
+-
+-			}
+-		};
+-
+-		//TODO: make renderAxis a prototype function
+-		this._renderAxis(this.element);
+-
+-		this._handles = $('.ui-resizable-handle', this.element)
+-			.disableSelection();
+-
+-		//Matching axis name
+-		this._handles.mouseover(function() {
+-			if (!self.resizing) {
+-				if (this.className)
+-					var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+-				//Axis, default = se
+-				self.axis = axis && axis[1] ? axis[1] : 'se';
+-			}
+-		});
+-
+-		//If we want to auto hide the elements
+-		if (o.autoHide) {
+-			this._handles.hide();
+-			$(this.element)
+-				.addClass("ui-resizable-autohide")
+-				.hover(function() {
+-					if (o.disabled) return;
+-					$(this).removeClass("ui-resizable-autohide");
+-					self._handles.show();
+-				},
+-				function(){
+-					if (o.disabled) return;
+-					if (!self.resizing) {
+-						$(this).addClass("ui-resizable-autohide");
+-						self._handles.hide();
+-					}
+-				});
+-		}
+-
+-		//Initialize the mouse interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	destroy: function() {
+-
+-		this._mouseDestroy();
+-
+-		var _destroy = function(exp) {
+-			$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+-				.removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
+-		};
+-
+-		//TODO: Unwrap at same DOM position
+-		if (this.elementIsWrapper) {
+-			_destroy(this.element);
+-			var wrapper = this.element;
+-			wrapper.after(
+-				this.originalElement.css({
+-					position: wrapper.css('position'),
+-					width: wrapper.outerWidth(),
+-					height: wrapper.outerHeight(),
+-					top: wrapper.css('top'),
+-					left: wrapper.css('left')
+-				})
+-			).remove();
+-		}
+-
+-		this.originalElement.css('resize', this.originalResizeStyle);
+-		_destroy(this.originalElement);
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-		var handle = false;
+-		for (var i in this.handles) {
+-			if ($(this.handles[i])[0] == event.target) {
+-				handle = true;
+-			}
+-		}
+-
+-		return !this.options.disabled && handle;
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options, iniPos = this.element.position(), el = this.element;
+-
+-		this.resizing = true;
+-		this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
+-
+-		// bugfix for http://dev.jquery.com/ticket/1749
+-		if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
+-			el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
+-		}
+-
+-		//Opera fixing relative position
+-		if ($.browser.opera && (/relative/).test(el.css('position')))
+-			el.css({ position: 'relative', top: 'auto', left: 'auto' });
+-
+-		this._renderProxy();
+-
+-		var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
+-
+-		if (o.containment) {
+-			curleft += $(o.containment).scrollLeft() || 0;
+-			curtop += $(o.containment).scrollTop() || 0;
+-		}
+-
+-		//Store needed variables
+-		this.offset = this.helper.offset();
+-		this.position = { left: curleft, top: curtop };
+-		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalPosition = { left: curleft, top: curtop };
+-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+-		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+-
+-		//Aspect Ratio
+-		this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+-
+-	    var cursor = $('.ui-resizable-' + this.axis).css('cursor');
+-	    $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
+-
+-		el.addClass("ui-resizable-resizing");
+-		this._propagate("start", event);
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Increase performance, avoid regex
+-		var el = this.helper, o = this.options, props = {},
+-			self = this, smp = this.originalMousePosition, a = this.axis;
+-
+-		var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
+-		var trigger = this._change[a];
+-		if (!trigger) return false;
+-
+-		// Calculate the attrs that will be change
+-		var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
+-
+-		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+-		this._updateVirtualBoundaries(event.shiftKey);
+-		if (this._aspectRatio || event.shiftKey)
+-			data = this._updateRatio(data, event);
+-
+-		data = this._respectSize(data, event);
+-
+-		// plugins callbacks need to be called first
+-		this._propagate("resize", event);
+-
+-		el.css({
+-			top: this.position.top + "px", left: this.position.left + "px",
+-			width: this.size.width + "px", height: this.size.height + "px"
+-		});
+-
+-		if (!this._helper && this._proportionallyResizeElements.length)
+-			this._proportionallyResize();
+-
+-		this._updateCache(data);
+-
+-		// calling the user callback at the end
+-		this._trigger('resize', event, this.ui());
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		this.resizing = false;
+-		var o = this.options, self = this;
+-
+-		if(this._helper) {
+-			var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-				soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+-				soffsetw = ista ? 0 : self.sizeDiff.width;
+-
+-			var s = { width: (self.helper.width()  - soffsetw), height: (self.helper.height() - soffseth) },
+-				left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+-				top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+-
+-			if (!o.animate)
+-				this.element.css($.extend(s, { top: top, left: left }));
+-
+-			self.helper.height(self.size.height);
+-			self.helper.width(self.size.width);
+-
+-			if (this._helper && !o.animate) this._proportionallyResize();
+-		}
+-
+-		$('body').css('cursor', 'auto');
+-
+-		this.element.removeClass("ui-resizable-resizing");
+-
+-		this._propagate("stop", event);
+-
+-		if (this._helper) this.helper.remove();
+-		return false;
+-
+-	},
+-
+-    _updateVirtualBoundaries: function(forceAspectRatio) {
+-        var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
+-
+-        b = {
+-            minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+-            maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+-            minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+-            maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+-        };
+-
+-        if(this._aspectRatio || forceAspectRatio) {
+-            // We want to create an enclosing box whose aspect ration is the requested one
+-            // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+-            pMinWidth = b.minHeight * this.aspectRatio;
+-            pMinHeight = b.minWidth / this.aspectRatio;
+-            pMaxWidth = b.maxHeight * this.aspectRatio;
+-            pMaxHeight = b.maxWidth / this.aspectRatio;
+-
+-            if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
+-            if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
+-            if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
+-            if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
+-        }
+-        this._vBoundaries = b;
+-    },
+-
+-	_updateCache: function(data) {
+-		var o = this.options;
+-		this.offset = this.helper.offset();
+-		if (isNumber(data.left)) this.position.left = data.left;
+-		if (isNumber(data.top)) this.position.top = data.top;
+-		if (isNumber(data.height)) this.size.height = data.height;
+-		if (isNumber(data.width)) this.size.width = data.width;
+-	},
+-
+-	_updateRatio: function(data, event) {
+-
+-		var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
+-
+-		if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
+-		else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
+-
+-		if (a == 'sw') {
+-			data.left = cpos.left + (csize.width - data.width);
+-			data.top = null;
+-		}
+-		if (a == 'nw') {
+-			data.top = cpos.top + (csize.height - data.height);
+-			data.left = cpos.left + (csize.width - data.width);
+-		}
+-
+-		return data;
+-	},
+-
+-	_respectSize: function(data, event) {
+-
+-		var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
+-				ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+-					isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
+-
+-		if (isminw) data.width = o.minWidth;
+-		if (isminh) data.height = o.minHeight;
+-		if (ismaxw) data.width = o.maxWidth;
+-		if (ismaxh) data.height = o.maxHeight;
+-
+-		var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
+-		var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+-
+-		if (isminw && cw) data.left = dw - o.minWidth;
+-		if (ismaxw && cw) data.left = dw - o.maxWidth;
+-		if (isminh && ch)	data.top = dh - o.minHeight;
+-		if (ismaxh && ch)	data.top = dh - o.maxHeight;
+-
+-		// fixing jump error on top/left - bug #2330
+-		var isNotwh = !data.width && !data.height;
+-		if (isNotwh && !data.left && data.top) data.top = null;
+-		else if (isNotwh && !data.top && data.left) data.left = null;
+-
+-		return data;
+-	},
+-
+-	_proportionallyResize: function() {
+-
+-		var o = this.options;
+-		if (!this._proportionallyResizeElements.length) return;
+-		var element = this.helper || this.element;
+-
+-		for (var i=0; i < this._proportionallyResizeElements.length; i++) {
+-
+-			var prel = this._proportionallyResizeElements[i];
+-
+-			if (!this.borderDif) {
+-				var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
+-					p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
+-
+-				this.borderDif = $.map(b, function(v, i) {
+-					var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
+-					return border + padding;
+-				});
+-			}
+-
+-			if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))
+-				continue;
+-
+-			prel.css({
+-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+-			});
+-
+-		};
+-
+-	},
+-
+-	_renderProxy: function() {
+-
+-		var el = this.element, o = this.options;
+-		this.elementOffset = el.offset();
+-
+-		if(this._helper) {
+-
+-			this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
+-
+-			// fix ie6 offset TODO: This seems broken
+-			var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),
+-			pxyoffset = ( ie6 ? 2 : -1 );
+-
+-			this.helper.addClass(this._helper).css({
+-				width: this.element.outerWidth() + pxyoffset,
+-				height: this.element.outerHeight() + pxyoffset,
+-				position: 'absolute',
+-				left: this.elementOffset.left - ie6offset +'px',
+-				top: this.elementOffset.top - ie6offset +'px',
+-				zIndex: ++o.zIndex //TODO: Don't modify option
+-			});
+-
+-			this.helper
+-				.appendTo("body")
+-				.disableSelection();
+-
+-		} else {
+-			this.helper = this.element;
+-		}
+-
+-	},
+-
+-	_change: {
+-		e: function(event, dx, dy) {
+-			return { width: this.originalSize.width + dx };
+-		},
+-		w: function(event, dx, dy) {
+-			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+-			return { left: sp.left + dx, width: cs.width - dx };
+-		},
+-		n: function(event, dx, dy) {
+-			var o = this.options, cs = this.originalSize, sp = this.originalPosition;
+-			return { top: sp.top + dy, height: cs.height - dy };
+-		},
+-		s: function(event, dx, dy) {
+-			return { height: this.originalSize.height + dy };
+-		},
+-		se: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		sw: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		},
+-		ne: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		nw: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		}
+-	},
+-
+-	_propagate: function(n, event) {
+-		$.ui.plugin.call(this, n, [event, this.ui()]);
+-		(n != "resize" && this._trigger(n, event, this.ui()));
+-	},
+-
+-	plugins: {},
+-
+-	ui: function() {
+-		return {
+-			originalElement: this.originalElement,
+-			element: this.element,
+-			helper: this.helper,
+-			position: this.position,
+-			size: this.size,
+-			originalSize: this.originalSize,
+-			originalPosition: this.originalPosition
+-		};
+-	}
+-
+-});
+-
+-$.extend($.ui.resizable, {
+-	version: "1.8.15"
+-});
+-
+-/*
+- * Resizable Extensions
+- */
+-
+-$.ui.plugin.add("resizable", "alsoResize", {
+-
+-	start: function (event, ui) {
+-		var self = $(this).data("resizable"), o = self.options;
+-
+-		var _store = function (exp) {
+-			$(exp).each(function() {
+-				var el = $(this);
+-				el.data("resizable-alsoresize", {
+-					width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+-					left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10),
+-					position: el.css('position') // to reset Opera on stop()
+-				});
+-			});
+-		};
+-
+-		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
+-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+-		}else{
+-			_store(o.alsoResize);
+-		}
+-	},
+-
+-	resize: function (event, ui) {
+-		var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
+-
+-		var delta = {
+-			height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,
+-			top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
+-		},
+-
+-		_alsoResize = function (exp, c) {
+-			$(exp).each(function() {
+-				var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, 
+-					css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
+-
+-				$.each(css, function (i, prop) {
+-					var sum = (start[prop]||0) + (delta[prop]||0);
+-					if (sum && sum >= 0)
+-						style[prop] = sum || null;
+-				});
+-
+-				// Opera fixing relative position
+-				if ($.browser.opera && /relative/.test(el.css('position'))) {
+-					self._revertToRelativePosition = true;
+-					el.css({ position: 'absolute', top: 'auto', left: 'auto' });
+-				}
+-
+-				el.css(style);
+-			});
+-		};
+-
+-		if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+-		}else{
+-			_alsoResize(o.alsoResize);
+-		}
+-	},
+-
+-	stop: function (event, ui) {
+-		var self = $(this).data("resizable"), o = self.options;
+-
+-		var _reset = function (exp) {
+-			$(exp).each(function() {
+-				var el = $(this);
+-				// reset position for Opera - no need to verify it was changed
+-				el.css({ position: el.data("resizable-alsoresize").position });
+-			});
+-		};
+-
+-		if (self._revertToRelativePosition) {
+-			self._revertToRelativePosition = false;
+-			if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
+-				$.each(o.alsoResize, function (exp) { _reset(exp); });
+-			}else{
+-				_reset(o.alsoResize);
+-			}
+-		}
+-
+-		$(this).removeData("resizable-alsoresize");
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "animate", {
+-
+-	stop: function(event, ui) {
+-		var self = $(this).data("resizable"), o = self.options;
+-
+-		var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-					soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+-						soffsetw = ista ? 0 : self.sizeDiff.width;
+-
+-		var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
+-					left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
+-						top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
+-
+-		self.element.animate(
+-			$.extend(style, top && left ? { top: top, left: left } : {}), {
+-				duration: o.animateDuration,
+-				easing: o.animateEasing,
+-				step: function() {
+-
+-					var data = {
+-						width: parseInt(self.element.css('width'), 10),
+-						height: parseInt(self.element.css('height'), 10),
+-						top: parseInt(self.element.css('top'), 10),
+-						left: parseInt(self.element.css('left'), 10)
+-					};
+-
+-					if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
+-
+-					// propagating resize, and updating values for each animation step
+-					self._updateCache(data);
+-					self._propagate("resize", event);
+-
+-				}
+-			}
+-		);
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "containment", {
+-
+-	start: function(event, ui) {
+-		var self = $(this).data("resizable"), o = self.options, el = self.element;
+-		var oc = o.containment,	ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+-		if (!ce) return;
+-
+-		self.containerElement = $(ce);
+-
+-		if (/document/.test(oc) || oc == document) {
+-			self.containerOffset = { left: 0, top: 0 };
+-			self.containerPosition = { left: 0, top: 0 };
+-
+-			self.parentData = {
+-				element: $(document), left: 0, top: 0,
+-				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+-			};
+-		}
+-
+-		// i'm a node, so compute top, left, right, bottom
+-		else {
+-			var element = $(ce), p = [];
+-			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+-
+-			self.containerOffset = element.offset();
+-			self.containerPosition = element.position();
+-			self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+-
+-			var co = self.containerOffset, ch = self.containerSize.height,	cw = self.containerSize.width,
+-						width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+-
+-			self.parentData = {
+-				element: ce, left: co.left, top: co.top, width: width, height: height
+-			};
+-		}
+-	},
+-
+-	resize: function(event, ui) {
+-		var self = $(this).data("resizable"), o = self.options,
+-				ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,
+-				pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;
+-
+-		if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
+-
+-		if (cp.left < (self._helper ? co.left : 0)) {
+-			self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
+-			if (pRatio) self.size.height = self.size.width / o.aspectRatio;
+-			self.position.left = o.helper ? co.left : 0;
+-		}
+-
+-		if (cp.top < (self._helper ? co.top : 0)) {
+-			self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
+-			if (pRatio) self.size.width = self.size.height * o.aspectRatio;
+-			self.position.top = self._helper ? co.top : 0;
+-		}
+-
+-		self.offset.left = self.parentData.left+self.position.left;
+-		self.offset.top = self.parentData.top+self.position.top;
+-
+-		var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),
+-					hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );
+-
+-		var isParent = self.containerElement.get(0) == self.element.parent().get(0),
+-		    isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));
+-
+-		if(isParent && isOffsetRelative) woset -= self.parentData.left;
+-
+-		if (woset + self.size.width >= self.parentData.width) {
+-			self.size.width = self.parentData.width - woset;
+-			if (pRatio) self.size.height = self.size.width / self.aspectRatio;
+-		}
+-
+-		if (hoset + self.size.height >= self.parentData.height) {
+-			self.size.height = self.parentData.height - hoset;
+-			if (pRatio) self.size.width = self.size.height * self.aspectRatio;
+-		}
+-	},
+-
+-	stop: function(event, ui){
+-		var self = $(this).data("resizable"), o = self.options, cp = self.position,
+-				co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
+-
+-		var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;
+-
+-		if (self._helper && !o.animate && (/relative/).test(ce.css('position')))
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-
+-		if (self._helper && !o.animate && (/static/).test(ce.css('position')))
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "ghost", {
+-
+-	start: function(event, ui) {
+-
+-		var self = $(this).data("resizable"), o = self.options, cs = self.size;
+-
+-		self.ghost = self.originalElement.clone();
+-		self.ghost
+-			.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+-			.addClass('ui-resizable-ghost')
+-			.addClass(typeof o.ghost == 'string' ? o.ghost : '');
+-
+-		self.ghost.appendTo(self.helper);
+-
+-	},
+-
+-	resize: function(event, ui){
+-		var self = $(this).data("resizable"), o = self.options;
+-		if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });
+-	},
+-
+-	stop: function(event, ui){
+-		var self = $(this).data("resizable"), o = self.options;
+-		if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "grid", {
+-
+-	resize: function(event, ui) {
+-		var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;
+-		o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
+-		var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
+-
+-		if (/^(se|s|e)$/.test(a)) {
+-			self.size.width = os.width + ox;
+-			self.size.height = os.height + oy;
+-		}
+-		else if (/^(ne)$/.test(a)) {
+-			self.size.width = os.width + ox;
+-			self.size.height = os.height + oy;
+-			self.position.top = op.top - oy;
+-		}
+-		else if (/^(sw)$/.test(a)) {
+-			self.size.width = os.width + ox;
+-			self.size.height = os.height + oy;
+-			self.position.left = op.left - ox;
+-		}
+-		else {
+-			self.size.width = os.width + ox;
+-			self.size.height = os.height + oy;
+-			self.position.top = op.top - oy;
+-			self.position.left = op.left - ox;
+-		}
+-	}
+-
+-});
+-
+-var num = function(v) {
+-	return parseInt(v, 10) || 0;
+-};
+-
+-var isNumber = function(value) {
+-	return !isNaN(parseInt(value, 10));
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Selectable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Selectables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.selectable", $.ui.mouse, {
+-	options: {
+-		appendTo: 'body',
+-		autoRefresh: true,
+-		distance: 0,
+-		filter: '*',
+-		tolerance: 'touch'
+-	},
+-	_create: function() {
+-		var self = this;
+-
+-		this.element.addClass("ui-selectable");
+-
+-		this.dragged = false;
+-
+-		// cache selectee children based on filter
+-		var selectees;
+-		this.refresh = function() {
+-			selectees = $(self.options.filter, self.element[0]);
+-			selectees.each(function() {
+-				var $this = $(this);
+-				var pos = $this.offset();
+-				$.data(this, "selectable-item", {
+-					element: this,
+-					$element: $this,
+-					left: pos.left,
+-					top: pos.top,
+-					right: pos.left + $this.outerWidth(),
+-					bottom: pos.top + $this.outerHeight(),
+-					startselected: false,
+-					selected: $this.hasClass('ui-selected'),
+-					selecting: $this.hasClass('ui-selecting'),
+-					unselecting: $this.hasClass('ui-unselecting')
+-				});
+-			});
+-		};
+-		this.refresh();
+-
+-		this.selectees = selectees.addClass("ui-selectee");
+-
+-		this._mouseInit();
+-
+-		this.helper = $("<div class='ui-selectable-helper'></div>");
+-	},
+-
+-	destroy: function() {
+-		this.selectees
+-			.removeClass("ui-selectee")
+-			.removeData("selectable-item");
+-		this.element
+-			.removeClass("ui-selectable ui-selectable-disabled")
+-			.removeData("selectable")
+-			.unbind(".selectable");
+-		this._mouseDestroy();
+-
+-		return this;
+-	},
+-
+-	_mouseStart: function(event) {
+-		var self = this;
+-
+-		this.opos = [event.pageX, event.pageY];
+-
+-		if (this.options.disabled)
+-			return;
+-
+-		var options = this.options;
+-
+-		this.selectees = $(options.filter, this.element[0]);
+-
+-		this._trigger("start", event);
+-
+-		$(options.appendTo).append(this.helper);
+-		// position helper (lasso)
+-		this.helper.css({
+-			"left": event.clientX,
+-			"top": event.clientY,
+-			"width": 0,
+-			"height": 0
+-		});
+-
+-		if (options.autoRefresh) {
+-			this.refresh();
+-		}
+-
+-		this.selectees.filter('.ui-selected').each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.startselected = true;
+-			if (!event.metaKey) {
+-				selectee.$element.removeClass('ui-selected');
+-				selectee.selected = false;
+-				selectee.$element.addClass('ui-unselecting');
+-				selectee.unselecting = true;
+-				// selectable UNSELECTING callback
+-				self._trigger("unselecting", event, {
+-					unselecting: selectee.element
+-				});
+-			}
+-		});
+-
+-		$(event.target).parents().andSelf().each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			if (selectee) {
+-				var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected');
+-				selectee.$element
+-					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+-					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+-				selectee.unselecting = !doSelect;
+-				selectee.selecting = doSelect;
+-				selectee.selected = doSelect;
+-				// selectable (UN)SELECTING callback
+-				if (doSelect) {
+-					self._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				} else {
+-					self._trigger("unselecting", event, {
+-						unselecting: selectee.element
+-					});
+-				}
+-				return false;
+-			}
+-		});
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-		var self = this;
+-		this.dragged = true;
+-
+-		if (this.options.disabled)
+-			return;
+-
+-		var options = this.options;
+-
+-		var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
+-		if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
+-		if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
+-		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+-
+-		this.selectees.each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			//prevent helper from being selected if appendTo: selectable
+-			if (!selectee || selectee.element == self.element[0])
+-				return;
+-			var hit = false;
+-			if (options.tolerance == 'touch') {
+-				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+-			} else if (options.tolerance == 'fit') {
+-				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+-			}
+-
+-			if (hit) {
+-				// SELECT
+-				if (selectee.selected) {
+-					selectee.$element.removeClass('ui-selected');
+-					selectee.selected = false;
+-				}
+-				if (selectee.unselecting) {
+-					selectee.$element.removeClass('ui-unselecting');
+-					selectee.unselecting = false;
+-				}
+-				if (!selectee.selecting) {
+-					selectee.$element.addClass('ui-selecting');
+-					selectee.selecting = true;
+-					// selectable SELECTING callback
+-					self._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				}
+-			} else {
+-				// UNSELECT
+-				if (selectee.selecting) {
+-					if (event.metaKey && selectee.startselected) {
+-						selectee.$element.removeClass('ui-selecting');
+-						selectee.selecting = false;
+-						selectee.$element.addClass('ui-selected');
+-						selectee.selected = true;
+-					} else {
+-						selectee.$element.removeClass('ui-selecting');
+-						selectee.selecting = false;
+-						if (selectee.startselected) {
+-							selectee.$element.addClass('ui-unselecting');
+-							selectee.unselecting = true;
+-						}
+-						// selectable UNSELECTING callback
+-						self._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-				if (selectee.selected) {
+-					if (!event.metaKey && !selectee.startselected) {
+-						selectee.$element.removeClass('ui-selected');
+-						selectee.selected = false;
+-
+-						selectee.$element.addClass('ui-unselecting');
+-						selectee.unselecting = true;
+-						// selectable UNSELECTING callback
+-						self._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-			}
+-		});
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-		var self = this;
+-
+-		this.dragged = false;
+-
+-		var options = this.options;
+-
+-		$('.ui-unselecting', this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass('ui-unselecting');
+-			selectee.unselecting = false;
+-			selectee.startselected = false;
+-			self._trigger("unselected", event, {
+-				unselected: selectee.element
+-			});
+-		});
+-		$('.ui-selecting', this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
+-			selectee.selecting = false;
+-			selectee.selected = true;
+-			selectee.startselected = true;
+-			self._trigger("selected", event, {
+-				selected: selectee.element
+-			});
+-		});
+-		this._trigger("stop", event);
+-
+-		this.helper.remove();
+-
+-		return false;
+-	}
+-
+-});
+-
+-$.extend($.ui.selectable, {
+-	version: "1.8.15"
+-});
+-
+-})(jQuery);
+-/*
+- * jQuery UI Sortable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Sortables
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.sortable", $.ui.mouse, {
+-	widgetEventPrefix: "sort",
+-	options: {
+-		appendTo: "parent",
+-		axis: false,
+-		connectWith: false,
+-		containment: false,
+-		cursor: 'auto',
+-		cursorAt: false,
+-		dropOnEmpty: true,
+-		forcePlaceholderSize: false,
+-		forceHelperSize: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		items: '> *',
+-		opacity: false,
+-		placeholder: false,
+-		revert: false,
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		scope: "default",
+-		tolerance: "intersect",
+-		zIndex: 1000
+-	},
+-	_create: function() {
+-
+-		var o = this.options;
+-		this.containerCache = {};
+-		this.element.addClass("ui-sortable");
+-
+-		//Get the items
+-		this.refresh();
+-
+-		//Let's determine if the items are being displayed horizontally
+-		this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
+-
+-		//Let's determine the parent's offset
+-		this.offset = this.element.offset();
+-
+-		//Initialize mouse events for interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	destroy: function() {
+-		this.element
+-			.removeClass("ui-sortable ui-sortable-disabled")
+-			.removeData("sortable")
+-			.unbind(".sortable");
+-		this._mouseDestroy();
+-
+-		for ( var i = this.items.length - 1; i >= 0; i-- )
+-			this.items[i].item.removeData("sortable-item");
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value){
+-		if ( key === "disabled" ) {
+-			this.options[ key ] = value;
+-	
+-			this.widget()
+-				[ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" );
+-		} else {
+-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
+-			$.Widget.prototype._setOption.apply(this, arguments);
+-		}
+-	},
+-
+-	_mouseCapture: function(event, overrideHandle) {
+-
+-		if (this.reverting) {
+-			return false;
+-		}
+-
+-		if(this.options.disabled || this.options.type == 'static') return false;
+-
+-		//We have to refresh the items data once first
+-		this._refreshItems(event);
+-
+-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+-		var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
+-			if($.data(this, 'sortable-item') == self) {
+-				currentItem = $(this);
+-				return false;
+-			}
+-		});
+-		if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target);
+-
+-		if(!currentItem) return false;
+-		if(this.options.handle && !overrideHandle) {
+-			var validHandle = false;
+-
+-			$(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
+-			if(!validHandle) return false;
+-		}
+-
+-		this.currentItem = currentItem;
+-		this._removeCurrentsFromItems();
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event, overrideHandle, noActivation) {
+-
+-		var o = this.options, self = this;
+-		this.currentContainer = this;
+-
+-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+-		this.refreshPositions();
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Get the next scrolling parent
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.currentItem.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		// Only after we got the offset, we can change the helper's position to absolute
+-		// TODO: Still need to figure out a way to make relative sorting possible
+-		this.helper.css("position", "absolute");
+-		this.cssPosition = this.helper.css("position");
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Cache the former DOM position
+-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+-
+-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+-		if(this.helper[0] != this.currentItem[0]) {
+-			this.currentItem.hide();
+-		}
+-
+-		//Create the placeholder
+-		this._createPlaceholder();
+-
+-		//Set a containment if given in the options
+-		if(o.containment)
+-			this._setContainment();
+-
+-		if(o.cursor) { // cursor option
+-			if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor");
+-			$('body').css("cursor", o.cursor);
+-		}
+-
+-		if(o.opacity) { // opacity option
+-			if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity");
+-			this.helper.css("opacity", o.opacity);
+-		}
+-
+-		if(o.zIndex) { // zIndex option
+-			if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex");
+-			this.helper.css("zIndex", o.zIndex);
+-		}
+-
+-		//Prepare scrolling
+-		if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')
+-			this.overflowOffset = this.scrollParent.offset();
+-
+-		//Call callbacks
+-		this._trigger("start", event, this._uiHash());
+-
+-		//Recache the helper size
+-		if(!this._preserveHelperProportions)
+-			this._cacheHelperProportions();
+-
+-
+-		//Post 'activate' events to possible containers
+-		if(!noActivation) {
+-			 for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); }
+-		}
+-
+-		//Prepare possible droppables
+-		if($.ui.ddmanager)
+-			$.ui.ddmanager.current = this;
+-
+-		if ($.ui.ddmanager && !o.dropBehaviour)
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-
+-		this.dragging = true;
+-
+-		this.helper.addClass("ui-sortable-helper");
+-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		return true;
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		if (!this.lastPositionAbs) {
+-			this.lastPositionAbs = this.positionAbs;
+-		}
+-
+-		//Do scrolling
+-		if(this.options.scroll) {
+-			var o = this.options, scrolled = false;
+-			if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
+-
+-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+-				else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+-
+-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+-
+-			} else {
+-
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-
+-			}
+-
+-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
+-				$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-		//Regenerate the absolute position used for position checks
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Set the helper position
+-		if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
+-		if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
+-
+-		//Rearrange
+-		for (var i = this.items.length - 1; i >= 0; i--) {
+-
+-			//Cache variables and intersection, continue if no intersection
+-			var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
+-			if (!intersection) continue;
+-
+-			if(itemElement != this.currentItem[0] //cannot intersect with itself
+-				&&	this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
+-				&&	!$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
+-				&& (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
+-				//&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
+-			) {
+-
+-				this.direction = intersection == 1 ? "down" : "up";
+-
+-				if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
+-					this._rearrange(event, item);
+-				} else {
+-					break;
+-				}
+-
+-				this._trigger("change", event, this._uiHash());
+-				break;
+-			}
+-		}
+-
+-		//Post events to containers
+-		this._contactContainers(event);
+-
+-		//Interconnect with droppables
+-		if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
+-
+-		//Call callbacks
+-		this._trigger('sort', event, this._uiHash());
+-
+-		this.lastPositionAbs = this.positionAbs;
+-		return false;
+-
+-	},
+-
+-	_mouseStop: function(event, noPropagation) {
+-
+-		if(!event) return;
+-
+-		//If we are using droppables, inform the manager about the drop
+-		if ($.ui.ddmanager && !this.options.dropBehaviour)
+-			$.ui.ddmanager.drop(this, event);
+-
+-		if(this.options.revert) {
+-			var self = this;
+-			var cur = self.placeholder.offset();
+-
+-			self.reverting = true;
+-
+-			$(this.helper).animate({
+-				left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
+-				top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
+-			}, parseInt(this.options.revert, 10) || 500, function() {
+-				self._clear(event);
+-			});
+-		} else {
+-			this._clear(event, noPropagation);
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	cancel: function() {
+-
+-		var self = this;
+-
+-		if(this.dragging) {
+-
+-			this._mouseUp({ target: null });
+-
+-			if(this.options.helper == "original")
+-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-			else
+-				this.currentItem.show();
+-
+-			//Post deactivating events to containers
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				this.containers[i]._trigger("deactivate", null, self._uiHash(this));
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", null, self._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		if (this.placeholder) {
+-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-			if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-			if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
+-
+-			$.extend(this, {
+-				helper: null,
+-				dragging: false,
+-				reverting: false,
+-				_noFinalSort: null
+-			});
+-
+-			if(this.domPosition.prev) {
+-				$(this.domPosition.prev).after(this.currentItem);
+-			} else {
+-				$(this.domPosition.parent).prepend(this.currentItem);
+-			}
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	serialize: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected);
+-		var str = []; o = o || {};
+-
+-		$(items).each(function() {
+-			var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
+-			if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
+-		});
+-
+-		if(!str.length && o.key) {
+-			str.push(o.key + '=');
+-		}
+-
+-		return str.join('&');
+-
+-	},
+-
+-	toArray: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected);
+-		var ret = []; o = o || {};
+-
+-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
+-		return ret;
+-
+-	},
+-
+-	/* Be careful with the following core functions */
+-	_intersectsWith: function(item) {
+-
+-		var x1 = this.positionAbs.left,
+-			x2 = x1 + this.helperProportions.width,
+-			y1 = this.positionAbs.top,
+-			y2 = y1 + this.helperProportions.height;
+-
+-		var l = item.left,
+-			r = l + item.width,
+-			t = item.top,
+-			b = t + item.height;
+-
+-		var dyClick = this.offset.click.top,
+-			dxClick = this.offset.click.left;
+-
+-		var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;
+-
+-		if(	   this.options.tolerance == "pointer"
+-			|| this.options.forcePointerForContainers
+-			|| (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
+-		) {
+-			return isOverElement;
+-		} else {
+-
+-			return (l < x1 + (this.helperProportions.width / 2) // Right Half
+-				&& x2 - (this.helperProportions.width / 2) < r // Left Half
+-				&& t < y1 + (this.helperProportions.height / 2) // Bottom Half
+-				&& y2 - (this.helperProportions.height / 2) < b ); // Top Half
+-
+-		}
+-	},
+-
+-	_intersectsWithPointer: function(item) {
+-
+-		var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+-			isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+-			isOverElement = isOverElementHeight && isOverElementWidth,
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (!isOverElement)
+-			return false;
+-
+-		return this.floating ?
+-			( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
+-			: ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );
+-
+-	},
+-
+-	_intersectsWithSides: function(item) {
+-
+-		var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+-			isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (this.floating && horizontalDirection) {
+-			return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
+-		} else {
+-			return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
+-		}
+-
+-	},
+-
+-	_getDragVerticalDirection: function() {
+-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+-		return delta != 0 && (delta > 0 ? "down" : "up");
+-	},
+-
+-	_getDragHorizontalDirection: function() {
+-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+-		return delta != 0 && (delta > 0 ? "right" : "left");
+-	},
+-
+-	refresh: function(event) {
+-		this._refreshItems(event);
+-		this.refreshPositions();
+-		return this;
+-	},
+-
+-	_connectWith: function() {
+-		var options = this.options;
+-		return options.connectWith.constructor == String
+-			? [options.connectWith]
+-			: options.connectWith;
+-	},
+-	
+-	_getItemsAsjQuery: function(connected) {
+-
+-		var self = this;
+-		var items = [];
+-		var queries = [];
+-		var connectWith = this._connectWith();
+-
+-		if(connectWith && connected) {
+-			for (var i = connectWith.length - 1; i >= 0; i--){
+-				var cur = $(connectWith[i]);
+-				for (var j = cur.length - 1; j >= 0; j--){
+-					var inst = $.data(cur[j], 'sortable');
+-					if(inst && inst != this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]);
+-					}
+-				};
+-			};
+-		}
+-
+-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]);
+-
+-		for (var i = queries.length - 1; i >= 0; i--){
+-			queries[i][0].each(function() {
+-				items.push(this);
+-			});
+-		};
+-
+-		return $(items);
+-
+-	},
+-
+-	_removeCurrentsFromItems: function() {
+-
+-		var list = this.currentItem.find(":data(sortable-item)");
+-
+-		for (var i=0; i < this.items.length; i++) {
+-
+-			for (var j=0; j < list.length; j++) {
+-				if(list[j] == this.items[i].item[0])
+-					this.items.splice(i,1);
+-			};
+-
+-		};
+-
+-	},
+-
+-	_refreshItems: function(event) {
+-
+-		this.items = [];
+-		this.containers = [this];
+-		var items = this.items;
+-		var self = this;
+-		var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];
+-		var connectWith = this._connectWith();
+-
+-		if(connectWith) {
+-			for (var i = connectWith.length - 1; i >= 0; i--){
+-				var cur = $(connectWith[i]);
+-				for (var j = cur.length - 1; j >= 0; j--){
+-					var inst = $.data(cur[j], 'sortable');
+-					if(inst && inst != this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+-						this.containers.push(inst);
+-					}
+-				};
+-			};
+-		}
+-
+-		for (var i = queries.length - 1; i >= 0; i--) {
+-			var targetData = queries[i][1];
+-			var _queries = queries[i][0];
+-
+-			for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+-				var item = $(_queries[j]);
+-
+-				item.data('sortable-item', targetData); // Data for target checking (mouse manager)
+-
+-				items.push({
+-					item: item,
+-					instance: targetData,
+-					width: 0, height: 0,
+-					left: 0, top: 0
+-				});
+-			};
+-		};
+-
+-	},
+-
+-	refreshPositions: function(fast) {
+-
+-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+-		if(this.offsetParent && this.helper) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		for (var i = this.items.length - 1; i >= 0; i--){
+-			var item = this.items[i];
+-
+-			//We ignore calculating positions of all connected containers when we're not over them
+-			if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
+-				continue;
+-
+-			var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+-
+-			if (!fast) {
+-				item.width = t.outerWidth();
+-				item.height = t.outerHeight();
+-			}
+-
+-			var p = t.offset();
+-			item.left = p.left;
+-			item.top = p.top;
+-		};
+-
+-		if(this.options.custom && this.options.custom.refreshContainers) {
+-			this.options.custom.refreshContainers.call(this);
+-		} else {
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				var p = this.containers[i].element.offset();
+-				this.containers[i].containerCache.left = p.left;
+-				this.containers[i].containerCache.top = p.top;
+-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
+-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+-			};
+-		}
+-
+-		return this;
+-	},
+-
+-	_createPlaceholder: function(that) {
+-
+-		var self = that || this, o = self.options;
+-
+-		if(!o.placeholder || o.placeholder.constructor == String) {
+-			var className = o.placeholder;
+-			o.placeholder = {
+-				element: function() {
+-
+-					var el = $(document.createElement(self.currentItem[0].nodeName))
+-						.addClass(className || self.currentItem[0].className+" ui-sortable-placeholder")
+-						.removeClass("ui-sortable-helper")[0];
+-
+-					if(!className)
+-						el.style.visibility = "hidden";
+-
+-					return el;
+-				},
+-				update: function(container, p) {
+-
+-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+-					if(className && !o.forcePlaceholderSize) return;
+-
+-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+-					if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
+-					if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
+-				}
+-			};
+-		}
+-
+-		//Create the placeholder
+-		self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));
+-
+-		//Append it after the actual current item
+-		self.currentItem.after(self.placeholder);
+-
+-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+-		o.placeholder.update(self, self.placeholder);
+-
+-	},
+-
+-	_contactContainers: function(event) {
+-		
+-		// get innermost container that intersects with item 
+-		var innermostContainer = null, innermostIndex = null;		
+-		
+-		
+-		for (var i = this.containers.length - 1; i >= 0; i--){
+-
+-			// never consider a container that's located within the item itself 
+-			if($.ui.contains(this.currentItem[0], this.containers[i].element[0]))
+-				continue;
+-
+-			if(this._intersectsWith(this.containers[i].containerCache)) {
+-
+-				// if we've already found a container and it's more "inner" than this, then continue 
+-				if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0]))
+-					continue;
+-
+-				innermostContainer = this.containers[i]; 
+-				innermostIndex = i;
+-					
+-			} else {
+-				// container doesn't intersect. trigger "out" event if necessary 
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", event, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-		
+-		// if no intersecting containers found, return 
+-		if(!innermostContainer) return; 
+-
+-		// move the item into the container if it's not there already
+-		if(this.containers.length === 1) {
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		} else if(this.currentContainer != this.containers[innermostIndex]) { 
+-
+-			//When entering a new container, we will find the item with the least distance and append our item near it 
+-			var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; 
+-			for (var j = this.items.length - 1; j >= 0; j--) { 
+-				if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; 
+-				var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; 
+-				if(Math.abs(cur - base) < dist) { 
+-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; 
+-				} 
+-			} 
+-
+-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled 
+-				return; 
+-
+-			this.currentContainer = this.containers[innermostIndex]; 
+-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); 
+-			this._trigger("change", event, this._uiHash()); 
+-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); 
+-
+-			//Update the placeholder 
+-			this.options.placeholder.update(this.currentContainer, this.placeholder); 
+-		
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); 
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		} 
+-	
+-		
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options;
+-		var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);
+-
+-		if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
+-			$(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+-
+-		if(helper[0] == this.currentItem[0])
+-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+-
+-		if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
+-		if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj == 'string') {
+-			obj = obj.split(' ');
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ('left' in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ('right' in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ('top' in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ('bottom' in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
+-			po = { top: 0, left: 0 };
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition == "relative") {
+-			var p = this.currentItem.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var o = this.options;
+-		if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
+-		if(o.containment == 'document' || o.containment == 'window') this.containment = [
+-			0 - this.offset.relative.left - this.offset.parent.left,
+-			0 - this.offset.relative.top - this.offset.parent.top,
+-			$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
+-			($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-		];
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment)) {
+-			var ce = $(o.containment)[0];
+-			var co = $(o.containment).offset();
+-			var over = ($(ce).css("overflow") != 'hidden');
+-
+-			this.containment = [
+-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) pos = this.position;
+-		var mod = d == "absolute" ? 1 : -1;
+-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top																	// The absolute mouse position
+-				+ this.offset.relative.top * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				+ this.offset.parent.top * mod											// The offsetParent's offset without borders (offset + border)
+-				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left																// The absolute mouse position
+-				+ this.offset.relative.left * mod										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				+ this.offset.parent.left * mod											// The offsetParent's offset without borders (offset + border)
+-				- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		// This is another very weird special case that only happens for relative elements:
+-		// 1. If the css position is relative
+-		// 2. and the scroll parent is the document or similar to the offset parent
+-		// we have to refresh the relative offset during the scroll so there are no jumps
+-		if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
+-			this.offset.relative = this._getRelativeOffset();
+-		}
+-
+-		var pageX = event.pageX;
+-		var pageY = event.pageY;
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-
+-			if(this.containment) {
+-				if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
+-				if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
+-				if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
+-				if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
+-			}
+-
+-			if(o.grid) {
+-				var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+-				pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+-				pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY																// The absolute mouse position
+-				- this.offset.click.top													// Click offset (relative to the element)
+-				- this.offset.relative.top												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				- this.offset.parent.top												// The offsetParent's offset without borders (offset + border)
+-				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX																// The absolute mouse position
+-				- this.offset.click.left												// Click offset (relative to the element)
+-				- this.offset.relative.left												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				- this.offset.parent.left												// The offsetParent's offset without borders (offset + border)
+-				+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_rearrange: function(event, i, a, hardRefresh) {
+-
+-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
+-
+-		//Various things done here to improve the performance:
+-		// 1. we create a setTimeout, that calls refreshPositions
+-		// 2. on the instance, we have a counter variable, that get's higher after every append
+-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+-		// 4. this lets only the last addition to the timeout stack through
+-		this.counter = this.counter ? ++this.counter : 1;
+-		var self = this, counter = this.counter;
+-
+-		window.setTimeout(function() {
+-			if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+-		},0);
+-
+-	},
+-
+-	_clear: function(event, noPropagation) {
+-
+-		this.reverting = false;
+-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+-		// everything else normalized again
+-		var delayedTriggers = [], self = this;
+-
+-		// We first have to update the dom position of the actual currentItem
+-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+-		if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem);
+-		this._noFinalSort = null;
+-
+-		if(this.helper[0] == this.currentItem[0]) {
+-			for(var i in this._storedCSS) {
+-				if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
+-			}
+-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-		} else {
+-			this.currentItem.show();
+-		}
+-
+-		if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+-		if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+-		if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element
+-			if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) {
+-					delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-					delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.containers[i]));
+-				}
+-			};
+-		};
+-
+-		//Post events to containers
+-		for (var i = this.containers.length - 1; i >= 0; i--){
+-			if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-			if(this.containers[i].containerCache.over) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-				this.containers[i].containerCache.over = 0;
+-			}
+-		}
+-
+-		//Do what was originally in plugins
+-		if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor
+-		if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity
+-		if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index
+-
+-		this.dragging = false;
+-		if(this.cancelHelperRemoval) {
+-			if(!noPropagation) {
+-				this._trigger("beforeStop", event, this._uiHash());
+-				for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
+-				this._trigger("stop", event, this._uiHash());
+-			}
+-			return false;
+-		}
+-
+-		if(!noPropagation) this._trigger("beforeStop", event, this._uiHash());
+-
+-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-
+-		if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
+-
+-		if(!noPropagation) {
+-			for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events
+-			this._trigger("stop", event, this._uiHash());
+-		}
+-
+-		this.fromOutside = false;
+-		return true;
+-
+-	},
+-
+-	_trigger: function() {
+-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+-			this.cancel();
+-		}
+-	},
+-
+-	_uiHash: function(inst) {
+-		var self = inst || this;
+-		return {
+-			helper: self.helper,
+-			placeholder: self.placeholder || $([]),
+-			position: self.position,
+-			originalPosition: self.originalPosition,
+-			offset: self.positionAbs,
+-			item: self.currentItem,
+-			sender: inst ? inst.element : null
+-		};
+-	}
+-
+-});
+-
+-$.extend($.ui.sortable, {
+-	version: "1.8.15"
+-});
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/
+- */
+-;jQuery.effects || (function($, undefined) {
+-
+-$.effects = {};
+-
+-
+-
+-/******************************************************************************/
+-/****************************** COLOR ANIMATIONS ******************************/
+-/******************************************************************************/
+-
+-// override the animation for color styles
+-$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',
+-	'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'],
+-function(i, attr) {
+-	$.fx.step[attr] = function(fx) {
+-		if (!fx.colorInit) {
+-			fx.start = getColor(fx.elem, attr);
+-			fx.end = getRGB(fx.end);
+-			fx.colorInit = true;
+-		}
+-
+-		fx.elem.style[attr] = 'rgb(' +
+-			Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +
+-			Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +
+-			Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';
+-	};
+-});
+-
+-// Color Conversion functions from highlightFade
+-// By Blair Mitchelmore
+-// http://jquery.offput.ca/highlightFade/
+-
+-// Parse strings looking for color tuples [255,255,255]
+-function getRGB(color) {
+-		var result;
+-
+-		// Check if we're already dealing with an array of colors
+-		if ( color && color.constructor == Array && color.length == 3 )
+-				return color;
+-
+-		// Look for rgb(num,num,num)
+-		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
+-				return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
+-
+-		// Look for rgb(num%,num%,num%)
+-		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
+-				return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
+-
+-		// Look for #a0b1c2
+-		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
+-				return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
+-
+-		// Look for #fff
+-		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
+-				return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
+-
+-		// Look for rgba(0, 0, 0, 0) == transparent in Safari 3
+-		if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
+-				return colors['transparent'];
+-
+-		// Otherwise, we're most likely dealing with a named color
+-		return colors[$.trim(color).toLowerCase()];
+-}
+-
+-function getColor(elem, attr) {
+-		var color;
+-
+-		do {
+-				color = $.curCSS(elem, attr);
+-
+-				// Keep going until we find an element that has color, or we hit the body
+-				if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
+-						break;
+-
+-				attr = "backgroundColor";
+-		} while ( elem = elem.parentNode );
+-
+-		return getRGB(color);
+-};
+-
+-// Some named colors to work with
+-// From Interface by Stefan Petre
+-// http://interface.eyecon.ro/
+-
+-var colors = {
+-	aqua:[0,255,255],
+-	azure:[240,255,255],
+-	beige:[245,245,220],
+-	black:[0,0,0],
+-	blue:[0,0,255],
+-	brown:[165,42,42],
+-	cyan:[0,255,255],
+-	darkblue:[0,0,139],
+-	darkcyan:[0,139,139],
+-	darkgrey:[169,169,169],
+-	darkgreen:[0,100,0],
+-	darkkhaki:[189,183,107],
+-	darkmagenta:[139,0,139],
+-	darkolivegreen:[85,107,47],
+-	darkorange:[255,140,0],
+-	darkorchid:[153,50,204],
+-	darkred:[139,0,0],
+-	darksalmon:[233,150,122],
+-	darkviolet:[148,0,211],
+-	fuchsia:[255,0,255],
+-	gold:[255,215,0],
+-	green:[0,128,0],
+-	indigo:[75,0,130],
+-	khaki:[240,230,140],
+-	lightblue:[173,216,230],
+-	lightcyan:[224,255,255],
+-	lightgreen:[144,238,144],
+-	lightgrey:[211,211,211],
+-	lightpink:[255,182,193],
+-	lightyellow:[255,255,224],
+-	lime:[0,255,0],
+-	magenta:[255,0,255],
+-	maroon:[128,0,0],
+-	navy:[0,0,128],
+-	olive:[128,128,0],
+-	orange:[255,165,0],
+-	pink:[255,192,203],
+-	purple:[128,0,128],
+-	violet:[128,0,128],
+-	red:[255,0,0],
+-	silver:[192,192,192],
+-	white:[255,255,255],
+-	yellow:[255,255,0],
+-	transparent: [255,255,255]
+-};
+-
+-
+-
+-/******************************************************************************/
+-/****************************** CLASS ANIMATIONS ******************************/
+-/******************************************************************************/
+-
+-var classAnimationActions = ['add', 'remove', 'toggle'],
+-	shorthandStyles = {
+-		border: 1,
+-		borderBottom: 1,
+-		borderColor: 1,
+-		borderLeft: 1,
+-		borderRight: 1,
+-		borderTop: 1,
+-		borderWidth: 1,
+-		margin: 1,
+-		padding: 1
+-	};
+-
+-function getElementStyles() {
+-	var style = document.defaultView
+-			? document.defaultView.getComputedStyle(this, null)
+-			: this.currentStyle,
+-		newStyle = {},
+-		key,
+-		camelCase;
+-
+-	// webkit enumerates style porperties
+-	if (style && style.length && style[0] && style[style[0]]) {
+-		var len = style.length;
+-		while (len--) {
+-			key = style[len];
+-			if (typeof style[key] == 'string') {
+-				camelCase = key.replace(/\-(\w)/g, function(all, letter){
+-					return letter.toUpperCase();
+-				});
+-				newStyle[camelCase] = style[key];
+-			}
+-		}
+-	} else {
+-		for (key in style) {
+-			if (typeof style[key] === 'string') {
+-				newStyle[key] = style[key];
+-			}
+-		}
+-	}
+-	
+-	return newStyle;
+-}
+-
+-function filterStyles(styles) {
+-	var name, value;
+-	for (name in styles) {
+-		value = styles[name];
+-		if (
+-			// ignore null and undefined values
+-			value == null ||
+-			// ignore functions (when does this occur?)
+-			$.isFunction(value) ||
+-			// shorthand styles that need to be expanded
+-			name in shorthandStyles ||
+-			// ignore scrollbars (break in IE)
+-			(/scrollbar/).test(name) ||
+-
+-			// only colors or values that can be converted to numbers
+-			(!(/color/i).test(name) && isNaN(parseFloat(value)))
+-		) {
+-			delete styles[name];
+-		}
+-	}
+-	
+-	return styles;
+-}
+-
+-function styleDifference(oldStyle, newStyle) {
+-	var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459
+-		name;
+-
+-	for (name in newStyle) {
+-		if (oldStyle[name] != newStyle[name]) {
+-			diff[name] = newStyle[name];
+-		}
+-	}
+-
+-	return diff;
+-}
+-
+-$.effects.animateClass = function(value, duration, easing, callback) {
+-	if ($.isFunction(easing)) {
+-		callback = easing;
+-		easing = null;
+-	}
+-
+-	return this.queue(function() {
+-		var that = $(this),
+-			originalStyleAttr = that.attr('style') || ' ',
+-			originalStyle = filterStyles(getElementStyles.call(this)),
+-			newStyle,
+-			className = that.attr('class');
+-
+-		$.each(classAnimationActions, function(i, action) {
+-			if (value[action]) {
+-				that[action + 'Class'](value[action]);
+-			}
+-		});
+-		newStyle = filterStyles(getElementStyles.call(this));
+-		that.attr('class', className);
+-
+-		that.animate(styleDifference(originalStyle, newStyle), {
+-			queue: false,
+-			duration: duration,
+-			easing: easing,
+-			complete: function() {
+-				$.each(classAnimationActions, function(i, action) {
+-					if (value[action]) { that[action + 'Class'](value[action]); }
+-				});
+-				// work around bug in IE by clearing the cssText before setting it
+-				if (typeof that.attr('style') == 'object') {
+-					that.attr('style').cssText = '';
+-					that.attr('style').cssText = originalStyleAttr;
+-				} else {
+-					that.attr('style', originalStyleAttr);
+-				}
+-				if (callback) { callback.apply(this, arguments); }
+-				$.dequeue( this );
+-			}
+-		});
+-	});
+-};
+-
+-$.fn.extend({
+-	_addClass: $.fn.addClass,
+-	addClass: function(classNames, speed, easing, callback) {
+-		return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
+-	},
+-
+-	_removeClass: $.fn.removeClass,
+-	removeClass: function(classNames,speed,easing,callback) {
+-		return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
+-	},
+-
+-	_toggleClass: $.fn.toggleClass,
+-	toggleClass: function(classNames, force, speed, easing, callback) {
+-		if ( typeof force == "boolean" || force === undefined ) {
+-			if ( !speed ) {
+-				// without speed parameter;
+-				return this._toggleClass(classNames, force);
+-			} else {
+-				return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);
+-			}
+-		} else {
+-			// without switch parameter;
+-			return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);
+-		}
+-	},
+-
+-	switchClass: function(remove,add,speed,easing,callback) {
+-		return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
+-	}
+-});
+-
+-
+-
+-/******************************************************************************/
+-/*********************************** EFFECTS **********************************/
+-/******************************************************************************/
+-
+-$.extend($.effects, {
+-	version: "1.8.15",
+-
+-	// Saves a set of properties in a data storage
+-	save: function(element, set) {
+-		for(var i=0; i < set.length; i++) {
+-			if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
+-		}
+-	},
+-
+-	// Restores a set of previously saved properties from a data storage
+-	restore: function(element, set) {
+-		for(var i=0; i < set.length; i++) {
+-			if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
+-		}
+-	},
+-
+-	setMode: function(el, mode) {
+-		if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
+-		return mode;
+-	},
+-
+-	getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
+-		// this should be a little more flexible in the future to handle a string & hash
+-		var y, x;
+-		switch (origin[0]) {
+-			case 'top': y = 0; break;
+-			case 'middle': y = 0.5; break;
+-			case 'bottom': y = 1; break;
+-			default: y = origin[0] / original.height;
+-		};
+-		switch (origin[1]) {
+-			case 'left': x = 0; break;
+-			case 'center': x = 0.5; break;
+-			case 'right': x = 1; break;
+-			default: x = origin[1] / original.width;
+-		};
+-		return {x: x, y: y};
+-	},
+-
+-	// Wraps the element around a wrapper that copies position properties
+-	createWrapper: function(element) {
+-
+-		// if the element is already wrapped, return it
+-		if (element.parent().is('.ui-effects-wrapper')) {
+-			return element.parent();
+-		}
+-
+-		// wrap the element
+-		var props = {
+-				width: element.outerWidth(true),
+-				height: element.outerHeight(true),
+-				'float': element.css('float')
+-			},
+-			wrapper = $('<div></div>')
+-				.addClass('ui-effects-wrapper')
+-				.css({
+-					fontSize: '100%',
+-					background: 'transparent',
+-					border: 'none',
+-					margin: 0,
+-					padding: 0
+-				});
+-
+-		element.wrap(wrapper);
+-		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
+-
+-		// transfer positioning properties to the wrapper
+-		if (element.css('position') == 'static') {
+-			wrapper.css({ position: 'relative' });
+-			element.css({ position: 'relative' });
+-		} else {
+-			$.extend(props, {
+-				position: element.css('position'),
+-				zIndex: element.css('z-index')
+-			});
+-			$.each(['top', 'left', 'bottom', 'right'], function(i, pos) {
+-				props[pos] = element.css(pos);
+-				if (isNaN(parseInt(props[pos], 10))) {
+-					props[pos] = 'auto';
+-				}
+-			});
+-			element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' });
+-		}
+-
+-		return wrapper.css(props).show();
+-	},
+-
+-	removeWrapper: function(element) {
+-		if (element.parent().is('.ui-effects-wrapper'))
+-			return element.parent().replaceWith(element);
+-		return element;
+-	},
+-
+-	setTransition: function(element, list, factor, value) {
+-		value = value || {};
+-		$.each(list, function(i, x){
+-			unit = element.cssUnit(x);
+-			if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
+-		});
+-		return value;
+-	}
+-});
+-
+-
+-function _normalizeArguments(effect, options, speed, callback) {
+-	// shift params for method overloading
+-	if (typeof effect == 'object') {
+-		callback = options;
+-		speed = null;
+-		options = effect;
+-		effect = options.effect;
+-	}
+-	if ($.isFunction(options)) {
+-		callback = options;
+-		speed = null;
+-		options = {};
+-	}
+-        if (typeof options == 'number' || $.fx.speeds[options]) {
+-		callback = speed;
+-		speed = options;
+-		options = {};
+-	}
+-	if ($.isFunction(speed)) {
+-		callback = speed;
+-		speed = null;
+-	}
+-
+-	options = options || {};
+-
+-	speed = speed || options.duration;
+-	speed = $.fx.off ? 0 : typeof speed == 'number'
+-		? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default;
+-
+-	callback = callback || options.complete;
+-
+-	return [effect, options, speed, callback];
+-}
+-
+-function standardSpeed( speed ) {
+-	// valid standard speeds
+-	if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) {
+-		return true;
+-	}
+-	
+-	// invalid strings - treat as "normal" speed
+-	if ( typeof speed === "string" && !$.effects[ speed ] ) {
+-		return true;
+-	}
+-	
+-	return false;
+-}
+-
+-$.fn.extend({
+-	effect: function(effect, options, speed, callback) {
+-		var args = _normalizeArguments.apply(this, arguments),
+-			// TODO: make effects take actual parameters instead of a hash
+-			args2 = {
+-				options: args[1],
+-				duration: args[2],
+-				callback: args[3]
+-			},
+-			mode = args2.options.mode,
+-			effectMethod = $.effects[effect];
+-		
+-		if ( $.fx.off || !effectMethod ) {
+-			// delegate to the original method (e.g., .show()) if possible
+-			if ( mode ) {
+-				return this[ mode ]( args2.duration, args2.callback );
+-			} else {
+-				return this.each(function() {
+-					if ( args2.callback ) {
+-						args2.callback.call( this );
+-					}
+-				});
+-			}
+-		}
+-		
+-		return effectMethod.call(this, args2);
+-	},
+-
+-	_show: $.fn.show,
+-	show: function(speed) {
+-		if ( standardSpeed( speed ) ) {
+-			return this._show.apply(this, arguments);
+-		} else {
+-			var args = _normalizeArguments.apply(this, arguments);
+-			args[1].mode = 'show';
+-			return this.effect.apply(this, args);
+-		}
+-	},
+-
+-	_hide: $.fn.hide,
+-	hide: function(speed) {
+-		if ( standardSpeed( speed ) ) {
+-			return this._hide.apply(this, arguments);
+-		} else {
+-			var args = _normalizeArguments.apply(this, arguments);
+-			args[1].mode = 'hide';
+-			return this.effect.apply(this, args);
+-		}
+-	},
+-
+-	// jQuery core overloads toggle and creates _toggle
+-	__toggle: $.fn.toggle,
+-	toggle: function(speed) {
+-		if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) {
+-			return this.__toggle.apply(this, arguments);
+-		} else {
+-			var args = _normalizeArguments.apply(this, arguments);
+-			args[1].mode = 'toggle';
+-			return this.effect.apply(this, args);
+-		}
+-	},
+-
+-	// helper functions
+-	cssUnit: function(key) {
+-		var style = this.css(key), val = [];
+-		$.each( ['em','px','%','pt'], function(i, unit){
+-			if(style.indexOf(unit) > 0)
+-				val = [parseFloat(style), unit];
+-		});
+-		return val;
+-	}
+-});
+-
+-
+-
+-/******************************************************************************/
+-/*********************************** EASING ***********************************/
+-/******************************************************************************/
+-
+-/*
+- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+- *
+- * Uses the built in easing capabilities added In jQuery 1.1
+- * to offer multiple easing options
+- *
+- * TERMS OF USE - jQuery Easing
+- *
+- * Open source under the BSD License.
+- *
+- * Copyright 2008 George McGinley Smith
+- * All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without modification,
+- * are permitted provided that the following conditions are met:
+- *
+- * Redistributions of source code must retain the above copyright notice, this list of
+- * conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above copyright notice, this list
+- * of conditions and the following disclaimer in the documentation and/or other materials
+- * provided with the distribution.
+- *
+- * Neither the name of the author nor the names of contributors may be used to endorse
+- * or promote products derived from this software without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+- * OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+-*/
+-
+-// t: current time, b: begInnIng value, c: change In value, d: duration
+-$.easing.jswing = $.easing.swing;
+-
+-$.extend($.easing,
+-{
+-	def: 'easeOutQuad',
+-	swing: function (x, t, b, c, d) {
+-		//alert($.easing.default);
+-		return $.easing[$.easing.def](x, t, b, c, d);
+-	},
+-	easeInQuad: function (x, t, b, c, d) {
+-		return c*(t/=d)*t + b;
+-	},
+-	easeOutQuad: function (x, t, b, c, d) {
+-		return -c *(t/=d)*(t-2) + b;
+-	},
+-	easeInOutQuad: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return c/2*t*t + b;
+-		return -c/2 * ((--t)*(t-2) - 1) + b;
+-	},
+-	easeInCubic: function (x, t, b, c, d) {
+-		return c*(t/=d)*t*t + b;
+-	},
+-	easeOutCubic: function (x, t, b, c, d) {
+-		return c*((t=t/d-1)*t*t + 1) + b;
+-	},
+-	easeInOutCubic: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return c/2*t*t*t + b;
+-		return c/2*((t-=2)*t*t + 2) + b;
+-	},
+-	easeInQuart: function (x, t, b, c, d) {
+-		return c*(t/=d)*t*t*t + b;
+-	},
+-	easeOutQuart: function (x, t, b, c, d) {
+-		return -c * ((t=t/d-1)*t*t*t - 1) + b;
+-	},
+-	easeInOutQuart: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+-		return -c/2 * ((t-=2)*t*t*t - 2) + b;
+-	},
+-	easeInQuint: function (x, t, b, c, d) {
+-		return c*(t/=d)*t*t*t*t + b;
+-	},
+-	easeOutQuint: function (x, t, b, c, d) {
+-		return c*((t=t/d-1)*t*t*t*t + 1) + b;
+-	},
+-	easeInOutQuint: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+-		return c/2*((t-=2)*t*t*t*t + 2) + b;
+-	},
+-	easeInSine: function (x, t, b, c, d) {
+-		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+-	},
+-	easeOutSine: function (x, t, b, c, d) {
+-		return c * Math.sin(t/d * (Math.PI/2)) + b;
+-	},
+-	easeInOutSine: function (x, t, b, c, d) {
+-		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+-	},
+-	easeInExpo: function (x, t, b, c, d) {
+-		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+-	},
+-	easeOutExpo: function (x, t, b, c, d) {
+-		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+-	},
+-	easeInOutExpo: function (x, t, b, c, d) {
+-		if (t==0) return b;
+-		if (t==d) return b+c;
+-		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+-		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+-	},
+-	easeInCirc: function (x, t, b, c, d) {
+-		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+-	},
+-	easeOutCirc: function (x, t, b, c, d) {
+-		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+-	},
+-	easeInOutCirc: function (x, t, b, c, d) {
+-		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+-		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+-	},
+-	easeInElastic: function (x, t, b, c, d) {
+-		var s=1.70158;var p=0;var a=c;
+-		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
+-		if (a < Math.abs(c)) { a=c; var s=p/4; }
+-		else var s = p/(2*Math.PI) * Math.asin (c/a);
+-		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+-	},
+-	easeOutElastic: function (x, t, b, c, d) {
+-		var s=1.70158;var p=0;var a=c;
+-		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
+-		if (a < Math.abs(c)) { a=c; var s=p/4; }
+-		else var s = p/(2*Math.PI) * Math.asin (c/a);
+-		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+-	},
+-	easeInOutElastic: function (x, t, b, c, d) {
+-		var s=1.70158;var p=0;var a=c;
+-		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
+-		if (a < Math.abs(c)) { a=c; var s=p/4; }
+-		else var s = p/(2*Math.PI) * Math.asin (c/a);
+-		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+-		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+-	},
+-	easeInBack: function (x, t, b, c, d, s) {
+-		if (s == undefined) s = 1.70158;
+-		return c*(t/=d)*t*((s+1)*t - s) + b;
+-	},
+-	easeOutBack: function (x, t, b, c, d, s) {
+-		if (s == undefined) s = 1.70158;
+-		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+-	},
+-	easeInOutBack: function (x, t, b, c, d, s) {
+-		if (s == undefined) s = 1.70158;
+-		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+-		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+-	},
+-	easeInBounce: function (x, t, b, c, d) {
+-		return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+-	},
+-	easeOutBounce: function (x, t, b, c, d) {
+-		if ((t/=d) < (1/2.75)) {
+-			return c*(7.5625*t*t) + b;
+-		} else if (t < (2/2.75)) {
+-			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+-		} else if (t < (2.5/2.75)) {
+-			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+-		} else {
+-			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+-		}
+-	},
+-	easeInOutBounce: function (x, t, b, c, d) {
+-		if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+-		return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+-	}
+-});
+-
+-/*
+- *
+- * TERMS OF USE - EASING EQUATIONS
+- *
+- * Open source under the BSD License.
+- *
+- * Copyright 2001 Robert Penner
+- * All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without modification,
+- * are permitted provided that the following conditions are met:
+- *
+- * Redistributions of source code must retain the above copyright notice, this list of
+- * conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above copyright notice, this list
+- * of conditions and the following disclaimer in the documentation and/or other materials
+- * provided with the distribution.
+- *
+- * Neither the name of the author nor the names of contributors may be used to endorse
+- * or promote products derived from this software without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+- * OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- */
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Blind 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Blind
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.blind = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+-		var direction = o.options.direction || 'vertical'; // Default direction
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+-		var ref = (direction == 'vertical') ? 'height' : 'width';
+-		var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
+-		if(mode == 'show') wrapper.css(ref, 0); // Shift
+-
+-		// Animation
+-		var animation = {};
+-		animation[ref] = mode == 'show' ? distance : 0;
+-
+-		// Animate
+-		wrapper.animate(animation, o.duration, o.options.easing, function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(el[0], arguments); // Callback
+-			el.dequeue();
+-		});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Bounce 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Bounce
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.bounce = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+-		var direction = o.options.direction || 'up'; // Default direction
+-		var distance = o.options.distance || 20; // Default distance
+-		var times = o.options.times || 5; // Default # of times
+-		var speed = o.duration || 250; // Default speed per bounce
+-		if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		$.effects.createWrapper(el); // Create Wrapper
+-		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+-		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+-		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3);
+-		if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
+-		if (mode == 'hide') distance = distance / (times * 2);
+-		if (mode != 'hide') times--;
+-
+-		// Animate
+-		if (mode == 'show') { // Show Bounce
+-			var animation = {opacity: 1};
+-			animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+-			el.animate(animation, speed / 2, o.options.easing);
+-			distance = distance / 2;
+-			times--;
+-		};
+-		for (var i = 0; i < times; i++) { // Bounces
+-			var animation1 = {}, animation2 = {};
+-			animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
+-			animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+-			el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
+-			distance = (mode == 'hide') ? distance * 2 : distance / 2;
+-		};
+-		if (mode == 'hide') { // Last Bounce
+-			var animation = {opacity: 0};
+-			animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
+-			el.animate(animation, speed / 2, o.options.easing, function(){
+-				el.hide(); // Hide
+-				$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-				if(o.callback) o.callback.apply(this, arguments); // Callback
+-			});
+-		} else {
+-			var animation1 = {}, animation2 = {};
+-			animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
+-			animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
+-			el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){
+-				$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-				if(o.callback) o.callback.apply(this, arguments); // Callback
+-			});
+-		};
+-		el.queue('fx', function() { el.dequeue(); });
+-		el.dequeue();
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Clip 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Clip
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.clip = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right','height','width'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+-		var direction = o.options.direction || 'vertical'; // Default direction
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+-		var animate = el[0].tagName == 'IMG' ? wrapper : el;
+-		var ref = {
+-			size: (direction == 'vertical') ? 'height' : 'width',
+-			position: (direction == 'vertical') ? 'top' : 'left'
+-		};
+-		var distance = (direction == 'vertical') ? animate.height() : animate.width();
+-		if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift
+-
+-		// Animation
+-		var animation = {};
+-		animation[ref.size] = mode == 'show' ? distance : 0;
+-		animation[ref.position] = mode == 'show' ? 0 : distance / 2;
+-
+-		// Animate
+-		animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(el[0], arguments); // Callback
+-			el.dequeue();
+-		}});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Drop 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Drop
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.drop = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right','opacity'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+-		var direction = o.options.direction || 'left'; // Default Direction
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		$.effects.createWrapper(el); // Create Wrapper
+-		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+-		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+-		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2);
+-		if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift
+-
+-		// Animation
+-		var animation = {opacity: mode == 'show' ? 1 : 0};
+-		animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
+-
+-		// Animate
+-		el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(this, arguments); // Callback
+-			el.dequeue();
+-		}});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Explode 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Explode
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.explode = function(o) {
+-
+-	return this.queue(function() {
+-
+-	var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
+-	var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
+-
+-	o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
+-	var el = $(this).show().css('visibility', 'hidden');
+-	var offset = el.offset();
+-
+-	//Substract the margins - not fixing the problem yet.
+-	offset.top -= parseInt(el.css("marginTop"),10) || 0;
+-	offset.left -= parseInt(el.css("marginLeft"),10) || 0;
+-
+-	var width = el.outerWidth(true);
+-	var height = el.outerHeight(true);
+-
+-	for(var i=0;i<rows;i++) { // =
+-		for(var j=0;j<cells;j++) { // ||
+-			el
+-				.clone()
+-				.appendTo('body')
+-				.wrap('<div></div>')
+-				.css({
+-					position: 'absolute',
+-					visibility: 'visible',
+-					left: -j*(width/cells),
+-					top: -i*(height/rows)
+-				})
+-				.parent()
+-				.addClass('ui-effects-explode')
+-				.css({
+-					position: 'absolute',
+-					overflow: 'hidden',
+-					width: width/cells,
+-					height: height/rows,
+-					left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),
+-					top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),
+-					opacity: o.options.mode == 'show' ? 0 : 1
+-				}).animate({
+-					left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),
+-					top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),
+-					opacity: o.options.mode == 'show' ? 1 : 0
+-				}, o.duration || 500);
+-		}
+-	}
+-
+-	// Set a timeout, to call the callback approx. when the other animations have finished
+-	setTimeout(function() {
+-
+-		o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();
+-				if(o.callback) o.callback.apply(el[0]); // Callback
+-				el.dequeue();
+-
+-				$('div.ui-effects-explode').remove();
+-
+-	}, o.duration || 500);
+-
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Fade 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Fade
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.fade = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			mode = $.effects.setMode(elem, o.options.mode || 'hide');
+-
+-		elem.animate({ opacity: mode }, {
+-			queue: false,
+-			duration: o.duration,
+-			easing: o.options.easing,
+-			complete: function() {
+-				(o.callback && o.callback.apply(this, arguments));
+-				elem.dequeue();
+-			}
+-		});
+-	});
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Fold 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Fold
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.fold = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode
+-		var size = o.options.size || 15; // Default fold size
+-		var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value
+-		var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+-		var widthFirst = ((mode == 'show') != horizFirst);
+-		var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
+-		var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
+-		var percent = /([0-9]+)%/.exec(size);
+-		if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];
+-		if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift
+-
+-		// Animation
+-		var animation1 = {}, animation2 = {};
+-		animation1[ref[0]] = mode == 'show' ? distance[0] : size;
+-		animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
+-
+-		// Animate
+-		wrapper.animate(animation1, duration, o.options.easing)
+-		.animate(animation2, duration, o.options.easing, function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(el[0], arguments); // Callback
+-			el.dequeue();
+-		});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Highlight 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Highlight
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.highlight = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			props = ['backgroundImage', 'backgroundColor', 'opacity'],
+-			mode = $.effects.setMode(elem, o.options.mode || 'show'),
+-			animation = {
+-				backgroundColor: elem.css('backgroundColor')
+-			};
+-
+-		if (mode == 'hide') {
+-			animation.opacity = 0;
+-		}
+-
+-		$.effects.save(elem, props);
+-		elem
+-			.show()
+-			.css({
+-				backgroundImage: 'none',
+-				backgroundColor: o.options.color || '#ffff99'
+-			})
+-			.animate(animation, {
+-				queue: false,
+-				duration: o.duration,
+-				easing: o.options.easing,
+-				complete: function() {
+-					(mode == 'hide' && elem.hide());
+-					$.effects.restore(elem, props);
+-					(mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter'));
+-					(o.callback && o.callback.apply(this, arguments));
+-					elem.dequeue();
+-				}
+-			});
+-	});
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Pulsate 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Pulsate
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.pulsate = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			mode = $.effects.setMode(elem, o.options.mode || 'show');
+-			times = ((o.options.times || 5) * 2) - 1;
+-			duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2,
+-			isVisible = elem.is(':visible'),
+-			animateTo = 0;
+-
+-		if (!isVisible) {
+-			elem.css('opacity', 0).show();
+-			animateTo = 1;
+-		}
+-
+-		if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) {
+-			times--;
+-		}
+-
+-		for (var i = 0; i < times; i++) {
+-			elem.animate({ opacity: animateTo }, duration, o.options.easing);
+-			animateTo = (animateTo + 1) % 2;
+-		}
+-
+-		elem.animate({ opacity: animateTo }, duration, o.options.easing, function() {
+-			if (animateTo == 0) {
+-				elem.hide();
+-			}
+-			(o.callback && o.callback.apply(this, arguments));
+-		});
+-
+-		elem
+-			.queue('fx', function() { elem.dequeue(); })
+-			.dequeue();
+-	});
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Scale 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Scale
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.puff = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			mode = $.effects.setMode(elem, o.options.mode || 'hide'),
+-			percent = parseInt(o.options.percent, 10) || 150,
+-			factor = percent / 100,
+-			original = { height: elem.height(), width: elem.width() };
+-
+-		$.extend(o.options, {
+-			fade: true,
+-			mode: mode,
+-			percent: mode == 'hide' ? percent : 100,
+-			from: mode == 'hide'
+-				? original
+-				: {
+-					height: original.height * factor,
+-					width: original.width * factor
+-				}
+-		});
+-
+-		elem.effect('scale', o.options, o.duration, o.callback);
+-		elem.dequeue();
+-	});
+-};
+-
+-$.effects.scale = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this);
+-
+-		// Set options
+-		var options = $.extend(true, {}, o.options);
+-		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+-		var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent
+-		var direction = o.options.direction || 'both'; // Set default axis
+-		var origin = o.options.origin; // The origin of the scaling
+-		if (mode != 'effect') { // Set default origin and restore for show/hide
+-			options.origin = origin || ['middle','center'];
+-			options.restore = true;
+-		}
+-		var original = {height: el.height(), width: el.width()}; // Save original
+-		el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state
+-
+-		// Adjust
+-		var factor = { // Set scaling factor
+-			y: direction != 'horizontal' ? (percent / 100) : 1,
+-			x: direction != 'vertical' ? (percent / 100) : 1
+-		};
+-		el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state
+-
+-		if (o.options.fade) { // Fade option to support puff
+-			if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};
+-			if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};
+-		};
+-
+-		// Animation
+-		options.from = el.from; options.to = el.to; options.mode = mode;
+-
+-		// Animate
+-		el.effect('size', options, o.duration, o.callback);
+-		el.dequeue();
+-	});
+-
+-};
+-
+-$.effects.size = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity'];
+-		var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore
+-		var props2 = ['width','height','overflow']; // Copy for children
+-		var cProps = ['fontSize'];
+-		var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
+-		var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+-		var restore = o.options.restore || false; // Default restore
+-		var scale = o.options.scale || 'both'; // Default scale mode
+-		var origin = o.options.origin; // The origin of the sizing
+-		var original = {height: el.height(), width: el.width()}; // Save original
+-		el.from = o.options.from || original; // Default from state
+-		el.to = o.options.to || original; // Default to state
+-		// Adjust
+-		if (origin) { // Calculate baseline shifts
+-			var baseline = $.effects.getBaseline(origin, original);
+-			el.from.top = (original.height - el.from.height) * baseline.y;
+-			el.from.left = (original.width - el.from.width) * baseline.x;
+-			el.to.top = (original.height - el.to.height) * baseline.y;
+-			el.to.left = (original.width - el.to.width) * baseline.x;
+-		};
+-		var factor = { // Set scaling factor
+-			from: {y: el.from.height / original.height, x: el.from.width / original.width},
+-			to: {y: el.to.height / original.height, x: el.to.width / original.width}
+-		};
+-		if (scale == 'box' || scale == 'both') { // Scale the css box
+-			if (factor.from.y != factor.to.y) { // Vertical props scaling
+-				props = props.concat(vProps);
+-				el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
+-				el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
+-			};
+-			if (factor.from.x != factor.to.x) { // Horizontal props scaling
+-				props = props.concat(hProps);
+-				el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
+-				el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
+-			};
+-		};
+-		if (scale == 'content' || scale == 'both') { // Scale the content
+-			if (factor.from.y != factor.to.y) { // Vertical props scaling
+-				props = props.concat(cProps);
+-				el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
+-				el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
+-			};
+-		};
+-		$.effects.save(el, restore ? props : props1); el.show(); // Save & Show
+-		$.effects.createWrapper(el); // Create Wrapper
+-		el.css('overflow','hidden').css(el.from); // Shift
+-
+-		// Animate
+-		if (scale == 'content' || scale == 'both') { // Scale the children
+-			vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size
+-			hProps = hProps.concat(['marginLeft','marginRight']); // Add margins
+-			props2 = props.concat(vProps).concat(hProps); // Concat
+-			el.find("*[width]").each(function(){
+-				child = $(this);
+-				if (restore) $.effects.save(child, props2);
+-				var c_original = {height: child.height(), width: child.width()}; // Save original
+-				child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};
+-				child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};
+-				if (factor.from.y != factor.to.y) { // Vertical props scaling
+-					child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
+-					child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
+-				};
+-				if (factor.from.x != factor.to.x) { // Horizontal props scaling
+-					child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
+-					child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
+-				};
+-				child.css(child.from); // Shift children
+-				child.animate(child.to, o.duration, o.options.easing, function(){
+-					if (restore) $.effects.restore(child, props2); // Restore children
+-				}); // Animate children
+-			});
+-		};
+-
+-		// Animate
+-		el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+-			if (el.to.opacity === 0) {
+-				el.css('opacity', el.from.opacity);
+-			}
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(this, arguments); // Callback
+-			el.dequeue();
+-		}});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Shake 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Shake
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.shake = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
+-		var direction = o.options.direction || 'left'; // Default direction
+-		var distance = o.options.distance || 20; // Default distance
+-		var times = o.options.times || 3; // Default # of times
+-		var speed = o.duration || o.options.duration || 140; // Default speed per shake
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		$.effects.createWrapper(el); // Create Wrapper
+-		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+-		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+-
+-		// Animation
+-		var animation = {}, animation1 = {}, animation2 = {};
+-		animation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;
+-		animation1[ref] = (motion == 'pos' ? '+=' : '-=')  + distance * 2;
+-		animation2[ref] = (motion == 'pos' ? '-=' : '+=')  + distance * 2;
+-
+-		// Animate
+-		el.animate(animation, speed, o.options.easing);
+-		for (var i = 1; i < times; i++) { // Shakes
+-			el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
+-		};
+-		el.animate(animation1, speed, o.options.easing).
+-		animate(animation, speed / 2, o.options.easing, function(){ // Last shake
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(this, arguments); // Callback
+-		});
+-		el.queue('fx', function() { el.dequeue(); });
+-		el.dequeue();
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Slide 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Slide
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.slide = function(o) {
+-
+-	return this.queue(function() {
+-
+-		// Create element
+-		var el = $(this), props = ['position','top','bottom','left','right'];
+-
+-		// Set options
+-		var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
+-		var direction = o.options.direction || 'left'; // Default Direction
+-
+-		// Adjust
+-		$.effects.save(el, props); el.show(); // Save & Show
+-		$.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper
+-		var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
+-		var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
+-		var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true}));
+-		if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift
+-
+-		// Animation
+-		var animation = {};
+-		animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
+-
+-		// Animate
+-		el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
+-			if(mode == 'hide') el.hide(); // Hide
+-			$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore
+-			if(o.callback) o.callback.apply(this, arguments); // Callback
+-			el.dequeue();
+-		}});
+-
+-	});
+-
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Effects Transfer 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Effects/Transfer
+- *
+- * Depends:
+- *	jquery.effects.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.transfer = function(o) {
+-	return this.queue(function() {
+-		var elem = $(this),
+-			target = $(o.options.to),
+-			endPosition = target.offset(),
+-			animation = {
+-				top: endPosition.top,
+-				left: endPosition.left,
+-				height: target.innerHeight(),
+-				width: target.innerWidth()
+-			},
+-			startPosition = elem.offset(),
+-			transfer = $('<div class="ui-effects-transfer"></div>')
+-				.appendTo(document.body)
+-				.addClass(o.options.className)
+-				.css({
+-					top: startPosition.top,
+-					left: startPosition.left,
+-					height: elem.innerHeight(),
+-					width: elem.innerWidth(),
+-					position: 'absolute'
+-				})
+-				.animate(animation, o.duration, o.options.easing, function() {
+-					transfer.remove();
+-					(o.callback && o.callback.apply(elem[0], arguments));
+-					elem.dequeue();
+-				});
+-	});
+-};
+-
+-})(jQuery);
+-/*
+- * jQuery UI Accordion 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Accordion
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget( "ui.accordion", {
+-	options: {
+-		active: 0,
+-		animated: "slide",
+-		autoHeight: true,
+-		clearStyle: false,
+-		collapsible: false,
+-		event: "click",
+-		fillSpace: false,
+-		header: "> li > :first-child,> :not(li):even",
+-		icons: {
+-			header: "ui-icon-triangle-1-e",
+-			headerSelected: "ui-icon-triangle-1-s"
+-		},
+-		navigation: false,
+-		navigationFilter: function() {
+-			return this.href.toLowerCase() === location.href.toLowerCase();
+-		}
+-	},
+-
+-	_create: function() {
+-		var self = this,
+-			options = self.options;
+-
+-		self.running = 0;
+-
+-		self.element
+-			.addClass( "ui-accordion ui-widget ui-helper-reset" )
+-			// in lack of child-selectors in CSS
+-			// we need to mark top-LIs in a UL-accordion for some IE-fix
+-			.children( "li" )
+-				.addClass( "ui-accordion-li-fix" );
+-
+-		self.headers = self.element.find( options.header )
+-			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" )
+-			.bind( "mouseenter.accordion", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).addClass( "ui-state-hover" );
+-			})
+-			.bind( "mouseleave.accordion", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( "ui-state-hover" );
+-			})
+-			.bind( "focus.accordion", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).addClass( "ui-state-focus" );
+-			})
+-			.bind( "blur.accordion", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( "ui-state-focus" );
+-			});
+-
+-		self.headers.next()
+-			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" );
+-
+-		if ( options.navigation ) {
+-			var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 );
+-			if ( current.length ) {
+-				var header = current.closest( ".ui-accordion-header" );
+-				if ( header.length ) {
+-					// anchor within header
+-					self.active = header;
+-				} else {
+-					// anchor within content
+-					self.active = current.closest( ".ui-accordion-content" ).prev();
+-				}
+-			}
+-		}
+-
+-		self.active = self._findActive( self.active || options.active )
+-			.addClass( "ui-state-default ui-state-active" )
+-			.toggleClass( "ui-corner-all" )
+-			.toggleClass( "ui-corner-top" );
+-		self.active.next().addClass( "ui-accordion-content-active" );
+-
+-		self._createIcons();
+-		self.resize();
+-		
+-		// ARIA
+-		self.element.attr( "role", "tablist" );
+-
+-		self.headers
+-			.attr( "role", "tab" )
+-			.bind( "keydown.accordion", function( event ) {
+-				return self._keydown( event );
+-			})
+-			.next()
+-				.attr( "role", "tabpanel" );
+-
+-		self.headers
+-			.not( self.active || "" )
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.next()
+-				.hide();
+-
+-		// make sure at least one header is in the tab order
+-		if ( !self.active.length ) {
+-			self.headers.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			self.active
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-		}
+-
+-		// only need links in tab order for Safari
+-		if ( !$.browser.safari ) {
+-			self.headers.find( "a" ).attr( "tabIndex", -1 );
+-		}
+-
+-		if ( options.event ) {
+-			self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) {
+-				self._clickHandler.call( self, event, this );
+-				event.preventDefault();
+-			});
+-		}
+-	},
+-
+-	_createIcons: function() {
+-		var options = this.options;
+-		if ( options.icons ) {
+-			$( "<span></span>" )
+-				.addClass( "ui-icon " + options.icons.header )
+-				.prependTo( this.headers );
+-			this.active.children( ".ui-icon" )
+-				.toggleClass(options.icons.header)
+-				.toggleClass(options.icons.headerSelected);
+-			this.element.addClass( "ui-accordion-icons" );
+-		}
+-	},
+-
+-	_destroyIcons: function() {
+-		this.headers.children( ".ui-icon" ).remove();
+-		this.element.removeClass( "ui-accordion-icons" );
+-	},
+-
+-	destroy: function() {
+-		var options = this.options;
+-
+-		this.element
+-			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+-			.removeAttr( "role" );
+-
+-		this.headers
+-			.unbind( ".accordion" )
+-			.removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-expanded" )
+-			.removeAttr( "aria-selected" )
+-			.removeAttr( "tabIndex" );
+-
+-		this.headers.find( "a" ).removeAttr( "tabIndex" );
+-		this._destroyIcons();
+-		var contents = this.headers.next()
+-			.css( "display", "" )
+-			.removeAttr( "role" )
+-			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" );
+-		if ( options.autoHeight || options.fillHeight ) {
+-			contents.css( "height", "" );
+-		}
+-
+-		return $.Widget.prototype.destroy.call( this );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-			
+-		if ( key == "active" ) {
+-			this.activate( value );
+-		}
+-		if ( key == "icons" ) {
+-			this._destroyIcons();
+-			if ( value ) {
+-				this._createIcons();
+-			}
+-		}
+-		// #5332 - opacity doesn't cascade to positioned elements in IE
+-		// so we need to add the disabled class to the headers and panels
+-		if ( key == "disabled" ) {
+-			this.headers.add(this.headers.next())
+-				[ value ? "addClass" : "removeClass" ](
+-					"ui-accordion-disabled ui-state-disabled" );
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		if ( this.options.disabled || event.altKey || event.ctrlKey ) {
+-			return;
+-		}
+-
+-		var keyCode = $.ui.keyCode,
+-			length = this.headers.length,
+-			currentIndex = this.headers.index( event.target ),
+-			toFocus = false;
+-
+-		switch ( event.keyCode ) {
+-			case keyCode.RIGHT:
+-			case keyCode.DOWN:
+-				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+-				break;
+-			case keyCode.LEFT:
+-			case keyCode.UP:
+-				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+-				break;
+-			case keyCode.SPACE:
+-			case keyCode.ENTER:
+-				this._clickHandler( { target: event.target }, event.target );
+-				event.preventDefault();
+-		}
+-
+-		if ( toFocus ) {
+-			$( event.target ).attr( "tabIndex", -1 );
+-			$( toFocus ).attr( "tabIndex", 0 );
+-			toFocus.focus();
+-			return false;
+-		}
+-
+-		return true;
+-	},
+-
+-	resize: function() {
+-		var options = this.options,
+-			maxHeight;
+-
+-		if ( options.fillSpace ) {
+-			if ( $.browser.msie ) {
+-				var defOverflow = this.element.parent().css( "overflow" );
+-				this.element.parent().css( "overflow", "hidden");
+-			}
+-			maxHeight = this.element.parent().height();
+-			if ($.browser.msie) {
+-				this.element.parent().css( "overflow", defOverflow );
+-			}
+-
+-			this.headers.each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.headers.next()
+-				.each(function() {
+-					$( this ).height( Math.max( 0, maxHeight -
+-						$( this ).innerHeight() + $( this ).height() ) );
+-				})
+-				.css( "overflow", "auto" );
+-		} else if ( options.autoHeight ) {
+-			maxHeight = 0;
+-			this.headers.next()
+-				.each(function() {
+-					maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+-				})
+-				.height( maxHeight );
+-		}
+-
+-		return this;
+-	},
+-
+-	activate: function( index ) {
+-		// TODO this gets called on init, changing the option without an explicit call for that
+-		this.options.active = index;
+-		// call clickHandler with custom event
+-		var active = this._findActive( index )[ 0 ];
+-		this._clickHandler( { target: active }, active );
+-
+-		return this;
+-	},
+-
+-	_findActive: function( selector ) {
+-		return selector
+-			? typeof selector === "number"
+-				? this.headers.filter( ":eq(" + selector + ")" )
+-				: this.headers.not( this.headers.not( selector ) )
+-			: selector === false
+-				? $( [] )
+-				: this.headers.filter( ":eq(0)" );
+-	},
+-
+-	// TODO isn't event.target enough? why the separate target argument?
+-	_clickHandler: function( event, target ) {
+-		var options = this.options;
+-		if ( options.disabled ) {
+-			return;
+-		}
+-
+-		// called only when using activate(false) to close all parts programmatically
+-		if ( !event.target ) {
+-			if ( !options.collapsible ) {
+-				return;
+-			}
+-			this.active
+-				.removeClass( "ui-state-active ui-corner-top" )
+-				.addClass( "ui-state-default ui-corner-all" )
+-				.children( ".ui-icon" )
+-					.removeClass( options.icons.headerSelected )
+-					.addClass( options.icons.header );
+-			this.active.next().addClass( "ui-accordion-content-active" );
+-			var toHide = this.active.next(),
+-				data = {
+-					options: options,
+-					newHeader: $( [] ),
+-					oldHeader: options.active,
+-					newContent: $( [] ),
+-					oldContent: toHide
+-				},
+-				toShow = ( this.active = $( [] ) );
+-			this._toggle( toShow, toHide, data );
+-			return;
+-		}
+-
+-		// get the click target
+-		var clicked = $( event.currentTarget || target ),
+-			clickedIsActive = clicked[0] === this.active[0];
+-
+-		// TODO the option is changed, is that correct?
+-		// TODO if it is correct, shouldn't that happen after determining that the click is valid?
+-		options.active = options.collapsible && clickedIsActive ?
+-			false :
+-			this.headers.index( clicked );
+-
+-		// if animations are still active, or the active header is the target, ignore click
+-		if ( this.running || ( !options.collapsible && clickedIsActive ) ) {
+-			return;
+-		}
+-
+-		// find elements to show and hide
+-		var active = this.active,
+-			toShow = clicked.next(),
+-			toHide = this.active.next(),
+-			data = {
+-				options: options,
+-				newHeader: clickedIsActive && options.collapsible ? $([]) : clicked,
+-				oldHeader: this.active,
+-				newContent: clickedIsActive && options.collapsible ? $([]) : toShow,
+-				oldContent: toHide
+-			},
+-			down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
+-
+-		// when the call to ._toggle() comes after the class changes
+-		// it causes a very odd bug in IE 8 (see #6720)
+-		this.active = clickedIsActive ? $([]) : clicked;
+-		this._toggle( toShow, toHide, data, clickedIsActive, down );
+-
+-		// switch classes
+-		active
+-			.removeClass( "ui-state-active ui-corner-top" )
+-			.addClass( "ui-state-default ui-corner-all" )
+-			.children( ".ui-icon" )
+-				.removeClass( options.icons.headerSelected )
+-				.addClass( options.icons.header );
+-		if ( !clickedIsActive ) {
+-			clicked
+-				.removeClass( "ui-state-default ui-corner-all" )
+-				.addClass( "ui-state-active ui-corner-top" )
+-				.children( ".ui-icon" )
+-					.removeClass( options.icons.header )
+-					.addClass( options.icons.headerSelected );
+-			clicked
+-				.next()
+-				.addClass( "ui-accordion-content-active" );
+-		}
+-
+-		return;
+-	},
+-
+-	_toggle: function( toShow, toHide, data, clickedIsActive, down ) {
+-		var self = this,
+-			options = self.options;
+-
+-		self.toShow = toShow;
+-		self.toHide = toHide;
+-		self.data = data;
+-
+-		var complete = function() {
+-			if ( !self ) {
+-				return;
+-			}
+-			return self._completed.apply( self, arguments );
+-		};
+-
+-		// trigger changestart event
+-		self._trigger( "changestart", null, self.data );
+-
+-		// count elements to animate
+-		self.running = toHide.size() === 0 ? toShow.size() : toHide.size();
+-
+-		if ( options.animated ) {
+-			var animOptions = {};
+-
+-			if ( options.collapsible && clickedIsActive ) {
+-				animOptions = {
+-					toShow: $( [] ),
+-					toHide: toHide,
+-					complete: complete,
+-					down: down,
+-					autoHeight: options.autoHeight || options.fillSpace
+-				};
+-			} else {
+-				animOptions = {
+-					toShow: toShow,
+-					toHide: toHide,
+-					complete: complete,
+-					down: down,
+-					autoHeight: options.autoHeight || options.fillSpace
+-				};
+-			}
+-
+-			if ( !options.proxied ) {
+-				options.proxied = options.animated;
+-			}
+-
+-			if ( !options.proxiedDuration ) {
+-				options.proxiedDuration = options.duration;
+-			}
+-
+-			options.animated = $.isFunction( options.proxied ) ?
+-				options.proxied( animOptions ) :
+-				options.proxied;
+-
+-			options.duration = $.isFunction( options.proxiedDuration ) ?
+-				options.proxiedDuration( animOptions ) :
+-				options.proxiedDuration;
+-
+-			var animations = $.ui.accordion.animations,
+-				duration = options.duration,
+-				easing = options.animated;
+-
+-			if ( easing && !animations[ easing ] && !$.easing[ easing ] ) {
+-				easing = "slide";
+-			}
+-			if ( !animations[ easing ] ) {
+-				animations[ easing ] = function( options ) {
+-					this.slide( options, {
+-						easing: easing,
+-						duration: duration || 700
+-					});
+-				};
+-			}
+-
+-			animations[ easing ]( animOptions );
+-		} else {
+-			if ( options.collapsible && clickedIsActive ) {
+-				toShow.toggle();
+-			} else {
+-				toHide.hide();
+-				toShow.show();
+-			}
+-
+-			complete( true );
+-		}
+-
+-		// TODO assert that the blur and focus triggers are really necessary, remove otherwise
+-		toHide.prev()
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.blur();
+-		toShow.prev()
+-			.attr({
+-				"aria-expanded": "true",
+-				"aria-selected": "true",
+-				tabIndex: 0
+-			})
+-			.focus();
+-	},
+-
+-	_completed: function( cancel ) {
+-		this.running = cancel ? 0 : --this.running;
+-		if ( this.running ) {
+-			return;
+-		}
+-
+-		if ( this.options.clearStyle ) {
+-			this.toShow.add( this.toHide ).css({
+-				height: "",
+-				overflow: ""
+-			});
+-		}
+-
+-		// other classes are removed before the animation; this one needs to stay until completed
+-		this.toHide.removeClass( "ui-accordion-content-active" );
+-		// Work around for rendering bug in IE (#5421)
+-		if ( this.toHide.length ) {
+-			this.toHide.parent()[0].className = this.toHide.parent()[0].className;
+-		}
+-
+-		this._trigger( "change", null, this.data );
+-	}
+-});
+-
+-$.extend( $.ui.accordion, {
+-	version: "1.8.15",
+-	animations: {
+-		slide: function( options, additions ) {
+-			options = $.extend({
+-				easing: "swing",
+-				duration: 300
+-			}, options, additions );
+-			if ( !options.toHide.size() ) {
+-				options.toShow.animate({
+-					height: "show",
+-					paddingTop: "show",
+-					paddingBottom: "show"
+-				}, options );
+-				return;
+-			}
+-			if ( !options.toShow.size() ) {
+-				options.toHide.animate({
+-					height: "hide",
+-					paddingTop: "hide",
+-					paddingBottom: "hide"
+-				}, options );
+-				return;
+-			}
+-			var overflow = options.toShow.css( "overflow" ),
+-				percentDone = 0,
+-				showProps = {},
+-				hideProps = {},
+-				fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
+-				originalWidth;
+-			// fix width before calculating height of hidden element
+-			var s = options.toShow;
+-			originalWidth = s[0].style.width;
+-			s.width( parseInt( s.parent().width(), 10 )
+-				- parseInt( s.css( "paddingLeft" ), 10 )
+-				- parseInt( s.css( "paddingRight" ), 10 )
+-				- ( parseInt( s.css( "borderLeftWidth" ), 10 ) || 0 )
+-				- ( parseInt( s.css( "borderRightWidth" ), 10) || 0 ) );
+-
+-			$.each( fxAttrs, function( i, prop ) {
+-				hideProps[ prop ] = "hide";
+-
+-				var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ );
+-				showProps[ prop ] = {
+-					value: parts[ 1 ],
+-					unit: parts[ 2 ] || "px"
+-				};
+-			});
+-			options.toShow.css({ height: 0, overflow: "hidden" }).show();
+-			options.toHide
+-				.filter( ":hidden" )
+-					.each( options.complete )
+-				.end()
+-				.filter( ":visible" )
+-				.animate( hideProps, {
+-				step: function( now, settings ) {
+-					// only calculate the percent when animating height
+-					// IE gets very inconsistent results when animating elements
+-					// with small values, which is common for padding
+-					if ( settings.prop == "height" ) {
+-						percentDone = ( settings.end - settings.start === 0 ) ? 0 :
+-							( settings.now - settings.start ) / ( settings.end - settings.start );
+-					}
+-
+-					options.toShow[ 0 ].style[ settings.prop ] =
+-						( percentDone * showProps[ settings.prop ].value )
+-						+ showProps[ settings.prop ].unit;
+-				},
+-				duration: options.duration,
+-				easing: options.easing,
+-				complete: function() {
+-					if ( !options.autoHeight ) {
+-						options.toShow.css( "height", "" );
+-					}
+-					options.toShow.css({
+-						width: originalWidth,
+-						overflow: overflow
+-					});
+-					options.complete();
+-				}
+-			});
+-		},
+-		bounceslide: function( options ) {
+-			this.slide( options, {
+-				easing: options.down ? "easeOutBounce" : "swing",
+-				duration: options.down ? 1000 : 200
+-			});
+-		}
+-	}
+-});
+-
+-})( jQuery );
+-/*
+- * jQuery UI Autocomplete 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Autocomplete
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.position.js
+- */
+-(function( $, undefined ) {
+-
+-// used to prevent race conditions with remote data sources
+-var requestIndex = 0;
+-
+-$.widget( "ui.autocomplete", {
+-	options: {
+-		appendTo: "body",
+-		autoFocus: false,
+-		delay: 300,
+-		minLength: 1,
+-		position: {
+-			my: "left top",
+-			at: "left bottom",
+-			collision: "none"
+-		},
+-		source: null
+-	},
+-
+-	pending: 0,
+-
+-	_create: function() {
+-		var self = this,
+-			doc = this.element[ 0 ].ownerDocument,
+-			suppressKeyPress;
+-
+-		this.element
+-			.addClass( "ui-autocomplete-input" )
+-			.attr( "autocomplete", "off" )
+-			// TODO verify these actually work as intended
+-			.attr({
+-				role: "textbox",
+-				"aria-autocomplete": "list",
+-				"aria-haspopup": "true"
+-			})
+-			.bind( "keydown.autocomplete", function( event ) {
+-				if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) {
+-					return;
+-				}
+-
+-				suppressKeyPress = false;
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					self._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					self._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					self._move( "previous", event );
+-					// prevent moving cursor to beginning of text field in some browsers
+-					event.preventDefault();
+-					break;
+-				case keyCode.DOWN:
+-					self._move( "next", event );
+-					// prevent moving cursor to end of text field in some browsers
+-					event.preventDefault();
+-					break;
+-				case keyCode.ENTER:
+-				case keyCode.NUMPAD_ENTER:
+-					// when menu is open and has focus
+-					if ( self.menu.active ) {
+-						// #6055 - Opera still allows the keypress to occur
+-						// which causes forms to submit
+-						suppressKeyPress = true;
+-						event.preventDefault();
+-					}
+-					//passthrough - ENTER and TAB both select the current element
+-				case keyCode.TAB:
+-					if ( !self.menu.active ) {
+-						return;
+-					}
+-					self.menu.select( event );
+-					break;
+-				case keyCode.ESCAPE:
+-					self.element.val( self.term );
+-					self.close( event );
+-					break;
+-				default:
+-					// keypress is triggered before the input value is changed
+-					clearTimeout( self.searching );
+-					self.searching = setTimeout(function() {
+-						// only search if the value has changed
+-						if ( self.term != self.element.val() ) {
+-							self.selectedItem = null;
+-							self.search( null, event );
+-						}
+-					}, self.options.delay );
+-					break;
+-				}
+-			})
+-			.bind( "keypress.autocomplete", function( event ) {
+-				if ( suppressKeyPress ) {
+-					suppressKeyPress = false;
+-					event.preventDefault();
+-				}
+-			})
+-			.bind( "focus.autocomplete", function() {
+-				if ( self.options.disabled ) {
+-					return;
+-				}
+-
+-				self.selectedItem = null;
+-				self.previous = self.element.val();
+-			})
+-			.bind( "blur.autocomplete", function( event ) {
+-				if ( self.options.disabled ) {
+-					return;
+-				}
+-
+-				clearTimeout( self.searching );
+-				// clicks on the menu (or a button to trigger a search) will cause a blur event
+-				self.closing = setTimeout(function() {
+-					self.close( event );
+-					self._change( event );
+-				}, 150 );
+-			});
+-		this._initSource();
+-		this.response = function() {
+-			return self._response.apply( self, arguments );
+-		};
+-		this.menu = $( "<ul></ul>" )
+-			.addClass( "ui-autocomplete" )
+-			.appendTo( $( this.options.appendTo || "body", doc )[0] )
+-			// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
+-			.mousedown(function( event ) {
+-				// clicking on the scrollbar causes focus to shift to the body
+-				// but we can't detect a mouseup or a click immediately afterward
+-				// so we have to track the next mousedown and close the menu if
+-				// the user clicks somewhere outside of the autocomplete
+-				var menuElement = self.menu.element[ 0 ];
+-				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+-					setTimeout(function() {
+-						$( document ).one( 'mousedown', function( event ) {
+-							if ( event.target !== self.element[ 0 ] &&
+-								event.target !== menuElement &&
+-								!$.ui.contains( menuElement, event.target ) ) {
+-								self.close();
+-							}
+-						});
+-					}, 1 );
+-				}
+-
+-				// use another timeout to make sure the blur-event-handler on the input was already triggered
+-				setTimeout(function() {
+-					clearTimeout( self.closing );
+-				}, 13);
+-			})
+-			.menu({
+-				focus: function( event, ui ) {
+-					var item = ui.item.data( "item.autocomplete" );
+-					if ( false !== self._trigger( "focus", event, { item: item } ) ) {
+-						// use value to match what will end up in the input, if it was a key event
+-						if ( /^key/.test(event.originalEvent.type) ) {
+-							self.element.val( item.value );
+-						}
+-					}
+-				},
+-				selected: function( event, ui ) {
+-					var item = ui.item.data( "item.autocomplete" ),
+-						previous = self.previous;
+-
+-					// only trigger when focus was lost (click on menu)
+-					if ( self.element[0] !== doc.activeElement ) {
+-						self.element.focus();
+-						self.previous = previous;
+-						// #6109 - IE triggers two focus events and the second
+-						// is asynchronous, so we need to reset the previous
+-						// term synchronously and asynchronously :-(
+-						setTimeout(function() {
+-							self.previous = previous;
+-							self.selectedItem = item;
+-						}, 1);
+-					}
+-
+-					if ( false !== self._trigger( "select", event, { item: item } ) ) {
+-						self.element.val( item.value );
+-					}
+-					// reset the term after the select event
+-					// this allows custom select handling to work properly
+-					self.term = self.element.val();
+-
+-					self.close( event );
+-					self.selectedItem = item;
+-				},
+-				blur: function( event, ui ) {
+-					// don't set the value of the text field if it's already correct
+-					// this prevents moving the cursor unnecessarily
+-					if ( self.menu.element.is(":visible") &&
+-						( self.element.val() !== self.term ) ) {
+-						self.element.val( self.term );
+-					}
+-				}
+-			})
+-			.zIndex( this.element.zIndex() + 1 )
+-			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
+-			.css({ top: 0, left: 0 })
+-			.hide()
+-			.data( "menu" );
+-		if ( $.fn.bgiframe ) {
+-			 this.menu.element.bgiframe();
+-		}
+-	},
+-
+-	destroy: function() {
+-		this.element
+-			.removeClass( "ui-autocomplete-input" )
+-			.removeAttr( "autocomplete" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-autocomplete" )
+-			.removeAttr( "aria-haspopup" );
+-		this.menu.element.remove();
+-		$.Widget.prototype.destroy.call( this );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-		if ( key === "source" ) {
+-			this._initSource();
+-		}
+-		if ( key === "appendTo" ) {
+-			this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] )
+-		}
+-		if ( key === "disabled" && value && this.xhr ) {
+-			this.xhr.abort();
+-		}
+-	},
+-
+-	_initSource: function() {
+-		var self = this,
+-			array,
+-			url;
+-		if ( $.isArray(this.options.source) ) {
+-			array = this.options.source;
+-			this.source = function( request, response ) {
+-				response( $.ui.autocomplete.filter(array, request.term) );
+-			};
+-		} else if ( typeof this.options.source === "string" ) {
+-			url = this.options.source;
+-			this.source = function( request, response ) {
+-				if ( self.xhr ) {
+-					self.xhr.abort();
+-				}
+-				self.xhr = $.ajax({
+-					url: url,
+-					data: request,
+-					dataType: "json",
+-					autocompleteRequest: ++requestIndex,
+-					success: function( data, status ) {
+-						if ( this.autocompleteRequest === requestIndex ) {
+-							response( data );
+-						}
+-					},
+-					error: function() {
+-						if ( this.autocompleteRequest === requestIndex ) {
+-							response( [] );
+-						}
+-					}
+-				});
+-			};
+-		} else {
+-			this.source = this.options.source;
+-		}
+-	},
+-
+-	search: function( value, event ) {
+-		value = value != null ? value : this.element.val();
+-
+-		// always save the actual value, not the one passed as an argument
+-		this.term = this.element.val();
+-
+-		if ( value.length < this.options.minLength ) {
+-			return this.close( event );
+-		}
+-
+-		clearTimeout( this.closing );
+-		if ( this._trigger( "search", event ) === false ) {
+-			return;
+-		}
+-
+-		return this._search( value );
+-	},
+-
+-	_search: function( value ) {
+-		this.pending++;
+-		this.element.addClass( "ui-autocomplete-loading" );
+-
+-		this.source( { term: value }, this.response );
+-	},
+-
+-	_response: function( content ) {
+-		if ( !this.options.disabled && content && content.length ) {
+-			content = this._normalize( content );
+-			this._suggest( content );
+-			this._trigger( "open" );
+-		} else {
+-			this.close();
+-		}
+-		this.pending--;
+-		if ( !this.pending ) {
+-			this.element.removeClass( "ui-autocomplete-loading" );
+-		}
+-	},
+-
+-	close: function( event ) {
+-		clearTimeout( this.closing );
+-		if ( this.menu.element.is(":visible") ) {
+-			this.menu.element.hide();
+-			this.menu.deactivate();
+-			this._trigger( "close", event );
+-		}
+-	},
+-	
+-	_change: function( event ) {
+-		if ( this.previous !== this.element.val() ) {
+-			this._trigger( "change", event, { item: this.selectedItem } );
+-		}
+-	},
+-
+-	_normalize: function( items ) {
+-		// assume all items have the right format when the first item is complete
+-		if ( items.length && items[0].label && items[0].value ) {
+-			return items;
+-		}
+-		return $.map( items, function(item) {
+-			if ( typeof item === "string" ) {
+-				return {
+-					label: item,
+-					value: item
+-				};
+-			}
+-			return $.extend({
+-				label: item.label || item.value,
+-				value: item.value || item.label
+-			}, item );
+-		});
+-	},
+-
+-	_suggest: function( items ) {
+-		var ul = this.menu.element
+-			.empty()
+-			.zIndex( this.element.zIndex() + 1 );
+-		this._renderMenu( ul, items );
+-		// TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate
+-		this.menu.deactivate();
+-		this.menu.refresh();
+-
+-		// size and position menu
+-		ul.show();
+-		this._resizeMenu();
+-		ul.position( $.extend({
+-			of: this.element
+-		}, this.options.position ));
+-
+-		if ( this.options.autoFocus ) {
+-			this.menu.next( new $.Event("mouseover") );
+-		}
+-	},
+-
+-	_resizeMenu: function() {
+-		var ul = this.menu.element;
+-		ul.outerWidth( Math.max(
+-			ul.width( "" ).outerWidth(),
+-			this.element.outerWidth()
+-		) );
+-	},
+-
+-	_renderMenu: function( ul, items ) {
+-		var self = this;
+-		$.each( items, function( index, item ) {
+-			self._renderItem( ul, item );
+-		});
+-	},
+-
+-	_renderItem: function( ul, item) {
+-		return $( "<li></li>" )
+-			.data( "item.autocomplete", item )
+-			.append( $( "<a></a>" ).text( item.label ) )
+-			.appendTo( ul );
+-	},
+-
+-	_move: function( direction, event ) {
+-		if ( !this.menu.element.is(":visible") ) {
+-			this.search( null, event );
+-			return;
+-		}
+-		if ( this.menu.first() && /^previous/.test(direction) ||
+-				this.menu.last() && /^next/.test(direction) ) {
+-			this.element.val( this.term );
+-			this.menu.deactivate();
+-			return;
+-		}
+-		this.menu[ direction ]( event );
+-	},
+-
+-	widget: function() {
+-		return this.menu.element;
+-	}
+-});
+-
+-$.extend( $.ui.autocomplete, {
+-	escapeRegex: function( value ) {
+-		return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+-	},
+-	filter: function(array, term) {
+-		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+-		return $.grep( array, function(value) {
+-			return matcher.test( value.label || value.value || value );
+-		});
+-	}
+-});
+-
+-}( jQuery ));
+-
+-/*
+- * jQuery UI Menu (not officially released)
+- * 
+- * This widget isn't yet finished and the API is subject to change. We plan to finish
+- * it for the next release. You're welcome to give it a try anyway and give us feedback,
+- * as long as you're okay with migrating your code later on. We can help with that, too.
+- *
+- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Menu
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *  jquery.ui.widget.js
+- */
+-(function($) {
+-
+-$.widget("ui.menu", {
+-	_create: function() {
+-		var self = this;
+-		this.element
+-			.addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
+-			.attr({
+-				role: "listbox",
+-				"aria-activedescendant": "ui-active-menuitem"
+-			})
+-			.click(function( event ) {
+-				if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) {
+-					return;
+-				}
+-				// temporary
+-				event.preventDefault();
+-				self.select( event );
+-			});
+-		this.refresh();
+-	},
+-	
+-	refresh: function() {
+-		var self = this;
+-
+-		// don't refresh list items that are already adapted
+-		var items = this.element.children("li:not(.ui-menu-item):has(a)")
+-			.addClass("ui-menu-item")
+-			.attr("role", "menuitem");
+-		
+-		items.children("a")
+-			.addClass("ui-corner-all")
+-			.attr("tabindex", -1)
+-			// mouseenter doesn't work with event delegation
+-			.mouseenter(function( event ) {
+-				self.activate( event, $(this).parent() );
+-			})
+-			.mouseleave(function() {
+-				self.deactivate();
+-			});
+-	},
+-
+-	activate: function( event, item ) {
+-		this.deactivate();
+-		if (this.hasScroll()) {
+-			var offset = item.offset().top - this.element.offset().top,
+-				scroll = this.element.scrollTop(),
+-				elementHeight = this.element.height();
+-			if (offset < 0) {
+-				this.element.scrollTop( scroll + offset);
+-			} else if (offset >= elementHeight) {
+-				this.element.scrollTop( scroll + offset - elementHeight + item.height());
+-			}
+-		}
+-		this.active = item.eq(0)
+-			.children("a")
+-				.addClass("ui-state-hover")
+-				.attr("id", "ui-active-menuitem")
+-			.end();
+-		this._trigger("focus", event, { item: item });
+-	},
+-
+-	deactivate: function() {
+-		if (!this.active) { return; }
+-
+-		this.active.children("a")
+-			.removeClass("ui-state-hover")
+-			.removeAttr("id");
+-		this._trigger("blur");
+-		this.active = null;
+-	},
+-
+-	next: function(event) {
+-		this.move("next", ".ui-menu-item:first", event);
+-	},
+-
+-	previous: function(event) {
+-		this.move("prev", ".ui-menu-item:last", event);
+-	},
+-
+-	first: function() {
+-		return this.active && !this.active.prevAll(".ui-menu-item").length;
+-	},
+-
+-	last: function() {
+-		return this.active && !this.active.nextAll(".ui-menu-item").length;
+-	},
+-
+-	move: function(direction, edge, event) {
+-		if (!this.active) {
+-			this.activate(event, this.element.children(edge));
+-			return;
+-		}
+-		var next = this.active[direction + "All"](".ui-menu-item").eq(0);
+-		if (next.length) {
+-			this.activate(event, next);
+-		} else {
+-			this.activate(event, this.element.children(edge));
+-		}
+-	},
+-
+-	// TODO merge with previousPage
+-	nextPage: function(event) {
+-		if (this.hasScroll()) {
+-			// TODO merge with no-scroll-else
+-			if (!this.active || this.last()) {
+-				this.activate(event, this.element.children(".ui-menu-item:first"));
+-				return;
+-			}
+-			var base = this.active.offset().top,
+-				height = this.element.height(),
+-				result = this.element.children(".ui-menu-item").filter(function() {
+-					var close = $(this).offset().top - base - height + $(this).height();
+-					// TODO improve approximation
+-					return close < 10 && close > -10;
+-				});
+-
+-			// TODO try to catch this earlier when scrollTop indicates the last page anyway
+-			if (!result.length) {
+-				result = this.element.children(".ui-menu-item:last");
+-			}
+-			this.activate(event, result);
+-		} else {
+-			this.activate(event, this.element.children(".ui-menu-item")
+-				.filter(!this.active || this.last() ? ":first" : ":last"));
+-		}
+-	},
+-
+-	// TODO merge with nextPage
+-	previousPage: function(event) {
+-		if (this.hasScroll()) {
+-			// TODO merge with no-scroll-else
+-			if (!this.active || this.first()) {
+-				this.activate(event, this.element.children(".ui-menu-item:last"));
+-				return;
+-			}
+-
+-			var base = this.active.offset().top,
+-				height = this.element.height();
+-				result = this.element.children(".ui-menu-item").filter(function() {
+-					var close = $(this).offset().top - base + height - $(this).height();
+-					// TODO improve approximation
+-					return close < 10 && close > -10;
+-				});
+-
+-			// TODO try to catch this earlier when scrollTop indicates the last page anyway
+-			if (!result.length) {
+-				result = this.element.children(".ui-menu-item:first");
+-			}
+-			this.activate(event, result);
+-		} else {
+-			this.activate(event, this.element.children(".ui-menu-item")
+-				.filter(!this.active || this.first() ? ":last" : ":first"));
+-		}
+-	},
+-
+-	hasScroll: function() {
+-		return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight");
+-	},
+-
+-	select: function( event ) {
+-		this._trigger("selected", event, { item: this.active });
+-	}
+-});
+-
+-}(jQuery));
+-/*
+- * jQuery UI Button 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Button
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var lastActive, startXPos, startYPos, clickDragged,
+-	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+-	stateClasses = "ui-state-hover ui-state-active ",
+-	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+-	formResetHandler = function() {
+-		var buttons = $( this ).find( ":ui-button" );
+-		setTimeout(function() {
+-			buttons.button( "refresh" );
+-		}, 1 );
+-	},
+-	radioGroup = function( radio ) {
+-		var name = radio.name,
+-			form = radio.form,
+-			radios = $( [] );
+-		if ( name ) {
+-			if ( form ) {
+-				radios = $( form ).find( "[name='" + name + "']" );
+-			} else {
+-				radios = $( "[name='" + name + "']", radio.ownerDocument )
+-					.filter(function() {
+-						return !this.form;
+-					});
+-			}
+-		}
+-		return radios;
+-	};
+-
+-$.widget( "ui.button", {
+-	options: {
+-		disabled: null,
+-		text: true,
+-		label: null,
+-		icons: {
+-			primary: null,
+-			secondary: null
+-		}
+-	},
+-	_create: function() {
+-		this.element.closest( "form" )
+-			.unbind( "reset.button" )
+-			.bind( "reset.button", formResetHandler );
+-
+-		if ( typeof this.options.disabled !== "boolean" ) {
+-			this.options.disabled = this.element.propAttr( "disabled" );
+-		}
+-
+-		this._determineButtonType();
+-		this.hasTitle = !!this.buttonElement.attr( "title" );
+-
+-		var self = this,
+-			options = this.options,
+-			toggleButton = this.type === "checkbox" || this.type === "radio",
+-			hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ),
+-			focusClass = "ui-state-focus";
+-
+-		if ( options.label === null ) {
+-			options.label = this.buttonElement.html();
+-		}
+-
+-		if ( this.element.is( ":disabled" ) ) {
+-			options.disabled = true;
+-		}
+-
+-		this.buttonElement
+-			.addClass( baseClasses )
+-			.attr( "role", "button" )
+-			.bind( "mouseenter.button", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).addClass( "ui-state-hover" );
+-				if ( this === lastActive ) {
+-					$( this ).addClass( "ui-state-active" );
+-				}
+-			})
+-			.bind( "mouseleave.button", function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( hoverClass );
+-			})
+-			.bind( "click.button", function( event ) {
+-				if ( options.disabled ) {
+-					event.preventDefault();
+-					event.stopImmediatePropagation();
+-				}
+-			});
+-
+-		this.element
+-			.bind( "focus.button", function() {
+-				// no need to check disabled, focus won't be triggered anyway
+-				self.buttonElement.addClass( focusClass );
+-			})
+-			.bind( "blur.button", function() {
+-				self.buttonElement.removeClass( focusClass );
+-			});
+-
+-		if ( toggleButton ) {
+-			this.element.bind( "change.button", function() {
+-				if ( clickDragged ) {
+-					return;
+-				}
+-				self.refresh();
+-			});
+-			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+-			// prevents issue where button state changes but checkbox/radio checked state
+-			// does not in Firefox (see ticket #6970)
+-			this.buttonElement
+-				.bind( "mousedown.button", function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					clickDragged = false;
+-					startXPos = event.pageX;
+-					startYPos = event.pageY;
+-				})
+-				.bind( "mouseup.button", function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+-						clickDragged = true;
+-					}
+-			});
+-		}
+-
+-		if ( this.type === "checkbox" ) {
+-			this.buttonElement.bind( "click.button", function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).toggleClass( "ui-state-active" );
+-				self.buttonElement.attr( "aria-pressed", self.element[0].checked );
+-			});
+-		} else if ( this.type === "radio" ) {
+-			this.buttonElement.bind( "click.button", function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).addClass( "ui-state-active" );
+-				self.buttonElement.attr( "aria-pressed", "true" );
+-
+-				var radio = self.element[ 0 ];
+-				radioGroup( radio )
+-					.not( radio )
+-					.map(function() {
+-						return $( this ).button( "widget" )[ 0 ];
+-					})
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			});
+-		} else {
+-			this.buttonElement
+-				.bind( "mousedown.button", function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).addClass( "ui-state-active" );
+-					lastActive = this;
+-					$( document ).one( "mouseup", function() {
+-						lastActive = null;
+-					});
+-				})
+-				.bind( "mouseup.button", function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).removeClass( "ui-state-active" );
+-				})
+-				.bind( "keydown.button", function(event) {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) {
+-						$( this ).addClass( "ui-state-active" );
+-					}
+-				})
+-				.bind( "keyup.button", function() {
+-					$( this ).removeClass( "ui-state-active" );
+-				});
+-
+-			if ( this.buttonElement.is("a") ) {
+-				this.buttonElement.keyup(function(event) {
+-					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+-						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+-						$( this ).click();
+-					}
+-				});
+-			}
+-		}
+-
+-		// TODO: pull out $.Widget's handling for the disabled option into
+-		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+-		// be overridden by individual plugins
+-		this._setOption( "disabled", options.disabled );
+-		this._resetButton();
+-	},
+-
+-	_determineButtonType: function() {
+-
+-		if ( this.element.is(":checkbox") ) {
+-			this.type = "checkbox";
+-		} else if ( this.element.is(":radio") ) {
+-			this.type = "radio";
+-		} else if ( this.element.is("input") ) {
+-			this.type = "input";
+-		} else {
+-			this.type = "button";
+-		}
+-
+-		if ( this.type === "checkbox" || this.type === "radio" ) {
+-			// we don't search against the document in case the element
+-			// is disconnected from the DOM
+-			var ancestor = this.element.parents().filter(":last"),
+-				labelSelector = "label[for=" + this.element.attr("id") + "]";
+-			this.buttonElement = ancestor.find( labelSelector );
+-			if ( !this.buttonElement.length ) {
+-				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+-				this.buttonElement = ancestor.filter( labelSelector );
+-				if ( !this.buttonElement.length ) {
+-					this.buttonElement = ancestor.find( labelSelector );
+-				}
+-			}
+-			this.element.addClass( "ui-helper-hidden-accessible" );
+-
+-			var checked = this.element.is( ":checked" );
+-			if ( checked ) {
+-				this.buttonElement.addClass( "ui-state-active" );
+-			}
+-			this.buttonElement.attr( "aria-pressed", checked );
+-		} else {
+-			this.buttonElement = this.element;
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.buttonElement;
+-	},
+-
+-	destroy: function() {
+-		this.element
+-			.removeClass( "ui-helper-hidden-accessible" );
+-		this.buttonElement
+-			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-pressed" )
+-			.html( this.buttonElement.find(".ui-button-text").html() );
+-
+-		if ( !this.hasTitle ) {
+-			this.buttonElement.removeAttr( "title" );
+-		}
+-
+-		$.Widget.prototype.destroy.call( this );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.propAttr( "disabled", true );
+-			} else {
+-				this.element.propAttr( "disabled", false );
+-			}
+-			return;
+-		}
+-		this._resetButton();
+-	},
+-
+-	refresh: function() {
+-		var isDisabled = this.element.is( ":disabled" );
+-		if ( isDisabled !== this.options.disabled ) {
+-			this._setOption( "disabled", isDisabled );
+-		}
+-		if ( this.type === "radio" ) {
+-			radioGroup( this.element[0] ).each(function() {
+-				if ( $( this ).is( ":checked" ) ) {
+-					$( this ).button( "widget" )
+-						.addClass( "ui-state-active" )
+-						.attr( "aria-pressed", "true" );
+-				} else {
+-					$( this ).button( "widget" )
+-						.removeClass( "ui-state-active" )
+-						.attr( "aria-pressed", "false" );
+-				}
+-			});
+-		} else if ( this.type === "checkbox" ) {
+-			if ( this.element.is( ":checked" ) ) {
+-				this.buttonElement
+-					.addClass( "ui-state-active" )
+-					.attr( "aria-pressed", "true" );
+-			} else {
+-				this.buttonElement
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			}
+-		}
+-	},
+-
+-	_resetButton: function() {
+-		if ( this.type === "input" ) {
+-			if ( this.options.label ) {
+-				this.element.val( this.options.label );
+-			}
+-			return;
+-		}
+-		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+-			buttonText = $( "<span></span>" )
+-				.addClass( "ui-button-text" )
+-				.html( this.options.label )
+-				.appendTo( buttonElement.empty() )
+-				.text(),
+-			icons = this.options.icons,
+-			multipleIcons = icons.primary && icons.secondary,
+-			buttonClasses = [];  
+-
+-		if ( icons.primary || icons.secondary ) {
+-			if ( this.options.text ) {
+-				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+-			}
+-
+-			if ( icons.primary ) {
+-				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+-			}
+-
+-			if ( icons.secondary ) {
+-				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+-			}
+-
+-			if ( !this.options.text ) {
+-				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+-
+-				if ( !this.hasTitle ) {
+-					buttonElement.attr( "title", buttonText );
+-				}
+-			}
+-		} else {
+-			buttonClasses.push( "ui-button-text-only" );
+-		}
+-		buttonElement.addClass( buttonClasses.join( " " ) );
+-	}
+-});
+-
+-$.widget( "ui.buttonset", {
+-	options: {
+-		items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)"
+-	},
+-
+-	_create: function() {
+-		this.element.addClass( "ui-buttonset" );
+-	},
+-	
+-	_init: function() {
+-		this.refresh();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "disabled" ) {
+-			this.buttons.button( "option", key, value );
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-	},
+-	
+-	refresh: function() {
+-		var ltr = this.element.css( "direction" ) === "ltr";
+-		
+-		this.buttons = this.element.find( this.options.items )
+-			.filter( ":ui-button" )
+-				.button( "refresh" )
+-			.end()
+-			.not( ":ui-button" )
+-				.button()
+-			.end()
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+-				.filter( ":first" )
+-					.addClass( ltr ? "ui-corner-left" : "ui-corner-right" )
+-				.end()
+-				.filter( ":last" )
+-					.addClass( ltr ? "ui-corner-right" : "ui-corner-left" )
+-				.end()
+-			.end();
+-	},
+-
+-	destroy: function() {
+-		this.element.removeClass( "ui-buttonset" );
+-		this.buttons
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-left ui-corner-right" )
+-			.end()
+-			.button( "destroy" );
+-
+-		$.Widget.prototype.destroy.call( this );
+-	}
+-});
+-
+-}( jQuery ) );
+-/*
+- * jQuery UI Datepicker 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Datepicker
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.extend($.ui, { datepicker: { version: "1.8.15" } });
+-
+-var PROP_NAME = 'datepicker';
+-var dpuuid = new Date().getTime();
+-var instActive;
+-
+-/* Date picker manager.
+-   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+-   Settings for (groups of) date pickers are maintained in an instance object,
+-   allowing multiple different settings on the same page. */
+-
+-function Datepicker() {
+-	this.debug = false; // Change this to true to start debugging
+-	this._curInst = null; // The current instance in use
+-	this._keyEvent = false; // If the last event was a key event
+-	this._disabledInputs = []; // List of date picker inputs that have been disabled
+-	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+-	this._inDialog = false; // True if showing within a "dialog", false if not
+-	this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
+-	this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
+-	this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
+-	this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
+-	this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
+-	this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
+-	this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
+-	this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
+-	this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
+-	this.regional = []; // Available regional settings, indexed by language code
+-	this.regional[''] = { // Default regional settings
+-		closeText: 'Done', // Display text for close link
+-		prevText: 'Prev', // Display text for previous month link
+-		nextText: 'Next', // Display text for next month link
+-		currentText: 'Today', // Display text for current month link
+-		monthNames: ['January','February','March','April','May','June',
+-			'July','August','September','October','November','December'], // Names of months for drop-down and formatting
+-		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
+-		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
+-		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
+-		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
+-		weekHeader: 'Wk', // Column header for week of the year
+-		dateFormat: 'mm/dd/yy', // See format options on parseDate
+-		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+-		isRTL: false, // True if right-to-left language, false if left-to-right
+-		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+-		yearSuffix: '' // Additional text to append to the year in the month headers
+-	};
+-	this._defaults = { // Global defaults for all the date picker instances
+-		showOn: 'focus', // 'focus' for popup on focus,
+-			// 'button' for trigger button, or 'both' for either
+-		showAnim: 'fadeIn', // Name of jQuery animation for popup
+-		showOptions: {}, // Options for enhanced animations
+-		defaultDate: null, // Used when field is blank: actual date,
+-			// +/-number for offset from today, null for today
+-		appendText: '', // Display text following the input box, e.g. showing the format
+-		buttonText: '...', // Text for trigger button
+-		buttonImage: '', // URL for trigger button image
+-		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+-		hideIfNoPrevNext: false, // True to hide next/previous month links
+-			// if not applicable, false to just disable them
+-		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+-		gotoCurrent: false, // True if today link goes back to current selection instead
+-		changeMonth: false, // True if month can be selected directly, false if only prev/next
+-		changeYear: false, // True if year can be selected directly, false if only prev/next
+-		yearRange: 'c-10:c+10', // Range of years to display in drop-down,
+-			// either relative to today's year (-nn:+nn), relative to currently displayed year
+-			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+-		showOtherMonths: false, // True to show dates in other months, false to leave blank
+-		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+-		showWeek: false, // True to show week of the year, false to not show it
+-		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+-			// takes a Date and returns the number of the week for it
+-		shortYearCutoff: '+10', // Short year values < this are in the current century,
+-			// > this are in the previous century,
+-			// string value starting with '+' for current year + value
+-		minDate: null, // The earliest selectable date, or null for no limit
+-		maxDate: null, // The latest selectable date, or null for no limit
+-		duration: 'fast', // Duration of display/closure
+-		beforeShowDay: null, // Function that takes a date and returns an array with
+-			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
+-			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+-		beforeShow: null, // Function that takes an input field and
+-			// returns a set of custom settings for the date picker
+-		onSelect: null, // Define a callback function when a date is selected
+-		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+-		onClose: null, // Define a callback function when the datepicker is closed
+-		numberOfMonths: 1, // Number of months to show at a time
+-		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+-		stepMonths: 1, // Number of months to step back/forward
+-		stepBigMonths: 12, // Number of months to step back/forward for the big links
+-		altField: '', // Selector for an alternate field to store selected dates into
+-		altFormat: '', // The date format to use for the alternate field
+-		constrainInput: true, // The input is constrained by the current date format
+-		showButtonPanel: false, // True to show button panel, false to not show it
+-		autoSize: false, // True to size the input for the date format, false to leave as is
+-		disabled: false // The initial disabled state
+-	};
+-	$.extend(this._defaults, this.regional['']);
+-	this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'));
+-}
+-
+-$.extend(Datepicker.prototype, {
+-	/* Class name added to elements to indicate already configured with a date picker. */
+-	markerClassName: 'hasDatepicker',
+-	
+-	//Keep track of the maximum number of rows displayed (see #7043)
+-	maxRows: 4,
+-
+-	/* Debug logging (if enabled). */
+-	log: function () {
+-		if (this.debug)
+-			console.log.apply('', arguments);
+-	},
+-	
+-	// TODO rename to "widget" when switching to widget factory
+-	_widgetDatepicker: function() {
+-		return this.dpDiv;
+-	},
+-
+-	/* Override the default settings for all instances of the date picker.
+-	   @param  settings  object - the new settings to use as defaults (anonymous object)
+-	   @return the manager object */
+-	setDefaults: function(settings) {
+-		extendRemove(this._defaults, settings || {});
+-		return this;
+-	},
+-
+-	/* Attach the date picker to a jQuery selection.
+-	   @param  target    element - the target input field or division or span
+-	   @param  settings  object - the new settings to use for this date picker instance (anonymous) */
+-	_attachDatepicker: function(target, settings) {
+-		// check for settings on the control itself - in namespace 'date:'
+-		var inlineSettings = null;
+-		for (var attrName in this._defaults) {
+-			var attrValue = target.getAttribute('date:' + attrName);
+-			if (attrValue) {
+-				inlineSettings = inlineSettings || {};
+-				try {
+-					inlineSettings[attrName] = eval(attrValue);
+-				} catch (err) {
+-					inlineSettings[attrName] = attrValue;
+-				}
+-			}
+-		}
+-		var nodeName = target.nodeName.toLowerCase();
+-		var inline = (nodeName == 'div' || nodeName == 'span');
+-		if (!target.id) {
+-			this.uuid += 1;
+-			target.id = 'dp' + this.uuid;
+-		}
+-		var inst = this._newInst($(target), inline);
+-		inst.settings = $.extend({}, settings || {}, inlineSettings || {});
+-		if (nodeName == 'input') {
+-			this._connectDatepicker(target, inst);
+-		} else if (inline) {
+-			this._inlineDatepicker(target, inst);
+-		}
+-	},
+-
+-	/* Create a new instance object. */
+-	_newInst: function(target, inline) {
+-		var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars
+-		return {id: id, input: target, // associated target
+-			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+-			drawMonth: 0, drawYear: 0, // month being drawn
+-			inline: inline, // is datepicker inline or not
+-			dpDiv: (!inline ? this.dpDiv : // presentation div
+-			bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')))};
+-	},
+-
+-	/* Attach the date picker to an input field. */
+-	_connectDatepicker: function(target, inst) {
+-		var input = $(target);
+-		inst.append = $([]);
+-		inst.trigger = $([]);
+-		if (input.hasClass(this.markerClassName))
+-			return;
+-		this._attachments(input, inst);
+-		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+-			keypress(this._doKeyPress).keyup(this._doKeyUp).
+-			bind("setData.datepicker", function(event, key, value) {
+-				inst.settings[key] = value;
+-			}).bind("getData.datepicker", function(event, key) {
+-				return this._get(inst, key);
+-			});
+-		this._autoSize(inst);
+-		$.data(target, PROP_NAME, inst);
+-		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-	},
+-
+-	/* Make attachments based on settings. */
+-	_attachments: function(input, inst) {
+-		var appendText = this._get(inst, 'appendText');
+-		var isRTL = this._get(inst, 'isRTL');
+-		if (inst.append)
+-			inst.append.remove();
+-		if (appendText) {
+-			inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
+-			input[isRTL ? 'before' : 'after'](inst.append);
+-		}
+-		input.unbind('focus', this._showDatepicker);
+-		if (inst.trigger)
+-			inst.trigger.remove();
+-		var showOn = this._get(inst, 'showOn');
+-		if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
+-			input.focus(this._showDatepicker);
+-		if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
+-			var buttonText = this._get(inst, 'buttonText');
+-			var buttonImage = this._get(inst, 'buttonImage');
+-			inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
+-				$('<img/>').addClass(this._triggerClass).
+-					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+-				$('<button type="button"></button>').addClass(this._triggerClass).
+-					html(buttonImage == '' ? buttonText : $('<img/>').attr(
+-					{ src:buttonImage, alt:buttonText, title:buttonText })));
+-			input[isRTL ? 'before' : 'after'](inst.trigger);
+-			inst.trigger.click(function() {
+-				if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])
+-					$.datepicker._hideDatepicker();
+-				else
+-					$.datepicker._showDatepicker(input[0]);
+-				return false;
+-			});
+-		}
+-	},
+-
+-	/* Apply the maximum length for the date format. */
+-	_autoSize: function(inst) {
+-		if (this._get(inst, 'autoSize') && !inst.inline) {
+-			var date = new Date(2009, 12 - 1, 20); // Ensure double digits
+-			var dateFormat = this._get(inst, 'dateFormat');
+-			if (dateFormat.match(/[DM]/)) {
+-				var findMax = function(names) {
+-					var max = 0;
+-					var maxI = 0;
+-					for (var i = 0; i < names.length; i++) {
+-						if (names[i].length > max) {
+-							max = names[i].length;
+-							maxI = i;
+-						}
+-					}
+-					return maxI;
+-				};
+-				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+-					'monthNames' : 'monthNamesShort'))));
+-				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+-					'dayNames' : 'dayNamesShort'))) + 20 - date.getDay());
+-			}
+-			inst.input.attr('size', this._formatDate(inst, date).length);
+-		}
+-	},
+-
+-	/* Attach an inline date picker to a div. */
+-	_inlineDatepicker: function(target, inst) {
+-		var divSpan = $(target);
+-		if (divSpan.hasClass(this.markerClassName))
+-			return;
+-		divSpan.addClass(this.markerClassName).append(inst.dpDiv).
+-			bind("setData.datepicker", function(event, key, value){
+-				inst.settings[key] = value;
+-			}).bind("getData.datepicker", function(event, key){
+-				return this._get(inst, key);
+-			});
+-		$.data(target, PROP_NAME, inst);
+-		this._setDate(inst, this._getDefaultDate(inst), true);
+-		this._updateDatepicker(inst);
+-		this._updateAlternate(inst);
+-		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+-		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+-		inst.dpDiv.css( "display", "block" );
+-	},
+-
+-	/* Pop-up the date picker in a "dialog" box.
+-	   @param  input     element - ignored
+-	   @param  date      string or Date - the initial date to display
+-	   @param  onSelect  function - the function to call when a date is selected
+-	   @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+-	   @param  pos       int[2] - coordinates for the dialog's position within the screen or
+-	                     event - with x/y coordinates or
+-	                     leave empty for default (screen centre)
+-	   @return the manager object */
+-	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+-		var inst = this._dialogInst; // internal instance
+-		if (!inst) {
+-			this.uuid += 1;
+-			var id = 'dp' + this.uuid;
+-			this._dialogInput = $('<input type="text" id="' + id +
+-				'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
+-			this._dialogInput.keydown(this._doKeyDown);
+-			$('body').append(this._dialogInput);
+-			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+-			inst.settings = {};
+-			$.data(this._dialogInput[0], PROP_NAME, inst);
+-		}
+-		extendRemove(inst.settings, settings || {});
+-		date = (date && date.constructor == Date ? this._formatDate(inst, date) : date);
+-		this._dialogInput.val(date);
+-
+-		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+-		if (!this._pos) {
+-			var browserWidth = document.documentElement.clientWidth;
+-			var browserHeight = document.documentElement.clientHeight;
+-			var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+-			var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+-			this._pos = // should use actual width/height below
+-				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+-		}
+-
+-		// move input on screen for focus, but hidden behind dialog
+-		this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px');
+-		inst.settings.onSelect = onSelect;
+-		this._inDialog = true;
+-		this.dpDiv.addClass(this._dialogClass);
+-		this._showDatepicker(this._dialogInput[0]);
+-		if ($.blockUI)
+-			$.blockUI(this.dpDiv);
+-		$.data(this._dialogInput[0], PROP_NAME, inst);
+-		return this;
+-	},
+-
+-	/* Detach a datepicker from its control.
+-	   @param  target    element - the target input field or division or span */
+-	_destroyDatepicker: function(target) {
+-		var $target = $(target);
+-		var inst = $.data(target, PROP_NAME);
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		var nodeName = target.nodeName.toLowerCase();
+-		$.removeData(target, PROP_NAME);
+-		if (nodeName == 'input') {
+-			inst.append.remove();
+-			inst.trigger.remove();
+-			$target.removeClass(this.markerClassName).
+-				unbind('focus', this._showDatepicker).
+-				unbind('keydown', this._doKeyDown).
+-				unbind('keypress', this._doKeyPress).
+-				unbind('keyup', this._doKeyUp);
+-		} else if (nodeName == 'div' || nodeName == 'span')
+-			$target.removeClass(this.markerClassName).empty();
+-	},
+-
+-	/* Enable the date picker to a jQuery selection.
+-	   @param  target    element - the target input field or division or span */
+-	_enableDatepicker: function(target) {
+-		var $target = $(target);
+-		var inst = $.data(target, PROP_NAME);
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		var nodeName = target.nodeName.toLowerCase();
+-		if (nodeName == 'input') {
+-			target.disabled = false;
+-			inst.trigger.filter('button').
+-				each(function() { this.disabled = false; }).end().
+-				filter('img').css({opacity: '1.0', cursor: ''});
+-		}
+-		else if (nodeName == 'div' || nodeName == 'span') {
+-			var inline = $target.children('.' + this._inlineClass);
+-			inline.children().removeClass('ui-state-disabled');
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				removeAttr("disabled");
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value == target ? null : value); }); // delete entry
+-	},
+-
+-	/* Disable the date picker to a jQuery selection.
+-	   @param  target    element - the target input field or division or span */
+-	_disableDatepicker: function(target) {
+-		var $target = $(target);
+-		var inst = $.data(target, PROP_NAME);
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		var nodeName = target.nodeName.toLowerCase();
+-		if (nodeName == 'input') {
+-			target.disabled = true;
+-			inst.trigger.filter('button').
+-				each(function() { this.disabled = true; }).end().
+-				filter('img').css({opacity: '0.5', cursor: 'default'});
+-		}
+-		else if (nodeName == 'div' || nodeName == 'span') {
+-			var inline = $target.children('.' + this._inlineClass);
+-			inline.children().addClass('ui-state-disabled');
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				attr("disabled", "disabled");
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value == target ? null : value); }); // delete entry
+-		this._disabledInputs[this._disabledInputs.length] = target;
+-	},
+-
+-	/* Is the first field in a jQuery collection disabled as a datepicker?
+-	   @param  target    element - the target input field or division or span
+-	   @return boolean - true if disabled, false if enabled */
+-	_isDisabledDatepicker: function(target) {
+-		if (!target) {
+-			return false;
+-		}
+-		for (var i = 0; i < this._disabledInputs.length; i++) {
+-			if (this._disabledInputs[i] == target)
+-				return true;
+-		}
+-		return false;
+-	},
+-
+-	/* Retrieve the instance data for the target control.
+-	   @param  target  element - the target input field or division or span
+-	   @return  object - the associated instance data
+-	   @throws  error if a jQuery problem getting data */
+-	_getInst: function(target) {
+-		try {
+-			return $.data(target, PROP_NAME);
+-		}
+-		catch (err) {
+-			throw 'Missing instance data for this datepicker';
+-		}
+-	},
+-
+-	/* Update or retrieve the settings for a date picker attached to an input field or division.
+-	   @param  target  element - the target input field or division or span
+-	   @param  name    object - the new settings to update or
+-	                   string - the name of the setting to change or retrieve,
+-	                   when retrieving also 'all' for all instance settings or
+-	                   'defaults' for all global defaults
+-	   @param  value   any - the new value for the setting
+-	                   (omit if above is an object or to retrieve a value) */
+-	_optionDatepicker: function(target, name, value) {
+-		var inst = this._getInst(target);
+-		if (arguments.length == 2 && typeof name == 'string') {
+-			return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
+-				(inst ? (name == 'all' ? $.extend({}, inst.settings) :
+-				this._get(inst, name)) : null));
+-		}
+-		var settings = name || {};
+-		if (typeof name == 'string') {
+-			settings = {};
+-			settings[name] = value;
+-		}
+-		if (inst) {
+-			if (this._curInst == inst) {
+-				this._hideDatepicker();
+-			}
+-			var date = this._getDateDatepicker(target, true);
+-			var minDate = this._getMinMaxDate(inst, 'min');
+-			var maxDate = this._getMinMaxDate(inst, 'max');
+-			extendRemove(inst.settings, settings);
+-			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+-			if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined)
+-				inst.settings.minDate = this._formatDate(inst, minDate);
+-			if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined)
+-				inst.settings.maxDate = this._formatDate(inst, maxDate);
+-			this._attachments($(target), inst);
+-			this._autoSize(inst);
+-			this._setDate(inst, date);
+-			this._updateAlternate(inst);
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	// change method deprecated
+-	_changeDatepicker: function(target, name, value) {
+-		this._optionDatepicker(target, name, value);
+-	},
+-
+-	/* Redraw the date picker attached to an input field or division.
+-	   @param  target  element - the target input field or division or span */
+-	_refreshDatepicker: function(target) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	/* Set the dates for a jQuery selection.
+-	   @param  target   element - the target input field or division or span
+-	   @param  date     Date - the new date */
+-	_setDateDatepicker: function(target, date) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._setDate(inst, date);
+-			this._updateDatepicker(inst);
+-			this._updateAlternate(inst);
+-		}
+-	},
+-
+-	/* Get the date(s) for the first entry in a jQuery selection.
+-	   @param  target     element - the target input field or division or span
+-	   @param  noDefault  boolean - true if no default date is to be used
+-	   @return Date - the current date */
+-	_getDateDatepicker: function(target, noDefault) {
+-		var inst = this._getInst(target);
+-		if (inst && !inst.inline)
+-			this._setDateFromField(inst, noDefault);
+-		return (inst ? this._getDate(inst) : null);
+-	},
+-
+-	/* Handle keystrokes. */
+-	_doKeyDown: function(event) {
+-		var inst = $.datepicker._getInst(event.target);
+-		var handled = true;
+-		var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
+-		inst._keyEvent = true;
+-		if ($.datepicker._datepickerShowing)
+-			switch (event.keyCode) {
+-				case 9: $.datepicker._hideDatepicker();
+-						handled = false;
+-						break; // hide on tab out
+-				case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + 
+-									$.datepicker._currentClass + ')', inst.dpDiv);
+-						if (sel[0])
+-							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+-							var onSelect = $.datepicker._get(inst, 'onSelect');
+-							if (onSelect) {
+-								var dateStr = $.datepicker._formatDate(inst);
+-
+-								// trigger custom callback
+-								onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-							}
+-						else
+-							$.datepicker._hideDatepicker();
+-						return false; // don't submit the form
+-						break; // select the value on enter
+-				case 27: $.datepicker._hideDatepicker();
+-						break; // hide on escape
+-				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							-$.datepicker._get(inst, 'stepBigMonths') :
+-							-$.datepicker._get(inst, 'stepMonths')), 'M');
+-						break; // previous month/year on page up/+ ctrl
+-				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							+$.datepicker._get(inst, 'stepBigMonths') :
+-							+$.datepicker._get(inst, 'stepMonths')), 'M');
+-						break; // next month/year on page down/+ ctrl
+-				case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // clear on ctrl or command +end
+-				case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // current on ctrl or command +home
+-				case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
+-						handled = event.ctrlKey || event.metaKey;
+-						// -1 day on ctrl or command +left
+-						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-									-$.datepicker._get(inst, 'stepBigMonths') :
+-									-$.datepicker._get(inst, 'stepMonths')), 'M');
+-						// next month/year on alt +left on Mac
+-						break;
+-				case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // -1 week on ctrl or command +up
+-				case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
+-						handled = event.ctrlKey || event.metaKey;
+-						// +1 day on ctrl or command +right
+-						if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-									+$.datepicker._get(inst, 'stepBigMonths') :
+-									+$.datepicker._get(inst, 'stepMonths')), 'M');
+-						// next month/year on alt +right
+-						break;
+-				case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // +1 week on ctrl or command +down
+-				default: handled = false;
+-			}
+-		else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
+-			$.datepicker._showDatepicker(this);
+-		else {
+-			handled = false;
+-		}
+-		if (handled) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-	},
+-
+-	/* Filter entered characters - based on date format. */
+-	_doKeyPress: function(event) {
+-		var inst = $.datepicker._getInst(event.target);
+-		if ($.datepicker._get(inst, 'constrainInput')) {
+-			var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
+-			var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
+-			return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
+-		}
+-	},
+-
+-	/* Synchronise manual entry and field/alternate field. */
+-	_doKeyUp: function(event) {
+-		var inst = $.datepicker._getInst(event.target);
+-		if (inst.input.val() != inst.lastVal) {
+-			try {
+-				var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
+-					(inst.input ? inst.input.val() : null),
+-					$.datepicker._getFormatConfig(inst));
+-				if (date) { // only if valid
+-					$.datepicker._setDateFromField(inst);
+-					$.datepicker._updateAlternate(inst);
+-					$.datepicker._updateDatepicker(inst);
+-				}
+-			}
+-			catch (event) {
+-				$.datepicker.log(event);
+-			}
+-		}
+-		return true;
+-	},
+-
+-	/* Pop-up the date picker for a given input field.
+-	   @param  input  element - the input field attached to the date picker or
+-	                  event - if triggered by focus */
+-	_showDatepicker: function(input) {
+-		input = input.target || input;
+-		if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
+-			input = $('input', input.parentNode)[0];
+-		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
+-			return;
+-		var inst = $.datepicker._getInst(input);
+-		if ($.datepicker._curInst && $.datepicker._curInst != inst) {
+-			if ( $.datepicker._datepickerShowing ) {
+-				$.datepicker._triggerOnClose($.datepicker._curInst);
+-			}
+-			$.datepicker._curInst.dpDiv.stop(true, true);
+-		}
+-		var beforeShow = $.datepicker._get(inst, 'beforeShow');
+-		extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
+-		inst.lastVal = null;
+-		$.datepicker._lastInput = input;
+-		$.datepicker._setDateFromField(inst);
+-		if ($.datepicker._inDialog) // hide cursor
+-			input.value = '';
+-		if (!$.datepicker._pos) { // position below input
+-			$.datepicker._pos = $.datepicker._findPos(input);
+-			$.datepicker._pos[1] += input.offsetHeight; // add the height
+-		}
+-		var isFixed = false;
+-		$(input).parents().each(function() {
+-			isFixed |= $(this).css('position') == 'fixed';
+-			return !isFixed;
+-		});
+-		if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
+-			$.datepicker._pos[0] -= document.documentElement.scrollLeft;
+-			$.datepicker._pos[1] -= document.documentElement.scrollTop;
+-		}
+-		var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+-		$.datepicker._pos = null;
+-		//to avoid flashes on Firefox
+-		inst.dpDiv.empty();
+-		// determine sizing offscreen
+-		inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
+-		$.datepicker._updateDatepicker(inst);
+-		// fix width for dynamic number of date pickers
+-		// and adjust position before showing
+-		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+-		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+-			'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
+-			left: offset.left + 'px', top: offset.top + 'px'});
+-		if (!inst.inline) {
+-			var showAnim = $.datepicker._get(inst, 'showAnim');
+-			var duration = $.datepicker._get(inst, 'duration');
+-			var postProcess = function() {
+-				var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
+-				if( !! cover.length ){
+-					var borders = $.datepicker._getBorders(inst.dpDiv);
+-					cover.css({left: -borders[0], top: -borders[1],
+-						width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});
+-				}
+-			};
+-			inst.dpDiv.zIndex($(input).zIndex()+1);
+-			$.datepicker._datepickerShowing = true;
+-			if ($.effects && $.effects[showAnim])
+-				inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
+-			else
+-				inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);
+-			if (!showAnim || !duration)
+-				postProcess();
+-			if (inst.input.is(':visible') && !inst.input.is(':disabled'))
+-				inst.input.focus();
+-			$.datepicker._curInst = inst;
+-		}
+-	},
+-
+-	/* Generate the date picker content. */
+-	_updateDatepicker: function(inst) {
+-		var self = this;
+-		self.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+-		var borders = $.datepicker._getBorders(inst.dpDiv);
+-		instActive = inst; // for delegate hover events
+-		inst.dpDiv.empty().append(this._generateHTML(inst));
+-		var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
+-		if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
+-			cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
+-		}
+-		inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover();
+-		var numMonths = this._getNumberOfMonths(inst);
+-		var cols = numMonths[1];
+-		var width = 17;
+-		inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
+-		if (cols > 1)
+-			inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
+-		inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
+-			'Class']('ui-datepicker-multi');
+-		inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
+-			'Class']('ui-datepicker-rtl');
+-		if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
+-				// #6694 - don't focus the input if it's already focused
+-				// this breaks the change event in IE
+-				inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)
+-			inst.input.focus();
+-		// deffered render of the years select (to avoid flashes on Firefox) 
+-		if( inst.yearshtml ){
+-			var origyearshtml = inst.yearshtml;
+-			setTimeout(function(){
+-				//assure that inst.yearshtml didn't change.
+-				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+-					inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
+-				}
+-				origyearshtml = inst.yearshtml = null;
+-			}, 0);
+-		}
+-	},
+-
+-	/* Retrieve the size of left and top borders for an element.
+-	   @param  elem  (jQuery object) the element of interest
+-	   @return  (number[2]) the left and top borders */
+-	_getBorders: function(elem) {
+-		var convert = function(value) {
+-			return {thin: 1, medium: 2, thick: 3}[value] || value;
+-		};
+-		return [parseFloat(convert(elem.css('border-left-width'))),
+-			parseFloat(convert(elem.css('border-top-width')))];
+-	},
+-
+-	/* Check positioning to remain on screen. */
+-	_checkOffset: function(inst, offset, isFixed) {
+-		var dpWidth = inst.dpDiv.outerWidth();
+-		var dpHeight = inst.dpDiv.outerHeight();
+-		var inputWidth = inst.input ? inst.input.outerWidth() : 0;
+-		var inputHeight = inst.input ? inst.input.outerHeight() : 0;
+-		var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft();
+-		var viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
+-
+-		offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
+-		offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
+-		offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+-
+-		// now check if datepicker is showing outside window viewport - move to a better place if so.
+-		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+-			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+-		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+-			Math.abs(dpHeight + inputHeight) : 0);
+-
+-		return offset;
+-	},
+-
+-	/* Find an object's position on the screen. */
+-	_findPos: function(obj) {
+-		var inst = this._getInst(obj);
+-		var isRTL = this._get(inst, 'isRTL');
+-        while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {
+-            obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
+-        }
+-        var position = $(obj).offset();
+-	    return [position.left, position.top];
+-	},
+-
+-	/* Trigger custom callback of onClose. */
+-	_triggerOnClose: function(inst) {
+-		var onClose = this._get(inst, 'onClose');
+-		if (onClose)
+-			onClose.apply((inst.input ? inst.input[0] : null),
+-						  [(inst.input ? inst.input.val() : ''), inst]);
+-	},
+-
+-	/* Hide the date picker from view.
+-	   @param  input  element - the input field attached to the date picker */
+-	_hideDatepicker: function(input) {
+-		var inst = this._curInst;
+-		if (!inst || (input && inst != $.data(input, PROP_NAME)))
+-			return;
+-		if (this._datepickerShowing) {
+-			var showAnim = this._get(inst, 'showAnim');
+-			var duration = this._get(inst, 'duration');
+-			var postProcess = function() {
+-				$.datepicker._tidyDialog(inst);
+-				this._curInst = null;
+-			};
+-			if ($.effects && $.effects[showAnim])
+-				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
+-			else
+-				inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
+-					(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);
+-			if (!showAnim)
+-				postProcess();
+-			$.datepicker._triggerOnClose(inst);
+-			this._datepickerShowing = false;
+-			this._lastInput = null;
+-			if (this._inDialog) {
+-				this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
+-				if ($.blockUI) {
+-					$.unblockUI();
+-					$('body').append(this.dpDiv);
+-				}
+-			}
+-			this._inDialog = false;
+-		}
+-	},
+-
+-	/* Tidy up after a dialog display. */
+-	_tidyDialog: function(inst) {
+-		inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
+-	},
+-
+-	/* Close date picker if clicked elsewhere. */
+-	_checkExternalClick: function(event) {
+-		if (!$.datepicker._curInst)
+-			return;
+-		var $target = $(event.target);
+-		if ($target[0].id != $.datepicker._mainDivId &&
+-				$target.parents('#' + $.datepicker._mainDivId).length == 0 &&
+-				!$target.hasClass($.datepicker.markerClassName) &&
+-				!$target.hasClass($.datepicker._triggerClass) &&
+-				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
+-			$.datepicker._hideDatepicker();
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustDate: function(id, offset, period) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		if (this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		this._adjustInstDate(inst, offset +
+-			(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
+-			period);
+-		this._updateDatepicker(inst);
+-	},
+-
+-	/* Action for current link. */
+-	_gotoToday: function(id) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
+-			inst.selectedDay = inst.currentDay;
+-			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+-			inst.drawYear = inst.selectedYear = inst.currentYear;
+-		}
+-		else {
+-			var date = new Date();
+-			inst.selectedDay = date.getDate();
+-			inst.drawMonth = inst.selectedMonth = date.getMonth();
+-			inst.drawYear = inst.selectedYear = date.getFullYear();
+-		}
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a new month/year. */
+-	_selectMonthYear: function(id, select, period) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
+-		inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
+-			parseInt(select.options[select.selectedIndex].value,10);
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a day. */
+-	_selectDay: function(id, month, year, td) {
+-		var target = $(id);
+-		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		var inst = this._getInst(target[0]);
+-		inst.selectedDay = inst.currentDay = $('a', td).html();
+-		inst.selectedMonth = inst.currentMonth = month;
+-		inst.selectedYear = inst.currentYear = year;
+-		this._selectDate(id, this._formatDate(inst,
+-			inst.currentDay, inst.currentMonth, inst.currentYear));
+-	},
+-
+-	/* Erase the input field and hide the date picker. */
+-	_clearDate: function(id) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		this._selectDate(target, '');
+-	},
+-
+-	/* Update the input field with the selected date. */
+-	_selectDate: function(id, dateStr) {
+-		var target = $(id);
+-		var inst = this._getInst(target[0]);
+-		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+-		if (inst.input)
+-			inst.input.val(dateStr);
+-		this._updateAlternate(inst);
+-		var onSelect = this._get(inst, 'onSelect');
+-		if (onSelect)
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+-		else if (inst.input)
+-			inst.input.trigger('change'); // fire the change event
+-		if (inst.inline)
+-			this._updateDatepicker(inst);
+-		else {
+-			this._hideDatepicker();
+-			this._lastInput = inst.input[0];
+-			inst.input.focus(); // restore focus
+-			this._lastInput = null;
+-		}
+-	},
+-
+-	/* Update any alternate field to synchronise with the main field. */
+-	_updateAlternate: function(inst) {
+-		var altField = this._get(inst, 'altField');
+-		if (altField) { // update alternate field too
+-			var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
+-			var date = this._getDate(inst);
+-			var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+-			$(altField).each(function() { $(this).val(dateStr); });
+-		}
+-	},
+-
+-	/* Set as beforeShowDay function to prevent selection of weekends.
+-	   @param  date  Date - the date to customise
+-	   @return [boolean, string] - is this date selectable?, what is its CSS class? */
+-	noWeekends: function(date) {
+-		var day = date.getDay();
+-		return [(day > 0 && day < 6), ''];
+-	},
+-
+-	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+-	   @param  date  Date - the date to get the week for
+-	   @return  number - the number of the week within the year that contains this date */
+-	iso8601Week: function(date) {
+-		var checkDate = new Date(date.getTime());
+-		// Find Thursday of this week starting on Monday
+-		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+-		var time = checkDate.getTime();
+-		checkDate.setMonth(0); // Compare with Jan 1
+-		checkDate.setDate(1);
+-		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+-	},
+-
+-	/* Parse a string value into a date object.
+-	   See formatDate below for the possible formats.
+-
+-	   @param  format    string - the expected format of the date
+-	   @param  value     string - the date in the above format
+-	   @param  settings  Object - attributes include:
+-	                     shortYearCutoff  number - the cutoff year for determining the century (optional)
+-	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
+-	                     dayNames         string[7] - names of the days from Sunday (optional)
+-	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
+-	                     monthNames       string[12] - names of the months (optional)
+-	   @return  Date - the extracted date value or null if value is blank */
+-	parseDate: function (format, value, settings) {
+-		if (format == null || value == null)
+-			throw 'Invalid arguments';
+-		value = (typeof value == 'object' ? value.toString() : value + '');
+-		if (value == '')
+-			return null;
+-		var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
+-		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
+-				new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+-		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+-		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+-		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+-		var year = -1;
+-		var month = -1;
+-		var day = -1;
+-		var doy = -1;
+-		var literal = false;
+-		// Check whether a format character is doubled
+-		var lookAhead = function(match) {
+-			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+-			if (matches)
+-				iFormat++;
+-			return matches;
+-		};
+-		// Extract a number from the string value
+-		var getNumber = function(match) {
+-			var isDoubled = lookAhead(match);
+-			var size = (match == '@' ? 14 : (match == '!' ? 20 :
+-				(match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2))));
+-			var digits = new RegExp('^\\d{1,' + size + '}');
+-			var num = value.substring(iValue).match(digits);
+-			if (!num)
+-				throw 'Missing number at position ' + iValue;
+-			iValue += num[0].length;
+-			return parseInt(num[0], 10);
+-		};
+-		// Extract a name from the string value and convert to an index
+-		var getName = function(match, shortNames, longNames) {
+-			var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+-				return [ [k, v] ];
+-			}).sort(function (a, b) {
+-				return -(a[1].length - b[1].length);
+-			});
+-			var index = -1;
+-			$.each(names, function (i, pair) {
+-				var name = pair[1];
+-				if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {
+-					index = pair[0];
+-					iValue += name.length;
+-					return false;
+-				}
+-			});
+-			if (index != -1)
+-				return index + 1;
+-			else
+-				throw 'Unknown name at position ' + iValue;
+-		};
+-		// Confirm that a literal character matches the string value
+-		var checkLiteral = function() {
+-			if (value.charAt(iValue) != format.charAt(iFormat))
+-				throw 'Unexpected literal at position ' + iValue;
+-			iValue++;
+-		};
+-		var iValue = 0;
+-		for (var iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal)
+-				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+-					literal = false;
+-				else
+-					checkLiteral();
+-			else
+-				switch (format.charAt(iFormat)) {
+-					case 'd':
+-						day = getNumber('d');
+-						break;
+-					case 'D':
+-						getName('D', dayNamesShort, dayNames);
+-						break;
+-					case 'o':
+-						doy = getNumber('o');
+-						break;
+-					case 'm':
+-						month = getNumber('m');
+-						break;
+-					case 'M':
+-						month = getName('M', monthNamesShort, monthNames);
+-						break;
+-					case 'y':
+-						year = getNumber('y');
+-						break;
+-					case '@':
+-						var date = new Date(getNumber('@'));
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case '!':
+-						var date = new Date((getNumber('!') - this._ticksTo1970) / 10000);
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "'":
+-						if (lookAhead("'"))
+-							checkLiteral();
+-						else
+-							literal = true;
+-						break;
+-					default:
+-						checkLiteral();
+-				}
+-		}
+-		if (iValue < value.length){
+-			throw "Extra/unparsed characters found in date: " + value.substring(iValue);
+-		}
+-		if (year == -1)
+-			year = new Date().getFullYear();
+-		else if (year < 100)
+-			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+-				(year <= shortYearCutoff ? 0 : -100);
+-		if (doy > -1) {
+-			month = 1;
+-			day = doy;
+-			do {
+-				var dim = this._getDaysInMonth(year, month - 1);
+-				if (day <= dim)
+-					break;
+-				month++;
+-				day -= dim;
+-			} while (true);
+-		}
+-		var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+-		if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
+-			throw 'Invalid date'; // E.g. 31/02/00
+-		return date;
+-	},
+-
+-	/* Standard date formats. */
+-	ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
+-	COOKIE: 'D, dd M yy',
+-	ISO_8601: 'yy-mm-dd',
+-	RFC_822: 'D, d M y',
+-	RFC_850: 'DD, dd-M-y',
+-	RFC_1036: 'D, d M y',
+-	RFC_1123: 'D, d M yy',
+-	RFC_2822: 'D, d M yy',
+-	RSS: 'D, d M y', // RFC 822
+-	TICKS: '!',
+-	TIMESTAMP: '@',
+-	W3C: 'yy-mm-dd', // ISO 8601
+-
+-	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+-		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+-
+-	/* Format a date object into a string value.
+-	   The format can be combinations of the following:
+-	   d  - day of month (no leading zero)
+-	   dd - day of month (two digit)
+-	   o  - day of year (no leading zeros)
+-	   oo - day of year (three digit)
+-	   D  - day name short
+-	   DD - day name long
+-	   m  - month of year (no leading zero)
+-	   mm - month of year (two digit)
+-	   M  - month name short
+-	   MM - month name long
+-	   y  - year (two digit)
+-	   yy - year (four digit)
+-	   @ - Unix timestamp (ms since 01/01/1970)
+-	   ! - Windows ticks (100ns since 01/01/0001)
+-	   '...' - literal text
+-	   '' - single quote
+-
+-	   @param  format    string - the desired format of the date
+-	   @param  date      Date - the date value to format
+-	   @param  settings  Object - attributes include:
+-	                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)
+-	                     dayNames         string[7] - names of the days from Sunday (optional)
+-	                     monthNamesShort  string[12] - abbreviated names of the months (optional)
+-	                     monthNames       string[12] - names of the months (optional)
+-	   @return  string - the date in the above format */
+-	formatDate: function (format, date, settings) {
+-		if (!date)
+-			return '';
+-		var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
+-		var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
+-		var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
+-		var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
+-		// Check whether a format character is doubled
+-		var lookAhead = function(match) {
+-			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+-			if (matches)
+-				iFormat++;
+-			return matches;
+-		};
+-		// Format a number, with leading zero if necessary
+-		var formatNumber = function(match, value, len) {
+-			var num = '' + value;
+-			if (lookAhead(match))
+-				while (num.length < len)
+-					num = '0' + num;
+-			return num;
+-		};
+-		// Format a name, short or long as requested
+-		var formatName = function(match, value, shortNames, longNames) {
+-			return (lookAhead(match) ? longNames[value] : shortNames[value]);
+-		};
+-		var output = '';
+-		var literal = false;
+-		if (date)
+-			for (var iFormat = 0; iFormat < format.length; iFormat++) {
+-				if (literal)
+-					if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+-						literal = false;
+-					else
+-						output += format.charAt(iFormat);
+-				else
+-					switch (format.charAt(iFormat)) {
+-						case 'd':
+-							output += formatNumber('d', date.getDate(), 2);
+-							break;
+-						case 'D':
+-							output += formatName('D', date.getDay(), dayNamesShort, dayNames);
+-							break;
+-						case 'o':
+-							output += formatNumber('o',
+-								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+-							break;
+-						case 'm':
+-							output += formatNumber('m', date.getMonth() + 1, 2);
+-							break;
+-						case 'M':
+-							output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
+-							break;
+-						case 'y':
+-							output += (lookAhead('y') ? date.getFullYear() :
+-								(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
+-							break;
+-						case '@':
+-							output += date.getTime();
+-							break;
+-						case '!':
+-							output += date.getTime() * 10000 + this._ticksTo1970;
+-							break;
+-						case "'":
+-							if (lookAhead("'"))
+-								output += "'";
+-							else
+-								literal = true;
+-							break;
+-						default:
+-							output += format.charAt(iFormat);
+-					}
+-			}
+-		return output;
+-	},
+-
+-	/* Extract all possible characters from the date format. */
+-	_possibleChars: function (format) {
+-		var chars = '';
+-		var literal = false;
+-		// Check whether a format character is doubled
+-		var lookAhead = function(match) {
+-			var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
+-			if (matches)
+-				iFormat++;
+-			return matches;
+-		};
+-		for (var iFormat = 0; iFormat < format.length; iFormat++)
+-			if (literal)
+-				if (format.charAt(iFormat) == "'" && !lookAhead("'"))
+-					literal = false;
+-				else
+-					chars += format.charAt(iFormat);
+-			else
+-				switch (format.charAt(iFormat)) {
+-					case 'd': case 'm': case 'y': case '@':
+-						chars += '0123456789';
+-						break;
+-					case 'D': case 'M':
+-						return null; // Accept anything
+-					case "'":
+-						if (lookAhead("'"))
+-							chars += "'";
+-						else
+-							literal = true;
+-						break;
+-					default:
+-						chars += format.charAt(iFormat);
+-				}
+-		return chars;
+-	},
+-
+-	/* Get a setting value, defaulting if necessary. */
+-	_get: function(inst, name) {
+-		return inst.settings[name] !== undefined ?
+-			inst.settings[name] : this._defaults[name];
+-	},
+-
+-	/* Parse existing date and initialise date picker. */
+-	_setDateFromField: function(inst, noDefault) {
+-		if (inst.input.val() == inst.lastVal) {
+-			return;
+-		}
+-		var dateFormat = this._get(inst, 'dateFormat');
+-		var dates = inst.lastVal = inst.input ? inst.input.val() : null;
+-		var date, defaultDate;
+-		date = defaultDate = this._getDefaultDate(inst);
+-		var settings = this._getFormatConfig(inst);
+-		try {
+-			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+-		} catch (event) {
+-			this.log(event);
+-			dates = (noDefault ? '' : dates);
+-		}
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		inst.currentDay = (dates ? date.getDate() : 0);
+-		inst.currentMonth = (dates ? date.getMonth() : 0);
+-		inst.currentYear = (dates ? date.getFullYear() : 0);
+-		this._adjustInstDate(inst);
+-	},
+-
+-	/* Retrieve the default date shown on opening. */
+-	_getDefaultDate: function(inst) {
+-		return this._restrictMinMax(inst,
+-			this._determineDate(inst, this._get(inst, 'defaultDate'), new Date()));
+-	},
+-
+-	/* A date may be specified as an exact value or a relative one. */
+-	_determineDate: function(inst, date, defaultDate) {
+-		var offsetNumeric = function(offset) {
+-			var date = new Date();
+-			date.setDate(date.getDate() + offset);
+-			return date;
+-		};
+-		var offsetString = function(offset) {
+-			try {
+-				return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
+-					offset, $.datepicker._getFormatConfig(inst));
+-			}
+-			catch (e) {
+-				// Ignore
+-			}
+-			var date = (offset.toLowerCase().match(/^c/) ?
+-				$.datepicker._getDate(inst) : null) || new Date();
+-			var year = date.getFullYear();
+-			var month = date.getMonth();
+-			var day = date.getDate();
+-			var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
+-			var matches = pattern.exec(offset);
+-			while (matches) {
+-				switch (matches[2] || 'd') {
+-					case 'd' : case 'D' :
+-						day += parseInt(matches[1],10); break;
+-					case 'w' : case 'W' :
+-						day += parseInt(matches[1],10) * 7; break;
+-					case 'm' : case 'M' :
+-						month += parseInt(matches[1],10);
+-						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-						break;
+-					case 'y': case 'Y' :
+-						year += parseInt(matches[1],10);
+-						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-						break;
+-				}
+-				matches = pattern.exec(offset);
+-			}
+-			return new Date(year, month, day);
+-		};
+-		var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) :
+-			(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+-		newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
+-		if (newDate) {
+-			newDate.setHours(0);
+-			newDate.setMinutes(0);
+-			newDate.setSeconds(0);
+-			newDate.setMilliseconds(0);
+-		}
+-		return this._daylightSavingAdjust(newDate);
+-	},
+-
+-	/* Handle switch to/from daylight saving.
+-	   Hours may be non-zero on daylight saving cut-over:
+-	   > 12 when midnight changeover, but then cannot generate
+-	   midnight datetime, so jump to 1AM, otherwise reset.
+-	   @param  date  (Date) the date to check
+-	   @return  (Date) the corrected date */
+-	_daylightSavingAdjust: function(date) {
+-		if (!date) return null;
+-		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+-		return date;
+-	},
+-
+-	/* Set the date(s) directly. */
+-	_setDate: function(inst, date, noChange) {
+-		var clear = !date;
+-		var origMonth = inst.selectedMonth;
+-		var origYear = inst.selectedYear;
+-		var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+-		inst.selectedDay = inst.currentDay = newDate.getDate();
+-		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+-		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+-		if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
+-			this._notifyChange(inst);
+-		this._adjustInstDate(inst);
+-		if (inst.input) {
+-			inst.input.val(clear ? '' : this._formatDate(inst));
+-		}
+-
+-		var onSelect = this._get(inst, 'onSelect');
+-		if (onSelect) {
+-			var dateStr = this._formatDate(inst);
+-
+-			// trigger custom callback
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-		}
+-	},
+-
+-	/* Retrieve the date(s) directly. */
+-	_getDate: function(inst) {
+-		var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
+-			this._daylightSavingAdjust(new Date(
+-			inst.currentYear, inst.currentMonth, inst.currentDay)));
+-			return startDate;
+-	},
+-
+-	/* Generate the HTML for the current state of the date picker. */
+-	_generateHTML: function(inst) {
+-		var today = new Date();
+-		today = this._daylightSavingAdjust(
+-			new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
+-		var isRTL = this._get(inst, 'isRTL');
+-		var showButtonPanel = this._get(inst, 'showButtonPanel');
+-		var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
+-		var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
+-		var numMonths = this._getNumberOfMonths(inst);
+-		var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
+-		var stepMonths = this._get(inst, 'stepMonths');
+-		var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
+-		var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+-			new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		var minDate = this._getMinMaxDate(inst, 'min');
+-		var maxDate = this._getMinMaxDate(inst, 'max');
+-		var drawMonth = inst.drawMonth - showCurrentAtPos;
+-		var drawYear = inst.drawYear;
+-		if (drawMonth < 0) {
+-			drawMonth += 12;
+-			drawYear--;
+-		}
+-		if (maxDate) {
+-			var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+-				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+-			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+-			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+-				drawMonth--;
+-				if (drawMonth < 0) {
+-					drawMonth = 11;
+-					drawYear--;
+-				}
+-			}
+-		}
+-		inst.drawMonth = drawMonth;
+-		inst.drawYear = drawYear;
+-		var prevText = this._get(inst, 'prevText');
+-		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-		var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+-			'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+-			'.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
+-			' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
+-			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
+-		var nextText = this._get(inst, 'nextText');
+-		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-		var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+-			'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+-			'.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
+-			' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
+-			(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
+-		var currentText = this._get(inst, 'currentText');
+-		var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
+-		currentText = (!navigationAsDateFormat ? currentText :
+-			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+-		var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+-			'.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
+-		var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
+-			(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
+-			'.datepicker._gotoToday(\'#' + inst.id + '\');"' +
+-			'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
+-		var firstDay = parseInt(this._get(inst, 'firstDay'),10);
+-		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+-		var showWeek = this._get(inst, 'showWeek');
+-		var dayNames = this._get(inst, 'dayNames');
+-		var dayNamesShort = this._get(inst, 'dayNamesShort');
+-		var dayNamesMin = this._get(inst, 'dayNamesMin');
+-		var monthNames = this._get(inst, 'monthNames');
+-		var monthNamesShort = this._get(inst, 'monthNamesShort');
+-		var beforeShowDay = this._get(inst, 'beforeShowDay');
+-		var showOtherMonths = this._get(inst, 'showOtherMonths');
+-		var selectOtherMonths = this._get(inst, 'selectOtherMonths');
+-		var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
+-		var defaultDate = this._getDefaultDate(inst);
+-		var html = '';
+-		for (var row = 0; row < numMonths[0]; row++) {
+-			var group = '';
+-			this.maxRows = 4;
+-			for (var col = 0; col < numMonths[1]; col++) {
+-				var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+-				var cornerClass = ' ui-corner-all';
+-				var calender = '';
+-				if (isMultiMonth) {
+-					calender += '<div class="ui-datepicker-group';
+-					if (numMonths[1] > 1)
+-						switch (col) {
+-							case 0: calender += ' ui-datepicker-group-first';
+-								cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
+-							case numMonths[1]-1: calender += ' ui-datepicker-group-last';
+-								cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
+-							default: calender += ' ui-datepicker-group-middle'; cornerClass = ''; break;
+-						}
+-					calender += '">';
+-				}
+-				calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
+-					(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
+-					(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
+-					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+-					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+-					'</div><table class="ui-datepicker-calendar"><thead>' +
+-					'<tr>';
+-				var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : '');
+-				for (var dow = 0; dow < 7; dow++) { // days of the week
+-					var day = (dow + firstDay) % 7;
+-					thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
+-						'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
+-				}
+-				calender += thead + '</tr></thead><tbody>';
+-				var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+-				if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
+-					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+-				var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+-				var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+-				var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+-				this.maxRows = numRows;
+-				var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+-				for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+-					calender += '<tr>';
+-					var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' +
+-						this._get(inst, 'calculateWeek')(printDate) + '</td>');
+-					for (var dow = 0; dow < 7; dow++) { // create date picker days
+-						var daySettings = (beforeShowDay ?
+-							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
+-						var otherMonth = (printDate.getMonth() != drawMonth);
+-						var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+-							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+-						tbody += '<td class="' +
+-							((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
+-							(otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
+-							((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
+-							(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
+-							// or defaultDate is current printedDate and defaultDate is selectedDate
+-							' ' + this._dayOverClass : '') + // highlight selected day
+-							(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') +  // highlight unselectable days
+-							(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
+-							(printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day
+-							(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
+-							((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
+-							(unselectable ? '' : ' onclick="DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' +
+-							inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);return false;"') + '>' + // actions
+-							(otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months
+-							(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
+-							(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
+-							(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day
+-							(otherMonth ? ' ui-priority-secondary' : '') + // distinguish dates from other months
+-							'" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display selectable date
+-						printDate.setDate(printDate.getDate() + 1);
+-						printDate = this._daylightSavingAdjust(printDate);
+-					}
+-					calender += tbody + '</tr>';
+-				}
+-				drawMonth++;
+-				if (drawMonth > 11) {
+-					drawMonth = 0;
+-					drawYear++;
+-				}
+-				calender += '</tbody></table>' + (isMultiMonth ? '</div>' + 
+-							((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
+-				group += calender;
+-			}
+-			html += group;
+-		}
+-		html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
+-			'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
+-		inst._keyEvent = false;
+-		return html;
+-	},
+-
+-	/* Generate the month and year header. */
+-	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+-			secondary, monthNames, monthNamesShort) {
+-		var changeMonth = this._get(inst, 'changeMonth');
+-		var changeYear = this._get(inst, 'changeYear');
+-		var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
+-		var html = '<div class="ui-datepicker-title">';
+-		var monthHtml = '';
+-		// month selection
+-		if (secondary || !changeMonth)
+-			monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>';
+-		else {
+-			var inMinYear = (minDate && minDate.getFullYear() == drawYear);
+-			var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
+-			monthHtml += '<select class="ui-datepicker-month" ' +
+-				'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
+-			 	'>';
+-			for (var month = 0; month < 12; month++) {
+-				if ((!inMinYear || month >= minDate.getMonth()) &&
+-						(!inMaxYear || month <= maxDate.getMonth()))
+-					monthHtml += '<option value="' + month + '"' +
+-						(month == drawMonth ? ' selected="selected"' : '') +
+-						'>' + monthNamesShort[month] + '</option>';
+-			}
+-			monthHtml += '</select>';
+-		}
+-		if (!showMonthAfterYear)
+-			html += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');
+-		// year selection
+-		if ( !inst.yearshtml ) {
+-			inst.yearshtml = '';
+-			if (secondary || !changeYear)
+-				html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
+-			else {
+-				// determine range of years to display
+-				var years = this._get(inst, 'yearRange').split(':');
+-				var thisYear = new Date().getFullYear();
+-				var determineYear = function(value) {
+-					var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+-						(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
+-						parseInt(value, 10)));
+-					return (isNaN(year) ? thisYear : year);
+-				};
+-				var year = determineYear(years[0]);
+-				var endYear = Math.max(year, determineYear(years[1] || ''));
+-				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+-				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+-				inst.yearshtml += '<select class="ui-datepicker-year" ' +
+-					'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
+-					'>';
+-				for (; year <= endYear; year++) {
+-					inst.yearshtml += '<option value="' + year + '"' +
+-						(year == drawYear ? ' selected="selected"' : '') +
+-						'>' + year + '</option>';
+-				}
+-				inst.yearshtml += '</select>';
+-				
+-				html += inst.yearshtml;
+-				inst.yearshtml = null;
+-			}
+-		}
+-		html += this._get(inst, 'yearSuffix');
+-		if (showMonthAfterYear)
+-			html += (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '') + monthHtml;
+-		html += '</div>'; // Close datepicker_header
+-		return html;
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustInstDate: function(inst, offset, period) {
+-		var year = inst.drawYear + (period == 'Y' ? offset : 0);
+-		var month = inst.drawMonth + (period == 'M' ? offset : 0);
+-		var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
+-			(period == 'D' ? offset : 0);
+-		var date = this._restrictMinMax(inst,
+-			this._daylightSavingAdjust(new Date(year, month, day)));
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		if (period == 'M' || period == 'Y')
+-			this._notifyChange(inst);
+-	},
+-
+-	/* Ensure a date is within any min/max bounds. */
+-	_restrictMinMax: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, 'min');
+-		var maxDate = this._getMinMaxDate(inst, 'max');
+-		var newDate = (minDate && date < minDate ? minDate : date);
+-		newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
+-		return newDate;
+-	},
+-
+-	/* Notify change of month/year. */
+-	_notifyChange: function(inst) {
+-		var onChange = this._get(inst, 'onChangeMonthYear');
+-		if (onChange)
+-			onChange.apply((inst.input ? inst.input[0] : null),
+-				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+-	},
+-
+-	/* Determine the number of months to show. */
+-	_getNumberOfMonths: function(inst) {
+-		var numMonths = this._get(inst, 'numberOfMonths');
+-		return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
+-	},
+-
+-	/* Determine the current maximum date - ensure no time components are set. */
+-	_getMinMaxDate: function(inst, minMax) {
+-		return this._determineDate(inst, this._get(inst, minMax + 'Date'), null);
+-	},
+-
+-	/* Find the number of days in a given month. */
+-	_getDaysInMonth: function(year, month) {
+-		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+-	},
+-
+-	/* Find the day of the week of the first of a month. */
+-	_getFirstDayOfMonth: function(year, month) {
+-		return new Date(year, month, 1).getDay();
+-	},
+-
+-	/* Determines if we should allow a "next/prev" month display change. */
+-	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+-		var numMonths = this._getNumberOfMonths(inst);
+-		var date = this._daylightSavingAdjust(new Date(curYear,
+-			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+-		if (offset < 0)
+-			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+-		return this._isInRange(inst, date);
+-	},
+-
+-	/* Is the given date in the accepted range? */
+-	_isInRange: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, 'min');
+-		var maxDate = this._getMinMaxDate(inst, 'max');
+-		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+-			(!maxDate || date.getTime() <= maxDate.getTime()));
+-	},
+-
+-	/* Provide the configuration settings for formatting/parsing. */
+-	_getFormatConfig: function(inst) {
+-		var shortYearCutoff = this._get(inst, 'shortYearCutoff');
+-		shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
+-			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		return {shortYearCutoff: shortYearCutoff,
+-			dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
+-			monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
+-	},
+-
+-	/* Format the given date for display. */
+-	_formatDate: function(inst, day, month, year) {
+-		if (!day) {
+-			inst.currentDay = inst.selectedDay;
+-			inst.currentMonth = inst.selectedMonth;
+-			inst.currentYear = inst.selectedYear;
+-		}
+-		var date = (day ? (typeof day == 'object' ? day :
+-			this._daylightSavingAdjust(new Date(year, month, day))) :
+-			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
+-	}
+-});
+-
+-/*
+- * Bind hover events for datepicker elements.
+- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+- */ 
+-function bindHover(dpDiv) {
+-	var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';
+-	return dpDiv.bind('mouseout', function(event) {
+-			var elem = $( event.target ).closest( selector );
+-			if ( !elem.length ) {
+-				return;
+-			}
+-			elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" );
+-		})
+-		.bind('mouseover', function(event) {
+-			var elem = $( event.target ).closest( selector );
+-			if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) ||
+-					!elem.length ) {
+-				return;
+-			}
+-			elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
+-			elem.addClass('ui-state-hover');
+-			if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover');
+-			if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover');
+-		});
+-}
+-
+-/* jQuery extend now ignores nulls! */
+-function extendRemove(target, props) {
+-	$.extend(target, props);
+-	for (var name in props)
+-		if (props[name] == null || props[name] == undefined)
+-			target[name] = props[name];
+-	return target;
+-};
+-
+-/* Determine whether an object is an array. */
+-function isArray(a) {
+-	return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
+-		(a.constructor && a.constructor.toString().match(/\Array\(\)/))));
+-};
+-
+-/* Invoke the datepicker functionality.
+-   @param  options  string - a command, optionally followed by additional parameters or
+-                    Object - settings for attaching new datepicker functionality
+-   @return  jQuery object */
+-$.fn.datepicker = function(options){
+-	
+-	/* Verify an empty collection wasn't passed - Fixes #6976 */
+-	if ( !this.length ) {
+-		return this;
+-	}
+-	
+-	/* Initialise the date picker. */
+-	if (!$.datepicker.initialized) {
+-		$(document).mousedown($.datepicker._checkExternalClick).
+-			find('body').append($.datepicker.dpDiv);
+-		$.datepicker.initialized = true;
+-	}
+-
+-	var otherArgs = Array.prototype.slice.call(arguments, 1);
+-	if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget'))
+-		return $.datepicker['_' + options + 'Datepicker'].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
+-		return $.datepicker['_' + options + 'Datepicker'].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	return this.each(function() {
+-		typeof options == 'string' ?
+-			$.datepicker['_' + options + 'Datepicker'].
+-				apply($.datepicker, [this].concat(otherArgs)) :
+-			$.datepicker._attachDatepicker(this, options);
+-	});
+-};
+-
+-$.datepicker = new Datepicker(); // singleton instance
+-$.datepicker.initialized = false;
+-$.datepicker.uuid = new Date().getTime();
+-$.datepicker.version = "1.8.15";
+-
+-// Workaround for #4055
+-// Add another global to avoid noConflict issues with inline event handlers
+-window['DP_jQuery_' + dpuuid] = $;
+-
+-})(jQuery);
+-/*
+- * jQuery UI Dialog 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Dialog
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *  jquery.ui.button.js
+- *	jquery.ui.draggable.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.position.js
+- *	jquery.ui.resizable.js
+- */
+-(function( $, undefined ) {
+-
+-var uiDialogClasses =
+-		'ui-dialog ' +
+-		'ui-widget ' +
+-		'ui-widget-content ' +
+-		'ui-corner-all ',
+-	sizeRelatedOptions = {
+-		buttons: true,
+-		height: true,
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true,
+-		width: true
+-	},
+-	resizableRelatedOptions = {
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true
+-	},
+-	// support for jQuery 1.3.2 - handle common attrFn methods for dialog
+-	attrFn = $.attrFn || {
+-		val: true,
+-		css: true,
+-		html: true,
+-		text: true,
+-		data: true,
+-		width: true,
+-		height: true,
+-		offset: true,
+-		click: true
+-	};
+-
+-$.widget("ui.dialog", {
+-	options: {
+-		autoOpen: true,
+-		buttons: {},
+-		closeOnEscape: true,
+-		closeText: 'close',
+-		dialogClass: '',
+-		draggable: true,
+-		hide: null,
+-		height: 'auto',
+-		maxHeight: false,
+-		maxWidth: false,
+-		minHeight: 150,
+-		minWidth: 150,
+-		modal: false,
+-		position: {
+-			my: 'center',
+-			at: 'center',
+-			collision: 'fit',
+-			// ensure that the titlebar is never outside the document
+-			using: function(pos) {
+-				var topOffset = $(this).css(pos).offset().top;
+-				if (topOffset < 0) {
+-					$(this).css('top', pos.top - topOffset);
+-				}
+-			}
+-		},
+-		resizable: true,
+-		show: null,
+-		stack: true,
+-		title: '',
+-		width: 300,
+-		zIndex: 1000
+-	},
+-
+-	_create: function() {
+-		this.originalTitle = this.element.attr('title');
+-		// #5742 - .attr() might return a DOMElement
+-		if ( typeof this.originalTitle !== "string" ) {
+-			this.originalTitle = "";
+-		}
+-
+-		this.options.title = this.options.title || this.originalTitle;
+-		var self = this,
+-			options = self.options,
+-
+-			title = options.title || '&#160;',
+-			titleId = $.ui.dialog.getTitleId(self.element),
+-
+-			uiDialog = (self.uiDialog = $('<div></div>'))
+-				.appendTo(document.body)
+-				.hide()
+-				.addClass(uiDialogClasses + options.dialogClass)
+-				.css({
+-					zIndex: options.zIndex
+-				})
+-				// setting tabIndex makes the div focusable
+-				// setting outline to 0 prevents a border on focus in Mozilla
+-				.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
+-					if (options.closeOnEscape && event.keyCode &&
+-						event.keyCode === $.ui.keyCode.ESCAPE) {
+-						
+-						self.close(event);
+-						event.preventDefault();
+-					}
+-				})
+-				.attr({
+-					role: 'dialog',
+-					'aria-labelledby': titleId
+-				})
+-				.mousedown(function(event) {
+-					self.moveToTop(false, event);
+-				}),
+-
+-			uiDialogContent = self.element
+-				.show()
+-				.removeAttr('title')
+-				.addClass(
+-					'ui-dialog-content ' +
+-					'ui-widget-content')
+-				.appendTo(uiDialog),
+-
+-			uiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>'))
+-				.addClass(
+-					'ui-dialog-titlebar ' +
+-					'ui-widget-header ' +
+-					'ui-corner-all ' +
+-					'ui-helper-clearfix'
+-				)
+-				.prependTo(uiDialog),
+-
+-			uiDialogTitlebarClose = $('<a href="#"></a>')
+-				.addClass(
+-					'ui-dialog-titlebar-close ' +
+-					'ui-corner-all'
+-				)
+-				.attr('role', 'button')
+-				.hover(
+-					function() {
+-						uiDialogTitlebarClose.addClass('ui-state-hover');
+-					},
+-					function() {
+-						uiDialogTitlebarClose.removeClass('ui-state-hover');
+-					}
+-				)
+-				.focus(function() {
+-					uiDialogTitlebarClose.addClass('ui-state-focus');
+-				})
+-				.blur(function() {
+-					uiDialogTitlebarClose.removeClass('ui-state-focus');
+-				})
+-				.click(function(event) {
+-					self.close(event);
+-					return false;
+-				})
+-				.appendTo(uiDialogTitlebar),
+-
+-			uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>'))
+-				.addClass(
+-					'ui-icon ' +
+-					'ui-icon-closethick'
+-				)
+-				.text(options.closeText)
+-				.appendTo(uiDialogTitlebarClose),
+-
+-			uiDialogTitle = $('<span></span>')
+-				.addClass('ui-dialog-title')
+-				.attr('id', titleId)
+-				.html(title)
+-				.prependTo(uiDialogTitlebar);
+-
+-		//handling of deprecated beforeclose (vs beforeClose) option
+-		//Ticket #4669 http://dev.jqueryui.com/ticket/4669
+-		//TODO: remove in 1.9pre
+-		if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) {
+-			options.beforeClose = options.beforeclose;
+-		}
+-
+-		uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
+-
+-		if (options.draggable && $.fn.draggable) {
+-			self._makeDraggable();
+-		}
+-		if (options.resizable && $.fn.resizable) {
+-			self._makeResizable();
+-		}
+-
+-		self._createButtons(options.buttons);
+-		self._isOpen = false;
+-
+-		if ($.fn.bgiframe) {
+-			uiDialog.bgiframe();
+-		}
+-	},
+-
+-	_init: function() {
+-		if ( this.options.autoOpen ) {
+-			this.open();
+-		}
+-	},
+-
+-	destroy: function() {
+-		var self = this;
+-		
+-		if (self.overlay) {
+-			self.overlay.destroy();
+-		}
+-		self.uiDialog.hide();
+-		self.element
+-			.unbind('.dialog')
+-			.removeData('dialog')
+-			.removeClass('ui-dialog-content ui-widget-content')
+-			.hide().appendTo('body');
+-		self.uiDialog.remove();
+-
+-		if (self.originalTitle) {
+-			self.element.attr('title', self.originalTitle);
+-		}
+-
+-		return self;
+-	},
+-
+-	widget: function() {
+-		return this.uiDialog;
+-	},
+-
+-	close: function(event) {
+-		var self = this,
+-			maxZ, thisZ;
+-		
+-		if (false === self._trigger('beforeClose', event)) {
+-			return;
+-		}
+-
+-		if (self.overlay) {
+-			self.overlay.destroy();
+-		}
+-		self.uiDialog.unbind('keypress.ui-dialog');
+-
+-		self._isOpen = false;
+-
+-		if (self.options.hide) {
+-			self.uiDialog.hide(self.options.hide, function() {
+-				self._trigger('close', event);
+-			});
+-		} else {
+-			self.uiDialog.hide();
+-			self._trigger('close', event);
+-		}
+-
+-		$.ui.dialog.overlay.resize();
+-
+-		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+-		if (self.options.modal) {
+-			maxZ = 0;
+-			$('.ui-dialog').each(function() {
+-				if (this !== self.uiDialog[0]) {
+-					thisZ = $(this).css('z-index');
+-					if(!isNaN(thisZ)) {
+-						maxZ = Math.max(maxZ, thisZ);
+-					}
+-				}
+-			});
+-			$.ui.dialog.maxZ = maxZ;
+-		}
+-
+-		return self;
+-	},
+-
+-	isOpen: function() {
+-		return this._isOpen;
+-	},
+-
+-	// the force parameter allows us to move modal dialogs to their correct
+-	// position on open
+-	moveToTop: function(force, event) {
+-		var self = this,
+-			options = self.options,
+-			saveScroll;
+-
+-		if ((options.modal && !force) ||
+-			(!options.stack && !options.modal)) {
+-			return self._trigger('focus', event);
+-		}
+-
+-		if (options.zIndex > $.ui.dialog.maxZ) {
+-			$.ui.dialog.maxZ = options.zIndex;
+-		}
+-		if (self.overlay) {
+-			$.ui.dialog.maxZ += 1;
+-			self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ);
+-		}
+-
+-		//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
+-		//  http://ui.jquery.com/bugs/ticket/3193
+-		saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() };
+-		$.ui.dialog.maxZ += 1;
+-		self.uiDialog.css('z-index', $.ui.dialog.maxZ);
+-		self.element.attr(saveScroll);
+-		self._trigger('focus', event);
+-
+-		return self;
+-	},
+-
+-	open: function() {
+-		if (this._isOpen) { return; }
+-
+-		var self = this,
+-			options = self.options,
+-			uiDialog = self.uiDialog;
+-
+-		self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
+-		self._size();
+-		self._position(options.position);
+-		uiDialog.show(options.show);
+-		self.moveToTop(true);
+-
+-		// prevent tabbing out of modal dialogs
+-		if (options.modal) {
+-			uiDialog.bind('keypress.ui-dialog', function(event) {
+-				if (event.keyCode !== $.ui.keyCode.TAB) {
+-					return;
+-				}
+-
+-				var tabbables = $(':tabbable', this),
+-					first = tabbables.filter(':first'),
+-					last  = tabbables.filter(':last');
+-
+-				if (event.target === last[0] && !event.shiftKey) {
+-					first.focus(1);
+-					return false;
+-				} else if (event.target === first[0] && event.shiftKey) {
+-					last.focus(1);
+-					return false;
+-				}
+-			});
+-		}
+-
+-		// set focus to the first tabbable element in the content area or the first button
+-		// if there are no tabbable elements, set focus on the dialog itself
+-		$(self.element.find(':tabbable').get().concat(
+-			uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
+-				uiDialog.get()))).eq(0).focus();
+-
+-		self._isOpen = true;
+-		self._trigger('open');
+-
+-		return self;
+-	},
+-
+-	_createButtons: function(buttons) {
+-		var self = this,
+-			hasButtons = false,
+-			uiDialogButtonPane = $('<div></div>')
+-				.addClass(
+-					'ui-dialog-buttonpane ' +
+-					'ui-widget-content ' +
+-					'ui-helper-clearfix'
+-				),
+-			uiButtonSet = $( "<div></div>" )
+-				.addClass( "ui-dialog-buttonset" )
+-				.appendTo( uiDialogButtonPane );
+-
+-		// if we already have a button pane, remove it
+-		self.uiDialog.find('.ui-dialog-buttonpane').remove();
+-
+-		if (typeof buttons === 'object' && buttons !== null) {
+-			$.each(buttons, function() {
+-				return !(hasButtons = true);
+-			});
+-		}
+-		if (hasButtons) {
+-			$.each(buttons, function(name, props) {
+-				props = $.isFunction( props ) ?
+-					{ click: props, text: name } :
+-					props;
+-				var button = $('<button type="button"></button>')
+-					.click(function() {
+-						props.click.apply(self.element[0], arguments);
+-					})
+-					.appendTo(uiButtonSet);
+-				// can't use .attr( props, true ) with jQuery 1.3.2.
+-				$.each( props, function( key, value ) {
+-					if ( key === "click" ) {
+-						return;
+-					}
+-					if ( key in attrFn ) {
+-						button[ key ]( value );
+-					} else {
+-						button.attr( key, value );
+-					}
+-				});
+-				if ($.fn.button) {
+-					button.button();
+-				}
+-			});
+-			uiDialogButtonPane.appendTo(self.uiDialog);
+-		}
+-	},
+-
+-	_makeDraggable: function() {
+-		var self = this,
+-			options = self.options,
+-			doc = $(document),
+-			heightBeforeDrag;
+-
+-		function filteredUi(ui) {
+-			return {
+-				position: ui.position,
+-				offset: ui.offset
+-			};
+-		}
+-
+-		self.uiDialog.draggable({
+-			cancel: '.ui-dialog-content, .ui-dialog-titlebar-close',
+-			handle: '.ui-dialog-titlebar',
+-			containment: 'document',
+-			start: function(event, ui) {
+-				heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height();
+-				$(this).height($(this).height()).addClass("ui-dialog-dragging");
+-				self._trigger('dragStart', event, filteredUi(ui));
+-			},
+-			drag: function(event, ui) {
+-				self._trigger('drag', event, filteredUi(ui));
+-			},
+-			stop: function(event, ui) {
+-				options.position = [ui.position.left - doc.scrollLeft(),
+-					ui.position.top - doc.scrollTop()];
+-				$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
+-				self._trigger('dragStop', event, filteredUi(ui));
+-				$.ui.dialog.overlay.resize();
+-			}
+-		});
+-	},
+-
+-	_makeResizable: function(handles) {
+-		handles = (handles === undefined ? this.options.resizable : handles);
+-		var self = this,
+-			options = self.options,
+-			// .ui-resizable has position: relative defined in the stylesheet
+-			// but dialogs have to use absolute or fixed positioning
+-			position = self.uiDialog.css('position'),
+-			resizeHandles = (typeof handles === 'string' ?
+-				handles	:
+-				'n,e,s,w,se,sw,ne,nw'
+-			);
+-
+-		function filteredUi(ui) {
+-			return {
+-				originalPosition: ui.originalPosition,
+-				originalSize: ui.originalSize,
+-				position: ui.position,
+-				size: ui.size
+-			};
+-		}
+-
+-		self.uiDialog.resizable({
+-			cancel: '.ui-dialog-content',
+-			containment: 'document',
+-			alsoResize: self.element,
+-			maxWidth: options.maxWidth,
+-			maxHeight: options.maxHeight,
+-			minWidth: options.minWidth,
+-			minHeight: self._minHeight(),
+-			handles: resizeHandles,
+-			start: function(event, ui) {
+-				$(this).addClass("ui-dialog-resizing");
+-				self._trigger('resizeStart', event, filteredUi(ui));
+-			},
+-			resize: function(event, ui) {
+-				self._trigger('resize', event, filteredUi(ui));
+-			},
+-			stop: function(event, ui) {
+-				$(this).removeClass("ui-dialog-resizing");
+-				options.height = $(this).height();
+-				options.width = $(this).width();
+-				self._trigger('resizeStop', event, filteredUi(ui));
+-				$.ui.dialog.overlay.resize();
+-			}
+-		})
+-		.css('position', position)
+-		.find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
+-	},
+-
+-	_minHeight: function() {
+-		var options = this.options;
+-
+-		if (options.height === 'auto') {
+-			return options.minHeight;
+-		} else {
+-			return Math.min(options.minHeight, options.height);
+-		}
+-	},
+-
+-	_position: function(position) {
+-		var myAt = [],
+-			offset = [0, 0],
+-			isVisible;
+-
+-		if (position) {
+-			// deep extending converts arrays to objects in jQuery <= 1.3.2 :-(
+-	//		if (typeof position == 'string' || $.isArray(position)) {
+-	//			myAt = $.isArray(position) ? position : position.split(' ');
+-
+-			if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) {
+-				myAt = position.split ? position.split(' ') : [position[0], position[1]];
+-				if (myAt.length === 1) {
+-					myAt[1] = myAt[0];
+-				}
+-
+-				$.each(['left', 'top'], function(i, offsetPosition) {
+-					if (+myAt[i] === myAt[i]) {
+-						offset[i] = myAt[i];
+-						myAt[i] = offsetPosition;
+-					}
+-				});
+-
+-				position = {
+-					my: myAt.join(" "),
+-					at: myAt.join(" "),
+-					offset: offset.join(" ")
+-				};
+-			} 
+-
+-			position = $.extend({}, $.ui.dialog.prototype.options.position, position);
+-		} else {
+-			position = $.ui.dialog.prototype.options.position;
+-		}
+-
+-		// need to show the dialog to get the actual offset in the position plugin
+-		isVisible = this.uiDialog.is(':visible');
+-		if (!isVisible) {
+-			this.uiDialog.show();
+-		}
+-		this.uiDialog
+-			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
+-			.css({ top: 0, left: 0 })
+-			.position($.extend({ of: window }, position));
+-		if (!isVisible) {
+-			this.uiDialog.hide();
+-		}
+-	},
+-
+-	_setOptions: function( options ) {
+-		var self = this,
+-			resizableOptions = {},
+-			resize = false;
+-
+-		$.each( options, function( key, value ) {
+-			self._setOption( key, value );
+-			
+-			if ( key in sizeRelatedOptions ) {
+-				resize = true;
+-			}
+-			if ( key in resizableRelatedOptions ) {
+-				resizableOptions[ key ] = value;
+-			}
+-		});
+-
+-		if ( resize ) {
+-			this._size();
+-		}
+-		if ( this.uiDialog.is( ":data(resizable)" ) ) {
+-			this.uiDialog.resizable( "option", resizableOptions );
+-		}
+-	},
+-
+-	_setOption: function(key, value){
+-		var self = this,
+-			uiDialog = self.uiDialog;
+-
+-		switch (key) {
+-			//handling of deprecated beforeclose (vs beforeClose) option
+-			//Ticket #4669 http://dev.jqueryui.com/ticket/4669
+-			//TODO: remove in 1.9pre
+-			case "beforeclose":
+-				key = "beforeClose";
+-				break;
+-			case "buttons":
+-				self._createButtons(value);
+-				break;
+-			case "closeText":
+-				// ensure that we always pass a string
+-				self.uiDialogTitlebarCloseText.text("" + value);
+-				break;
+-			case "dialogClass":
+-				uiDialog
+-					.removeClass(self.options.dialogClass)
+-					.addClass(uiDialogClasses + value);
+-				break;
+-			case "disabled":
+-				if (value) {
+-					uiDialog.addClass('ui-dialog-disabled');
+-				} else {
+-					uiDialog.removeClass('ui-dialog-disabled');
+-				}
+-				break;
+-			case "draggable":
+-				var isDraggable = uiDialog.is( ":data(draggable)" );
+-				if ( isDraggable && !value ) {
+-					uiDialog.draggable( "destroy" );
+-				}
+-				
+-				if ( !isDraggable && value ) {
+-					self._makeDraggable();
+-				}
+-				break;
+-			case "position":
+-				self._position(value);
+-				break;
+-			case "resizable":
+-				// currently resizable, becoming non-resizable
+-				var isResizable = uiDialog.is( ":data(resizable)" );
+-				if (isResizable && !value) {
+-					uiDialog.resizable('destroy');
+-				}
+-
+-				// currently resizable, changing handles
+-				if (isResizable && typeof value === 'string') {
+-					uiDialog.resizable('option', 'handles', value);
+-				}
+-
+-				// currently non-resizable, becoming resizable
+-				if (!isResizable && value !== false) {
+-					self._makeResizable(value);
+-				}
+-				break;
+-			case "title":
+-				// convert whatever was passed in o a string, for html() to not throw up
+-				$(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || '&#160;'));
+-				break;
+-		}
+-
+-		$.Widget.prototype._setOption.apply(self, arguments);
+-	},
+-
+-	_size: function() {
+-		/* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+-		 * divs will both have width and height set, so we need to reset them
+-		 */
+-		var options = this.options,
+-			nonContentHeight,
+-			minContentHeight,
+-			isVisible = this.uiDialog.is( ":visible" );
+-
+-		// reset content sizing
+-		this.element.show().css({
+-			width: 'auto',
+-			minHeight: 0,
+-			height: 0
+-		});
+-
+-		if (options.minWidth > options.width) {
+-			options.width = options.minWidth;
+-		}
+-
+-		// reset wrapper sizing
+-		// determine the height of all the non-content elements
+-		nonContentHeight = this.uiDialog.css({
+-				height: 'auto',
+-				width: options.width
+-			})
+-			.height();
+-		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+-		
+-		if ( options.height === "auto" ) {
+-			// only needed for IE6 support
+-			if ( $.support.minHeight ) {
+-				this.element.css({
+-					minHeight: minContentHeight,
+-					height: "auto"
+-				});
+-			} else {
+-				this.uiDialog.show();
+-				var autoHeight = this.element.css( "height", "auto" ).height();
+-				if ( !isVisible ) {
+-					this.uiDialog.hide();
+-				}
+-				this.element.height( Math.max( autoHeight, minContentHeight ) );
+-			}
+-		} else {
+-			this.element.height( Math.max( options.height - nonContentHeight, 0 ) );
+-		}
+-
+-		if (this.uiDialog.is(':data(resizable)')) {
+-			this.uiDialog.resizable('option', 'minHeight', this._minHeight());
+-		}
+-	}
+-});
+-
+-$.extend($.ui.dialog, {
+-	version: "1.8.15",
+-
+-	uuid: 0,
+-	maxZ: 0,
+-
+-	getTitleId: function($el) {
+-		var id = $el.attr('id');
+-		if (!id) {
+-			this.uuid += 1;
+-			id = this.uuid;
+-		}
+-		return 'ui-dialog-title-' + id;
+-	},
+-
+-	overlay: function(dialog) {
+-		this.$el = $.ui.dialog.overlay.create(dialog);
+-	}
+-});
+-
+-$.extend($.ui.dialog.overlay, {
+-	instances: [],
+-	// reuse old instances due to IE memory leak with alpha transparency (see #5185)
+-	oldInstances: [],
+-	maxZ: 0,
+-	events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
+-		function(event) { return event + '.dialog-overlay'; }).join(' '),
+-	create: function(dialog) {
+-		if (this.instances.length === 0) {
+-			// prevent use of anchors and inputs
+-			// we use a setTimeout in case the overlay is created from an
+-			// event that we're going to be cancelling (see #2804)
+-			setTimeout(function() {
+-				// handle $(el).dialog().dialog('close') (see #4065)
+-				if ($.ui.dialog.overlay.instances.length) {
+-					$(document).bind($.ui.dialog.overlay.events, function(event) {
+-						// stop events if the z-index of the target is < the z-index of the overlay
+-						// we cannot return true when we don't want to cancel the event (#3523)
+-						if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
+-							return false;
+-						}
+-					});
+-				}
+-			}, 1);
+-
+-			// allow closing by pressing the escape key
+-			$(document).bind('keydown.dialog-overlay', function(event) {
+-				if (dialog.options.closeOnEscape && event.keyCode &&
+-					event.keyCode === $.ui.keyCode.ESCAPE) {
+-					
+-					dialog.close(event);
+-					event.preventDefault();
+-				}
+-			});
+-
+-			// handle window resize
+-			$(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
+-		}
+-
+-		var $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay'))
+-			.appendTo(document.body)
+-			.css({
+-				width: this.width(),
+-				height: this.height()
+-			});
+-
+-		if ($.fn.bgiframe) {
+-			$el.bgiframe();
+-		}
+-
+-		this.instances.push($el);
+-		return $el;
+-	},
+-
+-	destroy: function($el) {
+-		var indexOf = $.inArray($el, this.instances);
+-		if (indexOf != -1){
+-			this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
+-		}
+-
+-		if (this.instances.length === 0) {
+-			$([document, window]).unbind('.dialog-overlay');
+-		}
+-
+-		$el.remove();
+-		
+-		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+-		var maxZ = 0;
+-		$.each(this.instances, function() {
+-			maxZ = Math.max(maxZ, this.css('z-index'));
+-		});
+-		this.maxZ = maxZ;
+-	},
+-
+-	height: function() {
+-		var scrollHeight,
+-			offsetHeight;
+-		// handle IE 6
+-		if ($.browser.msie && $.browser.version < 7) {
+-			scrollHeight = Math.max(
+-				document.documentElement.scrollHeight,
+-				document.body.scrollHeight
+-			);
+-			offsetHeight = Math.max(
+-				document.documentElement.offsetHeight,
+-				document.body.offsetHeight
+-			);
+-
+-			if (scrollHeight < offsetHeight) {
+-				return $(window).height() + 'px';
+-			} else {
+-				return scrollHeight + 'px';
+-			}
+-		// handle "good" browsers
+-		} else {
+-			return $(document).height() + 'px';
+-		}
+-	},
+-
+-	width: function() {
+-		var scrollWidth,
+-			offsetWidth;
+-		// handle IE
+-		if ( $.browser.msie ) {
+-			scrollWidth = Math.max(
+-				document.documentElement.scrollWidth,
+-				document.body.scrollWidth
+-			);
+-			offsetWidth = Math.max(
+-				document.documentElement.offsetWidth,
+-				document.body.offsetWidth
+-			);
+-
+-			if (scrollWidth < offsetWidth) {
+-				return $(window).width() + 'px';
+-			} else {
+-				return scrollWidth + 'px';
+-			}
+-		// handle "good" browsers
+-		} else {
+-			return $(document).width() + 'px';
+-		}
+-	},
+-
+-	resize: function() {
+-		/* If the dialog is draggable and the user drags it past the
+-		 * right edge of the window, the document becomes wider so we
+-		 * need to stretch the overlay. If the user then drags the
+-		 * dialog back to the left, the document will become narrower,
+-		 * so we need to shrink the overlay to the appropriate size.
+-		 * This is handled by shrinking the overlay before setting it
+-		 * to the full document size.
+-		 */
+-		var $overlays = $([]);
+-		$.each($.ui.dialog.overlay.instances, function() {
+-			$overlays = $overlays.add(this);
+-		});
+-
+-		$overlays.css({
+-			width: 0,
+-			height: 0
+-		}).css({
+-			width: $.ui.dialog.overlay.width(),
+-			height: $.ui.dialog.overlay.height()
+-		});
+-	}
+-});
+-
+-$.extend($.ui.dialog.overlay.prototype, {
+-	destroy: function() {
+-		$.ui.dialog.overlay.destroy(this.$el);
+-	}
+-});
+-
+-}(jQuery));
+-/*
+- * jQuery UI Position 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Position
+- */
+-(function( $, undefined ) {
+-
+-$.ui = $.ui || {};
+-
+-var horizontalPositions = /left|center|right/,
+-	verticalPositions = /top|center|bottom/,
+-	center = "center",
+-	_position = $.fn.position,
+-	_offset = $.fn.offset;
+-
+-$.fn.position = function( options ) {
+-	if ( !options || !options.of ) {
+-		return _position.apply( this, arguments );
+-	}
+-
+-	// make a copy, we don't want to modify arguments
+-	options = $.extend( {}, options );
+-
+-	var target = $( options.of ),
+-		targetElem = target[0],
+-		collision = ( options.collision || "flip" ).split( " " ),
+-		offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ],
+-		targetWidth,
+-		targetHeight,
+-		basePosition;
+-
+-	if ( targetElem.nodeType === 9 ) {
+-		targetWidth = target.width();
+-		targetHeight = target.height();
+-		basePosition = { top: 0, left: 0 };
+-	// TODO: use $.isWindow() in 1.9
+-	} else if ( targetElem.setTimeout ) {
+-		targetWidth = target.width();
+-		targetHeight = target.height();
+-		basePosition = { top: target.scrollTop(), left: target.scrollLeft() };
+-	} else if ( targetElem.preventDefault ) {
+-		// force left top to allow flipping
+-		options.at = "left top";
+-		targetWidth = targetHeight = 0;
+-		basePosition = { top: options.of.pageY, left: options.of.pageX };
+-	} else {
+-		targetWidth = target.outerWidth();
+-		targetHeight = target.outerHeight();
+-		basePosition = target.offset();
+-	}
+-
+-	// force my and at to have valid horizontal and veritcal positions
+-	// if a value is missing or invalid, it will be converted to center 
+-	$.each( [ "my", "at" ], function() {
+-		var pos = ( options[this] || "" ).split( " " );
+-		if ( pos.length === 1) {
+-			pos = horizontalPositions.test( pos[0] ) ?
+-				pos.concat( [center] ) :
+-				verticalPositions.test( pos[0] ) ?
+-					[ center ].concat( pos ) :
+-					[ center, center ];
+-		}
+-		pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;
+-		pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;
+-		options[ this ] = pos;
+-	});
+-
+-	// normalize collision option
+-	if ( collision.length === 1 ) {
+-		collision[ 1 ] = collision[ 0 ];
+-	}
+-
+-	// normalize offset option
+-	offset[ 0 ] = parseInt( offset[0], 10 ) || 0;
+-	if ( offset.length === 1 ) {
+-		offset[ 1 ] = offset[ 0 ];
+-	}
+-	offset[ 1 ] = parseInt( offset[1], 10 ) || 0;
+-
+-	if ( options.at[0] === "right" ) {
+-		basePosition.left += targetWidth;
+-	} else if ( options.at[0] === center ) {
+-		basePosition.left += targetWidth / 2;
+-	}
+-
+-	if ( options.at[1] === "bottom" ) {
+-		basePosition.top += targetHeight;
+-	} else if ( options.at[1] === center ) {
+-		basePosition.top += targetHeight / 2;
+-	}
+-
+-	basePosition.left += offset[ 0 ];
+-	basePosition.top += offset[ 1 ];
+-
+-	return this.each(function() {
+-		var elem = $( this ),
+-			elemWidth = elem.outerWidth(),
+-			elemHeight = elem.outerHeight(),
+-			marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0,
+-			marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0,
+-			collisionWidth = elemWidth + marginLeft +
+-				( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ),
+-			collisionHeight = elemHeight + marginTop +
+-				( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ),
+-			position = $.extend( {}, basePosition ),
+-			collisionPosition;
+-
+-		if ( options.my[0] === "right" ) {
+-			position.left -= elemWidth;
+-		} else if ( options.my[0] === center ) {
+-			position.left -= elemWidth / 2;
+-		}
+-
+-		if ( options.my[1] === "bottom" ) {
+-			position.top -= elemHeight;
+-		} else if ( options.my[1] === center ) {
+-			position.top -= elemHeight / 2;
+-		}
+-
+-		// prevent fractions (see #5280)
+-		position.left = Math.round( position.left );
+-		position.top = Math.round( position.top );
+-
+-		collisionPosition = {
+-			left: position.left - marginLeft,
+-			top: position.top - marginTop
+-		};
+-
+-		$.each( [ "left", "top" ], function( i, dir ) {
+-			if ( $.ui.position[ collision[i] ] ) {
+-				$.ui.position[ collision[i] ][ dir ]( position, {
+-					targetWidth: targetWidth,
+-					targetHeight: targetHeight,
+-					elemWidth: elemWidth,
+-					elemHeight: elemHeight,
+-					collisionPosition: collisionPosition,
+-					collisionWidth: collisionWidth,
+-					collisionHeight: collisionHeight,
+-					offset: offset,
+-					my: options.my,
+-					at: options.at
+-				});
+-			}
+-		});
+-
+-		if ( $.fn.bgiframe ) {
+-			elem.bgiframe();
+-		}
+-		elem.offset( $.extend( position, { using: options.using } ) );
+-	});
+-};
+-
+-$.ui.position = {
+-	fit: {
+-		left: function( position, data ) {
+-			var win = $( window ),
+-				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();
+-			position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );
+-		},
+-		top: function( position, data ) {
+-			var win = $( window ),
+-				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();
+-			position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );
+-		}
+-	},
+-
+-	flip: {
+-		left: function( position, data ) {
+-			if ( data.at[0] === center ) {
+-				return;
+-			}
+-			var win = $( window ),
+-				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),
+-				myOffset = data.my[ 0 ] === "left" ?
+-					-data.elemWidth :
+-					data.my[ 0 ] === "right" ?
+-						data.elemWidth :
+-						0,
+-				atOffset = data.at[ 0 ] === "left" ?
+-					data.targetWidth :
+-					-data.targetWidth,
+-				offset = -2 * data.offset[ 0 ];
+-			position.left += data.collisionPosition.left < 0 ?
+-				myOffset + atOffset + offset :
+-				over > 0 ?
+-					myOffset + atOffset + offset :
+-					0;
+-		},
+-		top: function( position, data ) {
+-			if ( data.at[1] === center ) {
+-				return;
+-			}
+-			var win = $( window ),
+-				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),
+-				myOffset = data.my[ 1 ] === "top" ?
+-					-data.elemHeight :
+-					data.my[ 1 ] === "bottom" ?
+-						data.elemHeight :
+-						0,
+-				atOffset = data.at[ 1 ] === "top" ?
+-					data.targetHeight :
+-					-data.targetHeight,
+-				offset = -2 * data.offset[ 1 ];
+-			position.top += data.collisionPosition.top < 0 ?
+-				myOffset + atOffset + offset :
+-				over > 0 ?
+-					myOffset + atOffset + offset :
+-					0;
+-		}
+-	}
+-};
+-
+-// offset setter from jQuery 1.4
+-if ( !$.offset.setOffset ) {
+-	$.offset.setOffset = function( elem, options ) {
+-		// set position first, in-case top/left are set even on static elem
+-		if ( /static/.test( $.curCSS( elem, "position" ) ) ) {
+-			elem.style.position = "relative";
+-		}
+-		var curElem   = $( elem ),
+-			curOffset = curElem.offset(),
+-			curTop    = parseInt( $.curCSS( elem, "top",  true ), 10 ) || 0,
+-			curLeft   = parseInt( $.curCSS( elem, "left", true ), 10)  || 0,
+-			props     = {
+-				top:  (options.top  - curOffset.top)  + curTop,
+-				left: (options.left - curOffset.left) + curLeft
+-			};
+-		
+-		if ( 'using' in options ) {
+-			options.using.call( elem, props );
+-		} else {
+-			curElem.css( props );
+-		}
+-	};
+-
+-	$.fn.offset = function( options ) {
+-		var elem = this[ 0 ];
+-		if ( !elem || !elem.ownerDocument ) { return null; }
+-		if ( options ) { 
+-			return this.each(function() {
+-				$.offset.setOffset( this, options );
+-			});
+-		}
+-		return _offset.call( this );
+-	};
+-}
+-
+-}( jQuery ));
+-/*
+- * jQuery UI Progressbar 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Progressbar
+- *
+- * Depends:
+- *   jquery.ui.core.js
+- *   jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget( "ui.progressbar", {
+-	options: {
+-		value: 0,
+-		max: 100
+-	},
+-
+-	min: 0,
+-
+-	_create: function() {
+-		this.element
+-			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.attr({
+-				role: "progressbar",
+-				"aria-valuemin": this.min,
+-				"aria-valuemax": this.options.max,
+-				"aria-valuenow": this._value()
+-			});
+-
+-		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+-			.appendTo( this.element );
+-
+-		this.oldValue = this._value();
+-		this._refreshValue();
+-	},
+-
+-	destroy: function() {
+-		this.element
+-			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-
+-		this.valueDiv.remove();
+-
+-		$.Widget.prototype.destroy.apply( this, arguments );
+-	},
+-
+-	value: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			return this._value();
+-		}
+-
+-		this._setOption( "value", newValue );
+-		return this;
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "value" ) {
+-			this.options.value = value;
+-			this._refreshValue();
+-			if ( this._value() === this.options.max ) {
+-				this._trigger( "complete" );
+-			}
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-	},
+-
+-	_value: function() {
+-		var val = this.options.value;
+-		// normalize invalid value
+-		if ( typeof val !== "number" ) {
+-			val = 0;
+-		}
+-		return Math.min( this.options.max, Math.max( this.min, val ) );
+-	},
+-
+-	_percentage: function() {
+-		return 100 * this._value() / this.options.max;
+-	},
+-
+-	_refreshValue: function() {
+-		var value = this.value();
+-		var percentage = this._percentage();
+-
+-		if ( this.oldValue !== value ) {
+-			this.oldValue = value;
+-			this._trigger( "change" );
+-		}
+-
+-		this.valueDiv
+-			.toggle( value > this.min )
+-			.toggleClass( "ui-corner-right", value === this.options.max )
+-			.width( percentage.toFixed(0) + "%" );
+-		this.element.attr( "aria-valuenow", value );
+-	}
+-});
+-
+-$.extend( $.ui.progressbar, {
+-	version: "1.8.15"
+-});
+-
+-})( jQuery );
+-/*
+- * jQuery UI Slider 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Slider
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-// number of pages in a slider
+-// (how many times can you page up/down to go through the whole range)
+-var numPages = 5;
+-
+-$.widget( "ui.slider", $.ui.mouse, {
+-
+-	widgetEventPrefix: "slide",
+-
+-	options: {
+-		animate: false,
+-		distance: 0,
+-		max: 100,
+-		min: 0,
+-		orientation: "horizontal",
+-		range: false,
+-		step: 1,
+-		value: 0,
+-		values: null
+-	},
+-
+-	_create: function() {
+-		var self = this,
+-			o = this.options,
+-			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+-			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+-			handleCount = ( o.values && o.values.length ) || 1,
+-			handles = [];
+-
+-		this._keySliding = false;
+-		this._mouseSliding = false;
+-		this._animateOff = true;
+-		this._handleIndex = null;
+-		this._detectOrientation();
+-		this._mouseInit();
+-
+-		this.element
+-			.addClass( "ui-slider" +
+-				" ui-slider-" + this.orientation +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" +
+-				( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) );
+-
+-		this.range = $([]);
+-
+-		if ( o.range ) {
+-			if ( o.range === true ) {
+-				if ( !o.values ) {
+-					o.values = [ this._valueMin(), this._valueMin() ];
+-				}
+-				if ( o.values.length && o.values.length !== 2 ) {
+-					o.values = [ o.values[0], o.values[0] ];
+-				}
+-			}
+-
+-			this.range = $( "<div></div>" )
+-				.appendTo( this.element )
+-				.addClass( "ui-slider-range" +
+-				// note: this isn't the most fittingly semantic framework class for this element,
+-				// but worked best visually with a variety of themes
+-				" ui-widget-header" + 
+-				( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) );
+-		}
+-
+-		for ( var i = existingHandles.length; i < handleCount; i += 1 ) {
+-			handles.push( handle );
+-		}
+-
+-		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) );
+-
+-		this.handle = this.handles.eq( 0 );
+-
+-		this.handles.add( this.range ).filter( "a" )
+-			.click(function( event ) {
+-				event.preventDefault();
+-			})
+-			.hover(function() {
+-				if ( !o.disabled ) {
+-					$( this ).addClass( "ui-state-hover" );
+-				}
+-			}, function() {
+-				$( this ).removeClass( "ui-state-hover" );
+-			})
+-			.focus(function() {
+-				if ( !o.disabled ) {
+-					$( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" );
+-					$( this ).addClass( "ui-state-focus" );
+-				} else {
+-					$( this ).blur();
+-				}
+-			})
+-			.blur(function() {
+-				$( this ).removeClass( "ui-state-focus" );
+-			});
+-
+-		this.handles.each(function( i ) {
+-			$( this ).data( "index.ui-slider-handle", i );
+-		});
+-
+-		this.handles
+-			.keydown(function( event ) {
+-				var ret = true,
+-					index = $( this ).data( "index.ui-slider-handle" ),
+-					allowed,
+-					curVal,
+-					newVal,
+-					step;
+-	
+-				if ( self.options.disabled ) {
+-					return;
+-				}
+-	
+-				switch ( event.keyCode ) {
+-					case $.ui.keyCode.HOME:
+-					case $.ui.keyCode.END:
+-					case $.ui.keyCode.PAGE_UP:
+-					case $.ui.keyCode.PAGE_DOWN:
+-					case $.ui.keyCode.UP:
+-					case $.ui.keyCode.RIGHT:
+-					case $.ui.keyCode.DOWN:
+-					case $.ui.keyCode.LEFT:
+-						ret = false;
+-						if ( !self._keySliding ) {
+-							self._keySliding = true;
+-							$( this ).addClass( "ui-state-active" );
+-							allowed = self._start( event, index );
+-							if ( allowed === false ) {
+-								return;
+-							}
+-						}
+-						break;
+-				}
+-	
+-				step = self.options.step;
+-				if ( self.options.values && self.options.values.length ) {
+-					curVal = newVal = self.values( index );
+-				} else {
+-					curVal = newVal = self.value();
+-				}
+-	
+-				switch ( event.keyCode ) {
+-					case $.ui.keyCode.HOME:
+-						newVal = self._valueMin();
+-						break;
+-					case $.ui.keyCode.END:
+-						newVal = self._valueMax();
+-						break;
+-					case $.ui.keyCode.PAGE_UP:
+-						newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) );
+-						break;
+-					case $.ui.keyCode.PAGE_DOWN:
+-						newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) );
+-						break;
+-					case $.ui.keyCode.UP:
+-					case $.ui.keyCode.RIGHT:
+-						if ( curVal === self._valueMax() ) {
+-							return;
+-						}
+-						newVal = self._trimAlignValue( curVal + step );
+-						break;
+-					case $.ui.keyCode.DOWN:
+-					case $.ui.keyCode.LEFT:
+-						if ( curVal === self._valueMin() ) {
+-							return;
+-						}
+-						newVal = self._trimAlignValue( curVal - step );
+-						break;
+-				}
+-	
+-				self._slide( event, index, newVal );
+-	
+-				return ret;
+-	
+-			})
+-			.keyup(function( event ) {
+-				var index = $( this ).data( "index.ui-slider-handle" );
+-	
+-				if ( self._keySliding ) {
+-					self._keySliding = false;
+-					self._stop( event, index );
+-					self._change( event, index );
+-					$( this ).removeClass( "ui-state-active" );
+-				}
+-	
+-			});
+-
+-		this._refreshValue();
+-
+-		this._animateOff = false;
+-	},
+-
+-	destroy: function() {
+-		this.handles.remove();
+-		this.range.remove();
+-
+-		this.element
+-			.removeClass( "ui-slider" +
+-				" ui-slider-horizontal" +
+-				" ui-slider-vertical" +
+-				" ui-slider-disabled" +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" )
+-			.removeData( "slider" )
+-			.unbind( ".slider" );
+-
+-		this._mouseDestroy();
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function( event ) {
+-		var o = this.options,
+-			position,
+-			normValue,
+-			distance,
+-			closestHandle,
+-			self,
+-			index,
+-			allowed,
+-			offset,
+-			mouseOverHandle;
+-
+-		if ( o.disabled ) {
+-			return false;
+-		}
+-
+-		this.elementSize = {
+-			width: this.element.outerWidth(),
+-			height: this.element.outerHeight()
+-		};
+-		this.elementOffset = this.element.offset();
+-
+-		position = { x: event.pageX, y: event.pageY };
+-		normValue = this._normValueFromMouse( position );
+-		distance = this._valueMax() - this._valueMin() + 1;
+-		self = this;
+-		this.handles.each(function( i ) {
+-			var thisDistance = Math.abs( normValue - self.values(i) );
+-			if ( distance > thisDistance ) {
+-				distance = thisDistance;
+-				closestHandle = $( this );
+-				index = i;
+-			}
+-		});
+-
+-		// workaround for bug #3736 (if both handles of a range are at 0,
+-		// the first is always used as the one with least distance,
+-		// and moving it is obviously prevented by preventing negative ranges)
+-		if( o.range === true && this.values(1) === o.min ) {
+-			index += 1;
+-			closestHandle = $( this.handles[index] );
+-		}
+-
+-		allowed = this._start( event, index );
+-		if ( allowed === false ) {
+-			return false;
+-		}
+-		this._mouseSliding = true;
+-
+-		self._handleIndex = index;
+-
+-		closestHandle
+-			.addClass( "ui-state-active" )
+-			.focus();
+-		
+-		offset = closestHandle.offset();
+-		mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" );
+-		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+-			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+-			top: event.pageY - offset.top -
+-				( closestHandle.height() / 2 ) -
+-				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+-				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+-				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+-		};
+-
+-		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+-			this._slide( event, index, normValue );
+-		}
+-		this._animateOff = true;
+-		return true;
+-	},
+-
+-	_mouseStart: function( event ) {
+-		return true;
+-	},
+-
+-	_mouseDrag: function( event ) {
+-		var position = { x: event.pageX, y: event.pageY },
+-			normValue = this._normValueFromMouse( position );
+-		
+-		this._slide( event, this._handleIndex, normValue );
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function( event ) {
+-		this.handles.removeClass( "ui-state-active" );
+-		this._mouseSliding = false;
+-
+-		this._stop( event, this._handleIndex );
+-		this._change( event, this._handleIndex );
+-
+-		this._handleIndex = null;
+-		this._clickOffset = null;
+-		this._animateOff = false;
+-
+-		return false;
+-	},
+-	
+-	_detectOrientation: function() {
+-		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+-	},
+-
+-	_normValueFromMouse: function( position ) {
+-		var pixelTotal,
+-			pixelMouse,
+-			percentMouse,
+-			valueTotal,
+-			valueMouse;
+-
+-		if ( this.orientation === "horizontal" ) {
+-			pixelTotal = this.elementSize.width;
+-			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+-		} else {
+-			pixelTotal = this.elementSize.height;
+-			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+-		}
+-
+-		percentMouse = ( pixelMouse / pixelTotal );
+-		if ( percentMouse > 1 ) {
+-			percentMouse = 1;
+-		}
+-		if ( percentMouse < 0 ) {
+-			percentMouse = 0;
+-		}
+-		if ( this.orientation === "vertical" ) {
+-			percentMouse = 1 - percentMouse;
+-		}
+-
+-		valueTotal = this._valueMax() - this._valueMin();
+-		valueMouse = this._valueMin() + percentMouse * valueTotal;
+-
+-		return this._trimAlignValue( valueMouse );
+-	},
+-
+-	_start: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-		return this._trigger( "start", event, uiHash );
+-	},
+-
+-	_slide: function( event, index, newVal ) {
+-		var otherVal,
+-			newValues,
+-			allowed;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			otherVal = this.values( index ? 0 : 1 );
+-
+-			if ( ( this.options.values.length === 2 && this.options.range === true ) && 
+-					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+-				) {
+-				newVal = otherVal;
+-			}
+-
+-			if ( newVal !== this.values( index ) ) {
+-				newValues = this.values();
+-				newValues[ index ] = newVal;
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal,
+-					values: newValues
+-				} );
+-				otherVal = this.values( index ? 0 : 1 );
+-				if ( allowed !== false ) {
+-					this.values( index, newVal, true );
+-				}
+-			}
+-		} else {
+-			if ( newVal !== this.value() ) {
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal
+-				} );
+-				if ( allowed !== false ) {
+-					this.value( newVal );
+-				}
+-			}
+-		}
+-	},
+-
+-	_stop: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-
+-		this._trigger( "stop", event, uiHash );
+-	},
+-
+-	_change: function( event, index ) {
+-		if ( !this._keySliding && !this._mouseSliding ) {
+-			var uiHash = {
+-				handle: this.handles[ index ],
+-				value: this.value()
+-			};
+-			if ( this.options.values && this.options.values.length ) {
+-				uiHash.value = this.values( index );
+-				uiHash.values = this.values();
+-			}
+-
+-			this._trigger( "change", event, uiHash );
+-		}
+-	},
+-
+-	value: function( newValue ) {
+-		if ( arguments.length ) {
+-			this.options.value = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, 0 );
+-			return;
+-		}
+-
+-		return this._value();
+-	},
+-
+-	values: function( index, newValue ) {
+-		var vals,
+-			newValues,
+-			i;
+-
+-		if ( arguments.length > 1 ) {
+-			this.options.values[ index ] = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, index );
+-			return;
+-		}
+-
+-		if ( arguments.length ) {
+-			if ( $.isArray( arguments[ 0 ] ) ) {
+-				vals = this.options.values;
+-				newValues = arguments[ 0 ];
+-				for ( i = 0; i < vals.length; i += 1 ) {
+-					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+-					this._change( null, i );
+-				}
+-				this._refreshValue();
+-			} else {
+-				if ( this.options.values && this.options.values.length ) {
+-					return this._values( index );
+-				} else {
+-					return this.value();
+-				}
+-			}
+-		} else {
+-			return this._values();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var i,
+-			valsLength = 0;
+-
+-		if ( $.isArray( this.options.values ) ) {
+-			valsLength = this.options.values.length;
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-
+-		switch ( key ) {
+-			case "disabled":
+-				if ( value ) {
+-					this.handles.filter( ".ui-state-focus" ).blur();
+-					this.handles.removeClass( "ui-state-hover" );
+-					this.handles.propAttr( "disabled", true );
+-					this.element.addClass( "ui-disabled" );
+-				} else {
+-					this.handles.propAttr( "disabled", false );
+-					this.element.removeClass( "ui-disabled" );
+-				}
+-				break;
+-			case "orientation":
+-				this._detectOrientation();
+-				this.element
+-					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+-					.addClass( "ui-slider-" + this.orientation );
+-				this._refreshValue();
+-				break;
+-			case "value":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._change( null, 0 );
+-				this._animateOff = false;
+-				break;
+-			case "values":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				for ( i = 0; i < valsLength; i += 1 ) {
+-					this._change( null, i );
+-				}
+-				this._animateOff = false;
+-				break;
+-		}
+-	},
+-
+-	//internal value getter
+-	// _value() returns value trimmed by min and max, aligned by step
+-	_value: function() {
+-		var val = this.options.value;
+-		val = this._trimAlignValue( val );
+-
+-		return val;
+-	},
+-
+-	//internal values getter
+-	// _values() returns array of values trimmed by min and max, aligned by step
+-	// _values( index ) returns single value trimmed by min and max, aligned by step
+-	_values: function( index ) {
+-		var val,
+-			vals,
+-			i;
+-
+-		if ( arguments.length ) {
+-			val = this.options.values[ index ];
+-			val = this._trimAlignValue( val );
+-
+-			return val;
+-		} else {
+-			// .slice() creates a copy of the array
+-			// this copy gets trimmed by min and max and then returned
+-			vals = this.options.values.slice();
+-			for ( i = 0; i < vals.length; i+= 1) {
+-				vals[ i ] = this._trimAlignValue( vals[ i ] );
+-			}
+-
+-			return vals;
+-		}
+-	},
+-	
+-	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+-	_trimAlignValue: function( val ) {
+-		if ( val <= this._valueMin() ) {
+-			return this._valueMin();
+-		}
+-		if ( val >= this._valueMax() ) {
+-			return this._valueMax();
+-		}
+-		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+-			valModStep = (val - this._valueMin()) % step,
+-			alignValue = val - valModStep;
+-
+-		if ( Math.abs(valModStep) * 2 >= step ) {
+-			alignValue += ( valModStep > 0 ) ? step : ( -step );
+-		}
+-
+-		// Since JavaScript has problems with large floats, round
+-		// the final value to 5 digits after the decimal point (see #4124)
+-		return parseFloat( alignValue.toFixed(5) );
+-	},
+-
+-	_valueMin: function() {
+-		return this.options.min;
+-	},
+-
+-	_valueMax: function() {
+-		return this.options.max;
+-	},
+-	
+-	_refreshValue: function() {
+-		var oRange = this.options.range,
+-			o = this.options,
+-			self = this,
+-			animate = ( !this._animateOff ) ? o.animate : false,
+-			valPercent,
+-			_set = {},
+-			lastValPercent,
+-			value,
+-			valueMin,
+-			valueMax;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			this.handles.each(function( i, j ) {
+-				valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100;
+-				_set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-				if ( self.options.range === true ) {
+-					if ( self.orientation === "horizontal" ) {
+-						if ( i === 0 ) {
+-							self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					} else {
+-						if ( i === 0 ) {
+-							self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					}
+-				}
+-				lastValPercent = valPercent;
+-			});
+-		} else {
+-			value = this.value();
+-			valueMin = this._valueMin();
+-			valueMax = this._valueMax();
+-			valPercent = ( valueMax !== valueMin ) ?
+-					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+-					0;
+-			_set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-
+-			if ( oRange === "min" && this.orientation === "horizontal" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "horizontal" ) {
+-				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-			if ( oRange === "min" && this.orientation === "vertical" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "vertical" ) {
+-				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-		}
+-	}
+-
+-});
+-
+-$.extend( $.ui.slider, {
+-	version: "1.8.15"
+-});
+-
+-}(jQuery));
+-/*
+- * jQuery UI Tabs 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Tabs
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var tabId = 0,
+-	listId = 0;
+-
+-function getNextTabId() {
+-	return ++tabId;
+-}
+-
+-function getNextListId() {
+-	return ++listId;
+-}
+-
+-$.widget( "ui.tabs", {
+-	options: {
+-		add: null,
+-		ajaxOptions: null,
+-		cache: false,
+-		cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
+-		collapsible: false,
+-		disable: null,
+-		disabled: [],
+-		enable: null,
+-		event: "click",
+-		fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
+-		idPrefix: "ui-tabs-",
+-		load: null,
+-		panelTemplate: "<div></div>",
+-		remove: null,
+-		select: null,
+-		show: null,
+-		spinner: "<em>Loading&#8230;</em>",
+-		tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
+-	},
+-
+-	_create: function() {
+-		this._tabify( true );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key == "selected" ) {
+-			if (this.options.collapsible && value == this.options.selected ) {
+-				return;
+-			}
+-			this.select( value );
+-		} else {
+-			this.options[ key ] = value;
+-			this._tabify();
+-		}
+-	},
+-
+-	_tabId: function( a ) {
+-		return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
+-			this.options.idPrefix + getNextTabId();
+-	},
+-
+-	_sanitizeSelector: function( hash ) {
+-		// we need this because an id may contain a ":"
+-		return hash.replace( /:/g, "\\:" );
+-	},
+-
+-	_cookie: function() {
+-		var cookie = this.cookie ||
+-			( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() );
+-		return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );
+-	},
+-
+-	_ui: function( tab, panel ) {
+-		return {
+-			tab: tab,
+-			panel: panel,
+-			index: this.anchors.index( tab )
+-		};
+-	},
+-
+-	_cleanup: function() {
+-		// restore all former loading tabs labels
+-		this.lis.filter( ".ui-state-processing" )
+-			.removeClass( "ui-state-processing" )
+-			.find( "span:data(label.tabs)" )
+-				.each(function() {
+-					var el = $( this );
+-					el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" );
+-				});
+-	},
+-
+-	_tabify: function( init ) {
+-		var self = this,
+-			o = this.options,
+-			fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
+-
+-		this.list = this.element.find( "ol,ul" ).eq( 0 );
+-		this.lis = $( " > li:has(a[href])", this.list );
+-		this.anchors = this.lis.map(function() {
+-			return $( "a", this )[ 0 ];
+-		});
+-		this.panels = $( [] );
+-
+-		this.anchors.each(function( i, a ) {
+-			var href = $( a ).attr( "href" );
+-			// For dynamically created HTML that contains a hash as href IE < 8 expands
+-			// such href to the full page url with hash and then misinterprets tab as ajax.
+-			// Same consideration applies for an added tab with a fragment identifier
+-			// since a[href=#fragment-identifier] does unexpectedly not match.
+-			// Thus normalize href attribute...
+-			var hrefBase = href.split( "#" )[ 0 ],
+-				baseEl;
+-			if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] ||
+-					( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) {
+-				href = a.hash;
+-				a.href = href;
+-			}
+-
+-			// inline tab
+-			if ( fragmentId.test( href ) ) {
+-				self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) );
+-			// remote tab
+-			// prevent loading the page itself if href is just "#"
+-			} else if ( href && href !== "#" ) {
+-				// required for restore on destroy
+-				$.data( a, "href.tabs", href );
+-
+-				// TODO until #3808 is fixed strip fragment identifier from url
+-				// (IE fails to load from such url)
+-				$.data( a, "load.tabs", href.replace( /#.*$/, "" ) );
+-
+-				var id = self._tabId( a );
+-				a.href = "#" + id;
+-				var $panel = self.element.find( "#" + id );
+-				if ( !$panel.length ) {
+-					$panel = $( o.panelTemplate )
+-						.attr( "id", id )
+-						.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-						.insertAfter( self.panels[ i - 1 ] || self.list );
+-					$panel.data( "destroy.tabs", true );
+-				}
+-				self.panels = self.panels.add( $panel );
+-			// invalid tab href
+-			} else {
+-				o.disabled.push( i );
+-			}
+-		});
+-
+-		// initialization from scratch
+-		if ( init ) {
+-			// attach necessary classes for styling
+-			this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" );
+-			this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
+-			this.lis.addClass( "ui-state-default ui-corner-top" );
+-			this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" );
+-
+-			// Selected tab
+-			// use "selected" option or try to retrieve:
+-			// 1. from fragment identifier in url
+-			// 2. from cookie
+-			// 3. from selected class attribute on <li>
+-			if ( o.selected === undefined ) {
+-				if ( location.hash ) {
+-					this.anchors.each(function( i, a ) {
+-						if ( a.hash == location.hash ) {
+-							o.selected = i;
+-							return false;
+-						}
+-					});
+-				}
+-				if ( typeof o.selected !== "number" && o.cookie ) {
+-					o.selected = parseInt( self._cookie(), 10 );
+-				}
+-				if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) {
+-					o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
+-				}
+-				o.selected = o.selected || ( this.lis.length ? 0 : -1 );
+-			} else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release
+-				o.selected = -1;
+-			}
+-
+-			// sanity check - default to first tab...
+-			o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 )
+-				? o.selected
+-				: 0;
+-
+-			// Take disabling tabs via class attribute from HTML
+-			// into account and update option properly.
+-			// A selected tab cannot become disabled.
+-			o.disabled = $.unique( o.disabled.concat(
+-				$.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) {
+-					return self.lis.index( n );
+-				})
+-			) ).sort();
+-
+-			if ( $.inArray( o.selected, o.disabled ) != -1 ) {
+-				o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 );
+-			}
+-
+-			// highlight selected tab
+-			this.panels.addClass( "ui-tabs-hide" );
+-			this.lis.removeClass( "ui-tabs-selected ui-state-active" );
+-			// check for length avoids error when initializing empty list
+-			if ( o.selected >= 0 && this.anchors.length ) {
+-				self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" );
+-				this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" );
+-
+-				// seems to be expected behavior that the show callback is fired
+-				self.element.queue( "tabs", function() {
+-					self._trigger( "show", null,
+-						self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) );
+-				});
+-
+-				this.load( o.selected );
+-			}
+-
+-			// clean up to avoid memory leaks in certain versions of IE 6
+-			// TODO: namespace this event
+-			$( window ).bind( "unload", function() {
+-				self.lis.add( self.anchors ).unbind( ".tabs" );
+-				self.lis = self.anchors = self.panels = null;
+-			});
+-		// update selected after add/remove
+-		} else {
+-			o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) );
+-		}
+-
+-		// update collapsible
+-		// TODO: use .toggleClass()
+-		this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" );
+-
+-		// set or update cookie after init and add/remove respectively
+-		if ( o.cookie ) {
+-			this._cookie( o.selected, o.cookie );
+-		}
+-
+-		// disable tabs
+-		for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
+-			$( li )[ $.inArray( i, o.disabled ) != -1 &&
+-				// TODO: use .toggleClass()
+-				!$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" );
+-		}
+-
+-		// reset cache if switching from cached to not cached
+-		if ( o.cache === false ) {
+-			this.anchors.removeData( "cache.tabs" );
+-		}
+-
+-		// remove all handlers before, tabify may run on existing tabs after add or option change
+-		this.lis.add( this.anchors ).unbind( ".tabs" );
+-
+-		if ( o.event !== "mouseover" ) {
+-			var addState = function( state, el ) {
+-				if ( el.is( ":not(.ui-state-disabled)" ) ) {
+-					el.addClass( "ui-state-" + state );
+-				}
+-			};
+-			var removeState = function( state, el ) {
+-				el.removeClass( "ui-state-" + state );
+-			};
+-			this.lis.bind( "mouseover.tabs" , function() {
+-				addState( "hover", $( this ) );
+-			});
+-			this.lis.bind( "mouseout.tabs", function() {
+-				removeState( "hover", $( this ) );
+-			});
+-			this.anchors.bind( "focus.tabs", function() {
+-				addState( "focus", $( this ).closest( "li" ) );
+-			});
+-			this.anchors.bind( "blur.tabs", function() {
+-				removeState( "focus", $( this ).closest( "li" ) );
+-			});
+-		}
+-
+-		// set up animations
+-		var hideFx, showFx;
+-		if ( o.fx ) {
+-			if ( $.isArray( o.fx ) ) {
+-				hideFx = o.fx[ 0 ];
+-				showFx = o.fx[ 1 ];
+-			} else {
+-				hideFx = showFx = o.fx;
+-			}
+-		}
+-
+-		// Reset certain styles left over from animation
+-		// and prevent IE's ClearType bug...
+-		function resetStyle( $el, fx ) {
+-			$el.css( "display", "" );
+-			if ( !$.support.opacity && fx.opacity ) {
+-				$el[ 0 ].style.removeAttribute( "filter" );
+-			}
+-		}
+-
+-		// Show a tab...
+-		var showTab = showFx
+-			? function( clicked, $show ) {
+-				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
+-				$show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way
+-					.animate( showFx, showFx.duration || "normal", function() {
+-						resetStyle( $show, showFx );
+-						self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
+-					});
+-			}
+-			: function( clicked, $show ) {
+-				$( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" );
+-				$show.removeClass( "ui-tabs-hide" );
+-				self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) );
+-			};
+-
+-		// Hide a tab, $show is optional...
+-		var hideTab = hideFx
+-			? function( clicked, $hide ) {
+-				$hide.animate( hideFx, hideFx.duration || "normal", function() {
+-					self.lis.removeClass( "ui-tabs-selected ui-state-active" );
+-					$hide.addClass( "ui-tabs-hide" );
+-					resetStyle( $hide, hideFx );
+-					self.element.dequeue( "tabs" );
+-				});
+-			}
+-			: function( clicked, $hide, $show ) {
+-				self.lis.removeClass( "ui-tabs-selected ui-state-active" );
+-				$hide.addClass( "ui-tabs-hide" );
+-				self.element.dequeue( "tabs" );
+-			};
+-
+-		// attach tab event handler, unbind to avoid duplicates from former tabifying...
+-		this.anchors.bind( o.event + ".tabs", function() {
+-			var el = this,
+-				$li = $(el).closest( "li" ),
+-				$hide = self.panels.filter( ":not(.ui-tabs-hide)" ),
+-				$show = self.element.find( self._sanitizeSelector( el.hash ) );
+-
+-			// If tab is already selected and not collapsible or tab disabled or
+-			// or is already loading or click callback returns false stop here.
+-			// Check if click handler returns false last so that it is not executed
+-			// for a disabled or loading tab!
+-			if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) ||
+-				$li.hasClass( "ui-state-disabled" ) ||
+-				$li.hasClass( "ui-state-processing" ) ||
+-				self.panels.filter( ":animated" ).length ||
+-				self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) {
+-				this.blur();
+-				return false;
+-			}
+-
+-			o.selected = self.anchors.index( this );
+-
+-			self.abort();
+-
+-			// if tab may be closed
+-			if ( o.collapsible ) {
+-				if ( $li.hasClass( "ui-tabs-selected" ) ) {
+-					o.selected = -1;
+-
+-					if ( o.cookie ) {
+-						self._cookie( o.selected, o.cookie );
+-					}
+-
+-					self.element.queue( "tabs", function() {
+-						hideTab( el, $hide );
+-					}).dequeue( "tabs" );
+-
+-					this.blur();
+-					return false;
+-				} else if ( !$hide.length ) {
+-					if ( o.cookie ) {
+-						self._cookie( o.selected, o.cookie );
+-					}
+-
+-					self.element.queue( "tabs", function() {
+-						showTab( el, $show );
+-					});
+-
+-					// TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
+-					self.load( self.anchors.index( this ) );
+-
+-					this.blur();
+-					return false;
+-				}
+-			}
+-
+-			if ( o.cookie ) {
+-				self._cookie( o.selected, o.cookie );
+-			}
+-
+-			// show new tab
+-			if ( $show.length ) {
+-				if ( $hide.length ) {
+-					self.element.queue( "tabs", function() {
+-						hideTab( el, $hide );
+-					});
+-				}
+-				self.element.queue( "tabs", function() {
+-					showTab( el, $show );
+-				});
+-
+-				self.load( self.anchors.index( this ) );
+-			} else {
+-				throw "jQuery UI Tabs: Mismatching fragment identifier.";
+-			}
+-
+-			// Prevent IE from keeping other link focussed when using the back button
+-			// and remove dotted border from clicked link. This is controlled via CSS
+-			// in modern browsers; blur() removes focus from address bar in Firefox
+-			// which can become a usability and annoying problem with tabs('rotate').
+-			if ( $.browser.msie ) {
+-				this.blur();
+-			}
+-		});
+-
+-		// disable click in any case
+-		this.anchors.bind( "click.tabs", function(){
+-			return false;
+-		});
+-	},
+-
+-    _getIndex: function( index ) {
+-		// meta-function to give users option to provide a href string instead of a numerical index.
+-		// also sanitizes numerical indexes to valid values.
+-		if ( typeof index == "string" ) {
+-			index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) );
+-		}
+-
+-		return index;
+-	},
+-
+-	destroy: function() {
+-		var o = this.options;
+-
+-		this.abort();
+-
+-		this.element
+-			.unbind( ".tabs" )
+-			.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" )
+-			.removeData( "tabs" );
+-
+-		this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" );
+-
+-		this.anchors.each(function() {
+-			var href = $.data( this, "href.tabs" );
+-			if ( href ) {
+-				this.href = href;
+-			}
+-			var $this = $( this ).unbind( ".tabs" );
+-			$.each( [ "href", "load", "cache" ], function( i, prefix ) {
+-				$this.removeData( prefix + ".tabs" );
+-			});
+-		});
+-
+-		this.lis.unbind( ".tabs" ).add( this.panels ).each(function() {
+-			if ( $.data( this, "destroy.tabs" ) ) {
+-				$( this ).remove();
+-			} else {
+-				$( this ).removeClass([
+-					"ui-state-default",
+-					"ui-corner-top",
+-					"ui-tabs-selected",
+-					"ui-state-active",
+-					"ui-state-hover",
+-					"ui-state-focus",
+-					"ui-state-disabled",
+-					"ui-tabs-panel",
+-					"ui-widget-content",
+-					"ui-corner-bottom",
+-					"ui-tabs-hide"
+-				].join( " " ) );
+-			}
+-		});
+-
+-		if ( o.cookie ) {
+-			this._cookie( null, o.cookie );
+-		}
+-
+-		return this;
+-	},
+-
+-	add: function( url, label, index ) {
+-		if ( index === undefined ) {
+-			index = this.anchors.length;
+-		}
+-
+-		var self = this,
+-			o = this.options,
+-			$li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ),
+-			id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] );
+-
+-		$li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true );
+-
+-		// try to find an existing element before creating a new one
+-		var $panel = self.element.find( "#" + id );
+-		if ( !$panel.length ) {
+-			$panel = $( o.panelTemplate )
+-				.attr( "id", id )
+-				.data( "destroy.tabs", true );
+-		}
+-		$panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );
+-
+-		if ( index >= this.lis.length ) {
+-			$li.appendTo( this.list );
+-			$panel.appendTo( this.list[ 0 ].parentNode );
+-		} else {
+-			$li.insertBefore( this.lis[ index ] );
+-			$panel.insertBefore( this.panels[ index ] );
+-		}
+-
+-		o.disabled = $.map( o.disabled, function( n, i ) {
+-			return n >= index ? ++n : n;
+-		});
+-
+-		this._tabify();
+-
+-		if ( this.anchors.length == 1 ) {
+-			o.selected = 0;
+-			$li.addClass( "ui-tabs-selected ui-state-active" );
+-			$panel.removeClass( "ui-tabs-hide" );
+-			this.element.queue( "tabs", function() {
+-				self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) );
+-			});
+-
+-			this.load( 0 );
+-		}
+-
+-		this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+-		return this;
+-	},
+-
+-	remove: function( index ) {
+-		index = this._getIndex( index );
+-		var o = this.options,
+-			$li = this.lis.eq( index ).remove(),
+-			$panel = this.panels.eq( index ).remove();
+-
+-		// If selected tab was removed focus tab to the right or
+-		// in case the last tab was removed the tab to the left.
+-		if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) {
+-			this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );
+-		}
+-
+-		o.disabled = $.map(
+-			$.grep( o.disabled, function(n, i) {
+-				return n != index;
+-			}),
+-			function( n, i ) {
+-				return n >= index ? --n : n;
+-			});
+-
+-		this._tabify();
+-
+-		this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) );
+-		return this;
+-	},
+-
+-	enable: function( index ) {
+-		index = this._getIndex( index );
+-		var o = this.options;
+-		if ( $.inArray( index, o.disabled ) == -1 ) {
+-			return;
+-		}
+-
+-		this.lis.eq( index ).removeClass( "ui-state-disabled" );
+-		o.disabled = $.grep( o.disabled, function( n, i ) {
+-			return n != index;
+-		});
+-
+-		this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+-		return this;
+-	},
+-
+-	disable: function( index ) {
+-		index = this._getIndex( index );
+-		var self = this, o = this.options;
+-		// cannot disable already selected tab
+-		if ( index != o.selected ) {
+-			this.lis.eq( index ).addClass( "ui-state-disabled" );
+-
+-			o.disabled.push( index );
+-			o.disabled.sort();
+-
+-			this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );
+-		}
+-
+-		return this;
+-	},
+-
+-	select: function( index ) {
+-		index = this._getIndex( index );
+-		if ( index == -1 ) {
+-			if ( this.options.collapsible && this.options.selected != -1 ) {
+-				index = this.options.selected;
+-			} else {
+-				return this;
+-			}
+-		}
+-		this.anchors.eq( index ).trigger( this.options.event + ".tabs" );
+-		return this;
+-	},
+-
+-	load: function( index ) {
+-		index = this._getIndex( index );
+-		var self = this,
+-			o = this.options,
+-			a = this.anchors.eq( index )[ 0 ],
+-			url = $.data( a, "load.tabs" );
+-
+-		this.abort();
+-
+-		// not remote or from cache
+-		if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) {
+-			this.element.dequeue( "tabs" );
+-			return;
+-		}
+-
+-		// load remote from here on
+-		this.lis.eq( index ).addClass( "ui-state-processing" );
+-
+-		if ( o.spinner ) {
+-			var span = $( "span", a );
+-			span.data( "label.tabs", span.html() ).html( o.spinner );
+-		}
+-
+-		this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {
+-			url: url,
+-			success: function( r, s ) {
+-				self.element.find( self._sanitizeSelector( a.hash ) ).html( r );
+-
+-				// take care of tab labels
+-				self._cleanup();
+-
+-				if ( o.cache ) {
+-					$.data( a, "cache.tabs", true );
+-				}
+-
+-				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
+-				try {
+-					o.ajaxOptions.success( r, s );
+-				}
+-				catch ( e ) {}
+-			},
+-			error: function( xhr, s, e ) {
+-				// take care of tab labels
+-				self._cleanup();
+-
+-				self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );
+-				try {
+-					// Passing index avoid a race condition when this method is
+-					// called after the user has selected another tab.
+-					// Pass the anchor that initiated this request allows
+-					// loadError to manipulate the tab content panel via $(a.hash)
+-					o.ajaxOptions.error( xhr, s, index, a );
+-				}
+-				catch ( e ) {}
+-			}
+-		} ) );
+-
+-		// last, so that load event is fired before show...
+-		self.element.dequeue( "tabs" );
+-
+-		return this;
+-	},
+-
+-	abort: function() {
+-		// stop possibly running animations
+-		this.element.queue( [] );
+-		this.panels.stop( false, true );
+-
+-		// "tabs" queue must not contain more than two elements,
+-		// which are the callbacks for the latest clicked tab...
+-		this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) );
+-
+-		// terminate pending requests from other tabs
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-			delete this.xhr;
+-		}
+-
+-		// take care of tab labels
+-		this._cleanup();
+-		return this;
+-	},
+-
+-	url: function( index, url ) {
+-		this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url );
+-		return this;
+-	},
+-
+-	length: function() {
+-		return this.anchors.length;
+-	}
+-});
+-
+-$.extend( $.ui.tabs, {
+-	version: "1.8.15"
+-});
+-
+-/*
+- * Tabs Extensions
+- */
+-
+-/*
+- * Rotate
+- */
+-$.extend( $.ui.tabs.prototype, {
+-	rotation: null,
+-	rotate: function( ms, continuing ) {
+-		var self = this,
+-			o = this.options;
+-
+-		var rotate = self._rotate || ( self._rotate = function( e ) {
+-			clearTimeout( self.rotation );
+-			self.rotation = setTimeout(function() {
+-				var t = o.selected;
+-				self.select( ++t < self.anchors.length ? t : 0 );
+-			}, ms );
+-			
+-			if ( e ) {
+-				e.stopPropagation();
+-			}
+-		});
+-
+-		var stop = self._unrotate || ( self._unrotate = !continuing
+-			? function(e) {
+-				if (e.clientX) { // in case of a true click
+-					self.rotate(null);
+-				}
+-			}
+-			: function( e ) {
+-				t = o.selected;
+-				rotate();
+-			});
+-
+-		// start rotation
+-		if ( ms ) {
+-			this.element.bind( "tabsshow", rotate );
+-			this.anchors.bind( o.event + ".tabs", stop );
+-			rotate();
+-		// stop rotation
+-		} else {
+-			clearTimeout( self.rotation );
+-			this.element.unbind( "tabsshow", rotate );
+-			this.anchors.unbind( o.event + ".tabs", stop );
+-			delete this._rotate;
+-			delete this._unrotate;
+-		}
+-
+-		return this;
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.min.js	(revision 15488)
+@@ -1,413 +0,0 @@
+-/*!
+- * jQuery UI 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI
+- */
+-(function(a,c){function d(h,g){var i=h.nodeName.toLowerCase();if("area"===i){g=h.parentNode;i=g.name;if(!h.href||!i||g.nodeName.toLowerCase()!=="map")return false;h=a("img[usemap=#"+i+"]")[0];return!!h&&e(h)}return(/input|select|textarea|button|object/.test(i)?!h.disabled:"a"==i?h.href||g:g)&&e(h)}function e(h){return!a(h).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.8.15",
+-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(h,g){return typeof h==="number"?this.each(function(){var i=
+-this;setTimeout(function(){a(i).focus();g&&g.call(i)},h)}):this._focus.apply(this,arguments)},scrollParent:function(){var h;h=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,
+-"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!h.length?a(document):h},zIndex:function(h){if(h!==c)return this.css("zIndex",h);if(this.length){h=a(this[0]);for(var g;h.length&&h[0]!==document;){g=h.css("position");if(g==="absolute"||g==="relative"||g==="fixed"){g=parseInt(h.css("zIndex"),10);if(!isNaN(g)&&g!==0)return g}h=h.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":
+-"mousedown")+".ui-disableSelection",function(h){h.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(h,g){function i(l,o,n,k){a.each(b,function(){o-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(n)o-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(k)o-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return o}var b=g==="Width"?["Left","Right"]:["Top","Bottom"],f=g.toLowerCase(),j={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,
+-outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+g]=function(l){if(l===c)return j["inner"+g].call(this);return this.each(function(){a(this).css(f,i(this,l)+"px")})};a.fn["outer"+g]=function(l,o){if(typeof l!=="number")return j["outer"+g].call(this,l);return this.each(function(){a(this).css(f,i(this,l,true,o)+"px")})}});a.extend(a.expr[":"],{data:function(h,g,i){return!!a.data(h,i[3])},focusable:function(h){return d(h,!isNaN(a.attr(h,"tabindex")))},tabbable:function(h){var g=a.attr(h,
+-"tabindex"),i=isNaN(g);return(i||g>=0)&&d(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&&
+-h.element[0].parentNode)for(var b=0;b<g.length;b++)h.options[g[b][0]]&&g[b][1].apply(h.element,i)}},contains:function(h,g){return document.compareDocumentPosition?h.compareDocumentPosition(g)&16:h!==g&&h.contains(g)},hasScroll:function(h,g){if(a(h).css("overflow")==="hidden")return false;g=g&&g==="left"?"scrollLeft":"scrollTop";var i=false;if(h[g]>0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h<g+i},isOver:function(h,g,i,b,f,j){return a.ui.isOverAxis(h,i,f)&&
+-a.ui.isOverAxis(g,b,j)}})}})(jQuery);
+-(function(a,c){if(a.cleanData){var d=a.cleanData;a.cleanData=function(h){for(var g=0,i;(i=h[g])!=null;g++)a(i).triggerHandler("remove");d(h)}}else{var e=a.fn.remove;a.fn.remove=function(h,g){return this.each(function(){if(!g)if(!h||a.filter(h,[this]).length)a("*",this).add([this]).each(function(){a(this).triggerHandler("remove")});return e.call(a(this),h,g)})}}a.widget=function(h,g,i){var b=h.split(".")[0],f;h=h.split(".")[1];f=b+"-"+h;if(!i){i=g;g=a.Widget}a.expr[":"][f]=function(j){return!!a.data(j,
+-h)};a[b]=a[b]||{};a[b][h]=function(j,l){arguments.length&&this._createWidget(j,l)};g=new g;g.options=a.extend(true,{},g.options);a[b][h].prototype=a.extend(true,g,{namespace:b,widgetName:h,widgetEventPrefix:a[b][h].prototype.widgetEventPrefix||h,widgetBaseClass:f},i);a.widget.bridge(h,a[b][h])};a.widget.bridge=function(h,g){a.fn[h]=function(i){var b=typeof i==="string",f=Array.prototype.slice.call(arguments,1),j=this;i=!b&&f.length?a.extend.apply(null,[true,i].concat(f)):i;if(b&&i.charAt(0)==="_")return j;
+-b?this.each(function(){var l=a.data(this,h),o=l&&a.isFunction(l[i])?l[i].apply(l,f):l;if(o!==l&&o!==c){j=o;return false}}):this.each(function(){var l=a.data(this,h);l?l.option(i||{})._init():a.data(this,h,new g(i,this))});return j}};a.Widget=function(h,g){arguments.length&&this._createWidget(h,g)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(h,g){a.data(g,this.widgetName,this);this.element=a(g);this.options=a.extend(true,{},this.options,
+-this._getCreateOptions(),h);var i=this;this.element.bind("remove."+this.widgetName,function(){i.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
+-widget:function(){return this.element},option:function(h,g){var i=h;if(arguments.length===0)return a.extend({},this.options);if(typeof h==="string"){if(g===c)return this.options[h];i={};i[h]=g}this._setOptions(i);return this},_setOptions:function(h){var g=this;a.each(h,function(i,b){g._setOption(i,b)});return this},_setOption:function(h,g){this.options[h]=g;if(h==="disabled")this.widget()[g?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",g);return this},
+-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(h,g,i){var b=this.options[h];g=a.Event(g);g.type=(h===this.widgetEventPrefix?h:this.widgetEventPrefix+h).toLowerCase();i=i||{};if(g.originalEvent){h=a.event.props.length;for(var f;h;){f=a.event.props[--h];g[f]=g.originalEvent[f]}}this.element.trigger(g,i);return!(a.isFunction(b)&&b.call(this.element[0],g,i)===false||g.isDefaultPrevented())}}})(jQuery);
+-(function(a){a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(d){return c._mouseDown(d)}).bind("click."+this.widgetName,function(d){if(true===a.data(d.target,c.widgetName+".preventClickEvent")){a.removeData(d.target,c.widgetName+".preventClickEvent");d.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(c){c.originalEvent=
+-c.originalEvent||{};if(!c.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var d=this,e=c.which==1,h=typeof this.options.cancel=="string"?a(c.target).closest(this.options.cancel).length:false;if(!e||h||!this._mouseCapture(c))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)){this._mouseStarted=this._mouseStart(c)!==
+-false;if(!this._mouseStarted){c.preventDefault();return true}}true===a.data(c.target,this.widgetName+".preventClickEvent")&&a.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(g){return d._mouseMove(g)};this._mouseUpDelegate=function(g){return d._mouseUp(g)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return c.originalEvent.mouseHandled=true}},_mouseMove:function(c){if(a.browser.msie&&
+-!(document.documentMode>=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+-false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+-(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(c){var d=
+-this.options;if(this.helper||d.disabled||a(c.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(c);if(!this.handle)return false;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(c){var d=this.options;this.helper=
+-this._createHelper(c);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:c.pageX-this.offset.left,top:c.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+-this.originalPosition=this.position=this._generatePosition(c);this.originalPageX=c.pageX;this.originalPageY=c.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);d.containment&&this._setContainment();if(this._trigger("start",c)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,c);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(c,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,c);return true},
+-_mouseDrag:function(c,d){this.position=this._generatePosition(c);this.positionAbs=this._convertPositionTo("absolute");if(!d){d=this._uiHash();if(this._trigger("drag",c,d)===false){this._mouseUp({});return false}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,c);return false},_mouseStop:function(c){var d=
+-false;if(a.ui.ddmanager&&!this.options.dropBehaviour)d=a.ui.ddmanager.drop(this,c);if(this.dropped){d=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!d||this.options.revert=="valid"&&d||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
+-10),function(){e._trigger("stop",c)!==false&&e._clear()})}else this._trigger("stop",c)!==false&&this._clear();return false},_mouseUp:function(c){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,c);return a.ui.mouse.prototype._mouseUp.call(this,c)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(c){var d=!this.options.handle||
+-!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==c.target)d=true});return d},_createHelper:function(c){var d=this.options;c=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):d.helper=="clone"?this.element.clone().removeAttr("id"):this.element;c.parents("body").length||c.appendTo(d.appendTo=="parent"?this.element[0].parentNode:d.appendTo);c[0]!=this.element[0]&&!/(fixed|absolute)/.test(c.css("position"))&&
+-c.css("position","absolute");return c},_adjustOffsetFromHelper:function(c){if(typeof c=="string")c=c.split(" ");if(a.isArray(c))c={left:+c[0],top:+c[1]||0};if("left"in c)this.offset.click.left=c.left+this.margins.left;if("right"in c)this.offset.click.left=this.helperProportions.width-c.right+this.margins.left;if("top"in c)this.offset.click.top=c.top+this.margins.top;if("bottom"in c)this.offset.click.top=this.helperProportions.height-c.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
+-this.helper.offsetParent();var c=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){c.left+=this.scrollParent.scrollLeft();c.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)c={top:0,left:0};return{top:c.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:c.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+-10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var c=this.element.position();return{top:c.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:c.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
+-10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var c=this.options;if(c.containment=="parent")c.containment=this.helper[0].parentNode;if(c.containment=="document"||c.containment=="window")this.containment=[c.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,c.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
+-(c.containment=="document"?0:a(window).scrollLeft())+a(c.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(c.containment=="document"?0:a(window).scrollTop())+(a(c.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(c.containment)&&c.containment.constructor!=Array){c=a(c.containment);var d=c[0];if(d){c.offset();var e=a(d).css("overflow")!=
+-"hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(e?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),
+-10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=c}}else if(c.containment.constructor==Array)this.containment=c.containment},_convertPositionTo:function(c,d){if(!d)d=this.position;c=c=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:d.top+
+-this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*c)}},_generatePosition:function(c){var d=this.options,e=this.cssPosition=="absolute"&&
+-!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=c.pageX,i=c.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(c.pageX-this.offset.click.left<b[0])g=b[0]+this.offset.click.left;
+-if(c.pageY-this.offset.click.top<b[1])i=b[1]+this.offset.click.top;if(c.pageX-this.offset.click.left>b[2])g=b[2]+this.offset.click.left;if(c.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(d.grid){i=d.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/d.grid[1])*d.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.top<b[1]||i-this.offset.click.top>b[3])?i:!(i-this.offset.click.top<b[1])?i-d.grid[1]:i+d.grid[1]:i;g=d.grid[0]?this.originalPageX+Math.round((g-this.originalPageX)/
+-d.grid[0])*d.grid[0]:this.originalPageX;g=b?!(g-this.offset.click.left<b[0]||g-this.offset.click.left>b[2])?g:!(g-this.offset.click.left<b[0])?g-d.grid[0]:g+d.grid[0]:g}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<
+-526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(c,d,e){e=e||this._uiHash();a.ui.plugin.call(this,c,[d,e]);if(c=="drag")this.positionAbs=this._convertPositionTo("absolute");return a.Widget.prototype._trigger.call(this,c,d,
+-e)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8.15"});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,d){var e=a(this).data("draggable"),h=e.options,g=a.extend({},d,{item:e.element});e.sortables=[];a(h.connectToSortable).each(function(){var i=a.data(this,"sortable");if(i&&!i.options.disabled){e.sortables.push({instance:i,shouldRevert:i.options.revert});
+-i.refreshPositions();i._trigger("activate",c,g)}})},stop:function(c,d){var e=a(this).data("draggable"),h=a.extend({},d,{item:e.element});a.each(e.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;e.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;e.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
+-false;this.instance._trigger("deactivate",c,h)}})},drag:function(c,d){var e=a(this).data("draggable"),h=this;a.each(e.sortables,function(){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(h).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
+-this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return d.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;
+-e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}this.instance.currentItem&&this.instance._mouseDrag(c)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
+-this.instance.placeholder.remove();e._trigger("fromSortable",c);e.dropped=false}})}});a.ui.plugin.add("draggable","cursor",{start:function(){var c=a("body"),d=a(this).data("draggable").options;if(c.css("cursor"))d._cursor=c.css("cursor");c.css("cursor",d.cursor)},stop:function(){var c=a(this).data("draggable").options;c._cursor&&a("body").css("cursor",c._cursor)}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){c=a(d.helper);d=a(this).data("draggable").options;if(c.css("opacity"))d._opacity=
+-c.css("opacity");c.css("opacity",d.opacity)},stop:function(c,d){c=a(this).data("draggable").options;c._opacity&&a(d.helper).css("opacity",c._opacity)}});a.ui.plugin.add("draggable","scroll",{start:function(){var c=a(this).data("draggable");if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML")c.overflowOffset=c.scrollParent.offset()},drag:function(c){var d=a(this).data("draggable"),e=d.options,h=false;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!=
+-"x")if(d.overflowOffset.top+d.scrollParent[0].offsetHeight-c.pageY<e.scrollSensitivity)d.scrollParent[0].scrollTop=h=d.scrollParent[0].scrollTop+e.scrollSpeed;else if(c.pageY-d.overflowOffset.top<e.scrollSensitivity)d.scrollParent[0].scrollTop=h=d.scrollParent[0].scrollTop-e.scrollSpeed;if(!e.axis||e.axis!="y")if(d.overflowOffset.left+d.scrollParent[0].offsetWidth-c.pageX<e.scrollSensitivity)d.scrollParent[0].scrollLeft=h=d.scrollParent[0].scrollLeft+e.scrollSpeed;else if(c.pageX-d.overflowOffset.left<
+-e.scrollSensitivity)d.scrollParent[0].scrollLeft=h=d.scrollParent[0].scrollLeft-e.scrollSpeed}else{if(!e.axis||e.axis!="x")if(c.pageY-a(document).scrollTop()<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed);else if(a(window).height()-(c.pageY-a(document).scrollTop())<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed);if(!e.axis||e.axis!="y")if(c.pageX-a(document).scrollLeft()<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()-
+-e.scrollSpeed);else if(a(window).width()-(c.pageX-a(document).scrollLeft())<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed)}h!==false&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,c)}});a.ui.plugin.add("draggable","snap",{start:function(){var c=a(this).data("draggable"),d=c.options;c.snapElements=[];a(d.snap.constructor!=String?d.snap.items||":data(draggable)":d.snap).each(function(){var e=a(this),h=e.offset();this!=c.element[0]&&c.snapElements.push({item:this,
+-width:e.outerWidth(),height:e.outerHeight(),top:h.top,left:h.left})})},drag:function(c,d){for(var e=a(this).data("draggable"),h=e.options,g=h.snapTolerance,i=d.offset.left,b=i+e.helperProportions.width,f=d.offset.top,j=f+e.helperProportions.height,l=e.snapElements.length-1;l>=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g<i&&i<n+g&&k-g<f&&f<m+g||o-g<i&&i<n+g&&k-g<j&&j<m+g||o-g<b&&b<n+g&&k-g<f&&f<m+g||o-g<b&&b<n+g&&k-g<j&&
+-j<m+g){if(h.snapMode!="inner"){var p=Math.abs(k-j)<=g,q=Math.abs(m-f)<=g,s=Math.abs(o-b)<=g,r=Math.abs(n-i)<=g;if(p)d.position.top=e._convertPositionTo("relative",{top:k-e.helperProportions.height,left:0}).top-e.margins.top;if(q)d.position.top=e._convertPositionTo("relative",{top:m,left:0}).top-e.margins.top;if(s)d.position.left=e._convertPositionTo("relative",{top:0,left:o-e.helperProportions.width}).left-e.margins.left;if(r)d.position.left=e._convertPositionTo("relative",{top:0,left:n}).left-e.margins.left}var u=
+-p||q||s||r;if(h.snapMode!="outer"){p=Math.abs(k-f)<=g;q=Math.abs(m-j)<=g;s=Math.abs(o-i)<=g;r=Math.abs(n-b)<=g;if(p)d.position.top=e._convertPositionTo("relative",{top:k,left:0}).top-e.margins.top;if(q)d.position.top=e._convertPositionTo("relative",{top:m-e.helperProportions.height,left:0}).top-e.margins.top;if(s)d.position.left=e._convertPositionTo("relative",{top:0,left:o}).left-e.margins.left;if(r)d.position.left=e._convertPositionTo("relative",{top:0,left:n-e.helperProportions.width}).left-e.margins.left}if(!e.snapElements[l].snapping&&
+-(p||q||s||r||u))e.options.snap.snap&&e.options.snap.snap.call(e.element,c,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=p||q||s||r||u}else{e.snapElements[l].snapping&&e.options.snap.release&&e.options.snap.release.call(e.element,c,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=false}}}});a.ui.plugin.add("draggable","stack",{start:function(){var c=a(this).data("draggable").options;c=a.makeArray(a(c.stack)).sort(function(e,h){return(parseInt(a(e).css("zIndex"),
+-10)||0)-(parseInt(a(h).css("zIndex"),10)||0)});if(c.length){var d=parseInt(c[0].style.zIndex)||0;a(c).each(function(e){this.style.zIndex=d+e});this[0].style.zIndex=d+c.length}}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){c=a(d.helper);d=a(this).data("draggable").options;if(c.css("zIndex"))d._zIndex=c.css("zIndex");c.css("zIndex",d.zIndex)},stop:function(c,d){c=a(this).data("draggable").options;c._zIndex&&a(d.helper).css("zIndex",c._zIndex)}})})(jQuery);
+-(function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var c=this.options,d=c.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(d)?d:function(e){return e.is(d)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[c.scope]=a.ui.ddmanager.droppables[c.scope]||[];a.ui.ddmanager.droppables[c.scope].push(this);
+-c.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var c=a.ui.ddmanager.droppables[this.options.scope],d=0;d<c.length;d++)c[d]==this&&c.splice(d,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(c,d){if(c=="accept")this.accept=a.isFunction(d)?d:function(e){return e.is(d)};a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(c){var d=a.ui.ddmanager.current;this.options.activeClass&&
+-this.element.addClass(this.options.activeClass);d&&this._trigger("activate",c,this.ui(d))},_deactivate:function(c){var d=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);d&&this._trigger("deactivate",c,this.ui(d))},_over:function(c){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+-this._trigger("over",c,this.ui(d))}},_out:function(c){var d=a.ui.ddmanager.current;if(!(!d||(d.currentItem||d.element)[0]==this.element[0]))if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",c,this.ui(d))}},_drop:function(c,d){var e=d||a.ui.ddmanager.current;if(!e||(e.currentItem||e.element)[0]==this.element[0])return false;var h=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+-a.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==e.options.scope&&g.accept.call(g.element[0],e.currentItem||e.element)&&a.ui.intersect(e,a.extend(g,{offset:g.element.offset()}),g.options.tolerance)){h=true;return false}});if(h)return false;if(this.accept.call(this.element[0],e.currentItem||e.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+-c,this.ui(e));return this.element}return false},ui:function(c){return{draggable:c.currentItem||c.element,helper:c.helper,position:c.position,offset:c.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8.15"});a.ui.intersect=function(c,d,e){if(!d.offset)return false;var h=(c.positionAbs||c.position.absolute).left,g=h+c.helperProportions.width,i=(c.positionAbs||c.position.absolute).top,b=i+c.helperProportions.height,f=d.offset.left,j=f+d.proportions.width,l=d.offset.top,o=l+d.proportions.height;
+-switch(e){case "fit":return f<=h&&g<=j&&l<=i&&b<=o;case "intersect":return f<h+c.helperProportions.width/2&&g-c.helperProportions.width/2<j&&l<i+c.helperProportions.height/2&&b-c.helperProportions.height/2<o;case "pointer":return a.ui.isOver((c.positionAbs||c.position.absolute).top+(c.clickOffset||c.offset.click).top,(c.positionAbs||c.position.absolute).left+(c.clickOffset||c.offset.click).left,l,f,d.proportions.height,d.proportions.width);case "touch":return(i>=l&&i<=o||b>=l&&b<=o||i<l&&b>o)&&(h>=
+-f&&h<=j||g>=f&&g<=j||h<f&&g>j);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(c,d){var e=a.ui.ddmanager.droppables[c.options.scope]||[],h=d?d.type:null,g=(c.currentItem||c.element).find(":data(droppable)").andSelf(),i=0;a:for(;i<e.length;i++)if(!(e[i].options.disabled||c&&!e[i].accept.call(e[i].element[0],c.currentItem||c.element))){for(var b=0;b<g.length;b++)if(g[b]==e[i].element[0]){e[i].proportions.height=0;continue a}e[i].visible=e[i].element.css("display")!=
+-"none";if(e[i].visible){h=="mousedown"&&e[i]._activate.call(e[i],d);e[i].offset=e[i].element.offset();e[i].proportions={width:e[i].element[0].offsetWidth,height:e[i].element[0].offsetHeight}}}},drop:function(c,d){var e=false;a.each(a.ui.ddmanager.droppables[c.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&a.ui.intersect(c,this,this.options.tolerance))e=e||this._drop.call(this,d);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],c.currentItem||
+-c.element)){this.isout=1;this.isover=0;this._deactivate.call(this,d)}}});return e},dragStart:function(c,d){c.element.parentsUntil("body").bind("scroll.droppable",function(){c.options.refreshPositions||a.ui.ddmanager.prepareOffsets(c,d)})},drag:function(c,d){c.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(c,d);a.each(a.ui.ddmanager.droppables[c.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var e=a.ui.intersect(c,this,this.options.tolerance);if(e=
+-!e&&this.isover==1?"isout":e&&this.isover==0?"isover":null){var h;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){h=a.data(g[0],"droppable");h.greedyChild=e=="isover"?1:0}}if(h&&e=="isover"){h.isover=0;h.isout=1;h._out.call(h,d)}this[e]=1;this[e=="isout"?"isover":"isout"]=0;this[e=="isover"?"_over":"_out"].call(this,d);if(h&&e=="isout"){h.isout=0;h.isover=1;h._over.call(h,d)}}}})},dragStop:function(c,d){c.element.parentsUntil("body").unbind("scroll.droppable");
+-c.options.refreshPositions||a.ui.ddmanager.prepareOffsets(c,d)}}})(jQuery);
+-(function(a){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var e=this,h=this.options;this.element.addClass("ui-resizable");a.extend(this,{_aspectRatio:!!h.aspectRatio,aspectRatio:h.aspectRatio,originalElement:this.element,
+-_proportionallyResizeElements:[],_helper:h.helper||h.ghost||h.animate?h.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i<g.length;i++){var b=a.trim(g[i]),f=a('<div class="ui-resizable-handle '+("ui-resizable-"+b)+'"></div>');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor==
+-String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection();
+-this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+-var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h=
+-false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"});
+-this._renderProxy();g=c(this.helper.css("left"));var b=c(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff=
+-{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis];
+-if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false},
+-_mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b,
+-{top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:d(h.minWidth)?h.minWidth:0,maxWidth:d(h.maxWidth)?h.maxWidth:Infinity,minHeight:d(h.minHeight)?h.minHeight:0,maxHeight:d(h.maxHeight)?h.maxHeight:
+-Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(g<h.maxWidth)h.maxWidth=g;if(b<h.maxHeight)h.maxHeight=b}this._vBoundaries=h},_updateCache:function(e){this.offset=this.helper.offset();if(d(e.left))this.position.left=e.left;if(d(e.top))this.position.top=e.top;if(d(e.height))this.size.height=e.height;if(d(e.width))this.size.width=
+-e.width},_updateRatio:function(e){var h=this.position,g=this.size,i=this.axis;if(d(e.height))e.width=e.height*this.aspectRatio;else if(d(e.width))e.height=e.width/this.aspectRatio;if(i=="sw"){e.left=h.left+(g.width-e.width);e.top=null}if(i=="nw"){e.top=h.top+(g.height-e.height);e.left=h.left+(g.width-e.width)}return e},_respectSize:function(e){var h=this._vBoundaries,g=this.axis,i=d(e.width)&&h.maxWidth&&h.maxWidth<e.width,b=d(e.height)&&h.maxHeight&&h.maxHeight<e.height,f=d(e.width)&&h.minWidth&&
+-h.minWidth>e.width,j=d(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left=
+-null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h<this._proportionallyResizeElements.length;h++){var g=this._proportionallyResizeElements[h];if(!this.borderDif){var i=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],b=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=a.map(i,function(f,j){f=parseInt(f,10)||
+-0;j=parseInt(b[j],10)||0;return f+j})}a.browser.msie&&(a(e).is(":hidden")||a(e).parents(":hidden").length)||g.css({height:e.height()-this.borderDif[0]-this.borderDif[2]||0,width:e.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var e=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
+-h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+
+-g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]);
+-e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.15"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(),
+-10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top-
+-b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?
+-a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h=
+-a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing,
+-step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement=
+-a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=c(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset;
+-var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left:
+-h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top-
+-i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition,
+-b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,
+-display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e=
+-a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height=
+-i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var c=function(e){return parseInt(e,10)||0},d=function(e){return!isNaN(parseInt(e,10))}})(jQuery);
+-(function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var d;this.refresh=function(){d=a(c.options.filter,c.element[0]);d.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"),
+-selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=d.addClass("ui-selectee");this._mouseInit();this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var d=this;this.opos=[c.pageX,
+-c.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",c);a(e.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!c.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;d._trigger("unselecting",
+-c,{unselecting:h.element})}});a(c.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!c.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?d._trigger("selecting",c,{selecting:h.element}):d._trigger("unselecting",c,{unselecting:h.element});return false}})}},_mouseDrag:function(c){var d=this;this.dragged=true;if(!this.options.disabled){var e=
+-this.options,h=this.opos[0],g=this.opos[1],i=c.pageX,b=c.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==d.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.right<h||j.top>b||j.bottom<g);else if(e.tolerance=="fit")l=j.left>h&&j.right<i&&j.top>g&&j.bottom<b;if(l){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");
+-j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;d._trigger("selecting",c,{selecting:j.element})}}else{if(j.selecting)if(c.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}d._trigger("unselecting",c,{unselecting:j.element})}if(j.selected)if(!c.metaKey&&
+-!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;d._trigger("unselecting",c,{unselecting:j.element})}}}});return false}},_mouseStop:function(c){var d=this;this.dragged=false;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;d._trigger("unselected",c,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=
+-a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;d._trigger("selected",c,{selected:e.element})});this._trigger("stop",c);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8.15"})})(jQuery);
+-(function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var c=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+-this.refresh();this.floating=this.items.length?c.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var c=this.items.length-1;c>=0;c--)this.items[c].item.removeData("sortable-item");return this},_setOption:function(c,d){if(c===
+-"disabled"){this.options[c]=d;this.widget()[d?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(c,d){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(c);var e=null,h=this;a(c.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(c.target,"sortable-item")==h)e=a(c.target);if(!e)return false;if(this.options.handle&&
+-!d){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==c.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(c,d,e){d=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(c);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:c.pageX-this.offset.left,top:c.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(c);this.originalPageX=c.pageX;this.originalPageY=c.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();d.containment&&this._setContainment();if(d.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",d.cursor)}if(d.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",d.opacity)}if(d.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",d.zIndex)}if(this.scrollParent[0]!=
+-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",c,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",c,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,c);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(c);
+-return true},_mouseDrag:function(c){this.position=this._generatePosition(c);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var d=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-c.pageY<d.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop+d.scrollSpeed;else if(c.pageY-this.overflowOffset.top<
+-d.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop-d.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-c.pageX<d.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft+d.scrollSpeed;else if(c.pageX-this.overflowOffset.left<d.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft-d.scrollSpeed}else{if(c.pageY-a(document).scrollTop()<d.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()-
+-d.scrollSpeed);else if(a(window).height()-(c.pageY-a(document).scrollTop())<d.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()+d.scrollSpeed);if(c.pageX-a(document).scrollLeft()<d.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()-d.scrollSpeed);else if(a(window).width()-(c.pageX-a(document).scrollLeft())<d.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()+d.scrollSpeed)}e!==false&&a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,
+-c)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(d=this.items.length-1;d>=0;d--){e=this.items[d];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],
+-h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(c,e);else break;this._trigger("change",c,this._uiHash());break}}this._contactContainers(c);a.ui.ddmanager&&a.ui.ddmanager.drag(this,c);this._trigger("sort",c,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(c){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,c);if(this.options.revert){var e=this;d=e.placeholder.offset();
+-e.reverting=true;a(this.helper).animate({left:d.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:d.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(c)})}else this._clear(c,d);return false}},cancel:function(){var c=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+-this.currentItem.show();for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("deactivate",null,c._uiHash(this));if(this.containers[d].containerCache.over){this.containers[d]._trigger("out",null,c._uiHash(this));this.containers[d].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null,
+-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(c){var d=this._getItemsAsjQuery(c&&c.connected),e=[];c=c||{};a(d).each(function(){var h=(a(c.item||this).attr(c.attribute||"id")||"").match(c.expression||/(.+)[-=_](.+)/);if(h)e.push((c.key||h[1]+"[]")+"="+(c.key&&c.expression?h[1]:h[2]))});!e.length&&c.key&&e.push(c.key+"=");return e.join("&")},
+-toArray:function(c){var d=this._getItemsAsjQuery(c&&c.connected),e=[];c=c||{};d.each(function(){e.push(a(c.item||this).attr(c.attribute||"id")||"")});return e},_intersectsWith:function(c){var d=this.positionAbs.left,e=d+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=c.left,b=i+c.width,f=c.top,j=f+c.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+l<j&&d+o>i&&d+o<b;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>c[this.floating?"width":"height"]?l:i<d+this.helperProportions.width/2&&e-this.helperProportions.width/2<b&&f<h+this.helperProportions.height/2&&g-this.helperProportions.height/2<j},_intersectsWithPointer:function(c){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,c.top,c.height);c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,c.left,c.width);d=d&&c;c=this._getDragVerticalDirection();
+-var e=this._getDragHorizontalDirection();if(!d)return false;return this.floating?e&&e=="right"||c=="down"?2:1:c&&(c=="down"?2:1)},_intersectsWithSides:function(c){var d=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,c.top+c.height/2,c.height);c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,c.left+c.width/2,c.width);var e=this._getDragVerticalDirection(),h=this._getDragHorizontalDirection();return this.floating&&h?h=="right"&&c||h=="left"&&!c:e&&(e=="down"&&d||e=="up"&&!d)},
+-_getDragVerticalDirection:function(){var c=this.positionAbs.top-this.lastPositionAbs.top;return c!=0&&(c>0?"down":"up")},_getDragHorizontalDirection:function(){var c=this.positionAbs.left-this.lastPositionAbs.left;return c!=0&&(c>0?"right":"left")},refresh:function(c){this._refreshItems(c);this.refreshPositions();return this},_connectWith:function(){var c=this.options;return c.connectWith.constructor==String?[c.connectWith]:c.connectWith},_getItemsAsjQuery:function(c){var d=[],e=[],h=this._connectWith();
+-if(h&&c)for(c=h.length-1;c>=0;c--)for(var g=a(h[c]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+-this]);for(c=e.length-1;c>=0;c--)e[c][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){for(var c=this.currentItem.find(":data(sortable-item)"),d=0;d<this.items.length;d++)for(var e=0;e<c.length;e++)c[e]==this.items[d].item[0]&&this.items.splice(d,1)},_refreshItems:function(c){this.items=[];this.containers=[this];var d=this.items,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],c,{item:this.currentItem}):a(this.options.items,this.element),
+-this]],h=this._connectWith();if(h)for(var g=h.length-1;g>=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],c,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){c=e[g][1];h=e[g][0];b=0;for(i=h.length;b<i;b++){f=a(h[b]);f.data("sortable-item",c);d.push({item:f,instance:c,width:0,height:0,left:0,top:0})}}},refreshPositions:function(c){if(this.offsetParent&&
+-this.helper)this.offset.parent=this._getParentOffset();for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!c){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(d=
+-this.containers.length-1;d>=0;d--){h=this.containers[d].element.offset();this.containers[d].containerCache.left=h.left;this.containers[d].containerCache.top=h.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}return this},_createPlaceholder:function(c){var d=c||this,e=d.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g=
+-a(document.createElement(d.currentItem[0].nodeName)).addClass(h||d.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(d.currentItem.innerHeight()-parseInt(d.currentItem.css("paddingTop")||0,10)-parseInt(d.currentItem.css("paddingBottom")||0,10));i.width()||i.width(d.currentItem.innerWidth()-parseInt(d.currentItem.css("paddingLeft")||0,10)-parseInt(d.currentItem.css("paddingRight")||
+-0,10))}}}}d.placeholder=a(e.placeholder.element.call(d.element,d.currentItem));d.currentItem.after(d.placeholder);e.placeholder.update(d,d.placeholder)},_contactContainers:function(c){for(var d=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(d&&a.ui.contains(this.containers[h].element[0],d.element[0]))){d=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out",
+-c,this._uiHash(this));this.containers[h].containerCache.over=0}if(d)if(this.containers.length===1){this.containers[e]._trigger("over",c,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){d=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b-
+-g)<d){d=Math.abs(b-g);h=this.items[i]}}if(h||this.options.dropOnEmpty){this.currentContainer=this.containers[e];h?this._rearrange(c,h,null,true):this._rearrange(c,null,this.containers[e].element,true);this._trigger("change",c,this._uiHash());this.containers[e]._trigger("change",c,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[e]._trigger("over",c,this._uiHash(this));this.containers[e].containerCache.over=1}}},_createHelper:function(c){var d=
+-this.options;c=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):d.helper=="clone"?this.currentItem.clone():this.currentItem;c.parents("body").length||a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(c[0]);if(c[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(c[0].style.width==
+-""||d.forceHelperSize)c.width(this.currentItem.width());if(c[0].style.height==""||d.forceHelperSize)c.height(this.currentItem.height());return c},_adjustOffsetFromHelper:function(c){if(typeof c=="string")c=c.split(" ");if(a.isArray(c))c={left:+c[0],top:+c[1]||0};if("left"in c)this.offset.click.left=c.left+this.margins.left;if("right"in c)this.offset.click.left=this.helperProportions.width-c.right+this.margins.left;if("top"in c)this.offset.click.top=c.top+this.margins.top;if("bottom"in c)this.offset.click.top=
+-this.helperProportions.height-c.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var c=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){c.left+=this.scrollParent.scrollLeft();c.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)c=
+-{top:0,left:0};return{top:c.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:c.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var c=this.currentItem.position();return{top:c.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:c.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var c=this.options;if(c.containment=="parent")c.containment=this.helper[0].parentNode;if(c.containment=="document"||c.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(c.containment=="document"?
+-document:window).width()-this.helperProportions.width-this.margins.left,(a(c.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(c.containment)){var d=a(c.containment)[0];c=a(c.containment).offset();var e=a(d).css("overflow")!="hidden";this.containment=[c.left+(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0)-this.margins.left,c.top+(parseInt(a(d).css("borderTopWidth"),
+-10)||0)+(parseInt(a(d).css("paddingTop"),10)||0)-this.margins.top,c.left+(e?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,c.top+(e?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(c,d){if(!d)d=
+-this.position;c=c=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:d.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&
+-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*c)}},_generatePosition:function(c){var d=this.options,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+-var g=c.pageX,i=c.pageY;if(this.originalPosition){if(this.containment){if(c.pageX-this.offset.click.left<this.containment[0])g=this.containment[0]+this.offset.click.left;if(c.pageY-this.offset.click.top<this.containment[1])i=this.containment[1]+this.offset.click.top;if(c.pageX-this.offset.click.left>this.containment[2])g=this.containment[2]+this.offset.click.left;if(c.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(d.grid){i=this.originalPageY+Math.round((i-
+-this.originalPageY)/d.grid[1])*d.grid[1];i=this.containment?!(i-this.offset.click.top<this.containment[1]||i-this.offset.click.top>this.containment[3])?i:!(i-this.offset.click.top<this.containment[1])?i-d.grid[1]:i+d.grid[1]:i;g=this.originalPageX+Math.round((g-this.originalPageX)/d.grid[0])*d.grid[0];g=this.containment?!(g-this.offset.click.left<this.containment[0]||g-this.offset.click.left>this.containment[2])?g:!(g-this.offset.click.left<this.containment[0])?g-d.grid[0]:g+d.grid[0]:g}}return{top:i-
+-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_rearrange:function(c,d,e,h){e?e[0].appendChild(this.placeholder[0]):d.item[0].parentNode.insertBefore(this.placeholder[0],
+-this.direction=="down"?d.item[0]:d.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var g=this,i=this.counter;window.setTimeout(function(){i==g.counter&&g.refreshPositions(!h)},0)},_clear:function(c,d){this.reverting=false;var e=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var h in this._storedCSS)if(this._storedCSS[h]=="auto"||this._storedCSS[h]=="static")this._storedCSS[h]=
+-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!d&&e.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!d)e.push(function(g){this._trigger("update",g,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){d||e.push(function(g){this._trigger("remove",
+-g,this._uiHash())});for(h=this.containers.length-1;h>=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!d){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){d||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this,
+-this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!d){this._trigger("beforeStop",
+-c,this._uiHash());for(h=0;h<e.length;h++)e[h].call(this,c);this._trigger("stop",c,this._uiHash())}return false}d||this._trigger("beforeStop",c,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!d){for(h=0;h<e.length;h++)e[h].call(this,c);this._trigger("stop",c,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+-_uiHash:function(c){var d=c||this;return{helper:d.helper,placeholder:d.placeholder||a([]),position:d.position,originalPosition:d.originalPosition,offset:d.positionAbs,item:d.currentItem,sender:c?c.element:null}}});a.extend(a.ui.sortable,{version:"1.8.15"})})(jQuery);
+-jQuery.effects||function(a,c){function d(n){var k;if(n&&n.constructor==Array&&n.length==3)return n;if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)];if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55];if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return[parseInt(k[1],
+-16),parseInt(k[2],16),parseInt(k[3],16)];if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(n))return j.transparent;return j[a.trim(n).toLowerCase()]}function e(n,k){var m;do{m=a.curCSS(n,k);if(m!=""&&m!="transparent"||a.nodeName(n,"body"))break;k="backgroundColor"}while(n=n.parentNode);return d(m)}function h(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+-k={},m,p;if(n&&n.length&&n[0]&&n[n[0]])for(var q=n.length;q--;){m=n[q];if(typeof n[m]=="string"){p=m.replace(/\-(\w)/g,function(s,r){return r.toUpperCase()});k[p]=n[m]}}else for(m in n)if(typeof n[m]==="string")k[m]=n[m];return k}function g(n){var k,m;for(k in n){m=n[k];if(m==null||a.isFunction(m)||k in o||/scrollbar/.test(k)||!/color/i.test(k)&&isNaN(parseFloat(m)))delete n[k]}return n}function i(n,k){var m={_:0},p;for(p in k)if(n[p]!=k[p])m[p]=k[p];return m}function b(n,k,m,p){if(typeof n=="object"){p=
+-k;m=null;k=n;n=k.effect}if(a.isFunction(k)){p=k;m=null;k={}}if(typeof k=="number"||a.fx.speeds[k]){p=m;m=k;k={}}if(a.isFunction(m)){p=m;m=null}k=k||{};m=m||k.duration;m=a.fx.off?0:typeof m=="number"?m:m in a.fx.speeds?a.fx.speeds[m]:a.fx.speeds._default;p=p||k.complete;return[n,k,m,p]}function f(n){if(!n||typeof n==="number"||a.fx.speeds[n])return true;if(typeof n==="string"&&!a.effects[n])return true;return false}a.effects={};a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+-"borderTopColor","borderColor","color","outlineColor"],function(n,k){a.fx.step[k]=function(m){if(!m.colorInit){m.start=e(m.elem,k);m.end=d(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt(m.pos*(m.end[0]-m.start[0])+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[1]-m.start[1])+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[2]-m.start[2])+m.start[2],10),255),0)+")"}});var j={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},l=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(n,k,m,
+-p){if(a.isFunction(m)){p=m;m=null}return this.queue(function(){var q=a(this),s=q.attr("style")||" ",r=g(h.call(this)),u,v=q.attr("class");a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});u=g(h.call(this));q.attr("class",v);q.animate(i(r,u),{queue:false,duration:k,easing:m,complete:function(){a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});if(typeof q.attr("style")=="object"){q.attr("style").cssText="";q.attr("style").cssText=s}else q.attr("style",s);p&&p.apply(this,arguments);a.dequeue(this)}})})};
+-a.fn.extend({_addClass:a.fn.addClass,addClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{add:n},k,m,p]):this._addClass(n)},_removeClass:a.fn.removeClass,removeClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{remove:n},k,m,p]):this._removeClass(n)},_toggleClass:a.fn.toggleClass,toggleClass:function(n,k,m,p,q){return typeof k=="boolean"||k===c?m?a.effects.animateClass.apply(this,[k?{add:n}:{remove:n},m,p,q]):this._toggleClass(n,k):a.effects.animateClass.apply(this,
+-[{toggle:n},k,m,p])},switchClass:function(n,k,m,p,q){return a.effects.animateClass.apply(this,[{add:k,remove:n},m,p,q])}});a.extend(a.effects,{version:"1.8.15",save:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.data("ec.storage."+k[m],n[0].style[k[m]])},restore:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.css(k[m],n.data("ec.storage."+k[m]))},setMode:function(n,k){if(k=="toggle")k=n.is(":hidden")?"show":"hide";return k},getBaseline:function(n,k){var m;switch(n[0]){case "top":m=
+-0;break;case "middle":m=0.5;break;case "bottom":m=1;break;default:m=n[0]/k.height}switch(n[1]){case "left":n=0;break;case "center":n=0.5;break;case "right":n=1;break;default:n=n[1]/k.width}return{x:n,y:m}},createWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent();var k={width:n.outerWidth(true),height:n.outerHeight(true),"float":n.css("float")},m=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
+-n.wrap(m);m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(p,q){k[q]=n.css(q);if(isNaN(parseInt(k[q],10)))k[q]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent().replaceWith(n);return n},setTransition:function(n,
+-k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments);
+-k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%",
+-"pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p*
+-((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m,p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/=
+-q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n,k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/=
+-q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/
+-r);return-(r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s))+m},easeOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return r*Math.pow(2,-10*k)*Math.sin((k*q-n)*2*Math.PI/s)+p+m},easeInOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q/2)==2)return m+p;s||(s=q*0.3*1.5);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);if(k<1)return-0.5*
+-r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)+m;return r*Math.pow(2,-10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)*0.5+p+m},easeInBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;return p*(k/=q)*k*((s+1)*k-s)+m},easeOutBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;return p*((k=k/q-1)*k*((s+1)*k+s)+1)+m},easeInOutBack:function(n,k,m,p,q,s){if(s==c)s=1.70158;if((k/=q/2)<1)return p/2*k*k*(((s*=1.525)+1)*k-s)+m;return p/2*((k-=2)*k*(((s*=1.525)+1)*k+s)+2)+m},easeInBounce:function(n,k,m,p,q){return p-a.easing.easeOutBounce(n,
+-q-k,0,p,q)+m},easeOutBounce:function(n,k,m,p,q){return(k/=q)<1/2.75?p*7.5625*k*k+m:k<2/2.75?p*(7.5625*(k-=1.5/2.75)*k+0.75)+m:k<2.5/2.75?p*(7.5625*(k-=2.25/2.75)*k+0.9375)+m:p*(7.5625*(k-=2.625/2.75)*k+0.984375)+m},easeInOutBounce:function(n,k,m,p,q){if(k<q/2)return a.easing.easeInBounce(n,k*2,0,p,q)*0.5+m;return a.easing.easeOutBounce(n,k*2-q,0,p,q)*0.5+p*0.5+m}})}(jQuery);
+-(function(a){a.effects.blind=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"vertical";a.effects.save(d,e);d.show();var i=a.effects.createWrapper(d).css({overflow:"hidden"}),b=g=="vertical"?"height":"width";g=g=="vertical"?i.height():i.width();h=="show"&&i.css(b,0);var f={};f[b]=h=="show"?g:0;i.animate(f,c.duration,c.options.easing,function(){h=="hide"&&d.hide();a.effects.restore(d,
+-e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()})})}})(jQuery);
+-(function(a){a.effects.bounce=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"effect"),g=c.options.direction||"up",i=c.options.distance||20,b=c.options.times||5,f=c.duration||250;/show|hide/.test(h)&&e.push("opacity");a.effects.save(d,e);d.show();a.effects.createWrapper(d);var j=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";i=c.options.distance||(j=="top"?d.outerHeight({margin:true})/3:d.outerWidth({margin:true})/
+-3);if(h=="show")d.css("opacity",0).css(j,g=="pos"?-i:i);if(h=="hide")i/=b*2;h!="hide"&&b--;if(h=="show"){var l={opacity:1};l[j]=(g=="pos"?"+=":"-=")+i;d.animate(l,f/2,c.options.easing);i/=2;b--}for(l=0;l<b;l++){var o={},n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;d.animate(o,f/2,c.options.easing).animate(n,f/2,c.options.easing);i=h=="hide"?i*2:i/2}if(h=="hide"){l={opacity:0};l[j]=(g=="pos"?"-=":"+=")+i;d.animate(l,f/2,c.options.easing,function(){d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);
+-c.callback&&c.callback.apply(this,arguments)})}else{o={};n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;d.animate(o,f/2,c.options.easing).animate(n,f/2,c.options.easing,function(){a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments)})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);
+-(function(a){a.effects.clip=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","height","width"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"vertical";a.effects.save(d,e);d.show();var i=a.effects.createWrapper(d).css({overflow:"hidden"});i=d[0].tagName=="IMG"?i:d;var b={size:g=="vertical"?"height":"width",position:g=="vertical"?"top":"left"};g=g=="vertical"?i.height():i.width();if(h=="show"){i.css(b.size,0);i.css(b.position,
+-g/2)}var f={};f[b.size]=h=="show"?g:0;f[b.position]=h=="show"?0:g/2;i.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.drop=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","opacity"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.direction||"left";a.effects.save(d,e);d.show();a.effects.createWrapper(d);var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=c.options.distance||(i=="top"?d.outerHeight({margin:true})/2:d.outerWidth({margin:true})/2);if(h=="show")d.css("opacity",0).css(i,g=="pos"?-b:b);var f={opacity:h==
+-"show"?1:0};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;d.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.explode=function(c){return this.queue(function(){var d=c.options.pieces?Math.round(Math.sqrt(c.options.pieces)):3,e=c.options.pieces?Math.round(Math.sqrt(c.options.pieces)):3;c.options.mode=c.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":c.options.mode;var h=a(this).show().css("visibility","hidden"),g=h.offset();g.top-=parseInt(h.css("marginTop"),10)||0;g.left-=parseInt(h.css("marginLeft"),10)||0;for(var i=h.outerWidth(true),b=h.outerHeight(true),f=0;f<d;f++)for(var j=
+-0;j<e;j++)h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/d)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/d,left:g.left+j*(i/e)+(c.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/d)+(c.options.mode=="show"?(f-Math.floor(d/2))*(b/d):0),opacity:c.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(c.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+
+-f*(b/d)+(c.options.mode=="show"?0:(f-Math.floor(d/2))*(b/d)),opacity:c.options.mode=="show"?1:0},c.duration||500);setTimeout(function(){c.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();c.callback&&c.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},c.duration||500)})}})(jQuery);
+-(function(a){a.effects.fade=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"hide");d.animate({opacity:e},{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.fold=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"hide"),g=c.options.size||15,i=!!c.options.horizFirst,b=c.duration?c.duration/2:a.fx.speeds._default/2;a.effects.save(d,e);d.show();var f=a.effects.createWrapper(d).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1],
+-10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,c.options.easing).animate(o,b,c.options.easing,function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(d[0],arguments);d.dequeue()})})}})(jQuery);
+-(function(a){a.effects.highlight=function(c){return this.queue(function(){var d=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(d,c.options.mode||"show"),g={backgroundColor:d.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(d,e);d.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(g,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);h=="show"&&!a.support.opacity&&
+-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.pulsate=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"show");times=(c.options.times||5)*2-1;duration=c.duration?c.duration/2:a.fx.speeds._default/2;isVisible=d.is(":visible");animateTo=0;if(!isVisible){d.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e<times;e++){d.animate({opacity:animateTo},duration,c.options.easing);animateTo=(animateTo+1)%2}d.animate({opacity:animateTo},duration,
+-c.options.easing,function(){animateTo==0&&d.hide();c.callback&&c.callback.apply(this,arguments)});d.queue("fx",function(){d.dequeue()}).dequeue()})}})(jQuery);
+-(function(a){a.effects.puff=function(c){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,c.options.mode||"hide"),h=parseInt(c.options.percent,10)||150,g=h/100,i={height:d.height(),width:d.width()};a.extend(c.options,{fade:true,mode:e,percent:e=="hide"?h:100,from:e=="hide"?i:{height:i.height*g,width:i.width*g}});d.effect("scale",c.options,c.duration,c.callback);d.dequeue()})};a.effects.scale=function(c){return this.queue(function(){var d=a(this),e=a.extend(true,{},c.options),h=a.effects.setMode(d,
+-c.options.mode||"effect"),g=parseInt(c.options.percent,10)||(parseInt(c.options.percent,10)==0?0:h=="hide"?0:100),i=c.options.direction||"both",b=c.options.origin;if(h!="effect"){e.origin=b||["middle","center"];e.restore=true}b={height:d.height(),width:d.width()};d.from=c.options.from||(h=="show"?{height:0,width:0}:b);g={y:i!="horizontal"?g/100:1,x:i!="vertical"?g/100:1};d.to={height:b.height*g.y,width:b.width*g.x};if(c.options.fade){if(h=="show"){d.from.opacity=0;d.to.opacity=1}if(h=="hide"){d.from.opacity=
+-1;d.to.opacity=0}}e.from=d.from;e.to=d.to;e.mode=h;d.effect("size",e,c.duration,c.callback);d.dequeue()})};a.effects.size=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],g=["width","height","overflow"],i=["fontSize"],b=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
+-j=a.effects.setMode(d,c.options.mode||"effect"),l=c.options.restore||false,o=c.options.scale||"both",n=c.options.origin,k={height:d.height(),width:d.width()};d.from=c.options.from||k;d.to=c.options.to||k;if(n){n=a.effects.getBaseline(n,k);d.from.top=(k.height-d.from.height)*n.y;d.from.left=(k.width-d.from.width)*n.x;d.to.top=(k.height-d.to.height)*n.y;d.to.left=(k.width-d.to.width)*n.x}var m={from:{y:d.from.height/k.height,x:d.from.width/k.width},to:{y:d.to.height/k.height,x:d.to.width/k.width}};
+-if(o=="box"||o=="both"){if(m.from.y!=m.to.y){e=e.concat(b);d.from=a.effects.setTransition(d,b,m.from.y,d.from);d.to=a.effects.setTransition(d,b,m.to.y,d.to)}if(m.from.x!=m.to.x){e=e.concat(f);d.from=a.effects.setTransition(d,f,m.from.x,d.from);d.to=a.effects.setTransition(d,f,m.to.x,d.to)}}if(o=="content"||o=="both")if(m.from.y!=m.to.y){e=e.concat(i);d.from=a.effects.setTransition(d,i,m.from.y,d.from);d.to=a.effects.setTransition(d,i,m.to.y,d.to)}a.effects.save(d,l?e:h);d.show();a.effects.createWrapper(d);
+-d.css("overflow","hidden").css(d.from);if(o=="content"||o=="both"){b=b.concat(["marginTop","marginBottom"]).concat(i);f=f.concat(["marginLeft","marginRight"]);g=e.concat(b).concat(f);d.find("*[width]").each(function(){child=a(this);l&&a.effects.save(child,g);var p={height:child.height(),width:child.width()};child.from={height:p.height*m.from.y,width:p.width*m.from.x};child.to={height:p.height*m.to.y,width:p.width*m.to.x};if(m.from.y!=m.to.y){child.from=a.effects.setTransition(child,b,m.from.y,child.from);
+-child.to=a.effects.setTransition(child,b,m.to.y,child.to)}if(m.from.x!=m.to.x){child.from=a.effects.setTransition(child,f,m.from.x,child.from);child.to=a.effects.setTransition(child,f,m.to.x,child.to)}child.css(child.from);child.animate(child.to,c.duration,c.options.easing,function(){l&&a.effects.restore(child,g)})})}d.animate(d.to,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d.to.opacity===0&&d.css("opacity",d.from.opacity);j=="hide"&&d.hide();a.effects.restore(d,
+-l?e:h);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.shake=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"];a.effects.setMode(d,c.options.mode||"effect");var h=c.options.direction||"left",g=c.options.distance||20,i=c.options.times||3,b=c.duration||c.options.duration||140;a.effects.save(d,e);d.show();a.effects.createWrapper(d);var f=h=="up"||h=="down"?"top":"left",j=h=="up"||h=="left"?"pos":"neg";h={};var l={},o={};h[f]=(j=="pos"?"-=":"+=")+g;l[f]=(j=="pos"?"+=":"-=")+g*2;o[f]=
+-(j=="pos"?"-=":"+=")+g*2;d.animate(h,b,c.options.easing);for(g=1;g<i;g++)d.animate(l,b,c.options.easing).animate(o,b,c.options.easing);d.animate(l,b,c.options.easing).animate(h,b/2,c.options.easing,function(){a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments)});d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);
+-(function(a){a.effects.slide=function(c){return this.queue(function(){var d=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(d,c.options.mode||"show"),g=c.options.direction||"left";a.effects.save(d,e);d.show();a.effects.createWrapper(d).css({overflow:"hidden"});var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=c.options.distance||(i=="top"?d.outerHeight({margin:true}):d.outerWidth({margin:true}));if(h=="show")d.css(i,g=="pos"?isNaN(b)?"-"+b:-b:b);
+-var f={};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;d.animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){h=="hide"&&d.hide();a.effects.restore(d,e);a.effects.removeWrapper(d);c.callback&&c.callback.apply(this,arguments);d.dequeue()}})})}})(jQuery);
+-(function(a){a.effects.transfer=function(c){return this.queue(function(){var d=a(this),e=a(c.options.to),h=e.offset();e={top:h.top,left:h.left,height:e.innerHeight(),width:e.innerWidth()};h=d.offset();var g=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(c.options.className).css({top:h.top,left:h.left,height:d.innerHeight(),width:d.innerWidth(),position:"absolute"}).animate(e,c.duration,c.options.easing,function(){g.remove();c.callback&&c.callback.apply(d[0],arguments);
+-d.dequeue()})})}})(jQuery);
+-(function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var c=this,d=c.options;c.running=0;c.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");c.headers=
+-c.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){d.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){d.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){d.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){d.disabled||a(this).removeClass("ui-state-focus")});c.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
+-if(d.navigation){var e=c.element.find("a").filter(d.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");c.active=h.length?h:e.closest(".ui-accordion-content").prev()}}c.active=c._findActive(c.active||d.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");c.active.next().addClass("ui-accordion-content-active");c._createIcons();c.resize();c.element.attr("role","tablist");c.headers.attr("role","tab").bind("keydown.accordion",
+-function(g){return c._keydown(g)}).next().attr("role","tabpanel");c.headers.not(c.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();c.active.length?c.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):c.headers.eq(0).attr("tabIndex",0);a.browser.safari||c.headers.find("a").attr("tabIndex",-1);d.event&&c.headers.bind(d.event.split(" ").join(".accordion ")+".accordion",function(g){c._clickHandler.call(c,g,this);g.preventDefault()})},_createIcons:function(){var c=
+-this.options;if(c.icons){a("<span></span>").addClass("ui-icon "+c.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(c.icons.header).toggleClass(c.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
+-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var d=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(c.autoHeight||c.fillHeight)d.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(c,d){a.Widget.prototype._setOption.apply(this,arguments);c=="active"&&this.activate(d);if(c=="icons"){this._destroyIcons();
+-d&&this._createIcons()}if(c=="disabled")this.headers.add(this.headers.next())[d?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(c){if(!(this.options.disabled||c.altKey||c.ctrlKey)){var d=a.ui.keyCode,e=this.headers.length,h=this.headers.index(c.target),g=false;switch(c.keyCode){case d.RIGHT:case d.DOWN:g=this.headers[(h+1)%e];break;case d.LEFT:case d.UP:g=this.headers[(h-1+e)%e];break;case d.SPACE:case d.ENTER:this._clickHandler({target:c.target},c.target);
+-c.preventDefault()}if(g){a(c.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var c=this.options,d;if(c.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){d-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,d-a(this).innerHeight()+
+-a(this).height()))}).css("overflow","auto")}else if(c.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).height("").height())}).height(d)}return this},activate:function(c){this.options.active=c;c=this._findActive(c)[0];this._clickHandler({target:c},c);return this},_findActive:function(c){return c?typeof c==="number"?this.headers.filter(":eq("+c+")"):this.headers.not(this.headers.not(c)):c===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(c,d){var e=this.options;
+-if(!e.disabled)if(c.target){c=a(c.currentTarget||d);d=c[0]===this.active[0];e.active=e.collapsible&&d?false:this.headers.index(c);if(!(this.running||!e.collapsible&&d)){var h=this.active;f=c.next();i=this.active.next();b={options:e,newHeader:d&&e.collapsible?a([]):c,oldHeader:this.active,newContent:d&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(c[0]);this.active=d?a([]):c;this._toggle(f,i,b,d,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);
+-if(!d){c.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);c.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(),
+-b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(c,d,e,h,g){var i=this,b=i.options;i.toShow=c;i.toHide=d;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=d.size()===0?c.size():d.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:d,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:c,toHide:d,complete:f,down:g,autoHeight:b.autoHeight||
+-b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)c.toggle();else{d.hide();c.show()}f(true)}d.prev().attr({"aria-expanded":"false",
+-"aria-selected":"false",tabIndex:-1}).blur();c.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(c){this.running=c?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.15",
+-animations:{slide:function(c,d){c=a.extend({easing:"swing",duration:300},c,d);if(c.toHide.size())if(c.toShow.size()){var e=c.toShow.css("overflow"),h=0,g={},i={},b;d=c.toShow;b=d[0].style.width;d.width(parseInt(d.parent().width(),10)-parseInt(d.css("paddingLeft"),10)-parseInt(d.css("paddingRight"),10)-(parseInt(d.css("borderLeftWidth"),10)||0)-(parseInt(d.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(c.toShow[0],j)).match(/^([\d+-.]+)(.*)$/);
+-g[j]={value:f[1],unit:f[2]||"px"}});c.toShow.css({height:0,overflow:"hidden"}).show();c.toHide.filter(":hidden").each(c.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);c.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:c.duration,easing:c.easing,complete:function(){c.autoHeight||c.toShow.css("height","");c.toShow.css({width:b,overflow:e});c.complete()}})}else c.toHide.animate({height:"hide",
+-paddingTop:"hide",paddingBottom:"hide"},c);else c.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},c)},bounceslide:function(c){this.slide(c,{easing:c.down?"easeOutBounce":"swing",duration:c.down?1E3:200})}}})})(jQuery);
+-(function(a){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var d=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(d.options.disabled||d.element.propAttr("readOnly"))){h=
+-false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:d._move("previousPage",g);break;case i.PAGE_DOWN:d._move("nextPage",g);break;case i.UP:d._move("previous",g);g.preventDefault();break;case i.DOWN:d._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(d.menu.active){h=true;g.preventDefault()}case i.TAB:if(!d.menu.active)return;d.menu.select(g);break;case i.ESCAPE:d.element.val(d.term);d.close(g);break;default:clearTimeout(d.searching);d.searching=setTimeout(function(){if(d.term!=
+-d.element.val()){d.selectedItem=null;d.search(null,g)}},d.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!d.options.disabled){d.selectedItem=null;d.previous=d.element.val()}}).bind("blur.autocomplete",function(g){if(!d.options.disabled){clearTimeout(d.searching);d.closing=setTimeout(function(){d.close(g);d._change(g)},150)}});this._initSource();this.response=function(){return d._response.apply(d,arguments)};
+-this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=d.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==d.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&d.close()})},1);setTimeout(function(){clearTimeout(d.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==d._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&&
+-d.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=d.previous;if(d.element[0]!==e.activeElement){d.element.focus();d.previous=f;setTimeout(function(){d.previous=f;d.selectedItem=b},1)}false!==d._trigger("select",g,{item:b})&&d.element.val(b.value);d.term=d.element.val();d.close(g);d.selectedItem=b},blur:function(){d.menu.element.is(":visible")&&d.element.val()!==d.term&&d.element.val(d.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+-a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(d,e){a.Widget.prototype._setOption.apply(this,arguments);d==="source"&&this._initSource();if(d==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);d==="disabled"&&
+-e&&this.xhr&&this.xhr.abort()},_initSource:function(){var d=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){d.xhr&&d.xhr.abort();d.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++c,success:function(b){this.autocompleteRequest===c&&i(b)},error:function(){this.autocompleteRequest===c&&i([])}})}}else this.source=
+-this.options.source},search:function(d,e){d=d!=null?d:this.element.val();this.term=this.element.val();if(d.length<this.options.minLength)return this.close(e);clearTimeout(this.closing);if(this._trigger("search",e)!==false)return this._search(d)},_search:function(d){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:d},this.response)},_response:function(d){if(!this.options.disabled&&d&&d.length){d=this._normalize(d);this._suggest(d);this._trigger("open")}else this.close();
+-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(d){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",d)}},_change:function(d){this.previous!==this.element.val()&&this._trigger("change",d,{item:this.selectedItem})},_normalize:function(d){if(d.length&&d[0].label&&d[0].value)return d;return a.map(d,function(e){if(typeof e==="string")return{label:e,value:e};return a.extend({label:e.label||
+-e.value,value:e.value||e.label},e)})},_suggest:function(d){var e=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(e,d);this.menu.deactivate();this.menu.refresh();e.show();this._resizeMenu();e.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var d=this.menu.element;d.outerWidth(Math.max(d.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(d,e){var h=this;
+-a.each(e,function(g,i){h._renderItem(d,i)})},_renderItem:function(d,e){return a("<li></li>").data("item.autocomplete",e).append(a("<a></a>").text(e.label)).appendTo(d)},_move:function(d,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(d)||this.menu.last()&&/^next/.test(d)){this.element.val(this.term);this.menu.deactivate()}else this.menu[d](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(d){return d.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+-"\\$&")},filter:function(d,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(d,function(g){return h.test(g.label||g.value||g)})}})})(jQuery);
+-(function(a){a.widget("ui.menu",{_create:function(){var c=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(d){if(a(d.target).closest(".ui-menu-item a").length){d.preventDefault();c.select(d)}});this.refresh()},refresh:function(){var c=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+--1).mouseenter(function(d){c.activate(d,a(this).parent())}).mouseleave(function(){c.deactivate()})},activate:function(c,d){this.deactivate();if(this.hasScroll()){var e=d.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+d.height())}this.active=d.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",c,{item:d})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+-this._trigger("blur");this.active=null}},next:function(c){this.move("next",".ui-menu-item:first",c)},previous:function(c){this.move("prev",".ui-menu-item:last",c)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(c,d,e){if(this.active){c=this.active[c+"All"](".ui-menu-item").eq(0);c.length?this.activate(e,c):this.activate(e,this.element.children(d))}else this.activate(e,
+-this.element.children(d))},nextPage:function(c){if(this.hasScroll())if(!this.active||this.last())this.activate(c,this.element.children(".ui-menu-item:first"));else{var d=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-d-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(c,h)}else this.activate(c,this.element.children(".ui-menu-item").filter(!this.active||
+-this.last()?":first":":last"))},previousPage:function(c){if(this.hasScroll())if(!this.active||this.first())this.activate(c,this.element.children(".ui-menu-item:last"));else{var d=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-d+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(c,result)}else this.activate(c,this.element.children(".ui-menu-item").filter(!this.active||
+-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(c){this._trigger("selected",c,{item:this.active})}})})(jQuery);
+-(function(a){var c,d,e,h,g=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var f=b.name,j=b.form,l=a([]);if(f)l=j?a(j).find("[name='"+f+"']"):a("[name='"+f+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",g);if(typeof this.options.disabled!==
+-"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,f=this.options,j=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(!j?" ui-state-active":"");if(f.label===null)f.label=this.buttonElement.html();if(this.element.is(":disabled"))f.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!f.disabled){a(this).addClass("ui-state-hover");
+-this===c&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){f.disabled||a(this).removeClass(l)}).bind("click.button",function(o){if(f.disabled){o.preventDefault();o.stopImmediatePropagation()}});this.element.bind("focus.button",function(){b.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){b.buttonElement.removeClass("ui-state-focus")});if(j){this.element.bind("change.button",function(){h||b.refresh()});this.buttonElement.bind("mousedown.button",function(o){if(!f.disabled){h=
+-false;d=o.pageX;e=o.pageY}}).bind("mouseup.button",function(o){if(!f.disabled)if(d!==o.pageX||e!==o.pageY)h=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed","true");
+-var o=b.element[0];i(o).not(o).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(f.disabled)return false;a(this).addClass("ui-state-active");c=this;a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(f.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(o){if(f.disabled)return false;if(o.keyCode==a.ui.keyCode.SPACE||
+-o.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(o){o.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",f.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
+-"radio"){var b=this.element.parents().filter(":last"),f="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(f);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(f);if(!this.buttonElement.length)this.buttonElement=b.find(f)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},
+-widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
+-a.Widget.prototype.destroy.call(this)},_setOption:function(b,f){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")f?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")i(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+-"true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+-f=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+j.primary+"'></span>");j.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+j.secondary+"'></span>");if(!this.options.text){o.push(l?"ui-button-icons-only":
+-"ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")===
+-"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
+-a.Widget.prototype.destroy.call(this)}})})(jQuery);
+-(function(a,c){function d(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function e(b){return b.bind("mouseout",
+-function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+-f.addClass("ui-state-hover");f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==c)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.15"}});var g=(new Date).getTime(),i;a.extend(d.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
+-setDefaults:function(b){h(this._defaults,b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,
+-"\\\\$1"),input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+-function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f);f.settings.disabled&&this._disableDatepicker(b)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a('<span class="'+this._appendClass+'">'+j+"</span>");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j==
+-"focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j=this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("<img/>").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('<button type="button"></button>').addClass(this._triggerClass).html(o==""?j:a("<img/>").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():
+-a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;m<o.length;m++)if(o[m].length>n){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b,
+-f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker",function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.settings.disabled&&this._disableDatepicker(b);f.dpDiv.css("display","block")}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+=
+-1;this._dialogInput=a('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
+-2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f=
+-a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=
+-b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b,
+-"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==
+-b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f<this._disabledInputs.length;f++)if(this._disabledInputs[f]==b)return true;return false},_getInst:function(b){try{return a.data(b,"datepicker")}catch(f){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(b,f,j){var l=this._getInst(b);if(arguments.length==2&&typeof f=="string")return f=="defaults"?a.extend({},a.datepicker._defaults):l?f=="all"?
+-a.extend({},l.settings):this._get(l,f):null;var o=f||{};if(typeof f=="string"){o={};o[f]=j}if(l){this._curInst==l&&this._hideDatepicker();var n=this._getDateDatepicker(b,true),k=this._getMinMaxDate(l,"min"),m=this._getMinMaxDate(l,"max");h(l.settings,o);if(k!==null&&o.dateFormat!==c&&o.minDate===c)l.settings.minDate=this._formatDate(l,k);if(m!==null&&o.dateFormat!==c&&o.maxDate===c)l.settings.maxDate=this._formatDate(l,m);this._attachments(a(b),l);this._autoSize(l);this._setDate(l,n);this._updateAlternate(l);
+-this._updateDatepicker(l)}},_changeDatepicker:function(b,f,j){this._optionDatepicker(b,f,j)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,f){if(b=this._getInst(b)){this._setDate(b,f);this._updateDatepicker(b);this._updateAlternate(b)}},_getDateDatepicker:function(b,f){(b=this._getInst(b))&&!b.inline&&this._setDateFromField(b,f);return b?this._getDate(b):null},_doKeyDown:function(b){var f=a.datepicker._getInst(b.target),j=true,l=f.dpDiv.is(".ui-datepicker-rtl");
+-f._keyEvent=true;if(a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker();j=false;break;case 13:j=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",f.dpDiv);j[0]&&a.datepicker._selectDay(b.target,f.selectedMonth,f.selectedYear,j[0]);if(b=a.datepicker._get(f,"onSelect")){j=a.datepicker._formatDate(f);b.apply(f.input?f.input[0]:null,[j,f])}else a.datepicker._hideDatepicker();return false;case 27:a.datepicker._hideDatepicker();break;case 33:a.datepicker._adjustDate(b.target,
+-b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 35:if(b.ctrlKey||b.metaKey)a.datepicker._clearDate(b.target);j=b.ctrlKey||b.metaKey;break;case 36:if(b.ctrlKey||b.metaKey)a.datepicker._gotoToday(b.target);j=b.ctrlKey||b.metaKey;break;case 37:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?+1:-1,"D");j=
+-b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 38:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,-7,"D");j=b.ctrlKey||b.metaKey;break;case 39:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?-1:+1,"D");j=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,
+-"stepMonths"),"M");break;case 40:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,+7,"D");j=b.ctrlKey||b.metaKey;break;default:j=false}else if(b.keyCode==36&&b.ctrlKey)a.datepicker._showDatepicker(this);else j=false;if(j){b.preventDefault();b.stopPropagation()}},_doKeyPress:function(b){var f=a.datepicker._getInst(b.target);if(a.datepicker._get(f,"constrainInput")){f=a.datepicker._possibleChars(a.datepicker._get(f,"dateFormat"));var j=String.fromCharCode(b.charCode==c?b.keyCode:b.charCode);
+-return b.ctrlKey||b.metaKey||j<" "||!f||f.indexOf(j)>-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input",
+-b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j=a.datepicker._get(f,"beforeShow");h(f.settings,j?j.apply(b,[b,f]):{});f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value="";if(!a.datepicker._pos){a.datepicker._pos=
+-a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f);j=a.datepicker._checkOffset(f,
+-j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover");if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=true;a.effects&&
+-a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});b.dpDiv.find("."+
+-this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&!b.input.is(":disabled")&&
+-b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]||j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(),n=b.input?b.input.outerWidth():
+-0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f=this._get(this._getInst(b),
+-"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f=this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f);this._curInst=
+-null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+-_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"):
+-0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth=f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l["selected"+(j=="M"?
+-"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b);
+-this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b);b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField");if(f){var j=this._get(b,
+-"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b));a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"?f.toString():f+"";if(f==
+-"")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1<b.length&&b.charAt(H+1)==z)&&H++;return z},v=function(z){var I=u(z);z=new RegExp("^\\d{1,"+
+-(z=="@"?14:z=="!"?20:z=="y"&&I?4:z=="o"?3:2)+"}");z=f.substring(y).match(z);if(!z)throw"Missing number at position "+y;y+=z[0].length;return parseInt(z[0],10)},w=function(z,I,N){z=a.map(u(z)?N:I,function(D,E){return[[E,D]]}).sort(function(D,E){return-(D[1].length-E[1].length)});var J=-1;a.each(z,function(D,E){D=E[1];if(f.substr(y,D.length).toLowerCase()==D.toLowerCase()){J=E[0];y+=D.length;return false}});if(J!=-1)return J+1;else throw"Unknown name at position "+y;},x=function(){if(f.charAt(y)!=b.charAt(H))throw"Unexpected literal at position "+
+-y;y++},y=0,H=0;H<b.length;H++)if(r)if(b.charAt(H)=="'"&&!u("'"))r=false;else x();else switch(b.charAt(H)){case "d":q=v("d");break;case "D":w("D",o,n);break;case "o":s=v("o");break;case "m":p=v("m");break;case "M":p=w("M",k,m);break;case "y":j=v("y");break;case "@":var C=new Date(v("@"));j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "!":C=new Date((v("!")-this._ticksTo1970)/1E4);j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "'":if(u("'"))x();else r=true;break;default:x()}if(y<
+-f.length)throw"Extra/unparsed characters found in date: "+f.substring(y);if(j==-1)j=(new Date).getFullYear();else if(j<100)j+=(new Date).getFullYear()-(new Date).getFullYear()%100+(j<=l?0:-100);if(s>-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",
+-RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames:null)||this._defaults.monthNames;var k=function(u){(u=r+1<b.length&&
+-b.charAt(r+1)==u)&&r++;return u},m=function(u,v,w){v=""+v;if(k(u))for(;v.length<w;)v="0"+v;return v},p=function(u,v,w,x){return k(u)?x[v]:w[v]},q="",s=false;if(f)for(var r=0;r<b.length;r++)if(s)if(b.charAt(r)=="'"&&!k("'"))s=false;else q+=b.charAt(r);else switch(b.charAt(r)){case "d":q+=m("d",f.getDate(),2);break;case "D":q+=p("D",f.getDay(),l,o);break;case "o":q+=m("o",Math.round(((new Date(f.getFullYear(),f.getMonth(),f.getDate())).getTime()-(new Date(f.getFullYear(),0,0)).getTime())/864E5),3);
+-break;case "m":q+=m("m",f.getMonth()+1,2);break;case "M":q+=p("M",f.getMonth(),n,j);break;case "y":q+=k("y")?f.getFullYear():(f.getYear()%100<10?"0":"")+f.getYear()%100;break;case "@":q+=f.getTime();break;case "!":q+=f.getTime()*1E4+this._ticksTo1970;break;case "'":if(k("'"))q+="'";else s=true;break;default:q+=b.charAt(r)}return q},_possibleChars:function(b){for(var f="",j=false,l=function(n){(n=o+1<b.length&&b.charAt(o+1)==n)&&o++;return n},o=0;o<b.length;o++)if(j)if(b.charAt(o)=="'"&&!l("'"))j=
+-false;else f+=b.charAt(o);else switch(b.charAt(o)){case "d":case "m":case "y":case "@":f+="0123456789";break;case "D":case "M":return null;case "'":if(l("'"))f+="'";else j=true;break;default:f+=b.charAt(o)}return f},_get:function(b,f){return b.settings[f]!==c?b.settings[f]:this._defaults[f]},_setDateFromField:function(b,f){if(b.input.val()!=b.lastVal){var j=this._get(b,"dateFormat"),l=b.lastVal=b.input?b.input.val():null,o,n;o=n=this._getDefaultDate(b);var k=this._getFormatConfig(b);try{o=this.parseDate(j,
+-l,k)||n}catch(m){this.log(m);l=f?"":l}b.selectedDay=o.getDate();b.drawMonth=b.selectedMonth=o.getMonth();b.drawYear=b.selectedYear=o.getFullYear();b.currentDay=l?o.getDate():0;b.currentMonth=l?o.getMonth():0;b.currentYear=l?o.getFullYear():0;this._adjustInstDate(b)}},_getDefaultDate:function(b){return this._restrictMinMax(b,this._determineDate(b,this._get(b,"defaultDate"),new Date))},_determineDate:function(b,f,j){var l=function(n){var k=new Date;k.setDate(k.getDate()+n);return k},o=function(n){try{return a.datepicker.parseDate(a.datepicker._get(b,
+-"dateFormat"),n,a.datepicker._getFormatConfig(b))}catch(k){}var m=(n.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,p=m.getFullYear(),q=m.getMonth();m=m.getDate();for(var s=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,r=s.exec(n);r;){switch(r[2]||"d"){case "d":case "D":m+=parseInt(r[1],10);break;case "w":case "W":m+=parseInt(r[1],10)*7;break;case "m":case "M":q+=parseInt(r[1],10);m=Math.min(m,a.datepicker._getDaysInMonth(p,q));break;case "y":case "Y":p+=parseInt(r[1],10);m=Math.min(m,
+-a.datepicker._getDaysInMonth(p,q));break}r=s.exec(n)}return new Date(p,q,m)};if(f=(f=f==null||f===""?j:typeof f=="string"?o(f):typeof f=="number"?isNaN(f)?j:l(f):new Date(f.getTime()))&&f.toString()=="Invalid Date"?j:f){f.setHours(0);f.setMinutes(0);f.setSeconds(0);f.setMilliseconds(0)}return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(b){if(!b)return null;b.setHours(b.getHours()>12?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;
+-f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay=b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b));if(j=this._get(b,"onSelect")){l=this._formatDate(b);j.apply(b.input?b.input[0]:null,[l,b])}},_getDate:function(b){return!b.currentYear||b.input&&b.input.val()==
+-""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(),f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay?new Date(9999,
+-9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&w<r?r:w;this._daylightSavingAdjust(new Date(v,m,1))>w;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b));
+-w=this._canAdjustMonth(b,-1,v,m)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', -"+p+", 'M');\" title=\""+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>":o?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v,
+-m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', +"+p+", 'M');\" title=\""+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>":o?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&&
+-b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+g+'.datepicker._hideDatepicker();">'+this._get(b,"closeText")+"</button>":"";l=l?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(j?n:"")+(this._isInRange(b,x)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+-g+".datepicker._gotoToday('#"+b.id+"');\">"+p+"</button>":"")+(j?"":n)+"</div>":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H=this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E<k[0];E++){var P=
+-"";this.maxRows=4;for(var L=0;L<k[1];L++){var Q=this._daylightSavingAdjust(new Date(v,m,b.selectedDay)),B=" ui-corner-all",F="";if(q){F+='<div class="ui-datepicker-group';if(k[1]>1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right":"left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+B+'">'+(/all|left/.test(B)&&
+-E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var G=p?'<th class="ui-datepicker-week-col">'+this._get(b,"weekHeader")+"</th>":"";for(B=0;B<7;B++){var A=(B+n)%7;G+="<th"+((B+n+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+x[A]+'">'+y[A]+"</span></th>"}F+=G+"</tr></thead><tbody>";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,
+-G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R<G;R++){F+="<tr>";var S=!p?"":'<td class="ui-datepicker-week-col">'+this._get(b,"calculateWeek")(A)+"</td>";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&A<r||u&&A>u;S+='<td class="'+((B+n+6)%7>=5?" ui-datepicker-week-end":"")+(K?" ui-datepicker-other-month":"")+(A.getTime()==
+-Q.getTime()&&m==b.selectedMonth&&b._keyEvent||J.getTime()==A.getTime()&&J.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(K&&!I?"":" "+M[1]+(A.getTime()==s.getTime()?" "+this._currentClass:"")+(A.getTime()==f.getTime()?" ui-datepicker-today":""))+'"'+((!K||I)&&M[2]?' title="'+M[2]+'"':"")+(O?"":' onclick="DP_jQuery_'+g+".datepicker._selectDay('#"+b.id+"',"+A.getMonth()+","+A.getFullYear()+', this);return false;"')+">"+(K&&!I?"&#xa0;":O?'<span class="ui-state-default">'+
+-A.getDate()+"</span>":'<a class="ui-state-default'+(A.getTime()==f.getTime()?" ui-state-highlight":"")+(A.getTime()==s.getTime()?" ui-state-active":"")+(K?" ui-priority-secondary":"")+'" href="#">'+A.getDate()+"</a>")+"</td>";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+"</tr>"}m++;if(m>11){m=0;v++}F+="</tbody></table>"+(q?"</div>"+(k[0]>0&&L==k[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+-"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='<div class="ui-datepicker-title">',u="";if(n||!p)u+='<span class="ui-datepicker-month">'+k[f]+"</span>";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'M');\" >";for(var w=0;w<12;w++)if((!k||w>=l.getMonth())&&
+-(!v||w<=o.getMonth()))u+='<option value="'+w+'"'+(w==f?' selected="selected"':"")+">"+m[w]+"</option>";u+="</select>"}s||(r+=u+(n||!(p&&q)?"&#xa0;":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+='<span class="ui-datepicker-year">'+j+"</span>";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f,
+-l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()):m;for(b.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'Y');\" >";f<=m;f++)b.yearshtml+='<option value="'+f+'"'+(f==j?' selected="selected"':"")+">"+f+"</option>";b.yearshtml+="</select>";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?"&#xa0;":"")+u;r+="</div>";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j=="Y"?f:0),o=b.drawMonth+
+-(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&f<j?j:f;return f=b&&f>b?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear");if(f)f.apply(b.input?
+-b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b);j=this._daylightSavingAdjust(new Date(j,
+-l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b,
+-"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this;
+-if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));return this.each(function(){typeof b==
+-"string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new d;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.15";window["DP_jQuery_"+g]=a})(jQuery);
+-(function(a,c){var d={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
+-position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||"&#160;",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
+-i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j),
+-o=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("<span></span>").addClass("ui-dialog-title").attr("id",
+-f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
+-g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!==
+-i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.scrollTop(),scrollLeft:b.element.scrollLeft()};a.ui.dialog.maxZ+=1;
+-b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target===
+-l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g,
+-function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('<button type="button"></button>').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
+-handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition,
+-originalSize:l.originalSize,position:l.position,size:l.size}}g=g===c?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize",
+-l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "):
+-[g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l);
+-if(j in d)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"):
+-f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||"&#160;"));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g=
+-this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height-
+-i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.15",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "),
+-create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return false})},1);a(document).bind("keydown.dialog-overlay",function(b){if(g.options.closeOnEscape&&b.keyCode&&b.keyCode===a.ui.keyCode.ESCAPE){g.close(b);b.preventDefault()}});a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize)}var i=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
+-height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&&a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
+-i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g<i?a(window).height()+"px":g+"px"}else return a(document).height()+"px"},width:function(){var g,i;if(a.browser.msie){g=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);i=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return g<i?a(window).width()+"px":g+"px"}else return a(document).width()+"px"},resize:function(){var g=a([]);a.each(a.ui.dialog.overlay.instances,function(){g=
+-g.add(this)});g.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}});a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+-(function(a){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e=a.fn.position,h=a.fn.offset;a.fn.position=function(g){if(!g||!g.of)return e.apply(this,arguments);g=a.extend({},g);var i=a(g.of),b=i[0],f=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],l,o,n;if(b.nodeType===9){l=i.width();o=i.height();n={top:0,left:0}}else if(b.setTimeout){l=i.width();o=i.height();n={top:i.scrollTop(),left:i.scrollLeft()}}else if(b.preventDefault){g.at="left top";l=o=0;n={top:g.of.pageY,
+-left:g.of.pageX}}else{l=i.outerWidth();o=i.outerHeight();n=i.offset()}a.each(["my","at"],function(){var k=(g[this]||"").split(" ");if(k.length===1)k=c.test(k[0])?k.concat(["center"]):d.test(k[0])?["center"].concat(k):["center","center"];k[0]=c.test(k[0])?k[0]:"center";k[1]=d.test(k[1])?k[1]:"center";g[this]=k});if(f.length===1)f[1]=f[0];j[0]=parseInt(j[0],10)||0;if(j.length===1)j[1]=j[0];j[1]=parseInt(j[1],10)||0;if(g.at[0]==="right")n.left+=l;else if(g.at[0]==="center")n.left+=l/2;if(g.at[1]==="bottom")n.top+=
+-o;else if(g.at[1]==="center")n.top+=o/2;n.left+=j[0];n.top+=j[1];return this.each(function(){var k=a(this),m=k.outerWidth(),p=k.outerHeight(),q=parseInt(a.curCSS(this,"marginLeft",true))||0,s=parseInt(a.curCSS(this,"marginTop",true))||0,r=m+q+(parseInt(a.curCSS(this,"marginRight",true))||0),u=p+s+(parseInt(a.curCSS(this,"marginBottom",true))||0),v=a.extend({},n),w;if(g.my[0]==="right")v.left-=m;else if(g.my[0]==="center")v.left-=m/2;if(g.my[1]==="bottom")v.top-=p;else if(g.my[1]==="center")v.top-=
+-p/2;v.left=Math.round(v.left);v.top=Math.round(v.top);w={left:v.left-q,top:v.top-s};a.each(["left","top"],function(x,y){a.ui.position[f[x]]&&a.ui.position[f[x]][y](v,{targetWidth:l,targetHeight:o,elemWidth:m,elemHeight:p,collisionPosition:w,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});a.fn.bgiframe&&k.bgiframe();k.offset(a.extend(v,{using:g.using}))})};a.ui.position={fit:{left:function(g,i){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();g.left=
+-b>0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+=
+-i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g),
+-f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery);
+-(function(a,c){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+-this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(d){if(d===c)return this._value();this._setOption("value",d);return this},_setOption:function(d,e){if(d==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var d=this.options.value;if(typeof d!=="number")d=0;return Math.min(this.options.max,Math.max(this.min,d))},_percentage:function(){return 100*
+-this._value()/this.options.max},_refreshValue:function(){var d=this.value(),e=this._percentage();if(this.oldValue!==d){this.oldValue=d;this._trigger("change")}this.valueDiv.toggle(d>this.min).toggleClass("ui-corner-right",d===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",d)}});a.extend(a.ui.progressbar,{version:"1.8.15"})})(jQuery);
+-(function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var c=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=d.values&&d.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(d.range){if(d.range===true){if(!d.values)d.values=[this._valueMin(),this._valueMin()];if(d.values.length&&d.values.length!==2)d.values=[d.values[0],d.values[0]]}this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:""))}for(var i=e.length;i<h;i+=1)g.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+-this.handles=e.add(a(g.join("")).appendTo(c.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(d.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle",
+-b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!c.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!c._keySliding){c._keySliding=true;a(this).addClass("ui-state-active");l=c._start(b,j);if(l===false)return}break}n=c.options.step;l=c.options.values&&c.options.values.length?
+-(o=c.values(j)):(o=c.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=c._valueMin();break;case a.ui.keyCode.END:o=c._valueMax();break;case a.ui.keyCode.PAGE_UP:o=c._trimAlignValue(l+(c._valueMax()-c._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=c._trimAlignValue(l-(c._valueMax()-c._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===c._valueMax())return;o=c._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===c._valueMin())return;o=c._trimAlignValue(l-
+-n);break}c._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(c._keySliding){c._keySliding=false;c._stop(b,f);c._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+-return this},_mouseCapture:function(c){var d=this.options,e,h,g,i,b;if(d.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:c.pageX,y:c.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(d.range===true&&this.values(1)===d.min){b+=1;g=a(this.handles[b])}if(this._start(c,b)===false)return false;
+-this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();d=g.offset();this._clickOffset=!a(c.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:c.pageX-d.left-g.width()/2,top:c.pageY-d.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(c,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(c){var d=
+-this._normValueFromMouse({x:c.pageX,y:c.pageY});this._slide(c,this._handleIndex,d);return false},_mouseStop:function(c){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(c,this._handleIndex);this._change(c,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(c){var d;if(this.orientation==="horizontal"){d=
+-this.elementSize.width;c=c.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;c=c.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}d=c/d;if(d>1)d=1;if(d<0)d=0;if(this.orientation==="vertical")d=1-d;c=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+d*c)},_start:function(c,d){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);
+-e.values=this.values()}return this._trigger("start",c,e)},_slide:function(c,d,e){var h;if(this.options.values&&this.options.values.length){h=this.values(d?0:1);if(this.options.values.length===2&&this.options.range===true&&(d===0&&e>h||d===1&&e<h))e=h;if(e!==this.values(d)){h=this.values();h[d]=e;c=this._trigger("slide",c,{handle:this.handles[d],value:e,values:h});this.values(d?0:1);c!==false&&this.values(d,e,true)}}else if(e!==this.value()){c=this._trigger("slide",c,{handle:this.handles[d],value:e});
+-c!==false&&this.value(e)}},_stop:function(c,d){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);e.values=this.values()}this._trigger("stop",c,e)},_change:function(c,d){if(!this._keySliding&&!this._mouseSliding){var e={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(d);e.values=this.values()}this._trigger("change",c,e)}},value:function(c){if(arguments.length){this.options.value=
+-this._trimAlignValue(c);this._refreshValue();this._change(null,0)}else return this._value()},values:function(c,d){var e,h,g;if(arguments.length>1){this.options.values[c]=this._trimAlignValue(d);this._refreshValue();this._change(null,c)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g<e.length;g+=1){e[g]=this._trimAlignValue(h[g]);this._change(null,g)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(c):
+-this.value();else return this._values()},_setOption:function(c,d){var e,h=0;if(a.isArray(this.options.values))h=this.options.values.length;a.Widget.prototype._setOption.apply(this,arguments);switch(c){case "disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(e=0;e<h;e+=1)this._change(null,e);this._animateOff=false;break}},_value:function(){var c=this.options.value;return c=this._trimAlignValue(c)},_values:function(c){var d,e;if(arguments.length){d=this.options.values[c];
+-return d=this._trimAlignValue(d)}else{d=this.options.values.slice();for(e=0;e<d.length;e+=1)d[e]=this._trimAlignValue(d[e]);return d}},_trimAlignValue:function(c){if(c<=this._valueMin())return this._valueMin();if(c>=this._valueMax())return this._valueMax();var d=this.options.step>0?this.options.step:1,e=(c-this._valueMin())%d;c=c-e;if(Math.abs(e)*2>=d)c+=e>0?d:-d;return parseFloat(c.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var c=
+-this.options.range,d=this.options,e=this,h=!this._animateOff?d.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,d.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},d.animate);if(o===1)e.range[h?"animate":"css"]({width:g-
+-b+"%"},{queue:false,duration:d.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},d.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:d.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,d.animate);if(c==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[h?"animate":"css"]({width:g+"%"},
+-d.animate);if(c==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:d.animate});if(c==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},d.animate);if(c==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:d.animate})}}});a.extend(a.ui.slider,{version:"1.8.15"})})(jQuery);
+-(function(a,c){function d(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&&
+-b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+d()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i=
+-a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]||
+-(x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===c){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected=
+-this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+-if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+-this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+
+-r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal",
+-function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")};
+-this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected=
+--1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+-a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b=
+-a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i,
+-b,f){if(f===c)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]);
+-o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove();
+-if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1<this.anchors.length?1:-1));b.disabled=a.map(a.grep(b.disabled,function(l){return l!=i}),function(l){return l>=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null,
+-this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this},
+-load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j,
+-"cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+-url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.15"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n<f.anchors.length?n:0)},i);o&&o.stopPropagation()});b=f._unrotate||(f._unrotate=!b?function(o){o.clientX&&
+-f.rotate(null)}:function(){t=j.selected;l()});if(i){this.element.bind("tabsshow",l);this.anchors.bind(j.event+".tabs",b);l()}else{clearTimeout(f.rotation);this.element.unbind("tabsshow",l);this.anchors.unbind(j.event+".tabs",b);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.css	(revision 15488)
+@@ -1,196 +0,0 @@
+-/** Font Family and Sizes */
+-
+-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+-	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
+-}
+-
+-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+-#qunit-tests { font-size: smaller; }
+-
+-
+-/** Resets */
+-
+-#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
+-	margin: 0;
+-	padding: 0;
+-}
+-
+-
+-/** Header */
+-
+-#qunit-header {
+-	padding: 0.5em 0 0.5em 1em;
+-
+-	color: #8699a4;
+-	background-color: #0d3349;
+-
+-	font-size: 1.5em;
+-	line-height: 1em;
+-	font-weight: normal;
+-	
+-	border-radius: 15px 15px 0 0;
+-	-moz-border-radius: 15px 15px 0 0;
+-	-webkit-border-top-right-radius: 15px;
+-	-webkit-border-top-left-radius: 15px;
+-}
+-
+-#qunit-header a {
+-	text-decoration: none;
+-	color: #c2ccd1;
+-}
+-
+-#qunit-header a:hover,
+-#qunit-header a:focus {
+-	color: #fff;
+-}
+-
+-#qunit-banner {
+-	height: 5px;
+-}
+-
+-#qunit-testrunner-toolbar {
+-	padding: 0em 0 0.5em 2em;
+-}
+-
+-#qunit-userAgent {
+-	padding: 0.5em 0 0.5em 2.5em;
+-	background-color: #2b81af;
+-	color: #fff;
+-	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+-}
+-
+-
+-/** Tests: Pass/Fail */
+-
+-#qunit-tests {
+-	list-style-position: inside;
+-}
+-
+-#qunit-tests li {
+-	padding: 0.4em 0.5em 0.4em 2.5em;
+-	border-bottom: 1px solid #fff;
+-	list-style-position: inside;
+-}
+-
+-#qunit-tests li strong {
+-	cursor: pointer;
+-}
+-
+-#qunit-tests ol {
+-	margin-top: 0.5em;
+-	padding: 0.5em;
+-	
+-	background-color: #fff;
+-	
+-	border-radius: 15px;
+-	-moz-border-radius: 15px;
+-	-webkit-border-radius: 15px;
+-	
+-	box-shadow: inset 0px 2px 13px #999;
+-	-moz-box-shadow: inset 0px 2px 13px #999;
+-	-webkit-box-shadow: inset 0px 2px 13px #999;
+-}
+-
+-#qunit-tests table {
+-	border-collapse: collapse;
+-	margin-top: .2em;
+-}
+-
+-#qunit-tests th {
+-	text-align: right;
+-	vertical-align: top;
+-	padding: 0 .5em 0 0;
+-}
+-
+-#qunit-tests td {
+-	vertical-align: top;
+-}
+-
+-#qunit-tests pre {
+-	margin: 0;
+-	white-space: pre-wrap;
+-	word-wrap: break-word;
+-}
+-
+-#qunit-tests del {
+-	background-color: #e0f2be;
+-	color: #374e0c;
+-	text-decoration: none;
+-}
+-
+-#qunit-tests ins {
+-	background-color: #ffcaca;
+-	color: #500;
+-	text-decoration: none;
+-}
+-
+-/*** Test Counts */
+-
+-#qunit-tests b.counts                       { color: black; }
+-#qunit-tests b.passed                       { color: #5E740B; }
+-#qunit-tests b.failed                       { color: #710909; }
+-
+-#qunit-tests li li {
+-	margin: 0.5em;
+-	padding: 0.4em 0.5em 0.4em 0.5em;
+-	background-color: #fff;
+-	border-bottom: none;
+-	list-style-position: inside;
+-}
+-
+-/*** Passing Styles */
+-
+-#qunit-tests li li.pass {
+-	color: #5E740B;
+-	background-color: #fff;
+-	border-left: 26px solid #C6E746;
+-}
+-
+-#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
+-#qunit-tests .pass .test-name               { color: #366097; }
+- 
+-#qunit-tests .pass .test-actual,
+-#qunit-tests .pass .test-expected           { color: #999999; }
+-
+-#qunit-banner.qunit-pass                    { background-color: #C6E746; }
+-
+-/*** Failing Styles */
+-
+-#qunit-tests li li.fail {
+-	color: #710909;
+-	background-color: #fff;
+-	border-left: 26px solid #EE5757;
+-}
+-
+-#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
+-#qunit-tests .fail .test-name,
+-#qunit-tests .fail .module-name             { color: #000000; }
+-
+-#qunit-tests .fail .test-actual             { color: #EE5757; }
+-#qunit-tests .fail .test-expected           { color: green;   }
+-
+-#qunit-banner.qunit-fail, 
+-#qunit-testrunner-toolbar                   { background-color: #EE5757; }
+-
+-
+-/** Footer */
+-
+-#qunit-testresult {
+-	padding: 0.5em 0.5em 0.5em 2.5em;
+-
+-	color: #2b81af;
+-	background-color: #D2E0E6;
+-
+-	border-radius: 0 0 15px 15px;
+-	-moz-border-radius: 0 0 15px 15px;
+-	-webkit-border-bottom-right-radius: 15px;
+-	-webkit-border-bottom-left-radius: 15px;
+-}
+-
+-/** Fixture */
+-
+-#qunit-fixture {
+-	position: absolute;
+-	top: -10000px;
+-	left: -10000px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.js	(revision 15488)
+@@ -1,8981 +0,0 @@
+-/*!
+- * jQuery JavaScript Library v1.6.2
+- * http://jquery.com/
+- *
+- * Copyright 2011, John Resig
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * Includes Sizzle.js
+- * http://sizzlejs.com/
+- * Copyright 2011, The Dojo Foundation
+- * Released under the MIT, BSD, and GPL Licenses.
+- *
+- * Date: Thu Jun 30 14:16:56 2011 -0400
+- */
+-(function( window, undefined ) {
+-
+-// Use the correct document accordingly with window argument (sandbox)
+-var document = window.document,
+-	navigator = window.navigator,
+-	location = window.location;
+-var jQuery = (function() {
+-
+-// Define a local copy of jQuery
+-var jQuery = function( selector, context ) {
+-		// The jQuery object is actually just the init constructor 'enhanced'
+-		return new jQuery.fn.init( selector, context, rootjQuery );
+-	},
+-
+-	// Map over jQuery in case of overwrite
+-	_jQuery = window.jQuery,
+-
+-	// Map over the $ in case of overwrite
+-	_$ = window.$,
+-
+-	// A central reference to the root jQuery(document)
+-	rootjQuery,
+-
+-	// A simple way to check for HTML strings or ID strings
+-	// (both of which we optimize for)
+-	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+-
+-	// Check if a string has a non-whitespace character in it
+-	rnotwhite = /\S/,
+-
+-	// Used for trimming whitespace
+-	trimLeft = /^\s+/,
+-	trimRight = /\s+$/,
+-
+-	// Check for digits
+-	rdigit = /\d/,
+-
+-	// Match a standalone tag
+-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+-
+-	// JSON RegExp
+-	rvalidchars = /^[\],:{}\s]*$/,
+-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+-
+-	// Useragent RegExp
+-	rwebkit = /(webkit)[ \/]([\w.]+)/,
+-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+-	rmsie = /(msie) ([\w.]+)/,
+-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+-
+-	// Matches dashed string for camelizing
+-	rdashAlpha = /-([a-z])/ig,
+-
+-	// Used by jQuery.camelCase as callback to replace()
+-	fcamelCase = function( all, letter ) {
+-		return letter.toUpperCase();
+-	},
+-
+-	// Keep a UserAgent string for use with jQuery.browser
+-	userAgent = navigator.userAgent,
+-
+-	// For matching the engine and version of the browser
+-	browserMatch,
+-
+-	// The deferred used on DOM ready
+-	readyList,
+-
+-	// The ready event handler
+-	DOMContentLoaded,
+-
+-	// Save a reference to some core methods
+-	toString = Object.prototype.toString,
+-	hasOwn = Object.prototype.hasOwnProperty,
+-	push = Array.prototype.push,
+-	slice = Array.prototype.slice,
+-	trim = String.prototype.trim,
+-	indexOf = Array.prototype.indexOf,
+-
+-	// [[Class]] -> type pairs
+-	class2type = {};
+-
+-jQuery.fn = jQuery.prototype = {
+-	constructor: jQuery,
+-	init: function( selector, context, rootjQuery ) {
+-		var match, elem, ret, doc;
+-
+-		// Handle $(""), $(null), or $(undefined)
+-		if ( !selector ) {
+-			return this;
+-		}
+-
+-		// Handle $(DOMElement)
+-		if ( selector.nodeType ) {
+-			this.context = this[0] = selector;
+-			this.length = 1;
+-			return this;
+-		}
+-
+-		// The body element only exists once, optimize finding it
+-		if ( selector === "body" && !context && document.body ) {
+-			this.context = document;
+-			this[0] = document.body;
+-			this.selector = selector;
+-			this.length = 1;
+-			return this;
+-		}
+-
+-		// Handle HTML strings
+-		if ( typeof selector === "string" ) {
+-			// Are we dealing with HTML string or an ID?
+-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+-				// Assume that strings that start and end with <> are HTML and skip the regex check
+-				match = [ null, selector, null ];
+-
+-			} else {
+-				match = quickExpr.exec( selector );
+-			}
+-
+-			// Verify a match, and that no context was specified for #id
+-			if ( match && (match[1] || !context) ) {
+-
+-				// HANDLE: $(html) -> $(array)
+-				if ( match[1] ) {
+-					context = context instanceof jQuery ? context[0] : context;
+-					doc = (context ? context.ownerDocument || context : document);
+-
+-					// If a single string is passed in and it's a single tag
+-					// just do a createElement and skip the rest
+-					ret = rsingleTag.exec( selector );
+-
+-					if ( ret ) {
+-						if ( jQuery.isPlainObject( context ) ) {
+-							selector = [ document.createElement( ret[1] ) ];
+-							jQuery.fn.attr.call( selector, context, true );
+-
+-						} else {
+-							selector = [ doc.createElement( ret[1] ) ];
+-						}
+-
+-					} else {
+-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+-						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
+-					}
+-
+-					return jQuery.merge( this, selector );
+-
+-				// HANDLE: $("#id")
+-				} else {
+-					elem = document.getElementById( match[2] );
+-
+-					// Check parentNode to catch when Blackberry 4.6 returns
+-					// nodes that are no longer in the document #6963
+-					if ( elem && elem.parentNode ) {
+-						// Handle the case where IE and Opera return items
+-						// by name instead of ID
+-						if ( elem.id !== match[2] ) {
+-							return rootjQuery.find( selector );
+-						}
+-
+-						// Otherwise, we inject the element directly into the jQuery object
+-						this.length = 1;
+-						this[0] = elem;
+-					}
+-
+-					this.context = document;
+-					this.selector = selector;
+-					return this;
+-				}
+-
+-			// HANDLE: $(expr, $(...))
+-			} else if ( !context || context.jquery ) {
+-				return (context || rootjQuery).find( selector );
+-
+-			// HANDLE: $(expr, context)
+-			// (which is just equivalent to: $(context).find(expr)
+-			} else {
+-				return this.constructor( context ).find( selector );
+-			}
+-
+-		// HANDLE: $(function)
+-		// Shortcut for document ready
+-		} else if ( jQuery.isFunction( selector ) ) {
+-			return rootjQuery.ready( selector );
+-		}
+-
+-		if (selector.selector !== undefined) {
+-			this.selector = selector.selector;
+-			this.context = selector.context;
+-		}
+-
+-		return jQuery.makeArray( selector, this );
+-	},
+-
+-	// Start with an empty selector
+-	selector: "",
+-
+-	// The current version of jQuery being used
+-	jquery: "1.6.2",
+-
+-	// The default length of a jQuery object is 0
+-	length: 0,
+-
+-	// The number of elements contained in the matched element set
+-	size: function() {
+-		return this.length;
+-	},
+-
+-	toArray: function() {
+-		return slice.call( this, 0 );
+-	},
+-
+-	// Get the Nth element in the matched element set OR
+-	// Get the whole matched element set as a clean array
+-	get: function( num ) {
+-		return num == null ?
+-
+-			// Return a 'clean' array
+-			this.toArray() :
+-
+-			// Return just the object
+-			( num < 0 ? this[ this.length + num ] : this[ num ] );
+-	},
+-
+-	// Take an array of elements and push it onto the stack
+-	// (returning the new matched element set)
+-	pushStack: function( elems, name, selector ) {
+-		// Build a new jQuery matched element set
+-		var ret = this.constructor();
+-
+-		if ( jQuery.isArray( elems ) ) {
+-			push.apply( ret, elems );
+-
+-		} else {
+-			jQuery.merge( ret, elems );
+-		}
+-
+-		// Add the old object onto the stack (as a reference)
+-		ret.prevObject = this;
+-
+-		ret.context = this.context;
+-
+-		if ( name === "find" ) {
+-			ret.selector = this.selector + (this.selector ? " " : "") + selector;
+-		} else if ( name ) {
+-			ret.selector = this.selector + "." + name + "(" + selector + ")";
+-		}
+-
+-		// Return the newly-formed element set
+-		return ret;
+-	},
+-
+-	// Execute a callback for every element in the matched set.
+-	// (You can seed the arguments with an array of args, but this is
+-	// only used internally.)
+-	each: function( callback, args ) {
+-		return jQuery.each( this, callback, args );
+-	},
+-
+-	ready: function( fn ) {
+-		// Attach the listeners
+-		jQuery.bindReady();
+-
+-		// Add the callback
+-		readyList.done( fn );
+-
+-		return this;
+-	},
+-
+-	eq: function( i ) {
+-		return i === -1 ?
+-			this.slice( i ) :
+-			this.slice( i, +i + 1 );
+-	},
+-
+-	first: function() {
+-		return this.eq( 0 );
+-	},
+-
+-	last: function() {
+-		return this.eq( -1 );
+-	},
+-
+-	slice: function() {
+-		return this.pushStack( slice.apply( this, arguments ),
+-			"slice", slice.call(arguments).join(",") );
+-	},
+-
+-	map: function( callback ) {
+-		return this.pushStack( jQuery.map(this, function( elem, i ) {
+-			return callback.call( elem, i, elem );
+-		}));
+-	},
+-
+-	end: function() {
+-		return this.prevObject || this.constructor(null);
+-	},
+-
+-	// For internal use only.
+-	// Behaves like an Array's method, not like a jQuery method.
+-	push: push,
+-	sort: [].sort,
+-	splice: [].splice
+-};
+-
+-// Give the init function the jQuery prototype for later instantiation
+-jQuery.fn.init.prototype = jQuery.fn;
+-
+-jQuery.extend = jQuery.fn.extend = function() {
+-	var options, name, src, copy, copyIsArray, clone,
+-		target = arguments[0] || {},
+-		i = 1,
+-		length = arguments.length,
+-		deep = false;
+-
+-	// Handle a deep copy situation
+-	if ( typeof target === "boolean" ) {
+-		deep = target;
+-		target = arguments[1] || {};
+-		// skip the boolean and the target
+-		i = 2;
+-	}
+-
+-	// Handle case when target is a string or something (possible in deep copy)
+-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+-		target = {};
+-	}
+-
+-	// extend jQuery itself if only one argument is passed
+-	if ( length === i ) {
+-		target = this;
+-		--i;
+-	}
+-
+-	for ( ; i < length; i++ ) {
+-		// Only deal with non-null/undefined values
+-		if ( (options = arguments[ i ]) != null ) {
+-			// Extend the base object
+-			for ( name in options ) {
+-				src = target[ name ];
+-				copy = options[ name ];
+-
+-				// Prevent never-ending loop
+-				if ( target === copy ) {
+-					continue;
+-				}
+-
+-				// Recurse if we're merging plain objects or arrays
+-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+-					if ( copyIsArray ) {
+-						copyIsArray = false;
+-						clone = src && jQuery.isArray(src) ? src : [];
+-
+-					} else {
+-						clone = src && jQuery.isPlainObject(src) ? src : {};
+-					}
+-
+-					// Never move original objects, clone them
+-					target[ name ] = jQuery.extend( deep, clone, copy );
+-
+-				// Don't bring in undefined values
+-				} else if ( copy !== undefined ) {
+-					target[ name ] = copy;
+-				}
+-			}
+-		}
+-	}
+-
+-	// Return the modified object
+-	return target;
+-};
+-
+-jQuery.extend({
+-	noConflict: function( deep ) {
+-		if ( window.$ === jQuery ) {
+-			window.$ = _$;
+-		}
+-
+-		if ( deep && window.jQuery === jQuery ) {
+-			window.jQuery = _jQuery;
+-		}
+-
+-		return jQuery;
+-	},
+-
+-	// Is the DOM ready to be used? Set to true once it occurs.
+-	isReady: false,
+-
+-	// A counter to track how many items to wait for before
+-	// the ready event fires. See #6781
+-	readyWait: 1,
+-
+-	// Hold (or release) the ready event
+-	holdReady: function( hold ) {
+-		if ( hold ) {
+-			jQuery.readyWait++;
+-		} else {
+-			jQuery.ready( true );
+-		}
+-	},
+-
+-	// Handle when the DOM is ready
+-	ready: function( wait ) {
+-		// Either a released hold or an DOMready/load event and not yet ready
+-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+-			if ( !document.body ) {
+-				return setTimeout( jQuery.ready, 1 );
+-			}
+-
+-			// Remember that the DOM is ready
+-			jQuery.isReady = true;
+-
+-			// If a normal DOM Ready event fired, decrement, and wait if need be
+-			if ( wait !== true && --jQuery.readyWait > 0 ) {
+-				return;
+-			}
+-
+-			// If there are functions bound, to execute
+-			readyList.resolveWith( document, [ jQuery ] );
+-
+-			// Trigger any bound ready events
+-			if ( jQuery.fn.trigger ) {
+-				jQuery( document ).trigger( "ready" ).unbind( "ready" );
+-			}
+-		}
+-	},
+-
+-	bindReady: function() {
+-		if ( readyList ) {
+-			return;
+-		}
+-
+-		readyList = jQuery._Deferred();
+-
+-		// Catch cases where $(document).ready() is called after the
+-		// browser event has already occurred.
+-		if ( document.readyState === "complete" ) {
+-			// Handle it asynchronously to allow scripts the opportunity to delay ready
+-			return setTimeout( jQuery.ready, 1 );
+-		}
+-
+-		// Mozilla, Opera and webkit nightlies currently support this event
+-		if ( document.addEventListener ) {
+-			// Use the handy event callback
+-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+-
+-			// A fallback to window.onload, that will always work
+-			window.addEventListener( "load", jQuery.ready, false );
+-
+-		// If IE event model is used
+-		} else if ( document.attachEvent ) {
+-			// ensure firing before onload,
+-			// maybe late but safe also for iframes
+-			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+-
+-			// A fallback to window.onload, that will always work
+-			window.attachEvent( "onload", jQuery.ready );
+-
+-			// If IE and not a frame
+-			// continually check to see if the document is ready
+-			var toplevel = false;
+-
+-			try {
+-				toplevel = window.frameElement == null;
+-			} catch(e) {}
+-
+-			if ( document.documentElement.doScroll && toplevel ) {
+-				doScrollCheck();
+-			}
+-		}
+-	},
+-
+-	// See test/unit/core.js for details concerning isFunction.
+-	// Since version 1.3, DOM methods and functions like alert
+-	// aren't supported. They return false on IE (#2968).
+-	isFunction: function( obj ) {
+-		return jQuery.type(obj) === "function";
+-	},
+-
+-	isArray: Array.isArray || function( obj ) {
+-		return jQuery.type(obj) === "array";
+-	},
+-
+-	// A crude way of determining if an object is a window
+-	isWindow: function( obj ) {
+-		return obj && typeof obj === "object" && "setInterval" in obj;
+-	},
+-
+-	isNaN: function( obj ) {
+-		return obj == null || !rdigit.test( obj ) || isNaN( obj );
+-	},
+-
+-	type: function( obj ) {
+-		return obj == null ?
+-			String( obj ) :
+-			class2type[ toString.call(obj) ] || "object";
+-	},
+-
+-	isPlainObject: function( obj ) {
+-		// Must be an Object.
+-		// Because of IE, we also have to check the presence of the constructor property.
+-		// Make sure that DOM nodes and window objects don't pass through, as well
+-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+-			return false;
+-		}
+-
+-		// Not own constructor property must be Object
+-		if ( obj.constructor &&
+-			!hasOwn.call(obj, "constructor") &&
+-			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+-			return false;
+-		}
+-
+-		// Own properties are enumerated firstly, so to speed up,
+-		// if last one is own, then all properties are own.
+-
+-		var key;
+-		for ( key in obj ) {}
+-
+-		return key === undefined || hasOwn.call( obj, key );
+-	},
+-
+-	isEmptyObject: function( obj ) {
+-		for ( var name in obj ) {
+-			return false;
+-		}
+-		return true;
+-	},
+-
+-	error: function( msg ) {
+-		throw msg;
+-	},
+-
+-	parseJSON: function( data ) {
+-		if ( typeof data !== "string" || !data ) {
+-			return null;
+-		}
+-
+-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+-		data = jQuery.trim( data );
+-
+-		// Attempt to parse using the native JSON parser first
+-		if ( window.JSON && window.JSON.parse ) {
+-			return window.JSON.parse( data );
+-		}
+-
+-		// Make sure the incoming data is actual JSON
+-		// Logic borrowed from http://json.org/json2.js
+-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+-			.replace( rvalidtokens, "]" )
+-			.replace( rvalidbraces, "")) ) {
+-
+-			return (new Function( "return " + data ))();
+-
+-		}
+-		jQuery.error( "Invalid JSON: " + data );
+-	},
+-
+-	// Cross-browser xml parsing
+-	// (xml & tmp used internally)
+-	parseXML: function( data , xml , tmp ) {
+-
+-		if ( window.DOMParser ) { // Standard
+-			tmp = new DOMParser();
+-			xml = tmp.parseFromString( data , "text/xml" );
+-		} else { // IE
+-			xml = new ActiveXObject( "Microsoft.XMLDOM" );
+-			xml.async = "false";
+-			xml.loadXML( data );
+-		}
+-
+-		tmp = xml.documentElement;
+-
+-		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+-			jQuery.error( "Invalid XML: " + data );
+-		}
+-
+-		return xml;
+-	},
+-
+-	noop: function() {},
+-
+-	// Evaluates a script in a global context
+-	// Workarounds based on findings by Jim Driscoll
+-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+-	globalEval: function( data ) {
+-		if ( data && rnotwhite.test( data ) ) {
+-			// We use execScript on Internet Explorer
+-			// We use an anonymous function so that context is window
+-			// rather than jQuery in Firefox
+-			( window.execScript || function( data ) {
+-				window[ "eval" ].call( window, data );
+-			} )( data );
+-		}
+-	},
+-
+-	// Converts a dashed string to camelCased string;
+-	// Used by both the css and data modules
+-	camelCase: function( string ) {
+-		return string.replace( rdashAlpha, fcamelCase );
+-	},
+-
+-	nodeName: function( elem, name ) {
+-		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+-	},
+-
+-	// args is for internal usage only
+-	each: function( object, callback, args ) {
+-		var name, i = 0,
+-			length = object.length,
+-			isObj = length === undefined || jQuery.isFunction( object );
+-
+-		if ( args ) {
+-			if ( isObj ) {
+-				for ( name in object ) {
+-					if ( callback.apply( object[ name ], args ) === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( ; i < length; ) {
+-					if ( callback.apply( object[ i++ ], args ) === false ) {
+-						break;
+-					}
+-				}
+-			}
+-
+-		// A special, fast, case for the most common use of each
+-		} else {
+-			if ( isObj ) {
+-				for ( name in object ) {
+-					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( ; i < length; ) {
+-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+-						break;
+-					}
+-				}
+-			}
+-		}
+-
+-		return object;
+-	},
+-
+-	// Use native String.trim function wherever possible
+-	trim: trim ?
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				trim.call( text );
+-		} :
+-
+-		// Otherwise use our own trimming functionality
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+-		},
+-
+-	// results is for internal usage only
+-	makeArray: function( array, results ) {
+-		var ret = results || [];
+-
+-		if ( array != null ) {
+-			// The window, strings (and functions) also have 'length'
+-			// The extra typeof function check is to prevent crashes
+-			// in Safari 2 (See: #3039)
+-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+-			var type = jQuery.type( array );
+-
+-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+-				push.call( ret, array );
+-			} else {
+-				jQuery.merge( ret, array );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	inArray: function( elem, array ) {
+-
+-		if ( indexOf ) {
+-			return indexOf.call( array, elem );
+-		}
+-
+-		for ( var i = 0, length = array.length; i < length; i++ ) {
+-			if ( array[ i ] === elem ) {
+-				return i;
+-			}
+-		}
+-
+-		return -1;
+-	},
+-
+-	merge: function( first, second ) {
+-		var i = first.length,
+-			j = 0;
+-
+-		if ( typeof second.length === "number" ) {
+-			for ( var l = second.length; j < l; j++ ) {
+-				first[ i++ ] = second[ j ];
+-			}
+-
+-		} else {
+-			while ( second[j] !== undefined ) {
+-				first[ i++ ] = second[ j++ ];
+-			}
+-		}
+-
+-		first.length = i;
+-
+-		return first;
+-	},
+-
+-	grep: function( elems, callback, inv ) {
+-		var ret = [], retVal;
+-		inv = !!inv;
+-
+-		// Go through the array, only saving the items
+-		// that pass the validator function
+-		for ( var i = 0, length = elems.length; i < length; i++ ) {
+-			retVal = !!callback( elems[ i ], i );
+-			if ( inv !== retVal ) {
+-				ret.push( elems[ i ] );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	// arg is for internal usage only
+-	map: function( elems, callback, arg ) {
+-		var value, key, ret = [],
+-			i = 0,
+-			length = elems.length,
+-			// jquery objects are treated as arrays
+-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+-
+-		// Go through the array, translating each of the items to their
+-		if ( isArray ) {
+-			for ( ; i < length; i++ ) {
+-				value = callback( elems[ i ], i, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-
+-		// Go through every key on the object,
+-		} else {
+-			for ( key in elems ) {
+-				value = callback( elems[ key ], key, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-		}
+-
+-		// Flatten any nested arrays
+-		return ret.concat.apply( [], ret );
+-	},
+-
+-	// A global GUID counter for objects
+-	guid: 1,
+-
+-	// Bind a function to a context, optionally partially applying any
+-	// arguments.
+-	proxy: function( fn, context ) {
+-		if ( typeof context === "string" ) {
+-			var tmp = fn[ context ];
+-			context = fn;
+-			fn = tmp;
+-		}
+-
+-		// Quick check to determine if target is callable, in the spec
+-		// this throws a TypeError, but we will just return undefined.
+-		if ( !jQuery.isFunction( fn ) ) {
+-			return undefined;
+-		}
+-
+-		// Simulated bind
+-		var args = slice.call( arguments, 2 ),
+-			proxy = function() {
+-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
+-			};
+-
+-		// Set the guid of unique handler to the same of original handler, so it can be removed
+-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+-
+-		return proxy;
+-	},
+-
+-	// Mutifunctional method to get and set values to a collection
+-	// The value/s can optionally be executed if it's a function
+-	access: function( elems, key, value, exec, fn, pass ) {
+-		var length = elems.length;
+-
+-		// Setting many attributes
+-		if ( typeof key === "object" ) {
+-			for ( var k in key ) {
+-				jQuery.access( elems, k, key[k], exec, fn, value );
+-			}
+-			return elems;
+-		}
+-
+-		// Setting one attribute
+-		if ( value !== undefined ) {
+-			// Optionally, function values get executed if exec is true
+-			exec = !pass && exec && jQuery.isFunction(value);
+-
+-			for ( var i = 0; i < length; i++ ) {
+-				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+-			}
+-
+-			return elems;
+-		}
+-
+-		// Getting an attribute
+-		return length ? fn( elems[0], key ) : undefined;
+-	},
+-
+-	now: function() {
+-		return (new Date()).getTime();
+-	},
+-
+-	// Use of jQuery.browser is frowned upon.
+-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+-	uaMatch: function( ua ) {
+-		ua = ua.toLowerCase();
+-
+-		var match = rwebkit.exec( ua ) ||
+-			ropera.exec( ua ) ||
+-			rmsie.exec( ua ) ||
+-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+-			[];
+-
+-		return { browser: match[1] || "", version: match[2] || "0" };
+-	},
+-
+-	sub: function() {
+-		function jQuerySub( selector, context ) {
+-			return new jQuerySub.fn.init( selector, context );
+-		}
+-		jQuery.extend( true, jQuerySub, this );
+-		jQuerySub.superclass = this;
+-		jQuerySub.fn = jQuerySub.prototype = this();
+-		jQuerySub.fn.constructor = jQuerySub;
+-		jQuerySub.sub = this.sub;
+-		jQuerySub.fn.init = function init( selector, context ) {
+-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+-				context = jQuerySub( context );
+-			}
+-
+-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+-		};
+-		jQuerySub.fn.init.prototype = jQuerySub.fn;
+-		var rootjQuerySub = jQuerySub(document);
+-		return jQuerySub;
+-	},
+-
+-	browser: {}
+-});
+-
+-// Populate the class2type map
+-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+-});
+-
+-browserMatch = jQuery.uaMatch( userAgent );
+-if ( browserMatch.browser ) {
+-	jQuery.browser[ browserMatch.browser ] = true;
+-	jQuery.browser.version = browserMatch.version;
+-}
+-
+-// Deprecated, use jQuery.browser.webkit instead
+-if ( jQuery.browser.webkit ) {
+-	jQuery.browser.safari = true;
+-}
+-
+-// IE doesn't match non-breaking spaces with \s
+-if ( rnotwhite.test( "\xA0" ) ) {
+-	trimLeft = /^[\s\xA0]+/;
+-	trimRight = /[\s\xA0]+$/;
+-}
+-
+-// All jQuery objects should point back to these
+-rootjQuery = jQuery(document);
+-
+-// Cleanup functions for the document ready method
+-if ( document.addEventListener ) {
+-	DOMContentLoaded = function() {
+-		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+-		jQuery.ready();
+-	};
+-
+-} else if ( document.attachEvent ) {
+-	DOMContentLoaded = function() {
+-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+-		if ( document.readyState === "complete" ) {
+-			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+-			jQuery.ready();
+-		}
+-	};
+-}
+-
+-// The DOM ready check for Internet Explorer
+-function doScrollCheck() {
+-	if ( jQuery.isReady ) {
+-		return;
+-	}
+-
+-	try {
+-		// If IE is used, use the trick by Diego Perini
+-		// http://javascript.nwbox.com/IEContentLoaded/
+-		document.documentElement.doScroll("left");
+-	} catch(e) {
+-		setTimeout( doScrollCheck, 1 );
+-		return;
+-	}
+-
+-	// and execute any waiting functions
+-	jQuery.ready();
+-}
+-
+-return jQuery;
+-
+-})();
+-
+-
+-var // Promise methods
+-	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
+-	// Static reference to slice
+-	sliceDeferred = [].slice;
+-
+-jQuery.extend({
+-	// Create a simple deferred (one callbacks list)
+-	_Deferred: function() {
+-		var // callbacks list
+-			callbacks = [],
+-			// stored [ context , args ]
+-			fired,
+-			// to avoid firing when already doing so
+-			firing,
+-			// flag to know if the deferred has been cancelled
+-			cancelled,
+-			// the deferred itself
+-			deferred  = {
+-
+-				// done( f1, f2, ...)
+-				done: function() {
+-					if ( !cancelled ) {
+-						var args = arguments,
+-							i,
+-							length,
+-							elem,
+-							type,
+-							_fired;
+-						if ( fired ) {
+-							_fired = fired;
+-							fired = 0;
+-						}
+-						for ( i = 0, length = args.length; i < length; i++ ) {
+-							elem = args[ i ];
+-							type = jQuery.type( elem );
+-							if ( type === "array" ) {
+-								deferred.done.apply( deferred, elem );
+-							} else if ( type === "function" ) {
+-								callbacks.push( elem );
+-							}
+-						}
+-						if ( _fired ) {
+-							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
+-						}
+-					}
+-					return this;
+-				},
+-
+-				// resolve with given context and args
+-				resolveWith: function( context, args ) {
+-					if ( !cancelled && !fired && !firing ) {
+-						// make sure args are available (#8421)
+-						args = args || [];
+-						firing = 1;
+-						try {
+-							while( callbacks[ 0 ] ) {
+-								callbacks.shift().apply( context, args );
+-							}
+-						}
+-						finally {
+-							fired = [ context, args ];
+-							firing = 0;
+-						}
+-					}
+-					return this;
+-				},
+-
+-				// resolve with this as context and given arguments
+-				resolve: function() {
+-					deferred.resolveWith( this, arguments );
+-					return this;
+-				},
+-
+-				// Has this deferred been resolved?
+-				isResolved: function() {
+-					return !!( firing || fired );
+-				},
+-
+-				// Cancel
+-				cancel: function() {
+-					cancelled = 1;
+-					callbacks = [];
+-					return this;
+-				}
+-			};
+-
+-		return deferred;
+-	},
+-
+-	// Full fledged deferred (two callbacks list)
+-	Deferred: function( func ) {
+-		var deferred = jQuery._Deferred(),
+-			failDeferred = jQuery._Deferred(),
+-			promise;
+-		// Add errorDeferred methods, then and promise
+-		jQuery.extend( deferred, {
+-			then: function( doneCallbacks, failCallbacks ) {
+-				deferred.done( doneCallbacks ).fail( failCallbacks );
+-				return this;
+-			},
+-			always: function() {
+-				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
+-			},
+-			fail: failDeferred.done,
+-			rejectWith: failDeferred.resolveWith,
+-			reject: failDeferred.resolve,
+-			isRejected: failDeferred.isResolved,
+-			pipe: function( fnDone, fnFail ) {
+-				return jQuery.Deferred(function( newDefer ) {
+-					jQuery.each( {
+-						done: [ fnDone, "resolve" ],
+-						fail: [ fnFail, "reject" ]
+-					}, function( handler, data ) {
+-						var fn = data[ 0 ],
+-							action = data[ 1 ],
+-							returned;
+-						if ( jQuery.isFunction( fn ) ) {
+-							deferred[ handler ](function() {
+-								returned = fn.apply( this, arguments );
+-								if ( returned && jQuery.isFunction( returned.promise ) ) {
+-									returned.promise().then( newDefer.resolve, newDefer.reject );
+-								} else {
+-									newDefer[ action ]( returned );
+-								}
+-							});
+-						} else {
+-							deferred[ handler ]( newDefer[ action ] );
+-						}
+-					});
+-				}).promise();
+-			},
+-			// Get a promise for this deferred
+-			// If obj is provided, the promise aspect is added to the object
+-			promise: function( obj ) {
+-				if ( obj == null ) {
+-					if ( promise ) {
+-						return promise;
+-					}
+-					promise = obj = {};
+-				}
+-				var i = promiseMethods.length;
+-				while( i-- ) {
+-					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
+-				}
+-				return obj;
+-			}
+-		});
+-		// Make sure only one callback list will be used
+-		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
+-		// Unexpose cancel
+-		delete deferred.cancel;
+-		// Call given func if any
+-		if ( func ) {
+-			func.call( deferred, deferred );
+-		}
+-		return deferred;
+-	},
+-
+-	// Deferred helper
+-	when: function( firstParam ) {
+-		var args = arguments,
+-			i = 0,
+-			length = args.length,
+-			count = length,
+-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+-				firstParam :
+-				jQuery.Deferred();
+-		function resolveFunc( i ) {
+-			return function( value ) {
+-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+-				if ( !( --count ) ) {
+-					// Strange bug in FF4:
+-					// Values changed onto the arguments object sometimes end up as undefined values
+-					// outside the $.when method. Cloning the object into a fresh array solves the issue
+-					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
+-				}
+-			};
+-		}
+-		if ( length > 1 ) {
+-			for( ; i < length; i++ ) {
+-				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
+-					args[ i ].promise().then( resolveFunc(i), deferred.reject );
+-				} else {
+-					--count;
+-				}
+-			}
+-			if ( !count ) {
+-				deferred.resolveWith( deferred, args );
+-			}
+-		} else if ( deferred !== firstParam ) {
+-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+-		}
+-		return deferred.promise();
+-	}
+-});
+-
+-
+-
+-jQuery.support = (function() {
+-
+-	var div = document.createElement( "div" ),
+-		documentElement = document.documentElement,
+-		all,
+-		a,
+-		select,
+-		opt,
+-		input,
+-		marginDiv,
+-		support,
+-		fragment,
+-		body,
+-		testElementParent,
+-		testElement,
+-		testElementStyle,
+-		tds,
+-		events,
+-		eventName,
+-		i,
+-		isSupported;
+-
+-	// Preliminary tests
+-	div.setAttribute("className", "t");
+-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+-
+-	all = div.getElementsByTagName( "*" );
+-	a = div.getElementsByTagName( "a" )[ 0 ];
+-
+-	// Can't get basic test support
+-	if ( !all || !all.length || !a ) {
+-		return {};
+-	}
+-
+-	// First batch of supports tests
+-	select = document.createElement( "select" );
+-	opt = select.appendChild( document.createElement("option") );
+-	input = div.getElementsByTagName( "input" )[ 0 ];
+-
+-	support = {
+-		// IE strips leading whitespace when .innerHTML is used
+-		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+-
+-		// Make sure that tbody elements aren't automatically inserted
+-		// IE will insert them into empty tables
+-		tbody: !div.getElementsByTagName( "tbody" ).length,
+-
+-		// Make sure that link elements get serialized correctly by innerHTML
+-		// This requires a wrapper element in IE
+-		htmlSerialize: !!div.getElementsByTagName( "link" ).length,
+-
+-		// Get the style information from getAttribute
+-		// (IE uses .cssText instead)
+-		style: /top/.test( a.getAttribute("style") ),
+-
+-		// Make sure that URLs aren't manipulated
+-		// (IE normalizes it by default)
+-		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
+-
+-		// Make sure that element opacity exists
+-		// (IE uses filter instead)
+-		// Use a regex to work around a WebKit issue. See #5145
+-		opacity: /^0.55$/.test( a.style.opacity ),
+-
+-		// Verify style float existence
+-		// (IE uses styleFloat instead of cssFloat)
+-		cssFloat: !!a.style.cssFloat,
+-
+-		// Make sure that if no value is specified for a checkbox
+-		// that it defaults to "on".
+-		// (WebKit defaults to "" instead)
+-		checkOn: ( input.value === "on" ),
+-
+-		// Make sure that a selected-by-default option has a working selected property.
+-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+-		optSelected: opt.selected,
+-
+-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+-		getSetAttribute: div.className !== "t",
+-
+-		// Will be defined later
+-		submitBubbles: true,
+-		changeBubbles: true,
+-		focusinBubbles: false,
+-		deleteExpando: true,
+-		noCloneEvent: true,
+-		inlineBlockNeedsLayout: false,
+-		shrinkWrapBlocks: false,
+-		reliableMarginRight: true
+-	};
+-
+-	// Make sure checked status is properly cloned
+-	input.checked = true;
+-	support.noCloneChecked = input.cloneNode( true ).checked;
+-
+-	// Make sure that the options inside disabled selects aren't marked as disabled
+-	// (WebKit marks them as disabled)
+-	select.disabled = true;
+-	support.optDisabled = !opt.disabled;
+-
+-	// Test to see if it's possible to delete an expando from an element
+-	// Fails in Internet Explorer
+-	try {
+-		delete div.test;
+-	} catch( e ) {
+-		support.deleteExpando = false;
+-	}
+-
+-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+-		div.attachEvent( "onclick", function() {
+-			// Cloning a node shouldn't copy over any
+-			// bound event handlers (IE does this)
+-			support.noCloneEvent = false;
+-		});
+-		div.cloneNode( true ).fireEvent( "onclick" );
+-	}
+-
+-	// Check if a radio maintains it's value
+-	// after being appended to the DOM
+-	input = document.createElement("input");
+-	input.value = "t";
+-	input.setAttribute("type", "radio");
+-	support.radioValue = input.value === "t";
+-
+-	input.setAttribute("checked", "checked");
+-	div.appendChild( input );
+-	fragment = document.createDocumentFragment();
+-	fragment.appendChild( div.firstChild );
+-
+-	// WebKit doesn't clone checked state correctly in fragments
+-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+-
+-	div.innerHTML = "";
+-
+-	// Figure out if the W3C box model works as expected
+-	div.style.width = div.style.paddingLeft = "1px";
+-
+-	body = document.getElementsByTagName( "body" )[ 0 ];
+-	// We use our own, invisible, body unless the body is already present
+-	// in which case we use a div (#9239)
+-	testElement = document.createElement( body ? "div" : "body" );
+-	testElementStyle = {
+-		visibility: "hidden",
+-		width: 0,
+-		height: 0,
+-		border: 0,
+-		margin: 0
+-	};
+-	if ( body ) {
+-		jQuery.extend( testElementStyle, {
+-			position: "absolute",
+-			left: -1000,
+-			top: -1000
+-		});
+-	}
+-	for ( i in testElementStyle ) {
+-		testElement.style[ i ] = testElementStyle[ i ];
+-	}
+-	testElement.appendChild( div );
+-	testElementParent = body || documentElement;
+-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+-
+-	// Check if a disconnected checkbox will retain its checked
+-	// value of true after appended to the DOM (IE6/7)
+-	support.appendChecked = input.checked;
+-
+-	support.boxModel = div.offsetWidth === 2;
+-
+-	if ( "zoom" in div.style ) {
+-		// Check if natively block-level elements act like inline-block
+-		// elements when setting their display to 'inline' and giving
+-		// them layout
+-		// (IE < 8 does this)
+-		div.style.display = "inline";
+-		div.style.zoom = 1;
+-		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+-
+-		// Check if elements with layout shrink-wrap their children
+-		// (IE 6 does this)
+-		div.style.display = "";
+-		div.innerHTML = "<div style='width:4px;'></div>";
+-		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+-	}
+-
+-	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+-	tds = div.getElementsByTagName( "td" );
+-
+-	// Check if table cells still have offsetWidth/Height when they are set
+-	// to display:none and there are still other visible table cells in a
+-	// table row; if so, offsetWidth/Height are not reliable for use when
+-	// determining if an element has been hidden directly using
+-	// display:none (it is still safe to use offsets if a parent element is
+-	// hidden; don safety goggles and see bug #4512 for more information).
+-	// (only IE 8 fails this test)
+-	isSupported = ( tds[ 0 ].offsetHeight === 0 );
+-
+-	tds[ 0 ].style.display = "";
+-	tds[ 1 ].style.display = "none";
+-
+-	// Check if empty table cells still have offsetWidth/Height
+-	// (IE < 8 fail this test)
+-	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+-	div.innerHTML = "";
+-
+-	// Check if div with explicit width and no margin-right incorrectly
+-	// gets computed margin-right based on width of container. For more
+-	// info see bug #3333
+-	// Fails in WebKit before Feb 2011 nightlies
+-	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-	if ( document.defaultView && document.defaultView.getComputedStyle ) {
+-		marginDiv = document.createElement( "div" );
+-		marginDiv.style.width = "0";
+-		marginDiv.style.marginRight = "0";
+-		div.appendChild( marginDiv );
+-		support.reliableMarginRight =
+-			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+-	}
+-
+-	// Remove the body element we added
+-	testElement.innerHTML = "";
+-	testElementParent.removeChild( testElement );
+-
+-	// Technique from Juriy Zaytsev
+-	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+-	// We only care about the case where non-standard event systems
+-	// are used, namely in IE. Short-circuiting here helps us to
+-	// avoid an eval call (in setAttribute) which can cause CSP
+-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+-	if ( div.attachEvent ) {
+-		for( i in {
+-			submit: 1,
+-			change: 1,
+-			focusin: 1
+-		} ) {
+-			eventName = "on" + i;
+-			isSupported = ( eventName in div );
+-			if ( !isSupported ) {
+-				div.setAttribute( eventName, "return;" );
+-				isSupported = ( typeof div[ eventName ] === "function" );
+-			}
+-			support[ i + "Bubbles" ] = isSupported;
+-		}
+-	}
+-
+-	// Null connected elements to avoid leaks in IE
+-	testElement = fragment = select = opt = body = marginDiv = div = input = null;
+-
+-	return support;
+-})();
+-
+-// Keep track of boxModel
+-jQuery.boxModel = jQuery.support.boxModel;
+-
+-
+-
+-
+-var rbrace = /^(?:\{.*\}|\[.*\])$/,
+-	rmultiDash = /([a-z])([A-Z])/g;
+-
+-jQuery.extend({
+-	cache: {},
+-
+-	// Please use with caution
+-	uuid: 0,
+-
+-	// Unique for each copy of jQuery on the page
+-	// Non-digits removed to match rinlinejQuery
+-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+-
+-	// The following elements throw uncatchable exceptions if you
+-	// attempt to add expando properties to them.
+-	noData: {
+-		"embed": true,
+-		// Ban all objects except for Flash (which handle expandos)
+-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+-		"applet": true
+-	},
+-
+-	hasData: function( elem ) {
+-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+-
+-		return !!elem && !isEmptyDataObject( elem );
+-	},
+-
+-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+-		if ( !jQuery.acceptData( elem ) ) {
+-			return;
+-		}
+-
+-		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
+-
+-			// We have to handle DOM nodes and JS objects differently because IE6-7
+-			// can't GC object references properly across the DOM-JS boundary
+-			isNode = elem.nodeType,
+-
+-			// Only DOM nodes need the global jQuery cache; JS object data is
+-			// attached directly to the object so GC can occur automatically
+-			cache = isNode ? jQuery.cache : elem,
+-
+-			// Only defining an ID for JS objects if its cache already exists allows
+-			// the code to shortcut on the same path as a DOM node with no cache
+-			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
+-
+-		// Avoid doing any more work than we need to when trying to get data on an
+-		// object that has no data at all
+-		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
+-			return;
+-		}
+-
+-		if ( !id ) {
+-			// Only DOM nodes need a new unique ID for each element since their data
+-			// ends up in the global cache
+-			if ( isNode ) {
+-				elem[ jQuery.expando ] = id = ++jQuery.uuid;
+-			} else {
+-				id = jQuery.expando;
+-			}
+-		}
+-
+-		if ( !cache[ id ] ) {
+-			cache[ id ] = {};
+-
+-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+-			// metadata on plain JS objects when the object is serialized using
+-			// JSON.stringify
+-			if ( !isNode ) {
+-				cache[ id ].toJSON = jQuery.noop;
+-			}
+-		}
+-
+-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
+-		// shallow copied over onto the existing cache
+-		if ( typeof name === "object" || typeof name === "function" ) {
+-			if ( pvt ) {
+-				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
+-			} else {
+-				cache[ id ] = jQuery.extend(cache[ id ], name);
+-			}
+-		}
+-
+-		thisCache = cache[ id ];
+-
+-		// Internal jQuery data is stored in a separate object inside the object's data
+-		// cache in order to avoid key collisions between internal data and user-defined
+-		// data
+-		if ( pvt ) {
+-			if ( !thisCache[ internalKey ] ) {
+-				thisCache[ internalKey ] = {};
+-			}
+-
+-			thisCache = thisCache[ internalKey ];
+-		}
+-
+-		if ( data !== undefined ) {
+-			thisCache[ jQuery.camelCase( name ) ] = data;
+-		}
+-
+-		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+-		// not attempt to inspect the internal events object using jQuery.data, as this
+-		// internal data object is undocumented and subject to change.
+-		if ( name === "events" && !thisCache[name] ) {
+-			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+-		}
+-
+-		return getByName ? 
+-			// Check for both converted-to-camel and non-converted data property names
+-			thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] :
+-			thisCache;
+-	},
+-
+-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+-		if ( !jQuery.acceptData( elem ) ) {
+-			return;
+-		}
+-
+-		var internalKey = jQuery.expando, isNode = elem.nodeType,
+-
+-			// See jQuery.data for more information
+-			cache = isNode ? jQuery.cache : elem,
+-
+-			// See jQuery.data for more information
+-			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+-
+-		// If there is already no cache entry for this object, there is no
+-		// purpose in continuing
+-		if ( !cache[ id ] ) {
+-			return;
+-		}
+-
+-		if ( name ) {
+-			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+-
+-			if ( thisCache ) {
+-				delete thisCache[ name ];
+-
+-				// If there is no data left in the cache, we want to continue
+-				// and let the cache object itself get destroyed
+-				if ( !isEmptyDataObject(thisCache) ) {
+-					return;
+-				}
+-			}
+-		}
+-
+-		// See jQuery.data for more information
+-		if ( pvt ) {
+-			delete cache[ id ][ internalKey ];
+-
+-			// Don't destroy the parent cache unless the internal data object
+-			// had been the only thing left in it
+-			if ( !isEmptyDataObject(cache[ id ]) ) {
+-				return;
+-			}
+-		}
+-
+-		var internalCache = cache[ id ][ internalKey ];
+-
+-		// Browsers that fail expando deletion also refuse to delete expandos on
+-		// the window, but it will allow it on all other JS objects; other browsers
+-		// don't care
+-		if ( jQuery.support.deleteExpando || cache != window ) {
+-			delete cache[ id ];
+-		} else {
+-			cache[ id ] = null;
+-		}
+-
+-		// We destroyed the entire user cache at once because it's faster than
+-		// iterating through each key, but we need to continue to persist internal
+-		// data if it existed
+-		if ( internalCache ) {
+-			cache[ id ] = {};
+-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+-			// metadata on plain JS objects when the object is serialized using
+-			// JSON.stringify
+-			if ( !isNode ) {
+-				cache[ id ].toJSON = jQuery.noop;
+-			}
+-
+-			cache[ id ][ internalKey ] = internalCache;
+-
+-		// Otherwise, we need to eliminate the expando on the node to avoid
+-		// false lookups in the cache for entries that no longer exist
+-		} else if ( isNode ) {
+-			// IE does not allow us to delete expando properties from nodes,
+-			// nor does it have a removeAttribute function on Document nodes;
+-			// we must handle all of these cases
+-			if ( jQuery.support.deleteExpando ) {
+-				delete elem[ jQuery.expando ];
+-			} else if ( elem.removeAttribute ) {
+-				elem.removeAttribute( jQuery.expando );
+-			} else {
+-				elem[ jQuery.expando ] = null;
+-			}
+-		}
+-	},
+-
+-	// For internal use only.
+-	_data: function( elem, name, data ) {
+-		return jQuery.data( elem, name, data, true );
+-	},
+-
+-	// A method for determining if a DOM node can handle the data expando
+-	acceptData: function( elem ) {
+-		if ( elem.nodeName ) {
+-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+-
+-			if ( match ) {
+-				return !(match === true || elem.getAttribute("classid") !== match);
+-			}
+-		}
+-
+-		return true;
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	data: function( key, value ) {
+-		var data = null;
+-
+-		if ( typeof key === "undefined" ) {
+-			if ( this.length ) {
+-				data = jQuery.data( this[0] );
+-
+-				if ( this[0].nodeType === 1 ) {
+-			    var attr = this[0].attributes, name;
+-					for ( var i = 0, l = attr.length; i < l; i++ ) {
+-						name = attr[i].name;
+-
+-						if ( name.indexOf( "data-" ) === 0 ) {
+-							name = jQuery.camelCase( name.substring(5) );
+-
+-							dataAttr( this[0], name, data[ name ] );
+-						}
+-					}
+-				}
+-			}
+-
+-			return data;
+-
+-		} else if ( typeof key === "object" ) {
+-			return this.each(function() {
+-				jQuery.data( this, key );
+-			});
+-		}
+-
+-		var parts = key.split(".");
+-		parts[1] = parts[1] ? "." + parts[1] : "";
+-
+-		if ( value === undefined ) {
+-			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+-
+-			// Try to fetch any internally stored data first
+-			if ( data === undefined && this.length ) {
+-				data = jQuery.data( this[0], key );
+-				data = dataAttr( this[0], key, data );
+-			}
+-
+-			return data === undefined && parts[1] ?
+-				this.data( parts[0] ) :
+-				data;
+-
+-		} else {
+-			return this.each(function() {
+-				var $this = jQuery( this ),
+-					args = [ parts[0], value ];
+-
+-				$this.triggerHandler( "setData" + parts[1] + "!", args );
+-				jQuery.data( this, key, value );
+-				$this.triggerHandler( "changeData" + parts[1] + "!", args );
+-			});
+-		}
+-	},
+-
+-	removeData: function( key ) {
+-		return this.each(function() {
+-			jQuery.removeData( this, key );
+-		});
+-	}
+-});
+-
+-function dataAttr( elem, key, data ) {
+-	// If nothing was found internally, try to fetch any
+-	// data from the HTML5 data-* attribute
+-	if ( data === undefined && elem.nodeType === 1 ) {
+-		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
+-
+-		data = elem.getAttribute( name );
+-
+-		if ( typeof data === "string" ) {
+-			try {
+-				data = data === "true" ? true :
+-				data === "false" ? false :
+-				data === "null" ? null :
+-				!jQuery.isNaN( data ) ? parseFloat( data ) :
+-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+-					data;
+-			} catch( e ) {}
+-
+-			// Make sure we set the data so it isn't changed later
+-			jQuery.data( elem, key, data );
+-
+-		} else {
+-			data = undefined;
+-		}
+-	}
+-
+-	return data;
+-}
+-
+-// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
+-// property to be considered empty objects; this property always exists in
+-// order to make sure JSON.stringify does not expose internal metadata
+-function isEmptyDataObject( obj ) {
+-	for ( var name in obj ) {
+-		if ( name !== "toJSON" ) {
+-			return false;
+-		}
+-	}
+-
+-	return true;
+-}
+-
+-
+-
+-
+-function handleQueueMarkDefer( elem, type, src ) {
+-	var deferDataKey = type + "defer",
+-		queueDataKey = type + "queue",
+-		markDataKey = type + "mark",
+-		defer = jQuery.data( elem, deferDataKey, undefined, true );
+-	if ( defer &&
+-		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
+-		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
+-		// Give room for hard-coded callbacks to fire first
+-		// and eventually mark/queue something else on the element
+-		setTimeout( function() {
+-			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
+-				!jQuery.data( elem, markDataKey, undefined, true ) ) {
+-				jQuery.removeData( elem, deferDataKey, true );
+-				defer.resolve();
+-			}
+-		}, 0 );
+-	}
+-}
+-
+-jQuery.extend({
+-
+-	_mark: function( elem, type ) {
+-		if ( elem ) {
+-			type = (type || "fx") + "mark";
+-			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
+-		}
+-	},
+-
+-	_unmark: function( force, elem, type ) {
+-		if ( force !== true ) {
+-			type = elem;
+-			elem = force;
+-			force = false;
+-		}
+-		if ( elem ) {
+-			type = type || "fx";
+-			var key = type + "mark",
+-				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
+-			if ( count ) {
+-				jQuery.data( elem, key, count, true );
+-			} else {
+-				jQuery.removeData( elem, key, true );
+-				handleQueueMarkDefer( elem, type, "mark" );
+-			}
+-		}
+-	},
+-
+-	queue: function( elem, type, data ) {
+-		if ( elem ) {
+-			type = (type || "fx") + "queue";
+-			var q = jQuery.data( elem, type, undefined, true );
+-			// Speed up dequeue by getting out quickly if this is just a lookup
+-			if ( data ) {
+-				if ( !q || jQuery.isArray(data) ) {
+-					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
+-				} else {
+-					q.push( data );
+-				}
+-			}
+-			return q || [];
+-		}
+-	},
+-
+-	dequeue: function( elem, type ) {
+-		type = type || "fx";
+-
+-		var queue = jQuery.queue( elem, type ),
+-			fn = queue.shift(),
+-			defer;
+-
+-		// If the fx queue is dequeued, always remove the progress sentinel
+-		if ( fn === "inprogress" ) {
+-			fn = queue.shift();
+-		}
+-
+-		if ( fn ) {
+-			// Add a progress sentinel to prevent the fx queue from being
+-			// automatically dequeued
+-			if ( type === "fx" ) {
+-				queue.unshift("inprogress");
+-			}
+-
+-			fn.call(elem, function() {
+-				jQuery.dequeue(elem, type);
+-			});
+-		}
+-
+-		if ( !queue.length ) {
+-			jQuery.removeData( elem, type + "queue", true );
+-			handleQueueMarkDefer( elem, type, "queue" );
+-		}
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	queue: function( type, data ) {
+-		if ( typeof type !== "string" ) {
+-			data = type;
+-			type = "fx";
+-		}
+-
+-		if ( data === undefined ) {
+-			return jQuery.queue( this[0], type );
+-		}
+-		return this.each(function() {
+-			var queue = jQuery.queue( this, type, data );
+-
+-			if ( type === "fx" && queue[0] !== "inprogress" ) {
+-				jQuery.dequeue( this, type );
+-			}
+-		});
+-	},
+-	dequeue: function( type ) {
+-		return this.each(function() {
+-			jQuery.dequeue( this, type );
+-		});
+-	},
+-	// Based off of the plugin by Clint Helfers, with permission.
+-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+-	delay: function( time, type ) {
+-		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+-		type = type || "fx";
+-
+-		return this.queue( type, function() {
+-			var elem = this;
+-			setTimeout(function() {
+-				jQuery.dequeue( elem, type );
+-			}, time );
+-		});
+-	},
+-	clearQueue: function( type ) {
+-		return this.queue( type || "fx", [] );
+-	},
+-	// Get a promise resolved when queues of a certain type
+-	// are emptied (fx is the type by default)
+-	promise: function( type, object ) {
+-		if ( typeof type !== "string" ) {
+-			object = type;
+-			type = undefined;
+-		}
+-		type = type || "fx";
+-		var defer = jQuery.Deferred(),
+-			elements = this,
+-			i = elements.length,
+-			count = 1,
+-			deferDataKey = type + "defer",
+-			queueDataKey = type + "queue",
+-			markDataKey = type + "mark",
+-			tmp;
+-		function resolve() {
+-			if ( !( --count ) ) {
+-				defer.resolveWith( elements, [ elements ] );
+-			}
+-		}
+-		while( i-- ) {
+-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+-					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
+-				count++;
+-				tmp.done( resolve );
+-			}
+-		}
+-		resolve();
+-		return defer.promise();
+-	}
+-});
+-
+-
+-
+-
+-var rclass = /[\n\t\r]/g,
+-	rspace = /\s+/,
+-	rreturn = /\r/g,
+-	rtype = /^(?:button|input)$/i,
+-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+-	rclickable = /^a(?:rea)?$/i,
+-	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+-	rinvalidChar = /\:|^on/,
+-	formHook, boolHook;
+-
+-jQuery.fn.extend({
+-	attr: function( name, value ) {
+-		return jQuery.access( this, name, value, true, jQuery.attr );
+-	},
+-
+-	removeAttr: function( name ) {
+-		return this.each(function() {
+-			jQuery.removeAttr( this, name );
+-		});
+-	},
+-	
+-	prop: function( name, value ) {
+-		return jQuery.access( this, name, value, true, jQuery.prop );
+-	},
+-	
+-	removeProp: function( name ) {
+-		name = jQuery.propFix[ name ] || name;
+-		return this.each(function() {
+-			// try/catch handles cases where IE balks (such as removing a property on window)
+-			try {
+-				this[ name ] = undefined;
+-				delete this[ name ];
+-			} catch( e ) {}
+-		});
+-	},
+-
+-	addClass: function( value ) {
+-		var classNames, i, l, elem,
+-			setClass, c, cl;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).addClass( value.call(this, j, this.className) );
+-			});
+-		}
+-
+-		if ( value && typeof value === "string" ) {
+-			classNames = value.split( rspace );
+-
+-			for ( i = 0, l = this.length; i < l; i++ ) {
+-				elem = this[ i ];
+-
+-				if ( elem.nodeType === 1 ) {
+-					if ( !elem.className && classNames.length === 1 ) {
+-						elem.className = value;
+-
+-					} else {
+-						setClass = " " + elem.className + " ";
+-
+-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+-							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+-								setClass += classNames[ c ] + " ";
+-							}
+-						}
+-						elem.className = jQuery.trim( setClass );
+-					}
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	removeClass: function( value ) {
+-		var classNames, i, l, elem, className, c, cl;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).removeClass( value.call(this, j, this.className) );
+-			});
+-		}
+-
+-		if ( (value && typeof value === "string") || value === undefined ) {
+-			classNames = (value || "").split( rspace );
+-
+-			for ( i = 0, l = this.length; i < l; i++ ) {
+-				elem = this[ i ];
+-
+-				if ( elem.nodeType === 1 && elem.className ) {
+-					if ( value ) {
+-						className = (" " + elem.className + " ").replace( rclass, " " );
+-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+-							className = className.replace(" " + classNames[ c ] + " ", " ");
+-						}
+-						elem.className = jQuery.trim( className );
+-
+-					} else {
+-						elem.className = "";
+-					}
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	toggleClass: function( value, stateVal ) {
+-		var type = typeof value,
+-			isBool = typeof stateVal === "boolean";
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( i ) {
+-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			if ( type === "string" ) {
+-				// toggle individual class names
+-				var className,
+-					i = 0,
+-					self = jQuery( this ),
+-					state = stateVal,
+-					classNames = value.split( rspace );
+-
+-				while ( (className = classNames[ i++ ]) ) {
+-					// check each className given, space seperated list
+-					state = isBool ? state : !self.hasClass( className );
+-					self[ state ? "addClass" : "removeClass" ]( className );
+-				}
+-
+-			} else if ( type === "undefined" || type === "boolean" ) {
+-				if ( this.className ) {
+-					// store className if set
+-					jQuery._data( this, "__className__", this.className );
+-				}
+-
+-				// toggle whole className
+-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+-			}
+-		});
+-	},
+-
+-	hasClass: function( selector ) {
+-		var className = " " + selector + " ";
+-		for ( var i = 0, l = this.length; i < l; i++ ) {
+-			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+-				return true;
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	val: function( value ) {
+-		var hooks, ret,
+-			elem = this[0];
+-		
+-		if ( !arguments.length ) {
+-			if ( elem ) {
+-				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+-
+-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+-					return ret;
+-				}
+-
+-				ret = elem.value;
+-
+-				return typeof ret === "string" ? 
+-					// handle most common string cases
+-					ret.replace(rreturn, "") : 
+-					// handle cases where value is null/undef or number
+-					ret == null ? "" : ret;
+-			}
+-
+-			return undefined;
+-		}
+-
+-		var isFunction = jQuery.isFunction( value );
+-
+-		return this.each(function( i ) {
+-			var self = jQuery(this), val;
+-
+-			if ( this.nodeType !== 1 ) {
+-				return;
+-			}
+-
+-			if ( isFunction ) {
+-				val = value.call( this, i, self.val() );
+-			} else {
+-				val = value;
+-			}
+-
+-			// Treat null/undefined as ""; convert numbers to string
+-			if ( val == null ) {
+-				val = "";
+-			} else if ( typeof val === "number" ) {
+-				val += "";
+-			} else if ( jQuery.isArray( val ) ) {
+-				val = jQuery.map(val, function ( value ) {
+-					return value == null ? "" : value + "";
+-				});
+-			}
+-
+-			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+-
+-			// If set returns undefined, fall back to normal setting
+-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+-				this.value = val;
+-			}
+-		});
+-	}
+-});
+-
+-jQuery.extend({
+-	valHooks: {
+-		option: {
+-			get: function( elem ) {
+-				// attributes.value is undefined in Blackberry 4.7 but
+-				// uses .value. See #6932
+-				var val = elem.attributes.value;
+-				return !val || val.specified ? elem.value : elem.text;
+-			}
+-		},
+-		select: {
+-			get: function( elem ) {
+-				var value,
+-					index = elem.selectedIndex,
+-					values = [],
+-					options = elem.options,
+-					one = elem.type === "select-one";
+-
+-				// Nothing was selected
+-				if ( index < 0 ) {
+-					return null;
+-				}
+-
+-				// Loop through all the selected options
+-				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+-					var option = options[ i ];
+-
+-					// Don't return options that are disabled or in a disabled optgroup
+-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+-
+-						// Get the specific value for the option
+-						value = jQuery( option ).val();
+-
+-						// We don't need an array for one selects
+-						if ( one ) {
+-							return value;
+-						}
+-
+-						// Multi-Selects return an array
+-						values.push( value );
+-					}
+-				}
+-
+-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+-				if ( one && !values.length && options.length ) {
+-					return jQuery( options[ index ] ).val();
+-				}
+-
+-				return values;
+-			},
+-
+-			set: function( elem, value ) {
+-				var values = jQuery.makeArray( value );
+-
+-				jQuery(elem).find("option").each(function() {
+-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+-				});
+-
+-				if ( !values.length ) {
+-					elem.selectedIndex = -1;
+-				}
+-				return values;
+-			}
+-		}
+-	},
+-
+-	attrFn: {
+-		val: true,
+-		css: true,
+-		html: true,
+-		text: true,
+-		data: true,
+-		width: true,
+-		height: true,
+-		offset: true
+-	},
+-	
+-	attrFix: {
+-		// Always normalize to ensure hook usage
+-		tabindex: "tabIndex"
+-	},
+-	
+-	attr: function( elem, name, value, pass ) {
+-		var nType = elem.nodeType;
+-		
+-		// don't get/set attributes on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return undefined;
+-		}
+-
+-		if ( pass && name in jQuery.attrFn ) {
+-			return jQuery( elem )[ name ]( value );
+-		}
+-
+-		// Fallback to prop when attributes are not supported
+-		if ( !("getAttribute" in elem) ) {
+-			return jQuery.prop( elem, name, value );
+-		}
+-
+-		var ret, hooks,
+-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		// Normalize the name if needed
+-		if ( notxml ) {
+-			name = jQuery.attrFix[ name ] || name;
+-
+-			hooks = jQuery.attrHooks[ name ];
+-
+-			if ( !hooks ) {
+-				// Use boolHook for boolean attributes
+-				if ( rboolean.test( name ) ) {
+-
+-					hooks = boolHook;
+-
+-				// Use formHook for forms and if the name contains certain characters
+-				} else if ( formHook && name !== "className" &&
+-					(jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
+-
+-					hooks = formHook;
+-				}
+-			}
+-		}
+-
+-		if ( value !== undefined ) {
+-
+-			if ( value === null ) {
+-				jQuery.removeAttr( elem, name );
+-				return undefined;
+-
+-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				elem.setAttribute( name, "" + value );
+-				return value;
+-			}
+-
+-		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+-			return ret;
+-
+-		} else {
+-
+-			ret = elem.getAttribute( name );
+-
+-			// Non-existent attributes return null, we normalize to undefined
+-			return ret === null ?
+-				undefined :
+-				ret;
+-		}
+-	},
+-
+-	removeAttr: function( elem, name ) {
+-		var propName;
+-		if ( elem.nodeType === 1 ) {
+-			name = jQuery.attrFix[ name ] || name;
+-		
+-			if ( jQuery.support.getSetAttribute ) {
+-				// Use removeAttribute in browsers that support it
+-				elem.removeAttribute( name );
+-			} else {
+-				jQuery.attr( elem, name, "" );
+-				elem.removeAttributeNode( elem.getAttributeNode( name ) );
+-			}
+-
+-			// Set corresponding property to false for boolean attributes
+-			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
+-				elem[ propName ] = false;
+-			}
+-		}
+-	},
+-
+-	attrHooks: {
+-		type: {
+-			set: function( elem, value ) {
+-				// We can't allow the type property to be changed (since it causes problems in IE)
+-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+-					jQuery.error( "type property can't be changed" );
+-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+-					// Setting the type on a radio button after the value resets the value in IE6-9
+-					// Reset value to it's default in case type is set after value
+-					// This is for element creation
+-					var val = elem.value;
+-					elem.setAttribute( "type", value );
+-					if ( val ) {
+-						elem.value = val;
+-					}
+-					return value;
+-				}
+-			}
+-		},
+-		tabIndex: {
+-			get: function( elem ) {
+-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+-				var attributeNode = elem.getAttributeNode("tabIndex");
+-
+-				return attributeNode && attributeNode.specified ?
+-					parseInt( attributeNode.value, 10 ) :
+-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+-						0 :
+-						undefined;
+-			}
+-		},
+-		// Use the value property for back compat
+-		// Use the formHook for button elements in IE6/7 (#1954)
+-		value: {
+-			get: function( elem, name ) {
+-				if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+-					return formHook.get( elem, name );
+-				}
+-				return name in elem ?
+-					elem.value :
+-					null;
+-			},
+-			set: function( elem, value, name ) {
+-				if ( formHook && jQuery.nodeName( elem, "button" ) ) {
+-					return formHook.set( elem, value, name );
+-				}
+-				// Does not return so that setAttribute is also used
+-				elem.value = value;
+-			}
+-		}
+-	},
+-
+-	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( elem, name, value ) {
+-		var nType = elem.nodeType;
+-
+-		// don't get/set properties on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return undefined;
+-		}
+-
+-		var ret, hooks,
+-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		if ( notxml ) {
+-			// Fix name and attach hooks
+-			name = jQuery.propFix[ name ] || name;
+-			hooks = jQuery.propHooks[ name ];
+-		}
+-
+-		if ( value !== undefined ) {
+-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				return (elem[ name ] = value);
+-			}
+-
+-		} else {
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				return elem[ name ];
+-			}
+-		}
+-	},
+-	
+-	propHooks: {}
+-});
+-
+-// Hook for boolean attributes
+-boolHook = {
+-	get: function( elem, name ) {
+-		// Align boolean attributes with corresponding properties
+-		return jQuery.prop( elem, name ) ?
+-			name.toLowerCase() :
+-			undefined;
+-	},
+-	set: function( elem, value, name ) {
+-		var propName;
+-		if ( value === false ) {
+-			// Remove boolean attributes when set to false
+-			jQuery.removeAttr( elem, name );
+-		} else {
+-			// value is true since we know at this point it's type boolean and not false
+-			// Set boolean attributes to the same name and set the DOM property
+-			propName = jQuery.propFix[ name ] || name;
+-			if ( propName in elem ) {
+-				// Only set the IDL specifically if it already exists on the element
+-				elem[ propName ] = true;
+-			}
+-
+-			elem.setAttribute( name, name.toLowerCase() );
+-		}
+-		return name;
+-	}
+-};
+-
+-// IE6/7 do not support getting/setting some attributes with get/setAttribute
+-if ( !jQuery.support.getSetAttribute ) {
+-
+-	// propFix is more comprehensive and contains all fixes
+-	jQuery.attrFix = jQuery.propFix;
+-	
+-	// Use this for any attribute on a form in IE6/7
+-	formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = {
+-		get: function( elem, name ) {
+-			var ret;
+-			ret = elem.getAttributeNode( name );
+-			// Return undefined if nodeValue is empty string
+-			return ret && ret.nodeValue !== "" ?
+-				ret.nodeValue :
+-				undefined;
+-		},
+-		set: function( elem, value, name ) {
+-			// Check form objects in IE (multiple bugs related)
+-			// Only use nodeValue if the attribute node exists on the form
+-			var ret = elem.getAttributeNode( name );
+-			if ( ret ) {
+-				ret.nodeValue = value;
+-				return value;
+-			}
+-		}
+-	};
+-
+-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+-	// This is for removals
+-	jQuery.each([ "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			set: function( elem, value ) {
+-				if ( value === "" ) {
+-					elem.setAttribute( name, "auto" );
+-					return value;
+-				}
+-			}
+-		});
+-	});
+-}
+-
+-
+-// Some attributes require a special call on IE
+-if ( !jQuery.support.hrefNormalized ) {
+-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			get: function( elem ) {
+-				var ret = elem.getAttribute( name, 2 );
+-				return ret === null ? undefined : ret;
+-			}
+-		});
+-	});
+-}
+-
+-if ( !jQuery.support.style ) {
+-	jQuery.attrHooks.style = {
+-		get: function( elem ) {
+-			// Return undefined in the case of empty string
+-			// Normalize to lowercase since IE uppercases css property names
+-			return elem.style.cssText.toLowerCase() || undefined;
+-		},
+-		set: function( elem, value ) {
+-			return (elem.style.cssText = "" + value);
+-		}
+-	};
+-}
+-
+-// Safari mis-reports the default selected property of an option
+-// Accessing the parent's selectedIndex property fixes it
+-if ( !jQuery.support.optSelected ) {
+-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+-		get: function( elem ) {
+-			var parent = elem.parentNode;
+-
+-			if ( parent ) {
+-				parent.selectedIndex;
+-
+-				// Make sure that it also works with optgroups, see #5701
+-				if ( parent.parentNode ) {
+-					parent.parentNode.selectedIndex;
+-				}
+-			}
+-		}
+-	});
+-}
+-
+-// Radios and checkboxes getter/setter
+-if ( !jQuery.support.checkOn ) {
+-	jQuery.each([ "radio", "checkbox" ], function() {
+-		jQuery.valHooks[ this ] = {
+-			get: function( elem ) {
+-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+-				return elem.getAttribute("value") === null ? "on" : elem.value;
+-			}
+-		};
+-	});
+-}
+-jQuery.each([ "radio", "checkbox" ], function() {
+-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+-		set: function( elem, value ) {
+-			if ( jQuery.isArray( value ) ) {
+-				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+-			}
+-		}
+-	});
+-});
+-
+-
+-
+-
+-var rnamespaces = /\.(.*)$/,
+-	rformElems = /^(?:textarea|input|select)$/i,
+-	rperiod = /\./g,
+-	rspaces = / /g,
+-	rescape = /[^\w\s.|`]/g,
+-	fcleanup = function( nm ) {
+-		return nm.replace(rescape, "\\$&");
+-	};
+-
+-/*
+- * A number of helper functions used for managing events.
+- * Many of the ideas behind this code originated from
+- * Dean Edwards' addEvent library.
+- */
+-jQuery.event = {
+-
+-	// Bind an event to an element
+-	// Original by Dean Edwards
+-	add: function( elem, types, handler, data ) {
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		if ( handler === false ) {
+-			handler = returnFalse;
+-		} else if ( !handler ) {
+-			// Fixes bug #7229. Fix recommended by jdalton
+-			return;
+-		}
+-
+-		var handleObjIn, handleObj;
+-
+-		if ( handler.handler ) {
+-			handleObjIn = handler;
+-			handler = handleObjIn.handler;
+-		}
+-
+-		// Make sure that the function being executed has a unique ID
+-		if ( !handler.guid ) {
+-			handler.guid = jQuery.guid++;
+-		}
+-
+-		// Init the element's event structure
+-		var elemData = jQuery._data( elem );
+-
+-		// If no elemData is found then we must be trying to bind to one of the
+-		// banned noData elements
+-		if ( !elemData ) {
+-			return;
+-		}
+-
+-		var events = elemData.events,
+-			eventHandle = elemData.handle;
+-
+-		if ( !events ) {
+-			elemData.events = events = {};
+-		}
+-
+-		if ( !eventHandle ) {
+-			elemData.handle = eventHandle = function( e ) {
+-				// Discard the second event of a jQuery.event.trigger() and
+-				// when an event is called after a page has unloaded
+-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+-					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+-					undefined;
+-			};
+-		}
+-
+-		// Add elem as a property of the handle function
+-		// This is to prevent a memory leak with non-native events in IE.
+-		eventHandle.elem = elem;
+-
+-		// Handle multiple events separated by a space
+-		// jQuery(...).bind("mouseover mouseout", fn);
+-		types = types.split(" ");
+-
+-		var type, i = 0, namespaces;
+-
+-		while ( (type = types[ i++ ]) ) {
+-			handleObj = handleObjIn ?
+-				jQuery.extend({}, handleObjIn) :
+-				{ handler: handler, data: data };
+-
+-			// Namespaced event handlers
+-			if ( type.indexOf(".") > -1 ) {
+-				namespaces = type.split(".");
+-				type = namespaces.shift();
+-				handleObj.namespace = namespaces.slice(0).sort().join(".");
+-
+-			} else {
+-				namespaces = [];
+-				handleObj.namespace = "";
+-			}
+-
+-			handleObj.type = type;
+-			if ( !handleObj.guid ) {
+-				handleObj.guid = handler.guid;
+-			}
+-
+-			// Get the current list of functions bound to this event
+-			var handlers = events[ type ],
+-				special = jQuery.event.special[ type ] || {};
+-
+-			// Init the event handler queue
+-			if ( !handlers ) {
+-				handlers = events[ type ] = [];
+-
+-				// Check for a special event handler
+-				// Only use addEventListener/attachEvent if the special
+-				// events handler returns false
+-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+-					// Bind the global event handler to the element
+-					if ( elem.addEventListener ) {
+-						elem.addEventListener( type, eventHandle, false );
+-
+-					} else if ( elem.attachEvent ) {
+-						elem.attachEvent( "on" + type, eventHandle );
+-					}
+-				}
+-			}
+-
+-			if ( special.add ) {
+-				special.add.call( elem, handleObj );
+-
+-				if ( !handleObj.handler.guid ) {
+-					handleObj.handler.guid = handler.guid;
+-				}
+-			}
+-
+-			// Add the function to the element's handler list
+-			handlers.push( handleObj );
+-
+-			// Keep track of which events have been used, for event optimization
+-			jQuery.event.global[ type ] = true;
+-		}
+-
+-		// Nullify elem to prevent memory leaks in IE
+-		elem = null;
+-	},
+-
+-	global: {},
+-
+-	// Detach an event or set of events from an element
+-	remove: function( elem, types, handler, pos ) {
+-		// don't do events on text and comment nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		if ( handler === false ) {
+-			handler = returnFalse;
+-		}
+-
+-		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+-			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+-			events = elemData && elemData.events;
+-
+-		if ( !elemData || !events ) {
+-			return;
+-		}
+-
+-		// types is actually an event object here
+-		if ( types && types.type ) {
+-			handler = types.handler;
+-			types = types.type;
+-		}
+-
+-		// Unbind all events for the element
+-		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+-			types = types || "";
+-
+-			for ( type in events ) {
+-				jQuery.event.remove( elem, type + types );
+-			}
+-
+-			return;
+-		}
+-
+-		// Handle multiple events separated by a space
+-		// jQuery(...).unbind("mouseover mouseout", fn);
+-		types = types.split(" ");
+-
+-		while ( (type = types[ i++ ]) ) {
+-			origType = type;
+-			handleObj = null;
+-			all = type.indexOf(".") < 0;
+-			namespaces = [];
+-
+-			if ( !all ) {
+-				// Namespaced event handlers
+-				namespaces = type.split(".");
+-				type = namespaces.shift();
+-
+-				namespace = new RegExp("(^|\\.)" +
+-					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
+-			}
+-
+-			eventType = events[ type ];
+-
+-			if ( !eventType ) {
+-				continue;
+-			}
+-
+-			if ( !handler ) {
+-				for ( j = 0; j < eventType.length; j++ ) {
+-					handleObj = eventType[ j ];
+-
+-					if ( all || namespace.test( handleObj.namespace ) ) {
+-						jQuery.event.remove( elem, origType, handleObj.handler, j );
+-						eventType.splice( j--, 1 );
+-					}
+-				}
+-
+-				continue;
+-			}
+-
+-			special = jQuery.event.special[ type ] || {};
+-
+-			for ( j = pos || 0; j < eventType.length; j++ ) {
+-				handleObj = eventType[ j ];
+-
+-				if ( handler.guid === handleObj.guid ) {
+-					// remove the given handler for the given type
+-					if ( all || namespace.test( handleObj.namespace ) ) {
+-						if ( pos == null ) {
+-							eventType.splice( j--, 1 );
+-						}
+-
+-						if ( special.remove ) {
+-							special.remove.call( elem, handleObj );
+-						}
+-					}
+-
+-					if ( pos != null ) {
+-						break;
+-					}
+-				}
+-			}
+-
+-			// remove generic event handler if no more handlers exist
+-			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+-				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+-					jQuery.removeEvent( elem, type, elemData.handle );
+-				}
+-
+-				ret = null;
+-				delete events[ type ];
+-			}
+-		}
+-
+-		// Remove the expando if it's no longer used
+-		if ( jQuery.isEmptyObject( events ) ) {
+-			var handle = elemData.handle;
+-			if ( handle ) {
+-				handle.elem = null;
+-			}
+-
+-			delete elemData.events;
+-			delete elemData.handle;
+-
+-			if ( jQuery.isEmptyObject( elemData ) ) {
+-				jQuery.removeData( elem, undefined, true );
+-			}
+-		}
+-	},
+-	
+-	// Events that are safe to short-circuit if no handlers are attached.
+-	// Native DOM events should not be added, they may have inline handlers.
+-	customEvent: {
+-		"getData": true,
+-		"setData": true,
+-		"changeData": true
+-	},
+-
+-	trigger: function( event, data, elem, onlyHandlers ) {
+-		// Event object or event type
+-		var type = event.type || event,
+-			namespaces = [],
+-			exclusive;
+-
+-		if ( type.indexOf("!") >= 0 ) {
+-			// Exclusive events trigger only for the exact event (no namespaces)
+-			type = type.slice(0, -1);
+-			exclusive = true;
+-		}
+-
+-		if ( type.indexOf(".") >= 0 ) {
+-			// Namespaced trigger; create a regexp to match event type in handle()
+-			namespaces = type.split(".");
+-			type = namespaces.shift();
+-			namespaces.sort();
+-		}
+-
+-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+-			// No jQuery handlers for this event type, and it can't have inline handlers
+-			return;
+-		}
+-
+-		// Caller can pass in an Event, Object, or just an event type string
+-		event = typeof event === "object" ?
+-			// jQuery.Event object
+-			event[ jQuery.expando ] ? event :
+-			// Object literal
+-			new jQuery.Event( type, event ) :
+-			// Just the event type (string)
+-			new jQuery.Event( type );
+-
+-		event.type = type;
+-		event.exclusive = exclusive;
+-		event.namespace = namespaces.join(".");
+-		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
+-		
+-		// triggerHandler() and global events don't bubble or run the default action
+-		if ( onlyHandlers || !elem ) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-
+-		// Handle a global trigger
+-		if ( !elem ) {
+-			// TODO: Stop taunting the data cache; remove global events and always attach to document
+-			jQuery.each( jQuery.cache, function() {
+-				// internalKey variable is just used to make it easier to find
+-				// and potentially change this stuff later; currently it just
+-				// points to jQuery.expando
+-				var internalKey = jQuery.expando,
+-					internalCache = this[ internalKey ];
+-				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
+-					jQuery.event.trigger( event, data, internalCache.handle.elem );
+-				}
+-			});
+-			return;
+-		}
+-
+-		// Don't do events on text and comment nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		// Clean up the event in case it is being reused
+-		event.result = undefined;
+-		event.target = elem;
+-
+-		// Clone any incoming data and prepend the event, creating the handler arg list
+-		data = data != null ? jQuery.makeArray( data ) : [];
+-		data.unshift( event );
+-
+-		var cur = elem,
+-			// IE doesn't like method names with a colon (#3533, #8272)
+-			ontype = type.indexOf(":") < 0 ? "on" + type : "";
+-
+-		// Fire event on the current element, then bubble up the DOM tree
+-		do {
+-			var handle = jQuery._data( cur, "handle" );
+-
+-			event.currentTarget = cur;
+-			if ( handle ) {
+-				handle.apply( cur, data );
+-			}
+-
+-			// Trigger an inline bound script
+-			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
+-				event.result = false;
+-				event.preventDefault();
+-			}
+-
+-			// Bubble up to document, then to window
+-			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
+-		} while ( cur && !event.isPropagationStopped() );
+-
+-		// If nobody prevented the default action, do it now
+-		if ( !event.isDefaultPrevented() ) {
+-			var old,
+-				special = jQuery.event.special[ type ] || {};
+-
+-			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
+-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+-
+-				// Call a native DOM method on the target with the same name name as the event.
+-				// Can't use an .isFunction)() check here because IE6/7 fails that test.
+-				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
+-				try {
+-					if ( ontype && elem[ type ] ) {
+-						// Don't re-trigger an onFOO event when we call its FOO() method
+-						old = elem[ ontype ];
+-
+-						if ( old ) {
+-							elem[ ontype ] = null;
+-						}
+-
+-						jQuery.event.triggered = type;
+-						elem[ type ]();
+-					}
+-				} catch ( ieError ) {}
+-
+-				if ( old ) {
+-					elem[ ontype ] = old;
+-				}
+-
+-				jQuery.event.triggered = undefined;
+-			}
+-		}
+-		
+-		return event.result;
+-	},
+-
+-	handle: function( event ) {
+-		event = jQuery.event.fix( event || window.event );
+-		// Snapshot the handlers list since a called handler may add/remove events.
+-		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
+-			run_all = !event.exclusive && !event.namespace,
+-			args = Array.prototype.slice.call( arguments, 0 );
+-
+-		// Use the fix-ed Event rather than the (read-only) native event
+-		args[0] = event;
+-		event.currentTarget = this;
+-
+-		for ( var j = 0, l = handlers.length; j < l; j++ ) {
+-			var handleObj = handlers[ j ];
+-
+-			// Triggered event must 1) be non-exclusive and have no namespace, or
+-			// 2) have namespace(s) a subset or equal to those in the bound event.
+-			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
+-				// Pass in a reference to the handler function itself
+-				// So that we can later remove it
+-				event.handler = handleObj.handler;
+-				event.data = handleObj.data;
+-				event.handleObj = handleObj;
+-
+-				var ret = handleObj.handler.apply( this, args );
+-
+-				if ( ret !== undefined ) {
+-					event.result = ret;
+-					if ( ret === false ) {
+-						event.preventDefault();
+-						event.stopPropagation();
+-					}
+-				}
+-
+-				if ( event.isImmediatePropagationStopped() ) {
+-					break;
+-				}
+-			}
+-		}
+-		return event.result;
+-	},
+-
+-	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+-
+-	fix: function( event ) {
+-		if ( event[ jQuery.expando ] ) {
+-			return event;
+-		}
+-
+-		// store a copy of the original event object
+-		// and "clone" to set read-only properties
+-		var originalEvent = event;
+-		event = jQuery.Event( originalEvent );
+-
+-		for ( var i = this.props.length, prop; i; ) {
+-			prop = this.props[ --i ];
+-			event[ prop ] = originalEvent[ prop ];
+-		}
+-
+-		// Fix target property, if necessary
+-		if ( !event.target ) {
+-			// Fixes #1925 where srcElement might not be defined either
+-			event.target = event.srcElement || document;
+-		}
+-
+-		// check if target is a textnode (safari)
+-		if ( event.target.nodeType === 3 ) {
+-			event.target = event.target.parentNode;
+-		}
+-
+-		// Add relatedTarget, if necessary
+-		if ( !event.relatedTarget && event.fromElement ) {
+-			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+-		}
+-
+-		// Calculate pageX/Y if missing and clientX/Y available
+-		if ( event.pageX == null && event.clientX != null ) {
+-			var eventDocument = event.target.ownerDocument || document,
+-				doc = eventDocument.documentElement,
+-				body = eventDocument.body;
+-
+-			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+-			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
+-		}
+-
+-		// Add which for key events
+-		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
+-			event.which = event.charCode != null ? event.charCode : event.keyCode;
+-		}
+-
+-		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+-		if ( !event.metaKey && event.ctrlKey ) {
+-			event.metaKey = event.ctrlKey;
+-		}
+-
+-		// Add which for click: 1 === left; 2 === middle; 3 === right
+-		// Note: button is not normalized, so don't use it
+-		if ( !event.which && event.button !== undefined ) {
+-			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+-		}
+-
+-		return event;
+-	},
+-
+-	// Deprecated, use jQuery.guid instead
+-	guid: 1E8,
+-
+-	// Deprecated, use jQuery.proxy instead
+-	proxy: jQuery.proxy,
+-
+-	special: {
+-		ready: {
+-			// Make sure the ready event is setup
+-			setup: jQuery.bindReady,
+-			teardown: jQuery.noop
+-		},
+-
+-		live: {
+-			add: function( handleObj ) {
+-				jQuery.event.add( this,
+-					liveConvert( handleObj.origType, handleObj.selector ),
+-					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+-			},
+-
+-			remove: function( handleObj ) {
+-				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+-			}
+-		},
+-
+-		beforeunload: {
+-			setup: function( data, namespaces, eventHandle ) {
+-				// We only want to do this special case on windows
+-				if ( jQuery.isWindow( this ) ) {
+-					this.onbeforeunload = eventHandle;
+-				}
+-			},
+-
+-			teardown: function( namespaces, eventHandle ) {
+-				if ( this.onbeforeunload === eventHandle ) {
+-					this.onbeforeunload = null;
+-				}
+-			}
+-		}
+-	}
+-};
+-
+-jQuery.removeEvent = document.removeEventListener ?
+-	function( elem, type, handle ) {
+-		if ( elem.removeEventListener ) {
+-			elem.removeEventListener( type, handle, false );
+-		}
+-	} :
+-	function( elem, type, handle ) {
+-		if ( elem.detachEvent ) {
+-			elem.detachEvent( "on" + type, handle );
+-		}
+-	};
+-
+-jQuery.Event = function( src, props ) {
+-	// Allow instantiation without the 'new' keyword
+-	if ( !this.preventDefault ) {
+-		return new jQuery.Event( src, props );
+-	}
+-
+-	// Event object
+-	if ( src && src.type ) {
+-		this.originalEvent = src;
+-		this.type = src.type;
+-
+-		// Events bubbling up the document may have been marked as prevented
+-		// by a handler lower down the tree; reflect the correct value.
+-		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+-			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+-
+-	// Event type
+-	} else {
+-		this.type = src;
+-	}
+-
+-	// Put explicitly provided properties onto the event object
+-	if ( props ) {
+-		jQuery.extend( this, props );
+-	}
+-
+-	// timeStamp is buggy for some events on Firefox(#3843)
+-	// So we won't rely on the native value
+-	this.timeStamp = jQuery.now();
+-
+-	// Mark it as fixed
+-	this[ jQuery.expando ] = true;
+-};
+-
+-function returnFalse() {
+-	return false;
+-}
+-function returnTrue() {
+-	return true;
+-}
+-
+-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+-jQuery.Event.prototype = {
+-	preventDefault: function() {
+-		this.isDefaultPrevented = returnTrue;
+-
+-		var e = this.originalEvent;
+-		if ( !e ) {
+-			return;
+-		}
+-
+-		// if preventDefault exists run it on the original event
+-		if ( e.preventDefault ) {
+-			e.preventDefault();
+-
+-		// otherwise set the returnValue property of the original event to false (IE)
+-		} else {
+-			e.returnValue = false;
+-		}
+-	},
+-	stopPropagation: function() {
+-		this.isPropagationStopped = returnTrue;
+-
+-		var e = this.originalEvent;
+-		if ( !e ) {
+-			return;
+-		}
+-		// if stopPropagation exists run it on the original event
+-		if ( e.stopPropagation ) {
+-			e.stopPropagation();
+-		}
+-		// otherwise set the cancelBubble property of the original event to true (IE)
+-		e.cancelBubble = true;
+-	},
+-	stopImmediatePropagation: function() {
+-		this.isImmediatePropagationStopped = returnTrue;
+-		this.stopPropagation();
+-	},
+-	isDefaultPrevented: returnFalse,
+-	isPropagationStopped: returnFalse,
+-	isImmediatePropagationStopped: returnFalse
+-};
+-
+-// Checks if an event happened on an element within another element
+-// Used in jQuery.event.special.mouseenter and mouseleave handlers
+-var withinElement = function( event ) {
+-
+-	// Check if mouse(over|out) are still within the same parent element
+-	var related = event.relatedTarget,
+-		inside = false,
+-		eventType = event.type;
+-
+-	event.type = event.data;
+-
+-	if ( related !== this ) {
+-
+-		if ( related ) {
+-			inside = jQuery.contains( this, related );
+-		}
+-
+-		if ( !inside ) {
+-
+-			jQuery.event.handle.apply( this, arguments );
+-
+-			event.type = eventType;
+-		}
+-	}
+-},
+-
+-// In case of event delegation, we only need to rename the event.type,
+-// liveHandler will take care of the rest.
+-delegate = function( event ) {
+-	event.type = event.data;
+-	jQuery.event.handle.apply( this, arguments );
+-};
+-
+-// Create mouseenter and mouseleave events
+-jQuery.each({
+-	mouseenter: "mouseover",
+-	mouseleave: "mouseout"
+-}, function( orig, fix ) {
+-	jQuery.event.special[ orig ] = {
+-		setup: function( data ) {
+-			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+-		},
+-		teardown: function( data ) {
+-			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+-		}
+-	};
+-});
+-
+-// submit delegation
+-if ( !jQuery.support.submitBubbles ) {
+-
+-	jQuery.event.special.submit = {
+-		setup: function( data, namespaces ) {
+-			if ( !jQuery.nodeName( this, "form" ) ) {
+-				jQuery.event.add(this, "click.specialSubmit", function( e ) {
+-					var elem = e.target,
+-						type = elem.type;
+-
+-					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+-						trigger( "submit", this, arguments );
+-					}
+-				});
+-
+-				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+-					var elem = e.target,
+-						type = elem.type;
+-
+-					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+-						trigger( "submit", this, arguments );
+-					}
+-				});
+-
+-			} else {
+-				return false;
+-			}
+-		},
+-
+-		teardown: function( namespaces ) {
+-			jQuery.event.remove( this, ".specialSubmit" );
+-		}
+-	};
+-
+-}
+-
+-// change delegation, happens here so we have bind.
+-if ( !jQuery.support.changeBubbles ) {
+-
+-	var changeFilters,
+-
+-	getVal = function( elem ) {
+-		var type = elem.type, val = elem.value;
+-
+-		if ( type === "radio" || type === "checkbox" ) {
+-			val = elem.checked;
+-
+-		} else if ( type === "select-multiple" ) {
+-			val = elem.selectedIndex > -1 ?
+-				jQuery.map( elem.options, function( elem ) {
+-					return elem.selected;
+-				}).join("-") :
+-				"";
+-
+-		} else if ( jQuery.nodeName( elem, "select" ) ) {
+-			val = elem.selectedIndex;
+-		}
+-
+-		return val;
+-	},
+-
+-	testChange = function testChange( e ) {
+-		var elem = e.target, data, val;
+-
+-		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
+-			return;
+-		}
+-
+-		data = jQuery._data( elem, "_change_data" );
+-		val = getVal(elem);
+-
+-		// the current data will be also retrieved by beforeactivate
+-		if ( e.type !== "focusout" || elem.type !== "radio" ) {
+-			jQuery._data( elem, "_change_data", val );
+-		}
+-
+-		if ( data === undefined || val === data ) {
+-			return;
+-		}
+-
+-		if ( data != null || val ) {
+-			e.type = "change";
+-			e.liveFired = undefined;
+-			jQuery.event.trigger( e, arguments[1], elem );
+-		}
+-	};
+-
+-	jQuery.event.special.change = {
+-		filters: {
+-			focusout: testChange,
+-
+-			beforedeactivate: testChange,
+-
+-			click: function( e ) {
+-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+-
+-				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
+-					testChange.call( this, e );
+-				}
+-			},
+-
+-			// Change has to be called before submit
+-			// Keydown will be called before keypress, which is used in submit-event delegation
+-			keydown: function( e ) {
+-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+-
+-				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
+-					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+-					type === "select-multiple" ) {
+-					testChange.call( this, e );
+-				}
+-			},
+-
+-			// Beforeactivate happens also before the previous element is blurred
+-			// with this event you can't trigger a change event, but you can store
+-			// information
+-			beforeactivate: function( e ) {
+-				var elem = e.target;
+-				jQuery._data( elem, "_change_data", getVal(elem) );
+-			}
+-		},
+-
+-		setup: function( data, namespaces ) {
+-			if ( this.type === "file" ) {
+-				return false;
+-			}
+-
+-			for ( var type in changeFilters ) {
+-				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+-			}
+-
+-			return rformElems.test( this.nodeName );
+-		},
+-
+-		teardown: function( namespaces ) {
+-			jQuery.event.remove( this, ".specialChange" );
+-
+-			return rformElems.test( this.nodeName );
+-		}
+-	};
+-
+-	changeFilters = jQuery.event.special.change.filters;
+-
+-	// Handle when the input is .focus()'d
+-	changeFilters.focus = changeFilters.beforeactivate;
+-}
+-
+-function trigger( type, elem, args ) {
+-	// Piggyback on a donor event to simulate a different one.
+-	// Fake originalEvent to avoid donor's stopPropagation, but if the
+-	// simulated event prevents default then we do the same on the donor.
+-	// Don't pass args or remember liveFired; they apply to the donor event.
+-	var event = jQuery.extend( {}, args[ 0 ] );
+-	event.type = type;
+-	event.originalEvent = {};
+-	event.liveFired = undefined;
+-	jQuery.event.handle.call( elem, event );
+-	if ( event.isDefaultPrevented() ) {
+-		args[ 0 ].preventDefault();
+-	}
+-}
+-
+-// Create "bubbling" focus and blur events
+-if ( !jQuery.support.focusinBubbles ) {
+-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+-
+-		// Attach a single capturing handler while someone wants focusin/focusout
+-		var attaches = 0;
+-
+-		jQuery.event.special[ fix ] = {
+-			setup: function() {
+-				if ( attaches++ === 0 ) {
+-					document.addEventListener( orig, handler, true );
+-				}
+-			},
+-			teardown: function() {
+-				if ( --attaches === 0 ) {
+-					document.removeEventListener( orig, handler, true );
+-				}
+-			}
+-		};
+-
+-		function handler( donor ) {
+-			// Donor event is always a native one; fix it and switch its type.
+-			// Let focusin/out handler cancel the donor focus/blur event.
+-			var e = jQuery.event.fix( donor );
+-			e.type = fix;
+-			e.originalEvent = {};
+-			jQuery.event.trigger( e, null, e.target );
+-			if ( e.isDefaultPrevented() ) {
+-				donor.preventDefault();
+-			}
+-		}
+-	});
+-}
+-
+-jQuery.each(["bind", "one"], function( i, name ) {
+-	jQuery.fn[ name ] = function( type, data, fn ) {
+-		var handler;
+-
+-		// Handle object literals
+-		if ( typeof type === "object" ) {
+-			for ( var key in type ) {
+-				this[ name ](key, data, type[key], fn);
+-			}
+-			return this;
+-		}
+-
+-		if ( arguments.length === 2 || data === false ) {
+-			fn = data;
+-			data = undefined;
+-		}
+-
+-		if ( name === "one" ) {
+-			handler = function( event ) {
+-				jQuery( this ).unbind( event, handler );
+-				return fn.apply( this, arguments );
+-			};
+-			handler.guid = fn.guid || jQuery.guid++;
+-		} else {
+-			handler = fn;
+-		}
+-
+-		if ( type === "unload" && name !== "one" ) {
+-			this.one( type, data, fn );
+-
+-		} else {
+-			for ( var i = 0, l = this.length; i < l; i++ ) {
+-				jQuery.event.add( this[i], type, handler, data );
+-			}
+-		}
+-
+-		return this;
+-	};
+-});
+-
+-jQuery.fn.extend({
+-	unbind: function( type, fn ) {
+-		// Handle object literals
+-		if ( typeof type === "object" && !type.preventDefault ) {
+-			for ( var key in type ) {
+-				this.unbind(key, type[key]);
+-			}
+-
+-		} else {
+-			for ( var i = 0, l = this.length; i < l; i++ ) {
+-				jQuery.event.remove( this[i], type, fn );
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	delegate: function( selector, types, data, fn ) {
+-		return this.live( types, data, fn, selector );
+-	},
+-
+-	undelegate: function( selector, types, fn ) {
+-		if ( arguments.length === 0 ) {
+-			return this.unbind( "live" );
+-
+-		} else {
+-			return this.die( types, null, fn, selector );
+-		}
+-	},
+-
+-	trigger: function( type, data ) {
+-		return this.each(function() {
+-			jQuery.event.trigger( type, data, this );
+-		});
+-	},
+-
+-	triggerHandler: function( type, data ) {
+-		if ( this[0] ) {
+-			return jQuery.event.trigger( type, data, this[0], true );
+-		}
+-	},
+-
+-	toggle: function( fn ) {
+-		// Save reference to arguments for access in closure
+-		var args = arguments,
+-			guid = fn.guid || jQuery.guid++,
+-			i = 0,
+-			toggler = function( event ) {
+-				// Figure out which function to execute
+-				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+-				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+-
+-				// Make sure that clicks stop
+-				event.preventDefault();
+-
+-				// and execute the function
+-				return args[ lastToggle ].apply( this, arguments ) || false;
+-			};
+-
+-		// link all the functions, so any of them can unbind this click handler
+-		toggler.guid = guid;
+-		while ( i < args.length ) {
+-			args[ i++ ].guid = guid;
+-		}
+-
+-		return this.click( toggler );
+-	},
+-
+-	hover: function( fnOver, fnOut ) {
+-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+-	}
+-});
+-
+-var liveMap = {
+-	focus: "focusin",
+-	blur: "focusout",
+-	mouseenter: "mouseover",
+-	mouseleave: "mouseout"
+-};
+-
+-jQuery.each(["live", "die"], function( i, name ) {
+-	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+-		var type, i = 0, match, namespaces, preType,
+-			selector = origSelector || this.selector,
+-			context = origSelector ? this : jQuery( this.context );
+-
+-		if ( typeof types === "object" && !types.preventDefault ) {
+-			for ( var key in types ) {
+-				context[ name ]( key, data, types[key], selector );
+-			}
+-
+-			return this;
+-		}
+-
+-		if ( name === "die" && !types &&
+-					origSelector && origSelector.charAt(0) === "." ) {
+-
+-			context.unbind( origSelector );
+-
+-			return this;
+-		}
+-
+-		if ( data === false || jQuery.isFunction( data ) ) {
+-			fn = data || returnFalse;
+-			data = undefined;
+-		}
+-
+-		types = (types || "").split(" ");
+-
+-		while ( (type = types[ i++ ]) != null ) {
+-			match = rnamespaces.exec( type );
+-			namespaces = "";
+-
+-			if ( match )  {
+-				namespaces = match[0];
+-				type = type.replace( rnamespaces, "" );
+-			}
+-
+-			if ( type === "hover" ) {
+-				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+-				continue;
+-			}
+-
+-			preType = type;
+-
+-			if ( liveMap[ type ] ) {
+-				types.push( liveMap[ type ] + namespaces );
+-				type = type + namespaces;
+-
+-			} else {
+-				type = (liveMap[ type ] || type) + namespaces;
+-			}
+-
+-			if ( name === "live" ) {
+-				// bind live handler
+-				for ( var j = 0, l = context.length; j < l; j++ ) {
+-					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+-						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+-				}
+-
+-			} else {
+-				// unbind live handler
+-				context.unbind( "live." + liveConvert( type, selector ), fn );
+-			}
+-		}
+-
+-		return this;
+-	};
+-});
+-
+-function liveHandler( event ) {
+-	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+-		elems = [],
+-		selectors = [],
+-		events = jQuery._data( this, "events" );
+-
+-	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
+-	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
+-		return;
+-	}
+-
+-	if ( event.namespace ) {
+-		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+-	}
+-
+-	event.liveFired = this;
+-
+-	var live = events.live.slice(0);
+-
+-	for ( j = 0; j < live.length; j++ ) {
+-		handleObj = live[j];
+-
+-		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+-			selectors.push( handleObj.selector );
+-
+-		} else {
+-			live.splice( j--, 1 );
+-		}
+-	}
+-
+-	match = jQuery( event.target ).closest( selectors, event.currentTarget );
+-
+-	for ( i = 0, l = match.length; i < l; i++ ) {
+-		close = match[i];
+-
+-		for ( j = 0; j < live.length; j++ ) {
+-			handleObj = live[j];
+-
+-			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
+-				elem = close.elem;
+-				related = null;
+-
+-				// Those two events require additional checking
+-				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+-					event.type = handleObj.preType;
+-					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+-
+-					// Make sure not to accidentally match a child element with the same selector
+-					if ( related && jQuery.contains( elem, related ) ) {
+-						related = elem;
+-					}
+-				}
+-
+-				if ( !related || related !== elem ) {
+-					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+-				}
+-			}
+-		}
+-	}
+-
+-	for ( i = 0, l = elems.length; i < l; i++ ) {
+-		match = elems[i];
+-
+-		if ( maxLevel && match.level > maxLevel ) {
+-			break;
+-		}
+-
+-		event.currentTarget = match.elem;
+-		event.data = match.handleObj.data;
+-		event.handleObj = match.handleObj;
+-
+-		ret = match.handleObj.origHandler.apply( match.elem, arguments );
+-
+-		if ( ret === false || event.isPropagationStopped() ) {
+-			maxLevel = match.level;
+-
+-			if ( ret === false ) {
+-				stop = false;
+-			}
+-			if ( event.isImmediatePropagationStopped() ) {
+-				break;
+-			}
+-		}
+-	}
+-
+-	return stop;
+-}
+-
+-function liveConvert( type, selector ) {
+-	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
+-}
+-
+-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+-	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+-
+-	// Handle event binding
+-	jQuery.fn[ name ] = function( data, fn ) {
+-		if ( fn == null ) {
+-			fn = data;
+-			data = null;
+-		}
+-
+-		return arguments.length > 0 ?
+-			this.bind( name, data, fn ) :
+-			this.trigger( name );
+-	};
+-
+-	if ( jQuery.attrFn ) {
+-		jQuery.attrFn[ name ] = true;
+-	}
+-});
+-
+-
+-
+-/*!
+- * Sizzle CSS Selector Engine
+- *  Copyright 2011, The Dojo Foundation
+- *  Released under the MIT, BSD, and GPL Licenses.
+- *  More information: http://sizzlejs.com/
+- */
+-(function(){
+-
+-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+-	done = 0,
+-	toString = Object.prototype.toString,
+-	hasDuplicate = false,
+-	baseHasDuplicate = true,
+-	rBackslash = /\\/g,
+-	rNonWord = /\W/;
+-
+-// Here we check if the JavaScript engine is using some sort of
+-// optimization where it does not always call our comparision
+-// function. If that is the case, discard the hasDuplicate value.
+-//   Thus far that includes Google Chrome.
+-[0, 0].sort(function() {
+-	baseHasDuplicate = false;
+-	return 0;
+-});
+-
+-var Sizzle = function( selector, context, results, seed ) {
+-	results = results || [];
+-	context = context || document;
+-
+-	var origContext = context;
+-
+-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+-		return [];
+-	}
+-	
+-	if ( !selector || typeof selector !== "string" ) {
+-		return results;
+-	}
+-
+-	var m, set, checkSet, extra, ret, cur, pop, i,
+-		prune = true,
+-		contextXML = Sizzle.isXML( context ),
+-		parts = [],
+-		soFar = selector;
+-	
+-	// Reset the position of the chunker regexp (start from head)
+-	do {
+-		chunker.exec( "" );
+-		m = chunker.exec( soFar );
+-
+-		if ( m ) {
+-			soFar = m[3];
+-		
+-			parts.push( m[1] );
+-		
+-			if ( m[2] ) {
+-				extra = m[3];
+-				break;
+-			}
+-		}
+-	} while ( m );
+-
+-	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+-
+-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+-			set = posProcess( parts[0] + parts[1], context );
+-
+-		} else {
+-			set = Expr.relative[ parts[0] ] ?
+-				[ context ] :
+-				Sizzle( parts.shift(), context );
+-
+-			while ( parts.length ) {
+-				selector = parts.shift();
+-
+-				if ( Expr.relative[ selector ] ) {
+-					selector += parts.shift();
+-				}
+-				
+-				set = posProcess( selector, set );
+-			}
+-		}
+-
+-	} else {
+-		// Take a shortcut and set the context if the root selector is an ID
+-		// (but not if it'll be faster if the inner selector is an ID)
+-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+-
+-			ret = Sizzle.find( parts.shift(), context, contextXML );
+-			context = ret.expr ?
+-				Sizzle.filter( ret.expr, ret.set )[0] :
+-				ret.set[0];
+-		}
+-
+-		if ( context ) {
+-			ret = seed ?
+-				{ expr: parts.pop(), set: makeArray(seed) } :
+-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+-
+-			set = ret.expr ?
+-				Sizzle.filter( ret.expr, ret.set ) :
+-				ret.set;
+-
+-			if ( parts.length > 0 ) {
+-				checkSet = makeArray( set );
+-
+-			} else {
+-				prune = false;
+-			}
+-
+-			while ( parts.length ) {
+-				cur = parts.pop();
+-				pop = cur;
+-
+-				if ( !Expr.relative[ cur ] ) {
+-					cur = "";
+-				} else {
+-					pop = parts.pop();
+-				}
+-
+-				if ( pop == null ) {
+-					pop = context;
+-				}
+-
+-				Expr.relative[ cur ]( checkSet, pop, contextXML );
+-			}
+-
+-		} else {
+-			checkSet = parts = [];
+-		}
+-	}
+-
+-	if ( !checkSet ) {
+-		checkSet = set;
+-	}
+-
+-	if ( !checkSet ) {
+-		Sizzle.error( cur || selector );
+-	}
+-
+-	if ( toString.call(checkSet) === "[object Array]" ) {
+-		if ( !prune ) {
+-			results.push.apply( results, checkSet );
+-
+-		} else if ( context && context.nodeType === 1 ) {
+-			for ( i = 0; checkSet[i] != null; i++ ) {
+-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+-					results.push( set[i] );
+-				}
+-			}
+-
+-		} else {
+-			for ( i = 0; checkSet[i] != null; i++ ) {
+-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+-					results.push( set[i] );
+-				}
+-			}
+-		}
+-
+-	} else {
+-		makeArray( checkSet, results );
+-	}
+-
+-	if ( extra ) {
+-		Sizzle( extra, origContext, results, seed );
+-		Sizzle.uniqueSort( results );
+-	}
+-
+-	return results;
+-};
+-
+-Sizzle.uniqueSort = function( results ) {
+-	if ( sortOrder ) {
+-		hasDuplicate = baseHasDuplicate;
+-		results.sort( sortOrder );
+-
+-		if ( hasDuplicate ) {
+-			for ( var i = 1; i < results.length; i++ ) {
+-				if ( results[i] === results[ i - 1 ] ) {
+-					results.splice( i--, 1 );
+-				}
+-			}
+-		}
+-	}
+-
+-	return results;
+-};
+-
+-Sizzle.matches = function( expr, set ) {
+-	return Sizzle( expr, null, null, set );
+-};
+-
+-Sizzle.matchesSelector = function( node, expr ) {
+-	return Sizzle( expr, null, null, [node] ).length > 0;
+-};
+-
+-Sizzle.find = function( expr, context, isXML ) {
+-	var set;
+-
+-	if ( !expr ) {
+-		return [];
+-	}
+-
+-	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+-		var match,
+-			type = Expr.order[i];
+-		
+-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+-			var left = match[1];
+-			match.splice( 1, 1 );
+-
+-			if ( left.substr( left.length - 1 ) !== "\\" ) {
+-				match[1] = (match[1] || "").replace( rBackslash, "" );
+-				set = Expr.find[ type ]( match, context, isXML );
+-
+-				if ( set != null ) {
+-					expr = expr.replace( Expr.match[ type ], "" );
+-					break;
+-				}
+-			}
+-		}
+-	}
+-
+-	if ( !set ) {
+-		set = typeof context.getElementsByTagName !== "undefined" ?
+-			context.getElementsByTagName( "*" ) :
+-			[];
+-	}
+-
+-	return { set: set, expr: expr };
+-};
+-
+-Sizzle.filter = function( expr, set, inplace, not ) {
+-	var match, anyFound,
+-		old = expr,
+-		result = [],
+-		curLoop = set,
+-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+-
+-	while ( expr && set.length ) {
+-		for ( var type in Expr.filter ) {
+-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+-				var found, item,
+-					filter = Expr.filter[ type ],
+-					left = match[1];
+-
+-				anyFound = false;
+-
+-				match.splice(1,1);
+-
+-				if ( left.substr( left.length - 1 ) === "\\" ) {
+-					continue;
+-				}
+-
+-				if ( curLoop === result ) {
+-					result = [];
+-				}
+-
+-				if ( Expr.preFilter[ type ] ) {
+-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+-
+-					if ( !match ) {
+-						anyFound = found = true;
+-
+-					} else if ( match === true ) {
+-						continue;
+-					}
+-				}
+-
+-				if ( match ) {
+-					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+-						if ( item ) {
+-							found = filter( item, match, i, curLoop );
+-							var pass = not ^ !!found;
+-
+-							if ( inplace && found != null ) {
+-								if ( pass ) {
+-									anyFound = true;
+-
+-								} else {
+-									curLoop[i] = false;
+-								}
+-
+-							} else if ( pass ) {
+-								result.push( item );
+-								anyFound = true;
+-							}
+-						}
+-					}
+-				}
+-
+-				if ( found !== undefined ) {
+-					if ( !inplace ) {
+-						curLoop = result;
+-					}
+-
+-					expr = expr.replace( Expr.match[ type ], "" );
+-
+-					if ( !anyFound ) {
+-						return [];
+-					}
+-
+-					break;
+-				}
+-			}
+-		}
+-
+-		// Improper expression
+-		if ( expr === old ) {
+-			if ( anyFound == null ) {
+-				Sizzle.error( expr );
+-
+-			} else {
+-				break;
+-			}
+-		}
+-
+-		old = expr;
+-	}
+-
+-	return curLoop;
+-};
+-
+-Sizzle.error = function( msg ) {
+-	throw "Syntax error, unrecognized expression: " + msg;
+-};
+-
+-var Expr = Sizzle.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( elem ) {
+-			return elem.getAttribute( "href" );
+-		},
+-		type: function( elem ) {
+-			return elem.getAttribute( "type" );
+-		}
+-	},
+-
+-	relative: {
+-		"+": function(checkSet, part){
+-			var isPartStr = typeof part === "string",
+-				isTag = isPartStr && !rNonWord.test( part ),
+-				isPartStrNotTag = isPartStr && !isTag;
+-
+-			if ( isTag ) {
+-				part = part.toLowerCase();
+-			}
+-
+-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+-				if ( (elem = checkSet[i]) ) {
+-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+-
+-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+-						elem || false :
+-						elem === part;
+-				}
+-			}
+-
+-			if ( isPartStrNotTag ) {
+-				Sizzle.filter( part, checkSet, true );
+-			}
+-		},
+-
+-		">": function( checkSet, part ) {
+-			var elem,
+-				isPartStr = typeof part === "string",
+-				i = 0,
+-				l = checkSet.length;
+-
+-			if ( isPartStr && !rNonWord.test( part ) ) {
+-				part = part.toLowerCase();
+-
+-				for ( ; i < l; i++ ) {
+-					elem = checkSet[i];
+-
+-					if ( elem ) {
+-						var parent = elem.parentNode;
+-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+-					}
+-				}
+-
+-			} else {
+-				for ( ; i < l; i++ ) {
+-					elem = checkSet[i];
+-
+-					if ( elem ) {
+-						checkSet[i] = isPartStr ?
+-							elem.parentNode :
+-							elem.parentNode === part;
+-					}
+-				}
+-
+-				if ( isPartStr ) {
+-					Sizzle.filter( part, checkSet, true );
+-				}
+-			}
+-		},
+-
+-		"": function(checkSet, part, isXML){
+-			var nodeCheck,
+-				doneName = done++,
+-				checkFn = dirCheck;
+-
+-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+-				part = part.toLowerCase();
+-				nodeCheck = part;
+-				checkFn = dirNodeCheck;
+-			}
+-
+-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+-		},
+-
+-		"~": function( checkSet, part, isXML ) {
+-			var nodeCheck,
+-				doneName = done++,
+-				checkFn = dirCheck;
+-
+-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+-				part = part.toLowerCase();
+-				nodeCheck = part;
+-				checkFn = dirNodeCheck;
+-			}
+-
+-			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+-		}
+-	},
+-
+-	find: {
+-		ID: function( match, context, isXML ) {
+-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+-				var m = context.getElementById(match[1]);
+-				// Check parentNode to catch when Blackberry 4.6 returns
+-				// nodes that are no longer in the document #6963
+-				return m && m.parentNode ? [m] : [];
+-			}
+-		},
+-
+-		NAME: function( match, context ) {
+-			if ( typeof context.getElementsByName !== "undefined" ) {
+-				var ret = [],
+-					results = context.getElementsByName( match[1] );
+-
+-				for ( var i = 0, l = results.length; i < l; i++ ) {
+-					if ( results[i].getAttribute("name") === match[1] ) {
+-						ret.push( results[i] );
+-					}
+-				}
+-
+-				return ret.length === 0 ? null : ret;
+-			}
+-		},
+-
+-		TAG: function( match, context ) {
+-			if ( typeof context.getElementsByTagName !== "undefined" ) {
+-				return context.getElementsByTagName( match[1] );
+-			}
+-		}
+-	},
+-	preFilter: {
+-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+-			match = " " + match[1].replace( rBackslash, "" ) + " ";
+-
+-			if ( isXML ) {
+-				return match;
+-			}
+-
+-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+-				if ( elem ) {
+-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+-						if ( !inplace ) {
+-							result.push( elem );
+-						}
+-
+-					} else if ( inplace ) {
+-						curLoop[i] = false;
+-					}
+-				}
+-			}
+-
+-			return false;
+-		},
+-
+-		ID: function( match ) {
+-			return match[1].replace( rBackslash, "" );
+-		},
+-
+-		TAG: function( match, curLoop ) {
+-			return match[1].replace( rBackslash, "" ).toLowerCase();
+-		},
+-
+-		CHILD: function( match ) {
+-			if ( match[1] === "nth" ) {
+-				if ( !match[2] ) {
+-					Sizzle.error( match[0] );
+-				}
+-
+-				match[2] = match[2].replace(/^\+|\s*/g, '');
+-
+-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+-				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+-
+-				// calculate the numbers (first)n+(last) including if they are negative
+-				match[2] = (test[1] + (test[2] || 1)) - 0;
+-				match[3] = test[3] - 0;
+-			}
+-			else if ( match[2] ) {
+-				Sizzle.error( match[0] );
+-			}
+-
+-			// TODO: Move to normal caching system
+-			match[0] = done++;
+-
+-			return match;
+-		},
+-
+-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+-			var name = match[1] = match[1].replace( rBackslash, "" );
+-			
+-			if ( !isXML && Expr.attrMap[name] ) {
+-				match[1] = Expr.attrMap[name];
+-			}
+-
+-			// Handle if an un-quoted value was used
+-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+-
+-			if ( match[2] === "~=" ) {
+-				match[4] = " " + match[4] + " ";
+-			}
+-
+-			return match;
+-		},
+-
+-		PSEUDO: function( match, curLoop, inplace, result, not ) {
+-			if ( match[1] === "not" ) {
+-				// If we're dealing with a complex expression, or a simple one
+-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+-					match[3] = Sizzle(match[3], null, null, curLoop);
+-
+-				} else {
+-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+-
+-					if ( !inplace ) {
+-						result.push.apply( result, ret );
+-					}
+-
+-					return false;
+-				}
+-
+-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+-				return true;
+-			}
+-			
+-			return match;
+-		},
+-
+-		POS: function( match ) {
+-			match.unshift( true );
+-
+-			return match;
+-		}
+-	},
+-	
+-	filters: {
+-		enabled: function( elem ) {
+-			return elem.disabled === false && elem.type !== "hidden";
+-		},
+-
+-		disabled: function( elem ) {
+-			return elem.disabled === true;
+-		},
+-
+-		checked: function( elem ) {
+-			return elem.checked === true;
+-		},
+-		
+-		selected: function( elem ) {
+-			// Accessing this property makes selected-by-default
+-			// options in Safari work properly
+-			if ( elem.parentNode ) {
+-				elem.parentNode.selectedIndex;
+-			}
+-			
+-			return elem.selected === true;
+-		},
+-
+-		parent: function( elem ) {
+-			return !!elem.firstChild;
+-		},
+-
+-		empty: function( elem ) {
+-			return !elem.firstChild;
+-		},
+-
+-		has: function( elem, i, match ) {
+-			return !!Sizzle( match[3], elem ).length;
+-		},
+-
+-		header: function( elem ) {
+-			return (/h\d/i).test( elem.nodeName );
+-		},
+-
+-		text: function( elem ) {
+-			var attr = elem.getAttribute( "type" ), type = elem.type;
+-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
+-			// use getAttribute instead to test this case
+-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+-		},
+-
+-		radio: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+-		},
+-
+-		checkbox: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+-		},
+-
+-		file: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+-		},
+-
+-		password: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+-		},
+-
+-		submit: function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return (name === "input" || name === "button") && "submit" === elem.type;
+-		},
+-
+-		image: function( elem ) {
+-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+-		},
+-
+-		reset: function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return (name === "input" || name === "button") && "reset" === elem.type;
+-		},
+-
+-		button: function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return name === "input" && "button" === elem.type || name === "button";
+-		},
+-
+-		input: function( elem ) {
+-			return (/input|select|textarea|button/i).test( elem.nodeName );
+-		},
+-
+-		focus: function( elem ) {
+-			return elem === elem.ownerDocument.activeElement;
+-		}
+-	},
+-	setFilters: {
+-		first: function( elem, i ) {
+-			return i === 0;
+-		},
+-
+-		last: function( elem, i, match, array ) {
+-			return i === array.length - 1;
+-		},
+-
+-		even: function( elem, i ) {
+-			return i % 2 === 0;
+-		},
+-
+-		odd: function( elem, i ) {
+-			return i % 2 === 1;
+-		},
+-
+-		lt: function( elem, i, match ) {
+-			return i < match[3] - 0;
+-		},
+-
+-		gt: function( elem, i, match ) {
+-			return i > match[3] - 0;
+-		},
+-
+-		nth: function( elem, i, match ) {
+-			return match[3] - 0 === i;
+-		},
+-
+-		eq: function( elem, i, match ) {
+-			return match[3] - 0 === i;
+-		}
+-	},
+-	filter: {
+-		PSEUDO: function( elem, match, i, array ) {
+-			var name = match[1],
+-				filter = Expr.filters[ name ];
+-
+-			if ( filter ) {
+-				return filter( elem, i, match, array );
+-
+-			} else if ( name === "contains" ) {
+-				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+-
+-			} else if ( name === "not" ) {
+-				var not = match[3];
+-
+-				for ( var j = 0, l = not.length; j < l; j++ ) {
+-					if ( not[j] === elem ) {
+-						return false;
+-					}
+-				}
+-
+-				return true;
+-
+-			} else {
+-				Sizzle.error( name );
+-			}
+-		},
+-
+-		CHILD: function( elem, match ) {
+-			var type = match[1],
+-				node = elem;
+-
+-			switch ( type ) {
+-				case "only":
+-				case "first":
+-					while ( (node = node.previousSibling) )	 {
+-						if ( node.nodeType === 1 ) { 
+-							return false; 
+-						}
+-					}
+-
+-					if ( type === "first" ) { 
+-						return true; 
+-					}
+-
+-					node = elem;
+-
+-				case "last":
+-					while ( (node = node.nextSibling) )	 {
+-						if ( node.nodeType === 1 ) { 
+-							return false; 
+-						}
+-					}
+-
+-					return true;
+-
+-				case "nth":
+-					var first = match[2],
+-						last = match[3];
+-
+-					if ( first === 1 && last === 0 ) {
+-						return true;
+-					}
+-					
+-					var doneName = match[0],
+-						parent = elem.parentNode;
+-	
+-					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+-						var count = 0;
+-						
+-						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+-							if ( node.nodeType === 1 ) {
+-								node.nodeIndex = ++count;
+-							}
+-						} 
+-
+-						parent.sizcache = doneName;
+-					}
+-					
+-					var diff = elem.nodeIndex - last;
+-
+-					if ( first === 0 ) {
+-						return diff === 0;
+-
+-					} else {
+-						return ( diff % first === 0 && diff / first >= 0 );
+-					}
+-			}
+-		},
+-
+-		ID: function( elem, match ) {
+-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+-		},
+-
+-		TAG: function( elem, match ) {
+-			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+-		},
+-		
+-		CLASS: function( elem, match ) {
+-			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+-				.indexOf( match ) > -1;
+-		},
+-
+-		ATTR: function( elem, match ) {
+-			var name = match[1],
+-				result = Expr.attrHandle[ name ] ?
+-					Expr.attrHandle[ name ]( elem ) :
+-					elem[ name ] != null ?
+-						elem[ name ] :
+-						elem.getAttribute( name ),
+-				value = result + "",
+-				type = match[2],
+-				check = match[4];
+-
+-			return result == null ?
+-				type === "!=" :
+-				type === "=" ?
+-				value === check :
+-				type === "*=" ?
+-				value.indexOf(check) >= 0 :
+-				type === "~=" ?
+-				(" " + value + " ").indexOf(check) >= 0 :
+-				!check ?
+-				value && result !== false :
+-				type === "!=" ?
+-				value !== check :
+-				type === "^=" ?
+-				value.indexOf(check) === 0 :
+-				type === "$=" ?
+-				value.substr(value.length - check.length) === check :
+-				type === "|=" ?
+-				value === check || value.substr(0, check.length + 1) === check + "-" :
+-				false;
+-		},
+-
+-		POS: function( elem, match, i, array ) {
+-			var name = match[2],
+-				filter = Expr.setFilters[ name ];
+-
+-			if ( filter ) {
+-				return filter( elem, i, match, array );
+-			}
+-		}
+-	}
+-};
+-
+-var origPOS = Expr.match.POS,
+-	fescape = function(all, num){
+-		return "\\" + (num - 0 + 1);
+-	};
+-
+-for ( var type in Expr.match ) {
+-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+-}
+-
+-var makeArray = function( array, results ) {
+-	array = Array.prototype.slice.call( array, 0 );
+-
+-	if ( results ) {
+-		results.push.apply( results, array );
+-		return results;
+-	}
+-	
+-	return array;
+-};
+-
+-// Perform a simple check to determine if the browser is capable of
+-// converting a NodeList to an array using builtin methods.
+-// Also verifies that the returned array holds DOM nodes
+-// (which is not the case in the Blackberry browser)
+-try {
+-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+-
+-// Provide a fallback method if it does not work
+-} catch( e ) {
+-	makeArray = function( array, results ) {
+-		var i = 0,
+-			ret = results || [];
+-
+-		if ( toString.call(array) === "[object Array]" ) {
+-			Array.prototype.push.apply( ret, array );
+-
+-		} else {
+-			if ( typeof array.length === "number" ) {
+-				for ( var l = array.length; i < l; i++ ) {
+-					ret.push( array[i] );
+-				}
+-
+-			} else {
+-				for ( ; array[i]; i++ ) {
+-					ret.push( array[i] );
+-				}
+-			}
+-		}
+-
+-		return ret;
+-	};
+-}
+-
+-var sortOrder, siblingCheck;
+-
+-if ( document.documentElement.compareDocumentPosition ) {
+-	sortOrder = function( a, b ) {
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-		}
+-
+-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+-			return a.compareDocumentPosition ? -1 : 1;
+-		}
+-
+-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+-	};
+-
+-} else {
+-	sortOrder = function( a, b ) {
+-		// The nodes are identical, we can exit early
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-
+-		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+-		} else if ( a.sourceIndex && b.sourceIndex ) {
+-			return a.sourceIndex - b.sourceIndex;
+-		}
+-
+-		var al, bl,
+-			ap = [],
+-			bp = [],
+-			aup = a.parentNode,
+-			bup = b.parentNode,
+-			cur = aup;
+-
+-		// If the nodes are siblings (or identical) we can do a quick check
+-		if ( aup === bup ) {
+-			return siblingCheck( a, b );
+-
+-		// If no parents were found then the nodes are disconnected
+-		} else if ( !aup ) {
+-			return -1;
+-
+-		} else if ( !bup ) {
+-			return 1;
+-		}
+-
+-		// Otherwise they're somewhere else in the tree so we need
+-		// to build up a full list of the parentNodes for comparison
+-		while ( cur ) {
+-			ap.unshift( cur );
+-			cur = cur.parentNode;
+-		}
+-
+-		cur = bup;
+-
+-		while ( cur ) {
+-			bp.unshift( cur );
+-			cur = cur.parentNode;
+-		}
+-
+-		al = ap.length;
+-		bl = bp.length;
+-
+-		// Start walking down the tree looking for a discrepancy
+-		for ( var i = 0; i < al && i < bl; i++ ) {
+-			if ( ap[i] !== bp[i] ) {
+-				return siblingCheck( ap[i], bp[i] );
+-			}
+-		}
+-
+-		// We ended someplace up the tree so do a sibling check
+-		return i === al ?
+-			siblingCheck( a, bp[i], -1 ) :
+-			siblingCheck( ap[i], b, 1 );
+-	};
+-
+-	siblingCheck = function( a, b, ret ) {
+-		if ( a === b ) {
+-			return ret;
+-		}
+-
+-		var cur = a.nextSibling;
+-
+-		while ( cur ) {
+-			if ( cur === b ) {
+-				return -1;
+-			}
+-
+-			cur = cur.nextSibling;
+-		}
+-
+-		return 1;
+-	};
+-}
+-
+-// Utility function for retreiving the text value of an array of DOM nodes
+-Sizzle.getText = function( elems ) {
+-	var ret = "", elem;
+-
+-	for ( var i = 0; elems[i]; i++ ) {
+-		elem = elems[i];
+-
+-		// Get the text from text nodes and CDATA nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+-			ret += elem.nodeValue;
+-
+-		// Traverse everything else, except comment nodes
+-		} else if ( elem.nodeType !== 8 ) {
+-			ret += Sizzle.getText( elem.childNodes );
+-		}
+-	}
+-
+-	return ret;
+-};
+-
+-// Check to see if the browser returns elements by name when
+-// querying by getElementById (and provide a workaround)
+-(function(){
+-	// We're going to inject a fake input element with a specified name
+-	var form = document.createElement("div"),
+-		id = "script" + (new Date()).getTime(),
+-		root = document.documentElement;
+-
+-	form.innerHTML = "<a name='" + id + "'/>";
+-
+-	// Inject it into the root element, check its status, and remove it quickly
+-	root.insertBefore( form, root.firstChild );
+-
+-	// The workaround has to do additional checks after a getElementById
+-	// Which slows things down for other browsers (hence the branching)
+-	if ( document.getElementById( id ) ) {
+-		Expr.find.ID = function( match, context, isXML ) {
+-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+-				var m = context.getElementById(match[1]);
+-
+-				return m ?
+-					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+-						[m] :
+-						undefined :
+-					[];
+-			}
+-		};
+-
+-		Expr.filter.ID = function( elem, match ) {
+-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+-
+-			return elem.nodeType === 1 && node && node.nodeValue === match;
+-		};
+-	}
+-
+-	root.removeChild( form );
+-
+-	// release memory in IE
+-	root = form = null;
+-})();
+-
+-(function(){
+-	// Check to see if the browser returns only elements
+-	// when doing getElementsByTagName("*")
+-
+-	// Create a fake element
+-	var div = document.createElement("div");
+-	div.appendChild( document.createComment("") );
+-
+-	// Make sure no comments are found
+-	if ( div.getElementsByTagName("*").length > 0 ) {
+-		Expr.find.TAG = function( match, context ) {
+-			var results = context.getElementsByTagName( match[1] );
+-
+-			// Filter out possible comments
+-			if ( match[1] === "*" ) {
+-				var tmp = [];
+-
+-				for ( var i = 0; results[i]; i++ ) {
+-					if ( results[i].nodeType === 1 ) {
+-						tmp.push( results[i] );
+-					}
+-				}
+-
+-				results = tmp;
+-			}
+-
+-			return results;
+-		};
+-	}
+-
+-	// Check to see if an attribute returns normalized href attributes
+-	div.innerHTML = "<a href='#'></a>";
+-
+-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+-			div.firstChild.getAttribute("href") !== "#" ) {
+-
+-		Expr.attrHandle.href = function( elem ) {
+-			return elem.getAttribute( "href", 2 );
+-		};
+-	}
+-
+-	// release memory in IE
+-	div = null;
+-})();
+-
+-if ( document.querySelectorAll ) {
+-	(function(){
+-		var oldSizzle = Sizzle,
+-			div = document.createElement("div"),
+-			id = "__sizzle__";
+-
+-		div.innerHTML = "<p class='TEST'></p>";
+-
+-		// Safari can't handle uppercase or unicode characters when
+-		// in quirks mode.
+-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+-			return;
+-		}
+-	
+-		Sizzle = function( query, context, extra, seed ) {
+-			context = context || document;
+-
+-			// Only use querySelectorAll on non-XML documents
+-			// (ID selectors don't work in non-HTML documents)
+-			if ( !seed && !Sizzle.isXML(context) ) {
+-				// See if we find a selector to speed up
+-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+-				
+-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+-					// Speed-up: Sizzle("TAG")
+-					if ( match[1] ) {
+-						return makeArray( context.getElementsByTagName( query ), extra );
+-					
+-					// Speed-up: Sizzle(".CLASS")
+-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+-						return makeArray( context.getElementsByClassName( match[2] ), extra );
+-					}
+-				}
+-				
+-				if ( context.nodeType === 9 ) {
+-					// Speed-up: Sizzle("body")
+-					// The body element only exists once, optimize finding it
+-					if ( query === "body" && context.body ) {
+-						return makeArray( [ context.body ], extra );
+-						
+-					// Speed-up: Sizzle("#ID")
+-					} else if ( match && match[3] ) {
+-						var elem = context.getElementById( match[3] );
+-
+-						// Check parentNode to catch when Blackberry 4.6 returns
+-						// nodes that are no longer in the document #6963
+-						if ( elem && elem.parentNode ) {
+-							// Handle the case where IE and Opera return items
+-							// by name instead of ID
+-							if ( elem.id === match[3] ) {
+-								return makeArray( [ elem ], extra );
+-							}
+-							
+-						} else {
+-							return makeArray( [], extra );
+-						}
+-					}
+-					
+-					try {
+-						return makeArray( context.querySelectorAll(query), extra );
+-					} catch(qsaError) {}
+-
+-				// qSA works strangely on Element-rooted queries
+-				// We can work around this by specifying an extra ID on the root
+-				// and working up from there (Thanks to Andrew Dupont for the technique)
+-				// IE 8 doesn't work on object elements
+-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+-					var oldContext = context,
+-						old = context.getAttribute( "id" ),
+-						nid = old || id,
+-						hasParent = context.parentNode,
+-						relativeHierarchySelector = /^\s*[+~]/.test( query );
+-
+-					if ( !old ) {
+-						context.setAttribute( "id", nid );
+-					} else {
+-						nid = nid.replace( /'/g, "\\$&" );
+-					}
+-					if ( relativeHierarchySelector && hasParent ) {
+-						context = context.parentNode;
+-					}
+-
+-					try {
+-						if ( !relativeHierarchySelector || hasParent ) {
+-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+-						}
+-
+-					} catch(pseudoError) {
+-					} finally {
+-						if ( !old ) {
+-							oldContext.removeAttribute( "id" );
+-						}
+-					}
+-				}
+-			}
+-		
+-			return oldSizzle(query, context, extra, seed);
+-		};
+-
+-		for ( var prop in oldSizzle ) {
+-			Sizzle[ prop ] = oldSizzle[ prop ];
+-		}
+-
+-		// release memory in IE
+-		div = null;
+-	})();
+-}
+-
+-(function(){
+-	var html = document.documentElement,
+-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+-
+-	if ( matches ) {
+-		// Check to see if it's possible to do matchesSelector
+-		// on a disconnected node (IE 9 fails this)
+-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+-			pseudoWorks = false;
+-
+-		try {
+-			// This should fail with an exception
+-			// Gecko does not error, returns false instead
+-			matches.call( document.documentElement, "[test!='']:sizzle" );
+-	
+-		} catch( pseudoError ) {
+-			pseudoWorks = true;
+-		}
+-
+-		Sizzle.matchesSelector = function( node, expr ) {
+-			// Make sure that attribute selectors are quoted
+-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+-
+-			if ( !Sizzle.isXML( node ) ) {
+-				try { 
+-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+-						var ret = matches.call( node, expr );
+-
+-						// IE 9's matchesSelector returns false on disconnected nodes
+-						if ( ret || !disconnectedMatch ||
+-								// As well, disconnected nodes are said to be in a document
+-								// fragment in IE 9, so check for that
+-								node.document && node.document.nodeType !== 11 ) {
+-							return ret;
+-						}
+-					}
+-				} catch(e) {}
+-			}
+-
+-			return Sizzle(expr, null, null, [node]).length > 0;
+-		};
+-	}
+-})();
+-
+-(function(){
+-	var div = document.createElement("div");
+-
+-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+-
+-	// Opera can't find a second classname (in 9.6)
+-	// Also, make sure that getElementsByClassName actually exists
+-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+-		return;
+-	}
+-
+-	// Safari caches class attributes, doesn't catch changes (in 3.2)
+-	div.lastChild.className = "e";
+-
+-	if ( div.getElementsByClassName("e").length === 1 ) {
+-		return;
+-	}
+-	
+-	Expr.order.splice(1, 0, "CLASS");
+-	Expr.find.CLASS = function( match, context, isXML ) {
+-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+-			return context.getElementsByClassName(match[1]);
+-		}
+-	};
+-
+-	// release memory in IE
+-	div = null;
+-})();
+-
+-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+-		var elem = checkSet[i];
+-
+-		if ( elem ) {
+-			var match = false;
+-
+-			elem = elem[dir];
+-
+-			while ( elem ) {
+-				if ( elem.sizcache === doneName ) {
+-					match = checkSet[elem.sizset];
+-					break;
+-				}
+-
+-				if ( elem.nodeType === 1 && !isXML ){
+-					elem.sizcache = doneName;
+-					elem.sizset = i;
+-				}
+-
+-				if ( elem.nodeName.toLowerCase() === cur ) {
+-					match = elem;
+-					break;
+-				}
+-
+-				elem = elem[dir];
+-			}
+-
+-			checkSet[i] = match;
+-		}
+-	}
+-}
+-
+-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+-		var elem = checkSet[i];
+-
+-		if ( elem ) {
+-			var match = false;
+-			
+-			elem = elem[dir];
+-
+-			while ( elem ) {
+-				if ( elem.sizcache === doneName ) {
+-					match = checkSet[elem.sizset];
+-					break;
+-				}
+-
+-				if ( elem.nodeType === 1 ) {
+-					if ( !isXML ) {
+-						elem.sizcache = doneName;
+-						elem.sizset = i;
+-					}
+-
+-					if ( typeof cur !== "string" ) {
+-						if ( elem === cur ) {
+-							match = true;
+-							break;
+-						}
+-
+-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+-						match = elem;
+-						break;
+-					}
+-				}
+-
+-				elem = elem[dir];
+-			}
+-
+-			checkSet[i] = match;
+-		}
+-	}
+-}
+-
+-if ( document.documentElement.contains ) {
+-	Sizzle.contains = function( a, b ) {
+-		return a !== b && (a.contains ? a.contains(b) : true);
+-	};
+-
+-} else if ( document.documentElement.compareDocumentPosition ) {
+-	Sizzle.contains = function( a, b ) {
+-		return !!(a.compareDocumentPosition(b) & 16);
+-	};
+-
+-} else {
+-	Sizzle.contains = function() {
+-		return false;
+-	};
+-}
+-
+-Sizzle.isXML = function( elem ) {
+-	// documentElement is verified for cases where it doesn't yet exist
+-	// (such as loading iframes in IE - #4833) 
+-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+-
+-	return documentElement ? documentElement.nodeName !== "HTML" : false;
+-};
+-
+-var posProcess = function( selector, context ) {
+-	var match,
+-		tmpSet = [],
+-		later = "",
+-		root = context.nodeType ? [context] : context;
+-
+-	// Position selectors must be done after the filter
+-	// And so must :not(positional) so we move all PSEUDOs to the end
+-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+-		later += match[0];
+-		selector = selector.replace( Expr.match.PSEUDO, "" );
+-	}
+-
+-	selector = Expr.relative[selector] ? selector + "*" : selector;
+-
+-	for ( var i = 0, l = root.length; i < l; i++ ) {
+-		Sizzle( selector, root[i], tmpSet );
+-	}
+-
+-	return Sizzle.filter( later, tmpSet );
+-};
+-
+-// EXPOSE
+-jQuery.find = Sizzle;
+-jQuery.expr = Sizzle.selectors;
+-jQuery.expr[":"] = jQuery.expr.filters;
+-jQuery.unique = Sizzle.uniqueSort;
+-jQuery.text = Sizzle.getText;
+-jQuery.isXMLDoc = Sizzle.isXML;
+-jQuery.contains = Sizzle.contains;
+-
+-
+-})();
+-
+-
+-var runtil = /Until$/,
+-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+-	// Note: This RegExp should be improved, or likely pulled from Sizzle
+-	rmultiselector = /,/,
+-	isSimple = /^.[^:#\[\.,]*$/,
+-	slice = Array.prototype.slice,
+-	POS = jQuery.expr.match.POS,
+-	// methods guaranteed to produce a unique set when starting from a unique set
+-	guaranteedUnique = {
+-		children: true,
+-		contents: true,
+-		next: true,
+-		prev: true
+-	};
+-
+-jQuery.fn.extend({
+-	find: function( selector ) {
+-		var self = this,
+-			i, l;
+-
+-		if ( typeof selector !== "string" ) {
+-			return jQuery( selector ).filter(function() {
+-				for ( i = 0, l = self.length; i < l; i++ ) {
+-					if ( jQuery.contains( self[ i ], this ) ) {
+-						return true;
+-					}
+-				}
+-			});
+-		}
+-
+-		var ret = this.pushStack( "", "find", selector ),
+-			length, n, r;
+-
+-		for ( i = 0, l = this.length; i < l; i++ ) {
+-			length = ret.length;
+-			jQuery.find( selector, this[i], ret );
+-
+-			if ( i > 0 ) {
+-				// Make sure that the results are unique
+-				for ( n = length; n < ret.length; n++ ) {
+-					for ( r = 0; r < length; r++ ) {
+-						if ( ret[r] === ret[n] ) {
+-							ret.splice(n--, 1);
+-							break;
+-						}
+-					}
+-				}
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	has: function( target ) {
+-		var targets = jQuery( target );
+-		return this.filter(function() {
+-			for ( var i = 0, l = targets.length; i < l; i++ ) {
+-				if ( jQuery.contains( this, targets[i] ) ) {
+-					return true;
+-				}
+-			}
+-		});
+-	},
+-
+-	not: function( selector ) {
+-		return this.pushStack( winnow(this, selector, false), "not", selector);
+-	},
+-
+-	filter: function( selector ) {
+-		return this.pushStack( winnow(this, selector, true), "filter", selector );
+-	},
+-
+-	is: function( selector ) {
+-		return !!selector && ( typeof selector === "string" ?
+-			jQuery.filter( selector, this ).length > 0 :
+-			this.filter( selector ).length > 0 );
+-	},
+-
+-	closest: function( selectors, context ) {
+-		var ret = [], i, l, cur = this[0];
+-		
+-		// Array
+-		if ( jQuery.isArray( selectors ) ) {
+-			var match, selector,
+-				matches = {},
+-				level = 1;
+-
+-			if ( cur && selectors.length ) {
+-				for ( i = 0, l = selectors.length; i < l; i++ ) {
+-					selector = selectors[i];
+-
+-					if ( !matches[ selector ] ) {
+-						matches[ selector ] = POS.test( selector ) ?
+-							jQuery( selector, context || this.context ) :
+-							selector;
+-					}
+-				}
+-
+-				while ( cur && cur.ownerDocument && cur !== context ) {
+-					for ( selector in matches ) {
+-						match = matches[ selector ];
+-
+-						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
+-							ret.push({ selector: selector, elem: cur, level: level });
+-						}
+-					}
+-
+-					cur = cur.parentNode;
+-					level++;
+-				}
+-			}
+-
+-			return ret;
+-		}
+-
+-		// String
+-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+-				jQuery( selectors, context || this.context ) :
+-				0;
+-
+-		for ( i = 0, l = this.length; i < l; i++ ) {
+-			cur = this[i];
+-
+-			while ( cur ) {
+-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+-					ret.push( cur );
+-					break;
+-
+-				} else {
+-					cur = cur.parentNode;
+-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+-						break;
+-					}
+-				}
+-			}
+-		}
+-
+-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+-
+-		return this.pushStack( ret, "closest", selectors );
+-	},
+-
+-	// Determine the position of an element within
+-	// the matched set of elements
+-	index: function( elem ) {
+-		if ( !elem || typeof elem === "string" ) {
+-			return jQuery.inArray( this[0],
+-				// If it receives a string, the selector is used
+-				// If it receives nothing, the siblings are used
+-				elem ? jQuery( elem ) : this.parent().children() );
+-		}
+-		// Locate the position of the desired element
+-		return jQuery.inArray(
+-			// If it receives a jQuery object, the first element is used
+-			elem.jquery ? elem[0] : elem, this );
+-	},
+-
+-	add: function( selector, context ) {
+-		var set = typeof selector === "string" ?
+-				jQuery( selector, context ) :
+-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+-			all = jQuery.merge( this.get(), set );
+-
+-		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+-			all :
+-			jQuery.unique( all ) );
+-	},
+-
+-	andSelf: function() {
+-		return this.add( this.prevObject );
+-	}
+-});
+-
+-// A painfully simple check to see if an element is disconnected
+-// from a document (should be improved, where feasible).
+-function isDisconnected( node ) {
+-	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+-}
+-
+-jQuery.each({
+-	parent: function( elem ) {
+-		var parent = elem.parentNode;
+-		return parent && parent.nodeType !== 11 ? parent : null;
+-	},
+-	parents: function( elem ) {
+-		return jQuery.dir( elem, "parentNode" );
+-	},
+-	parentsUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "parentNode", until );
+-	},
+-	next: function( elem ) {
+-		return jQuery.nth( elem, 2, "nextSibling" );
+-	},
+-	prev: function( elem ) {
+-		return jQuery.nth( elem, 2, "previousSibling" );
+-	},
+-	nextAll: function( elem ) {
+-		return jQuery.dir( elem, "nextSibling" );
+-	},
+-	prevAll: function( elem ) {
+-		return jQuery.dir( elem, "previousSibling" );
+-	},
+-	nextUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "nextSibling", until );
+-	},
+-	prevUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "previousSibling", until );
+-	},
+-	siblings: function( elem ) {
+-		return jQuery.sibling( elem.parentNode.firstChild, elem );
+-	},
+-	children: function( elem ) {
+-		return jQuery.sibling( elem.firstChild );
+-	},
+-	contents: function( elem ) {
+-		return jQuery.nodeName( elem, "iframe" ) ?
+-			elem.contentDocument || elem.contentWindow.document :
+-			jQuery.makeArray( elem.childNodes );
+-	}
+-}, function( name, fn ) {
+-	jQuery.fn[ name ] = function( until, selector ) {
+-		var ret = jQuery.map( this, fn, until ),
+-			// The variable 'args' was introduced in
+-			// https://github.com/jquery/jquery/commit/52a0238
+-			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+-			// http://code.google.com/p/v8/issues/detail?id=1050
+-			args = slice.call(arguments);
+-
+-		if ( !runtil.test( name ) ) {
+-			selector = until;
+-		}
+-
+-		if ( selector && typeof selector === "string" ) {
+-			ret = jQuery.filter( selector, ret );
+-		}
+-
+-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+-
+-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+-			ret = ret.reverse();
+-		}
+-
+-		return this.pushStack( ret, name, args.join(",") );
+-	};
+-});
+-
+-jQuery.extend({
+-	filter: function( expr, elems, not ) {
+-		if ( not ) {
+-			expr = ":not(" + expr + ")";
+-		}
+-
+-		return elems.length === 1 ?
+-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+-			jQuery.find.matches(expr, elems);
+-	},
+-
+-	dir: function( elem, dir, until ) {
+-		var matched = [],
+-			cur = elem[ dir ];
+-
+-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+-			if ( cur.nodeType === 1 ) {
+-				matched.push( cur );
+-			}
+-			cur = cur[dir];
+-		}
+-		return matched;
+-	},
+-
+-	nth: function( cur, result, dir, elem ) {
+-		result = result || 1;
+-		var num = 0;
+-
+-		for ( ; cur; cur = cur[dir] ) {
+-			if ( cur.nodeType === 1 && ++num === result ) {
+-				break;
+-			}
+-		}
+-
+-		return cur;
+-	},
+-
+-	sibling: function( n, elem ) {
+-		var r = [];
+-
+-		for ( ; n; n = n.nextSibling ) {
+-			if ( n.nodeType === 1 && n !== elem ) {
+-				r.push( n );
+-			}
+-		}
+-
+-		return r;
+-	}
+-});
+-
+-// Implement the identical functionality for filter and not
+-function winnow( elements, qualifier, keep ) {
+-
+-	// Can't pass null or undefined to indexOf in Firefox 4
+-	// Set to 0 to skip string check
+-	qualifier = qualifier || 0;
+-
+-	if ( jQuery.isFunction( qualifier ) ) {
+-		return jQuery.grep(elements, function( elem, i ) {
+-			var retVal = !!qualifier.call( elem, i, elem );
+-			return retVal === keep;
+-		});
+-
+-	} else if ( qualifier.nodeType ) {
+-		return jQuery.grep(elements, function( elem, i ) {
+-			return (elem === qualifier) === keep;
+-		});
+-
+-	} else if ( typeof qualifier === "string" ) {
+-		var filtered = jQuery.grep(elements, function( elem ) {
+-			return elem.nodeType === 1;
+-		});
+-
+-		if ( isSimple.test( qualifier ) ) {
+-			return jQuery.filter(qualifier, filtered, !keep);
+-		} else {
+-			qualifier = jQuery.filter( qualifier, filtered );
+-		}
+-	}
+-
+-	return jQuery.grep(elements, function( elem, i ) {
+-		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+-	});
+-}
+-
+-
+-
+-
+-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+-	rleadingWhitespace = /^\s+/,
+-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+-	rtagName = /<([\w:]+)/,
+-	rtbody = /<tbody/i,
+-	rhtml = /<|&#?\w+;/,
+-	rnocache = /<(?:script|object|embed|option|style)/i,
+-	// checked="checked" or checked
+-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+-	rscriptType = /\/(java|ecma)script/i,
+-	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+-	wrapMap = {
+-		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, "", "" ]
+-	};
+-
+-wrapMap.optgroup = wrapMap.option;
+-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+-wrapMap.th = wrapMap.td;
+-
+-// IE can't serialize <link> and <script> tags normally
+-if ( !jQuery.support.htmlSerialize ) {
+-	wrapMap._default = [ 1, "div<div>", "</div>" ];
+-}
+-
+-jQuery.fn.extend({
+-	text: function( text ) {
+-		if ( jQuery.isFunction(text) ) {
+-			return this.each(function(i) {
+-				var self = jQuery( this );
+-
+-				self.text( text.call(this, i, self.text()) );
+-			});
+-		}
+-
+-		if ( typeof text !== "object" && text !== undefined ) {
+-			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+-		}
+-
+-		return jQuery.text( this );
+-	},
+-
+-	wrapAll: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapAll( html.call(this, i) );
+-			});
+-		}
+-
+-		if ( this[0] ) {
+-			// The elements to wrap the target around
+-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+-
+-			if ( this[0].parentNode ) {
+-				wrap.insertBefore( this[0] );
+-			}
+-
+-			wrap.map(function() {
+-				var elem = this;
+-
+-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+-					elem = elem.firstChild;
+-				}
+-
+-				return elem;
+-			}).append( this );
+-		}
+-
+-		return this;
+-	},
+-
+-	wrapInner: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapInner( html.call(this, i) );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			var self = jQuery( this ),
+-				contents = self.contents();
+-
+-			if ( contents.length ) {
+-				contents.wrapAll( html );
+-
+-			} else {
+-				self.append( html );
+-			}
+-		});
+-	},
+-
+-	wrap: function( html ) {
+-		return this.each(function() {
+-			jQuery( this ).wrapAll( html );
+-		});
+-	},
+-
+-	unwrap: function() {
+-		return this.parent().each(function() {
+-			if ( !jQuery.nodeName( this, "body" ) ) {
+-				jQuery( this ).replaceWith( this.childNodes );
+-			}
+-		}).end();
+-	},
+-
+-	append: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 ) {
+-				this.appendChild( elem );
+-			}
+-		});
+-	},
+-
+-	prepend: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 ) {
+-				this.insertBefore( elem, this.firstChild );
+-			}
+-		});
+-	},
+-
+-	before: function() {
+-		if ( this[0] && this[0].parentNode ) {
+-			return this.domManip(arguments, false, function( elem ) {
+-				this.parentNode.insertBefore( elem, this );
+-			});
+-		} else if ( arguments.length ) {
+-			var set = jQuery(arguments[0]);
+-			set.push.apply( set, this.toArray() );
+-			return this.pushStack( set, "before", arguments );
+-		}
+-	},
+-
+-	after: function() {
+-		if ( this[0] && this[0].parentNode ) {
+-			return this.domManip(arguments, false, function( elem ) {
+-				this.parentNode.insertBefore( elem, this.nextSibling );
+-			});
+-		} else if ( arguments.length ) {
+-			var set = this.pushStack( this, "after", arguments );
+-			set.push.apply( set, jQuery(arguments[0]).toArray() );
+-			return set;
+-		}
+-	},
+-
+-	// keepData is for internal use only--do not document
+-	remove: function( selector, keepData ) {
+-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+-			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+-				if ( !keepData && elem.nodeType === 1 ) {
+-					jQuery.cleanData( elem.getElementsByTagName("*") );
+-					jQuery.cleanData( [ elem ] );
+-				}
+-
+-				if ( elem.parentNode ) {
+-					elem.parentNode.removeChild( elem );
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	empty: function() {
+-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+-			// Remove element nodes and prevent memory leaks
+-			if ( elem.nodeType === 1 ) {
+-				jQuery.cleanData( elem.getElementsByTagName("*") );
+-			}
+-
+-			// Remove any remaining nodes
+-			while ( elem.firstChild ) {
+-				elem.removeChild( elem.firstChild );
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	clone: function( dataAndEvents, deepDataAndEvents ) {
+-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+-
+-		return this.map( function () {
+-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+-		});
+-	},
+-
+-	html: function( value ) {
+-		if ( value === undefined ) {
+-			return this[0] && this[0].nodeType === 1 ?
+-				this[0].innerHTML.replace(rinlinejQuery, "") :
+-				null;
+-
+-		// See if we can take a shortcut and just use innerHTML
+-		} else if ( typeof value === "string" && !rnocache.test( value ) &&
+-			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+-			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+-
+-			value = value.replace(rxhtmlTag, "<$1></$2>");
+-
+-			try {
+-				for ( var i = 0, l = this.length; i < l; i++ ) {
+-					// Remove element nodes and prevent memory leaks
+-					if ( this[i].nodeType === 1 ) {
+-						jQuery.cleanData( this[i].getElementsByTagName("*") );
+-						this[i].innerHTML = value;
+-					}
+-				}
+-
+-			// If using innerHTML throws an exception, use the fallback method
+-			} catch(e) {
+-				this.empty().append( value );
+-			}
+-
+-		} else if ( jQuery.isFunction( value ) ) {
+-			this.each(function(i){
+-				var self = jQuery( this );
+-
+-				self.html( value.call(this, i, self.html()) );
+-			});
+-
+-		} else {
+-			this.empty().append( value );
+-		}
+-
+-		return this;
+-	},
+-
+-	replaceWith: function( value ) {
+-		if ( this[0] && this[0].parentNode ) {
+-			// Make sure that the elements are removed from the DOM before they are inserted
+-			// this can help fix replacing a parent with child elements
+-			if ( jQuery.isFunction( value ) ) {
+-				return this.each(function(i) {
+-					var self = jQuery(this), old = self.html();
+-					self.replaceWith( value.call( this, i, old ) );
+-				});
+-			}
+-
+-			if ( typeof value !== "string" ) {
+-				value = jQuery( value ).detach();
+-			}
+-
+-			return this.each(function() {
+-				var next = this.nextSibling,
+-					parent = this.parentNode;
+-
+-				jQuery( this ).remove();
+-
+-				if ( next ) {
+-					jQuery(next).before( value );
+-				} else {
+-					jQuery(parent).append( value );
+-				}
+-			});
+-		} else {
+-			return this.length ?
+-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+-				this;
+-		}
+-	},
+-
+-	detach: function( selector ) {
+-		return this.remove( selector, true );
+-	},
+-
+-	domManip: function( args, table, callback ) {
+-		var results, first, fragment, parent,
+-			value = args[0],
+-			scripts = [];
+-
+-		// We can't cloneNode fragments that contain checked, in WebKit
+-		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+-			return this.each(function() {
+-				jQuery(this).domManip( args, table, callback, true );
+-			});
+-		}
+-
+-		if ( jQuery.isFunction(value) ) {
+-			return this.each(function(i) {
+-				var self = jQuery(this);
+-				args[0] = value.call(this, i, table ? self.html() : undefined);
+-				self.domManip( args, table, callback );
+-			});
+-		}
+-
+-		if ( this[0] ) {
+-			parent = value && value.parentNode;
+-
+-			// If we're in a fragment, just use that instead of building a new one
+-			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+-				results = { fragment: parent };
+-
+-			} else {
+-				results = jQuery.buildFragment( args, this, scripts );
+-			}
+-
+-			fragment = results.fragment;
+-
+-			if ( fragment.childNodes.length === 1 ) {
+-				first = fragment = fragment.firstChild;
+-			} else {
+-				first = fragment.firstChild;
+-			}
+-
+-			if ( first ) {
+-				table = table && jQuery.nodeName( first, "tr" );
+-
+-				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+-					callback.call(
+-						table ?
+-							root(this[i], first) :
+-							this[i],
+-						// Make sure that we do not leak memory by inadvertently discarding
+-						// the original fragment (which might have attached data) instead of
+-						// using it; in addition, use the original fragment object for the last
+-						// item instead of first because it can end up being emptied incorrectly
+-						// in certain situations (Bug #8070).
+-						// Fragments from the fragment cache must always be cloned and never used
+-						// in place.
+-						results.cacheable || (l > 1 && i < lastIndex) ?
+-							jQuery.clone( fragment, true, true ) :
+-							fragment
+-					);
+-				}
+-			}
+-
+-			if ( scripts.length ) {
+-				jQuery.each( scripts, evalScript );
+-			}
+-		}
+-
+-		return this;
+-	}
+-});
+-
+-function root( elem, cur ) {
+-	return jQuery.nodeName(elem, "table") ?
+-		(elem.getElementsByTagName("tbody")[0] ||
+-		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+-		elem;
+-}
+-
+-function cloneCopyEvent( src, dest ) {
+-
+-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+-		return;
+-	}
+-
+-	var internalKey = jQuery.expando,
+-		oldData = jQuery.data( src ),
+-		curData = jQuery.data( dest, oldData );
+-
+-	// Switch to use the internal data object, if it exists, for the next
+-	// stage of data copying
+-	if ( (oldData = oldData[ internalKey ]) ) {
+-		var events = oldData.events;
+-				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
+-
+-		if ( events ) {
+-			delete curData.handle;
+-			curData.events = {};
+-
+-			for ( var type in events ) {
+-				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+-					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+-				}
+-			}
+-		}
+-	}
+-}
+-
+-function cloneFixAttributes( src, dest ) {
+-	var nodeName;
+-
+-	// We do not need to do anything for non-Elements
+-	if ( dest.nodeType !== 1 ) {
+-		return;
+-	}
+-
+-	// clearAttributes removes the attributes, which we don't want,
+-	// but also removes the attachEvent events, which we *do* want
+-	if ( dest.clearAttributes ) {
+-		dest.clearAttributes();
+-	}
+-
+-	// mergeAttributes, in contrast, only merges back on the
+-	// original attributes, not the events
+-	if ( dest.mergeAttributes ) {
+-		dest.mergeAttributes( src );
+-	}
+-
+-	nodeName = dest.nodeName.toLowerCase();
+-
+-	// IE6-8 fail to clone children inside object elements that use
+-	// the proprietary classid attribute value (rather than the type
+-	// attribute) to identify the type of content to display
+-	if ( nodeName === "object" ) {
+-		dest.outerHTML = src.outerHTML;
+-
+-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+-		// IE6-8 fails to persist the checked state of a cloned checkbox
+-		// or radio button. Worse, IE6-7 fail to give the cloned element
+-		// a checked appearance if the defaultChecked value isn't also set
+-		if ( src.checked ) {
+-			dest.defaultChecked = dest.checked = src.checked;
+-		}
+-
+-		// IE6-7 get confused and end up setting the value of a cloned
+-		// checkbox/radio button to an empty string instead of "on"
+-		if ( dest.value !== src.value ) {
+-			dest.value = src.value;
+-		}
+-
+-	// IE6-8 fails to return the selected option to the default selected
+-	// state when cloning options
+-	} else if ( nodeName === "option" ) {
+-		dest.selected = src.defaultSelected;
+-
+-	// IE6-8 fails to set the defaultValue to the correct value when
+-	// cloning other types of input fields
+-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+-		dest.defaultValue = src.defaultValue;
+-	}
+-
+-	// Event data gets referenced instead of copied if the expando
+-	// gets copied too
+-	dest.removeAttribute( jQuery.expando );
+-}
+-
+-jQuery.buildFragment = function( args, nodes, scripts ) {
+-	var fragment, cacheable, cacheresults, doc;
+-
+-  // nodes may contain either an explicit document object,
+-  // a jQuery collection or context object.
+-  // If nodes[0] contains a valid object to assign to doc
+-  if ( nodes && nodes[0] ) {
+-    doc = nodes[0].ownerDocument || nodes[0];
+-  }
+-
+-  // Ensure that an attr object doesn't incorrectly stand in as a document object
+-	// Chrome and Firefox seem to allow this to occur and will throw exception
+-	// Fixes #8950
+-	if ( !doc.createDocumentFragment ) {
+-		doc = document;
+-	}
+-
+-	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+-	// Cloning options loses the selected state, so don't cache them
+-	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+-	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+-	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+-		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+-
+-		cacheable = true;
+-
+-		cacheresults = jQuery.fragments[ args[0] ];
+-		if ( cacheresults && cacheresults !== 1 ) {
+-			fragment = cacheresults;
+-		}
+-	}
+-
+-	if ( !fragment ) {
+-		fragment = doc.createDocumentFragment();
+-		jQuery.clean( args, doc, fragment, scripts );
+-	}
+-
+-	if ( cacheable ) {
+-		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+-	}
+-
+-	return { fragment: fragment, cacheable: cacheable };
+-};
+-
+-jQuery.fragments = {};
+-
+-jQuery.each({
+-	appendTo: "append",
+-	prependTo: "prepend",
+-	insertBefore: "before",
+-	insertAfter: "after",
+-	replaceAll: "replaceWith"
+-}, function( name, original ) {
+-	jQuery.fn[ name ] = function( selector ) {
+-		var ret = [],
+-			insert = jQuery( selector ),
+-			parent = this.length === 1 && this[0].parentNode;
+-
+-		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+-			insert[ original ]( this[0] );
+-			return this;
+-
+-		} else {
+-			for ( var i = 0, l = insert.length; i < l; i++ ) {
+-				var elems = (i > 0 ? this.clone(true) : this).get();
+-				jQuery( insert[i] )[ original ]( elems );
+-				ret = ret.concat( elems );
+-			}
+-
+-			return this.pushStack( ret, name, insert.selector );
+-		}
+-	};
+-});
+-
+-function getAll( elem ) {
+-	if ( "getElementsByTagName" in elem ) {
+-		return elem.getElementsByTagName( "*" );
+-
+-	} else if ( "querySelectorAll" in elem ) {
+-		return elem.querySelectorAll( "*" );
+-
+-	} else {
+-		return [];
+-	}
+-}
+-
+-// Used in clean, fixes the defaultChecked property
+-function fixDefaultChecked( elem ) {
+-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
+-		elem.defaultChecked = elem.checked;
+-	}
+-}
+-// Finds all inputs and passes them to fixDefaultChecked
+-function findInputs( elem ) {
+-	if ( jQuery.nodeName( elem, "input" ) ) {
+-		fixDefaultChecked( elem );
+-	} else if ( "getElementsByTagName" in elem ) {
+-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+-	}
+-}
+-
+-jQuery.extend({
+-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+-		var clone = elem.cloneNode(true),
+-				srcElements,
+-				destElements,
+-				i;
+-
+-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+-			// IE copies events bound via attachEvent when using cloneNode.
+-			// Calling detachEvent on the clone will also remove the events
+-			// from the original. In order to get around this, we use some
+-			// proprietary methods to clear the events. Thanks to MooTools
+-			// guys for this hotness.
+-
+-			cloneFixAttributes( elem, clone );
+-
+-			// Using Sizzle here is crazy slow, so we use getElementsByTagName
+-			// instead
+-			srcElements = getAll( elem );
+-			destElements = getAll( clone );
+-
+-			// Weird iteration because IE will replace the length property
+-			// with an element if you are cloning the body and one of the
+-			// elements on the page has a name or id of "length"
+-			for ( i = 0; srcElements[i]; ++i ) {
+-				cloneFixAttributes( srcElements[i], destElements[i] );
+-			}
+-		}
+-
+-		// Copy the events from the original to the clone
+-		if ( dataAndEvents ) {
+-			cloneCopyEvent( elem, clone );
+-
+-			if ( deepDataAndEvents ) {
+-				srcElements = getAll( elem );
+-				destElements = getAll( clone );
+-
+-				for ( i = 0; srcElements[i]; ++i ) {
+-					cloneCopyEvent( srcElements[i], destElements[i] );
+-				}
+-			}
+-		}
+-
+-		srcElements = destElements = null;
+-
+-		// Return the cloned set
+-		return clone;
+-	},
+-
+-	clean: function( elems, context, fragment, scripts ) {
+-		var checkScriptType;
+-
+-		context = context || document;
+-
+-		// !context.createElement fails in IE with an error but returns typeof 'object'
+-		if ( typeof context.createElement === "undefined" ) {
+-			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+-		}
+-
+-		var ret = [], j;
+-
+-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-			if ( typeof elem === "number" ) {
+-				elem += "";
+-			}
+-
+-			if ( !elem ) {
+-				continue;
+-			}
+-
+-			// Convert html string into DOM nodes
+-			if ( typeof elem === "string" ) {
+-				if ( !rhtml.test( elem ) ) {
+-					elem = context.createTextNode( elem );
+-				} else {
+-					// Fix "XHTML"-style tags in all browsers
+-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
+-
+-					// Trim whitespace, otherwise indexOf won't work as expected
+-					var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+-						wrap = wrapMap[ tag ] || wrapMap._default,
+-						depth = wrap[0],
+-						div = context.createElement("div");
+-
+-					// Go to html and back, then peel off extra wrappers
+-					div.innerHTML = wrap[1] + elem + wrap[2];
+-
+-					// Move to the right depth
+-					while ( depth-- ) {
+-						div = div.lastChild;
+-					}
+-
+-					// Remove IE's autoinserted <tbody> from table fragments
+-					if ( !jQuery.support.tbody ) {
+-
+-						// String was a <table>, *may* have spurious <tbody>
+-						var hasBody = rtbody.test(elem),
+-							tbody = tag === "table" && !hasBody ?
+-								div.firstChild && div.firstChild.childNodes :
+-
+-								// String was a bare <thead> or <tfoot>
+-								wrap[1] === "<table>" && !hasBody ?
+-									div.childNodes :
+-									[];
+-
+-						for ( j = tbody.length - 1; j >= 0 ; --j ) {
+-							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+-								tbody[ j ].parentNode.removeChild( tbody[ j ] );
+-							}
+-						}
+-					}
+-
+-					// IE completely kills leading whitespace when innerHTML is used
+-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+-						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+-					}
+-
+-					elem = div.childNodes;
+-				}
+-			}
+-
+-			// Resets defaultChecked for any radios and checkboxes
+-			// about to be appended to the DOM in IE 6/7 (#8060)
+-			var len;
+-			if ( !jQuery.support.appendChecked ) {
+-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
+-					for ( j = 0; j < len; j++ ) {
+-						findInputs( elem[j] );
+-					}
+-				} else {
+-					findInputs( elem );
+-				}
+-			}
+-
+-			if ( elem.nodeType ) {
+-				ret.push( elem );
+-			} else {
+-				ret = jQuery.merge( ret, elem );
+-			}
+-		}
+-
+-		if ( fragment ) {
+-			checkScriptType = function( elem ) {
+-				return !elem.type || rscriptType.test( elem.type );
+-			};
+-			for ( i = 0; ret[i]; i++ ) {
+-				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+-					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+-
+-				} else {
+-					if ( ret[i].nodeType === 1 ) {
+-						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+-
+-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+-					}
+-					fragment.appendChild( ret[i] );
+-				}
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	cleanData: function( elems ) {
+-		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
+-			deleteExpando = jQuery.support.deleteExpando;
+-
+-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+-				continue;
+-			}
+-
+-			id = elem[ jQuery.expando ];
+-
+-			if ( id ) {
+-				data = cache[ id ] && cache[ id ][ internalKey ];
+-
+-				if ( data && data.events ) {
+-					for ( var type in data.events ) {
+-						if ( special[ type ] ) {
+-							jQuery.event.remove( elem, type );
+-
+-						// This is a shortcut to avoid jQuery.event.remove's overhead
+-						} else {
+-							jQuery.removeEvent( elem, type, data.handle );
+-						}
+-					}
+-
+-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
+-					if ( data.handle ) {
+-						data.handle.elem = null;
+-					}
+-				}
+-
+-				if ( deleteExpando ) {
+-					delete elem[ jQuery.expando ];
+-
+-				} else if ( elem.removeAttribute ) {
+-					elem.removeAttribute( jQuery.expando );
+-				}
+-
+-				delete cache[ id ];
+-			}
+-		}
+-	}
+-});
+-
+-function evalScript( i, elem ) {
+-	if ( elem.src ) {
+-		jQuery.ajax({
+-			url: elem.src,
+-			async: false,
+-			dataType: "script"
+-		});
+-	} else {
+-		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+-	}
+-
+-	if ( elem.parentNode ) {
+-		elem.parentNode.removeChild( elem );
+-	}
+-}
+-
+-
+-
+-var ralpha = /alpha\([^)]*\)/i,
+-	ropacity = /opacity=([^)]*)/,
+-	// fixed for IE9, see #8346
+-	rupper = /([A-Z]|^ms)/g,
+-	rnumpx = /^-?\d+(?:px)?$/i,
+-	rnum = /^-?\d/,
+-	rrelNum = /^[+\-]=/,
+-	rrelNumFilter = /[^+\-\.\de]+/g,
+-
+-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+-	cssWidth = [ "Left", "Right" ],
+-	cssHeight = [ "Top", "Bottom" ],
+-	curCSS,
+-
+-	getComputedStyle,
+-	currentStyle;
+-
+-jQuery.fn.css = function( name, value ) {
+-	// Setting 'undefined' is a no-op
+-	if ( arguments.length === 2 && value === undefined ) {
+-		return this;
+-	}
+-
+-	return jQuery.access( this, name, value, true, function( elem, name, value ) {
+-		return value !== undefined ?
+-			jQuery.style( elem, name, value ) :
+-			jQuery.css( elem, name );
+-	});
+-};
+-
+-jQuery.extend({
+-	// Add in style property hooks for overriding the default
+-	// behavior of getting and setting a style property
+-	cssHooks: {
+-		opacity: {
+-			get: function( elem, computed ) {
+-				if ( computed ) {
+-					// We should always get a number back from opacity
+-					var ret = curCSS( elem, "opacity", "opacity" );
+-					return ret === "" ? "1" : ret;
+-
+-				} else {
+-					return elem.style.opacity;
+-				}
+-			}
+-		}
+-	},
+-
+-	// Exclude the following css properties to add px
+-	cssNumber: {
+-		"fillOpacity": true,
+-		"fontWeight": true,
+-		"lineHeight": true,
+-		"opacity": true,
+-		"orphans": true,
+-		"widows": true,
+-		"zIndex": true,
+-		"zoom": true
+-	},
+-
+-	// Add in properties whose names you wish to fix before
+-	// setting or getting the value
+-	cssProps: {
+-		// normalize float css property
+-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+-	},
+-
+-	// Get and set the style property on a DOM Node
+-	style: function( elem, name, value, extra ) {
+-		// Don't set styles on text and comment nodes
+-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+-			return;
+-		}
+-
+-		// Make sure that we're working with the right name
+-		var ret, type, origName = jQuery.camelCase( name ),
+-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
+-
+-		name = jQuery.cssProps[ origName ] || origName;
+-
+-		// Check if we're setting a value
+-		if ( value !== undefined ) {
+-			type = typeof value;
+-
+-			// Make sure that NaN and null values aren't set. See: #7116
+-			if ( type === "number" && isNaN( value ) || value == null ) {
+-				return;
+-			}
+-
+-			// convert relative number strings (+= or -=) to relative numbers. #7345
+-			if ( type === "string" && rrelNum.test( value ) ) {
+-				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+-				// Fixes bug #9237
+-				type = "number";
+-			}
+-
+-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+-				value += "px";
+-			}
+-
+-			// If a hook was provided, use that value, otherwise just set the specified value
+-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+-				// Fixes bug #5509
+-				try {
+-					style[ name ] = value;
+-				} catch(e) {}
+-			}
+-
+-		} else {
+-			// If a hook was provided get the non-computed value from there
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+-				return ret;
+-			}
+-
+-			// Otherwise just get the value from the style object
+-			return style[ name ];
+-		}
+-	},
+-
+-	css: function( elem, name, extra ) {
+-		var ret, hooks;
+-
+-		// Make sure that we're working with the right name
+-		name = jQuery.camelCase( name );
+-		hooks = jQuery.cssHooks[ name ];
+-		name = jQuery.cssProps[ name ] || name;
+-
+-		// cssFloat needs a special treatment
+-		if ( name === "cssFloat" ) {
+-			name = "float";
+-		}
+-
+-		// If a hook was provided get the computed value from there
+-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+-			return ret;
+-
+-		// Otherwise, if a way to get the computed value exists, use that
+-		} else if ( curCSS ) {
+-			return curCSS( elem, name );
+-		}
+-	},
+-
+-	// A method for quickly swapping in/out CSS properties to get correct calculations
+-	swap: function( elem, options, callback ) {
+-		var old = {};
+-
+-		// Remember the old values, and insert the new ones
+-		for ( var name in options ) {
+-			old[ name ] = elem.style[ name ];
+-			elem.style[ name ] = options[ name ];
+-		}
+-
+-		callback.call( elem );
+-
+-		// Revert the old values
+-		for ( name in options ) {
+-			elem.style[ name ] = old[ name ];
+-		}
+-	}
+-});
+-
+-// DEPRECATED, Use jQuery.css() instead
+-jQuery.curCSS = jQuery.css;
+-
+-jQuery.each(["height", "width"], function( i, name ) {
+-	jQuery.cssHooks[ name ] = {
+-		get: function( elem, computed, extra ) {
+-			var val;
+-
+-			if ( computed ) {
+-				if ( elem.offsetWidth !== 0 ) {
+-					return getWH( elem, name, extra );
+-				} else {
+-					jQuery.swap( elem, cssShow, function() {
+-						val = getWH( elem, name, extra );
+-					});
+-				}
+-
+-				return val;
+-			}
+-		},
+-
+-		set: function( elem, value ) {
+-			if ( rnumpx.test( value ) ) {
+-				// ignore negative width and height values #1599
+-				value = parseFloat( value );
+-
+-				if ( value >= 0 ) {
+-					return value + "px";
+-				}
+-
+-			} else {
+-				return value;
+-			}
+-		}
+-	};
+-});
+-
+-if ( !jQuery.support.opacity ) {
+-	jQuery.cssHooks.opacity = {
+-		get: function( elem, computed ) {
+-			// IE uses filters for opacity
+-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
+-				computed ? "1" : "";
+-		},
+-
+-		set: function( elem, value ) {
+-			var style = elem.style,
+-				currentStyle = elem.currentStyle;
+-
+-			// IE has trouble with opacity if it does not have layout
+-			// Force it by setting the zoom level
+-			style.zoom = 1;
+-
+-			// Set the alpha filter to set the opacity
+-			var opacity = jQuery.isNaN( value ) ?
+-				"" :
+-				"alpha(opacity=" + value * 100 + ")",
+-				filter = currentStyle && currentStyle.filter || style.filter || "";
+-
+-			style.filter = ralpha.test( filter ) ?
+-				filter.replace( ralpha, opacity ) :
+-				filter + " " + opacity;
+-		}
+-	};
+-}
+-
+-jQuery(function() {
+-	// This hook cannot be added until DOM ready because the support test
+-	// for it is not run until after DOM ready
+-	if ( !jQuery.support.reliableMarginRight ) {
+-		jQuery.cssHooks.marginRight = {
+-			get: function( elem, computed ) {
+-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-				// Work around by temporarily setting element display to inline-block
+-				var ret;
+-				jQuery.swap( elem, { "display": "inline-block" }, function() {
+-					if ( computed ) {
+-						ret = curCSS( elem, "margin-right", "marginRight" );
+-					} else {
+-						ret = elem.style.marginRight;
+-					}
+-				});
+-				return ret;
+-			}
+-		};
+-	}
+-});
+-
+-if ( document.defaultView && document.defaultView.getComputedStyle ) {
+-	getComputedStyle = function( elem, name ) {
+-		var ret, defaultView, computedStyle;
+-
+-		name = name.replace( rupper, "-$1" ).toLowerCase();
+-
+-		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+-			return undefined;
+-		}
+-
+-		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+-			ret = computedStyle.getPropertyValue( name );
+-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+-				ret = jQuery.style( elem, name );
+-			}
+-		}
+-
+-		return ret;
+-	};
+-}
+-
+-if ( document.documentElement.currentStyle ) {
+-	currentStyle = function( elem, name ) {
+-		var left,
+-			ret = elem.currentStyle && elem.currentStyle[ name ],
+-			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
+-			style = elem.style;
+-
+-		// From the awesome hack by Dean Edwards
+-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+-
+-		// If we're not dealing with a regular pixel number
+-		// but a number that has a weird ending, we need to convert it to pixels
+-		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+-			// Remember the original values
+-			left = style.left;
+-
+-			// Put in the new values to get a computed value out
+-			if ( rsLeft ) {
+-				elem.runtimeStyle.left = elem.currentStyle.left;
+-			}
+-			style.left = name === "fontSize" ? "1em" : (ret || 0);
+-			ret = style.pixelLeft + "px";
+-
+-			// Revert the changed values
+-			style.left = left;
+-			if ( rsLeft ) {
+-				elem.runtimeStyle.left = rsLeft;
+-			}
+-		}
+-
+-		return ret === "" ? "auto" : ret;
+-	};
+-}
+-
+-curCSS = getComputedStyle || currentStyle;
+-
+-function getWH( elem, name, extra ) {
+-
+-	// Start with offset property
+-	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+-		which = name === "width" ? cssWidth : cssHeight;
+-
+-	if ( val > 0 ) {
+-		if ( extra !== "border" ) {
+-			jQuery.each( which, function() {
+-				if ( !extra ) {
+-					val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+-				}
+-				if ( extra === "margin" ) {
+-					val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+-				} else {
+-					val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+-				}
+-			});
+-		}
+-
+-		return val + "px";
+-	}
+-
+-	// Fall back to computed then uncomputed css if necessary
+-	val = curCSS( elem, name, name );
+-	if ( val < 0 || val == null ) {
+-		val = elem.style[ name ] || 0;
+-	}
+-	// Normalize "", auto, and prepare for extra
+-	val = parseFloat( val ) || 0;
+-
+-	// Add padding, border, margin
+-	if ( extra ) {
+-		jQuery.each( which, function() {
+-			val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+-			if ( extra !== "padding" ) {
+-				val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+-			}
+-			if ( extra === "margin" ) {
+-				val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+-			}
+-		});
+-	}
+-
+-	return val + "px";
+-}
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.hidden = function( elem ) {
+-		var width = elem.offsetWidth,
+-			height = elem.offsetHeight;
+-
+-		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+-	};
+-
+-	jQuery.expr.filters.visible = function( elem ) {
+-		return !jQuery.expr.filters.hidden( elem );
+-	};
+-}
+-
+-
+-
+-
+-var r20 = /%20/g,
+-	rbracket = /\[\]$/,
+-	rCRLF = /\r?\n/g,
+-	rhash = /#.*$/,
+-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+-	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+-	// #7653, #8125, #8152: local protocol detection
+-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
+-	rnoContent = /^(?:GET|HEAD)$/,
+-	rprotocol = /^\/\//,
+-	rquery = /\?/,
+-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+-	rselectTextarea = /^(?:select|textarea)/i,
+-	rspacesAjax = /\s+/,
+-	rts = /([?&])_=[^&]*/,
+-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+-
+-	// Keep a copy of the old load method
+-	_load = jQuery.fn.load,
+-
+-	/* Prefilters
+-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+-	 * 2) These are called:
+-	 *    - BEFORE asking for a transport
+-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+-	 * 3) key is the dataType
+-	 * 4) the catchall symbol "*" can be used
+-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+-	 */
+-	prefilters = {},
+-
+-	/* Transports bindings
+-	 * 1) key is the dataType
+-	 * 2) the catchall symbol "*" can be used
+-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+-	 */
+-	transports = {},
+-
+-	// Document location
+-	ajaxLocation,
+-
+-	// Document location segments
+-	ajaxLocParts;
+-
+-// #8138, IE may throw an exception when accessing
+-// a field from window.location if document.domain has been set
+-try {
+-	ajaxLocation = location.href;
+-} catch( e ) {
+-	// Use the href attribute of an A element
+-	// since IE will modify it given document.location
+-	ajaxLocation = document.createElement( "a" );
+-	ajaxLocation.href = "";
+-	ajaxLocation = ajaxLocation.href;
+-}
+-
+-// Segment location into parts
+-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+-
+-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+-function addToPrefiltersOrTransports( structure ) {
+-
+-	// dataTypeExpression is optional and defaults to "*"
+-	return function( dataTypeExpression, func ) {
+-
+-		if ( typeof dataTypeExpression !== "string" ) {
+-			func = dataTypeExpression;
+-			dataTypeExpression = "*";
+-		}
+-
+-		if ( jQuery.isFunction( func ) ) {
+-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+-				i = 0,
+-				length = dataTypes.length,
+-				dataType,
+-				list,
+-				placeBefore;
+-
+-			// For each dataType in the dataTypeExpression
+-			for(; i < length; i++ ) {
+-				dataType = dataTypes[ i ];
+-				// We control if we're asked to add before
+-				// any existing element
+-				placeBefore = /^\+/.test( dataType );
+-				if ( placeBefore ) {
+-					dataType = dataType.substr( 1 ) || "*";
+-				}
+-				list = structure[ dataType ] = structure[ dataType ] || [];
+-				// then we add to the structure accordingly
+-				list[ placeBefore ? "unshift" : "push" ]( func );
+-			}
+-		}
+-	};
+-}
+-
+-// Base inspection function for prefilters and transports
+-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+-		dataType /* internal */, inspected /* internal */ ) {
+-
+-	dataType = dataType || options.dataTypes[ 0 ];
+-	inspected = inspected || {};
+-
+-	inspected[ dataType ] = true;
+-
+-	var list = structure[ dataType ],
+-		i = 0,
+-		length = list ? list.length : 0,
+-		executeOnly = ( structure === prefilters ),
+-		selection;
+-
+-	for(; i < length && ( executeOnly || !selection ); i++ ) {
+-		selection = list[ i ]( options, originalOptions, jqXHR );
+-		// If we got redirected to another dataType
+-		// we try there if executing only and not done already
+-		if ( typeof selection === "string" ) {
+-			if ( !executeOnly || inspected[ selection ] ) {
+-				selection = undefined;
+-			} else {
+-				options.dataTypes.unshift( selection );
+-				selection = inspectPrefiltersOrTransports(
+-						structure, options, originalOptions, jqXHR, selection, inspected );
+-			}
+-		}
+-	}
+-	// If we're only executing or nothing was selected
+-	// we try the catchall dataType if not done already
+-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+-		selection = inspectPrefiltersOrTransports(
+-				structure, options, originalOptions, jqXHR, "*", inspected );
+-	}
+-	// unnecessary when only executing (prefilters)
+-	// but it'll be ignored by the caller in that case
+-	return selection;
+-}
+-
+-jQuery.fn.extend({
+-	load: function( url, params, callback ) {
+-		if ( typeof url !== "string" && _load ) {
+-			return _load.apply( this, arguments );
+-
+-		// Don't do a request if no elements are being requested
+-		} else if ( !this.length ) {
+-			return this;
+-		}
+-
+-		var off = url.indexOf( " " );
+-		if ( off >= 0 ) {
+-			var selector = url.slice( off, url.length );
+-			url = url.slice( 0, off );
+-		}
+-
+-		// Default to a GET request
+-		var type = "GET";
+-
+-		// If the second parameter was provided
+-		if ( params ) {
+-			// If it's a function
+-			if ( jQuery.isFunction( params ) ) {
+-				// We assume that it's the callback
+-				callback = params;
+-				params = undefined;
+-
+-			// Otherwise, build a param string
+-			} else if ( typeof params === "object" ) {
+-				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+-				type = "POST";
+-			}
+-		}
+-
+-		var self = this;
+-
+-		// Request the remote document
+-		jQuery.ajax({
+-			url: url,
+-			type: type,
+-			dataType: "html",
+-			data: params,
+-			// Complete callback (responseText is used internally)
+-			complete: function( jqXHR, status, responseText ) {
+-				// Store the response as specified by the jqXHR object
+-				responseText = jqXHR.responseText;
+-				// If successful, inject the HTML into all the matched elements
+-				if ( jqXHR.isResolved() ) {
+-					// #4825: Get the actual response in case
+-					// a dataFilter is present in ajaxSettings
+-					jqXHR.done(function( r ) {
+-						responseText = r;
+-					});
+-					// See if a selector was specified
+-					self.html( selector ?
+-						// Create a dummy div to hold the results
+-						jQuery("<div>")
+-							// inject the contents of the document in, removing the scripts
+-							// to avoid any 'Permission Denied' errors in IE
+-							.append(responseText.replace(rscript, ""))
+-
+-							// Locate the specified elements
+-							.find(selector) :
+-
+-						// If not, just inject the full result
+-						responseText );
+-				}
+-
+-				if ( callback ) {
+-					self.each( callback, [ responseText, status, jqXHR ] );
+-				}
+-			}
+-		});
+-
+-		return this;
+-	},
+-
+-	serialize: function() {
+-		return jQuery.param( this.serializeArray() );
+-	},
+-
+-	serializeArray: function() {
+-		return this.map(function(){
+-			return this.elements ? jQuery.makeArray( this.elements ) : this;
+-		})
+-		.filter(function(){
+-			return this.name && !this.disabled &&
+-				( this.checked || rselectTextarea.test( this.nodeName ) ||
+-					rinput.test( this.type ) );
+-		})
+-		.map(function( i, elem ){
+-			var val = jQuery( this ).val();
+-
+-			return val == null ?
+-				null :
+-				jQuery.isArray( val ) ?
+-					jQuery.map( val, function( val, i ){
+-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-					}) :
+-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-		}).get();
+-	}
+-});
+-
+-// Attach a bunch of functions for handling common AJAX events
+-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+-	jQuery.fn[ o ] = function( f ){
+-		return this.bind( o, f );
+-	};
+-});
+-
+-jQuery.each( [ "get", "post" ], function( i, method ) {
+-	jQuery[ method ] = function( url, data, callback, type ) {
+-		// shift arguments if data argument was omitted
+-		if ( jQuery.isFunction( data ) ) {
+-			type = type || callback;
+-			callback = data;
+-			data = undefined;
+-		}
+-
+-		return jQuery.ajax({
+-			type: method,
+-			url: url,
+-			data: data,
+-			success: callback,
+-			dataType: type
+-		});
+-	};
+-});
+-
+-jQuery.extend({
+-
+-	getScript: function( url, callback ) {
+-		return jQuery.get( url, undefined, callback, "script" );
+-	},
+-
+-	getJSON: function( url, data, callback ) {
+-		return jQuery.get( url, data, callback, "json" );
+-	},
+-
+-	// Creates a full fledged settings object into target
+-	// with both ajaxSettings and settings fields.
+-	// If target is omitted, writes into ajaxSettings.
+-	ajaxSetup: function ( target, settings ) {
+-		if ( !settings ) {
+-			// Only one parameter, we extend ajaxSettings
+-			settings = target;
+-			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+-		} else {
+-			// target was provided, we extend into it
+-			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
+-		}
+-		// Flatten fields we don't want deep extended
+-		for( var field in { context: 1, url: 1 } ) {
+-			if ( field in settings ) {
+-				target[ field ] = settings[ field ];
+-			} else if( field in jQuery.ajaxSettings ) {
+-				target[ field ] = jQuery.ajaxSettings[ field ];
+-			}
+-		}
+-		return target;
+-	},
+-
+-	ajaxSettings: {
+-		url: ajaxLocation,
+-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+-		global: true,
+-		type: "GET",
+-		contentType: "application/x-www-form-urlencoded",
+-		processData: true,
+-		async: true,
+-		/*
+-		timeout: 0,
+-		data: null,
+-		dataType: null,
+-		username: null,
+-		password: null,
+-		cache: null,
+-		traditional: false,
+-		headers: {},
+-		*/
+-
+-		accepts: {
+-			xml: "application/xml, text/xml",
+-			html: "text/html",
+-			text: "text/plain",
+-			json: "application/json, text/javascript",
+-			"*": "*/*"
+-		},
+-
+-		contents: {
+-			xml: /xml/,
+-			html: /html/,
+-			json: /json/
+-		},
+-
+-		responseFields: {
+-			xml: "responseXML",
+-			text: "responseText"
+-		},
+-
+-		// List of data converters
+-		// 1) key format is "source_type destination_type" (a single space in-between)
+-		// 2) the catchall symbol "*" can be used for source_type
+-		converters: {
+-
+-			// Convert anything to text
+-			"* text": window.String,
+-
+-			// Text to html (true = no transformation)
+-			"text html": true,
+-
+-			// Evaluate text as a json expression
+-			"text json": jQuery.parseJSON,
+-
+-			// Parse text as xml
+-			"text xml": jQuery.parseXML
+-		}
+-	},
+-
+-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+-	ajaxTransport: addToPrefiltersOrTransports( transports ),
+-
+-	// Main method
+-	ajax: function( url, options ) {
+-
+-		// If url is an object, simulate pre-1.5 signature
+-		if ( typeof url === "object" ) {
+-			options = url;
+-			url = undefined;
+-		}
+-
+-		// Force options to be an object
+-		options = options || {};
+-
+-		var // Create the final options object
+-			s = jQuery.ajaxSetup( {}, options ),
+-			// Callbacks context
+-			callbackContext = s.context || s,
+-			// Context for global events
+-			// It's the callbackContext if one was provided in the options
+-			// and if it's a DOM node or a jQuery collection
+-			globalEventContext = callbackContext !== s &&
+-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+-						jQuery( callbackContext ) : jQuery.event,
+-			// Deferreds
+-			deferred = jQuery.Deferred(),
+-			completeDeferred = jQuery._Deferred(),
+-			// Status-dependent callbacks
+-			statusCode = s.statusCode || {},
+-			// ifModified key
+-			ifModifiedKey,
+-			// Headers (they are sent all at once)
+-			requestHeaders = {},
+-			requestHeadersNames = {},
+-			// Response headers
+-			responseHeadersString,
+-			responseHeaders,
+-			// transport
+-			transport,
+-			// timeout handle
+-			timeoutTimer,
+-			// Cross-domain detection vars
+-			parts,
+-			// The jqXHR state
+-			state = 0,
+-			// To know if global events are to be dispatched
+-			fireGlobals,
+-			// Loop variable
+-			i,
+-			// Fake xhr
+-			jqXHR = {
+-
+-				readyState: 0,
+-
+-				// Caches the header
+-				setRequestHeader: function( name, value ) {
+-					if ( !state ) {
+-						var lname = name.toLowerCase();
+-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+-						requestHeaders[ name ] = value;
+-					}
+-					return this;
+-				},
+-
+-				// Raw string
+-				getAllResponseHeaders: function() {
+-					return state === 2 ? responseHeadersString : null;
+-				},
+-
+-				// Builds headers hashtable if needed
+-				getResponseHeader: function( key ) {
+-					var match;
+-					if ( state === 2 ) {
+-						if ( !responseHeaders ) {
+-							responseHeaders = {};
+-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+-							}
+-						}
+-						match = responseHeaders[ key.toLowerCase() ];
+-					}
+-					return match === undefined ? null : match;
+-				},
+-
+-				// Overrides response content-type header
+-				overrideMimeType: function( type ) {
+-					if ( !state ) {
+-						s.mimeType = type;
+-					}
+-					return this;
+-				},
+-
+-				// Cancel the request
+-				abort: function( statusText ) {
+-					statusText = statusText || "abort";
+-					if ( transport ) {
+-						transport.abort( statusText );
+-					}
+-					done( 0, statusText );
+-					return this;
+-				}
+-			};
+-
+-		// Callback for when everything is done
+-		// It is defined here because jslint complains if it is declared
+-		// at the end of the function (which would be more logical and readable)
+-		function done( status, statusText, responses, headers ) {
+-
+-			// Called once
+-			if ( state === 2 ) {
+-				return;
+-			}
+-
+-			// State is "done" now
+-			state = 2;
+-
+-			// Clear timeout if it exists
+-			if ( timeoutTimer ) {
+-				clearTimeout( timeoutTimer );
+-			}
+-
+-			// Dereference transport for early garbage collection
+-			// (no matter how long the jqXHR object will be used)
+-			transport = undefined;
+-
+-			// Cache response headers
+-			responseHeadersString = headers || "";
+-
+-			// Set readyState
+-			jqXHR.readyState = status ? 4 : 0;
+-
+-			var isSuccess,
+-				success,
+-				error,
+-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+-				lastModified,
+-				etag;
+-
+-			// If successful, handle type chaining
+-			if ( status >= 200 && status < 300 || status === 304 ) {
+-
+-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-				if ( s.ifModified ) {
+-
+-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
+-					}
+-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+-						jQuery.etag[ ifModifiedKey ] = etag;
+-					}
+-				}
+-
+-				// If not modified
+-				if ( status === 304 ) {
+-
+-					statusText = "notmodified";
+-					isSuccess = true;
+-
+-				// If we have data
+-				} else {
+-
+-					try {
+-						success = ajaxConvert( s, response );
+-						statusText = "success";
+-						isSuccess = true;
+-					} catch(e) {
+-						// We have a parsererror
+-						statusText = "parsererror";
+-						error = e;
+-					}
+-				}
+-			} else {
+-				// We extract error from statusText
+-				// then normalize statusText and status for non-aborts
+-				error = statusText;
+-				if( !statusText || status ) {
+-					statusText = "error";
+-					if ( status < 0 ) {
+-						status = 0;
+-					}
+-				}
+-			}
+-
+-			// Set data for the fake xhr object
+-			jqXHR.status = status;
+-			jqXHR.statusText = statusText;
+-
+-			// Success/Error
+-			if ( isSuccess ) {
+-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+-			} else {
+-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+-			}
+-
+-			// Status-dependent callbacks
+-			jqXHR.statusCode( statusCode );
+-			statusCode = undefined;
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+-						[ jqXHR, s, isSuccess ? success : error ] );
+-			}
+-
+-			// Complete
+-			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
+-				// Handle the global AJAX counter
+-				if ( !( --jQuery.active ) ) {
+-					jQuery.event.trigger( "ajaxStop" );
+-				}
+-			}
+-		}
+-
+-		// Attach deferreds
+-		deferred.promise( jqXHR );
+-		jqXHR.success = jqXHR.done;
+-		jqXHR.error = jqXHR.fail;
+-		jqXHR.complete = completeDeferred.done;
+-
+-		// Status-dependent callbacks
+-		jqXHR.statusCode = function( map ) {
+-			if ( map ) {
+-				var tmp;
+-				if ( state < 2 ) {
+-					for( tmp in map ) {
+-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+-					}
+-				} else {
+-					tmp = map[ jqXHR.status ];
+-					jqXHR.then( tmp, tmp );
+-				}
+-			}
+-			return this;
+-		};
+-
+-		// Remove hash character (#7531: and string promotion)
+-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+-		// We also use the url parameter if available
+-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+-
+-		// Extract dataTypes list
+-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+-
+-		// Determine if a cross-domain request is in order
+-		if ( s.crossDomain == null ) {
+-			parts = rurl.exec( s.url.toLowerCase() );
+-			s.crossDomain = !!( parts &&
+-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+-			);
+-		}
+-
+-		// Convert data if not already a string
+-		if ( s.data && s.processData && typeof s.data !== "string" ) {
+-			s.data = jQuery.param( s.data, s.traditional );
+-		}
+-
+-		// Apply prefilters
+-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+-
+-		// If request was aborted inside a prefiler, stop there
+-		if ( state === 2 ) {
+-			return false;
+-		}
+-
+-		// We can fire global events as of now if asked to
+-		fireGlobals = s.global;
+-
+-		// Uppercase the type
+-		s.type = s.type.toUpperCase();
+-
+-		// Determine if request has content
+-		s.hasContent = !rnoContent.test( s.type );
+-
+-		// Watch for a new set of requests
+-		if ( fireGlobals && jQuery.active++ === 0 ) {
+-			jQuery.event.trigger( "ajaxStart" );
+-		}
+-
+-		// More options handling for requests with no content
+-		if ( !s.hasContent ) {
+-
+-			// If data is available, append data to url
+-			if ( s.data ) {
+-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+-			}
+-
+-			// Get ifModifiedKey before adding the anti-cache parameter
+-			ifModifiedKey = s.url;
+-
+-			// Add anti-cache in url if needed
+-			if ( s.cache === false ) {
+-
+-				var ts = jQuery.now(),
+-					// try replacing _= if it is there
+-					ret = s.url.replace( rts, "$1_=" + ts );
+-
+-				// if nothing was replaced, add timestamp to the end
+-				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+-			}
+-		}
+-
+-		// Set the correct header, if data is being sent
+-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+-		}
+-
+-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-		if ( s.ifModified ) {
+-			ifModifiedKey = ifModifiedKey || s.url;
+-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
+-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+-			}
+-			if ( jQuery.etag[ ifModifiedKey ] ) {
+-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+-			}
+-		}
+-
+-		// Set the Accepts header for the server, depending on the dataType
+-		jqXHR.setRequestHeader(
+-			"Accept",
+-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
+-				s.accepts[ "*" ]
+-		);
+-
+-		// Check for headers option
+-		for ( i in s.headers ) {
+-			jqXHR.setRequestHeader( i, s.headers[ i ] );
+-		}
+-
+-		// Allow custom headers/mimetypes and early abort
+-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+-				// Abort if not done already
+-				jqXHR.abort();
+-				return false;
+-
+-		}
+-
+-		// Install callbacks on deferreds
+-		for ( i in { success: 1, error: 1, complete: 1 } ) {
+-			jqXHR[ i ]( s[ i ] );
+-		}
+-
+-		// Get transport
+-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+-
+-		// If no transport, we auto-abort
+-		if ( !transport ) {
+-			done( -1, "No Transport" );
+-		} else {
+-			jqXHR.readyState = 1;
+-			// Send global event
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+-			}
+-			// Timeout
+-			if ( s.async && s.timeout > 0 ) {
+-				timeoutTimer = setTimeout( function(){
+-					jqXHR.abort( "timeout" );
+-				}, s.timeout );
+-			}
+-
+-			try {
+-				state = 1;
+-				transport.send( requestHeaders, done );
+-			} catch (e) {
+-				// Propagate exception as error if not done
+-				if ( status < 2 ) {
+-					done( -1, e );
+-				// Simply rethrow otherwise
+-				} else {
+-					jQuery.error( e );
+-				}
+-			}
+-		}
+-
+-		return jqXHR;
+-	},
+-
+-	// Serialize an array of form elements or a set of
+-	// key/values into a query string
+-	param: function( a, traditional ) {
+-		var s = [],
+-			add = function( key, value ) {
+-				// If value is a function, invoke it and return its value
+-				value = jQuery.isFunction( value ) ? value() : value;
+-				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+-			};
+-
+-		// Set traditional to true for jQuery <= 1.3.2 behavior.
+-		if ( traditional === undefined ) {
+-			traditional = jQuery.ajaxSettings.traditional;
+-		}
+-
+-		// If an array was passed in, assume that it is an array of form elements.
+-		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+-			// Serialize the form elements
+-			jQuery.each( a, function() {
+-				add( this.name, this.value );
+-			});
+-
+-		} else {
+-			// If traditional, encode the "old" way (the way 1.3.2 or older
+-			// did it), otherwise encode params recursively.
+-			for ( var prefix in a ) {
+-				buildParams( prefix, a[ prefix ], traditional, add );
+-			}
+-		}
+-
+-		// Return the resulting serialization
+-		return s.join( "&" ).replace( r20, "+" );
+-	}
+-});
+-
+-function buildParams( prefix, obj, traditional, add ) {
+-	if ( jQuery.isArray( obj ) ) {
+-		// Serialize array item.
+-		jQuery.each( obj, function( i, v ) {
+-			if ( traditional || rbracket.test( prefix ) ) {
+-				// Treat each array item as a scalar.
+-				add( prefix, v );
+-
+-			} else {
+-				// If array item is non-scalar (array or object), encode its
+-				// numeric index to resolve deserialization ambiguity issues.
+-				// Note that rack (as of 1.0.0) can't currently deserialize
+-				// nested arrays properly, and attempting to do so may cause
+-				// a server error. Possible fixes are to modify rack's
+-				// deserialization algorithm or to provide an option or flag
+-				// to force array serialization to be shallow.
+-				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+-			}
+-		});
+-
+-	} else if ( !traditional && obj != null && typeof obj === "object" ) {
+-		// Serialize object item.
+-		for ( var name in obj ) {
+-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+-		}
+-
+-	} else {
+-		// Serialize scalar item.
+-		add( prefix, obj );
+-	}
+-}
+-
+-// This is still on the jQuery object... for now
+-// Want to move this to jQuery.ajax some day
+-jQuery.extend({
+-
+-	// Counter for holding the number of active queries
+-	active: 0,
+-
+-	// Last-Modified header cache for next request
+-	lastModified: {},
+-	etag: {}
+-
+-});
+-
+-/* Handles responses to an ajax request:
+- * - sets all responseXXX fields accordingly
+- * - finds the right dataType (mediates between content-type and expected dataType)
+- * - returns the corresponding response
+- */
+-function ajaxHandleResponses( s, jqXHR, responses ) {
+-
+-	var contents = s.contents,
+-		dataTypes = s.dataTypes,
+-		responseFields = s.responseFields,
+-		ct,
+-		type,
+-		finalDataType,
+-		firstDataType;
+-
+-	// Fill responseXXX fields
+-	for( type in responseFields ) {
+-		if ( type in responses ) {
+-			jqXHR[ responseFields[type] ] = responses[ type ];
+-		}
+-	}
+-
+-	// Remove auto dataType and get content-type in the process
+-	while( dataTypes[ 0 ] === "*" ) {
+-		dataTypes.shift();
+-		if ( ct === undefined ) {
+-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+-		}
+-	}
+-
+-	// Check if we're dealing with a known content-type
+-	if ( ct ) {
+-		for ( type in contents ) {
+-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+-				dataTypes.unshift( type );
+-				break;
+-			}
+-		}
+-	}
+-
+-	// Check to see if we have a response for the expected dataType
+-	if ( dataTypes[ 0 ] in responses ) {
+-		finalDataType = dataTypes[ 0 ];
+-	} else {
+-		// Try convertible dataTypes
+-		for ( type in responses ) {
+-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+-				finalDataType = type;
+-				break;
+-			}
+-			if ( !firstDataType ) {
+-				firstDataType = type;
+-			}
+-		}
+-		// Or just use first one
+-		finalDataType = finalDataType || firstDataType;
+-	}
+-
+-	// If we found a dataType
+-	// We add the dataType to the list if needed
+-	// and return the corresponding response
+-	if ( finalDataType ) {
+-		if ( finalDataType !== dataTypes[ 0 ] ) {
+-			dataTypes.unshift( finalDataType );
+-		}
+-		return responses[ finalDataType ];
+-	}
+-}
+-
+-// Chain conversions given the request and the original response
+-function ajaxConvert( s, response ) {
+-
+-	// Apply the dataFilter if provided
+-	if ( s.dataFilter ) {
+-		response = s.dataFilter( response, s.dataType );
+-	}
+-
+-	var dataTypes = s.dataTypes,
+-		converters = {},
+-		i,
+-		key,
+-		length = dataTypes.length,
+-		tmp,
+-		// Current and previous dataTypes
+-		current = dataTypes[ 0 ],
+-		prev,
+-		// Conversion expression
+-		conversion,
+-		// Conversion function
+-		conv,
+-		// Conversion functions (transitive conversion)
+-		conv1,
+-		conv2;
+-
+-	// For each dataType in the chain
+-	for( i = 1; i < length; i++ ) {
+-
+-		// Create converters map
+-		// with lowercased keys
+-		if ( i === 1 ) {
+-			for( key in s.converters ) {
+-				if( typeof key === "string" ) {
+-					converters[ key.toLowerCase() ] = s.converters[ key ];
+-				}
+-			}
+-		}
+-
+-		// Get the dataTypes
+-		prev = current;
+-		current = dataTypes[ i ];
+-
+-		// If current is auto dataType, update it to prev
+-		if( current === "*" ) {
+-			current = prev;
+-		// If no auto and dataTypes are actually different
+-		} else if ( prev !== "*" && prev !== current ) {
+-
+-			// Get the converter
+-			conversion = prev + " " + current;
+-			conv = converters[ conversion ] || converters[ "* " + current ];
+-
+-			// If there is no direct converter, search transitively
+-			if ( !conv ) {
+-				conv2 = undefined;
+-				for( conv1 in converters ) {
+-					tmp = conv1.split( " " );
+-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+-						conv2 = converters[ tmp[1] + " " + current ];
+-						if ( conv2 ) {
+-							conv1 = converters[ conv1 ];
+-							if ( conv1 === true ) {
+-								conv = conv2;
+-							} else if ( conv2 === true ) {
+-								conv = conv1;
+-							}
+-							break;
+-						}
+-					}
+-				}
+-			}
+-			// If we found no converter, dispatch an error
+-			if ( !( conv || conv2 ) ) {
+-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+-			}
+-			// If found converter is not an equivalence
+-			if ( conv !== true ) {
+-				// Convert with 1 or 2 converters accordingly
+-				response = conv ? conv( response ) : conv2( conv1(response) );
+-			}
+-		}
+-	}
+-	return response;
+-}
+-
+-
+-
+-
+-var jsc = jQuery.now(),
+-	jsre = /(\=)\?(&|$)|\?\?/i;
+-
+-// Default jsonp settings
+-jQuery.ajaxSetup({
+-	jsonp: "callback",
+-	jsonpCallback: function() {
+-		return jQuery.expando + "_" + ( jsc++ );
+-	}
+-});
+-
+-// Detect, normalize options and install callbacks for jsonp requests
+-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+-
+-	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+-		( typeof s.data === "string" );
+-
+-	if ( s.dataTypes[ 0 ] === "jsonp" ||
+-		s.jsonp !== false && ( jsre.test( s.url ) ||
+-				inspectData && jsre.test( s.data ) ) ) {
+-
+-		var responseContainer,
+-			jsonpCallback = s.jsonpCallback =
+-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+-			previous = window[ jsonpCallback ],
+-			url = s.url,
+-			data = s.data,
+-			replace = "$1" + jsonpCallback + "$2";
+-
+-		if ( s.jsonp !== false ) {
+-			url = url.replace( jsre, replace );
+-			if ( s.url === url ) {
+-				if ( inspectData ) {
+-					data = data.replace( jsre, replace );
+-				}
+-				if ( s.data === data ) {
+-					// Add callback manually
+-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+-				}
+-			}
+-		}
+-
+-		s.url = url;
+-		s.data = data;
+-
+-		// Install callback
+-		window[ jsonpCallback ] = function( response ) {
+-			responseContainer = [ response ];
+-		};
+-
+-		// Clean-up function
+-		jqXHR.always(function() {
+-			// Set callback back to previous value
+-			window[ jsonpCallback ] = previous;
+-			// Call if it was a function and we have a response
+-			if ( responseContainer && jQuery.isFunction( previous ) ) {
+-				window[ jsonpCallback ]( responseContainer[ 0 ] );
+-			}
+-		});
+-
+-		// Use data converter to retrieve json after script execution
+-		s.converters["script json"] = function() {
+-			if ( !responseContainer ) {
+-				jQuery.error( jsonpCallback + " was not called" );
+-			}
+-			return responseContainer[ 0 ];
+-		};
+-
+-		// force json dataType
+-		s.dataTypes[ 0 ] = "json";
+-
+-		// Delegate to script
+-		return "script";
+-	}
+-});
+-
+-
+-
+-
+-// Install script dataType
+-jQuery.ajaxSetup({
+-	accepts: {
+-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+-	},
+-	contents: {
+-		script: /javascript|ecmascript/
+-	},
+-	converters: {
+-		"text script": function( text ) {
+-			jQuery.globalEval( text );
+-			return text;
+-		}
+-	}
+-});
+-
+-// Handle cache's special case and global
+-jQuery.ajaxPrefilter( "script", function( s ) {
+-	if ( s.cache === undefined ) {
+-		s.cache = false;
+-	}
+-	if ( s.crossDomain ) {
+-		s.type = "GET";
+-		s.global = false;
+-	}
+-});
+-
+-// Bind script tag hack transport
+-jQuery.ajaxTransport( "script", function(s) {
+-
+-	// This transport only deals with cross domain requests
+-	if ( s.crossDomain ) {
+-
+-		var script,
+-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+-
+-		return {
+-
+-			send: function( _, callback ) {
+-
+-				script = document.createElement( "script" );
+-
+-				script.async = "async";
+-
+-				if ( s.scriptCharset ) {
+-					script.charset = s.scriptCharset;
+-				}
+-
+-				script.src = s.url;
+-
+-				// Attach handlers for all browsers
+-				script.onload = script.onreadystatechange = function( _, isAbort ) {
+-
+-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+-
+-						// Handle memory leak in IE
+-						script.onload = script.onreadystatechange = null;
+-
+-						// Remove the script
+-						if ( head && script.parentNode ) {
+-							head.removeChild( script );
+-						}
+-
+-						// Dereference the script
+-						script = undefined;
+-
+-						// Callback if not abort
+-						if ( !isAbort ) {
+-							callback( 200, "success" );
+-						}
+-					}
+-				};
+-				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+-				// This arises when a base node is used (#2709 and #4378).
+-				head.insertBefore( script, head.firstChild );
+-			},
+-
+-			abort: function() {
+-				if ( script ) {
+-					script.onload( 0, 1 );
+-				}
+-			}
+-		};
+-	}
+-});
+-
+-
+-
+-
+-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
+-		// Abort all pending requests
+-		for ( var key in xhrCallbacks ) {
+-			xhrCallbacks[ key ]( 0, 1 );
+-		}
+-	} : false,
+-	xhrId = 0,
+-	xhrCallbacks;
+-
+-// Functions to create xhrs
+-function createStandardXHR() {
+-	try {
+-		return new window.XMLHttpRequest();
+-	} catch( e ) {}
+-}
+-
+-function createActiveXHR() {
+-	try {
+-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+-	} catch( e ) {}
+-}
+-
+-// Create the request object
+-// (This is still attached to ajaxSettings for backward compatibility)
+-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+-	/* Microsoft failed to properly
+-	 * implement the XMLHttpRequest in IE7 (can't request local files),
+-	 * so we use the ActiveXObject when it is available
+-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+-	 * we need a fallback.
+-	 */
+-	function() {
+-		return !this.isLocal && createStandardXHR() || createActiveXHR();
+-	} :
+-	// For all other browsers, use the standard XMLHttpRequest object
+-	createStandardXHR;
+-
+-// Determine support properties
+-(function( xhr ) {
+-	jQuery.extend( jQuery.support, {
+-		ajax: !!xhr,
+-		cors: !!xhr && ( "withCredentials" in xhr )
+-	});
+-})( jQuery.ajaxSettings.xhr() );
+-
+-// Create transport if the browser can provide an xhr
+-if ( jQuery.support.ajax ) {
+-
+-	jQuery.ajaxTransport(function( s ) {
+-		// Cross domain only allowed if supported through XMLHttpRequest
+-		if ( !s.crossDomain || jQuery.support.cors ) {
+-
+-			var callback;
+-
+-			return {
+-				send: function( headers, complete ) {
+-
+-					// Get a new xhr
+-					var xhr = s.xhr(),
+-						handle,
+-						i;
+-
+-					// Open the socket
+-					// Passing null username, generates a login popup on Opera (#2865)
+-					if ( s.username ) {
+-						xhr.open( s.type, s.url, s.async, s.username, s.password );
+-					} else {
+-						xhr.open( s.type, s.url, s.async );
+-					}
+-
+-					// Apply custom fields if provided
+-					if ( s.xhrFields ) {
+-						for ( i in s.xhrFields ) {
+-							xhr[ i ] = s.xhrFields[ i ];
+-						}
+-					}
+-
+-					// Override mime type if needed
+-					if ( s.mimeType && xhr.overrideMimeType ) {
+-						xhr.overrideMimeType( s.mimeType );
+-					}
+-
+-					// X-Requested-With header
+-					// For cross-domain requests, seeing as conditions for a preflight are
+-					// akin to a jigsaw puzzle, we simply never set it to be sure.
+-					// (it can always be set on a per-request basis or even using ajaxSetup)
+-					// For same-domain requests, won't change header if already provided.
+-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+-					}
+-
+-					// Need an extra try/catch for cross domain requests in Firefox 3
+-					try {
+-						for ( i in headers ) {
+-							xhr.setRequestHeader( i, headers[ i ] );
+-						}
+-					} catch( _ ) {}
+-
+-					// Do send the request
+-					// This may raise an exception which is actually
+-					// handled in jQuery.ajax (so no try/catch here)
+-					xhr.send( ( s.hasContent && s.data ) || null );
+-
+-					// Listener
+-					callback = function( _, isAbort ) {
+-
+-						var status,
+-							statusText,
+-							responseHeaders,
+-							responses,
+-							xml;
+-
+-						// Firefox throws exceptions when accessing properties
+-						// of an xhr when a network error occured
+-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+-						try {
+-
+-							// Was never called and is aborted or complete
+-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+-
+-								// Only called once
+-								callback = undefined;
+-
+-								// Do not keep as active anymore
+-								if ( handle ) {
+-									xhr.onreadystatechange = jQuery.noop;
+-									if ( xhrOnUnloadAbort ) {
+-										delete xhrCallbacks[ handle ];
+-									}
+-								}
+-
+-								// If it's an abort
+-								if ( isAbort ) {
+-									// Abort it manually if needed
+-									if ( xhr.readyState !== 4 ) {
+-										xhr.abort();
+-									}
+-								} else {
+-									status = xhr.status;
+-									responseHeaders = xhr.getAllResponseHeaders();
+-									responses = {};
+-									xml = xhr.responseXML;
+-
+-									// Construct response list
+-									if ( xml && xml.documentElement /* #4958 */ ) {
+-										responses.xml = xml;
+-									}
+-									responses.text = xhr.responseText;
+-
+-									// Firefox throws an exception when accessing
+-									// statusText for faulty cross-domain requests
+-									try {
+-										statusText = xhr.statusText;
+-									} catch( e ) {
+-										// We normalize with Webkit giving an empty statusText
+-										statusText = "";
+-									}
+-
+-									// Filter status for non standard behaviors
+-
+-									// If the request is local and we have data: assume a success
+-									// (success with no data won't get notified, that's the best we
+-									// can do given current implementations)
+-									if ( !status && s.isLocal && !s.crossDomain ) {
+-										status = responses.text ? 200 : 404;
+-									// IE - #1450: sometimes returns 1223 when it should be 204
+-									} else if ( status === 1223 ) {
+-										status = 204;
+-									}
+-								}
+-							}
+-						} catch( firefoxAccessException ) {
+-							if ( !isAbort ) {
+-								complete( -1, firefoxAccessException );
+-							}
+-						}
+-
+-						// Call complete if needed
+-						if ( responses ) {
+-							complete( status, statusText, responses, responseHeaders );
+-						}
+-					};
+-
+-					// if we're in sync mode or it's in cache
+-					// and has been retrieved directly (IE6 & IE7)
+-					// we need to manually fire the callback
+-					if ( !s.async || xhr.readyState === 4 ) {
+-						callback();
+-					} else {
+-						handle = ++xhrId;
+-						if ( xhrOnUnloadAbort ) {
+-							// Create the active xhrs callbacks list if needed
+-							// and attach the unload handler
+-							if ( !xhrCallbacks ) {
+-								xhrCallbacks = {};
+-								jQuery( window ).unload( xhrOnUnloadAbort );
+-							}
+-							// Add to list of active xhrs callbacks
+-							xhrCallbacks[ handle ] = callback;
+-						}
+-						xhr.onreadystatechange = callback;
+-					}
+-				},
+-
+-				abort: function() {
+-					if ( callback ) {
+-						callback(0,1);
+-					}
+-				}
+-			};
+-		}
+-	});
+-}
+-
+-
+-
+-
+-var elemdisplay = {},
+-	iframe, iframeDoc,
+-	rfxtypes = /^(?:toggle|show|hide)$/,
+-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+-	timerId,
+-	fxAttrs = [
+-		// height animations
+-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+-		// width animations
+-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+-		// opacity animations
+-		[ "opacity" ]
+-	],
+-	fxNow,
+-	requestAnimationFrame = window.webkitRequestAnimationFrame ||
+-		window.mozRequestAnimationFrame ||
+-		window.oRequestAnimationFrame;
+-
+-jQuery.fn.extend({
+-	show: function( speed, easing, callback ) {
+-		var elem, display;
+-
+-		if ( speed || speed === 0 ) {
+-			return this.animate( genFx("show", 3), speed, easing, callback);
+-
+-		} else {
+-			for ( var i = 0, j = this.length; i < j; i++ ) {
+-				elem = this[i];
+-
+-				if ( elem.style ) {
+-					display = elem.style.display;
+-
+-					// Reset the inline display of this element to learn if it is
+-					// being hidden by cascaded rules or not
+-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+-						display = elem.style.display = "";
+-					}
+-
+-					// Set elements which have been overridden with display: none
+-					// in a stylesheet to whatever the default browser style is
+-					// for such an element
+-					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+-						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+-					}
+-				}
+-			}
+-
+-			// Set the display of most of the elements in a second loop
+-			// to avoid the constant reflow
+-			for ( i = 0; i < j; i++ ) {
+-				elem = this[i];
+-
+-				if ( elem.style ) {
+-					display = elem.style.display;
+-
+-					if ( display === "" || display === "none" ) {
+-						elem.style.display = jQuery._data(elem, "olddisplay") || "";
+-					}
+-				}
+-			}
+-
+-			return this;
+-		}
+-	},
+-
+-	hide: function( speed, easing, callback ) {
+-		if ( speed || speed === 0 ) {
+-			return this.animate( genFx("hide", 3), speed, easing, callback);
+-
+-		} else {
+-			for ( var i = 0, j = this.length; i < j; i++ ) {
+-				if ( this[i].style ) {
+-					var display = jQuery.css( this[i], "display" );
+-
+-					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+-						jQuery._data( this[i], "olddisplay", display );
+-					}
+-				}
+-			}
+-
+-			// Set the display of the elements in a second loop
+-			// to avoid the constant reflow
+-			for ( i = 0; i < j; i++ ) {
+-				if ( this[i].style ) {
+-					this[i].style.display = "none";
+-				}
+-			}
+-
+-			return this;
+-		}
+-	},
+-
+-	// Save the old toggle function
+-	_toggle: jQuery.fn.toggle,
+-
+-	toggle: function( fn, fn2, callback ) {
+-		var bool = typeof fn === "boolean";
+-
+-		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+-			this._toggle.apply( this, arguments );
+-
+-		} else if ( fn == null || bool ) {
+-			this.each(function() {
+-				var state = bool ? fn : jQuery(this).is(":hidden");
+-				jQuery(this)[ state ? "show" : "hide" ]();
+-			});
+-
+-		} else {
+-			this.animate(genFx("toggle", 3), fn, fn2, callback);
+-		}
+-
+-		return this;
+-	},
+-
+-	fadeTo: function( speed, to, easing, callback ) {
+-		return this.filter(":hidden").css("opacity", 0).show().end()
+-					.animate({opacity: to}, speed, easing, callback);
+-	},
+-
+-	animate: function( prop, speed, easing, callback ) {
+-		var optall = jQuery.speed(speed, easing, callback);
+-
+-		if ( jQuery.isEmptyObject( prop ) ) {
+-			return this.each( optall.complete, [ false ] );
+-		}
+-
+-		// Do not change referenced properties as per-property easing will be lost
+-		prop = jQuery.extend( {}, prop );
+-
+-		return this[ optall.queue === false ? "each" : "queue" ](function() {
+-			// XXX 'this' does not always have a nodeName when running the
+-			// test suite
+-
+-			if ( optall.queue === false ) {
+-				jQuery._mark( this );
+-			}
+-
+-			var opt = jQuery.extend( {}, optall ),
+-				isElement = this.nodeType === 1,
+-				hidden = isElement && jQuery(this).is(":hidden"),
+-				name, val, p,
+-				display, e,
+-				parts, start, end, unit;
+-
+-			// will store per property easing and be used to determine when an animation is complete
+-			opt.animatedProperties = {};
+-
+-			for ( p in prop ) {
+-
+-				// property name normalization
+-				name = jQuery.camelCase( p );
+-				if ( p !== name ) {
+-					prop[ name ] = prop[ p ];
+-					delete prop[ p ];
+-				}
+-
+-				val = prop[ name ];
+-
+-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+-				if ( jQuery.isArray( val ) ) {
+-					opt.animatedProperties[ name ] = val[ 1 ];
+-					val = prop[ name ] = val[ 0 ];
+-				} else {
+-					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+-				}
+-
+-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
+-					return opt.complete.call( this );
+-				}
+-
+-				if ( isElement && ( name === "height" || name === "width" ) ) {
+-					// Make sure that nothing sneaks out
+-					// Record all 3 overflow attributes because IE does not
+-					// change the overflow attribute when overflowX and
+-					// overflowY are set to the same value
+-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+-
+-					// Set display property to inline-block for height/width
+-					// animations on inline elements that are having width/height
+-					// animated
+-					if ( jQuery.css( this, "display" ) === "inline" &&
+-							jQuery.css( this, "float" ) === "none" ) {
+-						if ( !jQuery.support.inlineBlockNeedsLayout ) {
+-							this.style.display = "inline-block";
+-
+-						} else {
+-							display = defaultDisplay( this.nodeName );
+-
+-							// inline-level elements accept inline-block;
+-							// block-level elements need to be inline with layout
+-							if ( display === "inline" ) {
+-								this.style.display = "inline-block";
+-
+-							} else {
+-								this.style.display = "inline";
+-								this.style.zoom = 1;
+-							}
+-						}
+-					}
+-				}
+-			}
+-
+-			if ( opt.overflow != null ) {
+-				this.style.overflow = "hidden";
+-			}
+-
+-			for ( p in prop ) {
+-				e = new jQuery.fx( this, opt, p );
+-				val = prop[ p ];
+-
+-				if ( rfxtypes.test(val) ) {
+-					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
+-
+-				} else {
+-					parts = rfxnum.exec( val );
+-					start = e.cur();
+-
+-					if ( parts ) {
+-						end = parseFloat( parts[2] );
+-						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+-
+-						// We need to compute starting value
+-						if ( unit !== "px" ) {
+-							jQuery.style( this, p, (end || 1) + unit);
+-							start = ((end || 1) / e.cur()) * start;
+-							jQuery.style( this, p, start + unit);
+-						}
+-
+-						// If a +=/-= token was provided, we're doing a relative animation
+-						if ( parts[1] ) {
+-							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+-						}
+-
+-						e.custom( start, end, unit );
+-
+-					} else {
+-						e.custom( start, val, "" );
+-					}
+-				}
+-			}
+-
+-			// For JS strict compliance
+-			return true;
+-		});
+-	},
+-
+-	stop: function( clearQueue, gotoEnd ) {
+-		if ( clearQueue ) {
+-			this.queue([]);
+-		}
+-
+-		this.each(function() {
+-			var timers = jQuery.timers,
+-				i = timers.length;
+-			// clear marker counters if we know they won't be
+-			if ( !gotoEnd ) {
+-				jQuery._unmark( true, this );
+-			}
+-			while ( i-- ) {
+-				if ( timers[i].elem === this ) {
+-					if (gotoEnd) {
+-						// force the next step to be the last
+-						timers[i](true);
+-					}
+-
+-					timers.splice(i, 1);
+-				}
+-			}
+-		});
+-
+-		// start the next in the queue if the last step wasn't forced
+-		if ( !gotoEnd ) {
+-			this.dequeue();
+-		}
+-
+-		return this;
+-	}
+-
+-});
+-
+-// Animations created synchronously will run synchronously
+-function createFxNow() {
+-	setTimeout( clearFxNow, 0 );
+-	return ( fxNow = jQuery.now() );
+-}
+-
+-function clearFxNow() {
+-	fxNow = undefined;
+-}
+-
+-// Generate parameters to create a standard animation
+-function genFx( type, num ) {
+-	var obj = {};
+-
+-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+-		obj[ this ] = type;
+-	});
+-
+-	return obj;
+-}
+-
+-// Generate shortcuts for custom animations
+-jQuery.each({
+-	slideDown: genFx("show", 1),
+-	slideUp: genFx("hide", 1),
+-	slideToggle: genFx("toggle", 1),
+-	fadeIn: { opacity: "show" },
+-	fadeOut: { opacity: "hide" },
+-	fadeToggle: { opacity: "toggle" }
+-}, function( name, props ) {
+-	jQuery.fn[ name ] = function( speed, easing, callback ) {
+-		return this.animate( props, speed, easing, callback );
+-	};
+-});
+-
+-jQuery.extend({
+-	speed: function( speed, easing, fn ) {
+-		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+-			complete: fn || !fn && easing ||
+-				jQuery.isFunction( speed ) && speed,
+-			duration: speed,
+-			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+-		};
+-
+-		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+-
+-		// Queueing
+-		opt.old = opt.complete;
+-		opt.complete = function( noUnmark ) {
+-			if ( jQuery.isFunction( opt.old ) ) {
+-				opt.old.call( this );
+-			}
+-
+-			if ( opt.queue !== false ) {
+-				jQuery.dequeue( this );
+-			} else if ( noUnmark !== false ) {
+-				jQuery._unmark( this );
+-			}
+-		};
+-
+-		return opt;
+-	},
+-
+-	easing: {
+-		linear: function( p, n, firstNum, diff ) {
+-			return firstNum + diff * p;
+-		},
+-		swing: function( p, n, firstNum, diff ) {
+-			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+-		}
+-	},
+-
+-	timers: [],
+-
+-	fx: function( elem, options, prop ) {
+-		this.options = options;
+-		this.elem = elem;
+-		this.prop = prop;
+-
+-		options.orig = options.orig || {};
+-	}
+-
+-});
+-
+-jQuery.fx.prototype = {
+-	// Simple function for setting a style value
+-	update: function() {
+-		if ( this.options.step ) {
+-			this.options.step.call( this.elem, this.now, this );
+-		}
+-
+-		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+-	},
+-
+-	// Get the current size
+-	cur: function() {
+-		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+-			return this.elem[ this.prop ];
+-		}
+-
+-		var parsed,
+-			r = jQuery.css( this.elem, this.prop );
+-		// Empty strings, null, undefined and "auto" are converted to 0,
+-		// complex values such as "rotate(1rad)" are returned as is,
+-		// simple values such as "10px" are parsed to Float.
+-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+-	},
+-
+-	// Start an animation from one number to another
+-	custom: function( from, to, unit ) {
+-		var self = this,
+-			fx = jQuery.fx,
+-			raf;
+-
+-		this.startTime = fxNow || createFxNow();
+-		this.start = from;
+-		this.end = to;
+-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+-		this.now = this.start;
+-		this.pos = this.state = 0;
+-
+-		function t( gotoEnd ) {
+-			return self.step(gotoEnd);
+-		}
+-
+-		t.elem = this.elem;
+-
+-		if ( t() && jQuery.timers.push(t) && !timerId ) {
+-			// Use requestAnimationFrame instead of setInterval if available
+-			if ( requestAnimationFrame ) {
+-				timerId = true;
+-				raf = function() {
+-					// When timerId gets set to null at any point, this stops
+-					if ( timerId ) {
+-						requestAnimationFrame( raf );
+-						fx.tick();
+-					}
+-				};
+-				requestAnimationFrame( raf );
+-			} else {
+-				timerId = setInterval( fx.tick, fx.interval );
+-			}
+-		}
+-	},
+-
+-	// Simple 'show' function
+-	show: function() {
+-		// Remember where we started, so that we can go back to it later
+-		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+-		this.options.show = true;
+-
+-		// Begin the animation
+-		// Make sure that we start at a small width/height to avoid any
+-		// flash of content
+-		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+-
+-		// Start by showing the element
+-		jQuery( this.elem ).show();
+-	},
+-
+-	// Simple 'hide' function
+-	hide: function() {
+-		// Remember where we started, so that we can go back to it later
+-		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+-		this.options.hide = true;
+-
+-		// Begin the animation
+-		this.custom(this.cur(), 0);
+-	},
+-
+-	// Each step of an animation
+-	step: function( gotoEnd ) {
+-		var t = fxNow || createFxNow(),
+-			done = true,
+-			elem = this.elem,
+-			options = this.options,
+-			i, n;
+-
+-		if ( gotoEnd || t >= options.duration + this.startTime ) {
+-			this.now = this.end;
+-			this.pos = this.state = 1;
+-			this.update();
+-
+-			options.animatedProperties[ this.prop ] = true;
+-
+-			for ( i in options.animatedProperties ) {
+-				if ( options.animatedProperties[i] !== true ) {
+-					done = false;
+-				}
+-			}
+-
+-			if ( done ) {
+-				// Reset the overflow
+-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+-
+-					jQuery.each( [ "", "X", "Y" ], function (index, value) {
+-						elem.style[ "overflow" + value ] = options.overflow[index];
+-					});
+-				}
+-
+-				// Hide the element if the "hide" operation was done
+-				if ( options.hide ) {
+-					jQuery(elem).hide();
+-				}
+-
+-				// Reset the properties, if the item has been hidden or shown
+-				if ( options.hide || options.show ) {
+-					for ( var p in options.animatedProperties ) {
+-						jQuery.style( elem, p, options.orig[p] );
+-					}
+-				}
+-
+-				// Execute the complete function
+-				options.complete.call( elem );
+-			}
+-
+-			return false;
+-
+-		} else {
+-			// classical easing cannot be used with an Infinity duration
+-			if ( options.duration == Infinity ) {
+-				this.now = t;
+-			} else {
+-				n = t - this.startTime;
+-				this.state = n / options.duration;
+-
+-				// Perform the easing function, defaults to swing
+-				this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
+-				this.now = this.start + ((this.end - this.start) * this.pos);
+-			}
+-			// Perform the next step of the animation
+-			this.update();
+-		}
+-
+-		return true;
+-	}
+-};
+-
+-jQuery.extend( jQuery.fx, {
+-	tick: function() {
+-		for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
+-			if ( !timers[i]() ) {
+-				timers.splice(i--, 1);
+-			}
+-		}
+-
+-		if ( !timers.length ) {
+-			jQuery.fx.stop();
+-		}
+-	},
+-
+-	interval: 13,
+-
+-	stop: function() {
+-		clearInterval( timerId );
+-		timerId = null;
+-	},
+-
+-	speeds: {
+-		slow: 600,
+-		fast: 200,
+-		// Default speed
+-		_default: 400
+-	},
+-
+-	step: {
+-		opacity: function( fx ) {
+-			jQuery.style( fx.elem, "opacity", fx.now );
+-		},
+-
+-		_default: function( fx ) {
+-			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+-				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+-			} else {
+-				fx.elem[ fx.prop ] = fx.now;
+-			}
+-		}
+-	}
+-});
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.animated = function( elem ) {
+-		return jQuery.grep(jQuery.timers, function( fn ) {
+-			return elem === fn.elem;
+-		}).length;
+-	};
+-}
+-
+-// Try to restore the default display value of an element
+-function defaultDisplay( nodeName ) {
+-
+-	if ( !elemdisplay[ nodeName ] ) {
+-
+-		var body = document.body,
+-			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+-			display = elem.css( "display" );
+-
+-		elem.remove();
+-
+-		// If the simple way fails,
+-		// get element's real default display by attaching it to a temp iframe
+-		if ( display === "none" || display === "" ) {
+-			// No iframe to use yet, so create it
+-			if ( !iframe ) {
+-				iframe = document.createElement( "iframe" );
+-				iframe.frameBorder = iframe.width = iframe.height = 0;
+-			}
+-
+-			body.appendChild( iframe );
+-
+-			// Create a cacheable copy of the iframe document on first call.
+-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+-			// document to it; WebKit & Firefox won't allow reusing the iframe document.
+-			if ( !iframeDoc || !iframe.createElement ) {
+-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+-				iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
+-				iframeDoc.close();
+-			}
+-
+-			elem = iframeDoc.createElement( nodeName );
+-
+-			iframeDoc.body.appendChild( elem );
+-
+-			display = jQuery.css( elem, "display" );
+-
+-			body.removeChild( iframe );
+-		}
+-
+-		// Store the correct default display
+-		elemdisplay[ nodeName ] = display;
+-	}
+-
+-	return elemdisplay[ nodeName ];
+-}
+-
+-
+-
+-
+-var rtable = /^t(?:able|d|h)$/i,
+-	rroot = /^(?:body|html)$/i;
+-
+-if ( "getBoundingClientRect" in document.documentElement ) {
+-	jQuery.fn.offset = function( options ) {
+-		var elem = this[0], box;
+-
+-		if ( options ) {
+-			return this.each(function( i ) {
+-				jQuery.offset.setOffset( this, options, i );
+-			});
+-		}
+-
+-		if ( !elem || !elem.ownerDocument ) {
+-			return null;
+-		}
+-
+-		if ( elem === elem.ownerDocument.body ) {
+-			return jQuery.offset.bodyOffset( elem );
+-		}
+-
+-		try {
+-			box = elem.getBoundingClientRect();
+-		} catch(e) {}
+-
+-		var doc = elem.ownerDocument,
+-			docElem = doc.documentElement;
+-
+-		// Make sure we're not dealing with a disconnected DOM node
+-		if ( !box || !jQuery.contains( docElem, elem ) ) {
+-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+-		}
+-
+-		var body = doc.body,
+-			win = getWindow(doc),
+-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
+-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
+-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+-			top  = box.top  + scrollTop  - clientTop,
+-			left = box.left + scrollLeft - clientLeft;
+-
+-		return { top: top, left: left };
+-	};
+-
+-} else {
+-	jQuery.fn.offset = function( options ) {
+-		var elem = this[0];
+-
+-		if ( options ) {
+-			return this.each(function( i ) {
+-				jQuery.offset.setOffset( this, options, i );
+-			});
+-		}
+-
+-		if ( !elem || !elem.ownerDocument ) {
+-			return null;
+-		}
+-
+-		if ( elem === elem.ownerDocument.body ) {
+-			return jQuery.offset.bodyOffset( elem );
+-		}
+-
+-		jQuery.offset.initialize();
+-
+-		var computedStyle,
+-			offsetParent = elem.offsetParent,
+-			prevOffsetParent = elem,
+-			doc = elem.ownerDocument,
+-			docElem = doc.documentElement,
+-			body = doc.body,
+-			defaultView = doc.defaultView,
+-			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+-			top = elem.offsetTop,
+-			left = elem.offsetLeft;
+-
+-		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+-			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+-				break;
+-			}
+-
+-			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+-			top  -= elem.scrollTop;
+-			left -= elem.scrollLeft;
+-
+-			if ( elem === offsetParent ) {
+-				top  += elem.offsetTop;
+-				left += elem.offsetLeft;
+-
+-				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+-					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+-					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+-				}
+-
+-				prevOffsetParent = offsetParent;
+-				offsetParent = elem.offsetParent;
+-			}
+-
+-			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+-				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+-				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+-			}
+-
+-			prevComputedStyle = computedStyle;
+-		}
+-
+-		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+-			top  += body.offsetTop;
+-			left += body.offsetLeft;
+-		}
+-
+-		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+-			top  += Math.max( docElem.scrollTop, body.scrollTop );
+-			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+-		}
+-
+-		return { top: top, left: left };
+-	};
+-}
+-
+-jQuery.offset = {
+-	initialize: function() {
+-		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
+-			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+-
+-		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+-
+-		container.innerHTML = html;
+-		body.insertBefore( container, body.firstChild );
+-		innerDiv = container.firstChild;
+-		checkDiv = innerDiv.firstChild;
+-		td = innerDiv.nextSibling.firstChild.firstChild;
+-
+-		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+-		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+-
+-		checkDiv.style.position = "fixed";
+-		checkDiv.style.top = "20px";
+-
+-		// safari subtracts parent border width here which is 5px
+-		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+-		checkDiv.style.position = checkDiv.style.top = "";
+-
+-		innerDiv.style.overflow = "hidden";
+-		innerDiv.style.position = "relative";
+-
+-		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+-
+-		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+-
+-		body.removeChild( container );
+-		jQuery.offset.initialize = jQuery.noop;
+-	},
+-
+-	bodyOffset: function( body ) {
+-		var top = body.offsetTop,
+-			left = body.offsetLeft;
+-
+-		jQuery.offset.initialize();
+-
+-		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+-			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+-		}
+-
+-		return { top: top, left: left };
+-	},
+-
+-	setOffset: function( elem, options, i ) {
+-		var position = jQuery.css( elem, "position" );
+-
+-		// set position first, in-case top/left are set even on static elem
+-		if ( position === "static" ) {
+-			elem.style.position = "relative";
+-		}
+-
+-		var curElem = jQuery( elem ),
+-			curOffset = curElem.offset(),
+-			curCSSTop = jQuery.css( elem, "top" ),
+-			curCSSLeft = jQuery.css( elem, "left" ),
+-			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+-			props = {}, curPosition = {}, curTop, curLeft;
+-
+-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+-		if ( calculatePosition ) {
+-			curPosition = curElem.position();
+-			curTop = curPosition.top;
+-			curLeft = curPosition.left;
+-		} else {
+-			curTop = parseFloat( curCSSTop ) || 0;
+-			curLeft = parseFloat( curCSSLeft ) || 0;
+-		}
+-
+-		if ( jQuery.isFunction( options ) ) {
+-			options = options.call( elem, i, curOffset );
+-		}
+-
+-		if (options.top != null) {
+-			props.top = (options.top - curOffset.top) + curTop;
+-		}
+-		if (options.left != null) {
+-			props.left = (options.left - curOffset.left) + curLeft;
+-		}
+-
+-		if ( "using" in options ) {
+-			options.using.call( elem, props );
+-		} else {
+-			curElem.css( props );
+-		}
+-	}
+-};
+-
+-
+-jQuery.fn.extend({
+-	position: function() {
+-		if ( !this[0] ) {
+-			return null;
+-		}
+-
+-		var elem = this[0],
+-
+-		// Get *real* offsetParent
+-		offsetParent = this.offsetParent(),
+-
+-		// Get correct offsets
+-		offset       = this.offset(),
+-		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+-
+-		// Subtract element margins
+-		// note: when an element has margin: auto the offsetLeft and marginLeft
+-		// are the same in Safari causing offset.left to incorrectly be 0
+-		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+-
+-		// Add offsetParent borders
+-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+-
+-		// Subtract the two offsets
+-		return {
+-			top:  offset.top  - parentOffset.top,
+-			left: offset.left - parentOffset.left
+-		};
+-	},
+-
+-	offsetParent: function() {
+-		return this.map(function() {
+-			var offsetParent = this.offsetParent || document.body;
+-			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+-				offsetParent = offsetParent.offsetParent;
+-			}
+-			return offsetParent;
+-		});
+-	}
+-});
+-
+-
+-// Create scrollLeft and scrollTop methods
+-jQuery.each( ["Left", "Top"], function( i, name ) {
+-	var method = "scroll" + name;
+-
+-	jQuery.fn[ method ] = function( val ) {
+-		var elem, win;
+-
+-		if ( val === undefined ) {
+-			elem = this[ 0 ];
+-
+-			if ( !elem ) {
+-				return null;
+-			}
+-
+-			win = getWindow( elem );
+-
+-			// Return the scroll offset
+-			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+-				jQuery.support.boxModel && win.document.documentElement[ method ] ||
+-					win.document.body[ method ] :
+-				elem[ method ];
+-		}
+-
+-		// Set the scroll offset
+-		return this.each(function() {
+-			win = getWindow( this );
+-
+-			if ( win ) {
+-				win.scrollTo(
+-					!i ? val : jQuery( win ).scrollLeft(),
+-					 i ? val : jQuery( win ).scrollTop()
+-				);
+-
+-			} else {
+-				this[ method ] = val;
+-			}
+-		});
+-	};
+-});
+-
+-function getWindow( elem ) {
+-	return jQuery.isWindow( elem ) ?
+-		elem :
+-		elem.nodeType === 9 ?
+-			elem.defaultView || elem.parentWindow :
+-			false;
+-}
+-
+-
+-
+-
+-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+-jQuery.each([ "Height", "Width" ], function( i, name ) {
+-
+-	var type = name.toLowerCase();
+-
+-	// innerHeight and innerWidth
+-	jQuery.fn[ "inner" + name ] = function() {
+-		var elem = this[0];
+-		return elem && elem.style ?
+-			parseFloat( jQuery.css( elem, type, "padding" ) ) :
+-			null;
+-	};
+-
+-	// outerHeight and outerWidth
+-	jQuery.fn[ "outer" + name ] = function( margin ) {
+-		var elem = this[0];
+-		return elem && elem.style ?
+-			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+-			null;
+-	};
+-
+-	jQuery.fn[ type ] = function( size ) {
+-		// Get window width or height
+-		var elem = this[0];
+-		if ( !elem ) {
+-			return size == null ? null : this;
+-		}
+-
+-		if ( jQuery.isFunction( size ) ) {
+-			return this.each(function( i ) {
+-				var self = jQuery( this );
+-				self[ type ]( size.call( this, i, self[ type ]() ) );
+-			});
+-		}
+-
+-		if ( jQuery.isWindow( elem ) ) {
+-			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+-			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+-			var docElemProp = elem.document.documentElement[ "client" + name ];
+-			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+-				elem.document.body[ "client" + name ] || docElemProp;
+-
+-		// Get document width or height
+-		} else if ( elem.nodeType === 9 ) {
+-			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+-			return Math.max(
+-				elem.documentElement["client" + name],
+-				elem.body["scroll" + name], elem.documentElement["scroll" + name],
+-				elem.body["offset" + name], elem.documentElement["offset" + name]
+-			);
+-
+-		// Get or set width or height on the element
+-		} else if ( size === undefined ) {
+-			var orig = jQuery.css( elem, type ),
+-				ret = parseFloat( orig );
+-
+-			return jQuery.isNaN( ret ) ? orig : ret;
+-
+-		// Set the width or height on the element (default to pixels if value is unitless)
+-		} else {
+-			return this.css( type, typeof size === "string" ? size : size + "px" );
+-		}
+-	};
+-
+-});
+-
+-
+-// Expose jQuery to the global object
+-window.jQuery = window.$ = jQuery;
+-})(window);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.js	(revision 15488)
+@@ -1,1415 +0,0 @@
+-/*
+- * QUnit - A JavaScript Unit Testing Framework
+- * 
+- * http://docs.jquery.com/QUnit
+- *
+- * Copyright (c) 2011 John Resig, Jörn Zaefferer
+- * Dual licensed under the MIT (MIT-LICENSE.txt)
+- * or GPL (GPL-LICENSE.txt) licenses.
+- */
+-
+-(function(window) {
+-
+-var defined = {
+-	setTimeout: typeof window.setTimeout !== "undefined",
+-	sessionStorage: (function() {
+-		try {
+-			return !!sessionStorage.getItem;
+-		} catch(e){
+-			return false;
+-		}
+-  })()
+-}
+-
+-var testId = 0;
+-
+-var Test = function(name, testName, expected, testEnvironmentArg, async, callback) {
+-	this.name = name;
+-	this.testName = testName;
+-	this.expected = expected;
+-	this.testEnvironmentArg = testEnvironmentArg;
+-	this.async = async;
+-	this.callback = callback;
+-	this.assertions = [];
+-};
+-Test.prototype = {
+-	init: function() {
+-		var tests = id("qunit-tests");
+-		if (tests) {
+-			var b = document.createElement("strong");
+-				b.innerHTML = "Running " + this.name;
+-			var li = document.createElement("li");
+-				li.appendChild( b );
+-				li.id = this.id = "test-output" + testId++;
+-			tests.appendChild( li );
+-		}
+-	},
+-	setup: function() {
+-		if (this.module != config.previousModule) {
+-			if ( config.previousModule ) {
+-				QUnit.moduleDone( {
+-					name: config.previousModule,
+-					failed: config.moduleStats.bad,
+-					passed: config.moduleStats.all - config.moduleStats.bad,
+-					total: config.moduleStats.all
+-				} );
+-			}
+-			config.previousModule = this.module;
+-			config.moduleStats = { all: 0, bad: 0 };
+-			QUnit.moduleStart( {
+-				name: this.module
+-			} );
+-		}
+-
+-		config.current = this;
+-		this.testEnvironment = extend({
+-			setup: function() {},
+-			teardown: function() {}
+-		}, this.moduleTestEnvironment);
+-		if (this.testEnvironmentArg) {
+-			extend(this.testEnvironment, this.testEnvironmentArg);
+-		}
+-
+-		QUnit.testStart( {
+-			name: this.testName
+-		} );
+-
+-		// allow utility functions to access the current test environment
+-		// TODO why??
+-		QUnit.current_testEnvironment = this.testEnvironment;
+-		
+-		try {
+-			if ( !config.pollution ) {
+-				saveGlobal();
+-			}
+-
+-			this.testEnvironment.setup.call(this.testEnvironment);
+-		} catch(e) {
+-			QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message );
+-		}
+-	},
+-	run: function() {
+-		if ( this.async ) {
+-			QUnit.stop();
+-		}
+-
+-		if ( config.notrycatch ) {
+-			this.callback.call(this.testEnvironment);
+-			return;
+-		}
+-		try {
+-			this.callback.call(this.testEnvironment);
+-		} catch(e) {
+-			fail("Test " + this.testName + " died, exception and test follows", e, this.callback);
+-			QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) );
+-			// else next test will carry the responsibility
+-			saveGlobal();
+-
+-			// Restart the tests if they're blocking
+-			if ( config.blocking ) {
+-				start();
+-			}
+-		}
+-	},
+-	teardown: function() {
+-		try {
+-			checkPollution();
+-			this.testEnvironment.teardown.call(this.testEnvironment);
+-		} catch(e) {
+-			QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message );
+-		}
+-	},
+-	finish: function() {
+-		if ( this.expected && this.expected != this.assertions.length ) {
+-			QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" );
+-		}
+-		
+-		var good = 0, bad = 0,
+-			tests = id("qunit-tests");
+-
+-		config.stats.all += this.assertions.length;
+-		config.moduleStats.all += this.assertions.length;
+-
+-		if ( tests ) {
+-			var ol  = document.createElement("ol");
+-
+-			for ( var i = 0; i < this.assertions.length; i++ ) {
+-				var assertion = this.assertions[i];
+-
+-				var li = document.createElement("li");
+-				li.className = assertion.result ? "pass" : "fail";
+-				li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
+-				ol.appendChild( li );
+-
+-				if ( assertion.result ) {
+-					good++;
+-				} else {
+-					bad++;
+-					config.stats.bad++;
+-					config.moduleStats.bad++;
+-				}
+-			}
+-
+-			// store result when possible
+-			defined.sessionStorage && sessionStorage.setItem("qunit-" + this.testName, bad);
+-
+-			if (bad == 0) {
+-				ol.style.display = "none";
+-			}
+-
+-			var b = document.createElement("strong");
+-			b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
+-			
+-			addEvent(b, "click", function() {
+-				var next = b.nextSibling, display = next.style.display;
+-				next.style.display = display === "none" ? "block" : "none";
+-			});
+-			
+-			addEvent(b, "dblclick", function(e) {
+-				var target = e && e.target ? e.target : window.event.srcElement;
+-				if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
+-					target = target.parentNode;
+-				}
+-				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
+-					window.location.search = "?" + encodeURIComponent(getText([target]).replace(/\(.+\)$/, "").replace(/(^\s*|\s*$)/g, ""));
+-				}
+-			});
+-
+-			var li = id(this.id);
+-			li.className = bad ? "fail" : "pass";
+-			li.style.display = resultDisplayStyle(!bad);
+-			li.removeChild( li.firstChild );
+-			li.appendChild( b );
+-			li.appendChild( ol );
+-
+-		} else {
+-			for ( var i = 0; i < this.assertions.length; i++ ) {
+-				if ( !this.assertions[i].result ) {
+-					bad++;
+-					config.stats.bad++;
+-					config.moduleStats.bad++;
+-				}
+-			}
+-		}
+-
+-		try {
+-			QUnit.reset();
+-		} catch(e) {
+-			fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
+-		}
+-
+-		QUnit.testDone( {
+-			name: this.testName,
+-			failed: bad,
+-			passed: this.assertions.length - bad,
+-			total: this.assertions.length
+-		} );
+-	},
+-	
+-	queue: function() {
+-		var test = this;
+-		synchronize(function() {
+-			test.init();
+-		});
+-		function run() {
+-			// each of these can by async
+-			synchronize(function() {
+-				test.setup();
+-			});
+-			synchronize(function() {
+-				test.run();
+-			});
+-			synchronize(function() {
+-				test.teardown();
+-			});
+-			synchronize(function() {
+-				test.finish();
+-			});
+-		}
+-		// defer when previous test run passed, if storage is available
+-		var bad = defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.testName);
+-		if (bad) {
+-			run();
+-		} else {
+-			synchronize(run);
+-		};
+-	}
+-	
+-}
+-
+-var QUnit = {
+-
+-	// call on start of module test to prepend name to all tests
+-	module: function(name, testEnvironment) {
+-		config.currentModule = name;
+-		config.currentModuleTestEnviroment = testEnvironment;
+-	},
+-
+-	asyncTest: function(testName, expected, callback) {
+-		if ( arguments.length === 2 ) {
+-			callback = expected;
+-			expected = 0;
+-		}
+-
+-		QUnit.test(testName, expected, callback, true);
+-	},
+-	
+-	test: function(testName, expected, callback, async) {
+-		var name = '<span class="test-name">' + testName + '</span>', testEnvironmentArg;
+-
+-		if ( arguments.length === 2 ) {
+-			callback = expected;
+-			expected = null;
+-		}
+-		// is 2nd argument a testEnvironment?
+-		if ( expected && typeof expected === 'object') {
+-			testEnvironmentArg =  expected;
+-			expected = null;
+-		}
+-
+-		if ( config.currentModule ) {
+-			name = '<span class="module-name">' + config.currentModule + "</span>: " + name;
+-		}
+-
+-		if ( !validTest(config.currentModule + ": " + testName) ) {
+-			return;
+-		}
+-		
+-		var test = new Test(name, testName, expected, testEnvironmentArg, async, callback);
+-		test.module = config.currentModule;
+-		test.moduleTestEnvironment = config.currentModuleTestEnviroment;
+-		test.queue();
+-	},
+-	
+-	/**
+-	 * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
+-	 */
+-	expect: function(asserts) {
+-		config.current.expected = asserts;
+-	},
+-
+-	/**
+-	 * Asserts true.
+-	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+-	 */
+-	ok: function(a, msg) {
+-		a = !!a;
+-		var details = {
+-			result: a,
+-			message: msg
+-		};
+-		msg = escapeHtml(msg);
+-		QUnit.log(details);
+-		config.current.assertions.push({
+-			result: a,
+-			message: msg
+-		});
+-	},
+-
+-	/**
+-	 * Checks that the first two arguments are equal, with an optional message.
+-	 * Prints out both actual and expected values.
+-	 *
+-	 * Prefered to ok( actual == expected, message )
+-	 *
+-	 * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
+-	 *
+-	 * @param Object actual
+-	 * @param Object expected
+-	 * @param String message (optional)
+-	 */
+-	equal: function(actual, expected, message) {
+-		QUnit.push(expected == actual, actual, expected, message);
+-	},
+-
+-	notEqual: function(actual, expected, message) {
+-		QUnit.push(expected != actual, actual, expected, message);
+-	},
+-	
+-	deepEqual: function(actual, expected, message) {
+-		QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
+-	},
+-
+-	notDeepEqual: function(actual, expected, message) {
+-		QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);
+-	},
+-
+-	strictEqual: function(actual, expected, message) {
+-		QUnit.push(expected === actual, actual, expected, message);
+-	},
+-
+-	notStrictEqual: function(actual, expected, message) {
+-		QUnit.push(expected !== actual, actual, expected, message);
+-	},
+-
+-	raises: function(block, expected, message) {
+-		var actual, ok = false;
+-	
+-		if (typeof expected === 'string') {
+-			message = expected;
+-			expected = null;
+-		}
+-	
+-		try {
+-			block();
+-		} catch (e) {
+-			actual = e;
+-		}
+-	
+-		if (actual) {
+-			// we don't want to validate thrown error
+-			if (!expected) {
+-				ok = true;
+-			// expected is a regexp	
+-			} else if (QUnit.objectType(expected) === "regexp") {
+-				ok = expected.test(actual);
+-			// expected is a constructor	
+-			} else if (actual instanceof expected) {
+-				ok = true;
+-			// expected is a validation function which returns true is validation passed	
+-			} else if (expected.call({}, actual) === true) {
+-				ok = true;
+-			}
+-		}
+-			
+-		QUnit.ok(ok, message);
+-	},
+-
+-	start: function() {
+-		config.semaphore--;
+-		if (config.semaphore > 0) {
+-			// don't start until equal number of stop-calls
+-			return;
+-		}
+-		if (config.semaphore < 0) {
+-			// ignore if start is called more often then stop
+-			config.semaphore = 0;
+-		}
+-		// A slight delay, to avoid any current callbacks
+-		if ( defined.setTimeout ) {
+-			window.setTimeout(function() {
+-				if ( config.timeout ) {
+-					clearTimeout(config.timeout);
+-				}
+-
+-				config.blocking = false;
+-				process();
+-			}, 13);
+-		} else {
+-			config.blocking = false;
+-			process();
+-		}
+-	},
+-	
+-	stop: function(timeout) {
+-		config.semaphore++;
+-		config.blocking = true;
+-
+-		if ( timeout && defined.setTimeout ) {
+-			clearTimeout(config.timeout);
+-			config.timeout = window.setTimeout(function() {
+-				QUnit.ok( false, "Test timed out" );
+-				QUnit.start();
+-			}, timeout);
+-		}
+-	}
+-
+-};
+-
+-// Backwards compatibility, deprecated
+-QUnit.equals = QUnit.equal;
+-QUnit.same = QUnit.deepEqual;
+-
+-// Maintain internal state
+-var config = {
+-	// The queue of tests to run
+-	queue: [],
+-
+-	// block until document ready
+-	blocking: true
+-};
+-
+-// Load paramaters
+-(function() {
+-	var location = window.location || { search: "", protocol: "file:" },
+-		GETParams = location.search.slice(1).split('&');
+-
+-	for ( var i = 0; i < GETParams.length; i++ ) {
+-		GETParams[i] = decodeURIComponent( GETParams[i] );
+-		if ( GETParams[i] === "noglobals" ) {
+-			GETParams.splice( i, 1 );
+-			i--;
+-			config.noglobals = true;
+-		} else if ( GETParams[i] === "notrycatch" ) {
+-			GETParams.splice( i, 1 );
+-			i--;
+-			config.notrycatch = true;
+-		} else if ( GETParams[i].search('=') > -1 ) {
+-			GETParams.splice( i, 1 );
+-			i--;
+-		}
+-	}
+-	
+-	// restrict modules/tests by get parameters
+-	config.filters = GETParams;
+-	
+-	// Figure out if we're running the tests from a server or not
+-	QUnit.isLocal = !!(location.protocol === 'file:');
+-})();
+-
+-// Expose the API as global variables, unless an 'exports'
+-// object exists, in that case we assume we're in CommonJS
+-if ( typeof exports === "undefined" || typeof require === "undefined" ) {
+-	extend(window, QUnit);
+-	window.QUnit = QUnit;
+-} else {
+-	extend(exports, QUnit);
+-	exports.QUnit = QUnit;
+-}
+-
+-// define these after exposing globals to keep them in these QUnit namespace only
+-extend(QUnit, {
+-	config: config,
+-
+-	// Initialize the configuration options
+-	init: function() {
+-		extend(config, {
+-			stats: { all: 0, bad: 0 },
+-			moduleStats: { all: 0, bad: 0 },
+-			started: +new Date,
+-			updateRate: 1000,
+-			blocking: false,
+-			autostart: true,
+-			autorun: false,
+-			filters: [],
+-			queue: [],
+-			semaphore: 0
+-		});
+-
+-		var tests = id("qunit-tests"),
+-			banner = id("qunit-banner"),
+-			result = id("qunit-testresult");
+-
+-		if ( tests ) {
+-			tests.innerHTML = "";
+-		}
+-
+-		if ( banner ) {
+-			banner.className = "";
+-		}
+-
+-		if ( result ) {
+-			result.parentNode.removeChild( result );
+-		}
+-	},
+-	
+-	/**
+-	 * Resets the test setup. Useful for tests that modify the DOM.
+-	 * 
+-	 * If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
+-	 */
+-	reset: function() {
+-		if ( window.jQuery ) {
+-			jQuery( "#main, #qunit-fixture" ).html( config.fixture );
+-		} else {
+-			var main = id( 'main' ) || id( 'qunit-fixture' );
+-			if ( main ) {
+-				main.innerHTML = config.fixture;
+-			}
+-		}
+-	},
+-	
+-	/**
+-	 * Trigger an event on an element.
+-	 *
+-	 * @example triggerEvent( document.body, "click" );
+-	 *
+-	 * @param DOMElement elem
+-	 * @param String type
+-	 */
+-	triggerEvent: function( elem, type, event ) {
+-		if ( document.createEvent ) {
+-			event = document.createEvent("MouseEvents");
+-			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
+-				0, 0, 0, 0, 0, false, false, false, false, 0, null);
+-			elem.dispatchEvent( event );
+-
+-		} else if ( elem.fireEvent ) {
+-			elem.fireEvent("on"+type);
+-		}
+-	},
+-	
+-	// Safe object type checking
+-	is: function( type, obj ) {
+-		return QUnit.objectType( obj ) == type;
+-	},
+-	
+-	objectType: function( obj ) {
+-		if (typeof obj === "undefined") {
+-				return "undefined";
+-
+-		// consider: typeof null === object
+-		}
+-		if (obj === null) {
+-				return "null";
+-		}
+-
+-		var type = Object.prototype.toString.call( obj )
+-			.match(/^\[object\s(.*)\]$/)[1] || '';
+-
+-		switch (type) {
+-				case 'Number':
+-						if (isNaN(obj)) {
+-								return "nan";
+-						} else {
+-								return "number";
+-						}
+-				case 'String':
+-				case 'Boolean':
+-				case 'Array':
+-				case 'Date':
+-				case 'RegExp':
+-				case 'Function':
+-						return type.toLowerCase();
+-		}
+-		if (typeof obj === "object") {
+-				return "object";
+-		}
+-		return undefined;
+-	},
+-	
+-	push: function(result, actual, expected, message) {
+-		var details = {
+-			result: result,
+-			message: message,
+-			actual: actual,
+-			expected: expected
+-		};
+-		
+-		message = escapeHtml(message) || (result ? "okay" : "failed");
+-		message = '<span class="test-message">' + message + "</span>";
+-		expected = escapeHtml(QUnit.jsDump.parse(expected));
+-		actual = escapeHtml(QUnit.jsDump.parse(actual));
+-		var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';
+-		if (actual != expected) {
+-			output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';
+-			output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';
+-		}
+-		if (!result) {
+-			var source = sourceFromStacktrace();
+-			if (source) {
+-				details.source = source;
+-				output += '<tr class="test-source"><th>Source: </th><td><pre>' + source +'</pre></td></tr>';
+-			}
+-		}
+-		output += "</table>";
+-		
+-		QUnit.log(details);
+-		
+-		config.current.assertions.push({
+-			result: !!result,
+-			message: output
+-		});
+-	},
+-	
+-	// Logging callbacks; all receive a single argument with the listed properties
+-	// run test/logs.html for any related changes
+-	begin: function() {},
+-	// done: { failed, passed, total, runtime }
+-	done: function() {},
+-	// log: { result, actual, expected, message }
+-	log: function() {},
+-	// testStart: { name }
+-	testStart: function() {},
+-	// testDone: { name, failed, passed, total }
+-	testDone: function() {},
+-	// moduleStart: { name }
+-	moduleStart: function() {},
+-	// moduleDone: { name, failed, passed, total }
+-	moduleDone: function() {}
+-});
+-
+-if ( typeof document === "undefined" || document.readyState === "complete" ) {
+-	config.autorun = true;
+-}
+-
+-addEvent(window, "load", function() {
+-	QUnit.begin({});
+-	
+-	// Initialize the config, saving the execution queue
+-	var oldconfig = extend({}, config);
+-	QUnit.init();
+-	extend(config, oldconfig);
+-
+-	config.blocking = false;
+-
+-	var userAgent = id("qunit-userAgent");
+-	if ( userAgent ) {
+-		userAgent.innerHTML = navigator.userAgent;
+-	}
+-	var banner = id("qunit-header");
+-	if ( banner ) {
+-		var paramsIndex = location.href.lastIndexOf(location.search);
+-		if ( paramsIndex > -1 ) {
+-			var mainPageLocation = location.href.slice(0, paramsIndex);
+-			if ( mainPageLocation == location.href ) {
+-				banner.innerHTML = '<a href=""> ' + banner.innerHTML + '</a> ';
+-			} else {
+-				var testName = decodeURIComponent(location.search.slice(1));
+-				banner.innerHTML = '<a href="' + mainPageLocation + '">' + banner.innerHTML + '</a> &#8250; <a href="">' + testName + '</a>';
+-			}
+-		}
+-	}
+-	
+-	var toolbar = id("qunit-testrunner-toolbar");
+-	if ( toolbar ) {
+-		var filter = document.createElement("input");
+-		filter.type = "checkbox";
+-		filter.id = "qunit-filter-pass";
+-		addEvent( filter, "click", function() {
+-			var li = document.getElementsByTagName("li");
+-			for ( var i = 0; i < li.length; i++ ) {
+-				if ( li[i].className.indexOf("pass") > -1 ) {
+-					li[i].style.display = filter.checked ? "none" : "";
+-				}
+-			}
+-			if ( defined.sessionStorage ) {
+-				sessionStorage.setItem("qunit-filter-passed-tests", filter.checked ? "true" : "");
+-			}
+-		});
+-		if ( defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) {
+-			filter.checked = true;
+-		}
+-		toolbar.appendChild( filter );
+-
+-		var label = document.createElement("label");
+-		label.setAttribute("for", "qunit-filter-pass");
+-		label.innerHTML = "Hide passed tests";
+-		toolbar.appendChild( label );
+-	}
+-
+-	var main = id('main') || id('qunit-fixture');
+-	if ( main ) {
+-		config.fixture = main.innerHTML;
+-	}
+-
+-	if (config.autostart) {
+-		QUnit.start();
+-	}
+-});
+-
+-function done() {
+-	config.autorun = true;
+-
+-	// Log the last module results
+-	if ( config.currentModule ) {
+-		QUnit.moduleDone( {
+-			name: config.currentModule,
+-			failed: config.moduleStats.bad,
+-			passed: config.moduleStats.all - config.moduleStats.bad,
+-			total: config.moduleStats.all
+-		} );
+-	}
+-
+-	var banner = id("qunit-banner"),
+-		tests = id("qunit-tests"),
+-		runtime = +new Date - config.started,
+-		passed = config.stats.all - config.stats.bad,
+-		html = [
+-			'Tests completed in ',
+-			runtime,
+-			' milliseconds.<br/>',
+-			'<span class="passed">',
+-			passed,
+-			'</span> tests of <span class="total">',
+-			config.stats.all,
+-			'</span> passed, <span class="failed">',
+-			config.stats.bad,
+-			'</span> failed.'
+-		].join('');
+-
+-	if ( banner ) {
+-		banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
+-	}
+-
+-	if ( tests ) {	
+-		var result = id("qunit-testresult");
+-
+-		if ( !result ) {
+-			result = document.createElement("p");
+-			result.id = "qunit-testresult";
+-			result.className = "result";
+-			tests.parentNode.insertBefore( result, tests.nextSibling );
+-		}
+-
+-		result.innerHTML = html;
+-	}
+-
+-	QUnit.done( {
+-		failed: config.stats.bad,
+-		passed: passed, 
+-		total: config.stats.all,
+-		runtime: runtime
+-	} );
+-}
+-
+-function validTest( name ) {
+-	var i = config.filters.length,
+-		run = false;
+-
+-	if ( !i ) {
+-		return true;
+-	}
+-	
+-	while ( i-- ) {
+-		var filter = config.filters[i],
+-			not = filter.charAt(0) == '!';
+-
+-		if ( not ) {
+-			filter = filter.slice(1);
+-		}
+-
+-		if ( name.indexOf(filter) !== -1 ) {
+-			return !not;
+-		}
+-
+-		if ( not ) {
+-			run = true;
+-		}
+-	}
+-
+-	return run;
+-}
+-
+-// so far supports only Firefox, Chrome and Opera (buggy)
+-// could be extended in the future to use something like https://github.com/csnover/TraceKit
+-function sourceFromStacktrace() {
+-	try {
+-		throw new Error();
+-	} catch ( e ) {
+-		if (e.stacktrace) {
+-			// Opera
+-			return e.stacktrace.split("\n")[6];
+-		} else if (e.stack) {
+-			// Firefox, Chrome
+-			return e.stack.split("\n")[4];
+-		}
+-	}
+-}
+-
+-function resultDisplayStyle(passed) {
+-	return passed && id("qunit-filter-pass") && id("qunit-filter-pass").checked ? 'none' : '';
+-}
+-
+-function escapeHtml(s) {
+-	if (!s) {
+-		return "";
+-	}
+-	s = s + "";
+-	return s.replace(/[\&"<>\\]/g, function(s) {
+-		switch(s) {
+-			case "&": return "&amp;";
+-			case "\\": return "\\\\";
+-			case '"': return '\"';
+-			case "<": return "&lt;";
+-			case ">": return "&gt;";
+-			default: return s;
+-		}
+-	});
+-}
+-
+-function synchronize( callback ) {
+-	config.queue.push( callback );
+-
+-	if ( config.autorun && !config.blocking ) {
+-		process();
+-	}
+-}
+-
+-function process() {
+-	var start = (new Date()).getTime();
+-
+-	while ( config.queue.length && !config.blocking ) {
+-		if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {
+-			config.queue.shift()();
+-		} else {
+-			window.setTimeout( process, 13 );
+-			break;
+-		}
+-	}
+-  if (!config.blocking && !config.queue.length) {
+-    done();
+-  }
+-}
+-
+-function saveGlobal() {
+-	config.pollution = [];
+-	
+-	if ( config.noglobals ) {
+-		for ( var key in window ) {
+-			config.pollution.push( key );
+-		}
+-	}
+-}
+-
+-function checkPollution( name ) {
+-	var old = config.pollution;
+-	saveGlobal();
+-	
+-	var newGlobals = diff( old, config.pollution );
+-	if ( newGlobals.length > 0 ) {
+-		ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
+-		config.current.expected++;
+-	}
+-
+-	var deletedGlobals = diff( config.pollution, old );
+-	if ( deletedGlobals.length > 0 ) {
+-		ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
+-		config.current.expected++;
+-	}
+-}
+-
+-// returns a new Array with the elements that are in a but not in b
+-function diff( a, b ) {
+-	var result = a.slice();
+-	for ( var i = 0; i < result.length; i++ ) {
+-		for ( var j = 0; j < b.length; j++ ) {
+-			if ( result[i] === b[j] ) {
+-				result.splice(i, 1);
+-				i--;
+-				break;
+-			}
+-		}
+-	}
+-	return result;
+-}
+-
+-function fail(message, exception, callback) {
+-	if ( typeof console !== "undefined" && console.error && console.warn ) {
+-		console.error(message);
+-		console.error(exception);
+-		console.warn(callback.toString());
+-
+-	} else if ( window.opera && opera.postError ) {
+-		opera.postError(message, exception, callback.toString);
+-	}
+-}
+-
+-function extend(a, b) {
+-	for ( var prop in b ) {
+-		a[prop] = b[prop];
+-	}
+-
+-	return a;
+-}
+-
+-function addEvent(elem, type, fn) {
+-	if ( elem.addEventListener ) {
+-		elem.addEventListener( type, fn, false );
+-	} else if ( elem.attachEvent ) {
+-		elem.attachEvent( "on" + type, fn );
+-	} else {
+-		fn();
+-	}
+-}
+-
+-function id(name) {
+-	return !!(typeof document !== "undefined" && document && document.getElementById) &&
+-		document.getElementById( name );
+-}
+-
+-// Test for equality any JavaScript type.
+-// Discussions and reference: http://philrathe.com/articles/equiv
+-// Test suites: http://philrathe.com/tests/equiv
+-// Author: Philippe Rathé <prathe@gmail.com>
+-QUnit.equiv = function () {
+-
+-    var innerEquiv; // the real equiv function
+-    var callers = []; // stack to decide between skip/abort functions
+-    var parents = []; // stack to avoiding loops from circular referencing
+-
+-    // Call the o related callback with the given arguments.
+-    function bindCallbacks(o, callbacks, args) {
+-        var prop = QUnit.objectType(o);
+-        if (prop) {
+-            if (QUnit.objectType(callbacks[prop]) === "function") {
+-                return callbacks[prop].apply(callbacks, args);
+-            } else {
+-                return callbacks[prop]; // or undefined
+-            }
+-        }
+-    }
+-    
+-    var callbacks = function () {
+-
+-        // for string, boolean, number and null
+-        function useStrictEquality(b, a) {
+-            if (b instanceof a.constructor || a instanceof b.constructor) {
+-                // to catch short annotaion VS 'new' annotation of a declaration
+-                // e.g. var i = 1;
+-                //      var j = new Number(1);
+-                return a == b;
+-            } else {
+-                return a === b;
+-            }
+-        }
+-
+-        return {
+-            "string": useStrictEquality,
+-            "boolean": useStrictEquality,
+-            "number": useStrictEquality,
+-            "null": useStrictEquality,
+-            "undefined": useStrictEquality,
+-
+-            "nan": function (b) {
+-                return isNaN(b);
+-            },
+-
+-            "date": function (b, a) {
+-                return QUnit.objectType(b) === "date" && a.valueOf() === b.valueOf();
+-            },
+-
+-            "regexp": function (b, a) {
+-                return QUnit.objectType(b) === "regexp" &&
+-                    a.source === b.source && // the regex itself
+-                    a.global === b.global && // and its modifers (gmi) ...
+-                    a.ignoreCase === b.ignoreCase &&
+-                    a.multiline === b.multiline;
+-            },
+-
+-            // - skip when the property is a method of an instance (OOP)
+-            // - abort otherwise,
+-            //   initial === would have catch identical references anyway
+-            "function": function () {
+-                var caller = callers[callers.length - 1];
+-                return caller !== Object &&
+-                        typeof caller !== "undefined";
+-            },
+-
+-            "array": function (b, a) {
+-                var i, j, loop;
+-                var len;
+-
+-                // b could be an object literal here
+-                if ( ! (QUnit.objectType(b) === "array")) {
+-                    return false;
+-                }   
+-                
+-                len = a.length;
+-                if (len !== b.length) { // safe and faster
+-                    return false;
+-                }
+-                
+-                //track reference to avoid circular references
+-                parents.push(a);
+-                for (i = 0; i < len; i++) {
+-                    loop = false;
+-                    for(j=0;j<parents.length;j++){
+-                        if(parents[j] === a[i]){
+-                            loop = true;//dont rewalk array
+-                        }
+-                    }
+-                    if (!loop && ! innerEquiv(a[i], b[i])) {
+-                        parents.pop();
+-                        return false;
+-                    }
+-                }
+-                parents.pop();
+-                return true;
+-            },
+-
+-            "object": function (b, a) {
+-                var i, j, loop;
+-                var eq = true; // unless we can proove it
+-                var aProperties = [], bProperties = []; // collection of strings
+-
+-                // comparing constructors is more strict than using instanceof
+-                if ( a.constructor !== b.constructor) {
+-                    return false;
+-                }
+-
+-                // stack constructor before traversing properties
+-                callers.push(a.constructor);
+-                //track reference to avoid circular references
+-                parents.push(a);
+-                
+-                for (i in a) { // be strict: don't ensures hasOwnProperty and go deep
+-                    loop = false;
+-                    for(j=0;j<parents.length;j++){
+-                        if(parents[j] === a[i])
+-                            loop = true; //don't go down the same path twice
+-                    }
+-                    aProperties.push(i); // collect a's properties
+-
+-                    if (!loop && ! innerEquiv(a[i], b[i])) {
+-                        eq = false;
+-                        break;
+-                    }
+-                }
+-
+-                callers.pop(); // unstack, we are done
+-                parents.pop();
+-
+-                for (i in b) {
+-                    bProperties.push(i); // collect b's properties
+-                }
+-
+-                // Ensures identical properties name
+-                return eq && innerEquiv(aProperties.sort(), bProperties.sort());
+-            }
+-        };
+-    }();
+-
+-    innerEquiv = function () { // can take multiple arguments
+-        var args = Array.prototype.slice.apply(arguments);
+-        if (args.length < 2) {
+-            return true; // end transition
+-        }
+-
+-        return (function (a, b) {
+-            if (a === b) {
+-                return true; // catch the most you can
+-            } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || QUnit.objectType(a) !== QUnit.objectType(b)) {
+-                return false; // don't lose time with error prone cases
+-            } else {
+-                return bindCallbacks(a, callbacks, [b, a]);
+-            }
+-
+-        // apply transition with (1..n) arguments
+-        })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1));
+-    };
+-
+-    return innerEquiv;
+-
+-}();
+-
+-/**
+- * jsDump
+- * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+- * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php)
+- * Date: 5/15/2008
+- * @projectDescription Advanced and extensible data dumping for Javascript.
+- * @version 1.0.0
+- * @author Ariel Flesler
+- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+- */
+-QUnit.jsDump = (function() {
+-	function quote( str ) {
+-		return '"' + str.toString().replace(/"/g, '\\"') + '"';
+-	};
+-	function literal( o ) {
+-		return o + '';	
+-	};
+-	function join( pre, arr, post ) {
+-		var s = jsDump.separator(),
+-			base = jsDump.indent(),
+-			inner = jsDump.indent(1);
+-		if ( arr.join )
+-			arr = arr.join( ',' + s + inner );
+-		if ( !arr )
+-			return pre + post;
+-		return [ pre, inner + arr, base + post ].join(s);
+-	};
+-	function array( arr ) {
+-		var i = arr.length,	ret = Array(i);					
+-		this.up();
+-		while ( i-- )
+-			ret[i] = this.parse( arr[i] );				
+-		this.down();
+-		return join( '[', ret, ']' );
+-	};
+-	
+-	var reName = /^function (\w+)/;
+-	
+-	var jsDump = {
+-		parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance
+-			var	parser = this.parsers[ type || this.typeOf(obj) ];
+-			type = typeof parser;			
+-			
+-			return type == 'function' ? parser.call( this, obj ) :
+-				   type == 'string' ? parser :
+-				   this.parsers.error;
+-		},
+-		typeOf:function( obj ) {
+-			var type;
+-			if ( obj === null ) {
+-				type = "null";
+-			} else if (typeof obj === "undefined") {
+-				type = "undefined";
+-			} else if (QUnit.is("RegExp", obj)) {
+-				type = "regexp";
+-			} else if (QUnit.is("Date", obj)) {
+-				type = "date";
+-			} else if (QUnit.is("Function", obj)) {
+-				type = "function";
+-			} else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") {
+-				type = "window";
+-			} else if (obj.nodeType === 9) {
+-				type = "document";
+-			} else if (obj.nodeType) {
+-				type = "node";
+-			} else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {
+-				type = "array";
+-			} else {
+-				type = typeof obj;
+-			}
+-			return type;
+-		},
+-		separator:function() {
+-			return this.multiline ?	this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
+-		},
+-		indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
+-			if ( !this.multiline )
+-				return '';
+-			var chr = this.indentChar;
+-			if ( this.HTML )
+-				chr = chr.replace(/\t/g,'   ').replace(/ /g,'&nbsp;');
+-			return Array( this._depth_ + (extra||0) ).join(chr);
+-		},
+-		up:function( a ) {
+-			this._depth_ += a || 1;
+-		},
+-		down:function( a ) {
+-			this._depth_ -= a || 1;
+-		},
+-		setParser:function( name, parser ) {
+-			this.parsers[name] = parser;
+-		},
+-		// The next 3 are exposed so you can use them
+-		quote:quote, 
+-		literal:literal,
+-		join:join,
+-		//
+-		_depth_: 1,
+-		// This is the list of parsers, to modify them, use jsDump.setParser
+-		parsers:{
+-			window: '[Window]',
+-			document: '[Document]',
+-			error:'[ERROR]', //when no parser is found, shouldn't happen
+-			unknown: '[Unknown]',
+-			'null':'null',
+-			undefined:'undefined',
+-			'function':function( fn ) {
+-				var ret = 'function',
+-					name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
+-				if ( name )
+-					ret += ' ' + name;
+-				ret += '(';
+-				
+-				ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');
+-				return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );
+-			},
+-			array: array,
+-			nodelist: array,
+-			arguments: array,
+-			object:function( map ) {
+-				var ret = [ ];
+-				QUnit.jsDump.up();
+-				for ( var key in map )
+-					ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(map[key]) );
+-				QUnit.jsDump.down();
+-				return join( '{', ret, '}' );
+-			},
+-			node:function( node ) {
+-				var open = QUnit.jsDump.HTML ? '&lt;' : '<',
+-					close = QUnit.jsDump.HTML ? '&gt;' : '>';
+-					
+-				var tag = node.nodeName.toLowerCase(),
+-					ret = open + tag;
+-					
+-				for ( var a in QUnit.jsDump.DOMAttrs ) {
+-					var val = node[QUnit.jsDump.DOMAttrs[a]];
+-					if ( val )
+-						ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );
+-				}
+-				return ret + close + open + '/' + tag + close;
+-			},
+-			functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
+-				var l = fn.length;
+-				if ( !l ) return '';				
+-				
+-				var args = Array(l);
+-				while ( l-- )
+-					args[l] = String.fromCharCode(97+l);//97 is 'a'
+-				return ' ' + args.join(', ') + ' ';
+-			},
+-			key:quote, //object calls it internally, the key part of an item in a map
+-			functionCode:'[code]', //function calls it internally, it's the content of the function
+-			attribute:quote, //node calls it internally, it's an html attribute value
+-			string:quote,
+-			date:quote,
+-			regexp:literal, //regex
+-			number:literal,
+-			'boolean':literal
+-		},
+-		DOMAttrs:{//attributes to dump from nodes, name=>realName
+-			id:'id',
+-			name:'name',
+-			'class':'className'
+-		},
+-		HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
+-		indentChar:'  ',//indentation unit
+-		multiline:true //if true, items in a collection, are separated by a \n, else just a space.
+-	};
+-
+-	return jsDump;
+-})();
+-
+-// from Sizzle.js
+-function getText( elems ) {
+-	var ret = "", elem;
+-
+-	for ( var i = 0; elems[i]; i++ ) {
+-		elem = elems[i];
+-
+-		// Get the text from text nodes and CDATA nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+-			ret += elem.nodeValue;
+-
+-		// Traverse everything else, except comment nodes
+-		} else if ( elem.nodeType !== 8 ) {
+-			ret += getText( elem.childNodes );
+-		}
+-	}
+-
+-	return ret;
+-};
+-
+-/*
+- * Javascript Diff Algorithm
+- *  By John Resig (http://ejohn.org/)
+- *  Modified by Chu Alan "sprite"
+- *
+- * Released under the MIT license.
+- *
+- * More Info:
+- *  http://ejohn.org/projects/javascript-diff-algorithm/
+- *  
+- * Usage: QUnit.diff(expected, actual)
+- * 
+- * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+- */
+-QUnit.diff = (function() {
+-	function diff(o, n){
+-		var ns = new Object();
+-		var os = new Object();
+-		
+-		for (var i = 0; i < n.length; i++) {
+-			if (ns[n[i]] == null) 
+-				ns[n[i]] = {
+-					rows: new Array(),
+-					o: null
+-				};
+-			ns[n[i]].rows.push(i);
+-		}
+-		
+-		for (var i = 0; i < o.length; i++) {
+-			if (os[o[i]] == null) 
+-				os[o[i]] = {
+-					rows: new Array(),
+-					n: null
+-				};
+-			os[o[i]].rows.push(i);
+-		}
+-		
+-		for (var i in ns) {
+-			if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
+-				n[ns[i].rows[0]] = {
+-					text: n[ns[i].rows[0]],
+-					row: os[i].rows[0]
+-				};
+-				o[os[i].rows[0]] = {
+-					text: o[os[i].rows[0]],
+-					row: ns[i].rows[0]
+-				};
+-			}
+-		}
+-		
+-		for (var i = 0; i < n.length - 1; i++) {
+-			if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
+-			n[i + 1] == o[n[i].row + 1]) {
+-				n[i + 1] = {
+-					text: n[i + 1],
+-					row: n[i].row + 1
+-				};
+-				o[n[i].row + 1] = {
+-					text: o[n[i].row + 1],
+-					row: i + 1
+-				};
+-			}
+-		}
+-		
+-		for (var i = n.length - 1; i > 0; i--) {
+-			if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
+-			n[i - 1] == o[n[i].row - 1]) {
+-				n[i - 1] = {
+-					text: n[i - 1],
+-					row: n[i].row - 1
+-				};
+-				o[n[i].row - 1] = {
+-					text: o[n[i].row - 1],
+-					row: i - 1
+-				};
+-			}
+-		}
+-		
+-		return {
+-			o: o,
+-			n: n
+-		};
+-	}
+-	
+-	return function(o, n){
+-		o = o.replace(/\s+$/, '');
+-		n = n.replace(/\s+$/, '');
+-		var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/));
+-
+-		var str = "";
+-		
+-		var oSpace = o.match(/\s+/g);
+-		if (oSpace == null) {
+-			oSpace = [" "];
+-		}
+-		else {
+-			oSpace.push(" ");
+-		}
+-		var nSpace = n.match(/\s+/g);
+-		if (nSpace == null) {
+-			nSpace = [" "];
+-		}
+-		else {
+-			nSpace.push(" ");
+-		}
+-		
+-		if (out.n.length == 0) {
+-			for (var i = 0; i < out.o.length; i++) {
+-				str += '<del>' + out.o[i] + oSpace[i] + "</del>";
+-			}
+-		}
+-		else {
+-			if (out.n[0].text == null) {
+-				for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
+-					str += '<del>' + out.o[n] + oSpace[n] + "</del>";
+-				}
+-			}
+-			
+-			for (var i = 0; i < out.n.length; i++) {
+-				if (out.n[i].text == null) {
+-					str += '<ins>' + out.n[i] + nSpace[i] + "</ins>";
+-				}
+-				else {
+-					var pre = "";
+-					
+-					for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {
+-						pre += '<del>' + out.o[n] + oSpace[n] + "</del>";
+-					}
+-					str += " " + out.n[i].text + nSpace[i] + pre;
+-				}
+-			}
+-		}
+-		
+-		return str;
+-	};
+-})();
+-
+-})(this);
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.min.js	(revision 15488)
+@@ -1,18 +0,0 @@
+-/*!
+- * jQuery JavaScript Library v1.6.2
+- * http://jquery.com/
+- *
+- * Copyright 2011, John Resig
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * Includes Sizzle.js
+- * http://sizzlejs.com/
+- * Copyright 2011, The Dojo Foundation
+- * Released under the MIT, BSD, and GPL Licenses.
+- *
+- * Date: Thu Jun 30 14:16:56 2011 -0400
+- */
+-(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(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 bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(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===bR,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=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),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 bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(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 bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}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=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,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=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",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.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(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.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();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},isNaN:function(a){return a==null||!m.test(a)||isNaN(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;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,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){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=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=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(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="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.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:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function 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._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;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(o);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(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");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(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.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=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?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}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
+-shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){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=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={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,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
+-)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");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&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.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++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.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.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{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;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),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 bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.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(bL,"")).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||bM.test(this.nodeName)||bG.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(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),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&&(ca.test(b.url)||e&&ca.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(ca,l),b.url===j&&(e&&(k=k.replace(ca,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 cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,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,cb&&delete cd[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=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("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",cs(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(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],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?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):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,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?: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=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.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&&!cu.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=cv(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=cv(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")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.css	(revision 15488)
+@@ -1,568 +0,0 @@
+-/*
+- * jQuery UI CSS Framework 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden { display: none; }
+-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+-.ui-helper-clearfix { display: inline-block; }
+-/* required comment for clearfix to work in Opera \*/
+-* html .ui-helper-clearfix { height:1%; }
+-.ui-helper-clearfix { display:block; }
+-/* end clearfix */
+-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled { cursor: default !important; }
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+-
+-
+-/*
+- * jQuery UI CSS Framework 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- *
+- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Segoe%20UI,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=333333&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=25&borderColorHeader=333333&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=000000&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=25&borderColorContent=666666&fcContent=ffffff&iconColorContent=cccccc&bgColorDefault=555555&bgTextureDefault=02_glass.png&bgImgOpacityDefault=20&borderColorDefault=666666&fcDefault=eeeeee&iconColorDefault=cccccc&bgColorHover=0078a3&bgTextureHover=02_glass.png&bgImgOpacityHover=40&borderColorHover=59b4d4&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=f58400&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=30&borderColorActive=ffaf0f&fcActive=ffffff&iconColorActive=222222&bgColorHighlight=eeeeee&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=80&borderColorHighlight=cccccc&fcHighlight=2e7db2&iconColorHighlight=4b8e0b&bgColorError=ffc73d&bgTextureError=02_glass.png&bgImgOpacityError=40&borderColorError=ffb73d&fcError=111111&iconColorError=a83300&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
+- */
+-
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget { font-family: Segoe UI, Arial, sans-serif; font-size: 1.1em; }
+-.ui-widget .ui-widget { font-size: 1em; }
+-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Segoe UI, Arial, sans-serif; font-size: 1em; }
+-.ui-widget-content { border: 1px solid #666666; background: #000000 url(images/ui-bg_inset-soft_25_000000_1x100.png) 50% bottom repeat-x; color: #ffffff; }
+-.ui-widget-content a { color: #ffffff; }
+-.ui-widget-header { border: 1px solid #333333; background: #333333 url(images/ui-bg_gloss-wave_25_333333_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+-.ui-widget-header a { color: #ffffff; }
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #666666; background: #555555 url(images/ui-bg_glass_20_555555_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eeeeee; }
+-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #eeeeee; text-decoration: none; }
+-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #59b4d4; background: #0078a3 url(images/ui-bg_glass_40_0078a3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
+-.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; }
+-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #ffaf0f; background: #f58400 url(images/ui-bg_inset-soft_30_f58400_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; }
+-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
+-.ui-widget :active { outline: none; }
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #cccccc; background: #eeeeee url(images/ui-bg_highlight-soft_80_eeeeee_1x100.png) 50% top repeat-x; color: #2e7db2; }
+-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #2e7db2; }
+-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ffb73d; background: #ffc73d url(images/ui-bg_glass_40_ffc73d_1x400.png) 50% 50% repeat-x; color: #111111; }
+-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #111111; }
+-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #111111; }
+-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_cccccc_256x240.png); }
+-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_cccccc_256x240.png); }
+-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+-.ui-state-default .ui-icon { background-image: url(images/ui-icons_cccccc_256x240.png); }
+-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+-.ui-state-active .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_4b8e0b_256x240.png); }
+-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_a83300_256x240.png); }
+-
+-/* positioning */
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-off { background-position: -96px -144px; }
+-.ui-icon-radio-on { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; }
+-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; }
+-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
+-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
+-
+-/* Overlays */
+-.ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
+-.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
+- * jQuery UI Resizable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Resizable#theming
+- */
+-.ui-resizable { position: relative;}
+-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+- * jQuery UI Selectable 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Selectable#theming
+- */
+-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+-/*
+- * jQuery UI Accordion 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Accordion#theming
+- */
+-/* IE/Win - Fix animation bug - #4615 */
+-.ui-accordion { width: 100%; }
+-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+-.ui-accordion .ui-accordion-li-fix { display: inline; }
+-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+-.ui-accordion .ui-accordion-content-active { display: block; }
+-/*
+- * jQuery UI Autocomplete 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Autocomplete#theming
+- */
+-.ui-autocomplete { position: absolute; cursor: default; }	
+-
+-/* workarounds */
+-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+-
+-/*
+- * jQuery UI Menu 1.8.15
+- *
+- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Menu#theming
+- */
+-.ui-menu {
+-	list-style:none;
+-	padding: 2px;
+-	margin: 0;
+-	display:block;
+-	float: left;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-}
+-.ui-menu .ui-menu-item {
+-	margin:0;
+-	padding: 0;
+-	zoom: 1;
+-	float: left;
+-	clear: left;
+-	width: 100%;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration:none;
+-	display:block;
+-	padding:.2em .4em;
+-	line-height:1.5;
+-	zoom:1;
+-}
+-.ui-menu .ui-menu-item a.ui-state-hover,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-/*
+- * jQuery UI Button 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Button#theming
+- */
+-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+-.ui-button-icons-only { width: 3.4em; } 
+-button.ui-button-icons-only { width: 3.7em; } 
+-
+-/*button text element */
+-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
+-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button { padding: .4em 1em; }
+-
+-/*button icon element(s) */
+-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+-
+-/*button sets*/
+-.ui-buttonset { margin-right: 7px; }
+-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+-
+-/* workarounds */
+-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+-/*
+- * jQuery UI Dialog 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Dialog#theming
+- */
+-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
+-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
+-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+-.ui-draggable .ui-dialog-titlebar { cursor: move; }
+-/*
+- * jQuery UI Slider 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Slider#theming
+- */
+-.ui-slider { position: relative; text-align: left; }
+-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+-
+-.ui-slider-horizontal { height: .8em; }
+-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+-
+-.ui-slider-vertical { width: .8em; height: 100px; }
+-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+- * jQuery UI Tabs 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Tabs#theming
+- */
+-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+-.ui-tabs .ui-tabs-hide { display: none !important; }
+-/*
+- * jQuery UI Datepicker 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Datepicker#theming
+- */
+-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+-.ui-datepicker .ui-datepicker-prev { left:2px; }
+-.ui-datepicker .ui-datepicker-next { right:2px; }
+-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+-.ui-datepicker select.ui-datepicker-month, 
+-.ui-datepicker select.ui-datepicker-year { width: 49%;}
+-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+-.ui-datepicker td { border: 0; padding: 1px; }
+-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi { width:auto; }
+-.ui-datepicker-multi .ui-datepicker-group { float:left; }
+-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+-
+-/* RTL support */
+-.ui-datepicker-rtl { direction: rtl; }
+-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+-
+-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+-.ui-datepicker-cover {
+-    display: none; /*sorry for IE5*/
+-    display/**/: block; /*sorry for IE5*/
+-    position: absolute; /*must have*/
+-    z-index: -1; /*must have*/
+-    filter: mask(); /*must have*/
+-    top: -4px; /*must have*/
+-    left: -4px; /*must have*/
+-    width: 200px; /*must have*/
+-    height: 200px; /*must have*/
+-}/*
+- * jQuery UI Progressbar 1.8.15
+- *
+- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Progressbar#theming
+- */
+-.ui-progressbar { height:2em; text-align: left; }
+-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/src/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/src/jquery.sidebar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/src/jquery.sidebar.js	(revision 15488)
+@@ -1,281 +0,0 @@
+-/* automatically generated by JSCoverage - do not edit */
+-if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
+-if (! _$jscoverage['jquery.sidebar.js']) {
+-  _$jscoverage['jquery.sidebar.js'] = [];
+-  _$jscoverage['jquery.sidebar.js'][10] = 0;
+-  _$jscoverage['jquery.sidebar.js'][11] = 0;
+-  _$jscoverage['jquery.sidebar.js'][13] = 0;
+-  _$jscoverage['jquery.sidebar.js'][14] = 0;
+-  _$jscoverage['jquery.sidebar.js'][37] = 0;
+-  _$jscoverage['jquery.sidebar.js'][43] = 0;
+-  _$jscoverage['jquery.sidebar.js'][44] = 0;
+-  _$jscoverage['jquery.sidebar.js'][46] = 0;
+-  _$jscoverage['jquery.sidebar.js'][47] = 0;
+-  _$jscoverage['jquery.sidebar.js'][48] = 0;
+-  _$jscoverage['jquery.sidebar.js'][51] = 0;
+-  _$jscoverage['jquery.sidebar.js'][52] = 0;
+-  _$jscoverage['jquery.sidebar.js'][53] = 0;
+-  _$jscoverage['jquery.sidebar.js'][54] = 0;
+-  _$jscoverage['jquery.sidebar.js'][55] = 0;
+-  _$jscoverage['jquery.sidebar.js'][63] = 0;
+-  _$jscoverage['jquery.sidebar.js'][69] = 0;
+-  _$jscoverage['jquery.sidebar.js'][70] = 0;
+-  _$jscoverage['jquery.sidebar.js'][72] = 0;
+-  _$jscoverage['jquery.sidebar.js'][73] = 0;
+-  _$jscoverage['jquery.sidebar.js'][76] = 0;
+-  _$jscoverage['jquery.sidebar.js'][77] = 0;
+-  _$jscoverage['jquery.sidebar.js'][78] = 0;
+-  _$jscoverage['jquery.sidebar.js'][79] = 0;
+-  _$jscoverage['jquery.sidebar.js'][80] = 0;
+-  _$jscoverage['jquery.sidebar.js'][81] = 0;
+-  _$jscoverage['jquery.sidebar.js'][90] = 0;
+-  _$jscoverage['jquery.sidebar.js'][91] = 0;
+-  _$jscoverage['jquery.sidebar.js'][93] = 0;
+-  _$jscoverage['jquery.sidebar.js'][94] = 0;
+-  _$jscoverage['jquery.sidebar.js'][96] = 0;
+-  _$jscoverage['jquery.sidebar.js'][97] = 0;
+-  _$jscoverage['jquery.sidebar.js'][99] = 0;
+-  _$jscoverage['jquery.sidebar.js'][103] = 0;
+-  _$jscoverage['jquery.sidebar.js'][109] = 0;
+-  _$jscoverage['jquery.sidebar.js'][112] = 0;
+-  _$jscoverage['jquery.sidebar.js'][135] = 0;
+-  _$jscoverage['jquery.sidebar.js'][136] = 0;
+-  _$jscoverage['jquery.sidebar.js'][137] = 0;
+-  _$jscoverage['jquery.sidebar.js'][139] = 0;
+-  _$jscoverage['jquery.sidebar.js'][140] = 0;
+-  _$jscoverage['jquery.sidebar.js'][142] = 0;
+-  _$jscoverage['jquery.sidebar.js'][143] = 0;
+-  _$jscoverage['jquery.sidebar.js'][144] = 0;
+-  _$jscoverage['jquery.sidebar.js'][147] = 0;
+-  _$jscoverage['jquery.sidebar.js'][148] = 0;
+-  _$jscoverage['jquery.sidebar.js'][149] = 0;
+-  _$jscoverage['jquery.sidebar.js'][150] = 0;
+-  _$jscoverage['jquery.sidebar.js'][152] = 0;
+-  _$jscoverage['jquery.sidebar.js'][153] = 0;
+-  _$jscoverage['jquery.sidebar.js'][154] = 0;
+-  _$jscoverage['jquery.sidebar.js'][155] = 0;
+-  _$jscoverage['jquery.sidebar.js'][157] = 0;
+-  _$jscoverage['jquery.sidebar.js'][161] = 0;
+-  _$jscoverage['jquery.sidebar.js'][166] = 0;
+-  _$jscoverage['jquery.sidebar.js'][167] = 0;
+-  _$jscoverage['jquery.sidebar.js'][168] = 0;
+-  _$jscoverage['jquery.sidebar.js'][172] = 0;
+-  _$jscoverage['jquery.sidebar.js'][175] = 0;
+-  _$jscoverage['jquery.sidebar.js'][176] = 0;
+-  _$jscoverage['jquery.sidebar.js'][180] = 0;
+-  _$jscoverage['jquery.sidebar.js'][183] = 0;
+-  _$jscoverage['jquery.sidebar.js'][184] = 0;
+-  _$jscoverage['jquery.sidebar.js'][185] = 0;
+-  _$jscoverage['jquery.sidebar.js'][186] = 0;
+-  _$jscoverage['jquery.sidebar.js'][189] = 0;
+-  _$jscoverage['jquery.sidebar.js'][192] = 0;
+-  _$jscoverage['jquery.sidebar.js'][195] = 0;
+-  _$jscoverage['jquery.sidebar.js'][198] = 0;
+-  _$jscoverage['jquery.sidebar.js'][203] = 0;
+-  _$jscoverage['jquery.sidebar.js'][204] = 0;
+-  _$jscoverage['jquery.sidebar.js'][206] = 0;
+-  _$jscoverage['jquery.sidebar.js'][207] = 0;
+-  _$jscoverage['jquery.sidebar.js'][211] = 0;
+-  _$jscoverage['jquery.sidebar.js'][212] = 0;
+-  _$jscoverage['jquery.sidebar.js'][213] = 0;
+-  _$jscoverage['jquery.sidebar.js'][214] = 0;
+-  _$jscoverage['jquery.sidebar.js'][216] = 0;
+-  _$jscoverage['jquery.sidebar.js'][217] = 0;
+-  _$jscoverage['jquery.sidebar.js'][218] = 0;
+-  _$jscoverage['jquery.sidebar.js'][220] = 0;
+-}
+-_$jscoverage['jquery.sidebar.js'][10]++;
+-(function ($, _window) {
+-  _$jscoverage['jquery.sidebar.js'][11]++;
+-  $.fn.sidebar = (function (options) {
+-  _$jscoverage['jquery.sidebar.js'][13]++;
+-  return this.each((function () {
+-  _$jscoverage['jquery.sidebar.js'][14]++;
+-  var elem = $(this), data = elem.data("sidebar") || {}, margin, width, height, duration = data.duration, injectWidth, injectHeight, injectCss, containerCss, bodyCss, position, enter, leave, opened, closed, isInnerElement, container = $("<div><div/>"), inject = $("<div><div/>"), body = $("<div><div/>"), root, parent, open = (function () {
+-  _$jscoverage['jquery.sidebar.js'][37]++;
+-  var data = elem.data("sidebar") || {}, opened = data.callback.sidebar.open, container = data.container, inject = data.inject, body = data.body;
+-  _$jscoverage['jquery.sidebar.js'][43]++;
+-  if (data.isEnter || data.isProcessing) {
+-    _$jscoverage['jquery.sidebar.js'][44]++;
+-    return;
+-  }
+-  _$jscoverage['jquery.sidebar.js'][46]++;
+-  data.isEnter = true;
+-  _$jscoverage['jquery.sidebar.js'][47]++;
+-  data.isProcessing = true;
+-  _$jscoverage['jquery.sidebar.js'][48]++;
+-  container.animate(data.animate.container.enter, {duration: duration, complete: (function () {
+-  _$jscoverage['jquery.sidebar.js'][51]++;
+-  inject.fadeOut(duration, (function () {
+-  _$jscoverage['jquery.sidebar.js'][52]++;
+-  body.show("clip", duration, (function () {
+-  _$jscoverage['jquery.sidebar.js'][53]++;
+-  data.isProcessing = false;
+-  _$jscoverage['jquery.sidebar.js'][54]++;
+-  if (opened) {
+-    _$jscoverage['jquery.sidebar.js'][55]++;
+-    opened();
+-  }
+-}));
+-}));
+-})});
+-}), close = (function () {
+-  _$jscoverage['jquery.sidebar.js'][63]++;
+-  var data = elem.data("sidebar") || {}, closed = data.callback.sidebar.close, container = data.container, inject = data.inject, body = data.body;
+-  _$jscoverage['jquery.sidebar.js'][69]++;
+-  if (! data.isEnter || data.isProcessing) {
+-    _$jscoverage['jquery.sidebar.js'][70]++;
+-    return;
+-  }
+-  _$jscoverage['jquery.sidebar.js'][72]++;
+-  data.isProcessing = true;
+-  _$jscoverage['jquery.sidebar.js'][73]++;
+-  container.animate(data.animate.container.leave, {duration: duration, complete: (function () {
+-  _$jscoverage['jquery.sidebar.js'][76]++;
+-  body.hide("clip", duration, (function () {
+-  _$jscoverage['jquery.sidebar.js'][77]++;
+-  inject.fadeIn(duration, (function () {
+-  _$jscoverage['jquery.sidebar.js'][78]++;
+-  data.isEnter = false;
+-  _$jscoverage['jquery.sidebar.js'][79]++;
+-  data.isProcessing = false;
+-  _$jscoverage['jquery.sidebar.js'][80]++;
+-  if (closed) {
+-    _$jscoverage['jquery.sidebar.js'][81]++;
+-    closed();
+-  }
+-}));
+-}));
+-})});
+-});
+-  _$jscoverage['jquery.sidebar.js'][90]++;
+-  if (typeof options === "string") {
+-    _$jscoverage['jquery.sidebar.js'][91]++;
+-    switch (options) {
+-    case "open":
+-      _$jscoverage['jquery.sidebar.js'][93]++;
+-      open();
+-      _$jscoverage['jquery.sidebar.js'][94]++;
+-      break;
+-    case "close":
+-      _$jscoverage['jquery.sidebar.js'][96]++;
+-      close();
+-      _$jscoverage['jquery.sidebar.js'][97]++;
+-      break;
+-    }
+-    _$jscoverage['jquery.sidebar.js'][99]++;
+-    return;
+-  }
+-  _$jscoverage['jquery.sidebar.js'][103]++;
+-  options = $.extend(true, {root: $(document.body), position: "left", callback: {item: {enter: (function () {
+-  _$jscoverage['jquery.sidebar.js'][109]++;
+-  $(this).animate({marginLeft: "5px"}, 250);
+-}), leave: (function () {
+-  _$jscoverage['jquery.sidebar.js'][112]++;
+-  $(this).animate({marginLeft: "0px"}, 250);
+-})}, sidebar: {open: (function () {
+-}), close: (function () {
+-})}}, animate: {container: {enter: {}, leave: {}}}, duration: 200, open: "mouseenter.sidebar", close: "mouseleave.sidebar"}, options);
+-  _$jscoverage['jquery.sidebar.js'][135]++;
+-  root = options.root;
+-  _$jscoverage['jquery.sidebar.js'][136]++;
+-  isInnerElement = ! root.is(document.body);
+-  _$jscoverage['jquery.sidebar.js'][137]++;
+-  parent = isInnerElement? root.addClass("sidebar-root"): $(_window);
+-  _$jscoverage['jquery.sidebar.js'][139]++;
+-  position = options.position;
+-  _$jscoverage['jquery.sidebar.js'][140]++;
+-  duration = options.duration;
+-  _$jscoverage['jquery.sidebar.js'][142]++;
+-  container.attr("id", "jquerySideBar" + new Date().getTime()).addClass("sidebar-container").addClass(position);
+-  _$jscoverage['jquery.sidebar.js'][143]++;
+-  inject.addClass("sidebar-inject").addClass(position);
+-  _$jscoverage['jquery.sidebar.js'][144]++;
+-  body.addClass("sidebar-body");
+-  _$jscoverage['jquery.sidebar.js'][147]++;
+-  body.append(this);
+-  _$jscoverage['jquery.sidebar.js'][148]++;
+-  container.append(body);
+-  _$jscoverage['jquery.sidebar.js'][149]++;
+-  container.append(inject);
+-  _$jscoverage['jquery.sidebar.js'][150]++;
+-  root.append(container);
+-  _$jscoverage['jquery.sidebar.js'][152]++;
+-  width = container.width();
+-  _$jscoverage['jquery.sidebar.js'][153]++;
+-  height = container.height();
+-  _$jscoverage['jquery.sidebar.js'][154]++;
+-  injectWidth = inject.width();
+-  _$jscoverage['jquery.sidebar.js'][155]++;
+-  injectHeight = inject.height();
+-  _$jscoverage['jquery.sidebar.js'][157]++;
+-  containerCss = {height: height, width: width};
+-  _$jscoverage['jquery.sidebar.js'][161]++;
+-  bodyCss = {height: height, width: width};
+-  _$jscoverage['jquery.sidebar.js'][166]++;
+-  if (position === "left" || position === "right") {
+-    _$jscoverage['jquery.sidebar.js'][167]++;
+-    margin = width - injectWidth;
+-    _$jscoverage['jquery.sidebar.js'][168]++;
+-    injectCss = {height: height, width: injectWidth};
+-    _$jscoverage['jquery.sidebar.js'][172]++;
+-    containerCss.top = options.top || (parent.height() / 2) - (height / 2) + "px";
+-  }
+-  else {
+-    _$jscoverage['jquery.sidebar.js'][175]++;
+-    margin = height - injectHeight;
+-    _$jscoverage['jquery.sidebar.js'][176]++;
+-    injectCss = {height: injectHeight, width: width};
+-    _$jscoverage['jquery.sidebar.js'][180]++;
+-    containerCss.left = options.left || (parent.width() / 2) - (width / 2) + "px";
+-  }
+-  _$jscoverage['jquery.sidebar.js'][183]++;
+-  containerCss[position] = "-" + margin + "px";
+-  _$jscoverage['jquery.sidebar.js'][184]++;
+-  injectCss[position] = margin + "px";
+-  _$jscoverage['jquery.sidebar.js'][185]++;
+-  options.animate.container.enter[position] = 0;
+-  _$jscoverage['jquery.sidebar.js'][186]++;
+-  options.animate.container.leave[position] = "-" + margin;
+-  _$jscoverage['jquery.sidebar.js'][189]++;
+-  container.css(containerCss);
+-  _$jscoverage['jquery.sidebar.js'][192]++;
+-  inject.css(injectCss);
+-  _$jscoverage['jquery.sidebar.js'][195]++;
+-  body.css(bodyCss).hide();
+-  _$jscoverage['jquery.sidebar.js'][198]++;
+-  $(this).addClass("sidebar-menu").find("li").bind("mouseenter.sidebar", options.callback.item.enter).bind("mouseleave.sidebar", options.callback.item.leave);
+-  _$jscoverage['jquery.sidebar.js'][203]++;
+-  if (options.open) {
+-    _$jscoverage['jquery.sidebar.js'][204]++;
+-    container.bind(options.open, open);
+-  }
+-  _$jscoverage['jquery.sidebar.js'][206]++;
+-  if (options.close) {
+-    _$jscoverage['jquery.sidebar.js'][207]++;
+-    container.bind(options.close, close);
+-  }
+-  _$jscoverage['jquery.sidebar.js'][211]++;
+-  options.container = container;
+-  _$jscoverage['jquery.sidebar.js'][212]++;
+-  options.inject = inject;
+-  _$jscoverage['jquery.sidebar.js'][213]++;
+-  options.body = body;
+-  _$jscoverage['jquery.sidebar.js'][214]++;
+-  elem.data("sidebar", options);
+-  _$jscoverage['jquery.sidebar.js'][216]++;
+-  parent.resize((function () {
+-  _$jscoverage['jquery.sidebar.js'][217]++;
+-  if (position === "left" || position === "right") {
+-    _$jscoverage['jquery.sidebar.js'][218]++;
+-    container.css({top: ($(this).height() / 2) - (height / 2) + "px"});
+-  }
+-  else {
+-    _$jscoverage['jquery.sidebar.js'][220]++;
+-    container.css({left: ($(this).width() / 2) - (width / 2) + "px"});
+-  }
+-}));
+-}));
+-});
+-})(jQuery, this);
+-_$jscoverage['jquery.sidebar.js'].source = ["/*!"," * jquery.sidebar v1.0.2"," * http://sideroad.secret.jp/"," *"," * Copyright (c) 2009 sideroad"," *"," * Dual licensed under the MIT or GPL Version 2 licenses."," * Date: 2009-09-01"," */","(function( $, _window ) {","    $.fn.sidebar = function(options){","","        return this.each(function(){","            var elem = $(this),","                data = elem.data(\"sidebar\")||{},","                margin,","                width,","                height,","                duration = data.duration,","                injectWidth,","                injectHeight,","                injectCss,","                containerCss,","                bodyCss,","                position,","                enter,","                leave,","                opened,","                closed,","                isInnerElement,","                container = $(\"&lt;div&gt;&lt;div/&gt;\"),","                inject = $(\"&lt;div&gt;&lt;div/&gt;\"),","                body = $(\"&lt;div&gt;&lt;div/&gt;\"),","                root,","                parent,","                open = function(){","                    var data = elem.data(\"sidebar\") || {},","                        opened = data.callback.sidebar.open,","                        container = data.container,","                        inject = data.inject,","                        body = data.body;","                    ","                    if (data.isEnter || data.isProcessing) {","                        return;","                    }","                    data.isEnter = true;","                    data.isProcessing = true;","                    container.animate(data.animate.container.enter, {","                        duration: duration,","                        complete: function(){","                            inject.fadeOut(duration, function(){","                                body.show(\"clip\", duration,function(){","                                    data.isProcessing = false;","                                    if(opened) {","                                        opened();","                                    }","                                });","                            });","                        }","                    });","                },","                close = function(){","                    var data = elem.data(\"sidebar\") || {},","                        closed = data.callback.sidebar.close,","                        container = data.container,","                        inject = data.inject,","                        body = data.body;","                       ","                    if(!data.isEnter || data.isProcessing ) {","                        return;","                    }","                    data.isProcessing = true;","                    container.animate(data.animate.container.leave, {","                        duration: duration,","                        complete: function(){","                            body.hide(\"clip\", duration, function(){","                                inject.fadeIn(duration, function(){","                                    data.isEnter = false;","                                    data.isProcessing = false;","                                    if(closed) {","                                        closed();","                                    }","                                });","                            });","                        }","                    });","                };","            ","            ","            if(typeof options === \"string\"){","                switch(options){","                    case \"open\" :","                        open();","                        break;","                    case \"close\" : ","                        close();","                        break;","                }","                return;","            }","                ","            //default setting","            options = $.extend(true, {","                root : $(document.body),","                position : \"left\",","                callback: {","                    item : {","                        enter : function(){","                            $(this).animate({marginLeft:\"5px\"},250);","                        },","                        leave : function(){","                            $(this).animate({marginLeft:\"0px\"},250);","                        }","                    },","                    sidebar : {","                        open : function(){","                            ","                        },","                        close : function(){","                            ","                        }","                    }","                },","                animate : {","                    container : {","                        enter : {},","                        leave : {}","                    }","                },","                duration : 200,","                open : \"mouseenter.sidebar\",","                close : \"mouseleave.sidebar\"","            }, options);","            ","            root = options.root;","            isInnerElement = !root.is(document.body);","            parent = ( isInnerElement ) ? root.addClass(\"sidebar-root\") : $(_window);","            ","            position = options.position;","            duration = options.duration;","            ","            container.attr(\"id\", \"jquerySideBar\" + new Date().getTime()).addClass(\"sidebar-container\").addClass(position);","            inject.addClass(\"sidebar-inject\").addClass(position);","            body.addClass(\"sidebar-body\");","            ","            //append to body","            body.append(this);","            container.append(body);","            container.append(inject);","            root.append(container);","            ","            width = container.width();","            height = container.height();","            injectWidth = inject.width();","            injectHeight = inject.height();","            ","            containerCss = {","                height: height,","                width: width","            };","            bodyCss = {","                height: height,","                width: width","            };","            ","            if(position === \"left\" || position === \"right\") {","                margin = width - injectWidth;","                injectCss = {","                    height : height,","                    width : injectWidth","                };","                containerCss.top = options.top || (parent.height()/2) - (height/2) + \"px\";","                ","            } else {","                margin = height - injectHeight;","                injectCss = {","                    height : injectHeight,","                    width : width","                };","                containerCss.left = options.left || (parent.width()/2) - (width/2) + \"px\";","            }","            ","            containerCss[position] = \"-\" + margin + \"px\";","            injectCss[position] = margin + \"px\";","            options.animate.container.enter[position] = 0;","            options.animate.container.leave[position] = \"-\" + margin;","            ","            //container","            container.css(containerCss);","            ","            //inject","            inject.css(injectCss);","            ","            //body","            body.css(bodyCss).hide();","            ","            //menu callback","            $(this).addClass(\"sidebar-menu\").find(\"li\")","                .bind(\"mouseenter.sidebar\",options.callback.item.enter)","                .bind(\"mouseleave.sidebar\",options.callback.item.leave);","            ","            //container events","            if(options.open) {","                container.bind(options.open,open);","            }","            if(options.close) {","                container.bind(options.close,close);","            }","            ","            //store data","            options.container = container;","            options.inject = inject;","            options.body = body;","            elem.data(\"sidebar\", options);","            ","            parent.resize(function(){","                if(position === \"left\" || position === \"right\") {","                    container.css({top:($(this).height()/2) - (height/2) + \"px\"});","                } else {","                    container.css({left:($(this).width()/2) - (width/2) + \"px\"});","                }","            });","            ","        });","    };","}(jQuery, this));"];
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/sidebar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/sidebar.css	(revision 15488)
+@@ -1,127 +0,0 @@
+-* {
+-    margin:0;
+-    padding:0;
+-}
+-
+-.sidebar-root{
+-    position : relative;
+-    overflow : hidden;
+-}
+-
+-.sidebar-root div.sidebar-container{
+-    position: absolute;
+-}
+-
+-div.sidebar-container {
+-    width : 100px;
+-    height : 200px;
+-    position:fixed;
+-    background-color:#000000;
+-    filter: alpha(opacity=87);
+-    -moz-opacity:0.87;
+-    opacity:0.87;
+-    -moz-box-shadow:0px 0px 20px #000000;
+-    -webkit-box-shadow:0px 0px 20px #000000;
+-    box-shadow:0px 0px 20px #000000;
+-}
+-
+-div.sidebar-container.left {
+-    top:50%;
+-    left:0px;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-topright: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-top-right-radius: 10px;
+-}
+-
+-div.sidebar-container.right {
+-    top:50%;
+-    right:0px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-container.top {
+-    top:0px;
+-    left:50%;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-}
+-
+-div.sidebar-container.bottom {
+-    bottom:0px;
+-    left:50%;
+-    -moz-border-radius-topright: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-top-right-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-inject {
+-    position:absolute;
+-}
+-div.sidebar-inject.left {
+-    background:url("inject-left.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.right {
+-    background:url("inject-right.png") center no-repeat;
+-    top:0px;
+-    left:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.top {
+-    background:url("inject-top.png") center no-repeat;
+-    bottom:0px;
+-    left:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-inject.bottom {
+-    background:url("inject-bottom.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-body {
+-    margin:20px;
+-    position:absolute;
+-    top:0px;
+-    left:0px;
+-    color:#FFFFFF;
+-}
+-
+-ul.sidebar-menu {
+-    font-size:12pt;
+-    font-weight:bold;
+-    list-style:none;
+-    text-decoration:none;
+-    color:white;
+-}
+-
+-ul.sidebar-menu li{
+-    line-height:1.5em;
+-}
+-
+-a,a:visited {
+-    color:white;
+-    text-decoration:none;
+-    font-weight:bold;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/sidebar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/sidebar.css	(revision 15488)
+@@ -1,127 +0,0 @@
+-* {
+-    margin:0;
+-    padding:0;
+-}
+-
+-.sidebar-root{
+-    position : relative;
+-    overflow : hidden;
+-}
+-
+-.sidebar-root div.sidebar-container{
+-    position: absolute;
+-}
+-
+-div.sidebar-container {
+-    width : 100px;
+-    height : 200px;
+-    position:fixed;
+-    background-color:#4F8FFF;
+-    filter: alpha(opacity=87);
+-    -moz-opacity:0.87;
+-    opacity:0.87;
+-    -moz-box-shadow:0px 0px 20px #4F8FFF;
+-    -webkit-box-shadow:0px 0px 20px #4F8FFF;
+-    box-shadow:0px 0px 20px #4F8FFF;
+-}
+-
+-div.sidebar-container.left {
+-    top:50%;
+-    left:0px;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-topright: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-top-right-radius: 10px;
+-}
+-
+-div.sidebar-container.right {
+-    top:50%;
+-    right:0px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-container.top {
+-    top:0px;
+-    left:50%;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-}
+-
+-div.sidebar-container.bottom {
+-    bottom:0px;
+-    left:50%;
+-    -moz-border-radius-topright: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-top-right-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-inject {
+-    position:absolute;
+-}
+-div.sidebar-inject.left {
+-    background:url("inject-left.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.right {
+-    background:url("inject-right.png") center no-repeat;
+-    top:0px;
+-    left:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.top {
+-    background:url("inject-top.png") center no-repeat;
+-    bottom:0px;
+-    left:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-inject.bottom {
+-    background:url("inject-bottom.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-body {
+-    margin:20px;
+-    position:absolute;
+-    top:0px;
+-    left:0px;
+-    color:#FFFFFF;
+-}
+-
+-ul.sidebar-menu {
+-    font-size:12pt;
+-    font-weight:bold;
+-    list-style:none;
+-    text-decoration:none;
+-    color:white;
+-}
+-
+-ul.sidebar-menu li{
+-    line-height:1.5em;
+-}
+-
+-a,a:visited {
+-    color:white;
+-    text-decoration:none;
+-    font-weight:bold;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/sidebar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/sidebar.css	(revision 15488)
+@@ -1,127 +0,0 @@
+-* {
+-    margin:0;
+-    padding:0;
+-}
+-
+-.sidebar-root{
+-    position : relative;
+-    overflow : hidden;
+-}
+-
+-.sidebar-root div.sidebar-container{
+-    position: absolute;
+-}
+-
+-div.sidebar-container {
+-    width : 100px;
+-    height : 200px;
+-    position:fixed;
+-    background-color:#FF3F3F;
+-    filter: alpha(opacity=87);
+-    -moz-opacity:0.87;
+-    opacity:0.87;
+-    -moz-box-shadow:0px 0px 20px #FF3F3F;
+-    -webkit-box-shadow:0px 0px 20px #FF3F3F;
+-    box-shadow:0px 0px 20px #FF3F3F;
+-}
+-
+-div.sidebar-container.left {
+-    top:50%;
+-    left:0px;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-topright: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-top-right-radius: 10px;
+-}
+-
+-div.sidebar-container.right {
+-    top:50%;
+-    right:0px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-container.top {
+-    top:0px;
+-    left:50%;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-}
+-
+-div.sidebar-container.bottom {
+-    bottom:0px;
+-    left:50%;
+-    -moz-border-radius-topright: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-top-right-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-inject {
+-    position:absolute;
+-}
+-div.sidebar-inject.left {
+-    background:url("inject-left.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.right {
+-    background:url("inject-right.png") center no-repeat;
+-    top:0px;
+-    left:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.top {
+-    background:url("inject-top.png") center no-repeat;
+-    bottom:0px;
+-    left:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-inject.bottom {
+-    background:url("inject-bottom.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-body {
+-    margin:20px;
+-    position:absolute;
+-    top:0px;
+-    left:0px;
+-    color:#FFFFFF;
+-}
+-
+-ul.sidebar-menu {
+-    font-size:12pt;
+-    font-weight:bold;
+-    list-style:none;
+-    text-decoration:none;
+-    color:white;
+-}
+-
+-ul.sidebar-menu li{
+-    line-height:1.5em;
+-}
+-
+-a,a:visited {
+-    color:white;
+-    text-decoration:none;
+-    font-weight:bold;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/out.temp
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/out.temp	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/out.temp	(revision 15488)
+@@ -1,89 +0,0 @@
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/test/jquery.sidebar.html"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/qunit.css"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/sidebar.css"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/jquery.js"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/jquery-ui.js"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/qunit.js"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/src/jquery.sidebar.js"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/test/jquery.sidebar.js"]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/test/jquery.sidebar.html"]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/qunit.css"]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/sidebar.css"]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/jquery.js"]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/jquery-ui.js"]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/lib/qunit.js"]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/src/jquery.sidebar.js"]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/test/jquery.sidebar.js"]
+-["debug","inject","/Users/sideroad/workspace/jquery.sidebar/node_modules/grunt-qunit-cov/tasks/qunit-cov/qunit.js"]
+-["begin"]
+-["moduleStart","jquery.sidebar"]
+-["testStart","default/left"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-left.png"]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"\"-50px\"","\"-50px\"",null,null]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-left.png"]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["testDone","default/left",0,8,8]
+-["testStart","top"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-top.png"]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"\"-150px\"","\"-150px\"",null,null]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-top.png"]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["testDone","top",0,8,8]
+-["testStart","right"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-right.png"]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"\"-50px\"","\"-50px\"",null,null]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-right.png"]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["testDone","right",0,8,8]
+-["testStart","bottom"]
+-["debug","onResourceRequested","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-bottom.png"]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"\"-150px\"","\"-150px\"",null,null]
+-["debug","onResourceReceived","file:///Users/sideroad/workspace/jquery.sidebar/cov/in/css/dark-glass/inject-bottom.png"]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["testDone","bottom",0,8,8]
+-["testStart","open-event"]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"\"-50px\"","\"-50px\"",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["testDone","open-event",0,8,8]
+-["testStart","call open/close method manually"]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"1","1",null,null]
+-["log",true,"\"-50px\"","\"-50px\"",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["log",true,"undefined","undefined",null,null]
+-["testDone","call open/close method manually",0,8,8]
+-["moduleDone","jquery.sidebar",0,48,48]
+-["done",0,48,48,7650,{"jquery.sidebar.js":[null,null,null,null,null,null,null,null,null,null,1,1,null,8,8,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,6,null,null,null,null,null,6,0,null,6,6,6,null,null,6,6,6,6,6,null,null,null,null,null,null,null,6,null,null,null,null,null,6,0,null,6,6,null,null,6,6,6,6,6,6,null,null,null,null,null,null,null,null,8,2,null,1,1,null,1,1,null,2,null,null,null,6,null,null,null,null,null,0,null,null,0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,6,6,6,null,6,6,null,6,6,6,null,null,6,6,6,6,null,6,6,6,6,null,6,null,null,null,6,null,null,null,null,6,4,4,null,null,null,4,null,null,2,2,null,null,null,2,null,null,6,6,6,6,null,null,6,null,null,6,null,null,6,null,null,6,null,null,null,null,6,6,null,6,6,null,null,null,6,6,6,6,null,6,0,0,null,0]}]
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/coverage.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/coverage.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/coverage.html	(revision 15488)
+@@ -1 +0,0 @@
+-<h2>Total Coverage</h2><table><tr><td width="150"><table width="100%" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td width="91%" bgcolor="#00CC33">&nbsp;</td><td width=" 10091%" bgcolor="#990000"></td></tr></tbody></table></td><td width="25" align="right"><strong>91%</strong></td><td></td></tr></table><h2>Detailed Coverage</h2><table><tr><td width="150"><table width="100%" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td width="91%" bgcolor="#00CC33">&nbsp;</td><td width=" 10091%" bgcolor="#990000"></td></tr></tbody></table></td><td width="25" align="right"><strong>91%</strong></td><td><a href="jquery.sidebar.js.html">jquery.sidebar.js</a></td></tr></table><table><h2>Uncovered Files</h2></table>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/jquery.sidebar.js.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/jquery.sidebar.js.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/cov/out/jquery.sidebar.js.html	(revision 15488)
+@@ -1,260 +0,0 @@
+-<!DOCTYPE html>
+-<html>
+-<head>
+-    <style>
+-        .code {
+-            white-space: pre;
+-            font-family: courier new;
+-            width: 100%;            
+-        }
+-        
+-        .miss {
+-            background-color: #FF0000;
+-        }
+-        
+-        .hit {
+-            background-color: #94FF7C;
+-        }
+-        
+-        .undef {
+-            background-color: #FFFFFF;
+-        } 
+-
+-        .nottested {
+-            background-color: #FFFF00;
+-        }         
+-    </style>
+-</head>
+-<body>
+-
+-<div class="code undef">/*!</div>
+-<div class="code undef"> * jquery.sidebar v1.0.2</div>
+-<div class="code undef"> * http://sideroad.secret.jp/</div>
+-<div class="code undef"> *</div>
+-<div class="code undef"> * Copyright (c) 2009 sideroad</div>
+-<div class="code undef"> *</div>
+-<div class="code undef"> * Dual licensed under the MIT or GPL Version 2 licenses.</div>
+-<div class="code undef"> * Date: 2009-09-01</div>
+-<div class="code undef"> */</div>
+-<div class="code hit">(function( $, _window ) {</div>
+-<div class="code hit">    $.fn.sidebar = function(options){</div>
+-<div class="code undef"></div>
+-<div class="code hit">        return this.each(function(){</div>
+-<div class="code hit">            var elem = $(this),</div>
+-<div class="code undef">                data = elem.data("sidebar")||{},</div>
+-<div class="code undef">                margin,</div>
+-<div class="code undef">                width,</div>
+-<div class="code undef">                height,</div>
+-<div class="code undef">                duration = data.duration,</div>
+-<div class="code undef">                injectWidth,</div>
+-<div class="code undef">                injectHeight,</div>
+-<div class="code undef">                injectCss,</div>
+-<div class="code undef">                containerCss,</div>
+-<div class="code undef">                bodyCss,</div>
+-<div class="code undef">                position,</div>
+-<div class="code undef">                enter,</div>
+-<div class="code undef">                leave,</div>
+-<div class="code undef">                opened,</div>
+-<div class="code undef">                closed,</div>
+-<div class="code undef">                isInnerElement,</div>
+-<div class="code undef">                container = $("&lt;div&gt;<div/>"),</div>
+-<div class="code undef">                inject = $("&lt;div&gt;<div/>"),</div>
+-<div class="code undef">                body = $("&lt;div&gt;<div/>"),</div>
+-<div class="code undef">                root,</div>
+-<div class="code undef">                parent,</div>
+-<div class="code undef">                open = function(){</div>
+-<div class="code hit">                    var data = elem.data("sidebar") || {},</div>
+-<div class="code undef">                        opened = data.callback.sidebar.open,</div>
+-<div class="code undef">                        container = data.container,</div>
+-<div class="code undef">                        inject = data.inject,</div>
+-<div class="code undef">                        body = data.body;</div>
+-<div class="code undef">                    </div>
+-<div class="code hit">                    if (data.isEnter || data.isProcessing) {</div>
+-<div class="code miss">                        return;</div>
+-<div class="code undef">                    }</div>
+-<div class="code hit">                    data.isEnter = true;</div>
+-<div class="code hit">                    data.isProcessing = true;</div>
+-<div class="code hit">                    container.animate(data.animate.container.enter, {</div>
+-<div class="code undef">                        duration: duration,</div>
+-<div class="code undef">                        complete: function(){</div>
+-<div class="code hit">                            inject.fadeOut(duration, function(){</div>
+-<div class="code hit">                                body.show("clip", duration,function(){</div>
+-<div class="code hit">                                    data.isProcessing = false;</div>
+-<div class="code hit">                                    if(opened) {</div>
+-<div class="code hit">                                        opened();</div>
+-<div class="code undef">                                    }</div>
+-<div class="code undef">                                });</div>
+-<div class="code undef">                            });</div>
+-<div class="code undef">                        }</div>
+-<div class="code undef">                    });</div>
+-<div class="code undef">                },</div>
+-<div class="code undef">                close = function(){</div>
+-<div class="code hit">                    var data = elem.data("sidebar") || {},</div>
+-<div class="code undef">                        closed = data.callback.sidebar.close,</div>
+-<div class="code undef">                        container = data.container,</div>
+-<div class="code undef">                        inject = data.inject,</div>
+-<div class="code undef">                        body = data.body;</div>
+-<div class="code undef">                       </div>
+-<div class="code hit">                    if(!data.isEnter || data.isProcessing ) {</div>
+-<div class="code miss">                        return;</div>
+-<div class="code undef">                    }</div>
+-<div class="code hit">                    data.isProcessing = true;</div>
+-<div class="code hit">                    container.animate(data.animate.container.leave, {</div>
+-<div class="code undef">                        duration: duration,</div>
+-<div class="code undef">                        complete: function(){</div>
+-<div class="code hit">                            body.hide("clip", duration, function(){</div>
+-<div class="code hit">                                inject.fadeIn(duration, function(){</div>
+-<div class="code hit">                                    data.isEnter = false;</div>
+-<div class="code hit">                                    data.isProcessing = false;</div>
+-<div class="code hit">                                    if(closed) {</div>
+-<div class="code hit">                                        closed();</div>
+-<div class="code undef">                                    }</div>
+-<div class="code undef">                                });</div>
+-<div class="code undef">                            });</div>
+-<div class="code undef">                        }</div>
+-<div class="code undef">                    });</div>
+-<div class="code undef">                };</div>
+-<div class="code undef">            </div>
+-<div class="code undef">            </div>
+-<div class="code hit">            if(typeof options === "string"){</div>
+-<div class="code hit">                switch(options){</div>
+-<div class="code undef">                    case "open" :</div>
+-<div class="code hit">                        open();</div>
+-<div class="code hit">                        break;</div>
+-<div class="code undef">                    case "close" : </div>
+-<div class="code hit">                        close();</div>
+-<div class="code hit">                        break;</div>
+-<div class="code undef">                }</div>
+-<div class="code hit">                return;</div>
+-<div class="code undef">            }</div>
+-<div class="code undef">                </div>
+-<div class="code undef">            //default setting</div>
+-<div class="code hit">            options = $.extend(true, {</div>
+-<div class="code undef">                root : $(document.body),</div>
+-<div class="code undef">                position : "left",</div>
+-<div class="code undef">                callback: {</div>
+-<div class="code undef">                    item : {</div>
+-<div class="code undef">                        enter : function(){</div>
+-<div class="code miss">                            $(this).animate({marginLeft:"5px"},250);</div>
+-<div class="code undef">                        },</div>
+-<div class="code undef">                        leave : function(){</div>
+-<div class="code miss">                            $(this).animate({marginLeft:"0px"},250);</div>
+-<div class="code undef">                        }</div>
+-<div class="code undef">                    },</div>
+-<div class="code undef">                    sidebar : {</div>
+-<div class="code undef">                        open : function(){</div>
+-<div class="code undef">                            </div>
+-<div class="code undef">                        },</div>
+-<div class="code undef">                        close : function(){</div>
+-<div class="code undef">                            </div>
+-<div class="code undef">                        }</div>
+-<div class="code undef">                    }</div>
+-<div class="code undef">                },</div>
+-<div class="code undef">                animate : {</div>
+-<div class="code undef">                    container : {</div>
+-<div class="code undef">                        enter : {},</div>
+-<div class="code undef">                        leave : {}</div>
+-<div class="code undef">                    }</div>
+-<div class="code undef">                },</div>
+-<div class="code undef">                duration : 200,</div>
+-<div class="code undef">                open : "mouseenter.sidebar",</div>
+-<div class="code undef">                close : "mouseleave.sidebar"</div>
+-<div class="code undef">            }, options);</div>
+-<div class="code undef">            </div>
+-<div class="code hit">            root = options.root;</div>
+-<div class="code hit">            isInnerElement = !root.is(document.body);</div>
+-<div class="code hit">            parent = ( isInnerElement ) ? root.addClass("sidebar-root") : $(_window);</div>
+-<div class="code undef">            </div>
+-<div class="code hit">            position = options.position;</div>
+-<div class="code hit">            duration = options.duration;</div>
+-<div class="code undef">            </div>
+-<div class="code hit">            container.attr("id", "jquerySideBar" + new Date().getTime()).addClass("sidebar-container").addClass(position);</div>
+-<div class="code hit">            inject.addClass("sidebar-inject").addClass(position);</div>
+-<div class="code hit">            body.addClass("sidebar-body");</div>
+-<div class="code undef">            </div>
+-<div class="code undef">            //append to body</div>
+-<div class="code hit">            body.append(this);</div>
+-<div class="code hit">            container.append(body);</div>
+-<div class="code hit">            container.append(inject);</div>
+-<div class="code hit">            root.append(container);</div>
+-<div class="code undef">            </div>
+-<div class="code hit">            width = container.width();</div>
+-<div class="code hit">            height = container.height();</div>
+-<div class="code hit">            injectWidth = inject.width();</div>
+-<div class="code hit">            injectHeight = inject.height();</div>
+-<div class="code undef">            </div>
+-<div class="code hit">            containerCss = {</div>
+-<div class="code undef">                height: height,</div>
+-<div class="code undef">                width: width</div>
+-<div class="code undef">            };</div>
+-<div class="code hit">            bodyCss = {</div>
+-<div class="code undef">                height: height,</div>
+-<div class="code undef">                width: width</div>
+-<div class="code undef">            };</div>
+-<div class="code undef">            </div>
+-<div class="code hit">            if(position === "left" || position === "right") {</div>
+-<div class="code hit">                margin = width - injectWidth;</div>
+-<div class="code hit">                injectCss = {</div>
+-<div class="code undef">                    height : height,</div>
+-<div class="code undef">                    width : injectWidth</div>
+-<div class="code undef">                };</div>
+-<div class="code hit">                containerCss.top = options.top || (parent.height()/2) - (height/2) + "px";</div>
+-<div class="code undef">                </div>
+-<div class="code undef">            } else {</div>
+-<div class="code hit">                margin = height - injectHeight;</div>
+-<div class="code hit">                injectCss = {</div>
+-<div class="code undef">                    height : injectHeight,</div>
+-<div class="code undef">                    width : width</div>
+-<div class="code undef">                };</div>
+-<div class="code hit">                containerCss.left = options.left || (parent.width()/2) - (width/2) + "px";</div>
+-<div class="code undef">            }</div>
+-<div class="code undef">            </div>
+-<div class="code hit">            containerCss[position] = "-" + margin + "px";</div>
+-<div class="code hit">            injectCss[position] = margin + "px";</div>
+-<div class="code hit">            options.animate.container.enter[position] = 0;</div>
+-<div class="code hit">            options.animate.container.leave[position] = "-" + margin;</div>
+-<div class="code undef">            </div>
+-<div class="code undef">            //container</div>
+-<div class="code hit">            container.css(containerCss);</div>
+-<div class="code undef">            </div>
+-<div class="code undef">            //inject</div>
+-<div class="code hit">            inject.css(injectCss);</div>
+-<div class="code undef">            </div>
+-<div class="code undef">            //body</div>
+-<div class="code hit">            body.css(bodyCss).hide();</div>
+-<div class="code undef">            </div>
+-<div class="code undef">            //menu callback</div>
+-<div class="code hit">            $(this).addClass("sidebar-menu").find("li")</div>
+-<div class="code undef">                .bind("mouseenter.sidebar",options.callback.item.enter)</div>
+-<div class="code undef">                .bind("mouseleave.sidebar",options.callback.item.leave);</div>
+-<div class="code undef">            </div>
+-<div class="code undef">            //container events</div>
+-<div class="code hit">            if(options.open) {</div>
+-<div class="code hit">                container.bind(options.open,open);</div>
+-<div class="code undef">            }</div>
+-<div class="code hit">            if(options.close) {</div>
+-<div class="code hit">                container.bind(options.close,close);</div>
+-<div class="code undef">            }</div>
+-<div class="code undef">            </div>
+-<div class="code undef">            //store data</div>
+-<div class="code hit">            options.container = container;</div>
+-<div class="code hit">            options.inject = inject;</div>
+-<div class="code hit">            options.body = body;</div>
+-<div class="code hit">            elem.data("sidebar", options);</div>
+-<div class="code undef">            </div>
+-<div class="code hit">            parent.resize(function(){</div>
+-<div class="code miss">                if(position === "left" || position === "right") {</div>
+-<div class="code miss">                    container.css({top:($(this).height()/2) - (height/2) + "px"});</div>
+-<div class="code undef">                } else {</div>
+-<div class="code miss">                    container.css({left:($(this).width()/2) - (width/2) + "px"});</div>
+-<div class="code undef">                }</div>
+-<div class="code undef">            });</div>
+-<div class="code undef">            </div>
+-<div class="code undef">        });</div>
+-<div class="code undef">    };</div>
+-<div class="code undef">}(jQuery, this));</div>
+-<div class="code undef"></div>
+-
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/sidebar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/sidebar.css	(revision 15488)
+@@ -1,127 +0,0 @@
+-* {
+-    margin:0;
+-    padding:0;
+-}
+-
+-.sidebar-root{
+-    position : relative;
+-    overflow : hidden;
+-}
+-
+-.sidebar-root div.sidebar-container{
+-    position: absolute;
+-}
+-
+-div.sidebar-container {
+-    width : 100px;
+-    height : 200px;
+-    position:fixed;
+-    background-color:#3764b2;
+-    filter: alpha(opacity=87);
+-    -moz-opacity:0.87;
+-    opacity:0.87;
+-    -moz-box-shadow:0px 0px 20px #3764b2;
+-    -webkit-box-shadow:0px 0px 20px #3764b2;
+-    box-shadow:0px 0px 20px #3764b2;
+-}
+-
+-div.sidebar-container.left {
+-    top:50%;
+-    left:0px;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-topright: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-top-right-radius: 10px;
+-}
+-
+-div.sidebar-container.right {
+-    top:50%;
+-    right:0px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-container.top {
+-    top:0px;
+-    left:50%;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-}
+-
+-div.sidebar-container.bottom {
+-    bottom:0px;
+-    left:50%;
+-    -moz-border-radius-topright: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-top-right-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-inject {
+-    position:absolute;
+-}
+-div.sidebar-inject.left {
+-    background:url("inject-left.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.right {
+-    background:url("inject-right.png") center no-repeat;
+-    top:0px;
+-    left:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.top {
+-    background:url("inject-top.png") center no-repeat;
+-    bottom:0px;
+-    left:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-inject.bottom {
+-    background:url("inject-bottom.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-body {
+-    margin:20px;
+-    position:absolute;
+-    top:0px;
+-    left:0px;
+-    color:#FFFFFF;
+-}
+-
+-ul.sidebar-menu {
+-    font-size:12pt;
+-    font-weight:bold;
+-    list-style:none;
+-    text-decoration:none;
+-    color:white;
+-}
+-
+-ul.sidebar-menu li{
+-    line-height:1.5em;
+-}
+-
+-a,a:visited {
+-    color:white;
+-    text-decoration:none;
+-    font-weight:bold;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/sidebar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/sidebar.css	(revision 15488)
+@@ -1,127 +0,0 @@
+-* {
+-    margin:0;
+-    padding:0;
+-}
+-
+-.sidebar-root{
+-    position : relative;
+-    overflow : hidden;
+-}
+-
+-.sidebar-root div.sidebar-container{
+-    position: absolute;
+-}
+-
+-div.sidebar-container {
+-    width : 100px;
+-    height : 200px;
+-    position:fixed;
+-    background-color:#FF3F3F;
+-    filter: alpha(opacity=87);
+-    -moz-opacity:0.87;
+-    opacity:0.87;
+-    -moz-box-shadow:0px 0px 20px #FF3F3F;
+-    -webkit-box-shadow:0px 0px 20px #FF3F3F;
+-    box-shadow:0px 0px 20px #FF3F3F;
+-}
+-
+-div.sidebar-container.left {
+-    top:50%;
+-    left:0px;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-topright: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-top-right-radius: 10px;
+-}
+-
+-div.sidebar-container.right {
+-    top:50%;
+-    right:0px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-container.top {
+-    top:0px;
+-    left:50%;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-}
+-
+-div.sidebar-container.bottom {
+-    bottom:0px;
+-    left:50%;
+-    -moz-border-radius-topright: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-top-right-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-inject {
+-    position:absolute;
+-}
+-div.sidebar-inject.left {
+-    background:url("inject-left.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.right {
+-    background:url("inject-right.png") center no-repeat;
+-    top:0px;
+-    left:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.top {
+-    background:url("inject-top.png") center no-repeat;
+-    bottom:0px;
+-    left:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-inject.bottom {
+-    background:url("inject-bottom.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-body {
+-    margin:20px;
+-    position:absolute;
+-    top:0px;
+-    left:0px;
+-    color:#FFFFFF;
+-}
+-
+-ul.sidebar-menu {
+-    font-size:12pt;
+-    font-weight:bold;
+-    list-style:none;
+-    text-decoration:none;
+-    color:white;
+-}
+-
+-ul.sidebar-menu li{
+-    line-height:1.5em;
+-}
+-
+-a,a:visited {
+-    color:white;
+-    text-decoration:none;
+-    font-weight:bold;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-top.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/sidebar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/sidebar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/sidebar.css	(revision 15488)
+@@ -1,127 +0,0 @@
+-* {
+-    margin:0;
+-    padding:0;
+-}
+-
+-.sidebar-root{
+-    position : relative;
+-    overflow : hidden;
+-}
+-
+-.sidebar-root div.sidebar-container{
+-    position: absolute;
+-}
+-
+-div.sidebar-container {
+-    width : 100px;
+-    height : 200px;
+-    position:fixed;
+-    background-color:#000000;
+-    filter: alpha(opacity=87);
+-    -moz-opacity:0.87;
+-    opacity:0.87;
+-    -moz-box-shadow:0px 0px 20px #000000;
+-    -webkit-box-shadow:0px 0px 20px #000000;
+-    box-shadow:0px 0px 20px #000000;
+-}
+-
+-div.sidebar-container.left {
+-    top:50%;
+-    left:0px;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-topright: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-top-right-radius: 10px;
+-}
+-
+-div.sidebar-container.right {
+-    top:50%;
+-    right:0px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-container.top {
+-    top:0px;
+-    left:50%;
+-    -moz-border-radius-bottomright: 10px;
+-    -moz-border-radius-bottomleft: 10px;
+-    -webkit-border-bottom-right-radius: 10px;
+-    -webkit-border-bottom-left-radius: 10px;
+-    border-bottom-right-radius: 10px;
+-    border-bottom-left-radius: 10px;
+-}
+-
+-div.sidebar-container.bottom {
+-    bottom:0px;
+-    left:50%;
+-    -moz-border-radius-topright: 10px;
+-    -moz-border-radius-topleft: 10px;
+-    -webkit-border-top-right-radius: 10px;
+-    -webkit-border-top-left-radius: 10px;
+-    border-top-right-radius: 10px;
+-    border-top-left-radius: 10px;
+-}
+-
+-div.sidebar-inject {
+-    position:absolute;
+-}
+-div.sidebar-inject.left {
+-    background:url("inject-left.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.right {
+-    background:url("inject-right.png") center no-repeat;
+-    top:0px;
+-    left:0px;
+-    width : 50px;
+-}
+-
+-div.sidebar-inject.top {
+-    background:url("inject-top.png") center no-repeat;
+-    bottom:0px;
+-    left:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-inject.bottom {
+-    background:url("inject-bottom.png") center no-repeat;
+-    top:0px;
+-    right:0px;
+-    height : 50px;
+-}
+-
+-div.sidebar-body {
+-    margin:20px;
+-    position:absolute;
+-    top:0px;
+-    left:0px;
+-    color:#FFFFFF;
+-}
+-
+-ul.sidebar-menu {
+-    font-size:12pt;
+-    font-weight:bold;
+-    list-style:none;
+-    text-decoration:none;
+-    color:white;
+-}
+-
+-ul.sidebar-menu li{
+-    line-height:1.5em;
+-}
+-
+-a,a:visited {
+-    color:white;
+-    text-decoration:none;
+-    font-weight:bold;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-bottom.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-left.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-right.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/demo1.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/demo1.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/demo1.html	(revision 15488)
+@@ -1,67 +0,0 @@
+-﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+-"http://www.w3.org/TR/html4/loose.dtd">
+-<html xmlns="http://www.w3.org/1999/xhtml">
+-    <head>
+-        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+-        <title>jquery.sidebar.js</title>
+-        <link rel="stylesheet" type="text/css" href="css/blue-glass/sidebar.css" />
+-        <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
+-        <script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
+-        <script type="text/javascript" src="src/jquery.sidebar.js"></script>
+-    </head>
+-    <body>
+-        <ul id="demo_menu1" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu2" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu3" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-        <ul id="demo_menu4" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-
+-        <b style="font-size:80px;position:absolute;top:42%;left:35%;" >jquery.sidebar</b>
+-        <script type="text/javascript">
+-        $("ul#demo_menu1").sidebar();
+-        $("ul#demo_menu2").sidebar({
+-            position:"right",
+-            callback:{
+-                item : {
+-                    enter : function(){
+-                        $(this).find("a").animate({color:"red"}, 250);
+-                    },
+-                    leave : function(){
+-                        $(this).find("a").animate({color:"white"}, 250);
+-                    }
+-                }
+-            }
+-        });
+-        $("ul#demo_menu3").sidebar({
+-            position:"top",
+-          open:"click"
+-        });
+-        $("ul#demo_menu4").sidebar({
+-            position:"bottom"
+-        });
+-        </script>
+-    </body>
+-</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/testem.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/testem.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/testem.json	(revision 15488)
+@@ -1 +0,0 @@
+-{"launch_in_ci":["PhantomJS"],"tap":"tests.tap","test_page":"test/jquery.sidebar.html"}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/component.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/component.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/component.json	(revision 15488)
+@@ -1,23 +0,0 @@
+-{
+-  "name": "jquery.sidebar",
+-  "version": "0.0.0",
+-  "main": "./dist/jquery.sidebar.js",
+-  "ignore": [
+-    "**/.*",
+-    "node_modules",
+-    "components",
+-    "**/*.html",
+-    "package.json",
+-    "*.tap",
+-    "testem.json"
+-  ],
+-  "dependencies": {
+-    "jquery": ">= 1.8",
+-    "jquery-ui": ">= 1.8"
+-  },
+-  "repository": {
+-    "type": "git",
+-    "url": "git://github.com/sideroad/jquery.sidebar"
+-  }
+-
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/Gruntfile.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/Gruntfile.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/Gruntfile.js	(revision 15488)
+@@ -1,83 +0,0 @@
+-/*global module:false*/
+-module.exports = function(grunt) {
+-  "use strict";
+-
+-  // Project configuration.
+-  grunt.initConfig({
+-    pkg: grunt.file.readJSON('package.json'),
+-    testem : {
+-      options: {
+-        launch_in_ci: [
+-          'PhantomJS'
+-        ],
+-        tap: 'tests.tap'
+-      },
+-      main: {
+-        files: {
+-          test: [
+-            "test/*.html"
+-          ]
+-        }
+-      }
+-    },
+-    concat: {
+-      dist: {
+-        src: ['src/<%= pkg.name %>.js'],
+-        dest: 'dist/<%= pkg.name %>.js'
+-      }
+-    },
+-    min: {
+-      dist: {
+-        files: {
+-          'dist/<%= pkg.name %>.min.js': ['dist/<%= pkg.name %>.js']
+-        }
+-      }
+-    },
+-    "qunit-cov": {
+-      test:{
+-        minimum: 0.9,
+-        srcDir: 'src',
+-        depDirs: ['lib', 'test', 'css'],
+-        outDir: 'cov',
+-        testFiles: ['test/*.html']
+-      }
+-    },
+-    qunit: {
+-      files: ['test/**/*.html']
+-    },
+-    lint: {
+-      files: ['grunt.js', 'src/**/*.js']
+-    },
+-    watch: {
+-      files: '<config:lint.files>',
+-      tasks: 'default'
+-    },
+-    jshint: {
+-      options: {
+-        curly: true,
+-        eqeqeq: true,
+-        immed: true,
+-        latedef: true,
+-        newcap: true,
+-        noarg: true,
+-        sub: true,
+-        undef: true,
+-        boss: true,
+-        eqnull: true,
+-        browser: true
+-      },
+-      globals: {
+-        jQuery: true
+-      }
+-    }
+-  });
+-
+-  // Default task.
+-  grunt.loadNpmTasks('grunt-contrib-concat');
+-  grunt.loadNpmTasks('grunt-yui-compressor');
+-  grunt.loadNpmTasks('grunt-qunit-cov');
+-  grunt.loadNpmTasks('grunt-testem');
+-  grunt.loadNpmTasks('grunt-devtools');
+-  grunt.registerTask('default', ['testem', 'qunit-cov', 'concat', 'min']);
+-
+-};
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/README.md
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/README.md	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/README.md	(revision 15488)
+@@ -1,9 +0,0 @@
+-
+-### Install 
+-```sh
+-jam install jquery.sidebar
+-```
+-
+-### Usage
+-Please check the [jquery.sidebar](http://sideroad.secret.jp/plugins/jQuerySideBar/)
+-
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.html	(revision 15488)
+@@ -1,40 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-    <meta charset="utf-8">
+-    <title>jQuery SideBar Test Suite</title>
+-
+-
+-    <link rel="stylesheet" type="text/css" href="../lib/qunit.css" />
+-    <link rel="stylesheet" type="text/css" href="../css/dark-glass/sidebar.css" />
+-    
+-    <script type="text/javascript" src="../lib/jquery.js"></script>
+-    <script type="text/javascript" src="../lib/jquery-ui.js"></script>
+-    <script type="text/javascript" src="../lib/qunit.js" ></script>
+-    <script type="text/javascript" src="../src/jquery.sidebar.js"></script>
+-    <script type="text/javascript" src="jquery.sidebar.js"></script>
+-    
+-</head>
+-<body>
+-
+-<h1 id="qunit-header">jQuery SideBar Test Suite</h1>
+-<h2 id="qunit-banner"></h2>
+-<div id="qunit-testrunner-toolbar"></div>
+-<h2 id="qunit-userAgent"></h2>
+-<ol id="qunit-tests"></ol>
+-<div id="qunit-fixture">
+-
+-        <ul id="sidebar" >
+-            <li><a href="#" >jQuery</a></li>
+-            <li><a href="#" >Write</a></li>
+-            <li><a href="#" >Less</a></li>
+-            <li><a href="#" >Do</a></li>
+-            <li><a href="#" >More</a></li>
+-        </ul>
+-</div>
+-<script>
+-if (location.hash === '#testem')
+-    document.write('<script src="/testem.js"></'+'script>')
+-</script>
+-</body>
+-</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.js	(revision 15488)
+@@ -1,240 +0,0 @@
+-(function( $ ) {
+-
+-    module( "jquery.sidebar" );
+-    
+-    var destroy = function destroy(){
+-        $(".sidebar-container.left,.sidebar-container.top,.sidebar-container.right,.sidebar-container.bottom").remove();
+-    };
+-    
+-    asyncTest( "default/left", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "left";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-50px" );
+-        
+-        container.mouseenter();
+-    });
+-    asyncTest( "top", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "top";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-150px" );
+-        
+-        container.mouseenter();
+-    });
+-    asyncTest( "right", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "right";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-50px" );
+-        
+-        container.mouseenter();
+-    });
+-    
+-    asyncTest( "bottom", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "bottom";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-150px" );
+-        
+-        container.mouseenter();
+-    });
+-    
+-    
+-    asyncTest( "open-event", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "left";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            open : "click",
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        container.mouseleave();
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-50px" );
+-        
+-        container.click();
+-    });
+-    
+-    
+-    asyncTest( "call open/close method manually", function() {
+-        var elem = $("#sidebar"),
+-            inject,
+-            container,
+-            body,
+-            pos = "left";
+-            
+-        elem.sidebar({
+-            position : pos,
+-            open : "click",
+-            callback : {
+-                sidebar : {
+-                    open : function(){
+-                        ok( !inject.is(":visible") );
+-                        ok( body.is(":visible") );
+-                        elem.sidebar("close");
+-                    },
+-                    close : function(){
+-                        ok( inject.is(":visible") );
+-                        ok( !body.is(":visible") );
+-                        destroy();
+-                        start();
+-                    }
+-                }
+-            }
+-        });
+-        
+-        inject = $(".sidebar-inject."+pos);
+-        container = $(".sidebar-container."+pos);
+-        body = $(".sidebar-body");
+-        
+-        equal( inject.length, 1 );
+-        equal( container.length, 1 );
+-        equal( body.length, 1 );
+-        equal( container.css( pos ), "-50px" );
+-        
+-        elem.sidebar("open");
+-
+-    });
+-
+-})( jQuery );
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-bounce.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-bounce.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-bounce.js	(revision 15488)
+@@ -1,113 +0,0 @@
+-/*!
+- * jQuery UI Effects Bounce 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/bounce-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.bounce = function( o, done ) {
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-
+-		// defaults:
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		hide = mode === "hide",
+-		show = mode === "show",
+-		direction = o.direction || "up",
+-		distance = o.distance,
+-		times = o.times || 5,
+-
+-		// number of internal animations
+-		anims = times * 2 + ( show || hide ? 1 : 0 ),
+-		speed = o.duration / anims,
+-		easing = o.easing,
+-
+-		// utility:
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ),
+-		i,
+-		upAnim,
+-		downAnim,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	// Avoid touching opacity to prevent clearType and PNG issues in IE
+-	if ( show || hide ) {
+-		props.push( "opacity" );
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el ); // Create Wrapper
+-
+-	// default distance for the BIGGEST bounce is the outer Distance / 3
+-	if ( !distance ) {
+-		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+-	}
+-
+-	if ( show ) {
+-		downAnim = { opacity: 1 };
+-		downAnim[ ref ] = 0;
+-
+-		// if we are showing, force opacity 0 and set the initial position
+-		// then do the "first" animation
+-		el.css( "opacity", 0 )
+-			.css( ref, motion ? -distance * 2 : distance * 2 )
+-			.animate( downAnim, speed, easing );
+-	}
+-
+-	// start at the smallest distance if we are hiding
+-	if ( hide ) {
+-		distance = distance / Math.pow( 2, times - 1 );
+-	}
+-
+-	downAnim = {};
+-	downAnim[ ref ] = 0;
+-	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+-	for ( i = 0; i < times; i++ ) {
+-		upAnim = {};
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing )
+-			.animate( downAnim, speed, easing );
+-
+-		distance = hide ? distance * 2 : distance / 2;
+-	}
+-
+-	// Last Bounce when Hiding
+-	if ( hide ) {
+-		upAnim = { opacity: 0 };
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing );
+-	}
+-
+-	el.queue(function() {
+-		if ( hide ) {
+-			el.hide();
+-		}
+-		$.effects.restore( el, props );
+-		$.effects.removeWrapper( el );
+-		done();
+-	});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/js/jquery-1.9.1.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/js/jquery-1.9.1.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/js/jquery-1.9.1.js	(revision 15488)
+@@ -1,9597 +0,0 @@
+-/*!
+- * jQuery JavaScript Library v1.9.1
+- * http://jquery.com/
+- *
+- * Includes Sizzle.js
+- * http://sizzlejs.com/
+- *
+- * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+- * Released under the MIT license
+- * http://jquery.org/license
+- *
+- * Date: 2013-2-4
+- */
+-(function( window, undefined ) {
+-
+-// Can't do this because several apps including ASP.NET trace
+-// the stack via arguments.caller.callee and Firefox dies if
+-// you try to trace through "use strict" call chains. (#13335)
+-// Support: Firefox 18+
+-//"use strict";
+-var
+-	// The deferred used on DOM ready
+-	readyList,
+-
+-	// A central reference to the root jQuery(document)
+-	rootjQuery,
+-
+-	// Support: IE<9
+-	// For `typeof node.method` instead of `node.method !== undefined`
+-	core_strundefined = typeof undefined,
+-
+-	// Use the correct document accordingly with window argument (sandbox)
+-	document = window.document,
+-	location = window.location,
+-
+-	// Map over jQuery in case of overwrite
+-	_jQuery = window.jQuery,
+-
+-	// Map over the $ in case of overwrite
+-	_$ = window.$,
+-
+-	// [[Class]] -> type pairs
+-	class2type = {},
+-
+-	// List of deleted data cache ids, so we can reuse them
+-	core_deletedIds = [],
+-
+-	core_version = "1.9.1",
+-
+-	// Save a reference to some core methods
+-	core_concat = core_deletedIds.concat,
+-	core_push = core_deletedIds.push,
+-	core_slice = core_deletedIds.slice,
+-	core_indexOf = core_deletedIds.indexOf,
+-	core_toString = class2type.toString,
+-	core_hasOwn = class2type.hasOwnProperty,
+-	core_trim = core_version.trim,
+-
+-	// Define a local copy of jQuery
+-	jQuery = function( selector, context ) {
+-		// The jQuery object is actually just the init constructor 'enhanced'
+-		return new jQuery.fn.init( selector, context, rootjQuery );
+-	},
+-
+-	// Used for matching numbers
+-	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+-
+-	// Used for splitting on whitespace
+-	core_rnotwhite = /\S+/g,
+-
+-	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+-
+-	// A simple way to check for HTML strings
+-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+-	// Strict HTML recognition (#11290: must start with <)
+-	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+-
+-	// Match a standalone tag
+-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+-
+-	// JSON RegExp
+-	rvalidchars = /^[\],:{}\s]*$/,
+-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+-	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+-	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+-
+-	// Matches dashed string for camelizing
+-	rmsPrefix = /^-ms-/,
+-	rdashAlpha = /-([\da-z])/gi,
+-
+-	// Used by jQuery.camelCase as callback to replace()
+-	fcamelCase = function( all, letter ) {
+-		return letter.toUpperCase();
+-	},
+-
+-	// The ready event handler
+-	completed = function( event ) {
+-
+-		// readyState === "complete" is good enough for us to call the dom ready in oldIE
+-		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+-			detach();
+-			jQuery.ready();
+-		}
+-	},
+-	// Clean-up method for dom ready events
+-	detach = function() {
+-		if ( document.addEventListener ) {
+-			document.removeEventListener( "DOMContentLoaded", completed, false );
+-			window.removeEventListener( "load", completed, false );
+-
+-		} else {
+-			document.detachEvent( "onreadystatechange", completed );
+-			window.detachEvent( "onload", completed );
+-		}
+-	};
+-
+-jQuery.fn = jQuery.prototype = {
+-	// The current version of jQuery being used
+-	jquery: core_version,
+-
+-	constructor: jQuery,
+-	init: function( selector, context, rootjQuery ) {
+-		var match, elem;
+-
+-		// HANDLE: $(""), $(null), $(undefined), $(false)
+-		if ( !selector ) {
+-			return this;
+-		}
+-
+-		// Handle HTML strings
+-		if ( typeof selector === "string" ) {
+-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+-				// Assume that strings that start and end with <> are HTML and skip the regex check
+-				match = [ null, selector, null ];
+-
+-			} else {
+-				match = rquickExpr.exec( selector );
+-			}
+-
+-			// Match html or make sure no context is specified for #id
+-			if ( match && (match[1] || !context) ) {
+-
+-				// HANDLE: $(html) -> $(array)
+-				if ( match[1] ) {
+-					context = context instanceof jQuery ? context[0] : context;
+-
+-					// scripts is true for back-compat
+-					jQuery.merge( this, jQuery.parseHTML(
+-						match[1],
+-						context && context.nodeType ? context.ownerDocument || context : document,
+-						true
+-					) );
+-
+-					// HANDLE: $(html, props)
+-					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+-						for ( match in context ) {
+-							// Properties of context are called as methods if possible
+-							if ( jQuery.isFunction( this[ match ] ) ) {
+-								this[ match ]( context[ match ] );
+-
+-							// ...and otherwise set as attributes
+-							} else {
+-								this.attr( match, context[ match ] );
+-							}
+-						}
+-					}
+-
+-					return this;
+-
+-				// HANDLE: $(#id)
+-				} else {
+-					elem = document.getElementById( match[2] );
+-
+-					// Check parentNode to catch when Blackberry 4.6 returns
+-					// nodes that are no longer in the document #6963
+-					if ( elem && elem.parentNode ) {
+-						// Handle the case where IE and Opera return items
+-						// by name instead of ID
+-						if ( elem.id !== match[2] ) {
+-							return rootjQuery.find( selector );
+-						}
+-
+-						// Otherwise, we inject the element directly into the jQuery object
+-						this.length = 1;
+-						this[0] = elem;
+-					}
+-
+-					this.context = document;
+-					this.selector = selector;
+-					return this;
+-				}
+-
+-			// HANDLE: $(expr, $(...))
+-			} else if ( !context || context.jquery ) {
+-				return ( context || rootjQuery ).find( selector );
+-
+-			// HANDLE: $(expr, context)
+-			// (which is just equivalent to: $(context).find(expr)
+-			} else {
+-				return this.constructor( context ).find( selector );
+-			}
+-
+-		// HANDLE: $(DOMElement)
+-		} else if ( selector.nodeType ) {
+-			this.context = this[0] = selector;
+-			this.length = 1;
+-			return this;
+-
+-		// HANDLE: $(function)
+-		// Shortcut for document ready
+-		} else if ( jQuery.isFunction( selector ) ) {
+-			return rootjQuery.ready( selector );
+-		}
+-
+-		if ( selector.selector !== undefined ) {
+-			this.selector = selector.selector;
+-			this.context = selector.context;
+-		}
+-
+-		return jQuery.makeArray( selector, this );
+-	},
+-
+-	// Start with an empty selector
+-	selector: "",
+-
+-	// The default length of a jQuery object is 0
+-	length: 0,
+-
+-	// The number of elements contained in the matched element set
+-	size: function() {
+-		return this.length;
+-	},
+-
+-	toArray: function() {
+-		return core_slice.call( this );
+-	},
+-
+-	// Get the Nth element in the matched element set OR
+-	// Get the whole matched element set as a clean array
+-	get: function( num ) {
+-		return num == null ?
+-
+-			// Return a 'clean' array
+-			this.toArray() :
+-
+-			// Return just the object
+-			( num < 0 ? this[ this.length + num ] : this[ num ] );
+-	},
+-
+-	// Take an array of elements and push it onto the stack
+-	// (returning the new matched element set)
+-	pushStack: function( elems ) {
+-
+-		// Build a new jQuery matched element set
+-		var ret = jQuery.merge( this.constructor(), elems );
+-
+-		// Add the old object onto the stack (as a reference)
+-		ret.prevObject = this;
+-		ret.context = this.context;
+-
+-		// Return the newly-formed element set
+-		return ret;
+-	},
+-
+-	// Execute a callback for every element in the matched set.
+-	// (You can seed the arguments with an array of args, but this is
+-	// only used internally.)
+-	each: function( callback, args ) {
+-		return jQuery.each( this, callback, args );
+-	},
+-
+-	ready: function( fn ) {
+-		// Add the callback
+-		jQuery.ready.promise().done( fn );
+-
+-		return this;
+-	},
+-
+-	slice: function() {
+-		return this.pushStack( core_slice.apply( this, arguments ) );
+-	},
+-
+-	first: function() {
+-		return this.eq( 0 );
+-	},
+-
+-	last: function() {
+-		return this.eq( -1 );
+-	},
+-
+-	eq: function( i ) {
+-		var len = this.length,
+-			j = +i + ( i < 0 ? len : 0 );
+-		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+-	},
+-
+-	map: function( callback ) {
+-		return this.pushStack( jQuery.map(this, function( elem, i ) {
+-			return callback.call( elem, i, elem );
+-		}));
+-	},
+-
+-	end: function() {
+-		return this.prevObject || this.constructor(null);
+-	},
+-
+-	// For internal use only.
+-	// Behaves like an Array's method, not like a jQuery method.
+-	push: core_push,
+-	sort: [].sort,
+-	splice: [].splice
+-};
+-
+-// Give the init function the jQuery prototype for later instantiation
+-jQuery.fn.init.prototype = jQuery.fn;
+-
+-jQuery.extend = jQuery.fn.extend = function() {
+-	var src, copyIsArray, copy, name, options, clone,
+-		target = arguments[0] || {},
+-		i = 1,
+-		length = arguments.length,
+-		deep = false;
+-
+-	// Handle a deep copy situation
+-	if ( typeof target === "boolean" ) {
+-		deep = target;
+-		target = arguments[1] || {};
+-		// skip the boolean and the target
+-		i = 2;
+-	}
+-
+-	// Handle case when target is a string or something (possible in deep copy)
+-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+-		target = {};
+-	}
+-
+-	// extend jQuery itself if only one argument is passed
+-	if ( length === i ) {
+-		target = this;
+-		--i;
+-	}
+-
+-	for ( ; i < length; i++ ) {
+-		// Only deal with non-null/undefined values
+-		if ( (options = arguments[ i ]) != null ) {
+-			// Extend the base object
+-			for ( name in options ) {
+-				src = target[ name ];
+-				copy = options[ name ];
+-
+-				// Prevent never-ending loop
+-				if ( target === copy ) {
+-					continue;
+-				}
+-
+-				// Recurse if we're merging plain objects or arrays
+-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+-					if ( copyIsArray ) {
+-						copyIsArray = false;
+-						clone = src && jQuery.isArray(src) ? src : [];
+-
+-					} else {
+-						clone = src && jQuery.isPlainObject(src) ? src : {};
+-					}
+-
+-					// Never move original objects, clone them
+-					target[ name ] = jQuery.extend( deep, clone, copy );
+-
+-				// Don't bring in undefined values
+-				} else if ( copy !== undefined ) {
+-					target[ name ] = copy;
+-				}
+-			}
+-		}
+-	}
+-
+-	// Return the modified object
+-	return target;
+-};
+-
+-jQuery.extend({
+-	noConflict: function( deep ) {
+-		if ( window.$ === jQuery ) {
+-			window.$ = _$;
+-		}
+-
+-		if ( deep && window.jQuery === jQuery ) {
+-			window.jQuery = _jQuery;
+-		}
+-
+-		return jQuery;
+-	},
+-
+-	// Is the DOM ready to be used? Set to true once it occurs.
+-	isReady: false,
+-
+-	// A counter to track how many items to wait for before
+-	// the ready event fires. See #6781
+-	readyWait: 1,
+-
+-	// Hold (or release) the ready event
+-	holdReady: function( hold ) {
+-		if ( hold ) {
+-			jQuery.readyWait++;
+-		} else {
+-			jQuery.ready( true );
+-		}
+-	},
+-
+-	// Handle when the DOM is ready
+-	ready: function( wait ) {
+-
+-		// Abort if there are pending holds or we're already ready
+-		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+-			return;
+-		}
+-
+-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+-		if ( !document.body ) {
+-			return setTimeout( jQuery.ready );
+-		}
+-
+-		// Remember that the DOM is ready
+-		jQuery.isReady = true;
+-
+-		// If a normal DOM Ready event fired, decrement, and wait if need be
+-		if ( wait !== true && --jQuery.readyWait > 0 ) {
+-			return;
+-		}
+-
+-		// If there are functions bound, to execute
+-		readyList.resolveWith( document, [ jQuery ] );
+-
+-		// Trigger any bound ready events
+-		if ( jQuery.fn.trigger ) {
+-			jQuery( document ).trigger("ready").off("ready");
+-		}
+-	},
+-
+-	// See test/unit/core.js for details concerning isFunction.
+-	// Since version 1.3, DOM methods and functions like alert
+-	// aren't supported. They return false on IE (#2968).
+-	isFunction: function( obj ) {
+-		return jQuery.type(obj) === "function";
+-	},
+-
+-	isArray: Array.isArray || function( obj ) {
+-		return jQuery.type(obj) === "array";
+-	},
+-
+-	isWindow: function( obj ) {
+-		return obj != null && obj == obj.window;
+-	},
+-
+-	isNumeric: function( obj ) {
+-		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+-	},
+-
+-	type: function( obj ) {
+-		if ( obj == null ) {
+-			return String( obj );
+-		}
+-		return typeof obj === "object" || typeof obj === "function" ?
+-			class2type[ core_toString.call(obj) ] || "object" :
+-			typeof obj;
+-	},
+-
+-	isPlainObject: function( obj ) {
+-		// Must be an Object.
+-		// Because of IE, we also have to check the presence of the constructor property.
+-		// Make sure that DOM nodes and window objects don't pass through, as well
+-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+-			return false;
+-		}
+-
+-		try {
+-			// Not own constructor property must be Object
+-			if ( obj.constructor &&
+-				!core_hasOwn.call(obj, "constructor") &&
+-				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+-				return false;
+-			}
+-		} catch ( e ) {
+-			// IE8,9 Will throw exceptions on certain host objects #9897
+-			return false;
+-		}
+-
+-		// Own properties are enumerated firstly, so to speed up,
+-		// if last one is own, then all properties are own.
+-
+-		var key;
+-		for ( key in obj ) {}
+-
+-		return key === undefined || core_hasOwn.call( obj, key );
+-	},
+-
+-	isEmptyObject: function( obj ) {
+-		var name;
+-		for ( name in obj ) {
+-			return false;
+-		}
+-		return true;
+-	},
+-
+-	error: function( msg ) {
+-		throw new Error( msg );
+-	},
+-
+-	// data: string of html
+-	// context (optional): If specified, the fragment will be created in this context, defaults to document
+-	// keepScripts (optional): If true, will include scripts passed in the html string
+-	parseHTML: function( data, context, keepScripts ) {
+-		if ( !data || typeof data !== "string" ) {
+-			return null;
+-		}
+-		if ( typeof context === "boolean" ) {
+-			keepScripts = context;
+-			context = false;
+-		}
+-		context = context || document;
+-
+-		var parsed = rsingleTag.exec( data ),
+-			scripts = !keepScripts && [];
+-
+-		// Single tag
+-		if ( parsed ) {
+-			return [ context.createElement( parsed[1] ) ];
+-		}
+-
+-		parsed = jQuery.buildFragment( [ data ], context, scripts );
+-		if ( scripts ) {
+-			jQuery( scripts ).remove();
+-		}
+-		return jQuery.merge( [], parsed.childNodes );
+-	},
+-
+-	parseJSON: function( data ) {
+-		// Attempt to parse using the native JSON parser first
+-		if ( window.JSON && window.JSON.parse ) {
+-			return window.JSON.parse( data );
+-		}
+-
+-		if ( data === null ) {
+-			return data;
+-		}
+-
+-		if ( typeof data === "string" ) {
+-
+-			// Make sure leading/trailing whitespace is removed (IE can't handle it)
+-			data = jQuery.trim( data );
+-
+-			if ( data ) {
+-				// Make sure the incoming data is actual JSON
+-				// Logic borrowed from http://json.org/json2.js
+-				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+-					.replace( rvalidtokens, "]" )
+-					.replace( rvalidbraces, "")) ) {
+-
+-					return ( new Function( "return " + data ) )();
+-				}
+-			}
+-		}
+-
+-		jQuery.error( "Invalid JSON: " + data );
+-	},
+-
+-	// Cross-browser xml parsing
+-	parseXML: function( data ) {
+-		var xml, tmp;
+-		if ( !data || typeof data !== "string" ) {
+-			return null;
+-		}
+-		try {
+-			if ( window.DOMParser ) { // Standard
+-				tmp = new DOMParser();
+-				xml = tmp.parseFromString( data , "text/xml" );
+-			} else { // IE
+-				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+-				xml.async = "false";
+-				xml.loadXML( data );
+-			}
+-		} catch( e ) {
+-			xml = undefined;
+-		}
+-		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+-			jQuery.error( "Invalid XML: " + data );
+-		}
+-		return xml;
+-	},
+-
+-	noop: function() {},
+-
+-	// Evaluates a script in a global context
+-	// Workarounds based on findings by Jim Driscoll
+-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+-	globalEval: function( data ) {
+-		if ( data && jQuery.trim( data ) ) {
+-			// We use execScript on Internet Explorer
+-			// We use an anonymous function so that context is window
+-			// rather than jQuery in Firefox
+-			( window.execScript || function( data ) {
+-				window[ "eval" ].call( window, data );
+-			} )( data );
+-		}
+-	},
+-
+-	// Convert dashed to camelCase; used by the css and data modules
+-	// Microsoft forgot to hump their vendor prefix (#9572)
+-	camelCase: function( string ) {
+-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+-	},
+-
+-	nodeName: function( elem, name ) {
+-		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+-	},
+-
+-	// args is for internal usage only
+-	each: function( obj, callback, args ) {
+-		var value,
+-			i = 0,
+-			length = obj.length,
+-			isArray = isArraylike( obj );
+-
+-		if ( args ) {
+-			if ( isArray ) {
+-				for ( ; i < length; i++ ) {
+-					value = callback.apply( obj[ i ], args );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( i in obj ) {
+-					value = callback.apply( obj[ i ], args );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			}
+-
+-		// A special, fast, case for the most common use of each
+-		} else {
+-			if ( isArray ) {
+-				for ( ; i < length; i++ ) {
+-					value = callback.call( obj[ i ], i, obj[ i ] );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( i in obj ) {
+-					value = callback.call( obj[ i ], i, obj[ i ] );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			}
+-		}
+-
+-		return obj;
+-	},
+-
+-	// Use native String.trim function wherever possible
+-	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				core_trim.call( text );
+-		} :
+-
+-		// Otherwise use our own trimming functionality
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				( text + "" ).replace( rtrim, "" );
+-		},
+-
+-	// results is for internal usage only
+-	makeArray: function( arr, results ) {
+-		var ret = results || [];
+-
+-		if ( arr != null ) {
+-			if ( isArraylike( Object(arr) ) ) {
+-				jQuery.merge( ret,
+-					typeof arr === "string" ?
+-					[ arr ] : arr
+-				);
+-			} else {
+-				core_push.call( ret, arr );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	inArray: function( elem, arr, i ) {
+-		var len;
+-
+-		if ( arr ) {
+-			if ( core_indexOf ) {
+-				return core_indexOf.call( arr, elem, i );
+-			}
+-
+-			len = arr.length;
+-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+-
+-			for ( ; i < len; i++ ) {
+-				// Skip accessing in sparse arrays
+-				if ( i in arr && arr[ i ] === elem ) {
+-					return i;
+-				}
+-			}
+-		}
+-
+-		return -1;
+-	},
+-
+-	merge: function( first, second ) {
+-		var l = second.length,
+-			i = first.length,
+-			j = 0;
+-
+-		if ( typeof l === "number" ) {
+-			for ( ; j < l; j++ ) {
+-				first[ i++ ] = second[ j ];
+-			}
+-		} else {
+-			while ( second[j] !== undefined ) {
+-				first[ i++ ] = second[ j++ ];
+-			}
+-		}
+-
+-		first.length = i;
+-
+-		return first;
+-	},
+-
+-	grep: function( elems, callback, inv ) {
+-		var retVal,
+-			ret = [],
+-			i = 0,
+-			length = elems.length;
+-		inv = !!inv;
+-
+-		// Go through the array, only saving the items
+-		// that pass the validator function
+-		for ( ; i < length; i++ ) {
+-			retVal = !!callback( elems[ i ], i );
+-			if ( inv !== retVal ) {
+-				ret.push( elems[ i ] );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	// arg is for internal usage only
+-	map: function( elems, callback, arg ) {
+-		var value,
+-			i = 0,
+-			length = elems.length,
+-			isArray = isArraylike( elems ),
+-			ret = [];
+-
+-		// Go through the array, translating each of the items to their
+-		if ( isArray ) {
+-			for ( ; i < length; i++ ) {
+-				value = callback( elems[ i ], i, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-
+-		// Go through every key on the object,
+-		} else {
+-			for ( i in elems ) {
+-				value = callback( elems[ i ], i, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-		}
+-
+-		// Flatten any nested arrays
+-		return core_concat.apply( [], ret );
+-	},
+-
+-	// A global GUID counter for objects
+-	guid: 1,
+-
+-	// Bind a function to a context, optionally partially applying any
+-	// arguments.
+-	proxy: function( fn, context ) {
+-		var args, proxy, tmp;
+-
+-		if ( typeof context === "string" ) {
+-			tmp = fn[ context ];
+-			context = fn;
+-			fn = tmp;
+-		}
+-
+-		// Quick check to determine if target is callable, in the spec
+-		// this throws a TypeError, but we will just return undefined.
+-		if ( !jQuery.isFunction( fn ) ) {
+-			return undefined;
+-		}
+-
+-		// Simulated bind
+-		args = core_slice.call( arguments, 2 );
+-		proxy = function() {
+-			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+-		};
+-
+-		// Set the guid of unique handler to the same of original handler, so it can be removed
+-		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+-
+-		return proxy;
+-	},
+-
+-	// Multifunctional method to get and set values of a collection
+-	// The value/s can optionally be executed if it's a function
+-	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+-		var i = 0,
+-			length = elems.length,
+-			bulk = key == null;
+-
+-		// Sets many values
+-		if ( jQuery.type( key ) === "object" ) {
+-			chainable = true;
+-			for ( i in key ) {
+-				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+-			}
+-
+-		// Sets one value
+-		} else if ( value !== undefined ) {
+-			chainable = true;
+-
+-			if ( !jQuery.isFunction( value ) ) {
+-				raw = true;
+-			}
+-
+-			if ( bulk ) {
+-				// Bulk operations run against the entire set
+-				if ( raw ) {
+-					fn.call( elems, value );
+-					fn = null;
+-
+-				// ...except when executing function values
+-				} else {
+-					bulk = fn;
+-					fn = function( elem, key, value ) {
+-						return bulk.call( jQuery( elem ), value );
+-					};
+-				}
+-			}
+-
+-			if ( fn ) {
+-				for ( ; i < length; i++ ) {
+-					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+-				}
+-			}
+-		}
+-
+-		return chainable ?
+-			elems :
+-
+-			// Gets
+-			bulk ?
+-				fn.call( elems ) :
+-				length ? fn( elems[0], key ) : emptyGet;
+-	},
+-
+-	now: function() {
+-		return ( new Date() ).getTime();
+-	}
+-});
+-
+-jQuery.ready.promise = function( obj ) {
+-	if ( !readyList ) {
+-
+-		readyList = jQuery.Deferred();
+-
+-		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+-		// we once tried to use readyState "interactive" here, but it caused issues like the one
+-		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+-		if ( document.readyState === "complete" ) {
+-			// Handle it asynchronously to allow scripts the opportunity to delay ready
+-			setTimeout( jQuery.ready );
+-
+-		// Standards-based browsers support DOMContentLoaded
+-		} else if ( document.addEventListener ) {
+-			// Use the handy event callback
+-			document.addEventListener( "DOMContentLoaded", completed, false );
+-
+-			// A fallback to window.onload, that will always work
+-			window.addEventListener( "load", completed, false );
+-
+-		// If IE event model is used
+-		} else {
+-			// Ensure firing before onload, maybe late but safe also for iframes
+-			document.attachEvent( "onreadystatechange", completed );
+-
+-			// A fallback to window.onload, that will always work
+-			window.attachEvent( "onload", completed );
+-
+-			// If IE and not a frame
+-			// continually check to see if the document is ready
+-			var top = false;
+-
+-			try {
+-				top = window.frameElement == null && document.documentElement;
+-			} catch(e) {}
+-
+-			if ( top && top.doScroll ) {
+-				(function doScrollCheck() {
+-					if ( !jQuery.isReady ) {
+-
+-						try {
+-							// Use the trick by Diego Perini
+-							// http://javascript.nwbox.com/IEContentLoaded/
+-							top.doScroll("left");
+-						} catch(e) {
+-							return setTimeout( doScrollCheck, 50 );
+-						}
+-
+-						// detach all dom ready events
+-						detach();
+-
+-						// and execute any waiting functions
+-						jQuery.ready();
+-					}
+-				})();
+-			}
+-		}
+-	}
+-	return readyList.promise( obj );
+-};
+-
+-// Populate the class2type map
+-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+-});
+-
+-function isArraylike( obj ) {
+-	var length = obj.length,
+-		type = jQuery.type( obj );
+-
+-	if ( jQuery.isWindow( obj ) ) {
+-		return false;
+-	}
+-
+-	if ( obj.nodeType === 1 && length ) {
+-		return true;
+-	}
+-
+-	return type === "array" || type !== "function" &&
+-		( length === 0 ||
+-		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+-}
+-
+-// All jQuery objects should point back to these
+-rootjQuery = jQuery(document);
+-// String to Object options format cache
+-var optionsCache = {};
+-
+-// Convert String-formatted options into Object-formatted ones and store in cache
+-function createOptions( options ) {
+-	var object = optionsCache[ options ] = {};
+-	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+-		object[ flag ] = true;
+-	});
+-	return object;
+-}
+-
+-/*
+- * Create a callback list using the following parameters:
+- *
+- *	options: an optional list of space-separated options that will change how
+- *			the callback list behaves or a more traditional option object
+- *
+- * By default a callback list will act like an event callback list and can be
+- * "fired" multiple times.
+- *
+- * Possible options:
+- *
+- *	once:			will ensure the callback list can only be fired once (like a Deferred)
+- *
+- *	memory:			will keep track of previous values and will call any callback added
+- *					after the list has been fired right away with the latest "memorized"
+- *					values (like a Deferred)
+- *
+- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+- *
+- *	stopOnFalse:	interrupt callings when a callback returns false
+- *
+- */
+-jQuery.Callbacks = function( options ) {
+-
+-	// Convert options from String-formatted to Object-formatted if needed
+-	// (we check in cache first)
+-	options = typeof options === "string" ?
+-		( optionsCache[ options ] || createOptions( options ) ) :
+-		jQuery.extend( {}, options );
+-
+-	var // Flag to know if list is currently firing
+-		firing,
+-		// Last fire value (for non-forgettable lists)
+-		memory,
+-		// Flag to know if list was already fired
+-		fired,
+-		// End of the loop when firing
+-		firingLength,
+-		// Index of currently firing callback (modified by remove if needed)
+-		firingIndex,
+-		// First callback to fire (used internally by add and fireWith)
+-		firingStart,
+-		// Actual callback list
+-		list = [],
+-		// Stack of fire calls for repeatable lists
+-		stack = !options.once && [],
+-		// Fire callbacks
+-		fire = function( data ) {
+-			memory = options.memory && data;
+-			fired = true;
+-			firingIndex = firingStart || 0;
+-			firingStart = 0;
+-			firingLength = list.length;
+-			firing = true;
+-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+-				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+-					memory = false; // To prevent further calls using add
+-					break;
+-				}
+-			}
+-			firing = false;
+-			if ( list ) {
+-				if ( stack ) {
+-					if ( stack.length ) {
+-						fire( stack.shift() );
+-					}
+-				} else if ( memory ) {
+-					list = [];
+-				} else {
+-					self.disable();
+-				}
+-			}
+-		},
+-		// Actual Callbacks object
+-		self = {
+-			// Add a callback or a collection of callbacks to the list
+-			add: function() {
+-				if ( list ) {
+-					// First, we save the current length
+-					var start = list.length;
+-					(function add( args ) {
+-						jQuery.each( args, function( _, arg ) {
+-							var type = jQuery.type( arg );
+-							if ( type === "function" ) {
+-								if ( !options.unique || !self.has( arg ) ) {
+-									list.push( arg );
+-								}
+-							} else if ( arg && arg.length && type !== "string" ) {
+-								// Inspect recursively
+-								add( arg );
+-							}
+-						});
+-					})( arguments );
+-					// Do we need to add the callbacks to the
+-					// current firing batch?
+-					if ( firing ) {
+-						firingLength = list.length;
+-					// With memory, if we're not firing then
+-					// we should call right away
+-					} else if ( memory ) {
+-						firingStart = start;
+-						fire( memory );
+-					}
+-				}
+-				return this;
+-			},
+-			// Remove a callback from the list
+-			remove: function() {
+-				if ( list ) {
+-					jQuery.each( arguments, function( _, arg ) {
+-						var index;
+-						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+-							list.splice( index, 1 );
+-							// Handle firing indexes
+-							if ( firing ) {
+-								if ( index <= firingLength ) {
+-									firingLength--;
+-								}
+-								if ( index <= firingIndex ) {
+-									firingIndex--;
+-								}
+-							}
+-						}
+-					});
+-				}
+-				return this;
+-			},
+-			// Check if a given callback is in the list.
+-			// If no argument is given, return whether or not list has callbacks attached.
+-			has: function( fn ) {
+-				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+-			},
+-			// Remove all callbacks from the list
+-			empty: function() {
+-				list = [];
+-				return this;
+-			},
+-			// Have the list do nothing anymore
+-			disable: function() {
+-				list = stack = memory = undefined;
+-				return this;
+-			},
+-			// Is it disabled?
+-			disabled: function() {
+-				return !list;
+-			},
+-			// Lock the list in its current state
+-			lock: function() {
+-				stack = undefined;
+-				if ( !memory ) {
+-					self.disable();
+-				}
+-				return this;
+-			},
+-			// Is it locked?
+-			locked: function() {
+-				return !stack;
+-			},
+-			// Call all callbacks with the given context and arguments
+-			fireWith: function( context, args ) {
+-				args = args || [];
+-				args = [ context, args.slice ? args.slice() : args ];
+-				if ( list && ( !fired || stack ) ) {
+-					if ( firing ) {
+-						stack.push( args );
+-					} else {
+-						fire( args );
+-					}
+-				}
+-				return this;
+-			},
+-			// Call all the callbacks with the given arguments
+-			fire: function() {
+-				self.fireWith( this, arguments );
+-				return this;
+-			},
+-			// To know if the callbacks have already been called at least once
+-			fired: function() {
+-				return !!fired;
+-			}
+-		};
+-
+-	return self;
+-};
+-jQuery.extend({
+-
+-	Deferred: function( func ) {
+-		var tuples = [
+-				// action, add listener, listener list, final state
+-				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+-				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+-				[ "notify", "progress", jQuery.Callbacks("memory") ]
+-			],
+-			state = "pending",
+-			promise = {
+-				state: function() {
+-					return state;
+-				},
+-				always: function() {
+-					deferred.done( arguments ).fail( arguments );
+-					return this;
+-				},
+-				then: function( /* fnDone, fnFail, fnProgress */ ) {
+-					var fns = arguments;
+-					return jQuery.Deferred(function( newDefer ) {
+-						jQuery.each( tuples, function( i, tuple ) {
+-							var action = tuple[ 0 ],
+-								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+-							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+-							deferred[ tuple[1] ](function() {
+-								var returned = fn && fn.apply( this, arguments );
+-								if ( returned && jQuery.isFunction( returned.promise ) ) {
+-									returned.promise()
+-										.done( newDefer.resolve )
+-										.fail( newDefer.reject )
+-										.progress( newDefer.notify );
+-								} else {
+-									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+-								}
+-							});
+-						});
+-						fns = null;
+-					}).promise();
+-				},
+-				// Get a promise for this deferred
+-				// If obj is provided, the promise aspect is added to the object
+-				promise: function( obj ) {
+-					return obj != null ? jQuery.extend( obj, promise ) : promise;
+-				}
+-			},
+-			deferred = {};
+-
+-		// Keep pipe for back-compat
+-		promise.pipe = promise.then;
+-
+-		// Add list-specific methods
+-		jQuery.each( tuples, function( i, tuple ) {
+-			var list = tuple[ 2 ],
+-				stateString = tuple[ 3 ];
+-
+-			// promise[ done | fail | progress ] = list.add
+-			promise[ tuple[1] ] = list.add;
+-
+-			// Handle state
+-			if ( stateString ) {
+-				list.add(function() {
+-					// state = [ resolved | rejected ]
+-					state = stateString;
+-
+-				// [ reject_list | resolve_list ].disable; progress_list.lock
+-				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+-			}
+-
+-			// deferred[ resolve | reject | notify ]
+-			deferred[ tuple[0] ] = function() {
+-				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+-				return this;
+-			};
+-			deferred[ tuple[0] + "With" ] = list.fireWith;
+-		});
+-
+-		// Make the deferred a promise
+-		promise.promise( deferred );
+-
+-		// Call given func if any
+-		if ( func ) {
+-			func.call( deferred, deferred );
+-		}
+-
+-		// All done!
+-		return deferred;
+-	},
+-
+-	// Deferred helper
+-	when: function( subordinate /* , ..., subordinateN */ ) {
+-		var i = 0,
+-			resolveValues = core_slice.call( arguments ),
+-			length = resolveValues.length,
+-
+-			// the count of uncompleted subordinates
+-			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+-
+-			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+-			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+-
+-			// Update function for both resolve and progress values
+-			updateFunc = function( i, contexts, values ) {
+-				return function( value ) {
+-					contexts[ i ] = this;
+-					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+-					if( values === progressValues ) {
+-						deferred.notifyWith( contexts, values );
+-					} else if ( !( --remaining ) ) {
+-						deferred.resolveWith( contexts, values );
+-					}
+-				};
+-			},
+-
+-			progressValues, progressContexts, resolveContexts;
+-
+-		// add listeners to Deferred subordinates; treat others as resolved
+-		if ( length > 1 ) {
+-			progressValues = new Array( length );
+-			progressContexts = new Array( length );
+-			resolveContexts = new Array( length );
+-			for ( ; i < length; i++ ) {
+-				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+-					resolveValues[ i ].promise()
+-						.done( updateFunc( i, resolveContexts, resolveValues ) )
+-						.fail( deferred.reject )
+-						.progress( updateFunc( i, progressContexts, progressValues ) );
+-				} else {
+-					--remaining;
+-				}
+-			}
+-		}
+-
+-		// if we're not waiting on anything, resolve the master
+-		if ( !remaining ) {
+-			deferred.resolveWith( resolveContexts, resolveValues );
+-		}
+-
+-		return deferred.promise();
+-	}
+-});
+-jQuery.support = (function() {
+-
+-	var support, all, a,
+-		input, select, fragment,
+-		opt, eventName, isSupported, i,
+-		div = document.createElement("div");
+-
+-	// Setup
+-	div.setAttribute( "className", "t" );
+-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+-
+-	// Support tests won't run in some limited or non-browser environments
+-	all = div.getElementsByTagName("*");
+-	a = div.getElementsByTagName("a")[ 0 ];
+-	if ( !all || !a || !all.length ) {
+-		return {};
+-	}
+-
+-	// First batch of tests
+-	select = document.createElement("select");
+-	opt = select.appendChild( document.createElement("option") );
+-	input = div.getElementsByTagName("input")[ 0 ];
+-
+-	a.style.cssText = "top:1px;float:left;opacity:.5";
+-	support = {
+-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+-		getSetAttribute: div.className !== "t",
+-
+-		// IE strips leading whitespace when .innerHTML is used
+-		leadingWhitespace: div.firstChild.nodeType === 3,
+-
+-		// Make sure that tbody elements aren't automatically inserted
+-		// IE will insert them into empty tables
+-		tbody: !div.getElementsByTagName("tbody").length,
+-
+-		// Make sure that link elements get serialized correctly by innerHTML
+-		// This requires a wrapper element in IE
+-		htmlSerialize: !!div.getElementsByTagName("link").length,
+-
+-		// Get the style information from getAttribute
+-		// (IE uses .cssText instead)
+-		style: /top/.test( a.getAttribute("style") ),
+-
+-		// Make sure that URLs aren't manipulated
+-		// (IE normalizes it by default)
+-		hrefNormalized: a.getAttribute("href") === "/a",
+-
+-		// Make sure that element opacity exists
+-		// (IE uses filter instead)
+-		// Use a regex to work around a WebKit issue. See #5145
+-		opacity: /^0.5/.test( a.style.opacity ),
+-
+-		// Verify style float existence
+-		// (IE uses styleFloat instead of cssFloat)
+-		cssFloat: !!a.style.cssFloat,
+-
+-		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+-		checkOn: !!input.value,
+-
+-		// Make sure that a selected-by-default option has a working selected property.
+-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+-		optSelected: opt.selected,
+-
+-		// Tests for enctype support on a form (#6743)
+-		enctype: !!document.createElement("form").enctype,
+-
+-		// Makes sure cloning an html5 element does not cause problems
+-		// Where outerHTML is undefined, this still works
+-		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+-
+-		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+-		boxModel: document.compatMode === "CSS1Compat",
+-
+-		// Will be defined later
+-		deleteExpando: true,
+-		noCloneEvent: true,
+-		inlineBlockNeedsLayout: false,
+-		shrinkWrapBlocks: false,
+-		reliableMarginRight: true,
+-		boxSizingReliable: true,
+-		pixelPosition: false
+-	};
+-
+-	// Make sure checked status is properly cloned
+-	input.checked = true;
+-	support.noCloneChecked = input.cloneNode( true ).checked;
+-
+-	// Make sure that the options inside disabled selects aren't marked as disabled
+-	// (WebKit marks them as disabled)
+-	select.disabled = true;
+-	support.optDisabled = !opt.disabled;
+-
+-	// Support: IE<9
+-	try {
+-		delete div.test;
+-	} catch( e ) {
+-		support.deleteExpando = false;
+-	}
+-
+-	// Check if we can trust getAttribute("value")
+-	input = document.createElement("input");
+-	input.setAttribute( "value", "" );
+-	support.input = input.getAttribute( "value" ) === "";
+-
+-	// Check if an input maintains its value after becoming a radio
+-	input.value = "t";
+-	input.setAttribute( "type", "radio" );
+-	support.radioValue = input.value === "t";
+-
+-	// #11217 - WebKit loses check when the name is after the checked attribute
+-	input.setAttribute( "checked", "t" );
+-	input.setAttribute( "name", "t" );
+-
+-	fragment = document.createDocumentFragment();
+-	fragment.appendChild( input );
+-
+-	// Check if a disconnected checkbox will retain its checked
+-	// value of true after appended to the DOM (IE6/7)
+-	support.appendChecked = input.checked;
+-
+-	// WebKit doesn't clone checked state correctly in fragments
+-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+-
+-	// Support: IE<9
+-	// Opera does not clone events (and typeof div.attachEvent === undefined).
+-	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+-	if ( div.attachEvent ) {
+-		div.attachEvent( "onclick", function() {
+-			support.noCloneEvent = false;
+-		});
+-
+-		div.cloneNode( true ).click();
+-	}
+-
+-	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+-	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+-	for ( i in { submit: true, change: true, focusin: true }) {
+-		div.setAttribute( eventName = "on" + i, "t" );
+-
+-		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+-	}
+-
+-	div.style.backgroundClip = "content-box";
+-	div.cloneNode( true ).style.backgroundClip = "";
+-	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+-
+-	// Run tests that need a body at doc ready
+-	jQuery(function() {
+-		var container, marginDiv, tds,
+-			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+-			body = document.getElementsByTagName("body")[0];
+-
+-		if ( !body ) {
+-			// Return for frameset docs that don't have a body
+-			return;
+-		}
+-
+-		container = document.createElement("div");
+-		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+-
+-		body.appendChild( container ).appendChild( div );
+-
+-		// Support: IE8
+-		// Check if table cells still have offsetWidth/Height when they are set
+-		// to display:none and there are still other visible table cells in a
+-		// table row; if so, offsetWidth/Height are not reliable for use when
+-		// determining if an element has been hidden directly using
+-		// display:none (it is still safe to use offsets if a parent element is
+-		// hidden; don safety goggles and see bug #4512 for more information).
+-		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+-		tds = div.getElementsByTagName("td");
+-		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+-		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+-
+-		tds[ 0 ].style.display = "";
+-		tds[ 1 ].style.display = "none";
+-
+-		// Support: IE8
+-		// Check if empty table cells still have offsetWidth/Height
+-		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+-
+-		// Check box-sizing and margin behavior
+-		div.innerHTML = "";
+-		div.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%;";
+-		support.boxSizing = ( div.offsetWidth === 4 );
+-		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+-
+-		// Use window.getComputedStyle because jsdom on node.js will break without it.
+-		if ( window.getComputedStyle ) {
+-			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+-			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+-
+-			// Check if div with explicit width and no margin-right incorrectly
+-			// gets computed margin-right based on width of container. (#3333)
+-			// Fails in WebKit before Feb 2011 nightlies
+-			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-			marginDiv = div.appendChild( document.createElement("div") );
+-			marginDiv.style.cssText = div.style.cssText = divReset;
+-			marginDiv.style.marginRight = marginDiv.style.width = "0";
+-			div.style.width = "1px";
+-
+-			support.reliableMarginRight =
+-				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+-		}
+-
+-		if ( typeof div.style.zoom !== core_strundefined ) {
+-			// Support: IE<8
+-			// Check if natively block-level elements act like inline-block
+-			// elements when setting their display to 'inline' and giving
+-			// them layout
+-			div.innerHTML = "";
+-			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+-			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+-
+-			// Support: IE6
+-			// Check if elements with layout shrink-wrap their children
+-			div.style.display = "block";
+-			div.innerHTML = "<div></div>";
+-			div.firstChild.style.width = "5px";
+-			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+-
+-			if ( support.inlineBlockNeedsLayout ) {
+-				// Prevent IE 6 from affecting layout for positioned elements #11048
+-				// Prevent IE from shrinking the body in IE 7 mode #12869
+-				// Support: IE<8
+-				body.style.zoom = 1;
+-			}
+-		}
+-
+-		body.removeChild( container );
+-
+-		// Null elements to avoid leaks in IE
+-		container = div = tds = marginDiv = null;
+-	});
+-
+-	// Null elements to avoid leaks in IE
+-	all = select = fragment = opt = a = input = null;
+-
+-	return support;
+-})();
+-
+-var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+-	rmultiDash = /([A-Z])/g;
+-
+-function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+-	if ( !jQuery.acceptData( elem ) ) {
+-		return;
+-	}
+-
+-	var thisCache, ret,
+-		internalKey = jQuery.expando,
+-		getByName = typeof name === "string",
+-
+-		// We have to handle DOM nodes and JS objects differently because IE6-7
+-		// can't GC object references properly across the DOM-JS boundary
+-		isNode = elem.nodeType,
+-
+-		// Only DOM nodes need the global jQuery cache; JS object data is
+-		// attached directly to the object so GC can occur automatically
+-		cache = isNode ? jQuery.cache : elem,
+-
+-		// Only defining an ID for JS objects if its cache already exists allows
+-		// the code to shortcut on the same path as a DOM node with no cache
+-		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+-
+-	// Avoid doing any more work than we need to when trying to get data on an
+-	// object that has no data at all
+-	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+-		return;
+-	}
+-
+-	if ( !id ) {
+-		// Only DOM nodes need a new unique ID for each element since their data
+-		// ends up in the global cache
+-		if ( isNode ) {
+-			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+-		} else {
+-			id = internalKey;
+-		}
+-	}
+-
+-	if ( !cache[ id ] ) {
+-		cache[ id ] = {};
+-
+-		// Avoids exposing jQuery metadata on plain JS objects when the object
+-		// is serialized using JSON.stringify
+-		if ( !isNode ) {
+-			cache[ id ].toJSON = jQuery.noop;
+-		}
+-	}
+-
+-	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+-	// shallow copied over onto the existing cache
+-	if ( typeof name === "object" || typeof name === "function" ) {
+-		if ( pvt ) {
+-			cache[ id ] = jQuery.extend( cache[ id ], name );
+-		} else {
+-			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+-		}
+-	}
+-
+-	thisCache = cache[ id ];
+-
+-	// jQuery data() is stored in a separate object inside the object's internal data
+-	// cache in order to avoid key collisions between internal data and user-defined
+-	// data.
+-	if ( !pvt ) {
+-		if ( !thisCache.data ) {
+-			thisCache.data = {};
+-		}
+-
+-		thisCache = thisCache.data;
+-	}
+-
+-	if ( data !== undefined ) {
+-		thisCache[ jQuery.camelCase( name ) ] = data;
+-	}
+-
+-	// Check for both converted-to-camel and non-converted data property names
+-	// If a data property was specified
+-	if ( getByName ) {
+-
+-		// First Try to find as-is property data
+-		ret = thisCache[ name ];
+-
+-		// Test for null|undefined property data
+-		if ( ret == null ) {
+-
+-			// Try to find the camelCased property
+-			ret = thisCache[ jQuery.camelCase( name ) ];
+-		}
+-	} else {
+-		ret = thisCache;
+-	}
+-
+-	return ret;
+-}
+-
+-function internalRemoveData( elem, name, pvt ) {
+-	if ( !jQuery.acceptData( elem ) ) {
+-		return;
+-	}
+-
+-	var i, l, thisCache,
+-		isNode = elem.nodeType,
+-
+-		// See jQuery.data for more information
+-		cache = isNode ? jQuery.cache : elem,
+-		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+-
+-	// If there is already no cache entry for this object, there is no
+-	// purpose in continuing
+-	if ( !cache[ id ] ) {
+-		return;
+-	}
+-
+-	if ( name ) {
+-
+-		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+-
+-		if ( thisCache ) {
+-
+-			// Support array or space separated string names for data keys
+-			if ( !jQuery.isArray( name ) ) {
+-
+-				// try the string as a key before any manipulation
+-				if ( name in thisCache ) {
+-					name = [ name ];
+-				} else {
+-
+-					// split the camel cased version by spaces unless a key with the spaces exists
+-					name = jQuery.camelCase( name );
+-					if ( name in thisCache ) {
+-						name = [ name ];
+-					} else {
+-						name = name.split(" ");
+-					}
+-				}
+-			} else {
+-				// If "name" is an array of keys...
+-				// When data is initially created, via ("key", "val") signature,
+-				// keys will be converted to camelCase.
+-				// Since there is no way to tell _how_ a key was added, remove
+-				// both plain key and camelCase key. #12786
+-				// This will only penalize the array argument path.
+-				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+-			}
+-
+-			for ( i = 0, l = name.length; i < l; i++ ) {
+-				delete thisCache[ name[i] ];
+-			}
+-
+-			// If there is no data left in the cache, we want to continue
+-			// and let the cache object itself get destroyed
+-			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+-				return;
+-			}
+-		}
+-	}
+-
+-	// See jQuery.data for more information
+-	if ( !pvt ) {
+-		delete cache[ id ].data;
+-
+-		// Don't destroy the parent cache unless the internal data object
+-		// had been the only thing left in it
+-		if ( !isEmptyDataObject( cache[ id ] ) ) {
+-			return;
+-		}
+-	}
+-
+-	// Destroy the cache
+-	if ( isNode ) {
+-		jQuery.cleanData( [ elem ], true );
+-
+-	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+-	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+-		delete cache[ id ];
+-
+-	// When all else fails, null
+-	} else {
+-		cache[ id ] = null;
+-	}
+-}
+-
+-jQuery.extend({
+-	cache: {},
+-
+-	// Unique for each copy of jQuery on the page
+-	// Non-digits removed to match rinlinejQuery
+-	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+-
+-	// The following elements throw uncatchable exceptions if you
+-	// attempt to add expando properties to them.
+-	noData: {
+-		"embed": true,
+-		// Ban all objects except for Flash (which handle expandos)
+-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+-		"applet": true
+-	},
+-
+-	hasData: function( elem ) {
+-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+-		return !!elem && !isEmptyDataObject( elem );
+-	},
+-
+-	data: function( elem, name, data ) {
+-		return internalData( elem, name, data );
+-	},
+-
+-	removeData: function( elem, name ) {
+-		return internalRemoveData( elem, name );
+-	},
+-
+-	// For internal use only.
+-	_data: function( elem, name, data ) {
+-		return internalData( elem, name, data, true );
+-	},
+-
+-	_removeData: function( elem, name ) {
+-		return internalRemoveData( elem, name, true );
+-	},
+-
+-	// A method for determining if a DOM node can handle the data expando
+-	acceptData: function( elem ) {
+-		// Do not set data on non-element because it will not be cleared (#8335).
+-		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
+-			return false;
+-		}
+-
+-		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+-
+-		// nodes accept data unless otherwise specified; rejection can be conditional
+-		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	data: function( key, value ) {
+-		var attrs, name,
+-			elem = this[0],
+-			i = 0,
+-			data = null;
+-
+-		// Gets all values
+-		if ( key === undefined ) {
+-			if ( this.length ) {
+-				data = jQuery.data( elem );
+-
+-				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+-					attrs = elem.attributes;
+-					for ( ; i < attrs.length; i++ ) {
+-						name = attrs[i].name;
+-
+-						if ( !name.indexOf( "data-" ) ) {
+-							name = jQuery.camelCase( name.slice(5) );
+-
+-							dataAttr( elem, name, data[ name ] );
+-						}
+-					}
+-					jQuery._data( elem, "parsedAttrs", true );
+-				}
+-			}
+-
+-			return data;
+-		}
+-
+-		// Sets multiple values
+-		if ( typeof key === "object" ) {
+-			return this.each(function() {
+-				jQuery.data( this, key );
+-			});
+-		}
+-
+-		return jQuery.access( this, function( value ) {
+-
+-			if ( value === undefined ) {
+-				// Try to fetch any internally stored data first
+-				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+-			}
+-
+-			this.each(function() {
+-				jQuery.data( this, key, value );
+-			});
+-		}, null, value, arguments.length > 1, null, true );
+-	},
+-
+-	removeData: function( key ) {
+-		return this.each(function() {
+-			jQuery.removeData( this, key );
+-		});
+-	}
+-});
+-
+-function dataAttr( elem, key, data ) {
+-	// If nothing was found internally, try to fetch any
+-	// data from the HTML5 data-* attribute
+-	if ( data === undefined && elem.nodeType === 1 ) {
+-
+-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+-
+-		data = elem.getAttribute( name );
+-
+-		if ( typeof data === "string" ) {
+-			try {
+-				data = data === "true" ? true :
+-					data === "false" ? false :
+-					data === "null" ? null :
+-					// Only convert to a number if it doesn't change the string
+-					+data + "" === data ? +data :
+-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+-						data;
+-			} catch( e ) {}
+-
+-			// Make sure we set the data so it isn't changed later
+-			jQuery.data( elem, key, data );
+-
+-		} else {
+-			data = undefined;
+-		}
+-	}
+-
+-	return data;
+-}
+-
+-// checks a cache object for emptiness
+-function isEmptyDataObject( obj ) {
+-	var name;
+-	for ( name in obj ) {
+-
+-		// if the public data object is empty, the private is still empty
+-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+-			continue;
+-		}
+-		if ( name !== "toJSON" ) {
+-			return false;
+-		}
+-	}
+-
+-	return true;
+-}
+-jQuery.extend({
+-	queue: function( elem, type, data ) {
+-		var queue;
+-
+-		if ( elem ) {
+-			type = ( type || "fx" ) + "queue";
+-			queue = jQuery._data( elem, type );
+-
+-			// Speed up dequeue by getting out quickly if this is just a lookup
+-			if ( data ) {
+-				if ( !queue || jQuery.isArray(data) ) {
+-					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+-				} else {
+-					queue.push( data );
+-				}
+-			}
+-			return queue || [];
+-		}
+-	},
+-
+-	dequeue: function( elem, type ) {
+-		type = type || "fx";
+-
+-		var queue = jQuery.queue( elem, type ),
+-			startLength = queue.length,
+-			fn = queue.shift(),
+-			hooks = jQuery._queueHooks( elem, type ),
+-			next = function() {
+-				jQuery.dequeue( elem, type );
+-			};
+-
+-		// If the fx queue is dequeued, always remove the progress sentinel
+-		if ( fn === "inprogress" ) {
+-			fn = queue.shift();
+-			startLength--;
+-		}
+-
+-		hooks.cur = fn;
+-		if ( fn ) {
+-
+-			// Add a progress sentinel to prevent the fx queue from being
+-			// automatically dequeued
+-			if ( type === "fx" ) {
+-				queue.unshift( "inprogress" );
+-			}
+-
+-			// clear up the last queue stop function
+-			delete hooks.stop;
+-			fn.call( elem, next, hooks );
+-		}
+-
+-		if ( !startLength && hooks ) {
+-			hooks.empty.fire();
+-		}
+-	},
+-
+-	// not intended for public consumption - generates a queueHooks object, or returns the current one
+-	_queueHooks: function( elem, type ) {
+-		var key = type + "queueHooks";
+-		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+-			empty: jQuery.Callbacks("once memory").add(function() {
+-				jQuery._removeData( elem, type + "queue" );
+-				jQuery._removeData( elem, key );
+-			})
+-		});
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	queue: function( type, data ) {
+-		var setter = 2;
+-
+-		if ( typeof type !== "string" ) {
+-			data = type;
+-			type = "fx";
+-			setter--;
+-		}
+-
+-		if ( arguments.length < setter ) {
+-			return jQuery.queue( this[0], type );
+-		}
+-
+-		return data === undefined ?
+-			this :
+-			this.each(function() {
+-				var queue = jQuery.queue( this, type, data );
+-
+-				// ensure a hooks for this queue
+-				jQuery._queueHooks( this, type );
+-
+-				if ( type === "fx" && queue[0] !== "inprogress" ) {
+-					jQuery.dequeue( this, type );
+-				}
+-			});
+-	},
+-	dequeue: function( type ) {
+-		return this.each(function() {
+-			jQuery.dequeue( this, type );
+-		});
+-	},
+-	// Based off of the plugin by Clint Helfers, with permission.
+-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+-	delay: function( time, type ) {
+-		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+-		type = type || "fx";
+-
+-		return this.queue( type, function( next, hooks ) {
+-			var timeout = setTimeout( next, time );
+-			hooks.stop = function() {
+-				clearTimeout( timeout );
+-			};
+-		});
+-	},
+-	clearQueue: function( type ) {
+-		return this.queue( type || "fx", [] );
+-	},
+-	// Get a promise resolved when queues of a certain type
+-	// are emptied (fx is the type by default)
+-	promise: function( type, obj ) {
+-		var tmp,
+-			count = 1,
+-			defer = jQuery.Deferred(),
+-			elements = this,
+-			i = this.length,
+-			resolve = function() {
+-				if ( !( --count ) ) {
+-					defer.resolveWith( elements, [ elements ] );
+-				}
+-			};
+-
+-		if ( typeof type !== "string" ) {
+-			obj = type;
+-			type = undefined;
+-		}
+-		type = type || "fx";
+-
+-		while( i-- ) {
+-			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+-			if ( tmp && tmp.empty ) {
+-				count++;
+-				tmp.empty.add( resolve );
+-			}
+-		}
+-		resolve();
+-		return defer.promise( obj );
+-	}
+-});
+-var nodeHook, boolHook,
+-	rclass = /[\t\r\n]/g,
+-	rreturn = /\r/g,
+-	rfocusable = /^(?:input|select|textarea|button|object)$/i,
+-	rclickable = /^(?:a|area)$/i,
+-	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+-	ruseDefault = /^(?:checked|selected)$/i,
+-	getSetAttribute = jQuery.support.getSetAttribute,
+-	getSetInput = jQuery.support.input;
+-
+-jQuery.fn.extend({
+-	attr: function( name, value ) {
+-		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+-	},
+-
+-	removeAttr: function( name ) {
+-		return this.each(function() {
+-			jQuery.removeAttr( this, name );
+-		});
+-	},
+-
+-	prop: function( name, value ) {
+-		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+-	},
+-
+-	removeProp: function( name ) {
+-		name = jQuery.propFix[ name ] || name;
+-		return this.each(function() {
+-			// try/catch handles cases where IE balks (such as removing a property on window)
+-			try {
+-				this[ name ] = undefined;
+-				delete this[ name ];
+-			} catch( e ) {}
+-		});
+-	},
+-
+-	addClass: function( value ) {
+-		var classes, elem, cur, clazz, j,
+-			i = 0,
+-			len = this.length,
+-			proceed = typeof value === "string" && value;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).addClass( value.call( this, j, this.className ) );
+-			});
+-		}
+-
+-		if ( proceed ) {
+-			// The disjunction here is for better compressibility (see removeClass)
+-			classes = ( value || "" ).match( core_rnotwhite ) || [];
+-
+-			for ( ; i < len; i++ ) {
+-				elem = this[ i ];
+-				cur = elem.nodeType === 1 && ( elem.className ?
+-					( " " + elem.className + " " ).replace( rclass, " " ) :
+-					" "
+-				);
+-
+-				if ( cur ) {
+-					j = 0;
+-					while ( (clazz = classes[j++]) ) {
+-						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+-							cur += clazz + " ";
+-						}
+-					}
+-					elem.className = jQuery.trim( cur );
+-
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	removeClass: function( value ) {
+-		var classes, elem, cur, clazz, j,
+-			i = 0,
+-			len = this.length,
+-			proceed = arguments.length === 0 || typeof value === "string" && value;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+-			});
+-		}
+-		if ( proceed ) {
+-			classes = ( value || "" ).match( core_rnotwhite ) || [];
+-
+-			for ( ; i < len; i++ ) {
+-				elem = this[ i ];
+-				// This expression is here for better compressibility (see addClass)
+-				cur = elem.nodeType === 1 && ( elem.className ?
+-					( " " + elem.className + " " ).replace( rclass, " " ) :
+-					""
+-				);
+-
+-				if ( cur ) {
+-					j = 0;
+-					while ( (clazz = classes[j++]) ) {
+-						// Remove *all* instances
+-						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+-							cur = cur.replace( " " + clazz + " ", " " );
+-						}
+-					}
+-					elem.className = value ? jQuery.trim( cur ) : "";
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	toggleClass: function( value, stateVal ) {
+-		var type = typeof value,
+-			isBool = typeof stateVal === "boolean";
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( i ) {
+-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			if ( type === "string" ) {
+-				// toggle individual class names
+-				var className,
+-					i = 0,
+-					self = jQuery( this ),
+-					state = stateVal,
+-					classNames = value.match( core_rnotwhite ) || [];
+-
+-				while ( (className = classNames[ i++ ]) ) {
+-					// check each className given, space separated list
+-					state = isBool ? state : !self.hasClass( className );
+-					self[ state ? "addClass" : "removeClass" ]( className );
+-				}
+-
+-			// Toggle whole class name
+-			} else if ( type === core_strundefined || type === "boolean" ) {
+-				if ( this.className ) {
+-					// store className if set
+-					jQuery._data( this, "__className__", this.className );
+-				}
+-
+-				// If the element has a class name or if we're passed "false",
+-				// then remove the whole classname (if there was one, the above saved it).
+-				// Otherwise bring back whatever was previously saved (if anything),
+-				// falling back to the empty string if nothing was stored.
+-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+-			}
+-		});
+-	},
+-
+-	hasClass: function( selector ) {
+-		var className = " " + selector + " ",
+-			i = 0,
+-			l = this.length;
+-		for ( ; i < l; i++ ) {
+-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+-				return true;
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	val: function( value ) {
+-		var ret, hooks, isFunction,
+-			elem = this[0];
+-
+-		if ( !arguments.length ) {
+-			if ( elem ) {
+-				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+-
+-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+-					return ret;
+-				}
+-
+-				ret = elem.value;
+-
+-				return typeof ret === "string" ?
+-					// handle most common string cases
+-					ret.replace(rreturn, "") :
+-					// handle cases where value is null/undef or number
+-					ret == null ? "" : ret;
+-			}
+-
+-			return;
+-		}
+-
+-		isFunction = jQuery.isFunction( value );
+-
+-		return this.each(function( i ) {
+-			var val,
+-				self = jQuery(this);
+-
+-			if ( this.nodeType !== 1 ) {
+-				return;
+-			}
+-
+-			if ( isFunction ) {
+-				val = value.call( this, i, self.val() );
+-			} else {
+-				val = value;
+-			}
+-
+-			// Treat null/undefined as ""; convert numbers to string
+-			if ( val == null ) {
+-				val = "";
+-			} else if ( typeof val === "number" ) {
+-				val += "";
+-			} else if ( jQuery.isArray( val ) ) {
+-				val = jQuery.map(val, function ( value ) {
+-					return value == null ? "" : value + "";
+-				});
+-			}
+-
+-			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+-
+-			// If set returns undefined, fall back to normal setting
+-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+-				this.value = val;
+-			}
+-		});
+-	}
+-});
+-
+-jQuery.extend({
+-	valHooks: {
+-		option: {
+-			get: function( elem ) {
+-				// attributes.value is undefined in Blackberry 4.7 but
+-				// uses .value. See #6932
+-				var val = elem.attributes.value;
+-				return !val || val.specified ? elem.value : elem.text;
+-			}
+-		},
+-		select: {
+-			get: function( elem ) {
+-				var value, option,
+-					options = elem.options,
+-					index = elem.selectedIndex,
+-					one = elem.type === "select-one" || index < 0,
+-					values = one ? null : [],
+-					max = one ? index + 1 : options.length,
+-					i = index < 0 ?
+-						max :
+-						one ? index : 0;
+-
+-				// Loop through all the selected options
+-				for ( ; i < max; i++ ) {
+-					option = options[ i ];
+-
+-					// oldIE doesn't update selected after form reset (#2551)
+-					if ( ( option.selected || i === index ) &&
+-							// Don't return options that are disabled or in a disabled optgroup
+-							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+-							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+-
+-						// Get the specific value for the option
+-						value = jQuery( option ).val();
+-
+-						// We don't need an array for one selects
+-						if ( one ) {
+-							return value;
+-						}
+-
+-						// Multi-Selects return an array
+-						values.push( value );
+-					}
+-				}
+-
+-				return values;
+-			},
+-
+-			set: function( elem, value ) {
+-				var values = jQuery.makeArray( value );
+-
+-				jQuery(elem).find("option").each(function() {
+-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+-				});
+-
+-				if ( !values.length ) {
+-					elem.selectedIndex = -1;
+-				}
+-				return values;
+-			}
+-		}
+-	},
+-
+-	attr: function( elem, name, value ) {
+-		var hooks, notxml, ret,
+-			nType = elem.nodeType;
+-
+-		// don't get/set attributes on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return;
+-		}
+-
+-		// Fallback to prop when attributes are not supported
+-		if ( typeof elem.getAttribute === core_strundefined ) {
+-			return jQuery.prop( elem, name, value );
+-		}
+-
+-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		// All attributes are lowercase
+-		// Grab necessary hook if one is defined
+-		if ( notxml ) {
+-			name = name.toLowerCase();
+-			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+-		}
+-
+-		if ( value !== undefined ) {
+-
+-			if ( value === null ) {
+-				jQuery.removeAttr( elem, name );
+-
+-			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				elem.setAttribute( name, value + "" );
+-				return value;
+-			}
+-
+-		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+-			return ret;
+-
+-		} else {
+-
+-			// In IE9+, Flash objects don't have .getAttribute (#12945)
+-			// Support: IE9+
+-			if ( typeof elem.getAttribute !== core_strundefined ) {
+-				ret =  elem.getAttribute( name );
+-			}
+-
+-			// Non-existent attributes return null, we normalize to undefined
+-			return ret == null ?
+-				undefined :
+-				ret;
+-		}
+-	},
+-
+-	removeAttr: function( elem, value ) {
+-		var name, propName,
+-			i = 0,
+-			attrNames = value && value.match( core_rnotwhite );
+-
+-		if ( attrNames && elem.nodeType === 1 ) {
+-			while ( (name = attrNames[i++]) ) {
+-				propName = jQuery.propFix[ name ] || name;
+-
+-				// Boolean attributes get special treatment (#10870)
+-				if ( rboolean.test( name ) ) {
+-					// Set corresponding property to false for boolean attributes
+-					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+-					if ( !getSetAttribute && ruseDefault.test( name ) ) {
+-						elem[ jQuery.camelCase( "default-" + name ) ] =
+-							elem[ propName ] = false;
+-					} else {
+-						elem[ propName ] = false;
+-					}
+-
+-				// See #9699 for explanation of this approach (setting first, then removal)
+-				} else {
+-					jQuery.attr( elem, name, "" );
+-				}
+-
+-				elem.removeAttribute( getSetAttribute ? name : propName );
+-			}
+-		}
+-	},
+-
+-	attrHooks: {
+-		type: {
+-			set: function( elem, value ) {
+-				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+-					// Setting the type on a radio button after the value resets the value in IE6-9
+-					// Reset value to default in case type is set after value during creation
+-					var val = elem.value;
+-					elem.setAttribute( "type", value );
+-					if ( val ) {
+-						elem.value = val;
+-					}
+-					return value;
+-				}
+-			}
+-		}
+-	},
+-
+-	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( elem, name, value ) {
+-		var ret, hooks, notxml,
+-			nType = elem.nodeType;
+-
+-		// don't get/set properties on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return;
+-		}
+-
+-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		if ( notxml ) {
+-			// Fix name and attach hooks
+-			name = jQuery.propFix[ name ] || name;
+-			hooks = jQuery.propHooks[ name ];
+-		}
+-
+-		if ( value !== undefined ) {
+-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				return ( elem[ name ] = value );
+-			}
+-
+-		} else {
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+-				return ret;
+-
+-			} else {
+-				return elem[ name ];
+-			}
+-		}
+-	},
+-
+-	propHooks: {
+-		tabIndex: {
+-			get: function( elem ) {
+-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+-				var attributeNode = elem.getAttributeNode("tabindex");
+-
+-				return attributeNode && attributeNode.specified ?
+-					parseInt( attributeNode.value, 10 ) :
+-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+-						0 :
+-						undefined;
+-			}
+-		}
+-	}
+-});
+-
+-// Hook for boolean attributes
+-boolHook = {
+-	get: function( elem, name ) {
+-		var
+-			// Use .prop to determine if this attribute is understood as boolean
+-			prop = jQuery.prop( elem, name ),
+-
+-			// Fetch it accordingly
+-			attr = typeof prop === "boolean" && elem.getAttribute( name ),
+-			detail = typeof prop === "boolean" ?
+-
+-				getSetInput && getSetAttribute ?
+-					attr != null :
+-					// oldIE fabricates an empty string for missing boolean attributes
+-					// and conflates checked/selected into attroperties
+-					ruseDefault.test( name ) ?
+-						elem[ jQuery.camelCase( "default-" + name ) ] :
+-						!!attr :
+-
+-				// fetch an attribute node for properties not recognized as boolean
+-				elem.getAttributeNode( name );
+-
+-		return detail && detail.value !== false ?
+-			name.toLowerCase() :
+-			undefined;
+-	},
+-	set: function( elem, value, name ) {
+-		if ( value === false ) {
+-			// Remove boolean attributes when set to false
+-			jQuery.removeAttr( elem, name );
+-		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+-			// IE<8 needs the *property* name
+-			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+-
+-		// Use defaultChecked and defaultSelected for oldIE
+-		} else {
+-			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+-		}
+-
+-		return name;
+-	}
+-};
+-
+-// fix oldIE value attroperty
+-if ( !getSetInput || !getSetAttribute ) {
+-	jQuery.attrHooks.value = {
+-		get: function( elem, name ) {
+-			var ret = elem.getAttributeNode( name );
+-			return jQuery.nodeName( elem, "input" ) ?
+-
+-				// Ignore the value *property* by using defaultValue
+-				elem.defaultValue :
+-
+-				ret && ret.specified ? ret.value : undefined;
+-		},
+-		set: function( elem, value, name ) {
+-			if ( jQuery.nodeName( elem, "input" ) ) {
+-				// Does not return so that setAttribute is also used
+-				elem.defaultValue = value;
+-			} else {
+-				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+-				return nodeHook && nodeHook.set( elem, value, name );
+-			}
+-		}
+-	};
+-}
+-
+-// IE6/7 do not support getting/setting some attributes with get/setAttribute
+-if ( !getSetAttribute ) {
+-
+-	// Use this for any attribute in IE6/7
+-	// This fixes almost every IE6/7 issue
+-	nodeHook = jQuery.valHooks.button = {
+-		get: function( elem, name ) {
+-			var ret = elem.getAttributeNode( name );
+-			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+-				ret.value :
+-				undefined;
+-		},
+-		set: function( elem, value, name ) {
+-			// Set the existing or create a new attribute node
+-			var ret = elem.getAttributeNode( name );
+-			if ( !ret ) {
+-				elem.setAttributeNode(
+-					(ret = elem.ownerDocument.createAttribute( name ))
+-				);
+-			}
+-
+-			ret.value = value += "";
+-
+-			// Break association with cloned elements by also using setAttribute (#9646)
+-			return name === "value" || value === elem.getAttribute( name ) ?
+-				value :
+-				undefined;
+-		}
+-	};
+-
+-	// Set contenteditable to false on removals(#10429)
+-	// Setting to empty string throws an error as an invalid value
+-	jQuery.attrHooks.contenteditable = {
+-		get: nodeHook.get,
+-		set: function( elem, value, name ) {
+-			nodeHook.set( elem, value === "" ? false : value, name );
+-		}
+-	};
+-
+-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+-	// This is for removals
+-	jQuery.each([ "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			set: function( elem, value ) {
+-				if ( value === "" ) {
+-					elem.setAttribute( name, "auto" );
+-					return value;
+-				}
+-			}
+-		});
+-	});
+-}
+-
+-
+-// Some attributes require a special call on IE
+-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+-if ( !jQuery.support.hrefNormalized ) {
+-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			get: function( elem ) {
+-				var ret = elem.getAttribute( name, 2 );
+-				return ret == null ? undefined : ret;
+-			}
+-		});
+-	});
+-
+-	// href/src property should get the full normalized URL (#10299/#12915)
+-	jQuery.each([ "href", "src" ], function( i, name ) {
+-		jQuery.propHooks[ name ] = {
+-			get: function( elem ) {
+-				return elem.getAttribute( name, 4 );
+-			}
+-		};
+-	});
+-}
+-
+-if ( !jQuery.support.style ) {
+-	jQuery.attrHooks.style = {
+-		get: function( elem ) {
+-			// Return undefined in the case of empty string
+-			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+-			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+-			return elem.style.cssText || undefined;
+-		},
+-		set: function( elem, value ) {
+-			return ( elem.style.cssText = value + "" );
+-		}
+-	};
+-}
+-
+-// Safari mis-reports the default selected property of an option
+-// Accessing the parent's selectedIndex property fixes it
+-if ( !jQuery.support.optSelected ) {
+-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+-		get: function( elem ) {
+-			var parent = elem.parentNode;
+-
+-			if ( parent ) {
+-				parent.selectedIndex;
+-
+-				// Make sure that it also works with optgroups, see #5701
+-				if ( parent.parentNode ) {
+-					parent.parentNode.selectedIndex;
+-				}
+-			}
+-			return null;
+-		}
+-	});
+-}
+-
+-// IE6/7 call enctype encoding
+-if ( !jQuery.support.enctype ) {
+-	jQuery.propFix.enctype = "encoding";
+-}
+-
+-// Radios and checkboxes getter/setter
+-if ( !jQuery.support.checkOn ) {
+-	jQuery.each([ "radio", "checkbox" ], function() {
+-		jQuery.valHooks[ this ] = {
+-			get: function( elem ) {
+-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+-				return elem.getAttribute("value") === null ? "on" : elem.value;
+-			}
+-		};
+-	});
+-}
+-jQuery.each([ "radio", "checkbox" ], function() {
+-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+-		set: function( elem, value ) {
+-			if ( jQuery.isArray( value ) ) {
+-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+-			}
+-		}
+-	});
+-});
+-var rformElems = /^(?:input|select|textarea)$/i,
+-	rkeyEvent = /^key/,
+-	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+-	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+-
+-function returnTrue() {
+-	return true;
+-}
+-
+-function returnFalse() {
+-	return false;
+-}
+-
+-/*
+- * Helper functions for managing events -- not part of the public interface.
+- * Props to Dean Edwards' addEvent library for many of the ideas.
+- */
+-jQuery.event = {
+-
+-	global: {},
+-
+-	add: function( elem, types, handler, data, selector ) {
+-		var tmp, events, t, handleObjIn,
+-			special, eventHandle, handleObj,
+-			handlers, type, namespaces, origType,
+-			elemData = jQuery._data( elem );
+-
+-		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+-		if ( !elemData ) {
+-			return;
+-		}
+-
+-		// Caller can pass in an object of custom data in lieu of the handler
+-		if ( handler.handler ) {
+-			handleObjIn = handler;
+-			handler = handleObjIn.handler;
+-			selector = handleObjIn.selector;
+-		}
+-
+-		// Make sure that the handler has a unique ID, used to find/remove it later
+-		if ( !handler.guid ) {
+-			handler.guid = jQuery.guid++;
+-		}
+-
+-		// Init the element's event structure and main handler, if this is the first
+-		if ( !(events = elemData.events) ) {
+-			events = elemData.events = {};
+-		}
+-		if ( !(eventHandle = elemData.handle) ) {
+-			eventHandle = elemData.handle = function( e ) {
+-				// Discard the second event of a jQuery.event.trigger() and
+-				// when an event is called after a page has unloaded
+-				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+-					undefined;
+-			};
+-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+-			eventHandle.elem = elem;
+-		}
+-
+-		// Handle multiple events separated by a space
+-		// jQuery(...).bind("mouseover mouseout", fn);
+-		types = ( types || "" ).match( core_rnotwhite ) || [""];
+-		t = types.length;
+-		while ( t-- ) {
+-			tmp = rtypenamespace.exec( types[t] ) || [];
+-			type = origType = tmp[1];
+-			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+-
+-			// If event changes its type, use the special event handlers for the changed type
+-			special = jQuery.event.special[ type ] || {};
+-
+-			// If selector defined, determine special event api type, otherwise given type
+-			type = ( selector ? special.delegateType : special.bindType ) || type;
+-
+-			// Update special based on newly reset type
+-			special = jQuery.event.special[ type ] || {};
+-
+-			// handleObj is passed to all event handlers
+-			handleObj = jQuery.extend({
+-				type: type,
+-				origType: origType,
+-				data: data,
+-				handler: handler,
+-				guid: handler.guid,
+-				selector: selector,
+-				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+-				namespace: namespaces.join(".")
+-			}, handleObjIn );
+-
+-			// Init the event handler queue if we're the first
+-			if ( !(handlers = events[ type ]) ) {
+-				handlers = events[ type ] = [];
+-				handlers.delegateCount = 0;
+-
+-				// Only use addEventListener/attachEvent if the special events handler returns false
+-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+-					// Bind the global event handler to the element
+-					if ( elem.addEventListener ) {
+-						elem.addEventListener( type, eventHandle, false );
+-
+-					} else if ( elem.attachEvent ) {
+-						elem.attachEvent( "on" + type, eventHandle );
+-					}
+-				}
+-			}
+-
+-			if ( special.add ) {
+-				special.add.call( elem, handleObj );
+-
+-				if ( !handleObj.handler.guid ) {
+-					handleObj.handler.guid = handler.guid;
+-				}
+-			}
+-
+-			// Add to the element's handler list, delegates in front
+-			if ( selector ) {
+-				handlers.splice( handlers.delegateCount++, 0, handleObj );
+-			} else {
+-				handlers.push( handleObj );
+-			}
+-
+-			// Keep track of which events have ever been used, for event optimization
+-			jQuery.event.global[ type ] = true;
+-		}
+-
+-		// Nullify elem to prevent memory leaks in IE
+-		elem = null;
+-	},
+-
+-	// Detach an event or set of events from an element
+-	remove: function( elem, types, handler, selector, mappedTypes ) {
+-		var j, handleObj, tmp,
+-			origCount, t, events,
+-			special, handlers, type,
+-			namespaces, origType,
+-			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+-
+-		if ( !elemData || !(events = elemData.events) ) {
+-			return;
+-		}
+-
+-		// Once for each type.namespace in types; type may be omitted
+-		types = ( types || "" ).match( core_rnotwhite ) || [""];
+-		t = types.length;
+-		while ( t-- ) {
+-			tmp = rtypenamespace.exec( types[t] ) || [];
+-			type = origType = tmp[1];
+-			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+-
+-			// Unbind all events (on this namespace, if provided) for the element
+-			if ( !type ) {
+-				for ( type in events ) {
+-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+-				}
+-				continue;
+-			}
+-
+-			special = jQuery.event.special[ type ] || {};
+-			type = ( selector ? special.delegateType : special.bindType ) || type;
+-			handlers = events[ type ] || [];
+-			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+-
+-			// Remove matching events
+-			origCount = j = handlers.length;
+-			while ( j-- ) {
+-				handleObj = handlers[ j ];
+-
+-				if ( ( mappedTypes || origType === handleObj.origType ) &&
+-					( !handler || handler.guid === handleObj.guid ) &&
+-					( !tmp || tmp.test( handleObj.namespace ) ) &&
+-					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+-					handlers.splice( j, 1 );
+-
+-					if ( handleObj.selector ) {
+-						handlers.delegateCount--;
+-					}
+-					if ( special.remove ) {
+-						special.remove.call( elem, handleObj );
+-					}
+-				}
+-			}
+-
+-			// Remove generic event handler if we removed something and no more handlers exist
+-			// (avoids potential for endless recursion during removal of special event handlers)
+-			if ( origCount && !handlers.length ) {
+-				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+-					jQuery.removeEvent( elem, type, elemData.handle );
+-				}
+-
+-				delete events[ type ];
+-			}
+-		}
+-
+-		// Remove the expando if it's no longer used
+-		if ( jQuery.isEmptyObject( events ) ) {
+-			delete elemData.handle;
+-
+-			// removeData also checks for emptiness and clears the expando if empty
+-			// so use it instead of delete
+-			jQuery._removeData( elem, "events" );
+-		}
+-	},
+-
+-	trigger: function( event, data, elem, onlyHandlers ) {
+-		var handle, ontype, cur,
+-			bubbleType, special, tmp, i,
+-			eventPath = [ elem || document ],
+-			type = core_hasOwn.call( event, "type" ) ? event.type : event,
+-			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+-
+-		cur = tmp = elem = elem || document;
+-
+-		// Don't do events on text and comment nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+-			return;
+-		}
+-
+-		if ( type.indexOf(".") >= 0 ) {
+-			// Namespaced trigger; create a regexp to match event type in handle()
+-			namespaces = type.split(".");
+-			type = namespaces.shift();
+-			namespaces.sort();
+-		}
+-		ontype = type.indexOf(":") < 0 && "on" + type;
+-
+-		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+-		event = event[ jQuery.expando ] ?
+-			event :
+-			new jQuery.Event( type, typeof event === "object" && event );
+-
+-		event.isTrigger = true;
+-		event.namespace = namespaces.join(".");
+-		event.namespace_re = event.namespace ?
+-			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+-			null;
+-
+-		// Clean up the event in case it is being reused
+-		event.result = undefined;
+-		if ( !event.target ) {
+-			event.target = elem;
+-		}
+-
+-		// Clone any incoming data and prepend the event, creating the handler arg list
+-		data = data == null ?
+-			[ event ] :
+-			jQuery.makeArray( data, [ event ] );
+-
+-		// Allow special events to draw outside the lines
+-		special = jQuery.event.special[ type ] || {};
+-		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+-			return;
+-		}
+-
+-		// Determine event propagation path in advance, per W3C events spec (#9951)
+-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+-
+-			bubbleType = special.delegateType || type;
+-			if ( !rfocusMorph.test( bubbleType + type ) ) {
+-				cur = cur.parentNode;
+-			}
+-			for ( ; cur; cur = cur.parentNode ) {
+-				eventPath.push( cur );
+-				tmp = cur;
+-			}
+-
+-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+-			if ( tmp === (elem.ownerDocument || document) ) {
+-				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+-			}
+-		}
+-
+-		// Fire handlers on the event path
+-		i = 0;
+-		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+-
+-			event.type = i > 1 ?
+-				bubbleType :
+-				special.bindType || type;
+-
+-			// jQuery handler
+-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+-			if ( handle ) {
+-				handle.apply( cur, data );
+-			}
+-
+-			// Native handler
+-			handle = ontype && cur[ ontype ];
+-			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+-				event.preventDefault();
+-			}
+-		}
+-		event.type = type;
+-
+-		// If nobody prevented the default action, do it now
+-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+-
+-			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+-
+-				// Call a native DOM method on the target with the same name name as the event.
+-				// Can't use an .isFunction() check here because IE6/7 fails that test.
+-				// Don't do default actions on window, that's where global variables be (#6170)
+-				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+-
+-					// Don't re-trigger an onFOO event when we call its FOO() method
+-					tmp = elem[ ontype ];
+-
+-					if ( tmp ) {
+-						elem[ ontype ] = null;
+-					}
+-
+-					// Prevent re-triggering of the same event, since we already bubbled it above
+-					jQuery.event.triggered = type;
+-					try {
+-						elem[ type ]();
+-					} catch ( e ) {
+-						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+-						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+-					}
+-					jQuery.event.triggered = undefined;
+-
+-					if ( tmp ) {
+-						elem[ ontype ] = tmp;
+-					}
+-				}
+-			}
+-		}
+-
+-		return event.result;
+-	},
+-
+-	dispatch: function( event ) {
+-
+-		// Make a writable jQuery.Event from the native event object
+-		event = jQuery.event.fix( event );
+-
+-		var i, ret, handleObj, matched, j,
+-			handlerQueue = [],
+-			args = core_slice.call( arguments ),
+-			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+-			special = jQuery.event.special[ event.type ] || {};
+-
+-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+-		args[0] = event;
+-		event.delegateTarget = this;
+-
+-		// Call the preDispatch hook for the mapped type, and let it bail if desired
+-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+-			return;
+-		}
+-
+-		// Determine handlers
+-		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+-
+-		// Run delegates first; they may want to stop propagation beneath us
+-		i = 0;
+-		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+-			event.currentTarget = matched.elem;
+-
+-			j = 0;
+-			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+-
+-				// Triggered event must either 1) have no namespace, or
+-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+-				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+-
+-					event.handleObj = handleObj;
+-					event.data = handleObj.data;
+-
+-					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+-							.apply( matched.elem, args );
+-
+-					if ( ret !== undefined ) {
+-						if ( (event.result = ret) === false ) {
+-							event.preventDefault();
+-							event.stopPropagation();
+-						}
+-					}
+-				}
+-			}
+-		}
+-
+-		// Call the postDispatch hook for the mapped type
+-		if ( special.postDispatch ) {
+-			special.postDispatch.call( this, event );
+-		}
+-
+-		return event.result;
+-	},
+-
+-	handlers: function( event, handlers ) {
+-		var sel, handleObj, matches, i,
+-			handlerQueue = [],
+-			delegateCount = handlers.delegateCount,
+-			cur = event.target;
+-
+-		// Find delegate handlers
+-		// Black-hole SVG <use> instance trees (#13180)
+-		// Avoid non-left-click bubbling in Firefox (#3861)
+-		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+-
+-			for ( ; cur != this; cur = cur.parentNode || this ) {
+-
+-				// Don't check non-elements (#13208)
+-				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+-				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+-					matches = [];
+-					for ( i = 0; i < delegateCount; i++ ) {
+-						handleObj = handlers[ i ];
+-
+-						// Don't conflict with Object.prototype properties (#13203)
+-						sel = handleObj.selector + " ";
+-
+-						if ( matches[ sel ] === undefined ) {
+-							matches[ sel ] = handleObj.needsContext ?
+-								jQuery( sel, this ).index( cur ) >= 0 :
+-								jQuery.find( sel, this, null, [ cur ] ).length;
+-						}
+-						if ( matches[ sel ] ) {
+-							matches.push( handleObj );
+-						}
+-					}
+-					if ( matches.length ) {
+-						handlerQueue.push({ elem: cur, handlers: matches });
+-					}
+-				}
+-			}
+-		}
+-
+-		// Add the remaining (directly-bound) handlers
+-		if ( delegateCount < handlers.length ) {
+-			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+-		}
+-
+-		return handlerQueue;
+-	},
+-
+-	fix: function( event ) {
+-		if ( event[ jQuery.expando ] ) {
+-			return event;
+-		}
+-
+-		// Create a writable copy of the event object and normalize some properties
+-		var i, prop, copy,
+-			type = event.type,
+-			originalEvent = event,
+-			fixHook = this.fixHooks[ type ];
+-
+-		if ( !fixHook ) {
+-			this.fixHooks[ type ] = fixHook =
+-				rmouseEvent.test( type ) ? this.mouseHooks :
+-				rkeyEvent.test( type ) ? this.keyHooks :
+-				{};
+-		}
+-		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+-
+-		event = new jQuery.Event( originalEvent );
+-
+-		i = copy.length;
+-		while ( i-- ) {
+-			prop = copy[ i ];
+-			event[ prop ] = originalEvent[ prop ];
+-		}
+-
+-		// Support: IE<9
+-		// Fix target property (#1925)
+-		if ( !event.target ) {
+-			event.target = originalEvent.srcElement || document;
+-		}
+-
+-		// Support: Chrome 23+, Safari?
+-		// Target should not be a text node (#504, #13143)
+-		if ( event.target.nodeType === 3 ) {
+-			event.target = event.target.parentNode;
+-		}
+-
+-		// Support: IE<9
+-		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+-		event.metaKey = !!event.metaKey;
+-
+-		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+-	},
+-
+-	// Includes some event props shared by KeyEvent and MouseEvent
+-	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+-
+-	fixHooks: {},
+-
+-	keyHooks: {
+-		props: "char charCode key keyCode".split(" "),
+-		filter: function( event, original ) {
+-
+-			// Add which for key events
+-			if ( event.which == null ) {
+-				event.which = original.charCode != null ? original.charCode : original.keyCode;
+-			}
+-
+-			return event;
+-		}
+-	},
+-
+-	mouseHooks: {
+-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+-		filter: function( event, original ) {
+-			var body, eventDoc, doc,
+-				button = original.button,
+-				fromElement = original.fromElement;
+-
+-			// Calculate pageX/Y if missing and clientX/Y available
+-			if ( event.pageX == null && original.clientX != null ) {
+-				eventDoc = event.target.ownerDocument || document;
+-				doc = eventDoc.documentElement;
+-				body = eventDoc.body;
+-
+-				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+-			}
+-
+-			// Add relatedTarget, if necessary
+-			if ( !event.relatedTarget && fromElement ) {
+-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+-			}
+-
+-			// Add which for click: 1 === left; 2 === middle; 3 === right
+-			// Note: button is not normalized, so don't use it
+-			if ( !event.which && button !== undefined ) {
+-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+-			}
+-
+-			return event;
+-		}
+-	},
+-
+-	special: {
+-		load: {
+-			// Prevent triggered image.load events from bubbling to window.load
+-			noBubble: true
+-		},
+-		click: {
+-			// For checkbox, fire native event so checked state will be right
+-			trigger: function() {
+-				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+-					this.click();
+-					return false;
+-				}
+-			}
+-		},
+-		focus: {
+-			// Fire native event if possible so blur/focus sequence is correct
+-			trigger: function() {
+-				if ( this !== document.activeElement && this.focus ) {
+-					try {
+-						this.focus();
+-						return false;
+-					} catch ( e ) {
+-						// Support: IE<9
+-						// If we error on focus to hidden element (#1486, #12518),
+-						// let .trigger() run the handlers
+-					}
+-				}
+-			},
+-			delegateType: "focusin"
+-		},
+-		blur: {
+-			trigger: function() {
+-				if ( this === document.activeElement && this.blur ) {
+-					this.blur();
+-					return false;
+-				}
+-			},
+-			delegateType: "focusout"
+-		},
+-
+-		beforeunload: {
+-			postDispatch: function( event ) {
+-
+-				// Even when returnValue equals to undefined Firefox will still show alert
+-				if ( event.result !== undefined ) {
+-					event.originalEvent.returnValue = event.result;
+-				}
+-			}
+-		}
+-	},
+-
+-	simulate: function( type, elem, event, bubble ) {
+-		// Piggyback on a donor event to simulate a different one.
+-		// Fake originalEvent to avoid donor's stopPropagation, but if the
+-		// simulated event prevents default then we do the same on the donor.
+-		var e = jQuery.extend(
+-			new jQuery.Event(),
+-			event,
+-			{ type: type,
+-				isSimulated: true,
+-				originalEvent: {}
+-			}
+-		);
+-		if ( bubble ) {
+-			jQuery.event.trigger( e, null, elem );
+-		} else {
+-			jQuery.event.dispatch.call( elem, e );
+-		}
+-		if ( e.isDefaultPrevented() ) {
+-			event.preventDefault();
+-		}
+-	}
+-};
+-
+-jQuery.removeEvent = document.removeEventListener ?
+-	function( elem, type, handle ) {
+-		if ( elem.removeEventListener ) {
+-			elem.removeEventListener( type, handle, false );
+-		}
+-	} :
+-	function( elem, type, handle ) {
+-		var name = "on" + type;
+-
+-		if ( elem.detachEvent ) {
+-
+-			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+-			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+-			if ( typeof elem[ name ] === core_strundefined ) {
+-				elem[ name ] = null;
+-			}
+-
+-			elem.detachEvent( name, handle );
+-		}
+-	};
+-
+-jQuery.Event = function( src, props ) {
+-	// Allow instantiation without the 'new' keyword
+-	if ( !(this instanceof jQuery.Event) ) {
+-		return new jQuery.Event( src, props );
+-	}
+-
+-	// Event object
+-	if ( src && src.type ) {
+-		this.originalEvent = src;
+-		this.type = src.type;
+-
+-		// Events bubbling up the document may have been marked as prevented
+-		// by a handler lower down the tree; reflect the correct value.
+-		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+-			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+-
+-	// Event type
+-	} else {
+-		this.type = src;
+-	}
+-
+-	// Put explicitly provided properties onto the event object
+-	if ( props ) {
+-		jQuery.extend( this, props );
+-	}
+-
+-	// Create a timestamp if incoming event doesn't have one
+-	this.timeStamp = src && src.timeStamp || jQuery.now();
+-
+-	// Mark it as fixed
+-	this[ jQuery.expando ] = true;
+-};
+-
+-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+-jQuery.Event.prototype = {
+-	isDefaultPrevented: returnFalse,
+-	isPropagationStopped: returnFalse,
+-	isImmediatePropagationStopped: returnFalse,
+-
+-	preventDefault: function() {
+-		var e = this.originalEvent;
+-
+-		this.isDefaultPrevented = returnTrue;
+-		if ( !e ) {
+-			return;
+-		}
+-
+-		// If preventDefault exists, run it on the original event
+-		if ( e.preventDefault ) {
+-			e.preventDefault();
+-
+-		// Support: IE
+-		// Otherwise set the returnValue property of the original event to false
+-		} else {
+-			e.returnValue = false;
+-		}
+-	},
+-	stopPropagation: function() {
+-		var e = this.originalEvent;
+-
+-		this.isPropagationStopped = returnTrue;
+-		if ( !e ) {
+-			return;
+-		}
+-		// If stopPropagation exists, run it on the original event
+-		if ( e.stopPropagation ) {
+-			e.stopPropagation();
+-		}
+-
+-		// Support: IE
+-		// Set the cancelBubble property of the original event to true
+-		e.cancelBubble = true;
+-	},
+-	stopImmediatePropagation: function() {
+-		this.isImmediatePropagationStopped = returnTrue;
+-		this.stopPropagation();
+-	}
+-};
+-
+-// Create mouseenter/leave events using mouseover/out and event-time checks
+-jQuery.each({
+-	mouseenter: "mouseover",
+-	mouseleave: "mouseout"
+-}, function( orig, fix ) {
+-	jQuery.event.special[ orig ] = {
+-		delegateType: fix,
+-		bindType: fix,
+-
+-		handle: function( event ) {
+-			var ret,
+-				target = this,
+-				related = event.relatedTarget,
+-				handleObj = event.handleObj;
+-
+-			// For mousenter/leave call the handler if related is outside the target.
+-			// NB: No relatedTarget if the mouse left/entered the browser window
+-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+-				event.type = handleObj.origType;
+-				ret = handleObj.handler.apply( this, arguments );
+-				event.type = fix;
+-			}
+-			return ret;
+-		}
+-	};
+-});
+-
+-// IE submit delegation
+-if ( !jQuery.support.submitBubbles ) {
+-
+-	jQuery.event.special.submit = {
+-		setup: function() {
+-			// Only need this for delegated form submit events
+-			if ( jQuery.nodeName( this, "form" ) ) {
+-				return false;
+-			}
+-
+-			// Lazy-add a submit handler when a descendant form may potentially be submitted
+-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+-				// Node name check avoids a VML-related crash in IE (#9807)
+-				var elem = e.target,
+-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+-				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+-					jQuery.event.add( form, "submit._submit", function( event ) {
+-						event._submit_bubble = true;
+-					});
+-					jQuery._data( form, "submitBubbles", true );
+-				}
+-			});
+-			// return undefined since we don't need an event listener
+-		},
+-
+-		postDispatch: function( event ) {
+-			// If form was submitted by the user, bubble the event up the tree
+-			if ( event._submit_bubble ) {
+-				delete event._submit_bubble;
+-				if ( this.parentNode && !event.isTrigger ) {
+-					jQuery.event.simulate( "submit", this.parentNode, event, true );
+-				}
+-			}
+-		},
+-
+-		teardown: function() {
+-			// Only need this for delegated form submit events
+-			if ( jQuery.nodeName( this, "form" ) ) {
+-				return false;
+-			}
+-
+-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+-			jQuery.event.remove( this, "._submit" );
+-		}
+-	};
+-}
+-
+-// IE change delegation and checkbox/radio fix
+-if ( !jQuery.support.changeBubbles ) {
+-
+-	jQuery.event.special.change = {
+-
+-		setup: function() {
+-
+-			if ( rformElems.test( this.nodeName ) ) {
+-				// IE doesn't fire change on a check/radio until blur; trigger it on click
+-				// after a propertychange. Eat the blur-change in special.change.handle.
+-				// This still fires onchange a second time for check/radio after blur.
+-				if ( this.type === "checkbox" || this.type === "radio" ) {
+-					jQuery.event.add( this, "propertychange._change", function( event ) {
+-						if ( event.originalEvent.propertyName === "checked" ) {
+-							this._just_changed = true;
+-						}
+-					});
+-					jQuery.event.add( this, "click._change", function( event ) {
+-						if ( this._just_changed && !event.isTrigger ) {
+-							this._just_changed = false;
+-						}
+-						// Allow triggered, simulated change events (#11500)
+-						jQuery.event.simulate( "change", this, event, true );
+-					});
+-				}
+-				return false;
+-			}
+-			// Delegated event; lazy-add a change handler on descendant inputs
+-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+-				var elem = e.target;
+-
+-				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+-					jQuery.event.add( elem, "change._change", function( event ) {
+-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+-							jQuery.event.simulate( "change", this.parentNode, event, true );
+-						}
+-					});
+-					jQuery._data( elem, "changeBubbles", true );
+-				}
+-			});
+-		},
+-
+-		handle: function( event ) {
+-			var elem = event.target;
+-
+-			// Swallow native change events from checkbox/radio, we already triggered them above
+-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+-				return event.handleObj.handler.apply( this, arguments );
+-			}
+-		},
+-
+-		teardown: function() {
+-			jQuery.event.remove( this, "._change" );
+-
+-			return !rformElems.test( this.nodeName );
+-		}
+-	};
+-}
+-
+-// Create "bubbling" focus and blur events
+-if ( !jQuery.support.focusinBubbles ) {
+-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+-
+-		// Attach a single capturing handler while someone wants focusin/focusout
+-		var attaches = 0,
+-			handler = function( event ) {
+-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+-			};
+-
+-		jQuery.event.special[ fix ] = {
+-			setup: function() {
+-				if ( attaches++ === 0 ) {
+-					document.addEventListener( orig, handler, true );
+-				}
+-			},
+-			teardown: function() {
+-				if ( --attaches === 0 ) {
+-					document.removeEventListener( orig, handler, true );
+-				}
+-			}
+-		};
+-	});
+-}
+-
+-jQuery.fn.extend({
+-
+-	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+-		var type, origFn;
+-
+-		// Types can be a map of types/handlers
+-		if ( typeof types === "object" ) {
+-			// ( types-Object, selector, data )
+-			if ( typeof selector !== "string" ) {
+-				// ( types-Object, data )
+-				data = data || selector;
+-				selector = undefined;
+-			}
+-			for ( type in types ) {
+-				this.on( type, selector, data, types[ type ], one );
+-			}
+-			return this;
+-		}
+-
+-		if ( data == null && fn == null ) {
+-			// ( types, fn )
+-			fn = selector;
+-			data = selector = undefined;
+-		} else if ( fn == null ) {
+-			if ( typeof selector === "string" ) {
+-				// ( types, selector, fn )
+-				fn = data;
+-				data = undefined;
+-			} else {
+-				// ( types, data, fn )
+-				fn = data;
+-				data = selector;
+-				selector = undefined;
+-			}
+-		}
+-		if ( fn === false ) {
+-			fn = returnFalse;
+-		} else if ( !fn ) {
+-			return this;
+-		}
+-
+-		if ( one === 1 ) {
+-			origFn = fn;
+-			fn = function( event ) {
+-				// Can use an empty set, since event contains the info
+-				jQuery().off( event );
+-				return origFn.apply( this, arguments );
+-			};
+-			// Use same guid so caller can remove using origFn
+-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+-		}
+-		return this.each( function() {
+-			jQuery.event.add( this, types, fn, data, selector );
+-		});
+-	},
+-	one: function( types, selector, data, fn ) {
+-		return this.on( types, selector, data, fn, 1 );
+-	},
+-	off: function( types, selector, fn ) {
+-		var handleObj, type;
+-		if ( types && types.preventDefault && types.handleObj ) {
+-			// ( event )  dispatched jQuery.Event
+-			handleObj = types.handleObj;
+-			jQuery( types.delegateTarget ).off(
+-				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+-				handleObj.selector,
+-				handleObj.handler
+-			);
+-			return this;
+-		}
+-		if ( typeof types === "object" ) {
+-			// ( types-object [, selector] )
+-			for ( type in types ) {
+-				this.off( type, selector, types[ type ] );
+-			}
+-			return this;
+-		}
+-		if ( selector === false || typeof selector === "function" ) {
+-			// ( types [, fn] )
+-			fn = selector;
+-			selector = undefined;
+-		}
+-		if ( fn === false ) {
+-			fn = returnFalse;
+-		}
+-		return this.each(function() {
+-			jQuery.event.remove( this, types, fn, selector );
+-		});
+-	},
+-
+-	bind: function( types, data, fn ) {
+-		return this.on( types, null, data, fn );
+-	},
+-	unbind: function( types, fn ) {
+-		return this.off( types, null, fn );
+-	},
+-
+-	delegate: function( selector, types, data, fn ) {
+-		return this.on( types, selector, data, fn );
+-	},
+-	undelegate: function( selector, types, fn ) {
+-		// ( namespace ) or ( selector, types [, fn] )
+-		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+-	},
+-
+-	trigger: function( type, data ) {
+-		return this.each(function() {
+-			jQuery.event.trigger( type, data, this );
+-		});
+-	},
+-	triggerHandler: function( type, data ) {
+-		var elem = this[0];
+-		if ( elem ) {
+-			return jQuery.event.trigger( type, data, elem, true );
+-		}
+-	}
+-});
+-/*!
+- * Sizzle CSS Selector Engine
+- * Copyright 2012 jQuery Foundation and other contributors
+- * Released under the MIT license
+- * http://sizzlejs.com/
+- */
+-(function( window, undefined ) {
+-
+-var i,
+-	cachedruns,
+-	Expr,
+-	getText,
+-	isXML,
+-	compile,
+-	hasDuplicate,
+-	outermostContext,
+-
+-	// Local document vars
+-	setDocument,
+-	document,
+-	docElem,
+-	documentIsXML,
+-	rbuggyQSA,
+-	rbuggyMatches,
+-	matches,
+-	contains,
+-	sortOrder,
+-
+-	// Instance-specific data
+-	expando = "sizzle" + -(new Date()),
+-	preferredDoc = window.document,
+-	support = {},
+-	dirruns = 0,
+-	done = 0,
+-	classCache = createCache(),
+-	tokenCache = createCache(),
+-	compilerCache = createCache(),
+-
+-	// General-purpose constants
+-	strundefined = typeof undefined,
+-	MAX_NEGATIVE = 1 << 31,
+-
+-	// Array methods
+-	arr = [],
+-	pop = arr.pop,
+-	push = arr.push,
+-	slice = arr.slice,
+-	// Use a stripped-down indexOf if we can't use a native one
+-	indexOf = arr.indexOf || function( elem ) {
+-		var i = 0,
+-			len = this.length;
+-		for ( ; i < len; i++ ) {
+-			if ( this[i] === elem ) {
+-				return i;
+-			}
+-		}
+-		return -1;
+-	},
+-
+-
+-	// Regular expressions
+-
+-	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+-	whitespace = "[\\x20\\t\\r\\n\\f]",
+-	// http://www.w3.org/TR/css3-syntax/#characters
+-	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+-
+-	// Loosely modeled on CSS identifier characters
+-	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+-	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+-	identifier = characterEncoding.replace( "w", "w#" ),
+-
+-	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+-	operators = "([*^$|!~]?=)",
+-	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+-		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+-
+-	// Prefer arguments quoted,
+-	//   then not containing pseudos/brackets,
+-	//   then attribute selectors/non-parenthetical expressions,
+-	//   then anything else
+-	// These preferences are here to reduce the number of selectors
+-	//   needing tokenize in the PSEUDO preFilter
+-	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+-
+-	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+-
+-	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+-	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+-	rpseudo = new RegExp( pseudos ),
+-	ridentifier = new RegExp( "^" + identifier + "$" ),
+-
+-	matchExpr = {
+-		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+-		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+-		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+-		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+-		"ATTR": new RegExp( "^" + attributes ),
+-		"PSEUDO": new RegExp( "^" + pseudos ),
+-		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+-			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+-			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+-		// For use in libraries implementing .is()
+-		// We use this for POS matching in `select`
+-		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+-			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+-	},
+-
+-	rsibling = /[\x20\t\r\n\f]*[+~]/,
+-
+-	rnative = /^[^{]+\{\s*\[native code/,
+-
+-	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+-	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+-
+-	rinputs = /^(?:input|select|textarea|button)$/i,
+-	rheader = /^h\d$/i,
+-
+-	rescape = /'|\\/g,
+-	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+-
+-	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+-	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+-	funescape = function( _, escaped ) {
+-		var high = "0x" + escaped - 0x10000;
+-		// NaN means non-codepoint
+-		return high !== high ?
+-			escaped :
+-			// BMP codepoint
+-			high < 0 ?
+-				String.fromCharCode( high + 0x10000 ) :
+-				// Supplemental Plane codepoint (surrogate pair)
+-				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+-	};
+-
+-// Use a stripped-down slice if we can't use a native one
+-try {
+-	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
+-} catch ( e ) {
+-	slice = function( i ) {
+-		var elem,
+-			results = [];
+-		while ( (elem = this[i++]) ) {
+-			results.push( elem );
+-		}
+-		return results;
+-	};
+-}
+-
+-/**
+- * For feature detection
+- * @param {Function} fn The function to test for native support
+- */
+-function isNative( fn ) {
+-	return rnative.test( fn + "" );
+-}
+-
+-/**
+- * Create key-value caches of limited size
+- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+- *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+- *	deleting the oldest entry
+- */
+-function createCache() {
+-	var cache,
+-		keys = [];
+-
+-	return (cache = function( key, value ) {
+-		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+-		if ( keys.push( key += " " ) > Expr.cacheLength ) {
+-			// Only keep the most recent entries
+-			delete cache[ keys.shift() ];
+-		}
+-		return (cache[ key ] = value);
+-	});
+-}
+-
+-/**
+- * Mark a function for special use by Sizzle
+- * @param {Function} fn The function to mark
+- */
+-function markFunction( fn ) {
+-	fn[ expando ] = true;
+-	return fn;
+-}
+-
+-/**
+- * Support testing using an element
+- * @param {Function} fn Passed the created div and expects a boolean result
+- */
+-function assert( fn ) {
+-	var div = document.createElement("div");
+-
+-	try {
+-		return fn( div );
+-	} catch (e) {
+-		return false;
+-	} finally {
+-		// release memory in IE
+-		div = null;
+-	}
+-}
+-
+-function Sizzle( selector, context, results, seed ) {
+-	var match, elem, m, nodeType,
+-		// QSA vars
+-		i, groups, old, nid, newContext, newSelector;
+-
+-	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+-		setDocument( context );
+-	}
+-
+-	context = context || document;
+-	results = results || [];
+-
+-	if ( !selector || typeof selector !== "string" ) {
+-		return results;
+-	}
+-
+-	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+-		return [];
+-	}
+-
+-	if ( !documentIsXML && !seed ) {
+-
+-		// Shortcuts
+-		if ( (match = rquickExpr.exec( selector )) ) {
+-			// Speed-up: Sizzle("#ID")
+-			if ( (m = match[1]) ) {
+-				if ( nodeType === 9 ) {
+-					elem = context.getElementById( m );
+-					// Check parentNode to catch when Blackberry 4.6 returns
+-					// nodes that are no longer in the document #6963
+-					if ( elem && elem.parentNode ) {
+-						// Handle the case where IE, Opera, and Webkit return items
+-						// by name instead of ID
+-						if ( elem.id === m ) {
+-							results.push( elem );
+-							return results;
+-						}
+-					} else {
+-						return results;
+-					}
+-				} else {
+-					// Context is not a document
+-					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+-						contains( context, elem ) && elem.id === m ) {
+-						results.push( elem );
+-						return results;
+-					}
+-				}
+-
+-			// Speed-up: Sizzle("TAG")
+-			} else if ( match[2] ) {
+-				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+-				return results;
+-
+-			// Speed-up: Sizzle(".CLASS")
+-			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+-				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+-				return results;
+-			}
+-		}
+-
+-		// QSA path
+-		if ( support.qsa && !rbuggyQSA.test(selector) ) {
+-			old = true;
+-			nid = expando;
+-			newContext = context;
+-			newSelector = nodeType === 9 && selector;
+-
+-			// qSA works strangely on Element-rooted queries
+-			// We can work around this by specifying an extra ID on the root
+-			// and working up from there (Thanks to Andrew Dupont for the technique)
+-			// IE 8 doesn't work on object elements
+-			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+-				groups = tokenize( selector );
+-
+-				if ( (old = context.getAttribute("id")) ) {
+-					nid = old.replace( rescape, "\\$&" );
+-				} else {
+-					context.setAttribute( "id", nid );
+-				}
+-				nid = "[id='" + nid + "'] ";
+-
+-				i = groups.length;
+-				while ( i-- ) {
+-					groups[i] = nid + toSelector( groups[i] );
+-				}
+-				newContext = rsibling.test( selector ) && context.parentNode || context;
+-				newSelector = groups.join(",");
+-			}
+-
+-			if ( newSelector ) {
+-				try {
+-					push.apply( results, slice.call( newContext.querySelectorAll(
+-						newSelector
+-					), 0 ) );
+-					return results;
+-				} catch(qsaError) {
+-				} finally {
+-					if ( !old ) {
+-						context.removeAttribute("id");
+-					}
+-				}
+-			}
+-		}
+-	}
+-
+-	// All others
+-	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+-}
+-
+-/**
+- * Detect xml
+- * @param {Element|Object} elem An element or a document
+- */
+-isXML = Sizzle.isXML = function( elem ) {
+-	// documentElement is verified for cases where it doesn't yet exist
+-	// (such as loading iframes in IE - #4833)
+-	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+-	return documentElement ? documentElement.nodeName !== "HTML" : false;
+-};
+-
+-/**
+- * Sets document-related variables once based on the current document
+- * @param {Element|Object} [doc] An element or document object to use to set the document
+- * @returns {Object} Returns the current document
+- */
+-setDocument = Sizzle.setDocument = function( node ) {
+-	var doc = node ? node.ownerDocument || node : preferredDoc;
+-
+-	// If no document and documentElement is available, return
+-	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+-		return document;
+-	}
+-
+-	// Set our document
+-	document = doc;
+-	docElem = doc.documentElement;
+-
+-	// Support tests
+-	documentIsXML = isXML( doc );
+-
+-	// Check if getElementsByTagName("*") returns only elements
+-	support.tagNameNoComments = assert(function( div ) {
+-		div.appendChild( doc.createComment("") );
+-		return !div.getElementsByTagName("*").length;
+-	});
+-
+-	// Check if attributes should be retrieved by attribute nodes
+-	support.attributes = assert(function( div ) {
+-		div.innerHTML = "<select></select>";
+-		var type = typeof div.lastChild.getAttribute("multiple");
+-		// IE8 returns a string for some attributes even when not present
+-		return type !== "boolean" && type !== "string";
+-	});
+-
+-	// Check if getElementsByClassName can be trusted
+-	support.getByClassName = assert(function( div ) {
+-		// Opera can't find a second classname (in 9.6)
+-		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+-		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+-			return false;
+-		}
+-
+-		// Safari 3.2 caches class attributes and doesn't catch changes
+-		div.lastChild.className = "e";
+-		return div.getElementsByClassName("e").length === 2;
+-	});
+-
+-	// Check if getElementById returns elements by name
+-	// Check if getElementsByName privileges form controls or returns elements by ID
+-	support.getByName = assert(function( div ) {
+-		// Inject content
+-		div.id = expando + 0;
+-		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+-		docElem.insertBefore( div, docElem.firstChild );
+-
+-		// Test
+-		var pass = doc.getElementsByName &&
+-			// buggy browsers will return fewer than the correct 2
+-			doc.getElementsByName( expando ).length === 2 +
+-			// buggy browsers will return more than the correct 0
+-			doc.getElementsByName( expando + 0 ).length;
+-		support.getIdNotName = !doc.getElementById( expando );
+-
+-		// Cleanup
+-		docElem.removeChild( div );
+-
+-		return pass;
+-	});
+-
+-	// IE6/7 return modified attributes
+-	Expr.attrHandle = assert(function( div ) {
+-		div.innerHTML = "<a href='#'></a>";
+-		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+-			div.firstChild.getAttribute("href") === "#";
+-	}) ?
+-		{} :
+-		{
+-			"href": function( elem ) {
+-				return elem.getAttribute( "href", 2 );
+-			},
+-			"type": function( elem ) {
+-				return elem.getAttribute("type");
+-			}
+-		};
+-
+-	// ID find and filter
+-	if ( support.getIdNotName ) {
+-		Expr.find["ID"] = function( id, context ) {
+-			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+-				var m = context.getElementById( id );
+-				// Check parentNode to catch when Blackberry 4.6 returns
+-				// nodes that are no longer in the document #6963
+-				return m && m.parentNode ? [m] : [];
+-			}
+-		};
+-		Expr.filter["ID"] = function( id ) {
+-			var attrId = id.replace( runescape, funescape );
+-			return function( elem ) {
+-				return elem.getAttribute("id") === attrId;
+-			};
+-		};
+-	} else {
+-		Expr.find["ID"] = function( id, context ) {
+-			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+-				var m = context.getElementById( id );
+-
+-				return m ?
+-					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+-						[m] :
+-						undefined :
+-					[];
+-			}
+-		};
+-		Expr.filter["ID"] =  function( id ) {
+-			var attrId = id.replace( runescape, funescape );
+-			return function( elem ) {
+-				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+-				return node && node.value === attrId;
+-			};
+-		};
+-	}
+-
+-	// Tag
+-	Expr.find["TAG"] = support.tagNameNoComments ?
+-		function( tag, context ) {
+-			if ( typeof context.getElementsByTagName !== strundefined ) {
+-				return context.getElementsByTagName( tag );
+-			}
+-		} :
+-		function( tag, context ) {
+-			var elem,
+-				tmp = [],
+-				i = 0,
+-				results = context.getElementsByTagName( tag );
+-
+-			// Filter out possible comments
+-			if ( tag === "*" ) {
+-				while ( (elem = results[i++]) ) {
+-					if ( elem.nodeType === 1 ) {
+-						tmp.push( elem );
+-					}
+-				}
+-
+-				return tmp;
+-			}
+-			return results;
+-		};
+-
+-	// Name
+-	Expr.find["NAME"] = support.getByName && function( tag, context ) {
+-		if ( typeof context.getElementsByName !== strundefined ) {
+-			return context.getElementsByName( name );
+-		}
+-	};
+-
+-	// Class
+-	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+-		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+-			return context.getElementsByClassName( className );
+-		}
+-	};
+-
+-	// QSA and matchesSelector support
+-
+-	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+-	rbuggyMatches = [];
+-
+-	// qSa(:focus) reports false when true (Chrome 21),
+-	// no need to also add to buggyMatches since matches checks buggyQSA
+-	// A support test would require too much code (would include document ready)
+-	rbuggyQSA = [ ":focus" ];
+-
+-	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+-		// Build QSA regex
+-		// Regex strategy adopted from Diego Perini
+-		assert(function( div ) {
+-			// Select is set to empty string on purpose
+-			// This is to test IE's treatment of not explictly
+-			// setting a boolean content attribute,
+-			// since its presence should be enough
+-			// http://bugs.jquery.com/ticket/12359
+-			div.innerHTML = "<select><option selected=''></option></select>";
+-
+-			// IE8 - Some boolean attributes are not treated correctly
+-			if ( !div.querySelectorAll("[selected]").length ) {
+-				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+-			}
+-
+-			// Webkit/Opera - :checked should return selected option elements
+-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+-			// IE8 throws error here and will not see later tests
+-			if ( !div.querySelectorAll(":checked").length ) {
+-				rbuggyQSA.push(":checked");
+-			}
+-		});
+-
+-		assert(function( div ) {
+-
+-			// Opera 10-12/IE8 - ^= $= *= and empty values
+-			// Should not select anything
+-			div.innerHTML = "<input type='hidden' i=''/>";
+-			if ( div.querySelectorAll("[i^='']").length ) {
+-				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+-			}
+-
+-			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+-			// IE8 throws error here and will not see later tests
+-			if ( !div.querySelectorAll(":enabled").length ) {
+-				rbuggyQSA.push( ":enabled", ":disabled" );
+-			}
+-
+-			// Opera 10-11 does not throw on post-comma invalid pseudos
+-			div.querySelectorAll("*,:x");
+-			rbuggyQSA.push(",.*:");
+-		});
+-	}
+-
+-	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+-		docElem.mozMatchesSelector ||
+-		docElem.webkitMatchesSelector ||
+-		docElem.oMatchesSelector ||
+-		docElem.msMatchesSelector) )) ) {
+-
+-		assert(function( div ) {
+-			// Check to see if it's possible to do matchesSelector
+-			// on a disconnected node (IE 9)
+-			support.disconnectedMatch = matches.call( div, "div" );
+-
+-			// This should fail with an exception
+-			// Gecko does not error, returns false instead
+-			matches.call( div, "[s!='']:x" );
+-			rbuggyMatches.push( "!=", pseudos );
+-		});
+-	}
+-
+-	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+-	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+-
+-	// Element contains another
+-	// Purposefully does not implement inclusive descendent
+-	// As in, an element does not contain itself
+-	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+-		function( a, b ) {
+-			var adown = a.nodeType === 9 ? a.documentElement : a,
+-				bup = b && b.parentNode;
+-			return a === bup || !!( bup && bup.nodeType === 1 && (
+-				adown.contains ?
+-					adown.contains( bup ) :
+-					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+-			));
+-		} :
+-		function( a, b ) {
+-			if ( b ) {
+-				while ( (b = b.parentNode) ) {
+-					if ( b === a ) {
+-						return true;
+-					}
+-				}
+-			}
+-			return false;
+-		};
+-
+-	// Document order sorting
+-	sortOrder = docElem.compareDocumentPosition ?
+-	function( a, b ) {
+-		var compare;
+-
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-		}
+-
+-		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+-			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+-				if ( a === doc || contains( preferredDoc, a ) ) {
+-					return -1;
+-				}
+-				if ( b === doc || contains( preferredDoc, b ) ) {
+-					return 1;
+-				}
+-				return 0;
+-			}
+-			return compare & 4 ? -1 : 1;
+-		}
+-
+-		return a.compareDocumentPosition ? -1 : 1;
+-	} :
+-	function( a, b ) {
+-		var cur,
+-			i = 0,
+-			aup = a.parentNode,
+-			bup = b.parentNode,
+-			ap = [ a ],
+-			bp = [ b ];
+-
+-		// Exit early if the nodes are identical
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-
+-		// Parentless nodes are either documents or disconnected
+-		} else if ( !aup || !bup ) {
+-			return a === doc ? -1 :
+-				b === doc ? 1 :
+-				aup ? -1 :
+-				bup ? 1 :
+-				0;
+-
+-		// If the nodes are siblings, we can do a quick check
+-		} else if ( aup === bup ) {
+-			return siblingCheck( a, b );
+-		}
+-
+-		// Otherwise we need full lists of their ancestors for comparison
+-		cur = a;
+-		while ( (cur = cur.parentNode) ) {
+-			ap.unshift( cur );
+-		}
+-		cur = b;
+-		while ( (cur = cur.parentNode) ) {
+-			bp.unshift( cur );
+-		}
+-
+-		// Walk down the tree looking for a discrepancy
+-		while ( ap[i] === bp[i] ) {
+-			i++;
+-		}
+-
+-		return i ?
+-			// Do a sibling check if the nodes have a common ancestor
+-			siblingCheck( ap[i], bp[i] ) :
+-
+-			// Otherwise nodes in our document sort first
+-			ap[i] === preferredDoc ? -1 :
+-			bp[i] === preferredDoc ? 1 :
+-			0;
+-	};
+-
+-	// Always assume the presence of duplicates if sort doesn't
+-	// pass them to our comparison function (as in Google Chrome).
+-	hasDuplicate = false;
+-	[0, 0].sort( sortOrder );
+-	support.detectDuplicates = hasDuplicate;
+-
+-	return document;
+-};
+-
+-Sizzle.matches = function( expr, elements ) {
+-	return Sizzle( expr, null, null, elements );
+-};
+-
+-Sizzle.matchesSelector = function( elem, expr ) {
+-	// Set document vars if needed
+-	if ( ( elem.ownerDocument || elem ) !== document ) {
+-		setDocument( elem );
+-	}
+-
+-	// Make sure that attribute selectors are quoted
+-	expr = expr.replace( rattributeQuotes, "='$1']" );
+-
+-	// rbuggyQSA always contains :focus, so no need for an existence check
+-	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+-		try {
+-			var ret = matches.call( elem, expr );
+-
+-			// IE 9's matchesSelector returns false on disconnected nodes
+-			if ( ret || support.disconnectedMatch ||
+-					// As well, disconnected nodes are said to be in a document
+-					// fragment in IE 9
+-					elem.document && elem.document.nodeType !== 11 ) {
+-				return ret;
+-			}
+-		} catch(e) {}
+-	}
+-
+-	return Sizzle( expr, document, null, [elem] ).length > 0;
+-};
+-
+-Sizzle.contains = function( context, elem ) {
+-	// Set document vars if needed
+-	if ( ( context.ownerDocument || context ) !== document ) {
+-		setDocument( context );
+-	}
+-	return contains( context, elem );
+-};
+-
+-Sizzle.attr = function( elem, name ) {
+-	var val;
+-
+-	// Set document vars if needed
+-	if ( ( elem.ownerDocument || elem ) !== document ) {
+-		setDocument( elem );
+-	}
+-
+-	if ( !documentIsXML ) {
+-		name = name.toLowerCase();
+-	}
+-	if ( (val = Expr.attrHandle[ name ]) ) {
+-		return val( elem );
+-	}
+-	if ( documentIsXML || support.attributes ) {
+-		return elem.getAttribute( name );
+-	}
+-	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+-		name :
+-		val && val.specified ? val.value : null;
+-};
+-
+-Sizzle.error = function( msg ) {
+-	throw new Error( "Syntax error, unrecognized expression: " + msg );
+-};
+-
+-// Document sorting and removing duplicates
+-Sizzle.uniqueSort = function( results ) {
+-	var elem,
+-		duplicates = [],
+-		i = 1,
+-		j = 0;
+-
+-	// Unless we *know* we can detect duplicates, assume their presence
+-	hasDuplicate = !support.detectDuplicates;
+-	results.sort( sortOrder );
+-
+-	if ( hasDuplicate ) {
+-		for ( ; (elem = results[i]); i++ ) {
+-			if ( elem === results[ i - 1 ] ) {
+-				j = duplicates.push( i );
+-			}
+-		}
+-		while ( j-- ) {
+-			results.splice( duplicates[ j ], 1 );
+-		}
+-	}
+-
+-	return results;
+-};
+-
+-function siblingCheck( a, b ) {
+-	var cur = b && a,
+-		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
+-
+-	// Use IE sourceIndex if available on both nodes
+-	if ( diff ) {
+-		return diff;
+-	}
+-
+-	// Check if b follows a
+-	if ( cur ) {
+-		while ( (cur = cur.nextSibling) ) {
+-			if ( cur === b ) {
+-				return -1;
+-			}
+-		}
+-	}
+-
+-	return a ? 1 : -1;
+-}
+-
+-// Returns a function to use in pseudos for input types
+-function createInputPseudo( type ) {
+-	return function( elem ) {
+-		var name = elem.nodeName.toLowerCase();
+-		return name === "input" && elem.type === type;
+-	};
+-}
+-
+-// Returns a function to use in pseudos for buttons
+-function createButtonPseudo( type ) {
+-	return function( elem ) {
+-		var name = elem.nodeName.toLowerCase();
+-		return (name === "input" || name === "button") && elem.type === type;
+-	};
+-}
+-
+-// Returns a function to use in pseudos for positionals
+-function createPositionalPseudo( fn ) {
+-	return markFunction(function( argument ) {
+-		argument = +argument;
+-		return markFunction(function( seed, matches ) {
+-			var j,
+-				matchIndexes = fn( [], seed.length, argument ),
+-				i = matchIndexes.length;
+-
+-			// Match elements found at the specified indexes
+-			while ( i-- ) {
+-				if ( seed[ (j = matchIndexes[i]) ] ) {
+-					seed[j] = !(matches[j] = seed[j]);
+-				}
+-			}
+-		});
+-	});
+-}
+-
+-/**
+- * Utility function for retrieving the text value of an array of DOM nodes
+- * @param {Array|Element} elem
+- */
+-getText = Sizzle.getText = function( elem ) {
+-	var node,
+-		ret = "",
+-		i = 0,
+-		nodeType = elem.nodeType;
+-
+-	if ( !nodeType ) {
+-		// If no nodeType, this is expected to be an array
+-		for ( ; (node = elem[i]); i++ ) {
+-			// Do not traverse comment nodes
+-			ret += getText( node );
+-		}
+-	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+-		// Use textContent for elements
+-		// innerText usage removed for consistency of new lines (see #11153)
+-		if ( typeof elem.textContent === "string" ) {
+-			return elem.textContent;
+-		} else {
+-			// Traverse its children
+-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+-				ret += getText( elem );
+-			}
+-		}
+-	} else if ( nodeType === 3 || nodeType === 4 ) {
+-		return elem.nodeValue;
+-	}
+-	// Do not include comment or processing instruction nodes
+-
+-	return ret;
+-};
+-
+-Expr = Sizzle.selectors = {
+-
+-	// Can be adjusted by the user
+-	cacheLength: 50,
+-
+-	createPseudo: markFunction,
+-
+-	match: matchExpr,
+-
+-	find: {},
+-
+-	relative: {
+-		">": { dir: "parentNode", first: true },
+-		" ": { dir: "parentNode" },
+-		"+": { dir: "previousSibling", first: true },
+-		"~": { dir: "previousSibling" }
+-	},
+-
+-	preFilter: {
+-		"ATTR": function( match ) {
+-			match[1] = match[1].replace( runescape, funescape );
+-
+-			// Move the given value to match[3] whether quoted or unquoted
+-			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+-
+-			if ( match[2] === "~=" ) {
+-				match[3] = " " + match[3] + " ";
+-			}
+-
+-			return match.slice( 0, 4 );
+-		},
+-
+-		"CHILD": function( match ) {
+-			/* matches from matchExpr["CHILD"]
+-				1 type (only|nth|...)
+-				2 what (child|of-type)
+-				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+-				4 xn-component of xn+y argument ([+-]?\d*n|)
+-				5 sign of xn-component
+-				6 x of xn-component
+-				7 sign of y-component
+-				8 y of y-component
+-			*/
+-			match[1] = match[1].toLowerCase();
+-
+-			if ( match[1].slice( 0, 3 ) === "nth" ) {
+-				// nth-* requires argument
+-				if ( !match[3] ) {
+-					Sizzle.error( match[0] );
+-				}
+-
+-				// numeric x and y parameters for Expr.filter.CHILD
+-				// remember that false/true cast respectively to 0/1
+-				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+-				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+-
+-			// other types prohibit arguments
+-			} else if ( match[3] ) {
+-				Sizzle.error( match[0] );
+-			}
+-
+-			return match;
+-		},
+-
+-		"PSEUDO": function( match ) {
+-			var excess,
+-				unquoted = !match[5] && match[2];
+-
+-			if ( matchExpr["CHILD"].test( match[0] ) ) {
+-				return null;
+-			}
+-
+-			// Accept quoted arguments as-is
+-			if ( match[4] ) {
+-				match[2] = match[4];
+-
+-			// Strip excess characters from unquoted arguments
+-			} else if ( unquoted && rpseudo.test( unquoted ) &&
+-				// Get excess from tokenize (recursively)
+-				(excess = tokenize( unquoted, true )) &&
+-				// advance to the next closing parenthesis
+-				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+-
+-				// excess is a negative index
+-				match[0] = match[0].slice( 0, excess );
+-				match[2] = unquoted.slice( 0, excess );
+-			}
+-
+-			// Return only captures needed by the pseudo filter method (type and argument)
+-			return match.slice( 0, 3 );
+-		}
+-	},
+-
+-	filter: {
+-
+-		"TAG": function( nodeName ) {
+-			if ( nodeName === "*" ) {
+-				return function() { return true; };
+-			}
+-
+-			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+-			return function( elem ) {
+-				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+-			};
+-		},
+-
+-		"CLASS": function( className ) {
+-			var pattern = classCache[ className + " " ];
+-
+-			return pattern ||
+-				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+-				classCache( className, function( elem ) {
+-					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+-				});
+-		},
+-
+-		"ATTR": function( name, operator, check ) {
+-			return function( elem ) {
+-				var result = Sizzle.attr( elem, name );
+-
+-				if ( result == null ) {
+-					return operator === "!=";
+-				}
+-				if ( !operator ) {
+-					return true;
+-				}
+-
+-				result += "";
+-
+-				return operator === "=" ? result === check :
+-					operator === "!=" ? result !== check :
+-					operator === "^=" ? check && result.indexOf( check ) === 0 :
+-					operator === "*=" ? check && result.indexOf( check ) > -1 :
+-					operator === "$=" ? check && result.slice( -check.length ) === check :
+-					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+-					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+-					false;
+-			};
+-		},
+-
+-		"CHILD": function( type, what, argument, first, last ) {
+-			var simple = type.slice( 0, 3 ) !== "nth",
+-				forward = type.slice( -4 ) !== "last",
+-				ofType = what === "of-type";
+-
+-			return first === 1 && last === 0 ?
+-
+-				// Shortcut for :nth-*(n)
+-				function( elem ) {
+-					return !!elem.parentNode;
+-				} :
+-
+-				function( elem, context, xml ) {
+-					var cache, outerCache, node, diff, nodeIndex, start,
+-						dir = simple !== forward ? "nextSibling" : "previousSibling",
+-						parent = elem.parentNode,
+-						name = ofType && elem.nodeName.toLowerCase(),
+-						useCache = !xml && !ofType;
+-
+-					if ( parent ) {
+-
+-						// :(first|last|only)-(child|of-type)
+-						if ( simple ) {
+-							while ( dir ) {
+-								node = elem;
+-								while ( (node = node[ dir ]) ) {
+-									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+-										return false;
+-									}
+-								}
+-								// Reverse direction for :only-* (if we haven't yet done so)
+-								start = dir = type === "only" && !start && "nextSibling";
+-							}
+-							return true;
+-						}
+-
+-						start = [ forward ? parent.firstChild : parent.lastChild ];
+-
+-						// non-xml :nth-child(...) stores cache data on `parent`
+-						if ( forward && useCache ) {
+-							// Seek `elem` from a previously-cached index
+-							outerCache = parent[ expando ] || (parent[ expando ] = {});
+-							cache = outerCache[ type ] || [];
+-							nodeIndex = cache[0] === dirruns && cache[1];
+-							diff = cache[0] === dirruns && cache[2];
+-							node = nodeIndex && parent.childNodes[ nodeIndex ];
+-
+-							while ( (node = ++nodeIndex && node && node[ dir ] ||
+-
+-								// Fallback to seeking `elem` from the start
+-								(diff = nodeIndex = 0) || start.pop()) ) {
+-
+-								// When found, cache indexes on `parent` and break
+-								if ( node.nodeType === 1 && ++diff && node === elem ) {
+-									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+-									break;
+-								}
+-							}
+-
+-						// Use previously-cached element index if available
+-						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+-							diff = cache[1];
+-
+-						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+-						} else {
+-							// Use the same loop as above to seek `elem` from the start
+-							while ( (node = ++nodeIndex && node && node[ dir ] ||
+-								(diff = nodeIndex = 0) || start.pop()) ) {
+-
+-								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+-									// Cache the index of each encountered element
+-									if ( useCache ) {
+-										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+-									}
+-
+-									if ( node === elem ) {
+-										break;
+-									}
+-								}
+-							}
+-						}
+-
+-						// Incorporate the offset, then check against cycle size
+-						diff -= last;
+-						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+-					}
+-				};
+-		},
+-
+-		"PSEUDO": function( pseudo, argument ) {
+-			// pseudo-class names are case-insensitive
+-			// http://www.w3.org/TR/selectors/#pseudo-classes
+-			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+-			// Remember that setFilters inherits from pseudos
+-			var args,
+-				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+-					Sizzle.error( "unsupported pseudo: " + pseudo );
+-
+-			// The user may use createPseudo to indicate that
+-			// arguments are needed to create the filter function
+-			// just as Sizzle does
+-			if ( fn[ expando ] ) {
+-				return fn( argument );
+-			}
+-
+-			// But maintain support for old signatures
+-			if ( fn.length > 1 ) {
+-				args = [ pseudo, pseudo, "", argument ];
+-				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+-					markFunction(function( seed, matches ) {
+-						var idx,
+-							matched = fn( seed, argument ),
+-							i = matched.length;
+-						while ( i-- ) {
+-							idx = indexOf.call( seed, matched[i] );
+-							seed[ idx ] = !( matches[ idx ] = matched[i] );
+-						}
+-					}) :
+-					function( elem ) {
+-						return fn( elem, 0, args );
+-					};
+-			}
+-
+-			return fn;
+-		}
+-	},
+-
+-	pseudos: {
+-		// Potentially complex pseudos
+-		"not": markFunction(function( selector ) {
+-			// Trim the selector passed to compile
+-			// to avoid treating leading and trailing
+-			// spaces as combinators
+-			var input = [],
+-				results = [],
+-				matcher = compile( selector.replace( rtrim, "$1" ) );
+-
+-			return matcher[ expando ] ?
+-				markFunction(function( seed, matches, context, xml ) {
+-					var elem,
+-						unmatched = matcher( seed, null, xml, [] ),
+-						i = seed.length;
+-
+-					// Match elements unmatched by `matcher`
+-					while ( i-- ) {
+-						if ( (elem = unmatched[i]) ) {
+-							seed[i] = !(matches[i] = elem);
+-						}
+-					}
+-				}) :
+-				function( elem, context, xml ) {
+-					input[0] = elem;
+-					matcher( input, null, xml, results );
+-					return !results.pop();
+-				};
+-		}),
+-
+-		"has": markFunction(function( selector ) {
+-			return function( elem ) {
+-				return Sizzle( selector, elem ).length > 0;
+-			};
+-		}),
+-
+-		"contains": markFunction(function( text ) {
+-			return function( elem ) {
+-				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+-			};
+-		}),
+-
+-		// "Whether an element is represented by a :lang() selector
+-		// is based solely on the element's language value
+-		// being equal to the identifier C,
+-		// or beginning with the identifier C immediately followed by "-".
+-		// The matching of C against the element's language value is performed case-insensitively.
+-		// The identifier C does not have to be a valid language name."
+-		// http://www.w3.org/TR/selectors/#lang-pseudo
+-		"lang": markFunction( function( lang ) {
+-			// lang value must be a valid identifider
+-			if ( !ridentifier.test(lang || "") ) {
+-				Sizzle.error( "unsupported lang: " + lang );
+-			}
+-			lang = lang.replace( runescape, funescape ).toLowerCase();
+-			return function( elem ) {
+-				var elemLang;
+-				do {
+-					if ( (elemLang = documentIsXML ?
+-						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+-						elem.lang) ) {
+-
+-						elemLang = elemLang.toLowerCase();
+-						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+-					}
+-				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+-				return false;
+-			};
+-		}),
+-
+-		// Miscellaneous
+-		"target": function( elem ) {
+-			var hash = window.location && window.location.hash;
+-			return hash && hash.slice( 1 ) === elem.id;
+-		},
+-
+-		"root": function( elem ) {
+-			return elem === docElem;
+-		},
+-
+-		"focus": function( elem ) {
+-			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+-		},
+-
+-		// Boolean properties
+-		"enabled": function( elem ) {
+-			return elem.disabled === false;
+-		},
+-
+-		"disabled": function( elem ) {
+-			return elem.disabled === true;
+-		},
+-
+-		"checked": function( elem ) {
+-			// In CSS3, :checked should return both checked and selected elements
+-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+-			var nodeName = elem.nodeName.toLowerCase();
+-			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+-		},
+-
+-		"selected": function( elem ) {
+-			// Accessing this property makes selected-by-default
+-			// options in Safari work properly
+-			if ( elem.parentNode ) {
+-				elem.parentNode.selectedIndex;
+-			}
+-
+-			return elem.selected === true;
+-		},
+-
+-		// Contents
+-		"empty": function( elem ) {
+-			// http://www.w3.org/TR/selectors/#empty-pseudo
+-			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+-			//   not comment, processing instructions, or others
+-			// Thanks to Diego Perini for the nodeName shortcut
+-			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+-				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		},
+-
+-		"parent": function( elem ) {
+-			return !Expr.pseudos["empty"]( elem );
+-		},
+-
+-		// Element/input types
+-		"header": function( elem ) {
+-			return rheader.test( elem.nodeName );
+-		},
+-
+-		"input": function( elem ) {
+-			return rinputs.test( elem.nodeName );
+-		},
+-
+-		"button": function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return name === "input" && elem.type === "button" || name === "button";
+-		},
+-
+-		"text": function( elem ) {
+-			var attr;
+-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+-			// use getAttribute instead to test this case
+-			return elem.nodeName.toLowerCase() === "input" &&
+-				elem.type === "text" &&
+-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+-		},
+-
+-		// Position-in-collection
+-		"first": createPositionalPseudo(function() {
+-			return [ 0 ];
+-		}),
+-
+-		"last": createPositionalPseudo(function( matchIndexes, length ) {
+-			return [ length - 1 ];
+-		}),
+-
+-		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			return [ argument < 0 ? argument + length : argument ];
+-		}),
+-
+-		"even": createPositionalPseudo(function( matchIndexes, length ) {
+-			var i = 0;
+-			for ( ; i < length; i += 2 ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+-			var i = 1;
+-			for ( ; i < length; i += 2 ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			var i = argument < 0 ? argument + length : argument;
+-			for ( ; --i >= 0; ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			var i = argument < 0 ? argument + length : argument;
+-			for ( ; ++i < length; ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		})
+-	}
+-};
+-
+-// Add button/input type pseudos
+-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+-	Expr.pseudos[ i ] = createInputPseudo( i );
+-}
+-for ( i in { submit: true, reset: true } ) {
+-	Expr.pseudos[ i ] = createButtonPseudo( i );
+-}
+-
+-function tokenize( selector, parseOnly ) {
+-	var matched, match, tokens, type,
+-		soFar, groups, preFilters,
+-		cached = tokenCache[ selector + " " ];
+-
+-	if ( cached ) {
+-		return parseOnly ? 0 : cached.slice( 0 );
+-	}
+-
+-	soFar = selector;
+-	groups = [];
+-	preFilters = Expr.preFilter;
+-
+-	while ( soFar ) {
+-
+-		// Comma and first run
+-		if ( !matched || (match = rcomma.exec( soFar )) ) {
+-			if ( match ) {
+-				// Don't consume trailing commas as valid
+-				soFar = soFar.slice( match[0].length ) || soFar;
+-			}
+-			groups.push( tokens = [] );
+-		}
+-
+-		matched = false;
+-
+-		// Combinators
+-		if ( (match = rcombinators.exec( soFar )) ) {
+-			matched = match.shift();
+-			tokens.push( {
+-				value: matched,
+-				// Cast descendant combinators to space
+-				type: match[0].replace( rtrim, " " )
+-			} );
+-			soFar = soFar.slice( matched.length );
+-		}
+-
+-		// Filters
+-		for ( type in Expr.filter ) {
+-			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+-				(match = preFilters[ type ]( match ))) ) {
+-				matched = match.shift();
+-				tokens.push( {
+-					value: matched,
+-					type: type,
+-					matches: match
+-				} );
+-				soFar = soFar.slice( matched.length );
+-			}
+-		}
+-
+-		if ( !matched ) {
+-			break;
+-		}
+-	}
+-
+-	// Return the length of the invalid excess
+-	// if we're just parsing
+-	// Otherwise, throw an error or return tokens
+-	return parseOnly ?
+-		soFar.length :
+-		soFar ?
+-			Sizzle.error( selector ) :
+-			// Cache the tokens
+-			tokenCache( selector, groups ).slice( 0 );
+-}
+-
+-function toSelector( tokens ) {
+-	var i = 0,
+-		len = tokens.length,
+-		selector = "";
+-	for ( ; i < len; i++ ) {
+-		selector += tokens[i].value;
+-	}
+-	return selector;
+-}
+-
+-function addCombinator( matcher, combinator, base ) {
+-	var dir = combinator.dir,
+-		checkNonElements = base && dir === "parentNode",
+-		doneName = done++;
+-
+-	return combinator.first ?
+-		// Check against closest ancestor/preceding element
+-		function( elem, context, xml ) {
+-			while ( (elem = elem[ dir ]) ) {
+-				if ( elem.nodeType === 1 || checkNonElements ) {
+-					return matcher( elem, context, xml );
+-				}
+-			}
+-		} :
+-
+-		// Check against all ancestor/preceding elements
+-		function( elem, context, xml ) {
+-			var data, cache, outerCache,
+-				dirkey = dirruns + " " + doneName;
+-
+-			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+-			if ( xml ) {
+-				while ( (elem = elem[ dir ]) ) {
+-					if ( elem.nodeType === 1 || checkNonElements ) {
+-						if ( matcher( elem, context, xml ) ) {
+-							return true;
+-						}
+-					}
+-				}
+-			} else {
+-				while ( (elem = elem[ dir ]) ) {
+-					if ( elem.nodeType === 1 || checkNonElements ) {
+-						outerCache = elem[ expando ] || (elem[ expando ] = {});
+-						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+-							if ( (data = cache[1]) === true || data === cachedruns ) {
+-								return data === true;
+-							}
+-						} else {
+-							cache = outerCache[ dir ] = [ dirkey ];
+-							cache[1] = matcher( elem, context, xml ) || cachedruns;
+-							if ( cache[1] === true ) {
+-								return true;
+-							}
+-						}
+-					}
+-				}
+-			}
+-		};
+-}
+-
+-function elementMatcher( matchers ) {
+-	return matchers.length > 1 ?
+-		function( elem, context, xml ) {
+-			var i = matchers.length;
+-			while ( i-- ) {
+-				if ( !matchers[i]( elem, context, xml ) ) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		} :
+-		matchers[0];
+-}
+-
+-function condense( unmatched, map, filter, context, xml ) {
+-	var elem,
+-		newUnmatched = [],
+-		i = 0,
+-		len = unmatched.length,
+-		mapped = map != null;
+-
+-	for ( ; i < len; i++ ) {
+-		if ( (elem = unmatched[i]) ) {
+-			if ( !filter || filter( elem, context, xml ) ) {
+-				newUnmatched.push( elem );
+-				if ( mapped ) {
+-					map.push( i );
+-				}
+-			}
+-		}
+-	}
+-
+-	return newUnmatched;
+-}
+-
+-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+-	if ( postFilter && !postFilter[ expando ] ) {
+-		postFilter = setMatcher( postFilter );
+-	}
+-	if ( postFinder && !postFinder[ expando ] ) {
+-		postFinder = setMatcher( postFinder, postSelector );
+-	}
+-	return markFunction(function( seed, results, context, xml ) {
+-		var temp, i, elem,
+-			preMap = [],
+-			postMap = [],
+-			preexisting = results.length,
+-
+-			// Get initial elements from seed or context
+-			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+-
+-			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+-			matcherIn = preFilter && ( seed || !selector ) ?
+-				condense( elems, preMap, preFilter, context, xml ) :
+-				elems,
+-
+-			matcherOut = matcher ?
+-				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+-				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+-
+-					// ...intermediate processing is necessary
+-					[] :
+-
+-					// ...otherwise use results directly
+-					results :
+-				matcherIn;
+-
+-		// Find primary matches
+-		if ( matcher ) {
+-			matcher( matcherIn, matcherOut, context, xml );
+-		}
+-
+-		// Apply postFilter
+-		if ( postFilter ) {
+-			temp = condense( matcherOut, postMap );
+-			postFilter( temp, [], context, xml );
+-
+-			// Un-match failing elements by moving them back to matcherIn
+-			i = temp.length;
+-			while ( i-- ) {
+-				if ( (elem = temp[i]) ) {
+-					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+-				}
+-			}
+-		}
+-
+-		if ( seed ) {
+-			if ( postFinder || preFilter ) {
+-				if ( postFinder ) {
+-					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+-					temp = [];
+-					i = matcherOut.length;
+-					while ( i-- ) {
+-						if ( (elem = matcherOut[i]) ) {
+-							// Restore matcherIn since elem is not yet a final match
+-							temp.push( (matcherIn[i] = elem) );
+-						}
+-					}
+-					postFinder( null, (matcherOut = []), temp, xml );
+-				}
+-
+-				// Move matched elements from seed to results to keep them synchronized
+-				i = matcherOut.length;
+-				while ( i-- ) {
+-					if ( (elem = matcherOut[i]) &&
+-						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+-
+-						seed[temp] = !(results[temp] = elem);
+-					}
+-				}
+-			}
+-
+-		// Add elements to results, through postFinder if defined
+-		} else {
+-			matcherOut = condense(
+-				matcherOut === results ?
+-					matcherOut.splice( preexisting, matcherOut.length ) :
+-					matcherOut
+-			);
+-			if ( postFinder ) {
+-				postFinder( null, results, matcherOut, xml );
+-			} else {
+-				push.apply( results, matcherOut );
+-			}
+-		}
+-	});
+-}
+-
+-function matcherFromTokens( tokens ) {
+-	var checkContext, matcher, j,
+-		len = tokens.length,
+-		leadingRelative = Expr.relative[ tokens[0].type ],
+-		implicitRelative = leadingRelative || Expr.relative[" "],
+-		i = leadingRelative ? 1 : 0,
+-
+-		// The foundational matcher ensures that elements are reachable from top-level context(s)
+-		matchContext = addCombinator( function( elem ) {
+-			return elem === checkContext;
+-		}, implicitRelative, true ),
+-		matchAnyContext = addCombinator( function( elem ) {
+-			return indexOf.call( checkContext, elem ) > -1;
+-		}, implicitRelative, true ),
+-		matchers = [ function( elem, context, xml ) {
+-			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+-				(checkContext = context).nodeType ?
+-					matchContext( elem, context, xml ) :
+-					matchAnyContext( elem, context, xml ) );
+-		} ];
+-
+-	for ( ; i < len; i++ ) {
+-		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+-			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+-		} else {
+-			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+-
+-			// Return special upon seeing a positional matcher
+-			if ( matcher[ expando ] ) {
+-				// Find the next relative operator (if any) for proper handling
+-				j = ++i;
+-				for ( ; j < len; j++ ) {
+-					if ( Expr.relative[ tokens[j].type ] ) {
+-						break;
+-					}
+-				}
+-				return setMatcher(
+-					i > 1 && elementMatcher( matchers ),
+-					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+-					matcher,
+-					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+-					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+-					j < len && toSelector( tokens )
+-				);
+-			}
+-			matchers.push( matcher );
+-		}
+-	}
+-
+-	return elementMatcher( matchers );
+-}
+-
+-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+-	// A counter to specify which element is currently being matched
+-	var matcherCachedRuns = 0,
+-		bySet = setMatchers.length > 0,
+-		byElement = elementMatchers.length > 0,
+-		superMatcher = function( seed, context, xml, results, expandContext ) {
+-			var elem, j, matcher,
+-				setMatched = [],
+-				matchedCount = 0,
+-				i = "0",
+-				unmatched = seed && [],
+-				outermost = expandContext != null,
+-				contextBackup = outermostContext,
+-				// We must always have either seed elements or context
+-				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+-				// Use integer dirruns iff this is the outermost matcher
+-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+-
+-			if ( outermost ) {
+-				outermostContext = context !== document && context;
+-				cachedruns = matcherCachedRuns;
+-			}
+-
+-			// Add elements passing elementMatchers directly to results
+-			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+-			for ( ; (elem = elems[i]) != null; i++ ) {
+-				if ( byElement && elem ) {
+-					j = 0;
+-					while ( (matcher = elementMatchers[j++]) ) {
+-						if ( matcher( elem, context, xml ) ) {
+-							results.push( elem );
+-							break;
+-						}
+-					}
+-					if ( outermost ) {
+-						dirruns = dirrunsUnique;
+-						cachedruns = ++matcherCachedRuns;
+-					}
+-				}
+-
+-				// Track unmatched elements for set filters
+-				if ( bySet ) {
+-					// They will have gone through all possible matchers
+-					if ( (elem = !matcher && elem) ) {
+-						matchedCount--;
+-					}
+-
+-					// Lengthen the array for every element, matched or not
+-					if ( seed ) {
+-						unmatched.push( elem );
+-					}
+-				}
+-			}
+-
+-			// Apply set filters to unmatched elements
+-			matchedCount += i;
+-			if ( bySet && i !== matchedCount ) {
+-				j = 0;
+-				while ( (matcher = setMatchers[j++]) ) {
+-					matcher( unmatched, setMatched, context, xml );
+-				}
+-
+-				if ( seed ) {
+-					// Reintegrate element matches to eliminate the need for sorting
+-					if ( matchedCount > 0 ) {
+-						while ( i-- ) {
+-							if ( !(unmatched[i] || setMatched[i]) ) {
+-								setMatched[i] = pop.call( results );
+-							}
+-						}
+-					}
+-
+-					// Discard index placeholder values to get only actual matches
+-					setMatched = condense( setMatched );
+-				}
+-
+-				// Add matches to results
+-				push.apply( results, setMatched );
+-
+-				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+-				if ( outermost && !seed && setMatched.length > 0 &&
+-					( matchedCount + setMatchers.length ) > 1 ) {
+-
+-					Sizzle.uniqueSort( results );
+-				}
+-			}
+-
+-			// Override manipulation of globals by nested matchers
+-			if ( outermost ) {
+-				dirruns = dirrunsUnique;
+-				outermostContext = contextBackup;
+-			}
+-
+-			return unmatched;
+-		};
+-
+-	return bySet ?
+-		markFunction( superMatcher ) :
+-		superMatcher;
+-}
+-
+-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+-	var i,
+-		setMatchers = [],
+-		elementMatchers = [],
+-		cached = compilerCache[ selector + " " ];
+-
+-	if ( !cached ) {
+-		// Generate a function of recursive functions that can be used to check each element
+-		if ( !group ) {
+-			group = tokenize( selector );
+-		}
+-		i = group.length;
+-		while ( i-- ) {
+-			cached = matcherFromTokens( group[i] );
+-			if ( cached[ expando ] ) {
+-				setMatchers.push( cached );
+-			} else {
+-				elementMatchers.push( cached );
+-			}
+-		}
+-
+-		// Cache the compiled function
+-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+-	}
+-	return cached;
+-};
+-
+-function multipleContexts( selector, contexts, results ) {
+-	var i = 0,
+-		len = contexts.length;
+-	for ( ; i < len; i++ ) {
+-		Sizzle( selector, contexts[i], results );
+-	}
+-	return results;
+-}
+-
+-function select( selector, context, results, seed ) {
+-	var i, tokens, token, type, find,
+-		match = tokenize( selector );
+-
+-	if ( !seed ) {
+-		// Try to minimize operations if there is only one group
+-		if ( match.length === 1 ) {
+-
+-			// Take a shortcut and set the context if the root selector is an ID
+-			tokens = match[0] = match[0].slice( 0 );
+-			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+-					context.nodeType === 9 && !documentIsXML &&
+-					Expr.relative[ tokens[1].type ] ) {
+-
+-				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+-				if ( !context ) {
+-					return results;
+-				}
+-
+-				selector = selector.slice( tokens.shift().value.length );
+-			}
+-
+-			// Fetch a seed set for right-to-left matching
+-			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+-			while ( i-- ) {
+-				token = tokens[i];
+-
+-				// Abort if we hit a combinator
+-				if ( Expr.relative[ (type = token.type) ] ) {
+-					break;
+-				}
+-				if ( (find = Expr.find[ type ]) ) {
+-					// Search, expanding context for leading sibling combinators
+-					if ( (seed = find(
+-						token.matches[0].replace( runescape, funescape ),
+-						rsibling.test( tokens[0].type ) && context.parentNode || context
+-					)) ) {
+-
+-						// If seed is empty or no tokens remain, we can return early
+-						tokens.splice( i, 1 );
+-						selector = seed.length && toSelector( tokens );
+-						if ( !selector ) {
+-							push.apply( results, slice.call( seed, 0 ) );
+-							return results;
+-						}
+-
+-						break;
+-					}
+-				}
+-			}
+-		}
+-	}
+-
+-	// Compile and execute a filtering function
+-	// Provide `match` to avoid retokenization if we modified the selector above
+-	compile( selector, match )(
+-		seed,
+-		context,
+-		documentIsXML,
+-		results,
+-		rsibling.test( selector )
+-	);
+-	return results;
+-}
+-
+-// Deprecated
+-Expr.pseudos["nth"] = Expr.pseudos["eq"];
+-
+-// Easy API for creating new setFilters
+-function setFilters() {}
+-Expr.filters = setFilters.prototype = Expr.pseudos;
+-Expr.setFilters = new setFilters();
+-
+-// Initialize with the default document
+-setDocument();
+-
+-// Override sizzle attribute retrieval
+-Sizzle.attr = jQuery.attr;
+-jQuery.find = Sizzle;
+-jQuery.expr = Sizzle.selectors;
+-jQuery.expr[":"] = jQuery.expr.pseudos;
+-jQuery.unique = Sizzle.uniqueSort;
+-jQuery.text = Sizzle.getText;
+-jQuery.isXMLDoc = Sizzle.isXML;
+-jQuery.contains = Sizzle.contains;
+-
+-
+-})( window );
+-var runtil = /Until$/,
+-	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+-	isSimple = /^.[^:#\[\.,]*$/,
+-	rneedsContext = jQuery.expr.match.needsContext,
+-	// methods guaranteed to produce a unique set when starting from a unique set
+-	guaranteedUnique = {
+-		children: true,
+-		contents: true,
+-		next: true,
+-		prev: true
+-	};
+-
+-jQuery.fn.extend({
+-	find: function( selector ) {
+-		var i, ret, self,
+-			len = this.length;
+-
+-		if ( typeof selector !== "string" ) {
+-			self = this;
+-			return this.pushStack( jQuery( selector ).filter(function() {
+-				for ( i = 0; i < len; i++ ) {
+-					if ( jQuery.contains( self[ i ], this ) ) {
+-						return true;
+-					}
+-				}
+-			}) );
+-		}
+-
+-		ret = [];
+-		for ( i = 0; i < len; i++ ) {
+-			jQuery.find( selector, this[ i ], ret );
+-		}
+-
+-		// Needed because $( selector, context ) becomes $( context ).find( selector )
+-		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+-		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+-		return ret;
+-	},
+-
+-	has: function( target ) {
+-		var i,
+-			targets = jQuery( target, this ),
+-			len = targets.length;
+-
+-		return this.filter(function() {
+-			for ( i = 0; i < len; i++ ) {
+-				if ( jQuery.contains( this, targets[i] ) ) {
+-					return true;
+-				}
+-			}
+-		});
+-	},
+-
+-	not: function( selector ) {
+-		return this.pushStack( winnow(this, selector, false) );
+-	},
+-
+-	filter: function( selector ) {
+-		return this.pushStack( winnow(this, selector, true) );
+-	},
+-
+-	is: function( selector ) {
+-		return !!selector && (
+-			typeof selector === "string" ?
+-				// If this is a positional/relative selector, check membership in the returned set
+-				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+-				rneedsContext.test( selector ) ?
+-					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+-					jQuery.filter( selector, this ).length > 0 :
+-				this.filter( selector ).length > 0 );
+-	},
+-
+-	closest: function( selectors, context ) {
+-		var cur,
+-			i = 0,
+-			l = this.length,
+-			ret = [],
+-			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+-				jQuery( selectors, context || this.context ) :
+-				0;
+-
+-		for ( ; i < l; i++ ) {
+-			cur = this[i];
+-
+-			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+-					ret.push( cur );
+-					break;
+-				}
+-				cur = cur.parentNode;
+-			}
+-		}
+-
+-		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+-	},
+-
+-	// Determine the position of an element within
+-	// the matched set of elements
+-	index: function( elem ) {
+-
+-		// No argument, return index in parent
+-		if ( !elem ) {
+-			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+-		}
+-
+-		// index in selector
+-		if ( typeof elem === "string" ) {
+-			return jQuery.inArray( this[0], jQuery( elem ) );
+-		}
+-
+-		// Locate the position of the desired element
+-		return jQuery.inArray(
+-			// If it receives a jQuery object, the first element is used
+-			elem.jquery ? elem[0] : elem, this );
+-	},
+-
+-	add: function( selector, context ) {
+-		var set = typeof selector === "string" ?
+-				jQuery( selector, context ) :
+-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+-			all = jQuery.merge( this.get(), set );
+-
+-		return this.pushStack( jQuery.unique(all) );
+-	},
+-
+-	addBack: function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter(selector)
+-		);
+-	}
+-});
+-
+-jQuery.fn.andSelf = jQuery.fn.addBack;
+-
+-function sibling( cur, dir ) {
+-	do {
+-		cur = cur[ dir ];
+-	} while ( cur && cur.nodeType !== 1 );
+-
+-	return cur;
+-}
+-
+-jQuery.each({
+-	parent: function( elem ) {
+-		var parent = elem.parentNode;
+-		return parent && parent.nodeType !== 11 ? parent : null;
+-	},
+-	parents: function( elem ) {
+-		return jQuery.dir( elem, "parentNode" );
+-	},
+-	parentsUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "parentNode", until );
+-	},
+-	next: function( elem ) {
+-		return sibling( elem, "nextSibling" );
+-	},
+-	prev: function( elem ) {
+-		return sibling( elem, "previousSibling" );
+-	},
+-	nextAll: function( elem ) {
+-		return jQuery.dir( elem, "nextSibling" );
+-	},
+-	prevAll: function( elem ) {
+-		return jQuery.dir( elem, "previousSibling" );
+-	},
+-	nextUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "nextSibling", until );
+-	},
+-	prevUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "previousSibling", until );
+-	},
+-	siblings: function( elem ) {
+-		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+-	},
+-	children: function( elem ) {
+-		return jQuery.sibling( elem.firstChild );
+-	},
+-	contents: function( elem ) {
+-		return jQuery.nodeName( elem, "iframe" ) ?
+-			elem.contentDocument || elem.contentWindow.document :
+-			jQuery.merge( [], elem.childNodes );
+-	}
+-}, function( name, fn ) {
+-	jQuery.fn[ name ] = function( until, selector ) {
+-		var ret = jQuery.map( this, fn, until );
+-
+-		if ( !runtil.test( name ) ) {
+-			selector = until;
+-		}
+-
+-		if ( selector && typeof selector === "string" ) {
+-			ret = jQuery.filter( selector, ret );
+-		}
+-
+-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+-
+-		if ( this.length > 1 && rparentsprev.test( name ) ) {
+-			ret = ret.reverse();
+-		}
+-
+-		return this.pushStack( ret );
+-	};
+-});
+-
+-jQuery.extend({
+-	filter: function( expr, elems, not ) {
+-		if ( not ) {
+-			expr = ":not(" + expr + ")";
+-		}
+-
+-		return elems.length === 1 ?
+-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+-			jQuery.find.matches(expr, elems);
+-	},
+-
+-	dir: function( elem, dir, until ) {
+-		var matched = [],
+-			cur = elem[ dir ];
+-
+-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+-			if ( cur.nodeType === 1 ) {
+-				matched.push( cur );
+-			}
+-			cur = cur[dir];
+-		}
+-		return matched;
+-	},
+-
+-	sibling: function( n, elem ) {
+-		var r = [];
+-
+-		for ( ; n; n = n.nextSibling ) {
+-			if ( n.nodeType === 1 && n !== elem ) {
+-				r.push( n );
+-			}
+-		}
+-
+-		return r;
+-	}
+-});
+-
+-// Implement the identical functionality for filter and not
+-function winnow( elements, qualifier, keep ) {
+-
+-	// Can't pass null or undefined to indexOf in Firefox 4
+-	// Set to 0 to skip string check
+-	qualifier = qualifier || 0;
+-
+-	if ( jQuery.isFunction( qualifier ) ) {
+-		return jQuery.grep(elements, function( elem, i ) {
+-			var retVal = !!qualifier.call( elem, i, elem );
+-			return retVal === keep;
+-		});
+-
+-	} else if ( qualifier.nodeType ) {
+-		return jQuery.grep(elements, function( elem ) {
+-			return ( elem === qualifier ) === keep;
+-		});
+-
+-	} else if ( typeof qualifier === "string" ) {
+-		var filtered = jQuery.grep(elements, function( elem ) {
+-			return elem.nodeType === 1;
+-		});
+-
+-		if ( isSimple.test( qualifier ) ) {
+-			return jQuery.filter(qualifier, filtered, !keep);
+-		} else {
+-			qualifier = jQuery.filter( qualifier, filtered );
+-		}
+-	}
+-
+-	return jQuery.grep(elements, function( elem ) {
+-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+-	});
+-}
+-function createSafeFragment( document ) {
+-	var list = nodeNames.split( "|" ),
+-		safeFrag = document.createDocumentFragment();
+-
+-	if ( safeFrag.createElement ) {
+-		while ( list.length ) {
+-			safeFrag.createElement(
+-				list.pop()
+-			);
+-		}
+-	}
+-	return safeFrag;
+-}
+-
+-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+-	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+-	rleadingWhitespace = /^\s+/,
+-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+-	rtagName = /<([\w:]+)/,
+-	rtbody = /<tbody/i,
+-	rhtml = /<|&#?\w+;/,
+-	rnoInnerhtml = /<(?:script|style|link)/i,
+-	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+-	// checked="checked" or checked
+-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+-	rscriptType = /^$|\/(?:java|ecma)script/i,
+-	rscriptTypeMasked = /^true\/(.*)/,
+-	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+-
+-	// We have to close these tags to support XHTML (#13200)
+-	wrapMap = {
+-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+-		legend: [ 1, "<fieldset>", "</fieldset>" ],
+-		area: [ 1, "<map>", "</map>" ],
+-		param: [ 1, "<object>", "</object>" ],
+-		thead: [ 1, "<table>", "</table>" ],
+-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+-
+-		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+-		// unless wrapped in a div with non-breaking characters in front of it.
+-		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+-	},
+-	safeFragment = createSafeFragment( document ),
+-	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+-
+-wrapMap.optgroup = wrapMap.option;
+-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+-wrapMap.th = wrapMap.td;
+-
+-jQuery.fn.extend({
+-	text: function( value ) {
+-		return jQuery.access( this, function( value ) {
+-			return value === undefined ?
+-				jQuery.text( this ) :
+-				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+-		}, null, value, arguments.length );
+-	},
+-
+-	wrapAll: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapAll( html.call(this, i) );
+-			});
+-		}
+-
+-		if ( this[0] ) {
+-			// The elements to wrap the target around
+-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+-
+-			if ( this[0].parentNode ) {
+-				wrap.insertBefore( this[0] );
+-			}
+-
+-			wrap.map(function() {
+-				var elem = this;
+-
+-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+-					elem = elem.firstChild;
+-				}
+-
+-				return elem;
+-			}).append( this );
+-		}
+-
+-		return this;
+-	},
+-
+-	wrapInner: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapInner( html.call(this, i) );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			var self = jQuery( this ),
+-				contents = self.contents();
+-
+-			if ( contents.length ) {
+-				contents.wrapAll( html );
+-
+-			} else {
+-				self.append( html );
+-			}
+-		});
+-	},
+-
+-	wrap: function( html ) {
+-		var isFunction = jQuery.isFunction( html );
+-
+-		return this.each(function(i) {
+-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+-		});
+-	},
+-
+-	unwrap: function() {
+-		return this.parent().each(function() {
+-			if ( !jQuery.nodeName( this, "body" ) ) {
+-				jQuery( this ).replaceWith( this.childNodes );
+-			}
+-		}).end();
+-	},
+-
+-	append: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+-				this.appendChild( elem );
+-			}
+-		});
+-	},
+-
+-	prepend: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+-				this.insertBefore( elem, this.firstChild );
+-			}
+-		});
+-	},
+-
+-	before: function() {
+-		return this.domManip( arguments, false, function( elem ) {
+-			if ( this.parentNode ) {
+-				this.parentNode.insertBefore( elem, this );
+-			}
+-		});
+-	},
+-
+-	after: function() {
+-		return this.domManip( arguments, false, function( elem ) {
+-			if ( this.parentNode ) {
+-				this.parentNode.insertBefore( elem, this.nextSibling );
+-			}
+-		});
+-	},
+-
+-	// keepData is for internal use only--do not document
+-	remove: function( selector, keepData ) {
+-		var elem,
+-			i = 0;
+-
+-		for ( ; (elem = this[i]) != null; i++ ) {
+-			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+-				if ( !keepData && elem.nodeType === 1 ) {
+-					jQuery.cleanData( getAll( elem ) );
+-				}
+-
+-				if ( elem.parentNode ) {
+-					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+-						setGlobalEval( getAll( elem, "script" ) );
+-					}
+-					elem.parentNode.removeChild( elem );
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	empty: function() {
+-		var elem,
+-			i = 0;
+-
+-		for ( ; (elem = this[i]) != null; i++ ) {
+-			// Remove element nodes and prevent memory leaks
+-			if ( elem.nodeType === 1 ) {
+-				jQuery.cleanData( getAll( elem, false ) );
+-			}
+-
+-			// Remove any remaining nodes
+-			while ( elem.firstChild ) {
+-				elem.removeChild( elem.firstChild );
+-			}
+-
+-			// If this is a select, ensure that it displays empty (#12336)
+-			// Support: IE<9
+-			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+-				elem.options.length = 0;
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	clone: function( dataAndEvents, deepDataAndEvents ) {
+-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+-
+-		return this.map( function () {
+-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+-		});
+-	},
+-
+-	html: function( value ) {
+-		return jQuery.access( this, function( value ) {
+-			var elem = this[0] || {},
+-				i = 0,
+-				l = this.length;
+-
+-			if ( value === undefined ) {
+-				return elem.nodeType === 1 ?
+-					elem.innerHTML.replace( rinlinejQuery, "" ) :
+-					undefined;
+-			}
+-
+-			// See if we can take a shortcut and just use innerHTML
+-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+-				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+-				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+-				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+-
+-				value = value.replace( rxhtmlTag, "<$1></$2>" );
+-
+-				try {
+-					for (; i < l; i++ ) {
+-						// Remove element nodes and prevent memory leaks
+-						elem = this[i] || {};
+-						if ( elem.nodeType === 1 ) {
+-							jQuery.cleanData( getAll( elem, false ) );
+-							elem.innerHTML = value;
+-						}
+-					}
+-
+-					elem = 0;
+-
+-				// If using innerHTML throws an exception, use the fallback method
+-				} catch(e) {}
+-			}
+-
+-			if ( elem ) {
+-				this.empty().append( value );
+-			}
+-		}, null, value, arguments.length );
+-	},
+-
+-	replaceWith: function( value ) {
+-		var isFunc = jQuery.isFunction( value );
+-
+-		// Make sure that the elements are removed from the DOM before they are inserted
+-		// this can help fix replacing a parent with child elements
+-		if ( !isFunc && typeof value !== "string" ) {
+-			value = jQuery( value ).not( this ).detach();
+-		}
+-
+-		return this.domManip( [ value ], true, function( elem ) {
+-			var next = this.nextSibling,
+-				parent = this.parentNode;
+-
+-			if ( parent ) {
+-				jQuery( this ).remove();
+-				parent.insertBefore( elem, next );
+-			}
+-		});
+-	},
+-
+-	detach: function( selector ) {
+-		return this.remove( selector, true );
+-	},
+-
+-	domManip: function( args, table, callback ) {
+-
+-		// Flatten any nested arrays
+-		args = core_concat.apply( [], args );
+-
+-		var first, node, hasScripts,
+-			scripts, doc, fragment,
+-			i = 0,
+-			l = this.length,
+-			set = this,
+-			iNoClone = l - 1,
+-			value = args[0],
+-			isFunction = jQuery.isFunction( value );
+-
+-		// We can't cloneNode fragments that contain checked, in WebKit
+-		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+-			return this.each(function( index ) {
+-				var self = set.eq( index );
+-				if ( isFunction ) {
+-					args[0] = value.call( this, index, table ? self.html() : undefined );
+-				}
+-				self.domManip( args, table, callback );
+-			});
+-		}
+-
+-		if ( l ) {
+-			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+-			first = fragment.firstChild;
+-
+-			if ( fragment.childNodes.length === 1 ) {
+-				fragment = first;
+-			}
+-
+-			if ( first ) {
+-				table = table && jQuery.nodeName( first, "tr" );
+-				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+-				hasScripts = scripts.length;
+-
+-				// Use the original fragment for the last item instead of the first because it can end up
+-				// being emptied incorrectly in certain situations (#8070).
+-				for ( ; i < l; i++ ) {
+-					node = fragment;
+-
+-					if ( i !== iNoClone ) {
+-						node = jQuery.clone( node, true, true );
+-
+-						// Keep references to cloned scripts for later restoration
+-						if ( hasScripts ) {
+-							jQuery.merge( scripts, getAll( node, "script" ) );
+-						}
+-					}
+-
+-					callback.call(
+-						table && jQuery.nodeName( this[i], "table" ) ?
+-							findOrAppend( this[i], "tbody" ) :
+-							this[i],
+-						node,
+-						i
+-					);
+-				}
+-
+-				if ( hasScripts ) {
+-					doc = scripts[ scripts.length - 1 ].ownerDocument;
+-
+-					// Reenable scripts
+-					jQuery.map( scripts, restoreScript );
+-
+-					// Evaluate executable scripts on first document insertion
+-					for ( i = 0; i < hasScripts; i++ ) {
+-						node = scripts[ i ];
+-						if ( rscriptType.test( node.type || "" ) &&
+-							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+-
+-							if ( node.src ) {
+-								// Hope ajax is available...
+-								jQuery.ajax({
+-									url: node.src,
+-									type: "GET",
+-									dataType: "script",
+-									async: false,
+-									global: false,
+-									"throws": true
+-								});
+-							} else {
+-								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+-							}
+-						}
+-					}
+-				}
+-
+-				// Fix #11809: Avoid leaking memory
+-				fragment = first = null;
+-			}
+-		}
+-
+-		return this;
+-	}
+-});
+-
+-function findOrAppend( elem, tag ) {
+-	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+-}
+-
+-// Replace/restore the type attribute of script elements for safe DOM manipulation
+-function disableScript( elem ) {
+-	var attr = elem.getAttributeNode("type");
+-	elem.type = ( attr && attr.specified ) + "/" + elem.type;
+-	return elem;
+-}
+-function restoreScript( elem ) {
+-	var match = rscriptTypeMasked.exec( elem.type );
+-	if ( match ) {
+-		elem.type = match[1];
+-	} else {
+-		elem.removeAttribute("type");
+-	}
+-	return elem;
+-}
+-
+-// Mark scripts as having already been evaluated
+-function setGlobalEval( elems, refElements ) {
+-	var elem,
+-		i = 0;
+-	for ( ; (elem = elems[i]) != null; i++ ) {
+-		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+-	}
+-}
+-
+-function cloneCopyEvent( src, dest ) {
+-
+-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+-		return;
+-	}
+-
+-	var type, i, l,
+-		oldData = jQuery._data( src ),
+-		curData = jQuery._data( dest, oldData ),
+-		events = oldData.events;
+-
+-	if ( events ) {
+-		delete curData.handle;
+-		curData.events = {};
+-
+-		for ( type in events ) {
+-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+-				jQuery.event.add( dest, type, events[ type ][ i ] );
+-			}
+-		}
+-	}
+-
+-	// make the cloned public data object a copy from the original
+-	if ( curData.data ) {
+-		curData.data = jQuery.extend( {}, curData.data );
+-	}
+-}
+-
+-function fixCloneNodeIssues( src, dest ) {
+-	var nodeName, e, data;
+-
+-	// We do not need to do anything for non-Elements
+-	if ( dest.nodeType !== 1 ) {
+-		return;
+-	}
+-
+-	nodeName = dest.nodeName.toLowerCase();
+-
+-	// IE6-8 copies events bound via attachEvent when using cloneNode.
+-	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+-		data = jQuery._data( dest );
+-
+-		for ( e in data.events ) {
+-			jQuery.removeEvent( dest, e, data.handle );
+-		}
+-
+-		// Event data gets referenced instead of copied if the expando gets copied too
+-		dest.removeAttribute( jQuery.expando );
+-	}
+-
+-	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+-	if ( nodeName === "script" && dest.text !== src.text ) {
+-		disableScript( dest ).text = src.text;
+-		restoreScript( dest );
+-
+-	// IE6-10 improperly clones children of object elements using classid.
+-	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+-	} else if ( nodeName === "object" ) {
+-		if ( dest.parentNode ) {
+-			dest.outerHTML = src.outerHTML;
+-		}
+-
+-		// This path appears unavoidable for IE9. When cloning an object
+-		// element in IE9, the outerHTML strategy above is not sufficient.
+-		// If the src has innerHTML and the destination does not,
+-		// copy the src.innerHTML into the dest.innerHTML. #10324
+-		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+-			dest.innerHTML = src.innerHTML;
+-		}
+-
+-	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+-		// IE6-8 fails to persist the checked state of a cloned checkbox
+-		// or radio button. Worse, IE6-7 fail to give the cloned element
+-		// a checked appearance if the defaultChecked value isn't also set
+-
+-		dest.defaultChecked = dest.checked = src.checked;
+-
+-		// IE6-7 get confused and end up setting the value of a cloned
+-		// checkbox/radio button to an empty string instead of "on"
+-		if ( dest.value !== src.value ) {
+-			dest.value = src.value;
+-		}
+-
+-	// IE6-8 fails to return the selected option to the default selected
+-	// state when cloning options
+-	} else if ( nodeName === "option" ) {
+-		dest.defaultSelected = dest.selected = src.defaultSelected;
+-
+-	// IE6-8 fails to set the defaultValue to the correct value when
+-	// cloning other types of input fields
+-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+-		dest.defaultValue = src.defaultValue;
+-	}
+-}
+-
+-jQuery.each({
+-	appendTo: "append",
+-	prependTo: "prepend",
+-	insertBefore: "before",
+-	insertAfter: "after",
+-	replaceAll: "replaceWith"
+-}, function( name, original ) {
+-	jQuery.fn[ name ] = function( selector ) {
+-		var elems,
+-			i = 0,
+-			ret = [],
+-			insert = jQuery( selector ),
+-			last = insert.length - 1;
+-
+-		for ( ; i <= last; i++ ) {
+-			elems = i === last ? this : this.clone(true);
+-			jQuery( insert[i] )[ original ]( elems );
+-
+-			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+-			core_push.apply( ret, elems.get() );
+-		}
+-
+-		return this.pushStack( ret );
+-	};
+-});
+-
+-function getAll( context, tag ) {
+-	var elems, elem,
+-		i = 0,
+-		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
+-			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
+-			undefined;
+-
+-	if ( !found ) {
+-		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+-			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+-				found.push( elem );
+-			} else {
+-				jQuery.merge( found, getAll( elem, tag ) );
+-			}
+-		}
+-	}
+-
+-	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+-		jQuery.merge( [ context ], found ) :
+-		found;
+-}
+-
+-// Used in buildFragment, fixes the defaultChecked property
+-function fixDefaultChecked( elem ) {
+-	if ( manipulation_rcheckableType.test( elem.type ) ) {
+-		elem.defaultChecked = elem.checked;
+-	}
+-}
+-
+-jQuery.extend({
+-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+-		var destElements, node, clone, i, srcElements,
+-			inPage = jQuery.contains( elem.ownerDocument, elem );
+-
+-		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+-			clone = elem.cloneNode( true );
+-
+-		// IE<=8 does not properly clone detached, unknown element nodes
+-		} else {
+-			fragmentDiv.innerHTML = elem.outerHTML;
+-			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+-		}
+-
+-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+-
+-			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+-			destElements = getAll( clone );
+-			srcElements = getAll( elem );
+-
+-			// Fix all IE cloning issues
+-			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+-				// Ensure that the destination node is not null; Fixes #9587
+-				if ( destElements[i] ) {
+-					fixCloneNodeIssues( node, destElements[i] );
+-				}
+-			}
+-		}
+-
+-		// Copy the events from the original to the clone
+-		if ( dataAndEvents ) {
+-			if ( deepDataAndEvents ) {
+-				srcElements = srcElements || getAll( elem );
+-				destElements = destElements || getAll( clone );
+-
+-				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+-					cloneCopyEvent( node, destElements[i] );
+-				}
+-			} else {
+-				cloneCopyEvent( elem, clone );
+-			}
+-		}
+-
+-		// Preserve script evaluation history
+-		destElements = getAll( clone, "script" );
+-		if ( destElements.length > 0 ) {
+-			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+-		}
+-
+-		destElements = srcElements = node = null;
+-
+-		// Return the cloned set
+-		return clone;
+-	},
+-
+-	buildFragment: function( elems, context, scripts, selection ) {
+-		var j, elem, contains,
+-			tmp, tag, tbody, wrap,
+-			l = elems.length,
+-
+-			// Ensure a safe fragment
+-			safe = createSafeFragment( context ),
+-
+-			nodes = [],
+-			i = 0;
+-
+-		for ( ; i < l; i++ ) {
+-			elem = elems[ i ];
+-
+-			if ( elem || elem === 0 ) {
+-
+-				// Add nodes directly
+-				if ( jQuery.type( elem ) === "object" ) {
+-					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+-
+-				// Convert non-html into a text node
+-				} else if ( !rhtml.test( elem ) ) {
+-					nodes.push( context.createTextNode( elem ) );
+-
+-				// Convert html into DOM nodes
+-				} else {
+-					tmp = tmp || safe.appendChild( context.createElement("div") );
+-
+-					// Deserialize a standard representation
+-					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+-					wrap = wrapMap[ tag ] || wrapMap._default;
+-
+-					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+-
+-					// Descend through wrappers to the right content
+-					j = wrap[0];
+-					while ( j-- ) {
+-						tmp = tmp.lastChild;
+-					}
+-
+-					// Manually add leading whitespace removed by IE
+-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+-						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+-					}
+-
+-					// Remove IE's autoinserted <tbody> from table fragments
+-					if ( !jQuery.support.tbody ) {
+-
+-						// String was a <table>, *may* have spurious <tbody>
+-						elem = tag === "table" && !rtbody.test( elem ) ?
+-							tmp.firstChild :
+-
+-							// String was a bare <thead> or <tfoot>
+-							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+-								tmp :
+-								0;
+-
+-						j = elem && elem.childNodes.length;
+-						while ( j-- ) {
+-							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+-								elem.removeChild( tbody );
+-							}
+-						}
+-					}
+-
+-					jQuery.merge( nodes, tmp.childNodes );
+-
+-					// Fix #12392 for WebKit and IE > 9
+-					tmp.textContent = "";
+-
+-					// Fix #12392 for oldIE
+-					while ( tmp.firstChild ) {
+-						tmp.removeChild( tmp.firstChild );
+-					}
+-
+-					// Remember the top-level container for proper cleanup
+-					tmp = safe.lastChild;
+-				}
+-			}
+-		}
+-
+-		// Fix #11356: Clear elements from fragment
+-		if ( tmp ) {
+-			safe.removeChild( tmp );
+-		}
+-
+-		// Reset defaultChecked for any radios and checkboxes
+-		// about to be appended to the DOM in IE 6/7 (#8060)
+-		if ( !jQuery.support.appendChecked ) {
+-			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+-		}
+-
+-		i = 0;
+-		while ( (elem = nodes[ i++ ]) ) {
+-
+-			// #4087 - If origin and destination elements are the same, and this is
+-			// that element, do not do anything
+-			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+-				continue;
+-			}
+-
+-			contains = jQuery.contains( elem.ownerDocument, elem );
+-
+-			// Append to fragment
+-			tmp = getAll( safe.appendChild( elem ), "script" );
+-
+-			// Preserve script evaluation history
+-			if ( contains ) {
+-				setGlobalEval( tmp );
+-			}
+-
+-			// Capture executables
+-			if ( scripts ) {
+-				j = 0;
+-				while ( (elem = tmp[ j++ ]) ) {
+-					if ( rscriptType.test( elem.type || "" ) ) {
+-						scripts.push( elem );
+-					}
+-				}
+-			}
+-		}
+-
+-		tmp = null;
+-
+-		return safe;
+-	},
+-
+-	cleanData: function( elems, /* internal */ acceptData ) {
+-		var elem, type, id, data,
+-			i = 0,
+-			internalKey = jQuery.expando,
+-			cache = jQuery.cache,
+-			deleteExpando = jQuery.support.deleteExpando,
+-			special = jQuery.event.special;
+-
+-		for ( ; (elem = elems[i]) != null; i++ ) {
+-
+-			if ( acceptData || jQuery.acceptData( elem ) ) {
+-
+-				id = elem[ internalKey ];
+-				data = id && cache[ id ];
+-
+-				if ( data ) {
+-					if ( data.events ) {
+-						for ( type in data.events ) {
+-							if ( special[ type ] ) {
+-								jQuery.event.remove( elem, type );
+-
+-							// This is a shortcut to avoid jQuery.event.remove's overhead
+-							} else {
+-								jQuery.removeEvent( elem, type, data.handle );
+-							}
+-						}
+-					}
+-
+-					// Remove cache only if it was not already removed by jQuery.event.remove
+-					if ( cache[ id ] ) {
+-
+-						delete cache[ id ];
+-
+-						// IE does not allow us to delete expando properties from nodes,
+-						// nor does it have a removeAttribute function on Document nodes;
+-						// we must handle all of these cases
+-						if ( deleteExpando ) {
+-							delete elem[ internalKey ];
+-
+-						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
+-							elem.removeAttribute( internalKey );
+-
+-						} else {
+-							elem[ internalKey ] = null;
+-						}
+-
+-						core_deletedIds.push( id );
+-					}
+-				}
+-			}
+-		}
+-	}
+-});
+-var iframe, getStyles, curCSS,
+-	ralpha = /alpha\([^)]*\)/i,
+-	ropacity = /opacity\s*=\s*([^)]*)/,
+-	rposition = /^(top|right|bottom|left)$/,
+-	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+-	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+-	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+-	rmargin = /^margin/,
+-	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+-	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+-	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+-	elemdisplay = { BODY: "block" },
+-
+-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+-	cssNormalTransform = {
+-		letterSpacing: 0,
+-		fontWeight: 400
+-	},
+-
+-	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+-	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+-
+-// return a css property mapped to a potentially vendor prefixed property
+-function vendorPropName( style, name ) {
+-
+-	// shortcut for names that are not vendor prefixed
+-	if ( name in style ) {
+-		return name;
+-	}
+-
+-	// check for vendor prefixed names
+-	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+-		origName = name,
+-		i = cssPrefixes.length;
+-
+-	while ( i-- ) {
+-		name = cssPrefixes[ i ] + capName;
+-		if ( name in style ) {
+-			return name;
+-		}
+-	}
+-
+-	return origName;
+-}
+-
+-function isHidden( elem, el ) {
+-	// isHidden might be called from jQuery#filter function;
+-	// in that case, element will be second argument
+-	elem = el || elem;
+-	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+-}
+-
+-function showHide( elements, show ) {
+-	var display, elem, hidden,
+-		values = [],
+-		index = 0,
+-		length = elements.length;
+-
+-	for ( ; index < length; index++ ) {
+-		elem = elements[ index ];
+-		if ( !elem.style ) {
+-			continue;
+-		}
+-
+-		values[ index ] = jQuery._data( elem, "olddisplay" );
+-		display = elem.style.display;
+-		if ( show ) {
+-			// Reset the inline display of this element to learn if it is
+-			// being hidden by cascaded rules or not
+-			if ( !values[ index ] && display === "none" ) {
+-				elem.style.display = "";
+-			}
+-
+-			// Set elements which have been overridden with display: none
+-			// in a stylesheet to whatever the default browser style is
+-			// for such an element
+-			if ( elem.style.display === "" && isHidden( elem ) ) {
+-				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+-			}
+-		} else {
+-
+-			if ( !values[ index ] ) {
+-				hidden = isHidden( elem );
+-
+-				if ( display && display !== "none" || !hidden ) {
+-					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+-				}
+-			}
+-		}
+-	}
+-
+-	// Set the display of most of the elements in a second loop
+-	// to avoid the constant reflow
+-	for ( index = 0; index < length; index++ ) {
+-		elem = elements[ index ];
+-		if ( !elem.style ) {
+-			continue;
+-		}
+-		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+-			elem.style.display = show ? values[ index ] || "" : "none";
+-		}
+-	}
+-
+-	return elements;
+-}
+-
+-jQuery.fn.extend({
+-	css: function( name, value ) {
+-		return jQuery.access( this, function( elem, name, value ) {
+-			var len, styles,
+-				map = {},
+-				i = 0;
+-
+-			if ( jQuery.isArray( name ) ) {
+-				styles = getStyles( elem );
+-				len = name.length;
+-
+-				for ( ; i < len; i++ ) {
+-					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+-				}
+-
+-				return map;
+-			}
+-
+-			return value !== undefined ?
+-				jQuery.style( elem, name, value ) :
+-				jQuery.css( elem, name );
+-		}, name, value, arguments.length > 1 );
+-	},
+-	show: function() {
+-		return showHide( this, true );
+-	},
+-	hide: function() {
+-		return showHide( this );
+-	},
+-	toggle: function( state ) {
+-		var bool = typeof state === "boolean";
+-
+-		return this.each(function() {
+-			if ( bool ? state : isHidden( this ) ) {
+-				jQuery( this ).show();
+-			} else {
+-				jQuery( this ).hide();
+-			}
+-		});
+-	}
+-});
+-
+-jQuery.extend({
+-	// Add in style property hooks for overriding the default
+-	// behavior of getting and setting a style property
+-	cssHooks: {
+-		opacity: {
+-			get: function( elem, computed ) {
+-				if ( computed ) {
+-					// We should always get a number back from opacity
+-					var ret = curCSS( elem, "opacity" );
+-					return ret === "" ? "1" : ret;
+-				}
+-			}
+-		}
+-	},
+-
+-	// Exclude the following css properties to add px
+-	cssNumber: {
+-		"columnCount": true,
+-		"fillOpacity": true,
+-		"fontWeight": true,
+-		"lineHeight": true,
+-		"opacity": true,
+-		"orphans": true,
+-		"widows": true,
+-		"zIndex": true,
+-		"zoom": true
+-	},
+-
+-	// Add in properties whose names you wish to fix before
+-	// setting or getting the value
+-	cssProps: {
+-		// normalize float css property
+-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+-	},
+-
+-	// Get and set the style property on a DOM Node
+-	style: function( elem, name, value, extra ) {
+-		// Don't set styles on text and comment nodes
+-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+-			return;
+-		}
+-
+-		// Make sure that we're working with the right name
+-		var ret, type, hooks,
+-			origName = jQuery.camelCase( name ),
+-			style = elem.style;
+-
+-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+-
+-		// gets hook for the prefixed version
+-		// followed by the unprefixed version
+-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+-
+-		// Check if we're setting a value
+-		if ( value !== undefined ) {
+-			type = typeof value;
+-
+-			// convert relative number strings (+= or -=) to relative numbers. #7345
+-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+-				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+-				// Fixes bug #9237
+-				type = "number";
+-			}
+-
+-			// Make sure that NaN and null values aren't set. See: #7116
+-			if ( value == null || type === "number" && isNaN( value ) ) {
+-				return;
+-			}
+-
+-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+-				value += "px";
+-			}
+-
+-			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+-			// but it would mean to define eight (for every problematic property) identical functions
+-			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+-				style[ name ] = "inherit";
+-			}
+-
+-			// If a hook was provided, use that value, otherwise just set the specified value
+-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+-
+-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+-				// Fixes bug #5509
+-				try {
+-					style[ name ] = value;
+-				} catch(e) {}
+-			}
+-
+-		} else {
+-			// If a hook was provided get the non-computed value from there
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+-				return ret;
+-			}
+-
+-			// Otherwise just get the value from the style object
+-			return style[ name ];
+-		}
+-	},
+-
+-	css: function( elem, name, extra, styles ) {
+-		var num, val, hooks,
+-			origName = jQuery.camelCase( name );
+-
+-		// Make sure that we're working with the right name
+-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+-
+-		// gets hook for the prefixed version
+-		// followed by the unprefixed version
+-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+-
+-		// If a hook was provided get the computed value from there
+-		if ( hooks && "get" in hooks ) {
+-			val = hooks.get( elem, true, extra );
+-		}
+-
+-		// Otherwise, if a way to get the computed value exists, use that
+-		if ( val === undefined ) {
+-			val = curCSS( elem, name, styles );
+-		}
+-
+-		//convert "normal" to computed value
+-		if ( val === "normal" && name in cssNormalTransform ) {
+-			val = cssNormalTransform[ name ];
+-		}
+-
+-		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+-		if ( extra === "" || extra ) {
+-			num = parseFloat( val );
+-			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+-		}
+-		return val;
+-	},
+-
+-	// A method for quickly swapping in/out CSS properties to get correct calculations
+-	swap: function( elem, options, callback, args ) {
+-		var ret, name,
+-			old = {};
+-
+-		// Remember the old values, and insert the new ones
+-		for ( name in options ) {
+-			old[ name ] = elem.style[ name ];
+-			elem.style[ name ] = options[ name ];
+-		}
+-
+-		ret = callback.apply( elem, args || [] );
+-
+-		// Revert the old values
+-		for ( name in options ) {
+-			elem.style[ name ] = old[ name ];
+-		}
+-
+-		return ret;
+-	}
+-});
+-
+-// NOTE: we've included the "window" in window.getComputedStyle
+-// because jsdom on node.js will break without it.
+-if ( window.getComputedStyle ) {
+-	getStyles = function( elem ) {
+-		return window.getComputedStyle( elem, null );
+-	};
+-
+-	curCSS = function( elem, name, _computed ) {
+-		var width, minWidth, maxWidth,
+-			computed = _computed || getStyles( elem ),
+-
+-			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+-			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+-			style = elem.style;
+-
+-		if ( computed ) {
+-
+-			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+-				ret = jQuery.style( elem, name );
+-			}
+-
+-			// A tribute to the "awesome hack by Dean Edwards"
+-			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+-			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+-			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+-			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+-
+-				// Remember the original values
+-				width = style.width;
+-				minWidth = style.minWidth;
+-				maxWidth = style.maxWidth;
+-
+-				// Put in the new values to get a computed value out
+-				style.minWidth = style.maxWidth = style.width = ret;
+-				ret = computed.width;
+-
+-				// Revert the changed values
+-				style.width = width;
+-				style.minWidth = minWidth;
+-				style.maxWidth = maxWidth;
+-			}
+-		}
+-
+-		return ret;
+-	};
+-} else if ( document.documentElement.currentStyle ) {
+-	getStyles = function( elem ) {
+-		return elem.currentStyle;
+-	};
+-
+-	curCSS = function( elem, name, _computed ) {
+-		var left, rs, rsLeft,
+-			computed = _computed || getStyles( elem ),
+-			ret = computed ? computed[ name ] : undefined,
+-			style = elem.style;
+-
+-		// Avoid setting ret to empty string here
+-		// so we don't default to auto
+-		if ( ret == null && style && style[ name ] ) {
+-			ret = style[ name ];
+-		}
+-
+-		// From the awesome hack by Dean Edwards
+-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+-
+-		// If we're not dealing with a regular pixel number
+-		// but a number that has a weird ending, we need to convert it to pixels
+-		// but not position css attributes, as those are proportional to the parent element instead
+-		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+-		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+-
+-			// Remember the original values
+-			left = style.left;
+-			rs = elem.runtimeStyle;
+-			rsLeft = rs && rs.left;
+-
+-			// Put in the new values to get a computed value out
+-			if ( rsLeft ) {
+-				rs.left = elem.currentStyle.left;
+-			}
+-			style.left = name === "fontSize" ? "1em" : ret;
+-			ret = style.pixelLeft + "px";
+-
+-			// Revert the changed values
+-			style.left = left;
+-			if ( rsLeft ) {
+-				rs.left = rsLeft;
+-			}
+-		}
+-
+-		return ret === "" ? "auto" : ret;
+-	};
+-}
+-
+-function setPositiveNumber( elem, value, subtract ) {
+-	var matches = rnumsplit.exec( value );
+-	return matches ?
+-		// Guard against undefined "subtract", e.g., when used as in cssHooks
+-		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+-		value;
+-}
+-
+-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+-	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+-		// If we already have the right measurement, avoid augmentation
+-		4 :
+-		// Otherwise initialize for horizontal or vertical properties
+-		name === "width" ? 1 : 0,
+-
+-		val = 0;
+-
+-	for ( ; i < 4; i += 2 ) {
+-		// both box models exclude margin, so add it if we want it
+-		if ( extra === "margin" ) {
+-			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+-		}
+-
+-		if ( isBorderBox ) {
+-			// border-box includes padding, so remove it if we want content
+-			if ( extra === "content" ) {
+-				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+-			}
+-
+-			// at this point, extra isn't border nor margin, so remove border
+-			if ( extra !== "margin" ) {
+-				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+-			}
+-		} else {
+-			// at this point, extra isn't content, so add padding
+-			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+-
+-			// at this point, extra isn't content nor padding, so add border
+-			if ( extra !== "padding" ) {
+-				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+-			}
+-		}
+-	}
+-
+-	return val;
+-}
+-
+-function getWidthOrHeight( elem, name, extra ) {
+-
+-	// Start with offset property, which is equivalent to the border-box value
+-	var valueIsBorderBox = true,
+-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+-		styles = getStyles( elem ),
+-		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+-
+-	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+-	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+-	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+-	if ( val <= 0 || val == null ) {
+-		// Fall back to computed then uncomputed css if necessary
+-		val = curCSS( elem, name, styles );
+-		if ( val < 0 || val == null ) {
+-			val = elem.style[ name ];
+-		}
+-
+-		// Computed unit is not pixels. Stop here and return.
+-		if ( rnumnonpx.test(val) ) {
+-			return val;
+-		}
+-
+-		// we need the check for style in case a browser which returns unreliable values
+-		// for getComputedStyle silently falls back to the reliable elem.style
+-		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+-
+-		// Normalize "", auto, and prepare for extra
+-		val = parseFloat( val ) || 0;
+-	}
+-
+-	// use the active box-sizing model to add/subtract irrelevant styles
+-	return ( val +
+-		augmentWidthOrHeight(
+-			elem,
+-			name,
+-			extra || ( isBorderBox ? "border" : "content" ),
+-			valueIsBorderBox,
+-			styles
+-		)
+-	) + "px";
+-}
+-
+-// Try to determine the default display value of an element
+-function css_defaultDisplay( nodeName ) {
+-	var doc = document,
+-		display = elemdisplay[ nodeName ];
+-
+-	if ( !display ) {
+-		display = actualDisplay( nodeName, doc );
+-
+-		// If the simple way fails, read from inside an iframe
+-		if ( display === "none" || !display ) {
+-			// Use the already-created iframe if possible
+-			iframe = ( iframe ||
+-				jQuery("<iframe frameborder='0' width='0' height='0'/>")
+-				.css( "cssText", "display:block !important" )
+-			).appendTo( doc.documentElement );
+-
+-			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+-			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+-			doc.write("<!doctype html><html><body>");
+-			doc.close();
+-
+-			display = actualDisplay( nodeName, doc );
+-			iframe.detach();
+-		}
+-
+-		// Store the correct default display
+-		elemdisplay[ nodeName ] = display;
+-	}
+-
+-	return display;
+-}
+-
+-// Called ONLY from within css_defaultDisplay
+-function actualDisplay( name, doc ) {
+-	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+-		display = jQuery.css( elem[0], "display" );
+-	elem.remove();
+-	return display;
+-}
+-
+-jQuery.each([ "height", "width" ], function( i, name ) {
+-	jQuery.cssHooks[ name ] = {
+-		get: function( elem, computed, extra ) {
+-			if ( computed ) {
+-				// certain elements can have dimension info if we invisibly show them
+-				// however, it must have a current display style that would benefit from this
+-				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+-					jQuery.swap( elem, cssShow, function() {
+-						return getWidthOrHeight( elem, name, extra );
+-					}) :
+-					getWidthOrHeight( elem, name, extra );
+-			}
+-		},
+-
+-		set: function( elem, value, extra ) {
+-			var styles = extra && getStyles( elem );
+-			return setPositiveNumber( elem, value, extra ?
+-				augmentWidthOrHeight(
+-					elem,
+-					name,
+-					extra,
+-					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+-					styles
+-				) : 0
+-			);
+-		}
+-	};
+-});
+-
+-if ( !jQuery.support.opacity ) {
+-	jQuery.cssHooks.opacity = {
+-		get: function( elem, computed ) {
+-			// IE uses filters for opacity
+-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+-				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+-				computed ? "1" : "";
+-		},
+-
+-		set: function( elem, value ) {
+-			var style = elem.style,
+-				currentStyle = elem.currentStyle,
+-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+-				filter = currentStyle && currentStyle.filter || style.filter || "";
+-
+-			// IE has trouble with opacity if it does not have layout
+-			// Force it by setting the zoom level
+-			style.zoom = 1;
+-
+-			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+-			// if value === "", then remove inline opacity #12685
+-			if ( ( value >= 1 || value === "" ) &&
+-					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+-					style.removeAttribute ) {
+-
+-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+-				// style.removeAttribute is IE Only, but so apparently is this code path...
+-				style.removeAttribute( "filter" );
+-
+-				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+-				if ( value === "" || currentStyle && !currentStyle.filter ) {
+-					return;
+-				}
+-			}
+-
+-			// otherwise, set new filter values
+-			style.filter = ralpha.test( filter ) ?
+-				filter.replace( ralpha, opacity ) :
+-				filter + " " + opacity;
+-		}
+-	};
+-}
+-
+-// These hooks cannot be added until DOM ready because the support test
+-// for it is not run until after DOM ready
+-jQuery(function() {
+-	if ( !jQuery.support.reliableMarginRight ) {
+-		jQuery.cssHooks.marginRight = {
+-			get: function( elem, computed ) {
+-				if ( computed ) {
+-					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-					// Work around by temporarily setting element display to inline-block
+-					return jQuery.swap( elem, { "display": "inline-block" },
+-						curCSS, [ elem, "marginRight" ] );
+-				}
+-			}
+-		};
+-	}
+-
+-	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+-	// getComputedStyle returns percent when specified for top/left/bottom/right
+-	// rather than make the css module depend on the offset module, we just check for it here
+-	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+-		jQuery.each( [ "top", "left" ], function( i, prop ) {
+-			jQuery.cssHooks[ prop ] = {
+-				get: function( elem, computed ) {
+-					if ( computed ) {
+-						computed = curCSS( elem, prop );
+-						// if curCSS returns percentage, fallback to offset
+-						return rnumnonpx.test( computed ) ?
+-							jQuery( elem ).position()[ prop ] + "px" :
+-							computed;
+-					}
+-				}
+-			};
+-		});
+-	}
+-
+-});
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.hidden = function( elem ) {
+-		// Support: Opera <= 12.12
+-		// Opera reports offsetWidths and offsetHeights less than zero on some elements
+-		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+-			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+-	};
+-
+-	jQuery.expr.filters.visible = function( elem ) {
+-		return !jQuery.expr.filters.hidden( elem );
+-	};
+-}
+-
+-// These hooks are used by animate to expand properties
+-jQuery.each({
+-	margin: "",
+-	padding: "",
+-	border: "Width"
+-}, function( prefix, suffix ) {
+-	jQuery.cssHooks[ prefix + suffix ] = {
+-		expand: function( value ) {
+-			var i = 0,
+-				expanded = {},
+-
+-				// assumes a single number if not a string
+-				parts = typeof value === "string" ? value.split(" ") : [ value ];
+-
+-			for ( ; i < 4; i++ ) {
+-				expanded[ prefix + cssExpand[ i ] + suffix ] =
+-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+-			}
+-
+-			return expanded;
+-		}
+-	};
+-
+-	if ( !rmargin.test( prefix ) ) {
+-		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+-	}
+-});
+-var r20 = /%20/g,
+-	rbracket = /\[\]$/,
+-	rCRLF = /\r?\n/g,
+-	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+-	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+-
+-jQuery.fn.extend({
+-	serialize: function() {
+-		return jQuery.param( this.serializeArray() );
+-	},
+-	serializeArray: function() {
+-		return this.map(function(){
+-			// Can add propHook for "elements" to filter or add form elements
+-			var elements = jQuery.prop( this, "elements" );
+-			return elements ? jQuery.makeArray( elements ) : this;
+-		})
+-		.filter(function(){
+-			var type = this.type;
+-			// Use .is(":disabled") so that fieldset[disabled] works
+-			return this.name && !jQuery( this ).is( ":disabled" ) &&
+-				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+-				( this.checked || !manipulation_rcheckableType.test( type ) );
+-		})
+-		.map(function( i, elem ){
+-			var val = jQuery( this ).val();
+-
+-			return val == null ?
+-				null :
+-				jQuery.isArray( val ) ?
+-					jQuery.map( val, function( val ){
+-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-					}) :
+-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-		}).get();
+-	}
+-});
+-
+-//Serialize an array of form elements or a set of
+-//key/values into a query string
+-jQuery.param = function( a, traditional ) {
+-	var prefix,
+-		s = [],
+-		add = function( key, value ) {
+-			// If value is a function, invoke it and return its value
+-			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+-			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+-		};
+-
+-	// Set traditional to true for jQuery <= 1.3.2 behavior.
+-	if ( traditional === undefined ) {
+-		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+-	}
+-
+-	// If an array was passed in, assume that it is an array of form elements.
+-	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+-		// Serialize the form elements
+-		jQuery.each( a, function() {
+-			add( this.name, this.value );
+-		});
+-
+-	} else {
+-		// If traditional, encode the "old" way (the way 1.3.2 or older
+-		// did it), otherwise encode params recursively.
+-		for ( prefix in a ) {
+-			buildParams( prefix, a[ prefix ], traditional, add );
+-		}
+-	}
+-
+-	// Return the resulting serialization
+-	return s.join( "&" ).replace( r20, "+" );
+-};
+-
+-function buildParams( prefix, obj, traditional, add ) {
+-	var name;
+-
+-	if ( jQuery.isArray( obj ) ) {
+-		// Serialize array item.
+-		jQuery.each( obj, function( i, v ) {
+-			if ( traditional || rbracket.test( prefix ) ) {
+-				// Treat each array item as a scalar.
+-				add( prefix, v );
+-
+-			} else {
+-				// Item is non-scalar (array or object), encode its numeric index.
+-				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+-			}
+-		});
+-
+-	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+-		// Serialize object item.
+-		for ( name in obj ) {
+-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+-		}
+-
+-	} else {
+-		// Serialize scalar item.
+-		add( prefix, obj );
+-	}
+-}
+-jQuery.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( i, name ) {
+-
+-	// Handle event binding
+-	jQuery.fn[ name ] = function( data, fn ) {
+-		return arguments.length > 0 ?
+-			this.on( name, null, data, fn ) :
+-			this.trigger( name );
+-	};
+-});
+-
+-jQuery.fn.hover = function( fnOver, fnOut ) {
+-	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+-};
+-var
+-	// Document location
+-	ajaxLocParts,
+-	ajaxLocation,
+-	ajax_nonce = jQuery.now(),
+-
+-	ajax_rquery = /\?/,
+-	rhash = /#.*$/,
+-	rts = /([?&])_=[^&]*/,
+-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+-	// #7653, #8125, #8152: local protocol detection
+-	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+-	rnoContent = /^(?:GET|HEAD)$/,
+-	rprotocol = /^\/\//,
+-	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+-
+-	// Keep a copy of the old load method
+-	_load = jQuery.fn.load,
+-
+-	/* Prefilters
+-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+-	 * 2) These are called:
+-	 *    - BEFORE asking for a transport
+-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+-	 * 3) key is the dataType
+-	 * 4) the catchall symbol "*" can be used
+-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+-	 */
+-	prefilters = {},
+-
+-	/* Transports bindings
+-	 * 1) key is the dataType
+-	 * 2) the catchall symbol "*" can be used
+-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+-	 */
+-	transports = {},
+-
+-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+-	allTypes = "*/".concat("*");
+-
+-// #8138, IE may throw an exception when accessing
+-// a field from window.location if document.domain has been set
+-try {
+-	ajaxLocation = location.href;
+-} catch( e ) {
+-	// Use the href attribute of an A element
+-	// since IE will modify it given document.location
+-	ajaxLocation = document.createElement( "a" );
+-	ajaxLocation.href = "";
+-	ajaxLocation = ajaxLocation.href;
+-}
+-
+-// Segment location into parts
+-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+-
+-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+-function addToPrefiltersOrTransports( structure ) {
+-
+-	// dataTypeExpression is optional and defaults to "*"
+-	return function( dataTypeExpression, func ) {
+-
+-		if ( typeof dataTypeExpression !== "string" ) {
+-			func = dataTypeExpression;
+-			dataTypeExpression = "*";
+-		}
+-
+-		var dataType,
+-			i = 0,
+-			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+-
+-		if ( jQuery.isFunction( func ) ) {
+-			// For each dataType in the dataTypeExpression
+-			while ( (dataType = dataTypes[i++]) ) {
+-				// Prepend if requested
+-				if ( dataType[0] === "+" ) {
+-					dataType = dataType.slice( 1 ) || "*";
+-					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+-
+-				// Otherwise append
+-				} else {
+-					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+-				}
+-			}
+-		}
+-	};
+-}
+-
+-// Base inspection function for prefilters and transports
+-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+-
+-	var inspected = {},
+-		seekingTransport = ( structure === transports );
+-
+-	function inspect( dataType ) {
+-		var selected;
+-		inspected[ dataType ] = true;
+-		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+-			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+-			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+-				options.dataTypes.unshift( dataTypeOrTransport );
+-				inspect( dataTypeOrTransport );
+-				return false;
+-			} else if ( seekingTransport ) {
+-				return !( selected = dataTypeOrTransport );
+-			}
+-		});
+-		return selected;
+-	}
+-
+-	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+-}
+-
+-// A special extend for ajax options
+-// that takes "flat" options (not to be deep extended)
+-// Fixes #9887
+-function ajaxExtend( target, src ) {
+-	var deep, key,
+-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+-
+-	for ( key in src ) {
+-		if ( src[ key ] !== undefined ) {
+-			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+-		}
+-	}
+-	if ( deep ) {
+-		jQuery.extend( true, target, deep );
+-	}
+-
+-	return target;
+-}
+-
+-jQuery.fn.load = function( url, params, callback ) {
+-	if ( typeof url !== "string" && _load ) {
+-		return _load.apply( this, arguments );
+-	}
+-
+-	var selector, response, type,
+-		self = this,
+-		off = url.indexOf(" ");
+-
+-	if ( off >= 0 ) {
+-		selector = url.slice( off, url.length );
+-		url = url.slice( 0, off );
+-	}
+-
+-	// If it's a function
+-	if ( jQuery.isFunction( params ) ) {
+-
+-		// We assume that it's the callback
+-		callback = params;
+-		params = undefined;
+-
+-	// Otherwise, build a param string
+-	} else if ( params && typeof params === "object" ) {
+-		type = "POST";
+-	}
+-
+-	// If we have elements to modify, make the request
+-	if ( self.length > 0 ) {
+-		jQuery.ajax({
+-			url: url,
+-
+-			// if "type" variable is undefined, then "GET" method will be used
+-			type: type,
+-			dataType: "html",
+-			data: params
+-		}).done(function( responseText ) {
+-
+-			// Save response for use in complete callback
+-			response = arguments;
+-
+-			self.html( selector ?
+-
+-				// If a selector was specified, locate the right elements in a dummy div
+-				// Exclude scripts to avoid IE 'Permission Denied' errors
+-				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+-
+-				// Otherwise use the full result
+-				responseText );
+-
+-		}).complete( callback && function( jqXHR, status ) {
+-			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+-		});
+-	}
+-
+-	return this;
+-};
+-
+-// Attach a bunch of functions for handling common AJAX events
+-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+-	jQuery.fn[ type ] = function( fn ){
+-		return this.on( type, fn );
+-	};
+-});
+-
+-jQuery.each( [ "get", "post" ], function( i, method ) {
+-	jQuery[ method ] = function( url, data, callback, type ) {
+-		// shift arguments if data argument was omitted
+-		if ( jQuery.isFunction( data ) ) {
+-			type = type || callback;
+-			callback = data;
+-			data = undefined;
+-		}
+-
+-		return jQuery.ajax({
+-			url: url,
+-			type: method,
+-			dataType: type,
+-			data: data,
+-			success: callback
+-		});
+-	};
+-});
+-
+-jQuery.extend({
+-
+-	// Counter for holding the number of active queries
+-	active: 0,
+-
+-	// Last-Modified header cache for next request
+-	lastModified: {},
+-	etag: {},
+-
+-	ajaxSettings: {
+-		url: ajaxLocation,
+-		type: "GET",
+-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+-		global: true,
+-		processData: true,
+-		async: true,
+-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+-		/*
+-		timeout: 0,
+-		data: null,
+-		dataType: null,
+-		username: null,
+-		password: null,
+-		cache: null,
+-		throws: false,
+-		traditional: false,
+-		headers: {},
+-		*/
+-
+-		accepts: {
+-			"*": allTypes,
+-			text: "text/plain",
+-			html: "text/html",
+-			xml: "application/xml, text/xml",
+-			json: "application/json, text/javascript"
+-		},
+-
+-		contents: {
+-			xml: /xml/,
+-			html: /html/,
+-			json: /json/
+-		},
+-
+-		responseFields: {
+-			xml: "responseXML",
+-			text: "responseText"
+-		},
+-
+-		// Data converters
+-		// Keys separate source (or catchall "*") and destination types with a single space
+-		converters: {
+-
+-			// Convert anything to text
+-			"* text": window.String,
+-
+-			// Text to html (true = no transformation)
+-			"text html": true,
+-
+-			// Evaluate text as a json expression
+-			"text json": jQuery.parseJSON,
+-
+-			// Parse text as xml
+-			"text xml": jQuery.parseXML
+-		},
+-
+-		// For options that shouldn't be deep extended:
+-		// you can add your own custom options here if
+-		// and when you create one that shouldn't be
+-		// deep extended (see ajaxExtend)
+-		flatOptions: {
+-			url: true,
+-			context: true
+-		}
+-	},
+-
+-	// Creates a full fledged settings object into target
+-	// with both ajaxSettings and settings fields.
+-	// If target is omitted, writes into ajaxSettings.
+-	ajaxSetup: function( target, settings ) {
+-		return settings ?
+-
+-			// Building a settings object
+-			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+-
+-			// Extending ajaxSettings
+-			ajaxExtend( jQuery.ajaxSettings, target );
+-	},
+-
+-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+-	ajaxTransport: addToPrefiltersOrTransports( transports ),
+-
+-	// Main method
+-	ajax: function( url, options ) {
+-
+-		// If url is an object, simulate pre-1.5 signature
+-		if ( typeof url === "object" ) {
+-			options = url;
+-			url = undefined;
+-		}
+-
+-		// Force options to be an object
+-		options = options || {};
+-
+-		var // Cross-domain detection vars
+-			parts,
+-			// Loop variable
+-			i,
+-			// URL without anti-cache param
+-			cacheURL,
+-			// Response headers as string
+-			responseHeadersString,
+-			// timeout handle
+-			timeoutTimer,
+-
+-			// To know if global events are to be dispatched
+-			fireGlobals,
+-
+-			transport,
+-			// Response headers
+-			responseHeaders,
+-			// Create the final options object
+-			s = jQuery.ajaxSetup( {}, options ),
+-			// Callbacks context
+-			callbackContext = s.context || s,
+-			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+-			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+-				jQuery( callbackContext ) :
+-				jQuery.event,
+-			// Deferreds
+-			deferred = jQuery.Deferred(),
+-			completeDeferred = jQuery.Callbacks("once memory"),
+-			// Status-dependent callbacks
+-			statusCode = s.statusCode || {},
+-			// Headers (they are sent all at once)
+-			requestHeaders = {},
+-			requestHeadersNames = {},
+-			// The jqXHR state
+-			state = 0,
+-			// Default abort message
+-			strAbort = "canceled",
+-			// Fake xhr
+-			jqXHR = {
+-				readyState: 0,
+-
+-				// Builds headers hashtable if needed
+-				getResponseHeader: function( key ) {
+-					var match;
+-					if ( state === 2 ) {
+-						if ( !responseHeaders ) {
+-							responseHeaders = {};
+-							while ( (match = rheaders.exec( responseHeadersString )) ) {
+-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+-							}
+-						}
+-						match = responseHeaders[ key.toLowerCase() ];
+-					}
+-					return match == null ? null : match;
+-				},
+-
+-				// Raw string
+-				getAllResponseHeaders: function() {
+-					return state === 2 ? responseHeadersString : null;
+-				},
+-
+-				// Caches the header
+-				setRequestHeader: function( name, value ) {
+-					var lname = name.toLowerCase();
+-					if ( !state ) {
+-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+-						requestHeaders[ name ] = value;
+-					}
+-					return this;
+-				},
+-
+-				// Overrides response content-type header
+-				overrideMimeType: function( type ) {
+-					if ( !state ) {
+-						s.mimeType = type;
+-					}
+-					return this;
+-				},
+-
+-				// Status-dependent callbacks
+-				statusCode: function( map ) {
+-					var code;
+-					if ( map ) {
+-						if ( state < 2 ) {
+-							for ( code in map ) {
+-								// Lazy-add the new callback in a way that preserves old ones
+-								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+-							}
+-						} else {
+-							// Execute the appropriate callbacks
+-							jqXHR.always( map[ jqXHR.status ] );
+-						}
+-					}
+-					return this;
+-				},
+-
+-				// Cancel the request
+-				abort: function( statusText ) {
+-					var finalText = statusText || strAbort;
+-					if ( transport ) {
+-						transport.abort( finalText );
+-					}
+-					done( 0, finalText );
+-					return this;
+-				}
+-			};
+-
+-		// Attach deferreds
+-		deferred.promise( jqXHR ).complete = completeDeferred.add;
+-		jqXHR.success = jqXHR.done;
+-		jqXHR.error = jqXHR.fail;
+-
+-		// Remove hash character (#7531: and string promotion)
+-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+-		// Handle falsy url in the settings object (#10093: consistency with old signature)
+-		// We also use the url parameter if available
+-		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+-
+-		// Alias method option to type as per ticket #12004
+-		s.type = options.method || options.type || s.method || s.type;
+-
+-		// Extract dataTypes list
+-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+-
+-		// A cross-domain request is in order when we have a protocol:host:port mismatch
+-		if ( s.crossDomain == null ) {
+-			parts = rurl.exec( s.url.toLowerCase() );
+-			s.crossDomain = !!( parts &&
+-				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+-			);
+-		}
+-
+-		// Convert data if not already a string
+-		if ( s.data && s.processData && typeof s.data !== "string" ) {
+-			s.data = jQuery.param( s.data, s.traditional );
+-		}
+-
+-		// Apply prefilters
+-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+-
+-		// If request was aborted inside a prefilter, stop there
+-		if ( state === 2 ) {
+-			return jqXHR;
+-		}
+-
+-		// We can fire global events as of now if asked to
+-		fireGlobals = s.global;
+-
+-		// Watch for a new set of requests
+-		if ( fireGlobals && jQuery.active++ === 0 ) {
+-			jQuery.event.trigger("ajaxStart");
+-		}
+-
+-		// Uppercase the type
+-		s.type = s.type.toUpperCase();
+-
+-		// Determine if request has content
+-		s.hasContent = !rnoContent.test( s.type );
+-
+-		// Save the URL in case we're toying with the If-Modified-Since
+-		// and/or If-None-Match header later on
+-		cacheURL = s.url;
+-
+-		// More options handling for requests with no content
+-		if ( !s.hasContent ) {
+-
+-			// If data is available, append data to url
+-			if ( s.data ) {
+-				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+-				// #9682: remove data so that it's not used in an eventual retry
+-				delete s.data;
+-			}
+-
+-			// Add anti-cache in url if needed
+-			if ( s.cache === false ) {
+-				s.url = rts.test( cacheURL ) ?
+-
+-					// If there is already a '_' parameter, set its value
+-					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+-
+-					// Otherwise add one to the end
+-					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+-			}
+-		}
+-
+-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-		if ( s.ifModified ) {
+-			if ( jQuery.lastModified[ cacheURL ] ) {
+-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+-			}
+-			if ( jQuery.etag[ cacheURL ] ) {
+-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+-			}
+-		}
+-
+-		// Set the correct header, if data is being sent
+-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+-		}
+-
+-		// Set the Accepts header for the server, depending on the dataType
+-		jqXHR.setRequestHeader(
+-			"Accept",
+-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+-				s.accepts[ "*" ]
+-		);
+-
+-		// Check for headers option
+-		for ( i in s.headers ) {
+-			jqXHR.setRequestHeader( i, s.headers[ i ] );
+-		}
+-
+-		// Allow custom headers/mimetypes and early abort
+-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+-			// Abort if not done already and return
+-			return jqXHR.abort();
+-		}
+-
+-		// aborting is no longer a cancellation
+-		strAbort = "abort";
+-
+-		// Install callbacks on deferreds
+-		for ( i in { success: 1, error: 1, complete: 1 } ) {
+-			jqXHR[ i ]( s[ i ] );
+-		}
+-
+-		// Get transport
+-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+-
+-		// If no transport, we auto-abort
+-		if ( !transport ) {
+-			done( -1, "No Transport" );
+-		} else {
+-			jqXHR.readyState = 1;
+-
+-			// Send global event
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+-			}
+-			// Timeout
+-			if ( s.async && s.timeout > 0 ) {
+-				timeoutTimer = setTimeout(function() {
+-					jqXHR.abort("timeout");
+-				}, s.timeout );
+-			}
+-
+-			try {
+-				state = 1;
+-				transport.send( requestHeaders, done );
+-			} catch ( e ) {
+-				// Propagate exception as error if not done
+-				if ( state < 2 ) {
+-					done( -1, e );
+-				// Simply rethrow otherwise
+-				} else {
+-					throw e;
+-				}
+-			}
+-		}
+-
+-		// Callback for when everything is done
+-		function done( status, nativeStatusText, responses, headers ) {
+-			var isSuccess, success, error, response, modified,
+-				statusText = nativeStatusText;
+-
+-			// Called once
+-			if ( state === 2 ) {
+-				return;
+-			}
+-
+-			// State is "done" now
+-			state = 2;
+-
+-			// Clear timeout if it exists
+-			if ( timeoutTimer ) {
+-				clearTimeout( timeoutTimer );
+-			}
+-
+-			// Dereference transport for early garbage collection
+-			// (no matter how long the jqXHR object will be used)
+-			transport = undefined;
+-
+-			// Cache response headers
+-			responseHeadersString = headers || "";
+-
+-			// Set readyState
+-			jqXHR.readyState = status > 0 ? 4 : 0;
+-
+-			// Get response data
+-			if ( responses ) {
+-				response = ajaxHandleResponses( s, jqXHR, responses );
+-			}
+-
+-			// If successful, handle type chaining
+-			if ( status >= 200 && status < 300 || status === 304 ) {
+-
+-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-				if ( s.ifModified ) {
+-					modified = jqXHR.getResponseHeader("Last-Modified");
+-					if ( modified ) {
+-						jQuery.lastModified[ cacheURL ] = modified;
+-					}
+-					modified = jqXHR.getResponseHeader("etag");
+-					if ( modified ) {
+-						jQuery.etag[ cacheURL ] = modified;
+-					}
+-				}
+-
+-				// if no content
+-				if ( status === 204 ) {
+-					isSuccess = true;
+-					statusText = "nocontent";
+-
+-				// if not modified
+-				} else if ( status === 304 ) {
+-					isSuccess = true;
+-					statusText = "notmodified";
+-
+-				// If we have data, let's convert it
+-				} else {
+-					isSuccess = ajaxConvert( s, response );
+-					statusText = isSuccess.state;
+-					success = isSuccess.data;
+-					error = isSuccess.error;
+-					isSuccess = !error;
+-				}
+-			} else {
+-				// We extract error from statusText
+-				// then normalize statusText and status for non-aborts
+-				error = statusText;
+-				if ( status || !statusText ) {
+-					statusText = "error";
+-					if ( status < 0 ) {
+-						status = 0;
+-					}
+-				}
+-			}
+-
+-			// Set data for the fake xhr object
+-			jqXHR.status = status;
+-			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+-
+-			// Success/Error
+-			if ( isSuccess ) {
+-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+-			} else {
+-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+-			}
+-
+-			// Status-dependent callbacks
+-			jqXHR.statusCode( statusCode );
+-			statusCode = undefined;
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+-					[ jqXHR, s, isSuccess ? success : error ] );
+-			}
+-
+-			// Complete
+-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+-				// Handle the global AJAX counter
+-				if ( !( --jQuery.active ) ) {
+-					jQuery.event.trigger("ajaxStop");
+-				}
+-			}
+-		}
+-
+-		return jqXHR;
+-	},
+-
+-	getScript: function( url, callback ) {
+-		return jQuery.get( url, undefined, callback, "script" );
+-	},
+-
+-	getJSON: function( url, data, callback ) {
+-		return jQuery.get( url, data, callback, "json" );
+-	}
+-});
+-
+-/* Handles responses to an ajax request:
+- * - sets all responseXXX fields accordingly
+- * - finds the right dataType (mediates between content-type and expected dataType)
+- * - returns the corresponding response
+- */
+-function ajaxHandleResponses( s, jqXHR, responses ) {
+-	var firstDataType, ct, finalDataType, type,
+-		contents = s.contents,
+-		dataTypes = s.dataTypes,
+-		responseFields = s.responseFields;
+-
+-	// Fill responseXXX fields
+-	for ( type in responseFields ) {
+-		if ( type in responses ) {
+-			jqXHR[ responseFields[type] ] = responses[ type ];
+-		}
+-	}
+-
+-	// Remove auto dataType and get content-type in the process
+-	while( dataTypes[ 0 ] === "*" ) {
+-		dataTypes.shift();
+-		if ( ct === undefined ) {
+-			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+-		}
+-	}
+-
+-	// Check if we're dealing with a known content-type
+-	if ( ct ) {
+-		for ( type in contents ) {
+-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+-				dataTypes.unshift( type );
+-				break;
+-			}
+-		}
+-	}
+-
+-	// Check to see if we have a response for the expected dataType
+-	if ( dataTypes[ 0 ] in responses ) {
+-		finalDataType = dataTypes[ 0 ];
+-	} else {
+-		// Try convertible dataTypes
+-		for ( type in responses ) {
+-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+-				finalDataType = type;
+-				break;
+-			}
+-			if ( !firstDataType ) {
+-				firstDataType = type;
+-			}
+-		}
+-		// Or just use first one
+-		finalDataType = finalDataType || firstDataType;
+-	}
+-
+-	// If we found a dataType
+-	// We add the dataType to the list if needed
+-	// and return the corresponding response
+-	if ( finalDataType ) {
+-		if ( finalDataType !== dataTypes[ 0 ] ) {
+-			dataTypes.unshift( finalDataType );
+-		}
+-		return responses[ finalDataType ];
+-	}
+-}
+-
+-// Chain conversions given the request and the original response
+-function ajaxConvert( s, response ) {
+-	var conv2, current, conv, tmp,
+-		converters = {},
+-		i = 0,
+-		// Work with a copy of dataTypes in case we need to modify it for conversion
+-		dataTypes = s.dataTypes.slice(),
+-		prev = dataTypes[ 0 ];
+-
+-	// Apply the dataFilter if provided
+-	if ( s.dataFilter ) {
+-		response = s.dataFilter( response, s.dataType );
+-	}
+-
+-	// Create converters map with lowercased keys
+-	if ( dataTypes[ 1 ] ) {
+-		for ( conv in s.converters ) {
+-			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+-		}
+-	}
+-
+-	// Convert to each sequential dataType, tolerating list modification
+-	for ( ; (current = dataTypes[++i]); ) {
+-
+-		// There's only work to do if current dataType is non-auto
+-		if ( current !== "*" ) {
+-
+-			// Convert response if prev dataType is non-auto and differs from current
+-			if ( prev !== "*" && prev !== current ) {
+-
+-				// Seek a direct converter
+-				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+-
+-				// If none found, seek a pair
+-				if ( !conv ) {
+-					for ( conv2 in converters ) {
+-
+-						// If conv2 outputs current
+-						tmp = conv2.split(" ");
+-						if ( tmp[ 1 ] === current ) {
+-
+-							// If prev can be converted to accepted input
+-							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+-								converters[ "* " + tmp[ 0 ] ];
+-							if ( conv ) {
+-								// Condense equivalence converters
+-								if ( conv === true ) {
+-									conv = converters[ conv2 ];
+-
+-								// Otherwise, insert the intermediate dataType
+-								} else if ( converters[ conv2 ] !== true ) {
+-									current = tmp[ 0 ];
+-									dataTypes.splice( i--, 0, current );
+-								}
+-
+-								break;
+-							}
+-						}
+-					}
+-				}
+-
+-				// Apply converter (if not an equivalence)
+-				if ( conv !== true ) {
+-
+-					// Unless errors are allowed to bubble, catch and return them
+-					if ( conv && s["throws"] ) {
+-						response = conv( response );
+-					} else {
+-						try {
+-							response = conv( response );
+-						} catch ( e ) {
+-							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+-						}
+-					}
+-				}
+-			}
+-
+-			// Update prev for next iteration
+-			prev = current;
+-		}
+-	}
+-
+-	return { state: "success", data: response };
+-}
+-// Install script dataType
+-jQuery.ajaxSetup({
+-	accepts: {
+-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+-	},
+-	contents: {
+-		script: /(?:java|ecma)script/
+-	},
+-	converters: {
+-		"text script": function( text ) {
+-			jQuery.globalEval( text );
+-			return text;
+-		}
+-	}
+-});
+-
+-// Handle cache's special case and global
+-jQuery.ajaxPrefilter( "script", function( s ) {
+-	if ( s.cache === undefined ) {
+-		s.cache = false;
+-	}
+-	if ( s.crossDomain ) {
+-		s.type = "GET";
+-		s.global = false;
+-	}
+-});
+-
+-// Bind script tag hack transport
+-jQuery.ajaxTransport( "script", function(s) {
+-
+-	// This transport only deals with cross domain requests
+-	if ( s.crossDomain ) {
+-
+-		var script,
+-			head = document.head || jQuery("head")[0] || document.documentElement;
+-
+-		return {
+-
+-			send: function( _, callback ) {
+-
+-				script = document.createElement("script");
+-
+-				script.async = true;
+-
+-				if ( s.scriptCharset ) {
+-					script.charset = s.scriptCharset;
+-				}
+-
+-				script.src = s.url;
+-
+-				// Attach handlers for all browsers
+-				script.onload = script.onreadystatechange = function( _, isAbort ) {
+-
+-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+-
+-						// Handle memory leak in IE
+-						script.onload = script.onreadystatechange = null;
+-
+-						// Remove the script
+-						if ( script.parentNode ) {
+-							script.parentNode.removeChild( script );
+-						}
+-
+-						// Dereference the script
+-						script = null;
+-
+-						// Callback if not abort
+-						if ( !isAbort ) {
+-							callback( 200, "success" );
+-						}
+-					}
+-				};
+-
+-				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+-				// Use native DOM manipulation to avoid our domManip AJAX trickery
+-				head.insertBefore( script, head.firstChild );
+-			},
+-
+-			abort: function() {
+-				if ( script ) {
+-					script.onload( undefined, true );
+-				}
+-			}
+-		};
+-	}
+-});
+-var oldCallbacks = [],
+-	rjsonp = /(=)\?(?=&|$)|\?\?/;
+-
+-// Default jsonp settings
+-jQuery.ajaxSetup({
+-	jsonp: "callback",
+-	jsonpCallback: function() {
+-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+-		this[ callback ] = true;
+-		return callback;
+-	}
+-});
+-
+-// Detect, normalize options and install callbacks for jsonp requests
+-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+-
+-	var callbackName, overwritten, responseContainer,
+-		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+-			"url" :
+-			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+-		);
+-
+-	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+-	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+-
+-		// Get callback name, remembering preexisting value associated with it
+-		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+-			s.jsonpCallback() :
+-			s.jsonpCallback;
+-
+-		// Insert callback into url or form data
+-		if ( jsonProp ) {
+-			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+-		} else if ( s.jsonp !== false ) {
+-			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+-		}
+-
+-		// Use data converter to retrieve json after script execution
+-		s.converters["script json"] = function() {
+-			if ( !responseContainer ) {
+-				jQuery.error( callbackName + " was not called" );
+-			}
+-			return responseContainer[ 0 ];
+-		};
+-
+-		// force json dataType
+-		s.dataTypes[ 0 ] = "json";
+-
+-		// Install callback
+-		overwritten = window[ callbackName ];
+-		window[ callbackName ] = function() {
+-			responseContainer = arguments;
+-		};
+-
+-		// Clean-up function (fires after converters)
+-		jqXHR.always(function() {
+-			// Restore preexisting value
+-			window[ callbackName ] = overwritten;
+-
+-			// Save back as free
+-			if ( s[ callbackName ] ) {
+-				// make sure that re-using the options doesn't screw things around
+-				s.jsonpCallback = originalSettings.jsonpCallback;
+-
+-				// save the callback name for future use
+-				oldCallbacks.push( callbackName );
+-			}
+-
+-			// Call if it was a function and we have a response
+-			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+-				overwritten( responseContainer[ 0 ] );
+-			}
+-
+-			responseContainer = overwritten = undefined;
+-		});
+-
+-		// Delegate to script
+-		return "script";
+-	}
+-});
+-var xhrCallbacks, xhrSupported,
+-	xhrId = 0,
+-	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+-	xhrOnUnloadAbort = window.ActiveXObject && function() {
+-		// Abort all pending requests
+-		var key;
+-		for ( key in xhrCallbacks ) {
+-			xhrCallbacks[ key ]( undefined, true );
+-		}
+-	};
+-
+-// Functions to create xhrs
+-function createStandardXHR() {
+-	try {
+-		return new window.XMLHttpRequest();
+-	} catch( e ) {}
+-}
+-
+-function createActiveXHR() {
+-	try {
+-		return new window.ActiveXObject("Microsoft.XMLHTTP");
+-	} catch( e ) {}
+-}
+-
+-// Create the request object
+-// (This is still attached to ajaxSettings for backward compatibility)
+-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+-	/* Microsoft failed to properly
+-	 * implement the XMLHttpRequest in IE7 (can't request local files),
+-	 * so we use the ActiveXObject when it is available
+-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+-	 * we need a fallback.
+-	 */
+-	function() {
+-		return !this.isLocal && createStandardXHR() || createActiveXHR();
+-	} :
+-	// For all other browsers, use the standard XMLHttpRequest object
+-	createStandardXHR;
+-
+-// Determine support properties
+-xhrSupported = jQuery.ajaxSettings.xhr();
+-jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+-xhrSupported = jQuery.support.ajax = !!xhrSupported;
+-
+-// Create transport if the browser can provide an xhr
+-if ( xhrSupported ) {
+-
+-	jQuery.ajaxTransport(function( s ) {
+-		// Cross domain only allowed if supported through XMLHttpRequest
+-		if ( !s.crossDomain || jQuery.support.cors ) {
+-
+-			var callback;
+-
+-			return {
+-				send: function( headers, complete ) {
+-
+-					// Get a new xhr
+-					var handle, i,
+-						xhr = s.xhr();
+-
+-					// Open the socket
+-					// Passing null username, generates a login popup on Opera (#2865)
+-					if ( s.username ) {
+-						xhr.open( s.type, s.url, s.async, s.username, s.password );
+-					} else {
+-						xhr.open( s.type, s.url, s.async );
+-					}
+-
+-					// Apply custom fields if provided
+-					if ( s.xhrFields ) {
+-						for ( i in s.xhrFields ) {
+-							xhr[ i ] = s.xhrFields[ i ];
+-						}
+-					}
+-
+-					// Override mime type if needed
+-					if ( s.mimeType && xhr.overrideMimeType ) {
+-						xhr.overrideMimeType( s.mimeType );
+-					}
+-
+-					// X-Requested-With header
+-					// For cross-domain requests, seeing as conditions for a preflight are
+-					// akin to a jigsaw puzzle, we simply never set it to be sure.
+-					// (it can always be set on a per-request basis or even using ajaxSetup)
+-					// For same-domain requests, won't change header if already provided.
+-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+-						headers["X-Requested-With"] = "XMLHttpRequest";
+-					}
+-
+-					// Need an extra try/catch for cross domain requests in Firefox 3
+-					try {
+-						for ( i in headers ) {
+-							xhr.setRequestHeader( i, headers[ i ] );
+-						}
+-					} catch( err ) {}
+-
+-					// Do send the request
+-					// This may raise an exception which is actually
+-					// handled in jQuery.ajax (so no try/catch here)
+-					xhr.send( ( s.hasContent && s.data ) || null );
+-
+-					// Listener
+-					callback = function( _, isAbort ) {
+-						var status, responseHeaders, statusText, responses;
+-
+-						// Firefox throws exceptions when accessing properties
+-						// of an xhr when a network error occurred
+-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+-						try {
+-
+-							// Was never called and is aborted or complete
+-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+-
+-								// Only called once
+-								callback = undefined;
+-
+-								// Do not keep as active anymore
+-								if ( handle ) {
+-									xhr.onreadystatechange = jQuery.noop;
+-									if ( xhrOnUnloadAbort ) {
+-										delete xhrCallbacks[ handle ];
+-									}
+-								}
+-
+-								// If it's an abort
+-								if ( isAbort ) {
+-									// Abort it manually if needed
+-									if ( xhr.readyState !== 4 ) {
+-										xhr.abort();
+-									}
+-								} else {
+-									responses = {};
+-									status = xhr.status;
+-									responseHeaders = xhr.getAllResponseHeaders();
+-
+-									// When requesting binary data, IE6-9 will throw an exception
+-									// on any attempt to access responseText (#11426)
+-									if ( typeof xhr.responseText === "string" ) {
+-										responses.text = xhr.responseText;
+-									}
+-
+-									// Firefox throws an exception when accessing
+-									// statusText for faulty cross-domain requests
+-									try {
+-										statusText = xhr.statusText;
+-									} catch( e ) {
+-										// We normalize with Webkit giving an empty statusText
+-										statusText = "";
+-									}
+-
+-									// Filter status for non standard behaviors
+-
+-									// If the request is local and we have data: assume a success
+-									// (success with no data won't get notified, that's the best we
+-									// can do given current implementations)
+-									if ( !status && s.isLocal && !s.crossDomain ) {
+-										status = responses.text ? 200 : 404;
+-									// IE - #1450: sometimes returns 1223 when it should be 204
+-									} else if ( status === 1223 ) {
+-										status = 204;
+-									}
+-								}
+-							}
+-						} catch( firefoxAccessException ) {
+-							if ( !isAbort ) {
+-								complete( -1, firefoxAccessException );
+-							}
+-						}
+-
+-						// Call complete if needed
+-						if ( responses ) {
+-							complete( status, statusText, responses, responseHeaders );
+-						}
+-					};
+-
+-					if ( !s.async ) {
+-						// if we're in sync mode we fire the callback
+-						callback();
+-					} else if ( xhr.readyState === 4 ) {
+-						// (IE6 & IE7) if it's in cache and has been
+-						// retrieved directly we need to fire the callback
+-						setTimeout( callback );
+-					} else {
+-						handle = ++xhrId;
+-						if ( xhrOnUnloadAbort ) {
+-							// Create the active xhrs callbacks list if needed
+-							// and attach the unload handler
+-							if ( !xhrCallbacks ) {
+-								xhrCallbacks = {};
+-								jQuery( window ).unload( xhrOnUnloadAbort );
+-							}
+-							// Add to list of active xhrs callbacks
+-							xhrCallbacks[ handle ] = callback;
+-						}
+-						xhr.onreadystatechange = callback;
+-					}
+-				},
+-
+-				abort: function() {
+-					if ( callback ) {
+-						callback( undefined, true );
+-					}
+-				}
+-			};
+-		}
+-	});
+-}
+-var fxNow, timerId,
+-	rfxtypes = /^(?:toggle|show|hide)$/,
+-	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+-	rrun = /queueHooks$/,
+-	animationPrefilters = [ defaultPrefilter ],
+-	tweeners = {
+-		"*": [function( prop, value ) {
+-			var end, unit,
+-				tween = this.createTween( prop, value ),
+-				parts = rfxnum.exec( value ),
+-				target = tween.cur(),
+-				start = +target || 0,
+-				scale = 1,
+-				maxIterations = 20;
+-
+-			if ( parts ) {
+-				end = +parts[2];
+-				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+-
+-				// We need to compute starting value
+-				if ( unit !== "px" && start ) {
+-					// Iteratively approximate from a nonzero starting point
+-					// Prefer the current property, because this process will be trivial if it uses the same units
+-					// Fallback to end or a simple constant
+-					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+-
+-					do {
+-						// If previous iteration zeroed out, double until we get *something*
+-						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+-						scale = scale || ".5";
+-
+-						// Adjust and apply
+-						start = start / scale;
+-						jQuery.style( tween.elem, prop, start + unit );
+-
+-					// Update scale, tolerating zero or NaN from tween.cur()
+-					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+-					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+-				}
+-
+-				tween.unit = unit;
+-				tween.start = start;
+-				// If a +=/-= token was provided, we're doing a relative animation
+-				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+-			}
+-			return tween;
+-		}]
+-	};
+-
+-// Animations created synchronously will run synchronously
+-function createFxNow() {
+-	setTimeout(function() {
+-		fxNow = undefined;
+-	});
+-	return ( fxNow = jQuery.now() );
+-}
+-
+-function createTweens( animation, props ) {
+-	jQuery.each( props, function( prop, value ) {
+-		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+-			index = 0,
+-			length = collection.length;
+-		for ( ; index < length; index++ ) {
+-			if ( collection[ index ].call( animation, prop, value ) ) {
+-
+-				// we're done with this property
+-				return;
+-			}
+-		}
+-	});
+-}
+-
+-function Animation( elem, properties, options ) {
+-	var result,
+-		stopped,
+-		index = 0,
+-		length = animationPrefilters.length,
+-		deferred = jQuery.Deferred().always( function() {
+-			// don't match elem in the :animated selector
+-			delete tick.elem;
+-		}),
+-		tick = function() {
+-			if ( stopped ) {
+-				return false;
+-			}
+-			var currentTime = fxNow || createFxNow(),
+-				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+-				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+-				temp = remaining / animation.duration || 0,
+-				percent = 1 - temp,
+-				index = 0,
+-				length = animation.tweens.length;
+-
+-			for ( ; index < length ; index++ ) {
+-				animation.tweens[ index ].run( percent );
+-			}
+-
+-			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+-
+-			if ( percent < 1 && length ) {
+-				return remaining;
+-			} else {
+-				deferred.resolveWith( elem, [ animation ] );
+-				return false;
+-			}
+-		},
+-		animation = deferred.promise({
+-			elem: elem,
+-			props: jQuery.extend( {}, properties ),
+-			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+-			originalProperties: properties,
+-			originalOptions: options,
+-			startTime: fxNow || createFxNow(),
+-			duration: options.duration,
+-			tweens: [],
+-			createTween: function( prop, end ) {
+-				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+-						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+-				animation.tweens.push( tween );
+-				return tween;
+-			},
+-			stop: function( gotoEnd ) {
+-				var index = 0,
+-					// if we are going to the end, we want to run all the tweens
+-					// otherwise we skip this part
+-					length = gotoEnd ? animation.tweens.length : 0;
+-				if ( stopped ) {
+-					return this;
+-				}
+-				stopped = true;
+-				for ( ; index < length ; index++ ) {
+-					animation.tweens[ index ].run( 1 );
+-				}
+-
+-				// resolve when we played the last frame
+-				// otherwise, reject
+-				if ( gotoEnd ) {
+-					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+-				} else {
+-					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+-				}
+-				return this;
+-			}
+-		}),
+-		props = animation.props;
+-
+-	propFilter( props, animation.opts.specialEasing );
+-
+-	for ( ; index < length ; index++ ) {
+-		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+-		if ( result ) {
+-			return result;
+-		}
+-	}
+-
+-	createTweens( animation, props );
+-
+-	if ( jQuery.isFunction( animation.opts.start ) ) {
+-		animation.opts.start.call( elem, animation );
+-	}
+-
+-	jQuery.fx.timer(
+-		jQuery.extend( tick, {
+-			elem: elem,
+-			anim: animation,
+-			queue: animation.opts.queue
+-		})
+-	);
+-
+-	// attach callbacks from options
+-	return animation.progress( animation.opts.progress )
+-		.done( animation.opts.done, animation.opts.complete )
+-		.fail( animation.opts.fail )
+-		.always( animation.opts.always );
+-}
+-
+-function propFilter( props, specialEasing ) {
+-	var value, name, index, easing, hooks;
+-
+-	// camelCase, specialEasing and expand cssHook pass
+-	for ( index in props ) {
+-		name = jQuery.camelCase( index );
+-		easing = specialEasing[ name ];
+-		value = props[ index ];
+-		if ( jQuery.isArray( value ) ) {
+-			easing = value[ 1 ];
+-			value = props[ index ] = value[ 0 ];
+-		}
+-
+-		if ( index !== name ) {
+-			props[ name ] = value;
+-			delete props[ index ];
+-		}
+-
+-		hooks = jQuery.cssHooks[ name ];
+-		if ( hooks && "expand" in hooks ) {
+-			value = hooks.expand( value );
+-			delete props[ name ];
+-
+-			// not quite $.extend, this wont overwrite keys already present.
+-			// also - reusing 'index' from above because we have the correct "name"
+-			for ( index in value ) {
+-				if ( !( index in props ) ) {
+-					props[ index ] = value[ index ];
+-					specialEasing[ index ] = easing;
+-				}
+-			}
+-		} else {
+-			specialEasing[ name ] = easing;
+-		}
+-	}
+-}
+-
+-jQuery.Animation = jQuery.extend( Animation, {
+-
+-	tweener: function( props, callback ) {
+-		if ( jQuery.isFunction( props ) ) {
+-			callback = props;
+-			props = [ "*" ];
+-		} else {
+-			props = props.split(" ");
+-		}
+-
+-		var prop,
+-			index = 0,
+-			length = props.length;
+-
+-		for ( ; index < length ; index++ ) {
+-			prop = props[ index ];
+-			tweeners[ prop ] = tweeners[ prop ] || [];
+-			tweeners[ prop ].unshift( callback );
+-		}
+-	},
+-
+-	prefilter: function( callback, prepend ) {
+-		if ( prepend ) {
+-			animationPrefilters.unshift( callback );
+-		} else {
+-			animationPrefilters.push( callback );
+-		}
+-	}
+-});
+-
+-function defaultPrefilter( elem, props, opts ) {
+-	/*jshint validthis:true */
+-	var prop, index, length,
+-		value, dataShow, toggle,
+-		tween, hooks, oldfire,
+-		anim = this,
+-		style = elem.style,
+-		orig = {},
+-		handled = [],
+-		hidden = elem.nodeType && isHidden( elem );
+-
+-	// handle queue: false promises
+-	if ( !opts.queue ) {
+-		hooks = jQuery._queueHooks( elem, "fx" );
+-		if ( hooks.unqueued == null ) {
+-			hooks.unqueued = 0;
+-			oldfire = hooks.empty.fire;
+-			hooks.empty.fire = function() {
+-				if ( !hooks.unqueued ) {
+-					oldfire();
+-				}
+-			};
+-		}
+-		hooks.unqueued++;
+-
+-		anim.always(function() {
+-			// doing this makes sure that the complete handler will be called
+-			// before this completes
+-			anim.always(function() {
+-				hooks.unqueued--;
+-				if ( !jQuery.queue( elem, "fx" ).length ) {
+-					hooks.empty.fire();
+-				}
+-			});
+-		});
+-	}
+-
+-	// height/width overflow pass
+-	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+-		// Make sure that nothing sneaks out
+-		// Record all 3 overflow attributes because IE does not
+-		// change the overflow attribute when overflowX and
+-		// overflowY are set to the same value
+-		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+-
+-		// Set display property to inline-block for height/width
+-		// animations on inline elements that are having width/height animated
+-		if ( jQuery.css( elem, "display" ) === "inline" &&
+-				jQuery.css( elem, "float" ) === "none" ) {
+-
+-			// inline-level elements accept inline-block;
+-			// block-level elements need to be inline with layout
+-			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+-				style.display = "inline-block";
+-
+-			} else {
+-				style.zoom = 1;
+-			}
+-		}
+-	}
+-
+-	if ( opts.overflow ) {
+-		style.overflow = "hidden";
+-		if ( !jQuery.support.shrinkWrapBlocks ) {
+-			anim.always(function() {
+-				style.overflow = opts.overflow[ 0 ];
+-				style.overflowX = opts.overflow[ 1 ];
+-				style.overflowY = opts.overflow[ 2 ];
+-			});
+-		}
+-	}
+-
+-
+-	// show/hide pass
+-	for ( index in props ) {
+-		value = props[ index ];
+-		if ( rfxtypes.exec( value ) ) {
+-			delete props[ index ];
+-			toggle = toggle || value === "toggle";
+-			if ( value === ( hidden ? "hide" : "show" ) ) {
+-				continue;
+-			}
+-			handled.push( index );
+-		}
+-	}
+-
+-	length = handled.length;
+-	if ( length ) {
+-		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+-		if ( "hidden" in dataShow ) {
+-			hidden = dataShow.hidden;
+-		}
+-
+-		// store state if its toggle - enables .stop().toggle() to "reverse"
+-		if ( toggle ) {
+-			dataShow.hidden = !hidden;
+-		}
+-		if ( hidden ) {
+-			jQuery( elem ).show();
+-		} else {
+-			anim.done(function() {
+-				jQuery( elem ).hide();
+-			});
+-		}
+-		anim.done(function() {
+-			var prop;
+-			jQuery._removeData( elem, "fxshow" );
+-			for ( prop in orig ) {
+-				jQuery.style( elem, prop, orig[ prop ] );
+-			}
+-		});
+-		for ( index = 0 ; index < length ; index++ ) {
+-			prop = handled[ index ];
+-			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+-			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+-
+-			if ( !( prop in dataShow ) ) {
+-				dataShow[ prop ] = tween.start;
+-				if ( hidden ) {
+-					tween.end = tween.start;
+-					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+-				}
+-			}
+-		}
+-	}
+-}
+-
+-function Tween( elem, options, prop, end, easing ) {
+-	return new Tween.prototype.init( elem, options, prop, end, easing );
+-}
+-jQuery.Tween = Tween;
+-
+-Tween.prototype = {
+-	constructor: Tween,
+-	init: function( elem, options, prop, end, easing, unit ) {
+-		this.elem = elem;
+-		this.prop = prop;
+-		this.easing = easing || "swing";
+-		this.options = options;
+-		this.start = this.now = this.cur();
+-		this.end = end;
+-		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+-	},
+-	cur: function() {
+-		var hooks = Tween.propHooks[ this.prop ];
+-
+-		return hooks && hooks.get ?
+-			hooks.get( this ) :
+-			Tween.propHooks._default.get( this );
+-	},
+-	run: function( percent ) {
+-		var eased,
+-			hooks = Tween.propHooks[ this.prop ];
+-
+-		if ( this.options.duration ) {
+-			this.pos = eased = jQuery.easing[ this.easing ](
+-				percent, this.options.duration * percent, 0, 1, this.options.duration
+-			);
+-		} else {
+-			this.pos = eased = percent;
+-		}
+-		this.now = ( this.end - this.start ) * eased + this.start;
+-
+-		if ( this.options.step ) {
+-			this.options.step.call( this.elem, this.now, this );
+-		}
+-
+-		if ( hooks && hooks.set ) {
+-			hooks.set( this );
+-		} else {
+-			Tween.propHooks._default.set( this );
+-		}
+-		return this;
+-	}
+-};
+-
+-Tween.prototype.init.prototype = Tween.prototype;
+-
+-Tween.propHooks = {
+-	_default: {
+-		get: function( tween ) {
+-			var result;
+-
+-			if ( tween.elem[ tween.prop ] != null &&
+-				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+-				return tween.elem[ tween.prop ];
+-			}
+-
+-			// passing an empty string as a 3rd parameter to .css will automatically
+-			// attempt a parseFloat and fallback to a string if the parse fails
+-			// so, simple values such as "10px" are parsed to Float.
+-			// complex values such as "rotate(1rad)" are returned as is.
+-			result = jQuery.css( tween.elem, tween.prop, "" );
+-			// Empty strings, null, undefined and "auto" are converted to 0.
+-			return !result || result === "auto" ? 0 : result;
+-		},
+-		set: function( tween ) {
+-			// use step hook for back compat - use cssHook if its there - use .style if its
+-			// available and use plain properties where available
+-			if ( jQuery.fx.step[ tween.prop ] ) {
+-				jQuery.fx.step[ tween.prop ]( tween );
+-			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+-				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+-			} else {
+-				tween.elem[ tween.prop ] = tween.now;
+-			}
+-		}
+-	}
+-};
+-
+-// Remove in 2.0 - this supports IE8's panic based approach
+-// to setting things on disconnected nodes
+-
+-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+-	set: function( tween ) {
+-		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+-			tween.elem[ tween.prop ] = tween.now;
+-		}
+-	}
+-};
+-
+-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+-	var cssFn = jQuery.fn[ name ];
+-	jQuery.fn[ name ] = function( speed, easing, callback ) {
+-		return speed == null || typeof speed === "boolean" ?
+-			cssFn.apply( this, arguments ) :
+-			this.animate( genFx( name, true ), speed, easing, callback );
+-	};
+-});
+-
+-jQuery.fn.extend({
+-	fadeTo: function( speed, to, easing, callback ) {
+-
+-		// show any hidden elements after setting opacity to 0
+-		return this.filter( isHidden ).css( "opacity", 0 ).show()
+-
+-			// animate to the value specified
+-			.end().animate({ opacity: to }, speed, easing, callback );
+-	},
+-	animate: function( prop, speed, easing, callback ) {
+-		var empty = jQuery.isEmptyObject( prop ),
+-			optall = jQuery.speed( speed, easing, callback ),
+-			doAnimation = function() {
+-				// Operate on a copy of prop so per-property easing won't be lost
+-				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+-				doAnimation.finish = function() {
+-					anim.stop( true );
+-				};
+-				// Empty animations, or finishing resolves immediately
+-				if ( empty || jQuery._data( this, "finish" ) ) {
+-					anim.stop( true );
+-				}
+-			};
+-			doAnimation.finish = doAnimation;
+-
+-		return empty || optall.queue === false ?
+-			this.each( doAnimation ) :
+-			this.queue( optall.queue, doAnimation );
+-	},
+-	stop: function( type, clearQueue, gotoEnd ) {
+-		var stopQueue = function( hooks ) {
+-			var stop = hooks.stop;
+-			delete hooks.stop;
+-			stop( gotoEnd );
+-		};
+-
+-		if ( typeof type !== "string" ) {
+-			gotoEnd = clearQueue;
+-			clearQueue = type;
+-			type = undefined;
+-		}
+-		if ( clearQueue && type !== false ) {
+-			this.queue( type || "fx", [] );
+-		}
+-
+-		return this.each(function() {
+-			var dequeue = true,
+-				index = type != null && type + "queueHooks",
+-				timers = jQuery.timers,
+-				data = jQuery._data( this );
+-
+-			if ( index ) {
+-				if ( data[ index ] && data[ index ].stop ) {
+-					stopQueue( data[ index ] );
+-				}
+-			} else {
+-				for ( index in data ) {
+-					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+-						stopQueue( data[ index ] );
+-					}
+-				}
+-			}
+-
+-			for ( index = timers.length; index--; ) {
+-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+-					timers[ index ].anim.stop( gotoEnd );
+-					dequeue = false;
+-					timers.splice( index, 1 );
+-				}
+-			}
+-
+-			// start the next in the queue if the last step wasn't forced
+-			// timers currently will call their complete callbacks, which will dequeue
+-			// but only if they were gotoEnd
+-			if ( dequeue || !gotoEnd ) {
+-				jQuery.dequeue( this, type );
+-			}
+-		});
+-	},
+-	finish: function( type ) {
+-		if ( type !== false ) {
+-			type = type || "fx";
+-		}
+-		return this.each(function() {
+-			var index,
+-				data = jQuery._data( this ),
+-				queue = data[ type + "queue" ],
+-				hooks = data[ type + "queueHooks" ],
+-				timers = jQuery.timers,
+-				length = queue ? queue.length : 0;
+-
+-			// enable finishing flag on private data
+-			data.finish = true;
+-
+-			// empty the queue first
+-			jQuery.queue( this, type, [] );
+-
+-			if ( hooks && hooks.cur && hooks.cur.finish ) {
+-				hooks.cur.finish.call( this );
+-			}
+-
+-			// look for any active animations, and finish them
+-			for ( index = timers.length; index--; ) {
+-				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+-					timers[ index ].anim.stop( true );
+-					timers.splice( index, 1 );
+-				}
+-			}
+-
+-			// look for any animations in the old queue and finish them
+-			for ( index = 0; index < length; index++ ) {
+-				if ( queue[ index ] && queue[ index ].finish ) {
+-					queue[ index ].finish.call( this );
+-				}
+-			}
+-
+-			// turn off finishing flag
+-			delete data.finish;
+-		});
+-	}
+-});
+-
+-// Generate parameters to create a standard animation
+-function genFx( type, includeWidth ) {
+-	var which,
+-		attrs = { height: type },
+-		i = 0;
+-
+-	// if we include width, step value is 1 to do all cssExpand values,
+-	// if we don't include width, step value is 2 to skip over Left and Right
+-	includeWidth = includeWidth? 1 : 0;
+-	for( ; i < 4 ; i += 2 - includeWidth ) {
+-		which = cssExpand[ i ];
+-		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+-	}
+-
+-	if ( includeWidth ) {
+-		attrs.opacity = attrs.width = type;
+-	}
+-
+-	return attrs;
+-}
+-
+-// Generate shortcuts for custom animations
+-jQuery.each({
+-	slideDown: genFx("show"),
+-	slideUp: genFx("hide"),
+-	slideToggle: genFx("toggle"),
+-	fadeIn: { opacity: "show" },
+-	fadeOut: { opacity: "hide" },
+-	fadeToggle: { opacity: "toggle" }
+-}, function( name, props ) {
+-	jQuery.fn[ name ] = function( speed, easing, callback ) {
+-		return this.animate( props, speed, easing, callback );
+-	};
+-});
+-
+-jQuery.speed = function( speed, easing, fn ) {
+-	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+-		complete: fn || !fn && easing ||
+-			jQuery.isFunction( speed ) && speed,
+-		duration: speed,
+-		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+-	};
+-
+-	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+-		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+-
+-	// normalize opt.queue - true/undefined/null -> "fx"
+-	if ( opt.queue == null || opt.queue === true ) {
+-		opt.queue = "fx";
+-	}
+-
+-	// Queueing
+-	opt.old = opt.complete;
+-
+-	opt.complete = function() {
+-		if ( jQuery.isFunction( opt.old ) ) {
+-			opt.old.call( this );
+-		}
+-
+-		if ( opt.queue ) {
+-			jQuery.dequeue( this, opt.queue );
+-		}
+-	};
+-
+-	return opt;
+-};
+-
+-jQuery.easing = {
+-	linear: function( p ) {
+-		return p;
+-	},
+-	swing: function( p ) {
+-		return 0.5 - Math.cos( p*Math.PI ) / 2;
+-	}
+-};
+-
+-jQuery.timers = [];
+-jQuery.fx = Tween.prototype.init;
+-jQuery.fx.tick = function() {
+-	var timer,
+-		timers = jQuery.timers,
+-		i = 0;
+-
+-	fxNow = jQuery.now();
+-
+-	for ( ; i < timers.length; i++ ) {
+-		timer = timers[ i ];
+-		// Checks the timer has not already been removed
+-		if ( !timer() && timers[ i ] === timer ) {
+-			timers.splice( i--, 1 );
+-		}
+-	}
+-
+-	if ( !timers.length ) {
+-		jQuery.fx.stop();
+-	}
+-	fxNow = undefined;
+-};
+-
+-jQuery.fx.timer = function( timer ) {
+-	if ( timer() && jQuery.timers.push( timer ) ) {
+-		jQuery.fx.start();
+-	}
+-};
+-
+-jQuery.fx.interval = 13;
+-
+-jQuery.fx.start = function() {
+-	if ( !timerId ) {
+-		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+-	}
+-};
+-
+-jQuery.fx.stop = function() {
+-	clearInterval( timerId );
+-	timerId = null;
+-};
+-
+-jQuery.fx.speeds = {
+-	slow: 600,
+-	fast: 200,
+-	// Default speed
+-	_default: 400
+-};
+-
+-// Back Compat <1.8 extension point
+-jQuery.fx.step = {};
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.animated = function( elem ) {
+-		return jQuery.grep(jQuery.timers, function( fn ) {
+-			return elem === fn.elem;
+-		}).length;
+-	};
+-}
+-jQuery.fn.offset = function( options ) {
+-	if ( arguments.length ) {
+-		return options === undefined ?
+-			this :
+-			this.each(function( i ) {
+-				jQuery.offset.setOffset( this, options, i );
+-			});
+-	}
+-
+-	var docElem, win,
+-		box = { top: 0, left: 0 },
+-		elem = this[ 0 ],
+-		doc = elem && elem.ownerDocument;
+-
+-	if ( !doc ) {
+-		return;
+-	}
+-
+-	docElem = doc.documentElement;
+-
+-	// Make sure it's not a disconnected DOM node
+-	if ( !jQuery.contains( docElem, elem ) ) {
+-		return box;
+-	}
+-
+-	// If we don't have gBCR, just use 0,0 rather than error
+-	// BlackBerry 5, iOS 3 (original iPhone)
+-	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+-		box = elem.getBoundingClientRect();
+-	}
+-	win = getWindow( doc );
+-	return {
+-		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+-		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+-	};
+-};
+-
+-jQuery.offset = {
+-
+-	setOffset: function( elem, options, i ) {
+-		var position = jQuery.css( elem, "position" );
+-
+-		// set position first, in-case top/left are set even on static elem
+-		if ( position === "static" ) {
+-			elem.style.position = "relative";
+-		}
+-
+-		var curElem = jQuery( elem ),
+-			curOffset = curElem.offset(),
+-			curCSSTop = jQuery.css( elem, "top" ),
+-			curCSSLeft = jQuery.css( elem, "left" ),
+-			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+-			props = {}, curPosition = {}, curTop, curLeft;
+-
+-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+-		if ( calculatePosition ) {
+-			curPosition = curElem.position();
+-			curTop = curPosition.top;
+-			curLeft = curPosition.left;
+-		} else {
+-			curTop = parseFloat( curCSSTop ) || 0;
+-			curLeft = parseFloat( curCSSLeft ) || 0;
+-		}
+-
+-		if ( jQuery.isFunction( options ) ) {
+-			options = options.call( elem, i, curOffset );
+-		}
+-
+-		if ( options.top != null ) {
+-			props.top = ( options.top - curOffset.top ) + curTop;
+-		}
+-		if ( options.left != null ) {
+-			props.left = ( options.left - curOffset.left ) + curLeft;
+-		}
+-
+-		if ( "using" in options ) {
+-			options.using.call( elem, props );
+-		} else {
+-			curElem.css( props );
+-		}
+-	}
+-};
+-
+-
+-jQuery.fn.extend({
+-
+-	position: function() {
+-		if ( !this[ 0 ] ) {
+-			return;
+-		}
+-
+-		var offsetParent, offset,
+-			parentOffset = { top: 0, left: 0 },
+-			elem = this[ 0 ];
+-
+-		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+-		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+-			// we assume that getBoundingClientRect is available when computed position is fixed
+-			offset = elem.getBoundingClientRect();
+-		} else {
+-			// Get *real* offsetParent
+-			offsetParent = this.offsetParent();
+-
+-			// Get correct offsets
+-			offset = this.offset();
+-			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+-				parentOffset = offsetParent.offset();
+-			}
+-
+-			// Add offsetParent borders
+-			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+-			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+-		}
+-
+-		// Subtract parent offsets and element margins
+-		// note: when an element has margin: auto the offsetLeft and marginLeft
+-		// are the same in Safari causing offset.left to incorrectly be 0
+-		return {
+-			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+-			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+-		};
+-	},
+-
+-	offsetParent: function() {
+-		return this.map(function() {
+-			var offsetParent = this.offsetParent || document.documentElement;
+-			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+-				offsetParent = offsetParent.offsetParent;
+-			}
+-			return offsetParent || document.documentElement;
+-		});
+-	}
+-});
+-
+-
+-// Create scrollLeft and scrollTop methods
+-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+-	var top = /Y/.test( prop );
+-
+-	jQuery.fn[ method ] = function( val ) {
+-		return jQuery.access( this, function( elem, method, val ) {
+-			var win = getWindow( elem );
+-
+-			if ( val === undefined ) {
+-				return win ? (prop in win) ? win[ prop ] :
+-					win.document.documentElement[ method ] :
+-					elem[ method ];
+-			}
+-
+-			if ( win ) {
+-				win.scrollTo(
+-					!top ? val : jQuery( win ).scrollLeft(),
+-					top ? val : jQuery( win ).scrollTop()
+-				);
+-
+-			} else {
+-				elem[ method ] = val;
+-			}
+-		}, method, val, arguments.length, null );
+-	};
+-});
+-
+-function getWindow( elem ) {
+-	return jQuery.isWindow( elem ) ?
+-		elem :
+-		elem.nodeType === 9 ?
+-			elem.defaultView || elem.parentWindow :
+-			false;
+-}
+-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+-	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+-		// margin is only for outerHeight, outerWidth
+-		jQuery.fn[ funcName ] = function( margin, value ) {
+-			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+-				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+-
+-			return jQuery.access( this, function( elem, type, value ) {
+-				var doc;
+-
+-				if ( jQuery.isWindow( elem ) ) {
+-					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+-					// isn't a whole lot we can do. See pull request at this URL for discussion:
+-					// https://github.com/jquery/jquery/pull/764
+-					return elem.document.documentElement[ "client" + name ];
+-				}
+-
+-				// Get document width or height
+-				if ( elem.nodeType === 9 ) {
+-					doc = elem.documentElement;
+-
+-					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+-					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+-					return Math.max(
+-						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+-						elem.body[ "offset" + name ], doc[ "offset" + name ],
+-						doc[ "client" + name ]
+-					);
+-				}
+-
+-				return value === undefined ?
+-					// Get width or height on the element, requesting but not forcing parseFloat
+-					jQuery.css( elem, type, extra ) :
+-
+-					// Set width or height on the element
+-					jQuery.style( elem, type, value, extra );
+-			}, type, chainable ? margin : undefined, chainable, null );
+-		};
+-	});
+-});
+-// Limit scope pollution from any deprecated API
+-// (function() {
+-
+-// })();
+-// Expose jQuery to the global object
+-window.jQuery = window.$ = jQuery;
+-
+-// Expose jQuery as an AMD module, but only for AMD loaders that
+-// understand the issues with loading multiple versions of jQuery
+-// in a page that all might call define(). The loader will indicate
+-// they have special allowances for multiple jQuery versions by
+-// specifying define.amd.jQuery = true. Register as a named module,
+-// since jQuery can be concatenated with other files that may use define,
+-// but not use a proper concatenation script that understands anonymous
+-// AMD modules. A named AMD is safest and most robust way to register.
+-// Lowercase jquery is used because AMD module names are derived from
+-// file names, and jQuery is normally delivered in a lowercase file name.
+-// Do this after creating the global so that if an AMD module wants to call
+-// noConflict to hide this version of jQuery, it will work.
+-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+-	define( "jquery", [], function () { return jQuery; } );
+-}
+-
+-})( window );
+Index: ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.min.js	(revision 15488)
+@@ -1,7 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td>&#160;</td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);
+-return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html("&#160;"),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.js	(revision 15488)
+@@ -1,14971 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	runiqueId = /^ui-id-\d+$/;
+-
+-// $.ui might exist from components with no dependencies, e.g., $.ui.position
+-$.ui = $.ui || {};
+-
+-$.extend( $.ui, {
+-	version: "1.10.3",
+-
+-	keyCode: {
+-		BACKSPACE: 8,
+-		COMMA: 188,
+-		DELETE: 46,
+-		DOWN: 40,
+-		END: 35,
+-		ENTER: 13,
+-		ESCAPE: 27,
+-		HOME: 36,
+-		LEFT: 37,
+-		NUMPAD_ADD: 107,
+-		NUMPAD_DECIMAL: 110,
+-		NUMPAD_DIVIDE: 111,
+-		NUMPAD_ENTER: 108,
+-		NUMPAD_MULTIPLY: 106,
+-		NUMPAD_SUBTRACT: 109,
+-		PAGE_DOWN: 34,
+-		PAGE_UP: 33,
+-		PERIOD: 190,
+-		RIGHT: 39,
+-		SPACE: 32,
+-		TAB: 9,
+-		UP: 38
+-	}
+-});
+-
+-// plugins
+-$.fn.extend({
+-	focus: (function( orig ) {
+-		return function( delay, fn ) {
+-			return typeof delay === "number" ?
+-				this.each(function() {
+-					var elem = this;
+-					setTimeout(function() {
+-						$( elem ).focus();
+-						if ( fn ) {
+-							fn.call( elem );
+-						}
+-					}, delay );
+-				}) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.focus ),
+-
+-	scrollParent: function() {
+-		var scrollParent;
+-		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		} else {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		}
+-
+-		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+-	},
+-
+-	zIndex: function( zIndex ) {
+-		if ( zIndex !== undefined ) {
+-			return this.css( "zIndex", zIndex );
+-		}
+-
+-		if ( this.length ) {
+-			var elem = $( this[ 0 ] ), position, value;
+-			while ( elem.length && elem[ 0 ] !== document ) {
+-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+-				// This makes behavior of this function consistent across browsers
+-				// WebKit always returns auto if the element is positioned
+-				position = elem.css( "position" );
+-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+-					// IE returns 0 when zIndex is not specified
+-					// other browsers return a string
+-					// we ignore the case of nested elements with an explicit value of 0
+-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+-					value = parseInt( elem.css( "zIndex" ), 10 );
+-					if ( !isNaN( value ) && value !== 0 ) {
+-						return value;
+-					}
+-				}
+-				elem = elem.parent();
+-			}
+-		}
+-
+-		return 0;
+-	},
+-
+-	uniqueId: function() {
+-		return this.each(function() {
+-			if ( !this.id ) {
+-				this.id = "ui-id-" + (++uuid);
+-			}
+-		});
+-	},
+-
+-	removeUniqueId: function() {
+-		return this.each(function() {
+-			if ( runiqueId.test( this.id ) ) {
+-				$( this ).removeAttr( "id" );
+-			}
+-		});
+-	}
+-});
+-
+-// selectors
+-function focusable( element, isTabIndexNotNaN ) {
+-	var map, mapName, img,
+-		nodeName = element.nodeName.toLowerCase();
+-	if ( "area" === nodeName ) {
+-		map = element.parentNode;
+-		mapName = map.name;
+-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+-			return false;
+-		}
+-		img = $( "img[usemap=#" + mapName + "]" )[0];
+-		return !!img && visible( img );
+-	}
+-	return ( /input|select|textarea|button|object/.test( nodeName ) ?
+-		!element.disabled :
+-		"a" === nodeName ?
+-			element.href || isTabIndexNotNaN :
+-			isTabIndexNotNaN) &&
+-		// the element and all of its ancestors must be visible
+-		visible( element );
+-}
+-
+-function visible( element ) {
+-	return $.expr.filters.visible( element ) &&
+-		!$( element ).parents().addBack().filter(function() {
+-			return $.css( this, "visibility" ) === "hidden";
+-		}).length;
+-}
+-
+-$.extend( $.expr[ ":" ], {
+-	data: $.expr.createPseudo ?
+-		$.expr.createPseudo(function( dataName ) {
+-			return function( elem ) {
+-				return !!$.data( elem, dataName );
+-			};
+-		}) :
+-		// support: jQuery <1.8
+-		function( elem, i, match ) {
+-			return !!$.data( elem, match[ 3 ] );
+-		},
+-
+-	focusable: function( element ) {
+-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+-	},
+-
+-	tabbable: function( element ) {
+-		var tabIndex = $.attr( element, "tabindex" ),
+-			isTabIndexNaN = isNaN( tabIndex );
+-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+-	}
+-});
+-
+-// support: jQuery <1.8
+-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+-	$.each( [ "Width", "Height" ], function( i, name ) {
+-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+-			type = name.toLowerCase(),
+-			orig = {
+-				innerWidth: $.fn.innerWidth,
+-				innerHeight: $.fn.innerHeight,
+-				outerWidth: $.fn.outerWidth,
+-				outerHeight: $.fn.outerHeight
+-			};
+-
+-		function reduce( elem, size, border, margin ) {
+-			$.each( side, function() {
+-				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+-				if ( border ) {
+-					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+-				}
+-				if ( margin ) {
+-					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+-				}
+-			});
+-			return size;
+-		}
+-
+-		$.fn[ "inner" + name ] = function( size ) {
+-			if ( size === undefined ) {
+-				return orig[ "inner" + name ].call( this );
+-			}
+-
+-			return this.each(function() {
+-				$( this ).css( type, reduce( this, size ) + "px" );
+-			});
+-		};
+-
+-		$.fn[ "outer" + name] = function( size, margin ) {
+-			if ( typeof size !== "number" ) {
+-				return orig[ "outer" + name ].call( this, size );
+-			}
+-
+-			return this.each(function() {
+-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+-			});
+-		};
+-	});
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+-	$.fn.removeData = (function( removeData ) {
+-		return function( key ) {
+-			if ( arguments.length ) {
+-				return removeData.call( this, $.camelCase( key ) );
+-			} else {
+-				return removeData.call( this );
+-			}
+-		};
+-	})( $.fn.removeData );
+-}
+-
+-
+-
+-
+-
+-// deprecated
+-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+-
+-$.support.selectstart = "onselectstart" in document.createElement( "div" );
+-$.fn.extend({
+-	disableSelection: function() {
+-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+-			".ui-disableSelection", function( event ) {
+-				event.preventDefault();
+-			});
+-	},
+-
+-	enableSelection: function() {
+-		return this.unbind( ".ui-disableSelection" );
+-	}
+-});
+-
+-$.extend( $.ui, {
+-	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+-	plugin: {
+-		add: function( module, option, set ) {
+-			var i,
+-				proto = $.ui[ module ].prototype;
+-			for ( i in set ) {
+-				proto.plugins[ i ] = proto.plugins[ i ] || [];
+-				proto.plugins[ i ].push( [ option, set[ i ] ] );
+-			}
+-		},
+-		call: function( instance, name, args ) {
+-			var i,
+-				set = instance.plugins[ name ];
+-			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
+-				return;
+-			}
+-
+-			for ( i = 0; i < set.length; i++ ) {
+-				if ( instance.options[ set[ i ][ 0 ] ] ) {
+-					set[ i ][ 1 ].apply( instance.element, args );
+-				}
+-			}
+-		}
+-	},
+-
+-	// only used by resizable
+-	hasScroll: function( el, a ) {
+-
+-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+-		if ( $( el ).css( "overflow" ) === "hidden") {
+-			return false;
+-		}
+-
+-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+-			has = false;
+-
+-		if ( el[ scroll ] > 0 ) {
+-			return true;
+-		}
+-
+-		// TODO: determine which cases actually cause this to happen
+-		// if the element doesn't have the scroll set, see if it's possible to
+-		// set the scroll
+-		el[ scroll ] = 1;
+-		has = ( el[ scroll ] > 0 );
+-		el[ scroll ] = 0;
+-		return has;
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	slice = Array.prototype.slice,
+-	_cleanData = $.cleanData;
+-$.cleanData = function( elems ) {
+-	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-		try {
+-			$( elem ).triggerHandler( "remove" );
+-		// http://bugs.jquery.com/ticket/8235
+-		} catch( e ) {}
+-	}
+-	_cleanData( elems );
+-};
+-
+-$.widget = function( name, base, prototype ) {
+-	var fullName, existingConstructor, constructor, basePrototype,
+-		// proxiedPrototype allows the provided prototype to remain unmodified
+-		// so that it can be used as a mixin for multiple widgets (#8876)
+-		proxiedPrototype = {},
+-		namespace = name.split( "." )[ 0 ];
+-
+-	name = name.split( "." )[ 1 ];
+-	fullName = namespace + "-" + name;
+-
+-	if ( !prototype ) {
+-		prototype = base;
+-		base = $.Widget;
+-	}
+-
+-	// create selector for plugin
+-	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+-		return !!$.data( elem, fullName );
+-	};
+-
+-	$[ namespace ] = $[ namespace ] || {};
+-	existingConstructor = $[ namespace ][ name ];
+-	constructor = $[ namespace ][ name ] = function( options, element ) {
+-		// allow instantiation without "new" keyword
+-		if ( !this._createWidget ) {
+-			return new constructor( options, element );
+-		}
+-
+-		// allow instantiation without initializing for simple inheritance
+-		// must use "new" keyword (the code above always passes args)
+-		if ( arguments.length ) {
+-			this._createWidget( options, element );
+-		}
+-	};
+-	// extend with the existing constructor to carry over any static properties
+-	$.extend( constructor, existingConstructor, {
+-		version: prototype.version,
+-		// copy the object used to create the prototype in case we need to
+-		// redefine the widget later
+-		_proto: $.extend( {}, prototype ),
+-		// track widgets that inherit from this widget in case this widget is
+-		// redefined after a widget inherits from it
+-		_childConstructors: []
+-	});
+-
+-	basePrototype = new base();
+-	// we need to make the options hash a property directly on the new instance
+-	// otherwise we'll modify the options hash on the prototype that we're
+-	// inheriting from
+-	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+-	$.each( prototype, function( prop, value ) {
+-		if ( !$.isFunction( value ) ) {
+-			proxiedPrototype[ prop ] = value;
+-			return;
+-		}
+-		proxiedPrototype[ prop ] = (function() {
+-			var _super = function() {
+-					return base.prototype[ prop ].apply( this, arguments );
+-				},
+-				_superApply = function( args ) {
+-					return base.prototype[ prop ].apply( this, args );
+-				};
+-			return function() {
+-				var __super = this._super,
+-					__superApply = this._superApply,
+-					returnValue;
+-
+-				this._super = _super;
+-				this._superApply = _superApply;
+-
+-				returnValue = value.apply( this, arguments );
+-
+-				this._super = __super;
+-				this._superApply = __superApply;
+-
+-				return returnValue;
+-			};
+-		})();
+-	});
+-	constructor.prototype = $.widget.extend( basePrototype, {
+-		// TODO: remove support for widgetEventPrefix
+-		// always use the name + a colon as the prefix, e.g., draggable:start
+-		// don't prefix for widgets that aren't DOM-based
+-		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+-	}, proxiedPrototype, {
+-		constructor: constructor,
+-		namespace: namespace,
+-		widgetName: name,
+-		widgetFullName: fullName
+-	});
+-
+-	// If this widget is being redefined then we need to find all widgets that
+-	// are inheriting from it and redefine all of them so that they inherit from
+-	// the new version of this widget. We're essentially trying to replace one
+-	// level in the prototype chain.
+-	if ( existingConstructor ) {
+-		$.each( existingConstructor._childConstructors, function( i, child ) {
+-			var childPrototype = child.prototype;
+-
+-			// redefine the child widget using the same prototype that was
+-			// originally used, but inherit from the new version of the base
+-			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+-		});
+-		// remove the list of existing child constructors from the old constructor
+-		// so the old child constructors can be garbage collected
+-		delete existingConstructor._childConstructors;
+-	} else {
+-		base._childConstructors.push( constructor );
+-	}
+-
+-	$.widget.bridge( name, constructor );
+-};
+-
+-$.widget.extend = function( target ) {
+-	var input = slice.call( arguments, 1 ),
+-		inputIndex = 0,
+-		inputLength = input.length,
+-		key,
+-		value;
+-	for ( ; inputIndex < inputLength; inputIndex++ ) {
+-		for ( key in input[ inputIndex ] ) {
+-			value = input[ inputIndex ][ key ];
+-			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+-				// Clone objects
+-				if ( $.isPlainObject( value ) ) {
+-					target[ key ] = $.isPlainObject( target[ key ] ) ?
+-						$.widget.extend( {}, target[ key ], value ) :
+-						// Don't extend strings, arrays, etc. with objects
+-						$.widget.extend( {}, value );
+-				// Copy everything else by reference
+-				} else {
+-					target[ key ] = value;
+-				}
+-			}
+-		}
+-	}
+-	return target;
+-};
+-
+-$.widget.bridge = function( name, object ) {
+-	var fullName = object.prototype.widgetFullName || name;
+-	$.fn[ name ] = function( options ) {
+-		var isMethodCall = typeof options === "string",
+-			args = slice.call( arguments, 1 ),
+-			returnValue = this;
+-
+-		// allow multiple hashes to be passed on init
+-		options = !isMethodCall && args.length ?
+-			$.widget.extend.apply( null, [ options ].concat(args) ) :
+-			options;
+-
+-		if ( isMethodCall ) {
+-			this.each(function() {
+-				var methodValue,
+-					instance = $.data( this, fullName );
+-				if ( !instance ) {
+-					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+-						"attempted to call method '" + options + "'" );
+-				}
+-				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+-					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+-				}
+-				methodValue = instance[ options ].apply( instance, args );
+-				if ( methodValue !== instance && methodValue !== undefined ) {
+-					returnValue = methodValue && methodValue.jquery ?
+-						returnValue.pushStack( methodValue.get() ) :
+-						methodValue;
+-					return false;
+-				}
+-			});
+-		} else {
+-			this.each(function() {
+-				var instance = $.data( this, fullName );
+-				if ( instance ) {
+-					instance.option( options || {} )._init();
+-				} else {
+-					$.data( this, fullName, new object( options, this ) );
+-				}
+-			});
+-		}
+-
+-		return returnValue;
+-	};
+-};
+-
+-$.Widget = function( /* options, element */ ) {};
+-$.Widget._childConstructors = [];
+-
+-$.Widget.prototype = {
+-	widgetName: "widget",
+-	widgetEventPrefix: "",
+-	defaultElement: "<div>",
+-	options: {
+-		disabled: false,
+-
+-		// callbacks
+-		create: null
+-	},
+-	_createWidget: function( options, element ) {
+-		element = $( element || this.defaultElement || this )[ 0 ];
+-		this.element = $( element );
+-		this.uuid = uuid++;
+-		this.eventNamespace = "." + this.widgetName + this.uuid;
+-		this.options = $.widget.extend( {},
+-			this.options,
+-			this._getCreateOptions(),
+-			options );
+-
+-		this.bindings = $();
+-		this.hoverable = $();
+-		this.focusable = $();
+-
+-		if ( element !== this ) {
+-			$.data( element, this.widgetFullName, this );
+-			this._on( true, this.element, {
+-				remove: function( event ) {
+-					if ( event.target === element ) {
+-						this.destroy();
+-					}
+-				}
+-			});
+-			this.document = $( element.style ?
+-				// element within the document
+-				element.ownerDocument :
+-				// element is window or document
+-				element.document || element );
+-			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+-		}
+-
+-		this._create();
+-		this._trigger( "create", null, this._getCreateEventData() );
+-		this._init();
+-	},
+-	_getCreateOptions: $.noop,
+-	_getCreateEventData: $.noop,
+-	_create: $.noop,
+-	_init: $.noop,
+-
+-	destroy: function() {
+-		this._destroy();
+-		// we can probably remove the unbind calls in 2.0
+-		// all event bindings should go through this._on()
+-		this.element
+-			.unbind( this.eventNamespace )
+-			// 1.9 BC for #7810
+-			// TODO remove dual storage
+-			.removeData( this.widgetName )
+-			.removeData( this.widgetFullName )
+-			// support: jquery <1.6.3
+-			// http://bugs.jquery.com/ticket/9413
+-			.removeData( $.camelCase( this.widgetFullName ) );
+-		this.widget()
+-			.unbind( this.eventNamespace )
+-			.removeAttr( "aria-disabled" )
+-			.removeClass(
+-				this.widgetFullName + "-disabled " +
+-				"ui-state-disabled" );
+-
+-		// clean up events and states
+-		this.bindings.unbind( this.eventNamespace );
+-		this.hoverable.removeClass( "ui-state-hover" );
+-		this.focusable.removeClass( "ui-state-focus" );
+-	},
+-	_destroy: $.noop,
+-
+-	widget: function() {
+-		return this.element;
+-	},
+-
+-	option: function( key, value ) {
+-		var options = key,
+-			parts,
+-			curOption,
+-			i;
+-
+-		if ( arguments.length === 0 ) {
+-			// don't return a reference to the internal hash
+-			return $.widget.extend( {}, this.options );
+-		}
+-
+-		if ( typeof key === "string" ) {
+-			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+-			options = {};
+-			parts = key.split( "." );
+-			key = parts.shift();
+-			if ( parts.length ) {
+-				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+-				for ( i = 0; i < parts.length - 1; i++ ) {
+-					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+-					curOption = curOption[ parts[ i ] ];
+-				}
+-				key = parts.pop();
+-				if ( value === undefined ) {
+-					return curOption[ key ] === undefined ? null : curOption[ key ];
+-				}
+-				curOption[ key ] = value;
+-			} else {
+-				if ( value === undefined ) {
+-					return this.options[ key ] === undefined ? null : this.options[ key ];
+-				}
+-				options[ key ] = value;
+-			}
+-		}
+-
+-		this._setOptions( options );
+-
+-		return this;
+-	},
+-	_setOptions: function( options ) {
+-		var key;
+-
+-		for ( key in options ) {
+-			this._setOption( key, options[ key ] );
+-		}
+-
+-		return this;
+-	},
+-	_setOption: function( key, value ) {
+-		this.options[ key ] = value;
+-
+-		if ( key === "disabled" ) {
+-			this.widget()
+-				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+-				.attr( "aria-disabled", value );
+-			this.hoverable.removeClass( "ui-state-hover" );
+-			this.focusable.removeClass( "ui-state-focus" );
+-		}
+-
+-		return this;
+-	},
+-
+-	enable: function() {
+-		return this._setOption( "disabled", false );
+-	},
+-	disable: function() {
+-		return this._setOption( "disabled", true );
+-	},
+-
+-	_on: function( suppressDisabledCheck, element, handlers ) {
+-		var delegateElement,
+-			instance = this;
+-
+-		// no suppressDisabledCheck flag, shuffle arguments
+-		if ( typeof suppressDisabledCheck !== "boolean" ) {
+-			handlers = element;
+-			element = suppressDisabledCheck;
+-			suppressDisabledCheck = false;
+-		}
+-
+-		// no element argument, shuffle and use this.element
+-		if ( !handlers ) {
+-			handlers = element;
+-			element = this.element;
+-			delegateElement = this.widget();
+-		} else {
+-			// accept selectors, DOM elements
+-			element = delegateElement = $( element );
+-			this.bindings = this.bindings.add( element );
+-		}
+-
+-		$.each( handlers, function( event, handler ) {
+-			function handlerProxy() {
+-				// allow widgets to customize the disabled handling
+-				// - disabled as an array instead of boolean
+-				// - disabled class as method for disabling individual parts
+-				if ( !suppressDisabledCheck &&
+-						( instance.options.disabled === true ||
+-							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+-					return;
+-				}
+-				return ( typeof handler === "string" ? instance[ handler ] : handler )
+-					.apply( instance, arguments );
+-			}
+-
+-			// copy the guid so direct unbinding works
+-			if ( typeof handler !== "string" ) {
+-				handlerProxy.guid = handler.guid =
+-					handler.guid || handlerProxy.guid || $.guid++;
+-			}
+-
+-			var match = event.match( /^(\w+)\s*(.*)$/ ),
+-				eventName = match[1] + instance.eventNamespace,
+-				selector = match[2];
+-			if ( selector ) {
+-				delegateElement.delegate( selector, eventName, handlerProxy );
+-			} else {
+-				element.bind( eventName, handlerProxy );
+-			}
+-		});
+-	},
+-
+-	_off: function( element, eventName ) {
+-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+-		element.unbind( eventName ).undelegate( eventName );
+-	},
+-
+-	_delay: function( handler, delay ) {
+-		function handlerProxy() {
+-			return ( typeof handler === "string" ? instance[ handler ] : handler )
+-				.apply( instance, arguments );
+-		}
+-		var instance = this;
+-		return setTimeout( handlerProxy, delay || 0 );
+-	},
+-
+-	_hoverable: function( element ) {
+-		this.hoverable = this.hoverable.add( element );
+-		this._on( element, {
+-			mouseenter: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-hover" );
+-			},
+-			mouseleave: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-hover" );
+-			}
+-		});
+-	},
+-
+-	_focusable: function( element ) {
+-		this.focusable = this.focusable.add( element );
+-		this._on( element, {
+-			focusin: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-focus" );
+-			},
+-			focusout: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-focus" );
+-			}
+-		});
+-	},
+-
+-	_trigger: function( type, event, data ) {
+-		var prop, orig,
+-			callback = this.options[ type ];
+-
+-		data = data || {};
+-		event = $.Event( event );
+-		event.type = ( type === this.widgetEventPrefix ?
+-			type :
+-			this.widgetEventPrefix + type ).toLowerCase();
+-		// the original event may come from any element
+-		// so we need to reset the target on the new event
+-		event.target = this.element[ 0 ];
+-
+-		// copy original event properties over to the new event
+-		orig = event.originalEvent;
+-		if ( orig ) {
+-			for ( prop in orig ) {
+-				if ( !( prop in event ) ) {
+-					event[ prop ] = orig[ prop ];
+-				}
+-			}
+-		}
+-
+-		this.element.trigger( event, data );
+-		return !( $.isFunction( callback ) &&
+-			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+-			event.isDefaultPrevented() );
+-	}
+-};
+-
+-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+-	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+-		if ( typeof options === "string" ) {
+-			options = { effect: options };
+-		}
+-		var hasOptions,
+-			effectName = !options ?
+-				method :
+-				options === true || typeof options === "number" ?
+-					defaultEffect :
+-					options.effect || defaultEffect;
+-		options = options || {};
+-		if ( typeof options === "number" ) {
+-			options = { duration: options };
+-		}
+-		hasOptions = !$.isEmptyObject( options );
+-		options.complete = callback;
+-		if ( options.delay ) {
+-			element.delay( options.delay );
+-		}
+-		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+-			element[ method ]( options );
+-		} else if ( effectName !== method && element[ effectName ] ) {
+-			element[ effectName ]( options.duration, options.easing, callback );
+-		} else {
+-			element.queue(function( next ) {
+-				$( this )[ method ]();
+-				if ( callback ) {
+-					callback.call( element[ 0 ] );
+-				}
+-				next();
+-			});
+-		}
+-	};
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-var mouseHandled = false;
+-$( document ).mouseup( function() {
+-	mouseHandled = false;
+-});
+-
+-$.widget("ui.mouse", {
+-	version: "1.10.3",
+-	options: {
+-		cancel: "input,textarea,button,select,option",
+-		distance: 1,
+-		delay: 0
+-	},
+-	_mouseInit: function() {
+-		var that = this;
+-
+-		this.element
+-			.bind("mousedown."+this.widgetName, function(event) {
+-				return that._mouseDown(event);
+-			})
+-			.bind("click."+this.widgetName, function(event) {
+-				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+-					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+-					event.stopImmediatePropagation();
+-					return false;
+-				}
+-			});
+-
+-		this.started = false;
+-	},
+-
+-	// TODO: make sure destroying one instance of mouse doesn't mess with
+-	// other instances of mouse
+-	_mouseDestroy: function() {
+-		this.element.unbind("."+this.widgetName);
+-		if ( this._mouseMoveDelegate ) {
+-			$(document)
+-				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-		}
+-	},
+-
+-	_mouseDown: function(event) {
+-		// don't let more than one widget handle mouseStart
+-		if( mouseHandled ) { return; }
+-
+-		// we may have missed mouseup (out of window)
+-		(this._mouseStarted && this._mouseUp(event));
+-
+-		this._mouseDownEvent = event;
+-
+-		var that = this,
+-			btnIsLeft = (event.which === 1),
+-			// event.target.nodeName works around a bug in IE 8 with
+-			// disabled inputs (#7620)
+-			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+-			return true;
+-		}
+-
+-		this.mouseDelayMet = !this.options.delay;
+-		if (!this.mouseDelayMet) {
+-			this._mouseDelayTimer = setTimeout(function() {
+-				that.mouseDelayMet = true;
+-			}, this.options.delay);
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted = (this._mouseStart(event) !== false);
+-			if (!this._mouseStarted) {
+-				event.preventDefault();
+-				return true;
+-			}
+-		}
+-
+-		// Click event may never have fired (Gecko & Opera)
+-		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+-			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+-		}
+-
+-		// these delegates are required to keep context
+-		this._mouseMoveDelegate = function(event) {
+-			return that._mouseMove(event);
+-		};
+-		this._mouseUpDelegate = function(event) {
+-			return that._mouseUp(event);
+-		};
+-		$(document)
+-			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		event.preventDefault();
+-
+-		mouseHandled = true;
+-		return true;
+-	},
+-
+-	_mouseMove: function(event) {
+-		// IE mouseup check - mouseup happened when mouse was out of window
+-		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+-			return this._mouseUp(event);
+-		}
+-
+-		if (this._mouseStarted) {
+-			this._mouseDrag(event);
+-			return event.preventDefault();
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted =
+-				(this._mouseStart(this._mouseDownEvent, event) !== false);
+-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+-		}
+-
+-		return !this._mouseStarted;
+-	},
+-
+-	_mouseUp: function(event) {
+-		$(document)
+-			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		if (this._mouseStarted) {
+-			this._mouseStarted = false;
+-
+-			if (event.target === this._mouseDownEvent.target) {
+-				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+-			}
+-
+-			this._mouseStop(event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseDistanceMet: function(event) {
+-		return (Math.max(
+-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+-			) >= this.options.distance
+-		);
+-	},
+-
+-	_mouseDelayMet: function(/* event */) {
+-		return this.mouseDelayMet;
+-	},
+-
+-	// These are placeholder methods, to be overriden by extending plugin
+-	_mouseStart: function(/* event */) {},
+-	_mouseDrag: function(/* event */) {},
+-	_mouseStop: function(/* event */) {},
+-	_mouseCapture: function(/* event */) { return true; }
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.ui = $.ui || {};
+-
+-var cachedScrollbarWidth,
+-	max = Math.max,
+-	abs = Math.abs,
+-	round = Math.round,
+-	rhorizontal = /left|center|right/,
+-	rvertical = /top|center|bottom/,
+-	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+-	rposition = /^\w+/,
+-	rpercent = /%$/,
+-	_position = $.fn.position;
+-
+-function getOffsets( offsets, width, height ) {
+-	return [
+-		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+-		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+-	];
+-}
+-
+-function parseCss( element, property ) {
+-	return parseInt( $.css( element, property ), 10 ) || 0;
+-}
+-
+-function getDimensions( elem ) {
+-	var raw = elem[0];
+-	if ( raw.nodeType === 9 ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: 0, left: 0 }
+-		};
+-	}
+-	if ( $.isWindow( raw ) ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+-		};
+-	}
+-	if ( raw.preventDefault ) {
+-		return {
+-			width: 0,
+-			height: 0,
+-			offset: { top: raw.pageY, left: raw.pageX }
+-		};
+-	}
+-	return {
+-		width: elem.outerWidth(),
+-		height: elem.outerHeight(),
+-		offset: elem.offset()
+-	};
+-}
+-
+-$.position = {
+-	scrollbarWidth: function() {
+-		if ( cachedScrollbarWidth !== undefined ) {
+-			return cachedScrollbarWidth;
+-		}
+-		var w1, w2,
+-			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+-			innerDiv = div.children()[0];
+-
+-		$( "body" ).append( div );
+-		w1 = innerDiv.offsetWidth;
+-		div.css( "overflow", "scroll" );
+-
+-		w2 = innerDiv.offsetWidth;
+-
+-		if ( w1 === w2 ) {
+-			w2 = div[0].clientWidth;
+-		}
+-
+-		div.remove();
+-
+-		return (cachedScrollbarWidth = w1 - w2);
+-	},
+-	getScrollInfo: function( within ) {
+-		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
+-			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+-			hasOverflowX = overflowX === "scroll" ||
+-				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+-			hasOverflowY = overflowY === "scroll" ||
+-				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+-		return {
+-			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+-			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+-		};
+-	},
+-	getWithinInfo: function( element ) {
+-		var withinElement = $( element || window ),
+-			isWindow = $.isWindow( withinElement[0] );
+-		return {
+-			element: withinElement,
+-			isWindow: isWindow,
+-			offset: withinElement.offset() || { left: 0, top: 0 },
+-			scrollLeft: withinElement.scrollLeft(),
+-			scrollTop: withinElement.scrollTop(),
+-			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+-			height: isWindow ? withinElement.height() : withinElement.outerHeight()
+-		};
+-	}
+-};
+-
+-$.fn.position = function( options ) {
+-	if ( !options || !options.of ) {
+-		return _position.apply( this, arguments );
+-	}
+-
+-	// make a copy, we don't want to modify arguments
+-	options = $.extend( {}, options );
+-
+-	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+-		target = $( options.of ),
+-		within = $.position.getWithinInfo( options.within ),
+-		scrollInfo = $.position.getScrollInfo( within ),
+-		collision = ( options.collision || "flip" ).split( " " ),
+-		offsets = {};
+-
+-	dimensions = getDimensions( target );
+-	if ( target[0].preventDefault ) {
+-		// force left top to allow flipping
+-		options.at = "left top";
+-	}
+-	targetWidth = dimensions.width;
+-	targetHeight = dimensions.height;
+-	targetOffset = dimensions.offset;
+-	// clone to reuse original targetOffset later
+-	basePosition = $.extend( {}, targetOffset );
+-
+-	// force my and at to have valid horizontal and vertical positions
+-	// if a value is missing or invalid, it will be converted to center
+-	$.each( [ "my", "at" ], function() {
+-		var pos = ( options[ this ] || "" ).split( " " ),
+-			horizontalOffset,
+-			verticalOffset;
+-
+-		if ( pos.length === 1) {
+-			pos = rhorizontal.test( pos[ 0 ] ) ?
+-				pos.concat( [ "center" ] ) :
+-				rvertical.test( pos[ 0 ] ) ?
+-					[ "center" ].concat( pos ) :
+-					[ "center", "center" ];
+-		}
+-		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+-		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+-
+-		// calculate offsets
+-		horizontalOffset = roffset.exec( pos[ 0 ] );
+-		verticalOffset = roffset.exec( pos[ 1 ] );
+-		offsets[ this ] = [
+-			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+-			verticalOffset ? verticalOffset[ 0 ] : 0
+-		];
+-
+-		// reduce to just the positions without the offsets
+-		options[ this ] = [
+-			rposition.exec( pos[ 0 ] )[ 0 ],
+-			rposition.exec( pos[ 1 ] )[ 0 ]
+-		];
+-	});
+-
+-	// normalize collision option
+-	if ( collision.length === 1 ) {
+-		collision[ 1 ] = collision[ 0 ];
+-	}
+-
+-	if ( options.at[ 0 ] === "right" ) {
+-		basePosition.left += targetWidth;
+-	} else if ( options.at[ 0 ] === "center" ) {
+-		basePosition.left += targetWidth / 2;
+-	}
+-
+-	if ( options.at[ 1 ] === "bottom" ) {
+-		basePosition.top += targetHeight;
+-	} else if ( options.at[ 1 ] === "center" ) {
+-		basePosition.top += targetHeight / 2;
+-	}
+-
+-	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+-	basePosition.left += atOffset[ 0 ];
+-	basePosition.top += atOffset[ 1 ];
+-
+-	return this.each(function() {
+-		var collisionPosition, using,
+-			elem = $( this ),
+-			elemWidth = elem.outerWidth(),
+-			elemHeight = elem.outerHeight(),
+-			marginLeft = parseCss( this, "marginLeft" ),
+-			marginTop = parseCss( this, "marginTop" ),
+-			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+-			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+-			position = $.extend( {}, basePosition ),
+-			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+-
+-		if ( options.my[ 0 ] === "right" ) {
+-			position.left -= elemWidth;
+-		} else if ( options.my[ 0 ] === "center" ) {
+-			position.left -= elemWidth / 2;
+-		}
+-
+-		if ( options.my[ 1 ] === "bottom" ) {
+-			position.top -= elemHeight;
+-		} else if ( options.my[ 1 ] === "center" ) {
+-			position.top -= elemHeight / 2;
+-		}
+-
+-		position.left += myOffset[ 0 ];
+-		position.top += myOffset[ 1 ];
+-
+-		// if the browser doesn't support fractions, then round for consistent results
+-		if ( !$.support.offsetFractions ) {
+-			position.left = round( position.left );
+-			position.top = round( position.top );
+-		}
+-
+-		collisionPosition = {
+-			marginLeft: marginLeft,
+-			marginTop: marginTop
+-		};
+-
+-		$.each( [ "left", "top" ], function( i, dir ) {
+-			if ( $.ui.position[ collision[ i ] ] ) {
+-				$.ui.position[ collision[ i ] ][ dir ]( position, {
+-					targetWidth: targetWidth,
+-					targetHeight: targetHeight,
+-					elemWidth: elemWidth,
+-					elemHeight: elemHeight,
+-					collisionPosition: collisionPosition,
+-					collisionWidth: collisionWidth,
+-					collisionHeight: collisionHeight,
+-					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+-					my: options.my,
+-					at: options.at,
+-					within: within,
+-					elem : elem
+-				});
+-			}
+-		});
+-
+-		if ( options.using ) {
+-			// adds feedback as second argument to using callback, if present
+-			using = function( props ) {
+-				var left = targetOffset.left - position.left,
+-					right = left + targetWidth - elemWidth,
+-					top = targetOffset.top - position.top,
+-					bottom = top + targetHeight - elemHeight,
+-					feedback = {
+-						target: {
+-							element: target,
+-							left: targetOffset.left,
+-							top: targetOffset.top,
+-							width: targetWidth,
+-							height: targetHeight
+-						},
+-						element: {
+-							element: elem,
+-							left: position.left,
+-							top: position.top,
+-							width: elemWidth,
+-							height: elemHeight
+-						},
+-						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+-						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+-					};
+-				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+-					feedback.horizontal = "center";
+-				}
+-				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+-					feedback.vertical = "middle";
+-				}
+-				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+-					feedback.important = "horizontal";
+-				} else {
+-					feedback.important = "vertical";
+-				}
+-				options.using.call( this, props, feedback );
+-			};
+-		}
+-
+-		elem.offset( $.extend( position, { using: using } ) );
+-	});
+-};
+-
+-$.ui.position = {
+-	fit: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+-				outerWidth = within.width,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = withinOffset - collisionPosLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+-				newOverRight;
+-
+-			// element is wider than within
+-			if ( data.collisionWidth > outerWidth ) {
+-				// element is initially over the left side of within
+-				if ( overLeft > 0 && overRight <= 0 ) {
+-					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+-					position.left += overLeft - newOverRight;
+-				// element is initially over right side of within
+-				} else if ( overRight > 0 && overLeft <= 0 ) {
+-					position.left = withinOffset;
+-				// element is initially over both left and right sides of within
+-				} else {
+-					if ( overLeft > overRight ) {
+-						position.left = withinOffset + outerWidth - data.collisionWidth;
+-					} else {
+-						position.left = withinOffset;
+-					}
+-				}
+-			// too far left -> align with left edge
+-			} else if ( overLeft > 0 ) {
+-				position.left += overLeft;
+-			// too far right -> align with right edge
+-			} else if ( overRight > 0 ) {
+-				position.left -= overRight;
+-			// adjust based on position and margin
+-			} else {
+-				position.left = max( position.left - collisionPosLeft, position.left );
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+-				outerHeight = data.within.height,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = withinOffset - collisionPosTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+-				newOverBottom;
+-
+-			// element is taller than within
+-			if ( data.collisionHeight > outerHeight ) {
+-				// element is initially over the top of within
+-				if ( overTop > 0 && overBottom <= 0 ) {
+-					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+-					position.top += overTop - newOverBottom;
+-				// element is initially over bottom of within
+-				} else if ( overBottom > 0 && overTop <= 0 ) {
+-					position.top = withinOffset;
+-				// element is initially over both top and bottom of within
+-				} else {
+-					if ( overTop > overBottom ) {
+-						position.top = withinOffset + outerHeight - data.collisionHeight;
+-					} else {
+-						position.top = withinOffset;
+-					}
+-				}
+-			// too far up -> align with top
+-			} else if ( overTop > 0 ) {
+-				position.top += overTop;
+-			// too far down -> align with bottom edge
+-			} else if ( overBottom > 0 ) {
+-				position.top -= overBottom;
+-			// adjust based on position and margin
+-			} else {
+-				position.top = max( position.top - collisionPosTop, position.top );
+-			}
+-		}
+-	},
+-	flip: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.left + within.scrollLeft,
+-				outerWidth = within.width,
+-				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = collisionPosLeft - offsetLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+-				myOffset = data.my[ 0 ] === "left" ?
+-					-data.elemWidth :
+-					data.my[ 0 ] === "right" ?
+-						data.elemWidth :
+-						0,
+-				atOffset = data.at[ 0 ] === "left" ?
+-					data.targetWidth :
+-					data.at[ 0 ] === "right" ?
+-						-data.targetWidth :
+-						0,
+-				offset = -2 * data.offset[ 0 ],
+-				newOverRight,
+-				newOverLeft;
+-
+-			if ( overLeft < 0 ) {
+-				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+-				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overRight > 0 ) {
+-				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+-				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.top + within.scrollTop,
+-				outerHeight = within.height,
+-				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = collisionPosTop - offsetTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+-				top = data.my[ 1 ] === "top",
+-				myOffset = top ?
+-					-data.elemHeight :
+-					data.my[ 1 ] === "bottom" ?
+-						data.elemHeight :
+-						0,
+-				atOffset = data.at[ 1 ] === "top" ?
+-					data.targetHeight :
+-					data.at[ 1 ] === "bottom" ?
+-						-data.targetHeight :
+-						0,
+-				offset = -2 * data.offset[ 1 ],
+-				newOverTop,
+-				newOverBottom;
+-			if ( overTop < 0 ) {
+-				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+-				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overBottom > 0 ) {
+-				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+-				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-		}
+-	},
+-	flipfit: {
+-		left: function() {
+-			$.ui.position.flip.left.apply( this, arguments );
+-			$.ui.position.fit.left.apply( this, arguments );
+-		},
+-		top: function() {
+-			$.ui.position.flip.top.apply( this, arguments );
+-			$.ui.position.fit.top.apply( this, arguments );
+-		}
+-	}
+-};
+-
+-// fraction support test
+-(function () {
+-	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+-		body = document.getElementsByTagName( "body" )[ 0 ],
+-		div = document.createElement( "div" );
+-
+-	//Create a "fake body" for testing based on method used in jQuery.support
+-	testElement = document.createElement( body ? "div" : "body" );
+-	testElementStyle = {
+-		visibility: "hidden",
+-		width: 0,
+-		height: 0,
+-		border: 0,
+-		margin: 0,
+-		background: "none"
+-	};
+-	if ( body ) {
+-		$.extend( testElementStyle, {
+-			position: "absolute",
+-			left: "-1000px",
+-			top: "-1000px"
+-		});
+-	}
+-	for ( i in testElementStyle ) {
+-		testElement.style[ i ] = testElementStyle[ i ];
+-	}
+-	testElement.appendChild( div );
+-	testElementParent = body || document.documentElement;
+-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+-
+-	div.style.cssText = "position: absolute; left: 10.7432222px;";
+-
+-	offsetLeft = $( div ).offset().left;
+-	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+-
+-	testElement.innerHTML = "";
+-	testElementParent.removeChild( testElement );
+-})();
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.widget("ui.draggable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drag",
+-	options: {
+-		addClasses: true,
+-		appendTo: "parent",
+-		axis: false,
+-		connectToSortable: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		iframeFix: false,
+-		opacity: false,
+-		refreshPositions: false,
+-		revert: false,
+-		revertDuration: 500,
+-		scope: "default",
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		snap: false,
+-		snapMode: "both",
+-		snapTolerance: 20,
+-		stack: false,
+-		zIndex: false,
+-
+-		// callbacks
+-		drag: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
+-			this.element[0].style.position = "relative";
+-		}
+-		if (this.options.addClasses){
+-			this.element.addClass("ui-draggable");
+-		}
+-		if (this.options.disabled){
+-			this.element.addClass("ui-draggable-disabled");
+-		}
+-
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function(event) {
+-
+-		var o = this.options;
+-
+-		// among others, prevent a drag on a resizable-handle
+-		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+-			return false;
+-		}
+-
+-		//Quit if we're not on a valid handle
+-		this.handle = this._getHandle(event);
+-		if (!this.handle) {
+-			return false;
+-		}
+-
+-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+-			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
+-			.css({
+-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+-				position: "absolute", opacity: "0.001", zIndex: 1000
+-			})
+-			.css($(this).offset())
+-			.appendTo("body");
+-		});
+-
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options;
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		this.helper.addClass("ui-draggable-dragging");
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		//If ddmanager is used for droppables, set the global draggable
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Store the helper's css position
+-		this.cssPosition = this.helper.css( "position" );
+-		this.scrollParent = this.helper.scrollParent();
+-		this.offsetParent = this.helper.offsetParent();
+-		this.offsetParentCssPosition = this.offsetParent.css( "position" );
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.positionAbs = this.element.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		//Reset scroll cache
+-		this.offset.scroll = false;
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this.position = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Set a containment if given in the options
+-		this._setContainment();
+-
+-		//Trigger event + callbacks
+-		if(this._trigger("start", event) === false) {
+-			this._clear();
+-			return false;
+-		}
+-
+-		//Recache the helper size
+-		this._cacheHelperProportions();
+-
+-		//Prepare the droppable offsets
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-
+-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+-		if ( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStart(this, event);
+-		}
+-
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event, noPropagation) {
+-		// reset any necessary cached properties (see #5009)
+-		if ( this.offsetParentCssPosition === "fixed" ) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Call plugins and callbacks and use the resulting position if something is returned
+-		if (!noPropagation) {
+-			var ui = this._uiHash();
+-			if(this._trigger("drag", event, ui) === false) {
+-				this._mouseUp({});
+-				return false;
+-			}
+-			this.position = ui.position;
+-		}
+-
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		//If we are using droppables, inform the manager about the drop
+-		var that = this,
+-			dropped = false;
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			dropped = $.ui.ddmanager.drop(this, event);
+-		}
+-
+-		//if a drop comes from outside (a sortable)
+-		if(this.dropped) {
+-			dropped = this.dropped;
+-			this.dropped = false;
+-		}
+-
+-		//if the original element is no longer in the DOM don't bother to continue (see #8269)
+-		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
+-			return false;
+-		}
+-
+-		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+-				if(that._trigger("stop", event) !== false) {
+-					that._clear();
+-				}
+-			});
+-		} else {
+-			if(this._trigger("stop", event) !== false) {
+-				this._clear();
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseUp: function(event) {
+-		//Remove frame helpers
+-		$("div.ui-draggable-iframeFix").each(function() {
+-			this.parentNode.removeChild(this);
+-		});
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+-		if( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStop(this, event);
+-		}
+-
+-		return $.ui.mouse.prototype._mouseUp.call(this, event);
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.helper.is(".ui-draggable-dragging")) {
+-			this._mouseUp({});
+-		} else {
+-			this._clear();
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	_getHandle: function(event) {
+-		return this.options.handle ?
+-			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+-			true;
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+-
+-		if(!helper.parents("body").length) {
+-			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+-		}
+-
+-		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+-			helper.css("position", "absolute");
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-		//Get the offsetParent and cache its position
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		//This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		//Ugly IE fix
+-		if((this.offsetParent[0] === document.body) ||
+-			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.element.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.element.css("marginTop"),10) || 0),
+-			right: (parseInt(this.element.css("marginRight"),10) || 0),
+-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var over, c, ce,
+-			o = this.options;
+-
+-		if ( !o.containment ) {
+-			this.containment = null;
+-			return;
+-		}
+-
+-		if ( o.containment === "window" ) {
+-			this.containment = [
+-				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+-				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+-				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+-				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment === "document") {
+-			this.containment = [
+-				0,
+-				0,
+-				$( document ).width() - this.helperProportions.width - this.margins.left,
+-				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment.constructor === Array ) {
+-			this.containment = o.containment;
+-			return;
+-		}
+-
+-		if ( o.containment === "parent" ) {
+-			o.containment = this.helper[ 0 ].parentNode;
+-		}
+-
+-		c = $( o.containment );
+-		ce = c[ 0 ];
+-
+-		if( !ce ) {
+-			return;
+-		}
+-
+-		over = c.css( "overflow" ) !== "hidden";
+-
+-		this.containment = [
+-			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+-			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
+-			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
+-			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+-		];
+-		this.relative_container = c;
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var containment, co, top, left,
+-			o = this.options,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+-			pageX = event.pageX,
+-			pageY = event.pageY;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		// If we are not dragging yet, we won't check for options
+-		if ( this.originalPosition ) {
+-			if ( this.containment ) {
+-				if ( this.relative_container ){
+-					co = this.relative_container.offset();
+-					containment = [
+-						this.containment[ 0 ] + co.left,
+-						this.containment[ 1 ] + co.top,
+-						this.containment[ 2 ] + co.left,
+-						this.containment[ 3 ] + co.top
+-					];
+-				}
+-				else {
+-					containment = this.containment;
+-				}
+-
+-				if(event.pageX - this.offset.click.left < containment[0]) {
+-					pageX = containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < containment[1]) {
+-					pageY = containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > containment[2]) {
+-					pageX = containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > containment[3]) {
+-					pageY = containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+-				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+-				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+-				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																	// The absolute mouse position
+-				this.offset.click.top	-												// Click offset (relative to the element)
+-				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
+-			),
+-			left: (
+-				pageX -																	// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
+-			)
+-		};
+-
+-	},
+-
+-	_clear: function() {
+-		this.helper.removeClass("ui-draggable-dragging");
+-		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-		this.cancelHelperRemoval = false;
+-	},
+-
+-	// From now on bulk stuff - mainly helpers
+-
+-	_trigger: function(type, event, ui) {
+-		ui = ui || this._uiHash();
+-		$.ui.plugin.call(this, type, [event, ui]);
+-		//The absolute position has to be recalculated after plugins
+-		if(type === "drag") {
+-			this.positionAbs = this._convertPositionTo("absolute");
+-		}
+-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+-	},
+-
+-	plugins: {},
+-
+-	_uiHash: function() {
+-		return {
+-			helper: this.helper,
+-			position: this.position,
+-			originalPosition: this.originalPosition,
+-			offset: this.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.plugin.add("draggable", "connectToSortable", {
+-	start: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), o = inst.options,
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-		inst.sortables = [];
+-		$(o.connectToSortable).each(function() {
+-			var sortable = $.data(this, "ui-sortable");
+-			if (sortable && !sortable.options.disabled) {
+-				inst.sortables.push({
+-					instance: sortable,
+-					shouldRevert: sortable.options.revert
+-				});
+-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+-				sortable._trigger("activate", event, uiSortable);
+-			}
+-		});
+-
+-	},
+-	stop: function(event, ui) {
+-
+-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+-		var inst = $(this).data("ui-draggable"),
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-
+-		$.each(inst.sortables, function() {
+-			if(this.instance.isOver) {
+-
+-				this.instance.isOver = 0;
+-
+-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+-
+-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
+-				if(this.shouldRevert) {
+-					this.instance.options.revert = this.shouldRevert;
+-				}
+-
+-				//Trigger the stop of the sortable
+-				this.instance._mouseStop(event);
+-
+-				this.instance.options.helper = this.instance.options._helper;
+-
+-				//If the helper has been the original item, restore properties in the sortable
+-				if(inst.options.helper === "original") {
+-					this.instance.currentItem.css({ top: "auto", left: "auto" });
+-				}
+-
+-			} else {
+-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+-				this.instance._trigger("deactivate", event, uiSortable);
+-			}
+-
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), that = this;
+-
+-		$.each(inst.sortables, function() {
+-
+-			var innermostIntersecting = false,
+-				thisSortable = this;
+-
+-			//Copy over some variables to allow calling the sortable's native _intersectsWith
+-			this.instance.positionAbs = inst.positionAbs;
+-			this.instance.helperProportions = inst.helperProportions;
+-			this.instance.offset.click = inst.offset.click;
+-
+-			if(this.instance._intersectsWith(this.instance.containerCache)) {
+-				innermostIntersecting = true;
+-				$.each(inst.sortables, function () {
+-					this.instance.positionAbs = inst.positionAbs;
+-					this.instance.helperProportions = inst.helperProportions;
+-					this.instance.offset.click = inst.offset.click;
+-					if (this !== thisSortable &&
+-						this.instance._intersectsWith(this.instance.containerCache) &&
+-						$.contains(thisSortable.instance.element[0], this.instance.element[0])
+-					) {
+-						innermostIntersecting = false;
+-					}
+-					return innermostIntersecting;
+-				});
+-			}
+-
+-
+-			if(innermostIntersecting) {
+-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+-				if(!this.instance.isOver) {
+-
+-					this.instance.isOver = 1;
+-					//Now we fake the start of dragging for the sortable instance,
+-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+-					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
+-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+-					this.instance.options.helper = function() { return ui.helper[0]; };
+-
+-					event.target = this.instance.currentItem[0];
+-					this.instance._mouseCapture(event, true);
+-					this.instance._mouseStart(event, true, true);
+-
+-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+-					this.instance.offset.click.top = inst.offset.click.top;
+-					this.instance.offset.click.left = inst.offset.click.left;
+-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+-
+-					inst._trigger("toSortable", event);
+-					inst.dropped = this.instance.element; //draggable revert needs that
+-					//hack so receive/update callbacks work (mostly)
+-					inst.currentItem = inst.element;
+-					this.instance.fromOutside = inst;
+-
+-				}
+-
+-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+-				if(this.instance.currentItem) {
+-					this.instance._mouseDrag(event);
+-				}
+-
+-			} else {
+-
+-				//If it doesn't intersect with the sortable, and it intersected before,
+-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+-				if(this.instance.isOver) {
+-
+-					this.instance.isOver = 0;
+-					this.instance.cancelHelperRemoval = true;
+-
+-					//Prevent reverting on this forced stop
+-					this.instance.options.revert = false;
+-
+-					// The out event needs to be triggered independently
+-					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+-
+-					this.instance._mouseStop(event, true);
+-					this.instance.options.helper = this.instance.options._helper;
+-
+-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+-					this.instance.currentItem.remove();
+-					if(this.instance.placeholder) {
+-						this.instance.placeholder.remove();
+-					}
+-
+-					inst._trigger("fromSortable", event);
+-					inst.dropped = false; //draggable revert needs that
+-				}
+-
+-			}
+-
+-		});
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "cursor", {
+-	start: function() {
+-		var t = $("body"), o = $(this).data("ui-draggable").options;
+-		if (t.css("cursor")) {
+-			o._cursor = t.css("cursor");
+-		}
+-		t.css("cursor", o.cursor);
+-	},
+-	stop: function() {
+-		var o = $(this).data("ui-draggable").options;
+-		if (o._cursor) {
+-			$("body").css("cursor", o._cursor);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "opacity", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("opacity")) {
+-			o._opacity = t.css("opacity");
+-		}
+-		t.css("opacity", o.opacity);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._opacity) {
+-			$(ui.helper).css("opacity", o._opacity);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "scroll", {
+-	start: function() {
+-		var i = $(this).data("ui-draggable");
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-			i.overflowOffset = i.scrollParent.offset();
+-		}
+-	},
+-	drag: function( event ) {
+-
+-		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+-
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-			}
+-
+-		} else {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-			}
+-
+-		}
+-
+-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(i, event);
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "snap", {
+-	start: function() {
+-
+-		var i = $(this).data("ui-draggable"),
+-			o = i.options;
+-
+-		i.snapElements = [];
+-
+-		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+-			var $t = $(this),
+-				$o = $t.offset();
+-			if(this !== i.element[0]) {
+-				i.snapElements.push({
+-					item: this,
+-					width: $t.outerWidth(), height: $t.outerHeight(),
+-					top: $o.top, left: $o.left
+-				});
+-			}
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var ts, bs, ls, rs, l, r, t, b, i, first,
+-			inst = $(this).data("ui-draggable"),
+-			o = inst.options,
+-			d = o.snapTolerance,
+-			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+-
+-		for (i = inst.snapElements.length - 1; i >= 0; i--){
+-
+-			l = inst.snapElements[i].left;
+-			r = l + inst.snapElements[i].width;
+-			t = inst.snapElements[i].top;
+-			b = t + inst.snapElements[i].height;
+-
+-			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+-				if(inst.snapElements[i].snapping) {
+-					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-				}
+-				inst.snapElements[i].snapping = false;
+-				continue;
+-			}
+-
+-			if(o.snapMode !== "inner") {
+-				ts = Math.abs(t - y2) <= d;
+-				bs = Math.abs(b - y1) <= d;
+-				ls = Math.abs(l - x2) <= d;
+-				rs = Math.abs(r - x1) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+-				}
+-			}
+-
+-			first = (ts || bs || ls || rs);
+-
+-			if(o.snapMode !== "outer") {
+-				ts = Math.abs(t - y1) <= d;
+-				bs = Math.abs(b - y2) <= d;
+-				ls = Math.abs(l - x1) <= d;
+-				rs = Math.abs(r - x2) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-			}
+-
+-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-			}
+-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+-
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "stack", {
+-	start: function() {
+-		var min,
+-			o = this.data("ui-draggable").options,
+-			group = $.makeArray($(o.stack)).sort(function(a,b) {
+-				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+-			});
+-
+-		if (!group.length) { return; }
+-
+-		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+-		$(group).each(function(i) {
+-			$(this).css("zIndex", min + i);
+-		});
+-		this.css("zIndex", (min + group.length));
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "zIndex", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("zIndex")) {
+-			o._zIndex = t.css("zIndex");
+-		}
+-		t.css("zIndex", o.zIndex);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._zIndex) {
+-			$(ui.helper).css("zIndex", o._zIndex);
+-		}
+-	}
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-$.widget("ui.droppable", {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drop",
+-	options: {
+-		accept: "*",
+-		activeClass: false,
+-		addClasses: true,
+-		greedy: false,
+-		hoverClass: false,
+-		scope: "default",
+-		tolerance: "intersect",
+-
+-		// callbacks
+-		activate: null,
+-		deactivate: null,
+-		drop: null,
+-		out: null,
+-		over: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options,
+-			accept = o.accept;
+-
+-		this.isover = false;
+-		this.isout = true;
+-
+-		this.accept = $.isFunction(accept) ? accept : function(d) {
+-			return d.is(accept);
+-		};
+-
+-		//Store the droppable's proportions
+-		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+-
+-		// Add the reference and positions to the manager
+-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+-		$.ui.ddmanager.droppables[o.scope].push(this);
+-
+-		(o.addClasses && this.element.addClass("ui-droppable"));
+-
+-	},
+-
+-	_destroy: function() {
+-		var i = 0,
+-			drop = $.ui.ddmanager.droppables[this.options.scope];
+-
+-		for ( ; i < drop.length; i++ ) {
+-			if ( drop[i] === this ) {
+-				drop.splice(i, 1);
+-			}
+-		}
+-
+-		this.element.removeClass("ui-droppable ui-droppable-disabled");
+-	},
+-
+-	_setOption: function(key, value) {
+-
+-		if(key === "accept") {
+-			this.accept = $.isFunction(value) ? value : function(d) {
+-				return d.is(value);
+-			};
+-		}
+-		$.Widget.prototype._setOption.apply(this, arguments);
+-	},
+-
+-	_activate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.addClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("activate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_deactivate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.removeClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("deactivate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_over: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.addClass(this.options.hoverClass);
+-			}
+-			this._trigger("over", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_out: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("out", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_drop: function(event,custom) {
+-
+-		var draggable = custom || $.ui.ddmanager.current,
+-			childrenIntersection = false;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return false;
+-		}
+-
+-		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
+-			var inst = $.data(this, "ui-droppable");
+-			if(
+-				inst.options.greedy &&
+-				!inst.options.disabled &&
+-				inst.options.scope === draggable.options.scope &&
+-				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
+-				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+-			) { childrenIntersection = true; return false; }
+-		});
+-		if(childrenIntersection) {
+-			return false;
+-		}
+-
+-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.activeClass) {
+-				this.element.removeClass(this.options.activeClass);
+-			}
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("drop", event, this.ui(draggable));
+-			return this.element;
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	ui: function(c) {
+-		return {
+-			draggable: (c.currentItem || c.element),
+-			helper: c.helper,
+-			position: c.position,
+-			offset: c.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.intersect = function(draggable, droppable, toleranceMode) {
+-
+-	if (!droppable.offset) {
+-		return false;
+-	}
+-
+-	var draggableLeft, draggableTop,
+-		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+-		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
+-		l = droppable.offset.left, r = l + droppable.proportions.width,
+-		t = droppable.offset.top, b = t + droppable.proportions.height;
+-
+-	switch (toleranceMode) {
+-		case "fit":
+-			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+-		case "intersect":
+-			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
+-				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
+-				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+-		case "pointer":
+-			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
+-			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
+-			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
+-		case "touch":
+-			return (
+-				(y1 >= t && y1 <= b) ||	// Top edge touching
+-				(y2 >= t && y2 <= b) ||	// Bottom edge touching
+-				(y1 < t && y2 > b)		// Surrounded vertically
+-			) && (
+-				(x1 >= l && x1 <= r) ||	// Left edge touching
+-				(x2 >= l && x2 <= r) ||	// Right edge touching
+-				(x1 < l && x2 > r)		// Surrounded horizontally
+-			);
+-		default:
+-			return false;
+-		}
+-
+-};
+-
+-/*
+-	This manager tracks offsets of draggables and droppables
+-*/
+-$.ui.ddmanager = {
+-	current: null,
+-	droppables: { "default": [] },
+-	prepareOffsets: function(t, event) {
+-
+-		var i, j,
+-			m = $.ui.ddmanager.droppables[t.options.scope] || [],
+-			type = event ? event.type : null, // workaround for #2317
+-			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+-
+-		droppablesLoop: for (i = 0; i < m.length; i++) {
+-
+-			//No disabled and non-accepted
+-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+-				continue;
+-			}
+-
+-			// Filter out elements in the current dragged item
+-			for (j=0; j < list.length; j++) {
+-				if(list[j] === m[i].element[0]) {
+-					m[i].proportions.height = 0;
+-					continue droppablesLoop;
+-				}
+-			}
+-
+-			m[i].visible = m[i].element.css("display") !== "none";
+-			if(!m[i].visible) {
+-				continue;
+-			}
+-
+-			//Activate the droppable if used directly from draggables
+-			if(type === "mousedown") {
+-				m[i]._activate.call(m[i], event);
+-			}
+-
+-			m[i].offset = m[i].element.offset();
+-			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+-
+-		}
+-
+-	},
+-	drop: function(draggable, event) {
+-
+-		var dropped = false;
+-		// Create a copy of the droppables in case the list changes during the drop (#9116)
+-		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
+-
+-			if(!this.options) {
+-				return;
+-			}
+-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
+-				dropped = this._drop.call(this, event) || dropped;
+-			}
+-
+-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-				this.isout = true;
+-				this.isover = false;
+-				this._deactivate.call(this, event);
+-			}
+-
+-		});
+-		return dropped;
+-
+-	},
+-	dragStart: function( draggable, event ) {
+-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+-			if( !draggable.options.refreshPositions ) {
+-				$.ui.ddmanager.prepareOffsets( draggable, event );
+-			}
+-		});
+-	},
+-	drag: function(draggable, event) {
+-
+-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+-		if(draggable.options.refreshPositions) {
+-			$.ui.ddmanager.prepareOffsets(draggable, event);
+-		}
+-
+-		//Run through all droppables and check their positions based on specific tolerance options
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(this.options.disabled || this.greedyChild || !this.visible) {
+-				return;
+-			}
+-
+-			var parentInstance, scope, parent,
+-				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
+-				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+-			if(!c) {
+-				return;
+-			}
+-
+-			if (this.options.greedy) {
+-				// find droppable parents with same scope
+-				scope = this.options.scope;
+-				parent = this.element.parents(":data(ui-droppable)").filter(function () {
+-					return $.data(this, "ui-droppable").options.scope === scope;
+-				});
+-
+-				if (parent.length) {
+-					parentInstance = $.data(parent[0], "ui-droppable");
+-					parentInstance.greedyChild = (c === "isover");
+-				}
+-			}
+-
+-			// we just moved into a greedy child
+-			if (parentInstance && c === "isover") {
+-				parentInstance.isover = false;
+-				parentInstance.isout = true;
+-				parentInstance._out.call(parentInstance, event);
+-			}
+-
+-			this[c] = true;
+-			this[c === "isout" ? "isover" : "isout"] = false;
+-			this[c === "isover" ? "_over" : "_out"].call(this, event);
+-
+-			// we just moved out of a greedy child
+-			if (parentInstance && c === "isout") {
+-				parentInstance.isout = false;
+-				parentInstance.isover = true;
+-				parentInstance._over.call(parentInstance, event);
+-			}
+-		});
+-
+-	},
+-	dragStop: function( draggable, event ) {
+-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+-		if( !draggable.options.refreshPositions ) {
+-			$.ui.ddmanager.prepareOffsets( draggable, event );
+-		}
+-	}
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-function num(v) {
+-	return parseInt(v, 10) || 0;
+-}
+-
+-function isNumber(value) {
+-	return !isNaN(parseInt(value, 10));
+-}
+-
+-$.widget("ui.resizable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "resize",
+-	options: {
+-		alsoResize: false,
+-		animate: false,
+-		animateDuration: "slow",
+-		animateEasing: "swing",
+-		aspectRatio: false,
+-		autoHide: false,
+-		containment: false,
+-		ghost: false,
+-		grid: false,
+-		handles: "e,s,se",
+-		helper: false,
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 10,
+-		minWidth: 10,
+-		// See #7960
+-		zIndex: 90,
+-
+-		// callbacks
+-		resize: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		var n, i, handle, axis, hname,
+-			that = this,
+-			o = this.options;
+-		this.element.addClass("ui-resizable");
+-
+-		$.extend(this, {
+-			_aspectRatio: !!(o.aspectRatio),
+-			aspectRatio: o.aspectRatio,
+-			originalElement: this.element,
+-			_proportionallyResizeElements: [],
+-			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+-		});
+-
+-		//Wrap the element if it cannot hold child nodes
+-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+-
+-			//Create a wrapper element and set the wrapper to the new current internal element
+-			this.element.wrap(
+-				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+-					position: this.element.css("position"),
+-					width: this.element.outerWidth(),
+-					height: this.element.outerHeight(),
+-					top: this.element.css("top"),
+-					left: this.element.css("left")
+-				})
+-			);
+-
+-			//Overwrite the original this.element
+-			this.element = this.element.parent().data(
+-				"ui-resizable", this.element.data("ui-resizable")
+-			);
+-
+-			this.elementIsWrapper = true;
+-
+-			//Move margins to the wrapper
+-			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+-			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+-
+-			//Prevent Safari textarea resize
+-			this.originalResizeStyle = this.originalElement.css("resize");
+-			this.originalElement.css("resize", "none");
+-
+-			//Push the actual element to our proportionallyResize internal array
+-			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+-
+-			// avoid IE jump (hard set the margin)
+-			this.originalElement.css({ margin: this.originalElement.css("margin") });
+-
+-			// fix handlers offset
+-			this._proportionallyResize();
+-
+-		}
+-
+-		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
+-		if(this.handles.constructor === String) {
+-
+-			if ( this.handles === "all") {
+-				this.handles = "n,e,s,w,se,sw,ne,nw";
+-			}
+-
+-			n = this.handles.split(",");
+-			this.handles = {};
+-
+-			for(i = 0; i < n.length; i++) {
+-
+-				handle = $.trim(n[i]);
+-				hname = "ui-resizable-"+handle;
+-				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+-
+-				// Apply zIndex to all handles - see #7960
+-				axis.css({ zIndex: o.zIndex });
+-
+-				//TODO : What's going on here?
+-				if ("se" === handle) {
+-					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+-				}
+-
+-				//Insert into internal handles object and append to element
+-				this.handles[handle] = ".ui-resizable-"+handle;
+-				this.element.append(axis);
+-			}
+-
+-		}
+-
+-		this._renderAxis = function(target) {
+-
+-			var i, axis, padPos, padWrapper;
+-
+-			target = target || this.element;
+-
+-			for(i in this.handles) {
+-
+-				if(this.handles[i].constructor === String) {
+-					this.handles[i] = $(this.handles[i], this.element).show();
+-				}
+-
+-				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+-
+-					axis = $(this.handles[i], this.element);
+-
+-					//Checking the correct pad and border
+-					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+-
+-					//The padding type i have to apply...
+-					padPos = [ "padding",
+-						/ne|nw|n/.test(i) ? "Top" :
+-						/se|sw|s/.test(i) ? "Bottom" :
+-						/^e$/.test(i) ? "Right" : "Left" ].join("");
+-
+-					target.css(padPos, padWrapper);
+-
+-					this._proportionallyResize();
+-
+-				}
+-
+-				//TODO: What's that good for? There's not anything to be executed left
+-				if(!$(this.handles[i]).length) {
+-					continue;
+-				}
+-			}
+-		};
+-
+-		//TODO: make renderAxis a prototype function
+-		this._renderAxis(this.element);
+-
+-		this._handles = $(".ui-resizable-handle", this.element)
+-			.disableSelection();
+-
+-		//Matching axis name
+-		this._handles.mouseover(function() {
+-			if (!that.resizing) {
+-				if (this.className) {
+-					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+-				}
+-				//Axis, default = se
+-				that.axis = axis && axis[1] ? axis[1] : "se";
+-			}
+-		});
+-
+-		//If we want to auto hide the elements
+-		if (o.autoHide) {
+-			this._handles.hide();
+-			$(this.element)
+-				.addClass("ui-resizable-autohide")
+-				.mouseenter(function() {
+-					if (o.disabled) {
+-						return;
+-					}
+-					$(this).removeClass("ui-resizable-autohide");
+-					that._handles.show();
+-				})
+-				.mouseleave(function(){
+-					if (o.disabled) {
+-						return;
+-					}
+-					if (!that.resizing) {
+-						$(this).addClass("ui-resizable-autohide");
+-						that._handles.hide();
+-					}
+-				});
+-		}
+-
+-		//Initialize the mouse interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-
+-		this._mouseDestroy();
+-
+-		var wrapper,
+-			_destroy = function(exp) {
+-				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+-					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+-			};
+-
+-		//TODO: Unwrap at same DOM position
+-		if (this.elementIsWrapper) {
+-			_destroy(this.element);
+-			wrapper = this.element;
+-			this.originalElement.css({
+-				position: wrapper.css("position"),
+-				width: wrapper.outerWidth(),
+-				height: wrapper.outerHeight(),
+-				top: wrapper.css("top"),
+-				left: wrapper.css("left")
+-			}).insertAfter( wrapper );
+-			wrapper.remove();
+-		}
+-
+-		this.originalElement.css("resize", this.originalResizeStyle);
+-		_destroy(this.originalElement);
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-		var i, handle,
+-			capture = false;
+-
+-		for (i in this.handles) {
+-			handle = $(this.handles[i])[0];
+-			if (handle === event.target || $.contains(handle, event.target)) {
+-				capture = true;
+-			}
+-		}
+-
+-		return !this.options.disabled && capture;
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var curleft, curtop, cursor,
+-			o = this.options,
+-			iniPos = this.element.position(),
+-			el = this.element;
+-
+-		this.resizing = true;
+-
+-		// bugfix for http://dev.jquery.com/ticket/1749
+-		if ( (/absolute/).test( el.css("position") ) ) {
+-			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
+-		} else if (el.is(".ui-draggable")) {
+-			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
+-		}
+-
+-		this._renderProxy();
+-
+-		curleft = num(this.helper.css("left"));
+-		curtop = num(this.helper.css("top"));
+-
+-		if (o.containment) {
+-			curleft += $(o.containment).scrollLeft() || 0;
+-			curtop += $(o.containment).scrollTop() || 0;
+-		}
+-
+-		//Store needed variables
+-		this.offset = this.helper.offset();
+-		this.position = { left: curleft, top: curtop };
+-		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalPosition = { left: curleft, top: curtop };
+-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+-		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+-
+-		//Aspect Ratio
+-		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+-
+-		cursor = $(".ui-resizable-" + this.axis).css("cursor");
+-		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+-
+-		el.addClass("ui-resizable-resizing");
+-		this._propagate("start", event);
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Increase performance, avoid regex
+-		var data,
+-			el = this.helper, props = {},
+-			smp = this.originalMousePosition,
+-			a = this.axis,
+-			prevTop = this.position.top,
+-			prevLeft = this.position.left,
+-			prevWidth = this.size.width,
+-			prevHeight = this.size.height,
+-			dx = (event.pageX-smp.left)||0,
+-			dy = (event.pageY-smp.top)||0,
+-			trigger = this._change[a];
+-
+-		if (!trigger) {
+-			return false;
+-		}
+-
+-		// Calculate the attrs that will be change
+-		data = trigger.apply(this, [event, dx, dy]);
+-
+-		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+-		this._updateVirtualBoundaries(event.shiftKey);
+-		if (this._aspectRatio || event.shiftKey) {
+-			data = this._updateRatio(data, event);
+-		}
+-
+-		data = this._respectSize(data, event);
+-
+-		this._updateCache(data);
+-
+-		// plugins callbacks need to be called first
+-		this._propagate("resize", event);
+-
+-		if (this.position.top !== prevTop) {
+-			props.top = this.position.top + "px";
+-		}
+-		if (this.position.left !== prevLeft) {
+-			props.left = this.position.left + "px";
+-		}
+-		if (this.size.width !== prevWidth) {
+-			props.width = this.size.width + "px";
+-		}
+-		if (this.size.height !== prevHeight) {
+-			props.height = this.size.height + "px";
+-		}
+-		el.css(props);
+-
+-		if (!this._helper && this._proportionallyResizeElements.length) {
+-			this._proportionallyResize();
+-		}
+-
+-		// Call the user callback if the element was resized
+-		if ( ! $.isEmptyObject(props) ) {
+-			this._trigger("resize", event, this.ui());
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		this.resizing = false;
+-		var pr, ista, soffseth, soffsetw, s, left, top,
+-			o = this.options, that = this;
+-
+-		if(this._helper) {
+-
+-			pr = this._proportionallyResizeElements;
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+-			soffsetw = ista ? 0 : that.sizeDiff.width;
+-
+-			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-			if (!o.animate) {
+-				this.element.css($.extend(s, { top: top, left: left }));
+-			}
+-
+-			that.helper.height(that.size.height);
+-			that.helper.width(that.size.width);
+-
+-			if (this._helper && !o.animate) {
+-				this._proportionallyResize();
+-			}
+-		}
+-
+-		$("body").css("cursor", "auto");
+-
+-		this.element.removeClass("ui-resizable-resizing");
+-
+-		this._propagate("stop", event);
+-
+-		if (this._helper) {
+-			this.helper.remove();
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	_updateVirtualBoundaries: function(forceAspectRatio) {
+-		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+-			o = this.options;
+-
+-		b = {
+-			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+-			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+-			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+-			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+-		};
+-
+-		if(this._aspectRatio || forceAspectRatio) {
+-			// We want to create an enclosing box whose aspect ration is the requested one
+-			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+-			pMinWidth = b.minHeight * this.aspectRatio;
+-			pMinHeight = b.minWidth / this.aspectRatio;
+-			pMaxWidth = b.maxHeight * this.aspectRatio;
+-			pMaxHeight = b.maxWidth / this.aspectRatio;
+-
+-			if(pMinWidth > b.minWidth) {
+-				b.minWidth = pMinWidth;
+-			}
+-			if(pMinHeight > b.minHeight) {
+-				b.minHeight = pMinHeight;
+-			}
+-			if(pMaxWidth < b.maxWidth) {
+-				b.maxWidth = pMaxWidth;
+-			}
+-			if(pMaxHeight < b.maxHeight) {
+-				b.maxHeight = pMaxHeight;
+-			}
+-		}
+-		this._vBoundaries = b;
+-	},
+-
+-	_updateCache: function(data) {
+-		this.offset = this.helper.offset();
+-		if (isNumber(data.left)) {
+-			this.position.left = data.left;
+-		}
+-		if (isNumber(data.top)) {
+-			this.position.top = data.top;
+-		}
+-		if (isNumber(data.height)) {
+-			this.size.height = data.height;
+-		}
+-		if (isNumber(data.width)) {
+-			this.size.width = data.width;
+-		}
+-	},
+-
+-	_updateRatio: function( data ) {
+-
+-		var cpos = this.position,
+-			csize = this.size,
+-			a = this.axis;
+-
+-		if (isNumber(data.height)) {
+-			data.width = (data.height * this.aspectRatio);
+-		} else if (isNumber(data.width)) {
+-			data.height = (data.width / this.aspectRatio);
+-		}
+-
+-		if (a === "sw") {
+-			data.left = cpos.left + (csize.width - data.width);
+-			data.top = null;
+-		}
+-		if (a === "nw") {
+-			data.top = cpos.top + (csize.height - data.height);
+-			data.left = cpos.left + (csize.width - data.width);
+-		}
+-
+-		return data;
+-	},
+-
+-	_respectSize: function( data ) {
+-
+-		var o = this._vBoundaries,
+-			a = this.axis,
+-			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+-			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+-			dw = this.originalPosition.left + this.originalSize.width,
+-			dh = this.position.top + this.size.height,
+-			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+-		if (isminw) {
+-			data.width = o.minWidth;
+-		}
+-		if (isminh) {
+-			data.height = o.minHeight;
+-		}
+-		if (ismaxw) {
+-			data.width = o.maxWidth;
+-		}
+-		if (ismaxh) {
+-			data.height = o.maxHeight;
+-		}
+-
+-		if (isminw && cw) {
+-			data.left = dw - o.minWidth;
+-		}
+-		if (ismaxw && cw) {
+-			data.left = dw - o.maxWidth;
+-		}
+-		if (isminh && ch) {
+-			data.top = dh - o.minHeight;
+-		}
+-		if (ismaxh && ch) {
+-			data.top = dh - o.maxHeight;
+-		}
+-
+-		// fixing jump error on top/left - bug #2330
+-		if (!data.width && !data.height && !data.left && data.top) {
+-			data.top = null;
+-		} else if (!data.width && !data.height && !data.top && data.left) {
+-			data.left = null;
+-		}
+-
+-		return data;
+-	},
+-
+-	_proportionallyResize: function() {
+-
+-		if (!this._proportionallyResizeElements.length) {
+-			return;
+-		}
+-
+-		var i, j, borders, paddings, prel,
+-			element = this.helper || this.element;
+-
+-		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+-
+-			prel = this._proportionallyResizeElements[i];
+-
+-			if (!this.borderDif) {
+-				this.borderDif = [];
+-				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
+-				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
+-
+-				for ( j = 0; j < borders.length; j++ ) {
+-					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
+-				}
+-			}
+-
+-			prel.css({
+-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+-			});
+-
+-		}
+-
+-	},
+-
+-	_renderProxy: function() {
+-
+-		var el = this.element, o = this.options;
+-		this.elementOffset = el.offset();
+-
+-		if(this._helper) {
+-
+-			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+-
+-			this.helper.addClass(this._helper).css({
+-				width: this.element.outerWidth() - 1,
+-				height: this.element.outerHeight() - 1,
+-				position: "absolute",
+-				left: this.elementOffset.left +"px",
+-				top: this.elementOffset.top +"px",
+-				zIndex: ++o.zIndex //TODO: Don't modify option
+-			});
+-
+-			this.helper
+-				.appendTo("body")
+-				.disableSelection();
+-
+-		} else {
+-			this.helper = this.element;
+-		}
+-
+-	},
+-
+-	_change: {
+-		e: function(event, dx) {
+-			return { width: this.originalSize.width + dx };
+-		},
+-		w: function(event, dx) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { left: sp.left + dx, width: cs.width - dx };
+-		},
+-		n: function(event, dx, dy) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { top: sp.top + dy, height: cs.height - dy };
+-		},
+-		s: function(event, dx, dy) {
+-			return { height: this.originalSize.height + dy };
+-		},
+-		se: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		sw: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		},
+-		ne: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		nw: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		}
+-	},
+-
+-	_propagate: function(n, event) {
+-		$.ui.plugin.call(this, n, [event, this.ui()]);
+-		(n !== "resize" && this._trigger(n, event, this.ui()));
+-	},
+-
+-	plugins: {},
+-
+-	ui: function() {
+-		return {
+-			originalElement: this.originalElement,
+-			element: this.element,
+-			helper: this.helper,
+-			position: this.position,
+-			size: this.size,
+-			originalSize: this.originalSize,
+-			originalPosition: this.originalPosition
+-		};
+-	}
+-
+-});
+-
+-/*
+- * Resizable Extensions
+- */
+-
+-$.ui.plugin.add("resizable", "animate", {
+-
+-	stop: function( event ) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			pr = that._proportionallyResizeElements,
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+-			soffsetw = ista ? 0 : that.sizeDiff.width,
+-			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-		that.element.animate(
+-			$.extend(style, top && left ? { top: top, left: left } : {}), {
+-				duration: o.animateDuration,
+-				easing: o.animateEasing,
+-				step: function() {
+-
+-					var data = {
+-						width: parseInt(that.element.css("width"), 10),
+-						height: parseInt(that.element.css("height"), 10),
+-						top: parseInt(that.element.css("top"), 10),
+-						left: parseInt(that.element.css("left"), 10)
+-					};
+-
+-					if (pr && pr.length) {
+-						$(pr[0]).css({ width: data.width, height: data.height });
+-					}
+-
+-					// propagating resize, and updating values for each animation step
+-					that._updateCache(data);
+-					that._propagate("resize", event);
+-
+-				}
+-			}
+-		);
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "containment", {
+-
+-	start: function() {
+-		var element, p, co, ch, cw, width, height,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			el = that.element,
+-			oc = o.containment,
+-			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+-
+-		if (!ce) {
+-			return;
+-		}
+-
+-		that.containerElement = $(ce);
+-
+-		if (/document/.test(oc) || oc === document) {
+-			that.containerOffset = { left: 0, top: 0 };
+-			that.containerPosition = { left: 0, top: 0 };
+-
+-			that.parentData = {
+-				element: $(document), left: 0, top: 0,
+-				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+-			};
+-		}
+-
+-		// i'm a node, so compute top, left, right, bottom
+-		else {
+-			element = $(ce);
+-			p = [];
+-			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+-
+-			that.containerOffset = element.offset();
+-			that.containerPosition = element.position();
+-			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+-
+-			co = that.containerOffset;
+-			ch = that.containerSize.height;
+-			cw = that.containerSize.width;
+-			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
+-			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+-
+-			that.parentData = {
+-				element: ce, left: co.left, top: co.top, width: width, height: height
+-			};
+-		}
+-	},
+-
+-	resize: function( event ) {
+-		var woset, hoset, isParent, isOffsetRelative,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset, cp = that.position,
+-			pRatio = that._aspectRatio || event.shiftKey,
+-			cop = { top:0, left:0 }, ce = that.containerElement;
+-
+-		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
+-			cop = co;
+-		}
+-
+-		if (cp.left < (that._helper ? co.left : 0)) {
+-			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-			that.position.left = o.helper ? co.left : 0;
+-		}
+-
+-		if (cp.top < (that._helper ? co.top : 0)) {
+-			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-			that.position.top = that._helper ? co.top : 0;
+-		}
+-
+-		that.offset.left = that.parentData.left+that.position.left;
+-		that.offset.top = that.parentData.top+that.position.top;
+-
+-		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
+-		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
+-
+-		isParent = that.containerElement.get(0) === that.element.parent().get(0);
+-		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+-
+-		if(isParent && isOffsetRelative) {
+-			woset -= that.parentData.left;
+-		}
+-
+-		if (woset + that.size.width >= that.parentData.width) {
+-			that.size.width = that.parentData.width - woset;
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-		}
+-
+-		if (hoset + that.size.height >= that.parentData.height) {
+-			that.size.height = that.parentData.height - hoset;
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-		}
+-	},
+-
+-	stop: function(){
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset,
+-			cop = that.containerPosition,
+-			ce = that.containerElement,
+-			helper = $(that.helper),
+-			ho = helper.offset(),
+-			w = helper.outerWidth() - that.sizeDiff.width,
+-			h = helper.outerHeight() - that.sizeDiff.height;
+-
+-		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "alsoResize", {
+-
+-	start: function () {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			_store = function (exp) {
+-				$(exp).each(function() {
+-					var el = $(this);
+-					el.data("ui-resizable-alsoresize", {
+-						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+-						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+-					});
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
+-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+-		}else{
+-			_store(o.alsoResize);
+-		}
+-	},
+-
+-	resize: function (event, ui) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			delta = {
+-				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
+-				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
+-			},
+-
+-			_alsoResize = function (exp, c) {
+-				$(exp).each(function() {
+-					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+-						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+-
+-					$.each(css, function (i, prop) {
+-						var sum = (start[prop]||0) + (delta[prop]||0);
+-						if (sum && sum >= 0) {
+-							style[prop] = sum || null;
+-						}
+-					});
+-
+-					el.css(style);
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
+-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+-		}else{
+-			_alsoResize(o.alsoResize);
+-		}
+-	},
+-
+-	stop: function () {
+-		$(this).removeData("resizable-alsoresize");
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "ghost", {
+-
+-	start: function() {
+-
+-		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
+-
+-		that.ghost = that.originalElement.clone();
+-		that.ghost
+-			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+-			.addClass("ui-resizable-ghost")
+-			.addClass(typeof o.ghost === "string" ? o.ghost : "");
+-
+-		that.ghost.appendTo(that.helper);
+-
+-	},
+-
+-	resize: function(){
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost) {
+-			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+-		}
+-	},
+-
+-	stop: function() {
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost && that.helper) {
+-			that.helper.get(0).removeChild(that.ghost.get(0));
+-		}
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "grid", {
+-
+-	resize: function() {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			cs = that.size,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			a = that.axis,
+-			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
+-			gridX = (grid[0]||1),
+-			gridY = (grid[1]||1),
+-			ox = Math.round((cs.width - os.width) / gridX) * gridX,
+-			oy = Math.round((cs.height - os.height) / gridY) * gridY,
+-			newWidth = os.width + ox,
+-			newHeight = os.height + oy,
+-			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+-			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+-			isMinWidth = o.minWidth && (o.minWidth > newWidth),
+-			isMinHeight = o.minHeight && (o.minHeight > newHeight);
+-
+-		o.grid = grid;
+-
+-		if (isMinWidth) {
+-			newWidth = newWidth + gridX;
+-		}
+-		if (isMinHeight) {
+-			newHeight = newHeight + gridY;
+-		}
+-		if (isMaxWidth) {
+-			newWidth = newWidth - gridX;
+-		}
+-		if (isMaxHeight) {
+-			newHeight = newHeight - gridY;
+-		}
+-
+-		if (/^(se|s|e)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-		} else if (/^(ne)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-		} else if (/^(sw)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.left = op.left - ox;
+-		} else {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-			that.position.left = op.left - ox;
+-		}
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.widget("ui.selectable", $.ui.mouse, {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoRefresh: true,
+-		distance: 0,
+-		filter: "*",
+-		tolerance: "touch",
+-
+-		// callbacks
+-		selected: null,
+-		selecting: null,
+-		start: null,
+-		stop: null,
+-		unselected: null,
+-		unselecting: null
+-	},
+-	_create: function() {
+-		var selectees,
+-			that = this;
+-
+-		this.element.addClass("ui-selectable");
+-
+-		this.dragged = false;
+-
+-		// cache selectee children based on filter
+-		this.refresh = function() {
+-			selectees = $(that.options.filter, that.element[0]);
+-			selectees.addClass("ui-selectee");
+-			selectees.each(function() {
+-				var $this = $(this),
+-					pos = $this.offset();
+-				$.data(this, "selectable-item", {
+-					element: this,
+-					$element: $this,
+-					left: pos.left,
+-					top: pos.top,
+-					right: pos.left + $this.outerWidth(),
+-					bottom: pos.top + $this.outerHeight(),
+-					startselected: false,
+-					selected: $this.hasClass("ui-selected"),
+-					selecting: $this.hasClass("ui-selecting"),
+-					unselecting: $this.hasClass("ui-unselecting")
+-				});
+-			});
+-		};
+-		this.refresh();
+-
+-		this.selectees = selectees.addClass("ui-selectee");
+-
+-		this._mouseInit();
+-
+-		this.helper = $("<div class='ui-selectable-helper'></div>");
+-	},
+-
+-	_destroy: function() {
+-		this.selectees
+-			.removeClass("ui-selectee")
+-			.removeData("selectable-item");
+-		this.element
+-			.removeClass("ui-selectable ui-selectable-disabled");
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseStart: function(event) {
+-		var that = this,
+-			options = this.options;
+-
+-		this.opos = [event.pageX, event.pageY];
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		this.selectees = $(options.filter, this.element[0]);
+-
+-		this._trigger("start", event);
+-
+-		$(options.appendTo).append(this.helper);
+-		// position helper (lasso)
+-		this.helper.css({
+-			"left": event.pageX,
+-			"top": event.pageY,
+-			"width": 0,
+-			"height": 0
+-		});
+-
+-		if (options.autoRefresh) {
+-			this.refresh();
+-		}
+-
+-		this.selectees.filter(".ui-selected").each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.startselected = true;
+-			if (!event.metaKey && !event.ctrlKey) {
+-				selectee.$element.removeClass("ui-selected");
+-				selectee.selected = false;
+-				selectee.$element.addClass("ui-unselecting");
+-				selectee.unselecting = true;
+-				// selectable UNSELECTING callback
+-				that._trigger("unselecting", event, {
+-					unselecting: selectee.element
+-				});
+-			}
+-		});
+-
+-		$(event.target).parents().addBack().each(function() {
+-			var doSelect,
+-				selectee = $.data(this, "selectable-item");
+-			if (selectee) {
+-				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+-				selectee.$element
+-					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+-					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+-				selectee.unselecting = !doSelect;
+-				selectee.selecting = doSelect;
+-				selectee.selected = doSelect;
+-				// selectable (UN)SELECTING callback
+-				if (doSelect) {
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				} else {
+-					that._trigger("unselecting", event, {
+-						unselecting: selectee.element
+-					});
+-				}
+-				return false;
+-			}
+-		});
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		this.dragged = true;
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		var tmp,
+-			that = this,
+-			options = this.options,
+-			x1 = this.opos[0],
+-			y1 = this.opos[1],
+-			x2 = event.pageX,
+-			y2 = event.pageY;
+-
+-		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+-		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+-		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+-
+-		this.selectees.each(function() {
+-			var selectee = $.data(this, "selectable-item"),
+-				hit = false;
+-
+-			//prevent helper from being selected if appendTo: selectable
+-			if (!selectee || selectee.element === that.element[0]) {
+-				return;
+-			}
+-
+-			if (options.tolerance === "touch") {
+-				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+-			} else if (options.tolerance === "fit") {
+-				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+-			}
+-
+-			if (hit) {
+-				// SELECT
+-				if (selectee.selected) {
+-					selectee.$element.removeClass("ui-selected");
+-					selectee.selected = false;
+-				}
+-				if (selectee.unselecting) {
+-					selectee.$element.removeClass("ui-unselecting");
+-					selectee.unselecting = false;
+-				}
+-				if (!selectee.selecting) {
+-					selectee.$element.addClass("ui-selecting");
+-					selectee.selecting = true;
+-					// selectable SELECTING callback
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				}
+-			} else {
+-				// UNSELECT
+-				if (selectee.selecting) {
+-					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						selectee.$element.addClass("ui-selected");
+-						selectee.selected = true;
+-					} else {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						if (selectee.startselected) {
+-							selectee.$element.addClass("ui-unselecting");
+-							selectee.unselecting = true;
+-						}
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-				if (selectee.selected) {
+-					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+-						selectee.$element.removeClass("ui-selected");
+-						selectee.selected = false;
+-
+-						selectee.$element.addClass("ui-unselecting");
+-						selectee.unselecting = true;
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-			}
+-		});
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-		var that = this;
+-
+-		this.dragged = false;
+-
+-		$(".ui-unselecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-unselecting");
+-			selectee.unselecting = false;
+-			selectee.startselected = false;
+-			that._trigger("unselected", event, {
+-				unselected: selectee.element
+-			});
+-		});
+-		$(".ui-selecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+-			selectee.selecting = false;
+-			selectee.selected = true;
+-			selectee.startselected = true;
+-			that._trigger("selected", event, {
+-				selected: selectee.element
+-			});
+-		});
+-		this._trigger("stop", event);
+-
+-		this.helper.remove();
+-
+-		return false;
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-/*jshint loopfunc: true */
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-function isFloating(item) {
+-	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+-}
+-
+-$.widget("ui.sortable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "sort",
+-	ready: false,
+-	options: {
+-		appendTo: "parent",
+-		axis: false,
+-		connectWith: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		dropOnEmpty: true,
+-		forcePlaceholderSize: false,
+-		forceHelperSize: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		items: "> *",
+-		opacity: false,
+-		placeholder: false,
+-		revert: false,
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		scope: "default",
+-		tolerance: "intersect",
+-		zIndex: 1000,
+-
+-		// callbacks
+-		activate: null,
+-		beforeStop: null,
+-		change: null,
+-		deactivate: null,
+-		out: null,
+-		over: null,
+-		receive: null,
+-		remove: null,
+-		sort: null,
+-		start: null,
+-		stop: null,
+-		update: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options;
+-		this.containerCache = {};
+-		this.element.addClass("ui-sortable");
+-
+-		//Get the items
+-		this.refresh();
+-
+-		//Let's determine if the items are being displayed horizontally
+-		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
+-
+-		//Let's determine the parent's offset
+-		this.offset = this.element.offset();
+-
+-		//Initialize mouse events for interaction
+-		this._mouseInit();
+-
+-		//We're ready to go
+-		this.ready = true;
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass("ui-sortable ui-sortable-disabled");
+-		this._mouseDestroy();
+-
+-		for ( var i = this.items.length - 1; i >= 0; i-- ) {
+-			this.items[i].item.removeData(this.widgetName + "-item");
+-		}
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value){
+-		if ( key === "disabled" ) {
+-			this.options[ key ] = value;
+-
+-			this.widget().toggleClass( "ui-sortable-disabled", !!value );
+-		} else {
+-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
+-			$.Widget.prototype._setOption.apply(this, arguments);
+-		}
+-	},
+-
+-	_mouseCapture: function(event, overrideHandle) {
+-		var currentItem = null,
+-			validHandle = false,
+-			that = this;
+-
+-		if (this.reverting) {
+-			return false;
+-		}
+-
+-		if(this.options.disabled || this.options.type === "static") {
+-			return false;
+-		}
+-
+-		//We have to refresh the items data once first
+-		this._refreshItems(event);
+-
+-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+-		$(event.target).parents().each(function() {
+-			if($.data(this, that.widgetName + "-item") === that) {
+-				currentItem = $(this);
+-				return false;
+-			}
+-		});
+-		if($.data(event.target, that.widgetName + "-item") === that) {
+-			currentItem = $(event.target);
+-		}
+-
+-		if(!currentItem) {
+-			return false;
+-		}
+-		if(this.options.handle && !overrideHandle) {
+-			$(this.options.handle, currentItem).find("*").addBack().each(function() {
+-				if(this === event.target) {
+-					validHandle = true;
+-				}
+-			});
+-			if(!validHandle) {
+-				return false;
+-			}
+-		}
+-
+-		this.currentItem = currentItem;
+-		this._removeCurrentsFromItems();
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event, overrideHandle, noActivation) {
+-
+-		var i, body,
+-			o = this.options;
+-
+-		this.currentContainer = this;
+-
+-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+-		this.refreshPositions();
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Get the next scrolling parent
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.currentItem.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		// Only after we got the offset, we can change the helper's position to absolute
+-		// TODO: Still need to figure out a way to make relative sorting possible
+-		this.helper.css("position", "absolute");
+-		this.cssPosition = this.helper.css("position");
+-
+-		//Generate the original position
+-		this.originalPosition = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Cache the former DOM position
+-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+-
+-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.currentItem.hide();
+-		}
+-
+-		//Create the placeholder
+-		this._createPlaceholder();
+-
+-		//Set a containment if given in the options
+-		if(o.containment) {
+-			this._setContainment();
+-		}
+-
+-		if( o.cursor && o.cursor !== "auto" ) { // cursor option
+-			body = this.document.find( "body" );
+-
+-			// support: IE
+-			this.storedCursor = body.css( "cursor" );
+-			body.css( "cursor", o.cursor );
+-
+-			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+-		}
+-
+-		if(o.opacity) { // opacity option
+-			if (this.helper.css("opacity")) {
+-				this._storedOpacity = this.helper.css("opacity");
+-			}
+-			this.helper.css("opacity", o.opacity);
+-		}
+-
+-		if(o.zIndex) { // zIndex option
+-			if (this.helper.css("zIndex")) {
+-				this._storedZIndex = this.helper.css("zIndex");
+-			}
+-			this.helper.css("zIndex", o.zIndex);
+-		}
+-
+-		//Prepare scrolling
+-		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-			this.overflowOffset = this.scrollParent.offset();
+-		}
+-
+-		//Call callbacks
+-		this._trigger("start", event, this._uiHash());
+-
+-		//Recache the helper size
+-		if(!this._preserveHelperProportions) {
+-			this._cacheHelperProportions();
+-		}
+-
+-
+-		//Post "activate" events to possible containers
+-		if( !noActivation ) {
+-			for ( i = this.containers.length - 1; i >= 0; i-- ) {
+-				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+-			}
+-		}
+-
+-		//Prepare possible droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-		this.dragging = true;
+-
+-		this.helper.addClass("ui-sortable-helper");
+-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		return true;
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-		var i, item, itemElement, intersection,
+-			o = this.options,
+-			scrolled = false;
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		if (!this.lastPositionAbs) {
+-			this.lastPositionAbs = this.positionAbs;
+-		}
+-
+-		//Do scrolling
+-		if(this.options.scroll) {
+-			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-
+-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-
+-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-
+-			} else {
+-
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-
+-			}
+-
+-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-				$.ui.ddmanager.prepareOffsets(this, event);
+-			}
+-		}
+-
+-		//Regenerate the absolute position used for position checks
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Set the helper position
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-
+-		//Rearrange
+-		for (i = this.items.length - 1; i >= 0; i--) {
+-
+-			//Cache variables and intersection, continue if no intersection
+-			item = this.items[i];
+-			itemElement = item.item[0];
+-			intersection = this._intersectsWithPointer(item);
+-			if (!intersection) {
+-				continue;
+-			}
+-
+-			// Only put the placeholder inside the current Container, skip all
+-			// items form other containers. This works because when moving
+-			// an item from one container to another the
+-			// currentContainer is switched before the placeholder is moved.
+-			//
+-			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
+-			// beetween the outer and inner container.
+-			if (item.instance !== this.currentContainer) {
+-				continue;
+-			}
+-
+-			// cannot intersect with itself
+-			// no useless actions that have been done before
+-			// no action if the item moved is the parent of the item checked
+-			if (itemElement !== this.currentItem[0] &&
+-				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+-				!$.contains(this.placeholder[0], itemElement) &&
+-				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+-			) {
+-
+-				this.direction = intersection === 1 ? "down" : "up";
+-
+-				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+-					this._rearrange(event, item);
+-				} else {
+-					break;
+-				}
+-
+-				this._trigger("change", event, this._uiHash());
+-				break;
+-			}
+-		}
+-
+-		//Post events to containers
+-		this._contactContainers(event);
+-
+-		//Interconnect with droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		//Call callbacks
+-		this._trigger("sort", event, this._uiHash());
+-
+-		this.lastPositionAbs = this.positionAbs;
+-		return false;
+-
+-	},
+-
+-	_mouseStop: function(event, noPropagation) {
+-
+-		if(!event) {
+-			return;
+-		}
+-
+-		//If we are using droppables, inform the manager about the drop
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			$.ui.ddmanager.drop(this, event);
+-		}
+-
+-		if(this.options.revert) {
+-			var that = this,
+-				cur = this.placeholder.offset(),
+-				axis = this.options.axis,
+-				animation = {};
+-
+-			if ( !axis || axis === "x" ) {
+-				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
+-			}
+-			if ( !axis || axis === "y" ) {
+-				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
+-			}
+-			this.reverting = true;
+-			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+-				that._clear(event);
+-			});
+-		} else {
+-			this._clear(event, noPropagation);
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.dragging) {
+-
+-			this._mouseUp({ target: null });
+-
+-			if(this.options.helper === "original") {
+-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-			} else {
+-				this.currentItem.show();
+-			}
+-
+-			//Post deactivating events to containers
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", null, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		if (this.placeholder) {
+-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-			if(this.placeholder[0].parentNode) {
+-				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-			}
+-			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+-				this.helper.remove();
+-			}
+-
+-			$.extend(this, {
+-				helper: null,
+-				dragging: false,
+-				reverting: false,
+-				_noFinalSort: null
+-			});
+-
+-			if(this.domPosition.prev) {
+-				$(this.domPosition.prev).after(this.currentItem);
+-			} else {
+-				$(this.domPosition.parent).prepend(this.currentItem);
+-			}
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	serialize: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			str = [];
+-		o = o || {};
+-
+-		$(items).each(function() {
+-			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+-			if (res) {
+-				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+-			}
+-		});
+-
+-		if(!str.length && o.key) {
+-			str.push(o.key + "=");
+-		}
+-
+-		return str.join("&");
+-
+-	},
+-
+-	toArray: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			ret = [];
+-
+-		o = o || {};
+-
+-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+-		return ret;
+-
+-	},
+-
+-	/* Be careful with the following core functions */
+-	_intersectsWith: function(item) {
+-
+-		var x1 = this.positionAbs.left,
+-			x2 = x1 + this.helperProportions.width,
+-			y1 = this.positionAbs.top,
+-			y2 = y1 + this.helperProportions.height,
+-			l = item.left,
+-			r = l + item.width,
+-			t = item.top,
+-			b = t + item.height,
+-			dyClick = this.offset.click.top,
+-			dxClick = this.offset.click.left,
+-			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+-			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+-			isOverElement = isOverElementHeight && isOverElementWidth;
+-
+-		if ( this.options.tolerance === "pointer" ||
+-			this.options.forcePointerForContainers ||
+-			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+-		) {
+-			return isOverElement;
+-		} else {
+-
+-			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+-				x2 - (this.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+-				y2 - (this.helperProportions.height / 2) < b ); // Top Half
+-
+-		}
+-	},
+-
+-	_intersectsWithPointer: function(item) {
+-
+-		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+-			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+-			isOverElement = isOverElementHeight && isOverElementWidth,
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (!isOverElement) {
+-			return false;
+-		}
+-
+-		return this.floating ?
+-			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+-			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+-
+-	},
+-
+-	_intersectsWithSides: function(item) {
+-
+-		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+-			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (this.floating && horizontalDirection) {
+-			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+-		} else {
+-			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+-		}
+-
+-	},
+-
+-	_getDragVerticalDirection: function() {
+-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+-		return delta !== 0 && (delta > 0 ? "down" : "up");
+-	},
+-
+-	_getDragHorizontalDirection: function() {
+-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+-		return delta !== 0 && (delta > 0 ? "right" : "left");
+-	},
+-
+-	refresh: function(event) {
+-		this._refreshItems(event);
+-		this.refreshPositions();
+-		return this;
+-	},
+-
+-	_connectWith: function() {
+-		var options = this.options;
+-		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+-	},
+-
+-	_getItemsAsjQuery: function(connected) {
+-
+-		var i, j, cur, inst,
+-			items = [],
+-			queries = [],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && connected) {
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for ( j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+-					}
+-				}
+-			}
+-		}
+-
+-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+-
+-		for (i = queries.length - 1; i >= 0; i--){
+-			queries[i][0].each(function() {
+-				items.push(this);
+-			});
+-		}
+-
+-		return $(items);
+-
+-	},
+-
+-	_removeCurrentsFromItems: function() {
+-
+-		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+-
+-		this.items = $.grep(this.items, function (item) {
+-			for (var j=0; j < list.length; j++) {
+-				if(list[j] === item.item[0]) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		});
+-
+-	},
+-
+-	_refreshItems: function(event) {
+-
+-		this.items = [];
+-		this.containers = [this];
+-
+-		var i, j, cur, inst, targetData, _queries, item, queriesLength,
+-			items = this.items,
+-			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for (j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+-						this.containers.push(inst);
+-					}
+-				}
+-			}
+-		}
+-
+-		for (i = queries.length - 1; i >= 0; i--) {
+-			targetData = queries[i][1];
+-			_queries = queries[i][0];
+-
+-			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+-				item = $(_queries[j]);
+-
+-				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+-
+-				items.push({
+-					item: item,
+-					instance: targetData,
+-					width: 0, height: 0,
+-					left: 0, top: 0
+-				});
+-			}
+-		}
+-
+-	},
+-
+-	refreshPositions: function(fast) {
+-
+-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+-		if(this.offsetParent && this.helper) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		var i, item, t, p;
+-
+-		for (i = this.items.length - 1; i >= 0; i--){
+-			item = this.items[i];
+-
+-			//We ignore calculating positions of all connected containers when we're not over them
+-			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+-				continue;
+-			}
+-
+-			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+-
+-			if (!fast) {
+-				item.width = t.outerWidth();
+-				item.height = t.outerHeight();
+-			}
+-
+-			p = t.offset();
+-			item.left = p.left;
+-			item.top = p.top;
+-		}
+-
+-		if(this.options.custom && this.options.custom.refreshContainers) {
+-			this.options.custom.refreshContainers.call(this);
+-		} else {
+-			for (i = this.containers.length - 1; i >= 0; i--){
+-				p = this.containers[i].element.offset();
+-				this.containers[i].containerCache.left = p.left;
+-				this.containers[i].containerCache.top = p.top;
+-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
+-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	_createPlaceholder: function(that) {
+-		that = that || this;
+-		var className,
+-			o = that.options;
+-
+-		if(!o.placeholder || o.placeholder.constructor === String) {
+-			className = o.placeholder;
+-			o.placeholder = {
+-				element: function() {
+-
+-					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+-						element = $( "<" + nodeName + ">", that.document[0] )
+-							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+-							.removeClass("ui-sortable-helper");
+-
+-					if ( nodeName === "tr" ) {
+-						that.currentItem.children().each(function() {
+-							$( "<td>&#160;</td>", that.document[0] )
+-								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+-								.appendTo( element );
+-						});
+-					} else if ( nodeName === "img" ) {
+-						element.attr( "src", that.currentItem.attr( "src" ) );
+-					}
+-
+-					if ( !className ) {
+-						element.css( "visibility", "hidden" );
+-					}
+-
+-					return element;
+-				},
+-				update: function(container, p) {
+-
+-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+-					if(className && !o.forcePlaceholderSize) {
+-						return;
+-					}
+-
+-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+-					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+-					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+-				}
+-			};
+-		}
+-
+-		//Create the placeholder
+-		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+-
+-		//Append it after the actual current item
+-		that.currentItem.after(that.placeholder);
+-
+-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+-		o.placeholder.update(that, that.placeholder);
+-
+-	},
+-
+-	_contactContainers: function(event) {
+-		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
+-			innermostContainer = null,
+-			innermostIndex = null;
+-
+-		// get innermost container that intersects with item
+-		for (i = this.containers.length - 1; i >= 0; i--) {
+-
+-			// never consider a container that's located within the item itself
+-			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+-				continue;
+-			}
+-
+-			if(this._intersectsWith(this.containers[i].containerCache)) {
+-
+-				// if we've already found a container and it's more "inner" than this, then continue
+-				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+-					continue;
+-				}
+-
+-				innermostContainer = this.containers[i];
+-				innermostIndex = i;
+-
+-			} else {
+-				// container doesn't intersect. trigger "out" event if necessary
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", event, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		// if no intersecting containers found, return
+-		if(!innermostContainer) {
+-			return;
+-		}
+-
+-		// move the item into the container if it's not there already
+-		if(this.containers.length === 1) {
+-			if (!this.containers[innermostIndex].containerCache.over) {
+-				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-				this.containers[innermostIndex].containerCache.over = 1;
+-			}
+-		} else {
+-
+-			//When entering a new container, we will find the item with the least distance and append our item near it
+-			dist = 10000;
+-			itemWithLeastDistance = null;
+-			floating = innermostContainer.floating || isFloating(this.currentItem);
+-			posProperty = floating ? "left" : "top";
+-			sizeProperty = floating ? "width" : "height";
+-			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
+-			for (j = this.items.length - 1; j >= 0; j--) {
+-				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+-					continue;
+-				}
+-				if(this.items[j].item[0] === this.currentItem[0]) {
+-					continue;
+-				}
+-				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
+-					continue;
+-				}
+-				cur = this.items[j].item.offset()[posProperty];
+-				nearBottom = false;
+-				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+-					nearBottom = true;
+-					cur += this.items[j][sizeProperty];
+-				}
+-
+-				if(Math.abs(cur - base) < dist) {
+-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+-					this.direction = nearBottom ? "up": "down";
+-				}
+-			}
+-
+-			//Check if dropOnEmpty is enabled
+-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+-				return;
+-			}
+-
+-			if(this.currentContainer === this.containers[innermostIndex]) {
+-				return;
+-			}
+-
+-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+-			this._trigger("change", event, this._uiHash());
+-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+-			this.currentContainer = this.containers[innermostIndex];
+-
+-			//Update the placeholder
+-			this.options.placeholder.update(this.currentContainer, this.placeholder);
+-
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		}
+-
+-
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+-
+-		//Add the helper to the DOM if that didn't happen already
+-		if(!helper.parents("body").length) {
+-			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+-		}
+-
+-		if(helper[0] === this.currentItem[0]) {
+-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+-		}
+-
+-		if(!helper[0].style.width || o.forceHelperSize) {
+-			helper.width(this.currentItem.width());
+-		}
+-		if(!helper[0].style.height || o.forceHelperSize) {
+-			helper.height(this.currentItem.height());
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		// This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		// with an ugly IE fix
+-		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.currentItem.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var ce, co, over,
+-			o = this.options;
+-		if(o.containment === "parent") {
+-			o.containment = this.helper[0].parentNode;
+-		}
+-		if(o.containment === "document" || o.containment === "window") {
+-			this.containment = [
+-				0 - this.offset.relative.left - this.offset.parent.left,
+-				0 - this.offset.relative.top - this.offset.parent.top,
+-				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
+-				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment)) {
+-			ce = $(o.containment)[0];
+-			co = $(o.containment).offset();
+-			over = ($(ce).css("overflow") !== "hidden");
+-
+-			this.containment = [
+-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+-			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var top, left,
+-			o = this.options,
+-			pageX = event.pageX,
+-			pageY = event.pageY,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		// This is another very weird special case that only happens for relative elements:
+-		// 1. If the css position is relative
+-		// 2. and the scroll parent is the document or similar to the offset parent
+-		// we have to refresh the relative offset during the scroll so there are no jumps
+-		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+-			this.offset.relative = this._getRelativeOffset();
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-
+-			if(this.containment) {
+-				if(event.pageX - this.offset.click.left < this.containment[0]) {
+-					pageX = this.containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < this.containment[1]) {
+-					pageY = this.containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > this.containment[2]) {
+-					pageX = this.containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > this.containment[3]) {
+-					pageY = this.containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+-				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+-				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																// The absolute mouse position
+-				this.offset.click.top -													// Click offset (relative to the element)
+-				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX -																// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_rearrange: function(event, i, a, hardRefresh) {
+-
+-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+-
+-		//Various things done here to improve the performance:
+-		// 1. we create a setTimeout, that calls refreshPositions
+-		// 2. on the instance, we have a counter variable, that get's higher after every append
+-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+-		// 4. this lets only the last addition to the timeout stack through
+-		this.counter = this.counter ? ++this.counter : 1;
+-		var counter = this.counter;
+-
+-		this._delay(function() {
+-			if(counter === this.counter) {
+-				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+-			}
+-		});
+-
+-	},
+-
+-	_clear: function(event, noPropagation) {
+-
+-		this.reverting = false;
+-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+-		// everything else normalized again
+-		var i,
+-			delayedTriggers = [];
+-
+-		// We first have to update the dom position of the actual currentItem
+-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+-		if(!this._noFinalSort && this.currentItem.parent().length) {
+-			this.placeholder.before(this.currentItem);
+-		}
+-		this._noFinalSort = null;
+-
+-		if(this.helper[0] === this.currentItem[0]) {
+-			for(i in this._storedCSS) {
+-				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+-					this._storedCSS[i] = "";
+-				}
+-			}
+-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-		} else {
+-			this.currentItem.show();
+-		}
+-
+-		if(this.fromOutside && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+-		}
+-		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+-		}
+-
+-		// Check if the items Container has Changed and trigger appropriate
+-		// events.
+-		if (this !== this.currentContainer) {
+-			if(!noPropagation) {
+-				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
+-			}
+-		}
+-
+-
+-		//Post events to containers
+-		for (i = this.containers.length - 1; i >= 0; i--){
+-			if(!noPropagation) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-			}
+-			if(this.containers[i].containerCache.over) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-				this.containers[i].containerCache.over = 0;
+-			}
+-		}
+-
+-		//Do what was originally in plugins
+-		if ( this.storedCursor ) {
+-			this.document.find( "body" ).css( "cursor", this.storedCursor );
+-			this.storedStylesheet.remove();
+-		}
+-		if(this._storedOpacity) {
+-			this.helper.css("opacity", this._storedOpacity);
+-		}
+-		if(this._storedZIndex) {
+-			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+-		}
+-
+-		this.dragging = false;
+-		if(this.cancelHelperRemoval) {
+-			if(!noPropagation) {
+-				this._trigger("beforeStop", event, this._uiHash());
+-				for (i=0; i < delayedTriggers.length; i++) {
+-					delayedTriggers[i].call(this, event);
+-				} //Trigger all delayed events
+-				this._trigger("stop", event, this._uiHash());
+-			}
+-
+-			this.fromOutside = false;
+-			return false;
+-		}
+-
+-		if(!noPropagation) {
+-			this._trigger("beforeStop", event, this._uiHash());
+-		}
+-
+-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-
+-		if(!noPropagation) {
+-			for (i=0; i < delayedTriggers.length; i++) {
+-				delayedTriggers[i].call(this, event);
+-			} //Trigger all delayed events
+-			this._trigger("stop", event, this._uiHash());
+-		}
+-
+-		this.fromOutside = false;
+-		return true;
+-
+-	},
+-
+-	_trigger: function() {
+-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+-			this.cancel();
+-		}
+-	},
+-
+-	_uiHash: function(_inst) {
+-		var inst = _inst || this;
+-		return {
+-			helper: inst.helper,
+-			placeholder: inst.placeholder || $([]),
+-			position: inst.position,
+-			originalPosition: inst.originalPosition,
+-			offset: inst.positionAbs,
+-			item: inst.currentItem,
+-			sender: _inst ? _inst.element : null
+-		};
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var uid = 0,
+-	hideProps = {},
+-	showProps = {};
+-
+-hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
+-	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
+-showProps.height = showProps.paddingTop = showProps.paddingBottom =
+-	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
+-
+-$.widget( "ui.accordion", {
+-	version: "1.10.3",
+-	options: {
+-		active: 0,
+-		animate: {},
+-		collapsible: false,
+-		event: "click",
+-		header: "> li > :first-child,> :not(li):even",
+-		heightStyle: "auto",
+-		icons: {
+-			activeHeader: "ui-icon-triangle-1-s",
+-			header: "ui-icon-triangle-1-e"
+-		},
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null
+-	},
+-
+-	_create: function() {
+-		var options = this.options;
+-		this.prevShow = this.prevHide = $();
+-		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+-			// ARIA
+-			.attr( "role", "tablist" );
+-
+-		// don't allow collapsible: false and active: false / null
+-		if ( !options.collapsible && (options.active === false || options.active == null) ) {
+-			options.active = 0;
+-		}
+-
+-		this._processPanels();
+-		// handle negative values
+-		if ( options.active < 0 ) {
+-			options.active += this.headers.length;
+-		}
+-		this._refresh();
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			header: this.active,
+-			panel: !this.active.length ? $() : this.active.next(),
+-			content: !this.active.length ? $() : this.active.next()
+-		};
+-	},
+-
+-	_createIcons: function() {
+-		var icons = this.options.icons;
+-		if ( icons ) {
+-			$( "<span>" )
+-				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+-				.prependTo( this.headers );
+-			this.active.children( ".ui-accordion-header-icon" )
+-				.removeClass( icons.header )
+-				.addClass( icons.activeHeader );
+-			this.headers.addClass( "ui-accordion-icons" );
+-		}
+-	},
+-
+-	_destroyIcons: function() {
+-		this.headers
+-			.removeClass( "ui-accordion-icons" )
+-			.children( ".ui-accordion-header-icon" )
+-				.remove();
+-	},
+-
+-	_destroy: function() {
+-		var contents;
+-
+-		// clean up main element
+-		this.element
+-			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+-			.removeAttr( "role" );
+-
+-		// clean up headers
+-		this.headers
+-			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-selected" )
+-			.removeAttr( "aria-controls" )
+-			.removeAttr( "tabIndex" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		this._destroyIcons();
+-
+-		// clean up content panels
+-		contents = this.headers.next()
+-			.css( "display", "" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-expanded" )
+-			.removeAttr( "aria-hidden" )
+-			.removeAttr( "aria-labelledby" )
+-			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		if ( this.options.heightStyle !== "content" ) {
+-			contents.css( "height", "" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "event" ) {
+-			if ( this.options.event ) {
+-				this._off( this.headers, this.options.event );
+-			}
+-			this._setupEvents( value );
+-		}
+-
+-		this._super( key, value );
+-
+-		// setting collapsible: false while collapsed; open first panel
+-		if ( key === "collapsible" && !value && this.options.active === false ) {
+-			this._activate( 0 );
+-		}
+-
+-		if ( key === "icons" ) {
+-			this._destroyIcons();
+-			if ( value ) {
+-				this._createIcons();
+-			}
+-		}
+-
+-		// #5332 - opacity doesn't cascade to positioned elements in IE
+-		// so we need to add the disabled class to the headers and panels
+-		if ( key === "disabled" ) {
+-			this.headers.add( this.headers.next() )
+-				.toggleClass( "ui-state-disabled", !!value );
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		if ( event.altKey || event.ctrlKey ) {
+-			return;
+-		}
+-
+-		var keyCode = $.ui.keyCode,
+-			length = this.headers.length,
+-			currentIndex = this.headers.index( event.target ),
+-			toFocus = false;
+-
+-		switch ( event.keyCode ) {
+-			case keyCode.RIGHT:
+-			case keyCode.DOWN:
+-				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+-				break;
+-			case keyCode.LEFT:
+-			case keyCode.UP:
+-				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+-				break;
+-			case keyCode.SPACE:
+-			case keyCode.ENTER:
+-				this._eventHandler( event );
+-				break;
+-			case keyCode.HOME:
+-				toFocus = this.headers[ 0 ];
+-				break;
+-			case keyCode.END:
+-				toFocus = this.headers[ length - 1 ];
+-				break;
+-		}
+-
+-		if ( toFocus ) {
+-			$( event.target ).attr( "tabIndex", -1 );
+-			$( toFocus ).attr( "tabIndex", 0 );
+-			toFocus.focus();
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_panelKeyDown : function( event ) {
+-		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+-			$( event.currentTarget ).prev().focus();
+-		}
+-	},
+-
+-	refresh: function() {
+-		var options = this.options;
+-		this._processPanels();
+-
+-		// was collapsed or no panel
+-		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// active false only when collapsible is true
+-		} else if ( options.active === false ) {
+-			this._activate( 0 );
+-		// was active, but active panel is gone
+-		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining panel are disabled
+-			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous panel
+-			} else {
+-				this._activate( Math.max( 0, options.active - 1 ) );
+-			}
+-		// was active, active panel still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.headers.index( this.active );
+-		}
+-
+-		this._destroyIcons();
+-
+-		this._refresh();
+-	},
+-
+-	_processPanels: function() {
+-		this.headers = this.element.find( this.options.header )
+-			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+-
+-		this.headers.next()
+-			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+-			.filter(":not(.ui-accordion-content-active)")
+-			.hide();
+-	},
+-
+-	_refresh: function() {
+-		var maxHeight,
+-			options = this.options,
+-			heightStyle = options.heightStyle,
+-			parent = this.element.parent(),
+-			accordionId = this.accordionId = "ui-accordion-" +
+-				(this.element.attr( "id" ) || ++uid);
+-
+-		this.active = this._findActive( options.active )
+-			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+-			.removeClass( "ui-corner-all" );
+-		this.active.next()
+-			.addClass( "ui-accordion-content-active" )
+-			.show();
+-
+-		this.headers
+-			.attr( "role", "tab" )
+-			.each(function( i ) {
+-				var header = $( this ),
+-					headerId = header.attr( "id" ),
+-					panel = header.next(),
+-					panelId = panel.attr( "id" );
+-				if ( !headerId ) {
+-					headerId = accordionId + "-header-" + i;
+-					header.attr( "id", headerId );
+-				}
+-				if ( !panelId ) {
+-					panelId = accordionId + "-panel-" + i;
+-					panel.attr( "id", panelId );
+-				}
+-				header.attr( "aria-controls", panelId );
+-				panel.attr( "aria-labelledby", headerId );
+-			})
+-			.next()
+-				.attr( "role", "tabpanel" );
+-
+-		this.headers
+-			.not( this.active )
+-			.attr({
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "false",
+-					"aria-hidden": "true"
+-				})
+-				.hide();
+-
+-		// make sure at least one header is in the tab order
+-		if ( !this.active.length ) {
+-			this.headers.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active.attr({
+-				"aria-selected": "true",
+-				tabIndex: 0
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-
+-		this._createIcons();
+-
+-		this._setupEvents( options.event );
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.headers.each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.headers.next()
+-				.each(function() {
+-					$( this ).height( Math.max( 0, maxHeight -
+-						$( this ).innerHeight() + $( this ).height() ) );
+-				})
+-				.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.headers.next()
+-				.each(function() {
+-					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+-				})
+-				.height( maxHeight );
+-		}
+-	},
+-
+-	_activate: function( index ) {
+-		var active = this._findActive( index )[ 0 ];
+-
+-		// trying to activate the already active panel
+-		if ( active === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the currently active header
+-		active = active || this.active[ 0 ];
+-
+-		this._eventHandler({
+-			target: active,
+-			currentTarget: active,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( selector ) {
+-		return typeof selector === "number" ? this.headers.eq( selector ) : $();
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			keydown: "_keydown"
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.headers.add( this.headers.next() ) );
+-		this._on( this.headers, events );
+-		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+-		this._hoverable( this.headers );
+-		this._focusable( this.headers );
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			clicked = $( event.currentTarget ),
+-			clickedIsActive = clicked[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : clicked.next(),
+-			toHide = active.next(),
+-			eventData = {
+-				oldHeader: active,
+-				oldPanel: toHide,
+-				newHeader: collapsing ? $() : clicked,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if (
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.headers.index( clicked );
+-
+-		// when the call to ._toggle() comes after the class changes
+-		// it causes a very odd bug in IE 8 (see #6720)
+-		this.active = clickedIsActive ? $() : clicked;
+-		this._toggle( eventData );
+-
+-		// switch classes
+-		// corner classes on the previously active header stay after the animation
+-		active.removeClass( "ui-accordion-header-active ui-state-active" );
+-		if ( options.icons ) {
+-			active.children( ".ui-accordion-header-icon" )
+-				.removeClass( options.icons.activeHeader )
+-				.addClass( options.icons.header );
+-		}
+-
+-		if ( !clickedIsActive ) {
+-			clicked
+-				.removeClass( "ui-corner-all" )
+-				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+-			if ( options.icons ) {
+-				clicked.children( ".ui-accordion-header-icon" )
+-					.removeClass( options.icons.header )
+-					.addClass( options.icons.activeHeader );
+-			}
+-
+-			clicked
+-				.next()
+-				.addClass( "ui-accordion-content-active" );
+-		}
+-	},
+-
+-	_toggle: function( data ) {
+-		var toShow = data.newPanel,
+-			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+-
+-		// handle activating a panel during the animation for another activation
+-		this.prevShow.add( this.prevHide ).stop( true, true );
+-		this.prevShow = toShow;
+-		this.prevHide = toHide;
+-
+-		if ( this.options.animate ) {
+-			this._animate( toShow, toHide, data );
+-		} else {
+-			toHide.hide();
+-			toShow.show();
+-			this._toggleComplete( data );
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		toHide.prev().attr( "aria-selected", "false" );
+-		// if we're switching panels, remove the old header from the tab order
+-		// if we're opening from collapsed state, remove the previous header from the tab order
+-		// if we're collapsing, then keep the collapsing header in the tab order
+-		if ( toShow.length && toHide.length ) {
+-			toHide.prev().attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.headers.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow
+-			.attr({
+-				"aria-expanded": "true",
+-				"aria-hidden": "false"
+-			})
+-			.prev()
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-	},
+-
+-	_animate: function( toShow, toHide, data ) {
+-		var total, easing, duration,
+-			that = this,
+-			adjust = 0,
+-			down = toShow.length &&
+-				( !toHide.length || ( toShow.index() < toHide.index() ) ),
+-			animate = this.options.animate || {},
+-			options = down && animate.down || animate,
+-			complete = function() {
+-				that._toggleComplete( data );
+-			};
+-
+-		if ( typeof options === "number" ) {
+-			duration = options;
+-		}
+-		if ( typeof options === "string" ) {
+-			easing = options;
+-		}
+-		// fall back from options to animation in case of partial down settings
+-		easing = easing || options.easing || animate.easing;
+-		duration = duration || options.duration || animate.duration;
+-
+-		if ( !toHide.length ) {
+-			return toShow.animate( showProps, duration, easing, complete );
+-		}
+-		if ( !toShow.length ) {
+-			return toHide.animate( hideProps, duration, easing, complete );
+-		}
+-
+-		total = toShow.show().outerHeight();
+-		toHide.animate( hideProps, {
+-			duration: duration,
+-			easing: easing,
+-			step: function( now, fx ) {
+-				fx.now = Math.round( now );
+-			}
+-		});
+-		toShow
+-			.hide()
+-			.animate( showProps, {
+-				duration: duration,
+-				easing: easing,
+-				complete: complete,
+-				step: function( now, fx ) {
+-					fx.now = Math.round( now );
+-					if ( fx.prop !== "height" ) {
+-						adjust += fx.now;
+-					} else if ( that.options.heightStyle !== "content" ) {
+-						fx.now = Math.round( total - toHide.outerHeight() - adjust );
+-						adjust = 0;
+-					}
+-				}
+-			});
+-	},
+-
+-	_toggleComplete: function( data ) {
+-		var toHide = data.oldPanel;
+-
+-		toHide
+-			.removeClass( "ui-accordion-content-active" )
+-			.prev()
+-				.removeClass( "ui-corner-top" )
+-				.addClass( "ui-corner-all" );
+-
+-		// Work around for rendering bug in IE (#5421)
+-		if ( toHide.length ) {
+-			toHide.parent()[0].className = toHide.parent()[0].className;
+-		}
+-
+-		this._trigger( "activate", null, data );
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-// used to prevent race conditions with remote data sources
+-var requestIndex = 0;
+-
+-$.widget( "ui.autocomplete", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	options: {
+-		appendTo: null,
+-		autoFocus: false,
+-		delay: 300,
+-		minLength: 1,
+-		position: {
+-			my: "left top",
+-			at: "left bottom",
+-			collision: "none"
+-		},
+-		source: null,
+-
+-		// callbacks
+-		change: null,
+-		close: null,
+-		focus: null,
+-		open: null,
+-		response: null,
+-		search: null,
+-		select: null
+-	},
+-
+-	pending: 0,
+-
+-	_create: function() {
+-		// Some browsers only repeat keydown events, not keypress events,
+-		// so we use the suppressKeyPress flag to determine if we've already
+-		// handled the keydown event. #7269
+-		// Unfortunately the code for & in keypress is the same as the up arrow,
+-		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
+-		// events when we know the keydown event was used to modify the
+-		// search term. #7799
+-		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+-			nodeName = this.element[0].nodeName.toLowerCase(),
+-			isTextarea = nodeName === "textarea",
+-			isInput = nodeName === "input";
+-
+-		this.isMultiLine =
+-			// Textareas are always multi-line
+-			isTextarea ? true :
+-			// Inputs are always single-line, even if inside a contentEditable element
+-			// IE also treats inputs as contentEditable
+-			isInput ? false :
+-			// All other element types are determined by whether or not they're contentEditable
+-			this.element.prop( "isContentEditable" );
+-
+-		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+-		this.isNewMenu = true;
+-
+-		this.element
+-			.addClass( "ui-autocomplete-input" )
+-			.attr( "autocomplete", "off" );
+-
+-		this._on( this.element, {
+-			keydown: function( event ) {
+-				/*jshint maxcomplexity:15*/
+-				if ( this.element.prop( "readOnly" ) ) {
+-					suppressKeyPress = true;
+-					suppressInput = true;
+-					suppressKeyPressRepeat = true;
+-					return;
+-				}
+-
+-				suppressKeyPress = false;
+-				suppressInput = false;
+-				suppressKeyPressRepeat = false;
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					suppressKeyPress = true;
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					suppressKeyPress = true;
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					suppressKeyPress = true;
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					suppressKeyPress = true;
+-					this._keyEvent( "next", event );
+-					break;
+-				case keyCode.ENTER:
+-				case keyCode.NUMPAD_ENTER:
+-					// when menu is open and has focus
+-					if ( this.menu.active ) {
+-						// #6055 - Opera still allows the keypress to occur
+-						// which causes forms to submit
+-						suppressKeyPress = true;
+-						event.preventDefault();
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.TAB:
+-					if ( this.menu.active ) {
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.ESCAPE:
+-					if ( this.menu.element.is( ":visible" ) ) {
+-						this._value( this.term );
+-						this.close( event );
+-						// Different browsers have different default behavior for escape
+-						// Single press can mean undo or clear
+-						// Double press in IE means clear the whole form
+-						event.preventDefault();
+-					}
+-					break;
+-				default:
+-					suppressKeyPressRepeat = true;
+-					// search timeout should be triggered before the input value is changed
+-					this._searchTimeout( event );
+-					break;
+-				}
+-			},
+-			keypress: function( event ) {
+-				if ( suppressKeyPress ) {
+-					suppressKeyPress = false;
+-					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-						event.preventDefault();
+-					}
+-					return;
+-				}
+-				if ( suppressKeyPressRepeat ) {
+-					return;
+-				}
+-
+-				// replicate some key handlers to allow them to repeat in Firefox and Opera
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					this._keyEvent( "next", event );
+-					break;
+-				}
+-			},
+-			input: function( event ) {
+-				if ( suppressInput ) {
+-					suppressInput = false;
+-					event.preventDefault();
+-					return;
+-				}
+-				this._searchTimeout( event );
+-			},
+-			focus: function() {
+-				this.selectedItem = null;
+-				this.previous = this._value();
+-			},
+-			blur: function( event ) {
+-				if ( this.cancelBlur ) {
+-					delete this.cancelBlur;
+-					return;
+-				}
+-
+-				clearTimeout( this.searching );
+-				this.close( event );
+-				this._change( event );
+-			}
+-		});
+-
+-		this._initSource();
+-		this.menu = $( "<ul>" )
+-			.addClass( "ui-autocomplete ui-front" )
+-			.appendTo( this._appendTo() )
+-			.menu({
+-				// disable ARIA support, the live region takes care of that
+-				role: null
+-			})
+-			.hide()
+-			.data( "ui-menu" );
+-
+-		this._on( this.menu.element, {
+-			mousedown: function( event ) {
+-				// prevent moving focus out of the text field
+-				event.preventDefault();
+-
+-				// IE doesn't prevent moving focus even with event.preventDefault()
+-				// so we set a flag to know when we should ignore the blur event
+-				this.cancelBlur = true;
+-				this._delay(function() {
+-					delete this.cancelBlur;
+-				});
+-
+-				// clicking on the scrollbar causes focus to shift to the body
+-				// but we can't detect a mouseup or a click immediately afterward
+-				// so we have to track the next mousedown and close the menu if
+-				// the user clicks somewhere outside of the autocomplete
+-				var menuElement = this.menu.element[ 0 ];
+-				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+-					this._delay(function() {
+-						var that = this;
+-						this.document.one( "mousedown", function( event ) {
+-							if ( event.target !== that.element[ 0 ] &&
+-									event.target !== menuElement &&
+-									!$.contains( menuElement, event.target ) ) {
+-								that.close();
+-							}
+-						});
+-					});
+-				}
+-			},
+-			menufocus: function( event, ui ) {
+-				// support: Firefox
+-				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
+-				if ( this.isNewMenu ) {
+-					this.isNewMenu = false;
+-					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+-						this.menu.blur();
+-
+-						this.document.one( "mousemove", function() {
+-							$( event.target ).trigger( event.originalEvent );
+-						});
+-
+-						return;
+-					}
+-				}
+-
+-				var item = ui.item.data( "ui-autocomplete-item" );
+-				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+-					// use value to match what will end up in the input, if it was a key event
+-					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+-						this._value( item.value );
+-					}
+-				} else {
+-					// Normally the input is populated with the item's value as the
+-					// menu is navigated, causing screen readers to notice a change and
+-					// announce the item. Since the focus event was canceled, this doesn't
+-					// happen, so we update the live region so that screen readers can
+-					// still notice the change and announce it.
+-					this.liveRegion.text( item.value );
+-				}
+-			},
+-			menuselect: function( event, ui ) {
+-				var item = ui.item.data( "ui-autocomplete-item" ),
+-					previous = this.previous;
+-
+-				// only trigger when focus was lost (click on menu)
+-				if ( this.element[0] !== this.document[0].activeElement ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// #6109 - IE triggers two focus events and the second
+-					// is asynchronous, so we need to reset the previous
+-					// term synchronously and asynchronously :-(
+-					this._delay(function() {
+-						this.previous = previous;
+-						this.selectedItem = item;
+-					});
+-				}
+-
+-				if ( false !== this._trigger( "select", event, { item: item } ) ) {
+-					this._value( item.value );
+-				}
+-				// reset the term after the select event
+-				// this allows custom select handling to work properly
+-				this.term = this._value();
+-
+-				this.close( event );
+-				this.selectedItem = item;
+-			}
+-		});
+-
+-		this.liveRegion = $( "<span>", {
+-				role: "status",
+-				"aria-live": "polite"
+-			})
+-			.addClass( "ui-helper-hidden-accessible" )
+-			.insertBefore( this.element );
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		clearTimeout( this.searching );
+-		this.element
+-			.removeClass( "ui-autocomplete-input" )
+-			.removeAttr( "autocomplete" );
+-		this.menu.element.remove();
+-		this.liveRegion.remove();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "source" ) {
+-			this._initSource();
+-		}
+-		if ( key === "appendTo" ) {
+-			this.menu.element.appendTo( this._appendTo() );
+-		}
+-		if ( key === "disabled" && value && this.xhr ) {
+-			this.xhr.abort();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-
+-		if ( element ) {
+-			element = element.jquery || element.nodeType ?
+-				$( element ) :
+-				this.document.find( element ).eq( 0 );
+-		}
+-
+-		if ( !element ) {
+-			element = this.element.closest( ".ui-front" );
+-		}
+-
+-		if ( !element.length ) {
+-			element = this.document[0].body;
+-		}
+-
+-		return element;
+-	},
+-
+-	_initSource: function() {
+-		var array, url,
+-			that = this;
+-		if ( $.isArray(this.options.source) ) {
+-			array = this.options.source;
+-			this.source = function( request, response ) {
+-				response( $.ui.autocomplete.filter( array, request.term ) );
+-			};
+-		} else if ( typeof this.options.source === "string" ) {
+-			url = this.options.source;
+-			this.source = function( request, response ) {
+-				if ( that.xhr ) {
+-					that.xhr.abort();
+-				}
+-				that.xhr = $.ajax({
+-					url: url,
+-					data: request,
+-					dataType: "json",
+-					success: function( data ) {
+-						response( data );
+-					},
+-					error: function() {
+-						response( [] );
+-					}
+-				});
+-			};
+-		} else {
+-			this.source = this.options.source;
+-		}
+-	},
+-
+-	_searchTimeout: function( event ) {
+-		clearTimeout( this.searching );
+-		this.searching = this._delay(function() {
+-			// only search if the value has changed
+-			if ( this.term !== this._value() ) {
+-				this.selectedItem = null;
+-				this.search( null, event );
+-			}
+-		}, this.options.delay );
+-	},
+-
+-	search: function( value, event ) {
+-		value = value != null ? value : this._value();
+-
+-		// always save the actual value, not the one passed as an argument
+-		this.term = this._value();
+-
+-		if ( value.length < this.options.minLength ) {
+-			return this.close( event );
+-		}
+-
+-		if ( this._trigger( "search", event ) === false ) {
+-			return;
+-		}
+-
+-		return this._search( value );
+-	},
+-
+-	_search: function( value ) {
+-		this.pending++;
+-		this.element.addClass( "ui-autocomplete-loading" );
+-		this.cancelSearch = false;
+-
+-		this.source( { term: value }, this._response() );
+-	},
+-
+-	_response: function() {
+-		var that = this,
+-			index = ++requestIndex;
+-
+-		return function( content ) {
+-			if ( index === requestIndex ) {
+-				that.__response( content );
+-			}
+-
+-			that.pending--;
+-			if ( !that.pending ) {
+-				that.element.removeClass( "ui-autocomplete-loading" );
+-			}
+-		};
+-	},
+-
+-	__response: function( content ) {
+-		if ( content ) {
+-			content = this._normalize( content );
+-		}
+-		this._trigger( "response", null, { content: content } );
+-		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+-			this._suggest( content );
+-			this._trigger( "open" );
+-		} else {
+-			// use ._close() instead of .close() so we don't cancel future searches
+-			this._close();
+-		}
+-	},
+-
+-	close: function( event ) {
+-		this.cancelSearch = true;
+-		this._close( event );
+-	},
+-
+-	_close: function( event ) {
+-		if ( this.menu.element.is( ":visible" ) ) {
+-			this.menu.element.hide();
+-			this.menu.blur();
+-			this.isNewMenu = true;
+-			this._trigger( "close", event );
+-		}
+-	},
+-
+-	_change: function( event ) {
+-		if ( this.previous !== this._value() ) {
+-			this._trigger( "change", event, { item: this.selectedItem } );
+-		}
+-	},
+-
+-	_normalize: function( items ) {
+-		// assume all items have the right format when the first item is complete
+-		if ( items.length && items[0].label && items[0].value ) {
+-			return items;
+-		}
+-		return $.map( items, function( item ) {
+-			if ( typeof item === "string" ) {
+-				return {
+-					label: item,
+-					value: item
+-				};
+-			}
+-			return $.extend({
+-				label: item.label || item.value,
+-				value: item.value || item.label
+-			}, item );
+-		});
+-	},
+-
+-	_suggest: function( items ) {
+-		var ul = this.menu.element.empty();
+-		this._renderMenu( ul, items );
+-		this.isNewMenu = true;
+-		this.menu.refresh();
+-
+-		// size and position menu
+-		ul.show();
+-		this._resizeMenu();
+-		ul.position( $.extend({
+-			of: this.element
+-		}, this.options.position ));
+-
+-		if ( this.options.autoFocus ) {
+-			this.menu.next();
+-		}
+-	},
+-
+-	_resizeMenu: function() {
+-		var ul = this.menu.element;
+-		ul.outerWidth( Math.max(
+-			// Firefox wraps long text (possibly a rounding bug)
+-			// so we add 1px to avoid the wrapping (#7513)
+-			ul.width( "" ).outerWidth() + 1,
+-			this.element.outerWidth()
+-		) );
+-	},
+-
+-	_renderMenu: function( ul, items ) {
+-		var that = this;
+-		$.each( items, function( index, item ) {
+-			that._renderItemData( ul, item );
+-		});
+-	},
+-
+-	_renderItemData: function( ul, item ) {
+-		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+-	},
+-
+-	_renderItem: function( ul, item ) {
+-		return $( "<li>" )
+-			.append( $( "<a>" ).text( item.label ) )
+-			.appendTo( ul );
+-	},
+-
+-	_move: function( direction, event ) {
+-		if ( !this.menu.element.is( ":visible" ) ) {
+-			this.search( null, event );
+-			return;
+-		}
+-		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+-				this.menu.isLastItem() && /^next/.test( direction ) ) {
+-			this._value( this.term );
+-			this.menu.blur();
+-			return;
+-		}
+-		this.menu[ direction ]( event );
+-	},
+-
+-	widget: function() {
+-		return this.menu.element;
+-	},
+-
+-	_value: function() {
+-		return this.valueMethod.apply( this.element, arguments );
+-	},
+-
+-	_keyEvent: function( keyEvent, event ) {
+-		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-			this._move( keyEvent, event );
+-
+-			// prevents moving cursor to beginning/end of the text field in some browsers
+-			event.preventDefault();
+-		}
+-	}
+-});
+-
+-$.extend( $.ui.autocomplete, {
+-	escapeRegex: function( value ) {
+-		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+-	},
+-	filter: function(array, term) {
+-		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+-		return $.grep( array, function(value) {
+-			return matcher.test( value.label || value.value || value );
+-		});
+-	}
+-});
+-
+-
+-// live region extension, adding a `messages` option
+-// NOTE: This is an experimental API. We are still investigating
+-// a full solution for string manipulation and internationalization.
+-$.widget( "ui.autocomplete", $.ui.autocomplete, {
+-	options: {
+-		messages: {
+-			noResults: "No search results.",
+-			results: function( amount ) {
+-				return amount + ( amount > 1 ? " results are" : " result is" ) +
+-					" available, use up and down arrow keys to navigate.";
+-			}
+-		}
+-	},
+-
+-	__response: function( content ) {
+-		var message;
+-		this._superApply( arguments );
+-		if ( this.options.disabled || this.cancelSearch ) {
+-			return;
+-		}
+-		if ( content && content.length ) {
+-			message = this.options.messages.results( content.length );
+-		} else {
+-			message = this.options.messages.noResults;
+-		}
+-		this.liveRegion.text( message );
+-	}
+-});
+-
+-}( jQuery ));
+-(function( $, undefined ) {
+-
+-var lastActive, startXPos, startYPos, clickDragged,
+-	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+-	stateClasses = "ui-state-hover ui-state-active ",
+-	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+-	formResetHandler = function() {
+-		var form = $( this );
+-		setTimeout(function() {
+-			form.find( ":ui-button" ).button( "refresh" );
+-		}, 1 );
+-	},
+-	radioGroup = function( radio ) {
+-		var name = radio.name,
+-			form = radio.form,
+-			radios = $( [] );
+-		if ( name ) {
+-			name = name.replace( /'/g, "\\'" );
+-			if ( form ) {
+-				radios = $( form ).find( "[name='" + name + "']" );
+-			} else {
+-				radios = $( "[name='" + name + "']", radio.ownerDocument )
+-					.filter(function() {
+-						return !this.form;
+-					});
+-			}
+-		}
+-		return radios;
+-	};
+-
+-$.widget( "ui.button", {
+-	version: "1.10.3",
+-	defaultElement: "<button>",
+-	options: {
+-		disabled: null,
+-		text: true,
+-		label: null,
+-		icons: {
+-			primary: null,
+-			secondary: null
+-		}
+-	},
+-	_create: function() {
+-		this.element.closest( "form" )
+-			.unbind( "reset" + this.eventNamespace )
+-			.bind( "reset" + this.eventNamespace, formResetHandler );
+-
+-		if ( typeof this.options.disabled !== "boolean" ) {
+-			this.options.disabled = !!this.element.prop( "disabled" );
+-		} else {
+-			this.element.prop( "disabled", this.options.disabled );
+-		}
+-
+-		this._determineButtonType();
+-		this.hasTitle = !!this.buttonElement.attr( "title" );
+-
+-		var that = this,
+-			options = this.options,
+-			toggleButton = this.type === "checkbox" || this.type === "radio",
+-			activeClass = !toggleButton ? "ui-state-active" : "",
+-			focusClass = "ui-state-focus";
+-
+-		if ( options.label === null ) {
+-			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+-		}
+-
+-		this._hoverable( this.buttonElement );
+-
+-		this.buttonElement
+-			.addClass( baseClasses )
+-			.attr( "role", "button" )
+-			.bind( "mouseenter" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				if ( this === lastActive ) {
+-					$( this ).addClass( "ui-state-active" );
+-				}
+-			})
+-			.bind( "mouseleave" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( activeClass );
+-			})
+-			.bind( "click" + this.eventNamespace, function( event ) {
+-				if ( options.disabled ) {
+-					event.preventDefault();
+-					event.stopImmediatePropagation();
+-				}
+-			});
+-
+-		this.element
+-			.bind( "focus" + this.eventNamespace, function() {
+-				// no need to check disabled, focus won't be triggered anyway
+-				that.buttonElement.addClass( focusClass );
+-			})
+-			.bind( "blur" + this.eventNamespace, function() {
+-				that.buttonElement.removeClass( focusClass );
+-			});
+-
+-		if ( toggleButton ) {
+-			this.element.bind( "change" + this.eventNamespace, function() {
+-				if ( clickDragged ) {
+-					return;
+-				}
+-				that.refresh();
+-			});
+-			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+-			// prevents issue where button state changes but checkbox/radio checked state
+-			// does not in Firefox (see ticket #6970)
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					clickDragged = false;
+-					startXPos = event.pageX;
+-					startYPos = event.pageY;
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+-						clickDragged = true;
+-					}
+-			});
+-		}
+-
+-		if ( this.type === "checkbox" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-			});
+-		} else if ( this.type === "radio" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).addClass( "ui-state-active" );
+-				that.buttonElement.attr( "aria-pressed", "true" );
+-
+-				var radio = that.element[ 0 ];
+-				radioGroup( radio )
+-					.not( radio )
+-					.map(function() {
+-						return $( this ).button( "widget" )[ 0 ];
+-					})
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			});
+-		} else {
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).addClass( "ui-state-active" );
+-					lastActive = this;
+-					that.document.one( "mouseup", function() {
+-						lastActive = null;
+-					});
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).removeClass( "ui-state-active" );
+-				})
+-				.bind( "keydown" + this.eventNamespace, function(event) {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+-						$( this ).addClass( "ui-state-active" );
+-					}
+-				})
+-				// see #8559, we bind to blur here in case the button element loses
+-				// focus between keydown and keyup, it would be left in an "active" state
+-				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+-					$( this ).removeClass( "ui-state-active" );
+-				});
+-
+-			if ( this.buttonElement.is("a") ) {
+-				this.buttonElement.keyup(function(event) {
+-					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+-						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+-						$( this ).click();
+-					}
+-				});
+-			}
+-		}
+-
+-		// TODO: pull out $.Widget's handling for the disabled option into
+-		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+-		// be overridden by individual plugins
+-		this._setOption( "disabled", options.disabled );
+-		this._resetButton();
+-	},
+-
+-	_determineButtonType: function() {
+-		var ancestor, labelSelector, checked;
+-
+-		if ( this.element.is("[type=checkbox]") ) {
+-			this.type = "checkbox";
+-		} else if ( this.element.is("[type=radio]") ) {
+-			this.type = "radio";
+-		} else if ( this.element.is("input") ) {
+-			this.type = "input";
+-		} else {
+-			this.type = "button";
+-		}
+-
+-		if ( this.type === "checkbox" || this.type === "radio" ) {
+-			// we don't search against the document in case the element
+-			// is disconnected from the DOM
+-			ancestor = this.element.parents().last();
+-			labelSelector = "label[for='" + this.element.attr("id") + "']";
+-			this.buttonElement = ancestor.find( labelSelector );
+-			if ( !this.buttonElement.length ) {
+-				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+-				this.buttonElement = ancestor.filter( labelSelector );
+-				if ( !this.buttonElement.length ) {
+-					this.buttonElement = ancestor.find( labelSelector );
+-				}
+-			}
+-			this.element.addClass( "ui-helper-hidden-accessible" );
+-
+-			checked = this.element.is( ":checked" );
+-			if ( checked ) {
+-				this.buttonElement.addClass( "ui-state-active" );
+-			}
+-			this.buttonElement.prop( "aria-pressed", checked );
+-		} else {
+-			this.buttonElement = this.element;
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.buttonElement;
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-helper-hidden-accessible" );
+-		this.buttonElement
+-			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-pressed" )
+-			.html( this.buttonElement.find(".ui-button-text").html() );
+-
+-		if ( !this.hasTitle ) {
+-			this.buttonElement.removeAttr( "title" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-			} else {
+-				this.element.prop( "disabled", false );
+-			}
+-			return;
+-		}
+-		this._resetButton();
+-	},
+-
+-	refresh: function() {
+-		//See #8237 & #8828
+-		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+-
+-		if ( isDisabled !== this.options.disabled ) {
+-			this._setOption( "disabled", isDisabled );
+-		}
+-		if ( this.type === "radio" ) {
+-			radioGroup( this.element[0] ).each(function() {
+-				if ( $( this ).is( ":checked" ) ) {
+-					$( this ).button( "widget" )
+-						.addClass( "ui-state-active" )
+-						.attr( "aria-pressed", "true" );
+-				} else {
+-					$( this ).button( "widget" )
+-						.removeClass( "ui-state-active" )
+-						.attr( "aria-pressed", "false" );
+-				}
+-			});
+-		} else if ( this.type === "checkbox" ) {
+-			if ( this.element.is( ":checked" ) ) {
+-				this.buttonElement
+-					.addClass( "ui-state-active" )
+-					.attr( "aria-pressed", "true" );
+-			} else {
+-				this.buttonElement
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			}
+-		}
+-	},
+-
+-	_resetButton: function() {
+-		if ( this.type === "input" ) {
+-			if ( this.options.label ) {
+-				this.element.val( this.options.label );
+-			}
+-			return;
+-		}
+-		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+-			buttonText = $( "<span></span>", this.document[0] )
+-				.addClass( "ui-button-text" )
+-				.html( this.options.label )
+-				.appendTo( buttonElement.empty() )
+-				.text(),
+-			icons = this.options.icons,
+-			multipleIcons = icons.primary && icons.secondary,
+-			buttonClasses = [];
+-
+-		if ( icons.primary || icons.secondary ) {
+-			if ( this.options.text ) {
+-				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+-			}
+-
+-			if ( icons.primary ) {
+-				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+-			}
+-
+-			if ( icons.secondary ) {
+-				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+-			}
+-
+-			if ( !this.options.text ) {
+-				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+-
+-				if ( !this.hasTitle ) {
+-					buttonElement.attr( "title", $.trim( buttonText ) );
+-				}
+-			}
+-		} else {
+-			buttonClasses.push( "ui-button-text-only" );
+-		}
+-		buttonElement.addClass( buttonClasses.join( " " ) );
+-	}
+-});
+-
+-$.widget( "ui.buttonset", {
+-	version: "1.10.3",
+-	options: {
+-		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+-	},
+-
+-	_create: function() {
+-		this.element.addClass( "ui-buttonset" );
+-	},
+-
+-	_init: function() {
+-		this.refresh();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "disabled" ) {
+-			this.buttons.button( "option", key, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	refresh: function() {
+-		var rtl = this.element.css( "direction" ) === "rtl";
+-
+-		this.buttons = this.element.find( this.options.items )
+-			.filter( ":ui-button" )
+-				.button( "refresh" )
+-			.end()
+-			.not( ":ui-button" )
+-				.button()
+-			.end()
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+-				.filter( ":first" )
+-					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+-				.end()
+-				.filter( ":last" )
+-					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+-				.end()
+-			.end();
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-buttonset" );
+-		this.buttons
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-left ui-corner-right" )
+-			.end()
+-			.button( "destroy" );
+-	}
+-});
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.extend($.ui, { datepicker: { version: "1.10.3" } });
+-
+-var PROP_NAME = "datepicker",
+-	instActive;
+-
+-/* Date picker manager.
+-   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+-   Settings for (groups of) date pickers are maintained in an instance object,
+-   allowing multiple different settings on the same page. */
+-
+-function Datepicker() {
+-	this._curInst = null; // The current instance in use
+-	this._keyEvent = false; // If the last event was a key event
+-	this._disabledInputs = []; // List of date picker inputs that have been disabled
+-	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+-	this._inDialog = false; // True if showing within a "dialog", false if not
+-	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+-	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+-	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+-	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+-	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+-	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+-	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+-	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+-	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+-	this.regional = []; // Available regional settings, indexed by language code
+-	this.regional[""] = { // Default regional settings
+-		closeText: "Done", // Display text for close link
+-		prevText: "Prev", // Display text for previous month link
+-		nextText: "Next", // Display text for next month link
+-		currentText: "Today", // Display text for current month link
+-		monthNames: ["January","February","March","April","May","June",
+-			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
+-		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+-		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+-		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+-		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+-		weekHeader: "Wk", // Column header for week of the year
+-		dateFormat: "mm/dd/yy", // See format options on parseDate
+-		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+-		isRTL: false, // True if right-to-left language, false if left-to-right
+-		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+-		yearSuffix: "" // Additional text to append to the year in the month headers
+-	};
+-	this._defaults = { // Global defaults for all the date picker instances
+-		showOn: "focus", // "focus" for popup on focus,
+-			// "button" for trigger button, or "both" for either
+-		showAnim: "fadeIn", // Name of jQuery animation for popup
+-		showOptions: {}, // Options for enhanced animations
+-		defaultDate: null, // Used when field is blank: actual date,
+-			// +/-number for offset from today, null for today
+-		appendText: "", // Display text following the input box, e.g. showing the format
+-		buttonText: "...", // Text for trigger button
+-		buttonImage: "", // URL for trigger button image
+-		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+-		hideIfNoPrevNext: false, // True to hide next/previous month links
+-			// if not applicable, false to just disable them
+-		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+-		gotoCurrent: false, // True if today link goes back to current selection instead
+-		changeMonth: false, // True if month can be selected directly, false if only prev/next
+-		changeYear: false, // True if year can be selected directly, false if only prev/next
+-		yearRange: "c-10:c+10", // Range of years to display in drop-down,
+-			// either relative to today's year (-nn:+nn), relative to currently displayed year
+-			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+-		showOtherMonths: false, // True to show dates in other months, false to leave blank
+-		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+-		showWeek: false, // True to show week of the year, false to not show it
+-		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+-			// takes a Date and returns the number of the week for it
+-		shortYearCutoff: "+10", // Short year values < this are in the current century,
+-			// > this are in the previous century,
+-			// string value starting with "+" for current year + value
+-		minDate: null, // The earliest selectable date, or null for no limit
+-		maxDate: null, // The latest selectable date, or null for no limit
+-		duration: "fast", // Duration of display/closure
+-		beforeShowDay: null, // Function that takes a date and returns an array with
+-			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+-			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+-		beforeShow: null, // Function that takes an input field and
+-			// returns a set of custom settings for the date picker
+-		onSelect: null, // Define a callback function when a date is selected
+-		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+-		onClose: null, // Define a callback function when the datepicker is closed
+-		numberOfMonths: 1, // Number of months to show at a time
+-		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+-		stepMonths: 1, // Number of months to step back/forward
+-		stepBigMonths: 12, // Number of months to step back/forward for the big links
+-		altField: "", // Selector for an alternate field to store selected dates into
+-		altFormat: "", // The date format to use for the alternate field
+-		constrainInput: true, // The input is constrained by the current date format
+-		showButtonPanel: false, // True to show button panel, false to not show it
+-		autoSize: false, // True to size the input for the date format, false to leave as is
+-		disabled: false // The initial disabled state
+-	};
+-	$.extend(this._defaults, this.regional[""]);
+-	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+-}
+-
+-$.extend(Datepicker.prototype, {
+-	/* Class name added to elements to indicate already configured with a date picker. */
+-	markerClassName: "hasDatepicker",
+-
+-	//Keep track of the maximum number of rows displayed (see #7043)
+-	maxRows: 4,
+-
+-	// TODO rename to "widget" when switching to widget factory
+-	_widgetDatepicker: function() {
+-		return this.dpDiv;
+-	},
+-
+-	/* Override the default settings for all instances of the date picker.
+-	 * @param  settings  object - the new settings to use as defaults (anonymous object)
+-	 * @return the manager object
+-	 */
+-	setDefaults: function(settings) {
+-		extendRemove(this._defaults, settings || {});
+-		return this;
+-	},
+-
+-	/* Attach the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+-	 */
+-	_attachDatepicker: function(target, settings) {
+-		var nodeName, inline, inst;
+-		nodeName = target.nodeName.toLowerCase();
+-		inline = (nodeName === "div" || nodeName === "span");
+-		if (!target.id) {
+-			this.uuid += 1;
+-			target.id = "dp" + this.uuid;
+-		}
+-		inst = this._newInst($(target), inline);
+-		inst.settings = $.extend({}, settings || {});
+-		if (nodeName === "input") {
+-			this._connectDatepicker(target, inst);
+-		} else if (inline) {
+-			this._inlineDatepicker(target, inst);
+-		}
+-	},
+-
+-	/* Create a new instance object. */
+-	_newInst: function(target, inline) {
+-		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+-		return {id: id, input: target, // associated target
+-			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+-			drawMonth: 0, drawYear: 0, // month being drawn
+-			inline: inline, // is datepicker inline or not
+-			dpDiv: (!inline ? this.dpDiv : // presentation div
+-			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+-	},
+-
+-	/* Attach the date picker to an input field. */
+-	_connectDatepicker: function(target, inst) {
+-		var input = $(target);
+-		inst.append = $([]);
+-		inst.trigger = $([]);
+-		if (input.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		this._attachments(input, inst);
+-		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+-			keypress(this._doKeyPress).keyup(this._doKeyUp);
+-		this._autoSize(inst);
+-		$.data(target, PROP_NAME, inst);
+-		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-	},
+-
+-	/* Make attachments based on settings. */
+-	_attachments: function(input, inst) {
+-		var showOn, buttonText, buttonImage,
+-			appendText = this._get(inst, "appendText"),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		if (inst.append) {
+-			inst.append.remove();
+-		}
+-		if (appendText) {
+-			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+-			input[isRTL ? "before" : "after"](inst.append);
+-		}
+-
+-		input.unbind("focus", this._showDatepicker);
+-
+-		if (inst.trigger) {
+-			inst.trigger.remove();
+-		}
+-
+-		showOn = this._get(inst, "showOn");
+-		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+-			input.focus(this._showDatepicker);
+-		}
+-		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+-			buttonText = this._get(inst, "buttonText");
+-			buttonImage = this._get(inst, "buttonImage");
+-			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+-				$("<img/>").addClass(this._triggerClass).
+-					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+-				$("<button type='button'></button>").addClass(this._triggerClass).
+-					html(!buttonImage ? buttonText : $("<img/>").attr(
+-					{ src:buttonImage, alt:buttonText, title:buttonText })));
+-			input[isRTL ? "before" : "after"](inst.trigger);
+-			inst.trigger.click(function() {
+-				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+-					$.datepicker._hideDatepicker();
+-				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+-					$.datepicker._hideDatepicker();
+-					$.datepicker._showDatepicker(input[0]);
+-				} else {
+-					$.datepicker._showDatepicker(input[0]);
+-				}
+-				return false;
+-			});
+-		}
+-	},
+-
+-	/* Apply the maximum length for the date format. */
+-	_autoSize: function(inst) {
+-		if (this._get(inst, "autoSize") && !inst.inline) {
+-			var findMax, max, maxI, i,
+-				date = new Date(2009, 12 - 1, 20), // Ensure double digits
+-				dateFormat = this._get(inst, "dateFormat");
+-
+-			if (dateFormat.match(/[DM]/)) {
+-				findMax = function(names) {
+-					max = 0;
+-					maxI = 0;
+-					for (i = 0; i < names.length; i++) {
+-						if (names[i].length > max) {
+-							max = names[i].length;
+-							maxI = i;
+-						}
+-					}
+-					return maxI;
+-				};
+-				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+-					"monthNames" : "monthNamesShort"))));
+-				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+-					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+-			}
+-			inst.input.attr("size", this._formatDate(inst, date).length);
+-		}
+-	},
+-
+-	/* Attach an inline date picker to a div. */
+-	_inlineDatepicker: function(target, inst) {
+-		var divSpan = $(target);
+-		if (divSpan.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+-		$.data(target, PROP_NAME, inst);
+-		this._setDate(inst, this._getDefaultDate(inst), true);
+-		this._updateDatepicker(inst);
+-		this._updateAlternate(inst);
+-		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+-		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+-		inst.dpDiv.css( "display", "block" );
+-	},
+-
+-	/* Pop-up the date picker in a "dialog" box.
+-	 * @param  input element - ignored
+-	 * @param  date	string or Date - the initial date to display
+-	 * @param  onSelect  function - the function to call when a date is selected
+-	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+-	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
+-	 *					event - with x/y coordinates or
+-	 *					leave empty for default (screen centre)
+-	 * @return the manager object
+-	 */
+-	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+-		var id, browserWidth, browserHeight, scrollX, scrollY,
+-			inst = this._dialogInst; // internal instance
+-
+-		if (!inst) {
+-			this.uuid += 1;
+-			id = "dp" + this.uuid;
+-			this._dialogInput = $("<input type='text' id='" + id +
+-				"' style='position: absolute; top: -100px; width: 0px;'/>");
+-			this._dialogInput.keydown(this._doKeyDown);
+-			$("body").append(this._dialogInput);
+-			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+-			inst.settings = {};
+-			$.data(this._dialogInput[0], PROP_NAME, inst);
+-		}
+-		extendRemove(inst.settings, settings || {});
+-		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+-		this._dialogInput.val(date);
+-
+-		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+-		if (!this._pos) {
+-			browserWidth = document.documentElement.clientWidth;
+-			browserHeight = document.documentElement.clientHeight;
+-			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+-			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+-			this._pos = // should use actual width/height below
+-				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+-		}
+-
+-		// move input on screen for focus, but hidden behind dialog
+-		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+-		inst.settings.onSelect = onSelect;
+-		this._inDialog = true;
+-		this.dpDiv.addClass(this._dialogClass);
+-		this._showDatepicker(this._dialogInput[0]);
+-		if ($.blockUI) {
+-			$.blockUI(this.dpDiv);
+-		}
+-		$.data(this._dialogInput[0], PROP_NAME, inst);
+-		return this;
+-	},
+-
+-	/* Detach a datepicker from its control.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_destroyDatepicker: function(target) {
+-		var nodeName,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		$.removeData(target, PROP_NAME);
+-		if (nodeName === "input") {
+-			inst.append.remove();
+-			inst.trigger.remove();
+-			$target.removeClass(this.markerClassName).
+-				unbind("focus", this._showDatepicker).
+-				unbind("keydown", this._doKeyDown).
+-				unbind("keypress", this._doKeyPress).
+-				unbind("keyup", this._doKeyUp);
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			$target.removeClass(this.markerClassName).empty();
+-		}
+-	},
+-
+-	/* Enable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_enableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = false;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = false; }).end().
+-				filter("img").css({opacity: "1.0", cursor: ""});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().removeClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", false);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-	},
+-
+-	/* Disable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_disableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = true;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = true; }).end().
+-				filter("img").css({opacity: "0.5", cursor: "default"});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().addClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", true);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-		this._disabledInputs[this._disabledInputs.length] = target;
+-	},
+-
+-	/* Is the first field in a jQuery collection disabled as a datepicker?
+-	 * @param  target	element - the target input field or division or span
+-	 * @return boolean - true if disabled, false if enabled
+-	 */
+-	_isDisabledDatepicker: function(target) {
+-		if (!target) {
+-			return false;
+-		}
+-		for (var i = 0; i < this._disabledInputs.length; i++) {
+-			if (this._disabledInputs[i] === target) {
+-				return true;
+-			}
+-		}
+-		return false;
+-	},
+-
+-	/* Retrieve the instance data for the target control.
+-	 * @param  target  element - the target input field or division or span
+-	 * @return  object - the associated instance data
+-	 * @throws  error if a jQuery problem getting data
+-	 */
+-	_getInst: function(target) {
+-		try {
+-			return $.data(target, PROP_NAME);
+-		}
+-		catch (err) {
+-			throw "Missing instance data for this datepicker";
+-		}
+-	},
+-
+-	/* Update or retrieve the settings for a date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 * @param  name	object - the new settings to update or
+-	 *				string - the name of the setting to change or retrieve,
+-	 *				when retrieving also "all" for all instance settings or
+-	 *				"defaults" for all global defaults
+-	 * @param  value   any - the new value for the setting
+-	 *				(omit if above is an object or to retrieve a value)
+-	 */
+-	_optionDatepicker: function(target, name, value) {
+-		var settings, date, minDate, maxDate,
+-			inst = this._getInst(target);
+-
+-		if (arguments.length === 2 && typeof name === "string") {
+-			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+-				(inst ? (name === "all" ? $.extend({}, inst.settings) :
+-				this._get(inst, name)) : null));
+-		}
+-
+-		settings = name || {};
+-		if (typeof name === "string") {
+-			settings = {};
+-			settings[name] = value;
+-		}
+-
+-		if (inst) {
+-			if (this._curInst === inst) {
+-				this._hideDatepicker();
+-			}
+-
+-			date = this._getDateDatepicker(target, true);
+-			minDate = this._getMinMaxDate(inst, "min");
+-			maxDate = this._getMinMaxDate(inst, "max");
+-			extendRemove(inst.settings, settings);
+-			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+-			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+-				inst.settings.minDate = this._formatDate(inst, minDate);
+-			}
+-			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+-				inst.settings.maxDate = this._formatDate(inst, maxDate);
+-			}
+-			if ( "disabled" in settings ) {
+-				if ( settings.disabled ) {
+-					this._disableDatepicker(target);
+-				} else {
+-					this._enableDatepicker(target);
+-				}
+-			}
+-			this._attachments($(target), inst);
+-			this._autoSize(inst);
+-			this._setDate(inst, date);
+-			this._updateAlternate(inst);
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	// change method deprecated
+-	_changeDatepicker: function(target, name, value) {
+-		this._optionDatepicker(target, name, value);
+-	},
+-
+-	/* Redraw the date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 */
+-	_refreshDatepicker: function(target) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	/* Set the dates for a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  date	Date - the new date
+-	 */
+-	_setDateDatepicker: function(target, date) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._setDate(inst, date);
+-			this._updateDatepicker(inst);
+-			this._updateAlternate(inst);
+-		}
+-	},
+-
+-	/* Get the date(s) for the first entry in a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  noDefault boolean - true if no default date is to be used
+-	 * @return Date - the current date
+-	 */
+-	_getDateDatepicker: function(target, noDefault) {
+-		var inst = this._getInst(target);
+-		if (inst && !inst.inline) {
+-			this._setDateFromField(inst, noDefault);
+-		}
+-		return (inst ? this._getDate(inst) : null);
+-	},
+-
+-	/* Handle keystrokes. */
+-	_doKeyDown: function(event) {
+-		var onSelect, dateStr, sel,
+-			inst = $.datepicker._getInst(event.target),
+-			handled = true,
+-			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+-
+-		inst._keyEvent = true;
+-		if ($.datepicker._datepickerShowing) {
+-			switch (event.keyCode) {
+-				case 9: $.datepicker._hideDatepicker();
+-						handled = false;
+-						break; // hide on tab out
+-				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+-									$.datepicker._currentClass + ")", inst.dpDiv);
+-						if (sel[0]) {
+-							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+-						}
+-
+-						onSelect = $.datepicker._get(inst, "onSelect");
+-						if (onSelect) {
+-							dateStr = $.datepicker._formatDate(inst);
+-
+-							// trigger custom callback
+-							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-						} else {
+-							$.datepicker._hideDatepicker();
+-						}
+-
+-						return false; // don't submit the form
+-				case 27: $.datepicker._hideDatepicker();
+-						break; // hide on escape
+-				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							-$.datepicker._get(inst, "stepBigMonths") :
+-							-$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // previous month/year on page up/+ ctrl
+-				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							+$.datepicker._get(inst, "stepBigMonths") :
+-							+$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // next month/year on page down/+ ctrl
+-				case 35: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._clearDate(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // clear on ctrl or command +end
+-				case 36: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._gotoToday(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // current on ctrl or command +home
+-				case 37: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// -1 day on ctrl or command +left
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								-$.datepicker._get(inst, "stepBigMonths") :
+-								-$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +left on Mac
+-						break;
+-				case 38: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, -7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // -1 week on ctrl or command +up
+-				case 39: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// +1 day on ctrl or command +right
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								+$.datepicker._get(inst, "stepBigMonths") :
+-								+$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +right
+-						break;
+-				case 40: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, +7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // +1 week on ctrl or command +down
+-				default: handled = false;
+-			}
+-		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+-			$.datepicker._showDatepicker(this);
+-		} else {
+-			handled = false;
+-		}
+-
+-		if (handled) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-	},
+-
+-	/* Filter entered characters - based on date format. */
+-	_doKeyPress: function(event) {
+-		var chars, chr,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if ($.datepicker._get(inst, "constrainInput")) {
+-			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+-			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+-			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+-		}
+-	},
+-
+-	/* Synchronise manual entry and field/alternate field. */
+-	_doKeyUp: function(event) {
+-		var date,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if (inst.input.val() !== inst.lastVal) {
+-			try {
+-				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-					(inst.input ? inst.input.val() : null),
+-					$.datepicker._getFormatConfig(inst));
+-
+-				if (date) { // only if valid
+-					$.datepicker._setDateFromField(inst);
+-					$.datepicker._updateAlternate(inst);
+-					$.datepicker._updateDatepicker(inst);
+-				}
+-			}
+-			catch (err) {
+-			}
+-		}
+-		return true;
+-	},
+-
+-	/* Pop-up the date picker for a given input field.
+-	 * If false returned from beforeShow event handler do not show.
+-	 * @param  input  element - the input field attached to the date picker or
+-	 *					event - if triggered by focus
+-	 */
+-	_showDatepicker: function(input) {
+-		input = input.target || input;
+-		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+-			input = $("input", input.parentNode)[0];
+-		}
+-
+-		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+-			return;
+-		}
+-
+-		var inst, beforeShow, beforeShowSettings, isFixed,
+-			offset, showAnim, duration;
+-
+-		inst = $.datepicker._getInst(input);
+-		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+-			$.datepicker._curInst.dpDiv.stop(true, true);
+-			if ( inst && $.datepicker._datepickerShowing ) {
+-				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+-			}
+-		}
+-
+-		beforeShow = $.datepicker._get(inst, "beforeShow");
+-		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+-		if(beforeShowSettings === false){
+-			return;
+-		}
+-		extendRemove(inst.settings, beforeShowSettings);
+-
+-		inst.lastVal = null;
+-		$.datepicker._lastInput = input;
+-		$.datepicker._setDateFromField(inst);
+-
+-		if ($.datepicker._inDialog) { // hide cursor
+-			input.value = "";
+-		}
+-		if (!$.datepicker._pos) { // position below input
+-			$.datepicker._pos = $.datepicker._findPos(input);
+-			$.datepicker._pos[1] += input.offsetHeight; // add the height
+-		}
+-
+-		isFixed = false;
+-		$(input).parents().each(function() {
+-			isFixed |= $(this).css("position") === "fixed";
+-			return !isFixed;
+-		});
+-
+-		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+-		$.datepicker._pos = null;
+-		//to avoid flashes on Firefox
+-		inst.dpDiv.empty();
+-		// determine sizing offscreen
+-		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+-		$.datepicker._updateDatepicker(inst);
+-		// fix width for dynamic number of date pickers
+-		// and adjust position before showing
+-		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+-		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+-			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
+-			left: offset.left + "px", top: offset.top + "px"});
+-
+-		if (!inst.inline) {
+-			showAnim = $.datepicker._get(inst, "showAnim");
+-			duration = $.datepicker._get(inst, "duration");
+-			inst.dpDiv.zIndex($(input).zIndex()+1);
+-			$.datepicker._datepickerShowing = true;
+-
+-			if ( $.effects && $.effects.effect[ showAnim ] ) {
+-				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+-			} else {
+-				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+-			}
+-
+-			if ( $.datepicker._shouldFocusInput( inst ) ) {
+-				inst.input.focus();
+-			}
+-
+-			$.datepicker._curInst = inst;
+-		}
+-	},
+-
+-	/* Generate the date picker content. */
+-	_updateDatepicker: function(inst) {
+-		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+-		instActive = inst; // for delegate hover events
+-		inst.dpDiv.empty().append(this._generateHTML(inst));
+-		this._attachHandlers(inst);
+-		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
+-
+-		var origyearshtml,
+-			numMonths = this._getNumberOfMonths(inst),
+-			cols = numMonths[1],
+-			width = 17;
+-
+-		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+-		if (cols > 1) {
+-			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+-		}
+-		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+-			"Class"]("ui-datepicker-multi");
+-		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+-			"Class"]("ui-datepicker-rtl");
+-
+-		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+-			inst.input.focus();
+-		}
+-
+-		// deffered render of the years select (to avoid flashes on Firefox)
+-		if( inst.yearshtml ){
+-			origyearshtml = inst.yearshtml;
+-			setTimeout(function(){
+-				//assure that inst.yearshtml didn't change.
+-				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+-					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+-				}
+-				origyearshtml = inst.yearshtml = null;
+-			}, 0);
+-		}
+-	},
+-
+-	// #6694 - don't focus the input if it's already focused
+-	// this breaks the change event in IE
+-	// Support: IE and jQuery <1.9
+-	_shouldFocusInput: function( inst ) {
+-		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+-	},
+-
+-	/* Check positioning to remain on screen. */
+-	_checkOffset: function(inst, offset, isFixed) {
+-		var dpWidth = inst.dpDiv.outerWidth(),
+-			dpHeight = inst.dpDiv.outerHeight(),
+-			inputWidth = inst.input ? inst.input.outerWidth() : 0,
+-			inputHeight = inst.input ? inst.input.outerHeight() : 0,
+-			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+-			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+-
+-		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+-		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+-		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+-
+-		// now check if datepicker is showing outside window viewport - move to a better place if so.
+-		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+-			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+-		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+-			Math.abs(dpHeight + inputHeight) : 0);
+-
+-		return offset;
+-	},
+-
+-	/* Find an object's position on the screen. */
+-	_findPos: function(obj) {
+-		var position,
+-			inst = this._getInst(obj),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+-			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+-		}
+-
+-		position = $(obj).offset();
+-		return [position.left, position.top];
+-	},
+-
+-	/* Hide the date picker from view.
+-	 * @param  input  element - the input field attached to the date picker
+-	 */
+-	_hideDatepicker: function(input) {
+-		var showAnim, duration, postProcess, onClose,
+-			inst = this._curInst;
+-
+-		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
+-			return;
+-		}
+-
+-		if (this._datepickerShowing) {
+-			showAnim = this._get(inst, "showAnim");
+-			duration = this._get(inst, "duration");
+-			postProcess = function() {
+-				$.datepicker._tidyDialog(inst);
+-			};
+-
+-			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+-			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+-				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+-			} else {
+-				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+-					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+-			}
+-
+-			if (!showAnim) {
+-				postProcess();
+-			}
+-			this._datepickerShowing = false;
+-
+-			onClose = this._get(inst, "onClose");
+-			if (onClose) {
+-				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+-			}
+-
+-			this._lastInput = null;
+-			if (this._inDialog) {
+-				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+-				if ($.blockUI) {
+-					$.unblockUI();
+-					$("body").append(this.dpDiv);
+-				}
+-			}
+-			this._inDialog = false;
+-		}
+-	},
+-
+-	/* Tidy up after a dialog display. */
+-	_tidyDialog: function(inst) {
+-		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+-	},
+-
+-	/* Close date picker if clicked elsewhere. */
+-	_checkExternalClick: function(event) {
+-		if (!$.datepicker._curInst) {
+-			return;
+-		}
+-
+-		var $target = $(event.target),
+-			inst = $.datepicker._getInst($target[0]);
+-
+-		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+-				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+-				!$target.hasClass($.datepicker.markerClassName) &&
+-				!$target.closest("." + $.datepicker._triggerClass).length &&
+-				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+-			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+-				$.datepicker._hideDatepicker();
+-		}
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustDate: function(id, offset, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		this._adjustInstDate(inst, offset +
+-			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+-			period);
+-		this._updateDatepicker(inst);
+-	},
+-
+-	/* Action for current link. */
+-	_gotoToday: function(id) {
+-		var date,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+-			inst.selectedDay = inst.currentDay;
+-			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+-			inst.drawYear = inst.selectedYear = inst.currentYear;
+-		} else {
+-			date = new Date();
+-			inst.selectedDay = date.getDate();
+-			inst.drawMonth = inst.selectedMonth = date.getMonth();
+-			inst.drawYear = inst.selectedYear = date.getFullYear();
+-		}
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a new month/year. */
+-	_selectMonthYear: function(id, select, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		inst["selected" + (period === "M" ? "Month" : "Year")] =
+-		inst["draw" + (period === "M" ? "Month" : "Year")] =
+-			parseInt(select.options[select.selectedIndex].value,10);
+-
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a day. */
+-	_selectDay: function(id, month, year, td) {
+-		var inst,
+-			target = $(id);
+-
+-		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-
+-		inst = this._getInst(target[0]);
+-		inst.selectedDay = inst.currentDay = $("a", td).html();
+-		inst.selectedMonth = inst.currentMonth = month;
+-		inst.selectedYear = inst.currentYear = year;
+-		this._selectDate(id, this._formatDate(inst,
+-			inst.currentDay, inst.currentMonth, inst.currentYear));
+-	},
+-
+-	/* Erase the input field and hide the date picker. */
+-	_clearDate: function(id) {
+-		var target = $(id);
+-		this._selectDate(target, "");
+-	},
+-
+-	/* Update the input field with the selected date. */
+-	_selectDate: function(id, dateStr) {
+-		var onSelect,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+-		if (inst.input) {
+-			inst.input.val(dateStr);
+-		}
+-		this._updateAlternate(inst);
+-
+-		onSelect = this._get(inst, "onSelect");
+-		if (onSelect) {
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+-		} else if (inst.input) {
+-			inst.input.trigger("change"); // fire the change event
+-		}
+-
+-		if (inst.inline){
+-			this._updateDatepicker(inst);
+-		} else {
+-			this._hideDatepicker();
+-			this._lastInput = inst.input[0];
+-			if (typeof(inst.input[0]) !== "object") {
+-				inst.input.focus(); // restore focus
+-			}
+-			this._lastInput = null;
+-		}
+-	},
+-
+-	/* Update any alternate field to synchronise with the main field. */
+-	_updateAlternate: function(inst) {
+-		var altFormat, date, dateStr,
+-			altField = this._get(inst, "altField");
+-
+-		if (altField) { // update alternate field too
+-			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+-			date = this._getDate(inst);
+-			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+-			$(altField).each(function() { $(this).val(dateStr); });
+-		}
+-	},
+-
+-	/* Set as beforeShowDay function to prevent selection of weekends.
+-	 * @param  date  Date - the date to customise
+-	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
+-	 */
+-	noWeekends: function(date) {
+-		var day = date.getDay();
+-		return [(day > 0 && day < 6), ""];
+-	},
+-
+-	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+-	 * @param  date  Date - the date to get the week for
+-	 * @return  number - the number of the week within the year that contains this date
+-	 */
+-	iso8601Week: function(date) {
+-		var time,
+-			checkDate = new Date(date.getTime());
+-
+-		// Find Thursday of this week starting on Monday
+-		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+-
+-		time = checkDate.getTime();
+-		checkDate.setMonth(0); // Compare with Jan 1
+-		checkDate.setDate(1);
+-		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+-	},
+-
+-	/* Parse a string value into a date object.
+-	 * See formatDate below for the possible formats.
+-	 *
+-	 * @param  format string - the expected format of the date
+-	 * @param  value string - the date in the above format
+-	 * @param  settings Object - attributes include:
+-	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  Date - the extracted date value or null if value is blank
+-	 */
+-	parseDate: function (format, value, settings) {
+-		if (format == null || value == null) {
+-			throw "Invalid arguments";
+-		}
+-
+-		value = (typeof value === "object" ? value.toString() : value + "");
+-		if (value === "") {
+-			return null;
+-		}
+-
+-		var iFormat, dim, extra,
+-			iValue = 0,
+-			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+-			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+-				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			year = -1,
+-			month = -1,
+-			day = -1,
+-			doy = -1,
+-			literal = false,
+-			date,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Extract a number from the string value
+-			getNumber = function(match) {
+-				var isDoubled = lookAhead(match),
+-					size = (match === "@" ? 14 : (match === "!" ? 20 :
+-					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+-					digits = new RegExp("^\\d{1," + size + "}"),
+-					num = value.substring(iValue).match(digits);
+-				if (!num) {
+-					throw "Missing number at position " + iValue;
+-				}
+-				iValue += num[0].length;
+-				return parseInt(num[0], 10);
+-			},
+-			// Extract a name from the string value and convert to an index
+-			getName = function(match, shortNames, longNames) {
+-				var index = -1,
+-					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+-						return [ [k, v] ];
+-					}).sort(function (a, b) {
+-						return -(a[1].length - b[1].length);
+-					});
+-
+-				$.each(names, function (i, pair) {
+-					var name = pair[1];
+-					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+-						index = pair[0];
+-						iValue += name.length;
+-						return false;
+-					}
+-				});
+-				if (index !== -1) {
+-					return index + 1;
+-				} else {
+-					throw "Unknown name at position " + iValue;
+-				}
+-			},
+-			// Confirm that a literal character matches the string value
+-			checkLiteral = function() {
+-				if (value.charAt(iValue) !== format.charAt(iFormat)) {
+-					throw "Unexpected literal at position " + iValue;
+-				}
+-				iValue++;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					checkLiteral();
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d":
+-						day = getNumber("d");
+-						break;
+-					case "D":
+-						getName("D", dayNamesShort, dayNames);
+-						break;
+-					case "o":
+-						doy = getNumber("o");
+-						break;
+-					case "m":
+-						month = getNumber("m");
+-						break;
+-					case "M":
+-						month = getName("M", monthNamesShort, monthNames);
+-						break;
+-					case "y":
+-						year = getNumber("y");
+-						break;
+-					case "@":
+-						date = new Date(getNumber("@"));
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "!":
+-						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "'":
+-						if (lookAhead("'")){
+-							checkLiteral();
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						checkLiteral();
+-				}
+-			}
+-		}
+-
+-		if (iValue < value.length){
+-			extra = value.substr(iValue);
+-			if (!/^\s+/.test(extra)) {
+-				throw "Extra/unparsed characters found in date: " + extra;
+-			}
+-		}
+-
+-		if (year === -1) {
+-			year = new Date().getFullYear();
+-		} else if (year < 100) {
+-			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+-				(year <= shortYearCutoff ? 0 : -100);
+-		}
+-
+-		if (doy > -1) {
+-			month = 1;
+-			day = doy;
+-			do {
+-				dim = this._getDaysInMonth(year, month - 1);
+-				if (day <= dim) {
+-					break;
+-				}
+-				month++;
+-				day -= dim;
+-			} while (true);
+-		}
+-
+-		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+-		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+-			throw "Invalid date"; // E.g. 31/02/00
+-		}
+-		return date;
+-	},
+-
+-	/* Standard date formats. */
+-	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+-	COOKIE: "D, dd M yy",
+-	ISO_8601: "yy-mm-dd",
+-	RFC_822: "D, d M y",
+-	RFC_850: "DD, dd-M-y",
+-	RFC_1036: "D, d M y",
+-	RFC_1123: "D, d M yy",
+-	RFC_2822: "D, d M yy",
+-	RSS: "D, d M y", // RFC 822
+-	TICKS: "!",
+-	TIMESTAMP: "@",
+-	W3C: "yy-mm-dd", // ISO 8601
+-
+-	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+-		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+-
+-	/* Format a date object into a string value.
+-	 * The format can be combinations of the following:
+-	 * d  - day of month (no leading zero)
+-	 * dd - day of month (two digit)
+-	 * o  - day of year (no leading zeros)
+-	 * oo - day of year (three digit)
+-	 * D  - day name short
+-	 * DD - day name long
+-	 * m  - month of year (no leading zero)
+-	 * mm - month of year (two digit)
+-	 * M  - month name short
+-	 * MM - month name long
+-	 * y  - year (two digit)
+-	 * yy - year (four digit)
+-	 * @ - Unix timestamp (ms since 01/01/1970)
+-	 * ! - Windows ticks (100ns since 01/01/0001)
+-	 * "..." - literal text
+-	 * '' - single quote
+-	 *
+-	 * @param  format string - the desired format of the date
+-	 * @param  date Date - the date value to format
+-	 * @param  settings Object - attributes include:
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  string - the date in the above format
+-	 */
+-	formatDate: function (format, date, settings) {
+-		if (!date) {
+-			return "";
+-		}
+-
+-		var iFormat,
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Format a number, with leading zero if necessary
+-			formatNumber = function(match, value, len) {
+-				var num = "" + value;
+-				if (lookAhead(match)) {
+-					while (num.length < len) {
+-						num = "0" + num;
+-					}
+-				}
+-				return num;
+-			},
+-			// Format a name, short or long as requested
+-			formatName = function(match, value, shortNames, longNames) {
+-				return (lookAhead(match) ? longNames[value] : shortNames[value]);
+-			},
+-			output = "",
+-			literal = false;
+-
+-		if (date) {
+-			for (iFormat = 0; iFormat < format.length; iFormat++) {
+-				if (literal) {
+-					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-						literal = false;
+-					} else {
+-						output += format.charAt(iFormat);
+-					}
+-				} else {
+-					switch (format.charAt(iFormat)) {
+-						case "d":
+-							output += formatNumber("d", date.getDate(), 2);
+-							break;
+-						case "D":
+-							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+-							break;
+-						case "o":
+-							output += formatNumber("o",
+-								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+-							break;
+-						case "m":
+-							output += formatNumber("m", date.getMonth() + 1, 2);
+-							break;
+-						case "M":
+-							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+-							break;
+-						case "y":
+-							output += (lookAhead("y") ? date.getFullYear() :
+-								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+-							break;
+-						case "@":
+-							output += date.getTime();
+-							break;
+-						case "!":
+-							output += date.getTime() * 10000 + this._ticksTo1970;
+-							break;
+-						case "'":
+-							if (lookAhead("'")) {
+-								output += "'";
+-							} else {
+-								literal = true;
+-							}
+-							break;
+-						default:
+-							output += format.charAt(iFormat);
+-					}
+-				}
+-			}
+-		}
+-		return output;
+-	},
+-
+-	/* Extract all possible characters from the date format. */
+-	_possibleChars: function (format) {
+-		var iFormat,
+-			chars = "",
+-			literal = false,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					chars += format.charAt(iFormat);
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d": case "m": case "y": case "@":
+-						chars += "0123456789";
+-						break;
+-					case "D": case "M":
+-						return null; // Accept anything
+-					case "'":
+-						if (lookAhead("'")) {
+-							chars += "'";
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						chars += format.charAt(iFormat);
+-				}
+-			}
+-		}
+-		return chars;
+-	},
+-
+-	/* Get a setting value, defaulting if necessary. */
+-	_get: function(inst, name) {
+-		return inst.settings[name] !== undefined ?
+-			inst.settings[name] : this._defaults[name];
+-	},
+-
+-	/* Parse existing date and initialise date picker. */
+-	_setDateFromField: function(inst, noDefault) {
+-		if (inst.input.val() === inst.lastVal) {
+-			return;
+-		}
+-
+-		var dateFormat = this._get(inst, "dateFormat"),
+-			dates = inst.lastVal = inst.input ? inst.input.val() : null,
+-			defaultDate = this._getDefaultDate(inst),
+-			date = defaultDate,
+-			settings = this._getFormatConfig(inst);
+-
+-		try {
+-			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+-		} catch (event) {
+-			dates = (noDefault ? "" : dates);
+-		}
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		inst.currentDay = (dates ? date.getDate() : 0);
+-		inst.currentMonth = (dates ? date.getMonth() : 0);
+-		inst.currentYear = (dates ? date.getFullYear() : 0);
+-		this._adjustInstDate(inst);
+-	},
+-
+-	/* Retrieve the default date shown on opening. */
+-	_getDefaultDate: function(inst) {
+-		return this._restrictMinMax(inst,
+-			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+-	},
+-
+-	/* A date may be specified as an exact value or a relative one. */
+-	_determineDate: function(inst, date, defaultDate) {
+-		var offsetNumeric = function(offset) {
+-				var date = new Date();
+-				date.setDate(date.getDate() + offset);
+-				return date;
+-			},
+-			offsetString = function(offset) {
+-				try {
+-					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-						offset, $.datepicker._getFormatConfig(inst));
+-				}
+-				catch (e) {
+-					// Ignore
+-				}
+-
+-				var date = (offset.toLowerCase().match(/^c/) ?
+-					$.datepicker._getDate(inst) : null) || new Date(),
+-					year = date.getFullYear(),
+-					month = date.getMonth(),
+-					day = date.getDate(),
+-					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+-					matches = pattern.exec(offset);
+-
+-				while (matches) {
+-					switch (matches[2] || "d") {
+-						case "d" : case "D" :
+-							day += parseInt(matches[1],10); break;
+-						case "w" : case "W" :
+-							day += parseInt(matches[1],10) * 7; break;
+-						case "m" : case "M" :
+-							month += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-						case "y": case "Y" :
+-							year += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-					}
+-					matches = pattern.exec(offset);
+-				}
+-				return new Date(year, month, day);
+-			},
+-			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+-				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+-
+-		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+-		if (newDate) {
+-			newDate.setHours(0);
+-			newDate.setMinutes(0);
+-			newDate.setSeconds(0);
+-			newDate.setMilliseconds(0);
+-		}
+-		return this._daylightSavingAdjust(newDate);
+-	},
+-
+-	/* Handle switch to/from daylight saving.
+-	 * Hours may be non-zero on daylight saving cut-over:
+-	 * > 12 when midnight changeover, but then cannot generate
+-	 * midnight datetime, so jump to 1AM, otherwise reset.
+-	 * @param  date  (Date) the date to check
+-	 * @return  (Date) the corrected date
+-	 */
+-	_daylightSavingAdjust: function(date) {
+-		if (!date) {
+-			return null;
+-		}
+-		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+-		return date;
+-	},
+-
+-	/* Set the date(s) directly. */
+-	_setDate: function(inst, date, noChange) {
+-		var clear = !date,
+-			origMonth = inst.selectedMonth,
+-			origYear = inst.selectedYear,
+-			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+-
+-		inst.selectedDay = inst.currentDay = newDate.getDate();
+-		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+-		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+-		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+-			this._notifyChange(inst);
+-		}
+-		this._adjustInstDate(inst);
+-		if (inst.input) {
+-			inst.input.val(clear ? "" : this._formatDate(inst));
+-		}
+-	},
+-
+-	/* Retrieve the date(s) directly. */
+-	_getDate: function(inst) {
+-		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+-			this._daylightSavingAdjust(new Date(
+-			inst.currentYear, inst.currentMonth, inst.currentDay)));
+-			return startDate;
+-	},
+-
+-	/* Attach the onxxx handlers.  These are declared statically so
+-	 * they work with static code transformers like Caja.
+-	 */
+-	_attachHandlers: function(inst) {
+-		var stepMonths = this._get(inst, "stepMonths"),
+-			id = "#" + inst.id.replace( /\\\\/g, "\\" );
+-		inst.dpDiv.find("[data-handler]").map(function () {
+-			var handler = {
+-				prev: function () {
+-					$.datepicker._adjustDate(id, -stepMonths, "M");
+-				},
+-				next: function () {
+-					$.datepicker._adjustDate(id, +stepMonths, "M");
+-				},
+-				hide: function () {
+-					$.datepicker._hideDatepicker();
+-				},
+-				today: function () {
+-					$.datepicker._gotoToday(id);
+-				},
+-				selectDay: function () {
+-					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+-					return false;
+-				},
+-				selectMonth: function () {
+-					$.datepicker._selectMonthYear(id, this, "M");
+-					return false;
+-				},
+-				selectYear: function () {
+-					$.datepicker._selectMonthYear(id, this, "Y");
+-					return false;
+-				}
+-			};
+-			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+-		});
+-	},
+-
+-	/* Generate the HTML for the current state of the date picker. */
+-	_generateHTML: function(inst) {
+-		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+-			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+-			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+-			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+-			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+-			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+-			tempDate = new Date(),
+-			today = this._daylightSavingAdjust(
+-				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+-			isRTL = this._get(inst, "isRTL"),
+-			showButtonPanel = this._get(inst, "showButtonPanel"),
+-			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+-			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+-			numMonths = this._getNumberOfMonths(inst),
+-			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+-			stepMonths = this._get(inst, "stepMonths"),
+-			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+-			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+-				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			drawMonth = inst.drawMonth - showCurrentAtPos,
+-			drawYear = inst.drawYear;
+-
+-		if (drawMonth < 0) {
+-			drawMonth += 12;
+-			drawYear--;
+-		}
+-		if (maxDate) {
+-			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+-				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+-			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+-			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+-				drawMonth--;
+-				if (drawMonth < 0) {
+-					drawMonth = 11;
+-					drawYear--;
+-				}
+-			}
+-		}
+-		inst.drawMonth = drawMonth;
+-		inst.drawYear = drawYear;
+-
+-		prevText = this._get(inst, "prevText");
+-		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+-			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+-
+-		nextText = this._get(inst, "nextText");
+-		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+-			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+-
+-		currentText = this._get(inst, "currentText");
+-		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+-		currentText = (!navigationAsDateFormat ? currentText :
+-			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+-
+-		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+-			this._get(inst, "closeText") + "</button>" : "");
+-
+-		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+-			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+-			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+-
+-		firstDay = parseInt(this._get(inst, "firstDay"),10);
+-		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+-
+-		showWeek = this._get(inst, "showWeek");
+-		dayNames = this._get(inst, "dayNames");
+-		dayNamesMin = this._get(inst, "dayNamesMin");
+-		monthNames = this._get(inst, "monthNames");
+-		monthNamesShort = this._get(inst, "monthNamesShort");
+-		beforeShowDay = this._get(inst, "beforeShowDay");
+-		showOtherMonths = this._get(inst, "showOtherMonths");
+-		selectOtherMonths = this._get(inst, "selectOtherMonths");
+-		defaultDate = this._getDefaultDate(inst);
+-		html = "";
+-		dow;
+-		for (row = 0; row < numMonths[0]; row++) {
+-			group = "";
+-			this.maxRows = 4;
+-			for (col = 0; col < numMonths[1]; col++) {
+-				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+-				cornerClass = " ui-corner-all";
+-				calender = "";
+-				if (isMultiMonth) {
+-					calender += "<div class='ui-datepicker-group";
+-					if (numMonths[1] > 1) {
+-						switch (col) {
+-							case 0: calender += " ui-datepicker-group-first";
+-								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+-							case numMonths[1]-1: calender += " ui-datepicker-group-last";
+-								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+-							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+-						}
+-					}
+-					calender += "'>";
+-				}
+-				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+-					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+-					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+-					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+-					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+-					"</div><table class='ui-datepicker-calendar'><thead>" +
+-					"<tr>";
+-				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+-				for (dow = 0; dow < 7; dow++) { // days of the week
+-					day = (dow + firstDay) % 7;
+-					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+-						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+-				}
+-				calender += thead + "</tr></thead><tbody>";
+-				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+-				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+-					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+-				}
+-				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+-				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+-				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+-				this.maxRows = numRows;
+-				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+-				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+-					calender += "<tr>";
+-					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+-						this._get(inst, "calculateWeek")(printDate) + "</td>");
+-					for (dow = 0; dow < 7; dow++) { // create date picker days
+-						daySettings = (beforeShowDay ?
+-							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+-						otherMonth = (printDate.getMonth() !== drawMonth);
+-						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+-							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+-						tbody += "<td class='" +
+-							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+-							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+-							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+-							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+-							// or defaultDate is current printedDate and defaultDate is selectedDate
+-							" " + this._dayOverClass : "") + // highlight selected day
+-							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
+-							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+-							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+-							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+-							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+-							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+-							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+-							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+-							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+-							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+-							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+-							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+-						printDate.setDate(printDate.getDate() + 1);
+-						printDate = this._daylightSavingAdjust(printDate);
+-					}
+-					calender += tbody + "</tr>";
+-				}
+-				drawMonth++;
+-				if (drawMonth > 11) {
+-					drawMonth = 0;
+-					drawYear++;
+-				}
+-				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+-							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+-				group += calender;
+-			}
+-			html += group;
+-		}
+-		html += buttonPanel;
+-		inst._keyEvent = false;
+-		return html;
+-	},
+-
+-	/* Generate the month and year header. */
+-	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+-			secondary, monthNames, monthNamesShort) {
+-
+-		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+-			changeMonth = this._get(inst, "changeMonth"),
+-			changeYear = this._get(inst, "changeYear"),
+-			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+-			html = "<div class='ui-datepicker-title'>",
+-			monthHtml = "";
+-
+-		// month selection
+-		if (secondary || !changeMonth) {
+-			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+-		} else {
+-			inMinYear = (minDate && minDate.getFullYear() === drawYear);
+-			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+-			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+-			for ( month = 0; month < 12; month++) {
+-				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+-					monthHtml += "<option value='" + month + "'" +
+-						(month === drawMonth ? " selected='selected'" : "") +
+-						">" + monthNamesShort[month] + "</option>";
+-				}
+-			}
+-			monthHtml += "</select>";
+-		}
+-
+-		if (!showMonthAfterYear) {
+-			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+-		}
+-
+-		// year selection
+-		if ( !inst.yearshtml ) {
+-			inst.yearshtml = "";
+-			if (secondary || !changeYear) {
+-				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+-			} else {
+-				// determine range of years to display
+-				years = this._get(inst, "yearRange").split(":");
+-				thisYear = new Date().getFullYear();
+-				determineYear = function(value) {
+-					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+-						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+-						parseInt(value, 10)));
+-					return (isNaN(year) ? thisYear : year);
+-				};
+-				year = determineYear(years[0]);
+-				endYear = Math.max(year, determineYear(years[1] || ""));
+-				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+-				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+-				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+-				for (; year <= endYear; year++) {
+-					inst.yearshtml += "<option value='" + year + "'" +
+-						(year === drawYear ? " selected='selected'" : "") +
+-						">" + year + "</option>";
+-				}
+-				inst.yearshtml += "</select>";
+-
+-				html += inst.yearshtml;
+-				inst.yearshtml = null;
+-			}
+-		}
+-
+-		html += this._get(inst, "yearSuffix");
+-		if (showMonthAfterYear) {
+-			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+-		}
+-		html += "</div>"; // Close datepicker_header
+-		return html;
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustInstDate: function(inst, offset, period) {
+-		var year = inst.drawYear + (period === "Y" ? offset : 0),
+-			month = inst.drawMonth + (period === "M" ? offset : 0),
+-			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+-			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+-
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		if (period === "M" || period === "Y") {
+-			this._notifyChange(inst);
+-		}
+-	},
+-
+-	/* Ensure a date is within any min/max bounds. */
+-	_restrictMinMax: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			newDate = (minDate && date < minDate ? minDate : date);
+-		return (maxDate && newDate > maxDate ? maxDate : newDate);
+-	},
+-
+-	/* Notify change of month/year. */
+-	_notifyChange: function(inst) {
+-		var onChange = this._get(inst, "onChangeMonthYear");
+-		if (onChange) {
+-			onChange.apply((inst.input ? inst.input[0] : null),
+-				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+-		}
+-	},
+-
+-	/* Determine the number of months to show. */
+-	_getNumberOfMonths: function(inst) {
+-		var numMonths = this._get(inst, "numberOfMonths");
+-		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+-	},
+-
+-	/* Determine the current maximum date - ensure no time components are set. */
+-	_getMinMaxDate: function(inst, minMax) {
+-		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+-	},
+-
+-	/* Find the number of days in a given month. */
+-	_getDaysInMonth: function(year, month) {
+-		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+-	},
+-
+-	/* Find the day of the week of the first of a month. */
+-	_getFirstDayOfMonth: function(year, month) {
+-		return new Date(year, month, 1).getDay();
+-	},
+-
+-	/* Determines if we should allow a "next/prev" month display change. */
+-	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+-		var numMonths = this._getNumberOfMonths(inst),
+-			date = this._daylightSavingAdjust(new Date(curYear,
+-			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+-
+-		if (offset < 0) {
+-			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+-		}
+-		return this._isInRange(inst, date);
+-	},
+-
+-	/* Is the given date in the accepted range? */
+-	_isInRange: function(inst, date) {
+-		var yearSplit, currentYear,
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			minYear = null,
+-			maxYear = null,
+-			years = this._get(inst, "yearRange");
+-			if (years){
+-				yearSplit = years.split(":");
+-				currentYear = new Date().getFullYear();
+-				minYear = parseInt(yearSplit[0], 10);
+-				maxYear = parseInt(yearSplit[1], 10);
+-				if ( yearSplit[0].match(/[+\-].*/) ) {
+-					minYear += currentYear;
+-				}
+-				if ( yearSplit[1].match(/[+\-].*/) ) {
+-					maxYear += currentYear;
+-				}
+-			}
+-
+-		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+-			(!maxDate || date.getTime() <= maxDate.getTime()) &&
+-			(!minYear || date.getFullYear() >= minYear) &&
+-			(!maxYear || date.getFullYear() <= maxYear));
+-	},
+-
+-	/* Provide the configuration settings for formatting/parsing. */
+-	_getFormatConfig: function(inst) {
+-		var shortYearCutoff = this._get(inst, "shortYearCutoff");
+-		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+-			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		return {shortYearCutoff: shortYearCutoff,
+-			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+-			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+-	},
+-
+-	/* Format the given date for display. */
+-	_formatDate: function(inst, day, month, year) {
+-		if (!day) {
+-			inst.currentDay = inst.selectedDay;
+-			inst.currentMonth = inst.selectedMonth;
+-			inst.currentYear = inst.selectedYear;
+-		}
+-		var date = (day ? (typeof day === "object" ? day :
+-			this._daylightSavingAdjust(new Date(year, month, day))) :
+-			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+-	}
+-});
+-
+-/*
+- * Bind hover events for datepicker elements.
+- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+- */
+-function bindHover(dpDiv) {
+-	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+-	return dpDiv.delegate(selector, "mouseout", function() {
+-			$(this).removeClass("ui-state-hover");
+-			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-				$(this).removeClass("ui-datepicker-prev-hover");
+-			}
+-			if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-				$(this).removeClass("ui-datepicker-next-hover");
+-			}
+-		})
+-		.delegate(selector, "mouseover", function(){
+-			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
+-				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+-				$(this).addClass("ui-state-hover");
+-				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-					$(this).addClass("ui-datepicker-prev-hover");
+-				}
+-				if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-					$(this).addClass("ui-datepicker-next-hover");
+-				}
+-			}
+-		});
+-}
+-
+-/* jQuery extend now ignores nulls! */
+-function extendRemove(target, props) {
+-	$.extend(target, props);
+-	for (var name in props) {
+-		if (props[name] == null) {
+-			target[name] = props[name];
+-		}
+-	}
+-	return target;
+-}
+-
+-/* Invoke the datepicker functionality.
+-   @param  options  string - a command, optionally followed by additional parameters or
+-					Object - settings for attaching new datepicker functionality
+-   @return  jQuery object */
+-$.fn.datepicker = function(options){
+-
+-	/* Verify an empty collection wasn't passed - Fixes #6976 */
+-	if ( !this.length ) {
+-		return this;
+-	}
+-
+-	/* Initialise the date picker. */
+-	if (!$.datepicker.initialized) {
+-		$(document).mousedown($.datepicker._checkExternalClick);
+-		$.datepicker.initialized = true;
+-	}
+-
+-	/* Append datepicker main container to body if not exist. */
+-	if ($("#"+$.datepicker._mainDivId).length === 0) {
+-		$("body").append($.datepicker.dpDiv);
+-	}
+-
+-	var otherArgs = Array.prototype.slice.call(arguments, 1);
+-	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	return this.each(function() {
+-		typeof options === "string" ?
+-			$.datepicker["_" + options + "Datepicker"].
+-				apply($.datepicker, [this].concat(otherArgs)) :
+-			$.datepicker._attachDatepicker(this, options);
+-	});
+-};
+-
+-$.datepicker = new Datepicker(); // singleton instance
+-$.datepicker.initialized = false;
+-$.datepicker.uuid = new Date().getTime();
+-$.datepicker.version = "1.10.3";
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var sizeRelatedOptions = {
+-		buttons: true,
+-		height: true,
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true,
+-		width: true
+-	},
+-	resizableRelatedOptions = {
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true
+-	};
+-
+-$.widget( "ui.dialog", {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoOpen: true,
+-		buttons: [],
+-		closeOnEscape: true,
+-		closeText: "close",
+-		dialogClass: "",
+-		draggable: true,
+-		hide: null,
+-		height: "auto",
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 150,
+-		minWidth: 150,
+-		modal: false,
+-		position: {
+-			my: "center",
+-			at: "center",
+-			of: window,
+-			collision: "fit",
+-			// Ensure the titlebar is always visible
+-			using: function( pos ) {
+-				var topOffset = $( this ).css( pos ).offset().top;
+-				if ( topOffset < 0 ) {
+-					$( this ).css( "top", pos.top - topOffset );
+-				}
+-			}
+-		},
+-		resizable: true,
+-		show: null,
+-		title: null,
+-		width: 300,
+-
+-		// callbacks
+-		beforeClose: null,
+-		close: null,
+-		drag: null,
+-		dragStart: null,
+-		dragStop: null,
+-		focus: null,
+-		open: null,
+-		resize: null,
+-		resizeStart: null,
+-		resizeStop: null
+-	},
+-
+-	_create: function() {
+-		this.originalCss = {
+-			display: this.element[0].style.display,
+-			width: this.element[0].style.width,
+-			minHeight: this.element[0].style.minHeight,
+-			maxHeight: this.element[0].style.maxHeight,
+-			height: this.element[0].style.height
+-		};
+-		this.originalPosition = {
+-			parent: this.element.parent(),
+-			index: this.element.parent().children().index( this.element )
+-		};
+-		this.originalTitle = this.element.attr("title");
+-		this.options.title = this.options.title || this.originalTitle;
+-
+-		this._createWrapper();
+-
+-		this.element
+-			.show()
+-			.removeAttr("title")
+-			.addClass("ui-dialog-content ui-widget-content")
+-			.appendTo( this.uiDialog );
+-
+-		this._createTitlebar();
+-		this._createButtonPane();
+-
+-		if ( this.options.draggable && $.fn.draggable ) {
+-			this._makeDraggable();
+-		}
+-		if ( this.options.resizable && $.fn.resizable ) {
+-			this._makeResizable();
+-		}
+-
+-		this._isOpen = false;
+-	},
+-
+-	_init: function() {
+-		if ( this.options.autoOpen ) {
+-			this.open();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-		if ( element && (element.jquery || element.nodeType) ) {
+-			return $( element );
+-		}
+-		return this.document.find( element || "body" ).eq( 0 );
+-	},
+-
+-	_destroy: function() {
+-		var next,
+-			originalPosition = this.originalPosition;
+-
+-		this._destroyOverlay();
+-
+-		this.element
+-			.removeUniqueId()
+-			.removeClass("ui-dialog-content ui-widget-content")
+-			.css( this.originalCss )
+-			// Without detaching first, the following becomes really slow
+-			.detach();
+-
+-		this.uiDialog.stop( true, true ).remove();
+-
+-		if ( this.originalTitle ) {
+-			this.element.attr( "title", this.originalTitle );
+-		}
+-
+-		next = originalPosition.parent.children().eq( originalPosition.index );
+-		// Don't try to place the dialog next to itself (#8613)
+-		if ( next.length && next[0] !== this.element[0] ) {
+-			next.before( this.element );
+-		} else {
+-			originalPosition.parent.append( this.element );
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.uiDialog;
+-	},
+-
+-	disable: $.noop,
+-	enable: $.noop,
+-
+-	close: function( event ) {
+-		var that = this;
+-
+-		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+-			return;
+-		}
+-
+-		this._isOpen = false;
+-		this._destroyOverlay();
+-
+-		if ( !this.opener.filter(":focusable").focus().length ) {
+-			// Hiding a focused element doesn't trigger blur in WebKit
+-			// so in case we have nothing to focus on, explicitly blur the active element
+-			// https://bugs.webkit.org/show_bug.cgi?id=47182
+-			$( this.document[0].activeElement ).blur();
+-		}
+-
+-		this._hide( this.uiDialog, this.options.hide, function() {
+-			that._trigger( "close", event );
+-		});
+-	},
+-
+-	isOpen: function() {
+-		return this._isOpen;
+-	},
+-
+-	moveToTop: function() {
+-		this._moveToTop();
+-	},
+-
+-	_moveToTop: function( event, silent ) {
+-		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
+-		if ( moved && !silent ) {
+-			this._trigger( "focus", event );
+-		}
+-		return moved;
+-	},
+-
+-	open: function() {
+-		var that = this;
+-		if ( this._isOpen ) {
+-			if ( this._moveToTop() ) {
+-				this._focusTabbable();
+-			}
+-			return;
+-		}
+-
+-		this._isOpen = true;
+-		this.opener = $( this.document[0].activeElement );
+-
+-		this._size();
+-		this._position();
+-		this._createOverlay();
+-		this._moveToTop( null, true );
+-		this._show( this.uiDialog, this.options.show, function() {
+-			that._focusTabbable();
+-			that._trigger("focus");
+-		});
+-
+-		this._trigger("open");
+-	},
+-
+-	_focusTabbable: function() {
+-		// Set focus to the first match:
+-		// 1. First element inside the dialog matching [autofocus]
+-		// 2. Tabbable element inside the content element
+-		// 3. Tabbable element inside the buttonpane
+-		// 4. The close button
+-		// 5. The dialog itself
+-		var hasFocus = this.element.find("[autofocus]");
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.element.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogButtonPane.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialog;
+-		}
+-		hasFocus.eq( 0 ).focus();
+-	},
+-
+-	_keepFocus: function( event ) {
+-		function checkFocus() {
+-			var activeElement = this.document[0].activeElement,
+-				isActive = this.uiDialog[0] === activeElement ||
+-					$.contains( this.uiDialog[0], activeElement );
+-			if ( !isActive ) {
+-				this._focusTabbable();
+-			}
+-		}
+-		event.preventDefault();
+-		checkFocus.call( this );
+-		// support: IE
+-		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+-		// so we check again later
+-		this._delay( checkFocus );
+-	},
+-
+-	_createWrapper: function() {
+-		this.uiDialog = $("<div>")
+-			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+-				this.options.dialogClass )
+-			.hide()
+-			.attr({
+-				// Setting tabIndex makes the div focusable
+-				tabIndex: -1,
+-				role: "dialog"
+-			})
+-			.appendTo( this._appendTo() );
+-
+-		this._on( this.uiDialog, {
+-			keydown: function( event ) {
+-				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+-						event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					event.preventDefault();
+-					this.close( event );
+-					return;
+-				}
+-
+-				// prevent tabbing out of dialogs
+-				if ( event.keyCode !== $.ui.keyCode.TAB ) {
+-					return;
+-				}
+-				var tabbables = this.uiDialog.find(":tabbable"),
+-					first = tabbables.filter(":first"),
+-					last  = tabbables.filter(":last");
+-
+-				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+-					first.focus( 1 );
+-					event.preventDefault();
+-				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+-					last.focus( 1 );
+-					event.preventDefault();
+-				}
+-			},
+-			mousedown: function( event ) {
+-				if ( this._moveToTop( event ) ) {
+-					this._focusTabbable();
+-				}
+-			}
+-		});
+-
+-		// We assume that any existing aria-describedby attribute means
+-		// that the dialog content is marked up properly
+-		// otherwise we brute force the content as the description
+-		if ( !this.element.find("[aria-describedby]").length ) {
+-			this.uiDialog.attr({
+-				"aria-describedby": this.element.uniqueId().attr("id")
+-			});
+-		}
+-	},
+-
+-	_createTitlebar: function() {
+-		var uiDialogTitle;
+-
+-		this.uiDialogTitlebar = $("<div>")
+-			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+-			.prependTo( this.uiDialog );
+-		this._on( this.uiDialogTitlebar, {
+-			mousedown: function( event ) {
+-				// Don't prevent click on close button (#8838)
+-				// Focusing a dialog that is partially scrolled out of view
+-				// causes the browser to scroll it into view, preventing the click event
+-				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
+-					// Dialog isn't getting focus when dragging (#8063)
+-					this.uiDialog.focus();
+-				}
+-			}
+-		});
+-
+-		this.uiDialogTitlebarClose = $("<button></button>")
+-			.button({
+-				label: this.options.closeText,
+-				icons: {
+-					primary: "ui-icon-closethick"
+-				},
+-				text: false
+-			})
+-			.addClass("ui-dialog-titlebar-close")
+-			.appendTo( this.uiDialogTitlebar );
+-		this._on( this.uiDialogTitlebarClose, {
+-			click: function( event ) {
+-				event.preventDefault();
+-				this.close( event );
+-			}
+-		});
+-
+-		uiDialogTitle = $("<span>")
+-			.uniqueId()
+-			.addClass("ui-dialog-title")
+-			.prependTo( this.uiDialogTitlebar );
+-		this._title( uiDialogTitle );
+-
+-		this.uiDialog.attr({
+-			"aria-labelledby": uiDialogTitle.attr("id")
+-		});
+-	},
+-
+-	_title: function( title ) {
+-		if ( !this.options.title ) {
+-			title.html("&#160;");
+-		}
+-		title.text( this.options.title );
+-	},
+-
+-	_createButtonPane: function() {
+-		this.uiDialogButtonPane = $("<div>")
+-			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+-
+-		this.uiButtonSet = $("<div>")
+-			.addClass("ui-dialog-buttonset")
+-			.appendTo( this.uiDialogButtonPane );
+-
+-		this._createButtons();
+-	},
+-
+-	_createButtons: function() {
+-		var that = this,
+-			buttons = this.options.buttons;
+-
+-		// if we already have a button pane, remove it
+-		this.uiDialogButtonPane.remove();
+-		this.uiButtonSet.empty();
+-
+-		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+-			this.uiDialog.removeClass("ui-dialog-buttons");
+-			return;
+-		}
+-
+-		$.each( buttons, function( name, props ) {
+-			var click, buttonOptions;
+-			props = $.isFunction( props ) ?
+-				{ click: props, text: name } :
+-				props;
+-			// Default to a non-submitting button
+-			props = $.extend( { type: "button" }, props );
+-			// Change the context for the click callback to be the main element
+-			click = props.click;
+-			props.click = function() {
+-				click.apply( that.element[0], arguments );
+-			};
+-			buttonOptions = {
+-				icons: props.icons,
+-				text: props.showText
+-			};
+-			delete props.icons;
+-			delete props.showText;
+-			$( "<button></button>", props )
+-				.button( buttonOptions )
+-				.appendTo( that.uiButtonSet );
+-		});
+-		this.uiDialog.addClass("ui-dialog-buttons");
+-		this.uiDialogButtonPane.appendTo( this.uiDialog );
+-	},
+-
+-	_makeDraggable: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		function filteredUi( ui ) {
+-			return {
+-				position: ui.position,
+-				offset: ui.offset
+-			};
+-		}
+-
+-		this.uiDialog.draggable({
+-			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+-			handle: ".ui-dialog-titlebar",
+-			containment: "document",
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-dragging");
+-				that._blockFrames();
+-				that._trigger( "dragStart", event, filteredUi( ui ) );
+-			},
+-			drag: function( event, ui ) {
+-				that._trigger( "drag", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.position = [
+-					ui.position.left - that.document.scrollLeft(),
+-					ui.position.top - that.document.scrollTop()
+-				];
+-				$( this ).removeClass("ui-dialog-dragging");
+-				that._unblockFrames();
+-				that._trigger( "dragStop", event, filteredUi( ui ) );
+-			}
+-		});
+-	},
+-
+-	_makeResizable: function() {
+-		var that = this,
+-			options = this.options,
+-			handles = options.resizable,
+-			// .ui-resizable has position: relative defined in the stylesheet
+-			// but dialogs have to use absolute or fixed positioning
+-			position = this.uiDialog.css("position"),
+-			resizeHandles = typeof handles === "string" ?
+-				handles	:
+-				"n,e,s,w,se,sw,ne,nw";
+-
+-		function filteredUi( ui ) {
+-			return {
+-				originalPosition: ui.originalPosition,
+-				originalSize: ui.originalSize,
+-				position: ui.position,
+-				size: ui.size
+-			};
+-		}
+-
+-		this.uiDialog.resizable({
+-			cancel: ".ui-dialog-content",
+-			containment: "document",
+-			alsoResize: this.element,
+-			maxWidth: options.maxWidth,
+-			maxHeight: options.maxHeight,
+-			minWidth: options.minWidth,
+-			minHeight: this._minHeight(),
+-			handles: resizeHandles,
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-resizing");
+-				that._blockFrames();
+-				that._trigger( "resizeStart", event, filteredUi( ui ) );
+-			},
+-			resize: function( event, ui ) {
+-				that._trigger( "resize", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.height = $( this ).height();
+-				options.width = $( this ).width();
+-				$( this ).removeClass("ui-dialog-resizing");
+-				that._unblockFrames();
+-				that._trigger( "resizeStop", event, filteredUi( ui ) );
+-			}
+-		})
+-		.css( "position", position );
+-	},
+-
+-	_minHeight: function() {
+-		var options = this.options;
+-
+-		return options.height === "auto" ?
+-			options.minHeight :
+-			Math.min( options.minHeight, options.height );
+-	},
+-
+-	_position: function() {
+-		// Need to show the dialog to get the actual offset in the position plugin
+-		var isVisible = this.uiDialog.is(":visible");
+-		if ( !isVisible ) {
+-			this.uiDialog.show();
+-		}
+-		this.uiDialog.position( this.options.position );
+-		if ( !isVisible ) {
+-			this.uiDialog.hide();
+-		}
+-	},
+-
+-	_setOptions: function( options ) {
+-		var that = this,
+-			resize = false,
+-			resizableOptions = {};
+-
+-		$.each( options, function( key, value ) {
+-			that._setOption( key, value );
+-
+-			if ( key in sizeRelatedOptions ) {
+-				resize = true;
+-			}
+-			if ( key in resizableRelatedOptions ) {
+-				resizableOptions[ key ] = value;
+-			}
+-		});
+-
+-		if ( resize ) {
+-			this._size();
+-			this._position();
+-		}
+-		if ( this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", resizableOptions );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		/*jshint maxcomplexity:15*/
+-		var isDraggable, isResizable,
+-			uiDialog = this.uiDialog;
+-
+-		if ( key === "dialogClass" ) {
+-			uiDialog
+-				.removeClass( this.options.dialogClass )
+-				.addClass( value );
+-		}
+-
+-		if ( key === "disabled" ) {
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "appendTo" ) {
+-			this.uiDialog.appendTo( this._appendTo() );
+-		}
+-
+-		if ( key === "buttons" ) {
+-			this._createButtons();
+-		}
+-
+-		if ( key === "closeText" ) {
+-			this.uiDialogTitlebarClose.button({
+-				// Ensure that we always pass a string
+-				label: "" + value
+-			});
+-		}
+-
+-		if ( key === "draggable" ) {
+-			isDraggable = uiDialog.is(":data(ui-draggable)");
+-			if ( isDraggable && !value ) {
+-				uiDialog.draggable("destroy");
+-			}
+-
+-			if ( !isDraggable && value ) {
+-				this._makeDraggable();
+-			}
+-		}
+-
+-		if ( key === "position" ) {
+-			this._position();
+-		}
+-
+-		if ( key === "resizable" ) {
+-			// currently resizable, becoming non-resizable
+-			isResizable = uiDialog.is(":data(ui-resizable)");
+-			if ( isResizable && !value ) {
+-				uiDialog.resizable("destroy");
+-			}
+-
+-			// currently resizable, changing handles
+-			if ( isResizable && typeof value === "string" ) {
+-				uiDialog.resizable( "option", "handles", value );
+-			}
+-
+-			// currently non-resizable, becoming resizable
+-			if ( !isResizable && value !== false ) {
+-				this._makeResizable();
+-			}
+-		}
+-
+-		if ( key === "title" ) {
+-			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
+-		}
+-	},
+-
+-	_size: function() {
+-		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+-		// divs will both have width and height set, so we need to reset them
+-		var nonContentHeight, minContentHeight, maxContentHeight,
+-			options = this.options;
+-
+-		// Reset content sizing
+-		this.element.show().css({
+-			width: "auto",
+-			minHeight: 0,
+-			maxHeight: "none",
+-			height: 0
+-		});
+-
+-		if ( options.minWidth > options.width ) {
+-			options.width = options.minWidth;
+-		}
+-
+-		// reset wrapper sizing
+-		// determine the height of all the non-content elements
+-		nonContentHeight = this.uiDialog.css({
+-				height: "auto",
+-				width: options.width
+-			})
+-			.outerHeight();
+-		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+-		maxContentHeight = typeof options.maxHeight === "number" ?
+-			Math.max( 0, options.maxHeight - nonContentHeight ) :
+-			"none";
+-
+-		if ( options.height === "auto" ) {
+-			this.element.css({
+-				minHeight: minContentHeight,
+-				maxHeight: maxContentHeight,
+-				height: "auto"
+-			});
+-		} else {
+-			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+-		}
+-
+-		if (this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+-		}
+-	},
+-
+-	_blockFrames: function() {
+-		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+-			var iframe = $( this );
+-
+-			return $( "<div>" )
+-				.css({
+-					position: "absolute",
+-					width: iframe.outerWidth(),
+-					height: iframe.outerHeight()
+-				})
+-				.appendTo( iframe.parent() )
+-				.offset( iframe.offset() )[0];
+-		});
+-	},
+-
+-	_unblockFrames: function() {
+-		if ( this.iframeBlocks ) {
+-			this.iframeBlocks.remove();
+-			delete this.iframeBlocks;
+-		}
+-	},
+-
+-	_allowInteraction: function( event ) {
+-		if ( $( event.target ).closest(".ui-dialog").length ) {
+-			return true;
+-		}
+-
+-		// TODO: Remove hack when datepicker implements
+-		// the .ui-front logic (#8989)
+-		return !!$( event.target ).closest(".ui-datepicker").length;
+-	},
+-
+-	_createOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		var that = this,
+-			widgetFullName = this.widgetFullName;
+-		if ( !$.ui.dialog.overlayInstances ) {
+-			// Prevent use of anchors and inputs.
+-			// We use a delay in case the overlay is created from an
+-			// event that we're going to be cancelling. (#2804)
+-			this._delay(function() {
+-				// Handle .dialog().dialog("close") (#4065)
+-				if ( $.ui.dialog.overlayInstances ) {
+-					this.document.bind( "focusin.dialog", function( event ) {
+-						if ( !that._allowInteraction( event ) ) {
+-							event.preventDefault();
+-							$(".ui-dialog:visible:last .ui-dialog-content")
+-								.data( widgetFullName )._focusTabbable();
+-						}
+-					});
+-				}
+-			});
+-		}
+-
+-		this.overlay = $("<div>")
+-			.addClass("ui-widget-overlay ui-front")
+-			.appendTo( this._appendTo() );
+-		this._on( this.overlay, {
+-			mousedown: "_keepFocus"
+-		});
+-		$.ui.dialog.overlayInstances++;
+-	},
+-
+-	_destroyOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		if ( this.overlay ) {
+-			$.ui.dialog.overlayInstances--;
+-
+-			if ( !$.ui.dialog.overlayInstances ) {
+-				this.document.unbind( "focusin.dialog" );
+-			}
+-			this.overlay.remove();
+-			this.overlay = null;
+-		}
+-	}
+-});
+-
+-$.ui.dialog.overlayInstances = 0;
+-
+-// DEPRECATED
+-if ( $.uiBackCompat !== false ) {
+-	// position option with array notation
+-	// just override with old implementation
+-	$.widget( "ui.dialog", $.ui.dialog, {
+-		_position: function() {
+-			var position = this.options.position,
+-				myAt = [],
+-				offset = [ 0, 0 ],
+-				isVisible;
+-
+-			if ( position ) {
+-				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+-					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
+-					if ( myAt.length === 1 ) {
+-						myAt[1] = myAt[0];
+-					}
+-
+-					$.each( [ "left", "top" ], function( i, offsetPosition ) {
+-						if ( +myAt[ i ] === myAt[ i ] ) {
+-							offset[ i ] = myAt[ i ];
+-							myAt[ i ] = offsetPosition;
+-						}
+-					});
+-
+-					position = {
+-						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+-							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+-						at: myAt.join(" ")
+-					};
+-				}
+-
+-				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
+-			} else {
+-				position = $.ui.dialog.prototype.options.position;
+-			}
+-
+-			// need to show the dialog to get the actual offset in the position plugin
+-			isVisible = this.uiDialog.is(":visible");
+-			if ( !isVisible ) {
+-				this.uiDialog.show();
+-			}
+-			this.uiDialog.position( position );
+-			if ( !isVisible ) {
+-				this.uiDialog.hide();
+-			}
+-		}
+-	});
+-}
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.widget( "ui.menu", {
+-	version: "1.10.3",
+-	defaultElement: "<ul>",
+-	delay: 300,
+-	options: {
+-		icons: {
+-			submenu: "ui-icon-carat-1-e"
+-		},
+-		menus: "ul",
+-		position: {
+-			my: "left top",
+-			at: "right top"
+-		},
+-		role: "menu",
+-
+-		// callbacks
+-		blur: null,
+-		focus: null,
+-		select: null
+-	},
+-
+-	_create: function() {
+-		this.activeMenu = this.element;
+-		// flag used to prevent firing of the click handler
+-		// as the event bubbles up through nested menus
+-		this.mouseHandled = false;
+-		this.element
+-			.uniqueId()
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+-			.attr({
+-				role: this.options.role,
+-				tabIndex: 0
+-			})
+-			// need to catch all clicks on disabled menu
+-			// not possible through _on
+-			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
+-				if ( this.options.disabled ) {
+-					event.preventDefault();
+-				}
+-			}, this ));
+-
+-		if ( this.options.disabled ) {
+-			this.element
+-				.addClass( "ui-state-disabled" )
+-				.attr( "aria-disabled", "true" );
+-		}
+-
+-		this._on({
+-			// Prevent focus from sticking to links inside menu after clicking
+-			// them (focus should always stay on UL during navigation).
+-			"mousedown .ui-menu-item > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-state-disabled > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-menu-item:has(a)": function( event ) {
+-				var target = $( event.target ).closest( ".ui-menu-item" );
+-				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+-					this.mouseHandled = true;
+-
+-					this.select( event );
+-					// Open submenu on click
+-					if ( target.has( ".ui-menu" ).length ) {
+-						this.expand( event );
+-					} else if ( !this.element.is( ":focus" ) ) {
+-						// Redirect focus to the menu
+-						this.element.trigger( "focus", [ true ] );
+-
+-						// If the active item is on the top level, let it stay active.
+-						// Otherwise, blur the active item since it is no longer visible.
+-						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+-							clearTimeout( this.timer );
+-						}
+-					}
+-				}
+-			},
+-			"mouseenter .ui-menu-item": function( event ) {
+-				var target = $( event.currentTarget );
+-				// Remove ui-state-active class from siblings of the newly focused menu item
+-				// to avoid a jump caused by adjacent elements both having a class with a border
+-				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
+-				this.focus( event, target );
+-			},
+-			mouseleave: "collapseAll",
+-			"mouseleave .ui-menu": "collapseAll",
+-			focus: function( event, keepActiveItem ) {
+-				// If there's already an active item, keep it active
+-				// If not, activate the first item
+-				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+-
+-				if ( !keepActiveItem ) {
+-					this.focus( event, item );
+-				}
+-			},
+-			blur: function( event ) {
+-				this._delay(function() {
+-					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+-						this.collapseAll( event );
+-					}
+-				});
+-			},
+-			keydown: "_keydown"
+-		});
+-
+-		this.refresh();
+-
+-		// Clicks outside of a menu collapse any open menus
+-		this._on( this.document, {
+-			click: function( event ) {
+-				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
+-					this.collapseAll( event );
+-				}
+-
+-				// Reset the mouseHandled flag
+-				this.mouseHandled = false;
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		// Destroy (sub)menus
+-		this.element
+-			.removeAttr( "aria-activedescendant" )
+-			.find( ".ui-menu" ).addBack()
+-				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
+-				.removeAttr( "role" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "aria-labelledby" )
+-				.removeAttr( "aria-expanded" )
+-				.removeAttr( "aria-hidden" )
+-				.removeAttr( "aria-disabled" )
+-				.removeUniqueId()
+-				.show();
+-
+-		// Destroy menu items
+-		this.element.find( ".ui-menu-item" )
+-			.removeClass( "ui-menu-item" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-disabled" )
+-			.children( "a" )
+-				.removeUniqueId()
+-				.removeClass( "ui-corner-all ui-state-hover" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "role" )
+-				.removeAttr( "aria-haspopup" )
+-				.children().each( function() {
+-					var elem = $( this );
+-					if ( elem.data( "ui-menu-submenu-carat" ) ) {
+-						elem.remove();
+-					}
+-				});
+-
+-		// Destroy menu dividers
+-		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:20*/
+-		var match, prev, character, skip, regex,
+-			preventDefault = true;
+-
+-		function escape( value ) {
+-			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+-		}
+-
+-		switch ( event.keyCode ) {
+-		case $.ui.keyCode.PAGE_UP:
+-			this.previousPage( event );
+-			break;
+-		case $.ui.keyCode.PAGE_DOWN:
+-			this.nextPage( event );
+-			break;
+-		case $.ui.keyCode.HOME:
+-			this._move( "first", "first", event );
+-			break;
+-		case $.ui.keyCode.END:
+-			this._move( "last", "last", event );
+-			break;
+-		case $.ui.keyCode.UP:
+-			this.previous( event );
+-			break;
+-		case $.ui.keyCode.DOWN:
+-			this.next( event );
+-			break;
+-		case $.ui.keyCode.LEFT:
+-			this.collapse( event );
+-			break;
+-		case $.ui.keyCode.RIGHT:
+-			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+-				this.expand( event );
+-			}
+-			break;
+-		case $.ui.keyCode.ENTER:
+-		case $.ui.keyCode.SPACE:
+-			this._activate( event );
+-			break;
+-		case $.ui.keyCode.ESCAPE:
+-			this.collapse( event );
+-			break;
+-		default:
+-			preventDefault = false;
+-			prev = this.previousFilter || "";
+-			character = String.fromCharCode( event.keyCode );
+-			skip = false;
+-
+-			clearTimeout( this.filterTimer );
+-
+-			if ( character === prev ) {
+-				skip = true;
+-			} else {
+-				character = prev + character;
+-			}
+-
+-			regex = new RegExp( "^" + escape( character ), "i" );
+-			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-				return regex.test( $( this ).children( "a" ).text() );
+-			});
+-			match = skip && match.index( this.active.next() ) !== -1 ?
+-				this.active.nextAll( ".ui-menu-item" ) :
+-				match;
+-
+-			// If no matches on the current filter, reset to the last character pressed
+-			// to move down the menu to the first item that starts with that character
+-			if ( !match.length ) {
+-				character = String.fromCharCode( event.keyCode );
+-				regex = new RegExp( "^" + escape( character ), "i" );
+-				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-					return regex.test( $( this ).children( "a" ).text() );
+-				});
+-			}
+-
+-			if ( match.length ) {
+-				this.focus( event, match );
+-				if ( match.length > 1 ) {
+-					this.previousFilter = character;
+-					this.filterTimer = this._delay(function() {
+-						delete this.previousFilter;
+-					}, 1000 );
+-				} else {
+-					delete this.previousFilter;
+-				}
+-			} else {
+-				delete this.previousFilter;
+-			}
+-		}
+-
+-		if ( preventDefault ) {
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_activate: function( event ) {
+-		if ( !this.active.is( ".ui-state-disabled" ) ) {
+-			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
+-				this.expand( event );
+-			} else {
+-				this.select( event );
+-			}
+-		}
+-	},
+-
+-	refresh: function() {
+-		var menus,
+-			icon = this.options.icons.submenu,
+-			submenus = this.element.find( this.options.menus );
+-
+-		// Initialize nested menus
+-		submenus.filter( ":not(.ui-menu)" )
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.hide()
+-			.attr({
+-				role: this.options.role,
+-				"aria-hidden": "true",
+-				"aria-expanded": "false"
+-			})
+-			.each(function() {
+-				var menu = $( this ),
+-					item = menu.prev( "a" ),
+-					submenuCarat = $( "<span>" )
+-						.addClass( "ui-menu-icon ui-icon " + icon )
+-						.data( "ui-menu-submenu-carat", true );
+-
+-				item
+-					.attr( "aria-haspopup", "true" )
+-					.prepend( submenuCarat );
+-				menu.attr( "aria-labelledby", item.attr( "id" ) );
+-			});
+-
+-		menus = submenus.add( this.element );
+-
+-		// Don't refresh list items that are already adapted
+-		menus.children( ":not(.ui-menu-item):has(a)" )
+-			.addClass( "ui-menu-item" )
+-			.attr( "role", "presentation" )
+-			.children( "a" )
+-				.uniqueId()
+-				.addClass( "ui-corner-all" )
+-				.attr({
+-					tabIndex: -1,
+-					role: this._itemRole()
+-				});
+-
+-		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
+-		menus.children( ":not(.ui-menu-item)" ).each(function() {
+-			var item = $( this );
+-			// hyphen, em dash, en dash
+-			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
+-				item.addClass( "ui-widget-content ui-menu-divider" );
+-			}
+-		});
+-
+-		// Add aria-disabled attribute to any disabled menu item
+-		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+-
+-		// If the active item has been removed, blur the menu
+-		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			this.blur();
+-		}
+-	},
+-
+-	_itemRole: function() {
+-		return {
+-			menu: "menuitem",
+-			listbox: "option"
+-		}[ this.options.role ];
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "icons" ) {
+-			this.element.find( ".ui-menu-icon" )
+-				.removeClass( this.options.icons.submenu )
+-				.addClass( value.submenu );
+-		}
+-		this._super( key, value );
+-	},
+-
+-	focus: function( event, item ) {
+-		var nested, focused;
+-		this.blur( event, event && event.type === "focus" );
+-
+-		this._scrollIntoView( item );
+-
+-		this.active = item.first();
+-		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
+-		// Only update aria-activedescendant if there's a role
+-		// otherwise we assume focus is managed elsewhere
+-		if ( this.options.role ) {
+-			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+-		}
+-
+-		// Highlight active parent menu item, if any
+-		this.active
+-			.parent()
+-			.closest( ".ui-menu-item" )
+-			.children( "a:first" )
+-			.addClass( "ui-state-active" );
+-
+-		if ( event && event.type === "keydown" ) {
+-			this._close();
+-		} else {
+-			this.timer = this._delay(function() {
+-				this._close();
+-			}, this.delay );
+-		}
+-
+-		nested = item.children( ".ui-menu" );
+-		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
+-			this._startOpening(nested);
+-		}
+-		this.activeMenu = item.parent();
+-
+-		this._trigger( "focus", event, { item: item } );
+-	},
+-
+-	_scrollIntoView: function( item ) {
+-		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+-		if ( this._hasScroll() ) {
+-			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+-			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+-			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+-			scroll = this.activeMenu.scrollTop();
+-			elementHeight = this.activeMenu.height();
+-			itemHeight = item.height();
+-
+-			if ( offset < 0 ) {
+-				this.activeMenu.scrollTop( scroll + offset );
+-			} else if ( offset + itemHeight > elementHeight ) {
+-				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+-			}
+-		}
+-	},
+-
+-	blur: function( event, fromFocus ) {
+-		if ( !fromFocus ) {
+-			clearTimeout( this.timer );
+-		}
+-
+-		if ( !this.active ) {
+-			return;
+-		}
+-
+-		this.active.children( "a" ).removeClass( "ui-state-focus" );
+-		this.active = null;
+-
+-		this._trigger( "blur", event, { item: this.active } );
+-	},
+-
+-	_startOpening: function( submenu ) {
+-		clearTimeout( this.timer );
+-
+-		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
+-		// shift in the submenu position when mousing over the carat icon
+-		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+-			return;
+-		}
+-
+-		this.timer = this._delay(function() {
+-			this._close();
+-			this._open( submenu );
+-		}, this.delay );
+-	},
+-
+-	_open: function( submenu ) {
+-		var position = $.extend({
+-			of: this.active
+-		}, this.options.position );
+-
+-		clearTimeout( this.timer );
+-		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+-			.hide()
+-			.attr( "aria-hidden", "true" );
+-
+-		submenu
+-			.show()
+-			.removeAttr( "aria-hidden" )
+-			.attr( "aria-expanded", "true" )
+-			.position( position );
+-	},
+-
+-	collapseAll: function( event, all ) {
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			// If we were passed an event, look for the submenu that contains the event
+-			var currentMenu = all ? this.element :
+-				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+-
+-			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+-			if ( !currentMenu.length ) {
+-				currentMenu = this.element;
+-			}
+-
+-			this._close( currentMenu );
+-
+-			this.blur( event );
+-			this.activeMenu = currentMenu;
+-		}, this.delay );
+-	},
+-
+-	// With no arguments, closes the currently active menu - if nothing is active
+-	// it closes all menus.  If passed an argument, it will search for menus BELOW
+-	_close: function( startMenu ) {
+-		if ( !startMenu ) {
+-			startMenu = this.active ? this.active.parent() : this.element;
+-		}
+-
+-		startMenu
+-			.find( ".ui-menu" )
+-				.hide()
+-				.attr( "aria-hidden", "true" )
+-				.attr( "aria-expanded", "false" )
+-			.end()
+-			.find( "a.ui-state-active" )
+-				.removeClass( "ui-state-active" );
+-	},
+-
+-	collapse: function( event ) {
+-		var newItem = this.active &&
+-			this.active.parent().closest( ".ui-menu-item", this.element );
+-		if ( newItem && newItem.length ) {
+-			this._close();
+-			this.focus( event, newItem );
+-		}
+-	},
+-
+-	expand: function( event ) {
+-		var newItem = this.active &&
+-			this.active
+-				.children( ".ui-menu " )
+-				.children( ".ui-menu-item" )
+-				.first();
+-
+-		if ( newItem && newItem.length ) {
+-			this._open( newItem.parent() );
+-
+-			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+-			this._delay(function() {
+-				this.focus( event, newItem );
+-			});
+-		}
+-	},
+-
+-	next: function( event ) {
+-		this._move( "next", "first", event );
+-	},
+-
+-	previous: function( event ) {
+-		this._move( "prev", "last", event );
+-	},
+-
+-	isFirstItem: function() {
+-		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+-	},
+-
+-	isLastItem: function() {
+-		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+-	},
+-
+-	_move: function( direction, filter, event ) {
+-		var next;
+-		if ( this.active ) {
+-			if ( direction === "first" || direction === "last" ) {
+-				next = this.active
+-					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+-					.eq( -1 );
+-			} else {
+-				next = this.active
+-					[ direction + "All" ]( ".ui-menu-item" )
+-					.eq( 0 );
+-			}
+-		}
+-		if ( !next || !next.length || !this.active ) {
+-			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
+-		}
+-
+-		this.focus( event, next );
+-	},
+-
+-	nextPage: function( event ) {
+-		var item, base, height;
+-
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isLastItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.nextAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base - height < 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
+-				[ !this.active ? "first" : "last" ]() );
+-		}
+-	},
+-
+-	previousPage: function( event ) {
+-		var item, base, height;
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isFirstItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.prevAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base + height > 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+-		}
+-	},
+-
+-	_hasScroll: function() {
+-		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+-	},
+-
+-	select: function( event ) {
+-		// TODO: It should never be possible to not have an active item at this
+-		// point, but the tests don't trigger mouseenter before click.
+-		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+-		var ui = { item: this.active };
+-		if ( !this.active.has( ".ui-menu" ).length ) {
+-			this.collapseAll( event, true );
+-		}
+-		this._trigger( "select", event, ui );
+-	}
+-});
+-
+-}( jQuery ));
+-(function( $, undefined ) {
+-
+-$.widget( "ui.progressbar", {
+-	version: "1.10.3",
+-	options: {
+-		max: 100,
+-		value: 0,
+-
+-		change: null,
+-		complete: null
+-	},
+-
+-	min: 0,
+-
+-	_create: function() {
+-		// Constrain initial value
+-		this.oldValue = this.options.value = this._constrainedValue();
+-
+-		this.element
+-			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.attr({
+-				// Only set static values, aria-valuenow and aria-valuemax are
+-				// set inside _refreshValue()
+-				role: "progressbar",
+-				"aria-valuemin": this.min
+-			});
+-
+-		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+-			.appendTo( this.element );
+-
+-		this._refreshValue();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-
+-		this.valueDiv.remove();
+-	},
+-
+-	value: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			return this.options.value;
+-		}
+-
+-		this.options.value = this._constrainedValue( newValue );
+-		this._refreshValue();
+-	},
+-
+-	_constrainedValue: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			newValue = this.options.value;
+-		}
+-
+-		this.indeterminate = newValue === false;
+-
+-		// sanitize value
+-		if ( typeof newValue !== "number" ) {
+-			newValue = 0;
+-		}
+-
+-		return this.indeterminate ? false :
+-			Math.min( this.options.max, Math.max( this.min, newValue ) );
+-	},
+-
+-	_setOptions: function( options ) {
+-		// Ensure "value" option is set after other values (like max)
+-		var value = options.value;
+-		delete options.value;
+-
+-		this._super( options );
+-
+-		this.options.value = this._constrainedValue( value );
+-		this._refreshValue();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "max" ) {
+-			// Don't allow a max less than min
+-			value = Math.max( this.min, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	_percentage: function() {
+-		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+-	},
+-
+-	_refreshValue: function() {
+-		var value = this.options.value,
+-			percentage = this._percentage();
+-
+-		this.valueDiv
+-			.toggle( this.indeterminate || value > this.min )
+-			.toggleClass( "ui-corner-right", value === this.options.max )
+-			.width( percentage.toFixed(0) + "%" );
+-
+-		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+-
+-		if ( this.indeterminate ) {
+-			this.element.removeAttr( "aria-valuenow" );
+-			if ( !this.overlayDiv ) {
+-				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+-			}
+-		} else {
+-			this.element.attr({
+-				"aria-valuemax": this.options.max,
+-				"aria-valuenow": value
+-			});
+-			if ( this.overlayDiv ) {
+-				this.overlayDiv.remove();
+-				this.overlayDiv = null;
+-			}
+-		}
+-
+-		if ( this.oldValue !== value ) {
+-			this.oldValue = value;
+-			this._trigger( "change" );
+-		}
+-		if ( value === this.options.max ) {
+-			this._trigger( "complete" );
+-		}
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-// number of pages in a slider
+-// (how many times can you page up/down to go through the whole range)
+-var numPages = 5;
+-
+-$.widget( "ui.slider", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "slide",
+-
+-	options: {
+-		animate: false,
+-		distance: 0,
+-		max: 100,
+-		min: 0,
+-		orientation: "horizontal",
+-		range: false,
+-		step: 1,
+-		value: 0,
+-		values: null,
+-
+-		// callbacks
+-		change: null,
+-		slide: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		this._keySliding = false;
+-		this._mouseSliding = false;
+-		this._animateOff = true;
+-		this._handleIndex = null;
+-		this._detectOrientation();
+-		this._mouseInit();
+-
+-		this.element
+-			.addClass( "ui-slider" +
+-				" ui-slider-" + this.orientation +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all");
+-
+-		this._refresh();
+-		this._setOption( "disabled", this.options.disabled );
+-
+-		this._animateOff = false;
+-	},
+-
+-	_refresh: function() {
+-		this._createRange();
+-		this._createHandles();
+-		this._setupEvents();
+-		this._refreshValue();
+-	},
+-
+-	_createHandles: function() {
+-		var i, handleCount,
+-			options = this.options,
+-			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+-			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+-			handles = [];
+-
+-		handleCount = ( options.values && options.values.length ) || 1;
+-
+-		if ( existingHandles.length > handleCount ) {
+-			existingHandles.slice( handleCount ).remove();
+-			existingHandles = existingHandles.slice( 0, handleCount );
+-		}
+-
+-		for ( i = existingHandles.length; i < handleCount; i++ ) {
+-			handles.push( handle );
+-		}
+-
+-		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+-
+-		this.handle = this.handles.eq( 0 );
+-
+-		this.handles.each(function( i ) {
+-			$( this ).data( "ui-slider-handle-index", i );
+-		});
+-	},
+-
+-	_createRange: function() {
+-		var options = this.options,
+-			classes = "";
+-
+-		if ( options.range ) {
+-			if ( options.range === true ) {
+-				if ( !options.values ) {
+-					options.values = [ this._valueMin(), this._valueMin() ];
+-				} else if ( options.values.length && options.values.length !== 2 ) {
+-					options.values = [ options.values[0], options.values[0] ];
+-				} else if ( $.isArray( options.values ) ) {
+-					options.values = options.values.slice(0);
+-				}
+-			}
+-
+-			if ( !this.range || !this.range.length ) {
+-				this.range = $( "<div></div>" )
+-					.appendTo( this.element );
+-
+-				classes = "ui-slider-range" +
+-				// note: this isn't the most fittingly semantic framework class for this element,
+-				// but worked best visually with a variety of themes
+-				" ui-widget-header ui-corner-all";
+-			} else {
+-				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+-					// Handle range switching from true to min/max
+-					.css({
+-						"left": "",
+-						"bottom": ""
+-					});
+-			}
+-
+-			this.range.addClass( classes +
+-				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+-		} else {
+-			this.range = $([]);
+-		}
+-	},
+-
+-	_setupEvents: function() {
+-		var elements = this.handles.add( this.range ).filter( "a" );
+-		this._off( elements );
+-		this._on( elements, this._handleEvents );
+-		this._hoverable( elements );
+-		this._focusable( elements );
+-	},
+-
+-	_destroy: function() {
+-		this.handles.remove();
+-		this.range.remove();
+-
+-		this.element
+-			.removeClass( "ui-slider" +
+-				" ui-slider-horizontal" +
+-				" ui-slider-vertical" +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" );
+-
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function( event ) {
+-		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+-			that = this,
+-			o = this.options;
+-
+-		if ( o.disabled ) {
+-			return false;
+-		}
+-
+-		this.elementSize = {
+-			width: this.element.outerWidth(),
+-			height: this.element.outerHeight()
+-		};
+-		this.elementOffset = this.element.offset();
+-
+-		position = { x: event.pageX, y: event.pageY };
+-		normValue = this._normValueFromMouse( position );
+-		distance = this._valueMax() - this._valueMin() + 1;
+-		this.handles.each(function( i ) {
+-			var thisDistance = Math.abs( normValue - that.values(i) );
+-			if (( distance > thisDistance ) ||
+-				( distance === thisDistance &&
+-					(i === that._lastChangedValue || that.values(i) === o.min ))) {
+-				distance = thisDistance;
+-				closestHandle = $( this );
+-				index = i;
+-			}
+-		});
+-
+-		allowed = this._start( event, index );
+-		if ( allowed === false ) {
+-			return false;
+-		}
+-		this._mouseSliding = true;
+-
+-		this._handleIndex = index;
+-
+-		closestHandle
+-			.addClass( "ui-state-active" )
+-			.focus();
+-
+-		offset = closestHandle.offset();
+-		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+-		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+-			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+-			top: event.pageY - offset.top -
+-				( closestHandle.height() / 2 ) -
+-				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+-				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+-				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+-		};
+-
+-		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+-			this._slide( event, index, normValue );
+-		}
+-		this._animateOff = true;
+-		return true;
+-	},
+-
+-	_mouseStart: function() {
+-		return true;
+-	},
+-
+-	_mouseDrag: function( event ) {
+-		var position = { x: event.pageX, y: event.pageY },
+-			normValue = this._normValueFromMouse( position );
+-
+-		this._slide( event, this._handleIndex, normValue );
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function( event ) {
+-		this.handles.removeClass( "ui-state-active" );
+-		this._mouseSliding = false;
+-
+-		this._stop( event, this._handleIndex );
+-		this._change( event, this._handleIndex );
+-
+-		this._handleIndex = null;
+-		this._clickOffset = null;
+-		this._animateOff = false;
+-
+-		return false;
+-	},
+-
+-	_detectOrientation: function() {
+-		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+-	},
+-
+-	_normValueFromMouse: function( position ) {
+-		var pixelTotal,
+-			pixelMouse,
+-			percentMouse,
+-			valueTotal,
+-			valueMouse;
+-
+-		if ( this.orientation === "horizontal" ) {
+-			pixelTotal = this.elementSize.width;
+-			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+-		} else {
+-			pixelTotal = this.elementSize.height;
+-			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+-		}
+-
+-		percentMouse = ( pixelMouse / pixelTotal );
+-		if ( percentMouse > 1 ) {
+-			percentMouse = 1;
+-		}
+-		if ( percentMouse < 0 ) {
+-			percentMouse = 0;
+-		}
+-		if ( this.orientation === "vertical" ) {
+-			percentMouse = 1 - percentMouse;
+-		}
+-
+-		valueTotal = this._valueMax() - this._valueMin();
+-		valueMouse = this._valueMin() + percentMouse * valueTotal;
+-
+-		return this._trimAlignValue( valueMouse );
+-	},
+-
+-	_start: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-		return this._trigger( "start", event, uiHash );
+-	},
+-
+-	_slide: function( event, index, newVal ) {
+-		var otherVal,
+-			newValues,
+-			allowed;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			otherVal = this.values( index ? 0 : 1 );
+-
+-			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+-					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+-				) {
+-				newVal = otherVal;
+-			}
+-
+-			if ( newVal !== this.values( index ) ) {
+-				newValues = this.values();
+-				newValues[ index ] = newVal;
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal,
+-					values: newValues
+-				} );
+-				otherVal = this.values( index ? 0 : 1 );
+-				if ( allowed !== false ) {
+-					this.values( index, newVal, true );
+-				}
+-			}
+-		} else {
+-			if ( newVal !== this.value() ) {
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal
+-				} );
+-				if ( allowed !== false ) {
+-					this.value( newVal );
+-				}
+-			}
+-		}
+-	},
+-
+-	_stop: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-
+-		this._trigger( "stop", event, uiHash );
+-	},
+-
+-	_change: function( event, index ) {
+-		if ( !this._keySliding && !this._mouseSliding ) {
+-			var uiHash = {
+-				handle: this.handles[ index ],
+-				value: this.value()
+-			};
+-			if ( this.options.values && this.options.values.length ) {
+-				uiHash.value = this.values( index );
+-				uiHash.values = this.values();
+-			}
+-
+-			//store the last changed value index for reference when handles overlap
+-			this._lastChangedValue = index;
+-
+-			this._trigger( "change", event, uiHash );
+-		}
+-	},
+-
+-	value: function( newValue ) {
+-		if ( arguments.length ) {
+-			this.options.value = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, 0 );
+-			return;
+-		}
+-
+-		return this._value();
+-	},
+-
+-	values: function( index, newValue ) {
+-		var vals,
+-			newValues,
+-			i;
+-
+-		if ( arguments.length > 1 ) {
+-			this.options.values[ index ] = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, index );
+-			return;
+-		}
+-
+-		if ( arguments.length ) {
+-			if ( $.isArray( arguments[ 0 ] ) ) {
+-				vals = this.options.values;
+-				newValues = arguments[ 0 ];
+-				for ( i = 0; i < vals.length; i += 1 ) {
+-					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+-					this._change( null, i );
+-				}
+-				this._refreshValue();
+-			} else {
+-				if ( this.options.values && this.options.values.length ) {
+-					return this._values( index );
+-				} else {
+-					return this.value();
+-				}
+-			}
+-		} else {
+-			return this._values();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var i,
+-			valsLength = 0;
+-
+-		if ( key === "range" && this.options.range === true ) {
+-			if ( value === "min" ) {
+-				this.options.value = this._values( 0 );
+-				this.options.values = null;
+-			} else if ( value === "max" ) {
+-				this.options.value = this._values( this.options.values.length-1 );
+-				this.options.values = null;
+-			}
+-		}
+-
+-		if ( $.isArray( this.options.values ) ) {
+-			valsLength = this.options.values.length;
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-
+-		switch ( key ) {
+-			case "orientation":
+-				this._detectOrientation();
+-				this.element
+-					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+-					.addClass( "ui-slider-" + this.orientation );
+-				this._refreshValue();
+-				break;
+-			case "value":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._change( null, 0 );
+-				this._animateOff = false;
+-				break;
+-			case "values":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				for ( i = 0; i < valsLength; i += 1 ) {
+-					this._change( null, i );
+-				}
+-				this._animateOff = false;
+-				break;
+-			case "min":
+-			case "max":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._animateOff = false;
+-				break;
+-			case "range":
+-				this._animateOff = true;
+-				this._refresh();
+-				this._animateOff = false;
+-				break;
+-		}
+-	},
+-
+-	//internal value getter
+-	// _value() returns value trimmed by min and max, aligned by step
+-	_value: function() {
+-		var val = this.options.value;
+-		val = this._trimAlignValue( val );
+-
+-		return val;
+-	},
+-
+-	//internal values getter
+-	// _values() returns array of values trimmed by min and max, aligned by step
+-	// _values( index ) returns single value trimmed by min and max, aligned by step
+-	_values: function( index ) {
+-		var val,
+-			vals,
+-			i;
+-
+-		if ( arguments.length ) {
+-			val = this.options.values[ index ];
+-			val = this._trimAlignValue( val );
+-
+-			return val;
+-		} else if ( this.options.values && this.options.values.length ) {
+-			// .slice() creates a copy of the array
+-			// this copy gets trimmed by min and max and then returned
+-			vals = this.options.values.slice();
+-			for ( i = 0; i < vals.length; i+= 1) {
+-				vals[ i ] = this._trimAlignValue( vals[ i ] );
+-			}
+-
+-			return vals;
+-		} else {
+-			return [];
+-		}
+-	},
+-
+-	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+-	_trimAlignValue: function( val ) {
+-		if ( val <= this._valueMin() ) {
+-			return this._valueMin();
+-		}
+-		if ( val >= this._valueMax() ) {
+-			return this._valueMax();
+-		}
+-		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+-			valModStep = (val - this._valueMin()) % step,
+-			alignValue = val - valModStep;
+-
+-		if ( Math.abs(valModStep) * 2 >= step ) {
+-			alignValue += ( valModStep > 0 ) ? step : ( -step );
+-		}
+-
+-		// Since JavaScript has problems with large floats, round
+-		// the final value to 5 digits after the decimal point (see #4124)
+-		return parseFloat( alignValue.toFixed(5) );
+-	},
+-
+-	_valueMin: function() {
+-		return this.options.min;
+-	},
+-
+-	_valueMax: function() {
+-		return this.options.max;
+-	},
+-
+-	_refreshValue: function() {
+-		var lastValPercent, valPercent, value, valueMin, valueMax,
+-			oRange = this.options.range,
+-			o = this.options,
+-			that = this,
+-			animate = ( !this._animateOff ) ? o.animate : false,
+-			_set = {};
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			this.handles.each(function( i ) {
+-				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+-				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-				if ( that.options.range === true ) {
+-					if ( that.orientation === "horizontal" ) {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					} else {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					}
+-				}
+-				lastValPercent = valPercent;
+-			});
+-		} else {
+-			value = this.value();
+-			valueMin = this._valueMin();
+-			valueMax = this._valueMax();
+-			valPercent = ( valueMax !== valueMin ) ?
+-					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+-					0;
+-			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-
+-			if ( oRange === "min" && this.orientation === "horizontal" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "horizontal" ) {
+-				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-			if ( oRange === "min" && this.orientation === "vertical" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "vertical" ) {
+-				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-		}
+-	},
+-
+-	_handleEvents: {
+-		keydown: function( event ) {
+-			/*jshint maxcomplexity:25*/
+-			var allowed, curVal, newVal, step,
+-				index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-				case $.ui.keyCode.END:
+-				case $.ui.keyCode.PAGE_UP:
+-				case $.ui.keyCode.PAGE_DOWN:
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					event.preventDefault();
+-					if ( !this._keySliding ) {
+-						this._keySliding = true;
+-						$( event.target ).addClass( "ui-state-active" );
+-						allowed = this._start( event, index );
+-						if ( allowed === false ) {
+-							return;
+-						}
+-					}
+-					break;
+-			}
+-
+-			step = this.options.step;
+-			if ( this.options.values && this.options.values.length ) {
+-				curVal = newVal = this.values( index );
+-			} else {
+-				curVal = newVal = this.value();
+-			}
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-					newVal = this._valueMin();
+-					break;
+-				case $.ui.keyCode.END:
+-					newVal = this._valueMax();
+-					break;
+-				case $.ui.keyCode.PAGE_UP:
+-					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.PAGE_DOWN:
+-					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-					if ( curVal === this._valueMax() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal + step );
+-					break;
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					if ( curVal === this._valueMin() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal - step );
+-					break;
+-			}
+-
+-			this._slide( event, index, newVal );
+-		},
+-		click: function( event ) {
+-			event.preventDefault();
+-		},
+-		keyup: function( event ) {
+-			var index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			if ( this._keySliding ) {
+-				this._keySliding = false;
+-				this._stop( event, index );
+-				this._change( event, index );
+-				$( event.target ).removeClass( "ui-state-active" );
+-			}
+-		}
+-	}
+-
+-});
+-
+-}(jQuery));
+-(function( $ ) {
+-
+-function modifier( fn ) {
+-	return function() {
+-		var previous = this.element.val();
+-		fn.apply( this, arguments );
+-		this._refresh();
+-		if ( previous !== this.element.val() ) {
+-			this._trigger( "change" );
+-		}
+-	};
+-}
+-
+-$.widget( "ui.spinner", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	widgetEventPrefix: "spin",
+-	options: {
+-		culture: null,
+-		icons: {
+-			down: "ui-icon-triangle-1-s",
+-			up: "ui-icon-triangle-1-n"
+-		},
+-		incremental: true,
+-		max: null,
+-		min: null,
+-		numberFormat: null,
+-		page: 10,
+-		step: 1,
+-
+-		change: null,
+-		spin: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		// handle string values that need to be parsed
+-		this._setOption( "max", this.options.max );
+-		this._setOption( "min", this.options.min );
+-		this._setOption( "step", this.options.step );
+-
+-		// format the value, but don't constrain
+-		this._value( this.element.val(), true );
+-
+-		this._draw();
+-		this._on( this._events );
+-		this._refresh();
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_getCreateOptions: function() {
+-		var options = {},
+-			element = this.element;
+-
+-		$.each( [ "min", "max", "step" ], function( i, option ) {
+-			var value = element.attr( option );
+-			if ( value !== undefined && value.length ) {
+-				options[ option ] = value;
+-			}
+-		});
+-
+-		return options;
+-	},
+-
+-	_events: {
+-		keydown: function( event ) {
+-			if ( this._start( event ) && this._keydown( event ) ) {
+-				event.preventDefault();
+-			}
+-		},
+-		keyup: "_stop",
+-		focus: function() {
+-			this.previous = this.element.val();
+-		},
+-		blur: function( event ) {
+-			if ( this.cancelBlur ) {
+-				delete this.cancelBlur;
+-				return;
+-			}
+-
+-			this._stop();
+-			this._refresh();
+-			if ( this.previous !== this.element.val() ) {
+-				this._trigger( "change", event );
+-			}
+-		},
+-		mousewheel: function( event, delta ) {
+-			if ( !delta ) {
+-				return;
+-			}
+-			if ( !this.spinning && !this._start( event ) ) {
+-				return false;
+-			}
+-
+-			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+-			clearTimeout( this.mousewheelTimer );
+-			this.mousewheelTimer = this._delay(function() {
+-				if ( this.spinning ) {
+-					this._stop( event );
+-				}
+-			}, 100 );
+-			event.preventDefault();
+-		},
+-		"mousedown .ui-spinner-button": function( event ) {
+-			var previous;
+-
+-			// We never want the buttons to have focus; whenever the user is
+-			// interacting with the spinner, the focus should be on the input.
+-			// If the input is focused then this.previous is properly set from
+-			// when the input first received focus. If the input is not focused
+-			// then we need to set this.previous based on the value before spinning.
+-			previous = this.element[0] === this.document[0].activeElement ?
+-				this.previous : this.element.val();
+-			function checkFocus() {
+-				var isActive = this.element[0] === this.document[0].activeElement;
+-				if ( !isActive ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// support: IE
+-					// IE sets focus asynchronously, so we need to check if focus
+-					// moved off of the input because the user clicked on the button.
+-					this._delay(function() {
+-						this.previous = previous;
+-					});
+-				}
+-			}
+-
+-			// ensure focus is on (or stays on) the text field
+-			event.preventDefault();
+-			checkFocus.call( this );
+-
+-			// support: IE
+-			// IE doesn't prevent moving focus even with event.preventDefault()
+-			// so we set a flag to know when we should ignore the blur event
+-			// and check (again) if focus moved off of the input.
+-			this.cancelBlur = true;
+-			this._delay(function() {
+-				delete this.cancelBlur;
+-				checkFocus.call( this );
+-			});
+-
+-			if ( this._start( event ) === false ) {
+-				return;
+-			}
+-
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		"mouseup .ui-spinner-button": "_stop",
+-		"mouseenter .ui-spinner-button": function( event ) {
+-			// button will add ui-state-active if mouse was down while mouseleave and kept down
+-			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+-				return;
+-			}
+-
+-			if ( this._start( event ) === false ) {
+-				return false;
+-			}
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		// TODO: do we really want to consider this a stop?
+-		// shouldn't we just stop the repeater and wait until mouseup before
+-		// we trigger the stop event?
+-		"mouseleave .ui-spinner-button": "_stop"
+-	},
+-
+-	_draw: function() {
+-		var uiSpinner = this.uiSpinner = this.element
+-			.addClass( "ui-spinner-input" )
+-			.attr( "autocomplete", "off" )
+-			.wrap( this._uiSpinnerHtml() )
+-			.parent()
+-				// add buttons
+-				.append( this._buttonHtml() );
+-
+-		this.element.attr( "role", "spinbutton" );
+-
+-		// button bindings
+-		this.buttons = uiSpinner.find( ".ui-spinner-button" )
+-			.attr( "tabIndex", -1 )
+-			.button()
+-			.removeClass( "ui-corner-all" );
+-
+-		// IE 6 doesn't understand height: 50% for the buttons
+-		// unless the wrapper has an explicit height
+-		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+-				uiSpinner.height() > 0 ) {
+-			uiSpinner.height( uiSpinner.height() );
+-		}
+-
+-		// disable spinner if element was already disabled
+-		if ( this.options.disabled ) {
+-			this.disable();
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		var options = this.options,
+-			keyCode = $.ui.keyCode;
+-
+-		switch ( event.keyCode ) {
+-		case keyCode.UP:
+-			this._repeat( null, 1, event );
+-			return true;
+-		case keyCode.DOWN:
+-			this._repeat( null, -1, event );
+-			return true;
+-		case keyCode.PAGE_UP:
+-			this._repeat( null, options.page, event );
+-			return true;
+-		case keyCode.PAGE_DOWN:
+-			this._repeat( null, -options.page, event );
+-			return true;
+-		}
+-
+-		return false;
+-	},
+-
+-	_uiSpinnerHtml: function() {
+-		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+-	},
+-
+-	_buttonHtml: function() {
+-		return "" +
+-			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+-				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+-			"</a>" +
+-			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+-				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+-			"</a>";
+-	},
+-
+-	_start: function( event ) {
+-		if ( !this.spinning && this._trigger( "start", event ) === false ) {
+-			return false;
+-		}
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-		this.spinning = true;
+-		return true;
+-	},
+-
+-	_repeat: function( i, steps, event ) {
+-		i = i || 500;
+-
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			this._repeat( 40, steps, event );
+-		}, i );
+-
+-		this._spin( steps * this.options.step, event );
+-	},
+-
+-	_spin: function( step, event ) {
+-		var value = this.value() || 0;
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-
+-		value = this._adjustValue( value + step * this._increment( this.counter ) );
+-
+-		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+-			this._value( value );
+-			this.counter++;
+-		}
+-	},
+-
+-	_increment: function( i ) {
+-		var incremental = this.options.incremental;
+-
+-		if ( incremental ) {
+-			return $.isFunction( incremental ) ?
+-				incremental( i ) :
+-				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+-		}
+-
+-		return 1;
+-	},
+-
+-	_precision: function() {
+-		var precision = this._precisionOf( this.options.step );
+-		if ( this.options.min !== null ) {
+-			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+-		}
+-		return precision;
+-	},
+-
+-	_precisionOf: function( num ) {
+-		var str = num.toString(),
+-			decimal = str.indexOf( "." );
+-		return decimal === -1 ? 0 : str.length - decimal - 1;
+-	},
+-
+-	_adjustValue: function( value ) {
+-		var base, aboveMin,
+-			options = this.options;
+-
+-		// make sure we're at a valid step
+-		// - find out where we are relative to the base (min or 0)
+-		base = options.min !== null ? options.min : 0;
+-		aboveMin = value - base;
+-		// - round to the nearest step
+-		aboveMin = Math.round(aboveMin / options.step) * options.step;
+-		// - rounding is based on 0, so adjust back to our base
+-		value = base + aboveMin;
+-
+-		// fix precision from bad JS floating point math
+-		value = parseFloat( value.toFixed( this._precision() ) );
+-
+-		// clamp the value
+-		if ( options.max !== null && value > options.max) {
+-			return options.max;
+-		}
+-		if ( options.min !== null && value < options.min ) {
+-			return options.min;
+-		}
+-
+-		return value;
+-	},
+-
+-	_stop: function( event ) {
+-		if ( !this.spinning ) {
+-			return;
+-		}
+-
+-		clearTimeout( this.timer );
+-		clearTimeout( this.mousewheelTimer );
+-		this.counter = 0;
+-		this.spinning = false;
+-		this._trigger( "stop", event );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "culture" || key === "numberFormat" ) {
+-			var prevValue = this._parse( this.element.val() );
+-			this.options[ key ] = value;
+-			this.element.val( this._format( prevValue ) );
+-			return;
+-		}
+-
+-		if ( key === "max" || key === "min" || key === "step" ) {
+-			if ( typeof value === "string" ) {
+-				value = this._parse( value );
+-			}
+-		}
+-		if ( key === "icons" ) {
+-			this.buttons.first().find( ".ui-icon" )
+-				.removeClass( this.options.icons.up )
+-				.addClass( value.up );
+-			this.buttons.last().find( ".ui-icon" )
+-				.removeClass( this.options.icons.down )
+-				.addClass( value.down );
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-				this.buttons.button( "disable" );
+-			} else {
+-				this.element.prop( "disabled", false );
+-				this.buttons.button( "enable" );
+-			}
+-		}
+-	},
+-
+-	_setOptions: modifier(function( options ) {
+-		this._super( options );
+-		this._value( this.element.val() );
+-	}),
+-
+-	_parse: function( val ) {
+-		if ( typeof val === "string" && val !== "" ) {
+-			val = window.Globalize && this.options.numberFormat ?
+-				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+-		}
+-		return val === "" || isNaN( val ) ? null : val;
+-	},
+-
+-	_format: function( value ) {
+-		if ( value === "" ) {
+-			return "";
+-		}
+-		return window.Globalize && this.options.numberFormat ?
+-			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+-			value;
+-	},
+-
+-	_refresh: function() {
+-		this.element.attr({
+-			"aria-valuemin": this.options.min,
+-			"aria-valuemax": this.options.max,
+-			// TODO: what should we do with values that can't be parsed?
+-			"aria-valuenow": this._parse( this.element.val() )
+-		});
+-	},
+-
+-	// update the value without triggering change
+-	_value: function( value, allowAny ) {
+-		var parsed;
+-		if ( value !== "" ) {
+-			parsed = this._parse( value );
+-			if ( parsed !== null ) {
+-				if ( !allowAny ) {
+-					parsed = this._adjustValue( parsed );
+-				}
+-				value = this._format( parsed );
+-			}
+-		}
+-		this.element.val( value );
+-		this._refresh();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-spinner-input" )
+-			.prop( "disabled", false )
+-			.removeAttr( "autocomplete" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-		this.uiSpinner.replaceWith( this.element );
+-	},
+-
+-	stepUp: modifier(function( steps ) {
+-		this._stepUp( steps );
+-	}),
+-	_stepUp: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	stepDown: modifier(function( steps ) {
+-		this._stepDown( steps );
+-	}),
+-	_stepDown: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * -this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	pageUp: modifier(function( pages ) {
+-		this._stepUp( (pages || 1) * this.options.page );
+-	}),
+-
+-	pageDown: modifier(function( pages ) {
+-		this._stepDown( (pages || 1) * this.options.page );
+-	}),
+-
+-	value: function( newVal ) {
+-		if ( !arguments.length ) {
+-			return this._parse( this.element.val() );
+-		}
+-		modifier( this._value ).call( this, newVal );
+-	},
+-
+-	widget: function() {
+-		return this.uiSpinner;
+-	}
+-});
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-var tabId = 0,
+-	rhash = /#.*$/;
+-
+-function getNextTabId() {
+-	return ++tabId;
+-}
+-
+-function isLocal( anchor ) {
+-	return anchor.hash.length > 1 &&
+-		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
+-			decodeURIComponent( location.href.replace( rhash, "" ) );
+-}
+-
+-$.widget( "ui.tabs", {
+-	version: "1.10.3",
+-	delay: 300,
+-	options: {
+-		active: null,
+-		collapsible: false,
+-		event: "click",
+-		heightStyle: "content",
+-		hide: null,
+-		show: null,
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null,
+-		beforeLoad: null,
+-		load: null
+-	},
+-
+-	_create: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		this.running = false;
+-
+-		this.element
+-			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-tabs-collapsible", options.collapsible )
+-			// Prevent users from focusing disabled tabs via click
+-			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
+-				if ( $( this ).is( ".ui-state-disabled" ) ) {
+-					event.preventDefault();
+-				}
+-			})
+-			// support: IE <9
+-			// Preventing the default action in mousedown doesn't prevent IE
+-			// from focusing the element, so if the anchor gets focused, blur.
+-			// We don't have to worry about focusing the previously focused
+-			// element since clicking on a non-focusable element should focus
+-			// the body anyway.
+-			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+-				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+-					this.blur();
+-				}
+-			});
+-
+-		this._processTabs();
+-		options.active = this._initialActive();
+-
+-		// Take disabling tabs via class attribute from HTML
+-		// into account and update option properly.
+-		if ( $.isArray( options.disabled ) ) {
+-			options.disabled = $.unique( options.disabled.concat(
+-				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+-					return that.tabs.index( li );
+-				})
+-			) ).sort();
+-		}
+-
+-		// check for length avoids error when initializing empty list
+-		if ( this.options.active !== false && this.anchors.length ) {
+-			this.active = this._findActive( options.active );
+-		} else {
+-			this.active = $();
+-		}
+-
+-		this._refresh();
+-
+-		if ( this.active.length ) {
+-			this.load( options.active );
+-		}
+-	},
+-
+-	_initialActive: function() {
+-		var active = this.options.active,
+-			collapsible = this.options.collapsible,
+-			locationHash = location.hash.substring( 1 );
+-
+-		if ( active === null ) {
+-			// check the fragment identifier in the URL
+-			if ( locationHash ) {
+-				this.tabs.each(function( i, tab ) {
+-					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+-						active = i;
+-						return false;
+-					}
+-				});
+-			}
+-
+-			// check for a tab marked active via a class
+-			if ( active === null ) {
+-				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+-			}
+-
+-			// no active tab, set to false
+-			if ( active === null || active === -1 ) {
+-				active = this.tabs.length ? 0 : false;
+-			}
+-		}
+-
+-		// handle numbers: negative, out of range
+-		if ( active !== false ) {
+-			active = this.tabs.index( this.tabs.eq( active ) );
+-			if ( active === -1 ) {
+-				active = collapsible ? false : 0;
+-			}
+-		}
+-
+-		// don't allow collapsible: false and active: false
+-		if ( !collapsible && active === false && this.anchors.length ) {
+-			active = 0;
+-		}
+-
+-		return active;
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			tab: this.active,
+-			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+-		};
+-	},
+-
+-	_tabKeydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+-			selectedIndex = this.tabs.index( focusedTab ),
+-			goingForward = true;
+-
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		switch ( event.keyCode ) {
+-			case $.ui.keyCode.RIGHT:
+-			case $.ui.keyCode.DOWN:
+-				selectedIndex++;
+-				break;
+-			case $.ui.keyCode.UP:
+-			case $.ui.keyCode.LEFT:
+-				goingForward = false;
+-				selectedIndex--;
+-				break;
+-			case $.ui.keyCode.END:
+-				selectedIndex = this.anchors.length - 1;
+-				break;
+-			case $.ui.keyCode.HOME:
+-				selectedIndex = 0;
+-				break;
+-			case $.ui.keyCode.SPACE:
+-				// Activate only, no collapsing
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				this._activate( selectedIndex );
+-				return;
+-			case $.ui.keyCode.ENTER:
+-				// Toggle (cancel delayed activation, allow collapsing)
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				// Determine if we should collapse or activate
+-				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+-				return;
+-			default:
+-				return;
+-		}
+-
+-		// Focus the appropriate tab, based on which key was pressed
+-		event.preventDefault();
+-		clearTimeout( this.activating );
+-		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+-
+-		// Navigating with control key will prevent automatic activation
+-		if ( !event.ctrlKey ) {
+-			// Update aria-selected immediately so that AT think the tab is already selected.
+-			// Otherwise AT may confuse the user by stating that they need to activate the tab,
+-			// but the tab will already be activated by the time the announcement finishes.
+-			focusedTab.attr( "aria-selected", "false" );
+-			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+-
+-			this.activating = this._delay(function() {
+-				this.option( "active", selectedIndex );
+-			}, this.delay );
+-		}
+-	},
+-
+-	_panelKeydown: function( event ) {
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		// Ctrl+up moves focus to the current tab
+-		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+-			event.preventDefault();
+-			this.active.focus();
+-		}
+-	},
+-
+-	// Alt+page up/down moves focus to the previous/next tab (and activates)
+-	_handlePageNav: function( event ) {
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+-			this._activate( this._focusNextTab( this.options.active - 1, false ) );
+-			return true;
+-		}
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+-			this._activate( this._focusNextTab( this.options.active + 1, true ) );
+-			return true;
+-		}
+-	},
+-
+-	_findNextTab: function( index, goingForward ) {
+-		var lastTabIndex = this.tabs.length - 1;
+-
+-		function constrain() {
+-			if ( index > lastTabIndex ) {
+-				index = 0;
+-			}
+-			if ( index < 0 ) {
+-				index = lastTabIndex;
+-			}
+-			return index;
+-		}
+-
+-		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+-			index = goingForward ? index + 1 : index - 1;
+-		}
+-
+-		return index;
+-	},
+-
+-	_focusNextTab: function( index, goingForward ) {
+-		index = this._findNextTab( index, goingForward );
+-		this.tabs.eq( index ).focus();
+-		return index;
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "disabled" ) {
+-			// don't use the widget factory's disabled handling
+-			this._setupDisabled( value );
+-			return;
+-		}
+-
+-		this._super( key, value);
+-
+-		if ( key === "collapsible" ) {
+-			this.element.toggleClass( "ui-tabs-collapsible", value );
+-			// Setting collapsible: false while collapsed; open first panel
+-			if ( !value && this.options.active === false ) {
+-				this._activate( 0 );
+-			}
+-		}
+-
+-		if ( key === "event" ) {
+-			this._setupEvents( value );
+-		}
+-
+-		if ( key === "heightStyle" ) {
+-			this._setupHeightStyle( value );
+-		}
+-	},
+-
+-	_tabId: function( tab ) {
+-		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
+-	},
+-
+-	_sanitizeSelector: function( hash ) {
+-		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+-	},
+-
+-	refresh: function() {
+-		var options = this.options,
+-			lis = this.tablist.children( ":has(a[href])" );
+-
+-		// get disabled tabs from class attribute from HTML
+-		// this will get converted to a boolean if needed in _refresh()
+-		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+-			return lis.index( tab );
+-		});
+-
+-		this._processTabs();
+-
+-		// was collapsed or no tabs
+-		if ( options.active === false || !this.anchors.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// was active, but active tab is gone
+-		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining tabs are disabled
+-			if ( this.tabs.length === options.disabled.length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous tab
+-			} else {
+-				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+-			}
+-		// was active, active tab still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.tabs.index( this.active );
+-		}
+-
+-		this._refresh();
+-	},
+-
+-	_refresh: function() {
+-		this._setupDisabled( this.options.disabled );
+-		this._setupEvents( this.options.event );
+-		this._setupHeightStyle( this.options.heightStyle );
+-
+-		this.tabs.not( this.active ).attr({
+-			"aria-selected": "false",
+-			tabIndex: -1
+-		});
+-		this.panels.not( this._getPanelForTab( this.active ) )
+-			.hide()
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-hidden": "true"
+-			});
+-
+-		// Make sure one tab is in the tab order
+-		if ( !this.active.length ) {
+-			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active
+-				.addClass( "ui-tabs-active ui-state-active" )
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-			this._getPanelForTab( this.active )
+-				.show()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-	},
+-
+-	_processTabs: function() {
+-		var that = this;
+-
+-		this.tablist = this._getList()
+-			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.attr( "role", "tablist" );
+-
+-		this.tabs = this.tablist.find( "> li:has(a[href])" )
+-			.addClass( "ui-state-default ui-corner-top" )
+-			.attr({
+-				role: "tab",
+-				tabIndex: -1
+-			});
+-
+-		this.anchors = this.tabs.map(function() {
+-				return $( "a", this )[ 0 ];
+-			})
+-			.addClass( "ui-tabs-anchor" )
+-			.attr({
+-				role: "presentation",
+-				tabIndex: -1
+-			});
+-
+-		this.panels = $();
+-
+-		this.anchors.each(function( i, anchor ) {
+-			var selector, panel, panelId,
+-				anchorId = $( anchor ).uniqueId().attr( "id" ),
+-				tab = $( anchor ).closest( "li" ),
+-				originalAriaControls = tab.attr( "aria-controls" );
+-
+-			// inline tab
+-			if ( isLocal( anchor ) ) {
+-				selector = anchor.hash;
+-				panel = that.element.find( that._sanitizeSelector( selector ) );
+-			// remote tab
+-			} else {
+-				panelId = that._tabId( tab );
+-				selector = "#" + panelId;
+-				panel = that.element.find( selector );
+-				if ( !panel.length ) {
+-					panel = that._createPanel( panelId );
+-					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+-				}
+-				panel.attr( "aria-live", "polite" );
+-			}
+-
+-			if ( panel.length) {
+-				that.panels = that.panels.add( panel );
+-			}
+-			if ( originalAriaControls ) {
+-				tab.data( "ui-tabs-aria-controls", originalAriaControls );
+-			}
+-			tab.attr({
+-				"aria-controls": selector.substring( 1 ),
+-				"aria-labelledby": anchorId
+-			});
+-			panel.attr( "aria-labelledby", anchorId );
+-		});
+-
+-		this.panels
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.attr( "role", "tabpanel" );
+-	},
+-
+-	// allow overriding how to find the list for rare usage scenarios (#7715)
+-	_getList: function() {
+-		return this.element.find( "ol,ul" ).eq( 0 );
+-	},
+-
+-	_createPanel: function( id ) {
+-		return $( "<div>" )
+-			.attr( "id", id )
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.data( "ui-tabs-destroy", true );
+-	},
+-
+-	_setupDisabled: function( disabled ) {
+-		if ( $.isArray( disabled ) ) {
+-			if ( !disabled.length ) {
+-				disabled = false;
+-			} else if ( disabled.length === this.anchors.length ) {
+-				disabled = true;
+-			}
+-		}
+-
+-		// disable tabs
+-		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+-			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+-				$( li )
+-					.addClass( "ui-state-disabled" )
+-					.attr( "aria-disabled", "true" );
+-			} else {
+-				$( li )
+-					.removeClass( "ui-state-disabled" )
+-					.removeAttr( "aria-disabled" );
+-			}
+-		}
+-
+-		this.options.disabled = disabled;
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			click: function( event ) {
+-				event.preventDefault();
+-			}
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+-		this._on( this.anchors, events );
+-		this._on( this.tabs, { keydown: "_tabKeydown" } );
+-		this._on( this.panels, { keydown: "_panelKeydown" } );
+-
+-		this._focusable( this.tabs );
+-		this._hoverable( this.tabs );
+-	},
+-
+-	_setupHeightStyle: function( heightStyle ) {
+-		var maxHeight,
+-			parent = this.element.parent();
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			maxHeight -= this.element.outerHeight() - this.element.height();
+-
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.element.children().not( this.panels ).each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.panels.each(function() {
+-				$( this ).height( Math.max( 0, maxHeight -
+-					$( this ).innerHeight() + $( this ).height() ) );
+-			})
+-			.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.panels.each(function() {
+-				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+-			}).height( maxHeight );
+-		}
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			anchor = $( event.currentTarget ),
+-			tab = anchor.closest( "li" ),
+-			clickedIsActive = tab[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : this._getPanelForTab( tab ),
+-			toHide = !active.length ? $() : this._getPanelForTab( active ),
+-			eventData = {
+-				oldTab: active,
+-				oldPanel: toHide,
+-				newTab: collapsing ? $() : tab,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if ( tab.hasClass( "ui-state-disabled" ) ||
+-				// tab is already loading
+-				tab.hasClass( "ui-tabs-loading" ) ||
+-				// can't switch durning an animation
+-				this.running ||
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.tabs.index( tab );
+-
+-		this.active = clickedIsActive ? $() : tab;
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		if ( !toHide.length && !toShow.length ) {
+-			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+-		}
+-
+-		if ( toShow.length ) {
+-			this.load( this.tabs.index( tab ), event );
+-		}
+-		this._toggle( event, eventData );
+-	},
+-
+-	// handles show/hide for selecting tabs
+-	_toggle: function( event, eventData ) {
+-		var that = this,
+-			toShow = eventData.newPanel,
+-			toHide = eventData.oldPanel;
+-
+-		this.running = true;
+-
+-		function complete() {
+-			that.running = false;
+-			that._trigger( "activate", event, eventData );
+-		}
+-
+-		function show() {
+-			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+-
+-			if ( toShow.length && that.options.show ) {
+-				that._show( toShow, that.options.show, complete );
+-			} else {
+-				toShow.show();
+-				complete();
+-			}
+-		}
+-
+-		// start out by hiding, then showing, then completing
+-		if ( toHide.length && this.options.hide ) {
+-			this._hide( toHide, this.options.hide, function() {
+-				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-				show();
+-			});
+-		} else {
+-			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-			toHide.hide();
+-			show();
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		eventData.oldTab.attr( "aria-selected", "false" );
+-		// If we're switching tabs, remove the old tab from the tab order.
+-		// If we're opening from collapsed state, remove the previous tab from the tab order.
+-		// If we're collapsing, then keep the collapsing tab in the tab order.
+-		if ( toShow.length && toHide.length ) {
+-			eventData.oldTab.attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.tabs.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow.attr({
+-			"aria-expanded": "true",
+-			"aria-hidden": "false"
+-		});
+-		eventData.newTab.attr({
+-			"aria-selected": "true",
+-			tabIndex: 0
+-		});
+-	},
+-
+-	_activate: function( index ) {
+-		var anchor,
+-			active = this._findActive( index );
+-
+-		// trying to activate the already active panel
+-		if ( active[ 0 ] === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the current active header
+-		if ( !active.length ) {
+-			active = this.active;
+-		}
+-
+-		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+-		this._eventHandler({
+-			target: anchor,
+-			currentTarget: anchor,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( index ) {
+-		return index === false ? $() : this.tabs.eq( index );
+-	},
+-
+-	_getIndex: function( index ) {
+-		// meta-function to give users option to provide a href string instead of a numerical index.
+-		if ( typeof index === "string" ) {
+-			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+-		}
+-
+-		return index;
+-	},
+-
+-	_destroy: function() {
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+-
+-		this.tablist
+-			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.removeAttr( "role" );
+-
+-		this.anchors
+-			.removeClass( "ui-tabs-anchor" )
+-			.removeAttr( "role" )
+-			.removeAttr( "tabIndex" )
+-			.removeUniqueId();
+-
+-		this.tabs.add( this.panels ).each(function() {
+-			if ( $.data( this, "ui-tabs-destroy" ) ) {
+-				$( this ).remove();
+-			} else {
+-				$( this )
+-					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+-						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+-					.removeAttr( "tabIndex" )
+-					.removeAttr( "aria-live" )
+-					.removeAttr( "aria-busy" )
+-					.removeAttr( "aria-selected" )
+-					.removeAttr( "aria-labelledby" )
+-					.removeAttr( "aria-hidden" )
+-					.removeAttr( "aria-expanded" )
+-					.removeAttr( "role" );
+-			}
+-		});
+-
+-		this.tabs.each(function() {
+-			var li = $( this ),
+-				prev = li.data( "ui-tabs-aria-controls" );
+-			if ( prev ) {
+-				li
+-					.attr( "aria-controls", prev )
+-					.removeData( "ui-tabs-aria-controls" );
+-			} else {
+-				li.removeAttr( "aria-controls" );
+-			}
+-		});
+-
+-		this.panels.show();
+-
+-		if ( this.options.heightStyle !== "content" ) {
+-			this.panels.css( "height", "" );
+-		}
+-	},
+-
+-	enable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === false ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = false;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.map( disabled, function( num ) {
+-					return num !== index ? num : null;
+-				});
+-			} else {
+-				disabled = $.map( this.tabs, function( li, num ) {
+-					return num !== index ? num : null;
+-				});
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	disable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === true ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = true;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.inArray( index, disabled ) !== -1 ) {
+-				return;
+-			}
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.merge( [ index ], disabled ).sort();
+-			} else {
+-				disabled = [ index ];
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	load: function( index, event ) {
+-		index = this._getIndex( index );
+-		var that = this,
+-			tab = this.tabs.eq( index ),
+-			anchor = tab.find( ".ui-tabs-anchor" ),
+-			panel = this._getPanelForTab( tab ),
+-			eventData = {
+-				tab: tab,
+-				panel: panel
+-			};
+-
+-		// not remote
+-		if ( isLocal( anchor[ 0 ] ) ) {
+-			return;
+-		}
+-
+-		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+-
+-		// support: jQuery <1.8
+-		// jQuery <1.8 returns false if the request is canceled in beforeSend,
+-		// but as of 1.8, $.ajax() always returns a jqXHR object.
+-		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+-			tab.addClass( "ui-tabs-loading" );
+-			panel.attr( "aria-busy", "true" );
+-
+-			this.xhr
+-				.success(function( response ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						panel.html( response );
+-						that._trigger( "load", event, eventData );
+-					}, 1 );
+-				})
+-				.complete(function( jqXHR, status ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						if ( status === "abort" ) {
+-							that.panels.stop( false, true );
+-						}
+-
+-						tab.removeClass( "ui-tabs-loading" );
+-						panel.removeAttr( "aria-busy" );
+-
+-						if ( jqXHR === that.xhr ) {
+-							delete that.xhr;
+-						}
+-					}, 1 );
+-				});
+-		}
+-	},
+-
+-	_ajaxSettings: function( anchor, event, eventData ) {
+-		var that = this;
+-		return {
+-			url: anchor.attr( "href" ),
+-			beforeSend: function( jqXHR, settings ) {
+-				return that._trigger( "beforeLoad", event,
+-					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+-			}
+-		};
+-	},
+-
+-	_getPanelForTab: function( tab ) {
+-		var id = $( tab ).attr( "aria-controls" );
+-		return this.element.find( this._sanitizeSelector( "#" + id ) );
+-	}
+-});
+-
+-})( jQuery );
+-(function( $ ) {
+-
+-var increments = 0;
+-
+-function addDescribedBy( elem, id ) {
+-	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+-	describedby.push( id );
+-	elem
+-		.data( "ui-tooltip-id", id )
+-		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+-}
+-
+-function removeDescribedBy( elem ) {
+-	var id = elem.data( "ui-tooltip-id" ),
+-		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+-		index = $.inArray( id, describedby );
+-	if ( index !== -1 ) {
+-		describedby.splice( index, 1 );
+-	}
+-
+-	elem.removeData( "ui-tooltip-id" );
+-	describedby = $.trim( describedby.join( " " ) );
+-	if ( describedby ) {
+-		elem.attr( "aria-describedby", describedby );
+-	} else {
+-		elem.removeAttr( "aria-describedby" );
+-	}
+-}
+-
+-$.widget( "ui.tooltip", {
+-	version: "1.10.3",
+-	options: {
+-		content: function() {
+-			// support: IE<9, Opera in jQuery <1.7
+-			// .text() can't accept undefined, so coerce to a string
+-			var title = $( this ).attr( "title" ) || "";
+-			// Escape title, since we're going from an attribute to raw HTML
+-			return $( "<a>" ).text( title ).html();
+-		},
+-		hide: true,
+-		// Disabled elements have inconsistent behavior across browsers (#8661)
+-		items: "[title]:not([disabled])",
+-		position: {
+-			my: "left top+15",
+-			at: "left bottom",
+-			collision: "flipfit flip"
+-		},
+-		show: true,
+-		tooltipClass: null,
+-		track: false,
+-
+-		// callbacks
+-		close: null,
+-		open: null
+-	},
+-
+-	_create: function() {
+-		this._on({
+-			mouseover: "open",
+-			focusin: "open"
+-		});
+-
+-		// IDs of generated tooltips, needed for destroy
+-		this.tooltips = {};
+-		// IDs of parent tooltips where we removed the title attribute
+-		this.parents = {};
+-
+-		if ( this.options.disabled ) {
+-			this._disable();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var that = this;
+-
+-		if ( key === "disabled" ) {
+-			this[ value ? "_disable" : "_enable" ]();
+-			this.options[ key ] = value;
+-			// disable element style changes
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "content" ) {
+-			$.each( this.tooltips, function( id, element ) {
+-				that._updateContent( element );
+-			});
+-		}
+-	},
+-
+-	_disable: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-		});
+-
+-		// remove title attributes to prevent native tooltips
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.is( "[title]" ) ) {
+-				element
+-					.data( "ui-tooltip-title", element.attr( "title" ) )
+-					.attr( "title", "" );
+-			}
+-		});
+-	},
+-
+-	_enable: function() {
+-		// restore title attributes
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-			}
+-		});
+-	},
+-
+-	open: function( event ) {
+-		var that = this,
+-			target = $( event ? event.target : this.element )
+-				// we need closest here due to mouseover bubbling,
+-				// but always pointing at the same event target
+-				.closest( this.options.items );
+-
+-		// No element to show a tooltip for or the tooltip is already open
+-		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+-			return;
+-		}
+-
+-		if ( target.attr( "title" ) ) {
+-			target.data( "ui-tooltip-title", target.attr( "title" ) );
+-		}
+-
+-		target.data( "ui-tooltip-open", true );
+-
+-		// kill parent tooltips, custom or native, for hover
+-		if ( event && event.type === "mouseover" ) {
+-			target.parents().each(function() {
+-				var parent = $( this ),
+-					blurEvent;
+-				if ( parent.data( "ui-tooltip-open" ) ) {
+-					blurEvent = $.Event( "blur" );
+-					blurEvent.target = blurEvent.currentTarget = this;
+-					that.close( blurEvent, true );
+-				}
+-				if ( parent.attr( "title" ) ) {
+-					parent.uniqueId();
+-					that.parents[ this.id ] = {
+-						element: this,
+-						title: parent.attr( "title" )
+-					};
+-					parent.attr( "title", "" );
+-				}
+-			});
+-		}
+-
+-		this._updateContent( target, event );
+-	},
+-
+-	_updateContent: function( target, event ) {
+-		var content,
+-			contentOption = this.options.content,
+-			that = this,
+-			eventType = event ? event.type : null;
+-
+-		if ( typeof contentOption === "string" ) {
+-			return this._open( event, target, contentOption );
+-		}
+-
+-		content = contentOption.call( target[0], function( response ) {
+-			// ignore async response if tooltip was closed already
+-			if ( !target.data( "ui-tooltip-open" ) ) {
+-				return;
+-			}
+-			// IE may instantly serve a cached response for ajax requests
+-			// delay this call to _open so the other call to _open runs first
+-			that._delay(function() {
+-				// jQuery creates a special event for focusin when it doesn't
+-				// exist natively. To improve performance, the native event
+-				// object is reused and the type is changed. Therefore, we can't
+-				// rely on the type being correct after the event finished
+-				// bubbling, so we set it back to the previous value. (#8740)
+-				if ( event ) {
+-					event.type = eventType;
+-				}
+-				this._open( event, target, response );
+-			});
+-		});
+-		if ( content ) {
+-			this._open( event, target, content );
+-		}
+-	},
+-
+-	_open: function( event, target, content ) {
+-		var tooltip, events, delayedShow,
+-			positionOption = $.extend( {}, this.options.position );
+-
+-		if ( !content ) {
+-			return;
+-		}
+-
+-		// Content can be updated multiple times. If the tooltip already
+-		// exists, then just update the content and bail.
+-		tooltip = this._find( target );
+-		if ( tooltip.length ) {
+-			tooltip.find( ".ui-tooltip-content" ).html( content );
+-			return;
+-		}
+-
+-		// if we have a title, clear it to prevent the native tooltip
+-		// we have to check first to avoid defining a title if none exists
+-		// (we don't want to cause an element to start matching [title])
+-		//
+-		// We use removeAttr only for key events, to allow IE to export the correct
+-		// accessible attributes. For mouse events, set to empty string to avoid
+-		// native tooltip showing up (happens only when removing inside mouseover).
+-		if ( target.is( "[title]" ) ) {
+-			if ( event && event.type === "mouseover" ) {
+-				target.attr( "title", "" );
+-			} else {
+-				target.removeAttr( "title" );
+-			}
+-		}
+-
+-		tooltip = this._tooltip( target );
+-		addDescribedBy( target, tooltip.attr( "id" ) );
+-		tooltip.find( ".ui-tooltip-content" ).html( content );
+-
+-		function position( event ) {
+-			positionOption.of = event;
+-			if ( tooltip.is( ":hidden" ) ) {
+-				return;
+-			}
+-			tooltip.position( positionOption );
+-		}
+-		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+-			this._on( this.document, {
+-				mousemove: position
+-			});
+-			// trigger once to override element-relative positioning
+-			position( event );
+-		} else {
+-			tooltip.position( $.extend({
+-				of: target
+-			}, this.options.position ) );
+-		}
+-
+-		tooltip.hide();
+-
+-		this._show( tooltip, this.options.show );
+-		// Handle tracking tooltips that are shown with a delay (#8644). As soon
+-		// as the tooltip is visible, position the tooltip using the most recent
+-		// event.
+-		if ( this.options.show && this.options.show.delay ) {
+-			delayedShow = this.delayedShow = setInterval(function() {
+-				if ( tooltip.is( ":visible" ) ) {
+-					position( positionOption.of );
+-					clearInterval( delayedShow );
+-				}
+-			}, $.fx.interval );
+-		}
+-
+-		this._trigger( "open", event, { tooltip: tooltip } );
+-
+-		events = {
+-			keyup: function( event ) {
+-				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					var fakeEvent = $.Event(event);
+-					fakeEvent.currentTarget = target[0];
+-					this.close( fakeEvent, true );
+-				}
+-			},
+-			remove: function() {
+-				this._removeTooltip( tooltip );
+-			}
+-		};
+-		if ( !event || event.type === "mouseover" ) {
+-			events.mouseleave = "close";
+-		}
+-		if ( !event || event.type === "focusin" ) {
+-			events.focusout = "close";
+-		}
+-		this._on( true, target, events );
+-	},
+-
+-	close: function( event ) {
+-		var that = this,
+-			target = $( event ? event.currentTarget : this.element ),
+-			tooltip = this._find( target );
+-
+-		// disabling closes the tooltip, so we need to track when we're closing
+-		// to avoid an infinite loop in case the tooltip becomes disabled on close
+-		if ( this.closing ) {
+-			return;
+-		}
+-
+-		// Clear the interval for delayed tracking tooltips
+-		clearInterval( this.delayedShow );
+-
+-		// only set title if we had one before (see comment in _open())
+-		if ( target.data( "ui-tooltip-title" ) ) {
+-			target.attr( "title", target.data( "ui-tooltip-title" ) );
+-		}
+-
+-		removeDescribedBy( target );
+-
+-		tooltip.stop( true );
+-		this._hide( tooltip, this.options.hide, function() {
+-			that._removeTooltip( $( this ) );
+-		});
+-
+-		target.removeData( "ui-tooltip-open" );
+-		this._off( target, "mouseleave focusout keyup" );
+-		// Remove 'remove' binding only on delegated targets
+-		if ( target[0] !== this.element[0] ) {
+-			this._off( target, "remove" );
+-		}
+-		this._off( this.document, "mousemove" );
+-
+-		if ( event && event.type === "mouseleave" ) {
+-			$.each( this.parents, function( id, parent ) {
+-				$( parent.element ).attr( "title", parent.title );
+-				delete that.parents[ id ];
+-			});
+-		}
+-
+-		this.closing = true;
+-		this._trigger( "close", event, { tooltip: tooltip } );
+-		this.closing = false;
+-	},
+-
+-	_tooltip: function( element ) {
+-		var id = "ui-tooltip-" + increments++,
+-			tooltip = $( "<div>" )
+-				.attr({
+-					id: id,
+-					role: "tooltip"
+-				})
+-				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+-					( this.options.tooltipClass || "" ) );
+-		$( "<div>" )
+-			.addClass( "ui-tooltip-content" )
+-			.appendTo( tooltip );
+-		tooltip.appendTo( this.document[0].body );
+-		this.tooltips[ id ] = element;
+-		return tooltip;
+-	},
+-
+-	_find: function( target ) {
+-		var id = target.data( "ui-tooltip-id" );
+-		return id ? $( "#" + id ) : $();
+-	},
+-
+-	_removeTooltip: function( tooltip ) {
+-		tooltip.remove();
+-		delete this.tooltips[ tooltip.attr( "id" ) ];
+-	},
+-
+-	_destroy: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			// Delegate to close method to handle common cleanup
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-
+-			// Remove immediately; destroying an open tooltip doesn't use the
+-			// hide animation
+-			$( "#" + id ).remove();
+-
+-			// Restore the title
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-				element.removeData( "ui-tooltip-title" );
+-			}
+-		});
+-	}
+-});
+-
+-}( jQuery ) );
+-(function($, undefined) {
+-
+-var dataSpace = "ui-effects-";
+-
+-$.effects = {
+-	effect: {}
+-};
+-
+-/*!
+- * jQuery Color Animations v2.1.2
+- * https://github.com/jquery/jquery-color
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * Date: Wed Jan 16 08:47:09 2013 -0600
+- */
+-(function( jQuery, undefined ) {
+-
+-	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+-
+-	// plusequals test for += 100 -= 100
+-	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+-	// a set of RE's that can match strings and generate color tuples.
+-	stringParsers = [{
+-			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ],
+-					execResult[ 3 ],
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ] * 2.55,
+-					execResult[ 2 ] * 2.55,
+-					execResult[ 3 ] * 2.55,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			space: "hsla",
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ] / 100,
+-					execResult[ 3 ] / 100,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}],
+-
+-	// jQuery.Color( )
+-	color = jQuery.Color = function( color, green, blue, alpha ) {
+-		return new jQuery.Color.fn.parse( color, green, blue, alpha );
+-	},
+-	spaces = {
+-		rgba: {
+-			props: {
+-				red: {
+-					idx: 0,
+-					type: "byte"
+-				},
+-				green: {
+-					idx: 1,
+-					type: "byte"
+-				},
+-				blue: {
+-					idx: 2,
+-					type: "byte"
+-				}
+-			}
+-		},
+-
+-		hsla: {
+-			props: {
+-				hue: {
+-					idx: 0,
+-					type: "degrees"
+-				},
+-				saturation: {
+-					idx: 1,
+-					type: "percent"
+-				},
+-				lightness: {
+-					idx: 2,
+-					type: "percent"
+-				}
+-			}
+-		}
+-	},
+-	propTypes = {
+-		"byte": {
+-			floor: true,
+-			max: 255
+-		},
+-		"percent": {
+-			max: 1
+-		},
+-		"degrees": {
+-			mod: 360,
+-			floor: true
+-		}
+-	},
+-	support = color.support = {},
+-
+-	// element for support tests
+-	supportElem = jQuery( "<p>" )[ 0 ],
+-
+-	// colors = jQuery.Color.names
+-	colors,
+-
+-	// local aliases of functions called often
+-	each = jQuery.each;
+-
+-// determine rgba support immediately
+-supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+-support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+-
+-// define cache name and alpha properties
+-// for rgba and hsla spaces
+-each( spaces, function( spaceName, space ) {
+-	space.cache = "_" + spaceName;
+-	space.props.alpha = {
+-		idx: 3,
+-		type: "percent",
+-		def: 1
+-	};
+-});
+-
+-function clamp( value, prop, allowEmpty ) {
+-	var type = propTypes[ prop.type ] || {};
+-
+-	if ( value == null ) {
+-		return (allowEmpty || !prop.def) ? null : prop.def;
+-	}
+-
+-	// ~~ is an short way of doing floor for positive numbers
+-	value = type.floor ? ~~value : parseFloat( value );
+-
+-	// IE will pass in empty strings as value for alpha,
+-	// which will hit this case
+-	if ( isNaN( value ) ) {
+-		return prop.def;
+-	}
+-
+-	if ( type.mod ) {
+-		// we add mod before modding to make sure that negatives values
+-		// get converted properly: -10 -> 350
+-		return (value + type.mod) % type.mod;
+-	}
+-
+-	// for now all property types without mod have min and max
+-	return 0 > value ? 0 : type.max < value ? type.max : value;
+-}
+-
+-function stringParse( string ) {
+-	var inst = color(),
+-		rgba = inst._rgba = [];
+-
+-	string = string.toLowerCase();
+-
+-	each( stringParsers, function( i, parser ) {
+-		var parsed,
+-			match = parser.re.exec( string ),
+-			values = match && parser.parse( match ),
+-			spaceName = parser.space || "rgba";
+-
+-		if ( values ) {
+-			parsed = inst[ spaceName ]( values );
+-
+-			// if this was an rgba parse the assignment might happen twice
+-			// oh well....
+-			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+-			rgba = inst._rgba = parsed._rgba;
+-
+-			// exit each( stringParsers ) here because we matched
+-			return false;
+-		}
+-	});
+-
+-	// Found a stringParser that handled it
+-	if ( rgba.length ) {
+-
+-		// if this came from a parsed string, force "transparent" when alpha is 0
+-		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+-		if ( rgba.join() === "0,0,0,0" ) {
+-			jQuery.extend( rgba, colors.transparent );
+-		}
+-		return inst;
+-	}
+-
+-	// named colors
+-	return colors[ string ];
+-}
+-
+-color.fn = jQuery.extend( color.prototype, {
+-	parse: function( red, green, blue, alpha ) {
+-		if ( red === undefined ) {
+-			this._rgba = [ null, null, null, null ];
+-			return this;
+-		}
+-		if ( red.jquery || red.nodeType ) {
+-			red = jQuery( red ).css( green );
+-			green = undefined;
+-		}
+-
+-		var inst = this,
+-			type = jQuery.type( red ),
+-			rgba = this._rgba = [];
+-
+-		// more than 1 argument specified - assume ( red, green, blue, alpha )
+-		if ( green !== undefined ) {
+-			red = [ red, green, blue, alpha ];
+-			type = "array";
+-		}
+-
+-		if ( type === "string" ) {
+-			return this.parse( stringParse( red ) || colors._default );
+-		}
+-
+-		if ( type === "array" ) {
+-			each( spaces.rgba.props, function( key, prop ) {
+-				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+-			});
+-			return this;
+-		}
+-
+-		if ( type === "object" ) {
+-			if ( red instanceof color ) {
+-				each( spaces, function( spaceName, space ) {
+-					if ( red[ space.cache ] ) {
+-						inst[ space.cache ] = red[ space.cache ].slice();
+-					}
+-				});
+-			} else {
+-				each( spaces, function( spaceName, space ) {
+-					var cache = space.cache;
+-					each( space.props, function( key, prop ) {
+-
+-						// if the cache doesn't exist, and we know how to convert
+-						if ( !inst[ cache ] && space.to ) {
+-
+-							// if the value was null, we don't need to copy it
+-							// if the key was alpha, we don't need to copy it either
+-							if ( key === "alpha" || red[ key ] == null ) {
+-								return;
+-							}
+-							inst[ cache ] = space.to( inst._rgba );
+-						}
+-
+-						// this is the only case where we allow nulls for ALL properties.
+-						// call clamp with alwaysAllowEmpty
+-						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+-					});
+-
+-					// everything defined but alpha?
+-					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+-						// use the default of 1
+-						inst[ cache ][ 3 ] = 1;
+-						if ( space.from ) {
+-							inst._rgba = space.from( inst[ cache ] );
+-						}
+-					}
+-				});
+-			}
+-			return this;
+-		}
+-	},
+-	is: function( compare ) {
+-		var is = color( compare ),
+-			same = true,
+-			inst = this;
+-
+-		each( spaces, function( _, space ) {
+-			var localCache,
+-				isCache = is[ space.cache ];
+-			if (isCache) {
+-				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+-				each( space.props, function( _, prop ) {
+-					if ( isCache[ prop.idx ] != null ) {
+-						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+-						return same;
+-					}
+-				});
+-			}
+-			return same;
+-		});
+-		return same;
+-	},
+-	_space: function() {
+-		var used = [],
+-			inst = this;
+-		each( spaces, function( spaceName, space ) {
+-			if ( inst[ space.cache ] ) {
+-				used.push( spaceName );
+-			}
+-		});
+-		return used.pop();
+-	},
+-	transition: function( other, distance ) {
+-		var end = color( other ),
+-			spaceName = end._space(),
+-			space = spaces[ spaceName ],
+-			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+-			start = startColor[ space.cache ] || space.to( startColor._rgba ),
+-			result = start.slice();
+-
+-		end = end[ space.cache ];
+-		each( space.props, function( key, prop ) {
+-			var index = prop.idx,
+-				startValue = start[ index ],
+-				endValue = end[ index ],
+-				type = propTypes[ prop.type ] || {};
+-
+-			// if null, don't override start value
+-			if ( endValue === null ) {
+-				return;
+-			}
+-			// if null - use end
+-			if ( startValue === null ) {
+-				result[ index ] = endValue;
+-			} else {
+-				if ( type.mod ) {
+-					if ( endValue - startValue > type.mod / 2 ) {
+-						startValue += type.mod;
+-					} else if ( startValue - endValue > type.mod / 2 ) {
+-						startValue -= type.mod;
+-					}
+-				}
+-				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+-			}
+-		});
+-		return this[ spaceName ]( result );
+-	},
+-	blend: function( opaque ) {
+-		// if we are already opaque - return ourself
+-		if ( this._rgba[ 3 ] === 1 ) {
+-			return this;
+-		}
+-
+-		var rgb = this._rgba.slice(),
+-			a = rgb.pop(),
+-			blend = color( opaque )._rgba;
+-
+-		return color( jQuery.map( rgb, function( v, i ) {
+-			return ( 1 - a ) * blend[ i ] + a * v;
+-		}));
+-	},
+-	toRgbaString: function() {
+-		var prefix = "rgba(",
+-			rgba = jQuery.map( this._rgba, function( v, i ) {
+-				return v == null ? ( i > 2 ? 1 : 0 ) : v;
+-			});
+-
+-		if ( rgba[ 3 ] === 1 ) {
+-			rgba.pop();
+-			prefix = "rgb(";
+-		}
+-
+-		return prefix + rgba.join() + ")";
+-	},
+-	toHslaString: function() {
+-		var prefix = "hsla(",
+-			hsla = jQuery.map( this.hsla(), function( v, i ) {
+-				if ( v == null ) {
+-					v = i > 2 ? 1 : 0;
+-				}
+-
+-				// catch 1 and 2
+-				if ( i && i < 3 ) {
+-					v = Math.round( v * 100 ) + "%";
+-				}
+-				return v;
+-			});
+-
+-		if ( hsla[ 3 ] === 1 ) {
+-			hsla.pop();
+-			prefix = "hsl(";
+-		}
+-		return prefix + hsla.join() + ")";
+-	},
+-	toHexString: function( includeAlpha ) {
+-		var rgba = this._rgba.slice(),
+-			alpha = rgba.pop();
+-
+-		if ( includeAlpha ) {
+-			rgba.push( ~~( alpha * 255 ) );
+-		}
+-
+-		return "#" + jQuery.map( rgba, function( v ) {
+-
+-			// default to 0 when nulls exist
+-			v = ( v || 0 ).toString( 16 );
+-			return v.length === 1 ? "0" + v : v;
+-		}).join("");
+-	},
+-	toString: function() {
+-		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+-	}
+-});
+-color.fn.parse.prototype = color.fn;
+-
+-// hsla conversions adapted from:
+-// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+-
+-function hue2rgb( p, q, h ) {
+-	h = ( h + 1 ) % 1;
+-	if ( h * 6 < 1 ) {
+-		return p + (q - p) * h * 6;
+-	}
+-	if ( h * 2 < 1) {
+-		return q;
+-	}
+-	if ( h * 3 < 2 ) {
+-		return p + (q - p) * ((2/3) - h) * 6;
+-	}
+-	return p;
+-}
+-
+-spaces.hsla.to = function ( rgba ) {
+-	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+-		return [ null, null, null, rgba[ 3 ] ];
+-	}
+-	var r = rgba[ 0 ] / 255,
+-		g = rgba[ 1 ] / 255,
+-		b = rgba[ 2 ] / 255,
+-		a = rgba[ 3 ],
+-		max = Math.max( r, g, b ),
+-		min = Math.min( r, g, b ),
+-		diff = max - min,
+-		add = max + min,
+-		l = add * 0.5,
+-		h, s;
+-
+-	if ( min === max ) {
+-		h = 0;
+-	} else if ( r === max ) {
+-		h = ( 60 * ( g - b ) / diff ) + 360;
+-	} else if ( g === max ) {
+-		h = ( 60 * ( b - r ) / diff ) + 120;
+-	} else {
+-		h = ( 60 * ( r - g ) / diff ) + 240;
+-	}
+-
+-	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+-	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+-	if ( diff === 0 ) {
+-		s = 0;
+-	} else if ( l <= 0.5 ) {
+-		s = diff / add;
+-	} else {
+-		s = diff / ( 2 - add );
+-	}
+-	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+-};
+-
+-spaces.hsla.from = function ( hsla ) {
+-	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+-		return [ null, null, null, hsla[ 3 ] ];
+-	}
+-	var h = hsla[ 0 ] / 360,
+-		s = hsla[ 1 ],
+-		l = hsla[ 2 ],
+-		a = hsla[ 3 ],
+-		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+-		p = 2 * l - q;
+-
+-	return [
+-		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+-		Math.round( hue2rgb( p, q, h ) * 255 ),
+-		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+-		a
+-	];
+-};
+-
+-
+-each( spaces, function( spaceName, space ) {
+-	var props = space.props,
+-		cache = space.cache,
+-		to = space.to,
+-		from = space.from;
+-
+-	// makes rgba() and hsla()
+-	color.fn[ spaceName ] = function( value ) {
+-
+-		// generate a cache for this space if it doesn't exist
+-		if ( to && !this[ cache ] ) {
+-			this[ cache ] = to( this._rgba );
+-		}
+-		if ( value === undefined ) {
+-			return this[ cache ].slice();
+-		}
+-
+-		var ret,
+-			type = jQuery.type( value ),
+-			arr = ( type === "array" || type === "object" ) ? value : arguments,
+-			local = this[ cache ].slice();
+-
+-		each( props, function( key, prop ) {
+-			var val = arr[ type === "object" ? key : prop.idx ];
+-			if ( val == null ) {
+-				val = local[ prop.idx ];
+-			}
+-			local[ prop.idx ] = clamp( val, prop );
+-		});
+-
+-		if ( from ) {
+-			ret = color( from( local ) );
+-			ret[ cache ] = local;
+-			return ret;
+-		} else {
+-			return color( local );
+-		}
+-	};
+-
+-	// makes red() green() blue() alpha() hue() saturation() lightness()
+-	each( props, function( key, prop ) {
+-		// alpha is included in more than one space
+-		if ( color.fn[ key ] ) {
+-			return;
+-		}
+-		color.fn[ key ] = function( value ) {
+-			var vtype = jQuery.type( value ),
+-				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+-				local = this[ fn ](),
+-				cur = local[ prop.idx ],
+-				match;
+-
+-			if ( vtype === "undefined" ) {
+-				return cur;
+-			}
+-
+-			if ( vtype === "function" ) {
+-				value = value.call( this, cur );
+-				vtype = jQuery.type( value );
+-			}
+-			if ( value == null && prop.empty ) {
+-				return this;
+-			}
+-			if ( vtype === "string" ) {
+-				match = rplusequals.exec( value );
+-				if ( match ) {
+-					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+-				}
+-			}
+-			local[ prop.idx ] = value;
+-			return this[ fn ]( local );
+-		};
+-	});
+-});
+-
+-// add cssHook and .fx.step function for each named hook.
+-// accept a space separated string of properties
+-color.hook = function( hook ) {
+-	var hooks = hook.split( " " );
+-	each( hooks, function( i, hook ) {
+-		jQuery.cssHooks[ hook ] = {
+-			set: function( elem, value ) {
+-				var parsed, curElem,
+-					backgroundColor = "";
+-
+-				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+-					value = color( parsed || value );
+-					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+-						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+-						while (
+-							(backgroundColor === "" || backgroundColor === "transparent") &&
+-							curElem && curElem.style
+-						) {
+-							try {
+-								backgroundColor = jQuery.css( curElem, "backgroundColor" );
+-								curElem = curElem.parentNode;
+-							} catch ( e ) {
+-							}
+-						}
+-
+-						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+-							backgroundColor :
+-							"_default" );
+-					}
+-
+-					value = value.toRgbaString();
+-				}
+-				try {
+-					elem.style[ hook ] = value;
+-				} catch( e ) {
+-					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+-				}
+-			}
+-		};
+-		jQuery.fx.step[ hook ] = function( fx ) {
+-			if ( !fx.colorInit ) {
+-				fx.start = color( fx.elem, hook );
+-				fx.end = color( fx.end );
+-				fx.colorInit = true;
+-			}
+-			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+-		};
+-	});
+-
+-};
+-
+-color.hook( stepHooks );
+-
+-jQuery.cssHooks.borderColor = {
+-	expand: function( value ) {
+-		var expanded = {};
+-
+-		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+-			expanded[ "border" + part + "Color" ] = value;
+-		});
+-		return expanded;
+-	}
+-};
+-
+-// Basic color names only.
+-// Usage of any of the other color names requires adding yourself or including
+-// jquery.color.svg-names.js.
+-colors = jQuery.Color.names = {
+-	// 4.1. Basic color keywords
+-	aqua: "#00ffff",
+-	black: "#000000",
+-	blue: "#0000ff",
+-	fuchsia: "#ff00ff",
+-	gray: "#808080",
+-	green: "#008000",
+-	lime: "#00ff00",
+-	maroon: "#800000",
+-	navy: "#000080",
+-	olive: "#808000",
+-	purple: "#800080",
+-	red: "#ff0000",
+-	silver: "#c0c0c0",
+-	teal: "#008080",
+-	white: "#ffffff",
+-	yellow: "#ffff00",
+-
+-	// 4.2.3. "transparent" color keyword
+-	transparent: [ null, null, null, 0 ],
+-
+-	_default: "#ffffff"
+-};
+-
+-})( jQuery );
+-
+-
+-/******************************************************************************/
+-/****************************** CLASS ANIMATIONS ******************************/
+-/******************************************************************************/
+-(function() {
+-
+-var classAnimationActions = [ "add", "remove", "toggle" ],
+-	shorthandStyles = {
+-		border: 1,
+-		borderBottom: 1,
+-		borderColor: 1,
+-		borderLeft: 1,
+-		borderRight: 1,
+-		borderTop: 1,
+-		borderWidth: 1,
+-		margin: 1,
+-		padding: 1
+-	};
+-
+-$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+-	$.fx.step[ prop ] = function( fx ) {
+-		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+-			jQuery.style( fx.elem, prop, fx.end );
+-			fx.setAttr = true;
+-		}
+-	};
+-});
+-
+-function getElementStyles( elem ) {
+-	var key, len,
+-		style = elem.ownerDocument.defaultView ?
+-			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+-			elem.currentStyle,
+-		styles = {};
+-
+-	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+-		len = style.length;
+-		while ( len-- ) {
+-			key = style[ len ];
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ $.camelCase( key ) ] = style[ key ];
+-			}
+-		}
+-	// support: Opera, IE <9
+-	} else {
+-		for ( key in style ) {
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ key ] = style[ key ];
+-			}
+-		}
+-	}
+-
+-	return styles;
+-}
+-
+-
+-function styleDifference( oldStyle, newStyle ) {
+-	var diff = {},
+-		name, value;
+-
+-	for ( name in newStyle ) {
+-		value = newStyle[ name ];
+-		if ( oldStyle[ name ] !== value ) {
+-			if ( !shorthandStyles[ name ] ) {
+-				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+-					diff[ name ] = value;
+-				}
+-			}
+-		}
+-	}
+-
+-	return diff;
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-$.effects.animateClass = function( value, duration, easing, callback ) {
+-	var o = $.speed( duration, easing, callback );
+-
+-	return this.queue( function() {
+-		var animated = $( this ),
+-			baseClass = animated.attr( "class" ) || "",
+-			applyClassChange,
+-			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+-
+-		// map the animated objects to store the original styles.
+-		allAnimations = allAnimations.map(function() {
+-			var el = $( this );
+-			return {
+-				el: el,
+-				start: getElementStyles( this )
+-			};
+-		});
+-
+-		// apply class change
+-		applyClassChange = function() {
+-			$.each( classAnimationActions, function(i, action) {
+-				if ( value[ action ] ) {
+-					animated[ action + "Class" ]( value[ action ] );
+-				}
+-			});
+-		};
+-		applyClassChange();
+-
+-		// map all animated objects again - calculate new styles and diff
+-		allAnimations = allAnimations.map(function() {
+-			this.end = getElementStyles( this.el[ 0 ] );
+-			this.diff = styleDifference( this.start, this.end );
+-			return this;
+-		});
+-
+-		// apply original class
+-		animated.attr( "class", baseClass );
+-
+-		// map all animated objects again - this time collecting a promise
+-		allAnimations = allAnimations.map(function() {
+-			var styleInfo = this,
+-				dfd = $.Deferred(),
+-				opts = $.extend({}, o, {
+-					queue: false,
+-					complete: function() {
+-						dfd.resolve( styleInfo );
+-					}
+-				});
+-
+-			this.el.animate( this.diff, opts );
+-			return dfd.promise();
+-		});
+-
+-		// once all animations have completed:
+-		$.when.apply( $, allAnimations.get() ).done(function() {
+-
+-			// set the final class
+-			applyClassChange();
+-
+-			// for each animated element,
+-			// clear all css properties that were animated
+-			$.each( arguments, function() {
+-				var el = this.el;
+-				$.each( this.diff, function(key) {
+-					el.css( key, "" );
+-				});
+-			});
+-
+-			// this is guarnteed to be there if you use jQuery.speed()
+-			// it also handles dequeuing the next anim...
+-			o.complete.call( animated[ 0 ] );
+-		});
+-	});
+-};
+-
+-$.fn.extend({
+-	addClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return speed ?
+-				$.effects.animateClass.call( this,
+-					{ add: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.addClass ),
+-
+-	removeClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return arguments.length > 1 ?
+-				$.effects.animateClass.call( this,
+-					{ remove: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.removeClass ),
+-
+-	toggleClass: (function( orig ) {
+-		return function( classNames, force, speed, easing, callback ) {
+-			if ( typeof force === "boolean" || force === undefined ) {
+-				if ( !speed ) {
+-					// without speed parameter
+-					return orig.apply( this, arguments );
+-				} else {
+-					return $.effects.animateClass.call( this,
+-						(force ? { add: classNames } : { remove: classNames }),
+-						speed, easing, callback );
+-				}
+-			} else {
+-				// without force parameter
+-				return $.effects.animateClass.call( this,
+-					{ toggle: classNames }, force, speed, easing );
+-			}
+-		};
+-	})( $.fn.toggleClass ),
+-
+-	switchClass: function( remove, add, speed, easing, callback) {
+-		return $.effects.animateClass.call( this, {
+-			add: add,
+-			remove: remove
+-		}, speed, easing, callback );
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EFFECTS **********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-$.extend( $.effects, {
+-	version: "1.10.3",
+-
+-	// Saves a set of properties in a data storage
+-	save: function( element, set ) {
+-		for( var i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+-			}
+-		}
+-	},
+-
+-	// Restores a set of previously saved properties from a data storage
+-	restore: function( element, set ) {
+-		var val, i;
+-		for( i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				val = element.data( dataSpace + set[ i ] );
+-				// support: jQuery 1.6.2
+-				// http://bugs.jquery.com/ticket/9917
+-				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+-				// We can't differentiate between "" and 0 here, so we just assume
+-				// empty string since it's likely to be a more common value...
+-				if ( val === undefined ) {
+-					val = "";
+-				}
+-				element.css( set[ i ], val );
+-			}
+-		}
+-	},
+-
+-	setMode: function( el, mode ) {
+-		if (mode === "toggle") {
+-			mode = el.is( ":hidden" ) ? "show" : "hide";
+-		}
+-		return mode;
+-	},
+-
+-	// Translates a [top,left] array into a baseline value
+-	// this should be a little more flexible in the future to handle a string & hash
+-	getBaseline: function( origin, original ) {
+-		var y, x;
+-		switch ( origin[ 0 ] ) {
+-			case "top": y = 0; break;
+-			case "middle": y = 0.5; break;
+-			case "bottom": y = 1; break;
+-			default: y = origin[ 0 ] / original.height;
+-		}
+-		switch ( origin[ 1 ] ) {
+-			case "left": x = 0; break;
+-			case "center": x = 0.5; break;
+-			case "right": x = 1; break;
+-			default: x = origin[ 1 ] / original.width;
+-		}
+-		return {
+-			x: x,
+-			y: y
+-		};
+-	},
+-
+-	// Wraps the element around a wrapper that copies position properties
+-	createWrapper: function( element ) {
+-
+-		// if the element is already wrapped, return it
+-		if ( element.parent().is( ".ui-effects-wrapper" )) {
+-			return element.parent();
+-		}
+-
+-		// wrap the element
+-		var props = {
+-				width: element.outerWidth(true),
+-				height: element.outerHeight(true),
+-				"float": element.css( "float" )
+-			},
+-			wrapper = $( "<div></div>" )
+-				.addClass( "ui-effects-wrapper" )
+-				.css({
+-					fontSize: "100%",
+-					background: "transparent",
+-					border: "none",
+-					margin: 0,
+-					padding: 0
+-				}),
+-			// Store the size in case width/height are defined in % - Fixes #5245
+-			size = {
+-				width: element.width(),
+-				height: element.height()
+-			},
+-			active = document.activeElement;
+-
+-		// support: Firefox
+-		// Firefox incorrectly exposes anonymous content
+-		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+-		try {
+-			active.id;
+-		} catch( e ) {
+-			active = document.body;
+-		}
+-
+-		element.wrap( wrapper );
+-
+-		// Fixes #7595 - Elements lose focus when wrapped.
+-		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-			$( active ).focus();
+-		}
+-
+-		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+-
+-		// transfer positioning properties to the wrapper
+-		if ( element.css( "position" ) === "static" ) {
+-			wrapper.css({ position: "relative" });
+-			element.css({ position: "relative" });
+-		} else {
+-			$.extend( props, {
+-				position: element.css( "position" ),
+-				zIndex: element.css( "z-index" )
+-			});
+-			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+-				props[ pos ] = element.css( pos );
+-				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+-					props[ pos ] = "auto";
+-				}
+-			});
+-			element.css({
+-				position: "relative",
+-				top: 0,
+-				left: 0,
+-				right: "auto",
+-				bottom: "auto"
+-			});
+-		}
+-		element.css(size);
+-
+-		return wrapper.css( props ).show();
+-	},
+-
+-	removeWrapper: function( element ) {
+-		var active = document.activeElement;
+-
+-		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+-			element.parent().replaceWith( element );
+-
+-			// Fixes #7595 - Elements lose focus when wrapped.
+-			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-				$( active ).focus();
+-			}
+-		}
+-
+-
+-		return element;
+-	},
+-
+-	setTransition: function( element, list, factor, value ) {
+-		value = value || {};
+-		$.each( list, function( i, x ) {
+-			var unit = element.cssUnit( x );
+-			if ( unit[ 0 ] > 0 ) {
+-				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+-			}
+-		});
+-		return value;
+-	}
+-});
+-
+-// return an effect options object for the given parameters:
+-function _normalizeArguments( effect, options, speed, callback ) {
+-
+-	// allow passing all options as the first parameter
+-	if ( $.isPlainObject( effect ) ) {
+-		options = effect;
+-		effect = effect.effect;
+-	}
+-
+-	// convert to an object
+-	effect = { effect: effect };
+-
+-	// catch (effect, null, ...)
+-	if ( options == null ) {
+-		options = {};
+-	}
+-
+-	// catch (effect, callback)
+-	if ( $.isFunction( options ) ) {
+-		callback = options;
+-		speed = null;
+-		options = {};
+-	}
+-
+-	// catch (effect, speed, ?)
+-	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+-		callback = speed;
+-		speed = options;
+-		options = {};
+-	}
+-
+-	// catch (effect, options, callback)
+-	if ( $.isFunction( speed ) ) {
+-		callback = speed;
+-		speed = null;
+-	}
+-
+-	// add options to effect
+-	if ( options ) {
+-		$.extend( effect, options );
+-	}
+-
+-	speed = speed || options.duration;
+-	effect.duration = $.fx.off ? 0 :
+-		typeof speed === "number" ? speed :
+-		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+-		$.fx.speeds._default;
+-
+-	effect.complete = callback || options.complete;
+-
+-	return effect;
+-}
+-
+-function standardAnimationOption( option ) {
+-	// Valid standard speeds (nothing, number, named speed)
+-	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+-		return true;
+-	}
+-
+-	// Invalid strings - treat as "normal" speed
+-	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+-		return true;
+-	}
+-
+-	// Complete callback
+-	if ( $.isFunction( option ) ) {
+-		return true;
+-	}
+-
+-	// Options hash (but not naming an effect)
+-	if ( typeof option === "object" && !option.effect ) {
+-		return true;
+-	}
+-
+-	// Didn't match any standard API
+-	return false;
+-}
+-
+-$.fn.extend({
+-	effect: function( /* effect, options, speed, callback */ ) {
+-		var args = _normalizeArguments.apply( this, arguments ),
+-			mode = args.mode,
+-			queue = args.queue,
+-			effectMethod = $.effects.effect[ args.effect ];
+-
+-		if ( $.fx.off || !effectMethod ) {
+-			// delegate to the original method (e.g., .show()) if possible
+-			if ( mode ) {
+-				return this[ mode ]( args.duration, args.complete );
+-			} else {
+-				return this.each( function() {
+-					if ( args.complete ) {
+-						args.complete.call( this );
+-					}
+-				});
+-			}
+-		}
+-
+-		function run( next ) {
+-			var elem = $( this ),
+-				complete = args.complete,
+-				mode = args.mode;
+-
+-			function done() {
+-				if ( $.isFunction( complete ) ) {
+-					complete.call( elem[0] );
+-				}
+-				if ( $.isFunction( next ) ) {
+-					next();
+-				}
+-			}
+-
+-			// If the element already has the correct final state, delegate to
+-			// the core methods so the internal tracking of "olddisplay" works.
+-			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+-				elem[ mode ]();
+-				done();
+-			} else {
+-				effectMethod.call( elem[0], args, done );
+-			}
+-		}
+-
+-		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+-	},
+-
+-	show: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "show";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.show ),
+-
+-	hide: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "hide";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.hide ),
+-
+-	toggle: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "toggle";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.toggle ),
+-
+-	// helper functions
+-	cssUnit: function(key) {
+-		var style = this.css( key ),
+-			val = [];
+-
+-		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+-			if ( style.indexOf( unit ) > 0 ) {
+-				val = [ parseFloat( style ), unit ];
+-			}
+-		});
+-		return val;
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EASING ***********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+-
+-var baseEasings = {};
+-
+-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+-	baseEasings[ name ] = function( p ) {
+-		return Math.pow( p, i + 2 );
+-	};
+-});
+-
+-$.extend( baseEasings, {
+-	Sine: function ( p ) {
+-		return 1 - Math.cos( p * Math.PI / 2 );
+-	},
+-	Circ: function ( p ) {
+-		return 1 - Math.sqrt( 1 - p * p );
+-	},
+-	Elastic: function( p ) {
+-		return p === 0 || p === 1 ? p :
+-			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+-	},
+-	Back: function( p ) {
+-		return p * p * ( 3 * p - 2 );
+-	},
+-	Bounce: function ( p ) {
+-		var pow2,
+-			bounce = 4;
+-
+-		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+-		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+-	}
+-});
+-
+-$.each( baseEasings, function( name, easeIn ) {
+-	$.easing[ "easeIn" + name ] = easeIn;
+-	$.easing[ "easeOut" + name ] = function( p ) {
+-		return 1 - easeIn( 1 - p );
+-	};
+-	$.easing[ "easeInOut" + name ] = function( p ) {
+-		return p < 0.5 ?
+-			easeIn( p * 2 ) / 2 :
+-			1 - easeIn( p * -2 + 2 ) / 2;
+-	};
+-});
+-
+-})();
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var rvertical = /up|down|vertical/,
+-	rpositivemotion = /up|left|vertical|horizontal/;
+-
+-$.effects.effect.blind = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		direction = o.direction || "up",
+-		vertical = rvertical.test( direction ),
+-		ref = vertical ? "height" : "width",
+-		ref2 = vertical ? "top" : "left",
+-		motion = rpositivemotion.test( direction ),
+-		animation = {},
+-		show = mode === "show",
+-		wrapper, distance, margin;
+-
+-	// if already wrapped, the wrapper's properties are my property. #6245
+-	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+-		$.effects.save( el.parent(), props );
+-	} else {
+-		$.effects.save( el, props );
+-	}
+-	el.show();
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	distance = wrapper[ ref ]();
+-	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+-
+-	animation[ ref ] = show ? distance : 0;
+-	if ( !motion ) {
+-		el
+-			.css( vertical ? "bottom" : "right", 0 )
+-			.css( vertical ? "top" : "left", "auto" )
+-			.css({ position: "absolute" });
+-
+-		animation[ ref2 ] = show ? margin : distance + margin;
+-	}
+-
+-	// start at 0 if we are showing
+-	if ( show ) {
+-		wrapper.css( ref, 0 );
+-		if ( ! motion ) {
+-			wrapper.css( ref2, margin + distance );
+-		}
+-	}
+-
+-	// Animate
+-	wrapper.animate( animation, {
+-		duration: o.duration,
+-		easing: o.easing,
+-		queue: false,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.bounce = function( o, done ) {
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-
+-		// defaults:
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		hide = mode === "hide",
+-		show = mode === "show",
+-		direction = o.direction || "up",
+-		distance = o.distance,
+-		times = o.times || 5,
+-
+-		// number of internal animations
+-		anims = times * 2 + ( show || hide ? 1 : 0 ),
+-		speed = o.duration / anims,
+-		easing = o.easing,
+-
+-		// utility:
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ),
+-		i,
+-		upAnim,
+-		downAnim,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	// Avoid touching opacity to prevent clearType and PNG issues in IE
+-	if ( show || hide ) {
+-		props.push( "opacity" );
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el ); // Create Wrapper
+-
+-	// default distance for the BIGGEST bounce is the outer Distance / 3
+-	if ( !distance ) {
+-		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+-	}
+-
+-	if ( show ) {
+-		downAnim = { opacity: 1 };
+-		downAnim[ ref ] = 0;
+-
+-		// if we are showing, force opacity 0 and set the initial position
+-		// then do the "first" animation
+-		el.css( "opacity", 0 )
+-			.css( ref, motion ? -distance * 2 : distance * 2 )
+-			.animate( downAnim, speed, easing );
+-	}
+-
+-	// start at the smallest distance if we are hiding
+-	if ( hide ) {
+-		distance = distance / Math.pow( 2, times - 1 );
+-	}
+-
+-	downAnim = {};
+-	downAnim[ ref ] = 0;
+-	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+-	for ( i = 0; i < times; i++ ) {
+-		upAnim = {};
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing )
+-			.animate( downAnim, speed, easing );
+-
+-		distance = hide ? distance * 2 : distance / 2;
+-	}
+-
+-	// Last Bounce when Hiding
+-	if ( hide ) {
+-		upAnim = { opacity: 0 };
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing );
+-	}
+-
+-	el.queue(function() {
+-		if ( hide ) {
+-			el.hide();
+-		}
+-		$.effects.restore( el, props );
+-		$.effects.removeWrapper( el );
+-		done();
+-	});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.clip = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "vertical",
+-		vert = direction === "vertical",
+-		size = vert ? "height" : "width",
+-		position = vert ? "top" : "left",
+-		animation = {},
+-		wrapper, animate, distance;
+-
+-	// Save & Show
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+-	distance = animate[ size ]();
+-
+-	// Shift
+-	if ( show ) {
+-		animate.css( size, 0 );
+-		animate.css( position, distance / 2 );
+-	}
+-
+-	// Create Animation Object:
+-	animation[ size ] = show ? distance : 0;
+-	animation[ position ] = show ? 0 : distance / 2;
+-
+-	// Animate
+-	animate.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( !show ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.drop = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+-		animation = {
+-			opacity: show ? 1 : 0
+-		},
+-		distance;
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+-
+-	if ( show ) {
+-		el
+-			.css( "opacity", 0 )
+-			.css( ref, motion === "pos" ? -distance : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( motion === "pos" ? "+=" : "-=" ) :
+-		( motion === "pos" ? "-=" : "+=" ) ) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.explode = function( o, done ) {
+-
+-	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+-		cells = rows,
+-		el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-
+-		// show and then visibility:hidden the element before calculating offset
+-		offset = el.show().css( "visibility", "hidden" ).offset(),
+-
+-		// width and height of a piece
+-		width = Math.ceil( el.outerWidth() / cells ),
+-		height = Math.ceil( el.outerHeight() / rows ),
+-		pieces = [],
+-
+-		// loop
+-		i, j, left, top, mx, my;
+-
+-	// children animate complete:
+-	function childComplete() {
+-		pieces.push( this );
+-		if ( pieces.length === rows * cells ) {
+-			animComplete();
+-		}
+-	}
+-
+-	// clone the element for each row and cell.
+-	for( i = 0; i < rows ; i++ ) { // ===>
+-		top = offset.top + i * height;
+-		my = i - ( rows - 1 ) / 2 ;
+-
+-		for( j = 0; j < cells ; j++ ) { // |||
+-			left = offset.left + j * width;
+-			mx = j - ( cells - 1 ) / 2 ;
+-
+-			// Create a clone of the now hidden main element that will be absolute positioned
+-			// within a wrapper div off the -left and -top equal to size of our pieces
+-			el
+-				.clone()
+-				.appendTo( "body" )
+-				.wrap( "<div></div>" )
+-				.css({
+-					position: "absolute",
+-					visibility: "visible",
+-					left: -j * width,
+-					top: -i * height
+-				})
+-
+-			// select the wrapper - make it overflow: hidden and absolute positioned based on
+-			// where the original was located +left and +top equal to the size of pieces
+-				.parent()
+-				.addClass( "ui-effects-explode" )
+-				.css({
+-					position: "absolute",
+-					overflow: "hidden",
+-					width: width,
+-					height: height,
+-					left: left + ( show ? mx * width : 0 ),
+-					top: top + ( show ? my * height : 0 ),
+-					opacity: show ? 0 : 1
+-				}).animate({
+-					left: left + ( show ? 0 : mx * width ),
+-					top: top + ( show ? 0 : my * height ),
+-					opacity: show ? 1 : 0
+-				}, o.duration || 500, o.easing, childComplete );
+-		}
+-	}
+-
+-	function animComplete() {
+-		el.css({
+-			visibility: "visible"
+-		});
+-		$( pieces ).remove();
+-		if ( !show ) {
+-			el.hide();
+-		}
+-		done();
+-	}
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.fade = function( o, done ) {
+-	var el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "toggle" );
+-
+-	el.animate({
+-		opacity: mode
+-	}, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: done
+-	});
+-};
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-$.effects.effect.fold = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		size = o.size || 15,
+-		percent = /([0-9]+)%/.exec( size ),
+-		horizFirst = !!o.horizFirst,
+-		widthFirst = show !== horizFirst,
+-		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+-		duration = o.duration / 2,
+-		wrapper, distance,
+-		animation1 = {},
+-		animation2 = {};
+-
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	distance = widthFirst ?
+-		[ wrapper.width(), wrapper.height() ] :
+-		[ wrapper.height(), wrapper.width() ];
+-
+-	if ( percent ) {
+-		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+-	}
+-	if ( show ) {
+-		wrapper.css( horizFirst ? {
+-			height: 0,
+-			width: size
+-		} : {
+-			height: size,
+-			width: 0
+-		});
+-	}
+-
+-	// Animation
+-	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+-	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+-
+-	// Animate
+-	wrapper
+-		.animate( animation1, duration, o.easing )
+-		.animate( animation2, duration, o.easing, function() {
+-			if ( hide ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.highlight = function( o, done ) {
+-	var elem = $( this ),
+-		props = [ "backgroundImage", "backgroundColor", "opacity" ],
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		animation = {
+-			backgroundColor: elem.css( "backgroundColor" )
+-		};
+-
+-	if (mode === "hide") {
+-		animation.opacity = 0;
+-	}
+-
+-	$.effects.save( elem, props );
+-
+-	elem
+-		.show()
+-		.css({
+-			backgroundImage: "none",
+-			backgroundColor: o.color || "#ffff99"
+-		})
+-		.animate( animation, {
+-			queue: false,
+-			duration: o.duration,
+-			easing: o.easing,
+-			complete: function() {
+-				if ( mode === "hide" ) {
+-					elem.hide();
+-				}
+-				$.effects.restore( elem, props );
+-				done();
+-			}
+-		});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.pulsate = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		showhide = ( show || mode === "hide" ),
+-
+-		// showing or hiding leaves of the "last" animation
+-		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+-		duration = o.duration / anims,
+-		animateTo = 0,
+-		queue = elem.queue(),
+-		queuelen = queue.length,
+-		i;
+-
+-	if ( show || !elem.is(":visible")) {
+-		elem.css( "opacity", 0 ).show();
+-		animateTo = 1;
+-	}
+-
+-	// anims - 1 opacity "toggles"
+-	for ( i = 1; i < anims; i++ ) {
+-		elem.animate({
+-			opacity: animateTo
+-		}, duration, o.easing );
+-		animateTo = 1 - animateTo;
+-	}
+-
+-	elem.animate({
+-		opacity: animateTo
+-	}, duration, o.easing);
+-
+-	elem.queue(function() {
+-		if ( hide ) {
+-			elem.hide();
+-		}
+-		done();
+-	});
+-
+-	// We just queued up "anims" animations, we need to put them next in the queue
+-	if ( queuelen > 1 ) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	elem.dequeue();
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.puff = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "hide" ),
+-		hide = mode === "hide",
+-		percent = parseInt( o.percent, 10 ) || 150,
+-		factor = percent / 100,
+-		original = {
+-			height: elem.height(),
+-			width: elem.width(),
+-			outerHeight: elem.outerHeight(),
+-			outerWidth: elem.outerWidth()
+-		};
+-
+-	$.extend( o, {
+-		effect: "scale",
+-		queue: false,
+-		fade: true,
+-		mode: mode,
+-		complete: done,
+-		percent: hide ? percent : 100,
+-		from: hide ?
+-			original :
+-			{
+-				height: original.height * factor,
+-				width: original.width * factor,
+-				outerHeight: original.outerHeight * factor,
+-				outerWidth: original.outerWidth * factor
+-			}
+-	});
+-
+-	elem.effect( o );
+-};
+-
+-$.effects.effect.scale = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		options = $.extend( true, {}, o ),
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		percent = parseInt( o.percent, 10 ) ||
+-			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+-		direction = o.direction || "both",
+-		origin = o.origin,
+-		original = {
+-			height: el.height(),
+-			width: el.width(),
+-			outerHeight: el.outerHeight(),
+-			outerWidth: el.outerWidth()
+-		},
+-		factor = {
+-			y: direction !== "horizontal" ? (percent / 100) : 1,
+-			x: direction !== "vertical" ? (percent / 100) : 1
+-		};
+-
+-	// We are going to pass this effect to the size effect:
+-	options.effect = "size";
+-	options.queue = false;
+-	options.complete = done;
+-
+-	// Set default origin and restore for show/hide
+-	if ( mode !== "effect" ) {
+-		options.origin = origin || ["middle","center"];
+-		options.restore = true;
+-	}
+-
+-	options.from = o.from || ( mode === "show" ? {
+-		height: 0,
+-		width: 0,
+-		outerHeight: 0,
+-		outerWidth: 0
+-	} : original );
+-	options.to = {
+-		height: original.height * factor.y,
+-		width: original.width * factor.x,
+-		outerHeight: original.outerHeight * factor.y,
+-		outerWidth: original.outerWidth * factor.x
+-	};
+-
+-	// Fade option to support puff
+-	if ( options.fade ) {
+-		if ( mode === "show" ) {
+-			options.from.opacity = 0;
+-			options.to.opacity = 1;
+-		}
+-		if ( mode === "hide" ) {
+-			options.from.opacity = 1;
+-			options.to.opacity = 0;
+-		}
+-	}
+-
+-	// Animate
+-	el.effect( options );
+-
+-};
+-
+-$.effects.effect.size = function( o, done ) {
+-
+-	// Create element
+-	var original, baseline, factor,
+-		el = $( this ),
+-		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+-
+-		// Always restore
+-		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+-
+-		// Copy for children
+-		props2 = [ "width", "height", "overflow" ],
+-		cProps = [ "fontSize" ],
+-		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+-		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+-
+-		// Set options
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		restore = o.restore || mode !== "effect",
+-		scale = o.scale || "both",
+-		origin = o.origin || [ "middle", "center" ],
+-		position = el.css( "position" ),
+-		props = restore ? props0 : props1,
+-		zero = {
+-			height: 0,
+-			width: 0,
+-			outerHeight: 0,
+-			outerWidth: 0
+-		};
+-
+-	if ( mode === "show" ) {
+-		el.show();
+-	}
+-	original = {
+-		height: el.height(),
+-		width: el.width(),
+-		outerHeight: el.outerHeight(),
+-		outerWidth: el.outerWidth()
+-	};
+-
+-	if ( o.mode === "toggle" && mode === "show" ) {
+-		el.from = o.to || zero;
+-		el.to = o.from || original;
+-	} else {
+-		el.from = o.from || ( mode === "show" ? zero : original );
+-		el.to = o.to || ( mode === "hide" ? zero : original );
+-	}
+-
+-	// Set scaling factor
+-	factor = {
+-		from: {
+-			y: el.from.height / original.height,
+-			x: el.from.width / original.width
+-		},
+-		to: {
+-			y: el.to.height / original.height,
+-			x: el.to.width / original.width
+-		}
+-	};
+-
+-	// Scale the css box
+-	if ( scale === "box" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( vProps );
+-			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+-		}
+-
+-		// Horizontal props scaling
+-		if ( factor.from.x !== factor.to.x ) {
+-			props = props.concat( hProps );
+-			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+-			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+-		}
+-	}
+-
+-	// Scale the content
+-	if ( scale === "content" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( cProps ).concat( props2 );
+-			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+-		}
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-	el.css( "overflow", "hidden" ).css( el.from );
+-
+-	// Adjust
+-	if (origin) { // Calculate baseline shifts
+-		baseline = $.effects.getBaseline( origin, original );
+-		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+-		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+-		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+-		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+-	}
+-	el.css( el.from ); // set top & left
+-
+-	// Animate
+-	if ( scale === "content" || scale === "both" ) { // Scale the children
+-
+-		// Add margins/font-size
+-		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+-		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+-		props2 = props0.concat(vProps).concat(hProps);
+-
+-		el.find( "*[width]" ).each( function(){
+-			var child = $( this ),
+-				c_original = {
+-					height: child.height(),
+-					width: child.width(),
+-					outerHeight: child.outerHeight(),
+-					outerWidth: child.outerWidth()
+-				};
+-			if (restore) {
+-				$.effects.save(child, props2);
+-			}
+-
+-			child.from = {
+-				height: c_original.height * factor.from.y,
+-				width: c_original.width * factor.from.x,
+-				outerHeight: c_original.outerHeight * factor.from.y,
+-				outerWidth: c_original.outerWidth * factor.from.x
+-			};
+-			child.to = {
+-				height: c_original.height * factor.to.y,
+-				width: c_original.width * factor.to.x,
+-				outerHeight: c_original.height * factor.to.y,
+-				outerWidth: c_original.width * factor.to.x
+-			};
+-
+-			// Vertical props scaling
+-			if ( factor.from.y !== factor.to.y ) {
+-				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+-				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+-			}
+-
+-			// Horizontal props scaling
+-			if ( factor.from.x !== factor.to.x ) {
+-				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+-				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+-			}
+-
+-			// Animate children
+-			child.css( child.from );
+-			child.animate( child.to, o.duration, o.easing, function() {
+-
+-				// Restore children
+-				if ( restore ) {
+-					$.effects.restore( child, props2 );
+-				}
+-			});
+-		});
+-	}
+-
+-	// Animate
+-	el.animate( el.to, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( el.to.opacity === 0 ) {
+-				el.css( "opacity", el.from.opacity );
+-			}
+-			if( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			if ( !restore ) {
+-
+-				// we need to calculate our new positioning based on the scaling
+-				if ( position === "static" ) {
+-					el.css({
+-						position: "relative",
+-						top: el.to.top,
+-						left: el.to.left
+-					});
+-				} else {
+-					$.each([ "top", "left" ], function( idx, pos ) {
+-						el.css( pos, function( _, str ) {
+-							var val = parseInt( str, 10 ),
+-								toRef = idx ? el.to.left : el.to.top;
+-
+-							// if original was "auto", recalculate the new value from wrapper
+-							if ( str === "auto" ) {
+-								return toRef + "px";
+-							}
+-
+-							return val + toRef + "px";
+-						});
+-					});
+-				}
+-			}
+-
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.shake = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		direction = o.direction || "left",
+-		distance = o.distance || 20,
+-		times = o.times || 3,
+-		anims = times * 2 + 1,
+-		speed = Math.round(o.duration/anims),
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		animation = {},
+-		animation1 = {},
+-		animation2 = {},
+-		i,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	// Animation
+-	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+-	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+-	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+-
+-	// Animate
+-	el.animate( animation, speed, o.easing );
+-
+-	// Shakes
+-	for ( i = 1; i < times; i++ ) {
+-		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+-	}
+-	el
+-		.animate( animation1, speed, o.easing )
+-		.animate( animation, speed / 2, o.easing )
+-		.queue(function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.slide = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+-		mode = $.effects.setMode( el, o.mode || "show" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		distance,
+-		animation = {};
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+-
+-	$.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	if ( show ) {
+-		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( positiveMotion ? "+=" : "-=") :
+-		( positiveMotion ? "-=" : "+=")) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.transfer = function( o, done ) {
+-	var elem = $( this ),
+-		target = $( o.to ),
+-		targetFixed = target.css( "position" ) === "fixed",
+-		body = $("body"),
+-		fixTop = targetFixed ? body.scrollTop() : 0,
+-		fixLeft = targetFixed ? body.scrollLeft() : 0,
+-		endPosition = target.offset(),
+-		animation = {
+-			top: endPosition.top - fixTop ,
+-			left: endPosition.left - fixLeft ,
+-			height: target.innerHeight(),
+-			width: target.innerWidth()
+-		},
+-		startPosition = elem.offset(),
+-		transfer = $( "<div class='ui-effects-transfer'></div>" )
+-			.appendTo( document.body )
+-			.addClass( o.className )
+-			.css({
+-				top: startPosition.top - fixTop ,
+-				left: startPosition.left - fixLeft ,
+-				height: elem.innerHeight(),
+-				width: elem.innerWidth(),
+-				position: targetFixed ? "fixed" : "absolute"
+-			})
+-			.animate( animation, o.duration, o.easing, function() {
+-				transfer.remove();
+-				done();
+-			});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.droppable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.droppable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.droppable.js	(revision 15488)
+@@ -1,372 +0,0 @@
+-/*!
+- * jQuery UI Droppable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/droppable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.draggable.js
+- */
+-(function( $, undefined ) {
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-$.widget("ui.droppable", {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drop",
+-	options: {
+-		accept: "*",
+-		activeClass: false,
+-		addClasses: true,
+-		greedy: false,
+-		hoverClass: false,
+-		scope: "default",
+-		tolerance: "intersect",
+-
+-		// callbacks
+-		activate: null,
+-		deactivate: null,
+-		drop: null,
+-		out: null,
+-		over: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options,
+-			accept = o.accept;
+-
+-		this.isover = false;
+-		this.isout = true;
+-
+-		this.accept = $.isFunction(accept) ? accept : function(d) {
+-			return d.is(accept);
+-		};
+-
+-		//Store the droppable's proportions
+-		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+-
+-		// Add the reference and positions to the manager
+-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+-		$.ui.ddmanager.droppables[o.scope].push(this);
+-
+-		(o.addClasses && this.element.addClass("ui-droppable"));
+-
+-	},
+-
+-	_destroy: function() {
+-		var i = 0,
+-			drop = $.ui.ddmanager.droppables[this.options.scope];
+-
+-		for ( ; i < drop.length; i++ ) {
+-			if ( drop[i] === this ) {
+-				drop.splice(i, 1);
+-			}
+-		}
+-
+-		this.element.removeClass("ui-droppable ui-droppable-disabled");
+-	},
+-
+-	_setOption: function(key, value) {
+-
+-		if(key === "accept") {
+-			this.accept = $.isFunction(value) ? value : function(d) {
+-				return d.is(value);
+-			};
+-		}
+-		$.Widget.prototype._setOption.apply(this, arguments);
+-	},
+-
+-	_activate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.addClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("activate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_deactivate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.removeClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("deactivate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_over: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.addClass(this.options.hoverClass);
+-			}
+-			this._trigger("over", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_out: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("out", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_drop: function(event,custom) {
+-
+-		var draggable = custom || $.ui.ddmanager.current,
+-			childrenIntersection = false;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return false;
+-		}
+-
+-		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
+-			var inst = $.data(this, "ui-droppable");
+-			if(
+-				inst.options.greedy &&
+-				!inst.options.disabled &&
+-				inst.options.scope === draggable.options.scope &&
+-				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
+-				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+-			) { childrenIntersection = true; return false; }
+-		});
+-		if(childrenIntersection) {
+-			return false;
+-		}
+-
+-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.activeClass) {
+-				this.element.removeClass(this.options.activeClass);
+-			}
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("drop", event, this.ui(draggable));
+-			return this.element;
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	ui: function(c) {
+-		return {
+-			draggable: (c.currentItem || c.element),
+-			helper: c.helper,
+-			position: c.position,
+-			offset: c.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.intersect = function(draggable, droppable, toleranceMode) {
+-
+-	if (!droppable.offset) {
+-		return false;
+-	}
+-
+-	var draggableLeft, draggableTop,
+-		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+-		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
+-		l = droppable.offset.left, r = l + droppable.proportions.width,
+-		t = droppable.offset.top, b = t + droppable.proportions.height;
+-
+-	switch (toleranceMode) {
+-		case "fit":
+-			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+-		case "intersect":
+-			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
+-				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
+-				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+-		case "pointer":
+-			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
+-			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
+-			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
+-		case "touch":
+-			return (
+-				(y1 >= t && y1 <= b) ||	// Top edge touching
+-				(y2 >= t && y2 <= b) ||	// Bottom edge touching
+-				(y1 < t && y2 > b)		// Surrounded vertically
+-			) && (
+-				(x1 >= l && x1 <= r) ||	// Left edge touching
+-				(x2 >= l && x2 <= r) ||	// Right edge touching
+-				(x1 < l && x2 > r)		// Surrounded horizontally
+-			);
+-		default:
+-			return false;
+-		}
+-
+-};
+-
+-/*
+-	This manager tracks offsets of draggables and droppables
+-*/
+-$.ui.ddmanager = {
+-	current: null,
+-	droppables: { "default": [] },
+-	prepareOffsets: function(t, event) {
+-
+-		var i, j,
+-			m = $.ui.ddmanager.droppables[t.options.scope] || [],
+-			type = event ? event.type : null, // workaround for #2317
+-			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+-
+-		droppablesLoop: for (i = 0; i < m.length; i++) {
+-
+-			//No disabled and non-accepted
+-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+-				continue;
+-			}
+-
+-			// Filter out elements in the current dragged item
+-			for (j=0; j < list.length; j++) {
+-				if(list[j] === m[i].element[0]) {
+-					m[i].proportions.height = 0;
+-					continue droppablesLoop;
+-				}
+-			}
+-
+-			m[i].visible = m[i].element.css("display") !== "none";
+-			if(!m[i].visible) {
+-				continue;
+-			}
+-
+-			//Activate the droppable if used directly from draggables
+-			if(type === "mousedown") {
+-				m[i]._activate.call(m[i], event);
+-			}
+-
+-			m[i].offset = m[i].element.offset();
+-			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+-
+-		}
+-
+-	},
+-	drop: function(draggable, event) {
+-
+-		var dropped = false;
+-		// Create a copy of the droppables in case the list changes during the drop (#9116)
+-		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
+-
+-			if(!this.options) {
+-				return;
+-			}
+-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
+-				dropped = this._drop.call(this, event) || dropped;
+-			}
+-
+-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-				this.isout = true;
+-				this.isover = false;
+-				this._deactivate.call(this, event);
+-			}
+-
+-		});
+-		return dropped;
+-
+-	},
+-	dragStart: function( draggable, event ) {
+-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+-			if( !draggable.options.refreshPositions ) {
+-				$.ui.ddmanager.prepareOffsets( draggable, event );
+-			}
+-		});
+-	},
+-	drag: function(draggable, event) {
+-
+-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+-		if(draggable.options.refreshPositions) {
+-			$.ui.ddmanager.prepareOffsets(draggable, event);
+-		}
+-
+-		//Run through all droppables and check their positions based on specific tolerance options
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(this.options.disabled || this.greedyChild || !this.visible) {
+-				return;
+-			}
+-
+-			var parentInstance, scope, parent,
+-				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
+-				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+-			if(!c) {
+-				return;
+-			}
+-
+-			if (this.options.greedy) {
+-				// find droppable parents with same scope
+-				scope = this.options.scope;
+-				parent = this.element.parents(":data(ui-droppable)").filter(function () {
+-					return $.data(this, "ui-droppable").options.scope === scope;
+-				});
+-
+-				if (parent.length) {
+-					parentInstance = $.data(parent[0], "ui-droppable");
+-					parentInstance.greedyChild = (c === "isover");
+-				}
+-			}
+-
+-			// we just moved into a greedy child
+-			if (parentInstance && c === "isover") {
+-				parentInstance.isover = false;
+-				parentInstance.isout = true;
+-				parentInstance._out.call(parentInstance, event);
+-			}
+-
+-			this[c] = true;
+-			this[c === "isout" ? "isover" : "isout"] = false;
+-			this[c === "isover" ? "_over" : "_out"].call(this, event);
+-
+-			// we just moved out of a greedy child
+-			if (parentInstance && c === "isout") {
+-				parentInstance.isout = false;
+-				parentInstance.isover = true;
+-				parentInstance._over.call(parentInstance, event);
+-			}
+-		});
+-
+-	},
+-	dragStop: function( draggable, event ) {
+-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+-		if( !draggable.options.refreshPositions ) {
+-			$.ui.ddmanager.prepareOffsets( draggable, event );
+-		}
+-	}
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.draggable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.draggable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.draggable.js	(revision 15488)
+@@ -1,958 +0,0 @@
+-/*!
+- * jQuery UI Draggable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/draggable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.draggable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drag",
+-	options: {
+-		addClasses: true,
+-		appendTo: "parent",
+-		axis: false,
+-		connectToSortable: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		iframeFix: false,
+-		opacity: false,
+-		refreshPositions: false,
+-		revert: false,
+-		revertDuration: 500,
+-		scope: "default",
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		snap: false,
+-		snapMode: "both",
+-		snapTolerance: 20,
+-		stack: false,
+-		zIndex: false,
+-
+-		// callbacks
+-		drag: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
+-			this.element[0].style.position = "relative";
+-		}
+-		if (this.options.addClasses){
+-			this.element.addClass("ui-draggable");
+-		}
+-		if (this.options.disabled){
+-			this.element.addClass("ui-draggable-disabled");
+-		}
+-
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function(event) {
+-
+-		var o = this.options;
+-
+-		// among others, prevent a drag on a resizable-handle
+-		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+-			return false;
+-		}
+-
+-		//Quit if we're not on a valid handle
+-		this.handle = this._getHandle(event);
+-		if (!this.handle) {
+-			return false;
+-		}
+-
+-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+-			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
+-			.css({
+-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+-				position: "absolute", opacity: "0.001", zIndex: 1000
+-			})
+-			.css($(this).offset())
+-			.appendTo("body");
+-		});
+-
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options;
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		this.helper.addClass("ui-draggable-dragging");
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		//If ddmanager is used for droppables, set the global draggable
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Store the helper's css position
+-		this.cssPosition = this.helper.css( "position" );
+-		this.scrollParent = this.helper.scrollParent();
+-		this.offsetParent = this.helper.offsetParent();
+-		this.offsetParentCssPosition = this.offsetParent.css( "position" );
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.positionAbs = this.element.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		//Reset scroll cache
+-		this.offset.scroll = false;
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this.position = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Set a containment if given in the options
+-		this._setContainment();
+-
+-		//Trigger event + callbacks
+-		if(this._trigger("start", event) === false) {
+-			this._clear();
+-			return false;
+-		}
+-
+-		//Recache the helper size
+-		this._cacheHelperProportions();
+-
+-		//Prepare the droppable offsets
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-
+-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+-		if ( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStart(this, event);
+-		}
+-
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event, noPropagation) {
+-		// reset any necessary cached properties (see #5009)
+-		if ( this.offsetParentCssPosition === "fixed" ) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Call plugins and callbacks and use the resulting position if something is returned
+-		if (!noPropagation) {
+-			var ui = this._uiHash();
+-			if(this._trigger("drag", event, ui) === false) {
+-				this._mouseUp({});
+-				return false;
+-			}
+-			this.position = ui.position;
+-		}
+-
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		//If we are using droppables, inform the manager about the drop
+-		var that = this,
+-			dropped = false;
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			dropped = $.ui.ddmanager.drop(this, event);
+-		}
+-
+-		//if a drop comes from outside (a sortable)
+-		if(this.dropped) {
+-			dropped = this.dropped;
+-			this.dropped = false;
+-		}
+-
+-		//if the original element is no longer in the DOM don't bother to continue (see #8269)
+-		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
+-			return false;
+-		}
+-
+-		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+-				if(that._trigger("stop", event) !== false) {
+-					that._clear();
+-				}
+-			});
+-		} else {
+-			if(this._trigger("stop", event) !== false) {
+-				this._clear();
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseUp: function(event) {
+-		//Remove frame helpers
+-		$("div.ui-draggable-iframeFix").each(function() {
+-			this.parentNode.removeChild(this);
+-		});
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+-		if( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStop(this, event);
+-		}
+-
+-		return $.ui.mouse.prototype._mouseUp.call(this, event);
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.helper.is(".ui-draggable-dragging")) {
+-			this._mouseUp({});
+-		} else {
+-			this._clear();
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	_getHandle: function(event) {
+-		return this.options.handle ?
+-			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+-			true;
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+-
+-		if(!helper.parents("body").length) {
+-			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+-		}
+-
+-		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+-			helper.css("position", "absolute");
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-		//Get the offsetParent and cache its position
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		//This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		//Ugly IE fix
+-		if((this.offsetParent[0] === document.body) ||
+-			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.element.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.element.css("marginTop"),10) || 0),
+-			right: (parseInt(this.element.css("marginRight"),10) || 0),
+-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var over, c, ce,
+-			o = this.options;
+-
+-		if ( !o.containment ) {
+-			this.containment = null;
+-			return;
+-		}
+-
+-		if ( o.containment === "window" ) {
+-			this.containment = [
+-				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+-				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+-				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+-				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment === "document") {
+-			this.containment = [
+-				0,
+-				0,
+-				$( document ).width() - this.helperProportions.width - this.margins.left,
+-				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment.constructor === Array ) {
+-			this.containment = o.containment;
+-			return;
+-		}
+-
+-		if ( o.containment === "parent" ) {
+-			o.containment = this.helper[ 0 ].parentNode;
+-		}
+-
+-		c = $( o.containment );
+-		ce = c[ 0 ];
+-
+-		if( !ce ) {
+-			return;
+-		}
+-
+-		over = c.css( "overflow" ) !== "hidden";
+-
+-		this.containment = [
+-			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+-			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
+-			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
+-			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+-		];
+-		this.relative_container = c;
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var containment, co, top, left,
+-			o = this.options,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+-			pageX = event.pageX,
+-			pageY = event.pageY;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		// If we are not dragging yet, we won't check for options
+-		if ( this.originalPosition ) {
+-			if ( this.containment ) {
+-				if ( this.relative_container ){
+-					co = this.relative_container.offset();
+-					containment = [
+-						this.containment[ 0 ] + co.left,
+-						this.containment[ 1 ] + co.top,
+-						this.containment[ 2 ] + co.left,
+-						this.containment[ 3 ] + co.top
+-					];
+-				}
+-				else {
+-					containment = this.containment;
+-				}
+-
+-				if(event.pageX - this.offset.click.left < containment[0]) {
+-					pageX = containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < containment[1]) {
+-					pageY = containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > containment[2]) {
+-					pageX = containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > containment[3]) {
+-					pageY = containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+-				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+-				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+-				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																	// The absolute mouse position
+-				this.offset.click.top	-												// Click offset (relative to the element)
+-				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
+-			),
+-			left: (
+-				pageX -																	// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
+-			)
+-		};
+-
+-	},
+-
+-	_clear: function() {
+-		this.helper.removeClass("ui-draggable-dragging");
+-		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-		this.cancelHelperRemoval = false;
+-	},
+-
+-	// From now on bulk stuff - mainly helpers
+-
+-	_trigger: function(type, event, ui) {
+-		ui = ui || this._uiHash();
+-		$.ui.plugin.call(this, type, [event, ui]);
+-		//The absolute position has to be recalculated after plugins
+-		if(type === "drag") {
+-			this.positionAbs = this._convertPositionTo("absolute");
+-		}
+-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+-	},
+-
+-	plugins: {},
+-
+-	_uiHash: function() {
+-		return {
+-			helper: this.helper,
+-			position: this.position,
+-			originalPosition: this.originalPosition,
+-			offset: this.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.plugin.add("draggable", "connectToSortable", {
+-	start: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), o = inst.options,
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-		inst.sortables = [];
+-		$(o.connectToSortable).each(function() {
+-			var sortable = $.data(this, "ui-sortable");
+-			if (sortable && !sortable.options.disabled) {
+-				inst.sortables.push({
+-					instance: sortable,
+-					shouldRevert: sortable.options.revert
+-				});
+-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+-				sortable._trigger("activate", event, uiSortable);
+-			}
+-		});
+-
+-	},
+-	stop: function(event, ui) {
+-
+-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+-		var inst = $(this).data("ui-draggable"),
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-
+-		$.each(inst.sortables, function() {
+-			if(this.instance.isOver) {
+-
+-				this.instance.isOver = 0;
+-
+-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+-
+-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
+-				if(this.shouldRevert) {
+-					this.instance.options.revert = this.shouldRevert;
+-				}
+-
+-				//Trigger the stop of the sortable
+-				this.instance._mouseStop(event);
+-
+-				this.instance.options.helper = this.instance.options._helper;
+-
+-				//If the helper has been the original item, restore properties in the sortable
+-				if(inst.options.helper === "original") {
+-					this.instance.currentItem.css({ top: "auto", left: "auto" });
+-				}
+-
+-			} else {
+-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+-				this.instance._trigger("deactivate", event, uiSortable);
+-			}
+-
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), that = this;
+-
+-		$.each(inst.sortables, function() {
+-
+-			var innermostIntersecting = false,
+-				thisSortable = this;
+-
+-			//Copy over some variables to allow calling the sortable's native _intersectsWith
+-			this.instance.positionAbs = inst.positionAbs;
+-			this.instance.helperProportions = inst.helperProportions;
+-			this.instance.offset.click = inst.offset.click;
+-
+-			if(this.instance._intersectsWith(this.instance.containerCache)) {
+-				innermostIntersecting = true;
+-				$.each(inst.sortables, function () {
+-					this.instance.positionAbs = inst.positionAbs;
+-					this.instance.helperProportions = inst.helperProportions;
+-					this.instance.offset.click = inst.offset.click;
+-					if (this !== thisSortable &&
+-						this.instance._intersectsWith(this.instance.containerCache) &&
+-						$.contains(thisSortable.instance.element[0], this.instance.element[0])
+-					) {
+-						innermostIntersecting = false;
+-					}
+-					return innermostIntersecting;
+-				});
+-			}
+-
+-
+-			if(innermostIntersecting) {
+-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+-				if(!this.instance.isOver) {
+-
+-					this.instance.isOver = 1;
+-					//Now we fake the start of dragging for the sortable instance,
+-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+-					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
+-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+-					this.instance.options.helper = function() { return ui.helper[0]; };
+-
+-					event.target = this.instance.currentItem[0];
+-					this.instance._mouseCapture(event, true);
+-					this.instance._mouseStart(event, true, true);
+-
+-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+-					this.instance.offset.click.top = inst.offset.click.top;
+-					this.instance.offset.click.left = inst.offset.click.left;
+-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+-
+-					inst._trigger("toSortable", event);
+-					inst.dropped = this.instance.element; //draggable revert needs that
+-					//hack so receive/update callbacks work (mostly)
+-					inst.currentItem = inst.element;
+-					this.instance.fromOutside = inst;
+-
+-				}
+-
+-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+-				if(this.instance.currentItem) {
+-					this.instance._mouseDrag(event);
+-				}
+-
+-			} else {
+-
+-				//If it doesn't intersect with the sortable, and it intersected before,
+-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+-				if(this.instance.isOver) {
+-
+-					this.instance.isOver = 0;
+-					this.instance.cancelHelperRemoval = true;
+-
+-					//Prevent reverting on this forced stop
+-					this.instance.options.revert = false;
+-
+-					// The out event needs to be triggered independently
+-					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+-
+-					this.instance._mouseStop(event, true);
+-					this.instance.options.helper = this.instance.options._helper;
+-
+-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+-					this.instance.currentItem.remove();
+-					if(this.instance.placeholder) {
+-						this.instance.placeholder.remove();
+-					}
+-
+-					inst._trigger("fromSortable", event);
+-					inst.dropped = false; //draggable revert needs that
+-				}
+-
+-			}
+-
+-		});
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "cursor", {
+-	start: function() {
+-		var t = $("body"), o = $(this).data("ui-draggable").options;
+-		if (t.css("cursor")) {
+-			o._cursor = t.css("cursor");
+-		}
+-		t.css("cursor", o.cursor);
+-	},
+-	stop: function() {
+-		var o = $(this).data("ui-draggable").options;
+-		if (o._cursor) {
+-			$("body").css("cursor", o._cursor);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "opacity", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("opacity")) {
+-			o._opacity = t.css("opacity");
+-		}
+-		t.css("opacity", o.opacity);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._opacity) {
+-			$(ui.helper).css("opacity", o._opacity);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "scroll", {
+-	start: function() {
+-		var i = $(this).data("ui-draggable");
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-			i.overflowOffset = i.scrollParent.offset();
+-		}
+-	},
+-	drag: function( event ) {
+-
+-		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+-
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-			}
+-
+-		} else {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-			}
+-
+-		}
+-
+-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(i, event);
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "snap", {
+-	start: function() {
+-
+-		var i = $(this).data("ui-draggable"),
+-			o = i.options;
+-
+-		i.snapElements = [];
+-
+-		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+-			var $t = $(this),
+-				$o = $t.offset();
+-			if(this !== i.element[0]) {
+-				i.snapElements.push({
+-					item: this,
+-					width: $t.outerWidth(), height: $t.outerHeight(),
+-					top: $o.top, left: $o.left
+-				});
+-			}
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var ts, bs, ls, rs, l, r, t, b, i, first,
+-			inst = $(this).data("ui-draggable"),
+-			o = inst.options,
+-			d = o.snapTolerance,
+-			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+-
+-		for (i = inst.snapElements.length - 1; i >= 0; i--){
+-
+-			l = inst.snapElements[i].left;
+-			r = l + inst.snapElements[i].width;
+-			t = inst.snapElements[i].top;
+-			b = t + inst.snapElements[i].height;
+-
+-			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+-				if(inst.snapElements[i].snapping) {
+-					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-				}
+-				inst.snapElements[i].snapping = false;
+-				continue;
+-			}
+-
+-			if(o.snapMode !== "inner") {
+-				ts = Math.abs(t - y2) <= d;
+-				bs = Math.abs(b - y1) <= d;
+-				ls = Math.abs(l - x2) <= d;
+-				rs = Math.abs(r - x1) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+-				}
+-			}
+-
+-			first = (ts || bs || ls || rs);
+-
+-			if(o.snapMode !== "outer") {
+-				ts = Math.abs(t - y1) <= d;
+-				bs = Math.abs(b - y2) <= d;
+-				ls = Math.abs(l - x1) <= d;
+-				rs = Math.abs(r - x2) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-			}
+-
+-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-			}
+-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+-
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "stack", {
+-	start: function() {
+-		var min,
+-			o = this.data("ui-draggable").options,
+-			group = $.makeArray($(o.stack)).sort(function(a,b) {
+-				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+-			});
+-
+-		if (!group.length) { return; }
+-
+-		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+-		$(group).each(function(i) {
+-			$(this).css("zIndex", min + i);
+-		});
+-		this.css("zIndex", (min + group.length));
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "zIndex", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("zIndex")) {
+-			o._zIndex = t.css("zIndex");
+-		}
+-		t.css("zIndex", o.zIndex);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._zIndex) {
+-			$(ui.helper).css("zIndex", o._zIndex);
+-		}
+-	}
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery-ui.custom.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery-ui.custom.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery-ui.custom.js	(revision 15488)
+@@ -1,14971 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	runiqueId = /^ui-id-\d+$/;
+-
+-// $.ui might exist from components with no dependencies, e.g., $.ui.position
+-$.ui = $.ui || {};
+-
+-$.extend( $.ui, {
+-	version: "1.10.3",
+-
+-	keyCode: {
+-		BACKSPACE: 8,
+-		COMMA: 188,
+-		DELETE: 46,
+-		DOWN: 40,
+-		END: 35,
+-		ENTER: 13,
+-		ESCAPE: 27,
+-		HOME: 36,
+-		LEFT: 37,
+-		NUMPAD_ADD: 107,
+-		NUMPAD_DECIMAL: 110,
+-		NUMPAD_DIVIDE: 111,
+-		NUMPAD_ENTER: 108,
+-		NUMPAD_MULTIPLY: 106,
+-		NUMPAD_SUBTRACT: 109,
+-		PAGE_DOWN: 34,
+-		PAGE_UP: 33,
+-		PERIOD: 190,
+-		RIGHT: 39,
+-		SPACE: 32,
+-		TAB: 9,
+-		UP: 38
+-	}
+-});
+-
+-// plugins
+-$.fn.extend({
+-	focus: (function( orig ) {
+-		return function( delay, fn ) {
+-			return typeof delay === "number" ?
+-				this.each(function() {
+-					var elem = this;
+-					setTimeout(function() {
+-						$( elem ).focus();
+-						if ( fn ) {
+-							fn.call( elem );
+-						}
+-					}, delay );
+-				}) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.focus ),
+-
+-	scrollParent: function() {
+-		var scrollParent;
+-		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		} else {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		}
+-
+-		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+-	},
+-
+-	zIndex: function( zIndex ) {
+-		if ( zIndex !== undefined ) {
+-			return this.css( "zIndex", zIndex );
+-		}
+-
+-		if ( this.length ) {
+-			var elem = $( this[ 0 ] ), position, value;
+-			while ( elem.length && elem[ 0 ] !== document ) {
+-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+-				// This makes behavior of this function consistent across browsers
+-				// WebKit always returns auto if the element is positioned
+-				position = elem.css( "position" );
+-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+-					// IE returns 0 when zIndex is not specified
+-					// other browsers return a string
+-					// we ignore the case of nested elements with an explicit value of 0
+-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+-					value = parseInt( elem.css( "zIndex" ), 10 );
+-					if ( !isNaN( value ) && value !== 0 ) {
+-						return value;
+-					}
+-				}
+-				elem = elem.parent();
+-			}
+-		}
+-
+-		return 0;
+-	},
+-
+-	uniqueId: function() {
+-		return this.each(function() {
+-			if ( !this.id ) {
+-				this.id = "ui-id-" + (++uuid);
+-			}
+-		});
+-	},
+-
+-	removeUniqueId: function() {
+-		return this.each(function() {
+-			if ( runiqueId.test( this.id ) ) {
+-				$( this ).removeAttr( "id" );
+-			}
+-		});
+-	}
+-});
+-
+-// selectors
+-function focusable( element, isTabIndexNotNaN ) {
+-	var map, mapName, img,
+-		nodeName = element.nodeName.toLowerCase();
+-	if ( "area" === nodeName ) {
+-		map = element.parentNode;
+-		mapName = map.name;
+-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+-			return false;
+-		}
+-		img = $( "img[usemap=#" + mapName + "]" )[0];
+-		return !!img && visible( img );
+-	}
+-	return ( /input|select|textarea|button|object/.test( nodeName ) ?
+-		!element.disabled :
+-		"a" === nodeName ?
+-			element.href || isTabIndexNotNaN :
+-			isTabIndexNotNaN) &&
+-		// the element and all of its ancestors must be visible
+-		visible( element );
+-}
+-
+-function visible( element ) {
+-	return $.expr.filters.visible( element ) &&
+-		!$( element ).parents().addBack().filter(function() {
+-			return $.css( this, "visibility" ) === "hidden";
+-		}).length;
+-}
+-
+-$.extend( $.expr[ ":" ], {
+-	data: $.expr.createPseudo ?
+-		$.expr.createPseudo(function( dataName ) {
+-			return function( elem ) {
+-				return !!$.data( elem, dataName );
+-			};
+-		}) :
+-		// support: jQuery <1.8
+-		function( elem, i, match ) {
+-			return !!$.data( elem, match[ 3 ] );
+-		},
+-
+-	focusable: function( element ) {
+-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+-	},
+-
+-	tabbable: function( element ) {
+-		var tabIndex = $.attr( element, "tabindex" ),
+-			isTabIndexNaN = isNaN( tabIndex );
+-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+-	}
+-});
+-
+-// support: jQuery <1.8
+-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+-	$.each( [ "Width", "Height" ], function( i, name ) {
+-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+-			type = name.toLowerCase(),
+-			orig = {
+-				innerWidth: $.fn.innerWidth,
+-				innerHeight: $.fn.innerHeight,
+-				outerWidth: $.fn.outerWidth,
+-				outerHeight: $.fn.outerHeight
+-			};
+-
+-		function reduce( elem, size, border, margin ) {
+-			$.each( side, function() {
+-				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+-				if ( border ) {
+-					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+-				}
+-				if ( margin ) {
+-					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+-				}
+-			});
+-			return size;
+-		}
+-
+-		$.fn[ "inner" + name ] = function( size ) {
+-			if ( size === undefined ) {
+-				return orig[ "inner" + name ].call( this );
+-			}
+-
+-			return this.each(function() {
+-				$( this ).css( type, reduce( this, size ) + "px" );
+-			});
+-		};
+-
+-		$.fn[ "outer" + name] = function( size, margin ) {
+-			if ( typeof size !== "number" ) {
+-				return orig[ "outer" + name ].call( this, size );
+-			}
+-
+-			return this.each(function() {
+-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+-			});
+-		};
+-	});
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+-	$.fn.removeData = (function( removeData ) {
+-		return function( key ) {
+-			if ( arguments.length ) {
+-				return removeData.call( this, $.camelCase( key ) );
+-			} else {
+-				return removeData.call( this );
+-			}
+-		};
+-	})( $.fn.removeData );
+-}
+-
+-
+-
+-
+-
+-// deprecated
+-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+-
+-$.support.selectstart = "onselectstart" in document.createElement( "div" );
+-$.fn.extend({
+-	disableSelection: function() {
+-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+-			".ui-disableSelection", function( event ) {
+-				event.preventDefault();
+-			});
+-	},
+-
+-	enableSelection: function() {
+-		return this.unbind( ".ui-disableSelection" );
+-	}
+-});
+-
+-$.extend( $.ui, {
+-	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+-	plugin: {
+-		add: function( module, option, set ) {
+-			var i,
+-				proto = $.ui[ module ].prototype;
+-			for ( i in set ) {
+-				proto.plugins[ i ] = proto.plugins[ i ] || [];
+-				proto.plugins[ i ].push( [ option, set[ i ] ] );
+-			}
+-		},
+-		call: function( instance, name, args ) {
+-			var i,
+-				set = instance.plugins[ name ];
+-			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
+-				return;
+-			}
+-
+-			for ( i = 0; i < set.length; i++ ) {
+-				if ( instance.options[ set[ i ][ 0 ] ] ) {
+-					set[ i ][ 1 ].apply( instance.element, args );
+-				}
+-			}
+-		}
+-	},
+-
+-	// only used by resizable
+-	hasScroll: function( el, a ) {
+-
+-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+-		if ( $( el ).css( "overflow" ) === "hidden") {
+-			return false;
+-		}
+-
+-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+-			has = false;
+-
+-		if ( el[ scroll ] > 0 ) {
+-			return true;
+-		}
+-
+-		// TODO: determine which cases actually cause this to happen
+-		// if the element doesn't have the scroll set, see if it's possible to
+-		// set the scroll
+-		el[ scroll ] = 1;
+-		has = ( el[ scroll ] > 0 );
+-		el[ scroll ] = 0;
+-		return has;
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	slice = Array.prototype.slice,
+-	_cleanData = $.cleanData;
+-$.cleanData = function( elems ) {
+-	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-		try {
+-			$( elem ).triggerHandler( "remove" );
+-		// http://bugs.jquery.com/ticket/8235
+-		} catch( e ) {}
+-	}
+-	_cleanData( elems );
+-};
+-
+-$.widget = function( name, base, prototype ) {
+-	var fullName, existingConstructor, constructor, basePrototype,
+-		// proxiedPrototype allows the provided prototype to remain unmodified
+-		// so that it can be used as a mixin for multiple widgets (#8876)
+-		proxiedPrototype = {},
+-		namespace = name.split( "." )[ 0 ];
+-
+-	name = name.split( "." )[ 1 ];
+-	fullName = namespace + "-" + name;
+-
+-	if ( !prototype ) {
+-		prototype = base;
+-		base = $.Widget;
+-	}
+-
+-	// create selector for plugin
+-	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+-		return !!$.data( elem, fullName );
+-	};
+-
+-	$[ namespace ] = $[ namespace ] || {};
+-	existingConstructor = $[ namespace ][ name ];
+-	constructor = $[ namespace ][ name ] = function( options, element ) {
+-		// allow instantiation without "new" keyword
+-		if ( !this._createWidget ) {
+-			return new constructor( options, element );
+-		}
+-
+-		// allow instantiation without initializing for simple inheritance
+-		// must use "new" keyword (the code above always passes args)
+-		if ( arguments.length ) {
+-			this._createWidget( options, element );
+-		}
+-	};
+-	// extend with the existing constructor to carry over any static properties
+-	$.extend( constructor, existingConstructor, {
+-		version: prototype.version,
+-		// copy the object used to create the prototype in case we need to
+-		// redefine the widget later
+-		_proto: $.extend( {}, prototype ),
+-		// track widgets that inherit from this widget in case this widget is
+-		// redefined after a widget inherits from it
+-		_childConstructors: []
+-	});
+-
+-	basePrototype = new base();
+-	// we need to make the options hash a property directly on the new instance
+-	// otherwise we'll modify the options hash on the prototype that we're
+-	// inheriting from
+-	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+-	$.each( prototype, function( prop, value ) {
+-		if ( !$.isFunction( value ) ) {
+-			proxiedPrototype[ prop ] = value;
+-			return;
+-		}
+-		proxiedPrototype[ prop ] = (function() {
+-			var _super = function() {
+-					return base.prototype[ prop ].apply( this, arguments );
+-				},
+-				_superApply = function( args ) {
+-					return base.prototype[ prop ].apply( this, args );
+-				};
+-			return function() {
+-				var __super = this._super,
+-					__superApply = this._superApply,
+-					returnValue;
+-
+-				this._super = _super;
+-				this._superApply = _superApply;
+-
+-				returnValue = value.apply( this, arguments );
+-
+-				this._super = __super;
+-				this._superApply = __superApply;
+-
+-				return returnValue;
+-			};
+-		})();
+-	});
+-	constructor.prototype = $.widget.extend( basePrototype, {
+-		// TODO: remove support for widgetEventPrefix
+-		// always use the name + a colon as the prefix, e.g., draggable:start
+-		// don't prefix for widgets that aren't DOM-based
+-		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+-	}, proxiedPrototype, {
+-		constructor: constructor,
+-		namespace: namespace,
+-		widgetName: name,
+-		widgetFullName: fullName
+-	});
+-
+-	// If this widget is being redefined then we need to find all widgets that
+-	// are inheriting from it and redefine all of them so that they inherit from
+-	// the new version of this widget. We're essentially trying to replace one
+-	// level in the prototype chain.
+-	if ( existingConstructor ) {
+-		$.each( existingConstructor._childConstructors, function( i, child ) {
+-			var childPrototype = child.prototype;
+-
+-			// redefine the child widget using the same prototype that was
+-			// originally used, but inherit from the new version of the base
+-			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+-		});
+-		// remove the list of existing child constructors from the old constructor
+-		// so the old child constructors can be garbage collected
+-		delete existingConstructor._childConstructors;
+-	} else {
+-		base._childConstructors.push( constructor );
+-	}
+-
+-	$.widget.bridge( name, constructor );
+-};
+-
+-$.widget.extend = function( target ) {
+-	var input = slice.call( arguments, 1 ),
+-		inputIndex = 0,
+-		inputLength = input.length,
+-		key,
+-		value;
+-	for ( ; inputIndex < inputLength; inputIndex++ ) {
+-		for ( key in input[ inputIndex ] ) {
+-			value = input[ inputIndex ][ key ];
+-			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+-				// Clone objects
+-				if ( $.isPlainObject( value ) ) {
+-					target[ key ] = $.isPlainObject( target[ key ] ) ?
+-						$.widget.extend( {}, target[ key ], value ) :
+-						// Don't extend strings, arrays, etc. with objects
+-						$.widget.extend( {}, value );
+-				// Copy everything else by reference
+-				} else {
+-					target[ key ] = value;
+-				}
+-			}
+-		}
+-	}
+-	return target;
+-};
+-
+-$.widget.bridge = function( name, object ) {
+-	var fullName = object.prototype.widgetFullName || name;
+-	$.fn[ name ] = function( options ) {
+-		var isMethodCall = typeof options === "string",
+-			args = slice.call( arguments, 1 ),
+-			returnValue = this;
+-
+-		// allow multiple hashes to be passed on init
+-		options = !isMethodCall && args.length ?
+-			$.widget.extend.apply( null, [ options ].concat(args) ) :
+-			options;
+-
+-		if ( isMethodCall ) {
+-			this.each(function() {
+-				var methodValue,
+-					instance = $.data( this, fullName );
+-				if ( !instance ) {
+-					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+-						"attempted to call method '" + options + "'" );
+-				}
+-				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+-					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+-				}
+-				methodValue = instance[ options ].apply( instance, args );
+-				if ( methodValue !== instance && methodValue !== undefined ) {
+-					returnValue = methodValue && methodValue.jquery ?
+-						returnValue.pushStack( methodValue.get() ) :
+-						methodValue;
+-					return false;
+-				}
+-			});
+-		} else {
+-			this.each(function() {
+-				var instance = $.data( this, fullName );
+-				if ( instance ) {
+-					instance.option( options || {} )._init();
+-				} else {
+-					$.data( this, fullName, new object( options, this ) );
+-				}
+-			});
+-		}
+-
+-		return returnValue;
+-	};
+-};
+-
+-$.Widget = function( /* options, element */ ) {};
+-$.Widget._childConstructors = [];
+-
+-$.Widget.prototype = {
+-	widgetName: "widget",
+-	widgetEventPrefix: "",
+-	defaultElement: "<div>",
+-	options: {
+-		disabled: false,
+-
+-		// callbacks
+-		create: null
+-	},
+-	_createWidget: function( options, element ) {
+-		element = $( element || this.defaultElement || this )[ 0 ];
+-		this.element = $( element );
+-		this.uuid = uuid++;
+-		this.eventNamespace = "." + this.widgetName + this.uuid;
+-		this.options = $.widget.extend( {},
+-			this.options,
+-			this._getCreateOptions(),
+-			options );
+-
+-		this.bindings = $();
+-		this.hoverable = $();
+-		this.focusable = $();
+-
+-		if ( element !== this ) {
+-			$.data( element, this.widgetFullName, this );
+-			this._on( true, this.element, {
+-				remove: function( event ) {
+-					if ( event.target === element ) {
+-						this.destroy();
+-					}
+-				}
+-			});
+-			this.document = $( element.style ?
+-				// element within the document
+-				element.ownerDocument :
+-				// element is window or document
+-				element.document || element );
+-			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+-		}
+-
+-		this._create();
+-		this._trigger( "create", null, this._getCreateEventData() );
+-		this._init();
+-	},
+-	_getCreateOptions: $.noop,
+-	_getCreateEventData: $.noop,
+-	_create: $.noop,
+-	_init: $.noop,
+-
+-	destroy: function() {
+-		this._destroy();
+-		// we can probably remove the unbind calls in 2.0
+-		// all event bindings should go through this._on()
+-		this.element
+-			.unbind( this.eventNamespace )
+-			// 1.9 BC for #7810
+-			// TODO remove dual storage
+-			.removeData( this.widgetName )
+-			.removeData( this.widgetFullName )
+-			// support: jquery <1.6.3
+-			// http://bugs.jquery.com/ticket/9413
+-			.removeData( $.camelCase( this.widgetFullName ) );
+-		this.widget()
+-			.unbind( this.eventNamespace )
+-			.removeAttr( "aria-disabled" )
+-			.removeClass(
+-				this.widgetFullName + "-disabled " +
+-				"ui-state-disabled" );
+-
+-		// clean up events and states
+-		this.bindings.unbind( this.eventNamespace );
+-		this.hoverable.removeClass( "ui-state-hover" );
+-		this.focusable.removeClass( "ui-state-focus" );
+-	},
+-	_destroy: $.noop,
+-
+-	widget: function() {
+-		return this.element;
+-	},
+-
+-	option: function( key, value ) {
+-		var options = key,
+-			parts,
+-			curOption,
+-			i;
+-
+-		if ( arguments.length === 0 ) {
+-			// don't return a reference to the internal hash
+-			return $.widget.extend( {}, this.options );
+-		}
+-
+-		if ( typeof key === "string" ) {
+-			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+-			options = {};
+-			parts = key.split( "." );
+-			key = parts.shift();
+-			if ( parts.length ) {
+-				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+-				for ( i = 0; i < parts.length - 1; i++ ) {
+-					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+-					curOption = curOption[ parts[ i ] ];
+-				}
+-				key = parts.pop();
+-				if ( value === undefined ) {
+-					return curOption[ key ] === undefined ? null : curOption[ key ];
+-				}
+-				curOption[ key ] = value;
+-			} else {
+-				if ( value === undefined ) {
+-					return this.options[ key ] === undefined ? null : this.options[ key ];
+-				}
+-				options[ key ] = value;
+-			}
+-		}
+-
+-		this._setOptions( options );
+-
+-		return this;
+-	},
+-	_setOptions: function( options ) {
+-		var key;
+-
+-		for ( key in options ) {
+-			this._setOption( key, options[ key ] );
+-		}
+-
+-		return this;
+-	},
+-	_setOption: function( key, value ) {
+-		this.options[ key ] = value;
+-
+-		if ( key === "disabled" ) {
+-			this.widget()
+-				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+-				.attr( "aria-disabled", value );
+-			this.hoverable.removeClass( "ui-state-hover" );
+-			this.focusable.removeClass( "ui-state-focus" );
+-		}
+-
+-		return this;
+-	},
+-
+-	enable: function() {
+-		return this._setOption( "disabled", false );
+-	},
+-	disable: function() {
+-		return this._setOption( "disabled", true );
+-	},
+-
+-	_on: function( suppressDisabledCheck, element, handlers ) {
+-		var delegateElement,
+-			instance = this;
+-
+-		// no suppressDisabledCheck flag, shuffle arguments
+-		if ( typeof suppressDisabledCheck !== "boolean" ) {
+-			handlers = element;
+-			element = suppressDisabledCheck;
+-			suppressDisabledCheck = false;
+-		}
+-
+-		// no element argument, shuffle and use this.element
+-		if ( !handlers ) {
+-			handlers = element;
+-			element = this.element;
+-			delegateElement = this.widget();
+-		} else {
+-			// accept selectors, DOM elements
+-			element = delegateElement = $( element );
+-			this.bindings = this.bindings.add( element );
+-		}
+-
+-		$.each( handlers, function( event, handler ) {
+-			function handlerProxy() {
+-				// allow widgets to customize the disabled handling
+-				// - disabled as an array instead of boolean
+-				// - disabled class as method for disabling individual parts
+-				if ( !suppressDisabledCheck &&
+-						( instance.options.disabled === true ||
+-							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+-					return;
+-				}
+-				return ( typeof handler === "string" ? instance[ handler ] : handler )
+-					.apply( instance, arguments );
+-			}
+-
+-			// copy the guid so direct unbinding works
+-			if ( typeof handler !== "string" ) {
+-				handlerProxy.guid = handler.guid =
+-					handler.guid || handlerProxy.guid || $.guid++;
+-			}
+-
+-			var match = event.match( /^(\w+)\s*(.*)$/ ),
+-				eventName = match[1] + instance.eventNamespace,
+-				selector = match[2];
+-			if ( selector ) {
+-				delegateElement.delegate( selector, eventName, handlerProxy );
+-			} else {
+-				element.bind( eventName, handlerProxy );
+-			}
+-		});
+-	},
+-
+-	_off: function( element, eventName ) {
+-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+-		element.unbind( eventName ).undelegate( eventName );
+-	},
+-
+-	_delay: function( handler, delay ) {
+-		function handlerProxy() {
+-			return ( typeof handler === "string" ? instance[ handler ] : handler )
+-				.apply( instance, arguments );
+-		}
+-		var instance = this;
+-		return setTimeout( handlerProxy, delay || 0 );
+-	},
+-
+-	_hoverable: function( element ) {
+-		this.hoverable = this.hoverable.add( element );
+-		this._on( element, {
+-			mouseenter: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-hover" );
+-			},
+-			mouseleave: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-hover" );
+-			}
+-		});
+-	},
+-
+-	_focusable: function( element ) {
+-		this.focusable = this.focusable.add( element );
+-		this._on( element, {
+-			focusin: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-focus" );
+-			},
+-			focusout: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-focus" );
+-			}
+-		});
+-	},
+-
+-	_trigger: function( type, event, data ) {
+-		var prop, orig,
+-			callback = this.options[ type ];
+-
+-		data = data || {};
+-		event = $.Event( event );
+-		event.type = ( type === this.widgetEventPrefix ?
+-			type :
+-			this.widgetEventPrefix + type ).toLowerCase();
+-		// the original event may come from any element
+-		// so we need to reset the target on the new event
+-		event.target = this.element[ 0 ];
+-
+-		// copy original event properties over to the new event
+-		orig = event.originalEvent;
+-		if ( orig ) {
+-			for ( prop in orig ) {
+-				if ( !( prop in event ) ) {
+-					event[ prop ] = orig[ prop ];
+-				}
+-			}
+-		}
+-
+-		this.element.trigger( event, data );
+-		return !( $.isFunction( callback ) &&
+-			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+-			event.isDefaultPrevented() );
+-	}
+-};
+-
+-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+-	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+-		if ( typeof options === "string" ) {
+-			options = { effect: options };
+-		}
+-		var hasOptions,
+-			effectName = !options ?
+-				method :
+-				options === true || typeof options === "number" ?
+-					defaultEffect :
+-					options.effect || defaultEffect;
+-		options = options || {};
+-		if ( typeof options === "number" ) {
+-			options = { duration: options };
+-		}
+-		hasOptions = !$.isEmptyObject( options );
+-		options.complete = callback;
+-		if ( options.delay ) {
+-			element.delay( options.delay );
+-		}
+-		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+-			element[ method ]( options );
+-		} else if ( effectName !== method && element[ effectName ] ) {
+-			element[ effectName ]( options.duration, options.easing, callback );
+-		} else {
+-			element.queue(function( next ) {
+-				$( this )[ method ]();
+-				if ( callback ) {
+-					callback.call( element[ 0 ] );
+-				}
+-				next();
+-			});
+-		}
+-	};
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-var mouseHandled = false;
+-$( document ).mouseup( function() {
+-	mouseHandled = false;
+-});
+-
+-$.widget("ui.mouse", {
+-	version: "1.10.3",
+-	options: {
+-		cancel: "input,textarea,button,select,option",
+-		distance: 1,
+-		delay: 0
+-	},
+-	_mouseInit: function() {
+-		var that = this;
+-
+-		this.element
+-			.bind("mousedown."+this.widgetName, function(event) {
+-				return that._mouseDown(event);
+-			})
+-			.bind("click."+this.widgetName, function(event) {
+-				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+-					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+-					event.stopImmediatePropagation();
+-					return false;
+-				}
+-			});
+-
+-		this.started = false;
+-	},
+-
+-	// TODO: make sure destroying one instance of mouse doesn't mess with
+-	// other instances of mouse
+-	_mouseDestroy: function() {
+-		this.element.unbind("."+this.widgetName);
+-		if ( this._mouseMoveDelegate ) {
+-			$(document)
+-				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-		}
+-	},
+-
+-	_mouseDown: function(event) {
+-		// don't let more than one widget handle mouseStart
+-		if( mouseHandled ) { return; }
+-
+-		// we may have missed mouseup (out of window)
+-		(this._mouseStarted && this._mouseUp(event));
+-
+-		this._mouseDownEvent = event;
+-
+-		var that = this,
+-			btnIsLeft = (event.which === 1),
+-			// event.target.nodeName works around a bug in IE 8 with
+-			// disabled inputs (#7620)
+-			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+-			return true;
+-		}
+-
+-		this.mouseDelayMet = !this.options.delay;
+-		if (!this.mouseDelayMet) {
+-			this._mouseDelayTimer = setTimeout(function() {
+-				that.mouseDelayMet = true;
+-			}, this.options.delay);
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted = (this._mouseStart(event) !== false);
+-			if (!this._mouseStarted) {
+-				event.preventDefault();
+-				return true;
+-			}
+-		}
+-
+-		// Click event may never have fired (Gecko & Opera)
+-		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+-			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+-		}
+-
+-		// these delegates are required to keep context
+-		this._mouseMoveDelegate = function(event) {
+-			return that._mouseMove(event);
+-		};
+-		this._mouseUpDelegate = function(event) {
+-			return that._mouseUp(event);
+-		};
+-		$(document)
+-			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		event.preventDefault();
+-
+-		mouseHandled = true;
+-		return true;
+-	},
+-
+-	_mouseMove: function(event) {
+-		// IE mouseup check - mouseup happened when mouse was out of window
+-		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+-			return this._mouseUp(event);
+-		}
+-
+-		if (this._mouseStarted) {
+-			this._mouseDrag(event);
+-			return event.preventDefault();
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted =
+-				(this._mouseStart(this._mouseDownEvent, event) !== false);
+-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+-		}
+-
+-		return !this._mouseStarted;
+-	},
+-
+-	_mouseUp: function(event) {
+-		$(document)
+-			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		if (this._mouseStarted) {
+-			this._mouseStarted = false;
+-
+-			if (event.target === this._mouseDownEvent.target) {
+-				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+-			}
+-
+-			this._mouseStop(event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseDistanceMet: function(event) {
+-		return (Math.max(
+-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+-			) >= this.options.distance
+-		);
+-	},
+-
+-	_mouseDelayMet: function(/* event */) {
+-		return this.mouseDelayMet;
+-	},
+-
+-	// These are placeholder methods, to be overriden by extending plugin
+-	_mouseStart: function(/* event */) {},
+-	_mouseDrag: function(/* event */) {},
+-	_mouseStop: function(/* event */) {},
+-	_mouseCapture: function(/* event */) { return true; }
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.ui = $.ui || {};
+-
+-var cachedScrollbarWidth,
+-	max = Math.max,
+-	abs = Math.abs,
+-	round = Math.round,
+-	rhorizontal = /left|center|right/,
+-	rvertical = /top|center|bottom/,
+-	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+-	rposition = /^\w+/,
+-	rpercent = /%$/,
+-	_position = $.fn.position;
+-
+-function getOffsets( offsets, width, height ) {
+-	return [
+-		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+-		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+-	];
+-}
+-
+-function parseCss( element, property ) {
+-	return parseInt( $.css( element, property ), 10 ) || 0;
+-}
+-
+-function getDimensions( elem ) {
+-	var raw = elem[0];
+-	if ( raw.nodeType === 9 ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: 0, left: 0 }
+-		};
+-	}
+-	if ( $.isWindow( raw ) ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+-		};
+-	}
+-	if ( raw.preventDefault ) {
+-		return {
+-			width: 0,
+-			height: 0,
+-			offset: { top: raw.pageY, left: raw.pageX }
+-		};
+-	}
+-	return {
+-		width: elem.outerWidth(),
+-		height: elem.outerHeight(),
+-		offset: elem.offset()
+-	};
+-}
+-
+-$.position = {
+-	scrollbarWidth: function() {
+-		if ( cachedScrollbarWidth !== undefined ) {
+-			return cachedScrollbarWidth;
+-		}
+-		var w1, w2,
+-			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+-			innerDiv = div.children()[0];
+-
+-		$( "body" ).append( div );
+-		w1 = innerDiv.offsetWidth;
+-		div.css( "overflow", "scroll" );
+-
+-		w2 = innerDiv.offsetWidth;
+-
+-		if ( w1 === w2 ) {
+-			w2 = div[0].clientWidth;
+-		}
+-
+-		div.remove();
+-
+-		return (cachedScrollbarWidth = w1 - w2);
+-	},
+-	getScrollInfo: function( within ) {
+-		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
+-			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+-			hasOverflowX = overflowX === "scroll" ||
+-				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+-			hasOverflowY = overflowY === "scroll" ||
+-				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+-		return {
+-			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+-			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+-		};
+-	},
+-	getWithinInfo: function( element ) {
+-		var withinElement = $( element || window ),
+-			isWindow = $.isWindow( withinElement[0] );
+-		return {
+-			element: withinElement,
+-			isWindow: isWindow,
+-			offset: withinElement.offset() || { left: 0, top: 0 },
+-			scrollLeft: withinElement.scrollLeft(),
+-			scrollTop: withinElement.scrollTop(),
+-			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+-			height: isWindow ? withinElement.height() : withinElement.outerHeight()
+-		};
+-	}
+-};
+-
+-$.fn.position = function( options ) {
+-	if ( !options || !options.of ) {
+-		return _position.apply( this, arguments );
+-	}
+-
+-	// make a copy, we don't want to modify arguments
+-	options = $.extend( {}, options );
+-
+-	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+-		target = $( options.of ),
+-		within = $.position.getWithinInfo( options.within ),
+-		scrollInfo = $.position.getScrollInfo( within ),
+-		collision = ( options.collision || "flip" ).split( " " ),
+-		offsets = {};
+-
+-	dimensions = getDimensions( target );
+-	if ( target[0].preventDefault ) {
+-		// force left top to allow flipping
+-		options.at = "left top";
+-	}
+-	targetWidth = dimensions.width;
+-	targetHeight = dimensions.height;
+-	targetOffset = dimensions.offset;
+-	// clone to reuse original targetOffset later
+-	basePosition = $.extend( {}, targetOffset );
+-
+-	// force my and at to have valid horizontal and vertical positions
+-	// if a value is missing or invalid, it will be converted to center
+-	$.each( [ "my", "at" ], function() {
+-		var pos = ( options[ this ] || "" ).split( " " ),
+-			horizontalOffset,
+-			verticalOffset;
+-
+-		if ( pos.length === 1) {
+-			pos = rhorizontal.test( pos[ 0 ] ) ?
+-				pos.concat( [ "center" ] ) :
+-				rvertical.test( pos[ 0 ] ) ?
+-					[ "center" ].concat( pos ) :
+-					[ "center", "center" ];
+-		}
+-		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+-		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+-
+-		// calculate offsets
+-		horizontalOffset = roffset.exec( pos[ 0 ] );
+-		verticalOffset = roffset.exec( pos[ 1 ] );
+-		offsets[ this ] = [
+-			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+-			verticalOffset ? verticalOffset[ 0 ] : 0
+-		];
+-
+-		// reduce to just the positions without the offsets
+-		options[ this ] = [
+-			rposition.exec( pos[ 0 ] )[ 0 ],
+-			rposition.exec( pos[ 1 ] )[ 0 ]
+-		];
+-	});
+-
+-	// normalize collision option
+-	if ( collision.length === 1 ) {
+-		collision[ 1 ] = collision[ 0 ];
+-	}
+-
+-	if ( options.at[ 0 ] === "right" ) {
+-		basePosition.left += targetWidth;
+-	} else if ( options.at[ 0 ] === "center" ) {
+-		basePosition.left += targetWidth / 2;
+-	}
+-
+-	if ( options.at[ 1 ] === "bottom" ) {
+-		basePosition.top += targetHeight;
+-	} else if ( options.at[ 1 ] === "center" ) {
+-		basePosition.top += targetHeight / 2;
+-	}
+-
+-	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+-	basePosition.left += atOffset[ 0 ];
+-	basePosition.top += atOffset[ 1 ];
+-
+-	return this.each(function() {
+-		var collisionPosition, using,
+-			elem = $( this ),
+-			elemWidth = elem.outerWidth(),
+-			elemHeight = elem.outerHeight(),
+-			marginLeft = parseCss( this, "marginLeft" ),
+-			marginTop = parseCss( this, "marginTop" ),
+-			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+-			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+-			position = $.extend( {}, basePosition ),
+-			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+-
+-		if ( options.my[ 0 ] === "right" ) {
+-			position.left -= elemWidth;
+-		} else if ( options.my[ 0 ] === "center" ) {
+-			position.left -= elemWidth / 2;
+-		}
+-
+-		if ( options.my[ 1 ] === "bottom" ) {
+-			position.top -= elemHeight;
+-		} else if ( options.my[ 1 ] === "center" ) {
+-			position.top -= elemHeight / 2;
+-		}
+-
+-		position.left += myOffset[ 0 ];
+-		position.top += myOffset[ 1 ];
+-
+-		// if the browser doesn't support fractions, then round for consistent results
+-		if ( !$.support.offsetFractions ) {
+-			position.left = round( position.left );
+-			position.top = round( position.top );
+-		}
+-
+-		collisionPosition = {
+-			marginLeft: marginLeft,
+-			marginTop: marginTop
+-		};
+-
+-		$.each( [ "left", "top" ], function( i, dir ) {
+-			if ( $.ui.position[ collision[ i ] ] ) {
+-				$.ui.position[ collision[ i ] ][ dir ]( position, {
+-					targetWidth: targetWidth,
+-					targetHeight: targetHeight,
+-					elemWidth: elemWidth,
+-					elemHeight: elemHeight,
+-					collisionPosition: collisionPosition,
+-					collisionWidth: collisionWidth,
+-					collisionHeight: collisionHeight,
+-					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+-					my: options.my,
+-					at: options.at,
+-					within: within,
+-					elem : elem
+-				});
+-			}
+-		});
+-
+-		if ( options.using ) {
+-			// adds feedback as second argument to using callback, if present
+-			using = function( props ) {
+-				var left = targetOffset.left - position.left,
+-					right = left + targetWidth - elemWidth,
+-					top = targetOffset.top - position.top,
+-					bottom = top + targetHeight - elemHeight,
+-					feedback = {
+-						target: {
+-							element: target,
+-							left: targetOffset.left,
+-							top: targetOffset.top,
+-							width: targetWidth,
+-							height: targetHeight
+-						},
+-						element: {
+-							element: elem,
+-							left: position.left,
+-							top: position.top,
+-							width: elemWidth,
+-							height: elemHeight
+-						},
+-						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+-						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+-					};
+-				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+-					feedback.horizontal = "center";
+-				}
+-				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+-					feedback.vertical = "middle";
+-				}
+-				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+-					feedback.important = "horizontal";
+-				} else {
+-					feedback.important = "vertical";
+-				}
+-				options.using.call( this, props, feedback );
+-			};
+-		}
+-
+-		elem.offset( $.extend( position, { using: using } ) );
+-	});
+-};
+-
+-$.ui.position = {
+-	fit: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+-				outerWidth = within.width,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = withinOffset - collisionPosLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+-				newOverRight;
+-
+-			// element is wider than within
+-			if ( data.collisionWidth > outerWidth ) {
+-				// element is initially over the left side of within
+-				if ( overLeft > 0 && overRight <= 0 ) {
+-					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+-					position.left += overLeft - newOverRight;
+-				// element is initially over right side of within
+-				} else if ( overRight > 0 && overLeft <= 0 ) {
+-					position.left = withinOffset;
+-				// element is initially over both left and right sides of within
+-				} else {
+-					if ( overLeft > overRight ) {
+-						position.left = withinOffset + outerWidth - data.collisionWidth;
+-					} else {
+-						position.left = withinOffset;
+-					}
+-				}
+-			// too far left -> align with left edge
+-			} else if ( overLeft > 0 ) {
+-				position.left += overLeft;
+-			// too far right -> align with right edge
+-			} else if ( overRight > 0 ) {
+-				position.left -= overRight;
+-			// adjust based on position and margin
+-			} else {
+-				position.left = max( position.left - collisionPosLeft, position.left );
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+-				outerHeight = data.within.height,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = withinOffset - collisionPosTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+-				newOverBottom;
+-
+-			// element is taller than within
+-			if ( data.collisionHeight > outerHeight ) {
+-				// element is initially over the top of within
+-				if ( overTop > 0 && overBottom <= 0 ) {
+-					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+-					position.top += overTop - newOverBottom;
+-				// element is initially over bottom of within
+-				} else if ( overBottom > 0 && overTop <= 0 ) {
+-					position.top = withinOffset;
+-				// element is initially over both top and bottom of within
+-				} else {
+-					if ( overTop > overBottom ) {
+-						position.top = withinOffset + outerHeight - data.collisionHeight;
+-					} else {
+-						position.top = withinOffset;
+-					}
+-				}
+-			// too far up -> align with top
+-			} else if ( overTop > 0 ) {
+-				position.top += overTop;
+-			// too far down -> align with bottom edge
+-			} else if ( overBottom > 0 ) {
+-				position.top -= overBottom;
+-			// adjust based on position and margin
+-			} else {
+-				position.top = max( position.top - collisionPosTop, position.top );
+-			}
+-		}
+-	},
+-	flip: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.left + within.scrollLeft,
+-				outerWidth = within.width,
+-				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = collisionPosLeft - offsetLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+-				myOffset = data.my[ 0 ] === "left" ?
+-					-data.elemWidth :
+-					data.my[ 0 ] === "right" ?
+-						data.elemWidth :
+-						0,
+-				atOffset = data.at[ 0 ] === "left" ?
+-					data.targetWidth :
+-					data.at[ 0 ] === "right" ?
+-						-data.targetWidth :
+-						0,
+-				offset = -2 * data.offset[ 0 ],
+-				newOverRight,
+-				newOverLeft;
+-
+-			if ( overLeft < 0 ) {
+-				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+-				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overRight > 0 ) {
+-				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+-				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.top + within.scrollTop,
+-				outerHeight = within.height,
+-				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = collisionPosTop - offsetTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+-				top = data.my[ 1 ] === "top",
+-				myOffset = top ?
+-					-data.elemHeight :
+-					data.my[ 1 ] === "bottom" ?
+-						data.elemHeight :
+-						0,
+-				atOffset = data.at[ 1 ] === "top" ?
+-					data.targetHeight :
+-					data.at[ 1 ] === "bottom" ?
+-						-data.targetHeight :
+-						0,
+-				offset = -2 * data.offset[ 1 ],
+-				newOverTop,
+-				newOverBottom;
+-			if ( overTop < 0 ) {
+-				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+-				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overBottom > 0 ) {
+-				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+-				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-		}
+-	},
+-	flipfit: {
+-		left: function() {
+-			$.ui.position.flip.left.apply( this, arguments );
+-			$.ui.position.fit.left.apply( this, arguments );
+-		},
+-		top: function() {
+-			$.ui.position.flip.top.apply( this, arguments );
+-			$.ui.position.fit.top.apply( this, arguments );
+-		}
+-	}
+-};
+-
+-// fraction support test
+-(function () {
+-	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+-		body = document.getElementsByTagName( "body" )[ 0 ],
+-		div = document.createElement( "div" );
+-
+-	//Create a "fake body" for testing based on method used in jQuery.support
+-	testElement = document.createElement( body ? "div" : "body" );
+-	testElementStyle = {
+-		visibility: "hidden",
+-		width: 0,
+-		height: 0,
+-		border: 0,
+-		margin: 0,
+-		background: "none"
+-	};
+-	if ( body ) {
+-		$.extend( testElementStyle, {
+-			position: "absolute",
+-			left: "-1000px",
+-			top: "-1000px"
+-		});
+-	}
+-	for ( i in testElementStyle ) {
+-		testElement.style[ i ] = testElementStyle[ i ];
+-	}
+-	testElement.appendChild( div );
+-	testElementParent = body || document.documentElement;
+-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+-
+-	div.style.cssText = "position: absolute; left: 10.7432222px;";
+-
+-	offsetLeft = $( div ).offset().left;
+-	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+-
+-	testElement.innerHTML = "";
+-	testElementParent.removeChild( testElement );
+-})();
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.widget("ui.draggable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drag",
+-	options: {
+-		addClasses: true,
+-		appendTo: "parent",
+-		axis: false,
+-		connectToSortable: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		iframeFix: false,
+-		opacity: false,
+-		refreshPositions: false,
+-		revert: false,
+-		revertDuration: 500,
+-		scope: "default",
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		snap: false,
+-		snapMode: "both",
+-		snapTolerance: 20,
+-		stack: false,
+-		zIndex: false,
+-
+-		// callbacks
+-		drag: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
+-			this.element[0].style.position = "relative";
+-		}
+-		if (this.options.addClasses){
+-			this.element.addClass("ui-draggable");
+-		}
+-		if (this.options.disabled){
+-			this.element.addClass("ui-draggable-disabled");
+-		}
+-
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function(event) {
+-
+-		var o = this.options;
+-
+-		// among others, prevent a drag on a resizable-handle
+-		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+-			return false;
+-		}
+-
+-		//Quit if we're not on a valid handle
+-		this.handle = this._getHandle(event);
+-		if (!this.handle) {
+-			return false;
+-		}
+-
+-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+-			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
+-			.css({
+-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+-				position: "absolute", opacity: "0.001", zIndex: 1000
+-			})
+-			.css($(this).offset())
+-			.appendTo("body");
+-		});
+-
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options;
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		this.helper.addClass("ui-draggable-dragging");
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		//If ddmanager is used for droppables, set the global draggable
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Store the helper's css position
+-		this.cssPosition = this.helper.css( "position" );
+-		this.scrollParent = this.helper.scrollParent();
+-		this.offsetParent = this.helper.offsetParent();
+-		this.offsetParentCssPosition = this.offsetParent.css( "position" );
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.positionAbs = this.element.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		//Reset scroll cache
+-		this.offset.scroll = false;
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this.position = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Set a containment if given in the options
+-		this._setContainment();
+-
+-		//Trigger event + callbacks
+-		if(this._trigger("start", event) === false) {
+-			this._clear();
+-			return false;
+-		}
+-
+-		//Recache the helper size
+-		this._cacheHelperProportions();
+-
+-		//Prepare the droppable offsets
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-
+-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+-		if ( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStart(this, event);
+-		}
+-
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event, noPropagation) {
+-		// reset any necessary cached properties (see #5009)
+-		if ( this.offsetParentCssPosition === "fixed" ) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Call plugins and callbacks and use the resulting position if something is returned
+-		if (!noPropagation) {
+-			var ui = this._uiHash();
+-			if(this._trigger("drag", event, ui) === false) {
+-				this._mouseUp({});
+-				return false;
+-			}
+-			this.position = ui.position;
+-		}
+-
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		//If we are using droppables, inform the manager about the drop
+-		var that = this,
+-			dropped = false;
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			dropped = $.ui.ddmanager.drop(this, event);
+-		}
+-
+-		//if a drop comes from outside (a sortable)
+-		if(this.dropped) {
+-			dropped = this.dropped;
+-			this.dropped = false;
+-		}
+-
+-		//if the original element is no longer in the DOM don't bother to continue (see #8269)
+-		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
+-			return false;
+-		}
+-
+-		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+-				if(that._trigger("stop", event) !== false) {
+-					that._clear();
+-				}
+-			});
+-		} else {
+-			if(this._trigger("stop", event) !== false) {
+-				this._clear();
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseUp: function(event) {
+-		//Remove frame helpers
+-		$("div.ui-draggable-iframeFix").each(function() {
+-			this.parentNode.removeChild(this);
+-		});
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+-		if( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStop(this, event);
+-		}
+-
+-		return $.ui.mouse.prototype._mouseUp.call(this, event);
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.helper.is(".ui-draggable-dragging")) {
+-			this._mouseUp({});
+-		} else {
+-			this._clear();
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	_getHandle: function(event) {
+-		return this.options.handle ?
+-			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+-			true;
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+-
+-		if(!helper.parents("body").length) {
+-			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+-		}
+-
+-		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+-			helper.css("position", "absolute");
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-		//Get the offsetParent and cache its position
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		//This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		//Ugly IE fix
+-		if((this.offsetParent[0] === document.body) ||
+-			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.element.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.element.css("marginTop"),10) || 0),
+-			right: (parseInt(this.element.css("marginRight"),10) || 0),
+-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var over, c, ce,
+-			o = this.options;
+-
+-		if ( !o.containment ) {
+-			this.containment = null;
+-			return;
+-		}
+-
+-		if ( o.containment === "window" ) {
+-			this.containment = [
+-				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+-				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+-				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+-				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment === "document") {
+-			this.containment = [
+-				0,
+-				0,
+-				$( document ).width() - this.helperProportions.width - this.margins.left,
+-				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment.constructor === Array ) {
+-			this.containment = o.containment;
+-			return;
+-		}
+-
+-		if ( o.containment === "parent" ) {
+-			o.containment = this.helper[ 0 ].parentNode;
+-		}
+-
+-		c = $( o.containment );
+-		ce = c[ 0 ];
+-
+-		if( !ce ) {
+-			return;
+-		}
+-
+-		over = c.css( "overflow" ) !== "hidden";
+-
+-		this.containment = [
+-			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+-			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
+-			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
+-			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+-		];
+-		this.relative_container = c;
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var containment, co, top, left,
+-			o = this.options,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+-			pageX = event.pageX,
+-			pageY = event.pageY;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		// If we are not dragging yet, we won't check for options
+-		if ( this.originalPosition ) {
+-			if ( this.containment ) {
+-				if ( this.relative_container ){
+-					co = this.relative_container.offset();
+-					containment = [
+-						this.containment[ 0 ] + co.left,
+-						this.containment[ 1 ] + co.top,
+-						this.containment[ 2 ] + co.left,
+-						this.containment[ 3 ] + co.top
+-					];
+-				}
+-				else {
+-					containment = this.containment;
+-				}
+-
+-				if(event.pageX - this.offset.click.left < containment[0]) {
+-					pageX = containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < containment[1]) {
+-					pageY = containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > containment[2]) {
+-					pageX = containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > containment[3]) {
+-					pageY = containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+-				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+-				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+-				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																	// The absolute mouse position
+-				this.offset.click.top	-												// Click offset (relative to the element)
+-				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
+-			),
+-			left: (
+-				pageX -																	// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
+-			)
+-		};
+-
+-	},
+-
+-	_clear: function() {
+-		this.helper.removeClass("ui-draggable-dragging");
+-		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-		this.cancelHelperRemoval = false;
+-	},
+-
+-	// From now on bulk stuff - mainly helpers
+-
+-	_trigger: function(type, event, ui) {
+-		ui = ui || this._uiHash();
+-		$.ui.plugin.call(this, type, [event, ui]);
+-		//The absolute position has to be recalculated after plugins
+-		if(type === "drag") {
+-			this.positionAbs = this._convertPositionTo("absolute");
+-		}
+-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+-	},
+-
+-	plugins: {},
+-
+-	_uiHash: function() {
+-		return {
+-			helper: this.helper,
+-			position: this.position,
+-			originalPosition: this.originalPosition,
+-			offset: this.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.plugin.add("draggable", "connectToSortable", {
+-	start: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), o = inst.options,
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-		inst.sortables = [];
+-		$(o.connectToSortable).each(function() {
+-			var sortable = $.data(this, "ui-sortable");
+-			if (sortable && !sortable.options.disabled) {
+-				inst.sortables.push({
+-					instance: sortable,
+-					shouldRevert: sortable.options.revert
+-				});
+-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+-				sortable._trigger("activate", event, uiSortable);
+-			}
+-		});
+-
+-	},
+-	stop: function(event, ui) {
+-
+-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+-		var inst = $(this).data("ui-draggable"),
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-
+-		$.each(inst.sortables, function() {
+-			if(this.instance.isOver) {
+-
+-				this.instance.isOver = 0;
+-
+-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+-
+-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
+-				if(this.shouldRevert) {
+-					this.instance.options.revert = this.shouldRevert;
+-				}
+-
+-				//Trigger the stop of the sortable
+-				this.instance._mouseStop(event);
+-
+-				this.instance.options.helper = this.instance.options._helper;
+-
+-				//If the helper has been the original item, restore properties in the sortable
+-				if(inst.options.helper === "original") {
+-					this.instance.currentItem.css({ top: "auto", left: "auto" });
+-				}
+-
+-			} else {
+-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+-				this.instance._trigger("deactivate", event, uiSortable);
+-			}
+-
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), that = this;
+-
+-		$.each(inst.sortables, function() {
+-
+-			var innermostIntersecting = false,
+-				thisSortable = this;
+-
+-			//Copy over some variables to allow calling the sortable's native _intersectsWith
+-			this.instance.positionAbs = inst.positionAbs;
+-			this.instance.helperProportions = inst.helperProportions;
+-			this.instance.offset.click = inst.offset.click;
+-
+-			if(this.instance._intersectsWith(this.instance.containerCache)) {
+-				innermostIntersecting = true;
+-				$.each(inst.sortables, function () {
+-					this.instance.positionAbs = inst.positionAbs;
+-					this.instance.helperProportions = inst.helperProportions;
+-					this.instance.offset.click = inst.offset.click;
+-					if (this !== thisSortable &&
+-						this.instance._intersectsWith(this.instance.containerCache) &&
+-						$.contains(thisSortable.instance.element[0], this.instance.element[0])
+-					) {
+-						innermostIntersecting = false;
+-					}
+-					return innermostIntersecting;
+-				});
+-			}
+-
+-
+-			if(innermostIntersecting) {
+-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+-				if(!this.instance.isOver) {
+-
+-					this.instance.isOver = 1;
+-					//Now we fake the start of dragging for the sortable instance,
+-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+-					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
+-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+-					this.instance.options.helper = function() { return ui.helper[0]; };
+-
+-					event.target = this.instance.currentItem[0];
+-					this.instance._mouseCapture(event, true);
+-					this.instance._mouseStart(event, true, true);
+-
+-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+-					this.instance.offset.click.top = inst.offset.click.top;
+-					this.instance.offset.click.left = inst.offset.click.left;
+-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+-
+-					inst._trigger("toSortable", event);
+-					inst.dropped = this.instance.element; //draggable revert needs that
+-					//hack so receive/update callbacks work (mostly)
+-					inst.currentItem = inst.element;
+-					this.instance.fromOutside = inst;
+-
+-				}
+-
+-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+-				if(this.instance.currentItem) {
+-					this.instance._mouseDrag(event);
+-				}
+-
+-			} else {
+-
+-				//If it doesn't intersect with the sortable, and it intersected before,
+-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+-				if(this.instance.isOver) {
+-
+-					this.instance.isOver = 0;
+-					this.instance.cancelHelperRemoval = true;
+-
+-					//Prevent reverting on this forced stop
+-					this.instance.options.revert = false;
+-
+-					// The out event needs to be triggered independently
+-					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+-
+-					this.instance._mouseStop(event, true);
+-					this.instance.options.helper = this.instance.options._helper;
+-
+-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+-					this.instance.currentItem.remove();
+-					if(this.instance.placeholder) {
+-						this.instance.placeholder.remove();
+-					}
+-
+-					inst._trigger("fromSortable", event);
+-					inst.dropped = false; //draggable revert needs that
+-				}
+-
+-			}
+-
+-		});
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "cursor", {
+-	start: function() {
+-		var t = $("body"), o = $(this).data("ui-draggable").options;
+-		if (t.css("cursor")) {
+-			o._cursor = t.css("cursor");
+-		}
+-		t.css("cursor", o.cursor);
+-	},
+-	stop: function() {
+-		var o = $(this).data("ui-draggable").options;
+-		if (o._cursor) {
+-			$("body").css("cursor", o._cursor);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "opacity", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("opacity")) {
+-			o._opacity = t.css("opacity");
+-		}
+-		t.css("opacity", o.opacity);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._opacity) {
+-			$(ui.helper).css("opacity", o._opacity);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "scroll", {
+-	start: function() {
+-		var i = $(this).data("ui-draggable");
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-			i.overflowOffset = i.scrollParent.offset();
+-		}
+-	},
+-	drag: function( event ) {
+-
+-		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+-
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-			}
+-
+-		} else {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-			}
+-
+-		}
+-
+-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(i, event);
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "snap", {
+-	start: function() {
+-
+-		var i = $(this).data("ui-draggable"),
+-			o = i.options;
+-
+-		i.snapElements = [];
+-
+-		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+-			var $t = $(this),
+-				$o = $t.offset();
+-			if(this !== i.element[0]) {
+-				i.snapElements.push({
+-					item: this,
+-					width: $t.outerWidth(), height: $t.outerHeight(),
+-					top: $o.top, left: $o.left
+-				});
+-			}
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var ts, bs, ls, rs, l, r, t, b, i, first,
+-			inst = $(this).data("ui-draggable"),
+-			o = inst.options,
+-			d = o.snapTolerance,
+-			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+-
+-		for (i = inst.snapElements.length - 1; i >= 0; i--){
+-
+-			l = inst.snapElements[i].left;
+-			r = l + inst.snapElements[i].width;
+-			t = inst.snapElements[i].top;
+-			b = t + inst.snapElements[i].height;
+-
+-			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+-				if(inst.snapElements[i].snapping) {
+-					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-				}
+-				inst.snapElements[i].snapping = false;
+-				continue;
+-			}
+-
+-			if(o.snapMode !== "inner") {
+-				ts = Math.abs(t - y2) <= d;
+-				bs = Math.abs(b - y1) <= d;
+-				ls = Math.abs(l - x2) <= d;
+-				rs = Math.abs(r - x1) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+-				}
+-			}
+-
+-			first = (ts || bs || ls || rs);
+-
+-			if(o.snapMode !== "outer") {
+-				ts = Math.abs(t - y1) <= d;
+-				bs = Math.abs(b - y2) <= d;
+-				ls = Math.abs(l - x1) <= d;
+-				rs = Math.abs(r - x2) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-			}
+-
+-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-			}
+-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+-
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "stack", {
+-	start: function() {
+-		var min,
+-			o = this.data("ui-draggable").options,
+-			group = $.makeArray($(o.stack)).sort(function(a,b) {
+-				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+-			});
+-
+-		if (!group.length) { return; }
+-
+-		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+-		$(group).each(function(i) {
+-			$(this).css("zIndex", min + i);
+-		});
+-		this.css("zIndex", (min + group.length));
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "zIndex", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("zIndex")) {
+-			o._zIndex = t.css("zIndex");
+-		}
+-		t.css("zIndex", o.zIndex);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._zIndex) {
+-			$(ui.helper).css("zIndex", o._zIndex);
+-		}
+-	}
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-$.widget("ui.droppable", {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drop",
+-	options: {
+-		accept: "*",
+-		activeClass: false,
+-		addClasses: true,
+-		greedy: false,
+-		hoverClass: false,
+-		scope: "default",
+-		tolerance: "intersect",
+-
+-		// callbacks
+-		activate: null,
+-		deactivate: null,
+-		drop: null,
+-		out: null,
+-		over: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options,
+-			accept = o.accept;
+-
+-		this.isover = false;
+-		this.isout = true;
+-
+-		this.accept = $.isFunction(accept) ? accept : function(d) {
+-			return d.is(accept);
+-		};
+-
+-		//Store the droppable's proportions
+-		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+-
+-		// Add the reference and positions to the manager
+-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+-		$.ui.ddmanager.droppables[o.scope].push(this);
+-
+-		(o.addClasses && this.element.addClass("ui-droppable"));
+-
+-	},
+-
+-	_destroy: function() {
+-		var i = 0,
+-			drop = $.ui.ddmanager.droppables[this.options.scope];
+-
+-		for ( ; i < drop.length; i++ ) {
+-			if ( drop[i] === this ) {
+-				drop.splice(i, 1);
+-			}
+-		}
+-
+-		this.element.removeClass("ui-droppable ui-droppable-disabled");
+-	},
+-
+-	_setOption: function(key, value) {
+-
+-		if(key === "accept") {
+-			this.accept = $.isFunction(value) ? value : function(d) {
+-				return d.is(value);
+-			};
+-		}
+-		$.Widget.prototype._setOption.apply(this, arguments);
+-	},
+-
+-	_activate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.addClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("activate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_deactivate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.removeClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("deactivate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_over: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.addClass(this.options.hoverClass);
+-			}
+-			this._trigger("over", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_out: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("out", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_drop: function(event,custom) {
+-
+-		var draggable = custom || $.ui.ddmanager.current,
+-			childrenIntersection = false;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return false;
+-		}
+-
+-		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
+-			var inst = $.data(this, "ui-droppable");
+-			if(
+-				inst.options.greedy &&
+-				!inst.options.disabled &&
+-				inst.options.scope === draggable.options.scope &&
+-				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
+-				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+-			) { childrenIntersection = true; return false; }
+-		});
+-		if(childrenIntersection) {
+-			return false;
+-		}
+-
+-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.activeClass) {
+-				this.element.removeClass(this.options.activeClass);
+-			}
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("drop", event, this.ui(draggable));
+-			return this.element;
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	ui: function(c) {
+-		return {
+-			draggable: (c.currentItem || c.element),
+-			helper: c.helper,
+-			position: c.position,
+-			offset: c.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.intersect = function(draggable, droppable, toleranceMode) {
+-
+-	if (!droppable.offset) {
+-		return false;
+-	}
+-
+-	var draggableLeft, draggableTop,
+-		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+-		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
+-		l = droppable.offset.left, r = l + droppable.proportions.width,
+-		t = droppable.offset.top, b = t + droppable.proportions.height;
+-
+-	switch (toleranceMode) {
+-		case "fit":
+-			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+-		case "intersect":
+-			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
+-				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
+-				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+-		case "pointer":
+-			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
+-			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
+-			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
+-		case "touch":
+-			return (
+-				(y1 >= t && y1 <= b) ||	// Top edge touching
+-				(y2 >= t && y2 <= b) ||	// Bottom edge touching
+-				(y1 < t && y2 > b)		// Surrounded vertically
+-			) && (
+-				(x1 >= l && x1 <= r) ||	// Left edge touching
+-				(x2 >= l && x2 <= r) ||	// Right edge touching
+-				(x1 < l && x2 > r)		// Surrounded horizontally
+-			);
+-		default:
+-			return false;
+-		}
+-
+-};
+-
+-/*
+-	This manager tracks offsets of draggables and droppables
+-*/
+-$.ui.ddmanager = {
+-	current: null,
+-	droppables: { "default": [] },
+-	prepareOffsets: function(t, event) {
+-
+-		var i, j,
+-			m = $.ui.ddmanager.droppables[t.options.scope] || [],
+-			type = event ? event.type : null, // workaround for #2317
+-			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+-
+-		droppablesLoop: for (i = 0; i < m.length; i++) {
+-
+-			//No disabled and non-accepted
+-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+-				continue;
+-			}
+-
+-			// Filter out elements in the current dragged item
+-			for (j=0; j < list.length; j++) {
+-				if(list[j] === m[i].element[0]) {
+-					m[i].proportions.height = 0;
+-					continue droppablesLoop;
+-				}
+-			}
+-
+-			m[i].visible = m[i].element.css("display") !== "none";
+-			if(!m[i].visible) {
+-				continue;
+-			}
+-
+-			//Activate the droppable if used directly from draggables
+-			if(type === "mousedown") {
+-				m[i]._activate.call(m[i], event);
+-			}
+-
+-			m[i].offset = m[i].element.offset();
+-			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+-
+-		}
+-
+-	},
+-	drop: function(draggable, event) {
+-
+-		var dropped = false;
+-		// Create a copy of the droppables in case the list changes during the drop (#9116)
+-		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
+-
+-			if(!this.options) {
+-				return;
+-			}
+-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
+-				dropped = this._drop.call(this, event) || dropped;
+-			}
+-
+-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-				this.isout = true;
+-				this.isover = false;
+-				this._deactivate.call(this, event);
+-			}
+-
+-		});
+-		return dropped;
+-
+-	},
+-	dragStart: function( draggable, event ) {
+-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+-			if( !draggable.options.refreshPositions ) {
+-				$.ui.ddmanager.prepareOffsets( draggable, event );
+-			}
+-		});
+-	},
+-	drag: function(draggable, event) {
+-
+-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+-		if(draggable.options.refreshPositions) {
+-			$.ui.ddmanager.prepareOffsets(draggable, event);
+-		}
+-
+-		//Run through all droppables and check their positions based on specific tolerance options
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(this.options.disabled || this.greedyChild || !this.visible) {
+-				return;
+-			}
+-
+-			var parentInstance, scope, parent,
+-				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
+-				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+-			if(!c) {
+-				return;
+-			}
+-
+-			if (this.options.greedy) {
+-				// find droppable parents with same scope
+-				scope = this.options.scope;
+-				parent = this.element.parents(":data(ui-droppable)").filter(function () {
+-					return $.data(this, "ui-droppable").options.scope === scope;
+-				});
+-
+-				if (parent.length) {
+-					parentInstance = $.data(parent[0], "ui-droppable");
+-					parentInstance.greedyChild = (c === "isover");
+-				}
+-			}
+-
+-			// we just moved into a greedy child
+-			if (parentInstance && c === "isover") {
+-				parentInstance.isover = false;
+-				parentInstance.isout = true;
+-				parentInstance._out.call(parentInstance, event);
+-			}
+-
+-			this[c] = true;
+-			this[c === "isout" ? "isover" : "isout"] = false;
+-			this[c === "isover" ? "_over" : "_out"].call(this, event);
+-
+-			// we just moved out of a greedy child
+-			if (parentInstance && c === "isout") {
+-				parentInstance.isout = false;
+-				parentInstance.isover = true;
+-				parentInstance._over.call(parentInstance, event);
+-			}
+-		});
+-
+-	},
+-	dragStop: function( draggable, event ) {
+-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+-		if( !draggable.options.refreshPositions ) {
+-			$.ui.ddmanager.prepareOffsets( draggable, event );
+-		}
+-	}
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-function num(v) {
+-	return parseInt(v, 10) || 0;
+-}
+-
+-function isNumber(value) {
+-	return !isNaN(parseInt(value, 10));
+-}
+-
+-$.widget("ui.resizable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "resize",
+-	options: {
+-		alsoResize: false,
+-		animate: false,
+-		animateDuration: "slow",
+-		animateEasing: "swing",
+-		aspectRatio: false,
+-		autoHide: false,
+-		containment: false,
+-		ghost: false,
+-		grid: false,
+-		handles: "e,s,se",
+-		helper: false,
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 10,
+-		minWidth: 10,
+-		// See #7960
+-		zIndex: 90,
+-
+-		// callbacks
+-		resize: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		var n, i, handle, axis, hname,
+-			that = this,
+-			o = this.options;
+-		this.element.addClass("ui-resizable");
+-
+-		$.extend(this, {
+-			_aspectRatio: !!(o.aspectRatio),
+-			aspectRatio: o.aspectRatio,
+-			originalElement: this.element,
+-			_proportionallyResizeElements: [],
+-			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+-		});
+-
+-		//Wrap the element if it cannot hold child nodes
+-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+-
+-			//Create a wrapper element and set the wrapper to the new current internal element
+-			this.element.wrap(
+-				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+-					position: this.element.css("position"),
+-					width: this.element.outerWidth(),
+-					height: this.element.outerHeight(),
+-					top: this.element.css("top"),
+-					left: this.element.css("left")
+-				})
+-			);
+-
+-			//Overwrite the original this.element
+-			this.element = this.element.parent().data(
+-				"ui-resizable", this.element.data("ui-resizable")
+-			);
+-
+-			this.elementIsWrapper = true;
+-
+-			//Move margins to the wrapper
+-			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+-			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+-
+-			//Prevent Safari textarea resize
+-			this.originalResizeStyle = this.originalElement.css("resize");
+-			this.originalElement.css("resize", "none");
+-
+-			//Push the actual element to our proportionallyResize internal array
+-			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+-
+-			// avoid IE jump (hard set the margin)
+-			this.originalElement.css({ margin: this.originalElement.css("margin") });
+-
+-			// fix handlers offset
+-			this._proportionallyResize();
+-
+-		}
+-
+-		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
+-		if(this.handles.constructor === String) {
+-
+-			if ( this.handles === "all") {
+-				this.handles = "n,e,s,w,se,sw,ne,nw";
+-			}
+-
+-			n = this.handles.split(",");
+-			this.handles = {};
+-
+-			for(i = 0; i < n.length; i++) {
+-
+-				handle = $.trim(n[i]);
+-				hname = "ui-resizable-"+handle;
+-				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+-
+-				// Apply zIndex to all handles - see #7960
+-				axis.css({ zIndex: o.zIndex });
+-
+-				//TODO : What's going on here?
+-				if ("se" === handle) {
+-					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+-				}
+-
+-				//Insert into internal handles object and append to element
+-				this.handles[handle] = ".ui-resizable-"+handle;
+-				this.element.append(axis);
+-			}
+-
+-		}
+-
+-		this._renderAxis = function(target) {
+-
+-			var i, axis, padPos, padWrapper;
+-
+-			target = target || this.element;
+-
+-			for(i in this.handles) {
+-
+-				if(this.handles[i].constructor === String) {
+-					this.handles[i] = $(this.handles[i], this.element).show();
+-				}
+-
+-				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+-
+-					axis = $(this.handles[i], this.element);
+-
+-					//Checking the correct pad and border
+-					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+-
+-					//The padding type i have to apply...
+-					padPos = [ "padding",
+-						/ne|nw|n/.test(i) ? "Top" :
+-						/se|sw|s/.test(i) ? "Bottom" :
+-						/^e$/.test(i) ? "Right" : "Left" ].join("");
+-
+-					target.css(padPos, padWrapper);
+-
+-					this._proportionallyResize();
+-
+-				}
+-
+-				//TODO: What's that good for? There's not anything to be executed left
+-				if(!$(this.handles[i]).length) {
+-					continue;
+-				}
+-			}
+-		};
+-
+-		//TODO: make renderAxis a prototype function
+-		this._renderAxis(this.element);
+-
+-		this._handles = $(".ui-resizable-handle", this.element)
+-			.disableSelection();
+-
+-		//Matching axis name
+-		this._handles.mouseover(function() {
+-			if (!that.resizing) {
+-				if (this.className) {
+-					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+-				}
+-				//Axis, default = se
+-				that.axis = axis && axis[1] ? axis[1] : "se";
+-			}
+-		});
+-
+-		//If we want to auto hide the elements
+-		if (o.autoHide) {
+-			this._handles.hide();
+-			$(this.element)
+-				.addClass("ui-resizable-autohide")
+-				.mouseenter(function() {
+-					if (o.disabled) {
+-						return;
+-					}
+-					$(this).removeClass("ui-resizable-autohide");
+-					that._handles.show();
+-				})
+-				.mouseleave(function(){
+-					if (o.disabled) {
+-						return;
+-					}
+-					if (!that.resizing) {
+-						$(this).addClass("ui-resizable-autohide");
+-						that._handles.hide();
+-					}
+-				});
+-		}
+-
+-		//Initialize the mouse interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-
+-		this._mouseDestroy();
+-
+-		var wrapper,
+-			_destroy = function(exp) {
+-				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+-					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+-			};
+-
+-		//TODO: Unwrap at same DOM position
+-		if (this.elementIsWrapper) {
+-			_destroy(this.element);
+-			wrapper = this.element;
+-			this.originalElement.css({
+-				position: wrapper.css("position"),
+-				width: wrapper.outerWidth(),
+-				height: wrapper.outerHeight(),
+-				top: wrapper.css("top"),
+-				left: wrapper.css("left")
+-			}).insertAfter( wrapper );
+-			wrapper.remove();
+-		}
+-
+-		this.originalElement.css("resize", this.originalResizeStyle);
+-		_destroy(this.originalElement);
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-		var i, handle,
+-			capture = false;
+-
+-		for (i in this.handles) {
+-			handle = $(this.handles[i])[0];
+-			if (handle === event.target || $.contains(handle, event.target)) {
+-				capture = true;
+-			}
+-		}
+-
+-		return !this.options.disabled && capture;
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var curleft, curtop, cursor,
+-			o = this.options,
+-			iniPos = this.element.position(),
+-			el = this.element;
+-
+-		this.resizing = true;
+-
+-		// bugfix for http://dev.jquery.com/ticket/1749
+-		if ( (/absolute/).test( el.css("position") ) ) {
+-			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
+-		} else if (el.is(".ui-draggable")) {
+-			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
+-		}
+-
+-		this._renderProxy();
+-
+-		curleft = num(this.helper.css("left"));
+-		curtop = num(this.helper.css("top"));
+-
+-		if (o.containment) {
+-			curleft += $(o.containment).scrollLeft() || 0;
+-			curtop += $(o.containment).scrollTop() || 0;
+-		}
+-
+-		//Store needed variables
+-		this.offset = this.helper.offset();
+-		this.position = { left: curleft, top: curtop };
+-		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalPosition = { left: curleft, top: curtop };
+-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+-		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+-
+-		//Aspect Ratio
+-		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+-
+-		cursor = $(".ui-resizable-" + this.axis).css("cursor");
+-		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+-
+-		el.addClass("ui-resizable-resizing");
+-		this._propagate("start", event);
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Increase performance, avoid regex
+-		var data,
+-			el = this.helper, props = {},
+-			smp = this.originalMousePosition,
+-			a = this.axis,
+-			prevTop = this.position.top,
+-			prevLeft = this.position.left,
+-			prevWidth = this.size.width,
+-			prevHeight = this.size.height,
+-			dx = (event.pageX-smp.left)||0,
+-			dy = (event.pageY-smp.top)||0,
+-			trigger = this._change[a];
+-
+-		if (!trigger) {
+-			return false;
+-		}
+-
+-		// Calculate the attrs that will be change
+-		data = trigger.apply(this, [event, dx, dy]);
+-
+-		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+-		this._updateVirtualBoundaries(event.shiftKey);
+-		if (this._aspectRatio || event.shiftKey) {
+-			data = this._updateRatio(data, event);
+-		}
+-
+-		data = this._respectSize(data, event);
+-
+-		this._updateCache(data);
+-
+-		// plugins callbacks need to be called first
+-		this._propagate("resize", event);
+-
+-		if (this.position.top !== prevTop) {
+-			props.top = this.position.top + "px";
+-		}
+-		if (this.position.left !== prevLeft) {
+-			props.left = this.position.left + "px";
+-		}
+-		if (this.size.width !== prevWidth) {
+-			props.width = this.size.width + "px";
+-		}
+-		if (this.size.height !== prevHeight) {
+-			props.height = this.size.height + "px";
+-		}
+-		el.css(props);
+-
+-		if (!this._helper && this._proportionallyResizeElements.length) {
+-			this._proportionallyResize();
+-		}
+-
+-		// Call the user callback if the element was resized
+-		if ( ! $.isEmptyObject(props) ) {
+-			this._trigger("resize", event, this.ui());
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		this.resizing = false;
+-		var pr, ista, soffseth, soffsetw, s, left, top,
+-			o = this.options, that = this;
+-
+-		if(this._helper) {
+-
+-			pr = this._proportionallyResizeElements;
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+-			soffsetw = ista ? 0 : that.sizeDiff.width;
+-
+-			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-			if (!o.animate) {
+-				this.element.css($.extend(s, { top: top, left: left }));
+-			}
+-
+-			that.helper.height(that.size.height);
+-			that.helper.width(that.size.width);
+-
+-			if (this._helper && !o.animate) {
+-				this._proportionallyResize();
+-			}
+-		}
+-
+-		$("body").css("cursor", "auto");
+-
+-		this.element.removeClass("ui-resizable-resizing");
+-
+-		this._propagate("stop", event);
+-
+-		if (this._helper) {
+-			this.helper.remove();
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	_updateVirtualBoundaries: function(forceAspectRatio) {
+-		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+-			o = this.options;
+-
+-		b = {
+-			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+-			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+-			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+-			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+-		};
+-
+-		if(this._aspectRatio || forceAspectRatio) {
+-			// We want to create an enclosing box whose aspect ration is the requested one
+-			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+-			pMinWidth = b.minHeight * this.aspectRatio;
+-			pMinHeight = b.minWidth / this.aspectRatio;
+-			pMaxWidth = b.maxHeight * this.aspectRatio;
+-			pMaxHeight = b.maxWidth / this.aspectRatio;
+-
+-			if(pMinWidth > b.minWidth) {
+-				b.minWidth = pMinWidth;
+-			}
+-			if(pMinHeight > b.minHeight) {
+-				b.minHeight = pMinHeight;
+-			}
+-			if(pMaxWidth < b.maxWidth) {
+-				b.maxWidth = pMaxWidth;
+-			}
+-			if(pMaxHeight < b.maxHeight) {
+-				b.maxHeight = pMaxHeight;
+-			}
+-		}
+-		this._vBoundaries = b;
+-	},
+-
+-	_updateCache: function(data) {
+-		this.offset = this.helper.offset();
+-		if (isNumber(data.left)) {
+-			this.position.left = data.left;
+-		}
+-		if (isNumber(data.top)) {
+-			this.position.top = data.top;
+-		}
+-		if (isNumber(data.height)) {
+-			this.size.height = data.height;
+-		}
+-		if (isNumber(data.width)) {
+-			this.size.width = data.width;
+-		}
+-	},
+-
+-	_updateRatio: function( data ) {
+-
+-		var cpos = this.position,
+-			csize = this.size,
+-			a = this.axis;
+-
+-		if (isNumber(data.height)) {
+-			data.width = (data.height * this.aspectRatio);
+-		} else if (isNumber(data.width)) {
+-			data.height = (data.width / this.aspectRatio);
+-		}
+-
+-		if (a === "sw") {
+-			data.left = cpos.left + (csize.width - data.width);
+-			data.top = null;
+-		}
+-		if (a === "nw") {
+-			data.top = cpos.top + (csize.height - data.height);
+-			data.left = cpos.left + (csize.width - data.width);
+-		}
+-
+-		return data;
+-	},
+-
+-	_respectSize: function( data ) {
+-
+-		var o = this._vBoundaries,
+-			a = this.axis,
+-			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+-			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+-			dw = this.originalPosition.left + this.originalSize.width,
+-			dh = this.position.top + this.size.height,
+-			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+-		if (isminw) {
+-			data.width = o.minWidth;
+-		}
+-		if (isminh) {
+-			data.height = o.minHeight;
+-		}
+-		if (ismaxw) {
+-			data.width = o.maxWidth;
+-		}
+-		if (ismaxh) {
+-			data.height = o.maxHeight;
+-		}
+-
+-		if (isminw && cw) {
+-			data.left = dw - o.minWidth;
+-		}
+-		if (ismaxw && cw) {
+-			data.left = dw - o.maxWidth;
+-		}
+-		if (isminh && ch) {
+-			data.top = dh - o.minHeight;
+-		}
+-		if (ismaxh && ch) {
+-			data.top = dh - o.maxHeight;
+-		}
+-
+-		// fixing jump error on top/left - bug #2330
+-		if (!data.width && !data.height && !data.left && data.top) {
+-			data.top = null;
+-		} else if (!data.width && !data.height && !data.top && data.left) {
+-			data.left = null;
+-		}
+-
+-		return data;
+-	},
+-
+-	_proportionallyResize: function() {
+-
+-		if (!this._proportionallyResizeElements.length) {
+-			return;
+-		}
+-
+-		var i, j, borders, paddings, prel,
+-			element = this.helper || this.element;
+-
+-		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+-
+-			prel = this._proportionallyResizeElements[i];
+-
+-			if (!this.borderDif) {
+-				this.borderDif = [];
+-				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
+-				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
+-
+-				for ( j = 0; j < borders.length; j++ ) {
+-					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
+-				}
+-			}
+-
+-			prel.css({
+-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+-			});
+-
+-		}
+-
+-	},
+-
+-	_renderProxy: function() {
+-
+-		var el = this.element, o = this.options;
+-		this.elementOffset = el.offset();
+-
+-		if(this._helper) {
+-
+-			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+-
+-			this.helper.addClass(this._helper).css({
+-				width: this.element.outerWidth() - 1,
+-				height: this.element.outerHeight() - 1,
+-				position: "absolute",
+-				left: this.elementOffset.left +"px",
+-				top: this.elementOffset.top +"px",
+-				zIndex: ++o.zIndex //TODO: Don't modify option
+-			});
+-
+-			this.helper
+-				.appendTo("body")
+-				.disableSelection();
+-
+-		} else {
+-			this.helper = this.element;
+-		}
+-
+-	},
+-
+-	_change: {
+-		e: function(event, dx) {
+-			return { width: this.originalSize.width + dx };
+-		},
+-		w: function(event, dx) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { left: sp.left + dx, width: cs.width - dx };
+-		},
+-		n: function(event, dx, dy) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { top: sp.top + dy, height: cs.height - dy };
+-		},
+-		s: function(event, dx, dy) {
+-			return { height: this.originalSize.height + dy };
+-		},
+-		se: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		sw: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		},
+-		ne: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		nw: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		}
+-	},
+-
+-	_propagate: function(n, event) {
+-		$.ui.plugin.call(this, n, [event, this.ui()]);
+-		(n !== "resize" && this._trigger(n, event, this.ui()));
+-	},
+-
+-	plugins: {},
+-
+-	ui: function() {
+-		return {
+-			originalElement: this.originalElement,
+-			element: this.element,
+-			helper: this.helper,
+-			position: this.position,
+-			size: this.size,
+-			originalSize: this.originalSize,
+-			originalPosition: this.originalPosition
+-		};
+-	}
+-
+-});
+-
+-/*
+- * Resizable Extensions
+- */
+-
+-$.ui.plugin.add("resizable", "animate", {
+-
+-	stop: function( event ) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			pr = that._proportionallyResizeElements,
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+-			soffsetw = ista ? 0 : that.sizeDiff.width,
+-			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-		that.element.animate(
+-			$.extend(style, top && left ? { top: top, left: left } : {}), {
+-				duration: o.animateDuration,
+-				easing: o.animateEasing,
+-				step: function() {
+-
+-					var data = {
+-						width: parseInt(that.element.css("width"), 10),
+-						height: parseInt(that.element.css("height"), 10),
+-						top: parseInt(that.element.css("top"), 10),
+-						left: parseInt(that.element.css("left"), 10)
+-					};
+-
+-					if (pr && pr.length) {
+-						$(pr[0]).css({ width: data.width, height: data.height });
+-					}
+-
+-					// propagating resize, and updating values for each animation step
+-					that._updateCache(data);
+-					that._propagate("resize", event);
+-
+-				}
+-			}
+-		);
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "containment", {
+-
+-	start: function() {
+-		var element, p, co, ch, cw, width, height,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			el = that.element,
+-			oc = o.containment,
+-			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+-
+-		if (!ce) {
+-			return;
+-		}
+-
+-		that.containerElement = $(ce);
+-
+-		if (/document/.test(oc) || oc === document) {
+-			that.containerOffset = { left: 0, top: 0 };
+-			that.containerPosition = { left: 0, top: 0 };
+-
+-			that.parentData = {
+-				element: $(document), left: 0, top: 0,
+-				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+-			};
+-		}
+-
+-		// i'm a node, so compute top, left, right, bottom
+-		else {
+-			element = $(ce);
+-			p = [];
+-			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+-
+-			that.containerOffset = element.offset();
+-			that.containerPosition = element.position();
+-			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+-
+-			co = that.containerOffset;
+-			ch = that.containerSize.height;
+-			cw = that.containerSize.width;
+-			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
+-			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+-
+-			that.parentData = {
+-				element: ce, left: co.left, top: co.top, width: width, height: height
+-			};
+-		}
+-	},
+-
+-	resize: function( event ) {
+-		var woset, hoset, isParent, isOffsetRelative,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset, cp = that.position,
+-			pRatio = that._aspectRatio || event.shiftKey,
+-			cop = { top:0, left:0 }, ce = that.containerElement;
+-
+-		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
+-			cop = co;
+-		}
+-
+-		if (cp.left < (that._helper ? co.left : 0)) {
+-			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-			that.position.left = o.helper ? co.left : 0;
+-		}
+-
+-		if (cp.top < (that._helper ? co.top : 0)) {
+-			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-			that.position.top = that._helper ? co.top : 0;
+-		}
+-
+-		that.offset.left = that.parentData.left+that.position.left;
+-		that.offset.top = that.parentData.top+that.position.top;
+-
+-		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
+-		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
+-
+-		isParent = that.containerElement.get(0) === that.element.parent().get(0);
+-		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+-
+-		if(isParent && isOffsetRelative) {
+-			woset -= that.parentData.left;
+-		}
+-
+-		if (woset + that.size.width >= that.parentData.width) {
+-			that.size.width = that.parentData.width - woset;
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-		}
+-
+-		if (hoset + that.size.height >= that.parentData.height) {
+-			that.size.height = that.parentData.height - hoset;
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-		}
+-	},
+-
+-	stop: function(){
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset,
+-			cop = that.containerPosition,
+-			ce = that.containerElement,
+-			helper = $(that.helper),
+-			ho = helper.offset(),
+-			w = helper.outerWidth() - that.sizeDiff.width,
+-			h = helper.outerHeight() - that.sizeDiff.height;
+-
+-		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "alsoResize", {
+-
+-	start: function () {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			_store = function (exp) {
+-				$(exp).each(function() {
+-					var el = $(this);
+-					el.data("ui-resizable-alsoresize", {
+-						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+-						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+-					});
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
+-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+-		}else{
+-			_store(o.alsoResize);
+-		}
+-	},
+-
+-	resize: function (event, ui) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			delta = {
+-				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
+-				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
+-			},
+-
+-			_alsoResize = function (exp, c) {
+-				$(exp).each(function() {
+-					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+-						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+-
+-					$.each(css, function (i, prop) {
+-						var sum = (start[prop]||0) + (delta[prop]||0);
+-						if (sum && sum >= 0) {
+-							style[prop] = sum || null;
+-						}
+-					});
+-
+-					el.css(style);
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
+-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+-		}else{
+-			_alsoResize(o.alsoResize);
+-		}
+-	},
+-
+-	stop: function () {
+-		$(this).removeData("resizable-alsoresize");
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "ghost", {
+-
+-	start: function() {
+-
+-		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
+-
+-		that.ghost = that.originalElement.clone();
+-		that.ghost
+-			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+-			.addClass("ui-resizable-ghost")
+-			.addClass(typeof o.ghost === "string" ? o.ghost : "");
+-
+-		that.ghost.appendTo(that.helper);
+-
+-	},
+-
+-	resize: function(){
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost) {
+-			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+-		}
+-	},
+-
+-	stop: function() {
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost && that.helper) {
+-			that.helper.get(0).removeChild(that.ghost.get(0));
+-		}
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "grid", {
+-
+-	resize: function() {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			cs = that.size,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			a = that.axis,
+-			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
+-			gridX = (grid[0]||1),
+-			gridY = (grid[1]||1),
+-			ox = Math.round((cs.width - os.width) / gridX) * gridX,
+-			oy = Math.round((cs.height - os.height) / gridY) * gridY,
+-			newWidth = os.width + ox,
+-			newHeight = os.height + oy,
+-			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+-			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+-			isMinWidth = o.minWidth && (o.minWidth > newWidth),
+-			isMinHeight = o.minHeight && (o.minHeight > newHeight);
+-
+-		o.grid = grid;
+-
+-		if (isMinWidth) {
+-			newWidth = newWidth + gridX;
+-		}
+-		if (isMinHeight) {
+-			newHeight = newHeight + gridY;
+-		}
+-		if (isMaxWidth) {
+-			newWidth = newWidth - gridX;
+-		}
+-		if (isMaxHeight) {
+-			newHeight = newHeight - gridY;
+-		}
+-
+-		if (/^(se|s|e)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-		} else if (/^(ne)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-		} else if (/^(sw)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.left = op.left - ox;
+-		} else {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-			that.position.left = op.left - ox;
+-		}
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.widget("ui.selectable", $.ui.mouse, {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoRefresh: true,
+-		distance: 0,
+-		filter: "*",
+-		tolerance: "touch",
+-
+-		// callbacks
+-		selected: null,
+-		selecting: null,
+-		start: null,
+-		stop: null,
+-		unselected: null,
+-		unselecting: null
+-	},
+-	_create: function() {
+-		var selectees,
+-			that = this;
+-
+-		this.element.addClass("ui-selectable");
+-
+-		this.dragged = false;
+-
+-		// cache selectee children based on filter
+-		this.refresh = function() {
+-			selectees = $(that.options.filter, that.element[0]);
+-			selectees.addClass("ui-selectee");
+-			selectees.each(function() {
+-				var $this = $(this),
+-					pos = $this.offset();
+-				$.data(this, "selectable-item", {
+-					element: this,
+-					$element: $this,
+-					left: pos.left,
+-					top: pos.top,
+-					right: pos.left + $this.outerWidth(),
+-					bottom: pos.top + $this.outerHeight(),
+-					startselected: false,
+-					selected: $this.hasClass("ui-selected"),
+-					selecting: $this.hasClass("ui-selecting"),
+-					unselecting: $this.hasClass("ui-unselecting")
+-				});
+-			});
+-		};
+-		this.refresh();
+-
+-		this.selectees = selectees.addClass("ui-selectee");
+-
+-		this._mouseInit();
+-
+-		this.helper = $("<div class='ui-selectable-helper'></div>");
+-	},
+-
+-	_destroy: function() {
+-		this.selectees
+-			.removeClass("ui-selectee")
+-			.removeData("selectable-item");
+-		this.element
+-			.removeClass("ui-selectable ui-selectable-disabled");
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseStart: function(event) {
+-		var that = this,
+-			options = this.options;
+-
+-		this.opos = [event.pageX, event.pageY];
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		this.selectees = $(options.filter, this.element[0]);
+-
+-		this._trigger("start", event);
+-
+-		$(options.appendTo).append(this.helper);
+-		// position helper (lasso)
+-		this.helper.css({
+-			"left": event.pageX,
+-			"top": event.pageY,
+-			"width": 0,
+-			"height": 0
+-		});
+-
+-		if (options.autoRefresh) {
+-			this.refresh();
+-		}
+-
+-		this.selectees.filter(".ui-selected").each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.startselected = true;
+-			if (!event.metaKey && !event.ctrlKey) {
+-				selectee.$element.removeClass("ui-selected");
+-				selectee.selected = false;
+-				selectee.$element.addClass("ui-unselecting");
+-				selectee.unselecting = true;
+-				// selectable UNSELECTING callback
+-				that._trigger("unselecting", event, {
+-					unselecting: selectee.element
+-				});
+-			}
+-		});
+-
+-		$(event.target).parents().addBack().each(function() {
+-			var doSelect,
+-				selectee = $.data(this, "selectable-item");
+-			if (selectee) {
+-				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+-				selectee.$element
+-					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+-					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+-				selectee.unselecting = !doSelect;
+-				selectee.selecting = doSelect;
+-				selectee.selected = doSelect;
+-				// selectable (UN)SELECTING callback
+-				if (doSelect) {
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				} else {
+-					that._trigger("unselecting", event, {
+-						unselecting: selectee.element
+-					});
+-				}
+-				return false;
+-			}
+-		});
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		this.dragged = true;
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		var tmp,
+-			that = this,
+-			options = this.options,
+-			x1 = this.opos[0],
+-			y1 = this.opos[1],
+-			x2 = event.pageX,
+-			y2 = event.pageY;
+-
+-		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+-		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+-		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+-
+-		this.selectees.each(function() {
+-			var selectee = $.data(this, "selectable-item"),
+-				hit = false;
+-
+-			//prevent helper from being selected if appendTo: selectable
+-			if (!selectee || selectee.element === that.element[0]) {
+-				return;
+-			}
+-
+-			if (options.tolerance === "touch") {
+-				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+-			} else if (options.tolerance === "fit") {
+-				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+-			}
+-
+-			if (hit) {
+-				// SELECT
+-				if (selectee.selected) {
+-					selectee.$element.removeClass("ui-selected");
+-					selectee.selected = false;
+-				}
+-				if (selectee.unselecting) {
+-					selectee.$element.removeClass("ui-unselecting");
+-					selectee.unselecting = false;
+-				}
+-				if (!selectee.selecting) {
+-					selectee.$element.addClass("ui-selecting");
+-					selectee.selecting = true;
+-					// selectable SELECTING callback
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				}
+-			} else {
+-				// UNSELECT
+-				if (selectee.selecting) {
+-					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						selectee.$element.addClass("ui-selected");
+-						selectee.selected = true;
+-					} else {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						if (selectee.startselected) {
+-							selectee.$element.addClass("ui-unselecting");
+-							selectee.unselecting = true;
+-						}
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-				if (selectee.selected) {
+-					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+-						selectee.$element.removeClass("ui-selected");
+-						selectee.selected = false;
+-
+-						selectee.$element.addClass("ui-unselecting");
+-						selectee.unselecting = true;
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-			}
+-		});
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-		var that = this;
+-
+-		this.dragged = false;
+-
+-		$(".ui-unselecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-unselecting");
+-			selectee.unselecting = false;
+-			selectee.startselected = false;
+-			that._trigger("unselected", event, {
+-				unselected: selectee.element
+-			});
+-		});
+-		$(".ui-selecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+-			selectee.selecting = false;
+-			selectee.selected = true;
+-			selectee.startselected = true;
+-			that._trigger("selected", event, {
+-				selected: selectee.element
+-			});
+-		});
+-		this._trigger("stop", event);
+-
+-		this.helper.remove();
+-
+-		return false;
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-/*jshint loopfunc: true */
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-function isFloating(item) {
+-	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+-}
+-
+-$.widget("ui.sortable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "sort",
+-	ready: false,
+-	options: {
+-		appendTo: "parent",
+-		axis: false,
+-		connectWith: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		dropOnEmpty: true,
+-		forcePlaceholderSize: false,
+-		forceHelperSize: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		items: "> *",
+-		opacity: false,
+-		placeholder: false,
+-		revert: false,
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		scope: "default",
+-		tolerance: "intersect",
+-		zIndex: 1000,
+-
+-		// callbacks
+-		activate: null,
+-		beforeStop: null,
+-		change: null,
+-		deactivate: null,
+-		out: null,
+-		over: null,
+-		receive: null,
+-		remove: null,
+-		sort: null,
+-		start: null,
+-		stop: null,
+-		update: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options;
+-		this.containerCache = {};
+-		this.element.addClass("ui-sortable");
+-
+-		//Get the items
+-		this.refresh();
+-
+-		//Let's determine if the items are being displayed horizontally
+-		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
+-
+-		//Let's determine the parent's offset
+-		this.offset = this.element.offset();
+-
+-		//Initialize mouse events for interaction
+-		this._mouseInit();
+-
+-		//We're ready to go
+-		this.ready = true;
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass("ui-sortable ui-sortable-disabled");
+-		this._mouseDestroy();
+-
+-		for ( var i = this.items.length - 1; i >= 0; i-- ) {
+-			this.items[i].item.removeData(this.widgetName + "-item");
+-		}
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value){
+-		if ( key === "disabled" ) {
+-			this.options[ key ] = value;
+-
+-			this.widget().toggleClass( "ui-sortable-disabled", !!value );
+-		} else {
+-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
+-			$.Widget.prototype._setOption.apply(this, arguments);
+-		}
+-	},
+-
+-	_mouseCapture: function(event, overrideHandle) {
+-		var currentItem = null,
+-			validHandle = false,
+-			that = this;
+-
+-		if (this.reverting) {
+-			return false;
+-		}
+-
+-		if(this.options.disabled || this.options.type === "static") {
+-			return false;
+-		}
+-
+-		//We have to refresh the items data once first
+-		this._refreshItems(event);
+-
+-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+-		$(event.target).parents().each(function() {
+-			if($.data(this, that.widgetName + "-item") === that) {
+-				currentItem = $(this);
+-				return false;
+-			}
+-		});
+-		if($.data(event.target, that.widgetName + "-item") === that) {
+-			currentItem = $(event.target);
+-		}
+-
+-		if(!currentItem) {
+-			return false;
+-		}
+-		if(this.options.handle && !overrideHandle) {
+-			$(this.options.handle, currentItem).find("*").addBack().each(function() {
+-				if(this === event.target) {
+-					validHandle = true;
+-				}
+-			});
+-			if(!validHandle) {
+-				return false;
+-			}
+-		}
+-
+-		this.currentItem = currentItem;
+-		this._removeCurrentsFromItems();
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event, overrideHandle, noActivation) {
+-
+-		var i, body,
+-			o = this.options;
+-
+-		this.currentContainer = this;
+-
+-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+-		this.refreshPositions();
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Get the next scrolling parent
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.currentItem.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		// Only after we got the offset, we can change the helper's position to absolute
+-		// TODO: Still need to figure out a way to make relative sorting possible
+-		this.helper.css("position", "absolute");
+-		this.cssPosition = this.helper.css("position");
+-
+-		//Generate the original position
+-		this.originalPosition = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Cache the former DOM position
+-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+-
+-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.currentItem.hide();
+-		}
+-
+-		//Create the placeholder
+-		this._createPlaceholder();
+-
+-		//Set a containment if given in the options
+-		if(o.containment) {
+-			this._setContainment();
+-		}
+-
+-		if( o.cursor && o.cursor !== "auto" ) { // cursor option
+-			body = this.document.find( "body" );
+-
+-			// support: IE
+-			this.storedCursor = body.css( "cursor" );
+-			body.css( "cursor", o.cursor );
+-
+-			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+-		}
+-
+-		if(o.opacity) { // opacity option
+-			if (this.helper.css("opacity")) {
+-				this._storedOpacity = this.helper.css("opacity");
+-			}
+-			this.helper.css("opacity", o.opacity);
+-		}
+-
+-		if(o.zIndex) { // zIndex option
+-			if (this.helper.css("zIndex")) {
+-				this._storedZIndex = this.helper.css("zIndex");
+-			}
+-			this.helper.css("zIndex", o.zIndex);
+-		}
+-
+-		//Prepare scrolling
+-		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-			this.overflowOffset = this.scrollParent.offset();
+-		}
+-
+-		//Call callbacks
+-		this._trigger("start", event, this._uiHash());
+-
+-		//Recache the helper size
+-		if(!this._preserveHelperProportions) {
+-			this._cacheHelperProportions();
+-		}
+-
+-
+-		//Post "activate" events to possible containers
+-		if( !noActivation ) {
+-			for ( i = this.containers.length - 1; i >= 0; i-- ) {
+-				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+-			}
+-		}
+-
+-		//Prepare possible droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-		this.dragging = true;
+-
+-		this.helper.addClass("ui-sortable-helper");
+-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		return true;
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-		var i, item, itemElement, intersection,
+-			o = this.options,
+-			scrolled = false;
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		if (!this.lastPositionAbs) {
+-			this.lastPositionAbs = this.positionAbs;
+-		}
+-
+-		//Do scrolling
+-		if(this.options.scroll) {
+-			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-
+-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-
+-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-
+-			} else {
+-
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-
+-			}
+-
+-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-				$.ui.ddmanager.prepareOffsets(this, event);
+-			}
+-		}
+-
+-		//Regenerate the absolute position used for position checks
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Set the helper position
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-
+-		//Rearrange
+-		for (i = this.items.length - 1; i >= 0; i--) {
+-
+-			//Cache variables and intersection, continue if no intersection
+-			item = this.items[i];
+-			itemElement = item.item[0];
+-			intersection = this._intersectsWithPointer(item);
+-			if (!intersection) {
+-				continue;
+-			}
+-
+-			// Only put the placeholder inside the current Container, skip all
+-			// items form other containers. This works because when moving
+-			// an item from one container to another the
+-			// currentContainer is switched before the placeholder is moved.
+-			//
+-			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
+-			// beetween the outer and inner container.
+-			if (item.instance !== this.currentContainer) {
+-				continue;
+-			}
+-
+-			// cannot intersect with itself
+-			// no useless actions that have been done before
+-			// no action if the item moved is the parent of the item checked
+-			if (itemElement !== this.currentItem[0] &&
+-				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+-				!$.contains(this.placeholder[0], itemElement) &&
+-				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+-			) {
+-
+-				this.direction = intersection === 1 ? "down" : "up";
+-
+-				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+-					this._rearrange(event, item);
+-				} else {
+-					break;
+-				}
+-
+-				this._trigger("change", event, this._uiHash());
+-				break;
+-			}
+-		}
+-
+-		//Post events to containers
+-		this._contactContainers(event);
+-
+-		//Interconnect with droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		//Call callbacks
+-		this._trigger("sort", event, this._uiHash());
+-
+-		this.lastPositionAbs = this.positionAbs;
+-		return false;
+-
+-	},
+-
+-	_mouseStop: function(event, noPropagation) {
+-
+-		if(!event) {
+-			return;
+-		}
+-
+-		//If we are using droppables, inform the manager about the drop
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			$.ui.ddmanager.drop(this, event);
+-		}
+-
+-		if(this.options.revert) {
+-			var that = this,
+-				cur = this.placeholder.offset(),
+-				axis = this.options.axis,
+-				animation = {};
+-
+-			if ( !axis || axis === "x" ) {
+-				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
+-			}
+-			if ( !axis || axis === "y" ) {
+-				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
+-			}
+-			this.reverting = true;
+-			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+-				that._clear(event);
+-			});
+-		} else {
+-			this._clear(event, noPropagation);
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.dragging) {
+-
+-			this._mouseUp({ target: null });
+-
+-			if(this.options.helper === "original") {
+-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-			} else {
+-				this.currentItem.show();
+-			}
+-
+-			//Post deactivating events to containers
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", null, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		if (this.placeholder) {
+-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-			if(this.placeholder[0].parentNode) {
+-				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-			}
+-			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+-				this.helper.remove();
+-			}
+-
+-			$.extend(this, {
+-				helper: null,
+-				dragging: false,
+-				reverting: false,
+-				_noFinalSort: null
+-			});
+-
+-			if(this.domPosition.prev) {
+-				$(this.domPosition.prev).after(this.currentItem);
+-			} else {
+-				$(this.domPosition.parent).prepend(this.currentItem);
+-			}
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	serialize: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			str = [];
+-		o = o || {};
+-
+-		$(items).each(function() {
+-			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+-			if (res) {
+-				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+-			}
+-		});
+-
+-		if(!str.length && o.key) {
+-			str.push(o.key + "=");
+-		}
+-
+-		return str.join("&");
+-
+-	},
+-
+-	toArray: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			ret = [];
+-
+-		o = o || {};
+-
+-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+-		return ret;
+-
+-	},
+-
+-	/* Be careful with the following core functions */
+-	_intersectsWith: function(item) {
+-
+-		var x1 = this.positionAbs.left,
+-			x2 = x1 + this.helperProportions.width,
+-			y1 = this.positionAbs.top,
+-			y2 = y1 + this.helperProportions.height,
+-			l = item.left,
+-			r = l + item.width,
+-			t = item.top,
+-			b = t + item.height,
+-			dyClick = this.offset.click.top,
+-			dxClick = this.offset.click.left,
+-			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+-			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+-			isOverElement = isOverElementHeight && isOverElementWidth;
+-
+-		if ( this.options.tolerance === "pointer" ||
+-			this.options.forcePointerForContainers ||
+-			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+-		) {
+-			return isOverElement;
+-		} else {
+-
+-			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+-				x2 - (this.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+-				y2 - (this.helperProportions.height / 2) < b ); // Top Half
+-
+-		}
+-	},
+-
+-	_intersectsWithPointer: function(item) {
+-
+-		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+-			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+-			isOverElement = isOverElementHeight && isOverElementWidth,
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (!isOverElement) {
+-			return false;
+-		}
+-
+-		return this.floating ?
+-			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+-			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+-
+-	},
+-
+-	_intersectsWithSides: function(item) {
+-
+-		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+-			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (this.floating && horizontalDirection) {
+-			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+-		} else {
+-			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+-		}
+-
+-	},
+-
+-	_getDragVerticalDirection: function() {
+-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+-		return delta !== 0 && (delta > 0 ? "down" : "up");
+-	},
+-
+-	_getDragHorizontalDirection: function() {
+-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+-		return delta !== 0 && (delta > 0 ? "right" : "left");
+-	},
+-
+-	refresh: function(event) {
+-		this._refreshItems(event);
+-		this.refreshPositions();
+-		return this;
+-	},
+-
+-	_connectWith: function() {
+-		var options = this.options;
+-		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+-	},
+-
+-	_getItemsAsjQuery: function(connected) {
+-
+-		var i, j, cur, inst,
+-			items = [],
+-			queries = [],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && connected) {
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for ( j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+-					}
+-				}
+-			}
+-		}
+-
+-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+-
+-		for (i = queries.length - 1; i >= 0; i--){
+-			queries[i][0].each(function() {
+-				items.push(this);
+-			});
+-		}
+-
+-		return $(items);
+-
+-	},
+-
+-	_removeCurrentsFromItems: function() {
+-
+-		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+-
+-		this.items = $.grep(this.items, function (item) {
+-			for (var j=0; j < list.length; j++) {
+-				if(list[j] === item.item[0]) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		});
+-
+-	},
+-
+-	_refreshItems: function(event) {
+-
+-		this.items = [];
+-		this.containers = [this];
+-
+-		var i, j, cur, inst, targetData, _queries, item, queriesLength,
+-			items = this.items,
+-			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for (j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+-						this.containers.push(inst);
+-					}
+-				}
+-			}
+-		}
+-
+-		for (i = queries.length - 1; i >= 0; i--) {
+-			targetData = queries[i][1];
+-			_queries = queries[i][0];
+-
+-			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+-				item = $(_queries[j]);
+-
+-				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+-
+-				items.push({
+-					item: item,
+-					instance: targetData,
+-					width: 0, height: 0,
+-					left: 0, top: 0
+-				});
+-			}
+-		}
+-
+-	},
+-
+-	refreshPositions: function(fast) {
+-
+-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+-		if(this.offsetParent && this.helper) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		var i, item, t, p;
+-
+-		for (i = this.items.length - 1; i >= 0; i--){
+-			item = this.items[i];
+-
+-			//We ignore calculating positions of all connected containers when we're not over them
+-			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+-				continue;
+-			}
+-
+-			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+-
+-			if (!fast) {
+-				item.width = t.outerWidth();
+-				item.height = t.outerHeight();
+-			}
+-
+-			p = t.offset();
+-			item.left = p.left;
+-			item.top = p.top;
+-		}
+-
+-		if(this.options.custom && this.options.custom.refreshContainers) {
+-			this.options.custom.refreshContainers.call(this);
+-		} else {
+-			for (i = this.containers.length - 1; i >= 0; i--){
+-				p = this.containers[i].element.offset();
+-				this.containers[i].containerCache.left = p.left;
+-				this.containers[i].containerCache.top = p.top;
+-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
+-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	_createPlaceholder: function(that) {
+-		that = that || this;
+-		var className,
+-			o = that.options;
+-
+-		if(!o.placeholder || o.placeholder.constructor === String) {
+-			className = o.placeholder;
+-			o.placeholder = {
+-				element: function() {
+-
+-					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+-						element = $( "<" + nodeName + ">", that.document[0] )
+-							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+-							.removeClass("ui-sortable-helper");
+-
+-					if ( nodeName === "tr" ) {
+-						that.currentItem.children().each(function() {
+-							$( "<td>&#160;</td>", that.document[0] )
+-								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+-								.appendTo( element );
+-						});
+-					} else if ( nodeName === "img" ) {
+-						element.attr( "src", that.currentItem.attr( "src" ) );
+-					}
+-
+-					if ( !className ) {
+-						element.css( "visibility", "hidden" );
+-					}
+-
+-					return element;
+-				},
+-				update: function(container, p) {
+-
+-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+-					if(className && !o.forcePlaceholderSize) {
+-						return;
+-					}
+-
+-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+-					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+-					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+-				}
+-			};
+-		}
+-
+-		//Create the placeholder
+-		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+-
+-		//Append it after the actual current item
+-		that.currentItem.after(that.placeholder);
+-
+-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+-		o.placeholder.update(that, that.placeholder);
+-
+-	},
+-
+-	_contactContainers: function(event) {
+-		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
+-			innermostContainer = null,
+-			innermostIndex = null;
+-
+-		// get innermost container that intersects with item
+-		for (i = this.containers.length - 1; i >= 0; i--) {
+-
+-			// never consider a container that's located within the item itself
+-			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+-				continue;
+-			}
+-
+-			if(this._intersectsWith(this.containers[i].containerCache)) {
+-
+-				// if we've already found a container and it's more "inner" than this, then continue
+-				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+-					continue;
+-				}
+-
+-				innermostContainer = this.containers[i];
+-				innermostIndex = i;
+-
+-			} else {
+-				// container doesn't intersect. trigger "out" event if necessary
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", event, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		// if no intersecting containers found, return
+-		if(!innermostContainer) {
+-			return;
+-		}
+-
+-		// move the item into the container if it's not there already
+-		if(this.containers.length === 1) {
+-			if (!this.containers[innermostIndex].containerCache.over) {
+-				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-				this.containers[innermostIndex].containerCache.over = 1;
+-			}
+-		} else {
+-
+-			//When entering a new container, we will find the item with the least distance and append our item near it
+-			dist = 10000;
+-			itemWithLeastDistance = null;
+-			floating = innermostContainer.floating || isFloating(this.currentItem);
+-			posProperty = floating ? "left" : "top";
+-			sizeProperty = floating ? "width" : "height";
+-			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
+-			for (j = this.items.length - 1; j >= 0; j--) {
+-				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+-					continue;
+-				}
+-				if(this.items[j].item[0] === this.currentItem[0]) {
+-					continue;
+-				}
+-				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
+-					continue;
+-				}
+-				cur = this.items[j].item.offset()[posProperty];
+-				nearBottom = false;
+-				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+-					nearBottom = true;
+-					cur += this.items[j][sizeProperty];
+-				}
+-
+-				if(Math.abs(cur - base) < dist) {
+-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+-					this.direction = nearBottom ? "up": "down";
+-				}
+-			}
+-
+-			//Check if dropOnEmpty is enabled
+-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+-				return;
+-			}
+-
+-			if(this.currentContainer === this.containers[innermostIndex]) {
+-				return;
+-			}
+-
+-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+-			this._trigger("change", event, this._uiHash());
+-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+-			this.currentContainer = this.containers[innermostIndex];
+-
+-			//Update the placeholder
+-			this.options.placeholder.update(this.currentContainer, this.placeholder);
+-
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		}
+-
+-
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+-
+-		//Add the helper to the DOM if that didn't happen already
+-		if(!helper.parents("body").length) {
+-			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+-		}
+-
+-		if(helper[0] === this.currentItem[0]) {
+-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+-		}
+-
+-		if(!helper[0].style.width || o.forceHelperSize) {
+-			helper.width(this.currentItem.width());
+-		}
+-		if(!helper[0].style.height || o.forceHelperSize) {
+-			helper.height(this.currentItem.height());
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		// This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		// with an ugly IE fix
+-		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.currentItem.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var ce, co, over,
+-			o = this.options;
+-		if(o.containment === "parent") {
+-			o.containment = this.helper[0].parentNode;
+-		}
+-		if(o.containment === "document" || o.containment === "window") {
+-			this.containment = [
+-				0 - this.offset.relative.left - this.offset.parent.left,
+-				0 - this.offset.relative.top - this.offset.parent.top,
+-				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
+-				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment)) {
+-			ce = $(o.containment)[0];
+-			co = $(o.containment).offset();
+-			over = ($(ce).css("overflow") !== "hidden");
+-
+-			this.containment = [
+-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+-			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var top, left,
+-			o = this.options,
+-			pageX = event.pageX,
+-			pageY = event.pageY,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		// This is another very weird special case that only happens for relative elements:
+-		// 1. If the css position is relative
+-		// 2. and the scroll parent is the document or similar to the offset parent
+-		// we have to refresh the relative offset during the scroll so there are no jumps
+-		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+-			this.offset.relative = this._getRelativeOffset();
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-
+-			if(this.containment) {
+-				if(event.pageX - this.offset.click.left < this.containment[0]) {
+-					pageX = this.containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < this.containment[1]) {
+-					pageY = this.containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > this.containment[2]) {
+-					pageX = this.containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > this.containment[3]) {
+-					pageY = this.containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+-				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+-				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																// The absolute mouse position
+-				this.offset.click.top -													// Click offset (relative to the element)
+-				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX -																// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_rearrange: function(event, i, a, hardRefresh) {
+-
+-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+-
+-		//Various things done here to improve the performance:
+-		// 1. we create a setTimeout, that calls refreshPositions
+-		// 2. on the instance, we have a counter variable, that get's higher after every append
+-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+-		// 4. this lets only the last addition to the timeout stack through
+-		this.counter = this.counter ? ++this.counter : 1;
+-		var counter = this.counter;
+-
+-		this._delay(function() {
+-			if(counter === this.counter) {
+-				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+-			}
+-		});
+-
+-	},
+-
+-	_clear: function(event, noPropagation) {
+-
+-		this.reverting = false;
+-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+-		// everything else normalized again
+-		var i,
+-			delayedTriggers = [];
+-
+-		// We first have to update the dom position of the actual currentItem
+-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+-		if(!this._noFinalSort && this.currentItem.parent().length) {
+-			this.placeholder.before(this.currentItem);
+-		}
+-		this._noFinalSort = null;
+-
+-		if(this.helper[0] === this.currentItem[0]) {
+-			for(i in this._storedCSS) {
+-				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+-					this._storedCSS[i] = "";
+-				}
+-			}
+-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-		} else {
+-			this.currentItem.show();
+-		}
+-
+-		if(this.fromOutside && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+-		}
+-		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+-		}
+-
+-		// Check if the items Container has Changed and trigger appropriate
+-		// events.
+-		if (this !== this.currentContainer) {
+-			if(!noPropagation) {
+-				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
+-			}
+-		}
+-
+-
+-		//Post events to containers
+-		for (i = this.containers.length - 1; i >= 0; i--){
+-			if(!noPropagation) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-			}
+-			if(this.containers[i].containerCache.over) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-				this.containers[i].containerCache.over = 0;
+-			}
+-		}
+-
+-		//Do what was originally in plugins
+-		if ( this.storedCursor ) {
+-			this.document.find( "body" ).css( "cursor", this.storedCursor );
+-			this.storedStylesheet.remove();
+-		}
+-		if(this._storedOpacity) {
+-			this.helper.css("opacity", this._storedOpacity);
+-		}
+-		if(this._storedZIndex) {
+-			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+-		}
+-
+-		this.dragging = false;
+-		if(this.cancelHelperRemoval) {
+-			if(!noPropagation) {
+-				this._trigger("beforeStop", event, this._uiHash());
+-				for (i=0; i < delayedTriggers.length; i++) {
+-					delayedTriggers[i].call(this, event);
+-				} //Trigger all delayed events
+-				this._trigger("stop", event, this._uiHash());
+-			}
+-
+-			this.fromOutside = false;
+-			return false;
+-		}
+-
+-		if(!noPropagation) {
+-			this._trigger("beforeStop", event, this._uiHash());
+-		}
+-
+-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-
+-		if(!noPropagation) {
+-			for (i=0; i < delayedTriggers.length; i++) {
+-				delayedTriggers[i].call(this, event);
+-			} //Trigger all delayed events
+-			this._trigger("stop", event, this._uiHash());
+-		}
+-
+-		this.fromOutside = false;
+-		return true;
+-
+-	},
+-
+-	_trigger: function() {
+-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+-			this.cancel();
+-		}
+-	},
+-
+-	_uiHash: function(_inst) {
+-		var inst = _inst || this;
+-		return {
+-			helper: inst.helper,
+-			placeholder: inst.placeholder || $([]),
+-			position: inst.position,
+-			originalPosition: inst.originalPosition,
+-			offset: inst.positionAbs,
+-			item: inst.currentItem,
+-			sender: _inst ? _inst.element : null
+-		};
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var uid = 0,
+-	hideProps = {},
+-	showProps = {};
+-
+-hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
+-	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
+-showProps.height = showProps.paddingTop = showProps.paddingBottom =
+-	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
+-
+-$.widget( "ui.accordion", {
+-	version: "1.10.3",
+-	options: {
+-		active: 0,
+-		animate: {},
+-		collapsible: false,
+-		event: "click",
+-		header: "> li > :first-child,> :not(li):even",
+-		heightStyle: "auto",
+-		icons: {
+-			activeHeader: "ui-icon-triangle-1-s",
+-			header: "ui-icon-triangle-1-e"
+-		},
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null
+-	},
+-
+-	_create: function() {
+-		var options = this.options;
+-		this.prevShow = this.prevHide = $();
+-		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+-			// ARIA
+-			.attr( "role", "tablist" );
+-
+-		// don't allow collapsible: false and active: false / null
+-		if ( !options.collapsible && (options.active === false || options.active == null) ) {
+-			options.active = 0;
+-		}
+-
+-		this._processPanels();
+-		// handle negative values
+-		if ( options.active < 0 ) {
+-			options.active += this.headers.length;
+-		}
+-		this._refresh();
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			header: this.active,
+-			panel: !this.active.length ? $() : this.active.next(),
+-			content: !this.active.length ? $() : this.active.next()
+-		};
+-	},
+-
+-	_createIcons: function() {
+-		var icons = this.options.icons;
+-		if ( icons ) {
+-			$( "<span>" )
+-				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+-				.prependTo( this.headers );
+-			this.active.children( ".ui-accordion-header-icon" )
+-				.removeClass( icons.header )
+-				.addClass( icons.activeHeader );
+-			this.headers.addClass( "ui-accordion-icons" );
+-		}
+-	},
+-
+-	_destroyIcons: function() {
+-		this.headers
+-			.removeClass( "ui-accordion-icons" )
+-			.children( ".ui-accordion-header-icon" )
+-				.remove();
+-	},
+-
+-	_destroy: function() {
+-		var contents;
+-
+-		// clean up main element
+-		this.element
+-			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+-			.removeAttr( "role" );
+-
+-		// clean up headers
+-		this.headers
+-			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-selected" )
+-			.removeAttr( "aria-controls" )
+-			.removeAttr( "tabIndex" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		this._destroyIcons();
+-
+-		// clean up content panels
+-		contents = this.headers.next()
+-			.css( "display", "" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-expanded" )
+-			.removeAttr( "aria-hidden" )
+-			.removeAttr( "aria-labelledby" )
+-			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		if ( this.options.heightStyle !== "content" ) {
+-			contents.css( "height", "" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "event" ) {
+-			if ( this.options.event ) {
+-				this._off( this.headers, this.options.event );
+-			}
+-			this._setupEvents( value );
+-		}
+-
+-		this._super( key, value );
+-
+-		// setting collapsible: false while collapsed; open first panel
+-		if ( key === "collapsible" && !value && this.options.active === false ) {
+-			this._activate( 0 );
+-		}
+-
+-		if ( key === "icons" ) {
+-			this._destroyIcons();
+-			if ( value ) {
+-				this._createIcons();
+-			}
+-		}
+-
+-		// #5332 - opacity doesn't cascade to positioned elements in IE
+-		// so we need to add the disabled class to the headers and panels
+-		if ( key === "disabled" ) {
+-			this.headers.add( this.headers.next() )
+-				.toggleClass( "ui-state-disabled", !!value );
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		if ( event.altKey || event.ctrlKey ) {
+-			return;
+-		}
+-
+-		var keyCode = $.ui.keyCode,
+-			length = this.headers.length,
+-			currentIndex = this.headers.index( event.target ),
+-			toFocus = false;
+-
+-		switch ( event.keyCode ) {
+-			case keyCode.RIGHT:
+-			case keyCode.DOWN:
+-				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+-				break;
+-			case keyCode.LEFT:
+-			case keyCode.UP:
+-				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+-				break;
+-			case keyCode.SPACE:
+-			case keyCode.ENTER:
+-				this._eventHandler( event );
+-				break;
+-			case keyCode.HOME:
+-				toFocus = this.headers[ 0 ];
+-				break;
+-			case keyCode.END:
+-				toFocus = this.headers[ length - 1 ];
+-				break;
+-		}
+-
+-		if ( toFocus ) {
+-			$( event.target ).attr( "tabIndex", -1 );
+-			$( toFocus ).attr( "tabIndex", 0 );
+-			toFocus.focus();
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_panelKeyDown : function( event ) {
+-		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+-			$( event.currentTarget ).prev().focus();
+-		}
+-	},
+-
+-	refresh: function() {
+-		var options = this.options;
+-		this._processPanels();
+-
+-		// was collapsed or no panel
+-		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// active false only when collapsible is true
+-		} else if ( options.active === false ) {
+-			this._activate( 0 );
+-		// was active, but active panel is gone
+-		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining panel are disabled
+-			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous panel
+-			} else {
+-				this._activate( Math.max( 0, options.active - 1 ) );
+-			}
+-		// was active, active panel still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.headers.index( this.active );
+-		}
+-
+-		this._destroyIcons();
+-
+-		this._refresh();
+-	},
+-
+-	_processPanels: function() {
+-		this.headers = this.element.find( this.options.header )
+-			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+-
+-		this.headers.next()
+-			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+-			.filter(":not(.ui-accordion-content-active)")
+-			.hide();
+-	},
+-
+-	_refresh: function() {
+-		var maxHeight,
+-			options = this.options,
+-			heightStyle = options.heightStyle,
+-			parent = this.element.parent(),
+-			accordionId = this.accordionId = "ui-accordion-" +
+-				(this.element.attr( "id" ) || ++uid);
+-
+-		this.active = this._findActive( options.active )
+-			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+-			.removeClass( "ui-corner-all" );
+-		this.active.next()
+-			.addClass( "ui-accordion-content-active" )
+-			.show();
+-
+-		this.headers
+-			.attr( "role", "tab" )
+-			.each(function( i ) {
+-				var header = $( this ),
+-					headerId = header.attr( "id" ),
+-					panel = header.next(),
+-					panelId = panel.attr( "id" );
+-				if ( !headerId ) {
+-					headerId = accordionId + "-header-" + i;
+-					header.attr( "id", headerId );
+-				}
+-				if ( !panelId ) {
+-					panelId = accordionId + "-panel-" + i;
+-					panel.attr( "id", panelId );
+-				}
+-				header.attr( "aria-controls", panelId );
+-				panel.attr( "aria-labelledby", headerId );
+-			})
+-			.next()
+-				.attr( "role", "tabpanel" );
+-
+-		this.headers
+-			.not( this.active )
+-			.attr({
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "false",
+-					"aria-hidden": "true"
+-				})
+-				.hide();
+-
+-		// make sure at least one header is in the tab order
+-		if ( !this.active.length ) {
+-			this.headers.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active.attr({
+-				"aria-selected": "true",
+-				tabIndex: 0
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-
+-		this._createIcons();
+-
+-		this._setupEvents( options.event );
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.headers.each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.headers.next()
+-				.each(function() {
+-					$( this ).height( Math.max( 0, maxHeight -
+-						$( this ).innerHeight() + $( this ).height() ) );
+-				})
+-				.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.headers.next()
+-				.each(function() {
+-					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+-				})
+-				.height( maxHeight );
+-		}
+-	},
+-
+-	_activate: function( index ) {
+-		var active = this._findActive( index )[ 0 ];
+-
+-		// trying to activate the already active panel
+-		if ( active === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the currently active header
+-		active = active || this.active[ 0 ];
+-
+-		this._eventHandler({
+-			target: active,
+-			currentTarget: active,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( selector ) {
+-		return typeof selector === "number" ? this.headers.eq( selector ) : $();
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			keydown: "_keydown"
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.headers.add( this.headers.next() ) );
+-		this._on( this.headers, events );
+-		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+-		this._hoverable( this.headers );
+-		this._focusable( this.headers );
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			clicked = $( event.currentTarget ),
+-			clickedIsActive = clicked[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : clicked.next(),
+-			toHide = active.next(),
+-			eventData = {
+-				oldHeader: active,
+-				oldPanel: toHide,
+-				newHeader: collapsing ? $() : clicked,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if (
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.headers.index( clicked );
+-
+-		// when the call to ._toggle() comes after the class changes
+-		// it causes a very odd bug in IE 8 (see #6720)
+-		this.active = clickedIsActive ? $() : clicked;
+-		this._toggle( eventData );
+-
+-		// switch classes
+-		// corner classes on the previously active header stay after the animation
+-		active.removeClass( "ui-accordion-header-active ui-state-active" );
+-		if ( options.icons ) {
+-			active.children( ".ui-accordion-header-icon" )
+-				.removeClass( options.icons.activeHeader )
+-				.addClass( options.icons.header );
+-		}
+-
+-		if ( !clickedIsActive ) {
+-			clicked
+-				.removeClass( "ui-corner-all" )
+-				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+-			if ( options.icons ) {
+-				clicked.children( ".ui-accordion-header-icon" )
+-					.removeClass( options.icons.header )
+-					.addClass( options.icons.activeHeader );
+-			}
+-
+-			clicked
+-				.next()
+-				.addClass( "ui-accordion-content-active" );
+-		}
+-	},
+-
+-	_toggle: function( data ) {
+-		var toShow = data.newPanel,
+-			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+-
+-		// handle activating a panel during the animation for another activation
+-		this.prevShow.add( this.prevHide ).stop( true, true );
+-		this.prevShow = toShow;
+-		this.prevHide = toHide;
+-
+-		if ( this.options.animate ) {
+-			this._animate( toShow, toHide, data );
+-		} else {
+-			toHide.hide();
+-			toShow.show();
+-			this._toggleComplete( data );
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		toHide.prev().attr( "aria-selected", "false" );
+-		// if we're switching panels, remove the old header from the tab order
+-		// if we're opening from collapsed state, remove the previous header from the tab order
+-		// if we're collapsing, then keep the collapsing header in the tab order
+-		if ( toShow.length && toHide.length ) {
+-			toHide.prev().attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.headers.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow
+-			.attr({
+-				"aria-expanded": "true",
+-				"aria-hidden": "false"
+-			})
+-			.prev()
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-	},
+-
+-	_animate: function( toShow, toHide, data ) {
+-		var total, easing, duration,
+-			that = this,
+-			adjust = 0,
+-			down = toShow.length &&
+-				( !toHide.length || ( toShow.index() < toHide.index() ) ),
+-			animate = this.options.animate || {},
+-			options = down && animate.down || animate,
+-			complete = function() {
+-				that._toggleComplete( data );
+-			};
+-
+-		if ( typeof options === "number" ) {
+-			duration = options;
+-		}
+-		if ( typeof options === "string" ) {
+-			easing = options;
+-		}
+-		// fall back from options to animation in case of partial down settings
+-		easing = easing || options.easing || animate.easing;
+-		duration = duration || options.duration || animate.duration;
+-
+-		if ( !toHide.length ) {
+-			return toShow.animate( showProps, duration, easing, complete );
+-		}
+-		if ( !toShow.length ) {
+-			return toHide.animate( hideProps, duration, easing, complete );
+-		}
+-
+-		total = toShow.show().outerHeight();
+-		toHide.animate( hideProps, {
+-			duration: duration,
+-			easing: easing,
+-			step: function( now, fx ) {
+-				fx.now = Math.round( now );
+-			}
+-		});
+-		toShow
+-			.hide()
+-			.animate( showProps, {
+-				duration: duration,
+-				easing: easing,
+-				complete: complete,
+-				step: function( now, fx ) {
+-					fx.now = Math.round( now );
+-					if ( fx.prop !== "height" ) {
+-						adjust += fx.now;
+-					} else if ( that.options.heightStyle !== "content" ) {
+-						fx.now = Math.round( total - toHide.outerHeight() - adjust );
+-						adjust = 0;
+-					}
+-				}
+-			});
+-	},
+-
+-	_toggleComplete: function( data ) {
+-		var toHide = data.oldPanel;
+-
+-		toHide
+-			.removeClass( "ui-accordion-content-active" )
+-			.prev()
+-				.removeClass( "ui-corner-top" )
+-				.addClass( "ui-corner-all" );
+-
+-		// Work around for rendering bug in IE (#5421)
+-		if ( toHide.length ) {
+-			toHide.parent()[0].className = toHide.parent()[0].className;
+-		}
+-
+-		this._trigger( "activate", null, data );
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-// used to prevent race conditions with remote data sources
+-var requestIndex = 0;
+-
+-$.widget( "ui.autocomplete", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	options: {
+-		appendTo: null,
+-		autoFocus: false,
+-		delay: 300,
+-		minLength: 1,
+-		position: {
+-			my: "left top",
+-			at: "left bottom",
+-			collision: "none"
+-		},
+-		source: null,
+-
+-		// callbacks
+-		change: null,
+-		close: null,
+-		focus: null,
+-		open: null,
+-		response: null,
+-		search: null,
+-		select: null
+-	},
+-
+-	pending: 0,
+-
+-	_create: function() {
+-		// Some browsers only repeat keydown events, not keypress events,
+-		// so we use the suppressKeyPress flag to determine if we've already
+-		// handled the keydown event. #7269
+-		// Unfortunately the code for & in keypress is the same as the up arrow,
+-		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
+-		// events when we know the keydown event was used to modify the
+-		// search term. #7799
+-		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+-			nodeName = this.element[0].nodeName.toLowerCase(),
+-			isTextarea = nodeName === "textarea",
+-			isInput = nodeName === "input";
+-
+-		this.isMultiLine =
+-			// Textareas are always multi-line
+-			isTextarea ? true :
+-			// Inputs are always single-line, even if inside a contentEditable element
+-			// IE also treats inputs as contentEditable
+-			isInput ? false :
+-			// All other element types are determined by whether or not they're contentEditable
+-			this.element.prop( "isContentEditable" );
+-
+-		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+-		this.isNewMenu = true;
+-
+-		this.element
+-			.addClass( "ui-autocomplete-input" )
+-			.attr( "autocomplete", "off" );
+-
+-		this._on( this.element, {
+-			keydown: function( event ) {
+-				/*jshint maxcomplexity:15*/
+-				if ( this.element.prop( "readOnly" ) ) {
+-					suppressKeyPress = true;
+-					suppressInput = true;
+-					suppressKeyPressRepeat = true;
+-					return;
+-				}
+-
+-				suppressKeyPress = false;
+-				suppressInput = false;
+-				suppressKeyPressRepeat = false;
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					suppressKeyPress = true;
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					suppressKeyPress = true;
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					suppressKeyPress = true;
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					suppressKeyPress = true;
+-					this._keyEvent( "next", event );
+-					break;
+-				case keyCode.ENTER:
+-				case keyCode.NUMPAD_ENTER:
+-					// when menu is open and has focus
+-					if ( this.menu.active ) {
+-						// #6055 - Opera still allows the keypress to occur
+-						// which causes forms to submit
+-						suppressKeyPress = true;
+-						event.preventDefault();
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.TAB:
+-					if ( this.menu.active ) {
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.ESCAPE:
+-					if ( this.menu.element.is( ":visible" ) ) {
+-						this._value( this.term );
+-						this.close( event );
+-						// Different browsers have different default behavior for escape
+-						// Single press can mean undo or clear
+-						// Double press in IE means clear the whole form
+-						event.preventDefault();
+-					}
+-					break;
+-				default:
+-					suppressKeyPressRepeat = true;
+-					// search timeout should be triggered before the input value is changed
+-					this._searchTimeout( event );
+-					break;
+-				}
+-			},
+-			keypress: function( event ) {
+-				if ( suppressKeyPress ) {
+-					suppressKeyPress = false;
+-					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-						event.preventDefault();
+-					}
+-					return;
+-				}
+-				if ( suppressKeyPressRepeat ) {
+-					return;
+-				}
+-
+-				// replicate some key handlers to allow them to repeat in Firefox and Opera
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					this._keyEvent( "next", event );
+-					break;
+-				}
+-			},
+-			input: function( event ) {
+-				if ( suppressInput ) {
+-					suppressInput = false;
+-					event.preventDefault();
+-					return;
+-				}
+-				this._searchTimeout( event );
+-			},
+-			focus: function() {
+-				this.selectedItem = null;
+-				this.previous = this._value();
+-			},
+-			blur: function( event ) {
+-				if ( this.cancelBlur ) {
+-					delete this.cancelBlur;
+-					return;
+-				}
+-
+-				clearTimeout( this.searching );
+-				this.close( event );
+-				this._change( event );
+-			}
+-		});
+-
+-		this._initSource();
+-		this.menu = $( "<ul>" )
+-			.addClass( "ui-autocomplete ui-front" )
+-			.appendTo( this._appendTo() )
+-			.menu({
+-				// disable ARIA support, the live region takes care of that
+-				role: null
+-			})
+-			.hide()
+-			.data( "ui-menu" );
+-
+-		this._on( this.menu.element, {
+-			mousedown: function( event ) {
+-				// prevent moving focus out of the text field
+-				event.preventDefault();
+-
+-				// IE doesn't prevent moving focus even with event.preventDefault()
+-				// so we set a flag to know when we should ignore the blur event
+-				this.cancelBlur = true;
+-				this._delay(function() {
+-					delete this.cancelBlur;
+-				});
+-
+-				// clicking on the scrollbar causes focus to shift to the body
+-				// but we can't detect a mouseup or a click immediately afterward
+-				// so we have to track the next mousedown and close the menu if
+-				// the user clicks somewhere outside of the autocomplete
+-				var menuElement = this.menu.element[ 0 ];
+-				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+-					this._delay(function() {
+-						var that = this;
+-						this.document.one( "mousedown", function( event ) {
+-							if ( event.target !== that.element[ 0 ] &&
+-									event.target !== menuElement &&
+-									!$.contains( menuElement, event.target ) ) {
+-								that.close();
+-							}
+-						});
+-					});
+-				}
+-			},
+-			menufocus: function( event, ui ) {
+-				// support: Firefox
+-				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
+-				if ( this.isNewMenu ) {
+-					this.isNewMenu = false;
+-					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+-						this.menu.blur();
+-
+-						this.document.one( "mousemove", function() {
+-							$( event.target ).trigger( event.originalEvent );
+-						});
+-
+-						return;
+-					}
+-				}
+-
+-				var item = ui.item.data( "ui-autocomplete-item" );
+-				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+-					// use value to match what will end up in the input, if it was a key event
+-					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+-						this._value( item.value );
+-					}
+-				} else {
+-					// Normally the input is populated with the item's value as the
+-					// menu is navigated, causing screen readers to notice a change and
+-					// announce the item. Since the focus event was canceled, this doesn't
+-					// happen, so we update the live region so that screen readers can
+-					// still notice the change and announce it.
+-					this.liveRegion.text( item.value );
+-				}
+-			},
+-			menuselect: function( event, ui ) {
+-				var item = ui.item.data( "ui-autocomplete-item" ),
+-					previous = this.previous;
+-
+-				// only trigger when focus was lost (click on menu)
+-				if ( this.element[0] !== this.document[0].activeElement ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// #6109 - IE triggers two focus events and the second
+-					// is asynchronous, so we need to reset the previous
+-					// term synchronously and asynchronously :-(
+-					this._delay(function() {
+-						this.previous = previous;
+-						this.selectedItem = item;
+-					});
+-				}
+-
+-				if ( false !== this._trigger( "select", event, { item: item } ) ) {
+-					this._value( item.value );
+-				}
+-				// reset the term after the select event
+-				// this allows custom select handling to work properly
+-				this.term = this._value();
+-
+-				this.close( event );
+-				this.selectedItem = item;
+-			}
+-		});
+-
+-		this.liveRegion = $( "<span>", {
+-				role: "status",
+-				"aria-live": "polite"
+-			})
+-			.addClass( "ui-helper-hidden-accessible" )
+-			.insertBefore( this.element );
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		clearTimeout( this.searching );
+-		this.element
+-			.removeClass( "ui-autocomplete-input" )
+-			.removeAttr( "autocomplete" );
+-		this.menu.element.remove();
+-		this.liveRegion.remove();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "source" ) {
+-			this._initSource();
+-		}
+-		if ( key === "appendTo" ) {
+-			this.menu.element.appendTo( this._appendTo() );
+-		}
+-		if ( key === "disabled" && value && this.xhr ) {
+-			this.xhr.abort();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-
+-		if ( element ) {
+-			element = element.jquery || element.nodeType ?
+-				$( element ) :
+-				this.document.find( element ).eq( 0 );
+-		}
+-
+-		if ( !element ) {
+-			element = this.element.closest( ".ui-front" );
+-		}
+-
+-		if ( !element.length ) {
+-			element = this.document[0].body;
+-		}
+-
+-		return element;
+-	},
+-
+-	_initSource: function() {
+-		var array, url,
+-			that = this;
+-		if ( $.isArray(this.options.source) ) {
+-			array = this.options.source;
+-			this.source = function( request, response ) {
+-				response( $.ui.autocomplete.filter( array, request.term ) );
+-			};
+-		} else if ( typeof this.options.source === "string" ) {
+-			url = this.options.source;
+-			this.source = function( request, response ) {
+-				if ( that.xhr ) {
+-					that.xhr.abort();
+-				}
+-				that.xhr = $.ajax({
+-					url: url,
+-					data: request,
+-					dataType: "json",
+-					success: function( data ) {
+-						response( data );
+-					},
+-					error: function() {
+-						response( [] );
+-					}
+-				});
+-			};
+-		} else {
+-			this.source = this.options.source;
+-		}
+-	},
+-
+-	_searchTimeout: function( event ) {
+-		clearTimeout( this.searching );
+-		this.searching = this._delay(function() {
+-			// only search if the value has changed
+-			if ( this.term !== this._value() ) {
+-				this.selectedItem = null;
+-				this.search( null, event );
+-			}
+-		}, this.options.delay );
+-	},
+-
+-	search: function( value, event ) {
+-		value = value != null ? value : this._value();
+-
+-		// always save the actual value, not the one passed as an argument
+-		this.term = this._value();
+-
+-		if ( value.length < this.options.minLength ) {
+-			return this.close( event );
+-		}
+-
+-		if ( this._trigger( "search", event ) === false ) {
+-			return;
+-		}
+-
+-		return this._search( value );
+-	},
+-
+-	_search: function( value ) {
+-		this.pending++;
+-		this.element.addClass( "ui-autocomplete-loading" );
+-		this.cancelSearch = false;
+-
+-		this.source( { term: value }, this._response() );
+-	},
+-
+-	_response: function() {
+-		var that = this,
+-			index = ++requestIndex;
+-
+-		return function( content ) {
+-			if ( index === requestIndex ) {
+-				that.__response( content );
+-			}
+-
+-			that.pending--;
+-			if ( !that.pending ) {
+-				that.element.removeClass( "ui-autocomplete-loading" );
+-			}
+-		};
+-	},
+-
+-	__response: function( content ) {
+-		if ( content ) {
+-			content = this._normalize( content );
+-		}
+-		this._trigger( "response", null, { content: content } );
+-		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+-			this._suggest( content );
+-			this._trigger( "open" );
+-		} else {
+-			// use ._close() instead of .close() so we don't cancel future searches
+-			this._close();
+-		}
+-	},
+-
+-	close: function( event ) {
+-		this.cancelSearch = true;
+-		this._close( event );
+-	},
+-
+-	_close: function( event ) {
+-		if ( this.menu.element.is( ":visible" ) ) {
+-			this.menu.element.hide();
+-			this.menu.blur();
+-			this.isNewMenu = true;
+-			this._trigger( "close", event );
+-		}
+-	},
+-
+-	_change: function( event ) {
+-		if ( this.previous !== this._value() ) {
+-			this._trigger( "change", event, { item: this.selectedItem } );
+-		}
+-	},
+-
+-	_normalize: function( items ) {
+-		// assume all items have the right format when the first item is complete
+-		if ( items.length && items[0].label && items[0].value ) {
+-			return items;
+-		}
+-		return $.map( items, function( item ) {
+-			if ( typeof item === "string" ) {
+-				return {
+-					label: item,
+-					value: item
+-				};
+-			}
+-			return $.extend({
+-				label: item.label || item.value,
+-				value: item.value || item.label
+-			}, item );
+-		});
+-	},
+-
+-	_suggest: function( items ) {
+-		var ul = this.menu.element.empty();
+-		this._renderMenu( ul, items );
+-		this.isNewMenu = true;
+-		this.menu.refresh();
+-
+-		// size and position menu
+-		ul.show();
+-		this._resizeMenu();
+-		ul.position( $.extend({
+-			of: this.element
+-		}, this.options.position ));
+-
+-		if ( this.options.autoFocus ) {
+-			this.menu.next();
+-		}
+-	},
+-
+-	_resizeMenu: function() {
+-		var ul = this.menu.element;
+-		ul.outerWidth( Math.max(
+-			// Firefox wraps long text (possibly a rounding bug)
+-			// so we add 1px to avoid the wrapping (#7513)
+-			ul.width( "" ).outerWidth() + 1,
+-			this.element.outerWidth()
+-		) );
+-	},
+-
+-	_renderMenu: function( ul, items ) {
+-		var that = this;
+-		$.each( items, function( index, item ) {
+-			that._renderItemData( ul, item );
+-		});
+-	},
+-
+-	_renderItemData: function( ul, item ) {
+-		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+-	},
+-
+-	_renderItem: function( ul, item ) {
+-		return $( "<li>" )
+-			.append( $( "<a>" ).text( item.label ) )
+-			.appendTo( ul );
+-	},
+-
+-	_move: function( direction, event ) {
+-		if ( !this.menu.element.is( ":visible" ) ) {
+-			this.search( null, event );
+-			return;
+-		}
+-		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+-				this.menu.isLastItem() && /^next/.test( direction ) ) {
+-			this._value( this.term );
+-			this.menu.blur();
+-			return;
+-		}
+-		this.menu[ direction ]( event );
+-	},
+-
+-	widget: function() {
+-		return this.menu.element;
+-	},
+-
+-	_value: function() {
+-		return this.valueMethod.apply( this.element, arguments );
+-	},
+-
+-	_keyEvent: function( keyEvent, event ) {
+-		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-			this._move( keyEvent, event );
+-
+-			// prevents moving cursor to beginning/end of the text field in some browsers
+-			event.preventDefault();
+-		}
+-	}
+-});
+-
+-$.extend( $.ui.autocomplete, {
+-	escapeRegex: function( value ) {
+-		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+-	},
+-	filter: function(array, term) {
+-		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+-		return $.grep( array, function(value) {
+-			return matcher.test( value.label || value.value || value );
+-		});
+-	}
+-});
+-
+-
+-// live region extension, adding a `messages` option
+-// NOTE: This is an experimental API. We are still investigating
+-// a full solution for string manipulation and internationalization.
+-$.widget( "ui.autocomplete", $.ui.autocomplete, {
+-	options: {
+-		messages: {
+-			noResults: "No search results.",
+-			results: function( amount ) {
+-				return amount + ( amount > 1 ? " results are" : " result is" ) +
+-					" available, use up and down arrow keys to navigate.";
+-			}
+-		}
+-	},
+-
+-	__response: function( content ) {
+-		var message;
+-		this._superApply( arguments );
+-		if ( this.options.disabled || this.cancelSearch ) {
+-			return;
+-		}
+-		if ( content && content.length ) {
+-			message = this.options.messages.results( content.length );
+-		} else {
+-			message = this.options.messages.noResults;
+-		}
+-		this.liveRegion.text( message );
+-	}
+-});
+-
+-}( jQuery ));
+-(function( $, undefined ) {
+-
+-var lastActive, startXPos, startYPos, clickDragged,
+-	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+-	stateClasses = "ui-state-hover ui-state-active ",
+-	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+-	formResetHandler = function() {
+-		var form = $( this );
+-		setTimeout(function() {
+-			form.find( ":ui-button" ).button( "refresh" );
+-		}, 1 );
+-	},
+-	radioGroup = function( radio ) {
+-		var name = radio.name,
+-			form = radio.form,
+-			radios = $( [] );
+-		if ( name ) {
+-			name = name.replace( /'/g, "\\'" );
+-			if ( form ) {
+-				radios = $( form ).find( "[name='" + name + "']" );
+-			} else {
+-				radios = $( "[name='" + name + "']", radio.ownerDocument )
+-					.filter(function() {
+-						return !this.form;
+-					});
+-			}
+-		}
+-		return radios;
+-	};
+-
+-$.widget( "ui.button", {
+-	version: "1.10.3",
+-	defaultElement: "<button>",
+-	options: {
+-		disabled: null,
+-		text: true,
+-		label: null,
+-		icons: {
+-			primary: null,
+-			secondary: null
+-		}
+-	},
+-	_create: function() {
+-		this.element.closest( "form" )
+-			.unbind( "reset" + this.eventNamespace )
+-			.bind( "reset" + this.eventNamespace, formResetHandler );
+-
+-		if ( typeof this.options.disabled !== "boolean" ) {
+-			this.options.disabled = !!this.element.prop( "disabled" );
+-		} else {
+-			this.element.prop( "disabled", this.options.disabled );
+-		}
+-
+-		this._determineButtonType();
+-		this.hasTitle = !!this.buttonElement.attr( "title" );
+-
+-		var that = this,
+-			options = this.options,
+-			toggleButton = this.type === "checkbox" || this.type === "radio",
+-			activeClass = !toggleButton ? "ui-state-active" : "",
+-			focusClass = "ui-state-focus";
+-
+-		if ( options.label === null ) {
+-			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+-		}
+-
+-		this._hoverable( this.buttonElement );
+-
+-		this.buttonElement
+-			.addClass( baseClasses )
+-			.attr( "role", "button" )
+-			.bind( "mouseenter" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				if ( this === lastActive ) {
+-					$( this ).addClass( "ui-state-active" );
+-				}
+-			})
+-			.bind( "mouseleave" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( activeClass );
+-			})
+-			.bind( "click" + this.eventNamespace, function( event ) {
+-				if ( options.disabled ) {
+-					event.preventDefault();
+-					event.stopImmediatePropagation();
+-				}
+-			});
+-
+-		this.element
+-			.bind( "focus" + this.eventNamespace, function() {
+-				// no need to check disabled, focus won't be triggered anyway
+-				that.buttonElement.addClass( focusClass );
+-			})
+-			.bind( "blur" + this.eventNamespace, function() {
+-				that.buttonElement.removeClass( focusClass );
+-			});
+-
+-		if ( toggleButton ) {
+-			this.element.bind( "change" + this.eventNamespace, function() {
+-				if ( clickDragged ) {
+-					return;
+-				}
+-				that.refresh();
+-			});
+-			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+-			// prevents issue where button state changes but checkbox/radio checked state
+-			// does not in Firefox (see ticket #6970)
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					clickDragged = false;
+-					startXPos = event.pageX;
+-					startYPos = event.pageY;
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+-						clickDragged = true;
+-					}
+-			});
+-		}
+-
+-		if ( this.type === "checkbox" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-			});
+-		} else if ( this.type === "radio" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).addClass( "ui-state-active" );
+-				that.buttonElement.attr( "aria-pressed", "true" );
+-
+-				var radio = that.element[ 0 ];
+-				radioGroup( radio )
+-					.not( radio )
+-					.map(function() {
+-						return $( this ).button( "widget" )[ 0 ];
+-					})
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			});
+-		} else {
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).addClass( "ui-state-active" );
+-					lastActive = this;
+-					that.document.one( "mouseup", function() {
+-						lastActive = null;
+-					});
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).removeClass( "ui-state-active" );
+-				})
+-				.bind( "keydown" + this.eventNamespace, function(event) {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+-						$( this ).addClass( "ui-state-active" );
+-					}
+-				})
+-				// see #8559, we bind to blur here in case the button element loses
+-				// focus between keydown and keyup, it would be left in an "active" state
+-				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+-					$( this ).removeClass( "ui-state-active" );
+-				});
+-
+-			if ( this.buttonElement.is("a") ) {
+-				this.buttonElement.keyup(function(event) {
+-					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+-						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+-						$( this ).click();
+-					}
+-				});
+-			}
+-		}
+-
+-		// TODO: pull out $.Widget's handling for the disabled option into
+-		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+-		// be overridden by individual plugins
+-		this._setOption( "disabled", options.disabled );
+-		this._resetButton();
+-	},
+-
+-	_determineButtonType: function() {
+-		var ancestor, labelSelector, checked;
+-
+-		if ( this.element.is("[type=checkbox]") ) {
+-			this.type = "checkbox";
+-		} else if ( this.element.is("[type=radio]") ) {
+-			this.type = "radio";
+-		} else if ( this.element.is("input") ) {
+-			this.type = "input";
+-		} else {
+-			this.type = "button";
+-		}
+-
+-		if ( this.type === "checkbox" || this.type === "radio" ) {
+-			// we don't search against the document in case the element
+-			// is disconnected from the DOM
+-			ancestor = this.element.parents().last();
+-			labelSelector = "label[for='" + this.element.attr("id") + "']";
+-			this.buttonElement = ancestor.find( labelSelector );
+-			if ( !this.buttonElement.length ) {
+-				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+-				this.buttonElement = ancestor.filter( labelSelector );
+-				if ( !this.buttonElement.length ) {
+-					this.buttonElement = ancestor.find( labelSelector );
+-				}
+-			}
+-			this.element.addClass( "ui-helper-hidden-accessible" );
+-
+-			checked = this.element.is( ":checked" );
+-			if ( checked ) {
+-				this.buttonElement.addClass( "ui-state-active" );
+-			}
+-			this.buttonElement.prop( "aria-pressed", checked );
+-		} else {
+-			this.buttonElement = this.element;
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.buttonElement;
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-helper-hidden-accessible" );
+-		this.buttonElement
+-			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-pressed" )
+-			.html( this.buttonElement.find(".ui-button-text").html() );
+-
+-		if ( !this.hasTitle ) {
+-			this.buttonElement.removeAttr( "title" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-			} else {
+-				this.element.prop( "disabled", false );
+-			}
+-			return;
+-		}
+-		this._resetButton();
+-	},
+-
+-	refresh: function() {
+-		//See #8237 & #8828
+-		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+-
+-		if ( isDisabled !== this.options.disabled ) {
+-			this._setOption( "disabled", isDisabled );
+-		}
+-		if ( this.type === "radio" ) {
+-			radioGroup( this.element[0] ).each(function() {
+-				if ( $( this ).is( ":checked" ) ) {
+-					$( this ).button( "widget" )
+-						.addClass( "ui-state-active" )
+-						.attr( "aria-pressed", "true" );
+-				} else {
+-					$( this ).button( "widget" )
+-						.removeClass( "ui-state-active" )
+-						.attr( "aria-pressed", "false" );
+-				}
+-			});
+-		} else if ( this.type === "checkbox" ) {
+-			if ( this.element.is( ":checked" ) ) {
+-				this.buttonElement
+-					.addClass( "ui-state-active" )
+-					.attr( "aria-pressed", "true" );
+-			} else {
+-				this.buttonElement
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			}
+-		}
+-	},
+-
+-	_resetButton: function() {
+-		if ( this.type === "input" ) {
+-			if ( this.options.label ) {
+-				this.element.val( this.options.label );
+-			}
+-			return;
+-		}
+-		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+-			buttonText = $( "<span></span>", this.document[0] )
+-				.addClass( "ui-button-text" )
+-				.html( this.options.label )
+-				.appendTo( buttonElement.empty() )
+-				.text(),
+-			icons = this.options.icons,
+-			multipleIcons = icons.primary && icons.secondary,
+-			buttonClasses = [];
+-
+-		if ( icons.primary || icons.secondary ) {
+-			if ( this.options.text ) {
+-				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+-			}
+-
+-			if ( icons.primary ) {
+-				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+-			}
+-
+-			if ( icons.secondary ) {
+-				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+-			}
+-
+-			if ( !this.options.text ) {
+-				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+-
+-				if ( !this.hasTitle ) {
+-					buttonElement.attr( "title", $.trim( buttonText ) );
+-				}
+-			}
+-		} else {
+-			buttonClasses.push( "ui-button-text-only" );
+-		}
+-		buttonElement.addClass( buttonClasses.join( " " ) );
+-	}
+-});
+-
+-$.widget( "ui.buttonset", {
+-	version: "1.10.3",
+-	options: {
+-		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+-	},
+-
+-	_create: function() {
+-		this.element.addClass( "ui-buttonset" );
+-	},
+-
+-	_init: function() {
+-		this.refresh();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "disabled" ) {
+-			this.buttons.button( "option", key, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	refresh: function() {
+-		var rtl = this.element.css( "direction" ) === "rtl";
+-
+-		this.buttons = this.element.find( this.options.items )
+-			.filter( ":ui-button" )
+-				.button( "refresh" )
+-			.end()
+-			.not( ":ui-button" )
+-				.button()
+-			.end()
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+-				.filter( ":first" )
+-					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+-				.end()
+-				.filter( ":last" )
+-					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+-				.end()
+-			.end();
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-buttonset" );
+-		this.buttons
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-left ui-corner-right" )
+-			.end()
+-			.button( "destroy" );
+-	}
+-});
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.extend($.ui, { datepicker: { version: "1.10.3" } });
+-
+-var PROP_NAME = "datepicker",
+-	instActive;
+-
+-/* Date picker manager.
+-   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+-   Settings for (groups of) date pickers are maintained in an instance object,
+-   allowing multiple different settings on the same page. */
+-
+-function Datepicker() {
+-	this._curInst = null; // The current instance in use
+-	this._keyEvent = false; // If the last event was a key event
+-	this._disabledInputs = []; // List of date picker inputs that have been disabled
+-	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+-	this._inDialog = false; // True if showing within a "dialog", false if not
+-	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+-	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+-	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+-	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+-	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+-	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+-	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+-	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+-	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+-	this.regional = []; // Available regional settings, indexed by language code
+-	this.regional[""] = { // Default regional settings
+-		closeText: "Done", // Display text for close link
+-		prevText: "Prev", // Display text for previous month link
+-		nextText: "Next", // Display text for next month link
+-		currentText: "Today", // Display text for current month link
+-		monthNames: ["January","February","March","April","May","June",
+-			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
+-		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+-		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+-		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+-		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+-		weekHeader: "Wk", // Column header for week of the year
+-		dateFormat: "mm/dd/yy", // See format options on parseDate
+-		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+-		isRTL: false, // True if right-to-left language, false if left-to-right
+-		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+-		yearSuffix: "" // Additional text to append to the year in the month headers
+-	};
+-	this._defaults = { // Global defaults for all the date picker instances
+-		showOn: "focus", // "focus" for popup on focus,
+-			// "button" for trigger button, or "both" for either
+-		showAnim: "fadeIn", // Name of jQuery animation for popup
+-		showOptions: {}, // Options for enhanced animations
+-		defaultDate: null, // Used when field is blank: actual date,
+-			// +/-number for offset from today, null for today
+-		appendText: "", // Display text following the input box, e.g. showing the format
+-		buttonText: "...", // Text for trigger button
+-		buttonImage: "", // URL for trigger button image
+-		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+-		hideIfNoPrevNext: false, // True to hide next/previous month links
+-			// if not applicable, false to just disable them
+-		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+-		gotoCurrent: false, // True if today link goes back to current selection instead
+-		changeMonth: false, // True if month can be selected directly, false if only prev/next
+-		changeYear: false, // True if year can be selected directly, false if only prev/next
+-		yearRange: "c-10:c+10", // Range of years to display in drop-down,
+-			// either relative to today's year (-nn:+nn), relative to currently displayed year
+-			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+-		showOtherMonths: false, // True to show dates in other months, false to leave blank
+-		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+-		showWeek: false, // True to show week of the year, false to not show it
+-		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+-			// takes a Date and returns the number of the week for it
+-		shortYearCutoff: "+10", // Short year values < this are in the current century,
+-			// > this are in the previous century,
+-			// string value starting with "+" for current year + value
+-		minDate: null, // The earliest selectable date, or null for no limit
+-		maxDate: null, // The latest selectable date, or null for no limit
+-		duration: "fast", // Duration of display/closure
+-		beforeShowDay: null, // Function that takes a date and returns an array with
+-			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+-			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+-		beforeShow: null, // Function that takes an input field and
+-			// returns a set of custom settings for the date picker
+-		onSelect: null, // Define a callback function when a date is selected
+-		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+-		onClose: null, // Define a callback function when the datepicker is closed
+-		numberOfMonths: 1, // Number of months to show at a time
+-		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+-		stepMonths: 1, // Number of months to step back/forward
+-		stepBigMonths: 12, // Number of months to step back/forward for the big links
+-		altField: "", // Selector for an alternate field to store selected dates into
+-		altFormat: "", // The date format to use for the alternate field
+-		constrainInput: true, // The input is constrained by the current date format
+-		showButtonPanel: false, // True to show button panel, false to not show it
+-		autoSize: false, // True to size the input for the date format, false to leave as is
+-		disabled: false // The initial disabled state
+-	};
+-	$.extend(this._defaults, this.regional[""]);
+-	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+-}
+-
+-$.extend(Datepicker.prototype, {
+-	/* Class name added to elements to indicate already configured with a date picker. */
+-	markerClassName: "hasDatepicker",
+-
+-	//Keep track of the maximum number of rows displayed (see #7043)
+-	maxRows: 4,
+-
+-	// TODO rename to "widget" when switching to widget factory
+-	_widgetDatepicker: function() {
+-		return this.dpDiv;
+-	},
+-
+-	/* Override the default settings for all instances of the date picker.
+-	 * @param  settings  object - the new settings to use as defaults (anonymous object)
+-	 * @return the manager object
+-	 */
+-	setDefaults: function(settings) {
+-		extendRemove(this._defaults, settings || {});
+-		return this;
+-	},
+-
+-	/* Attach the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+-	 */
+-	_attachDatepicker: function(target, settings) {
+-		var nodeName, inline, inst;
+-		nodeName = target.nodeName.toLowerCase();
+-		inline = (nodeName === "div" || nodeName === "span");
+-		if (!target.id) {
+-			this.uuid += 1;
+-			target.id = "dp" + this.uuid;
+-		}
+-		inst = this._newInst($(target), inline);
+-		inst.settings = $.extend({}, settings || {});
+-		if (nodeName === "input") {
+-			this._connectDatepicker(target, inst);
+-		} else if (inline) {
+-			this._inlineDatepicker(target, inst);
+-		}
+-	},
+-
+-	/* Create a new instance object. */
+-	_newInst: function(target, inline) {
+-		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+-		return {id: id, input: target, // associated target
+-			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+-			drawMonth: 0, drawYear: 0, // month being drawn
+-			inline: inline, // is datepicker inline or not
+-			dpDiv: (!inline ? this.dpDiv : // presentation div
+-			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+-	},
+-
+-	/* Attach the date picker to an input field. */
+-	_connectDatepicker: function(target, inst) {
+-		var input = $(target);
+-		inst.append = $([]);
+-		inst.trigger = $([]);
+-		if (input.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		this._attachments(input, inst);
+-		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+-			keypress(this._doKeyPress).keyup(this._doKeyUp);
+-		this._autoSize(inst);
+-		$.data(target, PROP_NAME, inst);
+-		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-	},
+-
+-	/* Make attachments based on settings. */
+-	_attachments: function(input, inst) {
+-		var showOn, buttonText, buttonImage,
+-			appendText = this._get(inst, "appendText"),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		if (inst.append) {
+-			inst.append.remove();
+-		}
+-		if (appendText) {
+-			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+-			input[isRTL ? "before" : "after"](inst.append);
+-		}
+-
+-		input.unbind("focus", this._showDatepicker);
+-
+-		if (inst.trigger) {
+-			inst.trigger.remove();
+-		}
+-
+-		showOn = this._get(inst, "showOn");
+-		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+-			input.focus(this._showDatepicker);
+-		}
+-		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+-			buttonText = this._get(inst, "buttonText");
+-			buttonImage = this._get(inst, "buttonImage");
+-			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+-				$("<img/>").addClass(this._triggerClass).
+-					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+-				$("<button type='button'></button>").addClass(this._triggerClass).
+-					html(!buttonImage ? buttonText : $("<img/>").attr(
+-					{ src:buttonImage, alt:buttonText, title:buttonText })));
+-			input[isRTL ? "before" : "after"](inst.trigger);
+-			inst.trigger.click(function() {
+-				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+-					$.datepicker._hideDatepicker();
+-				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+-					$.datepicker._hideDatepicker();
+-					$.datepicker._showDatepicker(input[0]);
+-				} else {
+-					$.datepicker._showDatepicker(input[0]);
+-				}
+-				return false;
+-			});
+-		}
+-	},
+-
+-	/* Apply the maximum length for the date format. */
+-	_autoSize: function(inst) {
+-		if (this._get(inst, "autoSize") && !inst.inline) {
+-			var findMax, max, maxI, i,
+-				date = new Date(2009, 12 - 1, 20), // Ensure double digits
+-				dateFormat = this._get(inst, "dateFormat");
+-
+-			if (dateFormat.match(/[DM]/)) {
+-				findMax = function(names) {
+-					max = 0;
+-					maxI = 0;
+-					for (i = 0; i < names.length; i++) {
+-						if (names[i].length > max) {
+-							max = names[i].length;
+-							maxI = i;
+-						}
+-					}
+-					return maxI;
+-				};
+-				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+-					"monthNames" : "monthNamesShort"))));
+-				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+-					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+-			}
+-			inst.input.attr("size", this._formatDate(inst, date).length);
+-		}
+-	},
+-
+-	/* Attach an inline date picker to a div. */
+-	_inlineDatepicker: function(target, inst) {
+-		var divSpan = $(target);
+-		if (divSpan.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+-		$.data(target, PROP_NAME, inst);
+-		this._setDate(inst, this._getDefaultDate(inst), true);
+-		this._updateDatepicker(inst);
+-		this._updateAlternate(inst);
+-		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+-		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+-		inst.dpDiv.css( "display", "block" );
+-	},
+-
+-	/* Pop-up the date picker in a "dialog" box.
+-	 * @param  input element - ignored
+-	 * @param  date	string or Date - the initial date to display
+-	 * @param  onSelect  function - the function to call when a date is selected
+-	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+-	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
+-	 *					event - with x/y coordinates or
+-	 *					leave empty for default (screen centre)
+-	 * @return the manager object
+-	 */
+-	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+-		var id, browserWidth, browserHeight, scrollX, scrollY,
+-			inst = this._dialogInst; // internal instance
+-
+-		if (!inst) {
+-			this.uuid += 1;
+-			id = "dp" + this.uuid;
+-			this._dialogInput = $("<input type='text' id='" + id +
+-				"' style='position: absolute; top: -100px; width: 0px;'/>");
+-			this._dialogInput.keydown(this._doKeyDown);
+-			$("body").append(this._dialogInput);
+-			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+-			inst.settings = {};
+-			$.data(this._dialogInput[0], PROP_NAME, inst);
+-		}
+-		extendRemove(inst.settings, settings || {});
+-		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+-		this._dialogInput.val(date);
+-
+-		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+-		if (!this._pos) {
+-			browserWidth = document.documentElement.clientWidth;
+-			browserHeight = document.documentElement.clientHeight;
+-			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+-			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+-			this._pos = // should use actual width/height below
+-				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+-		}
+-
+-		// move input on screen for focus, but hidden behind dialog
+-		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+-		inst.settings.onSelect = onSelect;
+-		this._inDialog = true;
+-		this.dpDiv.addClass(this._dialogClass);
+-		this._showDatepicker(this._dialogInput[0]);
+-		if ($.blockUI) {
+-			$.blockUI(this.dpDiv);
+-		}
+-		$.data(this._dialogInput[0], PROP_NAME, inst);
+-		return this;
+-	},
+-
+-	/* Detach a datepicker from its control.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_destroyDatepicker: function(target) {
+-		var nodeName,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		$.removeData(target, PROP_NAME);
+-		if (nodeName === "input") {
+-			inst.append.remove();
+-			inst.trigger.remove();
+-			$target.removeClass(this.markerClassName).
+-				unbind("focus", this._showDatepicker).
+-				unbind("keydown", this._doKeyDown).
+-				unbind("keypress", this._doKeyPress).
+-				unbind("keyup", this._doKeyUp);
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			$target.removeClass(this.markerClassName).empty();
+-		}
+-	},
+-
+-	/* Enable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_enableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = false;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = false; }).end().
+-				filter("img").css({opacity: "1.0", cursor: ""});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().removeClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", false);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-	},
+-
+-	/* Disable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_disableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = true;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = true; }).end().
+-				filter("img").css({opacity: "0.5", cursor: "default"});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().addClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", true);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-		this._disabledInputs[this._disabledInputs.length] = target;
+-	},
+-
+-	/* Is the first field in a jQuery collection disabled as a datepicker?
+-	 * @param  target	element - the target input field or division or span
+-	 * @return boolean - true if disabled, false if enabled
+-	 */
+-	_isDisabledDatepicker: function(target) {
+-		if (!target) {
+-			return false;
+-		}
+-		for (var i = 0; i < this._disabledInputs.length; i++) {
+-			if (this._disabledInputs[i] === target) {
+-				return true;
+-			}
+-		}
+-		return false;
+-	},
+-
+-	/* Retrieve the instance data for the target control.
+-	 * @param  target  element - the target input field or division or span
+-	 * @return  object - the associated instance data
+-	 * @throws  error if a jQuery problem getting data
+-	 */
+-	_getInst: function(target) {
+-		try {
+-			return $.data(target, PROP_NAME);
+-		}
+-		catch (err) {
+-			throw "Missing instance data for this datepicker";
+-		}
+-	},
+-
+-	/* Update or retrieve the settings for a date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 * @param  name	object - the new settings to update or
+-	 *				string - the name of the setting to change or retrieve,
+-	 *				when retrieving also "all" for all instance settings or
+-	 *				"defaults" for all global defaults
+-	 * @param  value   any - the new value for the setting
+-	 *				(omit if above is an object or to retrieve a value)
+-	 */
+-	_optionDatepicker: function(target, name, value) {
+-		var settings, date, minDate, maxDate,
+-			inst = this._getInst(target);
+-
+-		if (arguments.length === 2 && typeof name === "string") {
+-			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+-				(inst ? (name === "all" ? $.extend({}, inst.settings) :
+-				this._get(inst, name)) : null));
+-		}
+-
+-		settings = name || {};
+-		if (typeof name === "string") {
+-			settings = {};
+-			settings[name] = value;
+-		}
+-
+-		if (inst) {
+-			if (this._curInst === inst) {
+-				this._hideDatepicker();
+-			}
+-
+-			date = this._getDateDatepicker(target, true);
+-			minDate = this._getMinMaxDate(inst, "min");
+-			maxDate = this._getMinMaxDate(inst, "max");
+-			extendRemove(inst.settings, settings);
+-			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+-			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+-				inst.settings.minDate = this._formatDate(inst, minDate);
+-			}
+-			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+-				inst.settings.maxDate = this._formatDate(inst, maxDate);
+-			}
+-			if ( "disabled" in settings ) {
+-				if ( settings.disabled ) {
+-					this._disableDatepicker(target);
+-				} else {
+-					this._enableDatepicker(target);
+-				}
+-			}
+-			this._attachments($(target), inst);
+-			this._autoSize(inst);
+-			this._setDate(inst, date);
+-			this._updateAlternate(inst);
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	// change method deprecated
+-	_changeDatepicker: function(target, name, value) {
+-		this._optionDatepicker(target, name, value);
+-	},
+-
+-	/* Redraw the date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 */
+-	_refreshDatepicker: function(target) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	/* Set the dates for a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  date	Date - the new date
+-	 */
+-	_setDateDatepicker: function(target, date) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._setDate(inst, date);
+-			this._updateDatepicker(inst);
+-			this._updateAlternate(inst);
+-		}
+-	},
+-
+-	/* Get the date(s) for the first entry in a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  noDefault boolean - true if no default date is to be used
+-	 * @return Date - the current date
+-	 */
+-	_getDateDatepicker: function(target, noDefault) {
+-		var inst = this._getInst(target);
+-		if (inst && !inst.inline) {
+-			this._setDateFromField(inst, noDefault);
+-		}
+-		return (inst ? this._getDate(inst) : null);
+-	},
+-
+-	/* Handle keystrokes. */
+-	_doKeyDown: function(event) {
+-		var onSelect, dateStr, sel,
+-			inst = $.datepicker._getInst(event.target),
+-			handled = true,
+-			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+-
+-		inst._keyEvent = true;
+-		if ($.datepicker._datepickerShowing) {
+-			switch (event.keyCode) {
+-				case 9: $.datepicker._hideDatepicker();
+-						handled = false;
+-						break; // hide on tab out
+-				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+-									$.datepicker._currentClass + ")", inst.dpDiv);
+-						if (sel[0]) {
+-							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+-						}
+-
+-						onSelect = $.datepicker._get(inst, "onSelect");
+-						if (onSelect) {
+-							dateStr = $.datepicker._formatDate(inst);
+-
+-							// trigger custom callback
+-							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-						} else {
+-							$.datepicker._hideDatepicker();
+-						}
+-
+-						return false; // don't submit the form
+-				case 27: $.datepicker._hideDatepicker();
+-						break; // hide on escape
+-				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							-$.datepicker._get(inst, "stepBigMonths") :
+-							-$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // previous month/year on page up/+ ctrl
+-				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							+$.datepicker._get(inst, "stepBigMonths") :
+-							+$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // next month/year on page down/+ ctrl
+-				case 35: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._clearDate(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // clear on ctrl or command +end
+-				case 36: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._gotoToday(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // current on ctrl or command +home
+-				case 37: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// -1 day on ctrl or command +left
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								-$.datepicker._get(inst, "stepBigMonths") :
+-								-$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +left on Mac
+-						break;
+-				case 38: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, -7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // -1 week on ctrl or command +up
+-				case 39: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// +1 day on ctrl or command +right
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								+$.datepicker._get(inst, "stepBigMonths") :
+-								+$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +right
+-						break;
+-				case 40: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, +7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // +1 week on ctrl or command +down
+-				default: handled = false;
+-			}
+-		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+-			$.datepicker._showDatepicker(this);
+-		} else {
+-			handled = false;
+-		}
+-
+-		if (handled) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-	},
+-
+-	/* Filter entered characters - based on date format. */
+-	_doKeyPress: function(event) {
+-		var chars, chr,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if ($.datepicker._get(inst, "constrainInput")) {
+-			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+-			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+-			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+-		}
+-	},
+-
+-	/* Synchronise manual entry and field/alternate field. */
+-	_doKeyUp: function(event) {
+-		var date,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if (inst.input.val() !== inst.lastVal) {
+-			try {
+-				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-					(inst.input ? inst.input.val() : null),
+-					$.datepicker._getFormatConfig(inst));
+-
+-				if (date) { // only if valid
+-					$.datepicker._setDateFromField(inst);
+-					$.datepicker._updateAlternate(inst);
+-					$.datepicker._updateDatepicker(inst);
+-				}
+-			}
+-			catch (err) {
+-			}
+-		}
+-		return true;
+-	},
+-
+-	/* Pop-up the date picker for a given input field.
+-	 * If false returned from beforeShow event handler do not show.
+-	 * @param  input  element - the input field attached to the date picker or
+-	 *					event - if triggered by focus
+-	 */
+-	_showDatepicker: function(input) {
+-		input = input.target || input;
+-		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+-			input = $("input", input.parentNode)[0];
+-		}
+-
+-		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+-			return;
+-		}
+-
+-		var inst, beforeShow, beforeShowSettings, isFixed,
+-			offset, showAnim, duration;
+-
+-		inst = $.datepicker._getInst(input);
+-		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+-			$.datepicker._curInst.dpDiv.stop(true, true);
+-			if ( inst && $.datepicker._datepickerShowing ) {
+-				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+-			}
+-		}
+-
+-		beforeShow = $.datepicker._get(inst, "beforeShow");
+-		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+-		if(beforeShowSettings === false){
+-			return;
+-		}
+-		extendRemove(inst.settings, beforeShowSettings);
+-
+-		inst.lastVal = null;
+-		$.datepicker._lastInput = input;
+-		$.datepicker._setDateFromField(inst);
+-
+-		if ($.datepicker._inDialog) { // hide cursor
+-			input.value = "";
+-		}
+-		if (!$.datepicker._pos) { // position below input
+-			$.datepicker._pos = $.datepicker._findPos(input);
+-			$.datepicker._pos[1] += input.offsetHeight; // add the height
+-		}
+-
+-		isFixed = false;
+-		$(input).parents().each(function() {
+-			isFixed |= $(this).css("position") === "fixed";
+-			return !isFixed;
+-		});
+-
+-		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+-		$.datepicker._pos = null;
+-		//to avoid flashes on Firefox
+-		inst.dpDiv.empty();
+-		// determine sizing offscreen
+-		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+-		$.datepicker._updateDatepicker(inst);
+-		// fix width for dynamic number of date pickers
+-		// and adjust position before showing
+-		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+-		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+-			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
+-			left: offset.left + "px", top: offset.top + "px"});
+-
+-		if (!inst.inline) {
+-			showAnim = $.datepicker._get(inst, "showAnim");
+-			duration = $.datepicker._get(inst, "duration");
+-			inst.dpDiv.zIndex($(input).zIndex()+1);
+-			$.datepicker._datepickerShowing = true;
+-
+-			if ( $.effects && $.effects.effect[ showAnim ] ) {
+-				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+-			} else {
+-				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+-			}
+-
+-			if ( $.datepicker._shouldFocusInput( inst ) ) {
+-				inst.input.focus();
+-			}
+-
+-			$.datepicker._curInst = inst;
+-		}
+-	},
+-
+-	/* Generate the date picker content. */
+-	_updateDatepicker: function(inst) {
+-		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+-		instActive = inst; // for delegate hover events
+-		inst.dpDiv.empty().append(this._generateHTML(inst));
+-		this._attachHandlers(inst);
+-		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
+-
+-		var origyearshtml,
+-			numMonths = this._getNumberOfMonths(inst),
+-			cols = numMonths[1],
+-			width = 17;
+-
+-		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+-		if (cols > 1) {
+-			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+-		}
+-		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+-			"Class"]("ui-datepicker-multi");
+-		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+-			"Class"]("ui-datepicker-rtl");
+-
+-		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+-			inst.input.focus();
+-		}
+-
+-		// deffered render of the years select (to avoid flashes on Firefox)
+-		if( inst.yearshtml ){
+-			origyearshtml = inst.yearshtml;
+-			setTimeout(function(){
+-				//assure that inst.yearshtml didn't change.
+-				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+-					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+-				}
+-				origyearshtml = inst.yearshtml = null;
+-			}, 0);
+-		}
+-	},
+-
+-	// #6694 - don't focus the input if it's already focused
+-	// this breaks the change event in IE
+-	// Support: IE and jQuery <1.9
+-	_shouldFocusInput: function( inst ) {
+-		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+-	},
+-
+-	/* Check positioning to remain on screen. */
+-	_checkOffset: function(inst, offset, isFixed) {
+-		var dpWidth = inst.dpDiv.outerWidth(),
+-			dpHeight = inst.dpDiv.outerHeight(),
+-			inputWidth = inst.input ? inst.input.outerWidth() : 0,
+-			inputHeight = inst.input ? inst.input.outerHeight() : 0,
+-			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+-			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+-
+-		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+-		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+-		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+-
+-		// now check if datepicker is showing outside window viewport - move to a better place if so.
+-		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+-			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+-		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+-			Math.abs(dpHeight + inputHeight) : 0);
+-
+-		return offset;
+-	},
+-
+-	/* Find an object's position on the screen. */
+-	_findPos: function(obj) {
+-		var position,
+-			inst = this._getInst(obj),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+-			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+-		}
+-
+-		position = $(obj).offset();
+-		return [position.left, position.top];
+-	},
+-
+-	/* Hide the date picker from view.
+-	 * @param  input  element - the input field attached to the date picker
+-	 */
+-	_hideDatepicker: function(input) {
+-		var showAnim, duration, postProcess, onClose,
+-			inst = this._curInst;
+-
+-		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
+-			return;
+-		}
+-
+-		if (this._datepickerShowing) {
+-			showAnim = this._get(inst, "showAnim");
+-			duration = this._get(inst, "duration");
+-			postProcess = function() {
+-				$.datepicker._tidyDialog(inst);
+-			};
+-
+-			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+-			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+-				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+-			} else {
+-				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+-					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+-			}
+-
+-			if (!showAnim) {
+-				postProcess();
+-			}
+-			this._datepickerShowing = false;
+-
+-			onClose = this._get(inst, "onClose");
+-			if (onClose) {
+-				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+-			}
+-
+-			this._lastInput = null;
+-			if (this._inDialog) {
+-				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+-				if ($.blockUI) {
+-					$.unblockUI();
+-					$("body").append(this.dpDiv);
+-				}
+-			}
+-			this._inDialog = false;
+-		}
+-	},
+-
+-	/* Tidy up after a dialog display. */
+-	_tidyDialog: function(inst) {
+-		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+-	},
+-
+-	/* Close date picker if clicked elsewhere. */
+-	_checkExternalClick: function(event) {
+-		if (!$.datepicker._curInst) {
+-			return;
+-		}
+-
+-		var $target = $(event.target),
+-			inst = $.datepicker._getInst($target[0]);
+-
+-		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+-				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+-				!$target.hasClass($.datepicker.markerClassName) &&
+-				!$target.closest("." + $.datepicker._triggerClass).length &&
+-				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+-			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+-				$.datepicker._hideDatepicker();
+-		}
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustDate: function(id, offset, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		this._adjustInstDate(inst, offset +
+-			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+-			period);
+-		this._updateDatepicker(inst);
+-	},
+-
+-	/* Action for current link. */
+-	_gotoToday: function(id) {
+-		var date,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+-			inst.selectedDay = inst.currentDay;
+-			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+-			inst.drawYear = inst.selectedYear = inst.currentYear;
+-		} else {
+-			date = new Date();
+-			inst.selectedDay = date.getDate();
+-			inst.drawMonth = inst.selectedMonth = date.getMonth();
+-			inst.drawYear = inst.selectedYear = date.getFullYear();
+-		}
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a new month/year. */
+-	_selectMonthYear: function(id, select, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		inst["selected" + (period === "M" ? "Month" : "Year")] =
+-		inst["draw" + (period === "M" ? "Month" : "Year")] =
+-			parseInt(select.options[select.selectedIndex].value,10);
+-
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a day. */
+-	_selectDay: function(id, month, year, td) {
+-		var inst,
+-			target = $(id);
+-
+-		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-
+-		inst = this._getInst(target[0]);
+-		inst.selectedDay = inst.currentDay = $("a", td).html();
+-		inst.selectedMonth = inst.currentMonth = month;
+-		inst.selectedYear = inst.currentYear = year;
+-		this._selectDate(id, this._formatDate(inst,
+-			inst.currentDay, inst.currentMonth, inst.currentYear));
+-	},
+-
+-	/* Erase the input field and hide the date picker. */
+-	_clearDate: function(id) {
+-		var target = $(id);
+-		this._selectDate(target, "");
+-	},
+-
+-	/* Update the input field with the selected date. */
+-	_selectDate: function(id, dateStr) {
+-		var onSelect,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+-		if (inst.input) {
+-			inst.input.val(dateStr);
+-		}
+-		this._updateAlternate(inst);
+-
+-		onSelect = this._get(inst, "onSelect");
+-		if (onSelect) {
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+-		} else if (inst.input) {
+-			inst.input.trigger("change"); // fire the change event
+-		}
+-
+-		if (inst.inline){
+-			this._updateDatepicker(inst);
+-		} else {
+-			this._hideDatepicker();
+-			this._lastInput = inst.input[0];
+-			if (typeof(inst.input[0]) !== "object") {
+-				inst.input.focus(); // restore focus
+-			}
+-			this._lastInput = null;
+-		}
+-	},
+-
+-	/* Update any alternate field to synchronise with the main field. */
+-	_updateAlternate: function(inst) {
+-		var altFormat, date, dateStr,
+-			altField = this._get(inst, "altField");
+-
+-		if (altField) { // update alternate field too
+-			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+-			date = this._getDate(inst);
+-			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+-			$(altField).each(function() { $(this).val(dateStr); });
+-		}
+-	},
+-
+-	/* Set as beforeShowDay function to prevent selection of weekends.
+-	 * @param  date  Date - the date to customise
+-	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
+-	 */
+-	noWeekends: function(date) {
+-		var day = date.getDay();
+-		return [(day > 0 && day < 6), ""];
+-	},
+-
+-	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+-	 * @param  date  Date - the date to get the week for
+-	 * @return  number - the number of the week within the year that contains this date
+-	 */
+-	iso8601Week: function(date) {
+-		var time,
+-			checkDate = new Date(date.getTime());
+-
+-		// Find Thursday of this week starting on Monday
+-		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+-
+-		time = checkDate.getTime();
+-		checkDate.setMonth(0); // Compare with Jan 1
+-		checkDate.setDate(1);
+-		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+-	},
+-
+-	/* Parse a string value into a date object.
+-	 * See formatDate below for the possible formats.
+-	 *
+-	 * @param  format string - the expected format of the date
+-	 * @param  value string - the date in the above format
+-	 * @param  settings Object - attributes include:
+-	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  Date - the extracted date value or null if value is blank
+-	 */
+-	parseDate: function (format, value, settings) {
+-		if (format == null || value == null) {
+-			throw "Invalid arguments";
+-		}
+-
+-		value = (typeof value === "object" ? value.toString() : value + "");
+-		if (value === "") {
+-			return null;
+-		}
+-
+-		var iFormat, dim, extra,
+-			iValue = 0,
+-			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+-			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+-				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			year = -1,
+-			month = -1,
+-			day = -1,
+-			doy = -1,
+-			literal = false,
+-			date,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Extract a number from the string value
+-			getNumber = function(match) {
+-				var isDoubled = lookAhead(match),
+-					size = (match === "@" ? 14 : (match === "!" ? 20 :
+-					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+-					digits = new RegExp("^\\d{1," + size + "}"),
+-					num = value.substring(iValue).match(digits);
+-				if (!num) {
+-					throw "Missing number at position " + iValue;
+-				}
+-				iValue += num[0].length;
+-				return parseInt(num[0], 10);
+-			},
+-			// Extract a name from the string value and convert to an index
+-			getName = function(match, shortNames, longNames) {
+-				var index = -1,
+-					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+-						return [ [k, v] ];
+-					}).sort(function (a, b) {
+-						return -(a[1].length - b[1].length);
+-					});
+-
+-				$.each(names, function (i, pair) {
+-					var name = pair[1];
+-					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+-						index = pair[0];
+-						iValue += name.length;
+-						return false;
+-					}
+-				});
+-				if (index !== -1) {
+-					return index + 1;
+-				} else {
+-					throw "Unknown name at position " + iValue;
+-				}
+-			},
+-			// Confirm that a literal character matches the string value
+-			checkLiteral = function() {
+-				if (value.charAt(iValue) !== format.charAt(iFormat)) {
+-					throw "Unexpected literal at position " + iValue;
+-				}
+-				iValue++;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					checkLiteral();
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d":
+-						day = getNumber("d");
+-						break;
+-					case "D":
+-						getName("D", dayNamesShort, dayNames);
+-						break;
+-					case "o":
+-						doy = getNumber("o");
+-						break;
+-					case "m":
+-						month = getNumber("m");
+-						break;
+-					case "M":
+-						month = getName("M", monthNamesShort, monthNames);
+-						break;
+-					case "y":
+-						year = getNumber("y");
+-						break;
+-					case "@":
+-						date = new Date(getNumber("@"));
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "!":
+-						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "'":
+-						if (lookAhead("'")){
+-							checkLiteral();
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						checkLiteral();
+-				}
+-			}
+-		}
+-
+-		if (iValue < value.length){
+-			extra = value.substr(iValue);
+-			if (!/^\s+/.test(extra)) {
+-				throw "Extra/unparsed characters found in date: " + extra;
+-			}
+-		}
+-
+-		if (year === -1) {
+-			year = new Date().getFullYear();
+-		} else if (year < 100) {
+-			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+-				(year <= shortYearCutoff ? 0 : -100);
+-		}
+-
+-		if (doy > -1) {
+-			month = 1;
+-			day = doy;
+-			do {
+-				dim = this._getDaysInMonth(year, month - 1);
+-				if (day <= dim) {
+-					break;
+-				}
+-				month++;
+-				day -= dim;
+-			} while (true);
+-		}
+-
+-		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+-		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+-			throw "Invalid date"; // E.g. 31/02/00
+-		}
+-		return date;
+-	},
+-
+-	/* Standard date formats. */
+-	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+-	COOKIE: "D, dd M yy",
+-	ISO_8601: "yy-mm-dd",
+-	RFC_822: "D, d M y",
+-	RFC_850: "DD, dd-M-y",
+-	RFC_1036: "D, d M y",
+-	RFC_1123: "D, d M yy",
+-	RFC_2822: "D, d M yy",
+-	RSS: "D, d M y", // RFC 822
+-	TICKS: "!",
+-	TIMESTAMP: "@",
+-	W3C: "yy-mm-dd", // ISO 8601
+-
+-	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+-		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+-
+-	/* Format a date object into a string value.
+-	 * The format can be combinations of the following:
+-	 * d  - day of month (no leading zero)
+-	 * dd - day of month (two digit)
+-	 * o  - day of year (no leading zeros)
+-	 * oo - day of year (three digit)
+-	 * D  - day name short
+-	 * DD - day name long
+-	 * m  - month of year (no leading zero)
+-	 * mm - month of year (two digit)
+-	 * M  - month name short
+-	 * MM - month name long
+-	 * y  - year (two digit)
+-	 * yy - year (four digit)
+-	 * @ - Unix timestamp (ms since 01/01/1970)
+-	 * ! - Windows ticks (100ns since 01/01/0001)
+-	 * "..." - literal text
+-	 * '' - single quote
+-	 *
+-	 * @param  format string - the desired format of the date
+-	 * @param  date Date - the date value to format
+-	 * @param  settings Object - attributes include:
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  string - the date in the above format
+-	 */
+-	formatDate: function (format, date, settings) {
+-		if (!date) {
+-			return "";
+-		}
+-
+-		var iFormat,
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Format a number, with leading zero if necessary
+-			formatNumber = function(match, value, len) {
+-				var num = "" + value;
+-				if (lookAhead(match)) {
+-					while (num.length < len) {
+-						num = "0" + num;
+-					}
+-				}
+-				return num;
+-			},
+-			// Format a name, short or long as requested
+-			formatName = function(match, value, shortNames, longNames) {
+-				return (lookAhead(match) ? longNames[value] : shortNames[value]);
+-			},
+-			output = "",
+-			literal = false;
+-
+-		if (date) {
+-			for (iFormat = 0; iFormat < format.length; iFormat++) {
+-				if (literal) {
+-					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-						literal = false;
+-					} else {
+-						output += format.charAt(iFormat);
+-					}
+-				} else {
+-					switch (format.charAt(iFormat)) {
+-						case "d":
+-							output += formatNumber("d", date.getDate(), 2);
+-							break;
+-						case "D":
+-							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+-							break;
+-						case "o":
+-							output += formatNumber("o",
+-								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+-							break;
+-						case "m":
+-							output += formatNumber("m", date.getMonth() + 1, 2);
+-							break;
+-						case "M":
+-							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+-							break;
+-						case "y":
+-							output += (lookAhead("y") ? date.getFullYear() :
+-								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+-							break;
+-						case "@":
+-							output += date.getTime();
+-							break;
+-						case "!":
+-							output += date.getTime() * 10000 + this._ticksTo1970;
+-							break;
+-						case "'":
+-							if (lookAhead("'")) {
+-								output += "'";
+-							} else {
+-								literal = true;
+-							}
+-							break;
+-						default:
+-							output += format.charAt(iFormat);
+-					}
+-				}
+-			}
+-		}
+-		return output;
+-	},
+-
+-	/* Extract all possible characters from the date format. */
+-	_possibleChars: function (format) {
+-		var iFormat,
+-			chars = "",
+-			literal = false,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					chars += format.charAt(iFormat);
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d": case "m": case "y": case "@":
+-						chars += "0123456789";
+-						break;
+-					case "D": case "M":
+-						return null; // Accept anything
+-					case "'":
+-						if (lookAhead("'")) {
+-							chars += "'";
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						chars += format.charAt(iFormat);
+-				}
+-			}
+-		}
+-		return chars;
+-	},
+-
+-	/* Get a setting value, defaulting if necessary. */
+-	_get: function(inst, name) {
+-		return inst.settings[name] !== undefined ?
+-			inst.settings[name] : this._defaults[name];
+-	},
+-
+-	/* Parse existing date and initialise date picker. */
+-	_setDateFromField: function(inst, noDefault) {
+-		if (inst.input.val() === inst.lastVal) {
+-			return;
+-		}
+-
+-		var dateFormat = this._get(inst, "dateFormat"),
+-			dates = inst.lastVal = inst.input ? inst.input.val() : null,
+-			defaultDate = this._getDefaultDate(inst),
+-			date = defaultDate,
+-			settings = this._getFormatConfig(inst);
+-
+-		try {
+-			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+-		} catch (event) {
+-			dates = (noDefault ? "" : dates);
+-		}
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		inst.currentDay = (dates ? date.getDate() : 0);
+-		inst.currentMonth = (dates ? date.getMonth() : 0);
+-		inst.currentYear = (dates ? date.getFullYear() : 0);
+-		this._adjustInstDate(inst);
+-	},
+-
+-	/* Retrieve the default date shown on opening. */
+-	_getDefaultDate: function(inst) {
+-		return this._restrictMinMax(inst,
+-			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+-	},
+-
+-	/* A date may be specified as an exact value or a relative one. */
+-	_determineDate: function(inst, date, defaultDate) {
+-		var offsetNumeric = function(offset) {
+-				var date = new Date();
+-				date.setDate(date.getDate() + offset);
+-				return date;
+-			},
+-			offsetString = function(offset) {
+-				try {
+-					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-						offset, $.datepicker._getFormatConfig(inst));
+-				}
+-				catch (e) {
+-					// Ignore
+-				}
+-
+-				var date = (offset.toLowerCase().match(/^c/) ?
+-					$.datepicker._getDate(inst) : null) || new Date(),
+-					year = date.getFullYear(),
+-					month = date.getMonth(),
+-					day = date.getDate(),
+-					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+-					matches = pattern.exec(offset);
+-
+-				while (matches) {
+-					switch (matches[2] || "d") {
+-						case "d" : case "D" :
+-							day += parseInt(matches[1],10); break;
+-						case "w" : case "W" :
+-							day += parseInt(matches[1],10) * 7; break;
+-						case "m" : case "M" :
+-							month += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-						case "y": case "Y" :
+-							year += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-					}
+-					matches = pattern.exec(offset);
+-				}
+-				return new Date(year, month, day);
+-			},
+-			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+-				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+-
+-		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+-		if (newDate) {
+-			newDate.setHours(0);
+-			newDate.setMinutes(0);
+-			newDate.setSeconds(0);
+-			newDate.setMilliseconds(0);
+-		}
+-		return this._daylightSavingAdjust(newDate);
+-	},
+-
+-	/* Handle switch to/from daylight saving.
+-	 * Hours may be non-zero on daylight saving cut-over:
+-	 * > 12 when midnight changeover, but then cannot generate
+-	 * midnight datetime, so jump to 1AM, otherwise reset.
+-	 * @param  date  (Date) the date to check
+-	 * @return  (Date) the corrected date
+-	 */
+-	_daylightSavingAdjust: function(date) {
+-		if (!date) {
+-			return null;
+-		}
+-		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+-		return date;
+-	},
+-
+-	/* Set the date(s) directly. */
+-	_setDate: function(inst, date, noChange) {
+-		var clear = !date,
+-			origMonth = inst.selectedMonth,
+-			origYear = inst.selectedYear,
+-			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+-
+-		inst.selectedDay = inst.currentDay = newDate.getDate();
+-		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+-		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+-		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+-			this._notifyChange(inst);
+-		}
+-		this._adjustInstDate(inst);
+-		if (inst.input) {
+-			inst.input.val(clear ? "" : this._formatDate(inst));
+-		}
+-	},
+-
+-	/* Retrieve the date(s) directly. */
+-	_getDate: function(inst) {
+-		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+-			this._daylightSavingAdjust(new Date(
+-			inst.currentYear, inst.currentMonth, inst.currentDay)));
+-			return startDate;
+-	},
+-
+-	/* Attach the onxxx handlers.  These are declared statically so
+-	 * they work with static code transformers like Caja.
+-	 */
+-	_attachHandlers: function(inst) {
+-		var stepMonths = this._get(inst, "stepMonths"),
+-			id = "#" + inst.id.replace( /\\\\/g, "\\" );
+-		inst.dpDiv.find("[data-handler]").map(function () {
+-			var handler = {
+-				prev: function () {
+-					$.datepicker._adjustDate(id, -stepMonths, "M");
+-				},
+-				next: function () {
+-					$.datepicker._adjustDate(id, +stepMonths, "M");
+-				},
+-				hide: function () {
+-					$.datepicker._hideDatepicker();
+-				},
+-				today: function () {
+-					$.datepicker._gotoToday(id);
+-				},
+-				selectDay: function () {
+-					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+-					return false;
+-				},
+-				selectMonth: function () {
+-					$.datepicker._selectMonthYear(id, this, "M");
+-					return false;
+-				},
+-				selectYear: function () {
+-					$.datepicker._selectMonthYear(id, this, "Y");
+-					return false;
+-				}
+-			};
+-			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+-		});
+-	},
+-
+-	/* Generate the HTML for the current state of the date picker. */
+-	_generateHTML: function(inst) {
+-		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+-			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+-			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+-			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+-			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+-			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+-			tempDate = new Date(),
+-			today = this._daylightSavingAdjust(
+-				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+-			isRTL = this._get(inst, "isRTL"),
+-			showButtonPanel = this._get(inst, "showButtonPanel"),
+-			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+-			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+-			numMonths = this._getNumberOfMonths(inst),
+-			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+-			stepMonths = this._get(inst, "stepMonths"),
+-			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+-			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+-				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			drawMonth = inst.drawMonth - showCurrentAtPos,
+-			drawYear = inst.drawYear;
+-
+-		if (drawMonth < 0) {
+-			drawMonth += 12;
+-			drawYear--;
+-		}
+-		if (maxDate) {
+-			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+-				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+-			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+-			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+-				drawMonth--;
+-				if (drawMonth < 0) {
+-					drawMonth = 11;
+-					drawYear--;
+-				}
+-			}
+-		}
+-		inst.drawMonth = drawMonth;
+-		inst.drawYear = drawYear;
+-
+-		prevText = this._get(inst, "prevText");
+-		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+-			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+-
+-		nextText = this._get(inst, "nextText");
+-		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+-			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+-
+-		currentText = this._get(inst, "currentText");
+-		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+-		currentText = (!navigationAsDateFormat ? currentText :
+-			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+-
+-		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+-			this._get(inst, "closeText") + "</button>" : "");
+-
+-		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+-			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+-			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+-
+-		firstDay = parseInt(this._get(inst, "firstDay"),10);
+-		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+-
+-		showWeek = this._get(inst, "showWeek");
+-		dayNames = this._get(inst, "dayNames");
+-		dayNamesMin = this._get(inst, "dayNamesMin");
+-		monthNames = this._get(inst, "monthNames");
+-		monthNamesShort = this._get(inst, "monthNamesShort");
+-		beforeShowDay = this._get(inst, "beforeShowDay");
+-		showOtherMonths = this._get(inst, "showOtherMonths");
+-		selectOtherMonths = this._get(inst, "selectOtherMonths");
+-		defaultDate = this._getDefaultDate(inst);
+-		html = "";
+-		dow;
+-		for (row = 0; row < numMonths[0]; row++) {
+-			group = "";
+-			this.maxRows = 4;
+-			for (col = 0; col < numMonths[1]; col++) {
+-				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+-				cornerClass = " ui-corner-all";
+-				calender = "";
+-				if (isMultiMonth) {
+-					calender += "<div class='ui-datepicker-group";
+-					if (numMonths[1] > 1) {
+-						switch (col) {
+-							case 0: calender += " ui-datepicker-group-first";
+-								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+-							case numMonths[1]-1: calender += " ui-datepicker-group-last";
+-								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+-							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+-						}
+-					}
+-					calender += "'>";
+-				}
+-				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+-					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+-					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+-					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+-					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+-					"</div><table class='ui-datepicker-calendar'><thead>" +
+-					"<tr>";
+-				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+-				for (dow = 0; dow < 7; dow++) { // days of the week
+-					day = (dow + firstDay) % 7;
+-					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+-						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+-				}
+-				calender += thead + "</tr></thead><tbody>";
+-				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+-				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+-					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+-				}
+-				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+-				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+-				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+-				this.maxRows = numRows;
+-				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+-				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+-					calender += "<tr>";
+-					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+-						this._get(inst, "calculateWeek")(printDate) + "</td>");
+-					for (dow = 0; dow < 7; dow++) { // create date picker days
+-						daySettings = (beforeShowDay ?
+-							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+-						otherMonth = (printDate.getMonth() !== drawMonth);
+-						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+-							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+-						tbody += "<td class='" +
+-							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+-							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+-							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+-							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+-							// or defaultDate is current printedDate and defaultDate is selectedDate
+-							" " + this._dayOverClass : "") + // highlight selected day
+-							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
+-							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+-							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+-							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+-							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+-							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+-							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+-							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+-							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+-							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+-							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+-							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+-						printDate.setDate(printDate.getDate() + 1);
+-						printDate = this._daylightSavingAdjust(printDate);
+-					}
+-					calender += tbody + "</tr>";
+-				}
+-				drawMonth++;
+-				if (drawMonth > 11) {
+-					drawMonth = 0;
+-					drawYear++;
+-				}
+-				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+-							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+-				group += calender;
+-			}
+-			html += group;
+-		}
+-		html += buttonPanel;
+-		inst._keyEvent = false;
+-		return html;
+-	},
+-
+-	/* Generate the month and year header. */
+-	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+-			secondary, monthNames, monthNamesShort) {
+-
+-		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+-			changeMonth = this._get(inst, "changeMonth"),
+-			changeYear = this._get(inst, "changeYear"),
+-			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+-			html = "<div class='ui-datepicker-title'>",
+-			monthHtml = "";
+-
+-		// month selection
+-		if (secondary || !changeMonth) {
+-			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+-		} else {
+-			inMinYear = (minDate && minDate.getFullYear() === drawYear);
+-			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+-			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+-			for ( month = 0; month < 12; month++) {
+-				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+-					monthHtml += "<option value='" + month + "'" +
+-						(month === drawMonth ? " selected='selected'" : "") +
+-						">" + monthNamesShort[month] + "</option>";
+-				}
+-			}
+-			monthHtml += "</select>";
+-		}
+-
+-		if (!showMonthAfterYear) {
+-			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+-		}
+-
+-		// year selection
+-		if ( !inst.yearshtml ) {
+-			inst.yearshtml = "";
+-			if (secondary || !changeYear) {
+-				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+-			} else {
+-				// determine range of years to display
+-				years = this._get(inst, "yearRange").split(":");
+-				thisYear = new Date().getFullYear();
+-				determineYear = function(value) {
+-					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+-						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+-						parseInt(value, 10)));
+-					return (isNaN(year) ? thisYear : year);
+-				};
+-				year = determineYear(years[0]);
+-				endYear = Math.max(year, determineYear(years[1] || ""));
+-				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+-				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+-				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+-				for (; year <= endYear; year++) {
+-					inst.yearshtml += "<option value='" + year + "'" +
+-						(year === drawYear ? " selected='selected'" : "") +
+-						">" + year + "</option>";
+-				}
+-				inst.yearshtml += "</select>";
+-
+-				html += inst.yearshtml;
+-				inst.yearshtml = null;
+-			}
+-		}
+-
+-		html += this._get(inst, "yearSuffix");
+-		if (showMonthAfterYear) {
+-			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+-		}
+-		html += "</div>"; // Close datepicker_header
+-		return html;
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustInstDate: function(inst, offset, period) {
+-		var year = inst.drawYear + (period === "Y" ? offset : 0),
+-			month = inst.drawMonth + (period === "M" ? offset : 0),
+-			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+-			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+-
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		if (period === "M" || period === "Y") {
+-			this._notifyChange(inst);
+-		}
+-	},
+-
+-	/* Ensure a date is within any min/max bounds. */
+-	_restrictMinMax: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			newDate = (minDate && date < minDate ? minDate : date);
+-		return (maxDate && newDate > maxDate ? maxDate : newDate);
+-	},
+-
+-	/* Notify change of month/year. */
+-	_notifyChange: function(inst) {
+-		var onChange = this._get(inst, "onChangeMonthYear");
+-		if (onChange) {
+-			onChange.apply((inst.input ? inst.input[0] : null),
+-				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+-		}
+-	},
+-
+-	/* Determine the number of months to show. */
+-	_getNumberOfMonths: function(inst) {
+-		var numMonths = this._get(inst, "numberOfMonths");
+-		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+-	},
+-
+-	/* Determine the current maximum date - ensure no time components are set. */
+-	_getMinMaxDate: function(inst, minMax) {
+-		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+-	},
+-
+-	/* Find the number of days in a given month. */
+-	_getDaysInMonth: function(year, month) {
+-		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+-	},
+-
+-	/* Find the day of the week of the first of a month. */
+-	_getFirstDayOfMonth: function(year, month) {
+-		return new Date(year, month, 1).getDay();
+-	},
+-
+-	/* Determines if we should allow a "next/prev" month display change. */
+-	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+-		var numMonths = this._getNumberOfMonths(inst),
+-			date = this._daylightSavingAdjust(new Date(curYear,
+-			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+-
+-		if (offset < 0) {
+-			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+-		}
+-		return this._isInRange(inst, date);
+-	},
+-
+-	/* Is the given date in the accepted range? */
+-	_isInRange: function(inst, date) {
+-		var yearSplit, currentYear,
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			minYear = null,
+-			maxYear = null,
+-			years = this._get(inst, "yearRange");
+-			if (years){
+-				yearSplit = years.split(":");
+-				currentYear = new Date().getFullYear();
+-				minYear = parseInt(yearSplit[0], 10);
+-				maxYear = parseInt(yearSplit[1], 10);
+-				if ( yearSplit[0].match(/[+\-].*/) ) {
+-					minYear += currentYear;
+-				}
+-				if ( yearSplit[1].match(/[+\-].*/) ) {
+-					maxYear += currentYear;
+-				}
+-			}
+-
+-		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+-			(!maxDate || date.getTime() <= maxDate.getTime()) &&
+-			(!minYear || date.getFullYear() >= minYear) &&
+-			(!maxYear || date.getFullYear() <= maxYear));
+-	},
+-
+-	/* Provide the configuration settings for formatting/parsing. */
+-	_getFormatConfig: function(inst) {
+-		var shortYearCutoff = this._get(inst, "shortYearCutoff");
+-		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+-			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		return {shortYearCutoff: shortYearCutoff,
+-			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+-			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+-	},
+-
+-	/* Format the given date for display. */
+-	_formatDate: function(inst, day, month, year) {
+-		if (!day) {
+-			inst.currentDay = inst.selectedDay;
+-			inst.currentMonth = inst.selectedMonth;
+-			inst.currentYear = inst.selectedYear;
+-		}
+-		var date = (day ? (typeof day === "object" ? day :
+-			this._daylightSavingAdjust(new Date(year, month, day))) :
+-			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+-	}
+-});
+-
+-/*
+- * Bind hover events for datepicker elements.
+- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+- */
+-function bindHover(dpDiv) {
+-	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+-	return dpDiv.delegate(selector, "mouseout", function() {
+-			$(this).removeClass("ui-state-hover");
+-			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-				$(this).removeClass("ui-datepicker-prev-hover");
+-			}
+-			if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-				$(this).removeClass("ui-datepicker-next-hover");
+-			}
+-		})
+-		.delegate(selector, "mouseover", function(){
+-			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
+-				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+-				$(this).addClass("ui-state-hover");
+-				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-					$(this).addClass("ui-datepicker-prev-hover");
+-				}
+-				if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-					$(this).addClass("ui-datepicker-next-hover");
+-				}
+-			}
+-		});
+-}
+-
+-/* jQuery extend now ignores nulls! */
+-function extendRemove(target, props) {
+-	$.extend(target, props);
+-	for (var name in props) {
+-		if (props[name] == null) {
+-			target[name] = props[name];
+-		}
+-	}
+-	return target;
+-}
+-
+-/* Invoke the datepicker functionality.
+-   @param  options  string - a command, optionally followed by additional parameters or
+-					Object - settings for attaching new datepicker functionality
+-   @return  jQuery object */
+-$.fn.datepicker = function(options){
+-
+-	/* Verify an empty collection wasn't passed - Fixes #6976 */
+-	if ( !this.length ) {
+-		return this;
+-	}
+-
+-	/* Initialise the date picker. */
+-	if (!$.datepicker.initialized) {
+-		$(document).mousedown($.datepicker._checkExternalClick);
+-		$.datepicker.initialized = true;
+-	}
+-
+-	/* Append datepicker main container to body if not exist. */
+-	if ($("#"+$.datepicker._mainDivId).length === 0) {
+-		$("body").append($.datepicker.dpDiv);
+-	}
+-
+-	var otherArgs = Array.prototype.slice.call(arguments, 1);
+-	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	return this.each(function() {
+-		typeof options === "string" ?
+-			$.datepicker["_" + options + "Datepicker"].
+-				apply($.datepicker, [this].concat(otherArgs)) :
+-			$.datepicker._attachDatepicker(this, options);
+-	});
+-};
+-
+-$.datepicker = new Datepicker(); // singleton instance
+-$.datepicker.initialized = false;
+-$.datepicker.uuid = new Date().getTime();
+-$.datepicker.version = "1.10.3";
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var sizeRelatedOptions = {
+-		buttons: true,
+-		height: true,
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true,
+-		width: true
+-	},
+-	resizableRelatedOptions = {
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true
+-	};
+-
+-$.widget( "ui.dialog", {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoOpen: true,
+-		buttons: [],
+-		closeOnEscape: true,
+-		closeText: "close",
+-		dialogClass: "",
+-		draggable: true,
+-		hide: null,
+-		height: "auto",
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 150,
+-		minWidth: 150,
+-		modal: false,
+-		position: {
+-			my: "center",
+-			at: "center",
+-			of: window,
+-			collision: "fit",
+-			// Ensure the titlebar is always visible
+-			using: function( pos ) {
+-				var topOffset = $( this ).css( pos ).offset().top;
+-				if ( topOffset < 0 ) {
+-					$( this ).css( "top", pos.top - topOffset );
+-				}
+-			}
+-		},
+-		resizable: true,
+-		show: null,
+-		title: null,
+-		width: 300,
+-
+-		// callbacks
+-		beforeClose: null,
+-		close: null,
+-		drag: null,
+-		dragStart: null,
+-		dragStop: null,
+-		focus: null,
+-		open: null,
+-		resize: null,
+-		resizeStart: null,
+-		resizeStop: null
+-	},
+-
+-	_create: function() {
+-		this.originalCss = {
+-			display: this.element[0].style.display,
+-			width: this.element[0].style.width,
+-			minHeight: this.element[0].style.minHeight,
+-			maxHeight: this.element[0].style.maxHeight,
+-			height: this.element[0].style.height
+-		};
+-		this.originalPosition = {
+-			parent: this.element.parent(),
+-			index: this.element.parent().children().index( this.element )
+-		};
+-		this.originalTitle = this.element.attr("title");
+-		this.options.title = this.options.title || this.originalTitle;
+-
+-		this._createWrapper();
+-
+-		this.element
+-			.show()
+-			.removeAttr("title")
+-			.addClass("ui-dialog-content ui-widget-content")
+-			.appendTo( this.uiDialog );
+-
+-		this._createTitlebar();
+-		this._createButtonPane();
+-
+-		if ( this.options.draggable && $.fn.draggable ) {
+-			this._makeDraggable();
+-		}
+-		if ( this.options.resizable && $.fn.resizable ) {
+-			this._makeResizable();
+-		}
+-
+-		this._isOpen = false;
+-	},
+-
+-	_init: function() {
+-		if ( this.options.autoOpen ) {
+-			this.open();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-		if ( element && (element.jquery || element.nodeType) ) {
+-			return $( element );
+-		}
+-		return this.document.find( element || "body" ).eq( 0 );
+-	},
+-
+-	_destroy: function() {
+-		var next,
+-			originalPosition = this.originalPosition;
+-
+-		this._destroyOverlay();
+-
+-		this.element
+-			.removeUniqueId()
+-			.removeClass("ui-dialog-content ui-widget-content")
+-			.css( this.originalCss )
+-			// Without detaching first, the following becomes really slow
+-			.detach();
+-
+-		this.uiDialog.stop( true, true ).remove();
+-
+-		if ( this.originalTitle ) {
+-			this.element.attr( "title", this.originalTitle );
+-		}
+-
+-		next = originalPosition.parent.children().eq( originalPosition.index );
+-		// Don't try to place the dialog next to itself (#8613)
+-		if ( next.length && next[0] !== this.element[0] ) {
+-			next.before( this.element );
+-		} else {
+-			originalPosition.parent.append( this.element );
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.uiDialog;
+-	},
+-
+-	disable: $.noop,
+-	enable: $.noop,
+-
+-	close: function( event ) {
+-		var that = this;
+-
+-		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+-			return;
+-		}
+-
+-		this._isOpen = false;
+-		this._destroyOverlay();
+-
+-		if ( !this.opener.filter(":focusable").focus().length ) {
+-			// Hiding a focused element doesn't trigger blur in WebKit
+-			// so in case we have nothing to focus on, explicitly blur the active element
+-			// https://bugs.webkit.org/show_bug.cgi?id=47182
+-			$( this.document[0].activeElement ).blur();
+-		}
+-
+-		this._hide( this.uiDialog, this.options.hide, function() {
+-			that._trigger( "close", event );
+-		});
+-	},
+-
+-	isOpen: function() {
+-		return this._isOpen;
+-	},
+-
+-	moveToTop: function() {
+-		this._moveToTop();
+-	},
+-
+-	_moveToTop: function( event, silent ) {
+-		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
+-		if ( moved && !silent ) {
+-			this._trigger( "focus", event );
+-		}
+-		return moved;
+-	},
+-
+-	open: function() {
+-		var that = this;
+-		if ( this._isOpen ) {
+-			if ( this._moveToTop() ) {
+-				this._focusTabbable();
+-			}
+-			return;
+-		}
+-
+-		this._isOpen = true;
+-		this.opener = $( this.document[0].activeElement );
+-
+-		this._size();
+-		this._position();
+-		this._createOverlay();
+-		this._moveToTop( null, true );
+-		this._show( this.uiDialog, this.options.show, function() {
+-			that._focusTabbable();
+-			that._trigger("focus");
+-		});
+-
+-		this._trigger("open");
+-	},
+-
+-	_focusTabbable: function() {
+-		// Set focus to the first match:
+-		// 1. First element inside the dialog matching [autofocus]
+-		// 2. Tabbable element inside the content element
+-		// 3. Tabbable element inside the buttonpane
+-		// 4. The close button
+-		// 5. The dialog itself
+-		var hasFocus = this.element.find("[autofocus]");
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.element.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogButtonPane.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialog;
+-		}
+-		hasFocus.eq( 0 ).focus();
+-	},
+-
+-	_keepFocus: function( event ) {
+-		function checkFocus() {
+-			var activeElement = this.document[0].activeElement,
+-				isActive = this.uiDialog[0] === activeElement ||
+-					$.contains( this.uiDialog[0], activeElement );
+-			if ( !isActive ) {
+-				this._focusTabbable();
+-			}
+-		}
+-		event.preventDefault();
+-		checkFocus.call( this );
+-		// support: IE
+-		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+-		// so we check again later
+-		this._delay( checkFocus );
+-	},
+-
+-	_createWrapper: function() {
+-		this.uiDialog = $("<div>")
+-			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+-				this.options.dialogClass )
+-			.hide()
+-			.attr({
+-				// Setting tabIndex makes the div focusable
+-				tabIndex: -1,
+-				role: "dialog"
+-			})
+-			.appendTo( this._appendTo() );
+-
+-		this._on( this.uiDialog, {
+-			keydown: function( event ) {
+-				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+-						event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					event.preventDefault();
+-					this.close( event );
+-					return;
+-				}
+-
+-				// prevent tabbing out of dialogs
+-				if ( event.keyCode !== $.ui.keyCode.TAB ) {
+-					return;
+-				}
+-				var tabbables = this.uiDialog.find(":tabbable"),
+-					first = tabbables.filter(":first"),
+-					last  = tabbables.filter(":last");
+-
+-				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+-					first.focus( 1 );
+-					event.preventDefault();
+-				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+-					last.focus( 1 );
+-					event.preventDefault();
+-				}
+-			},
+-			mousedown: function( event ) {
+-				if ( this._moveToTop( event ) ) {
+-					this._focusTabbable();
+-				}
+-			}
+-		});
+-
+-		// We assume that any existing aria-describedby attribute means
+-		// that the dialog content is marked up properly
+-		// otherwise we brute force the content as the description
+-		if ( !this.element.find("[aria-describedby]").length ) {
+-			this.uiDialog.attr({
+-				"aria-describedby": this.element.uniqueId().attr("id")
+-			});
+-		}
+-	},
+-
+-	_createTitlebar: function() {
+-		var uiDialogTitle;
+-
+-		this.uiDialogTitlebar = $("<div>")
+-			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+-			.prependTo( this.uiDialog );
+-		this._on( this.uiDialogTitlebar, {
+-			mousedown: function( event ) {
+-				// Don't prevent click on close button (#8838)
+-				// Focusing a dialog that is partially scrolled out of view
+-				// causes the browser to scroll it into view, preventing the click event
+-				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
+-					// Dialog isn't getting focus when dragging (#8063)
+-					this.uiDialog.focus();
+-				}
+-			}
+-		});
+-
+-		this.uiDialogTitlebarClose = $("<button></button>")
+-			.button({
+-				label: this.options.closeText,
+-				icons: {
+-					primary: "ui-icon-closethick"
+-				},
+-				text: false
+-			})
+-			.addClass("ui-dialog-titlebar-close")
+-			.appendTo( this.uiDialogTitlebar );
+-		this._on( this.uiDialogTitlebarClose, {
+-			click: function( event ) {
+-				event.preventDefault();
+-				this.close( event );
+-			}
+-		});
+-
+-		uiDialogTitle = $("<span>")
+-			.uniqueId()
+-			.addClass("ui-dialog-title")
+-			.prependTo( this.uiDialogTitlebar );
+-		this._title( uiDialogTitle );
+-
+-		this.uiDialog.attr({
+-			"aria-labelledby": uiDialogTitle.attr("id")
+-		});
+-	},
+-
+-	_title: function( title ) {
+-		if ( !this.options.title ) {
+-			title.html("&#160;");
+-		}
+-		title.text( this.options.title );
+-	},
+-
+-	_createButtonPane: function() {
+-		this.uiDialogButtonPane = $("<div>")
+-			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+-
+-		this.uiButtonSet = $("<div>")
+-			.addClass("ui-dialog-buttonset")
+-			.appendTo( this.uiDialogButtonPane );
+-
+-		this._createButtons();
+-	},
+-
+-	_createButtons: function() {
+-		var that = this,
+-			buttons = this.options.buttons;
+-
+-		// if we already have a button pane, remove it
+-		this.uiDialogButtonPane.remove();
+-		this.uiButtonSet.empty();
+-
+-		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+-			this.uiDialog.removeClass("ui-dialog-buttons");
+-			return;
+-		}
+-
+-		$.each( buttons, function( name, props ) {
+-			var click, buttonOptions;
+-			props = $.isFunction( props ) ?
+-				{ click: props, text: name } :
+-				props;
+-			// Default to a non-submitting button
+-			props = $.extend( { type: "button" }, props );
+-			// Change the context for the click callback to be the main element
+-			click = props.click;
+-			props.click = function() {
+-				click.apply( that.element[0], arguments );
+-			};
+-			buttonOptions = {
+-				icons: props.icons,
+-				text: props.showText
+-			};
+-			delete props.icons;
+-			delete props.showText;
+-			$( "<button></button>", props )
+-				.button( buttonOptions )
+-				.appendTo( that.uiButtonSet );
+-		});
+-		this.uiDialog.addClass("ui-dialog-buttons");
+-		this.uiDialogButtonPane.appendTo( this.uiDialog );
+-	},
+-
+-	_makeDraggable: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		function filteredUi( ui ) {
+-			return {
+-				position: ui.position,
+-				offset: ui.offset
+-			};
+-		}
+-
+-		this.uiDialog.draggable({
+-			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+-			handle: ".ui-dialog-titlebar",
+-			containment: "document",
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-dragging");
+-				that._blockFrames();
+-				that._trigger( "dragStart", event, filteredUi( ui ) );
+-			},
+-			drag: function( event, ui ) {
+-				that._trigger( "drag", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.position = [
+-					ui.position.left - that.document.scrollLeft(),
+-					ui.position.top - that.document.scrollTop()
+-				];
+-				$( this ).removeClass("ui-dialog-dragging");
+-				that._unblockFrames();
+-				that._trigger( "dragStop", event, filteredUi( ui ) );
+-			}
+-		});
+-	},
+-
+-	_makeResizable: function() {
+-		var that = this,
+-			options = this.options,
+-			handles = options.resizable,
+-			// .ui-resizable has position: relative defined in the stylesheet
+-			// but dialogs have to use absolute or fixed positioning
+-			position = this.uiDialog.css("position"),
+-			resizeHandles = typeof handles === "string" ?
+-				handles	:
+-				"n,e,s,w,se,sw,ne,nw";
+-
+-		function filteredUi( ui ) {
+-			return {
+-				originalPosition: ui.originalPosition,
+-				originalSize: ui.originalSize,
+-				position: ui.position,
+-				size: ui.size
+-			};
+-		}
+-
+-		this.uiDialog.resizable({
+-			cancel: ".ui-dialog-content",
+-			containment: "document",
+-			alsoResize: this.element,
+-			maxWidth: options.maxWidth,
+-			maxHeight: options.maxHeight,
+-			minWidth: options.minWidth,
+-			minHeight: this._minHeight(),
+-			handles: resizeHandles,
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-resizing");
+-				that._blockFrames();
+-				that._trigger( "resizeStart", event, filteredUi( ui ) );
+-			},
+-			resize: function( event, ui ) {
+-				that._trigger( "resize", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.height = $( this ).height();
+-				options.width = $( this ).width();
+-				$( this ).removeClass("ui-dialog-resizing");
+-				that._unblockFrames();
+-				that._trigger( "resizeStop", event, filteredUi( ui ) );
+-			}
+-		})
+-		.css( "position", position );
+-	},
+-
+-	_minHeight: function() {
+-		var options = this.options;
+-
+-		return options.height === "auto" ?
+-			options.minHeight :
+-			Math.min( options.minHeight, options.height );
+-	},
+-
+-	_position: function() {
+-		// Need to show the dialog to get the actual offset in the position plugin
+-		var isVisible = this.uiDialog.is(":visible");
+-		if ( !isVisible ) {
+-			this.uiDialog.show();
+-		}
+-		this.uiDialog.position( this.options.position );
+-		if ( !isVisible ) {
+-			this.uiDialog.hide();
+-		}
+-	},
+-
+-	_setOptions: function( options ) {
+-		var that = this,
+-			resize = false,
+-			resizableOptions = {};
+-
+-		$.each( options, function( key, value ) {
+-			that._setOption( key, value );
+-
+-			if ( key in sizeRelatedOptions ) {
+-				resize = true;
+-			}
+-			if ( key in resizableRelatedOptions ) {
+-				resizableOptions[ key ] = value;
+-			}
+-		});
+-
+-		if ( resize ) {
+-			this._size();
+-			this._position();
+-		}
+-		if ( this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", resizableOptions );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		/*jshint maxcomplexity:15*/
+-		var isDraggable, isResizable,
+-			uiDialog = this.uiDialog;
+-
+-		if ( key === "dialogClass" ) {
+-			uiDialog
+-				.removeClass( this.options.dialogClass )
+-				.addClass( value );
+-		}
+-
+-		if ( key === "disabled" ) {
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "appendTo" ) {
+-			this.uiDialog.appendTo( this._appendTo() );
+-		}
+-
+-		if ( key === "buttons" ) {
+-			this._createButtons();
+-		}
+-
+-		if ( key === "closeText" ) {
+-			this.uiDialogTitlebarClose.button({
+-				// Ensure that we always pass a string
+-				label: "" + value
+-			});
+-		}
+-
+-		if ( key === "draggable" ) {
+-			isDraggable = uiDialog.is(":data(ui-draggable)");
+-			if ( isDraggable && !value ) {
+-				uiDialog.draggable("destroy");
+-			}
+-
+-			if ( !isDraggable && value ) {
+-				this._makeDraggable();
+-			}
+-		}
+-
+-		if ( key === "position" ) {
+-			this._position();
+-		}
+-
+-		if ( key === "resizable" ) {
+-			// currently resizable, becoming non-resizable
+-			isResizable = uiDialog.is(":data(ui-resizable)");
+-			if ( isResizable && !value ) {
+-				uiDialog.resizable("destroy");
+-			}
+-
+-			// currently resizable, changing handles
+-			if ( isResizable && typeof value === "string" ) {
+-				uiDialog.resizable( "option", "handles", value );
+-			}
+-
+-			// currently non-resizable, becoming resizable
+-			if ( !isResizable && value !== false ) {
+-				this._makeResizable();
+-			}
+-		}
+-
+-		if ( key === "title" ) {
+-			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
+-		}
+-	},
+-
+-	_size: function() {
+-		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+-		// divs will both have width and height set, so we need to reset them
+-		var nonContentHeight, minContentHeight, maxContentHeight,
+-			options = this.options;
+-
+-		// Reset content sizing
+-		this.element.show().css({
+-			width: "auto",
+-			minHeight: 0,
+-			maxHeight: "none",
+-			height: 0
+-		});
+-
+-		if ( options.minWidth > options.width ) {
+-			options.width = options.minWidth;
+-		}
+-
+-		// reset wrapper sizing
+-		// determine the height of all the non-content elements
+-		nonContentHeight = this.uiDialog.css({
+-				height: "auto",
+-				width: options.width
+-			})
+-			.outerHeight();
+-		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+-		maxContentHeight = typeof options.maxHeight === "number" ?
+-			Math.max( 0, options.maxHeight - nonContentHeight ) :
+-			"none";
+-
+-		if ( options.height === "auto" ) {
+-			this.element.css({
+-				minHeight: minContentHeight,
+-				maxHeight: maxContentHeight,
+-				height: "auto"
+-			});
+-		} else {
+-			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+-		}
+-
+-		if (this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+-		}
+-	},
+-
+-	_blockFrames: function() {
+-		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+-			var iframe = $( this );
+-
+-			return $( "<div>" )
+-				.css({
+-					position: "absolute",
+-					width: iframe.outerWidth(),
+-					height: iframe.outerHeight()
+-				})
+-				.appendTo( iframe.parent() )
+-				.offset( iframe.offset() )[0];
+-		});
+-	},
+-
+-	_unblockFrames: function() {
+-		if ( this.iframeBlocks ) {
+-			this.iframeBlocks.remove();
+-			delete this.iframeBlocks;
+-		}
+-	},
+-
+-	_allowInteraction: function( event ) {
+-		if ( $( event.target ).closest(".ui-dialog").length ) {
+-			return true;
+-		}
+-
+-		// TODO: Remove hack when datepicker implements
+-		// the .ui-front logic (#8989)
+-		return !!$( event.target ).closest(".ui-datepicker").length;
+-	},
+-
+-	_createOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		var that = this,
+-			widgetFullName = this.widgetFullName;
+-		if ( !$.ui.dialog.overlayInstances ) {
+-			// Prevent use of anchors and inputs.
+-			// We use a delay in case the overlay is created from an
+-			// event that we're going to be cancelling. (#2804)
+-			this._delay(function() {
+-				// Handle .dialog().dialog("close") (#4065)
+-				if ( $.ui.dialog.overlayInstances ) {
+-					this.document.bind( "focusin.dialog", function( event ) {
+-						if ( !that._allowInteraction( event ) ) {
+-							event.preventDefault();
+-							$(".ui-dialog:visible:last .ui-dialog-content")
+-								.data( widgetFullName )._focusTabbable();
+-						}
+-					});
+-				}
+-			});
+-		}
+-
+-		this.overlay = $("<div>")
+-			.addClass("ui-widget-overlay ui-front")
+-			.appendTo( this._appendTo() );
+-		this._on( this.overlay, {
+-			mousedown: "_keepFocus"
+-		});
+-		$.ui.dialog.overlayInstances++;
+-	},
+-
+-	_destroyOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		if ( this.overlay ) {
+-			$.ui.dialog.overlayInstances--;
+-
+-			if ( !$.ui.dialog.overlayInstances ) {
+-				this.document.unbind( "focusin.dialog" );
+-			}
+-			this.overlay.remove();
+-			this.overlay = null;
+-		}
+-	}
+-});
+-
+-$.ui.dialog.overlayInstances = 0;
+-
+-// DEPRECATED
+-if ( $.uiBackCompat !== false ) {
+-	// position option with array notation
+-	// just override with old implementation
+-	$.widget( "ui.dialog", $.ui.dialog, {
+-		_position: function() {
+-			var position = this.options.position,
+-				myAt = [],
+-				offset = [ 0, 0 ],
+-				isVisible;
+-
+-			if ( position ) {
+-				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+-					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
+-					if ( myAt.length === 1 ) {
+-						myAt[1] = myAt[0];
+-					}
+-
+-					$.each( [ "left", "top" ], function( i, offsetPosition ) {
+-						if ( +myAt[ i ] === myAt[ i ] ) {
+-							offset[ i ] = myAt[ i ];
+-							myAt[ i ] = offsetPosition;
+-						}
+-					});
+-
+-					position = {
+-						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+-							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+-						at: myAt.join(" ")
+-					};
+-				}
+-
+-				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
+-			} else {
+-				position = $.ui.dialog.prototype.options.position;
+-			}
+-
+-			// need to show the dialog to get the actual offset in the position plugin
+-			isVisible = this.uiDialog.is(":visible");
+-			if ( !isVisible ) {
+-				this.uiDialog.show();
+-			}
+-			this.uiDialog.position( position );
+-			if ( !isVisible ) {
+-				this.uiDialog.hide();
+-			}
+-		}
+-	});
+-}
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.widget( "ui.menu", {
+-	version: "1.10.3",
+-	defaultElement: "<ul>",
+-	delay: 300,
+-	options: {
+-		icons: {
+-			submenu: "ui-icon-carat-1-e"
+-		},
+-		menus: "ul",
+-		position: {
+-			my: "left top",
+-			at: "right top"
+-		},
+-		role: "menu",
+-
+-		// callbacks
+-		blur: null,
+-		focus: null,
+-		select: null
+-	},
+-
+-	_create: function() {
+-		this.activeMenu = this.element;
+-		// flag used to prevent firing of the click handler
+-		// as the event bubbles up through nested menus
+-		this.mouseHandled = false;
+-		this.element
+-			.uniqueId()
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+-			.attr({
+-				role: this.options.role,
+-				tabIndex: 0
+-			})
+-			// need to catch all clicks on disabled menu
+-			// not possible through _on
+-			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
+-				if ( this.options.disabled ) {
+-					event.preventDefault();
+-				}
+-			}, this ));
+-
+-		if ( this.options.disabled ) {
+-			this.element
+-				.addClass( "ui-state-disabled" )
+-				.attr( "aria-disabled", "true" );
+-		}
+-
+-		this._on({
+-			// Prevent focus from sticking to links inside menu after clicking
+-			// them (focus should always stay on UL during navigation).
+-			"mousedown .ui-menu-item > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-state-disabled > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-menu-item:has(a)": function( event ) {
+-				var target = $( event.target ).closest( ".ui-menu-item" );
+-				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+-					this.mouseHandled = true;
+-
+-					this.select( event );
+-					// Open submenu on click
+-					if ( target.has( ".ui-menu" ).length ) {
+-						this.expand( event );
+-					} else if ( !this.element.is( ":focus" ) ) {
+-						// Redirect focus to the menu
+-						this.element.trigger( "focus", [ true ] );
+-
+-						// If the active item is on the top level, let it stay active.
+-						// Otherwise, blur the active item since it is no longer visible.
+-						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+-							clearTimeout( this.timer );
+-						}
+-					}
+-				}
+-			},
+-			"mouseenter .ui-menu-item": function( event ) {
+-				var target = $( event.currentTarget );
+-				// Remove ui-state-active class from siblings of the newly focused menu item
+-				// to avoid a jump caused by adjacent elements both having a class with a border
+-				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
+-				this.focus( event, target );
+-			},
+-			mouseleave: "collapseAll",
+-			"mouseleave .ui-menu": "collapseAll",
+-			focus: function( event, keepActiveItem ) {
+-				// If there's already an active item, keep it active
+-				// If not, activate the first item
+-				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+-
+-				if ( !keepActiveItem ) {
+-					this.focus( event, item );
+-				}
+-			},
+-			blur: function( event ) {
+-				this._delay(function() {
+-					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+-						this.collapseAll( event );
+-					}
+-				});
+-			},
+-			keydown: "_keydown"
+-		});
+-
+-		this.refresh();
+-
+-		// Clicks outside of a menu collapse any open menus
+-		this._on( this.document, {
+-			click: function( event ) {
+-				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
+-					this.collapseAll( event );
+-				}
+-
+-				// Reset the mouseHandled flag
+-				this.mouseHandled = false;
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		// Destroy (sub)menus
+-		this.element
+-			.removeAttr( "aria-activedescendant" )
+-			.find( ".ui-menu" ).addBack()
+-				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
+-				.removeAttr( "role" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "aria-labelledby" )
+-				.removeAttr( "aria-expanded" )
+-				.removeAttr( "aria-hidden" )
+-				.removeAttr( "aria-disabled" )
+-				.removeUniqueId()
+-				.show();
+-
+-		// Destroy menu items
+-		this.element.find( ".ui-menu-item" )
+-			.removeClass( "ui-menu-item" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-disabled" )
+-			.children( "a" )
+-				.removeUniqueId()
+-				.removeClass( "ui-corner-all ui-state-hover" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "role" )
+-				.removeAttr( "aria-haspopup" )
+-				.children().each( function() {
+-					var elem = $( this );
+-					if ( elem.data( "ui-menu-submenu-carat" ) ) {
+-						elem.remove();
+-					}
+-				});
+-
+-		// Destroy menu dividers
+-		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:20*/
+-		var match, prev, character, skip, regex,
+-			preventDefault = true;
+-
+-		function escape( value ) {
+-			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+-		}
+-
+-		switch ( event.keyCode ) {
+-		case $.ui.keyCode.PAGE_UP:
+-			this.previousPage( event );
+-			break;
+-		case $.ui.keyCode.PAGE_DOWN:
+-			this.nextPage( event );
+-			break;
+-		case $.ui.keyCode.HOME:
+-			this._move( "first", "first", event );
+-			break;
+-		case $.ui.keyCode.END:
+-			this._move( "last", "last", event );
+-			break;
+-		case $.ui.keyCode.UP:
+-			this.previous( event );
+-			break;
+-		case $.ui.keyCode.DOWN:
+-			this.next( event );
+-			break;
+-		case $.ui.keyCode.LEFT:
+-			this.collapse( event );
+-			break;
+-		case $.ui.keyCode.RIGHT:
+-			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+-				this.expand( event );
+-			}
+-			break;
+-		case $.ui.keyCode.ENTER:
+-		case $.ui.keyCode.SPACE:
+-			this._activate( event );
+-			break;
+-		case $.ui.keyCode.ESCAPE:
+-			this.collapse( event );
+-			break;
+-		default:
+-			preventDefault = false;
+-			prev = this.previousFilter || "";
+-			character = String.fromCharCode( event.keyCode );
+-			skip = false;
+-
+-			clearTimeout( this.filterTimer );
+-
+-			if ( character === prev ) {
+-				skip = true;
+-			} else {
+-				character = prev + character;
+-			}
+-
+-			regex = new RegExp( "^" + escape( character ), "i" );
+-			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-				return regex.test( $( this ).children( "a" ).text() );
+-			});
+-			match = skip && match.index( this.active.next() ) !== -1 ?
+-				this.active.nextAll( ".ui-menu-item" ) :
+-				match;
+-
+-			// If no matches on the current filter, reset to the last character pressed
+-			// to move down the menu to the first item that starts with that character
+-			if ( !match.length ) {
+-				character = String.fromCharCode( event.keyCode );
+-				regex = new RegExp( "^" + escape( character ), "i" );
+-				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-					return regex.test( $( this ).children( "a" ).text() );
+-				});
+-			}
+-
+-			if ( match.length ) {
+-				this.focus( event, match );
+-				if ( match.length > 1 ) {
+-					this.previousFilter = character;
+-					this.filterTimer = this._delay(function() {
+-						delete this.previousFilter;
+-					}, 1000 );
+-				} else {
+-					delete this.previousFilter;
+-				}
+-			} else {
+-				delete this.previousFilter;
+-			}
+-		}
+-
+-		if ( preventDefault ) {
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_activate: function( event ) {
+-		if ( !this.active.is( ".ui-state-disabled" ) ) {
+-			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
+-				this.expand( event );
+-			} else {
+-				this.select( event );
+-			}
+-		}
+-	},
+-
+-	refresh: function() {
+-		var menus,
+-			icon = this.options.icons.submenu,
+-			submenus = this.element.find( this.options.menus );
+-
+-		// Initialize nested menus
+-		submenus.filter( ":not(.ui-menu)" )
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.hide()
+-			.attr({
+-				role: this.options.role,
+-				"aria-hidden": "true",
+-				"aria-expanded": "false"
+-			})
+-			.each(function() {
+-				var menu = $( this ),
+-					item = menu.prev( "a" ),
+-					submenuCarat = $( "<span>" )
+-						.addClass( "ui-menu-icon ui-icon " + icon )
+-						.data( "ui-menu-submenu-carat", true );
+-
+-				item
+-					.attr( "aria-haspopup", "true" )
+-					.prepend( submenuCarat );
+-				menu.attr( "aria-labelledby", item.attr( "id" ) );
+-			});
+-
+-		menus = submenus.add( this.element );
+-
+-		// Don't refresh list items that are already adapted
+-		menus.children( ":not(.ui-menu-item):has(a)" )
+-			.addClass( "ui-menu-item" )
+-			.attr( "role", "presentation" )
+-			.children( "a" )
+-				.uniqueId()
+-				.addClass( "ui-corner-all" )
+-				.attr({
+-					tabIndex: -1,
+-					role: this._itemRole()
+-				});
+-
+-		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
+-		menus.children( ":not(.ui-menu-item)" ).each(function() {
+-			var item = $( this );
+-			// hyphen, em dash, en dash
+-			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
+-				item.addClass( "ui-widget-content ui-menu-divider" );
+-			}
+-		});
+-
+-		// Add aria-disabled attribute to any disabled menu item
+-		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+-
+-		// If the active item has been removed, blur the menu
+-		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			this.blur();
+-		}
+-	},
+-
+-	_itemRole: function() {
+-		return {
+-			menu: "menuitem",
+-			listbox: "option"
+-		}[ this.options.role ];
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "icons" ) {
+-			this.element.find( ".ui-menu-icon" )
+-				.removeClass( this.options.icons.submenu )
+-				.addClass( value.submenu );
+-		}
+-		this._super( key, value );
+-	},
+-
+-	focus: function( event, item ) {
+-		var nested, focused;
+-		this.blur( event, event && event.type === "focus" );
+-
+-		this._scrollIntoView( item );
+-
+-		this.active = item.first();
+-		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
+-		// Only update aria-activedescendant if there's a role
+-		// otherwise we assume focus is managed elsewhere
+-		if ( this.options.role ) {
+-			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+-		}
+-
+-		// Highlight active parent menu item, if any
+-		this.active
+-			.parent()
+-			.closest( ".ui-menu-item" )
+-			.children( "a:first" )
+-			.addClass( "ui-state-active" );
+-
+-		if ( event && event.type === "keydown" ) {
+-			this._close();
+-		} else {
+-			this.timer = this._delay(function() {
+-				this._close();
+-			}, this.delay );
+-		}
+-
+-		nested = item.children( ".ui-menu" );
+-		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
+-			this._startOpening(nested);
+-		}
+-		this.activeMenu = item.parent();
+-
+-		this._trigger( "focus", event, { item: item } );
+-	},
+-
+-	_scrollIntoView: function( item ) {
+-		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+-		if ( this._hasScroll() ) {
+-			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+-			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+-			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+-			scroll = this.activeMenu.scrollTop();
+-			elementHeight = this.activeMenu.height();
+-			itemHeight = item.height();
+-
+-			if ( offset < 0 ) {
+-				this.activeMenu.scrollTop( scroll + offset );
+-			} else if ( offset + itemHeight > elementHeight ) {
+-				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+-			}
+-		}
+-	},
+-
+-	blur: function( event, fromFocus ) {
+-		if ( !fromFocus ) {
+-			clearTimeout( this.timer );
+-		}
+-
+-		if ( !this.active ) {
+-			return;
+-		}
+-
+-		this.active.children( "a" ).removeClass( "ui-state-focus" );
+-		this.active = null;
+-
+-		this._trigger( "blur", event, { item: this.active } );
+-	},
+-
+-	_startOpening: function( submenu ) {
+-		clearTimeout( this.timer );
+-
+-		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
+-		// shift in the submenu position when mousing over the carat icon
+-		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+-			return;
+-		}
+-
+-		this.timer = this._delay(function() {
+-			this._close();
+-			this._open( submenu );
+-		}, this.delay );
+-	},
+-
+-	_open: function( submenu ) {
+-		var position = $.extend({
+-			of: this.active
+-		}, this.options.position );
+-
+-		clearTimeout( this.timer );
+-		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+-			.hide()
+-			.attr( "aria-hidden", "true" );
+-
+-		submenu
+-			.show()
+-			.removeAttr( "aria-hidden" )
+-			.attr( "aria-expanded", "true" )
+-			.position( position );
+-	},
+-
+-	collapseAll: function( event, all ) {
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			// If we were passed an event, look for the submenu that contains the event
+-			var currentMenu = all ? this.element :
+-				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+-
+-			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+-			if ( !currentMenu.length ) {
+-				currentMenu = this.element;
+-			}
+-
+-			this._close( currentMenu );
+-
+-			this.blur( event );
+-			this.activeMenu = currentMenu;
+-		}, this.delay );
+-	},
+-
+-	// With no arguments, closes the currently active menu - if nothing is active
+-	// it closes all menus.  If passed an argument, it will search for menus BELOW
+-	_close: function( startMenu ) {
+-		if ( !startMenu ) {
+-			startMenu = this.active ? this.active.parent() : this.element;
+-		}
+-
+-		startMenu
+-			.find( ".ui-menu" )
+-				.hide()
+-				.attr( "aria-hidden", "true" )
+-				.attr( "aria-expanded", "false" )
+-			.end()
+-			.find( "a.ui-state-active" )
+-				.removeClass( "ui-state-active" );
+-	},
+-
+-	collapse: function( event ) {
+-		var newItem = this.active &&
+-			this.active.parent().closest( ".ui-menu-item", this.element );
+-		if ( newItem && newItem.length ) {
+-			this._close();
+-			this.focus( event, newItem );
+-		}
+-	},
+-
+-	expand: function( event ) {
+-		var newItem = this.active &&
+-			this.active
+-				.children( ".ui-menu " )
+-				.children( ".ui-menu-item" )
+-				.first();
+-
+-		if ( newItem && newItem.length ) {
+-			this._open( newItem.parent() );
+-
+-			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+-			this._delay(function() {
+-				this.focus( event, newItem );
+-			});
+-		}
+-	},
+-
+-	next: function( event ) {
+-		this._move( "next", "first", event );
+-	},
+-
+-	previous: function( event ) {
+-		this._move( "prev", "last", event );
+-	},
+-
+-	isFirstItem: function() {
+-		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+-	},
+-
+-	isLastItem: function() {
+-		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+-	},
+-
+-	_move: function( direction, filter, event ) {
+-		var next;
+-		if ( this.active ) {
+-			if ( direction === "first" || direction === "last" ) {
+-				next = this.active
+-					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+-					.eq( -1 );
+-			} else {
+-				next = this.active
+-					[ direction + "All" ]( ".ui-menu-item" )
+-					.eq( 0 );
+-			}
+-		}
+-		if ( !next || !next.length || !this.active ) {
+-			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
+-		}
+-
+-		this.focus( event, next );
+-	},
+-
+-	nextPage: function( event ) {
+-		var item, base, height;
+-
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isLastItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.nextAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base - height < 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
+-				[ !this.active ? "first" : "last" ]() );
+-		}
+-	},
+-
+-	previousPage: function( event ) {
+-		var item, base, height;
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isFirstItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.prevAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base + height > 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+-		}
+-	},
+-
+-	_hasScroll: function() {
+-		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+-	},
+-
+-	select: function( event ) {
+-		// TODO: It should never be possible to not have an active item at this
+-		// point, but the tests don't trigger mouseenter before click.
+-		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+-		var ui = { item: this.active };
+-		if ( !this.active.has( ".ui-menu" ).length ) {
+-			this.collapseAll( event, true );
+-		}
+-		this._trigger( "select", event, ui );
+-	}
+-});
+-
+-}( jQuery ));
+-(function( $, undefined ) {
+-
+-$.widget( "ui.progressbar", {
+-	version: "1.10.3",
+-	options: {
+-		max: 100,
+-		value: 0,
+-
+-		change: null,
+-		complete: null
+-	},
+-
+-	min: 0,
+-
+-	_create: function() {
+-		// Constrain initial value
+-		this.oldValue = this.options.value = this._constrainedValue();
+-
+-		this.element
+-			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.attr({
+-				// Only set static values, aria-valuenow and aria-valuemax are
+-				// set inside _refreshValue()
+-				role: "progressbar",
+-				"aria-valuemin": this.min
+-			});
+-
+-		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+-			.appendTo( this.element );
+-
+-		this._refreshValue();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-
+-		this.valueDiv.remove();
+-	},
+-
+-	value: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			return this.options.value;
+-		}
+-
+-		this.options.value = this._constrainedValue( newValue );
+-		this._refreshValue();
+-	},
+-
+-	_constrainedValue: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			newValue = this.options.value;
+-		}
+-
+-		this.indeterminate = newValue === false;
+-
+-		// sanitize value
+-		if ( typeof newValue !== "number" ) {
+-			newValue = 0;
+-		}
+-
+-		return this.indeterminate ? false :
+-			Math.min( this.options.max, Math.max( this.min, newValue ) );
+-	},
+-
+-	_setOptions: function( options ) {
+-		// Ensure "value" option is set after other values (like max)
+-		var value = options.value;
+-		delete options.value;
+-
+-		this._super( options );
+-
+-		this.options.value = this._constrainedValue( value );
+-		this._refreshValue();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "max" ) {
+-			// Don't allow a max less than min
+-			value = Math.max( this.min, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	_percentage: function() {
+-		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+-	},
+-
+-	_refreshValue: function() {
+-		var value = this.options.value,
+-			percentage = this._percentage();
+-
+-		this.valueDiv
+-			.toggle( this.indeterminate || value > this.min )
+-			.toggleClass( "ui-corner-right", value === this.options.max )
+-			.width( percentage.toFixed(0) + "%" );
+-
+-		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+-
+-		if ( this.indeterminate ) {
+-			this.element.removeAttr( "aria-valuenow" );
+-			if ( !this.overlayDiv ) {
+-				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+-			}
+-		} else {
+-			this.element.attr({
+-				"aria-valuemax": this.options.max,
+-				"aria-valuenow": value
+-			});
+-			if ( this.overlayDiv ) {
+-				this.overlayDiv.remove();
+-				this.overlayDiv = null;
+-			}
+-		}
+-
+-		if ( this.oldValue !== value ) {
+-			this.oldValue = value;
+-			this._trigger( "change" );
+-		}
+-		if ( value === this.options.max ) {
+-			this._trigger( "complete" );
+-		}
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-// number of pages in a slider
+-// (how many times can you page up/down to go through the whole range)
+-var numPages = 5;
+-
+-$.widget( "ui.slider", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "slide",
+-
+-	options: {
+-		animate: false,
+-		distance: 0,
+-		max: 100,
+-		min: 0,
+-		orientation: "horizontal",
+-		range: false,
+-		step: 1,
+-		value: 0,
+-		values: null,
+-
+-		// callbacks
+-		change: null,
+-		slide: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		this._keySliding = false;
+-		this._mouseSliding = false;
+-		this._animateOff = true;
+-		this._handleIndex = null;
+-		this._detectOrientation();
+-		this._mouseInit();
+-
+-		this.element
+-			.addClass( "ui-slider" +
+-				" ui-slider-" + this.orientation +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all");
+-
+-		this._refresh();
+-		this._setOption( "disabled", this.options.disabled );
+-
+-		this._animateOff = false;
+-	},
+-
+-	_refresh: function() {
+-		this._createRange();
+-		this._createHandles();
+-		this._setupEvents();
+-		this._refreshValue();
+-	},
+-
+-	_createHandles: function() {
+-		var i, handleCount,
+-			options = this.options,
+-			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+-			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+-			handles = [];
+-
+-		handleCount = ( options.values && options.values.length ) || 1;
+-
+-		if ( existingHandles.length > handleCount ) {
+-			existingHandles.slice( handleCount ).remove();
+-			existingHandles = existingHandles.slice( 0, handleCount );
+-		}
+-
+-		for ( i = existingHandles.length; i < handleCount; i++ ) {
+-			handles.push( handle );
+-		}
+-
+-		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+-
+-		this.handle = this.handles.eq( 0 );
+-
+-		this.handles.each(function( i ) {
+-			$( this ).data( "ui-slider-handle-index", i );
+-		});
+-	},
+-
+-	_createRange: function() {
+-		var options = this.options,
+-			classes = "";
+-
+-		if ( options.range ) {
+-			if ( options.range === true ) {
+-				if ( !options.values ) {
+-					options.values = [ this._valueMin(), this._valueMin() ];
+-				} else if ( options.values.length && options.values.length !== 2 ) {
+-					options.values = [ options.values[0], options.values[0] ];
+-				} else if ( $.isArray( options.values ) ) {
+-					options.values = options.values.slice(0);
+-				}
+-			}
+-
+-			if ( !this.range || !this.range.length ) {
+-				this.range = $( "<div></div>" )
+-					.appendTo( this.element );
+-
+-				classes = "ui-slider-range" +
+-				// note: this isn't the most fittingly semantic framework class for this element,
+-				// but worked best visually with a variety of themes
+-				" ui-widget-header ui-corner-all";
+-			} else {
+-				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+-					// Handle range switching from true to min/max
+-					.css({
+-						"left": "",
+-						"bottom": ""
+-					});
+-			}
+-
+-			this.range.addClass( classes +
+-				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+-		} else {
+-			this.range = $([]);
+-		}
+-	},
+-
+-	_setupEvents: function() {
+-		var elements = this.handles.add( this.range ).filter( "a" );
+-		this._off( elements );
+-		this._on( elements, this._handleEvents );
+-		this._hoverable( elements );
+-		this._focusable( elements );
+-	},
+-
+-	_destroy: function() {
+-		this.handles.remove();
+-		this.range.remove();
+-
+-		this.element
+-			.removeClass( "ui-slider" +
+-				" ui-slider-horizontal" +
+-				" ui-slider-vertical" +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" );
+-
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function( event ) {
+-		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+-			that = this,
+-			o = this.options;
+-
+-		if ( o.disabled ) {
+-			return false;
+-		}
+-
+-		this.elementSize = {
+-			width: this.element.outerWidth(),
+-			height: this.element.outerHeight()
+-		};
+-		this.elementOffset = this.element.offset();
+-
+-		position = { x: event.pageX, y: event.pageY };
+-		normValue = this._normValueFromMouse( position );
+-		distance = this._valueMax() - this._valueMin() + 1;
+-		this.handles.each(function( i ) {
+-			var thisDistance = Math.abs( normValue - that.values(i) );
+-			if (( distance > thisDistance ) ||
+-				( distance === thisDistance &&
+-					(i === that._lastChangedValue || that.values(i) === o.min ))) {
+-				distance = thisDistance;
+-				closestHandle = $( this );
+-				index = i;
+-			}
+-		});
+-
+-		allowed = this._start( event, index );
+-		if ( allowed === false ) {
+-			return false;
+-		}
+-		this._mouseSliding = true;
+-
+-		this._handleIndex = index;
+-
+-		closestHandle
+-			.addClass( "ui-state-active" )
+-			.focus();
+-
+-		offset = closestHandle.offset();
+-		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+-		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+-			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+-			top: event.pageY - offset.top -
+-				( closestHandle.height() / 2 ) -
+-				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+-				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+-				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+-		};
+-
+-		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+-			this._slide( event, index, normValue );
+-		}
+-		this._animateOff = true;
+-		return true;
+-	},
+-
+-	_mouseStart: function() {
+-		return true;
+-	},
+-
+-	_mouseDrag: function( event ) {
+-		var position = { x: event.pageX, y: event.pageY },
+-			normValue = this._normValueFromMouse( position );
+-
+-		this._slide( event, this._handleIndex, normValue );
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function( event ) {
+-		this.handles.removeClass( "ui-state-active" );
+-		this._mouseSliding = false;
+-
+-		this._stop( event, this._handleIndex );
+-		this._change( event, this._handleIndex );
+-
+-		this._handleIndex = null;
+-		this._clickOffset = null;
+-		this._animateOff = false;
+-
+-		return false;
+-	},
+-
+-	_detectOrientation: function() {
+-		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+-	},
+-
+-	_normValueFromMouse: function( position ) {
+-		var pixelTotal,
+-			pixelMouse,
+-			percentMouse,
+-			valueTotal,
+-			valueMouse;
+-
+-		if ( this.orientation === "horizontal" ) {
+-			pixelTotal = this.elementSize.width;
+-			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+-		} else {
+-			pixelTotal = this.elementSize.height;
+-			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+-		}
+-
+-		percentMouse = ( pixelMouse / pixelTotal );
+-		if ( percentMouse > 1 ) {
+-			percentMouse = 1;
+-		}
+-		if ( percentMouse < 0 ) {
+-			percentMouse = 0;
+-		}
+-		if ( this.orientation === "vertical" ) {
+-			percentMouse = 1 - percentMouse;
+-		}
+-
+-		valueTotal = this._valueMax() - this._valueMin();
+-		valueMouse = this._valueMin() + percentMouse * valueTotal;
+-
+-		return this._trimAlignValue( valueMouse );
+-	},
+-
+-	_start: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-		return this._trigger( "start", event, uiHash );
+-	},
+-
+-	_slide: function( event, index, newVal ) {
+-		var otherVal,
+-			newValues,
+-			allowed;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			otherVal = this.values( index ? 0 : 1 );
+-
+-			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+-					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+-				) {
+-				newVal = otherVal;
+-			}
+-
+-			if ( newVal !== this.values( index ) ) {
+-				newValues = this.values();
+-				newValues[ index ] = newVal;
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal,
+-					values: newValues
+-				} );
+-				otherVal = this.values( index ? 0 : 1 );
+-				if ( allowed !== false ) {
+-					this.values( index, newVal, true );
+-				}
+-			}
+-		} else {
+-			if ( newVal !== this.value() ) {
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal
+-				} );
+-				if ( allowed !== false ) {
+-					this.value( newVal );
+-				}
+-			}
+-		}
+-	},
+-
+-	_stop: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-
+-		this._trigger( "stop", event, uiHash );
+-	},
+-
+-	_change: function( event, index ) {
+-		if ( !this._keySliding && !this._mouseSliding ) {
+-			var uiHash = {
+-				handle: this.handles[ index ],
+-				value: this.value()
+-			};
+-			if ( this.options.values && this.options.values.length ) {
+-				uiHash.value = this.values( index );
+-				uiHash.values = this.values();
+-			}
+-
+-			//store the last changed value index for reference when handles overlap
+-			this._lastChangedValue = index;
+-
+-			this._trigger( "change", event, uiHash );
+-		}
+-	},
+-
+-	value: function( newValue ) {
+-		if ( arguments.length ) {
+-			this.options.value = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, 0 );
+-			return;
+-		}
+-
+-		return this._value();
+-	},
+-
+-	values: function( index, newValue ) {
+-		var vals,
+-			newValues,
+-			i;
+-
+-		if ( arguments.length > 1 ) {
+-			this.options.values[ index ] = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, index );
+-			return;
+-		}
+-
+-		if ( arguments.length ) {
+-			if ( $.isArray( arguments[ 0 ] ) ) {
+-				vals = this.options.values;
+-				newValues = arguments[ 0 ];
+-				for ( i = 0; i < vals.length; i += 1 ) {
+-					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+-					this._change( null, i );
+-				}
+-				this._refreshValue();
+-			} else {
+-				if ( this.options.values && this.options.values.length ) {
+-					return this._values( index );
+-				} else {
+-					return this.value();
+-				}
+-			}
+-		} else {
+-			return this._values();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var i,
+-			valsLength = 0;
+-
+-		if ( key === "range" && this.options.range === true ) {
+-			if ( value === "min" ) {
+-				this.options.value = this._values( 0 );
+-				this.options.values = null;
+-			} else if ( value === "max" ) {
+-				this.options.value = this._values( this.options.values.length-1 );
+-				this.options.values = null;
+-			}
+-		}
+-
+-		if ( $.isArray( this.options.values ) ) {
+-			valsLength = this.options.values.length;
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-
+-		switch ( key ) {
+-			case "orientation":
+-				this._detectOrientation();
+-				this.element
+-					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+-					.addClass( "ui-slider-" + this.orientation );
+-				this._refreshValue();
+-				break;
+-			case "value":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._change( null, 0 );
+-				this._animateOff = false;
+-				break;
+-			case "values":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				for ( i = 0; i < valsLength; i += 1 ) {
+-					this._change( null, i );
+-				}
+-				this._animateOff = false;
+-				break;
+-			case "min":
+-			case "max":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._animateOff = false;
+-				break;
+-			case "range":
+-				this._animateOff = true;
+-				this._refresh();
+-				this._animateOff = false;
+-				break;
+-		}
+-	},
+-
+-	//internal value getter
+-	// _value() returns value trimmed by min and max, aligned by step
+-	_value: function() {
+-		var val = this.options.value;
+-		val = this._trimAlignValue( val );
+-
+-		return val;
+-	},
+-
+-	//internal values getter
+-	// _values() returns array of values trimmed by min and max, aligned by step
+-	// _values( index ) returns single value trimmed by min and max, aligned by step
+-	_values: function( index ) {
+-		var val,
+-			vals,
+-			i;
+-
+-		if ( arguments.length ) {
+-			val = this.options.values[ index ];
+-			val = this._trimAlignValue( val );
+-
+-			return val;
+-		} else if ( this.options.values && this.options.values.length ) {
+-			// .slice() creates a copy of the array
+-			// this copy gets trimmed by min and max and then returned
+-			vals = this.options.values.slice();
+-			for ( i = 0; i < vals.length; i+= 1) {
+-				vals[ i ] = this._trimAlignValue( vals[ i ] );
+-			}
+-
+-			return vals;
+-		} else {
+-			return [];
+-		}
+-	},
+-
+-	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+-	_trimAlignValue: function( val ) {
+-		if ( val <= this._valueMin() ) {
+-			return this._valueMin();
+-		}
+-		if ( val >= this._valueMax() ) {
+-			return this._valueMax();
+-		}
+-		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+-			valModStep = (val - this._valueMin()) % step,
+-			alignValue = val - valModStep;
+-
+-		if ( Math.abs(valModStep) * 2 >= step ) {
+-			alignValue += ( valModStep > 0 ) ? step : ( -step );
+-		}
+-
+-		// Since JavaScript has problems with large floats, round
+-		// the final value to 5 digits after the decimal point (see #4124)
+-		return parseFloat( alignValue.toFixed(5) );
+-	},
+-
+-	_valueMin: function() {
+-		return this.options.min;
+-	},
+-
+-	_valueMax: function() {
+-		return this.options.max;
+-	},
+-
+-	_refreshValue: function() {
+-		var lastValPercent, valPercent, value, valueMin, valueMax,
+-			oRange = this.options.range,
+-			o = this.options,
+-			that = this,
+-			animate = ( !this._animateOff ) ? o.animate : false,
+-			_set = {};
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			this.handles.each(function( i ) {
+-				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+-				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-				if ( that.options.range === true ) {
+-					if ( that.orientation === "horizontal" ) {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					} else {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					}
+-				}
+-				lastValPercent = valPercent;
+-			});
+-		} else {
+-			value = this.value();
+-			valueMin = this._valueMin();
+-			valueMax = this._valueMax();
+-			valPercent = ( valueMax !== valueMin ) ?
+-					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+-					0;
+-			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-
+-			if ( oRange === "min" && this.orientation === "horizontal" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "horizontal" ) {
+-				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-			if ( oRange === "min" && this.orientation === "vertical" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "vertical" ) {
+-				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-		}
+-	},
+-
+-	_handleEvents: {
+-		keydown: function( event ) {
+-			/*jshint maxcomplexity:25*/
+-			var allowed, curVal, newVal, step,
+-				index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-				case $.ui.keyCode.END:
+-				case $.ui.keyCode.PAGE_UP:
+-				case $.ui.keyCode.PAGE_DOWN:
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					event.preventDefault();
+-					if ( !this._keySliding ) {
+-						this._keySliding = true;
+-						$( event.target ).addClass( "ui-state-active" );
+-						allowed = this._start( event, index );
+-						if ( allowed === false ) {
+-							return;
+-						}
+-					}
+-					break;
+-			}
+-
+-			step = this.options.step;
+-			if ( this.options.values && this.options.values.length ) {
+-				curVal = newVal = this.values( index );
+-			} else {
+-				curVal = newVal = this.value();
+-			}
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-					newVal = this._valueMin();
+-					break;
+-				case $.ui.keyCode.END:
+-					newVal = this._valueMax();
+-					break;
+-				case $.ui.keyCode.PAGE_UP:
+-					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.PAGE_DOWN:
+-					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-					if ( curVal === this._valueMax() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal + step );
+-					break;
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					if ( curVal === this._valueMin() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal - step );
+-					break;
+-			}
+-
+-			this._slide( event, index, newVal );
+-		},
+-		click: function( event ) {
+-			event.preventDefault();
+-		},
+-		keyup: function( event ) {
+-			var index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			if ( this._keySliding ) {
+-				this._keySliding = false;
+-				this._stop( event, index );
+-				this._change( event, index );
+-				$( event.target ).removeClass( "ui-state-active" );
+-			}
+-		}
+-	}
+-
+-});
+-
+-}(jQuery));
+-(function( $ ) {
+-
+-function modifier( fn ) {
+-	return function() {
+-		var previous = this.element.val();
+-		fn.apply( this, arguments );
+-		this._refresh();
+-		if ( previous !== this.element.val() ) {
+-			this._trigger( "change" );
+-		}
+-	};
+-}
+-
+-$.widget( "ui.spinner", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	widgetEventPrefix: "spin",
+-	options: {
+-		culture: null,
+-		icons: {
+-			down: "ui-icon-triangle-1-s",
+-			up: "ui-icon-triangle-1-n"
+-		},
+-		incremental: true,
+-		max: null,
+-		min: null,
+-		numberFormat: null,
+-		page: 10,
+-		step: 1,
+-
+-		change: null,
+-		spin: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		// handle string values that need to be parsed
+-		this._setOption( "max", this.options.max );
+-		this._setOption( "min", this.options.min );
+-		this._setOption( "step", this.options.step );
+-
+-		// format the value, but don't constrain
+-		this._value( this.element.val(), true );
+-
+-		this._draw();
+-		this._on( this._events );
+-		this._refresh();
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_getCreateOptions: function() {
+-		var options = {},
+-			element = this.element;
+-
+-		$.each( [ "min", "max", "step" ], function( i, option ) {
+-			var value = element.attr( option );
+-			if ( value !== undefined && value.length ) {
+-				options[ option ] = value;
+-			}
+-		});
+-
+-		return options;
+-	},
+-
+-	_events: {
+-		keydown: function( event ) {
+-			if ( this._start( event ) && this._keydown( event ) ) {
+-				event.preventDefault();
+-			}
+-		},
+-		keyup: "_stop",
+-		focus: function() {
+-			this.previous = this.element.val();
+-		},
+-		blur: function( event ) {
+-			if ( this.cancelBlur ) {
+-				delete this.cancelBlur;
+-				return;
+-			}
+-
+-			this._stop();
+-			this._refresh();
+-			if ( this.previous !== this.element.val() ) {
+-				this._trigger( "change", event );
+-			}
+-		},
+-		mousewheel: function( event, delta ) {
+-			if ( !delta ) {
+-				return;
+-			}
+-			if ( !this.spinning && !this._start( event ) ) {
+-				return false;
+-			}
+-
+-			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+-			clearTimeout( this.mousewheelTimer );
+-			this.mousewheelTimer = this._delay(function() {
+-				if ( this.spinning ) {
+-					this._stop( event );
+-				}
+-			}, 100 );
+-			event.preventDefault();
+-		},
+-		"mousedown .ui-spinner-button": function( event ) {
+-			var previous;
+-
+-			// We never want the buttons to have focus; whenever the user is
+-			// interacting with the spinner, the focus should be on the input.
+-			// If the input is focused then this.previous is properly set from
+-			// when the input first received focus. If the input is not focused
+-			// then we need to set this.previous based on the value before spinning.
+-			previous = this.element[0] === this.document[0].activeElement ?
+-				this.previous : this.element.val();
+-			function checkFocus() {
+-				var isActive = this.element[0] === this.document[0].activeElement;
+-				if ( !isActive ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// support: IE
+-					// IE sets focus asynchronously, so we need to check if focus
+-					// moved off of the input because the user clicked on the button.
+-					this._delay(function() {
+-						this.previous = previous;
+-					});
+-				}
+-			}
+-
+-			// ensure focus is on (or stays on) the text field
+-			event.preventDefault();
+-			checkFocus.call( this );
+-
+-			// support: IE
+-			// IE doesn't prevent moving focus even with event.preventDefault()
+-			// so we set a flag to know when we should ignore the blur event
+-			// and check (again) if focus moved off of the input.
+-			this.cancelBlur = true;
+-			this._delay(function() {
+-				delete this.cancelBlur;
+-				checkFocus.call( this );
+-			});
+-
+-			if ( this._start( event ) === false ) {
+-				return;
+-			}
+-
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		"mouseup .ui-spinner-button": "_stop",
+-		"mouseenter .ui-spinner-button": function( event ) {
+-			// button will add ui-state-active if mouse was down while mouseleave and kept down
+-			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+-				return;
+-			}
+-
+-			if ( this._start( event ) === false ) {
+-				return false;
+-			}
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		// TODO: do we really want to consider this a stop?
+-		// shouldn't we just stop the repeater and wait until mouseup before
+-		// we trigger the stop event?
+-		"mouseleave .ui-spinner-button": "_stop"
+-	},
+-
+-	_draw: function() {
+-		var uiSpinner = this.uiSpinner = this.element
+-			.addClass( "ui-spinner-input" )
+-			.attr( "autocomplete", "off" )
+-			.wrap( this._uiSpinnerHtml() )
+-			.parent()
+-				// add buttons
+-				.append( this._buttonHtml() );
+-
+-		this.element.attr( "role", "spinbutton" );
+-
+-		// button bindings
+-		this.buttons = uiSpinner.find( ".ui-spinner-button" )
+-			.attr( "tabIndex", -1 )
+-			.button()
+-			.removeClass( "ui-corner-all" );
+-
+-		// IE 6 doesn't understand height: 50% for the buttons
+-		// unless the wrapper has an explicit height
+-		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+-				uiSpinner.height() > 0 ) {
+-			uiSpinner.height( uiSpinner.height() );
+-		}
+-
+-		// disable spinner if element was already disabled
+-		if ( this.options.disabled ) {
+-			this.disable();
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		var options = this.options,
+-			keyCode = $.ui.keyCode;
+-
+-		switch ( event.keyCode ) {
+-		case keyCode.UP:
+-			this._repeat( null, 1, event );
+-			return true;
+-		case keyCode.DOWN:
+-			this._repeat( null, -1, event );
+-			return true;
+-		case keyCode.PAGE_UP:
+-			this._repeat( null, options.page, event );
+-			return true;
+-		case keyCode.PAGE_DOWN:
+-			this._repeat( null, -options.page, event );
+-			return true;
+-		}
+-
+-		return false;
+-	},
+-
+-	_uiSpinnerHtml: function() {
+-		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+-	},
+-
+-	_buttonHtml: function() {
+-		return "" +
+-			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+-				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+-			"</a>" +
+-			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+-				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+-			"</a>";
+-	},
+-
+-	_start: function( event ) {
+-		if ( !this.spinning && this._trigger( "start", event ) === false ) {
+-			return false;
+-		}
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-		this.spinning = true;
+-		return true;
+-	},
+-
+-	_repeat: function( i, steps, event ) {
+-		i = i || 500;
+-
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			this._repeat( 40, steps, event );
+-		}, i );
+-
+-		this._spin( steps * this.options.step, event );
+-	},
+-
+-	_spin: function( step, event ) {
+-		var value = this.value() || 0;
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-
+-		value = this._adjustValue( value + step * this._increment( this.counter ) );
+-
+-		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+-			this._value( value );
+-			this.counter++;
+-		}
+-	},
+-
+-	_increment: function( i ) {
+-		var incremental = this.options.incremental;
+-
+-		if ( incremental ) {
+-			return $.isFunction( incremental ) ?
+-				incremental( i ) :
+-				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+-		}
+-
+-		return 1;
+-	},
+-
+-	_precision: function() {
+-		var precision = this._precisionOf( this.options.step );
+-		if ( this.options.min !== null ) {
+-			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+-		}
+-		return precision;
+-	},
+-
+-	_precisionOf: function( num ) {
+-		var str = num.toString(),
+-			decimal = str.indexOf( "." );
+-		return decimal === -1 ? 0 : str.length - decimal - 1;
+-	},
+-
+-	_adjustValue: function( value ) {
+-		var base, aboveMin,
+-			options = this.options;
+-
+-		// make sure we're at a valid step
+-		// - find out where we are relative to the base (min or 0)
+-		base = options.min !== null ? options.min : 0;
+-		aboveMin = value - base;
+-		// - round to the nearest step
+-		aboveMin = Math.round(aboveMin / options.step) * options.step;
+-		// - rounding is based on 0, so adjust back to our base
+-		value = base + aboveMin;
+-
+-		// fix precision from bad JS floating point math
+-		value = parseFloat( value.toFixed( this._precision() ) );
+-
+-		// clamp the value
+-		if ( options.max !== null && value > options.max) {
+-			return options.max;
+-		}
+-		if ( options.min !== null && value < options.min ) {
+-			return options.min;
+-		}
+-
+-		return value;
+-	},
+-
+-	_stop: function( event ) {
+-		if ( !this.spinning ) {
+-			return;
+-		}
+-
+-		clearTimeout( this.timer );
+-		clearTimeout( this.mousewheelTimer );
+-		this.counter = 0;
+-		this.spinning = false;
+-		this._trigger( "stop", event );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "culture" || key === "numberFormat" ) {
+-			var prevValue = this._parse( this.element.val() );
+-			this.options[ key ] = value;
+-			this.element.val( this._format( prevValue ) );
+-			return;
+-		}
+-
+-		if ( key === "max" || key === "min" || key === "step" ) {
+-			if ( typeof value === "string" ) {
+-				value = this._parse( value );
+-			}
+-		}
+-		if ( key === "icons" ) {
+-			this.buttons.first().find( ".ui-icon" )
+-				.removeClass( this.options.icons.up )
+-				.addClass( value.up );
+-			this.buttons.last().find( ".ui-icon" )
+-				.removeClass( this.options.icons.down )
+-				.addClass( value.down );
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-				this.buttons.button( "disable" );
+-			} else {
+-				this.element.prop( "disabled", false );
+-				this.buttons.button( "enable" );
+-			}
+-		}
+-	},
+-
+-	_setOptions: modifier(function( options ) {
+-		this._super( options );
+-		this._value( this.element.val() );
+-	}),
+-
+-	_parse: function( val ) {
+-		if ( typeof val === "string" && val !== "" ) {
+-			val = window.Globalize && this.options.numberFormat ?
+-				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+-		}
+-		return val === "" || isNaN( val ) ? null : val;
+-	},
+-
+-	_format: function( value ) {
+-		if ( value === "" ) {
+-			return "";
+-		}
+-		return window.Globalize && this.options.numberFormat ?
+-			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+-			value;
+-	},
+-
+-	_refresh: function() {
+-		this.element.attr({
+-			"aria-valuemin": this.options.min,
+-			"aria-valuemax": this.options.max,
+-			// TODO: what should we do with values that can't be parsed?
+-			"aria-valuenow": this._parse( this.element.val() )
+-		});
+-	},
+-
+-	// update the value without triggering change
+-	_value: function( value, allowAny ) {
+-		var parsed;
+-		if ( value !== "" ) {
+-			parsed = this._parse( value );
+-			if ( parsed !== null ) {
+-				if ( !allowAny ) {
+-					parsed = this._adjustValue( parsed );
+-				}
+-				value = this._format( parsed );
+-			}
+-		}
+-		this.element.val( value );
+-		this._refresh();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-spinner-input" )
+-			.prop( "disabled", false )
+-			.removeAttr( "autocomplete" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-		this.uiSpinner.replaceWith( this.element );
+-	},
+-
+-	stepUp: modifier(function( steps ) {
+-		this._stepUp( steps );
+-	}),
+-	_stepUp: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	stepDown: modifier(function( steps ) {
+-		this._stepDown( steps );
+-	}),
+-	_stepDown: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * -this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	pageUp: modifier(function( pages ) {
+-		this._stepUp( (pages || 1) * this.options.page );
+-	}),
+-
+-	pageDown: modifier(function( pages ) {
+-		this._stepDown( (pages || 1) * this.options.page );
+-	}),
+-
+-	value: function( newVal ) {
+-		if ( !arguments.length ) {
+-			return this._parse( this.element.val() );
+-		}
+-		modifier( this._value ).call( this, newVal );
+-	},
+-
+-	widget: function() {
+-		return this.uiSpinner;
+-	}
+-});
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-var tabId = 0,
+-	rhash = /#.*$/;
+-
+-function getNextTabId() {
+-	return ++tabId;
+-}
+-
+-function isLocal( anchor ) {
+-	return anchor.hash.length > 1 &&
+-		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
+-			decodeURIComponent( location.href.replace( rhash, "" ) );
+-}
+-
+-$.widget( "ui.tabs", {
+-	version: "1.10.3",
+-	delay: 300,
+-	options: {
+-		active: null,
+-		collapsible: false,
+-		event: "click",
+-		heightStyle: "content",
+-		hide: null,
+-		show: null,
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null,
+-		beforeLoad: null,
+-		load: null
+-	},
+-
+-	_create: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		this.running = false;
+-
+-		this.element
+-			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-tabs-collapsible", options.collapsible )
+-			// Prevent users from focusing disabled tabs via click
+-			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
+-				if ( $( this ).is( ".ui-state-disabled" ) ) {
+-					event.preventDefault();
+-				}
+-			})
+-			// support: IE <9
+-			// Preventing the default action in mousedown doesn't prevent IE
+-			// from focusing the element, so if the anchor gets focused, blur.
+-			// We don't have to worry about focusing the previously focused
+-			// element since clicking on a non-focusable element should focus
+-			// the body anyway.
+-			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+-				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+-					this.blur();
+-				}
+-			});
+-
+-		this._processTabs();
+-		options.active = this._initialActive();
+-
+-		// Take disabling tabs via class attribute from HTML
+-		// into account and update option properly.
+-		if ( $.isArray( options.disabled ) ) {
+-			options.disabled = $.unique( options.disabled.concat(
+-				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+-					return that.tabs.index( li );
+-				})
+-			) ).sort();
+-		}
+-
+-		// check for length avoids error when initializing empty list
+-		if ( this.options.active !== false && this.anchors.length ) {
+-			this.active = this._findActive( options.active );
+-		} else {
+-			this.active = $();
+-		}
+-
+-		this._refresh();
+-
+-		if ( this.active.length ) {
+-			this.load( options.active );
+-		}
+-	},
+-
+-	_initialActive: function() {
+-		var active = this.options.active,
+-			collapsible = this.options.collapsible,
+-			locationHash = location.hash.substring( 1 );
+-
+-		if ( active === null ) {
+-			// check the fragment identifier in the URL
+-			if ( locationHash ) {
+-				this.tabs.each(function( i, tab ) {
+-					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+-						active = i;
+-						return false;
+-					}
+-				});
+-			}
+-
+-			// check for a tab marked active via a class
+-			if ( active === null ) {
+-				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+-			}
+-
+-			// no active tab, set to false
+-			if ( active === null || active === -1 ) {
+-				active = this.tabs.length ? 0 : false;
+-			}
+-		}
+-
+-		// handle numbers: negative, out of range
+-		if ( active !== false ) {
+-			active = this.tabs.index( this.tabs.eq( active ) );
+-			if ( active === -1 ) {
+-				active = collapsible ? false : 0;
+-			}
+-		}
+-
+-		// don't allow collapsible: false and active: false
+-		if ( !collapsible && active === false && this.anchors.length ) {
+-			active = 0;
+-		}
+-
+-		return active;
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			tab: this.active,
+-			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+-		};
+-	},
+-
+-	_tabKeydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+-			selectedIndex = this.tabs.index( focusedTab ),
+-			goingForward = true;
+-
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		switch ( event.keyCode ) {
+-			case $.ui.keyCode.RIGHT:
+-			case $.ui.keyCode.DOWN:
+-				selectedIndex++;
+-				break;
+-			case $.ui.keyCode.UP:
+-			case $.ui.keyCode.LEFT:
+-				goingForward = false;
+-				selectedIndex--;
+-				break;
+-			case $.ui.keyCode.END:
+-				selectedIndex = this.anchors.length - 1;
+-				break;
+-			case $.ui.keyCode.HOME:
+-				selectedIndex = 0;
+-				break;
+-			case $.ui.keyCode.SPACE:
+-				// Activate only, no collapsing
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				this._activate( selectedIndex );
+-				return;
+-			case $.ui.keyCode.ENTER:
+-				// Toggle (cancel delayed activation, allow collapsing)
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				// Determine if we should collapse or activate
+-				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+-				return;
+-			default:
+-				return;
+-		}
+-
+-		// Focus the appropriate tab, based on which key was pressed
+-		event.preventDefault();
+-		clearTimeout( this.activating );
+-		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+-
+-		// Navigating with control key will prevent automatic activation
+-		if ( !event.ctrlKey ) {
+-			// Update aria-selected immediately so that AT think the tab is already selected.
+-			// Otherwise AT may confuse the user by stating that they need to activate the tab,
+-			// but the tab will already be activated by the time the announcement finishes.
+-			focusedTab.attr( "aria-selected", "false" );
+-			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+-
+-			this.activating = this._delay(function() {
+-				this.option( "active", selectedIndex );
+-			}, this.delay );
+-		}
+-	},
+-
+-	_panelKeydown: function( event ) {
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		// Ctrl+up moves focus to the current tab
+-		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+-			event.preventDefault();
+-			this.active.focus();
+-		}
+-	},
+-
+-	// Alt+page up/down moves focus to the previous/next tab (and activates)
+-	_handlePageNav: function( event ) {
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+-			this._activate( this._focusNextTab( this.options.active - 1, false ) );
+-			return true;
+-		}
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+-			this._activate( this._focusNextTab( this.options.active + 1, true ) );
+-			return true;
+-		}
+-	},
+-
+-	_findNextTab: function( index, goingForward ) {
+-		var lastTabIndex = this.tabs.length - 1;
+-
+-		function constrain() {
+-			if ( index > lastTabIndex ) {
+-				index = 0;
+-			}
+-			if ( index < 0 ) {
+-				index = lastTabIndex;
+-			}
+-			return index;
+-		}
+-
+-		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+-			index = goingForward ? index + 1 : index - 1;
+-		}
+-
+-		return index;
+-	},
+-
+-	_focusNextTab: function( index, goingForward ) {
+-		index = this._findNextTab( index, goingForward );
+-		this.tabs.eq( index ).focus();
+-		return index;
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "disabled" ) {
+-			// don't use the widget factory's disabled handling
+-			this._setupDisabled( value );
+-			return;
+-		}
+-
+-		this._super( key, value);
+-
+-		if ( key === "collapsible" ) {
+-			this.element.toggleClass( "ui-tabs-collapsible", value );
+-			// Setting collapsible: false while collapsed; open first panel
+-			if ( !value && this.options.active === false ) {
+-				this._activate( 0 );
+-			}
+-		}
+-
+-		if ( key === "event" ) {
+-			this._setupEvents( value );
+-		}
+-
+-		if ( key === "heightStyle" ) {
+-			this._setupHeightStyle( value );
+-		}
+-	},
+-
+-	_tabId: function( tab ) {
+-		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
+-	},
+-
+-	_sanitizeSelector: function( hash ) {
+-		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+-	},
+-
+-	refresh: function() {
+-		var options = this.options,
+-			lis = this.tablist.children( ":has(a[href])" );
+-
+-		// get disabled tabs from class attribute from HTML
+-		// this will get converted to a boolean if needed in _refresh()
+-		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+-			return lis.index( tab );
+-		});
+-
+-		this._processTabs();
+-
+-		// was collapsed or no tabs
+-		if ( options.active === false || !this.anchors.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// was active, but active tab is gone
+-		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining tabs are disabled
+-			if ( this.tabs.length === options.disabled.length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous tab
+-			} else {
+-				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+-			}
+-		// was active, active tab still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.tabs.index( this.active );
+-		}
+-
+-		this._refresh();
+-	},
+-
+-	_refresh: function() {
+-		this._setupDisabled( this.options.disabled );
+-		this._setupEvents( this.options.event );
+-		this._setupHeightStyle( this.options.heightStyle );
+-
+-		this.tabs.not( this.active ).attr({
+-			"aria-selected": "false",
+-			tabIndex: -1
+-		});
+-		this.panels.not( this._getPanelForTab( this.active ) )
+-			.hide()
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-hidden": "true"
+-			});
+-
+-		// Make sure one tab is in the tab order
+-		if ( !this.active.length ) {
+-			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active
+-				.addClass( "ui-tabs-active ui-state-active" )
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-			this._getPanelForTab( this.active )
+-				.show()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-	},
+-
+-	_processTabs: function() {
+-		var that = this;
+-
+-		this.tablist = this._getList()
+-			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.attr( "role", "tablist" );
+-
+-		this.tabs = this.tablist.find( "> li:has(a[href])" )
+-			.addClass( "ui-state-default ui-corner-top" )
+-			.attr({
+-				role: "tab",
+-				tabIndex: -1
+-			});
+-
+-		this.anchors = this.tabs.map(function() {
+-				return $( "a", this )[ 0 ];
+-			})
+-			.addClass( "ui-tabs-anchor" )
+-			.attr({
+-				role: "presentation",
+-				tabIndex: -1
+-			});
+-
+-		this.panels = $();
+-
+-		this.anchors.each(function( i, anchor ) {
+-			var selector, panel, panelId,
+-				anchorId = $( anchor ).uniqueId().attr( "id" ),
+-				tab = $( anchor ).closest( "li" ),
+-				originalAriaControls = tab.attr( "aria-controls" );
+-
+-			// inline tab
+-			if ( isLocal( anchor ) ) {
+-				selector = anchor.hash;
+-				panel = that.element.find( that._sanitizeSelector( selector ) );
+-			// remote tab
+-			} else {
+-				panelId = that._tabId( tab );
+-				selector = "#" + panelId;
+-				panel = that.element.find( selector );
+-				if ( !panel.length ) {
+-					panel = that._createPanel( panelId );
+-					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+-				}
+-				panel.attr( "aria-live", "polite" );
+-			}
+-
+-			if ( panel.length) {
+-				that.panels = that.panels.add( panel );
+-			}
+-			if ( originalAriaControls ) {
+-				tab.data( "ui-tabs-aria-controls", originalAriaControls );
+-			}
+-			tab.attr({
+-				"aria-controls": selector.substring( 1 ),
+-				"aria-labelledby": anchorId
+-			});
+-			panel.attr( "aria-labelledby", anchorId );
+-		});
+-
+-		this.panels
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.attr( "role", "tabpanel" );
+-	},
+-
+-	// allow overriding how to find the list for rare usage scenarios (#7715)
+-	_getList: function() {
+-		return this.element.find( "ol,ul" ).eq( 0 );
+-	},
+-
+-	_createPanel: function( id ) {
+-		return $( "<div>" )
+-			.attr( "id", id )
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.data( "ui-tabs-destroy", true );
+-	},
+-
+-	_setupDisabled: function( disabled ) {
+-		if ( $.isArray( disabled ) ) {
+-			if ( !disabled.length ) {
+-				disabled = false;
+-			} else if ( disabled.length === this.anchors.length ) {
+-				disabled = true;
+-			}
+-		}
+-
+-		// disable tabs
+-		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+-			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+-				$( li )
+-					.addClass( "ui-state-disabled" )
+-					.attr( "aria-disabled", "true" );
+-			} else {
+-				$( li )
+-					.removeClass( "ui-state-disabled" )
+-					.removeAttr( "aria-disabled" );
+-			}
+-		}
+-
+-		this.options.disabled = disabled;
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			click: function( event ) {
+-				event.preventDefault();
+-			}
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+-		this._on( this.anchors, events );
+-		this._on( this.tabs, { keydown: "_tabKeydown" } );
+-		this._on( this.panels, { keydown: "_panelKeydown" } );
+-
+-		this._focusable( this.tabs );
+-		this._hoverable( this.tabs );
+-	},
+-
+-	_setupHeightStyle: function( heightStyle ) {
+-		var maxHeight,
+-			parent = this.element.parent();
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			maxHeight -= this.element.outerHeight() - this.element.height();
+-
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.element.children().not( this.panels ).each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.panels.each(function() {
+-				$( this ).height( Math.max( 0, maxHeight -
+-					$( this ).innerHeight() + $( this ).height() ) );
+-			})
+-			.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.panels.each(function() {
+-				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+-			}).height( maxHeight );
+-		}
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			anchor = $( event.currentTarget ),
+-			tab = anchor.closest( "li" ),
+-			clickedIsActive = tab[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : this._getPanelForTab( tab ),
+-			toHide = !active.length ? $() : this._getPanelForTab( active ),
+-			eventData = {
+-				oldTab: active,
+-				oldPanel: toHide,
+-				newTab: collapsing ? $() : tab,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if ( tab.hasClass( "ui-state-disabled" ) ||
+-				// tab is already loading
+-				tab.hasClass( "ui-tabs-loading" ) ||
+-				// can't switch durning an animation
+-				this.running ||
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.tabs.index( tab );
+-
+-		this.active = clickedIsActive ? $() : tab;
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		if ( !toHide.length && !toShow.length ) {
+-			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+-		}
+-
+-		if ( toShow.length ) {
+-			this.load( this.tabs.index( tab ), event );
+-		}
+-		this._toggle( event, eventData );
+-	},
+-
+-	// handles show/hide for selecting tabs
+-	_toggle: function( event, eventData ) {
+-		var that = this,
+-			toShow = eventData.newPanel,
+-			toHide = eventData.oldPanel;
+-
+-		this.running = true;
+-
+-		function complete() {
+-			that.running = false;
+-			that._trigger( "activate", event, eventData );
+-		}
+-
+-		function show() {
+-			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+-
+-			if ( toShow.length && that.options.show ) {
+-				that._show( toShow, that.options.show, complete );
+-			} else {
+-				toShow.show();
+-				complete();
+-			}
+-		}
+-
+-		// start out by hiding, then showing, then completing
+-		if ( toHide.length && this.options.hide ) {
+-			this._hide( toHide, this.options.hide, function() {
+-				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-				show();
+-			});
+-		} else {
+-			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-			toHide.hide();
+-			show();
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		eventData.oldTab.attr( "aria-selected", "false" );
+-		// If we're switching tabs, remove the old tab from the tab order.
+-		// If we're opening from collapsed state, remove the previous tab from the tab order.
+-		// If we're collapsing, then keep the collapsing tab in the tab order.
+-		if ( toShow.length && toHide.length ) {
+-			eventData.oldTab.attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.tabs.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow.attr({
+-			"aria-expanded": "true",
+-			"aria-hidden": "false"
+-		});
+-		eventData.newTab.attr({
+-			"aria-selected": "true",
+-			tabIndex: 0
+-		});
+-	},
+-
+-	_activate: function( index ) {
+-		var anchor,
+-			active = this._findActive( index );
+-
+-		// trying to activate the already active panel
+-		if ( active[ 0 ] === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the current active header
+-		if ( !active.length ) {
+-			active = this.active;
+-		}
+-
+-		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+-		this._eventHandler({
+-			target: anchor,
+-			currentTarget: anchor,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( index ) {
+-		return index === false ? $() : this.tabs.eq( index );
+-	},
+-
+-	_getIndex: function( index ) {
+-		// meta-function to give users option to provide a href string instead of a numerical index.
+-		if ( typeof index === "string" ) {
+-			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+-		}
+-
+-		return index;
+-	},
+-
+-	_destroy: function() {
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+-
+-		this.tablist
+-			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.removeAttr( "role" );
+-
+-		this.anchors
+-			.removeClass( "ui-tabs-anchor" )
+-			.removeAttr( "role" )
+-			.removeAttr( "tabIndex" )
+-			.removeUniqueId();
+-
+-		this.tabs.add( this.panels ).each(function() {
+-			if ( $.data( this, "ui-tabs-destroy" ) ) {
+-				$( this ).remove();
+-			} else {
+-				$( this )
+-					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+-						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+-					.removeAttr( "tabIndex" )
+-					.removeAttr( "aria-live" )
+-					.removeAttr( "aria-busy" )
+-					.removeAttr( "aria-selected" )
+-					.removeAttr( "aria-labelledby" )
+-					.removeAttr( "aria-hidden" )
+-					.removeAttr( "aria-expanded" )
+-					.removeAttr( "role" );
+-			}
+-		});
+-
+-		this.tabs.each(function() {
+-			var li = $( this ),
+-				prev = li.data( "ui-tabs-aria-controls" );
+-			if ( prev ) {
+-				li
+-					.attr( "aria-controls", prev )
+-					.removeData( "ui-tabs-aria-controls" );
+-			} else {
+-				li.removeAttr( "aria-controls" );
+-			}
+-		});
+-
+-		this.panels.show();
+-
+-		if ( this.options.heightStyle !== "content" ) {
+-			this.panels.css( "height", "" );
+-		}
+-	},
+-
+-	enable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === false ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = false;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.map( disabled, function( num ) {
+-					return num !== index ? num : null;
+-				});
+-			} else {
+-				disabled = $.map( this.tabs, function( li, num ) {
+-					return num !== index ? num : null;
+-				});
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	disable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === true ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = true;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.inArray( index, disabled ) !== -1 ) {
+-				return;
+-			}
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.merge( [ index ], disabled ).sort();
+-			} else {
+-				disabled = [ index ];
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	load: function( index, event ) {
+-		index = this._getIndex( index );
+-		var that = this,
+-			tab = this.tabs.eq( index ),
+-			anchor = tab.find( ".ui-tabs-anchor" ),
+-			panel = this._getPanelForTab( tab ),
+-			eventData = {
+-				tab: tab,
+-				panel: panel
+-			};
+-
+-		// not remote
+-		if ( isLocal( anchor[ 0 ] ) ) {
+-			return;
+-		}
+-
+-		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+-
+-		// support: jQuery <1.8
+-		// jQuery <1.8 returns false if the request is canceled in beforeSend,
+-		// but as of 1.8, $.ajax() always returns a jqXHR object.
+-		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+-			tab.addClass( "ui-tabs-loading" );
+-			panel.attr( "aria-busy", "true" );
+-
+-			this.xhr
+-				.success(function( response ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						panel.html( response );
+-						that._trigger( "load", event, eventData );
+-					}, 1 );
+-				})
+-				.complete(function( jqXHR, status ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						if ( status === "abort" ) {
+-							that.panels.stop( false, true );
+-						}
+-
+-						tab.removeClass( "ui-tabs-loading" );
+-						panel.removeAttr( "aria-busy" );
+-
+-						if ( jqXHR === that.xhr ) {
+-							delete that.xhr;
+-						}
+-					}, 1 );
+-				});
+-		}
+-	},
+-
+-	_ajaxSettings: function( anchor, event, eventData ) {
+-		var that = this;
+-		return {
+-			url: anchor.attr( "href" ),
+-			beforeSend: function( jqXHR, settings ) {
+-				return that._trigger( "beforeLoad", event,
+-					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+-			}
+-		};
+-	},
+-
+-	_getPanelForTab: function( tab ) {
+-		var id = $( tab ).attr( "aria-controls" );
+-		return this.element.find( this._sanitizeSelector( "#" + id ) );
+-	}
+-});
+-
+-})( jQuery );
+-(function( $ ) {
+-
+-var increments = 0;
+-
+-function addDescribedBy( elem, id ) {
+-	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+-	describedby.push( id );
+-	elem
+-		.data( "ui-tooltip-id", id )
+-		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+-}
+-
+-function removeDescribedBy( elem ) {
+-	var id = elem.data( "ui-tooltip-id" ),
+-		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+-		index = $.inArray( id, describedby );
+-	if ( index !== -1 ) {
+-		describedby.splice( index, 1 );
+-	}
+-
+-	elem.removeData( "ui-tooltip-id" );
+-	describedby = $.trim( describedby.join( " " ) );
+-	if ( describedby ) {
+-		elem.attr( "aria-describedby", describedby );
+-	} else {
+-		elem.removeAttr( "aria-describedby" );
+-	}
+-}
+-
+-$.widget( "ui.tooltip", {
+-	version: "1.10.3",
+-	options: {
+-		content: function() {
+-			// support: IE<9, Opera in jQuery <1.7
+-			// .text() can't accept undefined, so coerce to a string
+-			var title = $( this ).attr( "title" ) || "";
+-			// Escape title, since we're going from an attribute to raw HTML
+-			return $( "<a>" ).text( title ).html();
+-		},
+-		hide: true,
+-		// Disabled elements have inconsistent behavior across browsers (#8661)
+-		items: "[title]:not([disabled])",
+-		position: {
+-			my: "left top+15",
+-			at: "left bottom",
+-			collision: "flipfit flip"
+-		},
+-		show: true,
+-		tooltipClass: null,
+-		track: false,
+-
+-		// callbacks
+-		close: null,
+-		open: null
+-	},
+-
+-	_create: function() {
+-		this._on({
+-			mouseover: "open",
+-			focusin: "open"
+-		});
+-
+-		// IDs of generated tooltips, needed for destroy
+-		this.tooltips = {};
+-		// IDs of parent tooltips where we removed the title attribute
+-		this.parents = {};
+-
+-		if ( this.options.disabled ) {
+-			this._disable();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var that = this;
+-
+-		if ( key === "disabled" ) {
+-			this[ value ? "_disable" : "_enable" ]();
+-			this.options[ key ] = value;
+-			// disable element style changes
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "content" ) {
+-			$.each( this.tooltips, function( id, element ) {
+-				that._updateContent( element );
+-			});
+-		}
+-	},
+-
+-	_disable: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-		});
+-
+-		// remove title attributes to prevent native tooltips
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.is( "[title]" ) ) {
+-				element
+-					.data( "ui-tooltip-title", element.attr( "title" ) )
+-					.attr( "title", "" );
+-			}
+-		});
+-	},
+-
+-	_enable: function() {
+-		// restore title attributes
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-			}
+-		});
+-	},
+-
+-	open: function( event ) {
+-		var that = this,
+-			target = $( event ? event.target : this.element )
+-				// we need closest here due to mouseover bubbling,
+-				// but always pointing at the same event target
+-				.closest( this.options.items );
+-
+-		// No element to show a tooltip for or the tooltip is already open
+-		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+-			return;
+-		}
+-
+-		if ( target.attr( "title" ) ) {
+-			target.data( "ui-tooltip-title", target.attr( "title" ) );
+-		}
+-
+-		target.data( "ui-tooltip-open", true );
+-
+-		// kill parent tooltips, custom or native, for hover
+-		if ( event && event.type === "mouseover" ) {
+-			target.parents().each(function() {
+-				var parent = $( this ),
+-					blurEvent;
+-				if ( parent.data( "ui-tooltip-open" ) ) {
+-					blurEvent = $.Event( "blur" );
+-					blurEvent.target = blurEvent.currentTarget = this;
+-					that.close( blurEvent, true );
+-				}
+-				if ( parent.attr( "title" ) ) {
+-					parent.uniqueId();
+-					that.parents[ this.id ] = {
+-						element: this,
+-						title: parent.attr( "title" )
+-					};
+-					parent.attr( "title", "" );
+-				}
+-			});
+-		}
+-
+-		this._updateContent( target, event );
+-	},
+-
+-	_updateContent: function( target, event ) {
+-		var content,
+-			contentOption = this.options.content,
+-			that = this,
+-			eventType = event ? event.type : null;
+-
+-		if ( typeof contentOption === "string" ) {
+-			return this._open( event, target, contentOption );
+-		}
+-
+-		content = contentOption.call( target[0], function( response ) {
+-			// ignore async response if tooltip was closed already
+-			if ( !target.data( "ui-tooltip-open" ) ) {
+-				return;
+-			}
+-			// IE may instantly serve a cached response for ajax requests
+-			// delay this call to _open so the other call to _open runs first
+-			that._delay(function() {
+-				// jQuery creates a special event for focusin when it doesn't
+-				// exist natively. To improve performance, the native event
+-				// object is reused and the type is changed. Therefore, we can't
+-				// rely on the type being correct after the event finished
+-				// bubbling, so we set it back to the previous value. (#8740)
+-				if ( event ) {
+-					event.type = eventType;
+-				}
+-				this._open( event, target, response );
+-			});
+-		});
+-		if ( content ) {
+-			this._open( event, target, content );
+-		}
+-	},
+-
+-	_open: function( event, target, content ) {
+-		var tooltip, events, delayedShow,
+-			positionOption = $.extend( {}, this.options.position );
+-
+-		if ( !content ) {
+-			return;
+-		}
+-
+-		// Content can be updated multiple times. If the tooltip already
+-		// exists, then just update the content and bail.
+-		tooltip = this._find( target );
+-		if ( tooltip.length ) {
+-			tooltip.find( ".ui-tooltip-content" ).html( content );
+-			return;
+-		}
+-
+-		// if we have a title, clear it to prevent the native tooltip
+-		// we have to check first to avoid defining a title if none exists
+-		// (we don't want to cause an element to start matching [title])
+-		//
+-		// We use removeAttr only for key events, to allow IE to export the correct
+-		// accessible attributes. For mouse events, set to empty string to avoid
+-		// native tooltip showing up (happens only when removing inside mouseover).
+-		if ( target.is( "[title]" ) ) {
+-			if ( event && event.type === "mouseover" ) {
+-				target.attr( "title", "" );
+-			} else {
+-				target.removeAttr( "title" );
+-			}
+-		}
+-
+-		tooltip = this._tooltip( target );
+-		addDescribedBy( target, tooltip.attr( "id" ) );
+-		tooltip.find( ".ui-tooltip-content" ).html( content );
+-
+-		function position( event ) {
+-			positionOption.of = event;
+-			if ( tooltip.is( ":hidden" ) ) {
+-				return;
+-			}
+-			tooltip.position( positionOption );
+-		}
+-		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+-			this._on( this.document, {
+-				mousemove: position
+-			});
+-			// trigger once to override element-relative positioning
+-			position( event );
+-		} else {
+-			tooltip.position( $.extend({
+-				of: target
+-			}, this.options.position ) );
+-		}
+-
+-		tooltip.hide();
+-
+-		this._show( tooltip, this.options.show );
+-		// Handle tracking tooltips that are shown with a delay (#8644). As soon
+-		// as the tooltip is visible, position the tooltip using the most recent
+-		// event.
+-		if ( this.options.show && this.options.show.delay ) {
+-			delayedShow = this.delayedShow = setInterval(function() {
+-				if ( tooltip.is( ":visible" ) ) {
+-					position( positionOption.of );
+-					clearInterval( delayedShow );
+-				}
+-			}, $.fx.interval );
+-		}
+-
+-		this._trigger( "open", event, { tooltip: tooltip } );
+-
+-		events = {
+-			keyup: function( event ) {
+-				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					var fakeEvent = $.Event(event);
+-					fakeEvent.currentTarget = target[0];
+-					this.close( fakeEvent, true );
+-				}
+-			},
+-			remove: function() {
+-				this._removeTooltip( tooltip );
+-			}
+-		};
+-		if ( !event || event.type === "mouseover" ) {
+-			events.mouseleave = "close";
+-		}
+-		if ( !event || event.type === "focusin" ) {
+-			events.focusout = "close";
+-		}
+-		this._on( true, target, events );
+-	},
+-
+-	close: function( event ) {
+-		var that = this,
+-			target = $( event ? event.currentTarget : this.element ),
+-			tooltip = this._find( target );
+-
+-		// disabling closes the tooltip, so we need to track when we're closing
+-		// to avoid an infinite loop in case the tooltip becomes disabled on close
+-		if ( this.closing ) {
+-			return;
+-		}
+-
+-		// Clear the interval for delayed tracking tooltips
+-		clearInterval( this.delayedShow );
+-
+-		// only set title if we had one before (see comment in _open())
+-		if ( target.data( "ui-tooltip-title" ) ) {
+-			target.attr( "title", target.data( "ui-tooltip-title" ) );
+-		}
+-
+-		removeDescribedBy( target );
+-
+-		tooltip.stop( true );
+-		this._hide( tooltip, this.options.hide, function() {
+-			that._removeTooltip( $( this ) );
+-		});
+-
+-		target.removeData( "ui-tooltip-open" );
+-		this._off( target, "mouseleave focusout keyup" );
+-		// Remove 'remove' binding only on delegated targets
+-		if ( target[0] !== this.element[0] ) {
+-			this._off( target, "remove" );
+-		}
+-		this._off( this.document, "mousemove" );
+-
+-		if ( event && event.type === "mouseleave" ) {
+-			$.each( this.parents, function( id, parent ) {
+-				$( parent.element ).attr( "title", parent.title );
+-				delete that.parents[ id ];
+-			});
+-		}
+-
+-		this.closing = true;
+-		this._trigger( "close", event, { tooltip: tooltip } );
+-		this.closing = false;
+-	},
+-
+-	_tooltip: function( element ) {
+-		var id = "ui-tooltip-" + increments++,
+-			tooltip = $( "<div>" )
+-				.attr({
+-					id: id,
+-					role: "tooltip"
+-				})
+-				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+-					( this.options.tooltipClass || "" ) );
+-		$( "<div>" )
+-			.addClass( "ui-tooltip-content" )
+-			.appendTo( tooltip );
+-		tooltip.appendTo( this.document[0].body );
+-		this.tooltips[ id ] = element;
+-		return tooltip;
+-	},
+-
+-	_find: function( target ) {
+-		var id = target.data( "ui-tooltip-id" );
+-		return id ? $( "#" + id ) : $();
+-	},
+-
+-	_removeTooltip: function( tooltip ) {
+-		tooltip.remove();
+-		delete this.tooltips[ tooltip.attr( "id" ) ];
+-	},
+-
+-	_destroy: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			// Delegate to close method to handle common cleanup
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-
+-			// Remove immediately; destroying an open tooltip doesn't use the
+-			// hide animation
+-			$( "#" + id ).remove();
+-
+-			// Restore the title
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-				element.removeData( "ui-tooltip-title" );
+-			}
+-		});
+-	}
+-});
+-
+-}( jQuery ) );
+-(function($, undefined) {
+-
+-var dataSpace = "ui-effects-";
+-
+-$.effects = {
+-	effect: {}
+-};
+-
+-/*!
+- * jQuery Color Animations v2.1.2
+- * https://github.com/jquery/jquery-color
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * Date: Wed Jan 16 08:47:09 2013 -0600
+- */
+-(function( jQuery, undefined ) {
+-
+-	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+-
+-	// plusequals test for += 100 -= 100
+-	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+-	// a set of RE's that can match strings and generate color tuples.
+-	stringParsers = [{
+-			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ],
+-					execResult[ 3 ],
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ] * 2.55,
+-					execResult[ 2 ] * 2.55,
+-					execResult[ 3 ] * 2.55,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			space: "hsla",
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ] / 100,
+-					execResult[ 3 ] / 100,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}],
+-
+-	// jQuery.Color( )
+-	color = jQuery.Color = function( color, green, blue, alpha ) {
+-		return new jQuery.Color.fn.parse( color, green, blue, alpha );
+-	},
+-	spaces = {
+-		rgba: {
+-			props: {
+-				red: {
+-					idx: 0,
+-					type: "byte"
+-				},
+-				green: {
+-					idx: 1,
+-					type: "byte"
+-				},
+-				blue: {
+-					idx: 2,
+-					type: "byte"
+-				}
+-			}
+-		},
+-
+-		hsla: {
+-			props: {
+-				hue: {
+-					idx: 0,
+-					type: "degrees"
+-				},
+-				saturation: {
+-					idx: 1,
+-					type: "percent"
+-				},
+-				lightness: {
+-					idx: 2,
+-					type: "percent"
+-				}
+-			}
+-		}
+-	},
+-	propTypes = {
+-		"byte": {
+-			floor: true,
+-			max: 255
+-		},
+-		"percent": {
+-			max: 1
+-		},
+-		"degrees": {
+-			mod: 360,
+-			floor: true
+-		}
+-	},
+-	support = color.support = {},
+-
+-	// element for support tests
+-	supportElem = jQuery( "<p>" )[ 0 ],
+-
+-	// colors = jQuery.Color.names
+-	colors,
+-
+-	// local aliases of functions called often
+-	each = jQuery.each;
+-
+-// determine rgba support immediately
+-supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+-support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+-
+-// define cache name and alpha properties
+-// for rgba and hsla spaces
+-each( spaces, function( spaceName, space ) {
+-	space.cache = "_" + spaceName;
+-	space.props.alpha = {
+-		idx: 3,
+-		type: "percent",
+-		def: 1
+-	};
+-});
+-
+-function clamp( value, prop, allowEmpty ) {
+-	var type = propTypes[ prop.type ] || {};
+-
+-	if ( value == null ) {
+-		return (allowEmpty || !prop.def) ? null : prop.def;
+-	}
+-
+-	// ~~ is an short way of doing floor for positive numbers
+-	value = type.floor ? ~~value : parseFloat( value );
+-
+-	// IE will pass in empty strings as value for alpha,
+-	// which will hit this case
+-	if ( isNaN( value ) ) {
+-		return prop.def;
+-	}
+-
+-	if ( type.mod ) {
+-		// we add mod before modding to make sure that negatives values
+-		// get converted properly: -10 -> 350
+-		return (value + type.mod) % type.mod;
+-	}
+-
+-	// for now all property types without mod have min and max
+-	return 0 > value ? 0 : type.max < value ? type.max : value;
+-}
+-
+-function stringParse( string ) {
+-	var inst = color(),
+-		rgba = inst._rgba = [];
+-
+-	string = string.toLowerCase();
+-
+-	each( stringParsers, function( i, parser ) {
+-		var parsed,
+-			match = parser.re.exec( string ),
+-			values = match && parser.parse( match ),
+-			spaceName = parser.space || "rgba";
+-
+-		if ( values ) {
+-			parsed = inst[ spaceName ]( values );
+-
+-			// if this was an rgba parse the assignment might happen twice
+-			// oh well....
+-			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+-			rgba = inst._rgba = parsed._rgba;
+-
+-			// exit each( stringParsers ) here because we matched
+-			return false;
+-		}
+-	});
+-
+-	// Found a stringParser that handled it
+-	if ( rgba.length ) {
+-
+-		// if this came from a parsed string, force "transparent" when alpha is 0
+-		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+-		if ( rgba.join() === "0,0,0,0" ) {
+-			jQuery.extend( rgba, colors.transparent );
+-		}
+-		return inst;
+-	}
+-
+-	// named colors
+-	return colors[ string ];
+-}
+-
+-color.fn = jQuery.extend( color.prototype, {
+-	parse: function( red, green, blue, alpha ) {
+-		if ( red === undefined ) {
+-			this._rgba = [ null, null, null, null ];
+-			return this;
+-		}
+-		if ( red.jquery || red.nodeType ) {
+-			red = jQuery( red ).css( green );
+-			green = undefined;
+-		}
+-
+-		var inst = this,
+-			type = jQuery.type( red ),
+-			rgba = this._rgba = [];
+-
+-		// more than 1 argument specified - assume ( red, green, blue, alpha )
+-		if ( green !== undefined ) {
+-			red = [ red, green, blue, alpha ];
+-			type = "array";
+-		}
+-
+-		if ( type === "string" ) {
+-			return this.parse( stringParse( red ) || colors._default );
+-		}
+-
+-		if ( type === "array" ) {
+-			each( spaces.rgba.props, function( key, prop ) {
+-				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+-			});
+-			return this;
+-		}
+-
+-		if ( type === "object" ) {
+-			if ( red instanceof color ) {
+-				each( spaces, function( spaceName, space ) {
+-					if ( red[ space.cache ] ) {
+-						inst[ space.cache ] = red[ space.cache ].slice();
+-					}
+-				});
+-			} else {
+-				each( spaces, function( spaceName, space ) {
+-					var cache = space.cache;
+-					each( space.props, function( key, prop ) {
+-
+-						// if the cache doesn't exist, and we know how to convert
+-						if ( !inst[ cache ] && space.to ) {
+-
+-							// if the value was null, we don't need to copy it
+-							// if the key was alpha, we don't need to copy it either
+-							if ( key === "alpha" || red[ key ] == null ) {
+-								return;
+-							}
+-							inst[ cache ] = space.to( inst._rgba );
+-						}
+-
+-						// this is the only case where we allow nulls for ALL properties.
+-						// call clamp with alwaysAllowEmpty
+-						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+-					});
+-
+-					// everything defined but alpha?
+-					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+-						// use the default of 1
+-						inst[ cache ][ 3 ] = 1;
+-						if ( space.from ) {
+-							inst._rgba = space.from( inst[ cache ] );
+-						}
+-					}
+-				});
+-			}
+-			return this;
+-		}
+-	},
+-	is: function( compare ) {
+-		var is = color( compare ),
+-			same = true,
+-			inst = this;
+-
+-		each( spaces, function( _, space ) {
+-			var localCache,
+-				isCache = is[ space.cache ];
+-			if (isCache) {
+-				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+-				each( space.props, function( _, prop ) {
+-					if ( isCache[ prop.idx ] != null ) {
+-						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+-						return same;
+-					}
+-				});
+-			}
+-			return same;
+-		});
+-		return same;
+-	},
+-	_space: function() {
+-		var used = [],
+-			inst = this;
+-		each( spaces, function( spaceName, space ) {
+-			if ( inst[ space.cache ] ) {
+-				used.push( spaceName );
+-			}
+-		});
+-		return used.pop();
+-	},
+-	transition: function( other, distance ) {
+-		var end = color( other ),
+-			spaceName = end._space(),
+-			space = spaces[ spaceName ],
+-			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+-			start = startColor[ space.cache ] || space.to( startColor._rgba ),
+-			result = start.slice();
+-
+-		end = end[ space.cache ];
+-		each( space.props, function( key, prop ) {
+-			var index = prop.idx,
+-				startValue = start[ index ],
+-				endValue = end[ index ],
+-				type = propTypes[ prop.type ] || {};
+-
+-			// if null, don't override start value
+-			if ( endValue === null ) {
+-				return;
+-			}
+-			// if null - use end
+-			if ( startValue === null ) {
+-				result[ index ] = endValue;
+-			} else {
+-				if ( type.mod ) {
+-					if ( endValue - startValue > type.mod / 2 ) {
+-						startValue += type.mod;
+-					} else if ( startValue - endValue > type.mod / 2 ) {
+-						startValue -= type.mod;
+-					}
+-				}
+-				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+-			}
+-		});
+-		return this[ spaceName ]( result );
+-	},
+-	blend: function( opaque ) {
+-		// if we are already opaque - return ourself
+-		if ( this._rgba[ 3 ] === 1 ) {
+-			return this;
+-		}
+-
+-		var rgb = this._rgba.slice(),
+-			a = rgb.pop(),
+-			blend = color( opaque )._rgba;
+-
+-		return color( jQuery.map( rgb, function( v, i ) {
+-			return ( 1 - a ) * blend[ i ] + a * v;
+-		}));
+-	},
+-	toRgbaString: function() {
+-		var prefix = "rgba(",
+-			rgba = jQuery.map( this._rgba, function( v, i ) {
+-				return v == null ? ( i > 2 ? 1 : 0 ) : v;
+-			});
+-
+-		if ( rgba[ 3 ] === 1 ) {
+-			rgba.pop();
+-			prefix = "rgb(";
+-		}
+-
+-		return prefix + rgba.join() + ")";
+-	},
+-	toHslaString: function() {
+-		var prefix = "hsla(",
+-			hsla = jQuery.map( this.hsla(), function( v, i ) {
+-				if ( v == null ) {
+-					v = i > 2 ? 1 : 0;
+-				}
+-
+-				// catch 1 and 2
+-				if ( i && i < 3 ) {
+-					v = Math.round( v * 100 ) + "%";
+-				}
+-				return v;
+-			});
+-
+-		if ( hsla[ 3 ] === 1 ) {
+-			hsla.pop();
+-			prefix = "hsl(";
+-		}
+-		return prefix + hsla.join() + ")";
+-	},
+-	toHexString: function( includeAlpha ) {
+-		var rgba = this._rgba.slice(),
+-			alpha = rgba.pop();
+-
+-		if ( includeAlpha ) {
+-			rgba.push( ~~( alpha * 255 ) );
+-		}
+-
+-		return "#" + jQuery.map( rgba, function( v ) {
+-
+-			// default to 0 when nulls exist
+-			v = ( v || 0 ).toString( 16 );
+-			return v.length === 1 ? "0" + v : v;
+-		}).join("");
+-	},
+-	toString: function() {
+-		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+-	}
+-});
+-color.fn.parse.prototype = color.fn;
+-
+-// hsla conversions adapted from:
+-// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+-
+-function hue2rgb( p, q, h ) {
+-	h = ( h + 1 ) % 1;
+-	if ( h * 6 < 1 ) {
+-		return p + (q - p) * h * 6;
+-	}
+-	if ( h * 2 < 1) {
+-		return q;
+-	}
+-	if ( h * 3 < 2 ) {
+-		return p + (q - p) * ((2/3) - h) * 6;
+-	}
+-	return p;
+-}
+-
+-spaces.hsla.to = function ( rgba ) {
+-	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+-		return [ null, null, null, rgba[ 3 ] ];
+-	}
+-	var r = rgba[ 0 ] / 255,
+-		g = rgba[ 1 ] / 255,
+-		b = rgba[ 2 ] / 255,
+-		a = rgba[ 3 ],
+-		max = Math.max( r, g, b ),
+-		min = Math.min( r, g, b ),
+-		diff = max - min,
+-		add = max + min,
+-		l = add * 0.5,
+-		h, s;
+-
+-	if ( min === max ) {
+-		h = 0;
+-	} else if ( r === max ) {
+-		h = ( 60 * ( g - b ) / diff ) + 360;
+-	} else if ( g === max ) {
+-		h = ( 60 * ( b - r ) / diff ) + 120;
+-	} else {
+-		h = ( 60 * ( r - g ) / diff ) + 240;
+-	}
+-
+-	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+-	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+-	if ( diff === 0 ) {
+-		s = 0;
+-	} else if ( l <= 0.5 ) {
+-		s = diff / add;
+-	} else {
+-		s = diff / ( 2 - add );
+-	}
+-	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+-};
+-
+-spaces.hsla.from = function ( hsla ) {
+-	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+-		return [ null, null, null, hsla[ 3 ] ];
+-	}
+-	var h = hsla[ 0 ] / 360,
+-		s = hsla[ 1 ],
+-		l = hsla[ 2 ],
+-		a = hsla[ 3 ],
+-		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+-		p = 2 * l - q;
+-
+-	return [
+-		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+-		Math.round( hue2rgb( p, q, h ) * 255 ),
+-		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+-		a
+-	];
+-};
+-
+-
+-each( spaces, function( spaceName, space ) {
+-	var props = space.props,
+-		cache = space.cache,
+-		to = space.to,
+-		from = space.from;
+-
+-	// makes rgba() and hsla()
+-	color.fn[ spaceName ] = function( value ) {
+-
+-		// generate a cache for this space if it doesn't exist
+-		if ( to && !this[ cache ] ) {
+-			this[ cache ] = to( this._rgba );
+-		}
+-		if ( value === undefined ) {
+-			return this[ cache ].slice();
+-		}
+-
+-		var ret,
+-			type = jQuery.type( value ),
+-			arr = ( type === "array" || type === "object" ) ? value : arguments,
+-			local = this[ cache ].slice();
+-
+-		each( props, function( key, prop ) {
+-			var val = arr[ type === "object" ? key : prop.idx ];
+-			if ( val == null ) {
+-				val = local[ prop.idx ];
+-			}
+-			local[ prop.idx ] = clamp( val, prop );
+-		});
+-
+-		if ( from ) {
+-			ret = color( from( local ) );
+-			ret[ cache ] = local;
+-			return ret;
+-		} else {
+-			return color( local );
+-		}
+-	};
+-
+-	// makes red() green() blue() alpha() hue() saturation() lightness()
+-	each( props, function( key, prop ) {
+-		// alpha is included in more than one space
+-		if ( color.fn[ key ] ) {
+-			return;
+-		}
+-		color.fn[ key ] = function( value ) {
+-			var vtype = jQuery.type( value ),
+-				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+-				local = this[ fn ](),
+-				cur = local[ prop.idx ],
+-				match;
+-
+-			if ( vtype === "undefined" ) {
+-				return cur;
+-			}
+-
+-			if ( vtype === "function" ) {
+-				value = value.call( this, cur );
+-				vtype = jQuery.type( value );
+-			}
+-			if ( value == null && prop.empty ) {
+-				return this;
+-			}
+-			if ( vtype === "string" ) {
+-				match = rplusequals.exec( value );
+-				if ( match ) {
+-					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+-				}
+-			}
+-			local[ prop.idx ] = value;
+-			return this[ fn ]( local );
+-		};
+-	});
+-});
+-
+-// add cssHook and .fx.step function for each named hook.
+-// accept a space separated string of properties
+-color.hook = function( hook ) {
+-	var hooks = hook.split( " " );
+-	each( hooks, function( i, hook ) {
+-		jQuery.cssHooks[ hook ] = {
+-			set: function( elem, value ) {
+-				var parsed, curElem,
+-					backgroundColor = "";
+-
+-				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+-					value = color( parsed || value );
+-					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+-						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+-						while (
+-							(backgroundColor === "" || backgroundColor === "transparent") &&
+-							curElem && curElem.style
+-						) {
+-							try {
+-								backgroundColor = jQuery.css( curElem, "backgroundColor" );
+-								curElem = curElem.parentNode;
+-							} catch ( e ) {
+-							}
+-						}
+-
+-						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+-							backgroundColor :
+-							"_default" );
+-					}
+-
+-					value = value.toRgbaString();
+-				}
+-				try {
+-					elem.style[ hook ] = value;
+-				} catch( e ) {
+-					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+-				}
+-			}
+-		};
+-		jQuery.fx.step[ hook ] = function( fx ) {
+-			if ( !fx.colorInit ) {
+-				fx.start = color( fx.elem, hook );
+-				fx.end = color( fx.end );
+-				fx.colorInit = true;
+-			}
+-			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+-		};
+-	});
+-
+-};
+-
+-color.hook( stepHooks );
+-
+-jQuery.cssHooks.borderColor = {
+-	expand: function( value ) {
+-		var expanded = {};
+-
+-		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+-			expanded[ "border" + part + "Color" ] = value;
+-		});
+-		return expanded;
+-	}
+-};
+-
+-// Basic color names only.
+-// Usage of any of the other color names requires adding yourself or including
+-// jquery.color.svg-names.js.
+-colors = jQuery.Color.names = {
+-	// 4.1. Basic color keywords
+-	aqua: "#00ffff",
+-	black: "#000000",
+-	blue: "#0000ff",
+-	fuchsia: "#ff00ff",
+-	gray: "#808080",
+-	green: "#008000",
+-	lime: "#00ff00",
+-	maroon: "#800000",
+-	navy: "#000080",
+-	olive: "#808000",
+-	purple: "#800080",
+-	red: "#ff0000",
+-	silver: "#c0c0c0",
+-	teal: "#008080",
+-	white: "#ffffff",
+-	yellow: "#ffff00",
+-
+-	// 4.2.3. "transparent" color keyword
+-	transparent: [ null, null, null, 0 ],
+-
+-	_default: "#ffffff"
+-};
+-
+-})( jQuery );
+-
+-
+-/******************************************************************************/
+-/****************************** CLASS ANIMATIONS ******************************/
+-/******************************************************************************/
+-(function() {
+-
+-var classAnimationActions = [ "add", "remove", "toggle" ],
+-	shorthandStyles = {
+-		border: 1,
+-		borderBottom: 1,
+-		borderColor: 1,
+-		borderLeft: 1,
+-		borderRight: 1,
+-		borderTop: 1,
+-		borderWidth: 1,
+-		margin: 1,
+-		padding: 1
+-	};
+-
+-$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+-	$.fx.step[ prop ] = function( fx ) {
+-		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+-			jQuery.style( fx.elem, prop, fx.end );
+-			fx.setAttr = true;
+-		}
+-	};
+-});
+-
+-function getElementStyles( elem ) {
+-	var key, len,
+-		style = elem.ownerDocument.defaultView ?
+-			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+-			elem.currentStyle,
+-		styles = {};
+-
+-	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+-		len = style.length;
+-		while ( len-- ) {
+-			key = style[ len ];
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ $.camelCase( key ) ] = style[ key ];
+-			}
+-		}
+-	// support: Opera, IE <9
+-	} else {
+-		for ( key in style ) {
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ key ] = style[ key ];
+-			}
+-		}
+-	}
+-
+-	return styles;
+-}
+-
+-
+-function styleDifference( oldStyle, newStyle ) {
+-	var diff = {},
+-		name, value;
+-
+-	for ( name in newStyle ) {
+-		value = newStyle[ name ];
+-		if ( oldStyle[ name ] !== value ) {
+-			if ( !shorthandStyles[ name ] ) {
+-				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+-					diff[ name ] = value;
+-				}
+-			}
+-		}
+-	}
+-
+-	return diff;
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-$.effects.animateClass = function( value, duration, easing, callback ) {
+-	var o = $.speed( duration, easing, callback );
+-
+-	return this.queue( function() {
+-		var animated = $( this ),
+-			baseClass = animated.attr( "class" ) || "",
+-			applyClassChange,
+-			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+-
+-		// map the animated objects to store the original styles.
+-		allAnimations = allAnimations.map(function() {
+-			var el = $( this );
+-			return {
+-				el: el,
+-				start: getElementStyles( this )
+-			};
+-		});
+-
+-		// apply class change
+-		applyClassChange = function() {
+-			$.each( classAnimationActions, function(i, action) {
+-				if ( value[ action ] ) {
+-					animated[ action + "Class" ]( value[ action ] );
+-				}
+-			});
+-		};
+-		applyClassChange();
+-
+-		// map all animated objects again - calculate new styles and diff
+-		allAnimations = allAnimations.map(function() {
+-			this.end = getElementStyles( this.el[ 0 ] );
+-			this.diff = styleDifference( this.start, this.end );
+-			return this;
+-		});
+-
+-		// apply original class
+-		animated.attr( "class", baseClass );
+-
+-		// map all animated objects again - this time collecting a promise
+-		allAnimations = allAnimations.map(function() {
+-			var styleInfo = this,
+-				dfd = $.Deferred(),
+-				opts = $.extend({}, o, {
+-					queue: false,
+-					complete: function() {
+-						dfd.resolve( styleInfo );
+-					}
+-				});
+-
+-			this.el.animate( this.diff, opts );
+-			return dfd.promise();
+-		});
+-
+-		// once all animations have completed:
+-		$.when.apply( $, allAnimations.get() ).done(function() {
+-
+-			// set the final class
+-			applyClassChange();
+-
+-			// for each animated element,
+-			// clear all css properties that were animated
+-			$.each( arguments, function() {
+-				var el = this.el;
+-				$.each( this.diff, function(key) {
+-					el.css( key, "" );
+-				});
+-			});
+-
+-			// this is guarnteed to be there if you use jQuery.speed()
+-			// it also handles dequeuing the next anim...
+-			o.complete.call( animated[ 0 ] );
+-		});
+-	});
+-};
+-
+-$.fn.extend({
+-	addClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return speed ?
+-				$.effects.animateClass.call( this,
+-					{ add: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.addClass ),
+-
+-	removeClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return arguments.length > 1 ?
+-				$.effects.animateClass.call( this,
+-					{ remove: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.removeClass ),
+-
+-	toggleClass: (function( orig ) {
+-		return function( classNames, force, speed, easing, callback ) {
+-			if ( typeof force === "boolean" || force === undefined ) {
+-				if ( !speed ) {
+-					// without speed parameter
+-					return orig.apply( this, arguments );
+-				} else {
+-					return $.effects.animateClass.call( this,
+-						(force ? { add: classNames } : { remove: classNames }),
+-						speed, easing, callback );
+-				}
+-			} else {
+-				// without force parameter
+-				return $.effects.animateClass.call( this,
+-					{ toggle: classNames }, force, speed, easing );
+-			}
+-		};
+-	})( $.fn.toggleClass ),
+-
+-	switchClass: function( remove, add, speed, easing, callback) {
+-		return $.effects.animateClass.call( this, {
+-			add: add,
+-			remove: remove
+-		}, speed, easing, callback );
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EFFECTS **********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-$.extend( $.effects, {
+-	version: "1.10.3",
+-
+-	// Saves a set of properties in a data storage
+-	save: function( element, set ) {
+-		for( var i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+-			}
+-		}
+-	},
+-
+-	// Restores a set of previously saved properties from a data storage
+-	restore: function( element, set ) {
+-		var val, i;
+-		for( i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				val = element.data( dataSpace + set[ i ] );
+-				// support: jQuery 1.6.2
+-				// http://bugs.jquery.com/ticket/9917
+-				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+-				// We can't differentiate between "" and 0 here, so we just assume
+-				// empty string since it's likely to be a more common value...
+-				if ( val === undefined ) {
+-					val = "";
+-				}
+-				element.css( set[ i ], val );
+-			}
+-		}
+-	},
+-
+-	setMode: function( el, mode ) {
+-		if (mode === "toggle") {
+-			mode = el.is( ":hidden" ) ? "show" : "hide";
+-		}
+-		return mode;
+-	},
+-
+-	// Translates a [top,left] array into a baseline value
+-	// this should be a little more flexible in the future to handle a string & hash
+-	getBaseline: function( origin, original ) {
+-		var y, x;
+-		switch ( origin[ 0 ] ) {
+-			case "top": y = 0; break;
+-			case "middle": y = 0.5; break;
+-			case "bottom": y = 1; break;
+-			default: y = origin[ 0 ] / original.height;
+-		}
+-		switch ( origin[ 1 ] ) {
+-			case "left": x = 0; break;
+-			case "center": x = 0.5; break;
+-			case "right": x = 1; break;
+-			default: x = origin[ 1 ] / original.width;
+-		}
+-		return {
+-			x: x,
+-			y: y
+-		};
+-	},
+-
+-	// Wraps the element around a wrapper that copies position properties
+-	createWrapper: function( element ) {
+-
+-		// if the element is already wrapped, return it
+-		if ( element.parent().is( ".ui-effects-wrapper" )) {
+-			return element.parent();
+-		}
+-
+-		// wrap the element
+-		var props = {
+-				width: element.outerWidth(true),
+-				height: element.outerHeight(true),
+-				"float": element.css( "float" )
+-			},
+-			wrapper = $( "<div></div>" )
+-				.addClass( "ui-effects-wrapper" )
+-				.css({
+-					fontSize: "100%",
+-					background: "transparent",
+-					border: "none",
+-					margin: 0,
+-					padding: 0
+-				}),
+-			// Store the size in case width/height are defined in % - Fixes #5245
+-			size = {
+-				width: element.width(),
+-				height: element.height()
+-			},
+-			active = document.activeElement;
+-
+-		// support: Firefox
+-		// Firefox incorrectly exposes anonymous content
+-		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+-		try {
+-			active.id;
+-		} catch( e ) {
+-			active = document.body;
+-		}
+-
+-		element.wrap( wrapper );
+-
+-		// Fixes #7595 - Elements lose focus when wrapped.
+-		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-			$( active ).focus();
+-		}
+-
+-		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+-
+-		// transfer positioning properties to the wrapper
+-		if ( element.css( "position" ) === "static" ) {
+-			wrapper.css({ position: "relative" });
+-			element.css({ position: "relative" });
+-		} else {
+-			$.extend( props, {
+-				position: element.css( "position" ),
+-				zIndex: element.css( "z-index" )
+-			});
+-			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+-				props[ pos ] = element.css( pos );
+-				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+-					props[ pos ] = "auto";
+-				}
+-			});
+-			element.css({
+-				position: "relative",
+-				top: 0,
+-				left: 0,
+-				right: "auto",
+-				bottom: "auto"
+-			});
+-		}
+-		element.css(size);
+-
+-		return wrapper.css( props ).show();
+-	},
+-
+-	removeWrapper: function( element ) {
+-		var active = document.activeElement;
+-
+-		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+-			element.parent().replaceWith( element );
+-
+-			// Fixes #7595 - Elements lose focus when wrapped.
+-			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-				$( active ).focus();
+-			}
+-		}
+-
+-
+-		return element;
+-	},
+-
+-	setTransition: function( element, list, factor, value ) {
+-		value = value || {};
+-		$.each( list, function( i, x ) {
+-			var unit = element.cssUnit( x );
+-			if ( unit[ 0 ] > 0 ) {
+-				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+-			}
+-		});
+-		return value;
+-	}
+-});
+-
+-// return an effect options object for the given parameters:
+-function _normalizeArguments( effect, options, speed, callback ) {
+-
+-	// allow passing all options as the first parameter
+-	if ( $.isPlainObject( effect ) ) {
+-		options = effect;
+-		effect = effect.effect;
+-	}
+-
+-	// convert to an object
+-	effect = { effect: effect };
+-
+-	// catch (effect, null, ...)
+-	if ( options == null ) {
+-		options = {};
+-	}
+-
+-	// catch (effect, callback)
+-	if ( $.isFunction( options ) ) {
+-		callback = options;
+-		speed = null;
+-		options = {};
+-	}
+-
+-	// catch (effect, speed, ?)
+-	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+-		callback = speed;
+-		speed = options;
+-		options = {};
+-	}
+-
+-	// catch (effect, options, callback)
+-	if ( $.isFunction( speed ) ) {
+-		callback = speed;
+-		speed = null;
+-	}
+-
+-	// add options to effect
+-	if ( options ) {
+-		$.extend( effect, options );
+-	}
+-
+-	speed = speed || options.duration;
+-	effect.duration = $.fx.off ? 0 :
+-		typeof speed === "number" ? speed :
+-		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+-		$.fx.speeds._default;
+-
+-	effect.complete = callback || options.complete;
+-
+-	return effect;
+-}
+-
+-function standardAnimationOption( option ) {
+-	// Valid standard speeds (nothing, number, named speed)
+-	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+-		return true;
+-	}
+-
+-	// Invalid strings - treat as "normal" speed
+-	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+-		return true;
+-	}
+-
+-	// Complete callback
+-	if ( $.isFunction( option ) ) {
+-		return true;
+-	}
+-
+-	// Options hash (but not naming an effect)
+-	if ( typeof option === "object" && !option.effect ) {
+-		return true;
+-	}
+-
+-	// Didn't match any standard API
+-	return false;
+-}
+-
+-$.fn.extend({
+-	effect: function( /* effect, options, speed, callback */ ) {
+-		var args = _normalizeArguments.apply( this, arguments ),
+-			mode = args.mode,
+-			queue = args.queue,
+-			effectMethod = $.effects.effect[ args.effect ];
+-
+-		if ( $.fx.off || !effectMethod ) {
+-			// delegate to the original method (e.g., .show()) if possible
+-			if ( mode ) {
+-				return this[ mode ]( args.duration, args.complete );
+-			} else {
+-				return this.each( function() {
+-					if ( args.complete ) {
+-						args.complete.call( this );
+-					}
+-				});
+-			}
+-		}
+-
+-		function run( next ) {
+-			var elem = $( this ),
+-				complete = args.complete,
+-				mode = args.mode;
+-
+-			function done() {
+-				if ( $.isFunction( complete ) ) {
+-					complete.call( elem[0] );
+-				}
+-				if ( $.isFunction( next ) ) {
+-					next();
+-				}
+-			}
+-
+-			// If the element already has the correct final state, delegate to
+-			// the core methods so the internal tracking of "olddisplay" works.
+-			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+-				elem[ mode ]();
+-				done();
+-			} else {
+-				effectMethod.call( elem[0], args, done );
+-			}
+-		}
+-
+-		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+-	},
+-
+-	show: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "show";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.show ),
+-
+-	hide: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "hide";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.hide ),
+-
+-	toggle: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "toggle";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.toggle ),
+-
+-	// helper functions
+-	cssUnit: function(key) {
+-		var style = this.css( key ),
+-			val = [];
+-
+-		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+-			if ( style.indexOf( unit ) > 0 ) {
+-				val = [ parseFloat( style ), unit ];
+-			}
+-		});
+-		return val;
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EASING ***********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+-
+-var baseEasings = {};
+-
+-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+-	baseEasings[ name ] = function( p ) {
+-		return Math.pow( p, i + 2 );
+-	};
+-});
+-
+-$.extend( baseEasings, {
+-	Sine: function ( p ) {
+-		return 1 - Math.cos( p * Math.PI / 2 );
+-	},
+-	Circ: function ( p ) {
+-		return 1 - Math.sqrt( 1 - p * p );
+-	},
+-	Elastic: function( p ) {
+-		return p === 0 || p === 1 ? p :
+-			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+-	},
+-	Back: function( p ) {
+-		return p * p * ( 3 * p - 2 );
+-	},
+-	Bounce: function ( p ) {
+-		var pow2,
+-			bounce = 4;
+-
+-		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+-		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+-	}
+-});
+-
+-$.each( baseEasings, function( name, easeIn ) {
+-	$.easing[ "easeIn" + name ] = easeIn;
+-	$.easing[ "easeOut" + name ] = function( p ) {
+-		return 1 - easeIn( 1 - p );
+-	};
+-	$.easing[ "easeInOut" + name ] = function( p ) {
+-		return p < 0.5 ?
+-			easeIn( p * 2 ) / 2 :
+-			1 - easeIn( p * -2 + 2 ) / 2;
+-	};
+-});
+-
+-})();
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var rvertical = /up|down|vertical/,
+-	rpositivemotion = /up|left|vertical|horizontal/;
+-
+-$.effects.effect.blind = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		direction = o.direction || "up",
+-		vertical = rvertical.test( direction ),
+-		ref = vertical ? "height" : "width",
+-		ref2 = vertical ? "top" : "left",
+-		motion = rpositivemotion.test( direction ),
+-		animation = {},
+-		show = mode === "show",
+-		wrapper, distance, margin;
+-
+-	// if already wrapped, the wrapper's properties are my property. #6245
+-	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+-		$.effects.save( el.parent(), props );
+-	} else {
+-		$.effects.save( el, props );
+-	}
+-	el.show();
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	distance = wrapper[ ref ]();
+-	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+-
+-	animation[ ref ] = show ? distance : 0;
+-	if ( !motion ) {
+-		el
+-			.css( vertical ? "bottom" : "right", 0 )
+-			.css( vertical ? "top" : "left", "auto" )
+-			.css({ position: "absolute" });
+-
+-		animation[ ref2 ] = show ? margin : distance + margin;
+-	}
+-
+-	// start at 0 if we are showing
+-	if ( show ) {
+-		wrapper.css( ref, 0 );
+-		if ( ! motion ) {
+-			wrapper.css( ref2, margin + distance );
+-		}
+-	}
+-
+-	// Animate
+-	wrapper.animate( animation, {
+-		duration: o.duration,
+-		easing: o.easing,
+-		queue: false,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.bounce = function( o, done ) {
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-
+-		// defaults:
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		hide = mode === "hide",
+-		show = mode === "show",
+-		direction = o.direction || "up",
+-		distance = o.distance,
+-		times = o.times || 5,
+-
+-		// number of internal animations
+-		anims = times * 2 + ( show || hide ? 1 : 0 ),
+-		speed = o.duration / anims,
+-		easing = o.easing,
+-
+-		// utility:
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ),
+-		i,
+-		upAnim,
+-		downAnim,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	// Avoid touching opacity to prevent clearType and PNG issues in IE
+-	if ( show || hide ) {
+-		props.push( "opacity" );
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el ); // Create Wrapper
+-
+-	// default distance for the BIGGEST bounce is the outer Distance / 3
+-	if ( !distance ) {
+-		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+-	}
+-
+-	if ( show ) {
+-		downAnim = { opacity: 1 };
+-		downAnim[ ref ] = 0;
+-
+-		// if we are showing, force opacity 0 and set the initial position
+-		// then do the "first" animation
+-		el.css( "opacity", 0 )
+-			.css( ref, motion ? -distance * 2 : distance * 2 )
+-			.animate( downAnim, speed, easing );
+-	}
+-
+-	// start at the smallest distance if we are hiding
+-	if ( hide ) {
+-		distance = distance / Math.pow( 2, times - 1 );
+-	}
+-
+-	downAnim = {};
+-	downAnim[ ref ] = 0;
+-	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+-	for ( i = 0; i < times; i++ ) {
+-		upAnim = {};
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing )
+-			.animate( downAnim, speed, easing );
+-
+-		distance = hide ? distance * 2 : distance / 2;
+-	}
+-
+-	// Last Bounce when Hiding
+-	if ( hide ) {
+-		upAnim = { opacity: 0 };
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing );
+-	}
+-
+-	el.queue(function() {
+-		if ( hide ) {
+-			el.hide();
+-		}
+-		$.effects.restore( el, props );
+-		$.effects.removeWrapper( el );
+-		done();
+-	});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.clip = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "vertical",
+-		vert = direction === "vertical",
+-		size = vert ? "height" : "width",
+-		position = vert ? "top" : "left",
+-		animation = {},
+-		wrapper, animate, distance;
+-
+-	// Save & Show
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+-	distance = animate[ size ]();
+-
+-	// Shift
+-	if ( show ) {
+-		animate.css( size, 0 );
+-		animate.css( position, distance / 2 );
+-	}
+-
+-	// Create Animation Object:
+-	animation[ size ] = show ? distance : 0;
+-	animation[ position ] = show ? 0 : distance / 2;
+-
+-	// Animate
+-	animate.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( !show ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.drop = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+-		animation = {
+-			opacity: show ? 1 : 0
+-		},
+-		distance;
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+-
+-	if ( show ) {
+-		el
+-			.css( "opacity", 0 )
+-			.css( ref, motion === "pos" ? -distance : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( motion === "pos" ? "+=" : "-=" ) :
+-		( motion === "pos" ? "-=" : "+=" ) ) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.explode = function( o, done ) {
+-
+-	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+-		cells = rows,
+-		el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-
+-		// show and then visibility:hidden the element before calculating offset
+-		offset = el.show().css( "visibility", "hidden" ).offset(),
+-
+-		// width and height of a piece
+-		width = Math.ceil( el.outerWidth() / cells ),
+-		height = Math.ceil( el.outerHeight() / rows ),
+-		pieces = [],
+-
+-		// loop
+-		i, j, left, top, mx, my;
+-
+-	// children animate complete:
+-	function childComplete() {
+-		pieces.push( this );
+-		if ( pieces.length === rows * cells ) {
+-			animComplete();
+-		}
+-	}
+-
+-	// clone the element for each row and cell.
+-	for( i = 0; i < rows ; i++ ) { // ===>
+-		top = offset.top + i * height;
+-		my = i - ( rows - 1 ) / 2 ;
+-
+-		for( j = 0; j < cells ; j++ ) { // |||
+-			left = offset.left + j * width;
+-			mx = j - ( cells - 1 ) / 2 ;
+-
+-			// Create a clone of the now hidden main element that will be absolute positioned
+-			// within a wrapper div off the -left and -top equal to size of our pieces
+-			el
+-				.clone()
+-				.appendTo( "body" )
+-				.wrap( "<div></div>" )
+-				.css({
+-					position: "absolute",
+-					visibility: "visible",
+-					left: -j * width,
+-					top: -i * height
+-				})
+-
+-			// select the wrapper - make it overflow: hidden and absolute positioned based on
+-			// where the original was located +left and +top equal to the size of pieces
+-				.parent()
+-				.addClass( "ui-effects-explode" )
+-				.css({
+-					position: "absolute",
+-					overflow: "hidden",
+-					width: width,
+-					height: height,
+-					left: left + ( show ? mx * width : 0 ),
+-					top: top + ( show ? my * height : 0 ),
+-					opacity: show ? 0 : 1
+-				}).animate({
+-					left: left + ( show ? 0 : mx * width ),
+-					top: top + ( show ? 0 : my * height ),
+-					opacity: show ? 1 : 0
+-				}, o.duration || 500, o.easing, childComplete );
+-		}
+-	}
+-
+-	function animComplete() {
+-		el.css({
+-			visibility: "visible"
+-		});
+-		$( pieces ).remove();
+-		if ( !show ) {
+-			el.hide();
+-		}
+-		done();
+-	}
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.fade = function( o, done ) {
+-	var el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "toggle" );
+-
+-	el.animate({
+-		opacity: mode
+-	}, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: done
+-	});
+-};
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-$.effects.effect.fold = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		size = o.size || 15,
+-		percent = /([0-9]+)%/.exec( size ),
+-		horizFirst = !!o.horizFirst,
+-		widthFirst = show !== horizFirst,
+-		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+-		duration = o.duration / 2,
+-		wrapper, distance,
+-		animation1 = {},
+-		animation2 = {};
+-
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	distance = widthFirst ?
+-		[ wrapper.width(), wrapper.height() ] :
+-		[ wrapper.height(), wrapper.width() ];
+-
+-	if ( percent ) {
+-		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+-	}
+-	if ( show ) {
+-		wrapper.css( horizFirst ? {
+-			height: 0,
+-			width: size
+-		} : {
+-			height: size,
+-			width: 0
+-		});
+-	}
+-
+-	// Animation
+-	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+-	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+-
+-	// Animate
+-	wrapper
+-		.animate( animation1, duration, o.easing )
+-		.animate( animation2, duration, o.easing, function() {
+-			if ( hide ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.highlight = function( o, done ) {
+-	var elem = $( this ),
+-		props = [ "backgroundImage", "backgroundColor", "opacity" ],
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		animation = {
+-			backgroundColor: elem.css( "backgroundColor" )
+-		};
+-
+-	if (mode === "hide") {
+-		animation.opacity = 0;
+-	}
+-
+-	$.effects.save( elem, props );
+-
+-	elem
+-		.show()
+-		.css({
+-			backgroundImage: "none",
+-			backgroundColor: o.color || "#ffff99"
+-		})
+-		.animate( animation, {
+-			queue: false,
+-			duration: o.duration,
+-			easing: o.easing,
+-			complete: function() {
+-				if ( mode === "hide" ) {
+-					elem.hide();
+-				}
+-				$.effects.restore( elem, props );
+-				done();
+-			}
+-		});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.pulsate = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		showhide = ( show || mode === "hide" ),
+-
+-		// showing or hiding leaves of the "last" animation
+-		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+-		duration = o.duration / anims,
+-		animateTo = 0,
+-		queue = elem.queue(),
+-		queuelen = queue.length,
+-		i;
+-
+-	if ( show || !elem.is(":visible")) {
+-		elem.css( "opacity", 0 ).show();
+-		animateTo = 1;
+-	}
+-
+-	// anims - 1 opacity "toggles"
+-	for ( i = 1; i < anims; i++ ) {
+-		elem.animate({
+-			opacity: animateTo
+-		}, duration, o.easing );
+-		animateTo = 1 - animateTo;
+-	}
+-
+-	elem.animate({
+-		opacity: animateTo
+-	}, duration, o.easing);
+-
+-	elem.queue(function() {
+-		if ( hide ) {
+-			elem.hide();
+-		}
+-		done();
+-	});
+-
+-	// We just queued up "anims" animations, we need to put them next in the queue
+-	if ( queuelen > 1 ) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	elem.dequeue();
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.puff = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "hide" ),
+-		hide = mode === "hide",
+-		percent = parseInt( o.percent, 10 ) || 150,
+-		factor = percent / 100,
+-		original = {
+-			height: elem.height(),
+-			width: elem.width(),
+-			outerHeight: elem.outerHeight(),
+-			outerWidth: elem.outerWidth()
+-		};
+-
+-	$.extend( o, {
+-		effect: "scale",
+-		queue: false,
+-		fade: true,
+-		mode: mode,
+-		complete: done,
+-		percent: hide ? percent : 100,
+-		from: hide ?
+-			original :
+-			{
+-				height: original.height * factor,
+-				width: original.width * factor,
+-				outerHeight: original.outerHeight * factor,
+-				outerWidth: original.outerWidth * factor
+-			}
+-	});
+-
+-	elem.effect( o );
+-};
+-
+-$.effects.effect.scale = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		options = $.extend( true, {}, o ),
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		percent = parseInt( o.percent, 10 ) ||
+-			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+-		direction = o.direction || "both",
+-		origin = o.origin,
+-		original = {
+-			height: el.height(),
+-			width: el.width(),
+-			outerHeight: el.outerHeight(),
+-			outerWidth: el.outerWidth()
+-		},
+-		factor = {
+-			y: direction !== "horizontal" ? (percent / 100) : 1,
+-			x: direction !== "vertical" ? (percent / 100) : 1
+-		};
+-
+-	// We are going to pass this effect to the size effect:
+-	options.effect = "size";
+-	options.queue = false;
+-	options.complete = done;
+-
+-	// Set default origin and restore for show/hide
+-	if ( mode !== "effect" ) {
+-		options.origin = origin || ["middle","center"];
+-		options.restore = true;
+-	}
+-
+-	options.from = o.from || ( mode === "show" ? {
+-		height: 0,
+-		width: 0,
+-		outerHeight: 0,
+-		outerWidth: 0
+-	} : original );
+-	options.to = {
+-		height: original.height * factor.y,
+-		width: original.width * factor.x,
+-		outerHeight: original.outerHeight * factor.y,
+-		outerWidth: original.outerWidth * factor.x
+-	};
+-
+-	// Fade option to support puff
+-	if ( options.fade ) {
+-		if ( mode === "show" ) {
+-			options.from.opacity = 0;
+-			options.to.opacity = 1;
+-		}
+-		if ( mode === "hide" ) {
+-			options.from.opacity = 1;
+-			options.to.opacity = 0;
+-		}
+-	}
+-
+-	// Animate
+-	el.effect( options );
+-
+-};
+-
+-$.effects.effect.size = function( o, done ) {
+-
+-	// Create element
+-	var original, baseline, factor,
+-		el = $( this ),
+-		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+-
+-		// Always restore
+-		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+-
+-		// Copy for children
+-		props2 = [ "width", "height", "overflow" ],
+-		cProps = [ "fontSize" ],
+-		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+-		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+-
+-		// Set options
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		restore = o.restore || mode !== "effect",
+-		scale = o.scale || "both",
+-		origin = o.origin || [ "middle", "center" ],
+-		position = el.css( "position" ),
+-		props = restore ? props0 : props1,
+-		zero = {
+-			height: 0,
+-			width: 0,
+-			outerHeight: 0,
+-			outerWidth: 0
+-		};
+-
+-	if ( mode === "show" ) {
+-		el.show();
+-	}
+-	original = {
+-		height: el.height(),
+-		width: el.width(),
+-		outerHeight: el.outerHeight(),
+-		outerWidth: el.outerWidth()
+-	};
+-
+-	if ( o.mode === "toggle" && mode === "show" ) {
+-		el.from = o.to || zero;
+-		el.to = o.from || original;
+-	} else {
+-		el.from = o.from || ( mode === "show" ? zero : original );
+-		el.to = o.to || ( mode === "hide" ? zero : original );
+-	}
+-
+-	// Set scaling factor
+-	factor = {
+-		from: {
+-			y: el.from.height / original.height,
+-			x: el.from.width / original.width
+-		},
+-		to: {
+-			y: el.to.height / original.height,
+-			x: el.to.width / original.width
+-		}
+-	};
+-
+-	// Scale the css box
+-	if ( scale === "box" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( vProps );
+-			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+-		}
+-
+-		// Horizontal props scaling
+-		if ( factor.from.x !== factor.to.x ) {
+-			props = props.concat( hProps );
+-			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+-			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+-		}
+-	}
+-
+-	// Scale the content
+-	if ( scale === "content" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( cProps ).concat( props2 );
+-			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+-		}
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-	el.css( "overflow", "hidden" ).css( el.from );
+-
+-	// Adjust
+-	if (origin) { // Calculate baseline shifts
+-		baseline = $.effects.getBaseline( origin, original );
+-		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+-		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+-		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+-		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+-	}
+-	el.css( el.from ); // set top & left
+-
+-	// Animate
+-	if ( scale === "content" || scale === "both" ) { // Scale the children
+-
+-		// Add margins/font-size
+-		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+-		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+-		props2 = props0.concat(vProps).concat(hProps);
+-
+-		el.find( "*[width]" ).each( function(){
+-			var child = $( this ),
+-				c_original = {
+-					height: child.height(),
+-					width: child.width(),
+-					outerHeight: child.outerHeight(),
+-					outerWidth: child.outerWidth()
+-				};
+-			if (restore) {
+-				$.effects.save(child, props2);
+-			}
+-
+-			child.from = {
+-				height: c_original.height * factor.from.y,
+-				width: c_original.width * factor.from.x,
+-				outerHeight: c_original.outerHeight * factor.from.y,
+-				outerWidth: c_original.outerWidth * factor.from.x
+-			};
+-			child.to = {
+-				height: c_original.height * factor.to.y,
+-				width: c_original.width * factor.to.x,
+-				outerHeight: c_original.height * factor.to.y,
+-				outerWidth: c_original.width * factor.to.x
+-			};
+-
+-			// Vertical props scaling
+-			if ( factor.from.y !== factor.to.y ) {
+-				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+-				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+-			}
+-
+-			// Horizontal props scaling
+-			if ( factor.from.x !== factor.to.x ) {
+-				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+-				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+-			}
+-
+-			// Animate children
+-			child.css( child.from );
+-			child.animate( child.to, o.duration, o.easing, function() {
+-
+-				// Restore children
+-				if ( restore ) {
+-					$.effects.restore( child, props2 );
+-				}
+-			});
+-		});
+-	}
+-
+-	// Animate
+-	el.animate( el.to, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( el.to.opacity === 0 ) {
+-				el.css( "opacity", el.from.opacity );
+-			}
+-			if( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			if ( !restore ) {
+-
+-				// we need to calculate our new positioning based on the scaling
+-				if ( position === "static" ) {
+-					el.css({
+-						position: "relative",
+-						top: el.to.top,
+-						left: el.to.left
+-					});
+-				} else {
+-					$.each([ "top", "left" ], function( idx, pos ) {
+-						el.css( pos, function( _, str ) {
+-							var val = parseInt( str, 10 ),
+-								toRef = idx ? el.to.left : el.to.top;
+-
+-							// if original was "auto", recalculate the new value from wrapper
+-							if ( str === "auto" ) {
+-								return toRef + "px";
+-							}
+-
+-							return val + toRef + "px";
+-						});
+-					});
+-				}
+-			}
+-
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.shake = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		direction = o.direction || "left",
+-		distance = o.distance || 20,
+-		times = o.times || 3,
+-		anims = times * 2 + 1,
+-		speed = Math.round(o.duration/anims),
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		animation = {},
+-		animation1 = {},
+-		animation2 = {},
+-		i,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	// Animation
+-	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+-	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+-	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+-
+-	// Animate
+-	el.animate( animation, speed, o.easing );
+-
+-	// Shakes
+-	for ( i = 1; i < times; i++ ) {
+-		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+-	}
+-	el
+-		.animate( animation1, speed, o.easing )
+-		.animate( animation, speed / 2, o.easing )
+-		.queue(function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.slide = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+-		mode = $.effects.setMode( el, o.mode || "show" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		distance,
+-		animation = {};
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+-
+-	$.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	if ( show ) {
+-		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( positiveMotion ? "+=" : "-=") :
+-		( positiveMotion ? "-=" : "+=")) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.transfer = function( o, done ) {
+-	var elem = $( this ),
+-		target = $( o.to ),
+-		targetFixed = target.css( "position" ) === "fixed",
+-		body = $("body"),
+-		fixTop = targetFixed ? body.scrollTop() : 0,
+-		fixLeft = targetFixed ? body.scrollLeft() : 0,
+-		endPosition = target.offset(),
+-		animation = {
+-			top: endPosition.top - fixTop ,
+-			left: endPosition.left - fixLeft ,
+-			height: target.innerHeight(),
+-			width: target.innerWidth()
+-		},
+-		startPosition = elem.offset(),
+-		transfer = $( "<div class='ui-effects-transfer'></div>" )
+-			.appendTo( document.body )
+-			.addClass( o.className )
+-			.css({
+-				top: startPosition.top - fixTop ,
+-				left: startPosition.left - fixLeft ,
+-				height: elem.innerHeight(),
+-				width: elem.innerWidth(),
+-				position: targetFixed ? "fixed" : "absolute"
+-			})
+-			.animate( animation, o.duration, o.easing, function() {
+-				transfer.remove();
+-				done();
+-			});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.sortable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.sortable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.sortable.js	(revision 15488)
+@@ -1,1285 +0,0 @@
+-/*!
+- * jQuery UI Sortable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/sortable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-/*jshint loopfunc: true */
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-function isFloating(item) {
+-	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+-}
+-
+-$.widget("ui.sortable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "sort",
+-	ready: false,
+-	options: {
+-		appendTo: "parent",
+-		axis: false,
+-		connectWith: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		dropOnEmpty: true,
+-		forcePlaceholderSize: false,
+-		forceHelperSize: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		items: "> *",
+-		opacity: false,
+-		placeholder: false,
+-		revert: false,
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		scope: "default",
+-		tolerance: "intersect",
+-		zIndex: 1000,
+-
+-		// callbacks
+-		activate: null,
+-		beforeStop: null,
+-		change: null,
+-		deactivate: null,
+-		out: null,
+-		over: null,
+-		receive: null,
+-		remove: null,
+-		sort: null,
+-		start: null,
+-		stop: null,
+-		update: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options;
+-		this.containerCache = {};
+-		this.element.addClass("ui-sortable");
+-
+-		//Get the items
+-		this.refresh();
+-
+-		//Let's determine if the items are being displayed horizontally
+-		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
+-
+-		//Let's determine the parent's offset
+-		this.offset = this.element.offset();
+-
+-		//Initialize mouse events for interaction
+-		this._mouseInit();
+-
+-		//We're ready to go
+-		this.ready = true;
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass("ui-sortable ui-sortable-disabled");
+-		this._mouseDestroy();
+-
+-		for ( var i = this.items.length - 1; i >= 0; i-- ) {
+-			this.items[i].item.removeData(this.widgetName + "-item");
+-		}
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value){
+-		if ( key === "disabled" ) {
+-			this.options[ key ] = value;
+-
+-			this.widget().toggleClass( "ui-sortable-disabled", !!value );
+-		} else {
+-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
+-			$.Widget.prototype._setOption.apply(this, arguments);
+-		}
+-	},
+-
+-	_mouseCapture: function(event, overrideHandle) {
+-		var currentItem = null,
+-			validHandle = false,
+-			that = this;
+-
+-		if (this.reverting) {
+-			return false;
+-		}
+-
+-		if(this.options.disabled || this.options.type === "static") {
+-			return false;
+-		}
+-
+-		//We have to refresh the items data once first
+-		this._refreshItems(event);
+-
+-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+-		$(event.target).parents().each(function() {
+-			if($.data(this, that.widgetName + "-item") === that) {
+-				currentItem = $(this);
+-				return false;
+-			}
+-		});
+-		if($.data(event.target, that.widgetName + "-item") === that) {
+-			currentItem = $(event.target);
+-		}
+-
+-		if(!currentItem) {
+-			return false;
+-		}
+-		if(this.options.handle && !overrideHandle) {
+-			$(this.options.handle, currentItem).find("*").addBack().each(function() {
+-				if(this === event.target) {
+-					validHandle = true;
+-				}
+-			});
+-			if(!validHandle) {
+-				return false;
+-			}
+-		}
+-
+-		this.currentItem = currentItem;
+-		this._removeCurrentsFromItems();
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event, overrideHandle, noActivation) {
+-
+-		var i, body,
+-			o = this.options;
+-
+-		this.currentContainer = this;
+-
+-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+-		this.refreshPositions();
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Get the next scrolling parent
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.currentItem.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		// Only after we got the offset, we can change the helper's position to absolute
+-		// TODO: Still need to figure out a way to make relative sorting possible
+-		this.helper.css("position", "absolute");
+-		this.cssPosition = this.helper.css("position");
+-
+-		//Generate the original position
+-		this.originalPosition = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Cache the former DOM position
+-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+-
+-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.currentItem.hide();
+-		}
+-
+-		//Create the placeholder
+-		this._createPlaceholder();
+-
+-		//Set a containment if given in the options
+-		if(o.containment) {
+-			this._setContainment();
+-		}
+-
+-		if( o.cursor && o.cursor !== "auto" ) { // cursor option
+-			body = this.document.find( "body" );
+-
+-			// support: IE
+-			this.storedCursor = body.css( "cursor" );
+-			body.css( "cursor", o.cursor );
+-
+-			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+-		}
+-
+-		if(o.opacity) { // opacity option
+-			if (this.helper.css("opacity")) {
+-				this._storedOpacity = this.helper.css("opacity");
+-			}
+-			this.helper.css("opacity", o.opacity);
+-		}
+-
+-		if(o.zIndex) { // zIndex option
+-			if (this.helper.css("zIndex")) {
+-				this._storedZIndex = this.helper.css("zIndex");
+-			}
+-			this.helper.css("zIndex", o.zIndex);
+-		}
+-
+-		//Prepare scrolling
+-		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-			this.overflowOffset = this.scrollParent.offset();
+-		}
+-
+-		//Call callbacks
+-		this._trigger("start", event, this._uiHash());
+-
+-		//Recache the helper size
+-		if(!this._preserveHelperProportions) {
+-			this._cacheHelperProportions();
+-		}
+-
+-
+-		//Post "activate" events to possible containers
+-		if( !noActivation ) {
+-			for ( i = this.containers.length - 1; i >= 0; i-- ) {
+-				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+-			}
+-		}
+-
+-		//Prepare possible droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-		this.dragging = true;
+-
+-		this.helper.addClass("ui-sortable-helper");
+-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		return true;
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-		var i, item, itemElement, intersection,
+-			o = this.options,
+-			scrolled = false;
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		if (!this.lastPositionAbs) {
+-			this.lastPositionAbs = this.positionAbs;
+-		}
+-
+-		//Do scrolling
+-		if(this.options.scroll) {
+-			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-
+-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-
+-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-
+-			} else {
+-
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-
+-			}
+-
+-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-				$.ui.ddmanager.prepareOffsets(this, event);
+-			}
+-		}
+-
+-		//Regenerate the absolute position used for position checks
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Set the helper position
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-
+-		//Rearrange
+-		for (i = this.items.length - 1; i >= 0; i--) {
+-
+-			//Cache variables and intersection, continue if no intersection
+-			item = this.items[i];
+-			itemElement = item.item[0];
+-			intersection = this._intersectsWithPointer(item);
+-			if (!intersection) {
+-				continue;
+-			}
+-
+-			// Only put the placeholder inside the current Container, skip all
+-			// items form other containers. This works because when moving
+-			// an item from one container to another the
+-			// currentContainer is switched before the placeholder is moved.
+-			//
+-			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
+-			// beetween the outer and inner container.
+-			if (item.instance !== this.currentContainer) {
+-				continue;
+-			}
+-
+-			// cannot intersect with itself
+-			// no useless actions that have been done before
+-			// no action if the item moved is the parent of the item checked
+-			if (itemElement !== this.currentItem[0] &&
+-				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+-				!$.contains(this.placeholder[0], itemElement) &&
+-				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+-			) {
+-
+-				this.direction = intersection === 1 ? "down" : "up";
+-
+-				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+-					this._rearrange(event, item);
+-				} else {
+-					break;
+-				}
+-
+-				this._trigger("change", event, this._uiHash());
+-				break;
+-			}
+-		}
+-
+-		//Post events to containers
+-		this._contactContainers(event);
+-
+-		//Interconnect with droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		//Call callbacks
+-		this._trigger("sort", event, this._uiHash());
+-
+-		this.lastPositionAbs = this.positionAbs;
+-		return false;
+-
+-	},
+-
+-	_mouseStop: function(event, noPropagation) {
+-
+-		if(!event) {
+-			return;
+-		}
+-
+-		//If we are using droppables, inform the manager about the drop
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			$.ui.ddmanager.drop(this, event);
+-		}
+-
+-		if(this.options.revert) {
+-			var that = this,
+-				cur = this.placeholder.offset(),
+-				axis = this.options.axis,
+-				animation = {};
+-
+-			if ( !axis || axis === "x" ) {
+-				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
+-			}
+-			if ( !axis || axis === "y" ) {
+-				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
+-			}
+-			this.reverting = true;
+-			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+-				that._clear(event);
+-			});
+-		} else {
+-			this._clear(event, noPropagation);
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.dragging) {
+-
+-			this._mouseUp({ target: null });
+-
+-			if(this.options.helper === "original") {
+-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-			} else {
+-				this.currentItem.show();
+-			}
+-
+-			//Post deactivating events to containers
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", null, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		if (this.placeholder) {
+-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-			if(this.placeholder[0].parentNode) {
+-				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-			}
+-			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+-				this.helper.remove();
+-			}
+-
+-			$.extend(this, {
+-				helper: null,
+-				dragging: false,
+-				reverting: false,
+-				_noFinalSort: null
+-			});
+-
+-			if(this.domPosition.prev) {
+-				$(this.domPosition.prev).after(this.currentItem);
+-			} else {
+-				$(this.domPosition.parent).prepend(this.currentItem);
+-			}
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	serialize: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			str = [];
+-		o = o || {};
+-
+-		$(items).each(function() {
+-			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+-			if (res) {
+-				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+-			}
+-		});
+-
+-		if(!str.length && o.key) {
+-			str.push(o.key + "=");
+-		}
+-
+-		return str.join("&");
+-
+-	},
+-
+-	toArray: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			ret = [];
+-
+-		o = o || {};
+-
+-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+-		return ret;
+-
+-	},
+-
+-	/* Be careful with the following core functions */
+-	_intersectsWith: function(item) {
+-
+-		var x1 = this.positionAbs.left,
+-			x2 = x1 + this.helperProportions.width,
+-			y1 = this.positionAbs.top,
+-			y2 = y1 + this.helperProportions.height,
+-			l = item.left,
+-			r = l + item.width,
+-			t = item.top,
+-			b = t + item.height,
+-			dyClick = this.offset.click.top,
+-			dxClick = this.offset.click.left,
+-			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+-			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+-			isOverElement = isOverElementHeight && isOverElementWidth;
+-
+-		if ( this.options.tolerance === "pointer" ||
+-			this.options.forcePointerForContainers ||
+-			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+-		) {
+-			return isOverElement;
+-		} else {
+-
+-			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+-				x2 - (this.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+-				y2 - (this.helperProportions.height / 2) < b ); // Top Half
+-
+-		}
+-	},
+-
+-	_intersectsWithPointer: function(item) {
+-
+-		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+-			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+-			isOverElement = isOverElementHeight && isOverElementWidth,
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (!isOverElement) {
+-			return false;
+-		}
+-
+-		return this.floating ?
+-			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+-			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+-
+-	},
+-
+-	_intersectsWithSides: function(item) {
+-
+-		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+-			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (this.floating && horizontalDirection) {
+-			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+-		} else {
+-			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+-		}
+-
+-	},
+-
+-	_getDragVerticalDirection: function() {
+-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+-		return delta !== 0 && (delta > 0 ? "down" : "up");
+-	},
+-
+-	_getDragHorizontalDirection: function() {
+-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+-		return delta !== 0 && (delta > 0 ? "right" : "left");
+-	},
+-
+-	refresh: function(event) {
+-		this._refreshItems(event);
+-		this.refreshPositions();
+-		return this;
+-	},
+-
+-	_connectWith: function() {
+-		var options = this.options;
+-		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+-	},
+-
+-	_getItemsAsjQuery: function(connected) {
+-
+-		var i, j, cur, inst,
+-			items = [],
+-			queries = [],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && connected) {
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for ( j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+-					}
+-				}
+-			}
+-		}
+-
+-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+-
+-		for (i = queries.length - 1; i >= 0; i--){
+-			queries[i][0].each(function() {
+-				items.push(this);
+-			});
+-		}
+-
+-		return $(items);
+-
+-	},
+-
+-	_removeCurrentsFromItems: function() {
+-
+-		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+-
+-		this.items = $.grep(this.items, function (item) {
+-			for (var j=0; j < list.length; j++) {
+-				if(list[j] === item.item[0]) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		});
+-
+-	},
+-
+-	_refreshItems: function(event) {
+-
+-		this.items = [];
+-		this.containers = [this];
+-
+-		var i, j, cur, inst, targetData, _queries, item, queriesLength,
+-			items = this.items,
+-			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for (j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+-						this.containers.push(inst);
+-					}
+-				}
+-			}
+-		}
+-
+-		for (i = queries.length - 1; i >= 0; i--) {
+-			targetData = queries[i][1];
+-			_queries = queries[i][0];
+-
+-			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+-				item = $(_queries[j]);
+-
+-				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+-
+-				items.push({
+-					item: item,
+-					instance: targetData,
+-					width: 0, height: 0,
+-					left: 0, top: 0
+-				});
+-			}
+-		}
+-
+-	},
+-
+-	refreshPositions: function(fast) {
+-
+-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+-		if(this.offsetParent && this.helper) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		var i, item, t, p;
+-
+-		for (i = this.items.length - 1; i >= 0; i--){
+-			item = this.items[i];
+-
+-			//We ignore calculating positions of all connected containers when we're not over them
+-			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+-				continue;
+-			}
+-
+-			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+-
+-			if (!fast) {
+-				item.width = t.outerWidth();
+-				item.height = t.outerHeight();
+-			}
+-
+-			p = t.offset();
+-			item.left = p.left;
+-			item.top = p.top;
+-		}
+-
+-		if(this.options.custom && this.options.custom.refreshContainers) {
+-			this.options.custom.refreshContainers.call(this);
+-		} else {
+-			for (i = this.containers.length - 1; i >= 0; i--){
+-				p = this.containers[i].element.offset();
+-				this.containers[i].containerCache.left = p.left;
+-				this.containers[i].containerCache.top = p.top;
+-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
+-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	_createPlaceholder: function(that) {
+-		that = that || this;
+-		var className,
+-			o = that.options;
+-
+-		if(!o.placeholder || o.placeholder.constructor === String) {
+-			className = o.placeholder;
+-			o.placeholder = {
+-				element: function() {
+-
+-					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+-						element = $( "<" + nodeName + ">", that.document[0] )
+-							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+-							.removeClass("ui-sortable-helper");
+-
+-					if ( nodeName === "tr" ) {
+-						that.currentItem.children().each(function() {
+-							$( "<td>&#160;</td>", that.document[0] )
+-								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+-								.appendTo( element );
+-						});
+-					} else if ( nodeName === "img" ) {
+-						element.attr( "src", that.currentItem.attr( "src" ) );
+-					}
+-
+-					if ( !className ) {
+-						element.css( "visibility", "hidden" );
+-					}
+-
+-					return element;
+-				},
+-				update: function(container, p) {
+-
+-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+-					if(className && !o.forcePlaceholderSize) {
+-						return;
+-					}
+-
+-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+-					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+-					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+-				}
+-			};
+-		}
+-
+-		//Create the placeholder
+-		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+-
+-		//Append it after the actual current item
+-		that.currentItem.after(that.placeholder);
+-
+-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+-		o.placeholder.update(that, that.placeholder);
+-
+-	},
+-
+-	_contactContainers: function(event) {
+-		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
+-			innermostContainer = null,
+-			innermostIndex = null;
+-
+-		// get innermost container that intersects with item
+-		for (i = this.containers.length - 1; i >= 0; i--) {
+-
+-			// never consider a container that's located within the item itself
+-			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+-				continue;
+-			}
+-
+-			if(this._intersectsWith(this.containers[i].containerCache)) {
+-
+-				// if we've already found a container and it's more "inner" than this, then continue
+-				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+-					continue;
+-				}
+-
+-				innermostContainer = this.containers[i];
+-				innermostIndex = i;
+-
+-			} else {
+-				// container doesn't intersect. trigger "out" event if necessary
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", event, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		// if no intersecting containers found, return
+-		if(!innermostContainer) {
+-			return;
+-		}
+-
+-		// move the item into the container if it's not there already
+-		if(this.containers.length === 1) {
+-			if (!this.containers[innermostIndex].containerCache.over) {
+-				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-				this.containers[innermostIndex].containerCache.over = 1;
+-			}
+-		} else {
+-
+-			//When entering a new container, we will find the item with the least distance and append our item near it
+-			dist = 10000;
+-			itemWithLeastDistance = null;
+-			floating = innermostContainer.floating || isFloating(this.currentItem);
+-			posProperty = floating ? "left" : "top";
+-			sizeProperty = floating ? "width" : "height";
+-			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
+-			for (j = this.items.length - 1; j >= 0; j--) {
+-				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+-					continue;
+-				}
+-				if(this.items[j].item[0] === this.currentItem[0]) {
+-					continue;
+-				}
+-				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
+-					continue;
+-				}
+-				cur = this.items[j].item.offset()[posProperty];
+-				nearBottom = false;
+-				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+-					nearBottom = true;
+-					cur += this.items[j][sizeProperty];
+-				}
+-
+-				if(Math.abs(cur - base) < dist) {
+-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+-					this.direction = nearBottom ? "up": "down";
+-				}
+-			}
+-
+-			//Check if dropOnEmpty is enabled
+-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+-				return;
+-			}
+-
+-			if(this.currentContainer === this.containers[innermostIndex]) {
+-				return;
+-			}
+-
+-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+-			this._trigger("change", event, this._uiHash());
+-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+-			this.currentContainer = this.containers[innermostIndex];
+-
+-			//Update the placeholder
+-			this.options.placeholder.update(this.currentContainer, this.placeholder);
+-
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		}
+-
+-
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+-
+-		//Add the helper to the DOM if that didn't happen already
+-		if(!helper.parents("body").length) {
+-			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+-		}
+-
+-		if(helper[0] === this.currentItem[0]) {
+-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+-		}
+-
+-		if(!helper[0].style.width || o.forceHelperSize) {
+-			helper.width(this.currentItem.width());
+-		}
+-		if(!helper[0].style.height || o.forceHelperSize) {
+-			helper.height(this.currentItem.height());
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		// This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		// with an ugly IE fix
+-		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.currentItem.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var ce, co, over,
+-			o = this.options;
+-		if(o.containment === "parent") {
+-			o.containment = this.helper[0].parentNode;
+-		}
+-		if(o.containment === "document" || o.containment === "window") {
+-			this.containment = [
+-				0 - this.offset.relative.left - this.offset.parent.left,
+-				0 - this.offset.relative.top - this.offset.parent.top,
+-				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
+-				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment)) {
+-			ce = $(o.containment)[0];
+-			co = $(o.containment).offset();
+-			over = ($(ce).css("overflow") !== "hidden");
+-
+-			this.containment = [
+-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+-			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var top, left,
+-			o = this.options,
+-			pageX = event.pageX,
+-			pageY = event.pageY,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		// This is another very weird special case that only happens for relative elements:
+-		// 1. If the css position is relative
+-		// 2. and the scroll parent is the document or similar to the offset parent
+-		// we have to refresh the relative offset during the scroll so there are no jumps
+-		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+-			this.offset.relative = this._getRelativeOffset();
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-
+-			if(this.containment) {
+-				if(event.pageX - this.offset.click.left < this.containment[0]) {
+-					pageX = this.containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < this.containment[1]) {
+-					pageY = this.containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > this.containment[2]) {
+-					pageX = this.containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > this.containment[3]) {
+-					pageY = this.containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+-				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+-				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																// The absolute mouse position
+-				this.offset.click.top -													// Click offset (relative to the element)
+-				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX -																// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_rearrange: function(event, i, a, hardRefresh) {
+-
+-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+-
+-		//Various things done here to improve the performance:
+-		// 1. we create a setTimeout, that calls refreshPositions
+-		// 2. on the instance, we have a counter variable, that get's higher after every append
+-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+-		// 4. this lets only the last addition to the timeout stack through
+-		this.counter = this.counter ? ++this.counter : 1;
+-		var counter = this.counter;
+-
+-		this._delay(function() {
+-			if(counter === this.counter) {
+-				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+-			}
+-		});
+-
+-	},
+-
+-	_clear: function(event, noPropagation) {
+-
+-		this.reverting = false;
+-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+-		// everything else normalized again
+-		var i,
+-			delayedTriggers = [];
+-
+-		// We first have to update the dom position of the actual currentItem
+-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+-		if(!this._noFinalSort && this.currentItem.parent().length) {
+-			this.placeholder.before(this.currentItem);
+-		}
+-		this._noFinalSort = null;
+-
+-		if(this.helper[0] === this.currentItem[0]) {
+-			for(i in this._storedCSS) {
+-				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+-					this._storedCSS[i] = "";
+-				}
+-			}
+-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-		} else {
+-			this.currentItem.show();
+-		}
+-
+-		if(this.fromOutside && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+-		}
+-		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+-		}
+-
+-		// Check if the items Container has Changed and trigger appropriate
+-		// events.
+-		if (this !== this.currentContainer) {
+-			if(!noPropagation) {
+-				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
+-			}
+-		}
+-
+-
+-		//Post events to containers
+-		for (i = this.containers.length - 1; i >= 0; i--){
+-			if(!noPropagation) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-			}
+-			if(this.containers[i].containerCache.over) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-				this.containers[i].containerCache.over = 0;
+-			}
+-		}
+-
+-		//Do what was originally in plugins
+-		if ( this.storedCursor ) {
+-			this.document.find( "body" ).css( "cursor", this.storedCursor );
+-			this.storedStylesheet.remove();
+-		}
+-		if(this._storedOpacity) {
+-			this.helper.css("opacity", this._storedOpacity);
+-		}
+-		if(this._storedZIndex) {
+-			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+-		}
+-
+-		this.dragging = false;
+-		if(this.cancelHelperRemoval) {
+-			if(!noPropagation) {
+-				this._trigger("beforeStop", event, this._uiHash());
+-				for (i=0; i < delayedTriggers.length; i++) {
+-					delayedTriggers[i].call(this, event);
+-				} //Trigger all delayed events
+-				this._trigger("stop", event, this._uiHash());
+-			}
+-
+-			this.fromOutside = false;
+-			return false;
+-		}
+-
+-		if(!noPropagation) {
+-			this._trigger("beforeStop", event, this._uiHash());
+-		}
+-
+-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-
+-		if(!noPropagation) {
+-			for (i=0; i < delayedTriggers.length; i++) {
+-				delayedTriggers[i].call(this, event);
+-			} //Trigger all delayed events
+-			this._trigger("stop", event, this._uiHash());
+-		}
+-
+-		this.fromOutside = false;
+-		return true;
+-
+-	},
+-
+-	_trigger: function() {
+-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+-			this.cancel();
+-		}
+-	},
+-
+-	_uiHash: function(_inst) {
+-		var inst = _inst || this;
+-		return {
+-			helper: inst.helper,
+-			placeholder: inst.placeholder || $([]),
+-			position: inst.position,
+-			originalPosition: inst.originalPosition,
+-			offset: inst.positionAbs,
+-			item: inst.currentItem,
+-			sender: _inst ? _inst.element : null
+-		};
+-	}
+-
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.datepicker.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.datepicker.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.datepicker.js	(revision 15488)
+@@ -1,2038 +0,0 @@
+-/*!
+- * jQuery UI Datepicker 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/datepicker/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.extend($.ui, { datepicker: { version: "1.10.3" } });
+-
+-var PROP_NAME = "datepicker",
+-	instActive;
+-
+-/* Date picker manager.
+-   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+-   Settings for (groups of) date pickers are maintained in an instance object,
+-   allowing multiple different settings on the same page. */
+-
+-function Datepicker() {
+-	this._curInst = null; // The current instance in use
+-	this._keyEvent = false; // If the last event was a key event
+-	this._disabledInputs = []; // List of date picker inputs that have been disabled
+-	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+-	this._inDialog = false; // True if showing within a "dialog", false if not
+-	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+-	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+-	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+-	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+-	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+-	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+-	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+-	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+-	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+-	this.regional = []; // Available regional settings, indexed by language code
+-	this.regional[""] = { // Default regional settings
+-		closeText: "Done", // Display text for close link
+-		prevText: "Prev", // Display text for previous month link
+-		nextText: "Next", // Display text for next month link
+-		currentText: "Today", // Display text for current month link
+-		monthNames: ["January","February","March","April","May","June",
+-			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
+-		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+-		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+-		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+-		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+-		weekHeader: "Wk", // Column header for week of the year
+-		dateFormat: "mm/dd/yy", // See format options on parseDate
+-		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+-		isRTL: false, // True if right-to-left language, false if left-to-right
+-		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+-		yearSuffix: "" // Additional text to append to the year in the month headers
+-	};
+-	this._defaults = { // Global defaults for all the date picker instances
+-		showOn: "focus", // "focus" for popup on focus,
+-			// "button" for trigger button, or "both" for either
+-		showAnim: "fadeIn", // Name of jQuery animation for popup
+-		showOptions: {}, // Options for enhanced animations
+-		defaultDate: null, // Used when field is blank: actual date,
+-			// +/-number for offset from today, null for today
+-		appendText: "", // Display text following the input box, e.g. showing the format
+-		buttonText: "...", // Text for trigger button
+-		buttonImage: "", // URL for trigger button image
+-		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+-		hideIfNoPrevNext: false, // True to hide next/previous month links
+-			// if not applicable, false to just disable them
+-		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+-		gotoCurrent: false, // True if today link goes back to current selection instead
+-		changeMonth: false, // True if month can be selected directly, false if only prev/next
+-		changeYear: false, // True if year can be selected directly, false if only prev/next
+-		yearRange: "c-10:c+10", // Range of years to display in drop-down,
+-			// either relative to today's year (-nn:+nn), relative to currently displayed year
+-			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+-		showOtherMonths: false, // True to show dates in other months, false to leave blank
+-		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+-		showWeek: false, // True to show week of the year, false to not show it
+-		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+-			// takes a Date and returns the number of the week for it
+-		shortYearCutoff: "+10", // Short year values < this are in the current century,
+-			// > this are in the previous century,
+-			// string value starting with "+" for current year + value
+-		minDate: null, // The earliest selectable date, or null for no limit
+-		maxDate: null, // The latest selectable date, or null for no limit
+-		duration: "fast", // Duration of display/closure
+-		beforeShowDay: null, // Function that takes a date and returns an array with
+-			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+-			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+-		beforeShow: null, // Function that takes an input field and
+-			// returns a set of custom settings for the date picker
+-		onSelect: null, // Define a callback function when a date is selected
+-		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+-		onClose: null, // Define a callback function when the datepicker is closed
+-		numberOfMonths: 1, // Number of months to show at a time
+-		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+-		stepMonths: 1, // Number of months to step back/forward
+-		stepBigMonths: 12, // Number of months to step back/forward for the big links
+-		altField: "", // Selector for an alternate field to store selected dates into
+-		altFormat: "", // The date format to use for the alternate field
+-		constrainInput: true, // The input is constrained by the current date format
+-		showButtonPanel: false, // True to show button panel, false to not show it
+-		autoSize: false, // True to size the input for the date format, false to leave as is
+-		disabled: false // The initial disabled state
+-	};
+-	$.extend(this._defaults, this.regional[""]);
+-	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+-}
+-
+-$.extend(Datepicker.prototype, {
+-	/* Class name added to elements to indicate already configured with a date picker. */
+-	markerClassName: "hasDatepicker",
+-
+-	//Keep track of the maximum number of rows displayed (see #7043)
+-	maxRows: 4,
+-
+-	// TODO rename to "widget" when switching to widget factory
+-	_widgetDatepicker: function() {
+-		return this.dpDiv;
+-	},
+-
+-	/* Override the default settings for all instances of the date picker.
+-	 * @param  settings  object - the new settings to use as defaults (anonymous object)
+-	 * @return the manager object
+-	 */
+-	setDefaults: function(settings) {
+-		extendRemove(this._defaults, settings || {});
+-		return this;
+-	},
+-
+-	/* Attach the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+-	 */
+-	_attachDatepicker: function(target, settings) {
+-		var nodeName, inline, inst;
+-		nodeName = target.nodeName.toLowerCase();
+-		inline = (nodeName === "div" || nodeName === "span");
+-		if (!target.id) {
+-			this.uuid += 1;
+-			target.id = "dp" + this.uuid;
+-		}
+-		inst = this._newInst($(target), inline);
+-		inst.settings = $.extend({}, settings || {});
+-		if (nodeName === "input") {
+-			this._connectDatepicker(target, inst);
+-		} else if (inline) {
+-			this._inlineDatepicker(target, inst);
+-		}
+-	},
+-
+-	/* Create a new instance object. */
+-	_newInst: function(target, inline) {
+-		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+-		return {id: id, input: target, // associated target
+-			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+-			drawMonth: 0, drawYear: 0, // month being drawn
+-			inline: inline, // is datepicker inline or not
+-			dpDiv: (!inline ? this.dpDiv : // presentation div
+-			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+-	},
+-
+-	/* Attach the date picker to an input field. */
+-	_connectDatepicker: function(target, inst) {
+-		var input = $(target);
+-		inst.append = $([]);
+-		inst.trigger = $([]);
+-		if (input.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		this._attachments(input, inst);
+-		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+-			keypress(this._doKeyPress).keyup(this._doKeyUp);
+-		this._autoSize(inst);
+-		$.data(target, PROP_NAME, inst);
+-		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-	},
+-
+-	/* Make attachments based on settings. */
+-	_attachments: function(input, inst) {
+-		var showOn, buttonText, buttonImage,
+-			appendText = this._get(inst, "appendText"),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		if (inst.append) {
+-			inst.append.remove();
+-		}
+-		if (appendText) {
+-			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+-			input[isRTL ? "before" : "after"](inst.append);
+-		}
+-
+-		input.unbind("focus", this._showDatepicker);
+-
+-		if (inst.trigger) {
+-			inst.trigger.remove();
+-		}
+-
+-		showOn = this._get(inst, "showOn");
+-		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+-			input.focus(this._showDatepicker);
+-		}
+-		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+-			buttonText = this._get(inst, "buttonText");
+-			buttonImage = this._get(inst, "buttonImage");
+-			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+-				$("<img/>").addClass(this._triggerClass).
+-					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+-				$("<button type='button'></button>").addClass(this._triggerClass).
+-					html(!buttonImage ? buttonText : $("<img/>").attr(
+-					{ src:buttonImage, alt:buttonText, title:buttonText })));
+-			input[isRTL ? "before" : "after"](inst.trigger);
+-			inst.trigger.click(function() {
+-				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+-					$.datepicker._hideDatepicker();
+-				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+-					$.datepicker._hideDatepicker();
+-					$.datepicker._showDatepicker(input[0]);
+-				} else {
+-					$.datepicker._showDatepicker(input[0]);
+-				}
+-				return false;
+-			});
+-		}
+-	},
+-
+-	/* Apply the maximum length for the date format. */
+-	_autoSize: function(inst) {
+-		if (this._get(inst, "autoSize") && !inst.inline) {
+-			var findMax, max, maxI, i,
+-				date = new Date(2009, 12 - 1, 20), // Ensure double digits
+-				dateFormat = this._get(inst, "dateFormat");
+-
+-			if (dateFormat.match(/[DM]/)) {
+-				findMax = function(names) {
+-					max = 0;
+-					maxI = 0;
+-					for (i = 0; i < names.length; i++) {
+-						if (names[i].length > max) {
+-							max = names[i].length;
+-							maxI = i;
+-						}
+-					}
+-					return maxI;
+-				};
+-				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+-					"monthNames" : "monthNamesShort"))));
+-				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+-					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+-			}
+-			inst.input.attr("size", this._formatDate(inst, date).length);
+-		}
+-	},
+-
+-	/* Attach an inline date picker to a div. */
+-	_inlineDatepicker: function(target, inst) {
+-		var divSpan = $(target);
+-		if (divSpan.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+-		$.data(target, PROP_NAME, inst);
+-		this._setDate(inst, this._getDefaultDate(inst), true);
+-		this._updateDatepicker(inst);
+-		this._updateAlternate(inst);
+-		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+-		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+-		inst.dpDiv.css( "display", "block" );
+-	},
+-
+-	/* Pop-up the date picker in a "dialog" box.
+-	 * @param  input element - ignored
+-	 * @param  date	string or Date - the initial date to display
+-	 * @param  onSelect  function - the function to call when a date is selected
+-	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+-	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
+-	 *					event - with x/y coordinates or
+-	 *					leave empty for default (screen centre)
+-	 * @return the manager object
+-	 */
+-	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+-		var id, browserWidth, browserHeight, scrollX, scrollY,
+-			inst = this._dialogInst; // internal instance
+-
+-		if (!inst) {
+-			this.uuid += 1;
+-			id = "dp" + this.uuid;
+-			this._dialogInput = $("<input type='text' id='" + id +
+-				"' style='position: absolute; top: -100px; width: 0px;'/>");
+-			this._dialogInput.keydown(this._doKeyDown);
+-			$("body").append(this._dialogInput);
+-			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+-			inst.settings = {};
+-			$.data(this._dialogInput[0], PROP_NAME, inst);
+-		}
+-		extendRemove(inst.settings, settings || {});
+-		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+-		this._dialogInput.val(date);
+-
+-		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+-		if (!this._pos) {
+-			browserWidth = document.documentElement.clientWidth;
+-			browserHeight = document.documentElement.clientHeight;
+-			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+-			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+-			this._pos = // should use actual width/height below
+-				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+-		}
+-
+-		// move input on screen for focus, but hidden behind dialog
+-		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+-		inst.settings.onSelect = onSelect;
+-		this._inDialog = true;
+-		this.dpDiv.addClass(this._dialogClass);
+-		this._showDatepicker(this._dialogInput[0]);
+-		if ($.blockUI) {
+-			$.blockUI(this.dpDiv);
+-		}
+-		$.data(this._dialogInput[0], PROP_NAME, inst);
+-		return this;
+-	},
+-
+-	/* Detach a datepicker from its control.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_destroyDatepicker: function(target) {
+-		var nodeName,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		$.removeData(target, PROP_NAME);
+-		if (nodeName === "input") {
+-			inst.append.remove();
+-			inst.trigger.remove();
+-			$target.removeClass(this.markerClassName).
+-				unbind("focus", this._showDatepicker).
+-				unbind("keydown", this._doKeyDown).
+-				unbind("keypress", this._doKeyPress).
+-				unbind("keyup", this._doKeyUp);
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			$target.removeClass(this.markerClassName).empty();
+-		}
+-	},
+-
+-	/* Enable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_enableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = false;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = false; }).end().
+-				filter("img").css({opacity: "1.0", cursor: ""});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().removeClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", false);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-	},
+-
+-	/* Disable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_disableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = true;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = true; }).end().
+-				filter("img").css({opacity: "0.5", cursor: "default"});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().addClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", true);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-		this._disabledInputs[this._disabledInputs.length] = target;
+-	},
+-
+-	/* Is the first field in a jQuery collection disabled as a datepicker?
+-	 * @param  target	element - the target input field or division or span
+-	 * @return boolean - true if disabled, false if enabled
+-	 */
+-	_isDisabledDatepicker: function(target) {
+-		if (!target) {
+-			return false;
+-		}
+-		for (var i = 0; i < this._disabledInputs.length; i++) {
+-			if (this._disabledInputs[i] === target) {
+-				return true;
+-			}
+-		}
+-		return false;
+-	},
+-
+-	/* Retrieve the instance data for the target control.
+-	 * @param  target  element - the target input field or division or span
+-	 * @return  object - the associated instance data
+-	 * @throws  error if a jQuery problem getting data
+-	 */
+-	_getInst: function(target) {
+-		try {
+-			return $.data(target, PROP_NAME);
+-		}
+-		catch (err) {
+-			throw "Missing instance data for this datepicker";
+-		}
+-	},
+-
+-	/* Update or retrieve the settings for a date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 * @param  name	object - the new settings to update or
+-	 *				string - the name of the setting to change or retrieve,
+-	 *				when retrieving also "all" for all instance settings or
+-	 *				"defaults" for all global defaults
+-	 * @param  value   any - the new value for the setting
+-	 *				(omit if above is an object or to retrieve a value)
+-	 */
+-	_optionDatepicker: function(target, name, value) {
+-		var settings, date, minDate, maxDate,
+-			inst = this._getInst(target);
+-
+-		if (arguments.length === 2 && typeof name === "string") {
+-			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+-				(inst ? (name === "all" ? $.extend({}, inst.settings) :
+-				this._get(inst, name)) : null));
+-		}
+-
+-		settings = name || {};
+-		if (typeof name === "string") {
+-			settings = {};
+-			settings[name] = value;
+-		}
+-
+-		if (inst) {
+-			if (this._curInst === inst) {
+-				this._hideDatepicker();
+-			}
+-
+-			date = this._getDateDatepicker(target, true);
+-			minDate = this._getMinMaxDate(inst, "min");
+-			maxDate = this._getMinMaxDate(inst, "max");
+-			extendRemove(inst.settings, settings);
+-			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+-			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+-				inst.settings.minDate = this._formatDate(inst, minDate);
+-			}
+-			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+-				inst.settings.maxDate = this._formatDate(inst, maxDate);
+-			}
+-			if ( "disabled" in settings ) {
+-				if ( settings.disabled ) {
+-					this._disableDatepicker(target);
+-				} else {
+-					this._enableDatepicker(target);
+-				}
+-			}
+-			this._attachments($(target), inst);
+-			this._autoSize(inst);
+-			this._setDate(inst, date);
+-			this._updateAlternate(inst);
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	// change method deprecated
+-	_changeDatepicker: function(target, name, value) {
+-		this._optionDatepicker(target, name, value);
+-	},
+-
+-	/* Redraw the date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 */
+-	_refreshDatepicker: function(target) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	/* Set the dates for a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  date	Date - the new date
+-	 */
+-	_setDateDatepicker: function(target, date) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._setDate(inst, date);
+-			this._updateDatepicker(inst);
+-			this._updateAlternate(inst);
+-		}
+-	},
+-
+-	/* Get the date(s) for the first entry in a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  noDefault boolean - true if no default date is to be used
+-	 * @return Date - the current date
+-	 */
+-	_getDateDatepicker: function(target, noDefault) {
+-		var inst = this._getInst(target);
+-		if (inst && !inst.inline) {
+-			this._setDateFromField(inst, noDefault);
+-		}
+-		return (inst ? this._getDate(inst) : null);
+-	},
+-
+-	/* Handle keystrokes. */
+-	_doKeyDown: function(event) {
+-		var onSelect, dateStr, sel,
+-			inst = $.datepicker._getInst(event.target),
+-			handled = true,
+-			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+-
+-		inst._keyEvent = true;
+-		if ($.datepicker._datepickerShowing) {
+-			switch (event.keyCode) {
+-				case 9: $.datepicker._hideDatepicker();
+-						handled = false;
+-						break; // hide on tab out
+-				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+-									$.datepicker._currentClass + ")", inst.dpDiv);
+-						if (sel[0]) {
+-							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+-						}
+-
+-						onSelect = $.datepicker._get(inst, "onSelect");
+-						if (onSelect) {
+-							dateStr = $.datepicker._formatDate(inst);
+-
+-							// trigger custom callback
+-							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-						} else {
+-							$.datepicker._hideDatepicker();
+-						}
+-
+-						return false; // don't submit the form
+-				case 27: $.datepicker._hideDatepicker();
+-						break; // hide on escape
+-				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							-$.datepicker._get(inst, "stepBigMonths") :
+-							-$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // previous month/year on page up/+ ctrl
+-				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							+$.datepicker._get(inst, "stepBigMonths") :
+-							+$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // next month/year on page down/+ ctrl
+-				case 35: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._clearDate(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // clear on ctrl or command +end
+-				case 36: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._gotoToday(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // current on ctrl or command +home
+-				case 37: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// -1 day on ctrl or command +left
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								-$.datepicker._get(inst, "stepBigMonths") :
+-								-$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +left on Mac
+-						break;
+-				case 38: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, -7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // -1 week on ctrl or command +up
+-				case 39: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// +1 day on ctrl or command +right
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								+$.datepicker._get(inst, "stepBigMonths") :
+-								+$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +right
+-						break;
+-				case 40: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, +7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // +1 week on ctrl or command +down
+-				default: handled = false;
+-			}
+-		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+-			$.datepicker._showDatepicker(this);
+-		} else {
+-			handled = false;
+-		}
+-
+-		if (handled) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-	},
+-
+-	/* Filter entered characters - based on date format. */
+-	_doKeyPress: function(event) {
+-		var chars, chr,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if ($.datepicker._get(inst, "constrainInput")) {
+-			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+-			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+-			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+-		}
+-	},
+-
+-	/* Synchronise manual entry and field/alternate field. */
+-	_doKeyUp: function(event) {
+-		var date,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if (inst.input.val() !== inst.lastVal) {
+-			try {
+-				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-					(inst.input ? inst.input.val() : null),
+-					$.datepicker._getFormatConfig(inst));
+-
+-				if (date) { // only if valid
+-					$.datepicker._setDateFromField(inst);
+-					$.datepicker._updateAlternate(inst);
+-					$.datepicker._updateDatepicker(inst);
+-				}
+-			}
+-			catch (err) {
+-			}
+-		}
+-		return true;
+-	},
+-
+-	/* Pop-up the date picker for a given input field.
+-	 * If false returned from beforeShow event handler do not show.
+-	 * @param  input  element - the input field attached to the date picker or
+-	 *					event - if triggered by focus
+-	 */
+-	_showDatepicker: function(input) {
+-		input = input.target || input;
+-		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+-			input = $("input", input.parentNode)[0];
+-		}
+-
+-		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+-			return;
+-		}
+-
+-		var inst, beforeShow, beforeShowSettings, isFixed,
+-			offset, showAnim, duration;
+-
+-		inst = $.datepicker._getInst(input);
+-		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+-			$.datepicker._curInst.dpDiv.stop(true, true);
+-			if ( inst && $.datepicker._datepickerShowing ) {
+-				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+-			}
+-		}
+-
+-		beforeShow = $.datepicker._get(inst, "beforeShow");
+-		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+-		if(beforeShowSettings === false){
+-			return;
+-		}
+-		extendRemove(inst.settings, beforeShowSettings);
+-
+-		inst.lastVal = null;
+-		$.datepicker._lastInput = input;
+-		$.datepicker._setDateFromField(inst);
+-
+-		if ($.datepicker._inDialog) { // hide cursor
+-			input.value = "";
+-		}
+-		if (!$.datepicker._pos) { // position below input
+-			$.datepicker._pos = $.datepicker._findPos(input);
+-			$.datepicker._pos[1] += input.offsetHeight; // add the height
+-		}
+-
+-		isFixed = false;
+-		$(input).parents().each(function() {
+-			isFixed |= $(this).css("position") === "fixed";
+-			return !isFixed;
+-		});
+-
+-		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+-		$.datepicker._pos = null;
+-		//to avoid flashes on Firefox
+-		inst.dpDiv.empty();
+-		// determine sizing offscreen
+-		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+-		$.datepicker._updateDatepicker(inst);
+-		// fix width for dynamic number of date pickers
+-		// and adjust position before showing
+-		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+-		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+-			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
+-			left: offset.left + "px", top: offset.top + "px"});
+-
+-		if (!inst.inline) {
+-			showAnim = $.datepicker._get(inst, "showAnim");
+-			duration = $.datepicker._get(inst, "duration");
+-			inst.dpDiv.zIndex($(input).zIndex()+1);
+-			$.datepicker._datepickerShowing = true;
+-
+-			if ( $.effects && $.effects.effect[ showAnim ] ) {
+-				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+-			} else {
+-				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+-			}
+-
+-			if ( $.datepicker._shouldFocusInput( inst ) ) {
+-				inst.input.focus();
+-			}
+-
+-			$.datepicker._curInst = inst;
+-		}
+-	},
+-
+-	/* Generate the date picker content. */
+-	_updateDatepicker: function(inst) {
+-		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+-		instActive = inst; // for delegate hover events
+-		inst.dpDiv.empty().append(this._generateHTML(inst));
+-		this._attachHandlers(inst);
+-		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
+-
+-		var origyearshtml,
+-			numMonths = this._getNumberOfMonths(inst),
+-			cols = numMonths[1],
+-			width = 17;
+-
+-		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+-		if (cols > 1) {
+-			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+-		}
+-		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+-			"Class"]("ui-datepicker-multi");
+-		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+-			"Class"]("ui-datepicker-rtl");
+-
+-		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+-			inst.input.focus();
+-		}
+-
+-		// deffered render of the years select (to avoid flashes on Firefox)
+-		if( inst.yearshtml ){
+-			origyearshtml = inst.yearshtml;
+-			setTimeout(function(){
+-				//assure that inst.yearshtml didn't change.
+-				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+-					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+-				}
+-				origyearshtml = inst.yearshtml = null;
+-			}, 0);
+-		}
+-	},
+-
+-	// #6694 - don't focus the input if it's already focused
+-	// this breaks the change event in IE
+-	// Support: IE and jQuery <1.9
+-	_shouldFocusInput: function( inst ) {
+-		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+-	},
+-
+-	/* Check positioning to remain on screen. */
+-	_checkOffset: function(inst, offset, isFixed) {
+-		var dpWidth = inst.dpDiv.outerWidth(),
+-			dpHeight = inst.dpDiv.outerHeight(),
+-			inputWidth = inst.input ? inst.input.outerWidth() : 0,
+-			inputHeight = inst.input ? inst.input.outerHeight() : 0,
+-			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+-			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+-
+-		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+-		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+-		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+-
+-		// now check if datepicker is showing outside window viewport - move to a better place if so.
+-		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+-			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+-		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+-			Math.abs(dpHeight + inputHeight) : 0);
+-
+-		return offset;
+-	},
+-
+-	/* Find an object's position on the screen. */
+-	_findPos: function(obj) {
+-		var position,
+-			inst = this._getInst(obj),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+-			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+-		}
+-
+-		position = $(obj).offset();
+-		return [position.left, position.top];
+-	},
+-
+-	/* Hide the date picker from view.
+-	 * @param  input  element - the input field attached to the date picker
+-	 */
+-	_hideDatepicker: function(input) {
+-		var showAnim, duration, postProcess, onClose,
+-			inst = this._curInst;
+-
+-		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
+-			return;
+-		}
+-
+-		if (this._datepickerShowing) {
+-			showAnim = this._get(inst, "showAnim");
+-			duration = this._get(inst, "duration");
+-			postProcess = function() {
+-				$.datepicker._tidyDialog(inst);
+-			};
+-
+-			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+-			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+-				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+-			} else {
+-				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+-					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+-			}
+-
+-			if (!showAnim) {
+-				postProcess();
+-			}
+-			this._datepickerShowing = false;
+-
+-			onClose = this._get(inst, "onClose");
+-			if (onClose) {
+-				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+-			}
+-
+-			this._lastInput = null;
+-			if (this._inDialog) {
+-				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+-				if ($.blockUI) {
+-					$.unblockUI();
+-					$("body").append(this.dpDiv);
+-				}
+-			}
+-			this._inDialog = false;
+-		}
+-	},
+-
+-	/* Tidy up after a dialog display. */
+-	_tidyDialog: function(inst) {
+-		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+-	},
+-
+-	/* Close date picker if clicked elsewhere. */
+-	_checkExternalClick: function(event) {
+-		if (!$.datepicker._curInst) {
+-			return;
+-		}
+-
+-		var $target = $(event.target),
+-			inst = $.datepicker._getInst($target[0]);
+-
+-		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+-				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+-				!$target.hasClass($.datepicker.markerClassName) &&
+-				!$target.closest("." + $.datepicker._triggerClass).length &&
+-				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+-			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+-				$.datepicker._hideDatepicker();
+-		}
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustDate: function(id, offset, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		this._adjustInstDate(inst, offset +
+-			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+-			period);
+-		this._updateDatepicker(inst);
+-	},
+-
+-	/* Action for current link. */
+-	_gotoToday: function(id) {
+-		var date,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+-			inst.selectedDay = inst.currentDay;
+-			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+-			inst.drawYear = inst.selectedYear = inst.currentYear;
+-		} else {
+-			date = new Date();
+-			inst.selectedDay = date.getDate();
+-			inst.drawMonth = inst.selectedMonth = date.getMonth();
+-			inst.drawYear = inst.selectedYear = date.getFullYear();
+-		}
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a new month/year. */
+-	_selectMonthYear: function(id, select, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		inst["selected" + (period === "M" ? "Month" : "Year")] =
+-		inst["draw" + (period === "M" ? "Month" : "Year")] =
+-			parseInt(select.options[select.selectedIndex].value,10);
+-
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a day. */
+-	_selectDay: function(id, month, year, td) {
+-		var inst,
+-			target = $(id);
+-
+-		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-
+-		inst = this._getInst(target[0]);
+-		inst.selectedDay = inst.currentDay = $("a", td).html();
+-		inst.selectedMonth = inst.currentMonth = month;
+-		inst.selectedYear = inst.currentYear = year;
+-		this._selectDate(id, this._formatDate(inst,
+-			inst.currentDay, inst.currentMonth, inst.currentYear));
+-	},
+-
+-	/* Erase the input field and hide the date picker. */
+-	_clearDate: function(id) {
+-		var target = $(id);
+-		this._selectDate(target, "");
+-	},
+-
+-	/* Update the input field with the selected date. */
+-	_selectDate: function(id, dateStr) {
+-		var onSelect,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+-		if (inst.input) {
+-			inst.input.val(dateStr);
+-		}
+-		this._updateAlternate(inst);
+-
+-		onSelect = this._get(inst, "onSelect");
+-		if (onSelect) {
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+-		} else if (inst.input) {
+-			inst.input.trigger("change"); // fire the change event
+-		}
+-
+-		if (inst.inline){
+-			this._updateDatepicker(inst);
+-		} else {
+-			this._hideDatepicker();
+-			this._lastInput = inst.input[0];
+-			if (typeof(inst.input[0]) !== "object") {
+-				inst.input.focus(); // restore focus
+-			}
+-			this._lastInput = null;
+-		}
+-	},
+-
+-	/* Update any alternate field to synchronise with the main field. */
+-	_updateAlternate: function(inst) {
+-		var altFormat, date, dateStr,
+-			altField = this._get(inst, "altField");
+-
+-		if (altField) { // update alternate field too
+-			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+-			date = this._getDate(inst);
+-			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+-			$(altField).each(function() { $(this).val(dateStr); });
+-		}
+-	},
+-
+-	/* Set as beforeShowDay function to prevent selection of weekends.
+-	 * @param  date  Date - the date to customise
+-	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
+-	 */
+-	noWeekends: function(date) {
+-		var day = date.getDay();
+-		return [(day > 0 && day < 6), ""];
+-	},
+-
+-	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+-	 * @param  date  Date - the date to get the week for
+-	 * @return  number - the number of the week within the year that contains this date
+-	 */
+-	iso8601Week: function(date) {
+-		var time,
+-			checkDate = new Date(date.getTime());
+-
+-		// Find Thursday of this week starting on Monday
+-		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+-
+-		time = checkDate.getTime();
+-		checkDate.setMonth(0); // Compare with Jan 1
+-		checkDate.setDate(1);
+-		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+-	},
+-
+-	/* Parse a string value into a date object.
+-	 * See formatDate below for the possible formats.
+-	 *
+-	 * @param  format string - the expected format of the date
+-	 * @param  value string - the date in the above format
+-	 * @param  settings Object - attributes include:
+-	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  Date - the extracted date value or null if value is blank
+-	 */
+-	parseDate: function (format, value, settings) {
+-		if (format == null || value == null) {
+-			throw "Invalid arguments";
+-		}
+-
+-		value = (typeof value === "object" ? value.toString() : value + "");
+-		if (value === "") {
+-			return null;
+-		}
+-
+-		var iFormat, dim, extra,
+-			iValue = 0,
+-			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+-			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+-				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			year = -1,
+-			month = -1,
+-			day = -1,
+-			doy = -1,
+-			literal = false,
+-			date,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Extract a number from the string value
+-			getNumber = function(match) {
+-				var isDoubled = lookAhead(match),
+-					size = (match === "@" ? 14 : (match === "!" ? 20 :
+-					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+-					digits = new RegExp("^\\d{1," + size + "}"),
+-					num = value.substring(iValue).match(digits);
+-				if (!num) {
+-					throw "Missing number at position " + iValue;
+-				}
+-				iValue += num[0].length;
+-				return parseInt(num[0], 10);
+-			},
+-			// Extract a name from the string value and convert to an index
+-			getName = function(match, shortNames, longNames) {
+-				var index = -1,
+-					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+-						return [ [k, v] ];
+-					}).sort(function (a, b) {
+-						return -(a[1].length - b[1].length);
+-					});
+-
+-				$.each(names, function (i, pair) {
+-					var name = pair[1];
+-					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+-						index = pair[0];
+-						iValue += name.length;
+-						return false;
+-					}
+-				});
+-				if (index !== -1) {
+-					return index + 1;
+-				} else {
+-					throw "Unknown name at position " + iValue;
+-				}
+-			},
+-			// Confirm that a literal character matches the string value
+-			checkLiteral = function() {
+-				if (value.charAt(iValue) !== format.charAt(iFormat)) {
+-					throw "Unexpected literal at position " + iValue;
+-				}
+-				iValue++;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					checkLiteral();
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d":
+-						day = getNumber("d");
+-						break;
+-					case "D":
+-						getName("D", dayNamesShort, dayNames);
+-						break;
+-					case "o":
+-						doy = getNumber("o");
+-						break;
+-					case "m":
+-						month = getNumber("m");
+-						break;
+-					case "M":
+-						month = getName("M", monthNamesShort, monthNames);
+-						break;
+-					case "y":
+-						year = getNumber("y");
+-						break;
+-					case "@":
+-						date = new Date(getNumber("@"));
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "!":
+-						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "'":
+-						if (lookAhead("'")){
+-							checkLiteral();
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						checkLiteral();
+-				}
+-			}
+-		}
+-
+-		if (iValue < value.length){
+-			extra = value.substr(iValue);
+-			if (!/^\s+/.test(extra)) {
+-				throw "Extra/unparsed characters found in date: " + extra;
+-			}
+-		}
+-
+-		if (year === -1) {
+-			year = new Date().getFullYear();
+-		} else if (year < 100) {
+-			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+-				(year <= shortYearCutoff ? 0 : -100);
+-		}
+-
+-		if (doy > -1) {
+-			month = 1;
+-			day = doy;
+-			do {
+-				dim = this._getDaysInMonth(year, month - 1);
+-				if (day <= dim) {
+-					break;
+-				}
+-				month++;
+-				day -= dim;
+-			} while (true);
+-		}
+-
+-		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+-		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+-			throw "Invalid date"; // E.g. 31/02/00
+-		}
+-		return date;
+-	},
+-
+-	/* Standard date formats. */
+-	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+-	COOKIE: "D, dd M yy",
+-	ISO_8601: "yy-mm-dd",
+-	RFC_822: "D, d M y",
+-	RFC_850: "DD, dd-M-y",
+-	RFC_1036: "D, d M y",
+-	RFC_1123: "D, d M yy",
+-	RFC_2822: "D, d M yy",
+-	RSS: "D, d M y", // RFC 822
+-	TICKS: "!",
+-	TIMESTAMP: "@",
+-	W3C: "yy-mm-dd", // ISO 8601
+-
+-	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+-		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+-
+-	/* Format a date object into a string value.
+-	 * The format can be combinations of the following:
+-	 * d  - day of month (no leading zero)
+-	 * dd - day of month (two digit)
+-	 * o  - day of year (no leading zeros)
+-	 * oo - day of year (three digit)
+-	 * D  - day name short
+-	 * DD - day name long
+-	 * m  - month of year (no leading zero)
+-	 * mm - month of year (two digit)
+-	 * M  - month name short
+-	 * MM - month name long
+-	 * y  - year (two digit)
+-	 * yy - year (four digit)
+-	 * @ - Unix timestamp (ms since 01/01/1970)
+-	 * ! - Windows ticks (100ns since 01/01/0001)
+-	 * "..." - literal text
+-	 * '' - single quote
+-	 *
+-	 * @param  format string - the desired format of the date
+-	 * @param  date Date - the date value to format
+-	 * @param  settings Object - attributes include:
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  string - the date in the above format
+-	 */
+-	formatDate: function (format, date, settings) {
+-		if (!date) {
+-			return "";
+-		}
+-
+-		var iFormat,
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Format a number, with leading zero if necessary
+-			formatNumber = function(match, value, len) {
+-				var num = "" + value;
+-				if (lookAhead(match)) {
+-					while (num.length < len) {
+-						num = "0" + num;
+-					}
+-				}
+-				return num;
+-			},
+-			// Format a name, short or long as requested
+-			formatName = function(match, value, shortNames, longNames) {
+-				return (lookAhead(match) ? longNames[value] : shortNames[value]);
+-			},
+-			output = "",
+-			literal = false;
+-
+-		if (date) {
+-			for (iFormat = 0; iFormat < format.length; iFormat++) {
+-				if (literal) {
+-					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-						literal = false;
+-					} else {
+-						output += format.charAt(iFormat);
+-					}
+-				} else {
+-					switch (format.charAt(iFormat)) {
+-						case "d":
+-							output += formatNumber("d", date.getDate(), 2);
+-							break;
+-						case "D":
+-							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+-							break;
+-						case "o":
+-							output += formatNumber("o",
+-								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+-							break;
+-						case "m":
+-							output += formatNumber("m", date.getMonth() + 1, 2);
+-							break;
+-						case "M":
+-							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+-							break;
+-						case "y":
+-							output += (lookAhead("y") ? date.getFullYear() :
+-								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+-							break;
+-						case "@":
+-							output += date.getTime();
+-							break;
+-						case "!":
+-							output += date.getTime() * 10000 + this._ticksTo1970;
+-							break;
+-						case "'":
+-							if (lookAhead("'")) {
+-								output += "'";
+-							} else {
+-								literal = true;
+-							}
+-							break;
+-						default:
+-							output += format.charAt(iFormat);
+-					}
+-				}
+-			}
+-		}
+-		return output;
+-	},
+-
+-	/* Extract all possible characters from the date format. */
+-	_possibleChars: function (format) {
+-		var iFormat,
+-			chars = "",
+-			literal = false,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					chars += format.charAt(iFormat);
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d": case "m": case "y": case "@":
+-						chars += "0123456789";
+-						break;
+-					case "D": case "M":
+-						return null; // Accept anything
+-					case "'":
+-						if (lookAhead("'")) {
+-							chars += "'";
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						chars += format.charAt(iFormat);
+-				}
+-			}
+-		}
+-		return chars;
+-	},
+-
+-	/* Get a setting value, defaulting if necessary. */
+-	_get: function(inst, name) {
+-		return inst.settings[name] !== undefined ?
+-			inst.settings[name] : this._defaults[name];
+-	},
+-
+-	/* Parse existing date and initialise date picker. */
+-	_setDateFromField: function(inst, noDefault) {
+-		if (inst.input.val() === inst.lastVal) {
+-			return;
+-		}
+-
+-		var dateFormat = this._get(inst, "dateFormat"),
+-			dates = inst.lastVal = inst.input ? inst.input.val() : null,
+-			defaultDate = this._getDefaultDate(inst),
+-			date = defaultDate,
+-			settings = this._getFormatConfig(inst);
+-
+-		try {
+-			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+-		} catch (event) {
+-			dates = (noDefault ? "" : dates);
+-		}
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		inst.currentDay = (dates ? date.getDate() : 0);
+-		inst.currentMonth = (dates ? date.getMonth() : 0);
+-		inst.currentYear = (dates ? date.getFullYear() : 0);
+-		this._adjustInstDate(inst);
+-	},
+-
+-	/* Retrieve the default date shown on opening. */
+-	_getDefaultDate: function(inst) {
+-		return this._restrictMinMax(inst,
+-			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+-	},
+-
+-	/* A date may be specified as an exact value or a relative one. */
+-	_determineDate: function(inst, date, defaultDate) {
+-		var offsetNumeric = function(offset) {
+-				var date = new Date();
+-				date.setDate(date.getDate() + offset);
+-				return date;
+-			},
+-			offsetString = function(offset) {
+-				try {
+-					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-						offset, $.datepicker._getFormatConfig(inst));
+-				}
+-				catch (e) {
+-					// Ignore
+-				}
+-
+-				var date = (offset.toLowerCase().match(/^c/) ?
+-					$.datepicker._getDate(inst) : null) || new Date(),
+-					year = date.getFullYear(),
+-					month = date.getMonth(),
+-					day = date.getDate(),
+-					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+-					matches = pattern.exec(offset);
+-
+-				while (matches) {
+-					switch (matches[2] || "d") {
+-						case "d" : case "D" :
+-							day += parseInt(matches[1],10); break;
+-						case "w" : case "W" :
+-							day += parseInt(matches[1],10) * 7; break;
+-						case "m" : case "M" :
+-							month += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-						case "y": case "Y" :
+-							year += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-					}
+-					matches = pattern.exec(offset);
+-				}
+-				return new Date(year, month, day);
+-			},
+-			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+-				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+-
+-		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+-		if (newDate) {
+-			newDate.setHours(0);
+-			newDate.setMinutes(0);
+-			newDate.setSeconds(0);
+-			newDate.setMilliseconds(0);
+-		}
+-		return this._daylightSavingAdjust(newDate);
+-	},
+-
+-	/* Handle switch to/from daylight saving.
+-	 * Hours may be non-zero on daylight saving cut-over:
+-	 * > 12 when midnight changeover, but then cannot generate
+-	 * midnight datetime, so jump to 1AM, otherwise reset.
+-	 * @param  date  (Date) the date to check
+-	 * @return  (Date) the corrected date
+-	 */
+-	_daylightSavingAdjust: function(date) {
+-		if (!date) {
+-			return null;
+-		}
+-		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+-		return date;
+-	},
+-
+-	/* Set the date(s) directly. */
+-	_setDate: function(inst, date, noChange) {
+-		var clear = !date,
+-			origMonth = inst.selectedMonth,
+-			origYear = inst.selectedYear,
+-			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+-
+-		inst.selectedDay = inst.currentDay = newDate.getDate();
+-		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+-		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+-		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+-			this._notifyChange(inst);
+-		}
+-		this._adjustInstDate(inst);
+-		if (inst.input) {
+-			inst.input.val(clear ? "" : this._formatDate(inst));
+-		}
+-	},
+-
+-	/* Retrieve the date(s) directly. */
+-	_getDate: function(inst) {
+-		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+-			this._daylightSavingAdjust(new Date(
+-			inst.currentYear, inst.currentMonth, inst.currentDay)));
+-			return startDate;
+-	},
+-
+-	/* Attach the onxxx handlers.  These are declared statically so
+-	 * they work with static code transformers like Caja.
+-	 */
+-	_attachHandlers: function(inst) {
+-		var stepMonths = this._get(inst, "stepMonths"),
+-			id = "#" + inst.id.replace( /\\\\/g, "\\" );
+-		inst.dpDiv.find("[data-handler]").map(function () {
+-			var handler = {
+-				prev: function () {
+-					$.datepicker._adjustDate(id, -stepMonths, "M");
+-				},
+-				next: function () {
+-					$.datepicker._adjustDate(id, +stepMonths, "M");
+-				},
+-				hide: function () {
+-					$.datepicker._hideDatepicker();
+-				},
+-				today: function () {
+-					$.datepicker._gotoToday(id);
+-				},
+-				selectDay: function () {
+-					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+-					return false;
+-				},
+-				selectMonth: function () {
+-					$.datepicker._selectMonthYear(id, this, "M");
+-					return false;
+-				},
+-				selectYear: function () {
+-					$.datepicker._selectMonthYear(id, this, "Y");
+-					return false;
+-				}
+-			};
+-			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+-		});
+-	},
+-
+-	/* Generate the HTML for the current state of the date picker. */
+-	_generateHTML: function(inst) {
+-		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+-			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+-			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+-			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+-			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+-			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+-			tempDate = new Date(),
+-			today = this._daylightSavingAdjust(
+-				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+-			isRTL = this._get(inst, "isRTL"),
+-			showButtonPanel = this._get(inst, "showButtonPanel"),
+-			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+-			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+-			numMonths = this._getNumberOfMonths(inst),
+-			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+-			stepMonths = this._get(inst, "stepMonths"),
+-			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+-			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+-				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			drawMonth = inst.drawMonth - showCurrentAtPos,
+-			drawYear = inst.drawYear;
+-
+-		if (drawMonth < 0) {
+-			drawMonth += 12;
+-			drawYear--;
+-		}
+-		if (maxDate) {
+-			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+-				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+-			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+-			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+-				drawMonth--;
+-				if (drawMonth < 0) {
+-					drawMonth = 11;
+-					drawYear--;
+-				}
+-			}
+-		}
+-		inst.drawMonth = drawMonth;
+-		inst.drawYear = drawYear;
+-
+-		prevText = this._get(inst, "prevText");
+-		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+-			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+-
+-		nextText = this._get(inst, "nextText");
+-		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+-			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+-
+-		currentText = this._get(inst, "currentText");
+-		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+-		currentText = (!navigationAsDateFormat ? currentText :
+-			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+-
+-		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+-			this._get(inst, "closeText") + "</button>" : "");
+-
+-		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+-			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+-			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+-
+-		firstDay = parseInt(this._get(inst, "firstDay"),10);
+-		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+-
+-		showWeek = this._get(inst, "showWeek");
+-		dayNames = this._get(inst, "dayNames");
+-		dayNamesMin = this._get(inst, "dayNamesMin");
+-		monthNames = this._get(inst, "monthNames");
+-		monthNamesShort = this._get(inst, "monthNamesShort");
+-		beforeShowDay = this._get(inst, "beforeShowDay");
+-		showOtherMonths = this._get(inst, "showOtherMonths");
+-		selectOtherMonths = this._get(inst, "selectOtherMonths");
+-		defaultDate = this._getDefaultDate(inst);
+-		html = "";
+-		dow;
+-		for (row = 0; row < numMonths[0]; row++) {
+-			group = "";
+-			this.maxRows = 4;
+-			for (col = 0; col < numMonths[1]; col++) {
+-				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+-				cornerClass = " ui-corner-all";
+-				calender = "";
+-				if (isMultiMonth) {
+-					calender += "<div class='ui-datepicker-group";
+-					if (numMonths[1] > 1) {
+-						switch (col) {
+-							case 0: calender += " ui-datepicker-group-first";
+-								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+-							case numMonths[1]-1: calender += " ui-datepicker-group-last";
+-								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+-							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+-						}
+-					}
+-					calender += "'>";
+-				}
+-				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+-					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+-					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+-					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+-					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+-					"</div><table class='ui-datepicker-calendar'><thead>" +
+-					"<tr>";
+-				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+-				for (dow = 0; dow < 7; dow++) { // days of the week
+-					day = (dow + firstDay) % 7;
+-					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+-						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+-				}
+-				calender += thead + "</tr></thead><tbody>";
+-				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+-				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+-					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+-				}
+-				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+-				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+-				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+-				this.maxRows = numRows;
+-				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+-				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+-					calender += "<tr>";
+-					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+-						this._get(inst, "calculateWeek")(printDate) + "</td>");
+-					for (dow = 0; dow < 7; dow++) { // create date picker days
+-						daySettings = (beforeShowDay ?
+-							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+-						otherMonth = (printDate.getMonth() !== drawMonth);
+-						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+-							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+-						tbody += "<td class='" +
+-							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+-							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+-							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+-							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+-							// or defaultDate is current printedDate and defaultDate is selectedDate
+-							" " + this._dayOverClass : "") + // highlight selected day
+-							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
+-							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+-							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+-							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+-							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+-							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+-							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+-							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+-							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+-							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+-							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+-							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+-						printDate.setDate(printDate.getDate() + 1);
+-						printDate = this._daylightSavingAdjust(printDate);
+-					}
+-					calender += tbody + "</tr>";
+-				}
+-				drawMonth++;
+-				if (drawMonth > 11) {
+-					drawMonth = 0;
+-					drawYear++;
+-				}
+-				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+-							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+-				group += calender;
+-			}
+-			html += group;
+-		}
+-		html += buttonPanel;
+-		inst._keyEvent = false;
+-		return html;
+-	},
+-
+-	/* Generate the month and year header. */
+-	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+-			secondary, monthNames, monthNamesShort) {
+-
+-		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+-			changeMonth = this._get(inst, "changeMonth"),
+-			changeYear = this._get(inst, "changeYear"),
+-			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+-			html = "<div class='ui-datepicker-title'>",
+-			monthHtml = "";
+-
+-		// month selection
+-		if (secondary || !changeMonth) {
+-			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+-		} else {
+-			inMinYear = (minDate && minDate.getFullYear() === drawYear);
+-			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+-			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+-			for ( month = 0; month < 12; month++) {
+-				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+-					monthHtml += "<option value='" + month + "'" +
+-						(month === drawMonth ? " selected='selected'" : "") +
+-						">" + monthNamesShort[month] + "</option>";
+-				}
+-			}
+-			monthHtml += "</select>";
+-		}
+-
+-		if (!showMonthAfterYear) {
+-			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+-		}
+-
+-		// year selection
+-		if ( !inst.yearshtml ) {
+-			inst.yearshtml = "";
+-			if (secondary || !changeYear) {
+-				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+-			} else {
+-				// determine range of years to display
+-				years = this._get(inst, "yearRange").split(":");
+-				thisYear = new Date().getFullYear();
+-				determineYear = function(value) {
+-					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+-						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+-						parseInt(value, 10)));
+-					return (isNaN(year) ? thisYear : year);
+-				};
+-				year = determineYear(years[0]);
+-				endYear = Math.max(year, determineYear(years[1] || ""));
+-				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+-				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+-				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+-				for (; year <= endYear; year++) {
+-					inst.yearshtml += "<option value='" + year + "'" +
+-						(year === drawYear ? " selected='selected'" : "") +
+-						">" + year + "</option>";
+-				}
+-				inst.yearshtml += "</select>";
+-
+-				html += inst.yearshtml;
+-				inst.yearshtml = null;
+-			}
+-		}
+-
+-		html += this._get(inst, "yearSuffix");
+-		if (showMonthAfterYear) {
+-			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+-		}
+-		html += "</div>"; // Close datepicker_header
+-		return html;
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustInstDate: function(inst, offset, period) {
+-		var year = inst.drawYear + (period === "Y" ? offset : 0),
+-			month = inst.drawMonth + (period === "M" ? offset : 0),
+-			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+-			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+-
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		if (period === "M" || period === "Y") {
+-			this._notifyChange(inst);
+-		}
+-	},
+-
+-	/* Ensure a date is within any min/max bounds. */
+-	_restrictMinMax: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			newDate = (minDate && date < minDate ? minDate : date);
+-		return (maxDate && newDate > maxDate ? maxDate : newDate);
+-	},
+-
+-	/* Notify change of month/year. */
+-	_notifyChange: function(inst) {
+-		var onChange = this._get(inst, "onChangeMonthYear");
+-		if (onChange) {
+-			onChange.apply((inst.input ? inst.input[0] : null),
+-				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+-		}
+-	},
+-
+-	/* Determine the number of months to show. */
+-	_getNumberOfMonths: function(inst) {
+-		var numMonths = this._get(inst, "numberOfMonths");
+-		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+-	},
+-
+-	/* Determine the current maximum date - ensure no time components are set. */
+-	_getMinMaxDate: function(inst, minMax) {
+-		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+-	},
+-
+-	/* Find the number of days in a given month. */
+-	_getDaysInMonth: function(year, month) {
+-		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+-	},
+-
+-	/* Find the day of the week of the first of a month. */
+-	_getFirstDayOfMonth: function(year, month) {
+-		return new Date(year, month, 1).getDay();
+-	},
+-
+-	/* Determines if we should allow a "next/prev" month display change. */
+-	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+-		var numMonths = this._getNumberOfMonths(inst),
+-			date = this._daylightSavingAdjust(new Date(curYear,
+-			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+-
+-		if (offset < 0) {
+-			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+-		}
+-		return this._isInRange(inst, date);
+-	},
+-
+-	/* Is the given date in the accepted range? */
+-	_isInRange: function(inst, date) {
+-		var yearSplit, currentYear,
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			minYear = null,
+-			maxYear = null,
+-			years = this._get(inst, "yearRange");
+-			if (years){
+-				yearSplit = years.split(":");
+-				currentYear = new Date().getFullYear();
+-				minYear = parseInt(yearSplit[0], 10);
+-				maxYear = parseInt(yearSplit[1], 10);
+-				if ( yearSplit[0].match(/[+\-].*/) ) {
+-					minYear += currentYear;
+-				}
+-				if ( yearSplit[1].match(/[+\-].*/) ) {
+-					maxYear += currentYear;
+-				}
+-			}
+-
+-		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+-			(!maxDate || date.getTime() <= maxDate.getTime()) &&
+-			(!minYear || date.getFullYear() >= minYear) &&
+-			(!maxYear || date.getFullYear() <= maxYear));
+-	},
+-
+-	/* Provide the configuration settings for formatting/parsing. */
+-	_getFormatConfig: function(inst) {
+-		var shortYearCutoff = this._get(inst, "shortYearCutoff");
+-		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+-			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		return {shortYearCutoff: shortYearCutoff,
+-			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+-			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+-	},
+-
+-	/* Format the given date for display. */
+-	_formatDate: function(inst, day, month, year) {
+-		if (!day) {
+-			inst.currentDay = inst.selectedDay;
+-			inst.currentMonth = inst.selectedMonth;
+-			inst.currentYear = inst.selectedYear;
+-		}
+-		var date = (day ? (typeof day === "object" ? day :
+-			this._daylightSavingAdjust(new Date(year, month, day))) :
+-			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+-	}
+-});
+-
+-/*
+- * Bind hover events for datepicker elements.
+- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+- */
+-function bindHover(dpDiv) {
+-	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+-	return dpDiv.delegate(selector, "mouseout", function() {
+-			$(this).removeClass("ui-state-hover");
+-			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-				$(this).removeClass("ui-datepicker-prev-hover");
+-			}
+-			if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-				$(this).removeClass("ui-datepicker-next-hover");
+-			}
+-		})
+-		.delegate(selector, "mouseover", function(){
+-			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
+-				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+-				$(this).addClass("ui-state-hover");
+-				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-					$(this).addClass("ui-datepicker-prev-hover");
+-				}
+-				if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-					$(this).addClass("ui-datepicker-next-hover");
+-				}
+-			}
+-		});
+-}
+-
+-/* jQuery extend now ignores nulls! */
+-function extendRemove(target, props) {
+-	$.extend(target, props);
+-	for (var name in props) {
+-		if (props[name] == null) {
+-			target[name] = props[name];
+-		}
+-	}
+-	return target;
+-}
+-
+-/* Invoke the datepicker functionality.
+-   @param  options  string - a command, optionally followed by additional parameters or
+-					Object - settings for attaching new datepicker functionality
+-   @return  jQuery object */
+-$.fn.datepicker = function(options){
+-
+-	/* Verify an empty collection wasn't passed - Fixes #6976 */
+-	if ( !this.length ) {
+-		return this;
+-	}
+-
+-	/* Initialise the date picker. */
+-	if (!$.datepicker.initialized) {
+-		$(document).mousedown($.datepicker._checkExternalClick);
+-		$.datepicker.initialized = true;
+-	}
+-
+-	/* Append datepicker main container to body if not exist. */
+-	if ($("#"+$.datepicker._mainDivId).length === 0) {
+-		$("body").append($.datepicker.dpDiv);
+-	}
+-
+-	var otherArgs = Array.prototype.slice.call(arguments, 1);
+-	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	return this.each(function() {
+-		typeof options === "string" ?
+-			$.datepicker["_" + options + "Datepicker"].
+-				apply($.datepicker, [this].concat(otherArgs)) :
+-			$.datepicker._attachDatepicker(this, options);
+-	});
+-};
+-
+-$.datepicker = new Datepicker(); // singleton instance
+-$.datepicker.initialized = false;
+-$.datepicker.uuid = new Date().getTime();
+-$.datepicker.version = "1.10.3";
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.spinner.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.spinner.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.spinner.js	(revision 15488)
+@@ -1,493 +0,0 @@
+-/*!
+- * jQuery UI Spinner 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/spinner/
+- *
+- * Depends:
+- *  jquery.ui.core.js
+- *  jquery.ui.widget.js
+- *  jquery.ui.button.js
+- */
+-(function( $ ) {
+-
+-function modifier( fn ) {
+-	return function() {
+-		var previous = this.element.val();
+-		fn.apply( this, arguments );
+-		this._refresh();
+-		if ( previous !== this.element.val() ) {
+-			this._trigger( "change" );
+-		}
+-	};
+-}
+-
+-$.widget( "ui.spinner", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	widgetEventPrefix: "spin",
+-	options: {
+-		culture: null,
+-		icons: {
+-			down: "ui-icon-triangle-1-s",
+-			up: "ui-icon-triangle-1-n"
+-		},
+-		incremental: true,
+-		max: null,
+-		min: null,
+-		numberFormat: null,
+-		page: 10,
+-		step: 1,
+-
+-		change: null,
+-		spin: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		// handle string values that need to be parsed
+-		this._setOption( "max", this.options.max );
+-		this._setOption( "min", this.options.min );
+-		this._setOption( "step", this.options.step );
+-
+-		// format the value, but don't constrain
+-		this._value( this.element.val(), true );
+-
+-		this._draw();
+-		this._on( this._events );
+-		this._refresh();
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_getCreateOptions: function() {
+-		var options = {},
+-			element = this.element;
+-
+-		$.each( [ "min", "max", "step" ], function( i, option ) {
+-			var value = element.attr( option );
+-			if ( value !== undefined && value.length ) {
+-				options[ option ] = value;
+-			}
+-		});
+-
+-		return options;
+-	},
+-
+-	_events: {
+-		keydown: function( event ) {
+-			if ( this._start( event ) && this._keydown( event ) ) {
+-				event.preventDefault();
+-			}
+-		},
+-		keyup: "_stop",
+-		focus: function() {
+-			this.previous = this.element.val();
+-		},
+-		blur: function( event ) {
+-			if ( this.cancelBlur ) {
+-				delete this.cancelBlur;
+-				return;
+-			}
+-
+-			this._stop();
+-			this._refresh();
+-			if ( this.previous !== this.element.val() ) {
+-				this._trigger( "change", event );
+-			}
+-		},
+-		mousewheel: function( event, delta ) {
+-			if ( !delta ) {
+-				return;
+-			}
+-			if ( !this.spinning && !this._start( event ) ) {
+-				return false;
+-			}
+-
+-			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+-			clearTimeout( this.mousewheelTimer );
+-			this.mousewheelTimer = this._delay(function() {
+-				if ( this.spinning ) {
+-					this._stop( event );
+-				}
+-			}, 100 );
+-			event.preventDefault();
+-		},
+-		"mousedown .ui-spinner-button": function( event ) {
+-			var previous;
+-
+-			// We never want the buttons to have focus; whenever the user is
+-			// interacting with the spinner, the focus should be on the input.
+-			// If the input is focused then this.previous is properly set from
+-			// when the input first received focus. If the input is not focused
+-			// then we need to set this.previous based on the value before spinning.
+-			previous = this.element[0] === this.document[0].activeElement ?
+-				this.previous : this.element.val();
+-			function checkFocus() {
+-				var isActive = this.element[0] === this.document[0].activeElement;
+-				if ( !isActive ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// support: IE
+-					// IE sets focus asynchronously, so we need to check if focus
+-					// moved off of the input because the user clicked on the button.
+-					this._delay(function() {
+-						this.previous = previous;
+-					});
+-				}
+-			}
+-
+-			// ensure focus is on (or stays on) the text field
+-			event.preventDefault();
+-			checkFocus.call( this );
+-
+-			// support: IE
+-			// IE doesn't prevent moving focus even with event.preventDefault()
+-			// so we set a flag to know when we should ignore the blur event
+-			// and check (again) if focus moved off of the input.
+-			this.cancelBlur = true;
+-			this._delay(function() {
+-				delete this.cancelBlur;
+-				checkFocus.call( this );
+-			});
+-
+-			if ( this._start( event ) === false ) {
+-				return;
+-			}
+-
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		"mouseup .ui-spinner-button": "_stop",
+-		"mouseenter .ui-spinner-button": function( event ) {
+-			// button will add ui-state-active if mouse was down while mouseleave and kept down
+-			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+-				return;
+-			}
+-
+-			if ( this._start( event ) === false ) {
+-				return false;
+-			}
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		// TODO: do we really want to consider this a stop?
+-		// shouldn't we just stop the repeater and wait until mouseup before
+-		// we trigger the stop event?
+-		"mouseleave .ui-spinner-button": "_stop"
+-	},
+-
+-	_draw: function() {
+-		var uiSpinner = this.uiSpinner = this.element
+-			.addClass( "ui-spinner-input" )
+-			.attr( "autocomplete", "off" )
+-			.wrap( this._uiSpinnerHtml() )
+-			.parent()
+-				// add buttons
+-				.append( this._buttonHtml() );
+-
+-		this.element.attr( "role", "spinbutton" );
+-
+-		// button bindings
+-		this.buttons = uiSpinner.find( ".ui-spinner-button" )
+-			.attr( "tabIndex", -1 )
+-			.button()
+-			.removeClass( "ui-corner-all" );
+-
+-		// IE 6 doesn't understand height: 50% for the buttons
+-		// unless the wrapper has an explicit height
+-		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+-				uiSpinner.height() > 0 ) {
+-			uiSpinner.height( uiSpinner.height() );
+-		}
+-
+-		// disable spinner if element was already disabled
+-		if ( this.options.disabled ) {
+-			this.disable();
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		var options = this.options,
+-			keyCode = $.ui.keyCode;
+-
+-		switch ( event.keyCode ) {
+-		case keyCode.UP:
+-			this._repeat( null, 1, event );
+-			return true;
+-		case keyCode.DOWN:
+-			this._repeat( null, -1, event );
+-			return true;
+-		case keyCode.PAGE_UP:
+-			this._repeat( null, options.page, event );
+-			return true;
+-		case keyCode.PAGE_DOWN:
+-			this._repeat( null, -options.page, event );
+-			return true;
+-		}
+-
+-		return false;
+-	},
+-
+-	_uiSpinnerHtml: function() {
+-		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+-	},
+-
+-	_buttonHtml: function() {
+-		return "" +
+-			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+-				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+-			"</a>" +
+-			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+-				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+-			"</a>";
+-	},
+-
+-	_start: function( event ) {
+-		if ( !this.spinning && this._trigger( "start", event ) === false ) {
+-			return false;
+-		}
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-		this.spinning = true;
+-		return true;
+-	},
+-
+-	_repeat: function( i, steps, event ) {
+-		i = i || 500;
+-
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			this._repeat( 40, steps, event );
+-		}, i );
+-
+-		this._spin( steps * this.options.step, event );
+-	},
+-
+-	_spin: function( step, event ) {
+-		var value = this.value() || 0;
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-
+-		value = this._adjustValue( value + step * this._increment( this.counter ) );
+-
+-		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+-			this._value( value );
+-			this.counter++;
+-		}
+-	},
+-
+-	_increment: function( i ) {
+-		var incremental = this.options.incremental;
+-
+-		if ( incremental ) {
+-			return $.isFunction( incremental ) ?
+-				incremental( i ) :
+-				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+-		}
+-
+-		return 1;
+-	},
+-
+-	_precision: function() {
+-		var precision = this._precisionOf( this.options.step );
+-		if ( this.options.min !== null ) {
+-			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+-		}
+-		return precision;
+-	},
+-
+-	_precisionOf: function( num ) {
+-		var str = num.toString(),
+-			decimal = str.indexOf( "." );
+-		return decimal === -1 ? 0 : str.length - decimal - 1;
+-	},
+-
+-	_adjustValue: function( value ) {
+-		var base, aboveMin,
+-			options = this.options;
+-
+-		// make sure we're at a valid step
+-		// - find out where we are relative to the base (min or 0)
+-		base = options.min !== null ? options.min : 0;
+-		aboveMin = value - base;
+-		// - round to the nearest step
+-		aboveMin = Math.round(aboveMin / options.step) * options.step;
+-		// - rounding is based on 0, so adjust back to our base
+-		value = base + aboveMin;
+-
+-		// fix precision from bad JS floating point math
+-		value = parseFloat( value.toFixed( this._precision() ) );
+-
+-		// clamp the value
+-		if ( options.max !== null && value > options.max) {
+-			return options.max;
+-		}
+-		if ( options.min !== null && value < options.min ) {
+-			return options.min;
+-		}
+-
+-		return value;
+-	},
+-
+-	_stop: function( event ) {
+-		if ( !this.spinning ) {
+-			return;
+-		}
+-
+-		clearTimeout( this.timer );
+-		clearTimeout( this.mousewheelTimer );
+-		this.counter = 0;
+-		this.spinning = false;
+-		this._trigger( "stop", event );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "culture" || key === "numberFormat" ) {
+-			var prevValue = this._parse( this.element.val() );
+-			this.options[ key ] = value;
+-			this.element.val( this._format( prevValue ) );
+-			return;
+-		}
+-
+-		if ( key === "max" || key === "min" || key === "step" ) {
+-			if ( typeof value === "string" ) {
+-				value = this._parse( value );
+-			}
+-		}
+-		if ( key === "icons" ) {
+-			this.buttons.first().find( ".ui-icon" )
+-				.removeClass( this.options.icons.up )
+-				.addClass( value.up );
+-			this.buttons.last().find( ".ui-icon" )
+-				.removeClass( this.options.icons.down )
+-				.addClass( value.down );
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-				this.buttons.button( "disable" );
+-			} else {
+-				this.element.prop( "disabled", false );
+-				this.buttons.button( "enable" );
+-			}
+-		}
+-	},
+-
+-	_setOptions: modifier(function( options ) {
+-		this._super( options );
+-		this._value( this.element.val() );
+-	}),
+-
+-	_parse: function( val ) {
+-		if ( typeof val === "string" && val !== "" ) {
+-			val = window.Globalize && this.options.numberFormat ?
+-				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+-		}
+-		return val === "" || isNaN( val ) ? null : val;
+-	},
+-
+-	_format: function( value ) {
+-		if ( value === "" ) {
+-			return "";
+-		}
+-		return window.Globalize && this.options.numberFormat ?
+-			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+-			value;
+-	},
+-
+-	_refresh: function() {
+-		this.element.attr({
+-			"aria-valuemin": this.options.min,
+-			"aria-valuemax": this.options.max,
+-			// TODO: what should we do with values that can't be parsed?
+-			"aria-valuenow": this._parse( this.element.val() )
+-		});
+-	},
+-
+-	// update the value without triggering change
+-	_value: function( value, allowAny ) {
+-		var parsed;
+-		if ( value !== "" ) {
+-			parsed = this._parse( value );
+-			if ( parsed !== null ) {
+-				if ( !allowAny ) {
+-					parsed = this._adjustValue( parsed );
+-				}
+-				value = this._format( parsed );
+-			}
+-		}
+-		this.element.val( value );
+-		this._refresh();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-spinner-input" )
+-			.prop( "disabled", false )
+-			.removeAttr( "autocomplete" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-		this.uiSpinner.replaceWith( this.element );
+-	},
+-
+-	stepUp: modifier(function( steps ) {
+-		this._stepUp( steps );
+-	}),
+-	_stepUp: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	stepDown: modifier(function( steps ) {
+-		this._stepDown( steps );
+-	}),
+-	_stepDown: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * -this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	pageUp: modifier(function( pages ) {
+-		this._stepUp( (pages || 1) * this.options.page );
+-	}),
+-
+-	pageDown: modifier(function( pages ) {
+-		this._stepDown( (pages || 1) * this.options.page );
+-	}),
+-
+-	value: function( newVal ) {
+-		if ( !arguments.length ) {
+-			return this._parse( this.element.val() );
+-		}
+-		modifier( this._value ).call( this, newVal );
+-	},
+-
+-	widget: function() {
+-		return this.uiSpinner;
+-	}
+-});
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fold.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fold.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fold.js	(revision 15488)
+@@ -1,76 +0,0 @@
+-/*!
+- * jQuery UI Effects Fold 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/fold-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.fold = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		size = o.size || 15,
+-		percent = /([0-9]+)%/.exec( size ),
+-		horizFirst = !!o.horizFirst,
+-		widthFirst = show !== horizFirst,
+-		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+-		duration = o.duration / 2,
+-		wrapper, distance,
+-		animation1 = {},
+-		animation2 = {};
+-
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	distance = widthFirst ?
+-		[ wrapper.width(), wrapper.height() ] :
+-		[ wrapper.height(), wrapper.width() ];
+-
+-	if ( percent ) {
+-		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+-	}
+-	if ( show ) {
+-		wrapper.css( horizFirst ? {
+-			height: 0,
+-			width: size
+-		} : {
+-			height: size,
+-			width: 0
+-		});
+-	}
+-
+-	// Animation
+-	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+-	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+-
+-	// Animate
+-	wrapper
+-		.animate( animation1, duration, o.easing )
+-		.animate( animation2, duration, o.easing, function() {
+-			if ( hide ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.resizable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.resizable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.resizable.js	(revision 15488)
+@@ -1,968 +0,0 @@
+-/*!
+- * jQuery UI Resizable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/resizable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-function num(v) {
+-	return parseInt(v, 10) || 0;
+-}
+-
+-function isNumber(value) {
+-	return !isNaN(parseInt(value, 10));
+-}
+-
+-$.widget("ui.resizable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "resize",
+-	options: {
+-		alsoResize: false,
+-		animate: false,
+-		animateDuration: "slow",
+-		animateEasing: "swing",
+-		aspectRatio: false,
+-		autoHide: false,
+-		containment: false,
+-		ghost: false,
+-		grid: false,
+-		handles: "e,s,se",
+-		helper: false,
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 10,
+-		minWidth: 10,
+-		// See #7960
+-		zIndex: 90,
+-
+-		// callbacks
+-		resize: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		var n, i, handle, axis, hname,
+-			that = this,
+-			o = this.options;
+-		this.element.addClass("ui-resizable");
+-
+-		$.extend(this, {
+-			_aspectRatio: !!(o.aspectRatio),
+-			aspectRatio: o.aspectRatio,
+-			originalElement: this.element,
+-			_proportionallyResizeElements: [],
+-			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+-		});
+-
+-		//Wrap the element if it cannot hold child nodes
+-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+-
+-			//Create a wrapper element and set the wrapper to the new current internal element
+-			this.element.wrap(
+-				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+-					position: this.element.css("position"),
+-					width: this.element.outerWidth(),
+-					height: this.element.outerHeight(),
+-					top: this.element.css("top"),
+-					left: this.element.css("left")
+-				})
+-			);
+-
+-			//Overwrite the original this.element
+-			this.element = this.element.parent().data(
+-				"ui-resizable", this.element.data("ui-resizable")
+-			);
+-
+-			this.elementIsWrapper = true;
+-
+-			//Move margins to the wrapper
+-			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+-			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+-
+-			//Prevent Safari textarea resize
+-			this.originalResizeStyle = this.originalElement.css("resize");
+-			this.originalElement.css("resize", "none");
+-
+-			//Push the actual element to our proportionallyResize internal array
+-			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+-
+-			// avoid IE jump (hard set the margin)
+-			this.originalElement.css({ margin: this.originalElement.css("margin") });
+-
+-			// fix handlers offset
+-			this._proportionallyResize();
+-
+-		}
+-
+-		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
+-		if(this.handles.constructor === String) {
+-
+-			if ( this.handles === "all") {
+-				this.handles = "n,e,s,w,se,sw,ne,nw";
+-			}
+-
+-			n = this.handles.split(",");
+-			this.handles = {};
+-
+-			for(i = 0; i < n.length; i++) {
+-
+-				handle = $.trim(n[i]);
+-				hname = "ui-resizable-"+handle;
+-				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+-
+-				// Apply zIndex to all handles - see #7960
+-				axis.css({ zIndex: o.zIndex });
+-
+-				//TODO : What's going on here?
+-				if ("se" === handle) {
+-					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+-				}
+-
+-				//Insert into internal handles object and append to element
+-				this.handles[handle] = ".ui-resizable-"+handle;
+-				this.element.append(axis);
+-			}
+-
+-		}
+-
+-		this._renderAxis = function(target) {
+-
+-			var i, axis, padPos, padWrapper;
+-
+-			target = target || this.element;
+-
+-			for(i in this.handles) {
+-
+-				if(this.handles[i].constructor === String) {
+-					this.handles[i] = $(this.handles[i], this.element).show();
+-				}
+-
+-				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+-
+-					axis = $(this.handles[i], this.element);
+-
+-					//Checking the correct pad and border
+-					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+-
+-					//The padding type i have to apply...
+-					padPos = [ "padding",
+-						/ne|nw|n/.test(i) ? "Top" :
+-						/se|sw|s/.test(i) ? "Bottom" :
+-						/^e$/.test(i) ? "Right" : "Left" ].join("");
+-
+-					target.css(padPos, padWrapper);
+-
+-					this._proportionallyResize();
+-
+-				}
+-
+-				//TODO: What's that good for? There's not anything to be executed left
+-				if(!$(this.handles[i]).length) {
+-					continue;
+-				}
+-			}
+-		};
+-
+-		//TODO: make renderAxis a prototype function
+-		this._renderAxis(this.element);
+-
+-		this._handles = $(".ui-resizable-handle", this.element)
+-			.disableSelection();
+-
+-		//Matching axis name
+-		this._handles.mouseover(function() {
+-			if (!that.resizing) {
+-				if (this.className) {
+-					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+-				}
+-				//Axis, default = se
+-				that.axis = axis && axis[1] ? axis[1] : "se";
+-			}
+-		});
+-
+-		//If we want to auto hide the elements
+-		if (o.autoHide) {
+-			this._handles.hide();
+-			$(this.element)
+-				.addClass("ui-resizable-autohide")
+-				.mouseenter(function() {
+-					if (o.disabled) {
+-						return;
+-					}
+-					$(this).removeClass("ui-resizable-autohide");
+-					that._handles.show();
+-				})
+-				.mouseleave(function(){
+-					if (o.disabled) {
+-						return;
+-					}
+-					if (!that.resizing) {
+-						$(this).addClass("ui-resizable-autohide");
+-						that._handles.hide();
+-					}
+-				});
+-		}
+-
+-		//Initialize the mouse interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-
+-		this._mouseDestroy();
+-
+-		var wrapper,
+-			_destroy = function(exp) {
+-				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+-					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+-			};
+-
+-		//TODO: Unwrap at same DOM position
+-		if (this.elementIsWrapper) {
+-			_destroy(this.element);
+-			wrapper = this.element;
+-			this.originalElement.css({
+-				position: wrapper.css("position"),
+-				width: wrapper.outerWidth(),
+-				height: wrapper.outerHeight(),
+-				top: wrapper.css("top"),
+-				left: wrapper.css("left")
+-			}).insertAfter( wrapper );
+-			wrapper.remove();
+-		}
+-
+-		this.originalElement.css("resize", this.originalResizeStyle);
+-		_destroy(this.originalElement);
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-		var i, handle,
+-			capture = false;
+-
+-		for (i in this.handles) {
+-			handle = $(this.handles[i])[0];
+-			if (handle === event.target || $.contains(handle, event.target)) {
+-				capture = true;
+-			}
+-		}
+-
+-		return !this.options.disabled && capture;
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var curleft, curtop, cursor,
+-			o = this.options,
+-			iniPos = this.element.position(),
+-			el = this.element;
+-
+-		this.resizing = true;
+-
+-		// bugfix for http://dev.jquery.com/ticket/1749
+-		if ( (/absolute/).test( el.css("position") ) ) {
+-			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
+-		} else if (el.is(".ui-draggable")) {
+-			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
+-		}
+-
+-		this._renderProxy();
+-
+-		curleft = num(this.helper.css("left"));
+-		curtop = num(this.helper.css("top"));
+-
+-		if (o.containment) {
+-			curleft += $(o.containment).scrollLeft() || 0;
+-			curtop += $(o.containment).scrollTop() || 0;
+-		}
+-
+-		//Store needed variables
+-		this.offset = this.helper.offset();
+-		this.position = { left: curleft, top: curtop };
+-		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalPosition = { left: curleft, top: curtop };
+-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+-		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+-
+-		//Aspect Ratio
+-		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+-
+-		cursor = $(".ui-resizable-" + this.axis).css("cursor");
+-		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+-
+-		el.addClass("ui-resizable-resizing");
+-		this._propagate("start", event);
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Increase performance, avoid regex
+-		var data,
+-			el = this.helper, props = {},
+-			smp = this.originalMousePosition,
+-			a = this.axis,
+-			prevTop = this.position.top,
+-			prevLeft = this.position.left,
+-			prevWidth = this.size.width,
+-			prevHeight = this.size.height,
+-			dx = (event.pageX-smp.left)||0,
+-			dy = (event.pageY-smp.top)||0,
+-			trigger = this._change[a];
+-
+-		if (!trigger) {
+-			return false;
+-		}
+-
+-		// Calculate the attrs that will be change
+-		data = trigger.apply(this, [event, dx, dy]);
+-
+-		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+-		this._updateVirtualBoundaries(event.shiftKey);
+-		if (this._aspectRatio || event.shiftKey) {
+-			data = this._updateRatio(data, event);
+-		}
+-
+-		data = this._respectSize(data, event);
+-
+-		this._updateCache(data);
+-
+-		// plugins callbacks need to be called first
+-		this._propagate("resize", event);
+-
+-		if (this.position.top !== prevTop) {
+-			props.top = this.position.top + "px";
+-		}
+-		if (this.position.left !== prevLeft) {
+-			props.left = this.position.left + "px";
+-		}
+-		if (this.size.width !== prevWidth) {
+-			props.width = this.size.width + "px";
+-		}
+-		if (this.size.height !== prevHeight) {
+-			props.height = this.size.height + "px";
+-		}
+-		el.css(props);
+-
+-		if (!this._helper && this._proportionallyResizeElements.length) {
+-			this._proportionallyResize();
+-		}
+-
+-		// Call the user callback if the element was resized
+-		if ( ! $.isEmptyObject(props) ) {
+-			this._trigger("resize", event, this.ui());
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		this.resizing = false;
+-		var pr, ista, soffseth, soffsetw, s, left, top,
+-			o = this.options, that = this;
+-
+-		if(this._helper) {
+-
+-			pr = this._proportionallyResizeElements;
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+-			soffsetw = ista ? 0 : that.sizeDiff.width;
+-
+-			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-			if (!o.animate) {
+-				this.element.css($.extend(s, { top: top, left: left }));
+-			}
+-
+-			that.helper.height(that.size.height);
+-			that.helper.width(that.size.width);
+-
+-			if (this._helper && !o.animate) {
+-				this._proportionallyResize();
+-			}
+-		}
+-
+-		$("body").css("cursor", "auto");
+-
+-		this.element.removeClass("ui-resizable-resizing");
+-
+-		this._propagate("stop", event);
+-
+-		if (this._helper) {
+-			this.helper.remove();
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	_updateVirtualBoundaries: function(forceAspectRatio) {
+-		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+-			o = this.options;
+-
+-		b = {
+-			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+-			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+-			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+-			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+-		};
+-
+-		if(this._aspectRatio || forceAspectRatio) {
+-			// We want to create an enclosing box whose aspect ration is the requested one
+-			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+-			pMinWidth = b.minHeight * this.aspectRatio;
+-			pMinHeight = b.minWidth / this.aspectRatio;
+-			pMaxWidth = b.maxHeight * this.aspectRatio;
+-			pMaxHeight = b.maxWidth / this.aspectRatio;
+-
+-			if(pMinWidth > b.minWidth) {
+-				b.minWidth = pMinWidth;
+-			}
+-			if(pMinHeight > b.minHeight) {
+-				b.minHeight = pMinHeight;
+-			}
+-			if(pMaxWidth < b.maxWidth) {
+-				b.maxWidth = pMaxWidth;
+-			}
+-			if(pMaxHeight < b.maxHeight) {
+-				b.maxHeight = pMaxHeight;
+-			}
+-		}
+-		this._vBoundaries = b;
+-	},
+-
+-	_updateCache: function(data) {
+-		this.offset = this.helper.offset();
+-		if (isNumber(data.left)) {
+-			this.position.left = data.left;
+-		}
+-		if (isNumber(data.top)) {
+-			this.position.top = data.top;
+-		}
+-		if (isNumber(data.height)) {
+-			this.size.height = data.height;
+-		}
+-		if (isNumber(data.width)) {
+-			this.size.width = data.width;
+-		}
+-	},
+-
+-	_updateRatio: function( data ) {
+-
+-		var cpos = this.position,
+-			csize = this.size,
+-			a = this.axis;
+-
+-		if (isNumber(data.height)) {
+-			data.width = (data.height * this.aspectRatio);
+-		} else if (isNumber(data.width)) {
+-			data.height = (data.width / this.aspectRatio);
+-		}
+-
+-		if (a === "sw") {
+-			data.left = cpos.left + (csize.width - data.width);
+-			data.top = null;
+-		}
+-		if (a === "nw") {
+-			data.top = cpos.top + (csize.height - data.height);
+-			data.left = cpos.left + (csize.width - data.width);
+-		}
+-
+-		return data;
+-	},
+-
+-	_respectSize: function( data ) {
+-
+-		var o = this._vBoundaries,
+-			a = this.axis,
+-			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+-			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+-			dw = this.originalPosition.left + this.originalSize.width,
+-			dh = this.position.top + this.size.height,
+-			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+-		if (isminw) {
+-			data.width = o.minWidth;
+-		}
+-		if (isminh) {
+-			data.height = o.minHeight;
+-		}
+-		if (ismaxw) {
+-			data.width = o.maxWidth;
+-		}
+-		if (ismaxh) {
+-			data.height = o.maxHeight;
+-		}
+-
+-		if (isminw && cw) {
+-			data.left = dw - o.minWidth;
+-		}
+-		if (ismaxw && cw) {
+-			data.left = dw - o.maxWidth;
+-		}
+-		if (isminh && ch) {
+-			data.top = dh - o.minHeight;
+-		}
+-		if (ismaxh && ch) {
+-			data.top = dh - o.maxHeight;
+-		}
+-
+-		// fixing jump error on top/left - bug #2330
+-		if (!data.width && !data.height && !data.left && data.top) {
+-			data.top = null;
+-		} else if (!data.width && !data.height && !data.top && data.left) {
+-			data.left = null;
+-		}
+-
+-		return data;
+-	},
+-
+-	_proportionallyResize: function() {
+-
+-		if (!this._proportionallyResizeElements.length) {
+-			return;
+-		}
+-
+-		var i, j, borders, paddings, prel,
+-			element = this.helper || this.element;
+-
+-		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+-
+-			prel = this._proportionallyResizeElements[i];
+-
+-			if (!this.borderDif) {
+-				this.borderDif = [];
+-				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
+-				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
+-
+-				for ( j = 0; j < borders.length; j++ ) {
+-					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
+-				}
+-			}
+-
+-			prel.css({
+-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+-			});
+-
+-		}
+-
+-	},
+-
+-	_renderProxy: function() {
+-
+-		var el = this.element, o = this.options;
+-		this.elementOffset = el.offset();
+-
+-		if(this._helper) {
+-
+-			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+-
+-			this.helper.addClass(this._helper).css({
+-				width: this.element.outerWidth() - 1,
+-				height: this.element.outerHeight() - 1,
+-				position: "absolute",
+-				left: this.elementOffset.left +"px",
+-				top: this.elementOffset.top +"px",
+-				zIndex: ++o.zIndex //TODO: Don't modify option
+-			});
+-
+-			this.helper
+-				.appendTo("body")
+-				.disableSelection();
+-
+-		} else {
+-			this.helper = this.element;
+-		}
+-
+-	},
+-
+-	_change: {
+-		e: function(event, dx) {
+-			return { width: this.originalSize.width + dx };
+-		},
+-		w: function(event, dx) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { left: sp.left + dx, width: cs.width - dx };
+-		},
+-		n: function(event, dx, dy) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { top: sp.top + dy, height: cs.height - dy };
+-		},
+-		s: function(event, dx, dy) {
+-			return { height: this.originalSize.height + dy };
+-		},
+-		se: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		sw: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		},
+-		ne: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		nw: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		}
+-	},
+-
+-	_propagate: function(n, event) {
+-		$.ui.plugin.call(this, n, [event, this.ui()]);
+-		(n !== "resize" && this._trigger(n, event, this.ui()));
+-	},
+-
+-	plugins: {},
+-
+-	ui: function() {
+-		return {
+-			originalElement: this.originalElement,
+-			element: this.element,
+-			helper: this.helper,
+-			position: this.position,
+-			size: this.size,
+-			originalSize: this.originalSize,
+-			originalPosition: this.originalPosition
+-		};
+-	}
+-
+-});
+-
+-/*
+- * Resizable Extensions
+- */
+-
+-$.ui.plugin.add("resizable", "animate", {
+-
+-	stop: function( event ) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			pr = that._proportionallyResizeElements,
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+-			soffsetw = ista ? 0 : that.sizeDiff.width,
+-			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-		that.element.animate(
+-			$.extend(style, top && left ? { top: top, left: left } : {}), {
+-				duration: o.animateDuration,
+-				easing: o.animateEasing,
+-				step: function() {
+-
+-					var data = {
+-						width: parseInt(that.element.css("width"), 10),
+-						height: parseInt(that.element.css("height"), 10),
+-						top: parseInt(that.element.css("top"), 10),
+-						left: parseInt(that.element.css("left"), 10)
+-					};
+-
+-					if (pr && pr.length) {
+-						$(pr[0]).css({ width: data.width, height: data.height });
+-					}
+-
+-					// propagating resize, and updating values for each animation step
+-					that._updateCache(data);
+-					that._propagate("resize", event);
+-
+-				}
+-			}
+-		);
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "containment", {
+-
+-	start: function() {
+-		var element, p, co, ch, cw, width, height,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			el = that.element,
+-			oc = o.containment,
+-			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+-
+-		if (!ce) {
+-			return;
+-		}
+-
+-		that.containerElement = $(ce);
+-
+-		if (/document/.test(oc) || oc === document) {
+-			that.containerOffset = { left: 0, top: 0 };
+-			that.containerPosition = { left: 0, top: 0 };
+-
+-			that.parentData = {
+-				element: $(document), left: 0, top: 0,
+-				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+-			};
+-		}
+-
+-		// i'm a node, so compute top, left, right, bottom
+-		else {
+-			element = $(ce);
+-			p = [];
+-			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+-
+-			that.containerOffset = element.offset();
+-			that.containerPosition = element.position();
+-			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+-
+-			co = that.containerOffset;
+-			ch = that.containerSize.height;
+-			cw = that.containerSize.width;
+-			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
+-			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+-
+-			that.parentData = {
+-				element: ce, left: co.left, top: co.top, width: width, height: height
+-			};
+-		}
+-	},
+-
+-	resize: function( event ) {
+-		var woset, hoset, isParent, isOffsetRelative,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset, cp = that.position,
+-			pRatio = that._aspectRatio || event.shiftKey,
+-			cop = { top:0, left:0 }, ce = that.containerElement;
+-
+-		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
+-			cop = co;
+-		}
+-
+-		if (cp.left < (that._helper ? co.left : 0)) {
+-			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-			that.position.left = o.helper ? co.left : 0;
+-		}
+-
+-		if (cp.top < (that._helper ? co.top : 0)) {
+-			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-			that.position.top = that._helper ? co.top : 0;
+-		}
+-
+-		that.offset.left = that.parentData.left+that.position.left;
+-		that.offset.top = that.parentData.top+that.position.top;
+-
+-		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
+-		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
+-
+-		isParent = that.containerElement.get(0) === that.element.parent().get(0);
+-		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+-
+-		if(isParent && isOffsetRelative) {
+-			woset -= that.parentData.left;
+-		}
+-
+-		if (woset + that.size.width >= that.parentData.width) {
+-			that.size.width = that.parentData.width - woset;
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-		}
+-
+-		if (hoset + that.size.height >= that.parentData.height) {
+-			that.size.height = that.parentData.height - hoset;
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-		}
+-	},
+-
+-	stop: function(){
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset,
+-			cop = that.containerPosition,
+-			ce = that.containerElement,
+-			helper = $(that.helper),
+-			ho = helper.offset(),
+-			w = helper.outerWidth() - that.sizeDiff.width,
+-			h = helper.outerHeight() - that.sizeDiff.height;
+-
+-		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "alsoResize", {
+-
+-	start: function () {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			_store = function (exp) {
+-				$(exp).each(function() {
+-					var el = $(this);
+-					el.data("ui-resizable-alsoresize", {
+-						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+-						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+-					});
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
+-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+-		}else{
+-			_store(o.alsoResize);
+-		}
+-	},
+-
+-	resize: function (event, ui) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			delta = {
+-				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
+-				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
+-			},
+-
+-			_alsoResize = function (exp, c) {
+-				$(exp).each(function() {
+-					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+-						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+-
+-					$.each(css, function (i, prop) {
+-						var sum = (start[prop]||0) + (delta[prop]||0);
+-						if (sum && sum >= 0) {
+-							style[prop] = sum || null;
+-						}
+-					});
+-
+-					el.css(style);
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
+-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+-		}else{
+-			_alsoResize(o.alsoResize);
+-		}
+-	},
+-
+-	stop: function () {
+-		$(this).removeData("resizable-alsoresize");
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "ghost", {
+-
+-	start: function() {
+-
+-		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
+-
+-		that.ghost = that.originalElement.clone();
+-		that.ghost
+-			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+-			.addClass("ui-resizable-ghost")
+-			.addClass(typeof o.ghost === "string" ? o.ghost : "");
+-
+-		that.ghost.appendTo(that.helper);
+-
+-	},
+-
+-	resize: function(){
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost) {
+-			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+-		}
+-	},
+-
+-	stop: function() {
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost && that.helper) {
+-			that.helper.get(0).removeChild(that.ghost.get(0));
+-		}
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "grid", {
+-
+-	resize: function() {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			cs = that.size,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			a = that.axis,
+-			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
+-			gridX = (grid[0]||1),
+-			gridY = (grid[1]||1),
+-			ox = Math.round((cs.width - os.width) / gridX) * gridX,
+-			oy = Math.round((cs.height - os.height) / gridY) * gridY,
+-			newWidth = os.width + ox,
+-			newHeight = os.height + oy,
+-			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+-			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+-			isMinWidth = o.minWidth && (o.minWidth > newWidth),
+-			isMinHeight = o.minHeight && (o.minHeight > newHeight);
+-
+-		o.grid = grid;
+-
+-		if (isMinWidth) {
+-			newWidth = newWidth + gridX;
+-		}
+-		if (isMinHeight) {
+-			newHeight = newHeight + gridY;
+-		}
+-		if (isMaxWidth) {
+-			newWidth = newWidth - gridX;
+-		}
+-		if (isMaxHeight) {
+-			newHeight = newHeight - gridY;
+-		}
+-
+-		if (/^(se|s|e)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-		} else if (/^(ne)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-		} else if (/^(sw)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.left = op.left - ox;
+-		} else {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-			that.position.left = op.left - ox;
+-		}
+-	}
+-
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-scale.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-scale.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-scale.js	(revision 15488)
+@@ -1,318 +0,0 @@
+-/*!
+- * jQuery UI Effects Scale 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/scale-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.puff = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "hide" ),
+-		hide = mode === "hide",
+-		percent = parseInt( o.percent, 10 ) || 150,
+-		factor = percent / 100,
+-		original = {
+-			height: elem.height(),
+-			width: elem.width(),
+-			outerHeight: elem.outerHeight(),
+-			outerWidth: elem.outerWidth()
+-		};
+-
+-	$.extend( o, {
+-		effect: "scale",
+-		queue: false,
+-		fade: true,
+-		mode: mode,
+-		complete: done,
+-		percent: hide ? percent : 100,
+-		from: hide ?
+-			original :
+-			{
+-				height: original.height * factor,
+-				width: original.width * factor,
+-				outerHeight: original.outerHeight * factor,
+-				outerWidth: original.outerWidth * factor
+-			}
+-	});
+-
+-	elem.effect( o );
+-};
+-
+-$.effects.effect.scale = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		options = $.extend( true, {}, o ),
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		percent = parseInt( o.percent, 10 ) ||
+-			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+-		direction = o.direction || "both",
+-		origin = o.origin,
+-		original = {
+-			height: el.height(),
+-			width: el.width(),
+-			outerHeight: el.outerHeight(),
+-			outerWidth: el.outerWidth()
+-		},
+-		factor = {
+-			y: direction !== "horizontal" ? (percent / 100) : 1,
+-			x: direction !== "vertical" ? (percent / 100) : 1
+-		};
+-
+-	// We are going to pass this effect to the size effect:
+-	options.effect = "size";
+-	options.queue = false;
+-	options.complete = done;
+-
+-	// Set default origin and restore for show/hide
+-	if ( mode !== "effect" ) {
+-		options.origin = origin || ["middle","center"];
+-		options.restore = true;
+-	}
+-
+-	options.from = o.from || ( mode === "show" ? {
+-		height: 0,
+-		width: 0,
+-		outerHeight: 0,
+-		outerWidth: 0
+-	} : original );
+-	options.to = {
+-		height: original.height * factor.y,
+-		width: original.width * factor.x,
+-		outerHeight: original.outerHeight * factor.y,
+-		outerWidth: original.outerWidth * factor.x
+-	};
+-
+-	// Fade option to support puff
+-	if ( options.fade ) {
+-		if ( mode === "show" ) {
+-			options.from.opacity = 0;
+-			options.to.opacity = 1;
+-		}
+-		if ( mode === "hide" ) {
+-			options.from.opacity = 1;
+-			options.to.opacity = 0;
+-		}
+-	}
+-
+-	// Animate
+-	el.effect( options );
+-
+-};
+-
+-$.effects.effect.size = function( o, done ) {
+-
+-	// Create element
+-	var original, baseline, factor,
+-		el = $( this ),
+-		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+-
+-		// Always restore
+-		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+-
+-		// Copy for children
+-		props2 = [ "width", "height", "overflow" ],
+-		cProps = [ "fontSize" ],
+-		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+-		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+-
+-		// Set options
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		restore = o.restore || mode !== "effect",
+-		scale = o.scale || "both",
+-		origin = o.origin || [ "middle", "center" ],
+-		position = el.css( "position" ),
+-		props = restore ? props0 : props1,
+-		zero = {
+-			height: 0,
+-			width: 0,
+-			outerHeight: 0,
+-			outerWidth: 0
+-		};
+-
+-	if ( mode === "show" ) {
+-		el.show();
+-	}
+-	original = {
+-		height: el.height(),
+-		width: el.width(),
+-		outerHeight: el.outerHeight(),
+-		outerWidth: el.outerWidth()
+-	};
+-
+-	if ( o.mode === "toggle" && mode === "show" ) {
+-		el.from = o.to || zero;
+-		el.to = o.from || original;
+-	} else {
+-		el.from = o.from || ( mode === "show" ? zero : original );
+-		el.to = o.to || ( mode === "hide" ? zero : original );
+-	}
+-
+-	// Set scaling factor
+-	factor = {
+-		from: {
+-			y: el.from.height / original.height,
+-			x: el.from.width / original.width
+-		},
+-		to: {
+-			y: el.to.height / original.height,
+-			x: el.to.width / original.width
+-		}
+-	};
+-
+-	// Scale the css box
+-	if ( scale === "box" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( vProps );
+-			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+-		}
+-
+-		// Horizontal props scaling
+-		if ( factor.from.x !== factor.to.x ) {
+-			props = props.concat( hProps );
+-			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+-			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+-		}
+-	}
+-
+-	// Scale the content
+-	if ( scale === "content" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( cProps ).concat( props2 );
+-			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+-		}
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-	el.css( "overflow", "hidden" ).css( el.from );
+-
+-	// Adjust
+-	if (origin) { // Calculate baseline shifts
+-		baseline = $.effects.getBaseline( origin, original );
+-		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+-		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+-		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+-		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+-	}
+-	el.css( el.from ); // set top & left
+-
+-	// Animate
+-	if ( scale === "content" || scale === "both" ) { // Scale the children
+-
+-		// Add margins/font-size
+-		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+-		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+-		props2 = props0.concat(vProps).concat(hProps);
+-
+-		el.find( "*[width]" ).each( function(){
+-			var child = $( this ),
+-				c_original = {
+-					height: child.height(),
+-					width: child.width(),
+-					outerHeight: child.outerHeight(),
+-					outerWidth: child.outerWidth()
+-				};
+-			if (restore) {
+-				$.effects.save(child, props2);
+-			}
+-
+-			child.from = {
+-				height: c_original.height * factor.from.y,
+-				width: c_original.width * factor.from.x,
+-				outerHeight: c_original.outerHeight * factor.from.y,
+-				outerWidth: c_original.outerWidth * factor.from.x
+-			};
+-			child.to = {
+-				height: c_original.height * factor.to.y,
+-				width: c_original.width * factor.to.x,
+-				outerHeight: c_original.height * factor.to.y,
+-				outerWidth: c_original.width * factor.to.x
+-			};
+-
+-			// Vertical props scaling
+-			if ( factor.from.y !== factor.to.y ) {
+-				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+-				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+-			}
+-
+-			// Horizontal props scaling
+-			if ( factor.from.x !== factor.to.x ) {
+-				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+-				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+-			}
+-
+-			// Animate children
+-			child.css( child.from );
+-			child.animate( child.to, o.duration, o.easing, function() {
+-
+-				// Restore children
+-				if ( restore ) {
+-					$.effects.restore( child, props2 );
+-				}
+-			});
+-		});
+-	}
+-
+-	// Animate
+-	el.animate( el.to, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( el.to.opacity === 0 ) {
+-				el.css( "opacity", el.from.opacity );
+-			}
+-			if( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			if ( !restore ) {
+-
+-				// we need to calculate our new positioning based on the scaling
+-				if ( position === "static" ) {
+-					el.css({
+-						position: "relative",
+-						top: el.to.top,
+-						left: el.to.left
+-					});
+-				} else {
+-					$.each([ "top", "left" ], function( idx, pos ) {
+-						el.css( pos, function( _, str ) {
+-							var val = parseInt( str, 10 ),
+-								toRef = idx ? el.to.left : el.to.top;
+-
+-							// if original was "auto", recalculate the new value from wrapper
+-							if ( str === "auto" ) {
+-								return toRef + "px";
+-							}
+-
+-							return val + toRef + "px";
+-						});
+-					});
+-				}
+-			}
+-
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-blind.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-blind.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-blind.js	(revision 15488)
+@@ -1,82 +0,0 @@
+-/*!
+- * jQuery UI Effects Blind 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/blind-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-var rvertical = /up|down|vertical/,
+-	rpositivemotion = /up|left|vertical|horizontal/;
+-
+-$.effects.effect.blind = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		direction = o.direction || "up",
+-		vertical = rvertical.test( direction ),
+-		ref = vertical ? "height" : "width",
+-		ref2 = vertical ? "top" : "left",
+-		motion = rpositivemotion.test( direction ),
+-		animation = {},
+-		show = mode === "show",
+-		wrapper, distance, margin;
+-
+-	// if already wrapped, the wrapper's properties are my property. #6245
+-	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+-		$.effects.save( el.parent(), props );
+-	} else {
+-		$.effects.save( el, props );
+-	}
+-	el.show();
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	distance = wrapper[ ref ]();
+-	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+-
+-	animation[ ref ] = show ? distance : 0;
+-	if ( !motion ) {
+-		el
+-			.css( vertical ? "bottom" : "right", 0 )
+-			.css( vertical ? "top" : "left", "auto" )
+-			.css({ position: "absolute" });
+-
+-		animation[ ref2 ] = show ? margin : distance + margin;
+-	}
+-
+-	// start at 0 if we are showing
+-	if ( show ) {
+-		wrapper.css( ref, 0 );
+-		if ( ! motion ) {
+-			wrapper.css( ref2, margin + distance );
+-		}
+-	}
+-
+-	// Animate
+-	wrapper.animate( animation, {
+-		duration: o.duration,
+-		easing: o.easing,
+-		queue: false,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-shake.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-shake.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-shake.js	(revision 15488)
+@@ -1,74 +0,0 @@
+-/*!
+- * jQuery UI Effects Shake 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/shake-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.shake = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		direction = o.direction || "left",
+-		distance = o.distance || 20,
+-		times = o.times || 3,
+-		anims = times * 2 + 1,
+-		speed = Math.round(o.duration/anims),
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		animation = {},
+-		animation1 = {},
+-		animation2 = {},
+-		i,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	// Animation
+-	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+-	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+-	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+-
+-	// Animate
+-	el.animate( animation, speed, o.easing );
+-
+-	// Shakes
+-	for ( i = 1; i < times; i++ ) {
+-		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+-	}
+-	el
+-		.animate( animation1, speed, o.easing )
+-		.animate( animation, speed / 2, o.easing )
+-		.queue(function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.js	(revision 15488)
+@@ -1,14971 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	runiqueId = /^ui-id-\d+$/;
+-
+-// $.ui might exist from components with no dependencies, e.g., $.ui.position
+-$.ui = $.ui || {};
+-
+-$.extend( $.ui, {
+-	version: "1.10.3",
+-
+-	keyCode: {
+-		BACKSPACE: 8,
+-		COMMA: 188,
+-		DELETE: 46,
+-		DOWN: 40,
+-		END: 35,
+-		ENTER: 13,
+-		ESCAPE: 27,
+-		HOME: 36,
+-		LEFT: 37,
+-		NUMPAD_ADD: 107,
+-		NUMPAD_DECIMAL: 110,
+-		NUMPAD_DIVIDE: 111,
+-		NUMPAD_ENTER: 108,
+-		NUMPAD_MULTIPLY: 106,
+-		NUMPAD_SUBTRACT: 109,
+-		PAGE_DOWN: 34,
+-		PAGE_UP: 33,
+-		PERIOD: 190,
+-		RIGHT: 39,
+-		SPACE: 32,
+-		TAB: 9,
+-		UP: 38
+-	}
+-});
+-
+-// plugins
+-$.fn.extend({
+-	focus: (function( orig ) {
+-		return function( delay, fn ) {
+-			return typeof delay === "number" ?
+-				this.each(function() {
+-					var elem = this;
+-					setTimeout(function() {
+-						$( elem ).focus();
+-						if ( fn ) {
+-							fn.call( elem );
+-						}
+-					}, delay );
+-				}) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.focus ),
+-
+-	scrollParent: function() {
+-		var scrollParent;
+-		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		} else {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		}
+-
+-		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+-	},
+-
+-	zIndex: function( zIndex ) {
+-		if ( zIndex !== undefined ) {
+-			return this.css( "zIndex", zIndex );
+-		}
+-
+-		if ( this.length ) {
+-			var elem = $( this[ 0 ] ), position, value;
+-			while ( elem.length && elem[ 0 ] !== document ) {
+-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+-				// This makes behavior of this function consistent across browsers
+-				// WebKit always returns auto if the element is positioned
+-				position = elem.css( "position" );
+-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+-					// IE returns 0 when zIndex is not specified
+-					// other browsers return a string
+-					// we ignore the case of nested elements with an explicit value of 0
+-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+-					value = parseInt( elem.css( "zIndex" ), 10 );
+-					if ( !isNaN( value ) && value !== 0 ) {
+-						return value;
+-					}
+-				}
+-				elem = elem.parent();
+-			}
+-		}
+-
+-		return 0;
+-	},
+-
+-	uniqueId: function() {
+-		return this.each(function() {
+-			if ( !this.id ) {
+-				this.id = "ui-id-" + (++uuid);
+-			}
+-		});
+-	},
+-
+-	removeUniqueId: function() {
+-		return this.each(function() {
+-			if ( runiqueId.test( this.id ) ) {
+-				$( this ).removeAttr( "id" );
+-			}
+-		});
+-	}
+-});
+-
+-// selectors
+-function focusable( element, isTabIndexNotNaN ) {
+-	var map, mapName, img,
+-		nodeName = element.nodeName.toLowerCase();
+-	if ( "area" === nodeName ) {
+-		map = element.parentNode;
+-		mapName = map.name;
+-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+-			return false;
+-		}
+-		img = $( "img[usemap=#" + mapName + "]" )[0];
+-		return !!img && visible( img );
+-	}
+-	return ( /input|select|textarea|button|object/.test( nodeName ) ?
+-		!element.disabled :
+-		"a" === nodeName ?
+-			element.href || isTabIndexNotNaN :
+-			isTabIndexNotNaN) &&
+-		// the element and all of its ancestors must be visible
+-		visible( element );
+-}
+-
+-function visible( element ) {
+-	return $.expr.filters.visible( element ) &&
+-		!$( element ).parents().addBack().filter(function() {
+-			return $.css( this, "visibility" ) === "hidden";
+-		}).length;
+-}
+-
+-$.extend( $.expr[ ":" ], {
+-	data: $.expr.createPseudo ?
+-		$.expr.createPseudo(function( dataName ) {
+-			return function( elem ) {
+-				return !!$.data( elem, dataName );
+-			};
+-		}) :
+-		// support: jQuery <1.8
+-		function( elem, i, match ) {
+-			return !!$.data( elem, match[ 3 ] );
+-		},
+-
+-	focusable: function( element ) {
+-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+-	},
+-
+-	tabbable: function( element ) {
+-		var tabIndex = $.attr( element, "tabindex" ),
+-			isTabIndexNaN = isNaN( tabIndex );
+-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+-	}
+-});
+-
+-// support: jQuery <1.8
+-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+-	$.each( [ "Width", "Height" ], function( i, name ) {
+-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+-			type = name.toLowerCase(),
+-			orig = {
+-				innerWidth: $.fn.innerWidth,
+-				innerHeight: $.fn.innerHeight,
+-				outerWidth: $.fn.outerWidth,
+-				outerHeight: $.fn.outerHeight
+-			};
+-
+-		function reduce( elem, size, border, margin ) {
+-			$.each( side, function() {
+-				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+-				if ( border ) {
+-					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+-				}
+-				if ( margin ) {
+-					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+-				}
+-			});
+-			return size;
+-		}
+-
+-		$.fn[ "inner" + name ] = function( size ) {
+-			if ( size === undefined ) {
+-				return orig[ "inner" + name ].call( this );
+-			}
+-
+-			return this.each(function() {
+-				$( this ).css( type, reduce( this, size ) + "px" );
+-			});
+-		};
+-
+-		$.fn[ "outer" + name] = function( size, margin ) {
+-			if ( typeof size !== "number" ) {
+-				return orig[ "outer" + name ].call( this, size );
+-			}
+-
+-			return this.each(function() {
+-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+-			});
+-		};
+-	});
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+-	$.fn.removeData = (function( removeData ) {
+-		return function( key ) {
+-			if ( arguments.length ) {
+-				return removeData.call( this, $.camelCase( key ) );
+-			} else {
+-				return removeData.call( this );
+-			}
+-		};
+-	})( $.fn.removeData );
+-}
+-
+-
+-
+-
+-
+-// deprecated
+-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+-
+-$.support.selectstart = "onselectstart" in document.createElement( "div" );
+-$.fn.extend({
+-	disableSelection: function() {
+-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+-			".ui-disableSelection", function( event ) {
+-				event.preventDefault();
+-			});
+-	},
+-
+-	enableSelection: function() {
+-		return this.unbind( ".ui-disableSelection" );
+-	}
+-});
+-
+-$.extend( $.ui, {
+-	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+-	plugin: {
+-		add: function( module, option, set ) {
+-			var i,
+-				proto = $.ui[ module ].prototype;
+-			for ( i in set ) {
+-				proto.plugins[ i ] = proto.plugins[ i ] || [];
+-				proto.plugins[ i ].push( [ option, set[ i ] ] );
+-			}
+-		},
+-		call: function( instance, name, args ) {
+-			var i,
+-				set = instance.plugins[ name ];
+-			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
+-				return;
+-			}
+-
+-			for ( i = 0; i < set.length; i++ ) {
+-				if ( instance.options[ set[ i ][ 0 ] ] ) {
+-					set[ i ][ 1 ].apply( instance.element, args );
+-				}
+-			}
+-		}
+-	},
+-
+-	// only used by resizable
+-	hasScroll: function( el, a ) {
+-
+-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+-		if ( $( el ).css( "overflow" ) === "hidden") {
+-			return false;
+-		}
+-
+-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+-			has = false;
+-
+-		if ( el[ scroll ] > 0 ) {
+-			return true;
+-		}
+-
+-		// TODO: determine which cases actually cause this to happen
+-		// if the element doesn't have the scroll set, see if it's possible to
+-		// set the scroll
+-		el[ scroll ] = 1;
+-		has = ( el[ scroll ] > 0 );
+-		el[ scroll ] = 0;
+-		return has;
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	slice = Array.prototype.slice,
+-	_cleanData = $.cleanData;
+-$.cleanData = function( elems ) {
+-	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-		try {
+-			$( elem ).triggerHandler( "remove" );
+-		// http://bugs.jquery.com/ticket/8235
+-		} catch( e ) {}
+-	}
+-	_cleanData( elems );
+-};
+-
+-$.widget = function( name, base, prototype ) {
+-	var fullName, existingConstructor, constructor, basePrototype,
+-		// proxiedPrototype allows the provided prototype to remain unmodified
+-		// so that it can be used as a mixin for multiple widgets (#8876)
+-		proxiedPrototype = {},
+-		namespace = name.split( "." )[ 0 ];
+-
+-	name = name.split( "." )[ 1 ];
+-	fullName = namespace + "-" + name;
+-
+-	if ( !prototype ) {
+-		prototype = base;
+-		base = $.Widget;
+-	}
+-
+-	// create selector for plugin
+-	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+-		return !!$.data( elem, fullName );
+-	};
+-
+-	$[ namespace ] = $[ namespace ] || {};
+-	existingConstructor = $[ namespace ][ name ];
+-	constructor = $[ namespace ][ name ] = function( options, element ) {
+-		// allow instantiation without "new" keyword
+-		if ( !this._createWidget ) {
+-			return new constructor( options, element );
+-		}
+-
+-		// allow instantiation without initializing for simple inheritance
+-		// must use "new" keyword (the code above always passes args)
+-		if ( arguments.length ) {
+-			this._createWidget( options, element );
+-		}
+-	};
+-	// extend with the existing constructor to carry over any static properties
+-	$.extend( constructor, existingConstructor, {
+-		version: prototype.version,
+-		// copy the object used to create the prototype in case we need to
+-		// redefine the widget later
+-		_proto: $.extend( {}, prototype ),
+-		// track widgets that inherit from this widget in case this widget is
+-		// redefined after a widget inherits from it
+-		_childConstructors: []
+-	});
+-
+-	basePrototype = new base();
+-	// we need to make the options hash a property directly on the new instance
+-	// otherwise we'll modify the options hash on the prototype that we're
+-	// inheriting from
+-	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+-	$.each( prototype, function( prop, value ) {
+-		if ( !$.isFunction( value ) ) {
+-			proxiedPrototype[ prop ] = value;
+-			return;
+-		}
+-		proxiedPrototype[ prop ] = (function() {
+-			var _super = function() {
+-					return base.prototype[ prop ].apply( this, arguments );
+-				},
+-				_superApply = function( args ) {
+-					return base.prototype[ prop ].apply( this, args );
+-				};
+-			return function() {
+-				var __super = this._super,
+-					__superApply = this._superApply,
+-					returnValue;
+-
+-				this._super = _super;
+-				this._superApply = _superApply;
+-
+-				returnValue = value.apply( this, arguments );
+-
+-				this._super = __super;
+-				this._superApply = __superApply;
+-
+-				return returnValue;
+-			};
+-		})();
+-	});
+-	constructor.prototype = $.widget.extend( basePrototype, {
+-		// TODO: remove support for widgetEventPrefix
+-		// always use the name + a colon as the prefix, e.g., draggable:start
+-		// don't prefix for widgets that aren't DOM-based
+-		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+-	}, proxiedPrototype, {
+-		constructor: constructor,
+-		namespace: namespace,
+-		widgetName: name,
+-		widgetFullName: fullName
+-	});
+-
+-	// If this widget is being redefined then we need to find all widgets that
+-	// are inheriting from it and redefine all of them so that they inherit from
+-	// the new version of this widget. We're essentially trying to replace one
+-	// level in the prototype chain.
+-	if ( existingConstructor ) {
+-		$.each( existingConstructor._childConstructors, function( i, child ) {
+-			var childPrototype = child.prototype;
+-
+-			// redefine the child widget using the same prototype that was
+-			// originally used, but inherit from the new version of the base
+-			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+-		});
+-		// remove the list of existing child constructors from the old constructor
+-		// so the old child constructors can be garbage collected
+-		delete existingConstructor._childConstructors;
+-	} else {
+-		base._childConstructors.push( constructor );
+-	}
+-
+-	$.widget.bridge( name, constructor );
+-};
+-
+-$.widget.extend = function( target ) {
+-	var input = slice.call( arguments, 1 ),
+-		inputIndex = 0,
+-		inputLength = input.length,
+-		key,
+-		value;
+-	for ( ; inputIndex < inputLength; inputIndex++ ) {
+-		for ( key in input[ inputIndex ] ) {
+-			value = input[ inputIndex ][ key ];
+-			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+-				// Clone objects
+-				if ( $.isPlainObject( value ) ) {
+-					target[ key ] = $.isPlainObject( target[ key ] ) ?
+-						$.widget.extend( {}, target[ key ], value ) :
+-						// Don't extend strings, arrays, etc. with objects
+-						$.widget.extend( {}, value );
+-				// Copy everything else by reference
+-				} else {
+-					target[ key ] = value;
+-				}
+-			}
+-		}
+-	}
+-	return target;
+-};
+-
+-$.widget.bridge = function( name, object ) {
+-	var fullName = object.prototype.widgetFullName || name;
+-	$.fn[ name ] = function( options ) {
+-		var isMethodCall = typeof options === "string",
+-			args = slice.call( arguments, 1 ),
+-			returnValue = this;
+-
+-		// allow multiple hashes to be passed on init
+-		options = !isMethodCall && args.length ?
+-			$.widget.extend.apply( null, [ options ].concat(args) ) :
+-			options;
+-
+-		if ( isMethodCall ) {
+-			this.each(function() {
+-				var methodValue,
+-					instance = $.data( this, fullName );
+-				if ( !instance ) {
+-					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+-						"attempted to call method '" + options + "'" );
+-				}
+-				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+-					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+-				}
+-				methodValue = instance[ options ].apply( instance, args );
+-				if ( methodValue !== instance && methodValue !== undefined ) {
+-					returnValue = methodValue && methodValue.jquery ?
+-						returnValue.pushStack( methodValue.get() ) :
+-						methodValue;
+-					return false;
+-				}
+-			});
+-		} else {
+-			this.each(function() {
+-				var instance = $.data( this, fullName );
+-				if ( instance ) {
+-					instance.option( options || {} )._init();
+-				} else {
+-					$.data( this, fullName, new object( options, this ) );
+-				}
+-			});
+-		}
+-
+-		return returnValue;
+-	};
+-};
+-
+-$.Widget = function( /* options, element */ ) {};
+-$.Widget._childConstructors = [];
+-
+-$.Widget.prototype = {
+-	widgetName: "widget",
+-	widgetEventPrefix: "",
+-	defaultElement: "<div>",
+-	options: {
+-		disabled: false,
+-
+-		// callbacks
+-		create: null
+-	},
+-	_createWidget: function( options, element ) {
+-		element = $( element || this.defaultElement || this )[ 0 ];
+-		this.element = $( element );
+-		this.uuid = uuid++;
+-		this.eventNamespace = "." + this.widgetName + this.uuid;
+-		this.options = $.widget.extend( {},
+-			this.options,
+-			this._getCreateOptions(),
+-			options );
+-
+-		this.bindings = $();
+-		this.hoverable = $();
+-		this.focusable = $();
+-
+-		if ( element !== this ) {
+-			$.data( element, this.widgetFullName, this );
+-			this._on( true, this.element, {
+-				remove: function( event ) {
+-					if ( event.target === element ) {
+-						this.destroy();
+-					}
+-				}
+-			});
+-			this.document = $( element.style ?
+-				// element within the document
+-				element.ownerDocument :
+-				// element is window or document
+-				element.document || element );
+-			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+-		}
+-
+-		this._create();
+-		this._trigger( "create", null, this._getCreateEventData() );
+-		this._init();
+-	},
+-	_getCreateOptions: $.noop,
+-	_getCreateEventData: $.noop,
+-	_create: $.noop,
+-	_init: $.noop,
+-
+-	destroy: function() {
+-		this._destroy();
+-		// we can probably remove the unbind calls in 2.0
+-		// all event bindings should go through this._on()
+-		this.element
+-			.unbind( this.eventNamespace )
+-			// 1.9 BC for #7810
+-			// TODO remove dual storage
+-			.removeData( this.widgetName )
+-			.removeData( this.widgetFullName )
+-			// support: jquery <1.6.3
+-			// http://bugs.jquery.com/ticket/9413
+-			.removeData( $.camelCase( this.widgetFullName ) );
+-		this.widget()
+-			.unbind( this.eventNamespace )
+-			.removeAttr( "aria-disabled" )
+-			.removeClass(
+-				this.widgetFullName + "-disabled " +
+-				"ui-state-disabled" );
+-
+-		// clean up events and states
+-		this.bindings.unbind( this.eventNamespace );
+-		this.hoverable.removeClass( "ui-state-hover" );
+-		this.focusable.removeClass( "ui-state-focus" );
+-	},
+-	_destroy: $.noop,
+-
+-	widget: function() {
+-		return this.element;
+-	},
+-
+-	option: function( key, value ) {
+-		var options = key,
+-			parts,
+-			curOption,
+-			i;
+-
+-		if ( arguments.length === 0 ) {
+-			// don't return a reference to the internal hash
+-			return $.widget.extend( {}, this.options );
+-		}
+-
+-		if ( typeof key === "string" ) {
+-			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+-			options = {};
+-			parts = key.split( "." );
+-			key = parts.shift();
+-			if ( parts.length ) {
+-				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+-				for ( i = 0; i < parts.length - 1; i++ ) {
+-					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+-					curOption = curOption[ parts[ i ] ];
+-				}
+-				key = parts.pop();
+-				if ( value === undefined ) {
+-					return curOption[ key ] === undefined ? null : curOption[ key ];
+-				}
+-				curOption[ key ] = value;
+-			} else {
+-				if ( value === undefined ) {
+-					return this.options[ key ] === undefined ? null : this.options[ key ];
+-				}
+-				options[ key ] = value;
+-			}
+-		}
+-
+-		this._setOptions( options );
+-
+-		return this;
+-	},
+-	_setOptions: function( options ) {
+-		var key;
+-
+-		for ( key in options ) {
+-			this._setOption( key, options[ key ] );
+-		}
+-
+-		return this;
+-	},
+-	_setOption: function( key, value ) {
+-		this.options[ key ] = value;
+-
+-		if ( key === "disabled" ) {
+-			this.widget()
+-				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+-				.attr( "aria-disabled", value );
+-			this.hoverable.removeClass( "ui-state-hover" );
+-			this.focusable.removeClass( "ui-state-focus" );
+-		}
+-
+-		return this;
+-	},
+-
+-	enable: function() {
+-		return this._setOption( "disabled", false );
+-	},
+-	disable: function() {
+-		return this._setOption( "disabled", true );
+-	},
+-
+-	_on: function( suppressDisabledCheck, element, handlers ) {
+-		var delegateElement,
+-			instance = this;
+-
+-		// no suppressDisabledCheck flag, shuffle arguments
+-		if ( typeof suppressDisabledCheck !== "boolean" ) {
+-			handlers = element;
+-			element = suppressDisabledCheck;
+-			suppressDisabledCheck = false;
+-		}
+-
+-		// no element argument, shuffle and use this.element
+-		if ( !handlers ) {
+-			handlers = element;
+-			element = this.element;
+-			delegateElement = this.widget();
+-		} else {
+-			// accept selectors, DOM elements
+-			element = delegateElement = $( element );
+-			this.bindings = this.bindings.add( element );
+-		}
+-
+-		$.each( handlers, function( event, handler ) {
+-			function handlerProxy() {
+-				// allow widgets to customize the disabled handling
+-				// - disabled as an array instead of boolean
+-				// - disabled class as method for disabling individual parts
+-				if ( !suppressDisabledCheck &&
+-						( instance.options.disabled === true ||
+-							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+-					return;
+-				}
+-				return ( typeof handler === "string" ? instance[ handler ] : handler )
+-					.apply( instance, arguments );
+-			}
+-
+-			// copy the guid so direct unbinding works
+-			if ( typeof handler !== "string" ) {
+-				handlerProxy.guid = handler.guid =
+-					handler.guid || handlerProxy.guid || $.guid++;
+-			}
+-
+-			var match = event.match( /^(\w+)\s*(.*)$/ ),
+-				eventName = match[1] + instance.eventNamespace,
+-				selector = match[2];
+-			if ( selector ) {
+-				delegateElement.delegate( selector, eventName, handlerProxy );
+-			} else {
+-				element.bind( eventName, handlerProxy );
+-			}
+-		});
+-	},
+-
+-	_off: function( element, eventName ) {
+-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+-		element.unbind( eventName ).undelegate( eventName );
+-	},
+-
+-	_delay: function( handler, delay ) {
+-		function handlerProxy() {
+-			return ( typeof handler === "string" ? instance[ handler ] : handler )
+-				.apply( instance, arguments );
+-		}
+-		var instance = this;
+-		return setTimeout( handlerProxy, delay || 0 );
+-	},
+-
+-	_hoverable: function( element ) {
+-		this.hoverable = this.hoverable.add( element );
+-		this._on( element, {
+-			mouseenter: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-hover" );
+-			},
+-			mouseleave: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-hover" );
+-			}
+-		});
+-	},
+-
+-	_focusable: function( element ) {
+-		this.focusable = this.focusable.add( element );
+-		this._on( element, {
+-			focusin: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-focus" );
+-			},
+-			focusout: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-focus" );
+-			}
+-		});
+-	},
+-
+-	_trigger: function( type, event, data ) {
+-		var prop, orig,
+-			callback = this.options[ type ];
+-
+-		data = data || {};
+-		event = $.Event( event );
+-		event.type = ( type === this.widgetEventPrefix ?
+-			type :
+-			this.widgetEventPrefix + type ).toLowerCase();
+-		// the original event may come from any element
+-		// so we need to reset the target on the new event
+-		event.target = this.element[ 0 ];
+-
+-		// copy original event properties over to the new event
+-		orig = event.originalEvent;
+-		if ( orig ) {
+-			for ( prop in orig ) {
+-				if ( !( prop in event ) ) {
+-					event[ prop ] = orig[ prop ];
+-				}
+-			}
+-		}
+-
+-		this.element.trigger( event, data );
+-		return !( $.isFunction( callback ) &&
+-			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+-			event.isDefaultPrevented() );
+-	}
+-};
+-
+-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+-	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+-		if ( typeof options === "string" ) {
+-			options = { effect: options };
+-		}
+-		var hasOptions,
+-			effectName = !options ?
+-				method :
+-				options === true || typeof options === "number" ?
+-					defaultEffect :
+-					options.effect || defaultEffect;
+-		options = options || {};
+-		if ( typeof options === "number" ) {
+-			options = { duration: options };
+-		}
+-		hasOptions = !$.isEmptyObject( options );
+-		options.complete = callback;
+-		if ( options.delay ) {
+-			element.delay( options.delay );
+-		}
+-		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+-			element[ method ]( options );
+-		} else if ( effectName !== method && element[ effectName ] ) {
+-			element[ effectName ]( options.duration, options.easing, callback );
+-		} else {
+-			element.queue(function( next ) {
+-				$( this )[ method ]();
+-				if ( callback ) {
+-					callback.call( element[ 0 ] );
+-				}
+-				next();
+-			});
+-		}
+-	};
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-var mouseHandled = false;
+-$( document ).mouseup( function() {
+-	mouseHandled = false;
+-});
+-
+-$.widget("ui.mouse", {
+-	version: "1.10.3",
+-	options: {
+-		cancel: "input,textarea,button,select,option",
+-		distance: 1,
+-		delay: 0
+-	},
+-	_mouseInit: function() {
+-		var that = this;
+-
+-		this.element
+-			.bind("mousedown."+this.widgetName, function(event) {
+-				return that._mouseDown(event);
+-			})
+-			.bind("click."+this.widgetName, function(event) {
+-				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+-					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+-					event.stopImmediatePropagation();
+-					return false;
+-				}
+-			});
+-
+-		this.started = false;
+-	},
+-
+-	// TODO: make sure destroying one instance of mouse doesn't mess with
+-	// other instances of mouse
+-	_mouseDestroy: function() {
+-		this.element.unbind("."+this.widgetName);
+-		if ( this._mouseMoveDelegate ) {
+-			$(document)
+-				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-		}
+-	},
+-
+-	_mouseDown: function(event) {
+-		// don't let more than one widget handle mouseStart
+-		if( mouseHandled ) { return; }
+-
+-		// we may have missed mouseup (out of window)
+-		(this._mouseStarted && this._mouseUp(event));
+-
+-		this._mouseDownEvent = event;
+-
+-		var that = this,
+-			btnIsLeft = (event.which === 1),
+-			// event.target.nodeName works around a bug in IE 8 with
+-			// disabled inputs (#7620)
+-			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+-			return true;
+-		}
+-
+-		this.mouseDelayMet = !this.options.delay;
+-		if (!this.mouseDelayMet) {
+-			this._mouseDelayTimer = setTimeout(function() {
+-				that.mouseDelayMet = true;
+-			}, this.options.delay);
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted = (this._mouseStart(event) !== false);
+-			if (!this._mouseStarted) {
+-				event.preventDefault();
+-				return true;
+-			}
+-		}
+-
+-		// Click event may never have fired (Gecko & Opera)
+-		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+-			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+-		}
+-
+-		// these delegates are required to keep context
+-		this._mouseMoveDelegate = function(event) {
+-			return that._mouseMove(event);
+-		};
+-		this._mouseUpDelegate = function(event) {
+-			return that._mouseUp(event);
+-		};
+-		$(document)
+-			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		event.preventDefault();
+-
+-		mouseHandled = true;
+-		return true;
+-	},
+-
+-	_mouseMove: function(event) {
+-		// IE mouseup check - mouseup happened when mouse was out of window
+-		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+-			return this._mouseUp(event);
+-		}
+-
+-		if (this._mouseStarted) {
+-			this._mouseDrag(event);
+-			return event.preventDefault();
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted =
+-				(this._mouseStart(this._mouseDownEvent, event) !== false);
+-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+-		}
+-
+-		return !this._mouseStarted;
+-	},
+-
+-	_mouseUp: function(event) {
+-		$(document)
+-			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		if (this._mouseStarted) {
+-			this._mouseStarted = false;
+-
+-			if (event.target === this._mouseDownEvent.target) {
+-				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+-			}
+-
+-			this._mouseStop(event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseDistanceMet: function(event) {
+-		return (Math.max(
+-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+-			) >= this.options.distance
+-		);
+-	},
+-
+-	_mouseDelayMet: function(/* event */) {
+-		return this.mouseDelayMet;
+-	},
+-
+-	// These are placeholder methods, to be overriden by extending plugin
+-	_mouseStart: function(/* event */) {},
+-	_mouseDrag: function(/* event */) {},
+-	_mouseStop: function(/* event */) {},
+-	_mouseCapture: function(/* event */) { return true; }
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.ui = $.ui || {};
+-
+-var cachedScrollbarWidth,
+-	max = Math.max,
+-	abs = Math.abs,
+-	round = Math.round,
+-	rhorizontal = /left|center|right/,
+-	rvertical = /top|center|bottom/,
+-	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+-	rposition = /^\w+/,
+-	rpercent = /%$/,
+-	_position = $.fn.position;
+-
+-function getOffsets( offsets, width, height ) {
+-	return [
+-		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+-		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+-	];
+-}
+-
+-function parseCss( element, property ) {
+-	return parseInt( $.css( element, property ), 10 ) || 0;
+-}
+-
+-function getDimensions( elem ) {
+-	var raw = elem[0];
+-	if ( raw.nodeType === 9 ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: 0, left: 0 }
+-		};
+-	}
+-	if ( $.isWindow( raw ) ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+-		};
+-	}
+-	if ( raw.preventDefault ) {
+-		return {
+-			width: 0,
+-			height: 0,
+-			offset: { top: raw.pageY, left: raw.pageX }
+-		};
+-	}
+-	return {
+-		width: elem.outerWidth(),
+-		height: elem.outerHeight(),
+-		offset: elem.offset()
+-	};
+-}
+-
+-$.position = {
+-	scrollbarWidth: function() {
+-		if ( cachedScrollbarWidth !== undefined ) {
+-			return cachedScrollbarWidth;
+-		}
+-		var w1, w2,
+-			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+-			innerDiv = div.children()[0];
+-
+-		$( "body" ).append( div );
+-		w1 = innerDiv.offsetWidth;
+-		div.css( "overflow", "scroll" );
+-
+-		w2 = innerDiv.offsetWidth;
+-
+-		if ( w1 === w2 ) {
+-			w2 = div[0].clientWidth;
+-		}
+-
+-		div.remove();
+-
+-		return (cachedScrollbarWidth = w1 - w2);
+-	},
+-	getScrollInfo: function( within ) {
+-		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
+-			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+-			hasOverflowX = overflowX === "scroll" ||
+-				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+-			hasOverflowY = overflowY === "scroll" ||
+-				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+-		return {
+-			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+-			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+-		};
+-	},
+-	getWithinInfo: function( element ) {
+-		var withinElement = $( element || window ),
+-			isWindow = $.isWindow( withinElement[0] );
+-		return {
+-			element: withinElement,
+-			isWindow: isWindow,
+-			offset: withinElement.offset() || { left: 0, top: 0 },
+-			scrollLeft: withinElement.scrollLeft(),
+-			scrollTop: withinElement.scrollTop(),
+-			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+-			height: isWindow ? withinElement.height() : withinElement.outerHeight()
+-		};
+-	}
+-};
+-
+-$.fn.position = function( options ) {
+-	if ( !options || !options.of ) {
+-		return _position.apply( this, arguments );
+-	}
+-
+-	// make a copy, we don't want to modify arguments
+-	options = $.extend( {}, options );
+-
+-	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+-		target = $( options.of ),
+-		within = $.position.getWithinInfo( options.within ),
+-		scrollInfo = $.position.getScrollInfo( within ),
+-		collision = ( options.collision || "flip" ).split( " " ),
+-		offsets = {};
+-
+-	dimensions = getDimensions( target );
+-	if ( target[0].preventDefault ) {
+-		// force left top to allow flipping
+-		options.at = "left top";
+-	}
+-	targetWidth = dimensions.width;
+-	targetHeight = dimensions.height;
+-	targetOffset = dimensions.offset;
+-	// clone to reuse original targetOffset later
+-	basePosition = $.extend( {}, targetOffset );
+-
+-	// force my and at to have valid horizontal and vertical positions
+-	// if a value is missing or invalid, it will be converted to center
+-	$.each( [ "my", "at" ], function() {
+-		var pos = ( options[ this ] || "" ).split( " " ),
+-			horizontalOffset,
+-			verticalOffset;
+-
+-		if ( pos.length === 1) {
+-			pos = rhorizontal.test( pos[ 0 ] ) ?
+-				pos.concat( [ "center" ] ) :
+-				rvertical.test( pos[ 0 ] ) ?
+-					[ "center" ].concat( pos ) :
+-					[ "center", "center" ];
+-		}
+-		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+-		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+-
+-		// calculate offsets
+-		horizontalOffset = roffset.exec( pos[ 0 ] );
+-		verticalOffset = roffset.exec( pos[ 1 ] );
+-		offsets[ this ] = [
+-			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+-			verticalOffset ? verticalOffset[ 0 ] : 0
+-		];
+-
+-		// reduce to just the positions without the offsets
+-		options[ this ] = [
+-			rposition.exec( pos[ 0 ] )[ 0 ],
+-			rposition.exec( pos[ 1 ] )[ 0 ]
+-		];
+-	});
+-
+-	// normalize collision option
+-	if ( collision.length === 1 ) {
+-		collision[ 1 ] = collision[ 0 ];
+-	}
+-
+-	if ( options.at[ 0 ] === "right" ) {
+-		basePosition.left += targetWidth;
+-	} else if ( options.at[ 0 ] === "center" ) {
+-		basePosition.left += targetWidth / 2;
+-	}
+-
+-	if ( options.at[ 1 ] === "bottom" ) {
+-		basePosition.top += targetHeight;
+-	} else if ( options.at[ 1 ] === "center" ) {
+-		basePosition.top += targetHeight / 2;
+-	}
+-
+-	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+-	basePosition.left += atOffset[ 0 ];
+-	basePosition.top += atOffset[ 1 ];
+-
+-	return this.each(function() {
+-		var collisionPosition, using,
+-			elem = $( this ),
+-			elemWidth = elem.outerWidth(),
+-			elemHeight = elem.outerHeight(),
+-			marginLeft = parseCss( this, "marginLeft" ),
+-			marginTop = parseCss( this, "marginTop" ),
+-			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+-			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+-			position = $.extend( {}, basePosition ),
+-			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+-
+-		if ( options.my[ 0 ] === "right" ) {
+-			position.left -= elemWidth;
+-		} else if ( options.my[ 0 ] === "center" ) {
+-			position.left -= elemWidth / 2;
+-		}
+-
+-		if ( options.my[ 1 ] === "bottom" ) {
+-			position.top -= elemHeight;
+-		} else if ( options.my[ 1 ] === "center" ) {
+-			position.top -= elemHeight / 2;
+-		}
+-
+-		position.left += myOffset[ 0 ];
+-		position.top += myOffset[ 1 ];
+-
+-		// if the browser doesn't support fractions, then round for consistent results
+-		if ( !$.support.offsetFractions ) {
+-			position.left = round( position.left );
+-			position.top = round( position.top );
+-		}
+-
+-		collisionPosition = {
+-			marginLeft: marginLeft,
+-			marginTop: marginTop
+-		};
+-
+-		$.each( [ "left", "top" ], function( i, dir ) {
+-			if ( $.ui.position[ collision[ i ] ] ) {
+-				$.ui.position[ collision[ i ] ][ dir ]( position, {
+-					targetWidth: targetWidth,
+-					targetHeight: targetHeight,
+-					elemWidth: elemWidth,
+-					elemHeight: elemHeight,
+-					collisionPosition: collisionPosition,
+-					collisionWidth: collisionWidth,
+-					collisionHeight: collisionHeight,
+-					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+-					my: options.my,
+-					at: options.at,
+-					within: within,
+-					elem : elem
+-				});
+-			}
+-		});
+-
+-		if ( options.using ) {
+-			// adds feedback as second argument to using callback, if present
+-			using = function( props ) {
+-				var left = targetOffset.left - position.left,
+-					right = left + targetWidth - elemWidth,
+-					top = targetOffset.top - position.top,
+-					bottom = top + targetHeight - elemHeight,
+-					feedback = {
+-						target: {
+-							element: target,
+-							left: targetOffset.left,
+-							top: targetOffset.top,
+-							width: targetWidth,
+-							height: targetHeight
+-						},
+-						element: {
+-							element: elem,
+-							left: position.left,
+-							top: position.top,
+-							width: elemWidth,
+-							height: elemHeight
+-						},
+-						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+-						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+-					};
+-				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+-					feedback.horizontal = "center";
+-				}
+-				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+-					feedback.vertical = "middle";
+-				}
+-				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+-					feedback.important = "horizontal";
+-				} else {
+-					feedback.important = "vertical";
+-				}
+-				options.using.call( this, props, feedback );
+-			};
+-		}
+-
+-		elem.offset( $.extend( position, { using: using } ) );
+-	});
+-};
+-
+-$.ui.position = {
+-	fit: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+-				outerWidth = within.width,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = withinOffset - collisionPosLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+-				newOverRight;
+-
+-			// element is wider than within
+-			if ( data.collisionWidth > outerWidth ) {
+-				// element is initially over the left side of within
+-				if ( overLeft > 0 && overRight <= 0 ) {
+-					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+-					position.left += overLeft - newOverRight;
+-				// element is initially over right side of within
+-				} else if ( overRight > 0 && overLeft <= 0 ) {
+-					position.left = withinOffset;
+-				// element is initially over both left and right sides of within
+-				} else {
+-					if ( overLeft > overRight ) {
+-						position.left = withinOffset + outerWidth - data.collisionWidth;
+-					} else {
+-						position.left = withinOffset;
+-					}
+-				}
+-			// too far left -> align with left edge
+-			} else if ( overLeft > 0 ) {
+-				position.left += overLeft;
+-			// too far right -> align with right edge
+-			} else if ( overRight > 0 ) {
+-				position.left -= overRight;
+-			// adjust based on position and margin
+-			} else {
+-				position.left = max( position.left - collisionPosLeft, position.left );
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+-				outerHeight = data.within.height,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = withinOffset - collisionPosTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+-				newOverBottom;
+-
+-			// element is taller than within
+-			if ( data.collisionHeight > outerHeight ) {
+-				// element is initially over the top of within
+-				if ( overTop > 0 && overBottom <= 0 ) {
+-					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+-					position.top += overTop - newOverBottom;
+-				// element is initially over bottom of within
+-				} else if ( overBottom > 0 && overTop <= 0 ) {
+-					position.top = withinOffset;
+-				// element is initially over both top and bottom of within
+-				} else {
+-					if ( overTop > overBottom ) {
+-						position.top = withinOffset + outerHeight - data.collisionHeight;
+-					} else {
+-						position.top = withinOffset;
+-					}
+-				}
+-			// too far up -> align with top
+-			} else if ( overTop > 0 ) {
+-				position.top += overTop;
+-			// too far down -> align with bottom edge
+-			} else if ( overBottom > 0 ) {
+-				position.top -= overBottom;
+-			// adjust based on position and margin
+-			} else {
+-				position.top = max( position.top - collisionPosTop, position.top );
+-			}
+-		}
+-	},
+-	flip: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.left + within.scrollLeft,
+-				outerWidth = within.width,
+-				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = collisionPosLeft - offsetLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+-				myOffset = data.my[ 0 ] === "left" ?
+-					-data.elemWidth :
+-					data.my[ 0 ] === "right" ?
+-						data.elemWidth :
+-						0,
+-				atOffset = data.at[ 0 ] === "left" ?
+-					data.targetWidth :
+-					data.at[ 0 ] === "right" ?
+-						-data.targetWidth :
+-						0,
+-				offset = -2 * data.offset[ 0 ],
+-				newOverRight,
+-				newOverLeft;
+-
+-			if ( overLeft < 0 ) {
+-				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+-				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overRight > 0 ) {
+-				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+-				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.top + within.scrollTop,
+-				outerHeight = within.height,
+-				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = collisionPosTop - offsetTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+-				top = data.my[ 1 ] === "top",
+-				myOffset = top ?
+-					-data.elemHeight :
+-					data.my[ 1 ] === "bottom" ?
+-						data.elemHeight :
+-						0,
+-				atOffset = data.at[ 1 ] === "top" ?
+-					data.targetHeight :
+-					data.at[ 1 ] === "bottom" ?
+-						-data.targetHeight :
+-						0,
+-				offset = -2 * data.offset[ 1 ],
+-				newOverTop,
+-				newOverBottom;
+-			if ( overTop < 0 ) {
+-				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+-				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overBottom > 0 ) {
+-				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+-				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-		}
+-	},
+-	flipfit: {
+-		left: function() {
+-			$.ui.position.flip.left.apply( this, arguments );
+-			$.ui.position.fit.left.apply( this, arguments );
+-		},
+-		top: function() {
+-			$.ui.position.flip.top.apply( this, arguments );
+-			$.ui.position.fit.top.apply( this, arguments );
+-		}
+-	}
+-};
+-
+-// fraction support test
+-(function () {
+-	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+-		body = document.getElementsByTagName( "body" )[ 0 ],
+-		div = document.createElement( "div" );
+-
+-	//Create a "fake body" for testing based on method used in jQuery.support
+-	testElement = document.createElement( body ? "div" : "body" );
+-	testElementStyle = {
+-		visibility: "hidden",
+-		width: 0,
+-		height: 0,
+-		border: 0,
+-		margin: 0,
+-		background: "none"
+-	};
+-	if ( body ) {
+-		$.extend( testElementStyle, {
+-			position: "absolute",
+-			left: "-1000px",
+-			top: "-1000px"
+-		});
+-	}
+-	for ( i in testElementStyle ) {
+-		testElement.style[ i ] = testElementStyle[ i ];
+-	}
+-	testElement.appendChild( div );
+-	testElementParent = body || document.documentElement;
+-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+-
+-	div.style.cssText = "position: absolute; left: 10.7432222px;";
+-
+-	offsetLeft = $( div ).offset().left;
+-	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+-
+-	testElement.innerHTML = "";
+-	testElementParent.removeChild( testElement );
+-})();
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.widget("ui.draggable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drag",
+-	options: {
+-		addClasses: true,
+-		appendTo: "parent",
+-		axis: false,
+-		connectToSortable: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		iframeFix: false,
+-		opacity: false,
+-		refreshPositions: false,
+-		revert: false,
+-		revertDuration: 500,
+-		scope: "default",
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		snap: false,
+-		snapMode: "both",
+-		snapTolerance: 20,
+-		stack: false,
+-		zIndex: false,
+-
+-		// callbacks
+-		drag: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
+-			this.element[0].style.position = "relative";
+-		}
+-		if (this.options.addClasses){
+-			this.element.addClass("ui-draggable");
+-		}
+-		if (this.options.disabled){
+-			this.element.addClass("ui-draggable-disabled");
+-		}
+-
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function(event) {
+-
+-		var o = this.options;
+-
+-		// among others, prevent a drag on a resizable-handle
+-		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+-			return false;
+-		}
+-
+-		//Quit if we're not on a valid handle
+-		this.handle = this._getHandle(event);
+-		if (!this.handle) {
+-			return false;
+-		}
+-
+-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+-			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
+-			.css({
+-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+-				position: "absolute", opacity: "0.001", zIndex: 1000
+-			})
+-			.css($(this).offset())
+-			.appendTo("body");
+-		});
+-
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options;
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		this.helper.addClass("ui-draggable-dragging");
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		//If ddmanager is used for droppables, set the global draggable
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Store the helper's css position
+-		this.cssPosition = this.helper.css( "position" );
+-		this.scrollParent = this.helper.scrollParent();
+-		this.offsetParent = this.helper.offsetParent();
+-		this.offsetParentCssPosition = this.offsetParent.css( "position" );
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.positionAbs = this.element.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		//Reset scroll cache
+-		this.offset.scroll = false;
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this.position = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Set a containment if given in the options
+-		this._setContainment();
+-
+-		//Trigger event + callbacks
+-		if(this._trigger("start", event) === false) {
+-			this._clear();
+-			return false;
+-		}
+-
+-		//Recache the helper size
+-		this._cacheHelperProportions();
+-
+-		//Prepare the droppable offsets
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-
+-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+-		if ( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStart(this, event);
+-		}
+-
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event, noPropagation) {
+-		// reset any necessary cached properties (see #5009)
+-		if ( this.offsetParentCssPosition === "fixed" ) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Call plugins and callbacks and use the resulting position if something is returned
+-		if (!noPropagation) {
+-			var ui = this._uiHash();
+-			if(this._trigger("drag", event, ui) === false) {
+-				this._mouseUp({});
+-				return false;
+-			}
+-			this.position = ui.position;
+-		}
+-
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		//If we are using droppables, inform the manager about the drop
+-		var that = this,
+-			dropped = false;
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			dropped = $.ui.ddmanager.drop(this, event);
+-		}
+-
+-		//if a drop comes from outside (a sortable)
+-		if(this.dropped) {
+-			dropped = this.dropped;
+-			this.dropped = false;
+-		}
+-
+-		//if the original element is no longer in the DOM don't bother to continue (see #8269)
+-		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
+-			return false;
+-		}
+-
+-		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+-				if(that._trigger("stop", event) !== false) {
+-					that._clear();
+-				}
+-			});
+-		} else {
+-			if(this._trigger("stop", event) !== false) {
+-				this._clear();
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseUp: function(event) {
+-		//Remove frame helpers
+-		$("div.ui-draggable-iframeFix").each(function() {
+-			this.parentNode.removeChild(this);
+-		});
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+-		if( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStop(this, event);
+-		}
+-
+-		return $.ui.mouse.prototype._mouseUp.call(this, event);
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.helper.is(".ui-draggable-dragging")) {
+-			this._mouseUp({});
+-		} else {
+-			this._clear();
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	_getHandle: function(event) {
+-		return this.options.handle ?
+-			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+-			true;
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+-
+-		if(!helper.parents("body").length) {
+-			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+-		}
+-
+-		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+-			helper.css("position", "absolute");
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-		//Get the offsetParent and cache its position
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		//This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		//Ugly IE fix
+-		if((this.offsetParent[0] === document.body) ||
+-			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.element.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.element.css("marginTop"),10) || 0),
+-			right: (parseInt(this.element.css("marginRight"),10) || 0),
+-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var over, c, ce,
+-			o = this.options;
+-
+-		if ( !o.containment ) {
+-			this.containment = null;
+-			return;
+-		}
+-
+-		if ( o.containment === "window" ) {
+-			this.containment = [
+-				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+-				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+-				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+-				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment === "document") {
+-			this.containment = [
+-				0,
+-				0,
+-				$( document ).width() - this.helperProportions.width - this.margins.left,
+-				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment.constructor === Array ) {
+-			this.containment = o.containment;
+-			return;
+-		}
+-
+-		if ( o.containment === "parent" ) {
+-			o.containment = this.helper[ 0 ].parentNode;
+-		}
+-
+-		c = $( o.containment );
+-		ce = c[ 0 ];
+-
+-		if( !ce ) {
+-			return;
+-		}
+-
+-		over = c.css( "overflow" ) !== "hidden";
+-
+-		this.containment = [
+-			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+-			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
+-			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
+-			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+-		];
+-		this.relative_container = c;
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var containment, co, top, left,
+-			o = this.options,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+-			pageX = event.pageX,
+-			pageY = event.pageY;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		// If we are not dragging yet, we won't check for options
+-		if ( this.originalPosition ) {
+-			if ( this.containment ) {
+-				if ( this.relative_container ){
+-					co = this.relative_container.offset();
+-					containment = [
+-						this.containment[ 0 ] + co.left,
+-						this.containment[ 1 ] + co.top,
+-						this.containment[ 2 ] + co.left,
+-						this.containment[ 3 ] + co.top
+-					];
+-				}
+-				else {
+-					containment = this.containment;
+-				}
+-
+-				if(event.pageX - this.offset.click.left < containment[0]) {
+-					pageX = containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < containment[1]) {
+-					pageY = containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > containment[2]) {
+-					pageX = containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > containment[3]) {
+-					pageY = containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+-				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+-				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+-				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																	// The absolute mouse position
+-				this.offset.click.top	-												// Click offset (relative to the element)
+-				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
+-			),
+-			left: (
+-				pageX -																	// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
+-			)
+-		};
+-
+-	},
+-
+-	_clear: function() {
+-		this.helper.removeClass("ui-draggable-dragging");
+-		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-		this.cancelHelperRemoval = false;
+-	},
+-
+-	// From now on bulk stuff - mainly helpers
+-
+-	_trigger: function(type, event, ui) {
+-		ui = ui || this._uiHash();
+-		$.ui.plugin.call(this, type, [event, ui]);
+-		//The absolute position has to be recalculated after plugins
+-		if(type === "drag") {
+-			this.positionAbs = this._convertPositionTo("absolute");
+-		}
+-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+-	},
+-
+-	plugins: {},
+-
+-	_uiHash: function() {
+-		return {
+-			helper: this.helper,
+-			position: this.position,
+-			originalPosition: this.originalPosition,
+-			offset: this.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.plugin.add("draggable", "connectToSortable", {
+-	start: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), o = inst.options,
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-		inst.sortables = [];
+-		$(o.connectToSortable).each(function() {
+-			var sortable = $.data(this, "ui-sortable");
+-			if (sortable && !sortable.options.disabled) {
+-				inst.sortables.push({
+-					instance: sortable,
+-					shouldRevert: sortable.options.revert
+-				});
+-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+-				sortable._trigger("activate", event, uiSortable);
+-			}
+-		});
+-
+-	},
+-	stop: function(event, ui) {
+-
+-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+-		var inst = $(this).data("ui-draggable"),
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-
+-		$.each(inst.sortables, function() {
+-			if(this.instance.isOver) {
+-
+-				this.instance.isOver = 0;
+-
+-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+-
+-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
+-				if(this.shouldRevert) {
+-					this.instance.options.revert = this.shouldRevert;
+-				}
+-
+-				//Trigger the stop of the sortable
+-				this.instance._mouseStop(event);
+-
+-				this.instance.options.helper = this.instance.options._helper;
+-
+-				//If the helper has been the original item, restore properties in the sortable
+-				if(inst.options.helper === "original") {
+-					this.instance.currentItem.css({ top: "auto", left: "auto" });
+-				}
+-
+-			} else {
+-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+-				this.instance._trigger("deactivate", event, uiSortable);
+-			}
+-
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), that = this;
+-
+-		$.each(inst.sortables, function() {
+-
+-			var innermostIntersecting = false,
+-				thisSortable = this;
+-
+-			//Copy over some variables to allow calling the sortable's native _intersectsWith
+-			this.instance.positionAbs = inst.positionAbs;
+-			this.instance.helperProportions = inst.helperProportions;
+-			this.instance.offset.click = inst.offset.click;
+-
+-			if(this.instance._intersectsWith(this.instance.containerCache)) {
+-				innermostIntersecting = true;
+-				$.each(inst.sortables, function () {
+-					this.instance.positionAbs = inst.positionAbs;
+-					this.instance.helperProportions = inst.helperProportions;
+-					this.instance.offset.click = inst.offset.click;
+-					if (this !== thisSortable &&
+-						this.instance._intersectsWith(this.instance.containerCache) &&
+-						$.contains(thisSortable.instance.element[0], this.instance.element[0])
+-					) {
+-						innermostIntersecting = false;
+-					}
+-					return innermostIntersecting;
+-				});
+-			}
+-
+-
+-			if(innermostIntersecting) {
+-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+-				if(!this.instance.isOver) {
+-
+-					this.instance.isOver = 1;
+-					//Now we fake the start of dragging for the sortable instance,
+-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+-					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
+-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+-					this.instance.options.helper = function() { return ui.helper[0]; };
+-
+-					event.target = this.instance.currentItem[0];
+-					this.instance._mouseCapture(event, true);
+-					this.instance._mouseStart(event, true, true);
+-
+-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+-					this.instance.offset.click.top = inst.offset.click.top;
+-					this.instance.offset.click.left = inst.offset.click.left;
+-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+-
+-					inst._trigger("toSortable", event);
+-					inst.dropped = this.instance.element; //draggable revert needs that
+-					//hack so receive/update callbacks work (mostly)
+-					inst.currentItem = inst.element;
+-					this.instance.fromOutside = inst;
+-
+-				}
+-
+-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+-				if(this.instance.currentItem) {
+-					this.instance._mouseDrag(event);
+-				}
+-
+-			} else {
+-
+-				//If it doesn't intersect with the sortable, and it intersected before,
+-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+-				if(this.instance.isOver) {
+-
+-					this.instance.isOver = 0;
+-					this.instance.cancelHelperRemoval = true;
+-
+-					//Prevent reverting on this forced stop
+-					this.instance.options.revert = false;
+-
+-					// The out event needs to be triggered independently
+-					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+-
+-					this.instance._mouseStop(event, true);
+-					this.instance.options.helper = this.instance.options._helper;
+-
+-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+-					this.instance.currentItem.remove();
+-					if(this.instance.placeholder) {
+-						this.instance.placeholder.remove();
+-					}
+-
+-					inst._trigger("fromSortable", event);
+-					inst.dropped = false; //draggable revert needs that
+-				}
+-
+-			}
+-
+-		});
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "cursor", {
+-	start: function() {
+-		var t = $("body"), o = $(this).data("ui-draggable").options;
+-		if (t.css("cursor")) {
+-			o._cursor = t.css("cursor");
+-		}
+-		t.css("cursor", o.cursor);
+-	},
+-	stop: function() {
+-		var o = $(this).data("ui-draggable").options;
+-		if (o._cursor) {
+-			$("body").css("cursor", o._cursor);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "opacity", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("opacity")) {
+-			o._opacity = t.css("opacity");
+-		}
+-		t.css("opacity", o.opacity);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._opacity) {
+-			$(ui.helper).css("opacity", o._opacity);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "scroll", {
+-	start: function() {
+-		var i = $(this).data("ui-draggable");
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-			i.overflowOffset = i.scrollParent.offset();
+-		}
+-	},
+-	drag: function( event ) {
+-
+-		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+-
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-			}
+-
+-		} else {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-			}
+-
+-		}
+-
+-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(i, event);
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "snap", {
+-	start: function() {
+-
+-		var i = $(this).data("ui-draggable"),
+-			o = i.options;
+-
+-		i.snapElements = [];
+-
+-		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+-			var $t = $(this),
+-				$o = $t.offset();
+-			if(this !== i.element[0]) {
+-				i.snapElements.push({
+-					item: this,
+-					width: $t.outerWidth(), height: $t.outerHeight(),
+-					top: $o.top, left: $o.left
+-				});
+-			}
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var ts, bs, ls, rs, l, r, t, b, i, first,
+-			inst = $(this).data("ui-draggable"),
+-			o = inst.options,
+-			d = o.snapTolerance,
+-			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+-
+-		for (i = inst.snapElements.length - 1; i >= 0; i--){
+-
+-			l = inst.snapElements[i].left;
+-			r = l + inst.snapElements[i].width;
+-			t = inst.snapElements[i].top;
+-			b = t + inst.snapElements[i].height;
+-
+-			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+-				if(inst.snapElements[i].snapping) {
+-					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-				}
+-				inst.snapElements[i].snapping = false;
+-				continue;
+-			}
+-
+-			if(o.snapMode !== "inner") {
+-				ts = Math.abs(t - y2) <= d;
+-				bs = Math.abs(b - y1) <= d;
+-				ls = Math.abs(l - x2) <= d;
+-				rs = Math.abs(r - x1) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+-				}
+-			}
+-
+-			first = (ts || bs || ls || rs);
+-
+-			if(o.snapMode !== "outer") {
+-				ts = Math.abs(t - y1) <= d;
+-				bs = Math.abs(b - y2) <= d;
+-				ls = Math.abs(l - x1) <= d;
+-				rs = Math.abs(r - x2) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-			}
+-
+-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-			}
+-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+-
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "stack", {
+-	start: function() {
+-		var min,
+-			o = this.data("ui-draggable").options,
+-			group = $.makeArray($(o.stack)).sort(function(a,b) {
+-				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+-			});
+-
+-		if (!group.length) { return; }
+-
+-		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+-		$(group).each(function(i) {
+-			$(this).css("zIndex", min + i);
+-		});
+-		this.css("zIndex", (min + group.length));
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "zIndex", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("zIndex")) {
+-			o._zIndex = t.css("zIndex");
+-		}
+-		t.css("zIndex", o.zIndex);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._zIndex) {
+-			$(ui.helper).css("zIndex", o._zIndex);
+-		}
+-	}
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-$.widget("ui.droppable", {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drop",
+-	options: {
+-		accept: "*",
+-		activeClass: false,
+-		addClasses: true,
+-		greedy: false,
+-		hoverClass: false,
+-		scope: "default",
+-		tolerance: "intersect",
+-
+-		// callbacks
+-		activate: null,
+-		deactivate: null,
+-		drop: null,
+-		out: null,
+-		over: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options,
+-			accept = o.accept;
+-
+-		this.isover = false;
+-		this.isout = true;
+-
+-		this.accept = $.isFunction(accept) ? accept : function(d) {
+-			return d.is(accept);
+-		};
+-
+-		//Store the droppable's proportions
+-		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+-
+-		// Add the reference and positions to the manager
+-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+-		$.ui.ddmanager.droppables[o.scope].push(this);
+-
+-		(o.addClasses && this.element.addClass("ui-droppable"));
+-
+-	},
+-
+-	_destroy: function() {
+-		var i = 0,
+-			drop = $.ui.ddmanager.droppables[this.options.scope];
+-
+-		for ( ; i < drop.length; i++ ) {
+-			if ( drop[i] === this ) {
+-				drop.splice(i, 1);
+-			}
+-		}
+-
+-		this.element.removeClass("ui-droppable ui-droppable-disabled");
+-	},
+-
+-	_setOption: function(key, value) {
+-
+-		if(key === "accept") {
+-			this.accept = $.isFunction(value) ? value : function(d) {
+-				return d.is(value);
+-			};
+-		}
+-		$.Widget.prototype._setOption.apply(this, arguments);
+-	},
+-
+-	_activate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.addClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("activate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_deactivate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.removeClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("deactivate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_over: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.addClass(this.options.hoverClass);
+-			}
+-			this._trigger("over", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_out: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("out", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_drop: function(event,custom) {
+-
+-		var draggable = custom || $.ui.ddmanager.current,
+-			childrenIntersection = false;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return false;
+-		}
+-
+-		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
+-			var inst = $.data(this, "ui-droppable");
+-			if(
+-				inst.options.greedy &&
+-				!inst.options.disabled &&
+-				inst.options.scope === draggable.options.scope &&
+-				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
+-				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+-			) { childrenIntersection = true; return false; }
+-		});
+-		if(childrenIntersection) {
+-			return false;
+-		}
+-
+-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.activeClass) {
+-				this.element.removeClass(this.options.activeClass);
+-			}
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("drop", event, this.ui(draggable));
+-			return this.element;
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	ui: function(c) {
+-		return {
+-			draggable: (c.currentItem || c.element),
+-			helper: c.helper,
+-			position: c.position,
+-			offset: c.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.intersect = function(draggable, droppable, toleranceMode) {
+-
+-	if (!droppable.offset) {
+-		return false;
+-	}
+-
+-	var draggableLeft, draggableTop,
+-		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+-		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
+-		l = droppable.offset.left, r = l + droppable.proportions.width,
+-		t = droppable.offset.top, b = t + droppable.proportions.height;
+-
+-	switch (toleranceMode) {
+-		case "fit":
+-			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+-		case "intersect":
+-			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
+-				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
+-				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+-		case "pointer":
+-			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
+-			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
+-			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
+-		case "touch":
+-			return (
+-				(y1 >= t && y1 <= b) ||	// Top edge touching
+-				(y2 >= t && y2 <= b) ||	// Bottom edge touching
+-				(y1 < t && y2 > b)		// Surrounded vertically
+-			) && (
+-				(x1 >= l && x1 <= r) ||	// Left edge touching
+-				(x2 >= l && x2 <= r) ||	// Right edge touching
+-				(x1 < l && x2 > r)		// Surrounded horizontally
+-			);
+-		default:
+-			return false;
+-		}
+-
+-};
+-
+-/*
+-	This manager tracks offsets of draggables and droppables
+-*/
+-$.ui.ddmanager = {
+-	current: null,
+-	droppables: { "default": [] },
+-	prepareOffsets: function(t, event) {
+-
+-		var i, j,
+-			m = $.ui.ddmanager.droppables[t.options.scope] || [],
+-			type = event ? event.type : null, // workaround for #2317
+-			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+-
+-		droppablesLoop: for (i = 0; i < m.length; i++) {
+-
+-			//No disabled and non-accepted
+-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+-				continue;
+-			}
+-
+-			// Filter out elements in the current dragged item
+-			for (j=0; j < list.length; j++) {
+-				if(list[j] === m[i].element[0]) {
+-					m[i].proportions.height = 0;
+-					continue droppablesLoop;
+-				}
+-			}
+-
+-			m[i].visible = m[i].element.css("display") !== "none";
+-			if(!m[i].visible) {
+-				continue;
+-			}
+-
+-			//Activate the droppable if used directly from draggables
+-			if(type === "mousedown") {
+-				m[i]._activate.call(m[i], event);
+-			}
+-
+-			m[i].offset = m[i].element.offset();
+-			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+-
+-		}
+-
+-	},
+-	drop: function(draggable, event) {
+-
+-		var dropped = false;
+-		// Create a copy of the droppables in case the list changes during the drop (#9116)
+-		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
+-
+-			if(!this.options) {
+-				return;
+-			}
+-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
+-				dropped = this._drop.call(this, event) || dropped;
+-			}
+-
+-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-				this.isout = true;
+-				this.isover = false;
+-				this._deactivate.call(this, event);
+-			}
+-
+-		});
+-		return dropped;
+-
+-	},
+-	dragStart: function( draggable, event ) {
+-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+-			if( !draggable.options.refreshPositions ) {
+-				$.ui.ddmanager.prepareOffsets( draggable, event );
+-			}
+-		});
+-	},
+-	drag: function(draggable, event) {
+-
+-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+-		if(draggable.options.refreshPositions) {
+-			$.ui.ddmanager.prepareOffsets(draggable, event);
+-		}
+-
+-		//Run through all droppables and check their positions based on specific tolerance options
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(this.options.disabled || this.greedyChild || !this.visible) {
+-				return;
+-			}
+-
+-			var parentInstance, scope, parent,
+-				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
+-				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+-			if(!c) {
+-				return;
+-			}
+-
+-			if (this.options.greedy) {
+-				// find droppable parents with same scope
+-				scope = this.options.scope;
+-				parent = this.element.parents(":data(ui-droppable)").filter(function () {
+-					return $.data(this, "ui-droppable").options.scope === scope;
+-				});
+-
+-				if (parent.length) {
+-					parentInstance = $.data(parent[0], "ui-droppable");
+-					parentInstance.greedyChild = (c === "isover");
+-				}
+-			}
+-
+-			// we just moved into a greedy child
+-			if (parentInstance && c === "isover") {
+-				parentInstance.isover = false;
+-				parentInstance.isout = true;
+-				parentInstance._out.call(parentInstance, event);
+-			}
+-
+-			this[c] = true;
+-			this[c === "isout" ? "isover" : "isout"] = false;
+-			this[c === "isover" ? "_over" : "_out"].call(this, event);
+-
+-			// we just moved out of a greedy child
+-			if (parentInstance && c === "isout") {
+-				parentInstance.isout = false;
+-				parentInstance.isover = true;
+-				parentInstance._over.call(parentInstance, event);
+-			}
+-		});
+-
+-	},
+-	dragStop: function( draggable, event ) {
+-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+-		if( !draggable.options.refreshPositions ) {
+-			$.ui.ddmanager.prepareOffsets( draggable, event );
+-		}
+-	}
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-function num(v) {
+-	return parseInt(v, 10) || 0;
+-}
+-
+-function isNumber(value) {
+-	return !isNaN(parseInt(value, 10));
+-}
+-
+-$.widget("ui.resizable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "resize",
+-	options: {
+-		alsoResize: false,
+-		animate: false,
+-		animateDuration: "slow",
+-		animateEasing: "swing",
+-		aspectRatio: false,
+-		autoHide: false,
+-		containment: false,
+-		ghost: false,
+-		grid: false,
+-		handles: "e,s,se",
+-		helper: false,
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 10,
+-		minWidth: 10,
+-		// See #7960
+-		zIndex: 90,
+-
+-		// callbacks
+-		resize: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		var n, i, handle, axis, hname,
+-			that = this,
+-			o = this.options;
+-		this.element.addClass("ui-resizable");
+-
+-		$.extend(this, {
+-			_aspectRatio: !!(o.aspectRatio),
+-			aspectRatio: o.aspectRatio,
+-			originalElement: this.element,
+-			_proportionallyResizeElements: [],
+-			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+-		});
+-
+-		//Wrap the element if it cannot hold child nodes
+-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+-
+-			//Create a wrapper element and set the wrapper to the new current internal element
+-			this.element.wrap(
+-				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+-					position: this.element.css("position"),
+-					width: this.element.outerWidth(),
+-					height: this.element.outerHeight(),
+-					top: this.element.css("top"),
+-					left: this.element.css("left")
+-				})
+-			);
+-
+-			//Overwrite the original this.element
+-			this.element = this.element.parent().data(
+-				"ui-resizable", this.element.data("ui-resizable")
+-			);
+-
+-			this.elementIsWrapper = true;
+-
+-			//Move margins to the wrapper
+-			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+-			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+-
+-			//Prevent Safari textarea resize
+-			this.originalResizeStyle = this.originalElement.css("resize");
+-			this.originalElement.css("resize", "none");
+-
+-			//Push the actual element to our proportionallyResize internal array
+-			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+-
+-			// avoid IE jump (hard set the margin)
+-			this.originalElement.css({ margin: this.originalElement.css("margin") });
+-
+-			// fix handlers offset
+-			this._proportionallyResize();
+-
+-		}
+-
+-		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
+-		if(this.handles.constructor === String) {
+-
+-			if ( this.handles === "all") {
+-				this.handles = "n,e,s,w,se,sw,ne,nw";
+-			}
+-
+-			n = this.handles.split(",");
+-			this.handles = {};
+-
+-			for(i = 0; i < n.length; i++) {
+-
+-				handle = $.trim(n[i]);
+-				hname = "ui-resizable-"+handle;
+-				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+-
+-				// Apply zIndex to all handles - see #7960
+-				axis.css({ zIndex: o.zIndex });
+-
+-				//TODO : What's going on here?
+-				if ("se" === handle) {
+-					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+-				}
+-
+-				//Insert into internal handles object and append to element
+-				this.handles[handle] = ".ui-resizable-"+handle;
+-				this.element.append(axis);
+-			}
+-
+-		}
+-
+-		this._renderAxis = function(target) {
+-
+-			var i, axis, padPos, padWrapper;
+-
+-			target = target || this.element;
+-
+-			for(i in this.handles) {
+-
+-				if(this.handles[i].constructor === String) {
+-					this.handles[i] = $(this.handles[i], this.element).show();
+-				}
+-
+-				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+-
+-					axis = $(this.handles[i], this.element);
+-
+-					//Checking the correct pad and border
+-					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+-
+-					//The padding type i have to apply...
+-					padPos = [ "padding",
+-						/ne|nw|n/.test(i) ? "Top" :
+-						/se|sw|s/.test(i) ? "Bottom" :
+-						/^e$/.test(i) ? "Right" : "Left" ].join("");
+-
+-					target.css(padPos, padWrapper);
+-
+-					this._proportionallyResize();
+-
+-				}
+-
+-				//TODO: What's that good for? There's not anything to be executed left
+-				if(!$(this.handles[i]).length) {
+-					continue;
+-				}
+-			}
+-		};
+-
+-		//TODO: make renderAxis a prototype function
+-		this._renderAxis(this.element);
+-
+-		this._handles = $(".ui-resizable-handle", this.element)
+-			.disableSelection();
+-
+-		//Matching axis name
+-		this._handles.mouseover(function() {
+-			if (!that.resizing) {
+-				if (this.className) {
+-					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+-				}
+-				//Axis, default = se
+-				that.axis = axis && axis[1] ? axis[1] : "se";
+-			}
+-		});
+-
+-		//If we want to auto hide the elements
+-		if (o.autoHide) {
+-			this._handles.hide();
+-			$(this.element)
+-				.addClass("ui-resizable-autohide")
+-				.mouseenter(function() {
+-					if (o.disabled) {
+-						return;
+-					}
+-					$(this).removeClass("ui-resizable-autohide");
+-					that._handles.show();
+-				})
+-				.mouseleave(function(){
+-					if (o.disabled) {
+-						return;
+-					}
+-					if (!that.resizing) {
+-						$(this).addClass("ui-resizable-autohide");
+-						that._handles.hide();
+-					}
+-				});
+-		}
+-
+-		//Initialize the mouse interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-
+-		this._mouseDestroy();
+-
+-		var wrapper,
+-			_destroy = function(exp) {
+-				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+-					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+-			};
+-
+-		//TODO: Unwrap at same DOM position
+-		if (this.elementIsWrapper) {
+-			_destroy(this.element);
+-			wrapper = this.element;
+-			this.originalElement.css({
+-				position: wrapper.css("position"),
+-				width: wrapper.outerWidth(),
+-				height: wrapper.outerHeight(),
+-				top: wrapper.css("top"),
+-				left: wrapper.css("left")
+-			}).insertAfter( wrapper );
+-			wrapper.remove();
+-		}
+-
+-		this.originalElement.css("resize", this.originalResizeStyle);
+-		_destroy(this.originalElement);
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-		var i, handle,
+-			capture = false;
+-
+-		for (i in this.handles) {
+-			handle = $(this.handles[i])[0];
+-			if (handle === event.target || $.contains(handle, event.target)) {
+-				capture = true;
+-			}
+-		}
+-
+-		return !this.options.disabled && capture;
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var curleft, curtop, cursor,
+-			o = this.options,
+-			iniPos = this.element.position(),
+-			el = this.element;
+-
+-		this.resizing = true;
+-
+-		// bugfix for http://dev.jquery.com/ticket/1749
+-		if ( (/absolute/).test( el.css("position") ) ) {
+-			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
+-		} else if (el.is(".ui-draggable")) {
+-			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
+-		}
+-
+-		this._renderProxy();
+-
+-		curleft = num(this.helper.css("left"));
+-		curtop = num(this.helper.css("top"));
+-
+-		if (o.containment) {
+-			curleft += $(o.containment).scrollLeft() || 0;
+-			curtop += $(o.containment).scrollTop() || 0;
+-		}
+-
+-		//Store needed variables
+-		this.offset = this.helper.offset();
+-		this.position = { left: curleft, top: curtop };
+-		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalPosition = { left: curleft, top: curtop };
+-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+-		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+-
+-		//Aspect Ratio
+-		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+-
+-		cursor = $(".ui-resizable-" + this.axis).css("cursor");
+-		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+-
+-		el.addClass("ui-resizable-resizing");
+-		this._propagate("start", event);
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Increase performance, avoid regex
+-		var data,
+-			el = this.helper, props = {},
+-			smp = this.originalMousePosition,
+-			a = this.axis,
+-			prevTop = this.position.top,
+-			prevLeft = this.position.left,
+-			prevWidth = this.size.width,
+-			prevHeight = this.size.height,
+-			dx = (event.pageX-smp.left)||0,
+-			dy = (event.pageY-smp.top)||0,
+-			trigger = this._change[a];
+-
+-		if (!trigger) {
+-			return false;
+-		}
+-
+-		// Calculate the attrs that will be change
+-		data = trigger.apply(this, [event, dx, dy]);
+-
+-		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+-		this._updateVirtualBoundaries(event.shiftKey);
+-		if (this._aspectRatio || event.shiftKey) {
+-			data = this._updateRatio(data, event);
+-		}
+-
+-		data = this._respectSize(data, event);
+-
+-		this._updateCache(data);
+-
+-		// plugins callbacks need to be called first
+-		this._propagate("resize", event);
+-
+-		if (this.position.top !== prevTop) {
+-			props.top = this.position.top + "px";
+-		}
+-		if (this.position.left !== prevLeft) {
+-			props.left = this.position.left + "px";
+-		}
+-		if (this.size.width !== prevWidth) {
+-			props.width = this.size.width + "px";
+-		}
+-		if (this.size.height !== prevHeight) {
+-			props.height = this.size.height + "px";
+-		}
+-		el.css(props);
+-
+-		if (!this._helper && this._proportionallyResizeElements.length) {
+-			this._proportionallyResize();
+-		}
+-
+-		// Call the user callback if the element was resized
+-		if ( ! $.isEmptyObject(props) ) {
+-			this._trigger("resize", event, this.ui());
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		this.resizing = false;
+-		var pr, ista, soffseth, soffsetw, s, left, top,
+-			o = this.options, that = this;
+-
+-		if(this._helper) {
+-
+-			pr = this._proportionallyResizeElements;
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+-			soffsetw = ista ? 0 : that.sizeDiff.width;
+-
+-			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-			if (!o.animate) {
+-				this.element.css($.extend(s, { top: top, left: left }));
+-			}
+-
+-			that.helper.height(that.size.height);
+-			that.helper.width(that.size.width);
+-
+-			if (this._helper && !o.animate) {
+-				this._proportionallyResize();
+-			}
+-		}
+-
+-		$("body").css("cursor", "auto");
+-
+-		this.element.removeClass("ui-resizable-resizing");
+-
+-		this._propagate("stop", event);
+-
+-		if (this._helper) {
+-			this.helper.remove();
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	_updateVirtualBoundaries: function(forceAspectRatio) {
+-		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+-			o = this.options;
+-
+-		b = {
+-			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+-			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+-			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+-			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+-		};
+-
+-		if(this._aspectRatio || forceAspectRatio) {
+-			// We want to create an enclosing box whose aspect ration is the requested one
+-			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+-			pMinWidth = b.minHeight * this.aspectRatio;
+-			pMinHeight = b.minWidth / this.aspectRatio;
+-			pMaxWidth = b.maxHeight * this.aspectRatio;
+-			pMaxHeight = b.maxWidth / this.aspectRatio;
+-
+-			if(pMinWidth > b.minWidth) {
+-				b.minWidth = pMinWidth;
+-			}
+-			if(pMinHeight > b.minHeight) {
+-				b.minHeight = pMinHeight;
+-			}
+-			if(pMaxWidth < b.maxWidth) {
+-				b.maxWidth = pMaxWidth;
+-			}
+-			if(pMaxHeight < b.maxHeight) {
+-				b.maxHeight = pMaxHeight;
+-			}
+-		}
+-		this._vBoundaries = b;
+-	},
+-
+-	_updateCache: function(data) {
+-		this.offset = this.helper.offset();
+-		if (isNumber(data.left)) {
+-			this.position.left = data.left;
+-		}
+-		if (isNumber(data.top)) {
+-			this.position.top = data.top;
+-		}
+-		if (isNumber(data.height)) {
+-			this.size.height = data.height;
+-		}
+-		if (isNumber(data.width)) {
+-			this.size.width = data.width;
+-		}
+-	},
+-
+-	_updateRatio: function( data ) {
+-
+-		var cpos = this.position,
+-			csize = this.size,
+-			a = this.axis;
+-
+-		if (isNumber(data.height)) {
+-			data.width = (data.height * this.aspectRatio);
+-		} else if (isNumber(data.width)) {
+-			data.height = (data.width / this.aspectRatio);
+-		}
+-
+-		if (a === "sw") {
+-			data.left = cpos.left + (csize.width - data.width);
+-			data.top = null;
+-		}
+-		if (a === "nw") {
+-			data.top = cpos.top + (csize.height - data.height);
+-			data.left = cpos.left + (csize.width - data.width);
+-		}
+-
+-		return data;
+-	},
+-
+-	_respectSize: function( data ) {
+-
+-		var o = this._vBoundaries,
+-			a = this.axis,
+-			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+-			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+-			dw = this.originalPosition.left + this.originalSize.width,
+-			dh = this.position.top + this.size.height,
+-			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+-		if (isminw) {
+-			data.width = o.minWidth;
+-		}
+-		if (isminh) {
+-			data.height = o.minHeight;
+-		}
+-		if (ismaxw) {
+-			data.width = o.maxWidth;
+-		}
+-		if (ismaxh) {
+-			data.height = o.maxHeight;
+-		}
+-
+-		if (isminw && cw) {
+-			data.left = dw - o.minWidth;
+-		}
+-		if (ismaxw && cw) {
+-			data.left = dw - o.maxWidth;
+-		}
+-		if (isminh && ch) {
+-			data.top = dh - o.minHeight;
+-		}
+-		if (ismaxh && ch) {
+-			data.top = dh - o.maxHeight;
+-		}
+-
+-		// fixing jump error on top/left - bug #2330
+-		if (!data.width && !data.height && !data.left && data.top) {
+-			data.top = null;
+-		} else if (!data.width && !data.height && !data.top && data.left) {
+-			data.left = null;
+-		}
+-
+-		return data;
+-	},
+-
+-	_proportionallyResize: function() {
+-
+-		if (!this._proportionallyResizeElements.length) {
+-			return;
+-		}
+-
+-		var i, j, borders, paddings, prel,
+-			element = this.helper || this.element;
+-
+-		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+-
+-			prel = this._proportionallyResizeElements[i];
+-
+-			if (!this.borderDif) {
+-				this.borderDif = [];
+-				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
+-				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
+-
+-				for ( j = 0; j < borders.length; j++ ) {
+-					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
+-				}
+-			}
+-
+-			prel.css({
+-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+-			});
+-
+-		}
+-
+-	},
+-
+-	_renderProxy: function() {
+-
+-		var el = this.element, o = this.options;
+-		this.elementOffset = el.offset();
+-
+-		if(this._helper) {
+-
+-			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+-
+-			this.helper.addClass(this._helper).css({
+-				width: this.element.outerWidth() - 1,
+-				height: this.element.outerHeight() - 1,
+-				position: "absolute",
+-				left: this.elementOffset.left +"px",
+-				top: this.elementOffset.top +"px",
+-				zIndex: ++o.zIndex //TODO: Don't modify option
+-			});
+-
+-			this.helper
+-				.appendTo("body")
+-				.disableSelection();
+-
+-		} else {
+-			this.helper = this.element;
+-		}
+-
+-	},
+-
+-	_change: {
+-		e: function(event, dx) {
+-			return { width: this.originalSize.width + dx };
+-		},
+-		w: function(event, dx) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { left: sp.left + dx, width: cs.width - dx };
+-		},
+-		n: function(event, dx, dy) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { top: sp.top + dy, height: cs.height - dy };
+-		},
+-		s: function(event, dx, dy) {
+-			return { height: this.originalSize.height + dy };
+-		},
+-		se: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		sw: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		},
+-		ne: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		nw: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		}
+-	},
+-
+-	_propagate: function(n, event) {
+-		$.ui.plugin.call(this, n, [event, this.ui()]);
+-		(n !== "resize" && this._trigger(n, event, this.ui()));
+-	},
+-
+-	plugins: {},
+-
+-	ui: function() {
+-		return {
+-			originalElement: this.originalElement,
+-			element: this.element,
+-			helper: this.helper,
+-			position: this.position,
+-			size: this.size,
+-			originalSize: this.originalSize,
+-			originalPosition: this.originalPosition
+-		};
+-	}
+-
+-});
+-
+-/*
+- * Resizable Extensions
+- */
+-
+-$.ui.plugin.add("resizable", "animate", {
+-
+-	stop: function( event ) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			pr = that._proportionallyResizeElements,
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+-			soffsetw = ista ? 0 : that.sizeDiff.width,
+-			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-		that.element.animate(
+-			$.extend(style, top && left ? { top: top, left: left } : {}), {
+-				duration: o.animateDuration,
+-				easing: o.animateEasing,
+-				step: function() {
+-
+-					var data = {
+-						width: parseInt(that.element.css("width"), 10),
+-						height: parseInt(that.element.css("height"), 10),
+-						top: parseInt(that.element.css("top"), 10),
+-						left: parseInt(that.element.css("left"), 10)
+-					};
+-
+-					if (pr && pr.length) {
+-						$(pr[0]).css({ width: data.width, height: data.height });
+-					}
+-
+-					// propagating resize, and updating values for each animation step
+-					that._updateCache(data);
+-					that._propagate("resize", event);
+-
+-				}
+-			}
+-		);
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "containment", {
+-
+-	start: function() {
+-		var element, p, co, ch, cw, width, height,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			el = that.element,
+-			oc = o.containment,
+-			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+-
+-		if (!ce) {
+-			return;
+-		}
+-
+-		that.containerElement = $(ce);
+-
+-		if (/document/.test(oc) || oc === document) {
+-			that.containerOffset = { left: 0, top: 0 };
+-			that.containerPosition = { left: 0, top: 0 };
+-
+-			that.parentData = {
+-				element: $(document), left: 0, top: 0,
+-				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+-			};
+-		}
+-
+-		// i'm a node, so compute top, left, right, bottom
+-		else {
+-			element = $(ce);
+-			p = [];
+-			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+-
+-			that.containerOffset = element.offset();
+-			that.containerPosition = element.position();
+-			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+-
+-			co = that.containerOffset;
+-			ch = that.containerSize.height;
+-			cw = that.containerSize.width;
+-			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
+-			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+-
+-			that.parentData = {
+-				element: ce, left: co.left, top: co.top, width: width, height: height
+-			};
+-		}
+-	},
+-
+-	resize: function( event ) {
+-		var woset, hoset, isParent, isOffsetRelative,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset, cp = that.position,
+-			pRatio = that._aspectRatio || event.shiftKey,
+-			cop = { top:0, left:0 }, ce = that.containerElement;
+-
+-		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
+-			cop = co;
+-		}
+-
+-		if (cp.left < (that._helper ? co.left : 0)) {
+-			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-			that.position.left = o.helper ? co.left : 0;
+-		}
+-
+-		if (cp.top < (that._helper ? co.top : 0)) {
+-			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-			that.position.top = that._helper ? co.top : 0;
+-		}
+-
+-		that.offset.left = that.parentData.left+that.position.left;
+-		that.offset.top = that.parentData.top+that.position.top;
+-
+-		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
+-		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
+-
+-		isParent = that.containerElement.get(0) === that.element.parent().get(0);
+-		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+-
+-		if(isParent && isOffsetRelative) {
+-			woset -= that.parentData.left;
+-		}
+-
+-		if (woset + that.size.width >= that.parentData.width) {
+-			that.size.width = that.parentData.width - woset;
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-		}
+-
+-		if (hoset + that.size.height >= that.parentData.height) {
+-			that.size.height = that.parentData.height - hoset;
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-		}
+-	},
+-
+-	stop: function(){
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset,
+-			cop = that.containerPosition,
+-			ce = that.containerElement,
+-			helper = $(that.helper),
+-			ho = helper.offset(),
+-			w = helper.outerWidth() - that.sizeDiff.width,
+-			h = helper.outerHeight() - that.sizeDiff.height;
+-
+-		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "alsoResize", {
+-
+-	start: function () {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			_store = function (exp) {
+-				$(exp).each(function() {
+-					var el = $(this);
+-					el.data("ui-resizable-alsoresize", {
+-						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+-						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+-					});
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
+-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+-		}else{
+-			_store(o.alsoResize);
+-		}
+-	},
+-
+-	resize: function (event, ui) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			delta = {
+-				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
+-				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
+-			},
+-
+-			_alsoResize = function (exp, c) {
+-				$(exp).each(function() {
+-					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+-						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+-
+-					$.each(css, function (i, prop) {
+-						var sum = (start[prop]||0) + (delta[prop]||0);
+-						if (sum && sum >= 0) {
+-							style[prop] = sum || null;
+-						}
+-					});
+-
+-					el.css(style);
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
+-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+-		}else{
+-			_alsoResize(o.alsoResize);
+-		}
+-	},
+-
+-	stop: function () {
+-		$(this).removeData("resizable-alsoresize");
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "ghost", {
+-
+-	start: function() {
+-
+-		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
+-
+-		that.ghost = that.originalElement.clone();
+-		that.ghost
+-			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+-			.addClass("ui-resizable-ghost")
+-			.addClass(typeof o.ghost === "string" ? o.ghost : "");
+-
+-		that.ghost.appendTo(that.helper);
+-
+-	},
+-
+-	resize: function(){
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost) {
+-			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+-		}
+-	},
+-
+-	stop: function() {
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost && that.helper) {
+-			that.helper.get(0).removeChild(that.ghost.get(0));
+-		}
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "grid", {
+-
+-	resize: function() {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			cs = that.size,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			a = that.axis,
+-			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
+-			gridX = (grid[0]||1),
+-			gridY = (grid[1]||1),
+-			ox = Math.round((cs.width - os.width) / gridX) * gridX,
+-			oy = Math.round((cs.height - os.height) / gridY) * gridY,
+-			newWidth = os.width + ox,
+-			newHeight = os.height + oy,
+-			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+-			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+-			isMinWidth = o.minWidth && (o.minWidth > newWidth),
+-			isMinHeight = o.minHeight && (o.minHeight > newHeight);
+-
+-		o.grid = grid;
+-
+-		if (isMinWidth) {
+-			newWidth = newWidth + gridX;
+-		}
+-		if (isMinHeight) {
+-			newHeight = newHeight + gridY;
+-		}
+-		if (isMaxWidth) {
+-			newWidth = newWidth - gridX;
+-		}
+-		if (isMaxHeight) {
+-			newHeight = newHeight - gridY;
+-		}
+-
+-		if (/^(se|s|e)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-		} else if (/^(ne)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-		} else if (/^(sw)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.left = op.left - ox;
+-		} else {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-			that.position.left = op.left - ox;
+-		}
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.widget("ui.selectable", $.ui.mouse, {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoRefresh: true,
+-		distance: 0,
+-		filter: "*",
+-		tolerance: "touch",
+-
+-		// callbacks
+-		selected: null,
+-		selecting: null,
+-		start: null,
+-		stop: null,
+-		unselected: null,
+-		unselecting: null
+-	},
+-	_create: function() {
+-		var selectees,
+-			that = this;
+-
+-		this.element.addClass("ui-selectable");
+-
+-		this.dragged = false;
+-
+-		// cache selectee children based on filter
+-		this.refresh = function() {
+-			selectees = $(that.options.filter, that.element[0]);
+-			selectees.addClass("ui-selectee");
+-			selectees.each(function() {
+-				var $this = $(this),
+-					pos = $this.offset();
+-				$.data(this, "selectable-item", {
+-					element: this,
+-					$element: $this,
+-					left: pos.left,
+-					top: pos.top,
+-					right: pos.left + $this.outerWidth(),
+-					bottom: pos.top + $this.outerHeight(),
+-					startselected: false,
+-					selected: $this.hasClass("ui-selected"),
+-					selecting: $this.hasClass("ui-selecting"),
+-					unselecting: $this.hasClass("ui-unselecting")
+-				});
+-			});
+-		};
+-		this.refresh();
+-
+-		this.selectees = selectees.addClass("ui-selectee");
+-
+-		this._mouseInit();
+-
+-		this.helper = $("<div class='ui-selectable-helper'></div>");
+-	},
+-
+-	_destroy: function() {
+-		this.selectees
+-			.removeClass("ui-selectee")
+-			.removeData("selectable-item");
+-		this.element
+-			.removeClass("ui-selectable ui-selectable-disabled");
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseStart: function(event) {
+-		var that = this,
+-			options = this.options;
+-
+-		this.opos = [event.pageX, event.pageY];
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		this.selectees = $(options.filter, this.element[0]);
+-
+-		this._trigger("start", event);
+-
+-		$(options.appendTo).append(this.helper);
+-		// position helper (lasso)
+-		this.helper.css({
+-			"left": event.pageX,
+-			"top": event.pageY,
+-			"width": 0,
+-			"height": 0
+-		});
+-
+-		if (options.autoRefresh) {
+-			this.refresh();
+-		}
+-
+-		this.selectees.filter(".ui-selected").each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.startselected = true;
+-			if (!event.metaKey && !event.ctrlKey) {
+-				selectee.$element.removeClass("ui-selected");
+-				selectee.selected = false;
+-				selectee.$element.addClass("ui-unselecting");
+-				selectee.unselecting = true;
+-				// selectable UNSELECTING callback
+-				that._trigger("unselecting", event, {
+-					unselecting: selectee.element
+-				});
+-			}
+-		});
+-
+-		$(event.target).parents().addBack().each(function() {
+-			var doSelect,
+-				selectee = $.data(this, "selectable-item");
+-			if (selectee) {
+-				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+-				selectee.$element
+-					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+-					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+-				selectee.unselecting = !doSelect;
+-				selectee.selecting = doSelect;
+-				selectee.selected = doSelect;
+-				// selectable (UN)SELECTING callback
+-				if (doSelect) {
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				} else {
+-					that._trigger("unselecting", event, {
+-						unselecting: selectee.element
+-					});
+-				}
+-				return false;
+-			}
+-		});
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		this.dragged = true;
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		var tmp,
+-			that = this,
+-			options = this.options,
+-			x1 = this.opos[0],
+-			y1 = this.opos[1],
+-			x2 = event.pageX,
+-			y2 = event.pageY;
+-
+-		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+-		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+-		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+-
+-		this.selectees.each(function() {
+-			var selectee = $.data(this, "selectable-item"),
+-				hit = false;
+-
+-			//prevent helper from being selected if appendTo: selectable
+-			if (!selectee || selectee.element === that.element[0]) {
+-				return;
+-			}
+-
+-			if (options.tolerance === "touch") {
+-				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+-			} else if (options.tolerance === "fit") {
+-				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+-			}
+-
+-			if (hit) {
+-				// SELECT
+-				if (selectee.selected) {
+-					selectee.$element.removeClass("ui-selected");
+-					selectee.selected = false;
+-				}
+-				if (selectee.unselecting) {
+-					selectee.$element.removeClass("ui-unselecting");
+-					selectee.unselecting = false;
+-				}
+-				if (!selectee.selecting) {
+-					selectee.$element.addClass("ui-selecting");
+-					selectee.selecting = true;
+-					// selectable SELECTING callback
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				}
+-			} else {
+-				// UNSELECT
+-				if (selectee.selecting) {
+-					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						selectee.$element.addClass("ui-selected");
+-						selectee.selected = true;
+-					} else {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						if (selectee.startselected) {
+-							selectee.$element.addClass("ui-unselecting");
+-							selectee.unselecting = true;
+-						}
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-				if (selectee.selected) {
+-					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+-						selectee.$element.removeClass("ui-selected");
+-						selectee.selected = false;
+-
+-						selectee.$element.addClass("ui-unselecting");
+-						selectee.unselecting = true;
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-			}
+-		});
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-		var that = this;
+-
+-		this.dragged = false;
+-
+-		$(".ui-unselecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-unselecting");
+-			selectee.unselecting = false;
+-			selectee.startselected = false;
+-			that._trigger("unselected", event, {
+-				unselected: selectee.element
+-			});
+-		});
+-		$(".ui-selecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+-			selectee.selecting = false;
+-			selectee.selected = true;
+-			selectee.startselected = true;
+-			that._trigger("selected", event, {
+-				selected: selectee.element
+-			});
+-		});
+-		this._trigger("stop", event);
+-
+-		this.helper.remove();
+-
+-		return false;
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-/*jshint loopfunc: true */
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-function isFloating(item) {
+-	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+-}
+-
+-$.widget("ui.sortable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "sort",
+-	ready: false,
+-	options: {
+-		appendTo: "parent",
+-		axis: false,
+-		connectWith: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		dropOnEmpty: true,
+-		forcePlaceholderSize: false,
+-		forceHelperSize: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		items: "> *",
+-		opacity: false,
+-		placeholder: false,
+-		revert: false,
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		scope: "default",
+-		tolerance: "intersect",
+-		zIndex: 1000,
+-
+-		// callbacks
+-		activate: null,
+-		beforeStop: null,
+-		change: null,
+-		deactivate: null,
+-		out: null,
+-		over: null,
+-		receive: null,
+-		remove: null,
+-		sort: null,
+-		start: null,
+-		stop: null,
+-		update: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options;
+-		this.containerCache = {};
+-		this.element.addClass("ui-sortable");
+-
+-		//Get the items
+-		this.refresh();
+-
+-		//Let's determine if the items are being displayed horizontally
+-		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
+-
+-		//Let's determine the parent's offset
+-		this.offset = this.element.offset();
+-
+-		//Initialize mouse events for interaction
+-		this._mouseInit();
+-
+-		//We're ready to go
+-		this.ready = true;
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass("ui-sortable ui-sortable-disabled");
+-		this._mouseDestroy();
+-
+-		for ( var i = this.items.length - 1; i >= 0; i-- ) {
+-			this.items[i].item.removeData(this.widgetName + "-item");
+-		}
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value){
+-		if ( key === "disabled" ) {
+-			this.options[ key ] = value;
+-
+-			this.widget().toggleClass( "ui-sortable-disabled", !!value );
+-		} else {
+-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
+-			$.Widget.prototype._setOption.apply(this, arguments);
+-		}
+-	},
+-
+-	_mouseCapture: function(event, overrideHandle) {
+-		var currentItem = null,
+-			validHandle = false,
+-			that = this;
+-
+-		if (this.reverting) {
+-			return false;
+-		}
+-
+-		if(this.options.disabled || this.options.type === "static") {
+-			return false;
+-		}
+-
+-		//We have to refresh the items data once first
+-		this._refreshItems(event);
+-
+-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+-		$(event.target).parents().each(function() {
+-			if($.data(this, that.widgetName + "-item") === that) {
+-				currentItem = $(this);
+-				return false;
+-			}
+-		});
+-		if($.data(event.target, that.widgetName + "-item") === that) {
+-			currentItem = $(event.target);
+-		}
+-
+-		if(!currentItem) {
+-			return false;
+-		}
+-		if(this.options.handle && !overrideHandle) {
+-			$(this.options.handle, currentItem).find("*").addBack().each(function() {
+-				if(this === event.target) {
+-					validHandle = true;
+-				}
+-			});
+-			if(!validHandle) {
+-				return false;
+-			}
+-		}
+-
+-		this.currentItem = currentItem;
+-		this._removeCurrentsFromItems();
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event, overrideHandle, noActivation) {
+-
+-		var i, body,
+-			o = this.options;
+-
+-		this.currentContainer = this;
+-
+-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+-		this.refreshPositions();
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Get the next scrolling parent
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.currentItem.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		// Only after we got the offset, we can change the helper's position to absolute
+-		// TODO: Still need to figure out a way to make relative sorting possible
+-		this.helper.css("position", "absolute");
+-		this.cssPosition = this.helper.css("position");
+-
+-		//Generate the original position
+-		this.originalPosition = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Cache the former DOM position
+-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+-
+-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.currentItem.hide();
+-		}
+-
+-		//Create the placeholder
+-		this._createPlaceholder();
+-
+-		//Set a containment if given in the options
+-		if(o.containment) {
+-			this._setContainment();
+-		}
+-
+-		if( o.cursor && o.cursor !== "auto" ) { // cursor option
+-			body = this.document.find( "body" );
+-
+-			// support: IE
+-			this.storedCursor = body.css( "cursor" );
+-			body.css( "cursor", o.cursor );
+-
+-			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+-		}
+-
+-		if(o.opacity) { // opacity option
+-			if (this.helper.css("opacity")) {
+-				this._storedOpacity = this.helper.css("opacity");
+-			}
+-			this.helper.css("opacity", o.opacity);
+-		}
+-
+-		if(o.zIndex) { // zIndex option
+-			if (this.helper.css("zIndex")) {
+-				this._storedZIndex = this.helper.css("zIndex");
+-			}
+-			this.helper.css("zIndex", o.zIndex);
+-		}
+-
+-		//Prepare scrolling
+-		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-			this.overflowOffset = this.scrollParent.offset();
+-		}
+-
+-		//Call callbacks
+-		this._trigger("start", event, this._uiHash());
+-
+-		//Recache the helper size
+-		if(!this._preserveHelperProportions) {
+-			this._cacheHelperProportions();
+-		}
+-
+-
+-		//Post "activate" events to possible containers
+-		if( !noActivation ) {
+-			for ( i = this.containers.length - 1; i >= 0; i-- ) {
+-				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+-			}
+-		}
+-
+-		//Prepare possible droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-		this.dragging = true;
+-
+-		this.helper.addClass("ui-sortable-helper");
+-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		return true;
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-		var i, item, itemElement, intersection,
+-			o = this.options,
+-			scrolled = false;
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		if (!this.lastPositionAbs) {
+-			this.lastPositionAbs = this.positionAbs;
+-		}
+-
+-		//Do scrolling
+-		if(this.options.scroll) {
+-			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-
+-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-
+-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-
+-			} else {
+-
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-
+-			}
+-
+-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-				$.ui.ddmanager.prepareOffsets(this, event);
+-			}
+-		}
+-
+-		//Regenerate the absolute position used for position checks
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Set the helper position
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-
+-		//Rearrange
+-		for (i = this.items.length - 1; i >= 0; i--) {
+-
+-			//Cache variables and intersection, continue if no intersection
+-			item = this.items[i];
+-			itemElement = item.item[0];
+-			intersection = this._intersectsWithPointer(item);
+-			if (!intersection) {
+-				continue;
+-			}
+-
+-			// Only put the placeholder inside the current Container, skip all
+-			// items form other containers. This works because when moving
+-			// an item from one container to another the
+-			// currentContainer is switched before the placeholder is moved.
+-			//
+-			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
+-			// beetween the outer and inner container.
+-			if (item.instance !== this.currentContainer) {
+-				continue;
+-			}
+-
+-			// cannot intersect with itself
+-			// no useless actions that have been done before
+-			// no action if the item moved is the parent of the item checked
+-			if (itemElement !== this.currentItem[0] &&
+-				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+-				!$.contains(this.placeholder[0], itemElement) &&
+-				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+-			) {
+-
+-				this.direction = intersection === 1 ? "down" : "up";
+-
+-				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+-					this._rearrange(event, item);
+-				} else {
+-					break;
+-				}
+-
+-				this._trigger("change", event, this._uiHash());
+-				break;
+-			}
+-		}
+-
+-		//Post events to containers
+-		this._contactContainers(event);
+-
+-		//Interconnect with droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		//Call callbacks
+-		this._trigger("sort", event, this._uiHash());
+-
+-		this.lastPositionAbs = this.positionAbs;
+-		return false;
+-
+-	},
+-
+-	_mouseStop: function(event, noPropagation) {
+-
+-		if(!event) {
+-			return;
+-		}
+-
+-		//If we are using droppables, inform the manager about the drop
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			$.ui.ddmanager.drop(this, event);
+-		}
+-
+-		if(this.options.revert) {
+-			var that = this,
+-				cur = this.placeholder.offset(),
+-				axis = this.options.axis,
+-				animation = {};
+-
+-			if ( !axis || axis === "x" ) {
+-				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
+-			}
+-			if ( !axis || axis === "y" ) {
+-				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
+-			}
+-			this.reverting = true;
+-			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+-				that._clear(event);
+-			});
+-		} else {
+-			this._clear(event, noPropagation);
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.dragging) {
+-
+-			this._mouseUp({ target: null });
+-
+-			if(this.options.helper === "original") {
+-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-			} else {
+-				this.currentItem.show();
+-			}
+-
+-			//Post deactivating events to containers
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", null, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		if (this.placeholder) {
+-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-			if(this.placeholder[0].parentNode) {
+-				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-			}
+-			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+-				this.helper.remove();
+-			}
+-
+-			$.extend(this, {
+-				helper: null,
+-				dragging: false,
+-				reverting: false,
+-				_noFinalSort: null
+-			});
+-
+-			if(this.domPosition.prev) {
+-				$(this.domPosition.prev).after(this.currentItem);
+-			} else {
+-				$(this.domPosition.parent).prepend(this.currentItem);
+-			}
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	serialize: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			str = [];
+-		o = o || {};
+-
+-		$(items).each(function() {
+-			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+-			if (res) {
+-				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+-			}
+-		});
+-
+-		if(!str.length && o.key) {
+-			str.push(o.key + "=");
+-		}
+-
+-		return str.join("&");
+-
+-	},
+-
+-	toArray: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			ret = [];
+-
+-		o = o || {};
+-
+-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+-		return ret;
+-
+-	},
+-
+-	/* Be careful with the following core functions */
+-	_intersectsWith: function(item) {
+-
+-		var x1 = this.positionAbs.left,
+-			x2 = x1 + this.helperProportions.width,
+-			y1 = this.positionAbs.top,
+-			y2 = y1 + this.helperProportions.height,
+-			l = item.left,
+-			r = l + item.width,
+-			t = item.top,
+-			b = t + item.height,
+-			dyClick = this.offset.click.top,
+-			dxClick = this.offset.click.left,
+-			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+-			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+-			isOverElement = isOverElementHeight && isOverElementWidth;
+-
+-		if ( this.options.tolerance === "pointer" ||
+-			this.options.forcePointerForContainers ||
+-			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+-		) {
+-			return isOverElement;
+-		} else {
+-
+-			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+-				x2 - (this.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+-				y2 - (this.helperProportions.height / 2) < b ); // Top Half
+-
+-		}
+-	},
+-
+-	_intersectsWithPointer: function(item) {
+-
+-		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+-			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+-			isOverElement = isOverElementHeight && isOverElementWidth,
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (!isOverElement) {
+-			return false;
+-		}
+-
+-		return this.floating ?
+-			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+-			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+-
+-	},
+-
+-	_intersectsWithSides: function(item) {
+-
+-		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+-			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (this.floating && horizontalDirection) {
+-			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+-		} else {
+-			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+-		}
+-
+-	},
+-
+-	_getDragVerticalDirection: function() {
+-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+-		return delta !== 0 && (delta > 0 ? "down" : "up");
+-	},
+-
+-	_getDragHorizontalDirection: function() {
+-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+-		return delta !== 0 && (delta > 0 ? "right" : "left");
+-	},
+-
+-	refresh: function(event) {
+-		this._refreshItems(event);
+-		this.refreshPositions();
+-		return this;
+-	},
+-
+-	_connectWith: function() {
+-		var options = this.options;
+-		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+-	},
+-
+-	_getItemsAsjQuery: function(connected) {
+-
+-		var i, j, cur, inst,
+-			items = [],
+-			queries = [],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && connected) {
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for ( j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+-					}
+-				}
+-			}
+-		}
+-
+-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+-
+-		for (i = queries.length - 1; i >= 0; i--){
+-			queries[i][0].each(function() {
+-				items.push(this);
+-			});
+-		}
+-
+-		return $(items);
+-
+-	},
+-
+-	_removeCurrentsFromItems: function() {
+-
+-		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+-
+-		this.items = $.grep(this.items, function (item) {
+-			for (var j=0; j < list.length; j++) {
+-				if(list[j] === item.item[0]) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		});
+-
+-	},
+-
+-	_refreshItems: function(event) {
+-
+-		this.items = [];
+-		this.containers = [this];
+-
+-		var i, j, cur, inst, targetData, _queries, item, queriesLength,
+-			items = this.items,
+-			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for (j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+-						this.containers.push(inst);
+-					}
+-				}
+-			}
+-		}
+-
+-		for (i = queries.length - 1; i >= 0; i--) {
+-			targetData = queries[i][1];
+-			_queries = queries[i][0];
+-
+-			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+-				item = $(_queries[j]);
+-
+-				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+-
+-				items.push({
+-					item: item,
+-					instance: targetData,
+-					width: 0, height: 0,
+-					left: 0, top: 0
+-				});
+-			}
+-		}
+-
+-	},
+-
+-	refreshPositions: function(fast) {
+-
+-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+-		if(this.offsetParent && this.helper) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		var i, item, t, p;
+-
+-		for (i = this.items.length - 1; i >= 0; i--){
+-			item = this.items[i];
+-
+-			//We ignore calculating positions of all connected containers when we're not over them
+-			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+-				continue;
+-			}
+-
+-			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+-
+-			if (!fast) {
+-				item.width = t.outerWidth();
+-				item.height = t.outerHeight();
+-			}
+-
+-			p = t.offset();
+-			item.left = p.left;
+-			item.top = p.top;
+-		}
+-
+-		if(this.options.custom && this.options.custom.refreshContainers) {
+-			this.options.custom.refreshContainers.call(this);
+-		} else {
+-			for (i = this.containers.length - 1; i >= 0; i--){
+-				p = this.containers[i].element.offset();
+-				this.containers[i].containerCache.left = p.left;
+-				this.containers[i].containerCache.top = p.top;
+-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
+-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	_createPlaceholder: function(that) {
+-		that = that || this;
+-		var className,
+-			o = that.options;
+-
+-		if(!o.placeholder || o.placeholder.constructor === String) {
+-			className = o.placeholder;
+-			o.placeholder = {
+-				element: function() {
+-
+-					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+-						element = $( "<" + nodeName + ">", that.document[0] )
+-							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+-							.removeClass("ui-sortable-helper");
+-
+-					if ( nodeName === "tr" ) {
+-						that.currentItem.children().each(function() {
+-							$( "<td>&#160;</td>", that.document[0] )
+-								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+-								.appendTo( element );
+-						});
+-					} else if ( nodeName === "img" ) {
+-						element.attr( "src", that.currentItem.attr( "src" ) );
+-					}
+-
+-					if ( !className ) {
+-						element.css( "visibility", "hidden" );
+-					}
+-
+-					return element;
+-				},
+-				update: function(container, p) {
+-
+-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+-					if(className && !o.forcePlaceholderSize) {
+-						return;
+-					}
+-
+-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+-					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+-					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+-				}
+-			};
+-		}
+-
+-		//Create the placeholder
+-		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+-
+-		//Append it after the actual current item
+-		that.currentItem.after(that.placeholder);
+-
+-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+-		o.placeholder.update(that, that.placeholder);
+-
+-	},
+-
+-	_contactContainers: function(event) {
+-		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
+-			innermostContainer = null,
+-			innermostIndex = null;
+-
+-		// get innermost container that intersects with item
+-		for (i = this.containers.length - 1; i >= 0; i--) {
+-
+-			// never consider a container that's located within the item itself
+-			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+-				continue;
+-			}
+-
+-			if(this._intersectsWith(this.containers[i].containerCache)) {
+-
+-				// if we've already found a container and it's more "inner" than this, then continue
+-				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+-					continue;
+-				}
+-
+-				innermostContainer = this.containers[i];
+-				innermostIndex = i;
+-
+-			} else {
+-				// container doesn't intersect. trigger "out" event if necessary
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", event, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		// if no intersecting containers found, return
+-		if(!innermostContainer) {
+-			return;
+-		}
+-
+-		// move the item into the container if it's not there already
+-		if(this.containers.length === 1) {
+-			if (!this.containers[innermostIndex].containerCache.over) {
+-				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-				this.containers[innermostIndex].containerCache.over = 1;
+-			}
+-		} else {
+-
+-			//When entering a new container, we will find the item with the least distance and append our item near it
+-			dist = 10000;
+-			itemWithLeastDistance = null;
+-			floating = innermostContainer.floating || isFloating(this.currentItem);
+-			posProperty = floating ? "left" : "top";
+-			sizeProperty = floating ? "width" : "height";
+-			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
+-			for (j = this.items.length - 1; j >= 0; j--) {
+-				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+-					continue;
+-				}
+-				if(this.items[j].item[0] === this.currentItem[0]) {
+-					continue;
+-				}
+-				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
+-					continue;
+-				}
+-				cur = this.items[j].item.offset()[posProperty];
+-				nearBottom = false;
+-				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+-					nearBottom = true;
+-					cur += this.items[j][sizeProperty];
+-				}
+-
+-				if(Math.abs(cur - base) < dist) {
+-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+-					this.direction = nearBottom ? "up": "down";
+-				}
+-			}
+-
+-			//Check if dropOnEmpty is enabled
+-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+-				return;
+-			}
+-
+-			if(this.currentContainer === this.containers[innermostIndex]) {
+-				return;
+-			}
+-
+-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+-			this._trigger("change", event, this._uiHash());
+-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+-			this.currentContainer = this.containers[innermostIndex];
+-
+-			//Update the placeholder
+-			this.options.placeholder.update(this.currentContainer, this.placeholder);
+-
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		}
+-
+-
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+-
+-		//Add the helper to the DOM if that didn't happen already
+-		if(!helper.parents("body").length) {
+-			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+-		}
+-
+-		if(helper[0] === this.currentItem[0]) {
+-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+-		}
+-
+-		if(!helper[0].style.width || o.forceHelperSize) {
+-			helper.width(this.currentItem.width());
+-		}
+-		if(!helper[0].style.height || o.forceHelperSize) {
+-			helper.height(this.currentItem.height());
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		// This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		// with an ugly IE fix
+-		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.currentItem.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var ce, co, over,
+-			o = this.options;
+-		if(o.containment === "parent") {
+-			o.containment = this.helper[0].parentNode;
+-		}
+-		if(o.containment === "document" || o.containment === "window") {
+-			this.containment = [
+-				0 - this.offset.relative.left - this.offset.parent.left,
+-				0 - this.offset.relative.top - this.offset.parent.top,
+-				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
+-				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment)) {
+-			ce = $(o.containment)[0];
+-			co = $(o.containment).offset();
+-			over = ($(ce).css("overflow") !== "hidden");
+-
+-			this.containment = [
+-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+-			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var top, left,
+-			o = this.options,
+-			pageX = event.pageX,
+-			pageY = event.pageY,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		// This is another very weird special case that only happens for relative elements:
+-		// 1. If the css position is relative
+-		// 2. and the scroll parent is the document or similar to the offset parent
+-		// we have to refresh the relative offset during the scroll so there are no jumps
+-		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+-			this.offset.relative = this._getRelativeOffset();
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-
+-			if(this.containment) {
+-				if(event.pageX - this.offset.click.left < this.containment[0]) {
+-					pageX = this.containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < this.containment[1]) {
+-					pageY = this.containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > this.containment[2]) {
+-					pageX = this.containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > this.containment[3]) {
+-					pageY = this.containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+-				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+-				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																// The absolute mouse position
+-				this.offset.click.top -													// Click offset (relative to the element)
+-				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX -																// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_rearrange: function(event, i, a, hardRefresh) {
+-
+-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+-
+-		//Various things done here to improve the performance:
+-		// 1. we create a setTimeout, that calls refreshPositions
+-		// 2. on the instance, we have a counter variable, that get's higher after every append
+-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+-		// 4. this lets only the last addition to the timeout stack through
+-		this.counter = this.counter ? ++this.counter : 1;
+-		var counter = this.counter;
+-
+-		this._delay(function() {
+-			if(counter === this.counter) {
+-				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+-			}
+-		});
+-
+-	},
+-
+-	_clear: function(event, noPropagation) {
+-
+-		this.reverting = false;
+-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+-		// everything else normalized again
+-		var i,
+-			delayedTriggers = [];
+-
+-		// We first have to update the dom position of the actual currentItem
+-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+-		if(!this._noFinalSort && this.currentItem.parent().length) {
+-			this.placeholder.before(this.currentItem);
+-		}
+-		this._noFinalSort = null;
+-
+-		if(this.helper[0] === this.currentItem[0]) {
+-			for(i in this._storedCSS) {
+-				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+-					this._storedCSS[i] = "";
+-				}
+-			}
+-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-		} else {
+-			this.currentItem.show();
+-		}
+-
+-		if(this.fromOutside && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+-		}
+-		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+-		}
+-
+-		// Check if the items Container has Changed and trigger appropriate
+-		// events.
+-		if (this !== this.currentContainer) {
+-			if(!noPropagation) {
+-				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
+-			}
+-		}
+-
+-
+-		//Post events to containers
+-		for (i = this.containers.length - 1; i >= 0; i--){
+-			if(!noPropagation) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-			}
+-			if(this.containers[i].containerCache.over) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-				this.containers[i].containerCache.over = 0;
+-			}
+-		}
+-
+-		//Do what was originally in plugins
+-		if ( this.storedCursor ) {
+-			this.document.find( "body" ).css( "cursor", this.storedCursor );
+-			this.storedStylesheet.remove();
+-		}
+-		if(this._storedOpacity) {
+-			this.helper.css("opacity", this._storedOpacity);
+-		}
+-		if(this._storedZIndex) {
+-			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+-		}
+-
+-		this.dragging = false;
+-		if(this.cancelHelperRemoval) {
+-			if(!noPropagation) {
+-				this._trigger("beforeStop", event, this._uiHash());
+-				for (i=0; i < delayedTriggers.length; i++) {
+-					delayedTriggers[i].call(this, event);
+-				} //Trigger all delayed events
+-				this._trigger("stop", event, this._uiHash());
+-			}
+-
+-			this.fromOutside = false;
+-			return false;
+-		}
+-
+-		if(!noPropagation) {
+-			this._trigger("beforeStop", event, this._uiHash());
+-		}
+-
+-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-
+-		if(!noPropagation) {
+-			for (i=0; i < delayedTriggers.length; i++) {
+-				delayedTriggers[i].call(this, event);
+-			} //Trigger all delayed events
+-			this._trigger("stop", event, this._uiHash());
+-		}
+-
+-		this.fromOutside = false;
+-		return true;
+-
+-	},
+-
+-	_trigger: function() {
+-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+-			this.cancel();
+-		}
+-	},
+-
+-	_uiHash: function(_inst) {
+-		var inst = _inst || this;
+-		return {
+-			helper: inst.helper,
+-			placeholder: inst.placeholder || $([]),
+-			position: inst.position,
+-			originalPosition: inst.originalPosition,
+-			offset: inst.positionAbs,
+-			item: inst.currentItem,
+-			sender: _inst ? _inst.element : null
+-		};
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var uid = 0,
+-	hideProps = {},
+-	showProps = {};
+-
+-hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
+-	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
+-showProps.height = showProps.paddingTop = showProps.paddingBottom =
+-	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
+-
+-$.widget( "ui.accordion", {
+-	version: "1.10.3",
+-	options: {
+-		active: 0,
+-		animate: {},
+-		collapsible: false,
+-		event: "click",
+-		header: "> li > :first-child,> :not(li):even",
+-		heightStyle: "auto",
+-		icons: {
+-			activeHeader: "ui-icon-triangle-1-s",
+-			header: "ui-icon-triangle-1-e"
+-		},
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null
+-	},
+-
+-	_create: function() {
+-		var options = this.options;
+-		this.prevShow = this.prevHide = $();
+-		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+-			// ARIA
+-			.attr( "role", "tablist" );
+-
+-		// don't allow collapsible: false and active: false / null
+-		if ( !options.collapsible && (options.active === false || options.active == null) ) {
+-			options.active = 0;
+-		}
+-
+-		this._processPanels();
+-		// handle negative values
+-		if ( options.active < 0 ) {
+-			options.active += this.headers.length;
+-		}
+-		this._refresh();
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			header: this.active,
+-			panel: !this.active.length ? $() : this.active.next(),
+-			content: !this.active.length ? $() : this.active.next()
+-		};
+-	},
+-
+-	_createIcons: function() {
+-		var icons = this.options.icons;
+-		if ( icons ) {
+-			$( "<span>" )
+-				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+-				.prependTo( this.headers );
+-			this.active.children( ".ui-accordion-header-icon" )
+-				.removeClass( icons.header )
+-				.addClass( icons.activeHeader );
+-			this.headers.addClass( "ui-accordion-icons" );
+-		}
+-	},
+-
+-	_destroyIcons: function() {
+-		this.headers
+-			.removeClass( "ui-accordion-icons" )
+-			.children( ".ui-accordion-header-icon" )
+-				.remove();
+-	},
+-
+-	_destroy: function() {
+-		var contents;
+-
+-		// clean up main element
+-		this.element
+-			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+-			.removeAttr( "role" );
+-
+-		// clean up headers
+-		this.headers
+-			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-selected" )
+-			.removeAttr( "aria-controls" )
+-			.removeAttr( "tabIndex" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		this._destroyIcons();
+-
+-		// clean up content panels
+-		contents = this.headers.next()
+-			.css( "display", "" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-expanded" )
+-			.removeAttr( "aria-hidden" )
+-			.removeAttr( "aria-labelledby" )
+-			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		if ( this.options.heightStyle !== "content" ) {
+-			contents.css( "height", "" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "event" ) {
+-			if ( this.options.event ) {
+-				this._off( this.headers, this.options.event );
+-			}
+-			this._setupEvents( value );
+-		}
+-
+-		this._super( key, value );
+-
+-		// setting collapsible: false while collapsed; open first panel
+-		if ( key === "collapsible" && !value && this.options.active === false ) {
+-			this._activate( 0 );
+-		}
+-
+-		if ( key === "icons" ) {
+-			this._destroyIcons();
+-			if ( value ) {
+-				this._createIcons();
+-			}
+-		}
+-
+-		// #5332 - opacity doesn't cascade to positioned elements in IE
+-		// so we need to add the disabled class to the headers and panels
+-		if ( key === "disabled" ) {
+-			this.headers.add( this.headers.next() )
+-				.toggleClass( "ui-state-disabled", !!value );
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		if ( event.altKey || event.ctrlKey ) {
+-			return;
+-		}
+-
+-		var keyCode = $.ui.keyCode,
+-			length = this.headers.length,
+-			currentIndex = this.headers.index( event.target ),
+-			toFocus = false;
+-
+-		switch ( event.keyCode ) {
+-			case keyCode.RIGHT:
+-			case keyCode.DOWN:
+-				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+-				break;
+-			case keyCode.LEFT:
+-			case keyCode.UP:
+-				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+-				break;
+-			case keyCode.SPACE:
+-			case keyCode.ENTER:
+-				this._eventHandler( event );
+-				break;
+-			case keyCode.HOME:
+-				toFocus = this.headers[ 0 ];
+-				break;
+-			case keyCode.END:
+-				toFocus = this.headers[ length - 1 ];
+-				break;
+-		}
+-
+-		if ( toFocus ) {
+-			$( event.target ).attr( "tabIndex", -1 );
+-			$( toFocus ).attr( "tabIndex", 0 );
+-			toFocus.focus();
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_panelKeyDown : function( event ) {
+-		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+-			$( event.currentTarget ).prev().focus();
+-		}
+-	},
+-
+-	refresh: function() {
+-		var options = this.options;
+-		this._processPanels();
+-
+-		// was collapsed or no panel
+-		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// active false only when collapsible is true
+-		} else if ( options.active === false ) {
+-			this._activate( 0 );
+-		// was active, but active panel is gone
+-		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining panel are disabled
+-			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous panel
+-			} else {
+-				this._activate( Math.max( 0, options.active - 1 ) );
+-			}
+-		// was active, active panel still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.headers.index( this.active );
+-		}
+-
+-		this._destroyIcons();
+-
+-		this._refresh();
+-	},
+-
+-	_processPanels: function() {
+-		this.headers = this.element.find( this.options.header )
+-			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+-
+-		this.headers.next()
+-			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+-			.filter(":not(.ui-accordion-content-active)")
+-			.hide();
+-	},
+-
+-	_refresh: function() {
+-		var maxHeight,
+-			options = this.options,
+-			heightStyle = options.heightStyle,
+-			parent = this.element.parent(),
+-			accordionId = this.accordionId = "ui-accordion-" +
+-				(this.element.attr( "id" ) || ++uid);
+-
+-		this.active = this._findActive( options.active )
+-			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+-			.removeClass( "ui-corner-all" );
+-		this.active.next()
+-			.addClass( "ui-accordion-content-active" )
+-			.show();
+-
+-		this.headers
+-			.attr( "role", "tab" )
+-			.each(function( i ) {
+-				var header = $( this ),
+-					headerId = header.attr( "id" ),
+-					panel = header.next(),
+-					panelId = panel.attr( "id" );
+-				if ( !headerId ) {
+-					headerId = accordionId + "-header-" + i;
+-					header.attr( "id", headerId );
+-				}
+-				if ( !panelId ) {
+-					panelId = accordionId + "-panel-" + i;
+-					panel.attr( "id", panelId );
+-				}
+-				header.attr( "aria-controls", panelId );
+-				panel.attr( "aria-labelledby", headerId );
+-			})
+-			.next()
+-				.attr( "role", "tabpanel" );
+-
+-		this.headers
+-			.not( this.active )
+-			.attr({
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "false",
+-					"aria-hidden": "true"
+-				})
+-				.hide();
+-
+-		// make sure at least one header is in the tab order
+-		if ( !this.active.length ) {
+-			this.headers.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active.attr({
+-				"aria-selected": "true",
+-				tabIndex: 0
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-
+-		this._createIcons();
+-
+-		this._setupEvents( options.event );
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.headers.each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.headers.next()
+-				.each(function() {
+-					$( this ).height( Math.max( 0, maxHeight -
+-						$( this ).innerHeight() + $( this ).height() ) );
+-				})
+-				.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.headers.next()
+-				.each(function() {
+-					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+-				})
+-				.height( maxHeight );
+-		}
+-	},
+-
+-	_activate: function( index ) {
+-		var active = this._findActive( index )[ 0 ];
+-
+-		// trying to activate the already active panel
+-		if ( active === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the currently active header
+-		active = active || this.active[ 0 ];
+-
+-		this._eventHandler({
+-			target: active,
+-			currentTarget: active,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( selector ) {
+-		return typeof selector === "number" ? this.headers.eq( selector ) : $();
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			keydown: "_keydown"
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.headers.add( this.headers.next() ) );
+-		this._on( this.headers, events );
+-		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+-		this._hoverable( this.headers );
+-		this._focusable( this.headers );
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			clicked = $( event.currentTarget ),
+-			clickedIsActive = clicked[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : clicked.next(),
+-			toHide = active.next(),
+-			eventData = {
+-				oldHeader: active,
+-				oldPanel: toHide,
+-				newHeader: collapsing ? $() : clicked,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if (
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.headers.index( clicked );
+-
+-		// when the call to ._toggle() comes after the class changes
+-		// it causes a very odd bug in IE 8 (see #6720)
+-		this.active = clickedIsActive ? $() : clicked;
+-		this._toggle( eventData );
+-
+-		// switch classes
+-		// corner classes on the previously active header stay after the animation
+-		active.removeClass( "ui-accordion-header-active ui-state-active" );
+-		if ( options.icons ) {
+-			active.children( ".ui-accordion-header-icon" )
+-				.removeClass( options.icons.activeHeader )
+-				.addClass( options.icons.header );
+-		}
+-
+-		if ( !clickedIsActive ) {
+-			clicked
+-				.removeClass( "ui-corner-all" )
+-				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+-			if ( options.icons ) {
+-				clicked.children( ".ui-accordion-header-icon" )
+-					.removeClass( options.icons.header )
+-					.addClass( options.icons.activeHeader );
+-			}
+-
+-			clicked
+-				.next()
+-				.addClass( "ui-accordion-content-active" );
+-		}
+-	},
+-
+-	_toggle: function( data ) {
+-		var toShow = data.newPanel,
+-			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+-
+-		// handle activating a panel during the animation for another activation
+-		this.prevShow.add( this.prevHide ).stop( true, true );
+-		this.prevShow = toShow;
+-		this.prevHide = toHide;
+-
+-		if ( this.options.animate ) {
+-			this._animate( toShow, toHide, data );
+-		} else {
+-			toHide.hide();
+-			toShow.show();
+-			this._toggleComplete( data );
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		toHide.prev().attr( "aria-selected", "false" );
+-		// if we're switching panels, remove the old header from the tab order
+-		// if we're opening from collapsed state, remove the previous header from the tab order
+-		// if we're collapsing, then keep the collapsing header in the tab order
+-		if ( toShow.length && toHide.length ) {
+-			toHide.prev().attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.headers.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow
+-			.attr({
+-				"aria-expanded": "true",
+-				"aria-hidden": "false"
+-			})
+-			.prev()
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-	},
+-
+-	_animate: function( toShow, toHide, data ) {
+-		var total, easing, duration,
+-			that = this,
+-			adjust = 0,
+-			down = toShow.length &&
+-				( !toHide.length || ( toShow.index() < toHide.index() ) ),
+-			animate = this.options.animate || {},
+-			options = down && animate.down || animate,
+-			complete = function() {
+-				that._toggleComplete( data );
+-			};
+-
+-		if ( typeof options === "number" ) {
+-			duration = options;
+-		}
+-		if ( typeof options === "string" ) {
+-			easing = options;
+-		}
+-		// fall back from options to animation in case of partial down settings
+-		easing = easing || options.easing || animate.easing;
+-		duration = duration || options.duration || animate.duration;
+-
+-		if ( !toHide.length ) {
+-			return toShow.animate( showProps, duration, easing, complete );
+-		}
+-		if ( !toShow.length ) {
+-			return toHide.animate( hideProps, duration, easing, complete );
+-		}
+-
+-		total = toShow.show().outerHeight();
+-		toHide.animate( hideProps, {
+-			duration: duration,
+-			easing: easing,
+-			step: function( now, fx ) {
+-				fx.now = Math.round( now );
+-			}
+-		});
+-		toShow
+-			.hide()
+-			.animate( showProps, {
+-				duration: duration,
+-				easing: easing,
+-				complete: complete,
+-				step: function( now, fx ) {
+-					fx.now = Math.round( now );
+-					if ( fx.prop !== "height" ) {
+-						adjust += fx.now;
+-					} else if ( that.options.heightStyle !== "content" ) {
+-						fx.now = Math.round( total - toHide.outerHeight() - adjust );
+-						adjust = 0;
+-					}
+-				}
+-			});
+-	},
+-
+-	_toggleComplete: function( data ) {
+-		var toHide = data.oldPanel;
+-
+-		toHide
+-			.removeClass( "ui-accordion-content-active" )
+-			.prev()
+-				.removeClass( "ui-corner-top" )
+-				.addClass( "ui-corner-all" );
+-
+-		// Work around for rendering bug in IE (#5421)
+-		if ( toHide.length ) {
+-			toHide.parent()[0].className = toHide.parent()[0].className;
+-		}
+-
+-		this._trigger( "activate", null, data );
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-// used to prevent race conditions with remote data sources
+-var requestIndex = 0;
+-
+-$.widget( "ui.autocomplete", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	options: {
+-		appendTo: null,
+-		autoFocus: false,
+-		delay: 300,
+-		minLength: 1,
+-		position: {
+-			my: "left top",
+-			at: "left bottom",
+-			collision: "none"
+-		},
+-		source: null,
+-
+-		// callbacks
+-		change: null,
+-		close: null,
+-		focus: null,
+-		open: null,
+-		response: null,
+-		search: null,
+-		select: null
+-	},
+-
+-	pending: 0,
+-
+-	_create: function() {
+-		// Some browsers only repeat keydown events, not keypress events,
+-		// so we use the suppressKeyPress flag to determine if we've already
+-		// handled the keydown event. #7269
+-		// Unfortunately the code for & in keypress is the same as the up arrow,
+-		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
+-		// events when we know the keydown event was used to modify the
+-		// search term. #7799
+-		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+-			nodeName = this.element[0].nodeName.toLowerCase(),
+-			isTextarea = nodeName === "textarea",
+-			isInput = nodeName === "input";
+-
+-		this.isMultiLine =
+-			// Textareas are always multi-line
+-			isTextarea ? true :
+-			// Inputs are always single-line, even if inside a contentEditable element
+-			// IE also treats inputs as contentEditable
+-			isInput ? false :
+-			// All other element types are determined by whether or not they're contentEditable
+-			this.element.prop( "isContentEditable" );
+-
+-		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+-		this.isNewMenu = true;
+-
+-		this.element
+-			.addClass( "ui-autocomplete-input" )
+-			.attr( "autocomplete", "off" );
+-
+-		this._on( this.element, {
+-			keydown: function( event ) {
+-				/*jshint maxcomplexity:15*/
+-				if ( this.element.prop( "readOnly" ) ) {
+-					suppressKeyPress = true;
+-					suppressInput = true;
+-					suppressKeyPressRepeat = true;
+-					return;
+-				}
+-
+-				suppressKeyPress = false;
+-				suppressInput = false;
+-				suppressKeyPressRepeat = false;
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					suppressKeyPress = true;
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					suppressKeyPress = true;
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					suppressKeyPress = true;
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					suppressKeyPress = true;
+-					this._keyEvent( "next", event );
+-					break;
+-				case keyCode.ENTER:
+-				case keyCode.NUMPAD_ENTER:
+-					// when menu is open and has focus
+-					if ( this.menu.active ) {
+-						// #6055 - Opera still allows the keypress to occur
+-						// which causes forms to submit
+-						suppressKeyPress = true;
+-						event.preventDefault();
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.TAB:
+-					if ( this.menu.active ) {
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.ESCAPE:
+-					if ( this.menu.element.is( ":visible" ) ) {
+-						this._value( this.term );
+-						this.close( event );
+-						// Different browsers have different default behavior for escape
+-						// Single press can mean undo or clear
+-						// Double press in IE means clear the whole form
+-						event.preventDefault();
+-					}
+-					break;
+-				default:
+-					suppressKeyPressRepeat = true;
+-					// search timeout should be triggered before the input value is changed
+-					this._searchTimeout( event );
+-					break;
+-				}
+-			},
+-			keypress: function( event ) {
+-				if ( suppressKeyPress ) {
+-					suppressKeyPress = false;
+-					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-						event.preventDefault();
+-					}
+-					return;
+-				}
+-				if ( suppressKeyPressRepeat ) {
+-					return;
+-				}
+-
+-				// replicate some key handlers to allow them to repeat in Firefox and Opera
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					this._keyEvent( "next", event );
+-					break;
+-				}
+-			},
+-			input: function( event ) {
+-				if ( suppressInput ) {
+-					suppressInput = false;
+-					event.preventDefault();
+-					return;
+-				}
+-				this._searchTimeout( event );
+-			},
+-			focus: function() {
+-				this.selectedItem = null;
+-				this.previous = this._value();
+-			},
+-			blur: function( event ) {
+-				if ( this.cancelBlur ) {
+-					delete this.cancelBlur;
+-					return;
+-				}
+-
+-				clearTimeout( this.searching );
+-				this.close( event );
+-				this._change( event );
+-			}
+-		});
+-
+-		this._initSource();
+-		this.menu = $( "<ul>" )
+-			.addClass( "ui-autocomplete ui-front" )
+-			.appendTo( this._appendTo() )
+-			.menu({
+-				// disable ARIA support, the live region takes care of that
+-				role: null
+-			})
+-			.hide()
+-			.data( "ui-menu" );
+-
+-		this._on( this.menu.element, {
+-			mousedown: function( event ) {
+-				// prevent moving focus out of the text field
+-				event.preventDefault();
+-
+-				// IE doesn't prevent moving focus even with event.preventDefault()
+-				// so we set a flag to know when we should ignore the blur event
+-				this.cancelBlur = true;
+-				this._delay(function() {
+-					delete this.cancelBlur;
+-				});
+-
+-				// clicking on the scrollbar causes focus to shift to the body
+-				// but we can't detect a mouseup or a click immediately afterward
+-				// so we have to track the next mousedown and close the menu if
+-				// the user clicks somewhere outside of the autocomplete
+-				var menuElement = this.menu.element[ 0 ];
+-				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+-					this._delay(function() {
+-						var that = this;
+-						this.document.one( "mousedown", function( event ) {
+-							if ( event.target !== that.element[ 0 ] &&
+-									event.target !== menuElement &&
+-									!$.contains( menuElement, event.target ) ) {
+-								that.close();
+-							}
+-						});
+-					});
+-				}
+-			},
+-			menufocus: function( event, ui ) {
+-				// support: Firefox
+-				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
+-				if ( this.isNewMenu ) {
+-					this.isNewMenu = false;
+-					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+-						this.menu.blur();
+-
+-						this.document.one( "mousemove", function() {
+-							$( event.target ).trigger( event.originalEvent );
+-						});
+-
+-						return;
+-					}
+-				}
+-
+-				var item = ui.item.data( "ui-autocomplete-item" );
+-				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+-					// use value to match what will end up in the input, if it was a key event
+-					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+-						this._value( item.value );
+-					}
+-				} else {
+-					// Normally the input is populated with the item's value as the
+-					// menu is navigated, causing screen readers to notice a change and
+-					// announce the item. Since the focus event was canceled, this doesn't
+-					// happen, so we update the live region so that screen readers can
+-					// still notice the change and announce it.
+-					this.liveRegion.text( item.value );
+-				}
+-			},
+-			menuselect: function( event, ui ) {
+-				var item = ui.item.data( "ui-autocomplete-item" ),
+-					previous = this.previous;
+-
+-				// only trigger when focus was lost (click on menu)
+-				if ( this.element[0] !== this.document[0].activeElement ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// #6109 - IE triggers two focus events and the second
+-					// is asynchronous, so we need to reset the previous
+-					// term synchronously and asynchronously :-(
+-					this._delay(function() {
+-						this.previous = previous;
+-						this.selectedItem = item;
+-					});
+-				}
+-
+-				if ( false !== this._trigger( "select", event, { item: item } ) ) {
+-					this._value( item.value );
+-				}
+-				// reset the term after the select event
+-				// this allows custom select handling to work properly
+-				this.term = this._value();
+-
+-				this.close( event );
+-				this.selectedItem = item;
+-			}
+-		});
+-
+-		this.liveRegion = $( "<span>", {
+-				role: "status",
+-				"aria-live": "polite"
+-			})
+-			.addClass( "ui-helper-hidden-accessible" )
+-			.insertBefore( this.element );
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		clearTimeout( this.searching );
+-		this.element
+-			.removeClass( "ui-autocomplete-input" )
+-			.removeAttr( "autocomplete" );
+-		this.menu.element.remove();
+-		this.liveRegion.remove();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "source" ) {
+-			this._initSource();
+-		}
+-		if ( key === "appendTo" ) {
+-			this.menu.element.appendTo( this._appendTo() );
+-		}
+-		if ( key === "disabled" && value && this.xhr ) {
+-			this.xhr.abort();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-
+-		if ( element ) {
+-			element = element.jquery || element.nodeType ?
+-				$( element ) :
+-				this.document.find( element ).eq( 0 );
+-		}
+-
+-		if ( !element ) {
+-			element = this.element.closest( ".ui-front" );
+-		}
+-
+-		if ( !element.length ) {
+-			element = this.document[0].body;
+-		}
+-
+-		return element;
+-	},
+-
+-	_initSource: function() {
+-		var array, url,
+-			that = this;
+-		if ( $.isArray(this.options.source) ) {
+-			array = this.options.source;
+-			this.source = function( request, response ) {
+-				response( $.ui.autocomplete.filter( array, request.term ) );
+-			};
+-		} else if ( typeof this.options.source === "string" ) {
+-			url = this.options.source;
+-			this.source = function( request, response ) {
+-				if ( that.xhr ) {
+-					that.xhr.abort();
+-				}
+-				that.xhr = $.ajax({
+-					url: url,
+-					data: request,
+-					dataType: "json",
+-					success: function( data ) {
+-						response( data );
+-					},
+-					error: function() {
+-						response( [] );
+-					}
+-				});
+-			};
+-		} else {
+-			this.source = this.options.source;
+-		}
+-	},
+-
+-	_searchTimeout: function( event ) {
+-		clearTimeout( this.searching );
+-		this.searching = this._delay(function() {
+-			// only search if the value has changed
+-			if ( this.term !== this._value() ) {
+-				this.selectedItem = null;
+-				this.search( null, event );
+-			}
+-		}, this.options.delay );
+-	},
+-
+-	search: function( value, event ) {
+-		value = value != null ? value : this._value();
+-
+-		// always save the actual value, not the one passed as an argument
+-		this.term = this._value();
+-
+-		if ( value.length < this.options.minLength ) {
+-			return this.close( event );
+-		}
+-
+-		if ( this._trigger( "search", event ) === false ) {
+-			return;
+-		}
+-
+-		return this._search( value );
+-	},
+-
+-	_search: function( value ) {
+-		this.pending++;
+-		this.element.addClass( "ui-autocomplete-loading" );
+-		this.cancelSearch = false;
+-
+-		this.source( { term: value }, this._response() );
+-	},
+-
+-	_response: function() {
+-		var that = this,
+-			index = ++requestIndex;
+-
+-		return function( content ) {
+-			if ( index === requestIndex ) {
+-				that.__response( content );
+-			}
+-
+-			that.pending--;
+-			if ( !that.pending ) {
+-				that.element.removeClass( "ui-autocomplete-loading" );
+-			}
+-		};
+-	},
+-
+-	__response: function( content ) {
+-		if ( content ) {
+-			content = this._normalize( content );
+-		}
+-		this._trigger( "response", null, { content: content } );
+-		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+-			this._suggest( content );
+-			this._trigger( "open" );
+-		} else {
+-			// use ._close() instead of .close() so we don't cancel future searches
+-			this._close();
+-		}
+-	},
+-
+-	close: function( event ) {
+-		this.cancelSearch = true;
+-		this._close( event );
+-	},
+-
+-	_close: function( event ) {
+-		if ( this.menu.element.is( ":visible" ) ) {
+-			this.menu.element.hide();
+-			this.menu.blur();
+-			this.isNewMenu = true;
+-			this._trigger( "close", event );
+-		}
+-	},
+-
+-	_change: function( event ) {
+-		if ( this.previous !== this._value() ) {
+-			this._trigger( "change", event, { item: this.selectedItem } );
+-		}
+-	},
+-
+-	_normalize: function( items ) {
+-		// assume all items have the right format when the first item is complete
+-		if ( items.length && items[0].label && items[0].value ) {
+-			return items;
+-		}
+-		return $.map( items, function( item ) {
+-			if ( typeof item === "string" ) {
+-				return {
+-					label: item,
+-					value: item
+-				};
+-			}
+-			return $.extend({
+-				label: item.label || item.value,
+-				value: item.value || item.label
+-			}, item );
+-		});
+-	},
+-
+-	_suggest: function( items ) {
+-		var ul = this.menu.element.empty();
+-		this._renderMenu( ul, items );
+-		this.isNewMenu = true;
+-		this.menu.refresh();
+-
+-		// size and position menu
+-		ul.show();
+-		this._resizeMenu();
+-		ul.position( $.extend({
+-			of: this.element
+-		}, this.options.position ));
+-
+-		if ( this.options.autoFocus ) {
+-			this.menu.next();
+-		}
+-	},
+-
+-	_resizeMenu: function() {
+-		var ul = this.menu.element;
+-		ul.outerWidth( Math.max(
+-			// Firefox wraps long text (possibly a rounding bug)
+-			// so we add 1px to avoid the wrapping (#7513)
+-			ul.width( "" ).outerWidth() + 1,
+-			this.element.outerWidth()
+-		) );
+-	},
+-
+-	_renderMenu: function( ul, items ) {
+-		var that = this;
+-		$.each( items, function( index, item ) {
+-			that._renderItemData( ul, item );
+-		});
+-	},
+-
+-	_renderItemData: function( ul, item ) {
+-		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+-	},
+-
+-	_renderItem: function( ul, item ) {
+-		return $( "<li>" )
+-			.append( $( "<a>" ).text( item.label ) )
+-			.appendTo( ul );
+-	},
+-
+-	_move: function( direction, event ) {
+-		if ( !this.menu.element.is( ":visible" ) ) {
+-			this.search( null, event );
+-			return;
+-		}
+-		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+-				this.menu.isLastItem() && /^next/.test( direction ) ) {
+-			this._value( this.term );
+-			this.menu.blur();
+-			return;
+-		}
+-		this.menu[ direction ]( event );
+-	},
+-
+-	widget: function() {
+-		return this.menu.element;
+-	},
+-
+-	_value: function() {
+-		return this.valueMethod.apply( this.element, arguments );
+-	},
+-
+-	_keyEvent: function( keyEvent, event ) {
+-		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-			this._move( keyEvent, event );
+-
+-			// prevents moving cursor to beginning/end of the text field in some browsers
+-			event.preventDefault();
+-		}
+-	}
+-});
+-
+-$.extend( $.ui.autocomplete, {
+-	escapeRegex: function( value ) {
+-		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+-	},
+-	filter: function(array, term) {
+-		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+-		return $.grep( array, function(value) {
+-			return matcher.test( value.label || value.value || value );
+-		});
+-	}
+-});
+-
+-
+-// live region extension, adding a `messages` option
+-// NOTE: This is an experimental API. We are still investigating
+-// a full solution for string manipulation and internationalization.
+-$.widget( "ui.autocomplete", $.ui.autocomplete, {
+-	options: {
+-		messages: {
+-			noResults: "No search results.",
+-			results: function( amount ) {
+-				return amount + ( amount > 1 ? " results are" : " result is" ) +
+-					" available, use up and down arrow keys to navigate.";
+-			}
+-		}
+-	},
+-
+-	__response: function( content ) {
+-		var message;
+-		this._superApply( arguments );
+-		if ( this.options.disabled || this.cancelSearch ) {
+-			return;
+-		}
+-		if ( content && content.length ) {
+-			message = this.options.messages.results( content.length );
+-		} else {
+-			message = this.options.messages.noResults;
+-		}
+-		this.liveRegion.text( message );
+-	}
+-});
+-
+-}( jQuery ));
+-(function( $, undefined ) {
+-
+-var lastActive, startXPos, startYPos, clickDragged,
+-	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+-	stateClasses = "ui-state-hover ui-state-active ",
+-	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+-	formResetHandler = function() {
+-		var form = $( this );
+-		setTimeout(function() {
+-			form.find( ":ui-button" ).button( "refresh" );
+-		}, 1 );
+-	},
+-	radioGroup = function( radio ) {
+-		var name = radio.name,
+-			form = radio.form,
+-			radios = $( [] );
+-		if ( name ) {
+-			name = name.replace( /'/g, "\\'" );
+-			if ( form ) {
+-				radios = $( form ).find( "[name='" + name + "']" );
+-			} else {
+-				radios = $( "[name='" + name + "']", radio.ownerDocument )
+-					.filter(function() {
+-						return !this.form;
+-					});
+-			}
+-		}
+-		return radios;
+-	};
+-
+-$.widget( "ui.button", {
+-	version: "1.10.3",
+-	defaultElement: "<button>",
+-	options: {
+-		disabled: null,
+-		text: true,
+-		label: null,
+-		icons: {
+-			primary: null,
+-			secondary: null
+-		}
+-	},
+-	_create: function() {
+-		this.element.closest( "form" )
+-			.unbind( "reset" + this.eventNamespace )
+-			.bind( "reset" + this.eventNamespace, formResetHandler );
+-
+-		if ( typeof this.options.disabled !== "boolean" ) {
+-			this.options.disabled = !!this.element.prop( "disabled" );
+-		} else {
+-			this.element.prop( "disabled", this.options.disabled );
+-		}
+-
+-		this._determineButtonType();
+-		this.hasTitle = !!this.buttonElement.attr( "title" );
+-
+-		var that = this,
+-			options = this.options,
+-			toggleButton = this.type === "checkbox" || this.type === "radio",
+-			activeClass = !toggleButton ? "ui-state-active" : "",
+-			focusClass = "ui-state-focus";
+-
+-		if ( options.label === null ) {
+-			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+-		}
+-
+-		this._hoverable( this.buttonElement );
+-
+-		this.buttonElement
+-			.addClass( baseClasses )
+-			.attr( "role", "button" )
+-			.bind( "mouseenter" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				if ( this === lastActive ) {
+-					$( this ).addClass( "ui-state-active" );
+-				}
+-			})
+-			.bind( "mouseleave" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( activeClass );
+-			})
+-			.bind( "click" + this.eventNamespace, function( event ) {
+-				if ( options.disabled ) {
+-					event.preventDefault();
+-					event.stopImmediatePropagation();
+-				}
+-			});
+-
+-		this.element
+-			.bind( "focus" + this.eventNamespace, function() {
+-				// no need to check disabled, focus won't be triggered anyway
+-				that.buttonElement.addClass( focusClass );
+-			})
+-			.bind( "blur" + this.eventNamespace, function() {
+-				that.buttonElement.removeClass( focusClass );
+-			});
+-
+-		if ( toggleButton ) {
+-			this.element.bind( "change" + this.eventNamespace, function() {
+-				if ( clickDragged ) {
+-					return;
+-				}
+-				that.refresh();
+-			});
+-			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+-			// prevents issue where button state changes but checkbox/radio checked state
+-			// does not in Firefox (see ticket #6970)
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					clickDragged = false;
+-					startXPos = event.pageX;
+-					startYPos = event.pageY;
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+-						clickDragged = true;
+-					}
+-			});
+-		}
+-
+-		if ( this.type === "checkbox" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-			});
+-		} else if ( this.type === "radio" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).addClass( "ui-state-active" );
+-				that.buttonElement.attr( "aria-pressed", "true" );
+-
+-				var radio = that.element[ 0 ];
+-				radioGroup( radio )
+-					.not( radio )
+-					.map(function() {
+-						return $( this ).button( "widget" )[ 0 ];
+-					})
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			});
+-		} else {
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).addClass( "ui-state-active" );
+-					lastActive = this;
+-					that.document.one( "mouseup", function() {
+-						lastActive = null;
+-					});
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).removeClass( "ui-state-active" );
+-				})
+-				.bind( "keydown" + this.eventNamespace, function(event) {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+-						$( this ).addClass( "ui-state-active" );
+-					}
+-				})
+-				// see #8559, we bind to blur here in case the button element loses
+-				// focus between keydown and keyup, it would be left in an "active" state
+-				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+-					$( this ).removeClass( "ui-state-active" );
+-				});
+-
+-			if ( this.buttonElement.is("a") ) {
+-				this.buttonElement.keyup(function(event) {
+-					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+-						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+-						$( this ).click();
+-					}
+-				});
+-			}
+-		}
+-
+-		// TODO: pull out $.Widget's handling for the disabled option into
+-		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+-		// be overridden by individual plugins
+-		this._setOption( "disabled", options.disabled );
+-		this._resetButton();
+-	},
+-
+-	_determineButtonType: function() {
+-		var ancestor, labelSelector, checked;
+-
+-		if ( this.element.is("[type=checkbox]") ) {
+-			this.type = "checkbox";
+-		} else if ( this.element.is("[type=radio]") ) {
+-			this.type = "radio";
+-		} else if ( this.element.is("input") ) {
+-			this.type = "input";
+-		} else {
+-			this.type = "button";
+-		}
+-
+-		if ( this.type === "checkbox" || this.type === "radio" ) {
+-			// we don't search against the document in case the element
+-			// is disconnected from the DOM
+-			ancestor = this.element.parents().last();
+-			labelSelector = "label[for='" + this.element.attr("id") + "']";
+-			this.buttonElement = ancestor.find( labelSelector );
+-			if ( !this.buttonElement.length ) {
+-				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+-				this.buttonElement = ancestor.filter( labelSelector );
+-				if ( !this.buttonElement.length ) {
+-					this.buttonElement = ancestor.find( labelSelector );
+-				}
+-			}
+-			this.element.addClass( "ui-helper-hidden-accessible" );
+-
+-			checked = this.element.is( ":checked" );
+-			if ( checked ) {
+-				this.buttonElement.addClass( "ui-state-active" );
+-			}
+-			this.buttonElement.prop( "aria-pressed", checked );
+-		} else {
+-			this.buttonElement = this.element;
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.buttonElement;
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-helper-hidden-accessible" );
+-		this.buttonElement
+-			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-pressed" )
+-			.html( this.buttonElement.find(".ui-button-text").html() );
+-
+-		if ( !this.hasTitle ) {
+-			this.buttonElement.removeAttr( "title" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-			} else {
+-				this.element.prop( "disabled", false );
+-			}
+-			return;
+-		}
+-		this._resetButton();
+-	},
+-
+-	refresh: function() {
+-		//See #8237 & #8828
+-		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+-
+-		if ( isDisabled !== this.options.disabled ) {
+-			this._setOption( "disabled", isDisabled );
+-		}
+-		if ( this.type === "radio" ) {
+-			radioGroup( this.element[0] ).each(function() {
+-				if ( $( this ).is( ":checked" ) ) {
+-					$( this ).button( "widget" )
+-						.addClass( "ui-state-active" )
+-						.attr( "aria-pressed", "true" );
+-				} else {
+-					$( this ).button( "widget" )
+-						.removeClass( "ui-state-active" )
+-						.attr( "aria-pressed", "false" );
+-				}
+-			});
+-		} else if ( this.type === "checkbox" ) {
+-			if ( this.element.is( ":checked" ) ) {
+-				this.buttonElement
+-					.addClass( "ui-state-active" )
+-					.attr( "aria-pressed", "true" );
+-			} else {
+-				this.buttonElement
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			}
+-		}
+-	},
+-
+-	_resetButton: function() {
+-		if ( this.type === "input" ) {
+-			if ( this.options.label ) {
+-				this.element.val( this.options.label );
+-			}
+-			return;
+-		}
+-		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+-			buttonText = $( "<span></span>", this.document[0] )
+-				.addClass( "ui-button-text" )
+-				.html( this.options.label )
+-				.appendTo( buttonElement.empty() )
+-				.text(),
+-			icons = this.options.icons,
+-			multipleIcons = icons.primary && icons.secondary,
+-			buttonClasses = [];
+-
+-		if ( icons.primary || icons.secondary ) {
+-			if ( this.options.text ) {
+-				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+-			}
+-
+-			if ( icons.primary ) {
+-				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+-			}
+-
+-			if ( icons.secondary ) {
+-				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+-			}
+-
+-			if ( !this.options.text ) {
+-				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+-
+-				if ( !this.hasTitle ) {
+-					buttonElement.attr( "title", $.trim( buttonText ) );
+-				}
+-			}
+-		} else {
+-			buttonClasses.push( "ui-button-text-only" );
+-		}
+-		buttonElement.addClass( buttonClasses.join( " " ) );
+-	}
+-});
+-
+-$.widget( "ui.buttonset", {
+-	version: "1.10.3",
+-	options: {
+-		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+-	},
+-
+-	_create: function() {
+-		this.element.addClass( "ui-buttonset" );
+-	},
+-
+-	_init: function() {
+-		this.refresh();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "disabled" ) {
+-			this.buttons.button( "option", key, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	refresh: function() {
+-		var rtl = this.element.css( "direction" ) === "rtl";
+-
+-		this.buttons = this.element.find( this.options.items )
+-			.filter( ":ui-button" )
+-				.button( "refresh" )
+-			.end()
+-			.not( ":ui-button" )
+-				.button()
+-			.end()
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+-				.filter( ":first" )
+-					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+-				.end()
+-				.filter( ":last" )
+-					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+-				.end()
+-			.end();
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-buttonset" );
+-		this.buttons
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-left ui-corner-right" )
+-			.end()
+-			.button( "destroy" );
+-	}
+-});
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.extend($.ui, { datepicker: { version: "1.10.3" } });
+-
+-var PROP_NAME = "datepicker",
+-	instActive;
+-
+-/* Date picker manager.
+-   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+-   Settings for (groups of) date pickers are maintained in an instance object,
+-   allowing multiple different settings on the same page. */
+-
+-function Datepicker() {
+-	this._curInst = null; // The current instance in use
+-	this._keyEvent = false; // If the last event was a key event
+-	this._disabledInputs = []; // List of date picker inputs that have been disabled
+-	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+-	this._inDialog = false; // True if showing within a "dialog", false if not
+-	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+-	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+-	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+-	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+-	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+-	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+-	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+-	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+-	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+-	this.regional = []; // Available regional settings, indexed by language code
+-	this.regional[""] = { // Default regional settings
+-		closeText: "Done", // Display text for close link
+-		prevText: "Prev", // Display text for previous month link
+-		nextText: "Next", // Display text for next month link
+-		currentText: "Today", // Display text for current month link
+-		monthNames: ["January","February","March","April","May","June",
+-			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
+-		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+-		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+-		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+-		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+-		weekHeader: "Wk", // Column header for week of the year
+-		dateFormat: "mm/dd/yy", // See format options on parseDate
+-		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+-		isRTL: false, // True if right-to-left language, false if left-to-right
+-		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+-		yearSuffix: "" // Additional text to append to the year in the month headers
+-	};
+-	this._defaults = { // Global defaults for all the date picker instances
+-		showOn: "focus", // "focus" for popup on focus,
+-			// "button" for trigger button, or "both" for either
+-		showAnim: "fadeIn", // Name of jQuery animation for popup
+-		showOptions: {}, // Options for enhanced animations
+-		defaultDate: null, // Used when field is blank: actual date,
+-			// +/-number for offset from today, null for today
+-		appendText: "", // Display text following the input box, e.g. showing the format
+-		buttonText: "...", // Text for trigger button
+-		buttonImage: "", // URL for trigger button image
+-		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+-		hideIfNoPrevNext: false, // True to hide next/previous month links
+-			// if not applicable, false to just disable them
+-		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+-		gotoCurrent: false, // True if today link goes back to current selection instead
+-		changeMonth: false, // True if month can be selected directly, false if only prev/next
+-		changeYear: false, // True if year can be selected directly, false if only prev/next
+-		yearRange: "c-10:c+10", // Range of years to display in drop-down,
+-			// either relative to today's year (-nn:+nn), relative to currently displayed year
+-			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+-		showOtherMonths: false, // True to show dates in other months, false to leave blank
+-		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+-		showWeek: false, // True to show week of the year, false to not show it
+-		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+-			// takes a Date and returns the number of the week for it
+-		shortYearCutoff: "+10", // Short year values < this are in the current century,
+-			// > this are in the previous century,
+-			// string value starting with "+" for current year + value
+-		minDate: null, // The earliest selectable date, or null for no limit
+-		maxDate: null, // The latest selectable date, or null for no limit
+-		duration: "fast", // Duration of display/closure
+-		beforeShowDay: null, // Function that takes a date and returns an array with
+-			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+-			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+-		beforeShow: null, // Function that takes an input field and
+-			// returns a set of custom settings for the date picker
+-		onSelect: null, // Define a callback function when a date is selected
+-		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+-		onClose: null, // Define a callback function when the datepicker is closed
+-		numberOfMonths: 1, // Number of months to show at a time
+-		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+-		stepMonths: 1, // Number of months to step back/forward
+-		stepBigMonths: 12, // Number of months to step back/forward for the big links
+-		altField: "", // Selector for an alternate field to store selected dates into
+-		altFormat: "", // The date format to use for the alternate field
+-		constrainInput: true, // The input is constrained by the current date format
+-		showButtonPanel: false, // True to show button panel, false to not show it
+-		autoSize: false, // True to size the input for the date format, false to leave as is
+-		disabled: false // The initial disabled state
+-	};
+-	$.extend(this._defaults, this.regional[""]);
+-	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+-}
+-
+-$.extend(Datepicker.prototype, {
+-	/* Class name added to elements to indicate already configured with a date picker. */
+-	markerClassName: "hasDatepicker",
+-
+-	//Keep track of the maximum number of rows displayed (see #7043)
+-	maxRows: 4,
+-
+-	// TODO rename to "widget" when switching to widget factory
+-	_widgetDatepicker: function() {
+-		return this.dpDiv;
+-	},
+-
+-	/* Override the default settings for all instances of the date picker.
+-	 * @param  settings  object - the new settings to use as defaults (anonymous object)
+-	 * @return the manager object
+-	 */
+-	setDefaults: function(settings) {
+-		extendRemove(this._defaults, settings || {});
+-		return this;
+-	},
+-
+-	/* Attach the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+-	 */
+-	_attachDatepicker: function(target, settings) {
+-		var nodeName, inline, inst;
+-		nodeName = target.nodeName.toLowerCase();
+-		inline = (nodeName === "div" || nodeName === "span");
+-		if (!target.id) {
+-			this.uuid += 1;
+-			target.id = "dp" + this.uuid;
+-		}
+-		inst = this._newInst($(target), inline);
+-		inst.settings = $.extend({}, settings || {});
+-		if (nodeName === "input") {
+-			this._connectDatepicker(target, inst);
+-		} else if (inline) {
+-			this._inlineDatepicker(target, inst);
+-		}
+-	},
+-
+-	/* Create a new instance object. */
+-	_newInst: function(target, inline) {
+-		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+-		return {id: id, input: target, // associated target
+-			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+-			drawMonth: 0, drawYear: 0, // month being drawn
+-			inline: inline, // is datepicker inline or not
+-			dpDiv: (!inline ? this.dpDiv : // presentation div
+-			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+-	},
+-
+-	/* Attach the date picker to an input field. */
+-	_connectDatepicker: function(target, inst) {
+-		var input = $(target);
+-		inst.append = $([]);
+-		inst.trigger = $([]);
+-		if (input.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		this._attachments(input, inst);
+-		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+-			keypress(this._doKeyPress).keyup(this._doKeyUp);
+-		this._autoSize(inst);
+-		$.data(target, PROP_NAME, inst);
+-		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-	},
+-
+-	/* Make attachments based on settings. */
+-	_attachments: function(input, inst) {
+-		var showOn, buttonText, buttonImage,
+-			appendText = this._get(inst, "appendText"),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		if (inst.append) {
+-			inst.append.remove();
+-		}
+-		if (appendText) {
+-			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+-			input[isRTL ? "before" : "after"](inst.append);
+-		}
+-
+-		input.unbind("focus", this._showDatepicker);
+-
+-		if (inst.trigger) {
+-			inst.trigger.remove();
+-		}
+-
+-		showOn = this._get(inst, "showOn");
+-		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+-			input.focus(this._showDatepicker);
+-		}
+-		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+-			buttonText = this._get(inst, "buttonText");
+-			buttonImage = this._get(inst, "buttonImage");
+-			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+-				$("<img/>").addClass(this._triggerClass).
+-					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+-				$("<button type='button'></button>").addClass(this._triggerClass).
+-					html(!buttonImage ? buttonText : $("<img/>").attr(
+-					{ src:buttonImage, alt:buttonText, title:buttonText })));
+-			input[isRTL ? "before" : "after"](inst.trigger);
+-			inst.trigger.click(function() {
+-				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+-					$.datepicker._hideDatepicker();
+-				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+-					$.datepicker._hideDatepicker();
+-					$.datepicker._showDatepicker(input[0]);
+-				} else {
+-					$.datepicker._showDatepicker(input[0]);
+-				}
+-				return false;
+-			});
+-		}
+-	},
+-
+-	/* Apply the maximum length for the date format. */
+-	_autoSize: function(inst) {
+-		if (this._get(inst, "autoSize") && !inst.inline) {
+-			var findMax, max, maxI, i,
+-				date = new Date(2009, 12 - 1, 20), // Ensure double digits
+-				dateFormat = this._get(inst, "dateFormat");
+-
+-			if (dateFormat.match(/[DM]/)) {
+-				findMax = function(names) {
+-					max = 0;
+-					maxI = 0;
+-					for (i = 0; i < names.length; i++) {
+-						if (names[i].length > max) {
+-							max = names[i].length;
+-							maxI = i;
+-						}
+-					}
+-					return maxI;
+-				};
+-				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+-					"monthNames" : "monthNamesShort"))));
+-				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+-					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+-			}
+-			inst.input.attr("size", this._formatDate(inst, date).length);
+-		}
+-	},
+-
+-	/* Attach an inline date picker to a div. */
+-	_inlineDatepicker: function(target, inst) {
+-		var divSpan = $(target);
+-		if (divSpan.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+-		$.data(target, PROP_NAME, inst);
+-		this._setDate(inst, this._getDefaultDate(inst), true);
+-		this._updateDatepicker(inst);
+-		this._updateAlternate(inst);
+-		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+-		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+-		inst.dpDiv.css( "display", "block" );
+-	},
+-
+-	/* Pop-up the date picker in a "dialog" box.
+-	 * @param  input element - ignored
+-	 * @param  date	string or Date - the initial date to display
+-	 * @param  onSelect  function - the function to call when a date is selected
+-	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+-	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
+-	 *					event - with x/y coordinates or
+-	 *					leave empty for default (screen centre)
+-	 * @return the manager object
+-	 */
+-	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+-		var id, browserWidth, browserHeight, scrollX, scrollY,
+-			inst = this._dialogInst; // internal instance
+-
+-		if (!inst) {
+-			this.uuid += 1;
+-			id = "dp" + this.uuid;
+-			this._dialogInput = $("<input type='text' id='" + id +
+-				"' style='position: absolute; top: -100px; width: 0px;'/>");
+-			this._dialogInput.keydown(this._doKeyDown);
+-			$("body").append(this._dialogInput);
+-			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+-			inst.settings = {};
+-			$.data(this._dialogInput[0], PROP_NAME, inst);
+-		}
+-		extendRemove(inst.settings, settings || {});
+-		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+-		this._dialogInput.val(date);
+-
+-		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+-		if (!this._pos) {
+-			browserWidth = document.documentElement.clientWidth;
+-			browserHeight = document.documentElement.clientHeight;
+-			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+-			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+-			this._pos = // should use actual width/height below
+-				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+-		}
+-
+-		// move input on screen for focus, but hidden behind dialog
+-		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+-		inst.settings.onSelect = onSelect;
+-		this._inDialog = true;
+-		this.dpDiv.addClass(this._dialogClass);
+-		this._showDatepicker(this._dialogInput[0]);
+-		if ($.blockUI) {
+-			$.blockUI(this.dpDiv);
+-		}
+-		$.data(this._dialogInput[0], PROP_NAME, inst);
+-		return this;
+-	},
+-
+-	/* Detach a datepicker from its control.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_destroyDatepicker: function(target) {
+-		var nodeName,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		$.removeData(target, PROP_NAME);
+-		if (nodeName === "input") {
+-			inst.append.remove();
+-			inst.trigger.remove();
+-			$target.removeClass(this.markerClassName).
+-				unbind("focus", this._showDatepicker).
+-				unbind("keydown", this._doKeyDown).
+-				unbind("keypress", this._doKeyPress).
+-				unbind("keyup", this._doKeyUp);
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			$target.removeClass(this.markerClassName).empty();
+-		}
+-	},
+-
+-	/* Enable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_enableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = false;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = false; }).end().
+-				filter("img").css({opacity: "1.0", cursor: ""});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().removeClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", false);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-	},
+-
+-	/* Disable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_disableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = true;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = true; }).end().
+-				filter("img").css({opacity: "0.5", cursor: "default"});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().addClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", true);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-		this._disabledInputs[this._disabledInputs.length] = target;
+-	},
+-
+-	/* Is the first field in a jQuery collection disabled as a datepicker?
+-	 * @param  target	element - the target input field or division or span
+-	 * @return boolean - true if disabled, false if enabled
+-	 */
+-	_isDisabledDatepicker: function(target) {
+-		if (!target) {
+-			return false;
+-		}
+-		for (var i = 0; i < this._disabledInputs.length; i++) {
+-			if (this._disabledInputs[i] === target) {
+-				return true;
+-			}
+-		}
+-		return false;
+-	},
+-
+-	/* Retrieve the instance data for the target control.
+-	 * @param  target  element - the target input field or division or span
+-	 * @return  object - the associated instance data
+-	 * @throws  error if a jQuery problem getting data
+-	 */
+-	_getInst: function(target) {
+-		try {
+-			return $.data(target, PROP_NAME);
+-		}
+-		catch (err) {
+-			throw "Missing instance data for this datepicker";
+-		}
+-	},
+-
+-	/* Update or retrieve the settings for a date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 * @param  name	object - the new settings to update or
+-	 *				string - the name of the setting to change or retrieve,
+-	 *				when retrieving also "all" for all instance settings or
+-	 *				"defaults" for all global defaults
+-	 * @param  value   any - the new value for the setting
+-	 *				(omit if above is an object or to retrieve a value)
+-	 */
+-	_optionDatepicker: function(target, name, value) {
+-		var settings, date, minDate, maxDate,
+-			inst = this._getInst(target);
+-
+-		if (arguments.length === 2 && typeof name === "string") {
+-			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+-				(inst ? (name === "all" ? $.extend({}, inst.settings) :
+-				this._get(inst, name)) : null));
+-		}
+-
+-		settings = name || {};
+-		if (typeof name === "string") {
+-			settings = {};
+-			settings[name] = value;
+-		}
+-
+-		if (inst) {
+-			if (this._curInst === inst) {
+-				this._hideDatepicker();
+-			}
+-
+-			date = this._getDateDatepicker(target, true);
+-			minDate = this._getMinMaxDate(inst, "min");
+-			maxDate = this._getMinMaxDate(inst, "max");
+-			extendRemove(inst.settings, settings);
+-			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+-			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+-				inst.settings.minDate = this._formatDate(inst, minDate);
+-			}
+-			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+-				inst.settings.maxDate = this._formatDate(inst, maxDate);
+-			}
+-			if ( "disabled" in settings ) {
+-				if ( settings.disabled ) {
+-					this._disableDatepicker(target);
+-				} else {
+-					this._enableDatepicker(target);
+-				}
+-			}
+-			this._attachments($(target), inst);
+-			this._autoSize(inst);
+-			this._setDate(inst, date);
+-			this._updateAlternate(inst);
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	// change method deprecated
+-	_changeDatepicker: function(target, name, value) {
+-		this._optionDatepicker(target, name, value);
+-	},
+-
+-	/* Redraw the date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 */
+-	_refreshDatepicker: function(target) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	/* Set the dates for a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  date	Date - the new date
+-	 */
+-	_setDateDatepicker: function(target, date) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._setDate(inst, date);
+-			this._updateDatepicker(inst);
+-			this._updateAlternate(inst);
+-		}
+-	},
+-
+-	/* Get the date(s) for the first entry in a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  noDefault boolean - true if no default date is to be used
+-	 * @return Date - the current date
+-	 */
+-	_getDateDatepicker: function(target, noDefault) {
+-		var inst = this._getInst(target);
+-		if (inst && !inst.inline) {
+-			this._setDateFromField(inst, noDefault);
+-		}
+-		return (inst ? this._getDate(inst) : null);
+-	},
+-
+-	/* Handle keystrokes. */
+-	_doKeyDown: function(event) {
+-		var onSelect, dateStr, sel,
+-			inst = $.datepicker._getInst(event.target),
+-			handled = true,
+-			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+-
+-		inst._keyEvent = true;
+-		if ($.datepicker._datepickerShowing) {
+-			switch (event.keyCode) {
+-				case 9: $.datepicker._hideDatepicker();
+-						handled = false;
+-						break; // hide on tab out
+-				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+-									$.datepicker._currentClass + ")", inst.dpDiv);
+-						if (sel[0]) {
+-							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+-						}
+-
+-						onSelect = $.datepicker._get(inst, "onSelect");
+-						if (onSelect) {
+-							dateStr = $.datepicker._formatDate(inst);
+-
+-							// trigger custom callback
+-							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-						} else {
+-							$.datepicker._hideDatepicker();
+-						}
+-
+-						return false; // don't submit the form
+-				case 27: $.datepicker._hideDatepicker();
+-						break; // hide on escape
+-				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							-$.datepicker._get(inst, "stepBigMonths") :
+-							-$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // previous month/year on page up/+ ctrl
+-				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							+$.datepicker._get(inst, "stepBigMonths") :
+-							+$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // next month/year on page down/+ ctrl
+-				case 35: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._clearDate(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // clear on ctrl or command +end
+-				case 36: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._gotoToday(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // current on ctrl or command +home
+-				case 37: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// -1 day on ctrl or command +left
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								-$.datepicker._get(inst, "stepBigMonths") :
+-								-$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +left on Mac
+-						break;
+-				case 38: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, -7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // -1 week on ctrl or command +up
+-				case 39: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// +1 day on ctrl or command +right
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								+$.datepicker._get(inst, "stepBigMonths") :
+-								+$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +right
+-						break;
+-				case 40: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, +7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // +1 week on ctrl or command +down
+-				default: handled = false;
+-			}
+-		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+-			$.datepicker._showDatepicker(this);
+-		} else {
+-			handled = false;
+-		}
+-
+-		if (handled) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-	},
+-
+-	/* Filter entered characters - based on date format. */
+-	_doKeyPress: function(event) {
+-		var chars, chr,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if ($.datepicker._get(inst, "constrainInput")) {
+-			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+-			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+-			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+-		}
+-	},
+-
+-	/* Synchronise manual entry and field/alternate field. */
+-	_doKeyUp: function(event) {
+-		var date,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if (inst.input.val() !== inst.lastVal) {
+-			try {
+-				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-					(inst.input ? inst.input.val() : null),
+-					$.datepicker._getFormatConfig(inst));
+-
+-				if (date) { // only if valid
+-					$.datepicker._setDateFromField(inst);
+-					$.datepicker._updateAlternate(inst);
+-					$.datepicker._updateDatepicker(inst);
+-				}
+-			}
+-			catch (err) {
+-			}
+-		}
+-		return true;
+-	},
+-
+-	/* Pop-up the date picker for a given input field.
+-	 * If false returned from beforeShow event handler do not show.
+-	 * @param  input  element - the input field attached to the date picker or
+-	 *					event - if triggered by focus
+-	 */
+-	_showDatepicker: function(input) {
+-		input = input.target || input;
+-		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+-			input = $("input", input.parentNode)[0];
+-		}
+-
+-		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+-			return;
+-		}
+-
+-		var inst, beforeShow, beforeShowSettings, isFixed,
+-			offset, showAnim, duration;
+-
+-		inst = $.datepicker._getInst(input);
+-		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+-			$.datepicker._curInst.dpDiv.stop(true, true);
+-			if ( inst && $.datepicker._datepickerShowing ) {
+-				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+-			}
+-		}
+-
+-		beforeShow = $.datepicker._get(inst, "beforeShow");
+-		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+-		if(beforeShowSettings === false){
+-			return;
+-		}
+-		extendRemove(inst.settings, beforeShowSettings);
+-
+-		inst.lastVal = null;
+-		$.datepicker._lastInput = input;
+-		$.datepicker._setDateFromField(inst);
+-
+-		if ($.datepicker._inDialog) { // hide cursor
+-			input.value = "";
+-		}
+-		if (!$.datepicker._pos) { // position below input
+-			$.datepicker._pos = $.datepicker._findPos(input);
+-			$.datepicker._pos[1] += input.offsetHeight; // add the height
+-		}
+-
+-		isFixed = false;
+-		$(input).parents().each(function() {
+-			isFixed |= $(this).css("position") === "fixed";
+-			return !isFixed;
+-		});
+-
+-		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+-		$.datepicker._pos = null;
+-		//to avoid flashes on Firefox
+-		inst.dpDiv.empty();
+-		// determine sizing offscreen
+-		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+-		$.datepicker._updateDatepicker(inst);
+-		// fix width for dynamic number of date pickers
+-		// and adjust position before showing
+-		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+-		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+-			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
+-			left: offset.left + "px", top: offset.top + "px"});
+-
+-		if (!inst.inline) {
+-			showAnim = $.datepicker._get(inst, "showAnim");
+-			duration = $.datepicker._get(inst, "duration");
+-			inst.dpDiv.zIndex($(input).zIndex()+1);
+-			$.datepicker._datepickerShowing = true;
+-
+-			if ( $.effects && $.effects.effect[ showAnim ] ) {
+-				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+-			} else {
+-				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+-			}
+-
+-			if ( $.datepicker._shouldFocusInput( inst ) ) {
+-				inst.input.focus();
+-			}
+-
+-			$.datepicker._curInst = inst;
+-		}
+-	},
+-
+-	/* Generate the date picker content. */
+-	_updateDatepicker: function(inst) {
+-		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+-		instActive = inst; // for delegate hover events
+-		inst.dpDiv.empty().append(this._generateHTML(inst));
+-		this._attachHandlers(inst);
+-		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
+-
+-		var origyearshtml,
+-			numMonths = this._getNumberOfMonths(inst),
+-			cols = numMonths[1],
+-			width = 17;
+-
+-		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+-		if (cols > 1) {
+-			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+-		}
+-		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+-			"Class"]("ui-datepicker-multi");
+-		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+-			"Class"]("ui-datepicker-rtl");
+-
+-		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+-			inst.input.focus();
+-		}
+-
+-		// deffered render of the years select (to avoid flashes on Firefox)
+-		if( inst.yearshtml ){
+-			origyearshtml = inst.yearshtml;
+-			setTimeout(function(){
+-				//assure that inst.yearshtml didn't change.
+-				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+-					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+-				}
+-				origyearshtml = inst.yearshtml = null;
+-			}, 0);
+-		}
+-	},
+-
+-	// #6694 - don't focus the input if it's already focused
+-	// this breaks the change event in IE
+-	// Support: IE and jQuery <1.9
+-	_shouldFocusInput: function( inst ) {
+-		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+-	},
+-
+-	/* Check positioning to remain on screen. */
+-	_checkOffset: function(inst, offset, isFixed) {
+-		var dpWidth = inst.dpDiv.outerWidth(),
+-			dpHeight = inst.dpDiv.outerHeight(),
+-			inputWidth = inst.input ? inst.input.outerWidth() : 0,
+-			inputHeight = inst.input ? inst.input.outerHeight() : 0,
+-			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+-			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+-
+-		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+-		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+-		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+-
+-		// now check if datepicker is showing outside window viewport - move to a better place if so.
+-		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+-			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+-		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+-			Math.abs(dpHeight + inputHeight) : 0);
+-
+-		return offset;
+-	},
+-
+-	/* Find an object's position on the screen. */
+-	_findPos: function(obj) {
+-		var position,
+-			inst = this._getInst(obj),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+-			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+-		}
+-
+-		position = $(obj).offset();
+-		return [position.left, position.top];
+-	},
+-
+-	/* Hide the date picker from view.
+-	 * @param  input  element - the input field attached to the date picker
+-	 */
+-	_hideDatepicker: function(input) {
+-		var showAnim, duration, postProcess, onClose,
+-			inst = this._curInst;
+-
+-		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
+-			return;
+-		}
+-
+-		if (this._datepickerShowing) {
+-			showAnim = this._get(inst, "showAnim");
+-			duration = this._get(inst, "duration");
+-			postProcess = function() {
+-				$.datepicker._tidyDialog(inst);
+-			};
+-
+-			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+-			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+-				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+-			} else {
+-				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+-					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+-			}
+-
+-			if (!showAnim) {
+-				postProcess();
+-			}
+-			this._datepickerShowing = false;
+-
+-			onClose = this._get(inst, "onClose");
+-			if (onClose) {
+-				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+-			}
+-
+-			this._lastInput = null;
+-			if (this._inDialog) {
+-				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+-				if ($.blockUI) {
+-					$.unblockUI();
+-					$("body").append(this.dpDiv);
+-				}
+-			}
+-			this._inDialog = false;
+-		}
+-	},
+-
+-	/* Tidy up after a dialog display. */
+-	_tidyDialog: function(inst) {
+-		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+-	},
+-
+-	/* Close date picker if clicked elsewhere. */
+-	_checkExternalClick: function(event) {
+-		if (!$.datepicker._curInst) {
+-			return;
+-		}
+-
+-		var $target = $(event.target),
+-			inst = $.datepicker._getInst($target[0]);
+-
+-		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+-				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+-				!$target.hasClass($.datepicker.markerClassName) &&
+-				!$target.closest("." + $.datepicker._triggerClass).length &&
+-				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+-			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+-				$.datepicker._hideDatepicker();
+-		}
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustDate: function(id, offset, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		this._adjustInstDate(inst, offset +
+-			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+-			period);
+-		this._updateDatepicker(inst);
+-	},
+-
+-	/* Action for current link. */
+-	_gotoToday: function(id) {
+-		var date,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+-			inst.selectedDay = inst.currentDay;
+-			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+-			inst.drawYear = inst.selectedYear = inst.currentYear;
+-		} else {
+-			date = new Date();
+-			inst.selectedDay = date.getDate();
+-			inst.drawMonth = inst.selectedMonth = date.getMonth();
+-			inst.drawYear = inst.selectedYear = date.getFullYear();
+-		}
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a new month/year. */
+-	_selectMonthYear: function(id, select, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		inst["selected" + (period === "M" ? "Month" : "Year")] =
+-		inst["draw" + (period === "M" ? "Month" : "Year")] =
+-			parseInt(select.options[select.selectedIndex].value,10);
+-
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a day. */
+-	_selectDay: function(id, month, year, td) {
+-		var inst,
+-			target = $(id);
+-
+-		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-
+-		inst = this._getInst(target[0]);
+-		inst.selectedDay = inst.currentDay = $("a", td).html();
+-		inst.selectedMonth = inst.currentMonth = month;
+-		inst.selectedYear = inst.currentYear = year;
+-		this._selectDate(id, this._formatDate(inst,
+-			inst.currentDay, inst.currentMonth, inst.currentYear));
+-	},
+-
+-	/* Erase the input field and hide the date picker. */
+-	_clearDate: function(id) {
+-		var target = $(id);
+-		this._selectDate(target, "");
+-	},
+-
+-	/* Update the input field with the selected date. */
+-	_selectDate: function(id, dateStr) {
+-		var onSelect,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+-		if (inst.input) {
+-			inst.input.val(dateStr);
+-		}
+-		this._updateAlternate(inst);
+-
+-		onSelect = this._get(inst, "onSelect");
+-		if (onSelect) {
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+-		} else if (inst.input) {
+-			inst.input.trigger("change"); // fire the change event
+-		}
+-
+-		if (inst.inline){
+-			this._updateDatepicker(inst);
+-		} else {
+-			this._hideDatepicker();
+-			this._lastInput = inst.input[0];
+-			if (typeof(inst.input[0]) !== "object") {
+-				inst.input.focus(); // restore focus
+-			}
+-			this._lastInput = null;
+-		}
+-	},
+-
+-	/* Update any alternate field to synchronise with the main field. */
+-	_updateAlternate: function(inst) {
+-		var altFormat, date, dateStr,
+-			altField = this._get(inst, "altField");
+-
+-		if (altField) { // update alternate field too
+-			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+-			date = this._getDate(inst);
+-			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+-			$(altField).each(function() { $(this).val(dateStr); });
+-		}
+-	},
+-
+-	/* Set as beforeShowDay function to prevent selection of weekends.
+-	 * @param  date  Date - the date to customise
+-	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
+-	 */
+-	noWeekends: function(date) {
+-		var day = date.getDay();
+-		return [(day > 0 && day < 6), ""];
+-	},
+-
+-	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+-	 * @param  date  Date - the date to get the week for
+-	 * @return  number - the number of the week within the year that contains this date
+-	 */
+-	iso8601Week: function(date) {
+-		var time,
+-			checkDate = new Date(date.getTime());
+-
+-		// Find Thursday of this week starting on Monday
+-		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+-
+-		time = checkDate.getTime();
+-		checkDate.setMonth(0); // Compare with Jan 1
+-		checkDate.setDate(1);
+-		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+-	},
+-
+-	/* Parse a string value into a date object.
+-	 * See formatDate below for the possible formats.
+-	 *
+-	 * @param  format string - the expected format of the date
+-	 * @param  value string - the date in the above format
+-	 * @param  settings Object - attributes include:
+-	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  Date - the extracted date value or null if value is blank
+-	 */
+-	parseDate: function (format, value, settings) {
+-		if (format == null || value == null) {
+-			throw "Invalid arguments";
+-		}
+-
+-		value = (typeof value === "object" ? value.toString() : value + "");
+-		if (value === "") {
+-			return null;
+-		}
+-
+-		var iFormat, dim, extra,
+-			iValue = 0,
+-			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+-			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+-				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			year = -1,
+-			month = -1,
+-			day = -1,
+-			doy = -1,
+-			literal = false,
+-			date,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Extract a number from the string value
+-			getNumber = function(match) {
+-				var isDoubled = lookAhead(match),
+-					size = (match === "@" ? 14 : (match === "!" ? 20 :
+-					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+-					digits = new RegExp("^\\d{1," + size + "}"),
+-					num = value.substring(iValue).match(digits);
+-				if (!num) {
+-					throw "Missing number at position " + iValue;
+-				}
+-				iValue += num[0].length;
+-				return parseInt(num[0], 10);
+-			},
+-			// Extract a name from the string value and convert to an index
+-			getName = function(match, shortNames, longNames) {
+-				var index = -1,
+-					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+-						return [ [k, v] ];
+-					}).sort(function (a, b) {
+-						return -(a[1].length - b[1].length);
+-					});
+-
+-				$.each(names, function (i, pair) {
+-					var name = pair[1];
+-					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+-						index = pair[0];
+-						iValue += name.length;
+-						return false;
+-					}
+-				});
+-				if (index !== -1) {
+-					return index + 1;
+-				} else {
+-					throw "Unknown name at position " + iValue;
+-				}
+-			},
+-			// Confirm that a literal character matches the string value
+-			checkLiteral = function() {
+-				if (value.charAt(iValue) !== format.charAt(iFormat)) {
+-					throw "Unexpected literal at position " + iValue;
+-				}
+-				iValue++;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					checkLiteral();
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d":
+-						day = getNumber("d");
+-						break;
+-					case "D":
+-						getName("D", dayNamesShort, dayNames);
+-						break;
+-					case "o":
+-						doy = getNumber("o");
+-						break;
+-					case "m":
+-						month = getNumber("m");
+-						break;
+-					case "M":
+-						month = getName("M", monthNamesShort, monthNames);
+-						break;
+-					case "y":
+-						year = getNumber("y");
+-						break;
+-					case "@":
+-						date = new Date(getNumber("@"));
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "!":
+-						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "'":
+-						if (lookAhead("'")){
+-							checkLiteral();
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						checkLiteral();
+-				}
+-			}
+-		}
+-
+-		if (iValue < value.length){
+-			extra = value.substr(iValue);
+-			if (!/^\s+/.test(extra)) {
+-				throw "Extra/unparsed characters found in date: " + extra;
+-			}
+-		}
+-
+-		if (year === -1) {
+-			year = new Date().getFullYear();
+-		} else if (year < 100) {
+-			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+-				(year <= shortYearCutoff ? 0 : -100);
+-		}
+-
+-		if (doy > -1) {
+-			month = 1;
+-			day = doy;
+-			do {
+-				dim = this._getDaysInMonth(year, month - 1);
+-				if (day <= dim) {
+-					break;
+-				}
+-				month++;
+-				day -= dim;
+-			} while (true);
+-		}
+-
+-		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+-		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+-			throw "Invalid date"; // E.g. 31/02/00
+-		}
+-		return date;
+-	},
+-
+-	/* Standard date formats. */
+-	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+-	COOKIE: "D, dd M yy",
+-	ISO_8601: "yy-mm-dd",
+-	RFC_822: "D, d M y",
+-	RFC_850: "DD, dd-M-y",
+-	RFC_1036: "D, d M y",
+-	RFC_1123: "D, d M yy",
+-	RFC_2822: "D, d M yy",
+-	RSS: "D, d M y", // RFC 822
+-	TICKS: "!",
+-	TIMESTAMP: "@",
+-	W3C: "yy-mm-dd", // ISO 8601
+-
+-	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+-		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+-
+-	/* Format a date object into a string value.
+-	 * The format can be combinations of the following:
+-	 * d  - day of month (no leading zero)
+-	 * dd - day of month (two digit)
+-	 * o  - day of year (no leading zeros)
+-	 * oo - day of year (three digit)
+-	 * D  - day name short
+-	 * DD - day name long
+-	 * m  - month of year (no leading zero)
+-	 * mm - month of year (two digit)
+-	 * M  - month name short
+-	 * MM - month name long
+-	 * y  - year (two digit)
+-	 * yy - year (four digit)
+-	 * @ - Unix timestamp (ms since 01/01/1970)
+-	 * ! - Windows ticks (100ns since 01/01/0001)
+-	 * "..." - literal text
+-	 * '' - single quote
+-	 *
+-	 * @param  format string - the desired format of the date
+-	 * @param  date Date - the date value to format
+-	 * @param  settings Object - attributes include:
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  string - the date in the above format
+-	 */
+-	formatDate: function (format, date, settings) {
+-		if (!date) {
+-			return "";
+-		}
+-
+-		var iFormat,
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Format a number, with leading zero if necessary
+-			formatNumber = function(match, value, len) {
+-				var num = "" + value;
+-				if (lookAhead(match)) {
+-					while (num.length < len) {
+-						num = "0" + num;
+-					}
+-				}
+-				return num;
+-			},
+-			// Format a name, short or long as requested
+-			formatName = function(match, value, shortNames, longNames) {
+-				return (lookAhead(match) ? longNames[value] : shortNames[value]);
+-			},
+-			output = "",
+-			literal = false;
+-
+-		if (date) {
+-			for (iFormat = 0; iFormat < format.length; iFormat++) {
+-				if (literal) {
+-					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-						literal = false;
+-					} else {
+-						output += format.charAt(iFormat);
+-					}
+-				} else {
+-					switch (format.charAt(iFormat)) {
+-						case "d":
+-							output += formatNumber("d", date.getDate(), 2);
+-							break;
+-						case "D":
+-							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+-							break;
+-						case "o":
+-							output += formatNumber("o",
+-								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+-							break;
+-						case "m":
+-							output += formatNumber("m", date.getMonth() + 1, 2);
+-							break;
+-						case "M":
+-							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+-							break;
+-						case "y":
+-							output += (lookAhead("y") ? date.getFullYear() :
+-								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+-							break;
+-						case "@":
+-							output += date.getTime();
+-							break;
+-						case "!":
+-							output += date.getTime() * 10000 + this._ticksTo1970;
+-							break;
+-						case "'":
+-							if (lookAhead("'")) {
+-								output += "'";
+-							} else {
+-								literal = true;
+-							}
+-							break;
+-						default:
+-							output += format.charAt(iFormat);
+-					}
+-				}
+-			}
+-		}
+-		return output;
+-	},
+-
+-	/* Extract all possible characters from the date format. */
+-	_possibleChars: function (format) {
+-		var iFormat,
+-			chars = "",
+-			literal = false,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					chars += format.charAt(iFormat);
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d": case "m": case "y": case "@":
+-						chars += "0123456789";
+-						break;
+-					case "D": case "M":
+-						return null; // Accept anything
+-					case "'":
+-						if (lookAhead("'")) {
+-							chars += "'";
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						chars += format.charAt(iFormat);
+-				}
+-			}
+-		}
+-		return chars;
+-	},
+-
+-	/* Get a setting value, defaulting if necessary. */
+-	_get: function(inst, name) {
+-		return inst.settings[name] !== undefined ?
+-			inst.settings[name] : this._defaults[name];
+-	},
+-
+-	/* Parse existing date and initialise date picker. */
+-	_setDateFromField: function(inst, noDefault) {
+-		if (inst.input.val() === inst.lastVal) {
+-			return;
+-		}
+-
+-		var dateFormat = this._get(inst, "dateFormat"),
+-			dates = inst.lastVal = inst.input ? inst.input.val() : null,
+-			defaultDate = this._getDefaultDate(inst),
+-			date = defaultDate,
+-			settings = this._getFormatConfig(inst);
+-
+-		try {
+-			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+-		} catch (event) {
+-			dates = (noDefault ? "" : dates);
+-		}
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		inst.currentDay = (dates ? date.getDate() : 0);
+-		inst.currentMonth = (dates ? date.getMonth() : 0);
+-		inst.currentYear = (dates ? date.getFullYear() : 0);
+-		this._adjustInstDate(inst);
+-	},
+-
+-	/* Retrieve the default date shown on opening. */
+-	_getDefaultDate: function(inst) {
+-		return this._restrictMinMax(inst,
+-			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+-	},
+-
+-	/* A date may be specified as an exact value or a relative one. */
+-	_determineDate: function(inst, date, defaultDate) {
+-		var offsetNumeric = function(offset) {
+-				var date = new Date();
+-				date.setDate(date.getDate() + offset);
+-				return date;
+-			},
+-			offsetString = function(offset) {
+-				try {
+-					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-						offset, $.datepicker._getFormatConfig(inst));
+-				}
+-				catch (e) {
+-					// Ignore
+-				}
+-
+-				var date = (offset.toLowerCase().match(/^c/) ?
+-					$.datepicker._getDate(inst) : null) || new Date(),
+-					year = date.getFullYear(),
+-					month = date.getMonth(),
+-					day = date.getDate(),
+-					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+-					matches = pattern.exec(offset);
+-
+-				while (matches) {
+-					switch (matches[2] || "d") {
+-						case "d" : case "D" :
+-							day += parseInt(matches[1],10); break;
+-						case "w" : case "W" :
+-							day += parseInt(matches[1],10) * 7; break;
+-						case "m" : case "M" :
+-							month += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-						case "y": case "Y" :
+-							year += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-					}
+-					matches = pattern.exec(offset);
+-				}
+-				return new Date(year, month, day);
+-			},
+-			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+-				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+-
+-		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+-		if (newDate) {
+-			newDate.setHours(0);
+-			newDate.setMinutes(0);
+-			newDate.setSeconds(0);
+-			newDate.setMilliseconds(0);
+-		}
+-		return this._daylightSavingAdjust(newDate);
+-	},
+-
+-	/* Handle switch to/from daylight saving.
+-	 * Hours may be non-zero on daylight saving cut-over:
+-	 * > 12 when midnight changeover, but then cannot generate
+-	 * midnight datetime, so jump to 1AM, otherwise reset.
+-	 * @param  date  (Date) the date to check
+-	 * @return  (Date) the corrected date
+-	 */
+-	_daylightSavingAdjust: function(date) {
+-		if (!date) {
+-			return null;
+-		}
+-		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+-		return date;
+-	},
+-
+-	/* Set the date(s) directly. */
+-	_setDate: function(inst, date, noChange) {
+-		var clear = !date,
+-			origMonth = inst.selectedMonth,
+-			origYear = inst.selectedYear,
+-			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+-
+-		inst.selectedDay = inst.currentDay = newDate.getDate();
+-		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+-		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+-		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+-			this._notifyChange(inst);
+-		}
+-		this._adjustInstDate(inst);
+-		if (inst.input) {
+-			inst.input.val(clear ? "" : this._formatDate(inst));
+-		}
+-	},
+-
+-	/* Retrieve the date(s) directly. */
+-	_getDate: function(inst) {
+-		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+-			this._daylightSavingAdjust(new Date(
+-			inst.currentYear, inst.currentMonth, inst.currentDay)));
+-			return startDate;
+-	},
+-
+-	/* Attach the onxxx handlers.  These are declared statically so
+-	 * they work with static code transformers like Caja.
+-	 */
+-	_attachHandlers: function(inst) {
+-		var stepMonths = this._get(inst, "stepMonths"),
+-			id = "#" + inst.id.replace( /\\\\/g, "\\" );
+-		inst.dpDiv.find("[data-handler]").map(function () {
+-			var handler = {
+-				prev: function () {
+-					$.datepicker._adjustDate(id, -stepMonths, "M");
+-				},
+-				next: function () {
+-					$.datepicker._adjustDate(id, +stepMonths, "M");
+-				},
+-				hide: function () {
+-					$.datepicker._hideDatepicker();
+-				},
+-				today: function () {
+-					$.datepicker._gotoToday(id);
+-				},
+-				selectDay: function () {
+-					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+-					return false;
+-				},
+-				selectMonth: function () {
+-					$.datepicker._selectMonthYear(id, this, "M");
+-					return false;
+-				},
+-				selectYear: function () {
+-					$.datepicker._selectMonthYear(id, this, "Y");
+-					return false;
+-				}
+-			};
+-			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+-		});
+-	},
+-
+-	/* Generate the HTML for the current state of the date picker. */
+-	_generateHTML: function(inst) {
+-		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+-			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+-			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+-			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+-			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+-			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+-			tempDate = new Date(),
+-			today = this._daylightSavingAdjust(
+-				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+-			isRTL = this._get(inst, "isRTL"),
+-			showButtonPanel = this._get(inst, "showButtonPanel"),
+-			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+-			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+-			numMonths = this._getNumberOfMonths(inst),
+-			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+-			stepMonths = this._get(inst, "stepMonths"),
+-			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+-			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+-				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			drawMonth = inst.drawMonth - showCurrentAtPos,
+-			drawYear = inst.drawYear;
+-
+-		if (drawMonth < 0) {
+-			drawMonth += 12;
+-			drawYear--;
+-		}
+-		if (maxDate) {
+-			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+-				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+-			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+-			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+-				drawMonth--;
+-				if (drawMonth < 0) {
+-					drawMonth = 11;
+-					drawYear--;
+-				}
+-			}
+-		}
+-		inst.drawMonth = drawMonth;
+-		inst.drawYear = drawYear;
+-
+-		prevText = this._get(inst, "prevText");
+-		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+-			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+-
+-		nextText = this._get(inst, "nextText");
+-		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+-			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+-
+-		currentText = this._get(inst, "currentText");
+-		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+-		currentText = (!navigationAsDateFormat ? currentText :
+-			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+-
+-		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+-			this._get(inst, "closeText") + "</button>" : "");
+-
+-		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+-			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+-			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+-
+-		firstDay = parseInt(this._get(inst, "firstDay"),10);
+-		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+-
+-		showWeek = this._get(inst, "showWeek");
+-		dayNames = this._get(inst, "dayNames");
+-		dayNamesMin = this._get(inst, "dayNamesMin");
+-		monthNames = this._get(inst, "monthNames");
+-		monthNamesShort = this._get(inst, "monthNamesShort");
+-		beforeShowDay = this._get(inst, "beforeShowDay");
+-		showOtherMonths = this._get(inst, "showOtherMonths");
+-		selectOtherMonths = this._get(inst, "selectOtherMonths");
+-		defaultDate = this._getDefaultDate(inst);
+-		html = "";
+-		dow;
+-		for (row = 0; row < numMonths[0]; row++) {
+-			group = "";
+-			this.maxRows = 4;
+-			for (col = 0; col < numMonths[1]; col++) {
+-				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+-				cornerClass = " ui-corner-all";
+-				calender = "";
+-				if (isMultiMonth) {
+-					calender += "<div class='ui-datepicker-group";
+-					if (numMonths[1] > 1) {
+-						switch (col) {
+-							case 0: calender += " ui-datepicker-group-first";
+-								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+-							case numMonths[1]-1: calender += " ui-datepicker-group-last";
+-								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+-							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+-						}
+-					}
+-					calender += "'>";
+-				}
+-				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+-					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+-					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+-					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+-					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+-					"</div><table class='ui-datepicker-calendar'><thead>" +
+-					"<tr>";
+-				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+-				for (dow = 0; dow < 7; dow++) { // days of the week
+-					day = (dow + firstDay) % 7;
+-					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+-						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+-				}
+-				calender += thead + "</tr></thead><tbody>";
+-				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+-				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+-					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+-				}
+-				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+-				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+-				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+-				this.maxRows = numRows;
+-				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+-				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+-					calender += "<tr>";
+-					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+-						this._get(inst, "calculateWeek")(printDate) + "</td>");
+-					for (dow = 0; dow < 7; dow++) { // create date picker days
+-						daySettings = (beforeShowDay ?
+-							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+-						otherMonth = (printDate.getMonth() !== drawMonth);
+-						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+-							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+-						tbody += "<td class='" +
+-							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+-							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+-							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+-							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+-							// or defaultDate is current printedDate and defaultDate is selectedDate
+-							" " + this._dayOverClass : "") + // highlight selected day
+-							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
+-							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+-							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+-							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+-							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+-							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+-							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+-							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+-							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+-							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+-							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+-							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+-						printDate.setDate(printDate.getDate() + 1);
+-						printDate = this._daylightSavingAdjust(printDate);
+-					}
+-					calender += tbody + "</tr>";
+-				}
+-				drawMonth++;
+-				if (drawMonth > 11) {
+-					drawMonth = 0;
+-					drawYear++;
+-				}
+-				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+-							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+-				group += calender;
+-			}
+-			html += group;
+-		}
+-		html += buttonPanel;
+-		inst._keyEvent = false;
+-		return html;
+-	},
+-
+-	/* Generate the month and year header. */
+-	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+-			secondary, monthNames, monthNamesShort) {
+-
+-		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+-			changeMonth = this._get(inst, "changeMonth"),
+-			changeYear = this._get(inst, "changeYear"),
+-			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+-			html = "<div class='ui-datepicker-title'>",
+-			monthHtml = "";
+-
+-		// month selection
+-		if (secondary || !changeMonth) {
+-			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+-		} else {
+-			inMinYear = (minDate && minDate.getFullYear() === drawYear);
+-			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+-			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+-			for ( month = 0; month < 12; month++) {
+-				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+-					monthHtml += "<option value='" + month + "'" +
+-						(month === drawMonth ? " selected='selected'" : "") +
+-						">" + monthNamesShort[month] + "</option>";
+-				}
+-			}
+-			monthHtml += "</select>";
+-		}
+-
+-		if (!showMonthAfterYear) {
+-			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+-		}
+-
+-		// year selection
+-		if ( !inst.yearshtml ) {
+-			inst.yearshtml = "";
+-			if (secondary || !changeYear) {
+-				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+-			} else {
+-				// determine range of years to display
+-				years = this._get(inst, "yearRange").split(":");
+-				thisYear = new Date().getFullYear();
+-				determineYear = function(value) {
+-					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+-						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+-						parseInt(value, 10)));
+-					return (isNaN(year) ? thisYear : year);
+-				};
+-				year = determineYear(years[0]);
+-				endYear = Math.max(year, determineYear(years[1] || ""));
+-				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+-				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+-				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+-				for (; year <= endYear; year++) {
+-					inst.yearshtml += "<option value='" + year + "'" +
+-						(year === drawYear ? " selected='selected'" : "") +
+-						">" + year + "</option>";
+-				}
+-				inst.yearshtml += "</select>";
+-
+-				html += inst.yearshtml;
+-				inst.yearshtml = null;
+-			}
+-		}
+-
+-		html += this._get(inst, "yearSuffix");
+-		if (showMonthAfterYear) {
+-			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+-		}
+-		html += "</div>"; // Close datepicker_header
+-		return html;
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustInstDate: function(inst, offset, period) {
+-		var year = inst.drawYear + (period === "Y" ? offset : 0),
+-			month = inst.drawMonth + (period === "M" ? offset : 0),
+-			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+-			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+-
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		if (period === "M" || period === "Y") {
+-			this._notifyChange(inst);
+-		}
+-	},
+-
+-	/* Ensure a date is within any min/max bounds. */
+-	_restrictMinMax: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			newDate = (minDate && date < minDate ? minDate : date);
+-		return (maxDate && newDate > maxDate ? maxDate : newDate);
+-	},
+-
+-	/* Notify change of month/year. */
+-	_notifyChange: function(inst) {
+-		var onChange = this._get(inst, "onChangeMonthYear");
+-		if (onChange) {
+-			onChange.apply((inst.input ? inst.input[0] : null),
+-				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+-		}
+-	},
+-
+-	/* Determine the number of months to show. */
+-	_getNumberOfMonths: function(inst) {
+-		var numMonths = this._get(inst, "numberOfMonths");
+-		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+-	},
+-
+-	/* Determine the current maximum date - ensure no time components are set. */
+-	_getMinMaxDate: function(inst, minMax) {
+-		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+-	},
+-
+-	/* Find the number of days in a given month. */
+-	_getDaysInMonth: function(year, month) {
+-		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+-	},
+-
+-	/* Find the day of the week of the first of a month. */
+-	_getFirstDayOfMonth: function(year, month) {
+-		return new Date(year, month, 1).getDay();
+-	},
+-
+-	/* Determines if we should allow a "next/prev" month display change. */
+-	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+-		var numMonths = this._getNumberOfMonths(inst),
+-			date = this._daylightSavingAdjust(new Date(curYear,
+-			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+-
+-		if (offset < 0) {
+-			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+-		}
+-		return this._isInRange(inst, date);
+-	},
+-
+-	/* Is the given date in the accepted range? */
+-	_isInRange: function(inst, date) {
+-		var yearSplit, currentYear,
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			minYear = null,
+-			maxYear = null,
+-			years = this._get(inst, "yearRange");
+-			if (years){
+-				yearSplit = years.split(":");
+-				currentYear = new Date().getFullYear();
+-				minYear = parseInt(yearSplit[0], 10);
+-				maxYear = parseInt(yearSplit[1], 10);
+-				if ( yearSplit[0].match(/[+\-].*/) ) {
+-					minYear += currentYear;
+-				}
+-				if ( yearSplit[1].match(/[+\-].*/) ) {
+-					maxYear += currentYear;
+-				}
+-			}
+-
+-		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+-			(!maxDate || date.getTime() <= maxDate.getTime()) &&
+-			(!minYear || date.getFullYear() >= minYear) &&
+-			(!maxYear || date.getFullYear() <= maxYear));
+-	},
+-
+-	/* Provide the configuration settings for formatting/parsing. */
+-	_getFormatConfig: function(inst) {
+-		var shortYearCutoff = this._get(inst, "shortYearCutoff");
+-		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+-			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		return {shortYearCutoff: shortYearCutoff,
+-			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+-			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+-	},
+-
+-	/* Format the given date for display. */
+-	_formatDate: function(inst, day, month, year) {
+-		if (!day) {
+-			inst.currentDay = inst.selectedDay;
+-			inst.currentMonth = inst.selectedMonth;
+-			inst.currentYear = inst.selectedYear;
+-		}
+-		var date = (day ? (typeof day === "object" ? day :
+-			this._daylightSavingAdjust(new Date(year, month, day))) :
+-			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+-	}
+-});
+-
+-/*
+- * Bind hover events for datepicker elements.
+- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+- */
+-function bindHover(dpDiv) {
+-	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+-	return dpDiv.delegate(selector, "mouseout", function() {
+-			$(this).removeClass("ui-state-hover");
+-			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-				$(this).removeClass("ui-datepicker-prev-hover");
+-			}
+-			if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-				$(this).removeClass("ui-datepicker-next-hover");
+-			}
+-		})
+-		.delegate(selector, "mouseover", function(){
+-			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
+-				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+-				$(this).addClass("ui-state-hover");
+-				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-					$(this).addClass("ui-datepicker-prev-hover");
+-				}
+-				if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-					$(this).addClass("ui-datepicker-next-hover");
+-				}
+-			}
+-		});
+-}
+-
+-/* jQuery extend now ignores nulls! */
+-function extendRemove(target, props) {
+-	$.extend(target, props);
+-	for (var name in props) {
+-		if (props[name] == null) {
+-			target[name] = props[name];
+-		}
+-	}
+-	return target;
+-}
+-
+-/* Invoke the datepicker functionality.
+-   @param  options  string - a command, optionally followed by additional parameters or
+-					Object - settings for attaching new datepicker functionality
+-   @return  jQuery object */
+-$.fn.datepicker = function(options){
+-
+-	/* Verify an empty collection wasn't passed - Fixes #6976 */
+-	if ( !this.length ) {
+-		return this;
+-	}
+-
+-	/* Initialise the date picker. */
+-	if (!$.datepicker.initialized) {
+-		$(document).mousedown($.datepicker._checkExternalClick);
+-		$.datepicker.initialized = true;
+-	}
+-
+-	/* Append datepicker main container to body if not exist. */
+-	if ($("#"+$.datepicker._mainDivId).length === 0) {
+-		$("body").append($.datepicker.dpDiv);
+-	}
+-
+-	var otherArgs = Array.prototype.slice.call(arguments, 1);
+-	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	return this.each(function() {
+-		typeof options === "string" ?
+-			$.datepicker["_" + options + "Datepicker"].
+-				apply($.datepicker, [this].concat(otherArgs)) :
+-			$.datepicker._attachDatepicker(this, options);
+-	});
+-};
+-
+-$.datepicker = new Datepicker(); // singleton instance
+-$.datepicker.initialized = false;
+-$.datepicker.uuid = new Date().getTime();
+-$.datepicker.version = "1.10.3";
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var sizeRelatedOptions = {
+-		buttons: true,
+-		height: true,
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true,
+-		width: true
+-	},
+-	resizableRelatedOptions = {
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true
+-	};
+-
+-$.widget( "ui.dialog", {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoOpen: true,
+-		buttons: [],
+-		closeOnEscape: true,
+-		closeText: "close",
+-		dialogClass: "",
+-		draggable: true,
+-		hide: null,
+-		height: "auto",
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 150,
+-		minWidth: 150,
+-		modal: false,
+-		position: {
+-			my: "center",
+-			at: "center",
+-			of: window,
+-			collision: "fit",
+-			// Ensure the titlebar is always visible
+-			using: function( pos ) {
+-				var topOffset = $( this ).css( pos ).offset().top;
+-				if ( topOffset < 0 ) {
+-					$( this ).css( "top", pos.top - topOffset );
+-				}
+-			}
+-		},
+-		resizable: true,
+-		show: null,
+-		title: null,
+-		width: 300,
+-
+-		// callbacks
+-		beforeClose: null,
+-		close: null,
+-		drag: null,
+-		dragStart: null,
+-		dragStop: null,
+-		focus: null,
+-		open: null,
+-		resize: null,
+-		resizeStart: null,
+-		resizeStop: null
+-	},
+-
+-	_create: function() {
+-		this.originalCss = {
+-			display: this.element[0].style.display,
+-			width: this.element[0].style.width,
+-			minHeight: this.element[0].style.minHeight,
+-			maxHeight: this.element[0].style.maxHeight,
+-			height: this.element[0].style.height
+-		};
+-		this.originalPosition = {
+-			parent: this.element.parent(),
+-			index: this.element.parent().children().index( this.element )
+-		};
+-		this.originalTitle = this.element.attr("title");
+-		this.options.title = this.options.title || this.originalTitle;
+-
+-		this._createWrapper();
+-
+-		this.element
+-			.show()
+-			.removeAttr("title")
+-			.addClass("ui-dialog-content ui-widget-content")
+-			.appendTo( this.uiDialog );
+-
+-		this._createTitlebar();
+-		this._createButtonPane();
+-
+-		if ( this.options.draggable && $.fn.draggable ) {
+-			this._makeDraggable();
+-		}
+-		if ( this.options.resizable && $.fn.resizable ) {
+-			this._makeResizable();
+-		}
+-
+-		this._isOpen = false;
+-	},
+-
+-	_init: function() {
+-		if ( this.options.autoOpen ) {
+-			this.open();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-		if ( element && (element.jquery || element.nodeType) ) {
+-			return $( element );
+-		}
+-		return this.document.find( element || "body" ).eq( 0 );
+-	},
+-
+-	_destroy: function() {
+-		var next,
+-			originalPosition = this.originalPosition;
+-
+-		this._destroyOverlay();
+-
+-		this.element
+-			.removeUniqueId()
+-			.removeClass("ui-dialog-content ui-widget-content")
+-			.css( this.originalCss )
+-			// Without detaching first, the following becomes really slow
+-			.detach();
+-
+-		this.uiDialog.stop( true, true ).remove();
+-
+-		if ( this.originalTitle ) {
+-			this.element.attr( "title", this.originalTitle );
+-		}
+-
+-		next = originalPosition.parent.children().eq( originalPosition.index );
+-		// Don't try to place the dialog next to itself (#8613)
+-		if ( next.length && next[0] !== this.element[0] ) {
+-			next.before( this.element );
+-		} else {
+-			originalPosition.parent.append( this.element );
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.uiDialog;
+-	},
+-
+-	disable: $.noop,
+-	enable: $.noop,
+-
+-	close: function( event ) {
+-		var that = this;
+-
+-		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+-			return;
+-		}
+-
+-		this._isOpen = false;
+-		this._destroyOverlay();
+-
+-		if ( !this.opener.filter(":focusable").focus().length ) {
+-			// Hiding a focused element doesn't trigger blur in WebKit
+-			// so in case we have nothing to focus on, explicitly blur the active element
+-			// https://bugs.webkit.org/show_bug.cgi?id=47182
+-			$( this.document[0].activeElement ).blur();
+-		}
+-
+-		this._hide( this.uiDialog, this.options.hide, function() {
+-			that._trigger( "close", event );
+-		});
+-	},
+-
+-	isOpen: function() {
+-		return this._isOpen;
+-	},
+-
+-	moveToTop: function() {
+-		this._moveToTop();
+-	},
+-
+-	_moveToTop: function( event, silent ) {
+-		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
+-		if ( moved && !silent ) {
+-			this._trigger( "focus", event );
+-		}
+-		return moved;
+-	},
+-
+-	open: function() {
+-		var that = this;
+-		if ( this._isOpen ) {
+-			if ( this._moveToTop() ) {
+-				this._focusTabbable();
+-			}
+-			return;
+-		}
+-
+-		this._isOpen = true;
+-		this.opener = $( this.document[0].activeElement );
+-
+-		this._size();
+-		this._position();
+-		this._createOverlay();
+-		this._moveToTop( null, true );
+-		this._show( this.uiDialog, this.options.show, function() {
+-			that._focusTabbable();
+-			that._trigger("focus");
+-		});
+-
+-		this._trigger("open");
+-	},
+-
+-	_focusTabbable: function() {
+-		// Set focus to the first match:
+-		// 1. First element inside the dialog matching [autofocus]
+-		// 2. Tabbable element inside the content element
+-		// 3. Tabbable element inside the buttonpane
+-		// 4. The close button
+-		// 5. The dialog itself
+-		var hasFocus = this.element.find("[autofocus]");
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.element.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogButtonPane.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialog;
+-		}
+-		hasFocus.eq( 0 ).focus();
+-	},
+-
+-	_keepFocus: function( event ) {
+-		function checkFocus() {
+-			var activeElement = this.document[0].activeElement,
+-				isActive = this.uiDialog[0] === activeElement ||
+-					$.contains( this.uiDialog[0], activeElement );
+-			if ( !isActive ) {
+-				this._focusTabbable();
+-			}
+-		}
+-		event.preventDefault();
+-		checkFocus.call( this );
+-		// support: IE
+-		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+-		// so we check again later
+-		this._delay( checkFocus );
+-	},
+-
+-	_createWrapper: function() {
+-		this.uiDialog = $("<div>")
+-			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+-				this.options.dialogClass )
+-			.hide()
+-			.attr({
+-				// Setting tabIndex makes the div focusable
+-				tabIndex: -1,
+-				role: "dialog"
+-			})
+-			.appendTo( this._appendTo() );
+-
+-		this._on( this.uiDialog, {
+-			keydown: function( event ) {
+-				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+-						event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					event.preventDefault();
+-					this.close( event );
+-					return;
+-				}
+-
+-				// prevent tabbing out of dialogs
+-				if ( event.keyCode !== $.ui.keyCode.TAB ) {
+-					return;
+-				}
+-				var tabbables = this.uiDialog.find(":tabbable"),
+-					first = tabbables.filter(":first"),
+-					last  = tabbables.filter(":last");
+-
+-				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+-					first.focus( 1 );
+-					event.preventDefault();
+-				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+-					last.focus( 1 );
+-					event.preventDefault();
+-				}
+-			},
+-			mousedown: function( event ) {
+-				if ( this._moveToTop( event ) ) {
+-					this._focusTabbable();
+-				}
+-			}
+-		});
+-
+-		// We assume that any existing aria-describedby attribute means
+-		// that the dialog content is marked up properly
+-		// otherwise we brute force the content as the description
+-		if ( !this.element.find("[aria-describedby]").length ) {
+-			this.uiDialog.attr({
+-				"aria-describedby": this.element.uniqueId().attr("id")
+-			});
+-		}
+-	},
+-
+-	_createTitlebar: function() {
+-		var uiDialogTitle;
+-
+-		this.uiDialogTitlebar = $("<div>")
+-			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+-			.prependTo( this.uiDialog );
+-		this._on( this.uiDialogTitlebar, {
+-			mousedown: function( event ) {
+-				// Don't prevent click on close button (#8838)
+-				// Focusing a dialog that is partially scrolled out of view
+-				// causes the browser to scroll it into view, preventing the click event
+-				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
+-					// Dialog isn't getting focus when dragging (#8063)
+-					this.uiDialog.focus();
+-				}
+-			}
+-		});
+-
+-		this.uiDialogTitlebarClose = $("<button></button>")
+-			.button({
+-				label: this.options.closeText,
+-				icons: {
+-					primary: "ui-icon-closethick"
+-				},
+-				text: false
+-			})
+-			.addClass("ui-dialog-titlebar-close")
+-			.appendTo( this.uiDialogTitlebar );
+-		this._on( this.uiDialogTitlebarClose, {
+-			click: function( event ) {
+-				event.preventDefault();
+-				this.close( event );
+-			}
+-		});
+-
+-		uiDialogTitle = $("<span>")
+-			.uniqueId()
+-			.addClass("ui-dialog-title")
+-			.prependTo( this.uiDialogTitlebar );
+-		this._title( uiDialogTitle );
+-
+-		this.uiDialog.attr({
+-			"aria-labelledby": uiDialogTitle.attr("id")
+-		});
+-	},
+-
+-	_title: function( title ) {
+-		if ( !this.options.title ) {
+-			title.html("&#160;");
+-		}
+-		title.text( this.options.title );
+-	},
+-
+-	_createButtonPane: function() {
+-		this.uiDialogButtonPane = $("<div>")
+-			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+-
+-		this.uiButtonSet = $("<div>")
+-			.addClass("ui-dialog-buttonset")
+-			.appendTo( this.uiDialogButtonPane );
+-
+-		this._createButtons();
+-	},
+-
+-	_createButtons: function() {
+-		var that = this,
+-			buttons = this.options.buttons;
+-
+-		// if we already have a button pane, remove it
+-		this.uiDialogButtonPane.remove();
+-		this.uiButtonSet.empty();
+-
+-		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+-			this.uiDialog.removeClass("ui-dialog-buttons");
+-			return;
+-		}
+-
+-		$.each( buttons, function( name, props ) {
+-			var click, buttonOptions;
+-			props = $.isFunction( props ) ?
+-				{ click: props, text: name } :
+-				props;
+-			// Default to a non-submitting button
+-			props = $.extend( { type: "button" }, props );
+-			// Change the context for the click callback to be the main element
+-			click = props.click;
+-			props.click = function() {
+-				click.apply( that.element[0], arguments );
+-			};
+-			buttonOptions = {
+-				icons: props.icons,
+-				text: props.showText
+-			};
+-			delete props.icons;
+-			delete props.showText;
+-			$( "<button></button>", props )
+-				.button( buttonOptions )
+-				.appendTo( that.uiButtonSet );
+-		});
+-		this.uiDialog.addClass("ui-dialog-buttons");
+-		this.uiDialogButtonPane.appendTo( this.uiDialog );
+-	},
+-
+-	_makeDraggable: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		function filteredUi( ui ) {
+-			return {
+-				position: ui.position,
+-				offset: ui.offset
+-			};
+-		}
+-
+-		this.uiDialog.draggable({
+-			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+-			handle: ".ui-dialog-titlebar",
+-			containment: "document",
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-dragging");
+-				that._blockFrames();
+-				that._trigger( "dragStart", event, filteredUi( ui ) );
+-			},
+-			drag: function( event, ui ) {
+-				that._trigger( "drag", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.position = [
+-					ui.position.left - that.document.scrollLeft(),
+-					ui.position.top - that.document.scrollTop()
+-				];
+-				$( this ).removeClass("ui-dialog-dragging");
+-				that._unblockFrames();
+-				that._trigger( "dragStop", event, filteredUi( ui ) );
+-			}
+-		});
+-	},
+-
+-	_makeResizable: function() {
+-		var that = this,
+-			options = this.options,
+-			handles = options.resizable,
+-			// .ui-resizable has position: relative defined in the stylesheet
+-			// but dialogs have to use absolute or fixed positioning
+-			position = this.uiDialog.css("position"),
+-			resizeHandles = typeof handles === "string" ?
+-				handles	:
+-				"n,e,s,w,se,sw,ne,nw";
+-
+-		function filteredUi( ui ) {
+-			return {
+-				originalPosition: ui.originalPosition,
+-				originalSize: ui.originalSize,
+-				position: ui.position,
+-				size: ui.size
+-			};
+-		}
+-
+-		this.uiDialog.resizable({
+-			cancel: ".ui-dialog-content",
+-			containment: "document",
+-			alsoResize: this.element,
+-			maxWidth: options.maxWidth,
+-			maxHeight: options.maxHeight,
+-			minWidth: options.minWidth,
+-			minHeight: this._minHeight(),
+-			handles: resizeHandles,
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-resizing");
+-				that._blockFrames();
+-				that._trigger( "resizeStart", event, filteredUi( ui ) );
+-			},
+-			resize: function( event, ui ) {
+-				that._trigger( "resize", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.height = $( this ).height();
+-				options.width = $( this ).width();
+-				$( this ).removeClass("ui-dialog-resizing");
+-				that._unblockFrames();
+-				that._trigger( "resizeStop", event, filteredUi( ui ) );
+-			}
+-		})
+-		.css( "position", position );
+-	},
+-
+-	_minHeight: function() {
+-		var options = this.options;
+-
+-		return options.height === "auto" ?
+-			options.minHeight :
+-			Math.min( options.minHeight, options.height );
+-	},
+-
+-	_position: function() {
+-		// Need to show the dialog to get the actual offset in the position plugin
+-		var isVisible = this.uiDialog.is(":visible");
+-		if ( !isVisible ) {
+-			this.uiDialog.show();
+-		}
+-		this.uiDialog.position( this.options.position );
+-		if ( !isVisible ) {
+-			this.uiDialog.hide();
+-		}
+-	},
+-
+-	_setOptions: function( options ) {
+-		var that = this,
+-			resize = false,
+-			resizableOptions = {};
+-
+-		$.each( options, function( key, value ) {
+-			that._setOption( key, value );
+-
+-			if ( key in sizeRelatedOptions ) {
+-				resize = true;
+-			}
+-			if ( key in resizableRelatedOptions ) {
+-				resizableOptions[ key ] = value;
+-			}
+-		});
+-
+-		if ( resize ) {
+-			this._size();
+-			this._position();
+-		}
+-		if ( this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", resizableOptions );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		/*jshint maxcomplexity:15*/
+-		var isDraggable, isResizable,
+-			uiDialog = this.uiDialog;
+-
+-		if ( key === "dialogClass" ) {
+-			uiDialog
+-				.removeClass( this.options.dialogClass )
+-				.addClass( value );
+-		}
+-
+-		if ( key === "disabled" ) {
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "appendTo" ) {
+-			this.uiDialog.appendTo( this._appendTo() );
+-		}
+-
+-		if ( key === "buttons" ) {
+-			this._createButtons();
+-		}
+-
+-		if ( key === "closeText" ) {
+-			this.uiDialogTitlebarClose.button({
+-				// Ensure that we always pass a string
+-				label: "" + value
+-			});
+-		}
+-
+-		if ( key === "draggable" ) {
+-			isDraggable = uiDialog.is(":data(ui-draggable)");
+-			if ( isDraggable && !value ) {
+-				uiDialog.draggable("destroy");
+-			}
+-
+-			if ( !isDraggable && value ) {
+-				this._makeDraggable();
+-			}
+-		}
+-
+-		if ( key === "position" ) {
+-			this._position();
+-		}
+-
+-		if ( key === "resizable" ) {
+-			// currently resizable, becoming non-resizable
+-			isResizable = uiDialog.is(":data(ui-resizable)");
+-			if ( isResizable && !value ) {
+-				uiDialog.resizable("destroy");
+-			}
+-
+-			// currently resizable, changing handles
+-			if ( isResizable && typeof value === "string" ) {
+-				uiDialog.resizable( "option", "handles", value );
+-			}
+-
+-			// currently non-resizable, becoming resizable
+-			if ( !isResizable && value !== false ) {
+-				this._makeResizable();
+-			}
+-		}
+-
+-		if ( key === "title" ) {
+-			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
+-		}
+-	},
+-
+-	_size: function() {
+-		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+-		// divs will both have width and height set, so we need to reset them
+-		var nonContentHeight, minContentHeight, maxContentHeight,
+-			options = this.options;
+-
+-		// Reset content sizing
+-		this.element.show().css({
+-			width: "auto",
+-			minHeight: 0,
+-			maxHeight: "none",
+-			height: 0
+-		});
+-
+-		if ( options.minWidth > options.width ) {
+-			options.width = options.minWidth;
+-		}
+-
+-		// reset wrapper sizing
+-		// determine the height of all the non-content elements
+-		nonContentHeight = this.uiDialog.css({
+-				height: "auto",
+-				width: options.width
+-			})
+-			.outerHeight();
+-		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+-		maxContentHeight = typeof options.maxHeight === "number" ?
+-			Math.max( 0, options.maxHeight - nonContentHeight ) :
+-			"none";
+-
+-		if ( options.height === "auto" ) {
+-			this.element.css({
+-				minHeight: minContentHeight,
+-				maxHeight: maxContentHeight,
+-				height: "auto"
+-			});
+-		} else {
+-			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+-		}
+-
+-		if (this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+-		}
+-	},
+-
+-	_blockFrames: function() {
+-		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+-			var iframe = $( this );
+-
+-			return $( "<div>" )
+-				.css({
+-					position: "absolute",
+-					width: iframe.outerWidth(),
+-					height: iframe.outerHeight()
+-				})
+-				.appendTo( iframe.parent() )
+-				.offset( iframe.offset() )[0];
+-		});
+-	},
+-
+-	_unblockFrames: function() {
+-		if ( this.iframeBlocks ) {
+-			this.iframeBlocks.remove();
+-			delete this.iframeBlocks;
+-		}
+-	},
+-
+-	_allowInteraction: function( event ) {
+-		if ( $( event.target ).closest(".ui-dialog").length ) {
+-			return true;
+-		}
+-
+-		// TODO: Remove hack when datepicker implements
+-		// the .ui-front logic (#8989)
+-		return !!$( event.target ).closest(".ui-datepicker").length;
+-	},
+-
+-	_createOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		var that = this,
+-			widgetFullName = this.widgetFullName;
+-		if ( !$.ui.dialog.overlayInstances ) {
+-			// Prevent use of anchors and inputs.
+-			// We use a delay in case the overlay is created from an
+-			// event that we're going to be cancelling. (#2804)
+-			this._delay(function() {
+-				// Handle .dialog().dialog("close") (#4065)
+-				if ( $.ui.dialog.overlayInstances ) {
+-					this.document.bind( "focusin.dialog", function( event ) {
+-						if ( !that._allowInteraction( event ) ) {
+-							event.preventDefault();
+-							$(".ui-dialog:visible:last .ui-dialog-content")
+-								.data( widgetFullName )._focusTabbable();
+-						}
+-					});
+-				}
+-			});
+-		}
+-
+-		this.overlay = $("<div>")
+-			.addClass("ui-widget-overlay ui-front")
+-			.appendTo( this._appendTo() );
+-		this._on( this.overlay, {
+-			mousedown: "_keepFocus"
+-		});
+-		$.ui.dialog.overlayInstances++;
+-	},
+-
+-	_destroyOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		if ( this.overlay ) {
+-			$.ui.dialog.overlayInstances--;
+-
+-			if ( !$.ui.dialog.overlayInstances ) {
+-				this.document.unbind( "focusin.dialog" );
+-			}
+-			this.overlay.remove();
+-			this.overlay = null;
+-		}
+-	}
+-});
+-
+-$.ui.dialog.overlayInstances = 0;
+-
+-// DEPRECATED
+-if ( $.uiBackCompat !== false ) {
+-	// position option with array notation
+-	// just override with old implementation
+-	$.widget( "ui.dialog", $.ui.dialog, {
+-		_position: function() {
+-			var position = this.options.position,
+-				myAt = [],
+-				offset = [ 0, 0 ],
+-				isVisible;
+-
+-			if ( position ) {
+-				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+-					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
+-					if ( myAt.length === 1 ) {
+-						myAt[1] = myAt[0];
+-					}
+-
+-					$.each( [ "left", "top" ], function( i, offsetPosition ) {
+-						if ( +myAt[ i ] === myAt[ i ] ) {
+-							offset[ i ] = myAt[ i ];
+-							myAt[ i ] = offsetPosition;
+-						}
+-					});
+-
+-					position = {
+-						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+-							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+-						at: myAt.join(" ")
+-					};
+-				}
+-
+-				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
+-			} else {
+-				position = $.ui.dialog.prototype.options.position;
+-			}
+-
+-			// need to show the dialog to get the actual offset in the position plugin
+-			isVisible = this.uiDialog.is(":visible");
+-			if ( !isVisible ) {
+-				this.uiDialog.show();
+-			}
+-			this.uiDialog.position( position );
+-			if ( !isVisible ) {
+-				this.uiDialog.hide();
+-			}
+-		}
+-	});
+-}
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.widget( "ui.menu", {
+-	version: "1.10.3",
+-	defaultElement: "<ul>",
+-	delay: 300,
+-	options: {
+-		icons: {
+-			submenu: "ui-icon-carat-1-e"
+-		},
+-		menus: "ul",
+-		position: {
+-			my: "left top",
+-			at: "right top"
+-		},
+-		role: "menu",
+-
+-		// callbacks
+-		blur: null,
+-		focus: null,
+-		select: null
+-	},
+-
+-	_create: function() {
+-		this.activeMenu = this.element;
+-		// flag used to prevent firing of the click handler
+-		// as the event bubbles up through nested menus
+-		this.mouseHandled = false;
+-		this.element
+-			.uniqueId()
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+-			.attr({
+-				role: this.options.role,
+-				tabIndex: 0
+-			})
+-			// need to catch all clicks on disabled menu
+-			// not possible through _on
+-			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
+-				if ( this.options.disabled ) {
+-					event.preventDefault();
+-				}
+-			}, this ));
+-
+-		if ( this.options.disabled ) {
+-			this.element
+-				.addClass( "ui-state-disabled" )
+-				.attr( "aria-disabled", "true" );
+-		}
+-
+-		this._on({
+-			// Prevent focus from sticking to links inside menu after clicking
+-			// them (focus should always stay on UL during navigation).
+-			"mousedown .ui-menu-item > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-state-disabled > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-menu-item:has(a)": function( event ) {
+-				var target = $( event.target ).closest( ".ui-menu-item" );
+-				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+-					this.mouseHandled = true;
+-
+-					this.select( event );
+-					// Open submenu on click
+-					if ( target.has( ".ui-menu" ).length ) {
+-						this.expand( event );
+-					} else if ( !this.element.is( ":focus" ) ) {
+-						// Redirect focus to the menu
+-						this.element.trigger( "focus", [ true ] );
+-
+-						// If the active item is on the top level, let it stay active.
+-						// Otherwise, blur the active item since it is no longer visible.
+-						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+-							clearTimeout( this.timer );
+-						}
+-					}
+-				}
+-			},
+-			"mouseenter .ui-menu-item": function( event ) {
+-				var target = $( event.currentTarget );
+-				// Remove ui-state-active class from siblings of the newly focused menu item
+-				// to avoid a jump caused by adjacent elements both having a class with a border
+-				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
+-				this.focus( event, target );
+-			},
+-			mouseleave: "collapseAll",
+-			"mouseleave .ui-menu": "collapseAll",
+-			focus: function( event, keepActiveItem ) {
+-				// If there's already an active item, keep it active
+-				// If not, activate the first item
+-				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+-
+-				if ( !keepActiveItem ) {
+-					this.focus( event, item );
+-				}
+-			},
+-			blur: function( event ) {
+-				this._delay(function() {
+-					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+-						this.collapseAll( event );
+-					}
+-				});
+-			},
+-			keydown: "_keydown"
+-		});
+-
+-		this.refresh();
+-
+-		// Clicks outside of a menu collapse any open menus
+-		this._on( this.document, {
+-			click: function( event ) {
+-				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
+-					this.collapseAll( event );
+-				}
+-
+-				// Reset the mouseHandled flag
+-				this.mouseHandled = false;
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		// Destroy (sub)menus
+-		this.element
+-			.removeAttr( "aria-activedescendant" )
+-			.find( ".ui-menu" ).addBack()
+-				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
+-				.removeAttr( "role" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "aria-labelledby" )
+-				.removeAttr( "aria-expanded" )
+-				.removeAttr( "aria-hidden" )
+-				.removeAttr( "aria-disabled" )
+-				.removeUniqueId()
+-				.show();
+-
+-		// Destroy menu items
+-		this.element.find( ".ui-menu-item" )
+-			.removeClass( "ui-menu-item" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-disabled" )
+-			.children( "a" )
+-				.removeUniqueId()
+-				.removeClass( "ui-corner-all ui-state-hover" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "role" )
+-				.removeAttr( "aria-haspopup" )
+-				.children().each( function() {
+-					var elem = $( this );
+-					if ( elem.data( "ui-menu-submenu-carat" ) ) {
+-						elem.remove();
+-					}
+-				});
+-
+-		// Destroy menu dividers
+-		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:20*/
+-		var match, prev, character, skip, regex,
+-			preventDefault = true;
+-
+-		function escape( value ) {
+-			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+-		}
+-
+-		switch ( event.keyCode ) {
+-		case $.ui.keyCode.PAGE_UP:
+-			this.previousPage( event );
+-			break;
+-		case $.ui.keyCode.PAGE_DOWN:
+-			this.nextPage( event );
+-			break;
+-		case $.ui.keyCode.HOME:
+-			this._move( "first", "first", event );
+-			break;
+-		case $.ui.keyCode.END:
+-			this._move( "last", "last", event );
+-			break;
+-		case $.ui.keyCode.UP:
+-			this.previous( event );
+-			break;
+-		case $.ui.keyCode.DOWN:
+-			this.next( event );
+-			break;
+-		case $.ui.keyCode.LEFT:
+-			this.collapse( event );
+-			break;
+-		case $.ui.keyCode.RIGHT:
+-			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+-				this.expand( event );
+-			}
+-			break;
+-		case $.ui.keyCode.ENTER:
+-		case $.ui.keyCode.SPACE:
+-			this._activate( event );
+-			break;
+-		case $.ui.keyCode.ESCAPE:
+-			this.collapse( event );
+-			break;
+-		default:
+-			preventDefault = false;
+-			prev = this.previousFilter || "";
+-			character = String.fromCharCode( event.keyCode );
+-			skip = false;
+-
+-			clearTimeout( this.filterTimer );
+-
+-			if ( character === prev ) {
+-				skip = true;
+-			} else {
+-				character = prev + character;
+-			}
+-
+-			regex = new RegExp( "^" + escape( character ), "i" );
+-			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-				return regex.test( $( this ).children( "a" ).text() );
+-			});
+-			match = skip && match.index( this.active.next() ) !== -1 ?
+-				this.active.nextAll( ".ui-menu-item" ) :
+-				match;
+-
+-			// If no matches on the current filter, reset to the last character pressed
+-			// to move down the menu to the first item that starts with that character
+-			if ( !match.length ) {
+-				character = String.fromCharCode( event.keyCode );
+-				regex = new RegExp( "^" + escape( character ), "i" );
+-				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-					return regex.test( $( this ).children( "a" ).text() );
+-				});
+-			}
+-
+-			if ( match.length ) {
+-				this.focus( event, match );
+-				if ( match.length > 1 ) {
+-					this.previousFilter = character;
+-					this.filterTimer = this._delay(function() {
+-						delete this.previousFilter;
+-					}, 1000 );
+-				} else {
+-					delete this.previousFilter;
+-				}
+-			} else {
+-				delete this.previousFilter;
+-			}
+-		}
+-
+-		if ( preventDefault ) {
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_activate: function( event ) {
+-		if ( !this.active.is( ".ui-state-disabled" ) ) {
+-			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
+-				this.expand( event );
+-			} else {
+-				this.select( event );
+-			}
+-		}
+-	},
+-
+-	refresh: function() {
+-		var menus,
+-			icon = this.options.icons.submenu,
+-			submenus = this.element.find( this.options.menus );
+-
+-		// Initialize nested menus
+-		submenus.filter( ":not(.ui-menu)" )
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.hide()
+-			.attr({
+-				role: this.options.role,
+-				"aria-hidden": "true",
+-				"aria-expanded": "false"
+-			})
+-			.each(function() {
+-				var menu = $( this ),
+-					item = menu.prev( "a" ),
+-					submenuCarat = $( "<span>" )
+-						.addClass( "ui-menu-icon ui-icon " + icon )
+-						.data( "ui-menu-submenu-carat", true );
+-
+-				item
+-					.attr( "aria-haspopup", "true" )
+-					.prepend( submenuCarat );
+-				menu.attr( "aria-labelledby", item.attr( "id" ) );
+-			});
+-
+-		menus = submenus.add( this.element );
+-
+-		// Don't refresh list items that are already adapted
+-		menus.children( ":not(.ui-menu-item):has(a)" )
+-			.addClass( "ui-menu-item" )
+-			.attr( "role", "presentation" )
+-			.children( "a" )
+-				.uniqueId()
+-				.addClass( "ui-corner-all" )
+-				.attr({
+-					tabIndex: -1,
+-					role: this._itemRole()
+-				});
+-
+-		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
+-		menus.children( ":not(.ui-menu-item)" ).each(function() {
+-			var item = $( this );
+-			// hyphen, em dash, en dash
+-			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
+-				item.addClass( "ui-widget-content ui-menu-divider" );
+-			}
+-		});
+-
+-		// Add aria-disabled attribute to any disabled menu item
+-		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+-
+-		// If the active item has been removed, blur the menu
+-		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			this.blur();
+-		}
+-	},
+-
+-	_itemRole: function() {
+-		return {
+-			menu: "menuitem",
+-			listbox: "option"
+-		}[ this.options.role ];
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "icons" ) {
+-			this.element.find( ".ui-menu-icon" )
+-				.removeClass( this.options.icons.submenu )
+-				.addClass( value.submenu );
+-		}
+-		this._super( key, value );
+-	},
+-
+-	focus: function( event, item ) {
+-		var nested, focused;
+-		this.blur( event, event && event.type === "focus" );
+-
+-		this._scrollIntoView( item );
+-
+-		this.active = item.first();
+-		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
+-		// Only update aria-activedescendant if there's a role
+-		// otherwise we assume focus is managed elsewhere
+-		if ( this.options.role ) {
+-			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+-		}
+-
+-		// Highlight active parent menu item, if any
+-		this.active
+-			.parent()
+-			.closest( ".ui-menu-item" )
+-			.children( "a:first" )
+-			.addClass( "ui-state-active" );
+-
+-		if ( event && event.type === "keydown" ) {
+-			this._close();
+-		} else {
+-			this.timer = this._delay(function() {
+-				this._close();
+-			}, this.delay );
+-		}
+-
+-		nested = item.children( ".ui-menu" );
+-		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
+-			this._startOpening(nested);
+-		}
+-		this.activeMenu = item.parent();
+-
+-		this._trigger( "focus", event, { item: item } );
+-	},
+-
+-	_scrollIntoView: function( item ) {
+-		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+-		if ( this._hasScroll() ) {
+-			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+-			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+-			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+-			scroll = this.activeMenu.scrollTop();
+-			elementHeight = this.activeMenu.height();
+-			itemHeight = item.height();
+-
+-			if ( offset < 0 ) {
+-				this.activeMenu.scrollTop( scroll + offset );
+-			} else if ( offset + itemHeight > elementHeight ) {
+-				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+-			}
+-		}
+-	},
+-
+-	blur: function( event, fromFocus ) {
+-		if ( !fromFocus ) {
+-			clearTimeout( this.timer );
+-		}
+-
+-		if ( !this.active ) {
+-			return;
+-		}
+-
+-		this.active.children( "a" ).removeClass( "ui-state-focus" );
+-		this.active = null;
+-
+-		this._trigger( "blur", event, { item: this.active } );
+-	},
+-
+-	_startOpening: function( submenu ) {
+-		clearTimeout( this.timer );
+-
+-		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
+-		// shift in the submenu position when mousing over the carat icon
+-		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+-			return;
+-		}
+-
+-		this.timer = this._delay(function() {
+-			this._close();
+-			this._open( submenu );
+-		}, this.delay );
+-	},
+-
+-	_open: function( submenu ) {
+-		var position = $.extend({
+-			of: this.active
+-		}, this.options.position );
+-
+-		clearTimeout( this.timer );
+-		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+-			.hide()
+-			.attr( "aria-hidden", "true" );
+-
+-		submenu
+-			.show()
+-			.removeAttr( "aria-hidden" )
+-			.attr( "aria-expanded", "true" )
+-			.position( position );
+-	},
+-
+-	collapseAll: function( event, all ) {
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			// If we were passed an event, look for the submenu that contains the event
+-			var currentMenu = all ? this.element :
+-				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+-
+-			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+-			if ( !currentMenu.length ) {
+-				currentMenu = this.element;
+-			}
+-
+-			this._close( currentMenu );
+-
+-			this.blur( event );
+-			this.activeMenu = currentMenu;
+-		}, this.delay );
+-	},
+-
+-	// With no arguments, closes the currently active menu - if nothing is active
+-	// it closes all menus.  If passed an argument, it will search for menus BELOW
+-	_close: function( startMenu ) {
+-		if ( !startMenu ) {
+-			startMenu = this.active ? this.active.parent() : this.element;
+-		}
+-
+-		startMenu
+-			.find( ".ui-menu" )
+-				.hide()
+-				.attr( "aria-hidden", "true" )
+-				.attr( "aria-expanded", "false" )
+-			.end()
+-			.find( "a.ui-state-active" )
+-				.removeClass( "ui-state-active" );
+-	},
+-
+-	collapse: function( event ) {
+-		var newItem = this.active &&
+-			this.active.parent().closest( ".ui-menu-item", this.element );
+-		if ( newItem && newItem.length ) {
+-			this._close();
+-			this.focus( event, newItem );
+-		}
+-	},
+-
+-	expand: function( event ) {
+-		var newItem = this.active &&
+-			this.active
+-				.children( ".ui-menu " )
+-				.children( ".ui-menu-item" )
+-				.first();
+-
+-		if ( newItem && newItem.length ) {
+-			this._open( newItem.parent() );
+-
+-			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+-			this._delay(function() {
+-				this.focus( event, newItem );
+-			});
+-		}
+-	},
+-
+-	next: function( event ) {
+-		this._move( "next", "first", event );
+-	},
+-
+-	previous: function( event ) {
+-		this._move( "prev", "last", event );
+-	},
+-
+-	isFirstItem: function() {
+-		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+-	},
+-
+-	isLastItem: function() {
+-		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+-	},
+-
+-	_move: function( direction, filter, event ) {
+-		var next;
+-		if ( this.active ) {
+-			if ( direction === "first" || direction === "last" ) {
+-				next = this.active
+-					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+-					.eq( -1 );
+-			} else {
+-				next = this.active
+-					[ direction + "All" ]( ".ui-menu-item" )
+-					.eq( 0 );
+-			}
+-		}
+-		if ( !next || !next.length || !this.active ) {
+-			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
+-		}
+-
+-		this.focus( event, next );
+-	},
+-
+-	nextPage: function( event ) {
+-		var item, base, height;
+-
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isLastItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.nextAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base - height < 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
+-				[ !this.active ? "first" : "last" ]() );
+-		}
+-	},
+-
+-	previousPage: function( event ) {
+-		var item, base, height;
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isFirstItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.prevAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base + height > 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+-		}
+-	},
+-
+-	_hasScroll: function() {
+-		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+-	},
+-
+-	select: function( event ) {
+-		// TODO: It should never be possible to not have an active item at this
+-		// point, but the tests don't trigger mouseenter before click.
+-		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+-		var ui = { item: this.active };
+-		if ( !this.active.has( ".ui-menu" ).length ) {
+-			this.collapseAll( event, true );
+-		}
+-		this._trigger( "select", event, ui );
+-	}
+-});
+-
+-}( jQuery ));
+-(function( $, undefined ) {
+-
+-$.widget( "ui.progressbar", {
+-	version: "1.10.3",
+-	options: {
+-		max: 100,
+-		value: 0,
+-
+-		change: null,
+-		complete: null
+-	},
+-
+-	min: 0,
+-
+-	_create: function() {
+-		// Constrain initial value
+-		this.oldValue = this.options.value = this._constrainedValue();
+-
+-		this.element
+-			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.attr({
+-				// Only set static values, aria-valuenow and aria-valuemax are
+-				// set inside _refreshValue()
+-				role: "progressbar",
+-				"aria-valuemin": this.min
+-			});
+-
+-		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+-			.appendTo( this.element );
+-
+-		this._refreshValue();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-
+-		this.valueDiv.remove();
+-	},
+-
+-	value: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			return this.options.value;
+-		}
+-
+-		this.options.value = this._constrainedValue( newValue );
+-		this._refreshValue();
+-	},
+-
+-	_constrainedValue: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			newValue = this.options.value;
+-		}
+-
+-		this.indeterminate = newValue === false;
+-
+-		// sanitize value
+-		if ( typeof newValue !== "number" ) {
+-			newValue = 0;
+-		}
+-
+-		return this.indeterminate ? false :
+-			Math.min( this.options.max, Math.max( this.min, newValue ) );
+-	},
+-
+-	_setOptions: function( options ) {
+-		// Ensure "value" option is set after other values (like max)
+-		var value = options.value;
+-		delete options.value;
+-
+-		this._super( options );
+-
+-		this.options.value = this._constrainedValue( value );
+-		this._refreshValue();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "max" ) {
+-			// Don't allow a max less than min
+-			value = Math.max( this.min, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	_percentage: function() {
+-		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+-	},
+-
+-	_refreshValue: function() {
+-		var value = this.options.value,
+-			percentage = this._percentage();
+-
+-		this.valueDiv
+-			.toggle( this.indeterminate || value > this.min )
+-			.toggleClass( "ui-corner-right", value === this.options.max )
+-			.width( percentage.toFixed(0) + "%" );
+-
+-		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+-
+-		if ( this.indeterminate ) {
+-			this.element.removeAttr( "aria-valuenow" );
+-			if ( !this.overlayDiv ) {
+-				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+-			}
+-		} else {
+-			this.element.attr({
+-				"aria-valuemax": this.options.max,
+-				"aria-valuenow": value
+-			});
+-			if ( this.overlayDiv ) {
+-				this.overlayDiv.remove();
+-				this.overlayDiv = null;
+-			}
+-		}
+-
+-		if ( this.oldValue !== value ) {
+-			this.oldValue = value;
+-			this._trigger( "change" );
+-		}
+-		if ( value === this.options.max ) {
+-			this._trigger( "complete" );
+-		}
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-// number of pages in a slider
+-// (how many times can you page up/down to go through the whole range)
+-var numPages = 5;
+-
+-$.widget( "ui.slider", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "slide",
+-
+-	options: {
+-		animate: false,
+-		distance: 0,
+-		max: 100,
+-		min: 0,
+-		orientation: "horizontal",
+-		range: false,
+-		step: 1,
+-		value: 0,
+-		values: null,
+-
+-		// callbacks
+-		change: null,
+-		slide: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		this._keySliding = false;
+-		this._mouseSliding = false;
+-		this._animateOff = true;
+-		this._handleIndex = null;
+-		this._detectOrientation();
+-		this._mouseInit();
+-
+-		this.element
+-			.addClass( "ui-slider" +
+-				" ui-slider-" + this.orientation +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all");
+-
+-		this._refresh();
+-		this._setOption( "disabled", this.options.disabled );
+-
+-		this._animateOff = false;
+-	},
+-
+-	_refresh: function() {
+-		this._createRange();
+-		this._createHandles();
+-		this._setupEvents();
+-		this._refreshValue();
+-	},
+-
+-	_createHandles: function() {
+-		var i, handleCount,
+-			options = this.options,
+-			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+-			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+-			handles = [];
+-
+-		handleCount = ( options.values && options.values.length ) || 1;
+-
+-		if ( existingHandles.length > handleCount ) {
+-			existingHandles.slice( handleCount ).remove();
+-			existingHandles = existingHandles.slice( 0, handleCount );
+-		}
+-
+-		for ( i = existingHandles.length; i < handleCount; i++ ) {
+-			handles.push( handle );
+-		}
+-
+-		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+-
+-		this.handle = this.handles.eq( 0 );
+-
+-		this.handles.each(function( i ) {
+-			$( this ).data( "ui-slider-handle-index", i );
+-		});
+-	},
+-
+-	_createRange: function() {
+-		var options = this.options,
+-			classes = "";
+-
+-		if ( options.range ) {
+-			if ( options.range === true ) {
+-				if ( !options.values ) {
+-					options.values = [ this._valueMin(), this._valueMin() ];
+-				} else if ( options.values.length && options.values.length !== 2 ) {
+-					options.values = [ options.values[0], options.values[0] ];
+-				} else if ( $.isArray( options.values ) ) {
+-					options.values = options.values.slice(0);
+-				}
+-			}
+-
+-			if ( !this.range || !this.range.length ) {
+-				this.range = $( "<div></div>" )
+-					.appendTo( this.element );
+-
+-				classes = "ui-slider-range" +
+-				// note: this isn't the most fittingly semantic framework class for this element,
+-				// but worked best visually with a variety of themes
+-				" ui-widget-header ui-corner-all";
+-			} else {
+-				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+-					// Handle range switching from true to min/max
+-					.css({
+-						"left": "",
+-						"bottom": ""
+-					});
+-			}
+-
+-			this.range.addClass( classes +
+-				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+-		} else {
+-			this.range = $([]);
+-		}
+-	},
+-
+-	_setupEvents: function() {
+-		var elements = this.handles.add( this.range ).filter( "a" );
+-		this._off( elements );
+-		this._on( elements, this._handleEvents );
+-		this._hoverable( elements );
+-		this._focusable( elements );
+-	},
+-
+-	_destroy: function() {
+-		this.handles.remove();
+-		this.range.remove();
+-
+-		this.element
+-			.removeClass( "ui-slider" +
+-				" ui-slider-horizontal" +
+-				" ui-slider-vertical" +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" );
+-
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function( event ) {
+-		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+-			that = this,
+-			o = this.options;
+-
+-		if ( o.disabled ) {
+-			return false;
+-		}
+-
+-		this.elementSize = {
+-			width: this.element.outerWidth(),
+-			height: this.element.outerHeight()
+-		};
+-		this.elementOffset = this.element.offset();
+-
+-		position = { x: event.pageX, y: event.pageY };
+-		normValue = this._normValueFromMouse( position );
+-		distance = this._valueMax() - this._valueMin() + 1;
+-		this.handles.each(function( i ) {
+-			var thisDistance = Math.abs( normValue - that.values(i) );
+-			if (( distance > thisDistance ) ||
+-				( distance === thisDistance &&
+-					(i === that._lastChangedValue || that.values(i) === o.min ))) {
+-				distance = thisDistance;
+-				closestHandle = $( this );
+-				index = i;
+-			}
+-		});
+-
+-		allowed = this._start( event, index );
+-		if ( allowed === false ) {
+-			return false;
+-		}
+-		this._mouseSliding = true;
+-
+-		this._handleIndex = index;
+-
+-		closestHandle
+-			.addClass( "ui-state-active" )
+-			.focus();
+-
+-		offset = closestHandle.offset();
+-		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+-		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+-			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+-			top: event.pageY - offset.top -
+-				( closestHandle.height() / 2 ) -
+-				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+-				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+-				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+-		};
+-
+-		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+-			this._slide( event, index, normValue );
+-		}
+-		this._animateOff = true;
+-		return true;
+-	},
+-
+-	_mouseStart: function() {
+-		return true;
+-	},
+-
+-	_mouseDrag: function( event ) {
+-		var position = { x: event.pageX, y: event.pageY },
+-			normValue = this._normValueFromMouse( position );
+-
+-		this._slide( event, this._handleIndex, normValue );
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function( event ) {
+-		this.handles.removeClass( "ui-state-active" );
+-		this._mouseSliding = false;
+-
+-		this._stop( event, this._handleIndex );
+-		this._change( event, this._handleIndex );
+-
+-		this._handleIndex = null;
+-		this._clickOffset = null;
+-		this._animateOff = false;
+-
+-		return false;
+-	},
+-
+-	_detectOrientation: function() {
+-		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+-	},
+-
+-	_normValueFromMouse: function( position ) {
+-		var pixelTotal,
+-			pixelMouse,
+-			percentMouse,
+-			valueTotal,
+-			valueMouse;
+-
+-		if ( this.orientation === "horizontal" ) {
+-			pixelTotal = this.elementSize.width;
+-			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+-		} else {
+-			pixelTotal = this.elementSize.height;
+-			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+-		}
+-
+-		percentMouse = ( pixelMouse / pixelTotal );
+-		if ( percentMouse > 1 ) {
+-			percentMouse = 1;
+-		}
+-		if ( percentMouse < 0 ) {
+-			percentMouse = 0;
+-		}
+-		if ( this.orientation === "vertical" ) {
+-			percentMouse = 1 - percentMouse;
+-		}
+-
+-		valueTotal = this._valueMax() - this._valueMin();
+-		valueMouse = this._valueMin() + percentMouse * valueTotal;
+-
+-		return this._trimAlignValue( valueMouse );
+-	},
+-
+-	_start: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-		return this._trigger( "start", event, uiHash );
+-	},
+-
+-	_slide: function( event, index, newVal ) {
+-		var otherVal,
+-			newValues,
+-			allowed;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			otherVal = this.values( index ? 0 : 1 );
+-
+-			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+-					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+-				) {
+-				newVal = otherVal;
+-			}
+-
+-			if ( newVal !== this.values( index ) ) {
+-				newValues = this.values();
+-				newValues[ index ] = newVal;
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal,
+-					values: newValues
+-				} );
+-				otherVal = this.values( index ? 0 : 1 );
+-				if ( allowed !== false ) {
+-					this.values( index, newVal, true );
+-				}
+-			}
+-		} else {
+-			if ( newVal !== this.value() ) {
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal
+-				} );
+-				if ( allowed !== false ) {
+-					this.value( newVal );
+-				}
+-			}
+-		}
+-	},
+-
+-	_stop: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-
+-		this._trigger( "stop", event, uiHash );
+-	},
+-
+-	_change: function( event, index ) {
+-		if ( !this._keySliding && !this._mouseSliding ) {
+-			var uiHash = {
+-				handle: this.handles[ index ],
+-				value: this.value()
+-			};
+-			if ( this.options.values && this.options.values.length ) {
+-				uiHash.value = this.values( index );
+-				uiHash.values = this.values();
+-			}
+-
+-			//store the last changed value index for reference when handles overlap
+-			this._lastChangedValue = index;
+-
+-			this._trigger( "change", event, uiHash );
+-		}
+-	},
+-
+-	value: function( newValue ) {
+-		if ( arguments.length ) {
+-			this.options.value = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, 0 );
+-			return;
+-		}
+-
+-		return this._value();
+-	},
+-
+-	values: function( index, newValue ) {
+-		var vals,
+-			newValues,
+-			i;
+-
+-		if ( arguments.length > 1 ) {
+-			this.options.values[ index ] = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, index );
+-			return;
+-		}
+-
+-		if ( arguments.length ) {
+-			if ( $.isArray( arguments[ 0 ] ) ) {
+-				vals = this.options.values;
+-				newValues = arguments[ 0 ];
+-				for ( i = 0; i < vals.length; i += 1 ) {
+-					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+-					this._change( null, i );
+-				}
+-				this._refreshValue();
+-			} else {
+-				if ( this.options.values && this.options.values.length ) {
+-					return this._values( index );
+-				} else {
+-					return this.value();
+-				}
+-			}
+-		} else {
+-			return this._values();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var i,
+-			valsLength = 0;
+-
+-		if ( key === "range" && this.options.range === true ) {
+-			if ( value === "min" ) {
+-				this.options.value = this._values( 0 );
+-				this.options.values = null;
+-			} else if ( value === "max" ) {
+-				this.options.value = this._values( this.options.values.length-1 );
+-				this.options.values = null;
+-			}
+-		}
+-
+-		if ( $.isArray( this.options.values ) ) {
+-			valsLength = this.options.values.length;
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-
+-		switch ( key ) {
+-			case "orientation":
+-				this._detectOrientation();
+-				this.element
+-					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+-					.addClass( "ui-slider-" + this.orientation );
+-				this._refreshValue();
+-				break;
+-			case "value":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._change( null, 0 );
+-				this._animateOff = false;
+-				break;
+-			case "values":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				for ( i = 0; i < valsLength; i += 1 ) {
+-					this._change( null, i );
+-				}
+-				this._animateOff = false;
+-				break;
+-			case "min":
+-			case "max":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._animateOff = false;
+-				break;
+-			case "range":
+-				this._animateOff = true;
+-				this._refresh();
+-				this._animateOff = false;
+-				break;
+-		}
+-	},
+-
+-	//internal value getter
+-	// _value() returns value trimmed by min and max, aligned by step
+-	_value: function() {
+-		var val = this.options.value;
+-		val = this._trimAlignValue( val );
+-
+-		return val;
+-	},
+-
+-	//internal values getter
+-	// _values() returns array of values trimmed by min and max, aligned by step
+-	// _values( index ) returns single value trimmed by min and max, aligned by step
+-	_values: function( index ) {
+-		var val,
+-			vals,
+-			i;
+-
+-		if ( arguments.length ) {
+-			val = this.options.values[ index ];
+-			val = this._trimAlignValue( val );
+-
+-			return val;
+-		} else if ( this.options.values && this.options.values.length ) {
+-			// .slice() creates a copy of the array
+-			// this copy gets trimmed by min and max and then returned
+-			vals = this.options.values.slice();
+-			for ( i = 0; i < vals.length; i+= 1) {
+-				vals[ i ] = this._trimAlignValue( vals[ i ] );
+-			}
+-
+-			return vals;
+-		} else {
+-			return [];
+-		}
+-	},
+-
+-	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+-	_trimAlignValue: function( val ) {
+-		if ( val <= this._valueMin() ) {
+-			return this._valueMin();
+-		}
+-		if ( val >= this._valueMax() ) {
+-			return this._valueMax();
+-		}
+-		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+-			valModStep = (val - this._valueMin()) % step,
+-			alignValue = val - valModStep;
+-
+-		if ( Math.abs(valModStep) * 2 >= step ) {
+-			alignValue += ( valModStep > 0 ) ? step : ( -step );
+-		}
+-
+-		// Since JavaScript has problems with large floats, round
+-		// the final value to 5 digits after the decimal point (see #4124)
+-		return parseFloat( alignValue.toFixed(5) );
+-	},
+-
+-	_valueMin: function() {
+-		return this.options.min;
+-	},
+-
+-	_valueMax: function() {
+-		return this.options.max;
+-	},
+-
+-	_refreshValue: function() {
+-		var lastValPercent, valPercent, value, valueMin, valueMax,
+-			oRange = this.options.range,
+-			o = this.options,
+-			that = this,
+-			animate = ( !this._animateOff ) ? o.animate : false,
+-			_set = {};
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			this.handles.each(function( i ) {
+-				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+-				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-				if ( that.options.range === true ) {
+-					if ( that.orientation === "horizontal" ) {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					} else {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					}
+-				}
+-				lastValPercent = valPercent;
+-			});
+-		} else {
+-			value = this.value();
+-			valueMin = this._valueMin();
+-			valueMax = this._valueMax();
+-			valPercent = ( valueMax !== valueMin ) ?
+-					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+-					0;
+-			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-
+-			if ( oRange === "min" && this.orientation === "horizontal" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "horizontal" ) {
+-				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-			if ( oRange === "min" && this.orientation === "vertical" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "vertical" ) {
+-				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-		}
+-	},
+-
+-	_handleEvents: {
+-		keydown: function( event ) {
+-			/*jshint maxcomplexity:25*/
+-			var allowed, curVal, newVal, step,
+-				index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-				case $.ui.keyCode.END:
+-				case $.ui.keyCode.PAGE_UP:
+-				case $.ui.keyCode.PAGE_DOWN:
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					event.preventDefault();
+-					if ( !this._keySliding ) {
+-						this._keySliding = true;
+-						$( event.target ).addClass( "ui-state-active" );
+-						allowed = this._start( event, index );
+-						if ( allowed === false ) {
+-							return;
+-						}
+-					}
+-					break;
+-			}
+-
+-			step = this.options.step;
+-			if ( this.options.values && this.options.values.length ) {
+-				curVal = newVal = this.values( index );
+-			} else {
+-				curVal = newVal = this.value();
+-			}
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-					newVal = this._valueMin();
+-					break;
+-				case $.ui.keyCode.END:
+-					newVal = this._valueMax();
+-					break;
+-				case $.ui.keyCode.PAGE_UP:
+-					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.PAGE_DOWN:
+-					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-					if ( curVal === this._valueMax() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal + step );
+-					break;
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					if ( curVal === this._valueMin() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal - step );
+-					break;
+-			}
+-
+-			this._slide( event, index, newVal );
+-		},
+-		click: function( event ) {
+-			event.preventDefault();
+-		},
+-		keyup: function( event ) {
+-			var index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			if ( this._keySliding ) {
+-				this._keySliding = false;
+-				this._stop( event, index );
+-				this._change( event, index );
+-				$( event.target ).removeClass( "ui-state-active" );
+-			}
+-		}
+-	}
+-
+-});
+-
+-}(jQuery));
+-(function( $ ) {
+-
+-function modifier( fn ) {
+-	return function() {
+-		var previous = this.element.val();
+-		fn.apply( this, arguments );
+-		this._refresh();
+-		if ( previous !== this.element.val() ) {
+-			this._trigger( "change" );
+-		}
+-	};
+-}
+-
+-$.widget( "ui.spinner", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	widgetEventPrefix: "spin",
+-	options: {
+-		culture: null,
+-		icons: {
+-			down: "ui-icon-triangle-1-s",
+-			up: "ui-icon-triangle-1-n"
+-		},
+-		incremental: true,
+-		max: null,
+-		min: null,
+-		numberFormat: null,
+-		page: 10,
+-		step: 1,
+-
+-		change: null,
+-		spin: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		// handle string values that need to be parsed
+-		this._setOption( "max", this.options.max );
+-		this._setOption( "min", this.options.min );
+-		this._setOption( "step", this.options.step );
+-
+-		// format the value, but don't constrain
+-		this._value( this.element.val(), true );
+-
+-		this._draw();
+-		this._on( this._events );
+-		this._refresh();
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_getCreateOptions: function() {
+-		var options = {},
+-			element = this.element;
+-
+-		$.each( [ "min", "max", "step" ], function( i, option ) {
+-			var value = element.attr( option );
+-			if ( value !== undefined && value.length ) {
+-				options[ option ] = value;
+-			}
+-		});
+-
+-		return options;
+-	},
+-
+-	_events: {
+-		keydown: function( event ) {
+-			if ( this._start( event ) && this._keydown( event ) ) {
+-				event.preventDefault();
+-			}
+-		},
+-		keyup: "_stop",
+-		focus: function() {
+-			this.previous = this.element.val();
+-		},
+-		blur: function( event ) {
+-			if ( this.cancelBlur ) {
+-				delete this.cancelBlur;
+-				return;
+-			}
+-
+-			this._stop();
+-			this._refresh();
+-			if ( this.previous !== this.element.val() ) {
+-				this._trigger( "change", event );
+-			}
+-		},
+-		mousewheel: function( event, delta ) {
+-			if ( !delta ) {
+-				return;
+-			}
+-			if ( !this.spinning && !this._start( event ) ) {
+-				return false;
+-			}
+-
+-			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+-			clearTimeout( this.mousewheelTimer );
+-			this.mousewheelTimer = this._delay(function() {
+-				if ( this.spinning ) {
+-					this._stop( event );
+-				}
+-			}, 100 );
+-			event.preventDefault();
+-		},
+-		"mousedown .ui-spinner-button": function( event ) {
+-			var previous;
+-
+-			// We never want the buttons to have focus; whenever the user is
+-			// interacting with the spinner, the focus should be on the input.
+-			// If the input is focused then this.previous is properly set from
+-			// when the input first received focus. If the input is not focused
+-			// then we need to set this.previous based on the value before spinning.
+-			previous = this.element[0] === this.document[0].activeElement ?
+-				this.previous : this.element.val();
+-			function checkFocus() {
+-				var isActive = this.element[0] === this.document[0].activeElement;
+-				if ( !isActive ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// support: IE
+-					// IE sets focus asynchronously, so we need to check if focus
+-					// moved off of the input because the user clicked on the button.
+-					this._delay(function() {
+-						this.previous = previous;
+-					});
+-				}
+-			}
+-
+-			// ensure focus is on (or stays on) the text field
+-			event.preventDefault();
+-			checkFocus.call( this );
+-
+-			// support: IE
+-			// IE doesn't prevent moving focus even with event.preventDefault()
+-			// so we set a flag to know when we should ignore the blur event
+-			// and check (again) if focus moved off of the input.
+-			this.cancelBlur = true;
+-			this._delay(function() {
+-				delete this.cancelBlur;
+-				checkFocus.call( this );
+-			});
+-
+-			if ( this._start( event ) === false ) {
+-				return;
+-			}
+-
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		"mouseup .ui-spinner-button": "_stop",
+-		"mouseenter .ui-spinner-button": function( event ) {
+-			// button will add ui-state-active if mouse was down while mouseleave and kept down
+-			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+-				return;
+-			}
+-
+-			if ( this._start( event ) === false ) {
+-				return false;
+-			}
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		// TODO: do we really want to consider this a stop?
+-		// shouldn't we just stop the repeater and wait until mouseup before
+-		// we trigger the stop event?
+-		"mouseleave .ui-spinner-button": "_stop"
+-	},
+-
+-	_draw: function() {
+-		var uiSpinner = this.uiSpinner = this.element
+-			.addClass( "ui-spinner-input" )
+-			.attr( "autocomplete", "off" )
+-			.wrap( this._uiSpinnerHtml() )
+-			.parent()
+-				// add buttons
+-				.append( this._buttonHtml() );
+-
+-		this.element.attr( "role", "spinbutton" );
+-
+-		// button bindings
+-		this.buttons = uiSpinner.find( ".ui-spinner-button" )
+-			.attr( "tabIndex", -1 )
+-			.button()
+-			.removeClass( "ui-corner-all" );
+-
+-		// IE 6 doesn't understand height: 50% for the buttons
+-		// unless the wrapper has an explicit height
+-		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+-				uiSpinner.height() > 0 ) {
+-			uiSpinner.height( uiSpinner.height() );
+-		}
+-
+-		// disable spinner if element was already disabled
+-		if ( this.options.disabled ) {
+-			this.disable();
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		var options = this.options,
+-			keyCode = $.ui.keyCode;
+-
+-		switch ( event.keyCode ) {
+-		case keyCode.UP:
+-			this._repeat( null, 1, event );
+-			return true;
+-		case keyCode.DOWN:
+-			this._repeat( null, -1, event );
+-			return true;
+-		case keyCode.PAGE_UP:
+-			this._repeat( null, options.page, event );
+-			return true;
+-		case keyCode.PAGE_DOWN:
+-			this._repeat( null, -options.page, event );
+-			return true;
+-		}
+-
+-		return false;
+-	},
+-
+-	_uiSpinnerHtml: function() {
+-		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+-	},
+-
+-	_buttonHtml: function() {
+-		return "" +
+-			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+-				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+-			"</a>" +
+-			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+-				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+-			"</a>";
+-	},
+-
+-	_start: function( event ) {
+-		if ( !this.spinning && this._trigger( "start", event ) === false ) {
+-			return false;
+-		}
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-		this.spinning = true;
+-		return true;
+-	},
+-
+-	_repeat: function( i, steps, event ) {
+-		i = i || 500;
+-
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			this._repeat( 40, steps, event );
+-		}, i );
+-
+-		this._spin( steps * this.options.step, event );
+-	},
+-
+-	_spin: function( step, event ) {
+-		var value = this.value() || 0;
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-
+-		value = this._adjustValue( value + step * this._increment( this.counter ) );
+-
+-		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+-			this._value( value );
+-			this.counter++;
+-		}
+-	},
+-
+-	_increment: function( i ) {
+-		var incremental = this.options.incremental;
+-
+-		if ( incremental ) {
+-			return $.isFunction( incremental ) ?
+-				incremental( i ) :
+-				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+-		}
+-
+-		return 1;
+-	},
+-
+-	_precision: function() {
+-		var precision = this._precisionOf( this.options.step );
+-		if ( this.options.min !== null ) {
+-			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+-		}
+-		return precision;
+-	},
+-
+-	_precisionOf: function( num ) {
+-		var str = num.toString(),
+-			decimal = str.indexOf( "." );
+-		return decimal === -1 ? 0 : str.length - decimal - 1;
+-	},
+-
+-	_adjustValue: function( value ) {
+-		var base, aboveMin,
+-			options = this.options;
+-
+-		// make sure we're at a valid step
+-		// - find out where we are relative to the base (min or 0)
+-		base = options.min !== null ? options.min : 0;
+-		aboveMin = value - base;
+-		// - round to the nearest step
+-		aboveMin = Math.round(aboveMin / options.step) * options.step;
+-		// - rounding is based on 0, so adjust back to our base
+-		value = base + aboveMin;
+-
+-		// fix precision from bad JS floating point math
+-		value = parseFloat( value.toFixed( this._precision() ) );
+-
+-		// clamp the value
+-		if ( options.max !== null && value > options.max) {
+-			return options.max;
+-		}
+-		if ( options.min !== null && value < options.min ) {
+-			return options.min;
+-		}
+-
+-		return value;
+-	},
+-
+-	_stop: function( event ) {
+-		if ( !this.spinning ) {
+-			return;
+-		}
+-
+-		clearTimeout( this.timer );
+-		clearTimeout( this.mousewheelTimer );
+-		this.counter = 0;
+-		this.spinning = false;
+-		this._trigger( "stop", event );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "culture" || key === "numberFormat" ) {
+-			var prevValue = this._parse( this.element.val() );
+-			this.options[ key ] = value;
+-			this.element.val( this._format( prevValue ) );
+-			return;
+-		}
+-
+-		if ( key === "max" || key === "min" || key === "step" ) {
+-			if ( typeof value === "string" ) {
+-				value = this._parse( value );
+-			}
+-		}
+-		if ( key === "icons" ) {
+-			this.buttons.first().find( ".ui-icon" )
+-				.removeClass( this.options.icons.up )
+-				.addClass( value.up );
+-			this.buttons.last().find( ".ui-icon" )
+-				.removeClass( this.options.icons.down )
+-				.addClass( value.down );
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-				this.buttons.button( "disable" );
+-			} else {
+-				this.element.prop( "disabled", false );
+-				this.buttons.button( "enable" );
+-			}
+-		}
+-	},
+-
+-	_setOptions: modifier(function( options ) {
+-		this._super( options );
+-		this._value( this.element.val() );
+-	}),
+-
+-	_parse: function( val ) {
+-		if ( typeof val === "string" && val !== "" ) {
+-			val = window.Globalize && this.options.numberFormat ?
+-				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+-		}
+-		return val === "" || isNaN( val ) ? null : val;
+-	},
+-
+-	_format: function( value ) {
+-		if ( value === "" ) {
+-			return "";
+-		}
+-		return window.Globalize && this.options.numberFormat ?
+-			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+-			value;
+-	},
+-
+-	_refresh: function() {
+-		this.element.attr({
+-			"aria-valuemin": this.options.min,
+-			"aria-valuemax": this.options.max,
+-			// TODO: what should we do with values that can't be parsed?
+-			"aria-valuenow": this._parse( this.element.val() )
+-		});
+-	},
+-
+-	// update the value without triggering change
+-	_value: function( value, allowAny ) {
+-		var parsed;
+-		if ( value !== "" ) {
+-			parsed = this._parse( value );
+-			if ( parsed !== null ) {
+-				if ( !allowAny ) {
+-					parsed = this._adjustValue( parsed );
+-				}
+-				value = this._format( parsed );
+-			}
+-		}
+-		this.element.val( value );
+-		this._refresh();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-spinner-input" )
+-			.prop( "disabled", false )
+-			.removeAttr( "autocomplete" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-		this.uiSpinner.replaceWith( this.element );
+-	},
+-
+-	stepUp: modifier(function( steps ) {
+-		this._stepUp( steps );
+-	}),
+-	_stepUp: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	stepDown: modifier(function( steps ) {
+-		this._stepDown( steps );
+-	}),
+-	_stepDown: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * -this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	pageUp: modifier(function( pages ) {
+-		this._stepUp( (pages || 1) * this.options.page );
+-	}),
+-
+-	pageDown: modifier(function( pages ) {
+-		this._stepDown( (pages || 1) * this.options.page );
+-	}),
+-
+-	value: function( newVal ) {
+-		if ( !arguments.length ) {
+-			return this._parse( this.element.val() );
+-		}
+-		modifier( this._value ).call( this, newVal );
+-	},
+-
+-	widget: function() {
+-		return this.uiSpinner;
+-	}
+-});
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-var tabId = 0,
+-	rhash = /#.*$/;
+-
+-function getNextTabId() {
+-	return ++tabId;
+-}
+-
+-function isLocal( anchor ) {
+-	return anchor.hash.length > 1 &&
+-		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
+-			decodeURIComponent( location.href.replace( rhash, "" ) );
+-}
+-
+-$.widget( "ui.tabs", {
+-	version: "1.10.3",
+-	delay: 300,
+-	options: {
+-		active: null,
+-		collapsible: false,
+-		event: "click",
+-		heightStyle: "content",
+-		hide: null,
+-		show: null,
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null,
+-		beforeLoad: null,
+-		load: null
+-	},
+-
+-	_create: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		this.running = false;
+-
+-		this.element
+-			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-tabs-collapsible", options.collapsible )
+-			// Prevent users from focusing disabled tabs via click
+-			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
+-				if ( $( this ).is( ".ui-state-disabled" ) ) {
+-					event.preventDefault();
+-				}
+-			})
+-			// support: IE <9
+-			// Preventing the default action in mousedown doesn't prevent IE
+-			// from focusing the element, so if the anchor gets focused, blur.
+-			// We don't have to worry about focusing the previously focused
+-			// element since clicking on a non-focusable element should focus
+-			// the body anyway.
+-			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+-				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+-					this.blur();
+-				}
+-			});
+-
+-		this._processTabs();
+-		options.active = this._initialActive();
+-
+-		// Take disabling tabs via class attribute from HTML
+-		// into account and update option properly.
+-		if ( $.isArray( options.disabled ) ) {
+-			options.disabled = $.unique( options.disabled.concat(
+-				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+-					return that.tabs.index( li );
+-				})
+-			) ).sort();
+-		}
+-
+-		// check for length avoids error when initializing empty list
+-		if ( this.options.active !== false && this.anchors.length ) {
+-			this.active = this._findActive( options.active );
+-		} else {
+-			this.active = $();
+-		}
+-
+-		this._refresh();
+-
+-		if ( this.active.length ) {
+-			this.load( options.active );
+-		}
+-	},
+-
+-	_initialActive: function() {
+-		var active = this.options.active,
+-			collapsible = this.options.collapsible,
+-			locationHash = location.hash.substring( 1 );
+-
+-		if ( active === null ) {
+-			// check the fragment identifier in the URL
+-			if ( locationHash ) {
+-				this.tabs.each(function( i, tab ) {
+-					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+-						active = i;
+-						return false;
+-					}
+-				});
+-			}
+-
+-			// check for a tab marked active via a class
+-			if ( active === null ) {
+-				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+-			}
+-
+-			// no active tab, set to false
+-			if ( active === null || active === -1 ) {
+-				active = this.tabs.length ? 0 : false;
+-			}
+-		}
+-
+-		// handle numbers: negative, out of range
+-		if ( active !== false ) {
+-			active = this.tabs.index( this.tabs.eq( active ) );
+-			if ( active === -1 ) {
+-				active = collapsible ? false : 0;
+-			}
+-		}
+-
+-		// don't allow collapsible: false and active: false
+-		if ( !collapsible && active === false && this.anchors.length ) {
+-			active = 0;
+-		}
+-
+-		return active;
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			tab: this.active,
+-			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+-		};
+-	},
+-
+-	_tabKeydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+-			selectedIndex = this.tabs.index( focusedTab ),
+-			goingForward = true;
+-
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		switch ( event.keyCode ) {
+-			case $.ui.keyCode.RIGHT:
+-			case $.ui.keyCode.DOWN:
+-				selectedIndex++;
+-				break;
+-			case $.ui.keyCode.UP:
+-			case $.ui.keyCode.LEFT:
+-				goingForward = false;
+-				selectedIndex--;
+-				break;
+-			case $.ui.keyCode.END:
+-				selectedIndex = this.anchors.length - 1;
+-				break;
+-			case $.ui.keyCode.HOME:
+-				selectedIndex = 0;
+-				break;
+-			case $.ui.keyCode.SPACE:
+-				// Activate only, no collapsing
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				this._activate( selectedIndex );
+-				return;
+-			case $.ui.keyCode.ENTER:
+-				// Toggle (cancel delayed activation, allow collapsing)
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				// Determine if we should collapse or activate
+-				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+-				return;
+-			default:
+-				return;
+-		}
+-
+-		// Focus the appropriate tab, based on which key was pressed
+-		event.preventDefault();
+-		clearTimeout( this.activating );
+-		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+-
+-		// Navigating with control key will prevent automatic activation
+-		if ( !event.ctrlKey ) {
+-			// Update aria-selected immediately so that AT think the tab is already selected.
+-			// Otherwise AT may confuse the user by stating that they need to activate the tab,
+-			// but the tab will already be activated by the time the announcement finishes.
+-			focusedTab.attr( "aria-selected", "false" );
+-			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+-
+-			this.activating = this._delay(function() {
+-				this.option( "active", selectedIndex );
+-			}, this.delay );
+-		}
+-	},
+-
+-	_panelKeydown: function( event ) {
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		// Ctrl+up moves focus to the current tab
+-		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+-			event.preventDefault();
+-			this.active.focus();
+-		}
+-	},
+-
+-	// Alt+page up/down moves focus to the previous/next tab (and activates)
+-	_handlePageNav: function( event ) {
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+-			this._activate( this._focusNextTab( this.options.active - 1, false ) );
+-			return true;
+-		}
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+-			this._activate( this._focusNextTab( this.options.active + 1, true ) );
+-			return true;
+-		}
+-	},
+-
+-	_findNextTab: function( index, goingForward ) {
+-		var lastTabIndex = this.tabs.length - 1;
+-
+-		function constrain() {
+-			if ( index > lastTabIndex ) {
+-				index = 0;
+-			}
+-			if ( index < 0 ) {
+-				index = lastTabIndex;
+-			}
+-			return index;
+-		}
+-
+-		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+-			index = goingForward ? index + 1 : index - 1;
+-		}
+-
+-		return index;
+-	},
+-
+-	_focusNextTab: function( index, goingForward ) {
+-		index = this._findNextTab( index, goingForward );
+-		this.tabs.eq( index ).focus();
+-		return index;
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "disabled" ) {
+-			// don't use the widget factory's disabled handling
+-			this._setupDisabled( value );
+-			return;
+-		}
+-
+-		this._super( key, value);
+-
+-		if ( key === "collapsible" ) {
+-			this.element.toggleClass( "ui-tabs-collapsible", value );
+-			// Setting collapsible: false while collapsed; open first panel
+-			if ( !value && this.options.active === false ) {
+-				this._activate( 0 );
+-			}
+-		}
+-
+-		if ( key === "event" ) {
+-			this._setupEvents( value );
+-		}
+-
+-		if ( key === "heightStyle" ) {
+-			this._setupHeightStyle( value );
+-		}
+-	},
+-
+-	_tabId: function( tab ) {
+-		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
+-	},
+-
+-	_sanitizeSelector: function( hash ) {
+-		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+-	},
+-
+-	refresh: function() {
+-		var options = this.options,
+-			lis = this.tablist.children( ":has(a[href])" );
+-
+-		// get disabled tabs from class attribute from HTML
+-		// this will get converted to a boolean if needed in _refresh()
+-		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+-			return lis.index( tab );
+-		});
+-
+-		this._processTabs();
+-
+-		// was collapsed or no tabs
+-		if ( options.active === false || !this.anchors.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// was active, but active tab is gone
+-		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining tabs are disabled
+-			if ( this.tabs.length === options.disabled.length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous tab
+-			} else {
+-				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+-			}
+-		// was active, active tab still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.tabs.index( this.active );
+-		}
+-
+-		this._refresh();
+-	},
+-
+-	_refresh: function() {
+-		this._setupDisabled( this.options.disabled );
+-		this._setupEvents( this.options.event );
+-		this._setupHeightStyle( this.options.heightStyle );
+-
+-		this.tabs.not( this.active ).attr({
+-			"aria-selected": "false",
+-			tabIndex: -1
+-		});
+-		this.panels.not( this._getPanelForTab( this.active ) )
+-			.hide()
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-hidden": "true"
+-			});
+-
+-		// Make sure one tab is in the tab order
+-		if ( !this.active.length ) {
+-			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active
+-				.addClass( "ui-tabs-active ui-state-active" )
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-			this._getPanelForTab( this.active )
+-				.show()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-	},
+-
+-	_processTabs: function() {
+-		var that = this;
+-
+-		this.tablist = this._getList()
+-			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.attr( "role", "tablist" );
+-
+-		this.tabs = this.tablist.find( "> li:has(a[href])" )
+-			.addClass( "ui-state-default ui-corner-top" )
+-			.attr({
+-				role: "tab",
+-				tabIndex: -1
+-			});
+-
+-		this.anchors = this.tabs.map(function() {
+-				return $( "a", this )[ 0 ];
+-			})
+-			.addClass( "ui-tabs-anchor" )
+-			.attr({
+-				role: "presentation",
+-				tabIndex: -1
+-			});
+-
+-		this.panels = $();
+-
+-		this.anchors.each(function( i, anchor ) {
+-			var selector, panel, panelId,
+-				anchorId = $( anchor ).uniqueId().attr( "id" ),
+-				tab = $( anchor ).closest( "li" ),
+-				originalAriaControls = tab.attr( "aria-controls" );
+-
+-			// inline tab
+-			if ( isLocal( anchor ) ) {
+-				selector = anchor.hash;
+-				panel = that.element.find( that._sanitizeSelector( selector ) );
+-			// remote tab
+-			} else {
+-				panelId = that._tabId( tab );
+-				selector = "#" + panelId;
+-				panel = that.element.find( selector );
+-				if ( !panel.length ) {
+-					panel = that._createPanel( panelId );
+-					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+-				}
+-				panel.attr( "aria-live", "polite" );
+-			}
+-
+-			if ( panel.length) {
+-				that.panels = that.panels.add( panel );
+-			}
+-			if ( originalAriaControls ) {
+-				tab.data( "ui-tabs-aria-controls", originalAriaControls );
+-			}
+-			tab.attr({
+-				"aria-controls": selector.substring( 1 ),
+-				"aria-labelledby": anchorId
+-			});
+-			panel.attr( "aria-labelledby", anchorId );
+-		});
+-
+-		this.panels
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.attr( "role", "tabpanel" );
+-	},
+-
+-	// allow overriding how to find the list for rare usage scenarios (#7715)
+-	_getList: function() {
+-		return this.element.find( "ol,ul" ).eq( 0 );
+-	},
+-
+-	_createPanel: function( id ) {
+-		return $( "<div>" )
+-			.attr( "id", id )
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.data( "ui-tabs-destroy", true );
+-	},
+-
+-	_setupDisabled: function( disabled ) {
+-		if ( $.isArray( disabled ) ) {
+-			if ( !disabled.length ) {
+-				disabled = false;
+-			} else if ( disabled.length === this.anchors.length ) {
+-				disabled = true;
+-			}
+-		}
+-
+-		// disable tabs
+-		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+-			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+-				$( li )
+-					.addClass( "ui-state-disabled" )
+-					.attr( "aria-disabled", "true" );
+-			} else {
+-				$( li )
+-					.removeClass( "ui-state-disabled" )
+-					.removeAttr( "aria-disabled" );
+-			}
+-		}
+-
+-		this.options.disabled = disabled;
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			click: function( event ) {
+-				event.preventDefault();
+-			}
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+-		this._on( this.anchors, events );
+-		this._on( this.tabs, { keydown: "_tabKeydown" } );
+-		this._on( this.panels, { keydown: "_panelKeydown" } );
+-
+-		this._focusable( this.tabs );
+-		this._hoverable( this.tabs );
+-	},
+-
+-	_setupHeightStyle: function( heightStyle ) {
+-		var maxHeight,
+-			parent = this.element.parent();
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			maxHeight -= this.element.outerHeight() - this.element.height();
+-
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.element.children().not( this.panels ).each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.panels.each(function() {
+-				$( this ).height( Math.max( 0, maxHeight -
+-					$( this ).innerHeight() + $( this ).height() ) );
+-			})
+-			.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.panels.each(function() {
+-				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+-			}).height( maxHeight );
+-		}
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			anchor = $( event.currentTarget ),
+-			tab = anchor.closest( "li" ),
+-			clickedIsActive = tab[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : this._getPanelForTab( tab ),
+-			toHide = !active.length ? $() : this._getPanelForTab( active ),
+-			eventData = {
+-				oldTab: active,
+-				oldPanel: toHide,
+-				newTab: collapsing ? $() : tab,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if ( tab.hasClass( "ui-state-disabled" ) ||
+-				// tab is already loading
+-				tab.hasClass( "ui-tabs-loading" ) ||
+-				// can't switch durning an animation
+-				this.running ||
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.tabs.index( tab );
+-
+-		this.active = clickedIsActive ? $() : tab;
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		if ( !toHide.length && !toShow.length ) {
+-			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+-		}
+-
+-		if ( toShow.length ) {
+-			this.load( this.tabs.index( tab ), event );
+-		}
+-		this._toggle( event, eventData );
+-	},
+-
+-	// handles show/hide for selecting tabs
+-	_toggle: function( event, eventData ) {
+-		var that = this,
+-			toShow = eventData.newPanel,
+-			toHide = eventData.oldPanel;
+-
+-		this.running = true;
+-
+-		function complete() {
+-			that.running = false;
+-			that._trigger( "activate", event, eventData );
+-		}
+-
+-		function show() {
+-			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+-
+-			if ( toShow.length && that.options.show ) {
+-				that._show( toShow, that.options.show, complete );
+-			} else {
+-				toShow.show();
+-				complete();
+-			}
+-		}
+-
+-		// start out by hiding, then showing, then completing
+-		if ( toHide.length && this.options.hide ) {
+-			this._hide( toHide, this.options.hide, function() {
+-				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-				show();
+-			});
+-		} else {
+-			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-			toHide.hide();
+-			show();
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		eventData.oldTab.attr( "aria-selected", "false" );
+-		// If we're switching tabs, remove the old tab from the tab order.
+-		// If we're opening from collapsed state, remove the previous tab from the tab order.
+-		// If we're collapsing, then keep the collapsing tab in the tab order.
+-		if ( toShow.length && toHide.length ) {
+-			eventData.oldTab.attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.tabs.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow.attr({
+-			"aria-expanded": "true",
+-			"aria-hidden": "false"
+-		});
+-		eventData.newTab.attr({
+-			"aria-selected": "true",
+-			tabIndex: 0
+-		});
+-	},
+-
+-	_activate: function( index ) {
+-		var anchor,
+-			active = this._findActive( index );
+-
+-		// trying to activate the already active panel
+-		if ( active[ 0 ] === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the current active header
+-		if ( !active.length ) {
+-			active = this.active;
+-		}
+-
+-		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+-		this._eventHandler({
+-			target: anchor,
+-			currentTarget: anchor,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( index ) {
+-		return index === false ? $() : this.tabs.eq( index );
+-	},
+-
+-	_getIndex: function( index ) {
+-		// meta-function to give users option to provide a href string instead of a numerical index.
+-		if ( typeof index === "string" ) {
+-			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+-		}
+-
+-		return index;
+-	},
+-
+-	_destroy: function() {
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+-
+-		this.tablist
+-			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.removeAttr( "role" );
+-
+-		this.anchors
+-			.removeClass( "ui-tabs-anchor" )
+-			.removeAttr( "role" )
+-			.removeAttr( "tabIndex" )
+-			.removeUniqueId();
+-
+-		this.tabs.add( this.panels ).each(function() {
+-			if ( $.data( this, "ui-tabs-destroy" ) ) {
+-				$( this ).remove();
+-			} else {
+-				$( this )
+-					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+-						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+-					.removeAttr( "tabIndex" )
+-					.removeAttr( "aria-live" )
+-					.removeAttr( "aria-busy" )
+-					.removeAttr( "aria-selected" )
+-					.removeAttr( "aria-labelledby" )
+-					.removeAttr( "aria-hidden" )
+-					.removeAttr( "aria-expanded" )
+-					.removeAttr( "role" );
+-			}
+-		});
+-
+-		this.tabs.each(function() {
+-			var li = $( this ),
+-				prev = li.data( "ui-tabs-aria-controls" );
+-			if ( prev ) {
+-				li
+-					.attr( "aria-controls", prev )
+-					.removeData( "ui-tabs-aria-controls" );
+-			} else {
+-				li.removeAttr( "aria-controls" );
+-			}
+-		});
+-
+-		this.panels.show();
+-
+-		if ( this.options.heightStyle !== "content" ) {
+-			this.panels.css( "height", "" );
+-		}
+-	},
+-
+-	enable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === false ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = false;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.map( disabled, function( num ) {
+-					return num !== index ? num : null;
+-				});
+-			} else {
+-				disabled = $.map( this.tabs, function( li, num ) {
+-					return num !== index ? num : null;
+-				});
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	disable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === true ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = true;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.inArray( index, disabled ) !== -1 ) {
+-				return;
+-			}
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.merge( [ index ], disabled ).sort();
+-			} else {
+-				disabled = [ index ];
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	load: function( index, event ) {
+-		index = this._getIndex( index );
+-		var that = this,
+-			tab = this.tabs.eq( index ),
+-			anchor = tab.find( ".ui-tabs-anchor" ),
+-			panel = this._getPanelForTab( tab ),
+-			eventData = {
+-				tab: tab,
+-				panel: panel
+-			};
+-
+-		// not remote
+-		if ( isLocal( anchor[ 0 ] ) ) {
+-			return;
+-		}
+-
+-		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+-
+-		// support: jQuery <1.8
+-		// jQuery <1.8 returns false if the request is canceled in beforeSend,
+-		// but as of 1.8, $.ajax() always returns a jqXHR object.
+-		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+-			tab.addClass( "ui-tabs-loading" );
+-			panel.attr( "aria-busy", "true" );
+-
+-			this.xhr
+-				.success(function( response ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						panel.html( response );
+-						that._trigger( "load", event, eventData );
+-					}, 1 );
+-				})
+-				.complete(function( jqXHR, status ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						if ( status === "abort" ) {
+-							that.panels.stop( false, true );
+-						}
+-
+-						tab.removeClass( "ui-tabs-loading" );
+-						panel.removeAttr( "aria-busy" );
+-
+-						if ( jqXHR === that.xhr ) {
+-							delete that.xhr;
+-						}
+-					}, 1 );
+-				});
+-		}
+-	},
+-
+-	_ajaxSettings: function( anchor, event, eventData ) {
+-		var that = this;
+-		return {
+-			url: anchor.attr( "href" ),
+-			beforeSend: function( jqXHR, settings ) {
+-				return that._trigger( "beforeLoad", event,
+-					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+-			}
+-		};
+-	},
+-
+-	_getPanelForTab: function( tab ) {
+-		var id = $( tab ).attr( "aria-controls" );
+-		return this.element.find( this._sanitizeSelector( "#" + id ) );
+-	}
+-});
+-
+-})( jQuery );
+-(function( $ ) {
+-
+-var increments = 0;
+-
+-function addDescribedBy( elem, id ) {
+-	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+-	describedby.push( id );
+-	elem
+-		.data( "ui-tooltip-id", id )
+-		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+-}
+-
+-function removeDescribedBy( elem ) {
+-	var id = elem.data( "ui-tooltip-id" ),
+-		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+-		index = $.inArray( id, describedby );
+-	if ( index !== -1 ) {
+-		describedby.splice( index, 1 );
+-	}
+-
+-	elem.removeData( "ui-tooltip-id" );
+-	describedby = $.trim( describedby.join( " " ) );
+-	if ( describedby ) {
+-		elem.attr( "aria-describedby", describedby );
+-	} else {
+-		elem.removeAttr( "aria-describedby" );
+-	}
+-}
+-
+-$.widget( "ui.tooltip", {
+-	version: "1.10.3",
+-	options: {
+-		content: function() {
+-			// support: IE<9, Opera in jQuery <1.7
+-			// .text() can't accept undefined, so coerce to a string
+-			var title = $( this ).attr( "title" ) || "";
+-			// Escape title, since we're going from an attribute to raw HTML
+-			return $( "<a>" ).text( title ).html();
+-		},
+-		hide: true,
+-		// Disabled elements have inconsistent behavior across browsers (#8661)
+-		items: "[title]:not([disabled])",
+-		position: {
+-			my: "left top+15",
+-			at: "left bottom",
+-			collision: "flipfit flip"
+-		},
+-		show: true,
+-		tooltipClass: null,
+-		track: false,
+-
+-		// callbacks
+-		close: null,
+-		open: null
+-	},
+-
+-	_create: function() {
+-		this._on({
+-			mouseover: "open",
+-			focusin: "open"
+-		});
+-
+-		// IDs of generated tooltips, needed for destroy
+-		this.tooltips = {};
+-		// IDs of parent tooltips where we removed the title attribute
+-		this.parents = {};
+-
+-		if ( this.options.disabled ) {
+-			this._disable();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var that = this;
+-
+-		if ( key === "disabled" ) {
+-			this[ value ? "_disable" : "_enable" ]();
+-			this.options[ key ] = value;
+-			// disable element style changes
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "content" ) {
+-			$.each( this.tooltips, function( id, element ) {
+-				that._updateContent( element );
+-			});
+-		}
+-	},
+-
+-	_disable: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-		});
+-
+-		// remove title attributes to prevent native tooltips
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.is( "[title]" ) ) {
+-				element
+-					.data( "ui-tooltip-title", element.attr( "title" ) )
+-					.attr( "title", "" );
+-			}
+-		});
+-	},
+-
+-	_enable: function() {
+-		// restore title attributes
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-			}
+-		});
+-	},
+-
+-	open: function( event ) {
+-		var that = this,
+-			target = $( event ? event.target : this.element )
+-				// we need closest here due to mouseover bubbling,
+-				// but always pointing at the same event target
+-				.closest( this.options.items );
+-
+-		// No element to show a tooltip for or the tooltip is already open
+-		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+-			return;
+-		}
+-
+-		if ( target.attr( "title" ) ) {
+-			target.data( "ui-tooltip-title", target.attr( "title" ) );
+-		}
+-
+-		target.data( "ui-tooltip-open", true );
+-
+-		// kill parent tooltips, custom or native, for hover
+-		if ( event && event.type === "mouseover" ) {
+-			target.parents().each(function() {
+-				var parent = $( this ),
+-					blurEvent;
+-				if ( parent.data( "ui-tooltip-open" ) ) {
+-					blurEvent = $.Event( "blur" );
+-					blurEvent.target = blurEvent.currentTarget = this;
+-					that.close( blurEvent, true );
+-				}
+-				if ( parent.attr( "title" ) ) {
+-					parent.uniqueId();
+-					that.parents[ this.id ] = {
+-						element: this,
+-						title: parent.attr( "title" )
+-					};
+-					parent.attr( "title", "" );
+-				}
+-			});
+-		}
+-
+-		this._updateContent( target, event );
+-	},
+-
+-	_updateContent: function( target, event ) {
+-		var content,
+-			contentOption = this.options.content,
+-			that = this,
+-			eventType = event ? event.type : null;
+-
+-		if ( typeof contentOption === "string" ) {
+-			return this._open( event, target, contentOption );
+-		}
+-
+-		content = contentOption.call( target[0], function( response ) {
+-			// ignore async response if tooltip was closed already
+-			if ( !target.data( "ui-tooltip-open" ) ) {
+-				return;
+-			}
+-			// IE may instantly serve a cached response for ajax requests
+-			// delay this call to _open so the other call to _open runs first
+-			that._delay(function() {
+-				// jQuery creates a special event for focusin when it doesn't
+-				// exist natively. To improve performance, the native event
+-				// object is reused and the type is changed. Therefore, we can't
+-				// rely on the type being correct after the event finished
+-				// bubbling, so we set it back to the previous value. (#8740)
+-				if ( event ) {
+-					event.type = eventType;
+-				}
+-				this._open( event, target, response );
+-			});
+-		});
+-		if ( content ) {
+-			this._open( event, target, content );
+-		}
+-	},
+-
+-	_open: function( event, target, content ) {
+-		var tooltip, events, delayedShow,
+-			positionOption = $.extend( {}, this.options.position );
+-
+-		if ( !content ) {
+-			return;
+-		}
+-
+-		// Content can be updated multiple times. If the tooltip already
+-		// exists, then just update the content and bail.
+-		tooltip = this._find( target );
+-		if ( tooltip.length ) {
+-			tooltip.find( ".ui-tooltip-content" ).html( content );
+-			return;
+-		}
+-
+-		// if we have a title, clear it to prevent the native tooltip
+-		// we have to check first to avoid defining a title if none exists
+-		// (we don't want to cause an element to start matching [title])
+-		//
+-		// We use removeAttr only for key events, to allow IE to export the correct
+-		// accessible attributes. For mouse events, set to empty string to avoid
+-		// native tooltip showing up (happens only when removing inside mouseover).
+-		if ( target.is( "[title]" ) ) {
+-			if ( event && event.type === "mouseover" ) {
+-				target.attr( "title", "" );
+-			} else {
+-				target.removeAttr( "title" );
+-			}
+-		}
+-
+-		tooltip = this._tooltip( target );
+-		addDescribedBy( target, tooltip.attr( "id" ) );
+-		tooltip.find( ".ui-tooltip-content" ).html( content );
+-
+-		function position( event ) {
+-			positionOption.of = event;
+-			if ( tooltip.is( ":hidden" ) ) {
+-				return;
+-			}
+-			tooltip.position( positionOption );
+-		}
+-		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+-			this._on( this.document, {
+-				mousemove: position
+-			});
+-			// trigger once to override element-relative positioning
+-			position( event );
+-		} else {
+-			tooltip.position( $.extend({
+-				of: target
+-			}, this.options.position ) );
+-		}
+-
+-		tooltip.hide();
+-
+-		this._show( tooltip, this.options.show );
+-		// Handle tracking tooltips that are shown with a delay (#8644). As soon
+-		// as the tooltip is visible, position the tooltip using the most recent
+-		// event.
+-		if ( this.options.show && this.options.show.delay ) {
+-			delayedShow = this.delayedShow = setInterval(function() {
+-				if ( tooltip.is( ":visible" ) ) {
+-					position( positionOption.of );
+-					clearInterval( delayedShow );
+-				}
+-			}, $.fx.interval );
+-		}
+-
+-		this._trigger( "open", event, { tooltip: tooltip } );
+-
+-		events = {
+-			keyup: function( event ) {
+-				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					var fakeEvent = $.Event(event);
+-					fakeEvent.currentTarget = target[0];
+-					this.close( fakeEvent, true );
+-				}
+-			},
+-			remove: function() {
+-				this._removeTooltip( tooltip );
+-			}
+-		};
+-		if ( !event || event.type === "mouseover" ) {
+-			events.mouseleave = "close";
+-		}
+-		if ( !event || event.type === "focusin" ) {
+-			events.focusout = "close";
+-		}
+-		this._on( true, target, events );
+-	},
+-
+-	close: function( event ) {
+-		var that = this,
+-			target = $( event ? event.currentTarget : this.element ),
+-			tooltip = this._find( target );
+-
+-		// disabling closes the tooltip, so we need to track when we're closing
+-		// to avoid an infinite loop in case the tooltip becomes disabled on close
+-		if ( this.closing ) {
+-			return;
+-		}
+-
+-		// Clear the interval for delayed tracking tooltips
+-		clearInterval( this.delayedShow );
+-
+-		// only set title if we had one before (see comment in _open())
+-		if ( target.data( "ui-tooltip-title" ) ) {
+-			target.attr( "title", target.data( "ui-tooltip-title" ) );
+-		}
+-
+-		removeDescribedBy( target );
+-
+-		tooltip.stop( true );
+-		this._hide( tooltip, this.options.hide, function() {
+-			that._removeTooltip( $( this ) );
+-		});
+-
+-		target.removeData( "ui-tooltip-open" );
+-		this._off( target, "mouseleave focusout keyup" );
+-		// Remove 'remove' binding only on delegated targets
+-		if ( target[0] !== this.element[0] ) {
+-			this._off( target, "remove" );
+-		}
+-		this._off( this.document, "mousemove" );
+-
+-		if ( event && event.type === "mouseleave" ) {
+-			$.each( this.parents, function( id, parent ) {
+-				$( parent.element ).attr( "title", parent.title );
+-				delete that.parents[ id ];
+-			});
+-		}
+-
+-		this.closing = true;
+-		this._trigger( "close", event, { tooltip: tooltip } );
+-		this.closing = false;
+-	},
+-
+-	_tooltip: function( element ) {
+-		var id = "ui-tooltip-" + increments++,
+-			tooltip = $( "<div>" )
+-				.attr({
+-					id: id,
+-					role: "tooltip"
+-				})
+-				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+-					( this.options.tooltipClass || "" ) );
+-		$( "<div>" )
+-			.addClass( "ui-tooltip-content" )
+-			.appendTo( tooltip );
+-		tooltip.appendTo( this.document[0].body );
+-		this.tooltips[ id ] = element;
+-		return tooltip;
+-	},
+-
+-	_find: function( target ) {
+-		var id = target.data( "ui-tooltip-id" );
+-		return id ? $( "#" + id ) : $();
+-	},
+-
+-	_removeTooltip: function( tooltip ) {
+-		tooltip.remove();
+-		delete this.tooltips[ tooltip.attr( "id" ) ];
+-	},
+-
+-	_destroy: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			// Delegate to close method to handle common cleanup
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-
+-			// Remove immediately; destroying an open tooltip doesn't use the
+-			// hide animation
+-			$( "#" + id ).remove();
+-
+-			// Restore the title
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-				element.removeData( "ui-tooltip-title" );
+-			}
+-		});
+-	}
+-});
+-
+-}( jQuery ) );
+-(function($, undefined) {
+-
+-var dataSpace = "ui-effects-";
+-
+-$.effects = {
+-	effect: {}
+-};
+-
+-/*!
+- * jQuery Color Animations v2.1.2
+- * https://github.com/jquery/jquery-color
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * Date: Wed Jan 16 08:47:09 2013 -0600
+- */
+-(function( jQuery, undefined ) {
+-
+-	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+-
+-	// plusequals test for += 100 -= 100
+-	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+-	// a set of RE's that can match strings and generate color tuples.
+-	stringParsers = [{
+-			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ],
+-					execResult[ 3 ],
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ] * 2.55,
+-					execResult[ 2 ] * 2.55,
+-					execResult[ 3 ] * 2.55,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			space: "hsla",
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ] / 100,
+-					execResult[ 3 ] / 100,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}],
+-
+-	// jQuery.Color( )
+-	color = jQuery.Color = function( color, green, blue, alpha ) {
+-		return new jQuery.Color.fn.parse( color, green, blue, alpha );
+-	},
+-	spaces = {
+-		rgba: {
+-			props: {
+-				red: {
+-					idx: 0,
+-					type: "byte"
+-				},
+-				green: {
+-					idx: 1,
+-					type: "byte"
+-				},
+-				blue: {
+-					idx: 2,
+-					type: "byte"
+-				}
+-			}
+-		},
+-
+-		hsla: {
+-			props: {
+-				hue: {
+-					idx: 0,
+-					type: "degrees"
+-				},
+-				saturation: {
+-					idx: 1,
+-					type: "percent"
+-				},
+-				lightness: {
+-					idx: 2,
+-					type: "percent"
+-				}
+-			}
+-		}
+-	},
+-	propTypes = {
+-		"byte": {
+-			floor: true,
+-			max: 255
+-		},
+-		"percent": {
+-			max: 1
+-		},
+-		"degrees": {
+-			mod: 360,
+-			floor: true
+-		}
+-	},
+-	support = color.support = {},
+-
+-	// element for support tests
+-	supportElem = jQuery( "<p>" )[ 0 ],
+-
+-	// colors = jQuery.Color.names
+-	colors,
+-
+-	// local aliases of functions called often
+-	each = jQuery.each;
+-
+-// determine rgba support immediately
+-supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+-support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+-
+-// define cache name and alpha properties
+-// for rgba and hsla spaces
+-each( spaces, function( spaceName, space ) {
+-	space.cache = "_" + spaceName;
+-	space.props.alpha = {
+-		idx: 3,
+-		type: "percent",
+-		def: 1
+-	};
+-});
+-
+-function clamp( value, prop, allowEmpty ) {
+-	var type = propTypes[ prop.type ] || {};
+-
+-	if ( value == null ) {
+-		return (allowEmpty || !prop.def) ? null : prop.def;
+-	}
+-
+-	// ~~ is an short way of doing floor for positive numbers
+-	value = type.floor ? ~~value : parseFloat( value );
+-
+-	// IE will pass in empty strings as value for alpha,
+-	// which will hit this case
+-	if ( isNaN( value ) ) {
+-		return prop.def;
+-	}
+-
+-	if ( type.mod ) {
+-		// we add mod before modding to make sure that negatives values
+-		// get converted properly: -10 -> 350
+-		return (value + type.mod) % type.mod;
+-	}
+-
+-	// for now all property types without mod have min and max
+-	return 0 > value ? 0 : type.max < value ? type.max : value;
+-}
+-
+-function stringParse( string ) {
+-	var inst = color(),
+-		rgba = inst._rgba = [];
+-
+-	string = string.toLowerCase();
+-
+-	each( stringParsers, function( i, parser ) {
+-		var parsed,
+-			match = parser.re.exec( string ),
+-			values = match && parser.parse( match ),
+-			spaceName = parser.space || "rgba";
+-
+-		if ( values ) {
+-			parsed = inst[ spaceName ]( values );
+-
+-			// if this was an rgba parse the assignment might happen twice
+-			// oh well....
+-			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+-			rgba = inst._rgba = parsed._rgba;
+-
+-			// exit each( stringParsers ) here because we matched
+-			return false;
+-		}
+-	});
+-
+-	// Found a stringParser that handled it
+-	if ( rgba.length ) {
+-
+-		// if this came from a parsed string, force "transparent" when alpha is 0
+-		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+-		if ( rgba.join() === "0,0,0,0" ) {
+-			jQuery.extend( rgba, colors.transparent );
+-		}
+-		return inst;
+-	}
+-
+-	// named colors
+-	return colors[ string ];
+-}
+-
+-color.fn = jQuery.extend( color.prototype, {
+-	parse: function( red, green, blue, alpha ) {
+-		if ( red === undefined ) {
+-			this._rgba = [ null, null, null, null ];
+-			return this;
+-		}
+-		if ( red.jquery || red.nodeType ) {
+-			red = jQuery( red ).css( green );
+-			green = undefined;
+-		}
+-
+-		var inst = this,
+-			type = jQuery.type( red ),
+-			rgba = this._rgba = [];
+-
+-		// more than 1 argument specified - assume ( red, green, blue, alpha )
+-		if ( green !== undefined ) {
+-			red = [ red, green, blue, alpha ];
+-			type = "array";
+-		}
+-
+-		if ( type === "string" ) {
+-			return this.parse( stringParse( red ) || colors._default );
+-		}
+-
+-		if ( type === "array" ) {
+-			each( spaces.rgba.props, function( key, prop ) {
+-				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+-			});
+-			return this;
+-		}
+-
+-		if ( type === "object" ) {
+-			if ( red instanceof color ) {
+-				each( spaces, function( spaceName, space ) {
+-					if ( red[ space.cache ] ) {
+-						inst[ space.cache ] = red[ space.cache ].slice();
+-					}
+-				});
+-			} else {
+-				each( spaces, function( spaceName, space ) {
+-					var cache = space.cache;
+-					each( space.props, function( key, prop ) {
+-
+-						// if the cache doesn't exist, and we know how to convert
+-						if ( !inst[ cache ] && space.to ) {
+-
+-							// if the value was null, we don't need to copy it
+-							// if the key was alpha, we don't need to copy it either
+-							if ( key === "alpha" || red[ key ] == null ) {
+-								return;
+-							}
+-							inst[ cache ] = space.to( inst._rgba );
+-						}
+-
+-						// this is the only case where we allow nulls for ALL properties.
+-						// call clamp with alwaysAllowEmpty
+-						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+-					});
+-
+-					// everything defined but alpha?
+-					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+-						// use the default of 1
+-						inst[ cache ][ 3 ] = 1;
+-						if ( space.from ) {
+-							inst._rgba = space.from( inst[ cache ] );
+-						}
+-					}
+-				});
+-			}
+-			return this;
+-		}
+-	},
+-	is: function( compare ) {
+-		var is = color( compare ),
+-			same = true,
+-			inst = this;
+-
+-		each( spaces, function( _, space ) {
+-			var localCache,
+-				isCache = is[ space.cache ];
+-			if (isCache) {
+-				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+-				each( space.props, function( _, prop ) {
+-					if ( isCache[ prop.idx ] != null ) {
+-						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+-						return same;
+-					}
+-				});
+-			}
+-			return same;
+-		});
+-		return same;
+-	},
+-	_space: function() {
+-		var used = [],
+-			inst = this;
+-		each( spaces, function( spaceName, space ) {
+-			if ( inst[ space.cache ] ) {
+-				used.push( spaceName );
+-			}
+-		});
+-		return used.pop();
+-	},
+-	transition: function( other, distance ) {
+-		var end = color( other ),
+-			spaceName = end._space(),
+-			space = spaces[ spaceName ],
+-			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+-			start = startColor[ space.cache ] || space.to( startColor._rgba ),
+-			result = start.slice();
+-
+-		end = end[ space.cache ];
+-		each( space.props, function( key, prop ) {
+-			var index = prop.idx,
+-				startValue = start[ index ],
+-				endValue = end[ index ],
+-				type = propTypes[ prop.type ] || {};
+-
+-			// if null, don't override start value
+-			if ( endValue === null ) {
+-				return;
+-			}
+-			// if null - use end
+-			if ( startValue === null ) {
+-				result[ index ] = endValue;
+-			} else {
+-				if ( type.mod ) {
+-					if ( endValue - startValue > type.mod / 2 ) {
+-						startValue += type.mod;
+-					} else if ( startValue - endValue > type.mod / 2 ) {
+-						startValue -= type.mod;
+-					}
+-				}
+-				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+-			}
+-		});
+-		return this[ spaceName ]( result );
+-	},
+-	blend: function( opaque ) {
+-		// if we are already opaque - return ourself
+-		if ( this._rgba[ 3 ] === 1 ) {
+-			return this;
+-		}
+-
+-		var rgb = this._rgba.slice(),
+-			a = rgb.pop(),
+-			blend = color( opaque )._rgba;
+-
+-		return color( jQuery.map( rgb, function( v, i ) {
+-			return ( 1 - a ) * blend[ i ] + a * v;
+-		}));
+-	},
+-	toRgbaString: function() {
+-		var prefix = "rgba(",
+-			rgba = jQuery.map( this._rgba, function( v, i ) {
+-				return v == null ? ( i > 2 ? 1 : 0 ) : v;
+-			});
+-
+-		if ( rgba[ 3 ] === 1 ) {
+-			rgba.pop();
+-			prefix = "rgb(";
+-		}
+-
+-		return prefix + rgba.join() + ")";
+-	},
+-	toHslaString: function() {
+-		var prefix = "hsla(",
+-			hsla = jQuery.map( this.hsla(), function( v, i ) {
+-				if ( v == null ) {
+-					v = i > 2 ? 1 : 0;
+-				}
+-
+-				// catch 1 and 2
+-				if ( i && i < 3 ) {
+-					v = Math.round( v * 100 ) + "%";
+-				}
+-				return v;
+-			});
+-
+-		if ( hsla[ 3 ] === 1 ) {
+-			hsla.pop();
+-			prefix = "hsl(";
+-		}
+-		return prefix + hsla.join() + ")";
+-	},
+-	toHexString: function( includeAlpha ) {
+-		var rgba = this._rgba.slice(),
+-			alpha = rgba.pop();
+-
+-		if ( includeAlpha ) {
+-			rgba.push( ~~( alpha * 255 ) );
+-		}
+-
+-		return "#" + jQuery.map( rgba, function( v ) {
+-
+-			// default to 0 when nulls exist
+-			v = ( v || 0 ).toString( 16 );
+-			return v.length === 1 ? "0" + v : v;
+-		}).join("");
+-	},
+-	toString: function() {
+-		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+-	}
+-});
+-color.fn.parse.prototype = color.fn;
+-
+-// hsla conversions adapted from:
+-// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+-
+-function hue2rgb( p, q, h ) {
+-	h = ( h + 1 ) % 1;
+-	if ( h * 6 < 1 ) {
+-		return p + (q - p) * h * 6;
+-	}
+-	if ( h * 2 < 1) {
+-		return q;
+-	}
+-	if ( h * 3 < 2 ) {
+-		return p + (q - p) * ((2/3) - h) * 6;
+-	}
+-	return p;
+-}
+-
+-spaces.hsla.to = function ( rgba ) {
+-	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+-		return [ null, null, null, rgba[ 3 ] ];
+-	}
+-	var r = rgba[ 0 ] / 255,
+-		g = rgba[ 1 ] / 255,
+-		b = rgba[ 2 ] / 255,
+-		a = rgba[ 3 ],
+-		max = Math.max( r, g, b ),
+-		min = Math.min( r, g, b ),
+-		diff = max - min,
+-		add = max + min,
+-		l = add * 0.5,
+-		h, s;
+-
+-	if ( min === max ) {
+-		h = 0;
+-	} else if ( r === max ) {
+-		h = ( 60 * ( g - b ) / diff ) + 360;
+-	} else if ( g === max ) {
+-		h = ( 60 * ( b - r ) / diff ) + 120;
+-	} else {
+-		h = ( 60 * ( r - g ) / diff ) + 240;
+-	}
+-
+-	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+-	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+-	if ( diff === 0 ) {
+-		s = 0;
+-	} else if ( l <= 0.5 ) {
+-		s = diff / add;
+-	} else {
+-		s = diff / ( 2 - add );
+-	}
+-	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+-};
+-
+-spaces.hsla.from = function ( hsla ) {
+-	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+-		return [ null, null, null, hsla[ 3 ] ];
+-	}
+-	var h = hsla[ 0 ] / 360,
+-		s = hsla[ 1 ],
+-		l = hsla[ 2 ],
+-		a = hsla[ 3 ],
+-		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+-		p = 2 * l - q;
+-
+-	return [
+-		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+-		Math.round( hue2rgb( p, q, h ) * 255 ),
+-		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+-		a
+-	];
+-};
+-
+-
+-each( spaces, function( spaceName, space ) {
+-	var props = space.props,
+-		cache = space.cache,
+-		to = space.to,
+-		from = space.from;
+-
+-	// makes rgba() and hsla()
+-	color.fn[ spaceName ] = function( value ) {
+-
+-		// generate a cache for this space if it doesn't exist
+-		if ( to && !this[ cache ] ) {
+-			this[ cache ] = to( this._rgba );
+-		}
+-		if ( value === undefined ) {
+-			return this[ cache ].slice();
+-		}
+-
+-		var ret,
+-			type = jQuery.type( value ),
+-			arr = ( type === "array" || type === "object" ) ? value : arguments,
+-			local = this[ cache ].slice();
+-
+-		each( props, function( key, prop ) {
+-			var val = arr[ type === "object" ? key : prop.idx ];
+-			if ( val == null ) {
+-				val = local[ prop.idx ];
+-			}
+-			local[ prop.idx ] = clamp( val, prop );
+-		});
+-
+-		if ( from ) {
+-			ret = color( from( local ) );
+-			ret[ cache ] = local;
+-			return ret;
+-		} else {
+-			return color( local );
+-		}
+-	};
+-
+-	// makes red() green() blue() alpha() hue() saturation() lightness()
+-	each( props, function( key, prop ) {
+-		// alpha is included in more than one space
+-		if ( color.fn[ key ] ) {
+-			return;
+-		}
+-		color.fn[ key ] = function( value ) {
+-			var vtype = jQuery.type( value ),
+-				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+-				local = this[ fn ](),
+-				cur = local[ prop.idx ],
+-				match;
+-
+-			if ( vtype === "undefined" ) {
+-				return cur;
+-			}
+-
+-			if ( vtype === "function" ) {
+-				value = value.call( this, cur );
+-				vtype = jQuery.type( value );
+-			}
+-			if ( value == null && prop.empty ) {
+-				return this;
+-			}
+-			if ( vtype === "string" ) {
+-				match = rplusequals.exec( value );
+-				if ( match ) {
+-					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+-				}
+-			}
+-			local[ prop.idx ] = value;
+-			return this[ fn ]( local );
+-		};
+-	});
+-});
+-
+-// add cssHook and .fx.step function for each named hook.
+-// accept a space separated string of properties
+-color.hook = function( hook ) {
+-	var hooks = hook.split( " " );
+-	each( hooks, function( i, hook ) {
+-		jQuery.cssHooks[ hook ] = {
+-			set: function( elem, value ) {
+-				var parsed, curElem,
+-					backgroundColor = "";
+-
+-				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+-					value = color( parsed || value );
+-					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+-						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+-						while (
+-							(backgroundColor === "" || backgroundColor === "transparent") &&
+-							curElem && curElem.style
+-						) {
+-							try {
+-								backgroundColor = jQuery.css( curElem, "backgroundColor" );
+-								curElem = curElem.parentNode;
+-							} catch ( e ) {
+-							}
+-						}
+-
+-						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+-							backgroundColor :
+-							"_default" );
+-					}
+-
+-					value = value.toRgbaString();
+-				}
+-				try {
+-					elem.style[ hook ] = value;
+-				} catch( e ) {
+-					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+-				}
+-			}
+-		};
+-		jQuery.fx.step[ hook ] = function( fx ) {
+-			if ( !fx.colorInit ) {
+-				fx.start = color( fx.elem, hook );
+-				fx.end = color( fx.end );
+-				fx.colorInit = true;
+-			}
+-			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+-		};
+-	});
+-
+-};
+-
+-color.hook( stepHooks );
+-
+-jQuery.cssHooks.borderColor = {
+-	expand: function( value ) {
+-		var expanded = {};
+-
+-		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+-			expanded[ "border" + part + "Color" ] = value;
+-		});
+-		return expanded;
+-	}
+-};
+-
+-// Basic color names only.
+-// Usage of any of the other color names requires adding yourself or including
+-// jquery.color.svg-names.js.
+-colors = jQuery.Color.names = {
+-	// 4.1. Basic color keywords
+-	aqua: "#00ffff",
+-	black: "#000000",
+-	blue: "#0000ff",
+-	fuchsia: "#ff00ff",
+-	gray: "#808080",
+-	green: "#008000",
+-	lime: "#00ff00",
+-	maroon: "#800000",
+-	navy: "#000080",
+-	olive: "#808000",
+-	purple: "#800080",
+-	red: "#ff0000",
+-	silver: "#c0c0c0",
+-	teal: "#008080",
+-	white: "#ffffff",
+-	yellow: "#ffff00",
+-
+-	// 4.2.3. "transparent" color keyword
+-	transparent: [ null, null, null, 0 ],
+-
+-	_default: "#ffffff"
+-};
+-
+-})( jQuery );
+-
+-
+-/******************************************************************************/
+-/****************************** CLASS ANIMATIONS ******************************/
+-/******************************************************************************/
+-(function() {
+-
+-var classAnimationActions = [ "add", "remove", "toggle" ],
+-	shorthandStyles = {
+-		border: 1,
+-		borderBottom: 1,
+-		borderColor: 1,
+-		borderLeft: 1,
+-		borderRight: 1,
+-		borderTop: 1,
+-		borderWidth: 1,
+-		margin: 1,
+-		padding: 1
+-	};
+-
+-$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+-	$.fx.step[ prop ] = function( fx ) {
+-		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+-			jQuery.style( fx.elem, prop, fx.end );
+-			fx.setAttr = true;
+-		}
+-	};
+-});
+-
+-function getElementStyles( elem ) {
+-	var key, len,
+-		style = elem.ownerDocument.defaultView ?
+-			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+-			elem.currentStyle,
+-		styles = {};
+-
+-	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+-		len = style.length;
+-		while ( len-- ) {
+-			key = style[ len ];
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ $.camelCase( key ) ] = style[ key ];
+-			}
+-		}
+-	// support: Opera, IE <9
+-	} else {
+-		for ( key in style ) {
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ key ] = style[ key ];
+-			}
+-		}
+-	}
+-
+-	return styles;
+-}
+-
+-
+-function styleDifference( oldStyle, newStyle ) {
+-	var diff = {},
+-		name, value;
+-
+-	for ( name in newStyle ) {
+-		value = newStyle[ name ];
+-		if ( oldStyle[ name ] !== value ) {
+-			if ( !shorthandStyles[ name ] ) {
+-				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+-					diff[ name ] = value;
+-				}
+-			}
+-		}
+-	}
+-
+-	return diff;
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-$.effects.animateClass = function( value, duration, easing, callback ) {
+-	var o = $.speed( duration, easing, callback );
+-
+-	return this.queue( function() {
+-		var animated = $( this ),
+-			baseClass = animated.attr( "class" ) || "",
+-			applyClassChange,
+-			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+-
+-		// map the animated objects to store the original styles.
+-		allAnimations = allAnimations.map(function() {
+-			var el = $( this );
+-			return {
+-				el: el,
+-				start: getElementStyles( this )
+-			};
+-		});
+-
+-		// apply class change
+-		applyClassChange = function() {
+-			$.each( classAnimationActions, function(i, action) {
+-				if ( value[ action ] ) {
+-					animated[ action + "Class" ]( value[ action ] );
+-				}
+-			});
+-		};
+-		applyClassChange();
+-
+-		// map all animated objects again - calculate new styles and diff
+-		allAnimations = allAnimations.map(function() {
+-			this.end = getElementStyles( this.el[ 0 ] );
+-			this.diff = styleDifference( this.start, this.end );
+-			return this;
+-		});
+-
+-		// apply original class
+-		animated.attr( "class", baseClass );
+-
+-		// map all animated objects again - this time collecting a promise
+-		allAnimations = allAnimations.map(function() {
+-			var styleInfo = this,
+-				dfd = $.Deferred(),
+-				opts = $.extend({}, o, {
+-					queue: false,
+-					complete: function() {
+-						dfd.resolve( styleInfo );
+-					}
+-				});
+-
+-			this.el.animate( this.diff, opts );
+-			return dfd.promise();
+-		});
+-
+-		// once all animations have completed:
+-		$.when.apply( $, allAnimations.get() ).done(function() {
+-
+-			// set the final class
+-			applyClassChange();
+-
+-			// for each animated element,
+-			// clear all css properties that were animated
+-			$.each( arguments, function() {
+-				var el = this.el;
+-				$.each( this.diff, function(key) {
+-					el.css( key, "" );
+-				});
+-			});
+-
+-			// this is guarnteed to be there if you use jQuery.speed()
+-			// it also handles dequeuing the next anim...
+-			o.complete.call( animated[ 0 ] );
+-		});
+-	});
+-};
+-
+-$.fn.extend({
+-	addClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return speed ?
+-				$.effects.animateClass.call( this,
+-					{ add: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.addClass ),
+-
+-	removeClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return arguments.length > 1 ?
+-				$.effects.animateClass.call( this,
+-					{ remove: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.removeClass ),
+-
+-	toggleClass: (function( orig ) {
+-		return function( classNames, force, speed, easing, callback ) {
+-			if ( typeof force === "boolean" || force === undefined ) {
+-				if ( !speed ) {
+-					// without speed parameter
+-					return orig.apply( this, arguments );
+-				} else {
+-					return $.effects.animateClass.call( this,
+-						(force ? { add: classNames } : { remove: classNames }),
+-						speed, easing, callback );
+-				}
+-			} else {
+-				// without force parameter
+-				return $.effects.animateClass.call( this,
+-					{ toggle: classNames }, force, speed, easing );
+-			}
+-		};
+-	})( $.fn.toggleClass ),
+-
+-	switchClass: function( remove, add, speed, easing, callback) {
+-		return $.effects.animateClass.call( this, {
+-			add: add,
+-			remove: remove
+-		}, speed, easing, callback );
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EFFECTS **********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-$.extend( $.effects, {
+-	version: "1.10.3",
+-
+-	// Saves a set of properties in a data storage
+-	save: function( element, set ) {
+-		for( var i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+-			}
+-		}
+-	},
+-
+-	// Restores a set of previously saved properties from a data storage
+-	restore: function( element, set ) {
+-		var val, i;
+-		for( i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				val = element.data( dataSpace + set[ i ] );
+-				// support: jQuery 1.6.2
+-				// http://bugs.jquery.com/ticket/9917
+-				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+-				// We can't differentiate between "" and 0 here, so we just assume
+-				// empty string since it's likely to be a more common value...
+-				if ( val === undefined ) {
+-					val = "";
+-				}
+-				element.css( set[ i ], val );
+-			}
+-		}
+-	},
+-
+-	setMode: function( el, mode ) {
+-		if (mode === "toggle") {
+-			mode = el.is( ":hidden" ) ? "show" : "hide";
+-		}
+-		return mode;
+-	},
+-
+-	// Translates a [top,left] array into a baseline value
+-	// this should be a little more flexible in the future to handle a string & hash
+-	getBaseline: function( origin, original ) {
+-		var y, x;
+-		switch ( origin[ 0 ] ) {
+-			case "top": y = 0; break;
+-			case "middle": y = 0.5; break;
+-			case "bottom": y = 1; break;
+-			default: y = origin[ 0 ] / original.height;
+-		}
+-		switch ( origin[ 1 ] ) {
+-			case "left": x = 0; break;
+-			case "center": x = 0.5; break;
+-			case "right": x = 1; break;
+-			default: x = origin[ 1 ] / original.width;
+-		}
+-		return {
+-			x: x,
+-			y: y
+-		};
+-	},
+-
+-	// Wraps the element around a wrapper that copies position properties
+-	createWrapper: function( element ) {
+-
+-		// if the element is already wrapped, return it
+-		if ( element.parent().is( ".ui-effects-wrapper" )) {
+-			return element.parent();
+-		}
+-
+-		// wrap the element
+-		var props = {
+-				width: element.outerWidth(true),
+-				height: element.outerHeight(true),
+-				"float": element.css( "float" )
+-			},
+-			wrapper = $( "<div></div>" )
+-				.addClass( "ui-effects-wrapper" )
+-				.css({
+-					fontSize: "100%",
+-					background: "transparent",
+-					border: "none",
+-					margin: 0,
+-					padding: 0
+-				}),
+-			// Store the size in case width/height are defined in % - Fixes #5245
+-			size = {
+-				width: element.width(),
+-				height: element.height()
+-			},
+-			active = document.activeElement;
+-
+-		// support: Firefox
+-		// Firefox incorrectly exposes anonymous content
+-		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+-		try {
+-			active.id;
+-		} catch( e ) {
+-			active = document.body;
+-		}
+-
+-		element.wrap( wrapper );
+-
+-		// Fixes #7595 - Elements lose focus when wrapped.
+-		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-			$( active ).focus();
+-		}
+-
+-		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+-
+-		// transfer positioning properties to the wrapper
+-		if ( element.css( "position" ) === "static" ) {
+-			wrapper.css({ position: "relative" });
+-			element.css({ position: "relative" });
+-		} else {
+-			$.extend( props, {
+-				position: element.css( "position" ),
+-				zIndex: element.css( "z-index" )
+-			});
+-			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+-				props[ pos ] = element.css( pos );
+-				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+-					props[ pos ] = "auto";
+-				}
+-			});
+-			element.css({
+-				position: "relative",
+-				top: 0,
+-				left: 0,
+-				right: "auto",
+-				bottom: "auto"
+-			});
+-		}
+-		element.css(size);
+-
+-		return wrapper.css( props ).show();
+-	},
+-
+-	removeWrapper: function( element ) {
+-		var active = document.activeElement;
+-
+-		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+-			element.parent().replaceWith( element );
+-
+-			// Fixes #7595 - Elements lose focus when wrapped.
+-			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-				$( active ).focus();
+-			}
+-		}
+-
+-
+-		return element;
+-	},
+-
+-	setTransition: function( element, list, factor, value ) {
+-		value = value || {};
+-		$.each( list, function( i, x ) {
+-			var unit = element.cssUnit( x );
+-			if ( unit[ 0 ] > 0 ) {
+-				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+-			}
+-		});
+-		return value;
+-	}
+-});
+-
+-// return an effect options object for the given parameters:
+-function _normalizeArguments( effect, options, speed, callback ) {
+-
+-	// allow passing all options as the first parameter
+-	if ( $.isPlainObject( effect ) ) {
+-		options = effect;
+-		effect = effect.effect;
+-	}
+-
+-	// convert to an object
+-	effect = { effect: effect };
+-
+-	// catch (effect, null, ...)
+-	if ( options == null ) {
+-		options = {};
+-	}
+-
+-	// catch (effect, callback)
+-	if ( $.isFunction( options ) ) {
+-		callback = options;
+-		speed = null;
+-		options = {};
+-	}
+-
+-	// catch (effect, speed, ?)
+-	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+-		callback = speed;
+-		speed = options;
+-		options = {};
+-	}
+-
+-	// catch (effect, options, callback)
+-	if ( $.isFunction( speed ) ) {
+-		callback = speed;
+-		speed = null;
+-	}
+-
+-	// add options to effect
+-	if ( options ) {
+-		$.extend( effect, options );
+-	}
+-
+-	speed = speed || options.duration;
+-	effect.duration = $.fx.off ? 0 :
+-		typeof speed === "number" ? speed :
+-		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+-		$.fx.speeds._default;
+-
+-	effect.complete = callback || options.complete;
+-
+-	return effect;
+-}
+-
+-function standardAnimationOption( option ) {
+-	// Valid standard speeds (nothing, number, named speed)
+-	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+-		return true;
+-	}
+-
+-	// Invalid strings - treat as "normal" speed
+-	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+-		return true;
+-	}
+-
+-	// Complete callback
+-	if ( $.isFunction( option ) ) {
+-		return true;
+-	}
+-
+-	// Options hash (but not naming an effect)
+-	if ( typeof option === "object" && !option.effect ) {
+-		return true;
+-	}
+-
+-	// Didn't match any standard API
+-	return false;
+-}
+-
+-$.fn.extend({
+-	effect: function( /* effect, options, speed, callback */ ) {
+-		var args = _normalizeArguments.apply( this, arguments ),
+-			mode = args.mode,
+-			queue = args.queue,
+-			effectMethod = $.effects.effect[ args.effect ];
+-
+-		if ( $.fx.off || !effectMethod ) {
+-			// delegate to the original method (e.g., .show()) if possible
+-			if ( mode ) {
+-				return this[ mode ]( args.duration, args.complete );
+-			} else {
+-				return this.each( function() {
+-					if ( args.complete ) {
+-						args.complete.call( this );
+-					}
+-				});
+-			}
+-		}
+-
+-		function run( next ) {
+-			var elem = $( this ),
+-				complete = args.complete,
+-				mode = args.mode;
+-
+-			function done() {
+-				if ( $.isFunction( complete ) ) {
+-					complete.call( elem[0] );
+-				}
+-				if ( $.isFunction( next ) ) {
+-					next();
+-				}
+-			}
+-
+-			// If the element already has the correct final state, delegate to
+-			// the core methods so the internal tracking of "olddisplay" works.
+-			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+-				elem[ mode ]();
+-				done();
+-			} else {
+-				effectMethod.call( elem[0], args, done );
+-			}
+-		}
+-
+-		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+-	},
+-
+-	show: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "show";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.show ),
+-
+-	hide: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "hide";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.hide ),
+-
+-	toggle: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "toggle";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.toggle ),
+-
+-	// helper functions
+-	cssUnit: function(key) {
+-		var style = this.css( key ),
+-			val = [];
+-
+-		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+-			if ( style.indexOf( unit ) > 0 ) {
+-				val = [ parseFloat( style ), unit ];
+-			}
+-		});
+-		return val;
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EASING ***********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+-
+-var baseEasings = {};
+-
+-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+-	baseEasings[ name ] = function( p ) {
+-		return Math.pow( p, i + 2 );
+-	};
+-});
+-
+-$.extend( baseEasings, {
+-	Sine: function ( p ) {
+-		return 1 - Math.cos( p * Math.PI / 2 );
+-	},
+-	Circ: function ( p ) {
+-		return 1 - Math.sqrt( 1 - p * p );
+-	},
+-	Elastic: function( p ) {
+-		return p === 0 || p === 1 ? p :
+-			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+-	},
+-	Back: function( p ) {
+-		return p * p * ( 3 * p - 2 );
+-	},
+-	Bounce: function ( p ) {
+-		var pow2,
+-			bounce = 4;
+-
+-		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+-		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+-	}
+-});
+-
+-$.each( baseEasings, function( name, easeIn ) {
+-	$.easing[ "easeIn" + name ] = easeIn;
+-	$.easing[ "easeOut" + name ] = function( p ) {
+-		return 1 - easeIn( 1 - p );
+-	};
+-	$.easing[ "easeInOut" + name ] = function( p ) {
+-		return p < 0.5 ?
+-			easeIn( p * 2 ) / 2 :
+-			1 - easeIn( p * -2 + 2 ) / 2;
+-	};
+-});
+-
+-})();
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var rvertical = /up|down|vertical/,
+-	rpositivemotion = /up|left|vertical|horizontal/;
+-
+-$.effects.effect.blind = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		direction = o.direction || "up",
+-		vertical = rvertical.test( direction ),
+-		ref = vertical ? "height" : "width",
+-		ref2 = vertical ? "top" : "left",
+-		motion = rpositivemotion.test( direction ),
+-		animation = {},
+-		show = mode === "show",
+-		wrapper, distance, margin;
+-
+-	// if already wrapped, the wrapper's properties are my property. #6245
+-	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+-		$.effects.save( el.parent(), props );
+-	} else {
+-		$.effects.save( el, props );
+-	}
+-	el.show();
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	distance = wrapper[ ref ]();
+-	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+-
+-	animation[ ref ] = show ? distance : 0;
+-	if ( !motion ) {
+-		el
+-			.css( vertical ? "bottom" : "right", 0 )
+-			.css( vertical ? "top" : "left", "auto" )
+-			.css({ position: "absolute" });
+-
+-		animation[ ref2 ] = show ? margin : distance + margin;
+-	}
+-
+-	// start at 0 if we are showing
+-	if ( show ) {
+-		wrapper.css( ref, 0 );
+-		if ( ! motion ) {
+-			wrapper.css( ref2, margin + distance );
+-		}
+-	}
+-
+-	// Animate
+-	wrapper.animate( animation, {
+-		duration: o.duration,
+-		easing: o.easing,
+-		queue: false,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.bounce = function( o, done ) {
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-
+-		// defaults:
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		hide = mode === "hide",
+-		show = mode === "show",
+-		direction = o.direction || "up",
+-		distance = o.distance,
+-		times = o.times || 5,
+-
+-		// number of internal animations
+-		anims = times * 2 + ( show || hide ? 1 : 0 ),
+-		speed = o.duration / anims,
+-		easing = o.easing,
+-
+-		// utility:
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ),
+-		i,
+-		upAnim,
+-		downAnim,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	// Avoid touching opacity to prevent clearType and PNG issues in IE
+-	if ( show || hide ) {
+-		props.push( "opacity" );
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el ); // Create Wrapper
+-
+-	// default distance for the BIGGEST bounce is the outer Distance / 3
+-	if ( !distance ) {
+-		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+-	}
+-
+-	if ( show ) {
+-		downAnim = { opacity: 1 };
+-		downAnim[ ref ] = 0;
+-
+-		// if we are showing, force opacity 0 and set the initial position
+-		// then do the "first" animation
+-		el.css( "opacity", 0 )
+-			.css( ref, motion ? -distance * 2 : distance * 2 )
+-			.animate( downAnim, speed, easing );
+-	}
+-
+-	// start at the smallest distance if we are hiding
+-	if ( hide ) {
+-		distance = distance / Math.pow( 2, times - 1 );
+-	}
+-
+-	downAnim = {};
+-	downAnim[ ref ] = 0;
+-	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+-	for ( i = 0; i < times; i++ ) {
+-		upAnim = {};
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing )
+-			.animate( downAnim, speed, easing );
+-
+-		distance = hide ? distance * 2 : distance / 2;
+-	}
+-
+-	// Last Bounce when Hiding
+-	if ( hide ) {
+-		upAnim = { opacity: 0 };
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing );
+-	}
+-
+-	el.queue(function() {
+-		if ( hide ) {
+-			el.hide();
+-		}
+-		$.effects.restore( el, props );
+-		$.effects.removeWrapper( el );
+-		done();
+-	});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.clip = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "vertical",
+-		vert = direction === "vertical",
+-		size = vert ? "height" : "width",
+-		position = vert ? "top" : "left",
+-		animation = {},
+-		wrapper, animate, distance;
+-
+-	// Save & Show
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+-	distance = animate[ size ]();
+-
+-	// Shift
+-	if ( show ) {
+-		animate.css( size, 0 );
+-		animate.css( position, distance / 2 );
+-	}
+-
+-	// Create Animation Object:
+-	animation[ size ] = show ? distance : 0;
+-	animation[ position ] = show ? 0 : distance / 2;
+-
+-	// Animate
+-	animate.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( !show ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.drop = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+-		animation = {
+-			opacity: show ? 1 : 0
+-		},
+-		distance;
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+-
+-	if ( show ) {
+-		el
+-			.css( "opacity", 0 )
+-			.css( ref, motion === "pos" ? -distance : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( motion === "pos" ? "+=" : "-=" ) :
+-		( motion === "pos" ? "-=" : "+=" ) ) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.explode = function( o, done ) {
+-
+-	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+-		cells = rows,
+-		el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-
+-		// show and then visibility:hidden the element before calculating offset
+-		offset = el.show().css( "visibility", "hidden" ).offset(),
+-
+-		// width and height of a piece
+-		width = Math.ceil( el.outerWidth() / cells ),
+-		height = Math.ceil( el.outerHeight() / rows ),
+-		pieces = [],
+-
+-		// loop
+-		i, j, left, top, mx, my;
+-
+-	// children animate complete:
+-	function childComplete() {
+-		pieces.push( this );
+-		if ( pieces.length === rows * cells ) {
+-			animComplete();
+-		}
+-	}
+-
+-	// clone the element for each row and cell.
+-	for( i = 0; i < rows ; i++ ) { // ===>
+-		top = offset.top + i * height;
+-		my = i - ( rows - 1 ) / 2 ;
+-
+-		for( j = 0; j < cells ; j++ ) { // |||
+-			left = offset.left + j * width;
+-			mx = j - ( cells - 1 ) / 2 ;
+-
+-			// Create a clone of the now hidden main element that will be absolute positioned
+-			// within a wrapper div off the -left and -top equal to size of our pieces
+-			el
+-				.clone()
+-				.appendTo( "body" )
+-				.wrap( "<div></div>" )
+-				.css({
+-					position: "absolute",
+-					visibility: "visible",
+-					left: -j * width,
+-					top: -i * height
+-				})
+-
+-			// select the wrapper - make it overflow: hidden and absolute positioned based on
+-			// where the original was located +left and +top equal to the size of pieces
+-				.parent()
+-				.addClass( "ui-effects-explode" )
+-				.css({
+-					position: "absolute",
+-					overflow: "hidden",
+-					width: width,
+-					height: height,
+-					left: left + ( show ? mx * width : 0 ),
+-					top: top + ( show ? my * height : 0 ),
+-					opacity: show ? 0 : 1
+-				}).animate({
+-					left: left + ( show ? 0 : mx * width ),
+-					top: top + ( show ? 0 : my * height ),
+-					opacity: show ? 1 : 0
+-				}, o.duration || 500, o.easing, childComplete );
+-		}
+-	}
+-
+-	function animComplete() {
+-		el.css({
+-			visibility: "visible"
+-		});
+-		$( pieces ).remove();
+-		if ( !show ) {
+-			el.hide();
+-		}
+-		done();
+-	}
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.fade = function( o, done ) {
+-	var el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "toggle" );
+-
+-	el.animate({
+-		opacity: mode
+-	}, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: done
+-	});
+-};
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-$.effects.effect.fold = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		size = o.size || 15,
+-		percent = /([0-9]+)%/.exec( size ),
+-		horizFirst = !!o.horizFirst,
+-		widthFirst = show !== horizFirst,
+-		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+-		duration = o.duration / 2,
+-		wrapper, distance,
+-		animation1 = {},
+-		animation2 = {};
+-
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	distance = widthFirst ?
+-		[ wrapper.width(), wrapper.height() ] :
+-		[ wrapper.height(), wrapper.width() ];
+-
+-	if ( percent ) {
+-		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+-	}
+-	if ( show ) {
+-		wrapper.css( horizFirst ? {
+-			height: 0,
+-			width: size
+-		} : {
+-			height: size,
+-			width: 0
+-		});
+-	}
+-
+-	// Animation
+-	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+-	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+-
+-	// Animate
+-	wrapper
+-		.animate( animation1, duration, o.easing )
+-		.animate( animation2, duration, o.easing, function() {
+-			if ( hide ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.highlight = function( o, done ) {
+-	var elem = $( this ),
+-		props = [ "backgroundImage", "backgroundColor", "opacity" ],
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		animation = {
+-			backgroundColor: elem.css( "backgroundColor" )
+-		};
+-
+-	if (mode === "hide") {
+-		animation.opacity = 0;
+-	}
+-
+-	$.effects.save( elem, props );
+-
+-	elem
+-		.show()
+-		.css({
+-			backgroundImage: "none",
+-			backgroundColor: o.color || "#ffff99"
+-		})
+-		.animate( animation, {
+-			queue: false,
+-			duration: o.duration,
+-			easing: o.easing,
+-			complete: function() {
+-				if ( mode === "hide" ) {
+-					elem.hide();
+-				}
+-				$.effects.restore( elem, props );
+-				done();
+-			}
+-		});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.pulsate = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		showhide = ( show || mode === "hide" ),
+-
+-		// showing or hiding leaves of the "last" animation
+-		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+-		duration = o.duration / anims,
+-		animateTo = 0,
+-		queue = elem.queue(),
+-		queuelen = queue.length,
+-		i;
+-
+-	if ( show || !elem.is(":visible")) {
+-		elem.css( "opacity", 0 ).show();
+-		animateTo = 1;
+-	}
+-
+-	// anims - 1 opacity "toggles"
+-	for ( i = 1; i < anims; i++ ) {
+-		elem.animate({
+-			opacity: animateTo
+-		}, duration, o.easing );
+-		animateTo = 1 - animateTo;
+-	}
+-
+-	elem.animate({
+-		opacity: animateTo
+-	}, duration, o.easing);
+-
+-	elem.queue(function() {
+-		if ( hide ) {
+-			elem.hide();
+-		}
+-		done();
+-	});
+-
+-	// We just queued up "anims" animations, we need to put them next in the queue
+-	if ( queuelen > 1 ) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	elem.dequeue();
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.puff = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "hide" ),
+-		hide = mode === "hide",
+-		percent = parseInt( o.percent, 10 ) || 150,
+-		factor = percent / 100,
+-		original = {
+-			height: elem.height(),
+-			width: elem.width(),
+-			outerHeight: elem.outerHeight(),
+-			outerWidth: elem.outerWidth()
+-		};
+-
+-	$.extend( o, {
+-		effect: "scale",
+-		queue: false,
+-		fade: true,
+-		mode: mode,
+-		complete: done,
+-		percent: hide ? percent : 100,
+-		from: hide ?
+-			original :
+-			{
+-				height: original.height * factor,
+-				width: original.width * factor,
+-				outerHeight: original.outerHeight * factor,
+-				outerWidth: original.outerWidth * factor
+-			}
+-	});
+-
+-	elem.effect( o );
+-};
+-
+-$.effects.effect.scale = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		options = $.extend( true, {}, o ),
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		percent = parseInt( o.percent, 10 ) ||
+-			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+-		direction = o.direction || "both",
+-		origin = o.origin,
+-		original = {
+-			height: el.height(),
+-			width: el.width(),
+-			outerHeight: el.outerHeight(),
+-			outerWidth: el.outerWidth()
+-		},
+-		factor = {
+-			y: direction !== "horizontal" ? (percent / 100) : 1,
+-			x: direction !== "vertical" ? (percent / 100) : 1
+-		};
+-
+-	// We are going to pass this effect to the size effect:
+-	options.effect = "size";
+-	options.queue = false;
+-	options.complete = done;
+-
+-	// Set default origin and restore for show/hide
+-	if ( mode !== "effect" ) {
+-		options.origin = origin || ["middle","center"];
+-		options.restore = true;
+-	}
+-
+-	options.from = o.from || ( mode === "show" ? {
+-		height: 0,
+-		width: 0,
+-		outerHeight: 0,
+-		outerWidth: 0
+-	} : original );
+-	options.to = {
+-		height: original.height * factor.y,
+-		width: original.width * factor.x,
+-		outerHeight: original.outerHeight * factor.y,
+-		outerWidth: original.outerWidth * factor.x
+-	};
+-
+-	// Fade option to support puff
+-	if ( options.fade ) {
+-		if ( mode === "show" ) {
+-			options.from.opacity = 0;
+-			options.to.opacity = 1;
+-		}
+-		if ( mode === "hide" ) {
+-			options.from.opacity = 1;
+-			options.to.opacity = 0;
+-		}
+-	}
+-
+-	// Animate
+-	el.effect( options );
+-
+-};
+-
+-$.effects.effect.size = function( o, done ) {
+-
+-	// Create element
+-	var original, baseline, factor,
+-		el = $( this ),
+-		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+-
+-		// Always restore
+-		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+-
+-		// Copy for children
+-		props2 = [ "width", "height", "overflow" ],
+-		cProps = [ "fontSize" ],
+-		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+-		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+-
+-		// Set options
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		restore = o.restore || mode !== "effect",
+-		scale = o.scale || "both",
+-		origin = o.origin || [ "middle", "center" ],
+-		position = el.css( "position" ),
+-		props = restore ? props0 : props1,
+-		zero = {
+-			height: 0,
+-			width: 0,
+-			outerHeight: 0,
+-			outerWidth: 0
+-		};
+-
+-	if ( mode === "show" ) {
+-		el.show();
+-	}
+-	original = {
+-		height: el.height(),
+-		width: el.width(),
+-		outerHeight: el.outerHeight(),
+-		outerWidth: el.outerWidth()
+-	};
+-
+-	if ( o.mode === "toggle" && mode === "show" ) {
+-		el.from = o.to || zero;
+-		el.to = o.from || original;
+-	} else {
+-		el.from = o.from || ( mode === "show" ? zero : original );
+-		el.to = o.to || ( mode === "hide" ? zero : original );
+-	}
+-
+-	// Set scaling factor
+-	factor = {
+-		from: {
+-			y: el.from.height / original.height,
+-			x: el.from.width / original.width
+-		},
+-		to: {
+-			y: el.to.height / original.height,
+-			x: el.to.width / original.width
+-		}
+-	};
+-
+-	// Scale the css box
+-	if ( scale === "box" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( vProps );
+-			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+-		}
+-
+-		// Horizontal props scaling
+-		if ( factor.from.x !== factor.to.x ) {
+-			props = props.concat( hProps );
+-			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+-			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+-		}
+-	}
+-
+-	// Scale the content
+-	if ( scale === "content" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( cProps ).concat( props2 );
+-			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+-		}
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-	el.css( "overflow", "hidden" ).css( el.from );
+-
+-	// Adjust
+-	if (origin) { // Calculate baseline shifts
+-		baseline = $.effects.getBaseline( origin, original );
+-		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+-		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+-		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+-		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+-	}
+-	el.css( el.from ); // set top & left
+-
+-	// Animate
+-	if ( scale === "content" || scale === "both" ) { // Scale the children
+-
+-		// Add margins/font-size
+-		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+-		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+-		props2 = props0.concat(vProps).concat(hProps);
+-
+-		el.find( "*[width]" ).each( function(){
+-			var child = $( this ),
+-				c_original = {
+-					height: child.height(),
+-					width: child.width(),
+-					outerHeight: child.outerHeight(),
+-					outerWidth: child.outerWidth()
+-				};
+-			if (restore) {
+-				$.effects.save(child, props2);
+-			}
+-
+-			child.from = {
+-				height: c_original.height * factor.from.y,
+-				width: c_original.width * factor.from.x,
+-				outerHeight: c_original.outerHeight * factor.from.y,
+-				outerWidth: c_original.outerWidth * factor.from.x
+-			};
+-			child.to = {
+-				height: c_original.height * factor.to.y,
+-				width: c_original.width * factor.to.x,
+-				outerHeight: c_original.height * factor.to.y,
+-				outerWidth: c_original.width * factor.to.x
+-			};
+-
+-			// Vertical props scaling
+-			if ( factor.from.y !== factor.to.y ) {
+-				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+-				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+-			}
+-
+-			// Horizontal props scaling
+-			if ( factor.from.x !== factor.to.x ) {
+-				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+-				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+-			}
+-
+-			// Animate children
+-			child.css( child.from );
+-			child.animate( child.to, o.duration, o.easing, function() {
+-
+-				// Restore children
+-				if ( restore ) {
+-					$.effects.restore( child, props2 );
+-				}
+-			});
+-		});
+-	}
+-
+-	// Animate
+-	el.animate( el.to, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( el.to.opacity === 0 ) {
+-				el.css( "opacity", el.from.opacity );
+-			}
+-			if( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			if ( !restore ) {
+-
+-				// we need to calculate our new positioning based on the scaling
+-				if ( position === "static" ) {
+-					el.css({
+-						position: "relative",
+-						top: el.to.top,
+-						left: el.to.left
+-					});
+-				} else {
+-					$.each([ "top", "left" ], function( idx, pos ) {
+-						el.css( pos, function( _, str ) {
+-							var val = parseInt( str, 10 ),
+-								toRef = idx ? el.to.left : el.to.top;
+-
+-							// if original was "auto", recalculate the new value from wrapper
+-							if ( str === "auto" ) {
+-								return toRef + "px";
+-							}
+-
+-							return val + toRef + "px";
+-						});
+-					});
+-				}
+-			}
+-
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.shake = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		direction = o.direction || "left",
+-		distance = o.distance || 20,
+-		times = o.times || 3,
+-		anims = times * 2 + 1,
+-		speed = Math.round(o.duration/anims),
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		animation = {},
+-		animation1 = {},
+-		animation2 = {},
+-		i,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	// Animation
+-	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+-	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+-	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+-
+-	// Animate
+-	el.animate( animation, speed, o.easing );
+-
+-	// Shakes
+-	for ( i = 1; i < times; i++ ) {
+-		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+-	}
+-	el
+-		.animate( animation1, speed, o.easing )
+-		.animate( animation, speed / 2, o.easing )
+-		.queue(function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.slide = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+-		mode = $.effects.setMode( el, o.mode || "show" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		distance,
+-		animation = {};
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+-
+-	$.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	if ( show ) {
+-		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( positiveMotion ? "+=" : "-=") :
+-		( positiveMotion ? "-=" : "+=")) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.transfer = function( o, done ) {
+-	var elem = $( this ),
+-		target = $( o.to ),
+-		targetFixed = target.css( "position" ) === "fixed",
+-		body = $("body"),
+-		fixTop = targetFixed ? body.scrollTop() : 0,
+-		fixLeft = targetFixed ? body.scrollLeft() : 0,
+-		endPosition = target.offset(),
+-		animation = {
+-			top: endPosition.top - fixTop ,
+-			left: endPosition.left - fixLeft ,
+-			height: target.innerHeight(),
+-			width: target.innerWidth()
+-		},
+-		startPosition = elem.offset(),
+-		transfer = $( "<div class='ui-effects-transfer'></div>" )
+-			.appendTo( document.body )
+-			.addClass( o.className )
+-			.css({
+-				top: startPosition.top - fixTop ,
+-				left: startPosition.left - fixLeft ,
+-				height: elem.innerHeight(),
+-				width: elem.innerWidth(),
+-				position: targetFixed ? "fixed" : "absolute"
+-			})
+-			.animate( animation, o.duration, o.easing, function() {
+-				transfer.remove();
+-				done();
+-			});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.mouse.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.mouse.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.mouse.js	(revision 15488)
+@@ -1,169 +0,0 @@
+-/*!
+- * jQuery UI Mouse 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/mouse/
+- *
+- * Depends:
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var mouseHandled = false;
+-$( document ).mouseup( function() {
+-	mouseHandled = false;
+-});
+-
+-$.widget("ui.mouse", {
+-	version: "1.10.3",
+-	options: {
+-		cancel: "input,textarea,button,select,option",
+-		distance: 1,
+-		delay: 0
+-	},
+-	_mouseInit: function() {
+-		var that = this;
+-
+-		this.element
+-			.bind("mousedown."+this.widgetName, function(event) {
+-				return that._mouseDown(event);
+-			})
+-			.bind("click."+this.widgetName, function(event) {
+-				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+-					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+-					event.stopImmediatePropagation();
+-					return false;
+-				}
+-			});
+-
+-		this.started = false;
+-	},
+-
+-	// TODO: make sure destroying one instance of mouse doesn't mess with
+-	// other instances of mouse
+-	_mouseDestroy: function() {
+-		this.element.unbind("."+this.widgetName);
+-		if ( this._mouseMoveDelegate ) {
+-			$(document)
+-				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-		}
+-	},
+-
+-	_mouseDown: function(event) {
+-		// don't let more than one widget handle mouseStart
+-		if( mouseHandled ) { return; }
+-
+-		// we may have missed mouseup (out of window)
+-		(this._mouseStarted && this._mouseUp(event));
+-
+-		this._mouseDownEvent = event;
+-
+-		var that = this,
+-			btnIsLeft = (event.which === 1),
+-			// event.target.nodeName works around a bug in IE 8 with
+-			// disabled inputs (#7620)
+-			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+-			return true;
+-		}
+-
+-		this.mouseDelayMet = !this.options.delay;
+-		if (!this.mouseDelayMet) {
+-			this._mouseDelayTimer = setTimeout(function() {
+-				that.mouseDelayMet = true;
+-			}, this.options.delay);
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted = (this._mouseStart(event) !== false);
+-			if (!this._mouseStarted) {
+-				event.preventDefault();
+-				return true;
+-			}
+-		}
+-
+-		// Click event may never have fired (Gecko & Opera)
+-		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+-			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+-		}
+-
+-		// these delegates are required to keep context
+-		this._mouseMoveDelegate = function(event) {
+-			return that._mouseMove(event);
+-		};
+-		this._mouseUpDelegate = function(event) {
+-			return that._mouseUp(event);
+-		};
+-		$(document)
+-			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		event.preventDefault();
+-
+-		mouseHandled = true;
+-		return true;
+-	},
+-
+-	_mouseMove: function(event) {
+-		// IE mouseup check - mouseup happened when mouse was out of window
+-		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+-			return this._mouseUp(event);
+-		}
+-
+-		if (this._mouseStarted) {
+-			this._mouseDrag(event);
+-			return event.preventDefault();
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted =
+-				(this._mouseStart(this._mouseDownEvent, event) !== false);
+-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+-		}
+-
+-		return !this._mouseStarted;
+-	},
+-
+-	_mouseUp: function(event) {
+-		$(document)
+-			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		if (this._mouseStarted) {
+-			this._mouseStarted = false;
+-
+-			if (event.target === this._mouseDownEvent.target) {
+-				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+-			}
+-
+-			this._mouseStop(event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseDistanceMet: function(event) {
+-		return (Math.max(
+-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+-			) >= this.options.distance
+-		);
+-	},
+-
+-	_mouseDelayMet: function(/* event */) {
+-		return this.mouseDelayMet;
+-	},
+-
+-	// These are placeholder methods, to be overriden by extending plugin
+-	_mouseStart: function(/* event */) {},
+-	_mouseDrag: function(/* event */) {},
+-	_mouseStop: function(/* event */) {},
+-	_mouseCapture: function(/* event */) { return true; }
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.core.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.core.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.core.js	(revision 15488)
+@@ -1,320 +0,0 @@
+-/*!
+- * jQuery UI Core 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/category/ui-core/
+- */
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	runiqueId = /^ui-id-\d+$/;
+-
+-// $.ui might exist from components with no dependencies, e.g., $.ui.position
+-$.ui = $.ui || {};
+-
+-$.extend( $.ui, {
+-	version: "1.10.3",
+-
+-	keyCode: {
+-		BACKSPACE: 8,
+-		COMMA: 188,
+-		DELETE: 46,
+-		DOWN: 40,
+-		END: 35,
+-		ENTER: 13,
+-		ESCAPE: 27,
+-		HOME: 36,
+-		LEFT: 37,
+-		NUMPAD_ADD: 107,
+-		NUMPAD_DECIMAL: 110,
+-		NUMPAD_DIVIDE: 111,
+-		NUMPAD_ENTER: 108,
+-		NUMPAD_MULTIPLY: 106,
+-		NUMPAD_SUBTRACT: 109,
+-		PAGE_DOWN: 34,
+-		PAGE_UP: 33,
+-		PERIOD: 190,
+-		RIGHT: 39,
+-		SPACE: 32,
+-		TAB: 9,
+-		UP: 38
+-	}
+-});
+-
+-// plugins
+-$.fn.extend({
+-	focus: (function( orig ) {
+-		return function( delay, fn ) {
+-			return typeof delay === "number" ?
+-				this.each(function() {
+-					var elem = this;
+-					setTimeout(function() {
+-						$( elem ).focus();
+-						if ( fn ) {
+-							fn.call( elem );
+-						}
+-					}, delay );
+-				}) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.focus ),
+-
+-	scrollParent: function() {
+-		var scrollParent;
+-		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		} else {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		}
+-
+-		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+-	},
+-
+-	zIndex: function( zIndex ) {
+-		if ( zIndex !== undefined ) {
+-			return this.css( "zIndex", zIndex );
+-		}
+-
+-		if ( this.length ) {
+-			var elem = $( this[ 0 ] ), position, value;
+-			while ( elem.length && elem[ 0 ] !== document ) {
+-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+-				// This makes behavior of this function consistent across browsers
+-				// WebKit always returns auto if the element is positioned
+-				position = elem.css( "position" );
+-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+-					// IE returns 0 when zIndex is not specified
+-					// other browsers return a string
+-					// we ignore the case of nested elements with an explicit value of 0
+-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+-					value = parseInt( elem.css( "zIndex" ), 10 );
+-					if ( !isNaN( value ) && value !== 0 ) {
+-						return value;
+-					}
+-				}
+-				elem = elem.parent();
+-			}
+-		}
+-
+-		return 0;
+-	},
+-
+-	uniqueId: function() {
+-		return this.each(function() {
+-			if ( !this.id ) {
+-				this.id = "ui-id-" + (++uuid);
+-			}
+-		});
+-	},
+-
+-	removeUniqueId: function() {
+-		return this.each(function() {
+-			if ( runiqueId.test( this.id ) ) {
+-				$( this ).removeAttr( "id" );
+-			}
+-		});
+-	}
+-});
+-
+-// selectors
+-function focusable( element, isTabIndexNotNaN ) {
+-	var map, mapName, img,
+-		nodeName = element.nodeName.toLowerCase();
+-	if ( "area" === nodeName ) {
+-		map = element.parentNode;
+-		mapName = map.name;
+-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+-			return false;
+-		}
+-		img = $( "img[usemap=#" + mapName + "]" )[0];
+-		return !!img && visible( img );
+-	}
+-	return ( /input|select|textarea|button|object/.test( nodeName ) ?
+-		!element.disabled :
+-		"a" === nodeName ?
+-			element.href || isTabIndexNotNaN :
+-			isTabIndexNotNaN) &&
+-		// the element and all of its ancestors must be visible
+-		visible( element );
+-}
+-
+-function visible( element ) {
+-	return $.expr.filters.visible( element ) &&
+-		!$( element ).parents().addBack().filter(function() {
+-			return $.css( this, "visibility" ) === "hidden";
+-		}).length;
+-}
+-
+-$.extend( $.expr[ ":" ], {
+-	data: $.expr.createPseudo ?
+-		$.expr.createPseudo(function( dataName ) {
+-			return function( elem ) {
+-				return !!$.data( elem, dataName );
+-			};
+-		}) :
+-		// support: jQuery <1.8
+-		function( elem, i, match ) {
+-			return !!$.data( elem, match[ 3 ] );
+-		},
+-
+-	focusable: function( element ) {
+-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+-	},
+-
+-	tabbable: function( element ) {
+-		var tabIndex = $.attr( element, "tabindex" ),
+-			isTabIndexNaN = isNaN( tabIndex );
+-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+-	}
+-});
+-
+-// support: jQuery <1.8
+-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+-	$.each( [ "Width", "Height" ], function( i, name ) {
+-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+-			type = name.toLowerCase(),
+-			orig = {
+-				innerWidth: $.fn.innerWidth,
+-				innerHeight: $.fn.innerHeight,
+-				outerWidth: $.fn.outerWidth,
+-				outerHeight: $.fn.outerHeight
+-			};
+-
+-		function reduce( elem, size, border, margin ) {
+-			$.each( side, function() {
+-				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+-				if ( border ) {
+-					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+-				}
+-				if ( margin ) {
+-					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+-				}
+-			});
+-			return size;
+-		}
+-
+-		$.fn[ "inner" + name ] = function( size ) {
+-			if ( size === undefined ) {
+-				return orig[ "inner" + name ].call( this );
+-			}
+-
+-			return this.each(function() {
+-				$( this ).css( type, reduce( this, size ) + "px" );
+-			});
+-		};
+-
+-		$.fn[ "outer" + name] = function( size, margin ) {
+-			if ( typeof size !== "number" ) {
+-				return orig[ "outer" + name ].call( this, size );
+-			}
+-
+-			return this.each(function() {
+-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+-			});
+-		};
+-	});
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+-	$.fn.removeData = (function( removeData ) {
+-		return function( key ) {
+-			if ( arguments.length ) {
+-				return removeData.call( this, $.camelCase( key ) );
+-			} else {
+-				return removeData.call( this );
+-			}
+-		};
+-	})( $.fn.removeData );
+-}
+-
+-
+-
+-
+-
+-// deprecated
+-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+-
+-$.support.selectstart = "onselectstart" in document.createElement( "div" );
+-$.fn.extend({
+-	disableSelection: function() {
+-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+-			".ui-disableSelection", function( event ) {
+-				event.preventDefault();
+-			});
+-	},
+-
+-	enableSelection: function() {
+-		return this.unbind( ".ui-disableSelection" );
+-	}
+-});
+-
+-$.extend( $.ui, {
+-	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+-	plugin: {
+-		add: function( module, option, set ) {
+-			var i,
+-				proto = $.ui[ module ].prototype;
+-			for ( i in set ) {
+-				proto.plugins[ i ] = proto.plugins[ i ] || [];
+-				proto.plugins[ i ].push( [ option, set[ i ] ] );
+-			}
+-		},
+-		call: function( instance, name, args ) {
+-			var i,
+-				set = instance.plugins[ name ];
+-			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
+-				return;
+-			}
+-
+-			for ( i = 0; i < set.length; i++ ) {
+-				if ( instance.options[ set[ i ][ 0 ] ] ) {
+-					set[ i ][ 1 ].apply( instance.element, args );
+-				}
+-			}
+-		}
+-	},
+-
+-	// only used by resizable
+-	hasScroll: function( el, a ) {
+-
+-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+-		if ( $( el ).css( "overflow" ) === "hidden") {
+-			return false;
+-		}
+-
+-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+-			has = false;
+-
+-		if ( el[ scroll ] > 0 ) {
+-			return true;
+-		}
+-
+-		// TODO: determine which cases actually cause this to happen
+-		// if the element doesn't have the scroll set, see if it's possible to
+-		// set the scroll
+-		el[ scroll ] = 1;
+-		has = ( el[ scroll ] > 0 );
+-		el[ scroll ] = 0;
+-		return has;
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery-1.9.1.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery-1.9.1.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery-1.9.1.js	(revision 15488)
+@@ -1,9597 +0,0 @@
+-/*!
+- * jQuery JavaScript Library v1.9.1
+- * http://jquery.com/
+- *
+- * Includes Sizzle.js
+- * http://sizzlejs.com/
+- *
+- * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+- * Released under the MIT license
+- * http://jquery.org/license
+- *
+- * Date: 2013-2-4
+- */
+-(function( window, undefined ) {
+-
+-// Can't do this because several apps including ASP.NET trace
+-// the stack via arguments.caller.callee and Firefox dies if
+-// you try to trace through "use strict" call chains. (#13335)
+-// Support: Firefox 18+
+-//"use strict";
+-var
+-	// The deferred used on DOM ready
+-	readyList,
+-
+-	// A central reference to the root jQuery(document)
+-	rootjQuery,
+-
+-	// Support: IE<9
+-	// For `typeof node.method` instead of `node.method !== undefined`
+-	core_strundefined = typeof undefined,
+-
+-	// Use the correct document accordingly with window argument (sandbox)
+-	document = window.document,
+-	location = window.location,
+-
+-	// Map over jQuery in case of overwrite
+-	_jQuery = window.jQuery,
+-
+-	// Map over the $ in case of overwrite
+-	_$ = window.$,
+-
+-	// [[Class]] -> type pairs
+-	class2type = {},
+-
+-	// List of deleted data cache ids, so we can reuse them
+-	core_deletedIds = [],
+-
+-	core_version = "1.9.1",
+-
+-	// Save a reference to some core methods
+-	core_concat = core_deletedIds.concat,
+-	core_push = core_deletedIds.push,
+-	core_slice = core_deletedIds.slice,
+-	core_indexOf = core_deletedIds.indexOf,
+-	core_toString = class2type.toString,
+-	core_hasOwn = class2type.hasOwnProperty,
+-	core_trim = core_version.trim,
+-
+-	// Define a local copy of jQuery
+-	jQuery = function( selector, context ) {
+-		// The jQuery object is actually just the init constructor 'enhanced'
+-		return new jQuery.fn.init( selector, context, rootjQuery );
+-	},
+-
+-	// Used for matching numbers
+-	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+-
+-	// Used for splitting on whitespace
+-	core_rnotwhite = /\S+/g,
+-
+-	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+-
+-	// A simple way to check for HTML strings
+-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+-	// Strict HTML recognition (#11290: must start with <)
+-	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+-
+-	// Match a standalone tag
+-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+-
+-	// JSON RegExp
+-	rvalidchars = /^[\],:{}\s]*$/,
+-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+-	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+-	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+-
+-	// Matches dashed string for camelizing
+-	rmsPrefix = /^-ms-/,
+-	rdashAlpha = /-([\da-z])/gi,
+-
+-	// Used by jQuery.camelCase as callback to replace()
+-	fcamelCase = function( all, letter ) {
+-		return letter.toUpperCase();
+-	},
+-
+-	// The ready event handler
+-	completed = function( event ) {
+-
+-		// readyState === "complete" is good enough for us to call the dom ready in oldIE
+-		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+-			detach();
+-			jQuery.ready();
+-		}
+-	},
+-	// Clean-up method for dom ready events
+-	detach = function() {
+-		if ( document.addEventListener ) {
+-			document.removeEventListener( "DOMContentLoaded", completed, false );
+-			window.removeEventListener( "load", completed, false );
+-
+-		} else {
+-			document.detachEvent( "onreadystatechange", completed );
+-			window.detachEvent( "onload", completed );
+-		}
+-	};
+-
+-jQuery.fn = jQuery.prototype = {
+-	// The current version of jQuery being used
+-	jquery: core_version,
+-
+-	constructor: jQuery,
+-	init: function( selector, context, rootjQuery ) {
+-		var match, elem;
+-
+-		// HANDLE: $(""), $(null), $(undefined), $(false)
+-		if ( !selector ) {
+-			return this;
+-		}
+-
+-		// Handle HTML strings
+-		if ( typeof selector === "string" ) {
+-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+-				// Assume that strings that start and end with <> are HTML and skip the regex check
+-				match = [ null, selector, null ];
+-
+-			} else {
+-				match = rquickExpr.exec( selector );
+-			}
+-
+-			// Match html or make sure no context is specified for #id
+-			if ( match && (match[1] || !context) ) {
+-
+-				// HANDLE: $(html) -> $(array)
+-				if ( match[1] ) {
+-					context = context instanceof jQuery ? context[0] : context;
+-
+-					// scripts is true for back-compat
+-					jQuery.merge( this, jQuery.parseHTML(
+-						match[1],
+-						context && context.nodeType ? context.ownerDocument || context : document,
+-						true
+-					) );
+-
+-					// HANDLE: $(html, props)
+-					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+-						for ( match in context ) {
+-							// Properties of context are called as methods if possible
+-							if ( jQuery.isFunction( this[ match ] ) ) {
+-								this[ match ]( context[ match ] );
+-
+-							// ...and otherwise set as attributes
+-							} else {
+-								this.attr( match, context[ match ] );
+-							}
+-						}
+-					}
+-
+-					return this;
+-
+-				// HANDLE: $(#id)
+-				} else {
+-					elem = document.getElementById( match[2] );
+-
+-					// Check parentNode to catch when Blackberry 4.6 returns
+-					// nodes that are no longer in the document #6963
+-					if ( elem && elem.parentNode ) {
+-						// Handle the case where IE and Opera return items
+-						// by name instead of ID
+-						if ( elem.id !== match[2] ) {
+-							return rootjQuery.find( selector );
+-						}
+-
+-						// Otherwise, we inject the element directly into the jQuery object
+-						this.length = 1;
+-						this[0] = elem;
+-					}
+-
+-					this.context = document;
+-					this.selector = selector;
+-					return this;
+-				}
+-
+-			// HANDLE: $(expr, $(...))
+-			} else if ( !context || context.jquery ) {
+-				return ( context || rootjQuery ).find( selector );
+-
+-			// HANDLE: $(expr, context)
+-			// (which is just equivalent to: $(context).find(expr)
+-			} else {
+-				return this.constructor( context ).find( selector );
+-			}
+-
+-		// HANDLE: $(DOMElement)
+-		} else if ( selector.nodeType ) {
+-			this.context = this[0] = selector;
+-			this.length = 1;
+-			return this;
+-
+-		// HANDLE: $(function)
+-		// Shortcut for document ready
+-		} else if ( jQuery.isFunction( selector ) ) {
+-			return rootjQuery.ready( selector );
+-		}
+-
+-		if ( selector.selector !== undefined ) {
+-			this.selector = selector.selector;
+-			this.context = selector.context;
+-		}
+-
+-		return jQuery.makeArray( selector, this );
+-	},
+-
+-	// Start with an empty selector
+-	selector: "",
+-
+-	// The default length of a jQuery object is 0
+-	length: 0,
+-
+-	// The number of elements contained in the matched element set
+-	size: function() {
+-		return this.length;
+-	},
+-
+-	toArray: function() {
+-		return core_slice.call( this );
+-	},
+-
+-	// Get the Nth element in the matched element set OR
+-	// Get the whole matched element set as a clean array
+-	get: function( num ) {
+-		return num == null ?
+-
+-			// Return a 'clean' array
+-			this.toArray() :
+-
+-			// Return just the object
+-			( num < 0 ? this[ this.length + num ] : this[ num ] );
+-	},
+-
+-	// Take an array of elements and push it onto the stack
+-	// (returning the new matched element set)
+-	pushStack: function( elems ) {
+-
+-		// Build a new jQuery matched element set
+-		var ret = jQuery.merge( this.constructor(), elems );
+-
+-		// Add the old object onto the stack (as a reference)
+-		ret.prevObject = this;
+-		ret.context = this.context;
+-
+-		// Return the newly-formed element set
+-		return ret;
+-	},
+-
+-	// Execute a callback for every element in the matched set.
+-	// (You can seed the arguments with an array of args, but this is
+-	// only used internally.)
+-	each: function( callback, args ) {
+-		return jQuery.each( this, callback, args );
+-	},
+-
+-	ready: function( fn ) {
+-		// Add the callback
+-		jQuery.ready.promise().done( fn );
+-
+-		return this;
+-	},
+-
+-	slice: function() {
+-		return this.pushStack( core_slice.apply( this, arguments ) );
+-	},
+-
+-	first: function() {
+-		return this.eq( 0 );
+-	},
+-
+-	last: function() {
+-		return this.eq( -1 );
+-	},
+-
+-	eq: function( i ) {
+-		var len = this.length,
+-			j = +i + ( i < 0 ? len : 0 );
+-		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+-	},
+-
+-	map: function( callback ) {
+-		return this.pushStack( jQuery.map(this, function( elem, i ) {
+-			return callback.call( elem, i, elem );
+-		}));
+-	},
+-
+-	end: function() {
+-		return this.prevObject || this.constructor(null);
+-	},
+-
+-	// For internal use only.
+-	// Behaves like an Array's method, not like a jQuery method.
+-	push: core_push,
+-	sort: [].sort,
+-	splice: [].splice
+-};
+-
+-// Give the init function the jQuery prototype for later instantiation
+-jQuery.fn.init.prototype = jQuery.fn;
+-
+-jQuery.extend = jQuery.fn.extend = function() {
+-	var src, copyIsArray, copy, name, options, clone,
+-		target = arguments[0] || {},
+-		i = 1,
+-		length = arguments.length,
+-		deep = false;
+-
+-	// Handle a deep copy situation
+-	if ( typeof target === "boolean" ) {
+-		deep = target;
+-		target = arguments[1] || {};
+-		// skip the boolean and the target
+-		i = 2;
+-	}
+-
+-	// Handle case when target is a string or something (possible in deep copy)
+-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+-		target = {};
+-	}
+-
+-	// extend jQuery itself if only one argument is passed
+-	if ( length === i ) {
+-		target = this;
+-		--i;
+-	}
+-
+-	for ( ; i < length; i++ ) {
+-		// Only deal with non-null/undefined values
+-		if ( (options = arguments[ i ]) != null ) {
+-			// Extend the base object
+-			for ( name in options ) {
+-				src = target[ name ];
+-				copy = options[ name ];
+-
+-				// Prevent never-ending loop
+-				if ( target === copy ) {
+-					continue;
+-				}
+-
+-				// Recurse if we're merging plain objects or arrays
+-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+-					if ( copyIsArray ) {
+-						copyIsArray = false;
+-						clone = src && jQuery.isArray(src) ? src : [];
+-
+-					} else {
+-						clone = src && jQuery.isPlainObject(src) ? src : {};
+-					}
+-
+-					// Never move original objects, clone them
+-					target[ name ] = jQuery.extend( deep, clone, copy );
+-
+-				// Don't bring in undefined values
+-				} else if ( copy !== undefined ) {
+-					target[ name ] = copy;
+-				}
+-			}
+-		}
+-	}
+-
+-	// Return the modified object
+-	return target;
+-};
+-
+-jQuery.extend({
+-	noConflict: function( deep ) {
+-		if ( window.$ === jQuery ) {
+-			window.$ = _$;
+-		}
+-
+-		if ( deep && window.jQuery === jQuery ) {
+-			window.jQuery = _jQuery;
+-		}
+-
+-		return jQuery;
+-	},
+-
+-	// Is the DOM ready to be used? Set to true once it occurs.
+-	isReady: false,
+-
+-	// A counter to track how many items to wait for before
+-	// the ready event fires. See #6781
+-	readyWait: 1,
+-
+-	// Hold (or release) the ready event
+-	holdReady: function( hold ) {
+-		if ( hold ) {
+-			jQuery.readyWait++;
+-		} else {
+-			jQuery.ready( true );
+-		}
+-	},
+-
+-	// Handle when the DOM is ready
+-	ready: function( wait ) {
+-
+-		// Abort if there are pending holds or we're already ready
+-		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+-			return;
+-		}
+-
+-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+-		if ( !document.body ) {
+-			return setTimeout( jQuery.ready );
+-		}
+-
+-		// Remember that the DOM is ready
+-		jQuery.isReady = true;
+-
+-		// If a normal DOM Ready event fired, decrement, and wait if need be
+-		if ( wait !== true && --jQuery.readyWait > 0 ) {
+-			return;
+-		}
+-
+-		// If there are functions bound, to execute
+-		readyList.resolveWith( document, [ jQuery ] );
+-
+-		// Trigger any bound ready events
+-		if ( jQuery.fn.trigger ) {
+-			jQuery( document ).trigger("ready").off("ready");
+-		}
+-	},
+-
+-	// See test/unit/core.js for details concerning isFunction.
+-	// Since version 1.3, DOM methods and functions like alert
+-	// aren't supported. They return false on IE (#2968).
+-	isFunction: function( obj ) {
+-		return jQuery.type(obj) === "function";
+-	},
+-
+-	isArray: Array.isArray || function( obj ) {
+-		return jQuery.type(obj) === "array";
+-	},
+-
+-	isWindow: function( obj ) {
+-		return obj != null && obj == obj.window;
+-	},
+-
+-	isNumeric: function( obj ) {
+-		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+-	},
+-
+-	type: function( obj ) {
+-		if ( obj == null ) {
+-			return String( obj );
+-		}
+-		return typeof obj === "object" || typeof obj === "function" ?
+-			class2type[ core_toString.call(obj) ] || "object" :
+-			typeof obj;
+-	},
+-
+-	isPlainObject: function( obj ) {
+-		// Must be an Object.
+-		// Because of IE, we also have to check the presence of the constructor property.
+-		// Make sure that DOM nodes and window objects don't pass through, as well
+-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+-			return false;
+-		}
+-
+-		try {
+-			// Not own constructor property must be Object
+-			if ( obj.constructor &&
+-				!core_hasOwn.call(obj, "constructor") &&
+-				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+-				return false;
+-			}
+-		} catch ( e ) {
+-			// IE8,9 Will throw exceptions on certain host objects #9897
+-			return false;
+-		}
+-
+-		// Own properties are enumerated firstly, so to speed up,
+-		// if last one is own, then all properties are own.
+-
+-		var key;
+-		for ( key in obj ) {}
+-
+-		return key === undefined || core_hasOwn.call( obj, key );
+-	},
+-
+-	isEmptyObject: function( obj ) {
+-		var name;
+-		for ( name in obj ) {
+-			return false;
+-		}
+-		return true;
+-	},
+-
+-	error: function( msg ) {
+-		throw new Error( msg );
+-	},
+-
+-	// data: string of html
+-	// context (optional): If specified, the fragment will be created in this context, defaults to document
+-	// keepScripts (optional): If true, will include scripts passed in the html string
+-	parseHTML: function( data, context, keepScripts ) {
+-		if ( !data || typeof data !== "string" ) {
+-			return null;
+-		}
+-		if ( typeof context === "boolean" ) {
+-			keepScripts = context;
+-			context = false;
+-		}
+-		context = context || document;
+-
+-		var parsed = rsingleTag.exec( data ),
+-			scripts = !keepScripts && [];
+-
+-		// Single tag
+-		if ( parsed ) {
+-			return [ context.createElement( parsed[1] ) ];
+-		}
+-
+-		parsed = jQuery.buildFragment( [ data ], context, scripts );
+-		if ( scripts ) {
+-			jQuery( scripts ).remove();
+-		}
+-		return jQuery.merge( [], parsed.childNodes );
+-	},
+-
+-	parseJSON: function( data ) {
+-		// Attempt to parse using the native JSON parser first
+-		if ( window.JSON && window.JSON.parse ) {
+-			return window.JSON.parse( data );
+-		}
+-
+-		if ( data === null ) {
+-			return data;
+-		}
+-
+-		if ( typeof data === "string" ) {
+-
+-			// Make sure leading/trailing whitespace is removed (IE can't handle it)
+-			data = jQuery.trim( data );
+-
+-			if ( data ) {
+-				// Make sure the incoming data is actual JSON
+-				// Logic borrowed from http://json.org/json2.js
+-				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+-					.replace( rvalidtokens, "]" )
+-					.replace( rvalidbraces, "")) ) {
+-
+-					return ( new Function( "return " + data ) )();
+-				}
+-			}
+-		}
+-
+-		jQuery.error( "Invalid JSON: " + data );
+-	},
+-
+-	// Cross-browser xml parsing
+-	parseXML: function( data ) {
+-		var xml, tmp;
+-		if ( !data || typeof data !== "string" ) {
+-			return null;
+-		}
+-		try {
+-			if ( window.DOMParser ) { // Standard
+-				tmp = new DOMParser();
+-				xml = tmp.parseFromString( data , "text/xml" );
+-			} else { // IE
+-				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+-				xml.async = "false";
+-				xml.loadXML( data );
+-			}
+-		} catch( e ) {
+-			xml = undefined;
+-		}
+-		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+-			jQuery.error( "Invalid XML: " + data );
+-		}
+-		return xml;
+-	},
+-
+-	noop: function() {},
+-
+-	// Evaluates a script in a global context
+-	// Workarounds based on findings by Jim Driscoll
+-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+-	globalEval: function( data ) {
+-		if ( data && jQuery.trim( data ) ) {
+-			// We use execScript on Internet Explorer
+-			// We use an anonymous function so that context is window
+-			// rather than jQuery in Firefox
+-			( window.execScript || function( data ) {
+-				window[ "eval" ].call( window, data );
+-			} )( data );
+-		}
+-	},
+-
+-	// Convert dashed to camelCase; used by the css and data modules
+-	// Microsoft forgot to hump their vendor prefix (#9572)
+-	camelCase: function( string ) {
+-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+-	},
+-
+-	nodeName: function( elem, name ) {
+-		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+-	},
+-
+-	// args is for internal usage only
+-	each: function( obj, callback, args ) {
+-		var value,
+-			i = 0,
+-			length = obj.length,
+-			isArray = isArraylike( obj );
+-
+-		if ( args ) {
+-			if ( isArray ) {
+-				for ( ; i < length; i++ ) {
+-					value = callback.apply( obj[ i ], args );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( i in obj ) {
+-					value = callback.apply( obj[ i ], args );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			}
+-
+-		// A special, fast, case for the most common use of each
+-		} else {
+-			if ( isArray ) {
+-				for ( ; i < length; i++ ) {
+-					value = callback.call( obj[ i ], i, obj[ i ] );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( i in obj ) {
+-					value = callback.call( obj[ i ], i, obj[ i ] );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			}
+-		}
+-
+-		return obj;
+-	},
+-
+-	// Use native String.trim function wherever possible
+-	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				core_trim.call( text );
+-		} :
+-
+-		// Otherwise use our own trimming functionality
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				( text + "" ).replace( rtrim, "" );
+-		},
+-
+-	// results is for internal usage only
+-	makeArray: function( arr, results ) {
+-		var ret = results || [];
+-
+-		if ( arr != null ) {
+-			if ( isArraylike( Object(arr) ) ) {
+-				jQuery.merge( ret,
+-					typeof arr === "string" ?
+-					[ arr ] : arr
+-				);
+-			} else {
+-				core_push.call( ret, arr );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	inArray: function( elem, arr, i ) {
+-		var len;
+-
+-		if ( arr ) {
+-			if ( core_indexOf ) {
+-				return core_indexOf.call( arr, elem, i );
+-			}
+-
+-			len = arr.length;
+-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+-
+-			for ( ; i < len; i++ ) {
+-				// Skip accessing in sparse arrays
+-				if ( i in arr && arr[ i ] === elem ) {
+-					return i;
+-				}
+-			}
+-		}
+-
+-		return -1;
+-	},
+-
+-	merge: function( first, second ) {
+-		var l = second.length,
+-			i = first.length,
+-			j = 0;
+-
+-		if ( typeof l === "number" ) {
+-			for ( ; j < l; j++ ) {
+-				first[ i++ ] = second[ j ];
+-			}
+-		} else {
+-			while ( second[j] !== undefined ) {
+-				first[ i++ ] = second[ j++ ];
+-			}
+-		}
+-
+-		first.length = i;
+-
+-		return first;
+-	},
+-
+-	grep: function( elems, callback, inv ) {
+-		var retVal,
+-			ret = [],
+-			i = 0,
+-			length = elems.length;
+-		inv = !!inv;
+-
+-		// Go through the array, only saving the items
+-		// that pass the validator function
+-		for ( ; i < length; i++ ) {
+-			retVal = !!callback( elems[ i ], i );
+-			if ( inv !== retVal ) {
+-				ret.push( elems[ i ] );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	// arg is for internal usage only
+-	map: function( elems, callback, arg ) {
+-		var value,
+-			i = 0,
+-			length = elems.length,
+-			isArray = isArraylike( elems ),
+-			ret = [];
+-
+-		// Go through the array, translating each of the items to their
+-		if ( isArray ) {
+-			for ( ; i < length; i++ ) {
+-				value = callback( elems[ i ], i, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-
+-		// Go through every key on the object,
+-		} else {
+-			for ( i in elems ) {
+-				value = callback( elems[ i ], i, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-		}
+-
+-		// Flatten any nested arrays
+-		return core_concat.apply( [], ret );
+-	},
+-
+-	// A global GUID counter for objects
+-	guid: 1,
+-
+-	// Bind a function to a context, optionally partially applying any
+-	// arguments.
+-	proxy: function( fn, context ) {
+-		var args, proxy, tmp;
+-
+-		if ( typeof context === "string" ) {
+-			tmp = fn[ context ];
+-			context = fn;
+-			fn = tmp;
+-		}
+-
+-		// Quick check to determine if target is callable, in the spec
+-		// this throws a TypeError, but we will just return undefined.
+-		if ( !jQuery.isFunction( fn ) ) {
+-			return undefined;
+-		}
+-
+-		// Simulated bind
+-		args = core_slice.call( arguments, 2 );
+-		proxy = function() {
+-			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+-		};
+-
+-		// Set the guid of unique handler to the same of original handler, so it can be removed
+-		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+-
+-		return proxy;
+-	},
+-
+-	// Multifunctional method to get and set values of a collection
+-	// The value/s can optionally be executed if it's a function
+-	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+-		var i = 0,
+-			length = elems.length,
+-			bulk = key == null;
+-
+-		// Sets many values
+-		if ( jQuery.type( key ) === "object" ) {
+-			chainable = true;
+-			for ( i in key ) {
+-				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+-			}
+-
+-		// Sets one value
+-		} else if ( value !== undefined ) {
+-			chainable = true;
+-
+-			if ( !jQuery.isFunction( value ) ) {
+-				raw = true;
+-			}
+-
+-			if ( bulk ) {
+-				// Bulk operations run against the entire set
+-				if ( raw ) {
+-					fn.call( elems, value );
+-					fn = null;
+-
+-				// ...except when executing function values
+-				} else {
+-					bulk = fn;
+-					fn = function( elem, key, value ) {
+-						return bulk.call( jQuery( elem ), value );
+-					};
+-				}
+-			}
+-
+-			if ( fn ) {
+-				for ( ; i < length; i++ ) {
+-					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+-				}
+-			}
+-		}
+-
+-		return chainable ?
+-			elems :
+-
+-			// Gets
+-			bulk ?
+-				fn.call( elems ) :
+-				length ? fn( elems[0], key ) : emptyGet;
+-	},
+-
+-	now: function() {
+-		return ( new Date() ).getTime();
+-	}
+-});
+-
+-jQuery.ready.promise = function( obj ) {
+-	if ( !readyList ) {
+-
+-		readyList = jQuery.Deferred();
+-
+-		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+-		// we once tried to use readyState "interactive" here, but it caused issues like the one
+-		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+-		if ( document.readyState === "complete" ) {
+-			// Handle it asynchronously to allow scripts the opportunity to delay ready
+-			setTimeout( jQuery.ready );
+-
+-		// Standards-based browsers support DOMContentLoaded
+-		} else if ( document.addEventListener ) {
+-			// Use the handy event callback
+-			document.addEventListener( "DOMContentLoaded", completed, false );
+-
+-			// A fallback to window.onload, that will always work
+-			window.addEventListener( "load", completed, false );
+-
+-		// If IE event model is used
+-		} else {
+-			// Ensure firing before onload, maybe late but safe also for iframes
+-			document.attachEvent( "onreadystatechange", completed );
+-
+-			// A fallback to window.onload, that will always work
+-			window.attachEvent( "onload", completed );
+-
+-			// If IE and not a frame
+-			// continually check to see if the document is ready
+-			var top = false;
+-
+-			try {
+-				top = window.frameElement == null && document.documentElement;
+-			} catch(e) {}
+-
+-			if ( top && top.doScroll ) {
+-				(function doScrollCheck() {
+-					if ( !jQuery.isReady ) {
+-
+-						try {
+-							// Use the trick by Diego Perini
+-							// http://javascript.nwbox.com/IEContentLoaded/
+-							top.doScroll("left");
+-						} catch(e) {
+-							return setTimeout( doScrollCheck, 50 );
+-						}
+-
+-						// detach all dom ready events
+-						detach();
+-
+-						// and execute any waiting functions
+-						jQuery.ready();
+-					}
+-				})();
+-			}
+-		}
+-	}
+-	return readyList.promise( obj );
+-};
+-
+-// Populate the class2type map
+-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+-});
+-
+-function isArraylike( obj ) {
+-	var length = obj.length,
+-		type = jQuery.type( obj );
+-
+-	if ( jQuery.isWindow( obj ) ) {
+-		return false;
+-	}
+-
+-	if ( obj.nodeType === 1 && length ) {
+-		return true;
+-	}
+-
+-	return type === "array" || type !== "function" &&
+-		( length === 0 ||
+-		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+-}
+-
+-// All jQuery objects should point back to these
+-rootjQuery = jQuery(document);
+-// String to Object options format cache
+-var optionsCache = {};
+-
+-// Convert String-formatted options into Object-formatted ones and store in cache
+-function createOptions( options ) {
+-	var object = optionsCache[ options ] = {};
+-	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+-		object[ flag ] = true;
+-	});
+-	return object;
+-}
+-
+-/*
+- * Create a callback list using the following parameters:
+- *
+- *	options: an optional list of space-separated options that will change how
+- *			the callback list behaves or a more traditional option object
+- *
+- * By default a callback list will act like an event callback list and can be
+- * "fired" multiple times.
+- *
+- * Possible options:
+- *
+- *	once:			will ensure the callback list can only be fired once (like a Deferred)
+- *
+- *	memory:			will keep track of previous values and will call any callback added
+- *					after the list has been fired right away with the latest "memorized"
+- *					values (like a Deferred)
+- *
+- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+- *
+- *	stopOnFalse:	interrupt callings when a callback returns false
+- *
+- */
+-jQuery.Callbacks = function( options ) {
+-
+-	// Convert options from String-formatted to Object-formatted if needed
+-	// (we check in cache first)
+-	options = typeof options === "string" ?
+-		( optionsCache[ options ] || createOptions( options ) ) :
+-		jQuery.extend( {}, options );
+-
+-	var // Flag to know if list is currently firing
+-		firing,
+-		// Last fire value (for non-forgettable lists)
+-		memory,
+-		// Flag to know if list was already fired
+-		fired,
+-		// End of the loop when firing
+-		firingLength,
+-		// Index of currently firing callback (modified by remove if needed)
+-		firingIndex,
+-		// First callback to fire (used internally by add and fireWith)
+-		firingStart,
+-		// Actual callback list
+-		list = [],
+-		// Stack of fire calls for repeatable lists
+-		stack = !options.once && [],
+-		// Fire callbacks
+-		fire = function( data ) {
+-			memory = options.memory && data;
+-			fired = true;
+-			firingIndex = firingStart || 0;
+-			firingStart = 0;
+-			firingLength = list.length;
+-			firing = true;
+-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+-				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+-					memory = false; // To prevent further calls using add
+-					break;
+-				}
+-			}
+-			firing = false;
+-			if ( list ) {
+-				if ( stack ) {
+-					if ( stack.length ) {
+-						fire( stack.shift() );
+-					}
+-				} else if ( memory ) {
+-					list = [];
+-				} else {
+-					self.disable();
+-				}
+-			}
+-		},
+-		// Actual Callbacks object
+-		self = {
+-			// Add a callback or a collection of callbacks to the list
+-			add: function() {
+-				if ( list ) {
+-					// First, we save the current length
+-					var start = list.length;
+-					(function add( args ) {
+-						jQuery.each( args, function( _, arg ) {
+-							var type = jQuery.type( arg );
+-							if ( type === "function" ) {
+-								if ( !options.unique || !self.has( arg ) ) {
+-									list.push( arg );
+-								}
+-							} else if ( arg && arg.length && type !== "string" ) {
+-								// Inspect recursively
+-								add( arg );
+-							}
+-						});
+-					})( arguments );
+-					// Do we need to add the callbacks to the
+-					// current firing batch?
+-					if ( firing ) {
+-						firingLength = list.length;
+-					// With memory, if we're not firing then
+-					// we should call right away
+-					} else if ( memory ) {
+-						firingStart = start;
+-						fire( memory );
+-					}
+-				}
+-				return this;
+-			},
+-			// Remove a callback from the list
+-			remove: function() {
+-				if ( list ) {
+-					jQuery.each( arguments, function( _, arg ) {
+-						var index;
+-						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+-							list.splice( index, 1 );
+-							// Handle firing indexes
+-							if ( firing ) {
+-								if ( index <= firingLength ) {
+-									firingLength--;
+-								}
+-								if ( index <= firingIndex ) {
+-									firingIndex--;
+-								}
+-							}
+-						}
+-					});
+-				}
+-				return this;
+-			},
+-			// Check if a given callback is in the list.
+-			// If no argument is given, return whether or not list has callbacks attached.
+-			has: function( fn ) {
+-				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+-			},
+-			// Remove all callbacks from the list
+-			empty: function() {
+-				list = [];
+-				return this;
+-			},
+-			// Have the list do nothing anymore
+-			disable: function() {
+-				list = stack = memory = undefined;
+-				return this;
+-			},
+-			// Is it disabled?
+-			disabled: function() {
+-				return !list;
+-			},
+-			// Lock the list in its current state
+-			lock: function() {
+-				stack = undefined;
+-				if ( !memory ) {
+-					self.disable();
+-				}
+-				return this;
+-			},
+-			// Is it locked?
+-			locked: function() {
+-				return !stack;
+-			},
+-			// Call all callbacks with the given context and arguments
+-			fireWith: function( context, args ) {
+-				args = args || [];
+-				args = [ context, args.slice ? args.slice() : args ];
+-				if ( list && ( !fired || stack ) ) {
+-					if ( firing ) {
+-						stack.push( args );
+-					} else {
+-						fire( args );
+-					}
+-				}
+-				return this;
+-			},
+-			// Call all the callbacks with the given arguments
+-			fire: function() {
+-				self.fireWith( this, arguments );
+-				return this;
+-			},
+-			// To know if the callbacks have already been called at least once
+-			fired: function() {
+-				return !!fired;
+-			}
+-		};
+-
+-	return self;
+-};
+-jQuery.extend({
+-
+-	Deferred: function( func ) {
+-		var tuples = [
+-				// action, add listener, listener list, final state
+-				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+-				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+-				[ "notify", "progress", jQuery.Callbacks("memory") ]
+-			],
+-			state = "pending",
+-			promise = {
+-				state: function() {
+-					return state;
+-				},
+-				always: function() {
+-					deferred.done( arguments ).fail( arguments );
+-					return this;
+-				},
+-				then: function( /* fnDone, fnFail, fnProgress */ ) {
+-					var fns = arguments;
+-					return jQuery.Deferred(function( newDefer ) {
+-						jQuery.each( tuples, function( i, tuple ) {
+-							var action = tuple[ 0 ],
+-								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+-							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+-							deferred[ tuple[1] ](function() {
+-								var returned = fn && fn.apply( this, arguments );
+-								if ( returned && jQuery.isFunction( returned.promise ) ) {
+-									returned.promise()
+-										.done( newDefer.resolve )
+-										.fail( newDefer.reject )
+-										.progress( newDefer.notify );
+-								} else {
+-									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+-								}
+-							});
+-						});
+-						fns = null;
+-					}).promise();
+-				},
+-				// Get a promise for this deferred
+-				// If obj is provided, the promise aspect is added to the object
+-				promise: function( obj ) {
+-					return obj != null ? jQuery.extend( obj, promise ) : promise;
+-				}
+-			},
+-			deferred = {};
+-
+-		// Keep pipe for back-compat
+-		promise.pipe = promise.then;
+-
+-		// Add list-specific methods
+-		jQuery.each( tuples, function( i, tuple ) {
+-			var list = tuple[ 2 ],
+-				stateString = tuple[ 3 ];
+-
+-			// promise[ done | fail | progress ] = list.add
+-			promise[ tuple[1] ] = list.add;
+-
+-			// Handle state
+-			if ( stateString ) {
+-				list.add(function() {
+-					// state = [ resolved | rejected ]
+-					state = stateString;
+-
+-				// [ reject_list | resolve_list ].disable; progress_list.lock
+-				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+-			}
+-
+-			// deferred[ resolve | reject | notify ]
+-			deferred[ tuple[0] ] = function() {
+-				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+-				return this;
+-			};
+-			deferred[ tuple[0] + "With" ] = list.fireWith;
+-		});
+-
+-		// Make the deferred a promise
+-		promise.promise( deferred );
+-
+-		// Call given func if any
+-		if ( func ) {
+-			func.call( deferred, deferred );
+-		}
+-
+-		// All done!
+-		return deferred;
+-	},
+-
+-	// Deferred helper
+-	when: function( subordinate /* , ..., subordinateN */ ) {
+-		var i = 0,
+-			resolveValues = core_slice.call( arguments ),
+-			length = resolveValues.length,
+-
+-			// the count of uncompleted subordinates
+-			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+-
+-			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+-			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+-
+-			// Update function for both resolve and progress values
+-			updateFunc = function( i, contexts, values ) {
+-				return function( value ) {
+-					contexts[ i ] = this;
+-					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+-					if( values === progressValues ) {
+-						deferred.notifyWith( contexts, values );
+-					} else if ( !( --remaining ) ) {
+-						deferred.resolveWith( contexts, values );
+-					}
+-				};
+-			},
+-
+-			progressValues, progressContexts, resolveContexts;
+-
+-		// add listeners to Deferred subordinates; treat others as resolved
+-		if ( length > 1 ) {
+-			progressValues = new Array( length );
+-			progressContexts = new Array( length );
+-			resolveContexts = new Array( length );
+-			for ( ; i < length; i++ ) {
+-				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+-					resolveValues[ i ].promise()
+-						.done( updateFunc( i, resolveContexts, resolveValues ) )
+-						.fail( deferred.reject )
+-						.progress( updateFunc( i, progressContexts, progressValues ) );
+-				} else {
+-					--remaining;
+-				}
+-			}
+-		}
+-
+-		// if we're not waiting on anything, resolve the master
+-		if ( !remaining ) {
+-			deferred.resolveWith( resolveContexts, resolveValues );
+-		}
+-
+-		return deferred.promise();
+-	}
+-});
+-jQuery.support = (function() {
+-
+-	var support, all, a,
+-		input, select, fragment,
+-		opt, eventName, isSupported, i,
+-		div = document.createElement("div");
+-
+-	// Setup
+-	div.setAttribute( "className", "t" );
+-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+-
+-	// Support tests won't run in some limited or non-browser environments
+-	all = div.getElementsByTagName("*");
+-	a = div.getElementsByTagName("a")[ 0 ];
+-	if ( !all || !a || !all.length ) {
+-		return {};
+-	}
+-
+-	// First batch of tests
+-	select = document.createElement("select");
+-	opt = select.appendChild( document.createElement("option") );
+-	input = div.getElementsByTagName("input")[ 0 ];
+-
+-	a.style.cssText = "top:1px;float:left;opacity:.5";
+-	support = {
+-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+-		getSetAttribute: div.className !== "t",
+-
+-		// IE strips leading whitespace when .innerHTML is used
+-		leadingWhitespace: div.firstChild.nodeType === 3,
+-
+-		// Make sure that tbody elements aren't automatically inserted
+-		// IE will insert them into empty tables
+-		tbody: !div.getElementsByTagName("tbody").length,
+-
+-		// Make sure that link elements get serialized correctly by innerHTML
+-		// This requires a wrapper element in IE
+-		htmlSerialize: !!div.getElementsByTagName("link").length,
+-
+-		// Get the style information from getAttribute
+-		// (IE uses .cssText instead)
+-		style: /top/.test( a.getAttribute("style") ),
+-
+-		// Make sure that URLs aren't manipulated
+-		// (IE normalizes it by default)
+-		hrefNormalized: a.getAttribute("href") === "/a",
+-
+-		// Make sure that element opacity exists
+-		// (IE uses filter instead)
+-		// Use a regex to work around a WebKit issue. See #5145
+-		opacity: /^0.5/.test( a.style.opacity ),
+-
+-		// Verify style float existence
+-		// (IE uses styleFloat instead of cssFloat)
+-		cssFloat: !!a.style.cssFloat,
+-
+-		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+-		checkOn: !!input.value,
+-
+-		// Make sure that a selected-by-default option has a working selected property.
+-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+-		optSelected: opt.selected,
+-
+-		// Tests for enctype support on a form (#6743)
+-		enctype: !!document.createElement("form").enctype,
+-
+-		// Makes sure cloning an html5 element does not cause problems
+-		// Where outerHTML is undefined, this still works
+-		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+-
+-		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+-		boxModel: document.compatMode === "CSS1Compat",
+-
+-		// Will be defined later
+-		deleteExpando: true,
+-		noCloneEvent: true,
+-		inlineBlockNeedsLayout: false,
+-		shrinkWrapBlocks: false,
+-		reliableMarginRight: true,
+-		boxSizingReliable: true,
+-		pixelPosition: false
+-	};
+-
+-	// Make sure checked status is properly cloned
+-	input.checked = true;
+-	support.noCloneChecked = input.cloneNode( true ).checked;
+-
+-	// Make sure that the options inside disabled selects aren't marked as disabled
+-	// (WebKit marks them as disabled)
+-	select.disabled = true;
+-	support.optDisabled = !opt.disabled;
+-
+-	// Support: IE<9
+-	try {
+-		delete div.test;
+-	} catch( e ) {
+-		support.deleteExpando = false;
+-	}
+-
+-	// Check if we can trust getAttribute("value")
+-	input = document.createElement("input");
+-	input.setAttribute( "value", "" );
+-	support.input = input.getAttribute( "value" ) === "";
+-
+-	// Check if an input maintains its value after becoming a radio
+-	input.value = "t";
+-	input.setAttribute( "type", "radio" );
+-	support.radioValue = input.value === "t";
+-
+-	// #11217 - WebKit loses check when the name is after the checked attribute
+-	input.setAttribute( "checked", "t" );
+-	input.setAttribute( "name", "t" );
+-
+-	fragment = document.createDocumentFragment();
+-	fragment.appendChild( input );
+-
+-	// Check if a disconnected checkbox will retain its checked
+-	// value of true after appended to the DOM (IE6/7)
+-	support.appendChecked = input.checked;
+-
+-	// WebKit doesn't clone checked state correctly in fragments
+-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+-
+-	// Support: IE<9
+-	// Opera does not clone events (and typeof div.attachEvent === undefined).
+-	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+-	if ( div.attachEvent ) {
+-		div.attachEvent( "onclick", function() {
+-			support.noCloneEvent = false;
+-		});
+-
+-		div.cloneNode( true ).click();
+-	}
+-
+-	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+-	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+-	for ( i in { submit: true, change: true, focusin: true }) {
+-		div.setAttribute( eventName = "on" + i, "t" );
+-
+-		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+-	}
+-
+-	div.style.backgroundClip = "content-box";
+-	div.cloneNode( true ).style.backgroundClip = "";
+-	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+-
+-	// Run tests that need a body at doc ready
+-	jQuery(function() {
+-		var container, marginDiv, tds,
+-			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+-			body = document.getElementsByTagName("body")[0];
+-
+-		if ( !body ) {
+-			// Return for frameset docs that don't have a body
+-			return;
+-		}
+-
+-		container = document.createElement("div");
+-		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+-
+-		body.appendChild( container ).appendChild( div );
+-
+-		// Support: IE8
+-		// Check if table cells still have offsetWidth/Height when they are set
+-		// to display:none and there are still other visible table cells in a
+-		// table row; if so, offsetWidth/Height are not reliable for use when
+-		// determining if an element has been hidden directly using
+-		// display:none (it is still safe to use offsets if a parent element is
+-		// hidden; don safety goggles and see bug #4512 for more information).
+-		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+-		tds = div.getElementsByTagName("td");
+-		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+-		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+-
+-		tds[ 0 ].style.display = "";
+-		tds[ 1 ].style.display = "none";
+-
+-		// Support: IE8
+-		// Check if empty table cells still have offsetWidth/Height
+-		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+-
+-		// Check box-sizing and margin behavior
+-		div.innerHTML = "";
+-		div.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%;";
+-		support.boxSizing = ( div.offsetWidth === 4 );
+-		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+-
+-		// Use window.getComputedStyle because jsdom on node.js will break without it.
+-		if ( window.getComputedStyle ) {
+-			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+-			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+-
+-			// Check if div with explicit width and no margin-right incorrectly
+-			// gets computed margin-right based on width of container. (#3333)
+-			// Fails in WebKit before Feb 2011 nightlies
+-			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-			marginDiv = div.appendChild( document.createElement("div") );
+-			marginDiv.style.cssText = div.style.cssText = divReset;
+-			marginDiv.style.marginRight = marginDiv.style.width = "0";
+-			div.style.width = "1px";
+-
+-			support.reliableMarginRight =
+-				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+-		}
+-
+-		if ( typeof div.style.zoom !== core_strundefined ) {
+-			// Support: IE<8
+-			// Check if natively block-level elements act like inline-block
+-			// elements when setting their display to 'inline' and giving
+-			// them layout
+-			div.innerHTML = "";
+-			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+-			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+-
+-			// Support: IE6
+-			// Check if elements with layout shrink-wrap their children
+-			div.style.display = "block";
+-			div.innerHTML = "<div></div>";
+-			div.firstChild.style.width = "5px";
+-			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+-
+-			if ( support.inlineBlockNeedsLayout ) {
+-				// Prevent IE 6 from affecting layout for positioned elements #11048
+-				// Prevent IE from shrinking the body in IE 7 mode #12869
+-				// Support: IE<8
+-				body.style.zoom = 1;
+-			}
+-		}
+-
+-		body.removeChild( container );
+-
+-		// Null elements to avoid leaks in IE
+-		container = div = tds = marginDiv = null;
+-	});
+-
+-	// Null elements to avoid leaks in IE
+-	all = select = fragment = opt = a = input = null;
+-
+-	return support;
+-})();
+-
+-var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+-	rmultiDash = /([A-Z])/g;
+-
+-function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+-	if ( !jQuery.acceptData( elem ) ) {
+-		return;
+-	}
+-
+-	var thisCache, ret,
+-		internalKey = jQuery.expando,
+-		getByName = typeof name === "string",
+-
+-		// We have to handle DOM nodes and JS objects differently because IE6-7
+-		// can't GC object references properly across the DOM-JS boundary
+-		isNode = elem.nodeType,
+-
+-		// Only DOM nodes need the global jQuery cache; JS object data is
+-		// attached directly to the object so GC can occur automatically
+-		cache = isNode ? jQuery.cache : elem,
+-
+-		// Only defining an ID for JS objects if its cache already exists allows
+-		// the code to shortcut on the same path as a DOM node with no cache
+-		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+-
+-	// Avoid doing any more work than we need to when trying to get data on an
+-	// object that has no data at all
+-	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+-		return;
+-	}
+-
+-	if ( !id ) {
+-		// Only DOM nodes need a new unique ID for each element since their data
+-		// ends up in the global cache
+-		if ( isNode ) {
+-			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+-		} else {
+-			id = internalKey;
+-		}
+-	}
+-
+-	if ( !cache[ id ] ) {
+-		cache[ id ] = {};
+-
+-		// Avoids exposing jQuery metadata on plain JS objects when the object
+-		// is serialized using JSON.stringify
+-		if ( !isNode ) {
+-			cache[ id ].toJSON = jQuery.noop;
+-		}
+-	}
+-
+-	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+-	// shallow copied over onto the existing cache
+-	if ( typeof name === "object" || typeof name === "function" ) {
+-		if ( pvt ) {
+-			cache[ id ] = jQuery.extend( cache[ id ], name );
+-		} else {
+-			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+-		}
+-	}
+-
+-	thisCache = cache[ id ];
+-
+-	// jQuery data() is stored in a separate object inside the object's internal data
+-	// cache in order to avoid key collisions between internal data and user-defined
+-	// data.
+-	if ( !pvt ) {
+-		if ( !thisCache.data ) {
+-			thisCache.data = {};
+-		}
+-
+-		thisCache = thisCache.data;
+-	}
+-
+-	if ( data !== undefined ) {
+-		thisCache[ jQuery.camelCase( name ) ] = data;
+-	}
+-
+-	// Check for both converted-to-camel and non-converted data property names
+-	// If a data property was specified
+-	if ( getByName ) {
+-
+-		// First Try to find as-is property data
+-		ret = thisCache[ name ];
+-
+-		// Test for null|undefined property data
+-		if ( ret == null ) {
+-
+-			// Try to find the camelCased property
+-			ret = thisCache[ jQuery.camelCase( name ) ];
+-		}
+-	} else {
+-		ret = thisCache;
+-	}
+-
+-	return ret;
+-}
+-
+-function internalRemoveData( elem, name, pvt ) {
+-	if ( !jQuery.acceptData( elem ) ) {
+-		return;
+-	}
+-
+-	var i, l, thisCache,
+-		isNode = elem.nodeType,
+-
+-		// See jQuery.data for more information
+-		cache = isNode ? jQuery.cache : elem,
+-		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+-
+-	// If there is already no cache entry for this object, there is no
+-	// purpose in continuing
+-	if ( !cache[ id ] ) {
+-		return;
+-	}
+-
+-	if ( name ) {
+-
+-		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+-
+-		if ( thisCache ) {
+-
+-			// Support array or space separated string names for data keys
+-			if ( !jQuery.isArray( name ) ) {
+-
+-				// try the string as a key before any manipulation
+-				if ( name in thisCache ) {
+-					name = [ name ];
+-				} else {
+-
+-					// split the camel cased version by spaces unless a key with the spaces exists
+-					name = jQuery.camelCase( name );
+-					if ( name in thisCache ) {
+-						name = [ name ];
+-					} else {
+-						name = name.split(" ");
+-					}
+-				}
+-			} else {
+-				// If "name" is an array of keys...
+-				// When data is initially created, via ("key", "val") signature,
+-				// keys will be converted to camelCase.
+-				// Since there is no way to tell _how_ a key was added, remove
+-				// both plain key and camelCase key. #12786
+-				// This will only penalize the array argument path.
+-				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+-			}
+-
+-			for ( i = 0, l = name.length; i < l; i++ ) {
+-				delete thisCache[ name[i] ];
+-			}
+-
+-			// If there is no data left in the cache, we want to continue
+-			// and let the cache object itself get destroyed
+-			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+-				return;
+-			}
+-		}
+-	}
+-
+-	// See jQuery.data for more information
+-	if ( !pvt ) {
+-		delete cache[ id ].data;
+-
+-		// Don't destroy the parent cache unless the internal data object
+-		// had been the only thing left in it
+-		if ( !isEmptyDataObject( cache[ id ] ) ) {
+-			return;
+-		}
+-	}
+-
+-	// Destroy the cache
+-	if ( isNode ) {
+-		jQuery.cleanData( [ elem ], true );
+-
+-	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+-	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+-		delete cache[ id ];
+-
+-	// When all else fails, null
+-	} else {
+-		cache[ id ] = null;
+-	}
+-}
+-
+-jQuery.extend({
+-	cache: {},
+-
+-	// Unique for each copy of jQuery on the page
+-	// Non-digits removed to match rinlinejQuery
+-	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+-
+-	// The following elements throw uncatchable exceptions if you
+-	// attempt to add expando properties to them.
+-	noData: {
+-		"embed": true,
+-		// Ban all objects except for Flash (which handle expandos)
+-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+-		"applet": true
+-	},
+-
+-	hasData: function( elem ) {
+-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+-		return !!elem && !isEmptyDataObject( elem );
+-	},
+-
+-	data: function( elem, name, data ) {
+-		return internalData( elem, name, data );
+-	},
+-
+-	removeData: function( elem, name ) {
+-		return internalRemoveData( elem, name );
+-	},
+-
+-	// For internal use only.
+-	_data: function( elem, name, data ) {
+-		return internalData( elem, name, data, true );
+-	},
+-
+-	_removeData: function( elem, name ) {
+-		return internalRemoveData( elem, name, true );
+-	},
+-
+-	// A method for determining if a DOM node can handle the data expando
+-	acceptData: function( elem ) {
+-		// Do not set data on non-element because it will not be cleared (#8335).
+-		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
+-			return false;
+-		}
+-
+-		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+-
+-		// nodes accept data unless otherwise specified; rejection can be conditional
+-		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	data: function( key, value ) {
+-		var attrs, name,
+-			elem = this[0],
+-			i = 0,
+-			data = null;
+-
+-		// Gets all values
+-		if ( key === undefined ) {
+-			if ( this.length ) {
+-				data = jQuery.data( elem );
+-
+-				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+-					attrs = elem.attributes;
+-					for ( ; i < attrs.length; i++ ) {
+-						name = attrs[i].name;
+-
+-						if ( !name.indexOf( "data-" ) ) {
+-							name = jQuery.camelCase( name.slice(5) );
+-
+-							dataAttr( elem, name, data[ name ] );
+-						}
+-					}
+-					jQuery._data( elem, "parsedAttrs", true );
+-				}
+-			}
+-
+-			return data;
+-		}
+-
+-		// Sets multiple values
+-		if ( typeof key === "object" ) {
+-			return this.each(function() {
+-				jQuery.data( this, key );
+-			});
+-		}
+-
+-		return jQuery.access( this, function( value ) {
+-
+-			if ( value === undefined ) {
+-				// Try to fetch any internally stored data first
+-				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+-			}
+-
+-			this.each(function() {
+-				jQuery.data( this, key, value );
+-			});
+-		}, null, value, arguments.length > 1, null, true );
+-	},
+-
+-	removeData: function( key ) {
+-		return this.each(function() {
+-			jQuery.removeData( this, key );
+-		});
+-	}
+-});
+-
+-function dataAttr( elem, key, data ) {
+-	// If nothing was found internally, try to fetch any
+-	// data from the HTML5 data-* attribute
+-	if ( data === undefined && elem.nodeType === 1 ) {
+-
+-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+-
+-		data = elem.getAttribute( name );
+-
+-		if ( typeof data === "string" ) {
+-			try {
+-				data = data === "true" ? true :
+-					data === "false" ? false :
+-					data === "null" ? null :
+-					// Only convert to a number if it doesn't change the string
+-					+data + "" === data ? +data :
+-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+-						data;
+-			} catch( e ) {}
+-
+-			// Make sure we set the data so it isn't changed later
+-			jQuery.data( elem, key, data );
+-
+-		} else {
+-			data = undefined;
+-		}
+-	}
+-
+-	return data;
+-}
+-
+-// checks a cache object for emptiness
+-function isEmptyDataObject( obj ) {
+-	var name;
+-	for ( name in obj ) {
+-
+-		// if the public data object is empty, the private is still empty
+-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+-			continue;
+-		}
+-		if ( name !== "toJSON" ) {
+-			return false;
+-		}
+-	}
+-
+-	return true;
+-}
+-jQuery.extend({
+-	queue: function( elem, type, data ) {
+-		var queue;
+-
+-		if ( elem ) {
+-			type = ( type || "fx" ) + "queue";
+-			queue = jQuery._data( elem, type );
+-
+-			// Speed up dequeue by getting out quickly if this is just a lookup
+-			if ( data ) {
+-				if ( !queue || jQuery.isArray(data) ) {
+-					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+-				} else {
+-					queue.push( data );
+-				}
+-			}
+-			return queue || [];
+-		}
+-	},
+-
+-	dequeue: function( elem, type ) {
+-		type = type || "fx";
+-
+-		var queue = jQuery.queue( elem, type ),
+-			startLength = queue.length,
+-			fn = queue.shift(),
+-			hooks = jQuery._queueHooks( elem, type ),
+-			next = function() {
+-				jQuery.dequeue( elem, type );
+-			};
+-
+-		// If the fx queue is dequeued, always remove the progress sentinel
+-		if ( fn === "inprogress" ) {
+-			fn = queue.shift();
+-			startLength--;
+-		}
+-
+-		hooks.cur = fn;
+-		if ( fn ) {
+-
+-			// Add a progress sentinel to prevent the fx queue from being
+-			// automatically dequeued
+-			if ( type === "fx" ) {
+-				queue.unshift( "inprogress" );
+-			}
+-
+-			// clear up the last queue stop function
+-			delete hooks.stop;
+-			fn.call( elem, next, hooks );
+-		}
+-
+-		if ( !startLength && hooks ) {
+-			hooks.empty.fire();
+-		}
+-	},
+-
+-	// not intended for public consumption - generates a queueHooks object, or returns the current one
+-	_queueHooks: function( elem, type ) {
+-		var key = type + "queueHooks";
+-		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+-			empty: jQuery.Callbacks("once memory").add(function() {
+-				jQuery._removeData( elem, type + "queue" );
+-				jQuery._removeData( elem, key );
+-			})
+-		});
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	queue: function( type, data ) {
+-		var setter = 2;
+-
+-		if ( typeof type !== "string" ) {
+-			data = type;
+-			type = "fx";
+-			setter--;
+-		}
+-
+-		if ( arguments.length < setter ) {
+-			return jQuery.queue( this[0], type );
+-		}
+-
+-		return data === undefined ?
+-			this :
+-			this.each(function() {
+-				var queue = jQuery.queue( this, type, data );
+-
+-				// ensure a hooks for this queue
+-				jQuery._queueHooks( this, type );
+-
+-				if ( type === "fx" && queue[0] !== "inprogress" ) {
+-					jQuery.dequeue( this, type );
+-				}
+-			});
+-	},
+-	dequeue: function( type ) {
+-		return this.each(function() {
+-			jQuery.dequeue( this, type );
+-		});
+-	},
+-	// Based off of the plugin by Clint Helfers, with permission.
+-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+-	delay: function( time, type ) {
+-		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+-		type = type || "fx";
+-
+-		return this.queue( type, function( next, hooks ) {
+-			var timeout = setTimeout( next, time );
+-			hooks.stop = function() {
+-				clearTimeout( timeout );
+-			};
+-		});
+-	},
+-	clearQueue: function( type ) {
+-		return this.queue( type || "fx", [] );
+-	},
+-	// Get a promise resolved when queues of a certain type
+-	// are emptied (fx is the type by default)
+-	promise: function( type, obj ) {
+-		var tmp,
+-			count = 1,
+-			defer = jQuery.Deferred(),
+-			elements = this,
+-			i = this.length,
+-			resolve = function() {
+-				if ( !( --count ) ) {
+-					defer.resolveWith( elements, [ elements ] );
+-				}
+-			};
+-
+-		if ( typeof type !== "string" ) {
+-			obj = type;
+-			type = undefined;
+-		}
+-		type = type || "fx";
+-
+-		while( i-- ) {
+-			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+-			if ( tmp && tmp.empty ) {
+-				count++;
+-				tmp.empty.add( resolve );
+-			}
+-		}
+-		resolve();
+-		return defer.promise( obj );
+-	}
+-});
+-var nodeHook, boolHook,
+-	rclass = /[\t\r\n]/g,
+-	rreturn = /\r/g,
+-	rfocusable = /^(?:input|select|textarea|button|object)$/i,
+-	rclickable = /^(?:a|area)$/i,
+-	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+-	ruseDefault = /^(?:checked|selected)$/i,
+-	getSetAttribute = jQuery.support.getSetAttribute,
+-	getSetInput = jQuery.support.input;
+-
+-jQuery.fn.extend({
+-	attr: function( name, value ) {
+-		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+-	},
+-
+-	removeAttr: function( name ) {
+-		return this.each(function() {
+-			jQuery.removeAttr( this, name );
+-		});
+-	},
+-
+-	prop: function( name, value ) {
+-		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+-	},
+-
+-	removeProp: function( name ) {
+-		name = jQuery.propFix[ name ] || name;
+-		return this.each(function() {
+-			// try/catch handles cases where IE balks (such as removing a property on window)
+-			try {
+-				this[ name ] = undefined;
+-				delete this[ name ];
+-			} catch( e ) {}
+-		});
+-	},
+-
+-	addClass: function( value ) {
+-		var classes, elem, cur, clazz, j,
+-			i = 0,
+-			len = this.length,
+-			proceed = typeof value === "string" && value;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).addClass( value.call( this, j, this.className ) );
+-			});
+-		}
+-
+-		if ( proceed ) {
+-			// The disjunction here is for better compressibility (see removeClass)
+-			classes = ( value || "" ).match( core_rnotwhite ) || [];
+-
+-			for ( ; i < len; i++ ) {
+-				elem = this[ i ];
+-				cur = elem.nodeType === 1 && ( elem.className ?
+-					( " " + elem.className + " " ).replace( rclass, " " ) :
+-					" "
+-				);
+-
+-				if ( cur ) {
+-					j = 0;
+-					while ( (clazz = classes[j++]) ) {
+-						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+-							cur += clazz + " ";
+-						}
+-					}
+-					elem.className = jQuery.trim( cur );
+-
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	removeClass: function( value ) {
+-		var classes, elem, cur, clazz, j,
+-			i = 0,
+-			len = this.length,
+-			proceed = arguments.length === 0 || typeof value === "string" && value;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+-			});
+-		}
+-		if ( proceed ) {
+-			classes = ( value || "" ).match( core_rnotwhite ) || [];
+-
+-			for ( ; i < len; i++ ) {
+-				elem = this[ i ];
+-				// This expression is here for better compressibility (see addClass)
+-				cur = elem.nodeType === 1 && ( elem.className ?
+-					( " " + elem.className + " " ).replace( rclass, " " ) :
+-					""
+-				);
+-
+-				if ( cur ) {
+-					j = 0;
+-					while ( (clazz = classes[j++]) ) {
+-						// Remove *all* instances
+-						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+-							cur = cur.replace( " " + clazz + " ", " " );
+-						}
+-					}
+-					elem.className = value ? jQuery.trim( cur ) : "";
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	toggleClass: function( value, stateVal ) {
+-		var type = typeof value,
+-			isBool = typeof stateVal === "boolean";
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( i ) {
+-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			if ( type === "string" ) {
+-				// toggle individual class names
+-				var className,
+-					i = 0,
+-					self = jQuery( this ),
+-					state = stateVal,
+-					classNames = value.match( core_rnotwhite ) || [];
+-
+-				while ( (className = classNames[ i++ ]) ) {
+-					// check each className given, space separated list
+-					state = isBool ? state : !self.hasClass( className );
+-					self[ state ? "addClass" : "removeClass" ]( className );
+-				}
+-
+-			// Toggle whole class name
+-			} else if ( type === core_strundefined || type === "boolean" ) {
+-				if ( this.className ) {
+-					// store className if set
+-					jQuery._data( this, "__className__", this.className );
+-				}
+-
+-				// If the element has a class name or if we're passed "false",
+-				// then remove the whole classname (if there was one, the above saved it).
+-				// Otherwise bring back whatever was previously saved (if anything),
+-				// falling back to the empty string if nothing was stored.
+-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+-			}
+-		});
+-	},
+-
+-	hasClass: function( selector ) {
+-		var className = " " + selector + " ",
+-			i = 0,
+-			l = this.length;
+-		for ( ; i < l; i++ ) {
+-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+-				return true;
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	val: function( value ) {
+-		var ret, hooks, isFunction,
+-			elem = this[0];
+-
+-		if ( !arguments.length ) {
+-			if ( elem ) {
+-				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+-
+-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+-					return ret;
+-				}
+-
+-				ret = elem.value;
+-
+-				return typeof ret === "string" ?
+-					// handle most common string cases
+-					ret.replace(rreturn, "") :
+-					// handle cases where value is null/undef or number
+-					ret == null ? "" : ret;
+-			}
+-
+-			return;
+-		}
+-
+-		isFunction = jQuery.isFunction( value );
+-
+-		return this.each(function( i ) {
+-			var val,
+-				self = jQuery(this);
+-
+-			if ( this.nodeType !== 1 ) {
+-				return;
+-			}
+-
+-			if ( isFunction ) {
+-				val = value.call( this, i, self.val() );
+-			} else {
+-				val = value;
+-			}
+-
+-			// Treat null/undefined as ""; convert numbers to string
+-			if ( val == null ) {
+-				val = "";
+-			} else if ( typeof val === "number" ) {
+-				val += "";
+-			} else if ( jQuery.isArray( val ) ) {
+-				val = jQuery.map(val, function ( value ) {
+-					return value == null ? "" : value + "";
+-				});
+-			}
+-
+-			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+-
+-			// If set returns undefined, fall back to normal setting
+-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+-				this.value = val;
+-			}
+-		});
+-	}
+-});
+-
+-jQuery.extend({
+-	valHooks: {
+-		option: {
+-			get: function( elem ) {
+-				// attributes.value is undefined in Blackberry 4.7 but
+-				// uses .value. See #6932
+-				var val = elem.attributes.value;
+-				return !val || val.specified ? elem.value : elem.text;
+-			}
+-		},
+-		select: {
+-			get: function( elem ) {
+-				var value, option,
+-					options = elem.options,
+-					index = elem.selectedIndex,
+-					one = elem.type === "select-one" || index < 0,
+-					values = one ? null : [],
+-					max = one ? index + 1 : options.length,
+-					i = index < 0 ?
+-						max :
+-						one ? index : 0;
+-
+-				// Loop through all the selected options
+-				for ( ; i < max; i++ ) {
+-					option = options[ i ];
+-
+-					// oldIE doesn't update selected after form reset (#2551)
+-					if ( ( option.selected || i === index ) &&
+-							// Don't return options that are disabled or in a disabled optgroup
+-							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+-							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+-
+-						// Get the specific value for the option
+-						value = jQuery( option ).val();
+-
+-						// We don't need an array for one selects
+-						if ( one ) {
+-							return value;
+-						}
+-
+-						// Multi-Selects return an array
+-						values.push( value );
+-					}
+-				}
+-
+-				return values;
+-			},
+-
+-			set: function( elem, value ) {
+-				var values = jQuery.makeArray( value );
+-
+-				jQuery(elem).find("option").each(function() {
+-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+-				});
+-
+-				if ( !values.length ) {
+-					elem.selectedIndex = -1;
+-				}
+-				return values;
+-			}
+-		}
+-	},
+-
+-	attr: function( elem, name, value ) {
+-		var hooks, notxml, ret,
+-			nType = elem.nodeType;
+-
+-		// don't get/set attributes on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return;
+-		}
+-
+-		// Fallback to prop when attributes are not supported
+-		if ( typeof elem.getAttribute === core_strundefined ) {
+-			return jQuery.prop( elem, name, value );
+-		}
+-
+-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		// All attributes are lowercase
+-		// Grab necessary hook if one is defined
+-		if ( notxml ) {
+-			name = name.toLowerCase();
+-			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+-		}
+-
+-		if ( value !== undefined ) {
+-
+-			if ( value === null ) {
+-				jQuery.removeAttr( elem, name );
+-
+-			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				elem.setAttribute( name, value + "" );
+-				return value;
+-			}
+-
+-		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+-			return ret;
+-
+-		} else {
+-
+-			// In IE9+, Flash objects don't have .getAttribute (#12945)
+-			// Support: IE9+
+-			if ( typeof elem.getAttribute !== core_strundefined ) {
+-				ret =  elem.getAttribute( name );
+-			}
+-
+-			// Non-existent attributes return null, we normalize to undefined
+-			return ret == null ?
+-				undefined :
+-				ret;
+-		}
+-	},
+-
+-	removeAttr: function( elem, value ) {
+-		var name, propName,
+-			i = 0,
+-			attrNames = value && value.match( core_rnotwhite );
+-
+-		if ( attrNames && elem.nodeType === 1 ) {
+-			while ( (name = attrNames[i++]) ) {
+-				propName = jQuery.propFix[ name ] || name;
+-
+-				// Boolean attributes get special treatment (#10870)
+-				if ( rboolean.test( name ) ) {
+-					// Set corresponding property to false for boolean attributes
+-					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+-					if ( !getSetAttribute && ruseDefault.test( name ) ) {
+-						elem[ jQuery.camelCase( "default-" + name ) ] =
+-							elem[ propName ] = false;
+-					} else {
+-						elem[ propName ] = false;
+-					}
+-
+-				// See #9699 for explanation of this approach (setting first, then removal)
+-				} else {
+-					jQuery.attr( elem, name, "" );
+-				}
+-
+-				elem.removeAttribute( getSetAttribute ? name : propName );
+-			}
+-		}
+-	},
+-
+-	attrHooks: {
+-		type: {
+-			set: function( elem, value ) {
+-				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+-					// Setting the type on a radio button after the value resets the value in IE6-9
+-					// Reset value to default in case type is set after value during creation
+-					var val = elem.value;
+-					elem.setAttribute( "type", value );
+-					if ( val ) {
+-						elem.value = val;
+-					}
+-					return value;
+-				}
+-			}
+-		}
+-	},
+-
+-	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( elem, name, value ) {
+-		var ret, hooks, notxml,
+-			nType = elem.nodeType;
+-
+-		// don't get/set properties on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return;
+-		}
+-
+-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		if ( notxml ) {
+-			// Fix name and attach hooks
+-			name = jQuery.propFix[ name ] || name;
+-			hooks = jQuery.propHooks[ name ];
+-		}
+-
+-		if ( value !== undefined ) {
+-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				return ( elem[ name ] = value );
+-			}
+-
+-		} else {
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+-				return ret;
+-
+-			} else {
+-				return elem[ name ];
+-			}
+-		}
+-	},
+-
+-	propHooks: {
+-		tabIndex: {
+-			get: function( elem ) {
+-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+-				var attributeNode = elem.getAttributeNode("tabindex");
+-
+-				return attributeNode && attributeNode.specified ?
+-					parseInt( attributeNode.value, 10 ) :
+-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+-						0 :
+-						undefined;
+-			}
+-		}
+-	}
+-});
+-
+-// Hook for boolean attributes
+-boolHook = {
+-	get: function( elem, name ) {
+-		var
+-			// Use .prop to determine if this attribute is understood as boolean
+-			prop = jQuery.prop( elem, name ),
+-
+-			// Fetch it accordingly
+-			attr = typeof prop === "boolean" && elem.getAttribute( name ),
+-			detail = typeof prop === "boolean" ?
+-
+-				getSetInput && getSetAttribute ?
+-					attr != null :
+-					// oldIE fabricates an empty string for missing boolean attributes
+-					// and conflates checked/selected into attroperties
+-					ruseDefault.test( name ) ?
+-						elem[ jQuery.camelCase( "default-" + name ) ] :
+-						!!attr :
+-
+-				// fetch an attribute node for properties not recognized as boolean
+-				elem.getAttributeNode( name );
+-
+-		return detail && detail.value !== false ?
+-			name.toLowerCase() :
+-			undefined;
+-	},
+-	set: function( elem, value, name ) {
+-		if ( value === false ) {
+-			// Remove boolean attributes when set to false
+-			jQuery.removeAttr( elem, name );
+-		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+-			// IE<8 needs the *property* name
+-			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+-
+-		// Use defaultChecked and defaultSelected for oldIE
+-		} else {
+-			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+-		}
+-
+-		return name;
+-	}
+-};
+-
+-// fix oldIE value attroperty
+-if ( !getSetInput || !getSetAttribute ) {
+-	jQuery.attrHooks.value = {
+-		get: function( elem, name ) {
+-			var ret = elem.getAttributeNode( name );
+-			return jQuery.nodeName( elem, "input" ) ?
+-
+-				// Ignore the value *property* by using defaultValue
+-				elem.defaultValue :
+-
+-				ret && ret.specified ? ret.value : undefined;
+-		},
+-		set: function( elem, value, name ) {
+-			if ( jQuery.nodeName( elem, "input" ) ) {
+-				// Does not return so that setAttribute is also used
+-				elem.defaultValue = value;
+-			} else {
+-				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+-				return nodeHook && nodeHook.set( elem, value, name );
+-			}
+-		}
+-	};
+-}
+-
+-// IE6/7 do not support getting/setting some attributes with get/setAttribute
+-if ( !getSetAttribute ) {
+-
+-	// Use this for any attribute in IE6/7
+-	// This fixes almost every IE6/7 issue
+-	nodeHook = jQuery.valHooks.button = {
+-		get: function( elem, name ) {
+-			var ret = elem.getAttributeNode( name );
+-			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+-				ret.value :
+-				undefined;
+-		},
+-		set: function( elem, value, name ) {
+-			// Set the existing or create a new attribute node
+-			var ret = elem.getAttributeNode( name );
+-			if ( !ret ) {
+-				elem.setAttributeNode(
+-					(ret = elem.ownerDocument.createAttribute( name ))
+-				);
+-			}
+-
+-			ret.value = value += "";
+-
+-			// Break association with cloned elements by also using setAttribute (#9646)
+-			return name === "value" || value === elem.getAttribute( name ) ?
+-				value :
+-				undefined;
+-		}
+-	};
+-
+-	// Set contenteditable to false on removals(#10429)
+-	// Setting to empty string throws an error as an invalid value
+-	jQuery.attrHooks.contenteditable = {
+-		get: nodeHook.get,
+-		set: function( elem, value, name ) {
+-			nodeHook.set( elem, value === "" ? false : value, name );
+-		}
+-	};
+-
+-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+-	// This is for removals
+-	jQuery.each([ "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			set: function( elem, value ) {
+-				if ( value === "" ) {
+-					elem.setAttribute( name, "auto" );
+-					return value;
+-				}
+-			}
+-		});
+-	});
+-}
+-
+-
+-// Some attributes require a special call on IE
+-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+-if ( !jQuery.support.hrefNormalized ) {
+-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			get: function( elem ) {
+-				var ret = elem.getAttribute( name, 2 );
+-				return ret == null ? undefined : ret;
+-			}
+-		});
+-	});
+-
+-	// href/src property should get the full normalized URL (#10299/#12915)
+-	jQuery.each([ "href", "src" ], function( i, name ) {
+-		jQuery.propHooks[ name ] = {
+-			get: function( elem ) {
+-				return elem.getAttribute( name, 4 );
+-			}
+-		};
+-	});
+-}
+-
+-if ( !jQuery.support.style ) {
+-	jQuery.attrHooks.style = {
+-		get: function( elem ) {
+-			// Return undefined in the case of empty string
+-			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+-			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+-			return elem.style.cssText || undefined;
+-		},
+-		set: function( elem, value ) {
+-			return ( elem.style.cssText = value + "" );
+-		}
+-	};
+-}
+-
+-// Safari mis-reports the default selected property of an option
+-// Accessing the parent's selectedIndex property fixes it
+-if ( !jQuery.support.optSelected ) {
+-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+-		get: function( elem ) {
+-			var parent = elem.parentNode;
+-
+-			if ( parent ) {
+-				parent.selectedIndex;
+-
+-				// Make sure that it also works with optgroups, see #5701
+-				if ( parent.parentNode ) {
+-					parent.parentNode.selectedIndex;
+-				}
+-			}
+-			return null;
+-		}
+-	});
+-}
+-
+-// IE6/7 call enctype encoding
+-if ( !jQuery.support.enctype ) {
+-	jQuery.propFix.enctype = "encoding";
+-}
+-
+-// Radios and checkboxes getter/setter
+-if ( !jQuery.support.checkOn ) {
+-	jQuery.each([ "radio", "checkbox" ], function() {
+-		jQuery.valHooks[ this ] = {
+-			get: function( elem ) {
+-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+-				return elem.getAttribute("value") === null ? "on" : elem.value;
+-			}
+-		};
+-	});
+-}
+-jQuery.each([ "radio", "checkbox" ], function() {
+-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+-		set: function( elem, value ) {
+-			if ( jQuery.isArray( value ) ) {
+-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+-			}
+-		}
+-	});
+-});
+-var rformElems = /^(?:input|select|textarea)$/i,
+-	rkeyEvent = /^key/,
+-	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+-	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+-
+-function returnTrue() {
+-	return true;
+-}
+-
+-function returnFalse() {
+-	return false;
+-}
+-
+-/*
+- * Helper functions for managing events -- not part of the public interface.
+- * Props to Dean Edwards' addEvent library for many of the ideas.
+- */
+-jQuery.event = {
+-
+-	global: {},
+-
+-	add: function( elem, types, handler, data, selector ) {
+-		var tmp, events, t, handleObjIn,
+-			special, eventHandle, handleObj,
+-			handlers, type, namespaces, origType,
+-			elemData = jQuery._data( elem );
+-
+-		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+-		if ( !elemData ) {
+-			return;
+-		}
+-
+-		// Caller can pass in an object of custom data in lieu of the handler
+-		if ( handler.handler ) {
+-			handleObjIn = handler;
+-			handler = handleObjIn.handler;
+-			selector = handleObjIn.selector;
+-		}
+-
+-		// Make sure that the handler has a unique ID, used to find/remove it later
+-		if ( !handler.guid ) {
+-			handler.guid = jQuery.guid++;
+-		}
+-
+-		// Init the element's event structure and main handler, if this is the first
+-		if ( !(events = elemData.events) ) {
+-			events = elemData.events = {};
+-		}
+-		if ( !(eventHandle = elemData.handle) ) {
+-			eventHandle = elemData.handle = function( e ) {
+-				// Discard the second event of a jQuery.event.trigger() and
+-				// when an event is called after a page has unloaded
+-				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+-					undefined;
+-			};
+-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+-			eventHandle.elem = elem;
+-		}
+-
+-		// Handle multiple events separated by a space
+-		// jQuery(...).bind("mouseover mouseout", fn);
+-		types = ( types || "" ).match( core_rnotwhite ) || [""];
+-		t = types.length;
+-		while ( t-- ) {
+-			tmp = rtypenamespace.exec( types[t] ) || [];
+-			type = origType = tmp[1];
+-			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+-
+-			// If event changes its type, use the special event handlers for the changed type
+-			special = jQuery.event.special[ type ] || {};
+-
+-			// If selector defined, determine special event api type, otherwise given type
+-			type = ( selector ? special.delegateType : special.bindType ) || type;
+-
+-			// Update special based on newly reset type
+-			special = jQuery.event.special[ type ] || {};
+-
+-			// handleObj is passed to all event handlers
+-			handleObj = jQuery.extend({
+-				type: type,
+-				origType: origType,
+-				data: data,
+-				handler: handler,
+-				guid: handler.guid,
+-				selector: selector,
+-				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+-				namespace: namespaces.join(".")
+-			}, handleObjIn );
+-
+-			// Init the event handler queue if we're the first
+-			if ( !(handlers = events[ type ]) ) {
+-				handlers = events[ type ] = [];
+-				handlers.delegateCount = 0;
+-
+-				// Only use addEventListener/attachEvent if the special events handler returns false
+-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+-					// Bind the global event handler to the element
+-					if ( elem.addEventListener ) {
+-						elem.addEventListener( type, eventHandle, false );
+-
+-					} else if ( elem.attachEvent ) {
+-						elem.attachEvent( "on" + type, eventHandle );
+-					}
+-				}
+-			}
+-
+-			if ( special.add ) {
+-				special.add.call( elem, handleObj );
+-
+-				if ( !handleObj.handler.guid ) {
+-					handleObj.handler.guid = handler.guid;
+-				}
+-			}
+-
+-			// Add to the element's handler list, delegates in front
+-			if ( selector ) {
+-				handlers.splice( handlers.delegateCount++, 0, handleObj );
+-			} else {
+-				handlers.push( handleObj );
+-			}
+-
+-			// Keep track of which events have ever been used, for event optimization
+-			jQuery.event.global[ type ] = true;
+-		}
+-
+-		// Nullify elem to prevent memory leaks in IE
+-		elem = null;
+-	},
+-
+-	// Detach an event or set of events from an element
+-	remove: function( elem, types, handler, selector, mappedTypes ) {
+-		var j, handleObj, tmp,
+-			origCount, t, events,
+-			special, handlers, type,
+-			namespaces, origType,
+-			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+-
+-		if ( !elemData || !(events = elemData.events) ) {
+-			return;
+-		}
+-
+-		// Once for each type.namespace in types; type may be omitted
+-		types = ( types || "" ).match( core_rnotwhite ) || [""];
+-		t = types.length;
+-		while ( t-- ) {
+-			tmp = rtypenamespace.exec( types[t] ) || [];
+-			type = origType = tmp[1];
+-			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+-
+-			// Unbind all events (on this namespace, if provided) for the element
+-			if ( !type ) {
+-				for ( type in events ) {
+-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+-				}
+-				continue;
+-			}
+-
+-			special = jQuery.event.special[ type ] || {};
+-			type = ( selector ? special.delegateType : special.bindType ) || type;
+-			handlers = events[ type ] || [];
+-			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+-
+-			// Remove matching events
+-			origCount = j = handlers.length;
+-			while ( j-- ) {
+-				handleObj = handlers[ j ];
+-
+-				if ( ( mappedTypes || origType === handleObj.origType ) &&
+-					( !handler || handler.guid === handleObj.guid ) &&
+-					( !tmp || tmp.test( handleObj.namespace ) ) &&
+-					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+-					handlers.splice( j, 1 );
+-
+-					if ( handleObj.selector ) {
+-						handlers.delegateCount--;
+-					}
+-					if ( special.remove ) {
+-						special.remove.call( elem, handleObj );
+-					}
+-				}
+-			}
+-
+-			// Remove generic event handler if we removed something and no more handlers exist
+-			// (avoids potential for endless recursion during removal of special event handlers)
+-			if ( origCount && !handlers.length ) {
+-				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+-					jQuery.removeEvent( elem, type, elemData.handle );
+-				}
+-
+-				delete events[ type ];
+-			}
+-		}
+-
+-		// Remove the expando if it's no longer used
+-		if ( jQuery.isEmptyObject( events ) ) {
+-			delete elemData.handle;
+-
+-			// removeData also checks for emptiness and clears the expando if empty
+-			// so use it instead of delete
+-			jQuery._removeData( elem, "events" );
+-		}
+-	},
+-
+-	trigger: function( event, data, elem, onlyHandlers ) {
+-		var handle, ontype, cur,
+-			bubbleType, special, tmp, i,
+-			eventPath = [ elem || document ],
+-			type = core_hasOwn.call( event, "type" ) ? event.type : event,
+-			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+-
+-		cur = tmp = elem = elem || document;
+-
+-		// Don't do events on text and comment nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+-			return;
+-		}
+-
+-		if ( type.indexOf(".") >= 0 ) {
+-			// Namespaced trigger; create a regexp to match event type in handle()
+-			namespaces = type.split(".");
+-			type = namespaces.shift();
+-			namespaces.sort();
+-		}
+-		ontype = type.indexOf(":") < 0 && "on" + type;
+-
+-		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+-		event = event[ jQuery.expando ] ?
+-			event :
+-			new jQuery.Event( type, typeof event === "object" && event );
+-
+-		event.isTrigger = true;
+-		event.namespace = namespaces.join(".");
+-		event.namespace_re = event.namespace ?
+-			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+-			null;
+-
+-		// Clean up the event in case it is being reused
+-		event.result = undefined;
+-		if ( !event.target ) {
+-			event.target = elem;
+-		}
+-
+-		// Clone any incoming data and prepend the event, creating the handler arg list
+-		data = data == null ?
+-			[ event ] :
+-			jQuery.makeArray( data, [ event ] );
+-
+-		// Allow special events to draw outside the lines
+-		special = jQuery.event.special[ type ] || {};
+-		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+-			return;
+-		}
+-
+-		// Determine event propagation path in advance, per W3C events spec (#9951)
+-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+-
+-			bubbleType = special.delegateType || type;
+-			if ( !rfocusMorph.test( bubbleType + type ) ) {
+-				cur = cur.parentNode;
+-			}
+-			for ( ; cur; cur = cur.parentNode ) {
+-				eventPath.push( cur );
+-				tmp = cur;
+-			}
+-
+-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+-			if ( tmp === (elem.ownerDocument || document) ) {
+-				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+-			}
+-		}
+-
+-		// Fire handlers on the event path
+-		i = 0;
+-		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+-
+-			event.type = i > 1 ?
+-				bubbleType :
+-				special.bindType || type;
+-
+-			// jQuery handler
+-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+-			if ( handle ) {
+-				handle.apply( cur, data );
+-			}
+-
+-			// Native handler
+-			handle = ontype && cur[ ontype ];
+-			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+-				event.preventDefault();
+-			}
+-		}
+-		event.type = type;
+-
+-		// If nobody prevented the default action, do it now
+-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+-
+-			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+-
+-				// Call a native DOM method on the target with the same name name as the event.
+-				// Can't use an .isFunction() check here because IE6/7 fails that test.
+-				// Don't do default actions on window, that's where global variables be (#6170)
+-				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+-
+-					// Don't re-trigger an onFOO event when we call its FOO() method
+-					tmp = elem[ ontype ];
+-
+-					if ( tmp ) {
+-						elem[ ontype ] = null;
+-					}
+-
+-					// Prevent re-triggering of the same event, since we already bubbled it above
+-					jQuery.event.triggered = type;
+-					try {
+-						elem[ type ]();
+-					} catch ( e ) {
+-						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+-						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+-					}
+-					jQuery.event.triggered = undefined;
+-
+-					if ( tmp ) {
+-						elem[ ontype ] = tmp;
+-					}
+-				}
+-			}
+-		}
+-
+-		return event.result;
+-	},
+-
+-	dispatch: function( event ) {
+-
+-		// Make a writable jQuery.Event from the native event object
+-		event = jQuery.event.fix( event );
+-
+-		var i, ret, handleObj, matched, j,
+-			handlerQueue = [],
+-			args = core_slice.call( arguments ),
+-			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+-			special = jQuery.event.special[ event.type ] || {};
+-
+-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+-		args[0] = event;
+-		event.delegateTarget = this;
+-
+-		// Call the preDispatch hook for the mapped type, and let it bail if desired
+-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+-			return;
+-		}
+-
+-		// Determine handlers
+-		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+-
+-		// Run delegates first; they may want to stop propagation beneath us
+-		i = 0;
+-		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+-			event.currentTarget = matched.elem;
+-
+-			j = 0;
+-			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+-
+-				// Triggered event must either 1) have no namespace, or
+-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+-				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+-
+-					event.handleObj = handleObj;
+-					event.data = handleObj.data;
+-
+-					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+-							.apply( matched.elem, args );
+-
+-					if ( ret !== undefined ) {
+-						if ( (event.result = ret) === false ) {
+-							event.preventDefault();
+-							event.stopPropagation();
+-						}
+-					}
+-				}
+-			}
+-		}
+-
+-		// Call the postDispatch hook for the mapped type
+-		if ( special.postDispatch ) {
+-			special.postDispatch.call( this, event );
+-		}
+-
+-		return event.result;
+-	},
+-
+-	handlers: function( event, handlers ) {
+-		var sel, handleObj, matches, i,
+-			handlerQueue = [],
+-			delegateCount = handlers.delegateCount,
+-			cur = event.target;
+-
+-		// Find delegate handlers
+-		// Black-hole SVG <use> instance trees (#13180)
+-		// Avoid non-left-click bubbling in Firefox (#3861)
+-		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+-
+-			for ( ; cur != this; cur = cur.parentNode || this ) {
+-
+-				// Don't check non-elements (#13208)
+-				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+-				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+-					matches = [];
+-					for ( i = 0; i < delegateCount; i++ ) {
+-						handleObj = handlers[ i ];
+-
+-						// Don't conflict with Object.prototype properties (#13203)
+-						sel = handleObj.selector + " ";
+-
+-						if ( matches[ sel ] === undefined ) {
+-							matches[ sel ] = handleObj.needsContext ?
+-								jQuery( sel, this ).index( cur ) >= 0 :
+-								jQuery.find( sel, this, null, [ cur ] ).length;
+-						}
+-						if ( matches[ sel ] ) {
+-							matches.push( handleObj );
+-						}
+-					}
+-					if ( matches.length ) {
+-						handlerQueue.push({ elem: cur, handlers: matches });
+-					}
+-				}
+-			}
+-		}
+-
+-		// Add the remaining (directly-bound) handlers
+-		if ( delegateCount < handlers.length ) {
+-			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+-		}
+-
+-		return handlerQueue;
+-	},
+-
+-	fix: function( event ) {
+-		if ( event[ jQuery.expando ] ) {
+-			return event;
+-		}
+-
+-		// Create a writable copy of the event object and normalize some properties
+-		var i, prop, copy,
+-			type = event.type,
+-			originalEvent = event,
+-			fixHook = this.fixHooks[ type ];
+-
+-		if ( !fixHook ) {
+-			this.fixHooks[ type ] = fixHook =
+-				rmouseEvent.test( type ) ? this.mouseHooks :
+-				rkeyEvent.test( type ) ? this.keyHooks :
+-				{};
+-		}
+-		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+-
+-		event = new jQuery.Event( originalEvent );
+-
+-		i = copy.length;
+-		while ( i-- ) {
+-			prop = copy[ i ];
+-			event[ prop ] = originalEvent[ prop ];
+-		}
+-
+-		// Support: IE<9
+-		// Fix target property (#1925)
+-		if ( !event.target ) {
+-			event.target = originalEvent.srcElement || document;
+-		}
+-
+-		// Support: Chrome 23+, Safari?
+-		// Target should not be a text node (#504, #13143)
+-		if ( event.target.nodeType === 3 ) {
+-			event.target = event.target.parentNode;
+-		}
+-
+-		// Support: IE<9
+-		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+-		event.metaKey = !!event.metaKey;
+-
+-		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+-	},
+-
+-	// Includes some event props shared by KeyEvent and MouseEvent
+-	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+-
+-	fixHooks: {},
+-
+-	keyHooks: {
+-		props: "char charCode key keyCode".split(" "),
+-		filter: function( event, original ) {
+-
+-			// Add which for key events
+-			if ( event.which == null ) {
+-				event.which = original.charCode != null ? original.charCode : original.keyCode;
+-			}
+-
+-			return event;
+-		}
+-	},
+-
+-	mouseHooks: {
+-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+-		filter: function( event, original ) {
+-			var body, eventDoc, doc,
+-				button = original.button,
+-				fromElement = original.fromElement;
+-
+-			// Calculate pageX/Y if missing and clientX/Y available
+-			if ( event.pageX == null && original.clientX != null ) {
+-				eventDoc = event.target.ownerDocument || document;
+-				doc = eventDoc.documentElement;
+-				body = eventDoc.body;
+-
+-				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+-			}
+-
+-			// Add relatedTarget, if necessary
+-			if ( !event.relatedTarget && fromElement ) {
+-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+-			}
+-
+-			// Add which for click: 1 === left; 2 === middle; 3 === right
+-			// Note: button is not normalized, so don't use it
+-			if ( !event.which && button !== undefined ) {
+-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+-			}
+-
+-			return event;
+-		}
+-	},
+-
+-	special: {
+-		load: {
+-			// Prevent triggered image.load events from bubbling to window.load
+-			noBubble: true
+-		},
+-		click: {
+-			// For checkbox, fire native event so checked state will be right
+-			trigger: function() {
+-				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+-					this.click();
+-					return false;
+-				}
+-			}
+-		},
+-		focus: {
+-			// Fire native event if possible so blur/focus sequence is correct
+-			trigger: function() {
+-				if ( this !== document.activeElement && this.focus ) {
+-					try {
+-						this.focus();
+-						return false;
+-					} catch ( e ) {
+-						// Support: IE<9
+-						// If we error on focus to hidden element (#1486, #12518),
+-						// let .trigger() run the handlers
+-					}
+-				}
+-			},
+-			delegateType: "focusin"
+-		},
+-		blur: {
+-			trigger: function() {
+-				if ( this === document.activeElement && this.blur ) {
+-					this.blur();
+-					return false;
+-				}
+-			},
+-			delegateType: "focusout"
+-		},
+-
+-		beforeunload: {
+-			postDispatch: function( event ) {
+-
+-				// Even when returnValue equals to undefined Firefox will still show alert
+-				if ( event.result !== undefined ) {
+-					event.originalEvent.returnValue = event.result;
+-				}
+-			}
+-		}
+-	},
+-
+-	simulate: function( type, elem, event, bubble ) {
+-		// Piggyback on a donor event to simulate a different one.
+-		// Fake originalEvent to avoid donor's stopPropagation, but if the
+-		// simulated event prevents default then we do the same on the donor.
+-		var e = jQuery.extend(
+-			new jQuery.Event(),
+-			event,
+-			{ type: type,
+-				isSimulated: true,
+-				originalEvent: {}
+-			}
+-		);
+-		if ( bubble ) {
+-			jQuery.event.trigger( e, null, elem );
+-		} else {
+-			jQuery.event.dispatch.call( elem, e );
+-		}
+-		if ( e.isDefaultPrevented() ) {
+-			event.preventDefault();
+-		}
+-	}
+-};
+-
+-jQuery.removeEvent = document.removeEventListener ?
+-	function( elem, type, handle ) {
+-		if ( elem.removeEventListener ) {
+-			elem.removeEventListener( type, handle, false );
+-		}
+-	} :
+-	function( elem, type, handle ) {
+-		var name = "on" + type;
+-
+-		if ( elem.detachEvent ) {
+-
+-			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+-			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+-			if ( typeof elem[ name ] === core_strundefined ) {
+-				elem[ name ] = null;
+-			}
+-
+-			elem.detachEvent( name, handle );
+-		}
+-	};
+-
+-jQuery.Event = function( src, props ) {
+-	// Allow instantiation without the 'new' keyword
+-	if ( !(this instanceof jQuery.Event) ) {
+-		return new jQuery.Event( src, props );
+-	}
+-
+-	// Event object
+-	if ( src && src.type ) {
+-		this.originalEvent = src;
+-		this.type = src.type;
+-
+-		// Events bubbling up the document may have been marked as prevented
+-		// by a handler lower down the tree; reflect the correct value.
+-		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+-			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+-
+-	// Event type
+-	} else {
+-		this.type = src;
+-	}
+-
+-	// Put explicitly provided properties onto the event object
+-	if ( props ) {
+-		jQuery.extend( this, props );
+-	}
+-
+-	// Create a timestamp if incoming event doesn't have one
+-	this.timeStamp = src && src.timeStamp || jQuery.now();
+-
+-	// Mark it as fixed
+-	this[ jQuery.expando ] = true;
+-};
+-
+-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+-jQuery.Event.prototype = {
+-	isDefaultPrevented: returnFalse,
+-	isPropagationStopped: returnFalse,
+-	isImmediatePropagationStopped: returnFalse,
+-
+-	preventDefault: function() {
+-		var e = this.originalEvent;
+-
+-		this.isDefaultPrevented = returnTrue;
+-		if ( !e ) {
+-			return;
+-		}
+-
+-		// If preventDefault exists, run it on the original event
+-		if ( e.preventDefault ) {
+-			e.preventDefault();
+-
+-		// Support: IE
+-		// Otherwise set the returnValue property of the original event to false
+-		} else {
+-			e.returnValue = false;
+-		}
+-	},
+-	stopPropagation: function() {
+-		var e = this.originalEvent;
+-
+-		this.isPropagationStopped = returnTrue;
+-		if ( !e ) {
+-			return;
+-		}
+-		// If stopPropagation exists, run it on the original event
+-		if ( e.stopPropagation ) {
+-			e.stopPropagation();
+-		}
+-
+-		// Support: IE
+-		// Set the cancelBubble property of the original event to true
+-		e.cancelBubble = true;
+-	},
+-	stopImmediatePropagation: function() {
+-		this.isImmediatePropagationStopped = returnTrue;
+-		this.stopPropagation();
+-	}
+-};
+-
+-// Create mouseenter/leave events using mouseover/out and event-time checks
+-jQuery.each({
+-	mouseenter: "mouseover",
+-	mouseleave: "mouseout"
+-}, function( orig, fix ) {
+-	jQuery.event.special[ orig ] = {
+-		delegateType: fix,
+-		bindType: fix,
+-
+-		handle: function( event ) {
+-			var ret,
+-				target = this,
+-				related = event.relatedTarget,
+-				handleObj = event.handleObj;
+-
+-			// For mousenter/leave call the handler if related is outside the target.
+-			// NB: No relatedTarget if the mouse left/entered the browser window
+-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+-				event.type = handleObj.origType;
+-				ret = handleObj.handler.apply( this, arguments );
+-				event.type = fix;
+-			}
+-			return ret;
+-		}
+-	};
+-});
+-
+-// IE submit delegation
+-if ( !jQuery.support.submitBubbles ) {
+-
+-	jQuery.event.special.submit = {
+-		setup: function() {
+-			// Only need this for delegated form submit events
+-			if ( jQuery.nodeName( this, "form" ) ) {
+-				return false;
+-			}
+-
+-			// Lazy-add a submit handler when a descendant form may potentially be submitted
+-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+-				// Node name check avoids a VML-related crash in IE (#9807)
+-				var elem = e.target,
+-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+-				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+-					jQuery.event.add( form, "submit._submit", function( event ) {
+-						event._submit_bubble = true;
+-					});
+-					jQuery._data( form, "submitBubbles", true );
+-				}
+-			});
+-			// return undefined since we don't need an event listener
+-		},
+-
+-		postDispatch: function( event ) {
+-			// If form was submitted by the user, bubble the event up the tree
+-			if ( event._submit_bubble ) {
+-				delete event._submit_bubble;
+-				if ( this.parentNode && !event.isTrigger ) {
+-					jQuery.event.simulate( "submit", this.parentNode, event, true );
+-				}
+-			}
+-		},
+-
+-		teardown: function() {
+-			// Only need this for delegated form submit events
+-			if ( jQuery.nodeName( this, "form" ) ) {
+-				return false;
+-			}
+-
+-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+-			jQuery.event.remove( this, "._submit" );
+-		}
+-	};
+-}
+-
+-// IE change delegation and checkbox/radio fix
+-if ( !jQuery.support.changeBubbles ) {
+-
+-	jQuery.event.special.change = {
+-
+-		setup: function() {
+-
+-			if ( rformElems.test( this.nodeName ) ) {
+-				// IE doesn't fire change on a check/radio until blur; trigger it on click
+-				// after a propertychange. Eat the blur-change in special.change.handle.
+-				// This still fires onchange a second time for check/radio after blur.
+-				if ( this.type === "checkbox" || this.type === "radio" ) {
+-					jQuery.event.add( this, "propertychange._change", function( event ) {
+-						if ( event.originalEvent.propertyName === "checked" ) {
+-							this._just_changed = true;
+-						}
+-					});
+-					jQuery.event.add( this, "click._change", function( event ) {
+-						if ( this._just_changed && !event.isTrigger ) {
+-							this._just_changed = false;
+-						}
+-						// Allow triggered, simulated change events (#11500)
+-						jQuery.event.simulate( "change", this, event, true );
+-					});
+-				}
+-				return false;
+-			}
+-			// Delegated event; lazy-add a change handler on descendant inputs
+-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+-				var elem = e.target;
+-
+-				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+-					jQuery.event.add( elem, "change._change", function( event ) {
+-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+-							jQuery.event.simulate( "change", this.parentNode, event, true );
+-						}
+-					});
+-					jQuery._data( elem, "changeBubbles", true );
+-				}
+-			});
+-		},
+-
+-		handle: function( event ) {
+-			var elem = event.target;
+-
+-			// Swallow native change events from checkbox/radio, we already triggered them above
+-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+-				return event.handleObj.handler.apply( this, arguments );
+-			}
+-		},
+-
+-		teardown: function() {
+-			jQuery.event.remove( this, "._change" );
+-
+-			return !rformElems.test( this.nodeName );
+-		}
+-	};
+-}
+-
+-// Create "bubbling" focus and blur events
+-if ( !jQuery.support.focusinBubbles ) {
+-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+-
+-		// Attach a single capturing handler while someone wants focusin/focusout
+-		var attaches = 0,
+-			handler = function( event ) {
+-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+-			};
+-
+-		jQuery.event.special[ fix ] = {
+-			setup: function() {
+-				if ( attaches++ === 0 ) {
+-					document.addEventListener( orig, handler, true );
+-				}
+-			},
+-			teardown: function() {
+-				if ( --attaches === 0 ) {
+-					document.removeEventListener( orig, handler, true );
+-				}
+-			}
+-		};
+-	});
+-}
+-
+-jQuery.fn.extend({
+-
+-	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+-		var type, origFn;
+-
+-		// Types can be a map of types/handlers
+-		if ( typeof types === "object" ) {
+-			// ( types-Object, selector, data )
+-			if ( typeof selector !== "string" ) {
+-				// ( types-Object, data )
+-				data = data || selector;
+-				selector = undefined;
+-			}
+-			for ( type in types ) {
+-				this.on( type, selector, data, types[ type ], one );
+-			}
+-			return this;
+-		}
+-
+-		if ( data == null && fn == null ) {
+-			// ( types, fn )
+-			fn = selector;
+-			data = selector = undefined;
+-		} else if ( fn == null ) {
+-			if ( typeof selector === "string" ) {
+-				// ( types, selector, fn )
+-				fn = data;
+-				data = undefined;
+-			} else {
+-				// ( types, data, fn )
+-				fn = data;
+-				data = selector;
+-				selector = undefined;
+-			}
+-		}
+-		if ( fn === false ) {
+-			fn = returnFalse;
+-		} else if ( !fn ) {
+-			return this;
+-		}
+-
+-		if ( one === 1 ) {
+-			origFn = fn;
+-			fn = function( event ) {
+-				// Can use an empty set, since event contains the info
+-				jQuery().off( event );
+-				return origFn.apply( this, arguments );
+-			};
+-			// Use same guid so caller can remove using origFn
+-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+-		}
+-		return this.each( function() {
+-			jQuery.event.add( this, types, fn, data, selector );
+-		});
+-	},
+-	one: function( types, selector, data, fn ) {
+-		return this.on( types, selector, data, fn, 1 );
+-	},
+-	off: function( types, selector, fn ) {
+-		var handleObj, type;
+-		if ( types && types.preventDefault && types.handleObj ) {
+-			// ( event )  dispatched jQuery.Event
+-			handleObj = types.handleObj;
+-			jQuery( types.delegateTarget ).off(
+-				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+-				handleObj.selector,
+-				handleObj.handler
+-			);
+-			return this;
+-		}
+-		if ( typeof types === "object" ) {
+-			// ( types-object [, selector] )
+-			for ( type in types ) {
+-				this.off( type, selector, types[ type ] );
+-			}
+-			return this;
+-		}
+-		if ( selector === false || typeof selector === "function" ) {
+-			// ( types [, fn] )
+-			fn = selector;
+-			selector = undefined;
+-		}
+-		if ( fn === false ) {
+-			fn = returnFalse;
+-		}
+-		return this.each(function() {
+-			jQuery.event.remove( this, types, fn, selector );
+-		});
+-	},
+-
+-	bind: function( types, data, fn ) {
+-		return this.on( types, null, data, fn );
+-	},
+-	unbind: function( types, fn ) {
+-		return this.off( types, null, fn );
+-	},
+-
+-	delegate: function( selector, types, data, fn ) {
+-		return this.on( types, selector, data, fn );
+-	},
+-	undelegate: function( selector, types, fn ) {
+-		// ( namespace ) or ( selector, types [, fn] )
+-		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+-	},
+-
+-	trigger: function( type, data ) {
+-		return this.each(function() {
+-			jQuery.event.trigger( type, data, this );
+-		});
+-	},
+-	triggerHandler: function( type, data ) {
+-		var elem = this[0];
+-		if ( elem ) {
+-			return jQuery.event.trigger( type, data, elem, true );
+-		}
+-	}
+-});
+-/*!
+- * Sizzle CSS Selector Engine
+- * Copyright 2012 jQuery Foundation and other contributors
+- * Released under the MIT license
+- * http://sizzlejs.com/
+- */
+-(function( window, undefined ) {
+-
+-var i,
+-	cachedruns,
+-	Expr,
+-	getText,
+-	isXML,
+-	compile,
+-	hasDuplicate,
+-	outermostContext,
+-
+-	// Local document vars
+-	setDocument,
+-	document,
+-	docElem,
+-	documentIsXML,
+-	rbuggyQSA,
+-	rbuggyMatches,
+-	matches,
+-	contains,
+-	sortOrder,
+-
+-	// Instance-specific data
+-	expando = "sizzle" + -(new Date()),
+-	preferredDoc = window.document,
+-	support = {},
+-	dirruns = 0,
+-	done = 0,
+-	classCache = createCache(),
+-	tokenCache = createCache(),
+-	compilerCache = createCache(),
+-
+-	// General-purpose constants
+-	strundefined = typeof undefined,
+-	MAX_NEGATIVE = 1 << 31,
+-
+-	// Array methods
+-	arr = [],
+-	pop = arr.pop,
+-	push = arr.push,
+-	slice = arr.slice,
+-	// Use a stripped-down indexOf if we can't use a native one
+-	indexOf = arr.indexOf || function( elem ) {
+-		var i = 0,
+-			len = this.length;
+-		for ( ; i < len; i++ ) {
+-			if ( this[i] === elem ) {
+-				return i;
+-			}
+-		}
+-		return -1;
+-	},
+-
+-
+-	// Regular expressions
+-
+-	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+-	whitespace = "[\\x20\\t\\r\\n\\f]",
+-	// http://www.w3.org/TR/css3-syntax/#characters
+-	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+-
+-	// Loosely modeled on CSS identifier characters
+-	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+-	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+-	identifier = characterEncoding.replace( "w", "w#" ),
+-
+-	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+-	operators = "([*^$|!~]?=)",
+-	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+-		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+-
+-	// Prefer arguments quoted,
+-	//   then not containing pseudos/brackets,
+-	//   then attribute selectors/non-parenthetical expressions,
+-	//   then anything else
+-	// These preferences are here to reduce the number of selectors
+-	//   needing tokenize in the PSEUDO preFilter
+-	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+-
+-	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+-
+-	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+-	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+-	rpseudo = new RegExp( pseudos ),
+-	ridentifier = new RegExp( "^" + identifier + "$" ),
+-
+-	matchExpr = {
+-		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+-		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+-		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+-		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+-		"ATTR": new RegExp( "^" + attributes ),
+-		"PSEUDO": new RegExp( "^" + pseudos ),
+-		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+-			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+-			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+-		// For use in libraries implementing .is()
+-		// We use this for POS matching in `select`
+-		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+-			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+-	},
+-
+-	rsibling = /[\x20\t\r\n\f]*[+~]/,
+-
+-	rnative = /^[^{]+\{\s*\[native code/,
+-
+-	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+-	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+-
+-	rinputs = /^(?:input|select|textarea|button)$/i,
+-	rheader = /^h\d$/i,
+-
+-	rescape = /'|\\/g,
+-	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+-
+-	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+-	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+-	funescape = function( _, escaped ) {
+-		var high = "0x" + escaped - 0x10000;
+-		// NaN means non-codepoint
+-		return high !== high ?
+-			escaped :
+-			// BMP codepoint
+-			high < 0 ?
+-				String.fromCharCode( high + 0x10000 ) :
+-				// Supplemental Plane codepoint (surrogate pair)
+-				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+-	};
+-
+-// Use a stripped-down slice if we can't use a native one
+-try {
+-	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
+-} catch ( e ) {
+-	slice = function( i ) {
+-		var elem,
+-			results = [];
+-		while ( (elem = this[i++]) ) {
+-			results.push( elem );
+-		}
+-		return results;
+-	};
+-}
+-
+-/**
+- * For feature detection
+- * @param {Function} fn The function to test for native support
+- */
+-function isNative( fn ) {
+-	return rnative.test( fn + "" );
+-}
+-
+-/**
+- * Create key-value caches of limited size
+- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+- *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+- *	deleting the oldest entry
+- */
+-function createCache() {
+-	var cache,
+-		keys = [];
+-
+-	return (cache = function( key, value ) {
+-		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+-		if ( keys.push( key += " " ) > Expr.cacheLength ) {
+-			// Only keep the most recent entries
+-			delete cache[ keys.shift() ];
+-		}
+-		return (cache[ key ] = value);
+-	});
+-}
+-
+-/**
+- * Mark a function for special use by Sizzle
+- * @param {Function} fn The function to mark
+- */
+-function markFunction( fn ) {
+-	fn[ expando ] = true;
+-	return fn;
+-}
+-
+-/**
+- * Support testing using an element
+- * @param {Function} fn Passed the created div and expects a boolean result
+- */
+-function assert( fn ) {
+-	var div = document.createElement("div");
+-
+-	try {
+-		return fn( div );
+-	} catch (e) {
+-		return false;
+-	} finally {
+-		// release memory in IE
+-		div = null;
+-	}
+-}
+-
+-function Sizzle( selector, context, results, seed ) {
+-	var match, elem, m, nodeType,
+-		// QSA vars
+-		i, groups, old, nid, newContext, newSelector;
+-
+-	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+-		setDocument( context );
+-	}
+-
+-	context = context || document;
+-	results = results || [];
+-
+-	if ( !selector || typeof selector !== "string" ) {
+-		return results;
+-	}
+-
+-	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+-		return [];
+-	}
+-
+-	if ( !documentIsXML && !seed ) {
+-
+-		// Shortcuts
+-		if ( (match = rquickExpr.exec( selector )) ) {
+-			// Speed-up: Sizzle("#ID")
+-			if ( (m = match[1]) ) {
+-				if ( nodeType === 9 ) {
+-					elem = context.getElementById( m );
+-					// Check parentNode to catch when Blackberry 4.6 returns
+-					// nodes that are no longer in the document #6963
+-					if ( elem && elem.parentNode ) {
+-						// Handle the case where IE, Opera, and Webkit return items
+-						// by name instead of ID
+-						if ( elem.id === m ) {
+-							results.push( elem );
+-							return results;
+-						}
+-					} else {
+-						return results;
+-					}
+-				} else {
+-					// Context is not a document
+-					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+-						contains( context, elem ) && elem.id === m ) {
+-						results.push( elem );
+-						return results;
+-					}
+-				}
+-
+-			// Speed-up: Sizzle("TAG")
+-			} else if ( match[2] ) {
+-				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+-				return results;
+-
+-			// Speed-up: Sizzle(".CLASS")
+-			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+-				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+-				return results;
+-			}
+-		}
+-
+-		// QSA path
+-		if ( support.qsa && !rbuggyQSA.test(selector) ) {
+-			old = true;
+-			nid = expando;
+-			newContext = context;
+-			newSelector = nodeType === 9 && selector;
+-
+-			// qSA works strangely on Element-rooted queries
+-			// We can work around this by specifying an extra ID on the root
+-			// and working up from there (Thanks to Andrew Dupont for the technique)
+-			// IE 8 doesn't work on object elements
+-			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+-				groups = tokenize( selector );
+-
+-				if ( (old = context.getAttribute("id")) ) {
+-					nid = old.replace( rescape, "\\$&" );
+-				} else {
+-					context.setAttribute( "id", nid );
+-				}
+-				nid = "[id='" + nid + "'] ";
+-
+-				i = groups.length;
+-				while ( i-- ) {
+-					groups[i] = nid + toSelector( groups[i] );
+-				}
+-				newContext = rsibling.test( selector ) && context.parentNode || context;
+-				newSelector = groups.join(",");
+-			}
+-
+-			if ( newSelector ) {
+-				try {
+-					push.apply( results, slice.call( newContext.querySelectorAll(
+-						newSelector
+-					), 0 ) );
+-					return results;
+-				} catch(qsaError) {
+-				} finally {
+-					if ( !old ) {
+-						context.removeAttribute("id");
+-					}
+-				}
+-			}
+-		}
+-	}
+-
+-	// All others
+-	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+-}
+-
+-/**
+- * Detect xml
+- * @param {Element|Object} elem An element or a document
+- */
+-isXML = Sizzle.isXML = function( elem ) {
+-	// documentElement is verified for cases where it doesn't yet exist
+-	// (such as loading iframes in IE - #4833)
+-	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+-	return documentElement ? documentElement.nodeName !== "HTML" : false;
+-};
+-
+-/**
+- * Sets document-related variables once based on the current document
+- * @param {Element|Object} [doc] An element or document object to use to set the document
+- * @returns {Object} Returns the current document
+- */
+-setDocument = Sizzle.setDocument = function( node ) {
+-	var doc = node ? node.ownerDocument || node : preferredDoc;
+-
+-	// If no document and documentElement is available, return
+-	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+-		return document;
+-	}
+-
+-	// Set our document
+-	document = doc;
+-	docElem = doc.documentElement;
+-
+-	// Support tests
+-	documentIsXML = isXML( doc );
+-
+-	// Check if getElementsByTagName("*") returns only elements
+-	support.tagNameNoComments = assert(function( div ) {
+-		div.appendChild( doc.createComment("") );
+-		return !div.getElementsByTagName("*").length;
+-	});
+-
+-	// Check if attributes should be retrieved by attribute nodes
+-	support.attributes = assert(function( div ) {
+-		div.innerHTML = "<select></select>";
+-		var type = typeof div.lastChild.getAttribute("multiple");
+-		// IE8 returns a string for some attributes even when not present
+-		return type !== "boolean" && type !== "string";
+-	});
+-
+-	// Check if getElementsByClassName can be trusted
+-	support.getByClassName = assert(function( div ) {
+-		// Opera can't find a second classname (in 9.6)
+-		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+-		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+-			return false;
+-		}
+-
+-		// Safari 3.2 caches class attributes and doesn't catch changes
+-		div.lastChild.className = "e";
+-		return div.getElementsByClassName("e").length === 2;
+-	});
+-
+-	// Check if getElementById returns elements by name
+-	// Check if getElementsByName privileges form controls or returns elements by ID
+-	support.getByName = assert(function( div ) {
+-		// Inject content
+-		div.id = expando + 0;
+-		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+-		docElem.insertBefore( div, docElem.firstChild );
+-
+-		// Test
+-		var pass = doc.getElementsByName &&
+-			// buggy browsers will return fewer than the correct 2
+-			doc.getElementsByName( expando ).length === 2 +
+-			// buggy browsers will return more than the correct 0
+-			doc.getElementsByName( expando + 0 ).length;
+-		support.getIdNotName = !doc.getElementById( expando );
+-
+-		// Cleanup
+-		docElem.removeChild( div );
+-
+-		return pass;
+-	});
+-
+-	// IE6/7 return modified attributes
+-	Expr.attrHandle = assert(function( div ) {
+-		div.innerHTML = "<a href='#'></a>";
+-		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+-			div.firstChild.getAttribute("href") === "#";
+-	}) ?
+-		{} :
+-		{
+-			"href": function( elem ) {
+-				return elem.getAttribute( "href", 2 );
+-			},
+-			"type": function( elem ) {
+-				return elem.getAttribute("type");
+-			}
+-		};
+-
+-	// ID find and filter
+-	if ( support.getIdNotName ) {
+-		Expr.find["ID"] = function( id, context ) {
+-			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+-				var m = context.getElementById( id );
+-				// Check parentNode to catch when Blackberry 4.6 returns
+-				// nodes that are no longer in the document #6963
+-				return m && m.parentNode ? [m] : [];
+-			}
+-		};
+-		Expr.filter["ID"] = function( id ) {
+-			var attrId = id.replace( runescape, funescape );
+-			return function( elem ) {
+-				return elem.getAttribute("id") === attrId;
+-			};
+-		};
+-	} else {
+-		Expr.find["ID"] = function( id, context ) {
+-			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+-				var m = context.getElementById( id );
+-
+-				return m ?
+-					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+-						[m] :
+-						undefined :
+-					[];
+-			}
+-		};
+-		Expr.filter["ID"] =  function( id ) {
+-			var attrId = id.replace( runescape, funescape );
+-			return function( elem ) {
+-				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+-				return node && node.value === attrId;
+-			};
+-		};
+-	}
+-
+-	// Tag
+-	Expr.find["TAG"] = support.tagNameNoComments ?
+-		function( tag, context ) {
+-			if ( typeof context.getElementsByTagName !== strundefined ) {
+-				return context.getElementsByTagName( tag );
+-			}
+-		} :
+-		function( tag, context ) {
+-			var elem,
+-				tmp = [],
+-				i = 0,
+-				results = context.getElementsByTagName( tag );
+-
+-			// Filter out possible comments
+-			if ( tag === "*" ) {
+-				while ( (elem = results[i++]) ) {
+-					if ( elem.nodeType === 1 ) {
+-						tmp.push( elem );
+-					}
+-				}
+-
+-				return tmp;
+-			}
+-			return results;
+-		};
+-
+-	// Name
+-	Expr.find["NAME"] = support.getByName && function( tag, context ) {
+-		if ( typeof context.getElementsByName !== strundefined ) {
+-			return context.getElementsByName( name );
+-		}
+-	};
+-
+-	// Class
+-	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+-		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+-			return context.getElementsByClassName( className );
+-		}
+-	};
+-
+-	// QSA and matchesSelector support
+-
+-	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+-	rbuggyMatches = [];
+-
+-	// qSa(:focus) reports false when true (Chrome 21),
+-	// no need to also add to buggyMatches since matches checks buggyQSA
+-	// A support test would require too much code (would include document ready)
+-	rbuggyQSA = [ ":focus" ];
+-
+-	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+-		// Build QSA regex
+-		// Regex strategy adopted from Diego Perini
+-		assert(function( div ) {
+-			// Select is set to empty string on purpose
+-			// This is to test IE's treatment of not explictly
+-			// setting a boolean content attribute,
+-			// since its presence should be enough
+-			// http://bugs.jquery.com/ticket/12359
+-			div.innerHTML = "<select><option selected=''></option></select>";
+-
+-			// IE8 - Some boolean attributes are not treated correctly
+-			if ( !div.querySelectorAll("[selected]").length ) {
+-				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+-			}
+-
+-			// Webkit/Opera - :checked should return selected option elements
+-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+-			// IE8 throws error here and will not see later tests
+-			if ( !div.querySelectorAll(":checked").length ) {
+-				rbuggyQSA.push(":checked");
+-			}
+-		});
+-
+-		assert(function( div ) {
+-
+-			// Opera 10-12/IE8 - ^= $= *= and empty values
+-			// Should not select anything
+-			div.innerHTML = "<input type='hidden' i=''/>";
+-			if ( div.querySelectorAll("[i^='']").length ) {
+-				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+-			}
+-
+-			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+-			// IE8 throws error here and will not see later tests
+-			if ( !div.querySelectorAll(":enabled").length ) {
+-				rbuggyQSA.push( ":enabled", ":disabled" );
+-			}
+-
+-			// Opera 10-11 does not throw on post-comma invalid pseudos
+-			div.querySelectorAll("*,:x");
+-			rbuggyQSA.push(",.*:");
+-		});
+-	}
+-
+-	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+-		docElem.mozMatchesSelector ||
+-		docElem.webkitMatchesSelector ||
+-		docElem.oMatchesSelector ||
+-		docElem.msMatchesSelector) )) ) {
+-
+-		assert(function( div ) {
+-			// Check to see if it's possible to do matchesSelector
+-			// on a disconnected node (IE 9)
+-			support.disconnectedMatch = matches.call( div, "div" );
+-
+-			// This should fail with an exception
+-			// Gecko does not error, returns false instead
+-			matches.call( div, "[s!='']:x" );
+-			rbuggyMatches.push( "!=", pseudos );
+-		});
+-	}
+-
+-	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+-	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+-
+-	// Element contains another
+-	// Purposefully does not implement inclusive descendent
+-	// As in, an element does not contain itself
+-	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+-		function( a, b ) {
+-			var adown = a.nodeType === 9 ? a.documentElement : a,
+-				bup = b && b.parentNode;
+-			return a === bup || !!( bup && bup.nodeType === 1 && (
+-				adown.contains ?
+-					adown.contains( bup ) :
+-					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+-			));
+-		} :
+-		function( a, b ) {
+-			if ( b ) {
+-				while ( (b = b.parentNode) ) {
+-					if ( b === a ) {
+-						return true;
+-					}
+-				}
+-			}
+-			return false;
+-		};
+-
+-	// Document order sorting
+-	sortOrder = docElem.compareDocumentPosition ?
+-	function( a, b ) {
+-		var compare;
+-
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-		}
+-
+-		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+-			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+-				if ( a === doc || contains( preferredDoc, a ) ) {
+-					return -1;
+-				}
+-				if ( b === doc || contains( preferredDoc, b ) ) {
+-					return 1;
+-				}
+-				return 0;
+-			}
+-			return compare & 4 ? -1 : 1;
+-		}
+-
+-		return a.compareDocumentPosition ? -1 : 1;
+-	} :
+-	function( a, b ) {
+-		var cur,
+-			i = 0,
+-			aup = a.parentNode,
+-			bup = b.parentNode,
+-			ap = [ a ],
+-			bp = [ b ];
+-
+-		// Exit early if the nodes are identical
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-
+-		// Parentless nodes are either documents or disconnected
+-		} else if ( !aup || !bup ) {
+-			return a === doc ? -1 :
+-				b === doc ? 1 :
+-				aup ? -1 :
+-				bup ? 1 :
+-				0;
+-
+-		// If the nodes are siblings, we can do a quick check
+-		} else if ( aup === bup ) {
+-			return siblingCheck( a, b );
+-		}
+-
+-		// Otherwise we need full lists of their ancestors for comparison
+-		cur = a;
+-		while ( (cur = cur.parentNode) ) {
+-			ap.unshift( cur );
+-		}
+-		cur = b;
+-		while ( (cur = cur.parentNode) ) {
+-			bp.unshift( cur );
+-		}
+-
+-		// Walk down the tree looking for a discrepancy
+-		while ( ap[i] === bp[i] ) {
+-			i++;
+-		}
+-
+-		return i ?
+-			// Do a sibling check if the nodes have a common ancestor
+-			siblingCheck( ap[i], bp[i] ) :
+-
+-			// Otherwise nodes in our document sort first
+-			ap[i] === preferredDoc ? -1 :
+-			bp[i] === preferredDoc ? 1 :
+-			0;
+-	};
+-
+-	// Always assume the presence of duplicates if sort doesn't
+-	// pass them to our comparison function (as in Google Chrome).
+-	hasDuplicate = false;
+-	[0, 0].sort( sortOrder );
+-	support.detectDuplicates = hasDuplicate;
+-
+-	return document;
+-};
+-
+-Sizzle.matches = function( expr, elements ) {
+-	return Sizzle( expr, null, null, elements );
+-};
+-
+-Sizzle.matchesSelector = function( elem, expr ) {
+-	// Set document vars if needed
+-	if ( ( elem.ownerDocument || elem ) !== document ) {
+-		setDocument( elem );
+-	}
+-
+-	// Make sure that attribute selectors are quoted
+-	expr = expr.replace( rattributeQuotes, "='$1']" );
+-
+-	// rbuggyQSA always contains :focus, so no need for an existence check
+-	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+-		try {
+-			var ret = matches.call( elem, expr );
+-
+-			// IE 9's matchesSelector returns false on disconnected nodes
+-			if ( ret || support.disconnectedMatch ||
+-					// As well, disconnected nodes are said to be in a document
+-					// fragment in IE 9
+-					elem.document && elem.document.nodeType !== 11 ) {
+-				return ret;
+-			}
+-		} catch(e) {}
+-	}
+-
+-	return Sizzle( expr, document, null, [elem] ).length > 0;
+-};
+-
+-Sizzle.contains = function( context, elem ) {
+-	// Set document vars if needed
+-	if ( ( context.ownerDocument || context ) !== document ) {
+-		setDocument( context );
+-	}
+-	return contains( context, elem );
+-};
+-
+-Sizzle.attr = function( elem, name ) {
+-	var val;
+-
+-	// Set document vars if needed
+-	if ( ( elem.ownerDocument || elem ) !== document ) {
+-		setDocument( elem );
+-	}
+-
+-	if ( !documentIsXML ) {
+-		name = name.toLowerCase();
+-	}
+-	if ( (val = Expr.attrHandle[ name ]) ) {
+-		return val( elem );
+-	}
+-	if ( documentIsXML || support.attributes ) {
+-		return elem.getAttribute( name );
+-	}
+-	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+-		name :
+-		val && val.specified ? val.value : null;
+-};
+-
+-Sizzle.error = function( msg ) {
+-	throw new Error( "Syntax error, unrecognized expression: " + msg );
+-};
+-
+-// Document sorting and removing duplicates
+-Sizzle.uniqueSort = function( results ) {
+-	var elem,
+-		duplicates = [],
+-		i = 1,
+-		j = 0;
+-
+-	// Unless we *know* we can detect duplicates, assume their presence
+-	hasDuplicate = !support.detectDuplicates;
+-	results.sort( sortOrder );
+-
+-	if ( hasDuplicate ) {
+-		for ( ; (elem = results[i]); i++ ) {
+-			if ( elem === results[ i - 1 ] ) {
+-				j = duplicates.push( i );
+-			}
+-		}
+-		while ( j-- ) {
+-			results.splice( duplicates[ j ], 1 );
+-		}
+-	}
+-
+-	return results;
+-};
+-
+-function siblingCheck( a, b ) {
+-	var cur = b && a,
+-		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
+-
+-	// Use IE sourceIndex if available on both nodes
+-	if ( diff ) {
+-		return diff;
+-	}
+-
+-	// Check if b follows a
+-	if ( cur ) {
+-		while ( (cur = cur.nextSibling) ) {
+-			if ( cur === b ) {
+-				return -1;
+-			}
+-		}
+-	}
+-
+-	return a ? 1 : -1;
+-}
+-
+-// Returns a function to use in pseudos for input types
+-function createInputPseudo( type ) {
+-	return function( elem ) {
+-		var name = elem.nodeName.toLowerCase();
+-		return name === "input" && elem.type === type;
+-	};
+-}
+-
+-// Returns a function to use in pseudos for buttons
+-function createButtonPseudo( type ) {
+-	return function( elem ) {
+-		var name = elem.nodeName.toLowerCase();
+-		return (name === "input" || name === "button") && elem.type === type;
+-	};
+-}
+-
+-// Returns a function to use in pseudos for positionals
+-function createPositionalPseudo( fn ) {
+-	return markFunction(function( argument ) {
+-		argument = +argument;
+-		return markFunction(function( seed, matches ) {
+-			var j,
+-				matchIndexes = fn( [], seed.length, argument ),
+-				i = matchIndexes.length;
+-
+-			// Match elements found at the specified indexes
+-			while ( i-- ) {
+-				if ( seed[ (j = matchIndexes[i]) ] ) {
+-					seed[j] = !(matches[j] = seed[j]);
+-				}
+-			}
+-		});
+-	});
+-}
+-
+-/**
+- * Utility function for retrieving the text value of an array of DOM nodes
+- * @param {Array|Element} elem
+- */
+-getText = Sizzle.getText = function( elem ) {
+-	var node,
+-		ret = "",
+-		i = 0,
+-		nodeType = elem.nodeType;
+-
+-	if ( !nodeType ) {
+-		// If no nodeType, this is expected to be an array
+-		for ( ; (node = elem[i]); i++ ) {
+-			// Do not traverse comment nodes
+-			ret += getText( node );
+-		}
+-	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+-		// Use textContent for elements
+-		// innerText usage removed for consistency of new lines (see #11153)
+-		if ( typeof elem.textContent === "string" ) {
+-			return elem.textContent;
+-		} else {
+-			// Traverse its children
+-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+-				ret += getText( elem );
+-			}
+-		}
+-	} else if ( nodeType === 3 || nodeType === 4 ) {
+-		return elem.nodeValue;
+-	}
+-	// Do not include comment or processing instruction nodes
+-
+-	return ret;
+-};
+-
+-Expr = Sizzle.selectors = {
+-
+-	// Can be adjusted by the user
+-	cacheLength: 50,
+-
+-	createPseudo: markFunction,
+-
+-	match: matchExpr,
+-
+-	find: {},
+-
+-	relative: {
+-		">": { dir: "parentNode", first: true },
+-		" ": { dir: "parentNode" },
+-		"+": { dir: "previousSibling", first: true },
+-		"~": { dir: "previousSibling" }
+-	},
+-
+-	preFilter: {
+-		"ATTR": function( match ) {
+-			match[1] = match[1].replace( runescape, funescape );
+-
+-			// Move the given value to match[3] whether quoted or unquoted
+-			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+-
+-			if ( match[2] === "~=" ) {
+-				match[3] = " " + match[3] + " ";
+-			}
+-
+-			return match.slice( 0, 4 );
+-		},
+-
+-		"CHILD": function( match ) {
+-			/* matches from matchExpr["CHILD"]
+-				1 type (only|nth|...)
+-				2 what (child|of-type)
+-				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+-				4 xn-component of xn+y argument ([+-]?\d*n|)
+-				5 sign of xn-component
+-				6 x of xn-component
+-				7 sign of y-component
+-				8 y of y-component
+-			*/
+-			match[1] = match[1].toLowerCase();
+-
+-			if ( match[1].slice( 0, 3 ) === "nth" ) {
+-				// nth-* requires argument
+-				if ( !match[3] ) {
+-					Sizzle.error( match[0] );
+-				}
+-
+-				// numeric x and y parameters for Expr.filter.CHILD
+-				// remember that false/true cast respectively to 0/1
+-				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+-				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+-
+-			// other types prohibit arguments
+-			} else if ( match[3] ) {
+-				Sizzle.error( match[0] );
+-			}
+-
+-			return match;
+-		},
+-
+-		"PSEUDO": function( match ) {
+-			var excess,
+-				unquoted = !match[5] && match[2];
+-
+-			if ( matchExpr["CHILD"].test( match[0] ) ) {
+-				return null;
+-			}
+-
+-			// Accept quoted arguments as-is
+-			if ( match[4] ) {
+-				match[2] = match[4];
+-
+-			// Strip excess characters from unquoted arguments
+-			} else if ( unquoted && rpseudo.test( unquoted ) &&
+-				// Get excess from tokenize (recursively)
+-				(excess = tokenize( unquoted, true )) &&
+-				// advance to the next closing parenthesis
+-				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+-
+-				// excess is a negative index
+-				match[0] = match[0].slice( 0, excess );
+-				match[2] = unquoted.slice( 0, excess );
+-			}
+-
+-			// Return only captures needed by the pseudo filter method (type and argument)
+-			return match.slice( 0, 3 );
+-		}
+-	},
+-
+-	filter: {
+-
+-		"TAG": function( nodeName ) {
+-			if ( nodeName === "*" ) {
+-				return function() { return true; };
+-			}
+-
+-			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+-			return function( elem ) {
+-				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+-			};
+-		},
+-
+-		"CLASS": function( className ) {
+-			var pattern = classCache[ className + " " ];
+-
+-			return pattern ||
+-				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+-				classCache( className, function( elem ) {
+-					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+-				});
+-		},
+-
+-		"ATTR": function( name, operator, check ) {
+-			return function( elem ) {
+-				var result = Sizzle.attr( elem, name );
+-
+-				if ( result == null ) {
+-					return operator === "!=";
+-				}
+-				if ( !operator ) {
+-					return true;
+-				}
+-
+-				result += "";
+-
+-				return operator === "=" ? result === check :
+-					operator === "!=" ? result !== check :
+-					operator === "^=" ? check && result.indexOf( check ) === 0 :
+-					operator === "*=" ? check && result.indexOf( check ) > -1 :
+-					operator === "$=" ? check && result.slice( -check.length ) === check :
+-					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+-					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+-					false;
+-			};
+-		},
+-
+-		"CHILD": function( type, what, argument, first, last ) {
+-			var simple = type.slice( 0, 3 ) !== "nth",
+-				forward = type.slice( -4 ) !== "last",
+-				ofType = what === "of-type";
+-
+-			return first === 1 && last === 0 ?
+-
+-				// Shortcut for :nth-*(n)
+-				function( elem ) {
+-					return !!elem.parentNode;
+-				} :
+-
+-				function( elem, context, xml ) {
+-					var cache, outerCache, node, diff, nodeIndex, start,
+-						dir = simple !== forward ? "nextSibling" : "previousSibling",
+-						parent = elem.parentNode,
+-						name = ofType && elem.nodeName.toLowerCase(),
+-						useCache = !xml && !ofType;
+-
+-					if ( parent ) {
+-
+-						// :(first|last|only)-(child|of-type)
+-						if ( simple ) {
+-							while ( dir ) {
+-								node = elem;
+-								while ( (node = node[ dir ]) ) {
+-									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+-										return false;
+-									}
+-								}
+-								// Reverse direction for :only-* (if we haven't yet done so)
+-								start = dir = type === "only" && !start && "nextSibling";
+-							}
+-							return true;
+-						}
+-
+-						start = [ forward ? parent.firstChild : parent.lastChild ];
+-
+-						// non-xml :nth-child(...) stores cache data on `parent`
+-						if ( forward && useCache ) {
+-							// Seek `elem` from a previously-cached index
+-							outerCache = parent[ expando ] || (parent[ expando ] = {});
+-							cache = outerCache[ type ] || [];
+-							nodeIndex = cache[0] === dirruns && cache[1];
+-							diff = cache[0] === dirruns && cache[2];
+-							node = nodeIndex && parent.childNodes[ nodeIndex ];
+-
+-							while ( (node = ++nodeIndex && node && node[ dir ] ||
+-
+-								// Fallback to seeking `elem` from the start
+-								(diff = nodeIndex = 0) || start.pop()) ) {
+-
+-								// When found, cache indexes on `parent` and break
+-								if ( node.nodeType === 1 && ++diff && node === elem ) {
+-									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+-									break;
+-								}
+-							}
+-
+-						// Use previously-cached element index if available
+-						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+-							diff = cache[1];
+-
+-						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+-						} else {
+-							// Use the same loop as above to seek `elem` from the start
+-							while ( (node = ++nodeIndex && node && node[ dir ] ||
+-								(diff = nodeIndex = 0) || start.pop()) ) {
+-
+-								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+-									// Cache the index of each encountered element
+-									if ( useCache ) {
+-										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+-									}
+-
+-									if ( node === elem ) {
+-										break;
+-									}
+-								}
+-							}
+-						}
+-
+-						// Incorporate the offset, then check against cycle size
+-						diff -= last;
+-						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+-					}
+-				};
+-		},
+-
+-		"PSEUDO": function( pseudo, argument ) {
+-			// pseudo-class names are case-insensitive
+-			// http://www.w3.org/TR/selectors/#pseudo-classes
+-			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+-			// Remember that setFilters inherits from pseudos
+-			var args,
+-				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+-					Sizzle.error( "unsupported pseudo: " + pseudo );
+-
+-			// The user may use createPseudo to indicate that
+-			// arguments are needed to create the filter function
+-			// just as Sizzle does
+-			if ( fn[ expando ] ) {
+-				return fn( argument );
+-			}
+-
+-			// But maintain support for old signatures
+-			if ( fn.length > 1 ) {
+-				args = [ pseudo, pseudo, "", argument ];
+-				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+-					markFunction(function( seed, matches ) {
+-						var idx,
+-							matched = fn( seed, argument ),
+-							i = matched.length;
+-						while ( i-- ) {
+-							idx = indexOf.call( seed, matched[i] );
+-							seed[ idx ] = !( matches[ idx ] = matched[i] );
+-						}
+-					}) :
+-					function( elem ) {
+-						return fn( elem, 0, args );
+-					};
+-			}
+-
+-			return fn;
+-		}
+-	},
+-
+-	pseudos: {
+-		// Potentially complex pseudos
+-		"not": markFunction(function( selector ) {
+-			// Trim the selector passed to compile
+-			// to avoid treating leading and trailing
+-			// spaces as combinators
+-			var input = [],
+-				results = [],
+-				matcher = compile( selector.replace( rtrim, "$1" ) );
+-
+-			return matcher[ expando ] ?
+-				markFunction(function( seed, matches, context, xml ) {
+-					var elem,
+-						unmatched = matcher( seed, null, xml, [] ),
+-						i = seed.length;
+-
+-					// Match elements unmatched by `matcher`
+-					while ( i-- ) {
+-						if ( (elem = unmatched[i]) ) {
+-							seed[i] = !(matches[i] = elem);
+-						}
+-					}
+-				}) :
+-				function( elem, context, xml ) {
+-					input[0] = elem;
+-					matcher( input, null, xml, results );
+-					return !results.pop();
+-				};
+-		}),
+-
+-		"has": markFunction(function( selector ) {
+-			return function( elem ) {
+-				return Sizzle( selector, elem ).length > 0;
+-			};
+-		}),
+-
+-		"contains": markFunction(function( text ) {
+-			return function( elem ) {
+-				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+-			};
+-		}),
+-
+-		// "Whether an element is represented by a :lang() selector
+-		// is based solely on the element's language value
+-		// being equal to the identifier C,
+-		// or beginning with the identifier C immediately followed by "-".
+-		// The matching of C against the element's language value is performed case-insensitively.
+-		// The identifier C does not have to be a valid language name."
+-		// http://www.w3.org/TR/selectors/#lang-pseudo
+-		"lang": markFunction( function( lang ) {
+-			// lang value must be a valid identifider
+-			if ( !ridentifier.test(lang || "") ) {
+-				Sizzle.error( "unsupported lang: " + lang );
+-			}
+-			lang = lang.replace( runescape, funescape ).toLowerCase();
+-			return function( elem ) {
+-				var elemLang;
+-				do {
+-					if ( (elemLang = documentIsXML ?
+-						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+-						elem.lang) ) {
+-
+-						elemLang = elemLang.toLowerCase();
+-						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+-					}
+-				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+-				return false;
+-			};
+-		}),
+-
+-		// Miscellaneous
+-		"target": function( elem ) {
+-			var hash = window.location && window.location.hash;
+-			return hash && hash.slice( 1 ) === elem.id;
+-		},
+-
+-		"root": function( elem ) {
+-			return elem === docElem;
+-		},
+-
+-		"focus": function( elem ) {
+-			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+-		},
+-
+-		// Boolean properties
+-		"enabled": function( elem ) {
+-			return elem.disabled === false;
+-		},
+-
+-		"disabled": function( elem ) {
+-			return elem.disabled === true;
+-		},
+-
+-		"checked": function( elem ) {
+-			// In CSS3, :checked should return both checked and selected elements
+-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+-			var nodeName = elem.nodeName.toLowerCase();
+-			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+-		},
+-
+-		"selected": function( elem ) {
+-			// Accessing this property makes selected-by-default
+-			// options in Safari work properly
+-			if ( elem.parentNode ) {
+-				elem.parentNode.selectedIndex;
+-			}
+-
+-			return elem.selected === true;
+-		},
+-
+-		// Contents
+-		"empty": function( elem ) {
+-			// http://www.w3.org/TR/selectors/#empty-pseudo
+-			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+-			//   not comment, processing instructions, or others
+-			// Thanks to Diego Perini for the nodeName shortcut
+-			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+-				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		},
+-
+-		"parent": function( elem ) {
+-			return !Expr.pseudos["empty"]( elem );
+-		},
+-
+-		// Element/input types
+-		"header": function( elem ) {
+-			return rheader.test( elem.nodeName );
+-		},
+-
+-		"input": function( elem ) {
+-			return rinputs.test( elem.nodeName );
+-		},
+-
+-		"button": function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return name === "input" && elem.type === "button" || name === "button";
+-		},
+-
+-		"text": function( elem ) {
+-			var attr;
+-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+-			// use getAttribute instead to test this case
+-			return elem.nodeName.toLowerCase() === "input" &&
+-				elem.type === "text" &&
+-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+-		},
+-
+-		// Position-in-collection
+-		"first": createPositionalPseudo(function() {
+-			return [ 0 ];
+-		}),
+-
+-		"last": createPositionalPseudo(function( matchIndexes, length ) {
+-			return [ length - 1 ];
+-		}),
+-
+-		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			return [ argument < 0 ? argument + length : argument ];
+-		}),
+-
+-		"even": createPositionalPseudo(function( matchIndexes, length ) {
+-			var i = 0;
+-			for ( ; i < length; i += 2 ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+-			var i = 1;
+-			for ( ; i < length; i += 2 ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			var i = argument < 0 ? argument + length : argument;
+-			for ( ; --i >= 0; ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			var i = argument < 0 ? argument + length : argument;
+-			for ( ; ++i < length; ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		})
+-	}
+-};
+-
+-// Add button/input type pseudos
+-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+-	Expr.pseudos[ i ] = createInputPseudo( i );
+-}
+-for ( i in { submit: true, reset: true } ) {
+-	Expr.pseudos[ i ] = createButtonPseudo( i );
+-}
+-
+-function tokenize( selector, parseOnly ) {
+-	var matched, match, tokens, type,
+-		soFar, groups, preFilters,
+-		cached = tokenCache[ selector + " " ];
+-
+-	if ( cached ) {
+-		return parseOnly ? 0 : cached.slice( 0 );
+-	}
+-
+-	soFar = selector;
+-	groups = [];
+-	preFilters = Expr.preFilter;
+-
+-	while ( soFar ) {
+-
+-		// Comma and first run
+-		if ( !matched || (match = rcomma.exec( soFar )) ) {
+-			if ( match ) {
+-				// Don't consume trailing commas as valid
+-				soFar = soFar.slice( match[0].length ) || soFar;
+-			}
+-			groups.push( tokens = [] );
+-		}
+-
+-		matched = false;
+-
+-		// Combinators
+-		if ( (match = rcombinators.exec( soFar )) ) {
+-			matched = match.shift();
+-			tokens.push( {
+-				value: matched,
+-				// Cast descendant combinators to space
+-				type: match[0].replace( rtrim, " " )
+-			} );
+-			soFar = soFar.slice( matched.length );
+-		}
+-
+-		// Filters
+-		for ( type in Expr.filter ) {
+-			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+-				(match = preFilters[ type ]( match ))) ) {
+-				matched = match.shift();
+-				tokens.push( {
+-					value: matched,
+-					type: type,
+-					matches: match
+-				} );
+-				soFar = soFar.slice( matched.length );
+-			}
+-		}
+-
+-		if ( !matched ) {
+-			break;
+-		}
+-	}
+-
+-	// Return the length of the invalid excess
+-	// if we're just parsing
+-	// Otherwise, throw an error or return tokens
+-	return parseOnly ?
+-		soFar.length :
+-		soFar ?
+-			Sizzle.error( selector ) :
+-			// Cache the tokens
+-			tokenCache( selector, groups ).slice( 0 );
+-}
+-
+-function toSelector( tokens ) {
+-	var i = 0,
+-		len = tokens.length,
+-		selector = "";
+-	for ( ; i < len; i++ ) {
+-		selector += tokens[i].value;
+-	}
+-	return selector;
+-}
+-
+-function addCombinator( matcher, combinator, base ) {
+-	var dir = combinator.dir,
+-		checkNonElements = base && dir === "parentNode",
+-		doneName = done++;
+-
+-	return combinator.first ?
+-		// Check against closest ancestor/preceding element
+-		function( elem, context, xml ) {
+-			while ( (elem = elem[ dir ]) ) {
+-				if ( elem.nodeType === 1 || checkNonElements ) {
+-					return matcher( elem, context, xml );
+-				}
+-			}
+-		} :
+-
+-		// Check against all ancestor/preceding elements
+-		function( elem, context, xml ) {
+-			var data, cache, outerCache,
+-				dirkey = dirruns + " " + doneName;
+-
+-			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+-			if ( xml ) {
+-				while ( (elem = elem[ dir ]) ) {
+-					if ( elem.nodeType === 1 || checkNonElements ) {
+-						if ( matcher( elem, context, xml ) ) {
+-							return true;
+-						}
+-					}
+-				}
+-			} else {
+-				while ( (elem = elem[ dir ]) ) {
+-					if ( elem.nodeType === 1 || checkNonElements ) {
+-						outerCache = elem[ expando ] || (elem[ expando ] = {});
+-						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+-							if ( (data = cache[1]) === true || data === cachedruns ) {
+-								return data === true;
+-							}
+-						} else {
+-							cache = outerCache[ dir ] = [ dirkey ];
+-							cache[1] = matcher( elem, context, xml ) || cachedruns;
+-							if ( cache[1] === true ) {
+-								return true;
+-							}
+-						}
+-					}
+-				}
+-			}
+-		};
+-}
+-
+-function elementMatcher( matchers ) {
+-	return matchers.length > 1 ?
+-		function( elem, context, xml ) {
+-			var i = matchers.length;
+-			while ( i-- ) {
+-				if ( !matchers[i]( elem, context, xml ) ) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		} :
+-		matchers[0];
+-}
+-
+-function condense( unmatched, map, filter, context, xml ) {
+-	var elem,
+-		newUnmatched = [],
+-		i = 0,
+-		len = unmatched.length,
+-		mapped = map != null;
+-
+-	for ( ; i < len; i++ ) {
+-		if ( (elem = unmatched[i]) ) {
+-			if ( !filter || filter( elem, context, xml ) ) {
+-				newUnmatched.push( elem );
+-				if ( mapped ) {
+-					map.push( i );
+-				}
+-			}
+-		}
+-	}
+-
+-	return newUnmatched;
+-}
+-
+-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+-	if ( postFilter && !postFilter[ expando ] ) {
+-		postFilter = setMatcher( postFilter );
+-	}
+-	if ( postFinder && !postFinder[ expando ] ) {
+-		postFinder = setMatcher( postFinder, postSelector );
+-	}
+-	return markFunction(function( seed, results, context, xml ) {
+-		var temp, i, elem,
+-			preMap = [],
+-			postMap = [],
+-			preexisting = results.length,
+-
+-			// Get initial elements from seed or context
+-			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+-
+-			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+-			matcherIn = preFilter && ( seed || !selector ) ?
+-				condense( elems, preMap, preFilter, context, xml ) :
+-				elems,
+-
+-			matcherOut = matcher ?
+-				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+-				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+-
+-					// ...intermediate processing is necessary
+-					[] :
+-
+-					// ...otherwise use results directly
+-					results :
+-				matcherIn;
+-
+-		// Find primary matches
+-		if ( matcher ) {
+-			matcher( matcherIn, matcherOut, context, xml );
+-		}
+-
+-		// Apply postFilter
+-		if ( postFilter ) {
+-			temp = condense( matcherOut, postMap );
+-			postFilter( temp, [], context, xml );
+-
+-			// Un-match failing elements by moving them back to matcherIn
+-			i = temp.length;
+-			while ( i-- ) {
+-				if ( (elem = temp[i]) ) {
+-					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+-				}
+-			}
+-		}
+-
+-		if ( seed ) {
+-			if ( postFinder || preFilter ) {
+-				if ( postFinder ) {
+-					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+-					temp = [];
+-					i = matcherOut.length;
+-					while ( i-- ) {
+-						if ( (elem = matcherOut[i]) ) {
+-							// Restore matcherIn since elem is not yet a final match
+-							temp.push( (matcherIn[i] = elem) );
+-						}
+-					}
+-					postFinder( null, (matcherOut = []), temp, xml );
+-				}
+-
+-				// Move matched elements from seed to results to keep them synchronized
+-				i = matcherOut.length;
+-				while ( i-- ) {
+-					if ( (elem = matcherOut[i]) &&
+-						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+-
+-						seed[temp] = !(results[temp] = elem);
+-					}
+-				}
+-			}
+-
+-		// Add elements to results, through postFinder if defined
+-		} else {
+-			matcherOut = condense(
+-				matcherOut === results ?
+-					matcherOut.splice( preexisting, matcherOut.length ) :
+-					matcherOut
+-			);
+-			if ( postFinder ) {
+-				postFinder( null, results, matcherOut, xml );
+-			} else {
+-				push.apply( results, matcherOut );
+-			}
+-		}
+-	});
+-}
+-
+-function matcherFromTokens( tokens ) {
+-	var checkContext, matcher, j,
+-		len = tokens.length,
+-		leadingRelative = Expr.relative[ tokens[0].type ],
+-		implicitRelative = leadingRelative || Expr.relative[" "],
+-		i = leadingRelative ? 1 : 0,
+-
+-		// The foundational matcher ensures that elements are reachable from top-level context(s)
+-		matchContext = addCombinator( function( elem ) {
+-			return elem === checkContext;
+-		}, implicitRelative, true ),
+-		matchAnyContext = addCombinator( function( elem ) {
+-			return indexOf.call( checkContext, elem ) > -1;
+-		}, implicitRelative, true ),
+-		matchers = [ function( elem, context, xml ) {
+-			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+-				(checkContext = context).nodeType ?
+-					matchContext( elem, context, xml ) :
+-					matchAnyContext( elem, context, xml ) );
+-		} ];
+-
+-	for ( ; i < len; i++ ) {
+-		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+-			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+-		} else {
+-			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+-
+-			// Return special upon seeing a positional matcher
+-			if ( matcher[ expando ] ) {
+-				// Find the next relative operator (if any) for proper handling
+-				j = ++i;
+-				for ( ; j < len; j++ ) {
+-					if ( Expr.relative[ tokens[j].type ] ) {
+-						break;
+-					}
+-				}
+-				return setMatcher(
+-					i > 1 && elementMatcher( matchers ),
+-					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+-					matcher,
+-					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+-					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+-					j < len && toSelector( tokens )
+-				);
+-			}
+-			matchers.push( matcher );
+-		}
+-	}
+-
+-	return elementMatcher( matchers );
+-}
+-
+-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+-	// A counter to specify which element is currently being matched
+-	var matcherCachedRuns = 0,
+-		bySet = setMatchers.length > 0,
+-		byElement = elementMatchers.length > 0,
+-		superMatcher = function( seed, context, xml, results, expandContext ) {
+-			var elem, j, matcher,
+-				setMatched = [],
+-				matchedCount = 0,
+-				i = "0",
+-				unmatched = seed && [],
+-				outermost = expandContext != null,
+-				contextBackup = outermostContext,
+-				// We must always have either seed elements or context
+-				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+-				// Use integer dirruns iff this is the outermost matcher
+-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+-
+-			if ( outermost ) {
+-				outermostContext = context !== document && context;
+-				cachedruns = matcherCachedRuns;
+-			}
+-
+-			// Add elements passing elementMatchers directly to results
+-			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+-			for ( ; (elem = elems[i]) != null; i++ ) {
+-				if ( byElement && elem ) {
+-					j = 0;
+-					while ( (matcher = elementMatchers[j++]) ) {
+-						if ( matcher( elem, context, xml ) ) {
+-							results.push( elem );
+-							break;
+-						}
+-					}
+-					if ( outermost ) {
+-						dirruns = dirrunsUnique;
+-						cachedruns = ++matcherCachedRuns;
+-					}
+-				}
+-
+-				// Track unmatched elements for set filters
+-				if ( bySet ) {
+-					// They will have gone through all possible matchers
+-					if ( (elem = !matcher && elem) ) {
+-						matchedCount--;
+-					}
+-
+-					// Lengthen the array for every element, matched or not
+-					if ( seed ) {
+-						unmatched.push( elem );
+-					}
+-				}
+-			}
+-
+-			// Apply set filters to unmatched elements
+-			matchedCount += i;
+-			if ( bySet && i !== matchedCount ) {
+-				j = 0;
+-				while ( (matcher = setMatchers[j++]) ) {
+-					matcher( unmatched, setMatched, context, xml );
+-				}
+-
+-				if ( seed ) {
+-					// Reintegrate element matches to eliminate the need for sorting
+-					if ( matchedCount > 0 ) {
+-						while ( i-- ) {
+-							if ( !(unmatched[i] || setMatched[i]) ) {
+-								setMatched[i] = pop.call( results );
+-							}
+-						}
+-					}
+-
+-					// Discard index placeholder values to get only actual matches
+-					setMatched = condense( setMatched );
+-				}
+-
+-				// Add matches to results
+-				push.apply( results, setMatched );
+-
+-				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+-				if ( outermost && !seed && setMatched.length > 0 &&
+-					( matchedCount + setMatchers.length ) > 1 ) {
+-
+-					Sizzle.uniqueSort( results );
+-				}
+-			}
+-
+-			// Override manipulation of globals by nested matchers
+-			if ( outermost ) {
+-				dirruns = dirrunsUnique;
+-				outermostContext = contextBackup;
+-			}
+-
+-			return unmatched;
+-		};
+-
+-	return bySet ?
+-		markFunction( superMatcher ) :
+-		superMatcher;
+-}
+-
+-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+-	var i,
+-		setMatchers = [],
+-		elementMatchers = [],
+-		cached = compilerCache[ selector + " " ];
+-
+-	if ( !cached ) {
+-		// Generate a function of recursive functions that can be used to check each element
+-		if ( !group ) {
+-			group = tokenize( selector );
+-		}
+-		i = group.length;
+-		while ( i-- ) {
+-			cached = matcherFromTokens( group[i] );
+-			if ( cached[ expando ] ) {
+-				setMatchers.push( cached );
+-			} else {
+-				elementMatchers.push( cached );
+-			}
+-		}
+-
+-		// Cache the compiled function
+-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+-	}
+-	return cached;
+-};
+-
+-function multipleContexts( selector, contexts, results ) {
+-	var i = 0,
+-		len = contexts.length;
+-	for ( ; i < len; i++ ) {
+-		Sizzle( selector, contexts[i], results );
+-	}
+-	return results;
+-}
+-
+-function select( selector, context, results, seed ) {
+-	var i, tokens, token, type, find,
+-		match = tokenize( selector );
+-
+-	if ( !seed ) {
+-		// Try to minimize operations if there is only one group
+-		if ( match.length === 1 ) {
+-
+-			// Take a shortcut and set the context if the root selector is an ID
+-			tokens = match[0] = match[0].slice( 0 );
+-			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+-					context.nodeType === 9 && !documentIsXML &&
+-					Expr.relative[ tokens[1].type ] ) {
+-
+-				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+-				if ( !context ) {
+-					return results;
+-				}
+-
+-				selector = selector.slice( tokens.shift().value.length );
+-			}
+-
+-			// Fetch a seed set for right-to-left matching
+-			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+-			while ( i-- ) {
+-				token = tokens[i];
+-
+-				// Abort if we hit a combinator
+-				if ( Expr.relative[ (type = token.type) ] ) {
+-					break;
+-				}
+-				if ( (find = Expr.find[ type ]) ) {
+-					// Search, expanding context for leading sibling combinators
+-					if ( (seed = find(
+-						token.matches[0].replace( runescape, funescape ),
+-						rsibling.test( tokens[0].type ) && context.parentNode || context
+-					)) ) {
+-
+-						// If seed is empty or no tokens remain, we can return early
+-						tokens.splice( i, 1 );
+-						selector = seed.length && toSelector( tokens );
+-						if ( !selector ) {
+-							push.apply( results, slice.call( seed, 0 ) );
+-							return results;
+-						}
+-
+-						break;
+-					}
+-				}
+-			}
+-		}
+-	}
+-
+-	// Compile and execute a filtering function
+-	// Provide `match` to avoid retokenization if we modified the selector above
+-	compile( selector, match )(
+-		seed,
+-		context,
+-		documentIsXML,
+-		results,
+-		rsibling.test( selector )
+-	);
+-	return results;
+-}
+-
+-// Deprecated
+-Expr.pseudos["nth"] = Expr.pseudos["eq"];
+-
+-// Easy API for creating new setFilters
+-function setFilters() {}
+-Expr.filters = setFilters.prototype = Expr.pseudos;
+-Expr.setFilters = new setFilters();
+-
+-// Initialize with the default document
+-setDocument();
+-
+-// Override sizzle attribute retrieval
+-Sizzle.attr = jQuery.attr;
+-jQuery.find = Sizzle;
+-jQuery.expr = Sizzle.selectors;
+-jQuery.expr[":"] = jQuery.expr.pseudos;
+-jQuery.unique = Sizzle.uniqueSort;
+-jQuery.text = Sizzle.getText;
+-jQuery.isXMLDoc = Sizzle.isXML;
+-jQuery.contains = Sizzle.contains;
+-
+-
+-})( window );
+-var runtil = /Until$/,
+-	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+-	isSimple = /^.[^:#\[\.,]*$/,
+-	rneedsContext = jQuery.expr.match.needsContext,
+-	// methods guaranteed to produce a unique set when starting from a unique set
+-	guaranteedUnique = {
+-		children: true,
+-		contents: true,
+-		next: true,
+-		prev: true
+-	};
+-
+-jQuery.fn.extend({
+-	find: function( selector ) {
+-		var i, ret, self,
+-			len = this.length;
+-
+-		if ( typeof selector !== "string" ) {
+-			self = this;
+-			return this.pushStack( jQuery( selector ).filter(function() {
+-				for ( i = 0; i < len; i++ ) {
+-					if ( jQuery.contains( self[ i ], this ) ) {
+-						return true;
+-					}
+-				}
+-			}) );
+-		}
+-
+-		ret = [];
+-		for ( i = 0; i < len; i++ ) {
+-			jQuery.find( selector, this[ i ], ret );
+-		}
+-
+-		// Needed because $( selector, context ) becomes $( context ).find( selector )
+-		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+-		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+-		return ret;
+-	},
+-
+-	has: function( target ) {
+-		var i,
+-			targets = jQuery( target, this ),
+-			len = targets.length;
+-
+-		return this.filter(function() {
+-			for ( i = 0; i < len; i++ ) {
+-				if ( jQuery.contains( this, targets[i] ) ) {
+-					return true;
+-				}
+-			}
+-		});
+-	},
+-
+-	not: function( selector ) {
+-		return this.pushStack( winnow(this, selector, false) );
+-	},
+-
+-	filter: function( selector ) {
+-		return this.pushStack( winnow(this, selector, true) );
+-	},
+-
+-	is: function( selector ) {
+-		return !!selector && (
+-			typeof selector === "string" ?
+-				// If this is a positional/relative selector, check membership in the returned set
+-				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+-				rneedsContext.test( selector ) ?
+-					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+-					jQuery.filter( selector, this ).length > 0 :
+-				this.filter( selector ).length > 0 );
+-	},
+-
+-	closest: function( selectors, context ) {
+-		var cur,
+-			i = 0,
+-			l = this.length,
+-			ret = [],
+-			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+-				jQuery( selectors, context || this.context ) :
+-				0;
+-
+-		for ( ; i < l; i++ ) {
+-			cur = this[i];
+-
+-			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+-					ret.push( cur );
+-					break;
+-				}
+-				cur = cur.parentNode;
+-			}
+-		}
+-
+-		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+-	},
+-
+-	// Determine the position of an element within
+-	// the matched set of elements
+-	index: function( elem ) {
+-
+-		// No argument, return index in parent
+-		if ( !elem ) {
+-			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+-		}
+-
+-		// index in selector
+-		if ( typeof elem === "string" ) {
+-			return jQuery.inArray( this[0], jQuery( elem ) );
+-		}
+-
+-		// Locate the position of the desired element
+-		return jQuery.inArray(
+-			// If it receives a jQuery object, the first element is used
+-			elem.jquery ? elem[0] : elem, this );
+-	},
+-
+-	add: function( selector, context ) {
+-		var set = typeof selector === "string" ?
+-				jQuery( selector, context ) :
+-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+-			all = jQuery.merge( this.get(), set );
+-
+-		return this.pushStack( jQuery.unique(all) );
+-	},
+-
+-	addBack: function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter(selector)
+-		);
+-	}
+-});
+-
+-jQuery.fn.andSelf = jQuery.fn.addBack;
+-
+-function sibling( cur, dir ) {
+-	do {
+-		cur = cur[ dir ];
+-	} while ( cur && cur.nodeType !== 1 );
+-
+-	return cur;
+-}
+-
+-jQuery.each({
+-	parent: function( elem ) {
+-		var parent = elem.parentNode;
+-		return parent && parent.nodeType !== 11 ? parent : null;
+-	},
+-	parents: function( elem ) {
+-		return jQuery.dir( elem, "parentNode" );
+-	},
+-	parentsUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "parentNode", until );
+-	},
+-	next: function( elem ) {
+-		return sibling( elem, "nextSibling" );
+-	},
+-	prev: function( elem ) {
+-		return sibling( elem, "previousSibling" );
+-	},
+-	nextAll: function( elem ) {
+-		return jQuery.dir( elem, "nextSibling" );
+-	},
+-	prevAll: function( elem ) {
+-		return jQuery.dir( elem, "previousSibling" );
+-	},
+-	nextUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "nextSibling", until );
+-	},
+-	prevUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "previousSibling", until );
+-	},
+-	siblings: function( elem ) {
+-		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+-	},
+-	children: function( elem ) {
+-		return jQuery.sibling( elem.firstChild );
+-	},
+-	contents: function( elem ) {
+-		return jQuery.nodeName( elem, "iframe" ) ?
+-			elem.contentDocument || elem.contentWindow.document :
+-			jQuery.merge( [], elem.childNodes );
+-	}
+-}, function( name, fn ) {
+-	jQuery.fn[ name ] = function( until, selector ) {
+-		var ret = jQuery.map( this, fn, until );
+-
+-		if ( !runtil.test( name ) ) {
+-			selector = until;
+-		}
+-
+-		if ( selector && typeof selector === "string" ) {
+-			ret = jQuery.filter( selector, ret );
+-		}
+-
+-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+-
+-		if ( this.length > 1 && rparentsprev.test( name ) ) {
+-			ret = ret.reverse();
+-		}
+-
+-		return this.pushStack( ret );
+-	};
+-});
+-
+-jQuery.extend({
+-	filter: function( expr, elems, not ) {
+-		if ( not ) {
+-			expr = ":not(" + expr + ")";
+-		}
+-
+-		return elems.length === 1 ?
+-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+-			jQuery.find.matches(expr, elems);
+-	},
+-
+-	dir: function( elem, dir, until ) {
+-		var matched = [],
+-			cur = elem[ dir ];
+-
+-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+-			if ( cur.nodeType === 1 ) {
+-				matched.push( cur );
+-			}
+-			cur = cur[dir];
+-		}
+-		return matched;
+-	},
+-
+-	sibling: function( n, elem ) {
+-		var r = [];
+-
+-		for ( ; n; n = n.nextSibling ) {
+-			if ( n.nodeType === 1 && n !== elem ) {
+-				r.push( n );
+-			}
+-		}
+-
+-		return r;
+-	}
+-});
+-
+-// Implement the identical functionality for filter and not
+-function winnow( elements, qualifier, keep ) {
+-
+-	// Can't pass null or undefined to indexOf in Firefox 4
+-	// Set to 0 to skip string check
+-	qualifier = qualifier || 0;
+-
+-	if ( jQuery.isFunction( qualifier ) ) {
+-		return jQuery.grep(elements, function( elem, i ) {
+-			var retVal = !!qualifier.call( elem, i, elem );
+-			return retVal === keep;
+-		});
+-
+-	} else if ( qualifier.nodeType ) {
+-		return jQuery.grep(elements, function( elem ) {
+-			return ( elem === qualifier ) === keep;
+-		});
+-
+-	} else if ( typeof qualifier === "string" ) {
+-		var filtered = jQuery.grep(elements, function( elem ) {
+-			return elem.nodeType === 1;
+-		});
+-
+-		if ( isSimple.test( qualifier ) ) {
+-			return jQuery.filter(qualifier, filtered, !keep);
+-		} else {
+-			qualifier = jQuery.filter( qualifier, filtered );
+-		}
+-	}
+-
+-	return jQuery.grep(elements, function( elem ) {
+-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+-	});
+-}
+-function createSafeFragment( document ) {
+-	var list = nodeNames.split( "|" ),
+-		safeFrag = document.createDocumentFragment();
+-
+-	if ( safeFrag.createElement ) {
+-		while ( list.length ) {
+-			safeFrag.createElement(
+-				list.pop()
+-			);
+-		}
+-	}
+-	return safeFrag;
+-}
+-
+-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+-	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+-	rleadingWhitespace = /^\s+/,
+-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+-	rtagName = /<([\w:]+)/,
+-	rtbody = /<tbody/i,
+-	rhtml = /<|&#?\w+;/,
+-	rnoInnerhtml = /<(?:script|style|link)/i,
+-	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+-	// checked="checked" or checked
+-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+-	rscriptType = /^$|\/(?:java|ecma)script/i,
+-	rscriptTypeMasked = /^true\/(.*)/,
+-	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+-
+-	// We have to close these tags to support XHTML (#13200)
+-	wrapMap = {
+-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+-		legend: [ 1, "<fieldset>", "</fieldset>" ],
+-		area: [ 1, "<map>", "</map>" ],
+-		param: [ 1, "<object>", "</object>" ],
+-		thead: [ 1, "<table>", "</table>" ],
+-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+-
+-		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+-		// unless wrapped in a div with non-breaking characters in front of it.
+-		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+-	},
+-	safeFragment = createSafeFragment( document ),
+-	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+-
+-wrapMap.optgroup = wrapMap.option;
+-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+-wrapMap.th = wrapMap.td;
+-
+-jQuery.fn.extend({
+-	text: function( value ) {
+-		return jQuery.access( this, function( value ) {
+-			return value === undefined ?
+-				jQuery.text( this ) :
+-				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+-		}, null, value, arguments.length );
+-	},
+-
+-	wrapAll: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapAll( html.call(this, i) );
+-			});
+-		}
+-
+-		if ( this[0] ) {
+-			// The elements to wrap the target around
+-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+-
+-			if ( this[0].parentNode ) {
+-				wrap.insertBefore( this[0] );
+-			}
+-
+-			wrap.map(function() {
+-				var elem = this;
+-
+-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+-					elem = elem.firstChild;
+-				}
+-
+-				return elem;
+-			}).append( this );
+-		}
+-
+-		return this;
+-	},
+-
+-	wrapInner: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapInner( html.call(this, i) );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			var self = jQuery( this ),
+-				contents = self.contents();
+-
+-			if ( contents.length ) {
+-				contents.wrapAll( html );
+-
+-			} else {
+-				self.append( html );
+-			}
+-		});
+-	},
+-
+-	wrap: function( html ) {
+-		var isFunction = jQuery.isFunction( html );
+-
+-		return this.each(function(i) {
+-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+-		});
+-	},
+-
+-	unwrap: function() {
+-		return this.parent().each(function() {
+-			if ( !jQuery.nodeName( this, "body" ) ) {
+-				jQuery( this ).replaceWith( this.childNodes );
+-			}
+-		}).end();
+-	},
+-
+-	append: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+-				this.appendChild( elem );
+-			}
+-		});
+-	},
+-
+-	prepend: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+-				this.insertBefore( elem, this.firstChild );
+-			}
+-		});
+-	},
+-
+-	before: function() {
+-		return this.domManip( arguments, false, function( elem ) {
+-			if ( this.parentNode ) {
+-				this.parentNode.insertBefore( elem, this );
+-			}
+-		});
+-	},
+-
+-	after: function() {
+-		return this.domManip( arguments, false, function( elem ) {
+-			if ( this.parentNode ) {
+-				this.parentNode.insertBefore( elem, this.nextSibling );
+-			}
+-		});
+-	},
+-
+-	// keepData is for internal use only--do not document
+-	remove: function( selector, keepData ) {
+-		var elem,
+-			i = 0;
+-
+-		for ( ; (elem = this[i]) != null; i++ ) {
+-			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+-				if ( !keepData && elem.nodeType === 1 ) {
+-					jQuery.cleanData( getAll( elem ) );
+-				}
+-
+-				if ( elem.parentNode ) {
+-					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+-						setGlobalEval( getAll( elem, "script" ) );
+-					}
+-					elem.parentNode.removeChild( elem );
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	empty: function() {
+-		var elem,
+-			i = 0;
+-
+-		for ( ; (elem = this[i]) != null; i++ ) {
+-			// Remove element nodes and prevent memory leaks
+-			if ( elem.nodeType === 1 ) {
+-				jQuery.cleanData( getAll( elem, false ) );
+-			}
+-
+-			// Remove any remaining nodes
+-			while ( elem.firstChild ) {
+-				elem.removeChild( elem.firstChild );
+-			}
+-
+-			// If this is a select, ensure that it displays empty (#12336)
+-			// Support: IE<9
+-			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+-				elem.options.length = 0;
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	clone: function( dataAndEvents, deepDataAndEvents ) {
+-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+-
+-		return this.map( function () {
+-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+-		});
+-	},
+-
+-	html: function( value ) {
+-		return jQuery.access( this, function( value ) {
+-			var elem = this[0] || {},
+-				i = 0,
+-				l = this.length;
+-
+-			if ( value === undefined ) {
+-				return elem.nodeType === 1 ?
+-					elem.innerHTML.replace( rinlinejQuery, "" ) :
+-					undefined;
+-			}
+-
+-			// See if we can take a shortcut and just use innerHTML
+-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+-				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+-				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+-				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+-
+-				value = value.replace( rxhtmlTag, "<$1></$2>" );
+-
+-				try {
+-					for (; i < l; i++ ) {
+-						// Remove element nodes and prevent memory leaks
+-						elem = this[i] || {};
+-						if ( elem.nodeType === 1 ) {
+-							jQuery.cleanData( getAll( elem, false ) );
+-							elem.innerHTML = value;
+-						}
+-					}
+-
+-					elem = 0;
+-
+-				// If using innerHTML throws an exception, use the fallback method
+-				} catch(e) {}
+-			}
+-
+-			if ( elem ) {
+-				this.empty().append( value );
+-			}
+-		}, null, value, arguments.length );
+-	},
+-
+-	replaceWith: function( value ) {
+-		var isFunc = jQuery.isFunction( value );
+-
+-		// Make sure that the elements are removed from the DOM before they are inserted
+-		// this can help fix replacing a parent with child elements
+-		if ( !isFunc && typeof value !== "string" ) {
+-			value = jQuery( value ).not( this ).detach();
+-		}
+-
+-		return this.domManip( [ value ], true, function( elem ) {
+-			var next = this.nextSibling,
+-				parent = this.parentNode;
+-
+-			if ( parent ) {
+-				jQuery( this ).remove();
+-				parent.insertBefore( elem, next );
+-			}
+-		});
+-	},
+-
+-	detach: function( selector ) {
+-		return this.remove( selector, true );
+-	},
+-
+-	domManip: function( args, table, callback ) {
+-
+-		// Flatten any nested arrays
+-		args = core_concat.apply( [], args );
+-
+-		var first, node, hasScripts,
+-			scripts, doc, fragment,
+-			i = 0,
+-			l = this.length,
+-			set = this,
+-			iNoClone = l - 1,
+-			value = args[0],
+-			isFunction = jQuery.isFunction( value );
+-
+-		// We can't cloneNode fragments that contain checked, in WebKit
+-		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+-			return this.each(function( index ) {
+-				var self = set.eq( index );
+-				if ( isFunction ) {
+-					args[0] = value.call( this, index, table ? self.html() : undefined );
+-				}
+-				self.domManip( args, table, callback );
+-			});
+-		}
+-
+-		if ( l ) {
+-			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+-			first = fragment.firstChild;
+-
+-			if ( fragment.childNodes.length === 1 ) {
+-				fragment = first;
+-			}
+-
+-			if ( first ) {
+-				table = table && jQuery.nodeName( first, "tr" );
+-				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+-				hasScripts = scripts.length;
+-
+-				// Use the original fragment for the last item instead of the first because it can end up
+-				// being emptied incorrectly in certain situations (#8070).
+-				for ( ; i < l; i++ ) {
+-					node = fragment;
+-
+-					if ( i !== iNoClone ) {
+-						node = jQuery.clone( node, true, true );
+-
+-						// Keep references to cloned scripts for later restoration
+-						if ( hasScripts ) {
+-							jQuery.merge( scripts, getAll( node, "script" ) );
+-						}
+-					}
+-
+-					callback.call(
+-						table && jQuery.nodeName( this[i], "table" ) ?
+-							findOrAppend( this[i], "tbody" ) :
+-							this[i],
+-						node,
+-						i
+-					);
+-				}
+-
+-				if ( hasScripts ) {
+-					doc = scripts[ scripts.length - 1 ].ownerDocument;
+-
+-					// Reenable scripts
+-					jQuery.map( scripts, restoreScript );
+-
+-					// Evaluate executable scripts on first document insertion
+-					for ( i = 0; i < hasScripts; i++ ) {
+-						node = scripts[ i ];
+-						if ( rscriptType.test( node.type || "" ) &&
+-							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+-
+-							if ( node.src ) {
+-								// Hope ajax is available...
+-								jQuery.ajax({
+-									url: node.src,
+-									type: "GET",
+-									dataType: "script",
+-									async: false,
+-									global: false,
+-									"throws": true
+-								});
+-							} else {
+-								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+-							}
+-						}
+-					}
+-				}
+-
+-				// Fix #11809: Avoid leaking memory
+-				fragment = first = null;
+-			}
+-		}
+-
+-		return this;
+-	}
+-});
+-
+-function findOrAppend( elem, tag ) {
+-	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+-}
+-
+-// Replace/restore the type attribute of script elements for safe DOM manipulation
+-function disableScript( elem ) {
+-	var attr = elem.getAttributeNode("type");
+-	elem.type = ( attr && attr.specified ) + "/" + elem.type;
+-	return elem;
+-}
+-function restoreScript( elem ) {
+-	var match = rscriptTypeMasked.exec( elem.type );
+-	if ( match ) {
+-		elem.type = match[1];
+-	} else {
+-		elem.removeAttribute("type");
+-	}
+-	return elem;
+-}
+-
+-// Mark scripts as having already been evaluated
+-function setGlobalEval( elems, refElements ) {
+-	var elem,
+-		i = 0;
+-	for ( ; (elem = elems[i]) != null; i++ ) {
+-		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+-	}
+-}
+-
+-function cloneCopyEvent( src, dest ) {
+-
+-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+-		return;
+-	}
+-
+-	var type, i, l,
+-		oldData = jQuery._data( src ),
+-		curData = jQuery._data( dest, oldData ),
+-		events = oldData.events;
+-
+-	if ( events ) {
+-		delete curData.handle;
+-		curData.events = {};
+-
+-		for ( type in events ) {
+-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+-				jQuery.event.add( dest, type, events[ type ][ i ] );
+-			}
+-		}
+-	}
+-
+-	// make the cloned public data object a copy from the original
+-	if ( curData.data ) {
+-		curData.data = jQuery.extend( {}, curData.data );
+-	}
+-}
+-
+-function fixCloneNodeIssues( src, dest ) {
+-	var nodeName, e, data;
+-
+-	// We do not need to do anything for non-Elements
+-	if ( dest.nodeType !== 1 ) {
+-		return;
+-	}
+-
+-	nodeName = dest.nodeName.toLowerCase();
+-
+-	// IE6-8 copies events bound via attachEvent when using cloneNode.
+-	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+-		data = jQuery._data( dest );
+-
+-		for ( e in data.events ) {
+-			jQuery.removeEvent( dest, e, data.handle );
+-		}
+-
+-		// Event data gets referenced instead of copied if the expando gets copied too
+-		dest.removeAttribute( jQuery.expando );
+-	}
+-
+-	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+-	if ( nodeName === "script" && dest.text !== src.text ) {
+-		disableScript( dest ).text = src.text;
+-		restoreScript( dest );
+-
+-	// IE6-10 improperly clones children of object elements using classid.
+-	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+-	} else if ( nodeName === "object" ) {
+-		if ( dest.parentNode ) {
+-			dest.outerHTML = src.outerHTML;
+-		}
+-
+-		// This path appears unavoidable for IE9. When cloning an object
+-		// element in IE9, the outerHTML strategy above is not sufficient.
+-		// If the src has innerHTML and the destination does not,
+-		// copy the src.innerHTML into the dest.innerHTML. #10324
+-		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+-			dest.innerHTML = src.innerHTML;
+-		}
+-
+-	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+-		// IE6-8 fails to persist the checked state of a cloned checkbox
+-		// or radio button. Worse, IE6-7 fail to give the cloned element
+-		// a checked appearance if the defaultChecked value isn't also set
+-
+-		dest.defaultChecked = dest.checked = src.checked;
+-
+-		// IE6-7 get confused and end up setting the value of a cloned
+-		// checkbox/radio button to an empty string instead of "on"
+-		if ( dest.value !== src.value ) {
+-			dest.value = src.value;
+-		}
+-
+-	// IE6-8 fails to return the selected option to the default selected
+-	// state when cloning options
+-	} else if ( nodeName === "option" ) {
+-		dest.defaultSelected = dest.selected = src.defaultSelected;
+-
+-	// IE6-8 fails to set the defaultValue to the correct value when
+-	// cloning other types of input fields
+-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+-		dest.defaultValue = src.defaultValue;
+-	}
+-}
+-
+-jQuery.each({
+-	appendTo: "append",
+-	prependTo: "prepend",
+-	insertBefore: "before",
+-	insertAfter: "after",
+-	replaceAll: "replaceWith"
+-}, function( name, original ) {
+-	jQuery.fn[ name ] = function( selector ) {
+-		var elems,
+-			i = 0,
+-			ret = [],
+-			insert = jQuery( selector ),
+-			last = insert.length - 1;
+-
+-		for ( ; i <= last; i++ ) {
+-			elems = i === last ? this : this.clone(true);
+-			jQuery( insert[i] )[ original ]( elems );
+-
+-			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+-			core_push.apply( ret, elems.get() );
+-		}
+-
+-		return this.pushStack( ret );
+-	};
+-});
+-
+-function getAll( context, tag ) {
+-	var elems, elem,
+-		i = 0,
+-		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
+-			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
+-			undefined;
+-
+-	if ( !found ) {
+-		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+-			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+-				found.push( elem );
+-			} else {
+-				jQuery.merge( found, getAll( elem, tag ) );
+-			}
+-		}
+-	}
+-
+-	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+-		jQuery.merge( [ context ], found ) :
+-		found;
+-}
+-
+-// Used in buildFragment, fixes the defaultChecked property
+-function fixDefaultChecked( elem ) {
+-	if ( manipulation_rcheckableType.test( elem.type ) ) {
+-		elem.defaultChecked = elem.checked;
+-	}
+-}
+-
+-jQuery.extend({
+-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+-		var destElements, node, clone, i, srcElements,
+-			inPage = jQuery.contains( elem.ownerDocument, elem );
+-
+-		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+-			clone = elem.cloneNode( true );
+-
+-		// IE<=8 does not properly clone detached, unknown element nodes
+-		} else {
+-			fragmentDiv.innerHTML = elem.outerHTML;
+-			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+-		}
+-
+-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+-
+-			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+-			destElements = getAll( clone );
+-			srcElements = getAll( elem );
+-
+-			// Fix all IE cloning issues
+-			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+-				// Ensure that the destination node is not null; Fixes #9587
+-				if ( destElements[i] ) {
+-					fixCloneNodeIssues( node, destElements[i] );
+-				}
+-			}
+-		}
+-
+-		// Copy the events from the original to the clone
+-		if ( dataAndEvents ) {
+-			if ( deepDataAndEvents ) {
+-				srcElements = srcElements || getAll( elem );
+-				destElements = destElements || getAll( clone );
+-
+-				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+-					cloneCopyEvent( node, destElements[i] );
+-				}
+-			} else {
+-				cloneCopyEvent( elem, clone );
+-			}
+-		}
+-
+-		// Preserve script evaluation history
+-		destElements = getAll( clone, "script" );
+-		if ( destElements.length > 0 ) {
+-			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+-		}
+-
+-		destElements = srcElements = node = null;
+-
+-		// Return the cloned set
+-		return clone;
+-	},
+-
+-	buildFragment: function( elems, context, scripts, selection ) {
+-		var j, elem, contains,
+-			tmp, tag, tbody, wrap,
+-			l = elems.length,
+-
+-			// Ensure a safe fragment
+-			safe = createSafeFragment( context ),
+-
+-			nodes = [],
+-			i = 0;
+-
+-		for ( ; i < l; i++ ) {
+-			elem = elems[ i ];
+-
+-			if ( elem || elem === 0 ) {
+-
+-				// Add nodes directly
+-				if ( jQuery.type( elem ) === "object" ) {
+-					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+-
+-				// Convert non-html into a text node
+-				} else if ( !rhtml.test( elem ) ) {
+-					nodes.push( context.createTextNode( elem ) );
+-
+-				// Convert html into DOM nodes
+-				} else {
+-					tmp = tmp || safe.appendChild( context.createElement("div") );
+-
+-					// Deserialize a standard representation
+-					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+-					wrap = wrapMap[ tag ] || wrapMap._default;
+-
+-					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+-
+-					// Descend through wrappers to the right content
+-					j = wrap[0];
+-					while ( j-- ) {
+-						tmp = tmp.lastChild;
+-					}
+-
+-					// Manually add leading whitespace removed by IE
+-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+-						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+-					}
+-
+-					// Remove IE's autoinserted <tbody> from table fragments
+-					if ( !jQuery.support.tbody ) {
+-
+-						// String was a <table>, *may* have spurious <tbody>
+-						elem = tag === "table" && !rtbody.test( elem ) ?
+-							tmp.firstChild :
+-
+-							// String was a bare <thead> or <tfoot>
+-							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+-								tmp :
+-								0;
+-
+-						j = elem && elem.childNodes.length;
+-						while ( j-- ) {
+-							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+-								elem.removeChild( tbody );
+-							}
+-						}
+-					}
+-
+-					jQuery.merge( nodes, tmp.childNodes );
+-
+-					// Fix #12392 for WebKit and IE > 9
+-					tmp.textContent = "";
+-
+-					// Fix #12392 for oldIE
+-					while ( tmp.firstChild ) {
+-						tmp.removeChild( tmp.firstChild );
+-					}
+-
+-					// Remember the top-level container for proper cleanup
+-					tmp = safe.lastChild;
+-				}
+-			}
+-		}
+-
+-		// Fix #11356: Clear elements from fragment
+-		if ( tmp ) {
+-			safe.removeChild( tmp );
+-		}
+-
+-		// Reset defaultChecked for any radios and checkboxes
+-		// about to be appended to the DOM in IE 6/7 (#8060)
+-		if ( !jQuery.support.appendChecked ) {
+-			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+-		}
+-
+-		i = 0;
+-		while ( (elem = nodes[ i++ ]) ) {
+-
+-			// #4087 - If origin and destination elements are the same, and this is
+-			// that element, do not do anything
+-			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+-				continue;
+-			}
+-
+-			contains = jQuery.contains( elem.ownerDocument, elem );
+-
+-			// Append to fragment
+-			tmp = getAll( safe.appendChild( elem ), "script" );
+-
+-			// Preserve script evaluation history
+-			if ( contains ) {
+-				setGlobalEval( tmp );
+-			}
+-
+-			// Capture executables
+-			if ( scripts ) {
+-				j = 0;
+-				while ( (elem = tmp[ j++ ]) ) {
+-					if ( rscriptType.test( elem.type || "" ) ) {
+-						scripts.push( elem );
+-					}
+-				}
+-			}
+-		}
+-
+-		tmp = null;
+-
+-		return safe;
+-	},
+-
+-	cleanData: function( elems, /* internal */ acceptData ) {
+-		var elem, type, id, data,
+-			i = 0,
+-			internalKey = jQuery.expando,
+-			cache = jQuery.cache,
+-			deleteExpando = jQuery.support.deleteExpando,
+-			special = jQuery.event.special;
+-
+-		for ( ; (elem = elems[i]) != null; i++ ) {
+-
+-			if ( acceptData || jQuery.acceptData( elem ) ) {
+-
+-				id = elem[ internalKey ];
+-				data = id && cache[ id ];
+-
+-				if ( data ) {
+-					if ( data.events ) {
+-						for ( type in data.events ) {
+-							if ( special[ type ] ) {
+-								jQuery.event.remove( elem, type );
+-
+-							// This is a shortcut to avoid jQuery.event.remove's overhead
+-							} else {
+-								jQuery.removeEvent( elem, type, data.handle );
+-							}
+-						}
+-					}
+-
+-					// Remove cache only if it was not already removed by jQuery.event.remove
+-					if ( cache[ id ] ) {
+-
+-						delete cache[ id ];
+-
+-						// IE does not allow us to delete expando properties from nodes,
+-						// nor does it have a removeAttribute function on Document nodes;
+-						// we must handle all of these cases
+-						if ( deleteExpando ) {
+-							delete elem[ internalKey ];
+-
+-						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
+-							elem.removeAttribute( internalKey );
+-
+-						} else {
+-							elem[ internalKey ] = null;
+-						}
+-
+-						core_deletedIds.push( id );
+-					}
+-				}
+-			}
+-		}
+-	}
+-});
+-var iframe, getStyles, curCSS,
+-	ralpha = /alpha\([^)]*\)/i,
+-	ropacity = /opacity\s*=\s*([^)]*)/,
+-	rposition = /^(top|right|bottom|left)$/,
+-	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+-	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+-	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+-	rmargin = /^margin/,
+-	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+-	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+-	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+-	elemdisplay = { BODY: "block" },
+-
+-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+-	cssNormalTransform = {
+-		letterSpacing: 0,
+-		fontWeight: 400
+-	},
+-
+-	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+-	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+-
+-// return a css property mapped to a potentially vendor prefixed property
+-function vendorPropName( style, name ) {
+-
+-	// shortcut for names that are not vendor prefixed
+-	if ( name in style ) {
+-		return name;
+-	}
+-
+-	// check for vendor prefixed names
+-	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+-		origName = name,
+-		i = cssPrefixes.length;
+-
+-	while ( i-- ) {
+-		name = cssPrefixes[ i ] + capName;
+-		if ( name in style ) {
+-			return name;
+-		}
+-	}
+-
+-	return origName;
+-}
+-
+-function isHidden( elem, el ) {
+-	// isHidden might be called from jQuery#filter function;
+-	// in that case, element will be second argument
+-	elem = el || elem;
+-	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+-}
+-
+-function showHide( elements, show ) {
+-	var display, elem, hidden,
+-		values = [],
+-		index = 0,
+-		length = elements.length;
+-
+-	for ( ; index < length; index++ ) {
+-		elem = elements[ index ];
+-		if ( !elem.style ) {
+-			continue;
+-		}
+-
+-		values[ index ] = jQuery._data( elem, "olddisplay" );
+-		display = elem.style.display;
+-		if ( show ) {
+-			// Reset the inline display of this element to learn if it is
+-			// being hidden by cascaded rules or not
+-			if ( !values[ index ] && display === "none" ) {
+-				elem.style.display = "";
+-			}
+-
+-			// Set elements which have been overridden with display: none
+-			// in a stylesheet to whatever the default browser style is
+-			// for such an element
+-			if ( elem.style.display === "" && isHidden( elem ) ) {
+-				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+-			}
+-		} else {
+-
+-			if ( !values[ index ] ) {
+-				hidden = isHidden( elem );
+-
+-				if ( display && display !== "none" || !hidden ) {
+-					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+-				}
+-			}
+-		}
+-	}
+-
+-	// Set the display of most of the elements in a second loop
+-	// to avoid the constant reflow
+-	for ( index = 0; index < length; index++ ) {
+-		elem = elements[ index ];
+-		if ( !elem.style ) {
+-			continue;
+-		}
+-		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+-			elem.style.display = show ? values[ index ] || "" : "none";
+-		}
+-	}
+-
+-	return elements;
+-}
+-
+-jQuery.fn.extend({
+-	css: function( name, value ) {
+-		return jQuery.access( this, function( elem, name, value ) {
+-			var len, styles,
+-				map = {},
+-				i = 0;
+-
+-			if ( jQuery.isArray( name ) ) {
+-				styles = getStyles( elem );
+-				len = name.length;
+-
+-				for ( ; i < len; i++ ) {
+-					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+-				}
+-
+-				return map;
+-			}
+-
+-			return value !== undefined ?
+-				jQuery.style( elem, name, value ) :
+-				jQuery.css( elem, name );
+-		}, name, value, arguments.length > 1 );
+-	},
+-	show: function() {
+-		return showHide( this, true );
+-	},
+-	hide: function() {
+-		return showHide( this );
+-	},
+-	toggle: function( state ) {
+-		var bool = typeof state === "boolean";
+-
+-		return this.each(function() {
+-			if ( bool ? state : isHidden( this ) ) {
+-				jQuery( this ).show();
+-			} else {
+-				jQuery( this ).hide();
+-			}
+-		});
+-	}
+-});
+-
+-jQuery.extend({
+-	// Add in style property hooks for overriding the default
+-	// behavior of getting and setting a style property
+-	cssHooks: {
+-		opacity: {
+-			get: function( elem, computed ) {
+-				if ( computed ) {
+-					// We should always get a number back from opacity
+-					var ret = curCSS( elem, "opacity" );
+-					return ret === "" ? "1" : ret;
+-				}
+-			}
+-		}
+-	},
+-
+-	// Exclude the following css properties to add px
+-	cssNumber: {
+-		"columnCount": true,
+-		"fillOpacity": true,
+-		"fontWeight": true,
+-		"lineHeight": true,
+-		"opacity": true,
+-		"orphans": true,
+-		"widows": true,
+-		"zIndex": true,
+-		"zoom": true
+-	},
+-
+-	// Add in properties whose names you wish to fix before
+-	// setting or getting the value
+-	cssProps: {
+-		// normalize float css property
+-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+-	},
+-
+-	// Get and set the style property on a DOM Node
+-	style: function( elem, name, value, extra ) {
+-		// Don't set styles on text and comment nodes
+-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+-			return;
+-		}
+-
+-		// Make sure that we're working with the right name
+-		var ret, type, hooks,
+-			origName = jQuery.camelCase( name ),
+-			style = elem.style;
+-
+-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+-
+-		// gets hook for the prefixed version
+-		// followed by the unprefixed version
+-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+-
+-		// Check if we're setting a value
+-		if ( value !== undefined ) {
+-			type = typeof value;
+-
+-			// convert relative number strings (+= or -=) to relative numbers. #7345
+-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+-				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+-				// Fixes bug #9237
+-				type = "number";
+-			}
+-
+-			// Make sure that NaN and null values aren't set. See: #7116
+-			if ( value == null || type === "number" && isNaN( value ) ) {
+-				return;
+-			}
+-
+-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+-				value += "px";
+-			}
+-
+-			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+-			// but it would mean to define eight (for every problematic property) identical functions
+-			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+-				style[ name ] = "inherit";
+-			}
+-
+-			// If a hook was provided, use that value, otherwise just set the specified value
+-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+-
+-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+-				// Fixes bug #5509
+-				try {
+-					style[ name ] = value;
+-				} catch(e) {}
+-			}
+-
+-		} else {
+-			// If a hook was provided get the non-computed value from there
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+-				return ret;
+-			}
+-
+-			// Otherwise just get the value from the style object
+-			return style[ name ];
+-		}
+-	},
+-
+-	css: function( elem, name, extra, styles ) {
+-		var num, val, hooks,
+-			origName = jQuery.camelCase( name );
+-
+-		// Make sure that we're working with the right name
+-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+-
+-		// gets hook for the prefixed version
+-		// followed by the unprefixed version
+-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+-
+-		// If a hook was provided get the computed value from there
+-		if ( hooks && "get" in hooks ) {
+-			val = hooks.get( elem, true, extra );
+-		}
+-
+-		// Otherwise, if a way to get the computed value exists, use that
+-		if ( val === undefined ) {
+-			val = curCSS( elem, name, styles );
+-		}
+-
+-		//convert "normal" to computed value
+-		if ( val === "normal" && name in cssNormalTransform ) {
+-			val = cssNormalTransform[ name ];
+-		}
+-
+-		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+-		if ( extra === "" || extra ) {
+-			num = parseFloat( val );
+-			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+-		}
+-		return val;
+-	},
+-
+-	// A method for quickly swapping in/out CSS properties to get correct calculations
+-	swap: function( elem, options, callback, args ) {
+-		var ret, name,
+-			old = {};
+-
+-		// Remember the old values, and insert the new ones
+-		for ( name in options ) {
+-			old[ name ] = elem.style[ name ];
+-			elem.style[ name ] = options[ name ];
+-		}
+-
+-		ret = callback.apply( elem, args || [] );
+-
+-		// Revert the old values
+-		for ( name in options ) {
+-			elem.style[ name ] = old[ name ];
+-		}
+-
+-		return ret;
+-	}
+-});
+-
+-// NOTE: we've included the "window" in window.getComputedStyle
+-// because jsdom on node.js will break without it.
+-if ( window.getComputedStyle ) {
+-	getStyles = function( elem ) {
+-		return window.getComputedStyle( elem, null );
+-	};
+-
+-	curCSS = function( elem, name, _computed ) {
+-		var width, minWidth, maxWidth,
+-			computed = _computed || getStyles( elem ),
+-
+-			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+-			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+-			style = elem.style;
+-
+-		if ( computed ) {
+-
+-			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+-				ret = jQuery.style( elem, name );
+-			}
+-
+-			// A tribute to the "awesome hack by Dean Edwards"
+-			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+-			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+-			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+-			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+-
+-				// Remember the original values
+-				width = style.width;
+-				minWidth = style.minWidth;
+-				maxWidth = style.maxWidth;
+-
+-				// Put in the new values to get a computed value out
+-				style.minWidth = style.maxWidth = style.width = ret;
+-				ret = computed.width;
+-
+-				// Revert the changed values
+-				style.width = width;
+-				style.minWidth = minWidth;
+-				style.maxWidth = maxWidth;
+-			}
+-		}
+-
+-		return ret;
+-	};
+-} else if ( document.documentElement.currentStyle ) {
+-	getStyles = function( elem ) {
+-		return elem.currentStyle;
+-	};
+-
+-	curCSS = function( elem, name, _computed ) {
+-		var left, rs, rsLeft,
+-			computed = _computed || getStyles( elem ),
+-			ret = computed ? computed[ name ] : undefined,
+-			style = elem.style;
+-
+-		// Avoid setting ret to empty string here
+-		// so we don't default to auto
+-		if ( ret == null && style && style[ name ] ) {
+-			ret = style[ name ];
+-		}
+-
+-		// From the awesome hack by Dean Edwards
+-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+-
+-		// If we're not dealing with a regular pixel number
+-		// but a number that has a weird ending, we need to convert it to pixels
+-		// but not position css attributes, as those are proportional to the parent element instead
+-		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+-		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+-
+-			// Remember the original values
+-			left = style.left;
+-			rs = elem.runtimeStyle;
+-			rsLeft = rs && rs.left;
+-
+-			// Put in the new values to get a computed value out
+-			if ( rsLeft ) {
+-				rs.left = elem.currentStyle.left;
+-			}
+-			style.left = name === "fontSize" ? "1em" : ret;
+-			ret = style.pixelLeft + "px";
+-
+-			// Revert the changed values
+-			style.left = left;
+-			if ( rsLeft ) {
+-				rs.left = rsLeft;
+-			}
+-		}
+-
+-		return ret === "" ? "auto" : ret;
+-	};
+-}
+-
+-function setPositiveNumber( elem, value, subtract ) {
+-	var matches = rnumsplit.exec( value );
+-	return matches ?
+-		// Guard against undefined "subtract", e.g., when used as in cssHooks
+-		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+-		value;
+-}
+-
+-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+-	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+-		// If we already have the right measurement, avoid augmentation
+-		4 :
+-		// Otherwise initialize for horizontal or vertical properties
+-		name === "width" ? 1 : 0,
+-
+-		val = 0;
+-
+-	for ( ; i < 4; i += 2 ) {
+-		// both box models exclude margin, so add it if we want it
+-		if ( extra === "margin" ) {
+-			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+-		}
+-
+-		if ( isBorderBox ) {
+-			// border-box includes padding, so remove it if we want content
+-			if ( extra === "content" ) {
+-				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+-			}
+-
+-			// at this point, extra isn't border nor margin, so remove border
+-			if ( extra !== "margin" ) {
+-				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+-			}
+-		} else {
+-			// at this point, extra isn't content, so add padding
+-			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+-
+-			// at this point, extra isn't content nor padding, so add border
+-			if ( extra !== "padding" ) {
+-				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+-			}
+-		}
+-	}
+-
+-	return val;
+-}
+-
+-function getWidthOrHeight( elem, name, extra ) {
+-
+-	// Start with offset property, which is equivalent to the border-box value
+-	var valueIsBorderBox = true,
+-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+-		styles = getStyles( elem ),
+-		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+-
+-	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+-	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+-	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+-	if ( val <= 0 || val == null ) {
+-		// Fall back to computed then uncomputed css if necessary
+-		val = curCSS( elem, name, styles );
+-		if ( val < 0 || val == null ) {
+-			val = elem.style[ name ];
+-		}
+-
+-		// Computed unit is not pixels. Stop here and return.
+-		if ( rnumnonpx.test(val) ) {
+-			return val;
+-		}
+-
+-		// we need the check for style in case a browser which returns unreliable values
+-		// for getComputedStyle silently falls back to the reliable elem.style
+-		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+-
+-		// Normalize "", auto, and prepare for extra
+-		val = parseFloat( val ) || 0;
+-	}
+-
+-	// use the active box-sizing model to add/subtract irrelevant styles
+-	return ( val +
+-		augmentWidthOrHeight(
+-			elem,
+-			name,
+-			extra || ( isBorderBox ? "border" : "content" ),
+-			valueIsBorderBox,
+-			styles
+-		)
+-	) + "px";
+-}
+-
+-// Try to determine the default display value of an element
+-function css_defaultDisplay( nodeName ) {
+-	var doc = document,
+-		display = elemdisplay[ nodeName ];
+-
+-	if ( !display ) {
+-		display = actualDisplay( nodeName, doc );
+-
+-		// If the simple way fails, read from inside an iframe
+-		if ( display === "none" || !display ) {
+-			// Use the already-created iframe if possible
+-			iframe = ( iframe ||
+-				jQuery("<iframe frameborder='0' width='0' height='0'/>")
+-				.css( "cssText", "display:block !important" )
+-			).appendTo( doc.documentElement );
+-
+-			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+-			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+-			doc.write("<!doctype html><html><body>");
+-			doc.close();
+-
+-			display = actualDisplay( nodeName, doc );
+-			iframe.detach();
+-		}
+-
+-		// Store the correct default display
+-		elemdisplay[ nodeName ] = display;
+-	}
+-
+-	return display;
+-}
+-
+-// Called ONLY from within css_defaultDisplay
+-function actualDisplay( name, doc ) {
+-	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+-		display = jQuery.css( elem[0], "display" );
+-	elem.remove();
+-	return display;
+-}
+-
+-jQuery.each([ "height", "width" ], function( i, name ) {
+-	jQuery.cssHooks[ name ] = {
+-		get: function( elem, computed, extra ) {
+-			if ( computed ) {
+-				// certain elements can have dimension info if we invisibly show them
+-				// however, it must have a current display style that would benefit from this
+-				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+-					jQuery.swap( elem, cssShow, function() {
+-						return getWidthOrHeight( elem, name, extra );
+-					}) :
+-					getWidthOrHeight( elem, name, extra );
+-			}
+-		},
+-
+-		set: function( elem, value, extra ) {
+-			var styles = extra && getStyles( elem );
+-			return setPositiveNumber( elem, value, extra ?
+-				augmentWidthOrHeight(
+-					elem,
+-					name,
+-					extra,
+-					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+-					styles
+-				) : 0
+-			);
+-		}
+-	};
+-});
+-
+-if ( !jQuery.support.opacity ) {
+-	jQuery.cssHooks.opacity = {
+-		get: function( elem, computed ) {
+-			// IE uses filters for opacity
+-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+-				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+-				computed ? "1" : "";
+-		},
+-
+-		set: function( elem, value ) {
+-			var style = elem.style,
+-				currentStyle = elem.currentStyle,
+-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+-				filter = currentStyle && currentStyle.filter || style.filter || "";
+-
+-			// IE has trouble with opacity if it does not have layout
+-			// Force it by setting the zoom level
+-			style.zoom = 1;
+-
+-			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+-			// if value === "", then remove inline opacity #12685
+-			if ( ( value >= 1 || value === "" ) &&
+-					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+-					style.removeAttribute ) {
+-
+-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+-				// style.removeAttribute is IE Only, but so apparently is this code path...
+-				style.removeAttribute( "filter" );
+-
+-				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+-				if ( value === "" || currentStyle && !currentStyle.filter ) {
+-					return;
+-				}
+-			}
+-
+-			// otherwise, set new filter values
+-			style.filter = ralpha.test( filter ) ?
+-				filter.replace( ralpha, opacity ) :
+-				filter + " " + opacity;
+-		}
+-	};
+-}
+-
+-// These hooks cannot be added until DOM ready because the support test
+-// for it is not run until after DOM ready
+-jQuery(function() {
+-	if ( !jQuery.support.reliableMarginRight ) {
+-		jQuery.cssHooks.marginRight = {
+-			get: function( elem, computed ) {
+-				if ( computed ) {
+-					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-					// Work around by temporarily setting element display to inline-block
+-					return jQuery.swap( elem, { "display": "inline-block" },
+-						curCSS, [ elem, "marginRight" ] );
+-				}
+-			}
+-		};
+-	}
+-
+-	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+-	// getComputedStyle returns percent when specified for top/left/bottom/right
+-	// rather than make the css module depend on the offset module, we just check for it here
+-	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+-		jQuery.each( [ "top", "left" ], function( i, prop ) {
+-			jQuery.cssHooks[ prop ] = {
+-				get: function( elem, computed ) {
+-					if ( computed ) {
+-						computed = curCSS( elem, prop );
+-						// if curCSS returns percentage, fallback to offset
+-						return rnumnonpx.test( computed ) ?
+-							jQuery( elem ).position()[ prop ] + "px" :
+-							computed;
+-					}
+-				}
+-			};
+-		});
+-	}
+-
+-});
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.hidden = function( elem ) {
+-		// Support: Opera <= 12.12
+-		// Opera reports offsetWidths and offsetHeights less than zero on some elements
+-		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+-			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+-	};
+-
+-	jQuery.expr.filters.visible = function( elem ) {
+-		return !jQuery.expr.filters.hidden( elem );
+-	};
+-}
+-
+-// These hooks are used by animate to expand properties
+-jQuery.each({
+-	margin: "",
+-	padding: "",
+-	border: "Width"
+-}, function( prefix, suffix ) {
+-	jQuery.cssHooks[ prefix + suffix ] = {
+-		expand: function( value ) {
+-			var i = 0,
+-				expanded = {},
+-
+-				// assumes a single number if not a string
+-				parts = typeof value === "string" ? value.split(" ") : [ value ];
+-
+-			for ( ; i < 4; i++ ) {
+-				expanded[ prefix + cssExpand[ i ] + suffix ] =
+-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+-			}
+-
+-			return expanded;
+-		}
+-	};
+-
+-	if ( !rmargin.test( prefix ) ) {
+-		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+-	}
+-});
+-var r20 = /%20/g,
+-	rbracket = /\[\]$/,
+-	rCRLF = /\r?\n/g,
+-	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+-	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+-
+-jQuery.fn.extend({
+-	serialize: function() {
+-		return jQuery.param( this.serializeArray() );
+-	},
+-	serializeArray: function() {
+-		return this.map(function(){
+-			// Can add propHook for "elements" to filter or add form elements
+-			var elements = jQuery.prop( this, "elements" );
+-			return elements ? jQuery.makeArray( elements ) : this;
+-		})
+-		.filter(function(){
+-			var type = this.type;
+-			// Use .is(":disabled") so that fieldset[disabled] works
+-			return this.name && !jQuery( this ).is( ":disabled" ) &&
+-				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+-				( this.checked || !manipulation_rcheckableType.test( type ) );
+-		})
+-		.map(function( i, elem ){
+-			var val = jQuery( this ).val();
+-
+-			return val == null ?
+-				null :
+-				jQuery.isArray( val ) ?
+-					jQuery.map( val, function( val ){
+-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-					}) :
+-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-		}).get();
+-	}
+-});
+-
+-//Serialize an array of form elements or a set of
+-//key/values into a query string
+-jQuery.param = function( a, traditional ) {
+-	var prefix,
+-		s = [],
+-		add = function( key, value ) {
+-			// If value is a function, invoke it and return its value
+-			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+-			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+-		};
+-
+-	// Set traditional to true for jQuery <= 1.3.2 behavior.
+-	if ( traditional === undefined ) {
+-		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+-	}
+-
+-	// If an array was passed in, assume that it is an array of form elements.
+-	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+-		// Serialize the form elements
+-		jQuery.each( a, function() {
+-			add( this.name, this.value );
+-		});
+-
+-	} else {
+-		// If traditional, encode the "old" way (the way 1.3.2 or older
+-		// did it), otherwise encode params recursively.
+-		for ( prefix in a ) {
+-			buildParams( prefix, a[ prefix ], traditional, add );
+-		}
+-	}
+-
+-	// Return the resulting serialization
+-	return s.join( "&" ).replace( r20, "+" );
+-};
+-
+-function buildParams( prefix, obj, traditional, add ) {
+-	var name;
+-
+-	if ( jQuery.isArray( obj ) ) {
+-		// Serialize array item.
+-		jQuery.each( obj, function( i, v ) {
+-			if ( traditional || rbracket.test( prefix ) ) {
+-				// Treat each array item as a scalar.
+-				add( prefix, v );
+-
+-			} else {
+-				// Item is non-scalar (array or object), encode its numeric index.
+-				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+-			}
+-		});
+-
+-	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+-		// Serialize object item.
+-		for ( name in obj ) {
+-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+-		}
+-
+-	} else {
+-		// Serialize scalar item.
+-		add( prefix, obj );
+-	}
+-}
+-jQuery.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( i, name ) {
+-
+-	// Handle event binding
+-	jQuery.fn[ name ] = function( data, fn ) {
+-		return arguments.length > 0 ?
+-			this.on( name, null, data, fn ) :
+-			this.trigger( name );
+-	};
+-});
+-
+-jQuery.fn.hover = function( fnOver, fnOut ) {
+-	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+-};
+-var
+-	// Document location
+-	ajaxLocParts,
+-	ajaxLocation,
+-	ajax_nonce = jQuery.now(),
+-
+-	ajax_rquery = /\?/,
+-	rhash = /#.*$/,
+-	rts = /([?&])_=[^&]*/,
+-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+-	// #7653, #8125, #8152: local protocol detection
+-	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+-	rnoContent = /^(?:GET|HEAD)$/,
+-	rprotocol = /^\/\//,
+-	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+-
+-	// Keep a copy of the old load method
+-	_load = jQuery.fn.load,
+-
+-	/* Prefilters
+-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+-	 * 2) These are called:
+-	 *    - BEFORE asking for a transport
+-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+-	 * 3) key is the dataType
+-	 * 4) the catchall symbol "*" can be used
+-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+-	 */
+-	prefilters = {},
+-
+-	/* Transports bindings
+-	 * 1) key is the dataType
+-	 * 2) the catchall symbol "*" can be used
+-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+-	 */
+-	transports = {},
+-
+-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+-	allTypes = "*/".concat("*");
+-
+-// #8138, IE may throw an exception when accessing
+-// a field from window.location if document.domain has been set
+-try {
+-	ajaxLocation = location.href;
+-} catch( e ) {
+-	// Use the href attribute of an A element
+-	// since IE will modify it given document.location
+-	ajaxLocation = document.createElement( "a" );
+-	ajaxLocation.href = "";
+-	ajaxLocation = ajaxLocation.href;
+-}
+-
+-// Segment location into parts
+-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+-
+-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+-function addToPrefiltersOrTransports( structure ) {
+-
+-	// dataTypeExpression is optional and defaults to "*"
+-	return function( dataTypeExpression, func ) {
+-
+-		if ( typeof dataTypeExpression !== "string" ) {
+-			func = dataTypeExpression;
+-			dataTypeExpression = "*";
+-		}
+-
+-		var dataType,
+-			i = 0,
+-			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+-
+-		if ( jQuery.isFunction( func ) ) {
+-			// For each dataType in the dataTypeExpression
+-			while ( (dataType = dataTypes[i++]) ) {
+-				// Prepend if requested
+-				if ( dataType[0] === "+" ) {
+-					dataType = dataType.slice( 1 ) || "*";
+-					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+-
+-				// Otherwise append
+-				} else {
+-					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+-				}
+-			}
+-		}
+-	};
+-}
+-
+-// Base inspection function for prefilters and transports
+-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+-
+-	var inspected = {},
+-		seekingTransport = ( structure === transports );
+-
+-	function inspect( dataType ) {
+-		var selected;
+-		inspected[ dataType ] = true;
+-		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+-			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+-			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+-				options.dataTypes.unshift( dataTypeOrTransport );
+-				inspect( dataTypeOrTransport );
+-				return false;
+-			} else if ( seekingTransport ) {
+-				return !( selected = dataTypeOrTransport );
+-			}
+-		});
+-		return selected;
+-	}
+-
+-	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+-}
+-
+-// A special extend for ajax options
+-// that takes "flat" options (not to be deep extended)
+-// Fixes #9887
+-function ajaxExtend( target, src ) {
+-	var deep, key,
+-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+-
+-	for ( key in src ) {
+-		if ( src[ key ] !== undefined ) {
+-			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+-		}
+-	}
+-	if ( deep ) {
+-		jQuery.extend( true, target, deep );
+-	}
+-
+-	return target;
+-}
+-
+-jQuery.fn.load = function( url, params, callback ) {
+-	if ( typeof url !== "string" && _load ) {
+-		return _load.apply( this, arguments );
+-	}
+-
+-	var selector, response, type,
+-		self = this,
+-		off = url.indexOf(" ");
+-
+-	if ( off >= 0 ) {
+-		selector = url.slice( off, url.length );
+-		url = url.slice( 0, off );
+-	}
+-
+-	// If it's a function
+-	if ( jQuery.isFunction( params ) ) {
+-
+-		// We assume that it's the callback
+-		callback = params;
+-		params = undefined;
+-
+-	// Otherwise, build a param string
+-	} else if ( params && typeof params === "object" ) {
+-		type = "POST";
+-	}
+-
+-	// If we have elements to modify, make the request
+-	if ( self.length > 0 ) {
+-		jQuery.ajax({
+-			url: url,
+-
+-			// if "type" variable is undefined, then "GET" method will be used
+-			type: type,
+-			dataType: "html",
+-			data: params
+-		}).done(function( responseText ) {
+-
+-			// Save response for use in complete callback
+-			response = arguments;
+-
+-			self.html( selector ?
+-
+-				// If a selector was specified, locate the right elements in a dummy div
+-				// Exclude scripts to avoid IE 'Permission Denied' errors
+-				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+-
+-				// Otherwise use the full result
+-				responseText );
+-
+-		}).complete( callback && function( jqXHR, status ) {
+-			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+-		});
+-	}
+-
+-	return this;
+-};
+-
+-// Attach a bunch of functions for handling common AJAX events
+-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+-	jQuery.fn[ type ] = function( fn ){
+-		return this.on( type, fn );
+-	};
+-});
+-
+-jQuery.each( [ "get", "post" ], function( i, method ) {
+-	jQuery[ method ] = function( url, data, callback, type ) {
+-		// shift arguments if data argument was omitted
+-		if ( jQuery.isFunction( data ) ) {
+-			type = type || callback;
+-			callback = data;
+-			data = undefined;
+-		}
+-
+-		return jQuery.ajax({
+-			url: url,
+-			type: method,
+-			dataType: type,
+-			data: data,
+-			success: callback
+-		});
+-	};
+-});
+-
+-jQuery.extend({
+-
+-	// Counter for holding the number of active queries
+-	active: 0,
+-
+-	// Last-Modified header cache for next request
+-	lastModified: {},
+-	etag: {},
+-
+-	ajaxSettings: {
+-		url: ajaxLocation,
+-		type: "GET",
+-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+-		global: true,
+-		processData: true,
+-		async: true,
+-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+-		/*
+-		timeout: 0,
+-		data: null,
+-		dataType: null,
+-		username: null,
+-		password: null,
+-		cache: null,
+-		throws: false,
+-		traditional: false,
+-		headers: {},
+-		*/
+-
+-		accepts: {
+-			"*": allTypes,
+-			text: "text/plain",
+-			html: "text/html",
+-			xml: "application/xml, text/xml",
+-			json: "application/json, text/javascript"
+-		},
+-
+-		contents: {
+-			xml: /xml/,
+-			html: /html/,
+-			json: /json/
+-		},
+-
+-		responseFields: {
+-			xml: "responseXML",
+-			text: "responseText"
+-		},
+-
+-		// Data converters
+-		// Keys separate source (or catchall "*") and destination types with a single space
+-		converters: {
+-
+-			// Convert anything to text
+-			"* text": window.String,
+-
+-			// Text to html (true = no transformation)
+-			"text html": true,
+-
+-			// Evaluate text as a json expression
+-			"text json": jQuery.parseJSON,
+-
+-			// Parse text as xml
+-			"text xml": jQuery.parseXML
+-		},
+-
+-		// For options that shouldn't be deep extended:
+-		// you can add your own custom options here if
+-		// and when you create one that shouldn't be
+-		// deep extended (see ajaxExtend)
+-		flatOptions: {
+-			url: true,
+-			context: true
+-		}
+-	},
+-
+-	// Creates a full fledged settings object into target
+-	// with both ajaxSettings and settings fields.
+-	// If target is omitted, writes into ajaxSettings.
+-	ajaxSetup: function( target, settings ) {
+-		return settings ?
+-
+-			// Building a settings object
+-			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+-
+-			// Extending ajaxSettings
+-			ajaxExtend( jQuery.ajaxSettings, target );
+-	},
+-
+-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+-	ajaxTransport: addToPrefiltersOrTransports( transports ),
+-
+-	// Main method
+-	ajax: function( url, options ) {
+-
+-		// If url is an object, simulate pre-1.5 signature
+-		if ( typeof url === "object" ) {
+-			options = url;
+-			url = undefined;
+-		}
+-
+-		// Force options to be an object
+-		options = options || {};
+-
+-		var // Cross-domain detection vars
+-			parts,
+-			// Loop variable
+-			i,
+-			// URL without anti-cache param
+-			cacheURL,
+-			// Response headers as string
+-			responseHeadersString,
+-			// timeout handle
+-			timeoutTimer,
+-
+-			// To know if global events are to be dispatched
+-			fireGlobals,
+-
+-			transport,
+-			// Response headers
+-			responseHeaders,
+-			// Create the final options object
+-			s = jQuery.ajaxSetup( {}, options ),
+-			// Callbacks context
+-			callbackContext = s.context || s,
+-			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+-			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+-				jQuery( callbackContext ) :
+-				jQuery.event,
+-			// Deferreds
+-			deferred = jQuery.Deferred(),
+-			completeDeferred = jQuery.Callbacks("once memory"),
+-			// Status-dependent callbacks
+-			statusCode = s.statusCode || {},
+-			// Headers (they are sent all at once)
+-			requestHeaders = {},
+-			requestHeadersNames = {},
+-			// The jqXHR state
+-			state = 0,
+-			// Default abort message
+-			strAbort = "canceled",
+-			// Fake xhr
+-			jqXHR = {
+-				readyState: 0,
+-
+-				// Builds headers hashtable if needed
+-				getResponseHeader: function( key ) {
+-					var match;
+-					if ( state === 2 ) {
+-						if ( !responseHeaders ) {
+-							responseHeaders = {};
+-							while ( (match = rheaders.exec( responseHeadersString )) ) {
+-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+-							}
+-						}
+-						match = responseHeaders[ key.toLowerCase() ];
+-					}
+-					return match == null ? null : match;
+-				},
+-
+-				// Raw string
+-				getAllResponseHeaders: function() {
+-					return state === 2 ? responseHeadersString : null;
+-				},
+-
+-				// Caches the header
+-				setRequestHeader: function( name, value ) {
+-					var lname = name.toLowerCase();
+-					if ( !state ) {
+-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+-						requestHeaders[ name ] = value;
+-					}
+-					return this;
+-				},
+-
+-				// Overrides response content-type header
+-				overrideMimeType: function( type ) {
+-					if ( !state ) {
+-						s.mimeType = type;
+-					}
+-					return this;
+-				},
+-
+-				// Status-dependent callbacks
+-				statusCode: function( map ) {
+-					var code;
+-					if ( map ) {
+-						if ( state < 2 ) {
+-							for ( code in map ) {
+-								// Lazy-add the new callback in a way that preserves old ones
+-								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+-							}
+-						} else {
+-							// Execute the appropriate callbacks
+-							jqXHR.always( map[ jqXHR.status ] );
+-						}
+-					}
+-					return this;
+-				},
+-
+-				// Cancel the request
+-				abort: function( statusText ) {
+-					var finalText = statusText || strAbort;
+-					if ( transport ) {
+-						transport.abort( finalText );
+-					}
+-					done( 0, finalText );
+-					return this;
+-				}
+-			};
+-
+-		// Attach deferreds
+-		deferred.promise( jqXHR ).complete = completeDeferred.add;
+-		jqXHR.success = jqXHR.done;
+-		jqXHR.error = jqXHR.fail;
+-
+-		// Remove hash character (#7531: and string promotion)
+-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+-		// Handle falsy url in the settings object (#10093: consistency with old signature)
+-		// We also use the url parameter if available
+-		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+-
+-		// Alias method option to type as per ticket #12004
+-		s.type = options.method || options.type || s.method || s.type;
+-
+-		// Extract dataTypes list
+-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+-
+-		// A cross-domain request is in order when we have a protocol:host:port mismatch
+-		if ( s.crossDomain == null ) {
+-			parts = rurl.exec( s.url.toLowerCase() );
+-			s.crossDomain = !!( parts &&
+-				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+-			);
+-		}
+-
+-		// Convert data if not already a string
+-		if ( s.data && s.processData && typeof s.data !== "string" ) {
+-			s.data = jQuery.param( s.data, s.traditional );
+-		}
+-
+-		// Apply prefilters
+-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+-
+-		// If request was aborted inside a prefilter, stop there
+-		if ( state === 2 ) {
+-			return jqXHR;
+-		}
+-
+-		// We can fire global events as of now if asked to
+-		fireGlobals = s.global;
+-
+-		// Watch for a new set of requests
+-		if ( fireGlobals && jQuery.active++ === 0 ) {
+-			jQuery.event.trigger("ajaxStart");
+-		}
+-
+-		// Uppercase the type
+-		s.type = s.type.toUpperCase();
+-
+-		// Determine if request has content
+-		s.hasContent = !rnoContent.test( s.type );
+-
+-		// Save the URL in case we're toying with the If-Modified-Since
+-		// and/or If-None-Match header later on
+-		cacheURL = s.url;
+-
+-		// More options handling for requests with no content
+-		if ( !s.hasContent ) {
+-
+-			// If data is available, append data to url
+-			if ( s.data ) {
+-				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+-				// #9682: remove data so that it's not used in an eventual retry
+-				delete s.data;
+-			}
+-
+-			// Add anti-cache in url if needed
+-			if ( s.cache === false ) {
+-				s.url = rts.test( cacheURL ) ?
+-
+-					// If there is already a '_' parameter, set its value
+-					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+-
+-					// Otherwise add one to the end
+-					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+-			}
+-		}
+-
+-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-		if ( s.ifModified ) {
+-			if ( jQuery.lastModified[ cacheURL ] ) {
+-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+-			}
+-			if ( jQuery.etag[ cacheURL ] ) {
+-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+-			}
+-		}
+-
+-		// Set the correct header, if data is being sent
+-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+-		}
+-
+-		// Set the Accepts header for the server, depending on the dataType
+-		jqXHR.setRequestHeader(
+-			"Accept",
+-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+-				s.accepts[ "*" ]
+-		);
+-
+-		// Check for headers option
+-		for ( i in s.headers ) {
+-			jqXHR.setRequestHeader( i, s.headers[ i ] );
+-		}
+-
+-		// Allow custom headers/mimetypes and early abort
+-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+-			// Abort if not done already and return
+-			return jqXHR.abort();
+-		}
+-
+-		// aborting is no longer a cancellation
+-		strAbort = "abort";
+-
+-		// Install callbacks on deferreds
+-		for ( i in { success: 1, error: 1, complete: 1 } ) {
+-			jqXHR[ i ]( s[ i ] );
+-		}
+-
+-		// Get transport
+-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+-
+-		// If no transport, we auto-abort
+-		if ( !transport ) {
+-			done( -1, "No Transport" );
+-		} else {
+-			jqXHR.readyState = 1;
+-
+-			// Send global event
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+-			}
+-			// Timeout
+-			if ( s.async && s.timeout > 0 ) {
+-				timeoutTimer = setTimeout(function() {
+-					jqXHR.abort("timeout");
+-				}, s.timeout );
+-			}
+-
+-			try {
+-				state = 1;
+-				transport.send( requestHeaders, done );
+-			} catch ( e ) {
+-				// Propagate exception as error if not done
+-				if ( state < 2 ) {
+-					done( -1, e );
+-				// Simply rethrow otherwise
+-				} else {
+-					throw e;
+-				}
+-			}
+-		}
+-
+-		// Callback for when everything is done
+-		function done( status, nativeStatusText, responses, headers ) {
+-			var isSuccess, success, error, response, modified,
+-				statusText = nativeStatusText;
+-
+-			// Called once
+-			if ( state === 2 ) {
+-				return;
+-			}
+-
+-			// State is "done" now
+-			state = 2;
+-
+-			// Clear timeout if it exists
+-			if ( timeoutTimer ) {
+-				clearTimeout( timeoutTimer );
+-			}
+-
+-			// Dereference transport for early garbage collection
+-			// (no matter how long the jqXHR object will be used)
+-			transport = undefined;
+-
+-			// Cache response headers
+-			responseHeadersString = headers || "";
+-
+-			// Set readyState
+-			jqXHR.readyState = status > 0 ? 4 : 0;
+-
+-			// Get response data
+-			if ( responses ) {
+-				response = ajaxHandleResponses( s, jqXHR, responses );
+-			}
+-
+-			// If successful, handle type chaining
+-			if ( status >= 200 && status < 300 || status === 304 ) {
+-
+-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-				if ( s.ifModified ) {
+-					modified = jqXHR.getResponseHeader("Last-Modified");
+-					if ( modified ) {
+-						jQuery.lastModified[ cacheURL ] = modified;
+-					}
+-					modified = jqXHR.getResponseHeader("etag");
+-					if ( modified ) {
+-						jQuery.etag[ cacheURL ] = modified;
+-					}
+-				}
+-
+-				// if no content
+-				if ( status === 204 ) {
+-					isSuccess = true;
+-					statusText = "nocontent";
+-
+-				// if not modified
+-				} else if ( status === 304 ) {
+-					isSuccess = true;
+-					statusText = "notmodified";
+-
+-				// If we have data, let's convert it
+-				} else {
+-					isSuccess = ajaxConvert( s, response );
+-					statusText = isSuccess.state;
+-					success = isSuccess.data;
+-					error = isSuccess.error;
+-					isSuccess = !error;
+-				}
+-			} else {
+-				// We extract error from statusText
+-				// then normalize statusText and status for non-aborts
+-				error = statusText;
+-				if ( status || !statusText ) {
+-					statusText = "error";
+-					if ( status < 0 ) {
+-						status = 0;
+-					}
+-				}
+-			}
+-
+-			// Set data for the fake xhr object
+-			jqXHR.status = status;
+-			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+-
+-			// Success/Error
+-			if ( isSuccess ) {
+-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+-			} else {
+-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+-			}
+-
+-			// Status-dependent callbacks
+-			jqXHR.statusCode( statusCode );
+-			statusCode = undefined;
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+-					[ jqXHR, s, isSuccess ? success : error ] );
+-			}
+-
+-			// Complete
+-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+-				// Handle the global AJAX counter
+-				if ( !( --jQuery.active ) ) {
+-					jQuery.event.trigger("ajaxStop");
+-				}
+-			}
+-		}
+-
+-		return jqXHR;
+-	},
+-
+-	getScript: function( url, callback ) {
+-		return jQuery.get( url, undefined, callback, "script" );
+-	},
+-
+-	getJSON: function( url, data, callback ) {
+-		return jQuery.get( url, data, callback, "json" );
+-	}
+-});
+-
+-/* Handles responses to an ajax request:
+- * - sets all responseXXX fields accordingly
+- * - finds the right dataType (mediates between content-type and expected dataType)
+- * - returns the corresponding response
+- */
+-function ajaxHandleResponses( s, jqXHR, responses ) {
+-	var firstDataType, ct, finalDataType, type,
+-		contents = s.contents,
+-		dataTypes = s.dataTypes,
+-		responseFields = s.responseFields;
+-
+-	// Fill responseXXX fields
+-	for ( type in responseFields ) {
+-		if ( type in responses ) {
+-			jqXHR[ responseFields[type] ] = responses[ type ];
+-		}
+-	}
+-
+-	// Remove auto dataType and get content-type in the process
+-	while( dataTypes[ 0 ] === "*" ) {
+-		dataTypes.shift();
+-		if ( ct === undefined ) {
+-			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+-		}
+-	}
+-
+-	// Check if we're dealing with a known content-type
+-	if ( ct ) {
+-		for ( type in contents ) {
+-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+-				dataTypes.unshift( type );
+-				break;
+-			}
+-		}
+-	}
+-
+-	// Check to see if we have a response for the expected dataType
+-	if ( dataTypes[ 0 ] in responses ) {
+-		finalDataType = dataTypes[ 0 ];
+-	} else {
+-		// Try convertible dataTypes
+-		for ( type in responses ) {
+-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+-				finalDataType = type;
+-				break;
+-			}
+-			if ( !firstDataType ) {
+-				firstDataType = type;
+-			}
+-		}
+-		// Or just use first one
+-		finalDataType = finalDataType || firstDataType;
+-	}
+-
+-	// If we found a dataType
+-	// We add the dataType to the list if needed
+-	// and return the corresponding response
+-	if ( finalDataType ) {
+-		if ( finalDataType !== dataTypes[ 0 ] ) {
+-			dataTypes.unshift( finalDataType );
+-		}
+-		return responses[ finalDataType ];
+-	}
+-}
+-
+-// Chain conversions given the request and the original response
+-function ajaxConvert( s, response ) {
+-	var conv2, current, conv, tmp,
+-		converters = {},
+-		i = 0,
+-		// Work with a copy of dataTypes in case we need to modify it for conversion
+-		dataTypes = s.dataTypes.slice(),
+-		prev = dataTypes[ 0 ];
+-
+-	// Apply the dataFilter if provided
+-	if ( s.dataFilter ) {
+-		response = s.dataFilter( response, s.dataType );
+-	}
+-
+-	// Create converters map with lowercased keys
+-	if ( dataTypes[ 1 ] ) {
+-		for ( conv in s.converters ) {
+-			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+-		}
+-	}
+-
+-	// Convert to each sequential dataType, tolerating list modification
+-	for ( ; (current = dataTypes[++i]); ) {
+-
+-		// There's only work to do if current dataType is non-auto
+-		if ( current !== "*" ) {
+-
+-			// Convert response if prev dataType is non-auto and differs from current
+-			if ( prev !== "*" && prev !== current ) {
+-
+-				// Seek a direct converter
+-				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+-
+-				// If none found, seek a pair
+-				if ( !conv ) {
+-					for ( conv2 in converters ) {
+-
+-						// If conv2 outputs current
+-						tmp = conv2.split(" ");
+-						if ( tmp[ 1 ] === current ) {
+-
+-							// If prev can be converted to accepted input
+-							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+-								converters[ "* " + tmp[ 0 ] ];
+-							if ( conv ) {
+-								// Condense equivalence converters
+-								if ( conv === true ) {
+-									conv = converters[ conv2 ];
+-
+-								// Otherwise, insert the intermediate dataType
+-								} else if ( converters[ conv2 ] !== true ) {
+-									current = tmp[ 0 ];
+-									dataTypes.splice( i--, 0, current );
+-								}
+-
+-								break;
+-							}
+-						}
+-					}
+-				}
+-
+-				// Apply converter (if not an equivalence)
+-				if ( conv !== true ) {
+-
+-					// Unless errors are allowed to bubble, catch and return them
+-					if ( conv && s["throws"] ) {
+-						response = conv( response );
+-					} else {
+-						try {
+-							response = conv( response );
+-						} catch ( e ) {
+-							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+-						}
+-					}
+-				}
+-			}
+-
+-			// Update prev for next iteration
+-			prev = current;
+-		}
+-	}
+-
+-	return { state: "success", data: response };
+-}
+-// Install script dataType
+-jQuery.ajaxSetup({
+-	accepts: {
+-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+-	},
+-	contents: {
+-		script: /(?:java|ecma)script/
+-	},
+-	converters: {
+-		"text script": function( text ) {
+-			jQuery.globalEval( text );
+-			return text;
+-		}
+-	}
+-});
+-
+-// Handle cache's special case and global
+-jQuery.ajaxPrefilter( "script", function( s ) {
+-	if ( s.cache === undefined ) {
+-		s.cache = false;
+-	}
+-	if ( s.crossDomain ) {
+-		s.type = "GET";
+-		s.global = false;
+-	}
+-});
+-
+-// Bind script tag hack transport
+-jQuery.ajaxTransport( "script", function(s) {
+-
+-	// This transport only deals with cross domain requests
+-	if ( s.crossDomain ) {
+-
+-		var script,
+-			head = document.head || jQuery("head")[0] || document.documentElement;
+-
+-		return {
+-
+-			send: function( _, callback ) {
+-
+-				script = document.createElement("script");
+-
+-				script.async = true;
+-
+-				if ( s.scriptCharset ) {
+-					script.charset = s.scriptCharset;
+-				}
+-
+-				script.src = s.url;
+-
+-				// Attach handlers for all browsers
+-				script.onload = script.onreadystatechange = function( _, isAbort ) {
+-
+-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+-
+-						// Handle memory leak in IE
+-						script.onload = script.onreadystatechange = null;
+-
+-						// Remove the script
+-						if ( script.parentNode ) {
+-							script.parentNode.removeChild( script );
+-						}
+-
+-						// Dereference the script
+-						script = null;
+-
+-						// Callback if not abort
+-						if ( !isAbort ) {
+-							callback( 200, "success" );
+-						}
+-					}
+-				};
+-
+-				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+-				// Use native DOM manipulation to avoid our domManip AJAX trickery
+-				head.insertBefore( script, head.firstChild );
+-			},
+-
+-			abort: function() {
+-				if ( script ) {
+-					script.onload( undefined, true );
+-				}
+-			}
+-		};
+-	}
+-});
+-var oldCallbacks = [],
+-	rjsonp = /(=)\?(?=&|$)|\?\?/;
+-
+-// Default jsonp settings
+-jQuery.ajaxSetup({
+-	jsonp: "callback",
+-	jsonpCallback: function() {
+-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+-		this[ callback ] = true;
+-		return callback;
+-	}
+-});
+-
+-// Detect, normalize options and install callbacks for jsonp requests
+-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+-
+-	var callbackName, overwritten, responseContainer,
+-		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+-			"url" :
+-			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+-		);
+-
+-	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+-	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+-
+-		// Get callback name, remembering preexisting value associated with it
+-		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+-			s.jsonpCallback() :
+-			s.jsonpCallback;
+-
+-		// Insert callback into url or form data
+-		if ( jsonProp ) {
+-			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+-		} else if ( s.jsonp !== false ) {
+-			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+-		}
+-
+-		// Use data converter to retrieve json after script execution
+-		s.converters["script json"] = function() {
+-			if ( !responseContainer ) {
+-				jQuery.error( callbackName + " was not called" );
+-			}
+-			return responseContainer[ 0 ];
+-		};
+-
+-		// force json dataType
+-		s.dataTypes[ 0 ] = "json";
+-
+-		// Install callback
+-		overwritten = window[ callbackName ];
+-		window[ callbackName ] = function() {
+-			responseContainer = arguments;
+-		};
+-
+-		// Clean-up function (fires after converters)
+-		jqXHR.always(function() {
+-			// Restore preexisting value
+-			window[ callbackName ] = overwritten;
+-
+-			// Save back as free
+-			if ( s[ callbackName ] ) {
+-				// make sure that re-using the options doesn't screw things around
+-				s.jsonpCallback = originalSettings.jsonpCallback;
+-
+-				// save the callback name for future use
+-				oldCallbacks.push( callbackName );
+-			}
+-
+-			// Call if it was a function and we have a response
+-			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+-				overwritten( responseContainer[ 0 ] );
+-			}
+-
+-			responseContainer = overwritten = undefined;
+-		});
+-
+-		// Delegate to script
+-		return "script";
+-	}
+-});
+-var xhrCallbacks, xhrSupported,
+-	xhrId = 0,
+-	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+-	xhrOnUnloadAbort = window.ActiveXObject && function() {
+-		// Abort all pending requests
+-		var key;
+-		for ( key in xhrCallbacks ) {
+-			xhrCallbacks[ key ]( undefined, true );
+-		}
+-	};
+-
+-// Functions to create xhrs
+-function createStandardXHR() {
+-	try {
+-		return new window.XMLHttpRequest();
+-	} catch( e ) {}
+-}
+-
+-function createActiveXHR() {
+-	try {
+-		return new window.ActiveXObject("Microsoft.XMLHTTP");
+-	} catch( e ) {}
+-}
+-
+-// Create the request object
+-// (This is still attached to ajaxSettings for backward compatibility)
+-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+-	/* Microsoft failed to properly
+-	 * implement the XMLHttpRequest in IE7 (can't request local files),
+-	 * so we use the ActiveXObject when it is available
+-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+-	 * we need a fallback.
+-	 */
+-	function() {
+-		return !this.isLocal && createStandardXHR() || createActiveXHR();
+-	} :
+-	// For all other browsers, use the standard XMLHttpRequest object
+-	createStandardXHR;
+-
+-// Determine support properties
+-xhrSupported = jQuery.ajaxSettings.xhr();
+-jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+-xhrSupported = jQuery.support.ajax = !!xhrSupported;
+-
+-// Create transport if the browser can provide an xhr
+-if ( xhrSupported ) {
+-
+-	jQuery.ajaxTransport(function( s ) {
+-		// Cross domain only allowed if supported through XMLHttpRequest
+-		if ( !s.crossDomain || jQuery.support.cors ) {
+-
+-			var callback;
+-
+-			return {
+-				send: function( headers, complete ) {
+-
+-					// Get a new xhr
+-					var handle, i,
+-						xhr = s.xhr();
+-
+-					// Open the socket
+-					// Passing null username, generates a login popup on Opera (#2865)
+-					if ( s.username ) {
+-						xhr.open( s.type, s.url, s.async, s.username, s.password );
+-					} else {
+-						xhr.open( s.type, s.url, s.async );
+-					}
+-
+-					// Apply custom fields if provided
+-					if ( s.xhrFields ) {
+-						for ( i in s.xhrFields ) {
+-							xhr[ i ] = s.xhrFields[ i ];
+-						}
+-					}
+-
+-					// Override mime type if needed
+-					if ( s.mimeType && xhr.overrideMimeType ) {
+-						xhr.overrideMimeType( s.mimeType );
+-					}
+-
+-					// X-Requested-With header
+-					// For cross-domain requests, seeing as conditions for a preflight are
+-					// akin to a jigsaw puzzle, we simply never set it to be sure.
+-					// (it can always be set on a per-request basis or even using ajaxSetup)
+-					// For same-domain requests, won't change header if already provided.
+-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+-						headers["X-Requested-With"] = "XMLHttpRequest";
+-					}
+-
+-					// Need an extra try/catch for cross domain requests in Firefox 3
+-					try {
+-						for ( i in headers ) {
+-							xhr.setRequestHeader( i, headers[ i ] );
+-						}
+-					} catch( err ) {}
+-
+-					// Do send the request
+-					// This may raise an exception which is actually
+-					// handled in jQuery.ajax (so no try/catch here)
+-					xhr.send( ( s.hasContent && s.data ) || null );
+-
+-					// Listener
+-					callback = function( _, isAbort ) {
+-						var status, responseHeaders, statusText, responses;
+-
+-						// Firefox throws exceptions when accessing properties
+-						// of an xhr when a network error occurred
+-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+-						try {
+-
+-							// Was never called and is aborted or complete
+-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+-
+-								// Only called once
+-								callback = undefined;
+-
+-								// Do not keep as active anymore
+-								if ( handle ) {
+-									xhr.onreadystatechange = jQuery.noop;
+-									if ( xhrOnUnloadAbort ) {
+-										delete xhrCallbacks[ handle ];
+-									}
+-								}
+-
+-								// If it's an abort
+-								if ( isAbort ) {
+-									// Abort it manually if needed
+-									if ( xhr.readyState !== 4 ) {
+-										xhr.abort();
+-									}
+-								} else {
+-									responses = {};
+-									status = xhr.status;
+-									responseHeaders = xhr.getAllResponseHeaders();
+-
+-									// When requesting binary data, IE6-9 will throw an exception
+-									// on any attempt to access responseText (#11426)
+-									if ( typeof xhr.responseText === "string" ) {
+-										responses.text = xhr.responseText;
+-									}
+-
+-									// Firefox throws an exception when accessing
+-									// statusText for faulty cross-domain requests
+-									try {
+-										statusText = xhr.statusText;
+-									} catch( e ) {
+-										// We normalize with Webkit giving an empty statusText
+-										statusText = "";
+-									}
+-
+-									// Filter status for non standard behaviors
+-
+-									// If the request is local and we have data: assume a success
+-									// (success with no data won't get notified, that's the best we
+-									// can do given current implementations)
+-									if ( !status && s.isLocal && !s.crossDomain ) {
+-										status = responses.text ? 200 : 404;
+-									// IE - #1450: sometimes returns 1223 when it should be 204
+-									} else if ( status === 1223 ) {
+-										status = 204;
+-									}
+-								}
+-							}
+-						} catch( firefoxAccessException ) {
+-							if ( !isAbort ) {
+-								complete( -1, firefoxAccessException );
+-							}
+-						}
+-
+-						// Call complete if needed
+-						if ( responses ) {
+-							complete( status, statusText, responses, responseHeaders );
+-						}
+-					};
+-
+-					if ( !s.async ) {
+-						// if we're in sync mode we fire the callback
+-						callback();
+-					} else if ( xhr.readyState === 4 ) {
+-						// (IE6 & IE7) if it's in cache and has been
+-						// retrieved directly we need to fire the callback
+-						setTimeout( callback );
+-					} else {
+-						handle = ++xhrId;
+-						if ( xhrOnUnloadAbort ) {
+-							// Create the active xhrs callbacks list if needed
+-							// and attach the unload handler
+-							if ( !xhrCallbacks ) {
+-								xhrCallbacks = {};
+-								jQuery( window ).unload( xhrOnUnloadAbort );
+-							}
+-							// Add to list of active xhrs callbacks
+-							xhrCallbacks[ handle ] = callback;
+-						}
+-						xhr.onreadystatechange = callback;
+-					}
+-				},
+-
+-				abort: function() {
+-					if ( callback ) {
+-						callback( undefined, true );
+-					}
+-				}
+-			};
+-		}
+-	});
+-}
+-var fxNow, timerId,
+-	rfxtypes = /^(?:toggle|show|hide)$/,
+-	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+-	rrun = /queueHooks$/,
+-	animationPrefilters = [ defaultPrefilter ],
+-	tweeners = {
+-		"*": [function( prop, value ) {
+-			var end, unit,
+-				tween = this.createTween( prop, value ),
+-				parts = rfxnum.exec( value ),
+-				target = tween.cur(),
+-				start = +target || 0,
+-				scale = 1,
+-				maxIterations = 20;
+-
+-			if ( parts ) {
+-				end = +parts[2];
+-				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+-
+-				// We need to compute starting value
+-				if ( unit !== "px" && start ) {
+-					// Iteratively approximate from a nonzero starting point
+-					// Prefer the current property, because this process will be trivial if it uses the same units
+-					// Fallback to end or a simple constant
+-					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+-
+-					do {
+-						// If previous iteration zeroed out, double until we get *something*
+-						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+-						scale = scale || ".5";
+-
+-						// Adjust and apply
+-						start = start / scale;
+-						jQuery.style( tween.elem, prop, start + unit );
+-
+-					// Update scale, tolerating zero or NaN from tween.cur()
+-					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+-					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+-				}
+-
+-				tween.unit = unit;
+-				tween.start = start;
+-				// If a +=/-= token was provided, we're doing a relative animation
+-				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+-			}
+-			return tween;
+-		}]
+-	};
+-
+-// Animations created synchronously will run synchronously
+-function createFxNow() {
+-	setTimeout(function() {
+-		fxNow = undefined;
+-	});
+-	return ( fxNow = jQuery.now() );
+-}
+-
+-function createTweens( animation, props ) {
+-	jQuery.each( props, function( prop, value ) {
+-		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+-			index = 0,
+-			length = collection.length;
+-		for ( ; index < length; index++ ) {
+-			if ( collection[ index ].call( animation, prop, value ) ) {
+-
+-				// we're done with this property
+-				return;
+-			}
+-		}
+-	});
+-}
+-
+-function Animation( elem, properties, options ) {
+-	var result,
+-		stopped,
+-		index = 0,
+-		length = animationPrefilters.length,
+-		deferred = jQuery.Deferred().always( function() {
+-			// don't match elem in the :animated selector
+-			delete tick.elem;
+-		}),
+-		tick = function() {
+-			if ( stopped ) {
+-				return false;
+-			}
+-			var currentTime = fxNow || createFxNow(),
+-				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+-				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+-				temp = remaining / animation.duration || 0,
+-				percent = 1 - temp,
+-				index = 0,
+-				length = animation.tweens.length;
+-
+-			for ( ; index < length ; index++ ) {
+-				animation.tweens[ index ].run( percent );
+-			}
+-
+-			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+-
+-			if ( percent < 1 && length ) {
+-				return remaining;
+-			} else {
+-				deferred.resolveWith( elem, [ animation ] );
+-				return false;
+-			}
+-		},
+-		animation = deferred.promise({
+-			elem: elem,
+-			props: jQuery.extend( {}, properties ),
+-			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+-			originalProperties: properties,
+-			originalOptions: options,
+-			startTime: fxNow || createFxNow(),
+-			duration: options.duration,
+-			tweens: [],
+-			createTween: function( prop, end ) {
+-				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+-						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+-				animation.tweens.push( tween );
+-				return tween;
+-			},
+-			stop: function( gotoEnd ) {
+-				var index = 0,
+-					// if we are going to the end, we want to run all the tweens
+-					// otherwise we skip this part
+-					length = gotoEnd ? animation.tweens.length : 0;
+-				if ( stopped ) {
+-					return this;
+-				}
+-				stopped = true;
+-				for ( ; index < length ; index++ ) {
+-					animation.tweens[ index ].run( 1 );
+-				}
+-
+-				// resolve when we played the last frame
+-				// otherwise, reject
+-				if ( gotoEnd ) {
+-					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+-				} else {
+-					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+-				}
+-				return this;
+-			}
+-		}),
+-		props = animation.props;
+-
+-	propFilter( props, animation.opts.specialEasing );
+-
+-	for ( ; index < length ; index++ ) {
+-		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+-		if ( result ) {
+-			return result;
+-		}
+-	}
+-
+-	createTweens( animation, props );
+-
+-	if ( jQuery.isFunction( animation.opts.start ) ) {
+-		animation.opts.start.call( elem, animation );
+-	}
+-
+-	jQuery.fx.timer(
+-		jQuery.extend( tick, {
+-			elem: elem,
+-			anim: animation,
+-			queue: animation.opts.queue
+-		})
+-	);
+-
+-	// attach callbacks from options
+-	return animation.progress( animation.opts.progress )
+-		.done( animation.opts.done, animation.opts.complete )
+-		.fail( animation.opts.fail )
+-		.always( animation.opts.always );
+-}
+-
+-function propFilter( props, specialEasing ) {
+-	var value, name, index, easing, hooks;
+-
+-	// camelCase, specialEasing and expand cssHook pass
+-	for ( index in props ) {
+-		name = jQuery.camelCase( index );
+-		easing = specialEasing[ name ];
+-		value = props[ index ];
+-		if ( jQuery.isArray( value ) ) {
+-			easing = value[ 1 ];
+-			value = props[ index ] = value[ 0 ];
+-		}
+-
+-		if ( index !== name ) {
+-			props[ name ] = value;
+-			delete props[ index ];
+-		}
+-
+-		hooks = jQuery.cssHooks[ name ];
+-		if ( hooks && "expand" in hooks ) {
+-			value = hooks.expand( value );
+-			delete props[ name ];
+-
+-			// not quite $.extend, this wont overwrite keys already present.
+-			// also - reusing 'index' from above because we have the correct "name"
+-			for ( index in value ) {
+-				if ( !( index in props ) ) {
+-					props[ index ] = value[ index ];
+-					specialEasing[ index ] = easing;
+-				}
+-			}
+-		} else {
+-			specialEasing[ name ] = easing;
+-		}
+-	}
+-}
+-
+-jQuery.Animation = jQuery.extend( Animation, {
+-
+-	tweener: function( props, callback ) {
+-		if ( jQuery.isFunction( props ) ) {
+-			callback = props;
+-			props = [ "*" ];
+-		} else {
+-			props = props.split(" ");
+-		}
+-
+-		var prop,
+-			index = 0,
+-			length = props.length;
+-
+-		for ( ; index < length ; index++ ) {
+-			prop = props[ index ];
+-			tweeners[ prop ] = tweeners[ prop ] || [];
+-			tweeners[ prop ].unshift( callback );
+-		}
+-	},
+-
+-	prefilter: function( callback, prepend ) {
+-		if ( prepend ) {
+-			animationPrefilters.unshift( callback );
+-		} else {
+-			animationPrefilters.push( callback );
+-		}
+-	}
+-});
+-
+-function defaultPrefilter( elem, props, opts ) {
+-	/*jshint validthis:true */
+-	var prop, index, length,
+-		value, dataShow, toggle,
+-		tween, hooks, oldfire,
+-		anim = this,
+-		style = elem.style,
+-		orig = {},
+-		handled = [],
+-		hidden = elem.nodeType && isHidden( elem );
+-
+-	// handle queue: false promises
+-	if ( !opts.queue ) {
+-		hooks = jQuery._queueHooks( elem, "fx" );
+-		if ( hooks.unqueued == null ) {
+-			hooks.unqueued = 0;
+-			oldfire = hooks.empty.fire;
+-			hooks.empty.fire = function() {
+-				if ( !hooks.unqueued ) {
+-					oldfire();
+-				}
+-			};
+-		}
+-		hooks.unqueued++;
+-
+-		anim.always(function() {
+-			// doing this makes sure that the complete handler will be called
+-			// before this completes
+-			anim.always(function() {
+-				hooks.unqueued--;
+-				if ( !jQuery.queue( elem, "fx" ).length ) {
+-					hooks.empty.fire();
+-				}
+-			});
+-		});
+-	}
+-
+-	// height/width overflow pass
+-	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+-		// Make sure that nothing sneaks out
+-		// Record all 3 overflow attributes because IE does not
+-		// change the overflow attribute when overflowX and
+-		// overflowY are set to the same value
+-		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+-
+-		// Set display property to inline-block for height/width
+-		// animations on inline elements that are having width/height animated
+-		if ( jQuery.css( elem, "display" ) === "inline" &&
+-				jQuery.css( elem, "float" ) === "none" ) {
+-
+-			// inline-level elements accept inline-block;
+-			// block-level elements need to be inline with layout
+-			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+-				style.display = "inline-block";
+-
+-			} else {
+-				style.zoom = 1;
+-			}
+-		}
+-	}
+-
+-	if ( opts.overflow ) {
+-		style.overflow = "hidden";
+-		if ( !jQuery.support.shrinkWrapBlocks ) {
+-			anim.always(function() {
+-				style.overflow = opts.overflow[ 0 ];
+-				style.overflowX = opts.overflow[ 1 ];
+-				style.overflowY = opts.overflow[ 2 ];
+-			});
+-		}
+-	}
+-
+-
+-	// show/hide pass
+-	for ( index in props ) {
+-		value = props[ index ];
+-		if ( rfxtypes.exec( value ) ) {
+-			delete props[ index ];
+-			toggle = toggle || value === "toggle";
+-			if ( value === ( hidden ? "hide" : "show" ) ) {
+-				continue;
+-			}
+-			handled.push( index );
+-		}
+-	}
+-
+-	length = handled.length;
+-	if ( length ) {
+-		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+-		if ( "hidden" in dataShow ) {
+-			hidden = dataShow.hidden;
+-		}
+-
+-		// store state if its toggle - enables .stop().toggle() to "reverse"
+-		if ( toggle ) {
+-			dataShow.hidden = !hidden;
+-		}
+-		if ( hidden ) {
+-			jQuery( elem ).show();
+-		} else {
+-			anim.done(function() {
+-				jQuery( elem ).hide();
+-			});
+-		}
+-		anim.done(function() {
+-			var prop;
+-			jQuery._removeData( elem, "fxshow" );
+-			for ( prop in orig ) {
+-				jQuery.style( elem, prop, orig[ prop ] );
+-			}
+-		});
+-		for ( index = 0 ; index < length ; index++ ) {
+-			prop = handled[ index ];
+-			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+-			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+-
+-			if ( !( prop in dataShow ) ) {
+-				dataShow[ prop ] = tween.start;
+-				if ( hidden ) {
+-					tween.end = tween.start;
+-					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+-				}
+-			}
+-		}
+-	}
+-}
+-
+-function Tween( elem, options, prop, end, easing ) {
+-	return new Tween.prototype.init( elem, options, prop, end, easing );
+-}
+-jQuery.Tween = Tween;
+-
+-Tween.prototype = {
+-	constructor: Tween,
+-	init: function( elem, options, prop, end, easing, unit ) {
+-		this.elem = elem;
+-		this.prop = prop;
+-		this.easing = easing || "swing";
+-		this.options = options;
+-		this.start = this.now = this.cur();
+-		this.end = end;
+-		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+-	},
+-	cur: function() {
+-		var hooks = Tween.propHooks[ this.prop ];
+-
+-		return hooks && hooks.get ?
+-			hooks.get( this ) :
+-			Tween.propHooks._default.get( this );
+-	},
+-	run: function( percent ) {
+-		var eased,
+-			hooks = Tween.propHooks[ this.prop ];
+-
+-		if ( this.options.duration ) {
+-			this.pos = eased = jQuery.easing[ this.easing ](
+-				percent, this.options.duration * percent, 0, 1, this.options.duration
+-			);
+-		} else {
+-			this.pos = eased = percent;
+-		}
+-		this.now = ( this.end - this.start ) * eased + this.start;
+-
+-		if ( this.options.step ) {
+-			this.options.step.call( this.elem, this.now, this );
+-		}
+-
+-		if ( hooks && hooks.set ) {
+-			hooks.set( this );
+-		} else {
+-			Tween.propHooks._default.set( this );
+-		}
+-		return this;
+-	}
+-};
+-
+-Tween.prototype.init.prototype = Tween.prototype;
+-
+-Tween.propHooks = {
+-	_default: {
+-		get: function( tween ) {
+-			var result;
+-
+-			if ( tween.elem[ tween.prop ] != null &&
+-				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+-				return tween.elem[ tween.prop ];
+-			}
+-
+-			// passing an empty string as a 3rd parameter to .css will automatically
+-			// attempt a parseFloat and fallback to a string if the parse fails
+-			// so, simple values such as "10px" are parsed to Float.
+-			// complex values such as "rotate(1rad)" are returned as is.
+-			result = jQuery.css( tween.elem, tween.prop, "" );
+-			// Empty strings, null, undefined and "auto" are converted to 0.
+-			return !result || result === "auto" ? 0 : result;
+-		},
+-		set: function( tween ) {
+-			// use step hook for back compat - use cssHook if its there - use .style if its
+-			// available and use plain properties where available
+-			if ( jQuery.fx.step[ tween.prop ] ) {
+-				jQuery.fx.step[ tween.prop ]( tween );
+-			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+-				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+-			} else {
+-				tween.elem[ tween.prop ] = tween.now;
+-			}
+-		}
+-	}
+-};
+-
+-// Remove in 2.0 - this supports IE8's panic based approach
+-// to setting things on disconnected nodes
+-
+-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+-	set: function( tween ) {
+-		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+-			tween.elem[ tween.prop ] = tween.now;
+-		}
+-	}
+-};
+-
+-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+-	var cssFn = jQuery.fn[ name ];
+-	jQuery.fn[ name ] = function( speed, easing, callback ) {
+-		return speed == null || typeof speed === "boolean" ?
+-			cssFn.apply( this, arguments ) :
+-			this.animate( genFx( name, true ), speed, easing, callback );
+-	};
+-});
+-
+-jQuery.fn.extend({
+-	fadeTo: function( speed, to, easing, callback ) {
+-
+-		// show any hidden elements after setting opacity to 0
+-		return this.filter( isHidden ).css( "opacity", 0 ).show()
+-
+-			// animate to the value specified
+-			.end().animate({ opacity: to }, speed, easing, callback );
+-	},
+-	animate: function( prop, speed, easing, callback ) {
+-		var empty = jQuery.isEmptyObject( prop ),
+-			optall = jQuery.speed( speed, easing, callback ),
+-			doAnimation = function() {
+-				// Operate on a copy of prop so per-property easing won't be lost
+-				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+-				doAnimation.finish = function() {
+-					anim.stop( true );
+-				};
+-				// Empty animations, or finishing resolves immediately
+-				if ( empty || jQuery._data( this, "finish" ) ) {
+-					anim.stop( true );
+-				}
+-			};
+-			doAnimation.finish = doAnimation;
+-
+-		return empty || optall.queue === false ?
+-			this.each( doAnimation ) :
+-			this.queue( optall.queue, doAnimation );
+-	},
+-	stop: function( type, clearQueue, gotoEnd ) {
+-		var stopQueue = function( hooks ) {
+-			var stop = hooks.stop;
+-			delete hooks.stop;
+-			stop( gotoEnd );
+-		};
+-
+-		if ( typeof type !== "string" ) {
+-			gotoEnd = clearQueue;
+-			clearQueue = type;
+-			type = undefined;
+-		}
+-		if ( clearQueue && type !== false ) {
+-			this.queue( type || "fx", [] );
+-		}
+-
+-		return this.each(function() {
+-			var dequeue = true,
+-				index = type != null && type + "queueHooks",
+-				timers = jQuery.timers,
+-				data = jQuery._data( this );
+-
+-			if ( index ) {
+-				if ( data[ index ] && data[ index ].stop ) {
+-					stopQueue( data[ index ] );
+-				}
+-			} else {
+-				for ( index in data ) {
+-					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+-						stopQueue( data[ index ] );
+-					}
+-				}
+-			}
+-
+-			for ( index = timers.length; index--; ) {
+-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+-					timers[ index ].anim.stop( gotoEnd );
+-					dequeue = false;
+-					timers.splice( index, 1 );
+-				}
+-			}
+-
+-			// start the next in the queue if the last step wasn't forced
+-			// timers currently will call their complete callbacks, which will dequeue
+-			// but only if they were gotoEnd
+-			if ( dequeue || !gotoEnd ) {
+-				jQuery.dequeue( this, type );
+-			}
+-		});
+-	},
+-	finish: function( type ) {
+-		if ( type !== false ) {
+-			type = type || "fx";
+-		}
+-		return this.each(function() {
+-			var index,
+-				data = jQuery._data( this ),
+-				queue = data[ type + "queue" ],
+-				hooks = data[ type + "queueHooks" ],
+-				timers = jQuery.timers,
+-				length = queue ? queue.length : 0;
+-
+-			// enable finishing flag on private data
+-			data.finish = true;
+-
+-			// empty the queue first
+-			jQuery.queue( this, type, [] );
+-
+-			if ( hooks && hooks.cur && hooks.cur.finish ) {
+-				hooks.cur.finish.call( this );
+-			}
+-
+-			// look for any active animations, and finish them
+-			for ( index = timers.length; index--; ) {
+-				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+-					timers[ index ].anim.stop( true );
+-					timers.splice( index, 1 );
+-				}
+-			}
+-
+-			// look for any animations in the old queue and finish them
+-			for ( index = 0; index < length; index++ ) {
+-				if ( queue[ index ] && queue[ index ].finish ) {
+-					queue[ index ].finish.call( this );
+-				}
+-			}
+-
+-			// turn off finishing flag
+-			delete data.finish;
+-		});
+-	}
+-});
+-
+-// Generate parameters to create a standard animation
+-function genFx( type, includeWidth ) {
+-	var which,
+-		attrs = { height: type },
+-		i = 0;
+-
+-	// if we include width, step value is 1 to do all cssExpand values,
+-	// if we don't include width, step value is 2 to skip over Left and Right
+-	includeWidth = includeWidth? 1 : 0;
+-	for( ; i < 4 ; i += 2 - includeWidth ) {
+-		which = cssExpand[ i ];
+-		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+-	}
+-
+-	if ( includeWidth ) {
+-		attrs.opacity = attrs.width = type;
+-	}
+-
+-	return attrs;
+-}
+-
+-// Generate shortcuts for custom animations
+-jQuery.each({
+-	slideDown: genFx("show"),
+-	slideUp: genFx("hide"),
+-	slideToggle: genFx("toggle"),
+-	fadeIn: { opacity: "show" },
+-	fadeOut: { opacity: "hide" },
+-	fadeToggle: { opacity: "toggle" }
+-}, function( name, props ) {
+-	jQuery.fn[ name ] = function( speed, easing, callback ) {
+-		return this.animate( props, speed, easing, callback );
+-	};
+-});
+-
+-jQuery.speed = function( speed, easing, fn ) {
+-	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+-		complete: fn || !fn && easing ||
+-			jQuery.isFunction( speed ) && speed,
+-		duration: speed,
+-		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+-	};
+-
+-	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+-		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+-
+-	// normalize opt.queue - true/undefined/null -> "fx"
+-	if ( opt.queue == null || opt.queue === true ) {
+-		opt.queue = "fx";
+-	}
+-
+-	// Queueing
+-	opt.old = opt.complete;
+-
+-	opt.complete = function() {
+-		if ( jQuery.isFunction( opt.old ) ) {
+-			opt.old.call( this );
+-		}
+-
+-		if ( opt.queue ) {
+-			jQuery.dequeue( this, opt.queue );
+-		}
+-	};
+-
+-	return opt;
+-};
+-
+-jQuery.easing = {
+-	linear: function( p ) {
+-		return p;
+-	},
+-	swing: function( p ) {
+-		return 0.5 - Math.cos( p*Math.PI ) / 2;
+-	}
+-};
+-
+-jQuery.timers = [];
+-jQuery.fx = Tween.prototype.init;
+-jQuery.fx.tick = function() {
+-	var timer,
+-		timers = jQuery.timers,
+-		i = 0;
+-
+-	fxNow = jQuery.now();
+-
+-	for ( ; i < timers.length; i++ ) {
+-		timer = timers[ i ];
+-		// Checks the timer has not already been removed
+-		if ( !timer() && timers[ i ] === timer ) {
+-			timers.splice( i--, 1 );
+-		}
+-	}
+-
+-	if ( !timers.length ) {
+-		jQuery.fx.stop();
+-	}
+-	fxNow = undefined;
+-};
+-
+-jQuery.fx.timer = function( timer ) {
+-	if ( timer() && jQuery.timers.push( timer ) ) {
+-		jQuery.fx.start();
+-	}
+-};
+-
+-jQuery.fx.interval = 13;
+-
+-jQuery.fx.start = function() {
+-	if ( !timerId ) {
+-		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+-	}
+-};
+-
+-jQuery.fx.stop = function() {
+-	clearInterval( timerId );
+-	timerId = null;
+-};
+-
+-jQuery.fx.speeds = {
+-	slow: 600,
+-	fast: 200,
+-	// Default speed
+-	_default: 400
+-};
+-
+-// Back Compat <1.8 extension point
+-jQuery.fx.step = {};
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.animated = function( elem ) {
+-		return jQuery.grep(jQuery.timers, function( fn ) {
+-			return elem === fn.elem;
+-		}).length;
+-	};
+-}
+-jQuery.fn.offset = function( options ) {
+-	if ( arguments.length ) {
+-		return options === undefined ?
+-			this :
+-			this.each(function( i ) {
+-				jQuery.offset.setOffset( this, options, i );
+-			});
+-	}
+-
+-	var docElem, win,
+-		box = { top: 0, left: 0 },
+-		elem = this[ 0 ],
+-		doc = elem && elem.ownerDocument;
+-
+-	if ( !doc ) {
+-		return;
+-	}
+-
+-	docElem = doc.documentElement;
+-
+-	// Make sure it's not a disconnected DOM node
+-	if ( !jQuery.contains( docElem, elem ) ) {
+-		return box;
+-	}
+-
+-	// If we don't have gBCR, just use 0,0 rather than error
+-	// BlackBerry 5, iOS 3 (original iPhone)
+-	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+-		box = elem.getBoundingClientRect();
+-	}
+-	win = getWindow( doc );
+-	return {
+-		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+-		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+-	};
+-};
+-
+-jQuery.offset = {
+-
+-	setOffset: function( elem, options, i ) {
+-		var position = jQuery.css( elem, "position" );
+-
+-		// set position first, in-case top/left are set even on static elem
+-		if ( position === "static" ) {
+-			elem.style.position = "relative";
+-		}
+-
+-		var curElem = jQuery( elem ),
+-			curOffset = curElem.offset(),
+-			curCSSTop = jQuery.css( elem, "top" ),
+-			curCSSLeft = jQuery.css( elem, "left" ),
+-			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+-			props = {}, curPosition = {}, curTop, curLeft;
+-
+-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+-		if ( calculatePosition ) {
+-			curPosition = curElem.position();
+-			curTop = curPosition.top;
+-			curLeft = curPosition.left;
+-		} else {
+-			curTop = parseFloat( curCSSTop ) || 0;
+-			curLeft = parseFloat( curCSSLeft ) || 0;
+-		}
+-
+-		if ( jQuery.isFunction( options ) ) {
+-			options = options.call( elem, i, curOffset );
+-		}
+-
+-		if ( options.top != null ) {
+-			props.top = ( options.top - curOffset.top ) + curTop;
+-		}
+-		if ( options.left != null ) {
+-			props.left = ( options.left - curOffset.left ) + curLeft;
+-		}
+-
+-		if ( "using" in options ) {
+-			options.using.call( elem, props );
+-		} else {
+-			curElem.css( props );
+-		}
+-	}
+-};
+-
+-
+-jQuery.fn.extend({
+-
+-	position: function() {
+-		if ( !this[ 0 ] ) {
+-			return;
+-		}
+-
+-		var offsetParent, offset,
+-			parentOffset = { top: 0, left: 0 },
+-			elem = this[ 0 ];
+-
+-		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+-		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+-			// we assume that getBoundingClientRect is available when computed position is fixed
+-			offset = elem.getBoundingClientRect();
+-		} else {
+-			// Get *real* offsetParent
+-			offsetParent = this.offsetParent();
+-
+-			// Get correct offsets
+-			offset = this.offset();
+-			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+-				parentOffset = offsetParent.offset();
+-			}
+-
+-			// Add offsetParent borders
+-			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+-			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+-		}
+-
+-		// Subtract parent offsets and element margins
+-		// note: when an element has margin: auto the offsetLeft and marginLeft
+-		// are the same in Safari causing offset.left to incorrectly be 0
+-		return {
+-			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+-			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+-		};
+-	},
+-
+-	offsetParent: function() {
+-		return this.map(function() {
+-			var offsetParent = this.offsetParent || document.documentElement;
+-			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+-				offsetParent = offsetParent.offsetParent;
+-			}
+-			return offsetParent || document.documentElement;
+-		});
+-	}
+-});
+-
+-
+-// Create scrollLeft and scrollTop methods
+-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+-	var top = /Y/.test( prop );
+-
+-	jQuery.fn[ method ] = function( val ) {
+-		return jQuery.access( this, function( elem, method, val ) {
+-			var win = getWindow( elem );
+-
+-			if ( val === undefined ) {
+-				return win ? (prop in win) ? win[ prop ] :
+-					win.document.documentElement[ method ] :
+-					elem[ method ];
+-			}
+-
+-			if ( win ) {
+-				win.scrollTo(
+-					!top ? val : jQuery( win ).scrollLeft(),
+-					top ? val : jQuery( win ).scrollTop()
+-				);
+-
+-			} else {
+-				elem[ method ] = val;
+-			}
+-		}, method, val, arguments.length, null );
+-	};
+-});
+-
+-function getWindow( elem ) {
+-	return jQuery.isWindow( elem ) ?
+-		elem :
+-		elem.nodeType === 9 ?
+-			elem.defaultView || elem.parentWindow :
+-			false;
+-}
+-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+-	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+-		// margin is only for outerHeight, outerWidth
+-		jQuery.fn[ funcName ] = function( margin, value ) {
+-			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+-				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+-
+-			return jQuery.access( this, function( elem, type, value ) {
+-				var doc;
+-
+-				if ( jQuery.isWindow( elem ) ) {
+-					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+-					// isn't a whole lot we can do. See pull request at this URL for discussion:
+-					// https://github.com/jquery/jquery/pull/764
+-					return elem.document.documentElement[ "client" + name ];
+-				}
+-
+-				// Get document width or height
+-				if ( elem.nodeType === 9 ) {
+-					doc = elem.documentElement;
+-
+-					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+-					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+-					return Math.max(
+-						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+-						elem.body[ "offset" + name ], doc[ "offset" + name ],
+-						doc[ "client" + name ]
+-					);
+-				}
+-
+-				return value === undefined ?
+-					// Get width or height on the element, requesting but not forcing parseFloat
+-					jQuery.css( elem, type, extra ) :
+-
+-					// Set width or height on the element
+-					jQuery.style( elem, type, value, extra );
+-			}, type, chainable ? margin : undefined, chainable, null );
+-		};
+-	});
+-});
+-// Limit scope pollution from any deprecated API
+-// (function() {
+-
+-// })();
+-// Expose jQuery to the global object
+-window.jQuery = window.$ = jQuery;
+-
+-// Expose jQuery as an AMD module, but only for AMD loaders that
+-// understand the issues with loading multiple versions of jQuery
+-// in a page that all might call define(). The loader will indicate
+-// they have special allowances for multiple jQuery versions by
+-// specifying define.amd.jQuery = true. Register as a named module,
+-// since jQuery can be concatenated with other files that may use define,
+-// but not use a proper concatenation script that understands anonymous
+-// AMD modules. A named AMD is safest and most robust way to register.
+-// Lowercase jquery is used because AMD module names are derived from
+-// file names, and jQuery is normally delivered in a lowercase file name.
+-// Do this after creating the global so that if an AMD module wants to call
+-// noConflict to hide this version of jQuery, it will work.
+-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+-	define( "jquery", [], function () { return jQuery; } );
+-}
+-
+-})( window );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.tabs.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.tabs.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.tabs.js	(revision 15488)
+@@ -1,846 +0,0 @@
+-/*!
+- * jQuery UI Tabs 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/tabs/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var tabId = 0,
+-	rhash = /#.*$/;
+-
+-function getNextTabId() {
+-	return ++tabId;
+-}
+-
+-function isLocal( anchor ) {
+-	return anchor.hash.length > 1 &&
+-		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
+-			decodeURIComponent( location.href.replace( rhash, "" ) );
+-}
+-
+-$.widget( "ui.tabs", {
+-	version: "1.10.3",
+-	delay: 300,
+-	options: {
+-		active: null,
+-		collapsible: false,
+-		event: "click",
+-		heightStyle: "content",
+-		hide: null,
+-		show: null,
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null,
+-		beforeLoad: null,
+-		load: null
+-	},
+-
+-	_create: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		this.running = false;
+-
+-		this.element
+-			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-tabs-collapsible", options.collapsible )
+-			// Prevent users from focusing disabled tabs via click
+-			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
+-				if ( $( this ).is( ".ui-state-disabled" ) ) {
+-					event.preventDefault();
+-				}
+-			})
+-			// support: IE <9
+-			// Preventing the default action in mousedown doesn't prevent IE
+-			// from focusing the element, so if the anchor gets focused, blur.
+-			// We don't have to worry about focusing the previously focused
+-			// element since clicking on a non-focusable element should focus
+-			// the body anyway.
+-			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+-				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+-					this.blur();
+-				}
+-			});
+-
+-		this._processTabs();
+-		options.active = this._initialActive();
+-
+-		// Take disabling tabs via class attribute from HTML
+-		// into account and update option properly.
+-		if ( $.isArray( options.disabled ) ) {
+-			options.disabled = $.unique( options.disabled.concat(
+-				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+-					return that.tabs.index( li );
+-				})
+-			) ).sort();
+-		}
+-
+-		// check for length avoids error when initializing empty list
+-		if ( this.options.active !== false && this.anchors.length ) {
+-			this.active = this._findActive( options.active );
+-		} else {
+-			this.active = $();
+-		}
+-
+-		this._refresh();
+-
+-		if ( this.active.length ) {
+-			this.load( options.active );
+-		}
+-	},
+-
+-	_initialActive: function() {
+-		var active = this.options.active,
+-			collapsible = this.options.collapsible,
+-			locationHash = location.hash.substring( 1 );
+-
+-		if ( active === null ) {
+-			// check the fragment identifier in the URL
+-			if ( locationHash ) {
+-				this.tabs.each(function( i, tab ) {
+-					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+-						active = i;
+-						return false;
+-					}
+-				});
+-			}
+-
+-			// check for a tab marked active via a class
+-			if ( active === null ) {
+-				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+-			}
+-
+-			// no active tab, set to false
+-			if ( active === null || active === -1 ) {
+-				active = this.tabs.length ? 0 : false;
+-			}
+-		}
+-
+-		// handle numbers: negative, out of range
+-		if ( active !== false ) {
+-			active = this.tabs.index( this.tabs.eq( active ) );
+-			if ( active === -1 ) {
+-				active = collapsible ? false : 0;
+-			}
+-		}
+-
+-		// don't allow collapsible: false and active: false
+-		if ( !collapsible && active === false && this.anchors.length ) {
+-			active = 0;
+-		}
+-
+-		return active;
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			tab: this.active,
+-			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+-		};
+-	},
+-
+-	_tabKeydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+-			selectedIndex = this.tabs.index( focusedTab ),
+-			goingForward = true;
+-
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		switch ( event.keyCode ) {
+-			case $.ui.keyCode.RIGHT:
+-			case $.ui.keyCode.DOWN:
+-				selectedIndex++;
+-				break;
+-			case $.ui.keyCode.UP:
+-			case $.ui.keyCode.LEFT:
+-				goingForward = false;
+-				selectedIndex--;
+-				break;
+-			case $.ui.keyCode.END:
+-				selectedIndex = this.anchors.length - 1;
+-				break;
+-			case $.ui.keyCode.HOME:
+-				selectedIndex = 0;
+-				break;
+-			case $.ui.keyCode.SPACE:
+-				// Activate only, no collapsing
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				this._activate( selectedIndex );
+-				return;
+-			case $.ui.keyCode.ENTER:
+-				// Toggle (cancel delayed activation, allow collapsing)
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				// Determine if we should collapse or activate
+-				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+-				return;
+-			default:
+-				return;
+-		}
+-
+-		// Focus the appropriate tab, based on which key was pressed
+-		event.preventDefault();
+-		clearTimeout( this.activating );
+-		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+-
+-		// Navigating with control key will prevent automatic activation
+-		if ( !event.ctrlKey ) {
+-			// Update aria-selected immediately so that AT think the tab is already selected.
+-			// Otherwise AT may confuse the user by stating that they need to activate the tab,
+-			// but the tab will already be activated by the time the announcement finishes.
+-			focusedTab.attr( "aria-selected", "false" );
+-			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+-
+-			this.activating = this._delay(function() {
+-				this.option( "active", selectedIndex );
+-			}, this.delay );
+-		}
+-	},
+-
+-	_panelKeydown: function( event ) {
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		// Ctrl+up moves focus to the current tab
+-		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+-			event.preventDefault();
+-			this.active.focus();
+-		}
+-	},
+-
+-	// Alt+page up/down moves focus to the previous/next tab (and activates)
+-	_handlePageNav: function( event ) {
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+-			this._activate( this._focusNextTab( this.options.active - 1, false ) );
+-			return true;
+-		}
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+-			this._activate( this._focusNextTab( this.options.active + 1, true ) );
+-			return true;
+-		}
+-	},
+-
+-	_findNextTab: function( index, goingForward ) {
+-		var lastTabIndex = this.tabs.length - 1;
+-
+-		function constrain() {
+-			if ( index > lastTabIndex ) {
+-				index = 0;
+-			}
+-			if ( index < 0 ) {
+-				index = lastTabIndex;
+-			}
+-			return index;
+-		}
+-
+-		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+-			index = goingForward ? index + 1 : index - 1;
+-		}
+-
+-		return index;
+-	},
+-
+-	_focusNextTab: function( index, goingForward ) {
+-		index = this._findNextTab( index, goingForward );
+-		this.tabs.eq( index ).focus();
+-		return index;
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "disabled" ) {
+-			// don't use the widget factory's disabled handling
+-			this._setupDisabled( value );
+-			return;
+-		}
+-
+-		this._super( key, value);
+-
+-		if ( key === "collapsible" ) {
+-			this.element.toggleClass( "ui-tabs-collapsible", value );
+-			// Setting collapsible: false while collapsed; open first panel
+-			if ( !value && this.options.active === false ) {
+-				this._activate( 0 );
+-			}
+-		}
+-
+-		if ( key === "event" ) {
+-			this._setupEvents( value );
+-		}
+-
+-		if ( key === "heightStyle" ) {
+-			this._setupHeightStyle( value );
+-		}
+-	},
+-
+-	_tabId: function( tab ) {
+-		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
+-	},
+-
+-	_sanitizeSelector: function( hash ) {
+-		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+-	},
+-
+-	refresh: function() {
+-		var options = this.options,
+-			lis = this.tablist.children( ":has(a[href])" );
+-
+-		// get disabled tabs from class attribute from HTML
+-		// this will get converted to a boolean if needed in _refresh()
+-		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+-			return lis.index( tab );
+-		});
+-
+-		this._processTabs();
+-
+-		// was collapsed or no tabs
+-		if ( options.active === false || !this.anchors.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// was active, but active tab is gone
+-		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining tabs are disabled
+-			if ( this.tabs.length === options.disabled.length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous tab
+-			} else {
+-				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+-			}
+-		// was active, active tab still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.tabs.index( this.active );
+-		}
+-
+-		this._refresh();
+-	},
+-
+-	_refresh: function() {
+-		this._setupDisabled( this.options.disabled );
+-		this._setupEvents( this.options.event );
+-		this._setupHeightStyle( this.options.heightStyle );
+-
+-		this.tabs.not( this.active ).attr({
+-			"aria-selected": "false",
+-			tabIndex: -1
+-		});
+-		this.panels.not( this._getPanelForTab( this.active ) )
+-			.hide()
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-hidden": "true"
+-			});
+-
+-		// Make sure one tab is in the tab order
+-		if ( !this.active.length ) {
+-			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active
+-				.addClass( "ui-tabs-active ui-state-active" )
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-			this._getPanelForTab( this.active )
+-				.show()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-	},
+-
+-	_processTabs: function() {
+-		var that = this;
+-
+-		this.tablist = this._getList()
+-			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.attr( "role", "tablist" );
+-
+-		this.tabs = this.tablist.find( "> li:has(a[href])" )
+-			.addClass( "ui-state-default ui-corner-top" )
+-			.attr({
+-				role: "tab",
+-				tabIndex: -1
+-			});
+-
+-		this.anchors = this.tabs.map(function() {
+-				return $( "a", this )[ 0 ];
+-			})
+-			.addClass( "ui-tabs-anchor" )
+-			.attr({
+-				role: "presentation",
+-				tabIndex: -1
+-			});
+-
+-		this.panels = $();
+-
+-		this.anchors.each(function( i, anchor ) {
+-			var selector, panel, panelId,
+-				anchorId = $( anchor ).uniqueId().attr( "id" ),
+-				tab = $( anchor ).closest( "li" ),
+-				originalAriaControls = tab.attr( "aria-controls" );
+-
+-			// inline tab
+-			if ( isLocal( anchor ) ) {
+-				selector = anchor.hash;
+-				panel = that.element.find( that._sanitizeSelector( selector ) );
+-			// remote tab
+-			} else {
+-				panelId = that._tabId( tab );
+-				selector = "#" + panelId;
+-				panel = that.element.find( selector );
+-				if ( !panel.length ) {
+-					panel = that._createPanel( panelId );
+-					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+-				}
+-				panel.attr( "aria-live", "polite" );
+-			}
+-
+-			if ( panel.length) {
+-				that.panels = that.panels.add( panel );
+-			}
+-			if ( originalAriaControls ) {
+-				tab.data( "ui-tabs-aria-controls", originalAriaControls );
+-			}
+-			tab.attr({
+-				"aria-controls": selector.substring( 1 ),
+-				"aria-labelledby": anchorId
+-			});
+-			panel.attr( "aria-labelledby", anchorId );
+-		});
+-
+-		this.panels
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.attr( "role", "tabpanel" );
+-	},
+-
+-	// allow overriding how to find the list for rare usage scenarios (#7715)
+-	_getList: function() {
+-		return this.element.find( "ol,ul" ).eq( 0 );
+-	},
+-
+-	_createPanel: function( id ) {
+-		return $( "<div>" )
+-			.attr( "id", id )
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.data( "ui-tabs-destroy", true );
+-	},
+-
+-	_setupDisabled: function( disabled ) {
+-		if ( $.isArray( disabled ) ) {
+-			if ( !disabled.length ) {
+-				disabled = false;
+-			} else if ( disabled.length === this.anchors.length ) {
+-				disabled = true;
+-			}
+-		}
+-
+-		// disable tabs
+-		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+-			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+-				$( li )
+-					.addClass( "ui-state-disabled" )
+-					.attr( "aria-disabled", "true" );
+-			} else {
+-				$( li )
+-					.removeClass( "ui-state-disabled" )
+-					.removeAttr( "aria-disabled" );
+-			}
+-		}
+-
+-		this.options.disabled = disabled;
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			click: function( event ) {
+-				event.preventDefault();
+-			}
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+-		this._on( this.anchors, events );
+-		this._on( this.tabs, { keydown: "_tabKeydown" } );
+-		this._on( this.panels, { keydown: "_panelKeydown" } );
+-
+-		this._focusable( this.tabs );
+-		this._hoverable( this.tabs );
+-	},
+-
+-	_setupHeightStyle: function( heightStyle ) {
+-		var maxHeight,
+-			parent = this.element.parent();
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			maxHeight -= this.element.outerHeight() - this.element.height();
+-
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.element.children().not( this.panels ).each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.panels.each(function() {
+-				$( this ).height( Math.max( 0, maxHeight -
+-					$( this ).innerHeight() + $( this ).height() ) );
+-			})
+-			.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.panels.each(function() {
+-				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+-			}).height( maxHeight );
+-		}
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			anchor = $( event.currentTarget ),
+-			tab = anchor.closest( "li" ),
+-			clickedIsActive = tab[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : this._getPanelForTab( tab ),
+-			toHide = !active.length ? $() : this._getPanelForTab( active ),
+-			eventData = {
+-				oldTab: active,
+-				oldPanel: toHide,
+-				newTab: collapsing ? $() : tab,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if ( tab.hasClass( "ui-state-disabled" ) ||
+-				// tab is already loading
+-				tab.hasClass( "ui-tabs-loading" ) ||
+-				// can't switch durning an animation
+-				this.running ||
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.tabs.index( tab );
+-
+-		this.active = clickedIsActive ? $() : tab;
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		if ( !toHide.length && !toShow.length ) {
+-			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+-		}
+-
+-		if ( toShow.length ) {
+-			this.load( this.tabs.index( tab ), event );
+-		}
+-		this._toggle( event, eventData );
+-	},
+-
+-	// handles show/hide for selecting tabs
+-	_toggle: function( event, eventData ) {
+-		var that = this,
+-			toShow = eventData.newPanel,
+-			toHide = eventData.oldPanel;
+-
+-		this.running = true;
+-
+-		function complete() {
+-			that.running = false;
+-			that._trigger( "activate", event, eventData );
+-		}
+-
+-		function show() {
+-			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+-
+-			if ( toShow.length && that.options.show ) {
+-				that._show( toShow, that.options.show, complete );
+-			} else {
+-				toShow.show();
+-				complete();
+-			}
+-		}
+-
+-		// start out by hiding, then showing, then completing
+-		if ( toHide.length && this.options.hide ) {
+-			this._hide( toHide, this.options.hide, function() {
+-				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-				show();
+-			});
+-		} else {
+-			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-			toHide.hide();
+-			show();
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		eventData.oldTab.attr( "aria-selected", "false" );
+-		// If we're switching tabs, remove the old tab from the tab order.
+-		// If we're opening from collapsed state, remove the previous tab from the tab order.
+-		// If we're collapsing, then keep the collapsing tab in the tab order.
+-		if ( toShow.length && toHide.length ) {
+-			eventData.oldTab.attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.tabs.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow.attr({
+-			"aria-expanded": "true",
+-			"aria-hidden": "false"
+-		});
+-		eventData.newTab.attr({
+-			"aria-selected": "true",
+-			tabIndex: 0
+-		});
+-	},
+-
+-	_activate: function( index ) {
+-		var anchor,
+-			active = this._findActive( index );
+-
+-		// trying to activate the already active panel
+-		if ( active[ 0 ] === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the current active header
+-		if ( !active.length ) {
+-			active = this.active;
+-		}
+-
+-		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+-		this._eventHandler({
+-			target: anchor,
+-			currentTarget: anchor,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( index ) {
+-		return index === false ? $() : this.tabs.eq( index );
+-	},
+-
+-	_getIndex: function( index ) {
+-		// meta-function to give users option to provide a href string instead of a numerical index.
+-		if ( typeof index === "string" ) {
+-			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+-		}
+-
+-		return index;
+-	},
+-
+-	_destroy: function() {
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+-
+-		this.tablist
+-			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.removeAttr( "role" );
+-
+-		this.anchors
+-			.removeClass( "ui-tabs-anchor" )
+-			.removeAttr( "role" )
+-			.removeAttr( "tabIndex" )
+-			.removeUniqueId();
+-
+-		this.tabs.add( this.panels ).each(function() {
+-			if ( $.data( this, "ui-tabs-destroy" ) ) {
+-				$( this ).remove();
+-			} else {
+-				$( this )
+-					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+-						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+-					.removeAttr( "tabIndex" )
+-					.removeAttr( "aria-live" )
+-					.removeAttr( "aria-busy" )
+-					.removeAttr( "aria-selected" )
+-					.removeAttr( "aria-labelledby" )
+-					.removeAttr( "aria-hidden" )
+-					.removeAttr( "aria-expanded" )
+-					.removeAttr( "role" );
+-			}
+-		});
+-
+-		this.tabs.each(function() {
+-			var li = $( this ),
+-				prev = li.data( "ui-tabs-aria-controls" );
+-			if ( prev ) {
+-				li
+-					.attr( "aria-controls", prev )
+-					.removeData( "ui-tabs-aria-controls" );
+-			} else {
+-				li.removeAttr( "aria-controls" );
+-			}
+-		});
+-
+-		this.panels.show();
+-
+-		if ( this.options.heightStyle !== "content" ) {
+-			this.panels.css( "height", "" );
+-		}
+-	},
+-
+-	enable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === false ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = false;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.map( disabled, function( num ) {
+-					return num !== index ? num : null;
+-				});
+-			} else {
+-				disabled = $.map( this.tabs, function( li, num ) {
+-					return num !== index ? num : null;
+-				});
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	disable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === true ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = true;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.inArray( index, disabled ) !== -1 ) {
+-				return;
+-			}
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.merge( [ index ], disabled ).sort();
+-			} else {
+-				disabled = [ index ];
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	load: function( index, event ) {
+-		index = this._getIndex( index );
+-		var that = this,
+-			tab = this.tabs.eq( index ),
+-			anchor = tab.find( ".ui-tabs-anchor" ),
+-			panel = this._getPanelForTab( tab ),
+-			eventData = {
+-				tab: tab,
+-				panel: panel
+-			};
+-
+-		// not remote
+-		if ( isLocal( anchor[ 0 ] ) ) {
+-			return;
+-		}
+-
+-		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+-
+-		// support: jQuery <1.8
+-		// jQuery <1.8 returns false if the request is canceled in beforeSend,
+-		// but as of 1.8, $.ajax() always returns a jqXHR object.
+-		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+-			tab.addClass( "ui-tabs-loading" );
+-			panel.attr( "aria-busy", "true" );
+-
+-			this.xhr
+-				.success(function( response ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						panel.html( response );
+-						that._trigger( "load", event, eventData );
+-					}, 1 );
+-				})
+-				.complete(function( jqXHR, status ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						if ( status === "abort" ) {
+-							that.panels.stop( false, true );
+-						}
+-
+-						tab.removeClass( "ui-tabs-loading" );
+-						panel.removeAttr( "aria-busy" );
+-
+-						if ( jqXHR === that.xhr ) {
+-							delete that.xhr;
+-						}
+-					}, 1 );
+-				});
+-		}
+-	},
+-
+-	_ajaxSettings: function( anchor, event, eventData ) {
+-		var that = this;
+-		return {
+-			url: anchor.attr( "href" ),
+-			beforeSend: function( jqXHR, settings ) {
+-				return that._trigger( "beforeLoad", event,
+-					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+-			}
+-		};
+-	},
+-
+-	_getPanelForTab: function( tab ) {
+-		var id = $( tab ).attr( "aria-controls" );
+-		return this.element.find( this._sanitizeSelector( "#" + id ) );
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fade.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fade.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-fade.js	(revision 15488)
+@@ -1,30 +0,0 @@
+-/*!
+- * jQuery UI Effects Fade 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/fade-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.fade = function( o, done ) {
+-	var el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "toggle" );
+-
+-	el.animate({
+-		opacity: mode
+-	}, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: done
+-	});
+-};
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-slide.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-slide.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-slide.js	(revision 15488)
+@@ -1,64 +0,0 @@
+-/*!
+- * jQuery UI Effects Slide 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/slide-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.slide = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+-		mode = $.effects.setMode( el, o.mode || "show" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		distance,
+-		animation = {};
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+-
+-	$.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	if ( show ) {
+-		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( positiveMotion ? "+=" : "-=") :
+-		( positiveMotion ? "-=" : "+=")) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.dialog.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.dialog.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.dialog.js	(revision 15488)
+@@ -1,808 +0,0 @@
+-/*!
+- * jQuery UI Dialog 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/dialog/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *  jquery.ui.button.js
+- *	jquery.ui.draggable.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.position.js
+- *	jquery.ui.resizable.js
+- */
+-(function( $, undefined ) {
+-
+-var sizeRelatedOptions = {
+-		buttons: true,
+-		height: true,
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true,
+-		width: true
+-	},
+-	resizableRelatedOptions = {
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true
+-	};
+-
+-$.widget( "ui.dialog", {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoOpen: true,
+-		buttons: [],
+-		closeOnEscape: true,
+-		closeText: "close",
+-		dialogClass: "",
+-		draggable: true,
+-		hide: null,
+-		height: "auto",
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 150,
+-		minWidth: 150,
+-		modal: false,
+-		position: {
+-			my: "center",
+-			at: "center",
+-			of: window,
+-			collision: "fit",
+-			// Ensure the titlebar is always visible
+-			using: function( pos ) {
+-				var topOffset = $( this ).css( pos ).offset().top;
+-				if ( topOffset < 0 ) {
+-					$( this ).css( "top", pos.top - topOffset );
+-				}
+-			}
+-		},
+-		resizable: true,
+-		show: null,
+-		title: null,
+-		width: 300,
+-
+-		// callbacks
+-		beforeClose: null,
+-		close: null,
+-		drag: null,
+-		dragStart: null,
+-		dragStop: null,
+-		focus: null,
+-		open: null,
+-		resize: null,
+-		resizeStart: null,
+-		resizeStop: null
+-	},
+-
+-	_create: function() {
+-		this.originalCss = {
+-			display: this.element[0].style.display,
+-			width: this.element[0].style.width,
+-			minHeight: this.element[0].style.minHeight,
+-			maxHeight: this.element[0].style.maxHeight,
+-			height: this.element[0].style.height
+-		};
+-		this.originalPosition = {
+-			parent: this.element.parent(),
+-			index: this.element.parent().children().index( this.element )
+-		};
+-		this.originalTitle = this.element.attr("title");
+-		this.options.title = this.options.title || this.originalTitle;
+-
+-		this._createWrapper();
+-
+-		this.element
+-			.show()
+-			.removeAttr("title")
+-			.addClass("ui-dialog-content ui-widget-content")
+-			.appendTo( this.uiDialog );
+-
+-		this._createTitlebar();
+-		this._createButtonPane();
+-
+-		if ( this.options.draggable && $.fn.draggable ) {
+-			this._makeDraggable();
+-		}
+-		if ( this.options.resizable && $.fn.resizable ) {
+-			this._makeResizable();
+-		}
+-
+-		this._isOpen = false;
+-	},
+-
+-	_init: function() {
+-		if ( this.options.autoOpen ) {
+-			this.open();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-		if ( element && (element.jquery || element.nodeType) ) {
+-			return $( element );
+-		}
+-		return this.document.find( element || "body" ).eq( 0 );
+-	},
+-
+-	_destroy: function() {
+-		var next,
+-			originalPosition = this.originalPosition;
+-
+-		this._destroyOverlay();
+-
+-		this.element
+-			.removeUniqueId()
+-			.removeClass("ui-dialog-content ui-widget-content")
+-			.css( this.originalCss )
+-			// Without detaching first, the following becomes really slow
+-			.detach();
+-
+-		this.uiDialog.stop( true, true ).remove();
+-
+-		if ( this.originalTitle ) {
+-			this.element.attr( "title", this.originalTitle );
+-		}
+-
+-		next = originalPosition.parent.children().eq( originalPosition.index );
+-		// Don't try to place the dialog next to itself (#8613)
+-		if ( next.length && next[0] !== this.element[0] ) {
+-			next.before( this.element );
+-		} else {
+-			originalPosition.parent.append( this.element );
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.uiDialog;
+-	},
+-
+-	disable: $.noop,
+-	enable: $.noop,
+-
+-	close: function( event ) {
+-		var that = this;
+-
+-		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+-			return;
+-		}
+-
+-		this._isOpen = false;
+-		this._destroyOverlay();
+-
+-		if ( !this.opener.filter(":focusable").focus().length ) {
+-			// Hiding a focused element doesn't trigger blur in WebKit
+-			// so in case we have nothing to focus on, explicitly blur the active element
+-			// https://bugs.webkit.org/show_bug.cgi?id=47182
+-			$( this.document[0].activeElement ).blur();
+-		}
+-
+-		this._hide( this.uiDialog, this.options.hide, function() {
+-			that._trigger( "close", event );
+-		});
+-	},
+-
+-	isOpen: function() {
+-		return this._isOpen;
+-	},
+-
+-	moveToTop: function() {
+-		this._moveToTop();
+-	},
+-
+-	_moveToTop: function( event, silent ) {
+-		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
+-		if ( moved && !silent ) {
+-			this._trigger( "focus", event );
+-		}
+-		return moved;
+-	},
+-
+-	open: function() {
+-		var that = this;
+-		if ( this._isOpen ) {
+-			if ( this._moveToTop() ) {
+-				this._focusTabbable();
+-			}
+-			return;
+-		}
+-
+-		this._isOpen = true;
+-		this.opener = $( this.document[0].activeElement );
+-
+-		this._size();
+-		this._position();
+-		this._createOverlay();
+-		this._moveToTop( null, true );
+-		this._show( this.uiDialog, this.options.show, function() {
+-			that._focusTabbable();
+-			that._trigger("focus");
+-		});
+-
+-		this._trigger("open");
+-	},
+-
+-	_focusTabbable: function() {
+-		// Set focus to the first match:
+-		// 1. First element inside the dialog matching [autofocus]
+-		// 2. Tabbable element inside the content element
+-		// 3. Tabbable element inside the buttonpane
+-		// 4. The close button
+-		// 5. The dialog itself
+-		var hasFocus = this.element.find("[autofocus]");
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.element.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogButtonPane.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialog;
+-		}
+-		hasFocus.eq( 0 ).focus();
+-	},
+-
+-	_keepFocus: function( event ) {
+-		function checkFocus() {
+-			var activeElement = this.document[0].activeElement,
+-				isActive = this.uiDialog[0] === activeElement ||
+-					$.contains( this.uiDialog[0], activeElement );
+-			if ( !isActive ) {
+-				this._focusTabbable();
+-			}
+-		}
+-		event.preventDefault();
+-		checkFocus.call( this );
+-		// support: IE
+-		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+-		// so we check again later
+-		this._delay( checkFocus );
+-	},
+-
+-	_createWrapper: function() {
+-		this.uiDialog = $("<div>")
+-			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+-				this.options.dialogClass )
+-			.hide()
+-			.attr({
+-				// Setting tabIndex makes the div focusable
+-				tabIndex: -1,
+-				role: "dialog"
+-			})
+-			.appendTo( this._appendTo() );
+-
+-		this._on( this.uiDialog, {
+-			keydown: function( event ) {
+-				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+-						event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					event.preventDefault();
+-					this.close( event );
+-					return;
+-				}
+-
+-				// prevent tabbing out of dialogs
+-				if ( event.keyCode !== $.ui.keyCode.TAB ) {
+-					return;
+-				}
+-				var tabbables = this.uiDialog.find(":tabbable"),
+-					first = tabbables.filter(":first"),
+-					last  = tabbables.filter(":last");
+-
+-				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+-					first.focus( 1 );
+-					event.preventDefault();
+-				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+-					last.focus( 1 );
+-					event.preventDefault();
+-				}
+-			},
+-			mousedown: function( event ) {
+-				if ( this._moveToTop( event ) ) {
+-					this._focusTabbable();
+-				}
+-			}
+-		});
+-
+-		// We assume that any existing aria-describedby attribute means
+-		// that the dialog content is marked up properly
+-		// otherwise we brute force the content as the description
+-		if ( !this.element.find("[aria-describedby]").length ) {
+-			this.uiDialog.attr({
+-				"aria-describedby": this.element.uniqueId().attr("id")
+-			});
+-		}
+-	},
+-
+-	_createTitlebar: function() {
+-		var uiDialogTitle;
+-
+-		this.uiDialogTitlebar = $("<div>")
+-			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+-			.prependTo( this.uiDialog );
+-		this._on( this.uiDialogTitlebar, {
+-			mousedown: function( event ) {
+-				// Don't prevent click on close button (#8838)
+-				// Focusing a dialog that is partially scrolled out of view
+-				// causes the browser to scroll it into view, preventing the click event
+-				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
+-					// Dialog isn't getting focus when dragging (#8063)
+-					this.uiDialog.focus();
+-				}
+-			}
+-		});
+-
+-		this.uiDialogTitlebarClose = $("<button></button>")
+-			.button({
+-				label: this.options.closeText,
+-				icons: {
+-					primary: "ui-icon-closethick"
+-				},
+-				text: false
+-			})
+-			.addClass("ui-dialog-titlebar-close")
+-			.appendTo( this.uiDialogTitlebar );
+-		this._on( this.uiDialogTitlebarClose, {
+-			click: function( event ) {
+-				event.preventDefault();
+-				this.close( event );
+-			}
+-		});
+-
+-		uiDialogTitle = $("<span>")
+-			.uniqueId()
+-			.addClass("ui-dialog-title")
+-			.prependTo( this.uiDialogTitlebar );
+-		this._title( uiDialogTitle );
+-
+-		this.uiDialog.attr({
+-			"aria-labelledby": uiDialogTitle.attr("id")
+-		});
+-	},
+-
+-	_title: function( title ) {
+-		if ( !this.options.title ) {
+-			title.html("&#160;");
+-		}
+-		title.text( this.options.title );
+-	},
+-
+-	_createButtonPane: function() {
+-		this.uiDialogButtonPane = $("<div>")
+-			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+-
+-		this.uiButtonSet = $("<div>")
+-			.addClass("ui-dialog-buttonset")
+-			.appendTo( this.uiDialogButtonPane );
+-
+-		this._createButtons();
+-	},
+-
+-	_createButtons: function() {
+-		var that = this,
+-			buttons = this.options.buttons;
+-
+-		// if we already have a button pane, remove it
+-		this.uiDialogButtonPane.remove();
+-		this.uiButtonSet.empty();
+-
+-		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+-			this.uiDialog.removeClass("ui-dialog-buttons");
+-			return;
+-		}
+-
+-		$.each( buttons, function( name, props ) {
+-			var click, buttonOptions;
+-			props = $.isFunction( props ) ?
+-				{ click: props, text: name } :
+-				props;
+-			// Default to a non-submitting button
+-			props = $.extend( { type: "button" }, props );
+-			// Change the context for the click callback to be the main element
+-			click = props.click;
+-			props.click = function() {
+-				click.apply( that.element[0], arguments );
+-			};
+-			buttonOptions = {
+-				icons: props.icons,
+-				text: props.showText
+-			};
+-			delete props.icons;
+-			delete props.showText;
+-			$( "<button></button>", props )
+-				.button( buttonOptions )
+-				.appendTo( that.uiButtonSet );
+-		});
+-		this.uiDialog.addClass("ui-dialog-buttons");
+-		this.uiDialogButtonPane.appendTo( this.uiDialog );
+-	},
+-
+-	_makeDraggable: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		function filteredUi( ui ) {
+-			return {
+-				position: ui.position,
+-				offset: ui.offset
+-			};
+-		}
+-
+-		this.uiDialog.draggable({
+-			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+-			handle: ".ui-dialog-titlebar",
+-			containment: "document",
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-dragging");
+-				that._blockFrames();
+-				that._trigger( "dragStart", event, filteredUi( ui ) );
+-			},
+-			drag: function( event, ui ) {
+-				that._trigger( "drag", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.position = [
+-					ui.position.left - that.document.scrollLeft(),
+-					ui.position.top - that.document.scrollTop()
+-				];
+-				$( this ).removeClass("ui-dialog-dragging");
+-				that._unblockFrames();
+-				that._trigger( "dragStop", event, filteredUi( ui ) );
+-			}
+-		});
+-	},
+-
+-	_makeResizable: function() {
+-		var that = this,
+-			options = this.options,
+-			handles = options.resizable,
+-			// .ui-resizable has position: relative defined in the stylesheet
+-			// but dialogs have to use absolute or fixed positioning
+-			position = this.uiDialog.css("position"),
+-			resizeHandles = typeof handles === "string" ?
+-				handles	:
+-				"n,e,s,w,se,sw,ne,nw";
+-
+-		function filteredUi( ui ) {
+-			return {
+-				originalPosition: ui.originalPosition,
+-				originalSize: ui.originalSize,
+-				position: ui.position,
+-				size: ui.size
+-			};
+-		}
+-
+-		this.uiDialog.resizable({
+-			cancel: ".ui-dialog-content",
+-			containment: "document",
+-			alsoResize: this.element,
+-			maxWidth: options.maxWidth,
+-			maxHeight: options.maxHeight,
+-			minWidth: options.minWidth,
+-			minHeight: this._minHeight(),
+-			handles: resizeHandles,
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-resizing");
+-				that._blockFrames();
+-				that._trigger( "resizeStart", event, filteredUi( ui ) );
+-			},
+-			resize: function( event, ui ) {
+-				that._trigger( "resize", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.height = $( this ).height();
+-				options.width = $( this ).width();
+-				$( this ).removeClass("ui-dialog-resizing");
+-				that._unblockFrames();
+-				that._trigger( "resizeStop", event, filteredUi( ui ) );
+-			}
+-		})
+-		.css( "position", position );
+-	},
+-
+-	_minHeight: function() {
+-		var options = this.options;
+-
+-		return options.height === "auto" ?
+-			options.minHeight :
+-			Math.min( options.minHeight, options.height );
+-	},
+-
+-	_position: function() {
+-		// Need to show the dialog to get the actual offset in the position plugin
+-		var isVisible = this.uiDialog.is(":visible");
+-		if ( !isVisible ) {
+-			this.uiDialog.show();
+-		}
+-		this.uiDialog.position( this.options.position );
+-		if ( !isVisible ) {
+-			this.uiDialog.hide();
+-		}
+-	},
+-
+-	_setOptions: function( options ) {
+-		var that = this,
+-			resize = false,
+-			resizableOptions = {};
+-
+-		$.each( options, function( key, value ) {
+-			that._setOption( key, value );
+-
+-			if ( key in sizeRelatedOptions ) {
+-				resize = true;
+-			}
+-			if ( key in resizableRelatedOptions ) {
+-				resizableOptions[ key ] = value;
+-			}
+-		});
+-
+-		if ( resize ) {
+-			this._size();
+-			this._position();
+-		}
+-		if ( this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", resizableOptions );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		/*jshint maxcomplexity:15*/
+-		var isDraggable, isResizable,
+-			uiDialog = this.uiDialog;
+-
+-		if ( key === "dialogClass" ) {
+-			uiDialog
+-				.removeClass( this.options.dialogClass )
+-				.addClass( value );
+-		}
+-
+-		if ( key === "disabled" ) {
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "appendTo" ) {
+-			this.uiDialog.appendTo( this._appendTo() );
+-		}
+-
+-		if ( key === "buttons" ) {
+-			this._createButtons();
+-		}
+-
+-		if ( key === "closeText" ) {
+-			this.uiDialogTitlebarClose.button({
+-				// Ensure that we always pass a string
+-				label: "" + value
+-			});
+-		}
+-
+-		if ( key === "draggable" ) {
+-			isDraggable = uiDialog.is(":data(ui-draggable)");
+-			if ( isDraggable && !value ) {
+-				uiDialog.draggable("destroy");
+-			}
+-
+-			if ( !isDraggable && value ) {
+-				this._makeDraggable();
+-			}
+-		}
+-
+-		if ( key === "position" ) {
+-			this._position();
+-		}
+-
+-		if ( key === "resizable" ) {
+-			// currently resizable, becoming non-resizable
+-			isResizable = uiDialog.is(":data(ui-resizable)");
+-			if ( isResizable && !value ) {
+-				uiDialog.resizable("destroy");
+-			}
+-
+-			// currently resizable, changing handles
+-			if ( isResizable && typeof value === "string" ) {
+-				uiDialog.resizable( "option", "handles", value );
+-			}
+-
+-			// currently non-resizable, becoming resizable
+-			if ( !isResizable && value !== false ) {
+-				this._makeResizable();
+-			}
+-		}
+-
+-		if ( key === "title" ) {
+-			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
+-		}
+-	},
+-
+-	_size: function() {
+-		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+-		// divs will both have width and height set, so we need to reset them
+-		var nonContentHeight, minContentHeight, maxContentHeight,
+-			options = this.options;
+-
+-		// Reset content sizing
+-		this.element.show().css({
+-			width: "auto",
+-			minHeight: 0,
+-			maxHeight: "none",
+-			height: 0
+-		});
+-
+-		if ( options.minWidth > options.width ) {
+-			options.width = options.minWidth;
+-		}
+-
+-		// reset wrapper sizing
+-		// determine the height of all the non-content elements
+-		nonContentHeight = this.uiDialog.css({
+-				height: "auto",
+-				width: options.width
+-			})
+-			.outerHeight();
+-		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+-		maxContentHeight = typeof options.maxHeight === "number" ?
+-			Math.max( 0, options.maxHeight - nonContentHeight ) :
+-			"none";
+-
+-		if ( options.height === "auto" ) {
+-			this.element.css({
+-				minHeight: minContentHeight,
+-				maxHeight: maxContentHeight,
+-				height: "auto"
+-			});
+-		} else {
+-			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+-		}
+-
+-		if (this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+-		}
+-	},
+-
+-	_blockFrames: function() {
+-		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+-			var iframe = $( this );
+-
+-			return $( "<div>" )
+-				.css({
+-					position: "absolute",
+-					width: iframe.outerWidth(),
+-					height: iframe.outerHeight()
+-				})
+-				.appendTo( iframe.parent() )
+-				.offset( iframe.offset() )[0];
+-		});
+-	},
+-
+-	_unblockFrames: function() {
+-		if ( this.iframeBlocks ) {
+-			this.iframeBlocks.remove();
+-			delete this.iframeBlocks;
+-		}
+-	},
+-
+-	_allowInteraction: function( event ) {
+-		if ( $( event.target ).closest(".ui-dialog").length ) {
+-			return true;
+-		}
+-
+-		// TODO: Remove hack when datepicker implements
+-		// the .ui-front logic (#8989)
+-		return !!$( event.target ).closest(".ui-datepicker").length;
+-	},
+-
+-	_createOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		var that = this,
+-			widgetFullName = this.widgetFullName;
+-		if ( !$.ui.dialog.overlayInstances ) {
+-			// Prevent use of anchors and inputs.
+-			// We use a delay in case the overlay is created from an
+-			// event that we're going to be cancelling. (#2804)
+-			this._delay(function() {
+-				// Handle .dialog().dialog("close") (#4065)
+-				if ( $.ui.dialog.overlayInstances ) {
+-					this.document.bind( "focusin.dialog", function( event ) {
+-						if ( !that._allowInteraction( event ) ) {
+-							event.preventDefault();
+-							$(".ui-dialog:visible:last .ui-dialog-content")
+-								.data( widgetFullName )._focusTabbable();
+-						}
+-					});
+-				}
+-			});
+-		}
+-
+-		this.overlay = $("<div>")
+-			.addClass("ui-widget-overlay ui-front")
+-			.appendTo( this._appendTo() );
+-		this._on( this.overlay, {
+-			mousedown: "_keepFocus"
+-		});
+-		$.ui.dialog.overlayInstances++;
+-	},
+-
+-	_destroyOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		if ( this.overlay ) {
+-			$.ui.dialog.overlayInstances--;
+-
+-			if ( !$.ui.dialog.overlayInstances ) {
+-				this.document.unbind( "focusin.dialog" );
+-			}
+-			this.overlay.remove();
+-			this.overlay = null;
+-		}
+-	}
+-});
+-
+-$.ui.dialog.overlayInstances = 0;
+-
+-// DEPRECATED
+-if ( $.uiBackCompat !== false ) {
+-	// position option with array notation
+-	// just override with old implementation
+-	$.widget( "ui.dialog", $.ui.dialog, {
+-		_position: function() {
+-			var position = this.options.position,
+-				myAt = [],
+-				offset = [ 0, 0 ],
+-				isVisible;
+-
+-			if ( position ) {
+-				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+-					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
+-					if ( myAt.length === 1 ) {
+-						myAt[1] = myAt[0];
+-					}
+-
+-					$.each( [ "left", "top" ], function( i, offsetPosition ) {
+-						if ( +myAt[ i ] === myAt[ i ] ) {
+-							offset[ i ] = myAt[ i ];
+-							myAt[ i ] = offsetPosition;
+-						}
+-					});
+-
+-					position = {
+-						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+-							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+-						at: myAt.join(" ")
+-					};
+-				}
+-
+-				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
+-			} else {
+-				position = $.ui.dialog.prototype.options.position;
+-			}
+-
+-			// need to show the dialog to get the actual offset in the position plugin
+-			isVisible = this.uiDialog.is(":visible");
+-			if ( !isVisible ) {
+-				this.uiDialog.show();
+-			}
+-			this.uiDialog.position( position );
+-			if ( !isVisible ) {
+-				this.uiDialog.hide();
+-			}
+-		}
+-	});
+-}
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-highlight.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-highlight.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-highlight.js	(revision 15488)
+@@ -1,50 +0,0 @@
+-/*!
+- * jQuery UI Effects Highlight 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/highlight-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.highlight = function( o, done ) {
+-	var elem = $( this ),
+-		props = [ "backgroundImage", "backgroundColor", "opacity" ],
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		animation = {
+-			backgroundColor: elem.css( "backgroundColor" )
+-		};
+-
+-	if (mode === "hide") {
+-		animation.opacity = 0;
+-	}
+-
+-	$.effects.save( elem, props );
+-
+-	elem
+-		.show()
+-		.css({
+-			backgroundImage: "none",
+-			backgroundColor: o.color || "#ffff99"
+-		})
+-		.animate( animation, {
+-			queue: false,
+-			duration: o.duration,
+-			easing: o.easing,
+-			complete: function() {
+-				if ( mode === "hide" ) {
+-					elem.hide();
+-				}
+-				$.effects.restore( elem, props );
+-				done();
+-			}
+-		});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.autocomplete.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.autocomplete.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.autocomplete.js	(revision 15488)
+@@ -1,610 +0,0 @@
+-/*!
+- * jQuery UI Autocomplete 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/autocomplete/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.position.js
+- *	jquery.ui.menu.js
+- */
+-(function( $, undefined ) {
+-
+-// used to prevent race conditions with remote data sources
+-var requestIndex = 0;
+-
+-$.widget( "ui.autocomplete", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	options: {
+-		appendTo: null,
+-		autoFocus: false,
+-		delay: 300,
+-		minLength: 1,
+-		position: {
+-			my: "left top",
+-			at: "left bottom",
+-			collision: "none"
+-		},
+-		source: null,
+-
+-		// callbacks
+-		change: null,
+-		close: null,
+-		focus: null,
+-		open: null,
+-		response: null,
+-		search: null,
+-		select: null
+-	},
+-
+-	pending: 0,
+-
+-	_create: function() {
+-		// Some browsers only repeat keydown events, not keypress events,
+-		// so we use the suppressKeyPress flag to determine if we've already
+-		// handled the keydown event. #7269
+-		// Unfortunately the code for & in keypress is the same as the up arrow,
+-		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
+-		// events when we know the keydown event was used to modify the
+-		// search term. #7799
+-		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+-			nodeName = this.element[0].nodeName.toLowerCase(),
+-			isTextarea = nodeName === "textarea",
+-			isInput = nodeName === "input";
+-
+-		this.isMultiLine =
+-			// Textareas are always multi-line
+-			isTextarea ? true :
+-			// Inputs are always single-line, even if inside a contentEditable element
+-			// IE also treats inputs as contentEditable
+-			isInput ? false :
+-			// All other element types are determined by whether or not they're contentEditable
+-			this.element.prop( "isContentEditable" );
+-
+-		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+-		this.isNewMenu = true;
+-
+-		this.element
+-			.addClass( "ui-autocomplete-input" )
+-			.attr( "autocomplete", "off" );
+-
+-		this._on( this.element, {
+-			keydown: function( event ) {
+-				/*jshint maxcomplexity:15*/
+-				if ( this.element.prop( "readOnly" ) ) {
+-					suppressKeyPress = true;
+-					suppressInput = true;
+-					suppressKeyPressRepeat = true;
+-					return;
+-				}
+-
+-				suppressKeyPress = false;
+-				suppressInput = false;
+-				suppressKeyPressRepeat = false;
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					suppressKeyPress = true;
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					suppressKeyPress = true;
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					suppressKeyPress = true;
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					suppressKeyPress = true;
+-					this._keyEvent( "next", event );
+-					break;
+-				case keyCode.ENTER:
+-				case keyCode.NUMPAD_ENTER:
+-					// when menu is open and has focus
+-					if ( this.menu.active ) {
+-						// #6055 - Opera still allows the keypress to occur
+-						// which causes forms to submit
+-						suppressKeyPress = true;
+-						event.preventDefault();
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.TAB:
+-					if ( this.menu.active ) {
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.ESCAPE:
+-					if ( this.menu.element.is( ":visible" ) ) {
+-						this._value( this.term );
+-						this.close( event );
+-						// Different browsers have different default behavior for escape
+-						// Single press can mean undo or clear
+-						// Double press in IE means clear the whole form
+-						event.preventDefault();
+-					}
+-					break;
+-				default:
+-					suppressKeyPressRepeat = true;
+-					// search timeout should be triggered before the input value is changed
+-					this._searchTimeout( event );
+-					break;
+-				}
+-			},
+-			keypress: function( event ) {
+-				if ( suppressKeyPress ) {
+-					suppressKeyPress = false;
+-					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-						event.preventDefault();
+-					}
+-					return;
+-				}
+-				if ( suppressKeyPressRepeat ) {
+-					return;
+-				}
+-
+-				// replicate some key handlers to allow them to repeat in Firefox and Opera
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					this._keyEvent( "next", event );
+-					break;
+-				}
+-			},
+-			input: function( event ) {
+-				if ( suppressInput ) {
+-					suppressInput = false;
+-					event.preventDefault();
+-					return;
+-				}
+-				this._searchTimeout( event );
+-			},
+-			focus: function() {
+-				this.selectedItem = null;
+-				this.previous = this._value();
+-			},
+-			blur: function( event ) {
+-				if ( this.cancelBlur ) {
+-					delete this.cancelBlur;
+-					return;
+-				}
+-
+-				clearTimeout( this.searching );
+-				this.close( event );
+-				this._change( event );
+-			}
+-		});
+-
+-		this._initSource();
+-		this.menu = $( "<ul>" )
+-			.addClass( "ui-autocomplete ui-front" )
+-			.appendTo( this._appendTo() )
+-			.menu({
+-				// disable ARIA support, the live region takes care of that
+-				role: null
+-			})
+-			.hide()
+-			.data( "ui-menu" );
+-
+-		this._on( this.menu.element, {
+-			mousedown: function( event ) {
+-				// prevent moving focus out of the text field
+-				event.preventDefault();
+-
+-				// IE doesn't prevent moving focus even with event.preventDefault()
+-				// so we set a flag to know when we should ignore the blur event
+-				this.cancelBlur = true;
+-				this._delay(function() {
+-					delete this.cancelBlur;
+-				});
+-
+-				// clicking on the scrollbar causes focus to shift to the body
+-				// but we can't detect a mouseup or a click immediately afterward
+-				// so we have to track the next mousedown and close the menu if
+-				// the user clicks somewhere outside of the autocomplete
+-				var menuElement = this.menu.element[ 0 ];
+-				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+-					this._delay(function() {
+-						var that = this;
+-						this.document.one( "mousedown", function( event ) {
+-							if ( event.target !== that.element[ 0 ] &&
+-									event.target !== menuElement &&
+-									!$.contains( menuElement, event.target ) ) {
+-								that.close();
+-							}
+-						});
+-					});
+-				}
+-			},
+-			menufocus: function( event, ui ) {
+-				// support: Firefox
+-				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
+-				if ( this.isNewMenu ) {
+-					this.isNewMenu = false;
+-					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+-						this.menu.blur();
+-
+-						this.document.one( "mousemove", function() {
+-							$( event.target ).trigger( event.originalEvent );
+-						});
+-
+-						return;
+-					}
+-				}
+-
+-				var item = ui.item.data( "ui-autocomplete-item" );
+-				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+-					// use value to match what will end up in the input, if it was a key event
+-					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+-						this._value( item.value );
+-					}
+-				} else {
+-					// Normally the input is populated with the item's value as the
+-					// menu is navigated, causing screen readers to notice a change and
+-					// announce the item. Since the focus event was canceled, this doesn't
+-					// happen, so we update the live region so that screen readers can
+-					// still notice the change and announce it.
+-					this.liveRegion.text( item.value );
+-				}
+-			},
+-			menuselect: function( event, ui ) {
+-				var item = ui.item.data( "ui-autocomplete-item" ),
+-					previous = this.previous;
+-
+-				// only trigger when focus was lost (click on menu)
+-				if ( this.element[0] !== this.document[0].activeElement ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// #6109 - IE triggers two focus events and the second
+-					// is asynchronous, so we need to reset the previous
+-					// term synchronously and asynchronously :-(
+-					this._delay(function() {
+-						this.previous = previous;
+-						this.selectedItem = item;
+-					});
+-				}
+-
+-				if ( false !== this._trigger( "select", event, { item: item } ) ) {
+-					this._value( item.value );
+-				}
+-				// reset the term after the select event
+-				// this allows custom select handling to work properly
+-				this.term = this._value();
+-
+-				this.close( event );
+-				this.selectedItem = item;
+-			}
+-		});
+-
+-		this.liveRegion = $( "<span>", {
+-				role: "status",
+-				"aria-live": "polite"
+-			})
+-			.addClass( "ui-helper-hidden-accessible" )
+-			.insertBefore( this.element );
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		clearTimeout( this.searching );
+-		this.element
+-			.removeClass( "ui-autocomplete-input" )
+-			.removeAttr( "autocomplete" );
+-		this.menu.element.remove();
+-		this.liveRegion.remove();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "source" ) {
+-			this._initSource();
+-		}
+-		if ( key === "appendTo" ) {
+-			this.menu.element.appendTo( this._appendTo() );
+-		}
+-		if ( key === "disabled" && value && this.xhr ) {
+-			this.xhr.abort();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-
+-		if ( element ) {
+-			element = element.jquery || element.nodeType ?
+-				$( element ) :
+-				this.document.find( element ).eq( 0 );
+-		}
+-
+-		if ( !element ) {
+-			element = this.element.closest( ".ui-front" );
+-		}
+-
+-		if ( !element.length ) {
+-			element = this.document[0].body;
+-		}
+-
+-		return element;
+-	},
+-
+-	_initSource: function() {
+-		var array, url,
+-			that = this;
+-		if ( $.isArray(this.options.source) ) {
+-			array = this.options.source;
+-			this.source = function( request, response ) {
+-				response( $.ui.autocomplete.filter( array, request.term ) );
+-			};
+-		} else if ( typeof this.options.source === "string" ) {
+-			url = this.options.source;
+-			this.source = function( request, response ) {
+-				if ( that.xhr ) {
+-					that.xhr.abort();
+-				}
+-				that.xhr = $.ajax({
+-					url: url,
+-					data: request,
+-					dataType: "json",
+-					success: function( data ) {
+-						response( data );
+-					},
+-					error: function() {
+-						response( [] );
+-					}
+-				});
+-			};
+-		} else {
+-			this.source = this.options.source;
+-		}
+-	},
+-
+-	_searchTimeout: function( event ) {
+-		clearTimeout( this.searching );
+-		this.searching = this._delay(function() {
+-			// only search if the value has changed
+-			if ( this.term !== this._value() ) {
+-				this.selectedItem = null;
+-				this.search( null, event );
+-			}
+-		}, this.options.delay );
+-	},
+-
+-	search: function( value, event ) {
+-		value = value != null ? value : this._value();
+-
+-		// always save the actual value, not the one passed as an argument
+-		this.term = this._value();
+-
+-		if ( value.length < this.options.minLength ) {
+-			return this.close( event );
+-		}
+-
+-		if ( this._trigger( "search", event ) === false ) {
+-			return;
+-		}
+-
+-		return this._search( value );
+-	},
+-
+-	_search: function( value ) {
+-		this.pending++;
+-		this.element.addClass( "ui-autocomplete-loading" );
+-		this.cancelSearch = false;
+-
+-		this.source( { term: value }, this._response() );
+-	},
+-
+-	_response: function() {
+-		var that = this,
+-			index = ++requestIndex;
+-
+-		return function( content ) {
+-			if ( index === requestIndex ) {
+-				that.__response( content );
+-			}
+-
+-			that.pending--;
+-			if ( !that.pending ) {
+-				that.element.removeClass( "ui-autocomplete-loading" );
+-			}
+-		};
+-	},
+-
+-	__response: function( content ) {
+-		if ( content ) {
+-			content = this._normalize( content );
+-		}
+-		this._trigger( "response", null, { content: content } );
+-		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+-			this._suggest( content );
+-			this._trigger( "open" );
+-		} else {
+-			// use ._close() instead of .close() so we don't cancel future searches
+-			this._close();
+-		}
+-	},
+-
+-	close: function( event ) {
+-		this.cancelSearch = true;
+-		this._close( event );
+-	},
+-
+-	_close: function( event ) {
+-		if ( this.menu.element.is( ":visible" ) ) {
+-			this.menu.element.hide();
+-			this.menu.blur();
+-			this.isNewMenu = true;
+-			this._trigger( "close", event );
+-		}
+-	},
+-
+-	_change: function( event ) {
+-		if ( this.previous !== this._value() ) {
+-			this._trigger( "change", event, { item: this.selectedItem } );
+-		}
+-	},
+-
+-	_normalize: function( items ) {
+-		// assume all items have the right format when the first item is complete
+-		if ( items.length && items[0].label && items[0].value ) {
+-			return items;
+-		}
+-		return $.map( items, function( item ) {
+-			if ( typeof item === "string" ) {
+-				return {
+-					label: item,
+-					value: item
+-				};
+-			}
+-			return $.extend({
+-				label: item.label || item.value,
+-				value: item.value || item.label
+-			}, item );
+-		});
+-	},
+-
+-	_suggest: function( items ) {
+-		var ul = this.menu.element.empty();
+-		this._renderMenu( ul, items );
+-		this.isNewMenu = true;
+-		this.menu.refresh();
+-
+-		// size and position menu
+-		ul.show();
+-		this._resizeMenu();
+-		ul.position( $.extend({
+-			of: this.element
+-		}, this.options.position ));
+-
+-		if ( this.options.autoFocus ) {
+-			this.menu.next();
+-		}
+-	},
+-
+-	_resizeMenu: function() {
+-		var ul = this.menu.element;
+-		ul.outerWidth( Math.max(
+-			// Firefox wraps long text (possibly a rounding bug)
+-			// so we add 1px to avoid the wrapping (#7513)
+-			ul.width( "" ).outerWidth() + 1,
+-			this.element.outerWidth()
+-		) );
+-	},
+-
+-	_renderMenu: function( ul, items ) {
+-		var that = this;
+-		$.each( items, function( index, item ) {
+-			that._renderItemData( ul, item );
+-		});
+-	},
+-
+-	_renderItemData: function( ul, item ) {
+-		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+-	},
+-
+-	_renderItem: function( ul, item ) {
+-		return $( "<li>" )
+-			.append( $( "<a>" ).text( item.label ) )
+-			.appendTo( ul );
+-	},
+-
+-	_move: function( direction, event ) {
+-		if ( !this.menu.element.is( ":visible" ) ) {
+-			this.search( null, event );
+-			return;
+-		}
+-		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+-				this.menu.isLastItem() && /^next/.test( direction ) ) {
+-			this._value( this.term );
+-			this.menu.blur();
+-			return;
+-		}
+-		this.menu[ direction ]( event );
+-	},
+-
+-	widget: function() {
+-		return this.menu.element;
+-	},
+-
+-	_value: function() {
+-		return this.valueMethod.apply( this.element, arguments );
+-	},
+-
+-	_keyEvent: function( keyEvent, event ) {
+-		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-			this._move( keyEvent, event );
+-
+-			// prevents moving cursor to beginning/end of the text field in some browsers
+-			event.preventDefault();
+-		}
+-	}
+-});
+-
+-$.extend( $.ui.autocomplete, {
+-	escapeRegex: function( value ) {
+-		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+-	},
+-	filter: function(array, term) {
+-		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+-		return $.grep( array, function(value) {
+-			return matcher.test( value.label || value.value || value );
+-		});
+-	}
+-});
+-
+-
+-// live region extension, adding a `messages` option
+-// NOTE: This is an experimental API. We are still investigating
+-// a full solution for string manipulation and internationalization.
+-$.widget( "ui.autocomplete", $.ui.autocomplete, {
+-	options: {
+-		messages: {
+-			noResults: "No search results.",
+-			results: function( amount ) {
+-				return amount + ( amount > 1 ? " results are" : " result is" ) +
+-					" available, use up and down arrow keys to navigate.";
+-			}
+-		}
+-	},
+-
+-	__response: function( content ) {
+-		var message;
+-		this._superApply( arguments );
+-		if ( this.options.disabled || this.cancelSearch ) {
+-			return;
+-		}
+-		if ( content && content.length ) {
+-			message = this.options.messages.results( content.length );
+-		} else {
+-			message = this.options.messages.noResults;
+-		}
+-		this.liveRegion.text( message );
+-	}
+-});
+-
+-}( jQuery ));
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.accordion.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.accordion.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.accordion.js	(revision 15488)
+@@ -1,572 +0,0 @@
+-/*!
+- * jQuery UI Accordion 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/accordion/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var uid = 0,
+-	hideProps = {},
+-	showProps = {};
+-
+-hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
+-	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
+-showProps.height = showProps.paddingTop = showProps.paddingBottom =
+-	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
+-
+-$.widget( "ui.accordion", {
+-	version: "1.10.3",
+-	options: {
+-		active: 0,
+-		animate: {},
+-		collapsible: false,
+-		event: "click",
+-		header: "> li > :first-child,> :not(li):even",
+-		heightStyle: "auto",
+-		icons: {
+-			activeHeader: "ui-icon-triangle-1-s",
+-			header: "ui-icon-triangle-1-e"
+-		},
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null
+-	},
+-
+-	_create: function() {
+-		var options = this.options;
+-		this.prevShow = this.prevHide = $();
+-		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+-			// ARIA
+-			.attr( "role", "tablist" );
+-
+-		// don't allow collapsible: false and active: false / null
+-		if ( !options.collapsible && (options.active === false || options.active == null) ) {
+-			options.active = 0;
+-		}
+-
+-		this._processPanels();
+-		// handle negative values
+-		if ( options.active < 0 ) {
+-			options.active += this.headers.length;
+-		}
+-		this._refresh();
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			header: this.active,
+-			panel: !this.active.length ? $() : this.active.next(),
+-			content: !this.active.length ? $() : this.active.next()
+-		};
+-	},
+-
+-	_createIcons: function() {
+-		var icons = this.options.icons;
+-		if ( icons ) {
+-			$( "<span>" )
+-				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+-				.prependTo( this.headers );
+-			this.active.children( ".ui-accordion-header-icon" )
+-				.removeClass( icons.header )
+-				.addClass( icons.activeHeader );
+-			this.headers.addClass( "ui-accordion-icons" );
+-		}
+-	},
+-
+-	_destroyIcons: function() {
+-		this.headers
+-			.removeClass( "ui-accordion-icons" )
+-			.children( ".ui-accordion-header-icon" )
+-				.remove();
+-	},
+-
+-	_destroy: function() {
+-		var contents;
+-
+-		// clean up main element
+-		this.element
+-			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+-			.removeAttr( "role" );
+-
+-		// clean up headers
+-		this.headers
+-			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-selected" )
+-			.removeAttr( "aria-controls" )
+-			.removeAttr( "tabIndex" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		this._destroyIcons();
+-
+-		// clean up content panels
+-		contents = this.headers.next()
+-			.css( "display", "" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-expanded" )
+-			.removeAttr( "aria-hidden" )
+-			.removeAttr( "aria-labelledby" )
+-			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		if ( this.options.heightStyle !== "content" ) {
+-			contents.css( "height", "" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "event" ) {
+-			if ( this.options.event ) {
+-				this._off( this.headers, this.options.event );
+-			}
+-			this._setupEvents( value );
+-		}
+-
+-		this._super( key, value );
+-
+-		// setting collapsible: false while collapsed; open first panel
+-		if ( key === "collapsible" && !value && this.options.active === false ) {
+-			this._activate( 0 );
+-		}
+-
+-		if ( key === "icons" ) {
+-			this._destroyIcons();
+-			if ( value ) {
+-				this._createIcons();
+-			}
+-		}
+-
+-		// #5332 - opacity doesn't cascade to positioned elements in IE
+-		// so we need to add the disabled class to the headers and panels
+-		if ( key === "disabled" ) {
+-			this.headers.add( this.headers.next() )
+-				.toggleClass( "ui-state-disabled", !!value );
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		if ( event.altKey || event.ctrlKey ) {
+-			return;
+-		}
+-
+-		var keyCode = $.ui.keyCode,
+-			length = this.headers.length,
+-			currentIndex = this.headers.index( event.target ),
+-			toFocus = false;
+-
+-		switch ( event.keyCode ) {
+-			case keyCode.RIGHT:
+-			case keyCode.DOWN:
+-				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+-				break;
+-			case keyCode.LEFT:
+-			case keyCode.UP:
+-				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+-				break;
+-			case keyCode.SPACE:
+-			case keyCode.ENTER:
+-				this._eventHandler( event );
+-				break;
+-			case keyCode.HOME:
+-				toFocus = this.headers[ 0 ];
+-				break;
+-			case keyCode.END:
+-				toFocus = this.headers[ length - 1 ];
+-				break;
+-		}
+-
+-		if ( toFocus ) {
+-			$( event.target ).attr( "tabIndex", -1 );
+-			$( toFocus ).attr( "tabIndex", 0 );
+-			toFocus.focus();
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_panelKeyDown : function( event ) {
+-		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+-			$( event.currentTarget ).prev().focus();
+-		}
+-	},
+-
+-	refresh: function() {
+-		var options = this.options;
+-		this._processPanels();
+-
+-		// was collapsed or no panel
+-		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// active false only when collapsible is true
+-		} else if ( options.active === false ) {
+-			this._activate( 0 );
+-		// was active, but active panel is gone
+-		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining panel are disabled
+-			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous panel
+-			} else {
+-				this._activate( Math.max( 0, options.active - 1 ) );
+-			}
+-		// was active, active panel still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.headers.index( this.active );
+-		}
+-
+-		this._destroyIcons();
+-
+-		this._refresh();
+-	},
+-
+-	_processPanels: function() {
+-		this.headers = this.element.find( this.options.header )
+-			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+-
+-		this.headers.next()
+-			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+-			.filter(":not(.ui-accordion-content-active)")
+-			.hide();
+-	},
+-
+-	_refresh: function() {
+-		var maxHeight,
+-			options = this.options,
+-			heightStyle = options.heightStyle,
+-			parent = this.element.parent(),
+-			accordionId = this.accordionId = "ui-accordion-" +
+-				(this.element.attr( "id" ) || ++uid);
+-
+-		this.active = this._findActive( options.active )
+-			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+-			.removeClass( "ui-corner-all" );
+-		this.active.next()
+-			.addClass( "ui-accordion-content-active" )
+-			.show();
+-
+-		this.headers
+-			.attr( "role", "tab" )
+-			.each(function( i ) {
+-				var header = $( this ),
+-					headerId = header.attr( "id" ),
+-					panel = header.next(),
+-					panelId = panel.attr( "id" );
+-				if ( !headerId ) {
+-					headerId = accordionId + "-header-" + i;
+-					header.attr( "id", headerId );
+-				}
+-				if ( !panelId ) {
+-					panelId = accordionId + "-panel-" + i;
+-					panel.attr( "id", panelId );
+-				}
+-				header.attr( "aria-controls", panelId );
+-				panel.attr( "aria-labelledby", headerId );
+-			})
+-			.next()
+-				.attr( "role", "tabpanel" );
+-
+-		this.headers
+-			.not( this.active )
+-			.attr({
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "false",
+-					"aria-hidden": "true"
+-				})
+-				.hide();
+-
+-		// make sure at least one header is in the tab order
+-		if ( !this.active.length ) {
+-			this.headers.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active.attr({
+-				"aria-selected": "true",
+-				tabIndex: 0
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-
+-		this._createIcons();
+-
+-		this._setupEvents( options.event );
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.headers.each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.headers.next()
+-				.each(function() {
+-					$( this ).height( Math.max( 0, maxHeight -
+-						$( this ).innerHeight() + $( this ).height() ) );
+-				})
+-				.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.headers.next()
+-				.each(function() {
+-					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+-				})
+-				.height( maxHeight );
+-		}
+-	},
+-
+-	_activate: function( index ) {
+-		var active = this._findActive( index )[ 0 ];
+-
+-		// trying to activate the already active panel
+-		if ( active === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the currently active header
+-		active = active || this.active[ 0 ];
+-
+-		this._eventHandler({
+-			target: active,
+-			currentTarget: active,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( selector ) {
+-		return typeof selector === "number" ? this.headers.eq( selector ) : $();
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			keydown: "_keydown"
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.headers.add( this.headers.next() ) );
+-		this._on( this.headers, events );
+-		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+-		this._hoverable( this.headers );
+-		this._focusable( this.headers );
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			clicked = $( event.currentTarget ),
+-			clickedIsActive = clicked[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : clicked.next(),
+-			toHide = active.next(),
+-			eventData = {
+-				oldHeader: active,
+-				oldPanel: toHide,
+-				newHeader: collapsing ? $() : clicked,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if (
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.headers.index( clicked );
+-
+-		// when the call to ._toggle() comes after the class changes
+-		// it causes a very odd bug in IE 8 (see #6720)
+-		this.active = clickedIsActive ? $() : clicked;
+-		this._toggle( eventData );
+-
+-		// switch classes
+-		// corner classes on the previously active header stay after the animation
+-		active.removeClass( "ui-accordion-header-active ui-state-active" );
+-		if ( options.icons ) {
+-			active.children( ".ui-accordion-header-icon" )
+-				.removeClass( options.icons.activeHeader )
+-				.addClass( options.icons.header );
+-		}
+-
+-		if ( !clickedIsActive ) {
+-			clicked
+-				.removeClass( "ui-corner-all" )
+-				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+-			if ( options.icons ) {
+-				clicked.children( ".ui-accordion-header-icon" )
+-					.removeClass( options.icons.header )
+-					.addClass( options.icons.activeHeader );
+-			}
+-
+-			clicked
+-				.next()
+-				.addClass( "ui-accordion-content-active" );
+-		}
+-	},
+-
+-	_toggle: function( data ) {
+-		var toShow = data.newPanel,
+-			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+-
+-		// handle activating a panel during the animation for another activation
+-		this.prevShow.add( this.prevHide ).stop( true, true );
+-		this.prevShow = toShow;
+-		this.prevHide = toHide;
+-
+-		if ( this.options.animate ) {
+-			this._animate( toShow, toHide, data );
+-		} else {
+-			toHide.hide();
+-			toShow.show();
+-			this._toggleComplete( data );
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		toHide.prev().attr( "aria-selected", "false" );
+-		// if we're switching panels, remove the old header from the tab order
+-		// if we're opening from collapsed state, remove the previous header from the tab order
+-		// if we're collapsing, then keep the collapsing header in the tab order
+-		if ( toShow.length && toHide.length ) {
+-			toHide.prev().attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.headers.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow
+-			.attr({
+-				"aria-expanded": "true",
+-				"aria-hidden": "false"
+-			})
+-			.prev()
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-	},
+-
+-	_animate: function( toShow, toHide, data ) {
+-		var total, easing, duration,
+-			that = this,
+-			adjust = 0,
+-			down = toShow.length &&
+-				( !toHide.length || ( toShow.index() < toHide.index() ) ),
+-			animate = this.options.animate || {},
+-			options = down && animate.down || animate,
+-			complete = function() {
+-				that._toggleComplete( data );
+-			};
+-
+-		if ( typeof options === "number" ) {
+-			duration = options;
+-		}
+-		if ( typeof options === "string" ) {
+-			easing = options;
+-		}
+-		// fall back from options to animation in case of partial down settings
+-		easing = easing || options.easing || animate.easing;
+-		duration = duration || options.duration || animate.duration;
+-
+-		if ( !toHide.length ) {
+-			return toShow.animate( showProps, duration, easing, complete );
+-		}
+-		if ( !toShow.length ) {
+-			return toHide.animate( hideProps, duration, easing, complete );
+-		}
+-
+-		total = toShow.show().outerHeight();
+-		toHide.animate( hideProps, {
+-			duration: duration,
+-			easing: easing,
+-			step: function( now, fx ) {
+-				fx.now = Math.round( now );
+-			}
+-		});
+-		toShow
+-			.hide()
+-			.animate( showProps, {
+-				duration: duration,
+-				easing: easing,
+-				complete: complete,
+-				step: function( now, fx ) {
+-					fx.now = Math.round( now );
+-					if ( fx.prop !== "height" ) {
+-						adjust += fx.now;
+-					} else if ( that.options.heightStyle !== "content" ) {
+-						fx.now = Math.round( total - toHide.outerHeight() - adjust );
+-						adjust = 0;
+-					}
+-				}
+-			});
+-	},
+-
+-	_toggleComplete: function( data ) {
+-		var toHide = data.oldPanel;
+-
+-		toHide
+-			.removeClass( "ui-accordion-content-active" )
+-			.prev()
+-				.removeClass( "ui-corner-top" )
+-				.addClass( "ui-corner-all" );
+-
+-		// Work around for rendering bug in IE (#5421)
+-		if ( toHide.length ) {
+-			toHide.parent()[0].className = toHide.parent()[0].className;
+-		}
+-
+-		this._trigger( "activate", null, data );
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.selectable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.selectable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.selectable.js	(revision 15488)
+@@ -1,277 +0,0 @@
+-/*!
+- * jQuery UI Selectable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/selectable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.selectable", $.ui.mouse, {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoRefresh: true,
+-		distance: 0,
+-		filter: "*",
+-		tolerance: "touch",
+-
+-		// callbacks
+-		selected: null,
+-		selecting: null,
+-		start: null,
+-		stop: null,
+-		unselected: null,
+-		unselecting: null
+-	},
+-	_create: function() {
+-		var selectees,
+-			that = this;
+-
+-		this.element.addClass("ui-selectable");
+-
+-		this.dragged = false;
+-
+-		// cache selectee children based on filter
+-		this.refresh = function() {
+-			selectees = $(that.options.filter, that.element[0]);
+-			selectees.addClass("ui-selectee");
+-			selectees.each(function() {
+-				var $this = $(this),
+-					pos = $this.offset();
+-				$.data(this, "selectable-item", {
+-					element: this,
+-					$element: $this,
+-					left: pos.left,
+-					top: pos.top,
+-					right: pos.left + $this.outerWidth(),
+-					bottom: pos.top + $this.outerHeight(),
+-					startselected: false,
+-					selected: $this.hasClass("ui-selected"),
+-					selecting: $this.hasClass("ui-selecting"),
+-					unselecting: $this.hasClass("ui-unselecting")
+-				});
+-			});
+-		};
+-		this.refresh();
+-
+-		this.selectees = selectees.addClass("ui-selectee");
+-
+-		this._mouseInit();
+-
+-		this.helper = $("<div class='ui-selectable-helper'></div>");
+-	},
+-
+-	_destroy: function() {
+-		this.selectees
+-			.removeClass("ui-selectee")
+-			.removeData("selectable-item");
+-		this.element
+-			.removeClass("ui-selectable ui-selectable-disabled");
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseStart: function(event) {
+-		var that = this,
+-			options = this.options;
+-
+-		this.opos = [event.pageX, event.pageY];
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		this.selectees = $(options.filter, this.element[0]);
+-
+-		this._trigger("start", event);
+-
+-		$(options.appendTo).append(this.helper);
+-		// position helper (lasso)
+-		this.helper.css({
+-			"left": event.pageX,
+-			"top": event.pageY,
+-			"width": 0,
+-			"height": 0
+-		});
+-
+-		if (options.autoRefresh) {
+-			this.refresh();
+-		}
+-
+-		this.selectees.filter(".ui-selected").each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.startselected = true;
+-			if (!event.metaKey && !event.ctrlKey) {
+-				selectee.$element.removeClass("ui-selected");
+-				selectee.selected = false;
+-				selectee.$element.addClass("ui-unselecting");
+-				selectee.unselecting = true;
+-				// selectable UNSELECTING callback
+-				that._trigger("unselecting", event, {
+-					unselecting: selectee.element
+-				});
+-			}
+-		});
+-
+-		$(event.target).parents().addBack().each(function() {
+-			var doSelect,
+-				selectee = $.data(this, "selectable-item");
+-			if (selectee) {
+-				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+-				selectee.$element
+-					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+-					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+-				selectee.unselecting = !doSelect;
+-				selectee.selecting = doSelect;
+-				selectee.selected = doSelect;
+-				// selectable (UN)SELECTING callback
+-				if (doSelect) {
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				} else {
+-					that._trigger("unselecting", event, {
+-						unselecting: selectee.element
+-					});
+-				}
+-				return false;
+-			}
+-		});
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		this.dragged = true;
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		var tmp,
+-			that = this,
+-			options = this.options,
+-			x1 = this.opos[0],
+-			y1 = this.opos[1],
+-			x2 = event.pageX,
+-			y2 = event.pageY;
+-
+-		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+-		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+-		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+-
+-		this.selectees.each(function() {
+-			var selectee = $.data(this, "selectable-item"),
+-				hit = false;
+-
+-			//prevent helper from being selected if appendTo: selectable
+-			if (!selectee || selectee.element === that.element[0]) {
+-				return;
+-			}
+-
+-			if (options.tolerance === "touch") {
+-				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+-			} else if (options.tolerance === "fit") {
+-				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+-			}
+-
+-			if (hit) {
+-				// SELECT
+-				if (selectee.selected) {
+-					selectee.$element.removeClass("ui-selected");
+-					selectee.selected = false;
+-				}
+-				if (selectee.unselecting) {
+-					selectee.$element.removeClass("ui-unselecting");
+-					selectee.unselecting = false;
+-				}
+-				if (!selectee.selecting) {
+-					selectee.$element.addClass("ui-selecting");
+-					selectee.selecting = true;
+-					// selectable SELECTING callback
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				}
+-			} else {
+-				// UNSELECT
+-				if (selectee.selecting) {
+-					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						selectee.$element.addClass("ui-selected");
+-						selectee.selected = true;
+-					} else {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						if (selectee.startselected) {
+-							selectee.$element.addClass("ui-unselecting");
+-							selectee.unselecting = true;
+-						}
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-				if (selectee.selected) {
+-					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+-						selectee.$element.removeClass("ui-selected");
+-						selectee.selected = false;
+-
+-						selectee.$element.addClass("ui-unselecting");
+-						selectee.unselecting = true;
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-			}
+-		});
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-		var that = this;
+-
+-		this.dragged = false;
+-
+-		$(".ui-unselecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-unselecting");
+-			selectee.unselecting = false;
+-			selectee.startselected = false;
+-			that._trigger("unselected", event, {
+-				unselected: selectee.element
+-			});
+-		});
+-		$(".ui-selecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+-			selectee.selecting = false;
+-			selectee.selected = true;
+-			selectee.startselected = true;
+-			that._trigger("selected", event, {
+-				selected: selectee.element
+-			});
+-		});
+-		this._trigger("stop", event);
+-
+-		this.helper.remove();
+-
+-		return false;
+-	}
+-
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.menu.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.menu.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.menu.js	(revision 15488)
+@@ -1,621 +0,0 @@
+-/*!
+- * jQuery UI Menu 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/menu/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.position.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget( "ui.menu", {
+-	version: "1.10.3",
+-	defaultElement: "<ul>",
+-	delay: 300,
+-	options: {
+-		icons: {
+-			submenu: "ui-icon-carat-1-e"
+-		},
+-		menus: "ul",
+-		position: {
+-			my: "left top",
+-			at: "right top"
+-		},
+-		role: "menu",
+-
+-		// callbacks
+-		blur: null,
+-		focus: null,
+-		select: null
+-	},
+-
+-	_create: function() {
+-		this.activeMenu = this.element;
+-		// flag used to prevent firing of the click handler
+-		// as the event bubbles up through nested menus
+-		this.mouseHandled = false;
+-		this.element
+-			.uniqueId()
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+-			.attr({
+-				role: this.options.role,
+-				tabIndex: 0
+-			})
+-			// need to catch all clicks on disabled menu
+-			// not possible through _on
+-			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
+-				if ( this.options.disabled ) {
+-					event.preventDefault();
+-				}
+-			}, this ));
+-
+-		if ( this.options.disabled ) {
+-			this.element
+-				.addClass( "ui-state-disabled" )
+-				.attr( "aria-disabled", "true" );
+-		}
+-
+-		this._on({
+-			// Prevent focus from sticking to links inside menu after clicking
+-			// them (focus should always stay on UL during navigation).
+-			"mousedown .ui-menu-item > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-state-disabled > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-menu-item:has(a)": function( event ) {
+-				var target = $( event.target ).closest( ".ui-menu-item" );
+-				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+-					this.mouseHandled = true;
+-
+-					this.select( event );
+-					// Open submenu on click
+-					if ( target.has( ".ui-menu" ).length ) {
+-						this.expand( event );
+-					} else if ( !this.element.is( ":focus" ) ) {
+-						// Redirect focus to the menu
+-						this.element.trigger( "focus", [ true ] );
+-
+-						// If the active item is on the top level, let it stay active.
+-						// Otherwise, blur the active item since it is no longer visible.
+-						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+-							clearTimeout( this.timer );
+-						}
+-					}
+-				}
+-			},
+-			"mouseenter .ui-menu-item": function( event ) {
+-				var target = $( event.currentTarget );
+-				// Remove ui-state-active class from siblings of the newly focused menu item
+-				// to avoid a jump caused by adjacent elements both having a class with a border
+-				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
+-				this.focus( event, target );
+-			},
+-			mouseleave: "collapseAll",
+-			"mouseleave .ui-menu": "collapseAll",
+-			focus: function( event, keepActiveItem ) {
+-				// If there's already an active item, keep it active
+-				// If not, activate the first item
+-				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+-
+-				if ( !keepActiveItem ) {
+-					this.focus( event, item );
+-				}
+-			},
+-			blur: function( event ) {
+-				this._delay(function() {
+-					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+-						this.collapseAll( event );
+-					}
+-				});
+-			},
+-			keydown: "_keydown"
+-		});
+-
+-		this.refresh();
+-
+-		// Clicks outside of a menu collapse any open menus
+-		this._on( this.document, {
+-			click: function( event ) {
+-				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
+-					this.collapseAll( event );
+-				}
+-
+-				// Reset the mouseHandled flag
+-				this.mouseHandled = false;
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		// Destroy (sub)menus
+-		this.element
+-			.removeAttr( "aria-activedescendant" )
+-			.find( ".ui-menu" ).addBack()
+-				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
+-				.removeAttr( "role" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "aria-labelledby" )
+-				.removeAttr( "aria-expanded" )
+-				.removeAttr( "aria-hidden" )
+-				.removeAttr( "aria-disabled" )
+-				.removeUniqueId()
+-				.show();
+-
+-		// Destroy menu items
+-		this.element.find( ".ui-menu-item" )
+-			.removeClass( "ui-menu-item" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-disabled" )
+-			.children( "a" )
+-				.removeUniqueId()
+-				.removeClass( "ui-corner-all ui-state-hover" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "role" )
+-				.removeAttr( "aria-haspopup" )
+-				.children().each( function() {
+-					var elem = $( this );
+-					if ( elem.data( "ui-menu-submenu-carat" ) ) {
+-						elem.remove();
+-					}
+-				});
+-
+-		// Destroy menu dividers
+-		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:20*/
+-		var match, prev, character, skip, regex,
+-			preventDefault = true;
+-
+-		function escape( value ) {
+-			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+-		}
+-
+-		switch ( event.keyCode ) {
+-		case $.ui.keyCode.PAGE_UP:
+-			this.previousPage( event );
+-			break;
+-		case $.ui.keyCode.PAGE_DOWN:
+-			this.nextPage( event );
+-			break;
+-		case $.ui.keyCode.HOME:
+-			this._move( "first", "first", event );
+-			break;
+-		case $.ui.keyCode.END:
+-			this._move( "last", "last", event );
+-			break;
+-		case $.ui.keyCode.UP:
+-			this.previous( event );
+-			break;
+-		case $.ui.keyCode.DOWN:
+-			this.next( event );
+-			break;
+-		case $.ui.keyCode.LEFT:
+-			this.collapse( event );
+-			break;
+-		case $.ui.keyCode.RIGHT:
+-			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+-				this.expand( event );
+-			}
+-			break;
+-		case $.ui.keyCode.ENTER:
+-		case $.ui.keyCode.SPACE:
+-			this._activate( event );
+-			break;
+-		case $.ui.keyCode.ESCAPE:
+-			this.collapse( event );
+-			break;
+-		default:
+-			preventDefault = false;
+-			prev = this.previousFilter || "";
+-			character = String.fromCharCode( event.keyCode );
+-			skip = false;
+-
+-			clearTimeout( this.filterTimer );
+-
+-			if ( character === prev ) {
+-				skip = true;
+-			} else {
+-				character = prev + character;
+-			}
+-
+-			regex = new RegExp( "^" + escape( character ), "i" );
+-			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-				return regex.test( $( this ).children( "a" ).text() );
+-			});
+-			match = skip && match.index( this.active.next() ) !== -1 ?
+-				this.active.nextAll( ".ui-menu-item" ) :
+-				match;
+-
+-			// If no matches on the current filter, reset to the last character pressed
+-			// to move down the menu to the first item that starts with that character
+-			if ( !match.length ) {
+-				character = String.fromCharCode( event.keyCode );
+-				regex = new RegExp( "^" + escape( character ), "i" );
+-				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-					return regex.test( $( this ).children( "a" ).text() );
+-				});
+-			}
+-
+-			if ( match.length ) {
+-				this.focus( event, match );
+-				if ( match.length > 1 ) {
+-					this.previousFilter = character;
+-					this.filterTimer = this._delay(function() {
+-						delete this.previousFilter;
+-					}, 1000 );
+-				} else {
+-					delete this.previousFilter;
+-				}
+-			} else {
+-				delete this.previousFilter;
+-			}
+-		}
+-
+-		if ( preventDefault ) {
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_activate: function( event ) {
+-		if ( !this.active.is( ".ui-state-disabled" ) ) {
+-			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
+-				this.expand( event );
+-			} else {
+-				this.select( event );
+-			}
+-		}
+-	},
+-
+-	refresh: function() {
+-		var menus,
+-			icon = this.options.icons.submenu,
+-			submenus = this.element.find( this.options.menus );
+-
+-		// Initialize nested menus
+-		submenus.filter( ":not(.ui-menu)" )
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.hide()
+-			.attr({
+-				role: this.options.role,
+-				"aria-hidden": "true",
+-				"aria-expanded": "false"
+-			})
+-			.each(function() {
+-				var menu = $( this ),
+-					item = menu.prev( "a" ),
+-					submenuCarat = $( "<span>" )
+-						.addClass( "ui-menu-icon ui-icon " + icon )
+-						.data( "ui-menu-submenu-carat", true );
+-
+-				item
+-					.attr( "aria-haspopup", "true" )
+-					.prepend( submenuCarat );
+-				menu.attr( "aria-labelledby", item.attr( "id" ) );
+-			});
+-
+-		menus = submenus.add( this.element );
+-
+-		// Don't refresh list items that are already adapted
+-		menus.children( ":not(.ui-menu-item):has(a)" )
+-			.addClass( "ui-menu-item" )
+-			.attr( "role", "presentation" )
+-			.children( "a" )
+-				.uniqueId()
+-				.addClass( "ui-corner-all" )
+-				.attr({
+-					tabIndex: -1,
+-					role: this._itemRole()
+-				});
+-
+-		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
+-		menus.children( ":not(.ui-menu-item)" ).each(function() {
+-			var item = $( this );
+-			// hyphen, em dash, en dash
+-			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
+-				item.addClass( "ui-widget-content ui-menu-divider" );
+-			}
+-		});
+-
+-		// Add aria-disabled attribute to any disabled menu item
+-		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+-
+-		// If the active item has been removed, blur the menu
+-		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			this.blur();
+-		}
+-	},
+-
+-	_itemRole: function() {
+-		return {
+-			menu: "menuitem",
+-			listbox: "option"
+-		}[ this.options.role ];
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "icons" ) {
+-			this.element.find( ".ui-menu-icon" )
+-				.removeClass( this.options.icons.submenu )
+-				.addClass( value.submenu );
+-		}
+-		this._super( key, value );
+-	},
+-
+-	focus: function( event, item ) {
+-		var nested, focused;
+-		this.blur( event, event && event.type === "focus" );
+-
+-		this._scrollIntoView( item );
+-
+-		this.active = item.first();
+-		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
+-		// Only update aria-activedescendant if there's a role
+-		// otherwise we assume focus is managed elsewhere
+-		if ( this.options.role ) {
+-			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+-		}
+-
+-		// Highlight active parent menu item, if any
+-		this.active
+-			.parent()
+-			.closest( ".ui-menu-item" )
+-			.children( "a:first" )
+-			.addClass( "ui-state-active" );
+-
+-		if ( event && event.type === "keydown" ) {
+-			this._close();
+-		} else {
+-			this.timer = this._delay(function() {
+-				this._close();
+-			}, this.delay );
+-		}
+-
+-		nested = item.children( ".ui-menu" );
+-		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
+-			this._startOpening(nested);
+-		}
+-		this.activeMenu = item.parent();
+-
+-		this._trigger( "focus", event, { item: item } );
+-	},
+-
+-	_scrollIntoView: function( item ) {
+-		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+-		if ( this._hasScroll() ) {
+-			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+-			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+-			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+-			scroll = this.activeMenu.scrollTop();
+-			elementHeight = this.activeMenu.height();
+-			itemHeight = item.height();
+-
+-			if ( offset < 0 ) {
+-				this.activeMenu.scrollTop( scroll + offset );
+-			} else if ( offset + itemHeight > elementHeight ) {
+-				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+-			}
+-		}
+-	},
+-
+-	blur: function( event, fromFocus ) {
+-		if ( !fromFocus ) {
+-			clearTimeout( this.timer );
+-		}
+-
+-		if ( !this.active ) {
+-			return;
+-		}
+-
+-		this.active.children( "a" ).removeClass( "ui-state-focus" );
+-		this.active = null;
+-
+-		this._trigger( "blur", event, { item: this.active } );
+-	},
+-
+-	_startOpening: function( submenu ) {
+-		clearTimeout( this.timer );
+-
+-		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
+-		// shift in the submenu position when mousing over the carat icon
+-		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+-			return;
+-		}
+-
+-		this.timer = this._delay(function() {
+-			this._close();
+-			this._open( submenu );
+-		}, this.delay );
+-	},
+-
+-	_open: function( submenu ) {
+-		var position = $.extend({
+-			of: this.active
+-		}, this.options.position );
+-
+-		clearTimeout( this.timer );
+-		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+-			.hide()
+-			.attr( "aria-hidden", "true" );
+-
+-		submenu
+-			.show()
+-			.removeAttr( "aria-hidden" )
+-			.attr( "aria-expanded", "true" )
+-			.position( position );
+-	},
+-
+-	collapseAll: function( event, all ) {
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			// If we were passed an event, look for the submenu that contains the event
+-			var currentMenu = all ? this.element :
+-				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+-
+-			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+-			if ( !currentMenu.length ) {
+-				currentMenu = this.element;
+-			}
+-
+-			this._close( currentMenu );
+-
+-			this.blur( event );
+-			this.activeMenu = currentMenu;
+-		}, this.delay );
+-	},
+-
+-	// With no arguments, closes the currently active menu - if nothing is active
+-	// it closes all menus.  If passed an argument, it will search for menus BELOW
+-	_close: function( startMenu ) {
+-		if ( !startMenu ) {
+-			startMenu = this.active ? this.active.parent() : this.element;
+-		}
+-
+-		startMenu
+-			.find( ".ui-menu" )
+-				.hide()
+-				.attr( "aria-hidden", "true" )
+-				.attr( "aria-expanded", "false" )
+-			.end()
+-			.find( "a.ui-state-active" )
+-				.removeClass( "ui-state-active" );
+-	},
+-
+-	collapse: function( event ) {
+-		var newItem = this.active &&
+-			this.active.parent().closest( ".ui-menu-item", this.element );
+-		if ( newItem && newItem.length ) {
+-			this._close();
+-			this.focus( event, newItem );
+-		}
+-	},
+-
+-	expand: function( event ) {
+-		var newItem = this.active &&
+-			this.active
+-				.children( ".ui-menu " )
+-				.children( ".ui-menu-item" )
+-				.first();
+-
+-		if ( newItem && newItem.length ) {
+-			this._open( newItem.parent() );
+-
+-			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+-			this._delay(function() {
+-				this.focus( event, newItem );
+-			});
+-		}
+-	},
+-
+-	next: function( event ) {
+-		this._move( "next", "first", event );
+-	},
+-
+-	previous: function( event ) {
+-		this._move( "prev", "last", event );
+-	},
+-
+-	isFirstItem: function() {
+-		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+-	},
+-
+-	isLastItem: function() {
+-		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+-	},
+-
+-	_move: function( direction, filter, event ) {
+-		var next;
+-		if ( this.active ) {
+-			if ( direction === "first" || direction === "last" ) {
+-				next = this.active
+-					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+-					.eq( -1 );
+-			} else {
+-				next = this.active
+-					[ direction + "All" ]( ".ui-menu-item" )
+-					.eq( 0 );
+-			}
+-		}
+-		if ( !next || !next.length || !this.active ) {
+-			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
+-		}
+-
+-		this.focus( event, next );
+-	},
+-
+-	nextPage: function( event ) {
+-		var item, base, height;
+-
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isLastItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.nextAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base - height < 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
+-				[ !this.active ? "first" : "last" ]() );
+-		}
+-	},
+-
+-	previousPage: function( event ) {
+-		var item, base, height;
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isFirstItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.prevAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base + height > 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+-		}
+-	},
+-
+-	_hasScroll: function() {
+-		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+-	},
+-
+-	select: function( event ) {
+-		// TODO: It should never be possible to not have an active item at this
+-		// point, but the tests don't trigger mouseenter before click.
+-		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+-		var ui = { item: this.active };
+-		if ( !this.active.has( ".ui-menu" ).length ) {
+-			this.collapseAll( event, true );
+-		}
+-		this._trigger( "select", event, ui );
+-	}
+-});
+-
+-}( jQuery ));
+Index: ../trunk-jpl/src/mobile/web/js/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/index.html	(revision 15488)
+@@ -1,450 +0,0 @@
+-<!doctype html>
+-<html lang="us">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Example Page</title>
+-	<link href="css/ui-lightness/jquery-ui-1.10.3.custom.css" rel="stylesheet">
+-	<script src="js/jquery-1.9.1.js"></script>
+-	<script src="js/jquery-ui-1.10.3.custom.js"></script>
+-	<script>
+-	$(function() {
+-		
+-		$( "#accordion" ).accordion();
+-		
+-
+-		
+-		var availableTags = [
+-			"ActionScript",
+-			"AppleScript",
+-			"Asp",
+-			"BASIC",
+-			"C",
+-			"C++",
+-			"Clojure",
+-			"COBOL",
+-			"ColdFusion",
+-			"Erlang",
+-			"Fortran",
+-			"Groovy",
+-			"Haskell",
+-			"Java",
+-			"JavaScript",
+-			"Lisp",
+-			"Perl",
+-			"PHP",
+-			"Python",
+-			"Ruby",
+-			"Scala",
+-			"Scheme"
+-		];
+-		$( "#autocomplete" ).autocomplete({
+-			source: availableTags
+-		});
+-		
+-
+-		
+-		$( "#button" ).button();
+-		$( "#radioset" ).buttonset();
+-		
+-
+-		
+-		$( "#tabs" ).tabs();
+-		
+-
+-		
+-		$( "#dialog" ).dialog({
+-			autoOpen: false,
+-			width: 400,
+-			buttons: [
+-				{
+-					text: "Ok",
+-					click: function() {
+-						$( this ).dialog( "close" );
+-					}
+-				},
+-				{
+-					text: "Cancel",
+-					click: function() {
+-						$( this ).dialog( "close" );
+-					}
+-				}
+-			]
+-		});
+-
+-		// Link to open the dialog
+-		$( "#dialog-link" ).click(function( event ) {
+-			$( "#dialog" ).dialog( "open" );
+-			event.preventDefault();
+-		});
+-		
+-
+-		
+-		$( "#datepicker" ).datepicker({
+-			inline: true
+-		});
+-		
+-
+-		
+-		$( "#slider" ).slider({
+-			range: true,
+-			values: [ 17, 67 ]
+-		});
+-		
+-
+-		
+-		$( "#progressbar" ).progressbar({
+-			value: 20
+-		});
+-		
+-
+-		// Hover states on the static widgets
+-		$( "#dialog-link, #icons li" ).hover(
+-			function() {
+-				$( this ).addClass( "ui-state-hover" );
+-			},
+-			function() {
+-				$( this ).removeClass( "ui-state-hover" );
+-			}
+-		);
+-	});
+-	</script>
+-	<style>
+-	body{
+-		font: 62.5% "Trebuchet MS", sans-serif;
+-		margin: 50px;
+-	}
+-	.demoHeaders {
+-		margin-top: 2em;
+-	}
+-	#dialog-link {
+-		padding: .4em 1em .4em 20px;
+-		text-decoration: none;
+-		position: relative;
+-	}
+-	#dialog-link span.ui-icon {
+-		margin: 0 5px 0 0;
+-		position: absolute;
+-		left: .2em;
+-		top: 50%;
+-		margin-top: -8px;
+-	}
+-	#icons {
+-		margin: 0;
+-		padding: 0;
+-	}
+-	#icons li {
+-		margin: 2px;
+-		position: relative;
+-		padding: 4px 0;
+-		cursor: pointer;
+-		float: left;
+-		list-style: none;
+-	}
+-	#icons span.ui-icon {
+-		float: left;
+-		margin: 0 4px;
+-	}
+-	.fakewindowcontain .ui-widget-overlay {
+-		position: absolute;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<h1>Welcome to jQuery UI!</h1>
+-
+-<div class="ui-widget">
+-	<p>This page demonstrates the widgets you downloaded using the theme you selected in the download builder. We've included and linked to minified versions of <a href="js/jquery-1.9.1.js">jQuery</a>, your personalized copy of <a href="js/jquery-ui-1.10.3.custom.min.js">jQuery UI (js/jquery-ui-1.10.3.custom.min.js)</a>, and <a href="css/ui-lightness/jquery-ui-1.10.3.custom.min.css">css/ui-lightness/jquery-ui-1.10.3.custom.min.css</a> which imports the entire jQuery UI CSS Framework. You can choose to link a subset of the CSS Framework depending on your needs. </p>
+-	<p>You've downloaded components and a theme that are compatible with jQuery 1.6+. Please make sure you are using jQuery 1.6+ in your production environment.</p>
+-</div>
+-
+-<h1>YOUR COMPONENTS:</h1>
+-
+-
+-<!-- Accordion -->
+-<h2 class="demoHeaders">Accordion</h2>
+-<div id="accordion">
+-	<h3>First</h3>
+-	<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
+-	<h3>Second</h3>
+-	<div>Phasellus mattis tincidunt nibh.</div>
+-	<h3>Third</h3>
+-	<div>Nam dui erat, auctor a, dignissim quis.</div>
+-</div>
+-
+-
+-
+-<!-- Autocomplete -->
+-<h2 class="demoHeaders">Autocomplete</h2>
+-<div>
+-	<input id="autocomplete" title="type &quot;a&quot;">
+-</div>
+-
+-
+-
+-<!-- Button -->
+-<h2 class="demoHeaders">Button</h2>
+-<button id="button">A button element</button>
+-<form style="margin-top: 1em;">
+-	<div id="radioset">
+-		<input type="radio" id="radio1" name="radio"><label for="radio1">Choice 1</label>
+-		<input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2">Choice 2</label>
+-		<input type="radio" id="radio3" name="radio"><label for="radio3">Choice 3</label>
+-	</div>
+-</form>
+-
+-
+-
+-<!-- Tabs -->
+-<h2 class="demoHeaders">Tabs</h2>
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">First</a></li>
+-		<li><a href="#tabs-2">Second</a></li>
+-		<li><a href="#tabs-3">Third</a></li>
+-	</ul>
+-	<div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
+-	<div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>
+-	<div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>
+-</div>
+-
+-
+-
+-<!-- Dialog NOTE: Dialog is not generated by UI in this demo so it can be visually styled in themeroller-->
+-<h2 class="demoHeaders">Dialog</h2>
+-<p><a href="#" id="dialog-link" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span>Open Dialog</a></p>
+-
+-<h2 class="demoHeaders">Overlay and Shadow Classes <em>(not currently used in UI widgets)</em></h2>
+-<div style="position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;" class="fakewindowcontain">
+-	<p>Lorem ipsum dolor sit amet,  Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>
+-
+-	<!-- ui-dialog -->
+-	<div class="ui-overlay"><div class="ui-widget-overlay"></div><div class="ui-widget-shadow ui-corner-all" style="width: 302px; height: 152px; position: absolute; left: 50px; top: 30px;"></div></div>
+-	<div style="position: absolute; width: 280px; height: 130px;left: 50px; top: 30px; padding: 10px;" class="ui-widget ui-widget-content ui-corner-all">
+-		<div class="ui-dialog-content ui-widget-content" style="background: none; border: 0;">
+-			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
+-		</div>
+-	</div>
+-
+-</div>
+-
+-<!-- ui-dialog -->
+-<div id="dialog" title="Dialog Title">
+-	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
+-</div>
+-
+-
+-
+-<h2 class="demoHeaders">Framework Icons (content color preview)</h2>
+-<ul id="icons" class="ui-widget ui-helper-clearfix">
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-n"><span class="ui-icon ui-icon-carat-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-ne"><span class="ui-icon ui-icon-carat-1-ne"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-e"><span class="ui-icon ui-icon-carat-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-se"><span class="ui-icon ui-icon-carat-1-se"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-s"><span class="ui-icon ui-icon-carat-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-sw"><span class="ui-icon ui-icon-carat-1-sw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-w"><span class="ui-icon ui-icon-carat-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-nw"><span class="ui-icon ui-icon-carat-1-nw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-n-s"><span class="ui-icon ui-icon-carat-2-n-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-e-w"><span class="ui-icon ui-icon-carat-2-e-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li>
+-	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li>
+-</ul>
+-
+-
+-<!-- Slider -->
+-<h2 class="demoHeaders">Slider</h2>
+-<div id="slider"></div>
+-
+-
+-
+-<!-- Datepicker -->
+-<h2 class="demoHeaders">Datepicker</h2>
+-<div id="datepicker"></div>
+-
+-
+-
+-<!-- Progressbar -->
+-<h2 class="demoHeaders">Progressbar</h2>
+-<div id="progressbar"></div>
+-
+-
+-<!-- Highlight / Error -->
+-<h2 class="demoHeaders">Highlight / Error</h2>
+-<div class="ui-widget">
+-	<div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
+-		<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
+-		<strong>Hey!</strong> Sample ui-state-highlight style.</p>
+-	</div>
+-</div>
+-<br>
+-<div class="ui-widget">
+-	<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">
+-		<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
+-		<strong>Alert:</strong> Sample ui-state-error style.</p>
+-	</div>
+-</div>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-pulsate.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-pulsate.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.effect-pulsate.js	(revision 15488)
+@@ -1,63 +0,0 @@
+-/*!
+- * jQuery UI Effects Pulsate 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/pulsate-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.pulsate = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		showhide = ( show || mode === "hide" ),
+-
+-		// showing or hiding leaves of the "last" animation
+-		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+-		duration = o.duration / anims,
+-		animateTo = 0,
+-		queue = elem.queue(),
+-		queuelen = queue.length,
+-		i;
+-
+-	if ( show || !elem.is(":visible")) {
+-		elem.css( "opacity", 0 ).show();
+-		animateTo = 1;
+-	}
+-
+-	// anims - 1 opacity "toggles"
+-	for ( i = 1; i < anims; i++ ) {
+-		elem.animate({
+-			opacity: animateTo
+-		}, duration, o.easing );
+-		animateTo = 1 - animateTo;
+-	}
+-
+-	elem.animate({
+-		opacity: animateTo
+-	}, duration, o.easing);
+-
+-	elem.queue(function() {
+-		if ( hide ) {
+-			elem.hide();
+-		}
+-		done();
+-	});
+-
+-	// We just queued up "anims" animations, we need to put them next in the queue
+-	if ( queuelen > 1 ) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	elem.dequeue();
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-slide.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-slide.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-slide.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-slide",
+-	"title": "jQuery UI Slide Effect",
+-	"description": "Slides an element in and out of the viewport.",
+-	"keywords": [
+-		"ui",
+-		"slide",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/slide-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.menu.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.menu.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.menu.jquery.json	(revision 15488)
+@@ -1,66 +0,0 @@
+-{
+-	"name": "ui.menu",
+-	"title": "jQuery UI Menu",
+-	"description": "Creates nestable menus.",
+-	"keywords": [
+-		"ui",
+-		"menu",
+-		"dropdown",
+-		"flyout"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/menu/",
+-	"demo": "http://jqueryui.com/menu/",
+-	"docs": "http://api.jqueryui.com/menu/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.position": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-bounce.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-bounce.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-bounce.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-bounce",
+-	"title": "jQuery UI Bounce Effect",
+-	"description": "Bounces an element horizontally or vertically n times.",
+-	"keywords": [
+-		"ui",
+-		"bounce",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/bounce-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.sortable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.sortable.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.sortable.jquery.json	(revision 15488)
+@@ -1,66 +0,0 @@
+-{
+-	"name": "ui.sortable",
+-	"title": "jQuery UI Sortable",
+-	"description": "Enables items in a list to be sorted using the mouse.",
+-	"keywords": [
+-		"ui",
+-		"sortable",
+-		"sort",
+-		"list"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/sortable/",
+-	"demo": "http://jqueryui.com/sortable/",
+-	"docs": "http://api.jqueryui.com/sortable/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.mouse": "1.10.3"
+-	},
+-	"category": "interaction"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.datepicker.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.datepicker.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.datepicker.jquery.json	(revision 15488)
+@@ -1,66 +0,0 @@
+-{
+-	"name": "ui.datepicker",
+-	"title": "jQuery UI Datepicker",
+-	"description": "Displays a calendar from an input or inline for selecting dates.",
+-	"keywords": [
+-		"ui",
+-		"datepicker",
+-		"form",
+-		"calendar",
+-		"date",
+-		"i18n"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/datepicker/",
+-	"demo": "http://jqueryui.com/datepicker/",
+-	"docs": "http://api.jqueryui.com/datepicker/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-transfer.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-transfer.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-transfer.jquery.json	(revision 15488)
+@@ -1,63 +0,0 @@
+-{
+-	"name": "ui.effect-transfer",
+-	"title": "jQuery UI Transfer Effect",
+-	"description": "Displays a transfer effect from one element to another.",
+-	"keywords": [
+-		"ui",
+-		"transfer",
+-		"effect"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/transfer-effect/",
+-	"demo": "http://jqueryui.com/transfer-effect/",
+-	"docs": "http://api.jqueryui.com/transfer-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/jquery.mousewheel.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/jquery.mousewheel.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/jquery.mousewheel.js	(revision 15488)
+@@ -1,101 +0,0 @@
+-/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)
+- * Licensed under the MIT License (LICENSE.txt).
+- *
+- * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+- * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+- * Thanks to: Seamus Leahy for adding deltaX and deltaY
+- *
+- * Version: 3.1.0
+- *
+- * Requires: 1.2.2+
+- */
+-
+-(function (factory) {
+-    if (typeof define === 'function' && define.amd) {
+-        // AMD. Register as an anonymous module.
+-        define(['jquery'], factory);
+-    } else {
+-        // Browser globals
+-        factory(jQuery);
+-    }
+-}(function ($) {
+-
+-    var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll'];
+-    var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];
+-    var lowestDelta, lowestDeltaXY;
+-
+-    if ($.event.fixHooks) {
+-        for ( var i=toFix.length; i; ) {
+-            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
+-        }
+-    }
+-
+-    $.event.special.mousewheel = {
+-        setup: function() {
+-            if ( this.addEventListener ) {
+-                for ( var i=toBind.length; i; ) {
+-                    this.addEventListener( toBind[--i], handler, false );
+-                }
+-            } else {
+-                this.onmousewheel = handler;
+-            }
+-        },
+-
+-        teardown: function() {
+-            if ( this.removeEventListener ) {
+-                for ( var i=toBind.length; i; ) {
+-                    this.removeEventListener( toBind[--i], handler, false );
+-                }
+-            } else {
+-                this.onmousewheel = null;
+-            }
+-        }
+-    };
+-
+-    $.fn.extend({
+-        mousewheel: function(fn) {
+-            return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
+-        },
+-
+-        unmousewheel: function(fn) {
+-            return this.unbind("mousewheel", fn);
+-        }
+-    });
+-
+-
+-    function handler(event) {
+-        var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0;
+-        event = $.event.fix(orgEvent);
+-        event.type = "mousewheel";
+-
+-        // Old school scrollwheel delta
+-        if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta;  }
+-        if ( orgEvent.detail     ) { delta = orgEvent.detail * -1; }
+-
+-        // New school wheel delta (wheel event)
+-        if ( orgEvent.deltaY ) {
+-            deltaY = orgEvent.deltaY * -1;
+-            delta  = deltaY;
+-        }
+-        if ( orgEvent.deltaX ) {
+-            deltaX = orgEvent.deltaX;
+-            delta  = deltaX * -1;
+-        }
+-
+-        // Webkit
+-        if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY;      }
+-        if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; }
+-
+-        absDelta = Math.abs(delta);
+-        if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; }
+-
+-        absDeltaXY = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
+-        if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; }
+-
+-        // Add event and delta to the front of the arguments
+-        args.unshift(event, Math.floor(delta/lowestDelta), Math.floor(deltaX/lowestDeltaXY), Math.floor(deltaY/lowestDeltaXY));
+-
+-        return ($.event.dispatch || $.event.handle).apply(this, args);
+-    }
+-
+-}));
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/qunit.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/qunit.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/qunit.css	(revision 15488)
+@@ -1,244 +0,0 @@
+-/**
+- * QUnit v1.11.0 - A JavaScript Unit Testing Framework
+- *
+- * http://qunitjs.com
+- *
+- * Copyright 2012 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- */
+-
+-/** Font Family and Sizes */
+-
+-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+-	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+-}
+-
+-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+-#qunit-tests { font-size: smaller; }
+-
+-
+-/** Resets */
+-
+-#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+-	margin: 0;
+-	padding: 0;
+-}
+-
+-
+-/** Header */
+-
+-#qunit-header {
+-	padding: 0.5em 0 0.5em 1em;
+-
+-	color: #8699a4;
+-	background-color: #0d3349;
+-
+-	font-size: 1.5em;
+-	line-height: 1em;
+-	font-weight: normal;
+-
+-	border-radius: 5px 5px 0 0;
+-	-moz-border-radius: 5px 5px 0 0;
+-	-webkit-border-top-right-radius: 5px;
+-	-webkit-border-top-left-radius: 5px;
+-}
+-
+-#qunit-header a {
+-	text-decoration: none;
+-	color: #c2ccd1;
+-}
+-
+-#qunit-header a:hover,
+-#qunit-header a:focus {
+-	color: #fff;
+-}
+-
+-#qunit-testrunner-toolbar label {
+-	display: inline-block;
+-	padding: 0 .5em 0 .1em;
+-}
+-
+-#qunit-banner {
+-	height: 5px;
+-}
+-
+-#qunit-testrunner-toolbar {
+-	padding: 0.5em 0 0.5em 2em;
+-	color: #5E740B;
+-	background-color: #eee;
+-	overflow: hidden;
+-}
+-
+-#qunit-userAgent {
+-	padding: 0.5em 0 0.5em 2.5em;
+-	background-color: #2b81af;
+-	color: #fff;
+-	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+-}
+-
+-#qunit-modulefilter-container {
+-	float: right;
+-}
+-
+-/** Tests: Pass/Fail */
+-
+-#qunit-tests {
+-	list-style-position: inside;
+-}
+-
+-#qunit-tests li {
+-	padding: 0.4em 0.5em 0.4em 2.5em;
+-	border-bottom: 1px solid #fff;
+-	list-style-position: inside;
+-}
+-
+-#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
+-	display: none;
+-}
+-
+-#qunit-tests li strong {
+-	cursor: pointer;
+-}
+-
+-#qunit-tests li a {
+-	padding: 0.5em;
+-	color: #c2ccd1;
+-	text-decoration: none;
+-}
+-#qunit-tests li a:hover,
+-#qunit-tests li a:focus {
+-	color: #000;
+-}
+-
+-#qunit-tests li .runtime {
+-	float: right;
+-	font-size: smaller;
+-}
+-
+-.qunit-assert-list {
+-	margin-top: 0.5em;
+-	padding: 0.5em;
+-
+-	background-color: #fff;
+-
+-	border-radius: 5px;
+-	-moz-border-radius: 5px;
+-	-webkit-border-radius: 5px;
+-}
+-
+-.qunit-collapsed {
+-	display: none;
+-}
+-
+-#qunit-tests table {
+-	border-collapse: collapse;
+-	margin-top: .2em;
+-}
+-
+-#qunit-tests th {
+-	text-align: right;
+-	vertical-align: top;
+-	padding: 0 .5em 0 0;
+-}
+-
+-#qunit-tests td {
+-	vertical-align: top;
+-}
+-
+-#qunit-tests pre {
+-	margin: 0;
+-	white-space: pre-wrap;
+-	word-wrap: break-word;
+-}
+-
+-#qunit-tests del {
+-	background-color: #e0f2be;
+-	color: #374e0c;
+-	text-decoration: none;
+-}
+-
+-#qunit-tests ins {
+-	background-color: #ffcaca;
+-	color: #500;
+-	text-decoration: none;
+-}
+-
+-/*** Test Counts */
+-
+-#qunit-tests b.counts                       { color: black; }
+-#qunit-tests b.passed                       { color: #5E740B; }
+-#qunit-tests b.failed                       { color: #710909; }
+-
+-#qunit-tests li li {
+-	padding: 5px;
+-	background-color: #fff;
+-	border-bottom: none;
+-	list-style-position: inside;
+-}
+-
+-/*** Passing Styles */
+-
+-#qunit-tests li li.pass {
+-	color: #3c510c;
+-	background-color: #fff;
+-	border-left: 10px solid #C6E746;
+-}
+-
+-#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
+-#qunit-tests .pass .test-name               { color: #366097; }
+-
+-#qunit-tests .pass .test-actual,
+-#qunit-tests .pass .test-expected           { color: #999999; }
+-
+-#qunit-banner.qunit-pass                    { background-color: #C6E746; }
+-
+-/*** Failing Styles */
+-
+-#qunit-tests li li.fail {
+-	color: #710909;
+-	background-color: #fff;
+-	border-left: 10px solid #EE5757;
+-	white-space: pre;
+-}
+-
+-#qunit-tests > li:last-child {
+-	border-radius: 0 0 5px 5px;
+-	-moz-border-radius: 0 0 5px 5px;
+-	-webkit-border-bottom-right-radius: 5px;
+-	-webkit-border-bottom-left-radius: 5px;
+-}
+-
+-#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
+-#qunit-tests .fail .test-name,
+-#qunit-tests .fail .module-name             { color: #000000; }
+-
+-#qunit-tests .fail .test-actual             { color: #EE5757; }
+-#qunit-tests .fail .test-expected           { color: green;   }
+-
+-#qunit-banner.qunit-fail                    { background-color: #EE5757; }
+-
+-
+-/** Result */
+-
+-#qunit-testresult {
+-	padding: 0.5em 0.5em 0.5em 2.5em;
+-
+-	color: #2b81af;
+-	background-color: #D2E0E6;
+-
+-	border-bottom: 1px solid white;
+-}
+-#qunit-testresult .module-name {
+-	font-weight: bold;
+-}
+-
+-/** Fixture */
+-
+-#qunit-fixture {
+-	position: absolute;
+-	top: -10000px;
+-	left: -10000px;
+-	width: 1000px;
+-	height: 1000px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/jshint.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/jshint.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/jshint.js	(revision 15488)
+@@ -1,4835 +0,0 @@
+-/*!
+- * JSHint, by JSHint Community.
+- *
+- * This file (and this file only) is licensed under the same slightly modified
+- * MIT license that JSLint is. It stops evil-doers everywhere.
+- *
+- * JSHint is a derivative work of JSLint:
+- *
+- *   Copyright (c) 2002 Douglas Crockford  (www.JSLint.com)
+- *
+- *   Permission is hereby granted, free of charge, to any person obtaining
+- *   a copy of this software and associated documentation files (the "Software"),
+- *   to deal in the Software without restriction, including without limitation
+- *   the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- *   and/or sell copies of the Software, and to permit persons to whom
+- *   the Software is furnished to do so, subject to the following conditions:
+- *
+- *   The above copyright notice and this permission notice shall be included
+- *   in all copies or substantial portions of the Software.
+- *
+- *   The Software shall be used for Good, not Evil.
+- *
+- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- *   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- *   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+- *   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+- *   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+- *   DEALINGS IN THE SOFTWARE.
+- *
+- */
+-
+-/*
+- JSHINT is a global function. It takes two parameters.
+-
+-     var myResult = JSHINT(source, option);
+-
+- The first parameter is either a string or an array of strings. If it is a
+- string, it will be split on '\n' or '\r'. If it is an array of strings, it
+- is assumed that each string represents one line. The source can be a
+- JavaScript text or a JSON text.
+-
+- The second parameter is an optional object of options which control the
+- operation of JSHINT. Most of the options are booleans: They are all
+- optional and have a default value of false. One of the options, predef,
+- can be an array of names, which will be used to declare global variables,
+- or an object whose keys are used as global names, with a boolean value
+- that determines if they are assignable.
+-
+- If it checks out, JSHINT returns true. Otherwise, it returns false.
+-
+- If false, you can inspect JSHINT.errors to find out the problems.
+- JSHINT.errors is an array of objects containing these members:
+-
+- {
+-     line      : The line (relative to 1) at which the lint was found
+-     character : The character (relative to 1) at which the lint was found
+-     reason    : The problem
+-     evidence  : The text line in which the problem occurred
+-     raw       : The raw message before the details were inserted
+-     a         : The first detail
+-     b         : The second detail
+-     c         : The third detail
+-     d         : The fourth detail
+- }
+-
+- If a fatal error was found, a null will be the last element of the
+- JSHINT.errors array.
+-
+- You can request a data structure which contains JSHint's results.
+-
+-     var myData = JSHINT.data();
+-
+- It returns a structure with this form:
+-
+- {
+-     errors: [
+-         {
+-             line: NUMBER,
+-             character: NUMBER,
+-             reason: STRING,
+-             evidence: STRING
+-         }
+-     ],
+-     functions: [
+-         name: STRING,
+-         line: NUMBER,
+-         character: NUMBER,
+-         last: NUMBER,
+-         lastcharacter: NUMBER,
+-         param: [
+-             STRING
+-         ],
+-         closure: [
+-             STRING
+-         ],
+-         var: [
+-             STRING
+-         ],
+-         exception: [
+-             STRING
+-         ],
+-         outer: [
+-             STRING
+-         ],
+-         unused: [
+-             STRING
+-         ],
+-         global: [
+-             STRING
+-         ],
+-         label: [
+-             STRING
+-         ]
+-     ],
+-     globals: [
+-         STRING
+-     ],
+-     member: {
+-         STRING: NUMBER
+-     },
+-     unused: [
+-         {
+-             name: STRING,
+-             line: NUMBER
+-         }
+-     ],
+-     implieds: [
+-         {
+-             name: STRING,
+-             line: NUMBER
+-         }
+-     ],
+-     urls: [
+-         STRING
+-     ],
+-     json: BOOLEAN
+- }
+-
+- Empty arrays will not be included.
+-
+-*/
+-
+-/*jshint
+- evil: true, nomen: false, onevar: false, regexp: false, strict: true, boss: true,
+- undef: true, maxlen: 100, indent: 4, quotmark: double, unused: true
+-*/
+-
+-/*members "\b", "\t", "\n", "\f", "\r", "!=", "!==", "\"", "%", "(begin)",
+- "(breakage)", "(character)", "(context)", "(error)", "(explicitNewcap)", "(global)",
+- "(identifier)", "(last)", "(lastcharacter)", "(line)", "(loopage)", "(metrics)",
+- "(name)", "(onevar)", "(params)", "(scope)", "(statement)", "(verb)", "(tokens)", "(catch)",
+- "*", "+", "++", "-", "--", "\/", "<", "<=", "==",
+- "===", ">", ">=", $, $$, $A, $F, $H, $R, $break, $continue, $w, Abstract, Ajax,
+- __filename, __dirname, ActiveXObject, Array, ArrayBuffer, ArrayBufferView, Audio,
+- Autocompleter, Asset, Boolean, Builder, Buffer, Browser, Blob, COM, CScript, Canvas,
+- CustomAnimation, Class, Control, ComplexityCount, Chain, Color, Cookie, Core, DataView, Date,
+- Debug, Draggable, Draggables, Droppables, Document, DomReady, DOMEvent, DOMReady, DOMParser,
+- Drag, E, Enumerator, Enumerable, Element, Elements, Error, Effect, EvalError, Event,
+- Events, FadeAnimation, Field, Flash, Float32Array, Float64Array, Form,
+- FormField, Frame, FormData, Function, Fx, GetObject, Group, Hash, HotKey,
+- HTMLElement, HTMLAnchorElement, HTMLBaseElement, HTMLBlockquoteElement,
+- HTMLBodyElement, HTMLBRElement, HTMLButtonElement, HTMLCanvasElement, HTMLDirectoryElement,
+- HTMLDivElement, HTMLDListElement, HTMLFieldSetElement,
+- HTMLFontElement, HTMLFormElement, HTMLFrameElement, HTMLFrameSetElement,
+- HTMLHeadElement, HTMLHeadingElement, HTMLHRElement, HTMLHtmlElement,
+- HTMLIFrameElement, HTMLImageElement, HTMLInputElement, HTMLIsIndexElement,
+- HTMLLabelElement, HTMLLayerElement, HTMLLegendElement, HTMLLIElement,
+- HTMLLinkElement, HTMLMapElement, HTMLMenuElement, HTMLMetaElement,
+- HTMLModElement, HTMLObjectElement, HTMLOListElement, HTMLOptGroupElement,
+- HTMLOptionElement, HTMLParagraphElement, HTMLParamElement, HTMLPreElement,
+- HTMLQuoteElement, HTMLScriptElement, HTMLSelectElement, HTMLStyleElement,
+- HtmlTable, HTMLTableCaptionElement, HTMLTableCellElement, HTMLTableColElement,
+- HTMLTableElement, HTMLTableRowElement, HTMLTableSectionElement,
+- HTMLTextAreaElement, HTMLTitleElement, HTMLUListElement, HTMLVideoElement,
+- Iframe, IframeShim, Image, importScripts, Int16Array, Int32Array, Int8Array,
+- Insertion, InputValidator, JSON, Keyboard, Locale, LN10, LN2, LOG10E, LOG2E,
+- MAX_VALUE, MIN_VALUE, Map, Mask, Math, MenuItem, MessageChannel, MessageEvent, MessagePort,
+- MoveAnimation, MooTools, MutationObserver, NaN, Native, NEGATIVE_INFINITY, Node, NodeFilter,
+- Number, Object, ObjectRange,
+- Option, Options, OverText, PI, POSITIVE_INFINITY, PeriodicalExecuter, Point, Position, Prototype,
+- RangeError, Rectangle, ReferenceError, RegExp, ResizeAnimation, Request, RotateAnimation, Set,
+- SQRT1_2, SQRT2, ScrollBar, ScriptEngine, ScriptEngineBuildVersion,
+- ScriptEngineMajorVersion, ScriptEngineMinorVersion, Scriptaculous, Scroller,
+- Slick, Slider, Selector, SharedWorker, String, Style, SyntaxError, Sortable, Sortables,
+- SortableObserver, Sound, Spinner, System, Swiff, Text, TextArea, Template,
+- Timer, Tips, Type, TypeError, Toggle, Try, "use strict", unescape, URI, URIError, URL,
+- VBArray, WeakMap, WSH, WScript, XDomainRequest, Web, Window, XMLDOM, XMLHttpRequest, XMLSerializer,
+- XPathEvaluator, XPathException, XPathExpression, XPathNamespace, XPathNSResolver, XPathResult,
+- "\\", a, abs, addEventListener, address, alert, apply, applicationCache, arguments, arity,
+- asi, atob, b, basic, basicToken, bitwise, blacklist, block, blur, boolOptions, boss,
+- browser, btoa, c, call, callee, caller, camelcase, cases, charAt, charCodeAt, character,
+- clearInterval, clearTimeout, close, closed, closure, comment, complexityCount, condition,
+- confirm, console, constructor, content, couch, create, css, curly, d, data, datalist, dd, debug,
+- decodeURI, decodeURIComponent, defaultStatus, defineClass, deserialize, devel, document,
+- dojo, dijit, dojox, define, else, emit, encodeURI, encodeURIComponent, elem,
+- eqeq, eqeqeq, eqnull, errors, es5, escape, esnext, eval, event, evidence, evil,
+- ex, exception, exec, exps, expr, exports, FileReader, first, floor, focus, forEach,
+- forin, fragment, frames, from, fromCharCode, fud, funcscope, funct, function, functions,
+- g, gc, getComputedStyle, getRow, getter, getterToken, GLOBAL, global, globals, globalstrict,
+- hasOwnProperty, help, history, i, id, identifier, immed, implieds, importPackage, include,
+- indent, indexOf, init, ins, internals, instanceOf, isAlpha, isApplicationRunning, isArray,
+- isDigit, isFinite, isNaN, iterator, java, join, jshint,
+- JSHINT, json, jquery, jQuery, keys, label, labelled, last, lastcharacter, lastsemic, laxbreak,
+- laxcomma, latedef, lbp, led, left, length, line, load, loadClass, localStorage, location,
+- log, loopfunc, m, match, max, maxcomplexity, maxdepth, maxerr, maxlen, maxstatements, maxparams,
+- member, message, meta, module, moveBy, moveTo, mootools, multistr, name, navigator, new, newcap,
+- nestedBlockDepth, noarg, node, noempty, nomen, nonew, nonstandard, nud, onbeforeunload, onblur,
+- onerror, onevar, onecase, onfocus, onload, onresize, onunload, open, openDatabase, openURL,
+- opener, opera, options, outer, param, parent, parseFloat, parseInt, passfail, plusplus,
+- postMessage, pop, predef, print, process, prompt, proto, prototype, prototypejs, provides, push,
+- quit, quotmark, range, raw, reach, reason, regexp, readFile, readUrl, regexdash,
+- removeEventListener, replace, report, require, reserved, resizeBy, resizeTo, resolvePath,
+- resumeUpdates, respond, rhino, right, runCommand, scroll, scope, screen, scripturl, scrollBy,
+- scrollTo, scrollbar, search, seal, self, send, serialize, sessionStorage, setInterval, setTimeout,
+- setter, setterToken, shift, slice, smarttabs, sort, spawn, split, statement, statementCount, stack,
+- status, start, strict, sub, substr, supernew, shadow, supplant, sum, sync, test, toLowerCase,
+- toString, toUpperCase, toint32, token, tokens, top, trailing, type, typeOf, Uint16Array,
+- Uint32Array, Uint8Array, undef, undefs, unused, urls, validthis, value, valueOf, var, vars,
+- version, verifyMaxParametersPerFunction, verifyMaxStatementsPerFunction,
+- verifyMaxComplexityPerFunction, verifyMaxNestedBlockDepthPerFunction, WebSocket, withstmt, white,
+- window, windows, Worker, worker, wsh, yui, YUI, Y, YUI_config*/
+-
+-/*global exports: false */
+-
+-// We build the application inside a function so that we produce only a single
+-// global variable. That function will be invoked immediately, and its return
+-// value is the JSHINT function itself.
+-
+-var JSHINT = (function () {
+-    "use strict";
+-
+-    var anonname,       // The guessed name for anonymous functions.
+-
+-// These are operators that should not be used with the ! operator.
+-
+-        bang = {
+-            "<"  : true,
+-            "<=" : true,
+-            "==" : true,
+-            "===": true,
+-            "!==": true,
+-            "!=" : true,
+-            ">"  : true,
+-            ">=" : true,
+-            "+"  : true,
+-            "-"  : true,
+-            "*"  : true,
+-            "/"  : true,
+-            "%"  : true
+-        },
+-
+-        // These are the JSHint boolean options.
+-        boolOptions = {
+-            asi         : true, // if automatic semicolon insertion should be tolerated
+-            bitwise     : true, // if bitwise operators should not be allowed
+-            boss        : true, // if advanced usage of assignments should be allowed
+-            browser     : true, // if the standard browser globals should be predefined
+-            camelcase   : true, // if identifiers should be required in camel case
+-            couch       : true, // if CouchDB globals should be predefined
+-            curly       : true, // if curly braces around all blocks should be required
+-            debug       : true, // if debugger statements should be allowed
+-            devel       : true, // if logging globals should be predefined (console,
+-                                // alert, etc.)
+-            dojo        : true, // if Dojo Toolkit globals should be predefined
+-            eqeqeq      : true, // if === should be required
+-            eqnull      : true, // if == null comparisons should be tolerated
+-            es5         : true, // if ES5 syntax should be allowed
+-            esnext      : true, // if es.next specific syntax should be allowed
+-            evil        : true, // if eval should be allowed
+-            expr        : true, // if ExpressionStatement should be allowed as Programs
+-            forin       : true, // if for in statements must filter
+-            funcscope   : true, // if only function scope should be used for scope tests
+-            globalstrict: true, // if global "use strict"; should be allowed (also
+-                                // enables 'strict')
+-            immed       : true, // if immediate invocations must be wrapped in parens
+-            iterator    : true, // if the `__iterator__` property should be allowed
+-            jquery      : true, // if jQuery globals should be predefined
+-            lastsemic   : true, // if semicolons may be ommitted for the trailing
+-                                // statements inside of a one-line blocks.
+-            latedef     : true, // if the use before definition should not be tolerated
+-            laxbreak    : true, // if line breaks should not be checked
+-            laxcomma    : true, // if line breaks should not be checked around commas
+-            loopfunc    : true, // if functions should be allowed to be defined within
+-                                // loops
+-            mootools    : true, // if MooTools globals should be predefined
+-            multistr    : true, // allow multiline strings
+-            newcap      : true, // if constructor names must be capitalized
+-            noarg       : true, // if arguments.caller and arguments.callee should be
+-                                // disallowed
+-            node        : true, // if the Node.js environment globals should be
+-                                // predefined
+-            noempty     : true, // if empty blocks should be disallowed
+-            nonew       : true, // if using `new` for side-effects should be disallowed
+-            nonstandard : true, // if non-standard (but widely adopted) globals should
+-                                // be predefined
+-            nomen       : true, // if names should be checked
+-            onevar      : true, // if only one var statement per function should be
+-                                // allowed
+-            onecase     : true, // if one case switch statements should be allowed
+-            passfail    : true, // if the scan should stop on first error
+-            plusplus    : true, // if increment/decrement should not be allowed
+-            proto       : true, // if the `__proto__` property should be allowed
+-            prototypejs : true, // if Prototype and Scriptaculous globals should be
+-                                // predefined
+-            regexdash   : true, // if unescaped first/last dash (-) inside brackets
+-                                // should be tolerated
+-            regexp      : true, // if the . should not be allowed in regexp literals
+-            rhino       : true, // if the Rhino environment globals should be predefined
+-            undef       : true, // if variables should be declared before used
+-            unused      : true, // if variables should be always used
+-            scripturl   : true, // if script-targeted URLs should be tolerated
+-            shadow      : true, // if variable shadowing should be tolerated
+-            smarttabs   : true, // if smarttabs should be tolerated
+-                                // (http://www.emacswiki.org/emacs/SmartTabs)
+-            strict      : true, // require the "use strict"; pragma
+-            sub         : true, // if all forms of subscript notation are tolerated
+-            supernew    : true, // if `new function () { ... };` and `new Object;`
+-                                // should be tolerated
+-            trailing    : true, // if trailing whitespace rules apply
+-            validthis   : true, // if 'this' inside a non-constructor function is valid.
+-                                // This is a function scoped option only.
+-            withstmt    : true, // if with statements should be allowed
+-            white       : true, // if strict whitespace rules apply
+-            worker      : true, // if Web Worker script symbols should be allowed
+-            wsh         : true, // if the Windows Scripting Host environment globals
+-                                // should be predefined
+-            yui         : true  // YUI variables should be predefined
+-        },
+-
+-        // These are the JSHint options that can take any value
+-        // (we use this object to detect invalid options)
+-        valOptions = {
+-            maxlen       : false,
+-            indent       : false,
+-            maxerr       : false,
+-            predef       : false,
+-            quotmark     : false, //'single'|'double'|true
+-            scope        : false,
+-            maxstatements: false, // {int} max statements per function
+-            maxdepth     : false, // {int} max nested block depth per function
+-            maxparams    : false, // {int} max params per function
+-            maxcomplexity: false  // {int} max cyclomatic complexity per function
+-        },
+-
+-        // These are JSHint boolean options which are shared with JSLint
+-        // where the definition in JSHint is opposite JSLint
+-        invertedOptions = {
+-            bitwise     : true,
+-            forin       : true,
+-            newcap      : true,
+-            nomen       : true,
+-            plusplus    : true,
+-            regexp      : true,
+-            undef       : true,
+-            white       : true,
+-
+-            // Inverted and renamed, use JSHint name here
+-            eqeqeq      : true,
+-            onevar      : true
+-        },
+-
+-        // These are JSHint boolean options which are shared with JSLint
+-        // where the name has been changed but the effect is unchanged
+-        renamedOptions = {
+-            eqeq        : "eqeqeq",
+-            vars        : "onevar",
+-            windows     : "wsh"
+-        },
+-
+-
+-        // browser contains a set of global names which are commonly provided by a
+-        // web browser environment.
+-        browser = {
+-            ArrayBuffer              :  false,
+-            ArrayBufferView          :  false,
+-            Audio                    :  false,
+-            Blob                     :  false,
+-            addEventListener         :  false,
+-            applicationCache         :  false,
+-            atob                     :  false,
+-            blur                     :  false,
+-            btoa                     :  false,
+-            clearInterval            :  false,
+-            clearTimeout             :  false,
+-            close                    :  false,
+-            closed                   :  false,
+-            DataView                 :  false,
+-            DOMParser                :  false,
+-            defaultStatus            :  false,
+-            document                 :  false,
+-            event                    :  false,
+-            FileReader               :  false,
+-            Float32Array             :  false,
+-            Float64Array             :  false,
+-            FormData                 :  false,
+-            focus                    :  false,
+-            frames                   :  false,
+-            getComputedStyle         :  false,
+-            HTMLElement              :  false,
+-            HTMLAnchorElement        :  false,
+-            HTMLBaseElement          :  false,
+-            HTMLBlockquoteElement    :  false,
+-            HTMLBodyElement          :  false,
+-            HTMLBRElement            :  false,
+-            HTMLButtonElement        :  false,
+-            HTMLCanvasElement        :  false,
+-            HTMLDirectoryElement     :  false,
+-            HTMLDivElement           :  false,
+-            HTMLDListElement         :  false,
+-            HTMLFieldSetElement      :  false,
+-            HTMLFontElement          :  false,
+-            HTMLFormElement          :  false,
+-            HTMLFrameElement         :  false,
+-            HTMLFrameSetElement      :  false,
+-            HTMLHeadElement          :  false,
+-            HTMLHeadingElement       :  false,
+-            HTMLHRElement            :  false,
+-            HTMLHtmlElement          :  false,
+-            HTMLIFrameElement        :  false,
+-            HTMLImageElement         :  false,
+-            HTMLInputElement         :  false,
+-            HTMLIsIndexElement       :  false,
+-            HTMLLabelElement         :  false,
+-            HTMLLayerElement         :  false,
+-            HTMLLegendElement        :  false,
+-            HTMLLIElement            :  false,
+-            HTMLLinkElement          :  false,
+-            HTMLMapElement           :  false,
+-            HTMLMenuElement          :  false,
+-            HTMLMetaElement          :  false,
+-            HTMLModElement           :  false,
+-            HTMLObjectElement        :  false,
+-            HTMLOListElement         :  false,
+-            HTMLOptGroupElement      :  false,
+-            HTMLOptionElement        :  false,
+-            HTMLParagraphElement     :  false,
+-            HTMLParamElement         :  false,
+-            HTMLPreElement           :  false,
+-            HTMLQuoteElement         :  false,
+-            HTMLScriptElement        :  false,
+-            HTMLSelectElement        :  false,
+-            HTMLStyleElement         :  false,
+-            HTMLTableCaptionElement  :  false,
+-            HTMLTableCellElement     :  false,
+-            HTMLTableColElement      :  false,
+-            HTMLTableElement         :  false,
+-            HTMLTableRowElement      :  false,
+-            HTMLTableSectionElement  :  false,
+-            HTMLTextAreaElement      :  false,
+-            HTMLTitleElement         :  false,
+-            HTMLUListElement         :  false,
+-            HTMLVideoElement         :  false,
+-            history                  :  false,
+-            Int16Array               :  false,
+-            Int32Array               :  false,
+-            Int8Array                :  false,
+-            Image                    :  false,
+-            length                   :  false,
+-            localStorage             :  false,
+-            location                 :  false,
+-            MessageChannel           :  false,
+-            MessageEvent             :  false,
+-            MessagePort              :  false,
+-            moveBy                   :  false,
+-            moveTo                   :  false,
+-            MutationObserver         :  false,
+-            name                     :  false,
+-            Node                     :  false,
+-            NodeFilter               :  false,
+-            navigator                :  false,
+-            onbeforeunload           :  true,
+-            onblur                   :  true,
+-            onerror                  :  true,
+-            onfocus                  :  true,
+-            onload                   :  true,
+-            onresize                 :  true,
+-            onunload                 :  true,
+-            open                     :  false,
+-            openDatabase             :  false,
+-            opener                   :  false,
+-            Option                   :  false,
+-            parent                   :  false,
+-            print                    :  false,
+-            removeEventListener      :  false,
+-            resizeBy                 :  false,
+-            resizeTo                 :  false,
+-            screen                   :  false,
+-            scroll                   :  false,
+-            scrollBy                 :  false,
+-            scrollTo                 :  false,
+-            sessionStorage           :  false,
+-            setInterval              :  false,
+-            setTimeout               :  false,
+-            SharedWorker             :  false,
+-            status                   :  false,
+-            top                      :  false,
+-            Uint16Array              :  false,
+-            Uint32Array              :  false,
+-            Uint8Array               :  false,
+-            WebSocket                :  false,
+-            window                   :  false,
+-            Worker                   :  false,
+-            XMLHttpRequest           :  false,
+-            XMLSerializer            :  false,
+-            XPathEvaluator           :  false,
+-            XPathException           :  false,
+-            XPathExpression          :  false,
+-            XPathNamespace           :  false,
+-            XPathNSResolver          :  false,
+-            XPathResult              :  false
+-        },
+-
+-        couch = {
+-            "require" : false,
+-            respond   : false,
+-            getRow    : false,
+-            emit      : false,
+-            send      : false,
+-            start     : false,
+-            sum       : false,
+-            log       : false,
+-            exports   : false,
+-            module    : false,
+-            provides  : false
+-        },
+-
+-        declared, // Globals that were declared using /*global ... */ syntax.
+-
+-        devel = {
+-            alert   : false,
+-            confirm : false,
+-            console : false,
+-            Debug   : false,
+-            opera   : false,
+-            prompt  : false
+-        },
+-
+-        dojo = {
+-            dojo      : false,
+-            dijit     : false,
+-            dojox     : false,
+-            define    : false,
+-            "require" : false
+-        },
+-
+-        funct,          // The current function
+-
+-        functionicity = [
+-            "closure", "exception", "global", "label",
+-            "outer", "unused", "var"
+-        ],
+-
+-        functions,      // All of the functions
+-
+-        global,         // The global scope
+-        implied,        // Implied globals
+-        inblock,
+-        indent,
+-        jsonmode,
+-
+-        jquery = {
+-            "$"    : false,
+-            jQuery : false
+-        },
+-
+-        lines,
+-        lookahead,
+-        member,
+-        membersOnly,
+-
+-        mootools = {
+-            "$"             : false,
+-            "$$"            : false,
+-            Asset           : false,
+-            Browser         : false,
+-            Chain           : false,
+-            Class           : false,
+-            Color           : false,
+-            Cookie          : false,
+-            Core            : false,
+-            Document        : false,
+-            DomReady        : false,
+-            DOMEvent        : false,
+-            DOMReady        : false,
+-            Drag            : false,
+-            Element         : false,
+-            Elements        : false,
+-            Event           : false,
+-            Events          : false,
+-            Fx              : false,
+-            Group           : false,
+-            Hash            : false,
+-            HtmlTable       : false,
+-            Iframe          : false,
+-            IframeShim      : false,
+-            InputValidator  : false,
+-            instanceOf      : false,
+-            Keyboard        : false,
+-            Locale          : false,
+-            Mask            : false,
+-            MooTools        : false,
+-            Native          : false,
+-            Options         : false,
+-            OverText        : false,
+-            Request         : false,
+-            Scroller        : false,
+-            Slick           : false,
+-            Slider          : false,
+-            Sortables       : false,
+-            Spinner         : false,
+-            Swiff           : false,
+-            Tips            : false,
+-            Type            : false,
+-            typeOf          : false,
+-            URI             : false,
+-            Window          : false
+-        },
+-
+-        nexttoken,
+-
+-        node = {
+-            __filename    : false,
+-            __dirname     : false,
+-            Buffer        : false,
+-            console       : false,
+-            exports       : true,  // In Node it is ok to exports = module.exports = foo();
+-            GLOBAL        : false,
+-            global        : false,
+-            module        : false,
+-            process       : false,
+-            require       : false,
+-            setTimeout    : false,
+-            clearTimeout  : false,
+-            setInterval   : false,
+-            clearInterval : false
+-        },
+-
+-        noreach,
+-        option,
+-        predefined,     // Global variables defined by option
+-        prereg,
+-        prevtoken,
+-
+-        prototypejs = {
+-            "$"               : false,
+-            "$$"              : false,
+-            "$A"              : false,
+-            "$F"              : false,
+-            "$H"              : false,
+-            "$R"              : false,
+-            "$break"          : false,
+-            "$continue"       : false,
+-            "$w"              : false,
+-            Abstract          : false,
+-            Ajax              : false,
+-            Class             : false,
+-            Enumerable        : false,
+-            Element           : false,
+-            Event             : false,
+-            Field             : false,
+-            Form              : false,
+-            Hash              : false,
+-            Insertion         : false,
+-            ObjectRange       : false,
+-            PeriodicalExecuter: false,
+-            Position          : false,
+-            Prototype         : false,
+-            Selector          : false,
+-            Template          : false,
+-            Toggle            : false,
+-            Try               : false,
+-            Autocompleter     : false,
+-            Builder           : false,
+-            Control           : false,
+-            Draggable         : false,
+-            Draggables        : false,
+-            Droppables        : false,
+-            Effect            : false,
+-            Sortable          : false,
+-            SortableObserver  : false,
+-            Sound             : false,
+-            Scriptaculous     : false
+-        },
+-
+-        quotmark,
+-
+-        rhino = {
+-            defineClass  : false,
+-            deserialize  : false,
+-            gc           : false,
+-            help         : false,
+-            importPackage: false,
+-            "java"       : false,
+-            load         : false,
+-            loadClass    : false,
+-            print        : false,
+-            quit         : false,
+-            readFile     : false,
+-            readUrl      : false,
+-            runCommand   : false,
+-            seal         : false,
+-            serialize    : false,
+-            spawn        : false,
+-            sync         : false,
+-            toint32      : false,
+-            version      : false
+-        },
+-
+-        scope,      // The current scope
+-        stack,
+-
+-        // standard contains the global names that are provided by the
+-        // ECMAScript standard.
+-        standard = {
+-            Array               : false,
+-            Boolean             : false,
+-            Date                : false,
+-            decodeURI           : false,
+-            decodeURIComponent  : false,
+-            encodeURI           : false,
+-            encodeURIComponent  : false,
+-            Error               : false,
+-            "eval"              : false,
+-            EvalError           : false,
+-            Function            : false,
+-            hasOwnProperty      : false,
+-            isFinite            : false,
+-            isNaN               : false,
+-            JSON                : false,
+-            Map                 : false,
+-            Math                : false,
+-            NaN                 : false,
+-            Number              : false,
+-            Object              : false,
+-            parseInt            : false,
+-            parseFloat          : false,
+-            RangeError          : false,
+-            ReferenceError      : false,
+-            RegExp              : false,
+-            Set                 : false,
+-            String              : false,
+-            SyntaxError         : false,
+-            TypeError           : false,
+-            URIError            : false,
+-            WeakMap             : false
+-        },
+-
+-        // widely adopted global names that are not part of ECMAScript standard
+-        nonstandard = {
+-            escape              : false,
+-            unescape            : false
+-        },
+-
+-        directive,
+-        syntax = {},
+-        tab,
+-        token,
+-        unuseds,
+-        urls,
+-        useESNextSyntax,
+-        warnings,
+-
+-        worker = {
+-            importScripts       : true,
+-            postMessage         : true,
+-            self                : true
+-        },
+-
+-        wsh = {
+-            ActiveXObject             : true,
+-            Enumerator                : true,
+-            GetObject                 : true,
+-            ScriptEngine              : true,
+-            ScriptEngineBuildVersion  : true,
+-            ScriptEngineMajorVersion  : true,
+-            ScriptEngineMinorVersion  : true,
+-            VBArray                   : true,
+-            WSH                       : true,
+-            WScript                   : true,
+-            XDomainRequest            : true
+-        },
+-
+-        yui = {
+-            YUI             : false,
+-            Y               : false,
+-            YUI_config      : false
+-        };
+-    // Regular expressions. Some of these are stupidly long.
+-    var ax, cx, tx, nx, nxg, lx, ix, jx, ft;
+-    (function () {
+-        /*jshint maxlen:300 */
+-
+-        // unsafe comment or string
+-        ax = /@cc|<\/?|script|\]\s*\]|<\s*!|&lt/i;
+-
+-        // unsafe characters that are silently deleted by one or more browsers
+-        cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
+-
+-        // token
+-        tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/=(?!(\S*\/[gim]?))|\/(\*(jshint|jslint|members?|global)?|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/;
+-
+-        // characters in strings that need escapement
+-        nx = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
+-        nxg = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+-
+-        // star slash
+-        lx = /\*\//;
+-
+-        // identifier
+-        ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;
+-
+-        // javascript url
+-        jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i;
+-
+-        // catches /* falls through */ comments
+-        ft = /^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/;
+-    }());
+-
+-    function F() {}     // Used by Object.create
+-
+-    function is_own(object, name) {
+-        // The object.hasOwnProperty method fails when the property under consideration
+-        // is named 'hasOwnProperty'. So we have to use this more convoluted form.
+-        return Object.prototype.hasOwnProperty.call(object, name);
+-    }
+-
+-    function checkOption(name, t) {
+-        if (valOptions[name] === undefined && boolOptions[name] === undefined) {
+-            warning("Bad option: '" + name + "'.", t);
+-        }
+-    }
+-
+-    function isString(obj) {
+-        return Object.prototype.toString.call(obj) === "[object String]";
+-    }
+-
+-    // Provide critical ES5 functions to ES3.
+-
+-    if (typeof Array.isArray !== "function") {
+-        Array.isArray = function (o) {
+-            return Object.prototype.toString.apply(o) === "[object Array]";
+-        };
+-    }
+-
+-    if (!Array.prototype.forEach) {
+-        Array.prototype.forEach = function (fn, scope) {
+-            var len = this.length;
+-
+-            for (var i = 0; i < len; i++) {
+-                fn.call(scope || this, this[i], i, this);
+-            }
+-        };
+-    }
+-
+-    if (!Array.prototype.indexOf) {
+-        Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
+-            if (this === null || this === undefined) {
+-                throw new TypeError();
+-            }
+-
+-            var t = new Object(this);
+-            var len = t.length >>> 0;
+-
+-            if (len === 0) {
+-                return -1;
+-            }
+-
+-            var n = 0;
+-            if (arguments.length > 0) {
+-                n = Number(arguments[1]);
+-                if (n != n) { // shortcut for verifying if it's NaN
+-                    n = 0;
+-                } else if (n !== 0 && n != Infinity && n != -Infinity) {
+-                    n = (n > 0 || -1) * Math.floor(Math.abs(n));
+-                }
+-            }
+-
+-            if (n >= len) {
+-                return -1;
+-            }
+-
+-            var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
+-            for (; k < len; k++) {
+-                if (k in t && t[k] === searchElement) {
+-                    return k;
+-                }
+-            }
+-
+-            return -1;
+-        };
+-    }
+-
+-    if (typeof Object.create !== "function") {
+-        Object.create = function (o) {
+-            F.prototype = o;
+-            return new F();
+-        };
+-    }
+-
+-    if (typeof Object.keys !== "function") {
+-        Object.keys = function (o) {
+-            var a = [], k;
+-            for (k in o) {
+-                if (is_own(o, k)) {
+-                    a.push(k);
+-                }
+-            }
+-            return a;
+-        };
+-    }
+-
+-    // Non standard methods
+-
+-    function isAlpha(str) {
+-        return (str >= "a" && str <= "z\uffff") ||
+-            (str >= "A" && str <= "Z\uffff");
+-    }
+-
+-    function isDigit(str) {
+-        return (str >= "0" && str <= "9");
+-    }
+-
+-    function isIdentifier(token, value) {
+-        if (!token)
+-            return false;
+-
+-        if (!token.identifier || token.value !== value)
+-            return false;
+-
+-        return true;
+-    }
+-
+-    function supplant(str, data) {
+-        return str.replace(/\{([^{}]*)\}/g, function (a, b) {
+-            var r = data[b];
+-            return typeof r === "string" || typeof r === "number" ? r : a;
+-        });
+-    }
+-
+-    function combine(t, o) {
+-        var n;
+-        for (n in o) {
+-            if (is_own(o, n) && !is_own(JSHINT.blacklist, n)) {
+-                t[n] = o[n];
+-            }
+-        }
+-    }
+-
+-    function updatePredefined() {
+-        Object.keys(JSHINT.blacklist).forEach(function (key) {
+-            delete predefined[key];
+-        });
+-    }
+-
+-    function assume() {
+-        if (option.couch) {
+-            combine(predefined, couch);
+-        }
+-
+-        if (option.rhino) {
+-            combine(predefined, rhino);
+-        }
+-
+-        if (option.prototypejs) {
+-            combine(predefined, prototypejs);
+-        }
+-
+-        if (option.node) {
+-            combine(predefined, node);
+-            option.globalstrict = true;
+-        }
+-
+-        if (option.devel) {
+-            combine(predefined, devel);
+-        }
+-
+-        if (option.dojo) {
+-            combine(predefined, dojo);
+-        }
+-
+-        if (option.browser) {
+-            combine(predefined, browser);
+-        }
+-
+-        if (option.nonstandard) {
+-            combine(predefined, nonstandard);
+-        }
+-
+-        if (option.jquery) {
+-            combine(predefined, jquery);
+-        }
+-
+-        if (option.mootools) {
+-            combine(predefined, mootools);
+-        }
+-
+-        if (option.worker) {
+-            combine(predefined, worker);
+-        }
+-
+-        if (option.wsh) {
+-            combine(predefined, wsh);
+-        }
+-
+-        if (option.esnext) {
+-            useESNextSyntax();
+-        }
+-
+-        if (option.globalstrict && option.strict !== false) {
+-            option.strict = true;
+-        }
+-
+-        if (option.yui) {
+-            combine(predefined, yui);
+-        }
+-    }
+-
+-
+-    // Produce an error warning.
+-    function quit(message, line, chr) {
+-        var percentage = Math.floor((line / lines.length) * 100);
+-
+-        throw {
+-            name: "JSHintError",
+-            line: line,
+-            character: chr,
+-            message: message + " (" + percentage + "% scanned).",
+-            raw: message
+-        };
+-    }
+-
+-    function isundef(scope, m, t, a) {
+-        return JSHINT.undefs.push([scope, m, t, a]);
+-    }
+-
+-    function warning(m, t, a, b, c, d) {
+-        var ch, l, w;
+-        t = t || nexttoken;
+-        if (t.id === "(end)") {  // `~
+-            t = token;
+-        }
+-        l = t.line || 0;
+-        ch = t.from || 0;
+-        w = {
+-            id: "(error)",
+-            raw: m,
+-            evidence: lines[l - 1] || "",
+-            line: l,
+-            character: ch,
+-            scope: JSHINT.scope,
+-            a: a,
+-            b: b,
+-            c: c,
+-            d: d
+-        };
+-        w.reason = supplant(m, w);
+-        JSHINT.errors.push(w);
+-        if (option.passfail) {
+-            quit("Stopping. ", l, ch);
+-        }
+-        warnings += 1;
+-        if (warnings >= option.maxerr) {
+-            quit("Too many errors.", l, ch);
+-        }
+-        return w;
+-    }
+-
+-    function warningAt(m, l, ch, a, b, c, d) {
+-        return warning(m, {
+-            line: l,
+-            from: ch
+-        }, a, b, c, d);
+-    }
+-
+-    function error(m, t, a, b, c, d) {
+-        warning(m, t, a, b, c, d);
+-    }
+-
+-    function errorAt(m, l, ch, a, b, c, d) {
+-        return error(m, {
+-            line: l,
+-            from: ch
+-        }, a, b, c, d);
+-    }
+-
+-    // Tracking of "internal" scripts, like eval containing a static string
+-    function addInternalSrc(elem, src) {
+-        var i;
+-        i = {
+-            id: "(internal)",
+-            elem: elem,
+-            value: src
+-        };
+-        JSHINT.internals.push(i);
+-        return i;
+-    }
+-
+-
+-// lexical analysis and token construction
+-
+-    var lex = (function lex() {
+-        var character, from, line, s;
+-
+-// Private lex methods
+-
+-        function nextLine() {
+-            var at,
+-                match,
+-                tw; // trailing whitespace check
+-
+-            if (line >= lines.length)
+-                return false;
+-
+-            character = 1;
+-            s = lines[line];
+-            line += 1;
+-
+-            // If smarttabs option is used check for spaces followed by tabs only.
+-            // Otherwise check for any occurence of mixed tabs and spaces.
+-            // Tabs and one space followed by block comment is allowed.
+-            if (option.smarttabs) {
+-                // negative look-behind for "//"
+-                match = s.match(/(\/\/)? \t/);
+-                at = match && !match[1] ? 0 : -1;
+-            } else {
+-                at = s.search(/ \t|\t [^\*]/);
+-            }
+-
+-            if (at >= 0)
+-                warningAt("Mixed spaces and tabs.", line, at + 1);
+-
+-            s = s.replace(/\t/g, tab);
+-            at = s.search(cx);
+-
+-            if (at >= 0)
+-                warningAt("Unsafe character.", line, at);
+-
+-            if (option.maxlen && option.maxlen < s.length)
+-                warningAt("Line too long.", line, s.length);
+-
+-            // Check for trailing whitespaces
+-            tw = option.trailing && s.match(/^(.*?)\s+$/);
+-            if (tw && !/^\s+$/.test(s)) {
+-                warningAt("Trailing whitespace.", line, tw[1].length + 1);
+-            }
+-            return true;
+-        }
+-
+-// Produce a token object.  The token inherits from a syntax symbol.
+-
+-        function it(type, value) {
+-            var i, t;
+-
+-            function checkName(name) {
+-                if (!option.proto && name === "__proto__") {
+-                    warningAt("The '{a}' property is deprecated.", line, from, name);
+-                    return;
+-                }
+-
+-                if (!option.iterator && name === "__iterator__") {
+-                    warningAt("'{a}' is only available in JavaScript 1.7.", line, from, name);
+-                    return;
+-                }
+-
+-                // Check for dangling underscores unless we're in Node
+-                // environment and this identifier represents built-in
+-                // Node globals with underscores.
+-
+-                var hasDangling = /^(_+.*|.*_+)$/.test(name);
+-
+-                if (option.nomen && hasDangling && name !== "_") {
+-                    if (option.node && token.id !== "." && /^(__dirname|__filename)$/.test(name))
+-                        return;
+-
+-                    warningAt("Unexpected {a} in '{b}'.", line, from, "dangling '_'", name);
+-                    return;
+-                }
+-
+-                // Check for non-camelcase names. Names like MY_VAR and
+-                // _myVar are okay though.
+-
+-                if (option.camelcase) {
+-                    if (name.replace(/^_+/, "").indexOf("_") > -1 && !name.match(/^[A-Z0-9_]*$/)) {
+-                        warningAt("Identifier '{a}' is not in camel case.", line, from, value);
+-                    }
+-                }
+-            }
+-
+-            if (type === "(color)" || type === "(range)") {
+-                t = {type: type};
+-            } else if (type === "(punctuator)" ||
+-                    (type === "(identifier)" && is_own(syntax, value))) {
+-                t = syntax[value] || syntax["(error)"];
+-            } else {
+-                t = syntax[type];
+-            }
+-
+-            t = Object.create(t);
+-
+-            if (type === "(string)" || type === "(range)") {
+-                if (!option.scripturl && jx.test(value)) {
+-                    warningAt("Script URL.", line, from);
+-                }
+-            }
+-
+-            if (type === "(identifier)") {
+-                t.identifier = true;
+-                checkName(value);
+-            }
+-
+-            t.value = value;
+-            t.line = line;
+-            t.character = character;
+-            t.from = from;
+-            i = t.id;
+-            if (i !== "(endline)") {
+-                prereg = i &&
+-                    (("(,=:[!&|?{};".indexOf(i.charAt(i.length - 1)) >= 0) ||
+-                    i === "return" ||
+-                    i === "case");
+-            }
+-            return t;
+-        }
+-
+-        // Public lex methods
+-        return {
+-            init: function (source) {
+-                if (typeof source === "string") {
+-                    lines = source
+-                        .replace(/\r\n/g, "\n")
+-                        .replace(/\r/g, "\n")
+-                        .split("\n");
+-                } else {
+-                    lines = source;
+-                }
+-
+-                // If the first line is a shebang (#!), make it a blank and move on.
+-                // Shebangs are used by Node scripts.
+-                if (lines[0] && lines[0].substr(0, 2) === "#!")
+-                    lines[0] = "";
+-
+-                line = 0;
+-                nextLine();
+-                from = 1;
+-            },
+-
+-            range: function (begin, end) {
+-                var c, value = "";
+-                from = character;
+-                if (s.charAt(0) !== begin) {
+-                    errorAt("Expected '{a}' and instead saw '{b}'.",
+-                            line, character, begin, s.charAt(0));
+-                }
+-                for (;;) {
+-                    s = s.slice(1);
+-                    character += 1;
+-                    c = s.charAt(0);
+-                    switch (c) {
+-                    case "":
+-                        errorAt("Missing '{a}'.", line, character, c);
+-                        break;
+-                    case end:
+-                        s = s.slice(1);
+-                        character += 1;
+-                        return it("(range)", value);
+-                    case "\\":
+-                        warningAt("Unexpected '{a}'.", line, character, c);
+-                    }
+-                    value += c;
+-                }
+-
+-            },
+-
+-
+-            // token -- this is called by advance to get the next token
+-            token: function () {
+-                var b, c, captures, d, depth, high, i, l, low, q, t, isLiteral, isInRange, n;
+-
+-                function match(x) {
+-                    var r = x.exec(s), r1;
+-
+-                    if (r) {
+-                        l = r[0].length;
+-                        r1 = r[1];
+-                        c = r1.charAt(0);
+-                        s = s.substr(l);
+-                        from = character + l - r1.length;
+-                        character += l;
+-                        return r1;
+-                    }
+-                }
+-
+-                function string(x) {
+-                    var c, j, r = "", allowNewLine = false;
+-
+-                    if (jsonmode && x !== "\"") {
+-                        warningAt("Strings must use doublequote.",
+-                                line, character);
+-                    }
+-
+-                    if (option.quotmark) {
+-                        if (option.quotmark === "single" && x !== "'") {
+-                            warningAt("Strings must use singlequote.",
+-                                    line, character);
+-                        } else if (option.quotmark === "double" && x !== "\"") {
+-                            warningAt("Strings must use doublequote.",
+-                                    line, character);
+-                        } else if (option.quotmark === true) {
+-                            quotmark = quotmark || x;
+-                            if (quotmark !== x) {
+-                                warningAt("Mixed double and single quotes.",
+-                                        line, character);
+-                            }
+-                        }
+-                    }
+-
+-                    function esc(n) {
+-                        var i = parseInt(s.substr(j + 1, n), 16);
+-                        j += n;
+-                        if (i >= 32 && i <= 126 &&
+-                                i !== 34 && i !== 92 && i !== 39) {
+-                            warningAt("Unnecessary escapement.", line, character);
+-                        }
+-                        character += n;
+-                        c = String.fromCharCode(i);
+-                    }
+-
+-                    j = 0;
+-
+-unclosedString:
+-                    for (;;) {
+-                        while (j >= s.length) {
+-                            j = 0;
+-
+-                            var cl = line, cf = from;
+-                            if (!nextLine()) {
+-                                errorAt("Unclosed string.", cl, cf);
+-                                break unclosedString;
+-                            }
+-
+-                            if (allowNewLine) {
+-                                allowNewLine = false;
+-                            } else {
+-                                warningAt("Unclosed string.", cl, cf);
+-                            }
+-                        }
+-
+-                        c = s.charAt(j);
+-                        if (c === x) {
+-                            character += 1;
+-                            s = s.substr(j + 1);
+-                            return it("(string)", r, x);
+-                        }
+-
+-                        if (c < " ") {
+-                            if (c === "\n" || c === "\r") {
+-                                break;
+-                            }
+-                            warningAt("Control character in string: {a}.",
+-                                    line, character + j, s.slice(0, j));
+-                        } else if (c === "\\") {
+-                            j += 1;
+-                            character += 1;
+-                            c = s.charAt(j);
+-                            n = s.charAt(j + 1);
+-                            switch (c) {
+-                            case "\\":
+-                            case "\"":
+-                            case "/":
+-                                break;
+-                            case "\'":
+-                                if (jsonmode) {
+-                                    warningAt("Avoid \\'.", line, character);
+-                                }
+-                                break;
+-                            case "b":
+-                                c = "\b";
+-                                break;
+-                            case "f":
+-                                c = "\f";
+-                                break;
+-                            case "n":
+-                                c = "\n";
+-                                break;
+-                            case "r":
+-                                c = "\r";
+-                                break;
+-                            case "t":
+-                                c = "\t";
+-                                break;
+-                            case "0":
+-                                c = "\0";
+-                                // Octal literals fail in strict mode
+-                                // check if the number is between 00 and 07
+-                                // where 'n' is the token next to 'c'
+-                                if (n >= 0 && n <= 7 && directive["use strict"]) {
+-                                    warningAt(
+-                                    "Octal literals are not allowed in strict mode.",
+-                                    line, character);
+-                                }
+-                                break;
+-                            case "u":
+-                                esc(4);
+-                                break;
+-                            case "v":
+-                                if (jsonmode) {
+-                                    warningAt("Avoid \\v.", line, character);
+-                                }
+-                                c = "\v";
+-                                break;
+-                            case "x":
+-                                if (jsonmode) {
+-                                    warningAt("Avoid \\x-.", line, character);
+-                                }
+-                                esc(2);
+-                                break;
+-                            case "":
+-                                // last character is escape character
+-                                // always allow new line if escaped, but show
+-                                // warning if option is not set
+-                                allowNewLine = true;
+-                                if (option.multistr) {
+-                                    if (jsonmode) {
+-                                        warningAt("Avoid EOL escapement.", line, character);
+-                                    }
+-                                    c = "";
+-                                    character -= 1;
+-                                    break;
+-                                }
+-                                warningAt("Bad escapement of EOL. Use option multistr if needed.",
+-                                    line, character);
+-                                break;
+-                            case "!":
+-                                if (s.charAt(j - 2) === "<")
+-                                    break;
+-                                /*falls through*/
+-                            default:
+-                                warningAt("Bad escapement.", line, character);
+-                            }
+-                        }
+-                        r += c;
+-                        character += 1;
+-                        j += 1;
+-                    }
+-                }
+-
+-                for (;;) {
+-                    if (!s) {
+-                        return it(nextLine() ? "(endline)" : "(end)", "");
+-                    }
+-
+-                    t = match(tx);
+-
+-                    if (!t) {
+-                        t = "";
+-                        c = "";
+-                        while (s && s < "!") {
+-                            s = s.substr(1);
+-                        }
+-                        if (s) {
+-                            errorAt("Unexpected '{a}'.", line, character, s.substr(0, 1));
+-                            s = "";
+-                        }
+-                    } else {
+-
+-    //      identifier
+-
+-                        if (isAlpha(c) || c === "_" || c === "$") {
+-                            return it("(identifier)", t);
+-                        }
+-
+-    //      number
+-
+-                        if (isDigit(c)) {
+-                            if (!isFinite(Number(t))) {
+-                                warningAt("Bad number '{a}'.",
+-                                    line, character, t);
+-                            }
+-                            if (isAlpha(s.substr(0, 1))) {
+-                                warningAt("Missing space after '{a}'.",
+-                                        line, character, t);
+-                            }
+-                            if (c === "0") {
+-                                d = t.substr(1, 1);
+-                                if (isDigit(d)) {
+-                                    if (token.id !== ".") {
+-                                        warningAt("Don't use extra leading zeros '{a}'.",
+-                                            line, character, t);
+-                                    }
+-                                } else if (jsonmode && (d === "x" || d === "X")) {
+-                                    warningAt("Avoid 0x-. '{a}'.",
+-                                            line, character, t);
+-                                }
+-                            }
+-                            if (t.substr(t.length - 1) === ".") {
+-                                warningAt(
+-"A trailing decimal point can be confused with a dot '{a}'.", line, character, t);
+-                            }
+-                            return it("(number)", t);
+-                        }
+-                        switch (t) {
+-
+-    //      string
+-
+-                        case "\"":
+-                        case "'":
+-                            return string(t);
+-
+-    //      // comment
+-
+-                        case "//":
+-                            s = "";
+-                            token.comment = true;
+-                            break;
+-
+-    //      /* comment
+-
+-                        case "/*":
+-                            for (;;) {
+-                                i = s.search(lx);
+-                                if (i >= 0) {
+-                                    break;
+-                                }
+-                                if (!nextLine()) {
+-                                    errorAt("Unclosed comment.", line, character);
+-                                }
+-                            }
+-                            s = s.substr(i + 2);
+-                            token.comment = true;
+-                            break;
+-
+-    //      /*members /*jshint /*global
+-
+-                        case "/*members":
+-                        case "/*member":
+-                        case "/*jshint":
+-                        case "/*jslint":
+-                        case "/*global":
+-                        case "*/":
+-                            return {
+-                                value: t,
+-                                type: "special",
+-                                line: line,
+-                                character: character,
+-                                from: from
+-                            };
+-
+-                        case "":
+-                            break;
+-    //      /
+-                        case "/":
+-                            if (s.charAt(0) === "=") {
+-                                errorAt("A regular expression literal can be confused with '/='.",
+-                                    line, from);
+-                            }
+-
+-                            if (prereg) {
+-                                depth = 0;
+-                                captures = 0;
+-                                l = 0;
+-                                for (;;) {
+-                                    b = true;
+-                                    c = s.charAt(l);
+-                                    l += 1;
+-                                    switch (c) {
+-                                    case "":
+-                                        errorAt("Unclosed regular expression.", line, from);
+-                                        return quit("Stopping.", line, from);
+-                                    case "/":
+-                                        if (depth > 0) {
+-                                            warningAt("{a} unterminated regular expression " +
+-                                                "group(s).", line, from + l, depth);
+-                                        }
+-                                        c = s.substr(0, l - 1);
+-                                        q = {
+-                                            g: true,
+-                                            i: true,
+-                                            m: true
+-                                        };
+-                                        while (q[s.charAt(l)] === true) {
+-                                            q[s.charAt(l)] = false;
+-                                            l += 1;
+-                                        }
+-                                        character += l;
+-                                        s = s.substr(l);
+-                                        q = s.charAt(0);
+-                                        if (q === "/" || q === "*") {
+-                                            errorAt("Confusing regular expression.",
+-                                                    line, from);
+-                                        }
+-                                        return it("(regexp)", c);
+-                                    case "\\":
+-                                        c = s.charAt(l);
+-                                        if (c < " ") {
+-                                            warningAt(
+-"Unexpected control character in regular expression.", line, from + l);
+-                                        } else if (c === "<") {
+-                                            warningAt(
+-"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
+-                                        }
+-                                        l += 1;
+-                                        break;
+-                                    case "(":
+-                                        depth += 1;
+-                                        b = false;
+-                                        if (s.charAt(l) === "?") {
+-                                            l += 1;
+-                                            switch (s.charAt(l)) {
+-                                            case ":":
+-                                            case "=":
+-                                            case "!":
+-                                                l += 1;
+-                                                break;
+-                                            default:
+-                                                warningAt(
+-"Expected '{a}' and instead saw '{b}'.", line, from + l, ":", s.charAt(l));
+-                                            }
+-                                        } else {
+-                                            captures += 1;
+-                                        }
+-                                        break;
+-                                    case "|":
+-                                        b = false;
+-                                        break;
+-                                    case ")":
+-                                        if (depth === 0) {
+-                                            warningAt("Unescaped '{a}'.",
+-                                                    line, from + l, ")");
+-                                        } else {
+-                                            depth -= 1;
+-                                        }
+-                                        break;
+-                                    case " ":
+-                                        q = 1;
+-                                        while (s.charAt(l) === " ") {
+-                                            l += 1;
+-                                            q += 1;
+-                                        }
+-                                        if (q > 1) {
+-                                            warningAt(
+-"Spaces are hard to count. Use {{a}}.", line, from + l, q);
+-                                        }
+-                                        break;
+-                                    case "[":
+-                                        c = s.charAt(l);
+-                                        if (c === "^") {
+-                                            l += 1;
+-                                            if (s.charAt(l) === "]") {
+-                                                errorAt("Unescaped '{a}'.",
+-                                                    line, from + l, "^");
+-                                            }
+-                                        }
+-                                        if (c === "]") {
+-                                            warningAt("Empty class.", line,
+-                                                    from + l - 1);
+-                                        }
+-                                        isLiteral = false;
+-                                        isInRange = false;
+-klass:
+-                                        do {
+-                                            c = s.charAt(l);
+-                                            l += 1;
+-                                            switch (c) {
+-                                            case "[":
+-                                            case "^":
+-                                                warningAt("Unescaped '{a}'.",
+-                                                        line, from + l, c);
+-                                                if (isInRange) {
+-                                                    isInRange = false;
+-                                                } else {
+-                                                    isLiteral = true;
+-                                                }
+-                                                break;
+-                                            case "-":
+-                                                if (isLiteral && !isInRange) {
+-                                                    isLiteral = false;
+-                                                    isInRange = true;
+-                                                } else if (isInRange) {
+-                                                    isInRange = false;
+-                                                } else if (s.charAt(l) === "]") {
+-                                                    isInRange = true;
+-                                                } else {
+-                                                    if (option.regexdash !== (l === 2 || (l === 3 &&
+-                                                        s.charAt(1) === "^"))) {
+-                                                        warningAt("Unescaped '{a}'.",
+-                                                            line, from + l - 1, "-");
+-                                                    }
+-                                                    isLiteral = true;
+-                                                }
+-                                                break;
+-                                            case "]":
+-                                                if (isInRange && !option.regexdash) {
+-                                                    warningAt("Unescaped '{a}'.",
+-                                                            line, from + l - 1, "-");
+-                                                }
+-                                                break klass;
+-                                            case "\\":
+-                                                c = s.charAt(l);
+-                                                if (c < " ") {
+-                                                    warningAt(
+-"Unexpected control character in regular expression.", line, from + l);
+-                                                } else if (c === "<") {
+-                                                    warningAt(
+-"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
+-                                                }
+-                                                l += 1;
+-
+-                                                // \w, \s and \d are never part of a character range
+-                                                if (/[wsd]/i.test(c)) {
+-                                                    if (isInRange) {
+-                                                        warningAt("Unescaped '{a}'.",
+-                                                            line, from + l, "-");
+-                                                        isInRange = false;
+-                                                    }
+-                                                    isLiteral = false;
+-                                                } else if (isInRange) {
+-                                                    isInRange = false;
+-                                                } else {
+-                                                    isLiteral = true;
+-                                                }
+-                                                break;
+-                                            case "/":
+-                                                warningAt("Unescaped '{a}'.",
+-                                                        line, from + l - 1, "/");
+-
+-                                                if (isInRange) {
+-                                                    isInRange = false;
+-                                                } else {
+-                                                    isLiteral = true;
+-                                                }
+-                                                break;
+-                                            case "<":
+-                                                if (isInRange) {
+-                                                    isInRange = false;
+-                                                } else {
+-                                                    isLiteral = true;
+-                                                }
+-                                                break;
+-                                            default:
+-                                                if (isInRange) {
+-                                                    isInRange = false;
+-                                                } else {
+-                                                    isLiteral = true;
+-                                                }
+-                                            }
+-                                        } while (c);
+-                                        break;
+-                                    case ".":
+-                                        if (option.regexp) {
+-                                            warningAt("Insecure '{a}'.", line,
+-                                                    from + l, c);
+-                                        }
+-                                        break;
+-                                    case "]":
+-                                    case "?":
+-                                    case "{":
+-                                    case "}":
+-                                    case "+":
+-                                    case "*":
+-                                        warningAt("Unescaped '{a}'.", line,
+-                                                from + l, c);
+-                                    }
+-                                    if (b) {
+-                                        switch (s.charAt(l)) {
+-                                        case "?":
+-                                        case "+":
+-                                        case "*":
+-                                            l += 1;
+-                                            if (s.charAt(l) === "?") {
+-                                                l += 1;
+-                                            }
+-                                            break;
+-                                        case "{":
+-                                            l += 1;
+-                                            c = s.charAt(l);
+-                                            if (c < "0" || c > "9") {
+-                                                warningAt(
+-"Expected a number and instead saw '{a}'.", line, from + l, c);
+-                                                break; // No reason to continue checking numbers.
+-                                            }
+-                                            l += 1;
+-                                            low = +c;
+-                                            for (;;) {
+-                                                c = s.charAt(l);
+-                                                if (c < "0" || c > "9") {
+-                                                    break;
+-                                                }
+-                                                l += 1;
+-                                                low = +c + (low * 10);
+-                                            }
+-                                            high = low;
+-                                            if (c === ",") {
+-                                                l += 1;
+-                                                high = Infinity;
+-                                                c = s.charAt(l);
+-                                                if (c >= "0" && c <= "9") {
+-                                                    l += 1;
+-                                                    high = +c;
+-                                                    for (;;) {
+-                                                        c = s.charAt(l);
+-                                                        if (c < "0" || c > "9") {
+-                                                            break;
+-                                                        }
+-                                                        l += 1;
+-                                                        high = +c + (high * 10);
+-                                                    }
+-                                                }
+-                                            }
+-                                            if (s.charAt(l) !== "}") {
+-                                                warningAt(
+-"Expected '{a}' and instead saw '{b}'.", line, from + l, "}", c);
+-                                            } else {
+-                                                l += 1;
+-                                            }
+-                                            if (s.charAt(l) === "?") {
+-                                                l += 1;
+-                                            }
+-                                            if (low > high) {
+-                                                warningAt(
+-"'{a}' should not be greater than '{b}'.", line, from + l, low, high);
+-                                            }
+-                                        }
+-                                    }
+-                                }
+-                                c = s.substr(0, l - 1);
+-                                character += l;
+-                                s = s.substr(l);
+-                                return it("(regexp)", c);
+-                            }
+-                            return it("(punctuator)", t);
+-
+-    //      punctuator
+-
+-                        case "#":
+-                            return it("(punctuator)", t);
+-                        default:
+-                            return it("(punctuator)", t);
+-                        }
+-                    }
+-                }
+-            }
+-        };
+-    }());
+-
+-
+-    function addlabel(t, type, token) {
+-        if (t === "hasOwnProperty") {
+-            warning("'hasOwnProperty' is a really bad name.");
+-        }
+-
+-        // Define t in the current function in the current scope.
+-        if (type === "exception") {
+-            if (is_own(funct["(context)"], t)) {
+-                if (funct[t] !== true && !option.node) {
+-                    warning("Value of '{a}' may be overwritten in IE.", nexttoken, t);
+-                }
+-            }
+-        }
+-
+-        if (is_own(funct, t) && !funct["(global)"]) {
+-            if (funct[t] === true) {
+-                if (option.latedef)
+-                    warning("'{a}' was used before it was defined.", nexttoken, t);
+-            } else {
+-                if (!option.shadow && type !== "exception") {
+-                    warning("'{a}' is already defined.", nexttoken, t);
+-                }
+-            }
+-        }
+-
+-        funct[t] = type;
+-
+-        if (token) {
+-            funct["(tokens)"][t] = token;
+-        }
+-
+-        if (funct["(global)"]) {
+-            global[t] = funct;
+-            if (is_own(implied, t)) {
+-                if (option.latedef)
+-                    warning("'{a}' was used before it was defined.", nexttoken, t);
+-                delete implied[t];
+-            }
+-        } else {
+-            scope[t] = funct;
+-        }
+-    }
+-
+-
+-    function doOption() {
+-        var nt = nexttoken;
+-        var o  = nt.value;
+-        var quotmarkValue = option.quotmark;
+-        var predef = {};
+-        var b, obj, filter, t, tn, v, minus;
+-
+-        switch (o) {
+-        case "*/":
+-            error("Unbegun comment.");
+-            break;
+-        case "/*members":
+-        case "/*member":
+-            o = "/*members";
+-            if (!membersOnly) {
+-                membersOnly = {};
+-            }
+-            obj = membersOnly;
+-            option.quotmark = false;
+-            break;
+-        case "/*jshint":
+-        case "/*jslint":
+-            obj = option;
+-            filter = boolOptions;
+-            break;
+-        case "/*global":
+-            obj = predef;
+-            break;
+-        default:
+-            error("What?");
+-        }
+-
+-        t = lex.token();
+-
+-loop:
+-        for (;;) {
+-            minus = false;
+-            for (;;) {
+-                if (t.type === "special" && t.value === "*/") {
+-                    break loop;
+-                }
+-                if (t.id !== "(endline)" && t.id !== ",") {
+-                    break;
+-                }
+-                t = lex.token();
+-            }
+-
+-            if (o === "/*global" && t.value === "-") {
+-                minus = true;
+-                t = lex.token();
+-            }
+-
+-            if (t.type !== "(string)" && t.type !== "(identifier)" && o !== "/*members") {
+-                error("Bad option.", t);
+-            }
+-
+-            v = lex.token();
+-            if (v.id === ":") {
+-                v = lex.token();
+-
+-                if (obj === membersOnly) {
+-                    error("Expected '{a}' and instead saw '{b}'.", t, "*/", ":");
+-                }
+-
+-                if (o === "/*jshint") {
+-                    checkOption(t.value, t);
+-                }
+-
+-                var numericVals = [
+-                    "maxstatements",
+-                    "maxparams",
+-                    "maxdepth",
+-                    "maxcomplexity",
+-                    "maxerr",
+-                    "maxlen",
+-                    "indent"
+-                ];
+-
+-                if (numericVals.indexOf(t.value) > -1 && (o === "/*jshint" || o === "/*jslint")) {
+-                    b = +v.value;
+-
+-                    if (typeof b !== "number" || !isFinite(b) || b <= 0 || Math.floor(b) !== b) {
+-                        error("Expected a small integer and instead saw '{a}'.", v, v.value);
+-                    }
+-
+-                    if (t.value === "indent")
+-                        obj.white = true;
+-
+-                    obj[t.value] = b;
+-                } else if (t.value === "validthis") {
+-                    if (funct["(global)"]) {
+-                        error("Option 'validthis' can't be used in a global scope.");
+-                    } else {
+-                        if (v.value === "true" || v.value === "false")
+-                            obj[t.value] = v.value === "true";
+-                        else
+-                            error("Bad option value.", v);
+-                    }
+-                } else if (t.value === "quotmark" && (o === "/*jshint")) {
+-                    switch (v.value) {
+-                    case "true":
+-                        obj.quotmark = true;
+-                        break;
+-                    case "false":
+-                        obj.quotmark = false;
+-                        break;
+-                    case "double":
+-                    case "single":
+-                        obj.quotmark = v.value;
+-                        break;
+-                    default:
+-                        error("Bad option value.", v);
+-                    }
+-                } else if (v.value === "true" || v.value === "false") {
+-                    if (o === "/*jslint") {
+-                        tn = renamedOptions[t.value] || t.value;
+-                        obj[tn] = v.value === "true";
+-                        if (invertedOptions[tn] !== undefined) {
+-                            obj[tn] = !obj[tn];
+-                        }
+-                    } else {
+-                        obj[t.value] = v.value === "true";
+-                    }
+-
+-                    if (t.value === "newcap")
+-                        obj["(explicitNewcap)"] = true;
+-                } else {
+-                    error("Bad option value.", v);
+-                }
+-                t = lex.token();
+-            } else {
+-                if (o === "/*jshint" || o === "/*jslint") {
+-                    error("Missing option value.", t);
+-                }
+-
+-                obj[t.value] = false;
+-
+-                if (o === "/*global" && minus === true) {
+-                    JSHINT.blacklist[t.value] = t.value;
+-                    updatePredefined();
+-                }
+-
+-                t = v;
+-            }
+-        }
+-
+-        if (o === "/*members") {
+-            option.quotmark = quotmarkValue;
+-        }
+-
+-        combine(predefined, predef);
+-
+-        for (var key in predef) {
+-            if (is_own(predef, key)) {
+-                declared[key] = nt;
+-            }
+-        }
+-
+-        if (filter) {
+-            assume();
+-        }
+-    }
+-
+-
+-// We need a peek function. If it has an argument, it peeks that much farther
+-// ahead. It is used to distinguish
+-//     for ( var i in ...
+-// from
+-//     for ( var i = ...
+-
+-    function peek(p) {
+-        var i = p || 0, j = 0, t;
+-
+-        while (j <= i) {
+-            t = lookahead[j];
+-            if (!t) {
+-                t = lookahead[j] = lex.token();
+-            }
+-            j += 1;
+-        }
+-        return t;
+-    }
+-
+-
+-
+-// Produce the next token. It looks for programming errors.
+-
+-    function advance(id, t) {
+-        switch (token.id) {
+-        case "(number)":
+-            if (nexttoken.id === ".") {
+-                warning("A dot following a number can be confused with a decimal point.", token);
+-            }
+-            break;
+-        case "-":
+-            if (nexttoken.id === "-" || nexttoken.id === "--") {
+-                warning("Confusing minusses.");
+-            }
+-            break;
+-        case "+":
+-            if (nexttoken.id === "+" || nexttoken.id === "++") {
+-                warning("Confusing plusses.");
+-            }
+-            break;
+-        }
+-
+-        if (token.type === "(string)" || token.identifier) {
+-            anonname = token.value;
+-        }
+-
+-        if (id && nexttoken.id !== id) {
+-            if (t) {
+-                if (nexttoken.id === "(end)") {
+-                    warning("Unmatched '{a}'.", t, t.id);
+-                } else {
+-                    warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
+-                            nexttoken, id, t.id, t.line, nexttoken.value);
+-                }
+-            } else if (nexttoken.type !== "(identifier)" ||
+-                            nexttoken.value !== id) {
+-                warning("Expected '{a}' and instead saw '{b}'.",
+-                        nexttoken, id, nexttoken.value);
+-            }
+-        }
+-
+-        prevtoken = token;
+-        token = nexttoken;
+-        for (;;) {
+-            nexttoken = lookahead.shift() || lex.token();
+-            if (nexttoken.id === "(end)" || nexttoken.id === "(error)") {
+-                return;
+-            }
+-            if (nexttoken.type === "special") {
+-                doOption();
+-            } else {
+-                if (nexttoken.id !== "(endline)") {
+-                    break;
+-                }
+-            }
+-        }
+-    }
+-
+-
+-// This is the heart of JSHINT, the Pratt parser. In addition to parsing, it
+-// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is
+-// like .nud except that it is only used on the first token of a statement.
+-// Having .fud makes it much easier to define statement-oriented languages like
+-// JavaScript. I retained Pratt's nomenclature.
+-
+-// .nud     Null denotation
+-// .fud     First null denotation
+-// .led     Left denotation
+-//  lbp     Left binding power
+-//  rbp     Right binding power
+-
+-// They are elements of the parsing method called Top Down Operator Precedence.
+-
+-    function expression(rbp, initial) {
+-        var left, isArray = false, isObject = false;
+-
+-        if (nexttoken.id === "(end)")
+-            error("Unexpected early end of program.", token);
+-
+-        advance();
+-        if (initial) {
+-            anonname = "anonymous";
+-            funct["(verb)"] = token.value;
+-        }
+-        if (initial === true && token.fud) {
+-            left = token.fud();
+-        } else {
+-            if (token.nud) {
+-                left = token.nud();
+-            } else {
+-                if (nexttoken.type === "(number)" && token.id === ".") {
+-                    warning("A leading decimal point can be confused with a dot: '.{a}'.",
+-                            token, nexttoken.value);
+-                    advance();
+-                    return token;
+-                } else {
+-                    error("Expected an identifier and instead saw '{a}'.",
+-                            token, token.id);
+-                }
+-            }
+-            while (rbp < nexttoken.lbp) {
+-                isArray = token.value === "Array";
+-                isObject = token.value === "Object";
+-
+-                // #527, new Foo.Array(), Foo.Array(), new Foo.Object(), Foo.Object()
+-                // Line breaks in IfStatement heads exist to satisfy the checkJSHint
+-                // "Line too long." error.
+-                if (left && (left.value || (left.first && left.first.value))) {
+-                    // If the left.value is not "new", or the left.first.value is a "."
+-                    // then safely assume that this is not "new Array()" and possibly
+-                    // not "new Object()"...
+-                    if (left.value !== "new" ||
+-                      (left.first && left.first.value && left.first.value === ".")) {
+-                        isArray = false;
+-                        // ...In the case of Object, if the left.value and token.value
+-                        // are not equal, then safely assume that this not "new Object()"
+-                        if (left.value !== token.value) {
+-                            isObject = false;
+-                        }
+-                    }
+-                }
+-
+-                advance();
+-                if (isArray && token.id === "(" && nexttoken.id === ")")
+-                    warning("Use the array literal notation [].", token);
+-                if (isObject && token.id === "(" && nexttoken.id === ")")
+-                    warning("Use the object literal notation {}.", token);
+-                if (token.led) {
+-                    left = token.led(left);
+-                } else {
+-                    error("Expected an operator and instead saw '{a}'.",
+-                        token, token.id);
+-                }
+-            }
+-        }
+-        return left;
+-    }
+-
+-
+-// Functions for conformance of style.
+-
+-    function adjacent(left, right) {
+-        left = left || token;
+-        right = right || nexttoken;
+-        if (option.white) {
+-            if (left.character !== right.from && left.line === right.line) {
+-                left.from += (left.character - left.from);
+-                warning("Unexpected space after '{a}'.", left, left.value);
+-            }
+-        }
+-    }
+-
+-    function nobreak(left, right) {
+-        left = left || token;
+-        right = right || nexttoken;
+-        if (option.white && (left.character !== right.from || left.line !== right.line)) {
+-            warning("Unexpected space before '{a}'.", right, right.value);
+-        }
+-    }
+-
+-    function nospace(left, right) {
+-        left = left || token;
+-        right = right || nexttoken;
+-        if (option.white && !left.comment) {
+-            if (left.line === right.line) {
+-                adjacent(left, right);
+-            }
+-        }
+-    }
+-
+-    function nonadjacent(left, right) {
+-        if (option.white) {
+-            left = left || token;
+-            right = right || nexttoken;
+-            if (left.value === ";" && right.value === ";") {
+-                return;
+-            }
+-            if (left.line === right.line && left.character === right.from) {
+-                left.from += (left.character - left.from);
+-                warning("Missing space after '{a}'.",
+-                        left, left.value);
+-            }
+-        }
+-    }
+-
+-    function nobreaknonadjacent(left, right) {
+-        left = left || token;
+-        right = right || nexttoken;
+-        if (!option.laxbreak && left.line !== right.line) {
+-            warning("Bad line breaking before '{a}'.", right, right.id);
+-        } else if (option.white) {
+-            left = left || token;
+-            right = right || nexttoken;
+-            if (left.character === right.from) {
+-                left.from += (left.character - left.from);
+-                warning("Missing space after '{a}'.",
+-                        left, left.value);
+-            }
+-        }
+-    }
+-
+-    function indentation(bias) {
+-        var i;
+-        if (option.white && nexttoken.id !== "(end)") {
+-            i = indent + (bias || 0);
+-            if (nexttoken.from !== i) {
+-                warning(
+-"Expected '{a}' to have an indentation at {b} instead at {c}.",
+-                        nexttoken, nexttoken.value, i, nexttoken.from);
+-            }
+-        }
+-    }
+-
+-    function nolinebreak(t) {
+-        t = t || token;
+-        if (t.line !== nexttoken.line) {
+-            warning("Line breaking error '{a}'.", t, t.value);
+-        }
+-    }
+-
+-
+-    function comma() {
+-        if (token.line !== nexttoken.line) {
+-            if (!option.laxcomma) {
+-                if (comma.first) {
+-                    warning("Comma warnings can be turned off with 'laxcomma'");
+-                    comma.first = false;
+-                }
+-                warning("Bad line breaking before '{a}'.", token, nexttoken.id);
+-            }
+-        } else if (!token.comment && token.character !== nexttoken.from && option.white) {
+-            token.from += (token.character - token.from);
+-            warning("Unexpected space after '{a}'.", token, token.value);
+-        }
+-        advance(",");
+-        nonadjacent(token, nexttoken);
+-    }
+-
+-
+-// Functional constructors for making the symbols that will be inherited by
+-// tokens.
+-
+-    function symbol(s, p) {
+-        var x = syntax[s];
+-        if (!x || typeof x !== "object") {
+-            syntax[s] = x = {
+-                id: s,
+-                lbp: p,
+-                value: s
+-            };
+-        }
+-        return x;
+-    }
+-
+-
+-    function delim(s) {
+-        return symbol(s, 0);
+-    }
+-
+-
+-    function stmt(s, f) {
+-        var x = delim(s);
+-        x.identifier = x.reserved = true;
+-        x.fud = f;
+-        return x;
+-    }
+-
+-
+-    function blockstmt(s, f) {
+-        var x = stmt(s, f);
+-        x.block = true;
+-        return x;
+-    }
+-
+-
+-    function reserveName(x) {
+-        var c = x.id.charAt(0);
+-        if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) {
+-            x.identifier = x.reserved = true;
+-        }
+-        return x;
+-    }
+-
+-
+-    function prefix(s, f) {
+-        var x = symbol(s, 150);
+-        reserveName(x);
+-        x.nud = (typeof f === "function") ? f : function () {
+-            this.right = expression(150);
+-            this.arity = "unary";
+-            if (this.id === "++" || this.id === "--") {
+-                if (option.plusplus) {
+-                    warning("Unexpected use of '{a}'.", this, this.id);
+-                } else if ((!this.right.identifier || this.right.reserved) &&
+-                        this.right.id !== "." && this.right.id !== "[") {
+-                    warning("Bad operand.", this);
+-                }
+-            }
+-            return this;
+-        };
+-        return x;
+-    }
+-
+-
+-    function type(s, f) {
+-        var x = delim(s);
+-        x.type = s;
+-        x.nud = f;
+-        return x;
+-    }
+-
+-
+-    function reserve(s, f) {
+-        var x = type(s, f);
+-        x.identifier = x.reserved = true;
+-        return x;
+-    }
+-
+-
+-    function reservevar(s, v) {
+-        return reserve(s, function () {
+-            if (typeof v === "function") {
+-                v(this);
+-            }
+-            return this;
+-        });
+-    }
+-
+-
+-    function infix(s, f, p, w) {
+-        var x = symbol(s, p);
+-        reserveName(x);
+-        x.led = function (left) {
+-            if (!w) {
+-                nobreaknonadjacent(prevtoken, token);
+-                nonadjacent(token, nexttoken);
+-            }
+-            if (s === "in" && left.id === "!") {
+-                warning("Confusing use of '{a}'.", left, "!");
+-            }
+-            if (typeof f === "function") {
+-                return f(left, this);
+-            } else {
+-                this.left = left;
+-                this.right = expression(p);
+-                return this;
+-            }
+-        };
+-        return x;
+-    }
+-
+-
+-    function relation(s, f) {
+-        var x = symbol(s, 100);
+-        x.led = function (left) {
+-            nobreaknonadjacent(prevtoken, token);
+-            nonadjacent(token, nexttoken);
+-            var right = expression(100);
+-
+-            if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) {
+-                warning("Use the isNaN function to compare with NaN.", this);
+-            } else if (f) {
+-                f.apply(this, [left, right]);
+-            }
+-            if (left.id === "!") {
+-                warning("Confusing use of '{a}'.", left, "!");
+-            }
+-            if (right.id === "!") {
+-                warning("Confusing use of '{a}'.", right, "!");
+-            }
+-            this.left = left;
+-            this.right = right;
+-            return this;
+-        };
+-        return x;
+-    }
+-
+-
+-    function isPoorRelation(node) {
+-        return node &&
+-              ((node.type === "(number)" && +node.value === 0) ||
+-               (node.type === "(string)" && node.value === "") ||
+-               (node.type === "null" && !option.eqnull) ||
+-                node.type === "true" ||
+-                node.type === "false" ||
+-                node.type === "undefined");
+-    }
+-
+-
+-    function assignop(s) {
+-        symbol(s, 20).exps = true;
+-
+-        return infix(s, function (left, that) {
+-            that.left = left;
+-
+-            if (predefined[left.value] === false &&
+-                    scope[left.value]["(global)"] === true) {
+-                warning("Read only.", left);
+-            } else if (left["function"]) {
+-                warning("'{a}' is a function.", left, left.value);
+-            }
+-
+-            if (left) {
+-                if (option.esnext && funct[left.value] === "const") {
+-                    warning("Attempting to override '{a}' which is a constant", left, left.value);
+-                }
+-
+-                if (left.id === "." || left.id === "[") {
+-                    if (!left.left || left.left.value === "arguments") {
+-                        warning("Bad assignment.", that);
+-                    }
+-                    that.right = expression(19);
+-                    return that;
+-                } else if (left.identifier && !left.reserved) {
+-                    if (funct[left.value] === "exception") {
+-                        warning("Do not assign to the exception parameter.", left);
+-                    }
+-                    that.right = expression(19);
+-                    return that;
+-                }
+-
+-                if (left === syntax["function"]) {
+-                    warning(
+-"Expected an identifier in an assignment and instead saw a function invocation.",
+-                                token);
+-                }
+-            }
+-
+-            error("Bad assignment.", that);
+-        }, 20);
+-    }
+-
+-
+-    function bitwise(s, f, p) {
+-        var x = symbol(s, p);
+-        reserveName(x);
+-        x.led = (typeof f === "function") ? f : function (left) {
+-            if (option.bitwise) {
+-                warning("Unexpected use of '{a}'.", this, this.id);
+-            }
+-            this.left = left;
+-            this.right = expression(p);
+-            return this;
+-        };
+-        return x;
+-    }
+-
+-
+-    function bitwiseassignop(s) {
+-        symbol(s, 20).exps = true;
+-        return infix(s, function (left, that) {
+-            if (option.bitwise) {
+-                warning("Unexpected use of '{a}'.", that, that.id);
+-            }
+-            nonadjacent(prevtoken, token);
+-            nonadjacent(token, nexttoken);
+-            if (left) {
+-                if (left.id === "." || left.id === "[" ||
+-                        (left.identifier && !left.reserved)) {
+-                    expression(19);
+-                    return that;
+-                }
+-                if (left === syntax["function"]) {
+-                    warning(
+-"Expected an identifier in an assignment, and instead saw a function invocation.",
+-                                token);
+-                }
+-                return that;
+-            }
+-            error("Bad assignment.", that);
+-        }, 20);
+-    }
+-
+-
+-    function suffix(s) {
+-        var x = symbol(s, 150);
+-        x.led = function (left) {
+-            if (option.plusplus) {
+-                warning("Unexpected use of '{a}'.", this, this.id);
+-            } else if ((!left.identifier || left.reserved) &&
+-                    left.id !== "." && left.id !== "[") {
+-                warning("Bad operand.", this);
+-            }
+-            this.left = left;
+-            return this;
+-        };
+-        return x;
+-    }
+-
+-
+-    // fnparam means that this identifier is being defined as a function
+-    // argument (see identifier())
+-    function optionalidentifier(fnparam) {
+-        if (nexttoken.identifier) {
+-            advance();
+-            if (token.reserved && !option.es5) {
+-                // `undefined` as a function param is a common pattern to protect
+-                // against the case when somebody does `undefined = true` and
+-                // help with minification. More info: https://gist.github.com/315916
+-                if (!fnparam || token.value !== "undefined") {
+-                    warning("Expected an identifier and instead saw '{a}' (a reserved word).",
+-                            token, token.id);
+-                }
+-            }
+-            return token.value;
+-        }
+-    }
+-
+-    // fnparam means that this identifier is being defined as a function
+-    // argument
+-    function identifier(fnparam) {
+-        var i = optionalidentifier(fnparam);
+-        if (i) {
+-            return i;
+-        }
+-        if (token.id === "function" && nexttoken.id === "(") {
+-            warning("Missing name in function declaration.");
+-        } else {
+-            error("Expected an identifier and instead saw '{a}'.",
+-                    nexttoken, nexttoken.value);
+-        }
+-    }
+-
+-
+-    function reachable(s) {
+-        var i = 0, t;
+-        if (nexttoken.id !== ";" || noreach) {
+-            return;
+-        }
+-        for (;;) {
+-            t = peek(i);
+-            if (t.reach) {
+-                return;
+-            }
+-            if (t.id !== "(endline)") {
+-                if (t.id === "function") {
+-                    if (!option.latedef) {
+-                        break;
+-                    }
+-                    warning(
+-"Inner functions should be listed at the top of the outer function.", t);
+-                    break;
+-                }
+-                warning("Unreachable '{a}' after '{b}'.", t, t.value, s);
+-                break;
+-            }
+-            i += 1;
+-        }
+-    }
+-
+-
+-    function statement(noindent) {
+-        var i = indent, r, s = scope, t = nexttoken;
+-
+-        if (t.id === ";") {
+-            advance(";");
+-            return;
+-        }
+-
+-        // Is this a labelled statement?
+-
+-        if (t.identifier && !t.reserved && peek().id === ":") {
+-            advance();
+-            advance(":");
+-            scope = Object.create(s);
+-            addlabel(t.value, "label");
+-
+-            if (!nexttoken.labelled && nexttoken.value !== "{") {
+-                warning("Label '{a}' on {b} statement.", nexttoken, t.value, nexttoken.value);
+-            }
+-
+-            if (jx.test(t.value + ":")) {
+-                warning("Label '{a}' looks like a javascript url.", t, t.value);
+-            }
+-
+-            nexttoken.label = t.value;
+-            t = nexttoken;
+-        }
+-
+-        // Is it a lonely block?
+-
+-        if (t.id === "{") {
+-            block(true, true);
+-            return;
+-        }
+-
+-        // Parse the statement.
+-
+-        if (!noindent) {
+-            indentation();
+-        }
+-        r = expression(0, true);
+-
+-        // Look for the final semicolon.
+-
+-        if (!t.block) {
+-            if (!option.expr && (!r || !r.exps)) {
+-                warning("Expected an assignment or function call and instead saw an expression.",
+-                    token);
+-            } else if (option.nonew && r.id === "(" && r.left.id === "new") {
+-                warning("Do not use 'new' for side effects.", t);
+-            }
+-
+-            if (nexttoken.id === ",") {
+-                return comma();
+-            }
+-
+-            if (nexttoken.id !== ";") {
+-                if (!option.asi) {
+-                    // If this is the last statement in a block that ends on
+-                    // the same line *and* option lastsemic is on, ignore the warning.
+-                    // Otherwise, complain about missing semicolon.
+-                    if (!option.lastsemic || nexttoken.id !== "}" ||
+-                            nexttoken.line !== token.line) {
+-                        warningAt("Missing semicolon.", token.line, token.character);
+-                    }
+-                }
+-            } else {
+-                adjacent(token, nexttoken);
+-                advance(";");
+-                nonadjacent(token, nexttoken);
+-            }
+-        }
+-
+-// Restore the indentation.
+-
+-        indent = i;
+-        scope = s;
+-        return r;
+-    }
+-
+-
+-    function statements(startLine) {
+-        var a = [], p;
+-
+-        while (!nexttoken.reach && nexttoken.id !== "(end)") {
+-            if (nexttoken.id === ";") {
+-                p = peek();
+-                if (!p || p.id !== "(") {
+-                    warning("Unnecessary semicolon.");
+-                }
+-                advance(";");
+-            } else {
+-                a.push(statement(startLine === nexttoken.line));
+-            }
+-        }
+-        return a;
+-    }
+-
+-
+-    /*
+-     * read all directives
+-     * recognizes a simple form of asi, but always
+-     * warns, if it is used
+-     */
+-    function directives() {
+-        var i, p, pn;
+-
+-        for (;;) {
+-            if (nexttoken.id === "(string)") {
+-                p = peek(0);
+-                if (p.id === "(endline)") {
+-                    i = 1;
+-                    do {
+-                        pn = peek(i);
+-                        i = i + 1;
+-                    } while (pn.id === "(endline)");
+-
+-                    if (pn.id !== ";") {
+-                        if (pn.id !== "(string)" && pn.id !== "(number)" &&
+-                            pn.id !== "(regexp)" && pn.identifier !== true &&
+-                            pn.id !== "}") {
+-                            break;
+-                        }
+-                        warning("Missing semicolon.", nexttoken);
+-                    } else {
+-                        p = pn;
+-                    }
+-                } else if (p.id === "}") {
+-                    // directive with no other statements, warn about missing semicolon
+-                    warning("Missing semicolon.", p);
+-                } else if (p.id !== ";") {
+-                    break;
+-                }
+-
+-                indentation();
+-                advance();
+-                if (directive[token.value]) {
+-                    warning("Unnecessary directive \"{a}\".", token, token.value);
+-                }
+-
+-                if (token.value === "use strict") {
+-                    if (!option["(explicitNewcap)"])
+-                        option.newcap = true;
+-                    option.undef = true;
+-                }
+-
+-                // there's no directive negation, so always set to true
+-                directive[token.value] = true;
+-
+-                if (p.id === ";") {
+-                    advance(";");
+-                }
+-                continue;
+-            }
+-            break;
+-        }
+-    }
+-
+-
+-    /*
+-     * Parses a single block. A block is a sequence of statements wrapped in
+-     * braces.
+-     *
+-     * ordinary - true for everything but function bodies and try blocks.
+-     * stmt     - true if block can be a single statement (e.g. in if/for/while).
+-     * isfunc   - true if block is a function body
+-     */
+-    function block(ordinary, stmt, isfunc) {
+-        var a,
+-            b = inblock,
+-            old_indent = indent,
+-            m,
+-            s = scope,
+-            t,
+-            line,
+-            d;
+-
+-        inblock = ordinary;
+-
+-        if (!ordinary || !option.funcscope)
+-            scope = Object.create(scope);
+-
+-        nonadjacent(token, nexttoken);
+-        t = nexttoken;
+-
+-        var metrics = funct["(metrics)"];
+-        metrics.nestedBlockDepth += 1;
+-        metrics.verifyMaxNestedBlockDepthPerFunction();
+-
+-        if (nexttoken.id === "{") {
+-            advance("{");
+-            line = token.line;
+-            if (nexttoken.id !== "}") {
+-                indent += option.indent;
+-                while (!ordinary && nexttoken.from > indent) {
+-                    indent += option.indent;
+-                }
+-
+-                if (isfunc) {
+-                    m = {};
+-                    for (d in directive) {
+-                        if (is_own(directive, d)) {
+-                            m[d] = directive[d];
+-                        }
+-                    }
+-                    directives();
+-
+-                    if (option.strict && funct["(context)"]["(global)"]) {
+-                        if (!m["use strict"] && !directive["use strict"]) {
+-                            warning("Missing \"use strict\" statement.");
+-                        }
+-                    }
+-                }
+-
+-                a = statements(line);
+-
+-                metrics.statementCount += a.length;
+-
+-                if (isfunc) {
+-                    directive = m;
+-                }
+-
+-                indent -= option.indent;
+-                if (line !== nexttoken.line) {
+-                    indentation();
+-                }
+-            } else if (line !== nexttoken.line) {
+-                indentation();
+-            }
+-            advance("}", t);
+-            indent = old_indent;
+-        } else if (!ordinary) {
+-            error("Expected '{a}' and instead saw '{b}'.",
+-                  nexttoken, "{", nexttoken.value);
+-        } else {
+-            if (!stmt || option.curly)
+-                warning("Expected '{a}' and instead saw '{b}'.",
+-                        nexttoken, "{", nexttoken.value);
+-
+-            noreach = true;
+-            indent += option.indent;
+-            // test indentation only if statement is in new line
+-            a = [statement(nexttoken.line === token.line)];
+-            indent -= option.indent;
+-            noreach = false;
+-        }
+-        funct["(verb)"] = null;
+-        if (!ordinary || !option.funcscope) scope = s;
+-        inblock = b;
+-        if (ordinary && option.noempty && (!a || a.length === 0)) {
+-            warning("Empty block.");
+-        }
+-        metrics.nestedBlockDepth -= 1;
+-        return a;
+-    }
+-
+-
+-    function countMember(m) {
+-        if (membersOnly && typeof membersOnly[m] !== "boolean") {
+-            warning("Unexpected /*member '{a}'.", token, m);
+-        }
+-        if (typeof member[m] === "number") {
+-            member[m] += 1;
+-        } else {
+-            member[m] = 1;
+-        }
+-    }
+-
+-
+-    function note_implied(token) {
+-        var name = token.value, line = token.line, a = implied[name];
+-        if (typeof a === "function") {
+-            a = false;
+-        }
+-
+-        if (!a) {
+-            a = [line];
+-            implied[name] = a;
+-        } else if (a[a.length - 1] !== line) {
+-            a.push(line);
+-        }
+-    }
+-
+-
+-    // Build the syntax table by declaring the syntactic elements of the language.
+-
+-    type("(number)", function () {
+-        return this;
+-    });
+-
+-    type("(string)", function () {
+-        return this;
+-    });
+-
+-    syntax["(identifier)"] = {
+-        type: "(identifier)",
+-        lbp: 0,
+-        identifier: true,
+-        nud: function () {
+-            var v = this.value,
+-                s = scope[v],
+-                f;
+-
+-            if (typeof s === "function") {
+-                // Protection against accidental inheritance.
+-                s = undefined;
+-            } else if (typeof s === "boolean") {
+-                f = funct;
+-                funct = functions[0];
+-                addlabel(v, "var");
+-                s = funct;
+-                funct = f;
+-            }
+-
+-            // The name is in scope and defined in the current function.
+-            if (funct === s) {
+-                // Change 'unused' to 'var', and reject labels.
+-                switch (funct[v]) {
+-                case "unused":
+-                    funct[v] = "var";
+-                    break;
+-                case "unction":
+-                    funct[v] = "function";
+-                    this["function"] = true;
+-                    break;
+-                case "function":
+-                    this["function"] = true;
+-                    break;
+-                case "label":
+-                    warning("'{a}' is a statement label.", token, v);
+-                    break;
+-                }
+-            } else if (funct["(global)"]) {
+-                // The name is not defined in the function.  If we are in the global
+-                // scope, then we have an undefined variable.
+-                //
+-                // Operators typeof and delete do not raise runtime errors even if
+-                // the base object of a reference is null so no need to display warning
+-                // if we're inside of typeof or delete.
+-
+-                if (option.undef && typeof predefined[v] !== "boolean") {
+-                    // Attempting to subscript a null reference will throw an
+-                    // error, even within the typeof and delete operators
+-                    if (!(anonname === "typeof" || anonname === "delete") ||
+-                        (nexttoken && (nexttoken.value === "." || nexttoken.value === "["))) {
+-
+-                        isundef(funct, "'{a}' is not defined.", token, v);
+-                    }
+-                }
+-
+-                note_implied(token);
+-            } else {
+-                // If the name is already defined in the current
+-                // function, but not as outer, then there is a scope error.
+-
+-                switch (funct[v]) {
+-                case "closure":
+-                case "function":
+-                case "var":
+-                case "unused":
+-                    warning("'{a}' used out of scope.", token, v);
+-                    break;
+-                case "label":
+-                    warning("'{a}' is a statement label.", token, v);
+-                    break;
+-                case "outer":
+-                case "global":
+-                    break;
+-                default:
+-                    // If the name is defined in an outer function, make an outer entry,
+-                    // and if it was unused, make it var.
+-                    if (s === true) {
+-                        funct[v] = true;
+-                    } else if (s === null) {
+-                        warning("'{a}' is not allowed.", token, v);
+-                        note_implied(token);
+-                    } else if (typeof s !== "object") {
+-                        // Operators typeof and delete do not raise runtime errors even
+-                        // if the base object of a reference is null so no need to
+-                        // display warning if we're inside of typeof or delete.
+-                        if (option.undef) {
+-                            // Attempting to subscript a null reference will throw an
+-                            // error, even within the typeof and delete operators
+-                            if (!(anonname === "typeof" || anonname === "delete") ||
+-                                (nexttoken &&
+-                                    (nexttoken.value === "." || nexttoken.value === "["))) {
+-
+-                                isundef(funct, "'{a}' is not defined.", token, v);
+-                            }
+-                        }
+-                        funct[v] = true;
+-                        note_implied(token);
+-                    } else {
+-                        switch (s[v]) {
+-                        case "function":
+-                        case "unction":
+-                            this["function"] = true;
+-                            s[v] = "closure";
+-                            funct[v] = s["(global)"] ? "global" : "outer";
+-                            break;
+-                        case "var":
+-                        case "unused":
+-                            s[v] = "closure";
+-                            funct[v] = s["(global)"] ? "global" : "outer";
+-                            break;
+-                        case "closure":
+-                            funct[v] = s["(global)"] ? "global" : "outer";
+-                            break;
+-                        case "label":
+-                            warning("'{a}' is a statement label.", token, v);
+-                        }
+-                    }
+-                }
+-            }
+-            return this;
+-        },
+-        led: function () {
+-            error("Expected an operator and instead saw '{a}'.",
+-                nexttoken, nexttoken.value);
+-        }
+-    };
+-
+-    type("(regexp)", function () {
+-        return this;
+-    });
+-
+-
+-// ECMAScript parser
+-
+-    delim("(endline)");
+-    delim("(begin)");
+-    delim("(end)").reach = true;
+-    delim("</").reach = true;
+-    delim("<!");
+-    delim("<!--");
+-    delim("-->");
+-    delim("(error)").reach = true;
+-    delim("}").reach = true;
+-    delim(")");
+-    delim("]");
+-    delim("\"").reach = true;
+-    delim("'").reach = true;
+-    delim(";");
+-    delim(":").reach = true;
+-    delim(",");
+-    delim("#");
+-    delim("@");
+-    reserve("else");
+-    reserve("case").reach = true;
+-    reserve("catch");
+-    reserve("default").reach = true;
+-    reserve("finally");
+-    reservevar("arguments", function (x) {
+-        if (directive["use strict"] && funct["(global)"]) {
+-            warning("Strict violation.", x);
+-        }
+-    });
+-    reservevar("eval");
+-    reservevar("false");
+-    reservevar("Infinity");
+-    reservevar("null");
+-    reservevar("this", function (x) {
+-        if (directive["use strict"] && !option.validthis && ((funct["(statement)"] &&
+-                funct["(name)"].charAt(0) > "Z") || funct["(global)"])) {
+-            warning("Possible strict violation.", x);
+-        }
+-    });
+-    reservevar("true");
+-    reservevar("undefined");
+-    assignop("=", "assign", 20);
+-    assignop("+=", "assignadd", 20);
+-    assignop("-=", "assignsub", 20);
+-    assignop("*=", "assignmult", 20);
+-    assignop("/=", "assigndiv", 20).nud = function () {
+-        error("A regular expression literal can be confused with '/='.");
+-    };
+-    assignop("%=", "assignmod", 20);
+-    bitwiseassignop("&=", "assignbitand", 20);
+-    bitwiseassignop("|=", "assignbitor", 20);
+-    bitwiseassignop("^=", "assignbitxor", 20);
+-    bitwiseassignop("<<=", "assignshiftleft", 20);
+-    bitwiseassignop(">>=", "assignshiftright", 20);
+-    bitwiseassignop(">>>=", "assignshiftrightunsigned", 20);
+-    infix("?", function (left, that) {
+-        that.left = left;
+-        that.right = expression(10);
+-        advance(":");
+-        that["else"] = expression(10);
+-        return that;
+-    }, 30);
+-
+-    infix("||", "or", 40);
+-    infix("&&", "and", 50);
+-    bitwise("|", "bitor", 70);
+-    bitwise("^", "bitxor", 80);
+-    bitwise("&", "bitand", 90);
+-    relation("==", function (left, right) {
+-        var eqnull = option.eqnull && (left.value === "null" || right.value === "null");
+-
+-        if (!eqnull && option.eqeqeq)
+-            warning("Expected '{a}' and instead saw '{b}'.", this, "===", "==");
+-        else if (isPoorRelation(left))
+-            warning("Use '{a}' to compare with '{b}'.", this, "===", left.value);
+-        else if (isPoorRelation(right))
+-            warning("Use '{a}' to compare with '{b}'.", this, "===", right.value);
+-
+-        return this;
+-    });
+-    relation("===");
+-    relation("!=", function (left, right) {
+-        var eqnull = option.eqnull &&
+-                (left.value === "null" || right.value === "null");
+-
+-        if (!eqnull && option.eqeqeq) {
+-            warning("Expected '{a}' and instead saw '{b}'.",
+-                    this, "!==", "!=");
+-        } else if (isPoorRelation(left)) {
+-            warning("Use '{a}' to compare with '{b}'.",
+-                    this, "!==", left.value);
+-        } else if (isPoorRelation(right)) {
+-            warning("Use '{a}' to compare with '{b}'.",
+-                    this, "!==", right.value);
+-        }
+-        return this;
+-    });
+-    relation("!==");
+-    relation("<");
+-    relation(">");
+-    relation("<=");
+-    relation(">=");
+-    bitwise("<<", "shiftleft", 120);
+-    bitwise(">>", "shiftright", 120);
+-    bitwise(">>>", "shiftrightunsigned", 120);
+-    infix("in", "in", 120);
+-    infix("instanceof", "instanceof", 120);
+-    infix("+", function (left, that) {
+-        var right = expression(130);
+-        if (left && right && left.id === "(string)" && right.id === "(string)") {
+-            left.value += right.value;
+-            left.character = right.character;
+-            if (!option.scripturl && jx.test(left.value)) {
+-                warning("JavaScript URL.", left);
+-            }
+-            return left;
+-        }
+-        that.left = left;
+-        that.right = right;
+-        return that;
+-    }, 130);
+-    prefix("+", "num");
+-    prefix("+++", function () {
+-        warning("Confusing pluses.");
+-        this.right = expression(150);
+-        this.arity = "unary";
+-        return this;
+-    });
+-    infix("+++", function (left) {
+-        warning("Confusing pluses.");
+-        this.left = left;
+-        this.right = expression(130);
+-        return this;
+-    }, 130);
+-    infix("-", "sub", 130);
+-    prefix("-", "neg");
+-    prefix("---", function () {
+-        warning("Confusing minuses.");
+-        this.right = expression(150);
+-        this.arity = "unary";
+-        return this;
+-    });
+-    infix("---", function (left) {
+-        warning("Confusing minuses.");
+-        this.left = left;
+-        this.right = expression(130);
+-        return this;
+-    }, 130);
+-    infix("*", "mult", 140);
+-    infix("/", "div", 140);
+-    infix("%", "mod", 140);
+-
+-    suffix("++", "postinc");
+-    prefix("++", "preinc");
+-    syntax["++"].exps = true;
+-
+-    suffix("--", "postdec");
+-    prefix("--", "predec");
+-    syntax["--"].exps = true;
+-    prefix("delete", function () {
+-        var p = expression(0);
+-        if (!p || (p.id !== "." && p.id !== "[")) {
+-            warning("Variables should not be deleted.");
+-        }
+-        this.first = p;
+-        return this;
+-    }).exps = true;
+-
+-    prefix("~", function () {
+-        if (option.bitwise) {
+-            warning("Unexpected '{a}'.", this, "~");
+-        }
+-        expression(150);
+-        return this;
+-    });
+-
+-    prefix("!", function () {
+-        this.right = expression(150);
+-        this.arity = "unary";
+-        if (bang[this.right.id] === true) {
+-            warning("Confusing use of '{a}'.", this, "!");
+-        }
+-        return this;
+-    });
+-    prefix("typeof", "typeof");
+-    prefix("new", function () {
+-        var c = expression(155), i;
+-        if (c && c.id !== "function") {
+-            if (c.identifier) {
+-                c["new"] = true;
+-                switch (c.value) {
+-                case "Number":
+-                case "String":
+-                case "Boolean":
+-                case "Math":
+-                case "JSON":
+-                    warning("Do not use {a} as a constructor.", prevtoken, c.value);
+-                    break;
+-                case "Function":
+-                    if (!option.evil) {
+-                        warning("The Function constructor is eval.");
+-                    }
+-                    break;
+-                case "Date":
+-                case "RegExp":
+-                    break;
+-                default:
+-                    if (c.id !== "function") {
+-                        i = c.value.substr(0, 1);
+-                        if (option.newcap && (i < "A" || i > "Z") && !is_own(global, c.value)) {
+-                            warning("A constructor name should start with an uppercase letter.",
+-                                token);
+-                        }
+-                    }
+-                }
+-            } else {
+-                if (c.id !== "." && c.id !== "[" && c.id !== "(") {
+-                    warning("Bad constructor.", token);
+-                }
+-            }
+-        } else {
+-            if (!option.supernew)
+-                warning("Weird construction. Delete 'new'.", this);
+-        }
+-        adjacent(token, nexttoken);
+-        if (nexttoken.id !== "(" && !option.supernew) {
+-            warning("Missing '()' invoking a constructor.",
+-                token, token.value);
+-        }
+-        this.first = c;
+-        return this;
+-    });
+-    syntax["new"].exps = true;
+-
+-    prefix("void").exps = true;
+-
+-    infix(".", function (left, that) {
+-        adjacent(prevtoken, token);
+-        nobreak();
+-        var m = identifier();
+-        if (typeof m === "string") {
+-            countMember(m);
+-        }
+-        that.left = left;
+-        that.right = m;
+-        if (left && left.value === "arguments" && (m === "callee" || m === "caller")) {
+-            if (option.noarg)
+-                warning("Avoid arguments.{a}.", left, m);
+-            else if (directive["use strict"])
+-                error("Strict violation.");
+-        } else if (!option.evil && left && left.value === "document" &&
+-                (m === "write" || m === "writeln")) {
+-            warning("document.write can be a form of eval.", left);
+-        }
+-        if (!option.evil && (m === "eval" || m === "execScript")) {
+-            warning("eval is evil.");
+-        }
+-        return that;
+-    }, 160, true);
+-
+-    infix("(", function (left, that) {
+-        if (prevtoken.id !== "}" && prevtoken.id !== ")") {
+-            nobreak(prevtoken, token);
+-        }
+-        nospace();
+-        if (option.immed && !left.immed && left.id === "function") {
+-            warning("Wrap an immediate function invocation in parentheses " +
+-                "to assist the reader in understanding that the expression " +
+-                "is the result of a function, and not the function itself.");
+-        }
+-        var n = 0,
+-            p = [];
+-        if (left) {
+-            if (left.type === "(identifier)") {
+-                if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {
+-                    if ("Number String Boolean Date Object".indexOf(left.value) === -1) {
+-                        if (left.value === "Math") {
+-                            warning("Math is not a function.", left);
+-                        } else if (option.newcap) {
+-                            warning("Missing 'new' prefix when invoking a constructor.", left);
+-                        }
+-                    }
+-                }
+-            }
+-        }
+-        if (nexttoken.id !== ")") {
+-            for (;;) {
+-                p[p.length] = expression(10);
+-                n += 1;
+-                if (nexttoken.id !== ",") {
+-                    break;
+-                }
+-                comma();
+-            }
+-        }
+-        advance(")");
+-        nospace(prevtoken, token);
+-        if (typeof left === "object") {
+-            if (left.value === "parseInt" && n === 1) {
+-                warning("Missing radix parameter.", token);
+-            }
+-            if (!option.evil) {
+-                if (left.value === "eval" || left.value === "Function" ||
+-                        left.value === "execScript") {
+-                    warning("eval is evil.", left);
+-
+-                    if (p[0] && [0].id === "(string)") {
+-                        addInternalSrc(left, p[0].value);
+-                    }
+-                } else if (p[0] && p[0].id === "(string)" &&
+-                       (left.value === "setTimeout" ||
+-                        left.value === "setInterval")) {
+-                    warning(
+-    "Implied eval is evil. Pass a function instead of a string.", left);
+-                    addInternalSrc(left, p[0].value);
+-
+-                // window.setTimeout/setInterval
+-                } else if (p[0] && p[0].id === "(string)" &&
+-                       left.value === "." &&
+-                       left.left.value === "window" &&
+-                       (left.right === "setTimeout" ||
+-                        left.right === "setInterval")) {
+-                    warning(
+-    "Implied eval is evil. Pass a function instead of a string.", left);
+-                    addInternalSrc(left, p[0].value);
+-                }
+-            }
+-            if (!left.identifier && left.id !== "." && left.id !== "[" &&
+-                    left.id !== "(" && left.id !== "&&" && left.id !== "||" &&
+-                    left.id !== "?") {
+-                warning("Bad invocation.", left);
+-            }
+-        }
+-        that.left = left;
+-        return that;
+-    }, 155, true).exps = true;
+-
+-    prefix("(", function () {
+-        nospace();
+-        if (nexttoken.id === "function") {
+-            nexttoken.immed = true;
+-        }
+-        var v = expression(0);
+-        advance(")", this);
+-        nospace(prevtoken, token);
+-        if (option.immed && v.id === "function") {
+-            if (nexttoken.id !== "(" &&
+-              (nexttoken.id !== "." || (peek().value !== "call" && peek().value !== "apply"))) {
+-                warning(
+-"Do not wrap function literals in parens unless they are to be immediately invoked.",
+-                        this);
+-            }
+-        }
+-
+-        return v;
+-    });
+-
+-    infix("[", function (left, that) {
+-        nobreak(prevtoken, token);
+-        nospace();
+-        var e = expression(0), s;
+-        if (e && e.type === "(string)") {
+-            if (!option.evil && (e.value === "eval" || e.value === "execScript")) {
+-                warning("eval is evil.", that);
+-            }
+-            countMember(e.value);
+-            if (!option.sub && ix.test(e.value)) {
+-                s = syntax[e.value];
+-                if (!s || !s.reserved) {
+-                    warning("['{a}'] is better written in dot notation.",
+-                            prevtoken, e.value);
+-                }
+-            }
+-        }
+-        advance("]", that);
+-        nospace(prevtoken, token);
+-        that.left = left;
+-        that.right = e;
+-        return that;
+-    }, 160, true);
+-
+-    prefix("[", function () {
+-        var b = token.line !== nexttoken.line;
+-        this.first = [];
+-        if (b) {
+-            indent += option.indent;
+-            if (nexttoken.from === indent + option.indent) {
+-                indent += option.indent;
+-            }
+-        }
+-        while (nexttoken.id !== "(end)") {
+-            while (nexttoken.id === ",") {
+-                if (!option.es5)
+-                    warning("Extra comma.");
+-                advance(",");
+-            }
+-            if (nexttoken.id === "]") {
+-                break;
+-            }
+-            if (b && token.line !== nexttoken.line) {
+-                indentation();
+-            }
+-            this.first.push(expression(10));
+-            if (nexttoken.id === ",") {
+-                comma();
+-                if (nexttoken.id === "]" && !option.es5) {
+-                    warning("Extra comma.", token);
+-                    break;
+-                }
+-            } else {
+-                break;
+-            }
+-        }
+-        if (b) {
+-            indent -= option.indent;
+-            indentation();
+-        }
+-        advance("]", this);
+-        return this;
+-    }, 160);
+-
+-
+-    function property_name() {
+-        var id = optionalidentifier(true);
+-        if (!id) {
+-            if (nexttoken.id === "(string)") {
+-                id = nexttoken.value;
+-                advance();
+-            } else if (nexttoken.id === "(number)") {
+-                id = nexttoken.value.toString();
+-                advance();
+-            }
+-        }
+-        return id;
+-    }
+-
+-
+-    function functionparams() {
+-        var next   = nexttoken;
+-        var params = [];
+-        var ident;
+-
+-        advance("(");
+-        nospace();
+-
+-        if (nexttoken.id === ")") {
+-            advance(")");
+-            return;
+-        }
+-
+-        for (;;) {
+-            ident = identifier(true);
+-            params.push(ident);
+-            addlabel(ident, "unused", token);
+-            if (nexttoken.id === ",") {
+-                comma();
+-            } else {
+-                advance(")", next);
+-                nospace(prevtoken, token);
+-                return params;
+-            }
+-        }
+-    }
+-
+-
+-    function doFunction(name, statement) {
+-        var f;
+-        var oldOption = option;
+-        var oldScope  = scope;
+-
+-        option = Object.create(option);
+-        scope  = Object.create(scope);
+-
+-        funct = {
+-            "(name)"     : name || "\"" + anonname + "\"",
+-            "(line)"     : nexttoken.line,
+-            "(character)": nexttoken.character,
+-            "(context)"  : funct,
+-            "(breakage)" : 0,
+-            "(loopage)"  : 0,
+-            "(metrics)"  : createMetrics(nexttoken),
+-            "(scope)"    : scope,
+-            "(statement)": statement,
+-            "(tokens)"   : {}
+-        };
+-
+-        f = funct;
+-        token.funct = funct;
+-
+-        functions.push(funct);
+-
+-        if (name) {
+-            addlabel(name, "function");
+-        }
+-
+-        funct["(params)"] = functionparams();
+-        funct["(metrics)"].verifyMaxParametersPerFunction(funct["(params)"]);
+-
+-        block(false, false, true);
+-
+-        funct["(metrics)"].verifyMaxStatementsPerFunction();
+-        funct["(metrics)"].verifyMaxComplexityPerFunction();
+-
+-        scope = oldScope;
+-        option = oldOption;
+-        funct["(last)"] = token.line;
+-        funct["(lastcharacter)"] = token.character;
+-        funct = funct["(context)"];
+-
+-        return f;
+-    }
+-
+-    function createMetrics(functionStartToken) {
+-        return {
+-            statementCount: 0,
+-            nestedBlockDepth: -1,
+-            ComplexityCount: 1,
+-            verifyMaxStatementsPerFunction: function () {
+-                if (option.maxstatements &&
+-                    this.statementCount > option.maxstatements) {
+-                    var message = "Too many statements per function (" + this.statementCount + ").";
+-                    warning(message, functionStartToken);
+-                }
+-            },
+-
+-            verifyMaxParametersPerFunction: function (params) {
+-                params = params || [];
+-
+-                if (option.maxparams && params.length > option.maxparams) {
+-                    var message = "Too many parameters per function (" + params.length + ").";
+-                    warning(message, functionStartToken);
+-                }
+-            },
+-
+-            verifyMaxNestedBlockDepthPerFunction: function () {
+-                if (option.maxdepth &&
+-                    this.nestedBlockDepth > 0 &&
+-                    this.nestedBlockDepth === option.maxdepth + 1) {
+-                    var message = "Blocks are nested too deeply (" + this.nestedBlockDepth + ").";
+-                    warning(message);
+-                }
+-            },
+-
+-            verifyMaxComplexityPerFunction: function () {
+-                var max = option.maxcomplexity;
+-                var cc = this.ComplexityCount;
+-                if (max && cc > max) {
+-                    var message = "Cyclomatic complexity is too high per function (" + cc + ").";
+-                    warning(message, functionStartToken);
+-                }
+-            }
+-        };
+-    }
+-
+-    function increaseComplexityCount() {
+-        funct["(metrics)"].ComplexityCount += 1;
+-    }
+-
+-
+-    (function (x) {
+-        x.nud = function () {
+-            var b, f, i, p, t;
+-            var props = {}; // All properties, including accessors
+-
+-            function saveProperty(name, token) {
+-                if (props[name] && is_own(props, name))
+-                    warning("Duplicate member '{a}'.", nexttoken, i);
+-                else
+-                    props[name] = {};
+-
+-                props[name].basic = true;
+-                props[name].basicToken = token;
+-            }
+-
+-            function saveSetter(name, token) {
+-                if (props[name] && is_own(props, name)) {
+-                    if (props[name].basic || props[name].setter)
+-                        warning("Duplicate member '{a}'.", nexttoken, i);
+-                } else {
+-                    props[name] = {};
+-                }
+-
+-                props[name].setter = true;
+-                props[name].setterToken = token;
+-            }
+-
+-            function saveGetter(name) {
+-                if (props[name] && is_own(props, name)) {
+-                    if (props[name].basic || props[name].getter)
+-                        warning("Duplicate member '{a}'.", nexttoken, i);
+-                } else {
+-                    props[name] = {};
+-                }
+-
+-                props[name].getter = true;
+-                props[name].getterToken = token;
+-            }
+-
+-            b = token.line !== nexttoken.line;
+-            if (b) {
+-                indent += option.indent;
+-                if (nexttoken.from === indent + option.indent) {
+-                    indent += option.indent;
+-                }
+-            }
+-            for (;;) {
+-                if (nexttoken.id === "}") {
+-                    break;
+-                }
+-                if (b) {
+-                    indentation();
+-                }
+-                if (nexttoken.value === "get" && peek().id !== ":") {
+-                    advance("get");
+-                    if (!option.es5) {
+-                        error("get/set are ES5 features.");
+-                    }
+-                    i = property_name();
+-                    if (!i) {
+-                        error("Missing property name.");
+-                    }
+-                    saveGetter(i);
+-                    t = nexttoken;
+-                    adjacent(token, nexttoken);
+-                    f = doFunction();
+-                    p = f["(params)"];
+-                    if (p) {
+-                        warning("Unexpected parameter '{a}' in get {b} function.", t, p[0], i);
+-                    }
+-                    adjacent(token, nexttoken);
+-                } else if (nexttoken.value === "set" && peek().id !== ":") {
+-                    advance("set");
+-                    if (!option.es5) {
+-                        error("get/set are ES5 features.");
+-                    }
+-                    i = property_name();
+-                    if (!i) {
+-                        error("Missing property name.");
+-                    }
+-                    saveSetter(i, nexttoken);
+-                    t = nexttoken;
+-                    adjacent(token, nexttoken);
+-                    f = doFunction();
+-                    p = f["(params)"];
+-                    if (!p || p.length !== 1) {
+-                        warning("Expected a single parameter in set {a} function.", t, i);
+-                    }
+-                } else {
+-                    i = property_name();
+-                    saveProperty(i, nexttoken);
+-                    if (typeof i !== "string") {
+-                        break;
+-                    }
+-                    advance(":");
+-                    nonadjacent(token, nexttoken);
+-                    expression(10);
+-                }
+-
+-                countMember(i);
+-                if (nexttoken.id === ",") {
+-                    comma();
+-                    if (nexttoken.id === ",") {
+-                        warning("Extra comma.", token);
+-                    } else if (nexttoken.id === "}" && !option.es5) {
+-                        warning("Extra comma.", token);
+-                    }
+-                } else {
+-                    break;
+-                }
+-            }
+-            if (b) {
+-                indent -= option.indent;
+-                indentation();
+-            }
+-            advance("}", this);
+-
+-            // Check for lonely setters if in the ES5 mode.
+-            if (option.es5) {
+-                for (var name in props) {
+-                    if (is_own(props, name) && props[name].setter && !props[name].getter) {
+-                        warning("Setter is defined without getter.", props[name].setterToken);
+-                    }
+-                }
+-            }
+-            return this;
+-        };
+-        x.fud = function () {
+-            error("Expected to see a statement and instead saw a block.", token);
+-        };
+-    }(delim("{")));
+-
+-// This Function is called when esnext option is set to true
+-// it adds the `const` statement to JSHINT
+-
+-    useESNextSyntax = function () {
+-        var conststatement = stmt("const", function (prefix) {
+-            var id, name, value;
+-
+-            this.first = [];
+-            for (;;) {
+-                nonadjacent(token, nexttoken);
+-                id = identifier();
+-                if (funct[id] === "const") {
+-                    warning("const '" + id + "' has already been declared");
+-                }
+-                if (funct["(global)"] && predefined[id] === false) {
+-                    warning("Redefinition of '{a}'.", token, id);
+-                }
+-                addlabel(id, "const");
+-                if (prefix) {
+-                    break;
+-                }
+-                name = token;
+-                this.first.push(token);
+-
+-                if (nexttoken.id !== "=") {
+-                    warning("const " +
+-                      "'{a}' is initialized to 'undefined'.", token, id);
+-                }
+-
+-                if (nexttoken.id === "=") {
+-                    nonadjacent(token, nexttoken);
+-                    advance("=");
+-                    nonadjacent(token, nexttoken);
+-                    if (nexttoken.id === "undefined") {
+-                        warning("It is not necessary to initialize " +
+-                          "'{a}' to 'undefined'.", token, id);
+-                    }
+-                    if (peek(0).id === "=" && nexttoken.identifier) {
+-                        error("Constant {a} was not declared correctly.",
+-                                nexttoken, nexttoken.value);
+-                    }
+-                    value = expression(0);
+-                    name.first = value;
+-                }
+-
+-                if (nexttoken.id !== ",") {
+-                    break;
+-                }
+-                comma();
+-            }
+-            return this;
+-        });
+-        conststatement.exps = true;
+-    };
+-
+-    var varstatement = stmt("var", function (prefix) {
+-        // JavaScript does not have block scope. It only has function scope. So,
+-        // declaring a variable in a block can have unexpected consequences.
+-        var id, name, value;
+-
+-        if (funct["(onevar)"] && option.onevar) {
+-            warning("Too many var statements.");
+-        } else if (!funct["(global)"]) {
+-            funct["(onevar)"] = true;
+-        }
+-
+-        this.first = [];
+-
+-        for (;;) {
+-            nonadjacent(token, nexttoken);
+-            id = identifier();
+-
+-            if (option.esnext && funct[id] === "const") {
+-                warning("const '" + id + "' has already been declared");
+-            }
+-
+-            if (funct["(global)"] && predefined[id] === false) {
+-                warning("Redefinition of '{a}'.", token, id);
+-            }
+-
+-            addlabel(id, "unused", token);
+-
+-            if (prefix) {
+-                break;
+-            }
+-
+-            name = token;
+-            this.first.push(token);
+-
+-            if (nexttoken.id === "=") {
+-                nonadjacent(token, nexttoken);
+-                advance("=");
+-                nonadjacent(token, nexttoken);
+-                if (nexttoken.id === "undefined") {
+-                    warning("It is not necessary to initialize '{a}' to 'undefined'.", token, id);
+-                }
+-                if (peek(0).id === "=" && nexttoken.identifier) {
+-                    error("Variable {a} was not declared correctly.",
+-                            nexttoken, nexttoken.value);
+-                }
+-                value = expression(0);
+-                name.first = value;
+-            }
+-            if (nexttoken.id !== ",") {
+-                break;
+-            }
+-            comma();
+-        }
+-        return this;
+-    });
+-    varstatement.exps = true;
+-
+-    blockstmt("function", function () {
+-        if (inblock) {
+-            warning("Function declarations should not be placed in blocks. " +
+-                "Use a function expression or move the statement to the top of " +
+-                "the outer function.", token);
+-
+-        }
+-        var i = identifier();
+-        if (option.esnext && funct[i] === "const") {
+-            warning("const '" + i + "' has already been declared");
+-        }
+-        adjacent(token, nexttoken);
+-        addlabel(i, "unction", token);
+-
+-        doFunction(i, { statement: true });
+-        if (nexttoken.id === "(" && nexttoken.line === token.line) {
+-            error(
+-"Function declarations are not invocable. Wrap the whole function invocation in parens.");
+-        }
+-        return this;
+-    });
+-
+-    prefix("function", function () {
+-        var i = optionalidentifier();
+-        if (i) {
+-            adjacent(token, nexttoken);
+-        } else {
+-            nonadjacent(token, nexttoken);
+-        }
+-        doFunction(i);
+-        if (!option.loopfunc && funct["(loopage)"]) {
+-            warning("Don't make functions within a loop.");
+-        }
+-        return this;
+-    });
+-
+-    blockstmt("if", function () {
+-        var t = nexttoken;
+-        increaseComplexityCount();
+-        advance("(");
+-        nonadjacent(this, t);
+-        nospace();
+-        expression(20);
+-        if (nexttoken.id === "=") {
+-            if (!option.boss)
+-                warning("Expected a conditional expression and instead saw an assignment.");
+-            advance("=");
+-            expression(20);
+-        }
+-        advance(")", t);
+-        nospace(prevtoken, token);
+-        block(true, true);
+-        if (nexttoken.id === "else") {
+-            nonadjacent(token, nexttoken);
+-            advance("else");
+-            if (nexttoken.id === "if" || nexttoken.id === "switch") {
+-                statement(true);
+-            } else {
+-                block(true, true);
+-            }
+-        }
+-        return this;
+-    });
+-
+-    blockstmt("try", function () {
+-        var b;
+-
+-        function doCatch() {
+-            var oldScope = scope;
+-            var e;
+-
+-            advance("catch");
+-            nonadjacent(token, nexttoken);
+-            advance("(");
+-
+-            scope = Object.create(oldScope);
+-
+-            e = nexttoken.value;
+-            if (nexttoken.type !== "(identifier)") {
+-                e = null;
+-                warning("Expected an identifier and instead saw '{a}'.", nexttoken, e);
+-            }
+-
+-            advance();
+-            advance(")");
+-
+-            funct = {
+-                "(name)"     : "(catch)",
+-                "(line)"     : nexttoken.line,
+-                "(character)": nexttoken.character,
+-                "(context)"  : funct,
+-                "(breakage)" : funct["(breakage)"],
+-                "(loopage)"  : funct["(loopage)"],
+-                "(scope)"    : scope,
+-                "(statement)": false,
+-                "(metrics)"  : createMetrics(nexttoken),
+-                "(catch)"    : true,
+-                "(tokens)"   : {}
+-            };
+-
+-            if (e) {
+-                addlabel(e, "exception");
+-            }
+-
+-            token.funct = funct;
+-            functions.push(funct);
+-
+-            block(false);
+-
+-            scope = oldScope;
+-
+-            funct["(last)"] = token.line;
+-            funct["(lastcharacter)"] = token.character;
+-            funct = funct["(context)"];
+-        }
+-
+-        block(false);
+-
+-        if (nexttoken.id === "catch") {
+-            increaseComplexityCount();
+-            doCatch();
+-            b = true;
+-        }
+-
+-        if (nexttoken.id === "finally") {
+-            advance("finally");
+-            block(false);
+-            return;
+-        } else if (!b) {
+-            error("Expected '{a}' and instead saw '{b}'.",
+-                    nexttoken, "catch", nexttoken.value);
+-        }
+-
+-        return this;
+-    });
+-
+-    blockstmt("while", function () {
+-        var t = nexttoken;
+-        funct["(breakage)"] += 1;
+-        funct["(loopage)"] += 1;
+-        increaseComplexityCount();
+-        advance("(");
+-        nonadjacent(this, t);
+-        nospace();
+-        expression(20);
+-        if (nexttoken.id === "=") {
+-            if (!option.boss)
+-                warning("Expected a conditional expression and instead saw an assignment.");
+-            advance("=");
+-            expression(20);
+-        }
+-        advance(")", t);
+-        nospace(prevtoken, token);
+-        block(true, true);
+-        funct["(breakage)"] -= 1;
+-        funct["(loopage)"] -= 1;
+-        return this;
+-    }).labelled = true;
+-
+-    blockstmt("with", function () {
+-        var t = nexttoken;
+-        if (directive["use strict"]) {
+-            error("'with' is not allowed in strict mode.", token);
+-        } else if (!option.withstmt) {
+-            warning("Don't use 'with'.", token);
+-        }
+-
+-        advance("(");
+-        nonadjacent(this, t);
+-        nospace();
+-        expression(0);
+-        advance(")", t);
+-        nospace(prevtoken, token);
+-        block(true, true);
+-
+-        return this;
+-    });
+-
+-    blockstmt("switch", function () {
+-        var t = nexttoken,
+-            g = false;
+-        funct["(breakage)"] += 1;
+-        advance("(");
+-        nonadjacent(this, t);
+-        nospace();
+-        this.condition = expression(20);
+-        advance(")", t);
+-        nospace(prevtoken, token);
+-        nonadjacent(token, nexttoken);
+-        t = nexttoken;
+-        advance("{");
+-        nonadjacent(token, nexttoken);
+-        indent += option.indent;
+-        this.cases = [];
+-        for (;;) {
+-            switch (nexttoken.id) {
+-            case "case":
+-                switch (funct["(verb)"]) {
+-                case "break":
+-                case "case":
+-                case "continue":
+-                case "return":
+-                case "switch":
+-                case "throw":
+-                    break;
+-                default:
+-                    // You can tell JSHint that you don't use break intentionally by
+-                    // adding a comment /* falls through */ on a line just before
+-                    // the next `case`.
+-                    if (!ft.test(lines[nexttoken.line - 2])) {
+-                        warning(
+-                            "Expected a 'break' statement before 'case'.",
+-                            token);
+-                    }
+-                }
+-                indentation(-option.indent);
+-                advance("case");
+-                this.cases.push(expression(20));
+-                increaseComplexityCount();
+-                g = true;
+-                advance(":");
+-                funct["(verb)"] = "case";
+-                break;
+-            case "default":
+-                switch (funct["(verb)"]) {
+-                case "break":
+-                case "continue":
+-                case "return":
+-                case "throw":
+-                    break;
+-                default:
+-                    if (!ft.test(lines[nexttoken.line - 2])) {
+-                        warning(
+-                            "Expected a 'break' statement before 'default'.",
+-                            token);
+-                    }
+-                }
+-                indentation(-option.indent);
+-                advance("default");
+-                g = true;
+-                advance(":");
+-                break;
+-            case "}":
+-                indent -= option.indent;
+-                indentation();
+-                advance("}", t);
+-                if (this.cases.length === 1 || this.condition.id === "true" ||
+-                        this.condition.id === "false") {
+-                    if (!option.onecase)
+-                        warning("This 'switch' should be an 'if'.", this);
+-                }
+-                funct["(breakage)"] -= 1;
+-                funct["(verb)"] = undefined;
+-                return;
+-            case "(end)":
+-                error("Missing '{a}'.", nexttoken, "}");
+-                return;
+-            default:
+-                if (g) {
+-                    switch (token.id) {
+-                    case ",":
+-                        error("Each value should have its own case label.");
+-                        return;
+-                    case ":":
+-                        g = false;
+-                        statements();
+-                        break;
+-                    default:
+-                        error("Missing ':' on a case clause.", token);
+-                        return;
+-                    }
+-                } else {
+-                    if (token.id === ":") {
+-                        advance(":");
+-                        error("Unexpected '{a}'.", token, ":");
+-                        statements();
+-                    } else {
+-                        error("Expected '{a}' and instead saw '{b}'.",
+-                            nexttoken, "case", nexttoken.value);
+-                        return;
+-                    }
+-                }
+-            }
+-        }
+-    }).labelled = true;
+-
+-    stmt("debugger", function () {
+-        if (!option.debug) {
+-            warning("All 'debugger' statements should be removed.");
+-        }
+-        return this;
+-    }).exps = true;
+-
+-    (function () {
+-        var x = stmt("do", function () {
+-            funct["(breakage)"] += 1;
+-            funct["(loopage)"] += 1;
+-            increaseComplexityCount();
+-
+-            this.first = block(true);
+-            advance("while");
+-            var t = nexttoken;
+-            nonadjacent(token, t);
+-            advance("(");
+-            nospace();
+-            expression(20);
+-            if (nexttoken.id === "=") {
+-                if (!option.boss)
+-                    warning("Expected a conditional expression and instead saw an assignment.");
+-                advance("=");
+-                expression(20);
+-            }
+-            advance(")", t);
+-            nospace(prevtoken, token);
+-            funct["(breakage)"] -= 1;
+-            funct["(loopage)"] -= 1;
+-            return this;
+-        });
+-        x.labelled = true;
+-        x.exps = true;
+-    }());
+-
+-    blockstmt("for", function () {
+-        var s, t = nexttoken;
+-        funct["(breakage)"] += 1;
+-        funct["(loopage)"] += 1;
+-        increaseComplexityCount();
+-        advance("(");
+-        nonadjacent(this, t);
+-        nospace();
+-        if (peek(nexttoken.id === "var" ? 1 : 0).id === "in") {
+-            if (nexttoken.id === "var") {
+-                advance("var");
+-                varstatement.fud.call(varstatement, true);
+-            } else {
+-                switch (funct[nexttoken.value]) {
+-                case "unused":
+-                    funct[nexttoken.value] = "var";
+-                    break;
+-                case "var":
+-                    break;
+-                default:
+-                    warning("Bad for in variable '{a}'.",
+-                            nexttoken, nexttoken.value);
+-                }
+-                advance();
+-            }
+-            advance("in");
+-            expression(20);
+-            advance(")", t);
+-            s = block(true, true);
+-            if (option.forin && s && (s.length > 1 || typeof s[0] !== "object" ||
+-                    s[0].value !== "if")) {
+-                warning("The body of a for in should be wrapped in an if statement to filter " +
+-                        "unwanted properties from the prototype.", this);
+-            }
+-            funct["(breakage)"] -= 1;
+-            funct["(loopage)"] -= 1;
+-            return this;
+-        } else {
+-            if (nexttoken.id !== ";") {
+-                if (nexttoken.id === "var") {
+-                    advance("var");
+-                    varstatement.fud.call(varstatement);
+-                } else {
+-                    for (;;) {
+-                        expression(0, "for");
+-                        if (nexttoken.id !== ",") {
+-                            break;
+-                        }
+-                        comma();
+-                    }
+-                }
+-            }
+-            nolinebreak(token);
+-            advance(";");
+-            if (nexttoken.id !== ";") {
+-                expression(20);
+-                if (nexttoken.id === "=") {
+-                    if (!option.boss)
+-                        warning("Expected a conditional expression and instead saw an assignment.");
+-                    advance("=");
+-                    expression(20);
+-                }
+-            }
+-            nolinebreak(token);
+-            advance(";");
+-            if (nexttoken.id === ";") {
+-                error("Expected '{a}' and instead saw '{b}'.",
+-                        nexttoken, ")", ";");
+-            }
+-            if (nexttoken.id !== ")") {
+-                for (;;) {
+-                    expression(0, "for");
+-                    if (nexttoken.id !== ",") {
+-                        break;
+-                    }
+-                    comma();
+-                }
+-            }
+-            advance(")", t);
+-            nospace(prevtoken, token);
+-            block(true, true);
+-            funct["(breakage)"] -= 1;
+-            funct["(loopage)"] -= 1;
+-            return this;
+-        }
+-    }).labelled = true;
+-
+-
+-    stmt("break", function () {
+-        var v = nexttoken.value;
+-
+-        if (funct["(breakage)"] === 0)
+-            warning("Unexpected '{a}'.", nexttoken, this.value);
+-
+-        if (!option.asi)
+-            nolinebreak(this);
+-
+-        if (nexttoken.id !== ";") {
+-            if (token.line === nexttoken.line) {
+-                if (funct[v] !== "label") {
+-                    warning("'{a}' is not a statement label.", nexttoken, v);
+-                } else if (scope[v] !== funct) {
+-                    warning("'{a}' is out of scope.", nexttoken, v);
+-                }
+-                this.first = nexttoken;
+-                advance();
+-            }
+-        }
+-        reachable("break");
+-        return this;
+-    }).exps = true;
+-
+-
+-    stmt("continue", function () {
+-        var v = nexttoken.value;
+-
+-        if (funct["(breakage)"] === 0)
+-            warning("Unexpected '{a}'.", nexttoken, this.value);
+-
+-        if (!option.asi)
+-            nolinebreak(this);
+-
+-        if (nexttoken.id !== ";") {
+-            if (token.line === nexttoken.line) {
+-                if (funct[v] !== "label") {
+-                    warning("'{a}' is not a statement label.", nexttoken, v);
+-                } else if (scope[v] !== funct) {
+-                    warning("'{a}' is out of scope.", nexttoken, v);
+-                }
+-                this.first = nexttoken;
+-                advance();
+-            }
+-        } else if (!funct["(loopage)"]) {
+-            warning("Unexpected '{a}'.", nexttoken, this.value);
+-        }
+-        reachable("continue");
+-        return this;
+-    }).exps = true;
+-
+-
+-    stmt("return", function () {
+-        if (this.line === nexttoken.line) {
+-            if (nexttoken.id === "(regexp)")
+-                warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator.");
+-
+-            if (nexttoken.id !== ";" && !nexttoken.reach) {
+-                nonadjacent(token, nexttoken);
+-                if (peek().value === "=" && !option.boss) {
+-                    warningAt("Did you mean to return a conditional instead of an assignment?",
+-                              token.line, token.character + 1);
+-                }
+-                this.first = expression(0);
+-            }
+-        } else if (!option.asi) {
+-            nolinebreak(this); // always warn (Line breaking error)
+-        }
+-        reachable("return");
+-        return this;
+-    }).exps = true;
+-
+-
+-    stmt("throw", function () {
+-        nolinebreak(this);
+-        nonadjacent(token, nexttoken);
+-        this.first = expression(20);
+-        reachable("throw");
+-        return this;
+-    }).exps = true;
+-
+-//  Superfluous reserved words
+-
+-    reserve("class");
+-    reserve("const");
+-    reserve("enum");
+-    reserve("export");
+-    reserve("extends");
+-    reserve("import");
+-    reserve("super");
+-
+-    reserve("let");
+-    reserve("yield");
+-    reserve("implements");
+-    reserve("interface");
+-    reserve("package");
+-    reserve("private");
+-    reserve("protected");
+-    reserve("public");
+-    reserve("static");
+-
+-
+-// Parse JSON
+-
+-    function jsonValue() {
+-
+-        function jsonObject() {
+-            var o = {}, t = nexttoken;
+-            advance("{");
+-            if (nexttoken.id !== "}") {
+-                for (;;) {
+-                    if (nexttoken.id === "(end)") {
+-                        error("Missing '}' to match '{' from line {a}.",
+-                                nexttoken, t.line);
+-                    } else if (nexttoken.id === "}") {
+-                        warning("Unexpected comma.", token);
+-                        break;
+-                    } else if (nexttoken.id === ",") {
+-                        error("Unexpected comma.", nexttoken);
+-                    } else if (nexttoken.id !== "(string)") {
+-                        warning("Expected a string and instead saw {a}.",
+-                                nexttoken, nexttoken.value);
+-                    }
+-                    if (o[nexttoken.value] === true) {
+-                        warning("Duplicate key '{a}'.",
+-                                nexttoken, nexttoken.value);
+-                    } else if ((nexttoken.value === "__proto__" &&
+-                        !option.proto) || (nexttoken.value === "__iterator__" &&
+-                        !option.iterator)) {
+-                        warning("The '{a}' key may produce unexpected results.",
+-                            nexttoken, nexttoken.value);
+-                    } else {
+-                        o[nexttoken.value] = true;
+-                    }
+-                    advance();
+-                    advance(":");
+-                    jsonValue();
+-                    if (nexttoken.id !== ",") {
+-                        break;
+-                    }
+-                    advance(",");
+-                }
+-            }
+-            advance("}");
+-        }
+-
+-        function jsonArray() {
+-            var t = nexttoken;
+-            advance("[");
+-            if (nexttoken.id !== "]") {
+-                for (;;) {
+-                    if (nexttoken.id === "(end)") {
+-                        error("Missing ']' to match '[' from line {a}.",
+-                                nexttoken, t.line);
+-                    } else if (nexttoken.id === "]") {
+-                        warning("Unexpected comma.", token);
+-                        break;
+-                    } else if (nexttoken.id === ",") {
+-                        error("Unexpected comma.", nexttoken);
+-                    }
+-                    jsonValue();
+-                    if (nexttoken.id !== ",") {
+-                        break;
+-                    }
+-                    advance(",");
+-                }
+-            }
+-            advance("]");
+-        }
+-
+-        switch (nexttoken.id) {
+-        case "{":
+-            jsonObject();
+-            break;
+-        case "[":
+-            jsonArray();
+-            break;
+-        case "true":
+-        case "false":
+-        case "null":
+-        case "(number)":
+-        case "(string)":
+-            advance();
+-            break;
+-        case "-":
+-            advance("-");
+-            if (token.character !== nexttoken.from) {
+-                warning("Unexpected space after '-'.", token);
+-            }
+-            adjacent(token, nexttoken);
+-            advance("(number)");
+-            break;
+-        default:
+-            error("Expected a JSON value.", nexttoken);
+-        }
+-    }
+-
+-
+-    // The actual JSHINT function itself.
+-    var itself = function (s, o, g) {
+-        var a, i, k, x;
+-        var optionKeys;
+-        var newOptionObj = {};
+-
+-        if (o && o.scope) {
+-            JSHINT.scope = o.scope;
+-        } else {
+-            JSHINT.errors = [];
+-            JSHINT.undefs = [];
+-            JSHINT.internals = [];
+-            JSHINT.blacklist = {};
+-            JSHINT.scope = "(main)";
+-        }
+-
+-        predefined = Object.create(standard);
+-        declared = Object.create(null);
+-        combine(predefined, g || {});
+-
+-        if (o) {
+-            a = o.predef;
+-            if (a) {
+-                if (!Array.isArray(a) && typeof a === "object") {
+-                    a = Object.keys(a);
+-                }
+-                a.forEach(function (item) {
+-                    var slice;
+-                    if (item[0] === "-") {
+-                        slice = item.slice(1);
+-                        JSHINT.blacklist[slice] = slice;
+-                    } else {
+-                        predefined[item] = true;
+-                    }
+-                });
+-            }
+-
+-            optionKeys = Object.keys(o);
+-            for (x = 0; x < optionKeys.length; x++) {
+-                newOptionObj[optionKeys[x]] = o[optionKeys[x]];
+-
+-                if (optionKeys[x] === "newcap" && o[optionKeys[x]] === false)
+-                    newOptionObj["(explicitNewcap)"] = true;
+-
+-                if (optionKeys[x] === "indent")
+-                    newOptionObj.white = true;
+-            }
+-        }
+-
+-        option = newOptionObj;
+-
+-        option.indent = option.indent || 4;
+-        option.maxerr = option.maxerr || 50;
+-
+-        tab = "";
+-        for (i = 0; i < option.indent; i += 1) {
+-            tab += " ";
+-        }
+-        indent = 1;
+-        global = Object.create(predefined);
+-        scope = global;
+-        funct = {
+-            "(global)":   true,
+-            "(name)":     "(global)",
+-            "(scope)":    scope,
+-            "(breakage)": 0,
+-            "(loopage)":  0,
+-            "(tokens)":   {},
+-            "(metrics)":   createMetrics(nexttoken)
+-        };
+-        functions = [funct];
+-        urls = [];
+-        stack = null;
+-        member = {};
+-        membersOnly = null;
+-        implied = {};
+-        inblock = false;
+-        lookahead = [];
+-        jsonmode = false;
+-        warnings = 0;
+-        lines = [];
+-        unuseds = [];
+-
+-        if (!isString(s) && !Array.isArray(s)) {
+-            errorAt("Input is neither a string nor an array of strings.", 0);
+-            return false;
+-        }
+-
+-        if (isString(s) && /^\s*$/g.test(s)) {
+-            errorAt("Input is an empty string.", 0);
+-            return false;
+-        }
+-
+-        if (s.length === 0) {
+-            errorAt("Input is an empty array.", 0);
+-            return false;
+-        }
+-
+-        lex.init(s);
+-
+-        prereg = true;
+-        directive = {};
+-
+-        prevtoken = token = nexttoken = syntax["(begin)"];
+-
+-        // Check options
+-        for (var name in o) {
+-            if (is_own(o, name)) {
+-                checkOption(name, token);
+-            }
+-        }
+-
+-        assume();
+-
+-        // combine the passed globals after we've assumed all our options
+-        combine(predefined, g || {});
+-
+-        //reset values
+-        comma.first = true;
+-        quotmark = undefined;
+-
+-        try {
+-            advance();
+-            switch (nexttoken.id) {
+-            case "{":
+-            case "[":
+-                option.laxbreak = true;
+-                jsonmode = true;
+-                jsonValue();
+-                break;
+-            default:
+-                directives();
+-                if (directive["use strict"] && !option.globalstrict) {
+-                    warning("Use the function form of \"use strict\".", prevtoken);
+-                }
+-
+-                statements();
+-            }
+-            advance((nexttoken && nexttoken.value !== ".")  ? "(end)" : undefined);
+-
+-            var markDefined = function (name, context) {
+-                do {
+-                    if (typeof context[name] === "string") {
+-                        // JSHINT marks unused variables as 'unused' and
+-                        // unused function declaration as 'unction'. This
+-                        // code changes such instances back 'var' and
+-                        // 'closure' so that the code in JSHINT.data()
+-                        // doesn't think they're unused.
+-
+-                        if (context[name] === "unused")
+-                            context[name] = "var";
+-                        else if (context[name] === "unction")
+-                            context[name] = "closure";
+-
+-                        return true;
+-                    }
+-
+-                    context = context["(context)"];
+-                } while (context);
+-
+-                return false;
+-            };
+-
+-            var clearImplied = function (name, line) {
+-                if (!implied[name])
+-                    return;
+-
+-                var newImplied = [];
+-                for (var i = 0; i < implied[name].length; i += 1) {
+-                    if (implied[name][i] !== line)
+-                        newImplied.push(implied[name][i]);
+-                }
+-
+-                if (newImplied.length === 0)
+-                    delete implied[name];
+-                else
+-                    implied[name] = newImplied;
+-            };
+-
+-            var warnUnused = function (name, token) {
+-                var line = token.line;
+-                var chr  = token.character;
+-
+-                if (option.unused)
+-                    warningAt("'{a}' is defined but never used.", line, chr, name);
+-
+-                unuseds.push({
+-                    name: name,
+-                    line: line,
+-                    character: chr
+-                });
+-            };
+-
+-            var checkUnused = function (func, key) {
+-                var type = func[key];
+-                var token = func["(tokens)"][key];
+-
+-                if (key.charAt(0) === "(")
+-                    return;
+-
+-                if (type !== "unused" && type !== "unction")
+-                    return;
+-
+-                // Params are checked separately from other variables.
+-                if (func["(params)"] && func["(params)"].indexOf(key) !== -1)
+-                    return;
+-
+-                warnUnused(key, token);
+-            };
+-
+-            // Check queued 'x is not defined' instances to see if they're still undefined.
+-            for (i = 0; i < JSHINT.undefs.length; i += 1) {
+-                k = JSHINT.undefs[i].slice(0);
+-
+-                if (markDefined(k[2].value, k[0])) {
+-                    clearImplied(k[2].value, k[2].line);
+-                } else {
+-                    warning.apply(warning, k.slice(1));
+-                }
+-            }
+-
+-            functions.forEach(function (func) {
+-                for (var key in func) {
+-                    if (is_own(func, key)) {
+-                        checkUnused(func, key);
+-                    }
+-                }
+-
+-                if (!func["(params)"])
+-                    return;
+-
+-                var params = func["(params)"].slice();
+-                var param  = params.pop();
+-                var type;
+-
+-                while (param) {
+-                    type = func[param];
+-
+-                    // 'undefined' is a special case for (function (window, undefined) { ... })();
+-                    // patterns.
+-
+-                    if (param === "undefined")
+-                        return;
+-
+-                    if (type !== "unused" && type !== "unction")
+-                        return;
+-
+-                    warnUnused(param, func["(tokens)"][param]);
+-                    param = params.pop();
+-                }
+-            });
+-
+-            for (var key in declared) {
+-                if (is_own(declared, key) && !is_own(global, key)) {
+-                    warnUnused(key, declared[key]);
+-                }
+-            }
+-        } catch (e) {
+-            if (e) {
+-                var nt = nexttoken || {};
+-                JSHINT.errors.push({
+-                    raw       : e.raw,
+-                    reason    : e.message,
+-                    line      : e.line || nt.line,
+-                    character : e.character || nt.from
+-                }, null);
+-            }
+-        }
+-
+-        // Loop over the listed "internals", and check them as well.
+-
+-        if (JSHINT.scope === "(main)") {
+-            o = o || {};
+-
+-            for (i = 0; i < JSHINT.internals.length; i += 1) {
+-                k = JSHINT.internals[i];
+-                o.scope = k.elem;
+-                itself(k.value, o, g);
+-            }
+-        }
+-
+-        return JSHINT.errors.length === 0;
+-    };
+-
+-    // Data summary.
+-    itself.data = function () {
+-        var data = {
+-            functions: [],
+-            options: option
+-        };
+-        var implieds = [];
+-        var members = [];
+-        var fu, f, i, j, n, globals;
+-
+-        if (itself.errors.length) {
+-            data.errors = itself.errors;
+-        }
+-
+-        if (jsonmode) {
+-            data.json = true;
+-        }
+-
+-        for (n in implied) {
+-            if (is_own(implied, n)) {
+-                implieds.push({
+-                    name: n,
+-                    line: implied[n]
+-                });
+-            }
+-        }
+-
+-        if (implieds.length > 0) {
+-            data.implieds = implieds;
+-        }
+-
+-        if (urls.length > 0) {
+-            data.urls = urls;
+-        }
+-
+-        globals = Object.keys(scope);
+-        if (globals.length > 0) {
+-            data.globals = globals;
+-        }
+-
+-        for (i = 1; i < functions.length; i += 1) {
+-            f = functions[i];
+-            fu = {};
+-
+-            for (j = 0; j < functionicity.length; j += 1) {
+-                fu[functionicity[j]] = [];
+-            }
+-
+-            for (j = 0; j < functionicity.length; j += 1) {
+-                if (fu[functionicity[j]].length === 0) {
+-                    delete fu[functionicity[j]];
+-                }
+-            }
+-
+-            fu.name = f["(name)"];
+-            fu.param = f["(params)"];
+-            fu.line = f["(line)"];
+-            fu.character = f["(character)"];
+-            fu.last = f["(last)"];
+-            fu.lastcharacter = f["(lastcharacter)"];
+-            data.functions.push(fu);
+-        }
+-
+-        if (unuseds.length > 0) {
+-            data.unused = unuseds;
+-        }
+-
+-        members = [];
+-        for (n in member) {
+-            if (typeof member[n] === "number") {
+-                data.member = member;
+-                break;
+-            }
+-        }
+-
+-        return data;
+-    };
+-
+-    itself.jshint = itself;
+-
+-    return itself;
+-}());
+-
+-// Make JSHINT a Node module, if possible.
+-if (typeof exports === "object" && exports) {
+-    exports.JSHINT = JSHINT;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/qunit.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/qunit.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/qunit.js	(revision 15488)
+@@ -1,2152 +0,0 @@
+-/**
+- * QUnit v1.11.0 - A JavaScript Unit Testing Framework
+- *
+- * http://qunitjs.com
+- *
+- * Copyright 2012 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- */
+-
+-(function( window ) {
+-
+-var QUnit,
+-	assert,
+-	config,
+-	onErrorFnPrev,
+-	testId = 0,
+-	fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
+-	toString = Object.prototype.toString,
+-	hasOwn = Object.prototype.hasOwnProperty,
+-	// Keep a local reference to Date (GH-283)
+-	Date = window.Date,
+-	defined = {
+-		setTimeout: typeof window.setTimeout !== "undefined",
+-		sessionStorage: (function() {
+-			var x = "qunit-test-string";
+-			try {
+-				sessionStorage.setItem( x, x );
+-				sessionStorage.removeItem( x );
+-				return true;
+-			} catch( e ) {
+-				return false;
+-			}
+-		}())
+-	},
+-	/**
+-	 * Provides a normalized error string, correcting an issue
+-	 * with IE 7 (and prior) where Error.prototype.toString is
+-	 * not properly implemented
+-	 *
+-	 * Based on http://es5.github.com/#x15.11.4.4
+-	 *
+-	 * @param {String|Error} error
+-	 * @return {String} error message
+-	 */
+-	errorString = function( error ) {
+-		var name, message,
+-			errorString = error.toString();
+-		if ( errorString.substring( 0, 7 ) === "[object" ) {
+-			name = error.name ? error.name.toString() : "Error";
+-			message = error.message ? error.message.toString() : "";
+-			if ( name && message ) {
+-				return name + ": " + message;
+-			} else if ( name ) {
+-				return name;
+-			} else if ( message ) {
+-				return message;
+-			} else {
+-				return "Error";
+-			}
+-		} else {
+-			return errorString;
+-		}
+-	},
+-	/**
+-	 * Makes a clone of an object using only Array or Object as base,
+-	 * and copies over the own enumerable properties.
+-	 *
+-	 * @param {Object} obj
+-	 * @return {Object} New object with only the own properties (recursively).
+-	 */
+-	objectValues = function( obj ) {
+-		// Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
+-		/*jshint newcap: false */
+-		var key, val,
+-			vals = QUnit.is( "array", obj ) ? [] : {};
+-		for ( key in obj ) {
+-			if ( hasOwn.call( obj, key ) ) {
+-				val = obj[key];
+-				vals[key] = val === Object(val) ? objectValues(val) : val;
+-			}
+-		}
+-		return vals;
+-	};
+-
+-function Test( settings ) {
+-	extend( this, settings );
+-	this.assertions = [];
+-	this.testNumber = ++Test.count;
+-}
+-
+-Test.count = 0;
+-
+-Test.prototype = {
+-	init: function() {
+-		var a, b, li,
+-			tests = id( "qunit-tests" );
+-
+-		if ( tests ) {
+-			b = document.createElement( "strong" );
+-			b.innerHTML = this.nameHtml;
+-
+-			// `a` initialized at top of scope
+-			a = document.createElement( "a" );
+-			a.innerHTML = "Rerun";
+-			a.href = QUnit.url({ testNumber: this.testNumber });
+-
+-			li = document.createElement( "li" );
+-			li.appendChild( b );
+-			li.appendChild( a );
+-			li.className = "running";
+-			li.id = this.id = "qunit-test-output" + testId++;
+-
+-			tests.appendChild( li );
+-		}
+-	},
+-	setup: function() {
+-		if ( this.module !== config.previousModule ) {
+-			if ( config.previousModule ) {
+-				runLoggingCallbacks( "moduleDone", QUnit, {
+-					name: config.previousModule,
+-					failed: config.moduleStats.bad,
+-					passed: config.moduleStats.all - config.moduleStats.bad,
+-					total: config.moduleStats.all
+-				});
+-			}
+-			config.previousModule = this.module;
+-			config.moduleStats = { all: 0, bad: 0 };
+-			runLoggingCallbacks( "moduleStart", QUnit, {
+-				name: this.module
+-			});
+-		} else if ( config.autorun ) {
+-			runLoggingCallbacks( "moduleStart", QUnit, {
+-				name: this.module
+-			});
+-		}
+-
+-		config.current = this;
+-
+-		this.testEnvironment = extend({
+-			setup: function() {},
+-			teardown: function() {}
+-		}, this.moduleTestEnvironment );
+-
+-		this.started = +new Date();
+-		runLoggingCallbacks( "testStart", QUnit, {
+-			name: this.testName,
+-			module: this.module
+-		});
+-
+-		// allow utility functions to access the current test environment
+-		// TODO why??
+-		QUnit.current_testEnvironment = this.testEnvironment;
+-
+-		if ( !config.pollution ) {
+-			saveGlobal();
+-		}
+-		if ( config.notrycatch ) {
+-			this.testEnvironment.setup.call( this.testEnvironment );
+-			return;
+-		}
+-		try {
+-			this.testEnvironment.setup.call( this.testEnvironment );
+-		} catch( e ) {
+-			QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+-		}
+-	},
+-	run: function() {
+-		config.current = this;
+-
+-		var running = id( "qunit-testresult" );
+-
+-		if ( running ) {
+-			running.innerHTML = "Running: <br/>" + this.nameHtml;
+-		}
+-
+-		if ( this.async ) {
+-			QUnit.stop();
+-		}
+-
+-		this.callbackStarted = +new Date();
+-
+-		if ( config.notrycatch ) {
+-			this.callback.call( this.testEnvironment, QUnit.assert );
+-			this.callbackRuntime = +new Date() - this.callbackStarted;
+-			return;
+-		}
+-
+-		try {
+-			this.callback.call( this.testEnvironment, QUnit.assert );
+-			this.callbackRuntime = +new Date() - this.callbackStarted;
+-		} catch( e ) {
+-			this.callbackRuntime = +new Date() - this.callbackStarted;
+-
+-			QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
+-			// else next test will carry the responsibility
+-			saveGlobal();
+-
+-			// Restart the tests if they're blocking
+-			if ( config.blocking ) {
+-				QUnit.start();
+-			}
+-		}
+-	},
+-	teardown: function() {
+-		config.current = this;
+-		if ( config.notrycatch ) {
+-			if ( typeof this.callbackRuntime === "undefined" ) {
+-				this.callbackRuntime = +new Date() - this.callbackStarted;
+-			}
+-			this.testEnvironment.teardown.call( this.testEnvironment );
+-			return;
+-		} else {
+-			try {
+-				this.testEnvironment.teardown.call( this.testEnvironment );
+-			} catch( e ) {
+-				QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+-			}
+-		}
+-		checkPollution();
+-	},
+-	finish: function() {
+-		config.current = this;
+-		if ( config.requireExpects && this.expected === null ) {
+-			QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
+-		} else if ( this.expected !== null && this.expected !== this.assertions.length ) {
+-			QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
+-		} else if ( this.expected === null && !this.assertions.length ) {
+-			QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
+-		}
+-
+-		var i, assertion, a, b, time, li, ol,
+-			test = this,
+-			good = 0,
+-			bad = 0,
+-			tests = id( "qunit-tests" );
+-
+-		this.runtime = +new Date() - this.started;
+-		config.stats.all += this.assertions.length;
+-		config.moduleStats.all += this.assertions.length;
+-
+-		if ( tests ) {
+-			ol = document.createElement( "ol" );
+-			ol.className = "qunit-assert-list";
+-
+-			for ( i = 0; i < this.assertions.length; i++ ) {
+-				assertion = this.assertions[i];
+-
+-				li = document.createElement( "li" );
+-				li.className = assertion.result ? "pass" : "fail";
+-				li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
+-				ol.appendChild( li );
+-
+-				if ( assertion.result ) {
+-					good++;
+-				} else {
+-					bad++;
+-					config.stats.bad++;
+-					config.moduleStats.bad++;
+-				}
+-			}
+-
+-			// store result when possible
+-			if ( QUnit.config.reorder && defined.sessionStorage ) {
+-				if ( bad ) {
+-					sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
+-				} else {
+-					sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
+-				}
+-			}
+-
+-			if ( bad === 0 ) {
+-				addClass( ol, "qunit-collapsed" );
+-			}
+-
+-			// `b` initialized at top of scope
+-			b = document.createElement( "strong" );
+-			b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
+-
+-			addEvent(b, "click", function() {
+-				var next = b.parentNode.lastChild,
+-					collapsed = hasClass( next, "qunit-collapsed" );
+-				( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
+-			});
+-
+-			addEvent(b, "dblclick", function( e ) {
+-				var target = e && e.target ? e.target : window.event.srcElement;
+-				if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
+-					target = target.parentNode;
+-				}
+-				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
+-					window.location = QUnit.url({ testNumber: test.testNumber });
+-				}
+-			});
+-
+-			// `time` initialized at top of scope
+-			time = document.createElement( "span" );
+-			time.className = "runtime";
+-			time.innerHTML = this.runtime + " ms";
+-
+-			// `li` initialized at top of scope
+-			li = id( this.id );
+-			li.className = bad ? "fail" : "pass";
+-			li.removeChild( li.firstChild );
+-			a = li.firstChild;
+-			li.appendChild( b );
+-			li.appendChild( a );
+-			li.appendChild( time );
+-			li.appendChild( ol );
+-
+-		} else {
+-			for ( i = 0; i < this.assertions.length; i++ ) {
+-				if ( !this.assertions[i].result ) {
+-					bad++;
+-					config.stats.bad++;
+-					config.moduleStats.bad++;
+-				}
+-			}
+-		}
+-
+-		runLoggingCallbacks( "testDone", QUnit, {
+-			name: this.testName,
+-			module: this.module,
+-			failed: bad,
+-			passed: this.assertions.length - bad,
+-			total: this.assertions.length,
+-			duration: this.runtime
+-		});
+-
+-		QUnit.reset();
+-
+-		config.current = undefined;
+-	},
+-
+-	queue: function() {
+-		var bad,
+-			test = this;
+-
+-		synchronize(function() {
+-			test.init();
+-		});
+-		function run() {
+-			// each of these can by async
+-			synchronize(function() {
+-				test.setup();
+-			});
+-			synchronize(function() {
+-				test.run();
+-			});
+-			synchronize(function() {
+-				test.teardown();
+-			});
+-			synchronize(function() {
+-				test.finish();
+-			});
+-		}
+-
+-		// `bad` initialized at top of scope
+-		// defer when previous test run passed, if storage is available
+-		bad = QUnit.config.reorder && defined.sessionStorage &&
+-						+sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
+-
+-		if ( bad ) {
+-			run();
+-		} else {
+-			synchronize( run, true );
+-		}
+-	}
+-};
+-
+-// Root QUnit object.
+-// `QUnit` initialized at top of scope
+-QUnit = {
+-
+-	// call on start of module test to prepend name to all tests
+-	module: function( name, testEnvironment ) {
+-		config.currentModule = name;
+-		config.currentModuleTestEnvironment = testEnvironment;
+-		config.modules[name] = true;
+-	},
+-
+-	asyncTest: function( testName, expected, callback ) {
+-		if ( arguments.length === 2 ) {
+-			callback = expected;
+-			expected = null;
+-		}
+-
+-		QUnit.test( testName, expected, callback, true );
+-	},
+-
+-	test: function( testName, expected, callback, async ) {
+-		var test,
+-			nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
+-
+-		if ( arguments.length === 2 ) {
+-			callback = expected;
+-			expected = null;
+-		}
+-
+-		if ( config.currentModule ) {
+-			nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
+-		}
+-
+-		test = new Test({
+-			nameHtml: nameHtml,
+-			testName: testName,
+-			expected: expected,
+-			async: async,
+-			callback: callback,
+-			module: config.currentModule,
+-			moduleTestEnvironment: config.currentModuleTestEnvironment,
+-			stack: sourceFromStacktrace( 2 )
+-		});
+-
+-		if ( !validTest( test ) ) {
+-			return;
+-		}
+-
+-		test.queue();
+-	},
+-
+-	// Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
+-	expect: function( asserts ) {
+-		if (arguments.length === 1) {
+-			config.current.expected = asserts;
+-		} else {
+-			return config.current.expected;
+-		}
+-	},
+-
+-	start: function( count ) {
+-		// QUnit hasn't been initialized yet.
+-		// Note: RequireJS (et al) may delay onLoad
+-		if ( config.semaphore === undefined ) {
+-			QUnit.begin(function() {
+-				// This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
+-				setTimeout(function() {
+-					QUnit.start( count );
+-				});
+-			});
+-			return;
+-		}
+-
+-		config.semaphore -= count || 1;
+-		// don't start until equal number of stop-calls
+-		if ( config.semaphore > 0 ) {
+-			return;
+-		}
+-		// ignore if start is called more often then stop
+-		if ( config.semaphore < 0 ) {
+-			config.semaphore = 0;
+-			QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
+-			return;
+-		}
+-		// A slight delay, to avoid any current callbacks
+-		if ( defined.setTimeout ) {
+-			window.setTimeout(function() {
+-				if ( config.semaphore > 0 ) {
+-					return;
+-				}
+-				if ( config.timeout ) {
+-					clearTimeout( config.timeout );
+-				}
+-
+-				config.blocking = false;
+-				process( true );
+-			}, 13);
+-		} else {
+-			config.blocking = false;
+-			process( true );
+-		}
+-	},
+-
+-	stop: function( count ) {
+-		config.semaphore += count || 1;
+-		config.blocking = true;
+-
+-		if ( config.testTimeout && defined.setTimeout ) {
+-			clearTimeout( config.timeout );
+-			config.timeout = window.setTimeout(function() {
+-				QUnit.ok( false, "Test timed out" );
+-				config.semaphore = 1;
+-				QUnit.start();
+-			}, config.testTimeout );
+-		}
+-	}
+-};
+-
+-// `assert` initialized at top of scope
+-// Asssert helpers
+-// All of these must either call QUnit.push() or manually do:
+-// - runLoggingCallbacks( "log", .. );
+-// - config.current.assertions.push({ .. });
+-// We attach it to the QUnit object *after* we expose the public API,
+-// otherwise `assert` will become a global variable in browsers (#341).
+-assert = {
+-	/**
+-	 * Asserts rough true-ish result.
+-	 * @name ok
+-	 * @function
+-	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+-	 */
+-	ok: function( result, msg ) {
+-		if ( !config.current ) {
+-			throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
+-		}
+-		result = !!result;
+-
+-		var source,
+-			details = {
+-				module: config.current.module,
+-				name: config.current.testName,
+-				result: result,
+-				message: msg
+-			};
+-
+-		msg = escapeText( msg || (result ? "okay" : "failed" ) );
+-		msg = "<span class='test-message'>" + msg + "</span>";
+-
+-		if ( !result ) {
+-			source = sourceFromStacktrace( 2 );
+-			if ( source ) {
+-				details.source = source;
+-				msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr></table>";
+-			}
+-		}
+-		runLoggingCallbacks( "log", QUnit, details );
+-		config.current.assertions.push({
+-			result: result,
+-			message: msg
+-		});
+-	},
+-
+-	/**
+-	 * Assert that the first two arguments are equal, with an optional message.
+-	 * Prints out both actual and expected values.
+-	 * @name equal
+-	 * @function
+-	 * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
+-	 */
+-	equal: function( actual, expected, message ) {
+-		/*jshint eqeqeq:false */
+-		QUnit.push( expected == actual, actual, expected, message );
+-	},
+-
+-	/**
+-	 * @name notEqual
+-	 * @function
+-	 */
+-	notEqual: function( actual, expected, message ) {
+-		/*jshint eqeqeq:false */
+-		QUnit.push( expected != actual, actual, expected, message );
+-	},
+-
+-	/**
+-	 * @name propEqual
+-	 * @function
+-	 */
+-	propEqual: function( actual, expected, message ) {
+-		actual = objectValues(actual);
+-		expected = objectValues(expected);
+-		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+-	},
+-
+-	/**
+-	 * @name notPropEqual
+-	 * @function
+-	 */
+-	notPropEqual: function( actual, expected, message ) {
+-		actual = objectValues(actual);
+-		expected = objectValues(expected);
+-		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+-	},
+-
+-	/**
+-	 * @name deepEqual
+-	 * @function
+-	 */
+-	deepEqual: function( actual, expected, message ) {
+-		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+-	},
+-
+-	/**
+-	 * @name notDeepEqual
+-	 * @function
+-	 */
+-	notDeepEqual: function( actual, expected, message ) {
+-		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+-	},
+-
+-	/**
+-	 * @name strictEqual
+-	 * @function
+-	 */
+-	strictEqual: function( actual, expected, message ) {
+-		QUnit.push( expected === actual, actual, expected, message );
+-	},
+-
+-	/**
+-	 * @name notStrictEqual
+-	 * @function
+-	 */
+-	notStrictEqual: function( actual, expected, message ) {
+-		QUnit.push( expected !== actual, actual, expected, message );
+-	},
+-
+-	"throws": function( block, expected, message ) {
+-		var actual,
+-			expectedOutput = expected,
+-			ok = false;
+-
+-		// 'expected' is optional
+-		if ( typeof expected === "string" ) {
+-			message = expected;
+-			expected = null;
+-		}
+-
+-		config.current.ignoreGlobalErrors = true;
+-		try {
+-			block.call( config.current.testEnvironment );
+-		} catch (e) {
+-			actual = e;
+-		}
+-		config.current.ignoreGlobalErrors = false;
+-
+-		if ( actual ) {
+-			// we don't want to validate thrown error
+-			if ( !expected ) {
+-				ok = true;
+-				expectedOutput = null;
+-			// expected is a regexp
+-			} else if ( QUnit.objectType( expected ) === "regexp" ) {
+-				ok = expected.test( errorString( actual ) );
+-			// expected is a constructor
+-			} else if ( actual instanceof expected ) {
+-				ok = true;
+-			// expected is a validation function which returns true is validation passed
+-			} else if ( expected.call( {}, actual ) === true ) {
+-				expectedOutput = null;
+-				ok = true;
+-			}
+-
+-			QUnit.push( ok, actual, expectedOutput, message );
+-		} else {
+-			QUnit.pushFailure( message, null, 'No exception was thrown.' );
+-		}
+-	}
+-};
+-
+-/**
+- * @deprecate since 1.8.0
+- * Kept assertion helpers in root for backwards compatibility.
+- */
+-extend( QUnit, assert );
+-
+-/**
+- * @deprecated since 1.9.0
+- * Kept root "raises()" for backwards compatibility.
+- * (Note that we don't introduce assert.raises).
+- */
+-QUnit.raises = assert[ "throws" ];
+-
+-/**
+- * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
+- * Kept to avoid TypeErrors for undefined methods.
+- */
+-QUnit.equals = function() {
+-	QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
+-};
+-QUnit.same = function() {
+-	QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
+-};
+-
+-// We want access to the constructor's prototype
+-(function() {
+-	function F() {}
+-	F.prototype = QUnit;
+-	QUnit = new F();
+-	// Make F QUnit's constructor so that we can add to the prototype later
+-	QUnit.constructor = F;
+-}());
+-
+-/**
+- * Config object: Maintain internal state
+- * Later exposed as QUnit.config
+- * `config` initialized at top of scope
+- */
+-config = {
+-	// The queue of tests to run
+-	queue: [],
+-
+-	// block until document ready
+-	blocking: true,
+-
+-	// when enabled, show only failing tests
+-	// gets persisted through sessionStorage and can be changed in UI via checkbox
+-	hidepassed: false,
+-
+-	// by default, run previously failed tests first
+-	// very useful in combination with "Hide passed tests" checked
+-	reorder: true,
+-
+-	// by default, modify document.title when suite is done
+-	altertitle: true,
+-
+-	// when enabled, all tests must call expect()
+-	requireExpects: false,
+-
+-	// add checkboxes that are persisted in the query-string
+-	// when enabled, the id is set to `true` as a `QUnit.config` property
+-	urlConfig: [
+-		{
+-			id: "noglobals",
+-			label: "Check for Globals",
+-			tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
+-		},
+-		{
+-			id: "notrycatch",
+-			label: "No try-catch",
+-			tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
+-		}
+-	],
+-
+-	// Set of all modules.
+-	modules: {},
+-
+-	// logging callback queues
+-	begin: [],
+-	done: [],
+-	log: [],
+-	testStart: [],
+-	testDone: [],
+-	moduleStart: [],
+-	moduleDone: []
+-};
+-
+-// Export global variables, unless an 'exports' object exists,
+-// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
+-if ( typeof exports === "undefined" ) {
+-	extend( window, QUnit );
+-
+-	// Expose QUnit object
+-	window.QUnit = QUnit;
+-}
+-
+-// Initialize more QUnit.config and QUnit.urlParams
+-(function() {
+-	var i,
+-		location = window.location || { search: "", protocol: "file:" },
+-		params = location.search.slice( 1 ).split( "&" ),
+-		length = params.length,
+-		urlParams = {},
+-		current;
+-
+-	if ( params[ 0 ] ) {
+-		for ( i = 0; i < length; i++ ) {
+-			current = params[ i ].split( "=" );
+-			current[ 0 ] = decodeURIComponent( current[ 0 ] );
+-			// allow just a key to turn on a flag, e.g., test.html?noglobals
+-			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
+-			urlParams[ current[ 0 ] ] = current[ 1 ];
+-		}
+-	}
+-
+-	QUnit.urlParams = urlParams;
+-
+-	// String search anywhere in moduleName+testName
+-	config.filter = urlParams.filter;
+-
+-	// Exact match of the module name
+-	config.module = urlParams.module;
+-
+-	config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
+-
+-	// Figure out if we're running the tests from a server or not
+-	QUnit.isLocal = location.protocol === "file:";
+-}());
+-
+-// Extend QUnit object,
+-// these after set here because they should not be exposed as global functions
+-extend( QUnit, {
+-	assert: assert,
+-
+-	config: config,
+-
+-	// Initialize the configuration options
+-	init: function() {
+-		extend( config, {
+-			stats: { all: 0, bad: 0 },
+-			moduleStats: { all: 0, bad: 0 },
+-			started: +new Date(),
+-			updateRate: 1000,
+-			blocking: false,
+-			autostart: true,
+-			autorun: false,
+-			filter: "",
+-			queue: [],
+-			semaphore: 1
+-		});
+-
+-		var tests, banner, result,
+-			qunit = id( "qunit" );
+-
+-		if ( qunit ) {
+-			qunit.innerHTML =
+-				"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+-				"<h2 id='qunit-banner'></h2>" +
+-				"<div id='qunit-testrunner-toolbar'></div>" +
+-				"<h2 id='qunit-userAgent'></h2>" +
+-				"<ol id='qunit-tests'></ol>";
+-		}
+-
+-		tests = id( "qunit-tests" );
+-		banner = id( "qunit-banner" );
+-		result = id( "qunit-testresult" );
+-
+-		if ( tests ) {
+-			tests.innerHTML = "";
+-		}
+-
+-		if ( banner ) {
+-			banner.className = "";
+-		}
+-
+-		if ( result ) {
+-			result.parentNode.removeChild( result );
+-		}
+-
+-		if ( tests ) {
+-			result = document.createElement( "p" );
+-			result.id = "qunit-testresult";
+-			result.className = "result";
+-			tests.parentNode.insertBefore( result, tests );
+-			result.innerHTML = "Running...<br/>&nbsp;";
+-		}
+-	},
+-
+-	// Resets the test setup. Useful for tests that modify the DOM.
+-	reset: function() {
+-		var fixture = id( "qunit-fixture" );
+-		if ( fixture ) {
+-			fixture.innerHTML = config.fixture;
+-		}
+-	},
+-
+-	// Trigger an event on an element.
+-	// @example triggerEvent( document.body, "click" );
+-	triggerEvent: function( elem, type, event ) {
+-		if ( document.createEvent ) {
+-			event = document.createEvent( "MouseEvents" );
+-			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
+-				0, 0, 0, 0, 0, false, false, false, false, 0, null);
+-
+-			elem.dispatchEvent( event );
+-		} else if ( elem.fireEvent ) {
+-			elem.fireEvent( "on" + type );
+-		}
+-	},
+-
+-	// Safe object type checking
+-	is: function( type, obj ) {
+-		return QUnit.objectType( obj ) === type;
+-	},
+-
+-	objectType: function( obj ) {
+-		if ( typeof obj === "undefined" ) {
+-				return "undefined";
+-		// consider: typeof null === object
+-		}
+-		if ( obj === null ) {
+-				return "null";
+-		}
+-
+-		var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
+-			type = match && match[1] || "";
+-
+-		switch ( type ) {
+-			case "Number":
+-				if ( isNaN(obj) ) {
+-					return "nan";
+-				}
+-				return "number";
+-			case "String":
+-			case "Boolean":
+-			case "Array":
+-			case "Date":
+-			case "RegExp":
+-			case "Function":
+-				return type.toLowerCase();
+-		}
+-		if ( typeof obj === "object" ) {
+-			return "object";
+-		}
+-		return undefined;
+-	},
+-
+-	push: function( result, actual, expected, message ) {
+-		if ( !config.current ) {
+-			throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
+-		}
+-
+-		var output, source,
+-			details = {
+-				module: config.current.module,
+-				name: config.current.testName,
+-				result: result,
+-				message: message,
+-				actual: actual,
+-				expected: expected
+-			};
+-
+-		message = escapeText( message ) || ( result ? "okay" : "failed" );
+-		message = "<span class='test-message'>" + message + "</span>";
+-		output = message;
+-
+-		if ( !result ) {
+-			expected = escapeText( QUnit.jsDump.parse(expected) );
+-			actual = escapeText( QUnit.jsDump.parse(actual) );
+-			output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
+-
+-			if ( actual !== expected ) {
+-				output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
+-				output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
+-			}
+-
+-			source = sourceFromStacktrace();
+-
+-			if ( source ) {
+-				details.source = source;
+-				output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+-			}
+-
+-			output += "</table>";
+-		}
+-
+-		runLoggingCallbacks( "log", QUnit, details );
+-
+-		config.current.assertions.push({
+-			result: !!result,
+-			message: output
+-		});
+-	},
+-
+-	pushFailure: function( message, source, actual ) {
+-		if ( !config.current ) {
+-			throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
+-		}
+-
+-		var output,
+-			details = {
+-				module: config.current.module,
+-				name: config.current.testName,
+-				result: false,
+-				message: message
+-			};
+-
+-		message = escapeText( message ) || "error";
+-		message = "<span class='test-message'>" + message + "</span>";
+-		output = message;
+-
+-		output += "<table>";
+-
+-		if ( actual ) {
+-			output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
+-		}
+-
+-		if ( source ) {
+-			details.source = source;
+-			output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+-		}
+-
+-		output += "</table>";
+-
+-		runLoggingCallbacks( "log", QUnit, details );
+-
+-		config.current.assertions.push({
+-			result: false,
+-			message: output
+-		});
+-	},
+-
+-	url: function( params ) {
+-		params = extend( extend( {}, QUnit.urlParams ), params );
+-		var key,
+-			querystring = "?";
+-
+-		for ( key in params ) {
+-			if ( !hasOwn.call( params, key ) ) {
+-				continue;
+-			}
+-			querystring += encodeURIComponent( key ) + "=" +
+-				encodeURIComponent( params[ key ] ) + "&";
+-		}
+-		return window.location.protocol + "//" + window.location.host +
+-			window.location.pathname + querystring.slice( 0, -1 );
+-	},
+-
+-	extend: extend,
+-	id: id,
+-	addEvent: addEvent
+-	// load, equiv, jsDump, diff: Attached later
+-});
+-
+-/**
+- * @deprecated: Created for backwards compatibility with test runner that set the hook function
+- * into QUnit.{hook}, instead of invoking it and passing the hook function.
+- * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
+- * Doing this allows us to tell if the following methods have been overwritten on the actual
+- * QUnit object.
+- */
+-extend( QUnit.constructor.prototype, {
+-
+-	// Logging callbacks; all receive a single argument with the listed properties
+-	// run test/logs.html for any related changes
+-	begin: registerLoggingCallback( "begin" ),
+-
+-	// done: { failed, passed, total, runtime }
+-	done: registerLoggingCallback( "done" ),
+-
+-	// log: { result, actual, expected, message }
+-	log: registerLoggingCallback( "log" ),
+-
+-	// testStart: { name }
+-	testStart: registerLoggingCallback( "testStart" ),
+-
+-	// testDone: { name, failed, passed, total, duration }
+-	testDone: registerLoggingCallback( "testDone" ),
+-
+-	// moduleStart: { name }
+-	moduleStart: registerLoggingCallback( "moduleStart" ),
+-
+-	// moduleDone: { name, failed, passed, total }
+-	moduleDone: registerLoggingCallback( "moduleDone" )
+-});
+-
+-if ( typeof document === "undefined" || document.readyState === "complete" ) {
+-	config.autorun = true;
+-}
+-
+-QUnit.load = function() {
+-	runLoggingCallbacks( "begin", QUnit, {} );
+-
+-	// Initialize the config, saving the execution queue
+-	var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
+-		urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
+-		numModules = 0,
+-		moduleFilterHtml = "",
+-		urlConfigHtml = "",
+-		oldconfig = extend( {}, config );
+-
+-	QUnit.init();
+-	extend(config, oldconfig);
+-
+-	config.blocking = false;
+-
+-	len = config.urlConfig.length;
+-
+-	for ( i = 0; i < len; i++ ) {
+-		val = config.urlConfig[i];
+-		if ( typeof val === "string" ) {
+-			val = {
+-				id: val,
+-				label: val,
+-				tooltip: "[no tooltip available]"
+-			};
+-		}
+-		config[ val.id ] = QUnit.urlParams[ val.id ];
+-		urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
+-			"' name='" + escapeText( val.id ) +
+-			"' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) +
+-			" title='" + escapeText( val.tooltip ) +
+-			"'><label for='qunit-urlconfig-" + escapeText( val.id ) +
+-			"' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
+-	}
+-
+-	moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
+-		( config.module === undefined  ? "selected='selected'" : "" ) +
+-		">< All Modules ></option>";
+-
+-	for ( i in config.modules ) {
+-		if ( config.modules.hasOwnProperty( i ) ) {
+-			numModules += 1;
+-			moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(i) ) + "' " +
+-				( config.module === i ? "selected='selected'" : "" ) +
+-				">" + escapeText(i) + "</option>";
+-		}
+-	}
+-	moduleFilterHtml += "</select>";
+-
+-	// `userAgent` initialized at top of scope
+-	userAgent = id( "qunit-userAgent" );
+-	if ( userAgent ) {
+-		userAgent.innerHTML = navigator.userAgent;
+-	}
+-
+-	// `banner` initialized at top of scope
+-	banner = id( "qunit-header" );
+-	if ( banner ) {
+-		banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
+-	}
+-
+-	// `toolbar` initialized at top of scope
+-	toolbar = id( "qunit-testrunner-toolbar" );
+-	if ( toolbar ) {
+-		// `filter` initialized at top of scope
+-		filter = document.createElement( "input" );
+-		filter.type = "checkbox";
+-		filter.id = "qunit-filter-pass";
+-
+-		addEvent( filter, "click", function() {
+-			var tmp,
+-				ol = document.getElementById( "qunit-tests" );
+-
+-			if ( filter.checked ) {
+-				ol.className = ol.className + " hidepass";
+-			} else {
+-				tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
+-				ol.className = tmp.replace( / hidepass /, " " );
+-			}
+-			if ( defined.sessionStorage ) {
+-				if (filter.checked) {
+-					sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
+-				} else {
+-					sessionStorage.removeItem( "qunit-filter-passed-tests" );
+-				}
+-			}
+-		});
+-
+-		if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
+-			filter.checked = true;
+-			// `ol` initialized at top of scope
+-			ol = document.getElementById( "qunit-tests" );
+-			ol.className = ol.className + " hidepass";
+-		}
+-		toolbar.appendChild( filter );
+-
+-		// `label` initialized at top of scope
+-		label = document.createElement( "label" );
+-		label.setAttribute( "for", "qunit-filter-pass" );
+-		label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." );
+-		label.innerHTML = "Hide passed tests";
+-		toolbar.appendChild( label );
+-
+-		urlConfigCheckboxesContainer = document.createElement("span");
+-		urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
+-		urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
+-		// For oldIE support:
+-		// * Add handlers to the individual elements instead of the container
+-		// * Use "click" instead of "change"
+-		// * Fallback from event.target to event.srcElement
+-		addEvents( urlConfigCheckboxes, "click", function( event ) {
+-			var params = {},
+-				target = event.target || event.srcElement;
+-			params[ target.name ] = target.checked ? true : undefined;
+-			window.location = QUnit.url( params );
+-		});
+-		toolbar.appendChild( urlConfigCheckboxesContainer );
+-
+-		if (numModules > 1) {
+-			moduleFilter = document.createElement( 'span' );
+-			moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' );
+-			moduleFilter.innerHTML = moduleFilterHtml;
+-			addEvent( moduleFilter.lastChild, "change", function() {
+-				var selectBox = moduleFilter.getElementsByTagName("select")[0],
+-					selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
+-
+-				window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } );
+-			});
+-			toolbar.appendChild(moduleFilter);
+-		}
+-	}
+-
+-	// `main` initialized at top of scope
+-	main = id( "qunit-fixture" );
+-	if ( main ) {
+-		config.fixture = main.innerHTML;
+-	}
+-
+-	if ( config.autostart ) {
+-		QUnit.start();
+-	}
+-};
+-
+-addEvent( window, "load", QUnit.load );
+-
+-// `onErrorFnPrev` initialized at top of scope
+-// Preserve other handlers
+-onErrorFnPrev = window.onerror;
+-
+-// Cover uncaught exceptions
+-// Returning true will surpress the default browser handler,
+-// returning false will let it run.
+-window.onerror = function ( error, filePath, linerNr ) {
+-	var ret = false;
+-	if ( onErrorFnPrev ) {
+-		ret = onErrorFnPrev( error, filePath, linerNr );
+-	}
+-
+-	// Treat return value as window.onerror itself does,
+-	// Only do our handling if not surpressed.
+-	if ( ret !== true ) {
+-		if ( QUnit.config.current ) {
+-			if ( QUnit.config.current.ignoreGlobalErrors ) {
+-				return true;
+-			}
+-			QUnit.pushFailure( error, filePath + ":" + linerNr );
+-		} else {
+-			QUnit.test( "global failure", extend( function() {
+-				QUnit.pushFailure( error, filePath + ":" + linerNr );
+-			}, { validTest: validTest } ) );
+-		}
+-		return false;
+-	}
+-
+-	return ret;
+-};
+-
+-function done() {
+-	config.autorun = true;
+-
+-	// Log the last module results
+-	if ( config.currentModule ) {
+-		runLoggingCallbacks( "moduleDone", QUnit, {
+-			name: config.currentModule,
+-			failed: config.moduleStats.bad,
+-			passed: config.moduleStats.all - config.moduleStats.bad,
+-			total: config.moduleStats.all
+-		});
+-	}
+-
+-	var i, key,
+-		banner = id( "qunit-banner" ),
+-		tests = id( "qunit-tests" ),
+-		runtime = +new Date() - config.started,
+-		passed = config.stats.all - config.stats.bad,
+-		html = [
+-			"Tests completed in ",
+-			runtime,
+-			" milliseconds.<br/>",
+-			"<span class='passed'>",
+-			passed,
+-			"</span> assertions of <span class='total'>",
+-			config.stats.all,
+-			"</span> passed, <span class='failed'>",
+-			config.stats.bad,
+-			"</span> failed."
+-		].join( "" );
+-
+-	if ( banner ) {
+-		banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
+-	}
+-
+-	if ( tests ) {
+-		id( "qunit-testresult" ).innerHTML = html;
+-	}
+-
+-	if ( config.altertitle && typeof document !== "undefined" && document.title ) {
+-		// show ✖ for good, ✔ for bad suite result in title
+-		// use escape sequences in case file gets loaded with non-utf-8-charset
+-		document.title = [
+-			( config.stats.bad ? "\u2716" : "\u2714" ),
+-			document.title.replace( /^[\u2714\u2716] /i, "" )
+-		].join( " " );
+-	}
+-
+-	// clear own sessionStorage items if all tests passed
+-	if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
+-		// `key` & `i` initialized at top of scope
+-		for ( i = 0; i < sessionStorage.length; i++ ) {
+-			key = sessionStorage.key( i++ );
+-			if ( key.indexOf( "qunit-test-" ) === 0 ) {
+-				sessionStorage.removeItem( key );
+-			}
+-		}
+-	}
+-
+-	// scroll back to top to show results
+-	if ( window.scrollTo ) {
+-		window.scrollTo(0, 0);
+-	}
+-
+-	runLoggingCallbacks( "done", QUnit, {
+-		failed: config.stats.bad,
+-		passed: passed,
+-		total: config.stats.all,
+-		runtime: runtime
+-	});
+-}
+-
+-/** @return Boolean: true if this test should be ran */
+-function validTest( test ) {
+-	var include,
+-		filter = config.filter && config.filter.toLowerCase(),
+-		module = config.module && config.module.toLowerCase(),
+-		fullName = (test.module + ": " + test.testName).toLowerCase();
+-
+-	// Internally-generated tests are always valid
+-	if ( test.callback && test.callback.validTest === validTest ) {
+-		delete test.callback.validTest;
+-		return true;
+-	}
+-
+-	if ( config.testNumber ) {
+-		return test.testNumber === config.testNumber;
+-	}
+-
+-	if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
+-		return false;
+-	}
+-
+-	if ( !filter ) {
+-		return true;
+-	}
+-
+-	include = filter.charAt( 0 ) !== "!";
+-	if ( !include ) {
+-		filter = filter.slice( 1 );
+-	}
+-
+-	// If the filter matches, we need to honour include
+-	if ( fullName.indexOf( filter ) !== -1 ) {
+-		return include;
+-	}
+-
+-	// Otherwise, do the opposite
+-	return !include;
+-}
+-
+-// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
+-// Later Safari and IE10 are supposed to support error.stack as well
+-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+-function extractStacktrace( e, offset ) {
+-	offset = offset === undefined ? 3 : offset;
+-
+-	var stack, include, i;
+-
+-	if ( e.stacktrace ) {
+-		// Opera
+-		return e.stacktrace.split( "\n" )[ offset + 3 ];
+-	} else if ( e.stack ) {
+-		// Firefox, Chrome
+-		stack = e.stack.split( "\n" );
+-		if (/^error$/i.test( stack[0] ) ) {
+-			stack.shift();
+-		}
+-		if ( fileName ) {
+-			include = [];
+-			for ( i = offset; i < stack.length; i++ ) {
+-				if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+-					break;
+-				}
+-				include.push( stack[ i ] );
+-			}
+-			if ( include.length ) {
+-				return include.join( "\n" );
+-			}
+-		}
+-		return stack[ offset ];
+-	} else if ( e.sourceURL ) {
+-		// Safari, PhantomJS
+-		// hopefully one day Safari provides actual stacktraces
+-		// exclude useless self-reference for generated Error objects
+-		if ( /qunit.js$/.test( e.sourceURL ) ) {
+-			return;
+-		}
+-		// for actual exceptions, this is useful
+-		return e.sourceURL + ":" + e.line;
+-	}
+-}
+-function sourceFromStacktrace( offset ) {
+-	try {
+-		throw new Error();
+-	} catch ( e ) {
+-		return extractStacktrace( e, offset );
+-	}
+-}
+-
+-/**
+- * Escape text for attribute or text content.
+- */
+-function escapeText( s ) {
+-	if ( !s ) {
+-		return "";
+-	}
+-	s = s + "";
+-	// Both single quotes and double quotes (for attributes)
+-	return s.replace( /['"<>&]/g, function( s ) {
+-		switch( s ) {
+-			case '\'':
+-				return '&#039;';
+-			case '"':
+-				return '&quot;';
+-			case '<':
+-				return '&lt;';
+-			case '>':
+-				return '&gt;';
+-			case '&':
+-				return '&amp;';
+-		}
+-	});
+-}
+-
+-function synchronize( callback, last ) {
+-	config.queue.push( callback );
+-
+-	if ( config.autorun && !config.blocking ) {
+-		process( last );
+-	}
+-}
+-
+-function process( last ) {
+-	function next() {
+-		process( last );
+-	}
+-	var start = new Date().getTime();
+-	config.depth = config.depth ? config.depth + 1 : 1;
+-
+-	while ( config.queue.length && !config.blocking ) {
+-		if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
+-			config.queue.shift()();
+-		} else {
+-			window.setTimeout( next, 13 );
+-			break;
+-		}
+-	}
+-	config.depth--;
+-	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
+-		done();
+-	}
+-}
+-
+-function saveGlobal() {
+-	config.pollution = [];
+-
+-	if ( config.noglobals ) {
+-		for ( var key in window ) {
+-			// in Opera sometimes DOM element ids show up here, ignore them
+-			if ( !hasOwn.call( window, key ) || /^qunit-test-output/.test( key ) ) {
+-				continue;
+-			}
+-			config.pollution.push( key );
+-		}
+-	}
+-}
+-
+-function checkPollution() {
+-	var newGlobals,
+-		deletedGlobals,
+-		old = config.pollution;
+-
+-	saveGlobal();
+-
+-	newGlobals = diff( config.pollution, old );
+-	if ( newGlobals.length > 0 ) {
+-		QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
+-	}
+-
+-	deletedGlobals = diff( old, config.pollution );
+-	if ( deletedGlobals.length > 0 ) {
+-		QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
+-	}
+-}
+-
+-// returns a new Array with the elements that are in a but not in b
+-function diff( a, b ) {
+-	var i, j,
+-		result = a.slice();
+-
+-	for ( i = 0; i < result.length; i++ ) {
+-		for ( j = 0; j < b.length; j++ ) {
+-			if ( result[i] === b[j] ) {
+-				result.splice( i, 1 );
+-				i--;
+-				break;
+-			}
+-		}
+-	}
+-	return result;
+-}
+-
+-function extend( a, b ) {
+-	for ( var prop in b ) {
+-		if ( b[ prop ] === undefined ) {
+-			delete a[ prop ];
+-
+-		// Avoid "Member not found" error in IE8 caused by setting window.constructor
+-		} else if ( prop !== "constructor" || a !== window ) {
+-			a[ prop ] = b[ prop ];
+-		}
+-	}
+-
+-	return a;
+-}
+-
+-/**
+- * @param {HTMLElement} elem
+- * @param {string} type
+- * @param {Function} fn
+- */
+-function addEvent( elem, type, fn ) {
+-	// Standards-based browsers
+-	if ( elem.addEventListener ) {
+-		elem.addEventListener( type, fn, false );
+-	// IE
+-	} else {
+-		elem.attachEvent( "on" + type, fn );
+-	}
+-}
+-
+-/**
+- * @param {Array|NodeList} elems
+- * @param {string} type
+- * @param {Function} fn
+- */
+-function addEvents( elems, type, fn ) {
+-	var i = elems.length;
+-	while ( i-- ) {
+-		addEvent( elems[i], type, fn );
+-	}
+-}
+-
+-function hasClass( elem, name ) {
+-	return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
+-}
+-
+-function addClass( elem, name ) {
+-	if ( !hasClass( elem, name ) ) {
+-		elem.className += (elem.className ? " " : "") + name;
+-	}
+-}
+-
+-function removeClass( elem, name ) {
+-	var set = " " + elem.className + " ";
+-	// Class name may appear multiple times
+-	while ( set.indexOf(" " + name + " ") > -1 ) {
+-		set = set.replace(" " + name + " " , " ");
+-	}
+-	// If possible, trim it for prettiness, but not neccecarily
+-	elem.className = window.jQuery ? jQuery.trim( set ) : ( set.trim ? set.trim() : set );
+-}
+-
+-function id( name ) {
+-	return !!( typeof document !== "undefined" && document && document.getElementById ) &&
+-		document.getElementById( name );
+-}
+-
+-function registerLoggingCallback( key ) {
+-	return function( callback ) {
+-		config[key].push( callback );
+-	};
+-}
+-
+-// Supports deprecated method of completely overwriting logging callbacks
+-function runLoggingCallbacks( key, scope, args ) {
+-	var i, callbacks;
+-	if ( QUnit.hasOwnProperty( key ) ) {
+-		QUnit[ key ].call(scope, args );
+-	} else {
+-		callbacks = config[ key ];
+-		for ( i = 0; i < callbacks.length; i++ ) {
+-			callbacks[ i ].call( scope, args );
+-		}
+-	}
+-}
+-
+-// Test for equality any JavaScript type.
+-// Author: Philippe Rathé <prathe@gmail.com>
+-QUnit.equiv = (function() {
+-
+-	// Call the o related callback with the given arguments.
+-	function bindCallbacks( o, callbacks, args ) {
+-		var prop = QUnit.objectType( o );
+-		if ( prop ) {
+-			if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
+-				return callbacks[ prop ].apply( callbacks, args );
+-			} else {
+-				return callbacks[ prop ]; // or undefined
+-			}
+-		}
+-	}
+-
+-	// the real equiv function
+-	var innerEquiv,
+-		// stack to decide between skip/abort functions
+-		callers = [],
+-		// stack to avoiding loops from circular referencing
+-		parents = [],
+-
+-		getProto = Object.getPrototypeOf || function ( obj ) {
+-			return obj.__proto__;
+-		},
+-		callbacks = (function () {
+-
+-			// for string, boolean, number and null
+-			function useStrictEquality( b, a ) {
+-				/*jshint eqeqeq:false */
+-				if ( b instanceof a.constructor || a instanceof b.constructor ) {
+-					// to catch short annotaion VS 'new' annotation of a
+-					// declaration
+-					// e.g. var i = 1;
+-					// var j = new Number(1);
+-					return a == b;
+-				} else {
+-					return a === b;
+-				}
+-			}
+-
+-			return {
+-				"string": useStrictEquality,
+-				"boolean": useStrictEquality,
+-				"number": useStrictEquality,
+-				"null": useStrictEquality,
+-				"undefined": useStrictEquality,
+-
+-				"nan": function( b ) {
+-					return isNaN( b );
+-				},
+-
+-				"date": function( b, a ) {
+-					return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
+-				},
+-
+-				"regexp": function( b, a ) {
+-					return QUnit.objectType( b ) === "regexp" &&
+-						// the regex itself
+-						a.source === b.source &&
+-						// and its modifers
+-						a.global === b.global &&
+-						// (gmi) ...
+-						a.ignoreCase === b.ignoreCase &&
+-						a.multiline === b.multiline &&
+-						a.sticky === b.sticky;
+-				},
+-
+-				// - skip when the property is a method of an instance (OOP)
+-				// - abort otherwise,
+-				// initial === would have catch identical references anyway
+-				"function": function() {
+-					var caller = callers[callers.length - 1];
+-					return caller !== Object && typeof caller !== "undefined";
+-				},
+-
+-				"array": function( b, a ) {
+-					var i, j, len, loop;
+-
+-					// b could be an object literal here
+-					if ( QUnit.objectType( b ) !== "array" ) {
+-						return false;
+-					}
+-
+-					len = a.length;
+-					if ( len !== b.length ) {
+-						// safe and faster
+-						return false;
+-					}
+-
+-					// track reference to avoid circular references
+-					parents.push( a );
+-					for ( i = 0; i < len; i++ ) {
+-						loop = false;
+-						for ( j = 0; j < parents.length; j++ ) {
+-							if ( parents[j] === a[i] ) {
+-								loop = true;// dont rewalk array
+-							}
+-						}
+-						if ( !loop && !innerEquiv(a[i], b[i]) ) {
+-							parents.pop();
+-							return false;
+-						}
+-					}
+-					parents.pop();
+-					return true;
+-				},
+-
+-				"object": function( b, a ) {
+-					var i, j, loop,
+-						// Default to true
+-						eq = true,
+-						aProperties = [],
+-						bProperties = [];
+-
+-					// comparing constructors is more strict than using
+-					// instanceof
+-					if ( a.constructor !== b.constructor ) {
+-						// Allow objects with no prototype to be equivalent to
+-						// objects with Object as their constructor.
+-						if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
+-							( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
+-								return false;
+-						}
+-					}
+-
+-					// stack constructor before traversing properties
+-					callers.push( a.constructor );
+-					// track reference to avoid circular references
+-					parents.push( a );
+-
+-					for ( i in a ) { // be strict: don't ensures hasOwnProperty
+-									// and go deep
+-						loop = false;
+-						for ( j = 0; j < parents.length; j++ ) {
+-							if ( parents[j] === a[i] ) {
+-								// don't go down the same path twice
+-								loop = true;
+-							}
+-						}
+-						aProperties.push(i); // collect a's properties
+-
+-						if (!loop && !innerEquiv( a[i], b[i] ) ) {
+-							eq = false;
+-							break;
+-						}
+-					}
+-
+-					callers.pop(); // unstack, we are done
+-					parents.pop();
+-
+-					for ( i in b ) {
+-						bProperties.push( i ); // collect b's properties
+-					}
+-
+-					// Ensures identical properties name
+-					return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
+-				}
+-			};
+-		}());
+-
+-	innerEquiv = function() { // can take multiple arguments
+-		var args = [].slice.apply( arguments );
+-		if ( args.length < 2 ) {
+-			return true; // end transition
+-		}
+-
+-		return (function( a, b ) {
+-			if ( a === b ) {
+-				return true; // catch the most you can
+-			} else if ( a === null || b === null || typeof a === "undefined" ||
+-					typeof b === "undefined" ||
+-					QUnit.objectType(a) !== QUnit.objectType(b) ) {
+-				return false; // don't lose time with error prone cases
+-			} else {
+-				return bindCallbacks(a, callbacks, [ b, a ]);
+-			}
+-
+-			// apply transition with (1..n) arguments
+-		}( args[0], args[1] ) && arguments.callee.apply( this, args.splice(1, args.length - 1 )) );
+-	};
+-
+-	return innerEquiv;
+-}());
+-
+-/**
+- * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
+- * http://flesler.blogspot.com Licensed under BSD
+- * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
+- *
+- * @projectDescription Advanced and extensible data dumping for Javascript.
+- * @version 1.0.0
+- * @author Ariel Flesler
+- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+- */
+-QUnit.jsDump = (function() {
+-	function quote( str ) {
+-		return '"' + str.toString().replace( /"/g, '\\"' ) + '"';
+-	}
+-	function literal( o ) {
+-		return o + "";
+-	}
+-	function join( pre, arr, post ) {
+-		var s = jsDump.separator(),
+-			base = jsDump.indent(),
+-			inner = jsDump.indent(1);
+-		if ( arr.join ) {
+-			arr = arr.join( "," + s + inner );
+-		}
+-		if ( !arr ) {
+-			return pre + post;
+-		}
+-		return [ pre, inner + arr, base + post ].join(s);
+-	}
+-	function array( arr, stack ) {
+-		var i = arr.length, ret = new Array(i);
+-		this.up();
+-		while ( i-- ) {
+-			ret[i] = this.parse( arr[i] , undefined , stack);
+-		}
+-		this.down();
+-		return join( "[", ret, "]" );
+-	}
+-
+-	var reName = /^function (\w+)/,
+-		jsDump = {
+-			// type is used mostly internally, you can fix a (custom)type in advance
+-			parse: function( obj, type, stack ) {
+-				stack = stack || [ ];
+-				var inStack, res,
+-					parser = this.parsers[ type || this.typeOf(obj) ];
+-
+-				type = typeof parser;
+-				inStack = inArray( obj, stack );
+-
+-				if ( inStack !== -1 ) {
+-					return "recursion(" + (inStack - stack.length) + ")";
+-				}
+-				if ( type === "function" )  {
+-					stack.push( obj );
+-					res = parser.call( this, obj, stack );
+-					stack.pop();
+-					return res;
+-				}
+-				return ( type === "string" ) ? parser : this.parsers.error;
+-			},
+-			typeOf: function( obj ) {
+-				var type;
+-				if ( obj === null ) {
+-					type = "null";
+-				} else if ( typeof obj === "undefined" ) {
+-					type = "undefined";
+-				} else if ( QUnit.is( "regexp", obj) ) {
+-					type = "regexp";
+-				} else if ( QUnit.is( "date", obj) ) {
+-					type = "date";
+-				} else if ( QUnit.is( "function", obj) ) {
+-					type = "function";
+-				} else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
+-					type = "window";
+-				} else if ( obj.nodeType === 9 ) {
+-					type = "document";
+-				} else if ( obj.nodeType ) {
+-					type = "node";
+-				} else if (
+-					// native arrays
+-					toString.call( obj ) === "[object Array]" ||
+-					// NodeList objects
+-					( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
+-				) {
+-					type = "array";
+-				} else if ( obj.constructor === Error.prototype.constructor ) {
+-					type = "error";
+-				} else {
+-					type = typeof obj;
+-				}
+-				return type;
+-			},
+-			separator: function() {
+-				return this.multiline ?	this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
+-			},
+-			// extra can be a number, shortcut for increasing-calling-decreasing
+-			indent: function( extra ) {
+-				if ( !this.multiline ) {
+-					return "";
+-				}
+-				var chr = this.indentChar;
+-				if ( this.HTML ) {
+-					chr = chr.replace( /\t/g, "   " ).replace( / /g, "&nbsp;" );
+-				}
+-				return new Array( this._depth_ + (extra||0) ).join(chr);
+-			},
+-			up: function( a ) {
+-				this._depth_ += a || 1;
+-			},
+-			down: function( a ) {
+-				this._depth_ -= a || 1;
+-			},
+-			setParser: function( name, parser ) {
+-				this.parsers[name] = parser;
+-			},
+-			// The next 3 are exposed so you can use them
+-			quote: quote,
+-			literal: literal,
+-			join: join,
+-			//
+-			_depth_: 1,
+-			// This is the list of parsers, to modify them, use jsDump.setParser
+-			parsers: {
+-				window: "[Window]",
+-				document: "[Document]",
+-				error: function(error) {
+-					return "Error(\"" + error.message + "\")";
+-				},
+-				unknown: "[Unknown]",
+-				"null": "null",
+-				"undefined": "undefined",
+-				"function": function( fn ) {
+-					var ret = "function",
+-						// functions never have name in IE
+-						name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
+-
+-					if ( name ) {
+-						ret += " " + name;
+-					}
+-					ret += "( ";
+-
+-					ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
+-					return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
+-				},
+-				array: array,
+-				nodelist: array,
+-				"arguments": array,
+-				object: function( map, stack ) {
+-					var ret = [ ], keys, key, val, i;
+-					QUnit.jsDump.up();
+-					keys = [];
+-					for ( key in map ) {
+-						keys.push( key );
+-					}
+-					keys.sort();
+-					for ( i = 0; i < keys.length; i++ ) {
+-						key = keys[ i ];
+-						val = map[ key ];
+-						ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
+-					}
+-					QUnit.jsDump.down();
+-					return join( "{", ret, "}" );
+-				},
+-				node: function( node ) {
+-					var len, i, val,
+-						open = QUnit.jsDump.HTML ? "&lt;" : "<",
+-						close = QUnit.jsDump.HTML ? "&gt;" : ">",
+-						tag = node.nodeName.toLowerCase(),
+-						ret = open + tag,
+-						attrs = node.attributes;
+-
+-					if ( attrs ) {
+-						for ( i = 0, len = attrs.length; i < len; i++ ) {
+-							val = attrs[i].nodeValue;
+-							// IE6 includes all attributes in .attributes, even ones not explicitly set.
+-							// Those have values like undefined, null, 0, false, "" or "inherit".
+-							if ( val && val !== "inherit" ) {
+-								ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
+-							}
+-						}
+-					}
+-					ret += close;
+-
+-					// Show content of TextNode or CDATASection
+-					if ( node.nodeType === 3 || node.nodeType === 4 ) {
+-						ret += node.nodeValue;
+-					}
+-
+-					return ret + open + "/" + tag + close;
+-				},
+-				// function calls it internally, it's the arguments part of the function
+-				functionArgs: function( fn ) {
+-					var args,
+-						l = fn.length;
+-
+-					if ( !l ) {
+-						return "";
+-					}
+-
+-					args = new Array(l);
+-					while ( l-- ) {
+-						// 97 is 'a'
+-						args[l] = String.fromCharCode(97+l);
+-					}
+-					return " " + args.join( ", " ) + " ";
+-				},
+-				// object calls it internally, the key part of an item in a map
+-				key: quote,
+-				// function calls it internally, it's the content of the function
+-				functionCode: "[code]",
+-				// node calls it internally, it's an html attribute value
+-				attribute: quote,
+-				string: quote,
+-				date: quote,
+-				regexp: literal,
+-				number: literal,
+-				"boolean": literal
+-			},
+-			// if true, entities are escaped ( <, >, \t, space and \n )
+-			HTML: false,
+-			// indentation unit
+-			indentChar: "  ",
+-			// if true, items in a collection, are separated by a \n, else just a space.
+-			multiline: true
+-		};
+-
+-	return jsDump;
+-}());
+-
+-// from jquery.js
+-function inArray( elem, array ) {
+-	if ( array.indexOf ) {
+-		return array.indexOf( elem );
+-	}
+-
+-	for ( var i = 0, length = array.length; i < length; i++ ) {
+-		if ( array[ i ] === elem ) {
+-			return i;
+-		}
+-	}
+-
+-	return -1;
+-}
+-
+-/*
+- * Javascript Diff Algorithm
+- *  By John Resig (http://ejohn.org/)
+- *  Modified by Chu Alan "sprite"
+- *
+- * Released under the MIT license.
+- *
+- * More Info:
+- *  http://ejohn.org/projects/javascript-diff-algorithm/
+- *
+- * Usage: QUnit.diff(expected, actual)
+- *
+- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+- */
+-QUnit.diff = (function() {
+-	/*jshint eqeqeq:false, eqnull:true */
+-	function diff( o, n ) {
+-		var i,
+-			ns = {},
+-			os = {};
+-
+-		for ( i = 0; i < n.length; i++ ) {
+-			if ( !hasOwn.call( ns, n[i] ) ) {
+-				ns[ n[i] ] = {
+-					rows: [],
+-					o: null
+-				};
+-			}
+-			ns[ n[i] ].rows.push( i );
+-		}
+-
+-		for ( i = 0; i < o.length; i++ ) {
+-			if ( !hasOwn.call( os, o[i] ) ) {
+-				os[ o[i] ] = {
+-					rows: [],
+-					n: null
+-				};
+-			}
+-			os[ o[i] ].rows.push( i );
+-		}
+-
+-		for ( i in ns ) {
+-			if ( !hasOwn.call( ns, i ) ) {
+-				continue;
+-			}
+-			if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
+-				n[ ns[i].rows[0] ] = {
+-					text: n[ ns[i].rows[0] ],
+-					row: os[i].rows[0]
+-				};
+-				o[ os[i].rows[0] ] = {
+-					text: o[ os[i].rows[0] ],
+-					row: ns[i].rows[0]
+-				};
+-			}
+-		}
+-
+-		for ( i = 0; i < n.length - 1; i++ ) {
+-			if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
+-						n[ i + 1 ] == o[ n[i].row + 1 ] ) {
+-
+-				n[ i + 1 ] = {
+-					text: n[ i + 1 ],
+-					row: n[i].row + 1
+-				};
+-				o[ n[i].row + 1 ] = {
+-					text: o[ n[i].row + 1 ],
+-					row: i + 1
+-				};
+-			}
+-		}
+-
+-		for ( i = n.length - 1; i > 0; i-- ) {
+-			if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
+-						n[ i - 1 ] == o[ n[i].row - 1 ]) {
+-
+-				n[ i - 1 ] = {
+-					text: n[ i - 1 ],
+-					row: n[i].row - 1
+-				};
+-				o[ n[i].row - 1 ] = {
+-					text: o[ n[i].row - 1 ],
+-					row: i - 1
+-				};
+-			}
+-		}
+-
+-		return {
+-			o: o,
+-			n: n
+-		};
+-	}
+-
+-	return function( o, n ) {
+-		o = o.replace( /\s+$/, "" );
+-		n = n.replace( /\s+$/, "" );
+-
+-		var i, pre,
+-			str = "",
+-			out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
+-			oSpace = o.match(/\s+/g),
+-			nSpace = n.match(/\s+/g);
+-
+-		if ( oSpace == null ) {
+-			oSpace = [ " " ];
+-		}
+-		else {
+-			oSpace.push( " " );
+-		}
+-
+-		if ( nSpace == null ) {
+-			nSpace = [ " " ];
+-		}
+-		else {
+-			nSpace.push( " " );
+-		}
+-
+-		if ( out.n.length === 0 ) {
+-			for ( i = 0; i < out.o.length; i++ ) {
+-				str += "<del>" + out.o[i] + oSpace[i] + "</del>";
+-			}
+-		}
+-		else {
+-			if ( out.n[0].text == null ) {
+-				for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
+-					str += "<del>" + out.o[n] + oSpace[n] + "</del>";
+-				}
+-			}
+-
+-			for ( i = 0; i < out.n.length; i++ ) {
+-				if (out.n[i].text == null) {
+-					str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
+-				}
+-				else {
+-					// `pre` initialized at top of scope
+-					pre = "";
+-
+-					for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
+-						pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
+-					}
+-					str += " " + out.n[i].text + nSpace[i] + pre;
+-				}
+-			}
+-		}
+-
+-		return str;
+-	};
+-}());
+-
+-// for CommonJS enviroments, export everything
+-if ( typeof exports !== "undefined" ) {
+-	extend( exports, QUnit );
+-}
+-
+-// get at whatever the global object is, like window in browsers
+-}( (function() {return this;}.call()) ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.de-DE.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.de-DE.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.de-DE.js	(revision 15488)
+@@ -1,81 +0,0 @@
+-/*
+- * Globalize Culture de-DE
+- *
+- * http://github.com/jquery/globalize
+- *
+- * Copyright Software Freedom Conservancy, Inc.
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * This file was generated by the Globalize Culture Generator
+- * Translation: bugs found in this file need to be fixed in the generator
+- */
+-
+-(function( window, undefined ) {
+-
+-var Globalize;
+-
+-if ( typeof require !== "undefined"
+-	&& typeof exports !== "undefined"
+-	&& typeof module !== "undefined" ) {
+-	// Assume CommonJS
+-	Globalize = require( "globalize" );
+-} else {
+-	// Global variable
+-	Globalize = window.Globalize;
+-}
+-
+-Globalize.addCultureInfo( "de-DE", "default", {
+-	name: "de-DE",
+-	englishName: "German (Germany)",
+-	nativeName: "Deutsch (Deutschland)",
+-	language: "de",
+-	numberFormat: {
+-		",": ".",
+-		".": ",",
+-		NaN: "n. def.",
+-		negativeInfinity: "-unendlich",
+-		positiveInfinity: "+unendlich",
+-		percent: {
+-			pattern: ["-n%","n%"],
+-			",": ".",
+-			".": ","
+-		},
+-		currency: {
+-			pattern: ["-n $","n $"],
+-			",": ".",
+-			".": ",",
+-			symbol: "€"
+-		}
+-	},
+-	calendars: {
+-		standard: {
+-			"/": ".",
+-			firstDay: 1,
+-			days: {
+-				names: ["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],
+-				namesAbbr: ["So","Mo","Di","Mi","Do","Fr","Sa"],
+-				namesShort: ["So","Mo","Di","Mi","Do","Fr","Sa"]
+-			},
+-			months: {
+-				names: ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember",""],
+-				namesAbbr: ["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez",""]
+-			},
+-			AM: null,
+-			PM: null,
+-			eras: [{"name":"n. Chr.","start":null,"offset":0}],
+-			patterns: {
+-				d: "dd.MM.yyyy",
+-				D: "dddd, d. MMMM yyyy",
+-				t: "HH:mm",
+-				T: "HH:mm:ss",
+-				f: "dddd, d. MMMM yyyy HH:mm",
+-				F: "dddd, d. MMMM yyyy HH:mm:ss",
+-				M: "dd MMMM",
+-				Y: "MMMM yyyy"
+-			}
+-		}
+-	}
+-});
+-
+-}( this ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/globalize.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/globalize.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/globalize.js	(revision 15488)
+@@ -1,1573 +0,0 @@
+-/*!
+- * Globalize
+- *
+- * http://github.com/jquery/globalize
+- *
+- * Copyright Software Freedom Conservancy, Inc.
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- */
+-
+-(function( window, undefined ) {
+-
+-var Globalize,
+-	// private variables
+-	regexHex,
+-	regexInfinity,
+-	regexParseFloat,
+-	regexTrim,
+-	// private JavaScript utility functions
+-	arrayIndexOf,
+-	endsWith,
+-	extend,
+-	isArray,
+-	isFunction,
+-	isObject,
+-	startsWith,
+-	trim,
+-	truncate,
+-	zeroPad,
+-	// private Globalization utility functions
+-	appendPreOrPostMatch,
+-	expandFormat,
+-	formatDate,
+-	formatNumber,
+-	getTokenRegExp,
+-	getEra,
+-	getEraYear,
+-	parseExact,
+-	parseNegativePattern;
+-
+-// Global variable (Globalize) or CommonJS module (globalize)
+-Globalize = function( cultureSelector ) {
+-	return new Globalize.prototype.init( cultureSelector );
+-};
+-
+-if ( typeof require !== "undefined"
+-	&& typeof exports !== "undefined"
+-	&& typeof module !== "undefined" ) {
+-	// Assume CommonJS
+-	module.exports = Globalize;
+-} else {
+-	// Export as global variable
+-	window.Globalize = Globalize;
+-}
+-
+-Globalize.cultures = {};
+-
+-Globalize.prototype = {
+-	constructor: Globalize,
+-	init: function( cultureSelector ) {
+-		this.cultures = Globalize.cultures;
+-		this.cultureSelector = cultureSelector;
+-
+-		return this;
+-	}
+-};
+-Globalize.prototype.init.prototype = Globalize.prototype;
+-
+-// 1.	 When defining a culture, all fields are required except the ones stated as optional.
+-// 2.	 Each culture should have a ".calendars" object with at least one calendar named "standard"
+-//		 which serves as the default calendar in use by that culture.
+-// 3.	 Each culture should have a ".calendar" object which is the current calendar being used,
+-//		 it may be dynamically changed at any time to one of the calendars in ".calendars".
+-Globalize.cultures[ "default" ] = {
+-	// A unique name for the culture in the form <language code>-<country/region code>
+-	name: "en",
+-	// the name of the culture in the english language
+-	englishName: "English",
+-	// the name of the culture in its own language
+-	nativeName: "English",
+-	// whether the culture uses right-to-left text
+-	isRTL: false,
+-	// "language" is used for so-called "specific" cultures.
+-	// For example, the culture "es-CL" means "Spanish, in Chili".
+-	// It represents the Spanish-speaking culture as it is in Chili,
+-	// which might have different formatting rules or even translations
+-	// than Spanish in Spain. A "neutral" culture is one that is not
+-	// specific to a region. For example, the culture "es" is the generic
+-	// Spanish culture, which may be a more generalized version of the language
+-	// that may or may not be what a specific culture expects.
+-	// For a specific culture like "es-CL", the "language" field refers to the
+-	// neutral, generic culture information for the language it is using.
+-	// This is not always a simple matter of the string before the dash.
+-	// For example, the "zh-Hans" culture is netural (Simplified Chinese).
+-	// And the "zh-SG" culture is Simplified Chinese in Singapore, whose lanugage
+-	// field is "zh-CHS", not "zh".
+-	// This field should be used to navigate from a specific culture to it's
+-	// more general, neutral culture. If a culture is already as general as it
+-	// can get, the language may refer to itself.
+-	language: "en",
+-	// numberFormat defines general number formatting rules, like the digits in
+-	// each grouping, the group separator, and how negative numbers are displayed.
+-	numberFormat: {
+-		// [negativePattern]
+-		// Note, numberFormat.pattern has no "positivePattern" unlike percent and currency,
+-		// but is still defined as an array for consistency with them.
+-		//   negativePattern: one of "(n)|-n|- n|n-|n -"
+-		pattern: [ "-n" ],
+-		// number of decimal places normally shown
+-		decimals: 2,
+-		// string that separates number groups, as in 1,000,000
+-		",": ",",
+-		// string that separates a number from the fractional portion, as in 1.99
+-		".": ".",
+-		// array of numbers indicating the size of each number group.
+-		// TODO: more detailed description and example
+-		groupSizes: [ 3 ],
+-		// symbol used for positive numbers
+-		"+": "+",
+-		// symbol used for negative numbers
+-		"-": "-",
+-		// symbol used for NaN (Not-A-Number)
+-		NaN: "NaN",
+-		// symbol used for Negative Infinity
+-		negativeInfinity: "-Infinity",
+-		// symbol used for Positive Infinity
+-		positiveInfinity: "Infinity",
+-		percent: {
+-			// [negativePattern, positivePattern]
+-			//   negativePattern: one of "-n %|-n%|-%n|%-n|%n-|n-%|n%-|-% n|n %-|% n-|% -n|n- %"
+-			//   positivePattern: one of "n %|n%|%n|% n"
+-			pattern: [ "-n %", "n %" ],
+-			// number of decimal places normally shown
+-			decimals: 2,
+-			// array of numbers indicating the size of each number group.
+-			// TODO: more detailed description and example
+-			groupSizes: [ 3 ],
+-			// string that separates number groups, as in 1,000,000
+-			",": ",",
+-			// string that separates a number from the fractional portion, as in 1.99
+-			".": ".",
+-			// symbol used to represent a percentage
+-			symbol: "%"
+-		},
+-		currency: {
+-			// [negativePattern, positivePattern]
+-			//   negativePattern: one of "($n)|-$n|$-n|$n-|(n$)|-n$|n-$|n$-|-n $|-$ n|n $-|$ n-|$ -n|n- $|($ n)|(n $)"
+-			//   positivePattern: one of "$n|n$|$ n|n $"
+-			pattern: [ "($n)", "$n" ],
+-			// number of decimal places normally shown
+-			decimals: 2,
+-			// array of numbers indicating the size of each number group.
+-			// TODO: more detailed description and example
+-			groupSizes: [ 3 ],
+-			// string that separates number groups, as in 1,000,000
+-			",": ",",
+-			// string that separates a number from the fractional portion, as in 1.99
+-			".": ".",
+-			// symbol used to represent currency
+-			symbol: "$"
+-		}
+-	},
+-	// calendars defines all the possible calendars used by this culture.
+-	// There should be at least one defined with name "standard", and is the default
+-	// calendar used by the culture.
+-	// A calendar contains information about how dates are formatted, information about
+-	// the calendar's eras, a standard set of the date formats,
+-	// translations for day and month names, and if the calendar is not based on the Gregorian
+-	// calendar, conversion functions to and from the Gregorian calendar.
+-	calendars: {
+-		standard: {
+-			// name that identifies the type of calendar this is
+-			name: "Gregorian_USEnglish",
+-			// separator of parts of a date (e.g. "/" in 11/05/1955)
+-			"/": "/",
+-			// separator of parts of a time (e.g. ":" in 05:44 PM)
+-			":": ":",
+-			// the first day of the week (0 = Sunday, 1 = Monday, etc)
+-			firstDay: 0,
+-			days: {
+-				// full day names
+-				names: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
+-				// abbreviated day names
+-				namesAbbr: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
+-				// shortest day names
+-				namesShort: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ]
+-			},
+-			months: {
+-				// full month names (13 months for lunar calendards -- 13th month should be "" if not lunar)
+-				names: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" ],
+-				// abbreviated month names
+-				namesAbbr: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" ]
+-			},
+-			// AM and PM designators in one of these forms:
+-			// The usual view, and the upper and lower case versions
+-			//   [ standard, lowercase, uppercase ]
+-			// The culture does not use AM or PM (likely all standard date formats use 24 hour time)
+-			//   null
+-			AM: [ "AM", "am", "AM" ],
+-			PM: [ "PM", "pm", "PM" ],
+-			eras: [
+-				// eras in reverse chronological order.
+-				// name: the name of the era in this culture (e.g. A.D., C.E.)
+-				// start: when the era starts in ticks (gregorian, gmt), null if it is the earliest supported era.
+-				// offset: offset in years from gregorian calendar
+-				{
+-					"name": "A.D.",
+-					"start": null,
+-					"offset": 0
+-				}
+-			],
+-			// when a two digit year is given, it will never be parsed as a four digit
+-			// year greater than this year (in the appropriate era for the culture)
+-			// Set it as a full year (e.g. 2029) or use an offset format starting from
+-			// the current year: "+19" would correspond to 2029 if the current year 2010.
+-			twoDigitYearMax: 2029,
+-			// set of predefined date and time patterns used by the culture
+-			// these represent the format someone in this culture would expect
+-			// to see given the portions of the date that are shown.
+-			patterns: {
+-				// short date pattern
+-				d: "M/d/yyyy",
+-				// long date pattern
+-				D: "dddd, MMMM dd, yyyy",
+-				// short time pattern
+-				t: "h:mm tt",
+-				// long time pattern
+-				T: "h:mm:ss tt",
+-				// long date, short time pattern
+-				f: "dddd, MMMM dd, yyyy h:mm tt",
+-				// long date, long time pattern
+-				F: "dddd, MMMM dd, yyyy h:mm:ss tt",
+-				// month/day pattern
+-				M: "MMMM dd",
+-				// month/year pattern
+-				Y: "yyyy MMMM",
+-				// S is a sortable format that does not vary by culture
+-				S: "yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss"
+-			}
+-			// optional fields for each calendar:
+-			/*
+-			monthsGenitive:
+-				Same as months but used when the day preceeds the month.
+-				Omit if the culture has no genitive distinction in month names.
+-				For an explaination of genitive months, see http://blogs.msdn.com/michkap/archive/2004/12/25/332259.aspx
+-			convert:
+-				Allows for the support of non-gregorian based calendars. This convert object is used to
+-				to convert a date to and from a gregorian calendar date to handle parsing and formatting.
+-				The two functions:
+-					fromGregorian( date )
+-						Given the date as a parameter, return an array with parts [ year, month, day ]
+-						corresponding to the non-gregorian based year, month, and day for the calendar.
+-					toGregorian( year, month, day )
+-						Given the non-gregorian year, month, and day, return a new Date() object
+-						set to the corresponding date in the gregorian calendar.
+-			*/
+-		}
+-	},
+-	// For localized strings
+-	messages: {}
+-};
+-
+-Globalize.cultures[ "default" ].calendar = Globalize.cultures[ "default" ].calendars.standard;
+-
+-Globalize.cultures[ "en" ] = Globalize.cultures[ "default" ];
+-
+-Globalize.cultureSelector = "en";
+-
+-//
+-// private variables
+-//
+-
+-regexHex = /^0x[a-f0-9]+$/i;
+-regexInfinity = /^[+-]?infinity$/i;
+-regexParseFloat = /^[+-]?\d*\.?\d*(e[+-]?\d+)?$/;
+-regexTrim = /^\s+|\s+$/g;
+-
+-//
+-// private JavaScript utility functions
+-//
+-
+-arrayIndexOf = function( array, item ) {
+-	if ( array.indexOf ) {
+-		return array.indexOf( item );
+-	}
+-	for ( var i = 0, length = array.length; i < length; i++ ) {
+-		if ( array[i] === item ) {
+-			return i;
+-		}
+-	}
+-	return -1;
+-};
+-
+-endsWith = function( value, pattern ) {
+-	return value.substr( value.length - pattern.length ) === pattern;
+-};
+-
+-extend = function( deep ) {
+-	var options, name, src, copy, copyIsArray, clone,
+-		target = arguments[0] || {},
+-		i = 1,
+-		length = arguments.length,
+-		deep = false;
+-
+-	// Handle a deep copy situation
+-	if ( typeof target === "boolean" ) {
+-		deep = target;
+-		target = arguments[1] || {};
+-		// skip the boolean and the target
+-		i = 2;
+-	}
+-
+-	// Handle case when target is a string or something (possible in deep copy)
+-	if ( typeof target !== "object" && !isFunction(target) ) {
+-		target = {};
+-	}
+-
+-	for ( ; i < length; i++ ) {
+-		// Only deal with non-null/undefined values
+-		if ( (options = arguments[ i ]) != null ) {
+-			// Extend the base object
+-			for ( name in options ) {
+-				src = target[ name ];
+-				copy = options[ name ];
+-
+-				// Prevent never-ending loop
+-				if ( target === copy ) {
+-					continue;
+-				}
+-
+-				// Recurse if we're merging plain objects or arrays
+-				if ( deep && copy && ( isObject(copy) || (copyIsArray = isArray(copy)) ) ) {
+-					if ( copyIsArray ) {
+-						copyIsArray = false;
+-						clone = src && isArray(src) ? src : [];
+-
+-					} else {
+-						clone = src && isObject(src) ? src : {};
+-					}
+-
+-					// Never move original objects, clone them
+-					target[ name ] = extend( deep, clone, copy );
+-
+-				// Don't bring in undefined values
+-				} else if ( copy !== undefined ) {
+-					target[ name ] = copy;
+-				}
+-			}
+-		}
+-	}
+-
+-	// Return the modified object
+-	return target;
+-};
+-
+-isArray = Array.isArray || function( obj ) {
+-	return Object.prototype.toString.call( obj ) === "[object Array]";
+-};
+-
+-isFunction = function( obj ) {
+-	return Object.prototype.toString.call( obj ) === "[object Function]"
+-}
+-
+-isObject = function( obj ) {
+-	return Object.prototype.toString.call( obj ) === "[object Object]";
+-};
+-
+-startsWith = function( value, pattern ) {
+-	return value.indexOf( pattern ) === 0;
+-};
+-
+-trim = function( value ) {
+-	return ( value + "" ).replace( regexTrim, "" );
+-};
+-
+-truncate = function( value ) {
+-	return value | 0;
+-};
+-
+-zeroPad = function( str, count, left ) {
+-	var l;
+-	for ( l = str.length; l < count; l += 1 ) {
+-		str = ( left ? ("0" + str) : (str + "0") );
+-	}
+-	return str;
+-};
+-
+-//
+-// private Globalization utility functions
+-//
+-
+-appendPreOrPostMatch = function( preMatch, strings ) {
+-	// appends pre- and post- token match strings while removing escaped characters.
+-	// Returns a single quote count which is used to determine if the token occurs
+-	// in a string literal.
+-	var quoteCount = 0,
+-		escaped = false;
+-	for ( var i = 0, il = preMatch.length; i < il; i++ ) {
+-		var c = preMatch.charAt( i );
+-		switch ( c ) {
+-			case "\'":
+-				if ( escaped ) {
+-					strings.push( "\'" );
+-				}
+-				else {
+-					quoteCount++;
+-				}
+-				escaped = false;
+-				break;
+-			case "\\":
+-				if ( escaped ) {
+-					strings.push( "\\" );
+-				}
+-				escaped = !escaped;
+-				break;
+-			default:
+-				strings.push( c );
+-				escaped = false;
+-				break;
+-		}
+-	}
+-	return quoteCount;
+-};
+-
+-expandFormat = function( cal, format ) {
+-	// expands unspecified or single character date formats into the full pattern.
+-	format = format || "F";
+-	var pattern,
+-		patterns = cal.patterns,
+-		len = format.length;
+-	if ( len === 1 ) {
+-		pattern = patterns[ format ];
+-		if ( !pattern ) {
+-			throw "Invalid date format string \'" + format + "\'.";
+-		}
+-		format = pattern;
+-	}
+-	else if ( len === 2 && format.charAt(0) === "%" ) {
+-		// %X escape format -- intended as a custom format string that is only one character, not a built-in format.
+-		format = format.charAt( 1 );
+-	}
+-	return format;
+-};
+-
+-formatDate = function( value, format, culture ) {
+-	var cal = culture.calendar,
+-		convert = cal.convert;
+-
+-	if ( !format || !format.length || format === "i" ) {
+-		var ret;
+-		if ( culture && culture.name.length ) {
+-			if ( convert ) {
+-				// non-gregorian calendar, so we cannot use built-in toLocaleString()
+-				ret = formatDate( value, cal.patterns.F, culture );
+-			}
+-			else {
+-				var eraDate = new Date( value.getTime() ),
+-					era = getEra( value, cal.eras );
+-				eraDate.setFullYear( getEraYear(value, cal, era) );
+-				ret = eraDate.toLocaleString();
+-			}
+-		}
+-		else {
+-			ret = value.toString();
+-		}
+-		return ret;
+-	}
+-
+-	var eras = cal.eras,
+-		sortable = format === "s";
+-	format = expandFormat( cal, format );
+-
+-	// Start with an empty string
+-	ret = [];
+-	var hour,
+-		zeros = [ "0", "00", "000" ],
+-		foundDay,
+-		checkedDay,
+-		dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g,
+-		quoteCount = 0,
+-		tokenRegExp = getTokenRegExp(),
+-		converted;
+-
+-	function padZeros( num, c ) {
+-		var r, s = num + "";
+-		if ( c > 1 && s.length < c ) {
+-			r = ( zeros[c - 2] + s);
+-			return r.substr( r.length - c, c );
+-		}
+-		else {
+-			r = s;
+-		}
+-		return r;
+-	}
+-
+-	function hasDay() {
+-		if ( foundDay || checkedDay ) {
+-			return foundDay;
+-		}
+-		foundDay = dayPartRegExp.test( format );
+-		checkedDay = true;
+-		return foundDay;
+-	}
+-
+-	function getPart( date, part ) {
+-		if ( converted ) {
+-			return converted[ part ];
+-		}
+-		switch ( part ) {
+-			case 0: return date.getFullYear();
+-			case 1: return date.getMonth();
+-			case 2: return date.getDate();
+-		}
+-	}
+-
+-	if ( !sortable && convert ) {
+-		converted = convert.fromGregorian( value );
+-	}
+-
+-	for ( ; ; ) {
+-		// Save the current index
+-		var index = tokenRegExp.lastIndex,
+-			// Look for the next pattern
+-			ar = tokenRegExp.exec( format );
+-
+-		// Append the text before the pattern (or the end of the string if not found)
+-		var preMatch = format.slice( index, ar ? ar.index : format.length );
+-		quoteCount += appendPreOrPostMatch( preMatch, ret );
+-
+-		if ( !ar ) {
+-			break;
+-		}
+-
+-		// do not replace any matches that occur inside a string literal.
+-		if ( quoteCount % 2 ) {
+-			ret.push( ar[0] );
+-			continue;
+-		}
+-
+-		var current = ar[ 0 ],
+-			clength = current.length;
+-
+-		switch ( current ) {
+-			case "ddd":
+-				//Day of the week, as a three-letter abbreviation
+-			case "dddd":
+-				// Day of the week, using the full name
+-				var names = ( clength === 3 ) ? cal.days.namesAbbr : cal.days.names;
+-				ret.push( names[value.getDay()] );
+-				break;
+-			case "d":
+-				// Day of month, without leading zero for single-digit days
+-			case "dd":
+-				// Day of month, with leading zero for single-digit days
+-				foundDay = true;
+-				ret.push(
+-					padZeros( getPart(value, 2), clength )
+-				);
+-				break;
+-			case "MMM":
+-				// Month, as a three-letter abbreviation
+-			case "MMMM":
+-				// Month, using the full name
+-				var part = getPart( value, 1 );
+-				ret.push(
+-					( cal.monthsGenitive && hasDay() )
+-					?
+-					cal.monthsGenitive[ clength === 3 ? "namesAbbr" : "names" ][ part ]
+-					:
+-					cal.months[ clength === 3 ? "namesAbbr" : "names" ][ part ]
+-				);
+-				break;
+-			case "M":
+-				// Month, as digits, with no leading zero for single-digit months
+-			case "MM":
+-				// Month, as digits, with leading zero for single-digit months
+-				ret.push(
+-					padZeros( getPart(value, 1) + 1, clength )
+-				);
+-				break;
+-			case "y":
+-				// Year, as two digits, but with no leading zero for years less than 10
+-			case "yy":
+-				// Year, as two digits, with leading zero for years less than 10
+-			case "yyyy":
+-				// Year represented by four full digits
+-				part = converted ? converted[ 0 ] : getEraYear( value, cal, getEra(value, eras), sortable );
+-				if ( clength < 4 ) {
+-					part = part % 100;
+-				}
+-				ret.push(
+-					padZeros( part, clength )
+-				);
+-				break;
+-			case "h":
+-				// Hours with no leading zero for single-digit hours, using 12-hour clock
+-			case "hh":
+-				// Hours with leading zero for single-digit hours, using 12-hour clock
+-				hour = value.getHours() % 12;
+-				if ( hour === 0 ) hour = 12;
+-				ret.push(
+-					padZeros( hour, clength )
+-				);
+-				break;
+-			case "H":
+-				// Hours with no leading zero for single-digit hours, using 24-hour clock
+-			case "HH":
+-				// Hours with leading zero for single-digit hours, using 24-hour clock
+-				ret.push(
+-					padZeros( value.getHours(), clength )
+-				);
+-				break;
+-			case "m":
+-				// Minutes with no leading zero for single-digit minutes
+-			case "mm":
+-				// Minutes with leading zero for single-digit minutes
+-				ret.push(
+-					padZeros( value.getMinutes(), clength )
+-				);
+-				break;
+-			case "s":
+-				// Seconds with no leading zero for single-digit seconds
+-			case "ss":
+-				// Seconds with leading zero for single-digit seconds
+-				ret.push(
+-					padZeros( value.getSeconds(), clength )
+-				);
+-				break;
+-			case "t":
+-				// One character am/pm indicator ("a" or "p")
+-			case "tt":
+-				// Multicharacter am/pm indicator
+-				part = value.getHours() < 12 ? ( cal.AM ? cal.AM[0] : " " ) : ( cal.PM ? cal.PM[0] : " " );
+-				ret.push( clength === 1 ? part.charAt(0) : part );
+-				break;
+-			case "f":
+-				// Deciseconds
+-			case "ff":
+-				// Centiseconds
+-			case "fff":
+-				// Milliseconds
+-				ret.push(
+-					padZeros( value.getMilliseconds(), 3 ).substr( 0, clength )
+-				);
+-				break;
+-			case "z":
+-				// Time zone offset, no leading zero
+-			case "zz":
+-				// Time zone offset with leading zero
+-				hour = value.getTimezoneOffset() / 60;
+-				ret.push(
+-					( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), clength )
+-				);
+-				break;
+-			case "zzz":
+-				// Time zone offset with leading zero
+-				hour = value.getTimezoneOffset() / 60;
+-				ret.push(
+-					( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), 2 )
+-					// Hard coded ":" separator, rather than using cal.TimeSeparator
+-					// Repeated here for consistency, plus ":" was already assumed in date parsing.
+-					+ ":" + padZeros( Math.abs(value.getTimezoneOffset() % 60), 2 )
+-				);
+-				break;
+-			case "g":
+-			case "gg":
+-				if ( cal.eras ) {
+-					ret.push(
+-						cal.eras[ getEra(value, eras) ].name
+-					);
+-				}
+-				break;
+-		case "/":
+-			ret.push( cal["/"] );
+-			break;
+-		default:
+-			throw "Invalid date format pattern \'" + current + "\'.";
+-			break;
+-		}
+-	}
+-	return ret.join( "" );
+-};
+-
+-// formatNumber
+-(function() {
+-	var expandNumber;
+-
+-	expandNumber = function( number, precision, formatInfo ) {
+-		var groupSizes = formatInfo.groupSizes,
+-			curSize = groupSizes[ 0 ],
+-			curGroupIndex = 1,
+-			factor = Math.pow( 10, precision ),
+-			rounded = Math.round( number * factor ) / factor;
+-
+-		if ( !isFinite(rounded) ) {
+-			rounded = number;
+-		}
+-		number = rounded;
+-
+-		var numberString = number+"",
+-			right = "",
+-			split = numberString.split( /e/i ),
+-			exponent = split.length > 1 ? parseInt( split[1], 10 ) : 0;
+-		numberString = split[ 0 ];
+-		split = numberString.split( "." );
+-		numberString = split[ 0 ];
+-		right = split.length > 1 ? split[ 1 ] : "";
+-
+-		var l;
+-		if ( exponent > 0 ) {
+-			right = zeroPad( right, exponent, false );
+-			numberString += right.slice( 0, exponent );
+-			right = right.substr( exponent );
+-		}
+-		else if ( exponent < 0 ) {
+-			exponent = -exponent;
+-			numberString = zeroPad( numberString, exponent + 1 );
+-			right = numberString.slice( -exponent, numberString.length ) + right;
+-			numberString = numberString.slice( 0, -exponent );
+-		}
+-
+-		if ( precision > 0 ) {
+-			right = formatInfo[ "." ] +
+-				( (right.length > precision) ? right.slice(0, precision) : zeroPad(right, precision) );
+-		}
+-		else {
+-			right = "";
+-		}
+-
+-		var stringIndex = numberString.length - 1,
+-			sep = formatInfo[ "," ],
+-			ret = "";
+-
+-		while ( stringIndex >= 0 ) {
+-			if ( curSize === 0 || curSize > stringIndex ) {
+-				return numberString.slice( 0, stringIndex + 1 ) + ( ret.length ? (sep + ret + right) : right );
+-			}
+-			ret = numberString.slice( stringIndex - curSize + 1, stringIndex + 1 ) + ( ret.length ? (sep + ret) : "" );
+-
+-			stringIndex -= curSize;
+-
+-			if ( curGroupIndex < groupSizes.length ) {
+-				curSize = groupSizes[ curGroupIndex ];
+-				curGroupIndex++;
+-			}
+-		}
+-
+-		return numberString.slice( 0, stringIndex + 1 ) + sep + ret + right;
+-	};
+-
+-	formatNumber = function( value, format, culture ) {
+-		if ( !isFinite(value) ) {
+-			if ( value === Infinity ) {
+-				return culture.numberFormat.positiveInfinity;
+-			}
+-			if ( value === -Infinity ) {
+-				return culture.numberFormat.negativeInfinity;
+-			}
+-			return culture.numberFormat.NaN;
+-		}
+-		if ( !format || format === "i" ) {
+-			return culture.name.length ? value.toLocaleString() : value.toString();
+-		}
+-		format = format || "D";
+-
+-		var nf = culture.numberFormat,
+-			number = Math.abs( value ),
+-			precision = -1,
+-			pattern;
+-		if ( format.length > 1 ) precision = parseInt( format.slice(1), 10 );
+-
+-		var current = format.charAt( 0 ).toUpperCase(),
+-			formatInfo;
+-
+-		switch ( current ) {
+-			case "D":
+-				pattern = "n";
+-				number = truncate( number );
+-				if ( precision !== -1 ) {
+-					number = zeroPad( "" + number, precision, true );
+-				}
+-				if ( value < 0 ) number = "-" + number;
+-				break;
+-			case "N":
+-				formatInfo = nf;
+-				// fall through
+-			case "C":
+-				formatInfo = formatInfo || nf.currency;
+-				// fall through
+-			case "P":
+-				formatInfo = formatInfo || nf.percent;
+-				pattern = value < 0 ? formatInfo.pattern[ 0 ] : ( formatInfo.pattern[1] || "n" );
+-				if ( precision === -1 ) precision = formatInfo.decimals;
+-				number = expandNumber( number * (current === "P" ? 100 : 1), precision, formatInfo );
+-				break;
+-			default:
+-				throw "Bad number format specifier: " + current;
+-		}
+-
+-		var patternParts = /n|\$|-|%/g,
+-			ret = "";
+-		for ( ; ; ) {
+-			var index = patternParts.lastIndex,
+-				ar = patternParts.exec( pattern );
+-
+-			ret += pattern.slice( index, ar ? ar.index : pattern.length );
+-
+-			if ( !ar ) {
+-				break;
+-			}
+-
+-			switch ( ar[0] ) {
+-				case "n":
+-					ret += number;
+-					break;
+-				case "$":
+-					ret += nf.currency.symbol;
+-					break;
+-				case "-":
+-					// don't make 0 negative
+-					if ( /[1-9]/.test(number) ) {
+-						ret += nf[ "-" ];
+-					}
+-					break;
+-				case "%":
+-					ret += nf.percent.symbol;
+-					break;
+-			}
+-		}
+-
+-		return ret;
+-	};
+-
+-}());
+-
+-getTokenRegExp = function() {
+-	// regular expression for matching date and time tokens in format strings.
+-	return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g;
+-};
+-
+-getEra = function( date, eras ) {
+-	if ( !eras ) return 0;
+-	var start, ticks = date.getTime();
+-	for ( var i = 0, l = eras.length; i < l; i++ ) {
+-		start = eras[ i ].start;
+-		if ( start === null || ticks >= start ) {
+-			return i;
+-		}
+-	}
+-	return 0;
+-};
+-
+-getEraYear = function( date, cal, era, sortable ) {
+-	var year = date.getFullYear();
+-	if ( !sortable && cal.eras ) {
+-		// convert normal gregorian year to era-shifted gregorian
+-		// year by subtracting the era offset
+-		year -= cal.eras[ era ].offset;
+-	}
+-	return year;
+-};
+-
+-// parseExact
+-(function() {
+-	var expandYear,
+-		getDayIndex,
+-		getMonthIndex,
+-		getParseRegExp,
+-		outOfRange,
+-		toUpper,
+-		toUpperArray;
+-
+-	expandYear = function( cal, year ) {
+-		// expands 2-digit year into 4 digits.
+-		var now = new Date(),
+-			era = getEra( now );
+-		if ( year < 100 ) {
+-			var twoDigitYearMax = cal.twoDigitYearMax;
+-			twoDigitYearMax = typeof twoDigitYearMax === "string" ? new Date().getFullYear() % 100 + parseInt( twoDigitYearMax, 10 ) : twoDigitYearMax;
+-			var curr = getEraYear( now, cal, era );
+-			year += curr - ( curr % 100 );
+-			if ( year > twoDigitYearMax ) {
+-				year -= 100;
+-			}
+-		}
+-		return year;
+-	};
+-
+-	getDayIndex = function	( cal, value, abbr ) {
+-		var ret,
+-			days = cal.days,
+-			upperDays = cal._upperDays;
+-		if ( !upperDays ) {
+-			cal._upperDays = upperDays = [
+-				toUpperArray( days.names ),
+-				toUpperArray( days.namesAbbr ),
+-				toUpperArray( days.namesShort )
+-			];
+-		}
+-		value = toUpper( value );
+-		if ( abbr ) {
+-			ret = arrayIndexOf( upperDays[1], value );
+-			if ( ret === -1 ) {
+-				ret = arrayIndexOf( upperDays[2], value );
+-			}
+-		}
+-		else {
+-			ret = arrayIndexOf( upperDays[0], value );
+-		}
+-		return ret;
+-	};
+-
+-	getMonthIndex = function( cal, value, abbr ) {
+-		var months = cal.months,
+-			monthsGen = cal.monthsGenitive || cal.months,
+-			upperMonths = cal._upperMonths,
+-			upperMonthsGen = cal._upperMonthsGen;
+-		if ( !upperMonths ) {
+-			cal._upperMonths = upperMonths = [
+-				toUpperArray( months.names ),
+-				toUpperArray( months.namesAbbr )
+-			];
+-			cal._upperMonthsGen = upperMonthsGen = [
+-				toUpperArray( monthsGen.names ),
+-				toUpperArray( monthsGen.namesAbbr )
+-			];
+-		}
+-		value = toUpper( value );
+-		var i = arrayIndexOf( abbr ? upperMonths[1] : upperMonths[0], value );
+-		if ( i < 0 ) {
+-			i = arrayIndexOf( abbr ? upperMonthsGen[1] : upperMonthsGen[0], value );
+-		}
+-		return i;
+-	};
+-
+-	getParseRegExp = function( cal, format ) {
+-		// converts a format string into a regular expression with groups that
+-		// can be used to extract date fields from a date string.
+-		// check for a cached parse regex.
+-		var re = cal._parseRegExp;
+-		if ( !re ) {
+-			cal._parseRegExp = re = {};
+-		}
+-		else {
+-			var reFormat = re[ format ];
+-			if ( reFormat ) {
+-				return reFormat;
+-			}
+-		}
+-
+-		// expand single digit formats, then escape regular expression characters.
+-		var expFormat = expandFormat( cal, format ).replace( /([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1" ),
+-			regexp = [ "^" ],
+-			groups = [],
+-			index = 0,
+-			quoteCount = 0,
+-			tokenRegExp = getTokenRegExp(),
+-			match;
+-
+-		// iterate through each date token found.
+-		while ( (match = tokenRegExp.exec(expFormat)) !== null ) {
+-			var preMatch = expFormat.slice( index, match.index );
+-			index = tokenRegExp.lastIndex;
+-
+-			// don't replace any matches that occur inside a string literal.
+-			quoteCount += appendPreOrPostMatch( preMatch, regexp );
+-			if ( quoteCount % 2 ) {
+-				regexp.push( match[0] );
+-				continue;
+-			}
+-
+-			// add a regex group for the token.
+-			var m = match[ 0 ],
+-				len = m.length,
+-				add;
+-			switch ( m ) {
+-				case "dddd": case "ddd":
+-				case "MMMM": case "MMM":
+-				case "gg": case "g":
+-					add = "(\\D+)";
+-					break;
+-				case "tt": case "t":
+-					add = "(\\D*)";
+-					break;
+-				case "yyyy":
+-				case "fff":
+-				case "ff":
+-				case "f":
+-					add = "(\\d{" + len + "})";
+-					break;
+-				case "dd": case "d":
+-				case "MM": case "M":
+-				case "yy": case "y":
+-				case "HH": case "H":
+-				case "hh": case "h":
+-				case "mm": case "m":
+-				case "ss": case "s":
+-					add = "(\\d\\d?)";
+-					break;
+-				case "zzz":
+-					add = "([+-]?\\d\\d?:\\d{2})";
+-					break;
+-				case "zz": case "z":
+-					add = "([+-]?\\d\\d?)";
+-					break;
+-				case "/":
+-					add = "(\\" + cal[ "/" ] + ")";
+-					break;
+-				default:
+-					throw "Invalid date format pattern \'" + m + "\'.";
+-					break;
+-			}
+-			if ( add ) {
+-				regexp.push( add );
+-			}
+-			groups.push( match[0] );
+-		}
+-		appendPreOrPostMatch( expFormat.slice(index), regexp );
+-		regexp.push( "$" );
+-
+-		// allow whitespace to differ when matching formats.
+-		var regexpStr = regexp.join( "" ).replace( /\s+/g, "\\s+" ),
+-			parseRegExp = { "regExp": regexpStr, "groups": groups };
+-
+-		// cache the regex for this format.
+-		return re[ format ] = parseRegExp;
+-	};
+-
+-	outOfRange = function( value, low, high ) {
+-		return value < low || value > high;
+-	};
+-
+-	toUpper = function( value ) {
+-		// "he-IL" has non-breaking space in weekday names.
+-		return value.split( "\u00A0" ).join( " " ).toUpperCase();
+-	};
+-
+-	toUpperArray = function( arr ) {
+-		var results = [];
+-		for ( var i = 0, l = arr.length; i < l; i++ ) {
+-			results[ i ] = toUpper( arr[i] );
+-		}
+-		return results;
+-	};
+-
+-	parseExact = function( value, format, culture ) {
+-		// try to parse the date string by matching against the format string
+-		// while using the specified culture for date field names.
+-		value = trim( value );
+-		var cal = culture.calendar,
+-			// convert date formats into regular expressions with groupings.
+-			// use the regexp to determine the input format and extract the date fields.
+-			parseInfo = getParseRegExp( cal, format ),
+-			match = new RegExp( parseInfo.regExp ).exec( value );
+-		if ( match === null ) {
+-			return null;
+-		}
+-		// found a date format that matches the input.
+-		var groups = parseInfo.groups,
+-			era = null, year = null, month = null, date = null, weekDay = null,
+-			hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null,
+-			pmHour = false;
+-		// iterate the format groups to extract and set the date fields.
+-		for ( var j = 0, jl = groups.length; j < jl; j++ ) {
+-			var matchGroup = match[ j + 1 ];
+-			if ( matchGroup ) {
+-				var current = groups[ j ],
+-					clength = current.length,
+-					matchInt = parseInt( matchGroup, 10 );
+-				switch ( current ) {
+-					case "dd": case "d":
+-						// Day of month.
+-						date = matchInt;
+-						// check that date is generally in valid range, also checking overflow below.
+-						if ( outOfRange(date, 1, 31) ) return null;
+-						break;
+-					case "MMM": case "MMMM":
+-						month = getMonthIndex( cal, matchGroup, clength === 3 );
+-						if ( outOfRange(month, 0, 11) ) return null;
+-						break;
+-					case "M": case "MM":
+-						// Month.
+-						month = matchInt - 1;
+-						if ( outOfRange(month, 0, 11) ) return null;
+-						break;
+-					case "y": case "yy":
+-					case "yyyy":
+-						year = clength < 4 ? expandYear( cal, matchInt ) : matchInt;
+-						if ( outOfRange(year, 0, 9999) ) return null;
+-						break;
+-					case "h": case "hh":
+-						// Hours (12-hour clock).
+-						hour = matchInt;
+-						if ( hour === 12 ) hour = 0;
+-						if ( outOfRange(hour, 0, 11) ) return null;
+-						break;
+-					case "H": case "HH":
+-						// Hours (24-hour clock).
+-						hour = matchInt;
+-						if ( outOfRange(hour, 0, 23) ) return null;
+-						break;
+-					case "m": case "mm":
+-						// Minutes.
+-						min = matchInt;
+-						if ( outOfRange(min, 0, 59) ) return null;
+-						break;
+-					case "s": case "ss":
+-						// Seconds.
+-						sec = matchInt;
+-						if ( outOfRange(sec, 0, 59) ) return null;
+-						break;
+-					case "tt": case "t":
+-						// AM/PM designator.
+-						// see if it is standard, upper, or lower case PM. If not, ensure it is at least one of
+-						// the AM tokens. If not, fail the parse for this format.
+-						pmHour = cal.PM && ( matchGroup === cal.PM[0] || matchGroup === cal.PM[1] || matchGroup === cal.PM[2] );
+-						if (
+-							!pmHour && (
+-								!cal.AM || ( matchGroup !== cal.AM[0] && matchGroup !== cal.AM[1] && matchGroup !== cal.AM[2] )
+-							)
+-						) return null;
+-						break;
+-					case "f":
+-						// Deciseconds.
+-					case "ff":
+-						// Centiseconds.
+-					case "fff":
+-						// Milliseconds.
+-						msec = matchInt * Math.pow( 10, 3 - clength );
+-						if ( outOfRange(msec, 0, 999) ) return null;
+-						break;
+-					case "ddd":
+-						// Day of week.
+-					case "dddd":
+-						// Day of week.
+-						weekDay = getDayIndex( cal, matchGroup, clength === 3 );
+-						if ( outOfRange(weekDay, 0, 6) ) return null;
+-						break;
+-					case "zzz":
+-						// Time zone offset in +/- hours:min.
+-						var offsets = matchGroup.split( /:/ );
+-						if ( offsets.length !== 2 ) return null;
+-						hourOffset = parseInt( offsets[0], 10 );
+-						if ( outOfRange(hourOffset, -12, 13) ) return null;
+-						var minOffset = parseInt( offsets[1], 10 );
+-						if ( outOfRange(minOffset, 0, 59) ) return null;
+-						tzMinOffset = ( hourOffset * 60 ) + ( startsWith(matchGroup, "-") ? -minOffset : minOffset );
+-						break;
+-					case "z": case "zz":
+-						// Time zone offset in +/- hours.
+-						hourOffset = matchInt;
+-						if ( outOfRange(hourOffset, -12, 13) ) return null;
+-						tzMinOffset = hourOffset * 60;
+-						break;
+-					case "g": case "gg":
+-						var eraName = matchGroup;
+-						if ( !eraName || !cal.eras ) return null;
+-						eraName = trim( eraName.toLowerCase() );
+-						for ( var i = 0, l = cal.eras.length; i < l; i++ ) {
+-							if ( eraName === cal.eras[i].name.toLowerCase() ) {
+-								era = i;
+-								break;
+-							}
+-						}
+-						// could not find an era with that name
+-						if ( era === null ) return null;
+-						break;
+-				}
+-			}
+-		}
+-		var result = new Date(), defaultYear, convert = cal.convert;
+-		defaultYear = convert ? convert.fromGregorian( result )[ 0 ] : result.getFullYear();
+-		if ( year === null ) {
+-			year = defaultYear;
+-		}
+-		else if ( cal.eras ) {
+-			// year must be shifted to normal gregorian year
+-			// but not if year was not specified, its already normal gregorian
+-			// per the main if clause above.
+-			year += cal.eras[( era || 0 )].offset;
+-		}
+-		// set default day and month to 1 and January, so if unspecified, these are the defaults
+-		// instead of the current day/month.
+-		if ( month === null ) {
+-			month = 0;
+-		}
+-		if ( date === null ) {
+-			date = 1;
+-		}
+-		// now have year, month, and date, but in the culture's calendar.
+-		// convert to gregorian if necessary
+-		if ( convert ) {
+-			result = convert.toGregorian( year, month, date );
+-			// conversion failed, must be an invalid match
+-			if ( result === null ) return null;
+-		}
+-		else {
+-			// have to set year, month and date together to avoid overflow based on current date.
+-			result.setFullYear( year, month, date );
+-			// check to see if date overflowed for specified month (only checked 1-31 above).
+-			if ( result.getDate() !== date ) return null;
+-			// invalid day of week.
+-			if ( weekDay !== null && result.getDay() !== weekDay ) {
+-				return null;
+-			}
+-		}
+-		// if pm designator token was found make sure the hours fit the 24-hour clock.
+-		if ( pmHour && hour < 12 ) {
+-			hour += 12;
+-		}
+-		result.setHours( hour, min, sec, msec );
+-		if ( tzMinOffset !== null ) {
+-			// adjust timezone to utc before applying local offset.
+-			var adjustedMin = result.getMinutes() - ( tzMinOffset + result.getTimezoneOffset() );
+-			// Safari limits hours and minutes to the range of -127 to 127.	 We need to use setHours
+-			// to ensure both these fields will not exceed this range.	adjustedMin will range
+-			// somewhere between -1440 and 1500, so we only need to split this into hours.
+-			result.setHours( result.getHours() + parseInt(adjustedMin / 60, 10), adjustedMin % 60 );
+-		}
+-		return result;
+-	};
+-}());
+-
+-parseNegativePattern = function( value, nf, negativePattern ) {
+-	var neg = nf[ "-" ],
+-		pos = nf[ "+" ],
+-		ret;
+-	switch ( negativePattern ) {
+-		case "n -":
+-			neg = " " + neg;
+-			pos = " " + pos;
+-			// fall through
+-		case "n-":
+-			if ( endsWith(value, neg) ) {
+-				ret = [ "-", value.substr(0, value.length - neg.length) ];
+-			}
+-			else if ( endsWith(value, pos) ) {
+-				ret = [ "+", value.substr(0, value.length - pos.length) ];
+-			}
+-			break;
+-		case "- n":
+-			neg += " ";
+-			pos += " ";
+-			// fall through
+-		case "-n":
+-			if ( startsWith(value, neg) ) {
+-				ret = [ "-", value.substr(neg.length) ];
+-			}
+-			else if ( startsWith(value, pos) ) {
+-				ret = [ "+", value.substr(pos.length) ];
+-			}
+-			break;
+-		case "(n)":
+-			if ( startsWith(value, "(") && endsWith(value, ")") ) {
+-				ret = [ "-", value.substr(1, value.length - 2) ];
+-			}
+-			break;
+-	}
+-	return ret || [ "", value ];
+-};
+-
+-//
+-// public instance functions
+-//
+-
+-Globalize.prototype.findClosestCulture = function( cultureSelector ) {
+-	return Globalize.findClosestCulture.call( this, cultureSelector );
+-};
+-
+-Globalize.prototype.format = function( value, format, cultureSelector ) {
+-	return Globalize.format.call( this, value, format, cultureSelector );
+-};
+-
+-Globalize.prototype.localize = function( key, cultureSelector ) {
+-	return Globalize.localize.call( this, key, cultureSelector );
+-};
+-
+-Globalize.prototype.parseInt = function( value, radix, cultureSelector ) {
+-	return Globalize.parseInt.call( this, value, radix, cultureSelector );
+-};
+-
+-Globalize.prototype.parseFloat = function( value, radix, cultureSelector ) {
+-	return Globalize.parseFloat.call( this, value, radix, cultureSelector );
+-};
+-
+-Globalize.prototype.culture = function( cultureSelector ) {
+-	return Globalize.culture.call( this, cultureSelector );
+-};
+-
+-//
+-// public singleton functions
+-//
+-
+-Globalize.addCultureInfo = function( cultureName, baseCultureName, info ) {
+-
+-	var base = {},
+-		isNew = false;
+-
+-	if ( typeof cultureName !== "string" ) {
+-		// cultureName argument is optional string. If not specified, assume info is first
+-		// and only argument. Specified info deep-extends current culture.
+-		info = cultureName;
+-		cultureName = this.culture().name;
+-		base = this.cultures[ cultureName ];
+-	} else if ( typeof baseCultureName !== "string" ) {
+-		// baseCultureName argument is optional string. If not specified, assume info is second
+-		// argument. Specified info deep-extends specified culture.
+-		// If specified culture does not exist, create by deep-extending default
+-		info = baseCultureName;
+-		isNew = ( this.cultures[ cultureName ] == null );
+-		base = this.cultures[ cultureName ] || this.cultures[ "default" ];
+-	} else {
+-		// cultureName and baseCultureName specified. Assume a new culture is being created
+-		// by deep-extending an specified base culture
+-		isNew = true;
+-		base = this.cultures[ baseCultureName ];
+-	}
+-
+-	this.cultures[ cultureName ] = extend(true, {},
+-		base,
+-		info
+-	);
+-	// Make the standard calendar the current culture if it's a new culture
+-	if ( isNew ) {
+-		this.cultures[ cultureName ].calendar = this.cultures[ cultureName ].calendars.standard;
+-	}
+-};
+-
+-Globalize.findClosestCulture = function( name ) {
+-	var match;
+-	if ( !name ) {
+-		return this.cultures[ this.cultureSelector ] || this.cultures[ "default" ];
+-	}
+-	if ( typeof name === "string" ) {
+-		name = name.split( "," );
+-	}
+-	if ( isArray(name) ) {
+-		var lang,
+-			cultures = this.cultures,
+-			list = name,
+-			i, l = list.length,
+-			prioritized = [];
+-		for ( i = 0; i < l; i++ ) {
+-			name = trim( list[i] );
+-			var pri, parts = name.split( ";" );
+-			lang = trim( parts[0] );
+-			if ( parts.length === 1 ) {
+-				pri = 1;
+-			}
+-			else {
+-				name = trim( parts[1] );
+-				if ( name.indexOf("q=") === 0 ) {
+-					name = name.substr( 2 );
+-					pri = parseFloat( name );
+-					pri = isNaN( pri ) ? 0 : pri;
+-				}
+-				else {
+-					pri = 1;
+-				}
+-			}
+-			prioritized.push({ lang: lang, pri: pri });
+-		}
+-		prioritized.sort(function( a, b ) {
+-			return a.pri < b.pri ? 1 : -1;
+-		});
+-
+-		// exact match
+-		for ( i = 0; i < l; i++ ) {
+-			lang = prioritized[ i ].lang;
+-			match = cultures[ lang ];
+-			if ( match ) {
+-				return match;
+-			}
+-		}
+-
+-		// neutral language match
+-		for ( i = 0; i < l; i++ ) {
+-			lang = prioritized[ i ].lang;
+-			do {
+-				var index = lang.lastIndexOf( "-" );
+-				if ( index === -1 ) {
+-					break;
+-				}
+-				// strip off the last part. e.g. en-US => en
+-				lang = lang.substr( 0, index );
+-				match = cultures[ lang ];
+-				if ( match ) {
+-					return match;
+-				}
+-			}
+-			while ( 1 );
+-		}
+-
+-		// last resort: match first culture using that language
+-		for ( i = 0; i < l; i++ ) {
+-			lang = prioritized[ i ].lang;
+-			for ( var cultureKey in cultures ) {
+-				var culture = cultures[ cultureKey ];
+-				if ( culture.language == lang ) {
+-					return culture;
+-				}
+-			}
+-		}
+-	}
+-	else if ( typeof name === "object" ) {
+-		return name;
+-	}
+-	return match || null;
+-};
+-
+-Globalize.format = function( value, format, cultureSelector ) {
+-	culture = this.findClosestCulture( cultureSelector );
+-	if ( value instanceof Date ) {
+-		value = formatDate( value, format, culture );
+-	}
+-	else if ( typeof value === "number" ) {
+-		value = formatNumber( value, format, culture );
+-	}
+-	return value;
+-};
+-
+-Globalize.localize = function( key, cultureSelector ) {
+-	return this.findClosestCulture( cultureSelector ).messages[ key ] ||
+-		this.cultures[ "default" ].messages[ key ];
+-};
+-
+-Globalize.parseDate = function( value, formats, culture ) {
+-	culture = this.findClosestCulture( culture );
+-
+-	var date, prop, patterns;
+-	if ( formats ) {
+-		if ( typeof formats === "string" ) {
+-			formats = [ formats ];
+-		}
+-		if ( formats.length ) {
+-			for ( var i = 0, l = formats.length; i < l; i++ ) {
+-				var format = formats[ i ];
+-				if ( format ) {
+-					date = parseExact( value, format, culture );
+-					if ( date ) {
+-						break;
+-					}
+-				}
+-			}
+-		}
+-	} else {
+-		patterns = culture.calendar.patterns;
+-		for ( prop in patterns ) {
+-			date = parseExact( value, patterns[prop], culture );
+-			if ( date ) {
+-				break;
+-			}
+-		}
+-	}
+-
+-	return date || null;
+-};
+-
+-Globalize.parseInt = function( value, radix, cultureSelector ) {
+-	return truncate( Globalize.parseFloat(value, radix, cultureSelector) );
+-};
+-
+-Globalize.parseFloat = function( value, radix, cultureSelector ) {
+-	// radix argument is optional
+-	if ( typeof radix !== "number" ) {
+-		cultureSelector = radix;
+-		radix = 10;
+-	}
+-
+-	var culture = this.findClosestCulture( cultureSelector );
+-	var ret = NaN,
+-		nf = culture.numberFormat;
+-
+-	if ( value.indexOf(culture.numberFormat.currency.symbol) > -1 ) {
+-		// remove currency symbol
+-		value = value.replace( culture.numberFormat.currency.symbol, "" );
+-		// replace decimal seperator
+-		value = value.replace( culture.numberFormat.currency["."], culture.numberFormat["."] );
+-	}
+-
+-	// trim leading and trailing whitespace
+-	value = trim( value );
+-
+-	// allow infinity or hexidecimal
+-	if ( regexInfinity.test(value) ) {
+-		ret = parseFloat( value );
+-	}
+-	else if ( !radix && regexHex.test(value) ) {
+-		ret = parseInt( value, 16 );
+-	}
+-	else {
+-
+-		// determine sign and number
+-		var signInfo = parseNegativePattern( value, nf, nf.pattern[0] ),
+-			sign = signInfo[ 0 ],
+-			num = signInfo[ 1 ];
+-
+-		// #44 - try parsing as "(n)"
+-		if ( sign === "" && nf.pattern[0] !== "(n)" ) {
+-			signInfo = parseNegativePattern( value, nf, "(n)" );
+-			sign = signInfo[ 0 ];
+-			num = signInfo[ 1 ];
+-		}
+-
+-		// try parsing as "-n"
+-		if ( sign === "" && nf.pattern[0] !== "-n" ) {
+-			signInfo = parseNegativePattern( value, nf, "-n" );
+-			sign = signInfo[ 0 ];
+-			num = signInfo[ 1 ];
+-		}
+-
+-		sign = sign || "+";
+-
+-		// determine exponent and number
+-		var exponent,
+-			intAndFraction,
+-			exponentPos = num.indexOf( "e" );
+-		if ( exponentPos < 0 ) exponentPos = num.indexOf( "E" );
+-		if ( exponentPos < 0 ) {
+-			intAndFraction = num;
+-			exponent = null;
+-		}
+-		else {
+-			intAndFraction = num.substr( 0, exponentPos );
+-			exponent = num.substr( exponentPos + 1 );
+-		}
+-		// determine decimal position
+-		var integer,
+-			fraction,
+-			decSep = nf[ "." ],
+-			decimalPos = intAndFraction.indexOf( decSep );
+-		if ( decimalPos < 0 ) {
+-			integer = intAndFraction;
+-			fraction = null;
+-		}
+-		else {
+-			integer = intAndFraction.substr( 0, decimalPos );
+-			fraction = intAndFraction.substr( decimalPos + decSep.length );
+-		}
+-		// handle groups (e.g. 1,000,000)
+-		var groupSep = nf[ "," ];
+-		integer = integer.split( groupSep ).join( "" );
+-		var altGroupSep = groupSep.replace( /\u00A0/g, " " );
+-		if ( groupSep !== altGroupSep ) {
+-			integer = integer.split( altGroupSep ).join( "" );
+-		}
+-		// build a natively parsable number string
+-		var p = sign + integer;
+-		if ( fraction !== null ) {
+-			p += "." + fraction;
+-		}
+-		if ( exponent !== null ) {
+-			// exponent itself may have a number patternd
+-			var expSignInfo = parseNegativePattern( exponent, nf, "-n" );
+-			p += "e" + ( expSignInfo[0] || "+" ) + expSignInfo[ 1 ];
+-		}
+-		if ( regexParseFloat.test(p) ) {
+-			ret = parseFloat( p );
+-		}
+-	}
+-	return ret;
+-};
+-
+-Globalize.culture = function( cultureSelector ) {
+-	// setter
+-	if ( typeof cultureSelector !== "undefined" ) {
+-		this.cultureSelector = cultureSelector;
+-	}
+-	// getter
+-	return this.findClosestCulture( cultureSelector ) || this.culture[ "default" ];
+-};
+-
+-}( this ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.ja-JP.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.ja-JP.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.ja-JP.js	(revision 15488)
+@@ -1,100 +0,0 @@
+-/*
+- * Globalize Culture ja-JP
+- *
+- * http://github.com/jquery/globalize
+- *
+- * Copyright Software Freedom Conservancy, Inc.
+- * Dual licensed under the MIT or GPL Version 2 licenses.
+- * http://jquery.org/license
+- *
+- * This file was generated by the Globalize Culture Generator
+- * Translation: bugs found in this file need to be fixed in the generator
+- */
+-
+-(function( window, undefined ) {
+-
+-var Globalize;
+-
+-if ( typeof require !== "undefined"
+-	&& typeof exports !== "undefined"
+-	&& typeof module !== "undefined" ) {
+-	// Assume CommonJS
+-	Globalize = require( "globalize" );
+-} else {
+-	// Global variable
+-	Globalize = window.Globalize;
+-}
+-
+-Globalize.addCultureInfo( "ja-JP", "default", {
+-	name: "ja-JP",
+-	englishName: "Japanese (Japan)",
+-	nativeName: "日本語 (日本)",
+-	language: "ja",
+-	numberFormat: {
+-		NaN: "NaN (非数値)",
+-		negativeInfinity: "-∞",
+-		positiveInfinity: "+∞",
+-		percent: {
+-			pattern: ["-n%","n%"]
+-		},
+-		currency: {
+-			pattern: ["-$n","$n"],
+-			decimals: 0,
+-			symbol: "¥"
+-		}
+-	},
+-	calendars: {
+-		standard: {
+-			days: {
+-				names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],
+-				namesAbbr: ["日","月","火","水","木","金","土"],
+-				namesShort: ["日","月","火","水","木","金","土"]
+-			},
+-			months: {
+-				names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""],
+-				namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""]
+-			},
+-			AM: ["午前","午前","午前"],
+-			PM: ["午後","午後","午後"],
+-			eras: [{"name":"西暦","start":null,"offset":0}],
+-			patterns: {
+-				d: "yyyy/MM/dd",
+-				D: "yyyy'年'M'月'd'日'",
+-				t: "H:mm",
+-				T: "H:mm:ss",
+-				f: "yyyy'年'M'月'd'日' H:mm",
+-				F: "yyyy'年'M'月'd'日' H:mm:ss",
+-				M: "M'月'd'日'",
+-				Y: "yyyy'年'M'月'"
+-			}
+-		},
+-		Japanese: {
+-			name: "Japanese",
+-			days: {
+-				names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],
+-				namesAbbr: ["日","月","火","水","木","金","土"],
+-				namesShort: ["日","月","火","水","木","金","土"]
+-			},
+-			months: {
+-				names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""],
+-				namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""]
+-			},
+-			AM: ["午前","午前","午前"],
+-			PM: ["午後","午後","午後"],
+-			eras: [{"name":"平成","start":null,"offset":1867},{"name":"昭和","start":-1812153600000,"offset":1911},{"name":"大正","start":-1357603200000,"offset":1925},{"name":"明治","start":60022080000,"offset":1988}],
+-			twoDigitYearMax: 99,
+-			patterns: {
+-				d: "gg y/M/d",
+-				D: "gg y'年'M'月'd'日'",
+-				t: "H:mm",
+-				T: "H:mm:ss",
+-				f: "gg y'年'M'月'd'日' H:mm",
+-				F: "gg y'年'M'月'd'日' H:mm:ss",
+-				M: "M'月'd'日'",
+-				Y: "gg y'年'M'月'"
+-			}
+-		}
+-	}
+-});
+-
+-}( this ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-scale.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-scale.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-scale.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-scale",
+-	"title": "jQuery UI Scale Effect",
+-	"description": "Grows or shrinks an element and its content. Restores an elemnt to its original size.",
+-	"keywords": [
+-		"ui",
+-		"scale",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/scale-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.slider.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.slider.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.slider.jquery.json	(revision 15488)
+@@ -1,67 +0,0 @@
+-{
+-	"name": "ui.slider",
+-	"title": "jQuery UI Slider",
+-	"description": "Displays a flexible slider with ranges and accessibility via keyboard.",
+-	"keywords": [
+-		"ui",
+-		"slider",
+-		"form",
+-		"number",
+-		"range"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/slider/",
+-	"demo": "http://jqueryui.com/slider/",
+-	"docs": "http://api.jqueryui.com/slider/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.mouse": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/MIT-LICENSE.txt
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/MIT-LICENSE.txt	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/MIT-LICENSE.txt	(revision 15488)
+@@ -1,26 +0,0 @@
+-Copyright 2013 jQuery Foundation and other contributors,
+-http://jqueryui.com/
+-
+-This software consists of voluntary contributions made by many
+-individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
+-contribution history, see the revision history and logs, available
+-at http://jquery-ui.googlecode.com/svn/
+-
+-Permission is hereby granted, free of charge, to any person obtaining
+-a copy of this software and associated documentation files (the
+-"Software"), to deal in the Software without restriction, including
+-without limitation the rights to use, copy, modify, merge, publish,
+-distribute, sublicense, and/or sell copies of the Software, and to
+-permit persons to whom the Software is furnished to do so, subject to
+-the following conditions:
+-
+-The above copyright notice and this permission notice shall be
+-included in all copies or substantial portions of the Software.
+-
+-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-shake.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-shake.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-shake.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-shake",
+-	"title": "jQuery UI Shake Effect",
+-	"description": "Shakes an element horizontally or vertically n times.",
+-	"keywords": [
+-		"ui",
+-		"shake",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/shake-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.tabs.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.tabs.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.tabs.jquery.json	(revision 15488)
+@@ -1,67 +0,0 @@
+-{
+-	"name": "ui.tabs",
+-	"title": "jQuery UI Tabs",
+-	"description": "Transforms a set of container elements into a tab structure.",
+-	"keywords": [
+-		"ui",
+-		"tabs",
+-		"navigation",
+-		"panel",
+-		"collapse",
+-		"expand"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/tabs/",
+-	"demo": "http://jqueryui.com/tabs/",
+-	"docs": "http://api.jqueryui.com/tabs/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fade.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fade.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fade.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-fade",
+-	"title": "jQuery UI Fade Effect",
+-	"description": "Fades an element.",
+-	"keywords": [
+-		"ui",
+-		"fade",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/fade-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-explode.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-explode.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-explode.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-explode",
+-	"title": "jQuery UI Explode Effect",
+-	"description": "Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.",
+-	"keywords": [
+-		"ui",
+-		"explode",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/explode-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/README.md
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/README.md	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/README.md	(revision 15488)
+@@ -1,99 +0,0 @@
+-[jQuery UI](http://jqueryui.com/) - Interactions and Widgets for the web
+-================================
+-
+-jQuery UI provides interactions like Drag and Drop and widgets like Autocomplete, Tabs and Slider and makes these as easy to use as jQuery itself.
+-
+-If you want to use jQuery UI, go to [jqueryui.com](http://jqueryui.com) to get started. Or visit the [Using jQuery UI Forum](http://forum.jquery.com/using-jquery-ui) for discussions and questions.
+-
+-If you are interested in helping develop jQuery UI, you are in the right place.
+-To discuss development with team members and the community, visit the [Developing jQuery UI Forum](http://forum.jquery.com/developing-jquery-ui) or in #jquery on irc.freednode.net.
+-
+-
+-For contributors
+----
+-
+-If you want to help and provide a patch for a bugfix or new feature, please take
+-a few minutes and look at [our Getting Involved guide](http://wiki.jqueryui.com/w/page/35263114/Getting-Involved).
+-In particular check out the [Coding standards](http://wiki.jqueryui.com/w/page/12137737/Coding-standards)
+-and [Commit Message Style Guide](http://wiki.jqueryui.com/w/page/25941597/Commit-Message-Style-Guide).
+-
+-In general, fork the project, create a branch for a specific change and send a
+-pull request for that branch. Don't mix unrelated changes. You can use the commit
+-message as the description for the pull request.
+-
+-
+-Running the Unit Tests
+----
+-
+-Run the unit tests with a local server that supports PHP. No database is required. Pre-configured php local servers are available for Windows and Mac. Here are some options:
+-
+-- Windows: [WAMP download](http://www.wampserver.com/en/)
+-- Mac: [MAMP download](http://www.mamp.info/en/index.html)
+-- Linux: [Setting up LAMP](https://www.linux.com/learn/tutorials/288158-easy-lamp-server-installation)
+-- [Mongoose (most platforms)](http://code.google.com/p/mongoose/)
+-
+-
+-Building jQuery UI
+----
+-
+-jQuery UI uses the [grunt](http://github.com/cowboy/grunt) build system. Building jQuery UI requires node.js and a command line zip program.
+-
+-Install grunt.
+-
+-`npm install grunt -g`
+-
+-Clone the jQuery UI git repo.
+-
+-`git clone git://github.com/jquery/jquery-ui.git`
+-
+-`cd jquery-ui`
+-
+-Install node modules.
+-
+-`npm install`
+-
+-Run grunt.
+-
+-`grunt build`
+-
+-There are many other tasks that can be run through grunt. For a list of all tasks:
+-
+-`grunt --help`
+-
+-
+-For committers
+----
+-
+-When looking at pull requests, first check for [proper commit messages](http://wiki.jqueryui.com/w/page/12137724/Bug-Fixing-Guide).
+-
+-Do not merge pull requests directly through GitHub's interface.
+-Most pull requests are a single commit; cherry-picking will avoid creating a merge commit.
+-It's also common for contributors to make minor fixes in an additional one or two commits.
+-These should be squashed before landing in master.
+-
+-**Make sure the author has a valid name and email address associated with the commit.**
+-
+-Fetch the remote first:
+-
+-    git fetch [their-fork.git] [their-branch]
+-
+-Then cherry-pick the commit(s):
+-
+-	git cherry-pick [sha-of-commit]
+-
+-If you need to edit the commit message:
+-
+-    git cherry-pick -e [sha-of-commit]
+-
+-If you need to edit the changes:
+-
+-	git cherry-pick -n [sha-of-commit]
+-	# make changes
+-	git commit --author="[author-name-and-email]"
+-
+-If it should go to the stable brach, cherry-pick it to stable:
+-
+-    git checkout 1-8-stable
+-    git cherry-pick -x [sha-of-commit-from-master]
+-
+-*NOTE: Do not cherry-pick into 1-8-stable until you have pushed the commit from master upstream.*
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.tooltip.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.tooltip.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.tooltip.jquery.json	(revision 15488)
+@@ -1,64 +0,0 @@
+-{
+-	"name": "ui.tooltip",
+-	"title": "jQuery UI Tooltip",
+-	"description": "Shows additional information for any element on hover or focus.",
+-	"keywords": [
+-		"ui",
+-		"tooltip"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/tooltip/",
+-	"demo": "http://jqueryui.com/tooltip/",
+-	"docs": "http://api.jqueryui.com/tooltip/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.position": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/jquery-1.9.1.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/jquery-1.9.1.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/jquery-1.9.1.js	(revision 15488)
+@@ -1,9597 +0,0 @@
+-/*!
+- * jQuery JavaScript Library v1.9.1
+- * http://jquery.com/
+- *
+- * Includes Sizzle.js
+- * http://sizzlejs.com/
+- *
+- * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+- * Released under the MIT license
+- * http://jquery.org/license
+- *
+- * Date: 2013-2-4
+- */
+-(function( window, undefined ) {
+-
+-// Can't do this because several apps including ASP.NET trace
+-// the stack via arguments.caller.callee and Firefox dies if
+-// you try to trace through "use strict" call chains. (#13335)
+-// Support: Firefox 18+
+-//"use strict";
+-var
+-	// The deferred used on DOM ready
+-	readyList,
+-
+-	// A central reference to the root jQuery(document)
+-	rootjQuery,
+-
+-	// Support: IE<9
+-	// For `typeof node.method` instead of `node.method !== undefined`
+-	core_strundefined = typeof undefined,
+-
+-	// Use the correct document accordingly with window argument (sandbox)
+-	document = window.document,
+-	location = window.location,
+-
+-	// Map over jQuery in case of overwrite
+-	_jQuery = window.jQuery,
+-
+-	// Map over the $ in case of overwrite
+-	_$ = window.$,
+-
+-	// [[Class]] -> type pairs
+-	class2type = {},
+-
+-	// List of deleted data cache ids, so we can reuse them
+-	core_deletedIds = [],
+-
+-	core_version = "1.9.1",
+-
+-	// Save a reference to some core methods
+-	core_concat = core_deletedIds.concat,
+-	core_push = core_deletedIds.push,
+-	core_slice = core_deletedIds.slice,
+-	core_indexOf = core_deletedIds.indexOf,
+-	core_toString = class2type.toString,
+-	core_hasOwn = class2type.hasOwnProperty,
+-	core_trim = core_version.trim,
+-
+-	// Define a local copy of jQuery
+-	jQuery = function( selector, context ) {
+-		// The jQuery object is actually just the init constructor 'enhanced'
+-		return new jQuery.fn.init( selector, context, rootjQuery );
+-	},
+-
+-	// Used for matching numbers
+-	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+-
+-	// Used for splitting on whitespace
+-	core_rnotwhite = /\S+/g,
+-
+-	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+-
+-	// A simple way to check for HTML strings
+-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+-	// Strict HTML recognition (#11290: must start with <)
+-	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+-
+-	// Match a standalone tag
+-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+-
+-	// JSON RegExp
+-	rvalidchars = /^[\],:{}\s]*$/,
+-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+-	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+-	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+-
+-	// Matches dashed string for camelizing
+-	rmsPrefix = /^-ms-/,
+-	rdashAlpha = /-([\da-z])/gi,
+-
+-	// Used by jQuery.camelCase as callback to replace()
+-	fcamelCase = function( all, letter ) {
+-		return letter.toUpperCase();
+-	},
+-
+-	// The ready event handler
+-	completed = function( event ) {
+-
+-		// readyState === "complete" is good enough for us to call the dom ready in oldIE
+-		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+-			detach();
+-			jQuery.ready();
+-		}
+-	},
+-	// Clean-up method for dom ready events
+-	detach = function() {
+-		if ( document.addEventListener ) {
+-			document.removeEventListener( "DOMContentLoaded", completed, false );
+-			window.removeEventListener( "load", completed, false );
+-
+-		} else {
+-			document.detachEvent( "onreadystatechange", completed );
+-			window.detachEvent( "onload", completed );
+-		}
+-	};
+-
+-jQuery.fn = jQuery.prototype = {
+-	// The current version of jQuery being used
+-	jquery: core_version,
+-
+-	constructor: jQuery,
+-	init: function( selector, context, rootjQuery ) {
+-		var match, elem;
+-
+-		// HANDLE: $(""), $(null), $(undefined), $(false)
+-		if ( !selector ) {
+-			return this;
+-		}
+-
+-		// Handle HTML strings
+-		if ( typeof selector === "string" ) {
+-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+-				// Assume that strings that start and end with <> are HTML and skip the regex check
+-				match = [ null, selector, null ];
+-
+-			} else {
+-				match = rquickExpr.exec( selector );
+-			}
+-
+-			// Match html or make sure no context is specified for #id
+-			if ( match && (match[1] || !context) ) {
+-
+-				// HANDLE: $(html) -> $(array)
+-				if ( match[1] ) {
+-					context = context instanceof jQuery ? context[0] : context;
+-
+-					// scripts is true for back-compat
+-					jQuery.merge( this, jQuery.parseHTML(
+-						match[1],
+-						context && context.nodeType ? context.ownerDocument || context : document,
+-						true
+-					) );
+-
+-					// HANDLE: $(html, props)
+-					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+-						for ( match in context ) {
+-							// Properties of context are called as methods if possible
+-							if ( jQuery.isFunction( this[ match ] ) ) {
+-								this[ match ]( context[ match ] );
+-
+-							// ...and otherwise set as attributes
+-							} else {
+-								this.attr( match, context[ match ] );
+-							}
+-						}
+-					}
+-
+-					return this;
+-
+-				// HANDLE: $(#id)
+-				} else {
+-					elem = document.getElementById( match[2] );
+-
+-					// Check parentNode to catch when Blackberry 4.6 returns
+-					// nodes that are no longer in the document #6963
+-					if ( elem && elem.parentNode ) {
+-						// Handle the case where IE and Opera return items
+-						// by name instead of ID
+-						if ( elem.id !== match[2] ) {
+-							return rootjQuery.find( selector );
+-						}
+-
+-						// Otherwise, we inject the element directly into the jQuery object
+-						this.length = 1;
+-						this[0] = elem;
+-					}
+-
+-					this.context = document;
+-					this.selector = selector;
+-					return this;
+-				}
+-
+-			// HANDLE: $(expr, $(...))
+-			} else if ( !context || context.jquery ) {
+-				return ( context || rootjQuery ).find( selector );
+-
+-			// HANDLE: $(expr, context)
+-			// (which is just equivalent to: $(context).find(expr)
+-			} else {
+-				return this.constructor( context ).find( selector );
+-			}
+-
+-		// HANDLE: $(DOMElement)
+-		} else if ( selector.nodeType ) {
+-			this.context = this[0] = selector;
+-			this.length = 1;
+-			return this;
+-
+-		// HANDLE: $(function)
+-		// Shortcut for document ready
+-		} else if ( jQuery.isFunction( selector ) ) {
+-			return rootjQuery.ready( selector );
+-		}
+-
+-		if ( selector.selector !== undefined ) {
+-			this.selector = selector.selector;
+-			this.context = selector.context;
+-		}
+-
+-		return jQuery.makeArray( selector, this );
+-	},
+-
+-	// Start with an empty selector
+-	selector: "",
+-
+-	// The default length of a jQuery object is 0
+-	length: 0,
+-
+-	// The number of elements contained in the matched element set
+-	size: function() {
+-		return this.length;
+-	},
+-
+-	toArray: function() {
+-		return core_slice.call( this );
+-	},
+-
+-	// Get the Nth element in the matched element set OR
+-	// Get the whole matched element set as a clean array
+-	get: function( num ) {
+-		return num == null ?
+-
+-			// Return a 'clean' array
+-			this.toArray() :
+-
+-			// Return just the object
+-			( num < 0 ? this[ this.length + num ] : this[ num ] );
+-	},
+-
+-	// Take an array of elements and push it onto the stack
+-	// (returning the new matched element set)
+-	pushStack: function( elems ) {
+-
+-		// Build a new jQuery matched element set
+-		var ret = jQuery.merge( this.constructor(), elems );
+-
+-		// Add the old object onto the stack (as a reference)
+-		ret.prevObject = this;
+-		ret.context = this.context;
+-
+-		// Return the newly-formed element set
+-		return ret;
+-	},
+-
+-	// Execute a callback for every element in the matched set.
+-	// (You can seed the arguments with an array of args, but this is
+-	// only used internally.)
+-	each: function( callback, args ) {
+-		return jQuery.each( this, callback, args );
+-	},
+-
+-	ready: function( fn ) {
+-		// Add the callback
+-		jQuery.ready.promise().done( fn );
+-
+-		return this;
+-	},
+-
+-	slice: function() {
+-		return this.pushStack( core_slice.apply( this, arguments ) );
+-	},
+-
+-	first: function() {
+-		return this.eq( 0 );
+-	},
+-
+-	last: function() {
+-		return this.eq( -1 );
+-	},
+-
+-	eq: function( i ) {
+-		var len = this.length,
+-			j = +i + ( i < 0 ? len : 0 );
+-		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+-	},
+-
+-	map: function( callback ) {
+-		return this.pushStack( jQuery.map(this, function( elem, i ) {
+-			return callback.call( elem, i, elem );
+-		}));
+-	},
+-
+-	end: function() {
+-		return this.prevObject || this.constructor(null);
+-	},
+-
+-	// For internal use only.
+-	// Behaves like an Array's method, not like a jQuery method.
+-	push: core_push,
+-	sort: [].sort,
+-	splice: [].splice
+-};
+-
+-// Give the init function the jQuery prototype for later instantiation
+-jQuery.fn.init.prototype = jQuery.fn;
+-
+-jQuery.extend = jQuery.fn.extend = function() {
+-	var src, copyIsArray, copy, name, options, clone,
+-		target = arguments[0] || {},
+-		i = 1,
+-		length = arguments.length,
+-		deep = false;
+-
+-	// Handle a deep copy situation
+-	if ( typeof target === "boolean" ) {
+-		deep = target;
+-		target = arguments[1] || {};
+-		// skip the boolean and the target
+-		i = 2;
+-	}
+-
+-	// Handle case when target is a string or something (possible in deep copy)
+-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+-		target = {};
+-	}
+-
+-	// extend jQuery itself if only one argument is passed
+-	if ( length === i ) {
+-		target = this;
+-		--i;
+-	}
+-
+-	for ( ; i < length; i++ ) {
+-		// Only deal with non-null/undefined values
+-		if ( (options = arguments[ i ]) != null ) {
+-			// Extend the base object
+-			for ( name in options ) {
+-				src = target[ name ];
+-				copy = options[ name ];
+-
+-				// Prevent never-ending loop
+-				if ( target === copy ) {
+-					continue;
+-				}
+-
+-				// Recurse if we're merging plain objects or arrays
+-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+-					if ( copyIsArray ) {
+-						copyIsArray = false;
+-						clone = src && jQuery.isArray(src) ? src : [];
+-
+-					} else {
+-						clone = src && jQuery.isPlainObject(src) ? src : {};
+-					}
+-
+-					// Never move original objects, clone them
+-					target[ name ] = jQuery.extend( deep, clone, copy );
+-
+-				// Don't bring in undefined values
+-				} else if ( copy !== undefined ) {
+-					target[ name ] = copy;
+-				}
+-			}
+-		}
+-	}
+-
+-	// Return the modified object
+-	return target;
+-};
+-
+-jQuery.extend({
+-	noConflict: function( deep ) {
+-		if ( window.$ === jQuery ) {
+-			window.$ = _$;
+-		}
+-
+-		if ( deep && window.jQuery === jQuery ) {
+-			window.jQuery = _jQuery;
+-		}
+-
+-		return jQuery;
+-	},
+-
+-	// Is the DOM ready to be used? Set to true once it occurs.
+-	isReady: false,
+-
+-	// A counter to track how many items to wait for before
+-	// the ready event fires. See #6781
+-	readyWait: 1,
+-
+-	// Hold (or release) the ready event
+-	holdReady: function( hold ) {
+-		if ( hold ) {
+-			jQuery.readyWait++;
+-		} else {
+-			jQuery.ready( true );
+-		}
+-	},
+-
+-	// Handle when the DOM is ready
+-	ready: function( wait ) {
+-
+-		// Abort if there are pending holds or we're already ready
+-		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+-			return;
+-		}
+-
+-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+-		if ( !document.body ) {
+-			return setTimeout( jQuery.ready );
+-		}
+-
+-		// Remember that the DOM is ready
+-		jQuery.isReady = true;
+-
+-		// If a normal DOM Ready event fired, decrement, and wait if need be
+-		if ( wait !== true && --jQuery.readyWait > 0 ) {
+-			return;
+-		}
+-
+-		// If there are functions bound, to execute
+-		readyList.resolveWith( document, [ jQuery ] );
+-
+-		// Trigger any bound ready events
+-		if ( jQuery.fn.trigger ) {
+-			jQuery( document ).trigger("ready").off("ready");
+-		}
+-	},
+-
+-	// See test/unit/core.js for details concerning isFunction.
+-	// Since version 1.3, DOM methods and functions like alert
+-	// aren't supported. They return false on IE (#2968).
+-	isFunction: function( obj ) {
+-		return jQuery.type(obj) === "function";
+-	},
+-
+-	isArray: Array.isArray || function( obj ) {
+-		return jQuery.type(obj) === "array";
+-	},
+-
+-	isWindow: function( obj ) {
+-		return obj != null && obj == obj.window;
+-	},
+-
+-	isNumeric: function( obj ) {
+-		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+-	},
+-
+-	type: function( obj ) {
+-		if ( obj == null ) {
+-			return String( obj );
+-		}
+-		return typeof obj === "object" || typeof obj === "function" ?
+-			class2type[ core_toString.call(obj) ] || "object" :
+-			typeof obj;
+-	},
+-
+-	isPlainObject: function( obj ) {
+-		// Must be an Object.
+-		// Because of IE, we also have to check the presence of the constructor property.
+-		// Make sure that DOM nodes and window objects don't pass through, as well
+-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+-			return false;
+-		}
+-
+-		try {
+-			// Not own constructor property must be Object
+-			if ( obj.constructor &&
+-				!core_hasOwn.call(obj, "constructor") &&
+-				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+-				return false;
+-			}
+-		} catch ( e ) {
+-			// IE8,9 Will throw exceptions on certain host objects #9897
+-			return false;
+-		}
+-
+-		// Own properties are enumerated firstly, so to speed up,
+-		// if last one is own, then all properties are own.
+-
+-		var key;
+-		for ( key in obj ) {}
+-
+-		return key === undefined || core_hasOwn.call( obj, key );
+-	},
+-
+-	isEmptyObject: function( obj ) {
+-		var name;
+-		for ( name in obj ) {
+-			return false;
+-		}
+-		return true;
+-	},
+-
+-	error: function( msg ) {
+-		throw new Error( msg );
+-	},
+-
+-	// data: string of html
+-	// context (optional): If specified, the fragment will be created in this context, defaults to document
+-	// keepScripts (optional): If true, will include scripts passed in the html string
+-	parseHTML: function( data, context, keepScripts ) {
+-		if ( !data || typeof data !== "string" ) {
+-			return null;
+-		}
+-		if ( typeof context === "boolean" ) {
+-			keepScripts = context;
+-			context = false;
+-		}
+-		context = context || document;
+-
+-		var parsed = rsingleTag.exec( data ),
+-			scripts = !keepScripts && [];
+-
+-		// Single tag
+-		if ( parsed ) {
+-			return [ context.createElement( parsed[1] ) ];
+-		}
+-
+-		parsed = jQuery.buildFragment( [ data ], context, scripts );
+-		if ( scripts ) {
+-			jQuery( scripts ).remove();
+-		}
+-		return jQuery.merge( [], parsed.childNodes );
+-	},
+-
+-	parseJSON: function( data ) {
+-		// Attempt to parse using the native JSON parser first
+-		if ( window.JSON && window.JSON.parse ) {
+-			return window.JSON.parse( data );
+-		}
+-
+-		if ( data === null ) {
+-			return data;
+-		}
+-
+-		if ( typeof data === "string" ) {
+-
+-			// Make sure leading/trailing whitespace is removed (IE can't handle it)
+-			data = jQuery.trim( data );
+-
+-			if ( data ) {
+-				// Make sure the incoming data is actual JSON
+-				// Logic borrowed from http://json.org/json2.js
+-				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+-					.replace( rvalidtokens, "]" )
+-					.replace( rvalidbraces, "")) ) {
+-
+-					return ( new Function( "return " + data ) )();
+-				}
+-			}
+-		}
+-
+-		jQuery.error( "Invalid JSON: " + data );
+-	},
+-
+-	// Cross-browser xml parsing
+-	parseXML: function( data ) {
+-		var xml, tmp;
+-		if ( !data || typeof data !== "string" ) {
+-			return null;
+-		}
+-		try {
+-			if ( window.DOMParser ) { // Standard
+-				tmp = new DOMParser();
+-				xml = tmp.parseFromString( data , "text/xml" );
+-			} else { // IE
+-				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+-				xml.async = "false";
+-				xml.loadXML( data );
+-			}
+-		} catch( e ) {
+-			xml = undefined;
+-		}
+-		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+-			jQuery.error( "Invalid XML: " + data );
+-		}
+-		return xml;
+-	},
+-
+-	noop: function() {},
+-
+-	// Evaluates a script in a global context
+-	// Workarounds based on findings by Jim Driscoll
+-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+-	globalEval: function( data ) {
+-		if ( data && jQuery.trim( data ) ) {
+-			// We use execScript on Internet Explorer
+-			// We use an anonymous function so that context is window
+-			// rather than jQuery in Firefox
+-			( window.execScript || function( data ) {
+-				window[ "eval" ].call( window, data );
+-			} )( data );
+-		}
+-	},
+-
+-	// Convert dashed to camelCase; used by the css and data modules
+-	// Microsoft forgot to hump their vendor prefix (#9572)
+-	camelCase: function( string ) {
+-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+-	},
+-
+-	nodeName: function( elem, name ) {
+-		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+-	},
+-
+-	// args is for internal usage only
+-	each: function( obj, callback, args ) {
+-		var value,
+-			i = 0,
+-			length = obj.length,
+-			isArray = isArraylike( obj );
+-
+-		if ( args ) {
+-			if ( isArray ) {
+-				for ( ; i < length; i++ ) {
+-					value = callback.apply( obj[ i ], args );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( i in obj ) {
+-					value = callback.apply( obj[ i ], args );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			}
+-
+-		// A special, fast, case for the most common use of each
+-		} else {
+-			if ( isArray ) {
+-				for ( ; i < length; i++ ) {
+-					value = callback.call( obj[ i ], i, obj[ i ] );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			} else {
+-				for ( i in obj ) {
+-					value = callback.call( obj[ i ], i, obj[ i ] );
+-
+-					if ( value === false ) {
+-						break;
+-					}
+-				}
+-			}
+-		}
+-
+-		return obj;
+-	},
+-
+-	// Use native String.trim function wherever possible
+-	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				core_trim.call( text );
+-		} :
+-
+-		// Otherwise use our own trimming functionality
+-		function( text ) {
+-			return text == null ?
+-				"" :
+-				( text + "" ).replace( rtrim, "" );
+-		},
+-
+-	// results is for internal usage only
+-	makeArray: function( arr, results ) {
+-		var ret = results || [];
+-
+-		if ( arr != null ) {
+-			if ( isArraylike( Object(arr) ) ) {
+-				jQuery.merge( ret,
+-					typeof arr === "string" ?
+-					[ arr ] : arr
+-				);
+-			} else {
+-				core_push.call( ret, arr );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	inArray: function( elem, arr, i ) {
+-		var len;
+-
+-		if ( arr ) {
+-			if ( core_indexOf ) {
+-				return core_indexOf.call( arr, elem, i );
+-			}
+-
+-			len = arr.length;
+-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+-
+-			for ( ; i < len; i++ ) {
+-				// Skip accessing in sparse arrays
+-				if ( i in arr && arr[ i ] === elem ) {
+-					return i;
+-				}
+-			}
+-		}
+-
+-		return -1;
+-	},
+-
+-	merge: function( first, second ) {
+-		var l = second.length,
+-			i = first.length,
+-			j = 0;
+-
+-		if ( typeof l === "number" ) {
+-			for ( ; j < l; j++ ) {
+-				first[ i++ ] = second[ j ];
+-			}
+-		} else {
+-			while ( second[j] !== undefined ) {
+-				first[ i++ ] = second[ j++ ];
+-			}
+-		}
+-
+-		first.length = i;
+-
+-		return first;
+-	},
+-
+-	grep: function( elems, callback, inv ) {
+-		var retVal,
+-			ret = [],
+-			i = 0,
+-			length = elems.length;
+-		inv = !!inv;
+-
+-		// Go through the array, only saving the items
+-		// that pass the validator function
+-		for ( ; i < length; i++ ) {
+-			retVal = !!callback( elems[ i ], i );
+-			if ( inv !== retVal ) {
+-				ret.push( elems[ i ] );
+-			}
+-		}
+-
+-		return ret;
+-	},
+-
+-	// arg is for internal usage only
+-	map: function( elems, callback, arg ) {
+-		var value,
+-			i = 0,
+-			length = elems.length,
+-			isArray = isArraylike( elems ),
+-			ret = [];
+-
+-		// Go through the array, translating each of the items to their
+-		if ( isArray ) {
+-			for ( ; i < length; i++ ) {
+-				value = callback( elems[ i ], i, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-
+-		// Go through every key on the object,
+-		} else {
+-			for ( i in elems ) {
+-				value = callback( elems[ i ], i, arg );
+-
+-				if ( value != null ) {
+-					ret[ ret.length ] = value;
+-				}
+-			}
+-		}
+-
+-		// Flatten any nested arrays
+-		return core_concat.apply( [], ret );
+-	},
+-
+-	// A global GUID counter for objects
+-	guid: 1,
+-
+-	// Bind a function to a context, optionally partially applying any
+-	// arguments.
+-	proxy: function( fn, context ) {
+-		var args, proxy, tmp;
+-
+-		if ( typeof context === "string" ) {
+-			tmp = fn[ context ];
+-			context = fn;
+-			fn = tmp;
+-		}
+-
+-		// Quick check to determine if target is callable, in the spec
+-		// this throws a TypeError, but we will just return undefined.
+-		if ( !jQuery.isFunction( fn ) ) {
+-			return undefined;
+-		}
+-
+-		// Simulated bind
+-		args = core_slice.call( arguments, 2 );
+-		proxy = function() {
+-			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+-		};
+-
+-		// Set the guid of unique handler to the same of original handler, so it can be removed
+-		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+-
+-		return proxy;
+-	},
+-
+-	// Multifunctional method to get and set values of a collection
+-	// The value/s can optionally be executed if it's a function
+-	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+-		var i = 0,
+-			length = elems.length,
+-			bulk = key == null;
+-
+-		// Sets many values
+-		if ( jQuery.type( key ) === "object" ) {
+-			chainable = true;
+-			for ( i in key ) {
+-				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+-			}
+-
+-		// Sets one value
+-		} else if ( value !== undefined ) {
+-			chainable = true;
+-
+-			if ( !jQuery.isFunction( value ) ) {
+-				raw = true;
+-			}
+-
+-			if ( bulk ) {
+-				// Bulk operations run against the entire set
+-				if ( raw ) {
+-					fn.call( elems, value );
+-					fn = null;
+-
+-				// ...except when executing function values
+-				} else {
+-					bulk = fn;
+-					fn = function( elem, key, value ) {
+-						return bulk.call( jQuery( elem ), value );
+-					};
+-				}
+-			}
+-
+-			if ( fn ) {
+-				for ( ; i < length; i++ ) {
+-					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+-				}
+-			}
+-		}
+-
+-		return chainable ?
+-			elems :
+-
+-			// Gets
+-			bulk ?
+-				fn.call( elems ) :
+-				length ? fn( elems[0], key ) : emptyGet;
+-	},
+-
+-	now: function() {
+-		return ( new Date() ).getTime();
+-	}
+-});
+-
+-jQuery.ready.promise = function( obj ) {
+-	if ( !readyList ) {
+-
+-		readyList = jQuery.Deferred();
+-
+-		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+-		// we once tried to use readyState "interactive" here, but it caused issues like the one
+-		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+-		if ( document.readyState === "complete" ) {
+-			// Handle it asynchronously to allow scripts the opportunity to delay ready
+-			setTimeout( jQuery.ready );
+-
+-		// Standards-based browsers support DOMContentLoaded
+-		} else if ( document.addEventListener ) {
+-			// Use the handy event callback
+-			document.addEventListener( "DOMContentLoaded", completed, false );
+-
+-			// A fallback to window.onload, that will always work
+-			window.addEventListener( "load", completed, false );
+-
+-		// If IE event model is used
+-		} else {
+-			// Ensure firing before onload, maybe late but safe also for iframes
+-			document.attachEvent( "onreadystatechange", completed );
+-
+-			// A fallback to window.onload, that will always work
+-			window.attachEvent( "onload", completed );
+-
+-			// If IE and not a frame
+-			// continually check to see if the document is ready
+-			var top = false;
+-
+-			try {
+-				top = window.frameElement == null && document.documentElement;
+-			} catch(e) {}
+-
+-			if ( top && top.doScroll ) {
+-				(function doScrollCheck() {
+-					if ( !jQuery.isReady ) {
+-
+-						try {
+-							// Use the trick by Diego Perini
+-							// http://javascript.nwbox.com/IEContentLoaded/
+-							top.doScroll("left");
+-						} catch(e) {
+-							return setTimeout( doScrollCheck, 50 );
+-						}
+-
+-						// detach all dom ready events
+-						detach();
+-
+-						// and execute any waiting functions
+-						jQuery.ready();
+-					}
+-				})();
+-			}
+-		}
+-	}
+-	return readyList.promise( obj );
+-};
+-
+-// Populate the class2type map
+-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+-});
+-
+-function isArraylike( obj ) {
+-	var length = obj.length,
+-		type = jQuery.type( obj );
+-
+-	if ( jQuery.isWindow( obj ) ) {
+-		return false;
+-	}
+-
+-	if ( obj.nodeType === 1 && length ) {
+-		return true;
+-	}
+-
+-	return type === "array" || type !== "function" &&
+-		( length === 0 ||
+-		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+-}
+-
+-// All jQuery objects should point back to these
+-rootjQuery = jQuery(document);
+-// String to Object options format cache
+-var optionsCache = {};
+-
+-// Convert String-formatted options into Object-formatted ones and store in cache
+-function createOptions( options ) {
+-	var object = optionsCache[ options ] = {};
+-	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+-		object[ flag ] = true;
+-	});
+-	return object;
+-}
+-
+-/*
+- * Create a callback list using the following parameters:
+- *
+- *	options: an optional list of space-separated options that will change how
+- *			the callback list behaves or a more traditional option object
+- *
+- * By default a callback list will act like an event callback list and can be
+- * "fired" multiple times.
+- *
+- * Possible options:
+- *
+- *	once:			will ensure the callback list can only be fired once (like a Deferred)
+- *
+- *	memory:			will keep track of previous values and will call any callback added
+- *					after the list has been fired right away with the latest "memorized"
+- *					values (like a Deferred)
+- *
+- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+- *
+- *	stopOnFalse:	interrupt callings when a callback returns false
+- *
+- */
+-jQuery.Callbacks = function( options ) {
+-
+-	// Convert options from String-formatted to Object-formatted if needed
+-	// (we check in cache first)
+-	options = typeof options === "string" ?
+-		( optionsCache[ options ] || createOptions( options ) ) :
+-		jQuery.extend( {}, options );
+-
+-	var // Flag to know if list is currently firing
+-		firing,
+-		// Last fire value (for non-forgettable lists)
+-		memory,
+-		// Flag to know if list was already fired
+-		fired,
+-		// End of the loop when firing
+-		firingLength,
+-		// Index of currently firing callback (modified by remove if needed)
+-		firingIndex,
+-		// First callback to fire (used internally by add and fireWith)
+-		firingStart,
+-		// Actual callback list
+-		list = [],
+-		// Stack of fire calls for repeatable lists
+-		stack = !options.once && [],
+-		// Fire callbacks
+-		fire = function( data ) {
+-			memory = options.memory && data;
+-			fired = true;
+-			firingIndex = firingStart || 0;
+-			firingStart = 0;
+-			firingLength = list.length;
+-			firing = true;
+-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+-				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+-					memory = false; // To prevent further calls using add
+-					break;
+-				}
+-			}
+-			firing = false;
+-			if ( list ) {
+-				if ( stack ) {
+-					if ( stack.length ) {
+-						fire( stack.shift() );
+-					}
+-				} else if ( memory ) {
+-					list = [];
+-				} else {
+-					self.disable();
+-				}
+-			}
+-		},
+-		// Actual Callbacks object
+-		self = {
+-			// Add a callback or a collection of callbacks to the list
+-			add: function() {
+-				if ( list ) {
+-					// First, we save the current length
+-					var start = list.length;
+-					(function add( args ) {
+-						jQuery.each( args, function( _, arg ) {
+-							var type = jQuery.type( arg );
+-							if ( type === "function" ) {
+-								if ( !options.unique || !self.has( arg ) ) {
+-									list.push( arg );
+-								}
+-							} else if ( arg && arg.length && type !== "string" ) {
+-								// Inspect recursively
+-								add( arg );
+-							}
+-						});
+-					})( arguments );
+-					// Do we need to add the callbacks to the
+-					// current firing batch?
+-					if ( firing ) {
+-						firingLength = list.length;
+-					// With memory, if we're not firing then
+-					// we should call right away
+-					} else if ( memory ) {
+-						firingStart = start;
+-						fire( memory );
+-					}
+-				}
+-				return this;
+-			},
+-			// Remove a callback from the list
+-			remove: function() {
+-				if ( list ) {
+-					jQuery.each( arguments, function( _, arg ) {
+-						var index;
+-						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+-							list.splice( index, 1 );
+-							// Handle firing indexes
+-							if ( firing ) {
+-								if ( index <= firingLength ) {
+-									firingLength--;
+-								}
+-								if ( index <= firingIndex ) {
+-									firingIndex--;
+-								}
+-							}
+-						}
+-					});
+-				}
+-				return this;
+-			},
+-			// Check if a given callback is in the list.
+-			// If no argument is given, return whether or not list has callbacks attached.
+-			has: function( fn ) {
+-				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+-			},
+-			// Remove all callbacks from the list
+-			empty: function() {
+-				list = [];
+-				return this;
+-			},
+-			// Have the list do nothing anymore
+-			disable: function() {
+-				list = stack = memory = undefined;
+-				return this;
+-			},
+-			// Is it disabled?
+-			disabled: function() {
+-				return !list;
+-			},
+-			// Lock the list in its current state
+-			lock: function() {
+-				stack = undefined;
+-				if ( !memory ) {
+-					self.disable();
+-				}
+-				return this;
+-			},
+-			// Is it locked?
+-			locked: function() {
+-				return !stack;
+-			},
+-			// Call all callbacks with the given context and arguments
+-			fireWith: function( context, args ) {
+-				args = args || [];
+-				args = [ context, args.slice ? args.slice() : args ];
+-				if ( list && ( !fired || stack ) ) {
+-					if ( firing ) {
+-						stack.push( args );
+-					} else {
+-						fire( args );
+-					}
+-				}
+-				return this;
+-			},
+-			// Call all the callbacks with the given arguments
+-			fire: function() {
+-				self.fireWith( this, arguments );
+-				return this;
+-			},
+-			// To know if the callbacks have already been called at least once
+-			fired: function() {
+-				return !!fired;
+-			}
+-		};
+-
+-	return self;
+-};
+-jQuery.extend({
+-
+-	Deferred: function( func ) {
+-		var tuples = [
+-				// action, add listener, listener list, final state
+-				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+-				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+-				[ "notify", "progress", jQuery.Callbacks("memory") ]
+-			],
+-			state = "pending",
+-			promise = {
+-				state: function() {
+-					return state;
+-				},
+-				always: function() {
+-					deferred.done( arguments ).fail( arguments );
+-					return this;
+-				},
+-				then: function( /* fnDone, fnFail, fnProgress */ ) {
+-					var fns = arguments;
+-					return jQuery.Deferred(function( newDefer ) {
+-						jQuery.each( tuples, function( i, tuple ) {
+-							var action = tuple[ 0 ],
+-								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+-							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+-							deferred[ tuple[1] ](function() {
+-								var returned = fn && fn.apply( this, arguments );
+-								if ( returned && jQuery.isFunction( returned.promise ) ) {
+-									returned.promise()
+-										.done( newDefer.resolve )
+-										.fail( newDefer.reject )
+-										.progress( newDefer.notify );
+-								} else {
+-									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+-								}
+-							});
+-						});
+-						fns = null;
+-					}).promise();
+-				},
+-				// Get a promise for this deferred
+-				// If obj is provided, the promise aspect is added to the object
+-				promise: function( obj ) {
+-					return obj != null ? jQuery.extend( obj, promise ) : promise;
+-				}
+-			},
+-			deferred = {};
+-
+-		// Keep pipe for back-compat
+-		promise.pipe = promise.then;
+-
+-		// Add list-specific methods
+-		jQuery.each( tuples, function( i, tuple ) {
+-			var list = tuple[ 2 ],
+-				stateString = tuple[ 3 ];
+-
+-			// promise[ done | fail | progress ] = list.add
+-			promise[ tuple[1] ] = list.add;
+-
+-			// Handle state
+-			if ( stateString ) {
+-				list.add(function() {
+-					// state = [ resolved | rejected ]
+-					state = stateString;
+-
+-				// [ reject_list | resolve_list ].disable; progress_list.lock
+-				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+-			}
+-
+-			// deferred[ resolve | reject | notify ]
+-			deferred[ tuple[0] ] = function() {
+-				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+-				return this;
+-			};
+-			deferred[ tuple[0] + "With" ] = list.fireWith;
+-		});
+-
+-		// Make the deferred a promise
+-		promise.promise( deferred );
+-
+-		// Call given func if any
+-		if ( func ) {
+-			func.call( deferred, deferred );
+-		}
+-
+-		// All done!
+-		return deferred;
+-	},
+-
+-	// Deferred helper
+-	when: function( subordinate /* , ..., subordinateN */ ) {
+-		var i = 0,
+-			resolveValues = core_slice.call( arguments ),
+-			length = resolveValues.length,
+-
+-			// the count of uncompleted subordinates
+-			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+-
+-			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+-			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+-
+-			// Update function for both resolve and progress values
+-			updateFunc = function( i, contexts, values ) {
+-				return function( value ) {
+-					contexts[ i ] = this;
+-					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+-					if( values === progressValues ) {
+-						deferred.notifyWith( contexts, values );
+-					} else if ( !( --remaining ) ) {
+-						deferred.resolveWith( contexts, values );
+-					}
+-				};
+-			},
+-
+-			progressValues, progressContexts, resolveContexts;
+-
+-		// add listeners to Deferred subordinates; treat others as resolved
+-		if ( length > 1 ) {
+-			progressValues = new Array( length );
+-			progressContexts = new Array( length );
+-			resolveContexts = new Array( length );
+-			for ( ; i < length; i++ ) {
+-				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+-					resolveValues[ i ].promise()
+-						.done( updateFunc( i, resolveContexts, resolveValues ) )
+-						.fail( deferred.reject )
+-						.progress( updateFunc( i, progressContexts, progressValues ) );
+-				} else {
+-					--remaining;
+-				}
+-			}
+-		}
+-
+-		// if we're not waiting on anything, resolve the master
+-		if ( !remaining ) {
+-			deferred.resolveWith( resolveContexts, resolveValues );
+-		}
+-
+-		return deferred.promise();
+-	}
+-});
+-jQuery.support = (function() {
+-
+-	var support, all, a,
+-		input, select, fragment,
+-		opt, eventName, isSupported, i,
+-		div = document.createElement("div");
+-
+-	// Setup
+-	div.setAttribute( "className", "t" );
+-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+-
+-	// Support tests won't run in some limited or non-browser environments
+-	all = div.getElementsByTagName("*");
+-	a = div.getElementsByTagName("a")[ 0 ];
+-	if ( !all || !a || !all.length ) {
+-		return {};
+-	}
+-
+-	// First batch of tests
+-	select = document.createElement("select");
+-	opt = select.appendChild( document.createElement("option") );
+-	input = div.getElementsByTagName("input")[ 0 ];
+-
+-	a.style.cssText = "top:1px;float:left;opacity:.5";
+-	support = {
+-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+-		getSetAttribute: div.className !== "t",
+-
+-		// IE strips leading whitespace when .innerHTML is used
+-		leadingWhitespace: div.firstChild.nodeType === 3,
+-
+-		// Make sure that tbody elements aren't automatically inserted
+-		// IE will insert them into empty tables
+-		tbody: !div.getElementsByTagName("tbody").length,
+-
+-		// Make sure that link elements get serialized correctly by innerHTML
+-		// This requires a wrapper element in IE
+-		htmlSerialize: !!div.getElementsByTagName("link").length,
+-
+-		// Get the style information from getAttribute
+-		// (IE uses .cssText instead)
+-		style: /top/.test( a.getAttribute("style") ),
+-
+-		// Make sure that URLs aren't manipulated
+-		// (IE normalizes it by default)
+-		hrefNormalized: a.getAttribute("href") === "/a",
+-
+-		// Make sure that element opacity exists
+-		// (IE uses filter instead)
+-		// Use a regex to work around a WebKit issue. See #5145
+-		opacity: /^0.5/.test( a.style.opacity ),
+-
+-		// Verify style float existence
+-		// (IE uses styleFloat instead of cssFloat)
+-		cssFloat: !!a.style.cssFloat,
+-
+-		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+-		checkOn: !!input.value,
+-
+-		// Make sure that a selected-by-default option has a working selected property.
+-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+-		optSelected: opt.selected,
+-
+-		// Tests for enctype support on a form (#6743)
+-		enctype: !!document.createElement("form").enctype,
+-
+-		// Makes sure cloning an html5 element does not cause problems
+-		// Where outerHTML is undefined, this still works
+-		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+-
+-		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+-		boxModel: document.compatMode === "CSS1Compat",
+-
+-		// Will be defined later
+-		deleteExpando: true,
+-		noCloneEvent: true,
+-		inlineBlockNeedsLayout: false,
+-		shrinkWrapBlocks: false,
+-		reliableMarginRight: true,
+-		boxSizingReliable: true,
+-		pixelPosition: false
+-	};
+-
+-	// Make sure checked status is properly cloned
+-	input.checked = true;
+-	support.noCloneChecked = input.cloneNode( true ).checked;
+-
+-	// Make sure that the options inside disabled selects aren't marked as disabled
+-	// (WebKit marks them as disabled)
+-	select.disabled = true;
+-	support.optDisabled = !opt.disabled;
+-
+-	// Support: IE<9
+-	try {
+-		delete div.test;
+-	} catch( e ) {
+-		support.deleteExpando = false;
+-	}
+-
+-	// Check if we can trust getAttribute("value")
+-	input = document.createElement("input");
+-	input.setAttribute( "value", "" );
+-	support.input = input.getAttribute( "value" ) === "";
+-
+-	// Check if an input maintains its value after becoming a radio
+-	input.value = "t";
+-	input.setAttribute( "type", "radio" );
+-	support.radioValue = input.value === "t";
+-
+-	// #11217 - WebKit loses check when the name is after the checked attribute
+-	input.setAttribute( "checked", "t" );
+-	input.setAttribute( "name", "t" );
+-
+-	fragment = document.createDocumentFragment();
+-	fragment.appendChild( input );
+-
+-	// Check if a disconnected checkbox will retain its checked
+-	// value of true after appended to the DOM (IE6/7)
+-	support.appendChecked = input.checked;
+-
+-	// WebKit doesn't clone checked state correctly in fragments
+-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+-
+-	// Support: IE<9
+-	// Opera does not clone events (and typeof div.attachEvent === undefined).
+-	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+-	if ( div.attachEvent ) {
+-		div.attachEvent( "onclick", function() {
+-			support.noCloneEvent = false;
+-		});
+-
+-		div.cloneNode( true ).click();
+-	}
+-
+-	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+-	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+-	for ( i in { submit: true, change: true, focusin: true }) {
+-		div.setAttribute( eventName = "on" + i, "t" );
+-
+-		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+-	}
+-
+-	div.style.backgroundClip = "content-box";
+-	div.cloneNode( true ).style.backgroundClip = "";
+-	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+-
+-	// Run tests that need a body at doc ready
+-	jQuery(function() {
+-		var container, marginDiv, tds,
+-			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+-			body = document.getElementsByTagName("body")[0];
+-
+-		if ( !body ) {
+-			// Return for frameset docs that don't have a body
+-			return;
+-		}
+-
+-		container = document.createElement("div");
+-		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+-
+-		body.appendChild( container ).appendChild( div );
+-
+-		// Support: IE8
+-		// Check if table cells still have offsetWidth/Height when they are set
+-		// to display:none and there are still other visible table cells in a
+-		// table row; if so, offsetWidth/Height are not reliable for use when
+-		// determining if an element has been hidden directly using
+-		// display:none (it is still safe to use offsets if a parent element is
+-		// hidden; don safety goggles and see bug #4512 for more information).
+-		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+-		tds = div.getElementsByTagName("td");
+-		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+-		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+-
+-		tds[ 0 ].style.display = "";
+-		tds[ 1 ].style.display = "none";
+-
+-		// Support: IE8
+-		// Check if empty table cells still have offsetWidth/Height
+-		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+-
+-		// Check box-sizing and margin behavior
+-		div.innerHTML = "";
+-		div.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%;";
+-		support.boxSizing = ( div.offsetWidth === 4 );
+-		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+-
+-		// Use window.getComputedStyle because jsdom on node.js will break without it.
+-		if ( window.getComputedStyle ) {
+-			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+-			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+-
+-			// Check if div with explicit width and no margin-right incorrectly
+-			// gets computed margin-right based on width of container. (#3333)
+-			// Fails in WebKit before Feb 2011 nightlies
+-			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-			marginDiv = div.appendChild( document.createElement("div") );
+-			marginDiv.style.cssText = div.style.cssText = divReset;
+-			marginDiv.style.marginRight = marginDiv.style.width = "0";
+-			div.style.width = "1px";
+-
+-			support.reliableMarginRight =
+-				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+-		}
+-
+-		if ( typeof div.style.zoom !== core_strundefined ) {
+-			// Support: IE<8
+-			// Check if natively block-level elements act like inline-block
+-			// elements when setting their display to 'inline' and giving
+-			// them layout
+-			div.innerHTML = "";
+-			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+-			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+-
+-			// Support: IE6
+-			// Check if elements with layout shrink-wrap their children
+-			div.style.display = "block";
+-			div.innerHTML = "<div></div>";
+-			div.firstChild.style.width = "5px";
+-			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+-
+-			if ( support.inlineBlockNeedsLayout ) {
+-				// Prevent IE 6 from affecting layout for positioned elements #11048
+-				// Prevent IE from shrinking the body in IE 7 mode #12869
+-				// Support: IE<8
+-				body.style.zoom = 1;
+-			}
+-		}
+-
+-		body.removeChild( container );
+-
+-		// Null elements to avoid leaks in IE
+-		container = div = tds = marginDiv = null;
+-	});
+-
+-	// Null elements to avoid leaks in IE
+-	all = select = fragment = opt = a = input = null;
+-
+-	return support;
+-})();
+-
+-var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+-	rmultiDash = /([A-Z])/g;
+-
+-function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+-	if ( !jQuery.acceptData( elem ) ) {
+-		return;
+-	}
+-
+-	var thisCache, ret,
+-		internalKey = jQuery.expando,
+-		getByName = typeof name === "string",
+-
+-		// We have to handle DOM nodes and JS objects differently because IE6-7
+-		// can't GC object references properly across the DOM-JS boundary
+-		isNode = elem.nodeType,
+-
+-		// Only DOM nodes need the global jQuery cache; JS object data is
+-		// attached directly to the object so GC can occur automatically
+-		cache = isNode ? jQuery.cache : elem,
+-
+-		// Only defining an ID for JS objects if its cache already exists allows
+-		// the code to shortcut on the same path as a DOM node with no cache
+-		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+-
+-	// Avoid doing any more work than we need to when trying to get data on an
+-	// object that has no data at all
+-	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+-		return;
+-	}
+-
+-	if ( !id ) {
+-		// Only DOM nodes need a new unique ID for each element since their data
+-		// ends up in the global cache
+-		if ( isNode ) {
+-			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+-		} else {
+-			id = internalKey;
+-		}
+-	}
+-
+-	if ( !cache[ id ] ) {
+-		cache[ id ] = {};
+-
+-		// Avoids exposing jQuery metadata on plain JS objects when the object
+-		// is serialized using JSON.stringify
+-		if ( !isNode ) {
+-			cache[ id ].toJSON = jQuery.noop;
+-		}
+-	}
+-
+-	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+-	// shallow copied over onto the existing cache
+-	if ( typeof name === "object" || typeof name === "function" ) {
+-		if ( pvt ) {
+-			cache[ id ] = jQuery.extend( cache[ id ], name );
+-		} else {
+-			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+-		}
+-	}
+-
+-	thisCache = cache[ id ];
+-
+-	// jQuery data() is stored in a separate object inside the object's internal data
+-	// cache in order to avoid key collisions between internal data and user-defined
+-	// data.
+-	if ( !pvt ) {
+-		if ( !thisCache.data ) {
+-			thisCache.data = {};
+-		}
+-
+-		thisCache = thisCache.data;
+-	}
+-
+-	if ( data !== undefined ) {
+-		thisCache[ jQuery.camelCase( name ) ] = data;
+-	}
+-
+-	// Check for both converted-to-camel and non-converted data property names
+-	// If a data property was specified
+-	if ( getByName ) {
+-
+-		// First Try to find as-is property data
+-		ret = thisCache[ name ];
+-
+-		// Test for null|undefined property data
+-		if ( ret == null ) {
+-
+-			// Try to find the camelCased property
+-			ret = thisCache[ jQuery.camelCase( name ) ];
+-		}
+-	} else {
+-		ret = thisCache;
+-	}
+-
+-	return ret;
+-}
+-
+-function internalRemoveData( elem, name, pvt ) {
+-	if ( !jQuery.acceptData( elem ) ) {
+-		return;
+-	}
+-
+-	var i, l, thisCache,
+-		isNode = elem.nodeType,
+-
+-		// See jQuery.data for more information
+-		cache = isNode ? jQuery.cache : elem,
+-		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+-
+-	// If there is already no cache entry for this object, there is no
+-	// purpose in continuing
+-	if ( !cache[ id ] ) {
+-		return;
+-	}
+-
+-	if ( name ) {
+-
+-		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+-
+-		if ( thisCache ) {
+-
+-			// Support array or space separated string names for data keys
+-			if ( !jQuery.isArray( name ) ) {
+-
+-				// try the string as a key before any manipulation
+-				if ( name in thisCache ) {
+-					name = [ name ];
+-				} else {
+-
+-					// split the camel cased version by spaces unless a key with the spaces exists
+-					name = jQuery.camelCase( name );
+-					if ( name in thisCache ) {
+-						name = [ name ];
+-					} else {
+-						name = name.split(" ");
+-					}
+-				}
+-			} else {
+-				// If "name" is an array of keys...
+-				// When data is initially created, via ("key", "val") signature,
+-				// keys will be converted to camelCase.
+-				// Since there is no way to tell _how_ a key was added, remove
+-				// both plain key and camelCase key. #12786
+-				// This will only penalize the array argument path.
+-				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+-			}
+-
+-			for ( i = 0, l = name.length; i < l; i++ ) {
+-				delete thisCache[ name[i] ];
+-			}
+-
+-			// If there is no data left in the cache, we want to continue
+-			// and let the cache object itself get destroyed
+-			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+-				return;
+-			}
+-		}
+-	}
+-
+-	// See jQuery.data for more information
+-	if ( !pvt ) {
+-		delete cache[ id ].data;
+-
+-		// Don't destroy the parent cache unless the internal data object
+-		// had been the only thing left in it
+-		if ( !isEmptyDataObject( cache[ id ] ) ) {
+-			return;
+-		}
+-	}
+-
+-	// Destroy the cache
+-	if ( isNode ) {
+-		jQuery.cleanData( [ elem ], true );
+-
+-	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+-	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+-		delete cache[ id ];
+-
+-	// When all else fails, null
+-	} else {
+-		cache[ id ] = null;
+-	}
+-}
+-
+-jQuery.extend({
+-	cache: {},
+-
+-	// Unique for each copy of jQuery on the page
+-	// Non-digits removed to match rinlinejQuery
+-	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+-
+-	// The following elements throw uncatchable exceptions if you
+-	// attempt to add expando properties to them.
+-	noData: {
+-		"embed": true,
+-		// Ban all objects except for Flash (which handle expandos)
+-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+-		"applet": true
+-	},
+-
+-	hasData: function( elem ) {
+-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+-		return !!elem && !isEmptyDataObject( elem );
+-	},
+-
+-	data: function( elem, name, data ) {
+-		return internalData( elem, name, data );
+-	},
+-
+-	removeData: function( elem, name ) {
+-		return internalRemoveData( elem, name );
+-	},
+-
+-	// For internal use only.
+-	_data: function( elem, name, data ) {
+-		return internalData( elem, name, data, true );
+-	},
+-
+-	_removeData: function( elem, name ) {
+-		return internalRemoveData( elem, name, true );
+-	},
+-
+-	// A method for determining if a DOM node can handle the data expando
+-	acceptData: function( elem ) {
+-		// Do not set data on non-element because it will not be cleared (#8335).
+-		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
+-			return false;
+-		}
+-
+-		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+-
+-		// nodes accept data unless otherwise specified; rejection can be conditional
+-		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	data: function( key, value ) {
+-		var attrs, name,
+-			elem = this[0],
+-			i = 0,
+-			data = null;
+-
+-		// Gets all values
+-		if ( key === undefined ) {
+-			if ( this.length ) {
+-				data = jQuery.data( elem );
+-
+-				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+-					attrs = elem.attributes;
+-					for ( ; i < attrs.length; i++ ) {
+-						name = attrs[i].name;
+-
+-						if ( !name.indexOf( "data-" ) ) {
+-							name = jQuery.camelCase( name.slice(5) );
+-
+-							dataAttr( elem, name, data[ name ] );
+-						}
+-					}
+-					jQuery._data( elem, "parsedAttrs", true );
+-				}
+-			}
+-
+-			return data;
+-		}
+-
+-		// Sets multiple values
+-		if ( typeof key === "object" ) {
+-			return this.each(function() {
+-				jQuery.data( this, key );
+-			});
+-		}
+-
+-		return jQuery.access( this, function( value ) {
+-
+-			if ( value === undefined ) {
+-				// Try to fetch any internally stored data first
+-				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+-			}
+-
+-			this.each(function() {
+-				jQuery.data( this, key, value );
+-			});
+-		}, null, value, arguments.length > 1, null, true );
+-	},
+-
+-	removeData: function( key ) {
+-		return this.each(function() {
+-			jQuery.removeData( this, key );
+-		});
+-	}
+-});
+-
+-function dataAttr( elem, key, data ) {
+-	// If nothing was found internally, try to fetch any
+-	// data from the HTML5 data-* attribute
+-	if ( data === undefined && elem.nodeType === 1 ) {
+-
+-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+-
+-		data = elem.getAttribute( name );
+-
+-		if ( typeof data === "string" ) {
+-			try {
+-				data = data === "true" ? true :
+-					data === "false" ? false :
+-					data === "null" ? null :
+-					// Only convert to a number if it doesn't change the string
+-					+data + "" === data ? +data :
+-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+-						data;
+-			} catch( e ) {}
+-
+-			// Make sure we set the data so it isn't changed later
+-			jQuery.data( elem, key, data );
+-
+-		} else {
+-			data = undefined;
+-		}
+-	}
+-
+-	return data;
+-}
+-
+-// checks a cache object for emptiness
+-function isEmptyDataObject( obj ) {
+-	var name;
+-	for ( name in obj ) {
+-
+-		// if the public data object is empty, the private is still empty
+-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+-			continue;
+-		}
+-		if ( name !== "toJSON" ) {
+-			return false;
+-		}
+-	}
+-
+-	return true;
+-}
+-jQuery.extend({
+-	queue: function( elem, type, data ) {
+-		var queue;
+-
+-		if ( elem ) {
+-			type = ( type || "fx" ) + "queue";
+-			queue = jQuery._data( elem, type );
+-
+-			// Speed up dequeue by getting out quickly if this is just a lookup
+-			if ( data ) {
+-				if ( !queue || jQuery.isArray(data) ) {
+-					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+-				} else {
+-					queue.push( data );
+-				}
+-			}
+-			return queue || [];
+-		}
+-	},
+-
+-	dequeue: function( elem, type ) {
+-		type = type || "fx";
+-
+-		var queue = jQuery.queue( elem, type ),
+-			startLength = queue.length,
+-			fn = queue.shift(),
+-			hooks = jQuery._queueHooks( elem, type ),
+-			next = function() {
+-				jQuery.dequeue( elem, type );
+-			};
+-
+-		// If the fx queue is dequeued, always remove the progress sentinel
+-		if ( fn === "inprogress" ) {
+-			fn = queue.shift();
+-			startLength--;
+-		}
+-
+-		hooks.cur = fn;
+-		if ( fn ) {
+-
+-			// Add a progress sentinel to prevent the fx queue from being
+-			// automatically dequeued
+-			if ( type === "fx" ) {
+-				queue.unshift( "inprogress" );
+-			}
+-
+-			// clear up the last queue stop function
+-			delete hooks.stop;
+-			fn.call( elem, next, hooks );
+-		}
+-
+-		if ( !startLength && hooks ) {
+-			hooks.empty.fire();
+-		}
+-	},
+-
+-	// not intended for public consumption - generates a queueHooks object, or returns the current one
+-	_queueHooks: function( elem, type ) {
+-		var key = type + "queueHooks";
+-		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+-			empty: jQuery.Callbacks("once memory").add(function() {
+-				jQuery._removeData( elem, type + "queue" );
+-				jQuery._removeData( elem, key );
+-			})
+-		});
+-	}
+-});
+-
+-jQuery.fn.extend({
+-	queue: function( type, data ) {
+-		var setter = 2;
+-
+-		if ( typeof type !== "string" ) {
+-			data = type;
+-			type = "fx";
+-			setter--;
+-		}
+-
+-		if ( arguments.length < setter ) {
+-			return jQuery.queue( this[0], type );
+-		}
+-
+-		return data === undefined ?
+-			this :
+-			this.each(function() {
+-				var queue = jQuery.queue( this, type, data );
+-
+-				// ensure a hooks for this queue
+-				jQuery._queueHooks( this, type );
+-
+-				if ( type === "fx" && queue[0] !== "inprogress" ) {
+-					jQuery.dequeue( this, type );
+-				}
+-			});
+-	},
+-	dequeue: function( type ) {
+-		return this.each(function() {
+-			jQuery.dequeue( this, type );
+-		});
+-	},
+-	// Based off of the plugin by Clint Helfers, with permission.
+-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+-	delay: function( time, type ) {
+-		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+-		type = type || "fx";
+-
+-		return this.queue( type, function( next, hooks ) {
+-			var timeout = setTimeout( next, time );
+-			hooks.stop = function() {
+-				clearTimeout( timeout );
+-			};
+-		});
+-	},
+-	clearQueue: function( type ) {
+-		return this.queue( type || "fx", [] );
+-	},
+-	// Get a promise resolved when queues of a certain type
+-	// are emptied (fx is the type by default)
+-	promise: function( type, obj ) {
+-		var tmp,
+-			count = 1,
+-			defer = jQuery.Deferred(),
+-			elements = this,
+-			i = this.length,
+-			resolve = function() {
+-				if ( !( --count ) ) {
+-					defer.resolveWith( elements, [ elements ] );
+-				}
+-			};
+-
+-		if ( typeof type !== "string" ) {
+-			obj = type;
+-			type = undefined;
+-		}
+-		type = type || "fx";
+-
+-		while( i-- ) {
+-			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+-			if ( tmp && tmp.empty ) {
+-				count++;
+-				tmp.empty.add( resolve );
+-			}
+-		}
+-		resolve();
+-		return defer.promise( obj );
+-	}
+-});
+-var nodeHook, boolHook,
+-	rclass = /[\t\r\n]/g,
+-	rreturn = /\r/g,
+-	rfocusable = /^(?:input|select|textarea|button|object)$/i,
+-	rclickable = /^(?:a|area)$/i,
+-	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+-	ruseDefault = /^(?:checked|selected)$/i,
+-	getSetAttribute = jQuery.support.getSetAttribute,
+-	getSetInput = jQuery.support.input;
+-
+-jQuery.fn.extend({
+-	attr: function( name, value ) {
+-		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+-	},
+-
+-	removeAttr: function( name ) {
+-		return this.each(function() {
+-			jQuery.removeAttr( this, name );
+-		});
+-	},
+-
+-	prop: function( name, value ) {
+-		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+-	},
+-
+-	removeProp: function( name ) {
+-		name = jQuery.propFix[ name ] || name;
+-		return this.each(function() {
+-			// try/catch handles cases where IE balks (such as removing a property on window)
+-			try {
+-				this[ name ] = undefined;
+-				delete this[ name ];
+-			} catch( e ) {}
+-		});
+-	},
+-
+-	addClass: function( value ) {
+-		var classes, elem, cur, clazz, j,
+-			i = 0,
+-			len = this.length,
+-			proceed = typeof value === "string" && value;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).addClass( value.call( this, j, this.className ) );
+-			});
+-		}
+-
+-		if ( proceed ) {
+-			// The disjunction here is for better compressibility (see removeClass)
+-			classes = ( value || "" ).match( core_rnotwhite ) || [];
+-
+-			for ( ; i < len; i++ ) {
+-				elem = this[ i ];
+-				cur = elem.nodeType === 1 && ( elem.className ?
+-					( " " + elem.className + " " ).replace( rclass, " " ) :
+-					" "
+-				);
+-
+-				if ( cur ) {
+-					j = 0;
+-					while ( (clazz = classes[j++]) ) {
+-						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+-							cur += clazz + " ";
+-						}
+-					}
+-					elem.className = jQuery.trim( cur );
+-
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	removeClass: function( value ) {
+-		var classes, elem, cur, clazz, j,
+-			i = 0,
+-			len = this.length,
+-			proceed = arguments.length === 0 || typeof value === "string" && value;
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( j ) {
+-				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+-			});
+-		}
+-		if ( proceed ) {
+-			classes = ( value || "" ).match( core_rnotwhite ) || [];
+-
+-			for ( ; i < len; i++ ) {
+-				elem = this[ i ];
+-				// This expression is here for better compressibility (see addClass)
+-				cur = elem.nodeType === 1 && ( elem.className ?
+-					( " " + elem.className + " " ).replace( rclass, " " ) :
+-					""
+-				);
+-
+-				if ( cur ) {
+-					j = 0;
+-					while ( (clazz = classes[j++]) ) {
+-						// Remove *all* instances
+-						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+-							cur = cur.replace( " " + clazz + " ", " " );
+-						}
+-					}
+-					elem.className = value ? jQuery.trim( cur ) : "";
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	toggleClass: function( value, stateVal ) {
+-		var type = typeof value,
+-			isBool = typeof stateVal === "boolean";
+-
+-		if ( jQuery.isFunction( value ) ) {
+-			return this.each(function( i ) {
+-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			if ( type === "string" ) {
+-				// toggle individual class names
+-				var className,
+-					i = 0,
+-					self = jQuery( this ),
+-					state = stateVal,
+-					classNames = value.match( core_rnotwhite ) || [];
+-
+-				while ( (className = classNames[ i++ ]) ) {
+-					// check each className given, space separated list
+-					state = isBool ? state : !self.hasClass( className );
+-					self[ state ? "addClass" : "removeClass" ]( className );
+-				}
+-
+-			// Toggle whole class name
+-			} else if ( type === core_strundefined || type === "boolean" ) {
+-				if ( this.className ) {
+-					// store className if set
+-					jQuery._data( this, "__className__", this.className );
+-				}
+-
+-				// If the element has a class name or if we're passed "false",
+-				// then remove the whole classname (if there was one, the above saved it).
+-				// Otherwise bring back whatever was previously saved (if anything),
+-				// falling back to the empty string if nothing was stored.
+-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+-			}
+-		});
+-	},
+-
+-	hasClass: function( selector ) {
+-		var className = " " + selector + " ",
+-			i = 0,
+-			l = this.length;
+-		for ( ; i < l; i++ ) {
+-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+-				return true;
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	val: function( value ) {
+-		var ret, hooks, isFunction,
+-			elem = this[0];
+-
+-		if ( !arguments.length ) {
+-			if ( elem ) {
+-				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+-
+-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+-					return ret;
+-				}
+-
+-				ret = elem.value;
+-
+-				return typeof ret === "string" ?
+-					// handle most common string cases
+-					ret.replace(rreturn, "") :
+-					// handle cases where value is null/undef or number
+-					ret == null ? "" : ret;
+-			}
+-
+-			return;
+-		}
+-
+-		isFunction = jQuery.isFunction( value );
+-
+-		return this.each(function( i ) {
+-			var val,
+-				self = jQuery(this);
+-
+-			if ( this.nodeType !== 1 ) {
+-				return;
+-			}
+-
+-			if ( isFunction ) {
+-				val = value.call( this, i, self.val() );
+-			} else {
+-				val = value;
+-			}
+-
+-			// Treat null/undefined as ""; convert numbers to string
+-			if ( val == null ) {
+-				val = "";
+-			} else if ( typeof val === "number" ) {
+-				val += "";
+-			} else if ( jQuery.isArray( val ) ) {
+-				val = jQuery.map(val, function ( value ) {
+-					return value == null ? "" : value + "";
+-				});
+-			}
+-
+-			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+-
+-			// If set returns undefined, fall back to normal setting
+-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+-				this.value = val;
+-			}
+-		});
+-	}
+-});
+-
+-jQuery.extend({
+-	valHooks: {
+-		option: {
+-			get: function( elem ) {
+-				// attributes.value is undefined in Blackberry 4.7 but
+-				// uses .value. See #6932
+-				var val = elem.attributes.value;
+-				return !val || val.specified ? elem.value : elem.text;
+-			}
+-		},
+-		select: {
+-			get: function( elem ) {
+-				var value, option,
+-					options = elem.options,
+-					index = elem.selectedIndex,
+-					one = elem.type === "select-one" || index < 0,
+-					values = one ? null : [],
+-					max = one ? index + 1 : options.length,
+-					i = index < 0 ?
+-						max :
+-						one ? index : 0;
+-
+-				// Loop through all the selected options
+-				for ( ; i < max; i++ ) {
+-					option = options[ i ];
+-
+-					// oldIE doesn't update selected after form reset (#2551)
+-					if ( ( option.selected || i === index ) &&
+-							// Don't return options that are disabled or in a disabled optgroup
+-							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+-							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+-
+-						// Get the specific value for the option
+-						value = jQuery( option ).val();
+-
+-						// We don't need an array for one selects
+-						if ( one ) {
+-							return value;
+-						}
+-
+-						// Multi-Selects return an array
+-						values.push( value );
+-					}
+-				}
+-
+-				return values;
+-			},
+-
+-			set: function( elem, value ) {
+-				var values = jQuery.makeArray( value );
+-
+-				jQuery(elem).find("option").each(function() {
+-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+-				});
+-
+-				if ( !values.length ) {
+-					elem.selectedIndex = -1;
+-				}
+-				return values;
+-			}
+-		}
+-	},
+-
+-	attr: function( elem, name, value ) {
+-		var hooks, notxml, ret,
+-			nType = elem.nodeType;
+-
+-		// don't get/set attributes on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return;
+-		}
+-
+-		// Fallback to prop when attributes are not supported
+-		if ( typeof elem.getAttribute === core_strundefined ) {
+-			return jQuery.prop( elem, name, value );
+-		}
+-
+-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		// All attributes are lowercase
+-		// Grab necessary hook if one is defined
+-		if ( notxml ) {
+-			name = name.toLowerCase();
+-			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+-		}
+-
+-		if ( value !== undefined ) {
+-
+-			if ( value === null ) {
+-				jQuery.removeAttr( elem, name );
+-
+-			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				elem.setAttribute( name, value + "" );
+-				return value;
+-			}
+-
+-		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+-			return ret;
+-
+-		} else {
+-
+-			// In IE9+, Flash objects don't have .getAttribute (#12945)
+-			// Support: IE9+
+-			if ( typeof elem.getAttribute !== core_strundefined ) {
+-				ret =  elem.getAttribute( name );
+-			}
+-
+-			// Non-existent attributes return null, we normalize to undefined
+-			return ret == null ?
+-				undefined :
+-				ret;
+-		}
+-	},
+-
+-	removeAttr: function( elem, value ) {
+-		var name, propName,
+-			i = 0,
+-			attrNames = value && value.match( core_rnotwhite );
+-
+-		if ( attrNames && elem.nodeType === 1 ) {
+-			while ( (name = attrNames[i++]) ) {
+-				propName = jQuery.propFix[ name ] || name;
+-
+-				// Boolean attributes get special treatment (#10870)
+-				if ( rboolean.test( name ) ) {
+-					// Set corresponding property to false for boolean attributes
+-					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+-					if ( !getSetAttribute && ruseDefault.test( name ) ) {
+-						elem[ jQuery.camelCase( "default-" + name ) ] =
+-							elem[ propName ] = false;
+-					} else {
+-						elem[ propName ] = false;
+-					}
+-
+-				// See #9699 for explanation of this approach (setting first, then removal)
+-				} else {
+-					jQuery.attr( elem, name, "" );
+-				}
+-
+-				elem.removeAttribute( getSetAttribute ? name : propName );
+-			}
+-		}
+-	},
+-
+-	attrHooks: {
+-		type: {
+-			set: function( elem, value ) {
+-				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+-					// Setting the type on a radio button after the value resets the value in IE6-9
+-					// Reset value to default in case type is set after value during creation
+-					var val = elem.value;
+-					elem.setAttribute( "type", value );
+-					if ( val ) {
+-						elem.value = val;
+-					}
+-					return value;
+-				}
+-			}
+-		}
+-	},
+-
+-	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( elem, name, value ) {
+-		var ret, hooks, notxml,
+-			nType = elem.nodeType;
+-
+-		// don't get/set properties on text, comment and attribute nodes
+-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+-			return;
+-		}
+-
+-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+-
+-		if ( notxml ) {
+-			// Fix name and attach hooks
+-			name = jQuery.propFix[ name ] || name;
+-			hooks = jQuery.propHooks[ name ];
+-		}
+-
+-		if ( value !== undefined ) {
+-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+-				return ret;
+-
+-			} else {
+-				return ( elem[ name ] = value );
+-			}
+-
+-		} else {
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+-				return ret;
+-
+-			} else {
+-				return elem[ name ];
+-			}
+-		}
+-	},
+-
+-	propHooks: {
+-		tabIndex: {
+-			get: function( elem ) {
+-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+-				var attributeNode = elem.getAttributeNode("tabindex");
+-
+-				return attributeNode && attributeNode.specified ?
+-					parseInt( attributeNode.value, 10 ) :
+-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+-						0 :
+-						undefined;
+-			}
+-		}
+-	}
+-});
+-
+-// Hook for boolean attributes
+-boolHook = {
+-	get: function( elem, name ) {
+-		var
+-			// Use .prop to determine if this attribute is understood as boolean
+-			prop = jQuery.prop( elem, name ),
+-
+-			// Fetch it accordingly
+-			attr = typeof prop === "boolean" && elem.getAttribute( name ),
+-			detail = typeof prop === "boolean" ?
+-
+-				getSetInput && getSetAttribute ?
+-					attr != null :
+-					// oldIE fabricates an empty string for missing boolean attributes
+-					// and conflates checked/selected into attroperties
+-					ruseDefault.test( name ) ?
+-						elem[ jQuery.camelCase( "default-" + name ) ] :
+-						!!attr :
+-
+-				// fetch an attribute node for properties not recognized as boolean
+-				elem.getAttributeNode( name );
+-
+-		return detail && detail.value !== false ?
+-			name.toLowerCase() :
+-			undefined;
+-	},
+-	set: function( elem, value, name ) {
+-		if ( value === false ) {
+-			// Remove boolean attributes when set to false
+-			jQuery.removeAttr( elem, name );
+-		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+-			// IE<8 needs the *property* name
+-			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+-
+-		// Use defaultChecked and defaultSelected for oldIE
+-		} else {
+-			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+-		}
+-
+-		return name;
+-	}
+-};
+-
+-// fix oldIE value attroperty
+-if ( !getSetInput || !getSetAttribute ) {
+-	jQuery.attrHooks.value = {
+-		get: function( elem, name ) {
+-			var ret = elem.getAttributeNode( name );
+-			return jQuery.nodeName( elem, "input" ) ?
+-
+-				// Ignore the value *property* by using defaultValue
+-				elem.defaultValue :
+-
+-				ret && ret.specified ? ret.value : undefined;
+-		},
+-		set: function( elem, value, name ) {
+-			if ( jQuery.nodeName( elem, "input" ) ) {
+-				// Does not return so that setAttribute is also used
+-				elem.defaultValue = value;
+-			} else {
+-				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+-				return nodeHook && nodeHook.set( elem, value, name );
+-			}
+-		}
+-	};
+-}
+-
+-// IE6/7 do not support getting/setting some attributes with get/setAttribute
+-if ( !getSetAttribute ) {
+-
+-	// Use this for any attribute in IE6/7
+-	// This fixes almost every IE6/7 issue
+-	nodeHook = jQuery.valHooks.button = {
+-		get: function( elem, name ) {
+-			var ret = elem.getAttributeNode( name );
+-			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+-				ret.value :
+-				undefined;
+-		},
+-		set: function( elem, value, name ) {
+-			// Set the existing or create a new attribute node
+-			var ret = elem.getAttributeNode( name );
+-			if ( !ret ) {
+-				elem.setAttributeNode(
+-					(ret = elem.ownerDocument.createAttribute( name ))
+-				);
+-			}
+-
+-			ret.value = value += "";
+-
+-			// Break association with cloned elements by also using setAttribute (#9646)
+-			return name === "value" || value === elem.getAttribute( name ) ?
+-				value :
+-				undefined;
+-		}
+-	};
+-
+-	// Set contenteditable to false on removals(#10429)
+-	// Setting to empty string throws an error as an invalid value
+-	jQuery.attrHooks.contenteditable = {
+-		get: nodeHook.get,
+-		set: function( elem, value, name ) {
+-			nodeHook.set( elem, value === "" ? false : value, name );
+-		}
+-	};
+-
+-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+-	// This is for removals
+-	jQuery.each([ "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			set: function( elem, value ) {
+-				if ( value === "" ) {
+-					elem.setAttribute( name, "auto" );
+-					return value;
+-				}
+-			}
+-		});
+-	});
+-}
+-
+-
+-// Some attributes require a special call on IE
+-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+-if ( !jQuery.support.hrefNormalized ) {
+-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+-			get: function( elem ) {
+-				var ret = elem.getAttribute( name, 2 );
+-				return ret == null ? undefined : ret;
+-			}
+-		});
+-	});
+-
+-	// href/src property should get the full normalized URL (#10299/#12915)
+-	jQuery.each([ "href", "src" ], function( i, name ) {
+-		jQuery.propHooks[ name ] = {
+-			get: function( elem ) {
+-				return elem.getAttribute( name, 4 );
+-			}
+-		};
+-	});
+-}
+-
+-if ( !jQuery.support.style ) {
+-	jQuery.attrHooks.style = {
+-		get: function( elem ) {
+-			// Return undefined in the case of empty string
+-			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+-			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+-			return elem.style.cssText || undefined;
+-		},
+-		set: function( elem, value ) {
+-			return ( elem.style.cssText = value + "" );
+-		}
+-	};
+-}
+-
+-// Safari mis-reports the default selected property of an option
+-// Accessing the parent's selectedIndex property fixes it
+-if ( !jQuery.support.optSelected ) {
+-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+-		get: function( elem ) {
+-			var parent = elem.parentNode;
+-
+-			if ( parent ) {
+-				parent.selectedIndex;
+-
+-				// Make sure that it also works with optgroups, see #5701
+-				if ( parent.parentNode ) {
+-					parent.parentNode.selectedIndex;
+-				}
+-			}
+-			return null;
+-		}
+-	});
+-}
+-
+-// IE6/7 call enctype encoding
+-if ( !jQuery.support.enctype ) {
+-	jQuery.propFix.enctype = "encoding";
+-}
+-
+-// Radios and checkboxes getter/setter
+-if ( !jQuery.support.checkOn ) {
+-	jQuery.each([ "radio", "checkbox" ], function() {
+-		jQuery.valHooks[ this ] = {
+-			get: function( elem ) {
+-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+-				return elem.getAttribute("value") === null ? "on" : elem.value;
+-			}
+-		};
+-	});
+-}
+-jQuery.each([ "radio", "checkbox" ], function() {
+-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+-		set: function( elem, value ) {
+-			if ( jQuery.isArray( value ) ) {
+-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+-			}
+-		}
+-	});
+-});
+-var rformElems = /^(?:input|select|textarea)$/i,
+-	rkeyEvent = /^key/,
+-	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+-	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+-
+-function returnTrue() {
+-	return true;
+-}
+-
+-function returnFalse() {
+-	return false;
+-}
+-
+-/*
+- * Helper functions for managing events -- not part of the public interface.
+- * Props to Dean Edwards' addEvent library for many of the ideas.
+- */
+-jQuery.event = {
+-
+-	global: {},
+-
+-	add: function( elem, types, handler, data, selector ) {
+-		var tmp, events, t, handleObjIn,
+-			special, eventHandle, handleObj,
+-			handlers, type, namespaces, origType,
+-			elemData = jQuery._data( elem );
+-
+-		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+-		if ( !elemData ) {
+-			return;
+-		}
+-
+-		// Caller can pass in an object of custom data in lieu of the handler
+-		if ( handler.handler ) {
+-			handleObjIn = handler;
+-			handler = handleObjIn.handler;
+-			selector = handleObjIn.selector;
+-		}
+-
+-		// Make sure that the handler has a unique ID, used to find/remove it later
+-		if ( !handler.guid ) {
+-			handler.guid = jQuery.guid++;
+-		}
+-
+-		// Init the element's event structure and main handler, if this is the first
+-		if ( !(events = elemData.events) ) {
+-			events = elemData.events = {};
+-		}
+-		if ( !(eventHandle = elemData.handle) ) {
+-			eventHandle = elemData.handle = function( e ) {
+-				// Discard the second event of a jQuery.event.trigger() and
+-				// when an event is called after a page has unloaded
+-				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+-					undefined;
+-			};
+-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+-			eventHandle.elem = elem;
+-		}
+-
+-		// Handle multiple events separated by a space
+-		// jQuery(...).bind("mouseover mouseout", fn);
+-		types = ( types || "" ).match( core_rnotwhite ) || [""];
+-		t = types.length;
+-		while ( t-- ) {
+-			tmp = rtypenamespace.exec( types[t] ) || [];
+-			type = origType = tmp[1];
+-			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+-
+-			// If event changes its type, use the special event handlers for the changed type
+-			special = jQuery.event.special[ type ] || {};
+-
+-			// If selector defined, determine special event api type, otherwise given type
+-			type = ( selector ? special.delegateType : special.bindType ) || type;
+-
+-			// Update special based on newly reset type
+-			special = jQuery.event.special[ type ] || {};
+-
+-			// handleObj is passed to all event handlers
+-			handleObj = jQuery.extend({
+-				type: type,
+-				origType: origType,
+-				data: data,
+-				handler: handler,
+-				guid: handler.guid,
+-				selector: selector,
+-				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+-				namespace: namespaces.join(".")
+-			}, handleObjIn );
+-
+-			// Init the event handler queue if we're the first
+-			if ( !(handlers = events[ type ]) ) {
+-				handlers = events[ type ] = [];
+-				handlers.delegateCount = 0;
+-
+-				// Only use addEventListener/attachEvent if the special events handler returns false
+-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+-					// Bind the global event handler to the element
+-					if ( elem.addEventListener ) {
+-						elem.addEventListener( type, eventHandle, false );
+-
+-					} else if ( elem.attachEvent ) {
+-						elem.attachEvent( "on" + type, eventHandle );
+-					}
+-				}
+-			}
+-
+-			if ( special.add ) {
+-				special.add.call( elem, handleObj );
+-
+-				if ( !handleObj.handler.guid ) {
+-					handleObj.handler.guid = handler.guid;
+-				}
+-			}
+-
+-			// Add to the element's handler list, delegates in front
+-			if ( selector ) {
+-				handlers.splice( handlers.delegateCount++, 0, handleObj );
+-			} else {
+-				handlers.push( handleObj );
+-			}
+-
+-			// Keep track of which events have ever been used, for event optimization
+-			jQuery.event.global[ type ] = true;
+-		}
+-
+-		// Nullify elem to prevent memory leaks in IE
+-		elem = null;
+-	},
+-
+-	// Detach an event or set of events from an element
+-	remove: function( elem, types, handler, selector, mappedTypes ) {
+-		var j, handleObj, tmp,
+-			origCount, t, events,
+-			special, handlers, type,
+-			namespaces, origType,
+-			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+-
+-		if ( !elemData || !(events = elemData.events) ) {
+-			return;
+-		}
+-
+-		// Once for each type.namespace in types; type may be omitted
+-		types = ( types || "" ).match( core_rnotwhite ) || [""];
+-		t = types.length;
+-		while ( t-- ) {
+-			tmp = rtypenamespace.exec( types[t] ) || [];
+-			type = origType = tmp[1];
+-			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+-
+-			// Unbind all events (on this namespace, if provided) for the element
+-			if ( !type ) {
+-				for ( type in events ) {
+-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+-				}
+-				continue;
+-			}
+-
+-			special = jQuery.event.special[ type ] || {};
+-			type = ( selector ? special.delegateType : special.bindType ) || type;
+-			handlers = events[ type ] || [];
+-			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+-
+-			// Remove matching events
+-			origCount = j = handlers.length;
+-			while ( j-- ) {
+-				handleObj = handlers[ j ];
+-
+-				if ( ( mappedTypes || origType === handleObj.origType ) &&
+-					( !handler || handler.guid === handleObj.guid ) &&
+-					( !tmp || tmp.test( handleObj.namespace ) ) &&
+-					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+-					handlers.splice( j, 1 );
+-
+-					if ( handleObj.selector ) {
+-						handlers.delegateCount--;
+-					}
+-					if ( special.remove ) {
+-						special.remove.call( elem, handleObj );
+-					}
+-				}
+-			}
+-
+-			// Remove generic event handler if we removed something and no more handlers exist
+-			// (avoids potential for endless recursion during removal of special event handlers)
+-			if ( origCount && !handlers.length ) {
+-				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+-					jQuery.removeEvent( elem, type, elemData.handle );
+-				}
+-
+-				delete events[ type ];
+-			}
+-		}
+-
+-		// Remove the expando if it's no longer used
+-		if ( jQuery.isEmptyObject( events ) ) {
+-			delete elemData.handle;
+-
+-			// removeData also checks for emptiness and clears the expando if empty
+-			// so use it instead of delete
+-			jQuery._removeData( elem, "events" );
+-		}
+-	},
+-
+-	trigger: function( event, data, elem, onlyHandlers ) {
+-		var handle, ontype, cur,
+-			bubbleType, special, tmp, i,
+-			eventPath = [ elem || document ],
+-			type = core_hasOwn.call( event, "type" ) ? event.type : event,
+-			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+-
+-		cur = tmp = elem = elem || document;
+-
+-		// Don't do events on text and comment nodes
+-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+-			return;
+-		}
+-
+-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+-			return;
+-		}
+-
+-		if ( type.indexOf(".") >= 0 ) {
+-			// Namespaced trigger; create a regexp to match event type in handle()
+-			namespaces = type.split(".");
+-			type = namespaces.shift();
+-			namespaces.sort();
+-		}
+-		ontype = type.indexOf(":") < 0 && "on" + type;
+-
+-		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+-		event = event[ jQuery.expando ] ?
+-			event :
+-			new jQuery.Event( type, typeof event === "object" && event );
+-
+-		event.isTrigger = true;
+-		event.namespace = namespaces.join(".");
+-		event.namespace_re = event.namespace ?
+-			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+-			null;
+-
+-		// Clean up the event in case it is being reused
+-		event.result = undefined;
+-		if ( !event.target ) {
+-			event.target = elem;
+-		}
+-
+-		// Clone any incoming data and prepend the event, creating the handler arg list
+-		data = data == null ?
+-			[ event ] :
+-			jQuery.makeArray( data, [ event ] );
+-
+-		// Allow special events to draw outside the lines
+-		special = jQuery.event.special[ type ] || {};
+-		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+-			return;
+-		}
+-
+-		// Determine event propagation path in advance, per W3C events spec (#9951)
+-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+-
+-			bubbleType = special.delegateType || type;
+-			if ( !rfocusMorph.test( bubbleType + type ) ) {
+-				cur = cur.parentNode;
+-			}
+-			for ( ; cur; cur = cur.parentNode ) {
+-				eventPath.push( cur );
+-				tmp = cur;
+-			}
+-
+-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+-			if ( tmp === (elem.ownerDocument || document) ) {
+-				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+-			}
+-		}
+-
+-		// Fire handlers on the event path
+-		i = 0;
+-		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+-
+-			event.type = i > 1 ?
+-				bubbleType :
+-				special.bindType || type;
+-
+-			// jQuery handler
+-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+-			if ( handle ) {
+-				handle.apply( cur, data );
+-			}
+-
+-			// Native handler
+-			handle = ontype && cur[ ontype ];
+-			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+-				event.preventDefault();
+-			}
+-		}
+-		event.type = type;
+-
+-		// If nobody prevented the default action, do it now
+-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+-
+-			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+-
+-				// Call a native DOM method on the target with the same name name as the event.
+-				// Can't use an .isFunction() check here because IE6/7 fails that test.
+-				// Don't do default actions on window, that's where global variables be (#6170)
+-				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+-
+-					// Don't re-trigger an onFOO event when we call its FOO() method
+-					tmp = elem[ ontype ];
+-
+-					if ( tmp ) {
+-						elem[ ontype ] = null;
+-					}
+-
+-					// Prevent re-triggering of the same event, since we already bubbled it above
+-					jQuery.event.triggered = type;
+-					try {
+-						elem[ type ]();
+-					} catch ( e ) {
+-						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+-						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+-					}
+-					jQuery.event.triggered = undefined;
+-
+-					if ( tmp ) {
+-						elem[ ontype ] = tmp;
+-					}
+-				}
+-			}
+-		}
+-
+-		return event.result;
+-	},
+-
+-	dispatch: function( event ) {
+-
+-		// Make a writable jQuery.Event from the native event object
+-		event = jQuery.event.fix( event );
+-
+-		var i, ret, handleObj, matched, j,
+-			handlerQueue = [],
+-			args = core_slice.call( arguments ),
+-			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+-			special = jQuery.event.special[ event.type ] || {};
+-
+-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+-		args[0] = event;
+-		event.delegateTarget = this;
+-
+-		// Call the preDispatch hook for the mapped type, and let it bail if desired
+-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+-			return;
+-		}
+-
+-		// Determine handlers
+-		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+-
+-		// Run delegates first; they may want to stop propagation beneath us
+-		i = 0;
+-		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+-			event.currentTarget = matched.elem;
+-
+-			j = 0;
+-			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+-
+-				// Triggered event must either 1) have no namespace, or
+-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+-				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+-
+-					event.handleObj = handleObj;
+-					event.data = handleObj.data;
+-
+-					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+-							.apply( matched.elem, args );
+-
+-					if ( ret !== undefined ) {
+-						if ( (event.result = ret) === false ) {
+-							event.preventDefault();
+-							event.stopPropagation();
+-						}
+-					}
+-				}
+-			}
+-		}
+-
+-		// Call the postDispatch hook for the mapped type
+-		if ( special.postDispatch ) {
+-			special.postDispatch.call( this, event );
+-		}
+-
+-		return event.result;
+-	},
+-
+-	handlers: function( event, handlers ) {
+-		var sel, handleObj, matches, i,
+-			handlerQueue = [],
+-			delegateCount = handlers.delegateCount,
+-			cur = event.target;
+-
+-		// Find delegate handlers
+-		// Black-hole SVG <use> instance trees (#13180)
+-		// Avoid non-left-click bubbling in Firefox (#3861)
+-		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+-
+-			for ( ; cur != this; cur = cur.parentNode || this ) {
+-
+-				// Don't check non-elements (#13208)
+-				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+-				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+-					matches = [];
+-					for ( i = 0; i < delegateCount; i++ ) {
+-						handleObj = handlers[ i ];
+-
+-						// Don't conflict with Object.prototype properties (#13203)
+-						sel = handleObj.selector + " ";
+-
+-						if ( matches[ sel ] === undefined ) {
+-							matches[ sel ] = handleObj.needsContext ?
+-								jQuery( sel, this ).index( cur ) >= 0 :
+-								jQuery.find( sel, this, null, [ cur ] ).length;
+-						}
+-						if ( matches[ sel ] ) {
+-							matches.push( handleObj );
+-						}
+-					}
+-					if ( matches.length ) {
+-						handlerQueue.push({ elem: cur, handlers: matches });
+-					}
+-				}
+-			}
+-		}
+-
+-		// Add the remaining (directly-bound) handlers
+-		if ( delegateCount < handlers.length ) {
+-			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+-		}
+-
+-		return handlerQueue;
+-	},
+-
+-	fix: function( event ) {
+-		if ( event[ jQuery.expando ] ) {
+-			return event;
+-		}
+-
+-		// Create a writable copy of the event object and normalize some properties
+-		var i, prop, copy,
+-			type = event.type,
+-			originalEvent = event,
+-			fixHook = this.fixHooks[ type ];
+-
+-		if ( !fixHook ) {
+-			this.fixHooks[ type ] = fixHook =
+-				rmouseEvent.test( type ) ? this.mouseHooks :
+-				rkeyEvent.test( type ) ? this.keyHooks :
+-				{};
+-		}
+-		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+-
+-		event = new jQuery.Event( originalEvent );
+-
+-		i = copy.length;
+-		while ( i-- ) {
+-			prop = copy[ i ];
+-			event[ prop ] = originalEvent[ prop ];
+-		}
+-
+-		// Support: IE<9
+-		// Fix target property (#1925)
+-		if ( !event.target ) {
+-			event.target = originalEvent.srcElement || document;
+-		}
+-
+-		// Support: Chrome 23+, Safari?
+-		// Target should not be a text node (#504, #13143)
+-		if ( event.target.nodeType === 3 ) {
+-			event.target = event.target.parentNode;
+-		}
+-
+-		// Support: IE<9
+-		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+-		event.metaKey = !!event.metaKey;
+-
+-		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+-	},
+-
+-	// Includes some event props shared by KeyEvent and MouseEvent
+-	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+-
+-	fixHooks: {},
+-
+-	keyHooks: {
+-		props: "char charCode key keyCode".split(" "),
+-		filter: function( event, original ) {
+-
+-			// Add which for key events
+-			if ( event.which == null ) {
+-				event.which = original.charCode != null ? original.charCode : original.keyCode;
+-			}
+-
+-			return event;
+-		}
+-	},
+-
+-	mouseHooks: {
+-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+-		filter: function( event, original ) {
+-			var body, eventDoc, doc,
+-				button = original.button,
+-				fromElement = original.fromElement;
+-
+-			// Calculate pageX/Y if missing and clientX/Y available
+-			if ( event.pageX == null && original.clientX != null ) {
+-				eventDoc = event.target.ownerDocument || document;
+-				doc = eventDoc.documentElement;
+-				body = eventDoc.body;
+-
+-				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+-			}
+-
+-			// Add relatedTarget, if necessary
+-			if ( !event.relatedTarget && fromElement ) {
+-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+-			}
+-
+-			// Add which for click: 1 === left; 2 === middle; 3 === right
+-			// Note: button is not normalized, so don't use it
+-			if ( !event.which && button !== undefined ) {
+-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+-			}
+-
+-			return event;
+-		}
+-	},
+-
+-	special: {
+-		load: {
+-			// Prevent triggered image.load events from bubbling to window.load
+-			noBubble: true
+-		},
+-		click: {
+-			// For checkbox, fire native event so checked state will be right
+-			trigger: function() {
+-				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+-					this.click();
+-					return false;
+-				}
+-			}
+-		},
+-		focus: {
+-			// Fire native event if possible so blur/focus sequence is correct
+-			trigger: function() {
+-				if ( this !== document.activeElement && this.focus ) {
+-					try {
+-						this.focus();
+-						return false;
+-					} catch ( e ) {
+-						// Support: IE<9
+-						// If we error on focus to hidden element (#1486, #12518),
+-						// let .trigger() run the handlers
+-					}
+-				}
+-			},
+-			delegateType: "focusin"
+-		},
+-		blur: {
+-			trigger: function() {
+-				if ( this === document.activeElement && this.blur ) {
+-					this.blur();
+-					return false;
+-				}
+-			},
+-			delegateType: "focusout"
+-		},
+-
+-		beforeunload: {
+-			postDispatch: function( event ) {
+-
+-				// Even when returnValue equals to undefined Firefox will still show alert
+-				if ( event.result !== undefined ) {
+-					event.originalEvent.returnValue = event.result;
+-				}
+-			}
+-		}
+-	},
+-
+-	simulate: function( type, elem, event, bubble ) {
+-		// Piggyback on a donor event to simulate a different one.
+-		// Fake originalEvent to avoid donor's stopPropagation, but if the
+-		// simulated event prevents default then we do the same on the donor.
+-		var e = jQuery.extend(
+-			new jQuery.Event(),
+-			event,
+-			{ type: type,
+-				isSimulated: true,
+-				originalEvent: {}
+-			}
+-		);
+-		if ( bubble ) {
+-			jQuery.event.trigger( e, null, elem );
+-		} else {
+-			jQuery.event.dispatch.call( elem, e );
+-		}
+-		if ( e.isDefaultPrevented() ) {
+-			event.preventDefault();
+-		}
+-	}
+-};
+-
+-jQuery.removeEvent = document.removeEventListener ?
+-	function( elem, type, handle ) {
+-		if ( elem.removeEventListener ) {
+-			elem.removeEventListener( type, handle, false );
+-		}
+-	} :
+-	function( elem, type, handle ) {
+-		var name = "on" + type;
+-
+-		if ( elem.detachEvent ) {
+-
+-			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+-			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+-			if ( typeof elem[ name ] === core_strundefined ) {
+-				elem[ name ] = null;
+-			}
+-
+-			elem.detachEvent( name, handle );
+-		}
+-	};
+-
+-jQuery.Event = function( src, props ) {
+-	// Allow instantiation without the 'new' keyword
+-	if ( !(this instanceof jQuery.Event) ) {
+-		return new jQuery.Event( src, props );
+-	}
+-
+-	// Event object
+-	if ( src && src.type ) {
+-		this.originalEvent = src;
+-		this.type = src.type;
+-
+-		// Events bubbling up the document may have been marked as prevented
+-		// by a handler lower down the tree; reflect the correct value.
+-		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+-			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+-
+-	// Event type
+-	} else {
+-		this.type = src;
+-	}
+-
+-	// Put explicitly provided properties onto the event object
+-	if ( props ) {
+-		jQuery.extend( this, props );
+-	}
+-
+-	// Create a timestamp if incoming event doesn't have one
+-	this.timeStamp = src && src.timeStamp || jQuery.now();
+-
+-	// Mark it as fixed
+-	this[ jQuery.expando ] = true;
+-};
+-
+-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+-jQuery.Event.prototype = {
+-	isDefaultPrevented: returnFalse,
+-	isPropagationStopped: returnFalse,
+-	isImmediatePropagationStopped: returnFalse,
+-
+-	preventDefault: function() {
+-		var e = this.originalEvent;
+-
+-		this.isDefaultPrevented = returnTrue;
+-		if ( !e ) {
+-			return;
+-		}
+-
+-		// If preventDefault exists, run it on the original event
+-		if ( e.preventDefault ) {
+-			e.preventDefault();
+-
+-		// Support: IE
+-		// Otherwise set the returnValue property of the original event to false
+-		} else {
+-			e.returnValue = false;
+-		}
+-	},
+-	stopPropagation: function() {
+-		var e = this.originalEvent;
+-
+-		this.isPropagationStopped = returnTrue;
+-		if ( !e ) {
+-			return;
+-		}
+-		// If stopPropagation exists, run it on the original event
+-		if ( e.stopPropagation ) {
+-			e.stopPropagation();
+-		}
+-
+-		// Support: IE
+-		// Set the cancelBubble property of the original event to true
+-		e.cancelBubble = true;
+-	},
+-	stopImmediatePropagation: function() {
+-		this.isImmediatePropagationStopped = returnTrue;
+-		this.stopPropagation();
+-	}
+-};
+-
+-// Create mouseenter/leave events using mouseover/out and event-time checks
+-jQuery.each({
+-	mouseenter: "mouseover",
+-	mouseleave: "mouseout"
+-}, function( orig, fix ) {
+-	jQuery.event.special[ orig ] = {
+-		delegateType: fix,
+-		bindType: fix,
+-
+-		handle: function( event ) {
+-			var ret,
+-				target = this,
+-				related = event.relatedTarget,
+-				handleObj = event.handleObj;
+-
+-			// For mousenter/leave call the handler if related is outside the target.
+-			// NB: No relatedTarget if the mouse left/entered the browser window
+-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+-				event.type = handleObj.origType;
+-				ret = handleObj.handler.apply( this, arguments );
+-				event.type = fix;
+-			}
+-			return ret;
+-		}
+-	};
+-});
+-
+-// IE submit delegation
+-if ( !jQuery.support.submitBubbles ) {
+-
+-	jQuery.event.special.submit = {
+-		setup: function() {
+-			// Only need this for delegated form submit events
+-			if ( jQuery.nodeName( this, "form" ) ) {
+-				return false;
+-			}
+-
+-			// Lazy-add a submit handler when a descendant form may potentially be submitted
+-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+-				// Node name check avoids a VML-related crash in IE (#9807)
+-				var elem = e.target,
+-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+-				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+-					jQuery.event.add( form, "submit._submit", function( event ) {
+-						event._submit_bubble = true;
+-					});
+-					jQuery._data( form, "submitBubbles", true );
+-				}
+-			});
+-			// return undefined since we don't need an event listener
+-		},
+-
+-		postDispatch: function( event ) {
+-			// If form was submitted by the user, bubble the event up the tree
+-			if ( event._submit_bubble ) {
+-				delete event._submit_bubble;
+-				if ( this.parentNode && !event.isTrigger ) {
+-					jQuery.event.simulate( "submit", this.parentNode, event, true );
+-				}
+-			}
+-		},
+-
+-		teardown: function() {
+-			// Only need this for delegated form submit events
+-			if ( jQuery.nodeName( this, "form" ) ) {
+-				return false;
+-			}
+-
+-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+-			jQuery.event.remove( this, "._submit" );
+-		}
+-	};
+-}
+-
+-// IE change delegation and checkbox/radio fix
+-if ( !jQuery.support.changeBubbles ) {
+-
+-	jQuery.event.special.change = {
+-
+-		setup: function() {
+-
+-			if ( rformElems.test( this.nodeName ) ) {
+-				// IE doesn't fire change on a check/radio until blur; trigger it on click
+-				// after a propertychange. Eat the blur-change in special.change.handle.
+-				// This still fires onchange a second time for check/radio after blur.
+-				if ( this.type === "checkbox" || this.type === "radio" ) {
+-					jQuery.event.add( this, "propertychange._change", function( event ) {
+-						if ( event.originalEvent.propertyName === "checked" ) {
+-							this._just_changed = true;
+-						}
+-					});
+-					jQuery.event.add( this, "click._change", function( event ) {
+-						if ( this._just_changed && !event.isTrigger ) {
+-							this._just_changed = false;
+-						}
+-						// Allow triggered, simulated change events (#11500)
+-						jQuery.event.simulate( "change", this, event, true );
+-					});
+-				}
+-				return false;
+-			}
+-			// Delegated event; lazy-add a change handler on descendant inputs
+-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+-				var elem = e.target;
+-
+-				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+-					jQuery.event.add( elem, "change._change", function( event ) {
+-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+-							jQuery.event.simulate( "change", this.parentNode, event, true );
+-						}
+-					});
+-					jQuery._data( elem, "changeBubbles", true );
+-				}
+-			});
+-		},
+-
+-		handle: function( event ) {
+-			var elem = event.target;
+-
+-			// Swallow native change events from checkbox/radio, we already triggered them above
+-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+-				return event.handleObj.handler.apply( this, arguments );
+-			}
+-		},
+-
+-		teardown: function() {
+-			jQuery.event.remove( this, "._change" );
+-
+-			return !rformElems.test( this.nodeName );
+-		}
+-	};
+-}
+-
+-// Create "bubbling" focus and blur events
+-if ( !jQuery.support.focusinBubbles ) {
+-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+-
+-		// Attach a single capturing handler while someone wants focusin/focusout
+-		var attaches = 0,
+-			handler = function( event ) {
+-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+-			};
+-
+-		jQuery.event.special[ fix ] = {
+-			setup: function() {
+-				if ( attaches++ === 0 ) {
+-					document.addEventListener( orig, handler, true );
+-				}
+-			},
+-			teardown: function() {
+-				if ( --attaches === 0 ) {
+-					document.removeEventListener( orig, handler, true );
+-				}
+-			}
+-		};
+-	});
+-}
+-
+-jQuery.fn.extend({
+-
+-	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+-		var type, origFn;
+-
+-		// Types can be a map of types/handlers
+-		if ( typeof types === "object" ) {
+-			// ( types-Object, selector, data )
+-			if ( typeof selector !== "string" ) {
+-				// ( types-Object, data )
+-				data = data || selector;
+-				selector = undefined;
+-			}
+-			for ( type in types ) {
+-				this.on( type, selector, data, types[ type ], one );
+-			}
+-			return this;
+-		}
+-
+-		if ( data == null && fn == null ) {
+-			// ( types, fn )
+-			fn = selector;
+-			data = selector = undefined;
+-		} else if ( fn == null ) {
+-			if ( typeof selector === "string" ) {
+-				// ( types, selector, fn )
+-				fn = data;
+-				data = undefined;
+-			} else {
+-				// ( types, data, fn )
+-				fn = data;
+-				data = selector;
+-				selector = undefined;
+-			}
+-		}
+-		if ( fn === false ) {
+-			fn = returnFalse;
+-		} else if ( !fn ) {
+-			return this;
+-		}
+-
+-		if ( one === 1 ) {
+-			origFn = fn;
+-			fn = function( event ) {
+-				// Can use an empty set, since event contains the info
+-				jQuery().off( event );
+-				return origFn.apply( this, arguments );
+-			};
+-			// Use same guid so caller can remove using origFn
+-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+-		}
+-		return this.each( function() {
+-			jQuery.event.add( this, types, fn, data, selector );
+-		});
+-	},
+-	one: function( types, selector, data, fn ) {
+-		return this.on( types, selector, data, fn, 1 );
+-	},
+-	off: function( types, selector, fn ) {
+-		var handleObj, type;
+-		if ( types && types.preventDefault && types.handleObj ) {
+-			// ( event )  dispatched jQuery.Event
+-			handleObj = types.handleObj;
+-			jQuery( types.delegateTarget ).off(
+-				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+-				handleObj.selector,
+-				handleObj.handler
+-			);
+-			return this;
+-		}
+-		if ( typeof types === "object" ) {
+-			// ( types-object [, selector] )
+-			for ( type in types ) {
+-				this.off( type, selector, types[ type ] );
+-			}
+-			return this;
+-		}
+-		if ( selector === false || typeof selector === "function" ) {
+-			// ( types [, fn] )
+-			fn = selector;
+-			selector = undefined;
+-		}
+-		if ( fn === false ) {
+-			fn = returnFalse;
+-		}
+-		return this.each(function() {
+-			jQuery.event.remove( this, types, fn, selector );
+-		});
+-	},
+-
+-	bind: function( types, data, fn ) {
+-		return this.on( types, null, data, fn );
+-	},
+-	unbind: function( types, fn ) {
+-		return this.off( types, null, fn );
+-	},
+-
+-	delegate: function( selector, types, data, fn ) {
+-		return this.on( types, selector, data, fn );
+-	},
+-	undelegate: function( selector, types, fn ) {
+-		// ( namespace ) or ( selector, types [, fn] )
+-		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+-	},
+-
+-	trigger: function( type, data ) {
+-		return this.each(function() {
+-			jQuery.event.trigger( type, data, this );
+-		});
+-	},
+-	triggerHandler: function( type, data ) {
+-		var elem = this[0];
+-		if ( elem ) {
+-			return jQuery.event.trigger( type, data, elem, true );
+-		}
+-	}
+-});
+-/*!
+- * Sizzle CSS Selector Engine
+- * Copyright 2012 jQuery Foundation and other contributors
+- * Released under the MIT license
+- * http://sizzlejs.com/
+- */
+-(function( window, undefined ) {
+-
+-var i,
+-	cachedruns,
+-	Expr,
+-	getText,
+-	isXML,
+-	compile,
+-	hasDuplicate,
+-	outermostContext,
+-
+-	// Local document vars
+-	setDocument,
+-	document,
+-	docElem,
+-	documentIsXML,
+-	rbuggyQSA,
+-	rbuggyMatches,
+-	matches,
+-	contains,
+-	sortOrder,
+-
+-	// Instance-specific data
+-	expando = "sizzle" + -(new Date()),
+-	preferredDoc = window.document,
+-	support = {},
+-	dirruns = 0,
+-	done = 0,
+-	classCache = createCache(),
+-	tokenCache = createCache(),
+-	compilerCache = createCache(),
+-
+-	// General-purpose constants
+-	strundefined = typeof undefined,
+-	MAX_NEGATIVE = 1 << 31,
+-
+-	// Array methods
+-	arr = [],
+-	pop = arr.pop,
+-	push = arr.push,
+-	slice = arr.slice,
+-	// Use a stripped-down indexOf if we can't use a native one
+-	indexOf = arr.indexOf || function( elem ) {
+-		var i = 0,
+-			len = this.length;
+-		for ( ; i < len; i++ ) {
+-			if ( this[i] === elem ) {
+-				return i;
+-			}
+-		}
+-		return -1;
+-	},
+-
+-
+-	// Regular expressions
+-
+-	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+-	whitespace = "[\\x20\\t\\r\\n\\f]",
+-	// http://www.w3.org/TR/css3-syntax/#characters
+-	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+-
+-	// Loosely modeled on CSS identifier characters
+-	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+-	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+-	identifier = characterEncoding.replace( "w", "w#" ),
+-
+-	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+-	operators = "([*^$|!~]?=)",
+-	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+-		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+-
+-	// Prefer arguments quoted,
+-	//   then not containing pseudos/brackets,
+-	//   then attribute selectors/non-parenthetical expressions,
+-	//   then anything else
+-	// These preferences are here to reduce the number of selectors
+-	//   needing tokenize in the PSEUDO preFilter
+-	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+-
+-	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+-
+-	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+-	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+-	rpseudo = new RegExp( pseudos ),
+-	ridentifier = new RegExp( "^" + identifier + "$" ),
+-
+-	matchExpr = {
+-		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+-		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+-		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+-		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+-		"ATTR": new RegExp( "^" + attributes ),
+-		"PSEUDO": new RegExp( "^" + pseudos ),
+-		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+-			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+-			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+-		// For use in libraries implementing .is()
+-		// We use this for POS matching in `select`
+-		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+-			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+-	},
+-
+-	rsibling = /[\x20\t\r\n\f]*[+~]/,
+-
+-	rnative = /^[^{]+\{\s*\[native code/,
+-
+-	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+-	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+-
+-	rinputs = /^(?:input|select|textarea|button)$/i,
+-	rheader = /^h\d$/i,
+-
+-	rescape = /'|\\/g,
+-	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+-
+-	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+-	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+-	funescape = function( _, escaped ) {
+-		var high = "0x" + escaped - 0x10000;
+-		// NaN means non-codepoint
+-		return high !== high ?
+-			escaped :
+-			// BMP codepoint
+-			high < 0 ?
+-				String.fromCharCode( high + 0x10000 ) :
+-				// Supplemental Plane codepoint (surrogate pair)
+-				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+-	};
+-
+-// Use a stripped-down slice if we can't use a native one
+-try {
+-	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
+-} catch ( e ) {
+-	slice = function( i ) {
+-		var elem,
+-			results = [];
+-		while ( (elem = this[i++]) ) {
+-			results.push( elem );
+-		}
+-		return results;
+-	};
+-}
+-
+-/**
+- * For feature detection
+- * @param {Function} fn The function to test for native support
+- */
+-function isNative( fn ) {
+-	return rnative.test( fn + "" );
+-}
+-
+-/**
+- * Create key-value caches of limited size
+- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+- *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+- *	deleting the oldest entry
+- */
+-function createCache() {
+-	var cache,
+-		keys = [];
+-
+-	return (cache = function( key, value ) {
+-		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+-		if ( keys.push( key += " " ) > Expr.cacheLength ) {
+-			// Only keep the most recent entries
+-			delete cache[ keys.shift() ];
+-		}
+-		return (cache[ key ] = value);
+-	});
+-}
+-
+-/**
+- * Mark a function for special use by Sizzle
+- * @param {Function} fn The function to mark
+- */
+-function markFunction( fn ) {
+-	fn[ expando ] = true;
+-	return fn;
+-}
+-
+-/**
+- * Support testing using an element
+- * @param {Function} fn Passed the created div and expects a boolean result
+- */
+-function assert( fn ) {
+-	var div = document.createElement("div");
+-
+-	try {
+-		return fn( div );
+-	} catch (e) {
+-		return false;
+-	} finally {
+-		// release memory in IE
+-		div = null;
+-	}
+-}
+-
+-function Sizzle( selector, context, results, seed ) {
+-	var match, elem, m, nodeType,
+-		// QSA vars
+-		i, groups, old, nid, newContext, newSelector;
+-
+-	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+-		setDocument( context );
+-	}
+-
+-	context = context || document;
+-	results = results || [];
+-
+-	if ( !selector || typeof selector !== "string" ) {
+-		return results;
+-	}
+-
+-	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+-		return [];
+-	}
+-
+-	if ( !documentIsXML && !seed ) {
+-
+-		// Shortcuts
+-		if ( (match = rquickExpr.exec( selector )) ) {
+-			// Speed-up: Sizzle("#ID")
+-			if ( (m = match[1]) ) {
+-				if ( nodeType === 9 ) {
+-					elem = context.getElementById( m );
+-					// Check parentNode to catch when Blackberry 4.6 returns
+-					// nodes that are no longer in the document #6963
+-					if ( elem && elem.parentNode ) {
+-						// Handle the case where IE, Opera, and Webkit return items
+-						// by name instead of ID
+-						if ( elem.id === m ) {
+-							results.push( elem );
+-							return results;
+-						}
+-					} else {
+-						return results;
+-					}
+-				} else {
+-					// Context is not a document
+-					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+-						contains( context, elem ) && elem.id === m ) {
+-						results.push( elem );
+-						return results;
+-					}
+-				}
+-
+-			// Speed-up: Sizzle("TAG")
+-			} else if ( match[2] ) {
+-				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+-				return results;
+-
+-			// Speed-up: Sizzle(".CLASS")
+-			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+-				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+-				return results;
+-			}
+-		}
+-
+-		// QSA path
+-		if ( support.qsa && !rbuggyQSA.test(selector) ) {
+-			old = true;
+-			nid = expando;
+-			newContext = context;
+-			newSelector = nodeType === 9 && selector;
+-
+-			// qSA works strangely on Element-rooted queries
+-			// We can work around this by specifying an extra ID on the root
+-			// and working up from there (Thanks to Andrew Dupont for the technique)
+-			// IE 8 doesn't work on object elements
+-			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+-				groups = tokenize( selector );
+-
+-				if ( (old = context.getAttribute("id")) ) {
+-					nid = old.replace( rescape, "\\$&" );
+-				} else {
+-					context.setAttribute( "id", nid );
+-				}
+-				nid = "[id='" + nid + "'] ";
+-
+-				i = groups.length;
+-				while ( i-- ) {
+-					groups[i] = nid + toSelector( groups[i] );
+-				}
+-				newContext = rsibling.test( selector ) && context.parentNode || context;
+-				newSelector = groups.join(",");
+-			}
+-
+-			if ( newSelector ) {
+-				try {
+-					push.apply( results, slice.call( newContext.querySelectorAll(
+-						newSelector
+-					), 0 ) );
+-					return results;
+-				} catch(qsaError) {
+-				} finally {
+-					if ( !old ) {
+-						context.removeAttribute("id");
+-					}
+-				}
+-			}
+-		}
+-	}
+-
+-	// All others
+-	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+-}
+-
+-/**
+- * Detect xml
+- * @param {Element|Object} elem An element or a document
+- */
+-isXML = Sizzle.isXML = function( elem ) {
+-	// documentElement is verified for cases where it doesn't yet exist
+-	// (such as loading iframes in IE - #4833)
+-	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+-	return documentElement ? documentElement.nodeName !== "HTML" : false;
+-};
+-
+-/**
+- * Sets document-related variables once based on the current document
+- * @param {Element|Object} [doc] An element or document object to use to set the document
+- * @returns {Object} Returns the current document
+- */
+-setDocument = Sizzle.setDocument = function( node ) {
+-	var doc = node ? node.ownerDocument || node : preferredDoc;
+-
+-	// If no document and documentElement is available, return
+-	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+-		return document;
+-	}
+-
+-	// Set our document
+-	document = doc;
+-	docElem = doc.documentElement;
+-
+-	// Support tests
+-	documentIsXML = isXML( doc );
+-
+-	// Check if getElementsByTagName("*") returns only elements
+-	support.tagNameNoComments = assert(function( div ) {
+-		div.appendChild( doc.createComment("") );
+-		return !div.getElementsByTagName("*").length;
+-	});
+-
+-	// Check if attributes should be retrieved by attribute nodes
+-	support.attributes = assert(function( div ) {
+-		div.innerHTML = "<select></select>";
+-		var type = typeof div.lastChild.getAttribute("multiple");
+-		// IE8 returns a string for some attributes even when not present
+-		return type !== "boolean" && type !== "string";
+-	});
+-
+-	// Check if getElementsByClassName can be trusted
+-	support.getByClassName = assert(function( div ) {
+-		// Opera can't find a second classname (in 9.6)
+-		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+-		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+-			return false;
+-		}
+-
+-		// Safari 3.2 caches class attributes and doesn't catch changes
+-		div.lastChild.className = "e";
+-		return div.getElementsByClassName("e").length === 2;
+-	});
+-
+-	// Check if getElementById returns elements by name
+-	// Check if getElementsByName privileges form controls or returns elements by ID
+-	support.getByName = assert(function( div ) {
+-		// Inject content
+-		div.id = expando + 0;
+-		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+-		docElem.insertBefore( div, docElem.firstChild );
+-
+-		// Test
+-		var pass = doc.getElementsByName &&
+-			// buggy browsers will return fewer than the correct 2
+-			doc.getElementsByName( expando ).length === 2 +
+-			// buggy browsers will return more than the correct 0
+-			doc.getElementsByName( expando + 0 ).length;
+-		support.getIdNotName = !doc.getElementById( expando );
+-
+-		// Cleanup
+-		docElem.removeChild( div );
+-
+-		return pass;
+-	});
+-
+-	// IE6/7 return modified attributes
+-	Expr.attrHandle = assert(function( div ) {
+-		div.innerHTML = "<a href='#'></a>";
+-		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+-			div.firstChild.getAttribute("href") === "#";
+-	}) ?
+-		{} :
+-		{
+-			"href": function( elem ) {
+-				return elem.getAttribute( "href", 2 );
+-			},
+-			"type": function( elem ) {
+-				return elem.getAttribute("type");
+-			}
+-		};
+-
+-	// ID find and filter
+-	if ( support.getIdNotName ) {
+-		Expr.find["ID"] = function( id, context ) {
+-			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+-				var m = context.getElementById( id );
+-				// Check parentNode to catch when Blackberry 4.6 returns
+-				// nodes that are no longer in the document #6963
+-				return m && m.parentNode ? [m] : [];
+-			}
+-		};
+-		Expr.filter["ID"] = function( id ) {
+-			var attrId = id.replace( runescape, funescape );
+-			return function( elem ) {
+-				return elem.getAttribute("id") === attrId;
+-			};
+-		};
+-	} else {
+-		Expr.find["ID"] = function( id, context ) {
+-			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+-				var m = context.getElementById( id );
+-
+-				return m ?
+-					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+-						[m] :
+-						undefined :
+-					[];
+-			}
+-		};
+-		Expr.filter["ID"] =  function( id ) {
+-			var attrId = id.replace( runescape, funescape );
+-			return function( elem ) {
+-				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+-				return node && node.value === attrId;
+-			};
+-		};
+-	}
+-
+-	// Tag
+-	Expr.find["TAG"] = support.tagNameNoComments ?
+-		function( tag, context ) {
+-			if ( typeof context.getElementsByTagName !== strundefined ) {
+-				return context.getElementsByTagName( tag );
+-			}
+-		} :
+-		function( tag, context ) {
+-			var elem,
+-				tmp = [],
+-				i = 0,
+-				results = context.getElementsByTagName( tag );
+-
+-			// Filter out possible comments
+-			if ( tag === "*" ) {
+-				while ( (elem = results[i++]) ) {
+-					if ( elem.nodeType === 1 ) {
+-						tmp.push( elem );
+-					}
+-				}
+-
+-				return tmp;
+-			}
+-			return results;
+-		};
+-
+-	// Name
+-	Expr.find["NAME"] = support.getByName && function( tag, context ) {
+-		if ( typeof context.getElementsByName !== strundefined ) {
+-			return context.getElementsByName( name );
+-		}
+-	};
+-
+-	// Class
+-	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+-		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+-			return context.getElementsByClassName( className );
+-		}
+-	};
+-
+-	// QSA and matchesSelector support
+-
+-	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+-	rbuggyMatches = [];
+-
+-	// qSa(:focus) reports false when true (Chrome 21),
+-	// no need to also add to buggyMatches since matches checks buggyQSA
+-	// A support test would require too much code (would include document ready)
+-	rbuggyQSA = [ ":focus" ];
+-
+-	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+-		// Build QSA regex
+-		// Regex strategy adopted from Diego Perini
+-		assert(function( div ) {
+-			// Select is set to empty string on purpose
+-			// This is to test IE's treatment of not explictly
+-			// setting a boolean content attribute,
+-			// since its presence should be enough
+-			// http://bugs.jquery.com/ticket/12359
+-			div.innerHTML = "<select><option selected=''></option></select>";
+-
+-			// IE8 - Some boolean attributes are not treated correctly
+-			if ( !div.querySelectorAll("[selected]").length ) {
+-				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+-			}
+-
+-			// Webkit/Opera - :checked should return selected option elements
+-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+-			// IE8 throws error here and will not see later tests
+-			if ( !div.querySelectorAll(":checked").length ) {
+-				rbuggyQSA.push(":checked");
+-			}
+-		});
+-
+-		assert(function( div ) {
+-
+-			// Opera 10-12/IE8 - ^= $= *= and empty values
+-			// Should not select anything
+-			div.innerHTML = "<input type='hidden' i=''/>";
+-			if ( div.querySelectorAll("[i^='']").length ) {
+-				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+-			}
+-
+-			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+-			// IE8 throws error here and will not see later tests
+-			if ( !div.querySelectorAll(":enabled").length ) {
+-				rbuggyQSA.push( ":enabled", ":disabled" );
+-			}
+-
+-			// Opera 10-11 does not throw on post-comma invalid pseudos
+-			div.querySelectorAll("*,:x");
+-			rbuggyQSA.push(",.*:");
+-		});
+-	}
+-
+-	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+-		docElem.mozMatchesSelector ||
+-		docElem.webkitMatchesSelector ||
+-		docElem.oMatchesSelector ||
+-		docElem.msMatchesSelector) )) ) {
+-
+-		assert(function( div ) {
+-			// Check to see if it's possible to do matchesSelector
+-			// on a disconnected node (IE 9)
+-			support.disconnectedMatch = matches.call( div, "div" );
+-
+-			// This should fail with an exception
+-			// Gecko does not error, returns false instead
+-			matches.call( div, "[s!='']:x" );
+-			rbuggyMatches.push( "!=", pseudos );
+-		});
+-	}
+-
+-	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+-	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+-
+-	// Element contains another
+-	// Purposefully does not implement inclusive descendent
+-	// As in, an element does not contain itself
+-	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+-		function( a, b ) {
+-			var adown = a.nodeType === 9 ? a.documentElement : a,
+-				bup = b && b.parentNode;
+-			return a === bup || !!( bup && bup.nodeType === 1 && (
+-				adown.contains ?
+-					adown.contains( bup ) :
+-					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+-			));
+-		} :
+-		function( a, b ) {
+-			if ( b ) {
+-				while ( (b = b.parentNode) ) {
+-					if ( b === a ) {
+-						return true;
+-					}
+-				}
+-			}
+-			return false;
+-		};
+-
+-	// Document order sorting
+-	sortOrder = docElem.compareDocumentPosition ?
+-	function( a, b ) {
+-		var compare;
+-
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-		}
+-
+-		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+-			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+-				if ( a === doc || contains( preferredDoc, a ) ) {
+-					return -1;
+-				}
+-				if ( b === doc || contains( preferredDoc, b ) ) {
+-					return 1;
+-				}
+-				return 0;
+-			}
+-			return compare & 4 ? -1 : 1;
+-		}
+-
+-		return a.compareDocumentPosition ? -1 : 1;
+-	} :
+-	function( a, b ) {
+-		var cur,
+-			i = 0,
+-			aup = a.parentNode,
+-			bup = b.parentNode,
+-			ap = [ a ],
+-			bp = [ b ];
+-
+-		// Exit early if the nodes are identical
+-		if ( a === b ) {
+-			hasDuplicate = true;
+-			return 0;
+-
+-		// Parentless nodes are either documents or disconnected
+-		} else if ( !aup || !bup ) {
+-			return a === doc ? -1 :
+-				b === doc ? 1 :
+-				aup ? -1 :
+-				bup ? 1 :
+-				0;
+-
+-		// If the nodes are siblings, we can do a quick check
+-		} else if ( aup === bup ) {
+-			return siblingCheck( a, b );
+-		}
+-
+-		// Otherwise we need full lists of their ancestors for comparison
+-		cur = a;
+-		while ( (cur = cur.parentNode) ) {
+-			ap.unshift( cur );
+-		}
+-		cur = b;
+-		while ( (cur = cur.parentNode) ) {
+-			bp.unshift( cur );
+-		}
+-
+-		// Walk down the tree looking for a discrepancy
+-		while ( ap[i] === bp[i] ) {
+-			i++;
+-		}
+-
+-		return i ?
+-			// Do a sibling check if the nodes have a common ancestor
+-			siblingCheck( ap[i], bp[i] ) :
+-
+-			// Otherwise nodes in our document sort first
+-			ap[i] === preferredDoc ? -1 :
+-			bp[i] === preferredDoc ? 1 :
+-			0;
+-	};
+-
+-	// Always assume the presence of duplicates if sort doesn't
+-	// pass them to our comparison function (as in Google Chrome).
+-	hasDuplicate = false;
+-	[0, 0].sort( sortOrder );
+-	support.detectDuplicates = hasDuplicate;
+-
+-	return document;
+-};
+-
+-Sizzle.matches = function( expr, elements ) {
+-	return Sizzle( expr, null, null, elements );
+-};
+-
+-Sizzle.matchesSelector = function( elem, expr ) {
+-	// Set document vars if needed
+-	if ( ( elem.ownerDocument || elem ) !== document ) {
+-		setDocument( elem );
+-	}
+-
+-	// Make sure that attribute selectors are quoted
+-	expr = expr.replace( rattributeQuotes, "='$1']" );
+-
+-	// rbuggyQSA always contains :focus, so no need for an existence check
+-	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+-		try {
+-			var ret = matches.call( elem, expr );
+-
+-			// IE 9's matchesSelector returns false on disconnected nodes
+-			if ( ret || support.disconnectedMatch ||
+-					// As well, disconnected nodes are said to be in a document
+-					// fragment in IE 9
+-					elem.document && elem.document.nodeType !== 11 ) {
+-				return ret;
+-			}
+-		} catch(e) {}
+-	}
+-
+-	return Sizzle( expr, document, null, [elem] ).length > 0;
+-};
+-
+-Sizzle.contains = function( context, elem ) {
+-	// Set document vars if needed
+-	if ( ( context.ownerDocument || context ) !== document ) {
+-		setDocument( context );
+-	}
+-	return contains( context, elem );
+-};
+-
+-Sizzle.attr = function( elem, name ) {
+-	var val;
+-
+-	// Set document vars if needed
+-	if ( ( elem.ownerDocument || elem ) !== document ) {
+-		setDocument( elem );
+-	}
+-
+-	if ( !documentIsXML ) {
+-		name = name.toLowerCase();
+-	}
+-	if ( (val = Expr.attrHandle[ name ]) ) {
+-		return val( elem );
+-	}
+-	if ( documentIsXML || support.attributes ) {
+-		return elem.getAttribute( name );
+-	}
+-	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+-		name :
+-		val && val.specified ? val.value : null;
+-};
+-
+-Sizzle.error = function( msg ) {
+-	throw new Error( "Syntax error, unrecognized expression: " + msg );
+-};
+-
+-// Document sorting and removing duplicates
+-Sizzle.uniqueSort = function( results ) {
+-	var elem,
+-		duplicates = [],
+-		i = 1,
+-		j = 0;
+-
+-	// Unless we *know* we can detect duplicates, assume their presence
+-	hasDuplicate = !support.detectDuplicates;
+-	results.sort( sortOrder );
+-
+-	if ( hasDuplicate ) {
+-		for ( ; (elem = results[i]); i++ ) {
+-			if ( elem === results[ i - 1 ] ) {
+-				j = duplicates.push( i );
+-			}
+-		}
+-		while ( j-- ) {
+-			results.splice( duplicates[ j ], 1 );
+-		}
+-	}
+-
+-	return results;
+-};
+-
+-function siblingCheck( a, b ) {
+-	var cur = b && a,
+-		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
+-
+-	// Use IE sourceIndex if available on both nodes
+-	if ( diff ) {
+-		return diff;
+-	}
+-
+-	// Check if b follows a
+-	if ( cur ) {
+-		while ( (cur = cur.nextSibling) ) {
+-			if ( cur === b ) {
+-				return -1;
+-			}
+-		}
+-	}
+-
+-	return a ? 1 : -1;
+-}
+-
+-// Returns a function to use in pseudos for input types
+-function createInputPseudo( type ) {
+-	return function( elem ) {
+-		var name = elem.nodeName.toLowerCase();
+-		return name === "input" && elem.type === type;
+-	};
+-}
+-
+-// Returns a function to use in pseudos for buttons
+-function createButtonPseudo( type ) {
+-	return function( elem ) {
+-		var name = elem.nodeName.toLowerCase();
+-		return (name === "input" || name === "button") && elem.type === type;
+-	};
+-}
+-
+-// Returns a function to use in pseudos for positionals
+-function createPositionalPseudo( fn ) {
+-	return markFunction(function( argument ) {
+-		argument = +argument;
+-		return markFunction(function( seed, matches ) {
+-			var j,
+-				matchIndexes = fn( [], seed.length, argument ),
+-				i = matchIndexes.length;
+-
+-			// Match elements found at the specified indexes
+-			while ( i-- ) {
+-				if ( seed[ (j = matchIndexes[i]) ] ) {
+-					seed[j] = !(matches[j] = seed[j]);
+-				}
+-			}
+-		});
+-	});
+-}
+-
+-/**
+- * Utility function for retrieving the text value of an array of DOM nodes
+- * @param {Array|Element} elem
+- */
+-getText = Sizzle.getText = function( elem ) {
+-	var node,
+-		ret = "",
+-		i = 0,
+-		nodeType = elem.nodeType;
+-
+-	if ( !nodeType ) {
+-		// If no nodeType, this is expected to be an array
+-		for ( ; (node = elem[i]); i++ ) {
+-			// Do not traverse comment nodes
+-			ret += getText( node );
+-		}
+-	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+-		// Use textContent for elements
+-		// innerText usage removed for consistency of new lines (see #11153)
+-		if ( typeof elem.textContent === "string" ) {
+-			return elem.textContent;
+-		} else {
+-			// Traverse its children
+-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+-				ret += getText( elem );
+-			}
+-		}
+-	} else if ( nodeType === 3 || nodeType === 4 ) {
+-		return elem.nodeValue;
+-	}
+-	// Do not include comment or processing instruction nodes
+-
+-	return ret;
+-};
+-
+-Expr = Sizzle.selectors = {
+-
+-	// Can be adjusted by the user
+-	cacheLength: 50,
+-
+-	createPseudo: markFunction,
+-
+-	match: matchExpr,
+-
+-	find: {},
+-
+-	relative: {
+-		">": { dir: "parentNode", first: true },
+-		" ": { dir: "parentNode" },
+-		"+": { dir: "previousSibling", first: true },
+-		"~": { dir: "previousSibling" }
+-	},
+-
+-	preFilter: {
+-		"ATTR": function( match ) {
+-			match[1] = match[1].replace( runescape, funescape );
+-
+-			// Move the given value to match[3] whether quoted or unquoted
+-			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+-
+-			if ( match[2] === "~=" ) {
+-				match[3] = " " + match[3] + " ";
+-			}
+-
+-			return match.slice( 0, 4 );
+-		},
+-
+-		"CHILD": function( match ) {
+-			/* matches from matchExpr["CHILD"]
+-				1 type (only|nth|...)
+-				2 what (child|of-type)
+-				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+-				4 xn-component of xn+y argument ([+-]?\d*n|)
+-				5 sign of xn-component
+-				6 x of xn-component
+-				7 sign of y-component
+-				8 y of y-component
+-			*/
+-			match[1] = match[1].toLowerCase();
+-
+-			if ( match[1].slice( 0, 3 ) === "nth" ) {
+-				// nth-* requires argument
+-				if ( !match[3] ) {
+-					Sizzle.error( match[0] );
+-				}
+-
+-				// numeric x and y parameters for Expr.filter.CHILD
+-				// remember that false/true cast respectively to 0/1
+-				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+-				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+-
+-			// other types prohibit arguments
+-			} else if ( match[3] ) {
+-				Sizzle.error( match[0] );
+-			}
+-
+-			return match;
+-		},
+-
+-		"PSEUDO": function( match ) {
+-			var excess,
+-				unquoted = !match[5] && match[2];
+-
+-			if ( matchExpr["CHILD"].test( match[0] ) ) {
+-				return null;
+-			}
+-
+-			// Accept quoted arguments as-is
+-			if ( match[4] ) {
+-				match[2] = match[4];
+-
+-			// Strip excess characters from unquoted arguments
+-			} else if ( unquoted && rpseudo.test( unquoted ) &&
+-				// Get excess from tokenize (recursively)
+-				(excess = tokenize( unquoted, true )) &&
+-				// advance to the next closing parenthesis
+-				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+-
+-				// excess is a negative index
+-				match[0] = match[0].slice( 0, excess );
+-				match[2] = unquoted.slice( 0, excess );
+-			}
+-
+-			// Return only captures needed by the pseudo filter method (type and argument)
+-			return match.slice( 0, 3 );
+-		}
+-	},
+-
+-	filter: {
+-
+-		"TAG": function( nodeName ) {
+-			if ( nodeName === "*" ) {
+-				return function() { return true; };
+-			}
+-
+-			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+-			return function( elem ) {
+-				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+-			};
+-		},
+-
+-		"CLASS": function( className ) {
+-			var pattern = classCache[ className + " " ];
+-
+-			return pattern ||
+-				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+-				classCache( className, function( elem ) {
+-					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+-				});
+-		},
+-
+-		"ATTR": function( name, operator, check ) {
+-			return function( elem ) {
+-				var result = Sizzle.attr( elem, name );
+-
+-				if ( result == null ) {
+-					return operator === "!=";
+-				}
+-				if ( !operator ) {
+-					return true;
+-				}
+-
+-				result += "";
+-
+-				return operator === "=" ? result === check :
+-					operator === "!=" ? result !== check :
+-					operator === "^=" ? check && result.indexOf( check ) === 0 :
+-					operator === "*=" ? check && result.indexOf( check ) > -1 :
+-					operator === "$=" ? check && result.slice( -check.length ) === check :
+-					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+-					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+-					false;
+-			};
+-		},
+-
+-		"CHILD": function( type, what, argument, first, last ) {
+-			var simple = type.slice( 0, 3 ) !== "nth",
+-				forward = type.slice( -4 ) !== "last",
+-				ofType = what === "of-type";
+-
+-			return first === 1 && last === 0 ?
+-
+-				// Shortcut for :nth-*(n)
+-				function( elem ) {
+-					return !!elem.parentNode;
+-				} :
+-
+-				function( elem, context, xml ) {
+-					var cache, outerCache, node, diff, nodeIndex, start,
+-						dir = simple !== forward ? "nextSibling" : "previousSibling",
+-						parent = elem.parentNode,
+-						name = ofType && elem.nodeName.toLowerCase(),
+-						useCache = !xml && !ofType;
+-
+-					if ( parent ) {
+-
+-						// :(first|last|only)-(child|of-type)
+-						if ( simple ) {
+-							while ( dir ) {
+-								node = elem;
+-								while ( (node = node[ dir ]) ) {
+-									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+-										return false;
+-									}
+-								}
+-								// Reverse direction for :only-* (if we haven't yet done so)
+-								start = dir = type === "only" && !start && "nextSibling";
+-							}
+-							return true;
+-						}
+-
+-						start = [ forward ? parent.firstChild : parent.lastChild ];
+-
+-						// non-xml :nth-child(...) stores cache data on `parent`
+-						if ( forward && useCache ) {
+-							// Seek `elem` from a previously-cached index
+-							outerCache = parent[ expando ] || (parent[ expando ] = {});
+-							cache = outerCache[ type ] || [];
+-							nodeIndex = cache[0] === dirruns && cache[1];
+-							diff = cache[0] === dirruns && cache[2];
+-							node = nodeIndex && parent.childNodes[ nodeIndex ];
+-
+-							while ( (node = ++nodeIndex && node && node[ dir ] ||
+-
+-								// Fallback to seeking `elem` from the start
+-								(diff = nodeIndex = 0) || start.pop()) ) {
+-
+-								// When found, cache indexes on `parent` and break
+-								if ( node.nodeType === 1 && ++diff && node === elem ) {
+-									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+-									break;
+-								}
+-							}
+-
+-						// Use previously-cached element index if available
+-						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+-							diff = cache[1];
+-
+-						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+-						} else {
+-							// Use the same loop as above to seek `elem` from the start
+-							while ( (node = ++nodeIndex && node && node[ dir ] ||
+-								(diff = nodeIndex = 0) || start.pop()) ) {
+-
+-								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+-									// Cache the index of each encountered element
+-									if ( useCache ) {
+-										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+-									}
+-
+-									if ( node === elem ) {
+-										break;
+-									}
+-								}
+-							}
+-						}
+-
+-						// Incorporate the offset, then check against cycle size
+-						diff -= last;
+-						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+-					}
+-				};
+-		},
+-
+-		"PSEUDO": function( pseudo, argument ) {
+-			// pseudo-class names are case-insensitive
+-			// http://www.w3.org/TR/selectors/#pseudo-classes
+-			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+-			// Remember that setFilters inherits from pseudos
+-			var args,
+-				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+-					Sizzle.error( "unsupported pseudo: " + pseudo );
+-
+-			// The user may use createPseudo to indicate that
+-			// arguments are needed to create the filter function
+-			// just as Sizzle does
+-			if ( fn[ expando ] ) {
+-				return fn( argument );
+-			}
+-
+-			// But maintain support for old signatures
+-			if ( fn.length > 1 ) {
+-				args = [ pseudo, pseudo, "", argument ];
+-				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+-					markFunction(function( seed, matches ) {
+-						var idx,
+-							matched = fn( seed, argument ),
+-							i = matched.length;
+-						while ( i-- ) {
+-							idx = indexOf.call( seed, matched[i] );
+-							seed[ idx ] = !( matches[ idx ] = matched[i] );
+-						}
+-					}) :
+-					function( elem ) {
+-						return fn( elem, 0, args );
+-					};
+-			}
+-
+-			return fn;
+-		}
+-	},
+-
+-	pseudos: {
+-		// Potentially complex pseudos
+-		"not": markFunction(function( selector ) {
+-			// Trim the selector passed to compile
+-			// to avoid treating leading and trailing
+-			// spaces as combinators
+-			var input = [],
+-				results = [],
+-				matcher = compile( selector.replace( rtrim, "$1" ) );
+-
+-			return matcher[ expando ] ?
+-				markFunction(function( seed, matches, context, xml ) {
+-					var elem,
+-						unmatched = matcher( seed, null, xml, [] ),
+-						i = seed.length;
+-
+-					// Match elements unmatched by `matcher`
+-					while ( i-- ) {
+-						if ( (elem = unmatched[i]) ) {
+-							seed[i] = !(matches[i] = elem);
+-						}
+-					}
+-				}) :
+-				function( elem, context, xml ) {
+-					input[0] = elem;
+-					matcher( input, null, xml, results );
+-					return !results.pop();
+-				};
+-		}),
+-
+-		"has": markFunction(function( selector ) {
+-			return function( elem ) {
+-				return Sizzle( selector, elem ).length > 0;
+-			};
+-		}),
+-
+-		"contains": markFunction(function( text ) {
+-			return function( elem ) {
+-				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+-			};
+-		}),
+-
+-		// "Whether an element is represented by a :lang() selector
+-		// is based solely on the element's language value
+-		// being equal to the identifier C,
+-		// or beginning with the identifier C immediately followed by "-".
+-		// The matching of C against the element's language value is performed case-insensitively.
+-		// The identifier C does not have to be a valid language name."
+-		// http://www.w3.org/TR/selectors/#lang-pseudo
+-		"lang": markFunction( function( lang ) {
+-			// lang value must be a valid identifider
+-			if ( !ridentifier.test(lang || "") ) {
+-				Sizzle.error( "unsupported lang: " + lang );
+-			}
+-			lang = lang.replace( runescape, funescape ).toLowerCase();
+-			return function( elem ) {
+-				var elemLang;
+-				do {
+-					if ( (elemLang = documentIsXML ?
+-						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+-						elem.lang) ) {
+-
+-						elemLang = elemLang.toLowerCase();
+-						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+-					}
+-				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+-				return false;
+-			};
+-		}),
+-
+-		// Miscellaneous
+-		"target": function( elem ) {
+-			var hash = window.location && window.location.hash;
+-			return hash && hash.slice( 1 ) === elem.id;
+-		},
+-
+-		"root": function( elem ) {
+-			return elem === docElem;
+-		},
+-
+-		"focus": function( elem ) {
+-			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+-		},
+-
+-		// Boolean properties
+-		"enabled": function( elem ) {
+-			return elem.disabled === false;
+-		},
+-
+-		"disabled": function( elem ) {
+-			return elem.disabled === true;
+-		},
+-
+-		"checked": function( elem ) {
+-			// In CSS3, :checked should return both checked and selected elements
+-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+-			var nodeName = elem.nodeName.toLowerCase();
+-			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+-		},
+-
+-		"selected": function( elem ) {
+-			// Accessing this property makes selected-by-default
+-			// options in Safari work properly
+-			if ( elem.parentNode ) {
+-				elem.parentNode.selectedIndex;
+-			}
+-
+-			return elem.selected === true;
+-		},
+-
+-		// Contents
+-		"empty": function( elem ) {
+-			// http://www.w3.org/TR/selectors/#empty-pseudo
+-			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+-			//   not comment, processing instructions, or others
+-			// Thanks to Diego Perini for the nodeName shortcut
+-			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+-				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		},
+-
+-		"parent": function( elem ) {
+-			return !Expr.pseudos["empty"]( elem );
+-		},
+-
+-		// Element/input types
+-		"header": function( elem ) {
+-			return rheader.test( elem.nodeName );
+-		},
+-
+-		"input": function( elem ) {
+-			return rinputs.test( elem.nodeName );
+-		},
+-
+-		"button": function( elem ) {
+-			var name = elem.nodeName.toLowerCase();
+-			return name === "input" && elem.type === "button" || name === "button";
+-		},
+-
+-		"text": function( elem ) {
+-			var attr;
+-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+-			// use getAttribute instead to test this case
+-			return elem.nodeName.toLowerCase() === "input" &&
+-				elem.type === "text" &&
+-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+-		},
+-
+-		// Position-in-collection
+-		"first": createPositionalPseudo(function() {
+-			return [ 0 ];
+-		}),
+-
+-		"last": createPositionalPseudo(function( matchIndexes, length ) {
+-			return [ length - 1 ];
+-		}),
+-
+-		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			return [ argument < 0 ? argument + length : argument ];
+-		}),
+-
+-		"even": createPositionalPseudo(function( matchIndexes, length ) {
+-			var i = 0;
+-			for ( ; i < length; i += 2 ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+-			var i = 1;
+-			for ( ; i < length; i += 2 ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			var i = argument < 0 ? argument + length : argument;
+-			for ( ; --i >= 0; ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		}),
+-
+-		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+-			var i = argument < 0 ? argument + length : argument;
+-			for ( ; ++i < length; ) {
+-				matchIndexes.push( i );
+-			}
+-			return matchIndexes;
+-		})
+-	}
+-};
+-
+-// Add button/input type pseudos
+-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+-	Expr.pseudos[ i ] = createInputPseudo( i );
+-}
+-for ( i in { submit: true, reset: true } ) {
+-	Expr.pseudos[ i ] = createButtonPseudo( i );
+-}
+-
+-function tokenize( selector, parseOnly ) {
+-	var matched, match, tokens, type,
+-		soFar, groups, preFilters,
+-		cached = tokenCache[ selector + " " ];
+-
+-	if ( cached ) {
+-		return parseOnly ? 0 : cached.slice( 0 );
+-	}
+-
+-	soFar = selector;
+-	groups = [];
+-	preFilters = Expr.preFilter;
+-
+-	while ( soFar ) {
+-
+-		// Comma and first run
+-		if ( !matched || (match = rcomma.exec( soFar )) ) {
+-			if ( match ) {
+-				// Don't consume trailing commas as valid
+-				soFar = soFar.slice( match[0].length ) || soFar;
+-			}
+-			groups.push( tokens = [] );
+-		}
+-
+-		matched = false;
+-
+-		// Combinators
+-		if ( (match = rcombinators.exec( soFar )) ) {
+-			matched = match.shift();
+-			tokens.push( {
+-				value: matched,
+-				// Cast descendant combinators to space
+-				type: match[0].replace( rtrim, " " )
+-			} );
+-			soFar = soFar.slice( matched.length );
+-		}
+-
+-		// Filters
+-		for ( type in Expr.filter ) {
+-			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+-				(match = preFilters[ type ]( match ))) ) {
+-				matched = match.shift();
+-				tokens.push( {
+-					value: matched,
+-					type: type,
+-					matches: match
+-				} );
+-				soFar = soFar.slice( matched.length );
+-			}
+-		}
+-
+-		if ( !matched ) {
+-			break;
+-		}
+-	}
+-
+-	// Return the length of the invalid excess
+-	// if we're just parsing
+-	// Otherwise, throw an error or return tokens
+-	return parseOnly ?
+-		soFar.length :
+-		soFar ?
+-			Sizzle.error( selector ) :
+-			// Cache the tokens
+-			tokenCache( selector, groups ).slice( 0 );
+-}
+-
+-function toSelector( tokens ) {
+-	var i = 0,
+-		len = tokens.length,
+-		selector = "";
+-	for ( ; i < len; i++ ) {
+-		selector += tokens[i].value;
+-	}
+-	return selector;
+-}
+-
+-function addCombinator( matcher, combinator, base ) {
+-	var dir = combinator.dir,
+-		checkNonElements = base && dir === "parentNode",
+-		doneName = done++;
+-
+-	return combinator.first ?
+-		// Check against closest ancestor/preceding element
+-		function( elem, context, xml ) {
+-			while ( (elem = elem[ dir ]) ) {
+-				if ( elem.nodeType === 1 || checkNonElements ) {
+-					return matcher( elem, context, xml );
+-				}
+-			}
+-		} :
+-
+-		// Check against all ancestor/preceding elements
+-		function( elem, context, xml ) {
+-			var data, cache, outerCache,
+-				dirkey = dirruns + " " + doneName;
+-
+-			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+-			if ( xml ) {
+-				while ( (elem = elem[ dir ]) ) {
+-					if ( elem.nodeType === 1 || checkNonElements ) {
+-						if ( matcher( elem, context, xml ) ) {
+-							return true;
+-						}
+-					}
+-				}
+-			} else {
+-				while ( (elem = elem[ dir ]) ) {
+-					if ( elem.nodeType === 1 || checkNonElements ) {
+-						outerCache = elem[ expando ] || (elem[ expando ] = {});
+-						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+-							if ( (data = cache[1]) === true || data === cachedruns ) {
+-								return data === true;
+-							}
+-						} else {
+-							cache = outerCache[ dir ] = [ dirkey ];
+-							cache[1] = matcher( elem, context, xml ) || cachedruns;
+-							if ( cache[1] === true ) {
+-								return true;
+-							}
+-						}
+-					}
+-				}
+-			}
+-		};
+-}
+-
+-function elementMatcher( matchers ) {
+-	return matchers.length > 1 ?
+-		function( elem, context, xml ) {
+-			var i = matchers.length;
+-			while ( i-- ) {
+-				if ( !matchers[i]( elem, context, xml ) ) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		} :
+-		matchers[0];
+-}
+-
+-function condense( unmatched, map, filter, context, xml ) {
+-	var elem,
+-		newUnmatched = [],
+-		i = 0,
+-		len = unmatched.length,
+-		mapped = map != null;
+-
+-	for ( ; i < len; i++ ) {
+-		if ( (elem = unmatched[i]) ) {
+-			if ( !filter || filter( elem, context, xml ) ) {
+-				newUnmatched.push( elem );
+-				if ( mapped ) {
+-					map.push( i );
+-				}
+-			}
+-		}
+-	}
+-
+-	return newUnmatched;
+-}
+-
+-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+-	if ( postFilter && !postFilter[ expando ] ) {
+-		postFilter = setMatcher( postFilter );
+-	}
+-	if ( postFinder && !postFinder[ expando ] ) {
+-		postFinder = setMatcher( postFinder, postSelector );
+-	}
+-	return markFunction(function( seed, results, context, xml ) {
+-		var temp, i, elem,
+-			preMap = [],
+-			postMap = [],
+-			preexisting = results.length,
+-
+-			// Get initial elements from seed or context
+-			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+-
+-			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+-			matcherIn = preFilter && ( seed || !selector ) ?
+-				condense( elems, preMap, preFilter, context, xml ) :
+-				elems,
+-
+-			matcherOut = matcher ?
+-				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+-				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+-
+-					// ...intermediate processing is necessary
+-					[] :
+-
+-					// ...otherwise use results directly
+-					results :
+-				matcherIn;
+-
+-		// Find primary matches
+-		if ( matcher ) {
+-			matcher( matcherIn, matcherOut, context, xml );
+-		}
+-
+-		// Apply postFilter
+-		if ( postFilter ) {
+-			temp = condense( matcherOut, postMap );
+-			postFilter( temp, [], context, xml );
+-
+-			// Un-match failing elements by moving them back to matcherIn
+-			i = temp.length;
+-			while ( i-- ) {
+-				if ( (elem = temp[i]) ) {
+-					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+-				}
+-			}
+-		}
+-
+-		if ( seed ) {
+-			if ( postFinder || preFilter ) {
+-				if ( postFinder ) {
+-					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+-					temp = [];
+-					i = matcherOut.length;
+-					while ( i-- ) {
+-						if ( (elem = matcherOut[i]) ) {
+-							// Restore matcherIn since elem is not yet a final match
+-							temp.push( (matcherIn[i] = elem) );
+-						}
+-					}
+-					postFinder( null, (matcherOut = []), temp, xml );
+-				}
+-
+-				// Move matched elements from seed to results to keep them synchronized
+-				i = matcherOut.length;
+-				while ( i-- ) {
+-					if ( (elem = matcherOut[i]) &&
+-						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+-
+-						seed[temp] = !(results[temp] = elem);
+-					}
+-				}
+-			}
+-
+-		// Add elements to results, through postFinder if defined
+-		} else {
+-			matcherOut = condense(
+-				matcherOut === results ?
+-					matcherOut.splice( preexisting, matcherOut.length ) :
+-					matcherOut
+-			);
+-			if ( postFinder ) {
+-				postFinder( null, results, matcherOut, xml );
+-			} else {
+-				push.apply( results, matcherOut );
+-			}
+-		}
+-	});
+-}
+-
+-function matcherFromTokens( tokens ) {
+-	var checkContext, matcher, j,
+-		len = tokens.length,
+-		leadingRelative = Expr.relative[ tokens[0].type ],
+-		implicitRelative = leadingRelative || Expr.relative[" "],
+-		i = leadingRelative ? 1 : 0,
+-
+-		// The foundational matcher ensures that elements are reachable from top-level context(s)
+-		matchContext = addCombinator( function( elem ) {
+-			return elem === checkContext;
+-		}, implicitRelative, true ),
+-		matchAnyContext = addCombinator( function( elem ) {
+-			return indexOf.call( checkContext, elem ) > -1;
+-		}, implicitRelative, true ),
+-		matchers = [ function( elem, context, xml ) {
+-			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+-				(checkContext = context).nodeType ?
+-					matchContext( elem, context, xml ) :
+-					matchAnyContext( elem, context, xml ) );
+-		} ];
+-
+-	for ( ; i < len; i++ ) {
+-		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+-			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+-		} else {
+-			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+-
+-			// Return special upon seeing a positional matcher
+-			if ( matcher[ expando ] ) {
+-				// Find the next relative operator (if any) for proper handling
+-				j = ++i;
+-				for ( ; j < len; j++ ) {
+-					if ( Expr.relative[ tokens[j].type ] ) {
+-						break;
+-					}
+-				}
+-				return setMatcher(
+-					i > 1 && elementMatcher( matchers ),
+-					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+-					matcher,
+-					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+-					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+-					j < len && toSelector( tokens )
+-				);
+-			}
+-			matchers.push( matcher );
+-		}
+-	}
+-
+-	return elementMatcher( matchers );
+-}
+-
+-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+-	// A counter to specify which element is currently being matched
+-	var matcherCachedRuns = 0,
+-		bySet = setMatchers.length > 0,
+-		byElement = elementMatchers.length > 0,
+-		superMatcher = function( seed, context, xml, results, expandContext ) {
+-			var elem, j, matcher,
+-				setMatched = [],
+-				matchedCount = 0,
+-				i = "0",
+-				unmatched = seed && [],
+-				outermost = expandContext != null,
+-				contextBackup = outermostContext,
+-				// We must always have either seed elements or context
+-				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+-				// Use integer dirruns iff this is the outermost matcher
+-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+-
+-			if ( outermost ) {
+-				outermostContext = context !== document && context;
+-				cachedruns = matcherCachedRuns;
+-			}
+-
+-			// Add elements passing elementMatchers directly to results
+-			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+-			for ( ; (elem = elems[i]) != null; i++ ) {
+-				if ( byElement && elem ) {
+-					j = 0;
+-					while ( (matcher = elementMatchers[j++]) ) {
+-						if ( matcher( elem, context, xml ) ) {
+-							results.push( elem );
+-							break;
+-						}
+-					}
+-					if ( outermost ) {
+-						dirruns = dirrunsUnique;
+-						cachedruns = ++matcherCachedRuns;
+-					}
+-				}
+-
+-				// Track unmatched elements for set filters
+-				if ( bySet ) {
+-					// They will have gone through all possible matchers
+-					if ( (elem = !matcher && elem) ) {
+-						matchedCount--;
+-					}
+-
+-					// Lengthen the array for every element, matched or not
+-					if ( seed ) {
+-						unmatched.push( elem );
+-					}
+-				}
+-			}
+-
+-			// Apply set filters to unmatched elements
+-			matchedCount += i;
+-			if ( bySet && i !== matchedCount ) {
+-				j = 0;
+-				while ( (matcher = setMatchers[j++]) ) {
+-					matcher( unmatched, setMatched, context, xml );
+-				}
+-
+-				if ( seed ) {
+-					// Reintegrate element matches to eliminate the need for sorting
+-					if ( matchedCount > 0 ) {
+-						while ( i-- ) {
+-							if ( !(unmatched[i] || setMatched[i]) ) {
+-								setMatched[i] = pop.call( results );
+-							}
+-						}
+-					}
+-
+-					// Discard index placeholder values to get only actual matches
+-					setMatched = condense( setMatched );
+-				}
+-
+-				// Add matches to results
+-				push.apply( results, setMatched );
+-
+-				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+-				if ( outermost && !seed && setMatched.length > 0 &&
+-					( matchedCount + setMatchers.length ) > 1 ) {
+-
+-					Sizzle.uniqueSort( results );
+-				}
+-			}
+-
+-			// Override manipulation of globals by nested matchers
+-			if ( outermost ) {
+-				dirruns = dirrunsUnique;
+-				outermostContext = contextBackup;
+-			}
+-
+-			return unmatched;
+-		};
+-
+-	return bySet ?
+-		markFunction( superMatcher ) :
+-		superMatcher;
+-}
+-
+-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+-	var i,
+-		setMatchers = [],
+-		elementMatchers = [],
+-		cached = compilerCache[ selector + " " ];
+-
+-	if ( !cached ) {
+-		// Generate a function of recursive functions that can be used to check each element
+-		if ( !group ) {
+-			group = tokenize( selector );
+-		}
+-		i = group.length;
+-		while ( i-- ) {
+-			cached = matcherFromTokens( group[i] );
+-			if ( cached[ expando ] ) {
+-				setMatchers.push( cached );
+-			} else {
+-				elementMatchers.push( cached );
+-			}
+-		}
+-
+-		// Cache the compiled function
+-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+-	}
+-	return cached;
+-};
+-
+-function multipleContexts( selector, contexts, results ) {
+-	var i = 0,
+-		len = contexts.length;
+-	for ( ; i < len; i++ ) {
+-		Sizzle( selector, contexts[i], results );
+-	}
+-	return results;
+-}
+-
+-function select( selector, context, results, seed ) {
+-	var i, tokens, token, type, find,
+-		match = tokenize( selector );
+-
+-	if ( !seed ) {
+-		// Try to minimize operations if there is only one group
+-		if ( match.length === 1 ) {
+-
+-			// Take a shortcut and set the context if the root selector is an ID
+-			tokens = match[0] = match[0].slice( 0 );
+-			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+-					context.nodeType === 9 && !documentIsXML &&
+-					Expr.relative[ tokens[1].type ] ) {
+-
+-				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+-				if ( !context ) {
+-					return results;
+-				}
+-
+-				selector = selector.slice( tokens.shift().value.length );
+-			}
+-
+-			// Fetch a seed set for right-to-left matching
+-			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+-			while ( i-- ) {
+-				token = tokens[i];
+-
+-				// Abort if we hit a combinator
+-				if ( Expr.relative[ (type = token.type) ] ) {
+-					break;
+-				}
+-				if ( (find = Expr.find[ type ]) ) {
+-					// Search, expanding context for leading sibling combinators
+-					if ( (seed = find(
+-						token.matches[0].replace( runescape, funescape ),
+-						rsibling.test( tokens[0].type ) && context.parentNode || context
+-					)) ) {
+-
+-						// If seed is empty or no tokens remain, we can return early
+-						tokens.splice( i, 1 );
+-						selector = seed.length && toSelector( tokens );
+-						if ( !selector ) {
+-							push.apply( results, slice.call( seed, 0 ) );
+-							return results;
+-						}
+-
+-						break;
+-					}
+-				}
+-			}
+-		}
+-	}
+-
+-	// Compile and execute a filtering function
+-	// Provide `match` to avoid retokenization if we modified the selector above
+-	compile( selector, match )(
+-		seed,
+-		context,
+-		documentIsXML,
+-		results,
+-		rsibling.test( selector )
+-	);
+-	return results;
+-}
+-
+-// Deprecated
+-Expr.pseudos["nth"] = Expr.pseudos["eq"];
+-
+-// Easy API for creating new setFilters
+-function setFilters() {}
+-Expr.filters = setFilters.prototype = Expr.pseudos;
+-Expr.setFilters = new setFilters();
+-
+-// Initialize with the default document
+-setDocument();
+-
+-// Override sizzle attribute retrieval
+-Sizzle.attr = jQuery.attr;
+-jQuery.find = Sizzle;
+-jQuery.expr = Sizzle.selectors;
+-jQuery.expr[":"] = jQuery.expr.pseudos;
+-jQuery.unique = Sizzle.uniqueSort;
+-jQuery.text = Sizzle.getText;
+-jQuery.isXMLDoc = Sizzle.isXML;
+-jQuery.contains = Sizzle.contains;
+-
+-
+-})( window );
+-var runtil = /Until$/,
+-	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+-	isSimple = /^.[^:#\[\.,]*$/,
+-	rneedsContext = jQuery.expr.match.needsContext,
+-	// methods guaranteed to produce a unique set when starting from a unique set
+-	guaranteedUnique = {
+-		children: true,
+-		contents: true,
+-		next: true,
+-		prev: true
+-	};
+-
+-jQuery.fn.extend({
+-	find: function( selector ) {
+-		var i, ret, self,
+-			len = this.length;
+-
+-		if ( typeof selector !== "string" ) {
+-			self = this;
+-			return this.pushStack( jQuery( selector ).filter(function() {
+-				for ( i = 0; i < len; i++ ) {
+-					if ( jQuery.contains( self[ i ], this ) ) {
+-						return true;
+-					}
+-				}
+-			}) );
+-		}
+-
+-		ret = [];
+-		for ( i = 0; i < len; i++ ) {
+-			jQuery.find( selector, this[ i ], ret );
+-		}
+-
+-		// Needed because $( selector, context ) becomes $( context ).find( selector )
+-		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+-		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+-		return ret;
+-	},
+-
+-	has: function( target ) {
+-		var i,
+-			targets = jQuery( target, this ),
+-			len = targets.length;
+-
+-		return this.filter(function() {
+-			for ( i = 0; i < len; i++ ) {
+-				if ( jQuery.contains( this, targets[i] ) ) {
+-					return true;
+-				}
+-			}
+-		});
+-	},
+-
+-	not: function( selector ) {
+-		return this.pushStack( winnow(this, selector, false) );
+-	},
+-
+-	filter: function( selector ) {
+-		return this.pushStack( winnow(this, selector, true) );
+-	},
+-
+-	is: function( selector ) {
+-		return !!selector && (
+-			typeof selector === "string" ?
+-				// If this is a positional/relative selector, check membership in the returned set
+-				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+-				rneedsContext.test( selector ) ?
+-					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+-					jQuery.filter( selector, this ).length > 0 :
+-				this.filter( selector ).length > 0 );
+-	},
+-
+-	closest: function( selectors, context ) {
+-		var cur,
+-			i = 0,
+-			l = this.length,
+-			ret = [],
+-			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+-				jQuery( selectors, context || this.context ) :
+-				0;
+-
+-		for ( ; i < l; i++ ) {
+-			cur = this[i];
+-
+-			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+-					ret.push( cur );
+-					break;
+-				}
+-				cur = cur.parentNode;
+-			}
+-		}
+-
+-		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+-	},
+-
+-	// Determine the position of an element within
+-	// the matched set of elements
+-	index: function( elem ) {
+-
+-		// No argument, return index in parent
+-		if ( !elem ) {
+-			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+-		}
+-
+-		// index in selector
+-		if ( typeof elem === "string" ) {
+-			return jQuery.inArray( this[0], jQuery( elem ) );
+-		}
+-
+-		// Locate the position of the desired element
+-		return jQuery.inArray(
+-			// If it receives a jQuery object, the first element is used
+-			elem.jquery ? elem[0] : elem, this );
+-	},
+-
+-	add: function( selector, context ) {
+-		var set = typeof selector === "string" ?
+-				jQuery( selector, context ) :
+-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+-			all = jQuery.merge( this.get(), set );
+-
+-		return this.pushStack( jQuery.unique(all) );
+-	},
+-
+-	addBack: function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter(selector)
+-		);
+-	}
+-});
+-
+-jQuery.fn.andSelf = jQuery.fn.addBack;
+-
+-function sibling( cur, dir ) {
+-	do {
+-		cur = cur[ dir ];
+-	} while ( cur && cur.nodeType !== 1 );
+-
+-	return cur;
+-}
+-
+-jQuery.each({
+-	parent: function( elem ) {
+-		var parent = elem.parentNode;
+-		return parent && parent.nodeType !== 11 ? parent : null;
+-	},
+-	parents: function( elem ) {
+-		return jQuery.dir( elem, "parentNode" );
+-	},
+-	parentsUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "parentNode", until );
+-	},
+-	next: function( elem ) {
+-		return sibling( elem, "nextSibling" );
+-	},
+-	prev: function( elem ) {
+-		return sibling( elem, "previousSibling" );
+-	},
+-	nextAll: function( elem ) {
+-		return jQuery.dir( elem, "nextSibling" );
+-	},
+-	prevAll: function( elem ) {
+-		return jQuery.dir( elem, "previousSibling" );
+-	},
+-	nextUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "nextSibling", until );
+-	},
+-	prevUntil: function( elem, i, until ) {
+-		return jQuery.dir( elem, "previousSibling", until );
+-	},
+-	siblings: function( elem ) {
+-		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+-	},
+-	children: function( elem ) {
+-		return jQuery.sibling( elem.firstChild );
+-	},
+-	contents: function( elem ) {
+-		return jQuery.nodeName( elem, "iframe" ) ?
+-			elem.contentDocument || elem.contentWindow.document :
+-			jQuery.merge( [], elem.childNodes );
+-	}
+-}, function( name, fn ) {
+-	jQuery.fn[ name ] = function( until, selector ) {
+-		var ret = jQuery.map( this, fn, until );
+-
+-		if ( !runtil.test( name ) ) {
+-			selector = until;
+-		}
+-
+-		if ( selector && typeof selector === "string" ) {
+-			ret = jQuery.filter( selector, ret );
+-		}
+-
+-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+-
+-		if ( this.length > 1 && rparentsprev.test( name ) ) {
+-			ret = ret.reverse();
+-		}
+-
+-		return this.pushStack( ret );
+-	};
+-});
+-
+-jQuery.extend({
+-	filter: function( expr, elems, not ) {
+-		if ( not ) {
+-			expr = ":not(" + expr + ")";
+-		}
+-
+-		return elems.length === 1 ?
+-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+-			jQuery.find.matches(expr, elems);
+-	},
+-
+-	dir: function( elem, dir, until ) {
+-		var matched = [],
+-			cur = elem[ dir ];
+-
+-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+-			if ( cur.nodeType === 1 ) {
+-				matched.push( cur );
+-			}
+-			cur = cur[dir];
+-		}
+-		return matched;
+-	},
+-
+-	sibling: function( n, elem ) {
+-		var r = [];
+-
+-		for ( ; n; n = n.nextSibling ) {
+-			if ( n.nodeType === 1 && n !== elem ) {
+-				r.push( n );
+-			}
+-		}
+-
+-		return r;
+-	}
+-});
+-
+-// Implement the identical functionality for filter and not
+-function winnow( elements, qualifier, keep ) {
+-
+-	// Can't pass null or undefined to indexOf in Firefox 4
+-	// Set to 0 to skip string check
+-	qualifier = qualifier || 0;
+-
+-	if ( jQuery.isFunction( qualifier ) ) {
+-		return jQuery.grep(elements, function( elem, i ) {
+-			var retVal = !!qualifier.call( elem, i, elem );
+-			return retVal === keep;
+-		});
+-
+-	} else if ( qualifier.nodeType ) {
+-		return jQuery.grep(elements, function( elem ) {
+-			return ( elem === qualifier ) === keep;
+-		});
+-
+-	} else if ( typeof qualifier === "string" ) {
+-		var filtered = jQuery.grep(elements, function( elem ) {
+-			return elem.nodeType === 1;
+-		});
+-
+-		if ( isSimple.test( qualifier ) ) {
+-			return jQuery.filter(qualifier, filtered, !keep);
+-		} else {
+-			qualifier = jQuery.filter( qualifier, filtered );
+-		}
+-	}
+-
+-	return jQuery.grep(elements, function( elem ) {
+-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+-	});
+-}
+-function createSafeFragment( document ) {
+-	var list = nodeNames.split( "|" ),
+-		safeFrag = document.createDocumentFragment();
+-
+-	if ( safeFrag.createElement ) {
+-		while ( list.length ) {
+-			safeFrag.createElement(
+-				list.pop()
+-			);
+-		}
+-	}
+-	return safeFrag;
+-}
+-
+-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+-	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+-	rleadingWhitespace = /^\s+/,
+-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+-	rtagName = /<([\w:]+)/,
+-	rtbody = /<tbody/i,
+-	rhtml = /<|&#?\w+;/,
+-	rnoInnerhtml = /<(?:script|style|link)/i,
+-	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+-	// checked="checked" or checked
+-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+-	rscriptType = /^$|\/(?:java|ecma)script/i,
+-	rscriptTypeMasked = /^true\/(.*)/,
+-	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+-
+-	// We have to close these tags to support XHTML (#13200)
+-	wrapMap = {
+-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+-		legend: [ 1, "<fieldset>", "</fieldset>" ],
+-		area: [ 1, "<map>", "</map>" ],
+-		param: [ 1, "<object>", "</object>" ],
+-		thead: [ 1, "<table>", "</table>" ],
+-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+-
+-		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+-		// unless wrapped in a div with non-breaking characters in front of it.
+-		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+-	},
+-	safeFragment = createSafeFragment( document ),
+-	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+-
+-wrapMap.optgroup = wrapMap.option;
+-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+-wrapMap.th = wrapMap.td;
+-
+-jQuery.fn.extend({
+-	text: function( value ) {
+-		return jQuery.access( this, function( value ) {
+-			return value === undefined ?
+-				jQuery.text( this ) :
+-				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+-		}, null, value, arguments.length );
+-	},
+-
+-	wrapAll: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapAll( html.call(this, i) );
+-			});
+-		}
+-
+-		if ( this[0] ) {
+-			// The elements to wrap the target around
+-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+-
+-			if ( this[0].parentNode ) {
+-				wrap.insertBefore( this[0] );
+-			}
+-
+-			wrap.map(function() {
+-				var elem = this;
+-
+-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+-					elem = elem.firstChild;
+-				}
+-
+-				return elem;
+-			}).append( this );
+-		}
+-
+-		return this;
+-	},
+-
+-	wrapInner: function( html ) {
+-		if ( jQuery.isFunction( html ) ) {
+-			return this.each(function(i) {
+-				jQuery(this).wrapInner( html.call(this, i) );
+-			});
+-		}
+-
+-		return this.each(function() {
+-			var self = jQuery( this ),
+-				contents = self.contents();
+-
+-			if ( contents.length ) {
+-				contents.wrapAll( html );
+-
+-			} else {
+-				self.append( html );
+-			}
+-		});
+-	},
+-
+-	wrap: function( html ) {
+-		var isFunction = jQuery.isFunction( html );
+-
+-		return this.each(function(i) {
+-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+-		});
+-	},
+-
+-	unwrap: function() {
+-		return this.parent().each(function() {
+-			if ( !jQuery.nodeName( this, "body" ) ) {
+-				jQuery( this ).replaceWith( this.childNodes );
+-			}
+-		}).end();
+-	},
+-
+-	append: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+-				this.appendChild( elem );
+-			}
+-		});
+-	},
+-
+-	prepend: function() {
+-		return this.domManip(arguments, true, function( elem ) {
+-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+-				this.insertBefore( elem, this.firstChild );
+-			}
+-		});
+-	},
+-
+-	before: function() {
+-		return this.domManip( arguments, false, function( elem ) {
+-			if ( this.parentNode ) {
+-				this.parentNode.insertBefore( elem, this );
+-			}
+-		});
+-	},
+-
+-	after: function() {
+-		return this.domManip( arguments, false, function( elem ) {
+-			if ( this.parentNode ) {
+-				this.parentNode.insertBefore( elem, this.nextSibling );
+-			}
+-		});
+-	},
+-
+-	// keepData is for internal use only--do not document
+-	remove: function( selector, keepData ) {
+-		var elem,
+-			i = 0;
+-
+-		for ( ; (elem = this[i]) != null; i++ ) {
+-			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+-				if ( !keepData && elem.nodeType === 1 ) {
+-					jQuery.cleanData( getAll( elem ) );
+-				}
+-
+-				if ( elem.parentNode ) {
+-					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+-						setGlobalEval( getAll( elem, "script" ) );
+-					}
+-					elem.parentNode.removeChild( elem );
+-				}
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	empty: function() {
+-		var elem,
+-			i = 0;
+-
+-		for ( ; (elem = this[i]) != null; i++ ) {
+-			// Remove element nodes and prevent memory leaks
+-			if ( elem.nodeType === 1 ) {
+-				jQuery.cleanData( getAll( elem, false ) );
+-			}
+-
+-			// Remove any remaining nodes
+-			while ( elem.firstChild ) {
+-				elem.removeChild( elem.firstChild );
+-			}
+-
+-			// If this is a select, ensure that it displays empty (#12336)
+-			// Support: IE<9
+-			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+-				elem.options.length = 0;
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	clone: function( dataAndEvents, deepDataAndEvents ) {
+-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+-
+-		return this.map( function () {
+-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+-		});
+-	},
+-
+-	html: function( value ) {
+-		return jQuery.access( this, function( value ) {
+-			var elem = this[0] || {},
+-				i = 0,
+-				l = this.length;
+-
+-			if ( value === undefined ) {
+-				return elem.nodeType === 1 ?
+-					elem.innerHTML.replace( rinlinejQuery, "" ) :
+-					undefined;
+-			}
+-
+-			// See if we can take a shortcut and just use innerHTML
+-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+-				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+-				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+-				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+-
+-				value = value.replace( rxhtmlTag, "<$1></$2>" );
+-
+-				try {
+-					for (; i < l; i++ ) {
+-						// Remove element nodes and prevent memory leaks
+-						elem = this[i] || {};
+-						if ( elem.nodeType === 1 ) {
+-							jQuery.cleanData( getAll( elem, false ) );
+-							elem.innerHTML = value;
+-						}
+-					}
+-
+-					elem = 0;
+-
+-				// If using innerHTML throws an exception, use the fallback method
+-				} catch(e) {}
+-			}
+-
+-			if ( elem ) {
+-				this.empty().append( value );
+-			}
+-		}, null, value, arguments.length );
+-	},
+-
+-	replaceWith: function( value ) {
+-		var isFunc = jQuery.isFunction( value );
+-
+-		// Make sure that the elements are removed from the DOM before they are inserted
+-		// this can help fix replacing a parent with child elements
+-		if ( !isFunc && typeof value !== "string" ) {
+-			value = jQuery( value ).not( this ).detach();
+-		}
+-
+-		return this.domManip( [ value ], true, function( elem ) {
+-			var next = this.nextSibling,
+-				parent = this.parentNode;
+-
+-			if ( parent ) {
+-				jQuery( this ).remove();
+-				parent.insertBefore( elem, next );
+-			}
+-		});
+-	},
+-
+-	detach: function( selector ) {
+-		return this.remove( selector, true );
+-	},
+-
+-	domManip: function( args, table, callback ) {
+-
+-		// Flatten any nested arrays
+-		args = core_concat.apply( [], args );
+-
+-		var first, node, hasScripts,
+-			scripts, doc, fragment,
+-			i = 0,
+-			l = this.length,
+-			set = this,
+-			iNoClone = l - 1,
+-			value = args[0],
+-			isFunction = jQuery.isFunction( value );
+-
+-		// We can't cloneNode fragments that contain checked, in WebKit
+-		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+-			return this.each(function( index ) {
+-				var self = set.eq( index );
+-				if ( isFunction ) {
+-					args[0] = value.call( this, index, table ? self.html() : undefined );
+-				}
+-				self.domManip( args, table, callback );
+-			});
+-		}
+-
+-		if ( l ) {
+-			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+-			first = fragment.firstChild;
+-
+-			if ( fragment.childNodes.length === 1 ) {
+-				fragment = first;
+-			}
+-
+-			if ( first ) {
+-				table = table && jQuery.nodeName( first, "tr" );
+-				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+-				hasScripts = scripts.length;
+-
+-				// Use the original fragment for the last item instead of the first because it can end up
+-				// being emptied incorrectly in certain situations (#8070).
+-				for ( ; i < l; i++ ) {
+-					node = fragment;
+-
+-					if ( i !== iNoClone ) {
+-						node = jQuery.clone( node, true, true );
+-
+-						// Keep references to cloned scripts for later restoration
+-						if ( hasScripts ) {
+-							jQuery.merge( scripts, getAll( node, "script" ) );
+-						}
+-					}
+-
+-					callback.call(
+-						table && jQuery.nodeName( this[i], "table" ) ?
+-							findOrAppend( this[i], "tbody" ) :
+-							this[i],
+-						node,
+-						i
+-					);
+-				}
+-
+-				if ( hasScripts ) {
+-					doc = scripts[ scripts.length - 1 ].ownerDocument;
+-
+-					// Reenable scripts
+-					jQuery.map( scripts, restoreScript );
+-
+-					// Evaluate executable scripts on first document insertion
+-					for ( i = 0; i < hasScripts; i++ ) {
+-						node = scripts[ i ];
+-						if ( rscriptType.test( node.type || "" ) &&
+-							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+-
+-							if ( node.src ) {
+-								// Hope ajax is available...
+-								jQuery.ajax({
+-									url: node.src,
+-									type: "GET",
+-									dataType: "script",
+-									async: false,
+-									global: false,
+-									"throws": true
+-								});
+-							} else {
+-								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+-							}
+-						}
+-					}
+-				}
+-
+-				// Fix #11809: Avoid leaking memory
+-				fragment = first = null;
+-			}
+-		}
+-
+-		return this;
+-	}
+-});
+-
+-function findOrAppend( elem, tag ) {
+-	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+-}
+-
+-// Replace/restore the type attribute of script elements for safe DOM manipulation
+-function disableScript( elem ) {
+-	var attr = elem.getAttributeNode("type");
+-	elem.type = ( attr && attr.specified ) + "/" + elem.type;
+-	return elem;
+-}
+-function restoreScript( elem ) {
+-	var match = rscriptTypeMasked.exec( elem.type );
+-	if ( match ) {
+-		elem.type = match[1];
+-	} else {
+-		elem.removeAttribute("type");
+-	}
+-	return elem;
+-}
+-
+-// Mark scripts as having already been evaluated
+-function setGlobalEval( elems, refElements ) {
+-	var elem,
+-		i = 0;
+-	for ( ; (elem = elems[i]) != null; i++ ) {
+-		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+-	}
+-}
+-
+-function cloneCopyEvent( src, dest ) {
+-
+-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+-		return;
+-	}
+-
+-	var type, i, l,
+-		oldData = jQuery._data( src ),
+-		curData = jQuery._data( dest, oldData ),
+-		events = oldData.events;
+-
+-	if ( events ) {
+-		delete curData.handle;
+-		curData.events = {};
+-
+-		for ( type in events ) {
+-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+-				jQuery.event.add( dest, type, events[ type ][ i ] );
+-			}
+-		}
+-	}
+-
+-	// make the cloned public data object a copy from the original
+-	if ( curData.data ) {
+-		curData.data = jQuery.extend( {}, curData.data );
+-	}
+-}
+-
+-function fixCloneNodeIssues( src, dest ) {
+-	var nodeName, e, data;
+-
+-	// We do not need to do anything for non-Elements
+-	if ( dest.nodeType !== 1 ) {
+-		return;
+-	}
+-
+-	nodeName = dest.nodeName.toLowerCase();
+-
+-	// IE6-8 copies events bound via attachEvent when using cloneNode.
+-	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+-		data = jQuery._data( dest );
+-
+-		for ( e in data.events ) {
+-			jQuery.removeEvent( dest, e, data.handle );
+-		}
+-
+-		// Event data gets referenced instead of copied if the expando gets copied too
+-		dest.removeAttribute( jQuery.expando );
+-	}
+-
+-	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+-	if ( nodeName === "script" && dest.text !== src.text ) {
+-		disableScript( dest ).text = src.text;
+-		restoreScript( dest );
+-
+-	// IE6-10 improperly clones children of object elements using classid.
+-	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+-	} else if ( nodeName === "object" ) {
+-		if ( dest.parentNode ) {
+-			dest.outerHTML = src.outerHTML;
+-		}
+-
+-		// This path appears unavoidable for IE9. When cloning an object
+-		// element in IE9, the outerHTML strategy above is not sufficient.
+-		// If the src has innerHTML and the destination does not,
+-		// copy the src.innerHTML into the dest.innerHTML. #10324
+-		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+-			dest.innerHTML = src.innerHTML;
+-		}
+-
+-	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+-		// IE6-8 fails to persist the checked state of a cloned checkbox
+-		// or radio button. Worse, IE6-7 fail to give the cloned element
+-		// a checked appearance if the defaultChecked value isn't also set
+-
+-		dest.defaultChecked = dest.checked = src.checked;
+-
+-		// IE6-7 get confused and end up setting the value of a cloned
+-		// checkbox/radio button to an empty string instead of "on"
+-		if ( dest.value !== src.value ) {
+-			dest.value = src.value;
+-		}
+-
+-	// IE6-8 fails to return the selected option to the default selected
+-	// state when cloning options
+-	} else if ( nodeName === "option" ) {
+-		dest.defaultSelected = dest.selected = src.defaultSelected;
+-
+-	// IE6-8 fails to set the defaultValue to the correct value when
+-	// cloning other types of input fields
+-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+-		dest.defaultValue = src.defaultValue;
+-	}
+-}
+-
+-jQuery.each({
+-	appendTo: "append",
+-	prependTo: "prepend",
+-	insertBefore: "before",
+-	insertAfter: "after",
+-	replaceAll: "replaceWith"
+-}, function( name, original ) {
+-	jQuery.fn[ name ] = function( selector ) {
+-		var elems,
+-			i = 0,
+-			ret = [],
+-			insert = jQuery( selector ),
+-			last = insert.length - 1;
+-
+-		for ( ; i <= last; i++ ) {
+-			elems = i === last ? this : this.clone(true);
+-			jQuery( insert[i] )[ original ]( elems );
+-
+-			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+-			core_push.apply( ret, elems.get() );
+-		}
+-
+-		return this.pushStack( ret );
+-	};
+-});
+-
+-function getAll( context, tag ) {
+-	var elems, elem,
+-		i = 0,
+-		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
+-			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
+-			undefined;
+-
+-	if ( !found ) {
+-		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+-			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+-				found.push( elem );
+-			} else {
+-				jQuery.merge( found, getAll( elem, tag ) );
+-			}
+-		}
+-	}
+-
+-	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+-		jQuery.merge( [ context ], found ) :
+-		found;
+-}
+-
+-// Used in buildFragment, fixes the defaultChecked property
+-function fixDefaultChecked( elem ) {
+-	if ( manipulation_rcheckableType.test( elem.type ) ) {
+-		elem.defaultChecked = elem.checked;
+-	}
+-}
+-
+-jQuery.extend({
+-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+-		var destElements, node, clone, i, srcElements,
+-			inPage = jQuery.contains( elem.ownerDocument, elem );
+-
+-		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+-			clone = elem.cloneNode( true );
+-
+-		// IE<=8 does not properly clone detached, unknown element nodes
+-		} else {
+-			fragmentDiv.innerHTML = elem.outerHTML;
+-			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+-		}
+-
+-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+-
+-			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+-			destElements = getAll( clone );
+-			srcElements = getAll( elem );
+-
+-			// Fix all IE cloning issues
+-			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+-				// Ensure that the destination node is not null; Fixes #9587
+-				if ( destElements[i] ) {
+-					fixCloneNodeIssues( node, destElements[i] );
+-				}
+-			}
+-		}
+-
+-		// Copy the events from the original to the clone
+-		if ( dataAndEvents ) {
+-			if ( deepDataAndEvents ) {
+-				srcElements = srcElements || getAll( elem );
+-				destElements = destElements || getAll( clone );
+-
+-				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+-					cloneCopyEvent( node, destElements[i] );
+-				}
+-			} else {
+-				cloneCopyEvent( elem, clone );
+-			}
+-		}
+-
+-		// Preserve script evaluation history
+-		destElements = getAll( clone, "script" );
+-		if ( destElements.length > 0 ) {
+-			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+-		}
+-
+-		destElements = srcElements = node = null;
+-
+-		// Return the cloned set
+-		return clone;
+-	},
+-
+-	buildFragment: function( elems, context, scripts, selection ) {
+-		var j, elem, contains,
+-			tmp, tag, tbody, wrap,
+-			l = elems.length,
+-
+-			// Ensure a safe fragment
+-			safe = createSafeFragment( context ),
+-
+-			nodes = [],
+-			i = 0;
+-
+-		for ( ; i < l; i++ ) {
+-			elem = elems[ i ];
+-
+-			if ( elem || elem === 0 ) {
+-
+-				// Add nodes directly
+-				if ( jQuery.type( elem ) === "object" ) {
+-					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+-
+-				// Convert non-html into a text node
+-				} else if ( !rhtml.test( elem ) ) {
+-					nodes.push( context.createTextNode( elem ) );
+-
+-				// Convert html into DOM nodes
+-				} else {
+-					tmp = tmp || safe.appendChild( context.createElement("div") );
+-
+-					// Deserialize a standard representation
+-					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+-					wrap = wrapMap[ tag ] || wrapMap._default;
+-
+-					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+-
+-					// Descend through wrappers to the right content
+-					j = wrap[0];
+-					while ( j-- ) {
+-						tmp = tmp.lastChild;
+-					}
+-
+-					// Manually add leading whitespace removed by IE
+-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+-						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+-					}
+-
+-					// Remove IE's autoinserted <tbody> from table fragments
+-					if ( !jQuery.support.tbody ) {
+-
+-						// String was a <table>, *may* have spurious <tbody>
+-						elem = tag === "table" && !rtbody.test( elem ) ?
+-							tmp.firstChild :
+-
+-							// String was a bare <thead> or <tfoot>
+-							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+-								tmp :
+-								0;
+-
+-						j = elem && elem.childNodes.length;
+-						while ( j-- ) {
+-							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+-								elem.removeChild( tbody );
+-							}
+-						}
+-					}
+-
+-					jQuery.merge( nodes, tmp.childNodes );
+-
+-					// Fix #12392 for WebKit and IE > 9
+-					tmp.textContent = "";
+-
+-					// Fix #12392 for oldIE
+-					while ( tmp.firstChild ) {
+-						tmp.removeChild( tmp.firstChild );
+-					}
+-
+-					// Remember the top-level container for proper cleanup
+-					tmp = safe.lastChild;
+-				}
+-			}
+-		}
+-
+-		// Fix #11356: Clear elements from fragment
+-		if ( tmp ) {
+-			safe.removeChild( tmp );
+-		}
+-
+-		// Reset defaultChecked for any radios and checkboxes
+-		// about to be appended to the DOM in IE 6/7 (#8060)
+-		if ( !jQuery.support.appendChecked ) {
+-			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+-		}
+-
+-		i = 0;
+-		while ( (elem = nodes[ i++ ]) ) {
+-
+-			// #4087 - If origin and destination elements are the same, and this is
+-			// that element, do not do anything
+-			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+-				continue;
+-			}
+-
+-			contains = jQuery.contains( elem.ownerDocument, elem );
+-
+-			// Append to fragment
+-			tmp = getAll( safe.appendChild( elem ), "script" );
+-
+-			// Preserve script evaluation history
+-			if ( contains ) {
+-				setGlobalEval( tmp );
+-			}
+-
+-			// Capture executables
+-			if ( scripts ) {
+-				j = 0;
+-				while ( (elem = tmp[ j++ ]) ) {
+-					if ( rscriptType.test( elem.type || "" ) ) {
+-						scripts.push( elem );
+-					}
+-				}
+-			}
+-		}
+-
+-		tmp = null;
+-
+-		return safe;
+-	},
+-
+-	cleanData: function( elems, /* internal */ acceptData ) {
+-		var elem, type, id, data,
+-			i = 0,
+-			internalKey = jQuery.expando,
+-			cache = jQuery.cache,
+-			deleteExpando = jQuery.support.deleteExpando,
+-			special = jQuery.event.special;
+-
+-		for ( ; (elem = elems[i]) != null; i++ ) {
+-
+-			if ( acceptData || jQuery.acceptData( elem ) ) {
+-
+-				id = elem[ internalKey ];
+-				data = id && cache[ id ];
+-
+-				if ( data ) {
+-					if ( data.events ) {
+-						for ( type in data.events ) {
+-							if ( special[ type ] ) {
+-								jQuery.event.remove( elem, type );
+-
+-							// This is a shortcut to avoid jQuery.event.remove's overhead
+-							} else {
+-								jQuery.removeEvent( elem, type, data.handle );
+-							}
+-						}
+-					}
+-
+-					// Remove cache only if it was not already removed by jQuery.event.remove
+-					if ( cache[ id ] ) {
+-
+-						delete cache[ id ];
+-
+-						// IE does not allow us to delete expando properties from nodes,
+-						// nor does it have a removeAttribute function on Document nodes;
+-						// we must handle all of these cases
+-						if ( deleteExpando ) {
+-							delete elem[ internalKey ];
+-
+-						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
+-							elem.removeAttribute( internalKey );
+-
+-						} else {
+-							elem[ internalKey ] = null;
+-						}
+-
+-						core_deletedIds.push( id );
+-					}
+-				}
+-			}
+-		}
+-	}
+-});
+-var iframe, getStyles, curCSS,
+-	ralpha = /alpha\([^)]*\)/i,
+-	ropacity = /opacity\s*=\s*([^)]*)/,
+-	rposition = /^(top|right|bottom|left)$/,
+-	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+-	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+-	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+-	rmargin = /^margin/,
+-	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+-	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+-	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+-	elemdisplay = { BODY: "block" },
+-
+-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+-	cssNormalTransform = {
+-		letterSpacing: 0,
+-		fontWeight: 400
+-	},
+-
+-	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+-	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+-
+-// return a css property mapped to a potentially vendor prefixed property
+-function vendorPropName( style, name ) {
+-
+-	// shortcut for names that are not vendor prefixed
+-	if ( name in style ) {
+-		return name;
+-	}
+-
+-	// check for vendor prefixed names
+-	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+-		origName = name,
+-		i = cssPrefixes.length;
+-
+-	while ( i-- ) {
+-		name = cssPrefixes[ i ] + capName;
+-		if ( name in style ) {
+-			return name;
+-		}
+-	}
+-
+-	return origName;
+-}
+-
+-function isHidden( elem, el ) {
+-	// isHidden might be called from jQuery#filter function;
+-	// in that case, element will be second argument
+-	elem = el || elem;
+-	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+-}
+-
+-function showHide( elements, show ) {
+-	var display, elem, hidden,
+-		values = [],
+-		index = 0,
+-		length = elements.length;
+-
+-	for ( ; index < length; index++ ) {
+-		elem = elements[ index ];
+-		if ( !elem.style ) {
+-			continue;
+-		}
+-
+-		values[ index ] = jQuery._data( elem, "olddisplay" );
+-		display = elem.style.display;
+-		if ( show ) {
+-			// Reset the inline display of this element to learn if it is
+-			// being hidden by cascaded rules or not
+-			if ( !values[ index ] && display === "none" ) {
+-				elem.style.display = "";
+-			}
+-
+-			// Set elements which have been overridden with display: none
+-			// in a stylesheet to whatever the default browser style is
+-			// for such an element
+-			if ( elem.style.display === "" && isHidden( elem ) ) {
+-				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+-			}
+-		} else {
+-
+-			if ( !values[ index ] ) {
+-				hidden = isHidden( elem );
+-
+-				if ( display && display !== "none" || !hidden ) {
+-					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+-				}
+-			}
+-		}
+-	}
+-
+-	// Set the display of most of the elements in a second loop
+-	// to avoid the constant reflow
+-	for ( index = 0; index < length; index++ ) {
+-		elem = elements[ index ];
+-		if ( !elem.style ) {
+-			continue;
+-		}
+-		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+-			elem.style.display = show ? values[ index ] || "" : "none";
+-		}
+-	}
+-
+-	return elements;
+-}
+-
+-jQuery.fn.extend({
+-	css: function( name, value ) {
+-		return jQuery.access( this, function( elem, name, value ) {
+-			var len, styles,
+-				map = {},
+-				i = 0;
+-
+-			if ( jQuery.isArray( name ) ) {
+-				styles = getStyles( elem );
+-				len = name.length;
+-
+-				for ( ; i < len; i++ ) {
+-					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+-				}
+-
+-				return map;
+-			}
+-
+-			return value !== undefined ?
+-				jQuery.style( elem, name, value ) :
+-				jQuery.css( elem, name );
+-		}, name, value, arguments.length > 1 );
+-	},
+-	show: function() {
+-		return showHide( this, true );
+-	},
+-	hide: function() {
+-		return showHide( this );
+-	},
+-	toggle: function( state ) {
+-		var bool = typeof state === "boolean";
+-
+-		return this.each(function() {
+-			if ( bool ? state : isHidden( this ) ) {
+-				jQuery( this ).show();
+-			} else {
+-				jQuery( this ).hide();
+-			}
+-		});
+-	}
+-});
+-
+-jQuery.extend({
+-	// Add in style property hooks for overriding the default
+-	// behavior of getting and setting a style property
+-	cssHooks: {
+-		opacity: {
+-			get: function( elem, computed ) {
+-				if ( computed ) {
+-					// We should always get a number back from opacity
+-					var ret = curCSS( elem, "opacity" );
+-					return ret === "" ? "1" : ret;
+-				}
+-			}
+-		}
+-	},
+-
+-	// Exclude the following css properties to add px
+-	cssNumber: {
+-		"columnCount": true,
+-		"fillOpacity": true,
+-		"fontWeight": true,
+-		"lineHeight": true,
+-		"opacity": true,
+-		"orphans": true,
+-		"widows": true,
+-		"zIndex": true,
+-		"zoom": true
+-	},
+-
+-	// Add in properties whose names you wish to fix before
+-	// setting or getting the value
+-	cssProps: {
+-		// normalize float css property
+-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+-	},
+-
+-	// Get and set the style property on a DOM Node
+-	style: function( elem, name, value, extra ) {
+-		// Don't set styles on text and comment nodes
+-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+-			return;
+-		}
+-
+-		// Make sure that we're working with the right name
+-		var ret, type, hooks,
+-			origName = jQuery.camelCase( name ),
+-			style = elem.style;
+-
+-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+-
+-		// gets hook for the prefixed version
+-		// followed by the unprefixed version
+-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+-
+-		// Check if we're setting a value
+-		if ( value !== undefined ) {
+-			type = typeof value;
+-
+-			// convert relative number strings (+= or -=) to relative numbers. #7345
+-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+-				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+-				// Fixes bug #9237
+-				type = "number";
+-			}
+-
+-			// Make sure that NaN and null values aren't set. See: #7116
+-			if ( value == null || type === "number" && isNaN( value ) ) {
+-				return;
+-			}
+-
+-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+-				value += "px";
+-			}
+-
+-			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+-			// but it would mean to define eight (for every problematic property) identical functions
+-			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+-				style[ name ] = "inherit";
+-			}
+-
+-			// If a hook was provided, use that value, otherwise just set the specified value
+-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+-
+-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+-				// Fixes bug #5509
+-				try {
+-					style[ name ] = value;
+-				} catch(e) {}
+-			}
+-
+-		} else {
+-			// If a hook was provided get the non-computed value from there
+-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+-				return ret;
+-			}
+-
+-			// Otherwise just get the value from the style object
+-			return style[ name ];
+-		}
+-	},
+-
+-	css: function( elem, name, extra, styles ) {
+-		var num, val, hooks,
+-			origName = jQuery.camelCase( name );
+-
+-		// Make sure that we're working with the right name
+-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+-
+-		// gets hook for the prefixed version
+-		// followed by the unprefixed version
+-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+-
+-		// If a hook was provided get the computed value from there
+-		if ( hooks && "get" in hooks ) {
+-			val = hooks.get( elem, true, extra );
+-		}
+-
+-		// Otherwise, if a way to get the computed value exists, use that
+-		if ( val === undefined ) {
+-			val = curCSS( elem, name, styles );
+-		}
+-
+-		//convert "normal" to computed value
+-		if ( val === "normal" && name in cssNormalTransform ) {
+-			val = cssNormalTransform[ name ];
+-		}
+-
+-		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+-		if ( extra === "" || extra ) {
+-			num = parseFloat( val );
+-			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+-		}
+-		return val;
+-	},
+-
+-	// A method for quickly swapping in/out CSS properties to get correct calculations
+-	swap: function( elem, options, callback, args ) {
+-		var ret, name,
+-			old = {};
+-
+-		// Remember the old values, and insert the new ones
+-		for ( name in options ) {
+-			old[ name ] = elem.style[ name ];
+-			elem.style[ name ] = options[ name ];
+-		}
+-
+-		ret = callback.apply( elem, args || [] );
+-
+-		// Revert the old values
+-		for ( name in options ) {
+-			elem.style[ name ] = old[ name ];
+-		}
+-
+-		return ret;
+-	}
+-});
+-
+-// NOTE: we've included the "window" in window.getComputedStyle
+-// because jsdom on node.js will break without it.
+-if ( window.getComputedStyle ) {
+-	getStyles = function( elem ) {
+-		return window.getComputedStyle( elem, null );
+-	};
+-
+-	curCSS = function( elem, name, _computed ) {
+-		var width, minWidth, maxWidth,
+-			computed = _computed || getStyles( elem ),
+-
+-			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+-			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+-			style = elem.style;
+-
+-		if ( computed ) {
+-
+-			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+-				ret = jQuery.style( elem, name );
+-			}
+-
+-			// A tribute to the "awesome hack by Dean Edwards"
+-			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+-			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+-			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+-			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+-
+-				// Remember the original values
+-				width = style.width;
+-				minWidth = style.minWidth;
+-				maxWidth = style.maxWidth;
+-
+-				// Put in the new values to get a computed value out
+-				style.minWidth = style.maxWidth = style.width = ret;
+-				ret = computed.width;
+-
+-				// Revert the changed values
+-				style.width = width;
+-				style.minWidth = minWidth;
+-				style.maxWidth = maxWidth;
+-			}
+-		}
+-
+-		return ret;
+-	};
+-} else if ( document.documentElement.currentStyle ) {
+-	getStyles = function( elem ) {
+-		return elem.currentStyle;
+-	};
+-
+-	curCSS = function( elem, name, _computed ) {
+-		var left, rs, rsLeft,
+-			computed = _computed || getStyles( elem ),
+-			ret = computed ? computed[ name ] : undefined,
+-			style = elem.style;
+-
+-		// Avoid setting ret to empty string here
+-		// so we don't default to auto
+-		if ( ret == null && style && style[ name ] ) {
+-			ret = style[ name ];
+-		}
+-
+-		// From the awesome hack by Dean Edwards
+-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+-
+-		// If we're not dealing with a regular pixel number
+-		// but a number that has a weird ending, we need to convert it to pixels
+-		// but not position css attributes, as those are proportional to the parent element instead
+-		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+-		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+-
+-			// Remember the original values
+-			left = style.left;
+-			rs = elem.runtimeStyle;
+-			rsLeft = rs && rs.left;
+-
+-			// Put in the new values to get a computed value out
+-			if ( rsLeft ) {
+-				rs.left = elem.currentStyle.left;
+-			}
+-			style.left = name === "fontSize" ? "1em" : ret;
+-			ret = style.pixelLeft + "px";
+-
+-			// Revert the changed values
+-			style.left = left;
+-			if ( rsLeft ) {
+-				rs.left = rsLeft;
+-			}
+-		}
+-
+-		return ret === "" ? "auto" : ret;
+-	};
+-}
+-
+-function setPositiveNumber( elem, value, subtract ) {
+-	var matches = rnumsplit.exec( value );
+-	return matches ?
+-		// Guard against undefined "subtract", e.g., when used as in cssHooks
+-		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+-		value;
+-}
+-
+-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+-	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+-		// If we already have the right measurement, avoid augmentation
+-		4 :
+-		// Otherwise initialize for horizontal or vertical properties
+-		name === "width" ? 1 : 0,
+-
+-		val = 0;
+-
+-	for ( ; i < 4; i += 2 ) {
+-		// both box models exclude margin, so add it if we want it
+-		if ( extra === "margin" ) {
+-			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+-		}
+-
+-		if ( isBorderBox ) {
+-			// border-box includes padding, so remove it if we want content
+-			if ( extra === "content" ) {
+-				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+-			}
+-
+-			// at this point, extra isn't border nor margin, so remove border
+-			if ( extra !== "margin" ) {
+-				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+-			}
+-		} else {
+-			// at this point, extra isn't content, so add padding
+-			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+-
+-			// at this point, extra isn't content nor padding, so add border
+-			if ( extra !== "padding" ) {
+-				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+-			}
+-		}
+-	}
+-
+-	return val;
+-}
+-
+-function getWidthOrHeight( elem, name, extra ) {
+-
+-	// Start with offset property, which is equivalent to the border-box value
+-	var valueIsBorderBox = true,
+-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+-		styles = getStyles( elem ),
+-		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+-
+-	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+-	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+-	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+-	if ( val <= 0 || val == null ) {
+-		// Fall back to computed then uncomputed css if necessary
+-		val = curCSS( elem, name, styles );
+-		if ( val < 0 || val == null ) {
+-			val = elem.style[ name ];
+-		}
+-
+-		// Computed unit is not pixels. Stop here and return.
+-		if ( rnumnonpx.test(val) ) {
+-			return val;
+-		}
+-
+-		// we need the check for style in case a browser which returns unreliable values
+-		// for getComputedStyle silently falls back to the reliable elem.style
+-		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+-
+-		// Normalize "", auto, and prepare for extra
+-		val = parseFloat( val ) || 0;
+-	}
+-
+-	// use the active box-sizing model to add/subtract irrelevant styles
+-	return ( val +
+-		augmentWidthOrHeight(
+-			elem,
+-			name,
+-			extra || ( isBorderBox ? "border" : "content" ),
+-			valueIsBorderBox,
+-			styles
+-		)
+-	) + "px";
+-}
+-
+-// Try to determine the default display value of an element
+-function css_defaultDisplay( nodeName ) {
+-	var doc = document,
+-		display = elemdisplay[ nodeName ];
+-
+-	if ( !display ) {
+-		display = actualDisplay( nodeName, doc );
+-
+-		// If the simple way fails, read from inside an iframe
+-		if ( display === "none" || !display ) {
+-			// Use the already-created iframe if possible
+-			iframe = ( iframe ||
+-				jQuery("<iframe frameborder='0' width='0' height='0'/>")
+-				.css( "cssText", "display:block !important" )
+-			).appendTo( doc.documentElement );
+-
+-			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+-			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+-			doc.write("<!doctype html><html><body>");
+-			doc.close();
+-
+-			display = actualDisplay( nodeName, doc );
+-			iframe.detach();
+-		}
+-
+-		// Store the correct default display
+-		elemdisplay[ nodeName ] = display;
+-	}
+-
+-	return display;
+-}
+-
+-// Called ONLY from within css_defaultDisplay
+-function actualDisplay( name, doc ) {
+-	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+-		display = jQuery.css( elem[0], "display" );
+-	elem.remove();
+-	return display;
+-}
+-
+-jQuery.each([ "height", "width" ], function( i, name ) {
+-	jQuery.cssHooks[ name ] = {
+-		get: function( elem, computed, extra ) {
+-			if ( computed ) {
+-				// certain elements can have dimension info if we invisibly show them
+-				// however, it must have a current display style that would benefit from this
+-				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+-					jQuery.swap( elem, cssShow, function() {
+-						return getWidthOrHeight( elem, name, extra );
+-					}) :
+-					getWidthOrHeight( elem, name, extra );
+-			}
+-		},
+-
+-		set: function( elem, value, extra ) {
+-			var styles = extra && getStyles( elem );
+-			return setPositiveNumber( elem, value, extra ?
+-				augmentWidthOrHeight(
+-					elem,
+-					name,
+-					extra,
+-					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+-					styles
+-				) : 0
+-			);
+-		}
+-	};
+-});
+-
+-if ( !jQuery.support.opacity ) {
+-	jQuery.cssHooks.opacity = {
+-		get: function( elem, computed ) {
+-			// IE uses filters for opacity
+-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+-				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+-				computed ? "1" : "";
+-		},
+-
+-		set: function( elem, value ) {
+-			var style = elem.style,
+-				currentStyle = elem.currentStyle,
+-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+-				filter = currentStyle && currentStyle.filter || style.filter || "";
+-
+-			// IE has trouble with opacity if it does not have layout
+-			// Force it by setting the zoom level
+-			style.zoom = 1;
+-
+-			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+-			// if value === "", then remove inline opacity #12685
+-			if ( ( value >= 1 || value === "" ) &&
+-					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+-					style.removeAttribute ) {
+-
+-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+-				// style.removeAttribute is IE Only, but so apparently is this code path...
+-				style.removeAttribute( "filter" );
+-
+-				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+-				if ( value === "" || currentStyle && !currentStyle.filter ) {
+-					return;
+-				}
+-			}
+-
+-			// otherwise, set new filter values
+-			style.filter = ralpha.test( filter ) ?
+-				filter.replace( ralpha, opacity ) :
+-				filter + " " + opacity;
+-		}
+-	};
+-}
+-
+-// These hooks cannot be added until DOM ready because the support test
+-// for it is not run until after DOM ready
+-jQuery(function() {
+-	if ( !jQuery.support.reliableMarginRight ) {
+-		jQuery.cssHooks.marginRight = {
+-			get: function( elem, computed ) {
+-				if ( computed ) {
+-					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+-					// Work around by temporarily setting element display to inline-block
+-					return jQuery.swap( elem, { "display": "inline-block" },
+-						curCSS, [ elem, "marginRight" ] );
+-				}
+-			}
+-		};
+-	}
+-
+-	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+-	// getComputedStyle returns percent when specified for top/left/bottom/right
+-	// rather than make the css module depend on the offset module, we just check for it here
+-	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+-		jQuery.each( [ "top", "left" ], function( i, prop ) {
+-			jQuery.cssHooks[ prop ] = {
+-				get: function( elem, computed ) {
+-					if ( computed ) {
+-						computed = curCSS( elem, prop );
+-						// if curCSS returns percentage, fallback to offset
+-						return rnumnonpx.test( computed ) ?
+-							jQuery( elem ).position()[ prop ] + "px" :
+-							computed;
+-					}
+-				}
+-			};
+-		});
+-	}
+-
+-});
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.hidden = function( elem ) {
+-		// Support: Opera <= 12.12
+-		// Opera reports offsetWidths and offsetHeights less than zero on some elements
+-		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+-			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+-	};
+-
+-	jQuery.expr.filters.visible = function( elem ) {
+-		return !jQuery.expr.filters.hidden( elem );
+-	};
+-}
+-
+-// These hooks are used by animate to expand properties
+-jQuery.each({
+-	margin: "",
+-	padding: "",
+-	border: "Width"
+-}, function( prefix, suffix ) {
+-	jQuery.cssHooks[ prefix + suffix ] = {
+-		expand: function( value ) {
+-			var i = 0,
+-				expanded = {},
+-
+-				// assumes a single number if not a string
+-				parts = typeof value === "string" ? value.split(" ") : [ value ];
+-
+-			for ( ; i < 4; i++ ) {
+-				expanded[ prefix + cssExpand[ i ] + suffix ] =
+-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+-			}
+-
+-			return expanded;
+-		}
+-	};
+-
+-	if ( !rmargin.test( prefix ) ) {
+-		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+-	}
+-});
+-var r20 = /%20/g,
+-	rbracket = /\[\]$/,
+-	rCRLF = /\r?\n/g,
+-	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+-	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+-
+-jQuery.fn.extend({
+-	serialize: function() {
+-		return jQuery.param( this.serializeArray() );
+-	},
+-	serializeArray: function() {
+-		return this.map(function(){
+-			// Can add propHook for "elements" to filter or add form elements
+-			var elements = jQuery.prop( this, "elements" );
+-			return elements ? jQuery.makeArray( elements ) : this;
+-		})
+-		.filter(function(){
+-			var type = this.type;
+-			// Use .is(":disabled") so that fieldset[disabled] works
+-			return this.name && !jQuery( this ).is( ":disabled" ) &&
+-				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+-				( this.checked || !manipulation_rcheckableType.test( type ) );
+-		})
+-		.map(function( i, elem ){
+-			var val = jQuery( this ).val();
+-
+-			return val == null ?
+-				null :
+-				jQuery.isArray( val ) ?
+-					jQuery.map( val, function( val ){
+-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-					}) :
+-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+-		}).get();
+-	}
+-});
+-
+-//Serialize an array of form elements or a set of
+-//key/values into a query string
+-jQuery.param = function( a, traditional ) {
+-	var prefix,
+-		s = [],
+-		add = function( key, value ) {
+-			// If value is a function, invoke it and return its value
+-			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+-			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+-		};
+-
+-	// Set traditional to true for jQuery <= 1.3.2 behavior.
+-	if ( traditional === undefined ) {
+-		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+-	}
+-
+-	// If an array was passed in, assume that it is an array of form elements.
+-	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+-		// Serialize the form elements
+-		jQuery.each( a, function() {
+-			add( this.name, this.value );
+-		});
+-
+-	} else {
+-		// If traditional, encode the "old" way (the way 1.3.2 or older
+-		// did it), otherwise encode params recursively.
+-		for ( prefix in a ) {
+-			buildParams( prefix, a[ prefix ], traditional, add );
+-		}
+-	}
+-
+-	// Return the resulting serialization
+-	return s.join( "&" ).replace( r20, "+" );
+-};
+-
+-function buildParams( prefix, obj, traditional, add ) {
+-	var name;
+-
+-	if ( jQuery.isArray( obj ) ) {
+-		// Serialize array item.
+-		jQuery.each( obj, function( i, v ) {
+-			if ( traditional || rbracket.test( prefix ) ) {
+-				// Treat each array item as a scalar.
+-				add( prefix, v );
+-
+-			} else {
+-				// Item is non-scalar (array or object), encode its numeric index.
+-				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+-			}
+-		});
+-
+-	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+-		// Serialize object item.
+-		for ( name in obj ) {
+-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+-		}
+-
+-	} else {
+-		// Serialize scalar item.
+-		add( prefix, obj );
+-	}
+-}
+-jQuery.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( i, name ) {
+-
+-	// Handle event binding
+-	jQuery.fn[ name ] = function( data, fn ) {
+-		return arguments.length > 0 ?
+-			this.on( name, null, data, fn ) :
+-			this.trigger( name );
+-	};
+-});
+-
+-jQuery.fn.hover = function( fnOver, fnOut ) {
+-	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+-};
+-var
+-	// Document location
+-	ajaxLocParts,
+-	ajaxLocation,
+-	ajax_nonce = jQuery.now(),
+-
+-	ajax_rquery = /\?/,
+-	rhash = /#.*$/,
+-	rts = /([?&])_=[^&]*/,
+-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+-	// #7653, #8125, #8152: local protocol detection
+-	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+-	rnoContent = /^(?:GET|HEAD)$/,
+-	rprotocol = /^\/\//,
+-	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+-
+-	// Keep a copy of the old load method
+-	_load = jQuery.fn.load,
+-
+-	/* Prefilters
+-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+-	 * 2) These are called:
+-	 *    - BEFORE asking for a transport
+-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+-	 * 3) key is the dataType
+-	 * 4) the catchall symbol "*" can be used
+-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+-	 */
+-	prefilters = {},
+-
+-	/* Transports bindings
+-	 * 1) key is the dataType
+-	 * 2) the catchall symbol "*" can be used
+-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+-	 */
+-	transports = {},
+-
+-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+-	allTypes = "*/".concat("*");
+-
+-// #8138, IE may throw an exception when accessing
+-// a field from window.location if document.domain has been set
+-try {
+-	ajaxLocation = location.href;
+-} catch( e ) {
+-	// Use the href attribute of an A element
+-	// since IE will modify it given document.location
+-	ajaxLocation = document.createElement( "a" );
+-	ajaxLocation.href = "";
+-	ajaxLocation = ajaxLocation.href;
+-}
+-
+-// Segment location into parts
+-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+-
+-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+-function addToPrefiltersOrTransports( structure ) {
+-
+-	// dataTypeExpression is optional and defaults to "*"
+-	return function( dataTypeExpression, func ) {
+-
+-		if ( typeof dataTypeExpression !== "string" ) {
+-			func = dataTypeExpression;
+-			dataTypeExpression = "*";
+-		}
+-
+-		var dataType,
+-			i = 0,
+-			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+-
+-		if ( jQuery.isFunction( func ) ) {
+-			// For each dataType in the dataTypeExpression
+-			while ( (dataType = dataTypes[i++]) ) {
+-				// Prepend if requested
+-				if ( dataType[0] === "+" ) {
+-					dataType = dataType.slice( 1 ) || "*";
+-					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+-
+-				// Otherwise append
+-				} else {
+-					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+-				}
+-			}
+-		}
+-	};
+-}
+-
+-// Base inspection function for prefilters and transports
+-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+-
+-	var inspected = {},
+-		seekingTransport = ( structure === transports );
+-
+-	function inspect( dataType ) {
+-		var selected;
+-		inspected[ dataType ] = true;
+-		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+-			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+-			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+-				options.dataTypes.unshift( dataTypeOrTransport );
+-				inspect( dataTypeOrTransport );
+-				return false;
+-			} else if ( seekingTransport ) {
+-				return !( selected = dataTypeOrTransport );
+-			}
+-		});
+-		return selected;
+-	}
+-
+-	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+-}
+-
+-// A special extend for ajax options
+-// that takes "flat" options (not to be deep extended)
+-// Fixes #9887
+-function ajaxExtend( target, src ) {
+-	var deep, key,
+-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+-
+-	for ( key in src ) {
+-		if ( src[ key ] !== undefined ) {
+-			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+-		}
+-	}
+-	if ( deep ) {
+-		jQuery.extend( true, target, deep );
+-	}
+-
+-	return target;
+-}
+-
+-jQuery.fn.load = function( url, params, callback ) {
+-	if ( typeof url !== "string" && _load ) {
+-		return _load.apply( this, arguments );
+-	}
+-
+-	var selector, response, type,
+-		self = this,
+-		off = url.indexOf(" ");
+-
+-	if ( off >= 0 ) {
+-		selector = url.slice( off, url.length );
+-		url = url.slice( 0, off );
+-	}
+-
+-	// If it's a function
+-	if ( jQuery.isFunction( params ) ) {
+-
+-		// We assume that it's the callback
+-		callback = params;
+-		params = undefined;
+-
+-	// Otherwise, build a param string
+-	} else if ( params && typeof params === "object" ) {
+-		type = "POST";
+-	}
+-
+-	// If we have elements to modify, make the request
+-	if ( self.length > 0 ) {
+-		jQuery.ajax({
+-			url: url,
+-
+-			// if "type" variable is undefined, then "GET" method will be used
+-			type: type,
+-			dataType: "html",
+-			data: params
+-		}).done(function( responseText ) {
+-
+-			// Save response for use in complete callback
+-			response = arguments;
+-
+-			self.html( selector ?
+-
+-				// If a selector was specified, locate the right elements in a dummy div
+-				// Exclude scripts to avoid IE 'Permission Denied' errors
+-				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+-
+-				// Otherwise use the full result
+-				responseText );
+-
+-		}).complete( callback && function( jqXHR, status ) {
+-			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+-		});
+-	}
+-
+-	return this;
+-};
+-
+-// Attach a bunch of functions for handling common AJAX events
+-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+-	jQuery.fn[ type ] = function( fn ){
+-		return this.on( type, fn );
+-	};
+-});
+-
+-jQuery.each( [ "get", "post" ], function( i, method ) {
+-	jQuery[ method ] = function( url, data, callback, type ) {
+-		// shift arguments if data argument was omitted
+-		if ( jQuery.isFunction( data ) ) {
+-			type = type || callback;
+-			callback = data;
+-			data = undefined;
+-		}
+-
+-		return jQuery.ajax({
+-			url: url,
+-			type: method,
+-			dataType: type,
+-			data: data,
+-			success: callback
+-		});
+-	};
+-});
+-
+-jQuery.extend({
+-
+-	// Counter for holding the number of active queries
+-	active: 0,
+-
+-	// Last-Modified header cache for next request
+-	lastModified: {},
+-	etag: {},
+-
+-	ajaxSettings: {
+-		url: ajaxLocation,
+-		type: "GET",
+-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+-		global: true,
+-		processData: true,
+-		async: true,
+-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+-		/*
+-		timeout: 0,
+-		data: null,
+-		dataType: null,
+-		username: null,
+-		password: null,
+-		cache: null,
+-		throws: false,
+-		traditional: false,
+-		headers: {},
+-		*/
+-
+-		accepts: {
+-			"*": allTypes,
+-			text: "text/plain",
+-			html: "text/html",
+-			xml: "application/xml, text/xml",
+-			json: "application/json, text/javascript"
+-		},
+-
+-		contents: {
+-			xml: /xml/,
+-			html: /html/,
+-			json: /json/
+-		},
+-
+-		responseFields: {
+-			xml: "responseXML",
+-			text: "responseText"
+-		},
+-
+-		// Data converters
+-		// Keys separate source (or catchall "*") and destination types with a single space
+-		converters: {
+-
+-			// Convert anything to text
+-			"* text": window.String,
+-
+-			// Text to html (true = no transformation)
+-			"text html": true,
+-
+-			// Evaluate text as a json expression
+-			"text json": jQuery.parseJSON,
+-
+-			// Parse text as xml
+-			"text xml": jQuery.parseXML
+-		},
+-
+-		// For options that shouldn't be deep extended:
+-		// you can add your own custom options here if
+-		// and when you create one that shouldn't be
+-		// deep extended (see ajaxExtend)
+-		flatOptions: {
+-			url: true,
+-			context: true
+-		}
+-	},
+-
+-	// Creates a full fledged settings object into target
+-	// with both ajaxSettings and settings fields.
+-	// If target is omitted, writes into ajaxSettings.
+-	ajaxSetup: function( target, settings ) {
+-		return settings ?
+-
+-			// Building a settings object
+-			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+-
+-			// Extending ajaxSettings
+-			ajaxExtend( jQuery.ajaxSettings, target );
+-	},
+-
+-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+-	ajaxTransport: addToPrefiltersOrTransports( transports ),
+-
+-	// Main method
+-	ajax: function( url, options ) {
+-
+-		// If url is an object, simulate pre-1.5 signature
+-		if ( typeof url === "object" ) {
+-			options = url;
+-			url = undefined;
+-		}
+-
+-		// Force options to be an object
+-		options = options || {};
+-
+-		var // Cross-domain detection vars
+-			parts,
+-			// Loop variable
+-			i,
+-			// URL without anti-cache param
+-			cacheURL,
+-			// Response headers as string
+-			responseHeadersString,
+-			// timeout handle
+-			timeoutTimer,
+-
+-			// To know if global events are to be dispatched
+-			fireGlobals,
+-
+-			transport,
+-			// Response headers
+-			responseHeaders,
+-			// Create the final options object
+-			s = jQuery.ajaxSetup( {}, options ),
+-			// Callbacks context
+-			callbackContext = s.context || s,
+-			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+-			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+-				jQuery( callbackContext ) :
+-				jQuery.event,
+-			// Deferreds
+-			deferred = jQuery.Deferred(),
+-			completeDeferred = jQuery.Callbacks("once memory"),
+-			// Status-dependent callbacks
+-			statusCode = s.statusCode || {},
+-			// Headers (they are sent all at once)
+-			requestHeaders = {},
+-			requestHeadersNames = {},
+-			// The jqXHR state
+-			state = 0,
+-			// Default abort message
+-			strAbort = "canceled",
+-			// Fake xhr
+-			jqXHR = {
+-				readyState: 0,
+-
+-				// Builds headers hashtable if needed
+-				getResponseHeader: function( key ) {
+-					var match;
+-					if ( state === 2 ) {
+-						if ( !responseHeaders ) {
+-							responseHeaders = {};
+-							while ( (match = rheaders.exec( responseHeadersString )) ) {
+-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+-							}
+-						}
+-						match = responseHeaders[ key.toLowerCase() ];
+-					}
+-					return match == null ? null : match;
+-				},
+-
+-				// Raw string
+-				getAllResponseHeaders: function() {
+-					return state === 2 ? responseHeadersString : null;
+-				},
+-
+-				// Caches the header
+-				setRequestHeader: function( name, value ) {
+-					var lname = name.toLowerCase();
+-					if ( !state ) {
+-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+-						requestHeaders[ name ] = value;
+-					}
+-					return this;
+-				},
+-
+-				// Overrides response content-type header
+-				overrideMimeType: function( type ) {
+-					if ( !state ) {
+-						s.mimeType = type;
+-					}
+-					return this;
+-				},
+-
+-				// Status-dependent callbacks
+-				statusCode: function( map ) {
+-					var code;
+-					if ( map ) {
+-						if ( state < 2 ) {
+-							for ( code in map ) {
+-								// Lazy-add the new callback in a way that preserves old ones
+-								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+-							}
+-						} else {
+-							// Execute the appropriate callbacks
+-							jqXHR.always( map[ jqXHR.status ] );
+-						}
+-					}
+-					return this;
+-				},
+-
+-				// Cancel the request
+-				abort: function( statusText ) {
+-					var finalText = statusText || strAbort;
+-					if ( transport ) {
+-						transport.abort( finalText );
+-					}
+-					done( 0, finalText );
+-					return this;
+-				}
+-			};
+-
+-		// Attach deferreds
+-		deferred.promise( jqXHR ).complete = completeDeferred.add;
+-		jqXHR.success = jqXHR.done;
+-		jqXHR.error = jqXHR.fail;
+-
+-		// Remove hash character (#7531: and string promotion)
+-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+-		// Handle falsy url in the settings object (#10093: consistency with old signature)
+-		// We also use the url parameter if available
+-		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+-
+-		// Alias method option to type as per ticket #12004
+-		s.type = options.method || options.type || s.method || s.type;
+-
+-		// Extract dataTypes list
+-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+-
+-		// A cross-domain request is in order when we have a protocol:host:port mismatch
+-		if ( s.crossDomain == null ) {
+-			parts = rurl.exec( s.url.toLowerCase() );
+-			s.crossDomain = !!( parts &&
+-				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+-			);
+-		}
+-
+-		// Convert data if not already a string
+-		if ( s.data && s.processData && typeof s.data !== "string" ) {
+-			s.data = jQuery.param( s.data, s.traditional );
+-		}
+-
+-		// Apply prefilters
+-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+-
+-		// If request was aborted inside a prefilter, stop there
+-		if ( state === 2 ) {
+-			return jqXHR;
+-		}
+-
+-		// We can fire global events as of now if asked to
+-		fireGlobals = s.global;
+-
+-		// Watch for a new set of requests
+-		if ( fireGlobals && jQuery.active++ === 0 ) {
+-			jQuery.event.trigger("ajaxStart");
+-		}
+-
+-		// Uppercase the type
+-		s.type = s.type.toUpperCase();
+-
+-		// Determine if request has content
+-		s.hasContent = !rnoContent.test( s.type );
+-
+-		// Save the URL in case we're toying with the If-Modified-Since
+-		// and/or If-None-Match header later on
+-		cacheURL = s.url;
+-
+-		// More options handling for requests with no content
+-		if ( !s.hasContent ) {
+-
+-			// If data is available, append data to url
+-			if ( s.data ) {
+-				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+-				// #9682: remove data so that it's not used in an eventual retry
+-				delete s.data;
+-			}
+-
+-			// Add anti-cache in url if needed
+-			if ( s.cache === false ) {
+-				s.url = rts.test( cacheURL ) ?
+-
+-					// If there is already a '_' parameter, set its value
+-					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+-
+-					// Otherwise add one to the end
+-					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+-			}
+-		}
+-
+-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-		if ( s.ifModified ) {
+-			if ( jQuery.lastModified[ cacheURL ] ) {
+-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+-			}
+-			if ( jQuery.etag[ cacheURL ] ) {
+-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+-			}
+-		}
+-
+-		// Set the correct header, if data is being sent
+-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+-		}
+-
+-		// Set the Accepts header for the server, depending on the dataType
+-		jqXHR.setRequestHeader(
+-			"Accept",
+-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+-				s.accepts[ "*" ]
+-		);
+-
+-		// Check for headers option
+-		for ( i in s.headers ) {
+-			jqXHR.setRequestHeader( i, s.headers[ i ] );
+-		}
+-
+-		// Allow custom headers/mimetypes and early abort
+-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+-			// Abort if not done already and return
+-			return jqXHR.abort();
+-		}
+-
+-		// aborting is no longer a cancellation
+-		strAbort = "abort";
+-
+-		// Install callbacks on deferreds
+-		for ( i in { success: 1, error: 1, complete: 1 } ) {
+-			jqXHR[ i ]( s[ i ] );
+-		}
+-
+-		// Get transport
+-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+-
+-		// If no transport, we auto-abort
+-		if ( !transport ) {
+-			done( -1, "No Transport" );
+-		} else {
+-			jqXHR.readyState = 1;
+-
+-			// Send global event
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+-			}
+-			// Timeout
+-			if ( s.async && s.timeout > 0 ) {
+-				timeoutTimer = setTimeout(function() {
+-					jqXHR.abort("timeout");
+-				}, s.timeout );
+-			}
+-
+-			try {
+-				state = 1;
+-				transport.send( requestHeaders, done );
+-			} catch ( e ) {
+-				// Propagate exception as error if not done
+-				if ( state < 2 ) {
+-					done( -1, e );
+-				// Simply rethrow otherwise
+-				} else {
+-					throw e;
+-				}
+-			}
+-		}
+-
+-		// Callback for when everything is done
+-		function done( status, nativeStatusText, responses, headers ) {
+-			var isSuccess, success, error, response, modified,
+-				statusText = nativeStatusText;
+-
+-			// Called once
+-			if ( state === 2 ) {
+-				return;
+-			}
+-
+-			// State is "done" now
+-			state = 2;
+-
+-			// Clear timeout if it exists
+-			if ( timeoutTimer ) {
+-				clearTimeout( timeoutTimer );
+-			}
+-
+-			// Dereference transport for early garbage collection
+-			// (no matter how long the jqXHR object will be used)
+-			transport = undefined;
+-
+-			// Cache response headers
+-			responseHeadersString = headers || "";
+-
+-			// Set readyState
+-			jqXHR.readyState = status > 0 ? 4 : 0;
+-
+-			// Get response data
+-			if ( responses ) {
+-				response = ajaxHandleResponses( s, jqXHR, responses );
+-			}
+-
+-			// If successful, handle type chaining
+-			if ( status >= 200 && status < 300 || status === 304 ) {
+-
+-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+-				if ( s.ifModified ) {
+-					modified = jqXHR.getResponseHeader("Last-Modified");
+-					if ( modified ) {
+-						jQuery.lastModified[ cacheURL ] = modified;
+-					}
+-					modified = jqXHR.getResponseHeader("etag");
+-					if ( modified ) {
+-						jQuery.etag[ cacheURL ] = modified;
+-					}
+-				}
+-
+-				// if no content
+-				if ( status === 204 ) {
+-					isSuccess = true;
+-					statusText = "nocontent";
+-
+-				// if not modified
+-				} else if ( status === 304 ) {
+-					isSuccess = true;
+-					statusText = "notmodified";
+-
+-				// If we have data, let's convert it
+-				} else {
+-					isSuccess = ajaxConvert( s, response );
+-					statusText = isSuccess.state;
+-					success = isSuccess.data;
+-					error = isSuccess.error;
+-					isSuccess = !error;
+-				}
+-			} else {
+-				// We extract error from statusText
+-				// then normalize statusText and status for non-aborts
+-				error = statusText;
+-				if ( status || !statusText ) {
+-					statusText = "error";
+-					if ( status < 0 ) {
+-						status = 0;
+-					}
+-				}
+-			}
+-
+-			// Set data for the fake xhr object
+-			jqXHR.status = status;
+-			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+-
+-			// Success/Error
+-			if ( isSuccess ) {
+-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+-			} else {
+-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+-			}
+-
+-			// Status-dependent callbacks
+-			jqXHR.statusCode( statusCode );
+-			statusCode = undefined;
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+-					[ jqXHR, s, isSuccess ? success : error ] );
+-			}
+-
+-			// Complete
+-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+-
+-			if ( fireGlobals ) {
+-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+-				// Handle the global AJAX counter
+-				if ( !( --jQuery.active ) ) {
+-					jQuery.event.trigger("ajaxStop");
+-				}
+-			}
+-		}
+-
+-		return jqXHR;
+-	},
+-
+-	getScript: function( url, callback ) {
+-		return jQuery.get( url, undefined, callback, "script" );
+-	},
+-
+-	getJSON: function( url, data, callback ) {
+-		return jQuery.get( url, data, callback, "json" );
+-	}
+-});
+-
+-/* Handles responses to an ajax request:
+- * - sets all responseXXX fields accordingly
+- * - finds the right dataType (mediates between content-type and expected dataType)
+- * - returns the corresponding response
+- */
+-function ajaxHandleResponses( s, jqXHR, responses ) {
+-	var firstDataType, ct, finalDataType, type,
+-		contents = s.contents,
+-		dataTypes = s.dataTypes,
+-		responseFields = s.responseFields;
+-
+-	// Fill responseXXX fields
+-	for ( type in responseFields ) {
+-		if ( type in responses ) {
+-			jqXHR[ responseFields[type] ] = responses[ type ];
+-		}
+-	}
+-
+-	// Remove auto dataType and get content-type in the process
+-	while( dataTypes[ 0 ] === "*" ) {
+-		dataTypes.shift();
+-		if ( ct === undefined ) {
+-			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+-		}
+-	}
+-
+-	// Check if we're dealing with a known content-type
+-	if ( ct ) {
+-		for ( type in contents ) {
+-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+-				dataTypes.unshift( type );
+-				break;
+-			}
+-		}
+-	}
+-
+-	// Check to see if we have a response for the expected dataType
+-	if ( dataTypes[ 0 ] in responses ) {
+-		finalDataType = dataTypes[ 0 ];
+-	} else {
+-		// Try convertible dataTypes
+-		for ( type in responses ) {
+-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+-				finalDataType = type;
+-				break;
+-			}
+-			if ( !firstDataType ) {
+-				firstDataType = type;
+-			}
+-		}
+-		// Or just use first one
+-		finalDataType = finalDataType || firstDataType;
+-	}
+-
+-	// If we found a dataType
+-	// We add the dataType to the list if needed
+-	// and return the corresponding response
+-	if ( finalDataType ) {
+-		if ( finalDataType !== dataTypes[ 0 ] ) {
+-			dataTypes.unshift( finalDataType );
+-		}
+-		return responses[ finalDataType ];
+-	}
+-}
+-
+-// Chain conversions given the request and the original response
+-function ajaxConvert( s, response ) {
+-	var conv2, current, conv, tmp,
+-		converters = {},
+-		i = 0,
+-		// Work with a copy of dataTypes in case we need to modify it for conversion
+-		dataTypes = s.dataTypes.slice(),
+-		prev = dataTypes[ 0 ];
+-
+-	// Apply the dataFilter if provided
+-	if ( s.dataFilter ) {
+-		response = s.dataFilter( response, s.dataType );
+-	}
+-
+-	// Create converters map with lowercased keys
+-	if ( dataTypes[ 1 ] ) {
+-		for ( conv in s.converters ) {
+-			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+-		}
+-	}
+-
+-	// Convert to each sequential dataType, tolerating list modification
+-	for ( ; (current = dataTypes[++i]); ) {
+-
+-		// There's only work to do if current dataType is non-auto
+-		if ( current !== "*" ) {
+-
+-			// Convert response if prev dataType is non-auto and differs from current
+-			if ( prev !== "*" && prev !== current ) {
+-
+-				// Seek a direct converter
+-				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+-
+-				// If none found, seek a pair
+-				if ( !conv ) {
+-					for ( conv2 in converters ) {
+-
+-						// If conv2 outputs current
+-						tmp = conv2.split(" ");
+-						if ( tmp[ 1 ] === current ) {
+-
+-							// If prev can be converted to accepted input
+-							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+-								converters[ "* " + tmp[ 0 ] ];
+-							if ( conv ) {
+-								// Condense equivalence converters
+-								if ( conv === true ) {
+-									conv = converters[ conv2 ];
+-
+-								// Otherwise, insert the intermediate dataType
+-								} else if ( converters[ conv2 ] !== true ) {
+-									current = tmp[ 0 ];
+-									dataTypes.splice( i--, 0, current );
+-								}
+-
+-								break;
+-							}
+-						}
+-					}
+-				}
+-
+-				// Apply converter (if not an equivalence)
+-				if ( conv !== true ) {
+-
+-					// Unless errors are allowed to bubble, catch and return them
+-					if ( conv && s["throws"] ) {
+-						response = conv( response );
+-					} else {
+-						try {
+-							response = conv( response );
+-						} catch ( e ) {
+-							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+-						}
+-					}
+-				}
+-			}
+-
+-			// Update prev for next iteration
+-			prev = current;
+-		}
+-	}
+-
+-	return { state: "success", data: response };
+-}
+-// Install script dataType
+-jQuery.ajaxSetup({
+-	accepts: {
+-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+-	},
+-	contents: {
+-		script: /(?:java|ecma)script/
+-	},
+-	converters: {
+-		"text script": function( text ) {
+-			jQuery.globalEval( text );
+-			return text;
+-		}
+-	}
+-});
+-
+-// Handle cache's special case and global
+-jQuery.ajaxPrefilter( "script", function( s ) {
+-	if ( s.cache === undefined ) {
+-		s.cache = false;
+-	}
+-	if ( s.crossDomain ) {
+-		s.type = "GET";
+-		s.global = false;
+-	}
+-});
+-
+-// Bind script tag hack transport
+-jQuery.ajaxTransport( "script", function(s) {
+-
+-	// This transport only deals with cross domain requests
+-	if ( s.crossDomain ) {
+-
+-		var script,
+-			head = document.head || jQuery("head")[0] || document.documentElement;
+-
+-		return {
+-
+-			send: function( _, callback ) {
+-
+-				script = document.createElement("script");
+-
+-				script.async = true;
+-
+-				if ( s.scriptCharset ) {
+-					script.charset = s.scriptCharset;
+-				}
+-
+-				script.src = s.url;
+-
+-				// Attach handlers for all browsers
+-				script.onload = script.onreadystatechange = function( _, isAbort ) {
+-
+-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+-
+-						// Handle memory leak in IE
+-						script.onload = script.onreadystatechange = null;
+-
+-						// Remove the script
+-						if ( script.parentNode ) {
+-							script.parentNode.removeChild( script );
+-						}
+-
+-						// Dereference the script
+-						script = null;
+-
+-						// Callback if not abort
+-						if ( !isAbort ) {
+-							callback( 200, "success" );
+-						}
+-					}
+-				};
+-
+-				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+-				// Use native DOM manipulation to avoid our domManip AJAX trickery
+-				head.insertBefore( script, head.firstChild );
+-			},
+-
+-			abort: function() {
+-				if ( script ) {
+-					script.onload( undefined, true );
+-				}
+-			}
+-		};
+-	}
+-});
+-var oldCallbacks = [],
+-	rjsonp = /(=)\?(?=&|$)|\?\?/;
+-
+-// Default jsonp settings
+-jQuery.ajaxSetup({
+-	jsonp: "callback",
+-	jsonpCallback: function() {
+-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+-		this[ callback ] = true;
+-		return callback;
+-	}
+-});
+-
+-// Detect, normalize options and install callbacks for jsonp requests
+-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+-
+-	var callbackName, overwritten, responseContainer,
+-		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+-			"url" :
+-			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+-		);
+-
+-	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+-	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+-
+-		// Get callback name, remembering preexisting value associated with it
+-		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+-			s.jsonpCallback() :
+-			s.jsonpCallback;
+-
+-		// Insert callback into url or form data
+-		if ( jsonProp ) {
+-			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+-		} else if ( s.jsonp !== false ) {
+-			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+-		}
+-
+-		// Use data converter to retrieve json after script execution
+-		s.converters["script json"] = function() {
+-			if ( !responseContainer ) {
+-				jQuery.error( callbackName + " was not called" );
+-			}
+-			return responseContainer[ 0 ];
+-		};
+-
+-		// force json dataType
+-		s.dataTypes[ 0 ] = "json";
+-
+-		// Install callback
+-		overwritten = window[ callbackName ];
+-		window[ callbackName ] = function() {
+-			responseContainer = arguments;
+-		};
+-
+-		// Clean-up function (fires after converters)
+-		jqXHR.always(function() {
+-			// Restore preexisting value
+-			window[ callbackName ] = overwritten;
+-
+-			// Save back as free
+-			if ( s[ callbackName ] ) {
+-				// make sure that re-using the options doesn't screw things around
+-				s.jsonpCallback = originalSettings.jsonpCallback;
+-
+-				// save the callback name for future use
+-				oldCallbacks.push( callbackName );
+-			}
+-
+-			// Call if it was a function and we have a response
+-			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+-				overwritten( responseContainer[ 0 ] );
+-			}
+-
+-			responseContainer = overwritten = undefined;
+-		});
+-
+-		// Delegate to script
+-		return "script";
+-	}
+-});
+-var xhrCallbacks, xhrSupported,
+-	xhrId = 0,
+-	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+-	xhrOnUnloadAbort = window.ActiveXObject && function() {
+-		// Abort all pending requests
+-		var key;
+-		for ( key in xhrCallbacks ) {
+-			xhrCallbacks[ key ]( undefined, true );
+-		}
+-	};
+-
+-// Functions to create xhrs
+-function createStandardXHR() {
+-	try {
+-		return new window.XMLHttpRequest();
+-	} catch( e ) {}
+-}
+-
+-function createActiveXHR() {
+-	try {
+-		return new window.ActiveXObject("Microsoft.XMLHTTP");
+-	} catch( e ) {}
+-}
+-
+-// Create the request object
+-// (This is still attached to ajaxSettings for backward compatibility)
+-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+-	/* Microsoft failed to properly
+-	 * implement the XMLHttpRequest in IE7 (can't request local files),
+-	 * so we use the ActiveXObject when it is available
+-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+-	 * we need a fallback.
+-	 */
+-	function() {
+-		return !this.isLocal && createStandardXHR() || createActiveXHR();
+-	} :
+-	// For all other browsers, use the standard XMLHttpRequest object
+-	createStandardXHR;
+-
+-// Determine support properties
+-xhrSupported = jQuery.ajaxSettings.xhr();
+-jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+-xhrSupported = jQuery.support.ajax = !!xhrSupported;
+-
+-// Create transport if the browser can provide an xhr
+-if ( xhrSupported ) {
+-
+-	jQuery.ajaxTransport(function( s ) {
+-		// Cross domain only allowed if supported through XMLHttpRequest
+-		if ( !s.crossDomain || jQuery.support.cors ) {
+-
+-			var callback;
+-
+-			return {
+-				send: function( headers, complete ) {
+-
+-					// Get a new xhr
+-					var handle, i,
+-						xhr = s.xhr();
+-
+-					// Open the socket
+-					// Passing null username, generates a login popup on Opera (#2865)
+-					if ( s.username ) {
+-						xhr.open( s.type, s.url, s.async, s.username, s.password );
+-					} else {
+-						xhr.open( s.type, s.url, s.async );
+-					}
+-
+-					// Apply custom fields if provided
+-					if ( s.xhrFields ) {
+-						for ( i in s.xhrFields ) {
+-							xhr[ i ] = s.xhrFields[ i ];
+-						}
+-					}
+-
+-					// Override mime type if needed
+-					if ( s.mimeType && xhr.overrideMimeType ) {
+-						xhr.overrideMimeType( s.mimeType );
+-					}
+-
+-					// X-Requested-With header
+-					// For cross-domain requests, seeing as conditions for a preflight are
+-					// akin to a jigsaw puzzle, we simply never set it to be sure.
+-					// (it can always be set on a per-request basis or even using ajaxSetup)
+-					// For same-domain requests, won't change header if already provided.
+-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+-						headers["X-Requested-With"] = "XMLHttpRequest";
+-					}
+-
+-					// Need an extra try/catch for cross domain requests in Firefox 3
+-					try {
+-						for ( i in headers ) {
+-							xhr.setRequestHeader( i, headers[ i ] );
+-						}
+-					} catch( err ) {}
+-
+-					// Do send the request
+-					// This may raise an exception which is actually
+-					// handled in jQuery.ajax (so no try/catch here)
+-					xhr.send( ( s.hasContent && s.data ) || null );
+-
+-					// Listener
+-					callback = function( _, isAbort ) {
+-						var status, responseHeaders, statusText, responses;
+-
+-						// Firefox throws exceptions when accessing properties
+-						// of an xhr when a network error occurred
+-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+-						try {
+-
+-							// Was never called and is aborted or complete
+-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+-
+-								// Only called once
+-								callback = undefined;
+-
+-								// Do not keep as active anymore
+-								if ( handle ) {
+-									xhr.onreadystatechange = jQuery.noop;
+-									if ( xhrOnUnloadAbort ) {
+-										delete xhrCallbacks[ handle ];
+-									}
+-								}
+-
+-								// If it's an abort
+-								if ( isAbort ) {
+-									// Abort it manually if needed
+-									if ( xhr.readyState !== 4 ) {
+-										xhr.abort();
+-									}
+-								} else {
+-									responses = {};
+-									status = xhr.status;
+-									responseHeaders = xhr.getAllResponseHeaders();
+-
+-									// When requesting binary data, IE6-9 will throw an exception
+-									// on any attempt to access responseText (#11426)
+-									if ( typeof xhr.responseText === "string" ) {
+-										responses.text = xhr.responseText;
+-									}
+-
+-									// Firefox throws an exception when accessing
+-									// statusText for faulty cross-domain requests
+-									try {
+-										statusText = xhr.statusText;
+-									} catch( e ) {
+-										// We normalize with Webkit giving an empty statusText
+-										statusText = "";
+-									}
+-
+-									// Filter status for non standard behaviors
+-
+-									// If the request is local and we have data: assume a success
+-									// (success with no data won't get notified, that's the best we
+-									// can do given current implementations)
+-									if ( !status && s.isLocal && !s.crossDomain ) {
+-										status = responses.text ? 200 : 404;
+-									// IE - #1450: sometimes returns 1223 when it should be 204
+-									} else if ( status === 1223 ) {
+-										status = 204;
+-									}
+-								}
+-							}
+-						} catch( firefoxAccessException ) {
+-							if ( !isAbort ) {
+-								complete( -1, firefoxAccessException );
+-							}
+-						}
+-
+-						// Call complete if needed
+-						if ( responses ) {
+-							complete( status, statusText, responses, responseHeaders );
+-						}
+-					};
+-
+-					if ( !s.async ) {
+-						// if we're in sync mode we fire the callback
+-						callback();
+-					} else if ( xhr.readyState === 4 ) {
+-						// (IE6 & IE7) if it's in cache and has been
+-						// retrieved directly we need to fire the callback
+-						setTimeout( callback );
+-					} else {
+-						handle = ++xhrId;
+-						if ( xhrOnUnloadAbort ) {
+-							// Create the active xhrs callbacks list if needed
+-							// and attach the unload handler
+-							if ( !xhrCallbacks ) {
+-								xhrCallbacks = {};
+-								jQuery( window ).unload( xhrOnUnloadAbort );
+-							}
+-							// Add to list of active xhrs callbacks
+-							xhrCallbacks[ handle ] = callback;
+-						}
+-						xhr.onreadystatechange = callback;
+-					}
+-				},
+-
+-				abort: function() {
+-					if ( callback ) {
+-						callback( undefined, true );
+-					}
+-				}
+-			};
+-		}
+-	});
+-}
+-var fxNow, timerId,
+-	rfxtypes = /^(?:toggle|show|hide)$/,
+-	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+-	rrun = /queueHooks$/,
+-	animationPrefilters = [ defaultPrefilter ],
+-	tweeners = {
+-		"*": [function( prop, value ) {
+-			var end, unit,
+-				tween = this.createTween( prop, value ),
+-				parts = rfxnum.exec( value ),
+-				target = tween.cur(),
+-				start = +target || 0,
+-				scale = 1,
+-				maxIterations = 20;
+-
+-			if ( parts ) {
+-				end = +parts[2];
+-				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+-
+-				// We need to compute starting value
+-				if ( unit !== "px" && start ) {
+-					// Iteratively approximate from a nonzero starting point
+-					// Prefer the current property, because this process will be trivial if it uses the same units
+-					// Fallback to end or a simple constant
+-					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+-
+-					do {
+-						// If previous iteration zeroed out, double until we get *something*
+-						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+-						scale = scale || ".5";
+-
+-						// Adjust and apply
+-						start = start / scale;
+-						jQuery.style( tween.elem, prop, start + unit );
+-
+-					// Update scale, tolerating zero or NaN from tween.cur()
+-					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+-					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+-				}
+-
+-				tween.unit = unit;
+-				tween.start = start;
+-				// If a +=/-= token was provided, we're doing a relative animation
+-				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+-			}
+-			return tween;
+-		}]
+-	};
+-
+-// Animations created synchronously will run synchronously
+-function createFxNow() {
+-	setTimeout(function() {
+-		fxNow = undefined;
+-	});
+-	return ( fxNow = jQuery.now() );
+-}
+-
+-function createTweens( animation, props ) {
+-	jQuery.each( props, function( prop, value ) {
+-		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+-			index = 0,
+-			length = collection.length;
+-		for ( ; index < length; index++ ) {
+-			if ( collection[ index ].call( animation, prop, value ) ) {
+-
+-				// we're done with this property
+-				return;
+-			}
+-		}
+-	});
+-}
+-
+-function Animation( elem, properties, options ) {
+-	var result,
+-		stopped,
+-		index = 0,
+-		length = animationPrefilters.length,
+-		deferred = jQuery.Deferred().always( function() {
+-			// don't match elem in the :animated selector
+-			delete tick.elem;
+-		}),
+-		tick = function() {
+-			if ( stopped ) {
+-				return false;
+-			}
+-			var currentTime = fxNow || createFxNow(),
+-				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+-				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+-				temp = remaining / animation.duration || 0,
+-				percent = 1 - temp,
+-				index = 0,
+-				length = animation.tweens.length;
+-
+-			for ( ; index < length ; index++ ) {
+-				animation.tweens[ index ].run( percent );
+-			}
+-
+-			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+-
+-			if ( percent < 1 && length ) {
+-				return remaining;
+-			} else {
+-				deferred.resolveWith( elem, [ animation ] );
+-				return false;
+-			}
+-		},
+-		animation = deferred.promise({
+-			elem: elem,
+-			props: jQuery.extend( {}, properties ),
+-			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+-			originalProperties: properties,
+-			originalOptions: options,
+-			startTime: fxNow || createFxNow(),
+-			duration: options.duration,
+-			tweens: [],
+-			createTween: function( prop, end ) {
+-				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+-						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+-				animation.tweens.push( tween );
+-				return tween;
+-			},
+-			stop: function( gotoEnd ) {
+-				var index = 0,
+-					// if we are going to the end, we want to run all the tweens
+-					// otherwise we skip this part
+-					length = gotoEnd ? animation.tweens.length : 0;
+-				if ( stopped ) {
+-					return this;
+-				}
+-				stopped = true;
+-				for ( ; index < length ; index++ ) {
+-					animation.tweens[ index ].run( 1 );
+-				}
+-
+-				// resolve when we played the last frame
+-				// otherwise, reject
+-				if ( gotoEnd ) {
+-					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+-				} else {
+-					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+-				}
+-				return this;
+-			}
+-		}),
+-		props = animation.props;
+-
+-	propFilter( props, animation.opts.specialEasing );
+-
+-	for ( ; index < length ; index++ ) {
+-		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+-		if ( result ) {
+-			return result;
+-		}
+-	}
+-
+-	createTweens( animation, props );
+-
+-	if ( jQuery.isFunction( animation.opts.start ) ) {
+-		animation.opts.start.call( elem, animation );
+-	}
+-
+-	jQuery.fx.timer(
+-		jQuery.extend( tick, {
+-			elem: elem,
+-			anim: animation,
+-			queue: animation.opts.queue
+-		})
+-	);
+-
+-	// attach callbacks from options
+-	return animation.progress( animation.opts.progress )
+-		.done( animation.opts.done, animation.opts.complete )
+-		.fail( animation.opts.fail )
+-		.always( animation.opts.always );
+-}
+-
+-function propFilter( props, specialEasing ) {
+-	var value, name, index, easing, hooks;
+-
+-	// camelCase, specialEasing and expand cssHook pass
+-	for ( index in props ) {
+-		name = jQuery.camelCase( index );
+-		easing = specialEasing[ name ];
+-		value = props[ index ];
+-		if ( jQuery.isArray( value ) ) {
+-			easing = value[ 1 ];
+-			value = props[ index ] = value[ 0 ];
+-		}
+-
+-		if ( index !== name ) {
+-			props[ name ] = value;
+-			delete props[ index ];
+-		}
+-
+-		hooks = jQuery.cssHooks[ name ];
+-		if ( hooks && "expand" in hooks ) {
+-			value = hooks.expand( value );
+-			delete props[ name ];
+-
+-			// not quite $.extend, this wont overwrite keys already present.
+-			// also - reusing 'index' from above because we have the correct "name"
+-			for ( index in value ) {
+-				if ( !( index in props ) ) {
+-					props[ index ] = value[ index ];
+-					specialEasing[ index ] = easing;
+-				}
+-			}
+-		} else {
+-			specialEasing[ name ] = easing;
+-		}
+-	}
+-}
+-
+-jQuery.Animation = jQuery.extend( Animation, {
+-
+-	tweener: function( props, callback ) {
+-		if ( jQuery.isFunction( props ) ) {
+-			callback = props;
+-			props = [ "*" ];
+-		} else {
+-			props = props.split(" ");
+-		}
+-
+-		var prop,
+-			index = 0,
+-			length = props.length;
+-
+-		for ( ; index < length ; index++ ) {
+-			prop = props[ index ];
+-			tweeners[ prop ] = tweeners[ prop ] || [];
+-			tweeners[ prop ].unshift( callback );
+-		}
+-	},
+-
+-	prefilter: function( callback, prepend ) {
+-		if ( prepend ) {
+-			animationPrefilters.unshift( callback );
+-		} else {
+-			animationPrefilters.push( callback );
+-		}
+-	}
+-});
+-
+-function defaultPrefilter( elem, props, opts ) {
+-	/*jshint validthis:true */
+-	var prop, index, length,
+-		value, dataShow, toggle,
+-		tween, hooks, oldfire,
+-		anim = this,
+-		style = elem.style,
+-		orig = {},
+-		handled = [],
+-		hidden = elem.nodeType && isHidden( elem );
+-
+-	// handle queue: false promises
+-	if ( !opts.queue ) {
+-		hooks = jQuery._queueHooks( elem, "fx" );
+-		if ( hooks.unqueued == null ) {
+-			hooks.unqueued = 0;
+-			oldfire = hooks.empty.fire;
+-			hooks.empty.fire = function() {
+-				if ( !hooks.unqueued ) {
+-					oldfire();
+-				}
+-			};
+-		}
+-		hooks.unqueued++;
+-
+-		anim.always(function() {
+-			// doing this makes sure that the complete handler will be called
+-			// before this completes
+-			anim.always(function() {
+-				hooks.unqueued--;
+-				if ( !jQuery.queue( elem, "fx" ).length ) {
+-					hooks.empty.fire();
+-				}
+-			});
+-		});
+-	}
+-
+-	// height/width overflow pass
+-	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+-		// Make sure that nothing sneaks out
+-		// Record all 3 overflow attributes because IE does not
+-		// change the overflow attribute when overflowX and
+-		// overflowY are set to the same value
+-		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+-
+-		// Set display property to inline-block for height/width
+-		// animations on inline elements that are having width/height animated
+-		if ( jQuery.css( elem, "display" ) === "inline" &&
+-				jQuery.css( elem, "float" ) === "none" ) {
+-
+-			// inline-level elements accept inline-block;
+-			// block-level elements need to be inline with layout
+-			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+-				style.display = "inline-block";
+-
+-			} else {
+-				style.zoom = 1;
+-			}
+-		}
+-	}
+-
+-	if ( opts.overflow ) {
+-		style.overflow = "hidden";
+-		if ( !jQuery.support.shrinkWrapBlocks ) {
+-			anim.always(function() {
+-				style.overflow = opts.overflow[ 0 ];
+-				style.overflowX = opts.overflow[ 1 ];
+-				style.overflowY = opts.overflow[ 2 ];
+-			});
+-		}
+-	}
+-
+-
+-	// show/hide pass
+-	for ( index in props ) {
+-		value = props[ index ];
+-		if ( rfxtypes.exec( value ) ) {
+-			delete props[ index ];
+-			toggle = toggle || value === "toggle";
+-			if ( value === ( hidden ? "hide" : "show" ) ) {
+-				continue;
+-			}
+-			handled.push( index );
+-		}
+-	}
+-
+-	length = handled.length;
+-	if ( length ) {
+-		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+-		if ( "hidden" in dataShow ) {
+-			hidden = dataShow.hidden;
+-		}
+-
+-		// store state if its toggle - enables .stop().toggle() to "reverse"
+-		if ( toggle ) {
+-			dataShow.hidden = !hidden;
+-		}
+-		if ( hidden ) {
+-			jQuery( elem ).show();
+-		} else {
+-			anim.done(function() {
+-				jQuery( elem ).hide();
+-			});
+-		}
+-		anim.done(function() {
+-			var prop;
+-			jQuery._removeData( elem, "fxshow" );
+-			for ( prop in orig ) {
+-				jQuery.style( elem, prop, orig[ prop ] );
+-			}
+-		});
+-		for ( index = 0 ; index < length ; index++ ) {
+-			prop = handled[ index ];
+-			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+-			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+-
+-			if ( !( prop in dataShow ) ) {
+-				dataShow[ prop ] = tween.start;
+-				if ( hidden ) {
+-					tween.end = tween.start;
+-					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+-				}
+-			}
+-		}
+-	}
+-}
+-
+-function Tween( elem, options, prop, end, easing ) {
+-	return new Tween.prototype.init( elem, options, prop, end, easing );
+-}
+-jQuery.Tween = Tween;
+-
+-Tween.prototype = {
+-	constructor: Tween,
+-	init: function( elem, options, prop, end, easing, unit ) {
+-		this.elem = elem;
+-		this.prop = prop;
+-		this.easing = easing || "swing";
+-		this.options = options;
+-		this.start = this.now = this.cur();
+-		this.end = end;
+-		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+-	},
+-	cur: function() {
+-		var hooks = Tween.propHooks[ this.prop ];
+-
+-		return hooks && hooks.get ?
+-			hooks.get( this ) :
+-			Tween.propHooks._default.get( this );
+-	},
+-	run: function( percent ) {
+-		var eased,
+-			hooks = Tween.propHooks[ this.prop ];
+-
+-		if ( this.options.duration ) {
+-			this.pos = eased = jQuery.easing[ this.easing ](
+-				percent, this.options.duration * percent, 0, 1, this.options.duration
+-			);
+-		} else {
+-			this.pos = eased = percent;
+-		}
+-		this.now = ( this.end - this.start ) * eased + this.start;
+-
+-		if ( this.options.step ) {
+-			this.options.step.call( this.elem, this.now, this );
+-		}
+-
+-		if ( hooks && hooks.set ) {
+-			hooks.set( this );
+-		} else {
+-			Tween.propHooks._default.set( this );
+-		}
+-		return this;
+-	}
+-};
+-
+-Tween.prototype.init.prototype = Tween.prototype;
+-
+-Tween.propHooks = {
+-	_default: {
+-		get: function( tween ) {
+-			var result;
+-
+-			if ( tween.elem[ tween.prop ] != null &&
+-				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+-				return tween.elem[ tween.prop ];
+-			}
+-
+-			// passing an empty string as a 3rd parameter to .css will automatically
+-			// attempt a parseFloat and fallback to a string if the parse fails
+-			// so, simple values such as "10px" are parsed to Float.
+-			// complex values such as "rotate(1rad)" are returned as is.
+-			result = jQuery.css( tween.elem, tween.prop, "" );
+-			// Empty strings, null, undefined and "auto" are converted to 0.
+-			return !result || result === "auto" ? 0 : result;
+-		},
+-		set: function( tween ) {
+-			// use step hook for back compat - use cssHook if its there - use .style if its
+-			// available and use plain properties where available
+-			if ( jQuery.fx.step[ tween.prop ] ) {
+-				jQuery.fx.step[ tween.prop ]( tween );
+-			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+-				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+-			} else {
+-				tween.elem[ tween.prop ] = tween.now;
+-			}
+-		}
+-	}
+-};
+-
+-// Remove in 2.0 - this supports IE8's panic based approach
+-// to setting things on disconnected nodes
+-
+-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+-	set: function( tween ) {
+-		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+-			tween.elem[ tween.prop ] = tween.now;
+-		}
+-	}
+-};
+-
+-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+-	var cssFn = jQuery.fn[ name ];
+-	jQuery.fn[ name ] = function( speed, easing, callback ) {
+-		return speed == null || typeof speed === "boolean" ?
+-			cssFn.apply( this, arguments ) :
+-			this.animate( genFx( name, true ), speed, easing, callback );
+-	};
+-});
+-
+-jQuery.fn.extend({
+-	fadeTo: function( speed, to, easing, callback ) {
+-
+-		// show any hidden elements after setting opacity to 0
+-		return this.filter( isHidden ).css( "opacity", 0 ).show()
+-
+-			// animate to the value specified
+-			.end().animate({ opacity: to }, speed, easing, callback );
+-	},
+-	animate: function( prop, speed, easing, callback ) {
+-		var empty = jQuery.isEmptyObject( prop ),
+-			optall = jQuery.speed( speed, easing, callback ),
+-			doAnimation = function() {
+-				// Operate on a copy of prop so per-property easing won't be lost
+-				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+-				doAnimation.finish = function() {
+-					anim.stop( true );
+-				};
+-				// Empty animations, or finishing resolves immediately
+-				if ( empty || jQuery._data( this, "finish" ) ) {
+-					anim.stop( true );
+-				}
+-			};
+-			doAnimation.finish = doAnimation;
+-
+-		return empty || optall.queue === false ?
+-			this.each( doAnimation ) :
+-			this.queue( optall.queue, doAnimation );
+-	},
+-	stop: function( type, clearQueue, gotoEnd ) {
+-		var stopQueue = function( hooks ) {
+-			var stop = hooks.stop;
+-			delete hooks.stop;
+-			stop( gotoEnd );
+-		};
+-
+-		if ( typeof type !== "string" ) {
+-			gotoEnd = clearQueue;
+-			clearQueue = type;
+-			type = undefined;
+-		}
+-		if ( clearQueue && type !== false ) {
+-			this.queue( type || "fx", [] );
+-		}
+-
+-		return this.each(function() {
+-			var dequeue = true,
+-				index = type != null && type + "queueHooks",
+-				timers = jQuery.timers,
+-				data = jQuery._data( this );
+-
+-			if ( index ) {
+-				if ( data[ index ] && data[ index ].stop ) {
+-					stopQueue( data[ index ] );
+-				}
+-			} else {
+-				for ( index in data ) {
+-					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+-						stopQueue( data[ index ] );
+-					}
+-				}
+-			}
+-
+-			for ( index = timers.length; index--; ) {
+-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+-					timers[ index ].anim.stop( gotoEnd );
+-					dequeue = false;
+-					timers.splice( index, 1 );
+-				}
+-			}
+-
+-			// start the next in the queue if the last step wasn't forced
+-			// timers currently will call their complete callbacks, which will dequeue
+-			// but only if they were gotoEnd
+-			if ( dequeue || !gotoEnd ) {
+-				jQuery.dequeue( this, type );
+-			}
+-		});
+-	},
+-	finish: function( type ) {
+-		if ( type !== false ) {
+-			type = type || "fx";
+-		}
+-		return this.each(function() {
+-			var index,
+-				data = jQuery._data( this ),
+-				queue = data[ type + "queue" ],
+-				hooks = data[ type + "queueHooks" ],
+-				timers = jQuery.timers,
+-				length = queue ? queue.length : 0;
+-
+-			// enable finishing flag on private data
+-			data.finish = true;
+-
+-			// empty the queue first
+-			jQuery.queue( this, type, [] );
+-
+-			if ( hooks && hooks.cur && hooks.cur.finish ) {
+-				hooks.cur.finish.call( this );
+-			}
+-
+-			// look for any active animations, and finish them
+-			for ( index = timers.length; index--; ) {
+-				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+-					timers[ index ].anim.stop( true );
+-					timers.splice( index, 1 );
+-				}
+-			}
+-
+-			// look for any animations in the old queue and finish them
+-			for ( index = 0; index < length; index++ ) {
+-				if ( queue[ index ] && queue[ index ].finish ) {
+-					queue[ index ].finish.call( this );
+-				}
+-			}
+-
+-			// turn off finishing flag
+-			delete data.finish;
+-		});
+-	}
+-});
+-
+-// Generate parameters to create a standard animation
+-function genFx( type, includeWidth ) {
+-	var which,
+-		attrs = { height: type },
+-		i = 0;
+-
+-	// if we include width, step value is 1 to do all cssExpand values,
+-	// if we don't include width, step value is 2 to skip over Left and Right
+-	includeWidth = includeWidth? 1 : 0;
+-	for( ; i < 4 ; i += 2 - includeWidth ) {
+-		which = cssExpand[ i ];
+-		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+-	}
+-
+-	if ( includeWidth ) {
+-		attrs.opacity = attrs.width = type;
+-	}
+-
+-	return attrs;
+-}
+-
+-// Generate shortcuts for custom animations
+-jQuery.each({
+-	slideDown: genFx("show"),
+-	slideUp: genFx("hide"),
+-	slideToggle: genFx("toggle"),
+-	fadeIn: { opacity: "show" },
+-	fadeOut: { opacity: "hide" },
+-	fadeToggle: { opacity: "toggle" }
+-}, function( name, props ) {
+-	jQuery.fn[ name ] = function( speed, easing, callback ) {
+-		return this.animate( props, speed, easing, callback );
+-	};
+-});
+-
+-jQuery.speed = function( speed, easing, fn ) {
+-	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+-		complete: fn || !fn && easing ||
+-			jQuery.isFunction( speed ) && speed,
+-		duration: speed,
+-		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+-	};
+-
+-	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+-		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+-
+-	// normalize opt.queue - true/undefined/null -> "fx"
+-	if ( opt.queue == null || opt.queue === true ) {
+-		opt.queue = "fx";
+-	}
+-
+-	// Queueing
+-	opt.old = opt.complete;
+-
+-	opt.complete = function() {
+-		if ( jQuery.isFunction( opt.old ) ) {
+-			opt.old.call( this );
+-		}
+-
+-		if ( opt.queue ) {
+-			jQuery.dequeue( this, opt.queue );
+-		}
+-	};
+-
+-	return opt;
+-};
+-
+-jQuery.easing = {
+-	linear: function( p ) {
+-		return p;
+-	},
+-	swing: function( p ) {
+-		return 0.5 - Math.cos( p*Math.PI ) / 2;
+-	}
+-};
+-
+-jQuery.timers = [];
+-jQuery.fx = Tween.prototype.init;
+-jQuery.fx.tick = function() {
+-	var timer,
+-		timers = jQuery.timers,
+-		i = 0;
+-
+-	fxNow = jQuery.now();
+-
+-	for ( ; i < timers.length; i++ ) {
+-		timer = timers[ i ];
+-		// Checks the timer has not already been removed
+-		if ( !timer() && timers[ i ] === timer ) {
+-			timers.splice( i--, 1 );
+-		}
+-	}
+-
+-	if ( !timers.length ) {
+-		jQuery.fx.stop();
+-	}
+-	fxNow = undefined;
+-};
+-
+-jQuery.fx.timer = function( timer ) {
+-	if ( timer() && jQuery.timers.push( timer ) ) {
+-		jQuery.fx.start();
+-	}
+-};
+-
+-jQuery.fx.interval = 13;
+-
+-jQuery.fx.start = function() {
+-	if ( !timerId ) {
+-		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+-	}
+-};
+-
+-jQuery.fx.stop = function() {
+-	clearInterval( timerId );
+-	timerId = null;
+-};
+-
+-jQuery.fx.speeds = {
+-	slow: 600,
+-	fast: 200,
+-	// Default speed
+-	_default: 400
+-};
+-
+-// Back Compat <1.8 extension point
+-jQuery.fx.step = {};
+-
+-if ( jQuery.expr && jQuery.expr.filters ) {
+-	jQuery.expr.filters.animated = function( elem ) {
+-		return jQuery.grep(jQuery.timers, function( fn ) {
+-			return elem === fn.elem;
+-		}).length;
+-	};
+-}
+-jQuery.fn.offset = function( options ) {
+-	if ( arguments.length ) {
+-		return options === undefined ?
+-			this :
+-			this.each(function( i ) {
+-				jQuery.offset.setOffset( this, options, i );
+-			});
+-	}
+-
+-	var docElem, win,
+-		box = { top: 0, left: 0 },
+-		elem = this[ 0 ],
+-		doc = elem && elem.ownerDocument;
+-
+-	if ( !doc ) {
+-		return;
+-	}
+-
+-	docElem = doc.documentElement;
+-
+-	// Make sure it's not a disconnected DOM node
+-	if ( !jQuery.contains( docElem, elem ) ) {
+-		return box;
+-	}
+-
+-	// If we don't have gBCR, just use 0,0 rather than error
+-	// BlackBerry 5, iOS 3 (original iPhone)
+-	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+-		box = elem.getBoundingClientRect();
+-	}
+-	win = getWindow( doc );
+-	return {
+-		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+-		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+-	};
+-};
+-
+-jQuery.offset = {
+-
+-	setOffset: function( elem, options, i ) {
+-		var position = jQuery.css( elem, "position" );
+-
+-		// set position first, in-case top/left are set even on static elem
+-		if ( position === "static" ) {
+-			elem.style.position = "relative";
+-		}
+-
+-		var curElem = jQuery( elem ),
+-			curOffset = curElem.offset(),
+-			curCSSTop = jQuery.css( elem, "top" ),
+-			curCSSLeft = jQuery.css( elem, "left" ),
+-			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+-			props = {}, curPosition = {}, curTop, curLeft;
+-
+-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+-		if ( calculatePosition ) {
+-			curPosition = curElem.position();
+-			curTop = curPosition.top;
+-			curLeft = curPosition.left;
+-		} else {
+-			curTop = parseFloat( curCSSTop ) || 0;
+-			curLeft = parseFloat( curCSSLeft ) || 0;
+-		}
+-
+-		if ( jQuery.isFunction( options ) ) {
+-			options = options.call( elem, i, curOffset );
+-		}
+-
+-		if ( options.top != null ) {
+-			props.top = ( options.top - curOffset.top ) + curTop;
+-		}
+-		if ( options.left != null ) {
+-			props.left = ( options.left - curOffset.left ) + curLeft;
+-		}
+-
+-		if ( "using" in options ) {
+-			options.using.call( elem, props );
+-		} else {
+-			curElem.css( props );
+-		}
+-	}
+-};
+-
+-
+-jQuery.fn.extend({
+-
+-	position: function() {
+-		if ( !this[ 0 ] ) {
+-			return;
+-		}
+-
+-		var offsetParent, offset,
+-			parentOffset = { top: 0, left: 0 },
+-			elem = this[ 0 ];
+-
+-		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+-		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+-			// we assume that getBoundingClientRect is available when computed position is fixed
+-			offset = elem.getBoundingClientRect();
+-		} else {
+-			// Get *real* offsetParent
+-			offsetParent = this.offsetParent();
+-
+-			// Get correct offsets
+-			offset = this.offset();
+-			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+-				parentOffset = offsetParent.offset();
+-			}
+-
+-			// Add offsetParent borders
+-			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+-			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+-		}
+-
+-		// Subtract parent offsets and element margins
+-		// note: when an element has margin: auto the offsetLeft and marginLeft
+-		// are the same in Safari causing offset.left to incorrectly be 0
+-		return {
+-			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+-			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+-		};
+-	},
+-
+-	offsetParent: function() {
+-		return this.map(function() {
+-			var offsetParent = this.offsetParent || document.documentElement;
+-			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+-				offsetParent = offsetParent.offsetParent;
+-			}
+-			return offsetParent || document.documentElement;
+-		});
+-	}
+-});
+-
+-
+-// Create scrollLeft and scrollTop methods
+-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+-	var top = /Y/.test( prop );
+-
+-	jQuery.fn[ method ] = function( val ) {
+-		return jQuery.access( this, function( elem, method, val ) {
+-			var win = getWindow( elem );
+-
+-			if ( val === undefined ) {
+-				return win ? (prop in win) ? win[ prop ] :
+-					win.document.documentElement[ method ] :
+-					elem[ method ];
+-			}
+-
+-			if ( win ) {
+-				win.scrollTo(
+-					!top ? val : jQuery( win ).scrollLeft(),
+-					top ? val : jQuery( win ).scrollTop()
+-				);
+-
+-			} else {
+-				elem[ method ] = val;
+-			}
+-		}, method, val, arguments.length, null );
+-	};
+-});
+-
+-function getWindow( elem ) {
+-	return jQuery.isWindow( elem ) ?
+-		elem :
+-		elem.nodeType === 9 ?
+-			elem.defaultView || elem.parentWindow :
+-			false;
+-}
+-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+-	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+-		// margin is only for outerHeight, outerWidth
+-		jQuery.fn[ funcName ] = function( margin, value ) {
+-			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+-				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+-
+-			return jQuery.access( this, function( elem, type, value ) {
+-				var doc;
+-
+-				if ( jQuery.isWindow( elem ) ) {
+-					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+-					// isn't a whole lot we can do. See pull request at this URL for discussion:
+-					// https://github.com/jquery/jquery/pull/764
+-					return elem.document.documentElement[ "client" + name ];
+-				}
+-
+-				// Get document width or height
+-				if ( elem.nodeType === 9 ) {
+-					doc = elem.documentElement;
+-
+-					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+-					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+-					return Math.max(
+-						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+-						elem.body[ "offset" + name ], doc[ "offset" + name ],
+-						doc[ "client" + name ]
+-					);
+-				}
+-
+-				return value === undefined ?
+-					// Get width or height on the element, requesting but not forcing parseFloat
+-					jQuery.css( elem, type, extra ) :
+-
+-					// Set width or height on the element
+-					jQuery.style( elem, type, value, extra );
+-			}, type, chainable ? margin : undefined, chainable, null );
+-		};
+-	});
+-});
+-// Limit scope pollution from any deprecated API
+-// (function() {
+-
+-// })();
+-// Expose jQuery to the global object
+-window.jQuery = window.$ = jQuery;
+-
+-// Expose jQuery as an AMD module, but only for AMD loaders that
+-// understand the issues with loading multiple versions of jQuery
+-// in a page that all might call define(). The loader will indicate
+-// they have special allowances for multiple jQuery versions by
+-// specifying define.amd.jQuery = true. Register as a named module,
+-// since jQuery can be concatenated with other files that may use define,
+-// but not use a proper concatenation script that understands anonymous
+-// AMD modules. A named AMD is safest and most robust way to register.
+-// Lowercase jquery is used because AMD module names are derived from
+-// file names, and jQuery is normally delivered in a lowercase file name.
+-// Do this after creating the global so that if an AMD module wants to call
+-// noConflict to hide this version of jQuery, it will work.
+-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+-	define( "jquery", [], function () { return jQuery; } );
+-}
+-
+-})( window );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect.jquery.json	(revision 15488)
+@@ -1,68 +0,0 @@
+-{
+-	"name": "ui.effect",
+-	"title": "jQuery UI Effects Core",
+-	"description": "Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.",
+-	"keywords": [
+-		"ui",
+-		"effect",
+-		"animation",
+-		"show",
+-		"hide",
+-		"color",
+-		"class",
+-		"transition",
+-		"easing"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/category/effects-core/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-drop.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-drop.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-drop.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-drop",
+-	"title": "jQuery UI Drop Effect",
+-	"description": "Moves an element in one direction and hides it at the same time.",
+-	"keywords": [
+-		"ui",
+-		"drop",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/drop-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.dialog.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.dialog.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.dialog.jquery.json	(revision 15488)
+@@ -1,70 +0,0 @@
+-{
+-	"name": "ui.dialog",
+-	"title": "jQuery UI Dialog",
+-	"description": "Displays customizable dialog windows.",
+-	"keywords": [
+-		"ui",
+-		"dialog",
+-		"modal",
+-		"alert",
+-		"popup"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/dialog/",
+-	"demo": "http://jqueryui.com/dialog/",
+-	"docs": "http://api.jqueryui.com/dialog/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.button": "1.10.3",
+-		"ui.draggable": "1.10.3",
+-		"ui.position": "1.10.3",
+-		"ui.resizable": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-highlight.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-highlight.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-highlight.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-highlight",
+-	"title": "jQuery UI Highlight Effect",
+-	"description": "Highlights the background of an element in a defined color for a custom duration.",
+-	"keywords": [
+-		"ui",
+-		"highlight",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/highlight-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/AUTHORS.txt
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/AUTHORS.txt	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/AUTHORS.txt	(revision 15488)
+@@ -1,245 +0,0 @@
+-Authors ordered by first contribution
+-A list of current team members is available at http://jqueryui.com/about
+-
+-Paul Bakaus <paul.bakaus@googlemail.com>
+-Richard Worth <rdworth@gmail.com>
+-Yehuda Katz <wycats@gmail.com>
+-Sean Catchpole <sean@sunsean.com>
+-John Resig <jeresig@gmail.com>
+-Tane Piper <piper.tane@gmail.com>
+-Dmitri Gaskin <dmitrig01@gmail.com>
+-Klaus Hartl <klaus.hartl@googlemail.com>
+-Stefan Petre <stefan.petre@gmail.com>
+-Gilles van den Hoven <gilles@webunity.nl>
+-Micheil Bryan Smith <micheil@brandedcode.com>
+-Jörn Zaefferer <joern.zaefferer@gmail.com>
+-Marc Grabanski <m@marcgrabanski.com>
+-Keith Wood <kbwood.au@gmail.com>
+-Brandon Aaron <brandon.aaron@gmail.com>
+-Scott González <scott.gonzalez@gmail.com>
+-Eduardo Lundgren <eduardolundgren@gmail.com>
+-Aaron Eisenberger <aaronchi@gmail.com>
+-Joan Piedra <theneojp@gmail.com>
+-Bruno Basto <b.basto@gmail.com>
+-Remy Sharp <remy@leftlogic.com>
+-Bohdan Ganicky <bohdan.ganicky@gmail.com>
+-David Bolter <david.bolter@gmail.com>
+-Chi Cheng <cloudream@gmail.com>
+-Ca-Phun Ung <pazu2k@gmail.com>
+-Ariel Flesler <aflesler@gmail.com>
+-Maggie Costello Wachs <fg.maggie@gmail.com>
+-Scott Jehl <scott@scottjehl.com>
+-Todd Parker <fg.todd@gmail.com>
+-Andrew Powell <powella@gmail.com>
+-Brant Burnett <btburnett3@gmail.com>
+-Douglas Neiner <doug@pixelgraphics.us>
+-Paul Irish <paul.irish@gmail.com>
+-Ralph Whitbeck <ralph.whitbeck@gmail.com>
+-Thibault Duplessis <thibault.duplessis@gmail.com>
+-Dominique Vincent <dominique.vincent@toitl.com>
+-Jack Hsu <jack.hsu@gmail.com>
+-Adam Sontag <ajpiano@ajpiano.com>
+-Carl Fürstenberg <carl@excito.com>
+-Kevin Dalman <development@allpro.net>
+-Alberto Fernández Capel <afcapel@gmail.com>
+-Jacek Jędrzejewski (http://jacek.jedrzejewski.name)
+-Ting Kuei <ting@kuei.com>
+-Samuel Cormier-Iijima <sam@chide.it>
+-Jon Palmer <jonspalmer@gmail.com>
+-Ben Hollis <bhollis@amazon.com>
+-Justin MacCarthy <Justin@Rubystars.biz>
+-Eyal Kobrigo <kobrigo@hotmail.com>
+-Tiago Freire <tiago.freire@gmail.com>
+-Diego Tres <diegotres@gmail.com>
+-Holger Rüprich <holger@rueprich.de>
+-Ziling Zhao <zizhao@cisco.com>
+-Mike Alsup <malsup@gmail.com>
+-Robson Braga Araujo <robsonbraga@gmail.com>
+-Pierre-Henri Ausseil <ph.ausseil@gmail.com>
+-Christopher McCulloh <cmcculloh@gmail.com>
+-Andrew Newcomb <ext.github@preceptsoftware.co.uk>
+-Lim Chee Aun <cheeaun@gmail.com>
+-Jorge Barreiro <yortx.barry@gmail.com>
+-Daniel Steigerwald <daniel@steigerwald.cz>
+-John Firebaugh <john_firebaugh@bigfix.com>
+-John Enters <github@darkdark.net>
+-Andrey Kapitcyn <ru.m157y@gmail.com>
+-Dmitry Petrov <dpetroff@gmail.com>
+-Eric Hynds <eric@hynds.net>
+-Chairat Sunthornwiphat <pipo@sixhead.com>
+-Josh Varner <josh.varner@gmail.com>
+-Stéphane Raimbault <stephane.raimbault@gmail.com>
+-Jay Merrifield <fracmak@gmail.com>
+-J. Ryan Stinnett <jryans@gmail.com>
+-Peter Heiberg <peter@heiberg.se>
+-Alex Dovenmuehle <adovenmuehle@gmail.com>
+-Jamie Gegerson <git@jamiegegerson.com>
+-Raymond Schwartz <skeetergraphics@gmail.com>
+-Phillip Barnes <philbar@gmail.com>
+-Kyle Wilkinson <kai@wikyd.org>
+-Khaled AlHourani <me@khaledalhourani.com>
+-Marian Rudzynski <mr@impaled.org>
+-Jean-Francois Remy <jfremy@virtuoz.com>
+-Doug Blood <dougblood@gmail.com>
+-Filippo Cavallarin <filippo.cavallarin@codseq.it>
+-Heiko Henning <h.henning@educa.ch>
+-Aliaksandr Rahalevich <saksmlz@gmail.com>
+-Mario Visic <mario@mariovisic.com>
+-Xavi Ramirez <xavi.rmz@gmail.com>
+-Max Schnur <max.schnur@gmail.com>
+-Saji Nediyanchath <saji89@gmail.com>
+-Corey Frang <gnarf@gnarf.net>
+-Aaron Peterson <aaronp123@yahoo.com>
+-Ivan Peters <ivan@ivanpeters.com>
+-Mohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>
+-Marcos Sousa <falecomigo@marcossousa.com>
+-Michael DellaNoce <mdellanoce@mailtrust.com>
+-George Marshall <echosx@gmail.com>
+-Tobias Brunner <tobias@strongswan.org>
+-Martin Solli <msolli@gmail.com>
+-David Petersen <public@petersendidit.com>
+-Dan Heberden <danheberden@gmail.com>
+-William Kevin Manire <williamkmanire@gmail.com>
+-Gilmore Davidson <gilmoreorless@gmail.com>
+-Michael Wu <michaelmwu@gmail.com>
+-Adam Parod <mystic414@gmail.com>
+-Guillaume Gautreau <guillaume+github@ghusse.com>
+-Marcel Toele <EleotleCram@gmail.com>
+-Dan Streetman <ddstreet@ieee.org>
+-Matt Hoskins <furlined@cat-basket.org>
+-Giovanni Giacobbi <giovanni@giacobbi.net>
+-Kyle Florence <kyle.florence@gmail.com>
+-Pavol Hluchý <lopo@losys.sk>
+-Hans Hillen <hans.hillen@gmail.com>
+-Mark Johnson <virgofx@live.com>
+-Trey Hunner <treyhunner@gmail.com>
+-Shane Whittet <whittet@gmail.com>
+-Edward A Faulkner <ef@alum.mit.edu>
+-Adam Baratz <adam@adambaratz.com>
+-Kato Kazuyoshi <kato.kazuyoshi@gmail.com>
+-Eike Send <eike.send@gmail.com>
+-Kris Borchers <kris.borchers@gmail.com>
+-Eddie Monge <eddie@eddiemonge.com>
+-Israel Tsadok <itsadok@gmail.com>
+-Carson McDonald <carson@ioncannon.net>
+-Jason Davies <jason@jasondavies.com>
+-Garrison Locke <gplocke@gmail.com>
+-David Murdoch <musicisair@yahoo.com>
+-Benjamin Scott Boyle <benjamins.boyle@gmail.com>
+-Jesse Baird <jebaird@gmail.com>
+-Jonathan Vingiano <jvingiano@gmail.com>
+-Dylan Just <dev@ephox.com>
+-Hiroshi Tomita <tomykaira@gmail.com>
+-Glenn Goodrich <glenn.goodrich@gmail.com>
+-Tarafder Ashek-E-Elahi <mail.ashek@gmail.com>
+-Ryan Neufeld <ryan@neufeldmail.com>
+-Marc Neuwirth <marc.neuwirth@gmail.com>
+-Philip Graham <philip.robert.graham@gmail.com>
+-Benjamin Sterling <benjamin.sterling@kenzomedia.com>
+-Wesley Walser <waw325@gmail.com>
+-Kouhei Sutou <kou@clear-code.com>
+-Karl Kirch <karlkrch@gmail.com>
+-Chris Kelly <ckdake@ckdake.com>
+-Jay Oster <jay@loyalize.com>
+-Alexander Polomoshnov <alex.polomoshnov@gmail.com>
+-David Leal <dgleal@gmail.com>
+-Igor Milla <igor.fsp.milla@gmail.com>
+-Dave Methvin <dave.methvin@gmail.com>
+-Florian Gutmann <f.gutmann@chronimo.com>
+-Marwan Al Jubeh <marwan.aljubeh@gmail.com>
+-Milan Broum <midlis@googlemail.com>
+-Sebastian Sauer <info@dynpages.de>
+-Gaëtan Muller <m.gaetan89@gmail.com>
+-Michel Weimerskirch <michel@weimerskirch.net>
+-William Griffiths <william@ycymro.com>
+-Stojce Slavkovski <stojce@gmail.com>
+-David Soms <david.soms@gmail.com>
+-David De Sloovere <david.desloovere@hotmail.com>
+-Michael P. Jung <michael.jung@terreon.de>
+-Shannon Pekary <spekary@gmail.com>
+-Matthew Edward Hutton <meh@corefiling.co.uk>
+-James Khoury <james@jameskhoury.com>
+-Rob Loach <robloach@gmail.com>
+-Alberto Monteiro <betimbrasil@gmail.com>
+-Alex Rhea <alex.rhea@gmail.com>
+-Krzysztof Rosiński <rozwell69@gmail.com>
+-Ryan Olton <oltonr@gmail.com>
+-Genie <386@mail.com>
+-Rick Waldron <waldron.rick@gmail.com>
+-Ian Simpson <spoonlikesham@gmail.com>
+-Lev Kitsis <spam4lev@gmail.com>
+-TJ VanToll <tj.vantoll@gmail.com>
+-Justin Domnitz <jdomnitz@gmail.com>
+-Douglas Cerna <douglascerna@yahoo.com>
+-Bert ter Heide <bertjh@hotmail.com>
+-Jasvir Nagra <jasvir@gmail.com>
+-Petr Hromadko <yuriy@tokyoscale.com>
+-Harri Kilpiö <harri.kilpio@gmail.com>
+-Lado Lomidze <lado.lomidze@gmail.com>
+-Amir E. Aharoni <amir.aharoni@mail.huji.ac.il>
+-Simon Sattes <simon.sattes@gmail.com>
+-Jo Liss <joliss42@gmail.com>
+-Guntupalli Karunakar <karunakarg@yahoo.com>
+-Shahyar Ghobadpour <shahyar@gmail.com>
+-Lukasz Lipinski <uzza17@gmail.com>
+-Timo Tijhof <krinklemail@gmail.com>
+-Jason Moon <jmoon@socialcast.com>
+-Martin Frost <martinf55@hotmail.com>
+-Eneko Illarramendi <eneko@illarra.com>
+-EungJun Yi <semtlenori@gmail.com>
+-Courtland Allen <courtlandallen@gmail.com>
+-Viktar Varvanovich <non4eg@gmail.com>
+-Danny Trunk <dtrunk90@gmail.com>
+-Pavel Stetina <pavel.stetina@nangu.tv>
+-Michael Stay <metaweta@gmail.com>
+-Steven Roussey <sroussey@gmail.com>
+-Michael Hollis <hollis21@gmail.com>
+-Lee Rowlands <lee.rowlands@previousnext.com.au>
+-Timmy Willison <timmywillisn@gmail.com>
+-Karl Swedberg <kswedberg@gmail.com>
+-Baoju Yuan <the_guy_1987@hotmail.com>
+-Maciej Mroziński <mrozik87@gmail.com>
+-Luis Dalmolin <luis.nh@gmail.com>
+-Mark Aaron Shirley <maspwr@gmail.com>
+-Martin Hoch <martin@fidion.de>
+-Jiayi Yang <tr870829@gmail.com>
+-Philipp Benjamin Köppchen <xgxtpbk@gws.ms>
+-Sindre Sorhus <sindresorhus@gmail.com>
+-Bernhard Sirlinger <bernhard.sirlinger@tele2.de>
+-Jared A. Scheel <jared@jaredscheel.com>
+-Rafael Xavier de Souza <rxaviers@gmail.com>
+-John Chen <zhang.z.chen@intel.com>
+-Dale Kocian <dale.kocian@gmail.com>
+-Mike Sherov <mike.sherov@gmail.com>
+-Andrew Couch <andy@couchand.com>
+-Marc-Andre Lafortune <github@marc-andre.ca>
+-Nate Eagle <nate.eagle@teamaol.com>
+-David Souther <davidsouther@gmail.com>
+-Mathias Stenbom <mathias@stenbom.com>
+-Sergey Kartashov <ebishkek@yandex.ru>
+-Avinash R <nashpapa@gmail.com>
+-Ethan Romba <ethanromba@gmail.com>
+-Cory Gackenheimer <cory.gack@gmail.com>
+-Juan Pablo Kaniefsky <jpkaniefsky@gmail.com>
+-Roman Salnikov <bardt.dz@gmail.com>
+-Anika Henke <anika@selfthinker.org>
+-Samuel Bovée <samycookie2000@yahoo.fr>
+-Fabrício Matté <ult_combo@hotmail.com>
+-Viktor Kojouharov <vkojouharov@gmail.com>
+-Pawel Maruszczyk <lord_t@o2.pl>
+-Pavel Selitskas <p.selitskas@gmail.com>
+-Bjørn Johansen <bjorn.johansen@metronet.no>
+-Matthieu Penant <thieum22@hotmail.com>
+-Dominic Barnes <dominic@dbarnes.info>
+-David Sullivan <david.sullivan@gmail.com>
+-Thomas Jaggi <thomas.jaggi@gmail.com>
+-Vahid Sohrabloo <vahid4134@gmail.com>
+-Travis Carden <travis.carden@gmail.com>
+-Bruno M. Custódio <bruno@brunomcustodio.com>
+-Nathanael Silverman <nathanael.silverman@gmail.com>
+-Christian Wenz <christian@wenz.org>
+-Steve Urmston <steve@urm.st>
+-Zaven Muradyan <megalivoithos@gmail.com>
+-Woody Gilk <shadowhand@deviantart.com>
+-Zbigniew Motyka <zbigniew.motyka@gmail.com>
+-Suhail Alkowaileet <xsoh.k7@gmail.com>
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.autocomplete.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.autocomplete.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.autocomplete.jquery.json	(revision 15488)
+@@ -1,69 +0,0 @@
+-{
+-	"name": "ui.autocomplete",
+-	"title": "jQuery UI Autocomplete",
+-	"description": "Lists suggested words as the user is typing.",
+-	"keywords": [
+-		"ui",
+-		"autocomplete",
+-		"form",
+-		"word",
+-		"predict",
+-		"suggest"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/autocomplete/",
+-	"demo": "http://jqueryui.com/autocomplete/",
+-	"docs": "http://api.jqueryui.com/autocomplete/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.menu": "1.10.3",
+-		"ui.position": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/package.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/package.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/package.json	(revision 15488)
+@@ -1,70 +0,0 @@
+-{
+-	"name": "jquery-ui",
+-	"title": "jQuery UI",
+-	"description": "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.",
+-	"version": "1.10.3",
+-	"homepage": "http://jqueryui.com",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"repository": {
+-		"type": "git",
+-		"url": "git://github.com/jquery/jquery-ui.git"
+-	},
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"dependencies": {},
+-	"devDependencies": {
+-		"grunt": "0.4.1",
+-		"grunt-contrib-jshint": "0.4.1",
+-		"grunt-contrib-uglify": "0.1.1",
+-		"grunt-contrib-concat": "0.1.3",
+-		"grunt-contrib-qunit": "0.2.0",
+-		"grunt-contrib-csslint": "0.1.0",
+-		"grunt-contrib-cssmin": "0.4.2",
+-		"grunt-compare-size": "0.3.1",
+-		"grunt-html": "0.3.3",
+-		"grunt-git-authors": "1.2.0",
+-		"rimraf": "2.1.4",
+-		"testswarm": "1.0.0-alpha"
+-	},
+-	"keywords": []
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.accordion.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.accordion.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.accordion.jquery.json	(revision 15488)
+@@ -1,67 +0,0 @@
+-{
+-	"name": "ui.accordion",
+-	"title": "jQuery UI Accordion",
+-	"description": "Displays collapsible content panels for presenting information in a limited amount of space.",
+-	"keywords": [
+-		"ui",
+-		"accordion",
+-		"navigation",
+-		"panel",
+-		"collapse",
+-		"expand"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/accordion/",
+-	"demo": "http://jqueryui.com/accordion/",
+-	"docs": "http://api.jqueryui.com/accordion/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.selectable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.selectable.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.selectable.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.selectable",
+-	"title": "jQuery UI Selectable",
+-	"description": "Allows groups of elements to be selected with the mouse.",
+-	"keywords": [
+-		"ui",
+-		"selectable",
+-		"selection"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/selectable/",
+-	"demo": "http://jqueryui.com/selectable/",
+-	"docs": "http://api.jqueryui.com/selectable/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.mouse": "1.10.3"
+-	},
+-	"category": "interaction"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.position.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.position.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.position.jquery.json	(revision 15488)
+@@ -1,66 +0,0 @@
+-{
+-	"name": "ui.position",
+-	"title": "jQuery UI Position",
+-	"description": "Positions elements relative to other elements.",
+-	"keywords": [
+-		"ui",
+-		"position",
+-		"offset",
+-		"relative",
+-		"absolute",
+-		"fixed",
+-		"collision"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/position/",
+-	"demo": "http://jqueryui.com/position/",
+-	"docs": "http://api.jqueryui.com/position/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6"
+-	},
+-	"category": "core"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/no-auto-height.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/no-auto-height.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/no-auto-height.html	(revision 15488)
+@@ -1,50 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Accordion - No auto height</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.accordion.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#accordion" ).accordion({
+-			heightStyle: "content"
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="accordion">
+-	<h3>Section 1</h3>
+-	<div>
+-		<p>Mauris mauris ante, blandit et, ultrices a, susceros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
+-	</div>
+-	<h3>Section 2</h3>
+-	<div>
+-		<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
+-	</div>
+-	<h3>Section 3</h3>
+-	<div>
+-		<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
+-		<ul>
+-			<li>List item</li>
+-			<li>List item</li>
+-			<li>List item</li>
+-			<li>List item</li>
+-			<li>List item</li>
+-			<li>List item</li>
+-			<li>List item</li>
+-		</ul>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Setting <code>heightStyle: "content"</code> allows the accordion panels to keep their native height.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/collapsible.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/collapsible.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/collapsible.html	(revision 15488)
+@@ -1,50 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Accordion - Collapse content</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.accordion.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#accordion" ).accordion({
+-			collapsible: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="accordion">
+-	<h3>Section 1</h3>
+-	<div>
+-		<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
+-	</div>
+-	<h3>Section 2</h3>
+-	<div>
+-		<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
+-	</div>
+-	<h3>Section 3</h3>
+-	<div>
+-		<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
+-		<ul>
+-			<li>List item one</li>
+-			<li>List item two</li>
+-			<li>List item three</li>
+-		</ul>
+-	</div>
+-	<h3>Section 4</h3>
+-	<div>
+-		<p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>By default, accordions always keep one section open. To allow for all sections to be be collapsible, set the <code>collapsible</code> option to true. Click on the currently open section to collapse its content pane.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/sortable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/sortable.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/sortable.html	(revision 15488)
+@@ -1,74 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Accordion - Sortable</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<script src="../../ui/jquery.ui.accordion.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	/* IE has layout issues when sorting (see #5413) */
+-	.group { zoom: 1 }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#accordion" )
+-			.accordion({
+-				header: "> div > h3"
+-			})
+-			.sortable({
+-				axis: "y",
+-				handle: "h3",
+-				stop: function( event, ui ) {
+-					// IE doesn't register the blur when sorting
+-					// so trigger focusout handlers to remove .ui-state-focus
+-					ui.item.children( "h3" ).triggerHandler( "focusout" );
+-				}
+-			});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="accordion">
+-	<div class="group">
+-		<h3>Section 1</h3>
+-		<div>
+-			<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
+-		</div>
+-	</div>
+-	<div class="group">
+-		<h3>Section 2</h3>
+-		<div>
+-			<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
+-		</div>
+-	</div>
+-	<div class="group">
+-		<h3>Section 3</h3>
+-		<div>
+-			<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
+-			<ul>
+-				<li>List item one</li>
+-				<li>List item two</li>
+-				<li>List item three</li>
+-			</ul>
+-		</div>
+-	</div>
+-	<div class="group">
+-		<h3>Section 4</h3>
+-		<div>
+-			<p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
+-		</div>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Drag the header to re-order panels.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/fillspace.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/fillspace.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/fillspace.html	(revision 15488)
+@@ -1,72 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Accordion - Fill space</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<script src="../../ui/jquery.ui.accordion.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#accordion-resizer {
+-		padding: 10px;
+-		width: 350px;
+-		height: 220px;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#accordion" ).accordion({
+-			heightStyle: "fill"
+-		});
+-	});
+-	$(function() {
+-		$( "#accordion-resizer" ).resizable({
+-			minHeight: 140,
+-			minWidth: 200,
+-			resize: function() {
+-				$( "#accordion" ).accordion( "refresh" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<h3 class="docs">Resize the outer container:</h3>
+-
+-<div id="accordion-resizer" class="ui-widget-content">
+-	<div id="accordion">
+-		<h3>Section 1</h3>
+-		<div>
+-			<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
+-		</div>
+-		<h3>Section 2</h3>
+-		<div>
+-			<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
+-		</div>
+-		<h3>Section 3</h3>
+-		<div>
+-			<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
+-			<ul>
+-				<li>List item one</li>
+-				<li>List item two</li>
+-				<li>List item three</li>
+-			</ul>
+-		</div>
+-		<h3>Section 4</h3>
+-		<div>
+-			<p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
+-		</div>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Because the accordion is comprised of block-level elements, by default its width fills the available horizontal space. To fill the vertical space allocated by its container, set the <code>heightStyle</code> option to <code>"fill"</code>, and the script will automatically set the dimensions of the accordion to the height of its parent container.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/custom-icons.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/custom-icons.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/custom-icons.html	(revision 15488)
+@@ -1,64 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Accordion - Customize icons</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.accordion.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		var icons = {
+-			header: "ui-icon-circle-arrow-e",
+-			activeHeader: "ui-icon-circle-arrow-s"
+-		};
+-		$( "#accordion" ).accordion({
+-			icons: icons
+-		});
+-		$( "#toggle" ).button().click(function() {
+-			if ( $( "#accordion" ).accordion( "option", "icons" ) ) {
+-				$( "#accordion" ).accordion( "option", "icons", null );
+-			} else {
+-				$( "#accordion" ).accordion( "option", "icons", icons );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="accordion">
+-	<h3>Section 1</h3>
+-	<div>
+-		<p>Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.</p>
+-	</div>
+-	<h3>Section 2</h3>
+-	<div>
+-		<p>Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In suscipit faucibus urna. </p>
+-	</div>
+-	<h3>Section 3</h3>
+-	<div>
+-		<p>Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. </p>
+-		<ul>
+-			<li>List item one</li>
+-			<li>List item two</li>
+-			<li>List item three</li>
+-		</ul>
+-	</div>
+-	<h3>Section 4</h3>
+-	<div>
+-		<p>Cras dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia mauris vel est. </p><p>Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </p>
+-	</div>
+-</div>
+-
+-<button id="toggle">Toggle icons</button>
+-
+-<div class="demo-description">
+-<p>Customize the header icons with the <code>icons</code> option, which accepts classes for the header's default and active (open) state.  Use any class from the UI CSS framework, or create custom classes with background images.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/default.html	(revision 15488)
+@@ -1,80 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Accordion - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.accordion.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#accordion" ).accordion();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="accordion">
+-	<h3>Section 1</h3>
+-	<div>
+-		<p>
+-		Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
+-		ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
+-		amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
+-		odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
+-		</p>
+-	</div>
+-	<h3>Section 2</h3>
+-	<div>
+-		<p>
+-		Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
+-		purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
+-		velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
+-		suscipit faucibus urna.
+-		</p>
+-	</div>
+-	<h3>Section 3</h3>
+-	<div>
+-		<p>
+-		Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
+-		Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
+-		ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
+-		lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
+-		</p>
+-		<ul>
+-			<li>List item one</li>
+-			<li>List item two</li>
+-			<li>List item three</li>
+-		</ul>
+-	</div>
+-	<h3>Section 4</h3>
+-	<div>
+-		<p>
+-		Cras dictum. Pellentesque habitant morbi tristique senectus et netus
+-		et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
+-		faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
+-		mauris vel est.
+-		</p>
+-		<p>
+-		Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
+-		Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
+-		inceptos himenaeos.
+-		</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>
+-Click headers to expand/collapse content that is broken into logical sections, much like tabs.
+-Optionally, toggle sections open/closed on mouseover.
+-</p>
+-<p>
+-The underlying HTML markup is a series of headers (H3 tags) and content divs so the content is
+-usable without JavaScript.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/hoverintent.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/hoverintent.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/hoverintent.html	(revision 15488)
+@@ -1,148 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Accordion - Open on hoverintent</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.accordion.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#accordion" ).accordion({
+-			event: "click hoverintent"
+-		});
+-	});
+-
+-	/*
+-	 * hoverIntent | Copyright 2011 Brian Cherne
+-	 * http://cherne.net/brian/resources/jquery.hoverIntent.html
+-	 * modified by the jQuery UI team
+-	 */
+-	$.event.special.hoverintent = {
+-		setup: function() {
+-			$( this ).bind( "mouseover", jQuery.event.special.hoverintent.handler );
+-		},
+-		teardown: function() {
+-			$( this ).unbind( "mouseover", jQuery.event.special.hoverintent.handler );
+-		},
+-		handler: function( event ) {
+-			var currentX, currentY, timeout,
+-				args = arguments,
+-				target = $( event.target ),
+-				previousX = event.pageX,
+-				previousY = event.pageY;
+-
+-			function track( event ) {
+-				currentX = event.pageX;
+-				currentY = event.pageY;
+-			};
+-
+-			function clear() {
+-				target
+-					.unbind( "mousemove", track )
+-					.unbind( "mouseout", clear );
+-				clearTimeout( timeout );
+-			}
+-
+-			function handler() {
+-				var prop,
+-					orig = event;
+-
+-				if ( ( Math.abs( previousX - currentX ) +
+-						Math.abs( previousY - currentY ) ) < 7 ) {
+-					clear();
+-
+-					event = $.Event( "hoverintent" );
+-					for ( prop in orig ) {
+-						if ( !( prop in event ) ) {
+-							event[ prop ] = orig[ prop ];
+-						}
+-					}
+-					// Prevent accessing the original event since the new event
+-					// is fired asynchronously and the old event is no longer
+-					// usable (#6028)
+-					delete event.originalEvent;
+-
+-					target.trigger( event );
+-				} else {
+-					previousX = currentX;
+-					previousY = currentY;
+-					timeout = setTimeout( handler, 100 );
+-				}
+-			}
+-
+-			timeout = setTimeout( handler, 100 );
+-			target.bind({
+-				mousemove: track,
+-				mouseout: clear
+-			});
+-		}
+-	};
+-	</script>
+-</head>
+-<body>
+-
+-<div id="accordion">
+-	<h3>Section 1</h3>
+-	<div>
+-		<p>
+-		Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
+-		ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
+-		amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
+-		odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
+-		</p>
+-	</div>
+-	<h3>Section 2</h3>
+-	<div>
+-		<p>
+-		Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
+-		purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
+-		velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
+-		suscipit faucibus urna.
+-		</p>
+-	</div>
+-	<h3>Section 3</h3>
+-	<div>
+-		<p>
+-		Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
+-		Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
+-		ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
+-		lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
+-		</p>
+-		<ul>
+-			<li>List item one</li>
+-			<li>List item two</li>
+-			<li>List item three</li>
+-		</ul>
+-	</div>
+-	<h3>Section 4</h3>
+-	<div>
+-		<p>
+-		Cras dictum. Pellentesque habitant morbi tristique senectus et netus
+-		et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
+-		faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
+-		mauris vel est.
+-		</p>
+-		<p>
+-		Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
+-		Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
+-		inceptos himenaeos.
+-		</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>
+-Click headers to expand/collapse content that is broken into logical sections, much like tabs.
+-Optionally, toggle sections open/closed on mouseover.
+-</p>
+-<p>
+-The underlying HTML markup is a series of headers (H3 tags) and content divs so the content is
+-usable without JavaScript.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/accordion/index.html	(revision 15488)
+@@ -1,20 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Accordion Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="fillspace.html">Fill space</a></li>
+-	<li><a href="no-auto-height.html">No auto height</a></li>
+-	<li><a href="collapsible.html">Collapse content</a></li>
+-	<li><a href="hoverintent.html">Open on hoverintent</a></li>
+-	<li><a href="custom-icons.html">Customize icons</a></li>
+-	<li><a href="sortable.html">Sortable</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/combobox.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/combobox.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/combobox.html	(revision 15488)
+@@ -1,213 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Combobox</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<script src="../../ui/jquery.ui.tooltip.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.custom-combobox {
+-		position: relative;
+-		display: inline-block;
+-	}
+-	.custom-combobox-toggle {
+-		position: absolute;
+-		top: 0;
+-		bottom: 0;
+-		margin-left: -1px;
+-		padding: 0;
+-		/* support: IE7 */
+-		*height: 1.7em;
+-		*top: 0.1em;
+-	}
+-	.custom-combobox-input {
+-		margin: 0;
+-		padding: 0.3em;
+-	}
+-	</style>
+-	<script>
+-	(function( $ ) {
+-		$.widget( "custom.combobox", {
+-			_create: function() {
+-				this.wrapper = $( "<span>" )
+-					.addClass( "custom-combobox" )
+-					.insertAfter( this.element );
+-
+-				this.element.hide();
+-				this._createAutocomplete();
+-				this._createShowAllButton();
+-			},
+-
+-			_createAutocomplete: function() {
+-				var selected = this.element.children( ":selected" ),
+-					value = selected.val() ? selected.text() : "";
+-
+-				this.input = $( "<input>" )
+-					.appendTo( this.wrapper )
+-					.val( value )
+-					.attr( "title", "" )
+-					.addClass( "custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left" )
+-					.autocomplete({
+-						delay: 0,
+-						minLength: 0,
+-						source: $.proxy( this, "_source" )
+-					})
+-					.tooltip({
+-						tooltipClass: "ui-state-highlight"
+-					});
+-
+-				this._on( this.input, {
+-					autocompleteselect: function( event, ui ) {
+-						ui.item.option.selected = true;
+-						this._trigger( "select", event, {
+-							item: ui.item.option
+-						});
+-					},
+-
+-					autocompletechange: "_removeIfInvalid"
+-				});
+-			},
+-
+-			_createShowAllButton: function() {
+-				var input = this.input,
+-					wasOpen = false;
+-
+-				$( "<a>" )
+-					.attr( "tabIndex", -1 )
+-					.attr( "title", "Show All Items" )
+-					.tooltip()
+-					.appendTo( this.wrapper )
+-					.button({
+-						icons: {
+-							primary: "ui-icon-triangle-1-s"
+-						},
+-						text: false
+-					})
+-					.removeClass( "ui-corner-all" )
+-					.addClass( "custom-combobox-toggle ui-corner-right" )
+-					.mousedown(function() {
+-						wasOpen = input.autocomplete( "widget" ).is( ":visible" );
+-					})
+-					.click(function() {
+-						input.focus();
+-
+-						// Close if already visible
+-						if ( wasOpen ) {
+-							return;
+-						}
+-
+-						// Pass empty string as value to search for, displaying all results
+-						input.autocomplete( "search", "" );
+-					});
+-			},
+-
+-			_source: function( request, response ) {
+-				var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
+-				response( this.element.children( "option" ).map(function() {
+-					var text = $( this ).text();
+-					if ( this.value && ( !request.term || matcher.test(text) ) )
+-						return {
+-							label: text,
+-							value: text,
+-							option: this
+-						};
+-				}) );
+-			},
+-
+-			_removeIfInvalid: function( event, ui ) {
+-
+-				// Selected an item, nothing to do
+-				if ( ui.item ) {
+-					return;
+-				}
+-
+-				// Search for a match (case-insensitive)
+-				var value = this.input.val(),
+-					valueLowerCase = value.toLowerCase(),
+-					valid = false;
+-				this.element.children( "option" ).each(function() {
+-					if ( $( this ).text().toLowerCase() === valueLowerCase ) {
+-						this.selected = valid = true;
+-						return false;
+-					}
+-				});
+-
+-				// Found a match, nothing to do
+-				if ( valid ) {
+-					return;
+-				}
+-
+-				// Remove invalid value
+-				this.input
+-					.val( "" )
+-					.attr( "title", value + " didn't match any item" )
+-					.tooltip( "open" );
+-				this.element.val( "" );
+-				this._delay(function() {
+-					this.input.tooltip( "close" ).attr( "title", "" );
+-				}, 2500 );
+-				this.input.data( "ui-autocomplete" ).term = "";
+-			},
+-
+-			_destroy: function() {
+-				this.wrapper.remove();
+-				this.element.show();
+-			}
+-		});
+-	})( jQuery );
+-
+-	$(function() {
+-		$( "#combobox" ).combobox();
+-		$( "#toggle" ).click(function() {
+-			$( "#combobox" ).toggle();
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label>Your preferred programming language: </label>
+-	<select id="combobox">
+-		<option value="">Select one...</option>
+-		<option value="ActionScript">ActionScript</option>
+-		<option value="AppleScript">AppleScript</option>
+-		<option value="Asp">Asp</option>
+-		<option value="BASIC">BASIC</option>
+-		<option value="C">C</option>
+-		<option value="C++">C++</option>
+-		<option value="Clojure">Clojure</option>
+-		<option value="COBOL">COBOL</option>
+-		<option value="ColdFusion">ColdFusion</option>
+-		<option value="Erlang">Erlang</option>
+-		<option value="Fortran">Fortran</option>
+-		<option value="Groovy">Groovy</option>
+-		<option value="Haskell">Haskell</option>
+-		<option value="Java">Java</option>
+-		<option value="JavaScript">JavaScript</option>
+-		<option value="Lisp">Lisp</option>
+-		<option value="Perl">Perl</option>
+-		<option value="PHP">PHP</option>
+-		<option value="Python">Python</option>
+-		<option value="Ruby">Ruby</option>
+-		<option value="Scala">Scala</option>
+-		<option value="Scheme">Scheme</option>
+-	</select>
+-</div>
+-<button id="toggle">Show underlying select</button>
+-
+-<div class="demo-description">
+-<p>A custom widget built by composition of Autocomplete and Button. You can either type something into the field to get filtered suggestions based on your input, or use the button to get the full list of selections.</p>
+-<p>The input is read from an existing select-element for progressive enhancement, passed to Autocomplete with a customized source-option.</p>
+-<p>This is not a supported or even complete widget. Its purely for demoing what autocomplete can do with a bit of customization. <a href="http://www.learningjquery.com/2010/06/a-jquery-ui-combobox-under-the-hood">For a detailed explanation of how the widget works, check out this Learning jQuery article.</a></p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/maxheight.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/maxheight.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/maxheight.html	(revision 15488)
+@@ -1,71 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Scrollable results</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-autocomplete {
+-		max-height: 100px;
+-		overflow-y: auto;
+-		/* prevent horizontal scrollbar */
+-		overflow-x: hidden;
+-	}
+-	/* IE 6 doesn't support max-height
+-	 * we use height instead, but this forces the menu to always be this tall
+-	 */
+-	* html .ui-autocomplete {
+-		height: 100px;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		var availableTags = [
+-			"ActionScript",
+-			"AppleScript",
+-			"Asp",
+-			"BASIC",
+-			"C",
+-			"C++",
+-			"Clojure",
+-			"COBOL",
+-			"ColdFusion",
+-			"Erlang",
+-			"Fortran",
+-			"Groovy",
+-			"Haskell",
+-			"Java",
+-			"JavaScript",
+-			"Lisp",
+-			"Perl",
+-			"PHP",
+-			"Python",
+-			"Ruby",
+-			"Scala",
+-			"Scheme"
+-		];
+-		$( "#tags" ).autocomplete({
+-			source: availableTags
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label for="tags">Tags: </label>
+-	<input id="tags">
+-</div>
+-
+-<div class="demo-description">
+-<p>When displaying a long list of options, you can simply set the max-height for the autocomplete menu to prevent the menu from growing too large. Try typing "a" or "s" above to get a long list of results that you can scroll through.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/custom-data.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/custom-data.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/custom-data.html	(revision 15488)
+@@ -1,90 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Custom data and display</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#project-label {
+-		display: block;
+-		font-weight: bold;
+-		margin-bottom: 1em;
+-	}
+-	#project-icon {
+-		float: left;
+-		height: 32px;
+-		width: 32px;
+-	}
+-	#project-description {
+-		margin: 0;
+-		padding: 0;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		var projects = [
+-			{
+-				value: "jquery",
+-				label: "jQuery",
+-				desc: "the write less, do more, JavaScript library",
+-				icon: "jquery_32x32.png"
+-			},
+-			{
+-				value: "jquery-ui",
+-				label: "jQuery UI",
+-				desc: "the official user interface library for jQuery",
+-				icon: "jqueryui_32x32.png"
+-			},
+-			{
+-				value: "sizzlejs",
+-				label: "Sizzle JS",
+-				desc: "a pure-JavaScript CSS selector engine",
+-				icon: "sizzlejs_32x32.png"
+-			}
+-		];
+-
+-		$( "#project" ).autocomplete({
+-			minLength: 0,
+-			source: projects,
+-			focus: function( event, ui ) {
+-				$( "#project" ).val( ui.item.label );
+-				return false;
+-			},
+-			select: function( event, ui ) {
+-				$( "#project" ).val( ui.item.label );
+-				$( "#project-id" ).val( ui.item.value );
+-				$( "#project-description" ).html( ui.item.desc );
+-				$( "#project-icon" ).attr( "src", "images/" + ui.item.icon );
+-
+-				return false;
+-			}
+-		})
+-		.data( "ui-autocomplete" )._renderItem = function( ul, item ) {
+-			return $( "<li>" )
+-				.append( "<a>" + item.label + "<br>" + item.desc + "</a>" )
+-				.appendTo( ul );
+-		};
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="project-label">Select a project (type "j" for a start):</div>
+-<img id="project-icon" src="images/transparent_1x1.png" class="ui-state-default" alt="">
+-<input id="project">
+-<input type="hidden" id="project-id">
+-<p id="project-description"></p>
+-
+-<div class="demo-description">
+-<p>You can use your own custom data formats and displays by simply overriding the default focus and select actions.</p>
+-<p>Try typing "j" to get a list of projects or just press the down arrow.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/folding.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/folding.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/folding.html	(revision 15488)
+@@ -1,56 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Accent folding</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		var names = [ "Jörn Zaefferer", "Scott González", "John Resig" ];
+-
+-		var accentMap = {
+-			"á": "a",
+-			"ö": "o"
+-		};
+-		var normalize = function( term ) {
+-			var ret = "";
+-			for ( var i = 0; i < term.length; i++ ) {
+-				ret += accentMap[ term.charAt(i) ] || term.charAt(i);
+-			}
+-			return ret;
+-		};
+-
+-		$( "#developer" ).autocomplete({
+-			source: function( request, response ) {
+-				var matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
+-				response( $.grep( names, function( value ) {
+-					value = value.label || value.value || value;
+-					return matcher.test( value ) || matcher.test( normalize( value ) );
+-				}) );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<form>
+-	<label for="developer">Developer: </label>
+-	<input id="developer">
+-	</form>
+-</div>
+-
+-<div class="demo-description">
+-<p>The autocomplete field uses a custom source option which will match results that have accented characters even when the text field doesn't contain accented characters. However if the you type in accented characters in the text field it is smart enough not to show results that aren't accented.</p>
+-<p>Try typing "Jo" to see "John" and "Jörn", then type "Jö" to see only "Jörn".</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-jsonp.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-jsonp.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-jsonp.html	(revision 15488)
+@@ -1,82 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Remote JSONP datasource</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-autocomplete-loading {
+-		background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
+-	}
+-	#city { width: 25em; }
+-	</style>
+-	<script>
+-	$(function() {
+-		function log( message ) {
+-			$( "<div>" ).text( message ).prependTo( "#log" );
+-			$( "#log" ).scrollTop( 0 );
+-		}
+-
+-		$( "#city" ).autocomplete({
+-			source: function( request, response ) {
+-				$.ajax({
+-					url: "http://ws.geonames.org/searchJSON",
+-					dataType: "jsonp",
+-					data: {
+-						featureClass: "P",
+-						style: "full",
+-						maxRows: 12,
+-						name_startsWith: request.term
+-					},
+-					success: function( data ) {
+-						response( $.map( data.geonames, function( item ) {
+-							return {
+-								label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
+-								value: item.name
+-							}
+-						}));
+-					}
+-				});
+-			},
+-			minLength: 2,
+-			select: function( event, ui ) {
+-				log( ui.item ?
+-					"Selected: " + ui.item.label :
+-					"Nothing selected, input was " + this.value);
+-			},
+-			open: function() {
+-				$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
+-			},
+-			close: function() {
+-				$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label for="city">Your city: </label>
+-	<input id="city">
+-	Powered by <a href="http://geonames.org">geonames.org</a>
+-</div>
+-
+-<div class="ui-widget" style="margin-top:2em; font-family:Arial">
+-	Result:
+-	<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
+-</div>
+-
+-<div class="demo-description">
+-<p>The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are cities, displayed when at least two characters are entered into the field.</p>
+-<p>In this case, the datasource is the <a href="http://geonames.org">geonames.org webservice</a>. While only the city name itself ends up in the input after selecting an element, more info is displayed in the suggestions to help find the right entry. That data is also available in callbacks, as illustrated by the Result area below the input.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/default.html	(revision 15488)
+@@ -1,58 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		var availableTags = [
+-			"ActionScript",
+-			"AppleScript",
+-			"Asp",
+-			"BASIC",
+-			"C",
+-			"C++",
+-			"Clojure",
+-			"COBOL",
+-			"ColdFusion",
+-			"Erlang",
+-			"Fortran",
+-			"Groovy",
+-			"Haskell",
+-			"Java",
+-			"JavaScript",
+-			"Lisp",
+-			"Perl",
+-			"PHP",
+-			"Python",
+-			"Ruby",
+-			"Scala",
+-			"Scheme"
+-		];
+-		$( "#tags" ).autocomplete({
+-			source: availableTags
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label for="tags">Tags: </label>
+-	<input id="tags">
+-</div>
+-
+-<div class="demo-description">
+-<p>The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are tags for programming languages, give "ja" (for Java or JavaScript) a try.</p>
+-<p>The datasource is a simple JavaScript array, provided to the widget using the source-option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple-remote.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple-remote.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple-remote.html	(revision 15488)
+@@ -1,80 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Multiple, remote</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-autocomplete-loading {
+-		background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		function split( val ) {
+-			return val.split( /,\s*/ );
+-		}
+-		function extractLast( term ) {
+-			return split( term ).pop();
+-		}
+-
+-		$( "#birds" )
+-			// don't navigate away from the field on tab when selecting an item
+-			.bind( "keydown", function( event ) {
+-				if ( event.keyCode === $.ui.keyCode.TAB &&
+-						$( this ).data( "ui-autocomplete" ).menu.active ) {
+-					event.preventDefault();
+-				}
+-			})
+-			.autocomplete({
+-				source: function( request, response ) {
+-					$.getJSON( "search.php", {
+-						term: extractLast( request.term )
+-					}, response );
+-				},
+-				search: function() {
+-					// custom minLength
+-					var term = extractLast( this.value );
+-					if ( term.length < 2 ) {
+-						return false;
+-					}
+-				},
+-				focus: function() {
+-					// prevent value inserted on focus
+-					return false;
+-				},
+-				select: function( event, ui ) {
+-					var terms = split( this.value );
+-					// remove the current input
+-					terms.pop();
+-					// add the selected item
+-					terms.push( ui.item.value );
+-					// add placeholder to get the comma-and-space at the end
+-					terms.push( "" );
+-					this.value = terms.join( ", " );
+-					return false;
+-				}
+-			});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label for="birds">Birds: </label>
+-	<input id="birds" size="50">
+-</div>
+-
+-<div class="demo-description">
+-<p>Usage: Enter at least two characters to get bird name suggestions. Select a value to continue adding more names.</p>
+-<p>This is an example showing how to use the source-option along with some events to enable autocompleting multiple values into a single field.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/categories.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/categories.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/categories.html	(revision 15488)
+@@ -1,67 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Categories</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-autocomplete-category {
+-		font-weight: bold;
+-		padding: .2em .4em;
+-		margin: .8em 0 .2em;
+-		line-height: 1.5;
+-	}
+-	</style>
+-	<script>
+-	$.widget( "custom.catcomplete", $.ui.autocomplete, {
+-		_renderMenu: function( ul, items ) {
+-			var that = this,
+-				currentCategory = "";
+-			$.each( items, function( index, item ) {
+-				if ( item.category != currentCategory ) {
+-					ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
+-					currentCategory = item.category;
+-				}
+-				that._renderItemData( ul, item );
+-			});
+-		}
+-	});
+-	</script>
+-	<script>
+-	$(function() {
+-		var data = [
+-			{ label: "anders", category: "" },
+-			{ label: "andreas", category: "" },
+-			{ label: "antal", category: "" },
+-			{ label: "annhhx10", category: "Products" },
+-			{ label: "annk K12", category: "Products" },
+-			{ label: "annttop C13", category: "Products" },
+-			{ label: "anders andersson", category: "People" },
+-			{ label: "andreas andersson", category: "People" },
+-			{ label: "andreas johnson", category: "People" }
+-		];
+-
+-		$( "#search" ).catcomplete({
+-			delay: 0,
+-			source: data
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<label for="search">Search: </label>
+-<input id="search">
+-
+-<div class="demo-description">
+-<p>A categorized search result. Try typing "a" or "n".</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/london.xml
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/london.xml	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/london.xml	(revision 15488)
+@@ -1,114 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<geonames style="MEDIUM">
+-<totalResultsCount>6987</totalResultsCount>
+-<geoname>
+-<name>London</name>
+-<lat>51.5084152563931</lat>
+-<lng>-0.125532746315002</lng>
+-<geonameId>2643743</geonameId>
+-<countryCode>GB</countryCode>
+-<countryName>United Kingdom</countryName>
+-
+-<fcl>P</fcl>
+-<fcode>PPLC</fcode>
+-</geoname>
+-<geoname>
+-<name>London</name>
+-<lat>42.983389283</lat>
+-<lng>-81.233042387</lng>
+-<geonameId>6058560</geonameId>
+-<countryCode>CA</countryCode>
+-<countryName>Canada</countryName>
+-
+-<fcl>P</fcl>
+-<fcode>PPL</fcode>
+-</geoname>
+-<geoname>
+-<name>East London</name>
+-<lat>-33.0152850934643</lat>
+-<lng>27.9116249084473</lng>
+-<geonameId>1006984</geonameId>
+-<countryCode>ZA</countryCode>
+-<countryName>South Africa</countryName>
+-
+-<fcl>P</fcl>
+-<fcode>PPL</fcode>
+-</geoname>
+-<geoname>
+-<name>City</name>
+-<lat>51.5133363996235</lat>
+-<lng>-0.0890064239501953</lng>
+-<geonameId>2643744</geonameId>
+-<countryCode>GB</countryCode>
+-<countryName>United Kingdom</countryName>
+-
+-<fcl>A</fcl>
+-<fcode>ADM2</fcode>
+-</geoname>
+-<geoname>
+-<name>London</name>
+-<lat>37.1289771</lat>
+-<lng>-84.0832646</lng>
+-<geonameId>4298960</geonameId>
+-<countryCode>US</countryCode>
+-<countryName>United States</countryName>
+-
+-<fcl>P</fcl>
+-<fcode>PPL</fcode>
+-</geoname>
+-<geoname>
+-<name>The Tower of London</name>
+-<lat>51.5082349601834</lat>
+-<lng>-0.0763034820556641</lng>
+-<geonameId>6286786</geonameId>
+-<countryCode>GB</countryCode>
+-<countryName>United Kingdom</countryName>
+-
+-<fcl>S</fcl>
+-<fcode>CSTL</fcode>
+-</geoname>
+-<geoname>
+-<name>London Reefs</name>
+-<lat>8.85</lat>
+-<lng>112.5333333</lng>
+-<geonameId>1879967</geonameId>
+-<countryCode>  </countryCode>
+-<countryName>  </countryName>
+-
+-<fcl>U</fcl>
+-<fcode>RFSU</fcode>
+-</geoname>
+-<geoname>
+-<name>Greater London</name>
+-<lat>51.5</lat>
+-<lng>-0.1666667</lng>
+-<geonameId>2648110</geonameId>
+-<countryCode>GB</countryCode>
+-<countryName>United Kingdom</countryName>
+-
+-<fcl>A</fcl>
+-<fcode>ADM2</fcode>
+-</geoname>
+-<geoname>
+-<name>London</name>
+-<lat>46.1666667</lat>
+-<lng>6.0166667</lng>
+-<geonameId>2661811</geonameId>
+-<countryCode>CH</countryCode>
+-<countryName>Switzerland</countryName>
+-
+-<fcl>H</fcl>
+-<fcode>STM</fcode>
+-</geoname>
+-<geoname>
+-<name>London Borough of Islington</name>
+-<lat>51.5333333</lat>
+-<lng>-0.1333333</lng>
+-<geonameId>3333156</geonameId>
+-<countryCode>GB</countryCode>
+-<countryName>United Kingdom</countryName>
+-
+-<fcl>A</fcl>
+-<fcode>ADM2</fcode>
+-</geoname>
+-</geonames>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/search.php
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/search.php	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/search.php	(revision 15488)
+@@ -1,590 +0,0 @@
+-<?php
+-
+-sleep( 3 );
+-// no term passed - just exit early with no response
+-if (empty($_GET['term'])) exit ;
+-$q = strtolower($_GET["term"]);
+-// remove slashes if they were magically added
+-if (get_magic_quotes_gpc()) $q = stripslashes($q);
+-
+-$items = array(
+-"Great Bittern"=>"Botaurus stellaris",
+-"Little Grebe"=>"Tachybaptus ruficollis",
+-"Black-necked Grebe"=>"Podiceps nigricollis",
+-"Little Bittern"=>"Ixobrychus minutus",
+-"Black-crowned Night Heron"=>"Nycticorax nycticorax",
+-"Purple Heron"=>"Ardea purpurea",
+-"White Stork"=>"Ciconia ciconia",
+-"Spoonbill"=>"Platalea leucorodia",
+-"Red-crested Pochard"=>"Netta rufina",
+-"Common Eider"=>"Somateria mollissima",
+-"Red Kite"=>"Milvus milvus",
+-"Hen Harrier"=>"Circus cyaneus",
+-"Montagu`s Harrier"=>"Circus pygargus",
+-"Black Grouse"=>"Tetrao tetrix",
+-"Grey Partridge"=>"Perdix perdix",
+-"Spotted Crake"=>"Porzana porzana",
+-"Corncrake"=>"Crex crex",
+-"Common Crane"=>"Grus grus",
+-"Avocet"=>"Recurvirostra avosetta",
+-"Stone Curlew"=>"Burhinus oedicnemus",
+-"Common Ringed Plover"=>"Charadrius hiaticula",
+-"Kentish Plover"=>"Charadrius alexandrinus",
+-"Ruff"=>"Philomachus pugnax",
+-"Common Snipe"=>"Gallinago gallinago",
+-"Black-tailed Godwit"=>"Limosa limosa",
+-"Common Redshank"=>"Tringa totanus",
+-"Sandwich Tern"=>"Sterna sandvicensis",
+-"Common Tern"=>"Sterna hirundo",
+-"Arctic Tern"=>"Sterna paradisaea",
+-"Little Tern"=>"Sternula albifrons",
+-"Black Tern"=>"Chlidonias niger",
+-"Barn Owl"=>"Tyto alba",
+-"Little Owl"=>"Athene noctua",
+-"Short-eared Owl"=>"Asio flammeus",
+-"European Nightjar"=>"Caprimulgus europaeus",
+-"Common Kingfisher"=>"Alcedo atthis",
+-"Eurasian Hoopoe"=>"Upupa epops",
+-"Eurasian Wryneck"=>"Jynx torquilla",
+-"European Green Woodpecker"=>"Picus viridis",
+-"Crested Lark"=>"Galerida cristata",
+-"White-headed Duck"=>"Oxyura leucocephala",
+-"Pale-bellied Brent Goose"=>"Branta hrota",
+-"Tawny Pipit"=>"Anthus campestris",
+-"Whinchat"=>"Saxicola rubetra",
+-"European Stonechat"=>"Saxicola rubicola",
+-"Northern Wheatear"=>"Oenanthe oenanthe",
+-"Savi`s Warbler"=>"Locustella luscinioides",
+-"Sedge Warbler"=>"Acrocephalus schoenobaenus",
+-"Great Reed Warbler"=>"Acrocephalus arundinaceus",
+-"Bearded Reedling"=>"Panurus biarmicus",
+-"Red-backed Shrike"=>"Lanius collurio",
+-"Great Grey Shrike"=>"Lanius excubitor",
+-"Woodchat Shrike"=>"Lanius senator",
+-"Common Raven"=>"Corvus corax",
+-"Yellowhammer"=>"Emberiza citrinella",
+-"Ortolan Bunting"=>"Emberiza hortulana",
+-"Corn Bunting"=>"Emberiza calandra",
+-"Great Cormorant"=>"Phalacrocorax carbo",
+-"Hawfinch"=>"Coccothraustes coccothraustes",
+-"Common Shelduck"=>"Tadorna tadorna",
+-"Bluethroat"=>"Luscinia svecica",
+-"Grey Heron"=>"Ardea cinerea",
+-"Barn Swallow"=>"Hirundo rustica",
+-"Hooded Crow"=>"Corvus cornix",
+-"Dunlin"=>"Calidris alpina",
+-"Eurasian Pied Flycatcher"=>"Ficedula hypoleuca",
+-"Eurasian Nuthatch"=>"Sitta europaea",
+-"Short-toed Tree Creeper"=>"Certhia brachydactyla",
+-"Wood Lark"=>"Lullula arborea",
+-"Tree Pipit"=>"Anthus trivialis",
+-"Eurasian Hobby"=>"Falco subbuteo",
+-"Marsh Warbler"=>"Acrocephalus palustris",
+-"Wood Sandpiper"=>"Tringa glareola",
+-"Tawny Owl"=>"Strix aluco",
+-"Lesser Whitethroat"=>"Sylvia curruca",
+-"Barnacle Goose"=>"Branta leucopsis",
+-"Common Goldeneye"=>"Bucephala clangula",
+-"Western Marsh Harrier"=>"Circus aeruginosus",
+-"Common Buzzard"=>"Buteo buteo",
+-"Sanderling"=>"Calidris alba",
+-"Little Gull"=>"Larus minutus",
+-"Eurasian Magpie"=>"Pica pica",
+-"Willow Warbler"=>"Phylloscopus trochilus",
+-"Wood Warbler"=>"Phylloscopus sibilatrix",
+-"Great Crested Grebe"=>"Podiceps cristatus",
+-"Eurasian Jay"=>"Garrulus glandarius",
+-"Common Redstart"=>"Phoenicurus phoenicurus",
+-"Blue-headed Wagtail"=>"Motacilla flava",
+-"Common Swift"=>"Apus apus",
+-"Marsh Tit"=>"Poecile palustris",
+-"Goldcrest"=>"Regulus regulus",
+-"European Golden Plover"=>"Pluvialis apricaria",
+-"Eurasian Bullfinch"=>"Pyrrhula pyrrhula",
+-"Common Whitethroat"=>"Sylvia communis",
+-"Meadow Pipit"=>"Anthus pratensis",
+-"Greylag Goose"=>"Anser anser",
+-"Spotted Flycatcher"=>"Muscicapa striata",
+-"European Greenfinch"=>"Carduelis chloris",
+-"Common Greenshank"=>"Tringa nebularia",
+-"Great Spotted Woodpecker"=>"Dendrocopos major",
+-"Greater Canada Goose"=>"Branta canadensis",
+-"Mistle Thrush"=>"Turdus viscivorus",
+-"Great Black-backed Gull"=>"Larus marinus",
+-"Goosander"=>"Mergus merganser",
+-"Great Egret"=>"Casmerodius albus",
+-"Northern Goshawk"=>"Accipiter gentilis",
+-"Dunnock"=>"Prunella modularis",
+-"Stock Dove"=>"Columba oenas",
+-"Common Wood Pigeon"=>"Columba palumbus",
+-"Eurasian Woodcock"=>"Scolopax rusticola",
+-"House Sparrow"=>"Passer domesticus",
+-"Common House Martin"=>"Delichon urbicum",
+-"Red Knot"=>"Calidris canutus",
+-"Western Jackdaw"=>"Corvus monedula",
+-"Brambling"=>"Fringilla montifringilla",
+-"Northern Lapwing"=>"Vanellus vanellus",
+-"European Reed Warbler"=>"Acrocephalus scirpaceus",
+-"Lesser Black-backed Gull"=>"Larus fuscus",
+-"Little Egret"=>"Egretta garzetta",
+-"Little Stint"=>"Calidris minuta",
+-"Common Linnet"=>"Carduelis cannabina",
+-"Mute Swan"=>"Cygnus olor",
+-"Common Cuckoo"=>"Cuculus canorus",
+-"Black-headed Gull"=>"Larus ridibundus",
+-"Greater White-fronted Goose"=>"Anser albifrons",
+-"Great Tit"=>"Parus major",
+-"Redwing"=>"Turdus iliacus",
+-"Gadwall"=>"Anas strepera",
+-"Fieldfare"=>"Turdus pilaris",
+-"Tufted Duck"=>"Aythya fuligula",
+-"Crested Tit"=>"Lophophanes cristatus",
+-"Willow Tit"=>"Poecile montanus",
+-"Eurasian Coot"=>"Fulica atra",
+-"Common Blackbird"=>"Turdus merula",
+-"Smew"=>"Mergus albellus",
+-"Common Sandpiper"=>"Actitis hypoleucos",
+-"Sand Martin"=>"Riparia riparia",
+-"Purple Sandpiper"=>"Calidris maritima",
+-"Northern Pintail"=>"Anas acuta",
+-"Blue Tit"=>"Cyanistes caeruleus",
+-"European Goldfinch"=>"Carduelis carduelis",
+-"Eurasian Whimbrel"=>"Numenius phaeopus",
+-"Common Reed Bunting"=>"Emberiza schoeniclus",
+-"Eurasian Tree Sparrow"=>"Passer montanus",
+-"Rook"=>"Corvus frugilegus",
+-"European Robin"=>"Erithacus rubecula",
+-"Bar-tailed Godwit"=>"Limosa lapponica",
+-"Dark-bellied Brent Goose"=>"Branta bernicla",
+-"Eurasian Oystercatcher"=>"Haematopus ostralegus",
+-"Eurasian Siskin"=>"Carduelis spinus",
+-"Northern Shoveler"=>"Anas clypeata",
+-"Eurasian Wigeon"=>"Anas penelope",
+-"Eurasian Sparrow Hawk"=>"Accipiter nisus",
+-"Icterine Warbler"=>"Hippolais icterina",
+-"Common Starling"=>"Sturnus vulgaris",
+-"Long-tailed Tit"=>"Aegithalos caudatus",
+-"Ruddy Turnstone"=>"Arenaria interpres",
+-"Mew Gull"=>"Larus canus",
+-"Common Pochard"=>"Aythya ferina",
+-"Common Chiffchaff"=>"Phylloscopus collybita",
+-"Greater Scaup"=>"Aythya marila",
+-"Common Kestrel"=>"Falco tinnunculus",
+-"Garden Warbler"=>"Sylvia borin",
+-"Eurasian Collared Dove"=>"Streptopelia decaocto",
+-"Eurasian Skylark"=>"Alauda arvensis",
+-"Common Chaffinch"=>"Fringilla coelebs",
+-"Common Moorhen"=>"Gallinula chloropus",
+-"Water Pipit"=>"Anthus spinoletta",
+-"Mallard"=>"Anas platyrhynchos",
+-"Winter Wren"=>"Troglodytes troglodytes",
+-"Common Teal"=>"Anas crecca",
+-"Green Sandpiper"=>"Tringa ochropus",
+-"White Wagtail"=>"Motacilla alba",
+-"Eurasian Curlew"=>"Numenius arquata",
+-"Song Thrush"=>"Turdus philomelos",
+-"European Herring Gull"=>"Larus argentatus",
+-"Grey Plover"=>"Pluvialis squatarola",
+-"Carrion Crow"=>"Corvus corone",
+-"Coal Tit"=>"Periparus ater",
+-"Spotted Redshank"=>"Tringa erythropus",
+-"Blackcap"=>"Sylvia atricapilla",
+-"Egyptian Vulture"=>"Neophron percnopterus",
+-"Razorbill"=>"Alca torda",
+-"Alpine Swift"=>"Apus melba",
+-"Long-legged Buzzard"=>"Buteo rufinus",
+-"Audouin`s Gull"=>"Larus audouinii",
+-"Balearic Shearwater"=>"Puffinus mauretanicus",
+-"Upland Sandpiper"=>"Bartramia longicauda",
+-"Greater Spotted Eagle"=>"Aquila clanga",
+-"Ring Ouzel"=>"Turdus torquatus",
+-"Yellow-browed Warbler"=>"Phylloscopus inornatus",
+-"Blue Rock Thrush"=>"Monticola solitarius",
+-"Buff-breasted Sandpiper"=>"Tryngites subruficollis",
+-"Jack Snipe"=>"Lymnocryptes minimus",
+-"White-rumped Sandpiper"=>"Calidris fuscicollis",
+-"Ruddy Shelduck"=>"Tadorna ferruginea",
+-"Cetti's Warbler"=>"Cettia cetti",
+-"Citrine Wagtail"=>"Motacilla citreola",
+-"Roseate Tern"=>"Sterna dougallii",
+-"Black-legged Kittiwake"=>"Rissa tridactyla",
+-"Pygmy Cormorant"=>"Phalacrocorax pygmeus",
+-"Booted Eagle"=>"Aquila pennata",
+-"Lesser White-fronted Goose"=>"Anser erythropus",
+-"Little Bunting"=>"Emberiza pusilla",
+-"Eleonora's Falcon"=>"Falco eleonorae",
+-"European Serin"=>"Serinus serinus",
+-"Twite"=>"Carduelis flavirostris",
+-"Yellow-legged Gull"=>"Larus michahellis",
+-"Gyr Falcon"=>"Falco rusticolus",
+-"Greenish Warbler"=>"Phylloscopus trochiloides",
+-"Red-necked Phalarope"=>"Phalaropus lobatus",
+-"Mealy Redpoll"=>"Carduelis flammea",
+-"Glaucous Gull"=>"Larus hyperboreus",
+-"Great Skua"=>"Stercorarius skua",
+-"Great Bustard"=>"Otis tarda",
+-"Velvet Scoter"=>"Melanitta fusca",
+-"Pine Grosbeak"=>"Pinicola enucleator",
+-"House Crow"=>"Corvus splendens",
+-"Hume`s Leaf Warbler"=>"Phylloscopus humei",
+-"Great Northern Loon"=>"Gavia immer",
+-"Long-tailed Duck"=>"Clangula hyemalis",
+-"Lapland Longspur"=>"Calcarius lapponicus",
+-"Northern Gannet"=>"Morus bassanus",
+-"Eastern Imperial Eagle"=>"Aquila heliaca",
+-"Little Auk"=>"Alle alle",
+-"Lesser Spotted Woodpecker"=>"Dendrocopos minor",
+-"Iceland Gull"=>"Larus glaucoides",
+-"Parasitic Jaeger"=>"Stercorarius parasiticus",
+-"Bewick`s Swan"=>"Cygnus bewickii",
+-"Little Bustard"=>"Tetrax tetrax",
+-"Little Crake"=>"Porzana parva",
+-"Baillon`s Crake"=>"Porzana pusilla",
+-"Long-tailed Jaeger"=>"Stercorarius longicaudus",
+-"King Eider"=>"Somateria spectabilis",
+-"Greater Short-toed Lark"=>"Calandrella brachydactyla",
+-"Houbara Bustard"=>"Chlamydotis undulata",
+-"Curlew Sandpiper"=>"Calidris ferruginea",
+-"Common Crossbill"=>"Loxia curvirostra",
+-"European Shag"=>"Phalacrocorax aristotelis",
+-"Horned Grebe"=>"Podiceps auritus",
+-"Common Quail"=>"Coturnix coturnix",
+-"Bearded Vulture"=>"Gypaetus barbatus",
+-"Lanner Falcon"=>"Falco biarmicus",
+-"Middle Spotted Woodpecker"=>"Dendrocopos medius",
+-"Pomarine Jaeger"=>"Stercorarius pomarinus",
+-"Red-breasted Merganser"=>"Mergus serrator",
+-"Eurasian Black Vulture"=>"Aegypius monachus",
+-"Eurasian Dotterel"=>"Charadrius morinellus",
+-"Common Nightingale"=>"Luscinia megarhynchos",
+-"Northern willow warbler"=>"Phylloscopus trochilus acredula",
+-"Manx Shearwater"=>"Puffinus puffinus",
+-"Northern Fulmar"=>"Fulmarus glacialis",
+-"Eurasian Eagle Owl"=>"Bubo bubo",
+-"Orphean Warbler"=>"Sylvia hortensis",
+-"Melodious Warbler"=>"Hippolais polyglotta",
+-"Pallas's Leaf Warbler"=>"Phylloscopus proregulus",
+-"Atlantic Puffin"=>"Fratercula arctica",
+-"Black-throated Loon"=>"Gavia arctica",
+-"Bohemian Waxwing"=>"Bombycilla garrulus",
+-"Marsh Sandpiper"=>"Tringa stagnatilis",
+-"Great Snipe"=>"Gallinago media",
+-"Squacco Heron"=>"Ardeola ralloides",
+-"Long-eared Owl"=>"Asio otus",
+-"Caspian Tern"=>"Hydroprogne caspia",
+-"Red-breasted Goose"=>"Branta ruficollis",
+-"Red-throated Loon"=>"Gavia stellata",
+-"Common Rosefinch"=>"Carpodacus erythrinus",
+-"Red-footed Falcon"=>"Falco vespertinus",
+-"Ross's Goose"=>"Anser rossii",
+-"Red Phalarope"=>"Phalaropus fulicarius",
+-"Pied Wagtail"=>"Motacilla yarrellii",
+-"Rose-coloured Starling"=>"Sturnus roseus",
+-"Rough-legged Buzzard"=>"Buteo lagopus",
+-"Saker Falcon"=>"Falco cherrug",
+-"European Roller"=>"Coracias garrulus",
+-"Short-toed Eagle"=>"Circaetus gallicus",
+-"Peregrine Falcon"=>"Falco peregrinus",
+-"Merlin"=>"Falco columbarius",
+-"Snow Goose"=>"Anser caerulescens",
+-"Snowy Owl"=>"Bubo scandiacus",
+-"Snow Bunting"=>"Plectrophenax nivalis",
+-"Common Grasshopper Warbler"=>"Locustella naevia",
+-"Golden Eagle"=>"Aquila chrysaetos",
+-"Black-winged Stilt"=>"Himantopus himantopus",
+-"Steppe Eagle"=>"Aquila nipalensis",
+-"Pallid Harrier"=>"Circus macrourus",
+-"European Storm-petrel"=>"Hydrobates pelagicus",
+-"Horned Lark"=>"Eremophila alpestris",
+-"Eurasian Treecreeper"=>"Certhia familiaris",
+-"Taiga Bean Goose"=>"Anser fabalis",
+-"Temminck`s Stint"=>"Calidris temminckii",
+-"Terek Sandpiper"=>"Xenus cinereus",
+-"Tundra Bean Goose"=>"Anser serrirostris",
+-"European Turtle Dove"=>"Streptopelia turtur",
+-"Leach`s Storm-petrel"=>"Oceanodroma leucorhoa",
+-"Eurasian Griffon Vulture"=>"Gyps fulvus",
+-"Paddyfield Warbler"=>"Acrocephalus agricola",
+-"Osprey"=>"Pandion haliaetus",
+-"Firecrest"=>"Regulus ignicapilla",
+-"Water Rail"=>"Rallus aquaticus",
+-"European Honey Buzzard"=>"Pernis apivorus",
+-"Eurasian Golden Oriole"=>"Oriolus oriolus",
+-"Whooper Swan"=>"Cygnus cygnus",
+-"Two-barred Crossbill"=>"Loxia leucoptera",
+-"White-tailed Eagle"=>"Haliaeetus albicilla",
+-"Atlantic Murre"=>"Uria aalge",
+-"Garganey"=>"Anas querquedula",
+-"Black Redstart"=>"Phoenicurus ochruros",
+-"Common Scoter"=>"Melanitta nigra",
+-"Rock Pipit"=>"Anthus petrosus",
+-"Lesser Spotted Eagle"=>"Aquila pomarina",
+-"Cattle Egret"=>"Bubulcus ibis",
+-"White-winged Black Tern"=>"Chlidonias leucopterus",
+-"Black Stork"=>"Ciconia nigra",
+-"Mediterranean Gull"=>"Larus melanocephalus",
+-"Black Kite"=>"Milvus migrans",
+-"Yellow Wagtail"=>"Motacilla flavissima",
+-"Red-necked Grebe"=>"Podiceps grisegena",
+-"Gull-billed Tern"=>"Gelochelidon nilotica",
+-"Pectoral Sandpiper"=>"Calidris melanotos",
+-"Barred Warbler"=>"Sylvia nisoria",
+-"Red-throated Pipit"=>"Anthus cervinus",
+-"Grey Wagtail"=>"Motacilla cinerea",
+-"Richard`s Pipit"=>"Anthus richardi",
+-"Black Woodpecker"=>"Dryocopus martius",
+-"Little Ringed Plover"=>"Charadrius dubius",
+-"Whiskered Tern"=>"Chlidonias hybrida",
+-"Lesser Redpoll"=>"Carduelis cabaret",
+-"Pallas' Bunting"=>"Emberiza pallasi",
+-"Ferruginous Duck"=>"Aythya nyroca",
+-"Whistling Swan"=>"Cygnus columbianus",
+-"Black Brant"=>"Branta nigricans",
+-"Marbled Teal"=>"Marmaronetta angustirostris",
+-"Canvasback"=>"Aythya valisineria",
+-"Redhead"=>"Aythya americana",
+-"Lesser Scaup"=>"Aythya affinis",
+-"Steller`s Eider"=>"Polysticta stelleri",
+-"Spectacled Eider"=>"Somateria fischeri",
+-"Harlequin Duck"=>"Histronicus histrionicus",
+-"Black Scoter"=>"Melanitta americana",
+-"Surf Scoter"=>"Melanitta perspicillata",
+-"Barrow`s Goldeneye"=>"Bucephala islandica",
+-"Falcated Duck"=>"Anas falcata",
+-"American Wigeon"=>"Anas americana",
+-"Blue-winged Teal"=>"Anas discors",
+-"American Black Duck"=>"Anas rubripes",
+-"Baikal Teal"=>"Anas formosa",
+-"Green-Winged Teal"=>"Anas carolinensis",
+-"Hazel Grouse"=>"Bonasa bonasia",
+-"Rock Partridge"=>"Alectoris graeca",
+-"Red-legged Partridge"=>"Alectoris rufa",
+-"Yellow-billed Loon"=>"Gavia adamsii",
+-"Cory`s Shearwater"=>"Calonectris borealis",
+-"Madeiran Storm-Petrel"=>"Oceanodroma castro",
+-"Great White Pelican"=>"Pelecanus onocrotalus",
+-"Dalmatian Pelican"=>"Pelecanus crispus",
+-"American Bittern"=>"Botaurus lentiginosus",
+-"Glossy Ibis"=>"Plegadis falcinellus",
+-"Spanish Imperial Eagle"=>"Aquila adalberti",
+-"Lesser Kestrel"=>"Falco naumanni",
+-"Houbara Bustard"=>"Chlamydotis undulata",
+-"Crab-Plover"=>"Dromas ardeola",
+-"Cream-coloured Courser"=>"Cursorius cursor",
+-"Collared Pratincole"=>"Glareola pratincola",
+-"Black-winged Pratincole"=>"Glareola nordmanni",
+-"Killdeer"=>"Charadrius vociferus",
+-"Lesser Sand Plover"=>"Charadrius mongolus",
+-"Greater Sand Plover"=>"Charadrius leschenaultii",
+-"Caspian Plover"=>"Charadrius asiaticus",
+-"American Golden Plover"=>"Pluvialis dominica",
+-"Pacific Golden Plover"=>"Pluvialis fulva",
+-"Sharp-tailed Sandpiper"=>"Calidris acuminata",
+-"Broad-billed Sandpiper"=>"Limicola falcinellus",
+-"Spoon-Billed Sandpiper"=>"Eurynorhynchus pygmaeus",
+-"Short-Billed Dowitcher"=>"Limnodromus griseus",
+-"Long-billed Dowitcher"=>"Limnodromus scolopaceus",
+-"Hudsonian Godwit"=>"Limosa haemastica",
+-"Little Curlew"=>"Numenius minutus",
+-"Lesser Yellowlegs"=>"Tringa flavipes",
+-"Wilson`s Phalarope"=>"Phalaropus tricolor",
+-"Pallas`s Gull"=>"Larus ichthyaetus",
+-"Laughing Gull"=>"Larus atricilla",
+-"Franklin`s Gull"=>"Larus pipixcan",
+-"Bonaparte`s Gull"=>"Larus philadelphia",
+-"Ring-billed Gull"=>"Larus delawarensis",
+-"American Herring Gull"=>"Larus smithsonianus",
+-"Caspian Gull"=>"Larus cachinnans",
+-"Ivory Gull"=>"Pagophila eburnea",
+-"Royal Tern"=>"Sterna maxima",
+-"Brünnich`s Murre"=>"Uria lomvia",
+-"Crested Auklet"=>"Aethia cristatella",
+-"Parakeet Auklet"=>"Cyclorrhynchus psittacula",
+-"Tufted Puffin"=>"Lunda cirrhata",
+-"Laughing Dove"=>"Streptopelia senegalensis",
+-"Great Spotted Cuckoo"=>"Clamator glandarius",
+-"Great Grey Owl"=>"Strix nebulosa",
+-"Tengmalm`s Owl"=>"Aegolius funereus",
+-"Red-Necked Nightjar"=>"Caprimulgus ruficollis",
+-"Chimney Swift"=>"Chaetura pelagica",
+-"Green Bea-Eater"=>"Merops orientalis",
+-"Grey-headed Woodpecker"=>"Picus canus",
+-"Lesser Short-Toed Lark"=>"Calandrella rufescens",
+-"Eurasian Crag Martin"=>"Hirundo rupestris",
+-"Red-rumped Swallow"=>"Cecropis daurica",
+-"Blyth`s Pipit"=>"Anthus godlewskii",
+-"Pechora Pipit"=>"Anthus gustavi",
+-"Grey-headed Wagtail"=>"Motacilla thunbergi",
+-"Yellow-Headed Wagtail"=>"Motacilla lutea",
+-"White-throated Dipper"=>"Cinclus cinclus",
+-"Rufous-Tailed Scrub Robin"=>"Cercotrichas galactotes",
+-"Thrush Nightingale"=>"Luscinia luscinia",
+-"White-throated Robin"=>"Irania gutturalis",
+-"Caspian Stonechat"=>"Saxicola maura variegata",
+-"Western Black-eared Wheatear"=>"Oenanthe hispanica",
+-"Rufous-tailed Rock Thrush"=>"Monticola saxatilis",
+-"Red-throated Thrush/Black-throated"=>"Turdus ruficollis",
+-"American Robin"=>"Turdus migratorius",
+-"Zitting Cisticola"=>"Cisticola juncidis",
+-"Lanceolated Warbler"=>"Locustella lanceolata",
+-"River Warbler"=>"Locustella fluviatilis",
+-"Blyth`s Reed Warbler"=>"Acrocephalus dumetorum",
+-"Caspian Reed Warbler"=>"Acrocephalus fuscus",
+-"Aquatic Warbler"=>"Acrocephalus paludicola",
+-"Booted Warbler"=>"Acrocephalus caligatus",
+-"Marmora's Warbler"=>"Sylvia sarda",
+-"Dartford Warbler"=>"Sylvia undata",
+-"Subalpine Warbler"=>"Sylvia cantillans",
+-"Ménétries's Warbler"=>"Sylvia mystacea",
+-"Rüppel's Warbler"=>"Sylvia rueppelli",
+-"Asian Desert Warbler"=>"Sylvia nana",
+-"Western Orphean Warbler"=>"Sylvia hortensis hortensis",
+-"Arctic Warbler"=>"Phylloscopus borealis",
+-"Radde`s Warbler"=>"Phylloscopus schwarzi",
+-"Western Bonelli`s Warbler"=>"Phylloscopus bonelli",
+-"Red-breasted Flycatcher"=>"Ficedula parva",
+-"Eurasian Penduline Tit"=>"Remiz pendulinus",
+-"Daurian Shrike"=>"Lanius isabellinus",
+-"Long-Tailed Shrike"=>"Lanius schach",
+-"Lesser Grey Shrike"=>"Lanius minor",
+-"Southern Grey Shrike"=>"Lanius meridionalis",
+-"Masked Shrike"=>"Lanius nubicus",
+-"Spotted Nutcracker"=>"Nucifraga caryocatactes",
+-"Daurian Jackdaw"=>"Corvus dauuricus",
+-"Purple-Backed Starling"=>"Sturnus sturninus",
+-"Red-Fronted Serin"=>"Serinus pusillus",
+-"Arctic Redpoll"=>"Carduelis hornemanni",
+-"Scottish Crossbill"=>"Loxia scotica",
+-"Parrot Crossbill"=>"Loxia pytyopsittacus",
+-"Black-faced Bunting"=>"Emberiza spodocephala",
+-"Pink-footed Goose"=>"Anser brachyrhynchus",
+-"Black-winged Kite"=>"Elanus caeruleus",
+-"European Bee-eater"=>"Merops apiaster",
+-"Sabine`s Gull"=>"Larus sabini",
+-"Sooty Shearwater"=>"Puffinus griseus",
+-"Lesser Canada Goose"=>"Branta hutchinsii",
+-"Ring-necked Duck"=>"Aythya collaris",
+-"Greater Flamingo"=>"Phoenicopterus roseus",
+-"Iberian Chiffchaff"=>"Phylloscopus ibericus",
+-"Ashy-headed Wagtail"=>"Motacilla cinereocapilla",
+-"Stilt Sandpiper"=>"Calidris himantopus",
+-"Siberian Stonechat"=>"Saxicola maurus",
+-"Greater Yellowlegs"=>"Tringa melanoleuca",
+-"Forster`s Tern"=>"Sterna forsteri",
+-"Dusky Warbler"=>"Phylloscopus fuscatus",
+-"Cirl Bunting"=>"Emberiza cirlus",
+-"Olive-backed Pipit"=>"Anthus hodgsoni",
+-"Sociable Lapwing"=>"Vanellus gregarius",
+-"Spotted Sandpiper"=>"Actitis macularius",
+-"Baird`s Sandpiper"=>"Calidris bairdii",
+-"Rustic Bunting"=>"Emberiza rustica",
+-"Yellow-browed Bunting"=>"Emberiza chrysophrys",
+-"Great Shearwater"=>"Puffinus gravis",
+-"Bonelli`s Eagle"=>"Aquila fasciata",
+-"Calandra Lark"=>"Melanocorypha calandra",
+-"Sardinian Warbler"=>"Sylvia melanocephala",
+-"Ross's Gull"=>"Larus roseus",
+-"Yellow-Breasted Bunting"=>"Emberiza aureola",
+-"Pine Bunting"=>"Emberiza leucocephalos",
+-"Black Guillemot"=>"Cepphus grylle",
+-"Pied-billed Grebe"=>"Podilymbus podiceps",
+-"Soft-plumaged Petrel"=>"Pterodroma mollis",
+-"Bulwer's Petrel"=>"Bulweria bulwerii",
+-"White-Faced Storm-Petrel"=>"Pelagodroma marina",
+-"Pallas’s Fish Eagle"=>"Haliaeetus leucoryphus",
+-"Sandhill Crane"=>"Grus canadensis",
+-"Macqueen’s Bustard"=>"Chlamydotis macqueenii",
+-"White-tailed Lapwing"=>"Vanellus leucurus",
+-"Great Knot"=>"Calidris tenuirostris",
+-"Semipalmated Sandpiper"=>"Calidris pusilla",
+-"Red-necked Stint"=>"Calidris ruficollis",
+-"Slender-billed Curlew"=>"Numenius tenuirostris",
+-"Bridled Tern"=>"Onychoprion anaethetus",
+-"Pallas’s Sandgrouse"=>"Syrrhaptes paradoxus",
+-"European Scops Owl"=>"Otus scops",
+-"Northern Hawk Owl"=>"Surnia ulula",
+-"White-Throated Needletail"=>"Hirundapus caudacutus",
+-"Belted Kingfisher"=>"Ceryle alcyon",
+-"Blue-cheeked Bee-eater"=>"Merops persicus",
+-"Black-headed Wagtail"=>"Motacilla feldegg",
+-"Northern Mockingbird"=>"Mimus polyglottos",
+-"Alpine Accentor"=>"Prunella collaris",
+-"Red-flanked Bluetail"=>"Tarsiger cyanurus",
+-"Isabelline Wheatear"=>"Oenanthe isabellina",
+-"Pied Wheatear"=>"Oenanthe pleschanka",
+-"Eastern Black-eared Wheatear"=>"Oenanthe melanoleuca",
+-"Desert Wheatear"=>"Oenanthe deserti",
+-"White`s Thrush"=>"Zoothera aurea",
+-"Siberian Thrush"=>"Zoothera sibirica",
+-"Eyebrowed Thrush"=>"Turdus obscurus",
+-"Dusky Thrush"=>"Turdus eunomus",
+-"Black-throated Thrush"=>"Turdus atrogularis",
+-"Pallas`s Grasshopper Warbler"=>"Locustella certhiola",
+-"Spectacled Warbler"=>"Sylvia conspicillata",
+-"Two-barred Warbler"=>"Phylloscopus plumbeitarsus",
+-"Eastern Bonelli’s Warbler"=>"Phylloscopus orientalis",
+-"Collared Flycatcher"=>"Ficedula albicollis",
+-"Wallcreeper"=>"Tichodroma muraria",
+-"Turkestan Shrike"=>"Lanius phoenicuroides",
+-"Steppe Grey Shrike"=>"Lanius pallidirostris",
+-"Spanish Sparrow"=>"Passer hispaniolensis",
+-"Red-eyed Vireo"=>"Vireo olivaceus",
+-"Myrtle Warbler"=>"Dendroica coronata",
+-"White-crowned Sparrow"=>"Zonotrichia leucophrys",
+-"White-throated Sparrow"=>"Zonotrichia albicollis",
+-"Cretzschmar`s Bunting"=>"Emberiza caesia",
+-"Chestnut Bunting"=>"Emberiza rutila",
+-"Red-headed Bunting"=>"Emberiza bruniceps",
+-"Black-headed Bunting"=>"Emberiza melanocephala",
+-"Indigo Bunting"=>"Passerina cyanea",
+-"Balearic Woodchat Shrike"=>"Lanius senator badius",
+-"Demoiselle Crane"=>"Grus virgo",
+-"Chough"=>"Pyrrhocorax pyrrhocorax",
+-"Red-Billed Chough"=>"Pyrrhocorax graculus",
+-"Elegant Tern"=>"Sterna elegans",
+-"Chukar"=>"Alectoris chukar",
+-"Yellow-Billed Cuckoo"=>"Coccyzus americanus",
+-"American Sandwich Tern"=>"Sterna sandvicensis acuflavida",
+-"Olive-Tree Warbler"=>"Hippolais olivetorum",
+-"Eastern Olivaceous Warbler"=>"Acrocephalus pallidus",
+-"Indian Cormorant"=>"Phalacrocorax fuscicollis",
+-"Spur-Winged Lapwing"=>"Vanellus spinosus",
+-"Yelkouan Shearwater"=>"Puffinus yelkouan",
+-"Trumpeter Finch"=>"Bucanetes githagineus",
+-"Red Grouse"=>"Lagopus scoticus",
+-"Rock Ptarmigan"=>"Lagopus mutus",
+-"Long-Tailed Cormorant"=>"Phalacrocorax africanus",
+-"Double-crested Cormorant"=>"Phalacrocorax auritus",
+-"Magnificent Frigatebird"=>"Fregata magnificens",
+-"Naumann's Thrush"=>"Turdus naumanni",
+-"Oriental Pratincole"=>"Glareola maldivarum",
+-"Bufflehead"=>"Bucephala albeola",
+-"Snowfinch"=>"Montifrigilla nivalis",
+-"Ural owl"=>"Strix uralensis",
+-"Spanish Wagtail"=>"Motacilla iberiae",
+-"Song Sparrow"=>"Melospiza melodia",
+-"Rock Bunting"=>"Emberiza cia",
+-"Siberian Rubythroat"=>"Luscinia calliope",
+-"Pallid Swift"=>"Apus pallidus",
+-"Eurasian Pygmy Owl"=>"Glaucidium passerinum",
+-"Madeira Little Shearwater"=>"Puffinus baroli",
+-"House Finch"=>"Carpodacus mexicanus",
+-"Green Heron"=>"Butorides virescens",
+-"Solitary Sandpiper"=>"Tringa solitaria",
+-"Heuglin's Gull"=>"Larus heuglini"
+-);
+-
+-
+-$result = array();
+-foreach ($items as $key=>$value) {
+-	if (strpos(strtolower($key), $q) !== false) {
+-		array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key)));
+-	}
+-	if (count($result) > 11)
+-		break;
+-}
+-
+-// json_encode is available in PHP 5.2 and above, or you can install a PECL module in earlier versions
+-echo json_encode($result);
+-
+-?>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple.html	(revision 15488)
+@@ -1,93 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Multiple values</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		var availableTags = [
+-			"ActionScript",
+-			"AppleScript",
+-			"Asp",
+-			"BASIC",
+-			"C",
+-			"C++",
+-			"Clojure",
+-			"COBOL",
+-			"ColdFusion",
+-			"Erlang",
+-			"Fortran",
+-			"Groovy",
+-			"Haskell",
+-			"Java",
+-			"JavaScript",
+-			"Lisp",
+-			"Perl",
+-			"PHP",
+-			"Python",
+-			"Ruby",
+-			"Scala",
+-			"Scheme"
+-		];
+-		function split( val ) {
+-			return val.split( /,\s*/ );
+-		}
+-		function extractLast( term ) {
+-			return split( term ).pop();
+-		}
+-
+-		$( "#tags" )
+-			// don't navigate away from the field on tab when selecting an item
+-			.bind( "keydown", function( event ) {
+-				if ( event.keyCode === $.ui.keyCode.TAB &&
+-						$( this ).data( "ui-autocomplete" ).menu.active ) {
+-					event.preventDefault();
+-				}
+-			})
+-			.autocomplete({
+-				minLength: 0,
+-				source: function( request, response ) {
+-					// delegate back to autocomplete, but extract the last term
+-					response( $.ui.autocomplete.filter(
+-						availableTags, extractLast( request.term ) ) );
+-				},
+-				focus: function() {
+-					// prevent value inserted on focus
+-					return false;
+-				},
+-				select: function( event, ui ) {
+-					var terms = split( this.value );
+-					// remove the current input
+-					terms.pop();
+-					// add the selected item
+-					terms.push( ui.item.value );
+-					// add placeholder to get the comma-and-space at the end
+-					terms.push( "" );
+-					this.value = terms.join( ", " );
+-					return false;
+-				}
+-			});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label for="tags">Tag programming languages: </label>
+-	<input id="tags" size="50">
+-</div>
+-
+-<div class="demo-description">
+-<p>Usage: Type something, eg. "j" to see suggestions for tagging with programming languages. Select a value, then continue typing to add more.</p>
+-<p>This is an example showing how to use the source-option along with some events to enable autocompleting multiple values into a single field.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote.html	(revision 15488)
+@@ -1,55 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Remote datasource</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-autocomplete-loading {
+-		background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		function log( message ) {
+-			$( "<div>" ).text( message ).prependTo( "#log" );
+-			$( "#log" ).scrollTop( 0 );
+-		}
+-
+-		$( "#birds" ).autocomplete({
+-			source: "search.php",
+-			minLength: 2,
+-			select: function( event, ui ) {
+-				log( ui.item ?
+-					"Selected: " + ui.item.value + " aka " + ui.item.id :
+-					"Nothing selected, input was " + this.value );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label for="birds">Birds: </label>
+-	<input id="birds">
+-</div>
+-
+-<div class="ui-widget" style="margin-top:2em; font-family:Arial">
+-	Result:
+-	<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
+-</div>
+-
+-<div class="demo-description">
+-<p>The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are bird names, displayed when at least two characters are entered into the field.</p>
+-<p>The datasource is a server-side script which returns JSON data, specified via a simple URL for the source-option. In addition, the minLength-option is set to 2 to avoid queries that would return too many results and the select-event is used to display some feedback.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/xml.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/xml.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/xml.html	(revision 15488)
+@@ -1,66 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - XML data parsed once</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
+-	</style>
+-	<script>
+-	$(function() {
+-		function log( message ) {
+-			$( "<div/>" ).text( message ).prependTo( "#log" );
+-			$( "#log" ).attr( "scrollTop", 0 );
+-		}
+-
+-		$.ajax({
+-			url: "london.xml",
+-			dataType: "xml",
+-			success: function( xmlResponse ) {
+-				var data = $( "geoname", xmlResponse ).map(function() {
+-					return {
+-						value: $( "name", this ).text() + ", " +
+-							( $.trim( $( "countryName", this ).text() ) || "(unknown country)" ),
+-						id: $( "geonameId", this ).text()
+-					};
+-				}).get();
+-				$( "#birds" ).autocomplete({
+-					source: data,
+-					minLength: 0,
+-					select: function( event, ui ) {
+-						log( ui.item ?
+-							"Selected: " + ui.item.value + ", geonameId: " + ui.item.id :
+-							"Nothing selected, input was " + this.value );
+-					}
+-				});
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label for="birds">London matches: </label>
+-	<input id="birds" />
+-</div>
+-
+-<div class="ui-widget" style="margin-top:2em; font-family:Arial">
+-	Result:
+-	<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
+-</div>
+-
+-<div class="demo-description">
+-<p>This demo shows how to retrieve some XML data, parse it using jQuery's methods, then provide it to the autocomplete as the datasource.</p>
+-<p>This should also serve as a reference on how to parse a remote XML datasource - the parsing would just happen for each request within the source-callback.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jqueryui_32x32.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/sizzlejs_32x32.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jquery_32x32.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/ui-anim_basic_16x16.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/transparent_1x1.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-with-cache.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-with-cache.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-with-cache.html	(revision 15488)
+@@ -1,52 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete - Remote with caching</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.autocomplete.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-autocomplete-loading {
+-		background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		var cache = {};
+-		$( "#birds" ).autocomplete({
+-			minLength: 2,
+-			source: function( request, response ) {
+-				var term = request.term;
+-				if ( term in cache ) {
+-					response( cache[ term ] );
+-					return;
+-				}
+-
+-				$.getJSON( "search.php", request, function( data, status, xhr ) {
+-					cache[ term ] = data;
+-					response( data );
+-				});
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget">
+-	<label for="birds">Birds: </label>
+-	<input id="birds">
+-</div>
+-
+-<div class="demo-description">
+-<p>The Autocomplete widgets provides suggestions while you type into the field. Here the suggestions are bird names, displayed when at least two characters are entered into the field.</p>
+-<p>Similar to the remote datasource demo, though this adds some local caching to improve performance. The cache here saves just one query, and could be extended to cache multiple values, one for each term.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/index.html	(revision 15488)
+@@ -1,25 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Autocomplete Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="remote.html">Remote datasource</a></li>
+-	<li><a href="remote-with-cache.html">Remote with caching</a></li>
+-	<li><a href="remote-jsonp.html">Remote JSONP datasource</a></li>
+-	<li><a href="maxheight.html">Scrollable results</a></li>
+-	<li><a href="combobox.html">Combobox</a></li>
+-	<li><a href="custom-data.html">Custom data and display</a></li>
+-	<li><a href="xml.html">XML data parsed once</a></li>
+-	<li><a href="categories.html">Categories</a></li>
+-	<li><a href="folding.html">Accent folding</a></li>
+-	<li><a href="multiple.html">Multiple values</a></li>
+-	<li><a href="multiple-remote.html">Multiple, remote</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/index.html	(revision 15488)
+@@ -1,16 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Selectable Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="serialize.html">Serialize</a></li>
+-	<li><a href="display-grid.html">Display as grid</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/serialize.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/serialize.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/serialize.html	(revision 15488)
+@@ -1,54 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Selectable - Serialize</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.selectable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-
+-	<style>
+-	#feedback { font-size: 1.4em; }
+-	#selectable .ui-selecting { background: #FECA40; }
+-	#selectable .ui-selected { background: #F39814; color: white; }
+-	#selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
+-	#selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#selectable" ).selectable({
+-			stop: function() {
+-				var result = $( "#select-result" ).empty();
+-				$( ".ui-selected", this ).each(function() {
+-					var index = $( "#selectable li" ).index( this );
+-					result.append( " #" + ( index + 1 ) );
+-				});
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p id="feedback">
+-<span>You've selected:</span> <span id="select-result">none</span>.
+-</p>
+-
+-<ol id="selectable">
+-	<li class="ui-widget-content">Item 1</li>
+-	<li class="ui-widget-content">Item 2</li>
+-	<li class="ui-widget-content">Item 3</li>
+-	<li class="ui-widget-content">Item 4</li>
+-	<li class="ui-widget-content">Item 5</li>
+-	<li class="ui-widget-content">Item 6</li>
+-</ol>
+-
+-<div class="demo-description">
+-<p>Write a function that fires on the <code>stop</code> event to collect the index values of selected items.  Present values as feedback, or pass as a data string.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/display-grid.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/display-grid.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/display-grid.html	(revision 15488)
+@@ -1,48 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Selectable - Display as grid</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.selectable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-
+-	<style>
+-	#feedback { font-size: 1.4em; }
+-	#selectable .ui-selecting { background: #FECA40; }
+-	#selectable .ui-selected { background: #F39814; color: white; }
+-	#selectable { list-style-type: none; margin: 0; padding: 0; width: 450px; }
+-	#selectable li { margin: 3px; padding: 1px; float: left; width: 100px; height: 80px; font-size: 4em; text-align: center; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#selectable" ).selectable();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<ol id="selectable">
+-	<li class="ui-state-default">1</li>
+-	<li class="ui-state-default">2</li>
+-	<li class="ui-state-default">3</li>
+-	<li class="ui-state-default">4</li>
+-	<li class="ui-state-default">5</li>
+-	<li class="ui-state-default">6</li>
+-	<li class="ui-state-default">7</li>
+-	<li class="ui-state-default">8</li>
+-	<li class="ui-state-default">9</li>
+-	<li class="ui-state-default">10</li>
+-	<li class="ui-state-default">11</li>
+-	<li class="ui-state-default">12</li>
+-</ol>
+-
+-<div class="demo-description">
+-<p>To arrange selectable items as a grid, give them identical dimensions and float them using CSS.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/selectable/default.html	(revision 15488)
+@@ -1,43 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Selectable - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.selectable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-
+-	<style>
+-	#feedback { font-size: 1.4em; }
+-	#selectable .ui-selecting { background: #FECA40; }
+-	#selectable .ui-selected { background: #F39814; color: white; }
+-	#selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
+-	#selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#selectable" ).selectable();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<ol id="selectable">
+-	<li class="ui-widget-content">Item 1</li>
+-	<li class="ui-widget-content">Item 2</li>
+-	<li class="ui-widget-content">Item 3</li>
+-	<li class="ui-widget-content">Item 4</li>
+-	<li class="ui-widget-content">Item 5</li>
+-	<li class="ui-widget-content">Item 6</li>
+-	<li class="ui-widget-content">Item 7</li>
+-</ol>
+-
+-<div class="demo-description">
+-<p>Enable a DOM element (or group of elements) to be selectable. Draw a box with your cursor to select items. Hold down the Ctrl key to make multiple non-adjacent selections. </p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/menu/icons.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/menu/icons.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/menu/icons.html	(revision 15488)
+@@ -1,44 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Menu - Icons</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#menu" ).menu();
+-	});
+-	</script>
+-	<style>
+-	.ui-menu { width: 150px; }
+-	</style>
+-</head>
+-<body>
+-
+-<ul id="menu">
+-	<li><a href="#"><span class="ui-icon ui-icon-disk"></span>Save</a></li>
+-	<li><a href="#"><span class="ui-icon ui-icon-zoomin"></span>Zoom In</a></li>
+-	<li><a href="#"><span class="ui-icon ui-icon-zoomout"></span>Zoom Out</a></li>
+-	<li class="ui-state-disabled"><a href="#"><span class="ui-icon ui-icon-print"></span>Print...</a></li>
+-	<li>
+-		<a href="#">Playback</a>
+-		<ul>
+-			<li><a href="#"><span class="ui-icon ui-icon-seek-start"></span>Prev</a></li>
+-			<li><a href="#"><span class="ui-icon ui-icon-stop"></span>Stop</a></li>
+-			<li><a href="#"><span class="ui-icon ui-icon-play"></span>Play</a></li>
+-			<li><a href="#"><span class="ui-icon ui-icon-seek-end"></span>Next</a></li>
+-		</ul>
+-	</li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>A menu with the default configuration, showing how to use a menu with icons.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/menu/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/menu/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/menu/default.html	(revision 15488)
+@@ -1,67 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Menu - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#menu" ).menu();
+-	});
+-	</script>
+-	<style>
+-	.ui-menu { width: 150px; }
+-	</style>
+-</head>
+-<body>
+-
+-<ul id="menu">
+-	<li class="ui-state-disabled"><a href="#">Aberdeen</a></li>
+-	<li><a href="#">Ada</a></li>
+-	<li><a href="#">Adamsville</a></li>
+-	<li><a href="#">Addyston</a></li>
+-	<li>
+-		<a href="#">Delphi</a>
+-		<ul>
+-			<li class="ui-state-disabled"><a href="#">Ada</a></li>
+-			<li><a href="#">Saarland</a></li>
+-			<li><a href="#">Salzburg</a></li>
+-		</ul>
+-	</li>
+-	<li><a href="#">Saarland</a></li>
+-	<li>
+-		<a href="#">Salzburg</a>
+-		<ul>
+-			<li>
+-				<a href="#">Delphi</a>
+-				<ul>
+-					<li><a href="#">Ada</a></li>
+-					<li><a href="#">Saarland</a></li>
+-					<li><a href="#">Salzburg</a></li>
+-				</ul>
+-			</li>
+-			<li>
+-				<a href="#">Delphi</a>
+-				<ul>
+-					<li><a href="#">Ada</a></li>
+-					<li><a href="#">Saarland</a></li>
+-					<li><a href="#">Salzburg</a></li>
+-				</ul>
+-			</li>
+-			<li><a href="#">Perch</a></li>
+-		</ul>
+-	</li>
+-	<li class="ui-state-disabled"><a href="#">Amesville</a></li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>A menu with the default configuration, disabled items and nested menus. A list is transformed, adding theming, mouse and keyboard navigation support. Try to tab to the menu then use the cursor keys to navigate.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/menu/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/menu/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/menu/index.html	(revision 15488)
+@@ -1,15 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Menu Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="icons.html">Icons</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/cycler.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/cycler.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/cycler.html	(revision 15488)
+@@ -1,107 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Position - Image Cycler</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	body {
+-		margin: 0;
+-	}
+-	#container {
+-		overflow: hidden;
+-		position: relative;
+-		height: 400px;
+-	}
+-
+-	img {
+-		position: absolute;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		// TODO refactor into a widget and get rid of these plugin methods
+-		$.fn.left = function( using ) {
+-			return this.position({
+-				my: "right middle",
+-				at: "left+25 middle",
+-				of: "#container",
+-				collision: "none",
+-				using: using
+-			});
+-		};
+-		$.fn.right = function( using ) {
+-			return this.position({
+-				my: "left middle",
+-				at: "right-25 middle",
+-				of: "#container",
+-				collision: "none",
+-				using: using
+-			});
+-		};
+-		$.fn.center = function( using ) {
+-			return this.position({
+-				my: "center middle",
+-				at: "center middle",
+-				of: "#container",
+-				using: using
+-			});
+-		};
+-
+-		$( "img:eq(0)" ).left();
+-		$( "img:eq(1)" ).center();
+-		$( "img:eq(2)" ).right();
+-
+-		function animate( to ) {
+-			$( this ).stop( true, false ).animate( to );
+-		}
+-		function next( event ) {
+-			event.preventDefault();
+-			$( "img:eq(2)" ).center( animate );
+-			$( "img:eq(1)" ).left( animate )
+-			$( "img:eq(0)" ).right().appendTo( "#container" );
+-		}
+-		function previous( event ) {
+-			event.preventDefault();
+-			$( "img:eq(0)" ).center( animate );
+-			$( "img:eq(1)" ).right( animate );
+-			$( "img:eq(2)" ).left().prependTo( "#container" );
+-		}
+-		$( "#previous" ).click( previous );
+-		$( "#next" ).click( next );
+-
+-		$( "img" ).click(function( event ) {
+-			$( "img" ).index( this ) === 0 ? previous( event ) : next( event );
+-		});
+-
+-		$( window ).resize(function() {
+-			$( "img:eq(0)" ).left( animate );
+-			$( "img:eq(1)" ).center( animate );
+-			$( "img:eq(2)" ).right( animate );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="container">
+-	<img src="images/earth.jpg" width="458" height="308" alt="earth">
+-	<img src="images/flight.jpg" width="512" height="307" alt="flight">
+-	<img src="images/rocket.jpg" width="300" height="353" alt="rocket">
+-
+-	<a id="previous" href="#">Previous</a>
+-	<a id="next" href="#">Next</a>
+-</div>
+-
+-<div class="demo-description">
+-<p>A photoviewer prototype using Position to place images at the center, left and right and cycle them.
+-<br>Use the links at the top to cycle, or click on the images on the left and right.
+-<br>Note how the images are repositioned when resizing the window.
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/flight.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/earth.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/images/rocket.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/default.html	(revision 15488)
+@@ -1,137 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Position - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#parent {
+-		width: 60%;
+-		height: 40px;
+-		margin: 10px auto;
+-		padding: 5px;
+-		border: 1px solid #777;
+-		background-color: #fbca93;
+-		text-align: center;
+-	}
+-	.positionable {
+-		position: absolute;
+-		display: block;
+-		right: 0;
+-		bottom: 0;
+-		background-color: #bcd5e6;
+-		text-align: center;
+-	}
+-	#positionable1 {
+-		width: 75px;
+-		height: 75px;
+-	}
+-	#positionable2 {
+-		width: 120px;
+-		height: 40px;
+-	}
+-	select, input {
+-		margin-left: 15px;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		function position() {
+-			$( ".positionable" ).position({
+-				of: $( "#parent" ),
+-				my: $( "#my_horizontal" ).val() + " " + $( "#my_vertical" ).val(),
+-				at: $( "#at_horizontal" ).val() + " " + $( "#at_vertical" ).val(),
+-				collision: $( "#collision_horizontal" ).val() + " " + $( "#collision_vertical" ).val()
+-			});
+-		}
+-
+-		$( ".positionable" ).css( "opacity", 0.5 );
+-
+-		$( "select, input" ).bind( "click keyup change", position );
+-
+-		$( "#parent" ).draggable({
+-			drag: position
+-		});
+-
+-		position();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="parent">
+-	<p>
+-	This is the position parent element.
+-	</p>
+-</div>
+-
+-<div class="positionable" id="positionable1">
+-	<p>
+-	to position
+-	</p>
+-</div>
+-
+-<div class="positionable" id="positionable2">
+-	<p>
+-	to position 2
+-	</p>
+-</div>
+-
+-<div style="padding: 20px; margin-top: 75px;">
+-	position...
+-	<div style="padding-bottom: 20px;">
+-		<b>my:</b>
+-		<select id="my_horizontal">
+-			<option value="left">left</option>
+-			<option value="center">center</option>
+-			<option value="right">right</option>
+-		</select>
+-		<select id="my_vertical">
+-			<option value="top">top</option>
+-			<option value="middle">center</option>
+-			<option value="bottom">bottom</option>
+-		</select>
+-	</div>
+-	<div style="padding-bottom: 20px;">
+-		<b>at:</b>
+-		<select id="at_horizontal">
+-			<option value="left">left</option>
+-			<option value="center">center</option>
+-			<option value="right">right</option>
+-		</select>
+-		<select id="at_vertical">
+-			<option value="top">top</option>
+-			<option value="middle">center</option>
+-			<option value="bottom">bottom</option>
+-		</select>
+-	</div>
+-	<div style="padding-bottom: 20px;">
+-		<b>collision:</b>
+-		<select id="collision_horizontal">
+-			<option value="flip">flip</option>
+-			<option value="fit">fit</option>
+-			<option value="flipfit">flipfit</option>
+-			<option value="none">none</option>
+-		</select>
+-		<select id="collision_vertical">
+-			<option value="flip">flip</option>
+-			<option value="fit">fit</option>
+-			<option value="flipfit">flipfit</option>
+-			<option value="none">none</option>
+-		</select>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Use the form controls to configure the positioning, or drag the positioned element to modify its offset.
+-<br>Drag around the parent element to see collision detection in action.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/position/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/position/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/position/index.html	(revision 15488)
+@@ -1,15 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Position Demo</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="cycler.html">Cycling images</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-open.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/icon-docs-info.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/calendar.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/pbar-ani.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-closed.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on-tile.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/delay-start.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/delay-start.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/delay-start.html	(revision 15488)
+@@ -1,38 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Delay start</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable, #draggable2 { width: 120px; height: 120px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ distance: 20 });
+-		$( "#draggable2" ).draggable({ delay: 1000 });
+-		$( ".ui-draggable" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Only if you drag me by 20 pixels, the dragging will start</p>
+-</div>
+-
+-<div id="draggable2" class="ui-widget-content">
+-	<p>Regardless of the distance, you have to drag and wait for 1000ms before dragging starts</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Delay the start of dragging for a number of milliseconds with the <code>delay</code> option; prevent dragging until the cursor is held down and dragged a specifed number of pixels with the <code>distance</code> option. </p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/cursor-style.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/cursor-style.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/cursor-style.html	(revision 15488)
+@@ -1,42 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Cursor style</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable, #draggable2, #draggable3 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ cursor: "move", cursorAt: { top: 56, left: 56 } });
+-		$( "#draggable2" ).draggable({ cursor: "crosshair", cursorAt: { top: -5, left: -5 } });
+-		$( "#draggable3" ).draggable({ cursorAt: { bottom: 0 } });
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>I will always stick to the center (relative to the mouse)</p>
+-</div>
+-
+-<div id="draggable2" class="ui-widget-content">
+-	<p>My cursor is at left -5 and top -5</p>
+-</div>
+-
+-<div id="draggable3" class="ui-widget-content">
+-	<p>My cursor position is only controlled for the 'bottom' value</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Position the cursor while dragging the object. By default the cursor appears in the center of the dragged object; use the <code>cursorAt</code> option to specify another location relative to the draggable (specify a pixel value from the top, right, bottom, and/or left).  Customize the cursor's appearance by supplying the <code>cursor</code> option with a valid CSS cursor value: default, move, pointer, crosshair, etc.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/handle.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/handle.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/handle.html	(revision 15488)
+@@ -1,41 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Handles</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
+-	#draggable p { cursor: move; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ handle: "p" });
+-		$( "#draggable2" ).draggable({ cancel: "p.ui-widget-header" });
+-		$( "div, p" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p class="ui-widget-header">I can be dragged only by this handle</p>
+-</div>
+-
+-<div id="draggable2" class="ui-widget-content">
+-	<p>You can drag me around&hellip;</p>
+-	<p class="ui-widget-header">&hellip;but you can't drag me by this handle.</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Allow dragging only when the cursor is over a specific part of the draggable.  Use the <code>handle</code> option to specify the jQuery selector of an element (or group of elements) used to drag the object.</p>
+-<p>Or prevent dragging when the cursor is over a specific element (or group of elements) within the draggable.  Use the <code>cancel</code> option to specify a jQuery selector over which to "cancel" draggable functionality.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/sortable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/sortable.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/sortable.html	(revision 15488)
+@@ -1,50 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable + Sortable</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	ul { list-style-type: none; margin: 0; padding: 0; margin-bottom: 10px; }
+-	li { margin: 5px; padding: 5px; width: 150px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#sortable" ).sortable({
+-			revert: true
+-		});
+-		$( "#draggable" ).draggable({
+-			connectToSortable: "#sortable",
+-			helper: "clone",
+-			revert: "invalid"
+-		});
+-		$( "ul, li" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<ul>
+-	<li id="draggable" class="ui-state-highlight">Drag me down</li>
+-</ul>
+-
+-<ul id="sortable">
+-	<li class="ui-state-default">Item 1</li>
+-	<li class="ui-state-default">Item 2</li>
+-	<li class="ui-state-default">Item 3</li>
+-	<li class="ui-state-default">Item 4</li>
+-	<li class="ui-state-default">Item 5</li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>Draggables are built to interact seamlessly with <a href="http://jqueryui.com/sortable">sortables</a>.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/scroll.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/scroll.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/scroll.html	(revision 15488)
+@@ -1,44 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Auto-scroll</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable, #draggable2, #draggable3 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ scroll: true });
+-		$( "#draggable2" ).draggable({ scroll: true, scrollSensitivity: 100 });
+-		$( "#draggable3" ).draggable({ scroll: true, scrollSpeed: 100 });
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Scroll set to true, default settings</p>
+-</div>
+-
+-<div id="draggable2" class="ui-widget-content">
+-	<p>scrollSensitivity set to 100</p>
+-</div>
+-
+-<div id="draggable3" class="ui-widget-content">
+-	<p>scrollSpeed set to 100</p>
+-</div>
+-
+-<div style='height: 5000px; width: 1px;'></div>
+-
+-<div class="demo-description">
+-<p>Automatically scroll the document when the draggable is moved beyond the viewport. Set the <code>scroll</code> option to true to enable auto-scrolling, and fine-tune when scrolling is triggered and its speed with the <code>scrollSensitivity</code> and <code>scrollSpeed</code> options.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/snap-to.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/snap-to.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/snap-to.html	(revision 15488)
+@@ -1,61 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Snap to element or grid</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.draggable { width: 90px; height: 80px; padding: 5px; float: left; margin: 0 10px 10px 0; font-size: .9em; }
+-	.ui-widget-header p, .ui-widget-content p { margin: 0; }
+-	#snaptarget { height: 140px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ snap: true });
+-		$( "#draggable2" ).draggable({ snap: ".ui-widget-header" });
+-		$( "#draggable3" ).draggable({ snap: ".ui-widget-header", snapMode: "outer" });
+-		$( "#draggable4" ).draggable({ grid: [ 20,20 ] });
+-		$( "#draggable5" ).draggable({ grid: [ 80, 80 ] });
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="snaptarget" class="ui-widget-header">
+-	<p>I'm a snap target</p>
+-</div>
+-
+-<br style="clear:both" />
+-
+-<div id="draggable" class="draggable ui-widget-content">
+-	<p>Default (snap: true), snaps to all other draggable elements</p>
+-</div>
+-
+-<div id="draggable2" class="draggable ui-widget-content">
+-	<p>I only snap to the big box</p>
+-</div>
+-
+-<div id="draggable3" class="draggable ui-widget-content">
+-	<p>I only snap to the outer edges of the big box</p>
+-</div>
+-
+-<div id="draggable4" class="draggable ui-widget-content">
+-	<p>I snap to a 20 x 20 grid</p>
+-</div>
+-
+-<div id="draggable5" class="draggable ui-widget-content">
+-	<p>I snap to a 80 x 80 grid</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Snap the draggable to the inner or outer boundaries of a DOM element.  Use the <code>snap</code>, <code>snapMode</code> (inner, outer, both), and <code>snapTolerance</code> (distance in pixels the draggable must be from the element when snapping is invoked) options. </p>
+-<p>Or snap the draggable to a grid.  Set the dimensions of grid cells (height and width in pixels) with the <code>grid</code> option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/default.html	(revision 15488)
+@@ -1,32 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable { width: 150px; height: 150px; padding: 0.5em; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Drag me around</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Enable draggable functionality on any DOM element. Move the draggable object by clicking on it with the mouse and dragging it anywhere within the viewport.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/events.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/events.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/events.html	(revision 15488)
+@@ -1,70 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Events</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable { width: 16em; padding: 0 1em; }
+-	#draggable ul li { margin: 1em 0; padding: 0.5em 0; } * html #draggable ul li { height: 1%; }
+-	#draggable ul li span.ui-icon { float: left; }
+-	#draggable ul li span.count { font-weight: bold; }
+-	</style>
+-	<script>
+-	$(function() {
+-		var $start_counter = $( "#event-start" ),
+-			$drag_counter = $( "#event-drag" ),
+-			$stop_counter = $( "#event-stop" ),
+-			counts = [ 0, 0, 0 ];
+-
+-		$( "#draggable" ).draggable({
+-			start: function() {
+-				counts[ 0 ]++;
+-				updateCounterStatus( $start_counter, counts[ 0 ] );
+-			},
+-			drag: function() {
+-				counts[ 1 ]++;
+-				updateCounterStatus( $drag_counter, counts[ 1 ] );
+-			},
+-			stop: function() {
+-				counts[ 2 ]++;
+-				updateCounterStatus( $stop_counter, counts[ 2 ] );
+-			}
+-		});
+-
+-		function updateCounterStatus( $event_counter, new_count ) {
+-			// first update the status visually...
+-			if ( !$event_counter.hasClass( "ui-state-hover" ) ) {
+-				$event_counter.addClass( "ui-state-hover" )
+-					.siblings().removeClass( "ui-state-hover" );
+-			}
+-			// ...then update the numbers
+-			$( "span.count", $event_counter ).text( new_count );
+-		}
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget ui-widget-content">
+-
+-	<p>Drag me to trigger the chain of events.</p>
+-
+-	<ul class="ui-helper-reset">
+-		<li id="event-start" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-play"></span>"start" invoked <span class="count">0</span>x</li>
+-		<li id="event-drag" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-arrow-4"></span>"drag" invoked <span class="count">0</span>x</li>
+-		<li id="event-stop" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-stop"></span>"stop" invoked <span class="count">0</span>x</li>
+-	</ul>
+-</div>
+-
+-<div class="demo-description">
+-<p>Layer functionality onto the draggable using the <code>start</code>, <code>drag</code>, and <code>stop</code> events.  Start is fired at the start of the drag; drag during the drag; and stop when dragging stops.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/visual-feedback.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/visual-feedback.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/visual-feedback.html	(revision 15488)
+@@ -1,70 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Visual feedback</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable, #draggable2, #draggable3, #set div { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
+-	#draggable, #draggable2, #draggable3 { margin-bottom:20px; }
+-	#set { clear:both; float:left; width: 368px; height: 120px; }
+-	p { clear:both; margin:0; padding:1em 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ helper: "original" });
+-		$( "#draggable2" ).draggable({ opacity: 0.7, helper: "clone" });
+-		$( "#draggable3" ).draggable({
+-			cursor: "move",
+-			cursorAt: { top: -12, left: -20 },
+-			helper: function( event ) {
+-				return $( "<div class='ui-widget-header'>I'm a custom helper</div>" );
+-			}
+-		});
+-		$( "#set div" ).draggable({ stack: "#set div" });
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<h3 class="docs">With helpers:</h3>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Original</p>
+-</div>
+-
+-<div id="draggable2" class="ui-widget-content">
+-	<p>Semi-transparent clone</p>
+-</div>
+-
+-<div id="draggable3" class="ui-widget-content">
+-	<p>Custom helper (in combination with cursorAt)</p>
+-</div>
+-
+-<h3 class="docs">Stacked:</h3>
+-<div id="set">
+-	<div class="ui-widget-content">
+-		<p>We are draggables..</p>
+-	</div>
+-
+-	<div class="ui-widget-content">
+-		<p>..whose z-indexes are controlled automatically..</p>
+-	</div>
+-
+-	<div class="ui-widget-content">
+-		<p>..with the stack option.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Provide feedback to users as they drag an object in the form of a helper. The <code>helper</code> option accepts the values 'original' (the draggable object moves with the cursor), 'clone' (a duplicate of the draggable moves with the cursor), or a function that returns a DOM element (that element is shown near the cursor during drag). Control the helper's transparency with the <code>opacity</code> option.</p>
+-<p>To clarify which draggable is in play, bring the draggable in motion to front. Use the <code>zIndex</code> option to set a higher z-index for the helper, if in play, or use the <code>stack</code> option to ensure that the last item dragged will appear on top of others in the same group on drag stop.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/index.html	(revision 15488)
+@@ -1,24 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="events.html">Events</a></li>
+-	<li><a href="constrain-movement.html">Constrain movement</a></li>
+-	<li><a href="delay-start.html">Delay start</a></li>
+-	<li><a href="snap-to.html">Snap to element or grid</a></li>
+-	<li><a href="scroll.html">Auto-scroll</a></li>
+-	<li><a href="revert.html">Revert position</a></li>
+-	<li><a href="visual-feedback.html">Visual feedback</a></li>
+-	<li><a href="handle.html">Drag handle</a></li>
+-	<li><a href="cursor-style.html">Cursor style</a></li>
+-	<li><a href="sortable.html">Draggable + Sortable</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/revert.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/revert.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/revert.html	(revision 15488)
+@@ -1,37 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Revert position</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ revert: true });
+-		$( "#draggable2" ).draggable({ revert: true, helper: "clone" });
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Revert the original</p>
+-</div>
+-
+-<div id="draggable2" class="ui-widget-content">
+-	<p>Revert the helper</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Return the draggable (or it's helper) to its original location when dragging stops with the boolean <code>revert</code> option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/constrain-movement.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/constrain-movement.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/draggable/constrain-movement.html	(revision 15488)
+@@ -1,58 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Draggable - Constrain movement</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.draggable { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
+-	#draggable, #draggable2 { margin-bottom:20px; }
+-	#draggable { cursor: n-resize; }
+-	#draggable2 { cursor: e-resize; }
+-	#containment-wrapper { width: 95%; height:150px; border:2px solid #ccc; padding: 10px; }
+-	h3 { clear: left; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ axis: "y" });
+-		$( "#draggable2" ).draggable({ axis: "x" });
+-
+-		$( "#draggable3" ).draggable({ containment: "#containment-wrapper", scroll: false });
+-		$( "#draggable5" ).draggable({ containment: "parent" });
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<h3>Constrain movement along an axis:</h3>
+-
+-<div id="draggable" class="draggable ui-widget-content">
+-	<p>I can be dragged only vertically</p>
+-</div>
+-
+-<div id="draggable2" class="draggable ui-widget-content">
+-	<p>I can be dragged only horizontally</p>
+-</div>
+-
+-<h3>Or to within another DOM element:</h3>
+-<div id="containment-wrapper">
+-	<div id="draggable3" class="draggable ui-widget-content">
+-		<p>I'm contained within the box</p>
+-	</div>
+-
+-	<div class="draggable ui-widget-content">
+-		<p id="draggable5" class="ui-widget-header">I'm contained within my parent</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Constrain the movement of each draggable by defining the boundaries of the draggable area. Set the <code>axis</code> option to limit the draggable's path to the x- or y-axis, or use the <code>containment</code> option to specify a parent DOM element or a jQuery selector, like 'document.'</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/shopping-cart.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/shopping-cart.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/shopping-cart.html	(revision 15488)
+@@ -1,94 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Droppable - Shopping Cart Demo</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.droppable.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<script src="../../ui/jquery.ui.accordion.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	h1 { padding: .2em; margin: 0; }
+-	#products { float:left; width: 500px; margin-right: 2em; }
+-	#cart { width: 200px; float: left; margin-top: 1em; }
+-	/* style the list to maximize the droppable hitarea */
+-	#cart ol { margin: 0; padding: 1em 0 1em 3em; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#catalog" ).accordion();
+-		$( "#catalog li" ).draggable({
+-			appendTo: "body",
+-			helper: "clone"
+-		});
+-		$( "#cart ol" ).droppable({
+-			activeClass: "ui-state-default",
+-			hoverClass: "ui-state-hover",
+-			accept: ":not(.ui-sortable-helper)",
+-			drop: function( event, ui ) {
+-				$( this ).find( ".placeholder" ).remove();
+-				$( "<li></li>" ).text( ui.draggable.text() ).appendTo( this );
+-			}
+-		}).sortable({
+-			items: "li:not(.placeholder)",
+-			sort: function() {
+-				// gets added unintentionally by droppable interacting with sortable
+-				// using connectWithSortable fixes this, but doesn't allow you to customize active/hoverClass options
+-				$( this ).removeClass( "ui-state-default" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="products">
+-	<h1 class="ui-widget-header">Products</h1>
+-	<div id="catalog">
+-		<h2><a href="#">T-Shirts</a></h2>
+-		<div>
+-			<ul>
+-				<li>Lolcat Shirt</li>
+-				<li>Cheezeburger Shirt</li>
+-				<li>Buckit Shirt</li>
+-			</ul>
+-		</div>
+-		<h2><a href="#">Bags</a></h2>
+-		<div>
+-			<ul>
+-				<li>Zebra Striped</li>
+-				<li>Black Leather</li>
+-				<li>Alligator Leather</li>
+-			</ul>
+-		</div>
+-		<h2><a href="#">Gadgets</a></h2>
+-		<div>
+-			<ul>
+-				<li>iPhone</li>
+-				<li>iPod</li>
+-				<li>iPad</li>
+-			</ul>
+-		</div>
+-	</div>
+-</div>
+-
+-<div id="cart">
+-	<h1 class="ui-widget-header">Shopping Cart</h1>
+-	<div class="ui-widget-content">
+-		<ol>
+-			<li class="placeholder">Add your items here</li>
+-		</ol>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Demonstrate how to use an accordion to structure products into a catalog and make use of drag and drop for adding them to a shopping cart, where they are sortable.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/photo-manager.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/photo-manager.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/photo-manager.html	(revision 15488)
+@@ -1,182 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Droppable - Simple photo manager</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.droppable.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<script src="../../ui/jquery.ui.dialog.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#gallery { float: left; width: 65%; min-height: 12em; }
+-	.gallery.custom-state-active { background: #eee; }
+-	.gallery li { float: left; width: 96px; padding: 0.4em; margin: 0 0.4em 0.4em 0; text-align: center; }
+-	.gallery li h5 { margin: 0 0 0.4em; cursor: move; }
+-	.gallery li a { float: right; }
+-	.gallery li a.ui-icon-zoomin { float: left; }
+-	.gallery li img { width: 100%; cursor: move; }
+-
+-	#trash { float: right; width: 32%; min-height: 18em; padding: 1%; }
+-	#trash h4 { line-height: 16px; margin: 0 0 0.4em; }
+-	#trash h4 .ui-icon { float: left; }
+-	#trash .gallery h5 { display: none; }
+-	</style>
+-	<script>
+-	$(function() {
+-		// there's the gallery and the trash
+-		var $gallery = $( "#gallery" ),
+-			$trash = $( "#trash" );
+-
+-		// let the gallery items be draggable
+-		$( "li", $gallery ).draggable({
+-			cancel: "a.ui-icon", // clicking an icon won't initiate dragging
+-			revert: "invalid", // when not dropped, the item will revert back to its initial position
+-			containment: "document",
+-			helper: "clone",
+-			cursor: "move"
+-		});
+-
+-		// let the trash be droppable, accepting the gallery items
+-		$trash.droppable({
+-			accept: "#gallery > li",
+-			activeClass: "ui-state-highlight",
+-			drop: function( event, ui ) {
+-				deleteImage( ui.draggable );
+-			}
+-		});
+-
+-		// let the gallery be droppable as well, accepting items from the trash
+-		$gallery.droppable({
+-			accept: "#trash li",
+-			activeClass: "custom-state-active",
+-			drop: function( event, ui ) {
+-				recycleImage( ui.draggable );
+-			}
+-		});
+-
+-		// image deletion function
+-		var recycle_icon = "<a href='link/to/recycle/script/when/we/have/js/off' title='Recycle this image' class='ui-icon ui-icon-refresh'>Recycle image</a>";
+-		function deleteImage( $item ) {
+-			$item.fadeOut(function() {
+-				var $list = $( "ul", $trash ).length ?
+-					$( "ul", $trash ) :
+-					$( "<ul class='gallery ui-helper-reset'/>" ).appendTo( $trash );
+-
+-				$item.find( "a.ui-icon-trash" ).remove();
+-				$item.append( recycle_icon ).appendTo( $list ).fadeIn(function() {
+-					$item
+-						.animate({ width: "48px" })
+-						.find( "img" )
+-							.animate({ height: "36px" });
+-				});
+-			});
+-		}
+-
+-		// image recycle function
+-		var trash_icon = "<a href='link/to/trash/script/when/we/have/js/off' title='Delete this image' class='ui-icon ui-icon-trash'>Delete image</a>";
+-		function recycleImage( $item ) {
+-			$item.fadeOut(function() {
+-				$item
+-					.find( "a.ui-icon-refresh" )
+-						.remove()
+-					.end()
+-					.css( "width", "96px")
+-					.append( trash_icon )
+-					.find( "img" )
+-						.css( "height", "72px" )
+-					.end()
+-					.appendTo( $gallery )
+-					.fadeIn();
+-			});
+-		}
+-
+-		// image preview function, demonstrating the ui.dialog used as a modal window
+-		function viewLargerImage( $link ) {
+-			var src = $link.attr( "href" ),
+-				title = $link.siblings( "img" ).attr( "alt" ),
+-				$modal = $( "img[src$='" + src + "']" );
+-
+-			if ( $modal.length ) {
+-				$modal.dialog( "open" );
+-			} else {
+-				var img = $( "<img alt='" + title + "' width='384' height='288' style='display: none; padding: 8px;' />" )
+-					.attr( "src", src ).appendTo( "body" );
+-				setTimeout(function() {
+-					img.dialog({
+-						title: title,
+-						width: 400,
+-						modal: true
+-					});
+-				}, 1 );
+-			}
+-		}
+-
+-		// resolve the icons behavior with event delegation
+-		$( "ul.gallery > li" ).click(function( event ) {
+-			var $item = $( this ),
+-				$target = $( event.target );
+-
+-			if ( $target.is( "a.ui-icon-trash" ) ) {
+-				deleteImage( $item );
+-			} else if ( $target.is( "a.ui-icon-zoomin" ) ) {
+-				viewLargerImage( $target );
+-			} else if ( $target.is( "a.ui-icon-refresh" ) ) {
+-				recycleImage( $item );
+-			}
+-
+-			return false;
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget ui-helper-clearfix">
+-
+-<ul id="gallery" class="gallery ui-helper-reset ui-helper-clearfix">
+-	<li class="ui-widget-content ui-corner-tr">
+-		<h5 class="ui-widget-header">High Tatras</h5>
+-		<img src="images/high_tatras_min.jpg" alt="The peaks of High Tatras" width="96" height="72" />
+-		<a href="images/high_tatras.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
+-		<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
+-	</li>
+-	<li class="ui-widget-content ui-corner-tr">
+-		<h5 class="ui-widget-header">High Tatras 2</h5>
+-		<img src="images/high_tatras2_min.jpg" alt="The chalet at the Green mountain lake" width="96" height="72" />
+-		<a href="images/high_tatras2.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
+-		<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
+-	</li>
+-	<li class="ui-widget-content ui-corner-tr">
+-		<h5 class="ui-widget-header">High Tatras 3</h5>
+-		<img src="images/high_tatras3_min.jpg" alt="Planning the ascent" width="96" height="72" />
+-		<a href="images/high_tatras3.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
+-		<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
+-	</li>
+-	<li class="ui-widget-content ui-corner-tr">
+-		<h5 class="ui-widget-header">High Tatras 4</h5>
+-		<img src="images/high_tatras4_min.jpg" alt="On top of Kozi kopka" width="96" height="72" />
+-		<a href="images/high_tatras4.jpg" title="View larger image" class="ui-icon ui-icon-zoomin">View larger</a>
+-		<a href="link/to/trash/script/when/we/have/js/off" title="Delete this image" class="ui-icon ui-icon-trash">Delete image</a>
+-	</li>
+-</ul>
+-
+-<div id="trash" class="ui-widget-content ui-state-default">
+-	<h4 class="ui-widget-header"><span class="ui-icon ui-icon-trash">Trash</span> Trash</h4>
+-</div>
+-
+-</div>
+-
+-<div class="demo-description">
+-<p>You can delete an image either by dragging it to the Trash or by clicking the trash icon.</p>
+-<p>You can "recycle" an image by dragging it back to the gallery or by clicking the recycle icon.</p>
+-<p>You can view larger image by clicking the zoom icon. jQuery UI dialog widget is used for the modal window.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/accepted-elements.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/accepted-elements.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/accepted-elements.html	(revision 15488)
+@@ -1,53 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Droppable - Accept</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.droppable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
+-	#draggable, #draggable-nonvalid { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable, #draggable-nonvalid" ).draggable();
+-		$( "#droppable" ).droppable({
+-			accept: "#draggable",
+-			activeClass: "ui-state-hover",
+-			hoverClass: "ui-state-active",
+-			drop: function( event, ui ) {
+-				$( this )
+-					.addClass( "ui-state-highlight" )
+-					.find( "p" )
+-						.html( "Dropped!" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable-nonvalid" class="ui-widget-content">
+-	<p>I'm draggable but can't be dropped</p>
+-</div>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Drag me to my target</p>
+-</div>
+-
+-<div id="droppable" class="ui-widget-header">
+-	<p>accept: '#draggable'</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Specify using the <code>accept</code> option which element (or group of elements) is accepted by the target droppable.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras_min.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras2_min.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras3_min.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high_tatras4_min.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/propagation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/propagation.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/propagation.html	(revision 15488)
+@@ -1,73 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Droppable - Prevent propagation</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.droppable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable { width: 100px; height: 40px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
+-	#droppable, #droppable2 { width: 230px; height: 120px; padding: 0.5em; float: left; margin: 10px; }
+-	#droppable-inner, #droppable2-inner { width: 170px; height: 60px; padding: 0.5em; float: left; margin: 10px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable();
+-
+-		$( "#droppable, #droppable-inner" ).droppable({
+-			activeClass: "ui-state-hover",
+-			hoverClass: "ui-state-active",
+-			drop: function( event, ui ) {
+-				$( this )
+-					.addClass( "ui-state-highlight" )
+-					.find( "> p" )
+-						.html( "Dropped!" );
+-				return false;
+-			}
+-		});
+-
+-		$( "#droppable2, #droppable2-inner" ).droppable({
+-			greedy: true,
+-			activeClass: "ui-state-hover",
+-			hoverClass: "ui-state-active",
+-			drop: function( event, ui ) {
+-				$( this )
+-					.addClass( "ui-state-highlight" )
+-					.find( "> p" )
+-						.html( "Dropped!" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Drag me to my target</p>
+-</div>
+-
+-<div id="droppable" class="ui-widget-header">
+-	<p>Outer droppable</p>
+-	<div id="droppable-inner" class="ui-widget-header">
+-		<p>Inner droppable (not greedy)</p>
+-	</div>
+-</div>
+-
+-<div id="droppable2" class="ui-widget-header">
+-	<p>Outer droppable</p>
+-	<div id="droppable2-inner" class="ui-widget-header">
+-		<p>Inner droppable (greedy)</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>When working with nested droppables &#8212; for example, you may have an editable directory structure displayed as a tree, with folder and document nodes &#8212; the <code>greedy</code> option set to true prevents event propagation when a draggable is dropped on a child node (droppable).</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/default.html	(revision 15488)
+@@ -1,46 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Droppable - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.droppable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
+-	#droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable();
+-		$( "#droppable" ).droppable({
+-			drop: function( event, ui ) {
+-				$( this )
+-					.addClass( "ui-state-highlight" )
+-					.find( "p" )
+-						.html( "Dropped!" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Drag me to my target</p>
+-</div>
+-
+-<div id="droppable" class="ui-widget-header">
+-	<p>Drop here</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Enable any DOM element to be droppable, a target for draggable elements.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/visual-feedback.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/visual-feedback.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/visual-feedback.html	(revision 15488)
+@@ -1,72 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Droppable - Visual feedback</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.droppable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable, #draggable2 { width: 90px; height: 90px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
+-	#droppable, #droppable2 { width: 120px; height: 120px; padding: 0.5em; float: left; margin: 10px; }
+-	h3 { clear: left; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable();
+-		$( "#droppable" ).droppable({
+-			hoverClass: "ui-state-active",
+-			drop: function( event, ui ) {
+-				$( this )
+-					.addClass( "ui-state-highlight" )
+-					.find( "p" )
+-						.html( "Dropped!" );
+-			}
+-		});
+-
+-		$( "#draggable2" ).draggable();
+-		$( "#droppable2" ).droppable({
+-			accept: "#draggable2",
+-			activeClass: "ui-state-hover",
+-			drop: function( event, ui ) {
+-				$( this )
+-					.addClass( "ui-state-highlight" )
+-					.find( "p" )
+-						.html( "Dropped!" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<h3>Feedback on hover:</h3>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>Drag me to my target</p>
+-</div>
+-
+-<div id="droppable" class="ui-widget-header">
+-	<p>Drop here</p>
+-</div>
+-
+-<h3>Feedback on activating draggable:</h3>
+-
+-<div id="draggable2" class="ui-widget-content">
+-	<p>Drag me to my target</p>
+-</div>
+-
+-<div id="droppable2" class="ui-widget-header">
+-	<p>Drop here</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Change the droppable's appearance on hover, or when the droppable is active (an acceptable draggable is dropped on it).  Use the <code>hoverClass</code> or <code>activeClass</code> options to specify respective classes.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/index.html	(revision 15488)
+@@ -1,20 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Droppable Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="accepted-elements.html">Accepted elements</a></li>
+-	<li><a href="propagation.html">Prevent propagation</a></li>
+-	<li><a href="visual-feedback.html">Visual feedback</a></li>
+-	<li><a href="revert.html">Revert draggable position</a></li>
+-	<li><a href="shopping-cart.html">Shopping Cart</a></li>
+-	<li><a href="photo-manager.html">Simple photo manager</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/revert.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/revert.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/droppable/revert.html	(revision 15488)
+@@ -1,54 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Droppable - Revert draggable position</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.droppable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#draggable, #draggable2 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
+-	#droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#draggable" ).draggable({ revert: "valid" });
+-		$( "#draggable2" ).draggable({ revert: "invalid" });
+-
+-		$( "#droppable" ).droppable({
+-			activeClass: "ui-state-hover",
+-			hoverClass: "ui-state-active",
+-			drop: function( event, ui ) {
+-				$( this )
+-					.addClass( "ui-state-highlight" )
+-					.find( "p" )
+-						.html( "Dropped!" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="draggable" class="ui-widget-content">
+-	<p>I revert when I'm dropped</p>
+-</div>
+-
+-<div id="draggable2" class="ui-widget-content">
+-	<p>I revert when I'm not dropped</p>
+-</div>
+-
+-<div id="droppable" class="ui-widget-header">
+-	<p>Drop me here</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>Return the draggable (or it's helper) to its original location when dragging stops with the boolean <code>revert</code> option set on the draggable.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/show-week.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/show-week.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/show-week.html	(revision 15488)
+@@ -1,32 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Show week of the year</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker({
+-			showWeek: true,
+-			firstDay: 1
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"></p>
+-
+-<div class="demo-description">
+-<p>The datepicker can show the week of the year. The default calculation follows
+-	the ISO 8601 definition: the week starts on Monday, the first week of the year
+-	contains the first Thursday of the year. This means that some days from one
+-	year may be placed into weeks 'belonging' to another year.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/dropdown-month-year.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/dropdown-month-year.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/dropdown-month-year.html	(revision 15488)
+@@ -1,29 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Display month &amp; year menus</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker({
+-			changeMonth: true,
+-			changeYear: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"></p>
+-
+-<div class="demo-description">
+-<p>Show month and year dropdowns in place of the static month/year header to facilitate navigation through large timeframes.  Add the boolean <code>changeMonth</code> and <code>changeYear</code> options.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-ar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-ar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-ar.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Arabic Translation for jQuery UI date picker plugin. */
+-/* Khaled Alhourani -- me@khaledalhourani.com */
+-/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
+-jQuery(function($){
+-	$.datepicker.regional['ar'] = {
+-		closeText: 'إغلاق',
+-		prevText: '&#x3C;السابق',
+-		nextText: 'التالي&#x3E;',
+-		currentText: 'اليوم',
+-		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+-		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+-		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+-		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+-		weekHeader: 'أسبوع',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 6,
+-  		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ar']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/inline.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/inline.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/inline.html	(revision 15488)
+@@ -1,26 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Display inline</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-Date: <div id="datepicker"></div>
+-
+-<div class="demo-description">
+-<p>Display the datepicker embedded in the page instead of in an overlay.  Simply call .datepicker() on a div instead of an input.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/animation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/animation.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/animation.html	(revision 15488)
+@@ -1,51 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Animations</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.effect.js"></script>
+-	<script src="../../ui/jquery.ui.effect-blind.js"></script>
+-	<script src="../../ui/jquery.ui.effect-bounce.js"></script>
+-	<script src="../../ui/jquery.ui.effect-clip.js"></script>
+-	<script src="../../ui/jquery.ui.effect-drop.js"></script>
+-	<script src="../../ui/jquery.ui.effect-fold.js"></script>
+-	<script src="../../ui/jquery.ui.effect-slide.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker();
+-		$( "#anim" ).change(function() {
+-			$( "#datepicker" ).datepicker( "option", "showAnim", $( this ).val() );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker" size="30"/></p>
+-
+-<p>Animations:<br />
+-	<select id="anim">
+-		<option value="show">Show (default)</option>
+-		<option value="slideDown">Slide down</option>
+-		<option value="fadeIn">Fade in</option>
+-		<option value="blind">Blind (UI Effect)</option>
+-		<option value="bounce">Bounce (UI Effect)</option>
+-		<option value="clip">Clip (UI Effect)</option>
+-		<option value="drop">Drop (UI Effect)</option>
+-		<option value="fold">Fold (UI Effect)</option>
+-		<option value="slide">Slide (UI Effect)</option>
+-		<option value="">None</option>
+-	</select>
+-</p>
+-
+-<div class="demo-description">
+-<p>Use different animations when opening or closing the datepicker.  Choose an animation from the dropdown, then click on the input to see its effect.  You can use one of the three standard animations or any of the UI Effects.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-fr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-fr.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-fr.js	(revision 15488)
+@@ -1,25 +0,0 @@
+-/* French initialisation for the jQuery UI date picker plugin. */
+-/* Written by Keith Wood (kbwood{at}iinet.com.au),
+-			  Stéphane Nahmani (sholby@sholby.net),
+-			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
+-jQuery(function($){
+-	$.datepicker.regional['fr'] = {
+-		closeText: 'Fermer',
+-		prevText: 'Précédent',
+-		nextText: 'Suivant',
+-		currentText: 'Aujourd\'hui',
+-		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+-		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+-		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+-		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+-		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+-		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+-		dayNamesMin: ['D','L','M','M','J','V','S'],
+-		weekHeader: 'Sem.',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fr']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/default.html	(revision 15488)
+@@ -1,26 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"></p>
+-
+-<div class="demo-description">
+-<p>The datepicker is tied to a standard form input field.  Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay.  Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input's value.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-zh-TW.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-zh-TW.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-zh-TW.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Chinese initialisation for the jQuery UI date picker plugin. */
+-/* Written by Ressol (ressol@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['zh-TW'] = {
+-		closeText: '關閉',
+-		prevText: '&#x3C;上月',
+-		nextText: '下月&#x3E;',
+-		currentText: '今天',
+-		monthNames: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+-		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+-		dayNamesMin: ['日','一','二','三','四','五','六'],
+-		weekHeader: '周',
+-		dateFormat: 'yy/mm/dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/multiple-calendars.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/multiple-calendars.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/multiple-calendars.html	(revision 15488)
+@@ -1,29 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Display multiple months</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker({
+-			numberOfMonths: 3,
+-			showButtonPanel: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"></p>
+-
+-<div class="demo-description">
+-<p>Set the <code>numberOfMonths</code> option to an integer of 2 or more to show multiple months in a single datepicker.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-formats.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-formats.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-formats.html	(revision 15488)
+@@ -1,40 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Format date</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker();
+-		$( "#format" ).change(function() {
+-			$( "#datepicker" ).datepicker( "option", "dateFormat", $( this ).val() );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker" size="30"/></p>
+-
+-<p>Format options:<br />
+-	<select id="format">
+-		<option value="mm/dd/yy">Default - mm/dd/yy</option>
+-		<option value="yy-mm-dd">ISO 8601 - yy-mm-dd</option>
+-		<option value="d M, y">Short - d M, y</option>
+-		<option value="d MM, y">Medium - d MM, y</option>
+-		<option value="DD, d MM, yy">Full - DD, d MM, yy</option>
+-		<option value="'day' d 'of' MM 'in the year' yy">With text - 'day' d 'of' MM 'in the year' yy</option>
+-	</select>
+-</p>
+-
+-<div class="demo-description">
+-<p>Display date feedback in a variety of ways.  Choose a date format from the dropdown, then click on the input and select a date to see it in that format.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/other-months.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/other-months.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/other-months.html	(revision 15488)
+@@ -1,30 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Dates in other months</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker({
+-			showOtherMonths: true,
+-			selectOtherMonths: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"></p>
+-
+-<div class="demo-description">
+-<p>The datepicker can show dates that come from other than the main month
+-	being displayed. These other dates can also be made selectable.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/localization.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/localization.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/localization.html	(revision 15488)
+@@ -1,41 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Localize calendar</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<script src="jquery.ui.datepicker-ar.js"></script>
+-	<script src="jquery.ui.datepicker-fr.js"></script>
+-	<script src="jquery.ui.datepicker-he.js"></script>
+-	<script src="jquery.ui.datepicker-zh-TW.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker( $.datepicker.regional[ "fr" ] );
+-		$( "#locale" ).change(function() {
+-			$( "#datepicker" ).datepicker( "option",
+-				$.datepicker.regional[ $( this ).val() ] );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"/>&nbsp;
+-	<select id="locale">
+-		<option value="ar">Arabic (&#8235;(&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;</option>
+-		<option value="zh-TW">Chinese Traditional (&#32321;&#39636;&#20013;&#25991;)</option>
+-		<option value="">English</option>
+-		<option value="fr" selected="selected">French (Fran&ccedil;ais)</option>
+-		<option value="he">Hebrew (&#8235;(&#1506;&#1489;&#1512;&#1497;&#1514;</option>
+-	</select></p>
+-
+-<div class="demo-description">
+-<p>Localize the datepicker calendar language and format (English / Western formatting is the default).  The datepicker includes built-in support for languages that read right-to-left, such as Arabic and Hebrew.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/icon-trigger.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/icon-trigger.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/icon-trigger.html	(revision 15488)
+@@ -1,30 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Icon trigger</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker({
+-			showOn: "button",
+-			buttonImage: "images/calendar.gif",
+-			buttonImageOnly: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"></p>
+-
+-<div class="demo-description">
+-<p>Click the icon next to the input field to show the datepicker.  Set the datepicker to open on focus (default behavior), on icon click, or both.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/buttonbar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/buttonbar.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/buttonbar.html	(revision 15488)
+@@ -1,28 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Display button bar</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker({
+-			showButtonPanel: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"></p>
+-
+-<div class="demo-description">
+-<p>Display a button for selecting Today's date and a Done button for closing the calendar with the boolean <code>showButtonPanel</code> option.  Each button is enabled by default when the bar is displayed, but can be turned off with additional options.  Button text is customizable.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/alt-field.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/alt-field.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/alt-field.html	(revision 15488)
+@@ -1,29 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Populate alternate field</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker({
+-			altField: "#alternate",
+-			altFormat: "DD, d MM, yy"
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker">&nbsp;<input type="text" id="alternate" size="30"/></p>
+-
+-<div class="demo-description">
+-<p>Populate an alternate field with its own date format whenever a date is selected using the <code>altField</code> and <code>altFormat</code> options.  This feature could be used to present a human-friendly date for user selection, while passing a more computer-friendly date through for further processing.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/images/calendar.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/min-max.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/min-max.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/min-max.html	(revision 15488)
+@@ -1,26 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Restrict date range</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#datepicker" ).datepicker({ minDate: -20, maxDate: "+1M +10D" });
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>Date: <input type="text" id="datepicker"></p>
+-
+-<div class="demo-description">
+-<p>Restrict the range of selectable dates with the <code>minDate</code> and <code>maxDate</code> options.  Set the beginning and end dates as actual dates (new Date(2009, 1 - 1, 26)), as a numeric offset from today (-20), or as a string of periods and units ('+1M +10D').  For the last, use 'D' for days, 'W' for weeks, 'M' for months, or 'Y' for years.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-he.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-he.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-he.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Hebrew initialisation for the UI Datepicker extension. */
+-/* Written by Amir Hardon (ahardon at gmail dot com). */
+-jQuery(function($){
+-	$.datepicker.regional['he'] = {
+-		closeText: 'סגור',
+-		prevText: '&#x3C;הקודם',
+-		nextText: 'הבא&#x3E;',
+-		currentText: 'היום',
+-		monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
+-		'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
+-		monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני',
+-		'יולי','אוג','ספט','אוק','נוב','דצמ'],
+-		dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+-		dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+-		dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['he']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/index.html	(revision 15488)
+@@ -1,27 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="date-formats.html">Format date</a></li>
+-	<li><a href="min-max.html">Restrict date range</a></li>
+-	<li><a href="localization.html">Localize calendar</a></li>
+-	<li><a href="alt-field.html">Populate alternate field</a></li>
+-	<li><a href="inline.html">Display inline</a></li>
+-	<li><a href="buttonbar.html">Display button bar</a></li>
+-	<li><a href="dropdown-month-year.html">Display month &amp; year menus</a></li>		
+-	<li><a href="other-months.html">Dates in other months</a></li>		
+-	<li><a href="show-week.html">Show week of the year</a></li>		
+-	<li><a href="multiple-calendars.html">Display multiple months</a></li>		
+-	<li><a href="icon-trigger.html">Icon trigger</a></li>
+-	<li><a href="animation.html">Animations</a></li>
+-	<li><a href="date-range.html">Date Range</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-range.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-range.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-range.html	(revision 15488)
+@@ -1,44 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Datepicker - Select a Date Range</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.datepicker.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#from" ).datepicker({
+-			defaultDate: "+1w",
+-			changeMonth: true,
+-			numberOfMonths: 3,
+-			onClose: function( selectedDate ) {
+-				$( "#to" ).datepicker( "option", "minDate", selectedDate );
+-			}
+-		});
+-		$( "#to" ).datepicker({
+-			defaultDate: "+1w",
+-			changeMonth: true,
+-			numberOfMonths: 3,
+-			onClose: function( selectedDate ) {
+-				$( "#from" ).datepicker( "option", "maxDate", selectedDate );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<label for="from">From</label>
+-<input type="text" id="from" name="from"/>
+-<label for="to">to</label>
+-<input type="text" id="to" name="to"/>
+-
+-<div class="demo-description">
+-<p>Select the date range to search for.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/checkbox.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/checkbox.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/checkbox.html	(revision 15488)
+@@ -1,37 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Button - Checkboxes</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#check" ).button();
+-		$( "#format" ).buttonset();
+-	});
+-	</script>
+-	<style>
+-	#format { margin-top: 2em; }
+-	</style>
+-</head>
+-<body>
+-
+-<input type="checkbox" id="check" /><label for="check">Toggle</label>
+-
+-<div id="format">
+-	<input type="checkbox" id="check1" /><label for="check1">B</label>
+-	<input type="checkbox" id="check2" /><label for="check2">I</label>
+-	<input type="checkbox" id="check3" /><label for="check3">U</label>
+-</div>
+-
+-<div class="demo-description">
+-<p>A checkbox is styled as a toggle button with the button widget. The label element associated with the checkbox is used for the button text.</p>
+-<p>This demo also demonstrates three checkboxes styled as a button set by calling <code>.buttonset()</code> on a common container.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/index.html	(revision 15488)
+@@ -1,19 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Button Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="radio.html">Radios</a></li>
+-	<li><a href="checkbox.html">Checkboxes</a></li>
+-	<li><a href="icons.html">Icons</a></li>
+-	<li><a href="toolbar.html">Toolbar</a></li>
+-	<li><a href="splitbutton.html">Split Button</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/splitbutton.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/splitbutton.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/splitbutton.html	(revision 15488)
+@@ -1,69 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Button - Split button</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-		.ui-menu { position: absolute; width: 100px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#rerun" )
+-			.button()
+-			.click(function() {
+-				alert( "Running the last action" );
+-			})
+-			.next()
+-				.button({
+-					text: false,
+-					icons: {
+-						primary: "ui-icon-triangle-1-s"
+-					}
+-				})
+-				.click(function() {
+-					var menu = $( this ).parent().next().show().position({
+-						my: "left top",
+-						at: "left bottom",
+-						of: this
+-					});
+-					$( document ).one( "click", function() {
+-						menu.hide();
+-					});
+-					return false;
+-				})
+-				.parent()
+-					.buttonset()
+-					.next()
+-						.hide()
+-						.menu();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div>
+-	<div>
+-		<button id="rerun">Run last action</button>
+-		<button id="select">Select an action</button>
+-	</div>
+-	<ul>
+-		<li><a href="#">Open...</a></li>
+-		<li><a href="#">Save</a></li>
+-		<li><a href="#">Delete</a></li>
+-	</ul>
+-</div>
+-
+-<div class="demo-description">
+-<p>An example of a split button built with two buttons: A plain button with just text, one with only a primary icon
+-and no text. Both are grouped together in a set.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/icons.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/icons.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/icons.html	(revision 15488)
+@@ -1,49 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Button - Icons</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "button:first" ).button({
+-			icons: {
+-				primary: "ui-icon-locked"
+-			},
+-			text: false
+-		}).next().button({
+-			icons: {
+-				primary: "ui-icon-locked"
+-			}
+-		}).next().button({
+-			icons: {
+-				primary: "ui-icon-gear",
+-				secondary: "ui-icon-triangle-1-s"
+-			}
+-		}).next().button({
+-			icons: {
+-				primary: "ui-icon-gear",
+-				secondary: "ui-icon-triangle-1-s"
+-			},
+-			text: false
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<button>Button with icon only</button>
+-<button>Button with icon on the left</button>
+-<button>Button with two icons</button>
+-<button>Button with two icons and no text</button>
+-
+-<div class="demo-description">
+-<p>Some buttons with various combinations of text and icons.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/radio.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/radio.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/radio.html	(revision 15488)
+@@ -1,32 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Button - Radios</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#radio" ).buttonset();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<form>
+-	<div id="radio">
+-		<input type="radio" id="radio1" name="radio" /><label for="radio1">Choice 1</label>
+-		<input type="radio" id="radio2" name="radio" checked="checked" /><label for="radio2">Choice 2</label>
+-		<input type="radio" id="radio3" name="radio" /><label for="radio3">Choice 3</label>
+-	</div>
+-</form>
+-
+-<div class="demo-description">
+-<p>A set of three radio buttons transformed into a button set.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/toolbar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/toolbar.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/toolbar.html	(revision 15488)
+@@ -1,118 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Button - Toolbar</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#toolbar {
+-		padding: 4px;
+-		display: inline-block;
+-	}
+-	/* support: IE7 */
+-	*+html #toolbar {
+-		display: inline;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#beginning" ).button({
+-			text: false,
+-			icons: {
+-				primary: "ui-icon-seek-start"
+-			}
+-		});
+-		$( "#rewind" ).button({
+-			text: false,
+-			icons: {
+-				primary: "ui-icon-seek-prev"
+-			}
+-		});
+-		$( "#play" ).button({
+-			text: false,
+-			icons: {
+-				primary: "ui-icon-play"
+-			}
+-		})
+-		.click(function() {
+-			var options;
+-			if ( $( this ).text() === "play" ) {
+-				options = {
+-					label: "pause",
+-					icons: {
+-						primary: "ui-icon-pause"
+-					}
+-				};
+-			} else {
+-				options = {
+-					label: "play",
+-					icons: {
+-						primary: "ui-icon-play"
+-					}
+-				};
+-			}
+-			$( this ).button( "option", options );
+-		});
+-		$( "#stop" ).button({
+-			text: false,
+-			icons: {
+-				primary: "ui-icon-stop"
+-			}
+-		})
+-		.click(function() {
+-			$( "#play" ).button( "option", {
+-				label: "play",
+-				icons: {
+-					primary: "ui-icon-play"
+-				}
+-			});
+-		});
+-		$( "#forward" ).button({
+-			text: false,
+-			icons: {
+-				primary: "ui-icon-seek-next"
+-			}
+-		});
+-		$( "#end" ).button({
+-			text: false,
+-			icons: {
+-				primary: "ui-icon-seek-end"
+-			}
+-		});
+-		$( "#shuffle" ).button();
+-		$( "#repeat" ).buttonset();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="toolbar" class="ui-widget-header ui-corner-all">
+-	<button id="beginning">go to beginning</button>
+-	<button id="rewind">rewind</button>
+-	<button id="play">play</button>
+-	<button id="stop">stop</button>
+-	<button id="forward">fast forward</button>
+-	<button id="end">go to end</button>
+-
+-	<input type="checkbox" id="shuffle" /><label for="shuffle">Shuffle</label>
+-
+-	<span id="repeat">
+-		<input type="radio" id="repeat0" name="repeat" checked="checked" /><label for="repeat0">No Repeat</label>
+-		<input type="radio" id="repeat1" name="repeat" /><label for="repeat1">Once</label>
+-		<input type="radio" id="repeatall" name="repeat" /><label for="repeatall">All</label>
+-	</span>
+-</div>
+-
+-<div class="demo-description">
+-<p>
+-	A mediaplayer toolbar. Take a look at the underlying markup: A few button elements,
+-	an input of type checkbox for the Shuffle button, and three inputs of type radio for the Repeat options.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/button/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/button/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/button/default.html	(revision 15488)
+@@ -1,34 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Button - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "input[type=submit], a, button" )
+-			.button()
+-			.click(function( event ) {
+-				event.preventDefault();
+-			});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<button>A button element</button>
+-
+-<input type="submit" value="A submit button">
+-
+-<a href="#">An anchor</a>
+-
+-<div class="demo-description">
+-<p>Examples of the markup that can be used for buttons: A button element, an input of type submit and an anchor.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/display-grid.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/display-grid.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/display-grid.html	(revision 15488)
+@@ -1,48 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Display as grid</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#sortable { list-style-type: none; margin: 0; padding: 0; width: 450px; }
+-	#sortable li { margin: 3px 3px 3px 0; padding: 1px; float: left; width: 100px; height: 90px; font-size: 4em; text-align: center; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#sortable" ).sortable();
+-		$( "#sortable" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<ul id="sortable">
+-	<li class="ui-state-default">1</li>
+-	<li class="ui-state-default">2</li>
+-	<li class="ui-state-default">3</li>
+-	<li class="ui-state-default">4</li>
+-	<li class="ui-state-default">5</li>
+-	<li class="ui-state-default">6</li>
+-	<li class="ui-state-default">7</li>
+-	<li class="ui-state-default">8</li>
+-	<li class="ui-state-default">9</li>
+-	<li class="ui-state-default">10</li>
+-	<li class="ui-state-default">11</li>
+-	<li class="ui-state-default">12</li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>
+-	To arrange sortable items as a grid, give them identical dimensions and
+-	float them using CSS.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/delay-start.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/delay-start.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/delay-start.html	(revision 15488)
+@@ -1,61 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Delay start</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0; margin-bottom: 15px;zoom: 1; }
+-	#sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 95%; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#sortable1" ).sortable({
+-			delay: 300
+-		});
+-
+-		$( "#sortable2" ).sortable({
+-			distance: 15
+-		});
+-
+-		$( "li" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<h3 class="docs">Time delay of 300ms:</h3>
+-
+-<ul id="sortable1">
+-	<li class="ui-state-default">Item 1</li>
+-	<li class="ui-state-default">Item 2</li>
+-	<li class="ui-state-default">Item 3</li>
+-	<li class="ui-state-default">Item 4</li>
+-</ul>
+-
+-<h3 class="docs">Distance delay of 15px:</h3>
+-
+-<ul id="sortable2">
+-	<li class="ui-state-default">Item 1</li>
+-	<li class="ui-state-default">Item 2</li>
+-	<li class="ui-state-default">Item 3</li>
+-	<li class="ui-state-default">Item 4</li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>
+-	Prevent accidental sorting either by delay (time) or distance. Set a number of
+-	milliseconds the element needs to be dragged before sorting starts
+-	with the <code>delay</code> option. Set a distance in pixels the element
+-	needs to be dragged before sorting starts with the <code>distance</code>
+-	option.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists-through-tabs.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists-through-tabs.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists-through-tabs.html	(revision 15488)
+@@ -1,72 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Connect lists with Tabs</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<script src="../../ui/jquery.ui.droppable.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 120px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#sortable1, #sortable2" ).sortable().disableSelection();
+-
+-		var $tabs = $( "#tabs" ).tabs();
+-
+-		var $tab_items = $( "ul:first li", $tabs ).droppable({
+-			accept: ".connectedSortable li",
+-			hoverClass: "ui-state-hover",
+-			drop: function( event, ui ) {
+-				var $item = $( this );
+-				var $list = $( $item.find( "a" ).attr( "href" ) )
+-					.find( ".connectedSortable" );
+-
+-				ui.draggable.hide( "slow", function() {
+-					$tabs.tabs( "option", "active", $tab_items.index( $item ) );
+-					$( this ).appendTo( $list ).show( "slow" );
+-				});
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">Nunc tincidunt</a></li>
+-		<li><a href="#tabs-2">Proin dolor</a></li>
+-	</ul>
+-	<div id="tabs-1">
+-		<ul id="sortable1" class="connectedSortable ui-helper-reset">
+-			<li class="ui-state-default">Item 1</li>
+-			<li class="ui-state-default">Item 2</li>
+-			<li class="ui-state-default">Item 3</li>
+-			<li class="ui-state-default">Item 4</li>
+-			<li class="ui-state-default">Item 5</li>
+-		</ul>
+-	</div>
+-	<div id="tabs-2">
+-		<ul id="sortable2" class="connectedSortable ui-helper-reset">
+-			<li class="ui-state-highlight">Item 1</li>
+-			<li class="ui-state-highlight">Item 2</li>
+-			<li class="ui-state-highlight">Item 3</li>
+-			<li class="ui-state-highlight">Item 4</li>
+-			<li class="ui-state-highlight">Item 5</li>
+-		</ul>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Sort items from one list into another and vice versa, by dropping the list item on the appropriate tab above.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/empty-lists.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/empty-lists.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/empty-lists.html	(revision 15488)
+@@ -1,63 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Handle empty lists</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#sortable1, #sortable2, #sortable3 { list-style-type: none; margin: 0; padding: 0; float: left; margin-right: 10px; background: #eee; padding: 5px; width: 143px;}
+-	#sortable1 li, #sortable2 li, #sortable3 li { margin: 5px; padding: 5px; font-size: 1.2em; width: 120px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "ul.droptrue" ).sortable({
+-			connectWith: "ul"
+-		});
+-
+-		$( "ul.dropfalse" ).sortable({
+-			connectWith: "ul",
+-			dropOnEmpty: false
+-		});
+-
+-		$( "#sortable1, #sortable2, #sortable3" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<ul id="sortable1" class='droptrue'>
+-	<li class="ui-state-default">Can be dropped..</li>
+-	<li class="ui-state-default">..on an empty list</li>
+-	<li class="ui-state-default">Item 3</li>
+-	<li class="ui-state-default">Item 4</li>
+-	<li class="ui-state-default">Item 5</li>
+-</ul>
+-
+-<ul id="sortable2" class='dropfalse'>
+-	<li class="ui-state-highlight">Cannot be dropped..</li>
+-	<li class="ui-state-highlight">..on an empty list</li>
+-	<li class="ui-state-highlight">Item 3</li>
+-	<li class="ui-state-highlight">Item 4</li>
+-	<li class="ui-state-highlight">Item 5</li>
+-</ul>
+-
+-<ul id="sortable3" class='droptrue'>
+-</ul>
+-
+-<br style="clear:both">
+-
+-<div class="demo-description">
+-<p>
+-	Prevent all items in a list from being dropped into a separate, empty list
+-	using the <code>dropOnEmpty</code> option set to <code>false</code>.  By default,
+-	sortable items can be dropped on empty lists.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/portlets.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/portlets.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/portlets.html	(revision 15488)
+@@ -1,91 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Portlets</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	body { min-width: 520px; }
+-	.column { width: 170px; float: left; padding-bottom: 100px; }
+-	.portlet { margin: 0 1em 1em 0; }
+-	.portlet-header { margin: 0.3em; padding-bottom: 4px; padding-left: 0.2em; }
+-	.portlet-header .ui-icon { float: right; }
+-	.portlet-content { padding: 0.4em; }
+-	.ui-sortable-placeholder { border: 1px dotted black; visibility: visible !important; height: 50px !important; }
+-	.ui-sortable-placeholder * { visibility: hidden; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( ".column" ).sortable({
+-			connectWith: ".column"
+-		});
+-
+-		$( ".portlet" ).addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" )
+-			.find( ".portlet-header" )
+-				.addClass( "ui-widget-header ui-corner-all" )
+-				.prepend( "<span class='ui-icon ui-icon-minusthick'></span>")
+-				.end()
+-			.find( ".portlet-content" );
+-
+-		$( ".portlet-header .ui-icon" ).click(function() {
+-			$( this ).toggleClass( "ui-icon-minusthick" ).toggleClass( "ui-icon-plusthick" );
+-			$( this ).parents( ".portlet:first" ).find( ".portlet-content" ).toggle();
+-		});
+-
+-		$( ".column" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="column">
+-
+-	<div class="portlet">
+-		<div class="portlet-header">Feeds</div>
+-		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
+-	</div>
+-
+-	<div class="portlet">
+-		<div class="portlet-header">News</div>
+-		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
+-	</div>
+-
+-</div>
+-
+-<div class="column">
+-
+-	<div class="portlet">
+-		<div class="portlet-header">Shopping</div>
+-		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
+-	</div>
+-
+-</div>
+-
+-<div class="column">
+-
+-	<div class="portlet">
+-		<div class="portlet-header">Links</div>
+-		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
+-	</div>
+-
+-	<div class="portlet">
+-		<div class="portlet-header">Images</div>
+-		<div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
+-	</div>
+-
+-</div>
+-
+-<div class="demo-description">
+-<p>
+-	Enable portlets (styled divs) as sortables and use the <code>connectWith</code>
+-	option to allow sorting between columns.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/items.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/items.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/items.html	(revision 15488)
+@@ -1,64 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Include / exclude items</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0; zoom: 1; }
+-	#sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 3px; width: 90%; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#sortable1" ).sortable({
+-			items: "li:not(.ui-state-disabled)"
+-		});
+-
+-		$( "#sortable2" ).sortable({
+-			cancel: ".ui-state-disabled"
+-		});
+-
+-		$( "#sortable1 li, #sortable2 li" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<h3 class="docs">Specify which items are sortable:</h3>
+-
+-<ul id="sortable1">
+-	<li class="ui-state-default">Item 1</li>
+-	<li class="ui-state-default ui-state-disabled">(I'm not sortable or a drop target)</li>
+-	<li class="ui-state-default ui-state-disabled">(I'm not sortable or a drop target)</li>
+-	<li class="ui-state-default">Item 4</li>
+-</ul>
+-
+-<h3 class="docs">Cancel sorting (but keep as drop targets):</h3>
+-
+-<ul id="sortable2">
+-	<li class="ui-state-default">Item 1</li>
+-	<li class="ui-state-default ui-state-disabled">(I'm not sortable)</li>
+-	<li class="ui-state-default ui-state-disabled">(I'm not sortable)</li>
+-	<li class="ui-state-default">Item 4</li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>
+-	Specify which items are eligible to sort by passing a jQuery selector into
+-	the <code>items</code> option. Items excluded from this option are not
+-	sortable, nor are they valid targets for sortable items.
+-</p>
+-<p>
+-	To only prevent sorting on certain items, pass a jQuery selector into the
+-	<code>cancel</code> option. Cancelled items remain valid sort targets for
+-	others.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/placeholder.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/placeholder.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/placeholder.html	(revision 15488)
+@@ -1,50 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Drop placeholder</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
+-	#sortable li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; height: 1.5em; }
+-	html>body #sortable li { height: 1.5em; line-height: 1.2em; }
+-	.ui-state-highlight { height: 1.5em; line-height: 1.2em; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#sortable" ).sortable({
+-			placeholder: "ui-state-highlight"
+-		});
+-		$( "#sortable" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<ul id="sortable">
+-	<li class="ui-state-default">Item 1</li>
+-	<li class="ui-state-default">Item 2</li>
+-	<li class="ui-state-default">Item 3</li>
+-	<li class="ui-state-default">Item 4</li>
+-	<li class="ui-state-default">Item 5</li>
+-	<li class="ui-state-default">Item 6</li>
+-	<li class="ui-state-default">Item 7</li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>
+-	When dragging a sortable item to a new location, other items will make room
+-	for the that item by shifting to allow white space between them. Pass a
+-	class into the <code>placeholder</code> option to style that space to
+-	be visible.  Use the boolean <code>forcePlaceholderSize</code> option
+-	to set dimensions on the placeholder.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/default.html	(revision 15488)
+@@ -1,45 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
+-	#sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
+-	#sortable li span { position: absolute; margin-left: -1.3em; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#sortable" ).sortable();
+-		$( "#sortable" ).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<ul id="sortable">
+-	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
+-	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
+-	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
+-	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
+-	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
+-	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
+-	<li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>
+-	Enable a group of DOM elements to be sortable. Click on and drag an
+-	element to a new spot within the list, and the other items will adjust to
+-	fit. By default, sortable items share <code>draggable</code> properties.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists.html	(revision 15488)
+@@ -1,52 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable - Connect lists</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0 0 2.5em; float: left; margin-right: 10px; }
+-	#sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 120px; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#sortable1, #sortable2" ).sortable({
+-			connectWith: ".connectedSortable"
+-		}).disableSelection();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<ul id="sortable1" class="connectedSortable">
+-	<li class="ui-state-default">Item 1</li>
+-	<li class="ui-state-default">Item 2</li>
+-	<li class="ui-state-default">Item 3</li>
+-	<li class="ui-state-default">Item 4</li>
+-	<li class="ui-state-default">Item 5</li>
+-</ul>
+-
+-<ul id="sortable2" class="connectedSortable">
+-	<li class="ui-state-highlight">Item 1</li>
+-	<li class="ui-state-highlight">Item 2</li>
+-	<li class="ui-state-highlight">Item 3</li>
+-	<li class="ui-state-highlight">Item 4</li>
+-	<li class="ui-state-highlight">Item 5</li>
+-</ul>
+-
+-<div class="demo-description">
+-<p>
+-	Sort items from one list into another and vice versa, by passing a selector into
+-	the <code>connectWith</code> option. The simplest way to do this is to
+-	group all related lists with a CSS class, and then pass that class into the
+-	sortable function (i.e., <code>connectWith: '.myclass'</code>).
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/sortable/index.html	(revision 15488)
+@@ -1,22 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Sortable Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="placeholder.html">Drop placeholder</a></li>
+-	<li><a href="connect-lists.html">Connect lists</a></li>
+-	<li><a href="connect-lists-through-tabs.html">Connect lists through tabs</a></li>
+-	<li><a href="empty-lists.html">Handle empty lists</a></li>
+-	<li><a href="items.html">Include / exclude items</a></li>
+-	<li><a href="delay-start.html">Delay start</a></li>
+-	<li><a href="display-grid.html">Display as grid</a></li>
+-	<li><a href="portlets.html">Portlets</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/overflow.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/overflow.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/overflow.html	(revision 15488)
+@@ -1,44 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Spinner - Overflow</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../external/jquery.mousewheel.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.spinner.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#spinner" ).spinner({
+-			spin: function( event, ui ) {
+-				if ( ui.value > 10 ) {
+-					$( this ).spinner( "value", -10 );
+-					return false;
+-				} else if ( ui.value < -10 ) {
+-					$( this ).spinner( "value", 10 );
+-					return false;
+-				}
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="spinner">Select a value:</label>
+-	<input id="spinner" name="value" />
+-</p>
+-
+-<div class="demo-description">
+-<p>
+-Overflowing spinner restricted to a range of -10 to 10.
+-For anything above 10, it'll overflow to -10, and the other way round.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/default.html	(revision 15488)
+@@ -1,64 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Spinner - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../external/jquery.mousewheel.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.spinner.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		var spinner = $( "#spinner" ).spinner();
+-
+-		$( "#disable" ).click(function() {
+-			if ( spinner.spinner( "option", "disabled" ) ) {
+-				spinner.spinner( "enable" );
+-			} else {
+-				spinner.spinner( "disable" );
+-			}
+-		});
+-		$( "#destroy" ).click(function() {
+-			if ( spinner.data( "ui-spinner" ) ) {
+-				spinner.spinner( "destroy" );
+-			} else {
+-				spinner.spinner();
+-			}
+-		});
+-		$( "#getvalue" ).click(function() {
+-			alert( spinner.spinner( "value" ) );
+-		});
+-		$( "#setvalue" ).click(function() {
+-			spinner.spinner( "value", 5 );
+-		});
+-
+-		$( "button" ).button();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="spinner">Select a value:</label>
+-	<input id="spinner" name="value">
+-</p>
+-
+-<p>
+-	<button id="disable">Toggle disable/enable</button>
+-	<button id="destroy">Toggle widget</button>
+-</p>
+-
+-<p>
+-	<button id="getvalue">Get value</button>
+-	<button id="setvalue">Set value to 5</button>
+-</p>
+-
+-<div class="demo-description">
+-<p>Default spinner.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/index.html	(revision 15488)
+@@ -1,19 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Spinner Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="decimal.html">Decimal</a></li>
+-	<li><a href="currency.html">Currency</a></li>
+-	<li><a href="latlong.html">Map</a></li>
+-	<li><a href="time.html">Time</a></li>
+-	<li><a href="overflow.html">Overflow</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/currency.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/currency.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/currency.html	(revision 15488)
+@@ -1,52 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Spinner - Currency</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../external/jquery.mousewheel.js"></script>
+-	<script src="../../external/globalize.js"></script>
+-	<script src="../../external/globalize.culture.de-DE.js"></script>
+-	<script src="../../external/globalize.culture.ja-JP.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.spinner.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#currency" ).change(function() {
+-			$( "#spinner" ).spinner( "option", "culture", $( this ).val() );
+-		});
+-
+-		$( "#spinner" ).spinner({
+-			min: 5,
+-			max: 2500,
+-			step: 25,
+-			start: 1000,
+-			numberFormat: "C"
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="currency">Currency to donate</label>
+-	<select id="currency" name="currency">
+-		<option value="en-US">US $</option>
+-		<option value="de-DE">EUR €</option>
+-		<option value="ja-JP">YEN ¥</option>
+-	</select>
+-</p>
+-<p>
+-	<label for="spinner">Amount to donate:</label>
+-	<input id="spinner" name="spinner" value="5">
+-</p>
+-
+-<div class="demo-description">
+-<p>Example of a donation form, with currency selection and amount spinner.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/decimal.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/decimal.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/decimal.html	(revision 15488)
+@@ -1,56 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Spinner - Decimal</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../external/jquery.mousewheel.js"></script>
+-	<script src="../../external/globalize.js"></script>
+-	<script src="../../external/globalize.culture.de-DE.js"></script>
+-	<script src="../../external/globalize.culture.ja-JP.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.spinner.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#spinner" ).spinner({
+-			step: 0.01,
+-			numberFormat: "n"
+-		});
+-
+-		$( "#culture" ).change(function() {
+-			var current = $( "#spinner" ).spinner( "value" );
+-			Globalize.culture( $(this).val() );
+-			$( "#spinner" ).spinner( "value", current );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="spinner">Decimal spinner:</label>
+-	<input id="spinner" name="spinner" value="5.06">
+-</p>
+-<p>
+-	<label for="culture">Select a culture to use for formatting:</label>
+-	<select id="culture">
+-		<option value="en-EN" selected="selected">English</option>
+-		<option value="de-DE">German</option>
+-		<option value="ja-JP">Japanese</option>
+-	</select>
+-</p>
+-
+-<div class="demo-description">
+-<p>
+-	Example of a decimal spinner. Step is set to 0.01.
+-	<br>The code handling the culture change reads the current spinner value,
+-	then changes the culture, then sets the value again, resulting in an updated
+-	formatting, based on the new culture.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/time.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/time.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/time.html	(revision 15488)
+@@ -1,74 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Spinner - Time</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../external/jquery.mousewheel.js"></script>
+-	<script src="../../external/globalize.js"></script>
+-	<script src="../../external/globalize.culture.de-DE.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.spinner.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$.widget( "ui.timespinner", $.ui.spinner, {
+-		options: {
+-			// seconds
+-			step: 60 * 1000,
+-			// hours
+-			page: 60
+-		},
+-
+-		_parse: function( value ) {
+-			if ( typeof value === "string" ) {
+-				// already a timestamp
+-				if ( Number( value ) == value ) {
+-					return Number( value );
+-				}
+-				return +Globalize.parseDate( value );
+-			}
+-			return value;
+-		},
+-
+-		_format: function( value ) {
+-			return Globalize.format( new Date(value), "t" );
+-		}
+-	});
+-
+-	$(function() {
+-		$( "#spinner" ).timespinner();
+-
+-		$( "#culture" ).change(function() {
+-			var current = $( "#spinner" ).timespinner( "value" );
+-			Globalize.culture( $(this).val() );
+-			$( "#spinner" ).timespinner( "value", current );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="spinner">Time spinner:</label>
+-	<input id="spinner" name="spinner" value="08:30 PM">
+-</p>
+-<p>
+-	<label for="culture">Select a culture to use for formatting:</label>
+-	<select id="culture">
+-		<option value="en-EN" selected="selected">English</option>
+-		<option value="de-DE">German</option>
+-	</select>
+-</p>
+-
+-<div class="demo-description">
+-<p>
+-	A custom widget extending spinner. Use the Globalization plugin to parse and output
+-	a timestamp, with custom step and page options. Cursor up/down spins minutes, page up/down
+-	spins hours.
+-</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/latlong.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/latlong.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/spinner/latlong.html	(revision 15488)
+@@ -1,57 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Spinner - Map</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../external/jquery.mousewheel.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.spinner.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		function latlong() {
+-			return new google.maps.LatLng( $("#lat").val(), $("#lng").val() );
+-		}
+-		function position() {
+-			map.setCenter( latlong() );
+-		}
+-		$( "#lat, #lng" ).spinner({
+-			step: .001,
+-			change: position,
+-			stop: position
+-		});
+-
+-		var map = new google.maps.Map( $("#map")[0], {
+-			zoom: 8,
+-			center: latlong(),
+-			mapTypeId: google.maps.MapTypeId.ROADMAP
+-		});
+-	});
+-	</script>
+-	<style>
+-	#map {
+-		width:500px;
+-		height:500px;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<label for="lat">Latitude</label>
+-<input id="lat" name="lat" value="44.797">
+-<br>
+-<label for="lng">Longitude</label>
+-<input id="lng" name="lng" value="-93.278">
+-
+-<div id="map"></div>
+-
+-<div class="demo-description">
+-<p>Google Maps integration, using spinners to change latidude and longitude.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/animate.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/animate.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/animate.html	(revision 15488)
+@@ -1,36 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Animate</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable { width: 150px; height: 150px; padding: 0.5em; }
+-	#resizable h3 { text-align: center; margin: 0; }
+-	.ui-resizable-helper { border: 1px dotted gray; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			animate: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="resizable" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Animate</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Animate the resize action using the <code>animate</code> option (boolean). When this option is set to true, drag the outline to the desired location; the element animates to that size on drag stop.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/helper.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/helper.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/helper.html	(revision 15488)
+@@ -1,36 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Helper</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable { width: 150px; height: 150px; padding: 0.5em; }
+-	#resizable h3 { text-align: center; margin: 0; }
+-	.ui-resizable-helper { border: 2px dotted #00F; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			helper: "ui-resizable-helper"
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="resizable" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Helper</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Display only an outline of the element while resizing by setting the <code>helper</code> option to a CSS class.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/default.html	(revision 15488)
+@@ -1,33 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable { width: 150px; height: 150px; padding: 0.5em; }
+-	#resizable h3 { text-align: center; margin: 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="resizable" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Resizable</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Enable any DOM element to be resizable.  With the cursor grab the right or bottom border and drag to the desired width or height.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/snap-to-grid.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/snap-to-grid.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/snap-to-grid.html	(revision 15488)
+@@ -1,35 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Snap to grid</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable { width: 150px; height: 150px; padding: 0.5em; }
+-	#resizable h3 { text-align: center; margin: 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			grid: 50
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="resizable" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Grid</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Snap the resizable element to a grid.  Set the dimensions of grid cells (height and width in pixels) with the <code>grid</code> option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/visual-feedback.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/visual-feedback.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/visual-feedback.html	(revision 15488)
+@@ -1,36 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Visual feedback</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable { width: 150px; height: 150px; padding: 0.5em; }
+-	#resizable h3 { text-align: center; margin: 0; }
+-	.ui-resizable-ghost { border: 1px dotted gray; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			ghost: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="resizable" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Ghost</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Instead of showing the actual element during resize, set the <code>ghost</code> option to true to show a semi-transparent part of the element.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/constrain-area.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/constrain-area.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/constrain-area.html	(revision 15488)
+@@ -1,40 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Constrain resize area</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#container { width: 300px; height: 300px; }
+-	#container h3 { text-align: center; margin: 0; margin-bottom: 10px; }
+-	#resizable { background-position: top left; width: 150px; height: 150px; }
+-	#resizable, #container { padding: 0.5em; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			containment: "#container"
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="container" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Containment</h3>
+-	<div id="resizable" class="ui-state-active">
+-		<h3 class="ui-widget-header">Resizable</h3>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Define the boundaries of the resizable area. Use the <code>containment</code> option to specify a parent DOM element or a jQuery selector, like 'document.'</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/max-min.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/max-min.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/max-min.html	(revision 15488)
+@@ -1,38 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Maximum / minimum size</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable { width: 200px; height: 150px; padding: 5px; }
+-	#resizable h3 { text-align: center; margin: 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			maxHeight: 250,
+-			maxWidth: 350,
+-			minHeight: 150,
+-			minWidth: 200
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="resizable" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Resize larger / smaller</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Limit the resizable element to a maximum or minimum height or width using the <code>maxHeight</code>, <code>maxWidth</code>, <code>minHeight</code>, and <code>minWidth</code> options.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/index.html	(revision 15488)
+@@ -1,24 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="aspect-ratio.html">Preserve aspect ratio</a></li>
+-	<li><a href="max-min.html">Maximum / minimum size</a></li>
+-	<li><a href="constrain-area.html">Constrain resize area</a></li>
+-	<li><a href="delay-start.html">Delay start</a></li>
+-	<li><a href="snap-to-grid.html">Snap to grid</a></li>
+-	<li><a href="visual-feedback.html">Visual feedback</a></li>
+-	<li><a href="synchronous-resize.html">Synchronous resize</a></li>
+-	<li><a href="animate.html">Animate</a></li>
+-	<li><a href="helper.html">Resize Helper</a></li>
+-	<li><a href="textarea.html">Textarea</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/delay-start.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/delay-start.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/delay-start.html	(revision 15488)
+@@ -1,45 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Delay start</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable, #resizable2 { width: 150px; height: 150px; padding: 0.5em; }
+-	#resizable h3, #resizable2 h3 { text-align: center; margin: 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			delay: 1000
+-		});
+-
+-		$( "#resizable2" ).resizable({
+-			distance: 40
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<h3 class="docs">Time delay (ms):</h3>
+-<div id="resizable" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Time</h3>
+-</div>
+-
+-<h3 class="docs">Distance delay (px):</h3>
+-<div id="resizable2" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Distance</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Delay the start of resizng for a number of milliseconds with the <code>delay</code> option; prevent resizing until the cursor is held down and dragged a specifed number of pixels with the <code>distance</code> option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/synchronous-resize.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/synchronous-resize.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/synchronous-resize.html	(revision 15488)
+@@ -1,42 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Synchronous resize</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable { background-position: top left; }
+-	#resizable, #also { width: 150px; height: 120px; padding: 0.5em; }
+-	#resizable h3, #also h3 { text-align: center; margin: 0; }
+-	#also { margin-top: 1em; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			alsoResize: "#also"
+-		});
+-		$( "#also" ).resizable();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="resizable" class="ui-widget-header">
+-	<h3 class="ui-state-active">Resize</h3>
+-</div>
+-
+-<div id="also" class="ui-widget-content">
+-	<h3 class="ui-widget-header">will also resize</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Resize multiple elements simultaneously by clicking and dragging the sides of one.  Pass a shared selector into the <code>alsoResize</code> option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/aspect-ratio.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/aspect-ratio.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/aspect-ratio.html	(revision 15488)
+@@ -1,35 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Preserve aspect ratio</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#resizable { width: 160px; height: 90px; padding: 0.5em; }
+-	#resizable h3 { text-align: center; margin: 0; }
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			aspectRatio: 16 / 9
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="resizable" class="ui-widget-content">
+-	<h3 class="ui-widget-header">Preserve aspect ratio</h3>
+-</div>
+-
+-<div class="demo-description">
+-<p>Maintain the existing aspect ratio or set a new one to constrain the proportions on resize. Set the <code>aspectRatio</code> option to true, and optionally pass in a new ratio (i.e., 4/3)</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/textarea.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/textarea.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/resizable/textarea.html	(revision 15488)
+@@ -1,34 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Resizable - Textarea</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-resizable-se {
+-		bottom: 17px;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		$( "#resizable" ).resizable({
+-			handles: "se"
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<textarea id="resizable" rows="5" cols="20"></textarea>
+-
+-<div class="demo-description">
+-<p>Display only an outline of the element while resizing by setting the <code>helper</code> option to a CSS class.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/index.html	(revision 15488)
+@@ -1,24 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="steps.html">Snap to increments</a></li>
+-	<li><a href="range.html">Range slider</a></li>
+-	<li><a href="rangemin.html">Range with fixed minimum</a></li>
+-	<li><a href="hotelrooms.html">Room reservation</a></li>
+-	<li><a href="rangemax.html">Range with fixed maximum</a></li>
+-	<li><a href="slider-vertical.html">Vertical slider</a></li>
+-	<li><a href="range-vertical.html">Vertical range slider</a></li>
+-	<li><a href="multiple-vertical.html">Multiple sliders</a></li>
+-	<li><a href="colorpicker.html">Simple colorpicker</a></li>
+-	<li><a href="side-scroll.html">Simple scrollbar</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/slider-vertical.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/slider-vertical.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/slider-vertical.html	(revision 15488)
+@@ -1,42 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Vertical slider</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#slider-vertical" ).slider({
+-			orientation: "vertical",
+-			range: "min",
+-			min: 0,
+-			max: 100,
+-			value: 60,
+-			slide: function( event, ui ) {
+-				$( "#amount" ).val( ui.value );
+-			}
+-		});
+-		$( "#amount" ).val( $( "#slider-vertical" ).slider( "value" ) );
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="amount">Volume:</label>
+-	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
+-</p>
+-
+-<div id="slider-vertical" style="height:200px;"></div>
+-
+-<div class="demo-description">
+-<p>Change the orientation of the slider to vertical.  Assign a height value via <code>.height()</code> or by setting the height through CSS, and set the <code>orientation</code> option to "vertical."</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/hotelrooms.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/hotelrooms.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/hotelrooms.html	(revision 15488)
+@@ -1,49 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Slider bound to select</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		var select = $( "#minbeds" );
+-		var slider = $( "<div id='slider'></div>" ).insertAfter( select ).slider({
+-			min: 1,
+-			max: 6,
+-			range: "min",
+-			value: select[ 0 ].selectedIndex + 1,
+-			slide: function( event, ui ) {
+-				select[ 0 ].selectedIndex = ui.value - 1;
+-			}
+-		});
+-		$( "#minbeds" ).change(function() {
+-			slider.slider( "value", this.selectedIndex + 1 );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<form id="reservation">
+-	<label for="minbeds">Minimum number of beds</label>
+-	<select name="minbeds" id="minbeds">
+-		<option>1</option>
+-		<option>2</option>
+-		<option>3</option>
+-		<option>4</option>
+-		<option>5</option>
+-		<option>6</option>
+-	</select>
+-</form>
+-
+-<div class="demo-description">
+-<p>How to bind a slider to an existing select element. The select stays visible to display the change. When the select is changed, the slider is updated, too.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/colorpicker.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/colorpicker.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/colorpicker.html	(revision 15488)
+@@ -1,87 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Colorpicker</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#red, #green, #blue {
+-		float: left;
+-		clear: left;
+-		width: 300px;
+-		margin: 15px;
+-	}
+-	#swatch {
+-		width: 120px;
+-		height: 100px;
+-		margin-top: 18px;
+-		margin-left: 350px;
+-		background-image: none;
+-	}
+-	#red .ui-slider-range { background: #ef2929; }
+-	#red .ui-slider-handle { border-color: #ef2929; }
+-	#green .ui-slider-range { background: #8ae234; }
+-	#green .ui-slider-handle { border-color: #8ae234; }
+-	#blue .ui-slider-range { background: #729fcf; }
+-	#blue .ui-slider-handle { border-color: #729fcf; }
+-	</style>
+-	<script>
+-	function hexFromRGB(r, g, b) {
+-		var hex = [
+-			r.toString( 16 ),
+-			g.toString( 16 ),
+-			b.toString( 16 )
+-		];
+-		$.each( hex, function( nr, val ) {
+-			if ( val.length === 1 ) {
+-				hex[ nr ] = "0" + val;
+-			}
+-		});
+-		return hex.join( "" ).toUpperCase();
+-	}
+-	function refreshSwatch() {
+-		var red = $( "#red" ).slider( "value" ),
+-			green = $( "#green" ).slider( "value" ),
+-			blue = $( "#blue" ).slider( "value" ),
+-			hex = hexFromRGB( red, green, blue );
+-		$( "#swatch" ).css( "background-color", "#" + hex );
+-	}
+-	$(function() {
+-		$( "#red, #green, #blue" ).slider({
+-			orientation: "horizontal",
+-			range: "min",
+-			max: 255,
+-			value: 127,
+-			slide: refreshSwatch,
+-			change: refreshSwatch
+-		});
+-		$( "#red" ).slider( "value", 255 );
+-		$( "#green" ).slider( "value", 140 );
+-		$( "#blue" ).slider( "value", 60 );
+-	});
+-	</script>
+-</head>
+-<body class="ui-widget-content" style="border:0;">
+-
+-<p class="ui-state-default ui-corner-all ui-helper-clearfix" style="padding:4px;">
+-	<span class="ui-icon ui-icon-pencil" style="float:left; margin:-2px 5px 0 0;"></span>
+-	Simple Colorpicker
+-</p>
+-
+-<div id="red"></div>
+-<div id="green"></div>
+-<div id="blue"></div>
+-
+-<div id="swatch" class="ui-widget-content ui-corner-all"></div>
+-
+-<div class="demo-description">
+-<p>Combine three sliders to create a simple RGB colorpicker.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range.html	(revision 15488)
+@@ -1,42 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Range slider</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#slider-range" ).slider({
+-			range: true,
+-			min: 0,
+-			max: 500,
+-			values: [ 75, 300 ],
+-			slide: function( event, ui ) {
+-				$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
+-			}
+-		});
+-		$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
+-			" - $" + $( "#slider-range" ).slider( "values", 1 ) );
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="amount">Price range:</label>
+-	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
+-</p>
+-
+-<div id="slider-range"></div>
+-
+-<div class="demo-description">
+-<p>Set the <code>range</code> option to true to capture a range of values with two drag handles.  The space between the handles is filled with a different background color to indicate those values are selected.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/steps.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/steps.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/steps.html	(revision 15488)
+@@ -1,41 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Snap to increments</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#slider" ).slider({
+-			value:100,
+-			min: 0,
+-			max: 500,
+-			step: 50,
+-			slide: function( event, ui ) {
+-				$( "#amount" ).val( "$" + ui.value );
+-			}
+-		});
+-		$( "#amount" ).val( "$" + $( "#slider" ).slider( "value" ) );
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="amount">Donation amount ($50 increments):</label>
+-	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
+-</p>
+-
+-<div id="slider"></div>
+-
+-<div class="demo-description">
+-<p>Increment slider values with the <code>step</code> option set to an integer, commonly a dividend of the slider's maximum value.  The default increment is 1.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemin.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemin.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemin.html	(revision 15488)
+@@ -1,41 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Range with fixed minimum</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#slider-range-min" ).slider({
+-			range: "min",
+-			value: 37,
+-			min: 1,
+-			max: 700,
+-			slide: function( event, ui ) {
+-				$( "#amount" ).val( "$" + ui.value );
+-			}
+-		});
+-		$( "#amount" ).val( "$" + $( "#slider-range-min" ).slider( "value" ) );
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="amount">Maximum price:</label>
+-	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
+-</p>
+-
+-<div id="slider-range-min"></div>
+-
+-<div class="demo-description">
+-<p>Fix the minimum value of the range slider so that the user can only select a maximum.  Set the <code>range</code> option to "min."</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/side-scroll.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/side-scroll.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/side-scroll.html	(revision 15488)
+@@ -1,131 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Slider scrollbar</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.scroll-pane { overflow: auto; width: 99%; float:left; }
+-	.scroll-content { width: 2440px; float: left; }
+-	.scroll-content-item { width: 100px; height: 100px; float: left; margin: 10px; font-size: 3em; line-height: 96px; text-align: center; }
+-	.scroll-bar-wrap { clear: left; padding: 0 4px 0 2px; margin: 0 -1px -1px -1px; }
+-	.scroll-bar-wrap .ui-slider { background: none; border:0; height: 2em; margin: 0 auto;  }
+-	.scroll-bar-wrap .ui-handle-helper-parent { position: relative; width: 100%; height: 100%; margin: 0 auto; }
+-	.scroll-bar-wrap .ui-slider-handle { top:.2em; height: 1.5em; }
+-	.scroll-bar-wrap .ui-slider-handle .ui-icon { margin: -8px auto 0; position: relative; top: 50%; }
+-	</style>
+-	<script>
+-	$(function() {
+-		//scrollpane parts
+-		var scrollPane = $( ".scroll-pane" ),
+-			scrollContent = $( ".scroll-content" );
+-
+-		//build slider
+-		var scrollbar = $( ".scroll-bar" ).slider({
+-			slide: function( event, ui ) {
+-				if ( scrollContent.width() > scrollPane.width() ) {
+-					scrollContent.css( "margin-left", Math.round(
+-						ui.value / 100 * ( scrollPane.width() - scrollContent.width() )
+-					) + "px" );
+-				} else {
+-					scrollContent.css( "margin-left", 0 );
+-				}
+-			}
+-		});
+-
+-		//append icon to handle
+-		var handleHelper = scrollbar.find( ".ui-slider-handle" )
+-		.mousedown(function() {
+-			scrollbar.width( handleHelper.width() );
+-		})
+-		.mouseup(function() {
+-			scrollbar.width( "100%" );
+-		})
+-		.append( "<span class='ui-icon ui-icon-grip-dotted-vertical'></span>" )
+-		.wrap( "<div class='ui-handle-helper-parent'></div>" ).parent();
+-
+-		//change overflow to hidden now that slider handles the scrolling
+-		scrollPane.css( "overflow", "hidden" );
+-
+-		//size scrollbar and handle proportionally to scroll distance
+-		function sizeScrollbar() {
+-			var remainder = scrollContent.width() - scrollPane.width();
+-			var proportion = remainder / scrollContent.width();
+-			var handleSize = scrollPane.width() - ( proportion * scrollPane.width() );
+-			scrollbar.find( ".ui-slider-handle" ).css({
+-				width: handleSize,
+-				"margin-left": -handleSize / 2
+-			});
+-			handleHelper.width( "" ).width( scrollbar.width() - handleSize );
+-		}
+-
+-		//reset slider value based on scroll content position
+-		function resetValue() {
+-			var remainder = scrollPane.width() - scrollContent.width();
+-			var leftVal = scrollContent.css( "margin-left" ) === "auto" ? 0 :
+-				parseInt( scrollContent.css( "margin-left" ) );
+-			var percentage = Math.round( leftVal / remainder * 100 );
+-			scrollbar.slider( "value", percentage );
+-		}
+-
+-		//if the slider is 100% and window gets larger, reveal content
+-		function reflowContent() {
+-				var showing = scrollContent.width() + parseInt( scrollContent.css( "margin-left" ), 10 );
+-				var gap = scrollPane.width() - showing;
+-				if ( gap > 0 ) {
+-					scrollContent.css( "margin-left", parseInt( scrollContent.css( "margin-left" ), 10 ) + gap );
+-				}
+-		}
+-
+-		//change handle position on window resize
+-		$( window ).resize(function() {
+-			resetValue();
+-			sizeScrollbar();
+-			reflowContent();
+-		});
+-		//init scrollbar size
+-		setTimeout( sizeScrollbar, 10 );//safari wants a timeout
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="scroll-pane ui-widget ui-widget-header ui-corner-all">
+-	<div class="scroll-content">
+-		<div class="scroll-content-item ui-widget-header">1</div>
+-		<div class="scroll-content-item ui-widget-header">2</div>
+-		<div class="scroll-content-item ui-widget-header">3</div>
+-		<div class="scroll-content-item ui-widget-header">4</div>
+-		<div class="scroll-content-item ui-widget-header">5</div>
+-		<div class="scroll-content-item ui-widget-header">6</div>
+-		<div class="scroll-content-item ui-widget-header">7</div>
+-		<div class="scroll-content-item ui-widget-header">8</div>
+-		<div class="scroll-content-item ui-widget-header">9</div>
+-		<div class="scroll-content-item ui-widget-header">10</div>
+-		<div class="scroll-content-item ui-widget-header">11</div>
+-		<div class="scroll-content-item ui-widget-header">12</div>
+-		<div class="scroll-content-item ui-widget-header">13</div>
+-		<div class="scroll-content-item ui-widget-header">14</div>
+-		<div class="scroll-content-item ui-widget-header">15</div>
+-		<div class="scroll-content-item ui-widget-header">16</div>
+-		<div class="scroll-content-item ui-widget-header">17</div>
+-		<div class="scroll-content-item ui-widget-header">18</div>
+-		<div class="scroll-content-item ui-widget-header">19</div>
+-		<div class="scroll-content-item ui-widget-header">20</div>
+-	</div>
+-	<div class="scroll-bar-wrap ui-widget-content ui-corner-bottom">
+-		<div class="scroll-bar"></div>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Use a slider to manipulate the positioning of content on the page. In this case, it acts as a scrollbar with the potential to capture values if needed.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/multiple-vertical.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/multiple-vertical.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/multiple-vertical.html	(revision 15488)
+@@ -1,69 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Multiple sliders</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#eq span {
+-		height:120px; float:left; margin:15px
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		// setup master volume
+-		$( "#master" ).slider({
+-			value: 60,
+-			orientation: "horizontal",
+-			range: "min",
+-			animate: true
+-		});
+-		// setup graphic EQ
+-		$( "#eq > span" ).each(function() {
+-			// read initial values from markup and remove that
+-			var value = parseInt( $( this ).text(), 10 );
+-			$( this ).empty().slider({
+-				value: value,
+-				range: "min",
+-				animate: true,
+-				orientation: "vertical"
+-			});
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p class="ui-state-default ui-corner-all ui-helper-clearfix" style="padding:4px;">
+-	<span class="ui-icon ui-icon-volume-on" style="float:left; margin:-2px 5px 0 0;"></span>
+-	Master volume
+-</p>
+-
+-<div id="master" style="width:260px; margin:15px;"></div>
+-
+-<p class="ui-state-default ui-corner-all" style="padding:4px;margin-top:4em;">
+-	<span class="ui-icon ui-icon-signal" style="float:left; margin:-2px 5px 0 0;"></span>
+-	Graphic EQ
+-</p>
+-
+-<div id="eq">
+-	<span>88</span>
+-	<span>77</span>
+-	<span>55</span>
+-	<span>33</span>
+-	<span>40</span>
+-	<span>45</span>
+-	<span>70</span>
+-</div>
+-
+-<div class="demo-description">
+-<p>Combine horizontal and vertical sliders, each with their own options, to create the UI for a music player.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemax.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemax.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemax.html	(revision 15488)
+@@ -1,40 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Range with fixed maximum</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#slider-range-max" ).slider({
+-			range: "max",
+-			min: 1,
+-			max: 10,
+-			value: 2,
+-			slide: function( event, ui ) {
+-				$( "#amount" ).val( ui.value );
+-			}
+-		});
+-		$( "#amount" ).val( $( "#slider-range-max" ).slider( "value" ) );
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="amount">Minimum number of bedrooms:</label>
+-	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
+-</p>
+-<div id="slider-range-max"></div>
+-
+-<div class="demo-description">
+-<p>Fix the maximum value of the range slider so that the user can only select a minimum.  Set the <code>range</code> option to "max."</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range-vertical.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range-vertical.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/range-vertical.html	(revision 15488)
+@@ -1,41 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Slider - Vertical range slider</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#slider-range" ).slider({
+-			orientation: "vertical",
+-			range: true,
+-			values: [ 17, 67 ],
+-			slide: function( event, ui ) {
+-				$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
+-			}
+-		});
+-		$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
+-			" - $" + $( "#slider-range" ).slider( "values", 1 ) );
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>
+-	<label for="amount">Target sales goal (Millions):</label>
+-	<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
+-</p>
+-
+-<div id="slider-range" style="height:250px;"></div>
+-
+-<div class="demo-description">
+-<p>Change the orientation of the range slider to vertical.  Assign a height value via <code>.height()</code> or by setting the height through CSS, and set the <code>orientation</code> option to "vertical."</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/slider/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/slider/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/slider/default.html	(revision 15488)
+@@ -1,27 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8" >
+-	<title>jQuery UI Slider - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.slider.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#slider" ).slider();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="slider"></div>
+-
+-<div class="demo-description">
+-<p>The basic slider is horizontal and has a single handle that can be moved with the mouse or by using the arrow keys.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/widget/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/widget/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/widget/default.html	(revision 15488)
+@@ -1,178 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Widget - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.custom-colorize {
+-		font-size: 20px;
+-		position: relative;
+-		width: 75px;
+-		height: 75px;
+-	}
+-	.custom-colorize-changer {
+-		font-size: 10px;
+-		position: absolute;
+-		right: 0;
+-		bottom: 0;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		// the widget definition, where "custom" is the namespace,
+-		// "colorize" the widget name
+-		$.widget( "custom.colorize", {
+-			// default options
+-			options: {
+-				red: 255,
+-				green: 0,
+-				blue: 0,
+-
+-				// callbacks
+-				change: null,
+-				random: null
+-			},
+-
+-			// the constructor
+-			_create: function() {
+-				this.element
+-					// add a class for theming
+-					.addClass( "custom-colorize" )
+-					// prevent double click to select text
+-					.disableSelection();
+-
+-				this.changer = $( "<button>", {
+-					text: "change",
+-					"class": "custom-colorize-changer"
+-				})
+-				.appendTo( this.element )
+-				.button();
+-
+-				// bind click events on the changer button to the random method
+-				this._on( this.changer, {
+-					// _on won't call random when widget is disabled
+-					click: "random"
+-				});
+-				this._refresh();
+-			},
+-
+-			// called when created, and later when changing options
+-			_refresh: function() {
+-				this.element.css( "background-color", "rgb(" +
+-					this.options.red +"," +
+-					this.options.green + "," +
+-					this.options.blue + ")"
+-				);
+-
+-				// trigger a callback/event
+-				this._trigger( "change" );
+-			},
+-
+-			// a public method to change the color to a random value
+-			// can be called directly via .colorize( "random" )
+-			random: function( event ) {
+-				var colors = {
+-					red: Math.floor( Math.random() * 256 ),
+-					green: Math.floor( Math.random() * 256 ),
+-					blue: Math.floor( Math.random() * 256 )
+-				};
+-
+-				// trigger an event, check if it's canceled
+-				if ( this._trigger( "random", event, colors ) !== false ) {
+-					this.option( colors );
+-				}
+-			},
+-
+-			// events bound via _on are removed automatically
+-			// revert other modifications here
+-			_destroy: function() {
+-				// remove generated elements
+-				this.changer.remove();
+-
+-				this.element
+-					.removeClass( "custom-colorize" )
+-					.enableSelection()
+-					.css( "background-color", "transparent" );
+-			},
+-
+-			// _setOptions is called with a hash of all options that are changing
+-			// always refresh when changing options
+-			_setOptions: function() {
+-				// _super and _superApply handle keeping the right this-context
+-				this._superApply( arguments );
+-				this._refresh();
+-			},
+-
+-			// _setOption is called for each individual option that is changing
+-			_setOption: function( key, value ) {
+-				// prevent invalid color values
+-				if ( /red|green|blue/.test(key) && (value < 0 || value > 255) ) {
+-					return;
+-				}
+-				this._super( key, value );
+-			}
+-		});
+-
+-		// initialize with default options
+-		$( "#my-widget1" ).colorize();
+-
+-		// initialize with two customized options
+-		$( "#my-widget2" ).colorize({
+-			red: 60,
+-			blue: 60
+-		});
+-
+-		// initialize with custom green value
+-		// and a random callback to allow only colors with enough green
+-		$( "#my-widget3" ).colorize( {
+-			green: 128,
+-			random: function( event, ui ) {
+-				return ui.green > 128;
+-			}
+-		});
+-
+-		// click to toggle enabled/disabled
+-		$( "#disable" ).click(function() {
+-			// use the custom selector created for each widget to find all instances
+-			// all instances are toggled together, so we can check the state from the first
+-			if ( $( ":custom-colorize" ).colorize( "option", "disabled" ) ) {
+-				$( ":custom-colorize" ).colorize( "enable" );
+-			} else {
+-				$( ":custom-colorize" ).colorize( "disable" );
+-			}
+-		});
+-
+-		// click to set options after initalization
+-		$( "#black" ).click( function() {
+-			$( ":custom-colorize" ).colorize( "option", {
+-				red: 0,
+-				green: 0,
+-				blue: 0
+-			});
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div>
+-	<div id="my-widget1">color me</div>
+-	<div id="my-widget2">color me</div>
+-	<div id="my-widget3">color me</div>
+-	<button id="disable">Toggle disabled option</button>
+-	<button id="black">Go black</button>
+-</div>
+-
+-<div class="demo-description">
+-<p>This demo shows a simple custom widget built using the widget factory (jquery.ui.widget.js).</p>
+-<p>The three boxes are initialized in different ways. Clicking them changes their background color. View source to see how it works, its heavily commented</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/widget/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/widget/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/widget/index.html	(revision 15488)
+@@ -1,14 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Widget Demo</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content1.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content1.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content1.html	(revision 15488)
+@@ -1,4 +0,0 @@
+-<p><strong>This content was loaded via ajax.</strong></p>
+-<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-<p>Mauris vitae ante. Curabitur augue. Nulla purus nibh, lobortis ut, feugiat at, aliquam id, purus. Sed venenatis, lorem venenatis volutpat commodo, purus quam lacinia justo, mattis interdum pede pede a odio. Fusce nibh. Morbi nisl mauris, dapibus in, tristique eget, accumsan et, pede. Donec mauris risus, pulvinar ut, faucibus eu, mollis in, nunc. In augue massa, commodo a, cursus vehicula, varius eu, dui. Suspendisse sodales suscipit lorem. Morbi malesuada, eros quis condimentum dignissim, lectus nibh tristique urna, non bibendum diam massa vel risus. Morbi suscipit. Proin egestas, eros at scelerisque scelerisque, dolor lacus fringilla lacus, ut ullamcorper mi magna at quam. Aliquam sed elit. Aliquam turpis purus, congue quis, iaculis id, ullamcorper sit amet, justo. Maecenas sed mauris. Proin magna justo, interdum in, tincidunt eu, viverra eu, turpis. Suspendisse mollis. In magna. Phasellus pellentesque, urna pellentesque convallis pellentesque, augue sem blandit pede, at rhoncus libero nisl a odio.</p>
+-<p>Sed vitae nibh non magna semper tempor. Duis dolor. Nam congue laoreet arcu. Fusce lobortis enim quis ligula. Maecenas commodo odio id mi. Maecenas scelerisque tellus eu odio. Etiam dolor purus, lacinia a, imperdiet in, aliquam et, eros. In pellentesque. Nullam ac massa. Integer et turpis. Ut quam augue, congue non, imperdiet id, eleifend ac, nisi. Etiam ac arcu. Cras iaculis accumsan erat. Nullam vulputate sapien nec nisi pretium rhoncus. Aliquam a nibh. Vivamus est ante, fermentum a, tincidunt ut, imperdiet nec, velit. Aenean non tortor. Sed nec mauris eget tellus condimentum rutrum.</p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content2.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content2.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content2.html	(revision 15488)
+@@ -1,4 +0,0 @@
+-<p><strong>This other content was loaded via ajax.</strong></p>
+-<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec turpis justo, et facilisis ligula. In congue interdum odio, a scelerisque eros posuere ac. Aenean massa tellus, dictum sit amet laoreet ut, aliquam in orci. Duis eu aliquam ligula. Nullam vel placerat ligula. Fusce venenatis viverra dictum. Phasellus dui dolor, imperdiet in sodales at, mattis sed libero. Morbi ac ipsum ligula. Quisque suscipit dui vel diam pretium nec cursus lacus malesuada. Donec sollicitudin, eros eget dignissim mollis, risus leo feugiat tellus, vel posuere nisl ipsum eu erat. Quisque posuere lacinia imperdiet. Quisque nunc leo, elementum quis ultricies et, vehicula sit amet turpis. Nullam sed nunc nec nibh condimentum mattis. Quisque sed ligula sit amet nisi ultricies bibendum eget id nisi.</p>
+-<p>Proin ut erat vel nunc tincidunt commodo. Curabitur feugiat, nisi et vehicula viverra, nisl orci eleifend arcu, sed blandit lectus nisl quis nisi. In hac habitasse platea dictumst. In hac habitasse platea dictumst. Aenean rutrum gravida velit ac imperdiet. Integer vitae arcu risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin tincidunt orci at leo egestas porta. Vivamus ac augue et enim bibendum hendrerit ut id urna. Donec sollicitudin pulvinar turpis vitae scelerisque. Etiam tempor porttitor est sed blandit. Phasellus varius consequat leo eget tincidunt. Aliquam ac dui lectus. In et consectetur orci. Duis posuere nulla ac turpis faucibus vestibulum. Sed ut velit et dolor rhoncus dapibus. Sed sit amet pellentesque est.</p>
+-<p>Nam in volutpat orci. Morbi sit amet orci in erat egestas dignissim. Etiam mi sapien, tempus sed iaculis a, adipiscing quis tellus. Suspendisse potenti. Nam malesuada tristique vestibulum. In tempor tellus dignissim neque consectetur eu vestibulum nisl pellentesque. Phasellus ultrices cursus velit, id aliquam nisl fringilla quis. Cras varius elit sed urna ultrices congue. Sed ornare odio sed velit pellentesque id varius nisl sodales. Sed auctor ligula egestas mi pharetra ut consectetur erat pharetra.</p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content4-broken.php
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content4-broken.php	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content4-broken.php	(revision 15488)
+@@ -1,3 +0,0 @@
+-<?php 
+-header("HTTP/1.0 404 Not Found");
+-?>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content3-slow.php
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content3-slow.php	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content3-slow.php	(revision 15488)
+@@ -1,7 +0,0 @@
+-<?php
+-sleep(1);
+-?>
+-<p><strong>This content was loaded via ajax, though it took a second.</strong></p>
+-<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec turpis justo, et facilisis ligula. In congue interdum odio, a scelerisque eros posuere ac. Aenean massa tellus, dictum sit amet laoreet ut, aliquam in orci. Duis eu aliquam ligula. Nullam vel placerat ligula. Fusce venenatis viverra dictum. Phasellus dui dolor, imperdiet in sodales at, mattis sed libero. Morbi ac ipsum ligula. Quisque suscipit dui vel diam pretium nec cursus lacus malesuada. Donec sollicitudin, eros eget dignissim mollis, risus leo feugiat tellus, vel posuere nisl ipsum eu erat. Quisque posuere lacinia imperdiet. Quisque nunc leo, elementum quis ultricies et, vehicula sit amet turpis. Nullam sed nunc nec nibh condimentum mattis. Quisque sed ligula sit amet nisi ultricies bibendum eget id nisi.</p>
+-<p>Proin ut erat vel nunc tincidunt commodo. Curabitur feugiat, nisi et vehicula viverra, nisl orci eleifend arcu, sed blandit lectus nisl quis nisi. In hac habitasse platea dictumst. In hac habitasse platea dictumst. Aenean rutrum gravida velit ac imperdiet. Integer vitae arcu risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin tincidunt orci at leo egestas porta. Vivamus ac augue et enim bibendum hendrerit ut id urna. Donec sollicitudin pulvinar turpis vitae scelerisque. Etiam tempor porttitor est sed blandit. Phasellus varius consequat leo eget tincidunt. Aliquam ac dui lectus. In et consectetur orci. Duis posuere nulla ac turpis faucibus vestibulum. Sed ut velit et dolor rhoncus dapibus. Sed sit amet pellentesque est.</p>
+-<p>Nam in volutpat orci. Morbi sit amet orci in erat egestas dignissim. Etiam mi sapien, tempus sed iaculis a, adipiscing quis tellus. Suspendisse potenti. Nam malesuada tristique vestibulum. In tempor tellus dignissim neque consectetur eu vestibulum nisl pellentesque. Phasellus ultrices cursus velit, id aliquam nisl fringilla quis. Cras varius elit sed urna ultrices congue. Sed ornare odio sed velit pellentesque id varius nisl sodales. Sed auctor ligula egestas mi pharetra ut consectetur erat pharetra.</p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/manipulation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/manipulation.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/manipulation.html	(revision 15488)
+@@ -1,122 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs - Simple manipulation</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<script src="../../ui/jquery.ui.dialog.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	#dialog label, #dialog input { display:block; }
+-	#dialog label { margin-top: 0.5em; }
+-	#dialog input, #dialog textarea { width: 95%; }
+-	#tabs { margin-top: 1em; }
+-	#tabs li .ui-icon-close { float: left; margin: 0.4em 0.2em 0 0; cursor: pointer; }
+-	#add_tab { cursor: pointer; }
+-	</style>
+-	<script>
+-	$(function() {
+-		var tabTitle = $( "#tab_title" ),
+-			tabContent = $( "#tab_content" ),
+-			tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>",
+-			tabCounter = 2;
+-
+-		var tabs = $( "#tabs" ).tabs();
+-
+-		// modal dialog init: custom buttons and a "close" callback reseting the form inside
+-		var dialog = $( "#dialog" ).dialog({
+-			autoOpen: false,
+-			modal: true,
+-			buttons: {
+-				Add: function() {
+-					addTab();
+-					$( this ).dialog( "close" );
+-				},
+-				Cancel: function() {
+-					$( this ).dialog( "close" );
+-				}
+-			},
+-			close: function() {
+-				form[ 0 ].reset();
+-			}
+-		});
+-
+-		// addTab form: calls addTab function on submit and closes the dialog
+-		var form = dialog.find( "form" ).submit(function( event ) {
+-			addTab();
+-			dialog.dialog( "close" );
+-			event.preventDefault();
+-		});
+-
+-		// actual addTab function: adds new tab using the input from the form above
+-		function addTab() {
+-			var label = tabTitle.val() || "Tab " + tabCounter,
+-				id = "tabs-" + tabCounter,
+-				li = $( tabTemplate.replace( /#\{href\}/g, "#" + id ).replace( /#\{label\}/g, label ) ),
+-				tabContentHtml = tabContent.val() || "Tab " + tabCounter + " content.";
+-
+-			tabs.find( ".ui-tabs-nav" ).append( li );
+-			tabs.append( "<div id='" + id + "'><p>" + tabContentHtml + "</p></div>" );
+-			tabs.tabs( "refresh" );
+-			tabCounter++;
+-		}
+-
+-		// addTab button: just opens the dialog
+-		$( "#add_tab" )
+-			.button()
+-			.click(function() {
+-				dialog.dialog( "open" );
+-			});
+-
+-		// close icon: removing the tab on click
+-		tabs.delegate( "span.ui-icon-close", "click", function() {
+-			var panelId = $( this ).closest( "li" ).remove().attr( "aria-controls" );
+-			$( "#" + panelId ).remove();
+-			tabs.tabs( "refresh" );
+-		});
+-
+-		tabs.bind( "keyup", function( event ) {
+-			if ( event.altKey && event.keyCode === $.ui.keyCode.BACKSPACE ) {
+-				var panelId = tabs.find( ".ui-tabs-active" ).remove().attr( "aria-controls" );
+-				$( "#" + panelId ).remove();
+-				tabs.tabs( "refresh" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="dialog" title="Tab data">
+-	<form>
+-		<fieldset class="ui-helper-reset">
+-			<label for="tab_title">Title</label>
+-			<input type="text" name="tab_title" id="tab_title" value="" class="ui-widget-content ui-corner-all" />
+-			<label for="tab_content">Content</label>
+-			<textarea name="tab_content" id="tab_content" class="ui-widget-content ui-corner-all"></textarea>
+-		</fieldset>
+-	</form>
+-</div>
+-
+-<button id="add_tab">Add Tab</button>
+-
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">Nunc tincidunt</a> <span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span></li>
+-	</ul>
+-	<div id="tabs-1">
+-		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Simple tabs adding and removing.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax.html	(revision 15488)
+@@ -1,46 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs - Content via Ajax</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#tabs" ).tabs({
+-			beforeLoad: function( event, ui ) {
+-				ui.jqXHR.error(function() {
+-					ui.panel.html(
+-						"Couldn't load this tab. We'll try to fix this as soon as possible. " +
+-						"If this wouldn't be a demo." );
+-				});
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">Preloaded</a></li>
+-		<li><a href="ajax/content1.html">Tab 1</a></li>
+-		<li><a href="ajax/content2.html">Tab 2</a></li>
+-		<li><a href="ajax/content3-slow.php">Tab 3 (slow)</a></li>
+-		<li><a href="ajax/content4-broken.php">Tab 4 (broken)</a></li>
+-	</ul>
+-	<div id="tabs-1">
+-		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Fetch external content via Ajax for the tabs by setting an href value in the tab links.  While the Ajax request is waiting for a response, the tab label changes to say "Loading...", then returns to the normal label once loaded.</p>
+-<p>Tabs 3 and 4 demonstrate slow-loading and broken AJAX tabs, and how to handle serverside errors in those cases. Note: These two require a webserver to interpret PHP. They won't work from the filesystem.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/bottom.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/bottom.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/bottom.html	(revision 15488)
+@@ -1,58 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs - Tabs at bottom</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#tabs" ).tabs();
+-
+-		// fix the classes
+-		$( ".tabs-bottom .ui-tabs-nav, .tabs-bottom .ui-tabs-nav > *" )
+-			.removeClass( "ui-corner-all ui-corner-top" )
+-			.addClass( "ui-corner-bottom" );
+-
+-		// move the nav to the bottom
+-		$( ".tabs-bottom .ui-tabs-nav" ).appendTo( ".tabs-bottom" );
+-	});
+-	</script>
+-	<style>
+-	/* force a height so the tabs don't jump as content height changes */
+-	#tabs .tabs-spacer { float: left; height: 200px; }
+-	.tabs-bottom .ui-tabs-nav { clear: left; padding: 0 .2em .2em .2em; }
+-	.tabs-bottom .ui-tabs-nav li { top: auto; bottom: 0; margin: 0 .2em 1px 0; border-bottom: auto; border-top: 0; }
+-	.tabs-bottom .ui-tabs-nav li.ui-tabs-active { margin-top: -1px; padding-top: 1px; }
+-	</style>
+-</head>
+-<body>
+-
+-<div id="tabs" class="tabs-bottom">
+-	<ul>
+-		<li><a href="#tabs-1">Nunc tincidunt</a></li>
+-		<li><a href="#tabs-2">Proin dolor</a></li>
+-		<li><a href="#tabs-3">Aenean lacinia</a></li>
+-	</ul>
+-	<div class="tabs-spacer"></div>
+-	<div id="tabs-1">
+-		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-	</div>
+-	<div id="tabs-2">
+-		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
+-	</div>
+-	<div id="tabs-3">
+-		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
+-		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>With some additional CSS (for positioning) and JS (to put the right classes on elements) the tabs can be placed below their content.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/default.html	(revision 15488)
+@@ -1,42 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#tabs" ).tabs();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">Nunc tincidunt</a></li>
+-		<li><a href="#tabs-2">Proin dolor</a></li>
+-		<li><a href="#tabs-3">Aenean lacinia</a></li>
+-	</ul>
+-	<div id="tabs-1">
+-		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-	</div>
+-	<div id="tabs-2">
+-		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
+-	</div>
+-	<div id="tabs-3">
+-		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
+-		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Click tabs to swap between content that is broken into logical sections.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/mouseover.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/mouseover.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/mouseover.html	(revision 15488)
+@@ -1,44 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs - Open on mouseover</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#tabs" ).tabs({
+-			event: "mouseover"
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">Nunc tincidunt</a></li>
+-		<li><a href="#tabs-2">Proin dolor</a></li>
+-		<li><a href="#tabs-3">Aenean lacinia</a></li>
+-	</ul>
+-	<div id="tabs-1">
+-		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-	</div>
+-	<div id="tabs-2">
+-		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
+-	</div>
+-	<div id="tabs-3">
+-		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
+-		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Toggle sections open/closed on mouseover with the <code>event</code> option. The default value for event is "click."</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/index.html	(revision 15488)
+@@ -1,20 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="ajax.html">Content via Ajax</a></li>
+-	<li><a href="mouseover.html">Open on mouseover</a></li>
+-	<li><a href="collapsible.html">Collapse content</a></li>
+-	<li><a href="sortable.html">Sortable</a></li>
+-	<li><a href="manipulation.html">Simple manipulation</a></li>
+-	<li><a href="bottom.html">Tabs below content</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/collapsible.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/collapsible.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/collapsible.html	(revision 15488)
+@@ -1,48 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs - Collapse content</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#tabs" ).tabs({
+-			collapsible: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">Nunc tincidunt</a></li>
+-		<li><a href="#tabs-2">Proin dolor</a></li>
+-		<li><a href="#tabs-3">Aenean lacinia</a></li>
+-	</ul>
+-	<div id="tabs-1">
+-		<p><strong>Click this tab again to close the content pane.</strong></p>
+-		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-	</div>
+-	<div id="tabs-2">
+-		<p><strong>Click this tab again to close the content pane.</strong></p>
+-		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
+-	</div>
+-	<div id="tabs-3">
+-		<p><strong>Click this tab again to close the content pane.</strong></p>
+-		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Click the selected tab to toggle its content closed/open.  To enable this functionality, set the <code>collapsible</code> option to true.</p>
+-<pre><code>collapsible: true
+-</code></pre>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/vertical.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/vertical.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/vertical.html	(revision 15488)
+@@ -1,54 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs - Vertical Tabs functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#tabs" ).tabs().addClass( "ui-tabs-vertical ui-helper-clearfix" );
+-		$( "#tabs li" ).removeClass( "ui-corner-top" ).addClass( "ui-corner-left" );
+-	});
+-	</script>
+-	<style>
+-	.ui-tabs-vertical { width: 55em; }
+-	.ui-tabs-vertical .ui-tabs-nav { padding: .2em .1em .2em .2em; float: left; width: 12em; }
+-	.ui-tabs-vertical .ui-tabs-nav li { clear: left; width: 100%; border-bottom-width: 1px !important; border-right-width: 0 !important; margin: 0 -1px .2em 0; }
+-	.ui-tabs-vertical .ui-tabs-nav li a { display:block; }
+-	.ui-tabs-vertical .ui-tabs-nav li.ui-tabs-active { padding-bottom: 0; padding-right: .1em; border-right-width: 1px; border-right-width: 1px; }
+-	.ui-tabs-vertical .ui-tabs-panel { padding: 1em; float: right; width: 40em;}
+-	</style>
+-</head>
+-<body>
+-
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">Nunc tincidunt</a></li>
+-		<li><a href="#tabs-2">Proin dolor</a></li>
+-		<li><a href="#tabs-3">Aenean lacinia</a></li>
+-	</ul>
+-	<div id="tabs-1">
+-		<h2>Content heading 1</h2>
+-		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-	</div>
+-	<div id="tabs-2">
+-		<h2>Content heading 2</h2>
+-		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
+-	</div>
+-	<div id="tabs-3">
+-		<h2>Content heading 3</h2>
+-		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
+-		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Click tabs to swap between content that is broken into logical sections.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/sortable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/sortable.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tabs/sortable.html	(revision 15488)
+@@ -1,51 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tabs - Sortable</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.sortable.js"></script>
+-	<script src="../../ui/jquery.ui.tabs.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		var tabs = $( "#tabs" ).tabs();
+-		tabs.find( ".ui-tabs-nav" ).sortable({
+-			axis: "x",
+-			stop: function() {
+-				tabs.tabs( "refresh" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="tabs">
+-	<ul>
+-		<li><a href="#tabs-1">Nunc tincidunt</a></li>
+-		<li><a href="#tabs-2">Proin dolor</a></li>
+-		<li><a href="#tabs-3">Aenean lacinia</a></li>
+-	</ul>
+-	<div id="tabs-1">
+-		<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+-	</div>
+-	<div id="tabs-2">
+-		<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
+-	</div>
+-	<div id="tabs-3">
+-		<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
+-		<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
+-	</div>
+-</div>
+-
+-<div class="demo-description">
+-<p>Drag the tabs above to re-order them.</p>
+-<p>Making tabs sortable is as simple as calling <code>.sortable()</code> on the <code>.ui-tabs-nav</code> element.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/index.html	(revision 15488)
+@@ -1,16 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Progressbar Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="indeterminate.html">Indeterminate</a></li>
+-	<li><a href="label.html">Custom Labels</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/indeterminate.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/indeterminate.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/indeterminate.html	(revision 15488)
+@@ -1,53 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Progressbar - Indeterminate Value</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.progressbar.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#progressbar" ).progressbar({
+-			value: false
+-		});
+-		$( "button" ).on( "click", function( event ) {
+-			var target = $( event.target ),
+-				progressbar = $( "#progressbar" ),
+-				progressbarValue = progressbar.find( ".ui-progressbar-value" );
+-
+-			if ( target.is( "#numButton" ) ) {
+-				progressbar.progressbar( "option", {
+-					value: Math.floor( Math.random() * 100 )
+-				});
+-			} else if ( target.is( "#colorButton" ) ) {
+-				progressbarValue.css({
+-					"background": '#' + Math.floor( Math.random() * 16777215 ).toString( 16 )
+-				});
+-			} else if ( target.is( "#falseButton" ) ) {
+-				progressbar.progressbar( "option", "value", false );
+-			}
+-		});
+-	});
+-	</script>
+-	<style>
+-	#progressbar .ui-progressbar-value {
+-		background-color: #ccc;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<div id="progressbar"></div>
+-<button id="numButton">Random Value - Determinate</button>
+-<button id="falseButton">Indeterminate</button>
+-<button id="colorButton">Random Color</button>
+-
+-<div class="demo-description">
+-<p>Indeterminate progress bar and switching between determinate and indeterminate styles.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/label.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/label.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/label.html	(revision 15488)
+@@ -1,61 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Progressbar - Custom Label</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.progressbar.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.ui-progressbar {
+-		position: relative;
+-	}
+-	.progress-label {
+-		position: absolute;
+-		left: 50%;
+-		top: 4px;
+-		font-weight: bold;
+-		text-shadow: 1px 1px 0 #fff;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		var progressbar = $( "#progressbar" ),
+-			progressLabel = $( ".progress-label" );
+-
+-		progressbar.progressbar({
+-			value: false,
+-			change: function() {
+-				progressLabel.text( progressbar.progressbar( "value" ) + "%" );
+-			},
+-			complete: function() {
+-				progressLabel.text( "Complete!" );
+-			}
+-		});
+-
+-		function progress() {
+-			var val = progressbar.progressbar( "value" ) || 0;
+-
+-			progressbar.progressbar( "value", val + 1 );
+-
+-			if ( val < 99 ) {
+-				setTimeout( progress, 100 );
+-			}
+-		}
+-
+-		setTimeout( progress, 3000 );
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="progressbar"><div class="progress-label">Loading...</div></div>
+-
+-<div class="demo-description">
+-<p>Custom updated label demo.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/images/pbar-ani.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/progressbar/default.html	(revision 15488)
+@@ -1,28 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Progressbar - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.progressbar.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#progressbar" ).progressbar({
+-			value: 37
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="progressbar"></div>
+-
+-<div class="demo-description">
+-<p>Default determinate progress bar.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content2.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content2.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content2.html	(revision 15488)
+@@ -1 +0,0 @@
+-<p><strong>This other content was loaded via ajax.</strong></p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content1.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content1.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content1.html	(revision 15488)
+@@ -1 +0,0 @@
+-<p><strong>This content was loaded via ajax.</strong></p>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/video-player.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/video-player.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/video-player.html	(revision 15488)
+@@ -1,117 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tooltip - Video Player demo</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.tooltip.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.menu.js"></script>
+-	<script src="../../ui/jquery.ui.effect.js"></script>
+-	<script src="../../ui/jquery.ui.effect-blind.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.player {
+-		width: 500px;
+-		height: 300px;
+-		border: 2px groove gray;
+-		background: rgb(200, 200, 200);
+-		text-align: center;
+-		line-height: 300px;
+-	}
+-	.ui-tooltip {
+-		border: 1px solid white;
+-		background: rgba(20, 20, 20, 1);
+-		color: white;
+-	}
+-	.set {
+-		display: inline-block;
+-	}
+-	.notification {
+-		position: absolute;
+-		display: inline-block;
+-		font-size: 2em;
+-		padding: .5em;
+-		box-shadow: 2px 2px 5px -2px rgba(0,0,0,0.5);
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		function notify( input ) {
+-			var msg = "Selected " + $.trim( input.data( "tooltip-title" ) || input.text() );
+-			$( "<div>" )
+-				.appendTo( document.body )
+-				.text( msg )
+-				.addClass( "notification ui-state-default ui-corner-bottom" )
+-				.position({
+-					my: "center top",
+-					at: "center top",
+-					of: window
+-				})
+-				.show({
+-					effect: "blind"
+-				})
+-				.delay( 1000 )
+-				.hide({
+-					effect: "blind",
+-					duration: "slow"
+-				}, function() {
+-					$( this ).remove();
+-				});
+-		}
+-
+-		$( "button" ).each(function() {
+-			var button = $( this ).button({
+-				icons: {
+-					primary: $( this ).data( "icon" )
+-				},
+-				text: !!$( this ).attr( "title" )
+-			});
+-			button.click(function() {
+-				notify( button );
+-			});
+-		});
+-		$( ".set" ).buttonset({
+-			items: "button"
+-		});
+-
+-		$( document ).tooltip({
+-			position: {
+-				my: "center top",
+-				at: "center bottom+5",
+-			},
+-			show: {
+-				duration: "fast"
+-			},
+-			hide: {
+-				effect: "hide"
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="player">Here Be Video (HTML5?)</div>
+-<div class="tools">
+-	<span class="set">
+-		<button data-icon="ui-icon-circle-arrow-n" title="I like this">Like</button>
+-		<button data-icon="ui-icon-circle-arrow-s">I dislike this</button>
+-	</span>
+-	<div class="set">
+-		<button data-icon="ui-icon-circle-plus" title="Add to Watch Later">Add to</button>
+-		<button class="menu" data-icon="ui-icon-triangle-1-s">Add to favorites or playlist</button>
+-	</div>
+-	<button title="Share this video">Share</button>
+-	<button data-icon="ui-icon-alert">Flag as inappropiate</button>
+-</div>
+-
+-<div class="demo-description">
+-<p>A fake video player with like/share/stats button, each with a custom-styled tooltip.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-content.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-content.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-content.html	(revision 15488)
+@@ -1,83 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tooltip - Custom content</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.tooltip.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.photo {
+-		width: 300px;
+-		text-align: center;
+-	}
+-	.photo .ui-widget-header {
+-		margin: 1em 0;
+-	}
+-	.map {
+-		width: 350px;
+-		height: 350px;
+-	}
+-	.ui-tooltip {
+-		max-width: 350px;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		$( document ).tooltip({
+-			items: "img, [data-geo], [title]",
+-			content: function() {
+-				var element = $( this );
+-				if ( element.is( "[data-geo]" ) ) {
+-					var text = element.text();
+-					return "<img class='map' alt='" + text +
+-						"' src='http://maps.google.com/maps/api/staticmap?" +
+-						"zoom=11&size=350x350&maptype=terrain&sensor=false&center=" +
+-						text + "'>";
+-				}
+-				if ( element.is( "[title]" ) ) {
+-					return element.attr( "title" );
+-				}
+-				if ( element.is( "img" ) ) {
+-					return element.attr( "alt" );
+-				}
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="ui-widget photo">
+-	<div class="ui-widget-header ui-corner-all">
+-		<h2>St. Stephen's Cathedral</h2>
+-		<h3><a href="http://maps.google.com/maps?q=vienna,+austria&amp;z=11" data-geo>Vienna, Austria</a></h3>
+-	</div>
+-	<a href="http://en.wikipedia.org/wiki/File:Wien_Stefansdom_DSC02656.JPG">
+-		<img src="images/st-stephens.jpg" alt="St. Stephen's Cathedral" class="ui-corner-all">
+-	</a>
+-</div>
+-
+-<div class="ui-widget photo">
+-	<div class="ui-widget-header ui-corner-all">
+-		<h2>Tower Bridge</h2>
+-		<h3><a href="http://maps.google.com/maps?q=london,+england&amp;z=11" data-geo>London, England</a></h3>
+-	</div>
+-	<a href="http://en.wikipedia.org/wiki/File:Tower_bridge_London_Twilight_-_November_2006.jpg">
+-		<img src="images/tower-bridge.jpg" alt="Tower Bridge" class="ui-corner-all">
+-	</a>
+-</div>
+-
+-<p>All images are part of <a href="http://commons.wikimedia.org/wiki/Main_Page">Wikimedia Commons</a>
+-and are licensed under <a href="http://creativecommons.org/licenses/by-sa/3.0/deed.en" title="Creative Commons Attribution-ShareAlike 3.0">CC BY-SA 3.0</a> by the copyright holder.</p>
+-
+-<div class="demo-description">
+-<p>Shows how to combine different event delegated tooltips into a single instance, by customizing the items and content options.</p>
+-<p>We realize you may want to interact with the map tooltips. This is a planned feature for a future version.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/tower-bridge.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/st-stephens.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/tracking.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/tracking.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/tracking.html	(revision 15488)
+@@ -1,42 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tooltip - Track the mouse</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.tooltip.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	label {
+-		display: inline-block;
+-		width: 5em;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		$( document ).tooltip({
+-			track: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p><a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
+-the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.</p>
+-<p>But as it's not a native tooltip, it can be styled. Any themes built with
+-<a href="http://themeroller.com" title="ThemeRoller: jQuery UI's theme builder application">ThemeRoller</a>
+-will also style tooltips accordingly.</p>
+-<p>Tooltips are also useful for form elements, to show some additional information in the context of each field.</p>
+-<p><label for="age">Your age:</label><input id="age" title="We ask for your age only for statistical purposes."></p>
+-<p>Hover the field to see the tooltip.</p>
+-
+-<div class="demo-description">
+-<p>Here the tooltips are positioned relative to the mouse, and follow the mouse while it moves above the element.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/default.html	(revision 15488)
+@@ -1,40 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tooltip - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.tooltip.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( document ).tooltip();
+-	});
+-	</script>
+-	<style>
+-	label {
+-		display: inline-block;
+-		width: 5em;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<p><a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
+-the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.</p>
+-<p>But as it's not a native tooltip, it can be styled. Any themes built with
+-<a href="http://themeroller.com" title="ThemeRoller: jQuery UI's theme builder application">ThemeRoller</a>
+-will also style tooltips accordingly.</p>
+-<p>Tooltips are also useful for form elements, to show some additional information in the context of each field.</p>
+-<p><label for="age">Your age:</label><input id="age" title="We ask for your age only for statistical purposes."></p>
+-<p>Hover the field to see the tooltip.</p>
+-
+-<div class="demo-description">
+-<p>Hover the links above or use the tab key to cycle the focus on each element.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/forms.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/forms.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/forms.html	(revision 15488)
+@@ -1,65 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tooltip - Forms</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.tooltip.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	label {
+-		display: inline-block; width: 5em;
+-	}
+-	fieldset div {
+-		margin-bottom: 2em;
+-	}
+-	fieldset .help {
+-		display: inline-block;
+-	}
+-	.ui-tooltip {
+-		width: 210px;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		var tooltips = $( "[title]" ).tooltip();
+-		$( "<button>" )
+-			.text( "Show help" )
+-			.button()
+-			.click(function() {
+-				tooltips.tooltip( "open" );
+-			})
+-			.insertAfter( "form" );
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<form>
+-	<fieldset>
+-		<div>
+-			<label for="firstname">Firstname</label>
+-			<input id="firstname" name="firstname" title="Please provide your firstname.">
+-		</div>
+-		<div>
+-			<label for="lastname">Lastname</label>
+-			<input id="lastname" name="lastname" title="Please provide also your lastname.">
+-		</div>
+-		<div>
+-			<label for="address">Address</label>
+-			<input id="address" name="address" title="Your home or work address.">
+-		</div>
+-	</fieldset>
+-</form>
+-
+-<div class="demo-description">
+-<p>Use the button below to display the help texts, or just focus or mouseover the indivdual inputs.</p>
+-<p>A fixed width is defined in CSS to make the tooltips look consistent when displayed all at once.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-animation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-animation.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-animation.html	(revision 15488)
+@@ -1,54 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tooltip - Custom animation demo</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.tooltip.js"></script>
+-	<script src="../../ui/jquery.ui.effect.js"></script>
+-	<script src="../../ui/jquery.ui.effect-explode.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#show-option" ).tooltip({
+-			show: {
+-				effect: "slideDown",
+-				delay: 250
+-			}
+-		});
+-		$( "#hide-option" ).tooltip({
+-			hide: {
+-				effect: "explode",
+-				delay: 250
+-			}
+-		});
+-		$( "#open-event" ).tooltip({
+-			show: null,
+-			position: {
+-				my: "left top",
+-				at: "left bottom"
+-			},
+-			open: function( event, ui ) {
+-				ui.tooltip.animate({ top: ui.tooltip.position().top + 10 }, "fast" );
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<p>There are various ways to customize the animation of a tooltip.</p>
+-<p>You can use the <a id="show-option" href="http://jqueryui.com/demos/tooltip/#option-show" title="slide down on show">show</a> and
+-<a id="hide-option" href="http://jqueryui.com/demos/tooltip/#option-hide" title="explode on hide">hide</a> options.</p>
+-<p>You can also use the <a id="open-event" href="http://jqueryui.com/demos/tooltip/#event-open" title="move down on show">open event</a>.</p>
+-
+-<div class="demo-description">
+-<p>This demo shows how to customize animations using the show and hide options,
+-as well as the open event.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/index.html	(revision 15488)
+@@ -1,20 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tooltip Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="custom-style.html">Custom style with arrow</a></li>
+-	<li><a href="forms.html">Forms with tooltips</a></li>
+-	<li><a href="tracking.html">Track the mouse</a></li>
+-	<li><a href="custom-animation.html">Custom animation</a></li>
+-	<li><a href="custom-content.html">Custom content</a></li>
+-	<li><a href="video-player.html">Video Player</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-style.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-style.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-style.html	(revision 15488)
+@@ -1,95 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Tooltip - Custom Styling</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.tooltip.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.tooltip.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( document ).tooltip({
+-			position: {
+-				my: "center bottom-20",
+-				at: "center top",
+-				using: function( position, feedback ) {
+-					$( this ).css( position );
+-					$( "<div>" )
+-						.addClass( "arrow" )
+-						.addClass( feedback.vertical )
+-						.addClass( feedback.horizontal )
+-						.appendTo( this );
+-				}
+-			}
+-		});
+-	});
+-	</script>
+-	<style>
+-	.ui-tooltip, .arrow:after {
+-		background: black;
+-		border: 2px solid white;
+-	}
+-	.ui-tooltip {
+-		padding: 10px 20px;
+-		color: white;
+-		border-radius: 20px;
+-		font: bold 14px "Helvetica Neue", Sans-Serif;
+-		text-transform: uppercase;
+-		box-shadow: 0 0 7px black;
+-	}
+-	.arrow {
+-		width: 70px;
+-		height: 16px;
+-		overflow: hidden;
+-		position: absolute;
+-		left: 50%;
+-		margin-left: -35px;
+-		bottom: -16px;
+-	}
+-	.arrow.top {
+-		top: -16px;
+-		bottom: auto;
+-	}
+-	.arrow.left {
+-		left: 20%;
+-	}
+-	.arrow:after {
+-		content: "";
+-		position: absolute;
+-		left: 20px;
+-		top: -20px;
+-		width: 25px;
+-		height: 25px;
+-		box-shadow: 6px 5px 9px -9px black;
+-		-webkit-transform: rotate(45deg);
+-		-moz-transform: rotate(45deg);
+-		-ms-transform: rotate(45deg);
+-		-o-transform: rotate(45deg);
+-		tranform: rotate(45deg);
+-	}
+-	.arrow.top:after {
+-		bottom: -20px;
+-		top: auto;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<p><a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
+-the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.</p>
+-<p>But as it's not a native tooltip, it can be styled. Any themes built with
+-<a href="http://themeroller.com" title="ThemeRoller: jQuery UI's theme builder application">ThemeRoller</a>
+-will also style tooltips accordingly.</p>
+-<p>Tooltips are also useful for form elements, to show some additional information in the context of each field.</p>
+-<p><label for="age">Your age:</label> <input id="age" title="We ask for your age only for statistical purposes."></p>
+-<p>Hover the field to see the tooltip.</p>
+-
+-<div class="demo-description">
+-<p>Hover the links above or use the tab key to cycle the focus on each element.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/effect/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/effect/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/effect/default.html	(revision 15488)
+@@ -1,102 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Effects - Effect demo</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.effect.js"></script>
+-	<script src="../../ui/jquery.ui.effect-blind.js"></script>
+-	<script src="../../ui/jquery.ui.effect-bounce.js"></script>
+-	<script src="../../ui/jquery.ui.effect-clip.js"></script>
+-	<script src="../../ui/jquery.ui.effect-drop.js"></script>
+-	<script src="../../ui/jquery.ui.effect-explode.js"></script>
+-	<script src="../../ui/jquery.ui.effect-fade.js"></script>
+-	<script src="../../ui/jquery.ui.effect-fold.js"></script>
+-	<script src="../../ui/jquery.ui.effect-highlight.js"></script>
+-	<script src="../../ui/jquery.ui.effect-pulsate.js"></script>
+-	<script src="../../ui/jquery.ui.effect-scale.js"></script>
+-	<script src="../../ui/jquery.ui.effect-shake.js"></script>
+-	<script src="../../ui/jquery.ui.effect-slide.js"></script>
+-	<script src="../../ui/jquery.ui.effect-transfer.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-		.toggler { width: 500px; height: 200px; position: relative; }
+-		#button { padding: .5em 1em; text-decoration: none; }
+-		#effect { width: 240px; height: 135px; padding: 0.4em; position: relative; }
+-		#effect h3 { margin: 0; padding: 0.4em; text-align: center; }
+-		.ui-effects-transfer { border: 2px dotted gray; }
+-	</style>
+-	<script>
+-	$(function() {
+-		// run the currently selected effect
+-		function runEffect() {
+-			// get effect type from
+-			var selectedEffect = $( "#effectTypes" ).val();
+-
+-			// most effect types need no options passed by default
+-			var options = {};
+-			// some effects have required parameters
+-			if ( selectedEffect === "scale" ) {
+-				options = { percent: 0 };
+-			} else if ( selectedEffect === "transfer" ) {
+-				options = { to: "#button", className: "ui-effects-transfer" };
+-			} else if ( selectedEffect === "size" ) {
+-				options = { to: { width: 200, height: 60 } };
+-			}
+-
+-			// run the effect
+-			$( "#effect" ).effect( selectedEffect, options, 500, callback );
+-		};
+-
+-		// callback function to bring a hidden box back
+-		function callback() {
+-			setTimeout(function() {
+-				$( "#effect" ).removeAttr( "style" ).hide().fadeIn();
+-			}, 1000 );
+-		};
+-
+-		// set effect from select menu value
+-		$( "#button" ).click(function() {
+-			runEffect();
+-			return false;
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div class="toggler">
+-	<div id="effect" class="ui-widget-content ui-corner-all">
+-		<h3 class="ui-widget-header ui-corner-all">Effect</h3>
+-		<p>
+-			Etiam libero neque, luctus a, eleifend nec, semper at, lorem. Sed pede. Nulla lorem metus, adipiscing ut, luctus sed, hendrerit vitae, mi.
+-		</p>
+-	</div>
+-</div>
+-
+-<select name="effects" id="effectTypes">
+-	<option value="blind">Blind</option>
+-	<option value="bounce">Bounce</option>
+-	<option value="clip">Clip</option>
+-	<option value="drop">Drop</option>
+-	<option value="explode">Explode</option>
+-	<option value="fade">Fade</option>
+-	<option value="fold">Fold</option>
+-	<option value="highlight">Highlight</option>
+-	<option value="puff">Puff</option>
+-	<option value="pulsate">Pulsate</option>
+-	<option value="scale">Scale</option>
+-	<option value="shake">Shake</option>
+-	<option value="size">Size</option>
+-	<option value="slide">Slide</option>
+-	<option value="transfer">Transfer</option>
+-</select>
+-
+-<a href="#" id="button" class="ui-state-default ui-corner-all">Run Effect</a>
+-
+-<div class="demo-description">
+-<p>Click the button above to show the effect.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/effect/easing.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/effect/easing.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/effect/easing.html	(revision 15488)
+@@ -1,102 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Effects - Easing demo</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.effect.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-	.graph {
+-		float: left;
+-		margin-left: 10px;
+-	}
+-	</style>
+-	<script>
+-	$(function() {
+-		if ( !$( "<canvas>" )[0].getContext ) {
+-			$( "<div>" ).text(
+-				"Your browser doesn't support canvas, which is required for this demo."
+-			).appendTo( "#graphs" );
+-			return;
+-		}
+-
+-		var i = 0,
+-			width = 100,
+-			height = 100;
+-
+-		$.each( $.easing, function( name, impl ) {
+-			var graph = $( "<div>" ).addClass( "graph" ).appendTo( "#graphs" ),
+-				text = $( "<div>" ).text( ++i + ". " + name ).appendTo( graph ),
+-				wrap = $( "<div>" ).appendTo( graph ).css( 'overflow', 'hidden' ),
+-				canvas = $( "<canvas>" ).appendTo( wrap )[ 0 ];
+-
+-			canvas.width = width;
+-			canvas.height = height;
+-			var drawHeight = height * 0.8,
+-				cradius = 10;
+-				ctx = canvas.getContext( "2d" );
+-			ctx.fillStyle = "black";
+-
+-			// draw background
+-			ctx.beginPath();
+-			ctx.moveTo( cradius, 0 );
+-			ctx.quadraticCurveTo( 0, 0, 0, cradius );
+-			ctx.lineTo( 0, height - cradius );
+-			ctx.quadraticCurveTo( 0, height, cradius, height );
+-			ctx.lineTo( width - cradius, height );
+-			ctx.quadraticCurveTo( width, height, width, height - cradius );
+-			ctx.lineTo( width, 0 );
+-			ctx.lineTo( cradius, 0 );
+-			ctx.fill();
+-
+-			// draw bottom line
+-			ctx.strokeStyle = "#555";
+-			ctx.beginPath();
+-			ctx.moveTo( width * 0.1, drawHeight + .5 );
+-			ctx.lineTo( width * 0.9, drawHeight + .5 );
+-			ctx.stroke();
+-
+-			// draw top line
+-			ctx.strokeStyle = "#555";
+-			ctx.beginPath();
+-			ctx.moveTo( width * 0.1, drawHeight * .3 - .5 );
+-			ctx.lineTo( width * 0.9, drawHeight * .3 - .5 );
+-			ctx.stroke();
+-
+-			// plot easing
+-			ctx.strokeStyle = "white";
+-			ctx.beginPath();
+-			ctx.lineWidth = 2;
+-			ctx.moveTo( width * 0.1, drawHeight );
+-			$.each( new Array( width ), function( position ) {
+-				var state = position / width,
+-					val = impl( state, position, 0, 1, width );
+-				ctx.lineTo( position * 0.8 + width * 0.1,
+-					drawHeight - drawHeight * val * 0.7 );
+-			});
+-			ctx.stroke();
+-
+-			// animate on click
+-			graph.click(function() {
+-				wrap
+-					.animate( { height: "hide" }, 2000, name )
+-					.delay( 800 )
+-					.animate( { height: "show" }, 2000, name );
+-			});
+-
+-			graph.width( width ).height( height + text.height() + 10 );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="graphs"></div>
+-
+-<div class="demo-description">
+-<p><strong>All easings provided by jQuery UI are drawn above, using a HTML canvas element</strong>. Click a diagram to see the easing in action.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/effect/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/effect/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/effect/index.html	(revision 15488)
+@@ -1,15 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Effects Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Effect showcase</a></li>
+-	<li><a href="easing.html">Easing showcase</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/demos.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/demos.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/demos.css	(revision 15488)
+@@ -1,19 +0,0 @@
+-body {
+-	font-size: 62.5%;
+-	font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif";
+-}
+-
+-table {
+-	font-size: 1em;
+-}
+-
+-.demo-description {
+-	clear: both;
+-	padding: 12px;
+-	font-size: 1.3em;
+-	line-height: 1.4em;
+-}
+-
+-.ui-draggable, .ui-droppable {
+-	background-position: top;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal.html	(revision 15488)
+@@ -1,38 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Dialog - Basic modal</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.dialog.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#dialog-modal" ).dialog({
+-			height: 140,
+-			modal: true
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="dialog-modal" title="Basic modal dialog">
+-	<p>Adding the modal overlay screen makes the dialog look more prominent because it dims out the page content.</p>
+-</div>
+-
+-<p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
+-
+-<div class="demo-description">
+-<p>A modal dialog prevents the user from interacting with the rest of the page until it is closed.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-form.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-form.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-form.html	(revision 15488)
+@@ -1,157 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Dialog - Modal form</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.dialog.js"></script>
+-	<script src="../../ui/jquery.ui.effect.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<style>
+-		body { font-size: 62.5%; }
+-		label, input { display:block; }
+-		input.text { margin-bottom:12px; width:95%; padding: .4em; }
+-		fieldset { padding:0; border:0; margin-top:25px; }
+-		h1 { font-size: 1.2em; margin: .6em 0; }
+-		div#users-contain { width: 350px; margin: 20px 0; }
+-		div#users-contain table { margin: 1em 0; border-collapse: collapse; width: 100%; }
+-		div#users-contain table td, div#users-contain table th { border: 1px solid #eee; padding: .6em 10px; text-align: left; }
+-		.ui-dialog .ui-state-error { padding: .3em; }
+-		.validateTips { border: 1px solid transparent; padding: 0.3em; }
+-	</style>
+-	<script>
+-	$(function() {
+-		var name = $( "#name" ),
+-			email = $( "#email" ),
+-			password = $( "#password" ),
+-			allFields = $( [] ).add( name ).add( email ).add( password ),
+-			tips = $( ".validateTips" );
+-
+-		function updateTips( t ) {
+-			tips
+-				.text( t )
+-				.addClass( "ui-state-highlight" );
+-			setTimeout(function() {
+-				tips.removeClass( "ui-state-highlight", 1500 );
+-			}, 500 );
+-		}
+-
+-		function checkLength( o, n, min, max ) {
+-			if ( o.val().length > max || o.val().length < min ) {
+-				o.addClass( "ui-state-error" );
+-				updateTips( "Length of " + n + " must be between " +
+-					min + " and " + max + "." );
+-				return false;
+-			} else {
+-				return true;
+-			}
+-		}
+-
+-		function checkRegexp( o, regexp, n ) {
+-			if ( !( regexp.test( o.val() ) ) ) {
+-				o.addClass( "ui-state-error" );
+-				updateTips( n );
+-				return false;
+-			} else {
+-				return true;
+-			}
+-		}
+-
+-		$( "#dialog-form" ).dialog({
+-			autoOpen: false,
+-			height: 300,
+-			width: 350,
+-			modal: true,
+-			buttons: {
+-				"Create an account": function() {
+-					var bValid = true;
+-					allFields.removeClass( "ui-state-error" );
+-
+-					bValid = bValid && checkLength( name, "username", 3, 16 );
+-					bValid = bValid && checkLength( email, "email", 6, 80 );
+-					bValid = bValid && checkLength( password, "password", 5, 16 );
+-
+-					bValid = bValid && checkRegexp( name, /^[a-z]([0-9a-z_])+$/i, "Username may consist of a-z, 0-9, underscores, begin with a letter." );
+-					// From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
+-					bValid = bValid && checkRegexp( email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. ui@jquery.com" );
+-					bValid = bValid && checkRegexp( password, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9" );
+-
+-					if ( bValid ) {
+-						$( "#users tbody" ).append( "<tr>" +
+-							"<td>" + name.val() + "</td>" +
+-							"<td>" + email.val() + "</td>" +
+-							"<td>" + password.val() + "</td>" +
+-						"</tr>" );
+-						$( this ).dialog( "close" );
+-					}
+-				},
+-				Cancel: function() {
+-					$( this ).dialog( "close" );
+-				}
+-			},
+-			close: function() {
+-				allFields.val( "" ).removeClass( "ui-state-error" );
+-			}
+-		});
+-
+-		$( "#create-user" )
+-			.button()
+-			.click(function() {
+-				$( "#dialog-form" ).dialog( "open" );
+-			});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="dialog-form" title="Create new user">
+-	<p class="validateTips">All form fields are required.</p>
+-
+-	<form>
+-	<fieldset>
+-		<label for="name">Name</label>
+-		<input type="text" name="name" id="name" class="text ui-widget-content ui-corner-all" />
+-		<label for="email">Email</label>
+-		<input type="text" name="email" id="email" value="" class="text ui-widget-content ui-corner-all" />
+-		<label for="password">Password</label>
+-		<input type="password" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" />
+-	</fieldset>
+-	</form>
+-</div>
+-
+-
+-<div id="users-contain" class="ui-widget">
+-	<h1>Existing Users:</h1>
+-	<table id="users" class="ui-widget ui-widget-content">
+-		<thead>
+-			<tr class="ui-widget-header ">
+-				<th>Name</th>
+-				<th>Email</th>
+-				<th>Password</th>
+-			</tr>
+-		</thead>
+-		<tbody>
+-			<tr>
+-				<td>John Doe</td>
+-				<td>john.doe@example.com</td>
+-				<td>johndoe1</td>
+-			</tr>
+-		</tbody>
+-	</table>
+-</div>
+-<button id="create-user">Create new user</button>
+-
+-<div class="demo-description">
+-<p>Use a modal dialog to require that the user enter data during a multi-step process.  Embed form markup in the content area, set the <code>modal</code> option to true, and specify primary and secondary user actions with the <code>buttons</code> option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-message.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-message.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-message.html	(revision 15488)
+@@ -1,49 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Dialog - Modal message</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.dialog.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#dialog-message" ).dialog({
+-			modal: true,
+-			buttons: {
+-				Ok: function() {
+-					$( this ).dialog( "close" );
+-				}
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="dialog-message" title="Download complete">
+-	<p>
+-		<span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>
+-		Your files have downloaded successfully into the My Downloads folder.
+-	</p>
+-	<p>
+-		Currently using <b>36% of your storage space</b>.
+-	</p>
+-</div>
+-
+-<p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
+-
+-<div class="demo-description">
+-<p>Use a modal dialog to explicitly acknowledge information or an action before continuing their work.  Set the <code>modal</code> option to true, and specify a primary action (Ok) with the <code>buttons</code> option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/animated.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/animated.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/animated.html	(revision 15488)
+@@ -1,52 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Dialog - Animation</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.dialog.js"></script>
+-	<script src="../../ui/jquery.ui.effect.js"></script>
+-	<script src="../../ui/jquery.ui.effect-blind.js"></script>
+-	<script src="../../ui/jquery.ui.effect-explode.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#dialog" ).dialog({
+-			autoOpen: false,
+-			show: {
+-				effect: "blind",
+-				duration: 1000
+-			},
+-			hide: {
+-				effect: "explode",
+-				duration: 1000
+-			}
+-		});
+-
+-		$( "#opener" ).click(function() {
+-			$( "#dialog" ).dialog( "open" );
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="dialog" title="Basic dialog">
+-	<p>This is an animated dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
+-</div>
+-
+-<button id="opener">Open Dialog</button>
+-
+-<div class="demo-description">
+-<p>Dialogs may be animated by specifying an effect for the show and/or hide properties.  You must include the individual effects file for any effects you would like to use.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-confirmation.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-confirmation.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-confirmation.html	(revision 15488)
+@@ -1,47 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Dialog - Modal confirmation</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.dialog.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#dialog-confirm" ).dialog({
+-			resizable: false,
+-			height:140,
+-			modal: true,
+-			buttons: {
+-				"Delete all items": function() {
+-					$( this ).dialog( "close" );
+-				},
+-				Cancel: function() {
+-					$( this ).dialog( "close" );
+-				}
+-			}
+-		});
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="dialog-confirm" title="Empty the recycle bin?">
+-	<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>These items will be permanently deleted and cannot be recovered. Are you sure?</p>
+-</div>
+-
+-<p>Sed vel diam id libero <a href="http://example.com">rutrum convallis</a>. Donec aliquet leo vel magna. Phasellus rhoncus faucibus ante. Etiam bibendum, enim faucibus aliquet rhoncus, arcu felis ultricies neque, sit amet auctor elit eros a lectus.</p>
+-
+-<div class="demo-description">
+-<p>Confirm an action that may be destructive or important.  Set the <code>modal</code> option to true, and specify primary and secondary user actions with the <code>buttons</code> option.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/default.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/default.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/default.html	(revision 15488)
+@@ -1,33 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Dialog - Default functionality</title>
+-	<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
+-	<script src="../../jquery-1.9.1.js"></script>
+-	<script src="../../ui/jquery.ui.core.js"></script>
+-	<script src="../../ui/jquery.ui.widget.js"></script>
+-	<script src="../../ui/jquery.ui.mouse.js"></script>
+-	<script src="../../ui/jquery.ui.draggable.js"></script>
+-	<script src="../../ui/jquery.ui.position.js"></script>
+-	<script src="../../ui/jquery.ui.resizable.js"></script>
+-	<script src="../../ui/jquery.ui.button.js"></script>
+-	<script src="../../ui/jquery.ui.dialog.js"></script>
+-	<link rel="stylesheet" href="../demos.css">
+-	<script>
+-	$(function() {
+-		$( "#dialog" ).dialog();
+-	});
+-	</script>
+-</head>
+-<body>
+-
+-<div id="dialog" title="Basic dialog">
+-	<p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
+-</div>
+-
+-<div class="demo-description">
+-<p>The basic dialog window is an overlay positioned within the viewport and is protected from page content (like select elements) shining through with an iframe.  It has a title bar and a content area, and can be moved, resized and closed with the 'x' icon by default.</p>
+-</div>
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/index.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/index.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/demos/dialog/index.html	(revision 15488)
+@@ -1,19 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI Dialog Demos</title>
+-</head>
+-<body>
+-
+-<ul>
+-	<li><a href="default.html">Default functionality</a></li>
+-	<li><a href="animated.html">Animated dialog</a></li>
+-	<li><a href="modal.html">Modal dialog</a></li>
+-	<li><a href="modal-message.html">Modal message</a></li>
+-	<li><a href="modal-confirmation.html">Modal confirmation</a></li>
+-	<li><a href="modal-form.html">Modal form</a></li>
+-</ul>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-pulsate.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-pulsate.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-pulsate.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-pulsate",
+-	"title": "jQuery UI Pulsate Effect",
+-	"description": "Pulsates an element n times by changing the opacity to zero and back.",
+-	"keywords": [
+-		"ui",
+-		"pulsate",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/pulsate-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.droppable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.droppable.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.droppable.jquery.json	(revision 15488)
+@@ -1,67 +0,0 @@
+-{
+-	"name": "ui.droppable",
+-	"title": "jQuery UI Droppable",
+-	"description": "Enables drop targets for draggable elements.",
+-	"keywords": [
+-		"ui",
+-		"droppable",
+-		"drag",
+-		"drop"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/droppable/",
+-	"demo": "http://jqueryui.com/droppable/",
+-	"docs": "http://api.jqueryui.com/droppable/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.mouse": "1.10.3",
+-		"ui.draggable": "1.10.3"
+-	},
+-	"category": "interaction"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.draggable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.draggable.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.draggable.jquery.json	(revision 15488)
+@@ -1,66 +0,0 @@
+-{
+-	"name": "ui.draggable",
+-	"title": "jQuery UI Draggable",
+-	"description": "Enables dragging functionality for any element.",
+-	"keywords": [
+-		"ui",
+-		"draggable",
+-		"drag",
+-		"drop"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/draggable/",
+-	"demo": "http://jqueryui.com/draggable/",
+-	"docs": "http://api.jqueryui.com/draggable/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.mouse": "1.10.3"
+-	},
+-	"category": "interaction"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/Gruntfile.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/Gruntfile.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/Gruntfile.js	(revision 15488)
+@@ -1,378 +0,0 @@
+-module.exports = function( grunt ) {
+-
+-"use strict";
+-
+-var
+-	// files
+-	coreFiles = [
+-		"jquery.ui.core.js",
+-		"jquery.ui.widget.js",
+-		"jquery.ui.mouse.js",
+-		"jquery.ui.draggable.js",
+-		"jquery.ui.droppable.js",
+-		"jquery.ui.resizable.js",
+-		"jquery.ui.selectable.js",
+-		"jquery.ui.sortable.js",
+-		"jquery.ui.effect.js"
+-	],
+-
+-	uiFiles = coreFiles.map(function( file ) {
+-		return "ui/" + file;
+-	}).concat( expandFiles( "ui/*.js" ).filter(function( file ) {
+-		return coreFiles.indexOf( file.substring(3) ) === -1;
+-	})),
+-
+-	allI18nFiles = expandFiles( "ui/i18n/*.js" ),
+-
+-	cssFiles = [
+-		"core",
+-		"accordion",
+-		"autocomplete",
+-		"button",
+-		"datepicker",
+-		"dialog",
+-		"menu",
+-		"progressbar",
+-		"resizable",
+-		"selectable",
+-		"slider",
+-		"spinner",
+-		"tabs",
+-		"tooltip",
+-		"theme"
+-	].map(function( component ) {
+-		return "themes/base/jquery.ui." + component + ".css";
+-	}),
+-
+-	// minified files
+-	minify = {
+-		options: {
+-			preserveComments: false
+-		},
+-		main: {
+-			options: {
+-				banner: createBanner( uiFiles )
+-			},
+-			files: {
+-				"dist/jquery-ui.min.js": "dist/jquery-ui.js"
+-			}
+-		},
+-		i18n: {
+-			options: {
+-				banner: createBanner( allI18nFiles )
+-			},
+-			files: {
+-				"dist/i18n/jquery-ui-i18n.min.js": "dist/i18n/jquery-ui-i18n.js"
+-			}
+-		}
+-	},
+-
+-	minifyCSS = {
+-		options: {
+-			keepSpecialComments: 0
+-		},
+-		main: {
+-			options: {
+-				keepSpecialComments: "*"
+-			},
+-			src: "dist/jquery-ui.css",
+-			dest: "dist/jquery-ui.min.css"
+-		}
+-	},
+-
+-	compareFiles = {
+-		all: [
+-			"dist/jquery-ui.js",
+-			"dist/jquery-ui.min.js"
+-		]
+-	};
+-
+-function mapMinFile( file ) {
+-	return "dist/" + file.replace( /\.js$/, ".min.js" ).replace( /ui\//, "minified/" );
+-}
+-
+-function expandFiles( files ) {
+-	return grunt.util._.pluck( grunt.file.expandMapping( files ), "src" ).map(function( values ) {
+-		return values[ 0 ];
+-	});
+-}
+-
+-uiFiles.concat( allI18nFiles ).forEach(function( file ) {
+-	minify[ file ] = {
+-		options: {
+-			banner: createBanner()
+-		},
+-		files: {}
+-	};
+-	minify[ file ].files[ mapMinFile( file ) ] = file;
+-});
+-
+-cssFiles.forEach(function( file ) {
+-	minifyCSS[ file ] = {
+-		options: {
+-			banner: createBanner()
+-		},
+-		src: file,
+-		dest: "dist/" + file.replace( /\.css$/, ".min.css" ).replace( /themes\/base\//, "themes/base/minified/" )
+-	};
+-});
+-
+-uiFiles.forEach(function( file ) {
+-	// TODO this doesn't do anything until https://github.com/rwldrn/grunt-compare-size/issues/13
+-	compareFiles[ file ] = [ file,  mapMinFile( file ) ];
+-});
+-
+-// grunt plugins
+-grunt.loadNpmTasks( "grunt-contrib-jshint" );
+-grunt.loadNpmTasks( "grunt-contrib-uglify" );
+-grunt.loadNpmTasks( "grunt-contrib-concat" );
+-grunt.loadNpmTasks( "grunt-contrib-qunit" );
+-grunt.loadNpmTasks( "grunt-contrib-csslint" );
+-grunt.loadNpmTasks( "grunt-contrib-cssmin" );
+-grunt.loadNpmTasks( "grunt-html" );
+-grunt.loadNpmTasks( "grunt-compare-size" );
+-grunt.loadNpmTasks( "grunt-git-authors" );
+-// local testswarm and build tasks
+-grunt.loadTasks( "build/tasks" );
+-
+-function stripDirectory( file ) {
+-	return file.replace( /.+\/(.+?)>?$/, "$1" );
+-}
+-
+-function createBanner( files ) {
+-	// strip folders
+-	var fileNames = files && files.map( stripDirectory );
+-	return "/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - " +
+-		"<%= grunt.template.today('isoDate') %>\n" +
+-		"<%= pkg.homepage ? '* ' + pkg.homepage + '\\n' : '' %>" +
+-		(files ? "* Includes: " + fileNames.join(", ") + "\n" : "")+
+-		"* Copyright <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>;" +
+-		" Licensed <%= _.pluck(pkg.licenses, 'type').join(', ') %> */\n";
+-}
+-
+-grunt.initConfig({
+-	pkg: grunt.file.readJSON("package.json"),
+-	files: {
+-		dist: "<%= pkg.name %>-<%= pkg.version %>",
+-		cdn: "<%= pkg.name %>-<%= pkg.version %>-cdn",
+-		themes: "<%= pkg.name %>-themes-<%= pkg.version %>"
+-	},
+-	compare_size: compareFiles,
+-	concat: {
+-		ui: {
+-			options: {
+-				banner: createBanner( uiFiles ),
+-				stripBanners: {
+-					block: true
+-				}
+-			},
+-			src: uiFiles,
+-			dest: "dist/jquery-ui.js"
+-		},
+-		i18n: {
+-			options: {
+-				banner: createBanner( allI18nFiles )
+-			},
+-			src: allI18nFiles,
+-			dest: "dist/i18n/jquery-ui-i18n.js"
+-		},
+-		css: {
+-			options: {
+-				banner: createBanner( cssFiles ),
+-				stripBanners: {
+-					block: true
+-				}
+-			},
+-			src: cssFiles,
+-			dest: "dist/jquery-ui.css"
+-		}
+-	},
+-	uglify: minify,
+-	cssmin: minifyCSS,
+-	htmllint: {
+-		// ignore files that contain invalid html, used only for ajax content testing
+-		all: grunt.file.expand( [ "demos/**/*.html", "tests/**/*.html" ] ).filter(function( file ) {
+-			return !/(?:ajax\/content\d\.html|tabs\/data\/test\.html|tests\/unit\/core\/core\.html)/.test( file );
+-		})
+-	},
+-	copy: {
+-		dist: {
+-			src: [
+-				"AUTHORS.txt",
+-				"jquery-*.js",
+-				"MIT-LICENSE.txt",
+-				"README.md",
+-				"Gruntfile.js",
+-				"package.json",
+-				"*.jquery.json",
+-				"ui/**/*",
+-				"ui/.jshintrc",
+-				"demos/**/*",
+-				"themes/**/*",
+-				"external/**/*",
+-				"tests/**/*"
+-			],
+-			renames: {
+-				"dist/jquery-ui.js": "ui/jquery-ui.js",
+-				"dist/jquery-ui.min.js": "ui/minified/jquery-ui.min.js",
+-				"dist/i18n/jquery-ui-i18n.js": "ui/i18n/jquery-ui-i18n.js",
+-				"dist/i18n/jquery-ui-i18n.min.js": "ui/minified/i18n/jquery-ui-i18n.min.js",
+-				"dist/jquery-ui.css": "themes/base/jquery-ui.css",
+-				"dist/jquery-ui.min.css": "themes/base/minified/jquery-ui.min.css"
+-			},
+-			dest: "dist/<%= files.dist %>"
+-		},
+-		dist_min: {
+-			src: "dist/minified/**/*",
+-			strip: /^dist/,
+-			dest: "dist/<%= files.dist %>/ui"
+-		},
+-		dist_css_min: {
+-			src: "dist/themes/base/minified/*.css",
+-			strip: /^dist/,
+-			dest: "dist/<%= files.dist %>"
+-		},
+-		dist_units_images: {
+-			src: "themes/base/images/*",
+-			strip: /^themes\/base\//,
+-			dest: "dist/"
+-		},
+-		dist_min_images: {
+-			src: "themes/base/images/*",
+-			strip: /^themes\/base\//,
+-			dest: "dist/<%= files.dist %>/themes/base/minified"
+-		},
+-		cdn: {
+-			src: [
+-				"AUTHORS.txt",
+-				"MIT-LICENSE.txt",
+-				"ui/*.js",
+-				"package.json"
+-			],
+-			renames: {
+-				"dist/jquery-ui.js": "jquery-ui.js",
+-				"dist/jquery-ui.min.js": "jquery-ui.min.js",
+-				"dist/i18n/jquery-ui-i18n.js": "i18n/jquery-ui-i18n.js",
+-				"dist/i18n/jquery-ui-i18n.min.js": "i18n/jquery-ui-i18n.min.js"
+-			},
+-			dest: "dist/<%= files.cdn %>"
+-		},
+-		cdn_i18n: {
+-			src: "ui/i18n/jquery.ui.datepicker-*.js",
+-			strip: "ui/",
+-			dest: "dist/<%= files.cdn %>"
+-		},
+-		cdn_i18n_min: {
+-			src: "dist/minified/i18n/jquery.ui.datepicker-*.js",
+-			strip: "dist/minified",
+-			dest: "dist/<%= files.cdn %>"
+-		},
+-		cdn_min: {
+-			src: "dist/minified/*.js",
+-			strip: /^dist\/minified/,
+-			dest: "dist/<%= files.cdn %>/ui"
+-		},
+-		cdn_themes: {
+-			src: "dist/<%= files.themes %>/themes/**/*",
+-			strip: "dist/<%= files.themes %>",
+-			dest: "dist/<%= files.cdn %>"
+-		},
+-		themes: {
+-			src: [
+-				"AUTHORS.txt",
+-				"MIT-LICENSE.txt",
+-				"package.json"
+-			],
+-			dest: "dist/<%= files.themes %>"
+-		}
+-	},
+-	zip: {
+-		dist: {
+-			src: "<%= files.dist %>",
+-			dest: "<%= files.dist %>.zip"
+-		},
+-		cdn: {
+-			src: "<%= files.cdn %>",
+-			dest: "<%= files.cdn %>.zip"
+-		},
+-		themes: {
+-			src: "<%= files.themes %>",
+-			dest: "<%= files.themes %>.zip"
+-		}
+-	},
+-	md5: {
+-		dist: {
+-			src: "dist/<%= files.dist %>",
+-			dest: "dist/<%= files.dist %>/MANIFEST"
+-		},
+-		cdn: {
+-			src: "dist/<%= files.cdn %>",
+-			dest: "dist/<%= files.cdn %>/MANIFEST"
+-		},
+-		themes: {
+-			src: "dist/<%= files.themes %>",
+-			dest: "dist/<%= files.themes %>/MANIFEST"
+-		}
+-	},
+-	qunit: {
+-		files: expandFiles( "tests/unit/**/*.html" ).filter(function( file ) {
+-			// disabling everything that doesn't (quite) work with PhantomJS for now
+-			// TODO except for all|index|test, try to include more as we go
+-			return !( /(all|index|test|dialog|dialog_deprecated|tabs|tooltip)\.html$/ ).test( file );
+-		})
+-	},
+-	jshint: {
+-		ui: {
+-			options: {
+-				jshintrc: "ui/.jshintrc"
+-			},
+-			files: {
+-				src: "ui/*.js"
+-			}
+-		},
+-		grunt: {
+-			options: {
+-				jshintrc: ".jshintrc"
+-			},
+-			files: {
+-				src: [ "Gruntfile.js", "build/**/*.js" ]
+-			}
+-		},
+-		tests: {
+-			options: {
+-				jshintrc: "tests/.jshintrc"
+-			},
+-			files: {
+-				src: "tests/unit/**/*.js"
+-			}
+-		}
+-	},
+-	csslint: {
+-		base_theme: {
+-			src: "themes/base/*.css",
+-			options: {
+-				"adjoining-classes": false,
+-				"box-model": false,
+-				"compatible-vendor-prefixes": false,
+-				"duplicate-background-images": false,
+-				"import": false,
+-				"important": false,
+-				"outline-none": false,
+-				"overqualified-elements": false,
+-				"text-indent": false
+-			}
+-		}
+-	}
+-});
+-
+-grunt.registerTask( "default", [ "lint", "test" ] );
+-grunt.registerTask( "lint", [ "jshint", "csslint", "htmllint" ] );
+-grunt.registerTask( "test", [ "qunit" ] );
+-grunt.registerTask( "sizer", [ "concat:ui", "uglify:main", "compare_size:all" ] );
+-grunt.registerTask( "sizer_all", [ "concat:ui", "uglify", "compare_size" ] );
+-grunt.registerTask( "build", [ "concat", "uglify", "cssmin", "copy:dist_units_images" ] );
+-grunt.registerTask( "release", "clean build copy:dist copy:dist_min copy:dist_min_images copy:dist_css_min md5:dist zip:dist".split( " " ) );
+-grunt.registerTask( "release_themes", "release generate_themes copy:themes md5:themes zip:themes".split( " " ) );
+-grunt.registerTask( "release_cdn", "release_themes copy:cdn copy:cdn_min copy:cdn_i18n copy:cdn_i18n_min copy:cdn_themes md5:cdn zip:cdn".split( " " ) );
+-
+-};
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.button.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.button.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.button.jquery.json	(revision 15488)
+@@ -1,66 +0,0 @@
+-{
+-	"name": "ui.button",
+-	"title": "jQuery UI Button",
+-	"description": "Enhances a form with themable buttons.",
+-	"keywords": [
+-		"ui",
+-		"button",
+-		"form",
+-		"radio",
+-		"checkbox"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/button/",
+-	"demo": "http://jqueryui.com/button/",
+-	"docs": "http://api.jqueryui.com/button/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-shake.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-shake.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-shake.js	(revision 15488)
+@@ -1,74 +0,0 @@
+-/*!
+- * jQuery UI Effects Shake 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/shake-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.shake = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		direction = o.direction || "left",
+-		distance = o.distance || 20,
+-		times = o.times || 3,
+-		anims = times * 2 + 1,
+-		speed = Math.round(o.duration/anims),
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		animation = {},
+-		animation1 = {},
+-		animation2 = {},
+-		i,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	// Animation
+-	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+-	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+-	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+-
+-	// Animate
+-	el.animate( animation, speed, o.easing );
+-
+-	// Shakes
+-	for ( i = 1; i < times; i++ ) {
+-		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+-	}
+-	el
+-		.animate( animation1, speed, o.easing )
+-		.animate( animation, speed / 2, o.easing )
+-		.queue(function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.core.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.core.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.core.js	(revision 15488)
+@@ -1,320 +0,0 @@
+-/*!
+- * jQuery UI Core 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/category/ui-core/
+- */
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	runiqueId = /^ui-id-\d+$/;
+-
+-// $.ui might exist from components with no dependencies, e.g., $.ui.position
+-$.ui = $.ui || {};
+-
+-$.extend( $.ui, {
+-	version: "1.10.3",
+-
+-	keyCode: {
+-		BACKSPACE: 8,
+-		COMMA: 188,
+-		DELETE: 46,
+-		DOWN: 40,
+-		END: 35,
+-		ENTER: 13,
+-		ESCAPE: 27,
+-		HOME: 36,
+-		LEFT: 37,
+-		NUMPAD_ADD: 107,
+-		NUMPAD_DECIMAL: 110,
+-		NUMPAD_DIVIDE: 111,
+-		NUMPAD_ENTER: 108,
+-		NUMPAD_MULTIPLY: 106,
+-		NUMPAD_SUBTRACT: 109,
+-		PAGE_DOWN: 34,
+-		PAGE_UP: 33,
+-		PERIOD: 190,
+-		RIGHT: 39,
+-		SPACE: 32,
+-		TAB: 9,
+-		UP: 38
+-	}
+-});
+-
+-// plugins
+-$.fn.extend({
+-	focus: (function( orig ) {
+-		return function( delay, fn ) {
+-			return typeof delay === "number" ?
+-				this.each(function() {
+-					var elem = this;
+-					setTimeout(function() {
+-						$( elem ).focus();
+-						if ( fn ) {
+-							fn.call( elem );
+-						}
+-					}, delay );
+-				}) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.focus ),
+-
+-	scrollParent: function() {
+-		var scrollParent;
+-		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		} else {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		}
+-
+-		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+-	},
+-
+-	zIndex: function( zIndex ) {
+-		if ( zIndex !== undefined ) {
+-			return this.css( "zIndex", zIndex );
+-		}
+-
+-		if ( this.length ) {
+-			var elem = $( this[ 0 ] ), position, value;
+-			while ( elem.length && elem[ 0 ] !== document ) {
+-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+-				// This makes behavior of this function consistent across browsers
+-				// WebKit always returns auto if the element is positioned
+-				position = elem.css( "position" );
+-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+-					// IE returns 0 when zIndex is not specified
+-					// other browsers return a string
+-					// we ignore the case of nested elements with an explicit value of 0
+-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+-					value = parseInt( elem.css( "zIndex" ), 10 );
+-					if ( !isNaN( value ) && value !== 0 ) {
+-						return value;
+-					}
+-				}
+-				elem = elem.parent();
+-			}
+-		}
+-
+-		return 0;
+-	},
+-
+-	uniqueId: function() {
+-		return this.each(function() {
+-			if ( !this.id ) {
+-				this.id = "ui-id-" + (++uuid);
+-			}
+-		});
+-	},
+-
+-	removeUniqueId: function() {
+-		return this.each(function() {
+-			if ( runiqueId.test( this.id ) ) {
+-				$( this ).removeAttr( "id" );
+-			}
+-		});
+-	}
+-});
+-
+-// selectors
+-function focusable( element, isTabIndexNotNaN ) {
+-	var map, mapName, img,
+-		nodeName = element.nodeName.toLowerCase();
+-	if ( "area" === nodeName ) {
+-		map = element.parentNode;
+-		mapName = map.name;
+-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+-			return false;
+-		}
+-		img = $( "img[usemap=#" + mapName + "]" )[0];
+-		return !!img && visible( img );
+-	}
+-	return ( /input|select|textarea|button|object/.test( nodeName ) ?
+-		!element.disabled :
+-		"a" === nodeName ?
+-			element.href || isTabIndexNotNaN :
+-			isTabIndexNotNaN) &&
+-		// the element and all of its ancestors must be visible
+-		visible( element );
+-}
+-
+-function visible( element ) {
+-	return $.expr.filters.visible( element ) &&
+-		!$( element ).parents().addBack().filter(function() {
+-			return $.css( this, "visibility" ) === "hidden";
+-		}).length;
+-}
+-
+-$.extend( $.expr[ ":" ], {
+-	data: $.expr.createPseudo ?
+-		$.expr.createPseudo(function( dataName ) {
+-			return function( elem ) {
+-				return !!$.data( elem, dataName );
+-			};
+-		}) :
+-		// support: jQuery <1.8
+-		function( elem, i, match ) {
+-			return !!$.data( elem, match[ 3 ] );
+-		},
+-
+-	focusable: function( element ) {
+-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+-	},
+-
+-	tabbable: function( element ) {
+-		var tabIndex = $.attr( element, "tabindex" ),
+-			isTabIndexNaN = isNaN( tabIndex );
+-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+-	}
+-});
+-
+-// support: jQuery <1.8
+-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+-	$.each( [ "Width", "Height" ], function( i, name ) {
+-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+-			type = name.toLowerCase(),
+-			orig = {
+-				innerWidth: $.fn.innerWidth,
+-				innerHeight: $.fn.innerHeight,
+-				outerWidth: $.fn.outerWidth,
+-				outerHeight: $.fn.outerHeight
+-			};
+-
+-		function reduce( elem, size, border, margin ) {
+-			$.each( side, function() {
+-				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+-				if ( border ) {
+-					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+-				}
+-				if ( margin ) {
+-					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+-				}
+-			});
+-			return size;
+-		}
+-
+-		$.fn[ "inner" + name ] = function( size ) {
+-			if ( size === undefined ) {
+-				return orig[ "inner" + name ].call( this );
+-			}
+-
+-			return this.each(function() {
+-				$( this ).css( type, reduce( this, size ) + "px" );
+-			});
+-		};
+-
+-		$.fn[ "outer" + name] = function( size, margin ) {
+-			if ( typeof size !== "number" ) {
+-				return orig[ "outer" + name ].call( this, size );
+-			}
+-
+-			return this.each(function() {
+-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+-			});
+-		};
+-	});
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+-	$.fn.removeData = (function( removeData ) {
+-		return function( key ) {
+-			if ( arguments.length ) {
+-				return removeData.call( this, $.camelCase( key ) );
+-			} else {
+-				return removeData.call( this );
+-			}
+-		};
+-	})( $.fn.removeData );
+-}
+-
+-
+-
+-
+-
+-// deprecated
+-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+-
+-$.support.selectstart = "onselectstart" in document.createElement( "div" );
+-$.fn.extend({
+-	disableSelection: function() {
+-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+-			".ui-disableSelection", function( event ) {
+-				event.preventDefault();
+-			});
+-	},
+-
+-	enableSelection: function() {
+-		return this.unbind( ".ui-disableSelection" );
+-	}
+-});
+-
+-$.extend( $.ui, {
+-	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+-	plugin: {
+-		add: function( module, option, set ) {
+-			var i,
+-				proto = $.ui[ module ].prototype;
+-			for ( i in set ) {
+-				proto.plugins[ i ] = proto.plugins[ i ] || [];
+-				proto.plugins[ i ].push( [ option, set[ i ] ] );
+-			}
+-		},
+-		call: function( instance, name, args ) {
+-			var i,
+-				set = instance.plugins[ name ];
+-			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
+-				return;
+-			}
+-
+-			for ( i = 0; i < set.length; i++ ) {
+-				if ( instance.options[ set[ i ][ 0 ] ] ) {
+-					set[ i ][ 1 ].apply( instance.element, args );
+-				}
+-			}
+-		}
+-	},
+-
+-	// only used by resizable
+-	hasScroll: function( el, a ) {
+-
+-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+-		if ( $( el ).css( "overflow" ) === "hidden") {
+-			return false;
+-		}
+-
+-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+-			has = false;
+-
+-		if ( el[ scroll ] > 0 ) {
+-			return true;
+-		}
+-
+-		// TODO: determine which cases actually cause this to happen
+-		// if the element doesn't have the scroll set, see if it's possible to
+-		// set the scroll
+-		el[ scroll ] = 1;
+-		has = ( el[ scroll ] > 0 );
+-		el[ scroll ] = 0;
+-		return has;
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.mouse.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.mouse.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.mouse.js	(revision 15488)
+@@ -1,169 +0,0 @@
+-/*!
+- * jQuery UI Mouse 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/mouse/
+- *
+- * Depends:
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var mouseHandled = false;
+-$( document ).mouseup( function() {
+-	mouseHandled = false;
+-});
+-
+-$.widget("ui.mouse", {
+-	version: "1.10.3",
+-	options: {
+-		cancel: "input,textarea,button,select,option",
+-		distance: 1,
+-		delay: 0
+-	},
+-	_mouseInit: function() {
+-		var that = this;
+-
+-		this.element
+-			.bind("mousedown."+this.widgetName, function(event) {
+-				return that._mouseDown(event);
+-			})
+-			.bind("click."+this.widgetName, function(event) {
+-				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+-					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+-					event.stopImmediatePropagation();
+-					return false;
+-				}
+-			});
+-
+-		this.started = false;
+-	},
+-
+-	// TODO: make sure destroying one instance of mouse doesn't mess with
+-	// other instances of mouse
+-	_mouseDestroy: function() {
+-		this.element.unbind("."+this.widgetName);
+-		if ( this._mouseMoveDelegate ) {
+-			$(document)
+-				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-		}
+-	},
+-
+-	_mouseDown: function(event) {
+-		// don't let more than one widget handle mouseStart
+-		if( mouseHandled ) { return; }
+-
+-		// we may have missed mouseup (out of window)
+-		(this._mouseStarted && this._mouseUp(event));
+-
+-		this._mouseDownEvent = event;
+-
+-		var that = this,
+-			btnIsLeft = (event.which === 1),
+-			// event.target.nodeName works around a bug in IE 8 with
+-			// disabled inputs (#7620)
+-			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+-			return true;
+-		}
+-
+-		this.mouseDelayMet = !this.options.delay;
+-		if (!this.mouseDelayMet) {
+-			this._mouseDelayTimer = setTimeout(function() {
+-				that.mouseDelayMet = true;
+-			}, this.options.delay);
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted = (this._mouseStart(event) !== false);
+-			if (!this._mouseStarted) {
+-				event.preventDefault();
+-				return true;
+-			}
+-		}
+-
+-		// Click event may never have fired (Gecko & Opera)
+-		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+-			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+-		}
+-
+-		// these delegates are required to keep context
+-		this._mouseMoveDelegate = function(event) {
+-			return that._mouseMove(event);
+-		};
+-		this._mouseUpDelegate = function(event) {
+-			return that._mouseUp(event);
+-		};
+-		$(document)
+-			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		event.preventDefault();
+-
+-		mouseHandled = true;
+-		return true;
+-	},
+-
+-	_mouseMove: function(event) {
+-		// IE mouseup check - mouseup happened when mouse was out of window
+-		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+-			return this._mouseUp(event);
+-		}
+-
+-		if (this._mouseStarted) {
+-			this._mouseDrag(event);
+-			return event.preventDefault();
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted =
+-				(this._mouseStart(this._mouseDownEvent, event) !== false);
+-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+-		}
+-
+-		return !this._mouseStarted;
+-	},
+-
+-	_mouseUp: function(event) {
+-		$(document)
+-			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		if (this._mouseStarted) {
+-			this._mouseStarted = false;
+-
+-			if (event.target === this._mouseDownEvent.target) {
+-				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+-			}
+-
+-			this._mouseStop(event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseDistanceMet: function(event) {
+-		return (Math.max(
+-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+-			) >= this.options.distance
+-		);
+-	},
+-
+-	_mouseDelayMet: function(/* event */) {
+-		return this.mouseDelayMet;
+-	},
+-
+-	// These are placeholder methods, to be overriden by extending plugin
+-	_mouseStart: function(/* event */) {},
+-	_mouseDrag: function(/* event */) {},
+-	_mouseStop: function(/* event */) {},
+-	_mouseCapture: function(/* event */) { return true; }
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fade.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fade.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fade.js	(revision 15488)
+@@ -1,30 +0,0 @@
+-/*!
+- * jQuery UI Effects Fade 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/fade-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.fade = function( o, done ) {
+-	var el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "toggle" );
+-
+-	el.animate({
+-		opacity: mode
+-	}, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: done
+-	});
+-};
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tabs.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tabs.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tabs.js	(revision 15488)
+@@ -1,846 +0,0 @@
+-/*!
+- * jQuery UI Tabs 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/tabs/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var tabId = 0,
+-	rhash = /#.*$/;
+-
+-function getNextTabId() {
+-	return ++tabId;
+-}
+-
+-function isLocal( anchor ) {
+-	return anchor.hash.length > 1 &&
+-		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
+-			decodeURIComponent( location.href.replace( rhash, "" ) );
+-}
+-
+-$.widget( "ui.tabs", {
+-	version: "1.10.3",
+-	delay: 300,
+-	options: {
+-		active: null,
+-		collapsible: false,
+-		event: "click",
+-		heightStyle: "content",
+-		hide: null,
+-		show: null,
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null,
+-		beforeLoad: null,
+-		load: null
+-	},
+-
+-	_create: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		this.running = false;
+-
+-		this.element
+-			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-tabs-collapsible", options.collapsible )
+-			// Prevent users from focusing disabled tabs via click
+-			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
+-				if ( $( this ).is( ".ui-state-disabled" ) ) {
+-					event.preventDefault();
+-				}
+-			})
+-			// support: IE <9
+-			// Preventing the default action in mousedown doesn't prevent IE
+-			// from focusing the element, so if the anchor gets focused, blur.
+-			// We don't have to worry about focusing the previously focused
+-			// element since clicking on a non-focusable element should focus
+-			// the body anyway.
+-			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+-				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+-					this.blur();
+-				}
+-			});
+-
+-		this._processTabs();
+-		options.active = this._initialActive();
+-
+-		// Take disabling tabs via class attribute from HTML
+-		// into account and update option properly.
+-		if ( $.isArray( options.disabled ) ) {
+-			options.disabled = $.unique( options.disabled.concat(
+-				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+-					return that.tabs.index( li );
+-				})
+-			) ).sort();
+-		}
+-
+-		// check for length avoids error when initializing empty list
+-		if ( this.options.active !== false && this.anchors.length ) {
+-			this.active = this._findActive( options.active );
+-		} else {
+-			this.active = $();
+-		}
+-
+-		this._refresh();
+-
+-		if ( this.active.length ) {
+-			this.load( options.active );
+-		}
+-	},
+-
+-	_initialActive: function() {
+-		var active = this.options.active,
+-			collapsible = this.options.collapsible,
+-			locationHash = location.hash.substring( 1 );
+-
+-		if ( active === null ) {
+-			// check the fragment identifier in the URL
+-			if ( locationHash ) {
+-				this.tabs.each(function( i, tab ) {
+-					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+-						active = i;
+-						return false;
+-					}
+-				});
+-			}
+-
+-			// check for a tab marked active via a class
+-			if ( active === null ) {
+-				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+-			}
+-
+-			// no active tab, set to false
+-			if ( active === null || active === -1 ) {
+-				active = this.tabs.length ? 0 : false;
+-			}
+-		}
+-
+-		// handle numbers: negative, out of range
+-		if ( active !== false ) {
+-			active = this.tabs.index( this.tabs.eq( active ) );
+-			if ( active === -1 ) {
+-				active = collapsible ? false : 0;
+-			}
+-		}
+-
+-		// don't allow collapsible: false and active: false
+-		if ( !collapsible && active === false && this.anchors.length ) {
+-			active = 0;
+-		}
+-
+-		return active;
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			tab: this.active,
+-			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+-		};
+-	},
+-
+-	_tabKeydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+-			selectedIndex = this.tabs.index( focusedTab ),
+-			goingForward = true;
+-
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		switch ( event.keyCode ) {
+-			case $.ui.keyCode.RIGHT:
+-			case $.ui.keyCode.DOWN:
+-				selectedIndex++;
+-				break;
+-			case $.ui.keyCode.UP:
+-			case $.ui.keyCode.LEFT:
+-				goingForward = false;
+-				selectedIndex--;
+-				break;
+-			case $.ui.keyCode.END:
+-				selectedIndex = this.anchors.length - 1;
+-				break;
+-			case $.ui.keyCode.HOME:
+-				selectedIndex = 0;
+-				break;
+-			case $.ui.keyCode.SPACE:
+-				// Activate only, no collapsing
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				this._activate( selectedIndex );
+-				return;
+-			case $.ui.keyCode.ENTER:
+-				// Toggle (cancel delayed activation, allow collapsing)
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				// Determine if we should collapse or activate
+-				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+-				return;
+-			default:
+-				return;
+-		}
+-
+-		// Focus the appropriate tab, based on which key was pressed
+-		event.preventDefault();
+-		clearTimeout( this.activating );
+-		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+-
+-		// Navigating with control key will prevent automatic activation
+-		if ( !event.ctrlKey ) {
+-			// Update aria-selected immediately so that AT think the tab is already selected.
+-			// Otherwise AT may confuse the user by stating that they need to activate the tab,
+-			// but the tab will already be activated by the time the announcement finishes.
+-			focusedTab.attr( "aria-selected", "false" );
+-			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+-
+-			this.activating = this._delay(function() {
+-				this.option( "active", selectedIndex );
+-			}, this.delay );
+-		}
+-	},
+-
+-	_panelKeydown: function( event ) {
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		// Ctrl+up moves focus to the current tab
+-		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+-			event.preventDefault();
+-			this.active.focus();
+-		}
+-	},
+-
+-	// Alt+page up/down moves focus to the previous/next tab (and activates)
+-	_handlePageNav: function( event ) {
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+-			this._activate( this._focusNextTab( this.options.active - 1, false ) );
+-			return true;
+-		}
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+-			this._activate( this._focusNextTab( this.options.active + 1, true ) );
+-			return true;
+-		}
+-	},
+-
+-	_findNextTab: function( index, goingForward ) {
+-		var lastTabIndex = this.tabs.length - 1;
+-
+-		function constrain() {
+-			if ( index > lastTabIndex ) {
+-				index = 0;
+-			}
+-			if ( index < 0 ) {
+-				index = lastTabIndex;
+-			}
+-			return index;
+-		}
+-
+-		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+-			index = goingForward ? index + 1 : index - 1;
+-		}
+-
+-		return index;
+-	},
+-
+-	_focusNextTab: function( index, goingForward ) {
+-		index = this._findNextTab( index, goingForward );
+-		this.tabs.eq( index ).focus();
+-		return index;
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "disabled" ) {
+-			// don't use the widget factory's disabled handling
+-			this._setupDisabled( value );
+-			return;
+-		}
+-
+-		this._super( key, value);
+-
+-		if ( key === "collapsible" ) {
+-			this.element.toggleClass( "ui-tabs-collapsible", value );
+-			// Setting collapsible: false while collapsed; open first panel
+-			if ( !value && this.options.active === false ) {
+-				this._activate( 0 );
+-			}
+-		}
+-
+-		if ( key === "event" ) {
+-			this._setupEvents( value );
+-		}
+-
+-		if ( key === "heightStyle" ) {
+-			this._setupHeightStyle( value );
+-		}
+-	},
+-
+-	_tabId: function( tab ) {
+-		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
+-	},
+-
+-	_sanitizeSelector: function( hash ) {
+-		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+-	},
+-
+-	refresh: function() {
+-		var options = this.options,
+-			lis = this.tablist.children( ":has(a[href])" );
+-
+-		// get disabled tabs from class attribute from HTML
+-		// this will get converted to a boolean if needed in _refresh()
+-		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+-			return lis.index( tab );
+-		});
+-
+-		this._processTabs();
+-
+-		// was collapsed or no tabs
+-		if ( options.active === false || !this.anchors.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// was active, but active tab is gone
+-		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining tabs are disabled
+-			if ( this.tabs.length === options.disabled.length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous tab
+-			} else {
+-				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+-			}
+-		// was active, active tab still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.tabs.index( this.active );
+-		}
+-
+-		this._refresh();
+-	},
+-
+-	_refresh: function() {
+-		this._setupDisabled( this.options.disabled );
+-		this._setupEvents( this.options.event );
+-		this._setupHeightStyle( this.options.heightStyle );
+-
+-		this.tabs.not( this.active ).attr({
+-			"aria-selected": "false",
+-			tabIndex: -1
+-		});
+-		this.panels.not( this._getPanelForTab( this.active ) )
+-			.hide()
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-hidden": "true"
+-			});
+-
+-		// Make sure one tab is in the tab order
+-		if ( !this.active.length ) {
+-			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active
+-				.addClass( "ui-tabs-active ui-state-active" )
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-			this._getPanelForTab( this.active )
+-				.show()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-	},
+-
+-	_processTabs: function() {
+-		var that = this;
+-
+-		this.tablist = this._getList()
+-			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.attr( "role", "tablist" );
+-
+-		this.tabs = this.tablist.find( "> li:has(a[href])" )
+-			.addClass( "ui-state-default ui-corner-top" )
+-			.attr({
+-				role: "tab",
+-				tabIndex: -1
+-			});
+-
+-		this.anchors = this.tabs.map(function() {
+-				return $( "a", this )[ 0 ];
+-			})
+-			.addClass( "ui-tabs-anchor" )
+-			.attr({
+-				role: "presentation",
+-				tabIndex: -1
+-			});
+-
+-		this.panels = $();
+-
+-		this.anchors.each(function( i, anchor ) {
+-			var selector, panel, panelId,
+-				anchorId = $( anchor ).uniqueId().attr( "id" ),
+-				tab = $( anchor ).closest( "li" ),
+-				originalAriaControls = tab.attr( "aria-controls" );
+-
+-			// inline tab
+-			if ( isLocal( anchor ) ) {
+-				selector = anchor.hash;
+-				panel = that.element.find( that._sanitizeSelector( selector ) );
+-			// remote tab
+-			} else {
+-				panelId = that._tabId( tab );
+-				selector = "#" + panelId;
+-				panel = that.element.find( selector );
+-				if ( !panel.length ) {
+-					panel = that._createPanel( panelId );
+-					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+-				}
+-				panel.attr( "aria-live", "polite" );
+-			}
+-
+-			if ( panel.length) {
+-				that.panels = that.panels.add( panel );
+-			}
+-			if ( originalAriaControls ) {
+-				tab.data( "ui-tabs-aria-controls", originalAriaControls );
+-			}
+-			tab.attr({
+-				"aria-controls": selector.substring( 1 ),
+-				"aria-labelledby": anchorId
+-			});
+-			panel.attr( "aria-labelledby", anchorId );
+-		});
+-
+-		this.panels
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.attr( "role", "tabpanel" );
+-	},
+-
+-	// allow overriding how to find the list for rare usage scenarios (#7715)
+-	_getList: function() {
+-		return this.element.find( "ol,ul" ).eq( 0 );
+-	},
+-
+-	_createPanel: function( id ) {
+-		return $( "<div>" )
+-			.attr( "id", id )
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.data( "ui-tabs-destroy", true );
+-	},
+-
+-	_setupDisabled: function( disabled ) {
+-		if ( $.isArray( disabled ) ) {
+-			if ( !disabled.length ) {
+-				disabled = false;
+-			} else if ( disabled.length === this.anchors.length ) {
+-				disabled = true;
+-			}
+-		}
+-
+-		// disable tabs
+-		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+-			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+-				$( li )
+-					.addClass( "ui-state-disabled" )
+-					.attr( "aria-disabled", "true" );
+-			} else {
+-				$( li )
+-					.removeClass( "ui-state-disabled" )
+-					.removeAttr( "aria-disabled" );
+-			}
+-		}
+-
+-		this.options.disabled = disabled;
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			click: function( event ) {
+-				event.preventDefault();
+-			}
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+-		this._on( this.anchors, events );
+-		this._on( this.tabs, { keydown: "_tabKeydown" } );
+-		this._on( this.panels, { keydown: "_panelKeydown" } );
+-
+-		this._focusable( this.tabs );
+-		this._hoverable( this.tabs );
+-	},
+-
+-	_setupHeightStyle: function( heightStyle ) {
+-		var maxHeight,
+-			parent = this.element.parent();
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			maxHeight -= this.element.outerHeight() - this.element.height();
+-
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.element.children().not( this.panels ).each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.panels.each(function() {
+-				$( this ).height( Math.max( 0, maxHeight -
+-					$( this ).innerHeight() + $( this ).height() ) );
+-			})
+-			.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.panels.each(function() {
+-				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+-			}).height( maxHeight );
+-		}
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			anchor = $( event.currentTarget ),
+-			tab = anchor.closest( "li" ),
+-			clickedIsActive = tab[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : this._getPanelForTab( tab ),
+-			toHide = !active.length ? $() : this._getPanelForTab( active ),
+-			eventData = {
+-				oldTab: active,
+-				oldPanel: toHide,
+-				newTab: collapsing ? $() : tab,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if ( tab.hasClass( "ui-state-disabled" ) ||
+-				// tab is already loading
+-				tab.hasClass( "ui-tabs-loading" ) ||
+-				// can't switch durning an animation
+-				this.running ||
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.tabs.index( tab );
+-
+-		this.active = clickedIsActive ? $() : tab;
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		if ( !toHide.length && !toShow.length ) {
+-			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+-		}
+-
+-		if ( toShow.length ) {
+-			this.load( this.tabs.index( tab ), event );
+-		}
+-		this._toggle( event, eventData );
+-	},
+-
+-	// handles show/hide for selecting tabs
+-	_toggle: function( event, eventData ) {
+-		var that = this,
+-			toShow = eventData.newPanel,
+-			toHide = eventData.oldPanel;
+-
+-		this.running = true;
+-
+-		function complete() {
+-			that.running = false;
+-			that._trigger( "activate", event, eventData );
+-		}
+-
+-		function show() {
+-			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+-
+-			if ( toShow.length && that.options.show ) {
+-				that._show( toShow, that.options.show, complete );
+-			} else {
+-				toShow.show();
+-				complete();
+-			}
+-		}
+-
+-		// start out by hiding, then showing, then completing
+-		if ( toHide.length && this.options.hide ) {
+-			this._hide( toHide, this.options.hide, function() {
+-				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-				show();
+-			});
+-		} else {
+-			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-			toHide.hide();
+-			show();
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		eventData.oldTab.attr( "aria-selected", "false" );
+-		// If we're switching tabs, remove the old tab from the tab order.
+-		// If we're opening from collapsed state, remove the previous tab from the tab order.
+-		// If we're collapsing, then keep the collapsing tab in the tab order.
+-		if ( toShow.length && toHide.length ) {
+-			eventData.oldTab.attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.tabs.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow.attr({
+-			"aria-expanded": "true",
+-			"aria-hidden": "false"
+-		});
+-		eventData.newTab.attr({
+-			"aria-selected": "true",
+-			tabIndex: 0
+-		});
+-	},
+-
+-	_activate: function( index ) {
+-		var anchor,
+-			active = this._findActive( index );
+-
+-		// trying to activate the already active panel
+-		if ( active[ 0 ] === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the current active header
+-		if ( !active.length ) {
+-			active = this.active;
+-		}
+-
+-		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+-		this._eventHandler({
+-			target: anchor,
+-			currentTarget: anchor,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( index ) {
+-		return index === false ? $() : this.tabs.eq( index );
+-	},
+-
+-	_getIndex: function( index ) {
+-		// meta-function to give users option to provide a href string instead of a numerical index.
+-		if ( typeof index === "string" ) {
+-			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+-		}
+-
+-		return index;
+-	},
+-
+-	_destroy: function() {
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+-
+-		this.tablist
+-			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.removeAttr( "role" );
+-
+-		this.anchors
+-			.removeClass( "ui-tabs-anchor" )
+-			.removeAttr( "role" )
+-			.removeAttr( "tabIndex" )
+-			.removeUniqueId();
+-
+-		this.tabs.add( this.panels ).each(function() {
+-			if ( $.data( this, "ui-tabs-destroy" ) ) {
+-				$( this ).remove();
+-			} else {
+-				$( this )
+-					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+-						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+-					.removeAttr( "tabIndex" )
+-					.removeAttr( "aria-live" )
+-					.removeAttr( "aria-busy" )
+-					.removeAttr( "aria-selected" )
+-					.removeAttr( "aria-labelledby" )
+-					.removeAttr( "aria-hidden" )
+-					.removeAttr( "aria-expanded" )
+-					.removeAttr( "role" );
+-			}
+-		});
+-
+-		this.tabs.each(function() {
+-			var li = $( this ),
+-				prev = li.data( "ui-tabs-aria-controls" );
+-			if ( prev ) {
+-				li
+-					.attr( "aria-controls", prev )
+-					.removeData( "ui-tabs-aria-controls" );
+-			} else {
+-				li.removeAttr( "aria-controls" );
+-			}
+-		});
+-
+-		this.panels.show();
+-
+-		if ( this.options.heightStyle !== "content" ) {
+-			this.panels.css( "height", "" );
+-		}
+-	},
+-
+-	enable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === false ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = false;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.map( disabled, function( num ) {
+-					return num !== index ? num : null;
+-				});
+-			} else {
+-				disabled = $.map( this.tabs, function( li, num ) {
+-					return num !== index ? num : null;
+-				});
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	disable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === true ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = true;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.inArray( index, disabled ) !== -1 ) {
+-				return;
+-			}
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.merge( [ index ], disabled ).sort();
+-			} else {
+-				disabled = [ index ];
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	load: function( index, event ) {
+-		index = this._getIndex( index );
+-		var that = this,
+-			tab = this.tabs.eq( index ),
+-			anchor = tab.find( ".ui-tabs-anchor" ),
+-			panel = this._getPanelForTab( tab ),
+-			eventData = {
+-				tab: tab,
+-				panel: panel
+-			};
+-
+-		// not remote
+-		if ( isLocal( anchor[ 0 ] ) ) {
+-			return;
+-		}
+-
+-		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+-
+-		// support: jQuery <1.8
+-		// jQuery <1.8 returns false if the request is canceled in beforeSend,
+-		// but as of 1.8, $.ajax() always returns a jqXHR object.
+-		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+-			tab.addClass( "ui-tabs-loading" );
+-			panel.attr( "aria-busy", "true" );
+-
+-			this.xhr
+-				.success(function( response ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						panel.html( response );
+-						that._trigger( "load", event, eventData );
+-					}, 1 );
+-				})
+-				.complete(function( jqXHR, status ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						if ( status === "abort" ) {
+-							that.panels.stop( false, true );
+-						}
+-
+-						tab.removeClass( "ui-tabs-loading" );
+-						panel.removeAttr( "aria-busy" );
+-
+-						if ( jqXHR === that.xhr ) {
+-							delete that.xhr;
+-						}
+-					}, 1 );
+-				});
+-		}
+-	},
+-
+-	_ajaxSettings: function( anchor, event, eventData ) {
+-		var that = this;
+-		return {
+-			url: anchor.attr( "href" ),
+-			beforeSend: function( jqXHR, settings ) {
+-				return that._trigger( "beforeLoad", event,
+-					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+-			}
+-		};
+-	},
+-
+-	_getPanelForTab: function( tab ) {
+-		var id = $( tab ).attr( "aria-controls" );
+-		return this.element.find( this._sanitizeSelector( "#" + id ) );
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-slide.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-slide.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-slide.js	(revision 15488)
+@@ -1,64 +0,0 @@
+-/*!
+- * jQuery UI Effects Slide 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/slide-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.slide = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+-		mode = $.effects.setMode( el, o.mode || "show" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		distance,
+-		animation = {};
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+-
+-	$.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	if ( show ) {
+-		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( positiveMotion ? "+=" : "-=") :
+-		( positiveMotion ? "-=" : "+=")) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.dialog.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.dialog.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.dialog.js	(revision 15488)
+@@ -1,808 +0,0 @@
+-/*!
+- * jQuery UI Dialog 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/dialog/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *  jquery.ui.button.js
+- *	jquery.ui.draggable.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.position.js
+- *	jquery.ui.resizable.js
+- */
+-(function( $, undefined ) {
+-
+-var sizeRelatedOptions = {
+-		buttons: true,
+-		height: true,
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true,
+-		width: true
+-	},
+-	resizableRelatedOptions = {
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true
+-	};
+-
+-$.widget( "ui.dialog", {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoOpen: true,
+-		buttons: [],
+-		closeOnEscape: true,
+-		closeText: "close",
+-		dialogClass: "",
+-		draggable: true,
+-		hide: null,
+-		height: "auto",
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 150,
+-		minWidth: 150,
+-		modal: false,
+-		position: {
+-			my: "center",
+-			at: "center",
+-			of: window,
+-			collision: "fit",
+-			// Ensure the titlebar is always visible
+-			using: function( pos ) {
+-				var topOffset = $( this ).css( pos ).offset().top;
+-				if ( topOffset < 0 ) {
+-					$( this ).css( "top", pos.top - topOffset );
+-				}
+-			}
+-		},
+-		resizable: true,
+-		show: null,
+-		title: null,
+-		width: 300,
+-
+-		// callbacks
+-		beforeClose: null,
+-		close: null,
+-		drag: null,
+-		dragStart: null,
+-		dragStop: null,
+-		focus: null,
+-		open: null,
+-		resize: null,
+-		resizeStart: null,
+-		resizeStop: null
+-	},
+-
+-	_create: function() {
+-		this.originalCss = {
+-			display: this.element[0].style.display,
+-			width: this.element[0].style.width,
+-			minHeight: this.element[0].style.minHeight,
+-			maxHeight: this.element[0].style.maxHeight,
+-			height: this.element[0].style.height
+-		};
+-		this.originalPosition = {
+-			parent: this.element.parent(),
+-			index: this.element.parent().children().index( this.element )
+-		};
+-		this.originalTitle = this.element.attr("title");
+-		this.options.title = this.options.title || this.originalTitle;
+-
+-		this._createWrapper();
+-
+-		this.element
+-			.show()
+-			.removeAttr("title")
+-			.addClass("ui-dialog-content ui-widget-content")
+-			.appendTo( this.uiDialog );
+-
+-		this._createTitlebar();
+-		this._createButtonPane();
+-
+-		if ( this.options.draggable && $.fn.draggable ) {
+-			this._makeDraggable();
+-		}
+-		if ( this.options.resizable && $.fn.resizable ) {
+-			this._makeResizable();
+-		}
+-
+-		this._isOpen = false;
+-	},
+-
+-	_init: function() {
+-		if ( this.options.autoOpen ) {
+-			this.open();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-		if ( element && (element.jquery || element.nodeType) ) {
+-			return $( element );
+-		}
+-		return this.document.find( element || "body" ).eq( 0 );
+-	},
+-
+-	_destroy: function() {
+-		var next,
+-			originalPosition = this.originalPosition;
+-
+-		this._destroyOverlay();
+-
+-		this.element
+-			.removeUniqueId()
+-			.removeClass("ui-dialog-content ui-widget-content")
+-			.css( this.originalCss )
+-			// Without detaching first, the following becomes really slow
+-			.detach();
+-
+-		this.uiDialog.stop( true, true ).remove();
+-
+-		if ( this.originalTitle ) {
+-			this.element.attr( "title", this.originalTitle );
+-		}
+-
+-		next = originalPosition.parent.children().eq( originalPosition.index );
+-		// Don't try to place the dialog next to itself (#8613)
+-		if ( next.length && next[0] !== this.element[0] ) {
+-			next.before( this.element );
+-		} else {
+-			originalPosition.parent.append( this.element );
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.uiDialog;
+-	},
+-
+-	disable: $.noop,
+-	enable: $.noop,
+-
+-	close: function( event ) {
+-		var that = this;
+-
+-		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+-			return;
+-		}
+-
+-		this._isOpen = false;
+-		this._destroyOverlay();
+-
+-		if ( !this.opener.filter(":focusable").focus().length ) {
+-			// Hiding a focused element doesn't trigger blur in WebKit
+-			// so in case we have nothing to focus on, explicitly blur the active element
+-			// https://bugs.webkit.org/show_bug.cgi?id=47182
+-			$( this.document[0].activeElement ).blur();
+-		}
+-
+-		this._hide( this.uiDialog, this.options.hide, function() {
+-			that._trigger( "close", event );
+-		});
+-	},
+-
+-	isOpen: function() {
+-		return this._isOpen;
+-	},
+-
+-	moveToTop: function() {
+-		this._moveToTop();
+-	},
+-
+-	_moveToTop: function( event, silent ) {
+-		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
+-		if ( moved && !silent ) {
+-			this._trigger( "focus", event );
+-		}
+-		return moved;
+-	},
+-
+-	open: function() {
+-		var that = this;
+-		if ( this._isOpen ) {
+-			if ( this._moveToTop() ) {
+-				this._focusTabbable();
+-			}
+-			return;
+-		}
+-
+-		this._isOpen = true;
+-		this.opener = $( this.document[0].activeElement );
+-
+-		this._size();
+-		this._position();
+-		this._createOverlay();
+-		this._moveToTop( null, true );
+-		this._show( this.uiDialog, this.options.show, function() {
+-			that._focusTabbable();
+-			that._trigger("focus");
+-		});
+-
+-		this._trigger("open");
+-	},
+-
+-	_focusTabbable: function() {
+-		// Set focus to the first match:
+-		// 1. First element inside the dialog matching [autofocus]
+-		// 2. Tabbable element inside the content element
+-		// 3. Tabbable element inside the buttonpane
+-		// 4. The close button
+-		// 5. The dialog itself
+-		var hasFocus = this.element.find("[autofocus]");
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.element.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogButtonPane.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialog;
+-		}
+-		hasFocus.eq( 0 ).focus();
+-	},
+-
+-	_keepFocus: function( event ) {
+-		function checkFocus() {
+-			var activeElement = this.document[0].activeElement,
+-				isActive = this.uiDialog[0] === activeElement ||
+-					$.contains( this.uiDialog[0], activeElement );
+-			if ( !isActive ) {
+-				this._focusTabbable();
+-			}
+-		}
+-		event.preventDefault();
+-		checkFocus.call( this );
+-		// support: IE
+-		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+-		// so we check again later
+-		this._delay( checkFocus );
+-	},
+-
+-	_createWrapper: function() {
+-		this.uiDialog = $("<div>")
+-			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+-				this.options.dialogClass )
+-			.hide()
+-			.attr({
+-				// Setting tabIndex makes the div focusable
+-				tabIndex: -1,
+-				role: "dialog"
+-			})
+-			.appendTo( this._appendTo() );
+-
+-		this._on( this.uiDialog, {
+-			keydown: function( event ) {
+-				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+-						event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					event.preventDefault();
+-					this.close( event );
+-					return;
+-				}
+-
+-				// prevent tabbing out of dialogs
+-				if ( event.keyCode !== $.ui.keyCode.TAB ) {
+-					return;
+-				}
+-				var tabbables = this.uiDialog.find(":tabbable"),
+-					first = tabbables.filter(":first"),
+-					last  = tabbables.filter(":last");
+-
+-				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+-					first.focus( 1 );
+-					event.preventDefault();
+-				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+-					last.focus( 1 );
+-					event.preventDefault();
+-				}
+-			},
+-			mousedown: function( event ) {
+-				if ( this._moveToTop( event ) ) {
+-					this._focusTabbable();
+-				}
+-			}
+-		});
+-
+-		// We assume that any existing aria-describedby attribute means
+-		// that the dialog content is marked up properly
+-		// otherwise we brute force the content as the description
+-		if ( !this.element.find("[aria-describedby]").length ) {
+-			this.uiDialog.attr({
+-				"aria-describedby": this.element.uniqueId().attr("id")
+-			});
+-		}
+-	},
+-
+-	_createTitlebar: function() {
+-		var uiDialogTitle;
+-
+-		this.uiDialogTitlebar = $("<div>")
+-			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+-			.prependTo( this.uiDialog );
+-		this._on( this.uiDialogTitlebar, {
+-			mousedown: function( event ) {
+-				// Don't prevent click on close button (#8838)
+-				// Focusing a dialog that is partially scrolled out of view
+-				// causes the browser to scroll it into view, preventing the click event
+-				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
+-					// Dialog isn't getting focus when dragging (#8063)
+-					this.uiDialog.focus();
+-				}
+-			}
+-		});
+-
+-		this.uiDialogTitlebarClose = $("<button></button>")
+-			.button({
+-				label: this.options.closeText,
+-				icons: {
+-					primary: "ui-icon-closethick"
+-				},
+-				text: false
+-			})
+-			.addClass("ui-dialog-titlebar-close")
+-			.appendTo( this.uiDialogTitlebar );
+-		this._on( this.uiDialogTitlebarClose, {
+-			click: function( event ) {
+-				event.preventDefault();
+-				this.close( event );
+-			}
+-		});
+-
+-		uiDialogTitle = $("<span>")
+-			.uniqueId()
+-			.addClass("ui-dialog-title")
+-			.prependTo( this.uiDialogTitlebar );
+-		this._title( uiDialogTitle );
+-
+-		this.uiDialog.attr({
+-			"aria-labelledby": uiDialogTitle.attr("id")
+-		});
+-	},
+-
+-	_title: function( title ) {
+-		if ( !this.options.title ) {
+-			title.html("&#160;");
+-		}
+-		title.text( this.options.title );
+-	},
+-
+-	_createButtonPane: function() {
+-		this.uiDialogButtonPane = $("<div>")
+-			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+-
+-		this.uiButtonSet = $("<div>")
+-			.addClass("ui-dialog-buttonset")
+-			.appendTo( this.uiDialogButtonPane );
+-
+-		this._createButtons();
+-	},
+-
+-	_createButtons: function() {
+-		var that = this,
+-			buttons = this.options.buttons;
+-
+-		// if we already have a button pane, remove it
+-		this.uiDialogButtonPane.remove();
+-		this.uiButtonSet.empty();
+-
+-		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+-			this.uiDialog.removeClass("ui-dialog-buttons");
+-			return;
+-		}
+-
+-		$.each( buttons, function( name, props ) {
+-			var click, buttonOptions;
+-			props = $.isFunction( props ) ?
+-				{ click: props, text: name } :
+-				props;
+-			// Default to a non-submitting button
+-			props = $.extend( { type: "button" }, props );
+-			// Change the context for the click callback to be the main element
+-			click = props.click;
+-			props.click = function() {
+-				click.apply( that.element[0], arguments );
+-			};
+-			buttonOptions = {
+-				icons: props.icons,
+-				text: props.showText
+-			};
+-			delete props.icons;
+-			delete props.showText;
+-			$( "<button></button>", props )
+-				.button( buttonOptions )
+-				.appendTo( that.uiButtonSet );
+-		});
+-		this.uiDialog.addClass("ui-dialog-buttons");
+-		this.uiDialogButtonPane.appendTo( this.uiDialog );
+-	},
+-
+-	_makeDraggable: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		function filteredUi( ui ) {
+-			return {
+-				position: ui.position,
+-				offset: ui.offset
+-			};
+-		}
+-
+-		this.uiDialog.draggable({
+-			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+-			handle: ".ui-dialog-titlebar",
+-			containment: "document",
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-dragging");
+-				that._blockFrames();
+-				that._trigger( "dragStart", event, filteredUi( ui ) );
+-			},
+-			drag: function( event, ui ) {
+-				that._trigger( "drag", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.position = [
+-					ui.position.left - that.document.scrollLeft(),
+-					ui.position.top - that.document.scrollTop()
+-				];
+-				$( this ).removeClass("ui-dialog-dragging");
+-				that._unblockFrames();
+-				that._trigger( "dragStop", event, filteredUi( ui ) );
+-			}
+-		});
+-	},
+-
+-	_makeResizable: function() {
+-		var that = this,
+-			options = this.options,
+-			handles = options.resizable,
+-			// .ui-resizable has position: relative defined in the stylesheet
+-			// but dialogs have to use absolute or fixed positioning
+-			position = this.uiDialog.css("position"),
+-			resizeHandles = typeof handles === "string" ?
+-				handles	:
+-				"n,e,s,w,se,sw,ne,nw";
+-
+-		function filteredUi( ui ) {
+-			return {
+-				originalPosition: ui.originalPosition,
+-				originalSize: ui.originalSize,
+-				position: ui.position,
+-				size: ui.size
+-			};
+-		}
+-
+-		this.uiDialog.resizable({
+-			cancel: ".ui-dialog-content",
+-			containment: "document",
+-			alsoResize: this.element,
+-			maxWidth: options.maxWidth,
+-			maxHeight: options.maxHeight,
+-			minWidth: options.minWidth,
+-			minHeight: this._minHeight(),
+-			handles: resizeHandles,
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-resizing");
+-				that._blockFrames();
+-				that._trigger( "resizeStart", event, filteredUi( ui ) );
+-			},
+-			resize: function( event, ui ) {
+-				that._trigger( "resize", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.height = $( this ).height();
+-				options.width = $( this ).width();
+-				$( this ).removeClass("ui-dialog-resizing");
+-				that._unblockFrames();
+-				that._trigger( "resizeStop", event, filteredUi( ui ) );
+-			}
+-		})
+-		.css( "position", position );
+-	},
+-
+-	_minHeight: function() {
+-		var options = this.options;
+-
+-		return options.height === "auto" ?
+-			options.minHeight :
+-			Math.min( options.minHeight, options.height );
+-	},
+-
+-	_position: function() {
+-		// Need to show the dialog to get the actual offset in the position plugin
+-		var isVisible = this.uiDialog.is(":visible");
+-		if ( !isVisible ) {
+-			this.uiDialog.show();
+-		}
+-		this.uiDialog.position( this.options.position );
+-		if ( !isVisible ) {
+-			this.uiDialog.hide();
+-		}
+-	},
+-
+-	_setOptions: function( options ) {
+-		var that = this,
+-			resize = false,
+-			resizableOptions = {};
+-
+-		$.each( options, function( key, value ) {
+-			that._setOption( key, value );
+-
+-			if ( key in sizeRelatedOptions ) {
+-				resize = true;
+-			}
+-			if ( key in resizableRelatedOptions ) {
+-				resizableOptions[ key ] = value;
+-			}
+-		});
+-
+-		if ( resize ) {
+-			this._size();
+-			this._position();
+-		}
+-		if ( this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", resizableOptions );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		/*jshint maxcomplexity:15*/
+-		var isDraggable, isResizable,
+-			uiDialog = this.uiDialog;
+-
+-		if ( key === "dialogClass" ) {
+-			uiDialog
+-				.removeClass( this.options.dialogClass )
+-				.addClass( value );
+-		}
+-
+-		if ( key === "disabled" ) {
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "appendTo" ) {
+-			this.uiDialog.appendTo( this._appendTo() );
+-		}
+-
+-		if ( key === "buttons" ) {
+-			this._createButtons();
+-		}
+-
+-		if ( key === "closeText" ) {
+-			this.uiDialogTitlebarClose.button({
+-				// Ensure that we always pass a string
+-				label: "" + value
+-			});
+-		}
+-
+-		if ( key === "draggable" ) {
+-			isDraggable = uiDialog.is(":data(ui-draggable)");
+-			if ( isDraggable && !value ) {
+-				uiDialog.draggable("destroy");
+-			}
+-
+-			if ( !isDraggable && value ) {
+-				this._makeDraggable();
+-			}
+-		}
+-
+-		if ( key === "position" ) {
+-			this._position();
+-		}
+-
+-		if ( key === "resizable" ) {
+-			// currently resizable, becoming non-resizable
+-			isResizable = uiDialog.is(":data(ui-resizable)");
+-			if ( isResizable && !value ) {
+-				uiDialog.resizable("destroy");
+-			}
+-
+-			// currently resizable, changing handles
+-			if ( isResizable && typeof value === "string" ) {
+-				uiDialog.resizable( "option", "handles", value );
+-			}
+-
+-			// currently non-resizable, becoming resizable
+-			if ( !isResizable && value !== false ) {
+-				this._makeResizable();
+-			}
+-		}
+-
+-		if ( key === "title" ) {
+-			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
+-		}
+-	},
+-
+-	_size: function() {
+-		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+-		// divs will both have width and height set, so we need to reset them
+-		var nonContentHeight, minContentHeight, maxContentHeight,
+-			options = this.options;
+-
+-		// Reset content sizing
+-		this.element.show().css({
+-			width: "auto",
+-			minHeight: 0,
+-			maxHeight: "none",
+-			height: 0
+-		});
+-
+-		if ( options.minWidth > options.width ) {
+-			options.width = options.minWidth;
+-		}
+-
+-		// reset wrapper sizing
+-		// determine the height of all the non-content elements
+-		nonContentHeight = this.uiDialog.css({
+-				height: "auto",
+-				width: options.width
+-			})
+-			.outerHeight();
+-		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+-		maxContentHeight = typeof options.maxHeight === "number" ?
+-			Math.max( 0, options.maxHeight - nonContentHeight ) :
+-			"none";
+-
+-		if ( options.height === "auto" ) {
+-			this.element.css({
+-				minHeight: minContentHeight,
+-				maxHeight: maxContentHeight,
+-				height: "auto"
+-			});
+-		} else {
+-			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+-		}
+-
+-		if (this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+-		}
+-	},
+-
+-	_blockFrames: function() {
+-		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+-			var iframe = $( this );
+-
+-			return $( "<div>" )
+-				.css({
+-					position: "absolute",
+-					width: iframe.outerWidth(),
+-					height: iframe.outerHeight()
+-				})
+-				.appendTo( iframe.parent() )
+-				.offset( iframe.offset() )[0];
+-		});
+-	},
+-
+-	_unblockFrames: function() {
+-		if ( this.iframeBlocks ) {
+-			this.iframeBlocks.remove();
+-			delete this.iframeBlocks;
+-		}
+-	},
+-
+-	_allowInteraction: function( event ) {
+-		if ( $( event.target ).closest(".ui-dialog").length ) {
+-			return true;
+-		}
+-
+-		// TODO: Remove hack when datepicker implements
+-		// the .ui-front logic (#8989)
+-		return !!$( event.target ).closest(".ui-datepicker").length;
+-	},
+-
+-	_createOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		var that = this,
+-			widgetFullName = this.widgetFullName;
+-		if ( !$.ui.dialog.overlayInstances ) {
+-			// Prevent use of anchors and inputs.
+-			// We use a delay in case the overlay is created from an
+-			// event that we're going to be cancelling. (#2804)
+-			this._delay(function() {
+-				// Handle .dialog().dialog("close") (#4065)
+-				if ( $.ui.dialog.overlayInstances ) {
+-					this.document.bind( "focusin.dialog", function( event ) {
+-						if ( !that._allowInteraction( event ) ) {
+-							event.preventDefault();
+-							$(".ui-dialog:visible:last .ui-dialog-content")
+-								.data( widgetFullName )._focusTabbable();
+-						}
+-					});
+-				}
+-			});
+-		}
+-
+-		this.overlay = $("<div>")
+-			.addClass("ui-widget-overlay ui-front")
+-			.appendTo( this._appendTo() );
+-		this._on( this.overlay, {
+-			mousedown: "_keepFocus"
+-		});
+-		$.ui.dialog.overlayInstances++;
+-	},
+-
+-	_destroyOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		if ( this.overlay ) {
+-			$.ui.dialog.overlayInstances--;
+-
+-			if ( !$.ui.dialog.overlayInstances ) {
+-				this.document.unbind( "focusin.dialog" );
+-			}
+-			this.overlay.remove();
+-			this.overlay = null;
+-		}
+-	}
+-});
+-
+-$.ui.dialog.overlayInstances = 0;
+-
+-// DEPRECATED
+-if ( $.uiBackCompat !== false ) {
+-	// position option with array notation
+-	// just override with old implementation
+-	$.widget( "ui.dialog", $.ui.dialog, {
+-		_position: function() {
+-			var position = this.options.position,
+-				myAt = [],
+-				offset = [ 0, 0 ],
+-				isVisible;
+-
+-			if ( position ) {
+-				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+-					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
+-					if ( myAt.length === 1 ) {
+-						myAt[1] = myAt[0];
+-					}
+-
+-					$.each( [ "left", "top" ], function( i, offsetPosition ) {
+-						if ( +myAt[ i ] === myAt[ i ] ) {
+-							offset[ i ] = myAt[ i ];
+-							myAt[ i ] = offsetPosition;
+-						}
+-					});
+-
+-					position = {
+-						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+-							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+-						at: myAt.join(" ")
+-					};
+-				}
+-
+-				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
+-			} else {
+-				position = $.ui.dialog.prototype.options.position;
+-			}
+-
+-			// need to show the dialog to get the actual offset in the position plugin
+-			isVisible = this.uiDialog.is(":visible");
+-			if ( !isVisible ) {
+-				this.uiDialog.show();
+-			}
+-			this.uiDialog.position( position );
+-			if ( !isVisible ) {
+-				this.uiDialog.hide();
+-			}
+-		}
+-	});
+-}
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.accordion.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.accordion.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.accordion.js	(revision 15488)
+@@ -1,572 +0,0 @@
+-/*!
+- * jQuery UI Accordion 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/accordion/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var uid = 0,
+-	hideProps = {},
+-	showProps = {};
+-
+-hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
+-	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
+-showProps.height = showProps.paddingTop = showProps.paddingBottom =
+-	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
+-
+-$.widget( "ui.accordion", {
+-	version: "1.10.3",
+-	options: {
+-		active: 0,
+-		animate: {},
+-		collapsible: false,
+-		event: "click",
+-		header: "> li > :first-child,> :not(li):even",
+-		heightStyle: "auto",
+-		icons: {
+-			activeHeader: "ui-icon-triangle-1-s",
+-			header: "ui-icon-triangle-1-e"
+-		},
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null
+-	},
+-
+-	_create: function() {
+-		var options = this.options;
+-		this.prevShow = this.prevHide = $();
+-		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+-			// ARIA
+-			.attr( "role", "tablist" );
+-
+-		// don't allow collapsible: false and active: false / null
+-		if ( !options.collapsible && (options.active === false || options.active == null) ) {
+-			options.active = 0;
+-		}
+-
+-		this._processPanels();
+-		// handle negative values
+-		if ( options.active < 0 ) {
+-			options.active += this.headers.length;
+-		}
+-		this._refresh();
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			header: this.active,
+-			panel: !this.active.length ? $() : this.active.next(),
+-			content: !this.active.length ? $() : this.active.next()
+-		};
+-	},
+-
+-	_createIcons: function() {
+-		var icons = this.options.icons;
+-		if ( icons ) {
+-			$( "<span>" )
+-				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+-				.prependTo( this.headers );
+-			this.active.children( ".ui-accordion-header-icon" )
+-				.removeClass( icons.header )
+-				.addClass( icons.activeHeader );
+-			this.headers.addClass( "ui-accordion-icons" );
+-		}
+-	},
+-
+-	_destroyIcons: function() {
+-		this.headers
+-			.removeClass( "ui-accordion-icons" )
+-			.children( ".ui-accordion-header-icon" )
+-				.remove();
+-	},
+-
+-	_destroy: function() {
+-		var contents;
+-
+-		// clean up main element
+-		this.element
+-			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+-			.removeAttr( "role" );
+-
+-		// clean up headers
+-		this.headers
+-			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-selected" )
+-			.removeAttr( "aria-controls" )
+-			.removeAttr( "tabIndex" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		this._destroyIcons();
+-
+-		// clean up content panels
+-		contents = this.headers.next()
+-			.css( "display", "" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-expanded" )
+-			.removeAttr( "aria-hidden" )
+-			.removeAttr( "aria-labelledby" )
+-			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		if ( this.options.heightStyle !== "content" ) {
+-			contents.css( "height", "" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "event" ) {
+-			if ( this.options.event ) {
+-				this._off( this.headers, this.options.event );
+-			}
+-			this._setupEvents( value );
+-		}
+-
+-		this._super( key, value );
+-
+-		// setting collapsible: false while collapsed; open first panel
+-		if ( key === "collapsible" && !value && this.options.active === false ) {
+-			this._activate( 0 );
+-		}
+-
+-		if ( key === "icons" ) {
+-			this._destroyIcons();
+-			if ( value ) {
+-				this._createIcons();
+-			}
+-		}
+-
+-		// #5332 - opacity doesn't cascade to positioned elements in IE
+-		// so we need to add the disabled class to the headers and panels
+-		if ( key === "disabled" ) {
+-			this.headers.add( this.headers.next() )
+-				.toggleClass( "ui-state-disabled", !!value );
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		if ( event.altKey || event.ctrlKey ) {
+-			return;
+-		}
+-
+-		var keyCode = $.ui.keyCode,
+-			length = this.headers.length,
+-			currentIndex = this.headers.index( event.target ),
+-			toFocus = false;
+-
+-		switch ( event.keyCode ) {
+-			case keyCode.RIGHT:
+-			case keyCode.DOWN:
+-				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+-				break;
+-			case keyCode.LEFT:
+-			case keyCode.UP:
+-				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+-				break;
+-			case keyCode.SPACE:
+-			case keyCode.ENTER:
+-				this._eventHandler( event );
+-				break;
+-			case keyCode.HOME:
+-				toFocus = this.headers[ 0 ];
+-				break;
+-			case keyCode.END:
+-				toFocus = this.headers[ length - 1 ];
+-				break;
+-		}
+-
+-		if ( toFocus ) {
+-			$( event.target ).attr( "tabIndex", -1 );
+-			$( toFocus ).attr( "tabIndex", 0 );
+-			toFocus.focus();
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_panelKeyDown : function( event ) {
+-		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+-			$( event.currentTarget ).prev().focus();
+-		}
+-	},
+-
+-	refresh: function() {
+-		var options = this.options;
+-		this._processPanels();
+-
+-		// was collapsed or no panel
+-		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// active false only when collapsible is true
+-		} else if ( options.active === false ) {
+-			this._activate( 0 );
+-		// was active, but active panel is gone
+-		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining panel are disabled
+-			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous panel
+-			} else {
+-				this._activate( Math.max( 0, options.active - 1 ) );
+-			}
+-		// was active, active panel still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.headers.index( this.active );
+-		}
+-
+-		this._destroyIcons();
+-
+-		this._refresh();
+-	},
+-
+-	_processPanels: function() {
+-		this.headers = this.element.find( this.options.header )
+-			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+-
+-		this.headers.next()
+-			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+-			.filter(":not(.ui-accordion-content-active)")
+-			.hide();
+-	},
+-
+-	_refresh: function() {
+-		var maxHeight,
+-			options = this.options,
+-			heightStyle = options.heightStyle,
+-			parent = this.element.parent(),
+-			accordionId = this.accordionId = "ui-accordion-" +
+-				(this.element.attr( "id" ) || ++uid);
+-
+-		this.active = this._findActive( options.active )
+-			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+-			.removeClass( "ui-corner-all" );
+-		this.active.next()
+-			.addClass( "ui-accordion-content-active" )
+-			.show();
+-
+-		this.headers
+-			.attr( "role", "tab" )
+-			.each(function( i ) {
+-				var header = $( this ),
+-					headerId = header.attr( "id" ),
+-					panel = header.next(),
+-					panelId = panel.attr( "id" );
+-				if ( !headerId ) {
+-					headerId = accordionId + "-header-" + i;
+-					header.attr( "id", headerId );
+-				}
+-				if ( !panelId ) {
+-					panelId = accordionId + "-panel-" + i;
+-					panel.attr( "id", panelId );
+-				}
+-				header.attr( "aria-controls", panelId );
+-				panel.attr( "aria-labelledby", headerId );
+-			})
+-			.next()
+-				.attr( "role", "tabpanel" );
+-
+-		this.headers
+-			.not( this.active )
+-			.attr({
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "false",
+-					"aria-hidden": "true"
+-				})
+-				.hide();
+-
+-		// make sure at least one header is in the tab order
+-		if ( !this.active.length ) {
+-			this.headers.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active.attr({
+-				"aria-selected": "true",
+-				tabIndex: 0
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-
+-		this._createIcons();
+-
+-		this._setupEvents( options.event );
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.headers.each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.headers.next()
+-				.each(function() {
+-					$( this ).height( Math.max( 0, maxHeight -
+-						$( this ).innerHeight() + $( this ).height() ) );
+-				})
+-				.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.headers.next()
+-				.each(function() {
+-					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+-				})
+-				.height( maxHeight );
+-		}
+-	},
+-
+-	_activate: function( index ) {
+-		var active = this._findActive( index )[ 0 ];
+-
+-		// trying to activate the already active panel
+-		if ( active === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the currently active header
+-		active = active || this.active[ 0 ];
+-
+-		this._eventHandler({
+-			target: active,
+-			currentTarget: active,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( selector ) {
+-		return typeof selector === "number" ? this.headers.eq( selector ) : $();
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			keydown: "_keydown"
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.headers.add( this.headers.next() ) );
+-		this._on( this.headers, events );
+-		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+-		this._hoverable( this.headers );
+-		this._focusable( this.headers );
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			clicked = $( event.currentTarget ),
+-			clickedIsActive = clicked[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : clicked.next(),
+-			toHide = active.next(),
+-			eventData = {
+-				oldHeader: active,
+-				oldPanel: toHide,
+-				newHeader: collapsing ? $() : clicked,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if (
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.headers.index( clicked );
+-
+-		// when the call to ._toggle() comes after the class changes
+-		// it causes a very odd bug in IE 8 (see #6720)
+-		this.active = clickedIsActive ? $() : clicked;
+-		this._toggle( eventData );
+-
+-		// switch classes
+-		// corner classes on the previously active header stay after the animation
+-		active.removeClass( "ui-accordion-header-active ui-state-active" );
+-		if ( options.icons ) {
+-			active.children( ".ui-accordion-header-icon" )
+-				.removeClass( options.icons.activeHeader )
+-				.addClass( options.icons.header );
+-		}
+-
+-		if ( !clickedIsActive ) {
+-			clicked
+-				.removeClass( "ui-corner-all" )
+-				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+-			if ( options.icons ) {
+-				clicked.children( ".ui-accordion-header-icon" )
+-					.removeClass( options.icons.header )
+-					.addClass( options.icons.activeHeader );
+-			}
+-
+-			clicked
+-				.next()
+-				.addClass( "ui-accordion-content-active" );
+-		}
+-	},
+-
+-	_toggle: function( data ) {
+-		var toShow = data.newPanel,
+-			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+-
+-		// handle activating a panel during the animation for another activation
+-		this.prevShow.add( this.prevHide ).stop( true, true );
+-		this.prevShow = toShow;
+-		this.prevHide = toHide;
+-
+-		if ( this.options.animate ) {
+-			this._animate( toShow, toHide, data );
+-		} else {
+-			toHide.hide();
+-			toShow.show();
+-			this._toggleComplete( data );
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		toHide.prev().attr( "aria-selected", "false" );
+-		// if we're switching panels, remove the old header from the tab order
+-		// if we're opening from collapsed state, remove the previous header from the tab order
+-		// if we're collapsing, then keep the collapsing header in the tab order
+-		if ( toShow.length && toHide.length ) {
+-			toHide.prev().attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.headers.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow
+-			.attr({
+-				"aria-expanded": "true",
+-				"aria-hidden": "false"
+-			})
+-			.prev()
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-	},
+-
+-	_animate: function( toShow, toHide, data ) {
+-		var total, easing, duration,
+-			that = this,
+-			adjust = 0,
+-			down = toShow.length &&
+-				( !toHide.length || ( toShow.index() < toHide.index() ) ),
+-			animate = this.options.animate || {},
+-			options = down && animate.down || animate,
+-			complete = function() {
+-				that._toggleComplete( data );
+-			};
+-
+-		if ( typeof options === "number" ) {
+-			duration = options;
+-		}
+-		if ( typeof options === "string" ) {
+-			easing = options;
+-		}
+-		// fall back from options to animation in case of partial down settings
+-		easing = easing || options.easing || animate.easing;
+-		duration = duration || options.duration || animate.duration;
+-
+-		if ( !toHide.length ) {
+-			return toShow.animate( showProps, duration, easing, complete );
+-		}
+-		if ( !toShow.length ) {
+-			return toHide.animate( hideProps, duration, easing, complete );
+-		}
+-
+-		total = toShow.show().outerHeight();
+-		toHide.animate( hideProps, {
+-			duration: duration,
+-			easing: easing,
+-			step: function( now, fx ) {
+-				fx.now = Math.round( now );
+-			}
+-		});
+-		toShow
+-			.hide()
+-			.animate( showProps, {
+-				duration: duration,
+-				easing: easing,
+-				complete: complete,
+-				step: function( now, fx ) {
+-					fx.now = Math.round( now );
+-					if ( fx.prop !== "height" ) {
+-						adjust += fx.now;
+-					} else if ( that.options.heightStyle !== "content" ) {
+-						fx.now = Math.round( total - toHide.outerHeight() - adjust );
+-						adjust = 0;
+-					}
+-				}
+-			});
+-	},
+-
+-	_toggleComplete: function( data ) {
+-		var toHide = data.oldPanel;
+-
+-		toHide
+-			.removeClass( "ui-accordion-content-active" )
+-			.prev()
+-				.removeClass( "ui-corner-top" )
+-				.addClass( "ui-corner-all" );
+-
+-		// Work around for rendering bug in IE (#5421)
+-		if ( toHide.length ) {
+-			toHide.parent()[0].className = toHide.parent()[0].className;
+-		}
+-
+-		this._trigger( "activate", null, data );
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.autocomplete.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.autocomplete.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.autocomplete.js	(revision 15488)
+@@ -1,610 +0,0 @@
+-/*!
+- * jQuery UI Autocomplete 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/autocomplete/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.position.js
+- *	jquery.ui.menu.js
+- */
+-(function( $, undefined ) {
+-
+-// used to prevent race conditions with remote data sources
+-var requestIndex = 0;
+-
+-$.widget( "ui.autocomplete", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	options: {
+-		appendTo: null,
+-		autoFocus: false,
+-		delay: 300,
+-		minLength: 1,
+-		position: {
+-			my: "left top",
+-			at: "left bottom",
+-			collision: "none"
+-		},
+-		source: null,
+-
+-		// callbacks
+-		change: null,
+-		close: null,
+-		focus: null,
+-		open: null,
+-		response: null,
+-		search: null,
+-		select: null
+-	},
+-
+-	pending: 0,
+-
+-	_create: function() {
+-		// Some browsers only repeat keydown events, not keypress events,
+-		// so we use the suppressKeyPress flag to determine if we've already
+-		// handled the keydown event. #7269
+-		// Unfortunately the code for & in keypress is the same as the up arrow,
+-		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
+-		// events when we know the keydown event was used to modify the
+-		// search term. #7799
+-		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+-			nodeName = this.element[0].nodeName.toLowerCase(),
+-			isTextarea = nodeName === "textarea",
+-			isInput = nodeName === "input";
+-
+-		this.isMultiLine =
+-			// Textareas are always multi-line
+-			isTextarea ? true :
+-			// Inputs are always single-line, even if inside a contentEditable element
+-			// IE also treats inputs as contentEditable
+-			isInput ? false :
+-			// All other element types are determined by whether or not they're contentEditable
+-			this.element.prop( "isContentEditable" );
+-
+-		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+-		this.isNewMenu = true;
+-
+-		this.element
+-			.addClass( "ui-autocomplete-input" )
+-			.attr( "autocomplete", "off" );
+-
+-		this._on( this.element, {
+-			keydown: function( event ) {
+-				/*jshint maxcomplexity:15*/
+-				if ( this.element.prop( "readOnly" ) ) {
+-					suppressKeyPress = true;
+-					suppressInput = true;
+-					suppressKeyPressRepeat = true;
+-					return;
+-				}
+-
+-				suppressKeyPress = false;
+-				suppressInput = false;
+-				suppressKeyPressRepeat = false;
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					suppressKeyPress = true;
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					suppressKeyPress = true;
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					suppressKeyPress = true;
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					suppressKeyPress = true;
+-					this._keyEvent( "next", event );
+-					break;
+-				case keyCode.ENTER:
+-				case keyCode.NUMPAD_ENTER:
+-					// when menu is open and has focus
+-					if ( this.menu.active ) {
+-						// #6055 - Opera still allows the keypress to occur
+-						// which causes forms to submit
+-						suppressKeyPress = true;
+-						event.preventDefault();
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.TAB:
+-					if ( this.menu.active ) {
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.ESCAPE:
+-					if ( this.menu.element.is( ":visible" ) ) {
+-						this._value( this.term );
+-						this.close( event );
+-						// Different browsers have different default behavior for escape
+-						// Single press can mean undo or clear
+-						// Double press in IE means clear the whole form
+-						event.preventDefault();
+-					}
+-					break;
+-				default:
+-					suppressKeyPressRepeat = true;
+-					// search timeout should be triggered before the input value is changed
+-					this._searchTimeout( event );
+-					break;
+-				}
+-			},
+-			keypress: function( event ) {
+-				if ( suppressKeyPress ) {
+-					suppressKeyPress = false;
+-					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-						event.preventDefault();
+-					}
+-					return;
+-				}
+-				if ( suppressKeyPressRepeat ) {
+-					return;
+-				}
+-
+-				// replicate some key handlers to allow them to repeat in Firefox and Opera
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					this._keyEvent( "next", event );
+-					break;
+-				}
+-			},
+-			input: function( event ) {
+-				if ( suppressInput ) {
+-					suppressInput = false;
+-					event.preventDefault();
+-					return;
+-				}
+-				this._searchTimeout( event );
+-			},
+-			focus: function() {
+-				this.selectedItem = null;
+-				this.previous = this._value();
+-			},
+-			blur: function( event ) {
+-				if ( this.cancelBlur ) {
+-					delete this.cancelBlur;
+-					return;
+-				}
+-
+-				clearTimeout( this.searching );
+-				this.close( event );
+-				this._change( event );
+-			}
+-		});
+-
+-		this._initSource();
+-		this.menu = $( "<ul>" )
+-			.addClass( "ui-autocomplete ui-front" )
+-			.appendTo( this._appendTo() )
+-			.menu({
+-				// disable ARIA support, the live region takes care of that
+-				role: null
+-			})
+-			.hide()
+-			.data( "ui-menu" );
+-
+-		this._on( this.menu.element, {
+-			mousedown: function( event ) {
+-				// prevent moving focus out of the text field
+-				event.preventDefault();
+-
+-				// IE doesn't prevent moving focus even with event.preventDefault()
+-				// so we set a flag to know when we should ignore the blur event
+-				this.cancelBlur = true;
+-				this._delay(function() {
+-					delete this.cancelBlur;
+-				});
+-
+-				// clicking on the scrollbar causes focus to shift to the body
+-				// but we can't detect a mouseup or a click immediately afterward
+-				// so we have to track the next mousedown and close the menu if
+-				// the user clicks somewhere outside of the autocomplete
+-				var menuElement = this.menu.element[ 0 ];
+-				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+-					this._delay(function() {
+-						var that = this;
+-						this.document.one( "mousedown", function( event ) {
+-							if ( event.target !== that.element[ 0 ] &&
+-									event.target !== menuElement &&
+-									!$.contains( menuElement, event.target ) ) {
+-								that.close();
+-							}
+-						});
+-					});
+-				}
+-			},
+-			menufocus: function( event, ui ) {
+-				// support: Firefox
+-				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
+-				if ( this.isNewMenu ) {
+-					this.isNewMenu = false;
+-					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+-						this.menu.blur();
+-
+-						this.document.one( "mousemove", function() {
+-							$( event.target ).trigger( event.originalEvent );
+-						});
+-
+-						return;
+-					}
+-				}
+-
+-				var item = ui.item.data( "ui-autocomplete-item" );
+-				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+-					// use value to match what will end up in the input, if it was a key event
+-					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+-						this._value( item.value );
+-					}
+-				} else {
+-					// Normally the input is populated with the item's value as the
+-					// menu is navigated, causing screen readers to notice a change and
+-					// announce the item. Since the focus event was canceled, this doesn't
+-					// happen, so we update the live region so that screen readers can
+-					// still notice the change and announce it.
+-					this.liveRegion.text( item.value );
+-				}
+-			},
+-			menuselect: function( event, ui ) {
+-				var item = ui.item.data( "ui-autocomplete-item" ),
+-					previous = this.previous;
+-
+-				// only trigger when focus was lost (click on menu)
+-				if ( this.element[0] !== this.document[0].activeElement ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// #6109 - IE triggers two focus events and the second
+-					// is asynchronous, so we need to reset the previous
+-					// term synchronously and asynchronously :-(
+-					this._delay(function() {
+-						this.previous = previous;
+-						this.selectedItem = item;
+-					});
+-				}
+-
+-				if ( false !== this._trigger( "select", event, { item: item } ) ) {
+-					this._value( item.value );
+-				}
+-				// reset the term after the select event
+-				// this allows custom select handling to work properly
+-				this.term = this._value();
+-
+-				this.close( event );
+-				this.selectedItem = item;
+-			}
+-		});
+-
+-		this.liveRegion = $( "<span>", {
+-				role: "status",
+-				"aria-live": "polite"
+-			})
+-			.addClass( "ui-helper-hidden-accessible" )
+-			.insertBefore( this.element );
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		clearTimeout( this.searching );
+-		this.element
+-			.removeClass( "ui-autocomplete-input" )
+-			.removeAttr( "autocomplete" );
+-		this.menu.element.remove();
+-		this.liveRegion.remove();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "source" ) {
+-			this._initSource();
+-		}
+-		if ( key === "appendTo" ) {
+-			this.menu.element.appendTo( this._appendTo() );
+-		}
+-		if ( key === "disabled" && value && this.xhr ) {
+-			this.xhr.abort();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-
+-		if ( element ) {
+-			element = element.jquery || element.nodeType ?
+-				$( element ) :
+-				this.document.find( element ).eq( 0 );
+-		}
+-
+-		if ( !element ) {
+-			element = this.element.closest( ".ui-front" );
+-		}
+-
+-		if ( !element.length ) {
+-			element = this.document[0].body;
+-		}
+-
+-		return element;
+-	},
+-
+-	_initSource: function() {
+-		var array, url,
+-			that = this;
+-		if ( $.isArray(this.options.source) ) {
+-			array = this.options.source;
+-			this.source = function( request, response ) {
+-				response( $.ui.autocomplete.filter( array, request.term ) );
+-			};
+-		} else if ( typeof this.options.source === "string" ) {
+-			url = this.options.source;
+-			this.source = function( request, response ) {
+-				if ( that.xhr ) {
+-					that.xhr.abort();
+-				}
+-				that.xhr = $.ajax({
+-					url: url,
+-					data: request,
+-					dataType: "json",
+-					success: function( data ) {
+-						response( data );
+-					},
+-					error: function() {
+-						response( [] );
+-					}
+-				});
+-			};
+-		} else {
+-			this.source = this.options.source;
+-		}
+-	},
+-
+-	_searchTimeout: function( event ) {
+-		clearTimeout( this.searching );
+-		this.searching = this._delay(function() {
+-			// only search if the value has changed
+-			if ( this.term !== this._value() ) {
+-				this.selectedItem = null;
+-				this.search( null, event );
+-			}
+-		}, this.options.delay );
+-	},
+-
+-	search: function( value, event ) {
+-		value = value != null ? value : this._value();
+-
+-		// always save the actual value, not the one passed as an argument
+-		this.term = this._value();
+-
+-		if ( value.length < this.options.minLength ) {
+-			return this.close( event );
+-		}
+-
+-		if ( this._trigger( "search", event ) === false ) {
+-			return;
+-		}
+-
+-		return this._search( value );
+-	},
+-
+-	_search: function( value ) {
+-		this.pending++;
+-		this.element.addClass( "ui-autocomplete-loading" );
+-		this.cancelSearch = false;
+-
+-		this.source( { term: value }, this._response() );
+-	},
+-
+-	_response: function() {
+-		var that = this,
+-			index = ++requestIndex;
+-
+-		return function( content ) {
+-			if ( index === requestIndex ) {
+-				that.__response( content );
+-			}
+-
+-			that.pending--;
+-			if ( !that.pending ) {
+-				that.element.removeClass( "ui-autocomplete-loading" );
+-			}
+-		};
+-	},
+-
+-	__response: function( content ) {
+-		if ( content ) {
+-			content = this._normalize( content );
+-		}
+-		this._trigger( "response", null, { content: content } );
+-		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+-			this._suggest( content );
+-			this._trigger( "open" );
+-		} else {
+-			// use ._close() instead of .close() so we don't cancel future searches
+-			this._close();
+-		}
+-	},
+-
+-	close: function( event ) {
+-		this.cancelSearch = true;
+-		this._close( event );
+-	},
+-
+-	_close: function( event ) {
+-		if ( this.menu.element.is( ":visible" ) ) {
+-			this.menu.element.hide();
+-			this.menu.blur();
+-			this.isNewMenu = true;
+-			this._trigger( "close", event );
+-		}
+-	},
+-
+-	_change: function( event ) {
+-		if ( this.previous !== this._value() ) {
+-			this._trigger( "change", event, { item: this.selectedItem } );
+-		}
+-	},
+-
+-	_normalize: function( items ) {
+-		// assume all items have the right format when the first item is complete
+-		if ( items.length && items[0].label && items[0].value ) {
+-			return items;
+-		}
+-		return $.map( items, function( item ) {
+-			if ( typeof item === "string" ) {
+-				return {
+-					label: item,
+-					value: item
+-				};
+-			}
+-			return $.extend({
+-				label: item.label || item.value,
+-				value: item.value || item.label
+-			}, item );
+-		});
+-	},
+-
+-	_suggest: function( items ) {
+-		var ul = this.menu.element.empty();
+-		this._renderMenu( ul, items );
+-		this.isNewMenu = true;
+-		this.menu.refresh();
+-
+-		// size and position menu
+-		ul.show();
+-		this._resizeMenu();
+-		ul.position( $.extend({
+-			of: this.element
+-		}, this.options.position ));
+-
+-		if ( this.options.autoFocus ) {
+-			this.menu.next();
+-		}
+-	},
+-
+-	_resizeMenu: function() {
+-		var ul = this.menu.element;
+-		ul.outerWidth( Math.max(
+-			// Firefox wraps long text (possibly a rounding bug)
+-			// so we add 1px to avoid the wrapping (#7513)
+-			ul.width( "" ).outerWidth() + 1,
+-			this.element.outerWidth()
+-		) );
+-	},
+-
+-	_renderMenu: function( ul, items ) {
+-		var that = this;
+-		$.each( items, function( index, item ) {
+-			that._renderItemData( ul, item );
+-		});
+-	},
+-
+-	_renderItemData: function( ul, item ) {
+-		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+-	},
+-
+-	_renderItem: function( ul, item ) {
+-		return $( "<li>" )
+-			.append( $( "<a>" ).text( item.label ) )
+-			.appendTo( ul );
+-	},
+-
+-	_move: function( direction, event ) {
+-		if ( !this.menu.element.is( ":visible" ) ) {
+-			this.search( null, event );
+-			return;
+-		}
+-		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+-				this.menu.isLastItem() && /^next/.test( direction ) ) {
+-			this._value( this.term );
+-			this.menu.blur();
+-			return;
+-		}
+-		this.menu[ direction ]( event );
+-	},
+-
+-	widget: function() {
+-		return this.menu.element;
+-	},
+-
+-	_value: function() {
+-		return this.valueMethod.apply( this.element, arguments );
+-	},
+-
+-	_keyEvent: function( keyEvent, event ) {
+-		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-			this._move( keyEvent, event );
+-
+-			// prevents moving cursor to beginning/end of the text field in some browsers
+-			event.preventDefault();
+-		}
+-	}
+-});
+-
+-$.extend( $.ui.autocomplete, {
+-	escapeRegex: function( value ) {
+-		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+-	},
+-	filter: function(array, term) {
+-		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+-		return $.grep( array, function(value) {
+-			return matcher.test( value.label || value.value || value );
+-		});
+-	}
+-});
+-
+-
+-// live region extension, adding a `messages` option
+-// NOTE: This is an experimental API. We are still investigating
+-// a full solution for string manipulation and internationalization.
+-$.widget( "ui.autocomplete", $.ui.autocomplete, {
+-	options: {
+-		messages: {
+-			noResults: "No search results.",
+-			results: function( amount ) {
+-				return amount + ( amount > 1 ? " results are" : " result is" ) +
+-					" available, use up and down arrow keys to navigate.";
+-			}
+-		}
+-	},
+-
+-	__response: function( content ) {
+-		var message;
+-		this._superApply( arguments );
+-		if ( this.options.disabled || this.cancelSearch ) {
+-			return;
+-		}
+-		if ( content && content.length ) {
+-			message = this.options.messages.results( content.length );
+-		} else {
+-			message = this.options.messages.noResults;
+-		}
+-		this.liveRegion.text( message );
+-	}
+-});
+-
+-}( jQuery ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-highlight.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-highlight.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-highlight.js	(revision 15488)
+@@ -1,50 +0,0 @@
+-/*!
+- * jQuery UI Effects Highlight 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/highlight-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.highlight = function( o, done ) {
+-	var elem = $( this ),
+-		props = [ "backgroundImage", "backgroundColor", "opacity" ],
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		animation = {
+-			backgroundColor: elem.css( "backgroundColor" )
+-		};
+-
+-	if (mode === "hide") {
+-		animation.opacity = 0;
+-	}
+-
+-	$.effects.save( elem, props );
+-
+-	elem
+-		.show()
+-		.css({
+-			backgroundImage: "none",
+-			backgroundColor: o.color || "#ffff99"
+-		})
+-		.animate( animation, {
+-			queue: false,
+-			duration: o.duration,
+-			easing: o.easing,
+-			complete: function() {
+-				if ( mode === "hide" ) {
+-					elem.hide();
+-				}
+-				$.effects.restore( elem, props );
+-				done();
+-			}
+-		});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.selectable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.selectable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.selectable.js	(revision 15488)
+@@ -1,277 +0,0 @@
+-/*!
+- * jQuery UI Selectable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/selectable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.selectable", $.ui.mouse, {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoRefresh: true,
+-		distance: 0,
+-		filter: "*",
+-		tolerance: "touch",
+-
+-		// callbacks
+-		selected: null,
+-		selecting: null,
+-		start: null,
+-		stop: null,
+-		unselected: null,
+-		unselecting: null
+-	},
+-	_create: function() {
+-		var selectees,
+-			that = this;
+-
+-		this.element.addClass("ui-selectable");
+-
+-		this.dragged = false;
+-
+-		// cache selectee children based on filter
+-		this.refresh = function() {
+-			selectees = $(that.options.filter, that.element[0]);
+-			selectees.addClass("ui-selectee");
+-			selectees.each(function() {
+-				var $this = $(this),
+-					pos = $this.offset();
+-				$.data(this, "selectable-item", {
+-					element: this,
+-					$element: $this,
+-					left: pos.left,
+-					top: pos.top,
+-					right: pos.left + $this.outerWidth(),
+-					bottom: pos.top + $this.outerHeight(),
+-					startselected: false,
+-					selected: $this.hasClass("ui-selected"),
+-					selecting: $this.hasClass("ui-selecting"),
+-					unselecting: $this.hasClass("ui-unselecting")
+-				});
+-			});
+-		};
+-		this.refresh();
+-
+-		this.selectees = selectees.addClass("ui-selectee");
+-
+-		this._mouseInit();
+-
+-		this.helper = $("<div class='ui-selectable-helper'></div>");
+-	},
+-
+-	_destroy: function() {
+-		this.selectees
+-			.removeClass("ui-selectee")
+-			.removeData("selectable-item");
+-		this.element
+-			.removeClass("ui-selectable ui-selectable-disabled");
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseStart: function(event) {
+-		var that = this,
+-			options = this.options;
+-
+-		this.opos = [event.pageX, event.pageY];
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		this.selectees = $(options.filter, this.element[0]);
+-
+-		this._trigger("start", event);
+-
+-		$(options.appendTo).append(this.helper);
+-		// position helper (lasso)
+-		this.helper.css({
+-			"left": event.pageX,
+-			"top": event.pageY,
+-			"width": 0,
+-			"height": 0
+-		});
+-
+-		if (options.autoRefresh) {
+-			this.refresh();
+-		}
+-
+-		this.selectees.filter(".ui-selected").each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.startselected = true;
+-			if (!event.metaKey && !event.ctrlKey) {
+-				selectee.$element.removeClass("ui-selected");
+-				selectee.selected = false;
+-				selectee.$element.addClass("ui-unselecting");
+-				selectee.unselecting = true;
+-				// selectable UNSELECTING callback
+-				that._trigger("unselecting", event, {
+-					unselecting: selectee.element
+-				});
+-			}
+-		});
+-
+-		$(event.target).parents().addBack().each(function() {
+-			var doSelect,
+-				selectee = $.data(this, "selectable-item");
+-			if (selectee) {
+-				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+-				selectee.$element
+-					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+-					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+-				selectee.unselecting = !doSelect;
+-				selectee.selecting = doSelect;
+-				selectee.selected = doSelect;
+-				// selectable (UN)SELECTING callback
+-				if (doSelect) {
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				} else {
+-					that._trigger("unselecting", event, {
+-						unselecting: selectee.element
+-					});
+-				}
+-				return false;
+-			}
+-		});
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		this.dragged = true;
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		var tmp,
+-			that = this,
+-			options = this.options,
+-			x1 = this.opos[0],
+-			y1 = this.opos[1],
+-			x2 = event.pageX,
+-			y2 = event.pageY;
+-
+-		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+-		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+-		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+-
+-		this.selectees.each(function() {
+-			var selectee = $.data(this, "selectable-item"),
+-				hit = false;
+-
+-			//prevent helper from being selected if appendTo: selectable
+-			if (!selectee || selectee.element === that.element[0]) {
+-				return;
+-			}
+-
+-			if (options.tolerance === "touch") {
+-				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+-			} else if (options.tolerance === "fit") {
+-				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+-			}
+-
+-			if (hit) {
+-				// SELECT
+-				if (selectee.selected) {
+-					selectee.$element.removeClass("ui-selected");
+-					selectee.selected = false;
+-				}
+-				if (selectee.unselecting) {
+-					selectee.$element.removeClass("ui-unselecting");
+-					selectee.unselecting = false;
+-				}
+-				if (!selectee.selecting) {
+-					selectee.$element.addClass("ui-selecting");
+-					selectee.selecting = true;
+-					// selectable SELECTING callback
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				}
+-			} else {
+-				// UNSELECT
+-				if (selectee.selecting) {
+-					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						selectee.$element.addClass("ui-selected");
+-						selectee.selected = true;
+-					} else {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						if (selectee.startselected) {
+-							selectee.$element.addClass("ui-unselecting");
+-							selectee.unselecting = true;
+-						}
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-				if (selectee.selected) {
+-					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+-						selectee.$element.removeClass("ui-selected");
+-						selectee.selected = false;
+-
+-						selectee.$element.addClass("ui-unselecting");
+-						selectee.unselecting = true;
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-			}
+-		});
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-		var that = this;
+-
+-		this.dragged = false;
+-
+-		$(".ui-unselecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-unselecting");
+-			selectee.unselecting = false;
+-			selectee.startselected = false;
+-			that._trigger("unselected", event, {
+-				unselected: selectee.element
+-			});
+-		});
+-		$(".ui-selecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+-			selectee.selecting = false;
+-			selectee.selected = true;
+-			selectee.startselected = true;
+-			that._trigger("selected", event, {
+-				selected: selectee.element
+-			});
+-		});
+-		this._trigger("stop", event);
+-
+-		this.helper.remove();
+-
+-		return false;
+-	}
+-
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.menu.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.menu.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.menu.js	(revision 15488)
+@@ -1,621 +0,0 @@
+-/*!
+- * jQuery UI Menu 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/menu/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.position.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget( "ui.menu", {
+-	version: "1.10.3",
+-	defaultElement: "<ul>",
+-	delay: 300,
+-	options: {
+-		icons: {
+-			submenu: "ui-icon-carat-1-e"
+-		},
+-		menus: "ul",
+-		position: {
+-			my: "left top",
+-			at: "right top"
+-		},
+-		role: "menu",
+-
+-		// callbacks
+-		blur: null,
+-		focus: null,
+-		select: null
+-	},
+-
+-	_create: function() {
+-		this.activeMenu = this.element;
+-		// flag used to prevent firing of the click handler
+-		// as the event bubbles up through nested menus
+-		this.mouseHandled = false;
+-		this.element
+-			.uniqueId()
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+-			.attr({
+-				role: this.options.role,
+-				tabIndex: 0
+-			})
+-			// need to catch all clicks on disabled menu
+-			// not possible through _on
+-			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
+-				if ( this.options.disabled ) {
+-					event.preventDefault();
+-				}
+-			}, this ));
+-
+-		if ( this.options.disabled ) {
+-			this.element
+-				.addClass( "ui-state-disabled" )
+-				.attr( "aria-disabled", "true" );
+-		}
+-
+-		this._on({
+-			// Prevent focus from sticking to links inside menu after clicking
+-			// them (focus should always stay on UL during navigation).
+-			"mousedown .ui-menu-item > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-state-disabled > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-menu-item:has(a)": function( event ) {
+-				var target = $( event.target ).closest( ".ui-menu-item" );
+-				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+-					this.mouseHandled = true;
+-
+-					this.select( event );
+-					// Open submenu on click
+-					if ( target.has( ".ui-menu" ).length ) {
+-						this.expand( event );
+-					} else if ( !this.element.is( ":focus" ) ) {
+-						// Redirect focus to the menu
+-						this.element.trigger( "focus", [ true ] );
+-
+-						// If the active item is on the top level, let it stay active.
+-						// Otherwise, blur the active item since it is no longer visible.
+-						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+-							clearTimeout( this.timer );
+-						}
+-					}
+-				}
+-			},
+-			"mouseenter .ui-menu-item": function( event ) {
+-				var target = $( event.currentTarget );
+-				// Remove ui-state-active class from siblings of the newly focused menu item
+-				// to avoid a jump caused by adjacent elements both having a class with a border
+-				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
+-				this.focus( event, target );
+-			},
+-			mouseleave: "collapseAll",
+-			"mouseleave .ui-menu": "collapseAll",
+-			focus: function( event, keepActiveItem ) {
+-				// If there's already an active item, keep it active
+-				// If not, activate the first item
+-				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+-
+-				if ( !keepActiveItem ) {
+-					this.focus( event, item );
+-				}
+-			},
+-			blur: function( event ) {
+-				this._delay(function() {
+-					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+-						this.collapseAll( event );
+-					}
+-				});
+-			},
+-			keydown: "_keydown"
+-		});
+-
+-		this.refresh();
+-
+-		// Clicks outside of a menu collapse any open menus
+-		this._on( this.document, {
+-			click: function( event ) {
+-				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
+-					this.collapseAll( event );
+-				}
+-
+-				// Reset the mouseHandled flag
+-				this.mouseHandled = false;
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		// Destroy (sub)menus
+-		this.element
+-			.removeAttr( "aria-activedescendant" )
+-			.find( ".ui-menu" ).addBack()
+-				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
+-				.removeAttr( "role" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "aria-labelledby" )
+-				.removeAttr( "aria-expanded" )
+-				.removeAttr( "aria-hidden" )
+-				.removeAttr( "aria-disabled" )
+-				.removeUniqueId()
+-				.show();
+-
+-		// Destroy menu items
+-		this.element.find( ".ui-menu-item" )
+-			.removeClass( "ui-menu-item" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-disabled" )
+-			.children( "a" )
+-				.removeUniqueId()
+-				.removeClass( "ui-corner-all ui-state-hover" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "role" )
+-				.removeAttr( "aria-haspopup" )
+-				.children().each( function() {
+-					var elem = $( this );
+-					if ( elem.data( "ui-menu-submenu-carat" ) ) {
+-						elem.remove();
+-					}
+-				});
+-
+-		// Destroy menu dividers
+-		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:20*/
+-		var match, prev, character, skip, regex,
+-			preventDefault = true;
+-
+-		function escape( value ) {
+-			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+-		}
+-
+-		switch ( event.keyCode ) {
+-		case $.ui.keyCode.PAGE_UP:
+-			this.previousPage( event );
+-			break;
+-		case $.ui.keyCode.PAGE_DOWN:
+-			this.nextPage( event );
+-			break;
+-		case $.ui.keyCode.HOME:
+-			this._move( "first", "first", event );
+-			break;
+-		case $.ui.keyCode.END:
+-			this._move( "last", "last", event );
+-			break;
+-		case $.ui.keyCode.UP:
+-			this.previous( event );
+-			break;
+-		case $.ui.keyCode.DOWN:
+-			this.next( event );
+-			break;
+-		case $.ui.keyCode.LEFT:
+-			this.collapse( event );
+-			break;
+-		case $.ui.keyCode.RIGHT:
+-			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+-				this.expand( event );
+-			}
+-			break;
+-		case $.ui.keyCode.ENTER:
+-		case $.ui.keyCode.SPACE:
+-			this._activate( event );
+-			break;
+-		case $.ui.keyCode.ESCAPE:
+-			this.collapse( event );
+-			break;
+-		default:
+-			preventDefault = false;
+-			prev = this.previousFilter || "";
+-			character = String.fromCharCode( event.keyCode );
+-			skip = false;
+-
+-			clearTimeout( this.filterTimer );
+-
+-			if ( character === prev ) {
+-				skip = true;
+-			} else {
+-				character = prev + character;
+-			}
+-
+-			regex = new RegExp( "^" + escape( character ), "i" );
+-			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-				return regex.test( $( this ).children( "a" ).text() );
+-			});
+-			match = skip && match.index( this.active.next() ) !== -1 ?
+-				this.active.nextAll( ".ui-menu-item" ) :
+-				match;
+-
+-			// If no matches on the current filter, reset to the last character pressed
+-			// to move down the menu to the first item that starts with that character
+-			if ( !match.length ) {
+-				character = String.fromCharCode( event.keyCode );
+-				regex = new RegExp( "^" + escape( character ), "i" );
+-				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-					return regex.test( $( this ).children( "a" ).text() );
+-				});
+-			}
+-
+-			if ( match.length ) {
+-				this.focus( event, match );
+-				if ( match.length > 1 ) {
+-					this.previousFilter = character;
+-					this.filterTimer = this._delay(function() {
+-						delete this.previousFilter;
+-					}, 1000 );
+-				} else {
+-					delete this.previousFilter;
+-				}
+-			} else {
+-				delete this.previousFilter;
+-			}
+-		}
+-
+-		if ( preventDefault ) {
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_activate: function( event ) {
+-		if ( !this.active.is( ".ui-state-disabled" ) ) {
+-			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
+-				this.expand( event );
+-			} else {
+-				this.select( event );
+-			}
+-		}
+-	},
+-
+-	refresh: function() {
+-		var menus,
+-			icon = this.options.icons.submenu,
+-			submenus = this.element.find( this.options.menus );
+-
+-		// Initialize nested menus
+-		submenus.filter( ":not(.ui-menu)" )
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.hide()
+-			.attr({
+-				role: this.options.role,
+-				"aria-hidden": "true",
+-				"aria-expanded": "false"
+-			})
+-			.each(function() {
+-				var menu = $( this ),
+-					item = menu.prev( "a" ),
+-					submenuCarat = $( "<span>" )
+-						.addClass( "ui-menu-icon ui-icon " + icon )
+-						.data( "ui-menu-submenu-carat", true );
+-
+-				item
+-					.attr( "aria-haspopup", "true" )
+-					.prepend( submenuCarat );
+-				menu.attr( "aria-labelledby", item.attr( "id" ) );
+-			});
+-
+-		menus = submenus.add( this.element );
+-
+-		// Don't refresh list items that are already adapted
+-		menus.children( ":not(.ui-menu-item):has(a)" )
+-			.addClass( "ui-menu-item" )
+-			.attr( "role", "presentation" )
+-			.children( "a" )
+-				.uniqueId()
+-				.addClass( "ui-corner-all" )
+-				.attr({
+-					tabIndex: -1,
+-					role: this._itemRole()
+-				});
+-
+-		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
+-		menus.children( ":not(.ui-menu-item)" ).each(function() {
+-			var item = $( this );
+-			// hyphen, em dash, en dash
+-			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
+-				item.addClass( "ui-widget-content ui-menu-divider" );
+-			}
+-		});
+-
+-		// Add aria-disabled attribute to any disabled menu item
+-		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+-
+-		// If the active item has been removed, blur the menu
+-		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			this.blur();
+-		}
+-	},
+-
+-	_itemRole: function() {
+-		return {
+-			menu: "menuitem",
+-			listbox: "option"
+-		}[ this.options.role ];
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "icons" ) {
+-			this.element.find( ".ui-menu-icon" )
+-				.removeClass( this.options.icons.submenu )
+-				.addClass( value.submenu );
+-		}
+-		this._super( key, value );
+-	},
+-
+-	focus: function( event, item ) {
+-		var nested, focused;
+-		this.blur( event, event && event.type === "focus" );
+-
+-		this._scrollIntoView( item );
+-
+-		this.active = item.first();
+-		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
+-		// Only update aria-activedescendant if there's a role
+-		// otherwise we assume focus is managed elsewhere
+-		if ( this.options.role ) {
+-			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+-		}
+-
+-		// Highlight active parent menu item, if any
+-		this.active
+-			.parent()
+-			.closest( ".ui-menu-item" )
+-			.children( "a:first" )
+-			.addClass( "ui-state-active" );
+-
+-		if ( event && event.type === "keydown" ) {
+-			this._close();
+-		} else {
+-			this.timer = this._delay(function() {
+-				this._close();
+-			}, this.delay );
+-		}
+-
+-		nested = item.children( ".ui-menu" );
+-		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
+-			this._startOpening(nested);
+-		}
+-		this.activeMenu = item.parent();
+-
+-		this._trigger( "focus", event, { item: item } );
+-	},
+-
+-	_scrollIntoView: function( item ) {
+-		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+-		if ( this._hasScroll() ) {
+-			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+-			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+-			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+-			scroll = this.activeMenu.scrollTop();
+-			elementHeight = this.activeMenu.height();
+-			itemHeight = item.height();
+-
+-			if ( offset < 0 ) {
+-				this.activeMenu.scrollTop( scroll + offset );
+-			} else if ( offset + itemHeight > elementHeight ) {
+-				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+-			}
+-		}
+-	},
+-
+-	blur: function( event, fromFocus ) {
+-		if ( !fromFocus ) {
+-			clearTimeout( this.timer );
+-		}
+-
+-		if ( !this.active ) {
+-			return;
+-		}
+-
+-		this.active.children( "a" ).removeClass( "ui-state-focus" );
+-		this.active = null;
+-
+-		this._trigger( "blur", event, { item: this.active } );
+-	},
+-
+-	_startOpening: function( submenu ) {
+-		clearTimeout( this.timer );
+-
+-		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
+-		// shift in the submenu position when mousing over the carat icon
+-		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+-			return;
+-		}
+-
+-		this.timer = this._delay(function() {
+-			this._close();
+-			this._open( submenu );
+-		}, this.delay );
+-	},
+-
+-	_open: function( submenu ) {
+-		var position = $.extend({
+-			of: this.active
+-		}, this.options.position );
+-
+-		clearTimeout( this.timer );
+-		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+-			.hide()
+-			.attr( "aria-hidden", "true" );
+-
+-		submenu
+-			.show()
+-			.removeAttr( "aria-hidden" )
+-			.attr( "aria-expanded", "true" )
+-			.position( position );
+-	},
+-
+-	collapseAll: function( event, all ) {
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			// If we were passed an event, look for the submenu that contains the event
+-			var currentMenu = all ? this.element :
+-				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+-
+-			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+-			if ( !currentMenu.length ) {
+-				currentMenu = this.element;
+-			}
+-
+-			this._close( currentMenu );
+-
+-			this.blur( event );
+-			this.activeMenu = currentMenu;
+-		}, this.delay );
+-	},
+-
+-	// With no arguments, closes the currently active menu - if nothing is active
+-	// it closes all menus.  If passed an argument, it will search for menus BELOW
+-	_close: function( startMenu ) {
+-		if ( !startMenu ) {
+-			startMenu = this.active ? this.active.parent() : this.element;
+-		}
+-
+-		startMenu
+-			.find( ".ui-menu" )
+-				.hide()
+-				.attr( "aria-hidden", "true" )
+-				.attr( "aria-expanded", "false" )
+-			.end()
+-			.find( "a.ui-state-active" )
+-				.removeClass( "ui-state-active" );
+-	},
+-
+-	collapse: function( event ) {
+-		var newItem = this.active &&
+-			this.active.parent().closest( ".ui-menu-item", this.element );
+-		if ( newItem && newItem.length ) {
+-			this._close();
+-			this.focus( event, newItem );
+-		}
+-	},
+-
+-	expand: function( event ) {
+-		var newItem = this.active &&
+-			this.active
+-				.children( ".ui-menu " )
+-				.children( ".ui-menu-item" )
+-				.first();
+-
+-		if ( newItem && newItem.length ) {
+-			this._open( newItem.parent() );
+-
+-			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+-			this._delay(function() {
+-				this.focus( event, newItem );
+-			});
+-		}
+-	},
+-
+-	next: function( event ) {
+-		this._move( "next", "first", event );
+-	},
+-
+-	previous: function( event ) {
+-		this._move( "prev", "last", event );
+-	},
+-
+-	isFirstItem: function() {
+-		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+-	},
+-
+-	isLastItem: function() {
+-		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+-	},
+-
+-	_move: function( direction, filter, event ) {
+-		var next;
+-		if ( this.active ) {
+-			if ( direction === "first" || direction === "last" ) {
+-				next = this.active
+-					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+-					.eq( -1 );
+-			} else {
+-				next = this.active
+-					[ direction + "All" ]( ".ui-menu-item" )
+-					.eq( 0 );
+-			}
+-		}
+-		if ( !next || !next.length || !this.active ) {
+-			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
+-		}
+-
+-		this.focus( event, next );
+-	},
+-
+-	nextPage: function( event ) {
+-		var item, base, height;
+-
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isLastItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.nextAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base - height < 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
+-				[ !this.active ? "first" : "last" ]() );
+-		}
+-	},
+-
+-	previousPage: function( event ) {
+-		var item, base, height;
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isFirstItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.prevAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base + height > 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+-		}
+-	},
+-
+-	_hasScroll: function() {
+-		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+-	},
+-
+-	select: function( event ) {
+-		// TODO: It should never be possible to not have an active item at this
+-		// point, but the tests don't trigger mouseenter before click.
+-		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+-		var ui = { item: this.active };
+-		if ( !this.active.has( ".ui-menu" ).length ) {
+-			this.collapseAll( event, true );
+-		}
+-		this._trigger( "select", event, ui );
+-	}
+-});
+-
+-}( jQuery ));
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-pulsate.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-pulsate.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-pulsate.js	(revision 15488)
+@@ -1,63 +0,0 @@
+-/*!
+- * jQuery UI Effects Pulsate 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/pulsate-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.pulsate = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		showhide = ( show || mode === "hide" ),
+-
+-		// showing or hiding leaves of the "last" animation
+-		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+-		duration = o.duration / anims,
+-		animateTo = 0,
+-		queue = elem.queue(),
+-		queuelen = queue.length,
+-		i;
+-
+-	if ( show || !elem.is(":visible")) {
+-		elem.css( "opacity", 0 ).show();
+-		animateTo = 1;
+-	}
+-
+-	// anims - 1 opacity "toggles"
+-	for ( i = 1; i < anims; i++ ) {
+-		elem.animate({
+-			opacity: animateTo
+-		}, duration, o.easing );
+-		animateTo = 1 - animateTo;
+-	}
+-
+-	elem.animate({
+-		opacity: animateTo
+-	}, duration, o.easing);
+-
+-	elem.queue(function() {
+-		if ( hide ) {
+-			elem.hide();
+-		}
+-		done();
+-	});
+-
+-	// We just queued up "anims" animations, we need to put them next in the queue
+-	if ( queuelen > 1 ) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	elem.dequeue();
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.button.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.button.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.button.js	(revision 15488)
+@@ -1,419 +0,0 @@
+-/*!
+- * jQuery UI Button 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/button/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var lastActive, startXPos, startYPos, clickDragged,
+-	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+-	stateClasses = "ui-state-hover ui-state-active ",
+-	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+-	formResetHandler = function() {
+-		var form = $( this );
+-		setTimeout(function() {
+-			form.find( ":ui-button" ).button( "refresh" );
+-		}, 1 );
+-	},
+-	radioGroup = function( radio ) {
+-		var name = radio.name,
+-			form = radio.form,
+-			radios = $( [] );
+-		if ( name ) {
+-			name = name.replace( /'/g, "\\'" );
+-			if ( form ) {
+-				radios = $( form ).find( "[name='" + name + "']" );
+-			} else {
+-				radios = $( "[name='" + name + "']", radio.ownerDocument )
+-					.filter(function() {
+-						return !this.form;
+-					});
+-			}
+-		}
+-		return radios;
+-	};
+-
+-$.widget( "ui.button", {
+-	version: "1.10.3",
+-	defaultElement: "<button>",
+-	options: {
+-		disabled: null,
+-		text: true,
+-		label: null,
+-		icons: {
+-			primary: null,
+-			secondary: null
+-		}
+-	},
+-	_create: function() {
+-		this.element.closest( "form" )
+-			.unbind( "reset" + this.eventNamespace )
+-			.bind( "reset" + this.eventNamespace, formResetHandler );
+-
+-		if ( typeof this.options.disabled !== "boolean" ) {
+-			this.options.disabled = !!this.element.prop( "disabled" );
+-		} else {
+-			this.element.prop( "disabled", this.options.disabled );
+-		}
+-
+-		this._determineButtonType();
+-		this.hasTitle = !!this.buttonElement.attr( "title" );
+-
+-		var that = this,
+-			options = this.options,
+-			toggleButton = this.type === "checkbox" || this.type === "radio",
+-			activeClass = !toggleButton ? "ui-state-active" : "",
+-			focusClass = "ui-state-focus";
+-
+-		if ( options.label === null ) {
+-			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+-		}
+-
+-		this._hoverable( this.buttonElement );
+-
+-		this.buttonElement
+-			.addClass( baseClasses )
+-			.attr( "role", "button" )
+-			.bind( "mouseenter" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				if ( this === lastActive ) {
+-					$( this ).addClass( "ui-state-active" );
+-				}
+-			})
+-			.bind( "mouseleave" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( activeClass );
+-			})
+-			.bind( "click" + this.eventNamespace, function( event ) {
+-				if ( options.disabled ) {
+-					event.preventDefault();
+-					event.stopImmediatePropagation();
+-				}
+-			});
+-
+-		this.element
+-			.bind( "focus" + this.eventNamespace, function() {
+-				// no need to check disabled, focus won't be triggered anyway
+-				that.buttonElement.addClass( focusClass );
+-			})
+-			.bind( "blur" + this.eventNamespace, function() {
+-				that.buttonElement.removeClass( focusClass );
+-			});
+-
+-		if ( toggleButton ) {
+-			this.element.bind( "change" + this.eventNamespace, function() {
+-				if ( clickDragged ) {
+-					return;
+-				}
+-				that.refresh();
+-			});
+-			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+-			// prevents issue where button state changes but checkbox/radio checked state
+-			// does not in Firefox (see ticket #6970)
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					clickDragged = false;
+-					startXPos = event.pageX;
+-					startYPos = event.pageY;
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+-						clickDragged = true;
+-					}
+-			});
+-		}
+-
+-		if ( this.type === "checkbox" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-			});
+-		} else if ( this.type === "radio" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).addClass( "ui-state-active" );
+-				that.buttonElement.attr( "aria-pressed", "true" );
+-
+-				var radio = that.element[ 0 ];
+-				radioGroup( radio )
+-					.not( radio )
+-					.map(function() {
+-						return $( this ).button( "widget" )[ 0 ];
+-					})
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			});
+-		} else {
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).addClass( "ui-state-active" );
+-					lastActive = this;
+-					that.document.one( "mouseup", function() {
+-						lastActive = null;
+-					});
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).removeClass( "ui-state-active" );
+-				})
+-				.bind( "keydown" + this.eventNamespace, function(event) {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+-						$( this ).addClass( "ui-state-active" );
+-					}
+-				})
+-				// see #8559, we bind to blur here in case the button element loses
+-				// focus between keydown and keyup, it would be left in an "active" state
+-				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+-					$( this ).removeClass( "ui-state-active" );
+-				});
+-
+-			if ( this.buttonElement.is("a") ) {
+-				this.buttonElement.keyup(function(event) {
+-					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+-						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+-						$( this ).click();
+-					}
+-				});
+-			}
+-		}
+-
+-		// TODO: pull out $.Widget's handling for the disabled option into
+-		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+-		// be overridden by individual plugins
+-		this._setOption( "disabled", options.disabled );
+-		this._resetButton();
+-	},
+-
+-	_determineButtonType: function() {
+-		var ancestor, labelSelector, checked;
+-
+-		if ( this.element.is("[type=checkbox]") ) {
+-			this.type = "checkbox";
+-		} else if ( this.element.is("[type=radio]") ) {
+-			this.type = "radio";
+-		} else if ( this.element.is("input") ) {
+-			this.type = "input";
+-		} else {
+-			this.type = "button";
+-		}
+-
+-		if ( this.type === "checkbox" || this.type === "radio" ) {
+-			// we don't search against the document in case the element
+-			// is disconnected from the DOM
+-			ancestor = this.element.parents().last();
+-			labelSelector = "label[for='" + this.element.attr("id") + "']";
+-			this.buttonElement = ancestor.find( labelSelector );
+-			if ( !this.buttonElement.length ) {
+-				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+-				this.buttonElement = ancestor.filter( labelSelector );
+-				if ( !this.buttonElement.length ) {
+-					this.buttonElement = ancestor.find( labelSelector );
+-				}
+-			}
+-			this.element.addClass( "ui-helper-hidden-accessible" );
+-
+-			checked = this.element.is( ":checked" );
+-			if ( checked ) {
+-				this.buttonElement.addClass( "ui-state-active" );
+-			}
+-			this.buttonElement.prop( "aria-pressed", checked );
+-		} else {
+-			this.buttonElement = this.element;
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.buttonElement;
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-helper-hidden-accessible" );
+-		this.buttonElement
+-			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-pressed" )
+-			.html( this.buttonElement.find(".ui-button-text").html() );
+-
+-		if ( !this.hasTitle ) {
+-			this.buttonElement.removeAttr( "title" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-			} else {
+-				this.element.prop( "disabled", false );
+-			}
+-			return;
+-		}
+-		this._resetButton();
+-	},
+-
+-	refresh: function() {
+-		//See #8237 & #8828
+-		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+-
+-		if ( isDisabled !== this.options.disabled ) {
+-			this._setOption( "disabled", isDisabled );
+-		}
+-		if ( this.type === "radio" ) {
+-			radioGroup( this.element[0] ).each(function() {
+-				if ( $( this ).is( ":checked" ) ) {
+-					$( this ).button( "widget" )
+-						.addClass( "ui-state-active" )
+-						.attr( "aria-pressed", "true" );
+-				} else {
+-					$( this ).button( "widget" )
+-						.removeClass( "ui-state-active" )
+-						.attr( "aria-pressed", "false" );
+-				}
+-			});
+-		} else if ( this.type === "checkbox" ) {
+-			if ( this.element.is( ":checked" ) ) {
+-				this.buttonElement
+-					.addClass( "ui-state-active" )
+-					.attr( "aria-pressed", "true" );
+-			} else {
+-				this.buttonElement
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			}
+-		}
+-	},
+-
+-	_resetButton: function() {
+-		if ( this.type === "input" ) {
+-			if ( this.options.label ) {
+-				this.element.val( this.options.label );
+-			}
+-			return;
+-		}
+-		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+-			buttonText = $( "<span></span>", this.document[0] )
+-				.addClass( "ui-button-text" )
+-				.html( this.options.label )
+-				.appendTo( buttonElement.empty() )
+-				.text(),
+-			icons = this.options.icons,
+-			multipleIcons = icons.primary && icons.secondary,
+-			buttonClasses = [];
+-
+-		if ( icons.primary || icons.secondary ) {
+-			if ( this.options.text ) {
+-				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+-			}
+-
+-			if ( icons.primary ) {
+-				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+-			}
+-
+-			if ( icons.secondary ) {
+-				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+-			}
+-
+-			if ( !this.options.text ) {
+-				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+-
+-				if ( !this.hasTitle ) {
+-					buttonElement.attr( "title", $.trim( buttonText ) );
+-				}
+-			}
+-		} else {
+-			buttonClasses.push( "ui-button-text-only" );
+-		}
+-		buttonElement.addClass( buttonClasses.join( " " ) );
+-	}
+-});
+-
+-$.widget( "ui.buttonset", {
+-	version: "1.10.3",
+-	options: {
+-		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+-	},
+-
+-	_create: function() {
+-		this.element.addClass( "ui-buttonset" );
+-	},
+-
+-	_init: function() {
+-		this.refresh();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "disabled" ) {
+-			this.buttons.button( "option", key, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	refresh: function() {
+-		var rtl = this.element.css( "direction" ) === "rtl";
+-
+-		this.buttons = this.element.find( this.options.items )
+-			.filter( ":ui-button" )
+-				.button( "refresh" )
+-			.end()
+-			.not( ":ui-button" )
+-				.button()
+-			.end()
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+-				.filter( ":first" )
+-					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+-				.end()
+-				.filter( ":last" )
+-					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+-				.end()
+-			.end();
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-buttonset" );
+-		this.buttons
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-left ui-corner-right" )
+-			.end()
+-			.button( "destroy" );
+-	}
+-});
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-transfer.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-transfer.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-transfer.js	(revision 15488)
+@@ -1,47 +0,0 @@
+-/*!
+- * jQuery UI Effects Transfer 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/transfer-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.transfer = function( o, done ) {
+-	var elem = $( this ),
+-		target = $( o.to ),
+-		targetFixed = target.css( "position" ) === "fixed",
+-		body = $("body"),
+-		fixTop = targetFixed ? body.scrollTop() : 0,
+-		fixLeft = targetFixed ? body.scrollLeft() : 0,
+-		endPosition = target.offset(),
+-		animation = {
+-			top: endPosition.top - fixTop ,
+-			left: endPosition.left - fixLeft ,
+-			height: target.innerHeight(),
+-			width: target.innerWidth()
+-		},
+-		startPosition = elem.offset(),
+-		transfer = $( "<div class='ui-effects-transfer'></div>" )
+-			.appendTo( document.body )
+-			.addClass( o.className )
+-			.css({
+-				top: startPosition.top - fixTop ,
+-				left: startPosition.left - fixLeft ,
+-				height: elem.innerHeight(),
+-				width: elem.innerWidth(),
+-				position: targetFixed ? "fixed" : "absolute"
+-			})
+-			.animate( animation, o.duration, o.easing, function() {
+-				transfer.remove();
+-				done();
+-			});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-drop.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-drop.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-drop.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.position.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.position.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.position.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-bounce.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-bounce.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-bounce.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.draggable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.draggable.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.draggable.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.droppable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.droppable.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.droppable.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery-ui.custom.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery-ui.custom.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery-ui.custom.min.js	(revision 15488)
+@@ -1,7 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td>&#160;</td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);
+-return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html("&#160;"),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.datepicker.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.datepicker.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.datepicker.min.js	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);
+-return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.sortable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.sortable.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.sortable.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td>&#160;</td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.spinner.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.spinner.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.spinner.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fold.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fold.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fold.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.resizable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.resizable.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.resizable.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-scale.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-scale.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-scale.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-blind.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-blind.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-blind.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-shake.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-shake.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-shake.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.mouse.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.mouse.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.mouse.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.core.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.core.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.core.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fade.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fade.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fade.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tabs.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tabs.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tabs.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-slide.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-slide.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-slide.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.dialog.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.dialog.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.dialog.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html("&#160;"),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.autocomplete.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.autocomplete.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.autocomplete.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-highlight.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-highlight.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-highlight.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.accordion.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.accordion.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.accordion.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.selectable.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.selectable.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.selectable.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.menu.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.menu.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.menu.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-pulsate.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-pulsate.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-pulsate.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.button.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.button.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.button.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-transfer.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-transfer.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-transfer.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-clip.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-clip.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-clip.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.slider.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.slider.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.slider.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.widget.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.widget.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.widget.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional["pt-BR"]={closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Próximo&#x3E;",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["pt-BR"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ru.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ru.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ru.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ru={closeText:"Закрыть",prevText:"&#x3C;Пред",nextText:"След&#x3E;",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ru)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-id.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-id.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-id.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.id={closeText:"Tutup",prevText:"&#x3C;mundur",nextText:"maju&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.id)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-el.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-el.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-el.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Τρέχων Μήνας",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.el)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-gl.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-gl.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-gl.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.gl={closeText:"Pechar",prevText:"&#x3C;Ant",nextText:"Seg&#x3E;",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.gl)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-et.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-et.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-et.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.et)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ml.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ml.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ml.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്‍ച്ച്","ഏപ്രില്‍","മേയ്","ജൂണ്‍","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്‍","ഒക്ടോബര്‍","നവംബര്‍","ഡിസംബര്‍"],monthNamesShort:["ജനു","ഫെബ്","മാര്‍","ഏപ്രി","മേയ്","ജൂണ്‍","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്‍","തിങ്കള്‍","ചൊവ്വ","ബുധന്‍","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ml)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nl)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-th.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-th.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-th.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.th={closeText:"ปิด",prevText:"&#xAB;&#xA0;ย้อน",nextText:"ถัดไป&#xA0;&#xBB;",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.th)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pl.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pl.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pl.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.pl={closeText:"Zamknij",prevText:"&#x3C;Poprzedni",nextText:"Następny&#x3E;",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pl)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-it.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-it.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-it.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.it={closeText:"Chiudi",prevText:"&#x3C;Prec",nextText:"Succ&#x3E;",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.it)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sl.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sl.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sl.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.sl={closeText:"Zapri",prevText:"&#x3C;Prejšnji",nextText:"Naslednji&#x3E;",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sl)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lt.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lt.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lt.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.lt={closeText:"Uždaryti",prevText:"&#x3C;Atgal",nextText:"Pirmyn&#x3E;",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lt)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional["zh-HK"]={closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-HK"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.pt={closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pt)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bg.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bg.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bg.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.bg={closeText:"затвори",prevText:"&#x3C;назад",nextText:"напред&#x3E;",nextBigText:"&#x3E;&#x3E;",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bg)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eo.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eo.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eo.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.eo={closeText:"Fermi",prevText:"&#x3C;Anta",nextText:"Sekv&#x3E;",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eo)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery-ui-i18n.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery-ui-i18n.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery-ui-i18n.min.js	(revision 15488)
+@@ -1,6 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Includes: jquery.ui.datepicker-af.js, jquery.ui.datepicker-ar-DZ.js, jquery.ui.datepicker-ar.js, jquery.ui.datepicker-az.js, jquery.ui.datepicker-be.js, jquery.ui.datepicker-bg.js, jquery.ui.datepicker-bs.js, jquery.ui.datepicker-ca.js, jquery.ui.datepicker-cs.js, jquery.ui.datepicker-cy-GB.js, jquery.ui.datepicker-da.js, jquery.ui.datepicker-de.js, jquery.ui.datepicker-el.js, jquery.ui.datepicker-en-AU.js, jquery.ui.datepicker-en-GB.js, jquery.ui.datepicker-en-NZ.js, jquery.ui.datepicker-eo.js, jquery.ui.datepicker-es.js, jquery.ui.datepicker-et.js, jquery.ui.datepicker-eu.js, jquery.ui.datepicker-fa.js, jquery.ui.datepicker-fi.js, jquery.ui.datepicker-fo.js, jquery.ui.datepicker-fr-CA.js, jquery.ui.datepicker-fr-CH.js, jquery.ui.datepicker-fr.js, jquery.ui.datepicker-gl.js, jquery.ui.datepicker-he.js, jquery.ui.datepicker-hi.js, jquery.ui.datepicker-hr.js, jquery.ui.datepicker-hu.js, jquery.ui.datepicker-hy.js, jquery.ui.datepicker-id.js, jquery.ui.datepicker-is.js, jquery.ui.datepicker-it.js, jquery.ui.datepicker-ja.js, jquery.ui.datepicker-ka.js, jquery.ui.datepicker-kk.js, jquery.ui.datepicker-km.js, jquery.ui.datepicker-ko.js, jquery.ui.datepicker-ky.js, jquery.ui.datepicker-lb.js, jquery.ui.datepicker-lt.js, jquery.ui.datepicker-lv.js, jquery.ui.datepicker-mk.js, jquery.ui.datepicker-ml.js, jquery.ui.datepicker-ms.js, jquery.ui.datepicker-nb.js, jquery.ui.datepicker-nl-BE.js, jquery.ui.datepicker-nl.js, jquery.ui.datepicker-nn.js, jquery.ui.datepicker-no.js, jquery.ui.datepicker-pl.js, jquery.ui.datepicker-pt-BR.js, jquery.ui.datepicker-pt.js, jquery.ui.datepicker-rm.js, jquery.ui.datepicker-ro.js, jquery.ui.datepicker-ru.js, jquery.ui.datepicker-sk.js, jquery.ui.datepicker-sl.js, jquery.ui.datepicker-sq.js, jquery.ui.datepicker-sr-SR.js, jquery.ui.datepicker-sr.js, jquery.ui.datepicker-sv.js, jquery.ui.datepicker-ta.js, jquery.ui.datepicker-th.js, jquery.ui.datepicker-tj.js, jquery.ui.datepicker-tr.js, jquery.ui.datepicker-uk.js, jquery.ui.datepicker-vi.js, jquery.ui.datepicker-zh-CN.js, jquery.ui.datepicker-zh-HK.js, jquery.ui.datepicker-zh-TW.js
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.af)}),jQuery(function(e){e.datepicker.regional["ar-DZ"]={closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["ar-DZ"])}),jQuery(function(e){e.datepicker.regional.ar={closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ar)}),jQuery(function(e){e.datepicker.regional.az={closeText:"Bağla",prevText:"&#x3C;Geri",nextText:"İrəli&#x3E;",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.az)}),jQuery(function(e){e.datepicker.regional.be={closeText:"Зачыніць",prevText:"&larr;Папяр.",nextText:"Наст.&rarr;",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.be)}),jQuery(function(e){e.datepicker.regional.bg={closeText:"затвори",prevText:"&#x3C;назад",nextText:"напред&#x3E;",nextBigText:"&#x3E;&#x3E;",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.bg)}),jQuery(function(e){e.datepicker.regional.bs={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.bs)}),jQuery(function(e){e.datepicker.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ca)}),jQuery(function(e){e.datepicker.regional.cs={closeText:"Zavřít",prevText:"&#x3C;Dříve",nextText:"Později&#x3E;",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.cs)}),jQuery(function(e){e.datepicker.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["cy-GB"])}),jQuery(function(e){e.datepicker.regional.da={closeText:"Luk",prevText:"&#x3C;Forrige",nextText:"Næste&#x3E;",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.da)}),jQuery(function(e){e.datepicker.regional.de={closeText:"Schließen",prevText:"&#x3C;Zurück",nextText:"Vor&#x3E;",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.de)}),jQuery(function(e){e.datepicker.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Τρέχων Μήνας",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.el)}),jQuery(function(e){e.datepicker.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["en-AU"])}),jQuery(function(e){e.datepicker.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["en-GB"])}),jQuery(function(e){e.datepicker.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["en-NZ"])}),jQuery(function(e){e.datepicker.regional.eo={closeText:"Fermi",prevText:"&#x3C;Anta",nextText:"Sekv&#x3E;",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.eo)}),jQuery(function(e){e.datepicker.regional.es={closeText:"Cerrar",prevText:"&#x3C;Ant",nextText:"Sig&#x3E;",currentText:"Hoy",monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mié","Juv","Vie","Sáb"],dayNamesMin:["Do","Lu","Ma","Mi","Ju","Vi","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.es)}),jQuery(function(e){e.datepicker.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.et)}),jQuery(function(e){e.datepicker.regional.eu={closeText:"Egina",prevText:"&#x3C;Aur",nextText:"Hur&#x3E;",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.eu)}),jQuery(function(e){e.datepicker.regional.fa={closeText:"بستن",prevText:"&#x3C;قبلی",nextText:"بعدی&#x3E;",currentText:"امروز",monthNames:["فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دی","بهمن","اسفند"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.fa)}),jQuery(function(e){e.datepicker.regional.fi={closeText:"Sulje",prevText:"&#xAB;Edellinen",nextText:"Seuraava&#xBB;",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.fi)}),jQuery(function(e){e.datepicker.regional.fo={closeText:"Lat aftur",prevText:"&#x3C;Fyrra",nextText:"Næsta&#x3E;",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.fo)}),jQuery(function(e){e.datepicker.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["fr-CA"])}),jQuery(function(e){e.datepicker.regional["fr-CH"]={closeText:"Fermer",prevText:"&#x3C;Préc",nextText:"Suiv&#x3E;",currentText:"Courant",monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],dayNamesMin:["Di","Lu","Ma","Me","Je","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["fr-CH"])}),jQuery(function(e){e.datepicker.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Janv.","Févr.","Mars","Avril","Mai","Juin","Juil.","Août","Sept.","Oct.","Nov.","Déc."],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim.","Lun.","Mar.","Mer.","Jeu.","Ven.","Sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.fr)}),jQuery(function(e){e.datepicker.regional.gl={closeText:"Pechar",prevText:"&#x3C;Ant",nextText:"Seg&#x3E;",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.gl)}),jQuery(function(e){e.datepicker.regional.he={closeText:"סגור",prevText:"&#x3C;הקודם",nextText:"הבא&#x3E;",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.he)}),jQuery(function(e){e.datepicker.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hi)}),jQuery(function(e){e.datepicker.regional.hr={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hr)}),jQuery(function(e){e.datepicker.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hu)}),jQuery(function(e){e.datepicker.regional.hy={closeText:"Փակել",prevText:"&#x3C;Նախ.",nextText:"Հաջ.&#x3E;",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hy)}),jQuery(function(e){e.datepicker.regional.id={closeText:"Tutup",prevText:"&#x3C;mundur",nextText:"maju&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.id)}),jQuery(function(e){e.datepicker.regional.is={closeText:"Loka",prevText:"&#x3C; Fyrri",nextText:"Næsti &#x3E;",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.is)}),jQuery(function(e){e.datepicker.regional.it={closeText:"Chiudi",prevText:"&#x3C;Prec",nextText:"Succ&#x3E;",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.it)}),jQuery(function(e){e.datepicker.regional.ja={closeText:"閉じる",prevText:"&#x3C;前",nextText:"次&#x3E;",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional.ja)}),jQuery(function(e){e.datepicker.regional.ka={closeText:"დახურვა",prevText:"&#x3c; წინა",nextText:"შემდეგი &#x3e;",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ka)}),jQuery(function(e){e.datepicker.regional.kk={closeText:"Жабу",prevText:"&#x3C;Алдыңғы",nextText:"Келесі&#x3E;",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.kk)}),jQuery(function(e){e.datepicker.regional.km={closeText:"ធ្វើ​រួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃ​នេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.km)}),jQuery(function(e){e.datepicker.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},e.datepicker.setDefaults(e.datepicker.regional.ko)}),jQuery(function(e){e.datepicker.regional.ky={closeText:"Жабуу",prevText:"&#x3c;Мур",nextText:"Кий&#x3e;",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ky)}),jQuery(function(e){e.datepicker.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lb)}),jQuery(function(e){e.datepicker.regional.lt={closeText:"Uždaryti",prevText:"&#x3C;Atgal",nextText:"Pirmyn&#x3E;",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lt)}),jQuery(function(e){e.datepicker.regional.lv={closeText:"Aizvērt",prevText:"Iepr",nextText:"Nāka",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Nav",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lv)}),jQuery(function(e){e.datepicker.regional.mk={closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.mk)}),jQuery(function(e){e.datepicker.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്‍ച്ച്","ഏപ്രില്‍","മേയ്","ജൂണ്‍","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്‍","ഒക്ടോബര്‍","നവംബര്‍","ഡിസംബര്‍"],monthNamesShort:["ജനു","ഫെബ്","മാര്‍","ഏപ്രി","മേയ്","ജൂണ്‍","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്‍","തിങ്കള്‍","ചൊവ്വ","ബുധന്‍","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ml)}),jQuery(function(e){e.datepicker.regional.ms={closeText:"Tutup",prevText:"&#x3C;Sebelum",nextText:"Selepas&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ms)}),jQuery(function(e){e.datepicker.regional.nb={closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nb)
+-}),jQuery(function(e){e.datepicker.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["nl-BE"])}),jQuery(function(e){e.datepicker.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nl)}),jQuery(function(e){e.datepicker.regional.nn={closeText:"Lukk",prevText:"&#xAB;Førre",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nn)}),jQuery(function(e){e.datepicker.regional.no={closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.no)}),jQuery(function(e){e.datepicker.regional.pl={closeText:"Zamknij",prevText:"&#x3C;Poprzedni",nextText:"Następny&#x3E;",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pl)}),jQuery(function(e){e.datepicker.regional["pt-BR"]={closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Próximo&#x3E;",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["pt-BR"])}),jQuery(function(e){e.datepicker.regional.pt={closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pt)}),jQuery(function(e){e.datepicker.regional.rm={closeText:"Serrar",prevText:"&#x3C;Suandant",nextText:"Precedent&#x3E;",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.rm)}),jQuery(function(e){e.datepicker.regional.ro={closeText:"Închide",prevText:"&#xAB; Luna precedentă",nextText:"Luna următoare &#xBB;",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ro)}),jQuery(function(e){e.datepicker.regional.ru={closeText:"Закрыть",prevText:"&#x3C;Пред",nextText:"След&#x3E;",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ru)}),jQuery(function(e){e.datepicker.regional.sk={closeText:"Zavrieť",prevText:"&#x3C;Predchádzajúci",nextText:"Nasledujúci&#x3E;",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sk)}),jQuery(function(e){e.datepicker.regional.sl={closeText:"Zapri",prevText:"&#x3C;Prejšnji",nextText:"Naslednji&#x3E;",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sl)}),jQuery(function(e){e.datepicker.regional.sq={closeText:"mbylle",prevText:"&#x3C;mbrapa",nextText:"Përpara&#x3E;",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sq)}),jQuery(function(e){e.datepicker.regional["sr-SR"]={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["sr-SR"])}),jQuery(function(e){e.datepicker.regional.sr={closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sr)}),jQuery(function(e){e.datepicker.regional.sv={closeText:"Stäng",prevText:"&#xAB;Förra",nextText:"Nästa&#xBB;",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sv)}),jQuery(function(e){e.datepicker.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ta)}),jQuery(function(e){e.datepicker.regional.th={closeText:"ปิด",prevText:"&#xAB;&#xA0;ย้อน",nextText:"ถัดไป&#xA0;&#xBB;",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.th)}),jQuery(function(e){e.datepicker.regional.tj={closeText:"Идома",prevText:"&#x3c;Қафо",nextText:"Пеш&#x3e;",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tj)}),jQuery(function(e){e.datepicker.regional.tr={closeText:"kapat",prevText:"&#x3C;geri",nextText:"ileri&#x3e",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tr)}),jQuery(function(e){e.datepicker.regional.uk={closeText:"Закрити",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.uk)}),jQuery(function(e){e.datepicker.regional.vi={closeText:"Đóng",prevText:"&#x3C;Trước",nextText:"Tiếp&#x3E;",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.vi)}),jQuery(function(e){e.datepicker.regional["zh-CN"]={closeText:"关闭",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-CN"])}),jQuery(function(e){e.datepicker.regional["zh-HK"]={closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-HK"])}),jQuery(function(e){e.datepicker.regional["zh-TW"]={closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-TW"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bs.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bs.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bs.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.bs={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bs)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fo.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fo.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fo.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.fo={closeText:"Lat aftur",prevText:"&#x3C;Fyrra",nextText:"Næsta&#x3E;",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fo)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-kk.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-kk.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-kk.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.kk={closeText:"Жабу",prevText:"&#x3C;Алдыңғы",nextText:"Келесі&#x3E;",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.kk)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cs.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cs.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cs.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.cs={closeText:"Zavřít",prevText:"&#x3C;Dříve",nextText:"Později&#x3E;",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.cs)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional["sr-SR"]={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["sr-SR"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-mk.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-mk.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-mk.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.mk={closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.mk)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-es.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-es.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-es.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.es={closeText:"Cerrar",prevText:"&#x3C;Ant",nextText:"Sig&#x3E;",currentText:"Hoy",monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mié","Juv","Vie","Sáb"],dayNamesMin:["Do","Lu","Ma","Mi","Ju","Vi","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.es)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional["zh-TW"]={closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-TW"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ko.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ko.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ko.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},e.datepicker.setDefaults(e.datepicker.regional.ko)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-is.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-is.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-is.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.is={closeText:"Loka",prevText:"&#x3C; Fyrri",nextText:"Næsti &#x3E;",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.is)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-no.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-no.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-no.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.no={closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.no)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sk.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sk.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sk.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.sk={closeText:"Zavrieť",prevText:"&#x3C;Predchádzajúci",nextText:"Nasledujúci&#x3E;",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sk)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional["zh-CN"]={closeText:"关闭",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-CN"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ms.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ms.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ms.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ms={closeText:"Tutup",prevText:"&#x3C;Sebelum",nextText:"Selepas&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ms)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-uk.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-uk.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-uk.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.uk={closeText:"Закрити",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.uk)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ro.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ro.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ro.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ro={closeText:"Închide",prevText:"&#xAB; Luna precedentă",nextText:"Luna următoare &#xBB;",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ro)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-af.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-af.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-af.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.af)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CA"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-GB"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lb.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lb.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lb.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lb)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["nl-BE"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nb.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nb.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nb.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.nb={closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nb)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["cy-GB"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.ar={closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ar)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Janv.","Févr.","Mars","Avril","Mai","Juin","Juil.","Août","Sept.","Oct.","Nov.","Déc."],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim.","Lun.","Mar.","Mer.","Jeu.","Ven.","Sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fr)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hr.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hr.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hr.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.hr={closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hr)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-az.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-az.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-az.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.az={closeText:"Bağla",prevText:"&#x3C;Geri",nextText:"İrəli&#x3E;",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.az)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nn.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nn.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nn.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.nn={closeText:"Lukk",prevText:"&#xAB;Førre",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nn)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tj.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tj.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tj.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.tj={closeText:"Идома",prevText:"&#x3c;Қафо",nextText:"Пеш&#x3e;",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tj)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional["ar-DZ"]={closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["ar-DZ"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lv.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lv.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lv.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.lv={closeText:"Aizvērt",prevText:"Iepr",nextText:"Nāka",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Nav",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lv)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ca.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ca.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ca.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ca)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-da.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-da.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-da.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.da={closeText:"Luk",prevText:"&#x3C;Forrige",nextText:"Næste&#x3E;",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.da)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.sr={closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sr)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tr.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tr.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tr.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.tr={closeText:"kapat",prevText:"&#x3C;geri",nextText:"ileri&#x3e",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tr)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fa.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fa.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fa.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.fa={closeText:"بستن",prevText:"&#x3C;قبلی",nextText:"بعدی&#x3E;",currentText:"امروز",monthNames:["فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دی","بهمن","اسفند"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fa)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-be.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-be.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-be.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.be={closeText:"Зачыніць",prevText:"&larr;Папяр.",nextText:"Наст.&rarr;",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.be)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-NZ"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sv.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sv.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sv.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.sv={closeText:"Stäng",prevText:"&#xAB;Förra",nextText:"Nästa&#xBB;",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sv)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-de.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-de.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-de.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.de={closeText:"Schließen",prevText:"&#x3C;Zurück",nextText:"Vor&#x3E;",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.de)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ja.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ja.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ja.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ja={closeText:"閉じる",prevText:"&#x3C;前",nextText:"次&#x3E;",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional.ja)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ka.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ka.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ka.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ka={closeText:"დახურვა",prevText:"&#x3c; წინა",nextText:"შემდეგი &#x3e;",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ka)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-he.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-he.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-he.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.he={closeText:"סגור",prevText:"&#x3C;הקודם",nextText:"הבא&#x3E;",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.he)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fi.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fi.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fi.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.fi={closeText:"Sulje",prevText:"&#xAB;Edellinen",nextText:"Seuraava&#xBB;",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fi)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional["fr-CH"]={closeText:"Fermer",prevText:"&#x3C;Préc",nextText:"Suiv&#x3E;",currentText:"Courant",monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],dayNamesMin:["Di","Lu","Ma","Me","Je","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CH"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hi.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hi.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hi.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hi)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ta.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ta.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ta.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ta)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-AU"])});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-km.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-km.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-km.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.km={closeText:"ធ្វើ​រួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃ​នេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.km)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eu.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eu.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eu.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(t){t.datepicker.regional.eu={closeText:"Egina",prevText:"&#x3C;Aur",nextText:"Hur&#x3E;",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eu)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hu.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hu.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hu.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hu)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-rm.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-rm.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-rm.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.rm={closeText:"Serrar",prevText:"&#x3C;Suandant",nextText:"Precedent&#x3E;",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.rm)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-vi.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-vi.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-vi.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.vi={closeText:"Đóng",prevText:"&#x3C;Trước",nextText:"Tiếp&#x3E;",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.vi)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hy.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hy.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hy.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.hy={closeText:"Փակել",prevText:"&#x3C;Նախ.",nextText:"Հաջ.&#x3E;",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hy)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sq.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sq.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sq.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.sq={closeText:"mbylle",prevText:"&#x3C;mbrapa",nextText:"Përpara&#x3E;",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sq)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ky.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ky.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ky.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-jQuery(function(e){e.datepicker.regional.ky={closeText:"Жабуу",prevText:"&#x3c;Мур",nextText:"Кий&#x3e;",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ky)});
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.progressbar.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.progressbar.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.progressbar.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tooltip.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tooltip.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tooltip.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-explode.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-explode.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-explode.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect.min.js	(revision 15488)
+@@ -1,4 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-clip.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-clip.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-clip.js	(revision 15488)
+@@ -1,67 +0,0 @@
+-/*!
+- * jQuery UI Effects Clip 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/clip-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.clip = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "vertical",
+-		vert = direction === "vertical",
+-		size = vert ? "height" : "width",
+-		position = vert ? "top" : "left",
+-		animation = {},
+-		wrapper, animate, distance;
+-
+-	// Save & Show
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+-	distance = animate[ size ]();
+-
+-	// Shift
+-	if ( show ) {
+-		animate.css( size, 0 );
+-		animate.css( position, distance / 2 );
+-	}
+-
+-	// Create Animation Object:
+-	animation[ size ] = show ? distance : 0;
+-	animation[ position ] = show ? 0 : distance / 2;
+-
+-	// Animate
+-	animate.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( !show ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.slider.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.slider.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.slider.js	(revision 15488)
+@@ -1,672 +0,0 @@
+-/*!
+- * jQuery UI Slider 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/slider/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-// number of pages in a slider
+-// (how many times can you page up/down to go through the whole range)
+-var numPages = 5;
+-
+-$.widget( "ui.slider", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "slide",
+-
+-	options: {
+-		animate: false,
+-		distance: 0,
+-		max: 100,
+-		min: 0,
+-		orientation: "horizontal",
+-		range: false,
+-		step: 1,
+-		value: 0,
+-		values: null,
+-
+-		// callbacks
+-		change: null,
+-		slide: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		this._keySliding = false;
+-		this._mouseSliding = false;
+-		this._animateOff = true;
+-		this._handleIndex = null;
+-		this._detectOrientation();
+-		this._mouseInit();
+-
+-		this.element
+-			.addClass( "ui-slider" +
+-				" ui-slider-" + this.orientation +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all");
+-
+-		this._refresh();
+-		this._setOption( "disabled", this.options.disabled );
+-
+-		this._animateOff = false;
+-	},
+-
+-	_refresh: function() {
+-		this._createRange();
+-		this._createHandles();
+-		this._setupEvents();
+-		this._refreshValue();
+-	},
+-
+-	_createHandles: function() {
+-		var i, handleCount,
+-			options = this.options,
+-			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+-			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+-			handles = [];
+-
+-		handleCount = ( options.values && options.values.length ) || 1;
+-
+-		if ( existingHandles.length > handleCount ) {
+-			existingHandles.slice( handleCount ).remove();
+-			existingHandles = existingHandles.slice( 0, handleCount );
+-		}
+-
+-		for ( i = existingHandles.length; i < handleCount; i++ ) {
+-			handles.push( handle );
+-		}
+-
+-		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+-
+-		this.handle = this.handles.eq( 0 );
+-
+-		this.handles.each(function( i ) {
+-			$( this ).data( "ui-slider-handle-index", i );
+-		});
+-	},
+-
+-	_createRange: function() {
+-		var options = this.options,
+-			classes = "";
+-
+-		if ( options.range ) {
+-			if ( options.range === true ) {
+-				if ( !options.values ) {
+-					options.values = [ this._valueMin(), this._valueMin() ];
+-				} else if ( options.values.length && options.values.length !== 2 ) {
+-					options.values = [ options.values[0], options.values[0] ];
+-				} else if ( $.isArray( options.values ) ) {
+-					options.values = options.values.slice(0);
+-				}
+-			}
+-
+-			if ( !this.range || !this.range.length ) {
+-				this.range = $( "<div></div>" )
+-					.appendTo( this.element );
+-
+-				classes = "ui-slider-range" +
+-				// note: this isn't the most fittingly semantic framework class for this element,
+-				// but worked best visually with a variety of themes
+-				" ui-widget-header ui-corner-all";
+-			} else {
+-				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+-					// Handle range switching from true to min/max
+-					.css({
+-						"left": "",
+-						"bottom": ""
+-					});
+-			}
+-
+-			this.range.addClass( classes +
+-				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+-		} else {
+-			this.range = $([]);
+-		}
+-	},
+-
+-	_setupEvents: function() {
+-		var elements = this.handles.add( this.range ).filter( "a" );
+-		this._off( elements );
+-		this._on( elements, this._handleEvents );
+-		this._hoverable( elements );
+-		this._focusable( elements );
+-	},
+-
+-	_destroy: function() {
+-		this.handles.remove();
+-		this.range.remove();
+-
+-		this.element
+-			.removeClass( "ui-slider" +
+-				" ui-slider-horizontal" +
+-				" ui-slider-vertical" +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" );
+-
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function( event ) {
+-		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+-			that = this,
+-			o = this.options;
+-
+-		if ( o.disabled ) {
+-			return false;
+-		}
+-
+-		this.elementSize = {
+-			width: this.element.outerWidth(),
+-			height: this.element.outerHeight()
+-		};
+-		this.elementOffset = this.element.offset();
+-
+-		position = { x: event.pageX, y: event.pageY };
+-		normValue = this._normValueFromMouse( position );
+-		distance = this._valueMax() - this._valueMin() + 1;
+-		this.handles.each(function( i ) {
+-			var thisDistance = Math.abs( normValue - that.values(i) );
+-			if (( distance > thisDistance ) ||
+-				( distance === thisDistance &&
+-					(i === that._lastChangedValue || that.values(i) === o.min ))) {
+-				distance = thisDistance;
+-				closestHandle = $( this );
+-				index = i;
+-			}
+-		});
+-
+-		allowed = this._start( event, index );
+-		if ( allowed === false ) {
+-			return false;
+-		}
+-		this._mouseSliding = true;
+-
+-		this._handleIndex = index;
+-
+-		closestHandle
+-			.addClass( "ui-state-active" )
+-			.focus();
+-
+-		offset = closestHandle.offset();
+-		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+-		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+-			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+-			top: event.pageY - offset.top -
+-				( closestHandle.height() / 2 ) -
+-				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+-				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+-				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+-		};
+-
+-		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+-			this._slide( event, index, normValue );
+-		}
+-		this._animateOff = true;
+-		return true;
+-	},
+-
+-	_mouseStart: function() {
+-		return true;
+-	},
+-
+-	_mouseDrag: function( event ) {
+-		var position = { x: event.pageX, y: event.pageY },
+-			normValue = this._normValueFromMouse( position );
+-
+-		this._slide( event, this._handleIndex, normValue );
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function( event ) {
+-		this.handles.removeClass( "ui-state-active" );
+-		this._mouseSliding = false;
+-
+-		this._stop( event, this._handleIndex );
+-		this._change( event, this._handleIndex );
+-
+-		this._handleIndex = null;
+-		this._clickOffset = null;
+-		this._animateOff = false;
+-
+-		return false;
+-	},
+-
+-	_detectOrientation: function() {
+-		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+-	},
+-
+-	_normValueFromMouse: function( position ) {
+-		var pixelTotal,
+-			pixelMouse,
+-			percentMouse,
+-			valueTotal,
+-			valueMouse;
+-
+-		if ( this.orientation === "horizontal" ) {
+-			pixelTotal = this.elementSize.width;
+-			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+-		} else {
+-			pixelTotal = this.elementSize.height;
+-			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+-		}
+-
+-		percentMouse = ( pixelMouse / pixelTotal );
+-		if ( percentMouse > 1 ) {
+-			percentMouse = 1;
+-		}
+-		if ( percentMouse < 0 ) {
+-			percentMouse = 0;
+-		}
+-		if ( this.orientation === "vertical" ) {
+-			percentMouse = 1 - percentMouse;
+-		}
+-
+-		valueTotal = this._valueMax() - this._valueMin();
+-		valueMouse = this._valueMin() + percentMouse * valueTotal;
+-
+-		return this._trimAlignValue( valueMouse );
+-	},
+-
+-	_start: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-		return this._trigger( "start", event, uiHash );
+-	},
+-
+-	_slide: function( event, index, newVal ) {
+-		var otherVal,
+-			newValues,
+-			allowed;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			otherVal = this.values( index ? 0 : 1 );
+-
+-			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+-					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+-				) {
+-				newVal = otherVal;
+-			}
+-
+-			if ( newVal !== this.values( index ) ) {
+-				newValues = this.values();
+-				newValues[ index ] = newVal;
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal,
+-					values: newValues
+-				} );
+-				otherVal = this.values( index ? 0 : 1 );
+-				if ( allowed !== false ) {
+-					this.values( index, newVal, true );
+-				}
+-			}
+-		} else {
+-			if ( newVal !== this.value() ) {
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal
+-				} );
+-				if ( allowed !== false ) {
+-					this.value( newVal );
+-				}
+-			}
+-		}
+-	},
+-
+-	_stop: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-
+-		this._trigger( "stop", event, uiHash );
+-	},
+-
+-	_change: function( event, index ) {
+-		if ( !this._keySliding && !this._mouseSliding ) {
+-			var uiHash = {
+-				handle: this.handles[ index ],
+-				value: this.value()
+-			};
+-			if ( this.options.values && this.options.values.length ) {
+-				uiHash.value = this.values( index );
+-				uiHash.values = this.values();
+-			}
+-
+-			//store the last changed value index for reference when handles overlap
+-			this._lastChangedValue = index;
+-
+-			this._trigger( "change", event, uiHash );
+-		}
+-	},
+-
+-	value: function( newValue ) {
+-		if ( arguments.length ) {
+-			this.options.value = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, 0 );
+-			return;
+-		}
+-
+-		return this._value();
+-	},
+-
+-	values: function( index, newValue ) {
+-		var vals,
+-			newValues,
+-			i;
+-
+-		if ( arguments.length > 1 ) {
+-			this.options.values[ index ] = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, index );
+-			return;
+-		}
+-
+-		if ( arguments.length ) {
+-			if ( $.isArray( arguments[ 0 ] ) ) {
+-				vals = this.options.values;
+-				newValues = arguments[ 0 ];
+-				for ( i = 0; i < vals.length; i += 1 ) {
+-					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+-					this._change( null, i );
+-				}
+-				this._refreshValue();
+-			} else {
+-				if ( this.options.values && this.options.values.length ) {
+-					return this._values( index );
+-				} else {
+-					return this.value();
+-				}
+-			}
+-		} else {
+-			return this._values();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var i,
+-			valsLength = 0;
+-
+-		if ( key === "range" && this.options.range === true ) {
+-			if ( value === "min" ) {
+-				this.options.value = this._values( 0 );
+-				this.options.values = null;
+-			} else if ( value === "max" ) {
+-				this.options.value = this._values( this.options.values.length-1 );
+-				this.options.values = null;
+-			}
+-		}
+-
+-		if ( $.isArray( this.options.values ) ) {
+-			valsLength = this.options.values.length;
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-
+-		switch ( key ) {
+-			case "orientation":
+-				this._detectOrientation();
+-				this.element
+-					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+-					.addClass( "ui-slider-" + this.orientation );
+-				this._refreshValue();
+-				break;
+-			case "value":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._change( null, 0 );
+-				this._animateOff = false;
+-				break;
+-			case "values":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				for ( i = 0; i < valsLength; i += 1 ) {
+-					this._change( null, i );
+-				}
+-				this._animateOff = false;
+-				break;
+-			case "min":
+-			case "max":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._animateOff = false;
+-				break;
+-			case "range":
+-				this._animateOff = true;
+-				this._refresh();
+-				this._animateOff = false;
+-				break;
+-		}
+-	},
+-
+-	//internal value getter
+-	// _value() returns value trimmed by min and max, aligned by step
+-	_value: function() {
+-		var val = this.options.value;
+-		val = this._trimAlignValue( val );
+-
+-		return val;
+-	},
+-
+-	//internal values getter
+-	// _values() returns array of values trimmed by min and max, aligned by step
+-	// _values( index ) returns single value trimmed by min and max, aligned by step
+-	_values: function( index ) {
+-		var val,
+-			vals,
+-			i;
+-
+-		if ( arguments.length ) {
+-			val = this.options.values[ index ];
+-			val = this._trimAlignValue( val );
+-
+-			return val;
+-		} else if ( this.options.values && this.options.values.length ) {
+-			// .slice() creates a copy of the array
+-			// this copy gets trimmed by min and max and then returned
+-			vals = this.options.values.slice();
+-			for ( i = 0; i < vals.length; i+= 1) {
+-				vals[ i ] = this._trimAlignValue( vals[ i ] );
+-			}
+-
+-			return vals;
+-		} else {
+-			return [];
+-		}
+-	},
+-
+-	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+-	_trimAlignValue: function( val ) {
+-		if ( val <= this._valueMin() ) {
+-			return this._valueMin();
+-		}
+-		if ( val >= this._valueMax() ) {
+-			return this._valueMax();
+-		}
+-		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+-			valModStep = (val - this._valueMin()) % step,
+-			alignValue = val - valModStep;
+-
+-		if ( Math.abs(valModStep) * 2 >= step ) {
+-			alignValue += ( valModStep > 0 ) ? step : ( -step );
+-		}
+-
+-		// Since JavaScript has problems with large floats, round
+-		// the final value to 5 digits after the decimal point (see #4124)
+-		return parseFloat( alignValue.toFixed(5) );
+-	},
+-
+-	_valueMin: function() {
+-		return this.options.min;
+-	},
+-
+-	_valueMax: function() {
+-		return this.options.max;
+-	},
+-
+-	_refreshValue: function() {
+-		var lastValPercent, valPercent, value, valueMin, valueMax,
+-			oRange = this.options.range,
+-			o = this.options,
+-			that = this,
+-			animate = ( !this._animateOff ) ? o.animate : false,
+-			_set = {};
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			this.handles.each(function( i ) {
+-				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+-				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-				if ( that.options.range === true ) {
+-					if ( that.orientation === "horizontal" ) {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					} else {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					}
+-				}
+-				lastValPercent = valPercent;
+-			});
+-		} else {
+-			value = this.value();
+-			valueMin = this._valueMin();
+-			valueMax = this._valueMax();
+-			valPercent = ( valueMax !== valueMin ) ?
+-					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+-					0;
+-			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-
+-			if ( oRange === "min" && this.orientation === "horizontal" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "horizontal" ) {
+-				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-			if ( oRange === "min" && this.orientation === "vertical" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "vertical" ) {
+-				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-		}
+-	},
+-
+-	_handleEvents: {
+-		keydown: function( event ) {
+-			/*jshint maxcomplexity:25*/
+-			var allowed, curVal, newVal, step,
+-				index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-				case $.ui.keyCode.END:
+-				case $.ui.keyCode.PAGE_UP:
+-				case $.ui.keyCode.PAGE_DOWN:
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					event.preventDefault();
+-					if ( !this._keySliding ) {
+-						this._keySliding = true;
+-						$( event.target ).addClass( "ui-state-active" );
+-						allowed = this._start( event, index );
+-						if ( allowed === false ) {
+-							return;
+-						}
+-					}
+-					break;
+-			}
+-
+-			step = this.options.step;
+-			if ( this.options.values && this.options.values.length ) {
+-				curVal = newVal = this.values( index );
+-			} else {
+-				curVal = newVal = this.value();
+-			}
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-					newVal = this._valueMin();
+-					break;
+-				case $.ui.keyCode.END:
+-					newVal = this._valueMax();
+-					break;
+-				case $.ui.keyCode.PAGE_UP:
+-					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.PAGE_DOWN:
+-					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-					if ( curVal === this._valueMax() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal + step );
+-					break;
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					if ( curVal === this._valueMin() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal - step );
+-					break;
+-			}
+-
+-			this._slide( event, index, newVal );
+-		},
+-		click: function( event ) {
+-			event.preventDefault();
+-		},
+-		keyup: function( event ) {
+-			var index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			if ( this._keySliding ) {
+-				this._keySliding = false;
+-				this._stop( event, index );
+-				this._change( event, index );
+-				$( event.target ).removeClass( "ui-state-active" );
+-			}
+-		}
+-	}
+-
+-});
+-
+-}(jQuery));
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.widget.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.widget.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.widget.js	(revision 15488)
+@@ -1,521 +0,0 @@
+-/*!
+- * jQuery UI Widget 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/jQuery.widget/
+- */
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	slice = Array.prototype.slice,
+-	_cleanData = $.cleanData;
+-$.cleanData = function( elems ) {
+-	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-		try {
+-			$( elem ).triggerHandler( "remove" );
+-		// http://bugs.jquery.com/ticket/8235
+-		} catch( e ) {}
+-	}
+-	_cleanData( elems );
+-};
+-
+-$.widget = function( name, base, prototype ) {
+-	var fullName, existingConstructor, constructor, basePrototype,
+-		// proxiedPrototype allows the provided prototype to remain unmodified
+-		// so that it can be used as a mixin for multiple widgets (#8876)
+-		proxiedPrototype = {},
+-		namespace = name.split( "." )[ 0 ];
+-
+-	name = name.split( "." )[ 1 ];
+-	fullName = namespace + "-" + name;
+-
+-	if ( !prototype ) {
+-		prototype = base;
+-		base = $.Widget;
+-	}
+-
+-	// create selector for plugin
+-	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+-		return !!$.data( elem, fullName );
+-	};
+-
+-	$[ namespace ] = $[ namespace ] || {};
+-	existingConstructor = $[ namespace ][ name ];
+-	constructor = $[ namespace ][ name ] = function( options, element ) {
+-		// allow instantiation without "new" keyword
+-		if ( !this._createWidget ) {
+-			return new constructor( options, element );
+-		}
+-
+-		// allow instantiation without initializing for simple inheritance
+-		// must use "new" keyword (the code above always passes args)
+-		if ( arguments.length ) {
+-			this._createWidget( options, element );
+-		}
+-	};
+-	// extend with the existing constructor to carry over any static properties
+-	$.extend( constructor, existingConstructor, {
+-		version: prototype.version,
+-		// copy the object used to create the prototype in case we need to
+-		// redefine the widget later
+-		_proto: $.extend( {}, prototype ),
+-		// track widgets that inherit from this widget in case this widget is
+-		// redefined after a widget inherits from it
+-		_childConstructors: []
+-	});
+-
+-	basePrototype = new base();
+-	// we need to make the options hash a property directly on the new instance
+-	// otherwise we'll modify the options hash on the prototype that we're
+-	// inheriting from
+-	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+-	$.each( prototype, function( prop, value ) {
+-		if ( !$.isFunction( value ) ) {
+-			proxiedPrototype[ prop ] = value;
+-			return;
+-		}
+-		proxiedPrototype[ prop ] = (function() {
+-			var _super = function() {
+-					return base.prototype[ prop ].apply( this, arguments );
+-				},
+-				_superApply = function( args ) {
+-					return base.prototype[ prop ].apply( this, args );
+-				};
+-			return function() {
+-				var __super = this._super,
+-					__superApply = this._superApply,
+-					returnValue;
+-
+-				this._super = _super;
+-				this._superApply = _superApply;
+-
+-				returnValue = value.apply( this, arguments );
+-
+-				this._super = __super;
+-				this._superApply = __superApply;
+-
+-				return returnValue;
+-			};
+-		})();
+-	});
+-	constructor.prototype = $.widget.extend( basePrototype, {
+-		// TODO: remove support for widgetEventPrefix
+-		// always use the name + a colon as the prefix, e.g., draggable:start
+-		// don't prefix for widgets that aren't DOM-based
+-		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+-	}, proxiedPrototype, {
+-		constructor: constructor,
+-		namespace: namespace,
+-		widgetName: name,
+-		widgetFullName: fullName
+-	});
+-
+-	// If this widget is being redefined then we need to find all widgets that
+-	// are inheriting from it and redefine all of them so that they inherit from
+-	// the new version of this widget. We're essentially trying to replace one
+-	// level in the prototype chain.
+-	if ( existingConstructor ) {
+-		$.each( existingConstructor._childConstructors, function( i, child ) {
+-			var childPrototype = child.prototype;
+-
+-			// redefine the child widget using the same prototype that was
+-			// originally used, but inherit from the new version of the base
+-			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+-		});
+-		// remove the list of existing child constructors from the old constructor
+-		// so the old child constructors can be garbage collected
+-		delete existingConstructor._childConstructors;
+-	} else {
+-		base._childConstructors.push( constructor );
+-	}
+-
+-	$.widget.bridge( name, constructor );
+-};
+-
+-$.widget.extend = function( target ) {
+-	var input = slice.call( arguments, 1 ),
+-		inputIndex = 0,
+-		inputLength = input.length,
+-		key,
+-		value;
+-	for ( ; inputIndex < inputLength; inputIndex++ ) {
+-		for ( key in input[ inputIndex ] ) {
+-			value = input[ inputIndex ][ key ];
+-			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+-				// Clone objects
+-				if ( $.isPlainObject( value ) ) {
+-					target[ key ] = $.isPlainObject( target[ key ] ) ?
+-						$.widget.extend( {}, target[ key ], value ) :
+-						// Don't extend strings, arrays, etc. with objects
+-						$.widget.extend( {}, value );
+-				// Copy everything else by reference
+-				} else {
+-					target[ key ] = value;
+-				}
+-			}
+-		}
+-	}
+-	return target;
+-};
+-
+-$.widget.bridge = function( name, object ) {
+-	var fullName = object.prototype.widgetFullName || name;
+-	$.fn[ name ] = function( options ) {
+-		var isMethodCall = typeof options === "string",
+-			args = slice.call( arguments, 1 ),
+-			returnValue = this;
+-
+-		// allow multiple hashes to be passed on init
+-		options = !isMethodCall && args.length ?
+-			$.widget.extend.apply( null, [ options ].concat(args) ) :
+-			options;
+-
+-		if ( isMethodCall ) {
+-			this.each(function() {
+-				var methodValue,
+-					instance = $.data( this, fullName );
+-				if ( !instance ) {
+-					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+-						"attempted to call method '" + options + "'" );
+-				}
+-				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+-					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+-				}
+-				methodValue = instance[ options ].apply( instance, args );
+-				if ( methodValue !== instance && methodValue !== undefined ) {
+-					returnValue = methodValue && methodValue.jquery ?
+-						returnValue.pushStack( methodValue.get() ) :
+-						methodValue;
+-					return false;
+-				}
+-			});
+-		} else {
+-			this.each(function() {
+-				var instance = $.data( this, fullName );
+-				if ( instance ) {
+-					instance.option( options || {} )._init();
+-				} else {
+-					$.data( this, fullName, new object( options, this ) );
+-				}
+-			});
+-		}
+-
+-		return returnValue;
+-	};
+-};
+-
+-$.Widget = function( /* options, element */ ) {};
+-$.Widget._childConstructors = [];
+-
+-$.Widget.prototype = {
+-	widgetName: "widget",
+-	widgetEventPrefix: "",
+-	defaultElement: "<div>",
+-	options: {
+-		disabled: false,
+-
+-		// callbacks
+-		create: null
+-	},
+-	_createWidget: function( options, element ) {
+-		element = $( element || this.defaultElement || this )[ 0 ];
+-		this.element = $( element );
+-		this.uuid = uuid++;
+-		this.eventNamespace = "." + this.widgetName + this.uuid;
+-		this.options = $.widget.extend( {},
+-			this.options,
+-			this._getCreateOptions(),
+-			options );
+-
+-		this.bindings = $();
+-		this.hoverable = $();
+-		this.focusable = $();
+-
+-		if ( element !== this ) {
+-			$.data( element, this.widgetFullName, this );
+-			this._on( true, this.element, {
+-				remove: function( event ) {
+-					if ( event.target === element ) {
+-						this.destroy();
+-					}
+-				}
+-			});
+-			this.document = $( element.style ?
+-				// element within the document
+-				element.ownerDocument :
+-				// element is window or document
+-				element.document || element );
+-			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+-		}
+-
+-		this._create();
+-		this._trigger( "create", null, this._getCreateEventData() );
+-		this._init();
+-	},
+-	_getCreateOptions: $.noop,
+-	_getCreateEventData: $.noop,
+-	_create: $.noop,
+-	_init: $.noop,
+-
+-	destroy: function() {
+-		this._destroy();
+-		// we can probably remove the unbind calls in 2.0
+-		// all event bindings should go through this._on()
+-		this.element
+-			.unbind( this.eventNamespace )
+-			// 1.9 BC for #7810
+-			// TODO remove dual storage
+-			.removeData( this.widgetName )
+-			.removeData( this.widgetFullName )
+-			// support: jquery <1.6.3
+-			// http://bugs.jquery.com/ticket/9413
+-			.removeData( $.camelCase( this.widgetFullName ) );
+-		this.widget()
+-			.unbind( this.eventNamespace )
+-			.removeAttr( "aria-disabled" )
+-			.removeClass(
+-				this.widgetFullName + "-disabled " +
+-				"ui-state-disabled" );
+-
+-		// clean up events and states
+-		this.bindings.unbind( this.eventNamespace );
+-		this.hoverable.removeClass( "ui-state-hover" );
+-		this.focusable.removeClass( "ui-state-focus" );
+-	},
+-	_destroy: $.noop,
+-
+-	widget: function() {
+-		return this.element;
+-	},
+-
+-	option: function( key, value ) {
+-		var options = key,
+-			parts,
+-			curOption,
+-			i;
+-
+-		if ( arguments.length === 0 ) {
+-			// don't return a reference to the internal hash
+-			return $.widget.extend( {}, this.options );
+-		}
+-
+-		if ( typeof key === "string" ) {
+-			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+-			options = {};
+-			parts = key.split( "." );
+-			key = parts.shift();
+-			if ( parts.length ) {
+-				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+-				for ( i = 0; i < parts.length - 1; i++ ) {
+-					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+-					curOption = curOption[ parts[ i ] ];
+-				}
+-				key = parts.pop();
+-				if ( value === undefined ) {
+-					return curOption[ key ] === undefined ? null : curOption[ key ];
+-				}
+-				curOption[ key ] = value;
+-			} else {
+-				if ( value === undefined ) {
+-					return this.options[ key ] === undefined ? null : this.options[ key ];
+-				}
+-				options[ key ] = value;
+-			}
+-		}
+-
+-		this._setOptions( options );
+-
+-		return this;
+-	},
+-	_setOptions: function( options ) {
+-		var key;
+-
+-		for ( key in options ) {
+-			this._setOption( key, options[ key ] );
+-		}
+-
+-		return this;
+-	},
+-	_setOption: function( key, value ) {
+-		this.options[ key ] = value;
+-
+-		if ( key === "disabled" ) {
+-			this.widget()
+-				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+-				.attr( "aria-disabled", value );
+-			this.hoverable.removeClass( "ui-state-hover" );
+-			this.focusable.removeClass( "ui-state-focus" );
+-		}
+-
+-		return this;
+-	},
+-
+-	enable: function() {
+-		return this._setOption( "disabled", false );
+-	},
+-	disable: function() {
+-		return this._setOption( "disabled", true );
+-	},
+-
+-	_on: function( suppressDisabledCheck, element, handlers ) {
+-		var delegateElement,
+-			instance = this;
+-
+-		// no suppressDisabledCheck flag, shuffle arguments
+-		if ( typeof suppressDisabledCheck !== "boolean" ) {
+-			handlers = element;
+-			element = suppressDisabledCheck;
+-			suppressDisabledCheck = false;
+-		}
+-
+-		// no element argument, shuffle and use this.element
+-		if ( !handlers ) {
+-			handlers = element;
+-			element = this.element;
+-			delegateElement = this.widget();
+-		} else {
+-			// accept selectors, DOM elements
+-			element = delegateElement = $( element );
+-			this.bindings = this.bindings.add( element );
+-		}
+-
+-		$.each( handlers, function( event, handler ) {
+-			function handlerProxy() {
+-				// allow widgets to customize the disabled handling
+-				// - disabled as an array instead of boolean
+-				// - disabled class as method for disabling individual parts
+-				if ( !suppressDisabledCheck &&
+-						( instance.options.disabled === true ||
+-							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+-					return;
+-				}
+-				return ( typeof handler === "string" ? instance[ handler ] : handler )
+-					.apply( instance, arguments );
+-			}
+-
+-			// copy the guid so direct unbinding works
+-			if ( typeof handler !== "string" ) {
+-				handlerProxy.guid = handler.guid =
+-					handler.guid || handlerProxy.guid || $.guid++;
+-			}
+-
+-			var match = event.match( /^(\w+)\s*(.*)$/ ),
+-				eventName = match[1] + instance.eventNamespace,
+-				selector = match[2];
+-			if ( selector ) {
+-				delegateElement.delegate( selector, eventName, handlerProxy );
+-			} else {
+-				element.bind( eventName, handlerProxy );
+-			}
+-		});
+-	},
+-
+-	_off: function( element, eventName ) {
+-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+-		element.unbind( eventName ).undelegate( eventName );
+-	},
+-
+-	_delay: function( handler, delay ) {
+-		function handlerProxy() {
+-			return ( typeof handler === "string" ? instance[ handler ] : handler )
+-				.apply( instance, arguments );
+-		}
+-		var instance = this;
+-		return setTimeout( handlerProxy, delay || 0 );
+-	},
+-
+-	_hoverable: function( element ) {
+-		this.hoverable = this.hoverable.add( element );
+-		this._on( element, {
+-			mouseenter: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-hover" );
+-			},
+-			mouseleave: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-hover" );
+-			}
+-		});
+-	},
+-
+-	_focusable: function( element ) {
+-		this.focusable = this.focusable.add( element );
+-		this._on( element, {
+-			focusin: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-focus" );
+-			},
+-			focusout: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-focus" );
+-			}
+-		});
+-	},
+-
+-	_trigger: function( type, event, data ) {
+-		var prop, orig,
+-			callback = this.options[ type ];
+-
+-		data = data || {};
+-		event = $.Event( event );
+-		event.type = ( type === this.widgetEventPrefix ?
+-			type :
+-			this.widgetEventPrefix + type ).toLowerCase();
+-		// the original event may come from any element
+-		// so we need to reset the target on the new event
+-		event.target = this.element[ 0 ];
+-
+-		// copy original event properties over to the new event
+-		orig = event.originalEvent;
+-		if ( orig ) {
+-			for ( prop in orig ) {
+-				if ( !( prop in event ) ) {
+-					event[ prop ] = orig[ prop ];
+-				}
+-			}
+-		}
+-
+-		this.element.trigger( event, data );
+-		return !( $.isFunction( callback ) &&
+-			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+-			event.isDefaultPrevented() );
+-	}
+-};
+-
+-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+-	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+-		if ( typeof options === "string" ) {
+-			options = { effect: options };
+-		}
+-		var hasOptions,
+-			effectName = !options ?
+-				method :
+-				options === true || typeof options === "number" ?
+-					defaultEffect :
+-					options.effect || defaultEffect;
+-		options = options || {};
+-		if ( typeof options === "number" ) {
+-			options = { duration: options };
+-		}
+-		hasOptions = !$.isEmptyObject( options );
+-		options.complete = callback;
+-		if ( options.delay ) {
+-			element.delay( options.delay );
+-		}
+-		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+-			element[ method ]( options );
+-		} else if ( effectName !== method && element[ effectName ] ) {
+-			element[ effectName ]( options.duration, options.easing, callback );
+-		} else {
+-			element.queue(function( next ) {
+-				$( this )[ method ]();
+-				if ( callback ) {
+-					callback.call( element[ 0 ] );
+-				}
+-				next();
+-			});
+-		}
+-	};
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.progressbar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.progressbar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.progressbar.js	(revision 15488)
+@@ -1,145 +0,0 @@
+-/*!
+- * jQuery UI Progressbar 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/progressbar/
+- *
+- * Depends:
+- *   jquery.ui.core.js
+- *   jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget( "ui.progressbar", {
+-	version: "1.10.3",
+-	options: {
+-		max: 100,
+-		value: 0,
+-
+-		change: null,
+-		complete: null
+-	},
+-
+-	min: 0,
+-
+-	_create: function() {
+-		// Constrain initial value
+-		this.oldValue = this.options.value = this._constrainedValue();
+-
+-		this.element
+-			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.attr({
+-				// Only set static values, aria-valuenow and aria-valuemax are
+-				// set inside _refreshValue()
+-				role: "progressbar",
+-				"aria-valuemin": this.min
+-			});
+-
+-		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+-			.appendTo( this.element );
+-
+-		this._refreshValue();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-
+-		this.valueDiv.remove();
+-	},
+-
+-	value: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			return this.options.value;
+-		}
+-
+-		this.options.value = this._constrainedValue( newValue );
+-		this._refreshValue();
+-	},
+-
+-	_constrainedValue: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			newValue = this.options.value;
+-		}
+-
+-		this.indeterminate = newValue === false;
+-
+-		// sanitize value
+-		if ( typeof newValue !== "number" ) {
+-			newValue = 0;
+-		}
+-
+-		return this.indeterminate ? false :
+-			Math.min( this.options.max, Math.max( this.min, newValue ) );
+-	},
+-
+-	_setOptions: function( options ) {
+-		// Ensure "value" option is set after other values (like max)
+-		var value = options.value;
+-		delete options.value;
+-
+-		this._super( options );
+-
+-		this.options.value = this._constrainedValue( value );
+-		this._refreshValue();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "max" ) {
+-			// Don't allow a max less than min
+-			value = Math.max( this.min, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	_percentage: function() {
+-		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+-	},
+-
+-	_refreshValue: function() {
+-		var value = this.options.value,
+-			percentage = this._percentage();
+-
+-		this.valueDiv
+-			.toggle( this.indeterminate || value > this.min )
+-			.toggleClass( "ui-corner-right", value === this.options.max )
+-			.width( percentage.toFixed(0) + "%" );
+-
+-		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+-
+-		if ( this.indeterminate ) {
+-			this.element.removeAttr( "aria-valuenow" );
+-			if ( !this.overlayDiv ) {
+-				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+-			}
+-		} else {
+-			this.element.attr({
+-				"aria-valuemax": this.options.max,
+-				"aria-valuenow": value
+-			});
+-			if ( this.overlayDiv ) {
+-				this.overlayDiv.remove();
+-				this.overlayDiv = null;
+-			}
+-		}
+-
+-		if ( this.oldValue !== value ) {
+-			this.oldValue = value;
+-			this._trigger( "change" );
+-		}
+-		if ( value === this.options.max ) {
+-			this._trigger( "complete" );
+-		}
+-	}
+-});
+-
+-})( jQuery );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tooltip.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tooltip.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tooltip.js	(revision 15488)
+@@ -1,402 +0,0 @@
+-/*!
+- * jQuery UI Tooltip 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/tooltip/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.position.js
+- */
+-(function( $ ) {
+-
+-var increments = 0;
+-
+-function addDescribedBy( elem, id ) {
+-	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+-	describedby.push( id );
+-	elem
+-		.data( "ui-tooltip-id", id )
+-		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+-}
+-
+-function removeDescribedBy( elem ) {
+-	var id = elem.data( "ui-tooltip-id" ),
+-		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+-		index = $.inArray( id, describedby );
+-	if ( index !== -1 ) {
+-		describedby.splice( index, 1 );
+-	}
+-
+-	elem.removeData( "ui-tooltip-id" );
+-	describedby = $.trim( describedby.join( " " ) );
+-	if ( describedby ) {
+-		elem.attr( "aria-describedby", describedby );
+-	} else {
+-		elem.removeAttr( "aria-describedby" );
+-	}
+-}
+-
+-$.widget( "ui.tooltip", {
+-	version: "1.10.3",
+-	options: {
+-		content: function() {
+-			// support: IE<9, Opera in jQuery <1.7
+-			// .text() can't accept undefined, so coerce to a string
+-			var title = $( this ).attr( "title" ) || "";
+-			// Escape title, since we're going from an attribute to raw HTML
+-			return $( "<a>" ).text( title ).html();
+-		},
+-		hide: true,
+-		// Disabled elements have inconsistent behavior across browsers (#8661)
+-		items: "[title]:not([disabled])",
+-		position: {
+-			my: "left top+15",
+-			at: "left bottom",
+-			collision: "flipfit flip"
+-		},
+-		show: true,
+-		tooltipClass: null,
+-		track: false,
+-
+-		// callbacks
+-		close: null,
+-		open: null
+-	},
+-
+-	_create: function() {
+-		this._on({
+-			mouseover: "open",
+-			focusin: "open"
+-		});
+-
+-		// IDs of generated tooltips, needed for destroy
+-		this.tooltips = {};
+-		// IDs of parent tooltips where we removed the title attribute
+-		this.parents = {};
+-
+-		if ( this.options.disabled ) {
+-			this._disable();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var that = this;
+-
+-		if ( key === "disabled" ) {
+-			this[ value ? "_disable" : "_enable" ]();
+-			this.options[ key ] = value;
+-			// disable element style changes
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "content" ) {
+-			$.each( this.tooltips, function( id, element ) {
+-				that._updateContent( element );
+-			});
+-		}
+-	},
+-
+-	_disable: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-		});
+-
+-		// remove title attributes to prevent native tooltips
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.is( "[title]" ) ) {
+-				element
+-					.data( "ui-tooltip-title", element.attr( "title" ) )
+-					.attr( "title", "" );
+-			}
+-		});
+-	},
+-
+-	_enable: function() {
+-		// restore title attributes
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-			}
+-		});
+-	},
+-
+-	open: function( event ) {
+-		var that = this,
+-			target = $( event ? event.target : this.element )
+-				// we need closest here due to mouseover bubbling,
+-				// but always pointing at the same event target
+-				.closest( this.options.items );
+-
+-		// No element to show a tooltip for or the tooltip is already open
+-		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+-			return;
+-		}
+-
+-		if ( target.attr( "title" ) ) {
+-			target.data( "ui-tooltip-title", target.attr( "title" ) );
+-		}
+-
+-		target.data( "ui-tooltip-open", true );
+-
+-		// kill parent tooltips, custom or native, for hover
+-		if ( event && event.type === "mouseover" ) {
+-			target.parents().each(function() {
+-				var parent = $( this ),
+-					blurEvent;
+-				if ( parent.data( "ui-tooltip-open" ) ) {
+-					blurEvent = $.Event( "blur" );
+-					blurEvent.target = blurEvent.currentTarget = this;
+-					that.close( blurEvent, true );
+-				}
+-				if ( parent.attr( "title" ) ) {
+-					parent.uniqueId();
+-					that.parents[ this.id ] = {
+-						element: this,
+-						title: parent.attr( "title" )
+-					};
+-					parent.attr( "title", "" );
+-				}
+-			});
+-		}
+-
+-		this._updateContent( target, event );
+-	},
+-
+-	_updateContent: function( target, event ) {
+-		var content,
+-			contentOption = this.options.content,
+-			that = this,
+-			eventType = event ? event.type : null;
+-
+-		if ( typeof contentOption === "string" ) {
+-			return this._open( event, target, contentOption );
+-		}
+-
+-		content = contentOption.call( target[0], function( response ) {
+-			// ignore async response if tooltip was closed already
+-			if ( !target.data( "ui-tooltip-open" ) ) {
+-				return;
+-			}
+-			// IE may instantly serve a cached response for ajax requests
+-			// delay this call to _open so the other call to _open runs first
+-			that._delay(function() {
+-				// jQuery creates a special event for focusin when it doesn't
+-				// exist natively. To improve performance, the native event
+-				// object is reused and the type is changed. Therefore, we can't
+-				// rely on the type being correct after the event finished
+-				// bubbling, so we set it back to the previous value. (#8740)
+-				if ( event ) {
+-					event.type = eventType;
+-				}
+-				this._open( event, target, response );
+-			});
+-		});
+-		if ( content ) {
+-			this._open( event, target, content );
+-		}
+-	},
+-
+-	_open: function( event, target, content ) {
+-		var tooltip, events, delayedShow,
+-			positionOption = $.extend( {}, this.options.position );
+-
+-		if ( !content ) {
+-			return;
+-		}
+-
+-		// Content can be updated multiple times. If the tooltip already
+-		// exists, then just update the content and bail.
+-		tooltip = this._find( target );
+-		if ( tooltip.length ) {
+-			tooltip.find( ".ui-tooltip-content" ).html( content );
+-			return;
+-		}
+-
+-		// if we have a title, clear it to prevent the native tooltip
+-		// we have to check first to avoid defining a title if none exists
+-		// (we don't want to cause an element to start matching [title])
+-		//
+-		// We use removeAttr only for key events, to allow IE to export the correct
+-		// accessible attributes. For mouse events, set to empty string to avoid
+-		// native tooltip showing up (happens only when removing inside mouseover).
+-		if ( target.is( "[title]" ) ) {
+-			if ( event && event.type === "mouseover" ) {
+-				target.attr( "title", "" );
+-			} else {
+-				target.removeAttr( "title" );
+-			}
+-		}
+-
+-		tooltip = this._tooltip( target );
+-		addDescribedBy( target, tooltip.attr( "id" ) );
+-		tooltip.find( ".ui-tooltip-content" ).html( content );
+-
+-		function position( event ) {
+-			positionOption.of = event;
+-			if ( tooltip.is( ":hidden" ) ) {
+-				return;
+-			}
+-			tooltip.position( positionOption );
+-		}
+-		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+-			this._on( this.document, {
+-				mousemove: position
+-			});
+-			// trigger once to override element-relative positioning
+-			position( event );
+-		} else {
+-			tooltip.position( $.extend({
+-				of: target
+-			}, this.options.position ) );
+-		}
+-
+-		tooltip.hide();
+-
+-		this._show( tooltip, this.options.show );
+-		// Handle tracking tooltips that are shown with a delay (#8644). As soon
+-		// as the tooltip is visible, position the tooltip using the most recent
+-		// event.
+-		if ( this.options.show && this.options.show.delay ) {
+-			delayedShow = this.delayedShow = setInterval(function() {
+-				if ( tooltip.is( ":visible" ) ) {
+-					position( positionOption.of );
+-					clearInterval( delayedShow );
+-				}
+-			}, $.fx.interval );
+-		}
+-
+-		this._trigger( "open", event, { tooltip: tooltip } );
+-
+-		events = {
+-			keyup: function( event ) {
+-				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					var fakeEvent = $.Event(event);
+-					fakeEvent.currentTarget = target[0];
+-					this.close( fakeEvent, true );
+-				}
+-			},
+-			remove: function() {
+-				this._removeTooltip( tooltip );
+-			}
+-		};
+-		if ( !event || event.type === "mouseover" ) {
+-			events.mouseleave = "close";
+-		}
+-		if ( !event || event.type === "focusin" ) {
+-			events.focusout = "close";
+-		}
+-		this._on( true, target, events );
+-	},
+-
+-	close: function( event ) {
+-		var that = this,
+-			target = $( event ? event.currentTarget : this.element ),
+-			tooltip = this._find( target );
+-
+-		// disabling closes the tooltip, so we need to track when we're closing
+-		// to avoid an infinite loop in case the tooltip becomes disabled on close
+-		if ( this.closing ) {
+-			return;
+-		}
+-
+-		// Clear the interval for delayed tracking tooltips
+-		clearInterval( this.delayedShow );
+-
+-		// only set title if we had one before (see comment in _open())
+-		if ( target.data( "ui-tooltip-title" ) ) {
+-			target.attr( "title", target.data( "ui-tooltip-title" ) );
+-		}
+-
+-		removeDescribedBy( target );
+-
+-		tooltip.stop( true );
+-		this._hide( tooltip, this.options.hide, function() {
+-			that._removeTooltip( $( this ) );
+-		});
+-
+-		target.removeData( "ui-tooltip-open" );
+-		this._off( target, "mouseleave focusout keyup" );
+-		// Remove 'remove' binding only on delegated targets
+-		if ( target[0] !== this.element[0] ) {
+-			this._off( target, "remove" );
+-		}
+-		this._off( this.document, "mousemove" );
+-
+-		if ( event && event.type === "mouseleave" ) {
+-			$.each( this.parents, function( id, parent ) {
+-				$( parent.element ).attr( "title", parent.title );
+-				delete that.parents[ id ];
+-			});
+-		}
+-
+-		this.closing = true;
+-		this._trigger( "close", event, { tooltip: tooltip } );
+-		this.closing = false;
+-	},
+-
+-	_tooltip: function( element ) {
+-		var id = "ui-tooltip-" + increments++,
+-			tooltip = $( "<div>" )
+-				.attr({
+-					id: id,
+-					role: "tooltip"
+-				})
+-				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+-					( this.options.tooltipClass || "" ) );
+-		$( "<div>" )
+-			.addClass( "ui-tooltip-content" )
+-			.appendTo( tooltip );
+-		tooltip.appendTo( this.document[0].body );
+-		this.tooltips[ id ] = element;
+-		return tooltip;
+-	},
+-
+-	_find: function( target ) {
+-		var id = target.data( "ui-tooltip-id" );
+-		return id ? $( "#" + id ) : $();
+-	},
+-
+-	_removeTooltip: function( tooltip ) {
+-		tooltip.remove();
+-		delete this.tooltips[ tooltip.attr( "id" ) ];
+-	},
+-
+-	_destroy: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			// Delegate to close method to handle common cleanup
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-
+-			// Remove immediately; destroying an open tooltip doesn't use the
+-			// hide animation
+-			$( "#" + id ).remove();
+-
+-			// Restore the title
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-				element.removeData( "ui-tooltip-title" );
+-			}
+-		});
+-	}
+-});
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-explode.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-explode.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-explode.js	(revision 15488)
+@@ -1,97 +0,0 @@
+-/*!
+- * jQuery UI Effects Explode 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/explode-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.explode = function( o, done ) {
+-
+-	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+-		cells = rows,
+-		el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-
+-		// show and then visibility:hidden the element before calculating offset
+-		offset = el.show().css( "visibility", "hidden" ).offset(),
+-
+-		// width and height of a piece
+-		width = Math.ceil( el.outerWidth() / cells ),
+-		height = Math.ceil( el.outerHeight() / rows ),
+-		pieces = [],
+-
+-		// loop
+-		i, j, left, top, mx, my;
+-
+-	// children animate complete:
+-	function childComplete() {
+-		pieces.push( this );
+-		if ( pieces.length === rows * cells ) {
+-			animComplete();
+-		}
+-	}
+-
+-	// clone the element for each row and cell.
+-	for( i = 0; i < rows ; i++ ) { // ===>
+-		top = offset.top + i * height;
+-		my = i - ( rows - 1 ) / 2 ;
+-
+-		for( j = 0; j < cells ; j++ ) { // |||
+-			left = offset.left + j * width;
+-			mx = j - ( cells - 1 ) / 2 ;
+-
+-			// Create a clone of the now hidden main element that will be absolute positioned
+-			// within a wrapper div off the -left and -top equal to size of our pieces
+-			el
+-				.clone()
+-				.appendTo( "body" )
+-				.wrap( "<div></div>" )
+-				.css({
+-					position: "absolute",
+-					visibility: "visible",
+-					left: -j * width,
+-					top: -i * height
+-				})
+-
+-			// select the wrapper - make it overflow: hidden and absolute positioned based on
+-			// where the original was located +left and +top equal to the size of pieces
+-				.parent()
+-				.addClass( "ui-effects-explode" )
+-				.css({
+-					position: "absolute",
+-					overflow: "hidden",
+-					width: width,
+-					height: height,
+-					left: left + ( show ? mx * width : 0 ),
+-					top: top + ( show ? my * height : 0 ),
+-					opacity: show ? 0 : 1
+-				}).animate({
+-					left: left + ( show ? 0 : mx * width ),
+-					top: top + ( show ? 0 : my * height ),
+-					opacity: show ? 1 : 0
+-				}, o.duration || 500, o.easing, childComplete );
+-		}
+-	}
+-
+-	function animComplete() {
+-		el.css({
+-			visibility: "visible"
+-		});
+-		$( pieces ).remove();
+-		if ( !show ) {
+-			el.hide();
+-		}
+-		done();
+-	}
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect.js	(revision 15488)
+@@ -1,1289 +0,0 @@
+-/*!
+- * jQuery UI Effects 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/category/effects-core/
+- */
+-(function($, undefined) {
+-
+-var dataSpace = "ui-effects-";
+-
+-$.effects = {
+-	effect: {}
+-};
+-
+-/*!
+- * jQuery Color Animations v2.1.2
+- * https://github.com/jquery/jquery-color
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * Date: Wed Jan 16 08:47:09 2013 -0600
+- */
+-(function( jQuery, undefined ) {
+-
+-	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+-
+-	// plusequals test for += 100 -= 100
+-	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+-	// a set of RE's that can match strings and generate color tuples.
+-	stringParsers = [{
+-			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ],
+-					execResult[ 3 ],
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ] * 2.55,
+-					execResult[ 2 ] * 2.55,
+-					execResult[ 3 ] * 2.55,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			space: "hsla",
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ] / 100,
+-					execResult[ 3 ] / 100,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}],
+-
+-	// jQuery.Color( )
+-	color = jQuery.Color = function( color, green, blue, alpha ) {
+-		return new jQuery.Color.fn.parse( color, green, blue, alpha );
+-	},
+-	spaces = {
+-		rgba: {
+-			props: {
+-				red: {
+-					idx: 0,
+-					type: "byte"
+-				},
+-				green: {
+-					idx: 1,
+-					type: "byte"
+-				},
+-				blue: {
+-					idx: 2,
+-					type: "byte"
+-				}
+-			}
+-		},
+-
+-		hsla: {
+-			props: {
+-				hue: {
+-					idx: 0,
+-					type: "degrees"
+-				},
+-				saturation: {
+-					idx: 1,
+-					type: "percent"
+-				},
+-				lightness: {
+-					idx: 2,
+-					type: "percent"
+-				}
+-			}
+-		}
+-	},
+-	propTypes = {
+-		"byte": {
+-			floor: true,
+-			max: 255
+-		},
+-		"percent": {
+-			max: 1
+-		},
+-		"degrees": {
+-			mod: 360,
+-			floor: true
+-		}
+-	},
+-	support = color.support = {},
+-
+-	// element for support tests
+-	supportElem = jQuery( "<p>" )[ 0 ],
+-
+-	// colors = jQuery.Color.names
+-	colors,
+-
+-	// local aliases of functions called often
+-	each = jQuery.each;
+-
+-// determine rgba support immediately
+-supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+-support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+-
+-// define cache name and alpha properties
+-// for rgba and hsla spaces
+-each( spaces, function( spaceName, space ) {
+-	space.cache = "_" + spaceName;
+-	space.props.alpha = {
+-		idx: 3,
+-		type: "percent",
+-		def: 1
+-	};
+-});
+-
+-function clamp( value, prop, allowEmpty ) {
+-	var type = propTypes[ prop.type ] || {};
+-
+-	if ( value == null ) {
+-		return (allowEmpty || !prop.def) ? null : prop.def;
+-	}
+-
+-	// ~~ is an short way of doing floor for positive numbers
+-	value = type.floor ? ~~value : parseFloat( value );
+-
+-	// IE will pass in empty strings as value for alpha,
+-	// which will hit this case
+-	if ( isNaN( value ) ) {
+-		return prop.def;
+-	}
+-
+-	if ( type.mod ) {
+-		// we add mod before modding to make sure that negatives values
+-		// get converted properly: -10 -> 350
+-		return (value + type.mod) % type.mod;
+-	}
+-
+-	// for now all property types without mod have min and max
+-	return 0 > value ? 0 : type.max < value ? type.max : value;
+-}
+-
+-function stringParse( string ) {
+-	var inst = color(),
+-		rgba = inst._rgba = [];
+-
+-	string = string.toLowerCase();
+-
+-	each( stringParsers, function( i, parser ) {
+-		var parsed,
+-			match = parser.re.exec( string ),
+-			values = match && parser.parse( match ),
+-			spaceName = parser.space || "rgba";
+-
+-		if ( values ) {
+-			parsed = inst[ spaceName ]( values );
+-
+-			// if this was an rgba parse the assignment might happen twice
+-			// oh well....
+-			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+-			rgba = inst._rgba = parsed._rgba;
+-
+-			// exit each( stringParsers ) here because we matched
+-			return false;
+-		}
+-	});
+-
+-	// Found a stringParser that handled it
+-	if ( rgba.length ) {
+-
+-		// if this came from a parsed string, force "transparent" when alpha is 0
+-		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+-		if ( rgba.join() === "0,0,0,0" ) {
+-			jQuery.extend( rgba, colors.transparent );
+-		}
+-		return inst;
+-	}
+-
+-	// named colors
+-	return colors[ string ];
+-}
+-
+-color.fn = jQuery.extend( color.prototype, {
+-	parse: function( red, green, blue, alpha ) {
+-		if ( red === undefined ) {
+-			this._rgba = [ null, null, null, null ];
+-			return this;
+-		}
+-		if ( red.jquery || red.nodeType ) {
+-			red = jQuery( red ).css( green );
+-			green = undefined;
+-		}
+-
+-		var inst = this,
+-			type = jQuery.type( red ),
+-			rgba = this._rgba = [];
+-
+-		// more than 1 argument specified - assume ( red, green, blue, alpha )
+-		if ( green !== undefined ) {
+-			red = [ red, green, blue, alpha ];
+-			type = "array";
+-		}
+-
+-		if ( type === "string" ) {
+-			return this.parse( stringParse( red ) || colors._default );
+-		}
+-
+-		if ( type === "array" ) {
+-			each( spaces.rgba.props, function( key, prop ) {
+-				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+-			});
+-			return this;
+-		}
+-
+-		if ( type === "object" ) {
+-			if ( red instanceof color ) {
+-				each( spaces, function( spaceName, space ) {
+-					if ( red[ space.cache ] ) {
+-						inst[ space.cache ] = red[ space.cache ].slice();
+-					}
+-				});
+-			} else {
+-				each( spaces, function( spaceName, space ) {
+-					var cache = space.cache;
+-					each( space.props, function( key, prop ) {
+-
+-						// if the cache doesn't exist, and we know how to convert
+-						if ( !inst[ cache ] && space.to ) {
+-
+-							// if the value was null, we don't need to copy it
+-							// if the key was alpha, we don't need to copy it either
+-							if ( key === "alpha" || red[ key ] == null ) {
+-								return;
+-							}
+-							inst[ cache ] = space.to( inst._rgba );
+-						}
+-
+-						// this is the only case where we allow nulls for ALL properties.
+-						// call clamp with alwaysAllowEmpty
+-						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+-					});
+-
+-					// everything defined but alpha?
+-					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+-						// use the default of 1
+-						inst[ cache ][ 3 ] = 1;
+-						if ( space.from ) {
+-							inst._rgba = space.from( inst[ cache ] );
+-						}
+-					}
+-				});
+-			}
+-			return this;
+-		}
+-	},
+-	is: function( compare ) {
+-		var is = color( compare ),
+-			same = true,
+-			inst = this;
+-
+-		each( spaces, function( _, space ) {
+-			var localCache,
+-				isCache = is[ space.cache ];
+-			if (isCache) {
+-				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+-				each( space.props, function( _, prop ) {
+-					if ( isCache[ prop.idx ] != null ) {
+-						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+-						return same;
+-					}
+-				});
+-			}
+-			return same;
+-		});
+-		return same;
+-	},
+-	_space: function() {
+-		var used = [],
+-			inst = this;
+-		each( spaces, function( spaceName, space ) {
+-			if ( inst[ space.cache ] ) {
+-				used.push( spaceName );
+-			}
+-		});
+-		return used.pop();
+-	},
+-	transition: function( other, distance ) {
+-		var end = color( other ),
+-			spaceName = end._space(),
+-			space = spaces[ spaceName ],
+-			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+-			start = startColor[ space.cache ] || space.to( startColor._rgba ),
+-			result = start.slice();
+-
+-		end = end[ space.cache ];
+-		each( space.props, function( key, prop ) {
+-			var index = prop.idx,
+-				startValue = start[ index ],
+-				endValue = end[ index ],
+-				type = propTypes[ prop.type ] || {};
+-
+-			// if null, don't override start value
+-			if ( endValue === null ) {
+-				return;
+-			}
+-			// if null - use end
+-			if ( startValue === null ) {
+-				result[ index ] = endValue;
+-			} else {
+-				if ( type.mod ) {
+-					if ( endValue - startValue > type.mod / 2 ) {
+-						startValue += type.mod;
+-					} else if ( startValue - endValue > type.mod / 2 ) {
+-						startValue -= type.mod;
+-					}
+-				}
+-				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+-			}
+-		});
+-		return this[ spaceName ]( result );
+-	},
+-	blend: function( opaque ) {
+-		// if we are already opaque - return ourself
+-		if ( this._rgba[ 3 ] === 1 ) {
+-			return this;
+-		}
+-
+-		var rgb = this._rgba.slice(),
+-			a = rgb.pop(),
+-			blend = color( opaque )._rgba;
+-
+-		return color( jQuery.map( rgb, function( v, i ) {
+-			return ( 1 - a ) * blend[ i ] + a * v;
+-		}));
+-	},
+-	toRgbaString: function() {
+-		var prefix = "rgba(",
+-			rgba = jQuery.map( this._rgba, function( v, i ) {
+-				return v == null ? ( i > 2 ? 1 : 0 ) : v;
+-			});
+-
+-		if ( rgba[ 3 ] === 1 ) {
+-			rgba.pop();
+-			prefix = "rgb(";
+-		}
+-
+-		return prefix + rgba.join() + ")";
+-	},
+-	toHslaString: function() {
+-		var prefix = "hsla(",
+-			hsla = jQuery.map( this.hsla(), function( v, i ) {
+-				if ( v == null ) {
+-					v = i > 2 ? 1 : 0;
+-				}
+-
+-				// catch 1 and 2
+-				if ( i && i < 3 ) {
+-					v = Math.round( v * 100 ) + "%";
+-				}
+-				return v;
+-			});
+-
+-		if ( hsla[ 3 ] === 1 ) {
+-			hsla.pop();
+-			prefix = "hsl(";
+-		}
+-		return prefix + hsla.join() + ")";
+-	},
+-	toHexString: function( includeAlpha ) {
+-		var rgba = this._rgba.slice(),
+-			alpha = rgba.pop();
+-
+-		if ( includeAlpha ) {
+-			rgba.push( ~~( alpha * 255 ) );
+-		}
+-
+-		return "#" + jQuery.map( rgba, function( v ) {
+-
+-			// default to 0 when nulls exist
+-			v = ( v || 0 ).toString( 16 );
+-			return v.length === 1 ? "0" + v : v;
+-		}).join("");
+-	},
+-	toString: function() {
+-		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+-	}
+-});
+-color.fn.parse.prototype = color.fn;
+-
+-// hsla conversions adapted from:
+-// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+-
+-function hue2rgb( p, q, h ) {
+-	h = ( h + 1 ) % 1;
+-	if ( h * 6 < 1 ) {
+-		return p + (q - p) * h * 6;
+-	}
+-	if ( h * 2 < 1) {
+-		return q;
+-	}
+-	if ( h * 3 < 2 ) {
+-		return p + (q - p) * ((2/3) - h) * 6;
+-	}
+-	return p;
+-}
+-
+-spaces.hsla.to = function ( rgba ) {
+-	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+-		return [ null, null, null, rgba[ 3 ] ];
+-	}
+-	var r = rgba[ 0 ] / 255,
+-		g = rgba[ 1 ] / 255,
+-		b = rgba[ 2 ] / 255,
+-		a = rgba[ 3 ],
+-		max = Math.max( r, g, b ),
+-		min = Math.min( r, g, b ),
+-		diff = max - min,
+-		add = max + min,
+-		l = add * 0.5,
+-		h, s;
+-
+-	if ( min === max ) {
+-		h = 0;
+-	} else if ( r === max ) {
+-		h = ( 60 * ( g - b ) / diff ) + 360;
+-	} else if ( g === max ) {
+-		h = ( 60 * ( b - r ) / diff ) + 120;
+-	} else {
+-		h = ( 60 * ( r - g ) / diff ) + 240;
+-	}
+-
+-	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+-	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+-	if ( diff === 0 ) {
+-		s = 0;
+-	} else if ( l <= 0.5 ) {
+-		s = diff / add;
+-	} else {
+-		s = diff / ( 2 - add );
+-	}
+-	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+-};
+-
+-spaces.hsla.from = function ( hsla ) {
+-	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+-		return [ null, null, null, hsla[ 3 ] ];
+-	}
+-	var h = hsla[ 0 ] / 360,
+-		s = hsla[ 1 ],
+-		l = hsla[ 2 ],
+-		a = hsla[ 3 ],
+-		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+-		p = 2 * l - q;
+-
+-	return [
+-		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+-		Math.round( hue2rgb( p, q, h ) * 255 ),
+-		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+-		a
+-	];
+-};
+-
+-
+-each( spaces, function( spaceName, space ) {
+-	var props = space.props,
+-		cache = space.cache,
+-		to = space.to,
+-		from = space.from;
+-
+-	// makes rgba() and hsla()
+-	color.fn[ spaceName ] = function( value ) {
+-
+-		// generate a cache for this space if it doesn't exist
+-		if ( to && !this[ cache ] ) {
+-			this[ cache ] = to( this._rgba );
+-		}
+-		if ( value === undefined ) {
+-			return this[ cache ].slice();
+-		}
+-
+-		var ret,
+-			type = jQuery.type( value ),
+-			arr = ( type === "array" || type === "object" ) ? value : arguments,
+-			local = this[ cache ].slice();
+-
+-		each( props, function( key, prop ) {
+-			var val = arr[ type === "object" ? key : prop.idx ];
+-			if ( val == null ) {
+-				val = local[ prop.idx ];
+-			}
+-			local[ prop.idx ] = clamp( val, prop );
+-		});
+-
+-		if ( from ) {
+-			ret = color( from( local ) );
+-			ret[ cache ] = local;
+-			return ret;
+-		} else {
+-			return color( local );
+-		}
+-	};
+-
+-	// makes red() green() blue() alpha() hue() saturation() lightness()
+-	each( props, function( key, prop ) {
+-		// alpha is included in more than one space
+-		if ( color.fn[ key ] ) {
+-			return;
+-		}
+-		color.fn[ key ] = function( value ) {
+-			var vtype = jQuery.type( value ),
+-				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+-				local = this[ fn ](),
+-				cur = local[ prop.idx ],
+-				match;
+-
+-			if ( vtype === "undefined" ) {
+-				return cur;
+-			}
+-
+-			if ( vtype === "function" ) {
+-				value = value.call( this, cur );
+-				vtype = jQuery.type( value );
+-			}
+-			if ( value == null && prop.empty ) {
+-				return this;
+-			}
+-			if ( vtype === "string" ) {
+-				match = rplusequals.exec( value );
+-				if ( match ) {
+-					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+-				}
+-			}
+-			local[ prop.idx ] = value;
+-			return this[ fn ]( local );
+-		};
+-	});
+-});
+-
+-// add cssHook and .fx.step function for each named hook.
+-// accept a space separated string of properties
+-color.hook = function( hook ) {
+-	var hooks = hook.split( " " );
+-	each( hooks, function( i, hook ) {
+-		jQuery.cssHooks[ hook ] = {
+-			set: function( elem, value ) {
+-				var parsed, curElem,
+-					backgroundColor = "";
+-
+-				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+-					value = color( parsed || value );
+-					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+-						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+-						while (
+-							(backgroundColor === "" || backgroundColor === "transparent") &&
+-							curElem && curElem.style
+-						) {
+-							try {
+-								backgroundColor = jQuery.css( curElem, "backgroundColor" );
+-								curElem = curElem.parentNode;
+-							} catch ( e ) {
+-							}
+-						}
+-
+-						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+-							backgroundColor :
+-							"_default" );
+-					}
+-
+-					value = value.toRgbaString();
+-				}
+-				try {
+-					elem.style[ hook ] = value;
+-				} catch( e ) {
+-					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+-				}
+-			}
+-		};
+-		jQuery.fx.step[ hook ] = function( fx ) {
+-			if ( !fx.colorInit ) {
+-				fx.start = color( fx.elem, hook );
+-				fx.end = color( fx.end );
+-				fx.colorInit = true;
+-			}
+-			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+-		};
+-	});
+-
+-};
+-
+-color.hook( stepHooks );
+-
+-jQuery.cssHooks.borderColor = {
+-	expand: function( value ) {
+-		var expanded = {};
+-
+-		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+-			expanded[ "border" + part + "Color" ] = value;
+-		});
+-		return expanded;
+-	}
+-};
+-
+-// Basic color names only.
+-// Usage of any of the other color names requires adding yourself or including
+-// jquery.color.svg-names.js.
+-colors = jQuery.Color.names = {
+-	// 4.1. Basic color keywords
+-	aqua: "#00ffff",
+-	black: "#000000",
+-	blue: "#0000ff",
+-	fuchsia: "#ff00ff",
+-	gray: "#808080",
+-	green: "#008000",
+-	lime: "#00ff00",
+-	maroon: "#800000",
+-	navy: "#000080",
+-	olive: "#808000",
+-	purple: "#800080",
+-	red: "#ff0000",
+-	silver: "#c0c0c0",
+-	teal: "#008080",
+-	white: "#ffffff",
+-	yellow: "#ffff00",
+-
+-	// 4.2.3. "transparent" color keyword
+-	transparent: [ null, null, null, 0 ],
+-
+-	_default: "#ffffff"
+-};
+-
+-})( jQuery );
+-
+-
+-/******************************************************************************/
+-/****************************** CLASS ANIMATIONS ******************************/
+-/******************************************************************************/
+-(function() {
+-
+-var classAnimationActions = [ "add", "remove", "toggle" ],
+-	shorthandStyles = {
+-		border: 1,
+-		borderBottom: 1,
+-		borderColor: 1,
+-		borderLeft: 1,
+-		borderRight: 1,
+-		borderTop: 1,
+-		borderWidth: 1,
+-		margin: 1,
+-		padding: 1
+-	};
+-
+-$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+-	$.fx.step[ prop ] = function( fx ) {
+-		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+-			jQuery.style( fx.elem, prop, fx.end );
+-			fx.setAttr = true;
+-		}
+-	};
+-});
+-
+-function getElementStyles( elem ) {
+-	var key, len,
+-		style = elem.ownerDocument.defaultView ?
+-			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+-			elem.currentStyle,
+-		styles = {};
+-
+-	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+-		len = style.length;
+-		while ( len-- ) {
+-			key = style[ len ];
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ $.camelCase( key ) ] = style[ key ];
+-			}
+-		}
+-	// support: Opera, IE <9
+-	} else {
+-		for ( key in style ) {
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ key ] = style[ key ];
+-			}
+-		}
+-	}
+-
+-	return styles;
+-}
+-
+-
+-function styleDifference( oldStyle, newStyle ) {
+-	var diff = {},
+-		name, value;
+-
+-	for ( name in newStyle ) {
+-		value = newStyle[ name ];
+-		if ( oldStyle[ name ] !== value ) {
+-			if ( !shorthandStyles[ name ] ) {
+-				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+-					diff[ name ] = value;
+-				}
+-			}
+-		}
+-	}
+-
+-	return diff;
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-$.effects.animateClass = function( value, duration, easing, callback ) {
+-	var o = $.speed( duration, easing, callback );
+-
+-	return this.queue( function() {
+-		var animated = $( this ),
+-			baseClass = animated.attr( "class" ) || "",
+-			applyClassChange,
+-			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+-
+-		// map the animated objects to store the original styles.
+-		allAnimations = allAnimations.map(function() {
+-			var el = $( this );
+-			return {
+-				el: el,
+-				start: getElementStyles( this )
+-			};
+-		});
+-
+-		// apply class change
+-		applyClassChange = function() {
+-			$.each( classAnimationActions, function(i, action) {
+-				if ( value[ action ] ) {
+-					animated[ action + "Class" ]( value[ action ] );
+-				}
+-			});
+-		};
+-		applyClassChange();
+-
+-		// map all animated objects again - calculate new styles and diff
+-		allAnimations = allAnimations.map(function() {
+-			this.end = getElementStyles( this.el[ 0 ] );
+-			this.diff = styleDifference( this.start, this.end );
+-			return this;
+-		});
+-
+-		// apply original class
+-		animated.attr( "class", baseClass );
+-
+-		// map all animated objects again - this time collecting a promise
+-		allAnimations = allAnimations.map(function() {
+-			var styleInfo = this,
+-				dfd = $.Deferred(),
+-				opts = $.extend({}, o, {
+-					queue: false,
+-					complete: function() {
+-						dfd.resolve( styleInfo );
+-					}
+-				});
+-
+-			this.el.animate( this.diff, opts );
+-			return dfd.promise();
+-		});
+-
+-		// once all animations have completed:
+-		$.when.apply( $, allAnimations.get() ).done(function() {
+-
+-			// set the final class
+-			applyClassChange();
+-
+-			// for each animated element,
+-			// clear all css properties that were animated
+-			$.each( arguments, function() {
+-				var el = this.el;
+-				$.each( this.diff, function(key) {
+-					el.css( key, "" );
+-				});
+-			});
+-
+-			// this is guarnteed to be there if you use jQuery.speed()
+-			// it also handles dequeuing the next anim...
+-			o.complete.call( animated[ 0 ] );
+-		});
+-	});
+-};
+-
+-$.fn.extend({
+-	addClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return speed ?
+-				$.effects.animateClass.call( this,
+-					{ add: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.addClass ),
+-
+-	removeClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return arguments.length > 1 ?
+-				$.effects.animateClass.call( this,
+-					{ remove: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.removeClass ),
+-
+-	toggleClass: (function( orig ) {
+-		return function( classNames, force, speed, easing, callback ) {
+-			if ( typeof force === "boolean" || force === undefined ) {
+-				if ( !speed ) {
+-					// without speed parameter
+-					return orig.apply( this, arguments );
+-				} else {
+-					return $.effects.animateClass.call( this,
+-						(force ? { add: classNames } : { remove: classNames }),
+-						speed, easing, callback );
+-				}
+-			} else {
+-				// without force parameter
+-				return $.effects.animateClass.call( this,
+-					{ toggle: classNames }, force, speed, easing );
+-			}
+-		};
+-	})( $.fn.toggleClass ),
+-
+-	switchClass: function( remove, add, speed, easing, callback) {
+-		return $.effects.animateClass.call( this, {
+-			add: add,
+-			remove: remove
+-		}, speed, easing, callback );
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EFFECTS **********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-$.extend( $.effects, {
+-	version: "1.10.3",
+-
+-	// Saves a set of properties in a data storage
+-	save: function( element, set ) {
+-		for( var i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+-			}
+-		}
+-	},
+-
+-	// Restores a set of previously saved properties from a data storage
+-	restore: function( element, set ) {
+-		var val, i;
+-		for( i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				val = element.data( dataSpace + set[ i ] );
+-				// support: jQuery 1.6.2
+-				// http://bugs.jquery.com/ticket/9917
+-				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+-				// We can't differentiate between "" and 0 here, so we just assume
+-				// empty string since it's likely to be a more common value...
+-				if ( val === undefined ) {
+-					val = "";
+-				}
+-				element.css( set[ i ], val );
+-			}
+-		}
+-	},
+-
+-	setMode: function( el, mode ) {
+-		if (mode === "toggle") {
+-			mode = el.is( ":hidden" ) ? "show" : "hide";
+-		}
+-		return mode;
+-	},
+-
+-	// Translates a [top,left] array into a baseline value
+-	// this should be a little more flexible in the future to handle a string & hash
+-	getBaseline: function( origin, original ) {
+-		var y, x;
+-		switch ( origin[ 0 ] ) {
+-			case "top": y = 0; break;
+-			case "middle": y = 0.5; break;
+-			case "bottom": y = 1; break;
+-			default: y = origin[ 0 ] / original.height;
+-		}
+-		switch ( origin[ 1 ] ) {
+-			case "left": x = 0; break;
+-			case "center": x = 0.5; break;
+-			case "right": x = 1; break;
+-			default: x = origin[ 1 ] / original.width;
+-		}
+-		return {
+-			x: x,
+-			y: y
+-		};
+-	},
+-
+-	// Wraps the element around a wrapper that copies position properties
+-	createWrapper: function( element ) {
+-
+-		// if the element is already wrapped, return it
+-		if ( element.parent().is( ".ui-effects-wrapper" )) {
+-			return element.parent();
+-		}
+-
+-		// wrap the element
+-		var props = {
+-				width: element.outerWidth(true),
+-				height: element.outerHeight(true),
+-				"float": element.css( "float" )
+-			},
+-			wrapper = $( "<div></div>" )
+-				.addClass( "ui-effects-wrapper" )
+-				.css({
+-					fontSize: "100%",
+-					background: "transparent",
+-					border: "none",
+-					margin: 0,
+-					padding: 0
+-				}),
+-			// Store the size in case width/height are defined in % - Fixes #5245
+-			size = {
+-				width: element.width(),
+-				height: element.height()
+-			},
+-			active = document.activeElement;
+-
+-		// support: Firefox
+-		// Firefox incorrectly exposes anonymous content
+-		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+-		try {
+-			active.id;
+-		} catch( e ) {
+-			active = document.body;
+-		}
+-
+-		element.wrap( wrapper );
+-
+-		// Fixes #7595 - Elements lose focus when wrapped.
+-		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-			$( active ).focus();
+-		}
+-
+-		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+-
+-		// transfer positioning properties to the wrapper
+-		if ( element.css( "position" ) === "static" ) {
+-			wrapper.css({ position: "relative" });
+-			element.css({ position: "relative" });
+-		} else {
+-			$.extend( props, {
+-				position: element.css( "position" ),
+-				zIndex: element.css( "z-index" )
+-			});
+-			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+-				props[ pos ] = element.css( pos );
+-				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+-					props[ pos ] = "auto";
+-				}
+-			});
+-			element.css({
+-				position: "relative",
+-				top: 0,
+-				left: 0,
+-				right: "auto",
+-				bottom: "auto"
+-			});
+-		}
+-		element.css(size);
+-
+-		return wrapper.css( props ).show();
+-	},
+-
+-	removeWrapper: function( element ) {
+-		var active = document.activeElement;
+-
+-		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+-			element.parent().replaceWith( element );
+-
+-			// Fixes #7595 - Elements lose focus when wrapped.
+-			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-				$( active ).focus();
+-			}
+-		}
+-
+-
+-		return element;
+-	},
+-
+-	setTransition: function( element, list, factor, value ) {
+-		value = value || {};
+-		$.each( list, function( i, x ) {
+-			var unit = element.cssUnit( x );
+-			if ( unit[ 0 ] > 0 ) {
+-				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+-			}
+-		});
+-		return value;
+-	}
+-});
+-
+-// return an effect options object for the given parameters:
+-function _normalizeArguments( effect, options, speed, callback ) {
+-
+-	// allow passing all options as the first parameter
+-	if ( $.isPlainObject( effect ) ) {
+-		options = effect;
+-		effect = effect.effect;
+-	}
+-
+-	// convert to an object
+-	effect = { effect: effect };
+-
+-	// catch (effect, null, ...)
+-	if ( options == null ) {
+-		options = {};
+-	}
+-
+-	// catch (effect, callback)
+-	if ( $.isFunction( options ) ) {
+-		callback = options;
+-		speed = null;
+-		options = {};
+-	}
+-
+-	// catch (effect, speed, ?)
+-	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+-		callback = speed;
+-		speed = options;
+-		options = {};
+-	}
+-
+-	// catch (effect, options, callback)
+-	if ( $.isFunction( speed ) ) {
+-		callback = speed;
+-		speed = null;
+-	}
+-
+-	// add options to effect
+-	if ( options ) {
+-		$.extend( effect, options );
+-	}
+-
+-	speed = speed || options.duration;
+-	effect.duration = $.fx.off ? 0 :
+-		typeof speed === "number" ? speed :
+-		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+-		$.fx.speeds._default;
+-
+-	effect.complete = callback || options.complete;
+-
+-	return effect;
+-}
+-
+-function standardAnimationOption( option ) {
+-	// Valid standard speeds (nothing, number, named speed)
+-	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+-		return true;
+-	}
+-
+-	// Invalid strings - treat as "normal" speed
+-	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+-		return true;
+-	}
+-
+-	// Complete callback
+-	if ( $.isFunction( option ) ) {
+-		return true;
+-	}
+-
+-	// Options hash (but not naming an effect)
+-	if ( typeof option === "object" && !option.effect ) {
+-		return true;
+-	}
+-
+-	// Didn't match any standard API
+-	return false;
+-}
+-
+-$.fn.extend({
+-	effect: function( /* effect, options, speed, callback */ ) {
+-		var args = _normalizeArguments.apply( this, arguments ),
+-			mode = args.mode,
+-			queue = args.queue,
+-			effectMethod = $.effects.effect[ args.effect ];
+-
+-		if ( $.fx.off || !effectMethod ) {
+-			// delegate to the original method (e.g., .show()) if possible
+-			if ( mode ) {
+-				return this[ mode ]( args.duration, args.complete );
+-			} else {
+-				return this.each( function() {
+-					if ( args.complete ) {
+-						args.complete.call( this );
+-					}
+-				});
+-			}
+-		}
+-
+-		function run( next ) {
+-			var elem = $( this ),
+-				complete = args.complete,
+-				mode = args.mode;
+-
+-			function done() {
+-				if ( $.isFunction( complete ) ) {
+-					complete.call( elem[0] );
+-				}
+-				if ( $.isFunction( next ) ) {
+-					next();
+-				}
+-			}
+-
+-			// If the element already has the correct final state, delegate to
+-			// the core methods so the internal tracking of "olddisplay" works.
+-			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+-				elem[ mode ]();
+-				done();
+-			} else {
+-				effectMethod.call( elem[0], args, done );
+-			}
+-		}
+-
+-		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+-	},
+-
+-	show: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "show";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.show ),
+-
+-	hide: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "hide";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.hide ),
+-
+-	toggle: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "toggle";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.toggle ),
+-
+-	// helper functions
+-	cssUnit: function(key) {
+-		var style = this.css( key ),
+-			val = [];
+-
+-		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+-			if ( style.indexOf( unit ) > 0 ) {
+-				val = [ parseFloat( style ), unit ];
+-			}
+-		});
+-		return val;
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EASING ***********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+-
+-var baseEasings = {};
+-
+-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+-	baseEasings[ name ] = function( p ) {
+-		return Math.pow( p, i + 2 );
+-	};
+-});
+-
+-$.extend( baseEasings, {
+-	Sine: function ( p ) {
+-		return 1 - Math.cos( p * Math.PI / 2 );
+-	},
+-	Circ: function ( p ) {
+-		return 1 - Math.sqrt( 1 - p * p );
+-	},
+-	Elastic: function( p ) {
+-		return p === 0 || p === 1 ? p :
+-			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+-	},
+-	Back: function( p ) {
+-		return p * p * ( 3 * p - 2 );
+-	},
+-	Bounce: function ( p ) {
+-		var pow2,
+-			bounce = 4;
+-
+-		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+-		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+-	}
+-});
+-
+-$.each( baseEasings, function( name, easeIn ) {
+-	$.easing[ "easeIn" + name ] = easeIn;
+-	$.easing[ "easeOut" + name ] = function( p ) {
+-		return 1 - easeIn( 1 - p );
+-	};
+-	$.easing[ "easeInOut" + name ] = function( p ) {
+-		return p < 0.5 ?
+-			easeIn( p * 2 ) / 2 :
+-			1 - easeIn( p * -2 + 2 ) / 2;
+-	};
+-});
+-
+-})();
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-drop.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-drop.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-drop.js	(revision 15488)
+@@ -1,65 +0,0 @@
+-/*!
+- * jQuery UI Effects Drop 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/drop-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.drop = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+-		animation = {
+-			opacity: show ? 1 : 0
+-		},
+-		distance;
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+-
+-	if ( show ) {
+-		el
+-			.css( "opacity", 0 )
+-			.css( ref, motion === "pos" ? -distance : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( motion === "pos" ? "+=" : "-=" ) :
+-		( motion === "pos" ? "-=" : "+=" ) ) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.position.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.position.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.position.js	(revision 15488)
+@@ -1,497 +0,0 @@
+-/*!
+- * jQuery UI Position 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/position/
+- */
+-(function( $, undefined ) {
+-
+-$.ui = $.ui || {};
+-
+-var cachedScrollbarWidth,
+-	max = Math.max,
+-	abs = Math.abs,
+-	round = Math.round,
+-	rhorizontal = /left|center|right/,
+-	rvertical = /top|center|bottom/,
+-	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+-	rposition = /^\w+/,
+-	rpercent = /%$/,
+-	_position = $.fn.position;
+-
+-function getOffsets( offsets, width, height ) {
+-	return [
+-		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+-		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+-	];
+-}
+-
+-function parseCss( element, property ) {
+-	return parseInt( $.css( element, property ), 10 ) || 0;
+-}
+-
+-function getDimensions( elem ) {
+-	var raw = elem[0];
+-	if ( raw.nodeType === 9 ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: 0, left: 0 }
+-		};
+-	}
+-	if ( $.isWindow( raw ) ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+-		};
+-	}
+-	if ( raw.preventDefault ) {
+-		return {
+-			width: 0,
+-			height: 0,
+-			offset: { top: raw.pageY, left: raw.pageX }
+-		};
+-	}
+-	return {
+-		width: elem.outerWidth(),
+-		height: elem.outerHeight(),
+-		offset: elem.offset()
+-	};
+-}
+-
+-$.position = {
+-	scrollbarWidth: function() {
+-		if ( cachedScrollbarWidth !== undefined ) {
+-			return cachedScrollbarWidth;
+-		}
+-		var w1, w2,
+-			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+-			innerDiv = div.children()[0];
+-
+-		$( "body" ).append( div );
+-		w1 = innerDiv.offsetWidth;
+-		div.css( "overflow", "scroll" );
+-
+-		w2 = innerDiv.offsetWidth;
+-
+-		if ( w1 === w2 ) {
+-			w2 = div[0].clientWidth;
+-		}
+-
+-		div.remove();
+-
+-		return (cachedScrollbarWidth = w1 - w2);
+-	},
+-	getScrollInfo: function( within ) {
+-		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
+-			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+-			hasOverflowX = overflowX === "scroll" ||
+-				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+-			hasOverflowY = overflowY === "scroll" ||
+-				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+-		return {
+-			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+-			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+-		};
+-	},
+-	getWithinInfo: function( element ) {
+-		var withinElement = $( element || window ),
+-			isWindow = $.isWindow( withinElement[0] );
+-		return {
+-			element: withinElement,
+-			isWindow: isWindow,
+-			offset: withinElement.offset() || { left: 0, top: 0 },
+-			scrollLeft: withinElement.scrollLeft(),
+-			scrollTop: withinElement.scrollTop(),
+-			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+-			height: isWindow ? withinElement.height() : withinElement.outerHeight()
+-		};
+-	}
+-};
+-
+-$.fn.position = function( options ) {
+-	if ( !options || !options.of ) {
+-		return _position.apply( this, arguments );
+-	}
+-
+-	// make a copy, we don't want to modify arguments
+-	options = $.extend( {}, options );
+-
+-	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+-		target = $( options.of ),
+-		within = $.position.getWithinInfo( options.within ),
+-		scrollInfo = $.position.getScrollInfo( within ),
+-		collision = ( options.collision || "flip" ).split( " " ),
+-		offsets = {};
+-
+-	dimensions = getDimensions( target );
+-	if ( target[0].preventDefault ) {
+-		// force left top to allow flipping
+-		options.at = "left top";
+-	}
+-	targetWidth = dimensions.width;
+-	targetHeight = dimensions.height;
+-	targetOffset = dimensions.offset;
+-	// clone to reuse original targetOffset later
+-	basePosition = $.extend( {}, targetOffset );
+-
+-	// force my and at to have valid horizontal and vertical positions
+-	// if a value is missing or invalid, it will be converted to center
+-	$.each( [ "my", "at" ], function() {
+-		var pos = ( options[ this ] || "" ).split( " " ),
+-			horizontalOffset,
+-			verticalOffset;
+-
+-		if ( pos.length === 1) {
+-			pos = rhorizontal.test( pos[ 0 ] ) ?
+-				pos.concat( [ "center" ] ) :
+-				rvertical.test( pos[ 0 ] ) ?
+-					[ "center" ].concat( pos ) :
+-					[ "center", "center" ];
+-		}
+-		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+-		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+-
+-		// calculate offsets
+-		horizontalOffset = roffset.exec( pos[ 0 ] );
+-		verticalOffset = roffset.exec( pos[ 1 ] );
+-		offsets[ this ] = [
+-			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+-			verticalOffset ? verticalOffset[ 0 ] : 0
+-		];
+-
+-		// reduce to just the positions without the offsets
+-		options[ this ] = [
+-			rposition.exec( pos[ 0 ] )[ 0 ],
+-			rposition.exec( pos[ 1 ] )[ 0 ]
+-		];
+-	});
+-
+-	// normalize collision option
+-	if ( collision.length === 1 ) {
+-		collision[ 1 ] = collision[ 0 ];
+-	}
+-
+-	if ( options.at[ 0 ] === "right" ) {
+-		basePosition.left += targetWidth;
+-	} else if ( options.at[ 0 ] === "center" ) {
+-		basePosition.left += targetWidth / 2;
+-	}
+-
+-	if ( options.at[ 1 ] === "bottom" ) {
+-		basePosition.top += targetHeight;
+-	} else if ( options.at[ 1 ] === "center" ) {
+-		basePosition.top += targetHeight / 2;
+-	}
+-
+-	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+-	basePosition.left += atOffset[ 0 ];
+-	basePosition.top += atOffset[ 1 ];
+-
+-	return this.each(function() {
+-		var collisionPosition, using,
+-			elem = $( this ),
+-			elemWidth = elem.outerWidth(),
+-			elemHeight = elem.outerHeight(),
+-			marginLeft = parseCss( this, "marginLeft" ),
+-			marginTop = parseCss( this, "marginTop" ),
+-			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+-			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+-			position = $.extend( {}, basePosition ),
+-			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+-
+-		if ( options.my[ 0 ] === "right" ) {
+-			position.left -= elemWidth;
+-		} else if ( options.my[ 0 ] === "center" ) {
+-			position.left -= elemWidth / 2;
+-		}
+-
+-		if ( options.my[ 1 ] === "bottom" ) {
+-			position.top -= elemHeight;
+-		} else if ( options.my[ 1 ] === "center" ) {
+-			position.top -= elemHeight / 2;
+-		}
+-
+-		position.left += myOffset[ 0 ];
+-		position.top += myOffset[ 1 ];
+-
+-		// if the browser doesn't support fractions, then round for consistent results
+-		if ( !$.support.offsetFractions ) {
+-			position.left = round( position.left );
+-			position.top = round( position.top );
+-		}
+-
+-		collisionPosition = {
+-			marginLeft: marginLeft,
+-			marginTop: marginTop
+-		};
+-
+-		$.each( [ "left", "top" ], function( i, dir ) {
+-			if ( $.ui.position[ collision[ i ] ] ) {
+-				$.ui.position[ collision[ i ] ][ dir ]( position, {
+-					targetWidth: targetWidth,
+-					targetHeight: targetHeight,
+-					elemWidth: elemWidth,
+-					elemHeight: elemHeight,
+-					collisionPosition: collisionPosition,
+-					collisionWidth: collisionWidth,
+-					collisionHeight: collisionHeight,
+-					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+-					my: options.my,
+-					at: options.at,
+-					within: within,
+-					elem : elem
+-				});
+-			}
+-		});
+-
+-		if ( options.using ) {
+-			// adds feedback as second argument to using callback, if present
+-			using = function( props ) {
+-				var left = targetOffset.left - position.left,
+-					right = left + targetWidth - elemWidth,
+-					top = targetOffset.top - position.top,
+-					bottom = top + targetHeight - elemHeight,
+-					feedback = {
+-						target: {
+-							element: target,
+-							left: targetOffset.left,
+-							top: targetOffset.top,
+-							width: targetWidth,
+-							height: targetHeight
+-						},
+-						element: {
+-							element: elem,
+-							left: position.left,
+-							top: position.top,
+-							width: elemWidth,
+-							height: elemHeight
+-						},
+-						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+-						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+-					};
+-				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+-					feedback.horizontal = "center";
+-				}
+-				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+-					feedback.vertical = "middle";
+-				}
+-				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+-					feedback.important = "horizontal";
+-				} else {
+-					feedback.important = "vertical";
+-				}
+-				options.using.call( this, props, feedback );
+-			};
+-		}
+-
+-		elem.offset( $.extend( position, { using: using } ) );
+-	});
+-};
+-
+-$.ui.position = {
+-	fit: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+-				outerWidth = within.width,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = withinOffset - collisionPosLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+-				newOverRight;
+-
+-			// element is wider than within
+-			if ( data.collisionWidth > outerWidth ) {
+-				// element is initially over the left side of within
+-				if ( overLeft > 0 && overRight <= 0 ) {
+-					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+-					position.left += overLeft - newOverRight;
+-				// element is initially over right side of within
+-				} else if ( overRight > 0 && overLeft <= 0 ) {
+-					position.left = withinOffset;
+-				// element is initially over both left and right sides of within
+-				} else {
+-					if ( overLeft > overRight ) {
+-						position.left = withinOffset + outerWidth - data.collisionWidth;
+-					} else {
+-						position.left = withinOffset;
+-					}
+-				}
+-			// too far left -> align with left edge
+-			} else if ( overLeft > 0 ) {
+-				position.left += overLeft;
+-			// too far right -> align with right edge
+-			} else if ( overRight > 0 ) {
+-				position.left -= overRight;
+-			// adjust based on position and margin
+-			} else {
+-				position.left = max( position.left - collisionPosLeft, position.left );
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+-				outerHeight = data.within.height,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = withinOffset - collisionPosTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+-				newOverBottom;
+-
+-			// element is taller than within
+-			if ( data.collisionHeight > outerHeight ) {
+-				// element is initially over the top of within
+-				if ( overTop > 0 && overBottom <= 0 ) {
+-					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+-					position.top += overTop - newOverBottom;
+-				// element is initially over bottom of within
+-				} else if ( overBottom > 0 && overTop <= 0 ) {
+-					position.top = withinOffset;
+-				// element is initially over both top and bottom of within
+-				} else {
+-					if ( overTop > overBottom ) {
+-						position.top = withinOffset + outerHeight - data.collisionHeight;
+-					} else {
+-						position.top = withinOffset;
+-					}
+-				}
+-			// too far up -> align with top
+-			} else if ( overTop > 0 ) {
+-				position.top += overTop;
+-			// too far down -> align with bottom edge
+-			} else if ( overBottom > 0 ) {
+-				position.top -= overBottom;
+-			// adjust based on position and margin
+-			} else {
+-				position.top = max( position.top - collisionPosTop, position.top );
+-			}
+-		}
+-	},
+-	flip: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.left + within.scrollLeft,
+-				outerWidth = within.width,
+-				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = collisionPosLeft - offsetLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+-				myOffset = data.my[ 0 ] === "left" ?
+-					-data.elemWidth :
+-					data.my[ 0 ] === "right" ?
+-						data.elemWidth :
+-						0,
+-				atOffset = data.at[ 0 ] === "left" ?
+-					data.targetWidth :
+-					data.at[ 0 ] === "right" ?
+-						-data.targetWidth :
+-						0,
+-				offset = -2 * data.offset[ 0 ],
+-				newOverRight,
+-				newOverLeft;
+-
+-			if ( overLeft < 0 ) {
+-				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+-				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overRight > 0 ) {
+-				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+-				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.top + within.scrollTop,
+-				outerHeight = within.height,
+-				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = collisionPosTop - offsetTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+-				top = data.my[ 1 ] === "top",
+-				myOffset = top ?
+-					-data.elemHeight :
+-					data.my[ 1 ] === "bottom" ?
+-						data.elemHeight :
+-						0,
+-				atOffset = data.at[ 1 ] === "top" ?
+-					data.targetHeight :
+-					data.at[ 1 ] === "bottom" ?
+-						-data.targetHeight :
+-						0,
+-				offset = -2 * data.offset[ 1 ],
+-				newOverTop,
+-				newOverBottom;
+-			if ( overTop < 0 ) {
+-				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+-				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overBottom > 0 ) {
+-				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+-				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-		}
+-	},
+-	flipfit: {
+-		left: function() {
+-			$.ui.position.flip.left.apply( this, arguments );
+-			$.ui.position.fit.left.apply( this, arguments );
+-		},
+-		top: function() {
+-			$.ui.position.flip.top.apply( this, arguments );
+-			$.ui.position.fit.top.apply( this, arguments );
+-		}
+-	}
+-};
+-
+-// fraction support test
+-(function () {
+-	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+-		body = document.getElementsByTagName( "body" )[ 0 ],
+-		div = document.createElement( "div" );
+-
+-	//Create a "fake body" for testing based on method used in jQuery.support
+-	testElement = document.createElement( body ? "div" : "body" );
+-	testElementStyle = {
+-		visibility: "hidden",
+-		width: 0,
+-		height: 0,
+-		border: 0,
+-		margin: 0,
+-		background: "none"
+-	};
+-	if ( body ) {
+-		$.extend( testElementStyle, {
+-			position: "absolute",
+-			left: "-1000px",
+-			top: "-1000px"
+-		});
+-	}
+-	for ( i in testElementStyle ) {
+-		testElement.style[ i ] = testElementStyle[ i ];
+-	}
+-	testElement.appendChild( div );
+-	testElementParent = body || document.documentElement;
+-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+-
+-	div.style.cssText = "position: absolute; left: 10.7432222px;";
+-
+-	offsetLeft = $( div ).offset().left;
+-	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+-
+-	testElement.innerHTML = "";
+-	testElementParent.removeChild( testElement );
+-})();
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-bounce.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-bounce.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-bounce.js	(revision 15488)
+@@ -1,113 +0,0 @@
+-/*!
+- * jQuery UI Effects Bounce 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/bounce-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.bounce = function( o, done ) {
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-
+-		// defaults:
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		hide = mode === "hide",
+-		show = mode === "show",
+-		direction = o.direction || "up",
+-		distance = o.distance,
+-		times = o.times || 5,
+-
+-		// number of internal animations
+-		anims = times * 2 + ( show || hide ? 1 : 0 ),
+-		speed = o.duration / anims,
+-		easing = o.easing,
+-
+-		// utility:
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ),
+-		i,
+-		upAnim,
+-		downAnim,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	// Avoid touching opacity to prevent clearType and PNG issues in IE
+-	if ( show || hide ) {
+-		props.push( "opacity" );
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el ); // Create Wrapper
+-
+-	// default distance for the BIGGEST bounce is the outer Distance / 3
+-	if ( !distance ) {
+-		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+-	}
+-
+-	if ( show ) {
+-		downAnim = { opacity: 1 };
+-		downAnim[ ref ] = 0;
+-
+-		// if we are showing, force opacity 0 and set the initial position
+-		// then do the "first" animation
+-		el.css( "opacity", 0 )
+-			.css( ref, motion ? -distance * 2 : distance * 2 )
+-			.animate( downAnim, speed, easing );
+-	}
+-
+-	// start at the smallest distance if we are hiding
+-	if ( hide ) {
+-		distance = distance / Math.pow( 2, times - 1 );
+-	}
+-
+-	downAnim = {};
+-	downAnim[ ref ] = 0;
+-	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+-	for ( i = 0; i < times; i++ ) {
+-		upAnim = {};
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing )
+-			.animate( downAnim, speed, easing );
+-
+-		distance = hide ? distance * 2 : distance / 2;
+-	}
+-
+-	// Last Bounce when Hiding
+-	if ( hide ) {
+-		upAnim = { opacity: 0 };
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing );
+-	}
+-
+-	el.queue(function() {
+-		if ( hide ) {
+-			el.hide();
+-		}
+-		$.effects.restore( el, props );
+-		$.effects.removeWrapper( el );
+-		done();
+-	});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.draggable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.draggable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.draggable.js	(revision 15488)
+@@ -1,958 +0,0 @@
+-/*!
+- * jQuery UI Draggable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/draggable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-$.widget("ui.draggable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drag",
+-	options: {
+-		addClasses: true,
+-		appendTo: "parent",
+-		axis: false,
+-		connectToSortable: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		iframeFix: false,
+-		opacity: false,
+-		refreshPositions: false,
+-		revert: false,
+-		revertDuration: 500,
+-		scope: "default",
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		snap: false,
+-		snapMode: "both",
+-		snapTolerance: 20,
+-		stack: false,
+-		zIndex: false,
+-
+-		// callbacks
+-		drag: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
+-			this.element[0].style.position = "relative";
+-		}
+-		if (this.options.addClasses){
+-			this.element.addClass("ui-draggable");
+-		}
+-		if (this.options.disabled){
+-			this.element.addClass("ui-draggable-disabled");
+-		}
+-
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function(event) {
+-
+-		var o = this.options;
+-
+-		// among others, prevent a drag on a resizable-handle
+-		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+-			return false;
+-		}
+-
+-		//Quit if we're not on a valid handle
+-		this.handle = this._getHandle(event);
+-		if (!this.handle) {
+-			return false;
+-		}
+-
+-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+-			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
+-			.css({
+-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+-				position: "absolute", opacity: "0.001", zIndex: 1000
+-			})
+-			.css($(this).offset())
+-			.appendTo("body");
+-		});
+-
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options;
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		this.helper.addClass("ui-draggable-dragging");
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		//If ddmanager is used for droppables, set the global draggable
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Store the helper's css position
+-		this.cssPosition = this.helper.css( "position" );
+-		this.scrollParent = this.helper.scrollParent();
+-		this.offsetParent = this.helper.offsetParent();
+-		this.offsetParentCssPosition = this.offsetParent.css( "position" );
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.positionAbs = this.element.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		//Reset scroll cache
+-		this.offset.scroll = false;
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this.position = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Set a containment if given in the options
+-		this._setContainment();
+-
+-		//Trigger event + callbacks
+-		if(this._trigger("start", event) === false) {
+-			this._clear();
+-			return false;
+-		}
+-
+-		//Recache the helper size
+-		this._cacheHelperProportions();
+-
+-		//Prepare the droppable offsets
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-
+-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+-		if ( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStart(this, event);
+-		}
+-
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event, noPropagation) {
+-		// reset any necessary cached properties (see #5009)
+-		if ( this.offsetParentCssPosition === "fixed" ) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Call plugins and callbacks and use the resulting position if something is returned
+-		if (!noPropagation) {
+-			var ui = this._uiHash();
+-			if(this._trigger("drag", event, ui) === false) {
+-				this._mouseUp({});
+-				return false;
+-			}
+-			this.position = ui.position;
+-		}
+-
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		//If we are using droppables, inform the manager about the drop
+-		var that = this,
+-			dropped = false;
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			dropped = $.ui.ddmanager.drop(this, event);
+-		}
+-
+-		//if a drop comes from outside (a sortable)
+-		if(this.dropped) {
+-			dropped = this.dropped;
+-			this.dropped = false;
+-		}
+-
+-		//if the original element is no longer in the DOM don't bother to continue (see #8269)
+-		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
+-			return false;
+-		}
+-
+-		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+-				if(that._trigger("stop", event) !== false) {
+-					that._clear();
+-				}
+-			});
+-		} else {
+-			if(this._trigger("stop", event) !== false) {
+-				this._clear();
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseUp: function(event) {
+-		//Remove frame helpers
+-		$("div.ui-draggable-iframeFix").each(function() {
+-			this.parentNode.removeChild(this);
+-		});
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+-		if( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStop(this, event);
+-		}
+-
+-		return $.ui.mouse.prototype._mouseUp.call(this, event);
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.helper.is(".ui-draggable-dragging")) {
+-			this._mouseUp({});
+-		} else {
+-			this._clear();
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	_getHandle: function(event) {
+-		return this.options.handle ?
+-			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+-			true;
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+-
+-		if(!helper.parents("body").length) {
+-			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+-		}
+-
+-		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+-			helper.css("position", "absolute");
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-		//Get the offsetParent and cache its position
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		//This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		//Ugly IE fix
+-		if((this.offsetParent[0] === document.body) ||
+-			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.element.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.element.css("marginTop"),10) || 0),
+-			right: (parseInt(this.element.css("marginRight"),10) || 0),
+-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var over, c, ce,
+-			o = this.options;
+-
+-		if ( !o.containment ) {
+-			this.containment = null;
+-			return;
+-		}
+-
+-		if ( o.containment === "window" ) {
+-			this.containment = [
+-				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+-				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+-				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+-				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment === "document") {
+-			this.containment = [
+-				0,
+-				0,
+-				$( document ).width() - this.helperProportions.width - this.margins.left,
+-				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment.constructor === Array ) {
+-			this.containment = o.containment;
+-			return;
+-		}
+-
+-		if ( o.containment === "parent" ) {
+-			o.containment = this.helper[ 0 ].parentNode;
+-		}
+-
+-		c = $( o.containment );
+-		ce = c[ 0 ];
+-
+-		if( !ce ) {
+-			return;
+-		}
+-
+-		over = c.css( "overflow" ) !== "hidden";
+-
+-		this.containment = [
+-			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+-			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
+-			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
+-			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+-		];
+-		this.relative_container = c;
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var containment, co, top, left,
+-			o = this.options,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+-			pageX = event.pageX,
+-			pageY = event.pageY;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		// If we are not dragging yet, we won't check for options
+-		if ( this.originalPosition ) {
+-			if ( this.containment ) {
+-				if ( this.relative_container ){
+-					co = this.relative_container.offset();
+-					containment = [
+-						this.containment[ 0 ] + co.left,
+-						this.containment[ 1 ] + co.top,
+-						this.containment[ 2 ] + co.left,
+-						this.containment[ 3 ] + co.top
+-					];
+-				}
+-				else {
+-					containment = this.containment;
+-				}
+-
+-				if(event.pageX - this.offset.click.left < containment[0]) {
+-					pageX = containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < containment[1]) {
+-					pageY = containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > containment[2]) {
+-					pageX = containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > containment[3]) {
+-					pageY = containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+-				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+-				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+-				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																	// The absolute mouse position
+-				this.offset.click.top	-												// Click offset (relative to the element)
+-				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
+-			),
+-			left: (
+-				pageX -																	// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
+-			)
+-		};
+-
+-	},
+-
+-	_clear: function() {
+-		this.helper.removeClass("ui-draggable-dragging");
+-		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-		this.cancelHelperRemoval = false;
+-	},
+-
+-	// From now on bulk stuff - mainly helpers
+-
+-	_trigger: function(type, event, ui) {
+-		ui = ui || this._uiHash();
+-		$.ui.plugin.call(this, type, [event, ui]);
+-		//The absolute position has to be recalculated after plugins
+-		if(type === "drag") {
+-			this.positionAbs = this._convertPositionTo("absolute");
+-		}
+-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+-	},
+-
+-	plugins: {},
+-
+-	_uiHash: function() {
+-		return {
+-			helper: this.helper,
+-			position: this.position,
+-			originalPosition: this.originalPosition,
+-			offset: this.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.plugin.add("draggable", "connectToSortable", {
+-	start: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), o = inst.options,
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-		inst.sortables = [];
+-		$(o.connectToSortable).each(function() {
+-			var sortable = $.data(this, "ui-sortable");
+-			if (sortable && !sortable.options.disabled) {
+-				inst.sortables.push({
+-					instance: sortable,
+-					shouldRevert: sortable.options.revert
+-				});
+-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+-				sortable._trigger("activate", event, uiSortable);
+-			}
+-		});
+-
+-	},
+-	stop: function(event, ui) {
+-
+-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+-		var inst = $(this).data("ui-draggable"),
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-
+-		$.each(inst.sortables, function() {
+-			if(this.instance.isOver) {
+-
+-				this.instance.isOver = 0;
+-
+-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+-
+-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
+-				if(this.shouldRevert) {
+-					this.instance.options.revert = this.shouldRevert;
+-				}
+-
+-				//Trigger the stop of the sortable
+-				this.instance._mouseStop(event);
+-
+-				this.instance.options.helper = this.instance.options._helper;
+-
+-				//If the helper has been the original item, restore properties in the sortable
+-				if(inst.options.helper === "original") {
+-					this.instance.currentItem.css({ top: "auto", left: "auto" });
+-				}
+-
+-			} else {
+-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+-				this.instance._trigger("deactivate", event, uiSortable);
+-			}
+-
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), that = this;
+-
+-		$.each(inst.sortables, function() {
+-
+-			var innermostIntersecting = false,
+-				thisSortable = this;
+-
+-			//Copy over some variables to allow calling the sortable's native _intersectsWith
+-			this.instance.positionAbs = inst.positionAbs;
+-			this.instance.helperProportions = inst.helperProportions;
+-			this.instance.offset.click = inst.offset.click;
+-
+-			if(this.instance._intersectsWith(this.instance.containerCache)) {
+-				innermostIntersecting = true;
+-				$.each(inst.sortables, function () {
+-					this.instance.positionAbs = inst.positionAbs;
+-					this.instance.helperProportions = inst.helperProportions;
+-					this.instance.offset.click = inst.offset.click;
+-					if (this !== thisSortable &&
+-						this.instance._intersectsWith(this.instance.containerCache) &&
+-						$.contains(thisSortable.instance.element[0], this.instance.element[0])
+-					) {
+-						innermostIntersecting = false;
+-					}
+-					return innermostIntersecting;
+-				});
+-			}
+-
+-
+-			if(innermostIntersecting) {
+-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+-				if(!this.instance.isOver) {
+-
+-					this.instance.isOver = 1;
+-					//Now we fake the start of dragging for the sortable instance,
+-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+-					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
+-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+-					this.instance.options.helper = function() { return ui.helper[0]; };
+-
+-					event.target = this.instance.currentItem[0];
+-					this.instance._mouseCapture(event, true);
+-					this.instance._mouseStart(event, true, true);
+-
+-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+-					this.instance.offset.click.top = inst.offset.click.top;
+-					this.instance.offset.click.left = inst.offset.click.left;
+-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+-
+-					inst._trigger("toSortable", event);
+-					inst.dropped = this.instance.element; //draggable revert needs that
+-					//hack so receive/update callbacks work (mostly)
+-					inst.currentItem = inst.element;
+-					this.instance.fromOutside = inst;
+-
+-				}
+-
+-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+-				if(this.instance.currentItem) {
+-					this.instance._mouseDrag(event);
+-				}
+-
+-			} else {
+-
+-				//If it doesn't intersect with the sortable, and it intersected before,
+-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+-				if(this.instance.isOver) {
+-
+-					this.instance.isOver = 0;
+-					this.instance.cancelHelperRemoval = true;
+-
+-					//Prevent reverting on this forced stop
+-					this.instance.options.revert = false;
+-
+-					// The out event needs to be triggered independently
+-					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+-
+-					this.instance._mouseStop(event, true);
+-					this.instance.options.helper = this.instance.options._helper;
+-
+-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+-					this.instance.currentItem.remove();
+-					if(this.instance.placeholder) {
+-						this.instance.placeholder.remove();
+-					}
+-
+-					inst._trigger("fromSortable", event);
+-					inst.dropped = false; //draggable revert needs that
+-				}
+-
+-			}
+-
+-		});
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "cursor", {
+-	start: function() {
+-		var t = $("body"), o = $(this).data("ui-draggable").options;
+-		if (t.css("cursor")) {
+-			o._cursor = t.css("cursor");
+-		}
+-		t.css("cursor", o.cursor);
+-	},
+-	stop: function() {
+-		var o = $(this).data("ui-draggable").options;
+-		if (o._cursor) {
+-			$("body").css("cursor", o._cursor);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "opacity", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("opacity")) {
+-			o._opacity = t.css("opacity");
+-		}
+-		t.css("opacity", o.opacity);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._opacity) {
+-			$(ui.helper).css("opacity", o._opacity);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "scroll", {
+-	start: function() {
+-		var i = $(this).data("ui-draggable");
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-			i.overflowOffset = i.scrollParent.offset();
+-		}
+-	},
+-	drag: function( event ) {
+-
+-		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+-
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-			}
+-
+-		} else {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-			}
+-
+-		}
+-
+-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(i, event);
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "snap", {
+-	start: function() {
+-
+-		var i = $(this).data("ui-draggable"),
+-			o = i.options;
+-
+-		i.snapElements = [];
+-
+-		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+-			var $t = $(this),
+-				$o = $t.offset();
+-			if(this !== i.element[0]) {
+-				i.snapElements.push({
+-					item: this,
+-					width: $t.outerWidth(), height: $t.outerHeight(),
+-					top: $o.top, left: $o.left
+-				});
+-			}
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var ts, bs, ls, rs, l, r, t, b, i, first,
+-			inst = $(this).data("ui-draggable"),
+-			o = inst.options,
+-			d = o.snapTolerance,
+-			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+-
+-		for (i = inst.snapElements.length - 1; i >= 0; i--){
+-
+-			l = inst.snapElements[i].left;
+-			r = l + inst.snapElements[i].width;
+-			t = inst.snapElements[i].top;
+-			b = t + inst.snapElements[i].height;
+-
+-			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+-				if(inst.snapElements[i].snapping) {
+-					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-				}
+-				inst.snapElements[i].snapping = false;
+-				continue;
+-			}
+-
+-			if(o.snapMode !== "inner") {
+-				ts = Math.abs(t - y2) <= d;
+-				bs = Math.abs(b - y1) <= d;
+-				ls = Math.abs(l - x2) <= d;
+-				rs = Math.abs(r - x1) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+-				}
+-			}
+-
+-			first = (ts || bs || ls || rs);
+-
+-			if(o.snapMode !== "outer") {
+-				ts = Math.abs(t - y1) <= d;
+-				bs = Math.abs(b - y2) <= d;
+-				ls = Math.abs(l - x1) <= d;
+-				rs = Math.abs(r - x2) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-			}
+-
+-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-			}
+-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+-
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "stack", {
+-	start: function() {
+-		var min,
+-			o = this.data("ui-draggable").options,
+-			group = $.makeArray($(o.stack)).sort(function(a,b) {
+-				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+-			});
+-
+-		if (!group.length) { return; }
+-
+-		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+-		$(group).each(function(i) {
+-			$(this).css("zIndex", min + i);
+-		});
+-		this.css("zIndex", (min + group.length));
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "zIndex", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("zIndex")) {
+-			o._zIndex = t.css("zIndex");
+-		}
+-		t.css("zIndex", o.zIndex);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._zIndex) {
+-			$(ui.helper).css("zIndex", o._zIndex);
+-		}
+-	}
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.droppable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.droppable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.droppable.js	(revision 15488)
+@@ -1,372 +0,0 @@
+-/*!
+- * jQuery UI Droppable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/droppable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.draggable.js
+- */
+-(function( $, undefined ) {
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-$.widget("ui.droppable", {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drop",
+-	options: {
+-		accept: "*",
+-		activeClass: false,
+-		addClasses: true,
+-		greedy: false,
+-		hoverClass: false,
+-		scope: "default",
+-		tolerance: "intersect",
+-
+-		// callbacks
+-		activate: null,
+-		deactivate: null,
+-		drop: null,
+-		out: null,
+-		over: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options,
+-			accept = o.accept;
+-
+-		this.isover = false;
+-		this.isout = true;
+-
+-		this.accept = $.isFunction(accept) ? accept : function(d) {
+-			return d.is(accept);
+-		};
+-
+-		//Store the droppable's proportions
+-		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+-
+-		// Add the reference and positions to the manager
+-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+-		$.ui.ddmanager.droppables[o.scope].push(this);
+-
+-		(o.addClasses && this.element.addClass("ui-droppable"));
+-
+-	},
+-
+-	_destroy: function() {
+-		var i = 0,
+-			drop = $.ui.ddmanager.droppables[this.options.scope];
+-
+-		for ( ; i < drop.length; i++ ) {
+-			if ( drop[i] === this ) {
+-				drop.splice(i, 1);
+-			}
+-		}
+-
+-		this.element.removeClass("ui-droppable ui-droppable-disabled");
+-	},
+-
+-	_setOption: function(key, value) {
+-
+-		if(key === "accept") {
+-			this.accept = $.isFunction(value) ? value : function(d) {
+-				return d.is(value);
+-			};
+-		}
+-		$.Widget.prototype._setOption.apply(this, arguments);
+-	},
+-
+-	_activate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.addClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("activate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_deactivate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.removeClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("deactivate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_over: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.addClass(this.options.hoverClass);
+-			}
+-			this._trigger("over", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_out: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("out", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_drop: function(event,custom) {
+-
+-		var draggable = custom || $.ui.ddmanager.current,
+-			childrenIntersection = false;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return false;
+-		}
+-
+-		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
+-			var inst = $.data(this, "ui-droppable");
+-			if(
+-				inst.options.greedy &&
+-				!inst.options.disabled &&
+-				inst.options.scope === draggable.options.scope &&
+-				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
+-				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+-			) { childrenIntersection = true; return false; }
+-		});
+-		if(childrenIntersection) {
+-			return false;
+-		}
+-
+-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.activeClass) {
+-				this.element.removeClass(this.options.activeClass);
+-			}
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("drop", event, this.ui(draggable));
+-			return this.element;
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	ui: function(c) {
+-		return {
+-			draggable: (c.currentItem || c.element),
+-			helper: c.helper,
+-			position: c.position,
+-			offset: c.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.intersect = function(draggable, droppable, toleranceMode) {
+-
+-	if (!droppable.offset) {
+-		return false;
+-	}
+-
+-	var draggableLeft, draggableTop,
+-		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+-		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
+-		l = droppable.offset.left, r = l + droppable.proportions.width,
+-		t = droppable.offset.top, b = t + droppable.proportions.height;
+-
+-	switch (toleranceMode) {
+-		case "fit":
+-			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+-		case "intersect":
+-			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
+-				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
+-				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+-		case "pointer":
+-			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
+-			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
+-			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
+-		case "touch":
+-			return (
+-				(y1 >= t && y1 <= b) ||	// Top edge touching
+-				(y2 >= t && y2 <= b) ||	// Bottom edge touching
+-				(y1 < t && y2 > b)		// Surrounded vertically
+-			) && (
+-				(x1 >= l && x1 <= r) ||	// Left edge touching
+-				(x2 >= l && x2 <= r) ||	// Right edge touching
+-				(x1 < l && x2 > r)		// Surrounded horizontally
+-			);
+-		default:
+-			return false;
+-		}
+-
+-};
+-
+-/*
+-	This manager tracks offsets of draggables and droppables
+-*/
+-$.ui.ddmanager = {
+-	current: null,
+-	droppables: { "default": [] },
+-	prepareOffsets: function(t, event) {
+-
+-		var i, j,
+-			m = $.ui.ddmanager.droppables[t.options.scope] || [],
+-			type = event ? event.type : null, // workaround for #2317
+-			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+-
+-		droppablesLoop: for (i = 0; i < m.length; i++) {
+-
+-			//No disabled and non-accepted
+-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+-				continue;
+-			}
+-
+-			// Filter out elements in the current dragged item
+-			for (j=0; j < list.length; j++) {
+-				if(list[j] === m[i].element[0]) {
+-					m[i].proportions.height = 0;
+-					continue droppablesLoop;
+-				}
+-			}
+-
+-			m[i].visible = m[i].element.css("display") !== "none";
+-			if(!m[i].visible) {
+-				continue;
+-			}
+-
+-			//Activate the droppable if used directly from draggables
+-			if(type === "mousedown") {
+-				m[i]._activate.call(m[i], event);
+-			}
+-
+-			m[i].offset = m[i].element.offset();
+-			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+-
+-		}
+-
+-	},
+-	drop: function(draggable, event) {
+-
+-		var dropped = false;
+-		// Create a copy of the droppables in case the list changes during the drop (#9116)
+-		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
+-
+-			if(!this.options) {
+-				return;
+-			}
+-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
+-				dropped = this._drop.call(this, event) || dropped;
+-			}
+-
+-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-				this.isout = true;
+-				this.isover = false;
+-				this._deactivate.call(this, event);
+-			}
+-
+-		});
+-		return dropped;
+-
+-	},
+-	dragStart: function( draggable, event ) {
+-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+-			if( !draggable.options.refreshPositions ) {
+-				$.ui.ddmanager.prepareOffsets( draggable, event );
+-			}
+-		});
+-	},
+-	drag: function(draggable, event) {
+-
+-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+-		if(draggable.options.refreshPositions) {
+-			$.ui.ddmanager.prepareOffsets(draggable, event);
+-		}
+-
+-		//Run through all droppables and check their positions based on specific tolerance options
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(this.options.disabled || this.greedyChild || !this.visible) {
+-				return;
+-			}
+-
+-			var parentInstance, scope, parent,
+-				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
+-				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+-			if(!c) {
+-				return;
+-			}
+-
+-			if (this.options.greedy) {
+-				// find droppable parents with same scope
+-				scope = this.options.scope;
+-				parent = this.element.parents(":data(ui-droppable)").filter(function () {
+-					return $.data(this, "ui-droppable").options.scope === scope;
+-				});
+-
+-				if (parent.length) {
+-					parentInstance = $.data(parent[0], "ui-droppable");
+-					parentInstance.greedyChild = (c === "isover");
+-				}
+-			}
+-
+-			// we just moved into a greedy child
+-			if (parentInstance && c === "isover") {
+-				parentInstance.isover = false;
+-				parentInstance.isout = true;
+-				parentInstance._out.call(parentInstance, event);
+-			}
+-
+-			this[c] = true;
+-			this[c === "isout" ? "isover" : "isout"] = false;
+-			this[c === "isover" ? "_over" : "_out"].call(this, event);
+-
+-			// we just moved out of a greedy child
+-			if (parentInstance && c === "isout") {
+-				parentInstance.isout = false;
+-				parentInstance.isover = true;
+-				parentInstance._over.call(parentInstance, event);
+-			}
+-		});
+-
+-	},
+-	dragStop: function( draggable, event ) {
+-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+-		if( !draggable.options.refreshPositions ) {
+-			$.ui.ddmanager.prepareOffsets( draggable, event );
+-		}
+-	}
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery-ui.custom.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery-ui.custom.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery-ui.custom.js	(revision 15488)
+@@ -1,14971 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	runiqueId = /^ui-id-\d+$/;
+-
+-// $.ui might exist from components with no dependencies, e.g., $.ui.position
+-$.ui = $.ui || {};
+-
+-$.extend( $.ui, {
+-	version: "1.10.3",
+-
+-	keyCode: {
+-		BACKSPACE: 8,
+-		COMMA: 188,
+-		DELETE: 46,
+-		DOWN: 40,
+-		END: 35,
+-		ENTER: 13,
+-		ESCAPE: 27,
+-		HOME: 36,
+-		LEFT: 37,
+-		NUMPAD_ADD: 107,
+-		NUMPAD_DECIMAL: 110,
+-		NUMPAD_DIVIDE: 111,
+-		NUMPAD_ENTER: 108,
+-		NUMPAD_MULTIPLY: 106,
+-		NUMPAD_SUBTRACT: 109,
+-		PAGE_DOWN: 34,
+-		PAGE_UP: 33,
+-		PERIOD: 190,
+-		RIGHT: 39,
+-		SPACE: 32,
+-		TAB: 9,
+-		UP: 38
+-	}
+-});
+-
+-// plugins
+-$.fn.extend({
+-	focus: (function( orig ) {
+-		return function( delay, fn ) {
+-			return typeof delay === "number" ?
+-				this.each(function() {
+-					var elem = this;
+-					setTimeout(function() {
+-						$( elem ).focus();
+-						if ( fn ) {
+-							fn.call( elem );
+-						}
+-					}, delay );
+-				}) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.focus ),
+-
+-	scrollParent: function() {
+-		var scrollParent;
+-		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		} else {
+-			scrollParent = this.parents().filter(function() {
+-				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+-			}).eq(0);
+-		}
+-
+-		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+-	},
+-
+-	zIndex: function( zIndex ) {
+-		if ( zIndex !== undefined ) {
+-			return this.css( "zIndex", zIndex );
+-		}
+-
+-		if ( this.length ) {
+-			var elem = $( this[ 0 ] ), position, value;
+-			while ( elem.length && elem[ 0 ] !== document ) {
+-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+-				// This makes behavior of this function consistent across browsers
+-				// WebKit always returns auto if the element is positioned
+-				position = elem.css( "position" );
+-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+-					// IE returns 0 when zIndex is not specified
+-					// other browsers return a string
+-					// we ignore the case of nested elements with an explicit value of 0
+-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+-					value = parseInt( elem.css( "zIndex" ), 10 );
+-					if ( !isNaN( value ) && value !== 0 ) {
+-						return value;
+-					}
+-				}
+-				elem = elem.parent();
+-			}
+-		}
+-
+-		return 0;
+-	},
+-
+-	uniqueId: function() {
+-		return this.each(function() {
+-			if ( !this.id ) {
+-				this.id = "ui-id-" + (++uuid);
+-			}
+-		});
+-	},
+-
+-	removeUniqueId: function() {
+-		return this.each(function() {
+-			if ( runiqueId.test( this.id ) ) {
+-				$( this ).removeAttr( "id" );
+-			}
+-		});
+-	}
+-});
+-
+-// selectors
+-function focusable( element, isTabIndexNotNaN ) {
+-	var map, mapName, img,
+-		nodeName = element.nodeName.toLowerCase();
+-	if ( "area" === nodeName ) {
+-		map = element.parentNode;
+-		mapName = map.name;
+-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+-			return false;
+-		}
+-		img = $( "img[usemap=#" + mapName + "]" )[0];
+-		return !!img && visible( img );
+-	}
+-	return ( /input|select|textarea|button|object/.test( nodeName ) ?
+-		!element.disabled :
+-		"a" === nodeName ?
+-			element.href || isTabIndexNotNaN :
+-			isTabIndexNotNaN) &&
+-		// the element and all of its ancestors must be visible
+-		visible( element );
+-}
+-
+-function visible( element ) {
+-	return $.expr.filters.visible( element ) &&
+-		!$( element ).parents().addBack().filter(function() {
+-			return $.css( this, "visibility" ) === "hidden";
+-		}).length;
+-}
+-
+-$.extend( $.expr[ ":" ], {
+-	data: $.expr.createPseudo ?
+-		$.expr.createPseudo(function( dataName ) {
+-			return function( elem ) {
+-				return !!$.data( elem, dataName );
+-			};
+-		}) :
+-		// support: jQuery <1.8
+-		function( elem, i, match ) {
+-			return !!$.data( elem, match[ 3 ] );
+-		},
+-
+-	focusable: function( element ) {
+-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+-	},
+-
+-	tabbable: function( element ) {
+-		var tabIndex = $.attr( element, "tabindex" ),
+-			isTabIndexNaN = isNaN( tabIndex );
+-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+-	}
+-});
+-
+-// support: jQuery <1.8
+-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+-	$.each( [ "Width", "Height" ], function( i, name ) {
+-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+-			type = name.toLowerCase(),
+-			orig = {
+-				innerWidth: $.fn.innerWidth,
+-				innerHeight: $.fn.innerHeight,
+-				outerWidth: $.fn.outerWidth,
+-				outerHeight: $.fn.outerHeight
+-			};
+-
+-		function reduce( elem, size, border, margin ) {
+-			$.each( side, function() {
+-				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+-				if ( border ) {
+-					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+-				}
+-				if ( margin ) {
+-					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+-				}
+-			});
+-			return size;
+-		}
+-
+-		$.fn[ "inner" + name ] = function( size ) {
+-			if ( size === undefined ) {
+-				return orig[ "inner" + name ].call( this );
+-			}
+-
+-			return this.each(function() {
+-				$( this ).css( type, reduce( this, size ) + "px" );
+-			});
+-		};
+-
+-		$.fn[ "outer" + name] = function( size, margin ) {
+-			if ( typeof size !== "number" ) {
+-				return orig[ "outer" + name ].call( this, size );
+-			}
+-
+-			return this.each(function() {
+-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+-			});
+-		};
+-	});
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+-	$.fn.removeData = (function( removeData ) {
+-		return function( key ) {
+-			if ( arguments.length ) {
+-				return removeData.call( this, $.camelCase( key ) );
+-			} else {
+-				return removeData.call( this );
+-			}
+-		};
+-	})( $.fn.removeData );
+-}
+-
+-
+-
+-
+-
+-// deprecated
+-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+-
+-$.support.selectstart = "onselectstart" in document.createElement( "div" );
+-$.fn.extend({
+-	disableSelection: function() {
+-		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+-			".ui-disableSelection", function( event ) {
+-				event.preventDefault();
+-			});
+-	},
+-
+-	enableSelection: function() {
+-		return this.unbind( ".ui-disableSelection" );
+-	}
+-});
+-
+-$.extend( $.ui, {
+-	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+-	plugin: {
+-		add: function( module, option, set ) {
+-			var i,
+-				proto = $.ui[ module ].prototype;
+-			for ( i in set ) {
+-				proto.plugins[ i ] = proto.plugins[ i ] || [];
+-				proto.plugins[ i ].push( [ option, set[ i ] ] );
+-			}
+-		},
+-		call: function( instance, name, args ) {
+-			var i,
+-				set = instance.plugins[ name ];
+-			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
+-				return;
+-			}
+-
+-			for ( i = 0; i < set.length; i++ ) {
+-				if ( instance.options[ set[ i ][ 0 ] ] ) {
+-					set[ i ][ 1 ].apply( instance.element, args );
+-				}
+-			}
+-		}
+-	},
+-
+-	// only used by resizable
+-	hasScroll: function( el, a ) {
+-
+-		//If overflow is hidden, the element might have extra content, but the user wants to hide it
+-		if ( $( el ).css( "overflow" ) === "hidden") {
+-			return false;
+-		}
+-
+-		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+-			has = false;
+-
+-		if ( el[ scroll ] > 0 ) {
+-			return true;
+-		}
+-
+-		// TODO: determine which cases actually cause this to happen
+-		// if the element doesn't have the scroll set, see if it's possible to
+-		// set the scroll
+-		el[ scroll ] = 1;
+-		has = ( el[ scroll ] > 0 );
+-		el[ scroll ] = 0;
+-		return has;
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-var uuid = 0,
+-	slice = Array.prototype.slice,
+-	_cleanData = $.cleanData;
+-$.cleanData = function( elems ) {
+-	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+-		try {
+-			$( elem ).triggerHandler( "remove" );
+-		// http://bugs.jquery.com/ticket/8235
+-		} catch( e ) {}
+-	}
+-	_cleanData( elems );
+-};
+-
+-$.widget = function( name, base, prototype ) {
+-	var fullName, existingConstructor, constructor, basePrototype,
+-		// proxiedPrototype allows the provided prototype to remain unmodified
+-		// so that it can be used as a mixin for multiple widgets (#8876)
+-		proxiedPrototype = {},
+-		namespace = name.split( "." )[ 0 ];
+-
+-	name = name.split( "." )[ 1 ];
+-	fullName = namespace + "-" + name;
+-
+-	if ( !prototype ) {
+-		prototype = base;
+-		base = $.Widget;
+-	}
+-
+-	// create selector for plugin
+-	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+-		return !!$.data( elem, fullName );
+-	};
+-
+-	$[ namespace ] = $[ namespace ] || {};
+-	existingConstructor = $[ namespace ][ name ];
+-	constructor = $[ namespace ][ name ] = function( options, element ) {
+-		// allow instantiation without "new" keyword
+-		if ( !this._createWidget ) {
+-			return new constructor( options, element );
+-		}
+-
+-		// allow instantiation without initializing for simple inheritance
+-		// must use "new" keyword (the code above always passes args)
+-		if ( arguments.length ) {
+-			this._createWidget( options, element );
+-		}
+-	};
+-	// extend with the existing constructor to carry over any static properties
+-	$.extend( constructor, existingConstructor, {
+-		version: prototype.version,
+-		// copy the object used to create the prototype in case we need to
+-		// redefine the widget later
+-		_proto: $.extend( {}, prototype ),
+-		// track widgets that inherit from this widget in case this widget is
+-		// redefined after a widget inherits from it
+-		_childConstructors: []
+-	});
+-
+-	basePrototype = new base();
+-	// we need to make the options hash a property directly on the new instance
+-	// otherwise we'll modify the options hash on the prototype that we're
+-	// inheriting from
+-	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+-	$.each( prototype, function( prop, value ) {
+-		if ( !$.isFunction( value ) ) {
+-			proxiedPrototype[ prop ] = value;
+-			return;
+-		}
+-		proxiedPrototype[ prop ] = (function() {
+-			var _super = function() {
+-					return base.prototype[ prop ].apply( this, arguments );
+-				},
+-				_superApply = function( args ) {
+-					return base.prototype[ prop ].apply( this, args );
+-				};
+-			return function() {
+-				var __super = this._super,
+-					__superApply = this._superApply,
+-					returnValue;
+-
+-				this._super = _super;
+-				this._superApply = _superApply;
+-
+-				returnValue = value.apply( this, arguments );
+-
+-				this._super = __super;
+-				this._superApply = __superApply;
+-
+-				return returnValue;
+-			};
+-		})();
+-	});
+-	constructor.prototype = $.widget.extend( basePrototype, {
+-		// TODO: remove support for widgetEventPrefix
+-		// always use the name + a colon as the prefix, e.g., draggable:start
+-		// don't prefix for widgets that aren't DOM-based
+-		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+-	}, proxiedPrototype, {
+-		constructor: constructor,
+-		namespace: namespace,
+-		widgetName: name,
+-		widgetFullName: fullName
+-	});
+-
+-	// If this widget is being redefined then we need to find all widgets that
+-	// are inheriting from it and redefine all of them so that they inherit from
+-	// the new version of this widget. We're essentially trying to replace one
+-	// level in the prototype chain.
+-	if ( existingConstructor ) {
+-		$.each( existingConstructor._childConstructors, function( i, child ) {
+-			var childPrototype = child.prototype;
+-
+-			// redefine the child widget using the same prototype that was
+-			// originally used, but inherit from the new version of the base
+-			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+-		});
+-		// remove the list of existing child constructors from the old constructor
+-		// so the old child constructors can be garbage collected
+-		delete existingConstructor._childConstructors;
+-	} else {
+-		base._childConstructors.push( constructor );
+-	}
+-
+-	$.widget.bridge( name, constructor );
+-};
+-
+-$.widget.extend = function( target ) {
+-	var input = slice.call( arguments, 1 ),
+-		inputIndex = 0,
+-		inputLength = input.length,
+-		key,
+-		value;
+-	for ( ; inputIndex < inputLength; inputIndex++ ) {
+-		for ( key in input[ inputIndex ] ) {
+-			value = input[ inputIndex ][ key ];
+-			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+-				// Clone objects
+-				if ( $.isPlainObject( value ) ) {
+-					target[ key ] = $.isPlainObject( target[ key ] ) ?
+-						$.widget.extend( {}, target[ key ], value ) :
+-						// Don't extend strings, arrays, etc. with objects
+-						$.widget.extend( {}, value );
+-				// Copy everything else by reference
+-				} else {
+-					target[ key ] = value;
+-				}
+-			}
+-		}
+-	}
+-	return target;
+-};
+-
+-$.widget.bridge = function( name, object ) {
+-	var fullName = object.prototype.widgetFullName || name;
+-	$.fn[ name ] = function( options ) {
+-		var isMethodCall = typeof options === "string",
+-			args = slice.call( arguments, 1 ),
+-			returnValue = this;
+-
+-		// allow multiple hashes to be passed on init
+-		options = !isMethodCall && args.length ?
+-			$.widget.extend.apply( null, [ options ].concat(args) ) :
+-			options;
+-
+-		if ( isMethodCall ) {
+-			this.each(function() {
+-				var methodValue,
+-					instance = $.data( this, fullName );
+-				if ( !instance ) {
+-					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+-						"attempted to call method '" + options + "'" );
+-				}
+-				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+-					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+-				}
+-				methodValue = instance[ options ].apply( instance, args );
+-				if ( methodValue !== instance && methodValue !== undefined ) {
+-					returnValue = methodValue && methodValue.jquery ?
+-						returnValue.pushStack( methodValue.get() ) :
+-						methodValue;
+-					return false;
+-				}
+-			});
+-		} else {
+-			this.each(function() {
+-				var instance = $.data( this, fullName );
+-				if ( instance ) {
+-					instance.option( options || {} )._init();
+-				} else {
+-					$.data( this, fullName, new object( options, this ) );
+-				}
+-			});
+-		}
+-
+-		return returnValue;
+-	};
+-};
+-
+-$.Widget = function( /* options, element */ ) {};
+-$.Widget._childConstructors = [];
+-
+-$.Widget.prototype = {
+-	widgetName: "widget",
+-	widgetEventPrefix: "",
+-	defaultElement: "<div>",
+-	options: {
+-		disabled: false,
+-
+-		// callbacks
+-		create: null
+-	},
+-	_createWidget: function( options, element ) {
+-		element = $( element || this.defaultElement || this )[ 0 ];
+-		this.element = $( element );
+-		this.uuid = uuid++;
+-		this.eventNamespace = "." + this.widgetName + this.uuid;
+-		this.options = $.widget.extend( {},
+-			this.options,
+-			this._getCreateOptions(),
+-			options );
+-
+-		this.bindings = $();
+-		this.hoverable = $();
+-		this.focusable = $();
+-
+-		if ( element !== this ) {
+-			$.data( element, this.widgetFullName, this );
+-			this._on( true, this.element, {
+-				remove: function( event ) {
+-					if ( event.target === element ) {
+-						this.destroy();
+-					}
+-				}
+-			});
+-			this.document = $( element.style ?
+-				// element within the document
+-				element.ownerDocument :
+-				// element is window or document
+-				element.document || element );
+-			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+-		}
+-
+-		this._create();
+-		this._trigger( "create", null, this._getCreateEventData() );
+-		this._init();
+-	},
+-	_getCreateOptions: $.noop,
+-	_getCreateEventData: $.noop,
+-	_create: $.noop,
+-	_init: $.noop,
+-
+-	destroy: function() {
+-		this._destroy();
+-		// we can probably remove the unbind calls in 2.0
+-		// all event bindings should go through this._on()
+-		this.element
+-			.unbind( this.eventNamespace )
+-			// 1.9 BC for #7810
+-			// TODO remove dual storage
+-			.removeData( this.widgetName )
+-			.removeData( this.widgetFullName )
+-			// support: jquery <1.6.3
+-			// http://bugs.jquery.com/ticket/9413
+-			.removeData( $.camelCase( this.widgetFullName ) );
+-		this.widget()
+-			.unbind( this.eventNamespace )
+-			.removeAttr( "aria-disabled" )
+-			.removeClass(
+-				this.widgetFullName + "-disabled " +
+-				"ui-state-disabled" );
+-
+-		// clean up events and states
+-		this.bindings.unbind( this.eventNamespace );
+-		this.hoverable.removeClass( "ui-state-hover" );
+-		this.focusable.removeClass( "ui-state-focus" );
+-	},
+-	_destroy: $.noop,
+-
+-	widget: function() {
+-		return this.element;
+-	},
+-
+-	option: function( key, value ) {
+-		var options = key,
+-			parts,
+-			curOption,
+-			i;
+-
+-		if ( arguments.length === 0 ) {
+-			// don't return a reference to the internal hash
+-			return $.widget.extend( {}, this.options );
+-		}
+-
+-		if ( typeof key === "string" ) {
+-			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+-			options = {};
+-			parts = key.split( "." );
+-			key = parts.shift();
+-			if ( parts.length ) {
+-				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+-				for ( i = 0; i < parts.length - 1; i++ ) {
+-					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+-					curOption = curOption[ parts[ i ] ];
+-				}
+-				key = parts.pop();
+-				if ( value === undefined ) {
+-					return curOption[ key ] === undefined ? null : curOption[ key ];
+-				}
+-				curOption[ key ] = value;
+-			} else {
+-				if ( value === undefined ) {
+-					return this.options[ key ] === undefined ? null : this.options[ key ];
+-				}
+-				options[ key ] = value;
+-			}
+-		}
+-
+-		this._setOptions( options );
+-
+-		return this;
+-	},
+-	_setOptions: function( options ) {
+-		var key;
+-
+-		for ( key in options ) {
+-			this._setOption( key, options[ key ] );
+-		}
+-
+-		return this;
+-	},
+-	_setOption: function( key, value ) {
+-		this.options[ key ] = value;
+-
+-		if ( key === "disabled" ) {
+-			this.widget()
+-				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+-				.attr( "aria-disabled", value );
+-			this.hoverable.removeClass( "ui-state-hover" );
+-			this.focusable.removeClass( "ui-state-focus" );
+-		}
+-
+-		return this;
+-	},
+-
+-	enable: function() {
+-		return this._setOption( "disabled", false );
+-	},
+-	disable: function() {
+-		return this._setOption( "disabled", true );
+-	},
+-
+-	_on: function( suppressDisabledCheck, element, handlers ) {
+-		var delegateElement,
+-			instance = this;
+-
+-		// no suppressDisabledCheck flag, shuffle arguments
+-		if ( typeof suppressDisabledCheck !== "boolean" ) {
+-			handlers = element;
+-			element = suppressDisabledCheck;
+-			suppressDisabledCheck = false;
+-		}
+-
+-		// no element argument, shuffle and use this.element
+-		if ( !handlers ) {
+-			handlers = element;
+-			element = this.element;
+-			delegateElement = this.widget();
+-		} else {
+-			// accept selectors, DOM elements
+-			element = delegateElement = $( element );
+-			this.bindings = this.bindings.add( element );
+-		}
+-
+-		$.each( handlers, function( event, handler ) {
+-			function handlerProxy() {
+-				// allow widgets to customize the disabled handling
+-				// - disabled as an array instead of boolean
+-				// - disabled class as method for disabling individual parts
+-				if ( !suppressDisabledCheck &&
+-						( instance.options.disabled === true ||
+-							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+-					return;
+-				}
+-				return ( typeof handler === "string" ? instance[ handler ] : handler )
+-					.apply( instance, arguments );
+-			}
+-
+-			// copy the guid so direct unbinding works
+-			if ( typeof handler !== "string" ) {
+-				handlerProxy.guid = handler.guid =
+-					handler.guid || handlerProxy.guid || $.guid++;
+-			}
+-
+-			var match = event.match( /^(\w+)\s*(.*)$/ ),
+-				eventName = match[1] + instance.eventNamespace,
+-				selector = match[2];
+-			if ( selector ) {
+-				delegateElement.delegate( selector, eventName, handlerProxy );
+-			} else {
+-				element.bind( eventName, handlerProxy );
+-			}
+-		});
+-	},
+-
+-	_off: function( element, eventName ) {
+-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+-		element.unbind( eventName ).undelegate( eventName );
+-	},
+-
+-	_delay: function( handler, delay ) {
+-		function handlerProxy() {
+-			return ( typeof handler === "string" ? instance[ handler ] : handler )
+-				.apply( instance, arguments );
+-		}
+-		var instance = this;
+-		return setTimeout( handlerProxy, delay || 0 );
+-	},
+-
+-	_hoverable: function( element ) {
+-		this.hoverable = this.hoverable.add( element );
+-		this._on( element, {
+-			mouseenter: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-hover" );
+-			},
+-			mouseleave: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-hover" );
+-			}
+-		});
+-	},
+-
+-	_focusable: function( element ) {
+-		this.focusable = this.focusable.add( element );
+-		this._on( element, {
+-			focusin: function( event ) {
+-				$( event.currentTarget ).addClass( "ui-state-focus" );
+-			},
+-			focusout: function( event ) {
+-				$( event.currentTarget ).removeClass( "ui-state-focus" );
+-			}
+-		});
+-	},
+-
+-	_trigger: function( type, event, data ) {
+-		var prop, orig,
+-			callback = this.options[ type ];
+-
+-		data = data || {};
+-		event = $.Event( event );
+-		event.type = ( type === this.widgetEventPrefix ?
+-			type :
+-			this.widgetEventPrefix + type ).toLowerCase();
+-		// the original event may come from any element
+-		// so we need to reset the target on the new event
+-		event.target = this.element[ 0 ];
+-
+-		// copy original event properties over to the new event
+-		orig = event.originalEvent;
+-		if ( orig ) {
+-			for ( prop in orig ) {
+-				if ( !( prop in event ) ) {
+-					event[ prop ] = orig[ prop ];
+-				}
+-			}
+-		}
+-
+-		this.element.trigger( event, data );
+-		return !( $.isFunction( callback ) &&
+-			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+-			event.isDefaultPrevented() );
+-	}
+-};
+-
+-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+-	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+-		if ( typeof options === "string" ) {
+-			options = { effect: options };
+-		}
+-		var hasOptions,
+-			effectName = !options ?
+-				method :
+-				options === true || typeof options === "number" ?
+-					defaultEffect :
+-					options.effect || defaultEffect;
+-		options = options || {};
+-		if ( typeof options === "number" ) {
+-			options = { duration: options };
+-		}
+-		hasOptions = !$.isEmptyObject( options );
+-		options.complete = callback;
+-		if ( options.delay ) {
+-			element.delay( options.delay );
+-		}
+-		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+-			element[ method ]( options );
+-		} else if ( effectName !== method && element[ effectName ] ) {
+-			element[ effectName ]( options.duration, options.easing, callback );
+-		} else {
+-			element.queue(function( next ) {
+-				$( this )[ method ]();
+-				if ( callback ) {
+-					callback.call( element[ 0 ] );
+-				}
+-				next();
+-			});
+-		}
+-	};
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-var mouseHandled = false;
+-$( document ).mouseup( function() {
+-	mouseHandled = false;
+-});
+-
+-$.widget("ui.mouse", {
+-	version: "1.10.3",
+-	options: {
+-		cancel: "input,textarea,button,select,option",
+-		distance: 1,
+-		delay: 0
+-	},
+-	_mouseInit: function() {
+-		var that = this;
+-
+-		this.element
+-			.bind("mousedown."+this.widgetName, function(event) {
+-				return that._mouseDown(event);
+-			})
+-			.bind("click."+this.widgetName, function(event) {
+-				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+-					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+-					event.stopImmediatePropagation();
+-					return false;
+-				}
+-			});
+-
+-		this.started = false;
+-	},
+-
+-	// TODO: make sure destroying one instance of mouse doesn't mess with
+-	// other instances of mouse
+-	_mouseDestroy: function() {
+-		this.element.unbind("."+this.widgetName);
+-		if ( this._mouseMoveDelegate ) {
+-			$(document)
+-				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-		}
+-	},
+-
+-	_mouseDown: function(event) {
+-		// don't let more than one widget handle mouseStart
+-		if( mouseHandled ) { return; }
+-
+-		// we may have missed mouseup (out of window)
+-		(this._mouseStarted && this._mouseUp(event));
+-
+-		this._mouseDownEvent = event;
+-
+-		var that = this,
+-			btnIsLeft = (event.which === 1),
+-			// event.target.nodeName works around a bug in IE 8 with
+-			// disabled inputs (#7620)
+-			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+-			return true;
+-		}
+-
+-		this.mouseDelayMet = !this.options.delay;
+-		if (!this.mouseDelayMet) {
+-			this._mouseDelayTimer = setTimeout(function() {
+-				that.mouseDelayMet = true;
+-			}, this.options.delay);
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted = (this._mouseStart(event) !== false);
+-			if (!this._mouseStarted) {
+-				event.preventDefault();
+-				return true;
+-			}
+-		}
+-
+-		// Click event may never have fired (Gecko & Opera)
+-		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+-			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+-		}
+-
+-		// these delegates are required to keep context
+-		this._mouseMoveDelegate = function(event) {
+-			return that._mouseMove(event);
+-		};
+-		this._mouseUpDelegate = function(event) {
+-			return that._mouseUp(event);
+-		};
+-		$(document)
+-			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		event.preventDefault();
+-
+-		mouseHandled = true;
+-		return true;
+-	},
+-
+-	_mouseMove: function(event) {
+-		// IE mouseup check - mouseup happened when mouse was out of window
+-		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+-			return this._mouseUp(event);
+-		}
+-
+-		if (this._mouseStarted) {
+-			this._mouseDrag(event);
+-			return event.preventDefault();
+-		}
+-
+-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+-			this._mouseStarted =
+-				(this._mouseStart(this._mouseDownEvent, event) !== false);
+-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+-		}
+-
+-		return !this._mouseStarted;
+-	},
+-
+-	_mouseUp: function(event) {
+-		$(document)
+-			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
+-			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+-
+-		if (this._mouseStarted) {
+-			this._mouseStarted = false;
+-
+-			if (event.target === this._mouseDownEvent.target) {
+-				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+-			}
+-
+-			this._mouseStop(event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseDistanceMet: function(event) {
+-		return (Math.max(
+-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+-			) >= this.options.distance
+-		);
+-	},
+-
+-	_mouseDelayMet: function(/* event */) {
+-		return this.mouseDelayMet;
+-	},
+-
+-	// These are placeholder methods, to be overriden by extending plugin
+-	_mouseStart: function(/* event */) {},
+-	_mouseDrag: function(/* event */) {},
+-	_mouseStop: function(/* event */) {},
+-	_mouseCapture: function(/* event */) { return true; }
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.ui = $.ui || {};
+-
+-var cachedScrollbarWidth,
+-	max = Math.max,
+-	abs = Math.abs,
+-	round = Math.round,
+-	rhorizontal = /left|center|right/,
+-	rvertical = /top|center|bottom/,
+-	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+-	rposition = /^\w+/,
+-	rpercent = /%$/,
+-	_position = $.fn.position;
+-
+-function getOffsets( offsets, width, height ) {
+-	return [
+-		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+-		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+-	];
+-}
+-
+-function parseCss( element, property ) {
+-	return parseInt( $.css( element, property ), 10 ) || 0;
+-}
+-
+-function getDimensions( elem ) {
+-	var raw = elem[0];
+-	if ( raw.nodeType === 9 ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: 0, left: 0 }
+-		};
+-	}
+-	if ( $.isWindow( raw ) ) {
+-		return {
+-			width: elem.width(),
+-			height: elem.height(),
+-			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+-		};
+-	}
+-	if ( raw.preventDefault ) {
+-		return {
+-			width: 0,
+-			height: 0,
+-			offset: { top: raw.pageY, left: raw.pageX }
+-		};
+-	}
+-	return {
+-		width: elem.outerWidth(),
+-		height: elem.outerHeight(),
+-		offset: elem.offset()
+-	};
+-}
+-
+-$.position = {
+-	scrollbarWidth: function() {
+-		if ( cachedScrollbarWidth !== undefined ) {
+-			return cachedScrollbarWidth;
+-		}
+-		var w1, w2,
+-			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+-			innerDiv = div.children()[0];
+-
+-		$( "body" ).append( div );
+-		w1 = innerDiv.offsetWidth;
+-		div.css( "overflow", "scroll" );
+-
+-		w2 = innerDiv.offsetWidth;
+-
+-		if ( w1 === w2 ) {
+-			w2 = div[0].clientWidth;
+-		}
+-
+-		div.remove();
+-
+-		return (cachedScrollbarWidth = w1 - w2);
+-	},
+-	getScrollInfo: function( within ) {
+-		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
+-			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+-			hasOverflowX = overflowX === "scroll" ||
+-				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+-			hasOverflowY = overflowY === "scroll" ||
+-				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+-		return {
+-			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+-			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+-		};
+-	},
+-	getWithinInfo: function( element ) {
+-		var withinElement = $( element || window ),
+-			isWindow = $.isWindow( withinElement[0] );
+-		return {
+-			element: withinElement,
+-			isWindow: isWindow,
+-			offset: withinElement.offset() || { left: 0, top: 0 },
+-			scrollLeft: withinElement.scrollLeft(),
+-			scrollTop: withinElement.scrollTop(),
+-			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
+-			height: isWindow ? withinElement.height() : withinElement.outerHeight()
+-		};
+-	}
+-};
+-
+-$.fn.position = function( options ) {
+-	if ( !options || !options.of ) {
+-		return _position.apply( this, arguments );
+-	}
+-
+-	// make a copy, we don't want to modify arguments
+-	options = $.extend( {}, options );
+-
+-	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+-		target = $( options.of ),
+-		within = $.position.getWithinInfo( options.within ),
+-		scrollInfo = $.position.getScrollInfo( within ),
+-		collision = ( options.collision || "flip" ).split( " " ),
+-		offsets = {};
+-
+-	dimensions = getDimensions( target );
+-	if ( target[0].preventDefault ) {
+-		// force left top to allow flipping
+-		options.at = "left top";
+-	}
+-	targetWidth = dimensions.width;
+-	targetHeight = dimensions.height;
+-	targetOffset = dimensions.offset;
+-	// clone to reuse original targetOffset later
+-	basePosition = $.extend( {}, targetOffset );
+-
+-	// force my and at to have valid horizontal and vertical positions
+-	// if a value is missing or invalid, it will be converted to center
+-	$.each( [ "my", "at" ], function() {
+-		var pos = ( options[ this ] || "" ).split( " " ),
+-			horizontalOffset,
+-			verticalOffset;
+-
+-		if ( pos.length === 1) {
+-			pos = rhorizontal.test( pos[ 0 ] ) ?
+-				pos.concat( [ "center" ] ) :
+-				rvertical.test( pos[ 0 ] ) ?
+-					[ "center" ].concat( pos ) :
+-					[ "center", "center" ];
+-		}
+-		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+-		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+-
+-		// calculate offsets
+-		horizontalOffset = roffset.exec( pos[ 0 ] );
+-		verticalOffset = roffset.exec( pos[ 1 ] );
+-		offsets[ this ] = [
+-			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+-			verticalOffset ? verticalOffset[ 0 ] : 0
+-		];
+-
+-		// reduce to just the positions without the offsets
+-		options[ this ] = [
+-			rposition.exec( pos[ 0 ] )[ 0 ],
+-			rposition.exec( pos[ 1 ] )[ 0 ]
+-		];
+-	});
+-
+-	// normalize collision option
+-	if ( collision.length === 1 ) {
+-		collision[ 1 ] = collision[ 0 ];
+-	}
+-
+-	if ( options.at[ 0 ] === "right" ) {
+-		basePosition.left += targetWidth;
+-	} else if ( options.at[ 0 ] === "center" ) {
+-		basePosition.left += targetWidth / 2;
+-	}
+-
+-	if ( options.at[ 1 ] === "bottom" ) {
+-		basePosition.top += targetHeight;
+-	} else if ( options.at[ 1 ] === "center" ) {
+-		basePosition.top += targetHeight / 2;
+-	}
+-
+-	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+-	basePosition.left += atOffset[ 0 ];
+-	basePosition.top += atOffset[ 1 ];
+-
+-	return this.each(function() {
+-		var collisionPosition, using,
+-			elem = $( this ),
+-			elemWidth = elem.outerWidth(),
+-			elemHeight = elem.outerHeight(),
+-			marginLeft = parseCss( this, "marginLeft" ),
+-			marginTop = parseCss( this, "marginTop" ),
+-			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+-			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+-			position = $.extend( {}, basePosition ),
+-			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+-
+-		if ( options.my[ 0 ] === "right" ) {
+-			position.left -= elemWidth;
+-		} else if ( options.my[ 0 ] === "center" ) {
+-			position.left -= elemWidth / 2;
+-		}
+-
+-		if ( options.my[ 1 ] === "bottom" ) {
+-			position.top -= elemHeight;
+-		} else if ( options.my[ 1 ] === "center" ) {
+-			position.top -= elemHeight / 2;
+-		}
+-
+-		position.left += myOffset[ 0 ];
+-		position.top += myOffset[ 1 ];
+-
+-		// if the browser doesn't support fractions, then round for consistent results
+-		if ( !$.support.offsetFractions ) {
+-			position.left = round( position.left );
+-			position.top = round( position.top );
+-		}
+-
+-		collisionPosition = {
+-			marginLeft: marginLeft,
+-			marginTop: marginTop
+-		};
+-
+-		$.each( [ "left", "top" ], function( i, dir ) {
+-			if ( $.ui.position[ collision[ i ] ] ) {
+-				$.ui.position[ collision[ i ] ][ dir ]( position, {
+-					targetWidth: targetWidth,
+-					targetHeight: targetHeight,
+-					elemWidth: elemWidth,
+-					elemHeight: elemHeight,
+-					collisionPosition: collisionPosition,
+-					collisionWidth: collisionWidth,
+-					collisionHeight: collisionHeight,
+-					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+-					my: options.my,
+-					at: options.at,
+-					within: within,
+-					elem : elem
+-				});
+-			}
+-		});
+-
+-		if ( options.using ) {
+-			// adds feedback as second argument to using callback, if present
+-			using = function( props ) {
+-				var left = targetOffset.left - position.left,
+-					right = left + targetWidth - elemWidth,
+-					top = targetOffset.top - position.top,
+-					bottom = top + targetHeight - elemHeight,
+-					feedback = {
+-						target: {
+-							element: target,
+-							left: targetOffset.left,
+-							top: targetOffset.top,
+-							width: targetWidth,
+-							height: targetHeight
+-						},
+-						element: {
+-							element: elem,
+-							left: position.left,
+-							top: position.top,
+-							width: elemWidth,
+-							height: elemHeight
+-						},
+-						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+-						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+-					};
+-				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+-					feedback.horizontal = "center";
+-				}
+-				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+-					feedback.vertical = "middle";
+-				}
+-				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+-					feedback.important = "horizontal";
+-				} else {
+-					feedback.important = "vertical";
+-				}
+-				options.using.call( this, props, feedback );
+-			};
+-		}
+-
+-		elem.offset( $.extend( position, { using: using } ) );
+-	});
+-};
+-
+-$.ui.position = {
+-	fit: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+-				outerWidth = within.width,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = withinOffset - collisionPosLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+-				newOverRight;
+-
+-			// element is wider than within
+-			if ( data.collisionWidth > outerWidth ) {
+-				// element is initially over the left side of within
+-				if ( overLeft > 0 && overRight <= 0 ) {
+-					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+-					position.left += overLeft - newOverRight;
+-				// element is initially over right side of within
+-				} else if ( overRight > 0 && overLeft <= 0 ) {
+-					position.left = withinOffset;
+-				// element is initially over both left and right sides of within
+-				} else {
+-					if ( overLeft > overRight ) {
+-						position.left = withinOffset + outerWidth - data.collisionWidth;
+-					} else {
+-						position.left = withinOffset;
+-					}
+-				}
+-			// too far left -> align with left edge
+-			} else if ( overLeft > 0 ) {
+-				position.left += overLeft;
+-			// too far right -> align with right edge
+-			} else if ( overRight > 0 ) {
+-				position.left -= overRight;
+-			// adjust based on position and margin
+-			} else {
+-				position.left = max( position.left - collisionPosLeft, position.left );
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+-				outerHeight = data.within.height,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = withinOffset - collisionPosTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+-				newOverBottom;
+-
+-			// element is taller than within
+-			if ( data.collisionHeight > outerHeight ) {
+-				// element is initially over the top of within
+-				if ( overTop > 0 && overBottom <= 0 ) {
+-					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+-					position.top += overTop - newOverBottom;
+-				// element is initially over bottom of within
+-				} else if ( overBottom > 0 && overTop <= 0 ) {
+-					position.top = withinOffset;
+-				// element is initially over both top and bottom of within
+-				} else {
+-					if ( overTop > overBottom ) {
+-						position.top = withinOffset + outerHeight - data.collisionHeight;
+-					} else {
+-						position.top = withinOffset;
+-					}
+-				}
+-			// too far up -> align with top
+-			} else if ( overTop > 0 ) {
+-				position.top += overTop;
+-			// too far down -> align with bottom edge
+-			} else if ( overBottom > 0 ) {
+-				position.top -= overBottom;
+-			// adjust based on position and margin
+-			} else {
+-				position.top = max( position.top - collisionPosTop, position.top );
+-			}
+-		}
+-	},
+-	flip: {
+-		left: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.left + within.scrollLeft,
+-				outerWidth = within.width,
+-				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+-				overLeft = collisionPosLeft - offsetLeft,
+-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+-				myOffset = data.my[ 0 ] === "left" ?
+-					-data.elemWidth :
+-					data.my[ 0 ] === "right" ?
+-						data.elemWidth :
+-						0,
+-				atOffset = data.at[ 0 ] === "left" ?
+-					data.targetWidth :
+-					data.at[ 0 ] === "right" ?
+-						-data.targetWidth :
+-						0,
+-				offset = -2 * data.offset[ 0 ],
+-				newOverRight,
+-				newOverLeft;
+-
+-			if ( overLeft < 0 ) {
+-				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+-				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overRight > 0 ) {
+-				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+-				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+-					position.left += myOffset + atOffset + offset;
+-				}
+-			}
+-		},
+-		top: function( position, data ) {
+-			var within = data.within,
+-				withinOffset = within.offset.top + within.scrollTop,
+-				outerHeight = within.height,
+-				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+-				collisionPosTop = position.top - data.collisionPosition.marginTop,
+-				overTop = collisionPosTop - offsetTop,
+-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+-				top = data.my[ 1 ] === "top",
+-				myOffset = top ?
+-					-data.elemHeight :
+-					data.my[ 1 ] === "bottom" ?
+-						data.elemHeight :
+-						0,
+-				atOffset = data.at[ 1 ] === "top" ?
+-					data.targetHeight :
+-					data.at[ 1 ] === "bottom" ?
+-						-data.targetHeight :
+-						0,
+-				offset = -2 * data.offset[ 1 ],
+-				newOverTop,
+-				newOverBottom;
+-			if ( overTop < 0 ) {
+-				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+-				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-			else if ( overBottom > 0 ) {
+-				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+-				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+-					position.top += myOffset + atOffset + offset;
+-				}
+-			}
+-		}
+-	},
+-	flipfit: {
+-		left: function() {
+-			$.ui.position.flip.left.apply( this, arguments );
+-			$.ui.position.fit.left.apply( this, arguments );
+-		},
+-		top: function() {
+-			$.ui.position.flip.top.apply( this, arguments );
+-			$.ui.position.fit.top.apply( this, arguments );
+-		}
+-	}
+-};
+-
+-// fraction support test
+-(function () {
+-	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+-		body = document.getElementsByTagName( "body" )[ 0 ],
+-		div = document.createElement( "div" );
+-
+-	//Create a "fake body" for testing based on method used in jQuery.support
+-	testElement = document.createElement( body ? "div" : "body" );
+-	testElementStyle = {
+-		visibility: "hidden",
+-		width: 0,
+-		height: 0,
+-		border: 0,
+-		margin: 0,
+-		background: "none"
+-	};
+-	if ( body ) {
+-		$.extend( testElementStyle, {
+-			position: "absolute",
+-			left: "-1000px",
+-			top: "-1000px"
+-		});
+-	}
+-	for ( i in testElementStyle ) {
+-		testElement.style[ i ] = testElementStyle[ i ];
+-	}
+-	testElement.appendChild( div );
+-	testElementParent = body || document.documentElement;
+-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+-
+-	div.style.cssText = "position: absolute; left: 10.7432222px;";
+-
+-	offsetLeft = $( div ).offset().left;
+-	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+-
+-	testElement.innerHTML = "";
+-	testElementParent.removeChild( testElement );
+-})();
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.widget("ui.draggable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drag",
+-	options: {
+-		addClasses: true,
+-		appendTo: "parent",
+-		axis: false,
+-		connectToSortable: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		iframeFix: false,
+-		opacity: false,
+-		refreshPositions: false,
+-		revert: false,
+-		revertDuration: 500,
+-		scope: "default",
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		snap: false,
+-		snapMode: "both",
+-		snapTolerance: 20,
+-		stack: false,
+-		zIndex: false,
+-
+-		// callbacks
+-		drag: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
+-			this.element[0].style.position = "relative";
+-		}
+-		if (this.options.addClasses){
+-			this.element.addClass("ui-draggable");
+-		}
+-		if (this.options.disabled){
+-			this.element.addClass("ui-draggable-disabled");
+-		}
+-
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function(event) {
+-
+-		var o = this.options;
+-
+-		// among others, prevent a drag on a resizable-handle
+-		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+-			return false;
+-		}
+-
+-		//Quit if we're not on a valid handle
+-		this.handle = this._getHandle(event);
+-		if (!this.handle) {
+-			return false;
+-		}
+-
+-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
+-			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
+-			.css({
+-				width: this.offsetWidth+"px", height: this.offsetHeight+"px",
+-				position: "absolute", opacity: "0.001", zIndex: 1000
+-			})
+-			.css($(this).offset())
+-			.appendTo("body");
+-		});
+-
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var o = this.options;
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		this.helper.addClass("ui-draggable-dragging");
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		//If ddmanager is used for droppables, set the global draggable
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Store the helper's css position
+-		this.cssPosition = this.helper.css( "position" );
+-		this.scrollParent = this.helper.scrollParent();
+-		this.offsetParent = this.helper.offsetParent();
+-		this.offsetParentCssPosition = this.offsetParent.css( "position" );
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.positionAbs = this.element.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		//Reset scroll cache
+-		this.offset.scroll = false;
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		//Generate the original position
+-		this.originalPosition = this.position = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Set a containment if given in the options
+-		this._setContainment();
+-
+-		//Trigger event + callbacks
+-		if(this._trigger("start", event) === false) {
+-			this._clear();
+-			return false;
+-		}
+-
+-		//Recache the helper size
+-		this._cacheHelperProportions();
+-
+-		//Prepare the droppable offsets
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-
+-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+-		if ( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStart(this, event);
+-		}
+-
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event, noPropagation) {
+-		// reset any necessary cached properties (see #5009)
+-		if ( this.offsetParentCssPosition === "fixed" ) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Call plugins and callbacks and use the resulting position if something is returned
+-		if (!noPropagation) {
+-			var ui = this._uiHash();
+-			if(this._trigger("drag", event, ui) === false) {
+-				this._mouseUp({});
+-				return false;
+-			}
+-			this.position = ui.position;
+-		}
+-
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		//If we are using droppables, inform the manager about the drop
+-		var that = this,
+-			dropped = false;
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			dropped = $.ui.ddmanager.drop(this, event);
+-		}
+-
+-		//if a drop comes from outside (a sortable)
+-		if(this.dropped) {
+-			dropped = this.dropped;
+-			this.dropped = false;
+-		}
+-
+-		//if the original element is no longer in the DOM don't bother to continue (see #8269)
+-		if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
+-			return false;
+-		}
+-
+-		if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+-				if(that._trigger("stop", event) !== false) {
+-					that._clear();
+-				}
+-			});
+-		} else {
+-			if(this._trigger("stop", event) !== false) {
+-				this._clear();
+-			}
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseUp: function(event) {
+-		//Remove frame helpers
+-		$("div.ui-draggable-iframeFix").each(function() {
+-			this.parentNode.removeChild(this);
+-		});
+-
+-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+-		if( $.ui.ddmanager ) {
+-			$.ui.ddmanager.dragStop(this, event);
+-		}
+-
+-		return $.ui.mouse.prototype._mouseUp.call(this, event);
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.helper.is(".ui-draggable-dragging")) {
+-			this._mouseUp({});
+-		} else {
+-			this._clear();
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	_getHandle: function(event) {
+-		return this.options.handle ?
+-			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+-			true;
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+-
+-		if(!helper.parents("body").length) {
+-			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+-		}
+-
+-		if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+-			helper.css("position", "absolute");
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-		//Get the offsetParent and cache its position
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		//This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		//Ugly IE fix
+-		if((this.offsetParent[0] === document.body) ||
+-			(this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.element.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.element.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.element.css("marginTop"),10) || 0),
+-			right: (parseInt(this.element.css("marginRight"),10) || 0),
+-			bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var over, c, ce,
+-			o = this.options;
+-
+-		if ( !o.containment ) {
+-			this.containment = null;
+-			return;
+-		}
+-
+-		if ( o.containment === "window" ) {
+-			this.containment = [
+-				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+-				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+-				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+-				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment === "document") {
+-			this.containment = [
+-				0,
+-				0,
+-				$( document ).width() - this.helperProportions.width - this.margins.left,
+-				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+-			];
+-			return;
+-		}
+-
+-		if ( o.containment.constructor === Array ) {
+-			this.containment = o.containment;
+-			return;
+-		}
+-
+-		if ( o.containment === "parent" ) {
+-			o.containment = this.helper[ 0 ].parentNode;
+-		}
+-
+-		c = $( o.containment );
+-		ce = c[ 0 ];
+-
+-		if( !ce ) {
+-			return;
+-		}
+-
+-		over = c.css( "overflow" ) !== "hidden";
+-
+-		this.containment = [
+-			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+-			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
+-			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
+-			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+-		];
+-		this.relative_container = c;
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var containment, co, top, left,
+-			o = this.options,
+-			scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+-			pageX = event.pageX,
+-			pageY = event.pageY;
+-
+-		//Cache the scroll
+-		if (!this.offset.scroll) {
+-			this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		// If we are not dragging yet, we won't check for options
+-		if ( this.originalPosition ) {
+-			if ( this.containment ) {
+-				if ( this.relative_container ){
+-					co = this.relative_container.offset();
+-					containment = [
+-						this.containment[ 0 ] + co.left,
+-						this.containment[ 1 ] + co.top,
+-						this.containment[ 2 ] + co.left,
+-						this.containment[ 3 ] + co.top
+-					];
+-				}
+-				else {
+-					containment = this.containment;
+-				}
+-
+-				if(event.pageX - this.offset.click.left < containment[0]) {
+-					pageX = containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < containment[1]) {
+-					pageY = containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > containment[2]) {
+-					pageX = containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > containment[3]) {
+-					pageY = containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+-				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+-				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+-				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																	// The absolute mouse position
+-				this.offset.click.top	-												// Click offset (relative to the element)
+-				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
+-			),
+-			left: (
+-				pageX -																	// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
+-			)
+-		};
+-
+-	},
+-
+-	_clear: function() {
+-		this.helper.removeClass("ui-draggable-dragging");
+-		if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-		this.cancelHelperRemoval = false;
+-	},
+-
+-	// From now on bulk stuff - mainly helpers
+-
+-	_trigger: function(type, event, ui) {
+-		ui = ui || this._uiHash();
+-		$.ui.plugin.call(this, type, [event, ui]);
+-		//The absolute position has to be recalculated after plugins
+-		if(type === "drag") {
+-			this.positionAbs = this._convertPositionTo("absolute");
+-		}
+-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+-	},
+-
+-	plugins: {},
+-
+-	_uiHash: function() {
+-		return {
+-			helper: this.helper,
+-			position: this.position,
+-			originalPosition: this.originalPosition,
+-			offset: this.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.plugin.add("draggable", "connectToSortable", {
+-	start: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), o = inst.options,
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-		inst.sortables = [];
+-		$(o.connectToSortable).each(function() {
+-			var sortable = $.data(this, "ui-sortable");
+-			if (sortable && !sortable.options.disabled) {
+-				inst.sortables.push({
+-					instance: sortable,
+-					shouldRevert: sortable.options.revert
+-				});
+-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+-				sortable._trigger("activate", event, uiSortable);
+-			}
+-		});
+-
+-	},
+-	stop: function(event, ui) {
+-
+-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+-		var inst = $(this).data("ui-draggable"),
+-			uiSortable = $.extend({}, ui, { item: inst.element });
+-
+-		$.each(inst.sortables, function() {
+-			if(this.instance.isOver) {
+-
+-				this.instance.isOver = 0;
+-
+-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
+-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+-
+-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
+-				if(this.shouldRevert) {
+-					this.instance.options.revert = this.shouldRevert;
+-				}
+-
+-				//Trigger the stop of the sortable
+-				this.instance._mouseStop(event);
+-
+-				this.instance.options.helper = this.instance.options._helper;
+-
+-				//If the helper has been the original item, restore properties in the sortable
+-				if(inst.options.helper === "original") {
+-					this.instance.currentItem.css({ top: "auto", left: "auto" });
+-				}
+-
+-			} else {
+-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
+-				this.instance._trigger("deactivate", event, uiSortable);
+-			}
+-
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var inst = $(this).data("ui-draggable"), that = this;
+-
+-		$.each(inst.sortables, function() {
+-
+-			var innermostIntersecting = false,
+-				thisSortable = this;
+-
+-			//Copy over some variables to allow calling the sortable's native _intersectsWith
+-			this.instance.positionAbs = inst.positionAbs;
+-			this.instance.helperProportions = inst.helperProportions;
+-			this.instance.offset.click = inst.offset.click;
+-
+-			if(this.instance._intersectsWith(this.instance.containerCache)) {
+-				innermostIntersecting = true;
+-				$.each(inst.sortables, function () {
+-					this.instance.positionAbs = inst.positionAbs;
+-					this.instance.helperProportions = inst.helperProportions;
+-					this.instance.offset.click = inst.offset.click;
+-					if (this !== thisSortable &&
+-						this.instance._intersectsWith(this.instance.containerCache) &&
+-						$.contains(thisSortable.instance.element[0], this.instance.element[0])
+-					) {
+-						innermostIntersecting = false;
+-					}
+-					return innermostIntersecting;
+-				});
+-			}
+-
+-
+-			if(innermostIntersecting) {
+-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
+-				if(!this.instance.isOver) {
+-
+-					this.instance.isOver = 1;
+-					//Now we fake the start of dragging for the sortable instance,
+-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
+-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
+-					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
+-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
+-					this.instance.options.helper = function() { return ui.helper[0]; };
+-
+-					event.target = this.instance.currentItem[0];
+-					this.instance._mouseCapture(event, true);
+-					this.instance._mouseStart(event, true, true);
+-
+-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
+-					this.instance.offset.click.top = inst.offset.click.top;
+-					this.instance.offset.click.left = inst.offset.click.left;
+-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
+-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+-
+-					inst._trigger("toSortable", event);
+-					inst.dropped = this.instance.element; //draggable revert needs that
+-					//hack so receive/update callbacks work (mostly)
+-					inst.currentItem = inst.element;
+-					this.instance.fromOutside = inst;
+-
+-				}
+-
+-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
+-				if(this.instance.currentItem) {
+-					this.instance._mouseDrag(event);
+-				}
+-
+-			} else {
+-
+-				//If it doesn't intersect with the sortable, and it intersected before,
+-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
+-				if(this.instance.isOver) {
+-
+-					this.instance.isOver = 0;
+-					this.instance.cancelHelperRemoval = true;
+-
+-					//Prevent reverting on this forced stop
+-					this.instance.options.revert = false;
+-
+-					// The out event needs to be triggered independently
+-					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+-
+-					this.instance._mouseStop(event, true);
+-					this.instance.options.helper = this.instance.options._helper;
+-
+-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
+-					this.instance.currentItem.remove();
+-					if(this.instance.placeholder) {
+-						this.instance.placeholder.remove();
+-					}
+-
+-					inst._trigger("fromSortable", event);
+-					inst.dropped = false; //draggable revert needs that
+-				}
+-
+-			}
+-
+-		});
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "cursor", {
+-	start: function() {
+-		var t = $("body"), o = $(this).data("ui-draggable").options;
+-		if (t.css("cursor")) {
+-			o._cursor = t.css("cursor");
+-		}
+-		t.css("cursor", o.cursor);
+-	},
+-	stop: function() {
+-		var o = $(this).data("ui-draggable").options;
+-		if (o._cursor) {
+-			$("body").css("cursor", o._cursor);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "opacity", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("opacity")) {
+-			o._opacity = t.css("opacity");
+-		}
+-		t.css("opacity", o.opacity);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._opacity) {
+-			$(ui.helper).css("opacity", o._opacity);
+-		}
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "scroll", {
+-	start: function() {
+-		var i = $(this).data("ui-draggable");
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-			i.overflowOffset = i.scrollParent.offset();
+-		}
+-	},
+-	drag: function( event ) {
+-
+-		var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+-
+-		if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-			}
+-
+-		} else {
+-
+-			if(!o.axis || o.axis !== "x") {
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-			}
+-
+-			if(!o.axis || o.axis !== "y") {
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-			}
+-
+-		}
+-
+-		if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(i, event);
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "snap", {
+-	start: function() {
+-
+-		var i = $(this).data("ui-draggable"),
+-			o = i.options;
+-
+-		i.snapElements = [];
+-
+-		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+-			var $t = $(this),
+-				$o = $t.offset();
+-			if(this !== i.element[0]) {
+-				i.snapElements.push({
+-					item: this,
+-					width: $t.outerWidth(), height: $t.outerHeight(),
+-					top: $o.top, left: $o.left
+-				});
+-			}
+-		});
+-
+-	},
+-	drag: function(event, ui) {
+-
+-		var ts, bs, ls, rs, l, r, t, b, i, first,
+-			inst = $(this).data("ui-draggable"),
+-			o = inst.options,
+-			d = o.snapTolerance,
+-			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+-
+-		for (i = inst.snapElements.length - 1; i >= 0; i--){
+-
+-			l = inst.snapElements[i].left;
+-			r = l + inst.snapElements[i].width;
+-			t = inst.snapElements[i].top;
+-			b = t + inst.snapElements[i].height;
+-
+-			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+-				if(inst.snapElements[i].snapping) {
+-					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-				}
+-				inst.snapElements[i].snapping = false;
+-				continue;
+-			}
+-
+-			if(o.snapMode !== "inner") {
+-				ts = Math.abs(t - y2) <= d;
+-				bs = Math.abs(b - y1) <= d;
+-				ls = Math.abs(l - x2) <= d;
+-				rs = Math.abs(r - x1) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+-				}
+-			}
+-
+-			first = (ts || bs || ls || rs);
+-
+-			if(o.snapMode !== "outer") {
+-				ts = Math.abs(t - y1) <= d;
+-				bs = Math.abs(b - y2) <= d;
+-				ls = Math.abs(l - x1) <= d;
+-				rs = Math.abs(r - x2) <= d;
+-				if(ts) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+-				}
+-				if(bs) {
+-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+-				}
+-				if(ls) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+-				}
+-				if(rs) {
+-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+-				}
+-			}
+-
+-			if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+-			}
+-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+-
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "stack", {
+-	start: function() {
+-		var min,
+-			o = this.data("ui-draggable").options,
+-			group = $.makeArray($(o.stack)).sort(function(a,b) {
+-				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+-			});
+-
+-		if (!group.length) { return; }
+-
+-		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+-		$(group).each(function(i) {
+-			$(this).css("zIndex", min + i);
+-		});
+-		this.css("zIndex", (min + group.length));
+-	}
+-});
+-
+-$.ui.plugin.add("draggable", "zIndex", {
+-	start: function(event, ui) {
+-		var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+-		if(t.css("zIndex")) {
+-			o._zIndex = t.css("zIndex");
+-		}
+-		t.css("zIndex", o.zIndex);
+-	},
+-	stop: function(event, ui) {
+-		var o = $(this).data("ui-draggable").options;
+-		if(o._zIndex) {
+-			$(ui.helper).css("zIndex", o._zIndex);
+-		}
+-	}
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-$.widget("ui.droppable", {
+-	version: "1.10.3",
+-	widgetEventPrefix: "drop",
+-	options: {
+-		accept: "*",
+-		activeClass: false,
+-		addClasses: true,
+-		greedy: false,
+-		hoverClass: false,
+-		scope: "default",
+-		tolerance: "intersect",
+-
+-		// callbacks
+-		activate: null,
+-		deactivate: null,
+-		drop: null,
+-		out: null,
+-		over: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options,
+-			accept = o.accept;
+-
+-		this.isover = false;
+-		this.isout = true;
+-
+-		this.accept = $.isFunction(accept) ? accept : function(d) {
+-			return d.is(accept);
+-		};
+-
+-		//Store the droppable's proportions
+-		this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+-
+-		// Add the reference and positions to the manager
+-		$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
+-		$.ui.ddmanager.droppables[o.scope].push(this);
+-
+-		(o.addClasses && this.element.addClass("ui-droppable"));
+-
+-	},
+-
+-	_destroy: function() {
+-		var i = 0,
+-			drop = $.ui.ddmanager.droppables[this.options.scope];
+-
+-		for ( ; i < drop.length; i++ ) {
+-			if ( drop[i] === this ) {
+-				drop.splice(i, 1);
+-			}
+-		}
+-
+-		this.element.removeClass("ui-droppable ui-droppable-disabled");
+-	},
+-
+-	_setOption: function(key, value) {
+-
+-		if(key === "accept") {
+-			this.accept = $.isFunction(value) ? value : function(d) {
+-				return d.is(value);
+-			};
+-		}
+-		$.Widget.prototype._setOption.apply(this, arguments);
+-	},
+-
+-	_activate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.addClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("activate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_deactivate: function(event) {
+-		var draggable = $.ui.ddmanager.current;
+-		if(this.options.activeClass) {
+-			this.element.removeClass(this.options.activeClass);
+-		}
+-		if(draggable){
+-			this._trigger("deactivate", event, this.ui(draggable));
+-		}
+-	},
+-
+-	_over: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.addClass(this.options.hoverClass);
+-			}
+-			this._trigger("over", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_out: function(event) {
+-
+-		var draggable = $.ui.ddmanager.current;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return;
+-		}
+-
+-		if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("out", event, this.ui(draggable));
+-		}
+-
+-	},
+-
+-	_drop: function(event,custom) {
+-
+-		var draggable = custom || $.ui.ddmanager.current,
+-			childrenIntersection = false;
+-
+-		// Bail if draggable and droppable are same element
+-		if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+-			return false;
+-		}
+-
+-		this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
+-			var inst = $.data(this, "ui-droppable");
+-			if(
+-				inst.options.greedy &&
+-				!inst.options.disabled &&
+-				inst.options.scope === draggable.options.scope &&
+-				inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
+-				$.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+-			) { childrenIntersection = true; return false; }
+-		});
+-		if(childrenIntersection) {
+-			return false;
+-		}
+-
+-		if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-			if(this.options.activeClass) {
+-				this.element.removeClass(this.options.activeClass);
+-			}
+-			if(this.options.hoverClass) {
+-				this.element.removeClass(this.options.hoverClass);
+-			}
+-			this._trigger("drop", event, this.ui(draggable));
+-			return this.element;
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	ui: function(c) {
+-		return {
+-			draggable: (c.currentItem || c.element),
+-			helper: c.helper,
+-			position: c.position,
+-			offset: c.positionAbs
+-		};
+-	}
+-
+-});
+-
+-$.ui.intersect = function(draggable, droppable, toleranceMode) {
+-
+-	if (!droppable.offset) {
+-		return false;
+-	}
+-
+-	var draggableLeft, draggableTop,
+-		x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
+-		y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
+-		l = droppable.offset.left, r = l + droppable.proportions.width,
+-		t = droppable.offset.top, b = t + droppable.proportions.height;
+-
+-	switch (toleranceMode) {
+-		case "fit":
+-			return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+-		case "intersect":
+-			return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
+-				x2 - (draggable.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
+-				y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+-		case "pointer":
+-			draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
+-			draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
+-			return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
+-		case "touch":
+-			return (
+-				(y1 >= t && y1 <= b) ||	// Top edge touching
+-				(y2 >= t && y2 <= b) ||	// Bottom edge touching
+-				(y1 < t && y2 > b)		// Surrounded vertically
+-			) && (
+-				(x1 >= l && x1 <= r) ||	// Left edge touching
+-				(x2 >= l && x2 <= r) ||	// Right edge touching
+-				(x1 < l && x2 > r)		// Surrounded horizontally
+-			);
+-		default:
+-			return false;
+-		}
+-
+-};
+-
+-/*
+-	This manager tracks offsets of draggables and droppables
+-*/
+-$.ui.ddmanager = {
+-	current: null,
+-	droppables: { "default": [] },
+-	prepareOffsets: function(t, event) {
+-
+-		var i, j,
+-			m = $.ui.ddmanager.droppables[t.options.scope] || [],
+-			type = event ? event.type : null, // workaround for #2317
+-			list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+-
+-		droppablesLoop: for (i = 0; i < m.length; i++) {
+-
+-			//No disabled and non-accepted
+-			if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+-				continue;
+-			}
+-
+-			// Filter out elements in the current dragged item
+-			for (j=0; j < list.length; j++) {
+-				if(list[j] === m[i].element[0]) {
+-					m[i].proportions.height = 0;
+-					continue droppablesLoop;
+-				}
+-			}
+-
+-			m[i].visible = m[i].element.css("display") !== "none";
+-			if(!m[i].visible) {
+-				continue;
+-			}
+-
+-			//Activate the droppable if used directly from draggables
+-			if(type === "mousedown") {
+-				m[i]._activate.call(m[i], event);
+-			}
+-
+-			m[i].offset = m[i].element.offset();
+-			m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+-
+-		}
+-
+-	},
+-	drop: function(draggable, event) {
+-
+-		var dropped = false;
+-		// Create a copy of the droppables in case the list changes during the drop (#9116)
+-		$.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
+-
+-			if(!this.options) {
+-				return;
+-			}
+-			if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
+-				dropped = this._drop.call(this, event) || dropped;
+-			}
+-
+-			if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+-				this.isout = true;
+-				this.isover = false;
+-				this._deactivate.call(this, event);
+-			}
+-
+-		});
+-		return dropped;
+-
+-	},
+-	dragStart: function( draggable, event ) {
+-		//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+-		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+-			if( !draggable.options.refreshPositions ) {
+-				$.ui.ddmanager.prepareOffsets( draggable, event );
+-			}
+-		});
+-	},
+-	drag: function(draggable, event) {
+-
+-		//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+-		if(draggable.options.refreshPositions) {
+-			$.ui.ddmanager.prepareOffsets(draggable, event);
+-		}
+-
+-		//Run through all droppables and check their positions based on specific tolerance options
+-		$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+-
+-			if(this.options.disabled || this.greedyChild || !this.visible) {
+-				return;
+-			}
+-
+-			var parentInstance, scope, parent,
+-				intersects = $.ui.intersect(draggable, this, this.options.tolerance),
+-				c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
+-			if(!c) {
+-				return;
+-			}
+-
+-			if (this.options.greedy) {
+-				// find droppable parents with same scope
+-				scope = this.options.scope;
+-				parent = this.element.parents(":data(ui-droppable)").filter(function () {
+-					return $.data(this, "ui-droppable").options.scope === scope;
+-				});
+-
+-				if (parent.length) {
+-					parentInstance = $.data(parent[0], "ui-droppable");
+-					parentInstance.greedyChild = (c === "isover");
+-				}
+-			}
+-
+-			// we just moved into a greedy child
+-			if (parentInstance && c === "isover") {
+-				parentInstance.isover = false;
+-				parentInstance.isout = true;
+-				parentInstance._out.call(parentInstance, event);
+-			}
+-
+-			this[c] = true;
+-			this[c === "isout" ? "isover" : "isout"] = false;
+-			this[c === "isover" ? "_over" : "_out"].call(this, event);
+-
+-			// we just moved out of a greedy child
+-			if (parentInstance && c === "isout") {
+-				parentInstance.isout = false;
+-				parentInstance.isover = true;
+-				parentInstance._over.call(parentInstance, event);
+-			}
+-		});
+-
+-	},
+-	dragStop: function( draggable, event ) {
+-		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+-		//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+-		if( !draggable.options.refreshPositions ) {
+-			$.ui.ddmanager.prepareOffsets( draggable, event );
+-		}
+-	}
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-function num(v) {
+-	return parseInt(v, 10) || 0;
+-}
+-
+-function isNumber(value) {
+-	return !isNaN(parseInt(value, 10));
+-}
+-
+-$.widget("ui.resizable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "resize",
+-	options: {
+-		alsoResize: false,
+-		animate: false,
+-		animateDuration: "slow",
+-		animateEasing: "swing",
+-		aspectRatio: false,
+-		autoHide: false,
+-		containment: false,
+-		ghost: false,
+-		grid: false,
+-		handles: "e,s,se",
+-		helper: false,
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 10,
+-		minWidth: 10,
+-		// See #7960
+-		zIndex: 90,
+-
+-		// callbacks
+-		resize: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		var n, i, handle, axis, hname,
+-			that = this,
+-			o = this.options;
+-		this.element.addClass("ui-resizable");
+-
+-		$.extend(this, {
+-			_aspectRatio: !!(o.aspectRatio),
+-			aspectRatio: o.aspectRatio,
+-			originalElement: this.element,
+-			_proportionallyResizeElements: [],
+-			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+-		});
+-
+-		//Wrap the element if it cannot hold child nodes
+-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+-
+-			//Create a wrapper element and set the wrapper to the new current internal element
+-			this.element.wrap(
+-				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+-					position: this.element.css("position"),
+-					width: this.element.outerWidth(),
+-					height: this.element.outerHeight(),
+-					top: this.element.css("top"),
+-					left: this.element.css("left")
+-				})
+-			);
+-
+-			//Overwrite the original this.element
+-			this.element = this.element.parent().data(
+-				"ui-resizable", this.element.data("ui-resizable")
+-			);
+-
+-			this.elementIsWrapper = true;
+-
+-			//Move margins to the wrapper
+-			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+-			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+-
+-			//Prevent Safari textarea resize
+-			this.originalResizeStyle = this.originalElement.css("resize");
+-			this.originalElement.css("resize", "none");
+-
+-			//Push the actual element to our proportionallyResize internal array
+-			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+-
+-			// avoid IE jump (hard set the margin)
+-			this.originalElement.css({ margin: this.originalElement.css("margin") });
+-
+-			// fix handlers offset
+-			this._proportionallyResize();
+-
+-		}
+-
+-		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
+-		if(this.handles.constructor === String) {
+-
+-			if ( this.handles === "all") {
+-				this.handles = "n,e,s,w,se,sw,ne,nw";
+-			}
+-
+-			n = this.handles.split(",");
+-			this.handles = {};
+-
+-			for(i = 0; i < n.length; i++) {
+-
+-				handle = $.trim(n[i]);
+-				hname = "ui-resizable-"+handle;
+-				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+-
+-				// Apply zIndex to all handles - see #7960
+-				axis.css({ zIndex: o.zIndex });
+-
+-				//TODO : What's going on here?
+-				if ("se" === handle) {
+-					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+-				}
+-
+-				//Insert into internal handles object and append to element
+-				this.handles[handle] = ".ui-resizable-"+handle;
+-				this.element.append(axis);
+-			}
+-
+-		}
+-
+-		this._renderAxis = function(target) {
+-
+-			var i, axis, padPos, padWrapper;
+-
+-			target = target || this.element;
+-
+-			for(i in this.handles) {
+-
+-				if(this.handles[i].constructor === String) {
+-					this.handles[i] = $(this.handles[i], this.element).show();
+-				}
+-
+-				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+-
+-					axis = $(this.handles[i], this.element);
+-
+-					//Checking the correct pad and border
+-					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+-
+-					//The padding type i have to apply...
+-					padPos = [ "padding",
+-						/ne|nw|n/.test(i) ? "Top" :
+-						/se|sw|s/.test(i) ? "Bottom" :
+-						/^e$/.test(i) ? "Right" : "Left" ].join("");
+-
+-					target.css(padPos, padWrapper);
+-
+-					this._proportionallyResize();
+-
+-				}
+-
+-				//TODO: What's that good for? There's not anything to be executed left
+-				if(!$(this.handles[i]).length) {
+-					continue;
+-				}
+-			}
+-		};
+-
+-		//TODO: make renderAxis a prototype function
+-		this._renderAxis(this.element);
+-
+-		this._handles = $(".ui-resizable-handle", this.element)
+-			.disableSelection();
+-
+-		//Matching axis name
+-		this._handles.mouseover(function() {
+-			if (!that.resizing) {
+-				if (this.className) {
+-					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+-				}
+-				//Axis, default = se
+-				that.axis = axis && axis[1] ? axis[1] : "se";
+-			}
+-		});
+-
+-		//If we want to auto hide the elements
+-		if (o.autoHide) {
+-			this._handles.hide();
+-			$(this.element)
+-				.addClass("ui-resizable-autohide")
+-				.mouseenter(function() {
+-					if (o.disabled) {
+-						return;
+-					}
+-					$(this).removeClass("ui-resizable-autohide");
+-					that._handles.show();
+-				})
+-				.mouseleave(function(){
+-					if (o.disabled) {
+-						return;
+-					}
+-					if (!that.resizing) {
+-						$(this).addClass("ui-resizable-autohide");
+-						that._handles.hide();
+-					}
+-				});
+-		}
+-
+-		//Initialize the mouse interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-
+-		this._mouseDestroy();
+-
+-		var wrapper,
+-			_destroy = function(exp) {
+-				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+-					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+-			};
+-
+-		//TODO: Unwrap at same DOM position
+-		if (this.elementIsWrapper) {
+-			_destroy(this.element);
+-			wrapper = this.element;
+-			this.originalElement.css({
+-				position: wrapper.css("position"),
+-				width: wrapper.outerWidth(),
+-				height: wrapper.outerHeight(),
+-				top: wrapper.css("top"),
+-				left: wrapper.css("left")
+-			}).insertAfter( wrapper );
+-			wrapper.remove();
+-		}
+-
+-		this.originalElement.css("resize", this.originalResizeStyle);
+-		_destroy(this.originalElement);
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-		var i, handle,
+-			capture = false;
+-
+-		for (i in this.handles) {
+-			handle = $(this.handles[i])[0];
+-			if (handle === event.target || $.contains(handle, event.target)) {
+-				capture = true;
+-			}
+-		}
+-
+-		return !this.options.disabled && capture;
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var curleft, curtop, cursor,
+-			o = this.options,
+-			iniPos = this.element.position(),
+-			el = this.element;
+-
+-		this.resizing = true;
+-
+-		// bugfix for http://dev.jquery.com/ticket/1749
+-		if ( (/absolute/).test( el.css("position") ) ) {
+-			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
+-		} else if (el.is(".ui-draggable")) {
+-			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
+-		}
+-
+-		this._renderProxy();
+-
+-		curleft = num(this.helper.css("left"));
+-		curtop = num(this.helper.css("top"));
+-
+-		if (o.containment) {
+-			curleft += $(o.containment).scrollLeft() || 0;
+-			curtop += $(o.containment).scrollTop() || 0;
+-		}
+-
+-		//Store needed variables
+-		this.offset = this.helper.offset();
+-		this.position = { left: curleft, top: curtop };
+-		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalPosition = { left: curleft, top: curtop };
+-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+-		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+-
+-		//Aspect Ratio
+-		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+-
+-		cursor = $(".ui-resizable-" + this.axis).css("cursor");
+-		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+-
+-		el.addClass("ui-resizable-resizing");
+-		this._propagate("start", event);
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Increase performance, avoid regex
+-		var data,
+-			el = this.helper, props = {},
+-			smp = this.originalMousePosition,
+-			a = this.axis,
+-			prevTop = this.position.top,
+-			prevLeft = this.position.left,
+-			prevWidth = this.size.width,
+-			prevHeight = this.size.height,
+-			dx = (event.pageX-smp.left)||0,
+-			dy = (event.pageY-smp.top)||0,
+-			trigger = this._change[a];
+-
+-		if (!trigger) {
+-			return false;
+-		}
+-
+-		// Calculate the attrs that will be change
+-		data = trigger.apply(this, [event, dx, dy]);
+-
+-		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+-		this._updateVirtualBoundaries(event.shiftKey);
+-		if (this._aspectRatio || event.shiftKey) {
+-			data = this._updateRatio(data, event);
+-		}
+-
+-		data = this._respectSize(data, event);
+-
+-		this._updateCache(data);
+-
+-		// plugins callbacks need to be called first
+-		this._propagate("resize", event);
+-
+-		if (this.position.top !== prevTop) {
+-			props.top = this.position.top + "px";
+-		}
+-		if (this.position.left !== prevLeft) {
+-			props.left = this.position.left + "px";
+-		}
+-		if (this.size.width !== prevWidth) {
+-			props.width = this.size.width + "px";
+-		}
+-		if (this.size.height !== prevHeight) {
+-			props.height = this.size.height + "px";
+-		}
+-		el.css(props);
+-
+-		if (!this._helper && this._proportionallyResizeElements.length) {
+-			this._proportionallyResize();
+-		}
+-
+-		// Call the user callback if the element was resized
+-		if ( ! $.isEmptyObject(props) ) {
+-			this._trigger("resize", event, this.ui());
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		this.resizing = false;
+-		var pr, ista, soffseth, soffsetw, s, left, top,
+-			o = this.options, that = this;
+-
+-		if(this._helper) {
+-
+-			pr = this._proportionallyResizeElements;
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+-			soffsetw = ista ? 0 : that.sizeDiff.width;
+-
+-			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-			if (!o.animate) {
+-				this.element.css($.extend(s, { top: top, left: left }));
+-			}
+-
+-			that.helper.height(that.size.height);
+-			that.helper.width(that.size.width);
+-
+-			if (this._helper && !o.animate) {
+-				this._proportionallyResize();
+-			}
+-		}
+-
+-		$("body").css("cursor", "auto");
+-
+-		this.element.removeClass("ui-resizable-resizing");
+-
+-		this._propagate("stop", event);
+-
+-		if (this._helper) {
+-			this.helper.remove();
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	_updateVirtualBoundaries: function(forceAspectRatio) {
+-		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+-			o = this.options;
+-
+-		b = {
+-			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+-			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+-			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+-			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+-		};
+-
+-		if(this._aspectRatio || forceAspectRatio) {
+-			// We want to create an enclosing box whose aspect ration is the requested one
+-			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+-			pMinWidth = b.minHeight * this.aspectRatio;
+-			pMinHeight = b.minWidth / this.aspectRatio;
+-			pMaxWidth = b.maxHeight * this.aspectRatio;
+-			pMaxHeight = b.maxWidth / this.aspectRatio;
+-
+-			if(pMinWidth > b.minWidth) {
+-				b.minWidth = pMinWidth;
+-			}
+-			if(pMinHeight > b.minHeight) {
+-				b.minHeight = pMinHeight;
+-			}
+-			if(pMaxWidth < b.maxWidth) {
+-				b.maxWidth = pMaxWidth;
+-			}
+-			if(pMaxHeight < b.maxHeight) {
+-				b.maxHeight = pMaxHeight;
+-			}
+-		}
+-		this._vBoundaries = b;
+-	},
+-
+-	_updateCache: function(data) {
+-		this.offset = this.helper.offset();
+-		if (isNumber(data.left)) {
+-			this.position.left = data.left;
+-		}
+-		if (isNumber(data.top)) {
+-			this.position.top = data.top;
+-		}
+-		if (isNumber(data.height)) {
+-			this.size.height = data.height;
+-		}
+-		if (isNumber(data.width)) {
+-			this.size.width = data.width;
+-		}
+-	},
+-
+-	_updateRatio: function( data ) {
+-
+-		var cpos = this.position,
+-			csize = this.size,
+-			a = this.axis;
+-
+-		if (isNumber(data.height)) {
+-			data.width = (data.height * this.aspectRatio);
+-		} else if (isNumber(data.width)) {
+-			data.height = (data.width / this.aspectRatio);
+-		}
+-
+-		if (a === "sw") {
+-			data.left = cpos.left + (csize.width - data.width);
+-			data.top = null;
+-		}
+-		if (a === "nw") {
+-			data.top = cpos.top + (csize.height - data.height);
+-			data.left = cpos.left + (csize.width - data.width);
+-		}
+-
+-		return data;
+-	},
+-
+-	_respectSize: function( data ) {
+-
+-		var o = this._vBoundaries,
+-			a = this.axis,
+-			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+-			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+-			dw = this.originalPosition.left + this.originalSize.width,
+-			dh = this.position.top + this.size.height,
+-			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+-		if (isminw) {
+-			data.width = o.minWidth;
+-		}
+-		if (isminh) {
+-			data.height = o.minHeight;
+-		}
+-		if (ismaxw) {
+-			data.width = o.maxWidth;
+-		}
+-		if (ismaxh) {
+-			data.height = o.maxHeight;
+-		}
+-
+-		if (isminw && cw) {
+-			data.left = dw - o.minWidth;
+-		}
+-		if (ismaxw && cw) {
+-			data.left = dw - o.maxWidth;
+-		}
+-		if (isminh && ch) {
+-			data.top = dh - o.minHeight;
+-		}
+-		if (ismaxh && ch) {
+-			data.top = dh - o.maxHeight;
+-		}
+-
+-		// fixing jump error on top/left - bug #2330
+-		if (!data.width && !data.height && !data.left && data.top) {
+-			data.top = null;
+-		} else if (!data.width && !data.height && !data.top && data.left) {
+-			data.left = null;
+-		}
+-
+-		return data;
+-	},
+-
+-	_proportionallyResize: function() {
+-
+-		if (!this._proportionallyResizeElements.length) {
+-			return;
+-		}
+-
+-		var i, j, borders, paddings, prel,
+-			element = this.helper || this.element;
+-
+-		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+-
+-			prel = this._proportionallyResizeElements[i];
+-
+-			if (!this.borderDif) {
+-				this.borderDif = [];
+-				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
+-				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
+-
+-				for ( j = 0; j < borders.length; j++ ) {
+-					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
+-				}
+-			}
+-
+-			prel.css({
+-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+-			});
+-
+-		}
+-
+-	},
+-
+-	_renderProxy: function() {
+-
+-		var el = this.element, o = this.options;
+-		this.elementOffset = el.offset();
+-
+-		if(this._helper) {
+-
+-			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+-
+-			this.helper.addClass(this._helper).css({
+-				width: this.element.outerWidth() - 1,
+-				height: this.element.outerHeight() - 1,
+-				position: "absolute",
+-				left: this.elementOffset.left +"px",
+-				top: this.elementOffset.top +"px",
+-				zIndex: ++o.zIndex //TODO: Don't modify option
+-			});
+-
+-			this.helper
+-				.appendTo("body")
+-				.disableSelection();
+-
+-		} else {
+-			this.helper = this.element;
+-		}
+-
+-	},
+-
+-	_change: {
+-		e: function(event, dx) {
+-			return { width: this.originalSize.width + dx };
+-		},
+-		w: function(event, dx) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { left: sp.left + dx, width: cs.width - dx };
+-		},
+-		n: function(event, dx, dy) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { top: sp.top + dy, height: cs.height - dy };
+-		},
+-		s: function(event, dx, dy) {
+-			return { height: this.originalSize.height + dy };
+-		},
+-		se: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		sw: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		},
+-		ne: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		nw: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		}
+-	},
+-
+-	_propagate: function(n, event) {
+-		$.ui.plugin.call(this, n, [event, this.ui()]);
+-		(n !== "resize" && this._trigger(n, event, this.ui()));
+-	},
+-
+-	plugins: {},
+-
+-	ui: function() {
+-		return {
+-			originalElement: this.originalElement,
+-			element: this.element,
+-			helper: this.helper,
+-			position: this.position,
+-			size: this.size,
+-			originalSize: this.originalSize,
+-			originalPosition: this.originalPosition
+-		};
+-	}
+-
+-});
+-
+-/*
+- * Resizable Extensions
+- */
+-
+-$.ui.plugin.add("resizable", "animate", {
+-
+-	stop: function( event ) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			pr = that._proportionallyResizeElements,
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+-			soffsetw = ista ? 0 : that.sizeDiff.width,
+-			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-		that.element.animate(
+-			$.extend(style, top && left ? { top: top, left: left } : {}), {
+-				duration: o.animateDuration,
+-				easing: o.animateEasing,
+-				step: function() {
+-
+-					var data = {
+-						width: parseInt(that.element.css("width"), 10),
+-						height: parseInt(that.element.css("height"), 10),
+-						top: parseInt(that.element.css("top"), 10),
+-						left: parseInt(that.element.css("left"), 10)
+-					};
+-
+-					if (pr && pr.length) {
+-						$(pr[0]).css({ width: data.width, height: data.height });
+-					}
+-
+-					// propagating resize, and updating values for each animation step
+-					that._updateCache(data);
+-					that._propagate("resize", event);
+-
+-				}
+-			}
+-		);
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "containment", {
+-
+-	start: function() {
+-		var element, p, co, ch, cw, width, height,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			el = that.element,
+-			oc = o.containment,
+-			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+-
+-		if (!ce) {
+-			return;
+-		}
+-
+-		that.containerElement = $(ce);
+-
+-		if (/document/.test(oc) || oc === document) {
+-			that.containerOffset = { left: 0, top: 0 };
+-			that.containerPosition = { left: 0, top: 0 };
+-
+-			that.parentData = {
+-				element: $(document), left: 0, top: 0,
+-				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+-			};
+-		}
+-
+-		// i'm a node, so compute top, left, right, bottom
+-		else {
+-			element = $(ce);
+-			p = [];
+-			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+-
+-			that.containerOffset = element.offset();
+-			that.containerPosition = element.position();
+-			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+-
+-			co = that.containerOffset;
+-			ch = that.containerSize.height;
+-			cw = that.containerSize.width;
+-			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
+-			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+-
+-			that.parentData = {
+-				element: ce, left: co.left, top: co.top, width: width, height: height
+-			};
+-		}
+-	},
+-
+-	resize: function( event ) {
+-		var woset, hoset, isParent, isOffsetRelative,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset, cp = that.position,
+-			pRatio = that._aspectRatio || event.shiftKey,
+-			cop = { top:0, left:0 }, ce = that.containerElement;
+-
+-		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
+-			cop = co;
+-		}
+-
+-		if (cp.left < (that._helper ? co.left : 0)) {
+-			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-			that.position.left = o.helper ? co.left : 0;
+-		}
+-
+-		if (cp.top < (that._helper ? co.top : 0)) {
+-			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-			that.position.top = that._helper ? co.top : 0;
+-		}
+-
+-		that.offset.left = that.parentData.left+that.position.left;
+-		that.offset.top = that.parentData.top+that.position.top;
+-
+-		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
+-		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
+-
+-		isParent = that.containerElement.get(0) === that.element.parent().get(0);
+-		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+-
+-		if(isParent && isOffsetRelative) {
+-			woset -= that.parentData.left;
+-		}
+-
+-		if (woset + that.size.width >= that.parentData.width) {
+-			that.size.width = that.parentData.width - woset;
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-		}
+-
+-		if (hoset + that.size.height >= that.parentData.height) {
+-			that.size.height = that.parentData.height - hoset;
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-		}
+-	},
+-
+-	stop: function(){
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset,
+-			cop = that.containerPosition,
+-			ce = that.containerElement,
+-			helper = $(that.helper),
+-			ho = helper.offset(),
+-			w = helper.outerWidth() - that.sizeDiff.width,
+-			h = helper.outerHeight() - that.sizeDiff.height;
+-
+-		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "alsoResize", {
+-
+-	start: function () {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			_store = function (exp) {
+-				$(exp).each(function() {
+-					var el = $(this);
+-					el.data("ui-resizable-alsoresize", {
+-						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+-						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+-					});
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
+-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+-		}else{
+-			_store(o.alsoResize);
+-		}
+-	},
+-
+-	resize: function (event, ui) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			delta = {
+-				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
+-				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
+-			},
+-
+-			_alsoResize = function (exp, c) {
+-				$(exp).each(function() {
+-					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+-						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+-
+-					$.each(css, function (i, prop) {
+-						var sum = (start[prop]||0) + (delta[prop]||0);
+-						if (sum && sum >= 0) {
+-							style[prop] = sum || null;
+-						}
+-					});
+-
+-					el.css(style);
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
+-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+-		}else{
+-			_alsoResize(o.alsoResize);
+-		}
+-	},
+-
+-	stop: function () {
+-		$(this).removeData("resizable-alsoresize");
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "ghost", {
+-
+-	start: function() {
+-
+-		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
+-
+-		that.ghost = that.originalElement.clone();
+-		that.ghost
+-			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+-			.addClass("ui-resizable-ghost")
+-			.addClass(typeof o.ghost === "string" ? o.ghost : "");
+-
+-		that.ghost.appendTo(that.helper);
+-
+-	},
+-
+-	resize: function(){
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost) {
+-			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+-		}
+-	},
+-
+-	stop: function() {
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost && that.helper) {
+-			that.helper.get(0).removeChild(that.ghost.get(0));
+-		}
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "grid", {
+-
+-	resize: function() {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			cs = that.size,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			a = that.axis,
+-			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
+-			gridX = (grid[0]||1),
+-			gridY = (grid[1]||1),
+-			ox = Math.round((cs.width - os.width) / gridX) * gridX,
+-			oy = Math.round((cs.height - os.height) / gridY) * gridY,
+-			newWidth = os.width + ox,
+-			newHeight = os.height + oy,
+-			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+-			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+-			isMinWidth = o.minWidth && (o.minWidth > newWidth),
+-			isMinHeight = o.minHeight && (o.minHeight > newHeight);
+-
+-		o.grid = grid;
+-
+-		if (isMinWidth) {
+-			newWidth = newWidth + gridX;
+-		}
+-		if (isMinHeight) {
+-			newHeight = newHeight + gridY;
+-		}
+-		if (isMaxWidth) {
+-			newWidth = newWidth - gridX;
+-		}
+-		if (isMaxHeight) {
+-			newHeight = newHeight - gridY;
+-		}
+-
+-		if (/^(se|s|e)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-		} else if (/^(ne)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-		} else if (/^(sw)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.left = op.left - ox;
+-		} else {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-			that.position.left = op.left - ox;
+-		}
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.widget("ui.selectable", $.ui.mouse, {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoRefresh: true,
+-		distance: 0,
+-		filter: "*",
+-		tolerance: "touch",
+-
+-		// callbacks
+-		selected: null,
+-		selecting: null,
+-		start: null,
+-		stop: null,
+-		unselected: null,
+-		unselecting: null
+-	},
+-	_create: function() {
+-		var selectees,
+-			that = this;
+-
+-		this.element.addClass("ui-selectable");
+-
+-		this.dragged = false;
+-
+-		// cache selectee children based on filter
+-		this.refresh = function() {
+-			selectees = $(that.options.filter, that.element[0]);
+-			selectees.addClass("ui-selectee");
+-			selectees.each(function() {
+-				var $this = $(this),
+-					pos = $this.offset();
+-				$.data(this, "selectable-item", {
+-					element: this,
+-					$element: $this,
+-					left: pos.left,
+-					top: pos.top,
+-					right: pos.left + $this.outerWidth(),
+-					bottom: pos.top + $this.outerHeight(),
+-					startselected: false,
+-					selected: $this.hasClass("ui-selected"),
+-					selecting: $this.hasClass("ui-selecting"),
+-					unselecting: $this.hasClass("ui-unselecting")
+-				});
+-			});
+-		};
+-		this.refresh();
+-
+-		this.selectees = selectees.addClass("ui-selectee");
+-
+-		this._mouseInit();
+-
+-		this.helper = $("<div class='ui-selectable-helper'></div>");
+-	},
+-
+-	_destroy: function() {
+-		this.selectees
+-			.removeClass("ui-selectee")
+-			.removeData("selectable-item");
+-		this.element
+-			.removeClass("ui-selectable ui-selectable-disabled");
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseStart: function(event) {
+-		var that = this,
+-			options = this.options;
+-
+-		this.opos = [event.pageX, event.pageY];
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		this.selectees = $(options.filter, this.element[0]);
+-
+-		this._trigger("start", event);
+-
+-		$(options.appendTo).append(this.helper);
+-		// position helper (lasso)
+-		this.helper.css({
+-			"left": event.pageX,
+-			"top": event.pageY,
+-			"width": 0,
+-			"height": 0
+-		});
+-
+-		if (options.autoRefresh) {
+-			this.refresh();
+-		}
+-
+-		this.selectees.filter(".ui-selected").each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.startselected = true;
+-			if (!event.metaKey && !event.ctrlKey) {
+-				selectee.$element.removeClass("ui-selected");
+-				selectee.selected = false;
+-				selectee.$element.addClass("ui-unselecting");
+-				selectee.unselecting = true;
+-				// selectable UNSELECTING callback
+-				that._trigger("unselecting", event, {
+-					unselecting: selectee.element
+-				});
+-			}
+-		});
+-
+-		$(event.target).parents().addBack().each(function() {
+-			var doSelect,
+-				selectee = $.data(this, "selectable-item");
+-			if (selectee) {
+-				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+-				selectee.$element
+-					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+-					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+-				selectee.unselecting = !doSelect;
+-				selectee.selecting = doSelect;
+-				selectee.selected = doSelect;
+-				// selectable (UN)SELECTING callback
+-				if (doSelect) {
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				} else {
+-					that._trigger("unselecting", event, {
+-						unselecting: selectee.element
+-					});
+-				}
+-				return false;
+-			}
+-		});
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		this.dragged = true;
+-
+-		if (this.options.disabled) {
+-			return;
+-		}
+-
+-		var tmp,
+-			that = this,
+-			options = this.options,
+-			x1 = this.opos[0],
+-			y1 = this.opos[1],
+-			x2 = event.pageX,
+-			y2 = event.pageY;
+-
+-		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+-		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+-		this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+-
+-		this.selectees.each(function() {
+-			var selectee = $.data(this, "selectable-item"),
+-				hit = false;
+-
+-			//prevent helper from being selected if appendTo: selectable
+-			if (!selectee || selectee.element === that.element[0]) {
+-				return;
+-			}
+-
+-			if (options.tolerance === "touch") {
+-				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+-			} else if (options.tolerance === "fit") {
+-				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+-			}
+-
+-			if (hit) {
+-				// SELECT
+-				if (selectee.selected) {
+-					selectee.$element.removeClass("ui-selected");
+-					selectee.selected = false;
+-				}
+-				if (selectee.unselecting) {
+-					selectee.$element.removeClass("ui-unselecting");
+-					selectee.unselecting = false;
+-				}
+-				if (!selectee.selecting) {
+-					selectee.$element.addClass("ui-selecting");
+-					selectee.selecting = true;
+-					// selectable SELECTING callback
+-					that._trigger("selecting", event, {
+-						selecting: selectee.element
+-					});
+-				}
+-			} else {
+-				// UNSELECT
+-				if (selectee.selecting) {
+-					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						selectee.$element.addClass("ui-selected");
+-						selectee.selected = true;
+-					} else {
+-						selectee.$element.removeClass("ui-selecting");
+-						selectee.selecting = false;
+-						if (selectee.startselected) {
+-							selectee.$element.addClass("ui-unselecting");
+-							selectee.unselecting = true;
+-						}
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-				if (selectee.selected) {
+-					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+-						selectee.$element.removeClass("ui-selected");
+-						selectee.selected = false;
+-
+-						selectee.$element.addClass("ui-unselecting");
+-						selectee.unselecting = true;
+-						// selectable UNSELECTING callback
+-						that._trigger("unselecting", event, {
+-							unselecting: selectee.element
+-						});
+-					}
+-				}
+-			}
+-		});
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-		var that = this;
+-
+-		this.dragged = false;
+-
+-		$(".ui-unselecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-unselecting");
+-			selectee.unselecting = false;
+-			selectee.startselected = false;
+-			that._trigger("unselected", event, {
+-				unselected: selectee.element
+-			});
+-		});
+-		$(".ui-selecting", this.element[0]).each(function() {
+-			var selectee = $.data(this, "selectable-item");
+-			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+-			selectee.selecting = false;
+-			selectee.selected = true;
+-			selectee.startselected = true;
+-			that._trigger("selected", event, {
+-				selected: selectee.element
+-			});
+-		});
+-		this._trigger("stop", event);
+-
+-		this.helper.remove();
+-
+-		return false;
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-/*jshint loopfunc: true */
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-function isFloating(item) {
+-	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+-}
+-
+-$.widget("ui.sortable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "sort",
+-	ready: false,
+-	options: {
+-		appendTo: "parent",
+-		axis: false,
+-		connectWith: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		dropOnEmpty: true,
+-		forcePlaceholderSize: false,
+-		forceHelperSize: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		items: "> *",
+-		opacity: false,
+-		placeholder: false,
+-		revert: false,
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		scope: "default",
+-		tolerance: "intersect",
+-		zIndex: 1000,
+-
+-		// callbacks
+-		activate: null,
+-		beforeStop: null,
+-		change: null,
+-		deactivate: null,
+-		out: null,
+-		over: null,
+-		receive: null,
+-		remove: null,
+-		sort: null,
+-		start: null,
+-		stop: null,
+-		update: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options;
+-		this.containerCache = {};
+-		this.element.addClass("ui-sortable");
+-
+-		//Get the items
+-		this.refresh();
+-
+-		//Let's determine if the items are being displayed horizontally
+-		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
+-
+-		//Let's determine the parent's offset
+-		this.offset = this.element.offset();
+-
+-		//Initialize mouse events for interaction
+-		this._mouseInit();
+-
+-		//We're ready to go
+-		this.ready = true;
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass("ui-sortable ui-sortable-disabled");
+-		this._mouseDestroy();
+-
+-		for ( var i = this.items.length - 1; i >= 0; i-- ) {
+-			this.items[i].item.removeData(this.widgetName + "-item");
+-		}
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value){
+-		if ( key === "disabled" ) {
+-			this.options[ key ] = value;
+-
+-			this.widget().toggleClass( "ui-sortable-disabled", !!value );
+-		} else {
+-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
+-			$.Widget.prototype._setOption.apply(this, arguments);
+-		}
+-	},
+-
+-	_mouseCapture: function(event, overrideHandle) {
+-		var currentItem = null,
+-			validHandle = false,
+-			that = this;
+-
+-		if (this.reverting) {
+-			return false;
+-		}
+-
+-		if(this.options.disabled || this.options.type === "static") {
+-			return false;
+-		}
+-
+-		//We have to refresh the items data once first
+-		this._refreshItems(event);
+-
+-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+-		$(event.target).parents().each(function() {
+-			if($.data(this, that.widgetName + "-item") === that) {
+-				currentItem = $(this);
+-				return false;
+-			}
+-		});
+-		if($.data(event.target, that.widgetName + "-item") === that) {
+-			currentItem = $(event.target);
+-		}
+-
+-		if(!currentItem) {
+-			return false;
+-		}
+-		if(this.options.handle && !overrideHandle) {
+-			$(this.options.handle, currentItem).find("*").addBack().each(function() {
+-				if(this === event.target) {
+-					validHandle = true;
+-				}
+-			});
+-			if(!validHandle) {
+-				return false;
+-			}
+-		}
+-
+-		this.currentItem = currentItem;
+-		this._removeCurrentsFromItems();
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event, overrideHandle, noActivation) {
+-
+-		var i, body,
+-			o = this.options;
+-
+-		this.currentContainer = this;
+-
+-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+-		this.refreshPositions();
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Get the next scrolling parent
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.currentItem.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		// Only after we got the offset, we can change the helper's position to absolute
+-		// TODO: Still need to figure out a way to make relative sorting possible
+-		this.helper.css("position", "absolute");
+-		this.cssPosition = this.helper.css("position");
+-
+-		//Generate the original position
+-		this.originalPosition = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Cache the former DOM position
+-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+-
+-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.currentItem.hide();
+-		}
+-
+-		//Create the placeholder
+-		this._createPlaceholder();
+-
+-		//Set a containment if given in the options
+-		if(o.containment) {
+-			this._setContainment();
+-		}
+-
+-		if( o.cursor && o.cursor !== "auto" ) { // cursor option
+-			body = this.document.find( "body" );
+-
+-			// support: IE
+-			this.storedCursor = body.css( "cursor" );
+-			body.css( "cursor", o.cursor );
+-
+-			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+-		}
+-
+-		if(o.opacity) { // opacity option
+-			if (this.helper.css("opacity")) {
+-				this._storedOpacity = this.helper.css("opacity");
+-			}
+-			this.helper.css("opacity", o.opacity);
+-		}
+-
+-		if(o.zIndex) { // zIndex option
+-			if (this.helper.css("zIndex")) {
+-				this._storedZIndex = this.helper.css("zIndex");
+-			}
+-			this.helper.css("zIndex", o.zIndex);
+-		}
+-
+-		//Prepare scrolling
+-		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-			this.overflowOffset = this.scrollParent.offset();
+-		}
+-
+-		//Call callbacks
+-		this._trigger("start", event, this._uiHash());
+-
+-		//Recache the helper size
+-		if(!this._preserveHelperProportions) {
+-			this._cacheHelperProportions();
+-		}
+-
+-
+-		//Post "activate" events to possible containers
+-		if( !noActivation ) {
+-			for ( i = this.containers.length - 1; i >= 0; i-- ) {
+-				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+-			}
+-		}
+-
+-		//Prepare possible droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-		this.dragging = true;
+-
+-		this.helper.addClass("ui-sortable-helper");
+-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		return true;
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-		var i, item, itemElement, intersection,
+-			o = this.options,
+-			scrolled = false;
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		if (!this.lastPositionAbs) {
+-			this.lastPositionAbs = this.positionAbs;
+-		}
+-
+-		//Do scrolling
+-		if(this.options.scroll) {
+-			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-
+-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-
+-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-
+-			} else {
+-
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-
+-			}
+-
+-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-				$.ui.ddmanager.prepareOffsets(this, event);
+-			}
+-		}
+-
+-		//Regenerate the absolute position used for position checks
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Set the helper position
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-
+-		//Rearrange
+-		for (i = this.items.length - 1; i >= 0; i--) {
+-
+-			//Cache variables and intersection, continue if no intersection
+-			item = this.items[i];
+-			itemElement = item.item[0];
+-			intersection = this._intersectsWithPointer(item);
+-			if (!intersection) {
+-				continue;
+-			}
+-
+-			// Only put the placeholder inside the current Container, skip all
+-			// items form other containers. This works because when moving
+-			// an item from one container to another the
+-			// currentContainer is switched before the placeholder is moved.
+-			//
+-			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
+-			// beetween the outer and inner container.
+-			if (item.instance !== this.currentContainer) {
+-				continue;
+-			}
+-
+-			// cannot intersect with itself
+-			// no useless actions that have been done before
+-			// no action if the item moved is the parent of the item checked
+-			if (itemElement !== this.currentItem[0] &&
+-				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+-				!$.contains(this.placeholder[0], itemElement) &&
+-				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+-			) {
+-
+-				this.direction = intersection === 1 ? "down" : "up";
+-
+-				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+-					this._rearrange(event, item);
+-				} else {
+-					break;
+-				}
+-
+-				this._trigger("change", event, this._uiHash());
+-				break;
+-			}
+-		}
+-
+-		//Post events to containers
+-		this._contactContainers(event);
+-
+-		//Interconnect with droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		//Call callbacks
+-		this._trigger("sort", event, this._uiHash());
+-
+-		this.lastPositionAbs = this.positionAbs;
+-		return false;
+-
+-	},
+-
+-	_mouseStop: function(event, noPropagation) {
+-
+-		if(!event) {
+-			return;
+-		}
+-
+-		//If we are using droppables, inform the manager about the drop
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			$.ui.ddmanager.drop(this, event);
+-		}
+-
+-		if(this.options.revert) {
+-			var that = this,
+-				cur = this.placeholder.offset(),
+-				axis = this.options.axis,
+-				animation = {};
+-
+-			if ( !axis || axis === "x" ) {
+-				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
+-			}
+-			if ( !axis || axis === "y" ) {
+-				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
+-			}
+-			this.reverting = true;
+-			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+-				that._clear(event);
+-			});
+-		} else {
+-			this._clear(event, noPropagation);
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.dragging) {
+-
+-			this._mouseUp({ target: null });
+-
+-			if(this.options.helper === "original") {
+-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-			} else {
+-				this.currentItem.show();
+-			}
+-
+-			//Post deactivating events to containers
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", null, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		if (this.placeholder) {
+-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-			if(this.placeholder[0].parentNode) {
+-				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-			}
+-			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+-				this.helper.remove();
+-			}
+-
+-			$.extend(this, {
+-				helper: null,
+-				dragging: false,
+-				reverting: false,
+-				_noFinalSort: null
+-			});
+-
+-			if(this.domPosition.prev) {
+-				$(this.domPosition.prev).after(this.currentItem);
+-			} else {
+-				$(this.domPosition.parent).prepend(this.currentItem);
+-			}
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	serialize: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			str = [];
+-		o = o || {};
+-
+-		$(items).each(function() {
+-			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+-			if (res) {
+-				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+-			}
+-		});
+-
+-		if(!str.length && o.key) {
+-			str.push(o.key + "=");
+-		}
+-
+-		return str.join("&");
+-
+-	},
+-
+-	toArray: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			ret = [];
+-
+-		o = o || {};
+-
+-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+-		return ret;
+-
+-	},
+-
+-	/* Be careful with the following core functions */
+-	_intersectsWith: function(item) {
+-
+-		var x1 = this.positionAbs.left,
+-			x2 = x1 + this.helperProportions.width,
+-			y1 = this.positionAbs.top,
+-			y2 = y1 + this.helperProportions.height,
+-			l = item.left,
+-			r = l + item.width,
+-			t = item.top,
+-			b = t + item.height,
+-			dyClick = this.offset.click.top,
+-			dxClick = this.offset.click.left,
+-			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+-			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+-			isOverElement = isOverElementHeight && isOverElementWidth;
+-
+-		if ( this.options.tolerance === "pointer" ||
+-			this.options.forcePointerForContainers ||
+-			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+-		) {
+-			return isOverElement;
+-		} else {
+-
+-			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+-				x2 - (this.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+-				y2 - (this.helperProportions.height / 2) < b ); // Top Half
+-
+-		}
+-	},
+-
+-	_intersectsWithPointer: function(item) {
+-
+-		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+-			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+-			isOverElement = isOverElementHeight && isOverElementWidth,
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (!isOverElement) {
+-			return false;
+-		}
+-
+-		return this.floating ?
+-			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+-			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+-
+-	},
+-
+-	_intersectsWithSides: function(item) {
+-
+-		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+-			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (this.floating && horizontalDirection) {
+-			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+-		} else {
+-			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+-		}
+-
+-	},
+-
+-	_getDragVerticalDirection: function() {
+-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+-		return delta !== 0 && (delta > 0 ? "down" : "up");
+-	},
+-
+-	_getDragHorizontalDirection: function() {
+-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+-		return delta !== 0 && (delta > 0 ? "right" : "left");
+-	},
+-
+-	refresh: function(event) {
+-		this._refreshItems(event);
+-		this.refreshPositions();
+-		return this;
+-	},
+-
+-	_connectWith: function() {
+-		var options = this.options;
+-		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+-	},
+-
+-	_getItemsAsjQuery: function(connected) {
+-
+-		var i, j, cur, inst,
+-			items = [],
+-			queries = [],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && connected) {
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for ( j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+-					}
+-				}
+-			}
+-		}
+-
+-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+-
+-		for (i = queries.length - 1; i >= 0; i--){
+-			queries[i][0].each(function() {
+-				items.push(this);
+-			});
+-		}
+-
+-		return $(items);
+-
+-	},
+-
+-	_removeCurrentsFromItems: function() {
+-
+-		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+-
+-		this.items = $.grep(this.items, function (item) {
+-			for (var j=0; j < list.length; j++) {
+-				if(list[j] === item.item[0]) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		});
+-
+-	},
+-
+-	_refreshItems: function(event) {
+-
+-		this.items = [];
+-		this.containers = [this];
+-
+-		var i, j, cur, inst, targetData, _queries, item, queriesLength,
+-			items = this.items,
+-			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for (j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+-						this.containers.push(inst);
+-					}
+-				}
+-			}
+-		}
+-
+-		for (i = queries.length - 1; i >= 0; i--) {
+-			targetData = queries[i][1];
+-			_queries = queries[i][0];
+-
+-			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+-				item = $(_queries[j]);
+-
+-				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+-
+-				items.push({
+-					item: item,
+-					instance: targetData,
+-					width: 0, height: 0,
+-					left: 0, top: 0
+-				});
+-			}
+-		}
+-
+-	},
+-
+-	refreshPositions: function(fast) {
+-
+-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+-		if(this.offsetParent && this.helper) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		var i, item, t, p;
+-
+-		for (i = this.items.length - 1; i >= 0; i--){
+-			item = this.items[i];
+-
+-			//We ignore calculating positions of all connected containers when we're not over them
+-			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+-				continue;
+-			}
+-
+-			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+-
+-			if (!fast) {
+-				item.width = t.outerWidth();
+-				item.height = t.outerHeight();
+-			}
+-
+-			p = t.offset();
+-			item.left = p.left;
+-			item.top = p.top;
+-		}
+-
+-		if(this.options.custom && this.options.custom.refreshContainers) {
+-			this.options.custom.refreshContainers.call(this);
+-		} else {
+-			for (i = this.containers.length - 1; i >= 0; i--){
+-				p = this.containers[i].element.offset();
+-				this.containers[i].containerCache.left = p.left;
+-				this.containers[i].containerCache.top = p.top;
+-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
+-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	_createPlaceholder: function(that) {
+-		that = that || this;
+-		var className,
+-			o = that.options;
+-
+-		if(!o.placeholder || o.placeholder.constructor === String) {
+-			className = o.placeholder;
+-			o.placeholder = {
+-				element: function() {
+-
+-					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+-						element = $( "<" + nodeName + ">", that.document[0] )
+-							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+-							.removeClass("ui-sortable-helper");
+-
+-					if ( nodeName === "tr" ) {
+-						that.currentItem.children().each(function() {
+-							$( "<td>&#160;</td>", that.document[0] )
+-								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+-								.appendTo( element );
+-						});
+-					} else if ( nodeName === "img" ) {
+-						element.attr( "src", that.currentItem.attr( "src" ) );
+-					}
+-
+-					if ( !className ) {
+-						element.css( "visibility", "hidden" );
+-					}
+-
+-					return element;
+-				},
+-				update: function(container, p) {
+-
+-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+-					if(className && !o.forcePlaceholderSize) {
+-						return;
+-					}
+-
+-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+-					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+-					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+-				}
+-			};
+-		}
+-
+-		//Create the placeholder
+-		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+-
+-		//Append it after the actual current item
+-		that.currentItem.after(that.placeholder);
+-
+-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+-		o.placeholder.update(that, that.placeholder);
+-
+-	},
+-
+-	_contactContainers: function(event) {
+-		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
+-			innermostContainer = null,
+-			innermostIndex = null;
+-
+-		// get innermost container that intersects with item
+-		for (i = this.containers.length - 1; i >= 0; i--) {
+-
+-			// never consider a container that's located within the item itself
+-			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+-				continue;
+-			}
+-
+-			if(this._intersectsWith(this.containers[i].containerCache)) {
+-
+-				// if we've already found a container and it's more "inner" than this, then continue
+-				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+-					continue;
+-				}
+-
+-				innermostContainer = this.containers[i];
+-				innermostIndex = i;
+-
+-			} else {
+-				// container doesn't intersect. trigger "out" event if necessary
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", event, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		// if no intersecting containers found, return
+-		if(!innermostContainer) {
+-			return;
+-		}
+-
+-		// move the item into the container if it's not there already
+-		if(this.containers.length === 1) {
+-			if (!this.containers[innermostIndex].containerCache.over) {
+-				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-				this.containers[innermostIndex].containerCache.over = 1;
+-			}
+-		} else {
+-
+-			//When entering a new container, we will find the item with the least distance and append our item near it
+-			dist = 10000;
+-			itemWithLeastDistance = null;
+-			floating = innermostContainer.floating || isFloating(this.currentItem);
+-			posProperty = floating ? "left" : "top";
+-			sizeProperty = floating ? "width" : "height";
+-			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
+-			for (j = this.items.length - 1; j >= 0; j--) {
+-				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+-					continue;
+-				}
+-				if(this.items[j].item[0] === this.currentItem[0]) {
+-					continue;
+-				}
+-				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
+-					continue;
+-				}
+-				cur = this.items[j].item.offset()[posProperty];
+-				nearBottom = false;
+-				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+-					nearBottom = true;
+-					cur += this.items[j][sizeProperty];
+-				}
+-
+-				if(Math.abs(cur - base) < dist) {
+-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+-					this.direction = nearBottom ? "up": "down";
+-				}
+-			}
+-
+-			//Check if dropOnEmpty is enabled
+-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+-				return;
+-			}
+-
+-			if(this.currentContainer === this.containers[innermostIndex]) {
+-				return;
+-			}
+-
+-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+-			this._trigger("change", event, this._uiHash());
+-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+-			this.currentContainer = this.containers[innermostIndex];
+-
+-			//Update the placeholder
+-			this.options.placeholder.update(this.currentContainer, this.placeholder);
+-
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		}
+-
+-
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+-
+-		//Add the helper to the DOM if that didn't happen already
+-		if(!helper.parents("body").length) {
+-			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+-		}
+-
+-		if(helper[0] === this.currentItem[0]) {
+-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+-		}
+-
+-		if(!helper[0].style.width || o.forceHelperSize) {
+-			helper.width(this.currentItem.width());
+-		}
+-		if(!helper[0].style.height || o.forceHelperSize) {
+-			helper.height(this.currentItem.height());
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		// This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		// with an ugly IE fix
+-		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.currentItem.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var ce, co, over,
+-			o = this.options;
+-		if(o.containment === "parent") {
+-			o.containment = this.helper[0].parentNode;
+-		}
+-		if(o.containment === "document" || o.containment === "window") {
+-			this.containment = [
+-				0 - this.offset.relative.left - this.offset.parent.left,
+-				0 - this.offset.relative.top - this.offset.parent.top,
+-				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
+-				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment)) {
+-			ce = $(o.containment)[0];
+-			co = $(o.containment).offset();
+-			over = ($(ce).css("overflow") !== "hidden");
+-
+-			this.containment = [
+-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+-			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var top, left,
+-			o = this.options,
+-			pageX = event.pageX,
+-			pageY = event.pageY,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		// This is another very weird special case that only happens for relative elements:
+-		// 1. If the css position is relative
+-		// 2. and the scroll parent is the document or similar to the offset parent
+-		// we have to refresh the relative offset during the scroll so there are no jumps
+-		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+-			this.offset.relative = this._getRelativeOffset();
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-
+-			if(this.containment) {
+-				if(event.pageX - this.offset.click.left < this.containment[0]) {
+-					pageX = this.containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < this.containment[1]) {
+-					pageY = this.containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > this.containment[2]) {
+-					pageX = this.containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > this.containment[3]) {
+-					pageY = this.containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+-				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+-				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																// The absolute mouse position
+-				this.offset.click.top -													// Click offset (relative to the element)
+-				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX -																// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_rearrange: function(event, i, a, hardRefresh) {
+-
+-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+-
+-		//Various things done here to improve the performance:
+-		// 1. we create a setTimeout, that calls refreshPositions
+-		// 2. on the instance, we have a counter variable, that get's higher after every append
+-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+-		// 4. this lets only the last addition to the timeout stack through
+-		this.counter = this.counter ? ++this.counter : 1;
+-		var counter = this.counter;
+-
+-		this._delay(function() {
+-			if(counter === this.counter) {
+-				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+-			}
+-		});
+-
+-	},
+-
+-	_clear: function(event, noPropagation) {
+-
+-		this.reverting = false;
+-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+-		// everything else normalized again
+-		var i,
+-			delayedTriggers = [];
+-
+-		// We first have to update the dom position of the actual currentItem
+-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+-		if(!this._noFinalSort && this.currentItem.parent().length) {
+-			this.placeholder.before(this.currentItem);
+-		}
+-		this._noFinalSort = null;
+-
+-		if(this.helper[0] === this.currentItem[0]) {
+-			for(i in this._storedCSS) {
+-				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+-					this._storedCSS[i] = "";
+-				}
+-			}
+-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-		} else {
+-			this.currentItem.show();
+-		}
+-
+-		if(this.fromOutside && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+-		}
+-		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+-		}
+-
+-		// Check if the items Container has Changed and trigger appropriate
+-		// events.
+-		if (this !== this.currentContainer) {
+-			if(!noPropagation) {
+-				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
+-			}
+-		}
+-
+-
+-		//Post events to containers
+-		for (i = this.containers.length - 1; i >= 0; i--){
+-			if(!noPropagation) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-			}
+-			if(this.containers[i].containerCache.over) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-				this.containers[i].containerCache.over = 0;
+-			}
+-		}
+-
+-		//Do what was originally in plugins
+-		if ( this.storedCursor ) {
+-			this.document.find( "body" ).css( "cursor", this.storedCursor );
+-			this.storedStylesheet.remove();
+-		}
+-		if(this._storedOpacity) {
+-			this.helper.css("opacity", this._storedOpacity);
+-		}
+-		if(this._storedZIndex) {
+-			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+-		}
+-
+-		this.dragging = false;
+-		if(this.cancelHelperRemoval) {
+-			if(!noPropagation) {
+-				this._trigger("beforeStop", event, this._uiHash());
+-				for (i=0; i < delayedTriggers.length; i++) {
+-					delayedTriggers[i].call(this, event);
+-				} //Trigger all delayed events
+-				this._trigger("stop", event, this._uiHash());
+-			}
+-
+-			this.fromOutside = false;
+-			return false;
+-		}
+-
+-		if(!noPropagation) {
+-			this._trigger("beforeStop", event, this._uiHash());
+-		}
+-
+-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-
+-		if(!noPropagation) {
+-			for (i=0; i < delayedTriggers.length; i++) {
+-				delayedTriggers[i].call(this, event);
+-			} //Trigger all delayed events
+-			this._trigger("stop", event, this._uiHash());
+-		}
+-
+-		this.fromOutside = false;
+-		return true;
+-
+-	},
+-
+-	_trigger: function() {
+-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+-			this.cancel();
+-		}
+-	},
+-
+-	_uiHash: function(_inst) {
+-		var inst = _inst || this;
+-		return {
+-			helper: inst.helper,
+-			placeholder: inst.placeholder || $([]),
+-			position: inst.position,
+-			originalPosition: inst.originalPosition,
+-			offset: inst.positionAbs,
+-			item: inst.currentItem,
+-			sender: _inst ? _inst.element : null
+-		};
+-	}
+-
+-});
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var uid = 0,
+-	hideProps = {},
+-	showProps = {};
+-
+-hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
+-	hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
+-showProps.height = showProps.paddingTop = showProps.paddingBottom =
+-	showProps.borderTopWidth = showProps.borderBottomWidth = "show";
+-
+-$.widget( "ui.accordion", {
+-	version: "1.10.3",
+-	options: {
+-		active: 0,
+-		animate: {},
+-		collapsible: false,
+-		event: "click",
+-		header: "> li > :first-child,> :not(li):even",
+-		heightStyle: "auto",
+-		icons: {
+-			activeHeader: "ui-icon-triangle-1-s",
+-			header: "ui-icon-triangle-1-e"
+-		},
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null
+-	},
+-
+-	_create: function() {
+-		var options = this.options;
+-		this.prevShow = this.prevHide = $();
+-		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+-			// ARIA
+-			.attr( "role", "tablist" );
+-
+-		// don't allow collapsible: false and active: false / null
+-		if ( !options.collapsible && (options.active === false || options.active == null) ) {
+-			options.active = 0;
+-		}
+-
+-		this._processPanels();
+-		// handle negative values
+-		if ( options.active < 0 ) {
+-			options.active += this.headers.length;
+-		}
+-		this._refresh();
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			header: this.active,
+-			panel: !this.active.length ? $() : this.active.next(),
+-			content: !this.active.length ? $() : this.active.next()
+-		};
+-	},
+-
+-	_createIcons: function() {
+-		var icons = this.options.icons;
+-		if ( icons ) {
+-			$( "<span>" )
+-				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+-				.prependTo( this.headers );
+-			this.active.children( ".ui-accordion-header-icon" )
+-				.removeClass( icons.header )
+-				.addClass( icons.activeHeader );
+-			this.headers.addClass( "ui-accordion-icons" );
+-		}
+-	},
+-
+-	_destroyIcons: function() {
+-		this.headers
+-			.removeClass( "ui-accordion-icons" )
+-			.children( ".ui-accordion-header-icon" )
+-				.remove();
+-	},
+-
+-	_destroy: function() {
+-		var contents;
+-
+-		// clean up main element
+-		this.element
+-			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+-			.removeAttr( "role" );
+-
+-		// clean up headers
+-		this.headers
+-			.removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-selected" )
+-			.removeAttr( "aria-controls" )
+-			.removeAttr( "tabIndex" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		this._destroyIcons();
+-
+-		// clean up content panels
+-		contents = this.headers.next()
+-			.css( "display", "" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-expanded" )
+-			.removeAttr( "aria-hidden" )
+-			.removeAttr( "aria-labelledby" )
+-			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+-			.each(function() {
+-				if ( /^ui-accordion/.test( this.id ) ) {
+-					this.removeAttribute( "id" );
+-				}
+-			});
+-		if ( this.options.heightStyle !== "content" ) {
+-			contents.css( "height", "" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "event" ) {
+-			if ( this.options.event ) {
+-				this._off( this.headers, this.options.event );
+-			}
+-			this._setupEvents( value );
+-		}
+-
+-		this._super( key, value );
+-
+-		// setting collapsible: false while collapsed; open first panel
+-		if ( key === "collapsible" && !value && this.options.active === false ) {
+-			this._activate( 0 );
+-		}
+-
+-		if ( key === "icons" ) {
+-			this._destroyIcons();
+-			if ( value ) {
+-				this._createIcons();
+-			}
+-		}
+-
+-		// #5332 - opacity doesn't cascade to positioned elements in IE
+-		// so we need to add the disabled class to the headers and panels
+-		if ( key === "disabled" ) {
+-			this.headers.add( this.headers.next() )
+-				.toggleClass( "ui-state-disabled", !!value );
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		if ( event.altKey || event.ctrlKey ) {
+-			return;
+-		}
+-
+-		var keyCode = $.ui.keyCode,
+-			length = this.headers.length,
+-			currentIndex = this.headers.index( event.target ),
+-			toFocus = false;
+-
+-		switch ( event.keyCode ) {
+-			case keyCode.RIGHT:
+-			case keyCode.DOWN:
+-				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+-				break;
+-			case keyCode.LEFT:
+-			case keyCode.UP:
+-				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+-				break;
+-			case keyCode.SPACE:
+-			case keyCode.ENTER:
+-				this._eventHandler( event );
+-				break;
+-			case keyCode.HOME:
+-				toFocus = this.headers[ 0 ];
+-				break;
+-			case keyCode.END:
+-				toFocus = this.headers[ length - 1 ];
+-				break;
+-		}
+-
+-		if ( toFocus ) {
+-			$( event.target ).attr( "tabIndex", -1 );
+-			$( toFocus ).attr( "tabIndex", 0 );
+-			toFocus.focus();
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_panelKeyDown : function( event ) {
+-		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+-			$( event.currentTarget ).prev().focus();
+-		}
+-	},
+-
+-	refresh: function() {
+-		var options = this.options;
+-		this._processPanels();
+-
+-		// was collapsed or no panel
+-		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// active false only when collapsible is true
+-		} else if ( options.active === false ) {
+-			this._activate( 0 );
+-		// was active, but active panel is gone
+-		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining panel are disabled
+-			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous panel
+-			} else {
+-				this._activate( Math.max( 0, options.active - 1 ) );
+-			}
+-		// was active, active panel still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.headers.index( this.active );
+-		}
+-
+-		this._destroyIcons();
+-
+-		this._refresh();
+-	},
+-
+-	_processPanels: function() {
+-		this.headers = this.element.find( this.options.header )
+-			.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+-
+-		this.headers.next()
+-			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+-			.filter(":not(.ui-accordion-content-active)")
+-			.hide();
+-	},
+-
+-	_refresh: function() {
+-		var maxHeight,
+-			options = this.options,
+-			heightStyle = options.heightStyle,
+-			parent = this.element.parent(),
+-			accordionId = this.accordionId = "ui-accordion-" +
+-				(this.element.attr( "id" ) || ++uid);
+-
+-		this.active = this._findActive( options.active )
+-			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+-			.removeClass( "ui-corner-all" );
+-		this.active.next()
+-			.addClass( "ui-accordion-content-active" )
+-			.show();
+-
+-		this.headers
+-			.attr( "role", "tab" )
+-			.each(function( i ) {
+-				var header = $( this ),
+-					headerId = header.attr( "id" ),
+-					panel = header.next(),
+-					panelId = panel.attr( "id" );
+-				if ( !headerId ) {
+-					headerId = accordionId + "-header-" + i;
+-					header.attr( "id", headerId );
+-				}
+-				if ( !panelId ) {
+-					panelId = accordionId + "-panel-" + i;
+-					panel.attr( "id", panelId );
+-				}
+-				header.attr( "aria-controls", panelId );
+-				panel.attr( "aria-labelledby", headerId );
+-			})
+-			.next()
+-				.attr( "role", "tabpanel" );
+-
+-		this.headers
+-			.not( this.active )
+-			.attr({
+-				"aria-selected": "false",
+-				tabIndex: -1
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "false",
+-					"aria-hidden": "true"
+-				})
+-				.hide();
+-
+-		// make sure at least one header is in the tab order
+-		if ( !this.active.length ) {
+-			this.headers.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active.attr({
+-				"aria-selected": "true",
+-				tabIndex: 0
+-			})
+-			.next()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-
+-		this._createIcons();
+-
+-		this._setupEvents( options.event );
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.headers.each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.headers.next()
+-				.each(function() {
+-					$( this ).height( Math.max( 0, maxHeight -
+-						$( this ).innerHeight() + $( this ).height() ) );
+-				})
+-				.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.headers.next()
+-				.each(function() {
+-					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+-				})
+-				.height( maxHeight );
+-		}
+-	},
+-
+-	_activate: function( index ) {
+-		var active = this._findActive( index )[ 0 ];
+-
+-		// trying to activate the already active panel
+-		if ( active === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the currently active header
+-		active = active || this.active[ 0 ];
+-
+-		this._eventHandler({
+-			target: active,
+-			currentTarget: active,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( selector ) {
+-		return typeof selector === "number" ? this.headers.eq( selector ) : $();
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			keydown: "_keydown"
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.headers.add( this.headers.next() ) );
+-		this._on( this.headers, events );
+-		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+-		this._hoverable( this.headers );
+-		this._focusable( this.headers );
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			clicked = $( event.currentTarget ),
+-			clickedIsActive = clicked[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : clicked.next(),
+-			toHide = active.next(),
+-			eventData = {
+-				oldHeader: active,
+-				oldPanel: toHide,
+-				newHeader: collapsing ? $() : clicked,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if (
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.headers.index( clicked );
+-
+-		// when the call to ._toggle() comes after the class changes
+-		// it causes a very odd bug in IE 8 (see #6720)
+-		this.active = clickedIsActive ? $() : clicked;
+-		this._toggle( eventData );
+-
+-		// switch classes
+-		// corner classes on the previously active header stay after the animation
+-		active.removeClass( "ui-accordion-header-active ui-state-active" );
+-		if ( options.icons ) {
+-			active.children( ".ui-accordion-header-icon" )
+-				.removeClass( options.icons.activeHeader )
+-				.addClass( options.icons.header );
+-		}
+-
+-		if ( !clickedIsActive ) {
+-			clicked
+-				.removeClass( "ui-corner-all" )
+-				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+-			if ( options.icons ) {
+-				clicked.children( ".ui-accordion-header-icon" )
+-					.removeClass( options.icons.header )
+-					.addClass( options.icons.activeHeader );
+-			}
+-
+-			clicked
+-				.next()
+-				.addClass( "ui-accordion-content-active" );
+-		}
+-	},
+-
+-	_toggle: function( data ) {
+-		var toShow = data.newPanel,
+-			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+-
+-		// handle activating a panel during the animation for another activation
+-		this.prevShow.add( this.prevHide ).stop( true, true );
+-		this.prevShow = toShow;
+-		this.prevHide = toHide;
+-
+-		if ( this.options.animate ) {
+-			this._animate( toShow, toHide, data );
+-		} else {
+-			toHide.hide();
+-			toShow.show();
+-			this._toggleComplete( data );
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		toHide.prev().attr( "aria-selected", "false" );
+-		// if we're switching panels, remove the old header from the tab order
+-		// if we're opening from collapsed state, remove the previous header from the tab order
+-		// if we're collapsing, then keep the collapsing header in the tab order
+-		if ( toShow.length && toHide.length ) {
+-			toHide.prev().attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.headers.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow
+-			.attr({
+-				"aria-expanded": "true",
+-				"aria-hidden": "false"
+-			})
+-			.prev()
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-	},
+-
+-	_animate: function( toShow, toHide, data ) {
+-		var total, easing, duration,
+-			that = this,
+-			adjust = 0,
+-			down = toShow.length &&
+-				( !toHide.length || ( toShow.index() < toHide.index() ) ),
+-			animate = this.options.animate || {},
+-			options = down && animate.down || animate,
+-			complete = function() {
+-				that._toggleComplete( data );
+-			};
+-
+-		if ( typeof options === "number" ) {
+-			duration = options;
+-		}
+-		if ( typeof options === "string" ) {
+-			easing = options;
+-		}
+-		// fall back from options to animation in case of partial down settings
+-		easing = easing || options.easing || animate.easing;
+-		duration = duration || options.duration || animate.duration;
+-
+-		if ( !toHide.length ) {
+-			return toShow.animate( showProps, duration, easing, complete );
+-		}
+-		if ( !toShow.length ) {
+-			return toHide.animate( hideProps, duration, easing, complete );
+-		}
+-
+-		total = toShow.show().outerHeight();
+-		toHide.animate( hideProps, {
+-			duration: duration,
+-			easing: easing,
+-			step: function( now, fx ) {
+-				fx.now = Math.round( now );
+-			}
+-		});
+-		toShow
+-			.hide()
+-			.animate( showProps, {
+-				duration: duration,
+-				easing: easing,
+-				complete: complete,
+-				step: function( now, fx ) {
+-					fx.now = Math.round( now );
+-					if ( fx.prop !== "height" ) {
+-						adjust += fx.now;
+-					} else if ( that.options.heightStyle !== "content" ) {
+-						fx.now = Math.round( total - toHide.outerHeight() - adjust );
+-						adjust = 0;
+-					}
+-				}
+-			});
+-	},
+-
+-	_toggleComplete: function( data ) {
+-		var toHide = data.oldPanel;
+-
+-		toHide
+-			.removeClass( "ui-accordion-content-active" )
+-			.prev()
+-				.removeClass( "ui-corner-top" )
+-				.addClass( "ui-corner-all" );
+-
+-		// Work around for rendering bug in IE (#5421)
+-		if ( toHide.length ) {
+-			toHide.parent()[0].className = toHide.parent()[0].className;
+-		}
+-
+-		this._trigger( "activate", null, data );
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-// used to prevent race conditions with remote data sources
+-var requestIndex = 0;
+-
+-$.widget( "ui.autocomplete", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	options: {
+-		appendTo: null,
+-		autoFocus: false,
+-		delay: 300,
+-		minLength: 1,
+-		position: {
+-			my: "left top",
+-			at: "left bottom",
+-			collision: "none"
+-		},
+-		source: null,
+-
+-		// callbacks
+-		change: null,
+-		close: null,
+-		focus: null,
+-		open: null,
+-		response: null,
+-		search: null,
+-		select: null
+-	},
+-
+-	pending: 0,
+-
+-	_create: function() {
+-		// Some browsers only repeat keydown events, not keypress events,
+-		// so we use the suppressKeyPress flag to determine if we've already
+-		// handled the keydown event. #7269
+-		// Unfortunately the code for & in keypress is the same as the up arrow,
+-		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
+-		// events when we know the keydown event was used to modify the
+-		// search term. #7799
+-		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+-			nodeName = this.element[0].nodeName.toLowerCase(),
+-			isTextarea = nodeName === "textarea",
+-			isInput = nodeName === "input";
+-
+-		this.isMultiLine =
+-			// Textareas are always multi-line
+-			isTextarea ? true :
+-			// Inputs are always single-line, even if inside a contentEditable element
+-			// IE also treats inputs as contentEditable
+-			isInput ? false :
+-			// All other element types are determined by whether or not they're contentEditable
+-			this.element.prop( "isContentEditable" );
+-
+-		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+-		this.isNewMenu = true;
+-
+-		this.element
+-			.addClass( "ui-autocomplete-input" )
+-			.attr( "autocomplete", "off" );
+-
+-		this._on( this.element, {
+-			keydown: function( event ) {
+-				/*jshint maxcomplexity:15*/
+-				if ( this.element.prop( "readOnly" ) ) {
+-					suppressKeyPress = true;
+-					suppressInput = true;
+-					suppressKeyPressRepeat = true;
+-					return;
+-				}
+-
+-				suppressKeyPress = false;
+-				suppressInput = false;
+-				suppressKeyPressRepeat = false;
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					suppressKeyPress = true;
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					suppressKeyPress = true;
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					suppressKeyPress = true;
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					suppressKeyPress = true;
+-					this._keyEvent( "next", event );
+-					break;
+-				case keyCode.ENTER:
+-				case keyCode.NUMPAD_ENTER:
+-					// when menu is open and has focus
+-					if ( this.menu.active ) {
+-						// #6055 - Opera still allows the keypress to occur
+-						// which causes forms to submit
+-						suppressKeyPress = true;
+-						event.preventDefault();
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.TAB:
+-					if ( this.menu.active ) {
+-						this.menu.select( event );
+-					}
+-					break;
+-				case keyCode.ESCAPE:
+-					if ( this.menu.element.is( ":visible" ) ) {
+-						this._value( this.term );
+-						this.close( event );
+-						// Different browsers have different default behavior for escape
+-						// Single press can mean undo or clear
+-						// Double press in IE means clear the whole form
+-						event.preventDefault();
+-					}
+-					break;
+-				default:
+-					suppressKeyPressRepeat = true;
+-					// search timeout should be triggered before the input value is changed
+-					this._searchTimeout( event );
+-					break;
+-				}
+-			},
+-			keypress: function( event ) {
+-				if ( suppressKeyPress ) {
+-					suppressKeyPress = false;
+-					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-						event.preventDefault();
+-					}
+-					return;
+-				}
+-				if ( suppressKeyPressRepeat ) {
+-					return;
+-				}
+-
+-				// replicate some key handlers to allow them to repeat in Firefox and Opera
+-				var keyCode = $.ui.keyCode;
+-				switch( event.keyCode ) {
+-				case keyCode.PAGE_UP:
+-					this._move( "previousPage", event );
+-					break;
+-				case keyCode.PAGE_DOWN:
+-					this._move( "nextPage", event );
+-					break;
+-				case keyCode.UP:
+-					this._keyEvent( "previous", event );
+-					break;
+-				case keyCode.DOWN:
+-					this._keyEvent( "next", event );
+-					break;
+-				}
+-			},
+-			input: function( event ) {
+-				if ( suppressInput ) {
+-					suppressInput = false;
+-					event.preventDefault();
+-					return;
+-				}
+-				this._searchTimeout( event );
+-			},
+-			focus: function() {
+-				this.selectedItem = null;
+-				this.previous = this._value();
+-			},
+-			blur: function( event ) {
+-				if ( this.cancelBlur ) {
+-					delete this.cancelBlur;
+-					return;
+-				}
+-
+-				clearTimeout( this.searching );
+-				this.close( event );
+-				this._change( event );
+-			}
+-		});
+-
+-		this._initSource();
+-		this.menu = $( "<ul>" )
+-			.addClass( "ui-autocomplete ui-front" )
+-			.appendTo( this._appendTo() )
+-			.menu({
+-				// disable ARIA support, the live region takes care of that
+-				role: null
+-			})
+-			.hide()
+-			.data( "ui-menu" );
+-
+-		this._on( this.menu.element, {
+-			mousedown: function( event ) {
+-				// prevent moving focus out of the text field
+-				event.preventDefault();
+-
+-				// IE doesn't prevent moving focus even with event.preventDefault()
+-				// so we set a flag to know when we should ignore the blur event
+-				this.cancelBlur = true;
+-				this._delay(function() {
+-					delete this.cancelBlur;
+-				});
+-
+-				// clicking on the scrollbar causes focus to shift to the body
+-				// but we can't detect a mouseup or a click immediately afterward
+-				// so we have to track the next mousedown and close the menu if
+-				// the user clicks somewhere outside of the autocomplete
+-				var menuElement = this.menu.element[ 0 ];
+-				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+-					this._delay(function() {
+-						var that = this;
+-						this.document.one( "mousedown", function( event ) {
+-							if ( event.target !== that.element[ 0 ] &&
+-									event.target !== menuElement &&
+-									!$.contains( menuElement, event.target ) ) {
+-								that.close();
+-							}
+-						});
+-					});
+-				}
+-			},
+-			menufocus: function( event, ui ) {
+-				// support: Firefox
+-				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
+-				if ( this.isNewMenu ) {
+-					this.isNewMenu = false;
+-					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+-						this.menu.blur();
+-
+-						this.document.one( "mousemove", function() {
+-							$( event.target ).trigger( event.originalEvent );
+-						});
+-
+-						return;
+-					}
+-				}
+-
+-				var item = ui.item.data( "ui-autocomplete-item" );
+-				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+-					// use value to match what will end up in the input, if it was a key event
+-					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+-						this._value( item.value );
+-					}
+-				} else {
+-					// Normally the input is populated with the item's value as the
+-					// menu is navigated, causing screen readers to notice a change and
+-					// announce the item. Since the focus event was canceled, this doesn't
+-					// happen, so we update the live region so that screen readers can
+-					// still notice the change and announce it.
+-					this.liveRegion.text( item.value );
+-				}
+-			},
+-			menuselect: function( event, ui ) {
+-				var item = ui.item.data( "ui-autocomplete-item" ),
+-					previous = this.previous;
+-
+-				// only trigger when focus was lost (click on menu)
+-				if ( this.element[0] !== this.document[0].activeElement ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// #6109 - IE triggers two focus events and the second
+-					// is asynchronous, so we need to reset the previous
+-					// term synchronously and asynchronously :-(
+-					this._delay(function() {
+-						this.previous = previous;
+-						this.selectedItem = item;
+-					});
+-				}
+-
+-				if ( false !== this._trigger( "select", event, { item: item } ) ) {
+-					this._value( item.value );
+-				}
+-				// reset the term after the select event
+-				// this allows custom select handling to work properly
+-				this.term = this._value();
+-
+-				this.close( event );
+-				this.selectedItem = item;
+-			}
+-		});
+-
+-		this.liveRegion = $( "<span>", {
+-				role: "status",
+-				"aria-live": "polite"
+-			})
+-			.addClass( "ui-helper-hidden-accessible" )
+-			.insertBefore( this.element );
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		clearTimeout( this.searching );
+-		this.element
+-			.removeClass( "ui-autocomplete-input" )
+-			.removeAttr( "autocomplete" );
+-		this.menu.element.remove();
+-		this.liveRegion.remove();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "source" ) {
+-			this._initSource();
+-		}
+-		if ( key === "appendTo" ) {
+-			this.menu.element.appendTo( this._appendTo() );
+-		}
+-		if ( key === "disabled" && value && this.xhr ) {
+-			this.xhr.abort();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-
+-		if ( element ) {
+-			element = element.jquery || element.nodeType ?
+-				$( element ) :
+-				this.document.find( element ).eq( 0 );
+-		}
+-
+-		if ( !element ) {
+-			element = this.element.closest( ".ui-front" );
+-		}
+-
+-		if ( !element.length ) {
+-			element = this.document[0].body;
+-		}
+-
+-		return element;
+-	},
+-
+-	_initSource: function() {
+-		var array, url,
+-			that = this;
+-		if ( $.isArray(this.options.source) ) {
+-			array = this.options.source;
+-			this.source = function( request, response ) {
+-				response( $.ui.autocomplete.filter( array, request.term ) );
+-			};
+-		} else if ( typeof this.options.source === "string" ) {
+-			url = this.options.source;
+-			this.source = function( request, response ) {
+-				if ( that.xhr ) {
+-					that.xhr.abort();
+-				}
+-				that.xhr = $.ajax({
+-					url: url,
+-					data: request,
+-					dataType: "json",
+-					success: function( data ) {
+-						response( data );
+-					},
+-					error: function() {
+-						response( [] );
+-					}
+-				});
+-			};
+-		} else {
+-			this.source = this.options.source;
+-		}
+-	},
+-
+-	_searchTimeout: function( event ) {
+-		clearTimeout( this.searching );
+-		this.searching = this._delay(function() {
+-			// only search if the value has changed
+-			if ( this.term !== this._value() ) {
+-				this.selectedItem = null;
+-				this.search( null, event );
+-			}
+-		}, this.options.delay );
+-	},
+-
+-	search: function( value, event ) {
+-		value = value != null ? value : this._value();
+-
+-		// always save the actual value, not the one passed as an argument
+-		this.term = this._value();
+-
+-		if ( value.length < this.options.minLength ) {
+-			return this.close( event );
+-		}
+-
+-		if ( this._trigger( "search", event ) === false ) {
+-			return;
+-		}
+-
+-		return this._search( value );
+-	},
+-
+-	_search: function( value ) {
+-		this.pending++;
+-		this.element.addClass( "ui-autocomplete-loading" );
+-		this.cancelSearch = false;
+-
+-		this.source( { term: value }, this._response() );
+-	},
+-
+-	_response: function() {
+-		var that = this,
+-			index = ++requestIndex;
+-
+-		return function( content ) {
+-			if ( index === requestIndex ) {
+-				that.__response( content );
+-			}
+-
+-			that.pending--;
+-			if ( !that.pending ) {
+-				that.element.removeClass( "ui-autocomplete-loading" );
+-			}
+-		};
+-	},
+-
+-	__response: function( content ) {
+-		if ( content ) {
+-			content = this._normalize( content );
+-		}
+-		this._trigger( "response", null, { content: content } );
+-		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+-			this._suggest( content );
+-			this._trigger( "open" );
+-		} else {
+-			// use ._close() instead of .close() so we don't cancel future searches
+-			this._close();
+-		}
+-	},
+-
+-	close: function( event ) {
+-		this.cancelSearch = true;
+-		this._close( event );
+-	},
+-
+-	_close: function( event ) {
+-		if ( this.menu.element.is( ":visible" ) ) {
+-			this.menu.element.hide();
+-			this.menu.blur();
+-			this.isNewMenu = true;
+-			this._trigger( "close", event );
+-		}
+-	},
+-
+-	_change: function( event ) {
+-		if ( this.previous !== this._value() ) {
+-			this._trigger( "change", event, { item: this.selectedItem } );
+-		}
+-	},
+-
+-	_normalize: function( items ) {
+-		// assume all items have the right format when the first item is complete
+-		if ( items.length && items[0].label && items[0].value ) {
+-			return items;
+-		}
+-		return $.map( items, function( item ) {
+-			if ( typeof item === "string" ) {
+-				return {
+-					label: item,
+-					value: item
+-				};
+-			}
+-			return $.extend({
+-				label: item.label || item.value,
+-				value: item.value || item.label
+-			}, item );
+-		});
+-	},
+-
+-	_suggest: function( items ) {
+-		var ul = this.menu.element.empty();
+-		this._renderMenu( ul, items );
+-		this.isNewMenu = true;
+-		this.menu.refresh();
+-
+-		// size and position menu
+-		ul.show();
+-		this._resizeMenu();
+-		ul.position( $.extend({
+-			of: this.element
+-		}, this.options.position ));
+-
+-		if ( this.options.autoFocus ) {
+-			this.menu.next();
+-		}
+-	},
+-
+-	_resizeMenu: function() {
+-		var ul = this.menu.element;
+-		ul.outerWidth( Math.max(
+-			// Firefox wraps long text (possibly a rounding bug)
+-			// so we add 1px to avoid the wrapping (#7513)
+-			ul.width( "" ).outerWidth() + 1,
+-			this.element.outerWidth()
+-		) );
+-	},
+-
+-	_renderMenu: function( ul, items ) {
+-		var that = this;
+-		$.each( items, function( index, item ) {
+-			that._renderItemData( ul, item );
+-		});
+-	},
+-
+-	_renderItemData: function( ul, item ) {
+-		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+-	},
+-
+-	_renderItem: function( ul, item ) {
+-		return $( "<li>" )
+-			.append( $( "<a>" ).text( item.label ) )
+-			.appendTo( ul );
+-	},
+-
+-	_move: function( direction, event ) {
+-		if ( !this.menu.element.is( ":visible" ) ) {
+-			this.search( null, event );
+-			return;
+-		}
+-		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+-				this.menu.isLastItem() && /^next/.test( direction ) ) {
+-			this._value( this.term );
+-			this.menu.blur();
+-			return;
+-		}
+-		this.menu[ direction ]( event );
+-	},
+-
+-	widget: function() {
+-		return this.menu.element;
+-	},
+-
+-	_value: function() {
+-		return this.valueMethod.apply( this.element, arguments );
+-	},
+-
+-	_keyEvent: function( keyEvent, event ) {
+-		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+-			this._move( keyEvent, event );
+-
+-			// prevents moving cursor to beginning/end of the text field in some browsers
+-			event.preventDefault();
+-		}
+-	}
+-});
+-
+-$.extend( $.ui.autocomplete, {
+-	escapeRegex: function( value ) {
+-		return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+-	},
+-	filter: function(array, term) {
+-		var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+-		return $.grep( array, function(value) {
+-			return matcher.test( value.label || value.value || value );
+-		});
+-	}
+-});
+-
+-
+-// live region extension, adding a `messages` option
+-// NOTE: This is an experimental API. We are still investigating
+-// a full solution for string manipulation and internationalization.
+-$.widget( "ui.autocomplete", $.ui.autocomplete, {
+-	options: {
+-		messages: {
+-			noResults: "No search results.",
+-			results: function( amount ) {
+-				return amount + ( amount > 1 ? " results are" : " result is" ) +
+-					" available, use up and down arrow keys to navigate.";
+-			}
+-		}
+-	},
+-
+-	__response: function( content ) {
+-		var message;
+-		this._superApply( arguments );
+-		if ( this.options.disabled || this.cancelSearch ) {
+-			return;
+-		}
+-		if ( content && content.length ) {
+-			message = this.options.messages.results( content.length );
+-		} else {
+-			message = this.options.messages.noResults;
+-		}
+-		this.liveRegion.text( message );
+-	}
+-});
+-
+-}( jQuery ));
+-(function( $, undefined ) {
+-
+-var lastActive, startXPos, startYPos, clickDragged,
+-	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+-	stateClasses = "ui-state-hover ui-state-active ",
+-	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+-	formResetHandler = function() {
+-		var form = $( this );
+-		setTimeout(function() {
+-			form.find( ":ui-button" ).button( "refresh" );
+-		}, 1 );
+-	},
+-	radioGroup = function( radio ) {
+-		var name = radio.name,
+-			form = radio.form,
+-			radios = $( [] );
+-		if ( name ) {
+-			name = name.replace( /'/g, "\\'" );
+-			if ( form ) {
+-				radios = $( form ).find( "[name='" + name + "']" );
+-			} else {
+-				radios = $( "[name='" + name + "']", radio.ownerDocument )
+-					.filter(function() {
+-						return !this.form;
+-					});
+-			}
+-		}
+-		return radios;
+-	};
+-
+-$.widget( "ui.button", {
+-	version: "1.10.3",
+-	defaultElement: "<button>",
+-	options: {
+-		disabled: null,
+-		text: true,
+-		label: null,
+-		icons: {
+-			primary: null,
+-			secondary: null
+-		}
+-	},
+-	_create: function() {
+-		this.element.closest( "form" )
+-			.unbind( "reset" + this.eventNamespace )
+-			.bind( "reset" + this.eventNamespace, formResetHandler );
+-
+-		if ( typeof this.options.disabled !== "boolean" ) {
+-			this.options.disabled = !!this.element.prop( "disabled" );
+-		} else {
+-			this.element.prop( "disabled", this.options.disabled );
+-		}
+-
+-		this._determineButtonType();
+-		this.hasTitle = !!this.buttonElement.attr( "title" );
+-
+-		var that = this,
+-			options = this.options,
+-			toggleButton = this.type === "checkbox" || this.type === "radio",
+-			activeClass = !toggleButton ? "ui-state-active" : "",
+-			focusClass = "ui-state-focus";
+-
+-		if ( options.label === null ) {
+-			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+-		}
+-
+-		this._hoverable( this.buttonElement );
+-
+-		this.buttonElement
+-			.addClass( baseClasses )
+-			.attr( "role", "button" )
+-			.bind( "mouseenter" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				if ( this === lastActive ) {
+-					$( this ).addClass( "ui-state-active" );
+-				}
+-			})
+-			.bind( "mouseleave" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( activeClass );
+-			})
+-			.bind( "click" + this.eventNamespace, function( event ) {
+-				if ( options.disabled ) {
+-					event.preventDefault();
+-					event.stopImmediatePropagation();
+-				}
+-			});
+-
+-		this.element
+-			.bind( "focus" + this.eventNamespace, function() {
+-				// no need to check disabled, focus won't be triggered anyway
+-				that.buttonElement.addClass( focusClass );
+-			})
+-			.bind( "blur" + this.eventNamespace, function() {
+-				that.buttonElement.removeClass( focusClass );
+-			});
+-
+-		if ( toggleButton ) {
+-			this.element.bind( "change" + this.eventNamespace, function() {
+-				if ( clickDragged ) {
+-					return;
+-				}
+-				that.refresh();
+-			});
+-			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+-			// prevents issue where button state changes but checkbox/radio checked state
+-			// does not in Firefox (see ticket #6970)
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					clickDragged = false;
+-					startXPos = event.pageX;
+-					startYPos = event.pageY;
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+-						clickDragged = true;
+-					}
+-			});
+-		}
+-
+-		if ( this.type === "checkbox" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-			});
+-		} else if ( this.type === "radio" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).addClass( "ui-state-active" );
+-				that.buttonElement.attr( "aria-pressed", "true" );
+-
+-				var radio = that.element[ 0 ];
+-				radioGroup( radio )
+-					.not( radio )
+-					.map(function() {
+-						return $( this ).button( "widget" )[ 0 ];
+-					})
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			});
+-		} else {
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).addClass( "ui-state-active" );
+-					lastActive = this;
+-					that.document.one( "mouseup", function() {
+-						lastActive = null;
+-					});
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).removeClass( "ui-state-active" );
+-				})
+-				.bind( "keydown" + this.eventNamespace, function(event) {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+-						$( this ).addClass( "ui-state-active" );
+-					}
+-				})
+-				// see #8559, we bind to blur here in case the button element loses
+-				// focus between keydown and keyup, it would be left in an "active" state
+-				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+-					$( this ).removeClass( "ui-state-active" );
+-				});
+-
+-			if ( this.buttonElement.is("a") ) {
+-				this.buttonElement.keyup(function(event) {
+-					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+-						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+-						$( this ).click();
+-					}
+-				});
+-			}
+-		}
+-
+-		// TODO: pull out $.Widget's handling for the disabled option into
+-		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+-		// be overridden by individual plugins
+-		this._setOption( "disabled", options.disabled );
+-		this._resetButton();
+-	},
+-
+-	_determineButtonType: function() {
+-		var ancestor, labelSelector, checked;
+-
+-		if ( this.element.is("[type=checkbox]") ) {
+-			this.type = "checkbox";
+-		} else if ( this.element.is("[type=radio]") ) {
+-			this.type = "radio";
+-		} else if ( this.element.is("input") ) {
+-			this.type = "input";
+-		} else {
+-			this.type = "button";
+-		}
+-
+-		if ( this.type === "checkbox" || this.type === "radio" ) {
+-			// we don't search against the document in case the element
+-			// is disconnected from the DOM
+-			ancestor = this.element.parents().last();
+-			labelSelector = "label[for='" + this.element.attr("id") + "']";
+-			this.buttonElement = ancestor.find( labelSelector );
+-			if ( !this.buttonElement.length ) {
+-				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+-				this.buttonElement = ancestor.filter( labelSelector );
+-				if ( !this.buttonElement.length ) {
+-					this.buttonElement = ancestor.find( labelSelector );
+-				}
+-			}
+-			this.element.addClass( "ui-helper-hidden-accessible" );
+-
+-			checked = this.element.is( ":checked" );
+-			if ( checked ) {
+-				this.buttonElement.addClass( "ui-state-active" );
+-			}
+-			this.buttonElement.prop( "aria-pressed", checked );
+-		} else {
+-			this.buttonElement = this.element;
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.buttonElement;
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-helper-hidden-accessible" );
+-		this.buttonElement
+-			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-pressed" )
+-			.html( this.buttonElement.find(".ui-button-text").html() );
+-
+-		if ( !this.hasTitle ) {
+-			this.buttonElement.removeAttr( "title" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-			} else {
+-				this.element.prop( "disabled", false );
+-			}
+-			return;
+-		}
+-		this._resetButton();
+-	},
+-
+-	refresh: function() {
+-		//See #8237 & #8828
+-		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+-
+-		if ( isDisabled !== this.options.disabled ) {
+-			this._setOption( "disabled", isDisabled );
+-		}
+-		if ( this.type === "radio" ) {
+-			radioGroup( this.element[0] ).each(function() {
+-				if ( $( this ).is( ":checked" ) ) {
+-					$( this ).button( "widget" )
+-						.addClass( "ui-state-active" )
+-						.attr( "aria-pressed", "true" );
+-				} else {
+-					$( this ).button( "widget" )
+-						.removeClass( "ui-state-active" )
+-						.attr( "aria-pressed", "false" );
+-				}
+-			});
+-		} else if ( this.type === "checkbox" ) {
+-			if ( this.element.is( ":checked" ) ) {
+-				this.buttonElement
+-					.addClass( "ui-state-active" )
+-					.attr( "aria-pressed", "true" );
+-			} else {
+-				this.buttonElement
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			}
+-		}
+-	},
+-
+-	_resetButton: function() {
+-		if ( this.type === "input" ) {
+-			if ( this.options.label ) {
+-				this.element.val( this.options.label );
+-			}
+-			return;
+-		}
+-		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+-			buttonText = $( "<span></span>", this.document[0] )
+-				.addClass( "ui-button-text" )
+-				.html( this.options.label )
+-				.appendTo( buttonElement.empty() )
+-				.text(),
+-			icons = this.options.icons,
+-			multipleIcons = icons.primary && icons.secondary,
+-			buttonClasses = [];
+-
+-		if ( icons.primary || icons.secondary ) {
+-			if ( this.options.text ) {
+-				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+-			}
+-
+-			if ( icons.primary ) {
+-				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+-			}
+-
+-			if ( icons.secondary ) {
+-				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+-			}
+-
+-			if ( !this.options.text ) {
+-				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+-
+-				if ( !this.hasTitle ) {
+-					buttonElement.attr( "title", $.trim( buttonText ) );
+-				}
+-			}
+-		} else {
+-			buttonClasses.push( "ui-button-text-only" );
+-		}
+-		buttonElement.addClass( buttonClasses.join( " " ) );
+-	}
+-});
+-
+-$.widget( "ui.buttonset", {
+-	version: "1.10.3",
+-	options: {
+-		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+-	},
+-
+-	_create: function() {
+-		this.element.addClass( "ui-buttonset" );
+-	},
+-
+-	_init: function() {
+-		this.refresh();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "disabled" ) {
+-			this.buttons.button( "option", key, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	refresh: function() {
+-		var rtl = this.element.css( "direction" ) === "rtl";
+-
+-		this.buttons = this.element.find( this.options.items )
+-			.filter( ":ui-button" )
+-				.button( "refresh" )
+-			.end()
+-			.not( ":ui-button" )
+-				.button()
+-			.end()
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+-				.filter( ":first" )
+-					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+-				.end()
+-				.filter( ":last" )
+-					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+-				.end()
+-			.end();
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-buttonset" );
+-		this.buttons
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-left ui-corner-right" )
+-			.end()
+-			.button( "destroy" );
+-	}
+-});
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.extend($.ui, { datepicker: { version: "1.10.3" } });
+-
+-var PROP_NAME = "datepicker",
+-	instActive;
+-
+-/* Date picker manager.
+-   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+-   Settings for (groups of) date pickers are maintained in an instance object,
+-   allowing multiple different settings on the same page. */
+-
+-function Datepicker() {
+-	this._curInst = null; // The current instance in use
+-	this._keyEvent = false; // If the last event was a key event
+-	this._disabledInputs = []; // List of date picker inputs that have been disabled
+-	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+-	this._inDialog = false; // True if showing within a "dialog", false if not
+-	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+-	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+-	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+-	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+-	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+-	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+-	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+-	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+-	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+-	this.regional = []; // Available regional settings, indexed by language code
+-	this.regional[""] = { // Default regional settings
+-		closeText: "Done", // Display text for close link
+-		prevText: "Prev", // Display text for previous month link
+-		nextText: "Next", // Display text for next month link
+-		currentText: "Today", // Display text for current month link
+-		monthNames: ["January","February","March","April","May","June",
+-			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
+-		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+-		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+-		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+-		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+-		weekHeader: "Wk", // Column header for week of the year
+-		dateFormat: "mm/dd/yy", // See format options on parseDate
+-		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+-		isRTL: false, // True if right-to-left language, false if left-to-right
+-		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+-		yearSuffix: "" // Additional text to append to the year in the month headers
+-	};
+-	this._defaults = { // Global defaults for all the date picker instances
+-		showOn: "focus", // "focus" for popup on focus,
+-			// "button" for trigger button, or "both" for either
+-		showAnim: "fadeIn", // Name of jQuery animation for popup
+-		showOptions: {}, // Options for enhanced animations
+-		defaultDate: null, // Used when field is blank: actual date,
+-			// +/-number for offset from today, null for today
+-		appendText: "", // Display text following the input box, e.g. showing the format
+-		buttonText: "...", // Text for trigger button
+-		buttonImage: "", // URL for trigger button image
+-		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+-		hideIfNoPrevNext: false, // True to hide next/previous month links
+-			// if not applicable, false to just disable them
+-		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+-		gotoCurrent: false, // True if today link goes back to current selection instead
+-		changeMonth: false, // True if month can be selected directly, false if only prev/next
+-		changeYear: false, // True if year can be selected directly, false if only prev/next
+-		yearRange: "c-10:c+10", // Range of years to display in drop-down,
+-			// either relative to today's year (-nn:+nn), relative to currently displayed year
+-			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+-		showOtherMonths: false, // True to show dates in other months, false to leave blank
+-		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+-		showWeek: false, // True to show week of the year, false to not show it
+-		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+-			// takes a Date and returns the number of the week for it
+-		shortYearCutoff: "+10", // Short year values < this are in the current century,
+-			// > this are in the previous century,
+-			// string value starting with "+" for current year + value
+-		minDate: null, // The earliest selectable date, or null for no limit
+-		maxDate: null, // The latest selectable date, or null for no limit
+-		duration: "fast", // Duration of display/closure
+-		beforeShowDay: null, // Function that takes a date and returns an array with
+-			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+-			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+-		beforeShow: null, // Function that takes an input field and
+-			// returns a set of custom settings for the date picker
+-		onSelect: null, // Define a callback function when a date is selected
+-		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+-		onClose: null, // Define a callback function when the datepicker is closed
+-		numberOfMonths: 1, // Number of months to show at a time
+-		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+-		stepMonths: 1, // Number of months to step back/forward
+-		stepBigMonths: 12, // Number of months to step back/forward for the big links
+-		altField: "", // Selector for an alternate field to store selected dates into
+-		altFormat: "", // The date format to use for the alternate field
+-		constrainInput: true, // The input is constrained by the current date format
+-		showButtonPanel: false, // True to show button panel, false to not show it
+-		autoSize: false, // True to size the input for the date format, false to leave as is
+-		disabled: false // The initial disabled state
+-	};
+-	$.extend(this._defaults, this.regional[""]);
+-	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+-}
+-
+-$.extend(Datepicker.prototype, {
+-	/* Class name added to elements to indicate already configured with a date picker. */
+-	markerClassName: "hasDatepicker",
+-
+-	//Keep track of the maximum number of rows displayed (see #7043)
+-	maxRows: 4,
+-
+-	// TODO rename to "widget" when switching to widget factory
+-	_widgetDatepicker: function() {
+-		return this.dpDiv;
+-	},
+-
+-	/* Override the default settings for all instances of the date picker.
+-	 * @param  settings  object - the new settings to use as defaults (anonymous object)
+-	 * @return the manager object
+-	 */
+-	setDefaults: function(settings) {
+-		extendRemove(this._defaults, settings || {});
+-		return this;
+-	},
+-
+-	/* Attach the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+-	 */
+-	_attachDatepicker: function(target, settings) {
+-		var nodeName, inline, inst;
+-		nodeName = target.nodeName.toLowerCase();
+-		inline = (nodeName === "div" || nodeName === "span");
+-		if (!target.id) {
+-			this.uuid += 1;
+-			target.id = "dp" + this.uuid;
+-		}
+-		inst = this._newInst($(target), inline);
+-		inst.settings = $.extend({}, settings || {});
+-		if (nodeName === "input") {
+-			this._connectDatepicker(target, inst);
+-		} else if (inline) {
+-			this._inlineDatepicker(target, inst);
+-		}
+-	},
+-
+-	/* Create a new instance object. */
+-	_newInst: function(target, inline) {
+-		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+-		return {id: id, input: target, // associated target
+-			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+-			drawMonth: 0, drawYear: 0, // month being drawn
+-			inline: inline, // is datepicker inline or not
+-			dpDiv: (!inline ? this.dpDiv : // presentation div
+-			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+-	},
+-
+-	/* Attach the date picker to an input field. */
+-	_connectDatepicker: function(target, inst) {
+-		var input = $(target);
+-		inst.append = $([]);
+-		inst.trigger = $([]);
+-		if (input.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		this._attachments(input, inst);
+-		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+-			keypress(this._doKeyPress).keyup(this._doKeyUp);
+-		this._autoSize(inst);
+-		$.data(target, PROP_NAME, inst);
+-		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-	},
+-
+-	/* Make attachments based on settings. */
+-	_attachments: function(input, inst) {
+-		var showOn, buttonText, buttonImage,
+-			appendText = this._get(inst, "appendText"),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		if (inst.append) {
+-			inst.append.remove();
+-		}
+-		if (appendText) {
+-			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+-			input[isRTL ? "before" : "after"](inst.append);
+-		}
+-
+-		input.unbind("focus", this._showDatepicker);
+-
+-		if (inst.trigger) {
+-			inst.trigger.remove();
+-		}
+-
+-		showOn = this._get(inst, "showOn");
+-		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+-			input.focus(this._showDatepicker);
+-		}
+-		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+-			buttonText = this._get(inst, "buttonText");
+-			buttonImage = this._get(inst, "buttonImage");
+-			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+-				$("<img/>").addClass(this._triggerClass).
+-					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+-				$("<button type='button'></button>").addClass(this._triggerClass).
+-					html(!buttonImage ? buttonText : $("<img/>").attr(
+-					{ src:buttonImage, alt:buttonText, title:buttonText })));
+-			input[isRTL ? "before" : "after"](inst.trigger);
+-			inst.trigger.click(function() {
+-				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+-					$.datepicker._hideDatepicker();
+-				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+-					$.datepicker._hideDatepicker();
+-					$.datepicker._showDatepicker(input[0]);
+-				} else {
+-					$.datepicker._showDatepicker(input[0]);
+-				}
+-				return false;
+-			});
+-		}
+-	},
+-
+-	/* Apply the maximum length for the date format. */
+-	_autoSize: function(inst) {
+-		if (this._get(inst, "autoSize") && !inst.inline) {
+-			var findMax, max, maxI, i,
+-				date = new Date(2009, 12 - 1, 20), // Ensure double digits
+-				dateFormat = this._get(inst, "dateFormat");
+-
+-			if (dateFormat.match(/[DM]/)) {
+-				findMax = function(names) {
+-					max = 0;
+-					maxI = 0;
+-					for (i = 0; i < names.length; i++) {
+-						if (names[i].length > max) {
+-							max = names[i].length;
+-							maxI = i;
+-						}
+-					}
+-					return maxI;
+-				};
+-				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+-					"monthNames" : "monthNamesShort"))));
+-				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+-					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+-			}
+-			inst.input.attr("size", this._formatDate(inst, date).length);
+-		}
+-	},
+-
+-	/* Attach an inline date picker to a div. */
+-	_inlineDatepicker: function(target, inst) {
+-		var divSpan = $(target);
+-		if (divSpan.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+-		$.data(target, PROP_NAME, inst);
+-		this._setDate(inst, this._getDefaultDate(inst), true);
+-		this._updateDatepicker(inst);
+-		this._updateAlternate(inst);
+-		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+-		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+-		inst.dpDiv.css( "display", "block" );
+-	},
+-
+-	/* Pop-up the date picker in a "dialog" box.
+-	 * @param  input element - ignored
+-	 * @param  date	string or Date - the initial date to display
+-	 * @param  onSelect  function - the function to call when a date is selected
+-	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+-	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
+-	 *					event - with x/y coordinates or
+-	 *					leave empty for default (screen centre)
+-	 * @return the manager object
+-	 */
+-	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+-		var id, browserWidth, browserHeight, scrollX, scrollY,
+-			inst = this._dialogInst; // internal instance
+-
+-		if (!inst) {
+-			this.uuid += 1;
+-			id = "dp" + this.uuid;
+-			this._dialogInput = $("<input type='text' id='" + id +
+-				"' style='position: absolute; top: -100px; width: 0px;'/>");
+-			this._dialogInput.keydown(this._doKeyDown);
+-			$("body").append(this._dialogInput);
+-			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+-			inst.settings = {};
+-			$.data(this._dialogInput[0], PROP_NAME, inst);
+-		}
+-		extendRemove(inst.settings, settings || {});
+-		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+-		this._dialogInput.val(date);
+-
+-		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+-		if (!this._pos) {
+-			browserWidth = document.documentElement.clientWidth;
+-			browserHeight = document.documentElement.clientHeight;
+-			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+-			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+-			this._pos = // should use actual width/height below
+-				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+-		}
+-
+-		// move input on screen for focus, but hidden behind dialog
+-		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+-		inst.settings.onSelect = onSelect;
+-		this._inDialog = true;
+-		this.dpDiv.addClass(this._dialogClass);
+-		this._showDatepicker(this._dialogInput[0]);
+-		if ($.blockUI) {
+-			$.blockUI(this.dpDiv);
+-		}
+-		$.data(this._dialogInput[0], PROP_NAME, inst);
+-		return this;
+-	},
+-
+-	/* Detach a datepicker from its control.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_destroyDatepicker: function(target) {
+-		var nodeName,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		$.removeData(target, PROP_NAME);
+-		if (nodeName === "input") {
+-			inst.append.remove();
+-			inst.trigger.remove();
+-			$target.removeClass(this.markerClassName).
+-				unbind("focus", this._showDatepicker).
+-				unbind("keydown", this._doKeyDown).
+-				unbind("keypress", this._doKeyPress).
+-				unbind("keyup", this._doKeyUp);
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			$target.removeClass(this.markerClassName).empty();
+-		}
+-	},
+-
+-	/* Enable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_enableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = false;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = false; }).end().
+-				filter("img").css({opacity: "1.0", cursor: ""});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().removeClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", false);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-	},
+-
+-	/* Disable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_disableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = true;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = true; }).end().
+-				filter("img").css({opacity: "0.5", cursor: "default"});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().addClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", true);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-		this._disabledInputs[this._disabledInputs.length] = target;
+-	},
+-
+-	/* Is the first field in a jQuery collection disabled as a datepicker?
+-	 * @param  target	element - the target input field or division or span
+-	 * @return boolean - true if disabled, false if enabled
+-	 */
+-	_isDisabledDatepicker: function(target) {
+-		if (!target) {
+-			return false;
+-		}
+-		for (var i = 0; i < this._disabledInputs.length; i++) {
+-			if (this._disabledInputs[i] === target) {
+-				return true;
+-			}
+-		}
+-		return false;
+-	},
+-
+-	/* Retrieve the instance data for the target control.
+-	 * @param  target  element - the target input field or division or span
+-	 * @return  object - the associated instance data
+-	 * @throws  error if a jQuery problem getting data
+-	 */
+-	_getInst: function(target) {
+-		try {
+-			return $.data(target, PROP_NAME);
+-		}
+-		catch (err) {
+-			throw "Missing instance data for this datepicker";
+-		}
+-	},
+-
+-	/* Update or retrieve the settings for a date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 * @param  name	object - the new settings to update or
+-	 *				string - the name of the setting to change or retrieve,
+-	 *				when retrieving also "all" for all instance settings or
+-	 *				"defaults" for all global defaults
+-	 * @param  value   any - the new value for the setting
+-	 *				(omit if above is an object or to retrieve a value)
+-	 */
+-	_optionDatepicker: function(target, name, value) {
+-		var settings, date, minDate, maxDate,
+-			inst = this._getInst(target);
+-
+-		if (arguments.length === 2 && typeof name === "string") {
+-			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+-				(inst ? (name === "all" ? $.extend({}, inst.settings) :
+-				this._get(inst, name)) : null));
+-		}
+-
+-		settings = name || {};
+-		if (typeof name === "string") {
+-			settings = {};
+-			settings[name] = value;
+-		}
+-
+-		if (inst) {
+-			if (this._curInst === inst) {
+-				this._hideDatepicker();
+-			}
+-
+-			date = this._getDateDatepicker(target, true);
+-			minDate = this._getMinMaxDate(inst, "min");
+-			maxDate = this._getMinMaxDate(inst, "max");
+-			extendRemove(inst.settings, settings);
+-			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+-			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+-				inst.settings.minDate = this._formatDate(inst, minDate);
+-			}
+-			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+-				inst.settings.maxDate = this._formatDate(inst, maxDate);
+-			}
+-			if ( "disabled" in settings ) {
+-				if ( settings.disabled ) {
+-					this._disableDatepicker(target);
+-				} else {
+-					this._enableDatepicker(target);
+-				}
+-			}
+-			this._attachments($(target), inst);
+-			this._autoSize(inst);
+-			this._setDate(inst, date);
+-			this._updateAlternate(inst);
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	// change method deprecated
+-	_changeDatepicker: function(target, name, value) {
+-		this._optionDatepicker(target, name, value);
+-	},
+-
+-	/* Redraw the date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 */
+-	_refreshDatepicker: function(target) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	/* Set the dates for a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  date	Date - the new date
+-	 */
+-	_setDateDatepicker: function(target, date) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._setDate(inst, date);
+-			this._updateDatepicker(inst);
+-			this._updateAlternate(inst);
+-		}
+-	},
+-
+-	/* Get the date(s) for the first entry in a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  noDefault boolean - true if no default date is to be used
+-	 * @return Date - the current date
+-	 */
+-	_getDateDatepicker: function(target, noDefault) {
+-		var inst = this._getInst(target);
+-		if (inst && !inst.inline) {
+-			this._setDateFromField(inst, noDefault);
+-		}
+-		return (inst ? this._getDate(inst) : null);
+-	},
+-
+-	/* Handle keystrokes. */
+-	_doKeyDown: function(event) {
+-		var onSelect, dateStr, sel,
+-			inst = $.datepicker._getInst(event.target),
+-			handled = true,
+-			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+-
+-		inst._keyEvent = true;
+-		if ($.datepicker._datepickerShowing) {
+-			switch (event.keyCode) {
+-				case 9: $.datepicker._hideDatepicker();
+-						handled = false;
+-						break; // hide on tab out
+-				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+-									$.datepicker._currentClass + ")", inst.dpDiv);
+-						if (sel[0]) {
+-							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+-						}
+-
+-						onSelect = $.datepicker._get(inst, "onSelect");
+-						if (onSelect) {
+-							dateStr = $.datepicker._formatDate(inst);
+-
+-							// trigger custom callback
+-							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-						} else {
+-							$.datepicker._hideDatepicker();
+-						}
+-
+-						return false; // don't submit the form
+-				case 27: $.datepicker._hideDatepicker();
+-						break; // hide on escape
+-				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							-$.datepicker._get(inst, "stepBigMonths") :
+-							-$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // previous month/year on page up/+ ctrl
+-				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							+$.datepicker._get(inst, "stepBigMonths") :
+-							+$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // next month/year on page down/+ ctrl
+-				case 35: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._clearDate(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // clear on ctrl or command +end
+-				case 36: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._gotoToday(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // current on ctrl or command +home
+-				case 37: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// -1 day on ctrl or command +left
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								-$.datepicker._get(inst, "stepBigMonths") :
+-								-$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +left on Mac
+-						break;
+-				case 38: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, -7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // -1 week on ctrl or command +up
+-				case 39: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// +1 day on ctrl or command +right
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								+$.datepicker._get(inst, "stepBigMonths") :
+-								+$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +right
+-						break;
+-				case 40: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, +7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // +1 week on ctrl or command +down
+-				default: handled = false;
+-			}
+-		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+-			$.datepicker._showDatepicker(this);
+-		} else {
+-			handled = false;
+-		}
+-
+-		if (handled) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-	},
+-
+-	/* Filter entered characters - based on date format. */
+-	_doKeyPress: function(event) {
+-		var chars, chr,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if ($.datepicker._get(inst, "constrainInput")) {
+-			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+-			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+-			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+-		}
+-	},
+-
+-	/* Synchronise manual entry and field/alternate field. */
+-	_doKeyUp: function(event) {
+-		var date,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if (inst.input.val() !== inst.lastVal) {
+-			try {
+-				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-					(inst.input ? inst.input.val() : null),
+-					$.datepicker._getFormatConfig(inst));
+-
+-				if (date) { // only if valid
+-					$.datepicker._setDateFromField(inst);
+-					$.datepicker._updateAlternate(inst);
+-					$.datepicker._updateDatepicker(inst);
+-				}
+-			}
+-			catch (err) {
+-			}
+-		}
+-		return true;
+-	},
+-
+-	/* Pop-up the date picker for a given input field.
+-	 * If false returned from beforeShow event handler do not show.
+-	 * @param  input  element - the input field attached to the date picker or
+-	 *					event - if triggered by focus
+-	 */
+-	_showDatepicker: function(input) {
+-		input = input.target || input;
+-		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+-			input = $("input", input.parentNode)[0];
+-		}
+-
+-		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+-			return;
+-		}
+-
+-		var inst, beforeShow, beforeShowSettings, isFixed,
+-			offset, showAnim, duration;
+-
+-		inst = $.datepicker._getInst(input);
+-		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+-			$.datepicker._curInst.dpDiv.stop(true, true);
+-			if ( inst && $.datepicker._datepickerShowing ) {
+-				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+-			}
+-		}
+-
+-		beforeShow = $.datepicker._get(inst, "beforeShow");
+-		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+-		if(beforeShowSettings === false){
+-			return;
+-		}
+-		extendRemove(inst.settings, beforeShowSettings);
+-
+-		inst.lastVal = null;
+-		$.datepicker._lastInput = input;
+-		$.datepicker._setDateFromField(inst);
+-
+-		if ($.datepicker._inDialog) { // hide cursor
+-			input.value = "";
+-		}
+-		if (!$.datepicker._pos) { // position below input
+-			$.datepicker._pos = $.datepicker._findPos(input);
+-			$.datepicker._pos[1] += input.offsetHeight; // add the height
+-		}
+-
+-		isFixed = false;
+-		$(input).parents().each(function() {
+-			isFixed |= $(this).css("position") === "fixed";
+-			return !isFixed;
+-		});
+-
+-		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+-		$.datepicker._pos = null;
+-		//to avoid flashes on Firefox
+-		inst.dpDiv.empty();
+-		// determine sizing offscreen
+-		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+-		$.datepicker._updateDatepicker(inst);
+-		// fix width for dynamic number of date pickers
+-		// and adjust position before showing
+-		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+-		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+-			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
+-			left: offset.left + "px", top: offset.top + "px"});
+-
+-		if (!inst.inline) {
+-			showAnim = $.datepicker._get(inst, "showAnim");
+-			duration = $.datepicker._get(inst, "duration");
+-			inst.dpDiv.zIndex($(input).zIndex()+1);
+-			$.datepicker._datepickerShowing = true;
+-
+-			if ( $.effects && $.effects.effect[ showAnim ] ) {
+-				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+-			} else {
+-				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+-			}
+-
+-			if ( $.datepicker._shouldFocusInput( inst ) ) {
+-				inst.input.focus();
+-			}
+-
+-			$.datepicker._curInst = inst;
+-		}
+-	},
+-
+-	/* Generate the date picker content. */
+-	_updateDatepicker: function(inst) {
+-		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+-		instActive = inst; // for delegate hover events
+-		inst.dpDiv.empty().append(this._generateHTML(inst));
+-		this._attachHandlers(inst);
+-		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
+-
+-		var origyearshtml,
+-			numMonths = this._getNumberOfMonths(inst),
+-			cols = numMonths[1],
+-			width = 17;
+-
+-		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+-		if (cols > 1) {
+-			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+-		}
+-		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+-			"Class"]("ui-datepicker-multi");
+-		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+-			"Class"]("ui-datepicker-rtl");
+-
+-		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+-			inst.input.focus();
+-		}
+-
+-		// deffered render of the years select (to avoid flashes on Firefox)
+-		if( inst.yearshtml ){
+-			origyearshtml = inst.yearshtml;
+-			setTimeout(function(){
+-				//assure that inst.yearshtml didn't change.
+-				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+-					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+-				}
+-				origyearshtml = inst.yearshtml = null;
+-			}, 0);
+-		}
+-	},
+-
+-	// #6694 - don't focus the input if it's already focused
+-	// this breaks the change event in IE
+-	// Support: IE and jQuery <1.9
+-	_shouldFocusInput: function( inst ) {
+-		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+-	},
+-
+-	/* Check positioning to remain on screen. */
+-	_checkOffset: function(inst, offset, isFixed) {
+-		var dpWidth = inst.dpDiv.outerWidth(),
+-			dpHeight = inst.dpDiv.outerHeight(),
+-			inputWidth = inst.input ? inst.input.outerWidth() : 0,
+-			inputHeight = inst.input ? inst.input.outerHeight() : 0,
+-			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+-			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+-
+-		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+-		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+-		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+-
+-		// now check if datepicker is showing outside window viewport - move to a better place if so.
+-		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+-			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+-		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+-			Math.abs(dpHeight + inputHeight) : 0);
+-
+-		return offset;
+-	},
+-
+-	/* Find an object's position on the screen. */
+-	_findPos: function(obj) {
+-		var position,
+-			inst = this._getInst(obj),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+-			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+-		}
+-
+-		position = $(obj).offset();
+-		return [position.left, position.top];
+-	},
+-
+-	/* Hide the date picker from view.
+-	 * @param  input  element - the input field attached to the date picker
+-	 */
+-	_hideDatepicker: function(input) {
+-		var showAnim, duration, postProcess, onClose,
+-			inst = this._curInst;
+-
+-		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
+-			return;
+-		}
+-
+-		if (this._datepickerShowing) {
+-			showAnim = this._get(inst, "showAnim");
+-			duration = this._get(inst, "duration");
+-			postProcess = function() {
+-				$.datepicker._tidyDialog(inst);
+-			};
+-
+-			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+-			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+-				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+-			} else {
+-				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+-					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+-			}
+-
+-			if (!showAnim) {
+-				postProcess();
+-			}
+-			this._datepickerShowing = false;
+-
+-			onClose = this._get(inst, "onClose");
+-			if (onClose) {
+-				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+-			}
+-
+-			this._lastInput = null;
+-			if (this._inDialog) {
+-				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+-				if ($.blockUI) {
+-					$.unblockUI();
+-					$("body").append(this.dpDiv);
+-				}
+-			}
+-			this._inDialog = false;
+-		}
+-	},
+-
+-	/* Tidy up after a dialog display. */
+-	_tidyDialog: function(inst) {
+-		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+-	},
+-
+-	/* Close date picker if clicked elsewhere. */
+-	_checkExternalClick: function(event) {
+-		if (!$.datepicker._curInst) {
+-			return;
+-		}
+-
+-		var $target = $(event.target),
+-			inst = $.datepicker._getInst($target[0]);
+-
+-		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+-				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+-				!$target.hasClass($.datepicker.markerClassName) &&
+-				!$target.closest("." + $.datepicker._triggerClass).length &&
+-				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+-			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+-				$.datepicker._hideDatepicker();
+-		}
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustDate: function(id, offset, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		this._adjustInstDate(inst, offset +
+-			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+-			period);
+-		this._updateDatepicker(inst);
+-	},
+-
+-	/* Action for current link. */
+-	_gotoToday: function(id) {
+-		var date,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+-			inst.selectedDay = inst.currentDay;
+-			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+-			inst.drawYear = inst.selectedYear = inst.currentYear;
+-		} else {
+-			date = new Date();
+-			inst.selectedDay = date.getDate();
+-			inst.drawMonth = inst.selectedMonth = date.getMonth();
+-			inst.drawYear = inst.selectedYear = date.getFullYear();
+-		}
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a new month/year. */
+-	_selectMonthYear: function(id, select, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		inst["selected" + (period === "M" ? "Month" : "Year")] =
+-		inst["draw" + (period === "M" ? "Month" : "Year")] =
+-			parseInt(select.options[select.selectedIndex].value,10);
+-
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a day. */
+-	_selectDay: function(id, month, year, td) {
+-		var inst,
+-			target = $(id);
+-
+-		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-
+-		inst = this._getInst(target[0]);
+-		inst.selectedDay = inst.currentDay = $("a", td).html();
+-		inst.selectedMonth = inst.currentMonth = month;
+-		inst.selectedYear = inst.currentYear = year;
+-		this._selectDate(id, this._formatDate(inst,
+-			inst.currentDay, inst.currentMonth, inst.currentYear));
+-	},
+-
+-	/* Erase the input field and hide the date picker. */
+-	_clearDate: function(id) {
+-		var target = $(id);
+-		this._selectDate(target, "");
+-	},
+-
+-	/* Update the input field with the selected date. */
+-	_selectDate: function(id, dateStr) {
+-		var onSelect,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+-		if (inst.input) {
+-			inst.input.val(dateStr);
+-		}
+-		this._updateAlternate(inst);
+-
+-		onSelect = this._get(inst, "onSelect");
+-		if (onSelect) {
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+-		} else if (inst.input) {
+-			inst.input.trigger("change"); // fire the change event
+-		}
+-
+-		if (inst.inline){
+-			this._updateDatepicker(inst);
+-		} else {
+-			this._hideDatepicker();
+-			this._lastInput = inst.input[0];
+-			if (typeof(inst.input[0]) !== "object") {
+-				inst.input.focus(); // restore focus
+-			}
+-			this._lastInput = null;
+-		}
+-	},
+-
+-	/* Update any alternate field to synchronise with the main field. */
+-	_updateAlternate: function(inst) {
+-		var altFormat, date, dateStr,
+-			altField = this._get(inst, "altField");
+-
+-		if (altField) { // update alternate field too
+-			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+-			date = this._getDate(inst);
+-			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+-			$(altField).each(function() { $(this).val(dateStr); });
+-		}
+-	},
+-
+-	/* Set as beforeShowDay function to prevent selection of weekends.
+-	 * @param  date  Date - the date to customise
+-	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
+-	 */
+-	noWeekends: function(date) {
+-		var day = date.getDay();
+-		return [(day > 0 && day < 6), ""];
+-	},
+-
+-	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+-	 * @param  date  Date - the date to get the week for
+-	 * @return  number - the number of the week within the year that contains this date
+-	 */
+-	iso8601Week: function(date) {
+-		var time,
+-			checkDate = new Date(date.getTime());
+-
+-		// Find Thursday of this week starting on Monday
+-		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+-
+-		time = checkDate.getTime();
+-		checkDate.setMonth(0); // Compare with Jan 1
+-		checkDate.setDate(1);
+-		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+-	},
+-
+-	/* Parse a string value into a date object.
+-	 * See formatDate below for the possible formats.
+-	 *
+-	 * @param  format string - the expected format of the date
+-	 * @param  value string - the date in the above format
+-	 * @param  settings Object - attributes include:
+-	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  Date - the extracted date value or null if value is blank
+-	 */
+-	parseDate: function (format, value, settings) {
+-		if (format == null || value == null) {
+-			throw "Invalid arguments";
+-		}
+-
+-		value = (typeof value === "object" ? value.toString() : value + "");
+-		if (value === "") {
+-			return null;
+-		}
+-
+-		var iFormat, dim, extra,
+-			iValue = 0,
+-			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+-			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+-				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			year = -1,
+-			month = -1,
+-			day = -1,
+-			doy = -1,
+-			literal = false,
+-			date,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Extract a number from the string value
+-			getNumber = function(match) {
+-				var isDoubled = lookAhead(match),
+-					size = (match === "@" ? 14 : (match === "!" ? 20 :
+-					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+-					digits = new RegExp("^\\d{1," + size + "}"),
+-					num = value.substring(iValue).match(digits);
+-				if (!num) {
+-					throw "Missing number at position " + iValue;
+-				}
+-				iValue += num[0].length;
+-				return parseInt(num[0], 10);
+-			},
+-			// Extract a name from the string value and convert to an index
+-			getName = function(match, shortNames, longNames) {
+-				var index = -1,
+-					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+-						return [ [k, v] ];
+-					}).sort(function (a, b) {
+-						return -(a[1].length - b[1].length);
+-					});
+-
+-				$.each(names, function (i, pair) {
+-					var name = pair[1];
+-					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+-						index = pair[0];
+-						iValue += name.length;
+-						return false;
+-					}
+-				});
+-				if (index !== -1) {
+-					return index + 1;
+-				} else {
+-					throw "Unknown name at position " + iValue;
+-				}
+-			},
+-			// Confirm that a literal character matches the string value
+-			checkLiteral = function() {
+-				if (value.charAt(iValue) !== format.charAt(iFormat)) {
+-					throw "Unexpected literal at position " + iValue;
+-				}
+-				iValue++;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					checkLiteral();
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d":
+-						day = getNumber("d");
+-						break;
+-					case "D":
+-						getName("D", dayNamesShort, dayNames);
+-						break;
+-					case "o":
+-						doy = getNumber("o");
+-						break;
+-					case "m":
+-						month = getNumber("m");
+-						break;
+-					case "M":
+-						month = getName("M", monthNamesShort, monthNames);
+-						break;
+-					case "y":
+-						year = getNumber("y");
+-						break;
+-					case "@":
+-						date = new Date(getNumber("@"));
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "!":
+-						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "'":
+-						if (lookAhead("'")){
+-							checkLiteral();
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						checkLiteral();
+-				}
+-			}
+-		}
+-
+-		if (iValue < value.length){
+-			extra = value.substr(iValue);
+-			if (!/^\s+/.test(extra)) {
+-				throw "Extra/unparsed characters found in date: " + extra;
+-			}
+-		}
+-
+-		if (year === -1) {
+-			year = new Date().getFullYear();
+-		} else if (year < 100) {
+-			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+-				(year <= shortYearCutoff ? 0 : -100);
+-		}
+-
+-		if (doy > -1) {
+-			month = 1;
+-			day = doy;
+-			do {
+-				dim = this._getDaysInMonth(year, month - 1);
+-				if (day <= dim) {
+-					break;
+-				}
+-				month++;
+-				day -= dim;
+-			} while (true);
+-		}
+-
+-		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+-		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+-			throw "Invalid date"; // E.g. 31/02/00
+-		}
+-		return date;
+-	},
+-
+-	/* Standard date formats. */
+-	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+-	COOKIE: "D, dd M yy",
+-	ISO_8601: "yy-mm-dd",
+-	RFC_822: "D, d M y",
+-	RFC_850: "DD, dd-M-y",
+-	RFC_1036: "D, d M y",
+-	RFC_1123: "D, d M yy",
+-	RFC_2822: "D, d M yy",
+-	RSS: "D, d M y", // RFC 822
+-	TICKS: "!",
+-	TIMESTAMP: "@",
+-	W3C: "yy-mm-dd", // ISO 8601
+-
+-	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+-		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+-
+-	/* Format a date object into a string value.
+-	 * The format can be combinations of the following:
+-	 * d  - day of month (no leading zero)
+-	 * dd - day of month (two digit)
+-	 * o  - day of year (no leading zeros)
+-	 * oo - day of year (three digit)
+-	 * D  - day name short
+-	 * DD - day name long
+-	 * m  - month of year (no leading zero)
+-	 * mm - month of year (two digit)
+-	 * M  - month name short
+-	 * MM - month name long
+-	 * y  - year (two digit)
+-	 * yy - year (four digit)
+-	 * @ - Unix timestamp (ms since 01/01/1970)
+-	 * ! - Windows ticks (100ns since 01/01/0001)
+-	 * "..." - literal text
+-	 * '' - single quote
+-	 *
+-	 * @param  format string - the desired format of the date
+-	 * @param  date Date - the date value to format
+-	 * @param  settings Object - attributes include:
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  string - the date in the above format
+-	 */
+-	formatDate: function (format, date, settings) {
+-		if (!date) {
+-			return "";
+-		}
+-
+-		var iFormat,
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Format a number, with leading zero if necessary
+-			formatNumber = function(match, value, len) {
+-				var num = "" + value;
+-				if (lookAhead(match)) {
+-					while (num.length < len) {
+-						num = "0" + num;
+-					}
+-				}
+-				return num;
+-			},
+-			// Format a name, short or long as requested
+-			formatName = function(match, value, shortNames, longNames) {
+-				return (lookAhead(match) ? longNames[value] : shortNames[value]);
+-			},
+-			output = "",
+-			literal = false;
+-
+-		if (date) {
+-			for (iFormat = 0; iFormat < format.length; iFormat++) {
+-				if (literal) {
+-					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-						literal = false;
+-					} else {
+-						output += format.charAt(iFormat);
+-					}
+-				} else {
+-					switch (format.charAt(iFormat)) {
+-						case "d":
+-							output += formatNumber("d", date.getDate(), 2);
+-							break;
+-						case "D":
+-							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+-							break;
+-						case "o":
+-							output += formatNumber("o",
+-								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+-							break;
+-						case "m":
+-							output += formatNumber("m", date.getMonth() + 1, 2);
+-							break;
+-						case "M":
+-							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+-							break;
+-						case "y":
+-							output += (lookAhead("y") ? date.getFullYear() :
+-								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+-							break;
+-						case "@":
+-							output += date.getTime();
+-							break;
+-						case "!":
+-							output += date.getTime() * 10000 + this._ticksTo1970;
+-							break;
+-						case "'":
+-							if (lookAhead("'")) {
+-								output += "'";
+-							} else {
+-								literal = true;
+-							}
+-							break;
+-						default:
+-							output += format.charAt(iFormat);
+-					}
+-				}
+-			}
+-		}
+-		return output;
+-	},
+-
+-	/* Extract all possible characters from the date format. */
+-	_possibleChars: function (format) {
+-		var iFormat,
+-			chars = "",
+-			literal = false,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					chars += format.charAt(iFormat);
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d": case "m": case "y": case "@":
+-						chars += "0123456789";
+-						break;
+-					case "D": case "M":
+-						return null; // Accept anything
+-					case "'":
+-						if (lookAhead("'")) {
+-							chars += "'";
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						chars += format.charAt(iFormat);
+-				}
+-			}
+-		}
+-		return chars;
+-	},
+-
+-	/* Get a setting value, defaulting if necessary. */
+-	_get: function(inst, name) {
+-		return inst.settings[name] !== undefined ?
+-			inst.settings[name] : this._defaults[name];
+-	},
+-
+-	/* Parse existing date and initialise date picker. */
+-	_setDateFromField: function(inst, noDefault) {
+-		if (inst.input.val() === inst.lastVal) {
+-			return;
+-		}
+-
+-		var dateFormat = this._get(inst, "dateFormat"),
+-			dates = inst.lastVal = inst.input ? inst.input.val() : null,
+-			defaultDate = this._getDefaultDate(inst),
+-			date = defaultDate,
+-			settings = this._getFormatConfig(inst);
+-
+-		try {
+-			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+-		} catch (event) {
+-			dates = (noDefault ? "" : dates);
+-		}
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		inst.currentDay = (dates ? date.getDate() : 0);
+-		inst.currentMonth = (dates ? date.getMonth() : 0);
+-		inst.currentYear = (dates ? date.getFullYear() : 0);
+-		this._adjustInstDate(inst);
+-	},
+-
+-	/* Retrieve the default date shown on opening. */
+-	_getDefaultDate: function(inst) {
+-		return this._restrictMinMax(inst,
+-			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+-	},
+-
+-	/* A date may be specified as an exact value or a relative one. */
+-	_determineDate: function(inst, date, defaultDate) {
+-		var offsetNumeric = function(offset) {
+-				var date = new Date();
+-				date.setDate(date.getDate() + offset);
+-				return date;
+-			},
+-			offsetString = function(offset) {
+-				try {
+-					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-						offset, $.datepicker._getFormatConfig(inst));
+-				}
+-				catch (e) {
+-					// Ignore
+-				}
+-
+-				var date = (offset.toLowerCase().match(/^c/) ?
+-					$.datepicker._getDate(inst) : null) || new Date(),
+-					year = date.getFullYear(),
+-					month = date.getMonth(),
+-					day = date.getDate(),
+-					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+-					matches = pattern.exec(offset);
+-
+-				while (matches) {
+-					switch (matches[2] || "d") {
+-						case "d" : case "D" :
+-							day += parseInt(matches[1],10); break;
+-						case "w" : case "W" :
+-							day += parseInt(matches[1],10) * 7; break;
+-						case "m" : case "M" :
+-							month += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-						case "y": case "Y" :
+-							year += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-					}
+-					matches = pattern.exec(offset);
+-				}
+-				return new Date(year, month, day);
+-			},
+-			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+-				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+-
+-		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+-		if (newDate) {
+-			newDate.setHours(0);
+-			newDate.setMinutes(0);
+-			newDate.setSeconds(0);
+-			newDate.setMilliseconds(0);
+-		}
+-		return this._daylightSavingAdjust(newDate);
+-	},
+-
+-	/* Handle switch to/from daylight saving.
+-	 * Hours may be non-zero on daylight saving cut-over:
+-	 * > 12 when midnight changeover, but then cannot generate
+-	 * midnight datetime, so jump to 1AM, otherwise reset.
+-	 * @param  date  (Date) the date to check
+-	 * @return  (Date) the corrected date
+-	 */
+-	_daylightSavingAdjust: function(date) {
+-		if (!date) {
+-			return null;
+-		}
+-		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+-		return date;
+-	},
+-
+-	/* Set the date(s) directly. */
+-	_setDate: function(inst, date, noChange) {
+-		var clear = !date,
+-			origMonth = inst.selectedMonth,
+-			origYear = inst.selectedYear,
+-			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+-
+-		inst.selectedDay = inst.currentDay = newDate.getDate();
+-		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+-		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+-		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+-			this._notifyChange(inst);
+-		}
+-		this._adjustInstDate(inst);
+-		if (inst.input) {
+-			inst.input.val(clear ? "" : this._formatDate(inst));
+-		}
+-	},
+-
+-	/* Retrieve the date(s) directly. */
+-	_getDate: function(inst) {
+-		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+-			this._daylightSavingAdjust(new Date(
+-			inst.currentYear, inst.currentMonth, inst.currentDay)));
+-			return startDate;
+-	},
+-
+-	/* Attach the onxxx handlers.  These are declared statically so
+-	 * they work with static code transformers like Caja.
+-	 */
+-	_attachHandlers: function(inst) {
+-		var stepMonths = this._get(inst, "stepMonths"),
+-			id = "#" + inst.id.replace( /\\\\/g, "\\" );
+-		inst.dpDiv.find("[data-handler]").map(function () {
+-			var handler = {
+-				prev: function () {
+-					$.datepicker._adjustDate(id, -stepMonths, "M");
+-				},
+-				next: function () {
+-					$.datepicker._adjustDate(id, +stepMonths, "M");
+-				},
+-				hide: function () {
+-					$.datepicker._hideDatepicker();
+-				},
+-				today: function () {
+-					$.datepicker._gotoToday(id);
+-				},
+-				selectDay: function () {
+-					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+-					return false;
+-				},
+-				selectMonth: function () {
+-					$.datepicker._selectMonthYear(id, this, "M");
+-					return false;
+-				},
+-				selectYear: function () {
+-					$.datepicker._selectMonthYear(id, this, "Y");
+-					return false;
+-				}
+-			};
+-			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+-		});
+-	},
+-
+-	/* Generate the HTML for the current state of the date picker. */
+-	_generateHTML: function(inst) {
+-		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+-			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+-			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+-			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+-			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+-			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+-			tempDate = new Date(),
+-			today = this._daylightSavingAdjust(
+-				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+-			isRTL = this._get(inst, "isRTL"),
+-			showButtonPanel = this._get(inst, "showButtonPanel"),
+-			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+-			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+-			numMonths = this._getNumberOfMonths(inst),
+-			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+-			stepMonths = this._get(inst, "stepMonths"),
+-			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+-			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+-				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			drawMonth = inst.drawMonth - showCurrentAtPos,
+-			drawYear = inst.drawYear;
+-
+-		if (drawMonth < 0) {
+-			drawMonth += 12;
+-			drawYear--;
+-		}
+-		if (maxDate) {
+-			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+-				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+-			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+-			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+-				drawMonth--;
+-				if (drawMonth < 0) {
+-					drawMonth = 11;
+-					drawYear--;
+-				}
+-			}
+-		}
+-		inst.drawMonth = drawMonth;
+-		inst.drawYear = drawYear;
+-
+-		prevText = this._get(inst, "prevText");
+-		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+-			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+-
+-		nextText = this._get(inst, "nextText");
+-		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+-			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+-
+-		currentText = this._get(inst, "currentText");
+-		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+-		currentText = (!navigationAsDateFormat ? currentText :
+-			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+-
+-		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+-			this._get(inst, "closeText") + "</button>" : "");
+-
+-		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+-			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+-			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+-
+-		firstDay = parseInt(this._get(inst, "firstDay"),10);
+-		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+-
+-		showWeek = this._get(inst, "showWeek");
+-		dayNames = this._get(inst, "dayNames");
+-		dayNamesMin = this._get(inst, "dayNamesMin");
+-		monthNames = this._get(inst, "monthNames");
+-		monthNamesShort = this._get(inst, "monthNamesShort");
+-		beforeShowDay = this._get(inst, "beforeShowDay");
+-		showOtherMonths = this._get(inst, "showOtherMonths");
+-		selectOtherMonths = this._get(inst, "selectOtherMonths");
+-		defaultDate = this._getDefaultDate(inst);
+-		html = "";
+-		dow;
+-		for (row = 0; row < numMonths[0]; row++) {
+-			group = "";
+-			this.maxRows = 4;
+-			for (col = 0; col < numMonths[1]; col++) {
+-				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+-				cornerClass = " ui-corner-all";
+-				calender = "";
+-				if (isMultiMonth) {
+-					calender += "<div class='ui-datepicker-group";
+-					if (numMonths[1] > 1) {
+-						switch (col) {
+-							case 0: calender += " ui-datepicker-group-first";
+-								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+-							case numMonths[1]-1: calender += " ui-datepicker-group-last";
+-								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+-							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+-						}
+-					}
+-					calender += "'>";
+-				}
+-				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+-					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+-					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+-					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+-					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+-					"</div><table class='ui-datepicker-calendar'><thead>" +
+-					"<tr>";
+-				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+-				for (dow = 0; dow < 7; dow++) { // days of the week
+-					day = (dow + firstDay) % 7;
+-					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+-						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+-				}
+-				calender += thead + "</tr></thead><tbody>";
+-				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+-				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+-					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+-				}
+-				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+-				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+-				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+-				this.maxRows = numRows;
+-				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+-				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+-					calender += "<tr>";
+-					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+-						this._get(inst, "calculateWeek")(printDate) + "</td>");
+-					for (dow = 0; dow < 7; dow++) { // create date picker days
+-						daySettings = (beforeShowDay ?
+-							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+-						otherMonth = (printDate.getMonth() !== drawMonth);
+-						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+-							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+-						tbody += "<td class='" +
+-							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+-							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+-							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+-							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+-							// or defaultDate is current printedDate and defaultDate is selectedDate
+-							" " + this._dayOverClass : "") + // highlight selected day
+-							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
+-							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+-							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+-							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+-							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+-							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+-							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+-							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+-							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+-							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+-							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+-							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+-						printDate.setDate(printDate.getDate() + 1);
+-						printDate = this._daylightSavingAdjust(printDate);
+-					}
+-					calender += tbody + "</tr>";
+-				}
+-				drawMonth++;
+-				if (drawMonth > 11) {
+-					drawMonth = 0;
+-					drawYear++;
+-				}
+-				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+-							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+-				group += calender;
+-			}
+-			html += group;
+-		}
+-		html += buttonPanel;
+-		inst._keyEvent = false;
+-		return html;
+-	},
+-
+-	/* Generate the month and year header. */
+-	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+-			secondary, monthNames, monthNamesShort) {
+-
+-		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+-			changeMonth = this._get(inst, "changeMonth"),
+-			changeYear = this._get(inst, "changeYear"),
+-			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+-			html = "<div class='ui-datepicker-title'>",
+-			monthHtml = "";
+-
+-		// month selection
+-		if (secondary || !changeMonth) {
+-			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+-		} else {
+-			inMinYear = (minDate && minDate.getFullYear() === drawYear);
+-			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+-			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+-			for ( month = 0; month < 12; month++) {
+-				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+-					monthHtml += "<option value='" + month + "'" +
+-						(month === drawMonth ? " selected='selected'" : "") +
+-						">" + monthNamesShort[month] + "</option>";
+-				}
+-			}
+-			monthHtml += "</select>";
+-		}
+-
+-		if (!showMonthAfterYear) {
+-			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+-		}
+-
+-		// year selection
+-		if ( !inst.yearshtml ) {
+-			inst.yearshtml = "";
+-			if (secondary || !changeYear) {
+-				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+-			} else {
+-				// determine range of years to display
+-				years = this._get(inst, "yearRange").split(":");
+-				thisYear = new Date().getFullYear();
+-				determineYear = function(value) {
+-					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+-						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+-						parseInt(value, 10)));
+-					return (isNaN(year) ? thisYear : year);
+-				};
+-				year = determineYear(years[0]);
+-				endYear = Math.max(year, determineYear(years[1] || ""));
+-				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+-				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+-				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+-				for (; year <= endYear; year++) {
+-					inst.yearshtml += "<option value='" + year + "'" +
+-						(year === drawYear ? " selected='selected'" : "") +
+-						">" + year + "</option>";
+-				}
+-				inst.yearshtml += "</select>";
+-
+-				html += inst.yearshtml;
+-				inst.yearshtml = null;
+-			}
+-		}
+-
+-		html += this._get(inst, "yearSuffix");
+-		if (showMonthAfterYear) {
+-			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+-		}
+-		html += "</div>"; // Close datepicker_header
+-		return html;
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustInstDate: function(inst, offset, period) {
+-		var year = inst.drawYear + (period === "Y" ? offset : 0),
+-			month = inst.drawMonth + (period === "M" ? offset : 0),
+-			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+-			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+-
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		if (period === "M" || period === "Y") {
+-			this._notifyChange(inst);
+-		}
+-	},
+-
+-	/* Ensure a date is within any min/max bounds. */
+-	_restrictMinMax: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			newDate = (minDate && date < minDate ? minDate : date);
+-		return (maxDate && newDate > maxDate ? maxDate : newDate);
+-	},
+-
+-	/* Notify change of month/year. */
+-	_notifyChange: function(inst) {
+-		var onChange = this._get(inst, "onChangeMonthYear");
+-		if (onChange) {
+-			onChange.apply((inst.input ? inst.input[0] : null),
+-				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+-		}
+-	},
+-
+-	/* Determine the number of months to show. */
+-	_getNumberOfMonths: function(inst) {
+-		var numMonths = this._get(inst, "numberOfMonths");
+-		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+-	},
+-
+-	/* Determine the current maximum date - ensure no time components are set. */
+-	_getMinMaxDate: function(inst, minMax) {
+-		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+-	},
+-
+-	/* Find the number of days in a given month. */
+-	_getDaysInMonth: function(year, month) {
+-		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+-	},
+-
+-	/* Find the day of the week of the first of a month. */
+-	_getFirstDayOfMonth: function(year, month) {
+-		return new Date(year, month, 1).getDay();
+-	},
+-
+-	/* Determines if we should allow a "next/prev" month display change. */
+-	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+-		var numMonths = this._getNumberOfMonths(inst),
+-			date = this._daylightSavingAdjust(new Date(curYear,
+-			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+-
+-		if (offset < 0) {
+-			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+-		}
+-		return this._isInRange(inst, date);
+-	},
+-
+-	/* Is the given date in the accepted range? */
+-	_isInRange: function(inst, date) {
+-		var yearSplit, currentYear,
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			minYear = null,
+-			maxYear = null,
+-			years = this._get(inst, "yearRange");
+-			if (years){
+-				yearSplit = years.split(":");
+-				currentYear = new Date().getFullYear();
+-				minYear = parseInt(yearSplit[0], 10);
+-				maxYear = parseInt(yearSplit[1], 10);
+-				if ( yearSplit[0].match(/[+\-].*/) ) {
+-					minYear += currentYear;
+-				}
+-				if ( yearSplit[1].match(/[+\-].*/) ) {
+-					maxYear += currentYear;
+-				}
+-			}
+-
+-		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+-			(!maxDate || date.getTime() <= maxDate.getTime()) &&
+-			(!minYear || date.getFullYear() >= minYear) &&
+-			(!maxYear || date.getFullYear() <= maxYear));
+-	},
+-
+-	/* Provide the configuration settings for formatting/parsing. */
+-	_getFormatConfig: function(inst) {
+-		var shortYearCutoff = this._get(inst, "shortYearCutoff");
+-		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+-			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		return {shortYearCutoff: shortYearCutoff,
+-			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+-			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+-	},
+-
+-	/* Format the given date for display. */
+-	_formatDate: function(inst, day, month, year) {
+-		if (!day) {
+-			inst.currentDay = inst.selectedDay;
+-			inst.currentMonth = inst.selectedMonth;
+-			inst.currentYear = inst.selectedYear;
+-		}
+-		var date = (day ? (typeof day === "object" ? day :
+-			this._daylightSavingAdjust(new Date(year, month, day))) :
+-			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+-	}
+-});
+-
+-/*
+- * Bind hover events for datepicker elements.
+- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+- */
+-function bindHover(dpDiv) {
+-	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+-	return dpDiv.delegate(selector, "mouseout", function() {
+-			$(this).removeClass("ui-state-hover");
+-			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-				$(this).removeClass("ui-datepicker-prev-hover");
+-			}
+-			if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-				$(this).removeClass("ui-datepicker-next-hover");
+-			}
+-		})
+-		.delegate(selector, "mouseover", function(){
+-			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
+-				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+-				$(this).addClass("ui-state-hover");
+-				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-					$(this).addClass("ui-datepicker-prev-hover");
+-				}
+-				if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-					$(this).addClass("ui-datepicker-next-hover");
+-				}
+-			}
+-		});
+-}
+-
+-/* jQuery extend now ignores nulls! */
+-function extendRemove(target, props) {
+-	$.extend(target, props);
+-	for (var name in props) {
+-		if (props[name] == null) {
+-			target[name] = props[name];
+-		}
+-	}
+-	return target;
+-}
+-
+-/* Invoke the datepicker functionality.
+-   @param  options  string - a command, optionally followed by additional parameters or
+-					Object - settings for attaching new datepicker functionality
+-   @return  jQuery object */
+-$.fn.datepicker = function(options){
+-
+-	/* Verify an empty collection wasn't passed - Fixes #6976 */
+-	if ( !this.length ) {
+-		return this;
+-	}
+-
+-	/* Initialise the date picker. */
+-	if (!$.datepicker.initialized) {
+-		$(document).mousedown($.datepicker._checkExternalClick);
+-		$.datepicker.initialized = true;
+-	}
+-
+-	/* Append datepicker main container to body if not exist. */
+-	if ($("#"+$.datepicker._mainDivId).length === 0) {
+-		$("body").append($.datepicker.dpDiv);
+-	}
+-
+-	var otherArgs = Array.prototype.slice.call(arguments, 1);
+-	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	return this.each(function() {
+-		typeof options === "string" ?
+-			$.datepicker["_" + options + "Datepicker"].
+-				apply($.datepicker, [this].concat(otherArgs)) :
+-			$.datepicker._attachDatepicker(this, options);
+-	});
+-};
+-
+-$.datepicker = new Datepicker(); // singleton instance
+-$.datepicker.initialized = false;
+-$.datepicker.uuid = new Date().getTime();
+-$.datepicker.version = "1.10.3";
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var sizeRelatedOptions = {
+-		buttons: true,
+-		height: true,
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true,
+-		width: true
+-	},
+-	resizableRelatedOptions = {
+-		maxHeight: true,
+-		maxWidth: true,
+-		minHeight: true,
+-		minWidth: true
+-	};
+-
+-$.widget( "ui.dialog", {
+-	version: "1.10.3",
+-	options: {
+-		appendTo: "body",
+-		autoOpen: true,
+-		buttons: [],
+-		closeOnEscape: true,
+-		closeText: "close",
+-		dialogClass: "",
+-		draggable: true,
+-		hide: null,
+-		height: "auto",
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 150,
+-		minWidth: 150,
+-		modal: false,
+-		position: {
+-			my: "center",
+-			at: "center",
+-			of: window,
+-			collision: "fit",
+-			// Ensure the titlebar is always visible
+-			using: function( pos ) {
+-				var topOffset = $( this ).css( pos ).offset().top;
+-				if ( topOffset < 0 ) {
+-					$( this ).css( "top", pos.top - topOffset );
+-				}
+-			}
+-		},
+-		resizable: true,
+-		show: null,
+-		title: null,
+-		width: 300,
+-
+-		// callbacks
+-		beforeClose: null,
+-		close: null,
+-		drag: null,
+-		dragStart: null,
+-		dragStop: null,
+-		focus: null,
+-		open: null,
+-		resize: null,
+-		resizeStart: null,
+-		resizeStop: null
+-	},
+-
+-	_create: function() {
+-		this.originalCss = {
+-			display: this.element[0].style.display,
+-			width: this.element[0].style.width,
+-			minHeight: this.element[0].style.minHeight,
+-			maxHeight: this.element[0].style.maxHeight,
+-			height: this.element[0].style.height
+-		};
+-		this.originalPosition = {
+-			parent: this.element.parent(),
+-			index: this.element.parent().children().index( this.element )
+-		};
+-		this.originalTitle = this.element.attr("title");
+-		this.options.title = this.options.title || this.originalTitle;
+-
+-		this._createWrapper();
+-
+-		this.element
+-			.show()
+-			.removeAttr("title")
+-			.addClass("ui-dialog-content ui-widget-content")
+-			.appendTo( this.uiDialog );
+-
+-		this._createTitlebar();
+-		this._createButtonPane();
+-
+-		if ( this.options.draggable && $.fn.draggable ) {
+-			this._makeDraggable();
+-		}
+-		if ( this.options.resizable && $.fn.resizable ) {
+-			this._makeResizable();
+-		}
+-
+-		this._isOpen = false;
+-	},
+-
+-	_init: function() {
+-		if ( this.options.autoOpen ) {
+-			this.open();
+-		}
+-	},
+-
+-	_appendTo: function() {
+-		var element = this.options.appendTo;
+-		if ( element && (element.jquery || element.nodeType) ) {
+-			return $( element );
+-		}
+-		return this.document.find( element || "body" ).eq( 0 );
+-	},
+-
+-	_destroy: function() {
+-		var next,
+-			originalPosition = this.originalPosition;
+-
+-		this._destroyOverlay();
+-
+-		this.element
+-			.removeUniqueId()
+-			.removeClass("ui-dialog-content ui-widget-content")
+-			.css( this.originalCss )
+-			// Without detaching first, the following becomes really slow
+-			.detach();
+-
+-		this.uiDialog.stop( true, true ).remove();
+-
+-		if ( this.originalTitle ) {
+-			this.element.attr( "title", this.originalTitle );
+-		}
+-
+-		next = originalPosition.parent.children().eq( originalPosition.index );
+-		// Don't try to place the dialog next to itself (#8613)
+-		if ( next.length && next[0] !== this.element[0] ) {
+-			next.before( this.element );
+-		} else {
+-			originalPosition.parent.append( this.element );
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.uiDialog;
+-	},
+-
+-	disable: $.noop,
+-	enable: $.noop,
+-
+-	close: function( event ) {
+-		var that = this;
+-
+-		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+-			return;
+-		}
+-
+-		this._isOpen = false;
+-		this._destroyOverlay();
+-
+-		if ( !this.opener.filter(":focusable").focus().length ) {
+-			// Hiding a focused element doesn't trigger blur in WebKit
+-			// so in case we have nothing to focus on, explicitly blur the active element
+-			// https://bugs.webkit.org/show_bug.cgi?id=47182
+-			$( this.document[0].activeElement ).blur();
+-		}
+-
+-		this._hide( this.uiDialog, this.options.hide, function() {
+-			that._trigger( "close", event );
+-		});
+-	},
+-
+-	isOpen: function() {
+-		return this._isOpen;
+-	},
+-
+-	moveToTop: function() {
+-		this._moveToTop();
+-	},
+-
+-	_moveToTop: function( event, silent ) {
+-		var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
+-		if ( moved && !silent ) {
+-			this._trigger( "focus", event );
+-		}
+-		return moved;
+-	},
+-
+-	open: function() {
+-		var that = this;
+-		if ( this._isOpen ) {
+-			if ( this._moveToTop() ) {
+-				this._focusTabbable();
+-			}
+-			return;
+-		}
+-
+-		this._isOpen = true;
+-		this.opener = $( this.document[0].activeElement );
+-
+-		this._size();
+-		this._position();
+-		this._createOverlay();
+-		this._moveToTop( null, true );
+-		this._show( this.uiDialog, this.options.show, function() {
+-			that._focusTabbable();
+-			that._trigger("focus");
+-		});
+-
+-		this._trigger("open");
+-	},
+-
+-	_focusTabbable: function() {
+-		// Set focus to the first match:
+-		// 1. First element inside the dialog matching [autofocus]
+-		// 2. Tabbable element inside the content element
+-		// 3. Tabbable element inside the buttonpane
+-		// 4. The close button
+-		// 5. The dialog itself
+-		var hasFocus = this.element.find("[autofocus]");
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.element.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogButtonPane.find(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+-		}
+-		if ( !hasFocus.length ) {
+-			hasFocus = this.uiDialog;
+-		}
+-		hasFocus.eq( 0 ).focus();
+-	},
+-
+-	_keepFocus: function( event ) {
+-		function checkFocus() {
+-			var activeElement = this.document[0].activeElement,
+-				isActive = this.uiDialog[0] === activeElement ||
+-					$.contains( this.uiDialog[0], activeElement );
+-			if ( !isActive ) {
+-				this._focusTabbable();
+-			}
+-		}
+-		event.preventDefault();
+-		checkFocus.call( this );
+-		// support: IE
+-		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+-		// so we check again later
+-		this._delay( checkFocus );
+-	},
+-
+-	_createWrapper: function() {
+-		this.uiDialog = $("<div>")
+-			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+-				this.options.dialogClass )
+-			.hide()
+-			.attr({
+-				// Setting tabIndex makes the div focusable
+-				tabIndex: -1,
+-				role: "dialog"
+-			})
+-			.appendTo( this._appendTo() );
+-
+-		this._on( this.uiDialog, {
+-			keydown: function( event ) {
+-				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+-						event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					event.preventDefault();
+-					this.close( event );
+-					return;
+-				}
+-
+-				// prevent tabbing out of dialogs
+-				if ( event.keyCode !== $.ui.keyCode.TAB ) {
+-					return;
+-				}
+-				var tabbables = this.uiDialog.find(":tabbable"),
+-					first = tabbables.filter(":first"),
+-					last  = tabbables.filter(":last");
+-
+-				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+-					first.focus( 1 );
+-					event.preventDefault();
+-				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+-					last.focus( 1 );
+-					event.preventDefault();
+-				}
+-			},
+-			mousedown: function( event ) {
+-				if ( this._moveToTop( event ) ) {
+-					this._focusTabbable();
+-				}
+-			}
+-		});
+-
+-		// We assume that any existing aria-describedby attribute means
+-		// that the dialog content is marked up properly
+-		// otherwise we brute force the content as the description
+-		if ( !this.element.find("[aria-describedby]").length ) {
+-			this.uiDialog.attr({
+-				"aria-describedby": this.element.uniqueId().attr("id")
+-			});
+-		}
+-	},
+-
+-	_createTitlebar: function() {
+-		var uiDialogTitle;
+-
+-		this.uiDialogTitlebar = $("<div>")
+-			.addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+-			.prependTo( this.uiDialog );
+-		this._on( this.uiDialogTitlebar, {
+-			mousedown: function( event ) {
+-				// Don't prevent click on close button (#8838)
+-				// Focusing a dialog that is partially scrolled out of view
+-				// causes the browser to scroll it into view, preventing the click event
+-				if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
+-					// Dialog isn't getting focus when dragging (#8063)
+-					this.uiDialog.focus();
+-				}
+-			}
+-		});
+-
+-		this.uiDialogTitlebarClose = $("<button></button>")
+-			.button({
+-				label: this.options.closeText,
+-				icons: {
+-					primary: "ui-icon-closethick"
+-				},
+-				text: false
+-			})
+-			.addClass("ui-dialog-titlebar-close")
+-			.appendTo( this.uiDialogTitlebar );
+-		this._on( this.uiDialogTitlebarClose, {
+-			click: function( event ) {
+-				event.preventDefault();
+-				this.close( event );
+-			}
+-		});
+-
+-		uiDialogTitle = $("<span>")
+-			.uniqueId()
+-			.addClass("ui-dialog-title")
+-			.prependTo( this.uiDialogTitlebar );
+-		this._title( uiDialogTitle );
+-
+-		this.uiDialog.attr({
+-			"aria-labelledby": uiDialogTitle.attr("id")
+-		});
+-	},
+-
+-	_title: function( title ) {
+-		if ( !this.options.title ) {
+-			title.html("&#160;");
+-		}
+-		title.text( this.options.title );
+-	},
+-
+-	_createButtonPane: function() {
+-		this.uiDialogButtonPane = $("<div>")
+-			.addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+-
+-		this.uiButtonSet = $("<div>")
+-			.addClass("ui-dialog-buttonset")
+-			.appendTo( this.uiDialogButtonPane );
+-
+-		this._createButtons();
+-	},
+-
+-	_createButtons: function() {
+-		var that = this,
+-			buttons = this.options.buttons;
+-
+-		// if we already have a button pane, remove it
+-		this.uiDialogButtonPane.remove();
+-		this.uiButtonSet.empty();
+-
+-		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+-			this.uiDialog.removeClass("ui-dialog-buttons");
+-			return;
+-		}
+-
+-		$.each( buttons, function( name, props ) {
+-			var click, buttonOptions;
+-			props = $.isFunction( props ) ?
+-				{ click: props, text: name } :
+-				props;
+-			// Default to a non-submitting button
+-			props = $.extend( { type: "button" }, props );
+-			// Change the context for the click callback to be the main element
+-			click = props.click;
+-			props.click = function() {
+-				click.apply( that.element[0], arguments );
+-			};
+-			buttonOptions = {
+-				icons: props.icons,
+-				text: props.showText
+-			};
+-			delete props.icons;
+-			delete props.showText;
+-			$( "<button></button>", props )
+-				.button( buttonOptions )
+-				.appendTo( that.uiButtonSet );
+-		});
+-		this.uiDialog.addClass("ui-dialog-buttons");
+-		this.uiDialogButtonPane.appendTo( this.uiDialog );
+-	},
+-
+-	_makeDraggable: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		function filteredUi( ui ) {
+-			return {
+-				position: ui.position,
+-				offset: ui.offset
+-			};
+-		}
+-
+-		this.uiDialog.draggable({
+-			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+-			handle: ".ui-dialog-titlebar",
+-			containment: "document",
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-dragging");
+-				that._blockFrames();
+-				that._trigger( "dragStart", event, filteredUi( ui ) );
+-			},
+-			drag: function( event, ui ) {
+-				that._trigger( "drag", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.position = [
+-					ui.position.left - that.document.scrollLeft(),
+-					ui.position.top - that.document.scrollTop()
+-				];
+-				$( this ).removeClass("ui-dialog-dragging");
+-				that._unblockFrames();
+-				that._trigger( "dragStop", event, filteredUi( ui ) );
+-			}
+-		});
+-	},
+-
+-	_makeResizable: function() {
+-		var that = this,
+-			options = this.options,
+-			handles = options.resizable,
+-			// .ui-resizable has position: relative defined in the stylesheet
+-			// but dialogs have to use absolute or fixed positioning
+-			position = this.uiDialog.css("position"),
+-			resizeHandles = typeof handles === "string" ?
+-				handles	:
+-				"n,e,s,w,se,sw,ne,nw";
+-
+-		function filteredUi( ui ) {
+-			return {
+-				originalPosition: ui.originalPosition,
+-				originalSize: ui.originalSize,
+-				position: ui.position,
+-				size: ui.size
+-			};
+-		}
+-
+-		this.uiDialog.resizable({
+-			cancel: ".ui-dialog-content",
+-			containment: "document",
+-			alsoResize: this.element,
+-			maxWidth: options.maxWidth,
+-			maxHeight: options.maxHeight,
+-			minWidth: options.minWidth,
+-			minHeight: this._minHeight(),
+-			handles: resizeHandles,
+-			start: function( event, ui ) {
+-				$( this ).addClass("ui-dialog-resizing");
+-				that._blockFrames();
+-				that._trigger( "resizeStart", event, filteredUi( ui ) );
+-			},
+-			resize: function( event, ui ) {
+-				that._trigger( "resize", event, filteredUi( ui ) );
+-			},
+-			stop: function( event, ui ) {
+-				options.height = $( this ).height();
+-				options.width = $( this ).width();
+-				$( this ).removeClass("ui-dialog-resizing");
+-				that._unblockFrames();
+-				that._trigger( "resizeStop", event, filteredUi( ui ) );
+-			}
+-		})
+-		.css( "position", position );
+-	},
+-
+-	_minHeight: function() {
+-		var options = this.options;
+-
+-		return options.height === "auto" ?
+-			options.minHeight :
+-			Math.min( options.minHeight, options.height );
+-	},
+-
+-	_position: function() {
+-		// Need to show the dialog to get the actual offset in the position plugin
+-		var isVisible = this.uiDialog.is(":visible");
+-		if ( !isVisible ) {
+-			this.uiDialog.show();
+-		}
+-		this.uiDialog.position( this.options.position );
+-		if ( !isVisible ) {
+-			this.uiDialog.hide();
+-		}
+-	},
+-
+-	_setOptions: function( options ) {
+-		var that = this,
+-			resize = false,
+-			resizableOptions = {};
+-
+-		$.each( options, function( key, value ) {
+-			that._setOption( key, value );
+-
+-			if ( key in sizeRelatedOptions ) {
+-				resize = true;
+-			}
+-			if ( key in resizableRelatedOptions ) {
+-				resizableOptions[ key ] = value;
+-			}
+-		});
+-
+-		if ( resize ) {
+-			this._size();
+-			this._position();
+-		}
+-		if ( this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", resizableOptions );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		/*jshint maxcomplexity:15*/
+-		var isDraggable, isResizable,
+-			uiDialog = this.uiDialog;
+-
+-		if ( key === "dialogClass" ) {
+-			uiDialog
+-				.removeClass( this.options.dialogClass )
+-				.addClass( value );
+-		}
+-
+-		if ( key === "disabled" ) {
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "appendTo" ) {
+-			this.uiDialog.appendTo( this._appendTo() );
+-		}
+-
+-		if ( key === "buttons" ) {
+-			this._createButtons();
+-		}
+-
+-		if ( key === "closeText" ) {
+-			this.uiDialogTitlebarClose.button({
+-				// Ensure that we always pass a string
+-				label: "" + value
+-			});
+-		}
+-
+-		if ( key === "draggable" ) {
+-			isDraggable = uiDialog.is(":data(ui-draggable)");
+-			if ( isDraggable && !value ) {
+-				uiDialog.draggable("destroy");
+-			}
+-
+-			if ( !isDraggable && value ) {
+-				this._makeDraggable();
+-			}
+-		}
+-
+-		if ( key === "position" ) {
+-			this._position();
+-		}
+-
+-		if ( key === "resizable" ) {
+-			// currently resizable, becoming non-resizable
+-			isResizable = uiDialog.is(":data(ui-resizable)");
+-			if ( isResizable && !value ) {
+-				uiDialog.resizable("destroy");
+-			}
+-
+-			// currently resizable, changing handles
+-			if ( isResizable && typeof value === "string" ) {
+-				uiDialog.resizable( "option", "handles", value );
+-			}
+-
+-			// currently non-resizable, becoming resizable
+-			if ( !isResizable && value !== false ) {
+-				this._makeResizable();
+-			}
+-		}
+-
+-		if ( key === "title" ) {
+-			this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
+-		}
+-	},
+-
+-	_size: function() {
+-		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+-		// divs will both have width and height set, so we need to reset them
+-		var nonContentHeight, minContentHeight, maxContentHeight,
+-			options = this.options;
+-
+-		// Reset content sizing
+-		this.element.show().css({
+-			width: "auto",
+-			minHeight: 0,
+-			maxHeight: "none",
+-			height: 0
+-		});
+-
+-		if ( options.minWidth > options.width ) {
+-			options.width = options.minWidth;
+-		}
+-
+-		// reset wrapper sizing
+-		// determine the height of all the non-content elements
+-		nonContentHeight = this.uiDialog.css({
+-				height: "auto",
+-				width: options.width
+-			})
+-			.outerHeight();
+-		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+-		maxContentHeight = typeof options.maxHeight === "number" ?
+-			Math.max( 0, options.maxHeight - nonContentHeight ) :
+-			"none";
+-
+-		if ( options.height === "auto" ) {
+-			this.element.css({
+-				minHeight: minContentHeight,
+-				maxHeight: maxContentHeight,
+-				height: "auto"
+-			});
+-		} else {
+-			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+-		}
+-
+-		if (this.uiDialog.is(":data(ui-resizable)") ) {
+-			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+-		}
+-	},
+-
+-	_blockFrames: function() {
+-		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+-			var iframe = $( this );
+-
+-			return $( "<div>" )
+-				.css({
+-					position: "absolute",
+-					width: iframe.outerWidth(),
+-					height: iframe.outerHeight()
+-				})
+-				.appendTo( iframe.parent() )
+-				.offset( iframe.offset() )[0];
+-		});
+-	},
+-
+-	_unblockFrames: function() {
+-		if ( this.iframeBlocks ) {
+-			this.iframeBlocks.remove();
+-			delete this.iframeBlocks;
+-		}
+-	},
+-
+-	_allowInteraction: function( event ) {
+-		if ( $( event.target ).closest(".ui-dialog").length ) {
+-			return true;
+-		}
+-
+-		// TODO: Remove hack when datepicker implements
+-		// the .ui-front logic (#8989)
+-		return !!$( event.target ).closest(".ui-datepicker").length;
+-	},
+-
+-	_createOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		var that = this,
+-			widgetFullName = this.widgetFullName;
+-		if ( !$.ui.dialog.overlayInstances ) {
+-			// Prevent use of anchors and inputs.
+-			// We use a delay in case the overlay is created from an
+-			// event that we're going to be cancelling. (#2804)
+-			this._delay(function() {
+-				// Handle .dialog().dialog("close") (#4065)
+-				if ( $.ui.dialog.overlayInstances ) {
+-					this.document.bind( "focusin.dialog", function( event ) {
+-						if ( !that._allowInteraction( event ) ) {
+-							event.preventDefault();
+-							$(".ui-dialog:visible:last .ui-dialog-content")
+-								.data( widgetFullName )._focusTabbable();
+-						}
+-					});
+-				}
+-			});
+-		}
+-
+-		this.overlay = $("<div>")
+-			.addClass("ui-widget-overlay ui-front")
+-			.appendTo( this._appendTo() );
+-		this._on( this.overlay, {
+-			mousedown: "_keepFocus"
+-		});
+-		$.ui.dialog.overlayInstances++;
+-	},
+-
+-	_destroyOverlay: function() {
+-		if ( !this.options.modal ) {
+-			return;
+-		}
+-
+-		if ( this.overlay ) {
+-			$.ui.dialog.overlayInstances--;
+-
+-			if ( !$.ui.dialog.overlayInstances ) {
+-				this.document.unbind( "focusin.dialog" );
+-			}
+-			this.overlay.remove();
+-			this.overlay = null;
+-		}
+-	}
+-});
+-
+-$.ui.dialog.overlayInstances = 0;
+-
+-// DEPRECATED
+-if ( $.uiBackCompat !== false ) {
+-	// position option with array notation
+-	// just override with old implementation
+-	$.widget( "ui.dialog", $.ui.dialog, {
+-		_position: function() {
+-			var position = this.options.position,
+-				myAt = [],
+-				offset = [ 0, 0 ],
+-				isVisible;
+-
+-			if ( position ) {
+-				if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
+-					myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
+-					if ( myAt.length === 1 ) {
+-						myAt[1] = myAt[0];
+-					}
+-
+-					$.each( [ "left", "top" ], function( i, offsetPosition ) {
+-						if ( +myAt[ i ] === myAt[ i ] ) {
+-							offset[ i ] = myAt[ i ];
+-							myAt[ i ] = offsetPosition;
+-						}
+-					});
+-
+-					position = {
+-						my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
+-							myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
+-						at: myAt.join(" ")
+-					};
+-				}
+-
+-				position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
+-			} else {
+-				position = $.ui.dialog.prototype.options.position;
+-			}
+-
+-			// need to show the dialog to get the actual offset in the position plugin
+-			isVisible = this.uiDialog.is(":visible");
+-			if ( !isVisible ) {
+-				this.uiDialog.show();
+-			}
+-			this.uiDialog.position( position );
+-			if ( !isVisible ) {
+-				this.uiDialog.hide();
+-			}
+-		}
+-	});
+-}
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-$.widget( "ui.menu", {
+-	version: "1.10.3",
+-	defaultElement: "<ul>",
+-	delay: 300,
+-	options: {
+-		icons: {
+-			submenu: "ui-icon-carat-1-e"
+-		},
+-		menus: "ul",
+-		position: {
+-			my: "left top",
+-			at: "right top"
+-		},
+-		role: "menu",
+-
+-		// callbacks
+-		blur: null,
+-		focus: null,
+-		select: null
+-	},
+-
+-	_create: function() {
+-		this.activeMenu = this.element;
+-		// flag used to prevent firing of the click handler
+-		// as the event bubbles up through nested menus
+-		this.mouseHandled = false;
+-		this.element
+-			.uniqueId()
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+-			.attr({
+-				role: this.options.role,
+-				tabIndex: 0
+-			})
+-			// need to catch all clicks on disabled menu
+-			// not possible through _on
+-			.bind( "click" + this.eventNamespace, $.proxy(function( event ) {
+-				if ( this.options.disabled ) {
+-					event.preventDefault();
+-				}
+-			}, this ));
+-
+-		if ( this.options.disabled ) {
+-			this.element
+-				.addClass( "ui-state-disabled" )
+-				.attr( "aria-disabled", "true" );
+-		}
+-
+-		this._on({
+-			// Prevent focus from sticking to links inside menu after clicking
+-			// them (focus should always stay on UL during navigation).
+-			"mousedown .ui-menu-item > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-state-disabled > a": function( event ) {
+-				event.preventDefault();
+-			},
+-			"click .ui-menu-item:has(a)": function( event ) {
+-				var target = $( event.target ).closest( ".ui-menu-item" );
+-				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+-					this.mouseHandled = true;
+-
+-					this.select( event );
+-					// Open submenu on click
+-					if ( target.has( ".ui-menu" ).length ) {
+-						this.expand( event );
+-					} else if ( !this.element.is( ":focus" ) ) {
+-						// Redirect focus to the menu
+-						this.element.trigger( "focus", [ true ] );
+-
+-						// If the active item is on the top level, let it stay active.
+-						// Otherwise, blur the active item since it is no longer visible.
+-						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+-							clearTimeout( this.timer );
+-						}
+-					}
+-				}
+-			},
+-			"mouseenter .ui-menu-item": function( event ) {
+-				var target = $( event.currentTarget );
+-				// Remove ui-state-active class from siblings of the newly focused menu item
+-				// to avoid a jump caused by adjacent elements both having a class with a border
+-				target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
+-				this.focus( event, target );
+-			},
+-			mouseleave: "collapseAll",
+-			"mouseleave .ui-menu": "collapseAll",
+-			focus: function( event, keepActiveItem ) {
+-				// If there's already an active item, keep it active
+-				// If not, activate the first item
+-				var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+-
+-				if ( !keepActiveItem ) {
+-					this.focus( event, item );
+-				}
+-			},
+-			blur: function( event ) {
+-				this._delay(function() {
+-					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+-						this.collapseAll( event );
+-					}
+-				});
+-			},
+-			keydown: "_keydown"
+-		});
+-
+-		this.refresh();
+-
+-		// Clicks outside of a menu collapse any open menus
+-		this._on( this.document, {
+-			click: function( event ) {
+-				if ( !$( event.target ).closest( ".ui-menu" ).length ) {
+-					this.collapseAll( event );
+-				}
+-
+-				// Reset the mouseHandled flag
+-				this.mouseHandled = false;
+-			}
+-		});
+-	},
+-
+-	_destroy: function() {
+-		// Destroy (sub)menus
+-		this.element
+-			.removeAttr( "aria-activedescendant" )
+-			.find( ".ui-menu" ).addBack()
+-				.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
+-				.removeAttr( "role" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "aria-labelledby" )
+-				.removeAttr( "aria-expanded" )
+-				.removeAttr( "aria-hidden" )
+-				.removeAttr( "aria-disabled" )
+-				.removeUniqueId()
+-				.show();
+-
+-		// Destroy menu items
+-		this.element.find( ".ui-menu-item" )
+-			.removeClass( "ui-menu-item" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-disabled" )
+-			.children( "a" )
+-				.removeUniqueId()
+-				.removeClass( "ui-corner-all ui-state-hover" )
+-				.removeAttr( "tabIndex" )
+-				.removeAttr( "role" )
+-				.removeAttr( "aria-haspopup" )
+-				.children().each( function() {
+-					var elem = $( this );
+-					if ( elem.data( "ui-menu-submenu-carat" ) ) {
+-						elem.remove();
+-					}
+-				});
+-
+-		// Destroy menu dividers
+-		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+-	},
+-
+-	_keydown: function( event ) {
+-		/*jshint maxcomplexity:20*/
+-		var match, prev, character, skip, regex,
+-			preventDefault = true;
+-
+-		function escape( value ) {
+-			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+-		}
+-
+-		switch ( event.keyCode ) {
+-		case $.ui.keyCode.PAGE_UP:
+-			this.previousPage( event );
+-			break;
+-		case $.ui.keyCode.PAGE_DOWN:
+-			this.nextPage( event );
+-			break;
+-		case $.ui.keyCode.HOME:
+-			this._move( "first", "first", event );
+-			break;
+-		case $.ui.keyCode.END:
+-			this._move( "last", "last", event );
+-			break;
+-		case $.ui.keyCode.UP:
+-			this.previous( event );
+-			break;
+-		case $.ui.keyCode.DOWN:
+-			this.next( event );
+-			break;
+-		case $.ui.keyCode.LEFT:
+-			this.collapse( event );
+-			break;
+-		case $.ui.keyCode.RIGHT:
+-			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+-				this.expand( event );
+-			}
+-			break;
+-		case $.ui.keyCode.ENTER:
+-		case $.ui.keyCode.SPACE:
+-			this._activate( event );
+-			break;
+-		case $.ui.keyCode.ESCAPE:
+-			this.collapse( event );
+-			break;
+-		default:
+-			preventDefault = false;
+-			prev = this.previousFilter || "";
+-			character = String.fromCharCode( event.keyCode );
+-			skip = false;
+-
+-			clearTimeout( this.filterTimer );
+-
+-			if ( character === prev ) {
+-				skip = true;
+-			} else {
+-				character = prev + character;
+-			}
+-
+-			regex = new RegExp( "^" + escape( character ), "i" );
+-			match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-				return regex.test( $( this ).children( "a" ).text() );
+-			});
+-			match = skip && match.index( this.active.next() ) !== -1 ?
+-				this.active.nextAll( ".ui-menu-item" ) :
+-				match;
+-
+-			// If no matches on the current filter, reset to the last character pressed
+-			// to move down the menu to the first item that starts with that character
+-			if ( !match.length ) {
+-				character = String.fromCharCode( event.keyCode );
+-				regex = new RegExp( "^" + escape( character ), "i" );
+-				match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
+-					return regex.test( $( this ).children( "a" ).text() );
+-				});
+-			}
+-
+-			if ( match.length ) {
+-				this.focus( event, match );
+-				if ( match.length > 1 ) {
+-					this.previousFilter = character;
+-					this.filterTimer = this._delay(function() {
+-						delete this.previousFilter;
+-					}, 1000 );
+-				} else {
+-					delete this.previousFilter;
+-				}
+-			} else {
+-				delete this.previousFilter;
+-			}
+-		}
+-
+-		if ( preventDefault ) {
+-			event.preventDefault();
+-		}
+-	},
+-
+-	_activate: function( event ) {
+-		if ( !this.active.is( ".ui-state-disabled" ) ) {
+-			if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
+-				this.expand( event );
+-			} else {
+-				this.select( event );
+-			}
+-		}
+-	},
+-
+-	refresh: function() {
+-		var menus,
+-			icon = this.options.icons.submenu,
+-			submenus = this.element.find( this.options.menus );
+-
+-		// Initialize nested menus
+-		submenus.filter( ":not(.ui-menu)" )
+-			.addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+-			.hide()
+-			.attr({
+-				role: this.options.role,
+-				"aria-hidden": "true",
+-				"aria-expanded": "false"
+-			})
+-			.each(function() {
+-				var menu = $( this ),
+-					item = menu.prev( "a" ),
+-					submenuCarat = $( "<span>" )
+-						.addClass( "ui-menu-icon ui-icon " + icon )
+-						.data( "ui-menu-submenu-carat", true );
+-
+-				item
+-					.attr( "aria-haspopup", "true" )
+-					.prepend( submenuCarat );
+-				menu.attr( "aria-labelledby", item.attr( "id" ) );
+-			});
+-
+-		menus = submenus.add( this.element );
+-
+-		// Don't refresh list items that are already adapted
+-		menus.children( ":not(.ui-menu-item):has(a)" )
+-			.addClass( "ui-menu-item" )
+-			.attr( "role", "presentation" )
+-			.children( "a" )
+-				.uniqueId()
+-				.addClass( "ui-corner-all" )
+-				.attr({
+-					tabIndex: -1,
+-					role: this._itemRole()
+-				});
+-
+-		// Initialize unlinked menu-items containing spaces and/or dashes only as dividers
+-		menus.children( ":not(.ui-menu-item)" ).each(function() {
+-			var item = $( this );
+-			// hyphen, em dash, en dash
+-			if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
+-				item.addClass( "ui-widget-content ui-menu-divider" );
+-			}
+-		});
+-
+-		// Add aria-disabled attribute to any disabled menu item
+-		menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+-
+-		// If the active item has been removed, blur the menu
+-		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+-			this.blur();
+-		}
+-	},
+-
+-	_itemRole: function() {
+-		return {
+-			menu: "menuitem",
+-			listbox: "option"
+-		}[ this.options.role ];
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "icons" ) {
+-			this.element.find( ".ui-menu-icon" )
+-				.removeClass( this.options.icons.submenu )
+-				.addClass( value.submenu );
+-		}
+-		this._super( key, value );
+-	},
+-
+-	focus: function( event, item ) {
+-		var nested, focused;
+-		this.blur( event, event && event.type === "focus" );
+-
+-		this._scrollIntoView( item );
+-
+-		this.active = item.first();
+-		focused = this.active.children( "a" ).addClass( "ui-state-focus" );
+-		// Only update aria-activedescendant if there's a role
+-		// otherwise we assume focus is managed elsewhere
+-		if ( this.options.role ) {
+-			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+-		}
+-
+-		// Highlight active parent menu item, if any
+-		this.active
+-			.parent()
+-			.closest( ".ui-menu-item" )
+-			.children( "a:first" )
+-			.addClass( "ui-state-active" );
+-
+-		if ( event && event.type === "keydown" ) {
+-			this._close();
+-		} else {
+-			this.timer = this._delay(function() {
+-				this._close();
+-			}, this.delay );
+-		}
+-
+-		nested = item.children( ".ui-menu" );
+-		if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
+-			this._startOpening(nested);
+-		}
+-		this.activeMenu = item.parent();
+-
+-		this._trigger( "focus", event, { item: item } );
+-	},
+-
+-	_scrollIntoView: function( item ) {
+-		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+-		if ( this._hasScroll() ) {
+-			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+-			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+-			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+-			scroll = this.activeMenu.scrollTop();
+-			elementHeight = this.activeMenu.height();
+-			itemHeight = item.height();
+-
+-			if ( offset < 0 ) {
+-				this.activeMenu.scrollTop( scroll + offset );
+-			} else if ( offset + itemHeight > elementHeight ) {
+-				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+-			}
+-		}
+-	},
+-
+-	blur: function( event, fromFocus ) {
+-		if ( !fromFocus ) {
+-			clearTimeout( this.timer );
+-		}
+-
+-		if ( !this.active ) {
+-			return;
+-		}
+-
+-		this.active.children( "a" ).removeClass( "ui-state-focus" );
+-		this.active = null;
+-
+-		this._trigger( "blur", event, { item: this.active } );
+-	},
+-
+-	_startOpening: function( submenu ) {
+-		clearTimeout( this.timer );
+-
+-		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
+-		// shift in the submenu position when mousing over the carat icon
+-		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+-			return;
+-		}
+-
+-		this.timer = this._delay(function() {
+-			this._close();
+-			this._open( submenu );
+-		}, this.delay );
+-	},
+-
+-	_open: function( submenu ) {
+-		var position = $.extend({
+-			of: this.active
+-		}, this.options.position );
+-
+-		clearTimeout( this.timer );
+-		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+-			.hide()
+-			.attr( "aria-hidden", "true" );
+-
+-		submenu
+-			.show()
+-			.removeAttr( "aria-hidden" )
+-			.attr( "aria-expanded", "true" )
+-			.position( position );
+-	},
+-
+-	collapseAll: function( event, all ) {
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			// If we were passed an event, look for the submenu that contains the event
+-			var currentMenu = all ? this.element :
+-				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+-
+-			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+-			if ( !currentMenu.length ) {
+-				currentMenu = this.element;
+-			}
+-
+-			this._close( currentMenu );
+-
+-			this.blur( event );
+-			this.activeMenu = currentMenu;
+-		}, this.delay );
+-	},
+-
+-	// With no arguments, closes the currently active menu - if nothing is active
+-	// it closes all menus.  If passed an argument, it will search for menus BELOW
+-	_close: function( startMenu ) {
+-		if ( !startMenu ) {
+-			startMenu = this.active ? this.active.parent() : this.element;
+-		}
+-
+-		startMenu
+-			.find( ".ui-menu" )
+-				.hide()
+-				.attr( "aria-hidden", "true" )
+-				.attr( "aria-expanded", "false" )
+-			.end()
+-			.find( "a.ui-state-active" )
+-				.removeClass( "ui-state-active" );
+-	},
+-
+-	collapse: function( event ) {
+-		var newItem = this.active &&
+-			this.active.parent().closest( ".ui-menu-item", this.element );
+-		if ( newItem && newItem.length ) {
+-			this._close();
+-			this.focus( event, newItem );
+-		}
+-	},
+-
+-	expand: function( event ) {
+-		var newItem = this.active &&
+-			this.active
+-				.children( ".ui-menu " )
+-				.children( ".ui-menu-item" )
+-				.first();
+-
+-		if ( newItem && newItem.length ) {
+-			this._open( newItem.parent() );
+-
+-			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+-			this._delay(function() {
+-				this.focus( event, newItem );
+-			});
+-		}
+-	},
+-
+-	next: function( event ) {
+-		this._move( "next", "first", event );
+-	},
+-
+-	previous: function( event ) {
+-		this._move( "prev", "last", event );
+-	},
+-
+-	isFirstItem: function() {
+-		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+-	},
+-
+-	isLastItem: function() {
+-		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+-	},
+-
+-	_move: function( direction, filter, event ) {
+-		var next;
+-		if ( this.active ) {
+-			if ( direction === "first" || direction === "last" ) {
+-				next = this.active
+-					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+-					.eq( -1 );
+-			} else {
+-				next = this.active
+-					[ direction + "All" ]( ".ui-menu-item" )
+-					.eq( 0 );
+-			}
+-		}
+-		if ( !next || !next.length || !this.active ) {
+-			next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
+-		}
+-
+-		this.focus( event, next );
+-	},
+-
+-	nextPage: function( event ) {
+-		var item, base, height;
+-
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isLastItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.nextAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base - height < 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" )
+-				[ !this.active ? "first" : "last" ]() );
+-		}
+-	},
+-
+-	previousPage: function( event ) {
+-		var item, base, height;
+-		if ( !this.active ) {
+-			this.next( event );
+-			return;
+-		}
+-		if ( this.isFirstItem() ) {
+-			return;
+-		}
+-		if ( this._hasScroll() ) {
+-			base = this.active.offset().top;
+-			height = this.element.height();
+-			this.active.prevAll( ".ui-menu-item" ).each(function() {
+-				item = $( this );
+-				return item.offset().top - base + height > 0;
+-			});
+-
+-			this.focus( event, item );
+-		} else {
+-			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+-		}
+-	},
+-
+-	_hasScroll: function() {
+-		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+-	},
+-
+-	select: function( event ) {
+-		// TODO: It should never be possible to not have an active item at this
+-		// point, but the tests don't trigger mouseenter before click.
+-		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+-		var ui = { item: this.active };
+-		if ( !this.active.has( ".ui-menu" ).length ) {
+-			this.collapseAll( event, true );
+-		}
+-		this._trigger( "select", event, ui );
+-	}
+-});
+-
+-}( jQuery ));
+-(function( $, undefined ) {
+-
+-$.widget( "ui.progressbar", {
+-	version: "1.10.3",
+-	options: {
+-		max: 100,
+-		value: 0,
+-
+-		change: null,
+-		complete: null
+-	},
+-
+-	min: 0,
+-
+-	_create: function() {
+-		// Constrain initial value
+-		this.oldValue = this.options.value = this._constrainedValue();
+-
+-		this.element
+-			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.attr({
+-				// Only set static values, aria-valuenow and aria-valuemax are
+-				// set inside _refreshValue()
+-				role: "progressbar",
+-				"aria-valuemin": this.min
+-			});
+-
+-		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+-			.appendTo( this.element );
+-
+-		this._refreshValue();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-
+-		this.valueDiv.remove();
+-	},
+-
+-	value: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			return this.options.value;
+-		}
+-
+-		this.options.value = this._constrainedValue( newValue );
+-		this._refreshValue();
+-	},
+-
+-	_constrainedValue: function( newValue ) {
+-		if ( newValue === undefined ) {
+-			newValue = this.options.value;
+-		}
+-
+-		this.indeterminate = newValue === false;
+-
+-		// sanitize value
+-		if ( typeof newValue !== "number" ) {
+-			newValue = 0;
+-		}
+-
+-		return this.indeterminate ? false :
+-			Math.min( this.options.max, Math.max( this.min, newValue ) );
+-	},
+-
+-	_setOptions: function( options ) {
+-		// Ensure "value" option is set after other values (like max)
+-		var value = options.value;
+-		delete options.value;
+-
+-		this._super( options );
+-
+-		this.options.value = this._constrainedValue( value );
+-		this._refreshValue();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "max" ) {
+-			// Don't allow a max less than min
+-			value = Math.max( this.min, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	_percentage: function() {
+-		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+-	},
+-
+-	_refreshValue: function() {
+-		var value = this.options.value,
+-			percentage = this._percentage();
+-
+-		this.valueDiv
+-			.toggle( this.indeterminate || value > this.min )
+-			.toggleClass( "ui-corner-right", value === this.options.max )
+-			.width( percentage.toFixed(0) + "%" );
+-
+-		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+-
+-		if ( this.indeterminate ) {
+-			this.element.removeAttr( "aria-valuenow" );
+-			if ( !this.overlayDiv ) {
+-				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+-			}
+-		} else {
+-			this.element.attr({
+-				"aria-valuemax": this.options.max,
+-				"aria-valuenow": value
+-			});
+-			if ( this.overlayDiv ) {
+-				this.overlayDiv.remove();
+-				this.overlayDiv = null;
+-			}
+-		}
+-
+-		if ( this.oldValue !== value ) {
+-			this.oldValue = value;
+-			this._trigger( "change" );
+-		}
+-		if ( value === this.options.max ) {
+-			this._trigger( "complete" );
+-		}
+-	}
+-});
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-// number of pages in a slider
+-// (how many times can you page up/down to go through the whole range)
+-var numPages = 5;
+-
+-$.widget( "ui.slider", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "slide",
+-
+-	options: {
+-		animate: false,
+-		distance: 0,
+-		max: 100,
+-		min: 0,
+-		orientation: "horizontal",
+-		range: false,
+-		step: 1,
+-		value: 0,
+-		values: null,
+-
+-		// callbacks
+-		change: null,
+-		slide: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		this._keySliding = false;
+-		this._mouseSliding = false;
+-		this._animateOff = true;
+-		this._handleIndex = null;
+-		this._detectOrientation();
+-		this._mouseInit();
+-
+-		this.element
+-			.addClass( "ui-slider" +
+-				" ui-slider-" + this.orientation +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all");
+-
+-		this._refresh();
+-		this._setOption( "disabled", this.options.disabled );
+-
+-		this._animateOff = false;
+-	},
+-
+-	_refresh: function() {
+-		this._createRange();
+-		this._createHandles();
+-		this._setupEvents();
+-		this._refreshValue();
+-	},
+-
+-	_createHandles: function() {
+-		var i, handleCount,
+-			options = this.options,
+-			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+-			handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+-			handles = [];
+-
+-		handleCount = ( options.values && options.values.length ) || 1;
+-
+-		if ( existingHandles.length > handleCount ) {
+-			existingHandles.slice( handleCount ).remove();
+-			existingHandles = existingHandles.slice( 0, handleCount );
+-		}
+-
+-		for ( i = existingHandles.length; i < handleCount; i++ ) {
+-			handles.push( handle );
+-		}
+-
+-		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+-
+-		this.handle = this.handles.eq( 0 );
+-
+-		this.handles.each(function( i ) {
+-			$( this ).data( "ui-slider-handle-index", i );
+-		});
+-	},
+-
+-	_createRange: function() {
+-		var options = this.options,
+-			classes = "";
+-
+-		if ( options.range ) {
+-			if ( options.range === true ) {
+-				if ( !options.values ) {
+-					options.values = [ this._valueMin(), this._valueMin() ];
+-				} else if ( options.values.length && options.values.length !== 2 ) {
+-					options.values = [ options.values[0], options.values[0] ];
+-				} else if ( $.isArray( options.values ) ) {
+-					options.values = options.values.slice(0);
+-				}
+-			}
+-
+-			if ( !this.range || !this.range.length ) {
+-				this.range = $( "<div></div>" )
+-					.appendTo( this.element );
+-
+-				classes = "ui-slider-range" +
+-				// note: this isn't the most fittingly semantic framework class for this element,
+-				// but worked best visually with a variety of themes
+-				" ui-widget-header ui-corner-all";
+-			} else {
+-				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+-					// Handle range switching from true to min/max
+-					.css({
+-						"left": "",
+-						"bottom": ""
+-					});
+-			}
+-
+-			this.range.addClass( classes +
+-				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+-		} else {
+-			this.range = $([]);
+-		}
+-	},
+-
+-	_setupEvents: function() {
+-		var elements = this.handles.add( this.range ).filter( "a" );
+-		this._off( elements );
+-		this._on( elements, this._handleEvents );
+-		this._hoverable( elements );
+-		this._focusable( elements );
+-	},
+-
+-	_destroy: function() {
+-		this.handles.remove();
+-		this.range.remove();
+-
+-		this.element
+-			.removeClass( "ui-slider" +
+-				" ui-slider-horizontal" +
+-				" ui-slider-vertical" +
+-				" ui-widget" +
+-				" ui-widget-content" +
+-				" ui-corner-all" );
+-
+-		this._mouseDestroy();
+-	},
+-
+-	_mouseCapture: function( event ) {
+-		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+-			that = this,
+-			o = this.options;
+-
+-		if ( o.disabled ) {
+-			return false;
+-		}
+-
+-		this.elementSize = {
+-			width: this.element.outerWidth(),
+-			height: this.element.outerHeight()
+-		};
+-		this.elementOffset = this.element.offset();
+-
+-		position = { x: event.pageX, y: event.pageY };
+-		normValue = this._normValueFromMouse( position );
+-		distance = this._valueMax() - this._valueMin() + 1;
+-		this.handles.each(function( i ) {
+-			var thisDistance = Math.abs( normValue - that.values(i) );
+-			if (( distance > thisDistance ) ||
+-				( distance === thisDistance &&
+-					(i === that._lastChangedValue || that.values(i) === o.min ))) {
+-				distance = thisDistance;
+-				closestHandle = $( this );
+-				index = i;
+-			}
+-		});
+-
+-		allowed = this._start( event, index );
+-		if ( allowed === false ) {
+-			return false;
+-		}
+-		this._mouseSliding = true;
+-
+-		this._handleIndex = index;
+-
+-		closestHandle
+-			.addClass( "ui-state-active" )
+-			.focus();
+-
+-		offset = closestHandle.offset();
+-		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+-		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+-			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+-			top: event.pageY - offset.top -
+-				( closestHandle.height() / 2 ) -
+-				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+-				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+-				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+-		};
+-
+-		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+-			this._slide( event, index, normValue );
+-		}
+-		this._animateOff = true;
+-		return true;
+-	},
+-
+-	_mouseStart: function() {
+-		return true;
+-	},
+-
+-	_mouseDrag: function( event ) {
+-		var position = { x: event.pageX, y: event.pageY },
+-			normValue = this._normValueFromMouse( position );
+-
+-		this._slide( event, this._handleIndex, normValue );
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function( event ) {
+-		this.handles.removeClass( "ui-state-active" );
+-		this._mouseSliding = false;
+-
+-		this._stop( event, this._handleIndex );
+-		this._change( event, this._handleIndex );
+-
+-		this._handleIndex = null;
+-		this._clickOffset = null;
+-		this._animateOff = false;
+-
+-		return false;
+-	},
+-
+-	_detectOrientation: function() {
+-		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+-	},
+-
+-	_normValueFromMouse: function( position ) {
+-		var pixelTotal,
+-			pixelMouse,
+-			percentMouse,
+-			valueTotal,
+-			valueMouse;
+-
+-		if ( this.orientation === "horizontal" ) {
+-			pixelTotal = this.elementSize.width;
+-			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+-		} else {
+-			pixelTotal = this.elementSize.height;
+-			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+-		}
+-
+-		percentMouse = ( pixelMouse / pixelTotal );
+-		if ( percentMouse > 1 ) {
+-			percentMouse = 1;
+-		}
+-		if ( percentMouse < 0 ) {
+-			percentMouse = 0;
+-		}
+-		if ( this.orientation === "vertical" ) {
+-			percentMouse = 1 - percentMouse;
+-		}
+-
+-		valueTotal = this._valueMax() - this._valueMin();
+-		valueMouse = this._valueMin() + percentMouse * valueTotal;
+-
+-		return this._trimAlignValue( valueMouse );
+-	},
+-
+-	_start: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-		return this._trigger( "start", event, uiHash );
+-	},
+-
+-	_slide: function( event, index, newVal ) {
+-		var otherVal,
+-			newValues,
+-			allowed;
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			otherVal = this.values( index ? 0 : 1 );
+-
+-			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+-					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+-				) {
+-				newVal = otherVal;
+-			}
+-
+-			if ( newVal !== this.values( index ) ) {
+-				newValues = this.values();
+-				newValues[ index ] = newVal;
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal,
+-					values: newValues
+-				} );
+-				otherVal = this.values( index ? 0 : 1 );
+-				if ( allowed !== false ) {
+-					this.values( index, newVal, true );
+-				}
+-			}
+-		} else {
+-			if ( newVal !== this.value() ) {
+-				// A slide can be canceled by returning false from the slide callback
+-				allowed = this._trigger( "slide", event, {
+-					handle: this.handles[ index ],
+-					value: newVal
+-				} );
+-				if ( allowed !== false ) {
+-					this.value( newVal );
+-				}
+-			}
+-		}
+-	},
+-
+-	_stop: function( event, index ) {
+-		var uiHash = {
+-			handle: this.handles[ index ],
+-			value: this.value()
+-		};
+-		if ( this.options.values && this.options.values.length ) {
+-			uiHash.value = this.values( index );
+-			uiHash.values = this.values();
+-		}
+-
+-		this._trigger( "stop", event, uiHash );
+-	},
+-
+-	_change: function( event, index ) {
+-		if ( !this._keySliding && !this._mouseSliding ) {
+-			var uiHash = {
+-				handle: this.handles[ index ],
+-				value: this.value()
+-			};
+-			if ( this.options.values && this.options.values.length ) {
+-				uiHash.value = this.values( index );
+-				uiHash.values = this.values();
+-			}
+-
+-			//store the last changed value index for reference when handles overlap
+-			this._lastChangedValue = index;
+-
+-			this._trigger( "change", event, uiHash );
+-		}
+-	},
+-
+-	value: function( newValue ) {
+-		if ( arguments.length ) {
+-			this.options.value = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, 0 );
+-			return;
+-		}
+-
+-		return this._value();
+-	},
+-
+-	values: function( index, newValue ) {
+-		var vals,
+-			newValues,
+-			i;
+-
+-		if ( arguments.length > 1 ) {
+-			this.options.values[ index ] = this._trimAlignValue( newValue );
+-			this._refreshValue();
+-			this._change( null, index );
+-			return;
+-		}
+-
+-		if ( arguments.length ) {
+-			if ( $.isArray( arguments[ 0 ] ) ) {
+-				vals = this.options.values;
+-				newValues = arguments[ 0 ];
+-				for ( i = 0; i < vals.length; i += 1 ) {
+-					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+-					this._change( null, i );
+-				}
+-				this._refreshValue();
+-			} else {
+-				if ( this.options.values && this.options.values.length ) {
+-					return this._values( index );
+-				} else {
+-					return this.value();
+-				}
+-			}
+-		} else {
+-			return this._values();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var i,
+-			valsLength = 0;
+-
+-		if ( key === "range" && this.options.range === true ) {
+-			if ( value === "min" ) {
+-				this.options.value = this._values( 0 );
+-				this.options.values = null;
+-			} else if ( value === "max" ) {
+-				this.options.value = this._values( this.options.values.length-1 );
+-				this.options.values = null;
+-			}
+-		}
+-
+-		if ( $.isArray( this.options.values ) ) {
+-			valsLength = this.options.values.length;
+-		}
+-
+-		$.Widget.prototype._setOption.apply( this, arguments );
+-
+-		switch ( key ) {
+-			case "orientation":
+-				this._detectOrientation();
+-				this.element
+-					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+-					.addClass( "ui-slider-" + this.orientation );
+-				this._refreshValue();
+-				break;
+-			case "value":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._change( null, 0 );
+-				this._animateOff = false;
+-				break;
+-			case "values":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				for ( i = 0; i < valsLength; i += 1 ) {
+-					this._change( null, i );
+-				}
+-				this._animateOff = false;
+-				break;
+-			case "min":
+-			case "max":
+-				this._animateOff = true;
+-				this._refreshValue();
+-				this._animateOff = false;
+-				break;
+-			case "range":
+-				this._animateOff = true;
+-				this._refresh();
+-				this._animateOff = false;
+-				break;
+-		}
+-	},
+-
+-	//internal value getter
+-	// _value() returns value trimmed by min and max, aligned by step
+-	_value: function() {
+-		var val = this.options.value;
+-		val = this._trimAlignValue( val );
+-
+-		return val;
+-	},
+-
+-	//internal values getter
+-	// _values() returns array of values trimmed by min and max, aligned by step
+-	// _values( index ) returns single value trimmed by min and max, aligned by step
+-	_values: function( index ) {
+-		var val,
+-			vals,
+-			i;
+-
+-		if ( arguments.length ) {
+-			val = this.options.values[ index ];
+-			val = this._trimAlignValue( val );
+-
+-			return val;
+-		} else if ( this.options.values && this.options.values.length ) {
+-			// .slice() creates a copy of the array
+-			// this copy gets trimmed by min and max and then returned
+-			vals = this.options.values.slice();
+-			for ( i = 0; i < vals.length; i+= 1) {
+-				vals[ i ] = this._trimAlignValue( vals[ i ] );
+-			}
+-
+-			return vals;
+-		} else {
+-			return [];
+-		}
+-	},
+-
+-	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+-	_trimAlignValue: function( val ) {
+-		if ( val <= this._valueMin() ) {
+-			return this._valueMin();
+-		}
+-		if ( val >= this._valueMax() ) {
+-			return this._valueMax();
+-		}
+-		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+-			valModStep = (val - this._valueMin()) % step,
+-			alignValue = val - valModStep;
+-
+-		if ( Math.abs(valModStep) * 2 >= step ) {
+-			alignValue += ( valModStep > 0 ) ? step : ( -step );
+-		}
+-
+-		// Since JavaScript has problems with large floats, round
+-		// the final value to 5 digits after the decimal point (see #4124)
+-		return parseFloat( alignValue.toFixed(5) );
+-	},
+-
+-	_valueMin: function() {
+-		return this.options.min;
+-	},
+-
+-	_valueMax: function() {
+-		return this.options.max;
+-	},
+-
+-	_refreshValue: function() {
+-		var lastValPercent, valPercent, value, valueMin, valueMax,
+-			oRange = this.options.range,
+-			o = this.options,
+-			that = this,
+-			animate = ( !this._animateOff ) ? o.animate : false,
+-			_set = {};
+-
+-		if ( this.options.values && this.options.values.length ) {
+-			this.handles.each(function( i ) {
+-				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+-				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-				if ( that.options.range === true ) {
+-					if ( that.orientation === "horizontal" ) {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					} else {
+-						if ( i === 0 ) {
+-							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+-						}
+-						if ( i === 1 ) {
+-							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+-						}
+-					}
+-				}
+-				lastValPercent = valPercent;
+-			});
+-		} else {
+-			value = this.value();
+-			valueMin = this._valueMin();
+-			valueMax = this._valueMax();
+-			valPercent = ( valueMax !== valueMin ) ?
+-					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+-					0;
+-			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+-			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+-
+-			if ( oRange === "min" && this.orientation === "horizontal" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "horizontal" ) {
+-				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-			if ( oRange === "min" && this.orientation === "vertical" ) {
+-				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+-			}
+-			if ( oRange === "max" && this.orientation === "vertical" ) {
+-				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+-			}
+-		}
+-	},
+-
+-	_handleEvents: {
+-		keydown: function( event ) {
+-			/*jshint maxcomplexity:25*/
+-			var allowed, curVal, newVal, step,
+-				index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-				case $.ui.keyCode.END:
+-				case $.ui.keyCode.PAGE_UP:
+-				case $.ui.keyCode.PAGE_DOWN:
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					event.preventDefault();
+-					if ( !this._keySliding ) {
+-						this._keySliding = true;
+-						$( event.target ).addClass( "ui-state-active" );
+-						allowed = this._start( event, index );
+-						if ( allowed === false ) {
+-							return;
+-						}
+-					}
+-					break;
+-			}
+-
+-			step = this.options.step;
+-			if ( this.options.values && this.options.values.length ) {
+-				curVal = newVal = this.values( index );
+-			} else {
+-				curVal = newVal = this.value();
+-			}
+-
+-			switch ( event.keyCode ) {
+-				case $.ui.keyCode.HOME:
+-					newVal = this._valueMin();
+-					break;
+-				case $.ui.keyCode.END:
+-					newVal = this._valueMax();
+-					break;
+-				case $.ui.keyCode.PAGE_UP:
+-					newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.PAGE_DOWN:
+-					newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+-					break;
+-				case $.ui.keyCode.UP:
+-				case $.ui.keyCode.RIGHT:
+-					if ( curVal === this._valueMax() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal + step );
+-					break;
+-				case $.ui.keyCode.DOWN:
+-				case $.ui.keyCode.LEFT:
+-					if ( curVal === this._valueMin() ) {
+-						return;
+-					}
+-					newVal = this._trimAlignValue( curVal - step );
+-					break;
+-			}
+-
+-			this._slide( event, index, newVal );
+-		},
+-		click: function( event ) {
+-			event.preventDefault();
+-		},
+-		keyup: function( event ) {
+-			var index = $( event.target ).data( "ui-slider-handle-index" );
+-
+-			if ( this._keySliding ) {
+-				this._keySliding = false;
+-				this._stop( event, index );
+-				this._change( event, index );
+-				$( event.target ).removeClass( "ui-state-active" );
+-			}
+-		}
+-	}
+-
+-});
+-
+-}(jQuery));
+-(function( $ ) {
+-
+-function modifier( fn ) {
+-	return function() {
+-		var previous = this.element.val();
+-		fn.apply( this, arguments );
+-		this._refresh();
+-		if ( previous !== this.element.val() ) {
+-			this._trigger( "change" );
+-		}
+-	};
+-}
+-
+-$.widget( "ui.spinner", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	widgetEventPrefix: "spin",
+-	options: {
+-		culture: null,
+-		icons: {
+-			down: "ui-icon-triangle-1-s",
+-			up: "ui-icon-triangle-1-n"
+-		},
+-		incremental: true,
+-		max: null,
+-		min: null,
+-		numberFormat: null,
+-		page: 10,
+-		step: 1,
+-
+-		change: null,
+-		spin: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		// handle string values that need to be parsed
+-		this._setOption( "max", this.options.max );
+-		this._setOption( "min", this.options.min );
+-		this._setOption( "step", this.options.step );
+-
+-		// format the value, but don't constrain
+-		this._value( this.element.val(), true );
+-
+-		this._draw();
+-		this._on( this._events );
+-		this._refresh();
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_getCreateOptions: function() {
+-		var options = {},
+-			element = this.element;
+-
+-		$.each( [ "min", "max", "step" ], function( i, option ) {
+-			var value = element.attr( option );
+-			if ( value !== undefined && value.length ) {
+-				options[ option ] = value;
+-			}
+-		});
+-
+-		return options;
+-	},
+-
+-	_events: {
+-		keydown: function( event ) {
+-			if ( this._start( event ) && this._keydown( event ) ) {
+-				event.preventDefault();
+-			}
+-		},
+-		keyup: "_stop",
+-		focus: function() {
+-			this.previous = this.element.val();
+-		},
+-		blur: function( event ) {
+-			if ( this.cancelBlur ) {
+-				delete this.cancelBlur;
+-				return;
+-			}
+-
+-			this._stop();
+-			this._refresh();
+-			if ( this.previous !== this.element.val() ) {
+-				this._trigger( "change", event );
+-			}
+-		},
+-		mousewheel: function( event, delta ) {
+-			if ( !delta ) {
+-				return;
+-			}
+-			if ( !this.spinning && !this._start( event ) ) {
+-				return false;
+-			}
+-
+-			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+-			clearTimeout( this.mousewheelTimer );
+-			this.mousewheelTimer = this._delay(function() {
+-				if ( this.spinning ) {
+-					this._stop( event );
+-				}
+-			}, 100 );
+-			event.preventDefault();
+-		},
+-		"mousedown .ui-spinner-button": function( event ) {
+-			var previous;
+-
+-			// We never want the buttons to have focus; whenever the user is
+-			// interacting with the spinner, the focus should be on the input.
+-			// If the input is focused then this.previous is properly set from
+-			// when the input first received focus. If the input is not focused
+-			// then we need to set this.previous based on the value before spinning.
+-			previous = this.element[0] === this.document[0].activeElement ?
+-				this.previous : this.element.val();
+-			function checkFocus() {
+-				var isActive = this.element[0] === this.document[0].activeElement;
+-				if ( !isActive ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// support: IE
+-					// IE sets focus asynchronously, so we need to check if focus
+-					// moved off of the input because the user clicked on the button.
+-					this._delay(function() {
+-						this.previous = previous;
+-					});
+-				}
+-			}
+-
+-			// ensure focus is on (or stays on) the text field
+-			event.preventDefault();
+-			checkFocus.call( this );
+-
+-			// support: IE
+-			// IE doesn't prevent moving focus even with event.preventDefault()
+-			// so we set a flag to know when we should ignore the blur event
+-			// and check (again) if focus moved off of the input.
+-			this.cancelBlur = true;
+-			this._delay(function() {
+-				delete this.cancelBlur;
+-				checkFocus.call( this );
+-			});
+-
+-			if ( this._start( event ) === false ) {
+-				return;
+-			}
+-
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		"mouseup .ui-spinner-button": "_stop",
+-		"mouseenter .ui-spinner-button": function( event ) {
+-			// button will add ui-state-active if mouse was down while mouseleave and kept down
+-			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+-				return;
+-			}
+-
+-			if ( this._start( event ) === false ) {
+-				return false;
+-			}
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		// TODO: do we really want to consider this a stop?
+-		// shouldn't we just stop the repeater and wait until mouseup before
+-		// we trigger the stop event?
+-		"mouseleave .ui-spinner-button": "_stop"
+-	},
+-
+-	_draw: function() {
+-		var uiSpinner = this.uiSpinner = this.element
+-			.addClass( "ui-spinner-input" )
+-			.attr( "autocomplete", "off" )
+-			.wrap( this._uiSpinnerHtml() )
+-			.parent()
+-				// add buttons
+-				.append( this._buttonHtml() );
+-
+-		this.element.attr( "role", "spinbutton" );
+-
+-		// button bindings
+-		this.buttons = uiSpinner.find( ".ui-spinner-button" )
+-			.attr( "tabIndex", -1 )
+-			.button()
+-			.removeClass( "ui-corner-all" );
+-
+-		// IE 6 doesn't understand height: 50% for the buttons
+-		// unless the wrapper has an explicit height
+-		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+-				uiSpinner.height() > 0 ) {
+-			uiSpinner.height( uiSpinner.height() );
+-		}
+-
+-		// disable spinner if element was already disabled
+-		if ( this.options.disabled ) {
+-			this.disable();
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		var options = this.options,
+-			keyCode = $.ui.keyCode;
+-
+-		switch ( event.keyCode ) {
+-		case keyCode.UP:
+-			this._repeat( null, 1, event );
+-			return true;
+-		case keyCode.DOWN:
+-			this._repeat( null, -1, event );
+-			return true;
+-		case keyCode.PAGE_UP:
+-			this._repeat( null, options.page, event );
+-			return true;
+-		case keyCode.PAGE_DOWN:
+-			this._repeat( null, -options.page, event );
+-			return true;
+-		}
+-
+-		return false;
+-	},
+-
+-	_uiSpinnerHtml: function() {
+-		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+-	},
+-
+-	_buttonHtml: function() {
+-		return "" +
+-			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+-				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+-			"</a>" +
+-			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+-				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+-			"</a>";
+-	},
+-
+-	_start: function( event ) {
+-		if ( !this.spinning && this._trigger( "start", event ) === false ) {
+-			return false;
+-		}
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-		this.spinning = true;
+-		return true;
+-	},
+-
+-	_repeat: function( i, steps, event ) {
+-		i = i || 500;
+-
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			this._repeat( 40, steps, event );
+-		}, i );
+-
+-		this._spin( steps * this.options.step, event );
+-	},
+-
+-	_spin: function( step, event ) {
+-		var value = this.value() || 0;
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-
+-		value = this._adjustValue( value + step * this._increment( this.counter ) );
+-
+-		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+-			this._value( value );
+-			this.counter++;
+-		}
+-	},
+-
+-	_increment: function( i ) {
+-		var incremental = this.options.incremental;
+-
+-		if ( incremental ) {
+-			return $.isFunction( incremental ) ?
+-				incremental( i ) :
+-				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+-		}
+-
+-		return 1;
+-	},
+-
+-	_precision: function() {
+-		var precision = this._precisionOf( this.options.step );
+-		if ( this.options.min !== null ) {
+-			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+-		}
+-		return precision;
+-	},
+-
+-	_precisionOf: function( num ) {
+-		var str = num.toString(),
+-			decimal = str.indexOf( "." );
+-		return decimal === -1 ? 0 : str.length - decimal - 1;
+-	},
+-
+-	_adjustValue: function( value ) {
+-		var base, aboveMin,
+-			options = this.options;
+-
+-		// make sure we're at a valid step
+-		// - find out where we are relative to the base (min or 0)
+-		base = options.min !== null ? options.min : 0;
+-		aboveMin = value - base;
+-		// - round to the nearest step
+-		aboveMin = Math.round(aboveMin / options.step) * options.step;
+-		// - rounding is based on 0, so adjust back to our base
+-		value = base + aboveMin;
+-
+-		// fix precision from bad JS floating point math
+-		value = parseFloat( value.toFixed( this._precision() ) );
+-
+-		// clamp the value
+-		if ( options.max !== null && value > options.max) {
+-			return options.max;
+-		}
+-		if ( options.min !== null && value < options.min ) {
+-			return options.min;
+-		}
+-
+-		return value;
+-	},
+-
+-	_stop: function( event ) {
+-		if ( !this.spinning ) {
+-			return;
+-		}
+-
+-		clearTimeout( this.timer );
+-		clearTimeout( this.mousewheelTimer );
+-		this.counter = 0;
+-		this.spinning = false;
+-		this._trigger( "stop", event );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "culture" || key === "numberFormat" ) {
+-			var prevValue = this._parse( this.element.val() );
+-			this.options[ key ] = value;
+-			this.element.val( this._format( prevValue ) );
+-			return;
+-		}
+-
+-		if ( key === "max" || key === "min" || key === "step" ) {
+-			if ( typeof value === "string" ) {
+-				value = this._parse( value );
+-			}
+-		}
+-		if ( key === "icons" ) {
+-			this.buttons.first().find( ".ui-icon" )
+-				.removeClass( this.options.icons.up )
+-				.addClass( value.up );
+-			this.buttons.last().find( ".ui-icon" )
+-				.removeClass( this.options.icons.down )
+-				.addClass( value.down );
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-				this.buttons.button( "disable" );
+-			} else {
+-				this.element.prop( "disabled", false );
+-				this.buttons.button( "enable" );
+-			}
+-		}
+-	},
+-
+-	_setOptions: modifier(function( options ) {
+-		this._super( options );
+-		this._value( this.element.val() );
+-	}),
+-
+-	_parse: function( val ) {
+-		if ( typeof val === "string" && val !== "" ) {
+-			val = window.Globalize && this.options.numberFormat ?
+-				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+-		}
+-		return val === "" || isNaN( val ) ? null : val;
+-	},
+-
+-	_format: function( value ) {
+-		if ( value === "" ) {
+-			return "";
+-		}
+-		return window.Globalize && this.options.numberFormat ?
+-			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+-			value;
+-	},
+-
+-	_refresh: function() {
+-		this.element.attr({
+-			"aria-valuemin": this.options.min,
+-			"aria-valuemax": this.options.max,
+-			// TODO: what should we do with values that can't be parsed?
+-			"aria-valuenow": this._parse( this.element.val() )
+-		});
+-	},
+-
+-	// update the value without triggering change
+-	_value: function( value, allowAny ) {
+-		var parsed;
+-		if ( value !== "" ) {
+-			parsed = this._parse( value );
+-			if ( parsed !== null ) {
+-				if ( !allowAny ) {
+-					parsed = this._adjustValue( parsed );
+-				}
+-				value = this._format( parsed );
+-			}
+-		}
+-		this.element.val( value );
+-		this._refresh();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-spinner-input" )
+-			.prop( "disabled", false )
+-			.removeAttr( "autocomplete" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-		this.uiSpinner.replaceWith( this.element );
+-	},
+-
+-	stepUp: modifier(function( steps ) {
+-		this._stepUp( steps );
+-	}),
+-	_stepUp: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	stepDown: modifier(function( steps ) {
+-		this._stepDown( steps );
+-	}),
+-	_stepDown: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * -this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	pageUp: modifier(function( pages ) {
+-		this._stepUp( (pages || 1) * this.options.page );
+-	}),
+-
+-	pageDown: modifier(function( pages ) {
+-		this._stepDown( (pages || 1) * this.options.page );
+-	}),
+-
+-	value: function( newVal ) {
+-		if ( !arguments.length ) {
+-			return this._parse( this.element.val() );
+-		}
+-		modifier( this._value ).call( this, newVal );
+-	},
+-
+-	widget: function() {
+-		return this.uiSpinner;
+-	}
+-});
+-
+-}( jQuery ) );
+-(function( $, undefined ) {
+-
+-var tabId = 0,
+-	rhash = /#.*$/;
+-
+-function getNextTabId() {
+-	return ++tabId;
+-}
+-
+-function isLocal( anchor ) {
+-	return anchor.hash.length > 1 &&
+-		decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
+-			decodeURIComponent( location.href.replace( rhash, "" ) );
+-}
+-
+-$.widget( "ui.tabs", {
+-	version: "1.10.3",
+-	delay: 300,
+-	options: {
+-		active: null,
+-		collapsible: false,
+-		event: "click",
+-		heightStyle: "content",
+-		hide: null,
+-		show: null,
+-
+-		// callbacks
+-		activate: null,
+-		beforeActivate: null,
+-		beforeLoad: null,
+-		load: null
+-	},
+-
+-	_create: function() {
+-		var that = this,
+-			options = this.options;
+-
+-		this.running = false;
+-
+-		this.element
+-			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+-			.toggleClass( "ui-tabs-collapsible", options.collapsible )
+-			// Prevent users from focusing disabled tabs via click
+-			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
+-				if ( $( this ).is( ".ui-state-disabled" ) ) {
+-					event.preventDefault();
+-				}
+-			})
+-			// support: IE <9
+-			// Preventing the default action in mousedown doesn't prevent IE
+-			// from focusing the element, so if the anchor gets focused, blur.
+-			// We don't have to worry about focusing the previously focused
+-			// element since clicking on a non-focusable element should focus
+-			// the body anyway.
+-			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+-				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+-					this.blur();
+-				}
+-			});
+-
+-		this._processTabs();
+-		options.active = this._initialActive();
+-
+-		// Take disabling tabs via class attribute from HTML
+-		// into account and update option properly.
+-		if ( $.isArray( options.disabled ) ) {
+-			options.disabled = $.unique( options.disabled.concat(
+-				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+-					return that.tabs.index( li );
+-				})
+-			) ).sort();
+-		}
+-
+-		// check for length avoids error when initializing empty list
+-		if ( this.options.active !== false && this.anchors.length ) {
+-			this.active = this._findActive( options.active );
+-		} else {
+-			this.active = $();
+-		}
+-
+-		this._refresh();
+-
+-		if ( this.active.length ) {
+-			this.load( options.active );
+-		}
+-	},
+-
+-	_initialActive: function() {
+-		var active = this.options.active,
+-			collapsible = this.options.collapsible,
+-			locationHash = location.hash.substring( 1 );
+-
+-		if ( active === null ) {
+-			// check the fragment identifier in the URL
+-			if ( locationHash ) {
+-				this.tabs.each(function( i, tab ) {
+-					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+-						active = i;
+-						return false;
+-					}
+-				});
+-			}
+-
+-			// check for a tab marked active via a class
+-			if ( active === null ) {
+-				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+-			}
+-
+-			// no active tab, set to false
+-			if ( active === null || active === -1 ) {
+-				active = this.tabs.length ? 0 : false;
+-			}
+-		}
+-
+-		// handle numbers: negative, out of range
+-		if ( active !== false ) {
+-			active = this.tabs.index( this.tabs.eq( active ) );
+-			if ( active === -1 ) {
+-				active = collapsible ? false : 0;
+-			}
+-		}
+-
+-		// don't allow collapsible: false and active: false
+-		if ( !collapsible && active === false && this.anchors.length ) {
+-			active = 0;
+-		}
+-
+-		return active;
+-	},
+-
+-	_getCreateEventData: function() {
+-		return {
+-			tab: this.active,
+-			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+-		};
+-	},
+-
+-	_tabKeydown: function( event ) {
+-		/*jshint maxcomplexity:15*/
+-		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+-			selectedIndex = this.tabs.index( focusedTab ),
+-			goingForward = true;
+-
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		switch ( event.keyCode ) {
+-			case $.ui.keyCode.RIGHT:
+-			case $.ui.keyCode.DOWN:
+-				selectedIndex++;
+-				break;
+-			case $.ui.keyCode.UP:
+-			case $.ui.keyCode.LEFT:
+-				goingForward = false;
+-				selectedIndex--;
+-				break;
+-			case $.ui.keyCode.END:
+-				selectedIndex = this.anchors.length - 1;
+-				break;
+-			case $.ui.keyCode.HOME:
+-				selectedIndex = 0;
+-				break;
+-			case $.ui.keyCode.SPACE:
+-				// Activate only, no collapsing
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				this._activate( selectedIndex );
+-				return;
+-			case $.ui.keyCode.ENTER:
+-				// Toggle (cancel delayed activation, allow collapsing)
+-				event.preventDefault();
+-				clearTimeout( this.activating );
+-				// Determine if we should collapse or activate
+-				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+-				return;
+-			default:
+-				return;
+-		}
+-
+-		// Focus the appropriate tab, based on which key was pressed
+-		event.preventDefault();
+-		clearTimeout( this.activating );
+-		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+-
+-		// Navigating with control key will prevent automatic activation
+-		if ( !event.ctrlKey ) {
+-			// Update aria-selected immediately so that AT think the tab is already selected.
+-			// Otherwise AT may confuse the user by stating that they need to activate the tab,
+-			// but the tab will already be activated by the time the announcement finishes.
+-			focusedTab.attr( "aria-selected", "false" );
+-			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+-
+-			this.activating = this._delay(function() {
+-				this.option( "active", selectedIndex );
+-			}, this.delay );
+-		}
+-	},
+-
+-	_panelKeydown: function( event ) {
+-		if ( this._handlePageNav( event ) ) {
+-			return;
+-		}
+-
+-		// Ctrl+up moves focus to the current tab
+-		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+-			event.preventDefault();
+-			this.active.focus();
+-		}
+-	},
+-
+-	// Alt+page up/down moves focus to the previous/next tab (and activates)
+-	_handlePageNav: function( event ) {
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+-			this._activate( this._focusNextTab( this.options.active - 1, false ) );
+-			return true;
+-		}
+-		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+-			this._activate( this._focusNextTab( this.options.active + 1, true ) );
+-			return true;
+-		}
+-	},
+-
+-	_findNextTab: function( index, goingForward ) {
+-		var lastTabIndex = this.tabs.length - 1;
+-
+-		function constrain() {
+-			if ( index > lastTabIndex ) {
+-				index = 0;
+-			}
+-			if ( index < 0 ) {
+-				index = lastTabIndex;
+-			}
+-			return index;
+-		}
+-
+-		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+-			index = goingForward ? index + 1 : index - 1;
+-		}
+-
+-		return index;
+-	},
+-
+-	_focusNextTab: function( index, goingForward ) {
+-		index = this._findNextTab( index, goingForward );
+-		this.tabs.eq( index ).focus();
+-		return index;
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "active" ) {
+-			// _activate() will handle invalid values and update this.options
+-			this._activate( value );
+-			return;
+-		}
+-
+-		if ( key === "disabled" ) {
+-			// don't use the widget factory's disabled handling
+-			this._setupDisabled( value );
+-			return;
+-		}
+-
+-		this._super( key, value);
+-
+-		if ( key === "collapsible" ) {
+-			this.element.toggleClass( "ui-tabs-collapsible", value );
+-			// Setting collapsible: false while collapsed; open first panel
+-			if ( !value && this.options.active === false ) {
+-				this._activate( 0 );
+-			}
+-		}
+-
+-		if ( key === "event" ) {
+-			this._setupEvents( value );
+-		}
+-
+-		if ( key === "heightStyle" ) {
+-			this._setupHeightStyle( value );
+-		}
+-	},
+-
+-	_tabId: function( tab ) {
+-		return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
+-	},
+-
+-	_sanitizeSelector: function( hash ) {
+-		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+-	},
+-
+-	refresh: function() {
+-		var options = this.options,
+-			lis = this.tablist.children( ":has(a[href])" );
+-
+-		// get disabled tabs from class attribute from HTML
+-		// this will get converted to a boolean if needed in _refresh()
+-		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+-			return lis.index( tab );
+-		});
+-
+-		this._processTabs();
+-
+-		// was collapsed or no tabs
+-		if ( options.active === false || !this.anchors.length ) {
+-			options.active = false;
+-			this.active = $();
+-		// was active, but active tab is gone
+-		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+-			// all remaining tabs are disabled
+-			if ( this.tabs.length === options.disabled.length ) {
+-				options.active = false;
+-				this.active = $();
+-			// activate previous tab
+-			} else {
+-				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+-			}
+-		// was active, active tab still exists
+-		} else {
+-			// make sure active index is correct
+-			options.active = this.tabs.index( this.active );
+-		}
+-
+-		this._refresh();
+-	},
+-
+-	_refresh: function() {
+-		this._setupDisabled( this.options.disabled );
+-		this._setupEvents( this.options.event );
+-		this._setupHeightStyle( this.options.heightStyle );
+-
+-		this.tabs.not( this.active ).attr({
+-			"aria-selected": "false",
+-			tabIndex: -1
+-		});
+-		this.panels.not( this._getPanelForTab( this.active ) )
+-			.hide()
+-			.attr({
+-				"aria-expanded": "false",
+-				"aria-hidden": "true"
+-			});
+-
+-		// Make sure one tab is in the tab order
+-		if ( !this.active.length ) {
+-			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+-		} else {
+-			this.active
+-				.addClass( "ui-tabs-active ui-state-active" )
+-				.attr({
+-					"aria-selected": "true",
+-					tabIndex: 0
+-				});
+-			this._getPanelForTab( this.active )
+-				.show()
+-				.attr({
+-					"aria-expanded": "true",
+-					"aria-hidden": "false"
+-				});
+-		}
+-	},
+-
+-	_processTabs: function() {
+-		var that = this;
+-
+-		this.tablist = this._getList()
+-			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.attr( "role", "tablist" );
+-
+-		this.tabs = this.tablist.find( "> li:has(a[href])" )
+-			.addClass( "ui-state-default ui-corner-top" )
+-			.attr({
+-				role: "tab",
+-				tabIndex: -1
+-			});
+-
+-		this.anchors = this.tabs.map(function() {
+-				return $( "a", this )[ 0 ];
+-			})
+-			.addClass( "ui-tabs-anchor" )
+-			.attr({
+-				role: "presentation",
+-				tabIndex: -1
+-			});
+-
+-		this.panels = $();
+-
+-		this.anchors.each(function( i, anchor ) {
+-			var selector, panel, panelId,
+-				anchorId = $( anchor ).uniqueId().attr( "id" ),
+-				tab = $( anchor ).closest( "li" ),
+-				originalAriaControls = tab.attr( "aria-controls" );
+-
+-			// inline tab
+-			if ( isLocal( anchor ) ) {
+-				selector = anchor.hash;
+-				panel = that.element.find( that._sanitizeSelector( selector ) );
+-			// remote tab
+-			} else {
+-				panelId = that._tabId( tab );
+-				selector = "#" + panelId;
+-				panel = that.element.find( selector );
+-				if ( !panel.length ) {
+-					panel = that._createPanel( panelId );
+-					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+-				}
+-				panel.attr( "aria-live", "polite" );
+-			}
+-
+-			if ( panel.length) {
+-				that.panels = that.panels.add( panel );
+-			}
+-			if ( originalAriaControls ) {
+-				tab.data( "ui-tabs-aria-controls", originalAriaControls );
+-			}
+-			tab.attr({
+-				"aria-controls": selector.substring( 1 ),
+-				"aria-labelledby": anchorId
+-			});
+-			panel.attr( "aria-labelledby", anchorId );
+-		});
+-
+-		this.panels
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.attr( "role", "tabpanel" );
+-	},
+-
+-	// allow overriding how to find the list for rare usage scenarios (#7715)
+-	_getList: function() {
+-		return this.element.find( "ol,ul" ).eq( 0 );
+-	},
+-
+-	_createPanel: function( id ) {
+-		return $( "<div>" )
+-			.attr( "id", id )
+-			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+-			.data( "ui-tabs-destroy", true );
+-	},
+-
+-	_setupDisabled: function( disabled ) {
+-		if ( $.isArray( disabled ) ) {
+-			if ( !disabled.length ) {
+-				disabled = false;
+-			} else if ( disabled.length === this.anchors.length ) {
+-				disabled = true;
+-			}
+-		}
+-
+-		// disable tabs
+-		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+-			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+-				$( li )
+-					.addClass( "ui-state-disabled" )
+-					.attr( "aria-disabled", "true" );
+-			} else {
+-				$( li )
+-					.removeClass( "ui-state-disabled" )
+-					.removeAttr( "aria-disabled" );
+-			}
+-		}
+-
+-		this.options.disabled = disabled;
+-	},
+-
+-	_setupEvents: function( event ) {
+-		var events = {
+-			click: function( event ) {
+-				event.preventDefault();
+-			}
+-		};
+-		if ( event ) {
+-			$.each( event.split(" "), function( index, eventName ) {
+-				events[ eventName ] = "_eventHandler";
+-			});
+-		}
+-
+-		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+-		this._on( this.anchors, events );
+-		this._on( this.tabs, { keydown: "_tabKeydown" } );
+-		this._on( this.panels, { keydown: "_panelKeydown" } );
+-
+-		this._focusable( this.tabs );
+-		this._hoverable( this.tabs );
+-	},
+-
+-	_setupHeightStyle: function( heightStyle ) {
+-		var maxHeight,
+-			parent = this.element.parent();
+-
+-		if ( heightStyle === "fill" ) {
+-			maxHeight = parent.height();
+-			maxHeight -= this.element.outerHeight() - this.element.height();
+-
+-			this.element.siblings( ":visible" ).each(function() {
+-				var elem = $( this ),
+-					position = elem.css( "position" );
+-
+-				if ( position === "absolute" || position === "fixed" ) {
+-					return;
+-				}
+-				maxHeight -= elem.outerHeight( true );
+-			});
+-
+-			this.element.children().not( this.panels ).each(function() {
+-				maxHeight -= $( this ).outerHeight( true );
+-			});
+-
+-			this.panels.each(function() {
+-				$( this ).height( Math.max( 0, maxHeight -
+-					$( this ).innerHeight() + $( this ).height() ) );
+-			})
+-			.css( "overflow", "auto" );
+-		} else if ( heightStyle === "auto" ) {
+-			maxHeight = 0;
+-			this.panels.each(function() {
+-				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+-			}).height( maxHeight );
+-		}
+-	},
+-
+-	_eventHandler: function( event ) {
+-		var options = this.options,
+-			active = this.active,
+-			anchor = $( event.currentTarget ),
+-			tab = anchor.closest( "li" ),
+-			clickedIsActive = tab[ 0 ] === active[ 0 ],
+-			collapsing = clickedIsActive && options.collapsible,
+-			toShow = collapsing ? $() : this._getPanelForTab( tab ),
+-			toHide = !active.length ? $() : this._getPanelForTab( active ),
+-			eventData = {
+-				oldTab: active,
+-				oldPanel: toHide,
+-				newTab: collapsing ? $() : tab,
+-				newPanel: toShow
+-			};
+-
+-		event.preventDefault();
+-
+-		if ( tab.hasClass( "ui-state-disabled" ) ||
+-				// tab is already loading
+-				tab.hasClass( "ui-tabs-loading" ) ||
+-				// can't switch durning an animation
+-				this.running ||
+-				// click on active header, but not collapsible
+-				( clickedIsActive && !options.collapsible ) ||
+-				// allow canceling activation
+-				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+-			return;
+-		}
+-
+-		options.active = collapsing ? false : this.tabs.index( tab );
+-
+-		this.active = clickedIsActive ? $() : tab;
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		if ( !toHide.length && !toShow.length ) {
+-			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+-		}
+-
+-		if ( toShow.length ) {
+-			this.load( this.tabs.index( tab ), event );
+-		}
+-		this._toggle( event, eventData );
+-	},
+-
+-	// handles show/hide for selecting tabs
+-	_toggle: function( event, eventData ) {
+-		var that = this,
+-			toShow = eventData.newPanel,
+-			toHide = eventData.oldPanel;
+-
+-		this.running = true;
+-
+-		function complete() {
+-			that.running = false;
+-			that._trigger( "activate", event, eventData );
+-		}
+-
+-		function show() {
+-			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+-
+-			if ( toShow.length && that.options.show ) {
+-				that._show( toShow, that.options.show, complete );
+-			} else {
+-				toShow.show();
+-				complete();
+-			}
+-		}
+-
+-		// start out by hiding, then showing, then completing
+-		if ( toHide.length && this.options.hide ) {
+-			this._hide( toHide, this.options.hide, function() {
+-				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-				show();
+-			});
+-		} else {
+-			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+-			toHide.hide();
+-			show();
+-		}
+-
+-		toHide.attr({
+-			"aria-expanded": "false",
+-			"aria-hidden": "true"
+-		});
+-		eventData.oldTab.attr( "aria-selected", "false" );
+-		// If we're switching tabs, remove the old tab from the tab order.
+-		// If we're opening from collapsed state, remove the previous tab from the tab order.
+-		// If we're collapsing, then keep the collapsing tab in the tab order.
+-		if ( toShow.length && toHide.length ) {
+-			eventData.oldTab.attr( "tabIndex", -1 );
+-		} else if ( toShow.length ) {
+-			this.tabs.filter(function() {
+-				return $( this ).attr( "tabIndex" ) === 0;
+-			})
+-			.attr( "tabIndex", -1 );
+-		}
+-
+-		toShow.attr({
+-			"aria-expanded": "true",
+-			"aria-hidden": "false"
+-		});
+-		eventData.newTab.attr({
+-			"aria-selected": "true",
+-			tabIndex: 0
+-		});
+-	},
+-
+-	_activate: function( index ) {
+-		var anchor,
+-			active = this._findActive( index );
+-
+-		// trying to activate the already active panel
+-		if ( active[ 0 ] === this.active[ 0 ] ) {
+-			return;
+-		}
+-
+-		// trying to collapse, simulate a click on the current active header
+-		if ( !active.length ) {
+-			active = this.active;
+-		}
+-
+-		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+-		this._eventHandler({
+-			target: anchor,
+-			currentTarget: anchor,
+-			preventDefault: $.noop
+-		});
+-	},
+-
+-	_findActive: function( index ) {
+-		return index === false ? $() : this.tabs.eq( index );
+-	},
+-
+-	_getIndex: function( index ) {
+-		// meta-function to give users option to provide a href string instead of a numerical index.
+-		if ( typeof index === "string" ) {
+-			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+-		}
+-
+-		return index;
+-	},
+-
+-	_destroy: function() {
+-		if ( this.xhr ) {
+-			this.xhr.abort();
+-		}
+-
+-		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+-
+-		this.tablist
+-			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+-			.removeAttr( "role" );
+-
+-		this.anchors
+-			.removeClass( "ui-tabs-anchor" )
+-			.removeAttr( "role" )
+-			.removeAttr( "tabIndex" )
+-			.removeUniqueId();
+-
+-		this.tabs.add( this.panels ).each(function() {
+-			if ( $.data( this, "ui-tabs-destroy" ) ) {
+-				$( this ).remove();
+-			} else {
+-				$( this )
+-					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+-						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+-					.removeAttr( "tabIndex" )
+-					.removeAttr( "aria-live" )
+-					.removeAttr( "aria-busy" )
+-					.removeAttr( "aria-selected" )
+-					.removeAttr( "aria-labelledby" )
+-					.removeAttr( "aria-hidden" )
+-					.removeAttr( "aria-expanded" )
+-					.removeAttr( "role" );
+-			}
+-		});
+-
+-		this.tabs.each(function() {
+-			var li = $( this ),
+-				prev = li.data( "ui-tabs-aria-controls" );
+-			if ( prev ) {
+-				li
+-					.attr( "aria-controls", prev )
+-					.removeData( "ui-tabs-aria-controls" );
+-			} else {
+-				li.removeAttr( "aria-controls" );
+-			}
+-		});
+-
+-		this.panels.show();
+-
+-		if ( this.options.heightStyle !== "content" ) {
+-			this.panels.css( "height", "" );
+-		}
+-	},
+-
+-	enable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === false ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = false;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.map( disabled, function( num ) {
+-					return num !== index ? num : null;
+-				});
+-			} else {
+-				disabled = $.map( this.tabs, function( li, num ) {
+-					return num !== index ? num : null;
+-				});
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	disable: function( index ) {
+-		var disabled = this.options.disabled;
+-		if ( disabled === true ) {
+-			return;
+-		}
+-
+-		if ( index === undefined ) {
+-			disabled = true;
+-		} else {
+-			index = this._getIndex( index );
+-			if ( $.inArray( index, disabled ) !== -1 ) {
+-				return;
+-			}
+-			if ( $.isArray( disabled ) ) {
+-				disabled = $.merge( [ index ], disabled ).sort();
+-			} else {
+-				disabled = [ index ];
+-			}
+-		}
+-		this._setupDisabled( disabled );
+-	},
+-
+-	load: function( index, event ) {
+-		index = this._getIndex( index );
+-		var that = this,
+-			tab = this.tabs.eq( index ),
+-			anchor = tab.find( ".ui-tabs-anchor" ),
+-			panel = this._getPanelForTab( tab ),
+-			eventData = {
+-				tab: tab,
+-				panel: panel
+-			};
+-
+-		// not remote
+-		if ( isLocal( anchor[ 0 ] ) ) {
+-			return;
+-		}
+-
+-		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+-
+-		// support: jQuery <1.8
+-		// jQuery <1.8 returns false if the request is canceled in beforeSend,
+-		// but as of 1.8, $.ajax() always returns a jqXHR object.
+-		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+-			tab.addClass( "ui-tabs-loading" );
+-			panel.attr( "aria-busy", "true" );
+-
+-			this.xhr
+-				.success(function( response ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						panel.html( response );
+-						that._trigger( "load", event, eventData );
+-					}, 1 );
+-				})
+-				.complete(function( jqXHR, status ) {
+-					// support: jQuery <1.8
+-					// http://bugs.jquery.com/ticket/11778
+-					setTimeout(function() {
+-						if ( status === "abort" ) {
+-							that.panels.stop( false, true );
+-						}
+-
+-						tab.removeClass( "ui-tabs-loading" );
+-						panel.removeAttr( "aria-busy" );
+-
+-						if ( jqXHR === that.xhr ) {
+-							delete that.xhr;
+-						}
+-					}, 1 );
+-				});
+-		}
+-	},
+-
+-	_ajaxSettings: function( anchor, event, eventData ) {
+-		var that = this;
+-		return {
+-			url: anchor.attr( "href" ),
+-			beforeSend: function( jqXHR, settings ) {
+-				return that._trigger( "beforeLoad", event,
+-					$.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+-			}
+-		};
+-	},
+-
+-	_getPanelForTab: function( tab ) {
+-		var id = $( tab ).attr( "aria-controls" );
+-		return this.element.find( this._sanitizeSelector( "#" + id ) );
+-	}
+-});
+-
+-})( jQuery );
+-(function( $ ) {
+-
+-var increments = 0;
+-
+-function addDescribedBy( elem, id ) {
+-	var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+-	describedby.push( id );
+-	elem
+-		.data( "ui-tooltip-id", id )
+-		.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+-}
+-
+-function removeDescribedBy( elem ) {
+-	var id = elem.data( "ui-tooltip-id" ),
+-		describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+-		index = $.inArray( id, describedby );
+-	if ( index !== -1 ) {
+-		describedby.splice( index, 1 );
+-	}
+-
+-	elem.removeData( "ui-tooltip-id" );
+-	describedby = $.trim( describedby.join( " " ) );
+-	if ( describedby ) {
+-		elem.attr( "aria-describedby", describedby );
+-	} else {
+-		elem.removeAttr( "aria-describedby" );
+-	}
+-}
+-
+-$.widget( "ui.tooltip", {
+-	version: "1.10.3",
+-	options: {
+-		content: function() {
+-			// support: IE<9, Opera in jQuery <1.7
+-			// .text() can't accept undefined, so coerce to a string
+-			var title = $( this ).attr( "title" ) || "";
+-			// Escape title, since we're going from an attribute to raw HTML
+-			return $( "<a>" ).text( title ).html();
+-		},
+-		hide: true,
+-		// Disabled elements have inconsistent behavior across browsers (#8661)
+-		items: "[title]:not([disabled])",
+-		position: {
+-			my: "left top+15",
+-			at: "left bottom",
+-			collision: "flipfit flip"
+-		},
+-		show: true,
+-		tooltipClass: null,
+-		track: false,
+-
+-		// callbacks
+-		close: null,
+-		open: null
+-	},
+-
+-	_create: function() {
+-		this._on({
+-			mouseover: "open",
+-			focusin: "open"
+-		});
+-
+-		// IDs of generated tooltips, needed for destroy
+-		this.tooltips = {};
+-		// IDs of parent tooltips where we removed the title attribute
+-		this.parents = {};
+-
+-		if ( this.options.disabled ) {
+-			this._disable();
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		var that = this;
+-
+-		if ( key === "disabled" ) {
+-			this[ value ? "_disable" : "_enable" ]();
+-			this.options[ key ] = value;
+-			// disable element style changes
+-			return;
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "content" ) {
+-			$.each( this.tooltips, function( id, element ) {
+-				that._updateContent( element );
+-			});
+-		}
+-	},
+-
+-	_disable: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-		});
+-
+-		// remove title attributes to prevent native tooltips
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.is( "[title]" ) ) {
+-				element
+-					.data( "ui-tooltip-title", element.attr( "title" ) )
+-					.attr( "title", "" );
+-			}
+-		});
+-	},
+-
+-	_enable: function() {
+-		// restore title attributes
+-		this.element.find( this.options.items ).addBack().each(function() {
+-			var element = $( this );
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-			}
+-		});
+-	},
+-
+-	open: function( event ) {
+-		var that = this,
+-			target = $( event ? event.target : this.element )
+-				// we need closest here due to mouseover bubbling,
+-				// but always pointing at the same event target
+-				.closest( this.options.items );
+-
+-		// No element to show a tooltip for or the tooltip is already open
+-		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+-			return;
+-		}
+-
+-		if ( target.attr( "title" ) ) {
+-			target.data( "ui-tooltip-title", target.attr( "title" ) );
+-		}
+-
+-		target.data( "ui-tooltip-open", true );
+-
+-		// kill parent tooltips, custom or native, for hover
+-		if ( event && event.type === "mouseover" ) {
+-			target.parents().each(function() {
+-				var parent = $( this ),
+-					blurEvent;
+-				if ( parent.data( "ui-tooltip-open" ) ) {
+-					blurEvent = $.Event( "blur" );
+-					blurEvent.target = blurEvent.currentTarget = this;
+-					that.close( blurEvent, true );
+-				}
+-				if ( parent.attr( "title" ) ) {
+-					parent.uniqueId();
+-					that.parents[ this.id ] = {
+-						element: this,
+-						title: parent.attr( "title" )
+-					};
+-					parent.attr( "title", "" );
+-				}
+-			});
+-		}
+-
+-		this._updateContent( target, event );
+-	},
+-
+-	_updateContent: function( target, event ) {
+-		var content,
+-			contentOption = this.options.content,
+-			that = this,
+-			eventType = event ? event.type : null;
+-
+-		if ( typeof contentOption === "string" ) {
+-			return this._open( event, target, contentOption );
+-		}
+-
+-		content = contentOption.call( target[0], function( response ) {
+-			// ignore async response if tooltip was closed already
+-			if ( !target.data( "ui-tooltip-open" ) ) {
+-				return;
+-			}
+-			// IE may instantly serve a cached response for ajax requests
+-			// delay this call to _open so the other call to _open runs first
+-			that._delay(function() {
+-				// jQuery creates a special event for focusin when it doesn't
+-				// exist natively. To improve performance, the native event
+-				// object is reused and the type is changed. Therefore, we can't
+-				// rely on the type being correct after the event finished
+-				// bubbling, so we set it back to the previous value. (#8740)
+-				if ( event ) {
+-					event.type = eventType;
+-				}
+-				this._open( event, target, response );
+-			});
+-		});
+-		if ( content ) {
+-			this._open( event, target, content );
+-		}
+-	},
+-
+-	_open: function( event, target, content ) {
+-		var tooltip, events, delayedShow,
+-			positionOption = $.extend( {}, this.options.position );
+-
+-		if ( !content ) {
+-			return;
+-		}
+-
+-		// Content can be updated multiple times. If the tooltip already
+-		// exists, then just update the content and bail.
+-		tooltip = this._find( target );
+-		if ( tooltip.length ) {
+-			tooltip.find( ".ui-tooltip-content" ).html( content );
+-			return;
+-		}
+-
+-		// if we have a title, clear it to prevent the native tooltip
+-		// we have to check first to avoid defining a title if none exists
+-		// (we don't want to cause an element to start matching [title])
+-		//
+-		// We use removeAttr only for key events, to allow IE to export the correct
+-		// accessible attributes. For mouse events, set to empty string to avoid
+-		// native tooltip showing up (happens only when removing inside mouseover).
+-		if ( target.is( "[title]" ) ) {
+-			if ( event && event.type === "mouseover" ) {
+-				target.attr( "title", "" );
+-			} else {
+-				target.removeAttr( "title" );
+-			}
+-		}
+-
+-		tooltip = this._tooltip( target );
+-		addDescribedBy( target, tooltip.attr( "id" ) );
+-		tooltip.find( ".ui-tooltip-content" ).html( content );
+-
+-		function position( event ) {
+-			positionOption.of = event;
+-			if ( tooltip.is( ":hidden" ) ) {
+-				return;
+-			}
+-			tooltip.position( positionOption );
+-		}
+-		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+-			this._on( this.document, {
+-				mousemove: position
+-			});
+-			// trigger once to override element-relative positioning
+-			position( event );
+-		} else {
+-			tooltip.position( $.extend({
+-				of: target
+-			}, this.options.position ) );
+-		}
+-
+-		tooltip.hide();
+-
+-		this._show( tooltip, this.options.show );
+-		// Handle tracking tooltips that are shown with a delay (#8644). As soon
+-		// as the tooltip is visible, position the tooltip using the most recent
+-		// event.
+-		if ( this.options.show && this.options.show.delay ) {
+-			delayedShow = this.delayedShow = setInterval(function() {
+-				if ( tooltip.is( ":visible" ) ) {
+-					position( positionOption.of );
+-					clearInterval( delayedShow );
+-				}
+-			}, $.fx.interval );
+-		}
+-
+-		this._trigger( "open", event, { tooltip: tooltip } );
+-
+-		events = {
+-			keyup: function( event ) {
+-				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+-					var fakeEvent = $.Event(event);
+-					fakeEvent.currentTarget = target[0];
+-					this.close( fakeEvent, true );
+-				}
+-			},
+-			remove: function() {
+-				this._removeTooltip( tooltip );
+-			}
+-		};
+-		if ( !event || event.type === "mouseover" ) {
+-			events.mouseleave = "close";
+-		}
+-		if ( !event || event.type === "focusin" ) {
+-			events.focusout = "close";
+-		}
+-		this._on( true, target, events );
+-	},
+-
+-	close: function( event ) {
+-		var that = this,
+-			target = $( event ? event.currentTarget : this.element ),
+-			tooltip = this._find( target );
+-
+-		// disabling closes the tooltip, so we need to track when we're closing
+-		// to avoid an infinite loop in case the tooltip becomes disabled on close
+-		if ( this.closing ) {
+-			return;
+-		}
+-
+-		// Clear the interval for delayed tracking tooltips
+-		clearInterval( this.delayedShow );
+-
+-		// only set title if we had one before (see comment in _open())
+-		if ( target.data( "ui-tooltip-title" ) ) {
+-			target.attr( "title", target.data( "ui-tooltip-title" ) );
+-		}
+-
+-		removeDescribedBy( target );
+-
+-		tooltip.stop( true );
+-		this._hide( tooltip, this.options.hide, function() {
+-			that._removeTooltip( $( this ) );
+-		});
+-
+-		target.removeData( "ui-tooltip-open" );
+-		this._off( target, "mouseleave focusout keyup" );
+-		// Remove 'remove' binding only on delegated targets
+-		if ( target[0] !== this.element[0] ) {
+-			this._off( target, "remove" );
+-		}
+-		this._off( this.document, "mousemove" );
+-
+-		if ( event && event.type === "mouseleave" ) {
+-			$.each( this.parents, function( id, parent ) {
+-				$( parent.element ).attr( "title", parent.title );
+-				delete that.parents[ id ];
+-			});
+-		}
+-
+-		this.closing = true;
+-		this._trigger( "close", event, { tooltip: tooltip } );
+-		this.closing = false;
+-	},
+-
+-	_tooltip: function( element ) {
+-		var id = "ui-tooltip-" + increments++,
+-			tooltip = $( "<div>" )
+-				.attr({
+-					id: id,
+-					role: "tooltip"
+-				})
+-				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+-					( this.options.tooltipClass || "" ) );
+-		$( "<div>" )
+-			.addClass( "ui-tooltip-content" )
+-			.appendTo( tooltip );
+-		tooltip.appendTo( this.document[0].body );
+-		this.tooltips[ id ] = element;
+-		return tooltip;
+-	},
+-
+-	_find: function( target ) {
+-		var id = target.data( "ui-tooltip-id" );
+-		return id ? $( "#" + id ) : $();
+-	},
+-
+-	_removeTooltip: function( tooltip ) {
+-		tooltip.remove();
+-		delete this.tooltips[ tooltip.attr( "id" ) ];
+-	},
+-
+-	_destroy: function() {
+-		var that = this;
+-
+-		// close open tooltips
+-		$.each( this.tooltips, function( id, element ) {
+-			// Delegate to close method to handle common cleanup
+-			var event = $.Event( "blur" );
+-			event.target = event.currentTarget = element[0];
+-			that.close( event, true );
+-
+-			// Remove immediately; destroying an open tooltip doesn't use the
+-			// hide animation
+-			$( "#" + id ).remove();
+-
+-			// Restore the title
+-			if ( element.data( "ui-tooltip-title" ) ) {
+-				element.attr( "title", element.data( "ui-tooltip-title" ) );
+-				element.removeData( "ui-tooltip-title" );
+-			}
+-		});
+-	}
+-});
+-
+-}( jQuery ) );
+-(function($, undefined) {
+-
+-var dataSpace = "ui-effects-";
+-
+-$.effects = {
+-	effect: {}
+-};
+-
+-/*!
+- * jQuery Color Animations v2.1.2
+- * https://github.com/jquery/jquery-color
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * Date: Wed Jan 16 08:47:09 2013 -0600
+- */
+-(function( jQuery, undefined ) {
+-
+-	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+-
+-	// plusequals test for += 100 -= 100
+-	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+-	// a set of RE's that can match strings and generate color tuples.
+-	stringParsers = [{
+-			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ],
+-					execResult[ 3 ],
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ] * 2.55,
+-					execResult[ 2 ] * 2.55,
+-					execResult[ 3 ] * 2.55,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			// this regex ignores A-F because it's compared against an already lowercased string
+-			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+-			parse: function( execResult ) {
+-				return [
+-					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+-					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+-					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+-				];
+-			}
+-		}, {
+-			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+-			space: "hsla",
+-			parse: function( execResult ) {
+-				return [
+-					execResult[ 1 ],
+-					execResult[ 2 ] / 100,
+-					execResult[ 3 ] / 100,
+-					execResult[ 4 ]
+-				];
+-			}
+-		}],
+-
+-	// jQuery.Color( )
+-	color = jQuery.Color = function( color, green, blue, alpha ) {
+-		return new jQuery.Color.fn.parse( color, green, blue, alpha );
+-	},
+-	spaces = {
+-		rgba: {
+-			props: {
+-				red: {
+-					idx: 0,
+-					type: "byte"
+-				},
+-				green: {
+-					idx: 1,
+-					type: "byte"
+-				},
+-				blue: {
+-					idx: 2,
+-					type: "byte"
+-				}
+-			}
+-		},
+-
+-		hsla: {
+-			props: {
+-				hue: {
+-					idx: 0,
+-					type: "degrees"
+-				},
+-				saturation: {
+-					idx: 1,
+-					type: "percent"
+-				},
+-				lightness: {
+-					idx: 2,
+-					type: "percent"
+-				}
+-			}
+-		}
+-	},
+-	propTypes = {
+-		"byte": {
+-			floor: true,
+-			max: 255
+-		},
+-		"percent": {
+-			max: 1
+-		},
+-		"degrees": {
+-			mod: 360,
+-			floor: true
+-		}
+-	},
+-	support = color.support = {},
+-
+-	// element for support tests
+-	supportElem = jQuery( "<p>" )[ 0 ],
+-
+-	// colors = jQuery.Color.names
+-	colors,
+-
+-	// local aliases of functions called often
+-	each = jQuery.each;
+-
+-// determine rgba support immediately
+-supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+-support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+-
+-// define cache name and alpha properties
+-// for rgba and hsla spaces
+-each( spaces, function( spaceName, space ) {
+-	space.cache = "_" + spaceName;
+-	space.props.alpha = {
+-		idx: 3,
+-		type: "percent",
+-		def: 1
+-	};
+-});
+-
+-function clamp( value, prop, allowEmpty ) {
+-	var type = propTypes[ prop.type ] || {};
+-
+-	if ( value == null ) {
+-		return (allowEmpty || !prop.def) ? null : prop.def;
+-	}
+-
+-	// ~~ is an short way of doing floor for positive numbers
+-	value = type.floor ? ~~value : parseFloat( value );
+-
+-	// IE will pass in empty strings as value for alpha,
+-	// which will hit this case
+-	if ( isNaN( value ) ) {
+-		return prop.def;
+-	}
+-
+-	if ( type.mod ) {
+-		// we add mod before modding to make sure that negatives values
+-		// get converted properly: -10 -> 350
+-		return (value + type.mod) % type.mod;
+-	}
+-
+-	// for now all property types without mod have min and max
+-	return 0 > value ? 0 : type.max < value ? type.max : value;
+-}
+-
+-function stringParse( string ) {
+-	var inst = color(),
+-		rgba = inst._rgba = [];
+-
+-	string = string.toLowerCase();
+-
+-	each( stringParsers, function( i, parser ) {
+-		var parsed,
+-			match = parser.re.exec( string ),
+-			values = match && parser.parse( match ),
+-			spaceName = parser.space || "rgba";
+-
+-		if ( values ) {
+-			parsed = inst[ spaceName ]( values );
+-
+-			// if this was an rgba parse the assignment might happen twice
+-			// oh well....
+-			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+-			rgba = inst._rgba = parsed._rgba;
+-
+-			// exit each( stringParsers ) here because we matched
+-			return false;
+-		}
+-	});
+-
+-	// Found a stringParser that handled it
+-	if ( rgba.length ) {
+-
+-		// if this came from a parsed string, force "transparent" when alpha is 0
+-		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+-		if ( rgba.join() === "0,0,0,0" ) {
+-			jQuery.extend( rgba, colors.transparent );
+-		}
+-		return inst;
+-	}
+-
+-	// named colors
+-	return colors[ string ];
+-}
+-
+-color.fn = jQuery.extend( color.prototype, {
+-	parse: function( red, green, blue, alpha ) {
+-		if ( red === undefined ) {
+-			this._rgba = [ null, null, null, null ];
+-			return this;
+-		}
+-		if ( red.jquery || red.nodeType ) {
+-			red = jQuery( red ).css( green );
+-			green = undefined;
+-		}
+-
+-		var inst = this,
+-			type = jQuery.type( red ),
+-			rgba = this._rgba = [];
+-
+-		// more than 1 argument specified - assume ( red, green, blue, alpha )
+-		if ( green !== undefined ) {
+-			red = [ red, green, blue, alpha ];
+-			type = "array";
+-		}
+-
+-		if ( type === "string" ) {
+-			return this.parse( stringParse( red ) || colors._default );
+-		}
+-
+-		if ( type === "array" ) {
+-			each( spaces.rgba.props, function( key, prop ) {
+-				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+-			});
+-			return this;
+-		}
+-
+-		if ( type === "object" ) {
+-			if ( red instanceof color ) {
+-				each( spaces, function( spaceName, space ) {
+-					if ( red[ space.cache ] ) {
+-						inst[ space.cache ] = red[ space.cache ].slice();
+-					}
+-				});
+-			} else {
+-				each( spaces, function( spaceName, space ) {
+-					var cache = space.cache;
+-					each( space.props, function( key, prop ) {
+-
+-						// if the cache doesn't exist, and we know how to convert
+-						if ( !inst[ cache ] && space.to ) {
+-
+-							// if the value was null, we don't need to copy it
+-							// if the key was alpha, we don't need to copy it either
+-							if ( key === "alpha" || red[ key ] == null ) {
+-								return;
+-							}
+-							inst[ cache ] = space.to( inst._rgba );
+-						}
+-
+-						// this is the only case where we allow nulls for ALL properties.
+-						// call clamp with alwaysAllowEmpty
+-						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+-					});
+-
+-					// everything defined but alpha?
+-					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+-						// use the default of 1
+-						inst[ cache ][ 3 ] = 1;
+-						if ( space.from ) {
+-							inst._rgba = space.from( inst[ cache ] );
+-						}
+-					}
+-				});
+-			}
+-			return this;
+-		}
+-	},
+-	is: function( compare ) {
+-		var is = color( compare ),
+-			same = true,
+-			inst = this;
+-
+-		each( spaces, function( _, space ) {
+-			var localCache,
+-				isCache = is[ space.cache ];
+-			if (isCache) {
+-				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+-				each( space.props, function( _, prop ) {
+-					if ( isCache[ prop.idx ] != null ) {
+-						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+-						return same;
+-					}
+-				});
+-			}
+-			return same;
+-		});
+-		return same;
+-	},
+-	_space: function() {
+-		var used = [],
+-			inst = this;
+-		each( spaces, function( spaceName, space ) {
+-			if ( inst[ space.cache ] ) {
+-				used.push( spaceName );
+-			}
+-		});
+-		return used.pop();
+-	},
+-	transition: function( other, distance ) {
+-		var end = color( other ),
+-			spaceName = end._space(),
+-			space = spaces[ spaceName ],
+-			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+-			start = startColor[ space.cache ] || space.to( startColor._rgba ),
+-			result = start.slice();
+-
+-		end = end[ space.cache ];
+-		each( space.props, function( key, prop ) {
+-			var index = prop.idx,
+-				startValue = start[ index ],
+-				endValue = end[ index ],
+-				type = propTypes[ prop.type ] || {};
+-
+-			// if null, don't override start value
+-			if ( endValue === null ) {
+-				return;
+-			}
+-			// if null - use end
+-			if ( startValue === null ) {
+-				result[ index ] = endValue;
+-			} else {
+-				if ( type.mod ) {
+-					if ( endValue - startValue > type.mod / 2 ) {
+-						startValue += type.mod;
+-					} else if ( startValue - endValue > type.mod / 2 ) {
+-						startValue -= type.mod;
+-					}
+-				}
+-				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+-			}
+-		});
+-		return this[ spaceName ]( result );
+-	},
+-	blend: function( opaque ) {
+-		// if we are already opaque - return ourself
+-		if ( this._rgba[ 3 ] === 1 ) {
+-			return this;
+-		}
+-
+-		var rgb = this._rgba.slice(),
+-			a = rgb.pop(),
+-			blend = color( opaque )._rgba;
+-
+-		return color( jQuery.map( rgb, function( v, i ) {
+-			return ( 1 - a ) * blend[ i ] + a * v;
+-		}));
+-	},
+-	toRgbaString: function() {
+-		var prefix = "rgba(",
+-			rgba = jQuery.map( this._rgba, function( v, i ) {
+-				return v == null ? ( i > 2 ? 1 : 0 ) : v;
+-			});
+-
+-		if ( rgba[ 3 ] === 1 ) {
+-			rgba.pop();
+-			prefix = "rgb(";
+-		}
+-
+-		return prefix + rgba.join() + ")";
+-	},
+-	toHslaString: function() {
+-		var prefix = "hsla(",
+-			hsla = jQuery.map( this.hsla(), function( v, i ) {
+-				if ( v == null ) {
+-					v = i > 2 ? 1 : 0;
+-				}
+-
+-				// catch 1 and 2
+-				if ( i && i < 3 ) {
+-					v = Math.round( v * 100 ) + "%";
+-				}
+-				return v;
+-			});
+-
+-		if ( hsla[ 3 ] === 1 ) {
+-			hsla.pop();
+-			prefix = "hsl(";
+-		}
+-		return prefix + hsla.join() + ")";
+-	},
+-	toHexString: function( includeAlpha ) {
+-		var rgba = this._rgba.slice(),
+-			alpha = rgba.pop();
+-
+-		if ( includeAlpha ) {
+-			rgba.push( ~~( alpha * 255 ) );
+-		}
+-
+-		return "#" + jQuery.map( rgba, function( v ) {
+-
+-			// default to 0 when nulls exist
+-			v = ( v || 0 ).toString( 16 );
+-			return v.length === 1 ? "0" + v : v;
+-		}).join("");
+-	},
+-	toString: function() {
+-		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+-	}
+-});
+-color.fn.parse.prototype = color.fn;
+-
+-// hsla conversions adapted from:
+-// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+-
+-function hue2rgb( p, q, h ) {
+-	h = ( h + 1 ) % 1;
+-	if ( h * 6 < 1 ) {
+-		return p + (q - p) * h * 6;
+-	}
+-	if ( h * 2 < 1) {
+-		return q;
+-	}
+-	if ( h * 3 < 2 ) {
+-		return p + (q - p) * ((2/3) - h) * 6;
+-	}
+-	return p;
+-}
+-
+-spaces.hsla.to = function ( rgba ) {
+-	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+-		return [ null, null, null, rgba[ 3 ] ];
+-	}
+-	var r = rgba[ 0 ] / 255,
+-		g = rgba[ 1 ] / 255,
+-		b = rgba[ 2 ] / 255,
+-		a = rgba[ 3 ],
+-		max = Math.max( r, g, b ),
+-		min = Math.min( r, g, b ),
+-		diff = max - min,
+-		add = max + min,
+-		l = add * 0.5,
+-		h, s;
+-
+-	if ( min === max ) {
+-		h = 0;
+-	} else if ( r === max ) {
+-		h = ( 60 * ( g - b ) / diff ) + 360;
+-	} else if ( g === max ) {
+-		h = ( 60 * ( b - r ) / diff ) + 120;
+-	} else {
+-		h = ( 60 * ( r - g ) / diff ) + 240;
+-	}
+-
+-	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+-	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+-	if ( diff === 0 ) {
+-		s = 0;
+-	} else if ( l <= 0.5 ) {
+-		s = diff / add;
+-	} else {
+-		s = diff / ( 2 - add );
+-	}
+-	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+-};
+-
+-spaces.hsla.from = function ( hsla ) {
+-	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+-		return [ null, null, null, hsla[ 3 ] ];
+-	}
+-	var h = hsla[ 0 ] / 360,
+-		s = hsla[ 1 ],
+-		l = hsla[ 2 ],
+-		a = hsla[ 3 ],
+-		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+-		p = 2 * l - q;
+-
+-	return [
+-		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+-		Math.round( hue2rgb( p, q, h ) * 255 ),
+-		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+-		a
+-	];
+-};
+-
+-
+-each( spaces, function( spaceName, space ) {
+-	var props = space.props,
+-		cache = space.cache,
+-		to = space.to,
+-		from = space.from;
+-
+-	// makes rgba() and hsla()
+-	color.fn[ spaceName ] = function( value ) {
+-
+-		// generate a cache for this space if it doesn't exist
+-		if ( to && !this[ cache ] ) {
+-			this[ cache ] = to( this._rgba );
+-		}
+-		if ( value === undefined ) {
+-			return this[ cache ].slice();
+-		}
+-
+-		var ret,
+-			type = jQuery.type( value ),
+-			arr = ( type === "array" || type === "object" ) ? value : arguments,
+-			local = this[ cache ].slice();
+-
+-		each( props, function( key, prop ) {
+-			var val = arr[ type === "object" ? key : prop.idx ];
+-			if ( val == null ) {
+-				val = local[ prop.idx ];
+-			}
+-			local[ prop.idx ] = clamp( val, prop );
+-		});
+-
+-		if ( from ) {
+-			ret = color( from( local ) );
+-			ret[ cache ] = local;
+-			return ret;
+-		} else {
+-			return color( local );
+-		}
+-	};
+-
+-	// makes red() green() blue() alpha() hue() saturation() lightness()
+-	each( props, function( key, prop ) {
+-		// alpha is included in more than one space
+-		if ( color.fn[ key ] ) {
+-			return;
+-		}
+-		color.fn[ key ] = function( value ) {
+-			var vtype = jQuery.type( value ),
+-				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+-				local = this[ fn ](),
+-				cur = local[ prop.idx ],
+-				match;
+-
+-			if ( vtype === "undefined" ) {
+-				return cur;
+-			}
+-
+-			if ( vtype === "function" ) {
+-				value = value.call( this, cur );
+-				vtype = jQuery.type( value );
+-			}
+-			if ( value == null && prop.empty ) {
+-				return this;
+-			}
+-			if ( vtype === "string" ) {
+-				match = rplusequals.exec( value );
+-				if ( match ) {
+-					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+-				}
+-			}
+-			local[ prop.idx ] = value;
+-			return this[ fn ]( local );
+-		};
+-	});
+-});
+-
+-// add cssHook and .fx.step function for each named hook.
+-// accept a space separated string of properties
+-color.hook = function( hook ) {
+-	var hooks = hook.split( " " );
+-	each( hooks, function( i, hook ) {
+-		jQuery.cssHooks[ hook ] = {
+-			set: function( elem, value ) {
+-				var parsed, curElem,
+-					backgroundColor = "";
+-
+-				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+-					value = color( parsed || value );
+-					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+-						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+-						while (
+-							(backgroundColor === "" || backgroundColor === "transparent") &&
+-							curElem && curElem.style
+-						) {
+-							try {
+-								backgroundColor = jQuery.css( curElem, "backgroundColor" );
+-								curElem = curElem.parentNode;
+-							} catch ( e ) {
+-							}
+-						}
+-
+-						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+-							backgroundColor :
+-							"_default" );
+-					}
+-
+-					value = value.toRgbaString();
+-				}
+-				try {
+-					elem.style[ hook ] = value;
+-				} catch( e ) {
+-					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+-				}
+-			}
+-		};
+-		jQuery.fx.step[ hook ] = function( fx ) {
+-			if ( !fx.colorInit ) {
+-				fx.start = color( fx.elem, hook );
+-				fx.end = color( fx.end );
+-				fx.colorInit = true;
+-			}
+-			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+-		};
+-	});
+-
+-};
+-
+-color.hook( stepHooks );
+-
+-jQuery.cssHooks.borderColor = {
+-	expand: function( value ) {
+-		var expanded = {};
+-
+-		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+-			expanded[ "border" + part + "Color" ] = value;
+-		});
+-		return expanded;
+-	}
+-};
+-
+-// Basic color names only.
+-// Usage of any of the other color names requires adding yourself or including
+-// jquery.color.svg-names.js.
+-colors = jQuery.Color.names = {
+-	// 4.1. Basic color keywords
+-	aqua: "#00ffff",
+-	black: "#000000",
+-	blue: "#0000ff",
+-	fuchsia: "#ff00ff",
+-	gray: "#808080",
+-	green: "#008000",
+-	lime: "#00ff00",
+-	maroon: "#800000",
+-	navy: "#000080",
+-	olive: "#808000",
+-	purple: "#800080",
+-	red: "#ff0000",
+-	silver: "#c0c0c0",
+-	teal: "#008080",
+-	white: "#ffffff",
+-	yellow: "#ffff00",
+-
+-	// 4.2.3. "transparent" color keyword
+-	transparent: [ null, null, null, 0 ],
+-
+-	_default: "#ffffff"
+-};
+-
+-})( jQuery );
+-
+-
+-/******************************************************************************/
+-/****************************** CLASS ANIMATIONS ******************************/
+-/******************************************************************************/
+-(function() {
+-
+-var classAnimationActions = [ "add", "remove", "toggle" ],
+-	shorthandStyles = {
+-		border: 1,
+-		borderBottom: 1,
+-		borderColor: 1,
+-		borderLeft: 1,
+-		borderRight: 1,
+-		borderTop: 1,
+-		borderWidth: 1,
+-		margin: 1,
+-		padding: 1
+-	};
+-
+-$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+-	$.fx.step[ prop ] = function( fx ) {
+-		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+-			jQuery.style( fx.elem, prop, fx.end );
+-			fx.setAttr = true;
+-		}
+-	};
+-});
+-
+-function getElementStyles( elem ) {
+-	var key, len,
+-		style = elem.ownerDocument.defaultView ?
+-			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+-			elem.currentStyle,
+-		styles = {};
+-
+-	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+-		len = style.length;
+-		while ( len-- ) {
+-			key = style[ len ];
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ $.camelCase( key ) ] = style[ key ];
+-			}
+-		}
+-	// support: Opera, IE <9
+-	} else {
+-		for ( key in style ) {
+-			if ( typeof style[ key ] === "string" ) {
+-				styles[ key ] = style[ key ];
+-			}
+-		}
+-	}
+-
+-	return styles;
+-}
+-
+-
+-function styleDifference( oldStyle, newStyle ) {
+-	var diff = {},
+-		name, value;
+-
+-	for ( name in newStyle ) {
+-		value = newStyle[ name ];
+-		if ( oldStyle[ name ] !== value ) {
+-			if ( !shorthandStyles[ name ] ) {
+-				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+-					diff[ name ] = value;
+-				}
+-			}
+-		}
+-	}
+-
+-	return diff;
+-}
+-
+-// support: jQuery <1.8
+-if ( !$.fn.addBack ) {
+-	$.fn.addBack = function( selector ) {
+-		return this.add( selector == null ?
+-			this.prevObject : this.prevObject.filter( selector )
+-		);
+-	};
+-}
+-
+-$.effects.animateClass = function( value, duration, easing, callback ) {
+-	var o = $.speed( duration, easing, callback );
+-
+-	return this.queue( function() {
+-		var animated = $( this ),
+-			baseClass = animated.attr( "class" ) || "",
+-			applyClassChange,
+-			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+-
+-		// map the animated objects to store the original styles.
+-		allAnimations = allAnimations.map(function() {
+-			var el = $( this );
+-			return {
+-				el: el,
+-				start: getElementStyles( this )
+-			};
+-		});
+-
+-		// apply class change
+-		applyClassChange = function() {
+-			$.each( classAnimationActions, function(i, action) {
+-				if ( value[ action ] ) {
+-					animated[ action + "Class" ]( value[ action ] );
+-				}
+-			});
+-		};
+-		applyClassChange();
+-
+-		// map all animated objects again - calculate new styles and diff
+-		allAnimations = allAnimations.map(function() {
+-			this.end = getElementStyles( this.el[ 0 ] );
+-			this.diff = styleDifference( this.start, this.end );
+-			return this;
+-		});
+-
+-		// apply original class
+-		animated.attr( "class", baseClass );
+-
+-		// map all animated objects again - this time collecting a promise
+-		allAnimations = allAnimations.map(function() {
+-			var styleInfo = this,
+-				dfd = $.Deferred(),
+-				opts = $.extend({}, o, {
+-					queue: false,
+-					complete: function() {
+-						dfd.resolve( styleInfo );
+-					}
+-				});
+-
+-			this.el.animate( this.diff, opts );
+-			return dfd.promise();
+-		});
+-
+-		// once all animations have completed:
+-		$.when.apply( $, allAnimations.get() ).done(function() {
+-
+-			// set the final class
+-			applyClassChange();
+-
+-			// for each animated element,
+-			// clear all css properties that were animated
+-			$.each( arguments, function() {
+-				var el = this.el;
+-				$.each( this.diff, function(key) {
+-					el.css( key, "" );
+-				});
+-			});
+-
+-			// this is guarnteed to be there if you use jQuery.speed()
+-			// it also handles dequeuing the next anim...
+-			o.complete.call( animated[ 0 ] );
+-		});
+-	});
+-};
+-
+-$.fn.extend({
+-	addClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return speed ?
+-				$.effects.animateClass.call( this,
+-					{ add: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.addClass ),
+-
+-	removeClass: (function( orig ) {
+-		return function( classNames, speed, easing, callback ) {
+-			return arguments.length > 1 ?
+-				$.effects.animateClass.call( this,
+-					{ remove: classNames }, speed, easing, callback ) :
+-				orig.apply( this, arguments );
+-		};
+-	})( $.fn.removeClass ),
+-
+-	toggleClass: (function( orig ) {
+-		return function( classNames, force, speed, easing, callback ) {
+-			if ( typeof force === "boolean" || force === undefined ) {
+-				if ( !speed ) {
+-					// without speed parameter
+-					return orig.apply( this, arguments );
+-				} else {
+-					return $.effects.animateClass.call( this,
+-						(force ? { add: classNames } : { remove: classNames }),
+-						speed, easing, callback );
+-				}
+-			} else {
+-				// without force parameter
+-				return $.effects.animateClass.call( this,
+-					{ toggle: classNames }, force, speed, easing );
+-			}
+-		};
+-	})( $.fn.toggleClass ),
+-
+-	switchClass: function( remove, add, speed, easing, callback) {
+-		return $.effects.animateClass.call( this, {
+-			add: add,
+-			remove: remove
+-		}, speed, easing, callback );
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EFFECTS **********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-$.extend( $.effects, {
+-	version: "1.10.3",
+-
+-	// Saves a set of properties in a data storage
+-	save: function( element, set ) {
+-		for( var i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+-			}
+-		}
+-	},
+-
+-	// Restores a set of previously saved properties from a data storage
+-	restore: function( element, set ) {
+-		var val, i;
+-		for( i=0; i < set.length; i++ ) {
+-			if ( set[ i ] !== null ) {
+-				val = element.data( dataSpace + set[ i ] );
+-				// support: jQuery 1.6.2
+-				// http://bugs.jquery.com/ticket/9917
+-				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+-				// We can't differentiate between "" and 0 here, so we just assume
+-				// empty string since it's likely to be a more common value...
+-				if ( val === undefined ) {
+-					val = "";
+-				}
+-				element.css( set[ i ], val );
+-			}
+-		}
+-	},
+-
+-	setMode: function( el, mode ) {
+-		if (mode === "toggle") {
+-			mode = el.is( ":hidden" ) ? "show" : "hide";
+-		}
+-		return mode;
+-	},
+-
+-	// Translates a [top,left] array into a baseline value
+-	// this should be a little more flexible in the future to handle a string & hash
+-	getBaseline: function( origin, original ) {
+-		var y, x;
+-		switch ( origin[ 0 ] ) {
+-			case "top": y = 0; break;
+-			case "middle": y = 0.5; break;
+-			case "bottom": y = 1; break;
+-			default: y = origin[ 0 ] / original.height;
+-		}
+-		switch ( origin[ 1 ] ) {
+-			case "left": x = 0; break;
+-			case "center": x = 0.5; break;
+-			case "right": x = 1; break;
+-			default: x = origin[ 1 ] / original.width;
+-		}
+-		return {
+-			x: x,
+-			y: y
+-		};
+-	},
+-
+-	// Wraps the element around a wrapper that copies position properties
+-	createWrapper: function( element ) {
+-
+-		// if the element is already wrapped, return it
+-		if ( element.parent().is( ".ui-effects-wrapper" )) {
+-			return element.parent();
+-		}
+-
+-		// wrap the element
+-		var props = {
+-				width: element.outerWidth(true),
+-				height: element.outerHeight(true),
+-				"float": element.css( "float" )
+-			},
+-			wrapper = $( "<div></div>" )
+-				.addClass( "ui-effects-wrapper" )
+-				.css({
+-					fontSize: "100%",
+-					background: "transparent",
+-					border: "none",
+-					margin: 0,
+-					padding: 0
+-				}),
+-			// Store the size in case width/height are defined in % - Fixes #5245
+-			size = {
+-				width: element.width(),
+-				height: element.height()
+-			},
+-			active = document.activeElement;
+-
+-		// support: Firefox
+-		// Firefox incorrectly exposes anonymous content
+-		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+-		try {
+-			active.id;
+-		} catch( e ) {
+-			active = document.body;
+-		}
+-
+-		element.wrap( wrapper );
+-
+-		// Fixes #7595 - Elements lose focus when wrapped.
+-		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-			$( active ).focus();
+-		}
+-
+-		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+-
+-		// transfer positioning properties to the wrapper
+-		if ( element.css( "position" ) === "static" ) {
+-			wrapper.css({ position: "relative" });
+-			element.css({ position: "relative" });
+-		} else {
+-			$.extend( props, {
+-				position: element.css( "position" ),
+-				zIndex: element.css( "z-index" )
+-			});
+-			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+-				props[ pos ] = element.css( pos );
+-				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+-					props[ pos ] = "auto";
+-				}
+-			});
+-			element.css({
+-				position: "relative",
+-				top: 0,
+-				left: 0,
+-				right: "auto",
+-				bottom: "auto"
+-			});
+-		}
+-		element.css(size);
+-
+-		return wrapper.css( props ).show();
+-	},
+-
+-	removeWrapper: function( element ) {
+-		var active = document.activeElement;
+-
+-		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+-			element.parent().replaceWith( element );
+-
+-			// Fixes #7595 - Elements lose focus when wrapped.
+-			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+-				$( active ).focus();
+-			}
+-		}
+-
+-
+-		return element;
+-	},
+-
+-	setTransition: function( element, list, factor, value ) {
+-		value = value || {};
+-		$.each( list, function( i, x ) {
+-			var unit = element.cssUnit( x );
+-			if ( unit[ 0 ] > 0 ) {
+-				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+-			}
+-		});
+-		return value;
+-	}
+-});
+-
+-// return an effect options object for the given parameters:
+-function _normalizeArguments( effect, options, speed, callback ) {
+-
+-	// allow passing all options as the first parameter
+-	if ( $.isPlainObject( effect ) ) {
+-		options = effect;
+-		effect = effect.effect;
+-	}
+-
+-	// convert to an object
+-	effect = { effect: effect };
+-
+-	// catch (effect, null, ...)
+-	if ( options == null ) {
+-		options = {};
+-	}
+-
+-	// catch (effect, callback)
+-	if ( $.isFunction( options ) ) {
+-		callback = options;
+-		speed = null;
+-		options = {};
+-	}
+-
+-	// catch (effect, speed, ?)
+-	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+-		callback = speed;
+-		speed = options;
+-		options = {};
+-	}
+-
+-	// catch (effect, options, callback)
+-	if ( $.isFunction( speed ) ) {
+-		callback = speed;
+-		speed = null;
+-	}
+-
+-	// add options to effect
+-	if ( options ) {
+-		$.extend( effect, options );
+-	}
+-
+-	speed = speed || options.duration;
+-	effect.duration = $.fx.off ? 0 :
+-		typeof speed === "number" ? speed :
+-		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+-		$.fx.speeds._default;
+-
+-	effect.complete = callback || options.complete;
+-
+-	return effect;
+-}
+-
+-function standardAnimationOption( option ) {
+-	// Valid standard speeds (nothing, number, named speed)
+-	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+-		return true;
+-	}
+-
+-	// Invalid strings - treat as "normal" speed
+-	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+-		return true;
+-	}
+-
+-	// Complete callback
+-	if ( $.isFunction( option ) ) {
+-		return true;
+-	}
+-
+-	// Options hash (but not naming an effect)
+-	if ( typeof option === "object" && !option.effect ) {
+-		return true;
+-	}
+-
+-	// Didn't match any standard API
+-	return false;
+-}
+-
+-$.fn.extend({
+-	effect: function( /* effect, options, speed, callback */ ) {
+-		var args = _normalizeArguments.apply( this, arguments ),
+-			mode = args.mode,
+-			queue = args.queue,
+-			effectMethod = $.effects.effect[ args.effect ];
+-
+-		if ( $.fx.off || !effectMethod ) {
+-			// delegate to the original method (e.g., .show()) if possible
+-			if ( mode ) {
+-				return this[ mode ]( args.duration, args.complete );
+-			} else {
+-				return this.each( function() {
+-					if ( args.complete ) {
+-						args.complete.call( this );
+-					}
+-				});
+-			}
+-		}
+-
+-		function run( next ) {
+-			var elem = $( this ),
+-				complete = args.complete,
+-				mode = args.mode;
+-
+-			function done() {
+-				if ( $.isFunction( complete ) ) {
+-					complete.call( elem[0] );
+-				}
+-				if ( $.isFunction( next ) ) {
+-					next();
+-				}
+-			}
+-
+-			// If the element already has the correct final state, delegate to
+-			// the core methods so the internal tracking of "olddisplay" works.
+-			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+-				elem[ mode ]();
+-				done();
+-			} else {
+-				effectMethod.call( elem[0], args, done );
+-			}
+-		}
+-
+-		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+-	},
+-
+-	show: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "show";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.show ),
+-
+-	hide: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "hide";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.hide ),
+-
+-	toggle: (function( orig ) {
+-		return function( option ) {
+-			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+-				return orig.apply( this, arguments );
+-			} else {
+-				var args = _normalizeArguments.apply( this, arguments );
+-				args.mode = "toggle";
+-				return this.effect.call( this, args );
+-			}
+-		};
+-	})( $.fn.toggle ),
+-
+-	// helper functions
+-	cssUnit: function(key) {
+-		var style = this.css( key ),
+-			val = [];
+-
+-		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+-			if ( style.indexOf( unit ) > 0 ) {
+-				val = [ parseFloat( style ), unit ];
+-			}
+-		});
+-		return val;
+-	}
+-});
+-
+-})();
+-
+-/******************************************************************************/
+-/*********************************** EASING ***********************************/
+-/******************************************************************************/
+-
+-(function() {
+-
+-// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+-
+-var baseEasings = {};
+-
+-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+-	baseEasings[ name ] = function( p ) {
+-		return Math.pow( p, i + 2 );
+-	};
+-});
+-
+-$.extend( baseEasings, {
+-	Sine: function ( p ) {
+-		return 1 - Math.cos( p * Math.PI / 2 );
+-	},
+-	Circ: function ( p ) {
+-		return 1 - Math.sqrt( 1 - p * p );
+-	},
+-	Elastic: function( p ) {
+-		return p === 0 || p === 1 ? p :
+-			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+-	},
+-	Back: function( p ) {
+-		return p * p * ( 3 * p - 2 );
+-	},
+-	Bounce: function ( p ) {
+-		var pow2,
+-			bounce = 4;
+-
+-		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+-		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+-	}
+-});
+-
+-$.each( baseEasings, function( name, easeIn ) {
+-	$.easing[ "easeIn" + name ] = easeIn;
+-	$.easing[ "easeOut" + name ] = function( p ) {
+-		return 1 - easeIn( 1 - p );
+-	};
+-	$.easing[ "easeInOut" + name ] = function( p ) {
+-		return p < 0.5 ?
+-			easeIn( p * 2 ) / 2 :
+-			1 - easeIn( p * -2 + 2 ) / 2;
+-	};
+-});
+-
+-})();
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-var rvertical = /up|down|vertical/,
+-	rpositivemotion = /up|left|vertical|horizontal/;
+-
+-$.effects.effect.blind = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		direction = o.direction || "up",
+-		vertical = rvertical.test( direction ),
+-		ref = vertical ? "height" : "width",
+-		ref2 = vertical ? "top" : "left",
+-		motion = rpositivemotion.test( direction ),
+-		animation = {},
+-		show = mode === "show",
+-		wrapper, distance, margin;
+-
+-	// if already wrapped, the wrapper's properties are my property. #6245
+-	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+-		$.effects.save( el.parent(), props );
+-	} else {
+-		$.effects.save( el, props );
+-	}
+-	el.show();
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	distance = wrapper[ ref ]();
+-	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+-
+-	animation[ ref ] = show ? distance : 0;
+-	if ( !motion ) {
+-		el
+-			.css( vertical ? "bottom" : "right", 0 )
+-			.css( vertical ? "top" : "left", "auto" )
+-			.css({ position: "absolute" });
+-
+-		animation[ ref2 ] = show ? margin : distance + margin;
+-	}
+-
+-	// start at 0 if we are showing
+-	if ( show ) {
+-		wrapper.css( ref, 0 );
+-		if ( ! motion ) {
+-			wrapper.css( ref2, margin + distance );
+-		}
+-	}
+-
+-	// Animate
+-	wrapper.animate( animation, {
+-		duration: o.duration,
+-		easing: o.easing,
+-		queue: false,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.bounce = function( o, done ) {
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-
+-		// defaults:
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		hide = mode === "hide",
+-		show = mode === "show",
+-		direction = o.direction || "up",
+-		distance = o.distance,
+-		times = o.times || 5,
+-
+-		// number of internal animations
+-		anims = times * 2 + ( show || hide ? 1 : 0 ),
+-		speed = o.duration / anims,
+-		easing = o.easing,
+-
+-		// utility:
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ),
+-		i,
+-		upAnim,
+-		downAnim,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	// Avoid touching opacity to prevent clearType and PNG issues in IE
+-	if ( show || hide ) {
+-		props.push( "opacity" );
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el ); // Create Wrapper
+-
+-	// default distance for the BIGGEST bounce is the outer Distance / 3
+-	if ( !distance ) {
+-		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+-	}
+-
+-	if ( show ) {
+-		downAnim = { opacity: 1 };
+-		downAnim[ ref ] = 0;
+-
+-		// if we are showing, force opacity 0 and set the initial position
+-		// then do the "first" animation
+-		el.css( "opacity", 0 )
+-			.css( ref, motion ? -distance * 2 : distance * 2 )
+-			.animate( downAnim, speed, easing );
+-	}
+-
+-	// start at the smallest distance if we are hiding
+-	if ( hide ) {
+-		distance = distance / Math.pow( 2, times - 1 );
+-	}
+-
+-	downAnim = {};
+-	downAnim[ ref ] = 0;
+-	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+-	for ( i = 0; i < times; i++ ) {
+-		upAnim = {};
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing )
+-			.animate( downAnim, speed, easing );
+-
+-		distance = hide ? distance * 2 : distance / 2;
+-	}
+-
+-	// Last Bounce when Hiding
+-	if ( hide ) {
+-		upAnim = { opacity: 0 };
+-		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+-
+-		el.animate( upAnim, speed, easing );
+-	}
+-
+-	el.queue(function() {
+-		if ( hide ) {
+-			el.hide();
+-		}
+-		$.effects.restore( el, props );
+-		$.effects.removeWrapper( el );
+-		done();
+-	});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.clip = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "vertical",
+-		vert = direction === "vertical",
+-		size = vert ? "height" : "width",
+-		position = vert ? "top" : "left",
+-		animation = {},
+-		wrapper, animate, distance;
+-
+-	// Save & Show
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+-	distance = animate[ size ]();
+-
+-	// Shift
+-	if ( show ) {
+-		animate.css( size, 0 );
+-		animate.css( position, distance / 2 );
+-	}
+-
+-	// Create Animation Object:
+-	animation[ size ] = show ? distance : 0;
+-	animation[ position ] = show ? 0 : distance / 2;
+-
+-	// Animate
+-	animate.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( !show ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.drop = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+-		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+-		animation = {
+-			opacity: show ? 1 : 0
+-		},
+-		distance;
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+-
+-	if ( show ) {
+-		el
+-			.css( "opacity", 0 )
+-			.css( ref, motion === "pos" ? -distance : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( motion === "pos" ? "+=" : "-=" ) :
+-		( motion === "pos" ? "-=" : "+=" ) ) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.explode = function( o, done ) {
+-
+-	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+-		cells = rows,
+-		el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-
+-		// show and then visibility:hidden the element before calculating offset
+-		offset = el.show().css( "visibility", "hidden" ).offset(),
+-
+-		// width and height of a piece
+-		width = Math.ceil( el.outerWidth() / cells ),
+-		height = Math.ceil( el.outerHeight() / rows ),
+-		pieces = [],
+-
+-		// loop
+-		i, j, left, top, mx, my;
+-
+-	// children animate complete:
+-	function childComplete() {
+-		pieces.push( this );
+-		if ( pieces.length === rows * cells ) {
+-			animComplete();
+-		}
+-	}
+-
+-	// clone the element for each row and cell.
+-	for( i = 0; i < rows ; i++ ) { // ===>
+-		top = offset.top + i * height;
+-		my = i - ( rows - 1 ) / 2 ;
+-
+-		for( j = 0; j < cells ; j++ ) { // |||
+-			left = offset.left + j * width;
+-			mx = j - ( cells - 1 ) / 2 ;
+-
+-			// Create a clone of the now hidden main element that will be absolute positioned
+-			// within a wrapper div off the -left and -top equal to size of our pieces
+-			el
+-				.clone()
+-				.appendTo( "body" )
+-				.wrap( "<div></div>" )
+-				.css({
+-					position: "absolute",
+-					visibility: "visible",
+-					left: -j * width,
+-					top: -i * height
+-				})
+-
+-			// select the wrapper - make it overflow: hidden and absolute positioned based on
+-			// where the original was located +left and +top equal to the size of pieces
+-				.parent()
+-				.addClass( "ui-effects-explode" )
+-				.css({
+-					position: "absolute",
+-					overflow: "hidden",
+-					width: width,
+-					height: height,
+-					left: left + ( show ? mx * width : 0 ),
+-					top: top + ( show ? my * height : 0 ),
+-					opacity: show ? 0 : 1
+-				}).animate({
+-					left: left + ( show ? 0 : mx * width ),
+-					top: top + ( show ? 0 : my * height ),
+-					opacity: show ? 1 : 0
+-				}, o.duration || 500, o.easing, childComplete );
+-		}
+-	}
+-
+-	function animComplete() {
+-		el.css({
+-			visibility: "visible"
+-		});
+-		$( pieces ).remove();
+-		if ( !show ) {
+-			el.hide();
+-		}
+-		done();
+-	}
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.fade = function( o, done ) {
+-	var el = $( this ),
+-		mode = $.effects.setMode( el, o.mode || "toggle" );
+-
+-	el.animate({
+-		opacity: mode
+-	}, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: done
+-	});
+-};
+-
+-})( jQuery );
+-(function( $, undefined ) {
+-
+-$.effects.effect.fold = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		size = o.size || 15,
+-		percent = /([0-9]+)%/.exec( size ),
+-		horizFirst = !!o.horizFirst,
+-		widthFirst = show !== horizFirst,
+-		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+-		duration = o.duration / 2,
+-		wrapper, distance,
+-		animation1 = {},
+-		animation2 = {};
+-
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	distance = widthFirst ?
+-		[ wrapper.width(), wrapper.height() ] :
+-		[ wrapper.height(), wrapper.width() ];
+-
+-	if ( percent ) {
+-		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+-	}
+-	if ( show ) {
+-		wrapper.css( horizFirst ? {
+-			height: 0,
+-			width: size
+-		} : {
+-			height: size,
+-			width: 0
+-		});
+-	}
+-
+-	// Animation
+-	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+-	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+-
+-	// Animate
+-	wrapper
+-		.animate( animation1, duration, o.easing )
+-		.animate( animation2, duration, o.easing, function() {
+-			if ( hide ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.highlight = function( o, done ) {
+-	var elem = $( this ),
+-		props = [ "backgroundImage", "backgroundColor", "opacity" ],
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		animation = {
+-			backgroundColor: elem.css( "backgroundColor" )
+-		};
+-
+-	if (mode === "hide") {
+-		animation.opacity = 0;
+-	}
+-
+-	$.effects.save( elem, props );
+-
+-	elem
+-		.show()
+-		.css({
+-			backgroundImage: "none",
+-			backgroundColor: o.color || "#ffff99"
+-		})
+-		.animate( animation, {
+-			queue: false,
+-			duration: o.duration,
+-			easing: o.easing,
+-			complete: function() {
+-				if ( mode === "hide" ) {
+-					elem.hide();
+-				}
+-				$.effects.restore( elem, props );
+-				done();
+-			}
+-		});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.pulsate = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "show" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		showhide = ( show || mode === "hide" ),
+-
+-		// showing or hiding leaves of the "last" animation
+-		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+-		duration = o.duration / anims,
+-		animateTo = 0,
+-		queue = elem.queue(),
+-		queuelen = queue.length,
+-		i;
+-
+-	if ( show || !elem.is(":visible")) {
+-		elem.css( "opacity", 0 ).show();
+-		animateTo = 1;
+-	}
+-
+-	// anims - 1 opacity "toggles"
+-	for ( i = 1; i < anims; i++ ) {
+-		elem.animate({
+-			opacity: animateTo
+-		}, duration, o.easing );
+-		animateTo = 1 - animateTo;
+-	}
+-
+-	elem.animate({
+-		opacity: animateTo
+-	}, duration, o.easing);
+-
+-	elem.queue(function() {
+-		if ( hide ) {
+-			elem.hide();
+-		}
+-		done();
+-	});
+-
+-	// We just queued up "anims" animations, we need to put them next in the queue
+-	if ( queuelen > 1 ) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	elem.dequeue();
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.puff = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "hide" ),
+-		hide = mode === "hide",
+-		percent = parseInt( o.percent, 10 ) || 150,
+-		factor = percent / 100,
+-		original = {
+-			height: elem.height(),
+-			width: elem.width(),
+-			outerHeight: elem.outerHeight(),
+-			outerWidth: elem.outerWidth()
+-		};
+-
+-	$.extend( o, {
+-		effect: "scale",
+-		queue: false,
+-		fade: true,
+-		mode: mode,
+-		complete: done,
+-		percent: hide ? percent : 100,
+-		from: hide ?
+-			original :
+-			{
+-				height: original.height * factor,
+-				width: original.width * factor,
+-				outerHeight: original.outerHeight * factor,
+-				outerWidth: original.outerWidth * factor
+-			}
+-	});
+-
+-	elem.effect( o );
+-};
+-
+-$.effects.effect.scale = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		options = $.extend( true, {}, o ),
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		percent = parseInt( o.percent, 10 ) ||
+-			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+-		direction = o.direction || "both",
+-		origin = o.origin,
+-		original = {
+-			height: el.height(),
+-			width: el.width(),
+-			outerHeight: el.outerHeight(),
+-			outerWidth: el.outerWidth()
+-		},
+-		factor = {
+-			y: direction !== "horizontal" ? (percent / 100) : 1,
+-			x: direction !== "vertical" ? (percent / 100) : 1
+-		};
+-
+-	// We are going to pass this effect to the size effect:
+-	options.effect = "size";
+-	options.queue = false;
+-	options.complete = done;
+-
+-	// Set default origin and restore for show/hide
+-	if ( mode !== "effect" ) {
+-		options.origin = origin || ["middle","center"];
+-		options.restore = true;
+-	}
+-
+-	options.from = o.from || ( mode === "show" ? {
+-		height: 0,
+-		width: 0,
+-		outerHeight: 0,
+-		outerWidth: 0
+-	} : original );
+-	options.to = {
+-		height: original.height * factor.y,
+-		width: original.width * factor.x,
+-		outerHeight: original.outerHeight * factor.y,
+-		outerWidth: original.outerWidth * factor.x
+-	};
+-
+-	// Fade option to support puff
+-	if ( options.fade ) {
+-		if ( mode === "show" ) {
+-			options.from.opacity = 0;
+-			options.to.opacity = 1;
+-		}
+-		if ( mode === "hide" ) {
+-			options.from.opacity = 1;
+-			options.to.opacity = 0;
+-		}
+-	}
+-
+-	// Animate
+-	el.effect( options );
+-
+-};
+-
+-$.effects.effect.size = function( o, done ) {
+-
+-	// Create element
+-	var original, baseline, factor,
+-		el = $( this ),
+-		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+-
+-		// Always restore
+-		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+-
+-		// Copy for children
+-		props2 = [ "width", "height", "overflow" ],
+-		cProps = [ "fontSize" ],
+-		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+-		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+-
+-		// Set options
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		restore = o.restore || mode !== "effect",
+-		scale = o.scale || "both",
+-		origin = o.origin || [ "middle", "center" ],
+-		position = el.css( "position" ),
+-		props = restore ? props0 : props1,
+-		zero = {
+-			height: 0,
+-			width: 0,
+-			outerHeight: 0,
+-			outerWidth: 0
+-		};
+-
+-	if ( mode === "show" ) {
+-		el.show();
+-	}
+-	original = {
+-		height: el.height(),
+-		width: el.width(),
+-		outerHeight: el.outerHeight(),
+-		outerWidth: el.outerWidth()
+-	};
+-
+-	if ( o.mode === "toggle" && mode === "show" ) {
+-		el.from = o.to || zero;
+-		el.to = o.from || original;
+-	} else {
+-		el.from = o.from || ( mode === "show" ? zero : original );
+-		el.to = o.to || ( mode === "hide" ? zero : original );
+-	}
+-
+-	// Set scaling factor
+-	factor = {
+-		from: {
+-			y: el.from.height / original.height,
+-			x: el.from.width / original.width
+-		},
+-		to: {
+-			y: el.to.height / original.height,
+-			x: el.to.width / original.width
+-		}
+-	};
+-
+-	// Scale the css box
+-	if ( scale === "box" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( vProps );
+-			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+-		}
+-
+-		// Horizontal props scaling
+-		if ( factor.from.x !== factor.to.x ) {
+-			props = props.concat( hProps );
+-			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+-			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+-		}
+-	}
+-
+-	// Scale the content
+-	if ( scale === "content" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( cProps ).concat( props2 );
+-			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+-		}
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-	el.css( "overflow", "hidden" ).css( el.from );
+-
+-	// Adjust
+-	if (origin) { // Calculate baseline shifts
+-		baseline = $.effects.getBaseline( origin, original );
+-		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+-		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+-		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+-		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+-	}
+-	el.css( el.from ); // set top & left
+-
+-	// Animate
+-	if ( scale === "content" || scale === "both" ) { // Scale the children
+-
+-		// Add margins/font-size
+-		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+-		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+-		props2 = props0.concat(vProps).concat(hProps);
+-
+-		el.find( "*[width]" ).each( function(){
+-			var child = $( this ),
+-				c_original = {
+-					height: child.height(),
+-					width: child.width(),
+-					outerHeight: child.outerHeight(),
+-					outerWidth: child.outerWidth()
+-				};
+-			if (restore) {
+-				$.effects.save(child, props2);
+-			}
+-
+-			child.from = {
+-				height: c_original.height * factor.from.y,
+-				width: c_original.width * factor.from.x,
+-				outerHeight: c_original.outerHeight * factor.from.y,
+-				outerWidth: c_original.outerWidth * factor.from.x
+-			};
+-			child.to = {
+-				height: c_original.height * factor.to.y,
+-				width: c_original.width * factor.to.x,
+-				outerHeight: c_original.height * factor.to.y,
+-				outerWidth: c_original.width * factor.to.x
+-			};
+-
+-			// Vertical props scaling
+-			if ( factor.from.y !== factor.to.y ) {
+-				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+-				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+-			}
+-
+-			// Horizontal props scaling
+-			if ( factor.from.x !== factor.to.x ) {
+-				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+-				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+-			}
+-
+-			// Animate children
+-			child.css( child.from );
+-			child.animate( child.to, o.duration, o.easing, function() {
+-
+-				// Restore children
+-				if ( restore ) {
+-					$.effects.restore( child, props2 );
+-				}
+-			});
+-		});
+-	}
+-
+-	// Animate
+-	el.animate( el.to, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( el.to.opacity === 0 ) {
+-				el.css( "opacity", el.from.opacity );
+-			}
+-			if( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			if ( !restore ) {
+-
+-				// we need to calculate our new positioning based on the scaling
+-				if ( position === "static" ) {
+-					el.css({
+-						position: "relative",
+-						top: el.to.top,
+-						left: el.to.left
+-					});
+-				} else {
+-					$.each([ "top", "left" ], function( idx, pos ) {
+-						el.css( pos, function( _, str ) {
+-							var val = parseInt( str, 10 ),
+-								toRef = idx ? el.to.left : el.to.top;
+-
+-							// if original was "auto", recalculate the new value from wrapper
+-							if ( str === "auto" ) {
+-								return toRef + "px";
+-							}
+-
+-							return val + toRef + "px";
+-						});
+-					});
+-				}
+-			}
+-
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.shake = function( o, done ) {
+-
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		direction = o.direction || "left",
+-		distance = o.distance || 20,
+-		times = o.times || 3,
+-		anims = times * 2 + 1,
+-		speed = Math.round(o.duration/anims),
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		animation = {},
+-		animation1 = {},
+-		animation2 = {},
+-		i,
+-
+-		// we will need to re-assemble the queue to stack our animations in place
+-		queue = el.queue(),
+-		queuelen = queue.length;
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-
+-	// Animation
+-	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+-	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+-	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+-
+-	// Animate
+-	el.animate( animation, speed, o.easing );
+-
+-	// Shakes
+-	for ( i = 1; i < times; i++ ) {
+-		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+-	}
+-	el
+-		.animate( animation1, speed, o.easing )
+-		.animate( animation, speed / 2, o.easing )
+-		.queue(function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-	// inject all the animations we just queued to be first in line (after "inprogress")
+-	if ( queuelen > 1) {
+-		queue.splice.apply( queue,
+-			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+-	}
+-	el.dequeue();
+-
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.slide = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+-		mode = $.effects.setMode( el, o.mode || "show" ),
+-		show = mode === "show",
+-		direction = o.direction || "left",
+-		ref = (direction === "up" || direction === "down") ? "top" : "left",
+-		positiveMotion = (direction === "up" || direction === "left"),
+-		distance,
+-		animation = {};
+-
+-	// Adjust
+-	$.effects.save( el, props );
+-	el.show();
+-	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+-
+-	$.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	if ( show ) {
+-		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+-	}
+-
+-	// Animation
+-	animation[ ref ] = ( show ?
+-		( positiveMotion ? "+=" : "-=") :
+-		( positiveMotion ? "-=" : "+=")) +
+-		distance;
+-
+-	// Animate
+-	el.animate( animation, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-};
+-
+-})(jQuery);
+-(function( $, undefined ) {
+-
+-$.effects.effect.transfer = function( o, done ) {
+-	var elem = $( this ),
+-		target = $( o.to ),
+-		targetFixed = target.css( "position" ) === "fixed",
+-		body = $("body"),
+-		fixTop = targetFixed ? body.scrollTop() : 0,
+-		fixLeft = targetFixed ? body.scrollLeft() : 0,
+-		endPosition = target.offset(),
+-		animation = {
+-			top: endPosition.top - fixTop ,
+-			left: endPosition.left - fixLeft ,
+-			height: target.innerHeight(),
+-			width: target.innerWidth()
+-		},
+-		startPosition = elem.offset(),
+-		transfer = $( "<div class='ui-effects-transfer'></div>" )
+-			.appendTo( document.body )
+-			.addClass( o.className )
+-			.css({
+-				top: startPosition.top - fixTop ,
+-				left: startPosition.left - fixLeft ,
+-				height: elem.innerHeight(),
+-				width: elem.innerWidth(),
+-				position: targetFixed ? "fixed" : "absolute"
+-			})
+-			.animate( animation, o.duration, o.easing, function() {
+-				transfer.remove();
+-				done();
+-			});
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ja.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ja.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ja.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Japanese initialisation for the jQuery UI date picker plugin. */
+-/* Written by Kentaro SATO (kentaro@ranvis.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ja'] = {
+-		closeText: '閉じる',
+-		prevText: '&#x3C;前',
+-		nextText: '次&#x3E;',
+-		currentText: '今日',
+-		monthNames: ['1月','2月','3月','4月','5月','6月',
+-		'7月','8月','9月','10月','11月','12月'],
+-		monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+-		'7月','8月','9月','10月','11月','12月'],
+-		dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
+-		dayNamesShort: ['日','月','火','水','木','金','土'],
+-		dayNamesMin: ['日','月','火','水','木','金','土'],
+-		weekHeader: '週',
+-		dateFormat: 'yy/mm/dd',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['ja']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ka.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ka.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ka.js	(revision 15488)
+@@ -1,21 +0,0 @@
+-/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ka'] = {
+-		closeText: 'დახურვა',
+-		prevText: '&#x3c; წინა',
+-		nextText: 'შემდეგი &#x3e;',
+-		currentText: 'დღეს',
+-		monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი', 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'],
+-		monthNamesShort: ['იან','თებ','მარ','აპრ','მაი','ივნ', 'ივლ','აგვ','სექ','ოქტ','ნოე','დეკ'],
+-		dayNames: ['კვირა','ორშაბათი','სამშაბათი','ოთხშაბათი','ხუთშაბათი','პარასკევი','შაბათი'],
+-		dayNamesShort: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'],
+-		dayNamesMin: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'],
+-		weekHeader: 'კვირა',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ka']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-he.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-he.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-he.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Hebrew initialisation for the UI Datepicker extension. */
+-/* Written by Amir Hardon (ahardon at gmail dot com). */
+-jQuery(function($){
+-	$.datepicker.regional['he'] = {
+-		closeText: 'סגור',
+-		prevText: '&#x3C;הקודם',
+-		nextText: 'הבא&#x3E;',
+-		currentText: 'היום',
+-		monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
+-		'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
+-		monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני',
+-		'יולי','אוג','ספט','אוק','נוב','דצמ'],
+-		dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+-		dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+-		dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['he']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fi.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fi.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fi.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Finnish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['fi'] = {
+-		closeText: 'Sulje',
+-		prevText: '&#xAB;Edellinen',
+-		nextText: 'Seuraava&#xBB;',
+-		currentText: 'Tänään',
+-		monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu',
+-		'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+-		monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä',
+-		'Heinä','Elo','Syys','Loka','Marras','Joulu'],
+-		dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
+-		dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+-		dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+-		weekHeader: 'Vk',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fi']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CH.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CH.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CH.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+-/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+-jQuery(function($){
+-	$.datepicker.regional['fr-CH'] = {
+-		closeText: 'Fermer',
+-		prevText: '&#x3C;Préc',
+-		nextText: 'Suiv&#x3E;',
+-		currentText: 'Courant',
+-		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+-		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+-		monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+-		'Jul','Aoû','Sep','Oct','Nov','Déc'],
+-		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+-		dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+-		dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hi.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hi.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hi.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Hindi initialisation for the jQuery UI date picker plugin. */
+-/* Written by Michael Dawart. */
+-jQuery(function($){
+-	$.datepicker.regional['hi'] = {
+-		closeText: 'बंद',
+-		prevText: 'पिछला',
+-		nextText: 'अगला',
+-		currentText: 'आज',
+-		monthNames: ['जनवरी ','फरवरी','मार्च','अप्रेल','मई','जून',
+-		'जूलाई','अगस्त ','सितम्बर','अक्टूबर','नवम्बर','दिसम्बर'],
+-		monthNamesShort: ['जन', 'फर', 'मार्च', 'अप्रेल', 'मई', 'जून',
+-		'जूलाई', 'अग', 'सित', 'अक्ट', 'नव', 'दि'],
+-		dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],
+-		dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
+-		dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
+-		weekHeader: 'हफ्ता',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['hi']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ta.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ta.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ta.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by S A Sureshkumar (saskumar@live.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ta'] = {
+-		closeText: 'மூடு',
+-		prevText: 'முன்னையது',
+-		nextText: 'அடுத்தது',
+-		currentText: 'இன்று',
+-		monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி',
+-		'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'],
+-		monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி',
+-		'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'],
+-		dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'],
+-		dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'],
+-		dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'],
+-		weekHeader: 'Не',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ta']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-AU.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-AU.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-AU.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* English/Australia initialisation for the jQuery UI date picker plugin. */
+-/* Based on the en-GB initialisation. */
+-jQuery(function($){
+-	$.datepicker.regional['en-AU'] = {
+-		closeText: 'Done',
+-		prevText: 'Prev',
+-		nextText: 'Next',
+-		currentText: 'Today',
+-		monthNames: ['January','February','March','April','May','June',
+-		'July','August','September','October','November','December'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+-		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+-		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+-		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['en-AU']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-km.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-km.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-km.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Khmer initialisation for the jQuery calendar extension. */
+-/* Written by Chandara Om (chandara.teacher@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['km'] = {
+-		closeText: 'ធ្វើ​រួច',
+-		prevText: 'មុន',
+-		nextText: 'បន្ទាប់',
+-		currentText: 'ថ្ងៃ​នេះ',
+-		monthNames: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា',
+-		'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'],
+-		monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា',
+-		'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'],
+-		dayNames: ['អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍'],
+-		dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+-		dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+-		weekHeader: 'សប្ដាហ៍',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['km']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eu.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eu.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eu.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
+-/* Karrikas-ek itzulia (karrikas@karrikas.com) */
+-jQuery(function($){
+-	$.datepicker.regional['eu'] = {
+-		closeText: 'Egina',
+-		prevText: '&#x3C;Aur',
+-		nextText: 'Hur&#x3E;',
+-		currentText: 'Gaur',
+-		monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
+-			'uztaila','abuztua','iraila','urria','azaroa','abendua'],
+-		monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.',
+-			'uzt.','abu.','ira.','urr.','aza.','abe.'],
+-		dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'],
+-		dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'],
+-		dayNamesMin: ['ig','al','ar','az','og','ol','lr'],
+-		weekHeader: 'As',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['eu']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hu.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hu.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hu.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Hungarian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
+-jQuery(function($){
+-	$.datepicker.regional['hu'] = {
+-		closeText: 'bezár',
+-		prevText: 'vissza',
+-		nextText: 'előre',
+-		currentText: 'ma',
+-		monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
+-		'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+-		monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
+-		'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+-		dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+-		dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+-		dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+-		weekHeader: 'Hét',
+-		dateFormat: 'yy.mm.dd.',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['hu']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-vi.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-vi.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-vi.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Vietnamese initialisation for the jQuery UI date picker plugin. */
+-/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+-jQuery(function($){
+-	$.datepicker.regional['vi'] = {
+-		closeText: 'Đóng',
+-		prevText: '&#x3C;Trước',
+-		nextText: 'Tiếp&#x3E;',
+-		currentText: 'Hôm nay',
+-		monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+-		'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
+-		monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+-		'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+-		dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+-		dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+-		dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+-		weekHeader: 'Tu',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['vi']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-rm.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-rm.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-rm.js	(revision 15488)
+@@ -1,21 +0,0 @@
+-/* Romansh initialisation for the jQuery UI date picker plugin. */
+-/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
+-jQuery(function($){
+-	$.datepicker.regional['rm'] = {
+-		closeText: 'Serrar',
+-		prevText: '&#x3C;Suandant',
+-		nextText: 'Precedent&#x3E;',
+-		currentText: 'Actual',
+-		monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
+-		monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
+-		dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
+-		dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
+-		dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
+-		weekHeader: 'emna',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['rm']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hy.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hy.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hy.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
+-jQuery(function($){
+-	$.datepicker.regional['hy'] = {
+-		closeText: 'Փակել',
+-		prevText: '&#x3C;Նախ.',
+-		nextText: 'Հաջ.&#x3E;',
+-		currentText: 'Այսօր',
+-		monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
+-		'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
+-		monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
+-		'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
+-		dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
+-		dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+-		dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+-		weekHeader: 'ՇԲՏ',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['hy']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ky.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ky.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ky.js	(revision 15488)
+@@ -1,24 +0,0 @@
+-/* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Sergey Kartashov (ebishkek@yandex.ru). */
+-jQuery(function($){
+-	$.datepicker.regional['ky'] = {
+-		closeText: 'Жабуу',
+-		prevText: '&#x3c;Мур',
+-		nextText: 'Кий&#x3e;',
+-		currentText: 'Бүгүн',
+-		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
+-		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+-		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+-		'Июл','Авг','Сен','Окт','Ноя','Дек'],
+-		dayNames: ['жекшемби', 'дүйшөмбү', 'шейшемби', 'шаршемби', 'бейшемби', 'жума', 'ишемби'],
+-		dayNamesShort: ['жек', 'дүй', 'шей', 'шар', 'бей', 'жум', 'ише'],
+-		dayNamesMin: ['Жк','Дш','Шш','Шр','Бш','Жм','Иш'],
+-		weekHeader: 'Жум',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['ky']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sq.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sq.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sq.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Albanian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Flakron Bytyqi (flakron@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['sq'] = {
+-		closeText: 'mbylle',
+-		prevText: '&#x3C;mbrapa',
+-		nextText: 'Përpara&#x3E;',
+-		currentText: 'sot',
+-		monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+-		'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+-		monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+-		'Kor','Gus','Sht','Tet','Nën','Dhj'],
+-		dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+-		dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+-		dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+-		weekHeader: 'Ja',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sq']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt-BR.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt-BR.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt-BR.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Brazilian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['pt-BR'] = {
+-		closeText: 'Fechar',
+-		prevText: '&#x3C;Anterior',
+-		nextText: 'Próximo&#x3E;',
+-		currentText: 'Hoje',
+-		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+-		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+-		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+-		'Jul','Ago','Set','Out','Nov','Dez'],
+-		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+-		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+-		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['pt-BR']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ru.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ru.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ru.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Andrew Stromnov (stromnov@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ru'] = {
+-		closeText: 'Закрыть',
+-		prevText: '&#x3C;Пред',
+-		nextText: 'След&#x3E;',
+-		currentText: 'Сегодня',
+-		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
+-		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+-		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+-		'Июл','Авг','Сен','Окт','Ноя','Дек'],
+-		dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
+-		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
+-		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
+-		weekHeader: 'Нед',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ru']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-id.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-id.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-id.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Indonesian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Deden Fathurahman (dedenf@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['id'] = {
+-		closeText: 'Tutup',
+-		prevText: '&#x3C;mundur',
+-		nextText: 'maju&#x3E;',
+-		currentText: 'hari ini',
+-		monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+-		'Juli','Agustus','September','Oktober','Nopember','Desember'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+-		'Jul','Agus','Sep','Okt','Nop','Des'],
+-		dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+-		dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+-		dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+-		weekHeader: 'Mg',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['id']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-el.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-el.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-el.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Greek (el) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Alex Cicovic (http://www.alexcicovic.com) */
+-jQuery(function($){
+-	$.datepicker.regional['el'] = {
+-		closeText: 'Κλείσιμο',
+-		prevText: 'Προηγούμενος',
+-		nextText: 'Επόμενος',
+-		currentText: 'Τρέχων Μήνας',
+-		monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
+-		'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
+-		monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
+-		'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
+-		dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
+-		dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
+-		dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
+-		weekHeader: 'Εβδ',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['el']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-gl.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-gl.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-gl.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Galician localization for 'UI date picker' jQuery extension. */
+-/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
+-jQuery(function($){
+-	$.datepicker.regional['gl'] = {
+-		closeText: 'Pechar',
+-		prevText: '&#x3C;Ant',
+-		nextText: 'Seg&#x3E;',
+-		currentText: 'Hoxe',
+-		monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+-		'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+-		monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+-		'Xul','Ago','Set','Out','Nov','Dec'],
+-		dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'],
+-		dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'],
+-		dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['gl']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-et.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-et.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-et.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Estonian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+-jQuery(function($){
+-	$.datepicker.regional['et'] = {
+-		closeText: 'Sulge',
+-		prevText: 'Eelnev',
+-		nextText: 'Järgnev',
+-		currentText: 'Täna',
+-		monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+-		'Juuli','August','September','Oktoober','November','Detsember'],
+-		monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+-		'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+-		dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+-		dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+-		dayNamesMin: ['P','E','T','K','N','R','L'],
+-		weekHeader: 'näd',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['et']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ml.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ml.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ml.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Saji Nediyanchath (saji89@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ml'] = {
+-		closeText: 'ശരി',
+-		prevText: 'മുന്നത്തെ',
+-		nextText: 'അടുത്തത് ',
+-		currentText: 'ഇന്ന്',
+-		monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍',
+-		'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'],
+-		monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍',
+-		'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'],
+-		dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+-		dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+-		dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'],
+-		weekHeader: 'ആ',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ml']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Mathias Bynens <http://mathiasbynens.be/> */
+-jQuery(function($){
+-	$.datepicker.regional.nl = {
+-		closeText: 'Sluiten',
+-		prevText: '←',
+-		nextText: '→',
+-		currentText: 'Vandaag',
+-		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+-		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+-		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+-		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+-		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+-		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+-		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional.nl);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-th.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-th.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-th.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Thai initialisation for the jQuery UI date picker plugin. */
+-/* Written by pipo (pipo@sixhead.com). */
+-jQuery(function($){
+-	$.datepicker.regional['th'] = {
+-		closeText: 'ปิด',
+-		prevText: '&#xAB;&#xA0;ย้อน',
+-		nextText: 'ถัดไป&#xA0;&#xBB;',
+-		currentText: 'วันนี้',
+-		monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+-		'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
+-		monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+-		'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+-		dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
+-		dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+-		dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['th']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pl.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pl.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pl.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Polish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['pl'] = {
+-		closeText: 'Zamknij',
+-		prevText: '&#x3C;Poprzedni',
+-		nextText: 'Następny&#x3E;',
+-		currentText: 'Dziś',
+-		monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+-		'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+-		monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+-		'Lip','Sie','Wrz','Pa','Lis','Gru'],
+-		dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+-		dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
+-		dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
+-		weekHeader: 'Tydz',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['pl']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-it.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-it.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-it.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Italian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['it'] = {
+-		closeText: 'Chiudi',
+-		prevText: '&#x3C;Prec',
+-		nextText: 'Succ&#x3E;',
+-		currentText: 'Oggi',
+-		monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+-			'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+-		monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+-			'Lug','Ago','Set','Ott','Nov','Dic'],
+-		dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'],
+-		dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+-		dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['it']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sl.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sl.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sl.js	(revision 15488)
+@@ -1,24 +0,0 @@
+-/* Slovenian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Jaka Jancar (jaka@kubje.org). */
+-/* c = č, s = š z = ž C = Č S = Š Z = Ž */
+-jQuery(function($){
+-	$.datepicker.regional['sl'] = {
+-		closeText: 'Zapri',
+-		prevText: '&#x3C;Prejšnji',
+-		nextText: 'Naslednji&#x3E;',
+-		currentText: 'Trenutni',
+-		monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+-		'Julij','Avgust','September','Oktober','November','December'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Avg','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'],
+-		dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'],
+-		dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'],
+-		weekHeader: 'Teden',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sl']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lt.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lt.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lt.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* @author Arturas Paleicikas <arturas@avalon.lt> */
+-jQuery(function($){
+-	$.datepicker.regional['lt'] = {
+-		closeText: 'Uždaryti',
+-		prevText: '&#x3C;Atgal',
+-		nextText: 'Pirmyn&#x3E;',
+-		currentText: 'Šiandien',
+-		monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+-		'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+-		monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+-		'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+-		dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
+-		dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+-		dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['lt']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-HK.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-HK.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-HK.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Chinese initialisation for the jQuery UI date picker plugin. */
+-/* Written by SCCY (samuelcychan@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['zh-HK'] = {
+-		closeText: '關閉',
+-		prevText: '&#x3C;上月',
+-		nextText: '下月&#x3E;',
+-		currentText: '今天',
+-		monthNames: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+-		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+-		dayNamesMin: ['日','一','二','三','四','五','六'],
+-		weekHeader: '周',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['zh-HK']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt.js	(revision 15488)
+@@ -1,22 +0,0 @@
+-/* Portuguese initialisation for the jQuery UI date picker plugin. */
+-jQuery(function($){
+-	$.datepicker.regional['pt'] = {
+-		closeText: 'Fechar',
+-		prevText: '&#x3C;Anterior',
+-		nextText: 'Seguinte',
+-		currentText: 'Hoje',
+-		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+-		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+-		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+-		'Jul','Ago','Set','Out','Nov','Dez'],
+-		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+-		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+-		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+-		weekHeader: 'Sem',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['pt']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bg.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bg.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bg.js	(revision 15488)
+@@ -1,24 +0,0 @@
+-/* Bulgarian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Stoyan Kyosev (http://svest.org). */
+-jQuery(function($){
+-	$.datepicker.regional['bg'] = {
+-		closeText: 'затвори',
+-		prevText: '&#x3C;назад',
+-		nextText: 'напред&#x3E;',
+-		nextBigText: '&#x3E;&#x3E;',
+-		currentText: 'днес',
+-		monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
+-		'Юли','Август','Септември','Октомври','Ноември','Декември'],
+-		monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
+-		'Юли','Авг','Сеп','Окт','Нов','Дек'],
+-		dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
+-		dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
+-		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['bg']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eo.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eo.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eo.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Esperanto initialisation for the jQuery UI date picker plugin. */
+-/* Written by Olivier M. (olivierweb@ifrance.com). */
+-jQuery(function($){
+-	$.datepicker.regional['eo'] = {
+-		closeText: 'Fermi',
+-		prevText: '&#x3C;Anta',
+-		nextText: 'Sekv&#x3E;',
+-		currentText: 'Nuna',
+-		monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+-		'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Aŭg','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+-		dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
+-		dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
+-		weekHeader: 'Sb',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['eo']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery-ui-i18n.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery-ui-i18n.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery-ui-i18n.js	(revision 15488)
+@@ -1,1793 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Includes: jquery.ui.datepicker-af.js, jquery.ui.datepicker-ar-DZ.js, jquery.ui.datepicker-ar.js, jquery.ui.datepicker-az.js, jquery.ui.datepicker-be.js, jquery.ui.datepicker-bg.js, jquery.ui.datepicker-bs.js, jquery.ui.datepicker-ca.js, jquery.ui.datepicker-cs.js, jquery.ui.datepicker-cy-GB.js, jquery.ui.datepicker-da.js, jquery.ui.datepicker-de.js, jquery.ui.datepicker-el.js, jquery.ui.datepicker-en-AU.js, jquery.ui.datepicker-en-GB.js, jquery.ui.datepicker-en-NZ.js, jquery.ui.datepicker-eo.js, jquery.ui.datepicker-es.js, jquery.ui.datepicker-et.js, jquery.ui.datepicker-eu.js, jquery.ui.datepicker-fa.js, jquery.ui.datepicker-fi.js, jquery.ui.datepicker-fo.js, jquery.ui.datepicker-fr-CA.js, jquery.ui.datepicker-fr-CH.js, jquery.ui.datepicker-fr.js, jquery.ui.datepicker-gl.js, jquery.ui.datepicker-he.js, jquery.ui.datepicker-hi.js, jquery.ui.datepicker-hr.js, jquery.ui.datepicker-hu.js, jquery.ui.datepicker-hy.js, jquery.ui.datepicker-id.js, jquery.ui.datepicker-is.js, jquery.ui.datepicker-it.js, jquery.ui.datepicker-ja.js, jquery.ui.datepicker-ka.js, jquery.ui.datepicker-kk.js, jquery.ui.datepicker-km.js, jquery.ui.datepicker-ko.js, jquery.ui.datepicker-ky.js, jquery.ui.datepicker-lb.js, jquery.ui.datepicker-lt.js, jquery.ui.datepicker-lv.js, jquery.ui.datepicker-mk.js, jquery.ui.datepicker-ml.js, jquery.ui.datepicker-ms.js, jquery.ui.datepicker-nb.js, jquery.ui.datepicker-nl-BE.js, jquery.ui.datepicker-nl.js, jquery.ui.datepicker-nn.js, jquery.ui.datepicker-no.js, jquery.ui.datepicker-pl.js, jquery.ui.datepicker-pt-BR.js, jquery.ui.datepicker-pt.js, jquery.ui.datepicker-rm.js, jquery.ui.datepicker-ro.js, jquery.ui.datepicker-ru.js, jquery.ui.datepicker-sk.js, jquery.ui.datepicker-sl.js, jquery.ui.datepicker-sq.js, jquery.ui.datepicker-sr-SR.js, jquery.ui.datepicker-sr.js, jquery.ui.datepicker-sv.js, jquery.ui.datepicker-ta.js, jquery.ui.datepicker-th.js, jquery.ui.datepicker-tj.js, jquery.ui.datepicker-tr.js, jquery.ui.datepicker-uk.js, jquery.ui.datepicker-vi.js, jquery.ui.datepicker-zh-CN.js, jquery.ui.datepicker-zh-HK.js, jquery.ui.datepicker-zh-TW.js
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-/* Afrikaans initialisation for the jQuery UI date picker plugin. */
+-/* Written by Renier Pretorius. */
+-jQuery(function($){
+-	$.datepicker.regional['af'] = {
+-		closeText: 'Selekteer',
+-		prevText: 'Vorige',
+-		nextText: 'Volgende',
+-		currentText: 'Vandag',
+-		monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+-		'Julie','Augustus','September','Oktober','November','Desember'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+-		dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+-		dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+-		dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['af']);
+-});
+-
+-/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+-/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+-
+-jQuery(function($){
+-	$.datepicker.regional['ar-DZ'] = {
+-		closeText: 'إغلاق',
+-		prevText: '&#x3C;السابق',
+-		nextText: 'التالي&#x3E;',
+-		currentText: 'اليوم',
+-		monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
+-		'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
+-		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+-		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		weekHeader: 'أسبوع',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 6,
+-  		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+-});
+-
+-/* Arabic Translation for jQuery UI date picker plugin. */
+-/* Khaled Alhourani -- me@khaledalhourani.com */
+-/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
+-jQuery(function($){
+-	$.datepicker.regional['ar'] = {
+-		closeText: 'إغلاق',
+-		prevText: '&#x3C;السابق',
+-		nextText: 'التالي&#x3E;',
+-		currentText: 'اليوم',
+-		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+-		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+-		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+-		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+-		weekHeader: 'أسبوع',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 6,
+-  		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ar']);
+-});
+-
+-/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Jamil Najafov (necefov33@gmail.com). */
+-jQuery(function($) {
+-	$.datepicker.regional['az'] = {
+-		closeText: 'Bağla',
+-		prevText: '&#x3C;Geri',
+-		nextText: 'İrəli&#x3E;',
+-		currentText: 'Bugün',
+-		monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
+-		'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+-		monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
+-		'İyul','Avq','Sen','Okt','Noy','Dek'],
+-		dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+-		dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+-		dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+-		weekHeader: 'Hf',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['az']);
+-});
+-
+-/* Belarusian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Pavel Selitskas <p.selitskas@gmail.com> */
+-jQuery(function($){
+-	$.datepicker.regional['be'] = {
+-		closeText: 'Зачыніць',
+-		prevText: '&larr;Папяр.',
+-		nextText: 'Наст.&rarr;',
+-		currentText: 'Сёньня',
+-		monthNames: ['Студзень','Люты','Сакавік','Красавік','Травень','Чэрвень',
+-		'Ліпень','Жнівень','Верасень','Кастрычнік','Лістапад','Сьнежань'],
+-		monthNamesShort: ['Сту','Лют','Сак','Кра','Тра','Чэр',
+-		'Ліп','Жні','Вер','Кас','Ліс','Сьн'],
+-		dayNames: ['нядзеля','панядзелак','аўторак','серада','чацьвер','пятніца','субота'],
+-		dayNamesShort: ['ндз','пнд','аўт','срд','чцв','птн','сбт'],
+-		dayNamesMin: ['Нд','Пн','Аў','Ср','Чц','Пт','Сб'],
+-		weekHeader: 'Тд',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['be']);
+-});
+-
+-/* Bulgarian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Stoyan Kyosev (http://svest.org). */
+-jQuery(function($){
+-	$.datepicker.regional['bg'] = {
+-		closeText: 'затвори',
+-		prevText: '&#x3C;назад',
+-		nextText: 'напред&#x3E;',
+-		nextBigText: '&#x3E;&#x3E;',
+-		currentText: 'днес',
+-		monthNames: ['Януари','Февруари','Март','Април','Май','Юни',
+-		'Юли','Август','Септември','Октомври','Ноември','Декември'],
+-		monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни',
+-		'Юли','Авг','Сеп','Окт','Нов','Дек'],
+-		dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'],
+-		dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'],
+-		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['bg']);
+-});
+-
+-/* Bosnian i18n for the jQuery UI date picker plugin. */
+-/* Written by Kenan Konjo. */
+-jQuery(function($){
+-	$.datepicker.regional['bs'] = {
+-		closeText: 'Zatvori',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Danas',
+-		monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+-		'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+-		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+-		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['bs']);
+-});
+-
+-/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
+-/* Writers: (joan.leon@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ca'] = {
+-		closeText: 'Tanca',
+-		prevText: 'Anterior',
+-		nextText: 'Següent',
+-		currentText: 'Avui',
+-		monthNames: ['gener','febrer','març','abril','maig','juny',
+-		'juliol','agost','setembre','octubre','novembre','desembre'],
+-		monthNamesShort: ['gen','feb','març','abr','maig','juny',
+-		'jul','ag','set','oct','nov','des'],
+-		dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],
+-		dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'],
+-		dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'],
+-		weekHeader: 'Set',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ca']);
+-});
+-
+-/* Czech initialisation for the jQuery UI date picker plugin. */
+-/* Written by Tomas Muller (tomas@tomas-muller.net). */
+-jQuery(function($){
+-	$.datepicker.regional['cs'] = {
+-		closeText: 'Zavřít',
+-		prevText: '&#x3C;Dříve',
+-		nextText: 'Později&#x3E;',
+-		currentText: 'Nyní',
+-		monthNames: ['leden','únor','březen','duben','květen','červen',
+-		'červenec','srpen','září','říjen','listopad','prosinec'],
+-		monthNamesShort: ['led','úno','bře','dub','kvě','čer',
+-		'čvc','srp','zář','říj','lis','pro'],
+-		dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
+-		dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
+-		dayNamesMin: ['ne','po','út','st','čt','pá','so'],
+-		weekHeader: 'Týd',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['cs']);
+-});
+-
+-/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
+-/* Written by William Griffiths. */
+-jQuery(function($){
+-	$.datepicker.regional['cy-GB'] = {
+-		closeText: 'Done',
+-		prevText: 'Prev',
+-		nextText: 'Next',
+-		currentText: 'Today',
+-		monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
+-		'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
+-		monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
+-		'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
+-		dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
+-		dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+-		dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
+-		weekHeader: 'Wy',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['cy-GB']);
+-});
+-
+-/* Danish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Jan Christensen ( deletestuff@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['da'] = {
+-		closeText: 'Luk',
+-		prevText: '&#x3C;Forrige',
+-		nextText: 'Næste&#x3E;',
+-		currentText: 'Idag',
+-		monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+-		'Juli','August','September','Oktober','November','December'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+-		dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+-		dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+-		weekHeader: 'Uge',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['da']);
+-});
+-
+-/* German initialisation for the jQuery UI date picker plugin. */
+-/* Written by Milian Wolff (mail@milianw.de). */
+-jQuery(function($){
+-	$.datepicker.regional['de'] = {
+-		closeText: 'Schließen',
+-		prevText: '&#x3C;Zurück',
+-		nextText: 'Vor&#x3E;',
+-		currentText: 'Heute',
+-		monthNames: ['Januar','Februar','März','April','Mai','Juni',
+-		'Juli','August','September','Oktober','November','Dezember'],
+-		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Dez'],
+-		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+-		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+-		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+-		weekHeader: 'KW',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['de']);
+-});
+-
+-/* Greek (el) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Alex Cicovic (http://www.alexcicovic.com) */
+-jQuery(function($){
+-	$.datepicker.regional['el'] = {
+-		closeText: 'Κλείσιμο',
+-		prevText: 'Προηγούμενος',
+-		nextText: 'Επόμενος',
+-		currentText: 'Τρέχων Μήνας',
+-		monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
+-		'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
+-		monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
+-		'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'],
+-		dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'],
+-		dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'],
+-		dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'],
+-		weekHeader: 'Εβδ',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['el']);
+-});
+-
+-/* English/Australia initialisation for the jQuery UI date picker plugin. */
+-/* Based on the en-GB initialisation. */
+-jQuery(function($){
+-	$.datepicker.regional['en-AU'] = {
+-		closeText: 'Done',
+-		prevText: 'Prev',
+-		nextText: 'Next',
+-		currentText: 'Today',
+-		monthNames: ['January','February','March','April','May','June',
+-		'July','August','September','October','November','December'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+-		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+-		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+-		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['en-AU']);
+-});
+-
+-/* English/UK initialisation for the jQuery UI date picker plugin. */
+-/* Written by Stuart. */
+-jQuery(function($){
+-	$.datepicker.regional['en-GB'] = {
+-		closeText: 'Done',
+-		prevText: 'Prev',
+-		nextText: 'Next',
+-		currentText: 'Today',
+-		monthNames: ['January','February','March','April','May','June',
+-		'July','August','September','October','November','December'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+-		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+-		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+-		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['en-GB']);
+-});
+-
+-/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+-/* Based on the en-GB initialisation. */
+-jQuery(function($){
+-	$.datepicker.regional['en-NZ'] = {
+-		closeText: 'Done',
+-		prevText: 'Prev',
+-		nextText: 'Next',
+-		currentText: 'Today',
+-		monthNames: ['January','February','March','April','May','June',
+-		'July','August','September','October','November','December'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+-		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+-		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+-		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+-});
+-
+-/* Esperanto initialisation for the jQuery UI date picker plugin. */
+-/* Written by Olivier M. (olivierweb@ifrance.com). */
+-jQuery(function($){
+-	$.datepicker.regional['eo'] = {
+-		closeText: 'Fermi',
+-		prevText: '&#x3C;Anta',
+-		nextText: 'Sekv&#x3E;',
+-		currentText: 'Nuna',
+-		monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+-		'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Aŭg','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+-		dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'],
+-		dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'],
+-		weekHeader: 'Sb',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['eo']);
+-});
+-
+-/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
+-/* Traducido por Vester (xvester@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['es'] = {
+-		closeText: 'Cerrar',
+-		prevText: '&#x3C;Ant',
+-		nextText: 'Sig&#x3E;',
+-		currentText: 'Hoy',
+-		monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+-		'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+-		monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+-		'Jul','Ago','Sep','Oct','Nov','Dic'],
+-		dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
+-		dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
+-		dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['es']);
+-});
+-
+-/* Estonian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+-jQuery(function($){
+-	$.datepicker.regional['et'] = {
+-		closeText: 'Sulge',
+-		prevText: 'Eelnev',
+-		nextText: 'Järgnev',
+-		currentText: 'Täna',
+-		monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+-		'Juuli','August','September','Oktoober','November','Detsember'],
+-		monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+-		'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+-		dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+-		dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+-		dayNamesMin: ['P','E','T','K','N','R','L'],
+-		weekHeader: 'näd',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['et']);
+-});
+-
+-/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
+-/* Karrikas-ek itzulia (karrikas@karrikas.com) */
+-jQuery(function($){
+-	$.datepicker.regional['eu'] = {
+-		closeText: 'Egina',
+-		prevText: '&#x3C;Aur',
+-		nextText: 'Hur&#x3E;',
+-		currentText: 'Gaur',
+-		monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
+-			'uztaila','abuztua','iraila','urria','azaroa','abendua'],
+-		monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.',
+-			'uzt.','abu.','ira.','urr.','aza.','abe.'],
+-		dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'],
+-		dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'],
+-		dayNamesMin: ['ig','al','ar','az','og','ol','lr'],
+-		weekHeader: 'As',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['eu']);
+-});
+-
+-/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
+-/* Javad Mowlanezhad -- jmowla@gmail.com */
+-/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
+-jQuery(function($) {
+-	$.datepicker.regional['fa'] = {
+-		closeText: 'بستن',
+-		prevText: '&#x3C;قبلی',
+-		nextText: 'بعدی&#x3E;',
+-		currentText: 'امروز',
+-		monthNames: [
+-			'فروردين',
+-			'ارديبهشت',
+-			'خرداد',
+-			'تير',
+-			'مرداد',
+-			'شهريور',
+-			'مهر',
+-			'آبان',
+-			'آذر',
+-			'دی',
+-			'بهمن',
+-			'اسفند'
+-		],
+-		monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+-		dayNames: [
+-			'يکشنبه',
+-			'دوشنبه',
+-			'سه‌شنبه',
+-			'چهارشنبه',
+-			'پنجشنبه',
+-			'جمعه',
+-			'شنبه'
+-		],
+-		dayNamesShort: [
+-			'ی',
+-			'د',
+-			'س',
+-			'چ',
+-			'پ',
+-			'ج',
+-			'ش'
+-		],
+-		dayNamesMin: [
+-			'ی',
+-			'د',
+-			'س',
+-			'چ',
+-			'پ',
+-			'ج',
+-			'ش'
+-		],
+-		weekHeader: 'هف',
+-		dateFormat: 'yy/mm/dd',
+-		firstDay: 6,
+-		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fa']);
+-});
+-
+-/* Finnish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['fi'] = {
+-		closeText: 'Sulje',
+-		prevText: '&#xAB;Edellinen',
+-		nextText: 'Seuraava&#xBB;',
+-		currentText: 'Tänään',
+-		monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu',
+-		'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+-		monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä',
+-		'Heinä','Elo','Syys','Loka','Marras','Joulu'],
+-		dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
+-		dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+-		dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+-		weekHeader: 'Vk',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fi']);
+-});
+-
+-/* Faroese initialisation for the jQuery UI date picker plugin */
+-/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+-jQuery(function($){
+-	$.datepicker.regional['fo'] = {
+-		closeText: 'Lat aftur',
+-		prevText: '&#x3C;Fyrra',
+-		nextText: 'Næsta&#x3E;',
+-		currentText: 'Í dag',
+-		monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+-		'Juli','August','September','Oktober','November','Desember'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Des'],
+-		dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+-		dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+-		dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+-		weekHeader: 'Vk',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fo']);
+-});
+-
+-/* Canadian-French initialisation for the jQuery UI date picker plugin. */
+-jQuery(function ($) {
+-	$.datepicker.regional['fr-CA'] = {
+-		closeText: 'Fermer',
+-		prevText: 'Précédent',
+-		nextText: 'Suivant',
+-		currentText: 'Aujourd\'hui',
+-		monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
+-			'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
+-		monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin',
+-			'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
+-		dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
+-		dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
+-		dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
+-		weekHeader: 'Sem.',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['fr-CA']);
+-});
+-
+-/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+-/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+-jQuery(function($){
+-	$.datepicker.regional['fr-CH'] = {
+-		closeText: 'Fermer',
+-		prevText: '&#x3C;Préc',
+-		nextText: 'Suiv&#x3E;',
+-		currentText: 'Courant',
+-		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+-		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+-		monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+-		'Jul','Aoû','Sep','Oct','Nov','Déc'],
+-		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+-		dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+-		dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+-});
+-
+-/* French initialisation for the jQuery UI date picker plugin. */
+-/* Written by Keith Wood (kbwood{at}iinet.com.au),
+-			  Stéphane Nahmani (sholby@sholby.net),
+-			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
+-jQuery(function($){
+-	$.datepicker.regional['fr'] = {
+-		closeText: 'Fermer',
+-		prevText: 'Précédent',
+-		nextText: 'Suivant',
+-		currentText: 'Aujourd\'hui',
+-		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+-		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+-		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+-		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+-		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+-		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+-		dayNamesMin: ['D','L','M','M','J','V','S'],
+-		weekHeader: 'Sem.',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fr']);
+-});
+-
+-/* Galician localization for 'UI date picker' jQuery extension. */
+-/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
+-jQuery(function($){
+-	$.datepicker.regional['gl'] = {
+-		closeText: 'Pechar',
+-		prevText: '&#x3C;Ant',
+-		nextText: 'Seg&#x3E;',
+-		currentText: 'Hoxe',
+-		monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+-		'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+-		monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+-		'Xul','Ago','Set','Out','Nov','Dec'],
+-		dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'],
+-		dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'],
+-		dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['gl']);
+-});
+-
+-/* Hebrew initialisation for the UI Datepicker extension. */
+-/* Written by Amir Hardon (ahardon at gmail dot com). */
+-jQuery(function($){
+-	$.datepicker.regional['he'] = {
+-		closeText: 'סגור',
+-		prevText: '&#x3C;הקודם',
+-		nextText: 'הבא&#x3E;',
+-		currentText: 'היום',
+-		monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני',
+-		'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'],
+-		monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני',
+-		'יולי','אוג','ספט','אוק','נוב','דצמ'],
+-		dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+-		dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+-		dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['he']);
+-});
+-
+-/* Hindi initialisation for the jQuery UI date picker plugin. */
+-/* Written by Michael Dawart. */
+-jQuery(function($){
+-	$.datepicker.regional['hi'] = {
+-		closeText: 'बंद',
+-		prevText: 'पिछला',
+-		nextText: 'अगला',
+-		currentText: 'आज',
+-		monthNames: ['जनवरी ','फरवरी','मार्च','अप्रेल','मई','जून',
+-		'जूलाई','अगस्त ','सितम्बर','अक्टूबर','नवम्बर','दिसम्बर'],
+-		monthNamesShort: ['जन', 'फर', 'मार्च', 'अप्रेल', 'मई', 'जून',
+-		'जूलाई', 'अग', 'सित', 'अक्ट', 'नव', 'दि'],
+-		dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],
+-		dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
+-		dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
+-		weekHeader: 'हफ्ता',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['hi']);
+-});
+-
+-/* Croatian i18n for the jQuery UI date picker plugin. */
+-/* Written by Vjekoslav Nesek. */
+-jQuery(function($){
+-	$.datepicker.regional['hr'] = {
+-		closeText: 'Zatvori',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Danas',
+-		monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
+-		'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+-		monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+-		'Srp','Kol','Ruj','Lis','Stu','Pro'],
+-		dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+-		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+-		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+-		weekHeader: 'Tje',
+-		dateFormat: 'dd.mm.yy.',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['hr']);
+-});
+-
+-/* Hungarian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
+-jQuery(function($){
+-	$.datepicker.regional['hu'] = {
+-		closeText: 'bezár',
+-		prevText: 'vissza',
+-		nextText: 'előre',
+-		currentText: 'ma',
+-		monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június',
+-		'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+-		monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún',
+-		'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+-		dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+-		dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+-		dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+-		weekHeader: 'Hét',
+-		dateFormat: 'yy.mm.dd.',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['hu']);
+-});
+-
+-/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
+-jQuery(function($){
+-	$.datepicker.regional['hy'] = {
+-		closeText: 'Փակել',
+-		prevText: '&#x3C;Նախ.',
+-		nextText: 'Հաջ.&#x3E;',
+-		currentText: 'Այսօր',
+-		monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս',
+-		'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'],
+-		monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս',
+-		'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'],
+-		dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'],
+-		dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+-		dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'],
+-		weekHeader: 'ՇԲՏ',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['hy']);
+-});
+-
+-/* Indonesian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Deden Fathurahman (dedenf@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['id'] = {
+-		closeText: 'Tutup',
+-		prevText: '&#x3C;mundur',
+-		nextText: 'maju&#x3E;',
+-		currentText: 'hari ini',
+-		monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+-		'Juli','Agustus','September','Oktober','Nopember','Desember'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+-		'Jul','Agus','Sep','Okt','Nop','Des'],
+-		dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+-		dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+-		dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+-		weekHeader: 'Mg',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['id']);
+-});
+-
+-/* Icelandic initialisation for the jQuery UI date picker plugin. */
+-/* Written by Haukur H. Thorsson (haukur@eskill.is). */
+-jQuery(function($){
+-	$.datepicker.regional['is'] = {
+-		closeText: 'Loka',
+-		prevText: '&#x3C; Fyrri',
+-		nextText: 'Næsti &#x3E;',
+-		currentText: 'Í dag',
+-		monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní',
+-		'Júlí','Ágúst','September','Október','Nóvember','Desember'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún',
+-		'Júl','Ágú','Sep','Okt','Nóv','Des'],
+-		dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'],
+-		dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'],
+-		dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'],
+-		weekHeader: 'Vika',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['is']);
+-});
+-
+-/* Italian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['it'] = {
+-		closeText: 'Chiudi',
+-		prevText: '&#x3C;Prec',
+-		nextText: 'Succ&#x3E;',
+-		currentText: 'Oggi',
+-		monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+-			'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+-		monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+-			'Lug','Ago','Set','Ott','Nov','Dic'],
+-		dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'],
+-		dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+-		dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['it']);
+-});
+-
+-/* Japanese initialisation for the jQuery UI date picker plugin. */
+-/* Written by Kentaro SATO (kentaro@ranvis.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ja'] = {
+-		closeText: '閉じる',
+-		prevText: '&#x3C;前',
+-		nextText: '次&#x3E;',
+-		currentText: '今日',
+-		monthNames: ['1月','2月','3月','4月','5月','6月',
+-		'7月','8月','9月','10月','11月','12月'],
+-		monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+-		'7月','8月','9月','10月','11月','12月'],
+-		dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
+-		dayNamesShort: ['日','月','火','水','木','金','土'],
+-		dayNamesMin: ['日','月','火','水','木','金','土'],
+-		weekHeader: '週',
+-		dateFormat: 'yy/mm/dd',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['ja']);
+-});
+-
+-/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ka'] = {
+-		closeText: 'დახურვა',
+-		prevText: '&#x3c; წინა',
+-		nextText: 'შემდეგი &#x3e;',
+-		currentText: 'დღეს',
+-		monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი', 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'],
+-		monthNamesShort: ['იან','თებ','მარ','აპრ','მაი','ივნ', 'ივლ','აგვ','სექ','ოქტ','ნოე','დეკ'],
+-		dayNames: ['კვირა','ორშაბათი','სამშაბათი','ოთხშაბათი','ხუთშაბათი','პარასკევი','შაბათი'],
+-		dayNamesShort: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'],
+-		dayNamesMin: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'],
+-		weekHeader: 'კვირა',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ka']);
+-});
+-
+-/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['kk'] = {
+-		closeText: 'Жабу',
+-		prevText: '&#x3C;Алдыңғы',
+-		nextText: 'Келесі&#x3E;',
+-		currentText: 'Бүгін',
+-		monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым',
+-		'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'],
+-		monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау',
+-		'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+-		dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'],
+-		dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'],
+-		dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'],
+-		weekHeader: 'Не',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['kk']);
+-});
+-
+-/* Khmer initialisation for the jQuery calendar extension. */
+-/* Written by Chandara Om (chandara.teacher@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['km'] = {
+-		closeText: 'ធ្វើ​រួច',
+-		prevText: 'មុន',
+-		nextText: 'បន្ទាប់',
+-		currentText: 'ថ្ងៃ​នេះ',
+-		monthNames: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា',
+-		'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'],
+-		monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា',
+-		'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'],
+-		dayNames: ['អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍'],
+-		dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+-		dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+-		weekHeader: 'សប្ដាហ៍',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['km']);
+-});
+-
+-/* Korean initialisation for the jQuery calendar extension. */
+-/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
+-jQuery(function($){
+-	$.datepicker.regional['ko'] = {
+-		closeText: '닫기',
+-		prevText: '이전달',
+-		nextText: '다음달',
+-		currentText: '오늘',
+-		monthNames: ['1월','2월','3월','4월','5월','6월',
+-		'7월','8월','9월','10월','11월','12월'],
+-		monthNamesShort: ['1월','2월','3월','4월','5월','6월',
+-		'7월','8월','9월','10월','11월','12월'],
+-		dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'],
+-		dayNamesShort: ['일','월','화','수','목','금','토'],
+-		dayNamesMin: ['일','월','화','수','목','금','토'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '년'};
+-	$.datepicker.setDefaults($.datepicker.regional['ko']);
+-});
+-
+-/* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Sergey Kartashov (ebishkek@yandex.ru). */
+-jQuery(function($){
+-	$.datepicker.regional['ky'] = {
+-		closeText: 'Жабуу',
+-		prevText: '&#x3c;Мур',
+-		nextText: 'Кий&#x3e;',
+-		currentText: 'Бүгүн',
+-		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
+-		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+-		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+-		'Июл','Авг','Сен','Окт','Ноя','Дек'],
+-		dayNames: ['жекшемби', 'дүйшөмбү', 'шейшемби', 'шаршемби', 'бейшемби', 'жума', 'ишемби'],
+-		dayNamesShort: ['жек', 'дүй', 'шей', 'шар', 'бей', 'жум', 'ише'],
+-		dayNamesMin: ['Жк','Дш','Шш','Шр','Бш','Жм','Иш'],
+-		weekHeader: 'Жум',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['ky']);
+-});
+-
+-/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
+-jQuery(function($){
+-	$.datepicker.regional['lb'] = {
+-		closeText: 'Fäerdeg',
+-		prevText: 'Zréck',
+-		nextText: 'Weider',
+-		currentText: 'Haut',
+-		monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
+-		'Juli','August','September','Oktober','November','Dezember'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
+-		dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
+-		dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
+-		dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
+-		weekHeader: 'W',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['lb']);
+-});
+-
+-/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* @author Arturas Paleicikas <arturas@avalon.lt> */
+-jQuery(function($){
+-	$.datepicker.regional['lt'] = {
+-		closeText: 'Uždaryti',
+-		prevText: '&#x3C;Atgal',
+-		nextText: 'Pirmyn&#x3E;',
+-		currentText: 'Šiandien',
+-		monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+-		'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+-		monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+-		'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+-		dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'],
+-		dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+-		dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['lt']);
+-});
+-
+-/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
+-jQuery(function($){
+-	$.datepicker.regional['lv'] = {
+-		closeText: 'Aizvērt',
+-		prevText: 'Iepr',
+-		nextText: 'Nāka',
+-		currentText: 'Šodien',
+-		monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
+-		'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
+-		'Jūl','Aug','Sep','Okt','Nov','Dec'],
+-		dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+-		dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+-		dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+-		weekHeader: 'Nav',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['lv']);
+-});
+-
+-/* Macedonian i18n for the jQuery UI date picker plugin. */
+-/* Written by Stojce Slavkovski. */
+-jQuery(function($){
+-	$.datepicker.regional['mk'] = {
+-		closeText: 'Затвори',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Денес',
+-		monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни',
+-		'Јули','Август','Септември','Октомври','Ноември','Декември'],
+-		monthNamesShort: ['Јан','Фев','Мар','Апр','Мај','Јун',
+-		'Јул','Авг','Сеп','Окт','Ное','Дек'],
+-		dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
+-		dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'],
+-		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'],
+-		weekHeader: 'Сед',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['mk']);
+-});
+-
+-/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Saji Nediyanchath (saji89@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ml'] = {
+-		closeText: 'ശരി',
+-		prevText: 'മുന്നത്തെ',
+-		nextText: 'അടുത്തത് ',
+-		currentText: 'ഇന്ന്',
+-		monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍',
+-		'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'],
+-		monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍',
+-		'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'],
+-		dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+-		dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],
+-		dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'],
+-		weekHeader: 'ആ',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ml']);
+-});
+-
+-/* Malaysian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+-jQuery(function($){
+-	$.datepicker.regional['ms'] = {
+-		closeText: 'Tutup',
+-		prevText: '&#x3C;Sebelum',
+-		nextText: 'Selepas&#x3E;',
+-		currentText: 'hari ini',
+-		monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+-		'Julai','Ogos','September','Oktober','November','Disember'],
+-		monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+-		'Jul','Ogo','Sep','Okt','Nov','Dis'],
+-		dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+-		dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
+-		dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+-		weekHeader: 'Mg',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ms']);
+-});
+-
+-/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */
+-/* Written by Bjørn Johansen (post@bjornjohansen.no). */
+-jQuery(function($){
+-	$.datepicker.regional['nb'] = {
+-		closeText: 'Lukk',
+-		prevText: '&#xAB;Forrige',
+-		nextText: 'Neste&#xBB;',
+-		currentText: 'I dag',
+-		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+-		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+-		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+-		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+-		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+-		weekHeader: 'Uke',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['nb']);
+-});
+-
+-/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
+-/* David De Sloovere @DavidDeSloovere */
+-jQuery(function($){
+-	$.datepicker.regional['nl-BE'] = {
+-		closeText: 'Sluiten',
+-		prevText: '←',
+-		nextText: '→',
+-		currentText: 'Vandaag',
+-		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+-		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+-		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+-		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+-		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+-		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+-		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['nl-BE']);
+-});
+-
+-/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Mathias Bynens <http://mathiasbynens.be/> */
+-jQuery(function($){
+-	$.datepicker.regional.nl = {
+-		closeText: 'Sluiten',
+-		prevText: '←',
+-		nextText: '→',
+-		currentText: 'Vandaag',
+-		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+-		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+-		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+-		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+-		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+-		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+-		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional.nl);
+-});
+-
+-/* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */
+-/* Written by Bjørn Johansen (post@bjornjohansen.no). */
+-jQuery(function($){
+-	$.datepicker.regional['nn'] = {
+-		closeText: 'Lukk',
+-		prevText: '&#xAB;Førre',
+-		nextText: 'Neste&#xBB;',
+-		currentText: 'I dag',
+-		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+-		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+-		dayNamesShort: ['sun','mån','tys','ons','tor','fre','lau'],
+-		dayNames: ['sundag','måndag','tysdag','onsdag','torsdag','fredag','laurdag'],
+-		dayNamesMin: ['su','må','ty','on','to','fr','la'],
+-		weekHeader: 'Veke',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['nn']);
+-});
+-
+-/* Norwegian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+-
+-jQuery(function($){
+-	$.datepicker.regional['no'] = {
+-		closeText: 'Lukk',
+-		prevText: '&#xAB;Forrige',
+-		nextText: 'Neste&#xBB;',
+-		currentText: 'I dag',
+-		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+-		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+-		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+-		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+-		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+-		weekHeader: 'Uke',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['no']);
+-});
+-
+-/* Polish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['pl'] = {
+-		closeText: 'Zamknij',
+-		prevText: '&#x3C;Poprzedni',
+-		nextText: 'Następny&#x3E;',
+-		currentText: 'Dziś',
+-		monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+-		'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+-		monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+-		'Lip','Sie','Wrz','Pa','Lis','Gru'],
+-		dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+-		dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'],
+-		dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'],
+-		weekHeader: 'Tydz',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['pl']);
+-});
+-
+-/* Brazilian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['pt-BR'] = {
+-		closeText: 'Fechar',
+-		prevText: '&#x3C;Anterior',
+-		nextText: 'Próximo&#x3E;',
+-		currentText: 'Hoje',
+-		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+-		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+-		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+-		'Jul','Ago','Set','Out','Nov','Dez'],
+-		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+-		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+-		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['pt-BR']);
+-});
+-
+-/* Portuguese initialisation for the jQuery UI date picker plugin. */
+-jQuery(function($){
+-	$.datepicker.regional['pt'] = {
+-		closeText: 'Fechar',
+-		prevText: '&#x3C;Anterior',
+-		nextText: 'Seguinte',
+-		currentText: 'Hoje',
+-		monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho',
+-		'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+-		monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+-		'Jul','Ago','Set','Out','Nov','Dez'],
+-		dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],
+-		dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+-		dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
+-		weekHeader: 'Sem',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['pt']);
+-});
+-
+-/* Romansh initialisation for the jQuery UI date picker plugin. */
+-/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
+-jQuery(function($){
+-	$.datepicker.regional['rm'] = {
+-		closeText: 'Serrar',
+-		prevText: '&#x3C;Suandant',
+-		nextText: 'Precedent&#x3E;',
+-		currentText: 'Actual',
+-		monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
+-		monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
+-		dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
+-		dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
+-		dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
+-		weekHeader: 'emna',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['rm']);
+-});
+-
+-/* Romanian initialisation for the jQuery UI date picker plugin.
+- *
+- * Written by Edmond L. (ll_edmond@walla.com)
+- * and Ionut G. Stan (ionut.g.stan@gmail.com)
+- */
+-jQuery(function($){
+-	$.datepicker.regional['ro'] = {
+-		closeText: 'Închide',
+-		prevText: '&#xAB; Luna precedentă',
+-		nextText: 'Luna următoare &#xBB;',
+-		currentText: 'Azi',
+-		monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+-		'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+-		monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+-		'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+-		dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+-		dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+-		dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+-		weekHeader: 'Săpt',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ro']);
+-});
+-
+-/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Andrew Stromnov (stromnov@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ru'] = {
+-		closeText: 'Закрыть',
+-		prevText: '&#x3C;Пред',
+-		nextText: 'След&#x3E;',
+-		currentText: 'Сегодня',
+-		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
+-		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
+-		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+-		'Июл','Авг','Сен','Окт','Ноя','Дек'],
+-		dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
+-		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
+-		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
+-		weekHeader: 'Нед',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ru']);
+-});
+-
+-/* Slovak initialisation for the jQuery UI date picker plugin. */
+-/* Written by Vojtech Rinik (vojto@hmm.sk). */
+-jQuery(function($){
+-	$.datepicker.regional['sk'] = {
+-		closeText: 'Zavrieť',
+-		prevText: '&#x3C;Predchádzajúci',
+-		nextText: 'Nasledujúci&#x3E;',
+-		currentText: 'Dnes',
+-		monthNames: ['január','február','marec','apríl','máj','jún',
+-		'júl','august','september','október','november','december'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+-		'Júl','Aug','Sep','Okt','Nov','Dec'],
+-		dayNames: ['nedeľa','pondelok','utorok','streda','štvrtok','piatok','sobota'],
+-		dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
+-		dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
+-		weekHeader: 'Ty',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sk']);
+-});
+-
+-/* Slovenian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Jaka Jancar (jaka@kubje.org). */
+-/* c = č, s = š z = ž C = Č S = Š Z = Ž */
+-jQuery(function($){
+-	$.datepicker.regional['sl'] = {
+-		closeText: 'Zapri',
+-		prevText: '&#x3C;Prejšnji',
+-		nextText: 'Naslednji&#x3E;',
+-		currentText: 'Trenutni',
+-		monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+-		'Julij','Avgust','September','Oktober','November','December'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Avg','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'],
+-		dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'],
+-		dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'],
+-		weekHeader: 'Teden',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sl']);
+-});
+-
+-/* Albanian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Flakron Bytyqi (flakron@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['sq'] = {
+-		closeText: 'mbylle',
+-		prevText: '&#x3C;mbrapa',
+-		nextText: 'Përpara&#x3E;',
+-		currentText: 'sot',
+-		monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+-		'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+-		monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+-		'Kor','Gus','Sht','Tet','Nën','Dhj'],
+-		dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+-		dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+-		dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+-		weekHeader: 'Ja',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sq']);
+-});
+-
+-/* Serbian i18n for the jQuery UI date picker plugin. */
+-/* Written by Dejan Dimić. */
+-jQuery(function($){
+-	$.datepicker.regional['sr-SR'] = {
+-		closeText: 'Zatvori',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Danas',
+-		monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+-		'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Avg','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
+-		dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
+-		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+-		weekHeader: 'Sed',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sr-SR']);
+-});
+-
+-/* Serbian i18n for the jQuery UI date picker plugin. */
+-/* Written by Dejan Dimić. */
+-jQuery(function($){
+-	$.datepicker.regional['sr'] = {
+-		closeText: 'Затвори',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Данас',
+-		monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
+-		'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
+-		monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
+-		'Јул','Авг','Сеп','Окт','Нов','Дец'],
+-		dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+-		dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
+-		dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
+-		weekHeader: 'Сед',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sr']);
+-});
+-
+-/* Swedish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Anders Ekdahl ( anders@nomadiz.se). */
+-jQuery(function($){
+-	$.datepicker.regional['sv'] = {
+-		closeText: 'Stäng',
+-		prevText: '&#xAB;Förra',
+-		nextText: 'Nästa&#xBB;',
+-		currentText: 'Idag',
+-		monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+-		'Juli','Augusti','September','Oktober','November','December'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Dec'],
+-		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+-		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+-		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+-		weekHeader: 'Ve',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sv']);
+-});
+-
+-/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by S A Sureshkumar (saskumar@live.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ta'] = {
+-		closeText: 'மூடு',
+-		prevText: 'முன்னையது',
+-		nextText: 'அடுத்தது',
+-		currentText: 'இன்று',
+-		monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி',
+-		'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'],
+-		monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி',
+-		'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'],
+-		dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'],
+-		dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'],
+-		dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'],
+-		weekHeader: 'Не',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ta']);
+-});
+-
+-/* Thai initialisation for the jQuery UI date picker plugin. */
+-/* Written by pipo (pipo@sixhead.com). */
+-jQuery(function($){
+-	$.datepicker.regional['th'] = {
+-		closeText: 'ปิด',
+-		prevText: '&#xAB;&#xA0;ย้อน',
+-		nextText: 'ถัดไป&#xA0;&#xBB;',
+-		currentText: 'วันนี้',
+-		monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+-		'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
+-		monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+-		'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+-		dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'],
+-		dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+-		dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['th']);
+-});
+-
+-/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['tj'] = {
+-		closeText: 'Идома',
+-		prevText: '&#x3c;Қафо',
+-		nextText: 'Пеш&#x3e;',
+-		currentText: 'Имрӯз',
+-		monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн',
+-		'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'],
+-		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+-		'Июл','Авг','Сен','Окт','Ноя','Дек'],
+-		dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
+-		dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'],
+-		dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
+-		weekHeader: 'Хф',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['tj']);
+-});
+-
+-/* Turkish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
+-jQuery(function($){
+-	$.datepicker.regional['tr'] = {
+-		closeText: 'kapat',
+-		prevText: '&#x3C;geri',
+-		nextText: 'ileri&#x3e',
+-		currentText: 'bugün',
+-		monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+-		'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+-		monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
+-		'Tem','Ağu','Eyl','Eki','Kas','Ara'],
+-		dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+-		dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+-		dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+-		weekHeader: 'Hf',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['tr']);
+-});
+-
+-/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+-/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['uk'] = {
+-		closeText: 'Закрити',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Сьогодні',
+-		monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+-		'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
+-		monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+-		'Лип','Сер','Вер','Жов','Лис','Гру'],
+-		dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
+-		dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
+-		dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
+-		weekHeader: 'Тиж',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['uk']);
+-});
+-
+-/* Vietnamese initialisation for the jQuery UI date picker plugin. */
+-/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+-jQuery(function($){
+-	$.datepicker.regional['vi'] = {
+-		closeText: 'Đóng',
+-		prevText: '&#x3C;Trước',
+-		nextText: 'Tiếp&#x3E;',
+-		currentText: 'Hôm nay',
+-		monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+-		'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'],
+-		monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+-		'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+-		dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+-		dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+-		dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+-		weekHeader: 'Tu',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['vi']);
+-});
+-
+-/* Chinese initialisation for the jQuery UI date picker plugin. */
+-/* Written by Cloudream (cloudream@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['zh-CN'] = {
+-		closeText: '关闭',
+-		prevText: '&#x3C;上月',
+-		nextText: '下月&#x3E;',
+-		currentText: '今天',
+-		monthNames: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+-		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+-		dayNamesMin: ['日','一','二','三','四','五','六'],
+-		weekHeader: '周',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+-});
+-
+-/* Chinese initialisation for the jQuery UI date picker plugin. */
+-/* Written by SCCY (samuelcychan@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['zh-HK'] = {
+-		closeText: '關閉',
+-		prevText: '&#x3C;上月',
+-		nextText: '下月&#x3E;',
+-		currentText: '今天',
+-		monthNames: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+-		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+-		dayNamesMin: ['日','一','二','三','四','五','六'],
+-		weekHeader: '周',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['zh-HK']);
+-});
+-
+-/* Chinese initialisation for the jQuery UI date picker plugin. */
+-/* Written by Ressol (ressol@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['zh-TW'] = {
+-		closeText: '關閉',
+-		prevText: '&#x3C;上月',
+-		nextText: '下月&#x3E;',
+-		currentText: '今天',
+-		monthNames: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+-		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+-		dayNamesMin: ['日','一','二','三','四','五','六'],
+-		weekHeader: '周',
+-		dateFormat: 'yy/mm/dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bs.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bs.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bs.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Bosnian i18n for the jQuery UI date picker plugin. */
+-/* Written by Kenan Konjo. */
+-jQuery(function($){
+-	$.datepicker.regional['bs'] = {
+-		closeText: 'Zatvori',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Danas',
+-		monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+-		'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+-		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+-		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['bs']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fo.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fo.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fo.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Faroese initialisation for the jQuery UI date picker plugin */
+-/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+-jQuery(function($){
+-	$.datepicker.regional['fo'] = {
+-		closeText: 'Lat aftur',
+-		prevText: '&#x3C;Fyrra',
+-		nextText: 'Næsta&#x3E;',
+-		currentText: 'Í dag',
+-		monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+-		'Juli','August','September','Oktober','November','Desember'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Des'],
+-		dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+-		dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+-		dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+-		weekHeader: 'Vk',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fo']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-kk.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-kk.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-kk.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['kk'] = {
+-		closeText: 'Жабу',
+-		prevText: '&#x3C;Алдыңғы',
+-		nextText: 'Келесі&#x3E;',
+-		currentText: 'Бүгін',
+-		monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым',
+-		'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'],
+-		monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау',
+-		'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+-		dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'],
+-		dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'],
+-		dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'],
+-		weekHeader: 'Не',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['kk']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cs.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cs.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cs.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Czech initialisation for the jQuery UI date picker plugin. */
+-/* Written by Tomas Muller (tomas@tomas-muller.net). */
+-jQuery(function($){
+-	$.datepicker.regional['cs'] = {
+-		closeText: 'Zavřít',
+-		prevText: '&#x3C;Dříve',
+-		nextText: 'Později&#x3E;',
+-		currentText: 'Nyní',
+-		monthNames: ['leden','únor','březen','duben','květen','červen',
+-		'červenec','srpen','září','říjen','listopad','prosinec'],
+-		monthNamesShort: ['led','úno','bře','dub','kvě','čer',
+-		'čvc','srp','zář','říj','lis','pro'],
+-		dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
+-		dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
+-		dayNamesMin: ['ne','po','út','st','čt','pá','so'],
+-		weekHeader: 'Týd',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['cs']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr-SR.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr-SR.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr-SR.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Serbian i18n for the jQuery UI date picker plugin. */
+-/* Written by Dejan Dimić. */
+-jQuery(function($){
+-	$.datepicker.regional['sr-SR'] = {
+-		closeText: 'Zatvori',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Danas',
+-		monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+-		'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Avg','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'],
+-		dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'],
+-		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+-		weekHeader: 'Sed',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sr-SR']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-mk.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-mk.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-mk.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Macedonian i18n for the jQuery UI date picker plugin. */
+-/* Written by Stojce Slavkovski. */
+-jQuery(function($){
+-	$.datepicker.regional['mk'] = {
+-		closeText: 'Затвори',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Денес',
+-		monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни',
+-		'Јули','Август','Септември','Октомври','Ноември','Декември'],
+-		monthNamesShort: ['Јан','Фев','Мар','Апр','Мај','Јун',
+-		'Јул','Авг','Сеп','Окт','Ное','Дек'],
+-		dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
+-		dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'],
+-		dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'],
+-		weekHeader: 'Сед',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['mk']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-es.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-es.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-es.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
+-/* Traducido por Vester (xvester@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['es'] = {
+-		closeText: 'Cerrar',
+-		prevText: '&#x3C;Ant',
+-		nextText: 'Sig&#x3E;',
+-		currentText: 'Hoy',
+-		monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+-		'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+-		monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+-		'Jul','Ago','Sep','Oct','Nov','Dic'],
+-		dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
+-		dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
+-		dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
+-		weekHeader: 'Sm',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['es']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-TW.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-TW.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-TW.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Chinese initialisation for the jQuery UI date picker plugin. */
+-/* Written by Ressol (ressol@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['zh-TW'] = {
+-		closeText: '關閉',
+-		prevText: '&#x3C;上月',
+-		nextText: '下月&#x3E;',
+-		currentText: '今天',
+-		monthNames: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+-		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+-		dayNamesMin: ['日','一','二','三','四','五','六'],
+-		weekHeader: '周',
+-		dateFormat: 'yy/mm/dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ko.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ko.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ko.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Korean initialisation for the jQuery calendar extension. */
+-/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
+-jQuery(function($){
+-	$.datepicker.regional['ko'] = {
+-		closeText: '닫기',
+-		prevText: '이전달',
+-		nextText: '다음달',
+-		currentText: '오늘',
+-		monthNames: ['1월','2월','3월','4월','5월','6월',
+-		'7월','8월','9월','10월','11월','12월'],
+-		monthNamesShort: ['1월','2월','3월','4월','5월','6월',
+-		'7월','8월','9월','10월','11월','12월'],
+-		dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'],
+-		dayNamesShort: ['일','월','화','수','목','금','토'],
+-		dayNamesMin: ['일','월','화','수','목','금','토'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '년'};
+-	$.datepicker.setDefaults($.datepicker.regional['ko']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-is.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-is.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-is.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Icelandic initialisation for the jQuery UI date picker plugin. */
+-/* Written by Haukur H. Thorsson (haukur@eskill.is). */
+-jQuery(function($){
+-	$.datepicker.regional['is'] = {
+-		closeText: 'Loka',
+-		prevText: '&#x3C; Fyrri',
+-		nextText: 'Næsti &#x3E;',
+-		currentText: 'Í dag',
+-		monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní',
+-		'Júlí','Ágúst','September','Október','Nóvember','Desember'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún',
+-		'Júl','Ágú','Sep','Okt','Nóv','Des'],
+-		dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'],
+-		dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'],
+-		dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'],
+-		weekHeader: 'Vika',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['is']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-no.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-no.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-no.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Norwegian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+-
+-jQuery(function($){
+-	$.datepicker.regional['no'] = {
+-		closeText: 'Lukk',
+-		prevText: '&#xAB;Forrige',
+-		nextText: 'Neste&#xBB;',
+-		currentText: 'I dag',
+-		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+-		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+-		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+-		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+-		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+-		weekHeader: 'Uke',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['no']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sk.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sk.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sk.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Slovak initialisation for the jQuery UI date picker plugin. */
+-/* Written by Vojtech Rinik (vojto@hmm.sk). */
+-jQuery(function($){
+-	$.datepicker.regional['sk'] = {
+-		closeText: 'Zavrieť',
+-		prevText: '&#x3C;Predchádzajúci',
+-		nextText: 'Nasledujúci&#x3E;',
+-		currentText: 'Dnes',
+-		monthNames: ['január','február','marec','apríl','máj','jún',
+-		'júl','august','september','október','november','december'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+-		'Júl','Aug','Sep','Okt','Nov','Dec'],
+-		dayNames: ['nedeľa','pondelok','utorok','streda','štvrtok','piatok','sobota'],
+-		dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'],
+-		dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'],
+-		weekHeader: 'Ty',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sk']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-CN.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-CN.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-CN.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Chinese initialisation for the jQuery UI date picker plugin. */
+-/* Written by Cloudream (cloudream@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['zh-CN'] = {
+-		closeText: '关闭',
+-		prevText: '&#x3C;上月',
+-		nextText: '下月&#x3E;',
+-		currentText: '今天',
+-		monthNames: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		monthNamesShort: ['一月','二月','三月','四月','五月','六月',
+-		'七月','八月','九月','十月','十一月','十二月'],
+-		dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+-		dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+-		dayNamesMin: ['日','一','二','三','四','五','六'],
+-		weekHeader: '周',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: true,
+-		yearSuffix: '年'};
+-	$.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-uk.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-uk.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-uk.js	(revision 15488)
+@@ -1,24 +0,0 @@
+-/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+-/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['uk'] = {
+-		closeText: 'Закрити',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Сьогодні',
+-		monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+-		'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'],
+-		monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+-		'Лип','Сер','Вер','Жов','Лис','Гру'],
+-		dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'],
+-		dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'],
+-		dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'],
+-		weekHeader: 'Тиж',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['uk']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ms.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ms.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ms.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Malaysian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+-jQuery(function($){
+-	$.datepicker.regional['ms'] = {
+-		closeText: 'Tutup',
+-		prevText: '&#x3C;Sebelum',
+-		nextText: 'Selepas&#x3E;',
+-		currentText: 'hari ini',
+-		monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+-		'Julai','Ogos','September','Oktober','November','Disember'],
+-		monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+-		'Jul','Ogo','Sep','Okt','Nov','Dis'],
+-		dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+-		dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
+-		dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+-		weekHeader: 'Mg',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ms']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ro.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ro.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ro.js	(revision 15488)
+@@ -1,26 +0,0 @@
+-/* Romanian initialisation for the jQuery UI date picker plugin.
+- *
+- * Written by Edmond L. (ll_edmond@walla.com)
+- * and Ionut G. Stan (ionut.g.stan@gmail.com)
+- */
+-jQuery(function($){
+-	$.datepicker.regional['ro'] = {
+-		closeText: 'Închide',
+-		prevText: '&#xAB; Luna precedentă',
+-		nextText: 'Luna următoare &#xBB;',
+-		currentText: 'Azi',
+-		monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+-		'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+-		monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+-		'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+-		dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+-		dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+-		dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+-		weekHeader: 'Săpt',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ro']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-af.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-af.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-af.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Afrikaans initialisation for the jQuery UI date picker plugin. */
+-/* Written by Renier Pretorius. */
+-jQuery(function($){
+-	$.datepicker.regional['af'] = {
+-		closeText: 'Selekteer',
+-		prevText: 'Vorige',
+-		nextText: 'Volgende',
+-		currentText: 'Vandag',
+-		monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+-		'Julie','Augustus','September','Oktober','November','Desember'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+-		dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+-		dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+-		dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['af']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CA.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CA.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CA.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Canadian-French initialisation for the jQuery UI date picker plugin. */
+-jQuery(function ($) {
+-	$.datepicker.regional['fr-CA'] = {
+-		closeText: 'Fermer',
+-		prevText: 'Précédent',
+-		nextText: 'Suivant',
+-		currentText: 'Aujourd\'hui',
+-		monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
+-			'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
+-		monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin',
+-			'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
+-		dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
+-		dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
+-		dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
+-		weekHeader: 'Sem.',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 0,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['fr-CA']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-GB.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-GB.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-GB.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* English/UK initialisation for the jQuery UI date picker plugin. */
+-/* Written by Stuart. */
+-jQuery(function($){
+-	$.datepicker.regional['en-GB'] = {
+-		closeText: 'Done',
+-		prevText: 'Prev',
+-		nextText: 'Next',
+-		currentText: 'Today',
+-		monthNames: ['January','February','March','April','May','June',
+-		'July','August','September','October','November','December'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+-		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+-		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+-		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['en-GB']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl-BE.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl-BE.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl-BE.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
+-/* David De Sloovere @DavidDeSloovere */
+-jQuery(function($){
+-	$.datepicker.regional['nl-BE'] = {
+-		closeText: 'Sluiten',
+-		prevText: '←',
+-		nextText: '→',
+-		currentText: 'Vandaag',
+-		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+-		'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+-		monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+-		'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+-		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+-		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+-		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['nl-BE']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lb.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lb.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lb.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
+-jQuery(function($){
+-	$.datepicker.regional['lb'] = {
+-		closeText: 'Fäerdeg',
+-		prevText: 'Zréck',
+-		nextText: 'Weider',
+-		currentText: 'Haut',
+-		monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
+-		'Juli','August','September','Oktober','November','Dezember'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
+-		dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
+-		dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
+-		dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
+-		weekHeader: 'W',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['lb']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nb.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nb.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nb.js	(revision 15488)
+@@ -1,22 +0,0 @@
+-/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */
+-/* Written by Bjørn Johansen (post@bjornjohansen.no). */
+-jQuery(function($){
+-	$.datepicker.regional['nb'] = {
+-		closeText: 'Lukk',
+-		prevText: '&#xAB;Forrige',
+-		nextText: 'Neste&#xBB;',
+-		currentText: 'I dag',
+-		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+-		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+-		dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+-		dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+-		dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+-		weekHeader: 'Uke',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['nb']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cy-GB.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cy-GB.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cy-GB.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
+-/* Written by William Griffiths. */
+-jQuery(function($){
+-	$.datepicker.regional['cy-GB'] = {
+-		closeText: 'Done',
+-		prevText: 'Prev',
+-		nextText: 'Next',
+-		currentText: 'Today',
+-		monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
+-		'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
+-		monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
+-		'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
+-		dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
+-		dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+-		dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
+-		weekHeader: 'Wy',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['cy-GB']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Arabic Translation for jQuery UI date picker plugin. */
+-/* Khaled Alhourani -- me@khaledalhourani.com */
+-/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */
+-jQuery(function($){
+-	$.datepicker.regional['ar'] = {
+-		closeText: 'إغلاق',
+-		prevText: '&#x3C;السابق',
+-		nextText: 'التالي&#x3E;',
+-		currentText: 'اليوم',
+-		monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+-		'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+-		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+-		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+-		weekHeader: 'أسبوع',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 6,
+-  		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ar']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr.js	(revision 15488)
+@@ -1,25 +0,0 @@
+-/* French initialisation for the jQuery UI date picker plugin. */
+-/* Written by Keith Wood (kbwood{at}iinet.com.au),
+-			  Stéphane Nahmani (sholby@sholby.net),
+-			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
+-jQuery(function($){
+-	$.datepicker.regional['fr'] = {
+-		closeText: 'Fermer',
+-		prevText: 'Précédent',
+-		nextText: 'Suivant',
+-		currentText: 'Aujourd\'hui',
+-		monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+-		'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+-		monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+-		'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+-		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+-		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+-		dayNamesMin: ['D','L','M','M','J','V','S'],
+-		weekHeader: 'Sem.',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fr']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hr.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hr.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Croatian i18n for the jQuery UI date picker plugin. */
+-/* Written by Vjekoslav Nesek. */
+-jQuery(function($){
+-	$.datepicker.regional['hr'] = {
+-		closeText: 'Zatvori',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Danas',
+-		monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj',
+-		'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+-		monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+-		'Srp','Kol','Ruj','Lis','Stu','Pro'],
+-		dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'],
+-		dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'],
+-		dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'],
+-		weekHeader: 'Tje',
+-		dateFormat: 'dd.mm.yy.',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['hr']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-az.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-az.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-az.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Jamil Najafov (necefov33@gmail.com). */
+-jQuery(function($) {
+-	$.datepicker.regional['az'] = {
+-		closeText: 'Bağla',
+-		prevText: '&#x3C;Geri',
+-		nextText: 'İrəli&#x3E;',
+-		currentText: 'Bugün',
+-		monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun',
+-		'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+-		monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun',
+-		'İyul','Avq','Sen','Okt','Noy','Dek'],
+-		dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+-		dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+-		dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+-		weekHeader: 'Hf',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['az']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nn.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nn.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nn.js	(revision 15488)
+@@ -1,22 +0,0 @@
+-/* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */
+-/* Written by Bjørn Johansen (post@bjornjohansen.no). */
+-jQuery(function($){
+-	$.datepicker.regional['nn'] = {
+-		closeText: 'Lukk',
+-		prevText: '&#xAB;Førre',
+-		nextText: 'Neste&#xBB;',
+-		currentText: 'I dag',
+-		monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+-		monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+-		dayNamesShort: ['sun','mån','tys','ons','tor','fre','lau'],
+-		dayNames: ['sundag','måndag','tysdag','onsdag','torsdag','fredag','laurdag'],
+-		dayNamesMin: ['su','må','ty','on','to','fr','la'],
+-		weekHeader: 'Veke',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''
+-	};
+-	$.datepicker.setDefaults($.datepicker.regional['nn']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar-DZ.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar-DZ.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar-DZ.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+-/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+-
+-jQuery(function($){
+-	$.datepicker.regional['ar-DZ'] = {
+-		closeText: 'إغلاق',
+-		prevText: '&#x3C;السابق',
+-		nextText: 'التالي&#x3E;',
+-		currentText: 'اليوم',
+-		monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان',
+-		'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'],
+-		monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+-		dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+-		weekHeader: 'أسبوع',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 6,
+-  		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tj.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tj.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tj.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['tj'] = {
+-		closeText: 'Идома',
+-		prevText: '&#x3c;Қафо',
+-		nextText: 'Пеш&#x3e;',
+-		currentText: 'Имрӯз',
+-		monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн',
+-		'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'],
+-		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
+-		'Июл','Авг','Сен','Окт','Ноя','Дек'],
+-		dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
+-		dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'],
+-		dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
+-		weekHeader: 'Хф',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['tj']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lv.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lv.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lv.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+-/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
+-jQuery(function($){
+-	$.datepicker.regional['lv'] = {
+-		closeText: 'Aizvērt',
+-		prevText: 'Iepr',
+-		nextText: 'Nāka',
+-		currentText: 'Šodien',
+-		monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs',
+-		'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn',
+-		'Jūl','Aug','Sep','Okt','Nov','Dec'],
+-		dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+-		dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+-		dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+-		weekHeader: 'Nav',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['lv']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ca.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ca.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ca.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
+-/* Writers: (joan.leon@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['ca'] = {
+-		closeText: 'Tanca',
+-		prevText: 'Anterior',
+-		nextText: 'Següent',
+-		currentText: 'Avui',
+-		monthNames: ['gener','febrer','març','abril','maig','juny',
+-		'juliol','agost','setembre','octubre','novembre','desembre'],
+-		monthNamesShort: ['gen','feb','març','abr','maig','juny',
+-		'jul','ag','set','oct','nov','des'],
+-		dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],
+-		dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'],
+-		dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'],
+-		weekHeader: 'Set',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['ca']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Serbian i18n for the jQuery UI date picker plugin. */
+-/* Written by Dejan Dimić. */
+-jQuery(function($){
+-	$.datepicker.regional['sr'] = {
+-		closeText: 'Затвори',
+-		prevText: '&#x3C;',
+-		nextText: '&#x3E;',
+-		currentText: 'Данас',
+-		monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун',
+-		'Јул','Август','Септембар','Октобар','Новембар','Децембар'],
+-		monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун',
+-		'Јул','Авг','Сеп','Окт','Нов','Дец'],
+-		dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+-		dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'],
+-		dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'],
+-		weekHeader: 'Сед',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sr']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-da.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-da.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-da.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Danish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Jan Christensen ( deletestuff@gmail.com). */
+-jQuery(function($){
+-	$.datepicker.regional['da'] = {
+-		closeText: 'Luk',
+-		prevText: '&#x3C;Forrige',
+-		nextText: 'Næste&#x3E;',
+-		currentText: 'Idag',
+-		monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+-		'Juli','August','September','Oktober','November','December'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Dec'],
+-		dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+-		dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+-		dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+-		weekHeader: 'Uge',
+-		dateFormat: 'dd-mm-yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['da']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tr.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tr.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tr.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Turkish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
+-jQuery(function($){
+-	$.datepicker.regional['tr'] = {
+-		closeText: 'kapat',
+-		prevText: '&#x3C;geri',
+-		nextText: 'ileri&#x3e',
+-		currentText: 'bugün',
+-		monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+-		'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+-		monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
+-		'Tem','Ağu','Eyl','Eki','Kas','Ara'],
+-		dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+-		dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+-		dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+-		weekHeader: 'Hf',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['tr']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-be.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-be.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-be.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Belarusian initialisation for the jQuery UI date picker plugin. */
+-/* Written by Pavel Selitskas <p.selitskas@gmail.com> */
+-jQuery(function($){
+-	$.datepicker.regional['be'] = {
+-		closeText: 'Зачыніць',
+-		prevText: '&larr;Папяр.',
+-		nextText: 'Наст.&rarr;',
+-		currentText: 'Сёньня',
+-		monthNames: ['Студзень','Люты','Сакавік','Красавік','Травень','Чэрвень',
+-		'Ліпень','Жнівень','Верасень','Кастрычнік','Лістапад','Сьнежань'],
+-		monthNamesShort: ['Сту','Лют','Сак','Кра','Тра','Чэр',
+-		'Ліп','Жні','Вер','Кас','Ліс','Сьн'],
+-		dayNames: ['нядзеля','панядзелак','аўторак','серада','чацьвер','пятніца','субота'],
+-		dayNamesShort: ['ндз','пнд','аўт','срд','чцв','птн','сбт'],
+-		dayNamesMin: ['Нд','Пн','Аў','Ср','Чц','Пт','Сб'],
+-		weekHeader: 'Тд',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['be']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fa.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fa.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fa.js	(revision 15488)
+@@ -1,59 +0,0 @@
+-/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
+-/* Javad Mowlanezhad -- jmowla@gmail.com */
+-/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
+-jQuery(function($) {
+-	$.datepicker.regional['fa'] = {
+-		closeText: 'بستن',
+-		prevText: '&#x3C;قبلی',
+-		nextText: 'بعدی&#x3E;',
+-		currentText: 'امروز',
+-		monthNames: [
+-			'فروردين',
+-			'ارديبهشت',
+-			'خرداد',
+-			'تير',
+-			'مرداد',
+-			'شهريور',
+-			'مهر',
+-			'آبان',
+-			'آذر',
+-			'دی',
+-			'بهمن',
+-			'اسفند'
+-		],
+-		monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+-		dayNames: [
+-			'يکشنبه',
+-			'دوشنبه',
+-			'سه‌شنبه',
+-			'چهارشنبه',
+-			'پنجشنبه',
+-			'جمعه',
+-			'شنبه'
+-		],
+-		dayNamesShort: [
+-			'ی',
+-			'د',
+-			'س',
+-			'چ',
+-			'پ',
+-			'ج',
+-			'ش'
+-		],
+-		dayNamesMin: [
+-			'ی',
+-			'د',
+-			'س',
+-			'چ',
+-			'پ',
+-			'ج',
+-			'ش'
+-		],
+-		weekHeader: 'هف',
+-		dateFormat: 'yy/mm/dd',
+-		firstDay: 6,
+-		isRTL: true,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['fa']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-NZ.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-NZ.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-NZ.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+-/* Based on the en-GB initialisation. */
+-jQuery(function($){
+-	$.datepicker.regional['en-NZ'] = {
+-		closeText: 'Done',
+-		prevText: 'Prev',
+-		nextText: 'Next',
+-		currentText: 'Today',
+-		monthNames: ['January','February','March','April','May','June',
+-		'July','August','September','October','November','December'],
+-		monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+-		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+-		dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+-		dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+-		dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+-		weekHeader: 'Wk',
+-		dateFormat: 'dd/mm/yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-de.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-de.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-de.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* German initialisation for the jQuery UI date picker plugin. */
+-/* Written by Milian Wolff (mail@milianw.de). */
+-jQuery(function($){
+-	$.datepicker.regional['de'] = {
+-		closeText: 'Schließen',
+-		prevText: '&#x3C;Zurück',
+-		nextText: 'Vor&#x3E;',
+-		currentText: 'Heute',
+-		monthNames: ['Januar','Februar','März','April','Mai','Juni',
+-		'Juli','August','September','Oktober','November','Dezember'],
+-		monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Dez'],
+-		dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+-		dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+-		dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+-		weekHeader: 'KW',
+-		dateFormat: 'dd.mm.yy',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['de']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sv.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sv.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sv.js	(revision 15488)
+@@ -1,23 +0,0 @@
+-/* Swedish initialisation for the jQuery UI date picker plugin. */
+-/* Written by Anders Ekdahl ( anders@nomadiz.se). */
+-jQuery(function($){
+-	$.datepicker.regional['sv'] = {
+-		closeText: 'Stäng',
+-		prevText: '&#xAB;Förra',
+-		nextText: 'Nästa&#xBB;',
+-		currentText: 'Idag',
+-		monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+-		'Juli','Augusti','September','Oktober','November','December'],
+-		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+-		'Jul','Aug','Sep','Okt','Nov','Dec'],
+-		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+-		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+-		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+-		weekHeader: 'Ve',
+-		dateFormat: 'yy-mm-dd',
+-		firstDay: 1,
+-		isRTL: false,
+-		showMonthAfterYear: false,
+-		yearSuffix: ''};
+-	$.datepicker.setDefaults($.datepicker.regional['sv']);
+-});
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.sortable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.sortable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.sortable.js	(revision 15488)
+@@ -1,1285 +0,0 @@
+-/*!
+- * jQuery UI Sortable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/sortable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-/*jshint loopfunc: true */
+-
+-function isOverAxis( x, reference, size ) {
+-	return ( x > reference ) && ( x < ( reference + size ) );
+-}
+-
+-function isFloating(item) {
+-	return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+-}
+-
+-$.widget("ui.sortable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "sort",
+-	ready: false,
+-	options: {
+-		appendTo: "parent",
+-		axis: false,
+-		connectWith: false,
+-		containment: false,
+-		cursor: "auto",
+-		cursorAt: false,
+-		dropOnEmpty: true,
+-		forcePlaceholderSize: false,
+-		forceHelperSize: false,
+-		grid: false,
+-		handle: false,
+-		helper: "original",
+-		items: "> *",
+-		opacity: false,
+-		placeholder: false,
+-		revert: false,
+-		scroll: true,
+-		scrollSensitivity: 20,
+-		scrollSpeed: 20,
+-		scope: "default",
+-		tolerance: "intersect",
+-		zIndex: 1000,
+-
+-		// callbacks
+-		activate: null,
+-		beforeStop: null,
+-		change: null,
+-		deactivate: null,
+-		out: null,
+-		over: null,
+-		receive: null,
+-		remove: null,
+-		sort: null,
+-		start: null,
+-		stop: null,
+-		update: null
+-	},
+-	_create: function() {
+-
+-		var o = this.options;
+-		this.containerCache = {};
+-		this.element.addClass("ui-sortable");
+-
+-		//Get the items
+-		this.refresh();
+-
+-		//Let's determine if the items are being displayed horizontally
+-		this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
+-
+-		//Let's determine the parent's offset
+-		this.offset = this.element.offset();
+-
+-		//Initialize mouse events for interaction
+-		this._mouseInit();
+-
+-		//We're ready to go
+-		this.ready = true;
+-
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass("ui-sortable ui-sortable-disabled");
+-		this._mouseDestroy();
+-
+-		for ( var i = this.items.length - 1; i >= 0; i-- ) {
+-			this.items[i].item.removeData(this.widgetName + "-item");
+-		}
+-
+-		return this;
+-	},
+-
+-	_setOption: function(key, value){
+-		if ( key === "disabled" ) {
+-			this.options[ key ] = value;
+-
+-			this.widget().toggleClass( "ui-sortable-disabled", !!value );
+-		} else {
+-			// Don't call widget base _setOption for disable as it adds ui-state-disabled class
+-			$.Widget.prototype._setOption.apply(this, arguments);
+-		}
+-	},
+-
+-	_mouseCapture: function(event, overrideHandle) {
+-		var currentItem = null,
+-			validHandle = false,
+-			that = this;
+-
+-		if (this.reverting) {
+-			return false;
+-		}
+-
+-		if(this.options.disabled || this.options.type === "static") {
+-			return false;
+-		}
+-
+-		//We have to refresh the items data once first
+-		this._refreshItems(event);
+-
+-		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+-		$(event.target).parents().each(function() {
+-			if($.data(this, that.widgetName + "-item") === that) {
+-				currentItem = $(this);
+-				return false;
+-			}
+-		});
+-		if($.data(event.target, that.widgetName + "-item") === that) {
+-			currentItem = $(event.target);
+-		}
+-
+-		if(!currentItem) {
+-			return false;
+-		}
+-		if(this.options.handle && !overrideHandle) {
+-			$(this.options.handle, currentItem).find("*").addBack().each(function() {
+-				if(this === event.target) {
+-					validHandle = true;
+-				}
+-			});
+-			if(!validHandle) {
+-				return false;
+-			}
+-		}
+-
+-		this.currentItem = currentItem;
+-		this._removeCurrentsFromItems();
+-		return true;
+-
+-	},
+-
+-	_mouseStart: function(event, overrideHandle, noActivation) {
+-
+-		var i, body,
+-			o = this.options;
+-
+-		this.currentContainer = this;
+-
+-		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+-		this.refreshPositions();
+-
+-		//Create and append the visible helper
+-		this.helper = this._createHelper(event);
+-
+-		//Cache the helper size
+-		this._cacheHelperProportions();
+-
+-		/*
+-		 * - Position generation -
+-		 * This block generates everything position related - it's the core of draggables.
+-		 */
+-
+-		//Cache the margins of the original element
+-		this._cacheMargins();
+-
+-		//Get the next scrolling parent
+-		this.scrollParent = this.helper.scrollParent();
+-
+-		//The element's absolute position on the page minus margins
+-		this.offset = this.currentItem.offset();
+-		this.offset = {
+-			top: this.offset.top - this.margins.top,
+-			left: this.offset.left - this.margins.left
+-		};
+-
+-		$.extend(this.offset, {
+-			click: { //Where the click happened, relative to the element
+-				left: event.pageX - this.offset.left,
+-				top: event.pageY - this.offset.top
+-			},
+-			parent: this._getParentOffset(),
+-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+-		});
+-
+-		// Only after we got the offset, we can change the helper's position to absolute
+-		// TODO: Still need to figure out a way to make relative sorting possible
+-		this.helper.css("position", "absolute");
+-		this.cssPosition = this.helper.css("position");
+-
+-		//Generate the original position
+-		this.originalPosition = this._generatePosition(event);
+-		this.originalPageX = event.pageX;
+-		this.originalPageY = event.pageY;
+-
+-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+-
+-		//Cache the former DOM position
+-		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+-
+-		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.currentItem.hide();
+-		}
+-
+-		//Create the placeholder
+-		this._createPlaceholder();
+-
+-		//Set a containment if given in the options
+-		if(o.containment) {
+-			this._setContainment();
+-		}
+-
+-		if( o.cursor && o.cursor !== "auto" ) { // cursor option
+-			body = this.document.find( "body" );
+-
+-			// support: IE
+-			this.storedCursor = body.css( "cursor" );
+-			body.css( "cursor", o.cursor );
+-
+-			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+-		}
+-
+-		if(o.opacity) { // opacity option
+-			if (this.helper.css("opacity")) {
+-				this._storedOpacity = this.helper.css("opacity");
+-			}
+-			this.helper.css("opacity", o.opacity);
+-		}
+-
+-		if(o.zIndex) { // zIndex option
+-			if (this.helper.css("zIndex")) {
+-				this._storedZIndex = this.helper.css("zIndex");
+-			}
+-			this.helper.css("zIndex", o.zIndex);
+-		}
+-
+-		//Prepare scrolling
+-		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-			this.overflowOffset = this.scrollParent.offset();
+-		}
+-
+-		//Call callbacks
+-		this._trigger("start", event, this._uiHash());
+-
+-		//Recache the helper size
+-		if(!this._preserveHelperProportions) {
+-			this._cacheHelperProportions();
+-		}
+-
+-
+-		//Post "activate" events to possible containers
+-		if( !noActivation ) {
+-			for ( i = this.containers.length - 1; i >= 0; i-- ) {
+-				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+-			}
+-		}
+-
+-		//Prepare possible droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.current = this;
+-		}
+-
+-		if ($.ui.ddmanager && !o.dropBehaviour) {
+-			$.ui.ddmanager.prepareOffsets(this, event);
+-		}
+-
+-		this.dragging = true;
+-
+-		this.helper.addClass("ui-sortable-helper");
+-		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+-		return true;
+-
+-	},
+-
+-	_mouseDrag: function(event) {
+-		var i, item, itemElement, intersection,
+-			o = this.options,
+-			scrolled = false;
+-
+-		//Compute the helpers position
+-		this.position = this._generatePosition(event);
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		if (!this.lastPositionAbs) {
+-			this.lastPositionAbs = this.positionAbs;
+-		}
+-
+-		//Do scrolling
+-		if(this.options.scroll) {
+-			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+-
+-				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+-				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+-				}
+-
+-				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+-				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+-					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+-				}
+-
+-			} else {
+-
+-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+-				}
+-
+-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+-				}
+-
+-			}
+-
+-			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+-				$.ui.ddmanager.prepareOffsets(this, event);
+-			}
+-		}
+-
+-		//Regenerate the absolute position used for position checks
+-		this.positionAbs = this._convertPositionTo("absolute");
+-
+-		//Set the helper position
+-		if(!this.options.axis || this.options.axis !== "y") {
+-			this.helper[0].style.left = this.position.left+"px";
+-		}
+-		if(!this.options.axis || this.options.axis !== "x") {
+-			this.helper[0].style.top = this.position.top+"px";
+-		}
+-
+-		//Rearrange
+-		for (i = this.items.length - 1; i >= 0; i--) {
+-
+-			//Cache variables and intersection, continue if no intersection
+-			item = this.items[i];
+-			itemElement = item.item[0];
+-			intersection = this._intersectsWithPointer(item);
+-			if (!intersection) {
+-				continue;
+-			}
+-
+-			// Only put the placeholder inside the current Container, skip all
+-			// items form other containers. This works because when moving
+-			// an item from one container to another the
+-			// currentContainer is switched before the placeholder is moved.
+-			//
+-			// Without this moving items in "sub-sortables" can cause the placeholder to jitter
+-			// beetween the outer and inner container.
+-			if (item.instance !== this.currentContainer) {
+-				continue;
+-			}
+-
+-			// cannot intersect with itself
+-			// no useless actions that have been done before
+-			// no action if the item moved is the parent of the item checked
+-			if (itemElement !== this.currentItem[0] &&
+-				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+-				!$.contains(this.placeholder[0], itemElement) &&
+-				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+-			) {
+-
+-				this.direction = intersection === 1 ? "down" : "up";
+-
+-				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+-					this._rearrange(event, item);
+-				} else {
+-					break;
+-				}
+-
+-				this._trigger("change", event, this._uiHash());
+-				break;
+-			}
+-		}
+-
+-		//Post events to containers
+-		this._contactContainers(event);
+-
+-		//Interconnect with droppables
+-		if($.ui.ddmanager) {
+-			$.ui.ddmanager.drag(this, event);
+-		}
+-
+-		//Call callbacks
+-		this._trigger("sort", event, this._uiHash());
+-
+-		this.lastPositionAbs = this.positionAbs;
+-		return false;
+-
+-	},
+-
+-	_mouseStop: function(event, noPropagation) {
+-
+-		if(!event) {
+-			return;
+-		}
+-
+-		//If we are using droppables, inform the manager about the drop
+-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+-			$.ui.ddmanager.drop(this, event);
+-		}
+-
+-		if(this.options.revert) {
+-			var that = this,
+-				cur = this.placeholder.offset(),
+-				axis = this.options.axis,
+-				animation = {};
+-
+-			if ( !axis || axis === "x" ) {
+-				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
+-			}
+-			if ( !axis || axis === "y" ) {
+-				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
+-			}
+-			this.reverting = true;
+-			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+-				that._clear(event);
+-			});
+-		} else {
+-			this._clear(event, noPropagation);
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	cancel: function() {
+-
+-		if(this.dragging) {
+-
+-			this._mouseUp({ target: null });
+-
+-			if(this.options.helper === "original") {
+-				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-			} else {
+-				this.currentItem.show();
+-			}
+-
+-			//Post deactivating events to containers
+-			for (var i = this.containers.length - 1; i >= 0; i--){
+-				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", null, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		if (this.placeholder) {
+-			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-			if(this.placeholder[0].parentNode) {
+-				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-			}
+-			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+-				this.helper.remove();
+-			}
+-
+-			$.extend(this, {
+-				helper: null,
+-				dragging: false,
+-				reverting: false,
+-				_noFinalSort: null
+-			});
+-
+-			if(this.domPosition.prev) {
+-				$(this.domPosition.prev).after(this.currentItem);
+-			} else {
+-				$(this.domPosition.parent).prepend(this.currentItem);
+-			}
+-		}
+-
+-		return this;
+-
+-	},
+-
+-	serialize: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			str = [];
+-		o = o || {};
+-
+-		$(items).each(function() {
+-			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+-			if (res) {
+-				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+-			}
+-		});
+-
+-		if(!str.length && o.key) {
+-			str.push(o.key + "=");
+-		}
+-
+-		return str.join("&");
+-
+-	},
+-
+-	toArray: function(o) {
+-
+-		var items = this._getItemsAsjQuery(o && o.connected),
+-			ret = [];
+-
+-		o = o || {};
+-
+-		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+-		return ret;
+-
+-	},
+-
+-	/* Be careful with the following core functions */
+-	_intersectsWith: function(item) {
+-
+-		var x1 = this.positionAbs.left,
+-			x2 = x1 + this.helperProportions.width,
+-			y1 = this.positionAbs.top,
+-			y2 = y1 + this.helperProportions.height,
+-			l = item.left,
+-			r = l + item.width,
+-			t = item.top,
+-			b = t + item.height,
+-			dyClick = this.offset.click.top,
+-			dxClick = this.offset.click.left,
+-			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+-			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+-			isOverElement = isOverElementHeight && isOverElementWidth;
+-
+-		if ( this.options.tolerance === "pointer" ||
+-			this.options.forcePointerForContainers ||
+-			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+-		) {
+-			return isOverElement;
+-		} else {
+-
+-			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+-				x2 - (this.helperProportions.width / 2) < r && // Left Half
+-				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+-				y2 - (this.helperProportions.height / 2) < b ); // Top Half
+-
+-		}
+-	},
+-
+-	_intersectsWithPointer: function(item) {
+-
+-		var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+-			isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+-			isOverElement = isOverElementHeight && isOverElementWidth,
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (!isOverElement) {
+-			return false;
+-		}
+-
+-		return this.floating ?
+-			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+-			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+-
+-	},
+-
+-	_intersectsWithSides: function(item) {
+-
+-		var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+-			isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+-			verticalDirection = this._getDragVerticalDirection(),
+-			horizontalDirection = this._getDragHorizontalDirection();
+-
+-		if (this.floating && horizontalDirection) {
+-			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+-		} else {
+-			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+-		}
+-
+-	},
+-
+-	_getDragVerticalDirection: function() {
+-		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+-		return delta !== 0 && (delta > 0 ? "down" : "up");
+-	},
+-
+-	_getDragHorizontalDirection: function() {
+-		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+-		return delta !== 0 && (delta > 0 ? "right" : "left");
+-	},
+-
+-	refresh: function(event) {
+-		this._refreshItems(event);
+-		this.refreshPositions();
+-		return this;
+-	},
+-
+-	_connectWith: function() {
+-		var options = this.options;
+-		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+-	},
+-
+-	_getItemsAsjQuery: function(connected) {
+-
+-		var i, j, cur, inst,
+-			items = [],
+-			queries = [],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && connected) {
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for ( j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+-					}
+-				}
+-			}
+-		}
+-
+-		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+-
+-		for (i = queries.length - 1; i >= 0; i--){
+-			queries[i][0].each(function() {
+-				items.push(this);
+-			});
+-		}
+-
+-		return $(items);
+-
+-	},
+-
+-	_removeCurrentsFromItems: function() {
+-
+-		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+-
+-		this.items = $.grep(this.items, function (item) {
+-			for (var j=0; j < list.length; j++) {
+-				if(list[j] === item.item[0]) {
+-					return false;
+-				}
+-			}
+-			return true;
+-		});
+-
+-	},
+-
+-	_refreshItems: function(event) {
+-
+-		this.items = [];
+-		this.containers = [this];
+-
+-		var i, j, cur, inst, targetData, _queries, item, queriesLength,
+-			items = this.items,
+-			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+-			connectWith = this._connectWith();
+-
+-		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+-			for (i = connectWith.length - 1; i >= 0; i--){
+-				cur = $(connectWith[i]);
+-				for (j = cur.length - 1; j >= 0; j--){
+-					inst = $.data(cur[j], this.widgetFullName);
+-					if(inst && inst !== this && !inst.options.disabled) {
+-						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+-						this.containers.push(inst);
+-					}
+-				}
+-			}
+-		}
+-
+-		for (i = queries.length - 1; i >= 0; i--) {
+-			targetData = queries[i][1];
+-			_queries = queries[i][0];
+-
+-			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+-				item = $(_queries[j]);
+-
+-				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+-
+-				items.push({
+-					item: item,
+-					instance: targetData,
+-					width: 0, height: 0,
+-					left: 0, top: 0
+-				});
+-			}
+-		}
+-
+-	},
+-
+-	refreshPositions: function(fast) {
+-
+-		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+-		if(this.offsetParent && this.helper) {
+-			this.offset.parent = this._getParentOffset();
+-		}
+-
+-		var i, item, t, p;
+-
+-		for (i = this.items.length - 1; i >= 0; i--){
+-			item = this.items[i];
+-
+-			//We ignore calculating positions of all connected containers when we're not over them
+-			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+-				continue;
+-			}
+-
+-			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+-
+-			if (!fast) {
+-				item.width = t.outerWidth();
+-				item.height = t.outerHeight();
+-			}
+-
+-			p = t.offset();
+-			item.left = p.left;
+-			item.top = p.top;
+-		}
+-
+-		if(this.options.custom && this.options.custom.refreshContainers) {
+-			this.options.custom.refreshContainers.call(this);
+-		} else {
+-			for (i = this.containers.length - 1; i >= 0; i--){
+-				p = this.containers[i].element.offset();
+-				this.containers[i].containerCache.left = p.left;
+-				this.containers[i].containerCache.top = p.top;
+-				this.containers[i].containerCache.width	= this.containers[i].element.outerWidth();
+-				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+-			}
+-		}
+-
+-		return this;
+-	},
+-
+-	_createPlaceholder: function(that) {
+-		that = that || this;
+-		var className,
+-			o = that.options;
+-
+-		if(!o.placeholder || o.placeholder.constructor === String) {
+-			className = o.placeholder;
+-			o.placeholder = {
+-				element: function() {
+-
+-					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+-						element = $( "<" + nodeName + ">", that.document[0] )
+-							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+-							.removeClass("ui-sortable-helper");
+-
+-					if ( nodeName === "tr" ) {
+-						that.currentItem.children().each(function() {
+-							$( "<td>&#160;</td>", that.document[0] )
+-								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+-								.appendTo( element );
+-						});
+-					} else if ( nodeName === "img" ) {
+-						element.attr( "src", that.currentItem.attr( "src" ) );
+-					}
+-
+-					if ( !className ) {
+-						element.css( "visibility", "hidden" );
+-					}
+-
+-					return element;
+-				},
+-				update: function(container, p) {
+-
+-					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+-					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+-					if(className && !o.forcePlaceholderSize) {
+-						return;
+-					}
+-
+-					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+-					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+-					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+-				}
+-			};
+-		}
+-
+-		//Create the placeholder
+-		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+-
+-		//Append it after the actual current item
+-		that.currentItem.after(that.placeholder);
+-
+-		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+-		o.placeholder.update(that, that.placeholder);
+-
+-	},
+-
+-	_contactContainers: function(event) {
+-		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
+-			innermostContainer = null,
+-			innermostIndex = null;
+-
+-		// get innermost container that intersects with item
+-		for (i = this.containers.length - 1; i >= 0; i--) {
+-
+-			// never consider a container that's located within the item itself
+-			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+-				continue;
+-			}
+-
+-			if(this._intersectsWith(this.containers[i].containerCache)) {
+-
+-				// if we've already found a container and it's more "inner" than this, then continue
+-				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+-					continue;
+-				}
+-
+-				innermostContainer = this.containers[i];
+-				innermostIndex = i;
+-
+-			} else {
+-				// container doesn't intersect. trigger "out" event if necessary
+-				if(this.containers[i].containerCache.over) {
+-					this.containers[i]._trigger("out", event, this._uiHash(this));
+-					this.containers[i].containerCache.over = 0;
+-				}
+-			}
+-
+-		}
+-
+-		// if no intersecting containers found, return
+-		if(!innermostContainer) {
+-			return;
+-		}
+-
+-		// move the item into the container if it's not there already
+-		if(this.containers.length === 1) {
+-			if (!this.containers[innermostIndex].containerCache.over) {
+-				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-				this.containers[innermostIndex].containerCache.over = 1;
+-			}
+-		} else {
+-
+-			//When entering a new container, we will find the item with the least distance and append our item near it
+-			dist = 10000;
+-			itemWithLeastDistance = null;
+-			floating = innermostContainer.floating || isFloating(this.currentItem);
+-			posProperty = floating ? "left" : "top";
+-			sizeProperty = floating ? "width" : "height";
+-			base = this.positionAbs[posProperty] + this.offset.click[posProperty];
+-			for (j = this.items.length - 1; j >= 0; j--) {
+-				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+-					continue;
+-				}
+-				if(this.items[j].item[0] === this.currentItem[0]) {
+-					continue;
+-				}
+-				if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
+-					continue;
+-				}
+-				cur = this.items[j].item.offset()[posProperty];
+-				nearBottom = false;
+-				if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+-					nearBottom = true;
+-					cur += this.items[j][sizeProperty];
+-				}
+-
+-				if(Math.abs(cur - base) < dist) {
+-					dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+-					this.direction = nearBottom ? "up": "down";
+-				}
+-			}
+-
+-			//Check if dropOnEmpty is enabled
+-			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+-				return;
+-			}
+-
+-			if(this.currentContainer === this.containers[innermostIndex]) {
+-				return;
+-			}
+-
+-			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+-			this._trigger("change", event, this._uiHash());
+-			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+-			this.currentContainer = this.containers[innermostIndex];
+-
+-			//Update the placeholder
+-			this.options.placeholder.update(this.currentContainer, this.placeholder);
+-
+-			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+-			this.containers[innermostIndex].containerCache.over = 1;
+-		}
+-
+-
+-	},
+-
+-	_createHelper: function(event) {
+-
+-		var o = this.options,
+-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+-
+-		//Add the helper to the DOM if that didn't happen already
+-		if(!helper.parents("body").length) {
+-			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+-		}
+-
+-		if(helper[0] === this.currentItem[0]) {
+-			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+-		}
+-
+-		if(!helper[0].style.width || o.forceHelperSize) {
+-			helper.width(this.currentItem.width());
+-		}
+-		if(!helper[0].style.height || o.forceHelperSize) {
+-			helper.height(this.currentItem.height());
+-		}
+-
+-		return helper;
+-
+-	},
+-
+-	_adjustOffsetFromHelper: function(obj) {
+-		if (typeof obj === "string") {
+-			obj = obj.split(" ");
+-		}
+-		if ($.isArray(obj)) {
+-			obj = {left: +obj[0], top: +obj[1] || 0};
+-		}
+-		if ("left" in obj) {
+-			this.offset.click.left = obj.left + this.margins.left;
+-		}
+-		if ("right" in obj) {
+-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+-		}
+-		if ("top" in obj) {
+-			this.offset.click.top = obj.top + this.margins.top;
+-		}
+-		if ("bottom" in obj) {
+-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+-		}
+-	},
+-
+-	_getParentOffset: function() {
+-
+-
+-		//Get the offsetParent and cache its position
+-		this.offsetParent = this.helper.offsetParent();
+-		var po = this.offsetParent.offset();
+-
+-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+-			po.left += this.scrollParent.scrollLeft();
+-			po.top += this.scrollParent.scrollTop();
+-		}
+-
+-		// This needs to be actually done for all browsers, since pageX/pageY includes this information
+-		// with an ugly IE fix
+-		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+-			po = { top: 0, left: 0 };
+-		}
+-
+-		return {
+-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+-		};
+-
+-	},
+-
+-	_getRelativeOffset: function() {
+-
+-		if(this.cssPosition === "relative") {
+-			var p = this.currentItem.position();
+-			return {
+-				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+-				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+-			};
+-		} else {
+-			return { top: 0, left: 0 };
+-		}
+-
+-	},
+-
+-	_cacheMargins: function() {
+-		this.margins = {
+-			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+-			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+-		};
+-	},
+-
+-	_cacheHelperProportions: function() {
+-		this.helperProportions = {
+-			width: this.helper.outerWidth(),
+-			height: this.helper.outerHeight()
+-		};
+-	},
+-
+-	_setContainment: function() {
+-
+-		var ce, co, over,
+-			o = this.options;
+-		if(o.containment === "parent") {
+-			o.containment = this.helper[0].parentNode;
+-		}
+-		if(o.containment === "document" || o.containment === "window") {
+-			this.containment = [
+-				0 - this.offset.relative.left - this.offset.parent.left,
+-				0 - this.offset.relative.top - this.offset.parent.top,
+-				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
+-				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-		if(!(/^(document|window|parent)$/).test(o.containment)) {
+-			ce = $(o.containment)[0];
+-			co = $(o.containment).offset();
+-			over = ($(ce).css("overflow") !== "hidden");
+-
+-			this.containment = [
+-				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+-				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+-				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+-				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+-			];
+-		}
+-
+-	},
+-
+-	_convertPositionTo: function(d, pos) {
+-
+-		if(!pos) {
+-			pos = this.position;
+-		}
+-		var mod = d === "absolute" ? 1 : -1,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+-			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		return {
+-			top: (
+-				pos.top	+																// The absolute mouse position
+-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+-			),
+-			left: (
+-				pos.left +																// The absolute mouse position
+-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+-			)
+-		};
+-
+-	},
+-
+-	_generatePosition: function(event) {
+-
+-		var top, left,
+-			o = this.options,
+-			pageX = event.pageX,
+-			pageY = event.pageY,
+-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+-
+-		// This is another very weird special case that only happens for relative elements:
+-		// 1. If the css position is relative
+-		// 2. and the scroll parent is the document or similar to the offset parent
+-		// we have to refresh the relative offset during the scroll so there are no jumps
+-		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+-			this.offset.relative = this._getRelativeOffset();
+-		}
+-
+-		/*
+-		 * - Position constraining -
+-		 * Constrain the position to a mix of grid, containment.
+-		 */
+-
+-		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+-
+-			if(this.containment) {
+-				if(event.pageX - this.offset.click.left < this.containment[0]) {
+-					pageX = this.containment[0] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top < this.containment[1]) {
+-					pageY = this.containment[1] + this.offset.click.top;
+-				}
+-				if(event.pageX - this.offset.click.left > this.containment[2]) {
+-					pageX = this.containment[2] + this.offset.click.left;
+-				}
+-				if(event.pageY - this.offset.click.top > this.containment[3]) {
+-					pageY = this.containment[3] + this.offset.click.top;
+-				}
+-			}
+-
+-			if(o.grid) {
+-				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+-				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+-
+-				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+-				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+-			}
+-
+-		}
+-
+-		return {
+-			top: (
+-				pageY -																// The absolute mouse position
+-				this.offset.click.top -													// Click offset (relative to the element)
+-				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+-			),
+-			left: (
+-				pageX -																// The absolute mouse position
+-				this.offset.click.left -												// Click offset (relative to the element)
+-				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+-				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+-			)
+-		};
+-
+-	},
+-
+-	_rearrange: function(event, i, a, hardRefresh) {
+-
+-		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+-
+-		//Various things done here to improve the performance:
+-		// 1. we create a setTimeout, that calls refreshPositions
+-		// 2. on the instance, we have a counter variable, that get's higher after every append
+-		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+-		// 4. this lets only the last addition to the timeout stack through
+-		this.counter = this.counter ? ++this.counter : 1;
+-		var counter = this.counter;
+-
+-		this._delay(function() {
+-			if(counter === this.counter) {
+-				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+-			}
+-		});
+-
+-	},
+-
+-	_clear: function(event, noPropagation) {
+-
+-		this.reverting = false;
+-		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+-		// everything else normalized again
+-		var i,
+-			delayedTriggers = [];
+-
+-		// We first have to update the dom position of the actual currentItem
+-		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+-		if(!this._noFinalSort && this.currentItem.parent().length) {
+-			this.placeholder.before(this.currentItem);
+-		}
+-		this._noFinalSort = null;
+-
+-		if(this.helper[0] === this.currentItem[0]) {
+-			for(i in this._storedCSS) {
+-				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+-					this._storedCSS[i] = "";
+-				}
+-			}
+-			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+-		} else {
+-			this.currentItem.show();
+-		}
+-
+-		if(this.fromOutside && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+-		}
+-		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+-			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+-		}
+-
+-		// Check if the items Container has Changed and trigger appropriate
+-		// events.
+-		if (this !== this.currentContainer) {
+-			if(!noPropagation) {
+-				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
+-			}
+-		}
+-
+-
+-		//Post events to containers
+-		for (i = this.containers.length - 1; i >= 0; i--){
+-			if(!noPropagation) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-			}
+-			if(this.containers[i].containerCache.over) {
+-				delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+-				this.containers[i].containerCache.over = 0;
+-			}
+-		}
+-
+-		//Do what was originally in plugins
+-		if ( this.storedCursor ) {
+-			this.document.find( "body" ).css( "cursor", this.storedCursor );
+-			this.storedStylesheet.remove();
+-		}
+-		if(this._storedOpacity) {
+-			this.helper.css("opacity", this._storedOpacity);
+-		}
+-		if(this._storedZIndex) {
+-			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+-		}
+-
+-		this.dragging = false;
+-		if(this.cancelHelperRemoval) {
+-			if(!noPropagation) {
+-				this._trigger("beforeStop", event, this._uiHash());
+-				for (i=0; i < delayedTriggers.length; i++) {
+-					delayedTriggers[i].call(this, event);
+-				} //Trigger all delayed events
+-				this._trigger("stop", event, this._uiHash());
+-			}
+-
+-			this.fromOutside = false;
+-			return false;
+-		}
+-
+-		if(!noPropagation) {
+-			this._trigger("beforeStop", event, this._uiHash());
+-		}
+-
+-		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+-		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+-
+-		if(this.helper[0] !== this.currentItem[0]) {
+-			this.helper.remove();
+-		}
+-		this.helper = null;
+-
+-		if(!noPropagation) {
+-			for (i=0; i < delayedTriggers.length; i++) {
+-				delayedTriggers[i].call(this, event);
+-			} //Trigger all delayed events
+-			this._trigger("stop", event, this._uiHash());
+-		}
+-
+-		this.fromOutside = false;
+-		return true;
+-
+-	},
+-
+-	_trigger: function() {
+-		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+-			this.cancel();
+-		}
+-	},
+-
+-	_uiHash: function(_inst) {
+-		var inst = _inst || this;
+-		return {
+-			helper: inst.helper,
+-			placeholder: inst.placeholder || $([]),
+-			position: inst.position,
+-			originalPosition: inst.originalPosition,
+-			offset: inst.positionAbs,
+-			item: inst.currentItem,
+-			sender: _inst ? _inst.element : null
+-		};
+-	}
+-
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.datepicker.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.datepicker.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.datepicker.js	(revision 15488)
+@@ -1,2038 +0,0 @@
+-/*!
+- * jQuery UI Datepicker 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/datepicker/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- */
+-(function( $, undefined ) {
+-
+-$.extend($.ui, { datepicker: { version: "1.10.3" } });
+-
+-var PROP_NAME = "datepicker",
+-	instActive;
+-
+-/* Date picker manager.
+-   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+-   Settings for (groups of) date pickers are maintained in an instance object,
+-   allowing multiple different settings on the same page. */
+-
+-function Datepicker() {
+-	this._curInst = null; // The current instance in use
+-	this._keyEvent = false; // If the last event was a key event
+-	this._disabledInputs = []; // List of date picker inputs that have been disabled
+-	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+-	this._inDialog = false; // True if showing within a "dialog", false if not
+-	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+-	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+-	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+-	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+-	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+-	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+-	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+-	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+-	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+-	this.regional = []; // Available regional settings, indexed by language code
+-	this.regional[""] = { // Default regional settings
+-		closeText: "Done", // Display text for close link
+-		prevText: "Prev", // Display text for previous month link
+-		nextText: "Next", // Display text for next month link
+-		currentText: "Today", // Display text for current month link
+-		monthNames: ["January","February","March","April","May","June",
+-			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
+-		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+-		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+-		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+-		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+-		weekHeader: "Wk", // Column header for week of the year
+-		dateFormat: "mm/dd/yy", // See format options on parseDate
+-		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+-		isRTL: false, // True if right-to-left language, false if left-to-right
+-		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+-		yearSuffix: "" // Additional text to append to the year in the month headers
+-	};
+-	this._defaults = { // Global defaults for all the date picker instances
+-		showOn: "focus", // "focus" for popup on focus,
+-			// "button" for trigger button, or "both" for either
+-		showAnim: "fadeIn", // Name of jQuery animation for popup
+-		showOptions: {}, // Options for enhanced animations
+-		defaultDate: null, // Used when field is blank: actual date,
+-			// +/-number for offset from today, null for today
+-		appendText: "", // Display text following the input box, e.g. showing the format
+-		buttonText: "...", // Text for trigger button
+-		buttonImage: "", // URL for trigger button image
+-		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+-		hideIfNoPrevNext: false, // True to hide next/previous month links
+-			// if not applicable, false to just disable them
+-		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+-		gotoCurrent: false, // True if today link goes back to current selection instead
+-		changeMonth: false, // True if month can be selected directly, false if only prev/next
+-		changeYear: false, // True if year can be selected directly, false if only prev/next
+-		yearRange: "c-10:c+10", // Range of years to display in drop-down,
+-			// either relative to today's year (-nn:+nn), relative to currently displayed year
+-			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+-		showOtherMonths: false, // True to show dates in other months, false to leave blank
+-		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+-		showWeek: false, // True to show week of the year, false to not show it
+-		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+-			// takes a Date and returns the number of the week for it
+-		shortYearCutoff: "+10", // Short year values < this are in the current century,
+-			// > this are in the previous century,
+-			// string value starting with "+" for current year + value
+-		minDate: null, // The earliest selectable date, or null for no limit
+-		maxDate: null, // The latest selectable date, or null for no limit
+-		duration: "fast", // Duration of display/closure
+-		beforeShowDay: null, // Function that takes a date and returns an array with
+-			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+-			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+-		beforeShow: null, // Function that takes an input field and
+-			// returns a set of custom settings for the date picker
+-		onSelect: null, // Define a callback function when a date is selected
+-		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+-		onClose: null, // Define a callback function when the datepicker is closed
+-		numberOfMonths: 1, // Number of months to show at a time
+-		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+-		stepMonths: 1, // Number of months to step back/forward
+-		stepBigMonths: 12, // Number of months to step back/forward for the big links
+-		altField: "", // Selector for an alternate field to store selected dates into
+-		altFormat: "", // The date format to use for the alternate field
+-		constrainInput: true, // The input is constrained by the current date format
+-		showButtonPanel: false, // True to show button panel, false to not show it
+-		autoSize: false, // True to size the input for the date format, false to leave as is
+-		disabled: false // The initial disabled state
+-	};
+-	$.extend(this._defaults, this.regional[""]);
+-	this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+-}
+-
+-$.extend(Datepicker.prototype, {
+-	/* Class name added to elements to indicate already configured with a date picker. */
+-	markerClassName: "hasDatepicker",
+-
+-	//Keep track of the maximum number of rows displayed (see #7043)
+-	maxRows: 4,
+-
+-	// TODO rename to "widget" when switching to widget factory
+-	_widgetDatepicker: function() {
+-		return this.dpDiv;
+-	},
+-
+-	/* Override the default settings for all instances of the date picker.
+-	 * @param  settings  object - the new settings to use as defaults (anonymous object)
+-	 * @return the manager object
+-	 */
+-	setDefaults: function(settings) {
+-		extendRemove(this._defaults, settings || {});
+-		return this;
+-	},
+-
+-	/* Attach the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+-	 */
+-	_attachDatepicker: function(target, settings) {
+-		var nodeName, inline, inst;
+-		nodeName = target.nodeName.toLowerCase();
+-		inline = (nodeName === "div" || nodeName === "span");
+-		if (!target.id) {
+-			this.uuid += 1;
+-			target.id = "dp" + this.uuid;
+-		}
+-		inst = this._newInst($(target), inline);
+-		inst.settings = $.extend({}, settings || {});
+-		if (nodeName === "input") {
+-			this._connectDatepicker(target, inst);
+-		} else if (inline) {
+-			this._inlineDatepicker(target, inst);
+-		}
+-	},
+-
+-	/* Create a new instance object. */
+-	_newInst: function(target, inline) {
+-		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+-		return {id: id, input: target, // associated target
+-			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+-			drawMonth: 0, drawYear: 0, // month being drawn
+-			inline: inline, // is datepicker inline or not
+-			dpDiv: (!inline ? this.dpDiv : // presentation div
+-			bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+-	},
+-
+-	/* Attach the date picker to an input field. */
+-	_connectDatepicker: function(target, inst) {
+-		var input = $(target);
+-		inst.append = $([]);
+-		inst.trigger = $([]);
+-		if (input.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		this._attachments(input, inst);
+-		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+-			keypress(this._doKeyPress).keyup(this._doKeyUp);
+-		this._autoSize(inst);
+-		$.data(target, PROP_NAME, inst);
+-		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-	},
+-
+-	/* Make attachments based on settings. */
+-	_attachments: function(input, inst) {
+-		var showOn, buttonText, buttonImage,
+-			appendText = this._get(inst, "appendText"),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		if (inst.append) {
+-			inst.append.remove();
+-		}
+-		if (appendText) {
+-			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+-			input[isRTL ? "before" : "after"](inst.append);
+-		}
+-
+-		input.unbind("focus", this._showDatepicker);
+-
+-		if (inst.trigger) {
+-			inst.trigger.remove();
+-		}
+-
+-		showOn = this._get(inst, "showOn");
+-		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+-			input.focus(this._showDatepicker);
+-		}
+-		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+-			buttonText = this._get(inst, "buttonText");
+-			buttonImage = this._get(inst, "buttonImage");
+-			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+-				$("<img/>").addClass(this._triggerClass).
+-					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+-				$("<button type='button'></button>").addClass(this._triggerClass).
+-					html(!buttonImage ? buttonText : $("<img/>").attr(
+-					{ src:buttonImage, alt:buttonText, title:buttonText })));
+-			input[isRTL ? "before" : "after"](inst.trigger);
+-			inst.trigger.click(function() {
+-				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+-					$.datepicker._hideDatepicker();
+-				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+-					$.datepicker._hideDatepicker();
+-					$.datepicker._showDatepicker(input[0]);
+-				} else {
+-					$.datepicker._showDatepicker(input[0]);
+-				}
+-				return false;
+-			});
+-		}
+-	},
+-
+-	/* Apply the maximum length for the date format. */
+-	_autoSize: function(inst) {
+-		if (this._get(inst, "autoSize") && !inst.inline) {
+-			var findMax, max, maxI, i,
+-				date = new Date(2009, 12 - 1, 20), // Ensure double digits
+-				dateFormat = this._get(inst, "dateFormat");
+-
+-			if (dateFormat.match(/[DM]/)) {
+-				findMax = function(names) {
+-					max = 0;
+-					maxI = 0;
+-					for (i = 0; i < names.length; i++) {
+-						if (names[i].length > max) {
+-							max = names[i].length;
+-							maxI = i;
+-						}
+-					}
+-					return maxI;
+-				};
+-				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+-					"monthNames" : "monthNamesShort"))));
+-				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+-					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+-			}
+-			inst.input.attr("size", this._formatDate(inst, date).length);
+-		}
+-	},
+-
+-	/* Attach an inline date picker to a div. */
+-	_inlineDatepicker: function(target, inst) {
+-		var divSpan = $(target);
+-		if (divSpan.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+-		$.data(target, PROP_NAME, inst);
+-		this._setDate(inst, this._getDefaultDate(inst), true);
+-		this._updateDatepicker(inst);
+-		this._updateAlternate(inst);
+-		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+-		if( inst.settings.disabled ) {
+-			this._disableDatepicker( target );
+-		}
+-		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+-		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+-		inst.dpDiv.css( "display", "block" );
+-	},
+-
+-	/* Pop-up the date picker in a "dialog" box.
+-	 * @param  input element - ignored
+-	 * @param  date	string or Date - the initial date to display
+-	 * @param  onSelect  function - the function to call when a date is selected
+-	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+-	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
+-	 *					event - with x/y coordinates or
+-	 *					leave empty for default (screen centre)
+-	 * @return the manager object
+-	 */
+-	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+-		var id, browserWidth, browserHeight, scrollX, scrollY,
+-			inst = this._dialogInst; // internal instance
+-
+-		if (!inst) {
+-			this.uuid += 1;
+-			id = "dp" + this.uuid;
+-			this._dialogInput = $("<input type='text' id='" + id +
+-				"' style='position: absolute; top: -100px; width: 0px;'/>");
+-			this._dialogInput.keydown(this._doKeyDown);
+-			$("body").append(this._dialogInput);
+-			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+-			inst.settings = {};
+-			$.data(this._dialogInput[0], PROP_NAME, inst);
+-		}
+-		extendRemove(inst.settings, settings || {});
+-		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+-		this._dialogInput.val(date);
+-
+-		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+-		if (!this._pos) {
+-			browserWidth = document.documentElement.clientWidth;
+-			browserHeight = document.documentElement.clientHeight;
+-			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+-			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+-			this._pos = // should use actual width/height below
+-				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+-		}
+-
+-		// move input on screen for focus, but hidden behind dialog
+-		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+-		inst.settings.onSelect = onSelect;
+-		this._inDialog = true;
+-		this.dpDiv.addClass(this._dialogClass);
+-		this._showDatepicker(this._dialogInput[0]);
+-		if ($.blockUI) {
+-			$.blockUI(this.dpDiv);
+-		}
+-		$.data(this._dialogInput[0], PROP_NAME, inst);
+-		return this;
+-	},
+-
+-	/* Detach a datepicker from its control.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_destroyDatepicker: function(target) {
+-		var nodeName,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		$.removeData(target, PROP_NAME);
+-		if (nodeName === "input") {
+-			inst.append.remove();
+-			inst.trigger.remove();
+-			$target.removeClass(this.markerClassName).
+-				unbind("focus", this._showDatepicker).
+-				unbind("keydown", this._doKeyDown).
+-				unbind("keypress", this._doKeyPress).
+-				unbind("keyup", this._doKeyUp);
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			$target.removeClass(this.markerClassName).empty();
+-		}
+-	},
+-
+-	/* Enable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_enableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = false;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = false; }).end().
+-				filter("img").css({opacity: "1.0", cursor: ""});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().removeClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", false);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-	},
+-
+-	/* Disable the date picker to a jQuery selection.
+-	 * @param  target	element - the target input field or division or span
+-	 */
+-	_disableDatepicker: function(target) {
+-		var nodeName, inline,
+-			$target = $(target),
+-			inst = $.data(target, PROP_NAME);
+-
+-		if (!$target.hasClass(this.markerClassName)) {
+-			return;
+-		}
+-
+-		nodeName = target.nodeName.toLowerCase();
+-		if (nodeName === "input") {
+-			target.disabled = true;
+-			inst.trigger.filter("button").
+-				each(function() { this.disabled = true; }).end().
+-				filter("img").css({opacity: "0.5", cursor: "default"});
+-		} else if (nodeName === "div" || nodeName === "span") {
+-			inline = $target.children("." + this._inlineClass);
+-			inline.children().addClass("ui-state-disabled");
+-			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+-				prop("disabled", true);
+-		}
+-		this._disabledInputs = $.map(this._disabledInputs,
+-			function(value) { return (value === target ? null : value); }); // delete entry
+-		this._disabledInputs[this._disabledInputs.length] = target;
+-	},
+-
+-	/* Is the first field in a jQuery collection disabled as a datepicker?
+-	 * @param  target	element - the target input field or division or span
+-	 * @return boolean - true if disabled, false if enabled
+-	 */
+-	_isDisabledDatepicker: function(target) {
+-		if (!target) {
+-			return false;
+-		}
+-		for (var i = 0; i < this._disabledInputs.length; i++) {
+-			if (this._disabledInputs[i] === target) {
+-				return true;
+-			}
+-		}
+-		return false;
+-	},
+-
+-	/* Retrieve the instance data for the target control.
+-	 * @param  target  element - the target input field or division or span
+-	 * @return  object - the associated instance data
+-	 * @throws  error if a jQuery problem getting data
+-	 */
+-	_getInst: function(target) {
+-		try {
+-			return $.data(target, PROP_NAME);
+-		}
+-		catch (err) {
+-			throw "Missing instance data for this datepicker";
+-		}
+-	},
+-
+-	/* Update or retrieve the settings for a date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 * @param  name	object - the new settings to update or
+-	 *				string - the name of the setting to change or retrieve,
+-	 *				when retrieving also "all" for all instance settings or
+-	 *				"defaults" for all global defaults
+-	 * @param  value   any - the new value for the setting
+-	 *				(omit if above is an object or to retrieve a value)
+-	 */
+-	_optionDatepicker: function(target, name, value) {
+-		var settings, date, minDate, maxDate,
+-			inst = this._getInst(target);
+-
+-		if (arguments.length === 2 && typeof name === "string") {
+-			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+-				(inst ? (name === "all" ? $.extend({}, inst.settings) :
+-				this._get(inst, name)) : null));
+-		}
+-
+-		settings = name || {};
+-		if (typeof name === "string") {
+-			settings = {};
+-			settings[name] = value;
+-		}
+-
+-		if (inst) {
+-			if (this._curInst === inst) {
+-				this._hideDatepicker();
+-			}
+-
+-			date = this._getDateDatepicker(target, true);
+-			minDate = this._getMinMaxDate(inst, "min");
+-			maxDate = this._getMinMaxDate(inst, "max");
+-			extendRemove(inst.settings, settings);
+-			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+-			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+-				inst.settings.minDate = this._formatDate(inst, minDate);
+-			}
+-			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+-				inst.settings.maxDate = this._formatDate(inst, maxDate);
+-			}
+-			if ( "disabled" in settings ) {
+-				if ( settings.disabled ) {
+-					this._disableDatepicker(target);
+-				} else {
+-					this._enableDatepicker(target);
+-				}
+-			}
+-			this._attachments($(target), inst);
+-			this._autoSize(inst);
+-			this._setDate(inst, date);
+-			this._updateAlternate(inst);
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	// change method deprecated
+-	_changeDatepicker: function(target, name, value) {
+-		this._optionDatepicker(target, name, value);
+-	},
+-
+-	/* Redraw the date picker attached to an input field or division.
+-	 * @param  target  element - the target input field or division or span
+-	 */
+-	_refreshDatepicker: function(target) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._updateDatepicker(inst);
+-		}
+-	},
+-
+-	/* Set the dates for a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  date	Date - the new date
+-	 */
+-	_setDateDatepicker: function(target, date) {
+-		var inst = this._getInst(target);
+-		if (inst) {
+-			this._setDate(inst, date);
+-			this._updateDatepicker(inst);
+-			this._updateAlternate(inst);
+-		}
+-	},
+-
+-	/* Get the date(s) for the first entry in a jQuery selection.
+-	 * @param  target element - the target input field or division or span
+-	 * @param  noDefault boolean - true if no default date is to be used
+-	 * @return Date - the current date
+-	 */
+-	_getDateDatepicker: function(target, noDefault) {
+-		var inst = this._getInst(target);
+-		if (inst && !inst.inline) {
+-			this._setDateFromField(inst, noDefault);
+-		}
+-		return (inst ? this._getDate(inst) : null);
+-	},
+-
+-	/* Handle keystrokes. */
+-	_doKeyDown: function(event) {
+-		var onSelect, dateStr, sel,
+-			inst = $.datepicker._getInst(event.target),
+-			handled = true,
+-			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+-
+-		inst._keyEvent = true;
+-		if ($.datepicker._datepickerShowing) {
+-			switch (event.keyCode) {
+-				case 9: $.datepicker._hideDatepicker();
+-						handled = false;
+-						break; // hide on tab out
+-				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+-									$.datepicker._currentClass + ")", inst.dpDiv);
+-						if (sel[0]) {
+-							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+-						}
+-
+-						onSelect = $.datepicker._get(inst, "onSelect");
+-						if (onSelect) {
+-							dateStr = $.datepicker._formatDate(inst);
+-
+-							// trigger custom callback
+-							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+-						} else {
+-							$.datepicker._hideDatepicker();
+-						}
+-
+-						return false; // don't submit the form
+-				case 27: $.datepicker._hideDatepicker();
+-						break; // hide on escape
+-				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							-$.datepicker._get(inst, "stepBigMonths") :
+-							-$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // previous month/year on page up/+ ctrl
+-				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-							+$.datepicker._get(inst, "stepBigMonths") :
+-							+$.datepicker._get(inst, "stepMonths")), "M");
+-						break; // next month/year on page down/+ ctrl
+-				case 35: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._clearDate(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // clear on ctrl or command +end
+-				case 36: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._gotoToday(event.target);
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // current on ctrl or command +home
+-				case 37: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// -1 day on ctrl or command +left
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								-$.datepicker._get(inst, "stepBigMonths") :
+-								-$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +left on Mac
+-						break;
+-				case 38: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, -7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // -1 week on ctrl or command +up
+-				case 39: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						// +1 day on ctrl or command +right
+-						if (event.originalEvent.altKey) {
+-							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+-								+$.datepicker._get(inst, "stepBigMonths") :
+-								+$.datepicker._get(inst, "stepMonths")), "M");
+-						}
+-						// next month/year on alt +right
+-						break;
+-				case 40: if (event.ctrlKey || event.metaKey) {
+-							$.datepicker._adjustDate(event.target, +7, "D");
+-						}
+-						handled = event.ctrlKey || event.metaKey;
+-						break; // +1 week on ctrl or command +down
+-				default: handled = false;
+-			}
+-		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+-			$.datepicker._showDatepicker(this);
+-		} else {
+-			handled = false;
+-		}
+-
+-		if (handled) {
+-			event.preventDefault();
+-			event.stopPropagation();
+-		}
+-	},
+-
+-	/* Filter entered characters - based on date format. */
+-	_doKeyPress: function(event) {
+-		var chars, chr,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if ($.datepicker._get(inst, "constrainInput")) {
+-			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+-			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+-			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+-		}
+-	},
+-
+-	/* Synchronise manual entry and field/alternate field. */
+-	_doKeyUp: function(event) {
+-		var date,
+-			inst = $.datepicker._getInst(event.target);
+-
+-		if (inst.input.val() !== inst.lastVal) {
+-			try {
+-				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-					(inst.input ? inst.input.val() : null),
+-					$.datepicker._getFormatConfig(inst));
+-
+-				if (date) { // only if valid
+-					$.datepicker._setDateFromField(inst);
+-					$.datepicker._updateAlternate(inst);
+-					$.datepicker._updateDatepicker(inst);
+-				}
+-			}
+-			catch (err) {
+-			}
+-		}
+-		return true;
+-	},
+-
+-	/* Pop-up the date picker for a given input field.
+-	 * If false returned from beforeShow event handler do not show.
+-	 * @param  input  element - the input field attached to the date picker or
+-	 *					event - if triggered by focus
+-	 */
+-	_showDatepicker: function(input) {
+-		input = input.target || input;
+-		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+-			input = $("input", input.parentNode)[0];
+-		}
+-
+-		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+-			return;
+-		}
+-
+-		var inst, beforeShow, beforeShowSettings, isFixed,
+-			offset, showAnim, duration;
+-
+-		inst = $.datepicker._getInst(input);
+-		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+-			$.datepicker._curInst.dpDiv.stop(true, true);
+-			if ( inst && $.datepicker._datepickerShowing ) {
+-				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+-			}
+-		}
+-
+-		beforeShow = $.datepicker._get(inst, "beforeShow");
+-		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+-		if(beforeShowSettings === false){
+-			return;
+-		}
+-		extendRemove(inst.settings, beforeShowSettings);
+-
+-		inst.lastVal = null;
+-		$.datepicker._lastInput = input;
+-		$.datepicker._setDateFromField(inst);
+-
+-		if ($.datepicker._inDialog) { // hide cursor
+-			input.value = "";
+-		}
+-		if (!$.datepicker._pos) { // position below input
+-			$.datepicker._pos = $.datepicker._findPos(input);
+-			$.datepicker._pos[1] += input.offsetHeight; // add the height
+-		}
+-
+-		isFixed = false;
+-		$(input).parents().each(function() {
+-			isFixed |= $(this).css("position") === "fixed";
+-			return !isFixed;
+-		});
+-
+-		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+-		$.datepicker._pos = null;
+-		//to avoid flashes on Firefox
+-		inst.dpDiv.empty();
+-		// determine sizing offscreen
+-		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+-		$.datepicker._updateDatepicker(inst);
+-		// fix width for dynamic number of date pickers
+-		// and adjust position before showing
+-		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+-		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+-			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
+-			left: offset.left + "px", top: offset.top + "px"});
+-
+-		if (!inst.inline) {
+-			showAnim = $.datepicker._get(inst, "showAnim");
+-			duration = $.datepicker._get(inst, "duration");
+-			inst.dpDiv.zIndex($(input).zIndex()+1);
+-			$.datepicker._datepickerShowing = true;
+-
+-			if ( $.effects && $.effects.effect[ showAnim ] ) {
+-				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+-			} else {
+-				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+-			}
+-
+-			if ( $.datepicker._shouldFocusInput( inst ) ) {
+-				inst.input.focus();
+-			}
+-
+-			$.datepicker._curInst = inst;
+-		}
+-	},
+-
+-	/* Generate the date picker content. */
+-	_updateDatepicker: function(inst) {
+-		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+-		instActive = inst; // for delegate hover events
+-		inst.dpDiv.empty().append(this._generateHTML(inst));
+-		this._attachHandlers(inst);
+-		inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
+-
+-		var origyearshtml,
+-			numMonths = this._getNumberOfMonths(inst),
+-			cols = numMonths[1],
+-			width = 17;
+-
+-		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+-		if (cols > 1) {
+-			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+-		}
+-		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+-			"Class"]("ui-datepicker-multi");
+-		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+-			"Class"]("ui-datepicker-rtl");
+-
+-		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+-			inst.input.focus();
+-		}
+-
+-		// deffered render of the years select (to avoid flashes on Firefox)
+-		if( inst.yearshtml ){
+-			origyearshtml = inst.yearshtml;
+-			setTimeout(function(){
+-				//assure that inst.yearshtml didn't change.
+-				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+-					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+-				}
+-				origyearshtml = inst.yearshtml = null;
+-			}, 0);
+-		}
+-	},
+-
+-	// #6694 - don't focus the input if it's already focused
+-	// this breaks the change event in IE
+-	// Support: IE and jQuery <1.9
+-	_shouldFocusInput: function( inst ) {
+-		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+-	},
+-
+-	/* Check positioning to remain on screen. */
+-	_checkOffset: function(inst, offset, isFixed) {
+-		var dpWidth = inst.dpDiv.outerWidth(),
+-			dpHeight = inst.dpDiv.outerHeight(),
+-			inputWidth = inst.input ? inst.input.outerWidth() : 0,
+-			inputHeight = inst.input ? inst.input.outerHeight() : 0,
+-			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+-			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+-
+-		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+-		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+-		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+-
+-		// now check if datepicker is showing outside window viewport - move to a better place if so.
+-		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+-			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+-		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+-			Math.abs(dpHeight + inputHeight) : 0);
+-
+-		return offset;
+-	},
+-
+-	/* Find an object's position on the screen. */
+-	_findPos: function(obj) {
+-		var position,
+-			inst = this._getInst(obj),
+-			isRTL = this._get(inst, "isRTL");
+-
+-		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+-			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+-		}
+-
+-		position = $(obj).offset();
+-		return [position.left, position.top];
+-	},
+-
+-	/* Hide the date picker from view.
+-	 * @param  input  element - the input field attached to the date picker
+-	 */
+-	_hideDatepicker: function(input) {
+-		var showAnim, duration, postProcess, onClose,
+-			inst = this._curInst;
+-
+-		if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
+-			return;
+-		}
+-
+-		if (this._datepickerShowing) {
+-			showAnim = this._get(inst, "showAnim");
+-			duration = this._get(inst, "duration");
+-			postProcess = function() {
+-				$.datepicker._tidyDialog(inst);
+-			};
+-
+-			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+-			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+-				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+-			} else {
+-				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+-					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+-			}
+-
+-			if (!showAnim) {
+-				postProcess();
+-			}
+-			this._datepickerShowing = false;
+-
+-			onClose = this._get(inst, "onClose");
+-			if (onClose) {
+-				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+-			}
+-
+-			this._lastInput = null;
+-			if (this._inDialog) {
+-				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+-				if ($.blockUI) {
+-					$.unblockUI();
+-					$("body").append(this.dpDiv);
+-				}
+-			}
+-			this._inDialog = false;
+-		}
+-	},
+-
+-	/* Tidy up after a dialog display. */
+-	_tidyDialog: function(inst) {
+-		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+-	},
+-
+-	/* Close date picker if clicked elsewhere. */
+-	_checkExternalClick: function(event) {
+-		if (!$.datepicker._curInst) {
+-			return;
+-		}
+-
+-		var $target = $(event.target),
+-			inst = $.datepicker._getInst($target[0]);
+-
+-		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+-				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+-				!$target.hasClass($.datepicker.markerClassName) &&
+-				!$target.closest("." + $.datepicker._triggerClass).length &&
+-				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+-			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+-				$.datepicker._hideDatepicker();
+-		}
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustDate: function(id, offset, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-		this._adjustInstDate(inst, offset +
+-			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+-			period);
+-		this._updateDatepicker(inst);
+-	},
+-
+-	/* Action for current link. */
+-	_gotoToday: function(id) {
+-		var date,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+-			inst.selectedDay = inst.currentDay;
+-			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+-			inst.drawYear = inst.selectedYear = inst.currentYear;
+-		} else {
+-			date = new Date();
+-			inst.selectedDay = date.getDate();
+-			inst.drawMonth = inst.selectedMonth = date.getMonth();
+-			inst.drawYear = inst.selectedYear = date.getFullYear();
+-		}
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a new month/year. */
+-	_selectMonthYear: function(id, select, period) {
+-		var target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		inst["selected" + (period === "M" ? "Month" : "Year")] =
+-		inst["draw" + (period === "M" ? "Month" : "Year")] =
+-			parseInt(select.options[select.selectedIndex].value,10);
+-
+-		this._notifyChange(inst);
+-		this._adjustDate(target);
+-	},
+-
+-	/* Action for selecting a day. */
+-	_selectDay: function(id, month, year, td) {
+-		var inst,
+-			target = $(id);
+-
+-		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+-			return;
+-		}
+-
+-		inst = this._getInst(target[0]);
+-		inst.selectedDay = inst.currentDay = $("a", td).html();
+-		inst.selectedMonth = inst.currentMonth = month;
+-		inst.selectedYear = inst.currentYear = year;
+-		this._selectDate(id, this._formatDate(inst,
+-			inst.currentDay, inst.currentMonth, inst.currentYear));
+-	},
+-
+-	/* Erase the input field and hide the date picker. */
+-	_clearDate: function(id) {
+-		var target = $(id);
+-		this._selectDate(target, "");
+-	},
+-
+-	/* Update the input field with the selected date. */
+-	_selectDate: function(id, dateStr) {
+-		var onSelect,
+-			target = $(id),
+-			inst = this._getInst(target[0]);
+-
+-		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+-		if (inst.input) {
+-			inst.input.val(dateStr);
+-		}
+-		this._updateAlternate(inst);
+-
+-		onSelect = this._get(inst, "onSelect");
+-		if (onSelect) {
+-			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+-		} else if (inst.input) {
+-			inst.input.trigger("change"); // fire the change event
+-		}
+-
+-		if (inst.inline){
+-			this._updateDatepicker(inst);
+-		} else {
+-			this._hideDatepicker();
+-			this._lastInput = inst.input[0];
+-			if (typeof(inst.input[0]) !== "object") {
+-				inst.input.focus(); // restore focus
+-			}
+-			this._lastInput = null;
+-		}
+-	},
+-
+-	/* Update any alternate field to synchronise with the main field. */
+-	_updateAlternate: function(inst) {
+-		var altFormat, date, dateStr,
+-			altField = this._get(inst, "altField");
+-
+-		if (altField) { // update alternate field too
+-			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+-			date = this._getDate(inst);
+-			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+-			$(altField).each(function() { $(this).val(dateStr); });
+-		}
+-	},
+-
+-	/* Set as beforeShowDay function to prevent selection of weekends.
+-	 * @param  date  Date - the date to customise
+-	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
+-	 */
+-	noWeekends: function(date) {
+-		var day = date.getDay();
+-		return [(day > 0 && day < 6), ""];
+-	},
+-
+-	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+-	 * @param  date  Date - the date to get the week for
+-	 * @return  number - the number of the week within the year that contains this date
+-	 */
+-	iso8601Week: function(date) {
+-		var time,
+-			checkDate = new Date(date.getTime());
+-
+-		// Find Thursday of this week starting on Monday
+-		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+-
+-		time = checkDate.getTime();
+-		checkDate.setMonth(0); // Compare with Jan 1
+-		checkDate.setDate(1);
+-		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+-	},
+-
+-	/* Parse a string value into a date object.
+-	 * See formatDate below for the possible formats.
+-	 *
+-	 * @param  format string - the expected format of the date
+-	 * @param  value string - the date in the above format
+-	 * @param  settings Object - attributes include:
+-	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  Date - the extracted date value or null if value is blank
+-	 */
+-	parseDate: function (format, value, settings) {
+-		if (format == null || value == null) {
+-			throw "Invalid arguments";
+-		}
+-
+-		value = (typeof value === "object" ? value.toString() : value + "");
+-		if (value === "") {
+-			return null;
+-		}
+-
+-		var iFormat, dim, extra,
+-			iValue = 0,
+-			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+-			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+-				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			year = -1,
+-			month = -1,
+-			day = -1,
+-			doy = -1,
+-			literal = false,
+-			date,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Extract a number from the string value
+-			getNumber = function(match) {
+-				var isDoubled = lookAhead(match),
+-					size = (match === "@" ? 14 : (match === "!" ? 20 :
+-					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+-					digits = new RegExp("^\\d{1," + size + "}"),
+-					num = value.substring(iValue).match(digits);
+-				if (!num) {
+-					throw "Missing number at position " + iValue;
+-				}
+-				iValue += num[0].length;
+-				return parseInt(num[0], 10);
+-			},
+-			// Extract a name from the string value and convert to an index
+-			getName = function(match, shortNames, longNames) {
+-				var index = -1,
+-					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+-						return [ [k, v] ];
+-					}).sort(function (a, b) {
+-						return -(a[1].length - b[1].length);
+-					});
+-
+-				$.each(names, function (i, pair) {
+-					var name = pair[1];
+-					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+-						index = pair[0];
+-						iValue += name.length;
+-						return false;
+-					}
+-				});
+-				if (index !== -1) {
+-					return index + 1;
+-				} else {
+-					throw "Unknown name at position " + iValue;
+-				}
+-			},
+-			// Confirm that a literal character matches the string value
+-			checkLiteral = function() {
+-				if (value.charAt(iValue) !== format.charAt(iFormat)) {
+-					throw "Unexpected literal at position " + iValue;
+-				}
+-				iValue++;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					checkLiteral();
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d":
+-						day = getNumber("d");
+-						break;
+-					case "D":
+-						getName("D", dayNamesShort, dayNames);
+-						break;
+-					case "o":
+-						doy = getNumber("o");
+-						break;
+-					case "m":
+-						month = getNumber("m");
+-						break;
+-					case "M":
+-						month = getName("M", monthNamesShort, monthNames);
+-						break;
+-					case "y":
+-						year = getNumber("y");
+-						break;
+-					case "@":
+-						date = new Date(getNumber("@"));
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "!":
+-						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+-						year = date.getFullYear();
+-						month = date.getMonth() + 1;
+-						day = date.getDate();
+-						break;
+-					case "'":
+-						if (lookAhead("'")){
+-							checkLiteral();
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						checkLiteral();
+-				}
+-			}
+-		}
+-
+-		if (iValue < value.length){
+-			extra = value.substr(iValue);
+-			if (!/^\s+/.test(extra)) {
+-				throw "Extra/unparsed characters found in date: " + extra;
+-			}
+-		}
+-
+-		if (year === -1) {
+-			year = new Date().getFullYear();
+-		} else if (year < 100) {
+-			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+-				(year <= shortYearCutoff ? 0 : -100);
+-		}
+-
+-		if (doy > -1) {
+-			month = 1;
+-			day = doy;
+-			do {
+-				dim = this._getDaysInMonth(year, month - 1);
+-				if (day <= dim) {
+-					break;
+-				}
+-				month++;
+-				day -= dim;
+-			} while (true);
+-		}
+-
+-		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+-		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+-			throw "Invalid date"; // E.g. 31/02/00
+-		}
+-		return date;
+-	},
+-
+-	/* Standard date formats. */
+-	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+-	COOKIE: "D, dd M yy",
+-	ISO_8601: "yy-mm-dd",
+-	RFC_822: "D, d M y",
+-	RFC_850: "DD, dd-M-y",
+-	RFC_1036: "D, d M y",
+-	RFC_1123: "D, d M yy",
+-	RFC_2822: "D, d M yy",
+-	RSS: "D, d M y", // RFC 822
+-	TICKS: "!",
+-	TIMESTAMP: "@",
+-	W3C: "yy-mm-dd", // ISO 8601
+-
+-	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+-		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+-
+-	/* Format a date object into a string value.
+-	 * The format can be combinations of the following:
+-	 * d  - day of month (no leading zero)
+-	 * dd - day of month (two digit)
+-	 * o  - day of year (no leading zeros)
+-	 * oo - day of year (three digit)
+-	 * D  - day name short
+-	 * DD - day name long
+-	 * m  - month of year (no leading zero)
+-	 * mm - month of year (two digit)
+-	 * M  - month name short
+-	 * MM - month name long
+-	 * y  - year (two digit)
+-	 * yy - year (four digit)
+-	 * @ - Unix timestamp (ms since 01/01/1970)
+-	 * ! - Windows ticks (100ns since 01/01/0001)
+-	 * "..." - literal text
+-	 * '' - single quote
+-	 *
+-	 * @param  format string - the desired format of the date
+-	 * @param  date Date - the date value to format
+-	 * @param  settings Object - attributes include:
+-	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+-	 *					dayNames		string[7] - names of the days from Sunday (optional)
+-	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+-	 *					monthNames		string[12] - names of the months (optional)
+-	 * @return  string - the date in the above format
+-	 */
+-	formatDate: function (format, date, settings) {
+-		if (!date) {
+-			return "";
+-		}
+-
+-		var iFormat,
+-			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+-			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+-			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+-			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			},
+-			// Format a number, with leading zero if necessary
+-			formatNumber = function(match, value, len) {
+-				var num = "" + value;
+-				if (lookAhead(match)) {
+-					while (num.length < len) {
+-						num = "0" + num;
+-					}
+-				}
+-				return num;
+-			},
+-			// Format a name, short or long as requested
+-			formatName = function(match, value, shortNames, longNames) {
+-				return (lookAhead(match) ? longNames[value] : shortNames[value]);
+-			},
+-			output = "",
+-			literal = false;
+-
+-		if (date) {
+-			for (iFormat = 0; iFormat < format.length; iFormat++) {
+-				if (literal) {
+-					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-						literal = false;
+-					} else {
+-						output += format.charAt(iFormat);
+-					}
+-				} else {
+-					switch (format.charAt(iFormat)) {
+-						case "d":
+-							output += formatNumber("d", date.getDate(), 2);
+-							break;
+-						case "D":
+-							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+-							break;
+-						case "o":
+-							output += formatNumber("o",
+-								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+-							break;
+-						case "m":
+-							output += formatNumber("m", date.getMonth() + 1, 2);
+-							break;
+-						case "M":
+-							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+-							break;
+-						case "y":
+-							output += (lookAhead("y") ? date.getFullYear() :
+-								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+-							break;
+-						case "@":
+-							output += date.getTime();
+-							break;
+-						case "!":
+-							output += date.getTime() * 10000 + this._ticksTo1970;
+-							break;
+-						case "'":
+-							if (lookAhead("'")) {
+-								output += "'";
+-							} else {
+-								literal = true;
+-							}
+-							break;
+-						default:
+-							output += format.charAt(iFormat);
+-					}
+-				}
+-			}
+-		}
+-		return output;
+-	},
+-
+-	/* Extract all possible characters from the date format. */
+-	_possibleChars: function (format) {
+-		var iFormat,
+-			chars = "",
+-			literal = false,
+-			// Check whether a format character is doubled
+-			lookAhead = function(match) {
+-				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+-				if (matches) {
+-					iFormat++;
+-				}
+-				return matches;
+-			};
+-
+-		for (iFormat = 0; iFormat < format.length; iFormat++) {
+-			if (literal) {
+-				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+-					literal = false;
+-				} else {
+-					chars += format.charAt(iFormat);
+-				}
+-			} else {
+-				switch (format.charAt(iFormat)) {
+-					case "d": case "m": case "y": case "@":
+-						chars += "0123456789";
+-						break;
+-					case "D": case "M":
+-						return null; // Accept anything
+-					case "'":
+-						if (lookAhead("'")) {
+-							chars += "'";
+-						} else {
+-							literal = true;
+-						}
+-						break;
+-					default:
+-						chars += format.charAt(iFormat);
+-				}
+-			}
+-		}
+-		return chars;
+-	},
+-
+-	/* Get a setting value, defaulting if necessary. */
+-	_get: function(inst, name) {
+-		return inst.settings[name] !== undefined ?
+-			inst.settings[name] : this._defaults[name];
+-	},
+-
+-	/* Parse existing date and initialise date picker. */
+-	_setDateFromField: function(inst, noDefault) {
+-		if (inst.input.val() === inst.lastVal) {
+-			return;
+-		}
+-
+-		var dateFormat = this._get(inst, "dateFormat"),
+-			dates = inst.lastVal = inst.input ? inst.input.val() : null,
+-			defaultDate = this._getDefaultDate(inst),
+-			date = defaultDate,
+-			settings = this._getFormatConfig(inst);
+-
+-		try {
+-			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+-		} catch (event) {
+-			dates = (noDefault ? "" : dates);
+-		}
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		inst.currentDay = (dates ? date.getDate() : 0);
+-		inst.currentMonth = (dates ? date.getMonth() : 0);
+-		inst.currentYear = (dates ? date.getFullYear() : 0);
+-		this._adjustInstDate(inst);
+-	},
+-
+-	/* Retrieve the default date shown on opening. */
+-	_getDefaultDate: function(inst) {
+-		return this._restrictMinMax(inst,
+-			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+-	},
+-
+-	/* A date may be specified as an exact value or a relative one. */
+-	_determineDate: function(inst, date, defaultDate) {
+-		var offsetNumeric = function(offset) {
+-				var date = new Date();
+-				date.setDate(date.getDate() + offset);
+-				return date;
+-			},
+-			offsetString = function(offset) {
+-				try {
+-					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+-						offset, $.datepicker._getFormatConfig(inst));
+-				}
+-				catch (e) {
+-					// Ignore
+-				}
+-
+-				var date = (offset.toLowerCase().match(/^c/) ?
+-					$.datepicker._getDate(inst) : null) || new Date(),
+-					year = date.getFullYear(),
+-					month = date.getMonth(),
+-					day = date.getDate(),
+-					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+-					matches = pattern.exec(offset);
+-
+-				while (matches) {
+-					switch (matches[2] || "d") {
+-						case "d" : case "D" :
+-							day += parseInt(matches[1],10); break;
+-						case "w" : case "W" :
+-							day += parseInt(matches[1],10) * 7; break;
+-						case "m" : case "M" :
+-							month += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-						case "y": case "Y" :
+-							year += parseInt(matches[1],10);
+-							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+-							break;
+-					}
+-					matches = pattern.exec(offset);
+-				}
+-				return new Date(year, month, day);
+-			},
+-			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+-				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+-
+-		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+-		if (newDate) {
+-			newDate.setHours(0);
+-			newDate.setMinutes(0);
+-			newDate.setSeconds(0);
+-			newDate.setMilliseconds(0);
+-		}
+-		return this._daylightSavingAdjust(newDate);
+-	},
+-
+-	/* Handle switch to/from daylight saving.
+-	 * Hours may be non-zero on daylight saving cut-over:
+-	 * > 12 when midnight changeover, but then cannot generate
+-	 * midnight datetime, so jump to 1AM, otherwise reset.
+-	 * @param  date  (Date) the date to check
+-	 * @return  (Date) the corrected date
+-	 */
+-	_daylightSavingAdjust: function(date) {
+-		if (!date) {
+-			return null;
+-		}
+-		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+-		return date;
+-	},
+-
+-	/* Set the date(s) directly. */
+-	_setDate: function(inst, date, noChange) {
+-		var clear = !date,
+-			origMonth = inst.selectedMonth,
+-			origYear = inst.selectedYear,
+-			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+-
+-		inst.selectedDay = inst.currentDay = newDate.getDate();
+-		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+-		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+-		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+-			this._notifyChange(inst);
+-		}
+-		this._adjustInstDate(inst);
+-		if (inst.input) {
+-			inst.input.val(clear ? "" : this._formatDate(inst));
+-		}
+-	},
+-
+-	/* Retrieve the date(s) directly. */
+-	_getDate: function(inst) {
+-		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+-			this._daylightSavingAdjust(new Date(
+-			inst.currentYear, inst.currentMonth, inst.currentDay)));
+-			return startDate;
+-	},
+-
+-	/* Attach the onxxx handlers.  These are declared statically so
+-	 * they work with static code transformers like Caja.
+-	 */
+-	_attachHandlers: function(inst) {
+-		var stepMonths = this._get(inst, "stepMonths"),
+-			id = "#" + inst.id.replace( /\\\\/g, "\\" );
+-		inst.dpDiv.find("[data-handler]").map(function () {
+-			var handler = {
+-				prev: function () {
+-					$.datepicker._adjustDate(id, -stepMonths, "M");
+-				},
+-				next: function () {
+-					$.datepicker._adjustDate(id, +stepMonths, "M");
+-				},
+-				hide: function () {
+-					$.datepicker._hideDatepicker();
+-				},
+-				today: function () {
+-					$.datepicker._gotoToday(id);
+-				},
+-				selectDay: function () {
+-					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+-					return false;
+-				},
+-				selectMonth: function () {
+-					$.datepicker._selectMonthYear(id, this, "M");
+-					return false;
+-				},
+-				selectYear: function () {
+-					$.datepicker._selectMonthYear(id, this, "Y");
+-					return false;
+-				}
+-			};
+-			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+-		});
+-	},
+-
+-	/* Generate the HTML for the current state of the date picker. */
+-	_generateHTML: function(inst) {
+-		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+-			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+-			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+-			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+-			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+-			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+-			tempDate = new Date(),
+-			today = this._daylightSavingAdjust(
+-				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+-			isRTL = this._get(inst, "isRTL"),
+-			showButtonPanel = this._get(inst, "showButtonPanel"),
+-			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+-			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+-			numMonths = this._getNumberOfMonths(inst),
+-			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+-			stepMonths = this._get(inst, "stepMonths"),
+-			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+-			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+-				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			drawMonth = inst.drawMonth - showCurrentAtPos,
+-			drawYear = inst.drawYear;
+-
+-		if (drawMonth < 0) {
+-			drawMonth += 12;
+-			drawYear--;
+-		}
+-		if (maxDate) {
+-			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+-				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+-			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+-			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+-				drawMonth--;
+-				if (drawMonth < 0) {
+-					drawMonth = 11;
+-					drawYear--;
+-				}
+-			}
+-		}
+-		inst.drawMonth = drawMonth;
+-		inst.drawYear = drawYear;
+-
+-		prevText = this._get(inst, "prevText");
+-		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+-			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+-
+-		nextText = this._get(inst, "nextText");
+-		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+-			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+-			this._getFormatConfig(inst)));
+-
+-		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+-			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+-			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+-			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+-
+-		currentText = this._get(inst, "currentText");
+-		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+-		currentText = (!navigationAsDateFormat ? currentText :
+-			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+-
+-		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+-			this._get(inst, "closeText") + "</button>" : "");
+-
+-		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+-			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+-			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+-
+-		firstDay = parseInt(this._get(inst, "firstDay"),10);
+-		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+-
+-		showWeek = this._get(inst, "showWeek");
+-		dayNames = this._get(inst, "dayNames");
+-		dayNamesMin = this._get(inst, "dayNamesMin");
+-		monthNames = this._get(inst, "monthNames");
+-		monthNamesShort = this._get(inst, "monthNamesShort");
+-		beforeShowDay = this._get(inst, "beforeShowDay");
+-		showOtherMonths = this._get(inst, "showOtherMonths");
+-		selectOtherMonths = this._get(inst, "selectOtherMonths");
+-		defaultDate = this._getDefaultDate(inst);
+-		html = "";
+-		dow;
+-		for (row = 0; row < numMonths[0]; row++) {
+-			group = "";
+-			this.maxRows = 4;
+-			for (col = 0; col < numMonths[1]; col++) {
+-				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+-				cornerClass = " ui-corner-all";
+-				calender = "";
+-				if (isMultiMonth) {
+-					calender += "<div class='ui-datepicker-group";
+-					if (numMonths[1] > 1) {
+-						switch (col) {
+-							case 0: calender += " ui-datepicker-group-first";
+-								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+-							case numMonths[1]-1: calender += " ui-datepicker-group-last";
+-								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+-							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+-						}
+-					}
+-					calender += "'>";
+-				}
+-				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+-					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+-					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+-					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+-					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+-					"</div><table class='ui-datepicker-calendar'><thead>" +
+-					"<tr>";
+-				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+-				for (dow = 0; dow < 7; dow++) { // days of the week
+-					day = (dow + firstDay) % 7;
+-					thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+-						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+-				}
+-				calender += thead + "</tr></thead><tbody>";
+-				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+-				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+-					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+-				}
+-				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+-				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+-				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+-				this.maxRows = numRows;
+-				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+-				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+-					calender += "<tr>";
+-					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+-						this._get(inst, "calculateWeek")(printDate) + "</td>");
+-					for (dow = 0; dow < 7; dow++) { // create date picker days
+-						daySettings = (beforeShowDay ?
+-							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+-						otherMonth = (printDate.getMonth() !== drawMonth);
+-						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+-							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+-						tbody += "<td class='" +
+-							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+-							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+-							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+-							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+-							// or defaultDate is current printedDate and defaultDate is selectedDate
+-							" " + this._dayOverClass : "") + // highlight selected day
+-							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
+-							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+-							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+-							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+-							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+-							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+-							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+-							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+-							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+-							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+-							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+-							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+-						printDate.setDate(printDate.getDate() + 1);
+-						printDate = this._daylightSavingAdjust(printDate);
+-					}
+-					calender += tbody + "</tr>";
+-				}
+-				drawMonth++;
+-				if (drawMonth > 11) {
+-					drawMonth = 0;
+-					drawYear++;
+-				}
+-				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+-							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+-				group += calender;
+-			}
+-			html += group;
+-		}
+-		html += buttonPanel;
+-		inst._keyEvent = false;
+-		return html;
+-	},
+-
+-	/* Generate the month and year header. */
+-	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+-			secondary, monthNames, monthNamesShort) {
+-
+-		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+-			changeMonth = this._get(inst, "changeMonth"),
+-			changeYear = this._get(inst, "changeYear"),
+-			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+-			html = "<div class='ui-datepicker-title'>",
+-			monthHtml = "";
+-
+-		// month selection
+-		if (secondary || !changeMonth) {
+-			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+-		} else {
+-			inMinYear = (minDate && minDate.getFullYear() === drawYear);
+-			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+-			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+-			for ( month = 0; month < 12; month++) {
+-				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+-					monthHtml += "<option value='" + month + "'" +
+-						(month === drawMonth ? " selected='selected'" : "") +
+-						">" + monthNamesShort[month] + "</option>";
+-				}
+-			}
+-			monthHtml += "</select>";
+-		}
+-
+-		if (!showMonthAfterYear) {
+-			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+-		}
+-
+-		// year selection
+-		if ( !inst.yearshtml ) {
+-			inst.yearshtml = "";
+-			if (secondary || !changeYear) {
+-				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+-			} else {
+-				// determine range of years to display
+-				years = this._get(inst, "yearRange").split(":");
+-				thisYear = new Date().getFullYear();
+-				determineYear = function(value) {
+-					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+-						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+-						parseInt(value, 10)));
+-					return (isNaN(year) ? thisYear : year);
+-				};
+-				year = determineYear(years[0]);
+-				endYear = Math.max(year, determineYear(years[1] || ""));
+-				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+-				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+-				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+-				for (; year <= endYear; year++) {
+-					inst.yearshtml += "<option value='" + year + "'" +
+-						(year === drawYear ? " selected='selected'" : "") +
+-						">" + year + "</option>";
+-				}
+-				inst.yearshtml += "</select>";
+-
+-				html += inst.yearshtml;
+-				inst.yearshtml = null;
+-			}
+-		}
+-
+-		html += this._get(inst, "yearSuffix");
+-		if (showMonthAfterYear) {
+-			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+-		}
+-		html += "</div>"; // Close datepicker_header
+-		return html;
+-	},
+-
+-	/* Adjust one of the date sub-fields. */
+-	_adjustInstDate: function(inst, offset, period) {
+-		var year = inst.drawYear + (period === "Y" ? offset : 0),
+-			month = inst.drawMonth + (period === "M" ? offset : 0),
+-			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+-			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+-
+-		inst.selectedDay = date.getDate();
+-		inst.drawMonth = inst.selectedMonth = date.getMonth();
+-		inst.drawYear = inst.selectedYear = date.getFullYear();
+-		if (period === "M" || period === "Y") {
+-			this._notifyChange(inst);
+-		}
+-	},
+-
+-	/* Ensure a date is within any min/max bounds. */
+-	_restrictMinMax: function(inst, date) {
+-		var minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			newDate = (minDate && date < minDate ? minDate : date);
+-		return (maxDate && newDate > maxDate ? maxDate : newDate);
+-	},
+-
+-	/* Notify change of month/year. */
+-	_notifyChange: function(inst) {
+-		var onChange = this._get(inst, "onChangeMonthYear");
+-		if (onChange) {
+-			onChange.apply((inst.input ? inst.input[0] : null),
+-				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+-		}
+-	},
+-
+-	/* Determine the number of months to show. */
+-	_getNumberOfMonths: function(inst) {
+-		var numMonths = this._get(inst, "numberOfMonths");
+-		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+-	},
+-
+-	/* Determine the current maximum date - ensure no time components are set. */
+-	_getMinMaxDate: function(inst, minMax) {
+-		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+-	},
+-
+-	/* Find the number of days in a given month. */
+-	_getDaysInMonth: function(year, month) {
+-		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+-	},
+-
+-	/* Find the day of the week of the first of a month. */
+-	_getFirstDayOfMonth: function(year, month) {
+-		return new Date(year, month, 1).getDay();
+-	},
+-
+-	/* Determines if we should allow a "next/prev" month display change. */
+-	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+-		var numMonths = this._getNumberOfMonths(inst),
+-			date = this._daylightSavingAdjust(new Date(curYear,
+-			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+-
+-		if (offset < 0) {
+-			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+-		}
+-		return this._isInRange(inst, date);
+-	},
+-
+-	/* Is the given date in the accepted range? */
+-	_isInRange: function(inst, date) {
+-		var yearSplit, currentYear,
+-			minDate = this._getMinMaxDate(inst, "min"),
+-			maxDate = this._getMinMaxDate(inst, "max"),
+-			minYear = null,
+-			maxYear = null,
+-			years = this._get(inst, "yearRange");
+-			if (years){
+-				yearSplit = years.split(":");
+-				currentYear = new Date().getFullYear();
+-				minYear = parseInt(yearSplit[0], 10);
+-				maxYear = parseInt(yearSplit[1], 10);
+-				if ( yearSplit[0].match(/[+\-].*/) ) {
+-					minYear += currentYear;
+-				}
+-				if ( yearSplit[1].match(/[+\-].*/) ) {
+-					maxYear += currentYear;
+-				}
+-			}
+-
+-		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+-			(!maxDate || date.getTime() <= maxDate.getTime()) &&
+-			(!minYear || date.getFullYear() >= minYear) &&
+-			(!maxYear || date.getFullYear() <= maxYear));
+-	},
+-
+-	/* Provide the configuration settings for formatting/parsing. */
+-	_getFormatConfig: function(inst) {
+-		var shortYearCutoff = this._get(inst, "shortYearCutoff");
+-		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+-			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+-		return {shortYearCutoff: shortYearCutoff,
+-			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+-			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+-	},
+-
+-	/* Format the given date for display. */
+-	_formatDate: function(inst, day, month, year) {
+-		if (!day) {
+-			inst.currentDay = inst.selectedDay;
+-			inst.currentMonth = inst.selectedMonth;
+-			inst.currentYear = inst.selectedYear;
+-		}
+-		var date = (day ? (typeof day === "object" ? day :
+-			this._daylightSavingAdjust(new Date(year, month, day))) :
+-			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+-		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+-	}
+-});
+-
+-/*
+- * Bind hover events for datepicker elements.
+- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+- */
+-function bindHover(dpDiv) {
+-	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+-	return dpDiv.delegate(selector, "mouseout", function() {
+-			$(this).removeClass("ui-state-hover");
+-			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-				$(this).removeClass("ui-datepicker-prev-hover");
+-			}
+-			if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-				$(this).removeClass("ui-datepicker-next-hover");
+-			}
+-		})
+-		.delegate(selector, "mouseover", function(){
+-			if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
+-				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+-				$(this).addClass("ui-state-hover");
+-				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+-					$(this).addClass("ui-datepicker-prev-hover");
+-				}
+-				if (this.className.indexOf("ui-datepicker-next") !== -1) {
+-					$(this).addClass("ui-datepicker-next-hover");
+-				}
+-			}
+-		});
+-}
+-
+-/* jQuery extend now ignores nulls! */
+-function extendRemove(target, props) {
+-	$.extend(target, props);
+-	for (var name in props) {
+-		if (props[name] == null) {
+-			target[name] = props[name];
+-		}
+-	}
+-	return target;
+-}
+-
+-/* Invoke the datepicker functionality.
+-   @param  options  string - a command, optionally followed by additional parameters or
+-					Object - settings for attaching new datepicker functionality
+-   @return  jQuery object */
+-$.fn.datepicker = function(options){
+-
+-	/* Verify an empty collection wasn't passed - Fixes #6976 */
+-	if ( !this.length ) {
+-		return this;
+-	}
+-
+-	/* Initialise the date picker. */
+-	if (!$.datepicker.initialized) {
+-		$(document).mousedown($.datepicker._checkExternalClick);
+-		$.datepicker.initialized = true;
+-	}
+-
+-	/* Append datepicker main container to body if not exist. */
+-	if ($("#"+$.datepicker._mainDivId).length === 0) {
+-		$("body").append($.datepicker.dpDiv);
+-	}
+-
+-	var otherArgs = Array.prototype.slice.call(arguments, 1);
+-	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+-		return $.datepicker["_" + options + "Datepicker"].
+-			apply($.datepicker, [this[0]].concat(otherArgs));
+-	}
+-	return this.each(function() {
+-		typeof options === "string" ?
+-			$.datepicker["_" + options + "Datepicker"].
+-				apply($.datepicker, [this].concat(otherArgs)) :
+-			$.datepicker._attachDatepicker(this, options);
+-	});
+-};
+-
+-$.datepicker = new Datepicker(); // singleton instance
+-$.datepicker.initialized = false;
+-$.datepicker.uuid = new Date().getTime();
+-$.datepicker.version = "1.10.3";
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fold.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fold.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fold.js	(revision 15488)
+@@ -1,76 +0,0 @@
+-/*!
+- * jQuery UI Effects Fold 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/fold-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.fold = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		show = mode === "show",
+-		hide = mode === "hide",
+-		size = o.size || 15,
+-		percent = /([0-9]+)%/.exec( size ),
+-		horizFirst = !!o.horizFirst,
+-		widthFirst = show !== horizFirst,
+-		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+-		duration = o.duration / 2,
+-		wrapper, distance,
+-		animation1 = {},
+-		animation2 = {};
+-
+-	$.effects.save( el, props );
+-	el.show();
+-
+-	// Create Wrapper
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-	distance = widthFirst ?
+-		[ wrapper.width(), wrapper.height() ] :
+-		[ wrapper.height(), wrapper.width() ];
+-
+-	if ( percent ) {
+-		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+-	}
+-	if ( show ) {
+-		wrapper.css( horizFirst ? {
+-			height: 0,
+-			width: size
+-		} : {
+-			height: size,
+-			width: 0
+-		});
+-	}
+-
+-	// Animation
+-	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+-	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+-
+-	// Animate
+-	wrapper
+-		.animate( animation1, duration, o.easing )
+-		.animate( animation2, duration, o.easing, function() {
+-			if ( hide ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		});
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.spinner.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.spinner.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.spinner.js	(revision 15488)
+@@ -1,493 +0,0 @@
+-/*!
+- * jQuery UI Spinner 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/spinner/
+- *
+- * Depends:
+- *  jquery.ui.core.js
+- *  jquery.ui.widget.js
+- *  jquery.ui.button.js
+- */
+-(function( $ ) {
+-
+-function modifier( fn ) {
+-	return function() {
+-		var previous = this.element.val();
+-		fn.apply( this, arguments );
+-		this._refresh();
+-		if ( previous !== this.element.val() ) {
+-			this._trigger( "change" );
+-		}
+-	};
+-}
+-
+-$.widget( "ui.spinner", {
+-	version: "1.10.3",
+-	defaultElement: "<input>",
+-	widgetEventPrefix: "spin",
+-	options: {
+-		culture: null,
+-		icons: {
+-			down: "ui-icon-triangle-1-s",
+-			up: "ui-icon-triangle-1-n"
+-		},
+-		incremental: true,
+-		max: null,
+-		min: null,
+-		numberFormat: null,
+-		page: 10,
+-		step: 1,
+-
+-		change: null,
+-		spin: null,
+-		start: null,
+-		stop: null
+-	},
+-
+-	_create: function() {
+-		// handle string values that need to be parsed
+-		this._setOption( "max", this.options.max );
+-		this._setOption( "min", this.options.min );
+-		this._setOption( "step", this.options.step );
+-
+-		// format the value, but don't constrain
+-		this._value( this.element.val(), true );
+-
+-		this._draw();
+-		this._on( this._events );
+-		this._refresh();
+-
+-		// turning off autocomplete prevents the browser from remembering the
+-		// value when navigating through history, so we re-enable autocomplete
+-		// if the page is unloaded before the widget is destroyed. #7790
+-		this._on( this.window, {
+-			beforeunload: function() {
+-				this.element.removeAttr( "autocomplete" );
+-			}
+-		});
+-	},
+-
+-	_getCreateOptions: function() {
+-		var options = {},
+-			element = this.element;
+-
+-		$.each( [ "min", "max", "step" ], function( i, option ) {
+-			var value = element.attr( option );
+-			if ( value !== undefined && value.length ) {
+-				options[ option ] = value;
+-			}
+-		});
+-
+-		return options;
+-	},
+-
+-	_events: {
+-		keydown: function( event ) {
+-			if ( this._start( event ) && this._keydown( event ) ) {
+-				event.preventDefault();
+-			}
+-		},
+-		keyup: "_stop",
+-		focus: function() {
+-			this.previous = this.element.val();
+-		},
+-		blur: function( event ) {
+-			if ( this.cancelBlur ) {
+-				delete this.cancelBlur;
+-				return;
+-			}
+-
+-			this._stop();
+-			this._refresh();
+-			if ( this.previous !== this.element.val() ) {
+-				this._trigger( "change", event );
+-			}
+-		},
+-		mousewheel: function( event, delta ) {
+-			if ( !delta ) {
+-				return;
+-			}
+-			if ( !this.spinning && !this._start( event ) ) {
+-				return false;
+-			}
+-
+-			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+-			clearTimeout( this.mousewheelTimer );
+-			this.mousewheelTimer = this._delay(function() {
+-				if ( this.spinning ) {
+-					this._stop( event );
+-				}
+-			}, 100 );
+-			event.preventDefault();
+-		},
+-		"mousedown .ui-spinner-button": function( event ) {
+-			var previous;
+-
+-			// We never want the buttons to have focus; whenever the user is
+-			// interacting with the spinner, the focus should be on the input.
+-			// If the input is focused then this.previous is properly set from
+-			// when the input first received focus. If the input is not focused
+-			// then we need to set this.previous based on the value before spinning.
+-			previous = this.element[0] === this.document[0].activeElement ?
+-				this.previous : this.element.val();
+-			function checkFocus() {
+-				var isActive = this.element[0] === this.document[0].activeElement;
+-				if ( !isActive ) {
+-					this.element.focus();
+-					this.previous = previous;
+-					// support: IE
+-					// IE sets focus asynchronously, so we need to check if focus
+-					// moved off of the input because the user clicked on the button.
+-					this._delay(function() {
+-						this.previous = previous;
+-					});
+-				}
+-			}
+-
+-			// ensure focus is on (or stays on) the text field
+-			event.preventDefault();
+-			checkFocus.call( this );
+-
+-			// support: IE
+-			// IE doesn't prevent moving focus even with event.preventDefault()
+-			// so we set a flag to know when we should ignore the blur event
+-			// and check (again) if focus moved off of the input.
+-			this.cancelBlur = true;
+-			this._delay(function() {
+-				delete this.cancelBlur;
+-				checkFocus.call( this );
+-			});
+-
+-			if ( this._start( event ) === false ) {
+-				return;
+-			}
+-
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		"mouseup .ui-spinner-button": "_stop",
+-		"mouseenter .ui-spinner-button": function( event ) {
+-			// button will add ui-state-active if mouse was down while mouseleave and kept down
+-			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+-				return;
+-			}
+-
+-			if ( this._start( event ) === false ) {
+-				return false;
+-			}
+-			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+-		},
+-		// TODO: do we really want to consider this a stop?
+-		// shouldn't we just stop the repeater and wait until mouseup before
+-		// we trigger the stop event?
+-		"mouseleave .ui-spinner-button": "_stop"
+-	},
+-
+-	_draw: function() {
+-		var uiSpinner = this.uiSpinner = this.element
+-			.addClass( "ui-spinner-input" )
+-			.attr( "autocomplete", "off" )
+-			.wrap( this._uiSpinnerHtml() )
+-			.parent()
+-				// add buttons
+-				.append( this._buttonHtml() );
+-
+-		this.element.attr( "role", "spinbutton" );
+-
+-		// button bindings
+-		this.buttons = uiSpinner.find( ".ui-spinner-button" )
+-			.attr( "tabIndex", -1 )
+-			.button()
+-			.removeClass( "ui-corner-all" );
+-
+-		// IE 6 doesn't understand height: 50% for the buttons
+-		// unless the wrapper has an explicit height
+-		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+-				uiSpinner.height() > 0 ) {
+-			uiSpinner.height( uiSpinner.height() );
+-		}
+-
+-		// disable spinner if element was already disabled
+-		if ( this.options.disabled ) {
+-			this.disable();
+-		}
+-	},
+-
+-	_keydown: function( event ) {
+-		var options = this.options,
+-			keyCode = $.ui.keyCode;
+-
+-		switch ( event.keyCode ) {
+-		case keyCode.UP:
+-			this._repeat( null, 1, event );
+-			return true;
+-		case keyCode.DOWN:
+-			this._repeat( null, -1, event );
+-			return true;
+-		case keyCode.PAGE_UP:
+-			this._repeat( null, options.page, event );
+-			return true;
+-		case keyCode.PAGE_DOWN:
+-			this._repeat( null, -options.page, event );
+-			return true;
+-		}
+-
+-		return false;
+-	},
+-
+-	_uiSpinnerHtml: function() {
+-		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+-	},
+-
+-	_buttonHtml: function() {
+-		return "" +
+-			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+-				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+-			"</a>" +
+-			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+-				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+-			"</a>";
+-	},
+-
+-	_start: function( event ) {
+-		if ( !this.spinning && this._trigger( "start", event ) === false ) {
+-			return false;
+-		}
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-		this.spinning = true;
+-		return true;
+-	},
+-
+-	_repeat: function( i, steps, event ) {
+-		i = i || 500;
+-
+-		clearTimeout( this.timer );
+-		this.timer = this._delay(function() {
+-			this._repeat( 40, steps, event );
+-		}, i );
+-
+-		this._spin( steps * this.options.step, event );
+-	},
+-
+-	_spin: function( step, event ) {
+-		var value = this.value() || 0;
+-
+-		if ( !this.counter ) {
+-			this.counter = 1;
+-		}
+-
+-		value = this._adjustValue( value + step * this._increment( this.counter ) );
+-
+-		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+-			this._value( value );
+-			this.counter++;
+-		}
+-	},
+-
+-	_increment: function( i ) {
+-		var incremental = this.options.incremental;
+-
+-		if ( incremental ) {
+-			return $.isFunction( incremental ) ?
+-				incremental( i ) :
+-				Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+-		}
+-
+-		return 1;
+-	},
+-
+-	_precision: function() {
+-		var precision = this._precisionOf( this.options.step );
+-		if ( this.options.min !== null ) {
+-			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+-		}
+-		return precision;
+-	},
+-
+-	_precisionOf: function( num ) {
+-		var str = num.toString(),
+-			decimal = str.indexOf( "." );
+-		return decimal === -1 ? 0 : str.length - decimal - 1;
+-	},
+-
+-	_adjustValue: function( value ) {
+-		var base, aboveMin,
+-			options = this.options;
+-
+-		// make sure we're at a valid step
+-		// - find out where we are relative to the base (min or 0)
+-		base = options.min !== null ? options.min : 0;
+-		aboveMin = value - base;
+-		// - round to the nearest step
+-		aboveMin = Math.round(aboveMin / options.step) * options.step;
+-		// - rounding is based on 0, so adjust back to our base
+-		value = base + aboveMin;
+-
+-		// fix precision from bad JS floating point math
+-		value = parseFloat( value.toFixed( this._precision() ) );
+-
+-		// clamp the value
+-		if ( options.max !== null && value > options.max) {
+-			return options.max;
+-		}
+-		if ( options.min !== null && value < options.min ) {
+-			return options.min;
+-		}
+-
+-		return value;
+-	},
+-
+-	_stop: function( event ) {
+-		if ( !this.spinning ) {
+-			return;
+-		}
+-
+-		clearTimeout( this.timer );
+-		clearTimeout( this.mousewheelTimer );
+-		this.counter = 0;
+-		this.spinning = false;
+-		this._trigger( "stop", event );
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "culture" || key === "numberFormat" ) {
+-			var prevValue = this._parse( this.element.val() );
+-			this.options[ key ] = value;
+-			this.element.val( this._format( prevValue ) );
+-			return;
+-		}
+-
+-		if ( key === "max" || key === "min" || key === "step" ) {
+-			if ( typeof value === "string" ) {
+-				value = this._parse( value );
+-			}
+-		}
+-		if ( key === "icons" ) {
+-			this.buttons.first().find( ".ui-icon" )
+-				.removeClass( this.options.icons.up )
+-				.addClass( value.up );
+-			this.buttons.last().find( ".ui-icon" )
+-				.removeClass( this.options.icons.down )
+-				.addClass( value.down );
+-		}
+-
+-		this._super( key, value );
+-
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-				this.buttons.button( "disable" );
+-			} else {
+-				this.element.prop( "disabled", false );
+-				this.buttons.button( "enable" );
+-			}
+-		}
+-	},
+-
+-	_setOptions: modifier(function( options ) {
+-		this._super( options );
+-		this._value( this.element.val() );
+-	}),
+-
+-	_parse: function( val ) {
+-		if ( typeof val === "string" && val !== "" ) {
+-			val = window.Globalize && this.options.numberFormat ?
+-				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+-		}
+-		return val === "" || isNaN( val ) ? null : val;
+-	},
+-
+-	_format: function( value ) {
+-		if ( value === "" ) {
+-			return "";
+-		}
+-		return window.Globalize && this.options.numberFormat ?
+-			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+-			value;
+-	},
+-
+-	_refresh: function() {
+-		this.element.attr({
+-			"aria-valuemin": this.options.min,
+-			"aria-valuemax": this.options.max,
+-			// TODO: what should we do with values that can't be parsed?
+-			"aria-valuenow": this._parse( this.element.val() )
+-		});
+-	},
+-
+-	// update the value without triggering change
+-	_value: function( value, allowAny ) {
+-		var parsed;
+-		if ( value !== "" ) {
+-			parsed = this._parse( value );
+-			if ( parsed !== null ) {
+-				if ( !allowAny ) {
+-					parsed = this._adjustValue( parsed );
+-				}
+-				value = this._format( parsed );
+-			}
+-		}
+-		this.element.val( value );
+-		this._refresh();
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-spinner-input" )
+-			.prop( "disabled", false )
+-			.removeAttr( "autocomplete" )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-valuemin" )
+-			.removeAttr( "aria-valuemax" )
+-			.removeAttr( "aria-valuenow" );
+-		this.uiSpinner.replaceWith( this.element );
+-	},
+-
+-	stepUp: modifier(function( steps ) {
+-		this._stepUp( steps );
+-	}),
+-	_stepUp: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	stepDown: modifier(function( steps ) {
+-		this._stepDown( steps );
+-	}),
+-	_stepDown: function( steps ) {
+-		if ( this._start() ) {
+-			this._spin( (steps || 1) * -this.options.step );
+-			this._stop();
+-		}
+-	},
+-
+-	pageUp: modifier(function( pages ) {
+-		this._stepUp( (pages || 1) * this.options.page );
+-	}),
+-
+-	pageDown: modifier(function( pages ) {
+-		this._stepDown( (pages || 1) * this.options.page );
+-	}),
+-
+-	value: function( newVal ) {
+-		if ( !arguments.length ) {
+-			return this._parse( this.element.val() );
+-		}
+-		modifier( this._value ).call( this, newVal );
+-	},
+-
+-	widget: function() {
+-		return this.uiSpinner;
+-	}
+-});
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.resizable.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.resizable.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.resizable.js	(revision 15488)
+@@ -1,968 +0,0 @@
+-/*!
+- * jQuery UI Resizable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/resizable/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.mouse.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-function num(v) {
+-	return parseInt(v, 10) || 0;
+-}
+-
+-function isNumber(value) {
+-	return !isNaN(parseInt(value, 10));
+-}
+-
+-$.widget("ui.resizable", $.ui.mouse, {
+-	version: "1.10.3",
+-	widgetEventPrefix: "resize",
+-	options: {
+-		alsoResize: false,
+-		animate: false,
+-		animateDuration: "slow",
+-		animateEasing: "swing",
+-		aspectRatio: false,
+-		autoHide: false,
+-		containment: false,
+-		ghost: false,
+-		grid: false,
+-		handles: "e,s,se",
+-		helper: false,
+-		maxHeight: null,
+-		maxWidth: null,
+-		minHeight: 10,
+-		minWidth: 10,
+-		// See #7960
+-		zIndex: 90,
+-
+-		// callbacks
+-		resize: null,
+-		start: null,
+-		stop: null
+-	},
+-	_create: function() {
+-
+-		var n, i, handle, axis, hname,
+-			that = this,
+-			o = this.options;
+-		this.element.addClass("ui-resizable");
+-
+-		$.extend(this, {
+-			_aspectRatio: !!(o.aspectRatio),
+-			aspectRatio: o.aspectRatio,
+-			originalElement: this.element,
+-			_proportionallyResizeElements: [],
+-			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+-		});
+-
+-		//Wrap the element if it cannot hold child nodes
+-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+-
+-			//Create a wrapper element and set the wrapper to the new current internal element
+-			this.element.wrap(
+-				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+-					position: this.element.css("position"),
+-					width: this.element.outerWidth(),
+-					height: this.element.outerHeight(),
+-					top: this.element.css("top"),
+-					left: this.element.css("left")
+-				})
+-			);
+-
+-			//Overwrite the original this.element
+-			this.element = this.element.parent().data(
+-				"ui-resizable", this.element.data("ui-resizable")
+-			);
+-
+-			this.elementIsWrapper = true;
+-
+-			//Move margins to the wrapper
+-			this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
+-			this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
+-
+-			//Prevent Safari textarea resize
+-			this.originalResizeStyle = this.originalElement.css("resize");
+-			this.originalElement.css("resize", "none");
+-
+-			//Push the actual element to our proportionallyResize internal array
+-			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+-
+-			// avoid IE jump (hard set the margin)
+-			this.originalElement.css({ margin: this.originalElement.css("margin") });
+-
+-			// fix handlers offset
+-			this._proportionallyResize();
+-
+-		}
+-
+-		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
+-		if(this.handles.constructor === String) {
+-
+-			if ( this.handles === "all") {
+-				this.handles = "n,e,s,w,se,sw,ne,nw";
+-			}
+-
+-			n = this.handles.split(",");
+-			this.handles = {};
+-
+-			for(i = 0; i < n.length; i++) {
+-
+-				handle = $.trim(n[i]);
+-				hname = "ui-resizable-"+handle;
+-				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+-
+-				// Apply zIndex to all handles - see #7960
+-				axis.css({ zIndex: o.zIndex });
+-
+-				//TODO : What's going on here?
+-				if ("se" === handle) {
+-					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+-				}
+-
+-				//Insert into internal handles object and append to element
+-				this.handles[handle] = ".ui-resizable-"+handle;
+-				this.element.append(axis);
+-			}
+-
+-		}
+-
+-		this._renderAxis = function(target) {
+-
+-			var i, axis, padPos, padWrapper;
+-
+-			target = target || this.element;
+-
+-			for(i in this.handles) {
+-
+-				if(this.handles[i].constructor === String) {
+-					this.handles[i] = $(this.handles[i], this.element).show();
+-				}
+-
+-				//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
+-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+-
+-					axis = $(this.handles[i], this.element);
+-
+-					//Checking the correct pad and border
+-					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+-
+-					//The padding type i have to apply...
+-					padPos = [ "padding",
+-						/ne|nw|n/.test(i) ? "Top" :
+-						/se|sw|s/.test(i) ? "Bottom" :
+-						/^e$/.test(i) ? "Right" : "Left" ].join("");
+-
+-					target.css(padPos, padWrapper);
+-
+-					this._proportionallyResize();
+-
+-				}
+-
+-				//TODO: What's that good for? There's not anything to be executed left
+-				if(!$(this.handles[i]).length) {
+-					continue;
+-				}
+-			}
+-		};
+-
+-		//TODO: make renderAxis a prototype function
+-		this._renderAxis(this.element);
+-
+-		this._handles = $(".ui-resizable-handle", this.element)
+-			.disableSelection();
+-
+-		//Matching axis name
+-		this._handles.mouseover(function() {
+-			if (!that.resizing) {
+-				if (this.className) {
+-					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+-				}
+-				//Axis, default = se
+-				that.axis = axis && axis[1] ? axis[1] : "se";
+-			}
+-		});
+-
+-		//If we want to auto hide the elements
+-		if (o.autoHide) {
+-			this._handles.hide();
+-			$(this.element)
+-				.addClass("ui-resizable-autohide")
+-				.mouseenter(function() {
+-					if (o.disabled) {
+-						return;
+-					}
+-					$(this).removeClass("ui-resizable-autohide");
+-					that._handles.show();
+-				})
+-				.mouseleave(function(){
+-					if (o.disabled) {
+-						return;
+-					}
+-					if (!that.resizing) {
+-						$(this).addClass("ui-resizable-autohide");
+-						that._handles.hide();
+-					}
+-				});
+-		}
+-
+-		//Initialize the mouse interaction
+-		this._mouseInit();
+-
+-	},
+-
+-	_destroy: function() {
+-
+-		this._mouseDestroy();
+-
+-		var wrapper,
+-			_destroy = function(exp) {
+-				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+-					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+-			};
+-
+-		//TODO: Unwrap at same DOM position
+-		if (this.elementIsWrapper) {
+-			_destroy(this.element);
+-			wrapper = this.element;
+-			this.originalElement.css({
+-				position: wrapper.css("position"),
+-				width: wrapper.outerWidth(),
+-				height: wrapper.outerHeight(),
+-				top: wrapper.css("top"),
+-				left: wrapper.css("left")
+-			}).insertAfter( wrapper );
+-			wrapper.remove();
+-		}
+-
+-		this.originalElement.css("resize", this.originalResizeStyle);
+-		_destroy(this.originalElement);
+-
+-		return this;
+-	},
+-
+-	_mouseCapture: function(event) {
+-		var i, handle,
+-			capture = false;
+-
+-		for (i in this.handles) {
+-			handle = $(this.handles[i])[0];
+-			if (handle === event.target || $.contains(handle, event.target)) {
+-				capture = true;
+-			}
+-		}
+-
+-		return !this.options.disabled && capture;
+-	},
+-
+-	_mouseStart: function(event) {
+-
+-		var curleft, curtop, cursor,
+-			o = this.options,
+-			iniPos = this.element.position(),
+-			el = this.element;
+-
+-		this.resizing = true;
+-
+-		// bugfix for http://dev.jquery.com/ticket/1749
+-		if ( (/absolute/).test( el.css("position") ) ) {
+-			el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
+-		} else if (el.is(".ui-draggable")) {
+-			el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
+-		}
+-
+-		this._renderProxy();
+-
+-		curleft = num(this.helper.css("left"));
+-		curtop = num(this.helper.css("top"));
+-
+-		if (o.containment) {
+-			curleft += $(o.containment).scrollLeft() || 0;
+-			curtop += $(o.containment).scrollTop() || 0;
+-		}
+-
+-		//Store needed variables
+-		this.offset = this.helper.offset();
+-		this.position = { left: curleft, top: curtop };
+-		this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+-		this.originalPosition = { left: curleft, top: curtop };
+-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
+-		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+-
+-		//Aspect Ratio
+-		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+-
+-		cursor = $(".ui-resizable-" + this.axis).css("cursor");
+-		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+-
+-		el.addClass("ui-resizable-resizing");
+-		this._propagate("start", event);
+-		return true;
+-	},
+-
+-	_mouseDrag: function(event) {
+-
+-		//Increase performance, avoid regex
+-		var data,
+-			el = this.helper, props = {},
+-			smp = this.originalMousePosition,
+-			a = this.axis,
+-			prevTop = this.position.top,
+-			prevLeft = this.position.left,
+-			prevWidth = this.size.width,
+-			prevHeight = this.size.height,
+-			dx = (event.pageX-smp.left)||0,
+-			dy = (event.pageY-smp.top)||0,
+-			trigger = this._change[a];
+-
+-		if (!trigger) {
+-			return false;
+-		}
+-
+-		// Calculate the attrs that will be change
+-		data = trigger.apply(this, [event, dx, dy]);
+-
+-		// Put this in the mouseDrag handler since the user can start pressing shift while resizing
+-		this._updateVirtualBoundaries(event.shiftKey);
+-		if (this._aspectRatio || event.shiftKey) {
+-			data = this._updateRatio(data, event);
+-		}
+-
+-		data = this._respectSize(data, event);
+-
+-		this._updateCache(data);
+-
+-		// plugins callbacks need to be called first
+-		this._propagate("resize", event);
+-
+-		if (this.position.top !== prevTop) {
+-			props.top = this.position.top + "px";
+-		}
+-		if (this.position.left !== prevLeft) {
+-			props.left = this.position.left + "px";
+-		}
+-		if (this.size.width !== prevWidth) {
+-			props.width = this.size.width + "px";
+-		}
+-		if (this.size.height !== prevHeight) {
+-			props.height = this.size.height + "px";
+-		}
+-		el.css(props);
+-
+-		if (!this._helper && this._proportionallyResizeElements.length) {
+-			this._proportionallyResize();
+-		}
+-
+-		// Call the user callback if the element was resized
+-		if ( ! $.isEmptyObject(props) ) {
+-			this._trigger("resize", event, this.ui());
+-		}
+-
+-		return false;
+-	},
+-
+-	_mouseStop: function(event) {
+-
+-		this.resizing = false;
+-		var pr, ista, soffseth, soffsetw, s, left, top,
+-			o = this.options, that = this;
+-
+-		if(this._helper) {
+-
+-			pr = this._proportionallyResizeElements;
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+-			soffsetw = ista ? 0 : that.sizeDiff.width;
+-
+-			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-			if (!o.animate) {
+-				this.element.css($.extend(s, { top: top, left: left }));
+-			}
+-
+-			that.helper.height(that.size.height);
+-			that.helper.width(that.size.width);
+-
+-			if (this._helper && !o.animate) {
+-				this._proportionallyResize();
+-			}
+-		}
+-
+-		$("body").css("cursor", "auto");
+-
+-		this.element.removeClass("ui-resizable-resizing");
+-
+-		this._propagate("stop", event);
+-
+-		if (this._helper) {
+-			this.helper.remove();
+-		}
+-
+-		return false;
+-
+-	},
+-
+-	_updateVirtualBoundaries: function(forceAspectRatio) {
+-		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+-			o = this.options;
+-
+-		b = {
+-			minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+-			maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+-			minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+-			maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+-		};
+-
+-		if(this._aspectRatio || forceAspectRatio) {
+-			// We want to create an enclosing box whose aspect ration is the requested one
+-			// First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+-			pMinWidth = b.minHeight * this.aspectRatio;
+-			pMinHeight = b.minWidth / this.aspectRatio;
+-			pMaxWidth = b.maxHeight * this.aspectRatio;
+-			pMaxHeight = b.maxWidth / this.aspectRatio;
+-
+-			if(pMinWidth > b.minWidth) {
+-				b.minWidth = pMinWidth;
+-			}
+-			if(pMinHeight > b.minHeight) {
+-				b.minHeight = pMinHeight;
+-			}
+-			if(pMaxWidth < b.maxWidth) {
+-				b.maxWidth = pMaxWidth;
+-			}
+-			if(pMaxHeight < b.maxHeight) {
+-				b.maxHeight = pMaxHeight;
+-			}
+-		}
+-		this._vBoundaries = b;
+-	},
+-
+-	_updateCache: function(data) {
+-		this.offset = this.helper.offset();
+-		if (isNumber(data.left)) {
+-			this.position.left = data.left;
+-		}
+-		if (isNumber(data.top)) {
+-			this.position.top = data.top;
+-		}
+-		if (isNumber(data.height)) {
+-			this.size.height = data.height;
+-		}
+-		if (isNumber(data.width)) {
+-			this.size.width = data.width;
+-		}
+-	},
+-
+-	_updateRatio: function( data ) {
+-
+-		var cpos = this.position,
+-			csize = this.size,
+-			a = this.axis;
+-
+-		if (isNumber(data.height)) {
+-			data.width = (data.height * this.aspectRatio);
+-		} else if (isNumber(data.width)) {
+-			data.height = (data.width / this.aspectRatio);
+-		}
+-
+-		if (a === "sw") {
+-			data.left = cpos.left + (csize.width - data.width);
+-			data.top = null;
+-		}
+-		if (a === "nw") {
+-			data.top = cpos.top + (csize.height - data.height);
+-			data.left = cpos.left + (csize.width - data.width);
+-		}
+-
+-		return data;
+-	},
+-
+-	_respectSize: function( data ) {
+-
+-		var o = this._vBoundaries,
+-			a = this.axis,
+-			ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+-			isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+-			dw = this.originalPosition.left + this.originalSize.width,
+-			dh = this.position.top + this.size.height,
+-			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+-		if (isminw) {
+-			data.width = o.minWidth;
+-		}
+-		if (isminh) {
+-			data.height = o.minHeight;
+-		}
+-		if (ismaxw) {
+-			data.width = o.maxWidth;
+-		}
+-		if (ismaxh) {
+-			data.height = o.maxHeight;
+-		}
+-
+-		if (isminw && cw) {
+-			data.left = dw - o.minWidth;
+-		}
+-		if (ismaxw && cw) {
+-			data.left = dw - o.maxWidth;
+-		}
+-		if (isminh && ch) {
+-			data.top = dh - o.minHeight;
+-		}
+-		if (ismaxh && ch) {
+-			data.top = dh - o.maxHeight;
+-		}
+-
+-		// fixing jump error on top/left - bug #2330
+-		if (!data.width && !data.height && !data.left && data.top) {
+-			data.top = null;
+-		} else if (!data.width && !data.height && !data.top && data.left) {
+-			data.left = null;
+-		}
+-
+-		return data;
+-	},
+-
+-	_proportionallyResize: function() {
+-
+-		if (!this._proportionallyResizeElements.length) {
+-			return;
+-		}
+-
+-		var i, j, borders, paddings, prel,
+-			element = this.helper || this.element;
+-
+-		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+-
+-			prel = this._proportionallyResizeElements[i];
+-
+-			if (!this.borderDif) {
+-				this.borderDif = [];
+-				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
+-				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
+-
+-				for ( j = 0; j < borders.length; j++ ) {
+-					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
+-				}
+-			}
+-
+-			prel.css({
+-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
+-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+-			});
+-
+-		}
+-
+-	},
+-
+-	_renderProxy: function() {
+-
+-		var el = this.element, o = this.options;
+-		this.elementOffset = el.offset();
+-
+-		if(this._helper) {
+-
+-			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+-
+-			this.helper.addClass(this._helper).css({
+-				width: this.element.outerWidth() - 1,
+-				height: this.element.outerHeight() - 1,
+-				position: "absolute",
+-				left: this.elementOffset.left +"px",
+-				top: this.elementOffset.top +"px",
+-				zIndex: ++o.zIndex //TODO: Don't modify option
+-			});
+-
+-			this.helper
+-				.appendTo("body")
+-				.disableSelection();
+-
+-		} else {
+-			this.helper = this.element;
+-		}
+-
+-	},
+-
+-	_change: {
+-		e: function(event, dx) {
+-			return { width: this.originalSize.width + dx };
+-		},
+-		w: function(event, dx) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { left: sp.left + dx, width: cs.width - dx };
+-		},
+-		n: function(event, dx, dy) {
+-			var cs = this.originalSize, sp = this.originalPosition;
+-			return { top: sp.top + dy, height: cs.height - dy };
+-		},
+-		s: function(event, dx, dy) {
+-			return { height: this.originalSize.height + dy };
+-		},
+-		se: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		sw: function(event, dx, dy) {
+-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		},
+-		ne: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+-		},
+-		nw: function(event, dx, dy) {
+-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+-		}
+-	},
+-
+-	_propagate: function(n, event) {
+-		$.ui.plugin.call(this, n, [event, this.ui()]);
+-		(n !== "resize" && this._trigger(n, event, this.ui()));
+-	},
+-
+-	plugins: {},
+-
+-	ui: function() {
+-		return {
+-			originalElement: this.originalElement,
+-			element: this.element,
+-			helper: this.helper,
+-			position: this.position,
+-			size: this.size,
+-			originalSize: this.originalSize,
+-			originalPosition: this.originalPosition
+-		};
+-	}
+-
+-});
+-
+-/*
+- * Resizable Extensions
+- */
+-
+-$.ui.plugin.add("resizable", "animate", {
+-
+-	stop: function( event ) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			pr = that._proportionallyResizeElements,
+-			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+-			soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+-			soffsetw = ista ? 0 : that.sizeDiff.width,
+-			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
+-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+-
+-		that.element.animate(
+-			$.extend(style, top && left ? { top: top, left: left } : {}), {
+-				duration: o.animateDuration,
+-				easing: o.animateEasing,
+-				step: function() {
+-
+-					var data = {
+-						width: parseInt(that.element.css("width"), 10),
+-						height: parseInt(that.element.css("height"), 10),
+-						top: parseInt(that.element.css("top"), 10),
+-						left: parseInt(that.element.css("left"), 10)
+-					};
+-
+-					if (pr && pr.length) {
+-						$(pr[0]).css({ width: data.width, height: data.height });
+-					}
+-
+-					// propagating resize, and updating values for each animation step
+-					that._updateCache(data);
+-					that._propagate("resize", event);
+-
+-				}
+-			}
+-		);
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "containment", {
+-
+-	start: function() {
+-		var element, p, co, ch, cw, width, height,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			el = that.element,
+-			oc = o.containment,
+-			ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+-
+-		if (!ce) {
+-			return;
+-		}
+-
+-		that.containerElement = $(ce);
+-
+-		if (/document/.test(oc) || oc === document) {
+-			that.containerOffset = { left: 0, top: 0 };
+-			that.containerPosition = { left: 0, top: 0 };
+-
+-			that.parentData = {
+-				element: $(document), left: 0, top: 0,
+-				width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+-			};
+-		}
+-
+-		// i'm a node, so compute top, left, right, bottom
+-		else {
+-			element = $(ce);
+-			p = [];
+-			$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+-
+-			that.containerOffset = element.offset();
+-			that.containerPosition = element.position();
+-			that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+-
+-			co = that.containerOffset;
+-			ch = that.containerSize.height;
+-			cw = that.containerSize.width;
+-			width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
+-			height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+-
+-			that.parentData = {
+-				element: ce, left: co.left, top: co.top, width: width, height: height
+-			};
+-		}
+-	},
+-
+-	resize: function( event ) {
+-		var woset, hoset, isParent, isOffsetRelative,
+-			that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset, cp = that.position,
+-			pRatio = that._aspectRatio || event.shiftKey,
+-			cop = { top:0, left:0 }, ce = that.containerElement;
+-
+-		if (ce[0] !== document && (/static/).test(ce.css("position"))) {
+-			cop = co;
+-		}
+-
+-		if (cp.left < (that._helper ? co.left : 0)) {
+-			that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-			that.position.left = o.helper ? co.left : 0;
+-		}
+-
+-		if (cp.top < (that._helper ? co.top : 0)) {
+-			that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-			that.position.top = that._helper ? co.top : 0;
+-		}
+-
+-		that.offset.left = that.parentData.left+that.position.left;
+-		that.offset.top = that.parentData.top+that.position.top;
+-
+-		woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
+-		hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
+-
+-		isParent = that.containerElement.get(0) === that.element.parent().get(0);
+-		isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+-
+-		if(isParent && isOffsetRelative) {
+-			woset -= that.parentData.left;
+-		}
+-
+-		if (woset + that.size.width >= that.parentData.width) {
+-			that.size.width = that.parentData.width - woset;
+-			if (pRatio) {
+-				that.size.height = that.size.width / that.aspectRatio;
+-			}
+-		}
+-
+-		if (hoset + that.size.height >= that.parentData.height) {
+-			that.size.height = that.parentData.height - hoset;
+-			if (pRatio) {
+-				that.size.width = that.size.height * that.aspectRatio;
+-			}
+-		}
+-	},
+-
+-	stop: function(){
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			co = that.containerOffset,
+-			cop = that.containerPosition,
+-			ce = that.containerElement,
+-			helper = $(that.helper),
+-			ho = helper.offset(),
+-			w = helper.outerWidth() - that.sizeDiff.width,
+-			h = helper.outerHeight() - that.sizeDiff.height;
+-
+-		if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-		if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
+-			$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+-		}
+-
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "alsoResize", {
+-
+-	start: function () {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			_store = function (exp) {
+-				$(exp).each(function() {
+-					var el = $(this);
+-					el.data("ui-resizable-alsoresize", {
+-						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+-						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+-					});
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
+-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
+-		}else{
+-			_store(o.alsoResize);
+-		}
+-	},
+-
+-	resize: function (event, ui) {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			delta = {
+-				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
+-				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
+-			},
+-
+-			_alsoResize = function (exp, c) {
+-				$(exp).each(function() {
+-					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+-						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+-
+-					$.each(css, function (i, prop) {
+-						var sum = (start[prop]||0) + (delta[prop]||0);
+-						if (sum && sum >= 0) {
+-							style[prop] = sum || null;
+-						}
+-					});
+-
+-					el.css(style);
+-				});
+-			};
+-
+-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
+-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
+-		}else{
+-			_alsoResize(o.alsoResize);
+-		}
+-	},
+-
+-	stop: function () {
+-		$(this).removeData("resizable-alsoresize");
+-	}
+-});
+-
+-$.ui.plugin.add("resizable", "ghost", {
+-
+-	start: function() {
+-
+-		var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
+-
+-		that.ghost = that.originalElement.clone();
+-		that.ghost
+-			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+-			.addClass("ui-resizable-ghost")
+-			.addClass(typeof o.ghost === "string" ? o.ghost : "");
+-
+-		that.ghost.appendTo(that.helper);
+-
+-	},
+-
+-	resize: function(){
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost) {
+-			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+-		}
+-	},
+-
+-	stop: function() {
+-		var that = $(this).data("ui-resizable");
+-		if (that.ghost && that.helper) {
+-			that.helper.get(0).removeChild(that.ghost.get(0));
+-		}
+-	}
+-
+-});
+-
+-$.ui.plugin.add("resizable", "grid", {
+-
+-	resize: function() {
+-		var that = $(this).data("ui-resizable"),
+-			o = that.options,
+-			cs = that.size,
+-			os = that.originalSize,
+-			op = that.originalPosition,
+-			a = that.axis,
+-			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
+-			gridX = (grid[0]||1),
+-			gridY = (grid[1]||1),
+-			ox = Math.round((cs.width - os.width) / gridX) * gridX,
+-			oy = Math.round((cs.height - os.height) / gridY) * gridY,
+-			newWidth = os.width + ox,
+-			newHeight = os.height + oy,
+-			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+-			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+-			isMinWidth = o.minWidth && (o.minWidth > newWidth),
+-			isMinHeight = o.minHeight && (o.minHeight > newHeight);
+-
+-		o.grid = grid;
+-
+-		if (isMinWidth) {
+-			newWidth = newWidth + gridX;
+-		}
+-		if (isMinHeight) {
+-			newHeight = newHeight + gridY;
+-		}
+-		if (isMaxWidth) {
+-			newWidth = newWidth - gridX;
+-		}
+-		if (isMaxHeight) {
+-			newHeight = newHeight - gridY;
+-		}
+-
+-		if (/^(se|s|e)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-		} else if (/^(ne)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-		} else if (/^(sw)$/.test(a)) {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.left = op.left - ox;
+-		} else {
+-			that.size.width = newWidth;
+-			that.size.height = newHeight;
+-			that.position.top = op.top - oy;
+-			that.position.left = op.left - ox;
+-		}
+-	}
+-
+-});
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-scale.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-scale.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-scale.js	(revision 15488)
+@@ -1,318 +0,0 @@
+-/*!
+- * jQuery UI Effects Scale 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/scale-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-$.effects.effect.puff = function( o, done ) {
+-	var elem = $( this ),
+-		mode = $.effects.setMode( elem, o.mode || "hide" ),
+-		hide = mode === "hide",
+-		percent = parseInt( o.percent, 10 ) || 150,
+-		factor = percent / 100,
+-		original = {
+-			height: elem.height(),
+-			width: elem.width(),
+-			outerHeight: elem.outerHeight(),
+-			outerWidth: elem.outerWidth()
+-		};
+-
+-	$.extend( o, {
+-		effect: "scale",
+-		queue: false,
+-		fade: true,
+-		mode: mode,
+-		complete: done,
+-		percent: hide ? percent : 100,
+-		from: hide ?
+-			original :
+-			{
+-				height: original.height * factor,
+-				width: original.width * factor,
+-				outerHeight: original.outerHeight * factor,
+-				outerWidth: original.outerWidth * factor
+-			}
+-	});
+-
+-	elem.effect( o );
+-};
+-
+-$.effects.effect.scale = function( o, done ) {
+-
+-	// Create element
+-	var el = $( this ),
+-		options = $.extend( true, {}, o ),
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		percent = parseInt( o.percent, 10 ) ||
+-			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+-		direction = o.direction || "both",
+-		origin = o.origin,
+-		original = {
+-			height: el.height(),
+-			width: el.width(),
+-			outerHeight: el.outerHeight(),
+-			outerWidth: el.outerWidth()
+-		},
+-		factor = {
+-			y: direction !== "horizontal" ? (percent / 100) : 1,
+-			x: direction !== "vertical" ? (percent / 100) : 1
+-		};
+-
+-	// We are going to pass this effect to the size effect:
+-	options.effect = "size";
+-	options.queue = false;
+-	options.complete = done;
+-
+-	// Set default origin and restore for show/hide
+-	if ( mode !== "effect" ) {
+-		options.origin = origin || ["middle","center"];
+-		options.restore = true;
+-	}
+-
+-	options.from = o.from || ( mode === "show" ? {
+-		height: 0,
+-		width: 0,
+-		outerHeight: 0,
+-		outerWidth: 0
+-	} : original );
+-	options.to = {
+-		height: original.height * factor.y,
+-		width: original.width * factor.x,
+-		outerHeight: original.outerHeight * factor.y,
+-		outerWidth: original.outerWidth * factor.x
+-	};
+-
+-	// Fade option to support puff
+-	if ( options.fade ) {
+-		if ( mode === "show" ) {
+-			options.from.opacity = 0;
+-			options.to.opacity = 1;
+-		}
+-		if ( mode === "hide" ) {
+-			options.from.opacity = 1;
+-			options.to.opacity = 0;
+-		}
+-	}
+-
+-	// Animate
+-	el.effect( options );
+-
+-};
+-
+-$.effects.effect.size = function( o, done ) {
+-
+-	// Create element
+-	var original, baseline, factor,
+-		el = $( this ),
+-		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+-
+-		// Always restore
+-		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+-
+-		// Copy for children
+-		props2 = [ "width", "height", "overflow" ],
+-		cProps = [ "fontSize" ],
+-		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+-		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+-
+-		// Set options
+-		mode = $.effects.setMode( el, o.mode || "effect" ),
+-		restore = o.restore || mode !== "effect",
+-		scale = o.scale || "both",
+-		origin = o.origin || [ "middle", "center" ],
+-		position = el.css( "position" ),
+-		props = restore ? props0 : props1,
+-		zero = {
+-			height: 0,
+-			width: 0,
+-			outerHeight: 0,
+-			outerWidth: 0
+-		};
+-
+-	if ( mode === "show" ) {
+-		el.show();
+-	}
+-	original = {
+-		height: el.height(),
+-		width: el.width(),
+-		outerHeight: el.outerHeight(),
+-		outerWidth: el.outerWidth()
+-	};
+-
+-	if ( o.mode === "toggle" && mode === "show" ) {
+-		el.from = o.to || zero;
+-		el.to = o.from || original;
+-	} else {
+-		el.from = o.from || ( mode === "show" ? zero : original );
+-		el.to = o.to || ( mode === "hide" ? zero : original );
+-	}
+-
+-	// Set scaling factor
+-	factor = {
+-		from: {
+-			y: el.from.height / original.height,
+-			x: el.from.width / original.width
+-		},
+-		to: {
+-			y: el.to.height / original.height,
+-			x: el.to.width / original.width
+-		}
+-	};
+-
+-	// Scale the css box
+-	if ( scale === "box" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( vProps );
+-			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+-		}
+-
+-		// Horizontal props scaling
+-		if ( factor.from.x !== factor.to.x ) {
+-			props = props.concat( hProps );
+-			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+-			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+-		}
+-	}
+-
+-	// Scale the content
+-	if ( scale === "content" || scale === "both" ) {
+-
+-		// Vertical props scaling
+-		if ( factor.from.y !== factor.to.y ) {
+-			props = props.concat( cProps ).concat( props2 );
+-			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+-			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+-		}
+-	}
+-
+-	$.effects.save( el, props );
+-	el.show();
+-	$.effects.createWrapper( el );
+-	el.css( "overflow", "hidden" ).css( el.from );
+-
+-	// Adjust
+-	if (origin) { // Calculate baseline shifts
+-		baseline = $.effects.getBaseline( origin, original );
+-		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+-		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+-		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+-		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+-	}
+-	el.css( el.from ); // set top & left
+-
+-	// Animate
+-	if ( scale === "content" || scale === "both" ) { // Scale the children
+-
+-		// Add margins/font-size
+-		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+-		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+-		props2 = props0.concat(vProps).concat(hProps);
+-
+-		el.find( "*[width]" ).each( function(){
+-			var child = $( this ),
+-				c_original = {
+-					height: child.height(),
+-					width: child.width(),
+-					outerHeight: child.outerHeight(),
+-					outerWidth: child.outerWidth()
+-				};
+-			if (restore) {
+-				$.effects.save(child, props2);
+-			}
+-
+-			child.from = {
+-				height: c_original.height * factor.from.y,
+-				width: c_original.width * factor.from.x,
+-				outerHeight: c_original.outerHeight * factor.from.y,
+-				outerWidth: c_original.outerWidth * factor.from.x
+-			};
+-			child.to = {
+-				height: c_original.height * factor.to.y,
+-				width: c_original.width * factor.to.x,
+-				outerHeight: c_original.height * factor.to.y,
+-				outerWidth: c_original.width * factor.to.x
+-			};
+-
+-			// Vertical props scaling
+-			if ( factor.from.y !== factor.to.y ) {
+-				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+-				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+-			}
+-
+-			// Horizontal props scaling
+-			if ( factor.from.x !== factor.to.x ) {
+-				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+-				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+-			}
+-
+-			// Animate children
+-			child.css( child.from );
+-			child.animate( child.to, o.duration, o.easing, function() {
+-
+-				// Restore children
+-				if ( restore ) {
+-					$.effects.restore( child, props2 );
+-				}
+-			});
+-		});
+-	}
+-
+-	// Animate
+-	el.animate( el.to, {
+-		queue: false,
+-		duration: o.duration,
+-		easing: o.easing,
+-		complete: function() {
+-			if ( el.to.opacity === 0 ) {
+-				el.css( "opacity", el.from.opacity );
+-			}
+-			if( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			if ( !restore ) {
+-
+-				// we need to calculate our new positioning based on the scaling
+-				if ( position === "static" ) {
+-					el.css({
+-						position: "relative",
+-						top: el.to.top,
+-						left: el.to.left
+-					});
+-				} else {
+-					$.each([ "top", "left" ], function( idx, pos ) {
+-						el.css( pos, function( _, str ) {
+-							var val = parseInt( str, 10 ),
+-								toRef = idx ? el.to.left : el.to.top;
+-
+-							// if original was "auto", recalculate the new value from wrapper
+-							if ( str === "auto" ) {
+-								return toRef + "px";
+-							}
+-
+-							return val + toRef + "px";
+-						});
+-					});
+-				}
+-			}
+-
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-blind.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-blind.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-blind.js	(revision 15488)
+@@ -1,82 +0,0 @@
+-/*!
+- * jQuery UI Effects Blind 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/blind-effect/
+- *
+- * Depends:
+- *	jquery.ui.effect.js
+- */
+-(function( $, undefined ) {
+-
+-var rvertical = /up|down|vertical/,
+-	rpositivemotion = /up|left|vertical|horizontal/;
+-
+-$.effects.effect.blind = function( o, done ) {
+-	// Create element
+-	var el = $( this ),
+-		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+-		mode = $.effects.setMode( el, o.mode || "hide" ),
+-		direction = o.direction || "up",
+-		vertical = rvertical.test( direction ),
+-		ref = vertical ? "height" : "width",
+-		ref2 = vertical ? "top" : "left",
+-		motion = rpositivemotion.test( direction ),
+-		animation = {},
+-		show = mode === "show",
+-		wrapper, distance, margin;
+-
+-	// if already wrapped, the wrapper's properties are my property. #6245
+-	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+-		$.effects.save( el.parent(), props );
+-	} else {
+-		$.effects.save( el, props );
+-	}
+-	el.show();
+-	wrapper = $.effects.createWrapper( el ).css({
+-		overflow: "hidden"
+-	});
+-
+-	distance = wrapper[ ref ]();
+-	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+-
+-	animation[ ref ] = show ? distance : 0;
+-	if ( !motion ) {
+-		el
+-			.css( vertical ? "bottom" : "right", 0 )
+-			.css( vertical ? "top" : "left", "auto" )
+-			.css({ position: "absolute" });
+-
+-		animation[ ref2 ] = show ? margin : distance + margin;
+-	}
+-
+-	// start at 0 if we are showing
+-	if ( show ) {
+-		wrapper.css( ref, 0 );
+-		if ( ! motion ) {
+-			wrapper.css( ref2, margin + distance );
+-		}
+-	}
+-
+-	// Animate
+-	wrapper.animate( animation, {
+-		duration: o.duration,
+-		easing: o.easing,
+-		queue: false,
+-		complete: function() {
+-			if ( mode === "hide" ) {
+-				el.hide();
+-			}
+-			$.effects.restore( el, props );
+-			$.effects.removeWrapper( el );
+-			done();
+-		}
+-	});
+-
+-};
+-
+-})(jQuery);
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fold.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fold.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-fold.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-fold",
+-	"title": "jQuery UI Fold Effect",
+-	"description": "Folds an element first horizontally and then vertically.",
+-	"keywords": [
+-		"ui",
+-		"fold",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/fold-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.spinner.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.spinner.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.spinner.jquery.json	(revision 15488)
+@@ -1,68 +0,0 @@
+-{
+-	"name": "ui.spinner",
+-	"title": "jQuery UI Spinner",
+-	"description": "Displays buttons to easily input numbers via the keyboard or mouse.",
+-	"keywords": [
+-		"ui",
+-		"spinner",
+-		"form",
+-		"number",
+-		"spinbutton",
+-		"stepper"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/spinner/",
+-	"demo": "http://jqueryui.com/spinner/",
+-	"docs": "http://api.jqueryui.com/spinner/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.button": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.resizable.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.resizable.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.resizable.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.resizable",
+-	"title": "jQuery UI Resizable",
+-	"description": "Enables resize functionality for any element.",
+-	"keywords": [
+-		"ui",
+-		"resizable",
+-		"resize"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/resizable/",
+-	"demo": "http://jqueryui.com/resizable/",
+-	"docs": "http://api.jqueryui.com/resizable/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3",
+-		"ui.mouse": "1.10.3"
+-	},
+-	"category": "interaction"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-clip.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-clip.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-clip.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-clip",
+-	"title": "jQuery UI Clip Effect",
+-	"description": "Clips the element on and off like an old TV.",
+-	"keywords": [
+-		"ui",
+-		"clip",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/clip-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.effect-blind.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.effect-blind.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.effect-blind.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.effect-blind",
+-	"title": "jQuery UI Blind Effect",
+-	"description": "Blinds the element.",
+-	"keywords": [
+-		"ui",
+-		"blind",
+-		"effect",
+-		"show",
+-		"hide"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/effect/",
+-	"demo": "http://jqueryui.com/effect/",
+-	"docs": "http://api.jqueryui.com/blind-effect/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.effect": "1.10.3"
+-	},
+-	"category": "effect"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.widget.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.widget.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.widget.jquery.json	(revision 15488)
+@@ -1,64 +0,0 @@
+-{
+-	"name": "ui.widget",
+-	"title": "jQuery UI Widget",
+-	"description": "Provides a factory for creating stateful widgets with a common API.",
+-	"keywords": [
+-		"ui",
+-		"widget",
+-		"abstraction",
+-		"state",
+-		"factory"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/widget/",
+-	"demo": "http://jqueryui.com/widget/",
+-	"docs": "http://api.jqueryui.com/jQuery.widget/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6"
+-	},
+-	"category": "core"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.all.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.all.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.all.css	(revision 15488)
+@@ -1,12 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming
+- */
+-@import "jquery.ui.base.css";
+-@import "jquery.ui.theme.css";
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.base.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.base.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.base.css	(revision 15488)
+@@ -1,25 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming
+- */
+-@import url("jquery.ui.core.css");
+-
+-@import url("jquery.ui.accordion.css");
+-@import url("jquery.ui.autocomplete.css");
+-@import url("jquery.ui.button.css");
+-@import url("jquery.ui.datepicker.css");
+-@import url("jquery.ui.dialog.css");
+-@import url("jquery.ui.menu.css");
+-@import url("jquery.ui.progressbar.css");
+-@import url("jquery.ui.resizable.css");
+-@import url("jquery.ui.selectable.css");
+-@import url("jquery.ui.slider.css");
+-@import url("jquery.ui.spinner.css");
+-@import url("jquery.ui.tabs.css");
+-@import url("jquery.ui.tooltip.css");
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.datepicker.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.datepicker.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.datepicker.css	(revision 15488)
+@@ -1,178 +0,0 @@
+-/*!
+- * jQuery UI Datepicker 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Datepicker#theming
+- */
+-.ui-datepicker {
+-	width: 17em;
+-	padding: .2em .2em 0;
+-	display: none;
+-}
+-.ui-datepicker .ui-datepicker-header {
+-	position: relative;
+-	padding: .2em 0;
+-}
+-.ui-datepicker .ui-datepicker-prev,
+-.ui-datepicker .ui-datepicker-next {
+-	position: absolute;
+-	top: 2px;
+-	width: 1.8em;
+-	height: 1.8em;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover,
+-.ui-datepicker .ui-datepicker-next-hover {
+-	top: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev {
+-	left: 2px;
+-}
+-.ui-datepicker .ui-datepicker-next {
+-	right: 2px;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover {
+-	left: 1px;
+-}
+-.ui-datepicker .ui-datepicker-next-hover {
+-	right: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev span,
+-.ui-datepicker .ui-datepicker-next span {
+-	display: block;
+-	position: absolute;
+-	left: 50%;
+-	margin-left: -8px;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-datepicker .ui-datepicker-title {
+-	margin: 0 2.3em;
+-	line-height: 1.8em;
+-	text-align: center;
+-}
+-.ui-datepicker .ui-datepicker-title select {
+-	font-size: 1em;
+-	margin: 1px 0;
+-}
+-.ui-datepicker select.ui-datepicker-month-year {
+-	width: 100%;
+-}
+-.ui-datepicker select.ui-datepicker-month,
+-.ui-datepicker select.ui-datepicker-year {
+-	width: 49%;
+-}
+-.ui-datepicker table {
+-	width: 100%;
+-	font-size: .9em;
+-	border-collapse: collapse;
+-	margin: 0 0 .4em;
+-}
+-.ui-datepicker th {
+-	padding: .7em .3em;
+-	text-align: center;
+-	font-weight: bold;
+-	border: 0;
+-}
+-.ui-datepicker td {
+-	border: 0;
+-	padding: 1px;
+-}
+-.ui-datepicker td span,
+-.ui-datepicker td a {
+-	display: block;
+-	padding: .2em;
+-	text-align: right;
+-	text-decoration: none;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane {
+-	background-image: none;
+-	margin: .7em 0 0 0;
+-	padding: 0 .2em;
+-	border-left: 0;
+-	border-right: 0;
+-	border-bottom: 0;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button {
+-	float: right;
+-	margin: .5em .2em .4em;
+-	cursor: pointer;
+-	padding: .2em .6em .3em .6em;
+-	width: auto;
+-	overflow: visible;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+-	float: left;
+-}
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi {
+-	width: auto;
+-}
+-.ui-datepicker-multi .ui-datepicker-group {
+-	float: left;
+-}
+-.ui-datepicker-multi .ui-datepicker-group table {
+-	width: 95%;
+-	margin: 0 auto .4em;
+-}
+-.ui-datepicker-multi-2 .ui-datepicker-group {
+-	width: 50%;
+-}
+-.ui-datepicker-multi-3 .ui-datepicker-group {
+-	width: 33.3%;
+-}
+-.ui-datepicker-multi-4 .ui-datepicker-group {
+-	width: 25%;
+-}
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-left-width: 0;
+-}
+-.ui-datepicker-multi .ui-datepicker-buttonpane {
+-	clear: left;
+-}
+-.ui-datepicker-row-break {
+-	clear: both;
+-	width: 100%;
+-	font-size: 0;
+-}
+-
+-/* RTL support */
+-.ui-datepicker-rtl {
+-	direction: rtl;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev {
+-	right: 2px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next {
+-	left: 2px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev:hover {
+-	right: 1px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next:hover {
+-	left: 1px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane {
+-	clear: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+-	float: left;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+-.ui-datepicker-rtl .ui-datepicker-group {
+-	float: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-right-width: 0;
+-	border-left-width: 1px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.button.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.button.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.button.css	(revision 15488)
+@@ -1,114 +0,0 @@
+-/*!
+- * jQuery UI Button 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Button#theming
+- */
+-.ui-button {
+-	display: inline-block;
+-	position: relative;
+-	padding: 0;
+-	line-height: normal;
+-	margin-right: .1em;
+-	cursor: pointer;
+-	vertical-align: middle;
+-	text-align: center;
+-	overflow: visible; /* removes extra width in IE */
+-}
+-.ui-button,
+-.ui-button:link,
+-.ui-button:visited,
+-.ui-button:hover,
+-.ui-button:active {
+-	text-decoration: none;
+-}
+-/* to make room for the icon, a width needs to be set here */
+-.ui-button-icon-only {
+-	width: 2.2em;
+-}
+-/* button elements seem to need a little more width */
+-button.ui-button-icon-only {
+-	width: 2.4em;
+-}
+-.ui-button-icons-only {
+-	width: 3.4em;
+-}
+-button.ui-button-icons-only {
+-	width: 3.7em;
+-}
+-
+-/* button text element */
+-.ui-button .ui-button-text {
+-	display: block;
+-	line-height: normal;
+-}
+-.ui-button-text-only .ui-button-text {
+-	padding: .4em 1em;
+-}
+-.ui-button-icon-only .ui-button-text,
+-.ui-button-icons-only .ui-button-text {
+-	padding: .4em;
+-	text-indent: -9999999px;
+-}
+-.ui-button-text-icon-primary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 1em .4em 2.1em;
+-}
+-.ui-button-text-icon-secondary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 2.1em .4em 1em;
+-}
+-.ui-button-text-icons .ui-button-text {
+-	padding-left: 2.1em;
+-	padding-right: 2.1em;
+-}
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button {
+-	padding: .4em 1em;
+-}
+-
+-/* button icon element(s) */
+-.ui-button-icon-only .ui-icon,
+-.ui-button-text-icon-primary .ui-icon,
+-.ui-button-text-icon-secondary .ui-icon,
+-.ui-button-text-icons .ui-icon,
+-.ui-button-icons-only .ui-icon {
+-	position: absolute;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-button-icon-only .ui-icon {
+-	left: 50%;
+-	margin-left: -8px;
+-}
+-.ui-button-text-icon-primary .ui-button-icon-primary,
+-.ui-button-text-icons .ui-button-icon-primary,
+-.ui-button-icons-only .ui-button-icon-primary {
+-	left: .5em;
+-}
+-.ui-button-text-icon-secondary .ui-button-icon-secondary,
+-.ui-button-text-icons .ui-button-icon-secondary,
+-.ui-button-icons-only .ui-button-icon-secondary {
+-	right: .5em;
+-}
+-
+-/* button sets */
+-.ui-buttonset {
+-	margin-right: 7px;
+-}
+-.ui-buttonset .ui-button {
+-	margin-left: 0;
+-	margin-right: -.3em;
+-}
+-
+-/* workarounds */
+-/* reset extra padding in Firefox, see h5bp.com/l */
+-input.ui-button::-moz-focus-inner,
+-button.ui-button::-moz-focus-inner {
+-	border: 0;
+-	padding: 0;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.spinner.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.spinner.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.spinner.css	(revision 15488)
+@@ -1,65 +0,0 @@
+-/*!
+- * jQuery UI Spinner 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Spinner#theming
+- */
+-.ui-spinner {
+-	position: relative;
+-	display: inline-block;
+-	overflow: hidden;
+-	padding: 0;
+-	vertical-align: middle;
+-}
+-.ui-spinner-input {
+-	border: none;
+-	background: none;
+-	color: inherit;
+-	padding: 0;
+-	margin: .2em 0;
+-	vertical-align: middle;
+-	margin-left: .4em;
+-	margin-right: 22px;
+-}
+-.ui-spinner-button {
+-	width: 16px;
+-	height: 50%;
+-	font-size: .5em;
+-	padding: 0;
+-	margin: 0;
+-	text-align: center;
+-	position: absolute;
+-	cursor: default;
+-	display: block;
+-	overflow: hidden;
+-	right: 0;
+-}
+-/* more specificity required here to overide default borders */
+-.ui-spinner a.ui-spinner-button {
+-	border-top: none;
+-	border-bottom: none;
+-	border-right: none;
+-}
+-/* vertical centre icon */
+-.ui-spinner .ui-icon {
+-	position: absolute;
+-	margin-top: -8px;
+-	top: 50%;
+-	left: 0;
+-}
+-.ui-spinner-up {
+-	top: 0;
+-}
+-.ui-spinner-down {
+-	bottom: 0;
+-}
+-
+-/* TR overrides */
+-.ui-spinner .ui-icon-triangle-1-s {
+-	/* need to fix icons sprite */
+-	background-position: -65px -16px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.resizable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.resizable.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.resizable.css	(revision 15488)
+@@ -1,78 +0,0 @@
+-/*!
+- * jQuery UI Resizable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Resizable#theming
+- */
+-.ui-resizable {
+-	position: relative;
+-}
+-.ui-resizable-handle {
+-	position: absolute;
+-	font-size: 0.1px;
+-	display: block;
+-}
+-.ui-resizable-disabled .ui-resizable-handle,
+-.ui-resizable-autohide .ui-resizable-handle {
+-	display: none;
+-}
+-.ui-resizable-n {
+-	cursor: n-resize;
+-	height: 7px;
+-	width: 100%;
+-	top: -5px;
+-	left: 0;
+-}
+-.ui-resizable-s {
+-	cursor: s-resize;
+-	height: 7px;
+-	width: 100%;
+-	bottom: -5px;
+-	left: 0;
+-}
+-.ui-resizable-e {
+-	cursor: e-resize;
+-	width: 7px;
+-	right: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-w {
+-	cursor: w-resize;
+-	width: 7px;
+-	left: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-se {
+-	cursor: se-resize;
+-	width: 12px;
+-	height: 12px;
+-	right: 1px;
+-	bottom: 1px;
+-}
+-.ui-resizable-sw {
+-	cursor: sw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	bottom: -5px;
+-}
+-.ui-resizable-nw {
+-	cursor: nw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	top: -5px;
+-}
+-.ui-resizable-ne {
+-	cursor: ne-resize;
+-	width: 9px;
+-	height: 9px;
+-	right: -5px;
+-	top: -5px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.slider.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.slider.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.slider.css	(revision 15488)
+@@ -1,73 +0,0 @@
+-/*!
+- * jQuery UI Slider 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Slider#theming
+- */
+-.ui-slider {
+-	position: relative;
+-	text-align: left;
+-}
+-.ui-slider .ui-slider-handle {
+-	position: absolute;
+-	z-index: 2;
+-	width: 1.2em;
+-	height: 1.2em;
+-	cursor: default;
+-}
+-.ui-slider .ui-slider-range {
+-	position: absolute;
+-	z-index: 1;
+-	font-size: .7em;
+-	display: block;
+-	border: 0;
+-	background-position: 0 0;
+-}
+-
+-/* For IE8 - See #6727 */
+-.ui-slider.ui-state-disabled .ui-slider-handle,
+-.ui-slider.ui-state-disabled .ui-slider-range {
+-	filter: inherit;
+-}
+-
+-.ui-slider-horizontal {
+-	height: .8em;
+-}
+-.ui-slider-horizontal .ui-slider-handle {
+-	top: -.3em;
+-	margin-left: -.6em;
+-}
+-.ui-slider-horizontal .ui-slider-range {
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-slider-horizontal .ui-slider-range-min {
+-	left: 0;
+-}
+-.ui-slider-horizontal .ui-slider-range-max {
+-	right: 0;
+-}
+-
+-.ui-slider-vertical {
+-	width: .8em;
+-	height: 100px;
+-}
+-.ui-slider-vertical .ui-slider-handle {
+-	left: -.3em;
+-	margin-left: 0;
+-	margin-bottom: -.6em;
+-}
+-.ui-slider-vertical .ui-slider-range {
+-	left: 0;
+-	width: 100%;
+-}
+-.ui-slider-vertical .ui-slider-range-min {
+-	bottom: 0;
+-}
+-.ui-slider-vertical .ui-slider-range-max {
+-	top: 0;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_2e83ff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_888888_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_454545_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.core.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.core.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.core.css	(revision 15488)
+@@ -1,93 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden {
+-	display: none;
+-}
+-.ui-helper-hidden-accessible {
+-	border: 0;
+-	clip: rect(0 0 0 0);
+-	height: 1px;
+-	margin: -1px;
+-	overflow: hidden;
+-	padding: 0;
+-	position: absolute;
+-	width: 1px;
+-}
+-.ui-helper-reset {
+-	margin: 0;
+-	padding: 0;
+-	border: 0;
+-	outline: 0;
+-	line-height: 1.3;
+-	text-decoration: none;
+-	font-size: 100%;
+-	list-style: none;
+-}
+-.ui-helper-clearfix:before,
+-.ui-helper-clearfix:after {
+-	content: "";
+-	display: table;
+-	border-collapse: collapse;
+-}
+-.ui-helper-clearfix:after {
+-	clear: both;
+-}
+-.ui-helper-clearfix {
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-helper-zfix {
+-	width: 100%;
+-	height: 100%;
+-	top: 0;
+-	left: 0;
+-	position: absolute;
+-	opacity: 0;
+-	filter:Alpha(Opacity=0);
+-}
+-
+-.ui-front {
+-	z-index: 100;
+-}
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled {
+-	cursor: default !important;
+-}
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	display: block;
+-	text-indent: -99999px;
+-	overflow: hidden;
+-	background-repeat: no-repeat;
+-}
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	position: fixed;
+-	top: 0;
+-	left: 0;
+-	width: 100%;
+-	height: 100%;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tabs.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tabs.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tabs.css	(revision 15488)
+@@ -1,52 +0,0 @@
+-/*!
+- * jQuery UI Tabs 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Tabs#theming
+- */
+-.ui-tabs {
+-	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-	padding: .2em;
+-}
+-.ui-tabs .ui-tabs-nav {
+-	margin: 0;
+-	padding: .2em .2em 0;
+-}
+-.ui-tabs .ui-tabs-nav li {
+-	list-style: none;
+-	float: left;
+-	position: relative;
+-	top: 0;
+-	margin: 1px .2em 0 0;
+-	border-bottom-width: 0;
+-	padding: 0;
+-	white-space: nowrap;
+-}
+-.ui-tabs .ui-tabs-nav li a {
+-	float: left;
+-	padding: .5em 1em;
+-	text-decoration: none;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+-	margin-bottom: -1px;
+-	padding-bottom: 1px;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+-	cursor: text;
+-}
+-.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+-	cursor: pointer;
+-}
+-.ui-tabs .ui-tabs-panel {
+-	display: block;
+-	border-width: 0;
+-	padding: 1em 1.4em;
+-	background: none;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.progressbar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.progressbar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.progressbar.css	(revision 15488)
+@@ -1,28 +0,0 @@
+-/*!
+- * jQuery UI Progressbar 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Progressbar#theming
+- */
+-.ui-progressbar {
+-	height: 2em;
+-	text-align: left;
+-	overflow: hidden;
+-}
+-.ui-progressbar .ui-progressbar-value {
+-	margin: -1px;
+-	height: 100%;
+-}
+-.ui-progressbar .ui-progressbar-overlay {
+-	background: url("images/animated-overlay.gif");
+-	height: 100%;
+-	filter: alpha(opacity=25);
+-	opacity: 0.25;
+-}
+-.ui-progressbar-indeterminate .ui-progressbar-value {
+-	background-image: none;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tooltip.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tooltip.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tooltip.css	(revision 15488)
+@@ -1,19 +0,0 @@
+-/*!
+- * jQuery UI Tooltip 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- */
+-.ui-tooltip {
+-	padding: 8px;
+-	position: absolute;
+-	z-index: 9999;
+-	max-width: 300px;
+-	-webkit-box-shadow: 0 0 5px #aaa;
+-	box-shadow: 0 0 5px #aaa;
+-}
+-body .ui-tooltip {
+-	border-width: 2px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.dialog.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.dialog.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.dialog.css	(revision 15488)
+@@ -1,69 +0,0 @@
+-/*!
+- * jQuery UI Dialog 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Dialog#theming
+- */
+-.ui-dialog {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	padding: .2em;
+-	outline: 0;
+-}
+-.ui-dialog .ui-dialog-titlebar {
+-	padding: .4em 1em;
+-	position: relative;
+-}
+-.ui-dialog .ui-dialog-title {
+-	float: left;
+-	margin: .1em 0;
+-	white-space: nowrap;
+-	width: 90%;
+-	overflow: hidden;
+-	text-overflow: ellipsis;
+-}
+-.ui-dialog .ui-dialog-titlebar-close {
+-	position: absolute;
+-	right: .3em;
+-	top: 50%;
+-	width: 21px;
+-	margin: -10px 0 0 0;
+-	padding: 1px;
+-	height: 20px;
+-}
+-.ui-dialog .ui-dialog-content {
+-	position: relative;
+-	border: 0;
+-	padding: .5em 1em;
+-	background: none;
+-	overflow: auto;
+-}
+-.ui-dialog .ui-dialog-buttonpane {
+-	text-align: left;
+-	border-width: 1px 0 0 0;
+-	background-image: none;
+-	margin-top: .5em;
+-	padding: .3em 1em .5em .4em;
+-}
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+-	float: right;
+-}
+-.ui-dialog .ui-dialog-buttonpane button {
+-	margin: .5em .4em .5em 0;
+-	cursor: pointer;
+-}
+-.ui-dialog .ui-resizable-se {
+-	width: 12px;
+-	height: 12px;
+-	right: -5px;
+-	bottom: -5px;
+-	background-position: 16px 16px;
+-}
+-.ui-draggable .ui-dialog-titlebar {
+-	cursor: move;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery-ui.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery-ui.css	(revision 15488)
+@@ -1,1176 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden {
+-	display: none;
+-}
+-.ui-helper-hidden-accessible {
+-	border: 0;
+-	clip: rect(0 0 0 0);
+-	height: 1px;
+-	margin: -1px;
+-	overflow: hidden;
+-	padding: 0;
+-	position: absolute;
+-	width: 1px;
+-}
+-.ui-helper-reset {
+-	margin: 0;
+-	padding: 0;
+-	border: 0;
+-	outline: 0;
+-	line-height: 1.3;
+-	text-decoration: none;
+-	font-size: 100%;
+-	list-style: none;
+-}
+-.ui-helper-clearfix:before,
+-.ui-helper-clearfix:after {
+-	content: "";
+-	display: table;
+-	border-collapse: collapse;
+-}
+-.ui-helper-clearfix:after {
+-	clear: both;
+-}
+-.ui-helper-clearfix {
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-helper-zfix {
+-	width: 100%;
+-	height: 100%;
+-	top: 0;
+-	left: 0;
+-	position: absolute;
+-	opacity: 0;
+-	filter:Alpha(Opacity=0);
+-}
+-
+-.ui-front {
+-	z-index: 100;
+-}
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled {
+-	cursor: default !important;
+-}
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	display: block;
+-	text-indent: -99999px;
+-	overflow: hidden;
+-	background-repeat: no-repeat;
+-}
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	position: fixed;
+-	top: 0;
+-	left: 0;
+-	width: 100%;
+-	height: 100%;
+-}
+-.ui-resizable {
+-	position: relative;
+-}
+-.ui-resizable-handle {
+-	position: absolute;
+-	font-size: 0.1px;
+-	display: block;
+-}
+-.ui-resizable-disabled .ui-resizable-handle,
+-.ui-resizable-autohide .ui-resizable-handle {
+-	display: none;
+-}
+-.ui-resizable-n {
+-	cursor: n-resize;
+-	height: 7px;
+-	width: 100%;
+-	top: -5px;
+-	left: 0;
+-}
+-.ui-resizable-s {
+-	cursor: s-resize;
+-	height: 7px;
+-	width: 100%;
+-	bottom: -5px;
+-	left: 0;
+-}
+-.ui-resizable-e {
+-	cursor: e-resize;
+-	width: 7px;
+-	right: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-w {
+-	cursor: w-resize;
+-	width: 7px;
+-	left: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-se {
+-	cursor: se-resize;
+-	width: 12px;
+-	height: 12px;
+-	right: 1px;
+-	bottom: 1px;
+-}
+-.ui-resizable-sw {
+-	cursor: sw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	bottom: -5px;
+-}
+-.ui-resizable-nw {
+-	cursor: nw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	top: -5px;
+-}
+-.ui-resizable-ne {
+-	cursor: ne-resize;
+-	width: 9px;
+-	height: 9px;
+-	right: -5px;
+-	top: -5px;
+-}
+-.ui-selectable-helper {
+-	position: absolute;
+-	z-index: 100;
+-	border: 1px dotted black;
+-}
+-.ui-accordion .ui-accordion-header {
+-	display: block;
+-	cursor: pointer;
+-	position: relative;
+-	margin-top: 2px;
+-	padding: .5em .5em .5em .7em;
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-accordion .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-noicons {
+-	padding-left: .7em;
+-}
+-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+-	position: absolute;
+-	left: .5em;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-accordion .ui-accordion-content {
+-	padding: 1em 2.2em;
+-	border-top: 0;
+-	overflow: auto;
+-}
+-.ui-autocomplete {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	cursor: default;
+-}
+-.ui-button {
+-	display: inline-block;
+-	position: relative;
+-	padding: 0;
+-	line-height: normal;
+-	margin-right: .1em;
+-	cursor: pointer;
+-	vertical-align: middle;
+-	text-align: center;
+-	overflow: visible; /* removes extra width in IE */
+-}
+-.ui-button,
+-.ui-button:link,
+-.ui-button:visited,
+-.ui-button:hover,
+-.ui-button:active {
+-	text-decoration: none;
+-}
+-/* to make room for the icon, a width needs to be set here */
+-.ui-button-icon-only {
+-	width: 2.2em;
+-}
+-/* button elements seem to need a little more width */
+-button.ui-button-icon-only {
+-	width: 2.4em;
+-}
+-.ui-button-icons-only {
+-	width: 3.4em;
+-}
+-button.ui-button-icons-only {
+-	width: 3.7em;
+-}
+-
+-/* button text element */
+-.ui-button .ui-button-text {
+-	display: block;
+-	line-height: normal;
+-}
+-.ui-button-text-only .ui-button-text {
+-	padding: .4em 1em;
+-}
+-.ui-button-icon-only .ui-button-text,
+-.ui-button-icons-only .ui-button-text {
+-	padding: .4em;
+-	text-indent: -9999999px;
+-}
+-.ui-button-text-icon-primary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 1em .4em 2.1em;
+-}
+-.ui-button-text-icon-secondary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 2.1em .4em 1em;
+-}
+-.ui-button-text-icons .ui-button-text {
+-	padding-left: 2.1em;
+-	padding-right: 2.1em;
+-}
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button {
+-	padding: .4em 1em;
+-}
+-
+-/* button icon element(s) */
+-.ui-button-icon-only .ui-icon,
+-.ui-button-text-icon-primary .ui-icon,
+-.ui-button-text-icon-secondary .ui-icon,
+-.ui-button-text-icons .ui-icon,
+-.ui-button-icons-only .ui-icon {
+-	position: absolute;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-button-icon-only .ui-icon {
+-	left: 50%;
+-	margin-left: -8px;
+-}
+-.ui-button-text-icon-primary .ui-button-icon-primary,
+-.ui-button-text-icons .ui-button-icon-primary,
+-.ui-button-icons-only .ui-button-icon-primary {
+-	left: .5em;
+-}
+-.ui-button-text-icon-secondary .ui-button-icon-secondary,
+-.ui-button-text-icons .ui-button-icon-secondary,
+-.ui-button-icons-only .ui-button-icon-secondary {
+-	right: .5em;
+-}
+-
+-/* button sets */
+-.ui-buttonset {
+-	margin-right: 7px;
+-}
+-.ui-buttonset .ui-button {
+-	margin-left: 0;
+-	margin-right: -.3em;
+-}
+-
+-/* workarounds */
+-/* reset extra padding in Firefox, see h5bp.com/l */
+-input.ui-button::-moz-focus-inner,
+-button.ui-button::-moz-focus-inner {
+-	border: 0;
+-	padding: 0;
+-}
+-.ui-datepicker {
+-	width: 17em;
+-	padding: .2em .2em 0;
+-	display: none;
+-}
+-.ui-datepicker .ui-datepicker-header {
+-	position: relative;
+-	padding: .2em 0;
+-}
+-.ui-datepicker .ui-datepicker-prev,
+-.ui-datepicker .ui-datepicker-next {
+-	position: absolute;
+-	top: 2px;
+-	width: 1.8em;
+-	height: 1.8em;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover,
+-.ui-datepicker .ui-datepicker-next-hover {
+-	top: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev {
+-	left: 2px;
+-}
+-.ui-datepicker .ui-datepicker-next {
+-	right: 2px;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover {
+-	left: 1px;
+-}
+-.ui-datepicker .ui-datepicker-next-hover {
+-	right: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev span,
+-.ui-datepicker .ui-datepicker-next span {
+-	display: block;
+-	position: absolute;
+-	left: 50%;
+-	margin-left: -8px;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-datepicker .ui-datepicker-title {
+-	margin: 0 2.3em;
+-	line-height: 1.8em;
+-	text-align: center;
+-}
+-.ui-datepicker .ui-datepicker-title select {
+-	font-size: 1em;
+-	margin: 1px 0;
+-}
+-.ui-datepicker select.ui-datepicker-month-year {
+-	width: 100%;
+-}
+-.ui-datepicker select.ui-datepicker-month,
+-.ui-datepicker select.ui-datepicker-year {
+-	width: 49%;
+-}
+-.ui-datepicker table {
+-	width: 100%;
+-	font-size: .9em;
+-	border-collapse: collapse;
+-	margin: 0 0 .4em;
+-}
+-.ui-datepicker th {
+-	padding: .7em .3em;
+-	text-align: center;
+-	font-weight: bold;
+-	border: 0;
+-}
+-.ui-datepicker td {
+-	border: 0;
+-	padding: 1px;
+-}
+-.ui-datepicker td span,
+-.ui-datepicker td a {
+-	display: block;
+-	padding: .2em;
+-	text-align: right;
+-	text-decoration: none;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane {
+-	background-image: none;
+-	margin: .7em 0 0 0;
+-	padding: 0 .2em;
+-	border-left: 0;
+-	border-right: 0;
+-	border-bottom: 0;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button {
+-	float: right;
+-	margin: .5em .2em .4em;
+-	cursor: pointer;
+-	padding: .2em .6em .3em .6em;
+-	width: auto;
+-	overflow: visible;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+-	float: left;
+-}
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi {
+-	width: auto;
+-}
+-.ui-datepicker-multi .ui-datepicker-group {
+-	float: left;
+-}
+-.ui-datepicker-multi .ui-datepicker-group table {
+-	width: 95%;
+-	margin: 0 auto .4em;
+-}
+-.ui-datepicker-multi-2 .ui-datepicker-group {
+-	width: 50%;
+-}
+-.ui-datepicker-multi-3 .ui-datepicker-group {
+-	width: 33.3%;
+-}
+-.ui-datepicker-multi-4 .ui-datepicker-group {
+-	width: 25%;
+-}
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-left-width: 0;
+-}
+-.ui-datepicker-multi .ui-datepicker-buttonpane {
+-	clear: left;
+-}
+-.ui-datepicker-row-break {
+-	clear: both;
+-	width: 100%;
+-	font-size: 0;
+-}
+-
+-/* RTL support */
+-.ui-datepicker-rtl {
+-	direction: rtl;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev {
+-	right: 2px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next {
+-	left: 2px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev:hover {
+-	right: 1px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next:hover {
+-	left: 1px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane {
+-	clear: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+-	float: left;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+-.ui-datepicker-rtl .ui-datepicker-group {
+-	float: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-right-width: 0;
+-	border-left-width: 1px;
+-}
+-.ui-dialog {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	padding: .2em;
+-	outline: 0;
+-}
+-.ui-dialog .ui-dialog-titlebar {
+-	padding: .4em 1em;
+-	position: relative;
+-}
+-.ui-dialog .ui-dialog-title {
+-	float: left;
+-	margin: .1em 0;
+-	white-space: nowrap;
+-	width: 90%;
+-	overflow: hidden;
+-	text-overflow: ellipsis;
+-}
+-.ui-dialog .ui-dialog-titlebar-close {
+-	position: absolute;
+-	right: .3em;
+-	top: 50%;
+-	width: 21px;
+-	margin: -10px 0 0 0;
+-	padding: 1px;
+-	height: 20px;
+-}
+-.ui-dialog .ui-dialog-content {
+-	position: relative;
+-	border: 0;
+-	padding: .5em 1em;
+-	background: none;
+-	overflow: auto;
+-}
+-.ui-dialog .ui-dialog-buttonpane {
+-	text-align: left;
+-	border-width: 1px 0 0 0;
+-	background-image: none;
+-	margin-top: .5em;
+-	padding: .3em 1em .5em .4em;
+-}
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+-	float: right;
+-}
+-.ui-dialog .ui-dialog-buttonpane button {
+-	margin: .5em .4em .5em 0;
+-	cursor: pointer;
+-}
+-.ui-dialog .ui-resizable-se {
+-	width: 12px;
+-	height: 12px;
+-	right: -5px;
+-	bottom: -5px;
+-	background-position: 16px 16px;
+-}
+-.ui-draggable .ui-dialog-titlebar {
+-	cursor: move;
+-}
+-.ui-menu {
+-	list-style: none;
+-	padding: 2px;
+-	margin: 0;
+-	display: block;
+-	outline: none;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-	position: absolute;
+-}
+-.ui-menu .ui-menu-item {
+-	margin: 0;
+-	padding: 0;
+-	width: 100%;
+-	/* support: IE10, see #8844 */
+-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+-}
+-.ui-menu .ui-menu-divider {
+-	margin: 5px -2px 5px -2px;
+-	height: 0;
+-	font-size: 0;
+-	line-height: 0;
+-	border-width: 1px 0 0 0;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration: none;
+-	display: block;
+-	padding: 2px .4em;
+-	line-height: 1.5;
+-	min-height: 0; /* support: IE7 */
+-	font-weight: normal;
+-}
+-.ui-menu .ui-menu-item a.ui-state-focus,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-
+-.ui-menu .ui-state-disabled {
+-	font-weight: normal;
+-	margin: .4em 0 .2em;
+-	line-height: 1.5;
+-}
+-.ui-menu .ui-state-disabled a {
+-	cursor: default;
+-}
+-
+-/* icon support */
+-.ui-menu-icons {
+-	position: relative;
+-}
+-.ui-menu-icons .ui-menu-item a {
+-	position: relative;
+-	padding-left: 2em;
+-}
+-
+-/* left-aligned */
+-.ui-menu .ui-icon {
+-	position: absolute;
+-	top: .2em;
+-	left: .2em;
+-}
+-
+-/* right-aligned */
+-.ui-menu .ui-menu-icon {
+-	position: static;
+-	float: right;
+-}
+-.ui-progressbar {
+-	height: 2em;
+-	text-align: left;
+-	overflow: hidden;
+-}
+-.ui-progressbar .ui-progressbar-value {
+-	margin: -1px;
+-	height: 100%;
+-}
+-.ui-progressbar .ui-progressbar-overlay {
+-	background: url("images/animated-overlay.gif");
+-	height: 100%;
+-	filter: alpha(opacity=25);
+-	opacity: 0.25;
+-}
+-.ui-progressbar-indeterminate .ui-progressbar-value {
+-	background-image: none;
+-}
+-.ui-slider {
+-	position: relative;
+-	text-align: left;
+-}
+-.ui-slider .ui-slider-handle {
+-	position: absolute;
+-	z-index: 2;
+-	width: 1.2em;
+-	height: 1.2em;
+-	cursor: default;
+-}
+-.ui-slider .ui-slider-range {
+-	position: absolute;
+-	z-index: 1;
+-	font-size: .7em;
+-	display: block;
+-	border: 0;
+-	background-position: 0 0;
+-}
+-
+-/* For IE8 - See #6727 */
+-.ui-slider.ui-state-disabled .ui-slider-handle,
+-.ui-slider.ui-state-disabled .ui-slider-range {
+-	filter: inherit;
+-}
+-
+-.ui-slider-horizontal {
+-	height: .8em;
+-}
+-.ui-slider-horizontal .ui-slider-handle {
+-	top: -.3em;
+-	margin-left: -.6em;
+-}
+-.ui-slider-horizontal .ui-slider-range {
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-slider-horizontal .ui-slider-range-min {
+-	left: 0;
+-}
+-.ui-slider-horizontal .ui-slider-range-max {
+-	right: 0;
+-}
+-
+-.ui-slider-vertical {
+-	width: .8em;
+-	height: 100px;
+-}
+-.ui-slider-vertical .ui-slider-handle {
+-	left: -.3em;
+-	margin-left: 0;
+-	margin-bottom: -.6em;
+-}
+-.ui-slider-vertical .ui-slider-range {
+-	left: 0;
+-	width: 100%;
+-}
+-.ui-slider-vertical .ui-slider-range-min {
+-	bottom: 0;
+-}
+-.ui-slider-vertical .ui-slider-range-max {
+-	top: 0;
+-}
+-.ui-spinner {
+-	position: relative;
+-	display: inline-block;
+-	overflow: hidden;
+-	padding: 0;
+-	vertical-align: middle;
+-}
+-.ui-spinner-input {
+-	border: none;
+-	background: none;
+-	color: inherit;
+-	padding: 0;
+-	margin: .2em 0;
+-	vertical-align: middle;
+-	margin-left: .4em;
+-	margin-right: 22px;
+-}
+-.ui-spinner-button {
+-	width: 16px;
+-	height: 50%;
+-	font-size: .5em;
+-	padding: 0;
+-	margin: 0;
+-	text-align: center;
+-	position: absolute;
+-	cursor: default;
+-	display: block;
+-	overflow: hidden;
+-	right: 0;
+-}
+-/* more specificity required here to overide default borders */
+-.ui-spinner a.ui-spinner-button {
+-	border-top: none;
+-	border-bottom: none;
+-	border-right: none;
+-}
+-/* vertical centre icon */
+-.ui-spinner .ui-icon {
+-	position: absolute;
+-	margin-top: -8px;
+-	top: 50%;
+-	left: 0;
+-}
+-.ui-spinner-up {
+-	top: 0;
+-}
+-.ui-spinner-down {
+-	bottom: 0;
+-}
+-
+-/* TR overrides */
+-.ui-spinner .ui-icon-triangle-1-s {
+-	/* need to fix icons sprite */
+-	background-position: -65px -16px;
+-}
+-.ui-tabs {
+-	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-	padding: .2em;
+-}
+-.ui-tabs .ui-tabs-nav {
+-	margin: 0;
+-	padding: .2em .2em 0;
+-}
+-.ui-tabs .ui-tabs-nav li {
+-	list-style: none;
+-	float: left;
+-	position: relative;
+-	top: 0;
+-	margin: 1px .2em 0 0;
+-	border-bottom-width: 0;
+-	padding: 0;
+-	white-space: nowrap;
+-}
+-.ui-tabs .ui-tabs-nav li a {
+-	float: left;
+-	padding: .5em 1em;
+-	text-decoration: none;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+-	margin-bottom: -1px;
+-	padding-bottom: 1px;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+-	cursor: text;
+-}
+-.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+-	cursor: pointer;
+-}
+-.ui-tabs .ui-tabs-panel {
+-	display: block;
+-	border-width: 0;
+-	padding: 1em 1.4em;
+-	background: none;
+-}
+-.ui-tooltip {
+-	padding: 8px;
+-	position: absolute;
+-	z-index: 9999;
+-	max-width: 300px;
+-	-webkit-box-shadow: 0 0 5px #aaa;
+-	box-shadow: 0 0 5px #aaa;
+-}
+-body .ui-tooltip {
+-	border-width: 2px;
+-}
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget {
+-	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+-	font-size: 1.1em/*{fsDefault}*/;
+-}
+-.ui-widget .ui-widget {
+-	font-size: 1em;
+-}
+-.ui-widget input,
+-.ui-widget select,
+-.ui-widget textarea,
+-.ui-widget button {
+-	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+-	font-size: 1em;
+-}
+-.ui-widget-content {
+-	border: 1px solid #aaaaaa/*{borderColorContent}*/;
+-	background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
+-	color: #222222/*{fcContent}*/;
+-}
+-.ui-widget-content a {
+-	color: #222222/*{fcContent}*/;
+-}
+-.ui-widget-header {
+-	border: 1px solid #aaaaaa/*{borderColorHeader}*/;
+-	background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
+-	color: #222222/*{fcHeader}*/;
+-	font-weight: bold;
+-}
+-.ui-widget-header a {
+-	color: #222222/*{fcHeader}*/;
+-}
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default,
+-.ui-widget-content .ui-state-default,
+-.ui-widget-header .ui-state-default {
+-	border: 1px solid #d3d3d3/*{borderColorDefault}*/;
+-	background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #555555/*{fcDefault}*/;
+-}
+-.ui-state-default a,
+-.ui-state-default a:link,
+-.ui-state-default a:visited {
+-	color: #555555/*{fcDefault}*/;
+-	text-decoration: none;
+-}
+-.ui-state-hover,
+-.ui-widget-content .ui-state-hover,
+-.ui-widget-header .ui-state-hover,
+-.ui-state-focus,
+-.ui-widget-content .ui-state-focus,
+-.ui-widget-header .ui-state-focus {
+-	border: 1px solid #999999/*{borderColorHover}*/;
+-	background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #212121/*{fcHover}*/;
+-}
+-.ui-state-hover a,
+-.ui-state-hover a:hover,
+-.ui-state-hover a:link,
+-.ui-state-hover a:visited {
+-	color: #212121/*{fcHover}*/;
+-	text-decoration: none;
+-}
+-.ui-state-active,
+-.ui-widget-content .ui-state-active,
+-.ui-widget-header .ui-state-active {
+-	border: 1px solid #aaaaaa/*{borderColorActive}*/;
+-	background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #212121/*{fcActive}*/;
+-}
+-.ui-state-active a,
+-.ui-state-active a:link,
+-.ui-state-active a:visited {
+-	color: #212121/*{fcActive}*/;
+-	text-decoration: none;
+-}
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight,
+-.ui-widget-content .ui-state-highlight,
+-.ui-widget-header .ui-state-highlight {
+-	border: 1px solid #fcefa1/*{borderColorHighlight}*/;
+-	background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
+-	color: #363636/*{fcHighlight}*/;
+-}
+-.ui-state-highlight a,
+-.ui-widget-content .ui-state-highlight a,
+-.ui-widget-header .ui-state-highlight a {
+-	color: #363636/*{fcHighlight}*/;
+-}
+-.ui-state-error,
+-.ui-widget-content .ui-state-error,
+-.ui-widget-header .ui-state-error {
+-	border: 1px solid #cd0a0a/*{borderColorError}*/;
+-	background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-state-error a,
+-.ui-widget-content .ui-state-error a,
+-.ui-widget-header .ui-state-error a {
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-state-error-text,
+-.ui-widget-content .ui-state-error-text,
+-.ui-widget-header .ui-state-error-text {
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-priority-primary,
+-.ui-widget-content .ui-priority-primary,
+-.ui-widget-header .ui-priority-primary {
+-	font-weight: bold;
+-}
+-.ui-priority-secondary,
+-.ui-widget-content .ui-priority-secondary,
+-.ui-widget-header .ui-priority-secondary {
+-	opacity: .7;
+-	filter:Alpha(Opacity=70);
+-	font-weight: normal;
+-}
+-.ui-state-disabled,
+-.ui-widget-content .ui-state-disabled,
+-.ui-widget-header .ui-state-disabled {
+-	opacity: .35;
+-	filter:Alpha(Opacity=35);
+-	background-image: none;
+-}
+-.ui-state-disabled .ui-icon {
+-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+-}
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	width: 16px;
+-	height: 16px;
+-}
+-.ui-icon,
+-.ui-widget-content .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
+-}
+-.ui-widget-header .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
+-}
+-.ui-state-default .ui-icon {
+-	background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
+-}
+-.ui-state-hover .ui-icon,
+-.ui-state-focus .ui-icon {
+-	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
+-}
+-.ui-state-active .ui-icon {
+-	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
+-}
+-.ui-state-highlight .ui-icon {
+-	background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
+-}
+-.ui-state-error .ui-icon,
+-.ui-state-error-text .ui-icon {
+-	background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
+-}
+-
+-/* positioning */
+-.ui-icon-blank { background-position: 16px 16px; }
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-on { background-position: -96px -144px; }
+-.ui-icon-radio-off { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-left,
+-.ui-corner-tl {
+-	border-top-left-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-right,
+-.ui-corner-tr {
+-	border-top-right-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-left,
+-.ui-corner-bl {
+-	border-bottom-left-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-right,
+-.ui-corner-br {
+-	border-bottom-right-radius: 4px/*{cornerRadius}*/;
+-}
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
+-	opacity: .3/*{opacityOverlay}*/;
+-	filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
+-}
+-.ui-widget-shadow {
+-	margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
+-	padding: 8px/*{thicknessShadow}*/;
+-	background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
+-	opacity: .3/*{opacityShadow}*/;
+-	filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
+-	border-radius: 8px/*{cornerRadiusShadow}*/;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.accordion.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.accordion.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.accordion.css	(revision 15488)
+@@ -1,38 +0,0 @@
+-/*!
+- * jQuery UI Accordion 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Accordion#theming
+- */
+-.ui-accordion .ui-accordion-header {
+-	display: block;
+-	cursor: pointer;
+-	position: relative;
+-	margin-top: 2px;
+-	padding: .5em .5em .5em .7em;
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-accordion .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-noicons {
+-	padding-left: .7em;
+-}
+-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+-	position: absolute;
+-	left: .5em;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-accordion .ui-accordion-content {
+-	padding: 1em 2.2em;
+-	border-top: 0;
+-	overflow: auto;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.autocomplete.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.autocomplete.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.autocomplete.css	(revision 15488)
+@@ -1,16 +0,0 @@
+-/*!
+- * jQuery UI Autocomplete 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Autocomplete#theming
+- */
+-.ui-autocomplete {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	cursor: default;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.theme.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.theme.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.theme.css	(revision 15488)
+@@ -1,406 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- *
+- * To view and modify this theme, visit http://jqueryui.com/themeroller/
+- */
+-
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget {
+-	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+-	font-size: 1.1em/*{fsDefault}*/;
+-}
+-.ui-widget .ui-widget {
+-	font-size: 1em;
+-}
+-.ui-widget input,
+-.ui-widget select,
+-.ui-widget textarea,
+-.ui-widget button {
+-	font-family: Verdana,Arial,sans-serif/*{ffDefault}*/;
+-	font-size: 1em;
+-}
+-.ui-widget-content {
+-	border: 1px solid #aaaaaa/*{borderColorContent}*/;
+-	background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
+-	color: #222222/*{fcContent}*/;
+-}
+-.ui-widget-content a {
+-	color: #222222/*{fcContent}*/;
+-}
+-.ui-widget-header {
+-	border: 1px solid #aaaaaa/*{borderColorHeader}*/;
+-	background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
+-	color: #222222/*{fcHeader}*/;
+-	font-weight: bold;
+-}
+-.ui-widget-header a {
+-	color: #222222/*{fcHeader}*/;
+-}
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default,
+-.ui-widget-content .ui-state-default,
+-.ui-widget-header .ui-state-default {
+-	border: 1px solid #d3d3d3/*{borderColorDefault}*/;
+-	background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #555555/*{fcDefault}*/;
+-}
+-.ui-state-default a,
+-.ui-state-default a:link,
+-.ui-state-default a:visited {
+-	color: #555555/*{fcDefault}*/;
+-	text-decoration: none;
+-}
+-.ui-state-hover,
+-.ui-widget-content .ui-state-hover,
+-.ui-widget-header .ui-state-hover,
+-.ui-state-focus,
+-.ui-widget-content .ui-state-focus,
+-.ui-widget-header .ui-state-focus {
+-	border: 1px solid #999999/*{borderColorHover}*/;
+-	background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #212121/*{fcHover}*/;
+-}
+-.ui-state-hover a,
+-.ui-state-hover a:hover,
+-.ui-state-hover a:link,
+-.ui-state-hover a:visited {
+-	color: #212121/*{fcHover}*/;
+-	text-decoration: none;
+-}
+-.ui-state-active,
+-.ui-widget-content .ui-state-active,
+-.ui-widget-header .ui-state-active {
+-	border: 1px solid #aaaaaa/*{borderColorActive}*/;
+-	background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
+-	font-weight: normal/*{fwDefault}*/;
+-	color: #212121/*{fcActive}*/;
+-}
+-.ui-state-active a,
+-.ui-state-active a:link,
+-.ui-state-active a:visited {
+-	color: #212121/*{fcActive}*/;
+-	text-decoration: none;
+-}
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight,
+-.ui-widget-content .ui-state-highlight,
+-.ui-widget-header .ui-state-highlight {
+-	border: 1px solid #fcefa1/*{borderColorHighlight}*/;
+-	background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
+-	color: #363636/*{fcHighlight}*/;
+-}
+-.ui-state-highlight a,
+-.ui-widget-content .ui-state-highlight a,
+-.ui-widget-header .ui-state-highlight a {
+-	color: #363636/*{fcHighlight}*/;
+-}
+-.ui-state-error,
+-.ui-widget-content .ui-state-error,
+-.ui-widget-header .ui-state-error {
+-	border: 1px solid #cd0a0a/*{borderColorError}*/;
+-	background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-state-error a,
+-.ui-widget-content .ui-state-error a,
+-.ui-widget-header .ui-state-error a {
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-state-error-text,
+-.ui-widget-content .ui-state-error-text,
+-.ui-widget-header .ui-state-error-text {
+-	color: #cd0a0a/*{fcError}*/;
+-}
+-.ui-priority-primary,
+-.ui-widget-content .ui-priority-primary,
+-.ui-widget-header .ui-priority-primary {
+-	font-weight: bold;
+-}
+-.ui-priority-secondary,
+-.ui-widget-content .ui-priority-secondary,
+-.ui-widget-header .ui-priority-secondary {
+-	opacity: .7;
+-	filter:Alpha(Opacity=70);
+-	font-weight: normal;
+-}
+-.ui-state-disabled,
+-.ui-widget-content .ui-state-disabled,
+-.ui-widget-header .ui-state-disabled {
+-	opacity: .35;
+-	filter:Alpha(Opacity=35);
+-	background-image: none;
+-}
+-.ui-state-disabled .ui-icon {
+-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+-}
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	width: 16px;
+-	height: 16px;
+-}
+-.ui-icon,
+-.ui-widget-content .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
+-}
+-.ui-widget-header .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
+-}
+-.ui-state-default .ui-icon {
+-	background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
+-}
+-.ui-state-hover .ui-icon,
+-.ui-state-focus .ui-icon {
+-	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
+-}
+-.ui-state-active .ui-icon {
+-	background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
+-}
+-.ui-state-highlight .ui-icon {
+-	background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
+-}
+-.ui-state-error .ui-icon,
+-.ui-state-error-text .ui-icon {
+-	background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
+-}
+-
+-/* positioning */
+-.ui-icon-blank { background-position: 16px 16px; }
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-on { background-position: -96px -144px; }
+-.ui-icon-radio-off { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-left,
+-.ui-corner-tl {
+-	border-top-left-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-right,
+-.ui-corner-tr {
+-	border-top-right-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-left,
+-.ui-corner-bl {
+-	border-bottom-left-radius: 4px/*{cornerRadius}*/;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-right,
+-.ui-corner-br {
+-	border-bottom-right-radius: 4px/*{cornerRadius}*/;
+-}
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
+-	opacity: .3/*{opacityOverlay}*/;
+-	filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
+-}
+-.ui-widget-shadow {
+-	margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
+-	padding: 8px/*{thicknessShadow}*/;
+-	background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
+-	opacity: .3/*{opacityShadow}*/;
+-	filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
+-	border-radius: 8px/*{cornerRadiusShadow}*/;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.dialog.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.dialog.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.dialog.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery-ui.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery-ui.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery-ui.min.css	(revision 15488)
+@@ -1,10 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:400;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.accordion.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.accordion.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.accordion.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.autocomplete.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.autocomplete.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.autocomplete.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_cd0a0a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_454545_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_2e83ff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons_888888_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.theme.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.theme.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.theme.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:400;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.selectable.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.selectable.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.selectable.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.menu.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.menu.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.menu.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.button.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.button.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.button.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.datepicker.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.datepicker.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.datepicker.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.spinner.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.spinner.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.spinner.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.resizable.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.resizable.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.resizable.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.slider.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.slider.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.slider.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.core.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.core.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.core.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.progressbar.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.progressbar.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.progressbar.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tabs.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tabs.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tabs.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tooltip.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tooltip.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tooltip.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.selectable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.selectable.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.selectable.css	(revision 15488)
+@@ -1,15 +0,0 @@
+-/*!
+- * jQuery UI Selectable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Selectable#theming
+- */
+-.ui-selectable-helper {
+-	position: absolute;
+-	z-index: 100;
+-	border: 1px dotted black;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.menu.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.menu.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.menu.css	(revision 15488)
+@@ -1,79 +0,0 @@
+-/*!
+- * jQuery UI Menu 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Menu#theming
+- */
+-.ui-menu {
+-	list-style: none;
+-	padding: 2px;
+-	margin: 0;
+-	display: block;
+-	outline: none;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-	position: absolute;
+-}
+-.ui-menu .ui-menu-item {
+-	margin: 0;
+-	padding: 0;
+-	width: 100%;
+-	/* support: IE10, see #8844 */
+-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+-}
+-.ui-menu .ui-menu-divider {
+-	margin: 5px -2px 5px -2px;
+-	height: 0;
+-	font-size: 0;
+-	line-height: 0;
+-	border-width: 1px 0 0 0;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration: none;
+-	display: block;
+-	padding: 2px .4em;
+-	line-height: 1.5;
+-	min-height: 0; /* support: IE7 */
+-	font-weight: normal;
+-}
+-.ui-menu .ui-menu-item a.ui-state-focus,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-
+-.ui-menu .ui-state-disabled {
+-	font-weight: normal;
+-	margin: .4em 0 .2em;
+-	line-height: 1.5;
+-}
+-.ui-menu .ui-state-disabled a {
+-	cursor: default;
+-}
+-
+-/* icon support */
+-.ui-menu-icons {
+-	position: relative;
+-}
+-.ui-menu-icons .ui-menu-item a {
+-	position: relative;
+-	padding-left: 2em;
+-}
+-
+-/* left-aligned */
+-.ui-menu .ui-icon {
+-	position: absolute;
+-	top: .2em;
+-	left: .2em;
+-}
+-
+-/* right-aligned */
+-.ui-menu .ui-menu-icon {
+-	position: static;
+-	float: right;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.button.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.button.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.button.css	(revision 15488)
+@@ -1,114 +0,0 @@
+-/*!
+- * jQuery UI Button 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Button#theming
+- */
+-.ui-button {
+-	display: inline-block;
+-	position: relative;
+-	padding: 0;
+-	line-height: normal;
+-	margin-right: .1em;
+-	cursor: pointer;
+-	vertical-align: middle;
+-	text-align: center;
+-	overflow: visible; /* removes extra width in IE */
+-}
+-.ui-button,
+-.ui-button:link,
+-.ui-button:visited,
+-.ui-button:hover,
+-.ui-button:active {
+-	text-decoration: none;
+-}
+-/* to make room for the icon, a width needs to be set here */
+-.ui-button-icon-only {
+-	width: 2.2em;
+-}
+-/* button elements seem to need a little more width */
+-button.ui-button-icon-only {
+-	width: 2.4em;
+-}
+-.ui-button-icons-only {
+-	width: 3.4em;
+-}
+-button.ui-button-icons-only {
+-	width: 3.7em;
+-}
+-
+-/* button text element */
+-.ui-button .ui-button-text {
+-	display: block;
+-	line-height: normal;
+-}
+-.ui-button-text-only .ui-button-text {
+-	padding: .4em 1em;
+-}
+-.ui-button-icon-only .ui-button-text,
+-.ui-button-icons-only .ui-button-text {
+-	padding: .4em;
+-	text-indent: -9999999px;
+-}
+-.ui-button-text-icon-primary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 1em .4em 2.1em;
+-}
+-.ui-button-text-icon-secondary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 2.1em .4em 1em;
+-}
+-.ui-button-text-icons .ui-button-text {
+-	padding-left: 2.1em;
+-	padding-right: 2.1em;
+-}
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button {
+-	padding: .4em 1em;
+-}
+-
+-/* button icon element(s) */
+-.ui-button-icon-only .ui-icon,
+-.ui-button-text-icon-primary .ui-icon,
+-.ui-button-text-icon-secondary .ui-icon,
+-.ui-button-text-icons .ui-icon,
+-.ui-button-icons-only .ui-icon {
+-	position: absolute;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-button-icon-only .ui-icon {
+-	left: 50%;
+-	margin-left: -8px;
+-}
+-.ui-button-text-icon-primary .ui-button-icon-primary,
+-.ui-button-text-icons .ui-button-icon-primary,
+-.ui-button-icons-only .ui-button-icon-primary {
+-	left: .5em;
+-}
+-.ui-button-text-icon-secondary .ui-button-icon-secondary,
+-.ui-button-text-icons .ui-button-icon-secondary,
+-.ui-button-icons-only .ui-button-icon-secondary {
+-	right: .5em;
+-}
+-
+-/* button sets */
+-.ui-buttonset {
+-	margin-right: 7px;
+-}
+-.ui-buttonset .ui-button {
+-	margin-left: 0;
+-	margin-right: -.3em;
+-}
+-
+-/* workarounds */
+-/* reset extra padding in Firefox, see h5bp.com/l */
+-input.ui-button::-moz-focus-inner,
+-button.ui-button::-moz-focus-inner {
+-	border: 0;
+-	padding: 0;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.datepicker.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.datepicker.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.datepicker.css	(revision 15488)
+@@ -1,178 +0,0 @@
+-/*!
+- * jQuery UI Datepicker 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Datepicker#theming
+- */
+-.ui-datepicker {
+-	width: 17em;
+-	padding: .2em .2em 0;
+-	display: none;
+-}
+-.ui-datepicker .ui-datepicker-header {
+-	position: relative;
+-	padding: .2em 0;
+-}
+-.ui-datepicker .ui-datepicker-prev,
+-.ui-datepicker .ui-datepicker-next {
+-	position: absolute;
+-	top: 2px;
+-	width: 1.8em;
+-	height: 1.8em;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover,
+-.ui-datepicker .ui-datepicker-next-hover {
+-	top: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev {
+-	left: 2px;
+-}
+-.ui-datepicker .ui-datepicker-next {
+-	right: 2px;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover {
+-	left: 1px;
+-}
+-.ui-datepicker .ui-datepicker-next-hover {
+-	right: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev span,
+-.ui-datepicker .ui-datepicker-next span {
+-	display: block;
+-	position: absolute;
+-	left: 50%;
+-	margin-left: -8px;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-datepicker .ui-datepicker-title {
+-	margin: 0 2.3em;
+-	line-height: 1.8em;
+-	text-align: center;
+-}
+-.ui-datepicker .ui-datepicker-title select {
+-	font-size: 1em;
+-	margin: 1px 0;
+-}
+-.ui-datepicker select.ui-datepicker-month-year {
+-	width: 100%;
+-}
+-.ui-datepicker select.ui-datepicker-month,
+-.ui-datepicker select.ui-datepicker-year {
+-	width: 49%;
+-}
+-.ui-datepicker table {
+-	width: 100%;
+-	font-size: .9em;
+-	border-collapse: collapse;
+-	margin: 0 0 .4em;
+-}
+-.ui-datepicker th {
+-	padding: .7em .3em;
+-	text-align: center;
+-	font-weight: bold;
+-	border: 0;
+-}
+-.ui-datepicker td {
+-	border: 0;
+-	padding: 1px;
+-}
+-.ui-datepicker td span,
+-.ui-datepicker td a {
+-	display: block;
+-	padding: .2em;
+-	text-align: right;
+-	text-decoration: none;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane {
+-	background-image: none;
+-	margin: .7em 0 0 0;
+-	padding: 0 .2em;
+-	border-left: 0;
+-	border-right: 0;
+-	border-bottom: 0;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button {
+-	float: right;
+-	margin: .5em .2em .4em;
+-	cursor: pointer;
+-	padding: .2em .6em .3em .6em;
+-	width: auto;
+-	overflow: visible;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+-	float: left;
+-}
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi {
+-	width: auto;
+-}
+-.ui-datepicker-multi .ui-datepicker-group {
+-	float: left;
+-}
+-.ui-datepicker-multi .ui-datepicker-group table {
+-	width: 95%;
+-	margin: 0 auto .4em;
+-}
+-.ui-datepicker-multi-2 .ui-datepicker-group {
+-	width: 50%;
+-}
+-.ui-datepicker-multi-3 .ui-datepicker-group {
+-	width: 33.3%;
+-}
+-.ui-datepicker-multi-4 .ui-datepicker-group {
+-	width: 25%;
+-}
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-left-width: 0;
+-}
+-.ui-datepicker-multi .ui-datepicker-buttonpane {
+-	clear: left;
+-}
+-.ui-datepicker-row-break {
+-	clear: both;
+-	width: 100%;
+-	font-size: 0;
+-}
+-
+-/* RTL support */
+-.ui-datepicker-rtl {
+-	direction: rtl;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev {
+-	right: 2px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next {
+-	left: 2px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev:hover {
+-	right: 1px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next:hover {
+-	left: 1px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane {
+-	clear: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+-	float: left;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+-.ui-datepicker-rtl .ui-datepicker-group {
+-	float: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-right-width: 0;
+-	border-left-width: 1px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.spinner.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.spinner.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.spinner.css	(revision 15488)
+@@ -1,65 +0,0 @@
+-/*!
+- * jQuery UI Spinner 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Spinner#theming
+- */
+-.ui-spinner {
+-	position: relative;
+-	display: inline-block;
+-	overflow: hidden;
+-	padding: 0;
+-	vertical-align: middle;
+-}
+-.ui-spinner-input {
+-	border: none;
+-	background: none;
+-	color: inherit;
+-	padding: 0;
+-	margin: .2em 0;
+-	vertical-align: middle;
+-	margin-left: .4em;
+-	margin-right: 22px;
+-}
+-.ui-spinner-button {
+-	width: 16px;
+-	height: 50%;
+-	font-size: .5em;
+-	padding: 0;
+-	margin: 0;
+-	text-align: center;
+-	position: absolute;
+-	cursor: default;
+-	display: block;
+-	overflow: hidden;
+-	right: 0;
+-}
+-/* more specificity required here to overide default borders */
+-.ui-spinner a.ui-spinner-button {
+-	border-top: none;
+-	border-bottom: none;
+-	border-right: none;
+-}
+-/* vertical centre icon */
+-.ui-spinner .ui-icon {
+-	position: absolute;
+-	margin-top: -8px;
+-	top: 50%;
+-	left: 0;
+-}
+-.ui-spinner-up {
+-	top: 0;
+-}
+-.ui-spinner-down {
+-	bottom: 0;
+-}
+-
+-/* TR overrides */
+-.ui-spinner .ui-icon-triangle-1-s {
+-	/* need to fix icons sprite */
+-	background-position: -65px -16px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.resizable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.resizable.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.resizable.css	(revision 15488)
+@@ -1,78 +0,0 @@
+-/*!
+- * jQuery UI Resizable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Resizable#theming
+- */
+-.ui-resizable {
+-	position: relative;
+-}
+-.ui-resizable-handle {
+-	position: absolute;
+-	font-size: 0.1px;
+-	display: block;
+-}
+-.ui-resizable-disabled .ui-resizable-handle,
+-.ui-resizable-autohide .ui-resizable-handle {
+-	display: none;
+-}
+-.ui-resizable-n {
+-	cursor: n-resize;
+-	height: 7px;
+-	width: 100%;
+-	top: -5px;
+-	left: 0;
+-}
+-.ui-resizable-s {
+-	cursor: s-resize;
+-	height: 7px;
+-	width: 100%;
+-	bottom: -5px;
+-	left: 0;
+-}
+-.ui-resizable-e {
+-	cursor: e-resize;
+-	width: 7px;
+-	right: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-w {
+-	cursor: w-resize;
+-	width: 7px;
+-	left: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-se {
+-	cursor: se-resize;
+-	width: 12px;
+-	height: 12px;
+-	right: 1px;
+-	bottom: 1px;
+-}
+-.ui-resizable-sw {
+-	cursor: sw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	bottom: -5px;
+-}
+-.ui-resizable-nw {
+-	cursor: nw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	top: -5px;
+-}
+-.ui-resizable-ne {
+-	cursor: ne-resize;
+-	width: 9px;
+-	height: 9px;
+-	right: -5px;
+-	top: -5px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.slider.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.slider.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.slider.css	(revision 15488)
+@@ -1,73 +0,0 @@
+-/*!
+- * jQuery UI Slider 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Slider#theming
+- */
+-.ui-slider {
+-	position: relative;
+-	text-align: left;
+-}
+-.ui-slider .ui-slider-handle {
+-	position: absolute;
+-	z-index: 2;
+-	width: 1.2em;
+-	height: 1.2em;
+-	cursor: default;
+-}
+-.ui-slider .ui-slider-range {
+-	position: absolute;
+-	z-index: 1;
+-	font-size: .7em;
+-	display: block;
+-	border: 0;
+-	background-position: 0 0;
+-}
+-
+-/* For IE8 - See #6727 */
+-.ui-slider.ui-state-disabled .ui-slider-handle,
+-.ui-slider.ui-state-disabled .ui-slider-range {
+-	filter: inherit;
+-}
+-
+-.ui-slider-horizontal {
+-	height: .8em;
+-}
+-.ui-slider-horizontal .ui-slider-handle {
+-	top: -.3em;
+-	margin-left: -.6em;
+-}
+-.ui-slider-horizontal .ui-slider-range {
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-slider-horizontal .ui-slider-range-min {
+-	left: 0;
+-}
+-.ui-slider-horizontal .ui-slider-range-max {
+-	right: 0;
+-}
+-
+-.ui-slider-vertical {
+-	width: .8em;
+-	height: 100px;
+-}
+-.ui-slider-vertical .ui-slider-handle {
+-	left: -.3em;
+-	margin-left: 0;
+-	margin-bottom: -.6em;
+-}
+-.ui-slider-vertical .ui-slider-range {
+-	left: 0;
+-	width: 100%;
+-}
+-.ui-slider-vertical .ui-slider-range-min {
+-	bottom: 0;
+-}
+-.ui-slider-vertical .ui-slider-range-max {
+-	top: 0;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffffff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_228ef1_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.core.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.core.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.core.css	(revision 15488)
+@@ -1,93 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden {
+-	display: none;
+-}
+-.ui-helper-hidden-accessible {
+-	border: 0;
+-	clip: rect(0 0 0 0);
+-	height: 1px;
+-	margin: -1px;
+-	overflow: hidden;
+-	padding: 0;
+-	position: absolute;
+-	width: 1px;
+-}
+-.ui-helper-reset {
+-	margin: 0;
+-	padding: 0;
+-	border: 0;
+-	outline: 0;
+-	line-height: 1.3;
+-	text-decoration: none;
+-	font-size: 100%;
+-	list-style: none;
+-}
+-.ui-helper-clearfix:before,
+-.ui-helper-clearfix:after {
+-	content: "";
+-	display: table;
+-	border-collapse: collapse;
+-}
+-.ui-helper-clearfix:after {
+-	clear: both;
+-}
+-.ui-helper-clearfix {
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-helper-zfix {
+-	width: 100%;
+-	height: 100%;
+-	top: 0;
+-	left: 0;
+-	position: absolute;
+-	opacity: 0;
+-	filter:Alpha(Opacity=0);
+-}
+-
+-.ui-front {
+-	z-index: 100;
+-}
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled {
+-	cursor: default !important;
+-}
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	display: block;
+-	text-indent: -99999px;
+-	overflow: hidden;
+-	background-repeat: no-repeat;
+-}
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	position: fixed;
+-	top: 0;
+-	left: 0;
+-	width: 100%;
+-	height: 100%;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.progressbar.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.progressbar.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.progressbar.css	(revision 15488)
+@@ -1,28 +0,0 @@
+-/*!
+- * jQuery UI Progressbar 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Progressbar#theming
+- */
+-.ui-progressbar {
+-	height: 2em;
+-	text-align: left;
+-	overflow: hidden;
+-}
+-.ui-progressbar .ui-progressbar-value {
+-	margin: -1px;
+-	height: 100%;
+-}
+-.ui-progressbar .ui-progressbar-overlay {
+-	background: url("images/animated-overlay.gif");
+-	height: 100%;
+-	filter: alpha(opacity=25);
+-	opacity: 0.25;
+-}
+-.ui-progressbar-indeterminate .ui-progressbar-value {
+-	background-image: none;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tabs.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tabs.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tabs.css	(revision 15488)
+@@ -1,52 +0,0 @@
+-/*!
+- * jQuery UI Tabs 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Tabs#theming
+- */
+-.ui-tabs {
+-	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-	padding: .2em;
+-}
+-.ui-tabs .ui-tabs-nav {
+-	margin: 0;
+-	padding: .2em .2em 0;
+-}
+-.ui-tabs .ui-tabs-nav li {
+-	list-style: none;
+-	float: left;
+-	position: relative;
+-	top: 0;
+-	margin: 1px .2em 0 0;
+-	border-bottom-width: 0;
+-	padding: 0;
+-	white-space: nowrap;
+-}
+-.ui-tabs .ui-tabs-nav li a {
+-	float: left;
+-	padding: .5em 1em;
+-	text-decoration: none;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+-	margin-bottom: -1px;
+-	padding-bottom: 1px;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+-	cursor: text;
+-}
+-.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+-	cursor: pointer;
+-}
+-.ui-tabs .ui-tabs-panel {
+-	display: block;
+-	border-width: 0;
+-	padding: 1em 1.4em;
+-	background: none;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tooltip.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tooltip.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tooltip.css	(revision 15488)
+@@ -1,19 +0,0 @@
+-/*!
+- * jQuery UI Tooltip 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- */
+-.ui-tooltip {
+-	padding: 8px;
+-	position: absolute;
+-	z-index: 9999;
+-	max-width: 300px;
+-	-webkit-box-shadow: 0 0 5px #aaa;
+-	box-shadow: 0 0 5px #aaa;
+-}
+-body .ui-tooltip {
+-	border-width: 2px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.dialog.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.dialog.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.dialog.css	(revision 15488)
+@@ -1,69 +0,0 @@
+-/*!
+- * jQuery UI Dialog 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Dialog#theming
+- */
+-.ui-dialog {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	padding: .2em;
+-	outline: 0;
+-}
+-.ui-dialog .ui-dialog-titlebar {
+-	padding: .4em 1em;
+-	position: relative;
+-}
+-.ui-dialog .ui-dialog-title {
+-	float: left;
+-	margin: .1em 0;
+-	white-space: nowrap;
+-	width: 90%;
+-	overflow: hidden;
+-	text-overflow: ellipsis;
+-}
+-.ui-dialog .ui-dialog-titlebar-close {
+-	position: absolute;
+-	right: .3em;
+-	top: 50%;
+-	width: 21px;
+-	margin: -10px 0 0 0;
+-	padding: 1px;
+-	height: 20px;
+-}
+-.ui-dialog .ui-dialog-content {
+-	position: relative;
+-	border: 0;
+-	padding: .5em 1em;
+-	background: none;
+-	overflow: auto;
+-}
+-.ui-dialog .ui-dialog-buttonpane {
+-	text-align: left;
+-	border-width: 1px 0 0 0;
+-	background-image: none;
+-	margin-top: .5em;
+-	padding: .3em 1em .5em .4em;
+-}
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+-	float: right;
+-}
+-.ui-dialog .ui-dialog-buttonpane button {
+-	margin: .5em .4em .5em 0;
+-	cursor: pointer;
+-}
+-.ui-dialog .ui-resizable-se {
+-	width: 12px;
+-	height: 12px;
+-	right: -5px;
+-	bottom: -5px;
+-	background-position: 16px 16px;
+-}
+-.ui-draggable .ui-dialog-titlebar {
+-	cursor: move;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery-ui.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery-ui.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery-ui.css	(revision 15488)
+@@ -1,1177 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-/* Layout helpers
+-----------------------------------*/
+-.ui-helper-hidden {
+-	display: none;
+-}
+-.ui-helper-hidden-accessible {
+-	border: 0;
+-	clip: rect(0 0 0 0);
+-	height: 1px;
+-	margin: -1px;
+-	overflow: hidden;
+-	padding: 0;
+-	position: absolute;
+-	width: 1px;
+-}
+-.ui-helper-reset {
+-	margin: 0;
+-	padding: 0;
+-	border: 0;
+-	outline: 0;
+-	line-height: 1.3;
+-	text-decoration: none;
+-	font-size: 100%;
+-	list-style: none;
+-}
+-.ui-helper-clearfix:before,
+-.ui-helper-clearfix:after {
+-	content: "";
+-	display: table;
+-	border-collapse: collapse;
+-}
+-.ui-helper-clearfix:after {
+-	clear: both;
+-}
+-.ui-helper-clearfix {
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-helper-zfix {
+-	width: 100%;
+-	height: 100%;
+-	top: 0;
+-	left: 0;
+-	position: absolute;
+-	opacity: 0;
+-	filter:Alpha(Opacity=0);
+-}
+-
+-.ui-front {
+-	z-index: 100;
+-}
+-
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-disabled {
+-	cursor: default !important;
+-}
+-
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	display: block;
+-	text-indent: -99999px;
+-	overflow: hidden;
+-	background-repeat: no-repeat;
+-}
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	position: fixed;
+-	top: 0;
+-	left: 0;
+-	width: 100%;
+-	height: 100%;
+-}
+-.ui-resizable {
+-	position: relative;
+-}
+-.ui-resizable-handle {
+-	position: absolute;
+-	font-size: 0.1px;
+-	display: block;
+-}
+-.ui-resizable-disabled .ui-resizable-handle,
+-.ui-resizable-autohide .ui-resizable-handle {
+-	display: none;
+-}
+-.ui-resizable-n {
+-	cursor: n-resize;
+-	height: 7px;
+-	width: 100%;
+-	top: -5px;
+-	left: 0;
+-}
+-.ui-resizable-s {
+-	cursor: s-resize;
+-	height: 7px;
+-	width: 100%;
+-	bottom: -5px;
+-	left: 0;
+-}
+-.ui-resizable-e {
+-	cursor: e-resize;
+-	width: 7px;
+-	right: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-w {
+-	cursor: w-resize;
+-	width: 7px;
+-	left: -5px;
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-resizable-se {
+-	cursor: se-resize;
+-	width: 12px;
+-	height: 12px;
+-	right: 1px;
+-	bottom: 1px;
+-}
+-.ui-resizable-sw {
+-	cursor: sw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	bottom: -5px;
+-}
+-.ui-resizable-nw {
+-	cursor: nw-resize;
+-	width: 9px;
+-	height: 9px;
+-	left: -5px;
+-	top: -5px;
+-}
+-.ui-resizable-ne {
+-	cursor: ne-resize;
+-	width: 9px;
+-	height: 9px;
+-	right: -5px;
+-	top: -5px;
+-}
+-.ui-selectable-helper {
+-	position: absolute;
+-	z-index: 100;
+-	border: 1px dotted black;
+-}
+-.ui-accordion .ui-accordion-header {
+-	display: block;
+-	cursor: pointer;
+-	position: relative;
+-	margin-top: 2px;
+-	padding: .5em .5em .5em .7em;
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-accordion .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-noicons {
+-	padding-left: .7em;
+-}
+-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+-	position: absolute;
+-	left: .5em;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-accordion .ui-accordion-content {
+-	padding: 1em 2.2em;
+-	border-top: 0;
+-	overflow: auto;
+-}
+-.ui-autocomplete {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	cursor: default;
+-}
+-.ui-button {
+-	display: inline-block;
+-	position: relative;
+-	padding: 0;
+-	line-height: normal;
+-	margin-right: .1em;
+-	cursor: pointer;
+-	vertical-align: middle;
+-	text-align: center;
+-	overflow: visible; /* removes extra width in IE */
+-}
+-.ui-button,
+-.ui-button:link,
+-.ui-button:visited,
+-.ui-button:hover,
+-.ui-button:active {
+-	text-decoration: none;
+-}
+-/* to make room for the icon, a width needs to be set here */
+-.ui-button-icon-only {
+-	width: 2.2em;
+-}
+-/* button elements seem to need a little more width */
+-button.ui-button-icon-only {
+-	width: 2.4em;
+-}
+-.ui-button-icons-only {
+-	width: 3.4em;
+-}
+-button.ui-button-icons-only {
+-	width: 3.7em;
+-}
+-
+-/* button text element */
+-.ui-button .ui-button-text {
+-	display: block;
+-	line-height: normal;
+-}
+-.ui-button-text-only .ui-button-text {
+-	padding: .4em 1em;
+-}
+-.ui-button-icon-only .ui-button-text,
+-.ui-button-icons-only .ui-button-text {
+-	padding: .4em;
+-	text-indent: -9999999px;
+-}
+-.ui-button-text-icon-primary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 1em .4em 2.1em;
+-}
+-.ui-button-text-icon-secondary .ui-button-text,
+-.ui-button-text-icons .ui-button-text {
+-	padding: .4em 2.1em .4em 1em;
+-}
+-.ui-button-text-icons .ui-button-text {
+-	padding-left: 2.1em;
+-	padding-right: 2.1em;
+-}
+-/* no icon support for input elements, provide padding by default */
+-input.ui-button {
+-	padding: .4em 1em;
+-}
+-
+-/* button icon element(s) */
+-.ui-button-icon-only .ui-icon,
+-.ui-button-text-icon-primary .ui-icon,
+-.ui-button-text-icon-secondary .ui-icon,
+-.ui-button-text-icons .ui-icon,
+-.ui-button-icons-only .ui-icon {
+-	position: absolute;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-button-icon-only .ui-icon {
+-	left: 50%;
+-	margin-left: -8px;
+-}
+-.ui-button-text-icon-primary .ui-button-icon-primary,
+-.ui-button-text-icons .ui-button-icon-primary,
+-.ui-button-icons-only .ui-button-icon-primary {
+-	left: .5em;
+-}
+-.ui-button-text-icon-secondary .ui-button-icon-secondary,
+-.ui-button-text-icons .ui-button-icon-secondary,
+-.ui-button-icons-only .ui-button-icon-secondary {
+-	right: .5em;
+-}
+-
+-/* button sets */
+-.ui-buttonset {
+-	margin-right: 7px;
+-}
+-.ui-buttonset .ui-button {
+-	margin-left: 0;
+-	margin-right: -.3em;
+-}
+-
+-/* workarounds */
+-/* reset extra padding in Firefox, see h5bp.com/l */
+-input.ui-button::-moz-focus-inner,
+-button.ui-button::-moz-focus-inner {
+-	border: 0;
+-	padding: 0;
+-}
+-.ui-datepicker {
+-	width: 17em;
+-	padding: .2em .2em 0;
+-	display: none;
+-}
+-.ui-datepicker .ui-datepicker-header {
+-	position: relative;
+-	padding: .2em 0;
+-}
+-.ui-datepicker .ui-datepicker-prev,
+-.ui-datepicker .ui-datepicker-next {
+-	position: absolute;
+-	top: 2px;
+-	width: 1.8em;
+-	height: 1.8em;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover,
+-.ui-datepicker .ui-datepicker-next-hover {
+-	top: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev {
+-	left: 2px;
+-}
+-.ui-datepicker .ui-datepicker-next {
+-	right: 2px;
+-}
+-.ui-datepicker .ui-datepicker-prev-hover {
+-	left: 1px;
+-}
+-.ui-datepicker .ui-datepicker-next-hover {
+-	right: 1px;
+-}
+-.ui-datepicker .ui-datepicker-prev span,
+-.ui-datepicker .ui-datepicker-next span {
+-	display: block;
+-	position: absolute;
+-	left: 50%;
+-	margin-left: -8px;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-datepicker .ui-datepicker-title {
+-	margin: 0 2.3em;
+-	line-height: 1.8em;
+-	text-align: center;
+-}
+-.ui-datepicker .ui-datepicker-title select {
+-	font-size: 1em;
+-	margin: 1px 0;
+-}
+-.ui-datepicker select.ui-datepicker-month-year {
+-	width: 100%;
+-}
+-.ui-datepicker select.ui-datepicker-month,
+-.ui-datepicker select.ui-datepicker-year {
+-	width: 49%;
+-}
+-.ui-datepicker table {
+-	width: 100%;
+-	font-size: .9em;
+-	border-collapse: collapse;
+-	margin: 0 0 .4em;
+-}
+-.ui-datepicker th {
+-	padding: .7em .3em;
+-	text-align: center;
+-	font-weight: bold;
+-	border: 0;
+-}
+-.ui-datepicker td {
+-	border: 0;
+-	padding: 1px;
+-}
+-.ui-datepicker td span,
+-.ui-datepicker td a {
+-	display: block;
+-	padding: .2em;
+-	text-align: right;
+-	text-decoration: none;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane {
+-	background-image: none;
+-	margin: .7em 0 0 0;
+-	padding: 0 .2em;
+-	border-left: 0;
+-	border-right: 0;
+-	border-bottom: 0;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button {
+-	float: right;
+-	margin: .5em .2em .4em;
+-	cursor: pointer;
+-	padding: .2em .6em .3em .6em;
+-	width: auto;
+-	overflow: visible;
+-}
+-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+-	float: left;
+-}
+-
+-/* with multiple calendars */
+-.ui-datepicker.ui-datepicker-multi {
+-	width: auto;
+-}
+-.ui-datepicker-multi .ui-datepicker-group {
+-	float: left;
+-}
+-.ui-datepicker-multi .ui-datepicker-group table {
+-	width: 95%;
+-	margin: 0 auto .4em;
+-}
+-.ui-datepicker-multi-2 .ui-datepicker-group {
+-	width: 50%;
+-}
+-.ui-datepicker-multi-3 .ui-datepicker-group {
+-	width: 33.3%;
+-}
+-.ui-datepicker-multi-4 .ui-datepicker-group {
+-	width: 25%;
+-}
+-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-left-width: 0;
+-}
+-.ui-datepicker-multi .ui-datepicker-buttonpane {
+-	clear: left;
+-}
+-.ui-datepicker-row-break {
+-	clear: both;
+-	width: 100%;
+-	font-size: 0;
+-}
+-
+-/* RTL support */
+-.ui-datepicker-rtl {
+-	direction: rtl;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev {
+-	right: 2px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next {
+-	left: 2px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-prev:hover {
+-	right: 1px;
+-	left: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-next:hover {
+-	left: 1px;
+-	right: auto;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane {
+-	clear: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+-	float: left;
+-}
+-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+-.ui-datepicker-rtl .ui-datepicker-group {
+-	float: right;
+-}
+-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+-	border-right-width: 0;
+-	border-left-width: 1px;
+-}
+-.ui-dialog {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	padding: .2em;
+-	outline: 0;
+-}
+-.ui-dialog .ui-dialog-titlebar {
+-	padding: .4em 1em;
+-	position: relative;
+-}
+-.ui-dialog .ui-dialog-title {
+-	float: left;
+-	margin: .1em 0;
+-	white-space: nowrap;
+-	width: 90%;
+-	overflow: hidden;
+-	text-overflow: ellipsis;
+-}
+-.ui-dialog .ui-dialog-titlebar-close {
+-	position: absolute;
+-	right: .3em;
+-	top: 50%;
+-	width: 21px;
+-	margin: -10px 0 0 0;
+-	padding: 1px;
+-	height: 20px;
+-}
+-.ui-dialog .ui-dialog-content {
+-	position: relative;
+-	border: 0;
+-	padding: .5em 1em;
+-	background: none;
+-	overflow: auto;
+-}
+-.ui-dialog .ui-dialog-buttonpane {
+-	text-align: left;
+-	border-width: 1px 0 0 0;
+-	background-image: none;
+-	margin-top: .5em;
+-	padding: .3em 1em .5em .4em;
+-}
+-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+-	float: right;
+-}
+-.ui-dialog .ui-dialog-buttonpane button {
+-	margin: .5em .4em .5em 0;
+-	cursor: pointer;
+-}
+-.ui-dialog .ui-resizable-se {
+-	width: 12px;
+-	height: 12px;
+-	right: -5px;
+-	bottom: -5px;
+-	background-position: 16px 16px;
+-}
+-.ui-draggable .ui-dialog-titlebar {
+-	cursor: move;
+-}
+-.ui-menu {
+-	list-style: none;
+-	padding: 2px;
+-	margin: 0;
+-	display: block;
+-	outline: none;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-	position: absolute;
+-}
+-.ui-menu .ui-menu-item {
+-	margin: 0;
+-	padding: 0;
+-	width: 100%;
+-	/* support: IE10, see #8844 */
+-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+-}
+-.ui-menu .ui-menu-divider {
+-	margin: 5px -2px 5px -2px;
+-	height: 0;
+-	font-size: 0;
+-	line-height: 0;
+-	border-width: 1px 0 0 0;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration: none;
+-	display: block;
+-	padding: 2px .4em;
+-	line-height: 1.5;
+-	min-height: 0; /* support: IE7 */
+-	font-weight: normal;
+-}
+-.ui-menu .ui-menu-item a.ui-state-focus,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-
+-.ui-menu .ui-state-disabled {
+-	font-weight: normal;
+-	margin: .4em 0 .2em;
+-	line-height: 1.5;
+-}
+-.ui-menu .ui-state-disabled a {
+-	cursor: default;
+-}
+-
+-/* icon support */
+-.ui-menu-icons {
+-	position: relative;
+-}
+-.ui-menu-icons .ui-menu-item a {
+-	position: relative;
+-	padding-left: 2em;
+-}
+-
+-/* left-aligned */
+-.ui-menu .ui-icon {
+-	position: absolute;
+-	top: .2em;
+-	left: .2em;
+-}
+-
+-/* right-aligned */
+-.ui-menu .ui-menu-icon {
+-	position: static;
+-	float: right;
+-}
+-.ui-progressbar {
+-	height: 2em;
+-	text-align: left;
+-	overflow: hidden;
+-}
+-.ui-progressbar .ui-progressbar-value {
+-	margin: -1px;
+-	height: 100%;
+-}
+-.ui-progressbar .ui-progressbar-overlay {
+-	background: url("images/animated-overlay.gif");
+-	height: 100%;
+-	filter: alpha(opacity=25);
+-	opacity: 0.25;
+-}
+-.ui-progressbar-indeterminate .ui-progressbar-value {
+-	background-image: none;
+-}
+-.ui-slider {
+-	position: relative;
+-	text-align: left;
+-}
+-.ui-slider .ui-slider-handle {
+-	position: absolute;
+-	z-index: 2;
+-	width: 1.2em;
+-	height: 1.2em;
+-	cursor: default;
+-}
+-.ui-slider .ui-slider-range {
+-	position: absolute;
+-	z-index: 1;
+-	font-size: .7em;
+-	display: block;
+-	border: 0;
+-	background-position: 0 0;
+-}
+-
+-/* For IE8 - See #6727 */
+-.ui-slider.ui-state-disabled .ui-slider-handle,
+-.ui-slider.ui-state-disabled .ui-slider-range {
+-	filter: inherit;
+-}
+-
+-.ui-slider-horizontal {
+-	height: .8em;
+-}
+-.ui-slider-horizontal .ui-slider-handle {
+-	top: -.3em;
+-	margin-left: -.6em;
+-}
+-.ui-slider-horizontal .ui-slider-range {
+-	top: 0;
+-	height: 100%;
+-}
+-.ui-slider-horizontal .ui-slider-range-min {
+-	left: 0;
+-}
+-.ui-slider-horizontal .ui-slider-range-max {
+-	right: 0;
+-}
+-
+-.ui-slider-vertical {
+-	width: .8em;
+-	height: 100px;
+-}
+-.ui-slider-vertical .ui-slider-handle {
+-	left: -.3em;
+-	margin-left: 0;
+-	margin-bottom: -.6em;
+-}
+-.ui-slider-vertical .ui-slider-range {
+-	left: 0;
+-	width: 100%;
+-}
+-.ui-slider-vertical .ui-slider-range-min {
+-	bottom: 0;
+-}
+-.ui-slider-vertical .ui-slider-range-max {
+-	top: 0;
+-}
+-.ui-spinner {
+-	position: relative;
+-	display: inline-block;
+-	overflow: hidden;
+-	padding: 0;
+-	vertical-align: middle;
+-}
+-.ui-spinner-input {
+-	border: none;
+-	background: none;
+-	color: inherit;
+-	padding: 0;
+-	margin: .2em 0;
+-	vertical-align: middle;
+-	margin-left: .4em;
+-	margin-right: 22px;
+-}
+-.ui-spinner-button {
+-	width: 16px;
+-	height: 50%;
+-	font-size: .5em;
+-	padding: 0;
+-	margin: 0;
+-	text-align: center;
+-	position: absolute;
+-	cursor: default;
+-	display: block;
+-	overflow: hidden;
+-	right: 0;
+-}
+-/* more specificity required here to overide default borders */
+-.ui-spinner a.ui-spinner-button {
+-	border-top: none;
+-	border-bottom: none;
+-	border-right: none;
+-}
+-/* vertical centre icon */
+-.ui-spinner .ui-icon {
+-	position: absolute;
+-	margin-top: -8px;
+-	top: 50%;
+-	left: 0;
+-}
+-.ui-spinner-up {
+-	top: 0;
+-}
+-.ui-spinner-down {
+-	bottom: 0;
+-}
+-
+-/* TR overrides */
+-.ui-spinner .ui-icon-triangle-1-s {
+-	/* need to fix icons sprite */
+-	background-position: -65px -16px;
+-}
+-.ui-tabs {
+-	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+-	padding: .2em;
+-}
+-.ui-tabs .ui-tabs-nav {
+-	margin: 0;
+-	padding: .2em .2em 0;
+-}
+-.ui-tabs .ui-tabs-nav li {
+-	list-style: none;
+-	float: left;
+-	position: relative;
+-	top: 0;
+-	margin: 1px .2em 0 0;
+-	border-bottom-width: 0;
+-	padding: 0;
+-	white-space: nowrap;
+-}
+-.ui-tabs .ui-tabs-nav li a {
+-	float: left;
+-	padding: .5em 1em;
+-	text-decoration: none;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+-	margin-bottom: -1px;
+-	padding-bottom: 1px;
+-}
+-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+-	cursor: text;
+-}
+-.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+-	cursor: pointer;
+-}
+-.ui-tabs .ui-tabs-panel {
+-	display: block;
+-	border-width: 0;
+-	padding: 1em 1.4em;
+-	background: none;
+-}
+-.ui-tooltip {
+-	padding: 8px;
+-	position: absolute;
+-	z-index: 9999;
+-	max-width: 300px;
+-	-webkit-box-shadow: 0 0 5px #aaa;
+-	box-shadow: 0 0 5px #aaa;
+-}
+-body .ui-tooltip {
+-	border-width: 2px;
+-}
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget {
+-	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+-	font-size: 1.1em;
+-}
+-.ui-widget .ui-widget {
+-	font-size: 1em;
+-}
+-.ui-widget input,
+-.ui-widget select,
+-.ui-widget textarea,
+-.ui-widget button {
+-	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+-	font-size: 1em;
+-}
+-.ui-widget-content {
+-	border: 1px solid #dddddd;
+-	background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
+-	color: #333333;
+-}
+-.ui-widget-content a {
+-	color: #333333;
+-}
+-.ui-widget-header {
+-	border: 1px solid #e78f08;
+-	background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
+-	color: #ffffff;
+-	font-weight: bold;
+-}
+-.ui-widget-header a {
+-	color: #ffffff;
+-}
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default,
+-.ui-widget-content .ui-state-default,
+-.ui-widget-header .ui-state-default {
+-	border: 1px solid #cccccc;
+-	background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #1c94c4;
+-}
+-.ui-state-default a,
+-.ui-state-default a:link,
+-.ui-state-default a:visited {
+-	color: #1c94c4;
+-	text-decoration: none;
+-}
+-.ui-state-hover,
+-.ui-widget-content .ui-state-hover,
+-.ui-widget-header .ui-state-hover,
+-.ui-state-focus,
+-.ui-widget-content .ui-state-focus,
+-.ui-widget-header .ui-state-focus {
+-	border: 1px solid #fbcb09;
+-	background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #c77405;
+-}
+-.ui-state-hover a,
+-.ui-state-hover a:hover,
+-.ui-state-hover a:link,
+-.ui-state-hover a:visited {
+-	color: #c77405;
+-	text-decoration: none;
+-}
+-.ui-state-active,
+-.ui-widget-content .ui-state-active,
+-.ui-widget-header .ui-state-active {
+-	border: 1px solid #fbd850;
+-	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #eb8f00;
+-}
+-.ui-state-active a,
+-.ui-state-active a:link,
+-.ui-state-active a:visited {
+-	color: #eb8f00;
+-	text-decoration: none;
+-}
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight,
+-.ui-widget-content .ui-state-highlight,
+-.ui-widget-header .ui-state-highlight {
+-	border: 1px solid #fed22f;
+-	background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
+-	color: #363636;
+-}
+-.ui-state-highlight a,
+-.ui-widget-content .ui-state-highlight a,
+-.ui-widget-header .ui-state-highlight a {
+-	color: #363636;
+-}
+-.ui-state-error,
+-.ui-widget-content .ui-state-error,
+-.ui-widget-header .ui-state-error {
+-	border: 1px solid #cd0a0a;
+-	background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
+-	color: #ffffff;
+-}
+-.ui-state-error a,
+-.ui-widget-content .ui-state-error a,
+-.ui-widget-header .ui-state-error a {
+-	color: #ffffff;
+-}
+-.ui-state-error-text,
+-.ui-widget-content .ui-state-error-text,
+-.ui-widget-header .ui-state-error-text {
+-	color: #ffffff;
+-}
+-.ui-priority-primary,
+-.ui-widget-content .ui-priority-primary,
+-.ui-widget-header .ui-priority-primary {
+-	font-weight: bold;
+-}
+-.ui-priority-secondary,
+-.ui-widget-content .ui-priority-secondary,
+-.ui-widget-header .ui-priority-secondary {
+-	opacity: .7;
+-	filter:Alpha(Opacity=70);
+-	font-weight: normal;
+-}
+-.ui-state-disabled,
+-.ui-widget-content .ui-state-disabled,
+-.ui-widget-header .ui-state-disabled {
+-	opacity: .35;
+-	filter:Alpha(Opacity=35);
+-	background-image: none;
+-}
+-.ui-state-disabled .ui-icon {
+-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+-}
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	width: 16px;
+-	height: 16px;
+-}
+-.ui-icon,
+-.ui-widget-content .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png);
+-}
+-.ui-widget-header .ui-icon {
+-	background-image: url(images/ui-icons_ffffff_256x240.png);
+-}
+-.ui-state-default .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-hover .ui-icon,
+-.ui-state-focus .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-active .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-highlight .ui-icon {
+-	background-image: url(images/ui-icons_228ef1_256x240.png);
+-}
+-.ui-state-error .ui-icon,
+-.ui-state-error-text .ui-icon {
+-	background-image: url(images/ui-icons_ffd27a_256x240.png);
+-}
+-
+-/* positioning */
+-.ui-icon-blank { background-position: 16px 16px; }
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-on { background-position: -96px -144px; }
+-.ui-icon-radio-off { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-left,
+-.ui-corner-tl {
+-	border-top-left-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-right,
+-.ui-corner-tr {
+-	border-top-right-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-left,
+-.ui-corner-bl {
+-	border-bottom-left-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-right,
+-.ui-corner-br {
+-	border-bottom-right-radius: 4px;
+-}
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
+-	opacity: .5;
+-	filter: Alpha(Opacity=50);
+-}
+-.ui-widget-shadow {
+-	margin: -5px 0 0 -5px;
+-	padding: 5px;
+-	background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+-	opacity: .2;
+-	filter: Alpha(Opacity=20);
+-	border-radius: 5px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.accordion.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.accordion.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.accordion.css	(revision 15488)
+@@ -1,38 +0,0 @@
+-/*!
+- * jQuery UI Accordion 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Accordion#theming
+- */
+-.ui-accordion .ui-accordion-header {
+-	display: block;
+-	cursor: pointer;
+-	position: relative;
+-	margin-top: 2px;
+-	padding: .5em .5em .5em .7em;
+-	min-height: 0; /* support: IE7 */
+-}
+-.ui-accordion .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-noicons {
+-	padding-left: .7em;
+-}
+-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+-	padding-left: 2.2em;
+-}
+-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+-	position: absolute;
+-	left: .5em;
+-	top: 50%;
+-	margin-top: -8px;
+-}
+-.ui-accordion .ui-accordion-content {
+-	padding: 1em 2.2em;
+-	border-top: 0;
+-	overflow: auto;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.autocomplete.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.autocomplete.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.autocomplete.css	(revision 15488)
+@@ -1,16 +0,0 @@
+-/*!
+- * jQuery UI Autocomplete 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Autocomplete#theming
+- */
+-.ui-autocomplete {
+-	position: absolute;
+-	top: 0;
+-	left: 0;
+-	cursor: default;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.theme.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.theme.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.theme.css	(revision 15488)
+@@ -1,406 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming/API
+- *
+- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+- */
+-
+-
+-/* Component containers
+-----------------------------------*/
+-.ui-widget {
+-	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+-	font-size: 1.1em;
+-}
+-.ui-widget .ui-widget {
+-	font-size: 1em;
+-}
+-.ui-widget input,
+-.ui-widget select,
+-.ui-widget textarea,
+-.ui-widget button {
+-	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+-	font-size: 1em;
+-}
+-.ui-widget-content {
+-	border: 1px solid #dddddd;
+-	background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
+-	color: #333333;
+-}
+-.ui-widget-content a {
+-	color: #333333;
+-}
+-.ui-widget-header {
+-	border: 1px solid #e78f08;
+-	background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
+-	color: #ffffff;
+-	font-weight: bold;
+-}
+-.ui-widget-header a {
+-	color: #ffffff;
+-}
+-
+-/* Interaction states
+-----------------------------------*/
+-.ui-state-default,
+-.ui-widget-content .ui-state-default,
+-.ui-widget-header .ui-state-default {
+-	border: 1px solid #cccccc;
+-	background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #1c94c4;
+-}
+-.ui-state-default a,
+-.ui-state-default a:link,
+-.ui-state-default a:visited {
+-	color: #1c94c4;
+-	text-decoration: none;
+-}
+-.ui-state-hover,
+-.ui-widget-content .ui-state-hover,
+-.ui-widget-header .ui-state-hover,
+-.ui-state-focus,
+-.ui-widget-content .ui-state-focus,
+-.ui-widget-header .ui-state-focus {
+-	border: 1px solid #fbcb09;
+-	background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #c77405;
+-}
+-.ui-state-hover a,
+-.ui-state-hover a:hover,
+-.ui-state-hover a:link,
+-.ui-state-hover a:visited {
+-	color: #c77405;
+-	text-decoration: none;
+-}
+-.ui-state-active,
+-.ui-widget-content .ui-state-active,
+-.ui-widget-header .ui-state-active {
+-	border: 1px solid #fbd850;
+-	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+-	font-weight: bold;
+-	color: #eb8f00;
+-}
+-.ui-state-active a,
+-.ui-state-active a:link,
+-.ui-state-active a:visited {
+-	color: #eb8f00;
+-	text-decoration: none;
+-}
+-
+-/* Interaction Cues
+-----------------------------------*/
+-.ui-state-highlight,
+-.ui-widget-content .ui-state-highlight,
+-.ui-widget-header .ui-state-highlight {
+-	border: 1px solid #fed22f;
+-	background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
+-	color: #363636;
+-}
+-.ui-state-highlight a,
+-.ui-widget-content .ui-state-highlight a,
+-.ui-widget-header .ui-state-highlight a {
+-	color: #363636;
+-}
+-.ui-state-error,
+-.ui-widget-content .ui-state-error,
+-.ui-widget-header .ui-state-error {
+-	border: 1px solid #cd0a0a;
+-	background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
+-	color: #ffffff;
+-}
+-.ui-state-error a,
+-.ui-widget-content .ui-state-error a,
+-.ui-widget-header .ui-state-error a {
+-	color: #ffffff;
+-}
+-.ui-state-error-text,
+-.ui-widget-content .ui-state-error-text,
+-.ui-widget-header .ui-state-error-text {
+-	color: #ffffff;
+-}
+-.ui-priority-primary,
+-.ui-widget-content .ui-priority-primary,
+-.ui-widget-header .ui-priority-primary {
+-	font-weight: bold;
+-}
+-.ui-priority-secondary,
+-.ui-widget-content .ui-priority-secondary,
+-.ui-widget-header .ui-priority-secondary {
+-	opacity: .7;
+-	filter:Alpha(Opacity=70);
+-	font-weight: normal;
+-}
+-.ui-state-disabled,
+-.ui-widget-content .ui-state-disabled,
+-.ui-widget-header .ui-state-disabled {
+-	opacity: .35;
+-	filter:Alpha(Opacity=35);
+-	background-image: none;
+-}
+-.ui-state-disabled .ui-icon {
+-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+-}
+-
+-/* Icons
+-----------------------------------*/
+-
+-/* states and images */
+-.ui-icon {
+-	width: 16px;
+-	height: 16px;
+-}
+-.ui-icon,
+-.ui-widget-content .ui-icon {
+-	background-image: url(images/ui-icons_222222_256x240.png);
+-}
+-.ui-widget-header .ui-icon {
+-	background-image: url(images/ui-icons_ffffff_256x240.png);
+-}
+-.ui-state-default .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-hover .ui-icon,
+-.ui-state-focus .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-active .ui-icon {
+-	background-image: url(images/ui-icons_ef8c08_256x240.png);
+-}
+-.ui-state-highlight .ui-icon {
+-	background-image: url(images/ui-icons_228ef1_256x240.png);
+-}
+-.ui-state-error .ui-icon,
+-.ui-state-error-text .ui-icon {
+-	background-image: url(images/ui-icons_ffd27a_256x240.png);
+-}
+-
+-/* positioning */
+-.ui-icon-blank { background-position: 16px 16px; }
+-.ui-icon-carat-1-n { background-position: 0 0; }
+-.ui-icon-carat-1-ne { background-position: -16px 0; }
+-.ui-icon-carat-1-e { background-position: -32px 0; }
+-.ui-icon-carat-1-se { background-position: -48px 0; }
+-.ui-icon-carat-1-s { background-position: -64px 0; }
+-.ui-icon-carat-1-sw { background-position: -80px 0; }
+-.ui-icon-carat-1-w { background-position: -96px 0; }
+-.ui-icon-carat-1-nw { background-position: -112px 0; }
+-.ui-icon-carat-2-n-s { background-position: -128px 0; }
+-.ui-icon-carat-2-e-w { background-position: -144px 0; }
+-.ui-icon-triangle-1-n { background-position: 0 -16px; }
+-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+-.ui-icon-triangle-1-e { background-position: -32px -16px; }
+-.ui-icon-triangle-1-se { background-position: -48px -16px; }
+-.ui-icon-triangle-1-s { background-position: -64px -16px; }
+-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+-.ui-icon-triangle-1-w { background-position: -96px -16px; }
+-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+-.ui-icon-arrow-1-n { background-position: 0 -32px; }
+-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+-.ui-icon-arrow-1-e { background-position: -32px -32px; }
+-.ui-icon-arrow-1-se { background-position: -48px -32px; }
+-.ui-icon-arrow-1-s { background-position: -64px -32px; }
+-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+-.ui-icon-arrow-1-w { background-position: -96px -32px; }
+-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+-.ui-icon-arrow-4 { background-position: 0 -80px; }
+-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+-.ui-icon-extlink { background-position: -32px -80px; }
+-.ui-icon-newwin { background-position: -48px -80px; }
+-.ui-icon-refresh { background-position: -64px -80px; }
+-.ui-icon-shuffle { background-position: -80px -80px; }
+-.ui-icon-transfer-e-w { background-position: -96px -80px; }
+-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+-.ui-icon-folder-collapsed { background-position: 0 -96px; }
+-.ui-icon-folder-open { background-position: -16px -96px; }
+-.ui-icon-document { background-position: -32px -96px; }
+-.ui-icon-document-b { background-position: -48px -96px; }
+-.ui-icon-note { background-position: -64px -96px; }
+-.ui-icon-mail-closed { background-position: -80px -96px; }
+-.ui-icon-mail-open { background-position: -96px -96px; }
+-.ui-icon-suitcase { background-position: -112px -96px; }
+-.ui-icon-comment { background-position: -128px -96px; }
+-.ui-icon-person { background-position: -144px -96px; }
+-.ui-icon-print { background-position: -160px -96px; }
+-.ui-icon-trash { background-position: -176px -96px; }
+-.ui-icon-locked { background-position: -192px -96px; }
+-.ui-icon-unlocked { background-position: -208px -96px; }
+-.ui-icon-bookmark { background-position: -224px -96px; }
+-.ui-icon-tag { background-position: -240px -96px; }
+-.ui-icon-home { background-position: 0 -112px; }
+-.ui-icon-flag { background-position: -16px -112px; }
+-.ui-icon-calendar { background-position: -32px -112px; }
+-.ui-icon-cart { background-position: -48px -112px; }
+-.ui-icon-pencil { background-position: -64px -112px; }
+-.ui-icon-clock { background-position: -80px -112px; }
+-.ui-icon-disk { background-position: -96px -112px; }
+-.ui-icon-calculator { background-position: -112px -112px; }
+-.ui-icon-zoomin { background-position: -128px -112px; }
+-.ui-icon-zoomout { background-position: -144px -112px; }
+-.ui-icon-search { background-position: -160px -112px; }
+-.ui-icon-wrench { background-position: -176px -112px; }
+-.ui-icon-gear { background-position: -192px -112px; }
+-.ui-icon-heart { background-position: -208px -112px; }
+-.ui-icon-star { background-position: -224px -112px; }
+-.ui-icon-link { background-position: -240px -112px; }
+-.ui-icon-cancel { background-position: 0 -128px; }
+-.ui-icon-plus { background-position: -16px -128px; }
+-.ui-icon-plusthick { background-position: -32px -128px; }
+-.ui-icon-minus { background-position: -48px -128px; }
+-.ui-icon-minusthick { background-position: -64px -128px; }
+-.ui-icon-close { background-position: -80px -128px; }
+-.ui-icon-closethick { background-position: -96px -128px; }
+-.ui-icon-key { background-position: -112px -128px; }
+-.ui-icon-lightbulb { background-position: -128px -128px; }
+-.ui-icon-scissors { background-position: -144px -128px; }
+-.ui-icon-clipboard { background-position: -160px -128px; }
+-.ui-icon-copy { background-position: -176px -128px; }
+-.ui-icon-contact { background-position: -192px -128px; }
+-.ui-icon-image { background-position: -208px -128px; }
+-.ui-icon-video { background-position: -224px -128px; }
+-.ui-icon-script { background-position: -240px -128px; }
+-.ui-icon-alert { background-position: 0 -144px; }
+-.ui-icon-info { background-position: -16px -144px; }
+-.ui-icon-notice { background-position: -32px -144px; }
+-.ui-icon-help { background-position: -48px -144px; }
+-.ui-icon-check { background-position: -64px -144px; }
+-.ui-icon-bullet { background-position: -80px -144px; }
+-.ui-icon-radio-on { background-position: -96px -144px; }
+-.ui-icon-radio-off { background-position: -112px -144px; }
+-.ui-icon-pin-w { background-position: -128px -144px; }
+-.ui-icon-pin-s { background-position: -144px -144px; }
+-.ui-icon-play { background-position: 0 -160px; }
+-.ui-icon-pause { background-position: -16px -160px; }
+-.ui-icon-seek-next { background-position: -32px -160px; }
+-.ui-icon-seek-prev { background-position: -48px -160px; }
+-.ui-icon-seek-end { background-position: -64px -160px; }
+-.ui-icon-seek-start { background-position: -80px -160px; }
+-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+-.ui-icon-seek-first { background-position: -80px -160px; }
+-.ui-icon-stop { background-position: -96px -160px; }
+-.ui-icon-eject { background-position: -112px -160px; }
+-.ui-icon-volume-off { background-position: -128px -160px; }
+-.ui-icon-volume-on { background-position: -144px -160px; }
+-.ui-icon-power { background-position: 0 -176px; }
+-.ui-icon-signal-diag { background-position: -16px -176px; }
+-.ui-icon-signal { background-position: -32px -176px; }
+-.ui-icon-battery-0 { background-position: -48px -176px; }
+-.ui-icon-battery-1 { background-position: -64px -176px; }
+-.ui-icon-battery-2 { background-position: -80px -176px; }
+-.ui-icon-battery-3 { background-position: -96px -176px; }
+-.ui-icon-circle-plus { background-position: 0 -192px; }
+-.ui-icon-circle-minus { background-position: -16px -192px; }
+-.ui-icon-circle-close { background-position: -32px -192px; }
+-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+-.ui-icon-circle-zoomin { background-position: -176px -192px; }
+-.ui-icon-circle-zoomout { background-position: -192px -192px; }
+-.ui-icon-circle-check { background-position: -208px -192px; }
+-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+-.ui-icon-circlesmall-close { background-position: -32px -208px; }
+-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+-.ui-icon-squaresmall-close { background-position: -80px -208px; }
+-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+-
+-
+-/* Misc visuals
+-----------------------------------*/
+-
+-/* Corner radius */
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-left,
+-.ui-corner-tl {
+-	border-top-left-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-top,
+-.ui-corner-right,
+-.ui-corner-tr {
+-	border-top-right-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-left,
+-.ui-corner-bl {
+-	border-bottom-left-radius: 4px;
+-}
+-.ui-corner-all,
+-.ui-corner-bottom,
+-.ui-corner-right,
+-.ui-corner-br {
+-	border-bottom-right-radius: 4px;
+-}
+-
+-/* Overlays */
+-.ui-widget-overlay {
+-	background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
+-	opacity: .5;
+-	filter: Alpha(Opacity=50);
+-}
+-.ui-widget-shadow {
+-	margin: -5px 0 0 -5px;
+-	padding: 5px;
+-	background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+-	opacity: .2;
+-	filter: Alpha(Opacity=20);
+-	border-radius: 5px;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.spinner.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.spinner.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.spinner.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.resizable.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.resizable.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.resizable.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.slider.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.slider.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.slider.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.core.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.core.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.core.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.progressbar.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.progressbar.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.progressbar.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tabs.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tabs.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tabs.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tooltip.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tooltip.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tooltip.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.dialog.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.dialog.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.dialog.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery-ui.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery-ui.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery-ui.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.accordion.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.accordion.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.accordion.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.autocomplete.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.autocomplete.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.autocomplete.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_228ef1_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_20_666666_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffd27a_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_222222_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_f6f6f6_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ef8c08_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/animated-overlay.gif
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons_ffffff_256x240.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_100_fdf5ce_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_flat_10_000000_40x100.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg_glass_65_ffffff_1x400.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.theme.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.theme.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.theme.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.theme.css
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.selectable.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.selectable.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.selectable.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.menu.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.menu.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.menu.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.button.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.button.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.button.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.datepicker.min.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.datepicker.min.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.datepicker.min.css	(revision 15488)
+@@ -1,5 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-05-03
+-* http://jqueryui.com
+-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+-
+-.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.selectable.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.selectable.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.selectable.css	(revision 15488)
+@@ -1,15 +0,0 @@
+-/*!
+- * jQuery UI Selectable 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Selectable#theming
+- */
+-.ui-selectable-helper {
+-	position: absolute;
+-	z-index: 100;
+-	border: 1px dotted black;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.menu.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.menu.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.menu.css	(revision 15488)
+@@ -1,79 +0,0 @@
+-/*!
+- * jQuery UI Menu 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Menu#theming
+- */
+-.ui-menu {
+-	list-style: none;
+-	padding: 2px;
+-	margin: 0;
+-	display: block;
+-	outline: none;
+-}
+-.ui-menu .ui-menu {
+-	margin-top: -3px;
+-	position: absolute;
+-}
+-.ui-menu .ui-menu-item {
+-	margin: 0;
+-	padding: 0;
+-	width: 100%;
+-	/* support: IE10, see #8844 */
+-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+-}
+-.ui-menu .ui-menu-divider {
+-	margin: 5px -2px 5px -2px;
+-	height: 0;
+-	font-size: 0;
+-	line-height: 0;
+-	border-width: 1px 0 0 0;
+-}
+-.ui-menu .ui-menu-item a {
+-	text-decoration: none;
+-	display: block;
+-	padding: 2px .4em;
+-	line-height: 1.5;
+-	min-height: 0; /* support: IE7 */
+-	font-weight: normal;
+-}
+-.ui-menu .ui-menu-item a.ui-state-focus,
+-.ui-menu .ui-menu-item a.ui-state-active {
+-	font-weight: normal;
+-	margin: -1px;
+-}
+-
+-.ui-menu .ui-state-disabled {
+-	font-weight: normal;
+-	margin: .4em 0 .2em;
+-	line-height: 1.5;
+-}
+-.ui-menu .ui-state-disabled a {
+-	cursor: default;
+-}
+-
+-/* icon support */
+-.ui-menu-icons {
+-	position: relative;
+-}
+-.ui-menu-icons .ui-menu-item a {
+-	position: relative;
+-	padding-left: 2em;
+-}
+-
+-/* left-aligned */
+-.ui-menu .ui-icon {
+-	position: absolute;
+-	top: .2em;
+-	left: .2em;
+-}
+-
+-/* right-aligned */
+-.ui-menu .ui-menu-icon {
+-	position: static;
+-	float: right;
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.all.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.all.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.all.css	(revision 15488)
+@@ -1,12 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming
+- */
+-@import "jquery.ui.base.css";
+-@import "jquery.ui.theme.css";
+Index: ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.base.css
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.base.css	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.base.css	(revision 15488)
+@@ -1,25 +0,0 @@
+-/*!
+- * jQuery UI CSS Framework 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://docs.jquery.com/UI/Theming
+- */
+-@import url("jquery.ui.core.css");
+-
+-@import url("jquery.ui.accordion.css");
+-@import url("jquery.ui.autocomplete.css");
+-@import url("jquery.ui.button.css");
+-@import url("jquery.ui.datepicker.css");
+-@import url("jquery.ui.dialog.css");
+-@import url("jquery.ui.menu.css");
+-@import url("jquery.ui.progressbar.css");
+-@import url("jquery.ui.resizable.css");
+-@import url("jquery.ui.selectable.css");
+-@import url("jquery.ui.slider.css");
+-@import url("jquery.ui.spinner.css");
+-@import url("jquery.ui.tabs.css");
+-@import url("jquery.ui.tooltip.css");
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/resizable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/resizable.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/resizable.html	(revision 15488)
+@@ -1,685 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI resizable documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Resizable Widget",
+-		"excerpt":
+-			"Change the size of an element using the mouse.",
+-		"termSlugs": {
+-			"category": [
+-				"interactions"
+-			]
+-		}
+-	}</script><article id="resizable1" class="entry widget"><h2 class="section-title">
+-<span>Resizable Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Change the size of an element using the mouse.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-alsoResize">alsoResize</a></div>
+-<div><a href="#option-animate">animate</a></div>
+-<div><a href="#option-animateDuration">animateDuration</a></div>
+-<div><a href="#option-animateEasing">animateEasing</a></div>
+-<div><a href="#option-aspectRatio">aspectRatio</a></div>
+-<div><a href="#option-autoHide">autoHide</a></div>
+-<div><a href="#option-cancel">cancel</a></div>
+-<div><a href="#option-containment">containment</a></div>
+-<div><a href="#option-delay">delay</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-distance">distance</a></div>
+-<div><a href="#option-ghost">ghost</a></div>
+-<div><a href="#option-grid">grid</a></div>
+-<div><a href="#option-handles">handles</a></div>
+-<div><a href="#option-helper">helper</a></div>
+-<div><a href="#option-maxHeight">maxHeight</a></div>
+-<div><a href="#option-maxWidth">maxWidth</a></div>
+-<div><a href="#option-minHeight">minHeight</a></div>
+-<div><a href="#option-minWidth">minWidth</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-start">start</a></div>
+-<div><a href="#event-resize">resize</a></div>
+-<div><a href="#event-stop">stop</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>The jQuery UI Resizable plugin makes selected elements resizable (meaning they have draggable resize handles). You can specify one or more handles as well as min and max width and height.</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-alsoResize" class="api-item first-item">
+-<h3>alsoResize<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Element">Element</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>One or more elements to resize synchronously with the resizable element.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the alsoResize option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ alsoResize: </code><code class="string">"#mirror"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the alsoResize option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">alsoResize = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"alsoResize"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"alsoResize"</code><code class="plain">, </code><code class="string">"#mirror"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-animate" class="api-item">
+-<h3>animate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Animates to the final size after resizing.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the animate option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ animate: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the animate option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animate = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-animateDuration" class="api-item">
+-<h3>animateDuration<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"slow"</code>
+-</div>
+-<div>How long to animate when using the <a href="#option-animate"><code>animate</code></a> option.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: Duration in milliseconds.</li>
+-<li>
+-<strong>String</strong>: A named duration, such as <code>"slow"</code> or <code>"fast"</code>.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the resizable with the animateDuration option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ animateDuration: </code><code class="string">"fast"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the animateDuration option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animateDuration = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animateDuration"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animateDuration"</code><code class="plain">, </code><code class="string">"fast"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-animateEasing" class="api-item">
+-<h3>animateEasing<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"swing"</code>
+-</div>
+-<div>Which <a href="/easings/">easing</a> to apply when using the <a href="#option-animate"><code>animate</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the animateEasing option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ animateEasing: </code><code class="string">"easeOutBounce"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the animateEasing option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animateEasing = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animateEasing"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animateEasing"</code><code class="plain">, </code><code class="string">"easeOutBounce"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-aspectRatio" class="api-item">
+-<h3>aspectRatio<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the element should be constrained to a specific aspect ratio.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: When set to <code>true</code>, the element will maintain its original aspect ratio.</li>
+-<li>
+-<strong>Number</strong>: Force the element to maintain a specific aspect ratio during resizing.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the resizable with the aspectRatio option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ aspectRatio: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the aspectRatio option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">aspectRatio = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"aspectRatio"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"aspectRatio"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-autoHide" class="api-item">
+-<h3>autoHide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the handles should hide when the user is not hovering over the element.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the autoHide option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ autoHide: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the autoHide option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoHide = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoHide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoHide"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-cancel" class="api-item">
+-<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"input,textarea,button,select,option"</code>
+-</div>
+-<div>Prevents resizing from starting on specified elements.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the cancel option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ cancel: </code><code class="string">".cancel"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cancel option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, </code><code class="string">".cancel"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-containment" class="api-item">
+-<h3>containment<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Constrains resizing to within the bounds of the specified element or region.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Selector</strong>: The resizable element will be contained to the bounding box of the first element found by the selector. If no element is found, no containment will be set.</li>
+-<li>
+-<strong>Element</strong>: The resizable element will be contained to the bounding box of this element.</li>
+-<li>
+-<strong>String</strong>: Possible values: <code>"parent"</code> and <code>"document"</code>.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the resizable with the containment option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ containment: </code><code class="string">"parent"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the containment option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">containment = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code><code class="plain">, </code><code class="string">"parent"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-delay" class="api-item">
+-<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>Tolerance, in milliseconds, for when resizing should start. If specified, resizing will not start until after mouse is moved beyond duration. This can help prevent unintended resizing when clicking on an element.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the delay option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ delay: 150 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the delay option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the resizable if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-distance" class="api-item">
+-<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>Tolerance, in pixels, for when resizing should start. If specified, resizing will not start until after mouse is moved beyond distance. This can help prevent unintended resizing when clicking on an element.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the distance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ distance: 30 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the distance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 30 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-ghost" class="api-item">
+-<h3>ghost<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If set to <code>true</code>, a semi-transparent helper element is shown for resizing.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the ghost option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ ghost: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the ghost option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">ghost = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"ghost"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"ghost"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-grid" class="api-item">
+-<h3>grid<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Snaps the resizing element to a grid, every x and y pixels. Array values: <code>[ x, y ]</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the grid option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ grid: [ 20, 10 ] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the grid option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">grid = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code><code class="plain">, [ 20, 10 ] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-handles" class="api-item">
+-<h3>handles<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"e, s, se"</code>
+-</div>
+-<div>Which handles can be used for resizing.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>String</strong>: A comma delimited list of any of the following: n, e, s, w, ne, se, sw, nw, all. The necessary handles will be auto-generated by the plugin.</li>
+-<li>
+-<strong>Object</strong>: The following keys are supported: { n, e, s, w, ne, se, sw, nw }. The value of any specified should be a jQuery selector matching the child element of the resizable to use as that handle. If the handle is not a child of the resizable, you can pass in the DOMElement or a valid jQuery object directly.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the resizable with the handles option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ handles: </code><code class="string">"n, e, s, w"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the handles option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">handles = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handles"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handles"</code><code class="plain">, </code><code class="string">"n, e, s, w"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-helper" class="api-item">
+-<h3>helper<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>A class name that will be added to a proxy element to outline the resize during the drag of the resize handle. Once the resize is complete, the original element is sized.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the helper option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ helper: </code><code class="string">"resizable-helper"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the helper option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">helper = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code><code class="plain">, </code><code class="string">"resizable-helper"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-maxHeight" class="api-item">
+-<h3>maxHeight<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>The maximum height the resizable should be allowed to resize to.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the maxHeight option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ maxHeight: 300 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the maxHeight option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxHeight = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxHeight"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxHeight"</code><code class="plain">, 300 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-maxWidth" class="api-item">
+-<h3>maxWidth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>The maximum width the resizable should be allowed to resize to.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the maxWidth option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ maxWidth: 300 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the maxWidth option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxWidth = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxWidth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxWidth"</code><code class="plain">, 300 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-minHeight" class="api-item">
+-<h3>minHeight<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>10</code>
+-</div>
+-<div>The minimum height the resizable should be allowed to resize to.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the minHeight option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ minHeight: 150 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the minHeight option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minHeight = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minHeight"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minHeight"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-minWidth" class="api-item">
+-<h3>minWidth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>10</code>
+-</div>
+-<div>The minimum width the resizable should be allowed to resize to.</div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the minWidth option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({ minWidth: 150 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the minWidth option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minWidth = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minWidth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minWidth"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the resizable functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the resizable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the resizable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current resizable options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the resizable option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the resizable.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the resizable element.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).resizable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>resizecreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the resizable is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the resizecreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"resizecreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-resize" class="api-item">
+-<h3>resize( event, ui )<span class="returns">Type: <code>resize</code></span>
+-</h3>
+-<div>This event is triggered during the resize, on the drag of the resize handler.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the element to be resized</div>
+-</li>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper that's being resized</div>
+-</li>
+-<li>
+-<div><strong>originalElement</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the original element before it is wrapped</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The position represented as <code>{ left, top }</code> before the resizable is resized</div>
+-</li>
+-<li>
+-<div><strong>originalSize</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The size represented as <code>{ width, height }</code> before the resizable is resized</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position represented as <code>{ left, top }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>size</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current size represented as <code>{ width, height }</code>
+-</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the resize callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">resize: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the resize event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"resize"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-start" class="api-item">
+-<h3>start( event, ui )<span class="returns">Type: <code>resizestart</code></span>
+-</h3>
+-<div>This event is triggered at the start of a resize operation.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the element to be resized</div>
+-</li>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper that's being resized</div>
+-</li>
+-<li>
+-<div><strong>originalElement</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the original element before it is wrapped</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The position represented as <code>{ left, top }</code> before the resizable is resized</div>
+-</li>
+-<li>
+-<div><strong>originalSize</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The size represented as <code>{ width, height }</code> before the resizable is resized</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position represented as <code>{ left, top }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>size</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current size represented as <code>{ width, height }</code>
+-</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the start callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the resizestart event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"resizestart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-stop" class="api-item">
+-<h3>stop( event, ui )<span class="returns">Type: <code>resizestop</code></span>
+-</h3>
+-<div>This event is triggered at the end of a resize operation.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the element to be resized</div>
+-</li>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper that's being resized</div>
+-</li>
+-<li>
+-<div><strong>originalElement</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the original element before it is wrapped</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The position represented as <code>{ left, top }</code> before the resizable is resized</div>
+-</li>
+-<li>
+-<div><strong>originalSize</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The size represented as <code>{ width, height }</code> before the resizable is resized</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position represented as <code>{ left, top }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>size</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current size represented as <code>{ width, height }</code>
+-</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the resizable with the stop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).resizable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the resizestop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"resizestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Resizable.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;resizable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#resizable {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="plain">}&nbsp;&nbsp; &lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"resizable"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="plain">$( "#resizable" ).resizable();</code></div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2">&nbsp;</div><div class="line number24 index23 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/clip-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/clip-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/clip-effect.html	(revision 15488)
+@@ -1,55 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI clip-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Clip Effect",
+-		"excerpt":
+-			"\n\t\tThe clip effect will hide or show an element by clipping the element vertically or horizontally.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="clip1" class="entry effect"><h2 class="section-title"><span>Clip Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The clip effect will hide or show an element by clipping the element vertically or horizontally.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">clip</h4>
+-<ul><li>
+-<div>
+-<strong>direction</strong> (default: <code>"up"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>
+-				<p>The plane in which the clip effect will hide or show its element.</p>
+-				<p><code>vertical</code> clips the top and bottom edges, while <code>horizontal</code> clips the right and left edges.</p>
+-			</div>
+-</li></ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the clip effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;clip demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "clip" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/scale-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/scale-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/scale-effect.html	(revision 15488)
+@@ -1,82 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI scale-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Scale Effect",
+-		"excerpt":
+-			"\n\t\tShrink or grow an element by a percentage factor.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="scale1" class="entry effect"><h2 class="section-title"><span>Scale Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		Shrink or grow an element by a percentage factor.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">scale</h4>
+-<ul>
+-<li>
+-<div>
+-<strong>direction</strong> (default: <code>"both"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The direction of the effect. Possible values: <code>"both"</code>, <code>"vertical"</code> or <code>"horizontal"</code>.</div>
+-</li>
+-<li>
+-<div>
+-<strong>origin</strong> (default: <code>[ "middle", "center" ]</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
+-</div>
+-<div>The vanishing point.</div>
+-</li>
+-<li>
+-<div><strong>percent</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The percentage to scale to.</div>
+-</li>
+-<li>
+-<div>
+-<strong>scale</strong> (default: <code>"both"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>Which areas of the element will be resized: <code>"both"</code>, <code>"box"</code>, <code>"content"</code>. Box resizes the border and padding of the element; content resizes any content inside of the element.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Examples:</h2></header><div class="entry-example" id="example-0">
+-<h4>Example: <span class="desc">Toggle a div using the scale effect.</span>
+-</h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;scale demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "scale" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div>
+-<div class="entry-example" id="example-1">
+-<h4>Example: <span class="desc">Toggle a div using the scale effect in just one direction.</span>
+-</h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;scale demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle({ effect: "scale", direction: "horizontal" });</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/slider.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/slider.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/slider.html	(revision 15488)
+@@ -1,586 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI slider documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Slider Widget",
+-		"excerpt":
+-			"Drag a handle to select a numeric value.",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="slider1" class="entry widget"><h2 class="section-title">
+-<span>Slider Widget</span><span class="version-details">version added: 1.5</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Drag a handle to select a numeric value.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-animate">animate</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-max">max</a></div>
+-<div><a href="#option-min">min</a></div>
+-<div><a href="#option-orientation">orientation</a></div>
+-<div><a href="#option-range">range</a></div>
+-<div><a href="#option-step">step</a></div>
+-<div><a href="#option-value">value</a></div>
+-<div><a href="#option-values">values</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-value">value</a></div>
+-<div><a href="#method-values">values</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-start">start</a></div>
+-<div><a href="#event-slide">slide</a></div>
+-<div><a href="#event-change">change</a></div>
+-<div><a href="#event-stop">stop</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>The jQuery UI Slider plugin makes selected elements into sliders. There are various options such as multiple handles and ranges. The handle can be moved with the mouse or the arrow keys.</p>
+-
+-		<p>The slider widget will create handle elements with the class <code>ui-slider-handle</code> on initialization. You can specify custom handle elements by creating and appending the elements and adding the <code>ui-slider-handle</code> class before initialization. It will only create the number of handles needed to match the length of <a href="#option-value"><code>value</code></a>/<a href="#option-values"><code>values</code></a>. For example, if you specify <code>values: [ 1, 5, 18 ]</code> and create one custom handle, the plugin will create the other two.</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-animate" class="api-item first-item">
+-<h3>animate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether to slide the handle smoothly when the user clicks on the slider track. Also accepts any valid <a href="//api.jquery.com/animate/#duration">animation duration</a>.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: When set to <code>true</code>, the handle will animate with the default duration.</li>
+-<li>
+-<strong>String</strong>: The name of a speed, such as <code>"fast"</code> or <code>"slow"</code>.</li>
+-<li>
+-<strong>Number</strong>: The duration of the animation, in milliseconds.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the slider with the animate option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ animate: </code><code class="string">"fast"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the animate option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animate = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code><code class="plain">, </code><code class="string">"fast"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the slider if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the slider with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-max" class="api-item">
+-<h3>max<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>100</code>
+-</div>
+-<div>The maximum value of the slider.</div>
+-<strong>Code examples:</strong><p>Initialize the slider with the max option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ max: 50 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the max option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">max = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-min" class="api-item">
+-<h3>min<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>The minimum value of the slider.</div>
+-<strong>Code examples:</strong><p>Initialize the slider with the min option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ min: 10 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the min option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">min = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"min"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"min"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-orientation" class="api-item">
+-<h3>orientation<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"horizontal"</code>
+-</div>
+-<div>Determines whether the slider handles move horizontally (min on left, max on right) or vertically (min on bottom, max on top). Possible values: <code>"horizontal"</code>, <code>"vertical"</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the slider with the orientation option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ orientation: </code><code class="string">"vertical"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the orientation option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">orientation = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"orientation"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"orientation"</code><code class="plain">, </code><code class="string">"vertical"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-range" class="api-item">
+-<h3>range<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the slider represents a range.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: If set to <code>true</code>, the slider will detect if you have two handles and create a stylable range element between these two.</li>
+-<li>
+-<strong>String</strong>: Either <code>"min"</code> or <code>"max"</code>. A min range goes from the slider min to one handle. A max range goes from one handle to the slider max.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the slider with the range option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ range: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the range option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">range = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"range"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"range"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-step" class="api-item">
+-<h3>step<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>Determines the size or amount of each interval or step the slider takes between the min and max. The full specified value range of the slider (max - min) should be evenly divisible by the step.</div>
+-<strong>Code examples:</strong><p>Initialize the slider with the step option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ step: 5 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the step option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">step = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"step"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"step"</code><code class="plain">, 5 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-value" class="api-item">
+-<h3>value<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>Determines the value of the slider, if there's only one handle. If there is more than one handle, determines the value of the first handle.</div>
+-<strong>Code examples:</strong><p>Initialize the slider with the value option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ value: 10 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the value option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">value = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"value"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"value"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-values" class="api-item">
+-<h3>values<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>This option can be used to specify multiple handles. If the <a href="#option-range"><code>range</code></a> option is set to <code>true</code>, the length of <code>values</code> should be 2.</div>
+-<strong>Code examples:</strong><p>Initialize the slider with the values option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({ values: [ 10, 25 ] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the values option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">values = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"values"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"values"</code><code class="plain">, [ 10, 25 ] );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the slider functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the slider.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the slider.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current slider options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the slider option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the slider.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-value">
+-<div class="api-item">
+-<h3>value()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div>Get the value of the slider.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">selection = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"value"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>value( value )</h3>
+-<div>Set the value of the slider.</div>
+-<ul><li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The value to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"value"</code><code class="plain">, 55 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-values">
+-<div class="api-item">
+-<h3>values()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div>Get the value for all handles.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">values = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"values"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>values( index )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div>Get the value for the specified handle.</div>
+-<ul><li>
+-<div><strong>index</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
+-</div>
+-<div>The zero-based index of the handle.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">value = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"values"</code><code class="plain">, 0 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>values( index, value )</h3>
+-<div>Set the value for the specified handle.</div>
+-<ul>
+-<li>
+-<div><strong>index</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
+-</div>
+-<div>The zero-based index of the handle.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The value to set.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"values"</code><code class="plain">, 0, 55 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>values( values )</h3>
+-<div>Set the value for all handles.</div>
+-<ul><li>
+-<div><strong>values</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
+-</div>
+-<div>The values to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"values"</code><code class="plain">, [ 55, 105 ] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the slider.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).slider( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-change" class="api-item first-item">
+-<h3>change( event, ui )<span class="returns">Type: <code>slidechange</code></span>
+-</h3>
+-<div>Triggered after the user slides a handle, if the value has changed; or if the value is changed programmatically via the <a href="#method-value"><code>value</code></a> method.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>handle</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the handle that was changed.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The current value of the slider.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the slider with the change callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the slidechange event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slidechange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>slidecreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the slider is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the slider with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the slidecreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slidecreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-slide" class="api-item">
+-<h3>slide( event, ui )<span class="returns">Type: <code>slide</code></span>
+-</h3>
+-<div>Triggered on every mouse move during slide. The value provided in the event as <code>ui.value</code> represents the value that the handle will have as a result of the current movement. Canceling the event will prevent the handle from moving and the handle will continue to have its previous value.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>handle</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the handle being moved.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The value that the handle will move to if the event is not canceled.</div>
+-</li>
+-<li>
+-<div><strong>values</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
+-</div>
+-<div>An array of the current values of a multi-handled slider.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the slider with the slide callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">slide: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the slide event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slide"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-start" class="api-item">
+-<h3>start( event, ui )<span class="returns">Type: <code>slidestart</code></span>
+-</h3>
+-<div>Triggered when the user starts sliding.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>handle</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the handle being moved.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The current value of the slider.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the slider with the start callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the slidestart event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slidestart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-stop" class="api-item">
+-<h3>stop( event, ui )<span class="returns">Type: <code>slidestop</code></span>
+-</h3>
+-<div>Triggered after the user slides a handle.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>handle</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the handle that was moved.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The current value of the slider.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the slider with the stop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).slider({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the slidestop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"slidestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Slider.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;slider demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;#slider { margin: 10px; }&nbsp; &lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number12 index11 alt1">&nbsp;</div><div class="line number13 index12 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"slider"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1">&nbsp;</div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">$( "#slider" ).slider();</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="50"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/shake-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/shake-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/shake-effect.html	(revision 15488)
+@@ -1,66 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI shake-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Shake Effect",
+-		"excerpt":
+-			"Shakes the element multiple times, vertically or horizontally.",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="shake1" class="entry effect"><h2 class="section-title"><span>Shake Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Shakes the element multiple times, vertically or horizontally.</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">shake</h4>
+-<ul>
+-<li>
+-<div>
+-<strong>direction</strong> (default: <code>"both"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The direction of the effect. Possible values: <code>"left"</code>, <code>"right"</code>, <code>"up"</code>, <code>"down"</code>.</div>
+-</li>
+-<li>
+-<div>
+-<strong>distance</strong> (default: <code>20</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>Distance to shake.</div>
+-</li>
+-<li>
+-<div>
+-<strong>times</strong> (default: <code>3</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
+-</div>
+-<div>Times to shake.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Shake a div.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;shake demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to shake the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).effect( "shake" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/mouse.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/mouse.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/mouse.html	(revision 15488)
+@@ -1,216 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI mouse documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Mouse Interaction",
+-		"excerpt":
+-			"The base interaction layer.",
+-		"termSlugs": {
+-			"category": [
+-				"utilities","interactions"
+-			]
+-		}
+-	}</script><article id="jQuery-ui-mouse1" class="entry widget"><h2 class="section-title"><span>Mouse Interaction</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>The base interaction layer.</p>
+-<section id="quick-nav"><header><h2>QuickNav</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-cancel">cancel</a></div>
+-<div><a href="#option-delay">delay</a></div>
+-<div><a href="#option-distance">distance</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-_mouseInit">_mouseInit</a></div>
+-<div><a href="#method-_mouseDestroy">_mouseDestroy</a></div>
+-<div><a href="#method-_mouseDown">_mouseDown</a></div>
+-<div><a href="#method-_mouseMove">_mouseMove</a></div>
+-<div><a href="#method-_mouseUp">_mouseUp</a></div>
+-<div><a href="#method-_mouseDistanceMet">_mouseDistanceMet</a></div>
+-<div><a href="#method-_mouseDelayMet">_mouseDelayMet</a></div>
+-<div><a href="#method-_mouseStart">_mouseStart</a></div>
+-<div><a href="#method-_mouseDrag">_mouseDrag</a></div>
+-<div><a href="#method-_mouseStop">_mouseStop</a></div>
+-<div><a href="#method-_mouseCapture">_mouseCapture</a></div>
+-</div>
+-<div class="quick-nav-section"><h3>Events</h3></div></section><div class="longdesc" id="entry-longdesc">
+-		<p>Similar to <a href="/jQuery.Widget#jQuery-Widget2"><code>jQuery.Widget</code></a>, the mouse interaction is not intended to be used directly. It is purely a base layer for other widgets to inherit from. This page only documents what is added to <code>jQuery.Widget</code>, but it does include internal methods that are not intended to be overwritten. The intended public API is <a href="#method-_mouseStart"><code>_mouseStart()</code></a>, <a href="#method-_mouseDrag"><code>_mouseDrag()</code></a>, <a href="#method-_mouseStop"><code>_mouseStop()</code></a>, and <a href="#method-_mouseCapture"><code>_mouseCapture()</code></a>.</p>
+-	</div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-cancel" class="api-item first-item">
+-<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"input,textarea,button,select,option"</code>
+-</div>
+-<div>Prevents interactions from starting on specified elements.</div>
+-<strong>Code examples:</strong><p>Initialize the jQuery.ui.mouse with the cancel option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse({ cancel: </code><code class="string">".title"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cancel option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, </code><code class="string">".title"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-delay" class="api-item">
+-<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>Time in milliseconds after mousedown until the interaction should start. This option can be used to prevent unwanted interactions when clicking on an element.</div>
+-<strong>Code examples:</strong><p>Initialize the jQuery.ui.mouse with the delay option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse({ delay: 300 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the delay option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 300 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-distance" class="api-item">
+-<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>Distance in pixels after mousedown the mouse must move before the interaction should start. This option can be used to prevent unwanted interactions when clicking on an element.</div>
+-<strong>Code examples:</strong><p>Initialize the jQuery.ui.mouse with the distance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse({ distance: 10 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the distance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-_mouseCapture"><div class="api-item first-item">
+-<h3>_mouseCapture()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div>
+-				Determines whether an interaction should start based on event target of the interaction. The default implementation always returns <code>true</code>.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseCapture method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseCapture"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseDelayMet"><div class="api-item">
+-<h3>_mouseDelayMet()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div>
+-				Determines whether the <a href="#option-delay"><code>delay</code></a> option has been met for the current interaction.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseDelayMet method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDelayMet"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseDestroy"><div class="api-item">
+-<h3>_mouseDestroy()</h3>
+-<div>
+-				Destroys the interaction event handlers. This must be called from the extending widget's <code>_destroy()</code> method.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseDestroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDestroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseDistanceMet"><div class="api-item">
+-<h3>_mouseDistanceMet()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div>
+-				Determines whether the <a href="#option-distance"><code>distance</code></a> option has been met for the current interaction.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseDistanceMet method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDistanceMet"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseDown"><div class="api-item">
+-<h3>_mouseDown()</h3>
+-<div>
+-				Handles the beginning of an interaction. Verifies that the event is associated with the primary mouse button and ensures that the <a href="#option-delay"><code>delay</code></a> and <a href="#option-distance"><code>distance</code></a> options are met prior to starting the interaction. When the interaction is ready to start, invokes the <a href="#method-_mouseStart"><code>_mouseStart()</code></a> method for the extending widget to handle.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseDown method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDown"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseDrag"><div class="api-item">
+-<h3>_mouseDrag()</h3>
+-<div>
+-				The extending widget should implement a <code>_mouseDrag()</code> method to handle each movement of an interaction. This method will receive the mouse event associated with the movement.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseDrag method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseDrag"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseInit"><div class="api-item">
+-<h3>_mouseInit()</h3>
+-<div>
+-				Initializes the interaction event handlers. This must be called from the extending widget's <code>_create()</code> method.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseInit method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseInit"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseMove"><div class="api-item">
+-<h3>_mouseMove()</h3>
+-<div>
+-				Handles each movement of the interaction. Invokes the <a href="#method-_mouseDrag"><code>mouseDrag()</code></a> method for the extending widget to handle.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseMove method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseMove"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseStart"><div class="api-item">
+-<h3>_mouseStart()</h3>
+-<div>
+-				The extending widget should implement a <code>_mouseStart()</code> method to handle the beginning of an interaction. This method will receive the mouse event associated with the start of the interaction.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseStart method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseStart"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseStop"><div class="api-item">
+-<h3>_mouseStop()</h3>
+-<div>
+-				The extending widget should implement a <code>_mouseStop()</code> method to handle the end of an interaction. This method will receive the mouse event associated with the end of the interaction.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseStop method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseStop"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-_mouseUp"><div class="api-item">
+-<h3>_mouseUp()</h3>
+-<div>
+-				Handles the end of the interaction. Invokes the <a href="#method-_mouseStop"><code>mouseStop()</code></a> method for the extending widget to handle.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the _mouseUp method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.ui.mouse( </code><code class="string">"_mouseUp"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/puff-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/puff-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/puff-effect.html	(revision 15488)
+@@ -1,32 +0,0 @@
+-<script>{
+-		"title":
+-			"Puff Effect",
+-		"excerpt":
+-			"\n\t\tCreates a puff effect by scaling the element up and hiding it at the same time.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="puff1" class="entry effect"><h2 class="section-title"><span>Puff Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		Creates a puff effect by scaling the element up and hiding it at the same time.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">puff</h4>
+-<ul><li>
+-<div>
+-<strong>percent</strong> (default: <code>150</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The percentage to scale to.</div>
+-</li></ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the puff effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;puff demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "puff" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/explode-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/explode-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/explode-effect.html	(revision 15488)
+@@ -1,52 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI explode-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Explode Effect",
+-		"excerpt":
+-			"\n\t\tThe explode effect hides or shows an element by splitting it into pieces.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="explode1" class="entry effect"><h2 class="section-title"><span>Explode Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The explode effect hides or shows an element by splitting it into pieces.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">explode</h4>
+-<ul><li>
+-<div>
+-<strong>pieces</strong> (default: <code>9</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
+-</div>
+-<div>The number of pieces to explode, should be a perfect square, any other values are rounded to the nearest square.</div>
+-</li></ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the explode effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;explode demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "explode" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/jQuery.widget.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/jQuery.widget.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/jQuery.widget.html	(revision 15488)
+@@ -1,611 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI jQuery documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Widget Factory",
+-		"excerpt":
+-			"Create stateful jQuery plugins using the same abstraction as all jQuery UI widgets.",
+-		"termSlugs": {
+-			"category": [
+-				"utilities","utilities","widgets"
+-			]
+-		}
+-	}</script><div class="toc">
+-<h4><span>Contents:</span></h4>
+-<ul class="toc-list">
+-<li>
+-<a href="#jQuery-widget1">jQuery.widget( name [, base ], prototype )</a><ul><li>jQuery.widget( name [, base ], prototype )</li></ul>
+-</li>
+-<li><a href="#jQuery-Widget2">jQuery.Widget</a></li>
+-</ul>
+-</div><article id="jQuery-widget1" class="entry method"><h2 class="section-title"><span class="name">jQuery.widget( name [, base ], prototype )</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Create stateful jQuery plugins using the same abstraction as all jQuery UI widgets.</p>
+-<ul class="signatures"><li class="signature" id="jQuery-widget-name-base-prototype">
+-<h4 class="name">jQuery.widget( name [, base ], prototype )</h4>
+-<ul>
+-<li>
+-<div><strong>name</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the widget to create, including the namespace.</div>
+-</li>
+-<li>
+-<div><strong>base</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
+-<div>The base widget to inherit from. This must be a constructor that can be instantiated with the `new` keyword. Defaults to <code>jQuery.Widget</code>.</div>
+-</li>
+-<li>
+-<div><strong>prototype</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a>
+-</div>
+-<div>The object to use as a prototype for the widget.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<div class="longdesc" id="entry-longdesc">
+-			<p>You can create new widgets from scratch, using just the <code>$.Widget</code> object as a base to inherit from, or you can explicitly inherit from existing jQuery UI or third-party widgets. Defining a widget with the same name as you inherit from even allows you to extend widgets in place.</p>
+-
+-			<p>jQuery UI contains many widgets that maintain state and therefore have a slightly different usage pattern than typical jQuery plugins. All of jQuery UI's widgets use the same patterns, which is defined by the widget factory. So if you learn how to use one widget, then you'll know how to use all of them.</p>
+-
+-			<p><em>Note: This documentation shows examples using the <a href="/progressbar">progressbar widget</a> but the syntax is the same for every widget.</em></p>
+-
+-			<h3>Initialization</h3>
+-
+-			<p>In order to track the state of the widget, we must introduce a full life cycle for the widget. The life cycle starts when the widget is initalized. To initialize a widget, we simply call the plugin on one or more elements.</p>
+-
+-			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar();</code></div></div></td></tr></tbody></table></div>
+-
+-			<p>This will initialize each element in the jQuery object, in this case the element with an id of <code>"elem"</code>. Because we called the <code>progressbar()</code> method with no parameters, the widget is initialized with its default options. We can pass a set of options during initialization in order to override the default options.</p>
+-
+-			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar({ value: 20 });</code></div></div></td></tr></tbody></table></div>
+-
+-			<p>We can pass as many or as few options as we want during initialization. Any options that we don't pass will just use their default values.</p>
+-
+-			<p>The options are part of the widget's state, so we can set options after initialization as well. We'll see this later with the option method.</p>
+-
+-			<h3>Methods</h3>
+-
+-			<p>Now that the widget is initialized, we can query its state or perform actions on the widget. All actions after initialization take the form of a method call. To call a method on a widget, we pass the name of the method to the jQuery plugin. For example, to call the <code>value()</code> method on our progressbar widget, we would use:</p>
+-
+-			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar( </code><code class="string">"value"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-
+-			<p>If the method accepts parameters, we can pass them after the method name. For example, to pass the parameter <code>40</code> to the <code>value()</code> method, we can use:</p>
+-
+-			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar( </code><code class="string">"value"</code><code class="plain">, 40 );</code></div></div></td></tr></tbody></table></div>
+-
+-			<p>Just like other methods in jQuery, most widget methods return the jQuery object for chaining.</p>
+-
+-			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">)</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.progressbar( </code><code class="string">"value"</code><code class="plain">, 90 )</code></div><div class="line number3 index2 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.addClass( </code><code class="string">"almost-done"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-
+-			<p>Each widget will have its own set of methods based on the functionality that the widget provides. However, there are a few methods that exist on all widgets, which are documented below.</p>
+-
+-			<h3>Events</h3>
+-
+-			<p>All widgets have events associated with their various behaviors to notify you when the state is changing. For most widgets, when the events are triggered, the names are prefixed with the widget name. For example, we can bind to progressbar's <code>change</code> event which is triggered whenever the value changes.</p>
+-
+-			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).bind( </code><code class="string">"progressbarchange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">() {</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">alert( </code><code class="string">"The value has changed!"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-
+-			<p>Each event has a corresponding callback, which is exposed as an option. We can hook into progressbar's <code>change</code> callback instead of binding to the <code>progressbarchange</code> event, if we want to.</p>
+-
+-			<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">"#elem"</code> <code class="plain">).progressbar({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">() {</code></div><div class="line number3 index2 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">alert( </code><code class="string">"The value has changed!"</code> <code class="plain">);</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number5 index4 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-
+-			<p>All widgets have a <code>create</code> event which is triggered upon instantiation.</p>
+-		</div>
+-</div></article><article id="jQuery-Widget2" class="entry widget"><h2 class="section-title"><span>Base Widget</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>The base widget used by the widget factory.</p>
+-<section id="quick-nav"><header><h2>QuickNav</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-hide">hide</a></div>
+-<div><a href="#option-show">show</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-<div><a href="#method-_create">_create</a></div>
+-<div><a href="#method-_destroy">_destroy</a></div>
+-<div><a href="#method-_getCreateEventData">_getCreateEventData</a></div>
+-<div><a href="#method-_getCreateOptions">_getCreateOptions</a></div>
+-<div><a href="#method-_init">_init</a></div>
+-<div><a href="#method-_setOptions">_setOptions</a></div>
+-<div><a href="#method-_setOption">_setOption</a></div>
+-<div><a href="#method-_on">_on</a></div>
+-<div><a href="#method-_off">_off</a></div>
+-<div><a href="#method-_super">_super</a></div>
+-<div><a href="#method-_superApply">_superApply</a></div>
+-<div><a href="#method-_delay">_delay</a></div>
+-<div><a href="#method-_hoverable">_hoverable</a></div>
+-<div><a href="#method-_focusable">_focusable</a></div>
+-<div><a href="#method-_trigger">_trigger</a></div>
+-<div><a href="#method-_show">_show</a></div>
+-<div><a href="#method-_hide">_hide</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-</div></section><section id="options"><header><h2 class="underline">Options</h2></header><div id="option-disabled" class="api-item first-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the jQuery.Widget if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the jQuery.Widget with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-hide" class="api-item">
+-<h3>hide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>If and how to animate the hiding of the element.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: 
+-			When set to <code>false</code>, no animation will be used and the element will be hidden immediately.
+-			When set to <code>true</code>, the element will fade out with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Number</strong>: 
+-			The element will fade out with the specified duration and the default easing.
+-		</li>
+-<li>
+-<strong>String</strong>: 
+-			The element will be hidden using the specified effect.
+-			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideUp"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
+-			In either case the effect will be used with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeOut"</code> will be used.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the jQuery.Widget with the hide option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget({ hide: { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the hide option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hide = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code><code class="plain">, { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-show" class="api-item">
+-<h3>show<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>If and how to animate the showing of the element.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: 
+-			When set to <code>false</code>, no animation will be used and the element will be shown immediately.
+-			When set to <code>true</code>, the element will fade in with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Number</strong>: 
+-			The element will fade in with the specified duration and the default easing.
+-		</li>
+-<li>
+-<strong>String</strong>: 
+-			The element will be shown using the specified effect.
+-			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideDown"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
+-			In either case the effect will be used with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeIn"</code> will be used.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the jQuery.Widget with the show option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget({ show: { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the show option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">show = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code><code class="plain">, { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-_create"><div class="api-item first-item">
+-<h3>_create()</h3>
+-<div>
+-					The <code>_create()</code> method is the widget's constructor.
+-					There are no parameters, but <code>this.element</code> and <code>this.options</code> are already set.
+-				</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-_delay"><div class="api-item">
+-<h3>_delay( fn [, delay ] )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div>
+-					Invokes the provided function after a specified delay. Keeps <code>this</code> context correct. Essentially <code>setTimeout()</code>.
+-					<p>Returns the timeout ID for use with <code>clearTimeout()</code>.</p>
+-				</div>
+-<ul>
+-<li>
+-<div><strong>fn</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>() or <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The function to invoke. Can also be the name of a method on the widget.</div>
+-</li>
+-<li>
+-<div><strong>delay</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The number of milliseconds to wait before invoking the function. Deafults to <code>0</code>.</div>
+-</li>
+-</ul>
+-</div></div>
+-<div id="method-_destroy"><div class="api-item">
+-<h3>_destroy()</h3>
+-<div>
+-					The public <a href="#method-destroy"><code>destroy()</code></a> method cleans up all common data, events, etc. and then delegates out to <code>_destroy()</code> for custom, widget-specific, cleanup.
+-				</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-_focusable"><div class="api-item">
+-<h3>_focusable( element )</h3>
+-<div>
+-					Sets up <code>element</code> to apply the <code>ui-state-focus</code> class on focus.
+-					<p>The event handlers are automatically cleaned up on destroy.</p>
+-				</div>
+-<ul><li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The element(s) to apply the focusable behavior to.</div>
+-</li></ul>
+-</div></div>
+-<div id="method-_getCreateEventData"><div class="api-item">
+-<h3>_getCreateEventData()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>
+-					All widgets trigger the <a href="#event-create"><code>create</code></a> event. By default, no data is provided in the event, but this method can return an object which will be passed as the <code>create</code> event's data.
+-				</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-_getCreateOptions"><div class="api-item">
+-<h3>_getCreateOptions()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>
+-					This method allows the widget to define a custom method for defining options during instantiation. This user-provided options override the options returned by this method which override the default options.
+-				</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-_hide"><div class="api-item">
+-<h3>_hide( element, option [, callback ] )</h3>
+-<div>
+-					Hides an element immediately, using built-in animation methods, or using custom effects.
+-					See the <a href="#option-hide">hide</a> option for possible <code>option</code> values.
+-				</div>
+-<ul>
+-<li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The element(s) to hide.</div>
+-</li>
+-<li>
+-<div><strong>option</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The settings defining how to hide the element.</div>
+-</li>
+-<li>
+-<div><strong>callback</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
+-<div>Callback to invoke after the element has been fully hidden.</div>
+-</li>
+-</ul>
+-</div></div>
+-<div id="method-_hoverable"><div class="api-item">
+-<h3>_hoverable( element )</h3>
+-<div>
+-					Sets up <code>element</code> to apply the <code>ui-state-hover</code> class on hover.
+-					<p>The event handlers are automatically cleaned up on destroy.</p>
+-				</div>
+-<ul><li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The element(s) to apply the hoverable behavior to.</div>
+-</li></ul>
+-</div></div>
+-<div id="method-_init"><div class="api-item">
+-<h3>_init()</h3>
+-<div>
+-					Widgets have the concept of initialization that is distinct from creation. Any time the plugin is called with no arguments or with only an option hash, the widget is initialized; this includes when the widget is created.
+-
+-					<p><em>Note: Initialization should only be handled if there is a logical action to perform on successive calls to the widget with no arguments.</em></p>
+-				</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-_off"><div class="api-item">
+-<h3>_off( element, eventName )</h3>
+-<div>
+-					Unbinds event handlers from the specified element(s).
+-				</div>
+-<ul>
+-<li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>
+-						The element(s) to unbind the event handlers from. Unlike the <code>_on()</code> method, the elements are required for <code>_off()</code>.
+-					</div>
+-</li>
+-<li>
+-<div><strong>eventName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>One or more space-separated event types.</div>
+-</li>
+-</ul>
+-</div></div>
+-<div id="method-_on"><div class="api-item">
+-<h3>_on(  [element ], handlers )</h3>
+-<div>
+-					Binds event handlers to the specified element(s). Delegation is supported via selectors inside the event names, e.g., "<code>click .foo</code>". The <code>_on()</code> method provides several benefits of direct event binding:
+-					<ul>
+-						<li>Maintains proper <code>this</code> context inside the handlers.</li>
+-						<li>Automatically handles disabled widgets: If the widget is disabled or the event occurs on an element with the <code>ui-state-disabled</code> class, the event handler is not invoked.</li>
+-						<li>Event handlers are automatically namespaced and cleaned up on destroy.</li>
+-					</ul>
+-				</div>
+-<ul>
+-<li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>Which element(s) to bind the event handlers to. If no element is provided, <code>this.element</code> is used.</div>
+-</li>
+-<li>
+-<div><strong>handlers</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>
+-						A map in which the string keys represent the event type and optional selector for delegation, and the values represent a handler function to be called for the event.
+-					</div>
+-</li>
+-</ul>
+-</div></div>
+-<div id="method-_setOption"><div class="api-item">
+-<h3>_setOption( key, value )</h3>
+-<div>
+-					Called from the <a href="#method-_setOptions"><code>_setOptions()</code></a> method for each individual option. Widget state should be updated based on changes.
+-				</div>
+-<ul>
+-<li>
+-<div><strong>key</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-</div></div>
+-<div id="method-_setOptions"><div class="api-item">
+-<h3>_setOptions( options )</h3>
+-<div>
+-					Called whenever the <a href="#method-option"><code>option()</code></a> method is called, regardless of the form in which the <code>option()</code> method was called.
+-					<p>Overriding this is useful if you can defer processor-intensive changes for multiple option changes.</p>
+-				</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-</div></div>
+-<div id="method-_show"><div class="api-item">
+-<h3>_show( element, option [, callback ] )</h3>
+-<div>
+-					Shows an element immediately, using built-in animation methods, or using custom effects.
+-					See the <a href="#option-show">show</a> option for possible <code>option</code> values.
+-				</div>
+-<ul>
+-<li>
+-<div><strong>element</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The element(s) to show.</div>
+-</li>
+-<li>
+-<div><strong>option</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The settings defining how to show the element.</div>
+-</li>
+-<li>
+-<div><strong>callback</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
+-<div>Callback to invoke after the element has been fully shown.</div>
+-</li>
+-</ul>
+-</div></div>
+-<div id="method-_super"><div class="api-item">
+-<h3>_super()</h3>
+-<div>
+-					Invokes the method of the same name from the parent widget, with any specified arguments. Essentially <code>.call()</code>.
+-				</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-_superApply"><div class="api-item">
+-<h3>_superApply( arguments )</h3>
+-<div>
+-					Invokes the method of the same name from the parent widget, with the array of arguments. Essentially <code>.apply()</code>.
+-				</div>
+-<ul><li>
+-<div><strong>arguments</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
+-</div>
+-<div>Array of arguments to pass to the parent method.</div>
+-</li></ul>
+-</div></div>
+-<div id="method-_trigger"><div class="api-item">
+-<h3>_trigger( type [, event ] [, data ] )</h3>
+-<div>
+-					Triggers an event and its associated callback.
+-					<p>The option with the name equal to type is invoked as the callback.</p>
+-					<p>The event name is the widget name + type.</p>
+-					<p><em>Note: When providing data, you must provide all three parameters. If there is no event to pass along, just pass <code>null</code>.</em></p>
+-				</div>
+-<ul>
+-<li>
+-<div><strong>type</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The <code>type</code> should match the name of a callback option. The full event type will be generated automatically.</div>
+-</li>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>The original event that caused this event to occur; useful for providing context to the listener.</div>
+-</li>
+-<li>
+-<div><strong>data</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A hash of data associated with the event.</div>
+-</li>
+-</ul>
+-</div></div>
+-<div id="method-destroy"><div class="api-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the jQuery.Widget functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the jQuery.Widget.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the jQuery.Widget.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current jQuery.Widget options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the jQuery.Widget option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the jQuery.Widget.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the original element or other relevant generated element.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>jQuery.Widgetcreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the jQuery.Widget is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the jQuery.Widget with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).jQuery.Widget({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the jQuery.Widgetcreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"jQuery.Widgetcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/accordion.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/accordion.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/accordion.html	(revision 15488)
+@@ -1,488 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI accordion documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Accordion Widget",
+-		"excerpt":
+-			"Convert a pair of headers and content panels into an accordion.",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="accordion1" class="entry widget"><h2 class="section-title">
+-<span>Accordion Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Convert a pair of headers and content panels into an accordion.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-active">active</a></div>
+-<div><a href="#option-animate">animate</a></div>
+-<div><a href="#option-collapsible">collapsible</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-event">event</a></div>
+-<div><a href="#option-header">header</a></div>
+-<div><a href="#option-heightStyle">heightStyle</a></div>
+-<div><a href="#option-icons">icons</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-refresh">refresh</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-activate">activate</a></div>
+-<div><a href="#event-beforeActivate">beforeActivate</a></div>
+-<div><a href="#event-create">create</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>The markup of your accordion container needs pairs of headers and content panels:</p>
+-
+-		<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"accordion"</code><code class="plain">&gt;</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;First header&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;First content panel&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;Second header&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;Second content panel&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-
+-		<p>Accordions support arbitrary markup, but each content panel must always be the next sibling after its associated header. See the <a href="#option-header"><code>header</code></a> option for information on how to use custom markup structures.</p>
+-		<p>The panels can be activated programmatically by setting the <a href="#option-active"><code>active</code></a> option.</p>
+-
+-		<h3>Keyboard interaction</h3>
+-
+-		<p>When focus is on a header, the following key commands are available:</p>
+-		<ul>
+-			<li>UP/LEFT - Move focus to the previous header. If on first header, moves focus to last header.</li>
+-			<li>DOWN/RIGHT - Move focus to the next header. If on last header, moves focus to first header.</li>
+-			<li>HOME - Move focus to the first header.</li>
+-			<li>END - Move focus to the last header.</li>
+-			<li>SPACE/ENTER - Activate panel associated with focused header.</li>
+-		</ul>
+-
+-		<p>When focus is in a panel:</p>
+-		<ul>
+-			<li>CTRL+UP: Move focus to associated header.</li>
+-		</ul>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-active" class="api-item first-item">
+-<h3>active<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Integer">Integer</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>
+-				Which panel is currently open.
+-			</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: Setting <code>active</code> to <code>false</code> will collapse all panels. This requires the <a href="#option-collapsible"><code>collapsible</code></a> option to be <code>true</code>.</li>
+-<li>
+-<strong>Integer</strong>: The zero-based index of the panel that is active (open). A negative value selects panels going backward from the last panel.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the accordion with the active option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ active: 2 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the active option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">active = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"active"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"active"</code><code class="plain">, 2 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-animate" class="api-item">
+-<h3>animate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{}</code>
+-</div>
+-<div>If and how to animate changing panels.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: A value of <code>false</code> will disable animations.</li>
+-<li>
+-<strong>Number</strong>: Duration in milliseconds with default easing.</li>
+-<li>
+-<strong>String</strong>: Name of <a href="/easings/">easing</a> to use with default duration.</li>
+-<li>
+-<strong>Object</strong>: Animation settings with <code>easing</code> and <code>duration</code> properties.
+-					<ul>
+-						<li>Can also contain a <code>down</code> property with any of the above options.</li>
+-						<li>"Down" animations occur when the panel being activated has a lower index than the currently active panel.</li>
+-					</ul>
+-				</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the accordion with the animate option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ animate: </code><code class="string">"bounceslide"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the animate option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">animate = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"animate"</code><code class="plain">, </code><code class="string">"bounceslide"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-collapsible" class="api-item">
+-<h3>collapsible<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether all the sections can be closed at once. Allows collapsing the active section.</div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the collapsible option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ collapsible: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the collapsible option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">collapsible = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"collapsible"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"collapsible"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the accordion if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-event" class="api-item">
+-<h3>event<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"click"</code>
+-</div>
+-<div>The event that accordion headers will react to in order to activate the associated panel. Multiple events can be specificed, separated by a space.</div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the event option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ event: </code><code class="string">"mouseover"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the event option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">event = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"event"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"event"</code><code class="plain">, </code><code class="string">"mouseover"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-header" class="api-item">
+-<h3>header<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"&gt; li &gt; :first-child,&gt; :not(li):even"</code>
+-</div>
+-<div>
+-				<p>Selector for the header element, applied via <code>.find()</code> on the main accordion element. Content panels must be the sibling immedately after their associated headers.</p>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the header option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ header: </code><code class="string">"h3"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the header option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">header = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"header"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"header"</code><code class="plain">, </code><code class="string">"h3"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-heightStyle" class="api-item">
+-<h3>heightStyle<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"auto"</code>
+-</div>
+-<div>
+-				<p>Controls the height of the accordion and each panel. Possible values:</p>
+-				<ul>
+-					<li>
+-<code>"auto"</code>: All panels will be set to the height of the tallest panel.</li>
+-					<li>
+-<code>"fill"</code>: Expand to the available height based on the accordion's parent height.</li>
+-					<li>
+-<code>"content"</code>: Each panel will be only as tall as its content.</li>
+-				</ul>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the heightStyle option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ heightStyle: </code><code class="string">"fill"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the heightStyle option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">heightStyle = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"heightStyle"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"heightStyle"</code><code class="plain">, </code><code class="string">"fill"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-icons" class="api-item">
+-<h3>icons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{ "header": "ui-icon-triangle-1-e", "activeHeader": "ui-icon-triangle-1-s" }</code>
+-</div>
+-<div>
+-				<p>Icons to use for headers, matching an icon defined by the jQuery UI CSS Framework. Set to <code>false</code> to have no icons displayed.</p>
+-				<ul>
+-					<li>header (string, default: "ui-icon-triangle-1-e")</li>
+-					<li>activeHeader (string, default: "ui-icon-triangle-1-s")</li>
+-				</ul>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the icons option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({ icons: { </code><code class="string">"header"</code><code class="plain">: </code><code class="string">"ui-icon-plus"</code><code class="plain">, </code><code class="string">"headerSelected"</code><code class="plain">: </code><code class="string">"ui-icon-minus"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the icons option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">icons = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code><code class="plain">, { </code><code class="string">"header"</code><code class="plain">: </code><code class="string">"ui-icon-plus"</code><code class="plain">, </code><code class="string">"headerSelected"</code><code class="plain">: </code><code class="string">"ui-icon-minus"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the accordion functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the accordion.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the accordion.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current accordion options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the accordion option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the accordion.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-refresh"><div class="api-item">
+-<h3>refresh()</h3>
+-<div>Recompute the height of the accordion panels. Results depend on the content and the <a href="#option-heightStyle"><code>heightStyle</code></a> option.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the refresh method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the accordion.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).accordion( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-activate" class="api-item first-item">
+-<h3>activate( event, ui )<span class="returns">Type: <code>accordionactivate</code></span>
+-</h3>
+-<div>Triggered after a panel has been activated (after animation completes). If the accordion was previously collapsed, <code>ui.oldHeader</code> and <code>ui.oldPanel</code> will be empty jQuery objects. If the accordion is collapsing, <code>ui.newHeader</code> and <code>ui.newPanel</code> will be empty jQuery objects.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>newHeader</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The header that was just activated.</div>
+-</li>
+-<li>
+-<div><strong>oldHeader</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The header that was just deactivated.</div>
+-</li>
+-<li>
+-<div><strong>newPanel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel that was just activated.</div>
+-</li>
+-<li>
+-<div><strong>oldPanel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel that was just deactivated.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the activate callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">activate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the accordionactivate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"accordionactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-beforeActivate" class="api-item">
+-<h3>beforeActivate( event, ui )<span class="returns">Type: <code>accordionbeforeactivate</code></span>
+-</h3>
+-<div>Triggered directly before a panel is activated. Can be canceled to prevent the panel from activating. If the accordion is currently collapsed, <code>ui.oldHeader</code> and <code>ui.oldPanel</code> will be empty jQuery objects. If the accordion is collapsing, <code>ui.newHeader</code> and <code>ui.newPanel</code> will be empty jQuery objects.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>newHeader</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The header that is about to be activated.</div>
+-</li>
+-<li>
+-<div><strong>oldHeader</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The header that is about to be deactivated.</div>
+-</li>
+-<li>
+-<div><strong>newPanel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel that is about to be activated.</div>
+-</li>
+-<li>
+-<div><strong>oldPanel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel that is about to be deactivated.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the beforeActivate callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeActivate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the accordionbeforeactivate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"accordionbeforeactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>accordioncreate</code></span>
+-</h3>
+-<div>Triggered when the accordion is created. If the accordion is collapsed, <code>ui.header</code> and <code>ui.panel</code> will be empty jQuery objects.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>header</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The active header.</div>
+-</li>
+-<li>
+-<div><strong>panel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The active panel.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the accordion with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).accordion({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the accordioncreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"accordioncreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Accordion</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;accordion demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"accordion"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;Section 1&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Mauris mauris ante, blandit et, ultrices a, suscipit eget.</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Integer ut neque. Vivamus nisi metus, molestie vel, gravida in,</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros.</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Nam mi. Proin viverra leo ut odio.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;Section 2&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Sed non urna. Phasellus eu ligula. Vestibulum sit amet purus.</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Vivamus hendrerit, dolor aliquet laoreet, mauris turpis velit,</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">faucibus interdum tellus libero ac justo.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">h3</code><code class="plain">&gt;Section 3&lt;/</code><code class="keyword">h3</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Nam enim risus, molestie et, porta ac, aliquam ac, risus.</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Quisque lobortis.Phasellus pellentesque purus in massa.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;List item one&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number32 index31 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;List item two&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number33 index32 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;List item three&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number34 index33 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number35 index34 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number36 index35 alt1"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number37 index36 alt2">&nbsp;</div><div class="line number38 index37 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number39 index38 alt2"><code class="plain">$( "#accordion" ).accordion();</code></div><div class="line number40 index39 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number41 index40 alt2">&nbsp;</div><div class="line number42 index41 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number43 index42 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="350"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/highlight-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/highlight-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/highlight-effect.html	(revision 15488)
+@@ -1,52 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI highlight-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Highlight Effect",
+-		"excerpt":
+-			"\n\t\tThe highlight effect hides or shows an element by animating its background color first.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="highlight1" class="entry effect"><h2 class="section-title"><span>Highlight Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The highlight effect hides or shows an element by animating its background color first.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">highlight</h4>
+-<ul><li>
+-<div>
+-<strong>color</strong> (default: <code>"#ffff99"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The background color used during the animation.</div>
+-</li></ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the highlight effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;highlight demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "highlight" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/position.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/position.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/position.html	(revision 15488)
+@@ -1,116 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI position documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			".position()",
+-		"excerpt":
+-			"Position an element relative to another.",
+-		"termSlugs": {
+-			"category": [
+-				"methods","overrides","utilities"
+-			]
+-		}
+-	}</script><article id="position1" class="entry method"><h2 class="section-title">
+-<span class="name">.position( options )</span><span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span><span class="version-details">version added: 1.8</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Position an element relative to another.</p>
+-<ul class="signatures"><li class="signature" id="position-options">
+-<h4 class="name">.position( options )</h4>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div>
+-<strong>my</strong> (default: <code>"center"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>Defines which position <strong>on the element being positioned</strong> to align with the target element: "horizontal vertical" alignment. A single value such as <code>"right"</code> will be normalized to <code>"right center"</code>, <code>"top"</code> will be normalized to <code>"center top"</code> (following CSS convention). Acceptable horizontal values: <code>"left"</code>, <code>"center"</code>, <code>"right"</code>. Acceptable vertical values: <code>"top"</code>, <code>"center"</code>, <code>"bottom"</code>. Example: <code>"left top"</code> or <code>"center center"</code>. Each dimension can also contain offsets, in pixels or percent, e.g., <code>"right+10 top-25%"</code>. Percentage offsets are relative to the element being positioned.</div>
+-</li>
+-<li>
+-<div>
+-<strong>at</strong> (default: <code>"center"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>Defines which position <strong>on the target element</strong> to align the positioned element against: "horizontal vertical" alignment. See the <a href="#option-my"><code>my</code></a> option for full details on possible values. Perecentage offsets are relative to the target element.</div>
+-</li>
+-<li>
+-<div>
+-<strong>of</strong> (default: <code>null</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>Which element to position against. If you provide a selector or jQuery object, the first matching element will be used. If you provide an event object, the <code>pageX</code> and <code>pageY</code> properties will be used. Example: <code>"#top-menu"</code>
+-</div>
+-</li>
+-<li>
+-<div>
+-<strong>collision</strong> (default: <code>"flip"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>
+-					<p>When the positioned element overflows the window in some direction, move it to an alternative position. Similar to <a href="#option-my"><code>my</code></a> and <a href="#option-at"><code>at</code></a>, this accepts a single value or a pair for horizontal/vertical, e.g., <code>"flip"</code>, <code>"fit"</code>, <code>"fit flip"</code>, <code>"fit none"</code>.</p>
+-					<ul>
+-						<li>
+-<code>"flip"</code>: Flips the element to the opposite side of the target and the collision detection is run again to see if it will fit. Whichever side allows more of the element to be visible will be used.</li>
+-						<li>
+-<code>"fit"</code>: Shift the element away from the edge of the window.</li>
+-						<li>
+-<code>"flipfit"</code>: First applies the flip logic, placing the element on whichever side allows more of the element to be visible. Then the fit logic is applied to ensure as much of the element is visible as possible.</li>
+-						<li>
+-<code>"none"</code>: Does not apply any collision detection.</li>
+-					</ul>
+-				</div>
+-</li>
+-<li>
+-<div>
+-<strong>using</strong> (default: <code>null</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
+-<div>
+-					When specified, the actual property setting is delegated to this callback. Receives two parameters: The first is a hash of <code>top</code> and <code>left</code> values for the position that should be set and can be forwarded to <code>.css()</code> or <code>.animate()</code>.
+-					<p>The second provides feedback about the position and dimensions of both elements, as well as calculations to their relative position. Both <code>target</code> and <code>element</code> have these properties: <code>element</code>, <code>left</code>, <code>top</code>, <code>width</code>, <code>height</code>. In addition, there's <code>horizontal</code>, <code>vertical</code> and <code>important</code>, giving you twelve potential directions like <code>{ horizontal: "center", vertical: "left", important: "horizontal" }</code>.</p>
+-				</div>
+-</li>
+-<li>
+-<div>
+-<strong>within</strong> (default: <code>window</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>Element to position within, affecting collision detection. If you provide a selector or jQuery object, the first matching element will be used.</div>
+-</li>
+-</ul>
+-</li></ul>
+-</li></ul>
+-<div class="longdesc" id="entry-longdesc">
+-		<p>The jQuery UI <code>.position()</code> method allows you to position an element relative to the window, document, another element, or the cursor/mouse, without worrying about offset parents.</p>
+-		<p><em>Note: jQuery UI does not support positioning hidden elements.</em></p>
+-		<p>This is a standalone jQuery plugin and has no dependencies on other jQuery UI components.</p>
+-		<p>This plugin extends jQuery's built-in <a href="http://api.jquery.com/position"><code>.position()</code></a> method. If jQuery UI is not loaded, calling the <code>.position()</code> method may not fail directly, as the method still exists. However, the expected behavior will not occur.</p>
+-	</div>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Position example.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div><div class="line number44 index43 alt1">44</div><div class="line number45 index44 alt2">45</div><div class="line number46 index45 alt1">46</div><div class="line number47 index46 alt2">47</div><div class="line number48 index47 alt1">48</div><div class="line number49 index48 alt2">49</div><div class="line number50 index49 alt1">50</div><div class="line number51 index50 alt2">51</div><div class="line number52 index51 alt1">52</div><div class="line number53 index52 alt2">53</div><div class="line number54 index53 alt1">54</div><div class="line number55 index54 alt2">55</div><div class="line number56 index55 alt1">56</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;position demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.positionDiv {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">position: absolute;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 75px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 75px;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: green;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"targetElement"</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"positionDiv"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"position1"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"positionDiv"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"position2"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"positionDiv"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"position3"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"positionDiv"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"position4"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1">&nbsp;</div><div class="line number27 index26 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="plain">$( "#position1" ).position({</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">my: "center",</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">at: "center",</code></div><div class="line number31 index30 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">of: "#targetElement"</code></div><div class="line number32 index31 alt1"><code class="plain">});</code></div><div class="line number33 index32 alt2">&nbsp;</div><div class="line number34 index33 alt1"><code class="plain">$( "#position2" ).position({</code></div><div class="line number35 index34 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">my: "left top",</code></div><div class="line number36 index35 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">at: "left top",</code></div><div class="line number37 index36 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">of: "#targetElement"</code></div><div class="line number38 index37 alt1"><code class="plain">});</code></div><div class="line number39 index38 alt2">&nbsp;</div><div class="line number40 index39 alt1"><code class="plain">$( "#position3" ).position({</code></div><div class="line number41 index40 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">my: "right center",</code></div><div class="line number42 index41 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">at: "right bottom",</code></div><div class="line number43 index42 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">of: "#targetElement"</code></div><div class="line number44 index43 alt1"><code class="plain">});</code></div><div class="line number45 index44 alt2">&nbsp;</div><div class="line number46 index45 alt1"><code class="plain">$( document ).mousemove(function( event ) {</code></div><div class="line number47 index46 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#position4" ).position({</code></div><div class="line number48 index47 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">my: "left+3 bottom-3",</code></div><div class="line number49 index48 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">of: event,</code></div><div class="line number50 index49 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">collision: "fit"</code></div><div class="line number51 index50 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">});</code></div><div class="line number52 index51 alt1"><code class="plain">});</code></div><div class="line number53 index52 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number54 index53 alt1">&nbsp;</div><div class="line number55 index54 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number56 index55 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/bounce-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/bounce-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/bounce-effect.html	(revision 15488)
+@@ -1,61 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI bounce-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Bounce Effect",
+-		"excerpt":
+-			"\n\t\tThe bounce effect bounces an element.  When used with hide or show, the last or first bounce will also fade in/out.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="bounce1" class="entry effect"><h2 class="section-title"><span>Bounce Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The bounce effect bounces an element.  When used with hide or show, the last or first bounce will also fade in/out.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">bounce</h4>
+-<ul>
+-<li>
+-<div>
+-<strong>distance</strong> (default: <code>20</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The distance of the largest "bounce" in pixels.</div>
+-</li>
+-<li>
+-<div>
+-<strong>times</strong> (default: <code>5</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
+-</div>
+-<div>The number of times the element will bounce. When used with hide or show, there is an extra "half" bounce for the fade in/out.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the bounce effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;bounce demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "bounce", { times: 3 }, "slow" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/pulsate-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/pulsate-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/pulsate-effect.html	(revision 15488)
+@@ -1,52 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI pulsate-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Pulsate Effect",
+-		"excerpt":
+-			"\n\t\tThe pulsate effect hides or shows an element by pulsing it in or out.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="pulsate1" class="entry effect"><h2 class="section-title"><span>Pulsate Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The pulsate effect hides or shows an element by pulsing it in or out.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">pulsate</h4>
+-<ul><li>
+-<div>
+-<strong>times</strong> (default: <code>5</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Integer">Integer</a>
+-</div>
+-<div>The number of times the element should pulse. An extra half pulse is added for hide/show.</div>
+-</li></ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the pulsate effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;pulsate demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "pulsate" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/sortable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/sortable.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/sortable.html	(revision 15488)
+@@ -1,1450 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI sortable documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Sortable Widget",
+-		"excerpt":
+-			"Reorder elements in a list or grid using the mouse.",
+-		"termSlugs": {
+-			"category": [
+-				"interactions"
+-			]
+-		}
+-	}</script><article id="sortable1" class="entry widget"><h2 class="section-title">
+-<span>Sortable Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Reorder elements in a list or grid using the mouse.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-appendTo">appendTo</a></div>
+-<div><a href="#option-axis">axis</a></div>
+-<div><a href="#option-cancel">cancel</a></div>
+-<div><a href="#option-connectWith">connectWith</a></div>
+-<div><a href="#option-containment">containment</a></div>
+-<div><a href="#option-cursor">cursor</a></div>
+-<div><a href="#option-cursorAt">cursorAt</a></div>
+-<div><a href="#option-delay">delay</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-distance">distance</a></div>
+-<div><a href="#option-dropOnEmpty">dropOnEmpty</a></div>
+-<div><a href="#option-forceHelperSize">forceHelperSize</a></div>
+-<div><a href="#option-forcePlaceholderSize">forcePlaceholderSize</a></div>
+-<div><a href="#option-grid">grid</a></div>
+-<div><a href="#option-handle">handle</a></div>
+-<div><a href="#option-helper">helper</a></div>
+-<div><a href="#option-items">items</a></div>
+-<div><a href="#option-opacity">opacity</a></div>
+-<div><a href="#option-placeholder">placeholder</a></div>
+-<div><a href="#option-revert">revert</a></div>
+-<div><a href="#option-scroll">scroll</a></div>
+-<div><a href="#option-scrollSensitivity">scrollSensitivity</a></div>
+-<div><a href="#option-scrollSpeed">scrollSpeed</a></div>
+-<div><a href="#option-tolerance">tolerance</a></div>
+-<div><a href="#option-zIndex">zIndex</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-cancel">cancel</a></div>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-refresh">refresh</a></div>
+-<div><a href="#method-refreshPositions">refreshPositions</a></div>
+-<div><a href="#method-serialize">serialize</a></div>
+-<div><a href="#method-toArray">toArray</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-start">start</a></div>
+-<div><a href="#event-sort">sort</a></div>
+-<div><a href="#event-change">change</a></div>
+-<div><a href="#event-beforeStop">beforeStop</a></div>
+-<div><a href="#event-stop">stop</a></div>
+-<div><a href="#event-update">update</a></div>
+-<div><a href="#event-receive">receive</a></div>
+-<div><a href="#event-remove">remove</a></div>
+-<div><a href="#event-over">over</a></div>
+-<div><a href="#event-out">out</a></div>
+-<div><a href="#event-activate">activate</a></div>
+-<div><a href="#event-deactivate">deactivate</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>The jQuery UI Sortable plugin makes selected elements sortable by dragging with the mouse.</p>
+-		<p><em>Note: In order to sort table rows, the <code>tbody</code> must be made sortable, not the <code>table</code>.</em></p>
+-	</div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-appendTo" class="api-item first-item">
+-<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"parent"</code>
+-</div>
+-<div>Defines where the helper that moves with the mouse is being appended to during the drag (for example, to resolve overlap/zIndex issues).</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>jQuery</strong>: A jQuery object containing the element to append the helper to.</li>
+-<li>
+-<strong>Element</strong>: The element to append the helper to.</li>
+-<li>
+-<strong>Selector</strong>: A selector specifying which element to append the helper to.</li>
+-<li>
+-<strong>String</strong>: The string <code>"parent"</code> will cause the helper to be a sibling of the sortable item.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the sortable with the appendTo option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ appendTo: document.body });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the appendTo option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, document.body );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-axis" class="api-item">
+-<h3>axis<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If defined, the items can be dragged only horizontally or vertically. Possible values: <code>"x"</code>, <code>"y"</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the axis option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ axis: </code><code class="string">"x"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the axis option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">axis = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"axis"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"axis"</code><code class="plain">, </code><code class="string">"x"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-cancel" class="api-item">
+-<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>":input,button"</code>
+-</div>
+-<div>Prevents sorting if you start on elements matching the selector.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the cancel option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ cancel: </code><code class="string">"a,button"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cancel option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, </code><code class="string">"a,button"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-connectWith" class="api-item">
+-<h3>connectWith<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>A selector of other sortable elements that the items from this list should be connected to. This is a one-way relationship, if you want the items to be connected in both directions, the <code>connectWith</code> option must be set on both sortable elements.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the connectWith option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ connectWith: </code><code class="string">"#shopping-cart"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the connectWith option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">connectWith = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"connectWith"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"connectWith"</code><code class="plain">, </code><code class="string">"#shopping-cart"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-containment" class="api-item">
+-<h3>containment<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>
+-				<p>Defines a bounding box that the sortable items are contrained to while dragging.</p>
+-
+-				<p>Note: The element specified for containment must have a calculated width and height (though it need not be explicit). For example, if you have <code>float: left</code> sortable children and specify <code>containment: "parent"</code> be sure to have <code>float: left</code> on the sortable/parent container as well or it will have <code>height: 0</code>, causing undefined behavior.</p>
+-			</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Element</strong>: An element to use as the container.</li>
+-<li>
+-<strong>Selector</strong>: A selector specifying an element to use as the container.</li>
+-<li>
+-<strong>String</strong>: A string identifying an element to use as the container. Possible values: <code>"parent"</code>, <code>"document"</code>, <code>"window"</code>.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the sortable with the containment option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ containment: </code><code class="string">"parent"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the containment option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">containment = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code><code class="plain">, </code><code class="string">"parent"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-cursor" class="api-item">
+-<h3>cursor<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"auto"</code>
+-</div>
+-<div>Defines the cursor that is being shown while sorting.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the cursor option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ cursor: </code><code class="string">"move"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cursor option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cursor = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursor"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursor"</code><code class="plain">, </code><code class="string">"move"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-cursorAt" class="api-item">
+-<h3>cursorAt<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Moves the sorting element or helper so the cursor always appears to drag from the same position. Coordinates can be given as a hash using a combination of one or two keys: <code>{ top, left, right, bottom }</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the cursorAt option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ cursorAt: { left: 5 } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cursorAt option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cursorAt = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursorAt"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursorAt"</code><code class="plain">, { left: 5 } );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-delay" class="api-item">
+-<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>Time in milliseconds to define when the sorting should start. Adding a delay helps preventing unwanted drags when clicking on an element.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the delay option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ delay: 150 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the delay option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the sortable if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-distance" class="api-item">
+-<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>Tolerance, in pixels, for when sorting should start. If specified, sorting will not start until after mouse is dragged beyond distance. Can be used to allow for clicks on elements within a handle.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the distance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ distance: 5 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the distance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 5 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-dropOnEmpty" class="api-item">
+-<h3>dropOnEmpty<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>If <code>false</code>, items from this sortable can't be dropped on an empty connect sortable (see the <a href="#option-connectWith"><code>connectWith</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the dropOnEmpty option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ dropOnEmpty: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the dropOnEmpty option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dropOnEmpty = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dropOnEmpty"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dropOnEmpty"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-forceHelperSize" class="api-item">
+-<h3>forceHelperSize<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If <code>true</code>, forces the helper to have a size.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the forceHelperSize option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ forceHelperSize: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the forceHelperSize option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">forceHelperSize = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"forceHelperSize"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"forceHelperSize"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-forcePlaceholderSize" class="api-item">
+-<h3>forcePlaceholderSize<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If true, forces the placeholder to have a size.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the forcePlaceholderSize option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ forcePlaceholderSize: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the forcePlaceholderSize option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">forcePlaceholderSize = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"forcePlaceholderSize"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"forcePlaceholderSize"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-grid" class="api-item">
+-<h3>grid<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Snaps the sorting element or helper to a grid, every x and y pixels. Array values: <code>[ x, y ]</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the grid option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ grid: [ 20, 10 ] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the grid option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">grid = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code><code class="plain">, [ 20, 10 ] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-handle" class="api-item">
+-<h3>handle<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Restricts sort start click to the specified element.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the handle option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ handle: </code><code class="string">".handle"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the handle option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">handle = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handle"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handle"</code><code class="plain">, </code><code class="string">".handle"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-helper" class="api-item">
+-<h3>helper<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"original"</code>
+-</div>
+-<div>Allows for a helper element to be used for dragging display.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>String</strong>: If set to <code>"clone"</code>, then the element will be cloned and the clone will be dragged.</li>
+-<li>
+-<strong>Function</strong>: A function that will return a DOMElement to use while dragging. The function receives the event and the element being sorted.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the sortable with the helper option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ helper: </code><code class="string">"clone"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the helper option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">helper = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code><code class="plain">, </code><code class="string">"clone"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-items" class="api-item">
+-<h3>items<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"&gt; *"</code>
+-</div>
+-<div>Specifies which items inside the element should be sortable.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the items option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ items: </code><code class="string">"&gt; li"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the items option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">items = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"items"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"items"</code><code class="plain">, </code><code class="string">"&gt; li"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-opacity" class="api-item">
+-<h3>opacity<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Defines the opacity of the helper while sorting. From <code>0.01</code> to <code>1</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the opacity option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ opacity: 0.5 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the opacity option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">opacity = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"opacity"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"opacity"</code><code class="plain">, 0.5 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-placeholder" class="api-item">
+-<h3>placeholder<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>A class name that gets applied to the otherwise white space.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the placeholder option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ placeholder: </code><code class="string">"sortable-placeholder"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the placeholder option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">placeholder = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"placeholder"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"placeholder"</code><code class="plain">, </code><code class="string">"sortable-placeholder"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-revert" class="api-item">
+-<h3>revert<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the sortable items should revert to their new positions using a smooth animation.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: When set to <code>true</code>, the items will animate with the default duration.</li>
+-<li>
+-<strong>Number</strong>: The duration for the animation, in milliseconds.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the sortable with the revert option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ revert: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the revert option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">revert = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revert"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revert"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-scroll" class="api-item">
+-<h3>scroll<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>If set to true, the page scrolls when coming to an edge.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the scroll option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ scroll: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the scroll option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scroll = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scroll"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scroll"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-scrollSensitivity" class="api-item">
+-<h3>scrollSensitivity<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>20</code>
+-</div>
+-<div>Defines how near the mouse must be to an edge to start scrolling.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the scrollSensitivity option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ scrollSensitivity: 10 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the scrollSensitivity option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scrollSensitivity = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSensitivity"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSensitivity"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-scrollSpeed" class="api-item">
+-<h3>scrollSpeed<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>20</code>
+-</div>
+-<div>The speed at which the window should scroll once the mouse pointer gets within the <a href="#option-scrollSensitivity"><code>scrollSensitivity</code></a> distance.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the scrollSpeed option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ scrollSpeed: 40 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the scrollSpeed option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scrollSpeed = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSpeed"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSpeed"</code><code class="plain">, 40 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-tolerance" class="api-item">
+-<h3>tolerance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"intersect"</code>
+-</div>
+-<div>
+-				Specifies which mode to use for testing whether the item being moved is hovering over another item. Possible values:
+-				<ul>
+-					<li>
+-<code>"intersect"</code>: The item overlaps the other item by at least 50%.</li>
+-					<li>
+-<code>"pointer"</code>: The mouse pointer overlaps the other item.</li>
+-				</ul>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the tolerance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ tolerance: </code><code class="string">"pointer"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the tolerance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">tolerance = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code><code class="plain">, </code><code class="string">"pointer"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-zIndex" class="api-item">
+-<h3>zIndex<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1000</code>
+-</div>
+-<div>Z-index for element/helper while being sorted.</div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the zIndex option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({ zIndex: 9999 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the zIndex option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">zIndex = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"zIndex"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"zIndex"</code><code class="plain">, 9999 );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-cancel"><div class="api-item first-item">
+-<h3>cancel()</h3>
+-<div>Cancels a change in the current sortable and reverts it to the state prior to when the current sort was started. Useful in the stop and receive callback functions.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the cancel method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"cancel"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-destroy"><div class="api-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the sortable functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the sortable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the sortable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current sortable options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the sortable option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the sortable.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-refresh"><div class="api-item">
+-<h3>refresh()</h3>
+-<div>Refresh the sortable items. Triggers the reloading of all sortable items, causing new items to be recognized.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the refresh method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-refreshPositions"><div class="api-item">
+-<h3>refreshPositions()</h3>
+-<div>Refresh the cached positions of the sortable items. Calling this method refreshes the cached item positions of all sortables.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the refreshPositions method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"refreshPositions"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-serialize"><div class="api-item">
+-<h3>serialize( options )<span class="returns">Returns: <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div>
+-				<p>Serializes the sortable's item <code>id</code>s into a form/ajax submittable string. Calling this method produces a hash that can be appended to any url to easily submit a new item order back to the server.</p>
+-
+-				<p>It works by default by looking at the <code>id</code> of each item in the format <code>"setname_number"</code>, and it spits out a hash like <code>"setname[]=number&amp;setname[]=number"</code>.</p>
+-
+-				<p><em>Note: If serialize returns an empty string, make sure the <code>id</code> attributes include an underscore.  They must be in the form: <code>"set_number"</code> For example, a 3 element list with <code>id</code> attributes <code>"foo_1"</code>, <code>"foo_5"</code>, <code>"foo_2"</code> will serialize to <code>"foo[]=1&amp;foo[]=5&amp;foo[]=2"</code>. You can use an underscore, equal sign or hyphen to separate the set and number. For example <code>"foo=1"</code>, <code>"foo-1"</code>, and <code>"foo_1"</code> all serialize to <code>"foo[]=1"</code>.</em></p>
+-			</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Options to customize the serialization.</div>
+-<ul>
+-<li>
+-<div>
+-<strong>key</strong> (default: <code>the part of the attribute in front of the separator</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>Replaces <code>part1[]</code> with the specified value.</div>
+-</li>
+-<li>
+-<div>
+-<strong>attribute</strong> (default: <code>"id"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the attribute to use for the values.</div>
+-</li>
+-<li>
+-<div>
+-<strong>expression</strong> (default: <code>/(.+)[-=_](.+)/</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#RegExp">RegExp</a>
+-</div>
+-<div>A regular expression used to split the attribute value into key and value parts.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the serialize method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">sorted = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"serialize"</code><code class="plain">, { key: </code><code class="string">"sort"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-toArray"><div class="api-item">
+-<h3>toArray()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div>Serializes the sortable's item id's into an array of string.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the toArray method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">sortedIDs = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"toArray"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the sortable element.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).sortable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-activate" class="api-item first-item">
+-<h3>activate( event, ui )<span class="returns">Type: <code>sortactivate</code></span>
+-</h3>
+-<div>This event is triggered when using connected lists, every connected list on drag start receives it.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the activate callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">activate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortactivate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-beforeStop" class="api-item">
+-<h3>beforeStop( event, ui )<span class="returns">Type: <code>sortbeforestop</code></span>
+-</h3>
+-<div>This event is triggered when sorting stops, but when the placeholder/helper is still available.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the beforeStop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeStop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortbeforestop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortbeforestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-change" class="api-item">
+-<h3>change( event, ui )<span class="returns">Type: <code>sortchange</code></span>
+-</h3>
+-<div>This event is triggered during sorting, but only when the DOM position has changed.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the change callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortchange event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortchange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>sortcreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the sortable is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortcreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-deactivate" class="api-item">
+-<h3>deactivate( event, ui )<span class="returns">Type: <code>sortdeactivate</code></span>
+-</h3>
+-<div>This event is triggered when sorting was stopped, is propagated to all possible connected lists.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the deactivate callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">deactivate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortdeactivate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortdeactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-out" class="api-item">
+-<h3>out( event, ui )<span class="returns">Type: <code>sortout</code></span>
+-</h3>
+-<div>This event is triggered when a sortable item is moved away from a connected list.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the out callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">out: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortout event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortout"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-over" class="api-item">
+-<h3>over( event, ui )<span class="returns">Type: <code>sortover</code></span>
+-</h3>
+-<div>This event is triggered when a sortable item is moved into a connected list.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the over callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">over: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortover event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortover"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-receive" class="api-item">
+-<h3>receive( event, ui )<span class="returns">Type: <code>sortreceive</code></span>
+-</h3>
+-<div>This event is triggered when a connected sortable list has received an item from another list.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the receive callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">receive: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortreceive event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortreceive"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-remove" class="api-item">
+-<h3>remove( event, ui )<span class="returns">Type: <code>sortremove</code></span>
+-</h3>
+-<div>This event is triggered when a sortable item has been dragged out from the list and into another.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the remove callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">remove: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortremove event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortremove"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-sort" class="api-item">
+-<h3>sort( event, ui )<span class="returns">Type: <code>sort</code></span>
+-</h3>
+-<div>This event is triggered during sorting.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the sort callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">sort: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sort event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sort"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-start" class="api-item">
+-<h3>start( event, ui )<span class="returns">Type: <code>sortstart</code></span>
+-</h3>
+-<div>This event is triggered when sorting starts.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the start callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortstart event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortstart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-stop" class="api-item">
+-<h3>stop( event, ui )<span class="returns">Type: <code>sortstop</code></span>
+-</h3>
+-<div>This event is triggered when sorting has stopped.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the stop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortstop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortstop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-update" class="api-item">
+-<h3>update( event, ui )<span class="returns">Type: <code>sortupdate</code></span>
+-</h3>
+-<div>This event is triggered when the user stopped sorting and the DOM position has changed.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper being sorted</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the current dragged element</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current absolute position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current position of the helper represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>originalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The original position of the element represented as <code>{ top, left }</code>
+-</div>
+-</li>
+-<li>
+-<div><strong>sender</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The sortable that the item comes from if moving from one sortable to another</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the sortable with the update callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).sortable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">update: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the sortupdate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"sortupdate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Sortable.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;sortable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">ul</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"sortable"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 1&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 2&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 3&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 4&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 5&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;$("#sortable").sortable();&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="150"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/datepicker.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/datepicker.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/datepicker.html	(revision 15488)
+@@ -1,946 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI datepicker documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Datepicker Widget",
+-		"excerpt":
+-			"Select a date from a popup or inline calendar",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="datepicker1" class="entry widget"><h2 class="section-title">
+-<span>Datepicker Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Select a date from a popup or inline calendar</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-altField">altField</a></div>
+-<div><a href="#option-altFormat">altFormat</a></div>
+-<div><a href="#option-appendText">appendText</a></div>
+-<div><a href="#option-autoSize">autoSize</a></div>
+-<div><a href="#option-buttonImage">buttonImage</a></div>
+-<div><a href="#option-buttonImageOnly">buttonImageOnly</a></div>
+-<div><a href="#option-buttonText">buttonText</a></div>
+-<div><a href="#option-calculateWeek">calculateWeek</a></div>
+-<div><a href="#option-changeMonth">changeMonth</a></div>
+-<div><a href="#option-changeYear">changeYear</a></div>
+-<div><a href="#option-closeText">closeText</a></div>
+-<div><a href="#option-constrainInput">constrainInput</a></div>
+-<div><a href="#option-currentText">currentText</a></div>
+-<div><a href="#option-dateFormat">dateFormat</a></div>
+-<div><a href="#option-dayNames">dayNames</a></div>
+-<div><a href="#option-dayNamesMin">dayNamesMin</a></div>
+-<div><a href="#option-dayNamesShort">dayNamesShort</a></div>
+-<div><a href="#option-defaultDate">defaultDate</a></div>
+-<div><a href="#option-duration">duration</a></div>
+-<div><a href="#option-firstDay">firstDay</a></div>
+-<div><a href="#option-gotoCurrent">gotoCurrent</a></div>
+-<div><a href="#option-hideIfNoPrevNext">hideIfNoPrevNext</a></div>
+-<div><a href="#option-isRTL">isRTL</a></div>
+-<div><a href="#option-maxDate">maxDate</a></div>
+-<div><a href="#option-minDate">minDate</a></div>
+-<div><a href="#option-monthNames">monthNames</a></div>
+-<div><a href="#option-monthNamesShort">monthNamesShort</a></div>
+-<div><a href="#option-navigationAsDateFormat">navigationAsDateFormat</a></div>
+-<div><a href="#option-nextText">nextText</a></div>
+-<div><a href="#option-numberOfMonths">numberOfMonths</a></div>
+-<div><a href="#option-prevText">prevText</a></div>
+-<div><a href="#option-selectOtherMonths">selectOtherMonths</a></div>
+-<div><a href="#option-shortYearCutoff">shortYearCutoff</a></div>
+-<div><a href="#option-showAnim">showAnim</a></div>
+-<div><a href="#option-showButtonPanel">showButtonPanel</a></div>
+-<div><a href="#option-showCurrentAtPos">showCurrentAtPos</a></div>
+-<div><a href="#option-showMonthAfterYear">showMonthAfterYear</a></div>
+-<div><a href="#option-showOn">showOn</a></div>
+-<div><a href="#option-showOptions">showOptions</a></div>
+-<div><a href="#option-showOtherMonths">showOtherMonths</a></div>
+-<div><a href="#option-showWeek">showWeek</a></div>
+-<div><a href="#option-stepMonths">stepMonths</a></div>
+-<div><a href="#option-weekHeader">weekHeader</a></div>
+-<div><a href="#option-yearRange">yearRange</a></div>
+-<div><a href="#option-yearSuffix">yearSuffix</a></div>
+-<div><a href="#option-beforeShow">beforeShow</a></div>
+-<div><a href="#option-beforeShowDay">beforeShowDay</a></div>
+-<div><a href="#option-onChangeMonthYear">onChangeMonthYear</a></div>
+-<div><a href="#option-onClose">onClose</a></div>
+-<div><a href="#option-onSelect">onSelect</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-dialog">dialog</a></div>
+-<div><a href="#method-isDisabled">isDisabled</a></div>
+-<div><a href="#method-hide">hide</a></div>
+-<div><a href="#method-show">show</a></div>
+-<div><a href="#method-refresh">refresh</a></div>
+-<div><a href="#method-getDate">getDate</a></div>
+-<div><a href="#method-setDate">setDate</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section"><h3>Events</h3></div></section><div class="longdesc" id="entry-longdesc">
+-		<p>The jQuery UI Datepicker is a highly configurable plugin that adds datepicker functionality to your pages. You can customize the date format and language, restrict the selectable date ranges and add in buttons and other navigation options easily.</p>
+-
+-		<p>By default, the datepicker calendar opens in a small overlay when the associated text field gains focus. For an inline calendar, simply attach the datepicker to a div or span.</p>
+-
+-		<h3>Keyboard interaction</h3>
+-		<p>While the datepicker is open, the following key commands are available:</p>
+-		<ul>
+-			<li>PAGE UP: Move to the previous month.</li>
+-			<li>PAGE DOWN: Move to the next month.</li>
+-			<li>CTRL+PAGE UP: Move to the previous year.</li>
+-			<li>CTRL+PAGE DOWN: Move to the next year.</li>
+-			<li>CTRL+HOME: Move to the current month. Open the datepicker if closed.</li>
+-			<li>CTRL+LEFT: Move to the previous day.</li>
+-			<li>CTRL+RIGHT: Move to the next day.</li>
+-			<li>CTRL+UP: Move to the previous week.</li>
+-			<li>CTRL+DOWN: Move the next week.</li>
+-			<li>ENTER: Select the focused date.</li>
+-			<li>CTRL+END: Close the datepicker and erase the date.</li>
+-			<li>ESCAPE: Close the datepicker without selection.</li>
+-		</ul>
+-
+-		<h3 id="utility-functions">Utility functions</h3>
+-		<ul>
+-			<li>$.datepicker.setDefaults( settings ) - Set settings for all datepicker instances.</li>
+-			<li>$.datepicker.formatDate( format, date, settings ) - Format a date into a string value with a specified format.</li>
+-			<li>$.datepicker.parseDate( format, value, settings )  - Extract a date from a string value with a specified format.</li>
+-			<li>$.datepicker.iso8601Week( date ) - Determine the week of the year for a given date: 1 to 53.</li>
+-			<li>$.datepicker.noWeekends - Set as beforeShowDay function to prevent selection of weekends.</li>
+-		</ul>
+-
+-		<h3>Localization</h3>
+-		<p>Datepicker provides support for localizing its content to cater for different languages and date formats. Each localization is contained within its own file with the language code appended to the name, e.g., <code>jquery.ui.datepicker-fr.js</code> for French. The desired localization file should be included after the main datepicker code. Each localization file adds its settings to the set of available localizations and automatically applies them as defaults for all instances.</p>
+-		<p>The <code>$.datepicker.regional</code> attribute holds an array of localizations, indexed by language code, with <code>""</code> referring to the default (English). Each entry is an object with the following attributes: <code>closeText</code>, <code>prevText</code>, <code>nextText</code>, <code>currentText</code>, <code>monthNames</code>, <code>monthNamesShort</code>, <code>dayNames</code>, <code>dayNamesShort</code>, <code>dayNamesMin</code>, <code>weekHeader</code>, <code>dateFormat</code>, <code>firstDay</code>, <code>isRTL</code>, <code>showMonthAfterYear</code>, and <code>yearSuffix</code>.</p>
+-		<p>You can restore the default localizations with:</p>
+-		<code>$.datepicker.setDefaults( $.datepicker.regional[ "" ] );</code>
+-		<p>And can then override an individual datepicker for a specific locale:</p>
+-		<code>$( selector ).datepicker( $.datepicker.regional[ "fr" ] );</code>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-altField" class="api-item first-item">
+-<h3>altField<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Element">Element</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>""</code>
+-</div>
+-<div>An input element that is to be updated with the selected date from the datepicker. Use the <a href="#option-altFormat"><code>altFormat</code></a> option to change the format of the date within this field. Leave as blank for no alternate field.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the altField option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ altField: </code><code class="string">"#actualDate"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the altField option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">altField = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"altField"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"altField"</code><code class="plain">, </code><code class="string">"#actualDate"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-altFormat" class="api-item">
+-<h3>altFormat<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>""</code>
+-</div>
+-<div>The <a href="#option-dateFormat"><code>dateFormat</code></a> to be used for the <a href="#option-altField"><code>altField</code></a> option. This allows one date format to be shown to the user for selection purposes, while a different format is actually sent behind the scenes. For a full list of the possible formats see the [[UI/Datepicker/formatDate|formatDate]] function</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the altFormat option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ altFormat: </code><code class="string">"yy-mm-dd"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the altFormat option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">altFormat = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"altFormat"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"altFormat"</code><code class="plain">, </code><code class="string">"yy-mm-dd"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-appendText" class="api-item">
+-<h3>appendText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>""</code>
+-</div>
+-<div>The text to display after each date field, e.g., to show the required format.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the appendText option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ appendText: </code><code class="string">"(yyyy-mm-dd)"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the appendText option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendText"</code><code class="plain">, </code><code class="string">"(yyyy-mm-dd)"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-autoSize" class="api-item">
+-<h3>autoSize<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Set to <code>true</code> to automatically resize the input field to accommodate dates in the current <a href="#option-dateFormat"><code>dateFormat</code></a>.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the autoSize option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ autoSize: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the autoSize option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoSize = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoSize"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoSize"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-beforeShow" class="api-item">
+-<h3>beforeShow<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#Element">Element</a> input, <a href="http://api.jquery.com/Types#Object">Object</a> inst )</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>A function that takes an input field and current datepicker instance and returns an options object to update the datepicker with. It is called just before the datepicker is displayed.</div>
+-</div>
+-<div id="option-beforeShowDay" class="api-item">
+-<h3>beforeShowDay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#Date">Date</a> date )</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>A function takes a date as a parameter and must return an array with <code>[0]</code> equal to <code>true</code>/<code>false</code> indicating whether or not this date is selectable, <code>[1]</code> equal to a CSS class name or <code>""</code> for the default presentation, and <code>[2]</code> an optional popup tooltip for this date. It is called for each day in the datepicker before it is displayed.</div>
+-</div>
+-<div id="option-buttonImage" class="api-item">
+-<h3>buttonImage<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>""</code>
+-</div>
+-<div>The URL for the popup button image. If set, the <a href="#option-buttonText"><code>buttonText</code></a> option becomes the <code>alt</code> value and is not directly displayed.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the buttonImage option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ buttonImage: </code><code class="string">"/images/datepicker.gif"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the buttonImage option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">buttonImage = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonImage"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonImage"</code><code class="plain">, </code><code class="string">"/images/datepicker.gif"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-buttonImageOnly" class="api-item">
+-<h3>buttonImageOnly<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the button image should be rendered by itself instead of inside a button element.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the buttonImageOnly option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ buttonImageOnly: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the buttonImageOnly option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">buttonImageOnly = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonImageOnly"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonImageOnly"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-buttonText" class="api-item">
+-<h3>buttonText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"..."</code>
+-</div>
+-<div>The text to display on the trigger button. Use in conjunction with the <a href="#option-showOn"><code>showOn</code></a> option set to <code>"button"</code> or <code>"both"</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the buttonText option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ buttonText: </code><code class="string">"Choose"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the buttonText option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">buttonText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttonText"</code><code class="plain">, </code><code class="string">"Choose"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-calculateWeek" class="api-item">
+-<h3>calculateWeek<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>jQuery.datepicker.iso8601Week</code>
+-</div>
+-<div>A function to calculate the week of the year for a given date. The default implementation uses the ISO 8601 definition: weeks start on a Monday; the first week of the year contains the first Thursday of the year.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the calculateWeek option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ calculateWeek: myWeekCalc });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the calculateWeek option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">calculateWeek = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"calculateWeek"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"calculateWeek"</code><code class="plain">, myWeekCalc );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-changeMonth" class="api-item">
+-<h3>changeMonth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the month should be rendered as a dropdown instead of text.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the changeMonth option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ changeMonth: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the changeMonth option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">changeMonth = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"changeMonth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"changeMonth"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-changeYear" class="api-item">
+-<h3>changeYear<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the year should be rendered as a dropdown instead of text. Use the <a href="#option-yearRange"><code>yearRange</code></a> option to control which years are made available for selection.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the changeYear option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ changeYear: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the changeYear option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">changeYear = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"changeYear"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"changeYear"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-closeText" class="api-item">
+-<h3>closeText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"Done"</code>
+-</div>
+-<div>The text to display for the close link. Use the <a href="#option-showButtonPanel"><code>showButtonPanel</code></a> option to display this button.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the closeText option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ closeText: </code><code class="string">"Close"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the closeText option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">closeText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeText"</code><code class="plain">, </code><code class="string">"Close"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-constrainInput" class="api-item">
+-<h3>constrainInput<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>When <code>true</code>, entry in the input field is constrained to those characters allowed by the current <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the constrainInput option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ constrainInput: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the constrainInput option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">constrainInput = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"constrainInput"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"constrainInput"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-currentText" class="api-item">
+-<h3>currentText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"Today"</code>
+-</div>
+-<div>The text to display for the current day link. Use the <a href="#option-showButtonPanel"><code>showButtonPanel</code></a> option to display this button.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the currentText option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ currentText: </code><code class="string">"Now"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the currentText option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">currentText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"currentText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"currentText"</code><code class="plain">, </code><code class="string">"Now"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-dateFormat" class="api-item">
+-<h3>dateFormat<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"mm/dd/yy"</code>
+-</div>
+-<div>The format for parsed and displayed dates. For a full list of the possible formats see the <code>[[UI/Datepicker/formatDate|formatDate]]</code> function.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the dateFormat option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ dateFormat: </code><code class="string">"yy-mm-dd"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the dateFormat option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dateFormat = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dateFormat"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dateFormat"</code><code class="plain">, </code><code class="string">"yy-mm-dd"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-dayNames" class="api-item">
+-<h3>dayNames<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>[ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]</code>
+-</div>
+-<div>The list of long day names, starting from Sunday, for use as requested via the <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the dayNames option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ dayNames: [ </code><code class="string">"Dimanche"</code><code class="plain">, </code><code class="string">"Lundi"</code><code class="plain">, </code><code class="string">"Mardi"</code><code class="plain">, </code><code class="string">"Mercredi"</code><code class="plain">, </code><code class="string">"Jeudi"</code><code class="plain">, </code><code class="string">"Vendredi"</code><code class="plain">, </code><code class="string">"Samedi"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the dayNames option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dayNames = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNames"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNames"</code><code class="plain">, [ </code><code class="string">"Dimanche"</code><code class="plain">, </code><code class="string">"Lundi"</code><code class="plain">, </code><code class="string">"Mardi"</code><code class="plain">, </code><code class="string">"Mercredi"</code><code class="plain">, </code><code class="string">"Jeudi"</code><code class="plain">, </code><code class="string">"Vendredi"</code><code class="plain">, </code><code class="string">"Samedi"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-dayNamesMin" class="api-item">
+-<h3>dayNamesMin<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>[ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ]</code>
+-</div>
+-<div>The list of minimised day names, starting from Sunday, for use as column headers within the datepicker.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the dayNamesMin option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ dayNamesMin: [ </code><code class="string">"Di"</code><code class="plain">, </code><code class="string">"Lu"</code><code class="plain">, </code><code class="string">"Ma"</code><code class="plain">, </code><code class="string">"Me"</code><code class="plain">, </code><code class="string">"Je"</code><code class="plain">, </code><code class="string">"Ve"</code><code class="plain">, </code><code class="string">"Sa"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the dayNamesMin option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dayNamesMin = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNamesMin"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNamesMin"</code><code class="plain">, [ </code><code class="string">"Di"</code><code class="plain">, </code><code class="string">"Lu"</code><code class="plain">, </code><code class="string">"Ma"</code><code class="plain">, </code><code class="string">"Me"</code><code class="plain">, </code><code class="string">"Je"</code><code class="plain">, </code><code class="string">"Ve"</code><code class="plain">, </code><code class="string">"Sa"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-dayNamesShort" class="api-item">
+-<h3>dayNamesShort<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>[ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ]</code>
+-</div>
+-<div>The list of abbreviated day names, starting from Sunday, for use as requested via the <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the dayNamesShort option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ dayNamesShort: [ </code><code class="string">"Dim"</code><code class="plain">, </code><code class="string">"Lun"</code><code class="plain">, </code><code class="string">"Mar"</code><code class="plain">, </code><code class="string">"Mer"</code><code class="plain">, </code><code class="string">"Jeu"</code><code class="plain">, </code><code class="string">"Ven"</code><code class="plain">, </code><code class="string">"Sam"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the dayNamesShort option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dayNamesShort = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNamesShort"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dayNamesShort"</code><code class="plain">, [ </code><code class="string">"Dim"</code><code class="plain">, </code><code class="string">"Lun"</code><code class="plain">, </code><code class="string">"Mar"</code><code class="plain">, </code><code class="string">"Mer"</code><code class="plain">, </code><code class="string">"Jeu"</code><code class="plain">, </code><code class="string">"Ven"</code><code class="plain">, </code><code class="string">"Sam"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-defaultDate" class="api-item">
+-<h3>defaultDate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Date">Date</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Set the date to highlight on first opening if the field is blank. Specify either an actual date via a Date object or as a string in the current <code>[[UI/Datepicker#option-dateFormat|dateFormat]]</code>, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +7d'), or null for today.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Date</strong>: A date object containing the default date.</li>
+-<li>
+-<strong>Number</strong>: A number of days from today. For example <code>2</code> represents two days from today and <code>-1</code> represents yesterday.</li>
+-<li>
+-<strong>String</strong>: A string in the format defined by the <a href="#option-dateFormat"><code>dateFormat</code></a> option, or a relative date. Relative dates must contain value and period pairs; valid periods are <code>"y"</code> for years, <code>"m"</code> for months, <code>"w"</code> for weeks, and <code>"d"</code> for days. For example, <code>"+1m +7d"</code> represents one month and seven days from today.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the defaultDate option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ defaultDate: +7 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the defaultDate option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">defaultDate = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"defaultDate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"defaultDate"</code><code class="plain">, +7 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-duration" class="api-item">
+-<h3>duration<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#"></a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"normal"</code>
+-</div>
+-<div>Control the speed at which the datepicker appears, it may be a time in milliseconds or a string representing one of the three predefined speeds ("slow", "normal", "fast").</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the duration option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ duration: </code><code class="string">"slow"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the duration option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">duration = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"duration"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"duration"</code><code class="plain">, </code><code class="string">"slow"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-firstDay" class="api-item">
+-<h3>firstDay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>Set the first day of the week: Sunday is <code>0</code>, Monday is <code>1</code>, etc.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the firstDay option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ firstDay: 1 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the firstDay option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">firstDay = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"firstDay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"firstDay"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-gotoCurrent" class="api-item">
+-<h3>gotoCurrent<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>When <code>true</code>, the current day link moves to the currently selected date instead of today.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the gotoCurrent option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ gotoCurrent: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the gotoCurrent option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">gotoCurrent = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"gotoCurrent"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"gotoCurrent"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-hideIfNoPrevNext" class="api-item">
+-<h3>hideIfNoPrevNext<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Normally the previous and next links are disabled when not applicable (see the <a href="#option-minDate"><code>minDate</code></a> and <a href="#option-maxDate"><code>maxDate</code></a> options). You can hide them altogether by setting this attribute to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the hideIfNoPrevNext option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ hideIfNoPrevNext: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the hideIfNoPrevNext option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hideIfNoPrevNext = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hideIfNoPrevNext"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hideIfNoPrevNext"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-isRTL" class="api-item">
+-<h3>isRTL<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the current language is drawn from right to left.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the isRTL option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ isRTL: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the isRTL option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">isRTL = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"isRTL"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"isRTL"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-maxDate" class="api-item">
+-<h3>maxDate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Date">Date</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>The maximum selectable date. When set to <code>null</code>, there is no maximum.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Date</strong>: A date object containing the maximum date.</li>
+-<li>
+-<strong>Number</strong>: A number of days from today. For example <code>2</code> represents two days from today and <code>-1</code> represents yesterday.</li>
+-<li>
+-<strong>String</strong>: A string in the format defined by the <a href="#option-dateFormat"><code>dateFormat</code></a> option, or a relative date. Relative dates must contain value and period pairs; valid periods are <code>"y"</code> for years, <code>"m"</code> for months, <code>"w"</code> for weeks, and <code>"d"</code> for days. For example, <code>"+1m +7d"</code> represents one month and seven days from today.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the maxDate option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ maxDate: </code><code class="string">"+1m +1w"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the maxDate option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxDate = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxDate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxDate"</code><code class="plain">, </code><code class="string">"+1m +1w"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-minDate" class="api-item">
+-<h3>minDate<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Date">Date</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>The minimum selectable date. When set to <code>null</code>, there is no minimum.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Date</strong>: A date object containing the minimum date.</li>
+-<li>
+-<strong>Number</strong>: A number of days from today. For example <code>2</code> represents two days from today and <code>-1</code> represents yesterday.</li>
+-<li>
+-<strong>String</strong>: A string in the format defined by the <a href="#option-dateFormat"><code>dateFormat</code></a> option, or a relative date. Relative dates must contain value and period pairs; valid periods are <code>"y"</code> for years, <code>"m"</code> for months, <code>"w"</code> for weeks, and <code>"d"</code> for days. For example, <code>"+1m +7d"</code> represents one month and seven days from today.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the minDate option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ minDate: </code><code class="keyword">new</code> <code class="plain">Date(2007, 1 - 1, 1) });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the minDate option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minDate = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minDate"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minDate"</code><code class="plain">, </code><code class="keyword">new</code> <code class="plain">Date(2007, 1 - 1, 1) );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-monthNames" class="api-item">
+-<h3>monthNames<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>[ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]</code>
+-</div>
+-<div>The list of full month names, for use as requested via the <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the monthNames option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ monthNames: [ </code><code class="string">"Januar"</code><code class="plain">, </code><code class="string">"Februar"</code><code class="plain">, </code><code class="string">"Marts"</code><code class="plain">, </code><code class="string">"April"</code><code class="plain">, </code><code class="string">"Maj"</code><code class="plain">, </code><code class="string">"Juni"</code><code class="plain">, </code><code class="string">"Juli"</code><code class="plain">, </code><code class="string">"August"</code><code class="plain">, </code><code class="string">"September"</code><code class="plain">, </code><code class="string">"Oktober"</code><code class="plain">, </code><code class="string">"November"</code><code class="plain">, </code><code class="string">"December"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the monthNames option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">monthNames = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"monthNames"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"monthNames"</code><code class="plain">, [ </code><code class="string">"Januar"</code><code class="plain">, </code><code class="string">"Februar"</code><code class="plain">, </code><code class="string">"Marts"</code><code class="plain">, </code><code class="string">"April"</code><code class="plain">, </code><code class="string">"Maj"</code><code class="plain">, </code><code class="string">"Juni"</code><code class="plain">, </code><code class="string">"Juli"</code><code class="plain">, </code><code class="string">"August"</code><code class="plain">, </code><code class="string">"September"</code><code class="plain">, </code><code class="string">"Oktober"</code><code class="plain">, </code><code class="string">"November"</code><code class="plain">, </code><code class="string">"December"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-monthNamesShort" class="api-item">
+-<h3>monthNamesShort<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>[ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]</code>
+-</div>
+-<div>The list of abbreviated month names, as used in the month header on each datepicker and as requested via the <a href="#option-dateFormat"><code>dateFormat</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the monthNamesShort option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ monthNamesShort: [ </code><code class="string">"Jan"</code><code class="plain">, </code><code class="string">"Feb"</code><code class="plain">, </code><code class="string">"Mar"</code><code class="plain">, </code><code class="string">"Apr"</code><code class="plain">, </code><code class="string">"Maj"</code><code class="plain">, </code><code class="string">"Jun"</code><code class="plain">, </code><code class="string">"Jul"</code><code class="plain">, </code><code class="string">"Aug"</code><code class="plain">, </code><code class="string">"Sep"</code><code class="plain">, </code><code class="string">"Okt"</code><code class="plain">, </code><code class="string">"Nov"</code><code class="plain">, </code><code class="string">"Dec"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the monthNamesShort option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">monthNamesShort = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"monthNamesShort"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"monthNamesShort"</code><code class="plain">, [ </code><code class="string">"Jan"</code><code class="plain">, </code><code class="string">"Feb"</code><code class="plain">, </code><code class="string">"Mar"</code><code class="plain">, </code><code class="string">"Apr"</code><code class="plain">, </code><code class="string">"Maj"</code><code class="plain">, </code><code class="string">"Jun"</code><code class="plain">, </code><code class="string">"Jul"</code><code class="plain">, </code><code class="string">"Aug"</code><code class="plain">, </code><code class="string">"Sep"</code><code class="plain">, </code><code class="string">"Okt"</code><code class="plain">, </code><code class="string">"Nov"</code><code class="plain">, </code><code class="string">"Dec"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-navigationAsDateFormat" class="api-item">
+-<h3>navigationAsDateFormat<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the <a href="#option-prevText"><code>prevText</code></a> and <a href="#option-nextText"><code>nextText</code></a> options should be parsed as dates by the <code>[[UI/Datepicker/formatDate|formatDate]]</code> function, allowing them to display the target month names for example.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the navigationAsDateFormat option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ navigationAsDateFormat: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the navigationAsDateFormat option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">navigationAsDateFormat = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"navigationAsDateFormat"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"navigationAsDateFormat"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-nextText" class="api-item">
+-<h3>nextText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"Next"</code>
+-</div>
+-<div>The text to display for the next month link. With the standard ThemeRoller styling, this value is replaced by an icon.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the nextText option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ nextText: </code><code class="string">"Later"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the nextText option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">nextText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"nextText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"nextText"</code><code class="plain">, </code><code class="string">"Later"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-numberOfMonths" class="api-item">
+-<h3>numberOfMonths<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>The number of months to show at once.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: The number of months to display in a single row.</li>
+-<li>
+-<strong>Array</strong>: An array defining the number of rows and columns to display.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the numberOfMonths option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ numberOfMonths: [ 2, 3 ] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the numberOfMonths option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">numberOfMonths = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"numberOfMonths"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"numberOfMonths"</code><code class="plain">, [ 2, 3 ] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-onChangeMonthYear" class="api-item">
+-<h3>onChangeMonthYear<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#Integer">Integer</a> year, <a href="http://api.jquery.com/Types#Integer">Integer</a> month, <a href="http://api.jquery.com/Types#Object">Object</a> inst )</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Called when the datepicker moves to a new month and/or year. The function receives the selected year, month (1-12), and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</div>
+-</div>
+-<div id="option-onClose" class="api-item">
+-<h3>onClose<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#String">String</a> dateText, <a href="http://api.jquery.com/Types#Object">Object</a> inst )</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Called when the datepicker is closed, whether or not a date is selected. The function receives the selected date as text (<code>""</code> if none) and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</div>
+-</div>
+-<div id="option-onSelect" class="api-item">
+-<h3>onSelect<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#String">String</a> dateText, <a href="http://api.jquery.com/Types#Object">Object</a> inst )</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Called when the datepicker is selected. The function receives the selected date as text and the datepicker instance as parameters. <code>this</code> refers to the associated input field.</div>
+-</div>
+-<div id="option-prevText" class="api-item">
+-<h3>prevText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"Prev"</code>
+-</div>
+-<div>The text to display for the previous month link. With the standard ThemeRoller styling, this value is replaced by an icon.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the prevText option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ prevText: </code><code class="string">"Earlier"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the prevText option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">prevText = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"prevText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"prevText"</code><code class="plain">, </code><code class="string">"Earlier"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-selectOtherMonths" class="api-item">
+-<h3>selectOtherMonths<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether days in other months shown before or after the current month are selectable. This only applies if the <a href="#option-showOtherMonths"><code>showOtherMonths</code></a> option is set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the selectOtherMonths option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ selectOtherMonths: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the selectOtherMonths option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">selectOtherMonths = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"selectOtherMonths"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"selectOtherMonths"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-shortYearCutoff" class="api-item">
+-<h3>shortYearCutoff<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"+10"</code>
+-</div>
+-<div>The cutoff year for determining the century for a date (used in conjunction with <code>[[UI/Datepicker#option-dateFormat|dateFormat]]</code> 'y'). Any dates entered with a year value less than or equal to the cutoff year are considered to be in the current century, while those greater than it are deemed to be in the previous century.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: A value between <code>0</code> and <code>99</code> indicating the cutoff year.</li>
+-<li>
+-<strong>String</strong>: A relative number of years from the current year, e.g., <code>"+3"</code> or <code>"-5"</code>.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the shortYearCutoff option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ shortYearCutoff: 50 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the shortYearCutoff option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">shortYearCutoff = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"shortYearCutoff"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"shortYearCutoff"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-showAnim" class="api-item">
+-<h3>showAnim<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"show"</code>
+-</div>
+-<div>The name of the animation used to show and hide the datepicker. Use <code>"show"</code> (the default), <code>"slideDown"</code>, <code>"fadeIn"</code>, any of the <a href="/category/effects/">jQuery UI effects</a>. Set to an empty string to disable animation.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the showAnim option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showAnim: </code><code class="string">"fold"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the showAnim option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showAnim = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showAnim"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showAnim"</code><code class="plain">, </code><code class="string">"fold"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-showButtonPanel" class="api-item">
+-<h3>showButtonPanel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether to show the button panel.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the showButtonPanel option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showButtonPanel: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the showButtonPanel option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showButtonPanel = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showButtonPanel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showButtonPanel"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-showCurrentAtPos" class="api-item">
+-<h3>showCurrentAtPos<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>When displaying multiple months via the <a href="#option-numberOfMonths"><code>numberOfMonths</code></a> option, the <code>showCurrentAtPos</code> option defines which position to display the current month in.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the showCurrentAtPos option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showCurrentAtPos: 3 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the showCurrentAtPos option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showCurrentAtPos = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showCurrentAtPos"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showCurrentAtPos"</code><code class="plain">, 3 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-showMonthAfterYear" class="api-item">
+-<h3>showMonthAfterYear<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether to show the month after the year in the header.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the showMonthAfterYear option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showMonthAfterYear: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the showMonthAfterYear option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showMonthAfterYear = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showMonthAfterYear"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showMonthAfterYear"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-showOn" class="api-item">
+-<h3>showOn<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"focus"</code>
+-</div>
+-<div>When the datepicker should appear. The datepicker can appear when the field receives focus (<code>"focus"</code>), when a button is clicked (<code>"button"</code>), or when either event occurs (<code>"both"</code>).</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the showOn option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showOn: </code><code class="string">"both"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the showOn option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showOn = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOn"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOn"</code><code class="plain">, </code><code class="string">"both"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-showOptions" class="api-item">
+-<h3>showOptions<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{}</code>
+-</div>
+-<div>If using one of the jQuery UI effects for the <a href="#option-showAnim"><code>showAnim</code></a> option, you can provide additional settings for that animation via this option.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the showOptions option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showOptions: { direction: </code><code class="string">"up"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the showOptions option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showOptions = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOptions"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOptions"</code><code class="plain">, { direction: </code><code class="string">"up"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-showOtherMonths" class="api-item">
+-<h3>showOtherMonths<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether to display dates in other months (non-selectable) at the start or end of the current month. To make these days selectable use the <a href="#option-selectOtherMonths"><code>selectOtherMonths</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the showOtherMonths option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showOtherMonths: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the showOtherMonths option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showOtherMonths = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOtherMonths"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showOtherMonths"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-showWeek" class="api-item">
+-<h3>showWeek<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>When <code>true</code>, a column is added to show the week of the year. The <a href="#option-calculateWeek"><code>calculateWeek</code></a> option determines how the week of the year is calculated. You may also want to change the <a href="#option-firstDay"><code>firstDay</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the showWeek option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ showWeek: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the showWeek option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">showWeek = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showWeek"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"showWeek"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-stepMonths" class="api-item">
+-<h3>stepMonths<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>Set how many months to move when clicking the previous/next links.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the stepMonths option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ stepMonths: 3 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the stepMonths option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">stepMonths = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"stepMonths"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"stepMonths"</code><code class="plain">, 3 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-weekHeader" class="api-item">
+-<h3>weekHeader<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"Wk"</code>
+-</div>
+-<div>The text to display for the week of the year column heading. Use the <a href="#option-showWeek"><code>showWeek</code></a> option to display this column.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the weekHeader option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ weekHeader: </code><code class="string">"W"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the weekHeader option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">weekHeader = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"weekHeader"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"weekHeader"</code><code class="plain">, </code><code class="string">"W"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-yearRange" class="api-item">
+-<h3>yearRange<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"c-10:c+10"</code>
+-</div>
+-<div>The range of years displayed in the year drop-down: either relative to today's year (<code>"-nn:+nn"</code>), relative to the currently selected year (<code>"c-nn:c+nn"</code>), absolute (<code>"nnnn:nnnn"</code>), or combinations of these formats (<code>"nnnn:-nn"</code>). Note that this option only affects what appears in the drop-down, to restrict which dates may be selected use the <a href="#option-minDate"><code>minDate</code></a> and/or <a href="#option-maxDate"><code>maxDate</code></a> options.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the yearRange option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ yearRange: </code><code class="string">"2002:2012"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the yearRange option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">yearRange = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"yearRange"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"yearRange"</code><code class="plain">, </code><code class="string">"2002:2012"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-yearSuffix" class="api-item">
+-<h3>yearSuffix<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>""</code>
+-</div>
+-<div>Additional text to display after the year in the month headers.</div>
+-<strong>Code examples:</strong><p>Initialize the datepicker with the yearSuffix option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker({ yearSuffix: </code><code class="string">"CE"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the yearSuffix option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">yearSuffix = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"yearSuffix"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"yearSuffix"</code><code class="plain">, </code><code class="string">"CE"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the datepicker functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-dialog"><div class="api-item">
+-<h3>dialog( date [, onSelect ] [, settings ] [, pos ] )</h3>
+-<div>Opens the datepicker in a dialog box.</div>
+-<ul>
+-<li>
+-<div><strong>date</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Date">Date</a>
+-</div>
+-<div>The initial date.</div>
+-</li>
+-<li>
+-<div><strong>onSelect</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types/#Function">Function</a>()</div>
+-<div>A callback function when a date is selected. The function receives the date text and date picker instance as parameters.</div>
+-</li>
+-<li>
+-<div><strong>settings</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Options">Options</a>
+-</div>
+-<div>The new settings for the date picker.</div>
+-</li>
+-<li>
+-<div><strong>pos</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number%5B2%5D%20or%20MouseEvent">Number[2] or MouseEvent</a>
+-</div>
+-<div>The position of the top/left of the dialog as <code>[x, y]</code> or a <code>MouseEvent</code> that contains the coordinates. If not specified the dialog is centered on the screen.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the dialog method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"dialog"</code><code class="plain">, </code><code class="string">"10/12/2012"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-getDate"><div class="api-item">
+-<h3>getDate()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Date">Date</a></span>
+-</h3>
+-<div>Returns the current date for the datepicker or <code>null</code> if no date has been selected.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the getDate method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">currentDate = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"getDate"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-hide"><div class="api-item">
+-<h3>hide()</h3>
+-<div>Close a previously opened date picker.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the hide method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"hide"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-isDisabled"><div class="api-item">
+-<h3>isDisabled()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div>Determine whether a date picker has been disabled.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the isDisabled method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"isDisabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current datepicker options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the datepicker option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the datepicker.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-refresh"><div class="api-item">
+-<h3>refresh()</h3>
+-<div>Redraw the date picker, after having made some external modifications.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the refresh method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-setDate"><div class="api-item">
+-<h3>setDate( date )</h3>
+-<div>Sets the date for the datepicker. The new date may be a <code>Date</code> object or a string in the current <a href="#option-dateFormat">date format</a> (e.g., <code>"01/26/2009"</code>), a number of days from today (e.g., <code>+7</code>) or a string of values and periods (<code>"y"</code> for years, <code>"m"</code> for months, <code>"w"</code> for weeks, <code>"d"</code> for days, e.g., <code>"+1m +7d"</code>), or <code>null</code> to clear the selected date.</div>
+-<ul><li>
+-<div><strong>date</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Date">Date</a>
+-</div>
+-<div>The new date.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the setDate method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"setDate"</code><code class="plain">, </code><code class="string">"10/12/2012"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-show"><div class="api-item">
+-<h3>show()</h3>
+-<div>Open the date picker. If the datepicker is attached to an input, the input must be visible for the datepicker to be shown.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the show method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"show"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the datepicker.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).datepicker( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Datepicker.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;datepicker demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"datepicker"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "#datepicker" ).datepicker();</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="300"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/transfer-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/transfer-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/transfer-effect.html	(revision 15488)
+@@ -1,61 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI transfer-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Transfer Effect",
+-		"excerpt":
+-			"Transfers the outline of an element to another element",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="transfer1" class="entry effect"><h2 class="section-title"><span>Transfer Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Transfers the outline of an element to another element</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">transfer</h4>
+-<ul>
+-<li>
+-<div><strong>className</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>argumental class name the transfer element will receive.</div>
+-</li>
+-<li>
+-<div><strong>to</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>jQuery selector, the element to transfer to.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<div class="longdesc" id="entry-longdesc">
+-		<p>Very useful when trying to visualize interaction between two elements.</p>
+-		<p>The transfer element iself has the class <code>ui-effects-transfer</code>, and needs to be styled by you, for example by adding a background or border.</p>
+-	</div>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Clicking on the green element transfers to the other.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;transfer demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">div.green {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 80px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: green;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">border: 1px solid black;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">position: relative;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">div.red {</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">margin-top: 10px;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 50px;</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 30px;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: red;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">border: 1px solid black;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">position: relative;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.ui-effects-transfer {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">border: 1px dotted black;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number30 index29 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2">&nbsp;</div><div class="line number32 index31 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"green"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number33 index32 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"red"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number34 index33 alt1">&nbsp;</div><div class="line number35 index34 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number36 index35 alt1"><code class="plain">$( "div" ).click(function() {</code></div><div class="line number37 index36 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">var i = 1 - $( "div" ).index( this );</code></div><div class="line number38 index37 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( this ).effect( "transfer", { to: $( "div" ).eq( i ) }, 1000 );</code></div><div class="line number39 index38 alt2"><code class="plain">});</code></div><div class="line number40 index39 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number41 index40 alt2">&nbsp;</div><div class="line number42 index41 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number43 index42 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="150"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/blind-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/blind-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/blind-effect.html	(revision 15488)
+@@ -1,58 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI blind-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Blind Effect",
+-		"excerpt":
+-			"\n\t\tThe blind effect hides or shows an element by wrapping the element in a container, and \"pulling the blinds\"\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="blind1" class="entry effect"><h2 class="section-title"><span>Blind Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The blind effect hides or shows an element by wrapping the element in a container, and "pulling the blinds"
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">blind</h4>
+-<ul><li>
+-<div>
+-<strong>direction</strong> (default: <code>"up"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>
+-				<p>The direction the blind will be pulled to hide the element, or the direction from which the element will be revealed.</p>
+-				<p>Possible Values: <code>up</code>, <code>down</code>, <code>left</code>, <code>right</code>, <code>vertical</code>, <code>horizontal</code>.</p>
+-			</div>
+-</li></ul>
+-</li></ul>
+-<div class="longdesc" id="entry-longdesc">
+-		<p>The container has <code>overflow: hidden</code> applied, so height changes affect what's visible.</p>
+-	</div>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the blind effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;blind demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "blind" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/tabs.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/tabs.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/tabs.html	(revision 15488)
+@@ -1,635 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI tabs documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Tabs Widget",
+-		"excerpt":
+-			"A single content area with multiple panels, each associated with a header in a list.",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="tabs1" class="entry widget"><h2 class="section-title">
+-<span>Tabs Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>A single content area with multiple panels, each associated with a header in a list.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-active">active</a></div>
+-<div><a href="#option-collapsible">collapsible</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-event">event</a></div>
+-<div><a href="#option-heightStyle">heightStyle</a></div>
+-<div><a href="#option-hide">hide</a></div>
+-<div><a href="#option-show">show</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-load">load</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-refresh">refresh</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-activate">activate</a></div>
+-<div><a href="#event-beforeActivate">beforeActivate</a></div>
+-<div><a href="#event-beforeLoad">beforeLoad</a></div>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-load">load</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>Tabs are generally used to break content into multiple sections that can be swapped to save space, much like an accordion.</p>
+-
+-		<p>The content for each tab panel can be defined in-page or can be loaded via Ajax; both are handled automatically based on the <code>href</code> of the anchor associated with the tab. By default tabs are activated on click, but the events can be changed to hover via the <a href="#option-event"><code>event</code></a> option.</p>
+-
+-		<h3>Keyboard interaction</h3>
+-
+-		<p>When focus is on a tab, the following key commands are available:</p>
+-		<ul>
+-			<li>UP/LEFT: Move focus to the previous tab. If on first tab, moves focus to last tab. Activate focused tab after a short delay.</li>
+-			<li>DOWN/RIGHT: Move focus to the next tab. If on last tab, moves focus to first tab. Activate focused tab after a short delay.</li>
+-			<li>HOME: Move focus to the first tab. Activate focused tab after a short delay.</li>
+-			<li>END: Move focus to the last tab. Activate focused tab after a short delay.</li>
+-			<li>SPACE: Activate panel associated with focused tab.</li>
+-			<li>ENTER: Activate or toggle panel associated with focused tab.</li>
+-			<li>ALT+PAGE UP: Move focus to the previous tab and immediately activate.</li>
+-			<li>ALT+PAGE DOWN: Move focus to the next tab and immediately activate.</li>
+-		</ul>
+-
+-		<p>When focus is in a panel, the following key commands are available:</p>
+-		<ul>
+-			<li>CTRL+UP: Move focus to associated tab.</li>
+-			<li>ALT+PAGE UP: Move focus to the previous tab and immediately activate.</li>
+-			<li>ALT+PAGE DOWN: Move focus to the next tab and immediately activate.</li>
+-		</ul>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-active" class="api-item first-item">
+-<h3>active<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Integer">Integer</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>
+-				Which panel is currently open.
+-			</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: Setting <code>active</code> to <code>false</code> will collapse all panels. This requires the <a href="#option-collapsible"><code>collapsible</code></a> option to be <code>true</code>.</li>
+-<li>
+-<strong>Integer</strong>: The zero-based index of the panel that is active (open). A negative value selects panels going backward from the last panel.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the tabs with the active option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ active: 1 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the active option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">active = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"active"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"active"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-collapsible" class="api-item">
+-<h3>collapsible<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>When set to <code>true</code>, the active panel can be closed.</div>
+-<strong>Code examples:</strong><p>Initialize the tabs with the collapsible option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ collapsible: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the collapsible option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">collapsible = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"collapsible"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"collapsible"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Which tabs are disabled.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: Enable or disable all tabs.</li>
+-<li>
+-<strong>Array</strong>: An array containing the zero-based indexes of the tabs that should be disabled, e.g., <code>[ 0, 2 ]</code> would disable the first and third tab.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the tabs with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ disabled: [ 0, 2 ] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, [ 0, 2 ] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-event" class="api-item">
+-<h3>event<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"click"</code>
+-</div>
+-<div>The type of event that the tabs should react to in order to activate the tab. To activate on hover, use <code>"mouseover"</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the tabs with the event option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ event: </code><code class="string">"mouseover"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the event option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">event = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"event"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"event"</code><code class="plain">, </code><code class="string">"mouseover"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-heightStyle" class="api-item">
+-<h3>heightStyle<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"content"</code>
+-</div>
+-<div>
+-				Controls the height of the tabs widget and each panel. Possible values:
+-				<ul>
+-					<li>
+-<code>"auto"</code>: All panels will be set to the height of the tallest panel.</li>
+-					<li>
+-<code>"fill"</code>: Expand to the available height based on the tabs' parent height.</li>
+-					<li>
+-<code>"content"</code>: Each panel will be only as tall as its content.</li>
+-				</ul>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the tabs with the heightStyle option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ heightStyle: </code><code class="string">"fill"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the heightStyle option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">heightStyle = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"heightStyle"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"heightStyle"</code><code class="plain">, </code><code class="string">"fill"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-hide" class="api-item">
+-<h3>hide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>If and how to animate the hiding of the panel.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: 
+-			When set to <code>false</code>, no animation will be used and the panel will be hidden immediately.
+-			When set to <code>true</code>, the panel will fade out with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Number</strong>: 
+-			The panel will fade out with the specified duration and the default easing.
+-		</li>
+-<li>
+-<strong>String</strong>: 
+-			The panel will be hidden using the specified effect.
+-			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideUp"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
+-			In either case the effect will be used with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeOut"</code> will be used.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the tabs with the hide option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ hide: { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the hide option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hide = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code><code class="plain">, { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-show" class="api-item">
+-<h3>show<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>If and how to animate the showing of the panel.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: 
+-			When set to <code>false</code>, no animation will be used and the panel will be shown immediately.
+-			When set to <code>true</code>, the panel will fade in with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Number</strong>: 
+-			The panel will fade in with the specified duration and the default easing.
+-		</li>
+-<li>
+-<strong>String</strong>: 
+-			The panel will be shown using the specified effect.
+-			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideDown"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
+-			In either case the effect will be used with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeIn"</code> will be used.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the tabs with the show option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({ show: { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the show option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">show = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code><code class="plain">, { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the tabs functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable">
+-<div class="api-item">
+-<h3>disable()</h3>
+-<div>Disables all tabs.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>disable( index )</h3>
+-<div>
+-					Disables a tab. The selected tab cannot be disabled. To disable more than one tab at once, set the <a href="#option-disabled"><code>disabled</code></a> option: <code>$( "#tabs" ).tabs( "option", "disabled", [ 1, 2, 3 ] )</code>.
+-				</div>
+-<ul><li>
+-<div><strong>index</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>Which tab to disable.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"disable"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-enable">
+-<div class="api-item">
+-<h3>enable()</h3>
+-<div>Enables all tabs.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>enable( index )</h3>
+-<div>Enables a tab. To enable more than one tab at once reset the disabled property like: <code>$( "#example" ).tabs( "option", "disabled", [] );</code>.</div>
+-<ul><li>
+-<div><strong>index</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>Which tab to enable.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"enable"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-load"><div class="api-item">
+-<h3>load( index )</h3>
+-<div>Loads the panel content of a remote tab.</div>
+-<ul><li>
+-<div><strong>index</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>Which tab to load.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the load method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"load"</code><code class="plain">, 1 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current tabs options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the tabs option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the tabs.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-refresh"><div class="api-item">
+-<h3>refresh()</h3>
+-<div>Process any tabs that were added or removed directly in the DOM and recompute the height of the tab panels. Results depend on the content and the <a href="#option-heightStyle"><code>heightStyle</code></a> option.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the refresh method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the tabs container.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).tabs( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-activate" class="api-item first-item">
+-<h3>activate( event, ui )<span class="returns">Type: <code>tabsactivate</code></span>
+-</h3>
+-<div>Triggered after a tab has been activated (after animation completes). If the tabs were previously collapsed, <code>ui.oldTab</code> and <code>ui.oldPanel</code> will be empty jQuery objects. If the tabs are collapsing, <code>ui.newTab</code> and <code>ui.newPanel</code> will be empty jQuery objects.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>newTab</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The tab that was just activated.</div>
+-</li>
+-<li>
+-<div><strong>oldTab</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The tab that was just deactivated.</div>
+-</li>
+-<li>
+-<div><strong>newPanel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel that was just activated.</div>
+-</li>
+-<li>
+-<div><strong>oldPanel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel that was just deactivated.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the tabs with the activate callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">activate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the tabsactivate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabsactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-beforeActivate" class="api-item">
+-<h3>beforeActivate( event, ui )<span class="returns">Type: <code>tabsbeforeactivate</code></span>
+-</h3>
+-<div>Triggered directly after a tab is activated. Can be canceled to prevent the tab from activating. If the tabs are currently collapsed, <code>ui.oldTab</code> and <code>ui.oldPanel</code> will be empty jQuery objects. If the tabs are collapsing, <code>ui.newTab</code> and <code>ui.newPanel</code> will be empty jQuery objects.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>newTab</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The tab that is about to be activated.</div>
+-</li>
+-<li>
+-<div><strong>oldTab</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The tab that is about to be deactivated.</div>
+-</li>
+-<li>
+-<div><strong>newPanel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel that is about to be activated.</div>
+-</li>
+-<li>
+-<div><strong>oldPanel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel that is about to be deactivated.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the tabs with the beforeActivate callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeActivate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the tabsbeforeactivate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabsbeforeactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-beforeLoad" class="api-item">
+-<h3>beforeLoad( event, ui )<span class="returns">Type: <code>tabsbeforeload</code></span>
+-</h3>
+-<div>Triggered when a remote tab is about to be loaded, after the <a href="#event-beforeActivate"><code>beforeActivate</code></a> event. Can be canceled to prevent the tab panel from loading content; though the panel will still be activated. This event is triggered just before the Ajax request is made, so modifications can be made to <code>ui.jqXHR</code> and <code>ui.ajaxSettings</code>.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>tab</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The tab that is being loaded.</div>
+-</li>
+-<li>
+-<div><strong>panel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel which will be populated by the Ajax response.</div>
+-</li>
+-<li>
+-<div><strong>jqXHR</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jqXHR">jqXHR</a>
+-</div>
+-<div>The <code>jqXHR</code> object that is requesting the content.</div>
+-</li>
+-<li>
+-<div><strong>ajaxSettings</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The settings that will be used by <a href="//api.jquery.com/jQuery.ajax"><code>jQuery.ajax</code></a> to request the content.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the tabs with the beforeLoad callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeLoad: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the tabsbeforeload event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabsbeforeload"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>tabscreate</code></span>
+-</h3>
+-<div>Triggered when the tabs are created. If the tabs are collapsed, <code>ui.tab</code> and <code>ui.panel</code> will be empty jQuery objects.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>tab</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The active tab.</div>
+-</li>
+-<li>
+-<div><strong>panel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The active panel.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the tabs with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the tabscreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabscreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-load" class="api-item">
+-<h3>load( event, ui )<span class="returns">Type: <code>tabsload</code></span>
+-</h3>
+-<div>Triggered after a remote tab has been loaded.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>tab</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The tab that was just loaded.</div>
+-</li>
+-<li>
+-<div><strong>panel</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The panel which was just populated by the Ajax response.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the tabs with the load callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tabs({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">load: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the tabsload event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tabsload"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Tabs</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;tabs demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"tabs"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#fragment-1"</code><code class="plain">&gt;&lt;</code><code class="keyword">span</code><code class="plain">&gt;One&lt;/</code><code class="keyword">span</code><code class="plain">&gt;&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#fragment-2"</code><code class="plain">&gt;&lt;</code><code class="keyword">span</code><code class="plain">&gt;Two&lt;/</code><code class="keyword">span</code><code class="plain">&gt;&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#fragment-3"</code><code class="plain">&gt;&lt;</code><code class="keyword">span</code><code class="plain">&gt;Three&lt;/</code><code class="keyword">span</code><code class="plain">&gt;&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"fragment-1"</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;First tab is active by default:&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">pre</code><code class="plain">&gt;&lt;</code><code class="keyword">code</code><code class="plain">&gt;$( "#tabs" ).tabs(); &lt;/</code><code class="keyword">code</code><code class="plain">&gt;&lt;/</code><code class="keyword">pre</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"fragment-2"</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"fragment-3"</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number32 index31 alt1">&nbsp;</div><div class="line number33 index32 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number34 index33 alt1"><code class="plain">$( "#tabs" ).tabs();</code></div><div class="line number35 index34 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number36 index35 alt1">&nbsp;</div><div class="line number37 index36 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number38 index37 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/progressbar.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/progressbar.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/progressbar.html	(revision 15488)
+@@ -1,337 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI progressbar documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Progressbar Widget",
+-		"excerpt":
+-			"Display status of a determinate or indeterminate process.",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="progressbar1" class="entry widget"><h2 class="section-title">
+-<span>Progressbar Widget</span><span class="version-details">version added: 1.6</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Display status of a determinate or indeterminate process.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-max">max</a></div>
+-<div><a href="#option-value">value</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-value">value</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-change">change</a></div>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-complete">complete</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>
+-			The progress bar is designed to display the current percent complete for a process. The bar is coded to be flexibly sized through CSS and will scale to fit inside its parent container by default.
+-		</p>
+-		<p>
+-			A determinate progress bar should only be used in situations where the system can accurately update the current status. A determinate progress bar should never fill from left to right, then loop back to empty for a single process — if the actual status cannot be calculated, an indeterminate progress bar should be used to provide user feedback.
+-		</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-disabled" class="api-item first-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the progressbar if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the progressbar with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-max" class="api-item">
+-<h3>max<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>100</code>
+-</div>
+-<div>The maximum value of the progressbar.</div>
+-<strong>Code examples:</strong><p>Initialize the progressbar with the max option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({ max: 1024 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the max option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">max = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code><code class="plain">, 1024 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-value" class="api-item">
+-<h3>value<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>The value of the progressbar.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: 
+-					A value between <code>0</code> and the <a href="#option-max"><code>max</code></a>.
+-				</li>
+-<li>
+-<strong>Boolean</strong>: 
+-					Value can be set to <code>false</code> to create an indeterminate progressbar.
+-				</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the progressbar with the value option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({ value: 25 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the value option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">value = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"value"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"value"</code><code class="plain">, 25 );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the progressbar functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the progressbar.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the progressbar.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current progressbar options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the progressbar option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the progressbar.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-value">
+-<div class="api-item">
+-<h3>value()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div>Gets the current value of the progressbar.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">progressSoFar = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"value"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>value( value )</h3>
+-<div>Sets the current value of the progressbar.</div>
+-<ul><li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#Boolean">Boolean</a>
+-</div>
+-<div>The value to set. See the <a href="#option-value"><code>value</code></a> option for details on valid values.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"value"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the progressbar.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).progressbar( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-change" class="api-item first-item">
+-<h3>change( event, ui )<span class="returns">Type: <code>progressbarchange</code></span>
+-</h3>
+-<div>Triggered when the value of the progressbar changes.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the progressbar with the change callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the progressbarchange event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"progressbarchange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-complete" class="api-item">
+-<h3>complete( event, ui )<span class="returns">Type: <code>progressbarcomplete</code></span>
+-</h3>
+-<div>Triggered when the value of the progressbar reaches the maximum value.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the progressbar with the complete callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">complete: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the progressbarcomplete event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"progressbarcomplete"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>progressbarcreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the progressbar is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the progressbar with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).progressbar({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the progressbarcreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"progressbarcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Examples:</h2></header><div class="entry-example" id="example-0">
+-<h4>Example: <span class="desc">A simple jQuery UI Progressbar</span>
+-</h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;progressbar demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"progressbar"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "#progressbar" ).progressbar({</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">value: 37</code></div><div class="line number17 index16 alt2"><code class="plain">});</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="50"></div>
+-</div>
+-<div class="entry-example" id="example-1">
+-<h4>Example: <span class="desc">A simple jQuery UI Indeterminate Progressbar</span>
+-</h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;progressbar demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"progressbar"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "#progressbar" ).progressbar({</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">value: false</code></div><div class="line number17 index16 alt2"><code class="plain">});</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="50"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/fade-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/fade-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/fade-effect.html	(revision 15488)
+@@ -1,43 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI fade-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Fade Effect",
+-		"excerpt":
+-			"\n\t\tThe fade effect hides or shows an element by fading it.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="fade1" class="entry effect"><h2 class="section-title"><span>Fade Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The fade effect hides or shows an element by fading it.
+-	</p>
+-<ul class="signatures"><li class="signature"><h4 class="name">fade</h4></li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the fade effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;fade demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "fade" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/slide-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/slide-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/slide-effect.html	(revision 15488)
+@@ -1,59 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI slide-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Slide Effect",
+-		"excerpt":
+-			"Slides the element out of the viewport.",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="slide1" class="entry effect"><h2 class="section-title"><span>Slide Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Slides the element out of the viewport.</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">slide</h4>
+-<ul>
+-<li>
+-<div>
+-<strong>direction</strong> (default: <code>"both"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The direction of the effect. Possible values: <code>"left"</code>, <code>"right"</code>, <code>"up"</code>, <code>"down"</code>.</div>
+-</li>
+-<li>
+-<div>
+-<strong>distance</strong> (default: <code>element's outerWidth</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The distance of the effect. Defaults to either the height or width of the elemenet depending on the <code>direction</code> argument. Can be set to any integer less than the width/height of the element.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the slide effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;slide demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "slide" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/tooltip.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/tooltip.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/tooltip.html	(revision 15488)
+@@ -1,465 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI tooltip documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Tooltip Widget",
+-		"excerpt":
+-			"Customizable, themeable tooltips, replacing native tooltips.",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="tooltip1" class="entry widget"><h2 class="section-title">
+-<span>Tooltip Widget</span><span class="version-details">version added: 1.9</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Customizable, themeable tooltips, replacing native tooltips.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-content">content</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-hide">hide</a></div>
+-<div><a href="#option-items">items</a></div>
+-<div><a href="#option-position">position</a></div>
+-<div><a href="#option-show">show</a></div>
+-<div><a href="#option-tooltipClass">tooltipClass</a></div>
+-<div><a href="#option-track">track</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-close">close</a></div>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-open">open</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-open">open</a></div>
+-<div><a href="#event-close">close</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>Tooltip replaces native tooltips, making them themable as well as allowing various customizations:</p>
+-
+-		<ul>
+-			<li>Display other content than just the title, like inline footnotes or extra content retrieved via Ajax.</li>
+-			<li>Customize the positioning, e.g., to center the tooltip above elements.</li>
+-			<li>Add extra styling to customize the appearance, for warning or error fields.</li>
+-		</ul>
+-
+-		<p>A fade animation is used by default to show and hide the tooltip, making the appearance a bit more organic, compared to just toggling the visiblity. This can be customized with the <a href="#option-show"><code>show</code></a> and <a href="#option-hide"><code>hide</code></a> options.</p>
+-
+-		<p>The <a href="#option-items"><code>items</code></a> and <a href="#option-content"><code>content</code></a> options need to stay in-sync. If you change one of them, you need to change the other.</p>
+-
+-		<p>In general, disabled elements do not trigger any DOM events. Therefore, it is not possible to properly control tooltips for disabled elements, since we need to listen to events to determine when to show and hide the tooltip. As a result, jQuery UI does not guarantee any level of support for tooltips attached to disabled elements. Unfortunately, this means that if you require tooltips on disabled elements, you may end up with a mixture of native tooltips and jQuery UI tooltips.</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-content" class="api-item first-item">
+-<h3>content<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types/#Function">Function</a>() or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>function returning the title attribute</code>
+-</div>
+-<div>
+-				<p>The content of the tooltip.</p>
+-
+-				<p><em>When changing this option, you likely need to also change the <a href="#option-items"><code>items</code></a> option.</em></p>
+-			</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Function</strong>: A callback which can either return the content directly, or call the first argument, passing in the content, e.g., for Ajax content.</li>
+-<li>
+-<strong>String</strong>: A string of HTML to use for the tooltip content.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the content option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ content: </code><code class="string">"Awesome title!"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the content option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">content = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"content"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"content"</code><code class="plain">, </code><code class="string">"Awesome title!"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the tooltip if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-hide" class="api-item">
+-<h3>hide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>If and how to animate the hiding of the tooltip.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: 
+-			When set to <code>false</code>, no animation will be used and the tooltip will be hidden immediately.
+-			When set to <code>true</code>, the tooltip will fade out with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Number</strong>: 
+-			The tooltip will fade out with the specified duration and the default easing.
+-		</li>
+-<li>
+-<strong>String</strong>: 
+-			The tooltip will be hidden using the specified effect.
+-			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideUp"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
+-			In either case the effect will be used with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeOut"</code> will be used.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the hide option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ hide: { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the hide option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hide = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code><code class="plain">, { effect: </code><code class="string">"explode"</code><code class="plain">, duration: 1000 } );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-items" class="api-item">
+-<h3>items<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>[title]</code>
+-</div>
+-<div>
+-				<p>A selector indicating which items should show tooltips. Customize if you're using something other then the title attribute for the tooltip content, or if you need a different selector for event delegation.</p>
+-
+-				<p><em>When changing this option, you likely need to also change the <a href="#option-content"><code>content</code></a> option.</em></p>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the items option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ items: </code><code class="string">"img[alt]"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the items option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">items = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"items"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"items"</code><code class="plain">, </code><code class="string">"img[alt]"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-position" class="api-item">
+-<h3>position<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{ my: "left top+15", at: "left bottom", collision: "flipfit" }</code>
+-</div>
+-<div>
+-				<p>Configuration for the Position utility. The <code>of</code> property defaults to the target element, but can also be overriden.</p>
+-
+-				<p><em>Note: In 1.9.0, the default value was <code>{ my: "left+15 center", at: "right center", collision: "flipfit" }</code>, but this was changed to more closely match native tooltip positioning.</em></p>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the position option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ position: { my: </code><code class="string">"left+15 center"</code><code class="plain">, at: </code><code class="string">"right center"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the position option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">position = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code><code class="plain">, { my: </code><code class="string">"left+15 center"</code><code class="plain">, at: </code><code class="string">"right center"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-show" class="api-item">
+-<h3>show<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>If and how to animate the showing of the tooltip.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: 
+-			When set to <code>false</code>, no animation will be used and the tooltip will be shown immediately.
+-			When set to <code>true</code>, the tooltip will fade in with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Number</strong>: 
+-			The tooltip will fade in with the specified duration and the default easing.
+-		</li>
+-<li>
+-<strong>String</strong>: 
+-			The tooltip will be shown using the specified effect.
+-			The value can either be the name of a built-in jQuery animateion method, such as <code>"slideDown"</code>, or the name of a jQuery UI effect, such as <code>"fold"</code>.
+-			In either case the effect will be used with the default duration and the default easing.
+-		</li>
+-<li>
+-<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. If the <code>effect</code> property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used. If <code>effect</code> is omitted, then <code>"fadeIn"</code> will be used.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the show option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ show: { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the show option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">show = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code><code class="plain">, { effect: </code><code class="string">"blind"</code><code class="plain">, duration: 800 } );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-tooltipClass" class="api-item">
+-<h3>tooltipClass<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>
+-				A class to add to the widget, can be used to display various tooltip types, like warnings or errors.
+-				<p>This may get replaced by the <a href="http://bugs.jqueryui.com/ticket/7053">classes option</a>.</p>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the tooltipClass option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ tooltipClass: </code><code class="string">"custom-tooltip-styling"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the tooltipClass option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">tooltipClass = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tooltipClass"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tooltipClass"</code><code class="plain">, </code><code class="string">"custom-tooltip-styling"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-track" class="api-item">
+-<h3>track<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>
+-				Whether the tooltip should track (follow) the mouse.
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the track option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({ track: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the track option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">track = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"track"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"track"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-close"><div class="api-item first-item">
+-<h3>close()</h3>
+-<div>
+-				Closes a tooltip. This is only intended to be called for non-delegated tooltips.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the close method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"close"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-destroy"><div class="api-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the tooltip functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the tooltip.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the tooltip.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-open"><div class="api-item">
+-<h3>open()</h3>
+-<div>
+-				Programmatically open a tooltip. This is only intended to be called for non-delegated tooltips.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the open method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"open"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current tooltip options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the tooltip option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the tooltip.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the original element.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).tooltip( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-close" class="api-item first-item">
+-<h3>close( event, ui )<span class="returns">Type: <code>tooltipclose</code></span>
+-</h3>
+-<div>
+-				Triggered when a tooltip is closed, triggered on <code>focusout</code> or <code>mouseleave</code>.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>tooltip</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The generated tooltip element.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the close callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">close: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the tooltipclose event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tooltipclose"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>tooltipcreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the tooltip is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the tooltipcreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tooltipcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-open" class="api-item">
+-<h3>open( event, ui )<span class="returns">Type: <code>tooltipopen</code></span>
+-</h3>
+-<div>
+-				Triggered when a tooltip is shown, triggered on <code>focusin</code> or <code>mouseover</code>.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>tooltip</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The generated tooltip element.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the tooltip with the open callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).tooltip({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">open: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the tooltipopen event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"tooltipopen"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Create a tooltip on the document, using event delegation for all elements with a title attribute.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;tooltip demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code> <code class="color1">title</code><code class="plain">=</code><code class="string">"Anchor description"</code><code class="plain">&gt;Anchor text&lt;/</code><code class="keyword">a</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">title</code><code class="plain">=</code><code class="string">"Input help"</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( document ).tooltip();</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="80"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/drop-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/drop-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/drop-effect.html	(revision 15488)
+@@ -1,55 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI drop-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Drop Effect",
+-		"excerpt":
+-			"\n\t\tThe drop effect hides or shows an element fading in/out and sliding in a direction.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="drop1" class="entry effect"><h2 class="section-title"><span>Drop Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The drop effect hides or shows an element fading in/out and sliding in a direction.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">drop</h4>
+-<ul><li>
+-<div>
+-<strong>direction</strong> (default: <code>"left"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>
+-				<p>The direction the element will fall to hide the element, or the direction from which the element will be revealed.</p>
+-				<p>Possible Values: <code>up</code>, <code>down</code>, <code>left</code>, <code>right</code>.</p>
+-			</div>
+-</li></ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the drop effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;drop demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "drop" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/dialog.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/dialog.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/dialog.html	(revision 15488)
+@@ -1,892 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI dialog documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Dialog Widget",
+-		"excerpt":
+-			"Open content in an interactive overlay.",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="dialog1" class="entry widget"><h2 class="section-title">
+-<span>Dialog Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Open content in an interactive overlay.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-appendTo">appendTo</a></div>
+-<div><a href="#option-autoOpen">autoOpen</a></div>
+-<div><a href="#option-buttons">buttons</a></div>
+-<div><a href="#option-closeOnEscape">closeOnEscape</a></div>
+-<div><a href="#option-closeText">closeText</a></div>
+-<div><a href="#option-dialogClass">dialogClass</a></div>
+-<div><a href="#option-draggable">draggable</a></div>
+-<div><a href="#option-height">height</a></div>
+-<div><a href="#option-hide">hide</a></div>
+-<div><a href="#option-maxHeight">maxHeight</a></div>
+-<div><a href="#option-maxWidth">maxWidth</a></div>
+-<div><a href="#option-minHeight">minHeight</a></div>
+-<div><a href="#option-minWidth">minWidth</a></div>
+-<div><a href="#option-modal">modal</a></div>
+-<div><a href="#option-position">position</a></div>
+-<div><a href="#option-resizable">resizable</a></div>
+-<div><a href="#option-show">show</a></div>
+-<div><a href="#option-title">title</a></div>
+-<div><a href="#option-width">width</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-close">close</a></div>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-isOpen">isOpen</a></div>
+-<div><a href="#method-moveToTop">moveToTop</a></div>
+-<div><a href="#method-open">open</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-beforeClose">beforeClose</a></div>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-open">open</a></div>
+-<div><a href="#event-focus">focus</a></div>
+-<div><a href="#event-dragStart">dragStart</a></div>
+-<div><a href="#event-drag">drag</a></div>
+-<div><a href="#event-dragStop">dragStop</a></div>
+-<div><a href="#event-resizeStart">resizeStart</a></div>
+-<div><a href="#event-resize">resize</a></div>
+-<div><a href="#event-resizeStop">resizeStop</a></div>
+-<div><a href="#event-close">close</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>A dialog is a floating window that contains a title bar and a content area. The dialog window can be moved, resized and closed with the 'x' icon by default.</p>
+-
+-		<p>If the content length exceeds the maximum height, a scrollbar will automatically appear.</p>
+-
+-		<p>A bottom button bar and semi-transparent modal overlay layer are common options that can be added.</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-appendTo" class="api-item first-item">
+-<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"body"</code>
+-</div>
+-<div>Which element the dialog should be appended to. Regardless of the value set, the overlay for modal dialogs will always be appended to the body and cover the entire window.<span class="version-details"> (version added: 1.10)</span>
+-</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the appendTo option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ appendTo: </code><code class="string">"#someElem"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the appendTo option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, </code><code class="string">"#someElem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-autoOpen" class="api-item">
+-<h3>autoOpen<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>If set to <code>true</code>, the dialog will automatically open upon initialization. If <code>false</code>, the dialog will stay hidden until the <a href="#method-open"><code>open()</code></a> method is called.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the autoOpen option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ autoOpen: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the autoOpen option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoOpen = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoOpen"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoOpen"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-buttons" class="api-item">
+-<h3>buttons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{}</code>
+-</div>
+-<div>Specifies which buttons should be displayed on the dialog. The context of the callback is the dialog element; if you need access to the button, it is available as the target of the event object.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Object</strong>: The keys are the button labels and the values are the callbacks for when the associated button is clicked.</li>
+-<li>
+-<strong>Array</strong>: Each element of the array must be an object defining the attributes, properties, and event handlers to set on the button.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the dialog with the buttons option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ buttons: [ { text: </code><code class="string">"Ok"</code><code class="plain">, click: </code><code class="keyword">function</code><code class="plain">() { $( </code><code class="keyword">this</code> <code class="plain">).dialog( </code><code class="string">"close"</code> <code class="plain">); } ] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the buttons option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">buttons = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"buttons"</code><code class="plain">, [ { text: </code><code class="string">"Ok"</code><code class="plain">, click: </code><code class="keyword">function</code><code class="plain">() { $( </code><code class="keyword">this</code> <code class="plain">).dialog( </code><code class="string">"close"</code> <code class="plain">); } ] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-closeOnEscape" class="api-item">
+-<h3>closeOnEscape<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>Specifies whether the dialog should close when it has focus and the user presses the esacpe (ESC) key.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the closeOnEscape option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ closeOnEscape: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the closeOnEscape option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">closeOnEscape = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeOnEscape"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeOnEscape"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-closeText" class="api-item">
+-<h3>closeText<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"close"</code>
+-</div>
+-<div>Specifies the text for the close button. Note that the close text is visibly hidden when using a standard theme.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the closeText option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ closeText: </code><code class="string">"hide"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the closeText option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">closeText = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeText"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"closeText"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-dialogClass" class="api-item">
+-<h3>dialogClass<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>""</code>
+-</div>
+-<div>The specified class name(s) will be added to the dialog, for additional theming.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the dialogClass option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ dialogClass: </code><code class="string">"alert"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the dialogClass option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">dialogClass = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dialogClass"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"dialogClass"</code><code class="plain">, </code><code class="string">"alert"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-draggable" class="api-item">
+-<h3>draggable<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>If set to <code>true</code>, the dialog will be draggable by the title bar. Requires the <a href="/draggable/">jQuery UI Draggable wiget</a> to be included.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the draggable option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ draggable: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the draggable option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">draggable = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"draggable"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"draggable"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-height" class="api-item">
+-<h3>height<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"auto"</code>
+-</div>
+-<div>The height of the dialog.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: The height in pixels.</li>
+-<li>
+-<strong>String</strong>: The only supported string value is <code>"auto"</code> which will allow the dialog height to adjust based on its content.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the dialog with the height option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ height: 400 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the height option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">height = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"height"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"height"</code><code class="plain">, 400 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-hide" class="api-item">
+-<h3>hide<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>If and how to animate the hiding of the dialog.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: 
+-					The dialog will fade out while animating the height and width for the specified duration.
+-				</li>
+-<li>
+-<strong>String</strong>: 
+-					The dialog will be hidden using the specified jQuery UI effect. See the <a href="/category/effects/">list of effects</a> for possible values.
+-				</li>
+-<li>
+-<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. The <code>effect</code> property must be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the dialog with the hide option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ hide: </code><code class="string">"explode"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the hide option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hide = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hide"</code><code class="plain">, </code><code class="string">"explode"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-maxHeight" class="api-item">
+-<h3>maxHeight<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>The maximum height to which the dialog can be resized, in pixels.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the maxHeight option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ maxHeight: 600 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the maxHeight option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxHeight = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxHeight"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxHeight"</code><code class="plain">, 600 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-maxWidth" class="api-item">
+-<h3>maxWidth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>The maximum width to which the dialog can be resized, in pixels.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the maxWidth option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ maxWidth: 600 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the maxWidth option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">maxWidth = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxWidth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"maxWidth"</code><code class="plain">, 600 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-minHeight" class="api-item">
+-<h3>minHeight<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>150</code>
+-</div>
+-<div>The minimum height to which the dialog can be resized, in pixels.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the minHeight option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ minHeight: 200 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the minHeight option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minHeight = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minHeight"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minHeight"</code><code class="plain">, 200 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-minWidth" class="api-item">
+-<h3>minWidth<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>150</code>
+-</div>
+-<div>The minimum width to which the dialog can be resized, in pixels.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the minWidth option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ minWidth: 200 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the minWidth option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minWidth = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minWidth"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minWidth"</code><code class="plain">, 200 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-modal" class="api-item">
+-<h3>modal<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If set to <code>true</code>, the dialog will have modal behavior; other items on the page will be disabled, i.e., cannot be interacted with. Modal dialogs create an overlay below the dialog but above other page elements.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the modal option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ modal: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the modal option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">modal = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"modal"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"modal"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-position" class="api-item">
+-<h3>position<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{ my: "center", at: "center", of: window }</code>
+-</div>
+-<div>
+-				<p>Specifies where the dialog should be displayed. The dialog will handle collisions such that as much of the dialog is visible as possible.</p>
+-				<p><em>Note: The <code>String</code> and <code>Array</code> forms are deprecated.</em></p>
+-			</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Object</strong>: Identifies the position of the dialog when opened. The <code>of</code> option defaults to the window, but you can specify another element to position against. You can refer to the <a href="/position">jQuery UI Position</a> utility for more details about the various options.</li>
+-<li>
+-<strong>String</strong>: A string representing the position within the viewport. Possible values: <code>"center"</code>, <code>"left"</code>, <code>"right"</code>, <code>"top"</code>, <code>"bottom"</code>.</li>
+-<li>
+-<strong>Array</strong>: An array containing an <em>x, y</em> coordinate pair in pixel offset from the top left corner of the viewport or the name of a possible string value.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the dialog with the position option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ position: { my: </code><code class="string">"left top"</code><code class="plain">, at: </code><code class="string">"left bottom"</code><code class="plain">, of: button } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the position option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">position = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code><code class="plain">, { my: </code><code class="string">"left top"</code><code class="plain">, at: </code><code class="string">"left bottom"</code><code class="plain">, of: button } );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-resizable" class="api-item">
+-<h3>resizable<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>If set to <code>true</code>, the dialog will be resizable. Requires the <a href="/resizable/">jQuery UI Resizable widget</a> to be included.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the resizable option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ resizable: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the resizable option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">resizable = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"resizable"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"resizable"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-show" class="api-item">
+-<h3>show<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>If and how to animate the showing of the dialog.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: 
+-					The dialog will fade in while animating the height and width for the specified duration.
+-				</li>
+-<li>
+-<strong>String</strong>: 
+-					The dialog will be shown using the specified jQuery UI effect. See the <a href="/category/effects/">list of effects</a> for possible values.
+-				</li>
+-<li>
+-<strong>Object</strong>: If the value is an object, then <code>effect</code>, <code>duration</code>, and <code>easing</code> properties may be provided. The <code>effect</code> property must be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If <code>duration</code> or <code>easing</code> is omitted, then the default values will be used.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the dialog with the show option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ show: </code><code class="string">"slow"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the show option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">show = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"show"</code><code class="plain">, </code><code class="string">"slow"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-title" class="api-item">
+-<h3>title<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Specifies the title of the dialog. Any valid HTML may be set as the title. The title can also be specified by the <code>title</code> attribute on the dialog source element.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the title option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ title: </code><code class="string">"Dialog Title"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the title option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">title = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"title"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"title"</code><code class="plain">, </code><code class="string">"Dialog Title"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-width" class="api-item">
+-<h3>width<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>300</code>
+-</div>
+-<div>The width of the dialog, in pixels.</div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the width option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({ width: 500 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the width option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">width = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"width"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"width"</code><code class="plain">, 500 );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-close"><div class="api-item first-item">
+-<h3>close()</h3>
+-<div>Closes the dialog.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the close method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"close"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-destroy"><div class="api-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the dialog functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-isOpen"><div class="api-item">
+-<h3>isOpen()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div>Whether the dialog is currently open.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the isOpen method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isOpen = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"isOpen"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-moveToTop"><div class="api-item">
+-<h3>moveToTop()</h3>
+-<div>Moves the dialog to the top of the dialog stack.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the moveToTop method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"moveToTop"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-open"><div class="api-item">
+-<h3>open()</h3>
+-<div>Opens the dialog.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the open method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"open"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current dialog options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the dialog option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the dialog.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the generated wrapper.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).dialog( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-beforeClose" class="api-item first-item">
+-<h3>beforeClose( event, ui )<span class="returns">Type: <code>dialogbeforeclose</code></span>
+-</h3>
+-<div>Triggered when a dialog is about to close. If canceled, the dialog will not close.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the beforeClose callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">beforeClose: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogbeforeclose event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogbeforeclose"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-close" class="api-item">
+-<h3>close( event, ui )<span class="returns">Type: <code>dialogclose</code></span>
+-</h3>
+-<div>Triggered when the dialog is closed.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the close callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">close: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogclose event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogclose"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>dialogcreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the dialog is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogcreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-drag" class="api-item">
+-<h3>drag( event, ui )<span class="returns">Type: <code>dialogdrag</code></span>
+-</h3>
+-<div>Triggered while the dialog is being dragged.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current CSS position of the dialog.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current offset position of the dialog.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the drag callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">drag: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogdrag event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogdrag"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-dragStart" class="api-item">
+-<h3>dragStart( event, ui )<span class="returns">Type: <code>dialogdragstart</code></span>
+-</h3>
+-<div>Triggered when the user starts dragging the dialog.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current CSS position of the dialog.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current offset position of the dialog.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the dragStart callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">dragStart: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogdragstart event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogdragstart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-dragStop" class="api-item">
+-<h3>dragStop( event, ui )<span class="returns">Type: <code>dialogdragstop</code></span>
+-</h3>
+-<div>Triggered after the dialog has been dragged.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current CSS position of the dialog.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current offset position of the dialog.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the dragStop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">dragStop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogdragstop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogdragstop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-focus" class="api-item">
+-<h3>focus( event, ui )<span class="returns">Type: <code>dialogfocus</code></span>
+-</h3>
+-<div>Triggered when the dialog gains focus.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the focus callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">focus: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogfocus event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogfocus"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-open" class="api-item">
+-<h3>open( event, ui )<span class="returns">Type: <code>dialogopen</code></span>
+-</h3>
+-<div>Triggered when the dialog is opened.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the open callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">open: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogopen event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogopen"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-resize" class="api-item">
+-<h3>resize( event, ui )<span class="returns">Type: <code>dialogresize</code></span>
+-</h3>
+-<div>Triggered while the dialog is being resized.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>orginalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The CSS position of the dialog prior to being resized.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current CSS position of the dialog.</div>
+-</li>
+-<li>
+-<div><strong>originalSize</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The size of the dialog prior to being resized.</div>
+-</li>
+-<li>
+-<div><strong>size</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current size of the dialog.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the resize callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">resize: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogresize event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogresize"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-resizeStart" class="api-item">
+-<h3>resizeStart( event, ui )<span class="returns">Type: <code>dialogresizestart</code></span>
+-</h3>
+-<div>Triggered when the user starts resizing the dialog.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>orginalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The CSS position of the dialog prior to being resized.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current CSS position of the dialog.</div>
+-</li>
+-<li>
+-<div><strong>originalSize</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The size of the dialog prior to being resized.</div>
+-</li>
+-<li>
+-<div><strong>size</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current size of the dialog.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the resizeStart callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">resizeStart: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogresizestart event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogresizestart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-resizeStop" class="api-item">
+-<h3>resizeStop( event, ui )<span class="returns">Type: <code>dialogresizestop</code></span>
+-</h3>
+-<div>Triggered after the dialog has been resized.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>orginalPosition</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The CSS position of the dialog prior to being resized.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current CSS position of the dialog.</div>
+-</li>
+-<li>
+-<div><strong>originalSize</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The size of the dialog prior to being resized.</div>
+-</li>
+-<li>
+-<div><strong>size</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>The current size of the dialog.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the dialog with the resizeStop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).dialog({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">resizeStop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dialogresizestop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dialogresizestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Dialog</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;dialog demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">button</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"opener"</code><code class="plain">&gt;open the dialog&lt;/</code><code class="keyword">button</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"dialog"</code> <code class="color1">title</code><code class="plain">=</code><code class="string">"Dialog Title"</code><code class="plain">&gt;I'm a dialog&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1">&nbsp;</div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">$( "#dialog" ).dialog({ autoOpen: false });</code></div><div class="line number17 index16 alt2"><code class="plain">$( "#opener" ).click(function() {</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#dialog" ).dialog( "open" );</code></div><div class="line number19 index18 alt2"><code class="plain">});</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/autocomplete.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/autocomplete.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/autocomplete.html	(revision 15488)
+@@ -1,577 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI autocomplete documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Autocomplete Widget",
+-		"excerpt":
+-			"Autocomplete enables users to quickly find and select from a pre-populated list of values as they type, leveraging searching and filtering.",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="autocomplete1" class="entry widget"><h2 class="section-title">
+-<span>Autocomplete Widget</span><span class="version-details">version added: 1.8</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Autocomplete enables users to quickly find and select from a pre-populated list of values as they type, leveraging searching and filtering.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-appendTo">appendTo</a></div>
+-<div><a href="#option-autoFocus">autoFocus</a></div>
+-<div><a href="#option-delay">delay</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-minLength">minLength</a></div>
+-<div><a href="#option-position">position</a></div>
+-<div><a href="#option-source">source</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-close">close</a></div>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-search">search</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-change">change</a></div>
+-<div><a href="#event-close">close</a></div>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-focus">focus</a></div>
+-<div><a href="#event-open">open</a></div>
+-<div><a href="#event-response">response</a></div>
+-<div><a href="#event-search">search</a></div>
+-<div><a href="#event-select">select</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>By giving an Autocomplete field focus or entering something into it, the plugin starts searching for entries that match and displays a list of values to choose from. By entering more characters, the user can filter down the list to better matches.</p>
+-
+-		<p>This can be used to choose previously selected values, such as entering tags for articles or entering email addresses from an address book. Autocomplete can also be used to populate associated information, such as entering a city name and getting the zip code.</p>
+-
+-		<p>You can pull data in from a local or remote source: Local is good for small data sets, e.g., an address book with 50 entries; remote is necessary for big data sets, such as a database with hundreds or millions of entries to select from. To find out more about customizing the data soure, see the documentation for the <a href="#option-source"><code>source</code></a> option.</p>
+-
+-		<h3>Keyboard interaction</h3>
+-
+-		<p>When the menu is open, the following key commands are available:</p>
+-		<ul>
+-			<li>UP - Move focus to the previous item. If on first item, move focus to the input. If on the input, move focus to last item.</li>
+-			<li>DOWN - Move focus to the next item. If on last item, move focus to the input. If on the input, move focus to the first item.</li>
+-			<li>ESCAPE - Close the menu.</li>
+-			<li>ENTER - Select the currently focused item and close the menu.</li>
+-			<li>TAB - Select the currently focused item, close the menu, and move focus to the next focusable element.</li>
+-			<li>PAGE UP/DOWN - Scroll through a page of items (based on height of menu). <em>It's generally a bad idea to display so many items that users need to page.</em>.</li>
+-		</ul>
+-
+-		<p>When the menu is closed, the following key commands are available:</p>
+-		<ul>
+-			<li>UP/DOWN - Open the menu, if the <a href="#option-minLength"><code>minLength</code></a> has been met.</li>
+-		</ul>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-appendTo" class="api-item first-item">
+-<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Which element the menu should be appended to. When the value is <code>null</code>, the parents of the input field will be checked for a class of <code>ui-front</code>. If an element with the <code>ui-front</code> class is found, the menu will be appended to that element. Regardless of the value, if no element is found, the menu will be appended to the body.</div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the appendTo option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ appendTo: </code><code class="string">"#someElem"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the appendTo option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, </code><code class="string">"#someElem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-autoFocus" class="api-item">
+-<h3>autoFocus<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If set to <code>true</code> the first item will automatically be focused when the menu is shown.</div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the autoFocus option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ autoFocus: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the autoFocus option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoFocus = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoFocus"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoFocus"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-delay" class="api-item">
+-<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>300</code>
+-</div>
+-<div>The delay in milliseconds between when a keystroke occurs and when a search is performed. A zero-delay makes sense for local data (more responsive), but can produce a lot of load for remote data, while being less responsive.</div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the delay option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ delay: 500 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the delay option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 500 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the autocomplete if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-minLength" class="api-item">
+-<h3>minLength<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>The minimum number of characters a user must type before a search is performed. Zero is useful for local data with just a few items, but a higher value should be used when a single character search could match a few thousand items.</div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the minLength option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ minLength: 0 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the minLength option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">minLength = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minLength"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"minLength"</code><code class="plain">, 0 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-position" class="api-item">
+-<h3>position<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{ my: "left top", at: "left bottom", collision: "none" }</code>
+-</div>
+-<div>Identifies the position of the suggestions menu in relation to the associated input element. The <code>of</code> option defaults to the input element, but you can specify another element to position against. You can refer to the <a href="/position">jQuery UI Position</a> utility for more details about the various options.</div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the position option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ position: { my : </code><code class="string">"right top"</code><code class="plain">, at: </code><code class="string">"right bottom"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the position option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">position = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code><code class="plain">, { my : </code><code class="string">"right top"</code><code class="plain">, at: </code><code class="string">"right bottom"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-source" class="api-item">
+-<h3>source<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>( <a href="http://api.jquery.com/Types#Object">Object</a> request, <a href="http://api.jquery.com/Types#Function">Function</a> response( <a href="http://api.jquery.com/Types#Object">Object</a> data ) )</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>none; must be specified</code>
+-</div>
+-<div>
+-				Defines the data to use, must be specified.
+-				<p>Independent of the variant you use, the label is always treated as text. If you want the label to be treated as html you can use <a href="https://github.com/scottgonzalez/jquery-ui-extensions/blob/master/autocomplete/jquery.ui.autocomplete.html.js">Scott González' html extension</a>. The demos all focus on different variations of the <code>source</code> option - look for one that matches your use case, and check out the code.</p>
+-			</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Array</strong>: 
+-					An array can be used for local data. There are two supported formats:
+-					<ul>
+-						<li>An array of strings: <code>[ "Choice1", "Choice2" ]</code>
+-</li>
+-						<li>An array of objects with <code>label</code> and <code>value</code> properties: <code>[ { label: "Choice1", value: "value1" }, ... ]</code>
+-</li>
+-					</ul>
+-					The label property is displayed in the suggestion menu. The value will be inserted into the input element when a user selects an item. If just one property is specified, it will be used for both, e.g., if you provide only <code>value</code> properties, the value will also be used as the label.
+-				</li>
+-<li>
+-<strong>String</strong>: When a string is used, the Autocomplete plugin expects that string to point to a URL resource that will return JSON data. It can be on the same host or on a different one (must provide JSONP). The Autocomplete plugin does not filter the results, instead a query string is added with a <code>term</code> field, which the server-side script should use for filtering the results. For example, if the <code>source</code> option is set to <code>"http://example.com"</code> and the user types <code>foo</code>, a GET request would be made to <code>http://example.com?term=foo</code>. The data itself can be in the same format as the local data described above.</li>
+-<li>
+-<strong>Function</strong>: 
+-					The third variation, a callback, provides the most flexibility and can be used to connect any data source to Autocomplete. The callback gets two arguments:
+-					<ul>
+-						<li>A <code>request</code> object, with a single <code>term</code> property, which refers to the value currently in the text input. For example, if the user enters <code>"new yo"</code> in a city field, the Autocomplete term will equal <code>"new yo"</code>.</li>
+-						<li>A <code>response</code> callback, which expects a single argument: the data to suggest to the user. This data should be filtered based on the provided term, and can be in any of the formats described above for simple local data. It's important when providing a custom source callback to handle errors during the request. You must always call the <code>response</code> callback even if you encounter an error. This ensures that the widget always has the correct state.</li>
+-					</ul>
+-					<p>When filtering data locally, you can make use of the built-in <code>$.ui.autocomplete.escapeRegex</code> function. It'll take a single string argument and escape all regex characters, making the result safe to pass to <code>new RegExp()</code>.</p>
+-				</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the source option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({ source: [ </code><code class="string">"c++"</code><code class="plain">, </code><code class="string">"java"</code><code class="plain">, </code><code class="string">"php"</code><code class="plain">, </code><code class="string">"coldfusion"</code><code class="plain">, </code><code class="string">"javascript"</code><code class="plain">, </code><code class="string">"asp"</code><code class="plain">, </code><code class="string">"ruby"</code> <code class="plain">] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the source option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">source = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"source"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"source"</code><code class="plain">, [ </code><code class="string">"c++"</code><code class="plain">, </code><code class="string">"java"</code><code class="plain">, </code><code class="string">"php"</code><code class="plain">, </code><code class="string">"coldfusion"</code><code class="plain">, </code><code class="string">"javascript"</code><code class="plain">, </code><code class="string">"asp"</code><code class="plain">, </code><code class="string">"ruby"</code> <code class="plain">] );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-close"><div class="api-item first-item">
+-<h3>close()</h3>
+-<div>Closes the Autocomplete menu. Useful in combination with the <a href="#method-search"><code>search</code></a> method, to close the open menu.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the close method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"close"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-destroy"><div class="api-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the autocomplete functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the autocomplete.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the autocomplete.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current autocomplete options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the autocomplete option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the autocomplete.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-search"><div class="api-item">
+-<h3>search(  [value ] )</h3>
+-<div>Triggers a <a href="#event-search"><code>search</code></a> event and invokes the data source if the event is not canceled. Can be used by a selectbox-like button to open the suggestions when clicked. When invoked with no parameters, the current input's value is used. Can be called with an empty string and <code>minLength: 0</code> to display all items.</div>
+-<ul><li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div></div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the search method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"search"</code><code class="plain">, </code><code class="string">""</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()</h3>
+-<div>Returns a <code>jQuery</code> object containing the menu element. Although the menu items are constantly created and destroyed, the menu element itself is created during initialization and is constantly reused.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-change" class="api-item first-item">
+-<h3>change( event, ui )<span class="returns">Type: <code>autocompletechange</code></span>
+-</h3>
+-<div>Triggered when the field is blurred, if the value has changed.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The item selected from the menu, if any. Otherwise the property is <code>null</code>.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the change callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the autocompletechange event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompletechange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-close" class="api-item">
+-<h3>close( event, ui )<span class="returns">Type: <code>autocompleteclose</code></span>
+-</h3>
+-<div>Triggered when the menu is hidden. Not every <code>close</code> event will be accompanied by a <code>change</code> event.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the close callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">close: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the autocompleteclose event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompleteclose"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>autocompletecreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the autocomplete is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the autocompletecreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompletecreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-focus" class="api-item">
+-<h3>focus( event, ui )<span class="returns">Type: <code>autocompletefocus</code></span>
+-</h3>
+-<div>
+-				Triggered when focus is moved to an item (not selecting). The default action is to replace the text field's value with the value of the focused item, though only if the event was triggered by a keyboard interaction.
+-				<p>Canceling this event prevents the value from being updated, but does not prevent the menu item from being focused.</p>
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The focused item.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the focus callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">focus: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the autocompletefocus event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompletefocus"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-open" class="api-item">
+-<h3>open( event, ui )<span class="returns">Type: <code>autocompleteopen</code></span>
+-</h3>
+-<div>Triggered when the suggestion menu is opened or updated.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the open callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">open: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the autocompleteopen event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompleteopen"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-response" class="api-item">
+-<h3>response( event, ui )<span class="returns">Type: <code>autocompleteresponse</code></span>
+-</h3>
+-<div>Triggered after a search completes, before the menu is shown. Useful for local manipulation of suggestion data, where a custom <a href="#option-source"><code>source</code></a> option callback is not required. This event is always triggered when a search completes, even if the menu will not be shown because there are no results or the Autocomplete is disabled.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>content</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
+-</div>
+-<div>Contains the response data and can be modified to change the results that will be shown. This data is already normalized, so if you modify the data, make sure to include both <code>value</code> and <code>label</code> properties for each item.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the response callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">response: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the autocompleteresponse event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompleteresponse"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-search" class="api-item">
+-<h3>search( event, ui )<span class="returns">Type: <code>autocompletesearch</code></span>
+-</h3>
+-<div>Triggered before a search is performed, after <a href="#option-minLength"><code>minLength</code></a> and <a href="#option-delay"><code>delay</code></a> are met. If canceled, then no request will be started and no items suggested.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the search callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">search: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the autocompletesearch event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompletesearch"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-select" class="api-item">
+-<h3>select( event, ui )<span class="returns">Type: <code>autocompleteselect</code></span>
+-</h3>
+-<div>
+-				Triggered when an item is selected from the menu. The default action is to replace the text field's value with the value of the selected item.
+-				<p>Canceling this event prevents the value from being updated, but does not prevent the menu from closing.</p>
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The selected item.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the autocomplete with the select callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).autocomplete({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">select: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the autocompleteselect event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"autocompleteselect"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Examples:</h2></header><div class="entry-example" id="example-0">
+-<h4>Example: <span class="desc">A simple jQuery UI Autocomplete</span>
+-</h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;autocomplete demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"autocomplete"</code><code class="plain">&gt;Select a programming language: &lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"autocomplete"</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1">&nbsp;</div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">$( "#autocomplete" ).autocomplete({</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]</code></div><div class="line number18 index17 alt1"><code class="plain">});</code></div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1">&nbsp;</div><div class="line number21 index20 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div>
+-<div class="entry-example" id="example-1">
+-<h4>Example: <span class="desc">Using a custom source callback to match only the beginning of terms</span>
+-</h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;autocomplete demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"autocomplete"</code><code class="plain">&gt;Select a programming language: &lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"autocomplete"</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1">&nbsp;</div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ];</code></div><div class="line number17 index16 alt2"><code class="plain">$( "#autocomplete" ).autocomplete({</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">source: function( request, response ) {</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">response( $.grep( tags, function( item ){</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">return matcher.test( item );</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}) );</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number24 index23 alt1"><code class="plain">});</code></div><div class="line number25 index24 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1">&nbsp;</div><div class="line number27 index26 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/selectable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/selectable.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/selectable.html	(revision 15488)
+@@ -1,498 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI selectable documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Selectable Widget",
+-		"excerpt":
+-			"Use the mouse to select elements, individually or in a group.",
+-		"termSlugs": {
+-			"category": [
+-				"interactions"
+-			]
+-		}
+-	}</script><article id="selectable1" class="entry widget"><h2 class="section-title">
+-<span>Selectable Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Use the mouse to select elements, individually or in a group.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-appendTo">appendTo</a></div>
+-<div><a href="#option-autoRefresh">autoRefresh</a></div>
+-<div><a href="#option-cancel">cancel</a></div>
+-<div><a href="#option-delay">delay</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-distance">distance</a></div>
+-<div><a href="#option-filter">filter</a></div>
+-<div><a href="#option-tolerance">tolerance</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-refresh">refresh</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-selected">selected</a></div>
+-<div><a href="#event-selecting">selecting</a></div>
+-<div><a href="#event-start">start</a></div>
+-<div><a href="#event-stop">stop</a></div>
+-<div><a href="#event-unselected">unselected</a></div>
+-<div><a href="#event-unselecting">unselecting</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>The jQuery UI Selectable plugin allows for elements to be selected by dragging a box (sometimes called a lasso) with the mouse over the elements. Elements can also be selected via click or drag while holding the ctrl/meta key, allowing for multiple (non-contiguous) selections.</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-appendTo" class="api-item first-item">
+-<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"body"</code>
+-</div>
+-<div>Which element the selection helper (the lasso) should be appended to.</div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the appendTo option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ appendTo: </code><code class="string">"#someElem"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the appendTo option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, </code><code class="string">"#someElem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-autoRefresh" class="api-item">
+-<h3>autoRefresh<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>This determines whether to refresh (recalculate) the position and size of each selectee at the beginning of each select operation. If you have many items, you may want to set this to false and call the <a href="#method-refresh"><code>refresh()</code></a> method manually.</div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the autoRefresh option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ autoRefresh: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the autoRefresh option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">autoRefresh = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoRefresh"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"autoRefresh"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-cancel" class="api-item">
+-<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"input,textarea,button,select,option"</code>
+-</div>
+-<div>Prevents selecting if you start on elements matching the selector.</div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the cancel option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ cancel: a,.cancel });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cancel option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, a,.cancel );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-delay" class="api-item">
+-<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Integer">Integer</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>Time in milliseconds to define when the selecting should start. This helps prevent unwanted selections when clicking on an element.</div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the delay option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ delay: 150 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the delay option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 150 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the selectable if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-distance" class="api-item">
+-<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>Tolerance, in pixels, for when selecting should start. If specified, selecting will not start until the mouse has been dragged beyond the specified distance.</div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the distance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ distance: 30 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the distance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 30 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-filter" class="api-item">
+-<h3>filter<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"*"</code>
+-</div>
+-<div>The matching child elements will be made selectees (able to be selected).</div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the filter option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ filter: li });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the filter option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">filter = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"filter"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"filter"</code><code class="plain">, li );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-tolerance" class="api-item">
+-<h3>tolerance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"touch"</code>
+-</div>
+-<div>
+-				Specifies which mode to use for testing whether the lasso should select an item. Possible values:
+-				<ul>
+-					<li>
+-<code>"fit"</code>: Lasso overlaps the item entirely.</li>
+-					<li>
+-<code>"touch"</code>: Lasso overlaps the item by any amount.</li>
+-				</ul>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the tolerance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({ tolerance: </code><code class="string">"fit"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the tolerance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">tolerance = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code><code class="plain">, </code><code class="string">"fit"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the selectable functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the selectable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the selectable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current selectable options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the selectable option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the selectable.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-refresh"><div class="api-item">
+-<h3>refresh()</h3>
+-<div>Refresh the position and size of each selectee element. This method can be used to manually recalculate the position and size of each selectee when the <a href="#option-autoRefresh"><code>autoRefresh</code></a> option is set to <code>false</code>.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the refresh method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the selectable element.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).selectable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>selectablecreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the selectable is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the selectablecreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectablecreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-selected" class="api-item">
+-<h3>selected( event, ui )<span class="returns">Type: <code>selectableselected</code></span>
+-</h3>
+-<div>Triggered at the end of the select operation, on each element added to the selection.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>selected</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Element">Element</a>
+-</div>
+-<div>The selectable item that has been selected.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the selected callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">selected: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the selectableselected event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectableselected"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-selecting" class="api-item">
+-<h3>selecting( event, ui )<span class="returns">Type: <code>selectableselecting</code></span>
+-</h3>
+-<div>Triggered during the select operation, on each element added to the selection.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>selecting</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Element">Element</a>
+-</div>
+-<div>The current selectable item being selected.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the selecting callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">selecting: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the selectableselecting event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectableselecting"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-start" class="api-item">
+-<h3>start( event, ui )<span class="returns">Type: <code>selectablestart</code></span>
+-</h3>
+-<div>Triggered at the beginning of the select operation.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the start callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the selectablestart event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectablestart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-stop" class="api-item">
+-<h3>stop( event, ui )<span class="returns">Type: <code>selectablestop</code></span>
+-</h3>
+-<div>Triggered at the end of the select operation.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the stop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the selectablestop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectablestop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-unselected" class="api-item">
+-<h3>unselected( event, ui )<span class="returns">Type: <code>selectableunselected</code></span>
+-</h3>
+-<div>Triggered at the end of the select operation, on each element removed from the selection.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>unselected</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Element">Element</a>
+-</div>
+-<div>The selectable item that has been unselected.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the unselected callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">unselected: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the selectableunselected event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectableunselected"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-unselecting" class="api-item">
+-<h3>unselecting( event, ui )<span class="returns">Type: <code>selectableunselecting</code></span>
+-</h3>
+-<div>Triggered during the select operation, on each element removed from the selection.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>unselecting</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Element">Element</a>
+-</div>
+-<div>The current selectable item being unselected.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the selectable with the unselecting callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).selectable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">unselecting: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the selectableunselecting event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"selectableunselecting"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Selectable.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;selectable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#selectable .ui-selecting {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#selectable .ui-selected {</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #999;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2">&nbsp;</div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">ul</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"selectable"</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 1&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 2&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 3&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 4&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;Item 5&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">$( "#selectable" ).selectable();</code></div><div class="line number30 index29 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2">&nbsp;</div><div class="line number32 index31 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number33 index32 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="150"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/menu.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/menu.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/menu.html	(revision 15488)
+@@ -1,644 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI menu documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Menu Widget",
+-		"excerpt":
+-			"\n\t\tThemeable menu with mouse and keyboard interactions for navigation.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="menu1" class="entry widget"><h2 class="section-title">
+-<span>Menu Widget</span><span class="version-details">version added: 1.9</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		Themeable menu with mouse and keyboard interactions for navigation.
+-	</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-icons">icons</a></div>
+-<div><a href="#option-menus">menus</a></div>
+-<div><a href="#option-position">position</a></div>
+-<div><a href="#option-role">role</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-blur">blur</a></div>
+-<div><a href="#method-collapse">collapse</a></div>
+-<div><a href="#method-collapseAll">collapseAll</a></div>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-expand">expand</a></div>
+-<div><a href="#method-focus">focus</a></div>
+-<div><a href="#method-isFirstItem">isFirstItem</a></div>
+-<div><a href="#method-isLastItem">isLastItem</a></div>
+-<div><a href="#method-next">next</a></div>
+-<div><a href="#method-nextPage">nextPage</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-previous">previous</a></div>
+-<div><a href="#method-previousPage">previousPage</a></div>
+-<div><a href="#method-refresh">refresh</a></div>
+-<div><a href="#method-select">select</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-blur">blur</a></div>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-focus">focus</a></div>
+-<div><a href="#event-select">select</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>A menu can be created from any valid markup as long as the elements have a strict parent/child relationship and each menu item has an anchor. The most commonly used element is the unordered list (<code>&lt;ul&gt;</code>):</p>
+-
+-		<pre>
+-&lt;ul id="menu"&gt;
+-	&lt;li&gt;&lt;a href="#"&gt;Item 1&lt;/a&gt;&lt;/li&gt;
+-	&lt;li&gt;&lt;a href="#"&gt;Item 2&lt;/a&gt;&lt;/li&gt;
+-	&lt;li&gt;&lt;a href="#"&gt;Item 3&lt;/a&gt;
+-		&lt;ul&gt;
+-			&lt;li&gt;&lt;a href="#"&gt;Item 3-1&lt;/a&gt;&lt;/li&gt;
+-			&lt;li&gt;&lt;a href="#"&gt;Item 3-2&lt;/a&gt;&lt;/li&gt;
+-			&lt;li&gt;&lt;a href="#"&gt;Item 3-3&lt;/a&gt;&lt;/li&gt;
+-			&lt;li&gt;&lt;a href="#"&gt;Item 3-4&lt;/a&gt;&lt;/li&gt;
+-			&lt;li&gt;&lt;a href="#"&gt;Item 3-5&lt;/a&gt;&lt;/li&gt;
+-		&lt;/ul&gt;
+-	&lt;/li&gt;
+-	&lt;li&gt;&lt;a href="#"&gt;Item 4&lt;/a&gt;&lt;/li&gt;
+-	&lt;li&gt;&lt;a href="#"&gt;Item 5&lt;/a&gt;&lt;/li&gt;
+-&lt;/ul&gt;
+-</pre>
+-
+-		<p>If you use a structure other than <code>&lt;ul&gt;</code>/<code>&lt;li&gt;</code>, including using the same element for the menu and the menu items, use the <a href="#option-menus"><code>menus</code></a> option to specify a way to differentiate the two elements, e.g., <code>menus: "div.menuElement"</code>.</p>
+-
+-		<p>Any menu item can be disabled by adding the <code>ui-state-disabled</code> class to that element.</p>
+-
+-		<p>To add icons to the menu, include them in the markup:</p>
+-
+-		<pre>
+-&lt;ul id="menu"&gt;
+-	&lt;li&gt;&lt;a href="#"&gt;&lt;span class="ui-icon ui-icon-disk"&gt;&lt;/span&gt;Save&lt;/a&gt;&lt;/li&gt;
+-&lt;/ul&gt;
+-</pre>
+-		<p>Menu automatically adds the necessary padding to items without icons.</p>
+-
+-		<h3>Keyboard interaction</h3>
+-
+-		<ul>
+-			<li>ENTER/SPACE: Invoke the focused menu item's action, which may be opening a submenu.</li>
+-			<li>UP: Move focus to the previous menu item.</li>
+-			<li>DOWN: Move focus to the next menu item.</li>
+-			<li>RIGHT: Open the submenu, if available.</li>
+-			<li>LEFT: Close the current submenu and move focus to the parent menu item. If not in a submenu, do nothing.</li>
+-			<li>ESCAPE: Close the current submenu and move focus to the parent menu item. If not in a submenu, do nothing.</li>
+-		</ul>
+-
+-		<p>Typing a letter moves focus to the first item whose title starts with that character. Repeating the same character cycles through matching items. Typing more characters within the one second timer matches those characters.</p>
+-
+-		<p>Disabled items can receive keyboard focus, but do not allow any other interaction.</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-disabled" class="api-item first-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the menu if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the menu with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-icons" class="api-item">
+-<h3>icons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{ submenu: "ui-icon-carat-1-e" }</code>
+-</div>
+-<div>
+-				Icons to use for submenus, matching an icon defined by the jQuery UI CSS Framework.
+-				<ul>
+-					<li>submenu (string, default: "ui-icon-carat-1-e")</li>
+-				</ul>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the menu with the icons option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ icons: { submenu: </code><code class="string">"ui-icon-circle-triangle-e"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the icons option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">icons = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code><code class="plain">, { submenu: </code><code class="string">"ui-icon-circle-triangle-e"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-menus" class="api-item">
+-<h3>menus<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"ul"</code>
+-</div>
+-<div>Selector for the elements that serve as the menu container, including sub-menus.</div>
+-<strong>Code examples:</strong><p>Initialize the menu with the menus option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ menus: </code><code class="string">"div"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the menus option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">menus = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"menus"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"menus"</code><code class="plain">, </code><code class="string">"div"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-position" class="api-item">
+-<h3>position<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{ my: "left top", at: "right top" }</code>
+-</div>
+-<div>Identifies the position of submenus in relation to the associated parent menu item. The <code>of</code> option defaults to the parent menu item, but you can specify another element to position against. You can refer to the <a href="/position/">jQuery UI Position</a> utility for more details about the various options.</div>
+-<strong>Code examples:</strong><p>Initialize the menu with the position option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ position: { my: </code><code class="string">"left top"</code><code class="plain">, at: </code><code class="string">"right-5 top+5"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the position option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">position = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"position"</code><code class="plain">, { my: </code><code class="string">"left top"</code><code class="plain">, at: </code><code class="string">"right-5 top+5"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-role" class="api-item">
+-<h3>role<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"menu"</code>
+-</div>
+-<div>Customize the ARIA roles used for the menu and menu items. The default uses <code>"menuitem"</code> for items. Setting the <code>role</code> option to <code>"listbox"</code> will use <code>"option"</code> for items. If set to <code>null</code>, no roles will be set, which is useful if the menu is being controlled by another element that is maintaining focus.</div>
+-<strong>Code examples:</strong><p>Initialize the menu with the role option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({ role: </code><code class="keyword">null</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the role option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">role = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"role"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"role"</code><code class="plain">, </code><code class="keyword">null</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-blur"><div class="api-item first-item">
+-<h3>blur(  [event ] )</h3>
+-<div>
+-				Removes focus from a menu, resets any active element styles and triggers the menu's <a href="event-blur"><code>blur</code></a> event.
+-			</div>
+-<ul><li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the menu to blur.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the blur method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"blur"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-collapse"><div class="api-item">
+-<h3>collapse(  [event ] )</h3>
+-<div>
+-				Closes the currently active sub-menu.
+-			</div>
+-<ul><li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the menu to collapse.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the collapse method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"collapse"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-collapseAll"><div class="api-item">
+-<h3>collapseAll(  [event ] [, all ] )</h3>
+-<div>
+-				Closes all open sub-menus.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the menu to collapse.</div>
+-</li>
+-<li>
+-<div><strong>all</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Boolean">Boolean</a>
+-</div>
+-<div>Indicates whether all sub-menus should be closed or only sub-menus below and including the menu that is or contains the target of the triggering event.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the collapseAll method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"collapseAll"</code><code class="plain">, </code><code class="keyword">null</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-destroy"><div class="api-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the menu functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the menu.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the menu.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-expand"><div class="api-item">
+-<h3>expand(  [event ] )</h3>
+-<div>
+-				Opens the sub-menu below the currently active item, if one exists.
+-			</div>
+-<ul><li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the menu to expand.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the expand method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"expand"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-focus"><div class="api-item">
+-<h3>focus(  [event ], item )</h3>
+-<div>
+-				Activates a particular menu item, begins opening any sub-menu if present and triggers the menu's <a href="#event-focus"><code>focus</code></a> event.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the menu item to gain focus.</div>
+-</li>
+-<li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The menu item to focus/activate.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the focus method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"focus"</code><code class="plain">, </code><code class="keyword">null</code><code class="plain">, menu.find( </code><code class="string">".ui-menu-item:last"</code> <code class="plain">) );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-isFirstItem"><div class="api-item">
+-<h3>isFirstItem()</h3>
+-<div>
+-				Returns a boolean value stating whether or not the currently active item is the first item in the menu.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the isFirstItem method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">firstItem = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"isFirstItem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-isLastItem"><div class="api-item">
+-<h3>isLastItem()</h3>
+-<div>
+-				Returns a boolean value stating whether or not the currently active item is the last item in the menu.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the isLastItem method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">lastItem = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"isLastItem"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-next"><div class="api-item">
+-<h3>next(  [event ] )</h3>
+-<div>
+-				Moves active state to next menu item.
+-			</div>
+-<ul><li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the focus to move.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the next method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"next"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-nextPage"><div class="api-item">
+-<h3>nextPage(  [event ] )</h3>
+-<div>
+-				Moves active state to first menu item below the bottom of a scrollable menu or the last item if not scrollable.
+-			</div>
+-<ul><li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the focus to move.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the nextPage method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"nextPage"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current menu options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the menu option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the menu.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-previous"><div class="api-item">
+-<h3>previous(  [event ] )</h3>
+-<div>
+-				Moves active state to previous menu item.
+-			</div>
+-<ul><li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the focus to move.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the previous method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"previous"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-previousPage"><div class="api-item">
+-<h3>previousPage(  [event ] )</h3>
+-<div>
+-				Moves active state to first menu item above the top of a scrollable menu or the first item if not scrollable.
+-			</div>
+-<ul><li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the focus to move.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the previousPage method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"previousPage"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-refresh"><div class="api-item">
+-<h3>refresh()</h3>
+-<div>
+-				Initializes sub-menus and menu items that have not already been initialized. New menu items, including sub-menus can be added to the menu or all of the contents of the menu can be replaced and then initialized with the <code>refresh()</code> method.
+-			</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the refresh method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-select"><div class="api-item">
+-<h3>select(  [event ] )</h3>
+-<div>
+-				Selects the currently active menu item, collapses all sub-menus and triggers the menu's <a href="#event-select"><code>select</code></a> event.
+-			</div>
+-<ul><li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div>What triggered the selection.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the select method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"select"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the menu.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).menu( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-blur" class="api-item first-item">
+-<h3>blur( event, ui )<span class="returns">Type: <code>menublur</code></span>
+-</h3>
+-<div>
+-				Triggered when the menu loses focus.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>
+-						The currently active menu item.
+-					</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the menu with the blur callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">blur: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the menublur event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"menublur"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>menucreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the menu is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the menu with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the menucreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"menucreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-focus" class="api-item">
+-<h3>focus( event, ui )<span class="returns">Type: <code>menufocus</code></span>
+-</h3>
+-<div>
+-				Triggered when a menu gains focus or when any menu item is activated.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>
+-						The currently active menu item.
+-					</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the menu with the focus callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">focus: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the menufocus event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"menufocus"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-select" class="api-item">
+-<h3>select( event, ui )<span class="returns">Type: <code>menuselect</code></span>
+-</h3>
+-<div>
+-				Triggered when a menu item is selected.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>item</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>
+-						The currently active menu item.
+-					</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the menu with the select callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).menu({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">select: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the menuselect event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"menuselect"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Menu</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;menu demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">.ui-menu {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 200px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1">&nbsp;</div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">ul</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"menu"</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 1&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 2&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3&lt;/</code><code class="keyword">a</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-1&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-2&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-3&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-4&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 3-5&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 4&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">li</code><code class="plain">&gt;&lt;</code><code class="keyword">a</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"#"</code><code class="plain">&gt;Item 5&lt;/</code><code class="keyword">a</code><code class="plain">&gt;&lt;/</code><code class="keyword">li</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2"><code class="plain">&lt;/</code><code class="keyword">ul</code><code class="plain">&gt;</code></div><div class="line number32 index31 alt1">&nbsp;</div><div class="line number33 index32 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number34 index33 alt1"><code class="plain">$( "#menu" ).menu();</code></div><div class="line number35 index34 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number36 index35 alt1">&nbsp;</div><div class="line number37 index36 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number38 index37 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/size-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/size-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/size-effect.html	(revision 15488)
+@@ -1,45 +0,0 @@
+-<script>{
+-		"title":
+-			"Size Effect",
+-		"excerpt":
+-			"Resize an element to a specified width and height.",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="size1" class="entry effect"><h2 class="section-title"><span>Size Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Resize an element to a specified width and height.</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">size</h4>
+-<ul>
+-<li>
+-<div><strong>to</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Height and width to resize to.</div>
+-</li>
+-<li>
+-<div>
+-<strong>origin</strong> (default: <code>[ "top", "left" ]</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Array">Array</a>
+-</div>
+-<div>The vanishing point.</div>
+-</li>
+-<li>
+-<div>
+-<strong>scale</strong> (default: <code>"both"</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>Which areas of the element will be resized: <code>"both"</code>, <code>"box"</code>, <code>"content"</code>. Box resizes the border and padding of the element; content resizes any content inside of the element.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Resize the element using the size effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;size demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to resize the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).effect( "size", {</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">to: { width: 200, height: 60 }</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}, 1000 );</code></div><div class="line number27 index26 alt2"><code class="plain">});</code></div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2">&nbsp;</div><div class="line number30 index29 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/draggable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/draggable.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/draggable.html	(revision 15488)
+@@ -1,741 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI draggable documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Draggable Widget",
+-		"excerpt":
+-			"Allow elements to be moved using the mouse.",
+-		"termSlugs": {
+-			"category": [
+-				"interactions"
+-			]
+-		}
+-	}</script><article id="draggable1" class="entry widget"><h2 class="section-title">
+-<span>Draggable Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Allow elements to be moved using the mouse.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-addClasses">addClasses</a></div>
+-<div><a href="#option-appendTo">appendTo</a></div>
+-<div><a href="#option-axis">axis</a></div>
+-<div><a href="#option-cancel">cancel</a></div>
+-<div><a href="#option-connectToSortable">connectToSortable</a></div>
+-<div><a href="#option-containment">containment</a></div>
+-<div><a href="#option-cursor">cursor</a></div>
+-<div><a href="#option-cursorAt">cursorAt</a></div>
+-<div><a href="#option-delay">delay</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-distance">distance</a></div>
+-<div><a href="#option-grid">grid</a></div>
+-<div><a href="#option-handle">handle</a></div>
+-<div><a href="#option-helper">helper</a></div>
+-<div><a href="#option-iframeFix">iframeFix</a></div>
+-<div><a href="#option-opacity">opacity</a></div>
+-<div><a href="#option-refreshPositions">refreshPositions</a></div>
+-<div><a href="#option-revert">revert</a></div>
+-<div><a href="#option-revertDuration">revertDuration</a></div>
+-<div><a href="#option-scope">scope</a></div>
+-<div><a href="#option-scroll">scroll</a></div>
+-<div><a href="#option-scrollSensitivity">scrollSensitivity</a></div>
+-<div><a href="#option-scrollSpeed">scrollSpeed</a></div>
+-<div><a href="#option-snap">snap</a></div>
+-<div><a href="#option-snapMode">snapMode</a></div>
+-<div><a href="#option-snapTolerance">snapTolerance</a></div>
+-<div><a href="#option-stack">stack</a></div>
+-<div><a href="#option-zIndex">zIndex</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-start">start</a></div>
+-<div><a href="#event-drag">drag</a></div>
+-<div><a href="#event-stop">stop</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>Make the selected elements draggable by mouse. If you want not just drag, but drag &amp; drop, see the <a href="/droppable/">jQuery UI Droppable plugin</a>, which provides a drop target for draggables.</p>
+-	</div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-addClasses" class="api-item first-item">
+-<h3>addClasses<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>If set to <code>false</code>, will prevent the <code>ui-draggable</code> class from being added. This may be desired as a performance optimization when calling <code>.draggable()</code> on hundreds of elements.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the addClasses option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ addClasses: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the addClasses option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">addClasses = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"addClasses"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"addClasses"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-appendTo" class="api-item">
+-<h3>appendTo<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#jQuery">jQuery</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"parent"</code>
+-</div>
+-<div>Which element the draggable helper should be appended to while dragging.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>jQuery</strong>: A jQuery object containing the element to append the helper to.</li>
+-<li>
+-<strong>Element</strong>: The element to append the helper to.</li>
+-<li>
+-<strong>Selector</strong>: A selector specifying which element to append the helper to.</li>
+-<li>
+-<strong>String</strong>: The string <code>"parent"</code> will cause the helper to be a sibling of the draggable.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the draggable with the appendTo option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ appendTo: </code><code class="string">"body"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the appendTo option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">appendTo = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"appendTo"</code><code class="plain">, </code><code class="string">"body"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-axis" class="api-item">
+-<h3>axis<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Constrains dragging to either the horizontal (x) or vertical (y) axis. Possible values: <code>"x"</code>, <code>"y"</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the axis option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ axis: </code><code class="string">"x"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the axis option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">axis = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"axis"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"axis"</code><code class="plain">, </code><code class="string">"x"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-cancel" class="api-item">
+-<h3>cancel<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"input,textarea,button,select,option"</code>
+-</div>
+-<div>Prevents dragging from starting on specified elements.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the cancel option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ cancel: </code><code class="string">".title"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cancel option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cancel = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cancel"</code><code class="plain">, </code><code class="string">".title"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-connectToSortable" class="api-item">
+-<h3>connectToSortable<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Allows the draggable to be dropped onto the specified sortables. If this option is used, a draggable can be dropped onto a sortable list and then becomes part of it. Note: The <a href="#option-helper"><code>helper</code></a> option must be set to <code>"clone"</code> in order to work flawlessly. Requires the <a href="/sortable/">jQuery UI Sortable plugin</a> to be included.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the connectToSortable option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ connectToSortable: </code><code class="string">"#my-sortable"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the connectToSortable option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">connectToSortable = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"connectToSortable"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"connectToSortable"</code><code class="plain">, </code><code class="string">"#my-sortable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-containment" class="api-item">
+-<h3>containment<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a> or <a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Constrains dragging to within the bounds of the specified element or region.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Selector</strong>: The draggable element will be contained to the bounding box of the first element found by the selector. If no element is found, no containment will be set.</li>
+-<li>
+-<strong>Element</strong>: The draggable element will be contained to the bounding box of this element.</li>
+-<li>
+-<strong>String</strong>: Possible values: <code>"parent"</code>, <code>"document"</code>, <code>"window"</code>.</li>
+-<li>
+-<strong>Array</strong>: An array defining a bounding box in the form <code>[ x1, y1, x2, y2 ]</code>.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the draggable with the containment option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ containment: </code><code class="string">"parent"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the containment option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">containment = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"containment"</code><code class="plain">, </code><code class="string">"parent"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-cursor" class="api-item">
+-<h3>cursor<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"auto"</code>
+-</div>
+-<div>The CSS cursor during the drag operation.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the cursor option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ cursor: </code><code class="string">"crosshair"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cursor option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cursor = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursor"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursor"</code><code class="plain">, </code><code class="string">"crosshair"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-cursorAt" class="api-item">
+-<h3>cursorAt<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Sets the offset of the dragging helper relative to the mouse cursor. Coordinates can be given as a hash using a combination of one or two keys: <code>{ top, left, right, bottom }</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the cursorAt option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ cursorAt: { left: 5 } });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the cursorAt option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">cursorAt = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursorAt"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"cursorAt"</code><code class="plain">, { left: 5 } );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-delay" class="api-item">
+-<h3>delay<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>0</code>
+-</div>
+-<div>Time in milliseconds after mousedown until dragging should start. This option can be used to prevent unwanted drags when clicking on an element.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the delay option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ delay: 300 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the delay option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">delay = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"delay"</code><code class="plain">, 300 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the draggable if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-distance" class="api-item">
+-<h3>distance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>Distance in pixels after mousedown the mouse must move before dragging should start. This option can be used to prevent unwanted drags when clicking on an element.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the distance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ distance: 10 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the distance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">distance = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"distance"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-grid" class="api-item">
+-<h3>grid<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Array">Array</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Snaps the dragging helper to a grid, every x and y pixels. The array must be of the form <code>[ x, y ]</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the grid option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ grid: [ 50, 20 ] });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the grid option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">grid = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"grid"</code><code class="plain">, [ 50, 20 ] );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-handle" class="api-item">
+-<h3>handle<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types#Element">Element</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If specified, restricts dragging from starting unless the mousedown occurs on the specified element(s).</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the handle option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ handle: </code><code class="string">"h2"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the handle option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">handle = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handle"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"handle"</code><code class="plain">, </code><code class="string">"h2"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-helper" class="api-item">
+-<h3>helper<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"original"</code>
+-</div>
+-<div>Allows for a helper element to be used for dragging display.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>String</strong>: If set to <code>"clone"</code>, then the element will be cloned and the clone will be dragged.</li>
+-<li>
+-<strong>Function</strong>: A function that will return a DOMElement to use while dragging.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the draggable with the helper option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ helper: </code><code class="string">"clone"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the helper option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">helper = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"helper"</code><code class="plain">, </code><code class="string">"clone"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-iframeFix" class="api-item">
+-<h3>iframeFix<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Prevent iframes from capturing the mousemove events during a drag. Useful in combination with the <a href="#option-cursorAt"><code>cursorAt</code></a> option, or in any case where the mouse cursor may not be over the helper.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: When set to <code>true</code>, transparent overlays will be placed over all iframes on the page.</li>
+-<li>
+-<strong>Selector</strong>: Any iframes matching the selector will be covered by transparent overlays.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the draggable with the iframeFix option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ iframeFix: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the iframeFix option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">iframeFix = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"iframeFix"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"iframeFix"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-opacity" class="api-item">
+-<h3>opacity<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Opacity for the helper while being dragged.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the opacity option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ opacity: 0.35 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the opacity option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">opacity = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"opacity"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"opacity"</code><code class="plain">, 0.35 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-refreshPositions" class="api-item">
+-<h3>refreshPositions<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>
+-				If set to <code>true</code>, all droppable positions are calculated on every mousemove.
+-				<em>Caution: This solves issues on highly dynamic pages, but dramatically decreases performance.</em>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the refreshPositions option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ refreshPositions: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the refreshPositions option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">refreshPositions = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"refreshPositions"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"refreshPositions"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-revert" class="api-item">
+-<h3>revert<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the element should revert to its start position when dragging stops.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: If set to <code>true</code> the element will always revert.</li>
+-<li>
+-<strong>String</strong>: If set to <code>"invalid"</code>, revert will only occur if the draggable has not been dropped on a droppable. For <code>"valid"</code>, it's the other way around.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the draggable with the revert option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ revert: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the revert option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">revert = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revert"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revert"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-revertDuration" class="api-item">
+-<h3>revertDuration<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>500</code>
+-</div>
+-<div>The duration of the revert animation, in milliseconds. Ignored if the <a href="#option-revert"><code>revert</code></a> option is <code>false</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the revertDuration option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ revertDuration: 200 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the revertDuration option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">revertDuration = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revertDuration"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"revertDuration"</code><code class="plain">, 200 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-scope" class="api-item">
+-<h3>scope<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"default"</code>
+-</div>
+-<div>Used to group sets of draggable and droppable items, in addition to droppable's <a href="/droppable#option-accept"><code>accept</code></a> option. A draggable with the same <code>scope</code> value as a droppable will be accepted by the droppable.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the scope option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ scope: </code><code class="string">"tasks"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the scope option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scope = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scope"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scope"</code><code class="plain">, </code><code class="string">"tasks"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-scroll" class="api-item">
+-<h3>scroll<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>If set to <code>true</code>, container auto-scrolls while dragging.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the scroll option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ scroll: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the scroll option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scroll = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scroll"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scroll"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-scrollSensitivity" class="api-item">
+-<h3>scrollSensitivity<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>20</code>
+-</div>
+-<div>Distance in pixels from the edge of the viewport after which the viewport should scroll. Distance is relative to pointer, not the draggable. Ignored if the <a href="#option-scroll"><code>scroll</code></a> option is <code>false</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the scrollSensitivity option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ scrollSensitivity: 100 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the scrollSensitivity option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scrollSensitivity = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSensitivity"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSensitivity"</code><code class="plain">, 100 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-scrollSpeed" class="api-item">
+-<h3>scrollSpeed<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>20</code>
+-</div>
+-<div>The speed at which the window should scroll once the mouse pointer gets within the <a href="#option-scrollSensitivity"><code>scrollSensitivity</code></a> distance. Ignored if the <a href="#option-scroll"><code>scroll</code></a> option is <code>false</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the scrollSpeed option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ scrollSpeed: 100 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the scrollSpeed option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scrollSpeed = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSpeed"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scrollSpeed"</code><code class="plain">, 100 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-snap" class="api-item">
+-<h3>snap<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Whether the element should snap to other elements.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: When set to <code>true</code>, the element will snap to all other draggable elements.</li>
+-<li>
+-<strong>Selector</strong>: A selector specifying which elements to snap to.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the draggable with the snap option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ snap: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the snap option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">snap = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snap"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snap"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-snapMode" class="api-item">
+-<h3>snapMode<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"both"</code>
+-</div>
+-<div>Determines which edges of snap elements the draggable will snap to. Ignored if the <a href="#option-snap"><code>snap</code></a> option is <code>false</code>. Possible values: <code>"inner"</code>, <code>"outer"</code>, <code>"both"</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the snapMode option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ snapMode: </code><code class="string">"inner"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the snapMode option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">snapMode = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snapMode"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snapMode"</code><code class="plain">, </code><code class="string">"inner"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-snapTolerance" class="api-item">
+-<h3>snapTolerance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>20</code>
+-</div>
+-<div>The distance in pixels from the snap element edges at which snapping should occur. Ignored if the <a href="#option-snap"><code>snap</code></a> option is <code>false</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the snapTolerance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ snapTolerance: 30 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the snapTolerance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">snapTolerance = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snapTolerance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"snapTolerance"</code><code class="plain">, 30 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-stack" class="api-item">
+-<h3>stack<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Controls the z-index of the set of elements that match the selector, always brings the currently dragged item to the front. Very useful in things like window managers.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the stack option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ stack: </code><code class="string">".products"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the stack option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">stack = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"stack"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"stack"</code><code class="plain">, </code><code class="string">".products"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-zIndex" class="api-item">
+-<h3>zIndex<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Z-index for the helper while being dragged.</div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the zIndex option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({ zIndex: 100 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the zIndex option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">zIndex = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"zIndex"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"zIndex"</code><code class="plain">, 100 );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the draggable functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the draggable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the draggable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current draggable options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the draggable option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the draggable.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the draggable element.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).draggable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>dragcreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the draggable is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dragcreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dragcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-drag" class="api-item">
+-<h3>drag( event, ui )<span class="returns">Type: <code>drag</code></span>
+-</h3>
+-<div>Triggered while the mouse is moved during the dragging.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper that's being dragged.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current CSS position of the helper as <code>{ top, left }</code> object.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current offset position of the helper as <code>{ top, left }</code> object.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the drag callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">drag: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the drag event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"drag"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-start" class="api-item">
+-<h3>start( event, ui )<span class="returns">Type: <code>dragstart</code></span>
+-</h3>
+-<div>Triggered when dragging starts.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper that's being dragged.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current CSS position of the helper as <code>{ top, left }</code> object.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current offset position of the helper as <code>{ top, left }</code> object.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the start callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dragstart event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dragstart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-stop" class="api-item">
+-<h3>stop( event, ui )<span class="returns">Type: <code>dragstop</code></span>
+-</h3>
+-<div>Triggered when dragging stops.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>The jQuery object representing the helper that's being dragged.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current CSS position of the helper as <code>{ top, left }</code> object.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current offset position of the helper as <code>{ top, left }</code> object.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the draggable with the stop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).draggable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dragstop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dragstop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A simple jQuery UI Draggable</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;draggable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#draggable {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"draggable"</code><code class="plain">&gt;Drag me&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1">&nbsp;</div><div class="line number21 index20 alt2"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number22 index21 alt1"><code class="plain">$( "#draggable" ).draggable();</code></div><div class="line number23 index22 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1">&nbsp;</div><div class="line number25 index24 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/droppable.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/droppable.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/droppable.html	(revision 15488)
+@@ -1,548 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI droppable documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Droppable Widget",
+-		"excerpt":
+-			"Create targets for draggable elements.",
+-		"termSlugs": {
+-			"category": [
+-				"interactions"
+-			]
+-		}
+-	}</script><article id="droppable1" class="entry widget"><h2 class="section-title">
+-<span>Droppable Widget</span><span class="version-details">version added: 1.0</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Create targets for draggable elements.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-accept">accept</a></div>
+-<div><a href="#option-activeClass">activeClass</a></div>
+-<div><a href="#option-addClasses">addClasses</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-greedy">greedy</a></div>
+-<div><a href="#option-hoverClass">hoverClass</a></div>
+-<div><a href="#option-scope">scope</a></div>
+-<div><a href="#option-tolerance">tolerance</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-activate">activate</a></div>
+-<div><a href="#event-deactivate">deactivate</a></div>
+-<div><a href="#event-over">over</a></div>
+-<div><a href="#event-out">out</a></div>
+-<div><a href="#event-drop">drop</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>The jQuery UI Droppable plugin makes selected elements droppable (meaning they accept being dropped on by <a href="/draggable/">draggables</a>). You can specify which draggables each will accept.</p>
+-	</div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-accept" class="api-item first-item">
+-<h3>accept<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Selector">Selector</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"*"</code>
+-</div>
+-<div>Controls which draggable elements are accepted by the droppable.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Selector</strong>: A selector indicating which draggable elements are accepted.</li>
+-<li>
+-<strong>Function</strong>: A function that will be called for each draggable on the page (passed as the first argument to the function). The function must return <code>true</code> if the draggable should be accepted.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the droppable with the accept option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ accept: </code><code class="string">".special"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the accept option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">accept = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"accept"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"accept"</code><code class="plain">, </code><code class="string">".special"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-activeClass" class="api-item">
+-<h3>activeClass<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If specified, the class will be added to the droppable while an acceptable draggable is being dragged.</div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the activeClass option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ activeClass: </code><code class="string">"ui-state-highlight"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the activeClass option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">activeClass = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"activeClass"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"activeClass"</code><code class="plain">, </code><code class="string">"ui-state-highlight"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-addClasses" class="api-item">
+-<h3>addClasses<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>If set to <code>false</code>, will prevent the <code>ui-droppable</code> class from being added. This may be desired as a performance optimization when calling <code>.droppable()</code> init on hundreds of elements.</div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the addClasses option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ addClasses: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the addClasses option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">addClasses = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"addClasses"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"addClasses"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the droppable if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-greedy" class="api-item">
+-<h3>greedy<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>By default, when an element is dropped on nested droppables, each droppable will receive the element. However, by setting this option to <code>true</code>, any parent droppables will not receive the element.</div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the greedy option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ greedy: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the greedy option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">greedy = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"greedy"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"greedy"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-hoverClass" class="api-item">
+-<h3>hoverClass<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>If specified, the class will be added to the droppable while an acceptable draggable is being hovered over the droppable.</div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the hoverClass option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ hoverClass: </code><code class="string">"drop-hover"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the hoverClass option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">hoverClass = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hoverClass"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"hoverClass"</code><code class="plain">, </code><code class="string">"drop-hover"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-scope" class="api-item">
+-<h3>scope<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"default"</code>
+-</div>
+-<div>Used to group sets of draggable and droppable items, in addition to the <a href="#option-accept"><code>accept</code></a> option. A draggable with the same scope value as a droppable will be accepted.</div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the scope option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ scope: </code><code class="string">"tasks"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the scope option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">scope = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scope"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"scope"</code><code class="plain">, </code><code class="string">"tasks"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-tolerance" class="api-item">
+-<h3>tolerance<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>"intersect"</code>
+-</div>
+-<div>
+-				Specifies which mode to use for testing whether a draggable is hovering over a droppable. Possible values:
+-				<ul>
+-					<li>
+-<code>"fit"</code>: Draggable overlaps the droppable entirely.</li>
+-					<li>
+-<code>"intersect"</code>: Draggable overlaps the droppable at least 50% in both directions.</li>
+-					<li>
+-<code>"pointer"</code>: Mouse pointer overlaps the droppable.</li>
+-					<li>
+-<code>"touch"</code>: Draggable overlaps the droppable any amount.</li>
+-				</ul>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the tolerance option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({ tolerance: </code><code class="string">"fit"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the tolerance option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">tolerance = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"tolerance"</code><code class="plain">, </code><code class="string">"fit"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the droppable functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the droppable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the droppable.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current droppable options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the droppable option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the droppable.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the droppable element.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).droppable( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-activate" class="api-item first-item">
+-<h3>activate( event, ui )<span class="returns">Type: <code>dropactivate</code></span>
+-</h3>
+-<div>Triggered when an accepted draggable starts dragging. This can be useful if you want to make the droppable "light up" when it can be dropped on.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>draggable</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>A jQuery object representing the draggable element.</div>
+-</li>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>A jQuery object representing the helper that is being dragged.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current CSS position of the draggable helper as <code>{ top, left }</code> object.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current offset position of the draggable helper as <code>{ top, left }</code> object.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the activate callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">activate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dropactivate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>dropcreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the droppable is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dropcreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropcreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-deactivate" class="api-item">
+-<h3>deactivate( event, ui )<span class="returns">Type: <code>dropdeactivate</code></span>
+-</h3>
+-<div>Triggered when an accepted draggable stops dragging.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>draggable</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>A jQuery object representing the draggable element.</div>
+-</li>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>A jQuery object representing the helper that is being dragged.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current CSS position of the draggable helper as <code>{ top, left }</code> object.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current offset position of the draggable helper as <code>{ top, left }</code> object.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the deactivate callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">deactivate: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dropdeactivate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropdeactivate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-drop" class="api-item">
+-<h3>drop( event, ui )<span class="returns">Type: <code>drop</code></span>
+-</h3>
+-<div>Triggered when an accepted draggable is dropped on the droppable (based on the<a href="#option-tolerance"><code>tolerance</code></a> option).</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>draggable</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>A jQuery object representing the draggable element.</div>
+-</li>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>A jQuery object representing the helper that is being dragged.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current CSS position of the draggable helper as <code>{ top, left }</code> object.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current offset position of the draggable helper as <code>{ top, left }</code> object.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the drop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">drop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the drop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"drop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-out" class="api-item">
+-<h3>out( event, ui )<span class="returns">Type: <code>dropout</code></span>
+-</h3>
+-<div>Triggered when an accepted draggable is dragged out of the droppable (based on the<a href="#option-tolerance"><code>tolerance</code></a> option).</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the out callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">out: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dropout event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropout"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-over" class="api-item">
+-<h3>over( event, ui )<span class="returns">Type: <code>dropover</code></span>
+-</h3>
+-<div>Triggered when an accepted draggable is dragged over the droppable (based on the<a href="#option-tolerance"><code>tolerance</code></a> option).</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul>
+-<li>
+-<div><strong>draggable</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>A jQuery object representing the draggable element.</div>
+-</li>
+-<li>
+-<div><strong>helper</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#jQuery">jQuery</a>
+-</div>
+-<div>A jQuery object representing the helper that is being dragged.</div>
+-</li>
+-<li>
+-<div><strong>position</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current CSS position of the draggable helper as <code>{ top, left }</code> object.</div>
+-</li>
+-<li>
+-<div><strong>offset</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>Current offset position of the draggable helper as <code>{ top, left }</code> object.</div>
+-</li>
+-</ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the droppable with the over callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).droppable({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">over: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the dropover event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"dropover"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">A pair of draggable and droppable elements.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;droppable demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#draggable {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#droppable {</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">position: absolute;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">left: 250px;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">top: 0;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 125px;</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 125px;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #999;</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">color: #fff;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">padding: 10px;</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number28 index27 alt1">&nbsp;</div><div class="line number29 index28 alt2"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"droppable"</code><code class="plain">&gt;Drop here&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number30 index29 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"draggable"</code><code class="plain">&gt;Drag me&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number31 index30 alt2">&nbsp;</div><div class="line number32 index31 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number33 index32 alt2"><code class="plain">$( "#draggable" ).draggable();</code></div><div class="line number34 index33 alt1"><code class="plain">$( "#droppable" ).droppable({</code></div><div class="line number35 index34 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">drop: function() {</code></div><div class="line number36 index35 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">alert( "dropped" );</code></div><div class="line number37 index36 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number38 index37 alt1"><code class="plain">});</code></div><div class="line number39 index38 alt2"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number40 index39 alt1">&nbsp;</div><div class="line number41 index40 alt2"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number42 index41 alt1"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/button.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/button.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/button.html	(revision 15488)
+@@ -1,272 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI button documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Button Widget",
+-		"excerpt":
+-			"Themable buttons and button sets.",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="button1" class="entry widget"><h2 class="section-title">
+-<span>Button Widget</span><span class="version-details">version added: 1.8</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>Themable buttons and button sets.</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-icons">icons</a></div>
+-<div><a href="#option-label">label</a></div>
+-<div><a href="#option-text">text</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-refresh">refresh</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>Button enhances standard form elements like buttons, inputs and anchors to themable buttons with appropiate hover and active styles.</p>
+-
+-		<p>In addition to basic push buttons, radio buttons and checkboxes (inputs of type radio and checkbox) can be converted to buttons. Their associated label is styled to appear as the button, while the underlying input is updated on click. For the association to work properly, give the input an <code>id</code> attribute, and refer to that in the label's <code>for</code> attribute. Don't nest the input inside the label, as that <a href="http://www.paciellogroup.com/blog/2011/07/html5-accessibility-chops-form-control-labeling/">causes accessbility problems</a>.</p>
+-
+-		<p>In order to group radio buttons, Button also provides an additional widget, called Buttonset. Buttonset is used by selecting a container element (which contains the radio buttons) and calling <code>.buttonset()</code>. Buttonset will also provide visual grouping, and therefore should be used whenever you have a group of buttons. It works by selecting all descendants and applying <code>.button()</code> to them. You can enable and disable a button set, which will enable and disable all contained buttons. Destroying a button set also calls each button's <code>destroy</code> method.</p>
+-
+-		<p>When using an input of type button, submit or reset, support is limited to plain text labels with no icons.</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-disabled" class="api-item first-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the button if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the button with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-icons" class="api-item">
+-<h3>icons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{ primary: null, secondary: null }</code>
+-</div>
+-<div>Icons to display, with or without text (see <a href="#option-text"><code>text</code></a> option). By default, the primary icon is displayed on the left of the label text and the secondary is displayed on the right. The positioning can be controlled via CSS. The value for the <code>primary</code> and <code>secondary</code> properties must be a class name, e.g., <code>"ui-icon-gear"</code>. For using only one icon: <code>icons: { primary: "ui-icon-locked" }</code>. For using two icons: <code>icons: { primary: "ui-icon-gear", secondary: "ui-icon-triangle-1-s" }</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the button with the icons option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({ icons: { primary: </code><code class="string">"ui-icon-gear"</code><code class="plain">, secondary: </code><code class="string">"ui-icon-triangle-1-s"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the icons option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">icons = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code><code class="plain">, { primary: </code><code class="string">"ui-icon-gear"</code><code class="plain">, secondary: </code><code class="string">"ui-icon-triangle-1-s"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-label" class="api-item">
+-<h3>label<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Text to show in the button. When not specified (<code>null</code>), the element's HTML content is used, or its <code>value</code> attribute if the element is an input element of type submit or reset, or the HTML content of the associated label element if the element is an input of type radio or checkbox.</div>
+-<strong>Code examples:</strong><p>Initialize the button with the label option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({ label: </code><code class="string">"custom label"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the label option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">label = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"label"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"label"</code><code class="plain">, </code><code class="string">"custom label"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-text" class="api-item">
+-<h3>text<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>Whether to show the label. When set to <code>false</code> no text will be displayed, but the <a href="#options-icons"><code>icons</code></a> option must be enabled, otherwise the <code>text</code> option will be ignored.</div>
+-<strong>Code examples:</strong><p>Initialize the button with the text option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({ text: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the text option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">text = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"text"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"text"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the button functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the button.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the button.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current button options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the button option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the button.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-refresh"><div class="api-item">
+-<h3>refresh()</h3>
+-<div>Refreshes the visual state of the button. Useful for updating button state after the native element's checked or disabled state is changed programmatically.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the refresh method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"refresh"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the element visually representing the button.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).button( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-create" class="api-item first-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>buttoncreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the button is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the button with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).button({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the buttoncreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"buttoncreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Examples:</h2></header><div class="entry-example" id="example-0">
+-<h4>Example: <span class="desc">A simple jQuery UI Button</span>
+-</h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;button demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">button</code><code class="plain">&gt;Button label&lt;/</code><code class="keyword">button</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "button" ).button();</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="100"></div>
+-</div>
+-<div class="entry-example" id="example-1">
+-<h4>Example: <span class="desc">A simple jQuery UI Buttonset</span>
+-</h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;button demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"radio"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">type</code><code class="plain">=</code><code class="string">"radio"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"radio1"</code> <code class="color1">name</code><code class="plain">=</code><code class="string">"radio"</code><code class="plain">&gt;&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"radio1"</code><code class="plain">&gt;Choice 1&lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">type</code><code class="plain">=</code><code class="string">"radio"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"radio2"</code> <code class="color1">name</code><code class="plain">=</code><code class="string">"radio"</code> <code class="color1">checked</code><code class="plain">=</code><code class="string">"checked"</code><code class="plain">&gt;&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"radio2"</code><code class="plain">&gt;Choice 2&lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">type</code><code class="plain">=</code><code class="string">"radio"</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"radio3"</code> <code class="color1">name</code><code class="plain">=</code><code class="string">"radio"</code><code class="plain">&gt;&lt;</code><code class="keyword">label</code> <code class="color1">for</code><code class="plain">=</code><code class="string">"radio3"</code><code class="plain">&gt;Choice 3&lt;/</code><code class="keyword">label</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="plain">$( "#radio" ).buttonset();</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="100"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/spinner.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/spinner.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/spinner.html	(revision 15488)
+@@ -1,572 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI spinner documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Spinner Widget",
+-		"excerpt":
+-			"\n\t\tEnhance a text input for entering numeric values, with up/down buttons and arrow key handling.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"widgets"
+-			]
+-		}
+-	}</script><article id="spinner1" class="entry widget"><h2 class="section-title">
+-<span>Spinner Widget</span><span class="version-details">version added: 1.9</span>
+-</h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		Enhance a text input for entering numeric values, with up/down buttons and arrow key handling.
+-	</p>
+-<section id="quick-nav"><header><h2>QuickNav<a href="#entry-examples">Examples</a>
+-</h2></header><div class="quick-nav-section">
+-<h3>Options</h3>
+-<div><a href="#option-culture">culture</a></div>
+-<div><a href="#option-disabled">disabled</a></div>
+-<div><a href="#option-icons">icons</a></div>
+-<div><a href="#option-incremental">incremental</a></div>
+-<div><a href="#option-max">max</a></div>
+-<div><a href="#option-min">min</a></div>
+-<div><a href="#option-numberFormat">numberFormat</a></div>
+-<div><a href="#option-page">page</a></div>
+-<div><a href="#option-step">step</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Methods</h3>
+-<div><a href="#method-destroy">destroy</a></div>
+-<div><a href="#method-disable">disable</a></div>
+-<div><a href="#method-enable">enable</a></div>
+-<div><a href="#method-option">option</a></div>
+-<div><a href="#method-pageDown">pageDown</a></div>
+-<div><a href="#method-pageUp">pageUp</a></div>
+-<div><a href="#method-stepDown">stepDown</a></div>
+-<div><a href="#method-stepUp">stepUp</a></div>
+-<div><a href="#method-value">value</a></div>
+-<div><a href="#method-widget">widget</a></div>
+-</div>
+-<div class="quick-nav-section">
+-<h3>Events</h3>
+-<div><a href="#event-create">create</a></div>
+-<div><a href="#event-start">start</a></div>
+-<div><a href="#event-spin">spin</a></div>
+-<div><a href="#event-stop">stop</a></div>
+-<div><a href="#event-change">change</a></div>
+-</div></section><div class="longdesc" id="entry-longdesc">
+-		<p>Spinner, or number stepper, widget is perfect for handling all kinds of numeric input. It allow users to type a value directly or modify an existing value by spinning with the keyboard, mouse or scrollwheel. When combined with Globalize, you can even spin currencies and dates in a variety of locales.</p>
+-
+-		<p>Spinner wraps a text input, adds two buttons to increment and decrement the current value, along with handling key events for the same purpose. It delegates to <a href="https://github.com/jquery/globalize">Globalize</a> for number formatting and parsing.</p>
+-
+-		<h3>Keyboard interaction</h3>
+-
+-		<ul>
+-			<li>UP: Increment the value by one step.</li>
+-			<li>DOWN: Decrement the value by one step.</li>
+-			<li>PAGE UP: Increment the value by one page.</li>
+-			<li>PAGE DOWN: Decrement the value by one page.</li>
+-		</ul>
+-
+-		<p>Focus stays in the text field, even after using the mouse to click one of the spin buttons.</p>
+-	</div>
+-<h3>Additional Notes:</h3>
+-<div class="longdesc"><ul><li>
+-			This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point.
+-		</li></ul></div>
+-<section id="options"><header><h2 class="underline">Options</h2></header><div id="option-culture" class="api-item first-item">
+-<h3>culture<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Sets the culture to use for parsing and formatting the value. If <code>null</code>, the currently set culture in <code>Globalize</code> is used, see <a href="https://github.com/jquery/globalize">Globalize docs</a> for available cultures. Only relevant if the <a href="#option-numberFormat"><code>numberFormat</code></a> option is set. Requires <a href="https://github.com/jquery/globalize">Globalize</a> to be included.</div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the culture option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ culture: </code><code class="string">"fr"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the culture option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">culture = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"culture"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"culture"</code><code class="plain">, </code><code class="string">"fr"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-disabled" class="api-item">
+-<h3>disabled<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>false</code>
+-</div>
+-<div>Disables the spinner if set to <code>true</code>.</div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the disabled option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ disabled: </code><code class="keyword">true</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the disabled option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">disabled = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-icons" class="api-item">
+-<h3>icons<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>{ down: "ui-icon-triangle-1-s", up: "ui-icon-triangle-1-n" }</code>
+-</div>
+-<div>
+-				Icons to use for buttons, matching an icon defined by the jQuery UI CSS Framework.
+-				<ul>
+-					<li>up (string, default: "ui-icon-triangle-1-n")</li>
+-					<li>down (string, default: "ui-icon-triangle-1-s")</li>
+-				</ul>
+-			</div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the icons option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ icons: { down: </code><code class="string">"custom-down-icon"</code><code class="plain">, up: </code><code class="string">"custom-up-icon"</code> <code class="plain">} });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the icons option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">icons = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"icons"</code><code class="plain">, { down: </code><code class="string">"custom-down-icon"</code><code class="plain">, up: </code><code class="string">"custom-up-icon"</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-incremental" class="api-item">
+-<h3>incremental<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Boolean">Boolean</a> or <a href="http://api.jquery.com/Types/#Function">Function</a>()</span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>true</code>
+-</div>
+-<div>Controls the number of steps taken when holding down a spin button.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Boolean</strong>: When set to <code>true</code>, the stepping delta will increase when spun incessantly. When set to <code>false</code>, all steps are equal (as defined by the <a href="#option-step"><code>step</code></a> option).</li>
+-<li>
+-<strong>Function</strong>: Receives one parameter: the number of spins that have occurred. Must return the number of steps that should occur for the current spin.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the spinner with the incremental option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ incremental: </code><code class="keyword">false</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the incremental option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">incremental = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"incremental"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"incremental"</code><code class="plain">, </code><code class="keyword">false</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-max" class="api-item">
+-<h3>max<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>The maximum allowed value. The element's <code>max</code> attribute is used if it exists and the option is not explicitly set. If <code>null</code>, there is no maximum enforced.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: The maximum value.</li>
+-<li>
+-<strong>String</strong>: If <a href="https://github.com/jquery/globalize">Globalize</a> is included, the <code>max</code> option can be passed as a string which will be parsed based on the <a href="#opiton-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options; otherwise it will fall back to the native <code>parseFloat()</code> method.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the spinner with the max option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ max: 50 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the max option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">max = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"max"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-min" class="api-item">
+-<h3>min<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>The minimum allowed value. The element's <code>min</code> attribute is used if it exists and the option is not explicitly set. If <code>null</code>, there is no minimum enforced.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: The minimum value.</li>
+-<li>
+-<strong>String</strong>: If <a href="https://github.com/jquery/globalize">Globalize</a> is included, the <code>min</code> option can be passed as a string which will be parsed based on the <a href="#opiton-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options; otherwise it will fall back to the native <code>parseFloat()</code> method.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the spinner with the min option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ min: 0 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the min option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">min = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"min"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"min"</code><code class="plain">, 0 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-numberFormat" class="api-item">
+-<h3>numberFormat<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>null</code>
+-</div>
+-<div>Format of numbers passed to  <a href="https://github.com/jquery/globalize"><code>Globalize</code></a>, if available. Most common are <code>"n"</code> for a decimal number and <code>"C"</code> for a currency value. Also see the <a href="#option-culture"><code>culture</code></a> option.</div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the numberFormat option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ numberFormat: </code><code class="string">"n"</code> <code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the numberFormat option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">numberFormat = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"numberFormat"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"numberFormat"</code><code class="plain">, </code><code class="string">"n"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-page" class="api-item">
+-<h3>page<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>10</code>
+-</div>
+-<div>The number of steps to take when paging via the <a href="#method-pageUp"><code>pageUp</code></a>/<a href="#method-pageDown"><code>pageDown</code></a> methods.</div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the page option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ page: 5 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the page option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">page = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"page"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"page"</code><code class="plain">, 5 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-<div id="option-step" class="api-item">
+-<h3>step<span class="option-type"><strong>Type: </strong><a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a></span>
+-</h3>
+-<div class="default">
+-<strong>Default: </strong><code>1</code>
+-</div>
+-<div>The size of the step to take when spinning via buttons or via the <a href="#method-stepUp"><code>stepUp()</code></a>/<a href="#method-stepDown"><code>stepDown()</code></a> methods. The element's <code>step</code> attribute is used if it exists and the option is not explicitly set.</div>
+-<strong>Multiple types supported:</strong><ul>
+-<li>
+-<strong>Number</strong>: The size of the step.</li>
+-<li>
+-<strong>String</strong>: If <a href="https://github.com/jquery/globalize">Globalize</a> is included, the <code>step</code> option can be passed as a string which will be parsed based on the <a href="#opiton-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options, otherwise it will fall back to the native <code>parseFloat</code>.</li>
+-</ul>
+-<strong>Code examples:</strong><p>Initialize the spinner with the step option specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({ step: 2 });</code></div></div></td></tr></tbody></table></div>
+-<p>Get or set the step option, after initialization:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// getter</code></div><div class="line number2 index1 alt1"><code class="keyword">var</code> <code class="plain">step = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"step"</code> <code class="plain">);</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="comments">// setter</code></div><div class="line number5 index4 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"step"</code><code class="plain">, 2 );</code></div></div></td></tr></tbody></table></div>
+-</div></section><section id="methods"><header><h2 class="underline">Methods</h2></header><div id="method-destroy"><div class="api-item first-item">
+-<h3>destroy()</h3>
+-<div>
+-		Removes the spinner functionality completely. This will return the element back to its pre-init state.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the destroy method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"destroy"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-disable"><div class="api-item">
+-<h3>disable()</h3>
+-<div>
+-		Disables the spinner.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the disable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"disable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-enable"><div class="api-item">
+-<h3>enable()</h3>
+-<div>
+-		Enables the spinner.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the enable method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"enable"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-option">
+-<div class="api-item">
+-<h3>option( optionName )<span class="returns">Returns: <a href="http://api.jquery.com/Types#Object">Object</a></span>
+-</h3>
+-<div>Gets the value currently associated with the specified <code>optionName</code>.</div>
+-<ul><li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to get.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">isDisabled = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option()<span class="returns">Returns: <a href="http://api.jquery.com/Types#PlainObject">PlainObject</a></span>
+-</h3>
+-<div>Gets an object containing key/value pairs representing the current spinner options hash.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">options = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( optionName, value )</h3>
+-<div>Sets the value of the spinner option associated with the specified <code>optionName</code>.</div>
+-<ul>
+-<li>
+-<div><strong>optionName</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The name of the option to set.</div>
+-</li>
+-<li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A value to set for the option.</div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, </code><code class="string">"disabled"</code><code class="plain">, </code><code class="keyword">true</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>option( options )</h3>
+-<div>Sets one or more options for the spinner.</div>
+-<ul><li>
+-<div><strong>options</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div>A map of option-value pairs to set.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"option"</code><code class="plain">, { disabled: </code><code class="keyword">true</code> <code class="plain">} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-pageDown"><div class="api-item">
+-<h3>pageDown(  [pages ] )</h3>
+-<div>
+-				Decrements the value by the specified number of pages, as defined by the <a href="#option-page"><code>page</code></a> option. Without the parameter, a single page is decremented.
+-			</div>
+-<ul><li>
+-<div><strong>pages</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>Number of pages to decrement, defaults to 1.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the pageDown method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"pageDown"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-pageUp"><div class="api-item">
+-<h3>pageUp(  [pages ] )</h3>
+-<div>
+-				Increments the value by the specified number of pages, as defined by the <a href="#option-page"><code>page</code></a> option. Without the parameter, a single page is incremented.
+-			</div>
+-<ul><li>
+-<div><strong>pages</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>Number of pages to increment, defaults to 1.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the pageUp method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"pageUp"</code><code class="plain">, 10 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-stepDown"><div class="api-item">
+-<h3>stepDown(  [steps ] )</h3>
+-<div>
+-				Decrements the value by the specified number of steps. Without the parameter, a single step is decremented.
+-				<p>If the resulting value is above the max, below the min, or reuslts in a step mismatch, the value will be adjusted to the closest valid value.</p>
+-			</div>
+-<ul><li>
+-<div><strong>steps</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>Number of steps to decrement, defaults to 1.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the stepDown method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"stepDown"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-stepUp"><div class="api-item">
+-<h3>stepUp(  [steps ] )</h3>
+-<div>
+-				Increments the value by the specified number of steps. Without the parameter, a single step is incremented.
+-				<p>If the resulting value is above the max, below the min, or reuslts in a step mismatch, the value will be adjusted to the closest valid value.</p>
+-			</div>
+-<ul><li>
+-<div><strong>steps</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>Number of steps to increment, defaults to 1.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the stepUp method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"stepUp"</code><code class="plain">, 5 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div>
+-<div id="method-value">
+-<div class="api-item">
+-<h3>value()<span class="returns">Returns: <a href="http://api.jquery.com/Types#Number">Number</a></span>
+-</h3>
+-<div>Gets the current value as a number. The value is parsed based on the <a href="#option-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options.</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">value = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"value"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div class="api-item">
+-<h3>value( value )</h3>
+-<div></div>
+-<ul><li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The value to set. If passed as a string, the value is parsed based on the <a href="#option-numberFormat"><code>numberFormat</code></a> and <a href="#option-culture"><code>culture</code></a> options.</div>
+-</li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the  method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"value"</code><code class="plain">, 50 );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-</div>
+-<div id="method-widget"><div class="api-item">
+-<h3>widget()<span class="returns">Returns: <a href="http://api.jquery.com/Types#jQuery">jQuery</a></span>
+-</h3>
+-<div>
+-		Returns a <code>jQuery</code> object containing the generated wrapper.
+-	</div>
+-<ul><li><div class="null-signature">This method does not accept any arguments.</div></li></ul>
+-<div>
+-<strong>Code examples:</strong><p>Invoke the widget method:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">var</code> <code class="plain">widget = $( </code><code class="string">".selector"</code> <code class="plain">).spinner( </code><code class="string">"widget"</code> <code class="plain">);</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></div></section><section id="events"><header><h2 class="underline">Events</h2></header><div id="event-change" class="api-item first-item">
+-<h3>change( event, ui )<span class="returns">Type: <code>spinchange</code></span>
+-</h3>
+-<div>
+-				Triggered when the value of the spinner has changed and the input is no longer focused.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the change callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">change: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the spinchange event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spinchange"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-create" class="api-item">
+-<h3>create( event, ui )<span class="returns">Type: <code>spincreate</code></span>
+-</h3>
+-<div>
+-		Triggered when the spinner is created.
+-	</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the create callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">create: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the spincreate event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spincreate"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-spin" class="api-item">
+-<h3>spin( event, ui )<span class="returns">Type: <code>spin</code></span>
+-</h3>
+-<div>
+-				Triggered during increment/decrement (to determine direction of spin compare current value with <code>ui.value</code>).
+-				<p>Can be canceled, preventing the value from being updated.</p>
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-<ul><li>
+-<div><strong>value</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a>
+-</div>
+-<div>The new value to be set, unless the event is cancelled.</div>
+-</li></ul>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the spin callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">spin: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the spin event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spin"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-start" class="api-item">
+-<h3>start( event, ui )<span class="returns">Type: <code>spinstart</code></span>
+-</h3>
+-<div>
+-				Triggered before a spin. Can be canceled, preventing the spin from occurring.
+-			</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the start callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">start: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the spinstart event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spinstart"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div>
+-<div id="event-stop" class="api-item">
+-<h3>stop( event, ui )<span class="returns">Type: <code>spinstop</code></span>
+-</h3>
+-<div>Triggered after a spin.</div>
+-<ul>
+-<li>
+-<div><strong>event</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Event">Event</a>
+-</div>
+-<div></div>
+-</li>
+-<li>
+-<div><strong>ui</strong></div>
+-<div>Type: <a href="http://api.jquery.com/Types#Object">Object</a>
+-</div>
+-<div></div>
+-</li>
+-</ul>
+-<div>
+-<strong>Code examples:</strong><p>Initialize the spinner with the stop callback specified:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).spinner({</code></div><div class="line number2 index1 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">stop: </code><code class="keyword">function</code><code class="plain">( event, ui ) {}</code></div><div class="line number3 index2 alt2"><code class="plain">});</code></div></div></td></tr></tbody></table></div>
+-<p>Bind an event listener to the spinstop event:</p>
+-<div class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">$( </code><code class="string">".selector"</code> <code class="plain">).on( </code><code class="string">"spinstop"</code><code class="plain">, </code><code class="keyword">function</code><code class="plain">( event, ui ) {} );</code></div></div></td></tr></tbody></table></div>
+-</div>
+-</div></section><section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Plain number spinner</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;spinner demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number9 index8 alt2"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number10 index9 alt1"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number11 index10 alt2">&nbsp;</div><div class="line number12 index11 alt1"><code class="plain">&lt;</code><code class="keyword">input</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"spinner"</code><code class="plain">&gt;</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="plain">$( "#spinner" ).spinner();</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2">&nbsp;</div><div class="line number18 index17 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number19 index18 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="50"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/docs/fold-effect.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/docs/fold-effect.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/docs/fold-effect.html	(revision 15488)
+@@ -1,61 +0,0 @@
+-<!doctype html>
+-<html lang="en">
+-<head>
+-	<meta charset="utf-8">
+-	<title>jQuery UI fold-effect documentation</title>
+-
+-	<style>
+-	body {
+-		font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"
+-	}
+-	.gutter {
+-		display: none;
+-	}
+-	</style>
+-</head>
+-<body>
+-
+-<script>{
+-		"title":
+-			"Fold Effect",
+-		"excerpt":
+-			"\n\t\tThe fold effect hides or shows an element by folding it.\n\t",
+-		"termSlugs": {
+-			"category": [
+-				"effects"
+-			]
+-		}
+-	}</script><article id="fold1" class="entry effect"><h2 class="section-title"><span>Fold Effect</span></h2>
+-<div class="entry-wrapper">
+-<p class="desc"><strong>Description: </strong>
+-		The fold effect hides or shows an element by folding it.
+-	</p>
+-<ul class="signatures"><li class="signature">
+-<h4 class="name">fold</h4>
+-<ul>
+-<li>
+-<div>
+-<strong>size</strong> (default: <code>15</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Number">Number</a> or <a href="http://api.jquery.com/Types#String">String</a>
+-</div>
+-<div>The size of the "folded" element.</div>
+-</li>
+-<li>
+-<div>
+-<strong>horizFirst</strong> (default: <code>false</code>)</div>
+-<div>Type: <a href="http://api.jquery.com/Types#Boolean">Boolean</a>
+-</div>
+-<div>Whether the horizontal direction happens first when hiding. Remember, showing inverts hiding.</div>
+-</li>
+-</ul>
+-</li></ul>
+-<section class="entry-examples" id="entry-examples"><header><h2 class="underline">Example:</h2></header><div class="entry-example" id="example-0">
+-<h4><span class="desc">Toggle a div using the fold effect.</span></h4>
+-<div class="syntaxhighlighter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain">&lt;!doctype html&gt;</code></div><div class="line number2 index1 alt1"><code class="plain">&lt;</code><code class="keyword">html</code> <code class="color1">lang</code><code class="plain">=</code><code class="string">"en"</code><code class="plain">&gt;</code></div><div class="line number3 index2 alt2"><code class="plain">&lt;</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">meta</code> <code class="color1">charset</code><code class="plain">=</code><code class="string">"utf-8"</code><code class="plain">&gt;</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">title</code><code class="plain">&gt;fold demo&lt;/</code><code class="keyword">title</code><code class="plain">&gt;</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">link</code> <code class="color1">rel</code><code class="plain">=</code><code class="string">"stylesheet"</code> <code class="color1">href</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css</a>"</code><code class="plain">&gt;</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">#toggle {</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">width: 100px;</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">height: 100px;</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">background: #ccc;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">}</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;/</code><code class="keyword">style</code><code class="plain">&gt;</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/jquery-1.8.3.js">http://code.jquery.com/jquery-1.8.3.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">&lt;</code><code class="keyword">script</code> <code class="color1">src</code><code class="plain">=</code><code class="string">"<a href="http://code.jquery.com/ui/1.9.2/jquery-ui.js">http://code.jquery.com/ui/1.9.2/jquery-ui.js</a>"</code><code class="plain">&gt;&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number16 index15 alt1"><code class="plain">&lt;/</code><code class="keyword">head</code><code class="plain">&gt;</code></div><div class="line number17 index16 alt2"><code class="plain">&lt;</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number18 index17 alt1">&nbsp;</div><div class="line number19 index18 alt2"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;Click anywhere to toggle the box.&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div><div class="line number20 index19 alt1"><code class="plain">&lt;</code><code class="keyword">div</code> <code class="color1">id</code><code class="plain">=</code><code class="string">"toggle"</code><code class="plain">&gt;&lt;/</code><code class="keyword">div</code><code class="plain">&gt;</code></div><div class="line number21 index20 alt2">&nbsp;</div><div class="line number22 index21 alt1"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number23 index22 alt2"><code class="plain">$( document ).click(function() {</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain">$( "#toggle" ).toggle( "fold" );</code></div><div class="line number25 index24 alt2"><code class="plain">});</code></div><div class="line number26 index25 alt1"><code class="plain">&lt;/</code><code class="keyword">script</code><code class="plain">&gt;</code></div><div class="line number27 index26 alt2">&nbsp;</div><div class="line number28 index27 alt1"><code class="plain">&lt;/</code><code class="keyword">body</code><code class="plain">&gt;</code></div><div class="line number29 index28 alt2"><code class="plain">&lt;/</code><code class="keyword">html</code><code class="plain">&gt;</code></div></div></td></tr></tbody></table></div>
+-<h4>Demo:</h4>
+-<div class="demo code-demo" data-height="200"></div>
+-</div></section>
+-</div></article>
+-
+-</body>
+-</html>
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.core.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.core.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.core.jquery.json	(revision 15488)
+@@ -1,61 +0,0 @@
+-{
+-	"name": "ui.core",
+-	"title": "jQuery UI Core",
+-	"description": "The core of jQuery UI, required for all interactions and widgets.",
+-	"keywords": [
+-		"ui",
+-		"core"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/",
+-	"demo": "http://jqueryui.com/",
+-	"docs": "http://api.jqueryui.com/category/ui-core/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6"
+-	},
+-	"category": "core"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.mouse.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.mouse.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.mouse.jquery.json	(revision 15488)
+@@ -1,64 +0,0 @@
+-{
+-	"name": "ui.mouse",
+-	"title": "jQuery UI Mouse",
+-	"description": "Abstracts mouse-based interactions to assist in creating certain widgets.",
+-	"keywords": [
+-		"ui",
+-		"mouse",
+-		"abstraction"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/mouse/",
+-	"demo": "http://jqueryui.com/mouse/",
+-	"docs": "http://api.jqueryui.com/mouse/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3"
+-	},
+-	"category": "core"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/dev/ui.progressbar.jquery.json
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/dev/ui.progressbar.jquery.json	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/dev/ui.progressbar.jquery.json	(revision 15488)
+@@ -1,65 +0,0 @@
+-{
+-	"name": "ui.progressbar",
+-	"title": "jQuery UI Progressbar",
+-	"description": "Displays a status indicator for loading state, standard percentage, and other progress indicators.",
+-	"keywords": [
+-		"ui",
+-		"progressbar",
+-		"determinate",
+-		"status"
+-	],
+-	"version": "1.10.3",
+-	"author": {
+-		"name": "jQuery Foundation and other contributors",
+-		"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/AUTHORS.txt"
+-	},
+-	"maintainers": [
+-		{
+-			"name": "Scott González",
+-			"email": "scott.gonzalez@gmail.com",
+-			"url": "http://scottgonzalez.com"
+-		},
+-		{
+-			"name": "Jörn Zaefferer",
+-			"email": "joern.zaefferer@gmail.com",
+-			"url": "http://bassistance.de"
+-		},
+-		{
+-			"name": "Kris Borchers",
+-			"email": "kris.borchers@gmail.com",
+-			"url": "http://krisborchers.com"
+-		},
+-		{
+-			"name": "Corey Frang",
+-			"email": "gnarf37@gmail.com",
+-			"url": "http://gnarf.net"
+-		},
+-		{
+-			"name": "Mike Sherov",
+-			"email": "mike.sherov@gmail.com",
+-			"url": "http://mike.sherov.com"
+-		},
+-		{
+-			"name": "TJ VanToll",
+-			"email": "tj.vantoll@gmail.com",
+-			"url": "http://tjvantoll.com"
+-		}
+-	],
+-	"licenses": [
+-		{
+-			"type": "MIT",
+-			"url": "https://github.com/jquery/jquery-ui/blob/1.10.3/MIT-LICENSE.txt"
+-		}
+-	],
+-	"bugs": "http://bugs.jqueryui.com/",
+-	"homepage": "http://jqueryui.com/progressbar/",
+-	"demo": "http://jqueryui.com/progressbar/",
+-	"docs": "http://api.jqueryui.com/progressbar/",
+-	"download": "http://jqueryui.com/download/",
+-	"dependencies": {
+-		"jquery": ">=1.6",
+-		"ui.core": "1.10.3",
+-		"ui.widget": "1.10.3"
+-	},
+-	"category": "widget"
+-}
+Index: ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.min.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.min.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.min.js	(revision 15488)
+@@ -1,7 +0,0 @@
+-/*! jQuery UI - v1.10.3 - 2013-06-08
+-* http://jqueryui.com
+-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+-
+-(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(t,e){function i(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function s(e,i){return parseInt(t.css(e,i),10)||0}function n(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,c=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(a!==e)return a;var i,s,n=t("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=n.children()[0];return t("body").append(n),i=o.offsetWidth,n.css("overflow","scroll"),s=o.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),a=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,a="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:a?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},t.fn.position=function(e){if(!e||!e.of)return f.apply(this,arguments);e=t.extend({},e);var a,p,m,g,v,b,_=t(e.of),y=t.position.getWithinInfo(e.within),w=t.position.getScrollInfo(y),x=(e.collision||"flip").split(" "),k={};return b=n(_),_[0].preventDefault&&(e.at="left top"),p=b.width,m=b.height,g=b.offset,v=t.extend({},g),t.each(["my","at"],function(){var t,i,s=(e[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):c.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=c.test(s[1])?s[1]:"center",t=u.exec(s[0]),i=u.exec(s[1]),k[this]=[t?t[0]:0,i?i[0]:0],e[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?v.left+=p:"center"===e.at[0]&&(v.left+=p/2),"bottom"===e.at[1]?v.top+=m:"center"===e.at[1]&&(v.top+=m/2),a=i(k.at,p,m),v.left+=a[0],v.top+=a[1],this.each(function(){var n,l,c=t(this),u=c.outerWidth(),d=c.outerHeight(),f=s(this,"marginLeft"),b=s(this,"marginTop"),D=u+f+s(this,"marginRight")+w.width,T=d+b+s(this,"marginBottom")+w.height,C=t.extend({},v),M=i(k.my,c.outerWidth(),c.outerHeight());"right"===e.my[0]?C.left-=u:"center"===e.my[0]&&(C.left-=u/2),"bottom"===e.my[1]?C.top-=d:"center"===e.my[1]&&(C.top-=d/2),C.left+=M[0],C.top+=M[1],t.support.offsetFractions||(C.left=h(C.left),C.top=h(C.top)),n={marginLeft:f,marginTop:b},t.each(["left","top"],function(i,s){t.ui.position[x[i]]&&t.ui.position[x[i]][s](C,{targetWidth:p,targetHeight:m,elemWidth:u,elemHeight:d,collisionPosition:n,collisionWidth:D,collisionHeight:T,offset:[a[0]+M[0],a[1]+M[1]],my:e.my,at:e.at,within:y,elem:c})}),e.using&&(l=function(t){var i=g.left-C.left,s=i+p-u,n=g.top-C.top,a=n+m-d,h={target:{element:_,left:g.left,top:g.top,width:p,height:m},element:{element:c,left:C.left,top:C.top,width:u,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>a?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>m&&m>r(n+a)&&(h.vertical="middle"),h.important=o(r(i),r(s))>o(r(n),r(a))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(C,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-o-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-o-a,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-o-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-o-a,t.top+p+f+m>c&&(0>s||r(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,t.top+p+f+m>u&&(i>0||u>r(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,a,o=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(o?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(a in s)e.style[a]=s[a];e.appendChild(r),i=o||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(t){var i,s,n,a,o=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=t.pageX,l=t.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var s=e(this).data("ui-draggable"),n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i){var s=e(this).data("ui-draggable"),n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i){var s=e(this).data("ui-draggable"),n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._opacity&&e(i.helper).css("opacity",s._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<s.scrollSensitivity?i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(i.scrollParent[0].scrollTop=n=i.scrollParent[0].scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<s.scrollSensitivity?i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(i.scrollParent[0].scrollLeft=n=i.scrollParent[0].scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-e(document).scrollTop()<s.scrollSensitivity?n=e(document).scrollTop(e(document).scrollTop()-s.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<s.scrollSensitivity&&(n=e(document).scrollTop(e(document).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-e(document).scrollLeft()<s.scrollSensitivity?n=e(document).scrollLeft(e(document).scrollLeft()-s.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<s.scrollSensitivity&&(n=e(document).scrollLeft(e(document).scrollLeft()+s.scrollSpeed)))),n!==!1&&e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),s=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:s.top,left:s.left})})},drag:function(t,i){var s,n,a,o,r,h,l,u,c,d,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,b=i.offset.top,y=b+p.helperProportions.height;for(c=p.snapElements.length-1;c>=0;c--)r=p.snapElements[c].left,h=r+p.snapElements[c].width,l=p.snapElements[c].top,u=l+p.snapElements[c].height,r-m>v||g>h+m||l-m>y||b>u+m||!e.contains(p.snapElements[c].item.ownerDocument,p.snapElements[c].item)?(p.snapElements[c].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(s=m>=Math.abs(l-y),n=m>=Math.abs(u-b),a=m>=Math.abs(r-v),o=m>=Math.abs(h-g),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||a||o,"outer"!==f.snapMode&&(s=m>=Math.abs(l-b),n=m>=Math.abs(u-y),a=m>=Math.abs(r-g),o=m>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[c].snapping&&(s||n||a||o||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[c].item})),p.snapElements[c].snapping=s||n||a||o||d)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,s=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});s.length&&(t=parseInt(e(s[0]).css("zIndex"),10)||0,e(s).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+s.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("ui-draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,s){if(!i.offset)return!1;var n,a,o=(e.positionAbs||e.position.absolute).left,r=o+e.helperProportions.width,h=(e.positionAbs||e.position.absolute).top,l=h+e.helperProportions.height,u=i.offset.left,c=u+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return o>=u&&c>=r&&h>=d&&p>=l;case"intersect":return o+e.helperProportions.width/2>u&&c>r-e.helperProportions.width/2&&h+e.helperProportions.height/2>d&&p>l-e.helperProportions.height/2;case"pointer":return n=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,a=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(a,d,i.proportions.height)&&t(n,u,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(o>=u&&c>=o||r>=u&&c>=r||u>o&&r>c);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions.height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions={width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight})}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===n}),a.length&&(s=e.data(a[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,a.widgetName+"-item")===a?(s=t(this),!1):undefined}),t.data(e.target,a.widgetName+"-item")===a&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=t("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:e.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:e.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(e.pageY-t(document).scrollTop()<o.scrollSensitivity?r=t(document).scrollTop(t(document).scrollTop()-o.scrollSpeed):t(window).height()-(e.pageY-t(document).scrollTop())<o.scrollSensitivity&&(r=t(document).scrollTop(t(document).scrollTop()+o.scrollSpeed)),e.pageX-t(document).scrollLeft()<o.scrollSensitivity?r=t(document).scrollLeft(t(document).scrollLeft()-o.scrollSpeed):t(window).width()-(e.pageX-t(document).scrollLeft())<o.scrollSensitivity&&(r=t(document).scrollLeft(t(document).scrollLeft()+o.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!o.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=t.left,o=a+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>a&&o>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,a=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return n?this.floating?o&&"right"===o||"down"===a?2:1:a&&("down"===a?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return this.floating&&a?"right"===a&&s||"left"===a&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,a,o=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&r.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){o.push(this)});return t(o)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)a=t.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(u.push([t.isFunction(a.options.items)?a.options.items.call(a.element[0],e,{item:this.currentItem}):t(a.options.items,a.element),a]),this.containers.push(a));for(i=u.length-1;i>=0;i--)for(o=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",o),c.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t("<td>&#160;</td>",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,a,o,r,h,l,c,u,d,p,f=null,m=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],m=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(o=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],a=this.items.length-1;a>=0;a--)t.contains(this.containers[m].element[0],this.items[a].item[0])&&this.items[a].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[a].top,this.items[a].height))&&(u=this.items[a].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[a][l]-c)&&(d=!0,u+=this.items[a][l]),o>Math.abs(u-c)&&(o=Math.abs(u-c),r=this.items[a],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,a=e.pageX,o=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})})(jQuery);(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);(function(t){var e=0;t.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var a=t.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case a.UP:e=!0,this._keyEvent("previous",n);break;case a.DOWN:e=!0,this._keyEvent("next",n);break;case a.ENTER:case a.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):undefined},_search:function(t){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var t=this,i=++e;return function(s){i===e&&t.__response(s),t.pending--,t.pending||t.element.removeClass("ui-autocomplete-loading")}},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({label:e.label||e.value,value:e.value||e.label},e)})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<a>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})})(jQuery);(function(t){var e,i,s,n,a="ui-button ui-widget ui-state-default ui-corner-all",o="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var o=this,r=this.options,c="checkbox"===this.type||"radio"===this.type,u=c?"":"ui-state-active",d="ui-state-focus";null===r.label&&(r.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(a).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){r.disabled||this===e&&t(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){r.disabled||t(this).removeClass(u)}).bind("click"+this.eventNamespace,function(t){r.disabled&&(t.preventDefault(),t.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){o.buttonElement.addClass(d)}).bind("blur"+this.eventNamespace,function(){o.buttonElement.removeClass(d)}),c&&(this.element.bind("change"+this.eventNamespace,function(){n||o.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(t){r.disabled||(n=!1,i=t.pageX,s=t.pageY)}).bind("mouseup"+this.eventNamespace,function(t){r.disabled||(i!==t.pageX||s!==t.pageY)&&(n=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return r.disabled||n?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(r.disabled||n)return!1;t(this).addClass("ui-state-active"),o.buttonElement.attr("aria-pressed","true");var e=o.element[0];l(e).not(e).map(function(){return t(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return r.disabled?!1:(t(this).addClass("ui-state-active"),e=this,o.document.one("mouseup",function(){e=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return r.disabled?!1:(t(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(e){return r.disabled?!1:((e.keyCode===t.ui.keyCode.SPACE||e.keyCode===t.ui.keyCode.ENTER)&&t(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){t(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===t.ui.keyCode.SPACE&&t(this).click()})),this._setOption("disabled",r.disabled),this._resetButton()},_determineButtonType:function(){var t,e,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(t=this.element.parents().last(),e="label[for='"+this.element.attr("id")+"']",this.buttonElement=t.find(e),this.buttonElement.length||(t=t.length?t.siblings():this.element.siblings(),this.buttonElement=t.filter(e),this.buttonElement.length||(this.buttonElement=t.find(e))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(a+" "+o+" "+r).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(t,e){return this._super(t,e),"disabled"===t?(e?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var e=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");e!==this.options.disabled&&this._setOption("disabled",e),"radio"===this.type?l(this.element[0]).each(function(){t(this).is(":checked")?t(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):t(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var e=this.buttonElement.removeClass(r),i=t("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(e.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&e.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&e.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||e.attr("title",t.trim(i)))):a.push("ui-button-text-only"),e.addClass(a.join(" "))}}),t.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(t,e){"disabled"===t&&this.buttons.button("option",t,e),this._super(t,e)},refresh:function(){var e="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(e?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(e?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return t(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function(t,e){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.dpDiv=s(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function s(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(i,"mouseout",function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){t.datepicker._isDisabledDatepicker(a.inline?e.parent()[0]:a.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))})}function n(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.extend(t.ui,{datepicker:{version:"1.10.3"}});var a,r="datepicker";t.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return n(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,a;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),a=this._newInst(t(e),n),a.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,a):n&&this._inlineDatepicker(e,a)},_newInst:function(e,i){var n=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:n,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?s(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),t.data(e,r,i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,a,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=t("<span class='"+this._appendClass+"'>"+r+"</span>"),e[o?"before":"after"](i.append)),e.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(a?t("<img/>").attr({src:a,alt:n,title:n}):n)),e[o?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,a=new Date(2009,11,20),r=this._get(t,"dateFormat");r.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},a.setMonth(e(this._get(t,r.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(e(this._get(t,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),t.input.attr("size",this._formatDate(t,a).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,a,o){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],r,p)),n(p.settings,a||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,r);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,r),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),a=t.data(e,r);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,a){var r,o,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(r=s||{},"string"==typeof s&&(r={},r[s]=a),c&&(this._curInst===c&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,r),null!==h&&r.dateFormat!==e&&r.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&r.dateFormat!==e&&r.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,o),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,a=t.datepicker._getInst(e.target),r=!0,o=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),r=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",a.dpDiv),n[0]&&t.datepicker._selectDay(e.target,a.selectedMonth,a.selectedYear,n[0]),i=t.datepicker._get(a,"onSelect"),i?(s=t.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),r=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),r=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?1:-1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(a,"stepBigMonths"):-t.datepicker._get(a,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),r=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,o?-1:1,"D"),r=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(a,"stepBigMonths"):+t.datepicker._get(a,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),r=e.ctrlKey||e.metaKey;break;default:r=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):r=!1;r&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,a=t.datepicker._getInst(i.target);return t.datepicker._get(a,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(a,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,a,r,o,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),a=s?s.apply(e,[e,i]):{},a!==!1&&(n(i.settings,a),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),o={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),o=t.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,a=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],r=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",r*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),a=e.dpDiv.outerHeight(),r=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-r:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+o?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+o):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,a,o=this._curInst;!o||e&&o!==t.data(e,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){t.datepicker._tidyDialog(o)},t.effects&&(t.effects.effect[i]||t.effects[i])?o.dpDiv.hide(i,t.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(e,i,s,n){var a,r=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(a=this._getInst(r[0]),a.selectedDay=a.currentDay=t("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(e,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,a=this._get(e,"altField");a&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(a).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var a,r,o,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,m=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,_=-1,b=-1,y=!1,x=function(t){var e=i.length>a+1&&i.charAt(a+1)===t;return e&&a++,e},k=function(t){var e=x(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),a=s.substring(l).match(n);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},w=function(i,n,a){var r=-1,o=t.map(x(i)?a:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(o,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(r=i[0],l+=n.length,!1):e}),-1!==r)return r+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(a))throw"Unexpected literal at position "+l;l++};for(a=0;i.length>a;a++)if(y)"'"!==i.charAt(a)||x("'")?D():y=!1;else switch(i.charAt(a)){case"d":_=k("d");break;case"D":w("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=w("M",f,m);break;case"y":g=k("y");break;case"@":h=new Date(k("@")),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":x("'")?D():y=!0;break;default:D()}if(s.length>l&&(o=s.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=g?0:-100)),b>-1)for(v=1,_=b;;){if(r=this._getDaysInMonth(g,v-1),r>=_)break;v++,_-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,_)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,a);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),r,o);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),a=n,r=this._getFormatConfig(t);try{a=this.parseDate(i,s,r)||n}catch(o){s=e?"":s}t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),t.currentDay=s?a.getDate():0,t.currentMonth=s?a.getMonth():0,t.currentYear=s?a.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},a=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,a=n.getFullYear(),r=n.getMonth(),o=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r));break;case"y":case"Y":a+=parseInt(l[1],10),o=Math.min(o,t.datepicker._getDaysInMonth(a,r))}l=h.exec(i)}return new Date(a,r,o)},r=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?s:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,a=t.selectedYear,r=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=r.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=r.getMonth(),t.drawYear=t.selectedYear=t.currentYear=r.getFullYear(),n===t.selectedMonth&&a===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,a,r,o,h,l,c,u,d,p,f,m,g,v,_,b,y,x,k,w,D,T,C,M,S,N,I,P,A,z,H,E,F,O,W,j,R=new Date,L=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),J=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),Q=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),U=this._get(t,"stepMonths"),q=1!==Q[0]||1!==Q[1],X=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),$=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),$)for(e=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-Q[0]*Q[1]+1,$.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-U,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+U,1)),this._getFormatConfig(t)):n,a=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",r=this._get(t,"currentText"),o=this._get(t,"gotoCurrent")&&t.currentDay?X:L,r=K?this.formatDate(r,o,this._getFormatConfig(t)):r,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;Q[0]>k;k++){for(w="",this.maxRows=4,D=0;Q[1]>D;D++){if(T=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),C=" ui-corner-all",M="",q){if(M+="<div class='ui-datepicker-group",Q[1]>1)switch(D){case 0:M+=" ui-datepicker-group-first",C=" ui-corner-"+(Y?"right":"left");break;case Q[1]-1:M+=" ui-datepicker-group-last",C=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",C=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+C+"'>"+(/all|left/.test(C)&&0===k?Y?a:s:"")+(/all|right/.test(C)&&0===k?Y?s:a:"")+this._generateMonthYearHeader(t,Z,te,G,$,k>0||D>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",S=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+c)%7,S+="<th"+((x+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[N]+"'>"+p[N]+"</span></th>";for(M+=S+"</tr></thead><tbody>",I=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,I)),P=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((P+I)/7),z=q?this.maxRows>A?this.maxRows:A:A,this.maxRows=z,H=this._daylightSavingAdjust(new Date(te,Z,1-P)),E=0;z>E;E++){for(M+="<tr>",F=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(t.input?t.input[0]:null,[H]):[!0,""],W=H.getMonth()!==Z,j=W&&!_||!O[0]||G&&G>H||$&&H>$,F+="<td class='"+((x+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(H.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===H.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(j?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+O[1]+(H.getTime()===X.getTime()?" "+this._currentClass:"")+(H.getTime()===L.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(j?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":j?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===L.getTime()?" ui-state-highlight":"")+(H.getTime()===X.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=F+"</tr>"}Z++,Z>11&&(Z=0,te++),M+="</tbody></table>"+(q?"</div>"+(Q[0]>0&&D===Q[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),w+=M}y+=w}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,a,r,o){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(a||!g)y+="<span class='ui-datepicker-month'>"+r[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+o[c]+"</option>");y+="</select>"}if(_||(b+=y+(!a&&g&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);
+-return isNaN(e)?d:e},f=p(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!a&&g&&v?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),a=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),r=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,a)));t.selectedDay=r.getDate(),t.drawMonth=t.selectedMonth=r.getMonth(),t.drawYear=t.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),a=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(t,a)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),a=this._getMinMaxDate(t,"max"),r=null,o=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=s),i[1].match(/[+\-].*/)&&(o+=s)),(!n||e.getTime()>=n.getTime())&&(!a||e.getTime()<=a.getTime())&&(!r||e.getFullYear()>=r)&&(!o||o>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"})(jQuery);(function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html("&#160;"),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,a;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("<button></button>",s).button(a).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,a){s.position=[a.position.left-i.document.scrollLeft(),a.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(a))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,a){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(a))}}).css("position",a)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,a=!1,o={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(a=!0),t in i&&(o[t]=s)}),a&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",o)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})})(jQuery);(function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(e.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(e.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)}})})(jQuery);(function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})})(jQuery);(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);(function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(a,""))===decodeURIComponent(location.href.replace(a,""))}var n=0,a=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,a){return t(a).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),a=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:a=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,a),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var a,o,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),u=l.attr("aria-controls");s(n)?(a=n.hash,o=e.element.find(e._sanitizeSelector(a))):(r=e._tabId(l),a="#"+r,o=e.element.find(a),o.length||(o=e._createPanel(r),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":a.substring(1),"aria-labelledby":h}),o.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?t():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):t(),u={oldTab:s,oldPanel:l,newTab:r?t():a,newPanel:h};e.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",e,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?t():a,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),e),this._toggle(e,u))},_toggle:function(e,i){function s(){a.running=!1,a._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,a=this.tabs.eq(e),o=a.find(".ui-tabs-anchor"),r=this._getPanelForTab(a),h={tab:a,panel:r};s(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(a.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),a.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,a){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:a},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,a=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=a),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function a(t){l.of=t,o.is(":hidden")||o.position(l)}var o,r,h,l=t.extend({},this.options.position);if(n){if(o=this._find(s),o.length)return o.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),o=this._tooltip(s),e(s,o.attr("id")),o.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:a}),a(i)):o.position(t.extend({of:s},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(a(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:o}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(o)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),a=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),a.stop(!0),this._hide(a,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:a}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("<div>").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/js/jquery.ui.button.js
+===================================================================
+--- ../trunk-jpl/src/mobile/web/js/jquery.ui.button.js	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/js/jquery.ui.button.js	(revision 15488)
+@@ -1,419 +0,0 @@
+-/*!
+- * jQuery UI Button 1.10.3
+- * http://jqueryui.com
+- *
+- * Copyright 2013 jQuery Foundation and other contributors
+- * Released under the MIT license.
+- * http://jquery.org/license
+- *
+- * http://api.jqueryui.com/button/
+- *
+- * Depends:
+- *	jquery.ui.core.js
+- *	jquery.ui.widget.js
+- */
+-(function( $, undefined ) {
+-
+-var lastActive, startXPos, startYPos, clickDragged,
+-	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+-	stateClasses = "ui-state-hover ui-state-active ",
+-	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+-	formResetHandler = function() {
+-		var form = $( this );
+-		setTimeout(function() {
+-			form.find( ":ui-button" ).button( "refresh" );
+-		}, 1 );
+-	},
+-	radioGroup = function( radio ) {
+-		var name = radio.name,
+-			form = radio.form,
+-			radios = $( [] );
+-		if ( name ) {
+-			name = name.replace( /'/g, "\\'" );
+-			if ( form ) {
+-				radios = $( form ).find( "[name='" + name + "']" );
+-			} else {
+-				radios = $( "[name='" + name + "']", radio.ownerDocument )
+-					.filter(function() {
+-						return !this.form;
+-					});
+-			}
+-		}
+-		return radios;
+-	};
+-
+-$.widget( "ui.button", {
+-	version: "1.10.3",
+-	defaultElement: "<button>",
+-	options: {
+-		disabled: null,
+-		text: true,
+-		label: null,
+-		icons: {
+-			primary: null,
+-			secondary: null
+-		}
+-	},
+-	_create: function() {
+-		this.element.closest( "form" )
+-			.unbind( "reset" + this.eventNamespace )
+-			.bind( "reset" + this.eventNamespace, formResetHandler );
+-
+-		if ( typeof this.options.disabled !== "boolean" ) {
+-			this.options.disabled = !!this.element.prop( "disabled" );
+-		} else {
+-			this.element.prop( "disabled", this.options.disabled );
+-		}
+-
+-		this._determineButtonType();
+-		this.hasTitle = !!this.buttonElement.attr( "title" );
+-
+-		var that = this,
+-			options = this.options,
+-			toggleButton = this.type === "checkbox" || this.type === "radio",
+-			activeClass = !toggleButton ? "ui-state-active" : "",
+-			focusClass = "ui-state-focus";
+-
+-		if ( options.label === null ) {
+-			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+-		}
+-
+-		this._hoverable( this.buttonElement );
+-
+-		this.buttonElement
+-			.addClass( baseClasses )
+-			.attr( "role", "button" )
+-			.bind( "mouseenter" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				if ( this === lastActive ) {
+-					$( this ).addClass( "ui-state-active" );
+-				}
+-			})
+-			.bind( "mouseleave" + this.eventNamespace, function() {
+-				if ( options.disabled ) {
+-					return;
+-				}
+-				$( this ).removeClass( activeClass );
+-			})
+-			.bind( "click" + this.eventNamespace, function( event ) {
+-				if ( options.disabled ) {
+-					event.preventDefault();
+-					event.stopImmediatePropagation();
+-				}
+-			});
+-
+-		this.element
+-			.bind( "focus" + this.eventNamespace, function() {
+-				// no need to check disabled, focus won't be triggered anyway
+-				that.buttonElement.addClass( focusClass );
+-			})
+-			.bind( "blur" + this.eventNamespace, function() {
+-				that.buttonElement.removeClass( focusClass );
+-			});
+-
+-		if ( toggleButton ) {
+-			this.element.bind( "change" + this.eventNamespace, function() {
+-				if ( clickDragged ) {
+-					return;
+-				}
+-				that.refresh();
+-			});
+-			// if mouse moves between mousedown and mouseup (drag) set clickDragged flag
+-			// prevents issue where button state changes but checkbox/radio checked state
+-			// does not in Firefox (see ticket #6970)
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					clickDragged = false;
+-					startXPos = event.pageX;
+-					startYPos = event.pageY;
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function( event ) {
+-					if ( options.disabled ) {
+-						return;
+-					}
+-					if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
+-						clickDragged = true;
+-					}
+-			});
+-		}
+-
+-		if ( this.type === "checkbox" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-			});
+-		} else if ( this.type === "radio" ) {
+-			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+-				if ( options.disabled || clickDragged ) {
+-					return false;
+-				}
+-				$( this ).addClass( "ui-state-active" );
+-				that.buttonElement.attr( "aria-pressed", "true" );
+-
+-				var radio = that.element[ 0 ];
+-				radioGroup( radio )
+-					.not( radio )
+-					.map(function() {
+-						return $( this ).button( "widget" )[ 0 ];
+-					})
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			});
+-		} else {
+-			this.buttonElement
+-				.bind( "mousedown" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).addClass( "ui-state-active" );
+-					lastActive = this;
+-					that.document.one( "mouseup", function() {
+-						lastActive = null;
+-					});
+-				})
+-				.bind( "mouseup" + this.eventNamespace, function() {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					$( this ).removeClass( "ui-state-active" );
+-				})
+-				.bind( "keydown" + this.eventNamespace, function(event) {
+-					if ( options.disabled ) {
+-						return false;
+-					}
+-					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+-						$( this ).addClass( "ui-state-active" );
+-					}
+-				})
+-				// see #8559, we bind to blur here in case the button element loses
+-				// focus between keydown and keyup, it would be left in an "active" state
+-				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+-					$( this ).removeClass( "ui-state-active" );
+-				});
+-
+-			if ( this.buttonElement.is("a") ) {
+-				this.buttonElement.keyup(function(event) {
+-					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+-						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+-						$( this ).click();
+-					}
+-				});
+-			}
+-		}
+-
+-		// TODO: pull out $.Widget's handling for the disabled option into
+-		// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
+-		// be overridden by individual plugins
+-		this._setOption( "disabled", options.disabled );
+-		this._resetButton();
+-	},
+-
+-	_determineButtonType: function() {
+-		var ancestor, labelSelector, checked;
+-
+-		if ( this.element.is("[type=checkbox]") ) {
+-			this.type = "checkbox";
+-		} else if ( this.element.is("[type=radio]") ) {
+-			this.type = "radio";
+-		} else if ( this.element.is("input") ) {
+-			this.type = "input";
+-		} else {
+-			this.type = "button";
+-		}
+-
+-		if ( this.type === "checkbox" || this.type === "radio" ) {
+-			// we don't search against the document in case the element
+-			// is disconnected from the DOM
+-			ancestor = this.element.parents().last();
+-			labelSelector = "label[for='" + this.element.attr("id") + "']";
+-			this.buttonElement = ancestor.find( labelSelector );
+-			if ( !this.buttonElement.length ) {
+-				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+-				this.buttonElement = ancestor.filter( labelSelector );
+-				if ( !this.buttonElement.length ) {
+-					this.buttonElement = ancestor.find( labelSelector );
+-				}
+-			}
+-			this.element.addClass( "ui-helper-hidden-accessible" );
+-
+-			checked = this.element.is( ":checked" );
+-			if ( checked ) {
+-				this.buttonElement.addClass( "ui-state-active" );
+-			}
+-			this.buttonElement.prop( "aria-pressed", checked );
+-		} else {
+-			this.buttonElement = this.element;
+-		}
+-	},
+-
+-	widget: function() {
+-		return this.buttonElement;
+-	},
+-
+-	_destroy: function() {
+-		this.element
+-			.removeClass( "ui-helper-hidden-accessible" );
+-		this.buttonElement
+-			.removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+-			.removeAttr( "role" )
+-			.removeAttr( "aria-pressed" )
+-			.html( this.buttonElement.find(".ui-button-text").html() );
+-
+-		if ( !this.hasTitle ) {
+-			this.buttonElement.removeAttr( "title" );
+-		}
+-	},
+-
+-	_setOption: function( key, value ) {
+-		this._super( key, value );
+-		if ( key === "disabled" ) {
+-			if ( value ) {
+-				this.element.prop( "disabled", true );
+-			} else {
+-				this.element.prop( "disabled", false );
+-			}
+-			return;
+-		}
+-		this._resetButton();
+-	},
+-
+-	refresh: function() {
+-		//See #8237 & #8828
+-		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+-
+-		if ( isDisabled !== this.options.disabled ) {
+-			this._setOption( "disabled", isDisabled );
+-		}
+-		if ( this.type === "radio" ) {
+-			radioGroup( this.element[0] ).each(function() {
+-				if ( $( this ).is( ":checked" ) ) {
+-					$( this ).button( "widget" )
+-						.addClass( "ui-state-active" )
+-						.attr( "aria-pressed", "true" );
+-				} else {
+-					$( this ).button( "widget" )
+-						.removeClass( "ui-state-active" )
+-						.attr( "aria-pressed", "false" );
+-				}
+-			});
+-		} else if ( this.type === "checkbox" ) {
+-			if ( this.element.is( ":checked" ) ) {
+-				this.buttonElement
+-					.addClass( "ui-state-active" )
+-					.attr( "aria-pressed", "true" );
+-			} else {
+-				this.buttonElement
+-					.removeClass( "ui-state-active" )
+-					.attr( "aria-pressed", "false" );
+-			}
+-		}
+-	},
+-
+-	_resetButton: function() {
+-		if ( this.type === "input" ) {
+-			if ( this.options.label ) {
+-				this.element.val( this.options.label );
+-			}
+-			return;
+-		}
+-		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+-			buttonText = $( "<span></span>", this.document[0] )
+-				.addClass( "ui-button-text" )
+-				.html( this.options.label )
+-				.appendTo( buttonElement.empty() )
+-				.text(),
+-			icons = this.options.icons,
+-			multipleIcons = icons.primary && icons.secondary,
+-			buttonClasses = [];
+-
+-		if ( icons.primary || icons.secondary ) {
+-			if ( this.options.text ) {
+-				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+-			}
+-
+-			if ( icons.primary ) {
+-				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+-			}
+-
+-			if ( icons.secondary ) {
+-				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+-			}
+-
+-			if ( !this.options.text ) {
+-				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+-
+-				if ( !this.hasTitle ) {
+-					buttonElement.attr( "title", $.trim( buttonText ) );
+-				}
+-			}
+-		} else {
+-			buttonClasses.push( "ui-button-text-only" );
+-		}
+-		buttonElement.addClass( buttonClasses.join( " " ) );
+-	}
+-});
+-
+-$.widget( "ui.buttonset", {
+-	version: "1.10.3",
+-	options: {
+-		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+-	},
+-
+-	_create: function() {
+-		this.element.addClass( "ui-buttonset" );
+-	},
+-
+-	_init: function() {
+-		this.refresh();
+-	},
+-
+-	_setOption: function( key, value ) {
+-		if ( key === "disabled" ) {
+-			this.buttons.button( "option", key, value );
+-		}
+-
+-		this._super( key, value );
+-	},
+-
+-	refresh: function() {
+-		var rtl = this.element.css( "direction" ) === "rtl";
+-
+-		this.buttons = this.element.find( this.options.items )
+-			.filter( ":ui-button" )
+-				.button( "refresh" )
+-			.end()
+-			.not( ":ui-button" )
+-				.button()
+-			.end()
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+-				.filter( ":first" )
+-					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+-				.end()
+-				.filter( ":last" )
+-					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+-				.end()
+-			.end();
+-	},
+-
+-	_destroy: function() {
+-		this.element.removeClass( "ui-buttonset" );
+-		this.buttons
+-			.map(function() {
+-				return $( this ).button( "widget" )[ 0 ];
+-			})
+-				.removeClass( "ui-corner-left ui-corner-right" )
+-			.end()
+-			.button( "destroy" );
+-	}
+-});
+-
+-}( jQuery ) );
+Index: ../trunk-jpl/src/mobile/web/ISSM.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/ISSM.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/ISSM.html	(revision 15488)
+@@ -1,581 +0,0 @@
+-<html>
+-
+-<head>
+-<title>ISSM Web APP &mdash; Testing</title>
+-<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+-
+-
+-<!-- CSS -->
+-<link rel="stylesheet" href="css/animate.css"/>
+-<link rel="stylesheet" href="css/jquery.ui.all.css"/>
+-<link rel="stylesheet" type="text/css" href="js/sidebar/css/blue-glass/sidebar.css" />
+-<link rel="stylesheet" href="css/mystyle.css"/>
+-
+-<!-- JavaScript -->
+-<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
+-<script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
+-<script type="text/javascript" src="src/glMatrix-0.9.5.min.js"></script>
+-<script type="text/javascript" src="src/coordinate.js"></script>
+-<script type="text/javascript" src="src/color.js"></script>
+-<script type="text/javascript" src="src/webgl-utils.js"></script>
+-<script type="text/javascript" src="js/sidebar/src/jquery.sidebar.js"></script>
+-
+-    <script id="shader-fs1" type="x-shader/x-fragment">
+-        precision mediump float;
+-
+-        varying vec2 vTextureCoord;
+-        uniform sampler2D uSampler;
+-
+-        void main(void) {
+-            gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
+-        }
+-    </script>
+-
+-    <script id="shader-vs1" type="x-shader/x-vertex">
+-        attribute vec3 aVertexPosition;
+-        attribute vec2 aTextureCoord;
+-
+-        uniform mat4 uMVMatrix;
+-        uniform mat4 uPMatrix;
+-
+-        varying vec2 vTextureCoord;
+-
+-        void main(void) {
+-            gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
+-            vTextureCoord = aTextureCoord;
+-        }
+-    </script>
+-
+-    <script id="shader-fs2" type="x-shader/x-fragment">
+-        precision mediump float;
+-
+-        varying vec4 vColor;
+-
+-        void main(void) {
+-            gl_FragColor = vColor;
+-        }
+-    </script>
+-
+-    <script id="shader-vs2" type="x-shader/x-vertex">
+-        attribute vec3 aVertexPosition;
+-        attribute vec4 aVertexColor;
+-
+-        uniform mat4 uMVMatrix;
+-        uniform mat4 uPMatrix;
+-
+-        varying vec4 vColor;
+-
+-        void main(void) {
+-            gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
+-            vColor = aVertexColor;
+-        }
+-    </script>
+-
+-    <script type="text/javascript">
+-
+-        var gl;
+-
+-        function initGL(canvas) {
+-            try {
+-                gl = canvas.getContext("experimental-webgl");
+-                gl.viewportWidth = canvas.width;
+-                gl.viewportHeight = canvas.height;
+-            } catch (e) {
+-            }
+-            if (!gl) {
+-                alert("Could not initialise WebGL, sorry :-(");
+-            }
+-        }
+-
+-
+-        function getShader(gl, id) {
+-            var shaderScript = document.getElementById(id);
+-            if (!shaderScript) {
+-                return null;
+-            }
+-
+-            var str = "";
+-            var k = shaderScript.firstChild;
+-            while (k) {
+-                if (k.nodeType == 3) {
+-                    str += k.textContent;
+-                }
+-                k = k.nextSibling;
+-            }
+-
+-            var shader;
+-            if (shaderScript.type == "x-shader/x-fragment") {
+-                shader = gl.createShader(gl.FRAGMENT_SHADER);
+-            } else if (shaderScript.type == "x-shader/x-vertex") {
+-                shader = gl.createShader(gl.VERTEX_SHADER);
+-            } else {
+-                return null;
+-            }
+-
+-            gl.shaderSource(shader, str);
+-            gl.compileShader(shader);
+-
+-            if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
+-                alert(gl.getShaderInfoLog(shader));
+-                return null;
+-            }
+-
+-            return shader;
+-        }
+-    	
+-
+-
+-        var shaderProgram1;
+-    	
+-        function initShaders1() {
+-            var fragmentShader = getShader(gl, "shader-fs1");
+-            var vertexShader = getShader(gl, "shader-vs1");
+-    		
+-            shaderProgram1 = gl.createProgram();
+-            gl.attachShader(shaderProgram1, vertexShader);
+-            gl.attachShader(shaderProgram1, fragmentShader);
+-            gl.linkProgram(shaderProgram1);
+-    		
+-            if (!gl.getProgramParameter(shaderProgram1, gl.LINK_STATUS) ) 
+-    		{
+-                alert("Could not initialise shaders");
+-            }
+-    		
+-    		gl.useProgram(shaderProgram1);
+-
+-            shaderProgram1.vertexPositionAttribute = gl.getAttribLocation(shaderProgram1, "aVertexPosition");
+-            gl.enableVertexAttribArray(shaderProgram1.vertexPositionAttribute);
+-
+-            shaderProgram1.textureCoordAttribute = gl.getAttribLocation(shaderProgram1, "aTextureCoord");
+-            gl.enableVertexAttribArray(shaderProgram1.textureCoordAttribute);
+-
+-            shaderProgram1.pMatrixUniform = gl.getUniformLocation(shaderProgram1, "uPMatrix");
+-            shaderProgram1.mvMatrixUniform = gl.getUniformLocation(shaderProgram1, "uMVMatrix");
+-            shaderProgram1.samplerUniform = gl.getUniformLocation(shaderProgram1, "uSampler");
+-        }
+-    	
+-    	
+-    	var shaderProgram2;
+-    	
+-        function initShaders2() {
+-            var fragmentShader = getShader(gl, "shader-fs2");
+-            var vertexShader = getShader(gl, "shader-vs2");
+-    		
+-            shaderProgram2 = gl.createProgram();
+-            gl.attachShader(shaderProgram2, vertexShader);
+-            gl.attachShader(shaderProgram2, fragmentShader);
+-            gl.linkProgram(shaderProgram2);
+-    		
+-            if (!gl.getProgramParameter(shaderProgram2, gl.LINK_STATUS) ) 
+-    		{
+-                alert("Could not initialise shaders");
+-            }
+-    		
+-    		gl.useProgram(shaderProgram2);
+-
+-            shaderProgram2.vertexPositionAttribute = gl.getAttribLocation(shaderProgram2, "aVertexPosition");
+-            gl.enableVertexAttribArray(shaderProgram2.vertexPositionAttribute);
+-
+-            shaderProgram2.vertexColorAttribute = gl.getAttribLocation(shaderProgram2, "aVertexColor");
+-            gl.enableVertexAttribArray(shaderProgram2.vertexColorAttribute);
+-
+-            shaderProgram2.pMatrixUniform = gl.getUniformLocation(shaderProgram2, "uPMatrix");
+-            shaderProgram2.mvMatrixUniform = gl.getUniformLocation(shaderProgram2, "uMVMatrix");
+-        }
+-    	
+-        function handleLoadedTexture(texture) {
+-            gl.bindTexture(gl.TEXTURE_2D, texture);
+-            gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
+-            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+-            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+-            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+-            gl.bindTexture(gl.TEXTURE_2D, null);
+-        }
+-
+-
+-        var neheTexture;
+-
+-        function initTexture() {
+-            neheTexture = gl.createTexture();
+-            neheTexture.image = new Image();
+-            neheTexture.image.onload = function () {
+-                handleLoadedTexture(neheTexture)
+-            }
+-
+-            neheTexture.image.src = "images/greenland.png";
+-        }
+-
+-
+-        var mvMatrix = mat4.create();
+-        var mvMatrixStack = [];
+-        var pMatrix = mat4.create();
+-
+-        function mvPushMatrix() {
+-            var copy = mat4.create();
+-            mat4.set(mvMatrix, copy);
+-            mvMatrixStack.push(copy);
+-        }
+-
+-        function mvPopMatrix() {
+-            if (mvMatrixStack.length == 0) {
+-                throw "Invalid popMatrix!";
+-            }
+-            mvMatrix = mvMatrixStack.pop();
+-        }
+-
+-
+-        function setMatrixUniforms1() {
+-            gl.uniformMatrix4fv(shaderProgram1.pMatrixUniform, false, pMatrix);
+-            gl.uniformMatrix4fv(shaderProgram1.mvMatrixUniform, false, mvMatrix);
+-        }
+-    	
+-    	function setMatrixUniforms2() {
+-            gl.uniformMatrix4fv(shaderProgram2.pMatrixUniform, false, pMatrix);
+-            gl.uniformMatrix4fv(shaderProgram2.mvMatrixUniform, false, mvMatrix);
+-        }
+-
+-
+-        function degToRad(degrees) {
+-            return degrees * Math.PI / 180;
+-        }
+-
+-    	var triangleVertexPositionBuffer;
+-        var triangleVertexColorBuffer;
+-    	var col = 9;
+-    	function VertexArray(x1,y1,z1,x2,y2,z2,x3,y3,z3)
+-    	{
+-    		return [x1,y1,z1,x2,y2,z2,x3,y3,z3];
+-    	}
+-    	
+-    	function ColorsArray(R1,G1,B1,A1,R2,G2,B2,A2,R3,G3,B3,A3)
+-    	{
+-    		return [R1,G1,B1,A1,R2,G2,B2,A2,R3,G3,B3,A3];
+-    	}
+-    	function generateTriangle(row)
+-    	{
+-    		var x1 = coordinate[col*row+0];
+-    		var y1 = coordinate[col*row+1];
+-    		var z1 = coordinate[col*row+2];
+-    		var x2 = coordinate[col*row+3];
+-    		var y2 = coordinate[col*row+4];
+-    		var z2 = coordinate[col*row+5];
+-    		var x3 = coordinate[col*row+6];
+-    		var y3 = coordinate[col*row+7];
+-    		var z3 = coordinate[col*row+8];
+-    		
+-    		var result;
+-    		result = new VertexArray(x1,y1,z1,x2,y2,z2,x3,y3,z3);
+-    		return result; 	
+-    	}
+-    	
+-    	function generateTriangleColor(row)
+-    	{
+-    		var R1 = color[col*row+0];
+-    		var G1 = color[col*row+1];
+-    		var B1 = color[col*row+2];
+-    		var R2 = color[col*row+3];
+-    		var G2 = color[col*row+4];
+-    		var B2 = color[col*row+5];
+-    		var R3 = color[col*row+6];
+-    		var G3 = color[col*row+7];
+-    		var B3 = color[col*row+8];
+-    		
+-    		var result;
+-    		result = new ColorsArray(R1,G1,B1,1.0,R2,G2,B2,1.0,R3,G3,B3,1.0);
+-    		return result;
+-    	}
+-
+-    	var size = 252;
+-    	function createTriangles()
+-    	{
+-    		triangleVertexPositionBuffer = new Array(size);
+-    		triangleVertexColorBuffer    = new Array(size);
+-    		triangleVertexPositionBuffer.itemSize = 3;
+-    		triangleVertexPositionBuffer.numItems = 3;
+-    		triangleVertexColorBuffer.itemSize = 4;
+-    		triangleVertexColorBuffer.numItems = 3;
+-    		
+-    		var triangleVertex;
+-    		var triangleColor;
+-    		
+-    		for(var i = 0; i < size; i++)
+-    		{
+-    			triangleVertex = generateTriangle(i);
+-    			triangleColor = generateTriangleColor(i);
+-    			
+-    			//create buffer on GL side for vertex
+-    			triangleVertexPositionBuffer[i] = gl.createBuffer();
+-    			gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer[i]);
+-    			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVertex), gl.STATIC_DRAW);
+-
+-    			//create buffer on GL side for color
+-    			triangleVertexColorBuffer[i] = gl.createBuffer();
+-    			gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer[i]);
+-    			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleColor), gl.STATIC_DRAW);
+-    		}
+-    	}
+-    	
+-    	
+-        function initBuffers() 
+-    	{
+-    		createTriangles();
+-        }
+-    	
+-    	
+-    	
+-        var squareVertexPositionBuffer;
+-        var squareVertexTextureCoordBuffer;
+-        var squareVertexIndexBuffer;
+-    	
+-        function initBuffers() {
+-            squareVertexPositionBuffer = gl.createBuffer();
+-            gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
+-            vertices = [
+-                // Front face
+-                -1.0, -1.0,  0.0,
+-                 1.0, -1.0,  0.0,
+-                 1.0,  1.0,  0.0,
+-                -1.0,  1.0,  0.0,
+-            ];
+-            gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
+-            squareVertexPositionBuffer.itemSize = 3;
+-            squareVertexPositionBuffer.numItems = 4;
+-
+-            squareVertexTextureCoordBuffer = gl.createBuffer();
+-            gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexTextureCoordBuffer);
+-            var textureCoords = [
+-              // Front face
+-              0.0, 0.0,
+-              1.0, 0.0,
+-              1.0, 1.0,
+-              0.0, 1.0,        
+-            ];
+-            gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(textureCoords), gl.STATIC_DRAW);
+-            squareVertexTextureCoordBuffer.itemSize = 2;
+-            squareVertexTextureCoordBuffer.numItems = 4;
+-
+-            squareVertexIndexBuffer = gl.createBuffer();
+-            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, squareVertexIndexBuffer);
+-            var squareVertexIndices = [
+-                0, 1, 2,      0, 2, 3,    // Front face
+-            ];
+-            gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(squareVertexIndices), gl.STATIC_DRAW);
+-            squareVertexIndexBuffer.itemSize = 1;
+-            squareVertexIndexBuffer.numItems = 6;
+-    		
+-    		createTriangles();
+-        }
+-    	
+-    	function drawScene() {
+-    		gl.useProgram(shaderProgram2);
+-            gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
+-            gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+-
+-            mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
+-
+-            mat4.identity(mvMatrix);
+-            mat4.translate(mvMatrix, [0, 0, -3.0]);
+-    		
+-    			
+-    		for(var i = 0; i < size; i++)
+-    		{
+-    			gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer[i]);
+-    			gl.vertexAttribPointer(shaderProgram2.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
+-    			
+-    			gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer[i]);
+-    			gl.vertexAttribPointer(shaderProgram2.vertexColorAttribute, triangleVertexColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
+-
+-    			setMatrixUniforms2();
+-    			gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer.numItems);
+-    		}
+-        }
+-
+-
+-        var xRot = 0;
+-        var yRot = 0;
+-        var zRot = 0;
+-    	
+-    	function drawBackground()
+-    	{
+-    		gl.useProgram(shaderProgram1);
+-    		gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
+-            gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+-    		
+-            mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
+-
+-            mat4.identity(mvMatrix);
+-    		mat4.translate(mvMatrix, [0.0, 0.0, -2.0]);
+-    		
+-    		// draw background position
+-            gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
+-            gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+-
+-            mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
+-
+-            mat4.identity(mvMatrix);
+-
+-            mat4.translate(mvMatrix, [0.0, 0.0, -3.0]);
+-
+-            gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
+-            gl.vertexAttribPointer(shaderProgram1.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
+-
+-            gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexTextureCoordBuffer);
+-            gl.vertexAttribPointer(shaderProgram1.textureCoordAttribute, squareVertexTextureCoordBuffer.itemSize, gl.FLOAT, false, 0, 0);
+-
+-            gl.activeTexture(gl.TEXTURE0);
+-            gl.bindTexture(gl.TEXTURE_2D, neheTexture);
+-            gl.uniform1i(shaderProgram1.samplerUniform, 0);
+-
+-            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, squareVertexIndexBuffer);
+-            setMatrixUniforms1();
+-            gl.drawElements(gl.TRIANGLES, squareVertexIndexBuffer.numItems, gl.UNSIGNED_SHORT, 0);
+-    	}
+-
+-        var lastTime = 0;
+-
+-        function animate() {
+-            var timeNow = new Date().getTime();
+-            if (lastTime != 0) {
+-                var elapsed = timeNow - lastTime;
+-
+-                //xRot += (90 * elapsed) / 1000.0;
+-                //yRot += (90 * elapsed) / 1000.0;
+-                //zRot += (90 * elapsed) / 1000.0;
+-            }
+-            lastTime = timeNow;
+-        }
+-
+-    	var drawFigure = 0;
+-    	
+-        function tick() {
+-            requestAnimFrame(tick);
+-    		if( drawFigure == 0)
+-    			drawBackground();
+-    		else
+-    			drawScene();
+-            //animate();
+-        }
+-
+-    	function triggerDrawFigure()
+-    	{
+-    		drawFigure = 1;
+-    	}
+-
+-        function webGLStart() {
+-            var canvas = document.getElementById("ISSM-canvas");
+-            initGL(canvas);
+-            initShaders1();
+-    		initShaders2();
+-            initBuffers();
+-            initTexture();
+-
+-            gl.clearColor(0.0, 0.0, 0.0, 1.0);
+-            gl.enable(gl.DEPTH_TEST);
+-    		
+-    		tick();
+-        }
+-
+-
+-    </script>
+-
+-   <script>
+-        $(function() {
+-            $( "input[type=submit], button" )
+-                .button()
+-                .click(function( event ) {
+-                    event.preventDefault();
+-                });
+-        });
+-        
+-        $(function() {
+-            $( "#friction-slider" ).slider({
+-                range: "min",
+-                value: 20,
+-                min: 10,
+-                max: 500,
+-                slide: function( event, ui ) {
+-                    $( "#amount1" ).val( "    " + ui.value );
+-                }
+-            });
+-            $( "#amount1" ).val( "    " + $( "#friction-slider" ).slider( "value" ) );
+-            
+-            $( "#temperature-slider" ).slider({
+-                range: "min",
+-                value: 20,
+-                min: 10,
+-                max: 500,
+-                slide: function( event, ui ) {
+-                    $( "#amount2" ).val( "    " + ui.value );
+-                }
+-            });
+-            $( "#amount2" ).val( "    " + $( "#temperature-slider" ).slider( "value" ) );
+-            
+-            $( "#sea-slider" ).slider({
+-                range: "min",
+-                value: 20,
+-                min: 10,
+-                max: 500,
+-                slide: function( event, ui ) {
+-                    $( "#amount3" ).val( "    " + ui.value );
+-                }
+-            });
+-            $( "#amount3" ).val( "    " + $( "#sea-slider" ).slider( "value" ) );
+-        });
+-    </script>
+-
+-</head>
+-
+-<body onload="webGLStart();">
+-	<div id="frame" style="position: relative; left: 0; top: 0;" >
+-		<img src="images/ISSMJPLTOP.png" class="imageBorder" width="750" height="120" style="top: 0; left: 0;">
+-		<a href="ISSM.html" target=""><img src="images/ISSMlogo.png" width="500" height="70" style="position: absolute; top: 30; left: 250;"></a>
+-         <ul id="sidebar" >
+-            <li><a href="gallery.html" >Gallery</a></li>
+-            <li><a href="ISSM.html" >Simulator</a></li>
+-            <li><a href="http://issm.jpl.nasa.gov/" >Visit Us</a></li>
+-        </ul>
+-        <script type="text/javascript">
+-            $("ul#sidebar").sidebar();
+-        </script>   
+-		<div id="canvasframe">
+-			<canvas class="animated bounceInDown" id="ISSM-canvas" style="border: none;" width="700" height="580"></canvas>
+-			<br/>
+-			<br/>
+-				<table id="sliderTable">
+-					<tr>
+-					<td width="10%">
+-						<label class="sliderLabel" for="amount1">Friction:</label> <td/>
+-					<td width="10%">
+-						<input type="text" class="borderText" id="amount1" style=" width:50; border:0; color:#f6931f; font-weight:bold;" />
+-					<td width="80%">
+-						<div id="friction-slider"></div>
+-					</td>
+-					
+-					<tr>
+-					<td width="10%">
+-						<label class="sliderLabel" for="amount2">Temperature:</label> <td/>
+-					<td width="10%">
+-						<input type="text" class="borderText" id="amount2" style=" width:50; border:0; color:#f6931f; font-weight:bold;" />
+-					<td width="80%">
+-						<div id="temperature-slider"></div>
+-					</td>
+-					
+-					
+-					<tr>
+-					<td width="10%">
+-						<label class="sliderLabel" for="amount3">Sea Level:</label> <td/>
+-					<td width="10%">
+-						<input type="text" class="borderText" id="amount3" style=" width:50; border:0; color:#f6931f; font-weight:bold;" />
+-					<td width="80%">
+-						<div id="sea-slider"></div>
+-					</td>
+-					
+-				</table>
+-			<br/>
+-			<input type="submit" style="width:700" onclick="triggerDrawFigure()" value="Run" />
+-		</div>
+-	</div>
+-	<img src="images/globe.png" alt="globe" height="350" width="500" align="right">
+-</body>
+-
+-</html>
+\ No newline at end of file
+Index: ../trunk-jpl/src/mobile/web/gallery.html
+===================================================================
+--- ../trunk-jpl/src/mobile/web/gallery.html	(revision 15487)
++++ ../trunk-jpl/src/mobile/web/gallery.html	(revision 15488)
+@@ -1,75 +0,0 @@
+-<html>
+-
+-<head>
+-<title>ISSM Web APP &mdash; Testing</title>
+-<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+-
+-
+-<!-- CSS -->
+-<link rel="stylesheet" href="css/animate.css"/>
+-<link rel="stylesheet" href="css/jquery.ui.all.css"/>
+-<link rel="stylesheet" href="css/mystyle.css"/>
+-<link rel="stylesheet" type="text/css" href="js/sidebar/css/blue-glass/sidebar.css" />
+-<link rel="stylesheet" href="js/imageslider/themes/default/default.css" type="text/css" media="screen" />
+-<link rel="stylesheet" href="js/imageslider/themes/light/light.css" type="text/css" media="screen" />
+-<link rel="stylesheet" href="js/imageslider/themes/dark/dark.css" type="text/css" media="screen" />
+-<link rel="stylesheet" href="js/imageslider/themes/bar/bar.css" type="text/css" media="screen" />
+-<link rel="stylesheet" href="js/imageslider/nivo-slider.css" type="text/css" media="screen" />
+-<link rel="stylesheet" href="js/imageslider/style.css" type="text/css" media="screen" />
+-
+-
+-<!-- JavaScript -->
+-<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
+-<script type="text/javascript" src="http://code.jquery.com/ui/1.8.13/jquery-ui.min.js"></script>
+-<script type="text/javascript" src="js/sidebar/src/jquery.sidebar.js"></script>
+-<script type="text/javascript" src="js/imageslider/jquery.nivo.slider.js"></script>
+-
+-<script type="text/javascript">
+-    $(window).load(function() {
+-        $('#slider').nivoSlider();
+-    });
+-</script>
+-
+-
+-
+-</head>
+-
+-<body onload="webGLStart();">
+-	<div id="frame" style="position: relative; left: 0; top: 0;" >
+-		<img src="images/ISSMJPLTOP.png" class="imageBorder" width="750" height="120" style="top: 0; left: 0;">
+-		<img src="images/ISSMlogo.png" width="500" height="70" style="position: absolute; top: 30; left: 250;">
+-         <ul id="sidebar" >
+-            <li><a href="gallery.html" >Gallery</a></li>
+-            <li><a href="ISSM.html" >Simulator</a></li>
+-            <li><a href="http://issm.jpl.nasa.gov/" >Visit Us</a></li>
+-        </ul>  
+-        <script type="text/javascript">
+-            $("ul#sidebar").sidebar();
+-        </script>  
+-
+-        <div class="slider-wrapper theme-default">
+-            <div id="slider" class="nivoSlider">
+-                <img src="images/issm_img/img1.png" data-thumb="images/issm_img/img1.png" alt="" />
+-                <img src="images/issm_img/img2.png" data-thumb="images/issm_img/img2.png" alt="" />
+-                <img src="images/issm_img/img3.png" data-thumb="images/issm_img/img3.png" alt="" />
+-                <img src="images/issm_img/img4.png" data-thumb="images/issm_img/img4.png" alt="" />
+-                <img src="images/issm_img/img5.png" data-thumb="images/issm_img/img5.png" alt="" />
+-                <img src="images/issm_img/img6.png" data-thumb="images/issm_img/img6.png" alt="" />
+-                <img src="images/issm_img/img7.png" data-thumb="images/issm_img/img7.png" alt="" />
+-                <img src="images/issm_img/img8.png" data-thumb="images/issm_img/img8.png" alt="" />
+-                <img src="images/issm_img/img9.png" data-thumb="images/issm_img/img9.png" alt="" />
+-                <img src="images/issm_img/img10.png" data-thumb="images/issm_img/img10.png" alt="" />
+-                <img src="images/issm_img/img11.png" data-thumb="images/issm_img/img11.png" alt="" />
+-                <img src="images/issm_img/img12.png" data-thumb="images/issm_img/img12.png" alt="" />
+-                <img src="images/issm_img/img13.png" data-thumb="images/issm_img/img13.png" alt="" />
+-                <img src="images/issm_img/img14.png" data-thumb="images/issm_img/img14.png" alt="" />
+-                <img src="images/issm_img/img15.png" data-thumb="images/issm_img/img15.png" alt="" />
+-                <img src="images/issm_img/img16.png" data-thumb="images/issm_img/img16.png" alt="" />
+-                <img src="images/issm_img/img17.png" data-thumb="images/issm_img/img17.png" alt="" />
+-            </div>
+-        </div>
+-    </div>      
+-	<a href="ISSM.htm" target="_blank"><img src="images/globe.png" alt="globe" height="350" width="500" align="right"></a>
+-</body>
+-
+-</html>
+\ No newline at end of file
Index: /issm/oecreview/Archive/15392-16133/ISSM-15488-15489.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15488-15489.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15488-15489.diff	(revision 16134)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15488)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15489)
+@@ -111,6 +111,7 @@
+ 										N,times,values,analysis_type));
+ 						count++;
+ 					}
++					xDelete<IssmDouble>(values);
+ 				}
+ 			}
+ 		}
+@@ -123,4 +124,5 @@
+ 	xDelete<IssmDouble>(spcdata);
+ 	xDelete<IssmDouble>(times);
+ 	xDelete<IssmDouble>(values);
++	xDelete<bool>(my_edges);
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15489-15490.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15489-15490.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15489-15490.diff	(revision 16134)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/plot/plotmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotmodel.py	(revision 15489)
++++ ../trunk-jpl/src/m/plot/plotmodel.py	(revision 15490)
+@@ -50,6 +50,7 @@
+ 		
+ 		#Create figure
+ 		#plots will be visible by default if ipython is run in interactive mode (invoked by ipython --pylab)
++		#UNLESS plotmodel is called within a script (e.g. a runme.py file) 
+ 		#handling the 'visible' option will need some check on whether ipython is currently in interactive or non-interactive mode
+ 
+ 		#if figsize specified
+@@ -64,5 +65,6 @@
+ 			plot_manager(options.list[i].getfieldvalue('model',md),options.list[i],subplotwidth,nlines,ncols,i+1)
+ 		#except StandardError:
+ 		#	print 'error in plot_manager'
++		p.show()
+ 	else:
+ 		raise StandardError('plotmodel error message: no output data found.')
Index: /issm/oecreview/Archive/15392-16133/ISSM-15490-15491.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15490-15491.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15490-15491.diff	(revision 16134)
@@ -0,0 +1,194 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15490)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15491)
+@@ -496,9 +496,11 @@
+ 	/*Element Interpolations{{{*/
+ 	P0Enum,
+ 	P1Enum,
++	P2Enum,
+ 	P1DGEnum,
++	P1P2Enum,
+ 	MINIEnum,
+-	P2Enum,
++	TaylorHoodEnum,
+ 	/*}}}*/
+ 	/*Results{{{*/
+ 	SaveResultsEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15490)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15491)
+@@ -488,9 +488,11 @@
+ 		case GiaWEnum : return "GiaW";
+ 		case P0Enum : return "P0";
+ 		case P1Enum : return "P1";
++		case P2Enum : return "P2";
+ 		case P1DGEnum : return "P1DG";
++		case P1P2Enum : return "P1P2";
+ 		case MINIEnum : return "MINI";
+-		case P2Enum : return "P2";
++		case TaylorHoodEnum : return "TaylorHood";
+ 		case SaveResultsEnum : return "SaveResults";
+ 		case BoolElementResultEnum : return "BoolElementResult";
+ 		case BoolExternalResultEnum : return "BoolExternalResult";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15490)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15491)
+@@ -497,18 +497,20 @@
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
++	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
++	      else if (strcmp(name,"P1P2")==0) return P1P2Enum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+-	      else if (strcmp(name,"P2")==0) return P2Enum;
++	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+-	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+-	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
++	      if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
++	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
++	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+ 	      else if (strcmp(name,"Patch")==0) return PatchEnum;
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15490)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15491)
+@@ -1101,6 +1101,7 @@
+ 			basis[4]=gauss->coord2*(1.+gauss->coord4)/2.;
+ 			basis[5]=gauss->coord3*(1.+gauss->coord4)/2.;
+ 			return;
++		case P1xP2Enum:
+ 		case MINIEnum:
+ 			basis[0]=gauss->coord1*(1.-gauss->coord4)/2.;
+ 			basis[1]=gauss->coord2*(1.-gauss->coord4)/2.;
+Index: ../trunk-jpl/src/m/enum/P1P2Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/P1P2Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/P1P2Enum.m	(revision 15491)
+@@ -0,0 +1,11 @@
++function macro=P1P2Enum()
++%P1P2ENUM - Enum of P1P2
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=P1P2Enum()
++
++macro=StringToEnum('P1P2');
+Index: ../trunk-jpl/src/m/enum/TaylorHoodEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/TaylorHoodEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/TaylorHoodEnum.m	(revision 15491)
+@@ -0,0 +1,11 @@
++function macro=TaylorHoodEnum()
++%TAYLORHOODENUM - Enum of TaylorHood
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=TaylorHoodEnum()
++
++macro=StringToEnum('TaylorHood');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15490)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15491)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=560;
++macro=562;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15490)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15491)
+@@ -6616,6 +6616,20 @@
+ 
+ 	return StringToEnum('P1')[0]
+ 
++def P2Enum():
++	"""
++	P2ENUM - Enum of P2
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=P2Enum()
++	"""
++
++	return StringToEnum('P2')[0]
++
+ def P1DGEnum():
+ 	"""
+ 	P1DGENUM - Enum of P1DG
+@@ -6630,6 +6644,20 @@
+ 
+ 	return StringToEnum('P1DG')[0]
+ 
++def P1P2Enum():
++	"""
++	P1P2ENUM - Enum of P1P2
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=P1P2Enum()
++	"""
++
++	return StringToEnum('P1P2')[0]
++
+ def MINIEnum():
+ 	"""
+ 	MINIENUM - Enum of MINI
+@@ -6644,19 +6672,19 @@
+ 
+ 	return StringToEnum('MINI')[0]
+ 
+-def P2Enum():
++def TaylorHoodEnum():
+ 	"""
+-	P2ENUM - Enum of P2
++	TAYLORHOODENUM - Enum of TaylorHood
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=P2Enum()
++	      macro=TaylorHoodEnum()
+ 	"""
+ 
+-	return StringToEnum('P2')[0]
++	return StringToEnum('TaylorHood')[0]
+ 
+ def SaveResultsEnum():
+ 	"""
+@@ -7860,5 +7888,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 560
++	return 562
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15491-15492.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15491-15492.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15491-15492.diff	(revision 16134)
@@ -0,0 +1,253 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15491)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15492)
+@@ -496,9 +496,10 @@
+ 	/*Element Interpolations{{{*/
+ 	P0Enum,
+ 	P1Enum,
++	P1DGEnum,
++	P1bubbleEnum,
+ 	P2Enum,
+-	P1DGEnum,
+-	P1P2Enum,
++	P2xP1Enum,
+ 	MINIEnum,
+ 	TaylorHoodEnum,
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15491)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15492)
+@@ -488,9 +488,10 @@
+ 		case GiaWEnum : return "GiaW";
+ 		case P0Enum : return "P0";
+ 		case P1Enum : return "P1";
++		case P1DGEnum : return "P1DG";
++		case P1bubbleEnum : return "P1bubble";
+ 		case P2Enum : return "P2";
+-		case P1DGEnum : return "P1DG";
+-		case P1P2Enum : return "P1P2";
++		case P2xP1Enum : return "P2xP1";
+ 		case MINIEnum : return "MINI";
+ 		case TaylorHoodEnum : return "TaylorHood";
+ 		case SaveResultsEnum : return "SaveResults";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15491)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15492)
+@@ -497,18 +497,19 @@
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
++	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
++	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+-	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+-	      else if (strcmp(name,"P1P2")==0) return P1P2Enum;
++	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+-	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
++	      if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
++	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15491)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15492)
+@@ -1101,7 +1101,25 @@
+ 			basis[4]=gauss->coord2*(1.+gauss->coord4)/2.;
+ 			basis[5]=gauss->coord3*(1.+gauss->coord4)/2.;
+ 			return;
+-		case P1xP2Enum:
++		case P2xP1Enum:
++			/*Corner nodes*/
++			basis[ 0]=0.;
++			basis[ 1]=0.;
++			basis[ 2]=0.;
++			basis[ 3]=0.;
++			basis[ 4]=0.;
++			basis[ 5]=0.;
++			/*mid-sides of quads*/
++			basis[ 6]=0.;
++			basis[ 7]=0.;
++			basis[ 8]=0.;
++			/*mid-sides of triangles*/
++			basis[ 9]=0.;
++			basis[10]=0.;
++			basis[11]=0.;
++			basis[12]=0.;
++			basis[13]=0.;
++			basis[14]=0.;
+ 		case MINIEnum:
+ 			basis[0]=gauss->coord1*(1.-gauss->coord4)/2.;
+ 			basis[1]=gauss->coord2*(1.-gauss->coord4)/2.;
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15491)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15492)
+@@ -437,9 +437,11 @@
+ 			basis[2]=gauss->coord3;
+ 			return;
+ 		case P2Enum:
++			/*Corner nodes*/
+ 			basis[0]=gauss->coord1*(2.*gauss->coord1-1.);
+ 			basis[1]=gauss->coord2*(2.*gauss->coord2-1.);
+ 			basis[2]=gauss->coord3*(2.*gauss->coord3-1.);
++			/*Mid-sides*/
+ 			basis[3]=4.*gauss->coord3*gauss->coord2;
+ 			basis[4]=4.*gauss->coord3*gauss->coord1;
+ 			basis[5]=4.*gauss->coord1*gauss->coord2;
+Index: ../trunk-jpl/src/m/enum/P1P2Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/P1P2Enum.m	(revision 15491)
++++ ../trunk-jpl/src/m/enum/P1P2Enum.m	(revision 15492)
+@@ -1,11 +0,0 @@
+-function macro=P1P2Enum()
+-%P1P2ENUM - Enum of P1P2
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=P1P2Enum()
+-
+-macro=StringToEnum('P1P2');
+Index: ../trunk-jpl/src/m/enum/P2xP1Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/P2xP1Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/P2xP1Enum.m	(revision 15492)
+@@ -0,0 +1,11 @@
++function macro=P2xP1Enum()
++%P2XP1ENUM - Enum of P2xP1
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=P2xP1Enum()
++
++macro=StringToEnum('P2xP1');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15491)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15492)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=562;
++macro=563;
+Index: ../trunk-jpl/src/m/enum/P1bubbleEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/P1bubbleEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/P1bubbleEnum.m	(revision 15492)
+@@ -0,0 +1,11 @@
++function macro=P1bubbleEnum()
++%P1BUBBLEENUM - Enum of P1bubble
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=P1bubbleEnum()
++
++macro=StringToEnum('P1bubble');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15491)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15492)
+@@ -6616,48 +6616,62 @@
+ 
+ 	return StringToEnum('P1')[0]
+ 
+-def P2Enum():
++def P1DGEnum():
+ 	"""
+-	P2ENUM - Enum of P2
++	P1DGENUM - Enum of P1DG
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=P2Enum()
++	      macro=P1DGEnum()
+ 	"""
+ 
+-	return StringToEnum('P2')[0]
++	return StringToEnum('P1DG')[0]
+ 
+-def P1DGEnum():
++def P1bubbleEnum():
+ 	"""
+-	P1DGENUM - Enum of P1DG
++	P1BUBBLEENUM - Enum of P1bubble
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=P1DGEnum()
++	      macro=P1bubbleEnum()
+ 	"""
+ 
+-	return StringToEnum('P1DG')[0]
++	return StringToEnum('P1bubble')[0]
+ 
+-def P1P2Enum():
++def P2Enum():
+ 	"""
+-	P1P2ENUM - Enum of P1P2
++	P2ENUM - Enum of P2
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=P1P2Enum()
++	      macro=P2Enum()
+ 	"""
+ 
+-	return StringToEnum('P1P2')[0]
++	return StringToEnum('P2')[0]
+ 
++def P2xP1Enum():
++	"""
++	P2XP1ENUM - Enum of P2xP1
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=P2xP1Enum()
++	"""
++
++	return StringToEnum('P2xP1')[0]
++
+ def MINIEnum():
+ 	"""
+ 	MINIENUM - Enum of MINI
+@@ -7888,5 +7902,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 562
++	return 563
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15492-15493.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15492-15493.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15492-15493.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/organizer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.py	(revision 15492)
++++ ../trunk-jpl/src/m/classes/organizer.py	(revision 15493)
+@@ -112,7 +112,7 @@
+ 				md=loadmodel(path2)
+ 				return md
+ 		else:
+-			raise IOerror("Could not find '%s'" % path)
++			raise IOError("Could not find '%s'" % path)
+ 	#}}}
+ 	def perform(self,string):    # {{{
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15493-15494.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15493-15494.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15493-15494.diff	(revision 16134)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/m/io/loadvars.py
+===================================================================
+--- ../trunk-jpl/src/m/io/loadvars.py	(revision 15493)
++++ ../trunk-jpl/src/m/io/loadvars.py	(revision 15494)
+@@ -1,5 +1,6 @@
+ import shelve
+ import os.path
++from whichdb import whichdb
+ 
+ def loadvars(*args):
+ 	"""
+@@ -47,7 +48,7 @@
+ 	else:
+ 		raise TypeError("Unrecognized input arguments.")
+ 
+-	if os.path.exists(filename):
++	if whichdb(filename):
+ 		print "Loading variables from file '%s'." % filename
+ 	else:
+ 		raise IOError("File '%s' not found." % filename)
+Index: ../trunk-jpl/src/m/io/loadmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/io/loadmodel.py	(revision 15493)
++++ ../trunk-jpl/src/m/io/loadmodel.py	(revision 15494)
+@@ -1,5 +1,6 @@
+ import os.path
+ from loadvars import *
++from whichdb import whichdb
+ 
+ def loadmodel(path):
+ 	"""
+@@ -11,8 +12,8 @@
+ 	      md=loadmodel(path)
+ 	"""
+ 
+-	#check existence
+-	if os.path.exists(path):
++	#check existence of database (independent of file extension!)
++	if whichdb(path):
+ 		#do nothing
+ 		pass
+ 	else:
Index: /issm/oecreview/Archive/15392-16133/ISSM-15494-15495.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15494-15495.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15494-15495.diff	(revision 16134)
@@ -0,0 +1,75 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15494)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15495)
+@@ -1101,26 +1101,7 @@
+ 			basis[4]=gauss->coord2*(1.+gauss->coord4)/2.;
+ 			basis[5]=gauss->coord3*(1.+gauss->coord4)/2.;
+ 			return;
+-		case P2xP1Enum:
+-			/*Corner nodes*/
+-			basis[ 0]=0.;
+-			basis[ 1]=0.;
+-			basis[ 2]=0.;
+-			basis[ 3]=0.;
+-			basis[ 4]=0.;
+-			basis[ 5]=0.;
+-			/*mid-sides of quads*/
+-			basis[ 6]=0.;
+-			basis[ 7]=0.;
+-			basis[ 8]=0.;
+-			/*mid-sides of triangles*/
+-			basis[ 9]=0.;
+-			basis[10]=0.;
+-			basis[11]=0.;
+-			basis[12]=0.;
+-			basis[13]=0.;
+-			basis[14]=0.;
+-		case MINIEnum:
++		case P1bubbleEnum:
+ 			basis[0]=gauss->coord1*(1.-gauss->coord4)/2.;
+ 			basis[1]=gauss->coord2*(1.-gauss->coord4)/2.;
+ 			basis[2]=gauss->coord3*(1.-gauss->coord4)/2.;
+@@ -1129,6 +1110,42 @@
+ 			basis[5]=gauss->coord3*(1.+gauss->coord4)/2.;
+ 			basis[6]=27.*gauss->coord1*gauss->coord2*gauss->coord3*(1.+gauss->coord4)*(1.-gauss->coord4);
+ 			return;
++		case P2xP1Enum:
++			/*Corner nodes*/
++			basis[ 0]=gauss->coord1*(2.*gauss->coord1-1.)*(1.-gauss->coord4)/2.;
++			basis[ 1]=gauss->coord2*(2.*gauss->coord2-1.)*(1.-gauss->coord4)/2.;
++			basis[ 2]=gauss->coord3*(2.*gauss->coord3-1.)*(1.-gauss->coord4)/2.;
++			basis[ 3]=gauss->coord1*(2.*gauss->coord1-1.)*(1.+gauss->coord4)/2.;
++			basis[ 4]=gauss->coord2*(2.*gauss->coord2-1.)*(1.+gauss->coord4)/2.;
++			basis[ 5]=gauss->coord3*(2.*gauss->coord3-1.)*(1.+gauss->coord4)/2.;
++			/*mid-sides of triangles*/
++			basis[ 6]=4.*gauss->coord3*gauss->coord2*(1.-gauss->coord4)/2.;
++			basis[ 7]=4.*gauss->coord3*gauss->coord1*(1.-gauss->coord4)/2.;
++			basis[ 8]=4.*gauss->coord1*gauss->coord2*(1.-gauss->coord4)/2.;
++			basis[ 9]=4.*gauss->coord3*gauss->coord2*(1.+gauss->coord4)/2.;
++			basis[10]=4.*gauss->coord3*gauss->coord1*(1.+gauss->coord4)/2.;
++			basis[11]=4.*gauss->coord1*gauss->coord2*(1.+gauss->coord4)/2.;
++			return;
++		case P2Enum:
++			/*Corner nodes*/
++			basis[ 0]=gauss->coord1*(2.*gauss->coord1-1.)*gauss->coord4*(gauss->coord4-1.)/2.;
++			basis[ 1]=gauss->coord2*(2.*gauss->coord2-1.)*gauss->coord4*(gauss->coord4-1.)/2.;
++			basis[ 2]=gauss->coord3*(2.*gauss->coord3-1.)*gauss->coord4*(gauss->coord4-1.)/2.;
++			basis[ 3]=gauss->coord1*(2.*gauss->coord1-1.)*gauss->coord4*(gauss->coord4+1.)/2.;
++			basis[ 4]=gauss->coord2*(2.*gauss->coord2-1.)*gauss->coord4*(gauss->coord4+1.)/2.;
++			basis[ 5]=gauss->coord3*(2.*gauss->coord3-1.)*gauss->coord4*(gauss->coord4+1.)/2.;
++			/*mid-sides of quads*/
++			basis[ 6]=gauss->coord1*(1.-gauss->coord4*gauss->coord4);
++			basis[ 7]=gauss->coord2*(1.-gauss->coord4*gauss->coord4);
++			basis[ 8]=gauss->coord3*(1.-gauss->coord4*gauss->coord4);
++			/*mid-sides of triangles*/
++			basis[ 9]=2.*gauss->coord3*gauss->coord2*gauss->coord4*(gauss->coord4-1.);
++			basis[10]=2.*gauss->coord3*gauss->coord1*gauss->coord4*(gauss->coord4-1.);
++			basis[11]=2.*gauss->coord1*gauss->coord2*gauss->coord4*(gauss->coord4-1.);
++			basis[12]=2.*gauss->coord3*gauss->coord2*gauss->coord4*(gauss->coord4+1.);
++			basis[13]=2.*gauss->coord3*gauss->coord1*gauss->coord4*(gauss->coord4+1.);
++			basis[14]=2.*gauss->coord1*gauss->coord2*gauss->coord4*(gauss->coord4+1.);
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15495-15496.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15495-15496.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15495-15496.diff	(revision 16134)
@@ -0,0 +1,413 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15495)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15496)
+@@ -121,7 +121,7 @@
+ void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
+ 	/*Intermediaries*/
+-	const int numnodes = this->GetNumberOfNodes();
++	const int numnodes = this->NumberOfNodes();
+ 
+ 	/*Output */
+ 	int d_nz = 0;
+@@ -895,30 +895,13 @@
+ 
+ 	_assert_(sidlist);
+ 	_assert_(nodes);
+-	int numnodes = this->GetNumberOfNodes();
++	int numnodes = this->NumberOfNodes();
+ 
+ 	for(int i=0;i<numnodes;i++){
+ 		sidlist[i]=nodes[i]->Sid();
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetNumberOfNodes{{{*/
+-int Tria::GetNumberOfNodes(void){
+-
+-	if(this->nodes==NULL) return 0;
+-
+-	switch(this->element_type){
+-		case P1Enum:
+-			return 3;
+-		case P1DGEnum:
+-			return 3;
+-		case P2Enum:
+-			return 6;
+-		default:
+-			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+-	}
+-}
+-/*}}}*/
+ /*FUNCTION Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
+ void Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
+ 
+@@ -5215,7 +5198,7 @@
+ ElementMatrix* Tria::CreateKMatrixAdjointMacAyeal(void){
+ 
+ 	/*Constants*/
+-	const int numnodes = this->GetNumberOfNodes();
++	const int numnodes = this->NumberOfNodes();
+ 	const int numdof   = NDOF2*numnodes;
+ 
+ 	/*Intermediaries */
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15495)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15496)
+@@ -17,7 +17,7 @@
+ /*Element macros*/
+ #define NUMNODESP1    6
+ #define NUMNODESP1_2d 3
+-#define NUMNODESMINI  7
++#define NUMNODESP1b  7
+ 
+ /*Object constructors and destructor*/
+ /*FUNCTION PentaRef::PentaRef(){{{*/
+@@ -97,7 +97,7 @@
+ 	 */
+ 
+ 	int i;
+-	IssmDouble dbasismini[3][NUMNODESMINI];
++	IssmDouble dbasismini[3][NUMNODESP1b];
+ 	IssmDouble basis[NUMNODESP1];
+ 
+ 	/*Get dbasis in actual coordinate system: */
+@@ -105,7 +105,7 @@
+ 	GetNodalFunctionsP1(basis,gauss);
+ 
+ 	/*Build B: */
+-	for(i=0;i<NUMNODESMINI;i++){
++	for(i=0;i<NUMNODESP1b;i++){
+ 		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i];
+ 		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
+ 		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+@@ -220,13 +220,13 @@
+ 	 */
+ 
+ 	int    i;
+-	IssmDouble dbasismini[3][NUMNODESMINI];
++	IssmDouble dbasismini[3][NUMNODESP1b];
+ 
+ 	/*Get dbasis in actual coordinate system: */
+ 	GetNodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss);
+ 
+ 	/*Build Bprime: */
+-	for(i=0;i<NUMNODESMINI;i++){
++	for(i=0;i<NUMNODESP1b;i++){
+ 		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = 2.*dbasismini[0][i];
+ 		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = dbasismini[1][i];
+ 		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+@@ -265,7 +265,7 @@
+ 
+ 	int i;
+ 
+-	IssmDouble dbasismini[3][NUMNODESMINI];
++	IssmDouble dbasismini[3][NUMNODESP1b];
+ 	IssmDouble basis[NUMNODESP1];
+ 
+ 	/*Get dbasismini in actual coordinate system: */
+@@ -273,7 +273,7 @@
+ 	GetNodalFunctionsP1(basis, gauss);
+ 
+ 	/*Build B: */
+-	for(i=0;i<NUMNODESMINI;i++){
++	for(i=0;i<NUMNODESP1b;i++){
+ 		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i+0]; //B[0][NDOF4*i+0] = dbasis[0][i+0];
+ 		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
+ 		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+@@ -398,7 +398,7 @@
+ 	 */
+ 
+ 	int i;
+-	IssmDouble dbasismini[3][NUMNODESMINI];
++	IssmDouble dbasismini[3][NUMNODESP1b];
+ 	IssmDouble basis[NUMNODESP1];
+ 
+ 	/*Get dbasismini in actual coordinate system: */
+@@ -406,7 +406,7 @@
+ 	GetNodalFunctionsP1(basis, gauss);
+ 
+ 	/*B_primeuild B_prime: */
+-	for(i=0;i<NUMNODESMINI;i++){
++	for(i=0;i<NUMNODESP1b;i++){
+ 		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i];
+ 		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
+ 		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+@@ -1197,58 +1197,59 @@
+ 	switch(this->element_type){
+ 		case P1Enum: case P1DGEnum:
+ 			/*Nodal function 1*/
+-			dbasis[NUMNODESP1*0+0]=-0.5*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESP1*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESP1*2+0]=-0.5*gauss->coord1;
++			dbasis[NUMNODESP1*0+0]   = (zeta-1.)/4.;
++			dbasis[NUMNODESP1*1+0]   = SQRT3/12.*(zeta-1.);
++			dbasis[NUMNODESP1*2+0]   = -.5*gauss->coord1;
+ 			/*Nodal function 2*/
+-			dbasis[NUMNODESP1*0+1]=0.5*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESP1*1+1]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESP1*2+1]=-0.5*gauss->coord2;
++			dbasis[NUMNODESP1*0+1]   = (1.-zeta)/4.;
++			dbasis[NUMNODESP1*1+1]   = SQRT3/12.*(zeta-1);
++			dbasis[NUMNODESP1*2+1]   = -.5*gauss->coord2;
+ 			/*Nodal function 3*/
+-			dbasis[NUMNODESP1*0+2]=0.;
+-			dbasis[NUMNODESP1*1+2]=SQRT3/3.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESP1*2+2]=-0.5*gauss->coord3;
++			dbasis[NUMNODESP1*0+2]   = 0.;
++			dbasis[NUMNODESP1*1+2]   = SQRT3/6.*(1.-zeta);
++			dbasis[NUMNODESP1*2+2]   = -.5*gauss->coord3;
+ 			/*Nodal function 4*/
+-			dbasis[NUMNODESP1*0+3]=-0.5*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESP1*1+3]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESP1*2+3]=0.5*gauss->coord1;
++			dbasis[NUMNODESP1*0+3]   = -(1.+zeta)/4.;
++			dbasis[NUMNODESP1*1+3]   = -SQRT3/12.*(1.+zeta);
++			dbasis[NUMNODESP1*2+3]   = .5*gauss->coord1;
+ 			/*Nodal function 5*/
+-			dbasis[NUMNODESP1*0+4]=0.5*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESP1*1+4]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESP1*2+4]=0.5*gauss->coord2;
++			dbasis[NUMNODESP1*0+4]   = (1.+zeta)/4.;
++			dbasis[NUMNODESP1*1+4]   = -SQRT3/12.*(1.+zeta);
++			dbasis[NUMNODESP1*2+4]   = .5*gauss->coord2;
+ 			/*Nodal function 6*/
+-			dbasis[NUMNODESP1*0+5]=0.;
+-			dbasis[NUMNODESP1*1+5]=SQRT3/3.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESP1*2+5]=0.5*gauss->coord3;
+-		case MINIEnum:
++			dbasis[NUMNODESP1*0+5]   = 0.;
++			dbasis[NUMNODESP1*1+5]   = SQRT3/6.*(1.+zeta);
++			dbasis[NUMNODESP1*2+5]   = .5*gauss->coord3;
++			return;
++		case P1bubbleEnum:
+ 			/*Nodal function 1*/
+-			dbasis[NUMNODESMINI*0+0]=-0.5*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESMINI*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+0]=-0.5*gauss->coord1;
++			dbasis[NUMNODESP1*0+0]   = (zeta-1.)/4.;
++			dbasis[NUMNODESP1*1+0]   = SQRT3/12.*(zeta-1.);
++			dbasis[NUMNODESP1*2+0]   = -.5*gauss->coord1;
+ 			/*Nodal function 2*/
+-			dbasis[NUMNODESMINI*0+1]=0.5*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESMINI*1+1]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+1]=-0.5*gauss->coord2;
++			dbasis[NUMNODESP1*0+1]   = (1.-zeta)/4.;
++			dbasis[NUMNODESP1*1+1]   = SQRT3/12.*(zeta-1);
++			dbasis[NUMNODESP1*2+1]   = -.5*gauss->coord2;
+ 			/*Nodal function 3*/
+-			dbasis[NUMNODESMINI*0+2]=0.;
+-			dbasis[NUMNODESMINI*1+2]=SQRT3/3.0*(1.0-zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+2]=-0.5*gauss->coord3;
++			dbasis[NUMNODESP1*0+2]   = 0.;
++			dbasis[NUMNODESP1*1+2]   = SQRT3/6.*(1.-zeta);
++			dbasis[NUMNODESP1*2+2]   = -.5*gauss->coord3;
+ 			/*Nodal function 4*/
+-			dbasis[NUMNODESMINI*0+3]=-0.5*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESMINI*1+3]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+3]=0.5*gauss->coord1;
++			dbasis[NUMNODESP1*0+3]   = -(1.+zeta)/4.;
++			dbasis[NUMNODESP1*1+3]   = -SQRT3/12.*(1.+zeta);
++			dbasis[NUMNODESP1*2+3]   = .5*gauss->coord1;
+ 			/*Nodal function 5*/
+-			dbasis[NUMNODESMINI*0+4]=0.5*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESMINI*1+4]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+4]=0.5*gauss->coord2;
++			dbasis[NUMNODESP1*0+4]   = (1.+zeta)/4.;
++			dbasis[NUMNODESP1*1+4]   = -SQRT3/12.*(1.+zeta);
++			dbasis[NUMNODESP1*2+4]   = .5*gauss->coord2;
+ 			/*Nodal function 6*/
+-			dbasis[NUMNODESMINI*0+5]=0.;
+-			dbasis[NUMNODESMINI*1+5]=SQRT3/3.0*(1.0+zeta)/2.0;
+-			dbasis[NUMNODESMINI*2+5]=0.5*gauss->coord3;
++			dbasis[NUMNODESP1*0+5]   = 0.;
++			dbasis[NUMNODESP1*1+5]   = SQRT3/6.*(1.+zeta);
++			dbasis[NUMNODESP1*2+5]   = .5*gauss->coord3;
+ 			/*Nodal function 7*/
+-			dbasis[NUMNODESMINI*0+6]=27.*(1.+zeta)*(1.-zeta)*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);
+-			dbasis[NUMNODESMINI*1+6]=27.*(1.+zeta)*(1.-zeta)*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
+-			dbasis[NUMNODESMINI*2+6]=27*gauss->coord1*gauss->coord2*gauss->coord3*(-2.0*zeta);
++			dbasis[NUMNODESP1b*0+6] = 27.*(1.+zeta)*(1.-zeta)*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);
++			dbasis[NUMNODESP1b*1+6] = 27.*(1.+zeta)*(1.-zeta)*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
++			dbasis[NUMNODESP1b*2+6] = -54*gauss->coord1*gauss->coord2*gauss->coord3*zeta;
+ 			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+@@ -1277,7 +1278,7 @@
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
+ 	 * actual coordinate system): */
+ 
+-	IssmDouble    dbasismini_ref[3][NUMNODESMINI];
++	IssmDouble    dbasismini_ref[3][NUMNODESP1b];
+ 	IssmDouble    Jinv[3][3];
+ 
+ 	/*Get derivative values with respect to parametric coordinate system: */
+@@ -1293,10 +1294,10 @@
+ 	 * [dhi/dz]        [dhi/dzeta]
+ 	 */
+ 
+-	for(int i=0;i<NUMNODESMINI;i++){
+-		*(dbasismini+NUMNODESMINI*0+i)=Jinv[0][0]*dbasismini_ref[0][i]+Jinv[0][1]*dbasismini_ref[1][i]+Jinv[0][2]*dbasismini_ref[2][i];
+-		*(dbasismini+NUMNODESMINI*1+i)=Jinv[1][0]*dbasismini_ref[0][i]+Jinv[1][1]*dbasismini_ref[1][i]+Jinv[1][2]*dbasismini_ref[2][i];
+-		*(dbasismini+NUMNODESMINI*2+i)=Jinv[2][0]*dbasismini_ref[0][i]+Jinv[2][1]*dbasismini_ref[1][i]+Jinv[2][2]*dbasismini_ref[2][i];
++	for(int i=0;i<NUMNODESP1b;i++){
++		*(dbasismini+NUMNODESP1b*0+i)=Jinv[0][0]*dbasismini_ref[0][i]+Jinv[0][1]*dbasismini_ref[1][i]+Jinv[0][2]*dbasismini_ref[2][i];
++		*(dbasismini+NUMNODESP1b*1+i)=Jinv[1][0]*dbasismini_ref[0][i]+Jinv[1][1]*dbasismini_ref[1][i]+Jinv[1][2]*dbasismini_ref[2][i];
++		*(dbasismini+NUMNODESP1b*2+i)=Jinv[2][0]*dbasismini_ref[0][i]+Jinv[2][1]*dbasismini_ref[1][i]+Jinv[2][2]*dbasismini_ref[2][i];
+ 	}
+ 
+ }
+@@ -1309,33 +1310,33 @@
+ 	IssmDouble zeta=gauss->coord4;
+ 
+ 	/*Nodal function 1*/
+-	dbasis[NUMNODESMINI*0+0]=-0.5*(1.0-zeta)/2.0;
+-	dbasis[NUMNODESMINI*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-	dbasis[NUMNODESMINI*2+0]=-0.5*gauss->coord1;
++	dbasis[NUMNODESP1b*0+0]=-0.5*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1b*1+0]=-SQRT3/6.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1b*2+0]=-0.5*gauss->coord1;
+ 	/*Nodal function 2*/
+-	dbasis[NUMNODESMINI*0+1]=0.5*(1.0-zeta)/2.0;
+-	dbasis[NUMNODESMINI*1+1]=-SQRT3/6.0*(1.0-zeta)/2.0;
+-	dbasis[NUMNODESMINI*2+1]=-0.5*gauss->coord2;
++	dbasis[NUMNODESP1b*0+1]=0.5*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1b*1+1]=-SQRT3/6.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1b*2+1]=-0.5*gauss->coord2;
+ 	/*Nodal function 3*/
+-	dbasis[NUMNODESMINI*0+2]=0.;
+-	dbasis[NUMNODESMINI*1+2]=SQRT3/3.0*(1.0-zeta)/2.0;
+-	dbasis[NUMNODESMINI*2+2]=-0.5*gauss->coord3;
++	dbasis[NUMNODESP1b*0+2]=0.;
++	dbasis[NUMNODESP1b*1+2]=SQRT3/3.0*(1.0-zeta)/2.0;
++	dbasis[NUMNODESP1b*2+2]=-0.5*gauss->coord3;
+ 	/*Nodal function 4*/
+-	dbasis[NUMNODESMINI*0+3]=-0.5*(1.0+zeta)/2.0;
+-	dbasis[NUMNODESMINI*1+3]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-	dbasis[NUMNODESMINI*2+3]=0.5*gauss->coord1;
++	dbasis[NUMNODESP1b*0+3]=-0.5*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1b*1+3]=-SQRT3/6.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1b*2+3]=0.5*gauss->coord1;
+ 	/*Nodal function 5*/
+-	dbasis[NUMNODESMINI*0+4]=0.5*(1.0+zeta)/2.0;
+-	dbasis[NUMNODESMINI*1+4]=-SQRT3/6.0*(1.0+zeta)/2.0;
+-	dbasis[NUMNODESMINI*2+4]=0.5*gauss->coord2;
++	dbasis[NUMNODESP1b*0+4]=0.5*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1b*1+4]=-SQRT3/6.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1b*2+4]=0.5*gauss->coord2;
+ 	/*Nodal function 6*/
+-	dbasis[NUMNODESMINI*0+5]=0.;
+-	dbasis[NUMNODESMINI*1+5]=SQRT3/3.0*(1.0+zeta)/2.0;
+-	dbasis[NUMNODESMINI*2+5]=0.5*gauss->coord3;
++	dbasis[NUMNODESP1b*0+5]=0.;
++	dbasis[NUMNODESP1b*1+5]=SQRT3/3.0*(1.0+zeta)/2.0;
++	dbasis[NUMNODESP1b*2+5]=0.5*gauss->coord3;
+ 	/*Nodal function 7*/
+-	dbasis[NUMNODESMINI*0+6]=27.*(1.+zeta)*(1.-zeta)*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);
+-	dbasis[NUMNODESMINI*1+6]=27.*(1.+zeta)*(1.-zeta)*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
+-	dbasis[NUMNODESMINI*2+6]=27*gauss->coord1*gauss->coord2*gauss->coord3*(-2.0*zeta);
++	dbasis[NUMNODESP1b*0+6]=27.*(1.+zeta)*(1.-zeta)*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);
++	dbasis[NUMNODESP1b*1+6]=27.*(1.+zeta)*(1.-zeta)*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
++	dbasis[NUMNODESP1b*2+6]=27*gauss->coord1*gauss->coord2*gauss->coord3*(-2.0*zeta);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsP1 {{{*/
+@@ -1503,7 +1504,7 @@
+ 
+ 	switch(this->element_type){
+ 		case P1Enum:   return NUMNODESP1;
+-		case MINIEnum: return NUMNODESMINI;
++		case MINIEnum: return NUMNODESP1b;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15495)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15496)
+@@ -82,7 +82,6 @@
+ 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+ 		void   Delta18oParameterization(void);
+ 		int    GetNodeIndex(Node* node);
+-		int    GetNumberOfNodes(void);
+ 		void   GetNodesSidList(int* sidlist);
+ 		int    Sid();
+ 		bool   IsOnBed();
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15495)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15496)
+@@ -1010,28 +1010,13 @@
+ 
+ 	_assert_(sidlist);
+ 	_assert_(nodes);
+-	int numnodes = this->GetNumberOfNodes();
++	int numnodes = this->NumberOfNodes();
+ 
+ 	for(int i=0;i<numnodes;i++){
+ 		sidlist[i]=nodes[i]->Sid();
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetNumberOfNodes{{{*/
+-int Penta::GetNumberOfNodes(void){
+-
+-	if(this->nodes==NULL) return 0;
+-
+-	switch(this->element_type){
+-		case P1Enum:
+-			return 6;
+-		case P1DGEnum:
+-			return 6;
+-		default:
+-			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+-	}
+-}
+-/*}}}*/
+ /*FUNCTION Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
+ void Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
+ 
+@@ -2631,7 +2616,7 @@
+ void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
+ 	/*Intermediaries*/
+-	const int numnodes = this->GetNumberOfNodes();
++	const int numnodes = this->NumberOfNodes();
+ 
+ 	/*Output */
+ 	int d_nz = 0;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15495)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15496)
+@@ -88,7 +88,6 @@
+ 		void   DeleteResults(void);
+ 		int    GetNodeIndex(Node* node);
+ 		void   GetNodesSidList(int* sidlist);
+-		int    GetNumberOfNodes(void);
+ 		void   GetSolutionFromInputs(Vector<IssmDouble>* solution);
+ 		IssmDouble GetZcoord(GaussPenta* gauss);
+ 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int name_enum);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15495)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15496)
+@@ -529,13 +529,13 @@
+ 		case P1Enum: case P1DGEnum:
+ 			/*Nodal function 1*/
+ 			dbasis[NUMNODESP1*0+0] = -0.5;
+-			dbasis[NUMNODESP1*1+0] = -1.0/(2.0*SQRT3);
++			dbasis[NUMNODESP1*1+0] = -SQRT3/6.;
+ 			/*Nodal function 2*/
+ 			dbasis[NUMNODESP1*0+1] = 0.5;
+-			dbasis[NUMNODESP1*1+1] = -1.0/(2.0*SQRT3);
++			dbasis[NUMNODESP1*1+1] = -SQRT3/6.;
+ 			/*Nodal function 3*/
+ 			dbasis[NUMNODESP1*0+2] = 0;
+-			dbasis[NUMNODESP1*1+2] = 1.0/SQRT3;
++			dbasis[NUMNODESP1*1+2] = SQRT3/3.;
+ 			return;
+ 		case P2Enum:
+ 			/*Nodal function 1*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15496-15497.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15496-15497.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15496-15497.diff	(revision 16134)
@@ -0,0 +1,99 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15496)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15497)
+@@ -121,7 +121,7 @@
+ void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
+ 	/*Intermediaries*/
+-	const int numnodes = this->NumberOfNodes();
++	const int numnodes = this->NumberofNodes();
+ 
+ 	/*Output */
+ 	int d_nz = 0;
+@@ -895,13 +895,18 @@
+ 
+ 	_assert_(sidlist);
+ 	_assert_(nodes);
+-	int numnodes = this->NumberOfNodes();
++	int numnodes = this->NumberofNodes();
+ 
+ 	for(int i=0;i<numnodes;i++){
+ 		sidlist[i]=nodes[i]->Sid();
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetNumberOfNodes;{{{*/
++int Tria::GetNumberOfNodes(void){
++	return this->NumberofNodes();
++}
++/*}}}*/
+ /*FUNCTION Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
+ void Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
+ 
+@@ -5198,7 +5203,7 @@
+ ElementMatrix* Tria::CreateKMatrixAdjointMacAyeal(void){
+ 
+ 	/*Constants*/
+-	const int numnodes = this->NumberOfNodes();
++	const int numnodes = this->NumberofNodes();
+ 	const int numdof   = NDOF2*numnodes;
+ 
+ 	/*Intermediaries */
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15496)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15497)
+@@ -83,6 +83,7 @@
+ 		void   Delta18oParameterization(void);
+ 		int    GetNodeIndex(Node* node);
+ 		void   GetNodesSidList(int* sidlist);
++		int    GetNumberOfNodes(void);
+ 		int    Sid();
+ 		bool   IsOnBed();
+ 		bool   IsFloating();
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15496)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15497)
+@@ -1010,13 +1010,18 @@
+ 
+ 	_assert_(sidlist);
+ 	_assert_(nodes);
+-	int numnodes = this->NumberOfNodes();
++	int numnodes = this->NumberofNodes();
+ 
+ 	for(int i=0;i<numnodes;i++){
+ 		sidlist[i]=nodes[i]->Sid();
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetNumberOfNodes;{{{*/
++int Penta::GetNumberOfNodes(void){
++	return this->NumberofNodes();
++}
++/*}}}*/
+ /*FUNCTION Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
+ void Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
+ 
+@@ -2616,7 +2621,7 @@
+ void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
+ 	/*Intermediaries*/
+-	const int numnodes = this->NumberOfNodes();
++	const int numnodes = this->NumberofNodes();
+ 
+ 	/*Output */
+ 	int d_nz = 0;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15496)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15497)
+@@ -88,6 +88,7 @@
+ 		void   DeleteResults(void);
+ 		int    GetNodeIndex(Node* node);
+ 		void   GetNodesSidList(int* sidlist);
++		int    GetNumberOfNodes(void);
+ 		void   GetSolutionFromInputs(Vector<IssmDouble>* solution);
+ 		IssmDouble GetZcoord(GaussPenta* gauss);
+ 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int name_enum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15497-15498.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15497-15498.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15497-15498.diff	(revision 16134)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 15497)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 15498)
+@@ -160,7 +160,7 @@
+ 					%compare to archive
+ 					% matlab reads the dimensions reversed and matrices transposed from netcdf, so compensate for that
+ 					archive=transpose(ncread(['../Archives/' archive_name '.nc'],[archive_name '_field' num2str(k)]));
+-					error_diff=full(max(abs(archive(:)-field(:)))/(max(abs(archive))+eps));
++					error_diff=full(max(abs(archive(:)-field(:)))/(max(abs(archive))+tolerance));
+ 
+ 					%disp test result
+ 					if (error_diff>tolerance);
+Index: ../trunk-jpl/test/Archives/Archive333.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive302.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive114.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive331.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive305.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive112.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive314.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive113.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive315.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive324.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive318.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15498-15499.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15498-15499.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15498-15499.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 15498)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 15499)
+@@ -160,7 +160,7 @@
+ 					%compare to archive
+ 					% matlab reads the dimensions reversed and matrices transposed from netcdf, so compensate for that
+ 					archive=transpose(ncread(['../Archives/' archive_name '.nc'],[archive_name '_field' num2str(k)]));
+-					error_diff=full(max(abs(archive(:)-field(:)))/(max(abs(archive))+tolerance));
++					error_diff=full(max(abs(archive(:)-field(:)))/(max(abs(archive))+eps));
+ 
+ 					%disp test result
+ 					if (error_diff>tolerance);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15499-15500.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15499-15500.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15499-15500.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive115.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15500-15501.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15500-15501.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15500-15501.diff	(revision 16134)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 15500)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 15501)
+@@ -355,12 +355,12 @@
+ 	axis equal off
+ 	%box off
+ 	if strcmpi(md.mesh.hemisphere,'n') | strcmpi(md.mesh.hemisphere,'north'),
+-		A=expread([ jplsvn() '/projects/ModelData/Exp/GreenlandBoxFront.exp']);
++		A=expread('/u/astrid-r1b/ModelData/Exp/GreenlandBoxFront.exp');
+ 		[A.x A.y]=ll2xy(A.x,A.y,+1,45,70);
+ 		A.x = A.x(1:30:end);
+ 		A.y = A.y(1:30:end);
+ 	elseif strcmpi(md.mesh.hemisphere,'s') | strcmpi(md.mesh.hemisphere,'south'),
+-		A=expread([ jplsvn() '/projects/ModelData/Exp/Antarctica.exp']);
++		A=expread('/u/astrid-r1b/ModelData/Exp/Antarctica.exp');
+ 	else
+ 		error('applyoptions error message: hemisphere not defined');
+ 	end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15501-15502.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15501-15502.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15501-15502.diff	(revision 16134)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/m/plot/manualcb.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/manualcb.m	(revision 15501)
++++ ../trunk-jpl/src/m/plot/manualcb.m	(revision 15502)
+@@ -12,6 +12,7 @@
+ %      - 'title'       : colorbar title
+ %      - 'tick'        : specified values of tick labels
+ %      - 'ticksep'     : spacing between ticks
++%      - 'inverttickposition' : put ticks on the left hand side for vertical cb
+ 
+ %check inputs
+ if nargin<3,
+@@ -52,12 +53,17 @@
+ ylim([0 1]);
+ 
+ %Prepare ticks
+-deltaz = getfieldvalue(options,'ticksep',dtick(zmax-zmin));
+-ztick  = getfieldvalue(options,'tick',(deltaz*ceil(zmin/deltaz)):deltaz:zmax);
+-if (any(ztick>zmax) | any(ztick<zmin)),
+-	error('one or more specified tick values falls outside of [zmin,zmax]');
++if ~exist(options,'log'),
++	deltaz = getfieldvalue(options,'ticksep',dtick(zmax-zmin));
++	ztick  = getfieldvalue(options,'tick',(deltaz*ceil(zmin/deltaz)):deltaz:zmax);
++	if (any(ztick>zmax) | any(ztick<zmin)),
++		error('one or more specified tick values falls outside of [zmin,zmax]');
++	end
++	ytick  = (ztick-zmin)/(zmax-zmin);
++else
++	ztick = getfieldvalue(options,'tick',round(logspace(log(zmin)/log(10),log(zmax)/log(10),8)));
++	ytick = linspace(0,1,numel(ztick));
+ end
+-ytick  = (ztick-zmin)/(zmax-zmin);
+ 
+ %Display colorbar
+ hold on
+@@ -72,7 +78,11 @@
+ %Add ticks
+ if strcmpi(getfieldvalue(options,'orientation','vertical'),'vertical'),
+ 	%Use FOR LOOP otherwise numbers are not correcly centered
+-	for i=1:length(ytick), text(1.5,ytick(i),num2str(ztick(i)),'HorizontalAlignment','left','VerticalAlignment','middle','FontSize',fontsize); end
++	if getfieldvalue(options,'inverttickposition',0)==1,
++		for i=1:length(ytick), text(-0.5,ytick(i),num2str(ztick(i)),'HorizontalAlignment','right','VerticalAlignment','middle','FontSize',fontsize); end
++	else
++		for i=1:length(ytick), text(1.5,ytick(i),num2str(ztick(i)),'HorizontalAlignment','left','VerticalAlignment','middle','FontSize',fontsize); end
++	end
+ 	if smallbars,
+ 		for i=1:numel(ztick)
+ 			patch([0.8 1.0],[ytick(i) ytick(i)],'k')
+@@ -91,19 +101,19 @@
+ end
+ 
+ if exist(options,'title'),
++	title(getfieldvalue(options,'title'),'FontSize',fontsize);
++end
++if exist(options,'ylabel'),
+ 	if strcmpi(getfieldvalue(options,'orientation','vertical'),'horizontal'),
+ 		th=title(getfieldvalue(options,'title'),'FontSize',fontsize);
+ 		set(th,'Position',[ytick(end)+0.075,-0.3]);
+ 	else
+-		title(getfieldvalue(options,'title'),'FontSize',fontsize);
++		ylabel(getfieldvalue(options,'ylabel'),'FontSize',fontsize);
+ 	end
+ end
+-if exist(options,'ylabel'),
+-	ylabel(getfieldvalue(options,'ylabel'),'FontSize',fontsize);
+-end
+ 	
+ %Back to original axes
+-if strcmpi(getfieldvalue(options,'showregion',0),0)
++if getfieldvalue(options,'showregion',0)==0,
+ 	axes(mainaxes);
+ end
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15502-15503.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15502-15503.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15502-15503.diff	(revision 16134)
@@ -0,0 +1,272 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/Synchronize.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/Synchronize.sh	(revision 15502)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/Synchronize.sh	(revision 15503)
+@@ -13,7 +13,7 @@
+ #Synchronize objects
+ cat c.vim | sed "/ISSM's objects begin/,/vim: ts=8/d" > temp
+ echo "\"ISSM's objects begin" >> temp
+-find ../../../../../src/c/classes -name "*.cpp" | sed -e "s/\// /g" -e "s/\.cpp//"| awk '{print  $(NF)}' | awk '{ printf "syn keyword cType " $1 "\n"}'>> temp
++find ../../../../../src/c/classes -name "*.cpp" -o -name "*.h" | sed -e "s/\// /g" -e "s/\.cpp//" -e "s/\.h//" | awk '{print  $(NF)}' | sort | uniq | awk '{ printf "syn keyword cType " $1 "\n"}'>> temp
+ echo "\"ISSM's objects end" >> temp
+ cat c.vim | sed "1,/ISSM's objects end/d" >> temp
+ 
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15502)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15503)
+@@ -409,86 +409,106 @@
+ syn keyword	cType		IssmDouble IssmPDouble
+ 
+ "ISSM's objects begin
+-syn keyword cType Matdamageice
+-syn keyword cType Materials
+-syn keyword cType Matice
+-syn keyword cType Matpar
++syn keyword cType BoolElementResult
++syn keyword cType BoolInput
++syn keyword cType BoolParam
++syn keyword cType classes
++syn keyword cType Constraint
++syn keyword cType Constraints
++syn keyword cType Contour
++syn keyword cType Contours
++syn keyword cType ControlInput
++syn keyword cType DatasetInput
++syn keyword cType DataSetParam
++syn keyword cType DependentObject
+ syn keyword cType DofIndexing
+-syn keyword cType IntVecParam
+-syn keyword cType BoolParam
+-syn keyword cType IntMatParam
++syn keyword cType DoubleElementResult
++syn keyword cType DoubleInput
++syn keyword cType DoubleMatArrayParam
++syn keyword cType DoubleMatParam
++syn keyword cType DoubleParam
+ syn keyword cType DoubleTransientMatParam
+-syn keyword cType StringParam
+ syn keyword cType DoubleVecParam
+-syn keyword cType DoubleMatParam
++syn keyword cType Element
++syn keyword cType ElementHook
++syn keyword cType ElementMatrix
++syn keyword cType ElementResult
++syn keyword cType Elements
++syn keyword cType ElementVector
++syn keyword cType ExponentialVariogram
++syn keyword cType ExternalResult
++syn keyword cType FemModel
+ syn keyword cType FileParam
+-syn keyword cType Parameters
+-syn keyword cType DataSetParam
++syn keyword cType Friction
++syn keyword cType GaussianVariogram
++syn keyword cType gaussobjects
++syn keyword cType GaussPenta
++syn keyword cType GaussTria
++syn keyword cType GenericExternalResult
++syn keyword cType GenericOption
++syn keyword cType GenericParam
++syn keyword cType GiaDeflectionCoreArgs
++syn keyword cType Hook
++syn keyword cType Icefront
++syn keyword cType IndependentObject
++syn keyword cType Input
++syn keyword cType Inputs
++syn keyword cType IntInput
++syn keyword cType IntMatParam
+ syn keyword cType IntParam
+-syn keyword cType VectorParam
++syn keyword cType IntVecParam
++syn keyword cType IoModel
++syn keyword cType krigingobjects
++syn keyword cType Load
++syn keyword cType Loads
++syn keyword cType Matdamageice
++syn keyword cType Material
++syn keyword cType Materials
++syn keyword cType Matice
++syn keyword cType Matpar
++syn keyword cType matrixobjects
+ syn keyword cType MatrixParam
+-syn keyword cType StringArrayParam
+-syn keyword cType TransientParam
+-syn keyword cType DoubleParam
+-syn keyword cType DoubleMatArrayParam
+-syn keyword cType ExponentialVariogram
+-syn keyword cType PowerVariogram
+-syn keyword cType Quadtree
++syn keyword cType Node
++syn keyword cType Nodes
++syn keyword cType Numericalflux
++syn keyword cType Observation
+ syn keyword cType Observations
+-syn keyword cType GaussianVariogram
+-syn keyword cType SphericalVariogram
+-syn keyword cType Observation
+-syn keyword cType RiftStruct
++syn keyword cType Option
++syn keyword cType Options
+ syn keyword cType OptionUtilities
+-syn keyword cType Options
++syn keyword cType Param
++syn keyword cType Parameters
++syn keyword cType Patch
++syn keyword cType Pengrid
+ syn keyword cType Penpair
+-syn keyword cType Loads
+-syn keyword cType Icefront
+-syn keyword cType Friction
+-syn keyword cType Riftfront
+-syn keyword cType Numericalflux
+-syn keyword cType Pengrid
+-syn keyword cType Contours
+-syn keyword cType Vertex
+-syn keyword cType ElementMatrix
+-syn keyword cType ElementVector
++syn keyword cType Penta
++syn keyword cType PentaInput
++syn keyword cType PentaP1ElementResult
++syn keyword cType PentaRef
++syn keyword cType PowerVariogram
+ syn keyword cType Profiler
++syn keyword cType Quadtree
+ syn keyword cType Results
+-syn keyword cType PentaP1ElementResult
+-syn keyword cType DoubleElementResult
+-syn keyword cType BoolElementResult
+-syn keyword cType TriaP1ElementResult
+-syn keyword cType Elements
+-syn keyword cType TriaHook
+-syn keyword cType PentaHook
+-syn keyword cType Tria
+-syn keyword cType Penta
+-syn keyword cType TriaRef
+-syn keyword cType PentaRef
+-syn keyword cType GaussTria
+-syn keyword cType GaussPenta
+-syn keyword cType DependentObject
+-syn keyword cType Patch
+-syn keyword cType Hook
+-syn keyword cType ControlInput
+-syn keyword cType DatasetInput
+-syn keyword cType IntInput
+-syn keyword cType BoolInput
+-syn keyword cType Inputs
+-syn keyword cType TransientInput
+-syn keyword cType PentaP1Input
+-syn keyword cType DoubleInput
+-syn keyword cType TriaInput
+-syn keyword cType Constraints
++syn keyword cType Riftfront
++syn keyword cType RiftStruct
++syn keyword cType Segment
+ syn keyword cType SpcDynamic
+ syn keyword cType SpcStatic
+ syn keyword cType SpcTransient
+-syn keyword cType Nodes
+-syn keyword cType IndependentObject
++syn keyword cType SphericalVariogram
++syn keyword cType StringArrayParam
++syn keyword cType StringParam
++syn keyword cType TransientInput
++syn keyword cType TransientParam
++syn keyword cType Tria
++syn keyword cType TriaInput
++syn keyword cType TriaP1ElementResult
++syn keyword cType TriaRef
++syn keyword cType Update
++syn keyword cType Variogram
++syn keyword cType VectorParam
++syn keyword cType Vertex
+ syn keyword cType Vertices
+-syn keyword cType Node
+-syn keyword cType IoModel
+-syn keyword cType FemModel
+ "ISSM's objects end
+ "ISSM's Enums begin
+ syn keyword cConstant AutodiffIsautodiffEnum
+@@ -553,6 +573,8 @@
+ syn keyword cConstant FlowequationIsl1l2Enum
+ syn keyword cConstant FlowequationIsmacayealpattynEnum
+ syn keyword cConstant FlowequationIsstokesEnum
++syn keyword cConstant FlowequationFeStokesEnum
++syn keyword cConstant FlowequationFeSsaEnum
+ syn keyword cConstant FlowequationVertexEquationEnum
+ syn keyword cConstant FrictionCoefficientEnum
+ syn keyword cConstant FrictionPEnum
+@@ -626,6 +648,7 @@
+ syn keyword cConstant MaskVertexonfloatingiceEnum
+ syn keyword cConstant MaskVertexongroundediceEnum
+ syn keyword cConstant MaskVertexonwaterEnum
++syn keyword cConstant IcelevelsetEnum
+ syn keyword cConstant MaterialsBetaEnum
+ syn keyword cConstant MaterialsHeatcapacityEnum
+ syn keyword cConstant MaterialsLatentheatEnum
+@@ -649,14 +672,11 @@
+ syn keyword cConstant MaterialsMantleDensityEnum
+ syn keyword cConstant MeshAverageVertexConnectivityEnum
+ syn keyword cConstant MeshDimensionEnum
+-syn keyword cConstant MeshEdgesEnum
+-syn keyword cConstant MeshElementconnectivityEnum
+ syn keyword cConstant MeshElementonbedEnum
+ syn keyword cConstant MeshElementonsurfaceEnum
+ syn keyword cConstant MeshElements2dEnum
+ syn keyword cConstant MeshElementsEnum
+ syn keyword cConstant MeshLowerelementsEnum
+-syn keyword cConstant MeshNumberofedgesEnum
+ syn keyword cConstant MeshNumberofelements2dEnum
+ syn keyword cConstant MeshNumberofelementsEnum
+ syn keyword cConstant MeshNumberoflayersEnum
+@@ -686,6 +706,7 @@
+ syn keyword cConstant QmuPartitionEnum
+ syn keyword cConstant QmuResponsedescriptorsEnum
+ syn keyword cConstant QmuVariabledescriptorsEnum
++syn keyword cConstant QmuMaterialsRheologyBEnum
+ syn keyword cConstant RiftsNumriftsEnum
+ syn keyword cConstant RiftsRiftstructEnum
+ syn keyword cConstant SettingsIoGatherEnum
+@@ -753,8 +774,8 @@
+ syn keyword cConstant DefaultAnalysisEnum
+ syn keyword cConstant BalancethicknessAnalysisEnum
+ syn keyword cConstant BalancethicknessSolutionEnum
+-syn keyword cConstant WeakBalancethicknessAnalysisEnum
+-syn keyword cConstant WeakBalancethicknessSolutionEnum
++syn keyword cConstant BalancethicknessSoftAnalysisEnum
++syn keyword cConstant BalancethicknessSoftSolutionEnum
+ syn keyword cConstant BedSlopeAnalysisEnum
+ syn keyword cConstant BedSlopeSolutionEnum
+ syn keyword cConstant BedSlopeXAnalysisEnum
+@@ -842,7 +863,7 @@
+ syn keyword cConstant PengridEnum
+ syn keyword cConstant PenpairEnum
+ syn keyword cConstant PentaEnum
+-syn keyword cConstant PentaP1InputEnum
++syn keyword cConstant PentaInputEnum
+ syn keyword cConstant ProfilerEnum
+ syn keyword cConstant MatrixParamEnum
+ syn keyword cConstant NodeSIdEnum
+@@ -899,6 +920,9 @@
+ syn keyword cConstant QmuBedEnum
+ syn keyword cConstant QmuSurfaceEnum
+ syn keyword cConstant QmuMeltingEnum
++syn keyword cConstant QmuVxMeshEnum
++syn keyword cConstant QmuVyMeshEnum
++syn keyword cConstant QmuVzMeshEnum
+ syn keyword cConstant AndroidFrictionCoefficientEnum
+ syn keyword cConstant ResetPenaltiesEnum
+ syn keyword cConstant SegmentOnIceShelfEnum
+@@ -960,8 +984,11 @@
+ syn keyword cConstant P0Enum
+ syn keyword cConstant P1Enum
+ syn keyword cConstant P1DGEnum
++syn keyword cConstant P1bubbleEnum
++syn keyword cConstant P2Enum
++syn keyword cConstant P2xP1Enum
+ syn keyword cConstant MINIEnum
+-syn keyword cConstant P2Enum
++syn keyword cConstant TaylorHoodEnum
+ syn keyword cConstant SaveResultsEnum
+ syn keyword cConstant BoolElementResultEnum
+ syn keyword cConstant BoolExternalResultEnum
Index: /issm/oecreview/Archive/15392-16133/ISSM-15503-15504.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15503-15504.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15503-15504.diff	(revision 16134)
@@ -0,0 +1,664 @@
+Index: ../trunk-jpl/src/c/analyses/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15503)
++++ ../trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15504)
+@@ -12,14 +12,10 @@
+ void diagnostic_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
+-	bool  dakota_analysis   = false;
+-	int   dim               = -1;
+-	bool  ishutter          = false;
+-	bool  ismacayealpattyn  = false;
+-	bool  isl1l2            = false;
+-	bool  isstokes          = false;
++	bool  dakota_analysis;
++	int   dim;
++	bool  ishutter,ismacayeal,isl1l2,ispattyn,isstokes;
+ 	bool  conserve_loads    = true;
+-	bool  modify_loads      = true;
+ 	bool  save_results;
+ 	int   newton;
+ 	int   solution_type;
+@@ -29,8 +25,9 @@
+ 	/* recover parameters:*/
+ 	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+ 	femmodel->parameters->FindParam(&ishutter,FlowequationIshutterEnum);
+-	femmodel->parameters->FindParam(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
++	femmodel->parameters->FindParam(&ismacayeal,FlowequationIsmacayealEnum);
+ 	femmodel->parameters->FindParam(&isl1l2,FlowequationIsl1l2Enum);
++	femmodel->parameters->FindParam(&ispattyn,FlowequationIspattynEnum);
+ 	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
+ 	femmodel->parameters->FindParam(&newton,DiagnosticIsnewtonEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+@@ -56,21 +53,18 @@
+ 	}
+ 
+ 	if(ishutter){
+-
+ 		if(VerboseSolution()) _printf0_("   computing hutter velocities\n");
+ 
+-		//Take the last velocity into account so that the velocity on the MacAyeal domain is not zero
+-		if (ismacayealpattyn) ResetBoundaryConditions(femmodel,DiagnosticHutterAnalysisEnum);
+-
++		/*Take the last velocity into account so that the velocity on the MacAyeal domain is not zero*/
++		if(ismacayeal || isl1l2 || ispattyn ) ResetBoundaryConditions(femmodel,DiagnosticHutterAnalysisEnum);
+ 		femmodel->SetCurrentConfiguration(DiagnosticHutterAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
+-
+-		if (ismacayealpattyn) ResetBoundaryConditions(femmodel,DiagnosticHorizAnalysisEnum);
++		if(ismacayeal || isl1l2 || ispattyn) ResetBoundaryConditions(femmodel,DiagnosticHorizAnalysisEnum);
+ 	}
+ 
+-	if ((ismacayealpattyn || isl1l2) ^ isstokes){ // ^ = xor
++	if ((ismacayeal || ispattyn || isl1l2) ^ isstokes){ // ^ = xor
++		if(VerboseSolution()) _printf0_("   computing velocities\n");
+ 
+-		if(VerboseSolution()) _printf0_("   computing velocities\n");
+ 		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
+ 		if(newton>0)
+ 		 solutionsequence_newton(femmodel);
+@@ -78,14 +72,12 @@
+ 		 solutionsequence_nonlinear(femmodel,conserve_loads); 
+ 	}
+ 
+-	if (ismacayealpattyn && isstokes){
+-
+-		if(VerboseSolution()) _printf0_("   computing coupling macayealpattyn and stokes velocities and pressure \n");
++	if ((ismacayeal || isl1l2 || ispattyn) && isstokes){
++		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-Stokes\n");
+ 		solutionsequence_stokescoupling_nonlinear(femmodel,conserve_loads);
+ 	}
+ 
+-	if (dim==3 & (ishutter || ismacayealpattyn)){
+-
++	if (dim==3 & (ishutter || ismacayeal || isl1l2 || ispattyn)){
+ 		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
+ 		femmodel->SetCurrentConfiguration(DiagnosticVertAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15503)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15504)
+@@ -67,8 +67,9 @@
+ 	FlowequationBorderstokesEnum,
+ 	FlowequationElementEquationEnum,
+ 	FlowequationIshutterEnum,
++	FlowequationIsmacayealEnum,
+ 	FlowequationIsl1l2Enum,
+-	FlowequationIsmacayealpattynEnum,
++	FlowequationIspattynEnum,
+ 	FlowequationIsstokesEnum,
+ 	FlowequationFeStokesEnum,
+ 	FlowequationFeSsaEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15503)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15504)
+@@ -75,8 +75,9 @@
+ 		case FlowequationBorderstokesEnum : return "FlowequationBorderstokes";
+ 		case FlowequationElementEquationEnum : return "FlowequationElementEquation";
+ 		case FlowequationIshutterEnum : return "FlowequationIshutter";
++		case FlowequationIsmacayealEnum : return "FlowequationIsmacayeal";
+ 		case FlowequationIsl1l2Enum : return "FlowequationIsl1l2";
+-		case FlowequationIsmacayealpattynEnum : return "FlowequationIsmacayealpattyn";
++		case FlowequationIspattynEnum : return "FlowequationIspattyn";
+ 		case FlowequationIsstokesEnum : return "FlowequationIsstokes";
+ 		case FlowequationFeStokesEnum : return "FlowequationFeStokes";
+ 		case FlowequationFeSsaEnum : return "FlowequationFeSsa";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15503)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15504)
+@@ -75,8 +75,9 @@
+ 	      else if (strcmp(name,"FlowequationBorderstokes")==0) return FlowequationBorderstokesEnum;
+ 	      else if (strcmp(name,"FlowequationElementEquation")==0) return FlowequationElementEquationEnum;
+ 	      else if (strcmp(name,"FlowequationIshutter")==0) return FlowequationIshutterEnum;
++	      else if (strcmp(name,"FlowequationIsmacayeal")==0) return FlowequationIsmacayealEnum;
+ 	      else if (strcmp(name,"FlowequationIsl1l2")==0) return FlowequationIsl1l2Enum;
+-	      else if (strcmp(name,"FlowequationIsmacayealpattyn")==0) return FlowequationIsmacayealpattynEnum;
++	      else if (strcmp(name,"FlowequationIspattyn")==0) return FlowequationIspattynEnum;
+ 	      else if (strcmp(name,"FlowequationIsstokes")==0) return FlowequationIsstokesEnum;
+ 	      else if (strcmp(name,"FlowequationFeStokes")==0) return FlowequationFeStokesEnum;
+ 	      else if (strcmp(name,"FlowequationFeSsa")==0) return FlowequationFeSsaEnum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+ 	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+ 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+-	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
++	      if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
++	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+ 	      else if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
+ 	      else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
+ 	      else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+-	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+-	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
++	      if (strcmp(name,"Segment")==0) return SegmentEnum;
++	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+-	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
++	      if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
++	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15503)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15504)
+@@ -16,22 +16,21 @@
+ void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	int    materials_type;
+-	bool   ismacayealpattyn;
+-	bool   isl1l2;
+-	bool   isstokes;
++	bool   ismacayeal,isl1l2,ispattyn,isstokes;
+ 	bool   control_analysis;
+ 	bool   dakota_analysis;
+ 
+ 	/*Fetch constants needed: */
++	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
++	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
++	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+-	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&materials_type,MaterialsEnum);
+ 
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayealpattyn & !isstokes &!isl1l2) return;
++	if(!ismacayeal & !isl1l2 & !ispattyn & !isstokes) return;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(1,FlowequationElementEquationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15503)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15504)
+@@ -13,13 +13,13 @@
+ 	Pengrid   *pengrid   = NULL;
+ 
+ 	/*Intermediary*/
+-	int segment_width;
+-	int element;
+-	int i;
+-	int count=0;
+-	int penpair_ids[2];
+-	bool ismacayealpattyn,isstokes,isl1l2;
+-	int  numpenalties,numberofpressureloads,numrifts,numriftsegments;
++	int         segment_width;
++	int         element;
++	int         i;
++	int         count;
++	int         penpair_ids[2];
++	bool        ismacayeal,isl1l2,ispattyn,isstokes;
++	int         numpenalties,numberofpressureloads,numrifts,numriftsegments;
+ 	IssmDouble *pressureload   = NULL;
+ 	IssmDouble *elements_type  = NULL;
+ 	IssmDouble *nodeoniceshelf = NULL;
+@@ -33,14 +33,15 @@
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+-	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
++	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
++	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
+ 	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayealpattyn & !isstokes & !isl1l2) return;
++	if(!ismacayeal & !ispattyn & !isstokes & !isl1l2) return;
+ 
+ 	/*Create pressure loads as boundary conditions. Pay attention to the partitioning if we are running in parallel (the nodes
+ 	 * referenced by a certain load must belong to the cluster node): */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15503)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15504)
+@@ -16,7 +16,7 @@
+ 	IssmDouble g;
+ 	IssmDouble rho_ice;
+ 	IssmDouble stokesreconditioning;
+-	bool       isstokes,isl1l2,ismacayealpattyn;
++	bool       ismacayeal,isl1l2,ispattyn,isstokes;
+ 	int        fe_ssa;
+ 	bool       spcpresent = false;
+ 	int        Mx,Nx;
+@@ -47,16 +47,17 @@
+ 	iomodel->Constant(&g,ConstantsGEnum);
+ 	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+ 	iomodel->Constant(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
++	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
++	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+-	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+ 	iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum);
+ 
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+ 
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayealpattyn & !isstokes & !isl1l2){
++	if(!ismacayeal & !ispattyn & !isstokes & !isl1l2){
+ 		*pconstraints=constraints;
+ 		return;
+ 	}
+@@ -311,7 +312,7 @@
+ 	}
+ 
+ 	/*SPC Quadratic elements*/
+-	if(ismacayealpattyn&& fe_ssa==1){
++	if(ismacayeal && fe_ssa==1){
+ 
+ 		int   v1,v2;
+ 		bool *my_edges = NULL;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15503)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15504)
+@@ -11,17 +11,18 @@
+ void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	bool   isstokes,isl1l2,ismacayealpattyn;
++	bool   ismacayeal,isl1l2,ispattyn,isstokes;
+ 	int    finiteelementssa;
+ 
+ 	/*Fetch parameters: */
++	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
++	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
++	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+-	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+ 	iomodel->Constant(&finiteelementssa,FlowequationFeSsaEnum);
+ 
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayealpattyn & !isstokes & !isl1l2) return;
++	if(!ismacayeal & !isl1l2 & !ispattyn & !isstokes) return;
+ 
+ 	/*Create nodes: */
+ 	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15503)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15504)
+@@ -45,8 +45,9 @@
+ 	/*Copy some constants from iomodel */
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshDimensionEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIshutterEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsmacayealpattynEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsmacayealEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsl1l2Enum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIspattynEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsstokesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeStokesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15503)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15504)
+@@ -881,7 +881,6 @@
+ 			if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
+ 			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
+ 			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
+-			if isfield(structmd,'ismacayealpattyn'), md.flowequation.ismacayealpattyn=structmd.ismacayealpattyn; end
+ 			if isfield(structmd,'ishutter'), md.flowequation.ishutter=structmd.ishutter; end
+ 			if isfield(structmd,'isstokes'), md.flowequation.isstokes=structmd.isstokes; end
+ 			if isfield(structmd,'elements_type'), md.flowequation.element_equation=structmd.elements_type; end
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15503)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15504)
+@@ -15,9 +15,10 @@
+ 
+ 	def __init__(self): # {{{
+ 		
+-		self.ismacayealpattyn = 0
+ 		self.ishutter         = 0
++		self.ismacayeal       = 0
+ 		self.isl1l2           = 0
++		self.ispattyn         = 0
+ 		self.isstokes         = 0
+ 		self.fe_stokes        = 0
+ 		self.fe_ssa           = 0
+@@ -34,9 +35,10 @@
+ 	def __repr__(self): # {{{
+ 		string='   flow equation parameters:'
+ 
+-		string="%s\n%s"%(string,fielddisplay(self,'ismacayealpattyn',"is the macayeal or pattyn approximation used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'ishutter',"is the shallow ice approximation used ?"))
++		string="%s\n%s"%(string,fielddisplay(self,'ismacayeal',"is the macayeal approximation used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isl1l2',"are l1l2 equations used ?"))
++		string="%s\n%s"%(string,fielddisplay(self,'ispattyn',"is the pattyn approximation used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isstokes',"are the Full-Stokes equations used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'fe_ssa',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vertex_equation',"flow equation for each vertex"))
+@@ -52,9 +54,10 @@
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+ 		if DiagnosticHorizAnalysisEnum() in analyses:
+-			md = checkfield(md,'flowequation.ismacayealpattyn','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.ishutter','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.ismacayeal','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isl1l2','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.ispattyn','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isstokes','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.bordermacayeal','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderpattyn','size',[md.mesh.numberofvertices],'values',[0,1])
+@@ -65,8 +68,8 @@
+ 			else:
+ 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,7+1))
+ 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,7+1))
+-			if not (self.ismacayealpattyn or self.ishutter or self.isstokes or self.isl1l2):
+-				md.checkmessage("no element types set for this model. At least one of ismacayealpattyn, ishutter or isstokes need to be =1")
++			if not (self.ismacayeal or self.ispattyn or self.ishutter or self.isstokes or self.isl1l2):
++				md.checkmessage("no element types set for this model")
+ 
+ 		if DiagnosticHutterAnalysisEnum() in analyses:
+ 			if any(self.element_equation==1):
+@@ -76,9 +79,10 @@
+ 		return md
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'object',self,'fieldname','ismacayealpattyn','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','ishutter','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','ismacayeal','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isl1l2','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','ispattyn','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isstokes','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','fe_stokes','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','fe_ssa','format','Integer')
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15503)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15504)
+@@ -5,17 +5,18 @@
+ 
+ classdef flowequation
+ 	properties (SetAccess=public) 
+-		ismacayealpattyn     = 0;
+-		ishutter             = 0;
+-		isl1l2               = 0;
+-		isstokes             = 0;
+-		fe_stokes            = 0;
+-		fe_ssa               = 0;
+-		vertex_equation      = NaN;
+-		element_equation     = NaN;
+-		bordermacayeal       = NaN;
+-		borderpattyn         = NaN;
+-		borderstokes         = NaN;
++		ismacayeal       = 0;
++		ispattyn         = 0;
++		ishutter         = 0;
++		isl1l2           = 0;
++		isstokes         = 0;
++		fe_stokes        = 0;
++		fe_ssa           = 0;
++		vertex_equation  = NaN;
++		element_equation = NaN;
++		bordermacayeal   = NaN;
++		borderpattyn     = NaN;
++		borderstokes     = NaN;
+ 	end
+ 	methods
+ 		function obj = flowequation(varargin) % {{{
+@@ -33,9 +34,10 @@
+ 
+ 			if ismember(DiagnosticHorizAnalysisEnum(),analyses),
+ 
+-				md = checkfield(md,'flowequation.ismacayealpattyn','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.ishutter','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.ismacayeal','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isl1l2','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.ispattyn','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isstokes','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.bordermacayeal','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderpattyn','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+@@ -47,8 +49,8 @@
+ 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[0:8]);
+ 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[0:8]);
+ 				end
+-				if ~(obj.ismacayealpattyn || obj.ishutter || obj.isstokes || obj.isl1l2),
+-					md = checkmessage(md,['no element types set for this model. At least one of ismacayealpattyn, ishutter or isstokes need to be =1']);
++				if ~(obj.ismacayeal || obj.ispattyn || obj.ishutter || obj.isstokes || obj.isl1l2),
++					md = checkmessage(md,['no element types set for this model']);
+ 				end
+ 			end
+ 			if ismember(DiagnosticHutterAnalysisEnum(),analyses),
+@@ -63,9 +65,10 @@
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   flow equation parameters:'));
+ 
+-			fielddisplay(obj,'ismacayealpattyn','is the macayeal or pattyn approximation used ?');
+ 			fielddisplay(obj,'ishutter','is the shallow ice approximation used ?');
++			fielddisplay(obj,'ismacayeal','is the macayeal approximation used ?');
+ 			fielddisplay(obj,'isl1l2','is the l1l2 approximation used ?');
++			fielddisplay(obj,'ispattyn','is the pattyn approximation used ?');
+ 			fielddisplay(obj,'isstokes','are the Full-Stokes equations used ?');
+ 			fielddisplay(obj,'fe_ssa','Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
+ 			fielddisplay(obj,'vertex_equation','flow equation for each vertex');
+@@ -76,9 +79,10 @@
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'fieldname','ismacayealpattyn','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','ishutter','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','ismacayeal','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isl1l2','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','ispattyn','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isstokes','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','fe_stokes','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','fe_ssa','format','Integer');
+Index: ../trunk-jpl/src/m/qmu/qmuresponse.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/qmuresponse.m	(revision 15503)
++++ ../trunk-jpl/src/m/qmu/qmuresponse.m	(revision 15504)
+@@ -28,7 +28,8 @@
+ 	m_dhu=models.dhu;
+ 	m_ds=models.ds;
+ 	ishutter=m_dhu.parameters.ishutter;
+-	ismacayealpattyn=m_dh.parameters.ismacayealpattyn;
++	ismacayeal=m_dh.parameters.ismacayeal;
++	ispattyn=m_dh.parameters.ispattyn;
+ 	isstokes=m_ds.parameters.isstokes;
+ 	if ishutter,
+ 
+@@ -56,7 +57,7 @@
+ 			clear save
+ 		end
+ 
+-	elseif ismacayealpattyn,
++	elseif ismacayeal || ispattyn,
+ 
+ % for now, separate all segments from double array for parallel to make cells
+ 		if (length(m_dh.parameters.qmu_mass_flux_num_segments) > 1)
+Index: ../trunk-jpl/src/m/enum/FlowequationIsmacayealpattynEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsmacayealpattynEnum.m	(revision 15503)
++++ ../trunk-jpl/src/m/enum/FlowequationIsmacayealpattynEnum.m	(revision 15504)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationIsmacayealpattynEnum()
+-%FLOWEQUATIONISMACAYEALPATTYNENUM - Enum of FlowequationIsmacayealpattyn
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationIsmacayealpattynEnum()
+-
+-macro=StringToEnum('FlowequationIsmacayealpattyn');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsmacayealEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsmacayealEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationIsmacayealEnum.m	(revision 15504)
+@@ -0,0 +1,11 @@
++function macro=FlowequationIsmacayealEnum()
++%FLOWEQUATIONISMACAYEALENUM - Enum of FlowequationIsmacayeal
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationIsmacayealEnum()
++
++macro=StringToEnum('FlowequationIsmacayeal');
+Index: ../trunk-jpl/src/m/enum/FlowequationIspattynEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIspattynEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationIspattynEnum.m	(revision 15504)
+@@ -0,0 +1,11 @@
++function macro=FlowequationIspattynEnum()
++%FLOWEQUATIONISPATTYNENUM - Enum of FlowequationIspattyn
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationIspattynEnum()
++
++macro=StringToEnum('FlowequationIspattyn');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15503)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15504)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=563;
++macro=564;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15503)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15504)
+@@ -834,6 +834,20 @@
+ 
+ 	return StringToEnum('FlowequationIshutter')[0]
+ 
++def FlowequationIsmacayealEnum():
++	"""
++	FLOWEQUATIONISMACAYEALENUM - Enum of FlowequationIsmacayeal
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=FlowequationIsmacayealEnum()
++	"""
++
++	return StringToEnum('FlowequationIsmacayeal')[0]
++
+ def FlowequationIsl1l2Enum():
+ 	"""
+ 	FLOWEQUATIONISL1L2ENUM - Enum of FlowequationIsl1l2
+@@ -848,19 +862,19 @@
+ 
+ 	return StringToEnum('FlowequationIsl1l2')[0]
+ 
+-def FlowequationIsmacayealpattynEnum():
++def FlowequationIspattynEnum():
+ 	"""
+-	FLOWEQUATIONISMACAYEALPATTYNENUM - Enum of FlowequationIsmacayealpattyn
++	FLOWEQUATIONISPATTYNENUM - Enum of FlowequationIspattyn
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationIsmacayealpattynEnum()
++	      macro=FlowequationIspattynEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationIsmacayealpattyn')[0]
++	return StringToEnum('FlowequationIspattyn')[0]
+ 
+ def FlowequationIsstokesEnum():
+ 	"""
+@@ -7902,5 +7916,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 563
++	return 564
+ 
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15503)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15504)
+@@ -274,8 +274,9 @@
+ 
+ 	#figure out solution types
+ 	md.flowequation.ishutter=any(md.flowequation.element_equation==1)
+-	md.flowequation.ismacayealpattyn=bool(numpy.any(numpy.logical_or(md.flowequation.element_equation==2,md.flowequation.element_equation==3)))
++	md.flowequation.ismacayeal=any(md.flowequation.element_equation==2)
+ 	md.flowequation.isl1l2=any(md.flowequation.element_equation==8)
++	md.flowequation.ispattyn=any(md.flowequation.element_equation==3)
+ 	md.flowequation.isstokes=any(md.flowequation.element_equation==4)
+ 
+ 	return md
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15503)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15504)
+@@ -282,9 +282,10 @@
+ 
+ %figure out solution types
+ md.flowequation.ishutter=double(any(md.flowequation.element_equation==1));
+-md.flowequation.ismacayealpattyn=double(any(md.flowequation.element_equation==2 | md.flowequation.element_equation==3));
++md.flowequation.ismacayeal=double(any(md.flowequation.element_equation==2));
++md.flowequation.ispattyn=double(any(md.flowequation.element_equation==3));
++md.flowequation.isl1l2=double(any(md.flowequation.element_equation==8));
+ md.flowequation.isstokes=double(any(md.flowequation.element_equation==4));
+-md.flowequation.isl1l2=double(any(md.flowequation.element_equation==8));
+ 
+ return
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15504-15505.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15504-15505.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15504-15505.diff	(revision 16134)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15504)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15505)
+@@ -17,7 +17,9 @@
+ /*Element macros*/
+ #define NUMNODESP1    6
+ #define NUMNODESP1_2d 3
+-#define NUMNODESP1b  7
++#define NUMNODESP1b   7
++#define NUMNODESP2xP1 12
++#define NUMNODESP2    15
+ 
+ /*Object constructors and destructor*/
+ /*FUNCTION PentaRef::PentaRef(){{{*/
+@@ -1251,6 +1253,57 @@
+ 			dbasis[NUMNODESP1b*1+6] = 27.*(1.+zeta)*(1.-zeta)*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
+ 			dbasis[NUMNODESP1b*2+6] = -54*gauss->coord1*gauss->coord2*gauss->coord3*zeta;
+ 			return;
++		case P2xP1Enum:
++			/*Nodal function 1*/
++			dbasis[NUMNODESP2xP1*0+0 ] = .5*(1.-zeta)*(-2.*gauss->coord1 + 0.5);
++			dbasis[NUMNODESP2xP1*1+0 ] = .5*(1.-zeta)*(-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.);
++			dbasis[NUMNODESP2xP1*2+0 ] = -.5*gauss->coord1*(2.*gauss->coord1-1.);
++			/*Nodal function 2*/
++			dbasis[NUMNODESP2xP1*0+1 ] = .5*(1.-zeta)*(+2.*gauss->coord2 - 0.5);
++			dbasis[NUMNODESP2xP1*1+1 ] = .5*(1.-zeta)*(-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.);
++			dbasis[NUMNODESP2xP1*2+1 ] = -.5*gauss->coord2*(2.*gauss->coord2-1.);
++			/*Nodal function 3*/
++			dbasis[NUMNODESP2xP1*0+2 ] = 0.;
++			dbasis[NUMNODESP2xP1*1+2 ] = .5*(1.-zeta)*(4.*SQRT3/3.*gauss->coord3 - SQRT3/3.);
++			dbasis[NUMNODESP2xP1*2+2 ] = -.5*gauss->coord3*(2.*gauss->coord3-1.);
++			/*Nodal function 4*/
++			dbasis[NUMNODESP2xP1*0+3 ] = .5*(1.+zeta)*(-2.*gauss->coord1 + 0.5);
++			dbasis[NUMNODESP2xP1*1+3 ] = .5*(1.+zeta)*(-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.);
++			dbasis[NUMNODESP2xP1*2+3 ] = .5*gauss->coord1*(2.*gauss->coord1-1.);
++			/*Nodal function 5*/
++			dbasis[NUMNODESP2xP1*0+4 ] = .5*(1.+zeta)*(+2.*gauss->coord2 - 0.5);
++			dbasis[NUMNODESP2xP1*1+4 ] = .5*(1.+zeta)*(-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.);
++			dbasis[NUMNODESP2xP1*2+4 ] = .5*gauss->coord2*(2.*gauss->coord2-1.);
++			/*Nodal function 6*/
++			dbasis[NUMNODESP2xP1*0+5 ] = 0.;
++			dbasis[NUMNODESP2xP1*1+5 ] = .5*(1.+zeta)*(4.*SQRT3/3.*gauss->coord3 - SQRT3/3.);
++			dbasis[NUMNODESP2xP1*2+5 ] = .5*gauss->coord3*(2.*gauss->coord3-1.);
++
++			/*Nodal function 7*/
++			dbasis[NUMNODESP2xP1*0+6 ] = (1.-zeta)*gauss->coord3;
++			dbasis[NUMNODESP2xP1*1+6 ] = .5*(1.-zeta)*(+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2xP1*2+6 ] = -2.*gauss->coord3*gauss->coord2;
++			/*Nodal function 8*/
++			dbasis[NUMNODESP2xP1*0+7 ] = -(1.-zeta)*gauss->coord3;
++			dbasis[NUMNODESP2xP1*1+7 ] = .5*(1.-zeta)*(+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2xP1*2+7 ] = -2.*gauss->coord3*gauss->coord1;
++			/*Nodal function 9*/
++			dbasis[NUMNODESP2xP1*0+8 ] = (1.-zeta)*(gauss->coord1-gauss->coord2);
++			dbasis[NUMNODESP2xP1*1+8 ] = .5*(1.-zeta)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
++			dbasis[NUMNODESP2xP1*2+8 ] = -2.*gauss->coord1*gauss->coord2;
++			/*Nodal function 10*/
++			dbasis[NUMNODESP2xP1*0+9 ] = (1.+zeta)*gauss->coord3;
++			dbasis[NUMNODESP2xP1*1+9 ] = .5*(1.+zeta)*(+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2xP1*2+9 ] = 2.*gauss->coord3*gauss->coord2;
++			/*Nodal function 11*/
++			dbasis[NUMNODESP2xP1*0+10] = -(1.+zeta)*gauss->coord3;
++			dbasis[NUMNODESP2xP1*1+10] = .5*(1.+zeta)*(+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2xP1*2+10] = 2.*gauss->coord3*gauss->coord1;
++			/*Nodal function 12*/
++			dbasis[NUMNODESP2xP1*0+11] = (1.+zeta)*(gauss->coord1-gauss->coord2);
++			dbasis[NUMNODESP2xP1*1+11] = .5*(1.+zeta)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
++			dbasis[NUMNODESP2xP1*2+11] = 2.*gauss->coord1*gauss->coord2;
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15505-15506.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15505-15506.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15505-15506.diff	(revision 16134)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15505)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15506)
+@@ -268,8 +268,8 @@
+ 	FetchData(&outvector,&M,&N,dataref) ;
+ 
+ 	/*Check that it is a vector*/
+-	if(M>0){
+-		if(N!=1) _error_("input vector of size " << M << "x" << N << " should have only one column");
++	if(M!=1 && N!=1){
++		_error_("input vector of size " << M << "x" << N << " should have only one column");
+ 	}
+ 
+ 	/*Assign output pointers:*/
+@@ -293,7 +293,7 @@
+ 	else if (mxIsClass(dataref,"double") ){
+ 
+ 		/*Convert matlab vector to double*  vector: */
+-		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
++		FetchData(&doublevector,&outvector_rows,dataref);
+ 
+ 		/*Convert double vector into integer vector: */
+ 		outvector=xNew<int>(outvector_rows);
+@@ -325,7 +325,7 @@
+ 	else if (mxIsClass(dataref,"double") ){
+ 
+ 		/*Convert matlab vector to double*  vector: */
+-		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
++		FetchData(&doublevector,&outvector_rows,dataref);
+ 
+ 		/*Convert double vector into integer vector: */
+ 		outvector=xNew<bool>(outvector_rows);
+@@ -357,7 +357,7 @@
+ 	else if (mxIsClass(dataref,"double") ){
+ 
+ 		/*Convert matlab vector to double*  vector: */
+-		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
++		FetchData(&doublevector,&outvector_rows,dataref);
+ 
+ 		/*Convert double vector into float vector: */
+ 		outvector=xNew<float>(outvector_rows);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15506-15507.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15506-15507.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15506-15507.diff	(revision 16134)
@@ -0,0 +1,87 @@
+Index: ../trunk-jpl/src/m/coordsystems/xy2ll.py
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/xy2ll.py	(revision 0)
++++ ../trunk-jpl/src/m/coordsystems/xy2ll.py	(revision 15507)
+@@ -0,0 +1,82 @@
++import numpy as npy
++from math import pi
++
++def xy2ll(x, y, sgn, *args):
++	'''
++	XY2LL - converts xy to lat long
++	
++	Converts Polar  Stereographic (X, Y) coordinates for the polar regions to
++	latitude and longitude Stereographic (X, Y) coordinates for the polar
++	regions.
++	Author: Michael P. Schodlok, December 2003 (map2xy.m)
++	
++	Usage:
++	   [lat, lon] = xy2ll(x, y, sgn);
++	   [lat, lon] = xy2ll(x, y, sgn, central_meridian, standard_parallel);
++	
++	   - sgn = Sign of latitude +1 : north latitude (default is mer=45 lat=70)
++	                            -1 : south latitude (default is mer=0  lat=71)
++	'''
++
++	#Get central_meridian and standard_parallel depending on hemisphere
++	if len(args) == 2:
++		delta = args[0]
++		slat  = args[1]
++	elif len(args) == 0:
++		if sgn == 1:
++			delta = 45 
++			slat = 70
++			print 'Warning: expecting coordinates in polar stereographic (Std Latitude: 70degN Meridian: 45deg)'
++		elif sgn == -1:
++			delta = 0  
++			slat = 71
++			print 'Warning: expecting coordinates in polar stereographic (Std Latitude: 71degS Meridian: 0deg)'
++		else:
++			raise ValueError('sgn should be either +1 or -1')
++	else:
++		raise StandardError('bad usage: type "help(xy2ll)" for details')
++
++	# if x,y passed as lists, convert to numpy arrays
++	if type(x) != "numpy.ndarray":
++		x=npy.array(x)
++	if type(y) != "numpy.ndarray":
++		y=npy.array(y)
++
++	## Conversion constant from degrees to radians
++	cde = 57.29577951
++	## Radius of the earth in meters
++	re = 6378.273*10**3
++	## Eccentricity of the Hughes ellipsoid squared
++	ex2 = .006693883
++	## Eccentricity of the Hughes ellipsoid
++	ex = npy.sqrt(ex2)
++	
++	sl = slat*pi/180.
++	rho = npy.sqrt(x**2 + y**2)
++	cm = npy.cos(sl) / npy.sqrt(1.0 - ex2 * (npy.sin(sl)**2))
++	T = npy.tan((pi/4.0) - (sl/2.0)) / ((1.0 - ex*npy.sin(sl)) / (1.0 + ex*npy.sin(sl)))**(ex / 2.0)
++	
++	if abs(slat-90.) < 1.e-5:
++		T = rho*npy.sqrt((1. + ex)**(1. + ex) * (1. - ex)**(1. - ex)) / 2. / re
++	else:
++		T = rho * T / (re * cm)
++	
++	chi = (pi / 2.0) - 2.0 * npy.arctan(T)
++	lat = chi + ((ex2 / 2.0) + (5.0 * ex2**2.0 / 24.0) + (ex2**3.0 / 12.0)) * \
++		npy.sin(2 * chi) + ((7.0 * ex2**2.0 / 48.0) + (29.0 * ex2**3 / 240.0)) * \
++		npy.sin(4.0 * chi) + (7.0 * ex2**3.0 / 120.0) * npy.sin(6.0 * chi) 
++	
++	lat = sgn * lat
++	lon = npy.arctan2(sgn * x,-sgn * y)
++	lon = sgn * lon
++	
++	res1 = npy.nonzero(rho <= 0.1)
++	if len(res1[0] > 0):
++		lat[res1] = 90. * sgn
++		lon[res1] = 0.0
++	
++	lon = lon * 180. / pi
++	lat = lat * 180. / pi
++	lon = lon - delta 
++
++	return lat, lon
Index: /issm/oecreview/Archive/15392-16133/ISSM-15507-15508.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15507-15508.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15507-15508.diff	(revision 16134)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15507)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15508)
+@@ -121,7 +121,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type) {{{*/
+-Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in,int in_icefront_type,  int in_analysis_type){
++Icefront::Icefront(int element_id, const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in,int in_icefront_type,  int in_analysis_type){
+ 
+ 	int segment_width;
+ 	int element;
+@@ -145,9 +145,9 @@
+ 	else{
+ 		segment_width=6;
+ 	}
+-//	element=reCast<int,IssmDouble>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill)
+-//
+-//	/*Build ids for hook constructors: */
++//	element=element_number;
++
++	/*Build ids for hook constructors: */
+ //	icefront_eid=reCast<int,IssmDouble>( *(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)); //matlab indexing
+ //	icefront_mparid=numberofelements+1; //matlab indexing
+ //
+@@ -897,7 +897,6 @@
+ void Icefront:: GetSegmentNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]){
+ 
+ 	/*Build unit outward pointing vector*/
+-	const int numnodes=NUMVERTICESSEG;
+ 	IssmDouble vector[2];
+ 	IssmDouble norm;
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15508-15509.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15508-15509.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15508-15509.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15508)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15509)
+@@ -44,7 +44,7 @@
+ 		/*Icefront constructors, destructors: {{{*/
+ 		Icefront();
+ 		Icefront(int icefront_id,int i, IoModel* iomodel,int in_icefront_type, int analysis_type);
+-		Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type);
++		Icefront(int element_id,const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type);
+ 		~Icefront();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
Index: /issm/oecreview/Archive/15392-16133/ISSM-15509-15510.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15509-15510.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15509-15510.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/externalpackages/mpich/install-3.0-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich/install-3.0-linux64.sh	(revision 15509)
++++ ../trunk-jpl/externalpackages/mpich/install-3.0-linux64.sh	(revision 15510)
+@@ -20,8 +20,7 @@
+ ./configure \
+ 	--prefix="$ISSM_DIR/externalpackages/mpich/install" \
+ 	--enable-shared \
+-	--enable-sharedlibs=gcc \
+-	--enable-f91=gfortran 
++	--enable-sharedlibs=gcc
+ 
+ #Compile mpich (this new version supports parallel make)
+ if [ $# -eq 0 ]; then
Index: /issm/oecreview/Archive/15392-16133/ISSM-15510-15511.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15510-15511.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15510-15511.diff	(revision 16134)
@@ -0,0 +1,75 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15510)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15511)
+@@ -1304,6 +1304,70 @@
+ 			dbasis[NUMNODESP2xP1*1+11] = .5*(1.+zeta)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
+ 			dbasis[NUMNODESP2xP1*2+11] = 2.*gauss->coord1*gauss->coord2;
+ 			return;
++		case P2Enum:
++			/*Nodal function 1*/
++			dbasis[NUMNODESP2*0+0 ] = .5*zeta*(1.-zeta)*(-2.*gauss->coord1 + 0.5);
++			dbasis[NUMNODESP2*1+0 ] = .5*zeta*(1.-zeta)*(-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.);
++			dbasis[NUMNODESP2*2+0 ] = .5*(1.-2.*zeta)*gauss->coord1*(2.*gauss->coord1-1.);
++			/*Nodal function 2*/
++			dbasis[NUMNODESP2*0+1 ] = .5*zeta*(1.-zeta)*(+2.*gauss->coord2 - 0.5);
++			dbasis[NUMNODESP2*1+1 ] = .5*zeta*(1.-zeta)*(-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.);
++			dbasis[NUMNODESP2*2+1 ] = .5*(1.-2.*zeta)*gauss->coord2*(2.*gauss->coord2-1.);
++			/*Nodal function 3*/
++			dbasis[NUMNODESP2*0+2 ] = 0.;
++			dbasis[NUMNODESP2*1+2 ] = .5*zeta*(1.-zeta)*(4.*SQRT3/3.*gauss->coord3 - SQRT3/3.);
++			dbasis[NUMNODESP2*2+2 ] = .5*(1.-2.*zeta)*gauss->coord3*(2.*gauss->coord3-1.);
++			/*Nodal function 4*/
++			dbasis[NUMNODESP2*0+3 ] = .5*zeta*(1.+zeta)*(-2.*gauss->coord1 + 0.5);
++			dbasis[NUMNODESP2*1+3 ] = .5*zeta*(1.+zeta)*(-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.);
++			dbasis[NUMNODESP2*2+3 ] = .5*(1.+2.*zeta)*gauss->coord1*(2.*gauss->coord1-1.);
++			/*Nodal function 5*/
++			dbasis[NUMNODESP2*0+4 ] = .5*zeta*(1.+zeta)*(+2.*gauss->coord2 - 0.5);
++			dbasis[NUMNODESP2*1+4 ] = .5*zeta*(1.+zeta)*(-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.);
++			dbasis[NUMNODESP2*2+4 ] = .5*(1.+2.*zeta)*gauss->coord2*(2.*gauss->coord2-1.);
++			/*Nodal function 6*/
++			dbasis[NUMNODESP2*0+5 ] = 0.;
++			dbasis[NUMNODESP2*1+5 ] = .5*zeta*(1.+zeta)*(4.*SQRT3/3.*gauss->coord3 - SQRT3/3.);
++			dbasis[NUMNODESP2*2+5 ] = .5*(1.+2.*zeta)*gauss->coord3*(2.*gauss->coord3-1.);
++
++			/*Nodal function 7*/
++			dbasis[NUMNODESP2*0+6 ] = -0.5*(1.-zeta*zeta);
++			dbasis[NUMNODESP2*1+6 ] = -SQRT3/6.*(1.-zeta*zeta);
++			dbasis[NUMNODESP2*2+6 ] = -2.*zeta*gauss->coord1;
++			/*Nodal function 8*/
++			dbasis[NUMNODESP2*0+7 ] = 0.5*(1.-zeta*zeta);
++			dbasis[NUMNODESP2*1+7 ] = -SQRT3/6.*(1.-zeta*zeta);
++			dbasis[NUMNODESP2*2+7 ] = -2.*zeta*gauss->coord2;
++			/*Nodal function 9*/
++			dbasis[NUMNODESP2*0+8 ] = 0.;
++			dbasis[NUMNODESP2*1+8 ] = SQRT3/3.*(1.-zeta*zeta);
++			dbasis[NUMNODESP2*2+8 ] = -2.*zeta*gauss->coord3;
++
++			/*Nodal function 10*/
++			dbasis[NUMNODESP2*0+9 ] = zeta*(1.-zeta)*gauss->coord3;
++			dbasis[NUMNODESP2*1+9 ] = .5*zeta*(1.-zeta)*(+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2*2+9 ] = 2.*gauss->coord3*gauss->coord2*(1.-2.*zeta);
++			/*Nodal function 11*/
++			dbasis[NUMNODESP2*0+10] = -zeta*(1.-zeta)*gauss->coord3;
++			dbasis[NUMNODESP2*1+10] = .5*zeta*(1.-zeta)*(+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2*2+10] = 2.*gauss->coord3*gauss->coord1*(1.-2.*zeta);
++			/*Nodal function 12*/
++			dbasis[NUMNODESP2*0+11] = zeta*(1.-zeta)*(gauss->coord1-gauss->coord2);
++			dbasis[NUMNODESP2*1+11] = .5*zeta*(1.-zeta)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
++			dbasis[NUMNODESP2*2+11] = 2.*gauss->coord1*gauss->coord2*(1.-2.*zeta);
++			/*Nodal function 13*/
++			dbasis[NUMNODESP2*0+12] = zeta*(1.+zeta)*gauss->coord3;
++			dbasis[NUMNODESP2*1+12] = .5*zeta*(1.+zeta)*(+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2*2+12] = 2.*gauss->coord3*gauss->coord2*(1.+2.*zeta);
++			/*Nodal function 14*/
++			dbasis[NUMNODESP2*0+13] = -zeta*(1.+zeta)*gauss->coord3;
++			dbasis[NUMNODESP2*1+13] = .5*zeta*(1.+zeta)*(+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2*2+13] = 2.*gauss->coord3*gauss->coord1*(1.+2.*zeta);
++			/*Nodal function 15*/
++			dbasis[NUMNODESP2*0+14] = zeta*(1.+zeta)*(gauss->coord1-gauss->coord2);
++			dbasis[NUMNODESP2*1+14] = .5*zeta*(1.+zeta)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
++			dbasis[NUMNODESP2*2+14] = 2.*gauss->coord1*gauss->coord2*(1.+2.*zeta);
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15511-15512.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15511-15512.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15511-15512.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/plot/processmesh.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.py	(revision 15511)
++++ ../trunk-jpl/src/m/plot/processmesh.py	(revision 15512)
+@@ -5,7 +5,7 @@
+ 	PROCESSMESH - process the mesh for plotting
+ 
+ 	Usage:
+-		[x y z elements is2d]=processmech(md,data,options)
++		x,y,z,elements,is2d=processmech(md,data,options)
+ 
+ 	See also: PLOTMODEL, PROCESSDATA
+ 	"""
Index: /issm/oecreview/Archive/15392-16133/ISSM-15512-15513.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15512-15513.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15512-15513.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 15512)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 15513)
+@@ -13,6 +13,7 @@
+ #include <petscvec.h>
+ #include <petscksp.h>
+ 
++#include "../../mpi/mpiincludes.h"
+ #include "../../../shared/shared.h"
+ 
+ /*Function prototypes: */
Index: /issm/oecreview/Archive/15392-16133/ISSM-15513-15514.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15513-15514.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15513-15514.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15513)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15514)
+@@ -268,7 +268,7 @@
+ 	FetchData(&outvector,&M,&N,dataref) ;
+ 
+ 	/*Check that it is a vector*/
+-	if(M!=1 && N!=1){
++	if(M*N>0 && (M!=1 && N!=1)){
+ 		_error_("input vector of size " << M << "x" << N << " should have only one column");
+ 	}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15514-15515.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15514-15515.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15514-15515.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15514)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15515)
+@@ -274,7 +274,7 @@
+ 
+ 	/*Assign output pointers:*/
+ 	*pvector=outvector;
+-	if(pM)*pM=M;
++	if(pM)*pM=M*N;
+ }
+ /*}}}*/
+ /*FUNCTION FetchData(int** pvector,int* pM,const mxArray* dataref){{{*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15515-15516.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15515-15516.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15515-15516.diff	(revision 16134)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15515)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15516)
+@@ -272,9 +272,12 @@
+ 		_error_("input vector of size " << M << "x" << N << " should have only one column");
+ 	}
+ 
++	/*Transpose Row vectors*/
++	if(M==1 && N>1) M=N;
++
+ 	/*Assign output pointers:*/
+ 	*pvector=outvector;
+-	if(pM)*pM=M*N;
++	if(pM)*pM=M;
+ }
+ /*}}}*/
+ /*FUNCTION FetchData(int** pvector,int* pM,const mxArray* dataref){{{*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15516-15517.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15516-15517.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15516-15517.diff	(revision 16134)
@@ -0,0 +1,434 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15516)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15517)
+@@ -691,6 +691,42 @@
+ 	return (x2*y3 - y2*x3 + x1*y2 - y1*x2 + x3*y1 - y3*x1)/2;
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetAreaCoordinates{{{*/
++void Tria::GetAreaCoordinates(IssmDouble* area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[3][3],int numpoints){
++	/*Computeportion of the element that is grounded*/ 
++
++	int         i,j,k;
++	IssmDouble  area_init,area_portion;
++	IssmDouble  xyz_bis[3][3];
++
++	GetJacobianDeterminant(&area_init, &xyz_list[0][0],NULL);
++
++	/*Initialize xyz_list with original xyz_list of triangle coordinates*/
++	for(j=0;j<3;j++){ 
++		for(k=0;k<3;j++){
++			xyz_bis[j][k]=xyz_list[j][k];
++		}
++	}
++	for(i=0;i<numpoints;i++){
++		for(j=0;j<3;j++){ 
++			for(k=0;k<3;j++){
++				/*Change appropriate line*/
++				xyz_bis[j][k]=xyz_zero[i][k];
++			}
++
++			/*Compute area fraction*/
++			GetJacobianDeterminant(&area_portion, &xyz_bis[0][0],NULL);
++			*(area_coordinates+3*i+j)=area_portion/area_init;
++
++			/*Reinitialize xyz_list*/
++			for(k=0;k<3;j++){
++				/*Reinitialize xyz_list with original coordinates*/
++				xyz_bis[j][k]=xyz_list[j][k];
++			}
++		}
++	}
++}
++/*}}}*/
+ /*FUNCTION Tria::GetDofList {{{*/
+ void  Tria::GetDofList(int** pdoflist, int approximation_enum,int setenum){
+ 
+@@ -723,6 +759,60 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetGroundedPart{{{*/
++void Tria::GetGroundedPart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlyfloating){
++	/*Computeportion of the element that is grounded*/ 
++
++	bool               floating=true;
++	int                point;
++	const IssmPDouble  epsilon= 1.e-15;
++	IssmDouble         gl[3];
++	IssmDouble         f1,f2;
++
++	/*Recover parameters and values*/
++	GetInputListOnVertices(&gl[0],GLlevelsetEnum);
++
++	/*Be sure that values are not zero*/
++	if(gl[0]==0) gl[0]=gl[0]+epsilon;
++	if(gl[1]==0) gl[1]=gl[1]+epsilon;
++	if(gl[2]==0) gl[2]=gl[2]+epsilon;
++
++	/*Check that not all nodes are grounded or floating*/
++	if(gl[0]>0 && gl[1]>0 && gl[2]>0){ // All grounded
++		point=0;
++		f1=1.;
++		f2=1.;
++	}
++	else if(gl[0]<0 && gl[1]<0 && gl[2]<0){ //All floating
++		point=0;
++		f1=0.;
++		f2=0.;
++	}
++	else{
++		if(gl[0]*gl[1]*gl[2]<0) floating=false;
++
++		if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
++			point=2;
++			f1=gl[2]/(gl[2]-gl[0]);
++			f2=gl[2]/(gl[2]-gl[1]);
++		}
++		else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
++			point=0;
++			f1=gl[0]/(gl[0]-gl[1]);
++			f2=gl[0]/(gl[0]-gl[2]);
++		}
++		else if(gl[0]*gl[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
++			point=1;
++			f1=gl[1]/(gl[1]-gl[2]);
++			f2=gl[1]/(gl[1]-gl[0]);
++		}
++	}
++	*point1=point;
++	*fraction1=f1;
++	*fraction2=f2;
++	*mainlyfloating=floating;
++}
++/*}}}*/
+ /*FUNCTION Tria::GetGroundedPortion{{{*/
+ IssmDouble Tria::GetGroundedPortion(IssmDouble* xyz_list){
+ 	/*Computeportion of the element that is grounded*/ 
+@@ -825,58 +915,82 @@
+ 	return phi;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetGroundedPart{{{*/
+-void Tria::GetGroundedPart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlyfloating){
++/*FUNCTION Tria::GetSegmentNormal {{{*/
++void Tria:: GetSegmentNormal(IssmDouble* normal,IssmDouble xyz_list[2][3]){
++
++	/*Build unit outward pointing vector*/
++	IssmDouble vector[2];
++	IssmDouble norm;
++
++	vector[0]=xyz_list[1][0] - xyz_list[0][0];
++	vector[1]=xyz_list[1][1] - xyz_list[0][1];
++
++	norm=sqrt(pow(vector[0],2.0)+pow(vector[1],2.0));
++
++	normal[0]= + vector[1]/norm;
++	normal[1]= - vector[0]/norm;
++}
++/*}}}*/
++/*FUNCTION Tria::GetZeroLevelsetCoordinates{{{*/
++void Tria::GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[3][3],int levelsetenum){
+ 	/*Computeportion of the element that is grounded*/ 
+ 
+-	bool               floating=true;
+-	int                point;
+-	const IssmPDouble  epsilon= 1.e-15;
+-	IssmDouble         gl[3];
+-	IssmDouble         f1,f2;
++	int         normal_orientation;
++	IssmDouble  s1,s2;
++	IssmDouble  levelset[3];
+ 
+ 	/*Recover parameters and values*/
+-	GetInputListOnVertices(&gl[0],GLlevelsetEnum);
++	GetInputListOnVertices(&levelset[0],levelsetenum);
+ 
+-	/*Be sure that values are not zero*/
+-	if(gl[0]==0) gl[0]=gl[0]+epsilon;
+-	if(gl[1]==0) gl[1]=gl[1]+epsilon;
+-	if(gl[2]==0) gl[2]=gl[2]+epsilon;
++	if(levelset[0]*levelset[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
++		/*Portion of the segments*/
++		s1=levelset[2]/(levelset[2]-levelset[1]);
++		s2=levelset[2]/(levelset[2]-levelset[0]);
+ 
+-	/*Check that not all nodes are grounded or floating*/
+-	if(gl[0]>0 && gl[1]>0 && gl[2]>0){ // All grounded
+-		point=0;
+-		f1=1.;
+-		f2=1.;
++		if(levelset[2]>0) normal_orientation=0;
++		/*New point 1*/
++		*(xyz_zero+3*normal_orientation+0)=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
++		*(xyz_zero+3*normal_orientation+1)=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
++		*(xyz_zero+3*normal_orientation+2)=xyz_list[2][2]+s1*(xyz_list[1][2]-xyz_list[2][2]);
++
++		/*New point 0*/
++		*(xyz_zero+3*(1-normal_orientation)+0)=xyz_list[2][0]+s2*(xyz_list[0][0]-xyz_list[2][0]);
++		*(xyz_zero+3*(1-normal_orientation)+1)=xyz_list[2][1]+s2*(xyz_list[0][1]-xyz_list[2][1]);
++		*(xyz_zero+3*(1-normal_orientation)+2)=xyz_list[2][2]+s2*(xyz_list[0][2]-xyz_list[2][2]);
+ 	}
+-	else if(gl[0]<0 && gl[1]<0 && gl[2]<0){ //All floating
+-		point=0;
+-		f1=0.;
+-		f2=0.;
++	else if(levelset[1]*levelset[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
++		/*Portion of the segments*/
++		s1=levelset[0]/(levelset[0]-levelset[2]);
++		s2=levelset[0]/(levelset[0]-levelset[1]);
++
++		if(levelset[0]>0) normal_orientation=0;
++		/*New point 1*/
++		*(xyz_zero+3*normal_orientation+0)=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
++		*(xyz_zero+3*normal_orientation+1)=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
++		*(xyz_zero+3*normal_orientation+2)=xyz_list[0][2]+s1*(xyz_list[2][2]-xyz_list[0][2]);
++
++		/*New point 2*/
++		*(xyz_zero+3*(1-normal_orientation)+0)=xyz_list[0][0]+s2*(xyz_list[1][0]-xyz_list[0][0]);
++		*(xyz_zero+3*(1-normal_orientation)+1)=xyz_list[0][1]+s2*(xyz_list[1][1]-xyz_list[0][1]);
++		*(xyz_zero+3*(1-normal_orientation)+2)=xyz_list[0][2]+s2*(xyz_list[1][2]-xyz_list[0][2]);
+ 	}
+-	else{
+-		if(gl[0]*gl[1]*gl[2]<0) floating=false;
++	else if(levelset[0]*levelset[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
++		/*Portion of the segments*/
++		s1=levelset[1]/(levelset[1]-levelset[0]);
++		s2=levelset[1]/(levelset[1]-levelset[2]);
+ 
+-		if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
+-			point=2;
+-			f1=gl[2]/(gl[2]-gl[0]);
+-			f2=gl[2]/(gl[2]-gl[1]);
++		if(levelset[1]>0) normal_orientation=0;
++		/*New point 0*/
++		*(xyz_zero+3*normal_orientation+0)=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
++		*(xyz_zero+3*normal_orientation+1)=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
++		*(xyz_zero+3*normal_orientation+2)=xyz_list[1][2]+s1*(xyz_list[0][2]-xyz_list[1][2]);
++
++		/*New point 2*/
++		*(xyz_zero+3*(1-normal_orientation)+0)=xyz_list[1][0]+s2*(xyz_list[2][0]-xyz_list[1][0]);
++		*(xyz_zero+3*(1-normal_orientation)+1)=xyz_list[1][1]+s2*(xyz_list[2][1]-xyz_list[1][1]);
++		*(xyz_zero+3*(1-normal_orientation)+2)=xyz_list[1][2]+s2*(xyz_list[2][2]-xyz_list[1][2]);
+ 		}
+-		else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
+-			point=0;
+-			f1=gl[0]/(gl[0]-gl[1]);
+-			f2=gl[0]/(gl[0]-gl[2]);
+-		}
+-		else if(gl[0]*gl[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
+-			point=1;
+-			f1=gl[1]/(gl[1]-gl[2]);
+-			f2=gl[1]/(gl[1]-gl[0]);
+-		}
+-	}
+-	*point1=point;
+-	*fraction1=f1;
+-	*fraction2=f2;
+-	*mainlyfloating=floating;
++
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GetNodeIndex {{{*/
+@@ -3005,30 +3119,75 @@
+ ElementVector* Tria::CreatePVectorDiagnosticMacAyealFront(){
+ 
+ 	/*Intermediaries */
+-	int            i,j;
+-	IssmDouble     ls[3];
+-	IssmDouble     xyz_list[NUMVERTICES][3];
++	IssmDouble  ls[3];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	bool        isfront;
+ 
+-	/*Fetch number of nodes and dof for this finite element*/
+-	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF2;
+-	Icefront *icefront=NULL;
++	return NULL;
+ 
+-	return NULL;
+ 	/*Retrieve all inputs and parameters*/
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
+-	GaussTria*     gauss  = new GaussTria(2);
+-	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+-	/*Create Ice Front if necessary*/
++	/*If the level set is awlays <0, there is no ice front here*/
++	isfront = false;
+ 	if(ls[0]>0. || ls[1]>0. || ls[2]>0.){
+ 		if(ls[0]*ls[1]<0. || ls[0]*ls[2]<0. || (ls[0]*ls[1]+ls[0]*ls[2]+ls[1]*ls[2]==0.)){
+-			//icefront=new Icefront("2d",inputs,matpar,MacAyealApproximationEnum,analysis_type);
++			isfront = true;
+ 		}
+ 	}
+ 
++	/*If no front, return NULL*/
++	if(!isfront) return NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int         numnodes = this->NumberofNodes();
++	int         numdof   = numnodes*NDOF2;
++	IssmDouble  rho_ice,rho_water,gravity;
++	IssmDouble  Jdet,thickness,bed,water_pressure,ice_pressure,air_pressure;
++	IssmDouble  surface_under_water,base_under_water,pressure;
++	GaussTria*  gauss;
++	IssmDouble* basis = xNew<IssmDouble>(numnodes);
++	IssmDouble  xyz_list_front[2][3];
++	IssmDouble  area_coordinates[2][3];
++	IssmDouble  normal[2];
++
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
++	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
++	Input* bed_input      =inputs->GetInput(BedEnum);       _assert_(bed_input);
++	rho_water=matpar->GetRhoWater();
++	rho_ice  =matpar->GetRhoIce();
++	gravity  =matpar->GetG();
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
++	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,2);
++	GetSegmentNormal(&normal[0],xyz_list_front);
++
++	/*Start looping on Gaussian points*/
++	gauss=new GaussTria(area_coordinates,3);
++
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++		thickness_input->GetInputValue(&thickness,gauss);
++		bed_input->GetInputValue(&bed,gauss);
++
++		surface_under_water=min(0.,thickness+bed); // 0 if the top of the glacier is above water level
++		base_under_water=min(0.,bed);              // 0 if the bottom of the glacier is above water level
++		water_pressure=1.0/2.0*gravity*rho_water*(pow(surface_under_water,2) - pow(base_under_water,2));
++		ice_pressure=1.0/2.0*gravity*rho_ice*pow(thickness,2);
++		air_pressure=0;
++
++		pressure = ice_pressure + water_pressure + air_pressure;
++
++		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_front[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		for (int i=0;i<numnodes;i++){
++			pe->values[2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
++			pe->values[2*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];
++		}
++	}
++
+ 	/*Transform coordinate system*/
+ 	TransformLoadVectorCoord(pe,nodes,numnodes,XYEnum);
+ 
+@@ -3036,6 +3195,7 @@
+ 	xDelete<IssmDouble>(basis);
+ 	delete gauss;
+ 	return pe;
++
+ }
+ /*}}}*/
+ /*FUNCTION Tria::CreatePVectorDiagnosticHutter{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15516)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15517)
+@@ -194,6 +194,7 @@
+ 		ElementVector* CreatePVectorPrognostic_DG(void);
+ 		ElementVector* CreatePVectorSlope(void);
+ 		IssmDouble     GetArea(void);
++		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[3][3],int numpoints);
+ 		int            GetElementType(void);
+ 		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
+ 		void	         GetVertexPidList(int* doflist);
+@@ -201,6 +202,8 @@
+ 		void           GetConnectivityList(int* connectivity);
+ 		IssmDouble     GetGroundedPortion(IssmDouble* xyz_list);
+ 		void           GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating);
++		void           GetSegmentNormal(IssmDouble* normal,IssmDouble xyz_list[2][3]);
++		void           GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[3][3],int levelsetenum);
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype);
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue,int index); //TO BE REMOVED
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15516)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15517)
+@@ -6948,7 +6948,7 @@
+ 	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(3,2);
++	gauss=new GaussPenta(5,5);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+@@ -7926,7 +7926,7 @@
+ 	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(3,2);
++	gauss=new GaussPenta(5,5);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 15516)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 15517)
+@@ -100,6 +100,43 @@
+ 	xDelete<double>(seg_weights);
+ }
+ /*}}}*/
++/*FUNCTION GaussTria::GaussTria(IssmDouble area_coordinates,int order) {{{*/
++GaussTria::GaussTria(IssmDouble area_coordinates[2][3],int order){
++
++	/*Intermediaties*/
++	IssmPDouble *seg_coords  = NULL;
++	IssmPDouble *seg_weights = NULL;
++	int     i,index3;
++
++	/*Get Segment gauss points*/
++	numgauss=order;
++	GaussLegendreLinear(&seg_coords,&seg_weights,numgauss);
++
++	/*Allocate GaussTria fields*/
++	coords1=xNew<IssmDouble>(numgauss);
++	coords2=xNew<IssmDouble>(numgauss);
++	coords3=xNew<IssmDouble>(numgauss);
++	weights=xNew<IssmDouble>(numgauss);
++
++	/*Build Triangle Gauss point*/
++	for(i=0;i<numgauss;i++){
++		coords1[i]=0.5*(area_coordinates[0][0]+area_coordinates[1][0]) + 0.5*seg_coords[i]*(area_coordinates[1][0]-area_coordinates[0][0]);
++		coords2[i]=0.5*(area_coordinates[0][1]+area_coordinates[1][1]) + 0.5*seg_coords[i]*(area_coordinates[1][1]-area_coordinates[0][1]);
++		coords3[i]=0.5*(area_coordinates[0][2]+area_coordinates[1][2]) + 0.5*seg_coords[i]*(area_coordinates[1][2]-area_coordinates[0][2]);
++		weights[i]=seg_weights[i];
++	}
++
++	/*Initialize static fields as undefined*/
++	weight=UNDEF;
++	coord1=UNDEF;
++	coord2=UNDEF;
++	coord3=UNDEF;
++
++	/*clean up*/
++	xDelete<double>(seg_coords);
++	xDelete<double>(seg_weights);
++}
++/*}}}*/
+ /*FUNCTION GaussTria::GaussTria(int index,double r1,double r2,int order) {{{*/
+ GaussTria::GaussTria(int index,IssmDouble r1,IssmDouble r2,bool mainlyfloating,int order){
+ 
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 15516)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 15517)
+@@ -30,6 +30,7 @@
+ 		GaussTria(int order);
+ 		GaussTria(int index1,int index2,int order);
+ 		GaussTria(int index,IssmDouble r1, IssmDouble r2,bool maintlyfloating,int order);
++		GaussTria(IssmDouble area_coordinates[3][3],int order);
+ 		~GaussTria();
+ 
+ 		/*Methods*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15517-15518.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15517-15518.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15517-15518.diff	(revision 16134)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15517)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15518)
+@@ -949,14 +949,14 @@
+ 
+ 		if(levelset[2]>0) normal_orientation=0;
+ 		/*New point 1*/
+-		*(xyz_zero+3*normal_orientation+0)=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
+-		*(xyz_zero+3*normal_orientation+1)=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
+-		*(xyz_zero+3*normal_orientation+2)=xyz_list[2][2]+s1*(xyz_list[1][2]-xyz_list[2][2]);
++		xyz_zero[3*normal_orientation+0]=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
++		xyz_zero[3*normal_orientation+1]=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
++		xyz_zero[3*normal_orientation+2]=xyz_list[2][2]+s1*(xyz_list[1][2]-xyz_list[2][2]);
+ 
+ 		/*New point 0*/
+-		*(xyz_zero+3*(1-normal_orientation)+0)=xyz_list[2][0]+s2*(xyz_list[0][0]-xyz_list[2][0]);
+-		*(xyz_zero+3*(1-normal_orientation)+1)=xyz_list[2][1]+s2*(xyz_list[0][1]-xyz_list[2][1]);
+-		*(xyz_zero+3*(1-normal_orientation)+2)=xyz_list[2][2]+s2*(xyz_list[0][2]-xyz_list[2][2]);
++		xyz_zero[3*(1-normal_orientation)+0]=xyz_list[2][0]+s2*(xyz_list[0][0]-xyz_list[2][0]);
++		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[2][1]+s2*(xyz_list[0][1]-xyz_list[2][1]);
++		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[2][2]+s2*(xyz_list[0][2]-xyz_list[2][2]);
+ 	}
+ 	else if(levelset[1]*levelset[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
+ 		/*Portion of the segments*/
+@@ -965,14 +965,14 @@
+ 
+ 		if(levelset[0]>0) normal_orientation=0;
+ 		/*New point 1*/
+-		*(xyz_zero+3*normal_orientation+0)=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
+-		*(xyz_zero+3*normal_orientation+1)=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
+-		*(xyz_zero+3*normal_orientation+2)=xyz_list[0][2]+s1*(xyz_list[2][2]-xyz_list[0][2]);
++		xyz_zero[3*normal_orientation+0]=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
++		xyz_zero[3*normal_orientation+1]=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
++		xyz_zero[3*normal_orientation+2]=xyz_list[0][2]+s1*(xyz_list[2][2]-xyz_list[0][2]);
+ 
+ 		/*New point 2*/
+-		*(xyz_zero+3*(1-normal_orientation)+0)=xyz_list[0][0]+s2*(xyz_list[1][0]-xyz_list[0][0]);
+-		*(xyz_zero+3*(1-normal_orientation)+1)=xyz_list[0][1]+s2*(xyz_list[1][1]-xyz_list[0][1]);
+-		*(xyz_zero+3*(1-normal_orientation)+2)=xyz_list[0][2]+s2*(xyz_list[1][2]-xyz_list[0][2]);
++		xyz_zero[3*(1-normal_orientation)+0]=xyz_list[0][0]+s2*(xyz_list[1][0]-xyz_list[0][0]);
++		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[0][1]+s2*(xyz_list[1][1]-xyz_list[0][1]);
++		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[0][2]+s2*(xyz_list[1][2]-xyz_list[0][2]);
+ 	}
+ 	else if(levelset[0]*levelset[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
+ 		/*Portion of the segments*/
+@@ -981,14 +981,14 @@
+ 
+ 		if(levelset[1]>0) normal_orientation=0;
+ 		/*New point 0*/
+-		*(xyz_zero+3*normal_orientation+0)=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
+-		*(xyz_zero+3*normal_orientation+1)=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
+-		*(xyz_zero+3*normal_orientation+2)=xyz_list[1][2]+s1*(xyz_list[0][2]-xyz_list[1][2]);
++		xyz_zero[3*normal_orientation+0]=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
++		xyz_zero[3*normal_orientation+1]=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
++		xyz_zero[3*normal_orientation+2]=xyz_list[1][2]+s1*(xyz_list[0][2]-xyz_list[1][2]);
+ 
+ 		/*New point 2*/
+-		*(xyz_zero+3*(1-normal_orientation)+0)=xyz_list[1][0]+s2*(xyz_list[2][0]-xyz_list[1][0]);
+-		*(xyz_zero+3*(1-normal_orientation)+1)=xyz_list[1][1]+s2*(xyz_list[2][1]-xyz_list[1][1]);
+-		*(xyz_zero+3*(1-normal_orientation)+2)=xyz_list[1][2]+s2*(xyz_list[2][2]-xyz_list[1][2]);
++		xyz_zero[3*(1-normal_orientation)+0]=xyz_list[1][0]+s2*(xyz_list[2][0]-xyz_list[1][0]);
++		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[1][1]+s2*(xyz_list[2][1]-xyz_list[1][1]);
++		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[1][2]+s2*(xyz_list[2][2]-xyz_list[1][2]);
+ 		}
+ 
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15518-15519.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15518-15519.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15518-15519.diff	(revision 16134)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15518)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15519)
+@@ -31,9 +31,9 @@
+ 
+ #	pos=find(md.mesh.vertexonboundary & ~nodeonicefront);
+ 	pos=numpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(nodeonicefront)))[0]
+-	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,))
++	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,))
++	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,))
+ 	md.diagnostic.spcvx[pos]=0
+ 	md.diagnostic.spcvy[pos]=0
+ 	md.diagnostic.spcvz[pos]=0
+@@ -92,12 +92,12 @@
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+-		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,))
+ #		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+ 		pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
+ 		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
+ 		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
+-			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
++			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,))
+ 	else:
+ 		print "      no thermal boundary conditions created: no observed temperature found"
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15519-15520.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15519-15520.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15519-15520.diff	(revision 16134)
@@ -0,0 +1,1827 @@
+Index: ../trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp	(revision 15520)
+@@ -1,199 +0,0 @@
+-/*\file OptionParse.c
+- *\brief: functions to parse the mex options.
+- */
+-#ifdef HAVE_CONFIG_H
+-    #include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <cstring> 
+-#include "./matlabio.h"
+-
+-GenericOption<double>* OptionDoubleParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	GenericOption<double> *odouble = NULL;
+-
+-	/*check and parse the name  */
+-	odouble=new GenericOption<double>();
+-	odouble->name =xNew<char>(strlen(name)+1);
+-	memcpy(odouble->name,name,(strlen(name)+1)*sizeof(char));
+-	FetchData(&odouble->value,prhs[0]);
+-	odouble->numel=1;
+-	odouble->ndims=1;
+-	odouble->size=NULL;
+-
+-	return(odouble);
+-}/*}}}*/
+-GenericOption<double*>* OptionDoubleArrayParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	GenericOption<double*> *odouble = NULL;
+-
+-	/*check and parse the name  */
+-	odouble=new GenericOption<double*>();
+-	odouble->name =xNew<char>(strlen(name)+1);
+-	memcpy(odouble->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"double")){
+-		_error_("Value of option \"" << odouble->name  << "\" must be class \"double\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	FetchData(&odouble->value,&odouble->numel,&odouble->ndims,&odouble->size,prhs[0]);
+-
+-	return(odouble);
+-}/*}}}*/
+-GenericOption<bool*>* OptionLogicalParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	GenericOption<bool*> *ological = NULL;
+-
+-	/*check and parse the name  */
+-	ological=new GenericOption<bool*>();
+-	ological->name =xNew<char>(strlen(name)+1);
+-	memcpy(ological->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"logical")){
+-		_error_("Value of option \"" << ological->name  << "\" must be class \"logical\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	FetchData(&ological->value,&ological->numel,&ological->ndims,&ological->size,prhs[0]);
+-
+-	return(ological);
+-}/*}}}*/
+-GenericOption<char*>* OptionCharParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	GenericOption<char*>  *ochar = NULL;
+-
+-	/*check and parse the name  */
+-	ochar=new GenericOption<char*>();
+-	ochar->name =xNew<char>(strlen(name)+1);
+-	memcpy(ochar->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"char")){
+-		_error_("Value of option \"" << ochar->name  << "\" must be class \"char\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	FetchData(&ochar->value,&ochar->numel,&ochar->ndims,&ochar->size,prhs[0]);
+-
+-	return(ochar);
+-}/*}}}*/
+-GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	int            i;
+-	char           namei[161];
+-	Option*                   option      = NULL;
+-	GenericOption<Options**>  *ostruct    = NULL;
+-	const mwSize  *ipt        = NULL;
+-	const mxArray *structi;
+-	mwIndex        sindex;
+-
+-	/*check and parse the name  */
+-	ostruct=new GenericOption<Options**>();
+-	ostruct->name =xNew<char>(strlen(name)+1);
+-	memcpy(ostruct->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"struct")){
+-		_error_("Value of option \"" << ostruct->name  << "\" must be class \"struct\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	ostruct->numel=mxGetNumberOfElements(prhs[0]);
+-	ostruct->ndims=mxGetNumberOfDimensions(prhs[0]);
+-	ipt           =mxGetDimensions(prhs[0]);
+-	ostruct->size =xNew<int>(ostruct->ndims);
+-	for (i=0; i<ostruct->ndims; i++) ostruct->size[i]=(int)ipt[i];
+-	if (ostruct->numel) ostruct->value=xNew<Options*>(ostruct->numel);
+-
+-	/*loop through and process each element of the struct array  */
+-	for (sindex=0; sindex<ostruct->numel; sindex++) {
+-		ostruct->value[sindex]=new Options;
+-
+-		/*loop through and process each field for the element  */
+-		for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
+-			sprintf(namei,"%s.%s",name,mxGetFieldNameByNumber(prhs[0],i));
+-			structi=mxGetFieldByNumber(prhs[0],sindex,i);
+-
+-			option=(Option*)OptionParse(namei,&structi);
+-			ostruct->value[sindex]->AddObject((Object*)option);
+-			option=NULL;
+-		}
+-	}
+-
+-	return(ostruct);
+-}/*}}}*/
+-GenericOption<Options*>* OptionCellParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	int            i;
+-	int           *dims;
+-	char           namei[161];
+-	char           cstr[81];
+-	GenericOption<Options*> *ocell      = NULL;
+-	Option        *option     = NULL;
+-	const mwSize  *ipt        = NULL;
+-	const mxArray *celli;
+-	mwIndex        cindex;
+-
+-	/*check and parse the name  */
+-	ocell=new GenericOption<Options*>();
+-	ocell->name =xNew<char>(strlen(name)+1);
+-	memcpy(ocell->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"cell")){
+-		_error_("Value of option \"" << ocell->name  << "\" must be class \"cell\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-
+-	ocell->numel=mxGetNumberOfElements(prhs[0]);
+-	ocell->ndims=mxGetNumberOfDimensions(prhs[0]);
+-	ipt         =mxGetDimensions(prhs[0]);
+-	ocell->size =xNew<int>(ocell->ndims);
+-	for (i=0; i<ocell->ndims; i++) ocell->size[i]=(int)ipt[i];
+-	ocell->value=new Options;
+-
+-	/*loop through and process each element of the cell array  */
+-	dims=xNew<int>(ocell->ndims);
+-	for (cindex=0; cindex<ocell->numel; cindex++) {
+-		ColumnWiseDimsFromIndex(dims,(int)cindex,ocell->size,ocell->ndims);
+-		StringFromDims(cstr,dims,ocell->ndims);
+-		#ifdef _INTEL_WIN_
+-			_snprintf(namei,161,"%s%s",name,cstr);
+-		#else
+-			snprintf(namei,161,"%s%s",name,cstr);
+-		#endif
+-		celli=mxGetCell(prhs[0],cindex);
+-
+-		option=(Option*)OptionParse(namei,&celli);
+-		ocell->value->AddObject((Object*)option);
+-		option=NULL;
+-	}
+-	xDelete<int>(dims);
+-
+-	return(ocell);
+-}/*}}}*/
+-Option* OptionParse(char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	Option  *option = NULL;
+-	mxArray *lhs[1];
+-
+-	/*parse the value according to the matlab data type  */
+-	if     (mxIsClass(prhs[0],"double")  && (mxGetNumberOfElements(prhs[0])==1))
+-	 option=(Option*)OptionDoubleParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"double")  && (mxGetNumberOfElements(prhs[0])!=1))
+-	 option=(Option*)OptionDoubleArrayParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"logical"))
+-	 option=(Option*)OptionLogicalParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"char"))
+-	 option=(Option*)OptionCharParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"struct"))
+-	 option=(Option*)OptionStructParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"cell"))
+-	 option=(Option*)OptionCellParse(name,prhs);
+-	else {
+-		_printf0_("  Converting value of option \"" << name << "\" from unrecognized class \"" << mxGetClassName(prhs[0]) << "\" to class \"" << "struct" << "\".\n");
+-		if (!mexCallMATLAB(1,lhs,1,(mxArray**)prhs,"struct")) {
+-			option=(Option*)OptionStructParse(name,(const mxArray**)lhs);
+-			mxDestroyArray(lhs[0]);
+-		}
+-		else _error_("Second argument value of option \""<< name <<"\" is of unrecognized class \""<< mxGetClassName(prhs[0]) <<"\".");
+-	}
+-
+-	return(option);
+-}/*}}}*/
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToDoubleVector.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToDoubleVector.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToDoubleVector.cpp	(revision 15520)
+@@ -1,90 +0,0 @@
+-/* \file MatlabVectorToDoubleVector.cpp
+- * \brief: convert a sparse or dense matlab vector to a serial vector:
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Matlab includes: */
+-#include "./matlabio.h"
+-
+-int MatlabVectorToDoubleVector(double** pvector,int* pvector_rows,const mxArray* mxvector){
+-
+-	int rows,cols;
+-	double* mxvector_ptr=NULL;
+-	int ierr;
+-	int i,j;
+-
+-	/*output: */
+-	double* vector=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex*    ir=NULL;
+-	mwIndex*    jc=NULL;
+-	double* pr=NULL;
+-	int     count;
+-	int     nnz;
+-	int     nz;
+-
+-	/*Ok, first check if we are dealing with a sparse or full vector: */
+-	if (mxIsSparse(mxvector)){
+-
+-		/*Dealing with sparse vector: recover size first: */
+-		mxvector_ptr=(double*)mxGetPr(mxvector);
+-		rows=mxGetM(mxvector);
+-		cols=mxGetN(mxvector);
+-		nnz=mxGetNzmax(mxvector);
+-
+-		/*Check that input is actualy a vector*/
+-		if (cols!=1) _error_("input vector of size " << rows << "x" << cols << " should have only one column");
+-
+-		nz=(int)((double)nnz/(double)rows);
+-
+-		if(rows){
+-			vector=xNewZeroInit<double>(rows);
+-
+-			/*Now, get ir,jc and pr: */
+-			pr=mxGetPr(mxvector);
+-			ir=mxGetIr(mxvector);
+-			jc=mxGetJc(mxvector);
+-
+-			/*Now, start inserting data into sparse vector: */
+-			count=0;
+-			for(i=0;i<cols;i++){
+-				for(j=0;j<(jc[i+1]-jc[i]);j++){
+-					vector[ir[count]]=pr[count];
+-					count++;
+-				}
+-			}
+-		}
+-
+-	}
+-	else{
+-
+-		/*Dealing with dense vector: recover pointer and size: */
+-		mxvector_ptr=(double*)mxGetPr(mxvector);
+-		rows=mxGetM(mxvector);
+-		cols=mxGetN(mxvector);
+-
+-		/*Check that input is actualy a vector*/
+-		if (cols!=1) _error_("input vector of size " << rows << "x" << cols << " should have only one column");
+-
+-		/*allocate and memcpy*/
+-		if(rows){
+-			vector=xNew<double>(rows);
+-			memcpy(vector,mxvector_ptr,rows*sizeof(double));
+-		}
+-		else{
+-			vector=NULL;
+-		}
+-	}
+-
+-	/*Assign output pointer: */
+-	*pvector=vector;
+-	*pvector_rows=rows;
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/mxGetAssignedField.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/mxGetAssignedField.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/mxGetAssignedField.cpp	(revision 15520)
+@@ -1,39 +0,0 @@
+-/*!\file: mxGetAssignedField.c: 
+- * \brief: abstract interface on parallel side for i/o, so it ressembles the serial i/o.
+- *
+- * In serial mode, this routine takes care of returning the field coming 
+- * from the model. If largesize is 1, we are running out of core models in 
+- * matlab, and we need to call the subsref private method from the model object
+- * in order to correctly load the data from disk.
+- */
+-
+-#include "./matlabio.h"
+-
+-mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number,const char* field){
+-
+-	//output
+-	mxArray* mxfield=NULL;
+-
+-	//input
+-	mxArray    *inputs[2];
+-	mxArray    *pindex      = NULL;
+-	const char *fnames[2];
+-	mwSize      ndim        = 2;
+-	mwSize      onebyone[2] = {1,1};
+-
+-	//We want to call the subsasgn method, and get the returned array.This ensures that if we are running 
+-	//large sized problems, the data is truly loaded from disk by the model subsasgn class method.
+-	inputs[0]=(mxArray*)pmxa_array; //this is the model
+-
+-	//create index structure used in the assignment (index.type='.' and index.subs='x' for field x for ex)
+-	fnames[0] = "type";
+-	fnames[1] = "subs";
+-	pindex=mxCreateStructArray( ndim,onebyone,2,fnames);
+-	mxSetField( pindex, 0, "type",mxCreateString("."));
+-	mxSetField( pindex, 0, "subs",mxCreateString(field));
+-	inputs[1]=pindex;
+-
+-	mexCallMATLAB( 1, &mxfield, 2, (mxArray**)inputs, "subsref");
+-
+-	return mxfield;
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToDoubleMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToDoubleMatrix.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToDoubleMatrix.cpp	(revision 15520)
+@@ -1,129 +0,0 @@
+-/* \file MatlabMatrixToDoubleMatrix.cpp
+- * \brief: convert a sparse or dense matlab matrix to a double* pointer
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Matlab includes: */
+-#include "./matlabio.h"
+-
+-int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix){
+-
+-	int        i,j,count,rows,cols;
+-
+-	/*output: */
+-	double* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex*    ir=NULL;
+-	mwIndex*    jc=NULL;
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			/*Now, get ir,jc and pr: */
+-			ir=mxGetIr(mxmatrix);
+-			jc=mxGetJc(mxmatrix);
+-
+-			/*Now, start inserting data into double* matrix: */
+-			count=0;
+-			for(i=0;i<cols;i++){
+-				for(j=0;j<(jc[i+1]-jc[i]);j++){
+-					matrix[rows*ir[count]+i]=pmxmatrix[count];
+-					count++;
+-				}
+-			}
+-		}
+-
+-	}
+-	else if(mxIsClass(mxmatrix,"double")){
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			for(i=0;i<rows;i++){
+-				for(j=0;j<cols;j++){
+-					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
+-				}
+-			}
+-		}
+-	}
+-	else if(mxIsClass(mxmatrix,"single")){
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		float *pmxmatrix=(float*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			for(i=0;i<rows;i++){
+-				for(j=0;j<cols;j++){
+-					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
+-				}
+-			}
+-		}
+-	}
+-	else if(mxIsClass(mxmatrix,"int16")){
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		short int *pmxmatrix=(short*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			for(i=0;i<rows;i++){
+-				for(j=0;j<cols;j++){
+-					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
+-				}
+-			}
+-		}
+-	}
+-	else if(mxIsClass(mxmatrix,"uint8")){
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		char *pmxmatrix=(char*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			for(i=0;i<rows;i++){
+-				for(j=0;j<cols;j++){
+-					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
+-				}
+-			}
+-		}
+-	}
+-	else{
+-		_error_("Matlab matrix type Not implemented yet");
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix=matrix;
+-	*pmatrix_rows=rows;
+-	*pmatrix_cols=cols;
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToVector.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToVector.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToVector.cpp	(revision 15520)
+@@ -1,27 +0,0 @@
+-/*!\file MatlabVectorToVector.cpp
+- */
+-
+-/*Headers:*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "./matlabio.h"
+-
+-Vector<double>* MatlabVectorToVector(const mxArray* mxvector){
+-
+-	int dummy;
+-	Vector<double>* vector=NULL;
+-
+-	/*allocate vector object: */
+-	vector=new Vector<double>();
+-
+-	#ifdef _HAVE_PETSC_
+-	vector->pvector=MatlabVectorToPetscVec(mxvector);
+-	#else
+-	vector->ivector=MatlabVectorToIssmVec(mxvector);
+-	#endif
+-
+-	return vector;
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToMatrix.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToMatrix.cpp	(revision 15520)
+@@ -1,27 +0,0 @@
+-/*!\file MatlabMatrixToMatrix.cpp
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./matlabio.h"
+-
+-Matrix<double>* MatlabMatrixToMatrix(const mxArray* mxmatrix){
+-
+-	int dummy;
+-	Matrix<double>* matrix=NULL;
+-
+-	/*allocate matrix object: */
+-	matrix=new Matrix<double>();
+-
+-	#ifdef _HAVE_PETSC_
+-	matrix->pmatrix=MatlabMatrixToPetscMat(mxmatrix);
+-	#else
+-	matrix->imatrix=MatlabMatrixToIssmMat(mxmatrix);
+-	#endif
+-
+-	return matrix;
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToIssmVec.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToIssmVec.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToIssmVec.cpp	(revision 15520)
+@@ -1,21 +0,0 @@
+-/*!\file MatlabVectorToIssmVec.cpp
+- */
+-
+-/*Headers:*/
+-#include "./matlabio.h"
+-
+-IssmVec<double>* MatlabVectorToIssmVec(const mxArray* dataref){
+-
+-	IssmVec<double>* output=NULL;
+-	IssmSeqVec<double>* seqvec=NULL;
+-
+-	output=new IssmVec<double>();
+-
+-	seqvec=new IssmSeqVec<double>();
+-
+-	MatlabVectorToDoubleVector(&seqvec->vector,&seqvec->M,dataref);
+-
+-	output->vector=(IssmAbsVec<double>*)seqvec;
+-	return output;
+-
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToPetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToPetscVec.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToPetscVec.cpp	(revision 15520)
+@@ -1,100 +0,0 @@
+-/* \file MatlabVectorToPetscVector.cpp
+- * \brief: convert a sparse or dense matlab vector to a serial Petsc vector:
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Matlab includes: */
+-#include "./matlabio.h"
+-
+-PetscVec* MatlabVectorToPetscVec(const mxArray* mxvector){
+-
+-	int dummy;
+-	PetscVec* vector=new PetscVec();
+-
+-	MatlabVectorToPetscVec(&vector->vector,&dummy, mxvector);
+-
+-	return vector;
+-}
+-
+-int MatlabVectorToPetscVec(Vec* pvector,int* pvector_rows,const mxArray* mxvector){
+-
+-	int rows, cols;
+-	double* mxvector_ptr=NULL;
+-	int ierr;
+-	int i,j;
+-
+-	/*output: */
+-	Vec vector=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex*    ir=NULL;
+-	mwIndex*    jc=NULL;
+-	double* pr=NULL;
+-	int     count;
+-	int     nnz;
+-	int     nz;
+-
+-	/*petsc indices: */
+-	int* idxm=NULL;
+-
+-	/*Ok, first check if we are dealing with a sparse or full vector: */
+-	if (mxIsSparse(mxvector)){
+-
+-		/*Dealing with sparse vector: recover size first: */
+-		mxvector_ptr=(double*)mxGetPr(mxvector);
+-		rows=mxGetM(mxvector);
+-		cols=mxGetN(mxvector);
+-		nnz=mxGetNzmax(mxvector);
+-		nz=(int)((double)nnz/(double)rows);
+-
+-		ierr=VecCreateSeq(PETSC_COMM_SELF,rows,&vector);CHKERRQ(ierr);
+-
+-		/*Now, get ir,jc and pr: */
+-		pr=mxGetPr(mxvector);
+-		ir=mxGetIr(mxvector);
+-		jc=mxGetJc(mxvector);
+-
+-		/*Now, start inserting data into sparse vector: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				VecSetValue(vector,ir[count],pr[count],INSERT_VALUES);
+-				count++;
+-			}
+-		}
+-
+-	}
+-	else{
+-
+-		/*Dealing with dense vector: recover pointer and size: */
+-		mxvector_ptr=(double*)mxGetPr(mxvector);
+-		rows=mxGetM(mxvector);
+-		cols=mxGetN(mxvector);
+-
+-		/*Create serial vector: */
+-		ierr=VecCreateSeq(PETSC_COMM_SELF,rows,&vector);CHKERRQ(ierr);
+-
+-		/*Insert mxvector_ptr values into petsc vector: */
+-		idxm=xNew<int>(rows);
+-
+-		for(i=0;i<rows;i++)idxm[i]=i;
+-
+-		ierr=VecSetValues(vector,rows,idxm,mxvector_ptr,INSERT_VALUES);CHKERRQ(ierr);
+-
+-	}
+-
+-	/*Assemble vector: */
+-	VecAssemblyBegin(vector);
+-	VecAssemblyEnd(vector);
+-
+-	/*Assign output pointer: */
+-	*pvector=vector;
+-	*pvector_rows=rows;
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToIssmMat.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToIssmMat.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToIssmMat.cpp	(revision 15520)
+@@ -1,21 +0,0 @@
+-/*!\file MatlabMatrixToIssmDenseMat.cpp
+- */
+-
+-/*Headers:*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./matlabio.h"
+-
+-IssmMat<double>* MatlabMatrixToIssmMat(const mxArray* dataref){
+-
+-	IssmDenseMat<double>* output=NULL;
+-
+-	output=new IssmDenseMat<double>();
+-	MatlabMatrixToDoubleMatrix(&output->matrix,&output->M,&output->N,dataref);
+-	return (IssmMat<double>*)output;
+-
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 15520)
+@@ -1,124 +0,0 @@
+-/* \file MatlabMatrixToPetscMatrix.cpp
+- * \brief: convert a sparse or dense matlab matrix to a serial Petsc matrix:
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "../../c/shared/shared.h"
+-
+-/*Petsc includes: */
+-#ifdef _HAVE_PETSC_
+-#include <petscmat.h>
+-#include <petscvec.h>
+-#include <petscksp.h>
+-#endif
+-
+-/*Matlab includes: */
+-#include "./matlabio.h"
+-
+-PetscMat* MatlabMatrixToPetscMat(const mxArray* mxmatrix){
+-
+-	int dummy;
+-	PetscMat* matrix=new PetscMat();
+-
+-	MatlabMatrixToPetscMat(&matrix->matrix, &dummy, &dummy, mxmatrix);
+-
+-	return matrix;
+-}
+-int MatlabMatrixToPetscMat(Mat* pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix){
+-
+-	int rows, cols;
+-	double *mxmatrix_ptr = NULL;
+-	double *tmatrix      = NULL;
+-	int ierr;
+-	int i,j;
+-
+-	/*output: */
+-	Mat matrix = NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir = NULL;
+-	mwIndex *jc = NULL;
+-	double  *pr = NULL;
+-	int     count;
+-	int     nnz;
+-	int     nz;
+-
+-	/*petsc indices: */
+-	int *idxm = NULL;
+-	int *idxn = NULL;
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-		nnz=mxGetNzmax(mxmatrix);
+-		if(rows){
+-			nz=(int)((double)nnz/(double)rows);
+-		}
+-		else{
+-			nz=0;
+-		}
+-
+-		ierr=MatCreateSeqAIJ(PETSC_COMM_SELF,rows,cols,nz,PETSC_NULL,&matrix);CHKERRQ(ierr);
+-
+-		/*Now, get ir,jc and pr: */
+-		pr=mxGetPr(mxmatrix);
+-		ir=mxGetIr(mxmatrix);
+-		jc=mxGetJc(mxmatrix);
+-
+-		/*Now, start inserting data into sparse matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				MatSetValue(matrix,ir[count],i,pr[count],INSERT_VALUES);
+-				count++;
+-			}
+-		}
+-	}
+-	else{
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*transpose, as Petsc now does not allows MAT_COLUMN_ORIENTED matrices in MatSetValues: */
+-		tmatrix=xNew<double>(rows*cols);
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<rows;j++){
+-				*(tmatrix+rows*i+j)=*(mxmatrix_ptr+cols*j+i);
+-			}
+-		}
+-
+-		/*Create serial matrix: */
+-		ierr=MatCreateSeqDense(PETSC_COMM_SELF,rows,cols,NULL,&matrix);CHKERRQ(ierr);
+-
+-		/*Insert mxmatrix_ptr values into petsc matrix: */
+-		idxm=xNew<int>(rows);
+-		idxn=xNew<int>(cols);
+-
+-		for(i=0;i<rows;i++)idxm[i]=i;
+-		for(i=0;i<cols;i++)idxn[i]=i;
+-
+-		ierr=MatSetValues(matrix,rows,idxm,cols,idxn,tmatrix,INSERT_VALUES); CHKERRQ(ierr);
+-
+-		xDelete<double>(tmatrix);
+-	}
+-
+-	/*Assemble matrix: */
+-	MatAssemblyBegin(matrix,MAT_FINAL_ASSEMBLY); 
+-	MatAssemblyEnd(matrix,MAT_FINAL_ASSEMBLY);
+-
+-	/*Assign output pointer: */
+-	*pmatrix=matrix;
+-	if(pmatrix_rows) *pmatrix_rows=rows;
+-	if(pmatrix_cols) *pmatrix_cols=cols;
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToIssmSeqVec.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToIssmSeqVec.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToIssmSeqVec.cpp	(revision 15520)
+@@ -1,15 +0,0 @@
+-/*!\file MatlabVectorToIssmSeqVec.cpp
+- */
+-
+-/*Headers:*/
+-#include "./matlabio.h"
+-
+-IssmSeqVec<double>* MatlabVectorToIssmSeqVec(const mxArray* dataref){
+-
+-	IssmSeqVec<double>* output=NULL;
+-
+-	output=new IssmSeqVec<double>();
+-	MatlabVectorToDoubleVector(&output->vector,&output->M,dataref);
+-	return output;
+-
+-}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabNArrayToNArray.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabNArrayToNArray.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabNArrayToNArray.cpp	(revision 15520)
+@@ -1,248 +0,0 @@
+-/* \file MatlabNArrayToNArray.cpp
+- * \brief: convert a sparse or dense matlab n-dimensional array to cpp n-dimensional array
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./matlabio.h"
+-
+-/*FUNCTION MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int  i,j,rows,cols;
+-	int  numel,ndims;
+-	int *size,*dims;
+-	double* mxmatrix_ptr=NULL;
+-	const mwSize* ipt=NULL;
+-
+-	/*output: */
+-	double* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	double  *pr    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel=mxGetNumberOfElements(mxmatrix);
+-	ndims=mxGetNumberOfDimensions(mxmatrix);
+-	ipt  =mxGetDimensions(mxmatrix);
+-	size =xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows = mxGetM(mxmatrix);
+-		cols = mxGetN(mxmatrix);
+-
+-		matrix=xNewZeroInit<double>(rows*cols);
+-
+-		/*Now, get ir,jc and pr: */
+-		ir = mxGetIr(mxmatrix);
+-		jc = mxGetJc(mxmatrix);
+-		pr = mxGetPr(mxmatrix);
+-
+-		/*Now, start inserting data into double* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				*(matrix+rows*ir[count]+i)=pr[count];
+-				count++;
+-			}
+-		}
+-
+-	}
+-	else{
+-
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNewZeroInit<double>(numel);
+-
+-		dims=xNew<int>(ndims);
+-		for(i=0;i<numel;i++){
+-			ColumnWiseDimsFromIndex(dims,i,size,ndims);
+-			j = IndexFromRowWiseDims(dims,size,ndims);
+-			matrix[j]=(double)mxmatrix_ptr[i];
+-		}
+-		xDelete<int>(dims);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int  i,j,rows,cols;
+-	int  numel,ndims;
+-	int *size,*dims;
+-	bool* mxmatrix_ptr=NULL;
+-	const mwSize* ipt=NULL;
+-
+-	/*output: */
+-	bool* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	bool    *pm    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel = mxGetNumberOfElements(mxmatrix);
+-	ndims = mxGetNumberOfDimensions(mxmatrix);
+-	ipt   = mxGetDimensions(mxmatrix);
+-	size  = xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-		matrix=xNewZeroInit<bool>(rows*cols);
+-
+-		/*Now, get ir,jc and pm: */
+-		ir=mxGetIr(mxmatrix);
+-		jc=mxGetJc(mxmatrix);
+-		pm=(bool*)mxGetData(mxmatrix);
+-
+-		/*Now, start inserting data into bool* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				matrix[rows*ir[count]+i]=pm[count];
+-				count++;
+-			}
+-		}
+-	}
+-	else{
+-
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=(bool*)mxGetData(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNew<bool>(numel);
+-		dims=xNew<int>(ndims);
+-		for(i=0;i<numel;i++){
+-			ColumnWiseDimsFromIndex(dims,i,size,ndims);
+-			j=IndexFromRowWiseDims(dims,size,ndims);
+-			matrix[j]=(bool)mxmatrix_ptr[i];
+-		}
+-		xDelete<int>(dims);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int           i,j,rows,cols;
+-	int           numel,ndims;
+-	int          *size , *dims;
+-	mxChar       *mxmatrix_ptr = NULL;
+-	const mwSize *ipt          = NULL;
+-
+-	/*output: */
+-	char* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	char    *pm    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel = mxGetNumberOfElements(mxmatrix);
+-	ndims = mxGetNumberOfDimensions(mxmatrix);
+-	ipt   = mxGetDimensions(mxmatrix);
+-	size  = xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows = mxGetM(mxmatrix);
+-		cols = mxGetN(mxmatrix);
+-		matrix=xNew<char>(rows*cols);
+-
+-		/*Now, get ir,jc and pm: */
+-		ir = mxGetIr(mxmatrix);
+-		jc = mxGetJc(mxmatrix);
+-		pm = (char*)mxGetData(mxmatrix);
+-
+-		/*Now, start inserting data into char* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				matrix[rows*ir[count]+i]=(char)pm[count];
+-				count++;
+-			}
+-		}
+-	}
+-	else{
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=mxGetChars(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNew<char>(numel+1);
+-		matrix[numel]='\0';
+-
+-		/*looping code adapted from Matlab example explore.c: */
+-		int elements_per_page = size[0] * size[1];
+-		/* total_number_of_pages = size[2] x size[3] x ... x size[N-1] */
+-		int total_number_of_pages = 1;
+-		for (i=2; i<ndims; i++) {
+-			total_number_of_pages *= size[i];
+-		}
+-
+-		i=0;
+-		for (int page=0; page < total_number_of_pages; page++) {
+-			int row;
+-			/* On each page, walk through each row. */
+-			for (row=0; row<size[0]; row++)  {
+-				int column;
+-				j = (page * elements_per_page) + row;
+-
+-				/* Walk along each column in the current row. */
+-				for (column=0; column<size[1]; column++) {
+-					*(matrix+i++)=(char)*(mxmatrix_ptr+j);
+-					j += size[0];
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15520)
+@@ -9,6 +9,7 @@
+ #endif
+ 
+ #include "./matlabio.h"
++#include <cstring> 
+ 
+ /*Primitive data types*/
+ /*FUNCTION FetchData(double** pmatrix,int* pM,int *pN,const mxArray* dataref){{{*/
+@@ -483,51 +484,6 @@
+ /*}}}*/
+ 
+ /*ISSM objects*/
+-/*FUNCTION FetchData(Matrix<double>** pmatrix,const mxArray* dataref){{{*/
+-void FetchData(Matrix<double>** pmatrix,const mxArray* dataref){
+-
+-	Matrix<double>* outmatrix=NULL;
+-	int dummy=0;
+-
+-	if (mxIsClass(dataref,"double") ){
+-
+-		/*Convert matlab matrix to matrix: */
+-		outmatrix=MatlabMatrixToMatrix(dataref);
+-
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmatrix=outmatrix;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(Vector<double>** pvector,const mxArray* dataref){{{*/
+-void FetchData(Vector<double>** pvector,const mxArray* dataref){
+-
+-	Vector<double>* vector=NULL;
+-	int dummy;
+-
+-	if(mxIsEmpty(dataref)){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		vector=new Vector<double>(0);
+-	}
+-	else if (mxIsClass(dataref,"double") ){
+-
+-		/*Convert matlab vector to petsc vector: */
+-		vector=MatlabVectorToVector(dataref);
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pvector=vector;
+-}
+-/*}}}*/
+ /*FUNCTION FetchData(BamgGeom** pbamggeom,const mxArray* dataref){{{*/
+ void FetchData(BamgGeom** pbamggeom,const mxArray* dataref){
+ 
+@@ -683,3 +639,575 @@
+ 	*pcontours=contours;
+ }
+ /*}}}*/
++
++/*Toolkit*/
++/*FUNCTION MatlabMatrixToDoubleMatrix {{{*/
++int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix){
++
++	int        i,j,count,rows,cols;
++
++	/*output: */
++	double* matrix=NULL;
++
++	/*matlab indices: */
++	mwIndex*    ir=NULL;
++	mwIndex*    jc=NULL;
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			/*Now, get ir,jc and pr: */
++			ir=mxGetIr(mxmatrix);
++			jc=mxGetJc(mxmatrix);
++
++			/*Now, start inserting data into double* matrix: */
++			count=0;
++			for(i=0;i<cols;i++){
++				for(j=0;j<(jc[i+1]-jc[i]);j++){
++					matrix[rows*ir[count]+i]=pmxmatrix[count];
++					count++;
++				}
++			}
++		}
++
++	}
++	else if(mxIsClass(mxmatrix,"double")){
++		/*Dealing with dense matrix: recover pointer and size: */
++		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*Create serial matrix: */
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			for(i=0;i<rows;i++){
++				for(j=0;j<cols;j++){
++					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
++				}
++			}
++		}
++	}
++	else if(mxIsClass(mxmatrix,"single")){
++		/*Dealing with dense matrix: recover pointer and size: */
++		float *pmxmatrix=(float*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*Create serial matrix: */
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			for(i=0;i<rows;i++){
++				for(j=0;j<cols;j++){
++					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
++				}
++			}
++		}
++	}
++	else if(mxIsClass(mxmatrix,"int16")){
++		/*Dealing with dense matrix: recover pointer and size: */
++		short int *pmxmatrix=(short*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*Create serial matrix: */
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			for(i=0;i<rows;i++){
++				for(j=0;j<cols;j++){
++					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
++				}
++			}
++		}
++	}
++	else if(mxIsClass(mxmatrix,"uint8")){
++		/*Dealing with dense matrix: recover pointer and size: */
++		char *pmxmatrix=(char*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*Create serial matrix: */
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			for(i=0;i<rows;i++){
++				for(j=0;j<cols;j++){
++					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
++				}
++			}
++		}
++	}
++	else{
++		_error_("Matlab matrix type Not implemented yet");
++	}
++
++	/*Assign output pointer: */
++	*pmatrix=matrix;
++	*pmatrix_rows=rows;
++	*pmatrix_cols=cols;
++
++	return 1;
++}/*}}}*/
++/*FUNCTION MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
++int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
++
++	int  i,j,rows,cols;
++	int  numel,ndims;
++	int *size,*dims;
++	double* mxmatrix_ptr=NULL;
++	const mwSize* ipt=NULL;
++
++	/*output: */
++	double* matrix=NULL;
++
++	/*matlab indices: */
++	mwIndex *ir    = NULL;
++	mwIndex *jc    = NULL;
++	double  *pr    = NULL;
++	int      count;
++
++	/*get Matlab matrix information: */
++	numel=mxGetNumberOfElements(mxmatrix);
++	ndims=mxGetNumberOfDimensions(mxmatrix);
++	ipt  =mxGetDimensions(mxmatrix);
++	size =xNew<int>(ndims);
++	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		rows = mxGetM(mxmatrix);
++		cols = mxGetN(mxmatrix);
++
++		matrix=xNewZeroInit<double>(rows*cols);
++
++		/*Now, get ir,jc and pr: */
++		ir = mxGetIr(mxmatrix);
++		jc = mxGetJc(mxmatrix);
++		pr = mxGetPr(mxmatrix);
++
++		/*Now, start inserting data into double* matrix: */
++		count=0;
++		for(i=0;i<cols;i++){
++			for(j=0;j<(jc[i+1]-jc[i]);j++){
++				*(matrix+rows*ir[count]+i)=pr[count];
++				count++;
++			}
++		}
++
++	}
++	else{
++
++		/*Dealing with dense matrix: recover pointer and size: */
++		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
++
++		/*Create serial matrix: */
++		matrix=xNewZeroInit<double>(numel);
++
++		dims=xNew<int>(ndims);
++		for(i=0;i<numel;i++){
++			ColumnWiseDimsFromIndex(dims,i,size,ndims);
++			j = IndexFromRowWiseDims(dims,size,ndims);
++			matrix[j]=(double)mxmatrix_ptr[i];
++		}
++		xDelete<int>(dims);
++	}
++
++	/*Assign output pointer: */
++	*pmatrix       = matrix;
++	*pmatrix_numel = numel;
++	*pmatrix_ndims = ndims;
++	*pmatrix_size  = size;
++
++	return 1;
++}
++/*}}}*/
++/*FUNCTION MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
++int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
++
++	int  i,j,rows,cols;
++	int  numel,ndims;
++	int *size,*dims;
++	bool* mxmatrix_ptr=NULL;
++	const mwSize* ipt=NULL;
++
++	/*output: */
++	bool* matrix=NULL;
++
++	/*matlab indices: */
++	mwIndex *ir    = NULL;
++	mwIndex *jc    = NULL;
++	bool    *pm    = NULL;
++	int      count;
++
++	/*get Matlab matrix information: */
++	numel = mxGetNumberOfElements(mxmatrix);
++	ndims = mxGetNumberOfDimensions(mxmatrix);
++	ipt   = mxGetDimensions(mxmatrix);
++	size  = xNew<int>(ndims);
++	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++		matrix=xNewZeroInit<bool>(rows*cols);
++
++		/*Now, get ir,jc and pm: */
++		ir=mxGetIr(mxmatrix);
++		jc=mxGetJc(mxmatrix);
++		pm=(bool*)mxGetData(mxmatrix);
++
++		/*Now, start inserting data into bool* matrix: */
++		count=0;
++		for(i=0;i<cols;i++){
++			for(j=0;j<(jc[i+1]-jc[i]);j++){
++				matrix[rows*ir[count]+i]=pm[count];
++				count++;
++			}
++		}
++	}
++	else{
++
++		/*Dealing with dense matrix: recover pointer and size: */
++		mxmatrix_ptr=(bool*)mxGetData(mxmatrix);
++
++		/*Create serial matrix: */
++		matrix=xNew<bool>(numel);
++		dims=xNew<int>(ndims);
++		for(i=0;i<numel;i++){
++			ColumnWiseDimsFromIndex(dims,i,size,ndims);
++			j=IndexFromRowWiseDims(dims,size,ndims);
++			matrix[j]=(bool)mxmatrix_ptr[i];
++		}
++		xDelete<int>(dims);
++	}
++
++	/*Assign output pointer: */
++	*pmatrix       = matrix;
++	*pmatrix_numel = numel;
++	*pmatrix_ndims = ndims;
++	*pmatrix_size  = size;
++
++	return 1;
++}
++/*}}}*/
++/*FUNCTION MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
++int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
++
++	int           i,j,rows,cols;
++	int           numel,ndims;
++	int          *size , *dims;
++	mxChar       *mxmatrix_ptr = NULL;
++	const mwSize *ipt          = NULL;
++
++	/*output: */
++	char* matrix=NULL;
++
++	/*matlab indices: */
++	mwIndex *ir    = NULL;
++	mwIndex *jc    = NULL;
++	char    *pm    = NULL;
++	int      count;
++
++	/*get Matlab matrix information: */
++	numel = mxGetNumberOfElements(mxmatrix);
++	ndims = mxGetNumberOfDimensions(mxmatrix);
++	ipt   = mxGetDimensions(mxmatrix);
++	size  = xNew<int>(ndims);
++	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		rows = mxGetM(mxmatrix);
++		cols = mxGetN(mxmatrix);
++		matrix=xNew<char>(rows*cols);
++
++		/*Now, get ir,jc and pm: */
++		ir = mxGetIr(mxmatrix);
++		jc = mxGetJc(mxmatrix);
++		pm = (char*)mxGetData(mxmatrix);
++
++		/*Now, start inserting data into char* matrix: */
++		count=0;
++		for(i=0;i<cols;i++){
++			for(j=0;j<(jc[i+1]-jc[i]);j++){
++				matrix[rows*ir[count]+i]=(char)pm[count];
++				count++;
++			}
++		}
++	}
++	else{
++		/*Dealing with dense matrix: recover pointer and size: */
++		mxmatrix_ptr=mxGetChars(mxmatrix);
++
++		/*Create serial matrix: */
++		matrix=xNew<char>(numel+1);
++		matrix[numel]='\0';
++
++		/*looping code adapted from Matlab example explore.c: */
++		int elements_per_page = size[0] * size[1];
++		/* total_number_of_pages = size[2] x size[3] x ... x size[N-1] */
++		int total_number_of_pages = 1;
++		for (i=2; i<ndims; i++) {
++			total_number_of_pages *= size[i];
++		}
++
++		i=0;
++		for (int page=0; page < total_number_of_pages; page++) {
++			int row;
++			/* On each page, walk through each row. */
++			for (row=0; row<size[0]; row++)  {
++				int column;
++				j = (page * elements_per_page) + row;
++
++				/* Walk along each column in the current row. */
++				for (column=0; column<size[1]; column++) {
++					*(matrix+i++)=(char)*(mxmatrix_ptr+j);
++					j += size[0];
++				}
++			}
++		}
++	}
++
++	/*Assign output pointer: */
++	*pmatrix       = matrix;
++	*pmatrix_numel = numel;
++	*pmatrix_ndims = ndims;
++	*pmatrix_size  = size;
++
++	return 1;
++}
++/*}}}*/
++/*FUNCTION mxGetAssignedField{{{*/
++mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number,const char* field){
++
++	//output
++	mxArray* mxfield=NULL;
++
++	//input
++	mxArray    *inputs[2];
++	mxArray    *pindex      = NULL;
++	const char *fnames[2];
++	mwSize      ndim        = 2;
++	mwSize      onebyone[2] = {1,1};
++
++	//We want to call the subsasgn method, and get the returned array.This ensures that if we are running 
++	//large sized problems, the data is truly loaded from disk by the model subsasgn class method.
++	inputs[0]=(mxArray*)pmxa_array; //this is the model
++
++	//create index structure used in the assignment (index.type='.' and index.subs='x' for field x for ex)
++	fnames[0] = "type";
++	fnames[1] = "subs";
++	pindex=mxCreateStructArray( ndim,onebyone,2,fnames);
++	mxSetField( pindex, 0, "type",mxCreateString("."));
++	mxSetField( pindex, 0, "subs",mxCreateString(field));
++	inputs[1]=pindex;
++
++	mexCallMATLAB( 1, &mxfield, 2, (mxArray**)inputs, "subsref");
++
++	return mxfield;
++}/*}}}*/
++
++GenericOption<double>* OptionDoubleParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	GenericOption<double> *odouble = NULL;
++
++	/*check and parse the name  */
++	odouble=new GenericOption<double>();
++	odouble->name =xNew<char>(strlen(name)+1);
++	memcpy(odouble->name,name,(strlen(name)+1)*sizeof(char));
++	FetchData(&odouble->value,prhs[0]);
++	odouble->numel=1;
++	odouble->ndims=1;
++	odouble->size=NULL;
++
++	return(odouble);
++}/*}}}*/
++GenericOption<double*>* OptionDoubleArrayParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	GenericOption<double*> *odouble = NULL;
++
++	/*check and parse the name  */
++	odouble=new GenericOption<double*>();
++	odouble->name =xNew<char>(strlen(name)+1);
++	memcpy(odouble->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"double")){
++		_error_("Value of option \"" << odouble->name  << "\" must be class \"double\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++	FetchData(&odouble->value,&odouble->numel,&odouble->ndims,&odouble->size,prhs[0]);
++
++	return(odouble);
++}/*}}}*/
++GenericOption<bool*>* OptionLogicalParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	GenericOption<bool*> *ological = NULL;
++
++	/*check and parse the name  */
++	ological=new GenericOption<bool*>();
++	ological->name =xNew<char>(strlen(name)+1);
++	memcpy(ological->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"logical")){
++		_error_("Value of option \"" << ological->name  << "\" must be class \"logical\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++	FetchData(&ological->value,&ological->numel,&ological->ndims,&ological->size,prhs[0]);
++
++	return(ological);
++}/*}}}*/
++GenericOption<char*>* OptionCharParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	GenericOption<char*>  *ochar = NULL;
++
++	/*check and parse the name  */
++	ochar=new GenericOption<char*>();
++	ochar->name =xNew<char>(strlen(name)+1);
++	memcpy(ochar->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"char")){
++		_error_("Value of option \"" << ochar->name  << "\" must be class \"char\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++	FetchData(&ochar->value,&ochar->numel,&ochar->ndims,&ochar->size,prhs[0]);
++
++	return(ochar);
++}/*}}}*/
++GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	int            i;
++	char           namei[161];
++	Option*                   option      = NULL;
++	GenericOption<Options**>  *ostruct    = NULL;
++	const mwSize  *ipt        = NULL;
++	const mxArray *structi;
++	mwIndex        sindex;
++
++	/*check and parse the name  */
++	ostruct=new GenericOption<Options**>();
++	ostruct->name =xNew<char>(strlen(name)+1);
++	memcpy(ostruct->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"struct")){
++		_error_("Value of option \"" << ostruct->name  << "\" must be class \"struct\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++	ostruct->numel=mxGetNumberOfElements(prhs[0]);
++	ostruct->ndims=mxGetNumberOfDimensions(prhs[0]);
++	ipt           =mxGetDimensions(prhs[0]);
++	ostruct->size =xNew<int>(ostruct->ndims);
++	for (i=0; i<ostruct->ndims; i++) ostruct->size[i]=(int)ipt[i];
++	if (ostruct->numel) ostruct->value=xNew<Options*>(ostruct->numel);
++
++	/*loop through and process each element of the struct array  */
++	for (sindex=0; sindex<ostruct->numel; sindex++) {
++		ostruct->value[sindex]=new Options;
++
++		/*loop through and process each field for the element  */
++		for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
++			sprintf(namei,"%s.%s",name,mxGetFieldNameByNumber(prhs[0],i));
++			structi=mxGetFieldByNumber(prhs[0],sindex,i);
++
++			option=(Option*)OptionParse(namei,&structi);
++			ostruct->value[sindex]->AddObject((Object*)option);
++			option=NULL;
++		}
++	}
++
++	return(ostruct);
++}/*}}}*/
++GenericOption<Options*>* OptionCellParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	int            i;
++	int           *dims;
++	char           namei[161];
++	char           cstr[81];
++	GenericOption<Options*> *ocell      = NULL;
++	Option        *option     = NULL;
++	const mwSize  *ipt        = NULL;
++	const mxArray *celli;
++	mwIndex        cindex;
++
++	/*check and parse the name  */
++	ocell=new GenericOption<Options*>();
++	ocell->name =xNew<char>(strlen(name)+1);
++	memcpy(ocell->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"cell")){
++		_error_("Value of option \"" << ocell->name  << "\" must be class \"cell\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++
++	ocell->numel=mxGetNumberOfElements(prhs[0]);
++	ocell->ndims=mxGetNumberOfDimensions(prhs[0]);
++	ipt         =mxGetDimensions(prhs[0]);
++	ocell->size =xNew<int>(ocell->ndims);
++	for (i=0; i<ocell->ndims; i++) ocell->size[i]=(int)ipt[i];
++	ocell->value=new Options;
++
++	/*loop through and process each element of the cell array  */
++	dims=xNew<int>(ocell->ndims);
++	for (cindex=0; cindex<ocell->numel; cindex++) {
++		ColumnWiseDimsFromIndex(dims,(int)cindex,ocell->size,ocell->ndims);
++		StringFromDims(cstr,dims,ocell->ndims);
++		#ifdef _INTEL_WIN_
++			_snprintf(namei,161,"%s%s",name,cstr);
++		#else
++			snprintf(namei,161,"%s%s",name,cstr);
++		#endif
++		celli=mxGetCell(prhs[0],cindex);
++
++		option=(Option*)OptionParse(namei,&celli);
++		ocell->value->AddObject((Object*)option);
++		option=NULL;
++	}
++	xDelete<int>(dims);
++
++	return(ocell);
++}/*}}}*/
++Option* OptionParse(char* name, const mxArray* prhs[]){ /*{{{*/
++
++	Option  *option = NULL;
++	mxArray *lhs[1];
++
++	/*parse the value according to the matlab data type  */
++	if     (mxIsClass(prhs[0],"double")  && (mxGetNumberOfElements(prhs[0])==1))
++	 option=(Option*)OptionDoubleParse(name,prhs);
++	else if(mxIsClass(prhs[0],"double")  && (mxGetNumberOfElements(prhs[0])!=1))
++	 option=(Option*)OptionDoubleArrayParse(name,prhs);
++	else if(mxIsClass(prhs[0],"logical"))
++	 option=(Option*)OptionLogicalParse(name,prhs);
++	else if(mxIsClass(prhs[0],"char"))
++	 option=(Option*)OptionCharParse(name,prhs);
++	else if(mxIsClass(prhs[0],"struct"))
++	 option=(Option*)OptionStructParse(name,prhs);
++	else if(mxIsClass(prhs[0],"cell"))
++	 option=(Option*)OptionCellParse(name,prhs);
++	else {
++		_printf0_("  Converting value of option \"" << name << "\" from unrecognized class \"" << mxGetClassName(prhs[0]) << "\" to class \"" << "struct" << "\".\n");
++		if (!mexCallMATLAB(1,lhs,1,(mxArray**)prhs,"struct")) {
++			option=(Option*)OptionStructParse(name,(const mxArray**)lhs);
++			mxDestroyArray(lhs[0]);
++		}
++		else _error_("Second argument value of option \""<< name <<"\" is of unrecognized class \""<< mxGetClassName(prhs[0]) <<"\".");
++	}
++
++	return(option);
++}/*}}}*/
+Index: ../trunk-jpl/src/wrappers/matlab/io/matlabio.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 15520)
+@@ -38,12 +38,10 @@
+ void FetchData(int** pmatrix,int* pM,int *pN,const mxArray* dataref);
+ void FetchData(bool** pmatrix,int* pM,int *pN,const mxArray* dataref);
+ void FetchData(bool** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
+-void FetchData(Matrix<double>** pmatrix,const mxArray* dataref);
+ void FetchData(int** pvector,int* pM,const mxArray* dataref);
+ void FetchData(float** pvector,int* pM,const mxArray* dataref);
+ void FetchData(double** pvector,int* pM,const mxArray* dataref);
+ void FetchData(bool** pvector,int* pM,const mxArray* dataref);
+-void FetchData(Vector<double>** pvector,const mxArray* dataref);
+ void FetchData(char** pstring,const mxArray* dataref);
+ void FetchData(char** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
+ void FetchData(double* pscalar,const mxArray* dataref);
+@@ -72,29 +70,12 @@
+ void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,char* string);
+ int CheckNumMatlabArguments(int nlhs,int NLHS, int nrhs,int NRHS, const char* THISFUNCTION, void (*function)( void ));
+ 
+-/*Matlab to Matrix routines: */
+-Matrix<double>* MatlabMatrixToMatrix(const mxArray* mxmatrix);
+-Vector<double>* MatlabVectorToVector(const mxArray* mxvector);
+-
+ /*Matlab to double* routines: */
+-int MatlabVectorToDoubleVector(double** pvector,int* pvector_rows,const mxArray* mxvector);
+ int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix);
+ int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+ int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+ int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+ 
+-/*Matlab to IssmDenseMat routines: */
+-IssmMat<double>* MatlabMatrixToIssmMat(const mxArray* dataref);
+-IssmVec<double>* MatlabVectorToIssmVec(const mxArray* dataref);
+-
+-/*Matlab to Petsc routines: */
+-#ifdef _HAVE_PETSC_
+-int MatlabMatrixToPetscMat(Mat* matrix,int* prows,int* pcols, const mxArray* mxmatrix);
+-PetscMat* MatlabMatrixToPetscMat(const mxArray* mxmatrix);
+-int MatlabVectorToPetscVec(Vec* pvector,int* pvector_rows,const mxArray* mxvector);
+-PetscVec* MatlabVectorToPetscVec(const mxArray* mxvector);
+-#endif
+-
+ /*Print*/
+ void ApiPrintf(const char* string);
+ #endif	/* _IO_H_ */
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15519)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15520)
+@@ -12,25 +12,10 @@
+ 
+ io_sources= ./include/matlabincludes.h\
+ 				./io/matlabio.h\
+-				./io/MatlabNArrayToNArray.cpp\
+ 				./io/CheckNumMatlabArguments.cpp\
+-				./io/mxGetAssignedField.cpp\
+ 				./io/WriteMatlabData.cpp\
+-				./io/FetchMatlabData.cpp\
+-				./io/OptionParse.cpp\
+-				./io/MatlabMatrixToMatrix.cpp\
+-				./io/MatlabVectorToVector.cpp\
+-				./io/MatlabVectorToDoubleVector.cpp\
+-				./io/MatlabMatrixToDoubleMatrix.cpp\
+-				./io/MatlabMatrixToIssmMat.cpp\
+-				./io/MatlabVectorToIssmVec.cpp
++				./io/FetchMatlabData.cpp
+ 
+-				
+-if PETSC
+-io_sources += ./io/MatlabMatrixToPetscMat.cpp\
+-				./io/MatlabVectorToPetscVec.cpp
+-endif
+-
+ ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_ -D_WRAPPERS_ $(CXXFLAGS) $(CXXOPTFLAGS) 
+ libISSMMatlab_a_SOURCES = $(io_sources)
+ libISSMMatlab_a_CXXFLAGS= $(ALLCXXFLAGS)
+@@ -159,7 +144,7 @@
+ 
+ Chaco_la_SOURCES = ../Chaco/Chaco.cpp\
+ 						 ../Chaco/Chaco.h
+-Chaco_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(CHACOLIB) $(GSLLIB)
++Chaco_la_LIBADD = ${deps} $(MPILIB) $(CHACOLIB) $(GSLLIB) $(PETSCLIB)
+ 
+ ContourToMesh_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp\
+ 									../ContourToMesh/ContourToMesh.h
Index: /issm/oecreview/Archive/15392-16133/ISSM-15520-15521.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15520-15521.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15520-15521.diff	(revision 16134)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15520)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15521)
+@@ -31,9 +31,9 @@
+ 
+ #	pos=find(md.mesh.vertexonboundary & ~nodeonicefront);
+ 	pos=numpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(nodeonicefront)))[0]
+-	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,))
+-	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,))
+-	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,))
++	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.diagnostic.spcvx[pos]=0
+ 	md.diagnostic.spcvy[pos]=0
+ 	md.diagnostic.spcvz[pos]=0
+@@ -92,12 +92,12 @@
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+-		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,))
++		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ #		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+ 		pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
+ 		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
+ 		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
+-			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,))
++			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
+ 	else:
+ 		print "      no thermal boundary conditions created: no observed temperature found"
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15521-15522.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15521-15522.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15521-15522.diff	(revision 16134)
@@ -0,0 +1,129 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15521)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15522)
+@@ -699,27 +699,27 @@
+ 	IssmDouble  area_init,area_portion;
+ 	IssmDouble  xyz_bis[3][3];
+ 
+-	GetJacobianDeterminant(&area_init, &xyz_list[0][0],NULL);
++	area_init=GetArea();
+ 
+ 	/*Initialize xyz_list with original xyz_list of triangle coordinates*/
+ 	for(j=0;j<3;j++){ 
+-		for(k=0;k<3;j++){
++		for(k=0;k<3;k++){
+ 			xyz_bis[j][k]=xyz_list[j][k];
+ 		}
+ 	}
+ 	for(i=0;i<numpoints;i++){
+ 		for(j=0;j<3;j++){ 
+-			for(k=0;k<3;j++){
++			for(k=0;k<3;k++){
+ 				/*Change appropriate line*/
+ 				xyz_bis[j][k]=xyz_zero[i][k];
+ 			}
+ 
+ 			/*Compute area fraction*/
+-			GetJacobianDeterminant(&area_portion, &xyz_bis[0][0],NULL);
++			area_portion=fabs(xyz_bis[1][0]*xyz_bis[2][1] - xyz_bis[1][1]*xyz_bis[2][0] + xyz_bis[0][0]*xyz_bis[1][1] - xyz_bis[0][1]*xyz_bis[1][0] + xyz_bis[2][0]*xyz_bis[0][1] - xyz_bis[2][1]*xyz_bis[0][0])/2.;
+ 			*(area_coordinates+3*i+j)=area_portion/area_init;
+ 
+ 			/*Reinitialize xyz_list*/
+-			for(k=0;k<3;j++){
++			for(k=0;k<3;k++){
+ 				/*Reinitialize xyz_list with original coordinates*/
+ 				xyz_bis[j][k]=xyz_list[j][k];
+ 			}
+@@ -947,7 +947,7 @@
+ 		s1=levelset[2]/(levelset[2]-levelset[1]);
+ 		s2=levelset[2]/(levelset[2]-levelset[0]);
+ 
+-		if(levelset[2]>0) normal_orientation=0;
++		if(levelset[2]>0) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
+@@ -963,7 +963,7 @@
+ 		s1=levelset[0]/(levelset[0]-levelset[2]);
+ 		s2=levelset[0]/(levelset[0]-levelset[1]);
+ 
+-		if(levelset[0]>0) normal_orientation=0;
++		if(levelset[0]>0) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
+@@ -979,7 +979,7 @@
+ 		s1=levelset[1]/(levelset[1]-levelset[0]);
+ 		s2=levelset[1]/(levelset[1]-levelset[2]);
+ 
+-		if(levelset[1]>0) normal_orientation=0;
++		if(levelset[1]>0) normal_orientation=1;
+ 		/*New point 0*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
+@@ -989,8 +989,38 @@
+ 		xyz_zero[3*(1-normal_orientation)+0]=xyz_list[1][0]+s2*(xyz_list[2][0]-xyz_list[1][0]);
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[1][1]+s2*(xyz_list[2][1]-xyz_list[1][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[1][2]+s2*(xyz_list[2][2]-xyz_list[1][2]);
+-		}
++	}
++	else if(levelset[0]==0 && levelset[1]==0){ //front is on point 0 and 1
++		xyz_zero[3*0+0]=xyz_list[0][0];
++		xyz_zero[3*0+1]=xyz_list[0][1];
++		xyz_zero[3*0+2]=xyz_list[0][2];
+ 
++		/*New point 2*/
++		xyz_zero[3*1+0]=xyz_list[1][0];
++		xyz_zero[3*1+1]=xyz_list[1][1];
++		xyz_zero[3*1+2]=xyz_list[1][2];
++	}
++	else if(levelset[0]==0 && levelset[2]==0){ //front is on point 0 and 1
++		xyz_zero[3*0+0]=xyz_list[0][0];
++		xyz_zero[3*0+1]=xyz_list[0][1];
++		xyz_zero[3*0+2]=xyz_list[0][2];
++
++		/*New point 2*/
++		xyz_zero[3*1+0]=xyz_list[2][0];
++		xyz_zero[3*1+1]=xyz_list[2][1];
++		xyz_zero[3*1+2]=xyz_list[2][2];
++	}
++	else if(levelset[1]==0 && levelset[2]==0){ //front is on point 0 and 1
++		xyz_zero[3*0+0]=xyz_list[1][0];
++		xyz_zero[3*0+1]=xyz_list[1][1];
++		xyz_zero[3*0+2]=xyz_list[1][2];
++
++		/*New point 2*/
++		xyz_zero[3*1+0]=xyz_list[2][0];
++		xyz_zero[3*1+1]=xyz_list[2][1];
++		xyz_zero[3*1+2]=xyz_list[2][2];
++	}
++	else _error_("Case not covered");
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GetNodeIndex {{{*/
+@@ -3123,8 +3153,6 @@
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	bool        isfront;
+ 
+-	return NULL;
+-
+ 	/*Retrieve all inputs and parameters*/
+ 	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
+ 
+@@ -3136,6 +3164,7 @@
+ 		}
+ 	}
+ 
++	return NULL;
+ 	/*If no front, return NULL*/
+ 	if(!isfront) return NULL;
+ 
+@@ -3195,7 +3224,6 @@
+ 	xDelete<IssmDouble>(basis);
+ 	delete gauss;
+ 	return pe;
+-
+ }
+ /*}}}*/
+ /*FUNCTION Tria::CreatePVectorDiagnosticHutter{{{*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15522-15523.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15522-15523.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15522-15523.diff	(revision 16134)
@@ -0,0 +1,75 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15522)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15523)
+@@ -55,6 +55,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
++	iomodel->FetchDataToInput(elements,IcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15522)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15523)
+@@ -63,22 +63,15 @@
+ 		/*Now, if this element is not in the partition, pass: */
+ 		if(!iomodel->my_elements[element]) continue;
+ 
+-		/*Do not create ice front if Hutter or Stokes elements*/
++		/*Do not create ice front if Hutter or MacAyeal elements*/
+ 		if (reCast<int,IssmDouble>(*(elements_type+element))==HutterApproximationEnum) continue;
++		if (reCast<int,IssmDouble>(*(elements_type+element))==MacAyealApproximationEnum) continue;
+ 
+ 		/*Create and  add load: */
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && iomodel->dim==2){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal2dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && iomodel->dim==3){
++		if (reCast<int,IssmDouble>(*(elements_type+element))==(L1L2ApproximationEnum)){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+ 		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(L1L2ApproximationEnum)){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+ 		else if (reCast<int,IssmDouble>(*(elements_type+element))==(PattynApproximationEnum)){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15522)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15523)
+@@ -1001,14 +1001,14 @@
+ 		xyz_zero[3*1+2]=xyz_list[1][2];
+ 	}
+ 	else if(levelset[0]==0 && levelset[2]==0){ //front is on point 0 and 1
+-		xyz_zero[3*0+0]=xyz_list[0][0];
+-		xyz_zero[3*0+1]=xyz_list[0][1];
+-		xyz_zero[3*0+2]=xyz_list[0][2];
++		xyz_zero[3*0+0]=xyz_list[2][0];
++		xyz_zero[3*0+1]=xyz_list[2][1];
++		xyz_zero[3*0+2]=xyz_list[2][2];
+ 
+ 		/*New point 2*/
+-		xyz_zero[3*1+0]=xyz_list[2][0];
+-		xyz_zero[3*1+1]=xyz_list[2][1];
+-		xyz_zero[3*1+2]=xyz_list[2][2];
++		xyz_zero[3*1+0]=xyz_list[0][0];
++		xyz_zero[3*1+1]=xyz_list[0][1];
++		xyz_zero[3*1+2]=xyz_list[0][2];
+ 	}
+ 	else if(levelset[1]==0 && levelset[2]==0){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[1][0];
+@@ -3164,7 +3164,6 @@
+ 		}
+ 	}
+ 
+-	return NULL;
+ 	/*If no front, return NULL*/
+ 	if(!isfront) return NULL;
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15523-15524.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15523-15524.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15523-15524.diff	(revision 16134)
@@ -0,0 +1,95 @@
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15523)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15524)
+@@ -133,6 +133,7 @@
+ 	case 431, name='SquareSheetShelfSteaEnthalpyM3d';
+ 	case 432, name='SquareSheetShelfSteaEnthalpyP3d';
+ 	case 433, name='RoundSheetShelfGLMigrationM3d';
++	case 434, name='SquareSheetShelfL1L2';
+ 	case 501, name='PigDiagM2d';
+ 	case 502, name='PigDiagP3d';
+ 	case 503, name='PigDiagS3d';
+Index: ../trunk-jpl/test/NightlyRun/test434.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test434.py	(revision 15524)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(4,1.)
++md=setflowequation(md,'l1l2','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15523)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15524)
+@@ -133,6 +133,7 @@
+ 		431 : 'SquareSheetShelfSteaEnthalpyM3d',
+ 		432 : 'SquareSheetShelfSteaEnthalpyP3d',
+ 		433 : 'RoundSheetShelfGLMigrationM3d',
++		434 : 'SquareSheetShelfDiagL1L2',
+ 		501 : 'PigDiagM2d',
+ 		502 : 'PigDiagP3d',
+ 		503 : 'PigDiagS3d',
+Index: ../trunk-jpl/test/NightlyRun/test434.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test434.m	(revision 15524)
+@@ -0,0 +1,18 @@
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md=extrude(md,4,1.);
++md=setflowequation(md,'l1l2','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,DiagnosticSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.DiagnosticSolution.Vx),...
++	(md.results.DiagnosticSolution.Vy),...
++	(md.results.DiagnosticSolution.Vz),...
++	(md.results.DiagnosticSolution.Vel),...
++	(md.results.DiagnosticSolution.Pressure),...
++	};
+Index: ../trunk-jpl/test/Archives/Archive434.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive434.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive434.nc	(revision 15523)
++++ ../trunk-jpl/test/Archives/Archive434.nc	(revision 15524)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive434.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15524-15525.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15524-15525.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15524-15525.diff	(revision 16134)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15524)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15525)
+@@ -63,15 +63,22 @@
+ 		/*Now, if this element is not in the partition, pass: */
+ 		if(!iomodel->my_elements[element]) continue;
+ 
+-		/*Do not create ice front if Hutter or MacAyeal elements*/
++		/*Do not create ice front if Hutter or Stokes elements*/
+ 		if (reCast<int,IssmDouble>(*(elements_type+element))==HutterApproximationEnum) continue;
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==MacAyealApproximationEnum) continue;
+ 
+ 		/*Create and  add load: */
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==(L1L2ApproximationEnum)){
++		if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && iomodel->dim==2){
++			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal2dIceFrontEnum,DiagnosticHorizAnalysisEnum));
++			count++;
++		}
++		else if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && iomodel->dim==3){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+ 		}
++		else if (reCast<int,IssmDouble>(*(elements_type+element))==(L1L2ApproximationEnum)){
++			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
++			count++;
++		}
+ 		else if (reCast<int,IssmDouble>(*(elements_type+element))==(PattynApproximationEnum)){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15524)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15525)
+@@ -3164,6 +3164,7 @@
+ 		}
+ 	}
+ 
++	return NULL;
+ 	/*If no front, return NULL*/
+ 	if(!isfront) return NULL;
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15525-15526.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15525-15526.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15525-15526.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive434.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15526-15527.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15526-15527.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15526-15527.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15526)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15527)
+@@ -66,9 +66,9 @@
+ 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
+ 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2])
+ 			else:
+-				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,7+1))
+-				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,7+1))
+-			if not (self.ismacayeal or self.ispattyn or self.ishutter or self.isstokes or self.isl1l2):
++				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,8))
++				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,8))
++			if not (self.ishutter or self.ismacayeal or self.isl1l2 or self.ispattyn or self.isstokes):
+ 				md.checkmessage("no element types set for this model")
+ 
+ 		if DiagnosticHutterAnalysisEnum() in analyses:
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15526)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15527)
+@@ -49,7 +49,7 @@
+ 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[0:8]);
+ 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[0:8]);
+ 				end
+-				if ~(obj.ismacayeal || obj.ispattyn || obj.ishutter || obj.isstokes || obj.isl1l2),
++				if ~(obj.ishutter || obj.ismacayeal || obj.isl1l2 || obj.ispattyn || obj.isstokes),
+ 					md = checkmessage(md,['no element types set for this model']);
+ 				end
+ 			end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15527-15528.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15527-15528.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15527-15528.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15527)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15528)
+@@ -66,8 +66,8 @@
+ 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
+ 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2])
+ 			else:
+-				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,8))
+-				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,8))
++				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,8+1))
++				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,8+1))
+ 			if not (self.ishutter or self.ismacayeal or self.isl1l2 or self.ispattyn or self.isstokes):
+ 				md.checkmessage("no element types set for this model")
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15528-15529.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15528-15529.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15528-15529.diff	(revision 16134)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15528)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15529)
+@@ -623,11 +623,11 @@
+ 	if test -d "$PETSC_ROOT"; then
+ 
+ 	 PETSCINCL=" -I$PETSC_ROOT/include"
+-	 dnl Add other location (maybe not needed anymore)
+-	 if test -d "$PETSC_ROOT/$PETSC_ARCH/include"; then
++	 dnl Add other location (not needed anymore since at least PETSc 3.0)
++	 if test "x$PETSC_ARCH" != "x" && test -d "$PETSC_ROOT/$PETSC_ARCH/include"; then
+ 	  PETSCINCL+=" $PETSC_ROOT/$PETSC_ARCH/include"
+ 	 fi
+-	 if test -d "$PETSC_ROOT/include/$PETSC_ARCH"; then
++	 if test "x$PETSC_ARCH" != "x" && test -d "$PETSC_ROOT/include/$PETSC_ARCH"; then
+ 	  PETSCINCL+=" $PETSC_ROOT/include/$PETSC_ARCH"
+ 	 fi
+ 	
Index: /issm/oecreview/Archive/15392-16133/ISSM-15529-15530.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15529-15530.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15529-15530.diff	(revision 16134)
@@ -0,0 +1,102 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15529)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15530)
+@@ -502,6 +502,7 @@
+ 	P2Enum,
+ 	P2xP1Enum,
+ 	MINIEnum,
++	MINIcondensedEnum,
+ 	TaylorHoodEnum,
+ 	/*}}}*/
+ 	/*Results{{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15529)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15530)
+@@ -494,6 +494,7 @@
+ 		case P2Enum : return "P2";
+ 		case P2xP1Enum : return "P2xP1";
+ 		case MINIEnum : return "MINI";
++		case MINIcondensedEnum : return "MINIcondensed";
+ 		case TaylorHoodEnum : return "TaylorHood";
+ 		case SaveResultsEnum : return "SaveResults";
+ 		case BoolElementResultEnum : return "BoolElementResult";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15529)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15530)
+@@ -503,12 +503,13 @@
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
++	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+-	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
++	      if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
++	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15529)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15530)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=564;
++macro=565;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15529)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15530)
+@@ -6700,6 +6700,20 @@
+ 
+ 	return StringToEnum('MINI')[0]
+ 
++def MINIcondensedEnum():
++	"""
++	MINICONDENSEDENUM - Enum of MINIcondensed
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=MINIcondensedEnum()
++	"""
++
++	return StringToEnum('MINIcondensed')[0]
++
+ def TaylorHoodEnum():
+ 	"""
+ 	TAYLORHOODENUM - Enum of TaylorHood
+@@ -7916,5 +7930,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 564
++	return 565
+ 
+Index: ../trunk-jpl/src/m/enum/MINIcondensedEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MINIcondensedEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MINIcondensedEnum.m	(revision 15530)
+@@ -0,0 +1,11 @@
++function macro=MINIcondensedEnum()
++%MINICONDENSEDENUM - Enum of MINIcondensed
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MINIcondensedEnum()
++
++macro=StringToEnum('MINIcondensed');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15530-15531.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15530-15531.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15530-15531.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15530)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15531)
+@@ -570,8 +570,9 @@
+ syn keyword cConstant FlowequationBorderstokesEnum
+ syn keyword cConstant FlowequationElementEquationEnum
+ syn keyword cConstant FlowequationIshutterEnum
++syn keyword cConstant FlowequationIsmacayealEnum
+ syn keyword cConstant FlowequationIsl1l2Enum
+-syn keyword cConstant FlowequationIsmacayealpattynEnum
++syn keyword cConstant FlowequationIspattynEnum
+ syn keyword cConstant FlowequationIsstokesEnum
+ syn keyword cConstant FlowequationFeStokesEnum
+ syn keyword cConstant FlowequationFeSsaEnum
+@@ -988,6 +989,7 @@
+ syn keyword cConstant P2Enum
+ syn keyword cConstant P2xP1Enum
+ syn keyword cConstant MINIEnum
++syn keyword cConstant MINIcondensedEnum
+ syn keyword cConstant TaylorHoodEnum
+ syn keyword cConstant SaveResultsEnum
+ syn keyword cConstant BoolElementResultEnum
Index: /issm/oecreview/Archive/15392-16133/ISSM-15531-15532.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15531-15532.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15531-15532.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test434.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.m	(revision 15531)
++++ ../trunk-jpl/test/NightlyRun/test434.m	(revision 15532)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-07,1e-07,1e-07,1e-07,1e-07};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15532-15533.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15532-15533.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15532-15533.diff	(revision 16134)
@@ -0,0 +1,440 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15532)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15533)
+@@ -33,42 +33,42 @@
+ void UpdateElementsDiagnosticHoriz(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*diagnostic vertical*/
+-void	CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsDiagnosticVert(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsDiagnosticVert(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel);
++void UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*diagnostic hutter*/
+-void	CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel);
++void UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ #ifdef _HAVE_GIA_
+ /*gia*/
+-void	CreateNodesGia(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsGia(Constraints** pconstraints,IoModel* iomodel);
+-void    CreateLoadsGia(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsGia(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesGia(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsGia(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsGia(Loads** ploads, IoModel* iomodel);
++void UpdateElementsGia(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ #endif
+ 
+ /*bed slope*/
+-void	CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsBedSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel);
++void UpdateElementsBedSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*surface slope*/
+-void	CreateNodesSurfaceSlope(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsSurfaceSlope(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsSurfaceSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesSurfaceSlope(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsSurfaceSlope(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel);
++void UpdateElementsSurfaceSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*thermal:*/
+-void	CreateNodesThermal(Nodes** pnodes,IoModel* iomodel);
+-void	CreateConstraintsThermal(Constraints** pconstraints,IoModel* iomodel);
+-void  CreateLoadsThermal(Loads** ploads, IoModel* iomodel);
+-void	UpdateElementsThermal(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesThermal(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsThermal(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsThermal(Loads** ploads, IoModel* iomodel);
++void UpdateElementsThermal(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*enthalpy:*/
+ void CreateNodesEnthalpy(Nodes** pnodes,IoModel* iomodel);
+@@ -125,10 +125,10 @@
+ void CreateNumberNodeToElementConnectivity(IoModel* iomodel);
+ 
+ /*Diverse: */
+-void  SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters);
+-void  UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints);
++void SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters);
++void UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints);
+ 
+ /*Distribution of dofs: */
+-void DistributeNumDofs(DofIndexing* index,int analysis_type,IssmDouble* vertices_type);
++void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15532)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15533)
+@@ -5,101 +5,111 @@
+ #include "../../shared/shared.h"
+ #include "../../classes/classes.h"
+ 
+-void DistributeNumDofs(DofIndexing* index,int analysis_type,IssmDouble* vertices_type){
++void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type){
+ 
+ 	/*For now, we distribute by analysis_type, later, we will distribute using the analysis_type,
+-	 * but also the vertices_type: */
++	 * but also the node_type: */
+ 
+-	int numdofs=2; //default numdofs
+-	int* doftype=NULL;
++	int  numdofs = -1;   //default numdofs
++	int *doftype = NULL;
+ 
+ 	/*ok, according to analysis type: */
+-	if (analysis_type==DiagnosticHorizAnalysisEnum){
+-		if (vertices_type[0]==MacAyealApproximationEnum){
++	switch(analysis_type){
++		case DiagnosticHorizAnalysisEnum:
++			switch(node_type){
++				case MacAyealApproximationEnum:
++					numdofs=2;
++					break;
++				case L1L2ApproximationEnum:
++					numdofs=2;
++					break;
++				case PattynApproximationEnum:
++					numdofs=2;
++					break;
++				case HutterApproximationEnum:
++					numdofs=2;
++					break;
++				case StokesApproximationEnum:
++					numdofs=4;
++					break;
++				case NoneApproximationEnum:
++					numdofs=4;
++					break;
++				case MacAyealPattynApproximationEnum:
++					numdofs=4;
++					doftype=xNew<int>(numdofs);
++					doftype[0]=MacAyealApproximationEnum;
++					doftype[1]=MacAyealApproximationEnum;
++					doftype[2]=PattynApproximationEnum;
++					doftype[3]=PattynApproximationEnum;
++					break;
++				case PattynStokesApproximationEnum:
++					numdofs=6;
++					doftype=xNew<int>(numdofs);
++					doftype[0]=PattynApproximationEnum;
++					doftype[1]=PattynApproximationEnum;
++					doftype[2]=StokesApproximationEnum;
++					doftype[3]=StokesApproximationEnum;
++					doftype[4]=StokesApproximationEnum;
++					doftype[5]=StokesApproximationEnum;
++					break;
++				case MacAyealStokesApproximationEnum:
++					numdofs=6;
++					doftype=xNew<int>(numdofs);
++					doftype[0]=MacAyealApproximationEnum;
++					doftype[1]=MacAyealApproximationEnum;
++					doftype[2]=StokesApproximationEnum;
++					doftype[3]=StokesApproximationEnum;
++					doftype[4]=StokesApproximationEnum;
++					doftype[5]=StokesApproximationEnum;
++					break;
++				default:
++					_error_("Approximationtype " << node_type << " (" << EnumToStringx(node_type) << ") not implemented yet for DiagnosticHoriz");
++
++			}
++			break;
++		case DiagnosticVertAnalysisEnum:
++			numdofs=1;
++			break;
++		case DiagnosticHutterAnalysisEnum:
+ 			numdofs=2;
+-		}
+-		else if (vertices_type[0]==L1L2ApproximationEnum){
+-			numdofs=2;
+-		}
+-		else if (vertices_type[0]==PattynApproximationEnum){
+-			numdofs=2;
+-		}
+-		else if (vertices_type[0]==HutterApproximationEnum){
+-			numdofs=2;
+-		}
+-		else if (vertices_type[0]==StokesApproximationEnum){
+-			numdofs=4;
+-		}
+-		else if (vertices_type[0]==NoneApproximationEnum){
+-			numdofs=4;
+-		}
+-		else if (vertices_type[0]==MacAyealPattynApproximationEnum){
+-			numdofs=4;
+-			doftype=xNew<int>(numdofs);
+-			doftype[0]=MacAyealApproximationEnum;
+-			doftype[1]=MacAyealApproximationEnum;
+-			doftype[2]=PattynApproximationEnum;
+-			doftype[3]=PattynApproximationEnum;
+-		}
+-		else if (vertices_type[0]==PattynStokesApproximationEnum){
+-			numdofs=6;
+-			doftype=xNew<int>(numdofs);
+-			doftype[0]=PattynApproximationEnum;
+-			doftype[1]=PattynApproximationEnum;
+-			doftype[2]=StokesApproximationEnum;
+-			doftype[3]=StokesApproximationEnum;
+-			doftype[4]=StokesApproximationEnum;
+-			doftype[5]=StokesApproximationEnum;
+-		}
+-		else if (vertices_type[0]==MacAyealStokesApproximationEnum){
+-			numdofs=6;
+-			doftype=xNew<int>(numdofs);
+-			doftype[0]=MacAyealApproximationEnum;
+-			doftype[1]=MacAyealApproximationEnum;
+-			doftype[2]=StokesApproximationEnum;
+-			doftype[3]=StokesApproximationEnum;
+-			doftype[4]=StokesApproximationEnum;
+-			doftype[5]=StokesApproximationEnum;
+-		}
+-		else _error_("Approximationtype " << reCast<int>(*vertices_type) << " (" << EnumToStringx(reCast<int>(*vertices_type)) << ") not implemented yet for DiagnosticHoriz");
++			break;
++		case BedSlopeAnalysisEnum:
++			numdofs=1;
++			break;
++		case SurfaceSlopeAnalysisEnum:
++			numdofs=1;
++			break;
++		case ThermalAnalysisEnum:
++			numdofs=1;
++			break;
++		case EnthalpyAnalysisEnum:
++			numdofs=1;
++			break;
++		case HydrologyDCInefficientAnalysisEnum:
++			numdofs=1;
++			break;
++		case HydrologyDCEfficientAnalysisEnum:
++			numdofs=1;
++			break;
++		case HydrologyShreveAnalysisEnum:
++			numdofs=1;
++			break;
++		case MeltingAnalysisEnum:
++			numdofs=1;
++			break;
++		case PrognosticAnalysisEnum:
++			numdofs=1;
++			break;
++		case GiaAnalysisEnum:
++			numdofs=1;
++			break;
++		case BalancethicknessAnalysisEnum:
++			numdofs=1;
++			break;
++		default:
++			_error_("analysis type: " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not implemented yet");
+ 	}
+-	else if (analysis_type==DiagnosticVertAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==DiagnosticHutterAnalysisEnum){
+-		numdofs=2;
+-	}
+-	else if (analysis_type==BedSlopeAnalysisEnum || analysis_type==SurfaceSlopeAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==ThermalAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==EnthalpyAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==HydrologyDCInefficientAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==HydrologyDCEfficientAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==HydrologyShreveAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==MeltingAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==PrognosticAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==GiaAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else if (analysis_type==BalancethicknessAnalysisEnum){
+-		numdofs=1;
+-	}
+-	else _error_("analysis type: " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not implemented yet");
+ 
+ 	/*Now initialize the index*/
+ 	index->Init(numdofs,doftype);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15532)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15533)
+@@ -57,6 +57,21 @@
+ 			}
+ 			break;
+ 
++		case MINIcondensedEnum:
++			/*P1 velocity*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis));
++				}
++			}
++			/*P1+ pressure statically condensed*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,i,i,iomodel,analysis));
++				}
++			}
++			break;
++
+ 		default:
+ 			_error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet");
+ 	}
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15532)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15533)
+@@ -27,6 +27,7 @@
+ 	/*Intermediary*/
+ 	int k,l;
+ 	int gsize;
++	int node_type;
+ 
+ 	/*id: */
+ 	this->id            = node_id;
+@@ -38,33 +39,34 @@
+ 	for(k=0;k<3;k++) this->coord_system[k][k]=1.0;
+ 
+ 	/*indexing:*/
+-	DistributeNumDofs(&this->indexing,analysis_type,iomodel->Data(FlowequationVertexEquationEnum)+io_index); //number of dofs per node
++	node_type = reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index]);
++	DistributeNumDofs(&this->indexing,analysis_type,node_type); //number of dofs per node
+ 	gsize=this->indexing.gsize;
+ 
+-	if (analysis_type==DiagnosticHorizAnalysisEnum)
+-	 this->approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index]);
++	if(analysis_type==DiagnosticHorizAnalysisEnum)
++	 this->approximation=reCast<int>(node_type);
+ 	else
+ 	 this->approximation=0;
+ 
+ 	//intialize inputs, and add as many inputs per element as requested: 
+ 	this->inputs=new Inputs();
+-	if (iomodel->Data(MaskVertexonfloatingiceEnum))
++	if(iomodel->Data(MaskVertexonfloatingiceEnum))
+ 	 this->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,reCast<bool>(iomodel->Data(MaskVertexonfloatingiceEnum)[io_index])));
+-	if (iomodel->Data(MaskVertexongroundediceEnum))
++	if(iomodel->Data(MaskVertexongroundediceEnum))
+ 	  this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<bool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index])));
+-	if (analysis_type==DiagnosticHorizAnalysisEnum)
+-	 this->approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index]);
++	if(analysis_type==DiagnosticHorizAnalysisEnum)
++	 this->approximation=reCast<int>(node_type);
+ 	/*set single point constraints: */
+ 
+ 	/*spc all nodes on water*/
+-	if (!iomodel->Data(MaskVertexonwaterEnum)) _error_("iomodel->nodeonwater is NULL");
+-	if (reCast<bool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){
++	if(!iomodel->Data(MaskVertexonwaterEnum)) _error_("iomodel->nodeonwater is NULL");
++	if(reCast<bool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){
+ 		this->Deactivate();
+ 	}
+ 
+ 	/*Diagnostic Horiz*/
+ 	#ifdef _HAVE_DIAGNOSTIC_
+-	if (analysis_type==DiagnosticHorizAnalysisEnum){
++	if(analysis_type==DiagnosticHorizAnalysisEnum){
+ 
+ 		/*Coordinate system provided, convert to coord_system matrix*/
+ 		_assert_(iomodel->Data(DiagnosticReferentialEnum)); 
+@@ -74,41 +76,41 @@
+ 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum)); 
+ 			_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+-			if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==MacAyealApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
++			if(node_type==MacAyealApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 				this->Deactivate();
+ 			}
+-			if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
++			if(node_type==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 				this->Deactivate();
+ 			}
+-			if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==MacAyealPattynApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
++			if(node_type==MacAyealPattynApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
+ 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 					this->Deactivate();
+ 				}
+ 			}
+-			if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==MacAyealStokesApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
++			if(node_type==MacAyealStokesApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
+ 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 					for(k=1;k<=2;k++) this->FreezeDof(k);
+ 				}
+ 			}
+ 		}
+ 		/*spc all nodes on hutter*/
+-		if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==HutterApproximationEnum){
++		if(node_type==HutterApproximationEnum){
+ 			this->Deactivate();
+ 		}
+ 	}
+ 	#endif
+ 
+ 	/*Diagnostic Hutter*/
+-	if (analysis_type==DiagnosticHutterAnalysisEnum){
++	if(analysis_type==DiagnosticHutterAnalysisEnum){
+ 		_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+ 		/*Constrain all nodes that are not Hutter*/
+-		if (reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index])!=HutterApproximationEnum){
++		if(reCast<int>(node_type)!=HutterApproximationEnum){
+ 			this->Deactivate();
+ 		}
+ 	}
+ 
+ 	/*Prognostic/ Melting/ Slopecompute/ Balancethickness*/
+-	if (
++	if(
+ 				analysis_type==PrognosticAnalysisEnum || 
+ 				analysis_type==MeltingAnalysisEnum || 
+ 				analysis_type==BedSlopeAnalysisEnum || 
+@@ -120,7 +122,7 @@
+ 		if(iomodel->dim==3){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum));
+-			if (!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
++			if(!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
+ 				this->Deactivate();
+ 			}
+ 		}
+@@ -448,6 +450,8 @@
+ 	/*Put dof for this node into the s set (ie, this dof will be constrained 
+ 	 * to a fixed value during computations. */
+ 
++	_assert_(dof<this->indexing.gsize);
++
+ 	this->indexing.f_set[dof]=0; //n splits into f (for which we solve) and s (single point constraints)
+ 	this->indexing.s_set[dof]=1;
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15533-15534.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15533-15534.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15533-15534.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test434.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.py	(revision 15533)
++++ ../trunk-jpl/test/NightlyRun/test434.py	(revision 15534)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_tolerances=[1e-07,1e-07,1e-07,1e-07,1e-07]
+ field_values=[\
+ 	md.results.DiagnosticSolution.Vx,\
+ 	md.results.DiagnosticSolution.Vy,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15534-15535.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15534-15535.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15534-15535.diff	(revision 16134)
@@ -0,0 +1,316 @@
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 15534)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 15535)
+@@ -64,33 +64,33 @@
+ 		void  InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("Not implemented yet!");}
+ 		/*}}}*/
+ 		/*Node numerical routines {{{*/
+-		void   CreateNodalConstraints(Vector<IssmDouble>* ys);
+-		void   SetCurrentConfiguration(DataSet* nodes,Vertices* vertices);
+-		int    Sid(void); 
++		void  CreateNodalConstraints(Vector<IssmDouble>* ys);
++		void  SetCurrentConfiguration(DataSet* nodes,Vertices* vertices);
++		int   Sid(void); 
+ #ifdef _HAVE_DIAGNOSTIC_
+-		void   GetCoordinateSystem(IssmDouble* coord_system_out);
++		void  GetCoordinateSystem(IssmDouble* coord_system_out);
+ #endif
+-		bool   InAnalysis(int analysis_type);
+-		int    GetApproximation();
+-		int    GetNumberOfDofs(int approximation_enum,int setenum);
+-		int    IsClone();
+-		void   ApplyConstraint(int dof,IssmDouble value);
+-		void   RelaxConstraint(int dof);
+-		void   DofInSSet(int dof);
+-		void   DofInFSet(int dof);
+-		int    GetDof(int dofindex,int setenum);
+-		void   CreateVecSets(Vector<IssmDouble>* pv_g,Vector<IssmDouble>* pv_f,Vector<IssmDouble>* pv_s);
+-		void   GetDofList(int* poutdoflist,int approximation_enum,int setenum);
+-		void   GetLocalDofList(int* poutdoflist,int approximation_enum,int setenum);
+-		void   FreezeDof(int dof);
+-		bool   IsActive(void);
+-		void   Activate(void);
+-		void   Deactivate(void);
+-		int    IsFloating();
+-		int    IsGrounded();
+-		void   UpdateSpcs(IssmDouble* ys);
+-		void   VecMerge(Vector<IssmDouble>* ug, IssmDouble* vector_serial,int setenum);
+-		void   VecReduce(Vector<IssmDouble>* vector, IssmDouble* ug_serial,int setnum);
++		bool  InAnalysis(int analysis_type);
++		int   GetApproximation();
++		int   GetNumberOfDofs(int approximation_enum,int setenum);
++		int   IsClone();
++		void  ApplyConstraint(int dof,IssmDouble value);
++		void  RelaxConstraint(int dof);
++		void  DofInSSet(int dof);
++		void  DofInFSet(int dof);
++		int   GetDof(int dofindex,int setenum);
++		void  CreateVecSets(Vector<IssmDouble>* pv_g,Vector<IssmDouble>* pv_f,Vector<IssmDouble>* pv_s);
++		void  GetDofList(int* poutdoflist,int approximation_enum,int setenum);
++		void  GetLocalDofList(int* poutdoflist,int approximation_enum,int setenum);
++		void  FreezeDof(int dof);
++		bool  IsActive(void);
++		void  Activate(void);
++		void  Deactivate(void);
++		void  UpdateSpcs(IssmDouble* ys);
++		int   IsFloating();
++		int   IsGrounded();
++		void  VecMerge(Vector<IssmDouble>* ug, IssmDouble* vector_serial,int setenum);
++		void  VecReduce(Vector<IssmDouble>* vector, IssmDouble* ug_serial,int setnum);
+ 		void  DistributeDofs(int* pdofcount,int setenum);
+ 		void  OffsetDofs(int dofcount,int setenum);
+ 		void  ShowTrueDofs(int* truerows,int ncols,int setenum);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15534)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15535)
+@@ -7165,13 +7165,14 @@
+ /*FUNCTION Tria::MigrateGroundingLine{{{*/
+ void  Tria::MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding){
+ 
+-	int     i,migration_style;
+-	bool    floatingelement = false;
+-	bool    groundedelement = false;
+-	IssmDouble  bed_hydro,yts,gl_melting_rate;
+-	IssmDouble  rho_water,rho_ice,density;
+-	IssmDouble  melting[NUMVERTICES],phi[NUMVERTICES];;
+-	IssmDouble  h[NUMVERTICES],s[NUMVERTICES],b[NUMVERTICES],ba[NUMVERTICES];
++	int        i,migration_style;
++	bool       floatingelement = false;
++	bool       groundedelement = false;
++	IssmDouble bed_hydro,yts,gl_melting_rate;
++	IssmDouble rho_water,rho_ice,density;
++	IssmDouble melting[NUMVERTICES],phi[NUMVERTICES];;
++	IssmDouble h[NUMVERTICES],s[NUMVERTICES],b[NUMVERTICES],r[NUMVERTICES];
++	bool       grounded[NUMVERTICES],floating[NUMVERTICES];
+ 
+ 	/*Recover info at the vertices: */
+ 	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
+@@ -7180,19 +7181,21 @@
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+ 	GetInputListOnVertices(&b[0],BedEnum);
+-	GetInputListOnVertices(&ba[0],BathymetryEnum);
++	GetInputListOnVertices(&r[0],BathymetryEnum);
+ 	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum) GetInputListOnVertices(&phi[0],GLlevelsetEnum);
+-	rho_water=matpar->GetRhoWater();
+-	rho_ice=matpar->GetRhoIce();
+-	density=rho_ice/rho_water;
++	rho_water = matpar->GetRhoWater();
++	rho_ice   = matpar->GetRhoIce();
++	density   = rho_ice/rho_water;
+ 
+ 	/*go through vertices, and update inputs, considering them to be TriaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		/*Ice shelf: if bed below bathymetry, impose it at the bathymetry and update surface, elso do nothing */
+ 		if(reCast<bool>(old_floating_ice[nodes[i]->Sid()])){
+-			if(b[i]<=ba[i]){ 
+-				b[i]=ba[i];
+-				s[i]=b[i]+h[i];
++			if(b[i]<=r[i]){ 
++				b[i]        = r[i];
++				s[i]        = b[i]+h[i];
++				floating[i] = false;
++				grounded[i] = true;
+ 				nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,false));
+ 				nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,true));
+ 			}
+@@ -7201,17 +7204,21 @@
+ 		/*Change only if AgressiveMigration or if the ice sheet is in contact with the ocean*/
+ 		else{
+ 			bed_hydro=-density*h[i];
+-			if (bed_hydro>ba[i]){
++			if (bed_hydro>r[i]){
+ 				/*Unground only if the element is connected to the ice shelf*/
+ 				if(migration_style==AgressiveMigrationEnum || migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
+-					s[i]=(1-density)*h[i];
+-					b[i]=-density*h[i];
++					s[i]        = (1-density)*h[i];
++					b[i]        = -density*h[i];
++					floating[i] = true;
++					grounded[i] = false;
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+ 				else if(migration_style==SoftMigrationEnum && reCast<bool>(sheet_ungrounding[nodes[i]->Sid()])){
+-					s[i]=(1-density)*h[i];
+-					b[i]=-density*h[i];
++					s[i]        = (1-density)*h[i];
++					b[i]        = -density*h[i];
++					floating[i] = true;
++					grounded[i] = false;
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+@@ -7255,7 +7262,7 @@
+ 
+ 	/*Recalculate phi*/
+ 	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
+-		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+ba[i]/density;
++		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
+ 		this->inputs->AddInput(new TriaInput(GLlevelsetEnum,&phi[0],P1Enum));
+ 	}
+ }
+@@ -7263,8 +7270,7 @@
+ /*FUNCTION Tria::PotentialUngrounding{{{*/
+ void  Tria::PotentialUngrounding(Vector<IssmDouble>* potential_ungrounding){
+ 
+-	int     i;
+-	IssmDouble  h[NUMVERTICES],ba[NUMVERTICES];
++	IssmDouble  h[NUMVERTICES],r[NUMVERTICES];
+ 	IssmDouble  bed_hydro;
+ 	IssmDouble  rho_water,rho_ice,density;
+ 
+@@ -7273,14 +7279,14 @@
+ 	rho_ice=matpar->GetRhoIce();
+ 	density=rho_ice/rho_water;
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+-	GetInputListOnVertices(&ba[0],BathymetryEnum);
++	GetInputListOnVertices(&r[0],BathymetryEnum);
+ 
+ 	/*go through vertices, and figure out which ones are grounded and want to unground: */
+-	for(i=0;i<NUMVERTICES;i++){
++	for(int i=0;i<NUMVERTICES;i++){
+ 		/*Find if grounded vertices want to start floating*/
+ 		if (!nodes[i]->IsFloating()){
+ 			bed_hydro=-density*h[i];
+-			if (bed_hydro>ba[i]){
++			if(bed_hydro>r[i]){
+ 				/*Vertex that could potentially unground, flag it*/
+ 				potential_ungrounding->SetValue(nodes[i]->Sid(),1,INS_VAL);
+ 			}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15534)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15535)
+@@ -1554,12 +1554,12 @@
+ 	if(!IsOnBed()) return;
+ 
+ 	/*Step1: Get and Extrude original input: */
+-	if (object_type==ElementEnum){
++	if(object_type==ElementEnum){
+ 		num_inputs=1;
+ 		base_inputs=xNew<Input*>(num_inputs);
+ 		base_inputs[0]=(Input*)this->inputs->GetInput(enum_type);
+ 	}
+-	else if (object_type==MaterialsEnum){
++	else if(object_type==MaterialsEnum){
+ 		num_inputs=1;
+ 		base_inputs=xNew<Input*>(num_inputs);
+ 		base_inputs[0]=(Input*)material->inputs->GetInput(enum_type);
+@@ -9644,13 +9644,14 @@
+ /*FUNCTION Penta::MigrateGroundingLine{{{*/
+ void  Penta::MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding){
+ 
+-	int     i,migration_style;
+-	bool    floatingelement = false;
+-	bool    groundedelement = false;
+-	IssmDouble  bed_hydro,yts,gl_melting_rate;
+-	IssmDouble  rho_water,rho_ice,density;
+-	IssmDouble  melting[NUMVERTICES],phi[NUMVERTICES];
+-	IssmDouble  h[NUMVERTICES],s[NUMVERTICES],b[NUMVERTICES],ba[NUMVERTICES];
++	int        i,migration_style;
++	bool       floatingelement = false;
++	bool       groundedelement = false;
++	IssmDouble bed_hydro,yts,gl_melting_rate;
++	IssmDouble rho_water,rho_ice,density;
++	IssmDouble h[NUMVERTICES],s[NUMVERTICES],b[NUMVERTICES],r[NUMVERTICES];
++	IssmDouble melting[NUMVERTICES],phi[NUMVERTICES];
++	bool       grounded[NUMVERTICES],floating[NUMVERTICES];
+ 
+ 	if(!IsOnBed()) return;
+ 
+@@ -9661,19 +9662,21 @@
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+ 	GetInputListOnVertices(&b[0],BedEnum);
+-	GetInputListOnVertices(&ba[0],BathymetryEnum);
++	GetInputListOnVertices(&r[0],BathymetryEnum);
+ 	if(migration_style==SubelementMigrationEnum) GetInputListOnVertices(&phi[0],GLlevelsetEnum);
+-	rho_water=matpar->GetRhoWater();
+-	rho_ice=matpar->GetRhoIce();
+-	density=rho_ice/rho_water;
++	rho_water = matpar->GetRhoWater();
++	rho_ice   = matpar->GetRhoIce();
++	density   = rho_ice/rho_water;
+ 
+ 	/*go through vertices, and update inputs, considering them to be PentaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		/*Ice shelf: if bed below bathymetry, impose it at the bathymetry and update surface, elso do nothing */
+ 		if(reCast<bool,IssmDouble>(old_floating_ice[nodes[i]->Sid()])){
+-			if(b[i]<=ba[i]){ 
+-				b[i]=ba[i];
+-				s[i]=b[i]+h[i];
++			if(b[i]<=r[i]){ 
++				b[i]        = r[i];
++				s[i]        = b[i]+h[i];
++				floating[i] = false;
++				grounded[i] = true;
+ 				nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,false));
+ 				nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,true));
+ 			}
+@@ -9682,17 +9685,21 @@
+ 		/*Change only if AgressiveMigration or if the ice sheet is in contact with the ocean*/
+ 		else{
+ 			bed_hydro=-density*h[i];
+-			if (bed_hydro>ba[i]){
++			if(bed_hydro>r[i]){
+ 				/*Unground only if the element is connected to the ice shelf*/
+ 				if(migration_style==AgressiveMigrationEnum || migration_style==SubelementMigrationEnum){
+-					s[i]=(1-density)*h[i];
+-					b[i]=-density*h[i];
++					s[i]        = (1-density)*h[i];
++					b[i]        = -density*h[i];
++					floating[i] = true;
++					grounded[i] = false;
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+ 				else if(migration_style==SoftMigrationEnum && reCast<int,IssmDouble>(sheet_ungrounding[nodes[i]->Sid()])){
+-					s[i]=(1-density)*h[i];
+-					b[i]=-density*h[i];
++					s[i]        = (1-density)*h[i];
++					b[i]        = -density*h[i];
++					floating[i] = true;
++					grounded[i] = false;
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+@@ -9735,7 +9742,7 @@
+ 
+ 	/*Recalculate phi*/
+ 	if(migration_style==SubelementMigrationEnum){
+-		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+ba[i]/density;
++		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
+ 		this->inputs->AddInput(new PentaInput(GLlevelsetEnum,&phi[0],P1Enum));
+ 		this->InputExtrude(GLlevelsetEnum,ElementEnum);
+ 	}
+@@ -9751,8 +9758,7 @@
+ /*FUNCTION Penta::PotentialUngrounding{{{*/
+ void  Penta::PotentialUngrounding(Vector<IssmDouble>* potential_ungrounding){
+ 
+-	int     i;
+-	IssmDouble  h[NUMVERTICES],ba[NUMVERTICES];
++	IssmDouble  h[NUMVERTICES],r[NUMVERTICES];
+ 	IssmDouble  bed_hydro;
+ 	IssmDouble  rho_water,rho_ice,density;
+ 
+@@ -9761,14 +9767,14 @@
+ 	rho_ice=matpar->GetRhoIce();
+ 	density=rho_ice/rho_water;
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+-	GetInputListOnVertices(&ba[0],BathymetryEnum);
++	GetInputListOnVertices(&r[0],BathymetryEnum);
+ 
+ 	/*go through vertices, and figure out which ones are on the ice sheet, and want to unground: */
+-	for(i=0;i<NUMVERTICES;i++){
++	for(int i=0;i<NUMVERTICES;i++){
+ 		/*Find if grounded vertices want to start floating*/
+ 		if (!nodes[i]->IsFloating()){
+ 			bed_hydro=-density*h[i];
+-			if (bed_hydro>ba[i]){
++			if(bed_hydro>r[i]){
+ 				/*Vertex that could potentially unground, flag it*/
+ 				potential_ungrounding->SetValue(nodes[i]->Sid(),1,INS_VAL);
+ 			}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15535-15536.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15535-15536.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15535-15536.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test434.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.py	(revision 15535)
++++ ../trunk-jpl/test/NightlyRun/test434.py	(revision 15536)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-07,1e-07,1e-07,1e-07,1e-07]
++field_tolerances=[1e-07,1e-06,1e-07,1e-06,1e-07]
+ field_values=[\
+ 	md.results.DiagnosticSolution.Vx,\
+ 	md.results.DiagnosticSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test434.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.m	(revision 15535)
++++ ../trunk-jpl/test/NightlyRun/test434.m	(revision 15536)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-07,1e-07,1e-07,1e-07,1e-07};
++field_tolerances={1e-07,1e-06,1e-07,1e-06,1e-07};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15536-15537.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15536-15537.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15536-15537.diff	(revision 16134)
@@ -0,0 +1,296 @@
+Index: ../trunk-jpl/externalpackages/triangle/triangle.h
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/triangle.h	(revision 15536)
++++ ../trunk-jpl/externalpackages/triangle/triangle.h	(revision 15537)
+@@ -1,291 +0,0 @@
+-/*****************************************************************************/
+-/*                                                                           */
+-/*  (triangle.h)                                                             */
+-/*                                                                           */
+-/*  Include file for programs that call Triangle.                            */
+-/*                                                                           */
+-/*  Accompanies Triangle Version 1.6                                         */
+-/*  July 28, 2005                                                            */
+-/*                                                                           */
+-/*  Copyright 1996, 2005                                                     */
+-/*  Jonathan Richard Shewchuk                                                */
+-/*  2360 Woolsey #H                                                          */
+-/*  Berkeley, California  94705-1927                                         */
+-/*  jrs@cs.berkeley.edu                                                      */
+-/*                                                                           */
+-/*****************************************************************************/
+-
+-/*****************************************************************************/
+-/*                                                                           */
+-/*  How to call Triangle from another program                                */
+-/*                                                                           */
+-/*                                                                           */
+-/*  If you haven't read Triangle's instructions (run "triangle -h" to read   */
+-/*  them), you won't understand what follows.                                */
+-/*                                                                           */
+-/*  Triangle must be compiled into an object file (triangle.o) with the      */
+-/*  TRILIBRARY symbol defined (generally by using the -DTRILIBRARY compiler  */
+-/*  switch).  The makefile included with Triangle will do this for you if    */
+-/*  you run "make trilibrary".  The resulting object file can be called via  */
+-/*  the procedure triangulate().                                             */
+-/*                                                                           */
+-/*  If the size of the object file is important to you, you may wish to      */
+-/*  generate a reduced version of triangle.o.  The REDUCED symbol gets rid   */
+-/*  of all features that are primarily of research interest.  Specifically,  */
+-/*  the -DREDUCED switch eliminates Triangle's -i, -F, -s, and -C switches.  */
+-/*  The CDT_ONLY symbol gets rid of all meshing algorithms above and beyond  */
+-/*  constrained Delaunay triangulation.  Specifically, the -DCDT_ONLY switch */
+-/*  eliminates Triangle's -r, -q, -a, -u, -D, -Y, -S, and -s switches.       */
+-/*                                                                           */
+-/*  IMPORTANT:  These definitions (TRILIBRARY, REDUCED, CDT_ONLY) must be    */
+-/*  made in the makefile or in triangle.c itself.  Putting these definitions */
+-/*  in this file (triangle.h) will not create the desired effect.            */
+-/*                                                                           */
+-/*                                                                           */
+-/*  The calling convention for triangulate() follows.                        */
+-/*                                                                           */
+-/*      void triangulate(triswitches, in, out, vorout)                       */
+-/*      char *triswitches;                                                   */
+-/*      struct triangulateio *in;                                            */
+-/*      struct triangulateio *out;                                           */
+-/*      struct triangulateio *vorout;                                        */
+-/*                                                                           */
+-/*  `triswitches' is a string containing the command line switches you wish  */
+-/*  to invoke.  No initial dash is required.  Some suggestions:              */
+-/*                                                                           */
+-/*  - You'll probably find it convenient to use the `z' switch so that       */
+-/*    points (and other items) are numbered from zero.  This simplifies      */
+-/*    indexing, because the first item of any type always starts at index    */
+-/*    [0] of the corresponding array, whether that item's number is zero or  */
+-/*    one.                                                                   */
+-/*  - You'll probably want to use the `Q' (quiet) switch in your final code, */
+-/*    but you can take advantage of Triangle's printed output (including the */
+-/*    `V' switch) while debugging.                                           */
+-/*  - If you are not using the `q', `a', `u', `D', `j', or `s' switches,     */
+-/*    then the output points will be identical to the input points, except   */
+-/*    possibly for the boundary markers.  If you don't need the boundary     */
+-/*    markers, you should use the `N' (no nodes output) switch to save       */
+-/*    memory.  (If you do need boundary markers, but need to save memory, a  */
+-/*    good nasty trick is to set out->pointlist equal to in->pointlist       */
+-/*    before calling triangulate(), so that Triangle overwrites the input    */
+-/*    points with identical copies.)                                         */
+-/*  - The `I' (no iteration numbers) and `g' (.off file output) switches     */
+-/*    have no effect when Triangle is compiled with TRILIBRARY defined.      */
+-/*                                                                           */
+-/*  `in', `out', and `vorout' are descriptions of the input, the output,     */
+-/*  and the Voronoi output.  If the `v' (Voronoi output) switch is not used, */
+-/*  `vorout' may be NULL.  `in' and `out' may never be NULL.                 */
+-/*                                                                           */
+-/*  Certain fields of the input and output structures must be initialized,   */
+-/*  as described below.                                                      */
+-/*                                                                           */
+-/*****************************************************************************/
+-
+-/*****************************************************************************/
+-/*                                                                           */
+-/*  The `triangulateio' structure.                                           */
+-/*                                                                           */
+-/*  Used to pass data into and out of the triangulate() procedure.           */
+-/*                                                                           */
+-/*                                                                           */
+-/*  Arrays are used to store points, triangles, markers, and so forth.  In   */
+-/*  all cases, the first item in any array is stored starting at index [0].  */
+-/*  However, that item is item number `1' unless the `z' switch is used, in  */
+-/*  which case it is item number `0'.  Hence, you may find it easier to      */
+-/*  index points (and triangles in the neighbor list) if you use the `z'     */
+-/*  switch.  Unless, of course, you're calling Triangle from a Fortran       */
+-/*  program.                                                                 */
+-/*                                                                           */
+-/*  Description of fields (except the `numberof' fields, which are obvious): */
+-/*                                                                           */
+-/*  `pointlist':  An array of point coordinates.  The first point's x        */
+-/*    coordinate is at index [0] and its y coordinate at index [1], followed */
+-/*    by the coordinates of the remaining points.  Each point occupies two   */
+-/*    REALs.                                                                 */
+-/*  `pointattributelist':  An array of point attributes.  Each point's       */
+-/*    attributes occupy `numberofpointattributes' REALs.                     */
+-/*  `pointmarkerlist':  An array of point markers; one int per point.        */
+-/*                                                                           */
+-/*  `trianglelist':  An array of triangle corners.  The first triangle's     */
+-/*    first corner is at index [0], followed by its other two corners in     */
+-/*    counterclockwise order, followed by any other nodes if the triangle    */
+-/*    represents a nonlinear element.  Each triangle occupies                */
+-/*    `numberofcorners' ints.                                                */
+-/*  `triangleattributelist':  An array of triangle attributes.  Each         */
+-/*    triangle's attributes occupy `numberoftriangleattributes' REALs.       */
+-/*  `trianglearealist':  An array of triangle area constraints; one REAL per */
+-/*    triangle.  Input only.                                                 */
+-/*  `neighborlist':  An array of triangle neighbors; three ints per          */
+-/*    triangle.  Output only.                                                */
+-/*                                                                           */
+-/*  `segmentlist':  An array of segment endpoints.  The first segment's      */
+-/*    endpoints are at indices [0] and [1], followed by the remaining        */
+-/*    segments.  Two ints per segment.                                       */
+-/*  `segmentmarkerlist':  An array of segment markers; one int per segment.  */
+-/*                                                                           */
+-/*  `holelist':  An array of holes.  The first hole's x and y coordinates    */
+-/*    are at indices [0] and [1], followed by the remaining holes.  Two      */
+-/*    REALs per hole.  Input only, although the pointer is copied to the     */
+-/*    output structure for your convenience.                                 */
+-/*                                                                           */
+-/*  `regionlist':  An array of regional attributes and area constraints.     */
+-/*    The first constraint's x and y coordinates are at indices [0] and [1], */
+-/*    followed by the regional attribute at index [2], followed by the       */
+-/*    maximum area at index [3], followed by the remaining area constraints. */
+-/*    Four REALs per area constraint.  Note that each regional attribute is  */
+-/*    used only if you select the `A' switch, and each area constraint is    */
+-/*    used only if you select the `a' switch (with no number following), but */
+-/*    omitting one of these switches does not change the memory layout.      */
+-/*    Input only, although the pointer is copied to the output structure for */
+-/*    your convenience.                                                      */
+-/*                                                                           */
+-/*  `edgelist':  An array of edge endpoints.  The first edge's endpoints are */
+-/*    at indices [0] and [1], followed by the remaining edges.  Two ints per */
+-/*    edge.  Output only.                                                    */
+-/*  `edgemarkerlist':  An array of edge markers; one int per edge.  Output   */
+-/*    only.                                                                  */
+-/*  `normlist':  An array of normal vectors, used for infinite rays in       */
+-/*    Voronoi diagrams.  The first normal vector's x and y magnitudes are    */
+-/*    at indices [0] and [1], followed by the remaining vectors.  For each   */
+-/*    finite edge in a Voronoi diagram, the normal vector written is the     */
+-/*    zero vector.  Two REALs per edge.  Output only.                        */
+-/*                                                                           */
+-/*                                                                           */
+-/*  Any input fields that Triangle will examine must be initialized.         */
+-/*  Furthermore, for each output array that Triangle will write to, you      */
+-/*  must either provide space by setting the appropriate pointer to point    */
+-/*  to the space you want the data written to, or you must initialize the    */
+-/*  pointer to NULL, which tells Triangle to allocate space for the results. */
+-/*  The latter option is preferable, because Triangle always knows exactly   */
+-/*  how much space to allocate.  The former option is provided mainly for    */
+-/*  people who need to call Triangle from Fortran code, though it also makes */
+-/*  possible some nasty space-saving tricks, like writing the output to the  */
+-/*  same arrays as the input.                                                */
+-/*                                                                           */
+-/*  Triangle will not free() any input or output arrays, including those it  */
+-/*  allocates itself; that's up to you.  You should free arrays allocated by */
+-/*  Triangle by calling the trifree() procedure defined below.  (By default, */
+-/*  trifree() just calls the standard free() library procedure, but          */
+-/*  applications that call triangulate() may replace trimalloc() and         */
+-/*  trifree() in triangle.c to use specialized memory allocators.)           */
+-/*                                                                           */
+-/*  Here's a guide to help you decide which fields you must initialize       */
+-/*  before you call triangulate().                                           */
+-/*                                                                           */
+-/*  `in':                                                                    */
+-/*                                                                           */
+-/*    - `pointlist' must always point to a list of points; `numberofpoints'  */
+-/*      and `numberofpointattributes' must be properly set.                  */
+-/*      `pointmarkerlist' must either be set to NULL (in which case all      */
+-/*      markers default to zero), or must point to a list of markers.  If    */
+-/*      `numberofpointattributes' is not zero, `pointattributelist' must     */
+-/*      point to a list of point attributes.                                 */
+-/*    - If the `r' switch is used, `trianglelist' must point to a list of    */
+-/*      triangles, and `numberoftriangles', `numberofcorners', and           */
+-/*      `numberoftriangleattributes' must be properly set.  If               */
+-/*      `numberoftriangleattributes' is not zero, `triangleattributelist'    */
+-/*      must point to a list of triangle attributes.  If the `a' switch is   */
+-/*      used (with no number following), `trianglearealist' must point to a  */
+-/*      list of triangle area constraints.  `neighborlist' may be ignored.   */
+-/*    - If the `p' switch is used, `segmentlist' must point to a list of     */
+-/*      segments, `numberofsegments' must be properly set, and               */
+-/*      `segmentmarkerlist' must either be set to NULL (in which case all    */
+-/*      markers default to zero), or must point to a list of markers.        */
+-/*    - If the `p' switch is used without the `r' switch, then               */
+-/*      `numberofholes' and `numberofregions' must be properly set.  If      */
+-/*      `numberofholes' is not zero, `holelist' must point to a list of      */
+-/*      holes.  If `numberofregions' is not zero, `regionlist' must point to */
+-/*      a list of region constraints.                                        */
+-/*    - If the `p' switch is used, `holelist', `numberofholes',              */
+-/*      `regionlist', and `numberofregions' is copied to `out'.  (You can    */
+-/*      nonetheless get away with not initializing them if the `r' switch is */
+-/*      used.)                                                               */
+-/*    - `edgelist', `edgemarkerlist', `normlist', and `numberofedges' may be */
+-/*      ignored.                                                             */
+-/*                                                                           */
+-/*  `out':                                                                   */
+-/*                                                                           */
+-/*    - `pointlist' must be initialized (NULL or pointing to memory) unless  */
+-/*      the `N' switch is used.  `pointmarkerlist' must be initialized       */
+-/*      unless the `N' or `B' switch is used.  If `N' is not used and        */
+-/*      `in->numberofpointattributes' is not zero, `pointattributelist' must */
+-/*      be initialized.                                                      */
+-/*    - `trianglelist' must be initialized unless the `E' switch is used.    */
+-/*      `neighborlist' must be initialized if the `n' switch is used.  If    */
+-/*      the `E' switch is not used and (`in->numberofelementattributes' is   */
+-/*      not zero or the `A' switch is used), `elementattributelist' must be  */
+-/*      initialized.  `trianglearealist' may be ignored.                     */
+-/*    - `segmentlist' must be initialized if the `p' or `c' switch is used,  */
+-/*      and the `P' switch is not used.  `segmentmarkerlist' must also be    */
+-/*      initialized under these circumstances unless the `B' switch is used. */
+-/*    - `edgelist' must be initialized if the `e' switch is used.            */
+-/*      `edgemarkerlist' must be initialized if the `e' switch is used and   */
+-/*      the `B' switch is not.                                               */
+-/*    - `holelist', `regionlist', `normlist', and all scalars may be ignored.*/
+-/*                                                                           */
+-/*  `vorout' (only needed if `v' switch is used):                            */
+-/*                                                                           */
+-/*    - `pointlist' must be initialized.  If `in->numberofpointattributes'   */
+-/*      is not zero, `pointattributelist' must be initialized.               */
+-/*      `pointmarkerlist' may be ignored.                                    */
+-/*    - `edgelist' and `normlist' must both be initialized.                  */
+-/*      `edgemarkerlist' may be ignored.                                     */
+-/*    - Everything else may be ignored.                                      */
+-/*                                                                           */
+-/*  After a call to triangulate(), the valid fields of `out' and `vorout'    */
+-/*  will depend, in an obvious way, on the choice of switches used.  Note    */
+-/*  that when the `p' switch is used, the pointers `holelist' and            */
+-/*  `regionlist' are copied from `in' to `out', but no new space is          */
+-/*  allocated; be careful that you don't free() the same array twice.  On    */
+-/*  the other hand, Triangle will never copy the `pointlist' pointer (or any */
+-/*  others); new space is allocated for `out->pointlist', or if the `N'      */
+-/*  switch is used, `out->pointlist' remains uninitialized.                  */
+-/*                                                                           */
+-/*  All of the meaningful `numberof' fields will be properly set; for        */
+-/*  instance, `numberofedges' will represent the number of edges in the      */
+-/*  triangulation whether or not the edges were written.  If segments are    */
+-/*  not used, `numberofsegments' will indicate the number of boundary edges. */
+-/*                                                                           */
+-/*****************************************************************************/
+-typedef double REAL;
+-typedef void VOID;
+-
+-extern "C" struct triangulateio {
+-  REAL *pointlist;                                               /* In / out */
+-  REAL *pointattributelist;                                      /* In / out */
+-  int *pointmarkerlist;                                          /* In / out */
+-  int numberofpoints;                                            /* In / out */
+-  int numberofpointattributes;                                   /* In / out */
+-
+-  int *trianglelist;                                             /* In / out */
+-  REAL *triangleattributelist;                                   /* In / out */
+-  REAL *trianglearealist;                                         /* In only */
+-  int *neighborlist;                                             /* Out only */
+-  int numberoftriangles;                                         /* In / out */
+-  int numberofcorners;                                           /* In / out */
+-  int numberoftriangleattributes;                                /* In / out */
+-
+-  int *segmentlist;                                              /* In / out */
+-  int *segmentmarkerlist;                                        /* In / out */
+-  int numberofsegments;                                          /* In / out */
+-
+-  REAL *holelist;                        /* In / pointer to array copied out */
+-  int numberofholes;                                      /* In / copied out */
+-
+-  REAL *regionlist;                      /* In / pointer to array copied out */
+-  int numberofregions;                                    /* In / copied out */
+-
+-  int *edgelist;                                                 /* Out only */
+-  int *edgemarkerlist;            /* Not used with Voronoi diagram; out only */
+-  REAL *normlist;                /* Used only with Voronoi diagram; out only */
+-  int numberofedges;                                             /* Out only */
+-};
+-
+-#ifdef ANSI_DECLARATORS
+-extern "C" void triangulate(char *, struct triangulateio *, struct triangulateio *,
+-                 struct triangulateio *);
+-extern "C" void trifree(VOID *memptr);
+-#else /* not ANSI_DECLARATORS */
+-void triangulate();
+-void trifree();
+-#endif /* not ANSI_DECLARATORS */
Index: /issm/oecreview/Archive/15392-16133/ISSM-15537-15538.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15537-15538.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15537-15538.diff	(revision 16134)
@@ -0,0 +1,654 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15537)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15538)
+@@ -65,38 +65,18 @@
+ 
+ 		/*Do not create ice front if Hutter or Stokes elements*/
+ 		if (reCast<int,IssmDouble>(*(elements_type+element))==HutterApproximationEnum) continue;
++		if (reCast<int,IssmDouble>(*(elements_type+element))==MacAyealApproximationEnum) continue;
++		if (reCast<int,IssmDouble>(*(elements_type+element))==L1L2ApproximationEnum) continue;
++		if (reCast<int,IssmDouble>(*(elements_type+element))==PattynApproximationEnum) continue;
++		if (reCast<int,IssmDouble>(*(elements_type+element))==StokesApproximationEnum) continue;
+ 
+ 		/*Create and  add load: */
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && iomodel->dim==2){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal2dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealApproximationEnum) && iomodel->dim==3){
++		if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealPattynApproximationEnum)){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+-		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(L1L2ApproximationEnum)){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(PattynApproximationEnum)){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+ 		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(L1L2ApproximationEnum)){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,L1L2IceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(StokesApproximationEnum)){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,StokesIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealPattynApproximationEnum)){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+ 		else if (reCast<int,IssmDouble>(*(elements_type+element))==(PattynStokesApproximationEnum)){
+ 			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
+ 			count++;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15537)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15538)
+@@ -3164,7 +3164,6 @@
+ 		}
+ 	}
+ 
+-	return NULL;
+ 	/*If no front, return NULL*/
+ 	if(!isfront) return NULL;
+ 
+@@ -3199,18 +3198,16 @@
+ 		gauss->GaussPoint(ig);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 		bed_input->GetInputValue(&bed,gauss);
++		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_front[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
+ 
+ 		surface_under_water=min(0.,thickness+bed); // 0 if the top of the glacier is above water level
+ 		base_under_water=min(0.,bed);              // 0 if the bottom of the glacier is above water level
+ 		water_pressure=1.0/2.0*gravity*rho_water*(pow(surface_under_water,2) - pow(base_under_water,2));
+ 		ice_pressure=1.0/2.0*gravity*rho_ice*pow(thickness,2);
+ 		air_pressure=0;
+-
+ 		pressure = ice_pressure + water_pressure + air_pressure;
+ 
+-		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_front[0][0],gauss);
+-		GetNodalFunctions(basis,gauss);
+-
+ 		for (int i=0;i<numnodes;i++){
+ 			pe->values[2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
+ 			pe->values[2*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15537)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15538)
+@@ -783,6 +783,43 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetAreaCoordinates{{{*/
++void Penta::GetAreaCoordinates(IssmDouble* area_coordinates,IssmDouble xyz_zero[4][3],IssmDouble xyz_list[6][3],int numpoints){
++	/*Computeportion of the element that is grounded*/ 
++
++	int         i,j,k;
++	IssmDouble  area_init,area_portion;
++	IssmDouble  xyz_bis[3][3];
++
++	area_init=fabs(xyz_list[1][0]*xyz_list[2][1] - xyz_list[1][1]*xyz_list[2][0] + xyz_list[0][0]*xyz_list[1][1] - xyz_list[0][1]*xyz_list[1][0] + xyz_list[2][0]*xyz_list[0][1] - xyz_list[2][1]*xyz_list[0][0])/2.;
++
++
++	/*Initialize xyz_list with original xyz_list of triangle coordinates*/
++	for(j=0;j<3;j++){ 
++		for(k=0;k<3;k++){
++			xyz_bis[j][k]=xyz_list[j][k];
++		}
++	}
++	for(i=0;i<numpoints;i++){
++		for(j=0;j<3;j++){ 
++			for(k=0;k<3;k++){
++				/*Change appropriate line*/
++				xyz_bis[j][k]=xyz_zero[i][k];
++			}
++
++			/*Compute area fraction*/
++			area_portion=fabs(xyz_bis[1][0]*xyz_bis[2][1] - xyz_bis[1][1]*xyz_bis[2][0] + xyz_bis[0][0]*xyz_bis[1][1] - xyz_bis[0][1]*xyz_bis[1][0] + xyz_bis[2][0]*xyz_bis[0][1] - xyz_bis[2][1]*xyz_bis[0][0])/2.;
++			*(area_coordinates+3*i+j)=area_portion/area_init;
++
++			/*Reinitialize xyz_list*/
++			for(k=0;k<3;k++){
++				/*Reinitialize xyz_list with original coordinates*/
++				xyz_bis[j][k]=xyz_list[j][k];
++			}
++		}
++	}
++}
++/*}}}*/
+ /*FUNCTION Penta::GetBasalElement{{{*/
+ Penta* Penta::GetBasalElement(void){
+ 
+@@ -1117,6 +1154,27 @@
+ 	*phi=4*pow(epsilon_eff,2.0)*viscosity;
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetQuadNormal {{{*/
++void Penta:: GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]){
++
++	/*Build unit outward pointing vector*/
++	IssmDouble AB[3];
++	IssmDouble AC[3];
++	IssmDouble norm;
++
++	AB[0]=xyz_list[1][0] - xyz_list[0][0];
++	AB[1]=xyz_list[1][1] - xyz_list[0][1];
++	AB[2]=xyz_list[1][2] - xyz_list[0][2];
++	AC[0]=xyz_list[2][0] - xyz_list[0][0];
++	AC[1]=xyz_list[2][1] - xyz_list[0][1];
++	AC[2]=xyz_list[2][2] - xyz_list[0][2];
++
++	cross(normal,AB,AC);
++	norm=sqrt(pow(normal[0],2.0)+pow(normal[1],2.0)+pow(normal[2],2.0));
++
++	for(int i=0;i<3;i++) normal[i]=normal[i]/norm;
++}
++/*}}}*/
+ /*FUNCTION Penta::GetSolutionFromInputs{{{*/
+ void  Penta::GetSolutionFromInputs(Vector<IssmDouble>* solution){
+ 
+@@ -1312,6 +1370,158 @@
+ 	return z;
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetZeroLevelsetCoordinates{{{*/
++void Penta::GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[6][3],int levelsetenum){
++	/*Computeportion of the element that is grounded*/ 
++
++	int         normal_orientation;
++	IssmDouble  s1,s2;
++	IssmDouble  levelset[3];
++
++	/*Recover parameters and values*/
++	GetInputListOnVertices(&levelset[0],levelsetenum);
++
++	if(levelset[0]*levelset[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
++		/*Portion of the segments*/
++		s1=levelset[2]/(levelset[2]-levelset[1]);
++		s2=levelset[2]/(levelset[2]-levelset[0]);
++
++		if(levelset[2]>0) normal_orientation=1;
++		/*New point 1*/
++		xyz_zero[3*normal_orientation+0]=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
++		xyz_zero[3*normal_orientation+1]=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
++		xyz_zero[3*normal_orientation+2]=xyz_list[2][2]+s1*(xyz_list[1][2]-xyz_list[2][2]);
++
++		/*New point 0*/
++		xyz_zero[3*(1-normal_orientation)+0]=xyz_list[2][0]+s2*(xyz_list[0][0]-xyz_list[2][0]);
++		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[2][1]+s2*(xyz_list[0][1]-xyz_list[2][1]);
++		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[2][2]+s2*(xyz_list[0][2]-xyz_list[2][2]);
++
++		/*New point 3*/
++		xyz_zero[3*(2+1-normal_orientation)+0]=xyz_list[5][0]+s1*(xyz_list[4][0]-xyz_list[5][0]);
++		xyz_zero[3*(2+1-normal_orientation)+1]=xyz_list[5][1]+s1*(xyz_list[4][1]-xyz_list[5][1]);
++		xyz_zero[3*(2+1-normal_orientation)+2]=xyz_list[5][2]+s1*(xyz_list[4][2]-xyz_list[5][2]);
++
++		/*New point 4*/
++		xyz_zero[3*(2+normal_orientation)+0]=xyz_list[5][0]+s2*(xyz_list[3][0]-xyz_list[5][0]);
++		xyz_zero[3*(2+normal_orientation)+1]=xyz_list[5][1]+s2*(xyz_list[3][1]-xyz_list[5][1]);
++		xyz_zero[3*(2+normal_orientation)+2]=xyz_list[5][2]+s2*(xyz_list[3][2]-xyz_list[5][2]);
++	}
++	else if(levelset[1]*levelset[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
++		/*Portion of the segments*/
++		s1=levelset[0]/(levelset[0]-levelset[2]);
++		s2=levelset[0]/(levelset[0]-levelset[1]);
++
++		if(levelset[0]>0) normal_orientation=1;
++		/*New point 1*/
++		xyz_zero[3*normal_orientation+0]=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
++		xyz_zero[3*normal_orientation+1]=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
++		xyz_zero[3*normal_orientation+2]=xyz_list[0][2]+s1*(xyz_list[2][2]-xyz_list[0][2]);
++
++		/*New point 2*/
++		xyz_zero[3*(1-normal_orientation)+0]=xyz_list[0][0]+s2*(xyz_list[1][0]-xyz_list[0][0]);
++		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[0][1]+s2*(xyz_list[1][1]-xyz_list[0][1]);
++		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[0][2]+s2*(xyz_list[1][2]-xyz_list[0][2]);
++
++		/*New point 3*/
++		xyz_zero[3*(2+1-normal_orientation)+0]=xyz_list[3][0]+s1*(xyz_list[5][0]-xyz_list[3][0]);
++		xyz_zero[3*(2+1-normal_orientation)+1]=xyz_list[3][1]+s1*(xyz_list[5][1]-xyz_list[3][1]);
++		xyz_zero[3*(2+1-normal_orientation)+2]=xyz_list[3][2]+s1*(xyz_list[5][2]-xyz_list[3][2]);
++
++		/*New point 4*/
++		xyz_zero[3*(2+normal_orientation)+0]=xyz_list[3][0]+s2*(xyz_list[4][0]-xyz_list[3][0]);
++		xyz_zero[3*(2+normal_orientation)+1]=xyz_list[3][1]+s2*(xyz_list[4][1]-xyz_list[3][1]);
++		xyz_zero[3*(2+normal_orientation)+2]=xyz_list[3][2]+s2*(xyz_list[4][2]-xyz_list[3][2]);
++	}
++	else if(levelset[0]*levelset[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
++		/*Portion of the segments*/
++		s1=levelset[1]/(levelset[1]-levelset[0]);
++		s2=levelset[1]/(levelset[1]-levelset[2]);
++
++		if(levelset[1]>0) normal_orientation=1;
++		/*New point 0*/
++		xyz_zero[3*normal_orientation+0]=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
++		xyz_zero[3*normal_orientation+1]=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
++		xyz_zero[3*normal_orientation+2]=xyz_list[1][2]+s1*(xyz_list[0][2]-xyz_list[1][2]);
++
++		/*New point 2*/
++		xyz_zero[3*(1-normal_orientation)+0]=xyz_list[1][0]+s2*(xyz_list[2][0]-xyz_list[1][0]);
++		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[1][1]+s2*(xyz_list[2][1]-xyz_list[1][1]);
++		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[1][2]+s2*(xyz_list[2][2]-xyz_list[1][2]);
++
++		/*New point 3*/
++		xyz_zero[3*(2+1-normal_orientation)+0]=xyz_list[4][0]+s1*(xyz_list[3][0]-xyz_list[4][0]);
++		xyz_zero[3*(2+1-normal_orientation)+1]=xyz_list[4][1]+s1*(xyz_list[3][1]-xyz_list[4][1]);
++		xyz_zero[3*(2+1-normal_orientation)+2]=xyz_list[4][2]+s1*(xyz_list[3][2]-xyz_list[4][2]);
++
++		/*New point 4*/
++		xyz_zero[3*(2+normal_orientation)+0]=xyz_list[4][0]+s2*(xyz_list[5][0]-xyz_list[4][0]);
++		xyz_zero[3*(2+normal_orientation)+1]=xyz_list[4][1]+s2*(xyz_list[5][1]-xyz_list[4][1]);
++		xyz_zero[3*(2+normal_orientation)+2]=xyz_list[4][2]+s2*(xyz_list[5][2]-xyz_list[4][2]);
++	}
++	else if(levelset[0]==0 && levelset[1]==0){ //front is on point 0 and 1
++		xyz_zero[3*0+0]=xyz_list[0][0];
++		xyz_zero[3*0+1]=xyz_list[0][1];
++		xyz_zero[3*0+2]=xyz_list[0][2];
++
++		/*New point 2*/
++		xyz_zero[3*1+0]=xyz_list[1][0];
++		xyz_zero[3*1+1]=xyz_list[1][1];
++		xyz_zero[3*1+2]=xyz_list[1][2];
++
++		/*New point 3*/
++		xyz_zero[3*2+0]=xyz_list[4][0];
++		xyz_zero[3*2+1]=xyz_list[4][1];
++		xyz_zero[3*2+2]=xyz_list[4][2];
++
++		/*New point 4*/
++		xyz_zero[3*3+0]=xyz_list[3][0];
++		xyz_zero[3*3+1]=xyz_list[3][1];
++		xyz_zero[3*3+2]=xyz_list[3][2];
++	}
++	else if(levelset[0]==0 && levelset[2]==0){ //front is on point 0 and 1
++		xyz_zero[3*0+0]=xyz_list[2][0];
++		xyz_zero[3*0+1]=xyz_list[2][1];
++		xyz_zero[3*0+2]=xyz_list[2][2];
++
++		/*New point 2*/
++		xyz_zero[3*1+0]=xyz_list[0][0];
++		xyz_zero[3*1+1]=xyz_list[0][1];
++		xyz_zero[3*1+2]=xyz_list[0][2];
++
++		/*New point 3*/
++		xyz_zero[3*2+0]=xyz_list[3][0];
++		xyz_zero[3*2+1]=xyz_list[3][1];
++		xyz_zero[3*2+2]=xyz_list[3][2];
++
++		/*New point 4*/
++		xyz_zero[3*3+0]=xyz_list[5][0];
++		xyz_zero[3*3+1]=xyz_list[5][1];
++		xyz_zero[3*3+2]=xyz_list[5][2];
++	}
++	else if(levelset[1]==0 && levelset[2]==0){ //front is on point 0 and 1
++		xyz_zero[3*0+0]=xyz_list[1][0];
++		xyz_zero[3*0+1]=xyz_list[1][1];
++		xyz_zero[3*0+2]=xyz_list[1][2];
++
++		/*New point 2*/
++		xyz_zero[3*1+0]=xyz_list[2][0];
++		xyz_zero[3*1+1]=xyz_list[2][1];
++		xyz_zero[3*1+2]=xyz_list[2][2];
++
++		/*New point 3*/
++		xyz_zero[3*2+0]=xyz_list[5][0];
++		xyz_zero[3*2+1]=xyz_list[5][1];
++		xyz_zero[3*2+2]=xyz_list[5][2];
++
++		/*New point 4*/
++		xyz_zero[3*3+0]=xyz_list[4][0];
++		xyz_zero[3*3+1]=xyz_list[4][1];
++		xyz_zero[3*3+2]=xyz_list[4][2];
++	}
++	else _error_("Case not covered");
++}
++/*}}}*/
+ /*FUNCTION Penta::Sid {{{*/
+ int    Penta::Sid(){
+ 
+@@ -7695,6 +7905,20 @@
+ /*FUNCTION Penta::CreatePVectorDiagnosticPattyn{{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticPattyn(void){
+ 
++	/*compute all load vectors for this element*/
++	ElementVector* pe1=CreatePVectorDiagnosticPattynDrivingStress();
++	ElementVector* pe2=CreatePVectorDiagnosticPattynFront();
++	ElementVector* pe =new ElementVector(pe1,pe2);
++
++	/*clean-up and return*/
++	delete pe1;
++	delete pe2;
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Penta::CreatePVectorDiagnosticPattynDrivingStress{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticPattynDrivingStress(void){
++
+ 	/*Constants*/
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -7740,12 +7964,91 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Penta::CreatePVectorDiagnosticPattynFront{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticPattynFront(void){
++
++	/*Intermediaries */
++	IssmDouble  ls[6];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	bool        isfront;
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
++
++	/*If the level set is awlays <=0, there is no ice front here*/
++	isfront = false;
++	if(ls[0]>0. || ls[1]>0. || ls[2]>0.){
++		if(ls[0]*ls[1]<0. || ls[0]*ls[2]<0. || (ls[0]*ls[1]+ls[0]*ls[2]+ls[1]*ls[2]==0.)){
++			isfront = true;
++		}
++	}
++
++	/*If no front, return NULL*/
++	if(!isfront) return NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int         numnodes = this->NumberofNodes();
++	int         numdof   = numnodes*NDOF2;
++	IssmDouble  rho_ice,rho_water,gravity;
++	IssmDouble  Jdet,surface,z_g,water_pressure,ice_pressure,air_pressure;
++	IssmDouble  surface_under_water,base_under_water,pressure;
++	GaussPenta*  gauss;
++	IssmDouble* basis = xNew<IssmDouble>(numnodes);
++	IssmDouble  xyz_list_front[4][3];
++	IssmDouble  area_coordinates[4][3];
++	IssmDouble  normal[3];
++
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
++	rho_water=matpar->GetRhoWater();
++	rho_ice  =matpar->GetRhoIce();
++	gravity  =matpar->GetG();
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
++	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
++	GetQuadNormal(&normal[0],xyz_list_front);
++
++	/*Start looping on Gaussian points*/
++	IssmDouble zmax=xyz_list[0][2]; for(int i=1;i<6;i++) if(xyz_list[i][2]>zmax) zmax=xyz_list[i][2];
++	IssmDouble zmin=xyz_list[0][2]; for(int i=1;i<6;i++) if(xyz_list[i][2]<zmin) zmin=xyz_list[i][2];
++	if(zmax>0 && zmin<0) gauss=new GaussPenta(area_coordinates,3,10); //refined in vertical because of the sea level discontinuity
++	else                 gauss=new GaussPenta(area_coordinates,3,3);
++
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++		surface_input->GetInputValue(&surface,gauss);
++		z_g=GetZcoord(gauss);
++		GetNodalFunctions(basis,gauss);
++		GetQuadJacobianDeterminant(&Jdet,xyz_list_front,gauss);
++
++		water_pressure=rho_water*gravity*min(0.,z_g);//0 if the gaussian point is above water level
++		ice_pressure=rho_ice*gravity*(surface-z_g);
++		air_pressure=0;
++		pressure = ice_pressure + water_pressure + air_pressure;
++
++		for (int i=0;i<numnodes;i++){
++			pe->values[2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
++			pe->values[2*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];
++		}
++	}
++
++	/*Transform coordinate system*/
++	TransformLoadVectorCoord(pe,nodes,numnodes,XYEnum);
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
+ /*FUNCTION Penta::CreatePVectorDiagnosticStokes {{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticStokes(void){
+ 
+ 	int fe_stokes;
+ 	ElementVector* pe1;
+ 	ElementVector* pe2;
++	ElementVector* pe3;
+ 	ElementVector* pe;
+ 	parameters->FindParam(&fe_stokes,FlowequationFeStokesEnum);
+ 
+@@ -7754,13 +8057,15 @@
+ 			/*compute all stiffness matrices for this element*/
+ 			pe1=CreatePVectorDiagnosticStokesViscous();
+ 			pe2=CreatePVectorDiagnosticStokesShelf();
+-			pe =new ElementVector(pe1,pe2);
++			pe3=CreatePVectorDiagnosticStokesFront();
++			pe =new ElementVector(pe1,pe2,pe3);
+ 			break;
+ 		case 1:
+ 			/*compute all stiffness matrices for this element*/
+ 			pe1=CreatePVectorDiagnosticStokesGLSViscous();
+ 			pe2=CreatePVectorDiagnosticStokesShelf();
+-			pe =new ElementVector(pe1,pe2);
++			pe3=CreatePVectorDiagnosticStokesFront();
++			pe =new ElementVector(pe1,pe2,pe3);
+ 			break;
+ 		default:
+ 			_error_("Finite element" << fe_stokes << " not supported yet");
+@@ -7770,6 +8075,7 @@
+ 	/*clean-up and return*/
+ 	delete pe1;
+ 	delete pe2;
++	delete pe3;
+ 	return pe;
+ }
+ /*}}}*/
+@@ -7863,6 +8169,83 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Penta::CreatePVectorDiagnosticStokesFront{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticStokesFront(void){
++
++	/*Intermediaries */
++	IssmDouble  ls[6];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	bool        isfront;
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
++
++	/*If the level set is awlays <=0, there is no ice front here*/
++	isfront = false;
++	if(ls[0]>0. || ls[1]>0. || ls[2]>0.){
++		if(ls[0]*ls[1]<0. || ls[0]*ls[2]<0. || (ls[0]*ls[1]+ls[0]*ls[2]+ls[1]*ls[2]==0.)){
++			isfront = true;
++		}
++	}
++
++	/*If no front, return NULL*/
++	if(!isfront) return NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int         numnodes = this->NumberofNodes();
++	int         numdof   = numnodes*NDOF4;
++	IssmDouble  rho_ice,rho_water,gravity;
++	IssmDouble  Jdet,z_g,water_pressure,air_pressure;
++	IssmDouble  surface_under_water,base_under_water,pressure;
++	GaussPenta* gauss;
++	IssmDouble* basis = xNew<IssmDouble>(numnodes);
++	IssmDouble  xyz_list_front[4][3];
++	IssmDouble  area_coordinates[4][3];
++	IssmDouble  normal[3];
++
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	rho_water=matpar->GetRhoWater();
++	rho_ice  =matpar->GetRhoIce();
++	gravity  =matpar->GetG();
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
++	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
++	GetQuadNormal(&normal[0],xyz_list_front);
++
++	/*Start looping on Gaussian points*/
++	IssmDouble zmax=xyz_list[0][2]; for(int i=1;i<6;i++) if(xyz_list[i][2]>zmax) zmax=xyz_list[i][2];
++	IssmDouble zmin=xyz_list[0][2]; for(int i=1;i<6;i++) if(xyz_list[i][2]<zmin) zmin=xyz_list[i][2];
++	if(zmax>0 && zmin<0) gauss=new GaussPenta(area_coordinates,3,10); //refined in vertical because of the sea level discontinuity
++	else                 gauss=new GaussPenta(area_coordinates,3,3);
++
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++		z_g=GetZcoord(gauss);
++		GetNodalFunctions(basis,gauss);
++		GetQuadJacobianDeterminant(&Jdet,xyz_list_front,gauss);
++
++		water_pressure=rho_water*gravity*min(0.,z_g);//0 if the gaussian point is above water level
++		air_pressure=0;
++		pressure = water_pressure + air_pressure;
++
++		for (int i=0;i<numnodes;i++){
++			pe->values[4*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
++			pe->values[4*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];
++			pe->values[4*i+2]+= pressure*Jdet*gauss->weight*normal[2]*basis[i];
++		}
++	}
++
++	/*Transform coordinate system*/
++	TransformLoadVectorCoord(pe,nodes,numnodes,XYZPEnum);
++
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
+ /*FUNCTION Penta::CreatePVectorDiagnosticStokesGLSViscous {{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticStokesGLSViscous(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15537)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15538)
+@@ -181,6 +181,7 @@
+ 		ElementMatrix* CreateKMatrixPrognostic(void);
+ 		ElementVector* CreatePVectorPrognostic(void);
+ 		ElementVector* CreatePVectorSlope(void);
++		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[6][3],int numpoints);
+ 		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
+ 		void	         GetVertexPidList(int* doflist);
+ 		void           GetVertexSidList(int* sidlist);
+@@ -192,11 +193,13 @@
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
+ 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
+ 		void	         GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
++		void           GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+ 		void	         GetSolutionFromInputsEnthalpy(Vector<IssmDouble>* solutiong);
+ 		IssmDouble     GetStabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa);
+ 		void    GetStrainRate3dPattyn(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);
+ 		void    GetStrainRate3d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input, Input* vz_input);
+ 		Penta*  GetUpperElement(void);
++		void    GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[6][3],int levelsetenum);
+ 		Penta*  GetLowerElement(void);
+ 		Penta*  GetBasalElement(void);
+ 		void	  InputExtrude(int enum_type,int object_type);
+@@ -283,8 +286,11 @@
+ 		ElementVector* CreatePVectorDiagnosticMacAyealStokes(void);
+ 		ElementVector* CreatePVectorDiagnosticL1L2(void);
+ 		ElementVector* CreatePVectorDiagnosticPattyn(void);
++		ElementVector* CreatePVectorDiagnosticPattynDrivingStress(void);
++		ElementVector* CreatePVectorDiagnosticPattynFront(void);
+ 		ElementVector* CreatePVectorDiagnosticPattynStokes(void);
+ 		ElementVector* CreatePVectorDiagnosticStokes(void);
++		ElementVector* CreatePVectorDiagnosticStokesFront(void);
+ 		ElementVector* CreatePVectorDiagnosticStokesViscous(void);
+ 		ElementVector* CreatePVectorDiagnosticStokesGLSViscous(void);
+ 		ElementVector* CreatePVectorDiagnosticStokesShelf(void);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 15537)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 15538)
+@@ -34,6 +34,7 @@
+ 		GaussPenta(int index1, int index2,int order);
+ 		GaussPenta(int index1, int index2, int index3, int order);
+ 		GaussPenta(int index1, int index2, int index3, int index4,int order_horiz,int order_vert);
++		GaussPenta(IssmDouble area_coordinates[4][3],int order_horiz,int order_vert);
+ 		~GaussPenta();
+ 
+ 		/*Methods*/
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 15537)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 15538)
+@@ -133,8 +133,8 @@
+ 	coord3=UNDEF;
+ 
+ 	/*clean up*/
+-	xDelete<double>(seg_coords);
+-	xDelete<double>(seg_weights);
++	xDelete<IssmPDouble>(seg_coords);
++	xDelete<IssmPDouble>(seg_weights);
+ }
+ /*}}}*/
+ /*FUNCTION GaussTria::GaussTria(int index,double r1,double r2,int order) {{{*/
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15537)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15538)
+@@ -236,6 +236,45 @@
+ 	xDelete<double>(seg_vert_weights);
+ }
+ /*}}}*/
++/*FUNCTION GaussPenta::GaussPenta(IssmDouble area_coordinates[4][3],int order_horiz,int order_vert){{{*/
++GaussPenta::GaussPenta(IssmDouble area_coordinates[4][3],int order_horiz,int order_vert){
++
++	/*Intermediaties*/
++	IssmPDouble *seg_horiz_coords  = NULL;
++	IssmPDouble *seg_horiz_weights = NULL;
++	IssmPDouble *seg_vert_coords   = NULL;
++	IssmPDouble *seg_vert_weights  = NULL;
++
++	/*get the gauss points using the product of two line rules*/
++	GaussLegendreLinear(&seg_horiz_coords,&seg_horiz_weights,order_horiz);
++	GaussLegendreLinear(&seg_vert_coords, &seg_vert_weights, order_vert);
++
++	/*Allocate GaussPenta fields*/
++	numgauss=order_horiz*order_vert;
++	coords1=xNew<IssmDouble>(numgauss);
++	coords2=xNew<IssmDouble>(numgauss);
++	coords3=xNew<IssmDouble>(numgauss);
++	coords4=xNew<IssmDouble>(numgauss);
++	weights=xNew<IssmDouble>(numgauss);
++
++	/*Quads: get the gauss points using the product of two line rules  */
++	for(int i=0;i<order_horiz;i++){
++		for(int j=0;j<order_vert;j++){
++			coords1[i*order_vert+j]=0.5*(area_coordinates[0][0]+area_coordinates[1][0]) + 0.5*seg_horiz_coords[i]*(area_coordinates[1][0]-area_coordinates[0][0]);
++			coords2[i*order_vert+j]=0.5*(area_coordinates[0][1]+area_coordinates[1][1]) + 0.5*seg_horiz_coords[i]*(area_coordinates[1][1]-area_coordinates[0][1]);
++			coords3[i*order_vert+j]=0.5*(area_coordinates[0][2]+area_coordinates[1][2]) + 0.5*seg_horiz_coords[i]*(area_coordinates[1][2]-area_coordinates[0][2]);
++			coords4[i*order_vert+j]=seg_vert_coords[j];
++			weights[i*order_vert+j]=seg_horiz_weights[i]*seg_vert_weights[j];
++		}
++	}
++
++	/*clean-up*/
++	xDelete<IssmPDouble>(seg_horiz_coords);
++	xDelete<IssmPDouble>(seg_horiz_weights);
++	xDelete<IssmPDouble>(seg_vert_coords);
++	xDelete<IssmPDouble>(seg_vert_weights);
++}
++/*}}}*/
+ /*FUNCTION GaussPenta::~GaussPenta(){{{*/
+ GaussPenta::~GaussPenta(){
+ 	xDelete<IssmDouble>(weights);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15538-15539.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15538-15539.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15538-15539.diff	(revision 16134)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15539)
+@@ -43,59 +43,9 @@
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+ 	if(!ismacayeal & !ispattyn & !isstokes & !isl1l2) return;
+ 
+-	/*Create pressure loads as boundary conditions. Pay attention to the partitioning if we are running in parallel (the nodes
+-	 * referenced by a certain load must belong to the cluster node): */
+-	iomodel->FetchData(3,DiagnosticIcefrontEnum,ThicknessEnum,BedEnum);
+-	iomodel->FetchData(&pressureload,&numberofpressureloads,NULL,DiagnosticIcefrontEnum);
+-	iomodel->FetchData(&elements_type,NULL,NULL,FlowequationElementEquationEnum);
+-
+ 	/*Initialize counter: */
+ 	count=0;
+ 
+-	/*First load data:*/
+-	for (i=0;i<numberofpressureloads;i++){
+-
+-		/*Retrieve element to which this icefront belongs: */
+-		if(iomodel->dim==2) segment_width=4; 
+-		else segment_width=6;
+-		element=reCast<int,IssmDouble>(*(pressureload+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill)
+-
+-		/*Now, if this element is not in the partition, pass: */
+-		if(!iomodel->my_elements[element]) continue;
+-
+-		/*Do not create ice front if Hutter or Stokes elements*/
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==HutterApproximationEnum) continue;
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==MacAyealApproximationEnum) continue;
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==L1L2ApproximationEnum) continue;
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==PattynApproximationEnum) continue;
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==StokesApproximationEnum) continue;
+-
+-		/*Create and  add load: */
+-		if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealPattynApproximationEnum)){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(PattynStokesApproximationEnum)){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,PattynIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,StokesIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-		else if (reCast<int,IssmDouble>(*(elements_type+element))==(MacAyealStokesApproximationEnum)){
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-			loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,StokesIceFrontEnum,DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(3,DiagnosticIcefrontEnum,ThicknessEnum,BedEnum);
+-	iomodel->DeleteData(elements_type,FlowequationElementEquationEnum);
+-	iomodel->DeleteData(pressureload,DiagnosticIcefrontEnum);
+-
+ 	/*Create Penpair for penalties: */
+ 	iomodel->FetchData(&penalties,&numpenalties,NULL,DiagnosticVertexPairingEnum);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15539-15540.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15539-15540.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15539-15540.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/shared/io/Disk/WriteLockFile.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Disk/WriteLockFile.cpp	(revision 15539)
++++ ../trunk-jpl/src/c/shared/io/Disk/WriteLockFile.cpp	(revision 15540)
+@@ -1,6 +1,7 @@
+ /*!\file:  WriteLockFile.cpp
+  * \brief
+  */ 
++#include <cstdio>
+ #include "../../Exceptions/exceptions.h"
+ #include "../Comm/Comm.h"
+ #include "../Print/Print.h"
Index: /issm/oecreview/Archive/15392-16133/ISSM-15540-15541.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15540-15541.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15540-15541.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15540)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15541)
+@@ -8204,7 +8204,7 @@
+ 	IssmDouble  normal[3];
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
Index: /issm/oecreview/Archive/15392-16133/ISSM-15541-15542.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15541-15542.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15541-15542.diff	(revision 16134)
@@ -0,0 +1,220 @@
+Index: ../trunk-jpl/externalpackages/triangle/triangle.c.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/triangle.c.patch	(revision 15541)
++++ ../trunk-jpl/externalpackages/triangle/triangle.c.patch	(revision 15542)
+@@ -1,164 +0,0 @@
+-0a1,10
+-> /*Notes for the Ice code: 
+->  * to be able to compile Triangle within a mex function that can run within 
+->  * matlab, we had to change the allocation routine trimalloc, as well as the 
+->  * double precision activation in exactinit(); The rest is not changed. 
+->  * We also created the ice_makefile to compile Triangle into a library. */
+-> /* #include <mat.h>
+-> #include <matrix.h> */
+-> #define ANSI_DECLARATORS
+-> #define NO_TIMER
+-> 
+-347a358
+-> #ifndef _WIN_
+-348a360
+-> #endif
+-641d652
+-< 
+-817a829,922
+-> /*Some missing prototypes: */
+-> int scale_expansion_zeroelim(int elen, REAL *e, REAL b, REAL *h);
+-> int fast_expansion_sum_zeroelim(int elen, REAL *e, int flen, REAL *f, REAL *h);
+-> void poolzero(struct memorypool *pool);
+-> int triunsuitable(vertex triorg, vertex tridest, vertex triapex, REAL area);
+-> triangle *triangletraverse(struct mesh *m);
+-> void pooldeinit(struct memorypool *pool);
+-> void printtriangle(struct mesh *m, struct behavior *b, struct otri *t);
+-> VOID *poolalloc(struct memorypool *pool);
+-> void enqueuebadtriang(struct mesh *m, struct behavior *b,
+->                       struct badtriang *badtri);
+-> void triangulatepolygon(struct mesh *m, struct behavior *b,
+->                         struct otri *firstedge, struct otri *lastedge,
+->                         int edgecount, int doflip, int triflaws);
+-> void triangledealloc(struct mesh *m, triangle *dyingtriangle);
+-> void unflip(struct mesh *m, struct behavior *b, struct otri *flipedge);
+-> void vertexmedian(vertex *sortarray, int arraysize, int median, int axis);
+-> REAL counterclockwiseadapt(vertex pa, vertex pb, vertex pc, REAL detsum);
+-> REAL incircleadapt(vertex pa, vertex pb, vertex pc, vertex pd, REAL permanent);
+-> void enqueuebadtri(struct mesh *m, struct behavior *b, struct otri *enqtri,
+->                    REAL minedge, vertex enqapex, vertex enqorg, vertex enqdest);
+-> void alternateaxes(vertex *sortarray, int arraysize, int axis);
+-> REAL incircleadapt(vertex pa, vertex pb, vertex pc, vertex pd, REAL permanent);
+-> void maketriangle(struct mesh *m, struct behavior *b, struct otri *newotri);
+-> REAL counterclockwise(struct mesh *m, struct behavior *b,
+->                       vertex pa, vertex pb, vertex pc);
+-> vertex vertextraverse(struct mesh *m);
+-> void mergehulls(struct mesh *m, struct behavior *b, struct otri *farleft,
+->                 struct otri *innerleft, struct otri *innerright,
+->                 struct otri *farright, int axis);
+-> REAL incircle(struct mesh *m, struct behavior *b,
+->               vertex pa, vertex pb, vertex pc, vertex pd);
+-> void poolrestart(struct memorypool *pool);
+-> void trifree(VOID *memptr);
+-> struct splaynode *splay(struct mesh *m, struct splaynode *splaytree,
+->                         vertex searchpoint, struct otri *searchtri);
+-> void eventheapdelete(struct event **heap, int heapsize, int eventnum);
+-> void eventheapdelete(struct event **heap, int heapsize, int eventnum);
+-> void flip(struct mesh *m, struct behavior *b, struct otri *flipedge);
+-> void check4deadevent(struct otri *checktri, struct event **freeevents,
+->                      struct event **eventheap, int *heapsize);
+-> REAL orient3d(struct mesh *m, struct behavior *b,
+->               vertex pa, vertex pb, vertex pc, vertex pd,
+->               REAL aheight, REAL bheight, REAL cheight, REAL dheight);
+-> REAL circletop(struct mesh *m, vertex pa, vertex pb, vertex pc, REAL ccwabc);
+-> void poolinit(struct memorypool *pool, int bytecount, int itemcount,
+->               int firstitemcount, int alignment);
+-> void eventheapinsert(struct event **heap, int heapsize, struct event *newevent);
+-> int rightofhyperbola(struct mesh *m, struct otri *fronttri, vertex newsite);
+-> void insertsubseg(struct mesh *m, struct behavior *b, struct otri *tri,
+->                   int subsegmark);
+-> int scoutsegment(struct mesh *m, struct behavior *b, struct otri *searchtri,
+->                  vertex endpoint2, int newmark);
+-> vertex getvertex(struct mesh *m, struct behavior *b, int number);
+-> void internalerror();
+-> unsigned long randomnation(unsigned int choices);
+-> struct splaynode *splayinsert(struct mesh *m, struct splaynode *splayroot,
+->                               struct otri *newkey, vertex searchpoint);
+-> void delaunayfixup(struct mesh *m, struct behavior *b,
+->                    struct otri *fixuptri, int leftside);
+-> void traversalinit(struct memorypool *pool);
+-> enum insertvertexresult insertvertex(struct mesh *m, struct behavior *b,
+->                                      vertex newvertex, struct otri *searchtri,
+->                                      struct osub *splitseg,
+->                                      int segmentflaws, int triflaws);
+-> void conformingedge(struct mesh *m, struct behavior *b,
+->                     vertex endpoint1, vertex endpoint2, int newmark);
+-> enum finddirectionresult finddirection(struct mesh *m, struct behavior *b,
+->                                        struct otri *searchtri,
+->                                        vertex searchpoint);
+-> VOID *traverse(struct memorypool *pool);
+-> void deletevertex(struct mesh *m, struct behavior *b, struct otri *deltri);
+-> void pooldealloc(struct memorypool *pool, VOID *dyingitem);
+-> int checkseg4encroach(struct mesh *m, struct behavior *b,
+->                       struct osub *testsubseg);
+-> void badsubsegdealloc(struct mesh *m, struct badsubseg *dyingseg);
+-> void vertexdealloc(struct mesh *m, vertex dyingvertex);
+-> void vertexsort(vertex *sortarray, int arraysize);
+-> void tallyencs(struct mesh *m, struct behavior *b);
+-> void splittriangle(struct mesh *m, struct behavior *b,
+->                    struct badtriang *badtri);
+-> subseg *subsegtraverse(struct mesh *m);
+-> enum locateresult locate(struct mesh *m, struct behavior *b,
+->                          vertex searchpoint, struct otri *searchtri);
+-> void writenodes(struct mesh *m, struct behavior *b, REAL **pointlist,
+->                 REAL **pointattriblist, int **pointmarkerlist);
+-> void writevoronoi(struct mesh *m, struct behavior *b, REAL **vpointlist,
+->                   REAL **vpointattriblist, int **vpointmarkerlist,
+->                   int **vedgelist, int **vedgemarkerlist, REAL **vnormlist);
+-> void writeneighbors(struct mesh *m, struct behavior *b, int **neighborlist);
+-> void testtriangle(struct mesh *m, struct behavior *b, struct otri *testtri);
+-> void triangleinit(struct mesh *m);
+-> 
+-> 
+-1408a1514
+-> void triexit(int status);
+-1410d1515
+-< #ifdef ANSI_DECLARATORS
+-1412,1416d1516
+-< #else /* not ANSI_DECLARATORS */
+-< void triexit(status)
+-< int status;
+-< #endif /* not ANSI_DECLARATORS */
+-< 
+-1421c1521
+-< #ifdef ANSI_DECLARATORS
+----
+-> VOID *trimalloc(int size);
+-1423,1427d1522
+-< #else /* not ANSI_DECLARATORS */
+-< VOID *trimalloc(size)
+-< int size;
+-< #endif /* not ANSI_DECLARATORS */
+-< 
+-1431c1526,1527
+-<   memptr = (VOID *) malloc((unsigned int) size);
+----
+->   //memptr = (VOID *) mxMalloc((unsigned int) size);
+->   memptr = (VOID *) malloc((unsigned int) size);
+-1447c1543,1544
+-<   free(memptr);
+----
+->   free(memptr);
+->   //mxFree(memptr);
+-3665,3670c3762,3767
+-< void printtriangle(struct mesh *m, struct behavior *b, struct otri *t)
+-< #else /* not ANSI_DECLARATORS */
+-< void printtriangle(m, b, t)
+-< struct mesh *m;
+-< struct behavior *b;
+-< struct otri *t;
+----
+-> void printtriangle(struct mesh *m, struct behavior *b, struct otri *t){
+-> //#else /* not ANSI_DECLARATORS */
+-> //void printtriangle(m, b, t)
+-> //struct mesh *m;
+-> //struct behavior *b;
+-> //struct otri *t;
+-3673c3770
+-< {
+----
+-> //{
+-4910c5007
+-<   _FPU_SETCW(cword);
+----
+->   //_FPU_SETCW(cword); //taken care of by Matlab
+Index: ../trunk-jpl/externalpackages/triangle/install-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-linux64.sh	(revision 15541)
++++ ../trunk-jpl/externalpackages/triangle/install-linux64.sh	(revision 15542)
+@@ -18,10 +18,10 @@
+ cp ../makefile ./
+ 
+ #Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
++#patch triangle.c ../triangle.c.patch
+ 
+ #Compile triangle
+ make
+ 
+ #Patch triangle.h
+-patch triangle.h ../triangle.h.patch
++#patch triangle.h ../triangle.h.patch
+Index: ../trunk-jpl/externalpackages/triangle/triangle.h.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/triangle.h.patch	(revision 15541)
++++ ../trunk-jpl/externalpackages/triangle/triangle.h.patch	(revision 15542)
+@@ -1,25 +1,12 @@
+-249a250,251
+-> #ifndef _TRIANGLE_LIBRARY_H_
+-> #define _TRIANGLE_LIBRARY_H_
+-251c253,259
+-< struct triangulateio {
+----
+-> 
++250a251,257
++> /*Patch for ISSM*/
+ > #ifndef REAL
+ > typedef double REAL;
+ > typedef void VOID;
+ > #endif
++> /*End patch*/
+ > 
+-> extern "C" struct triangulateio {
+-283c291
++283c290
+ < void triangulate(char *, struct triangulateio *, struct triangulateio *,
+ ---
+ > extern "C" void triangulate(char *, struct triangulateio *, struct triangulateio *,
+-285c293
+-< void trifree(VOID *memptr);
+----
+-> extern "C" void trifree(VOID *memptr);
+-289a298,300
+-> 
+-> 
+-> #endif //#ifndef _TRIANGLE_LIBRARY_H_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15542-15543.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15542-15543.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15542-15543.diff	(revision 16134)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make	(revision 15542)
++++ ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make	(revision 15543)
+@@ -1,5 +1,5 @@
+ CC=gcc -arch i386
+-CSWITCHES = $(CFLAGS)  -I/usr/X11R6/include -L/usr/X11R6/lib -I$(MATLAB_DIR)/extern/include -fPIC -I$(MATLAB_DIR)/include
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC 
+ TRILIBDEFS = -DTRILIBRARY
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/android/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/android/configure.make	(revision 15542)
++++ ../trunk-jpl/externalpackages/triangle/configs/android/configure.make	(revision 15543)
+@@ -12,7 +12,7 @@
+ CC=${host_triplet}-gcc
+ AR=${host_triplet}-ar
+ RANLIB=${host_triplet}-ranlib
+-CSWITCHES = $(CFLAGS)
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED
+ TRILIBDEFS = -DTRILIBRARY
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/win32/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/win32/configure.make	(revision 15542)
++++ ../trunk-jpl/externalpackages/triangle/configs/win32/configure.make	(revision 15543)
+@@ -1,4 +1,4 @@
+ CC=icl
+-CSWITCHES = $(CFLAGS) -I$(MATLAB_DIR)/extern/include  -I$(MATLAB_DIR)/include -DWIN32
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DWIN32
+ OBJ_EXT=obj
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make	(revision 15542)
++++ ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make	(revision 15543)
+@@ -1,5 +1,5 @@
+ CC=gcc -arch x86_64
+-CSWITCHES = $(CFLAGS)  -I/usr/X11R6/include -L/usr/X11R6/lib -I$(MATLAB_DIR)/extern/include -fPIC -I$(MATLAB_DIR)/include
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC
+ TRILIBDEFS = -DTRILIBRARY
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/win7/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/win7/configure.make	(revision 15542)
++++ ../trunk-jpl/externalpackages/triangle/configs/win7/configure.make	(revision 15543)
+@@ -1,4 +1,4 @@
+ CC=cl
+-CSWITCHES = $(CFLAGS) -I$(MATLAB_DIR)/extern/include  -I$(MATLAB_DIR)/include -DWIN32
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DWIN32
+ OBJ_EXT=obj
+ LIB_EXT=lib
+Index: ../trunk-jpl/externalpackages/triangle/configs/pleiades/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/pleiades/configure.make	(revision 15542)
++++ ../trunk-jpl/externalpackages/triangle/configs/pleiades/configure.make	(revision 15543)
+@@ -1,4 +1,4 @@
+ CC=gcc
+-CSWITCHES = $(CFLAGS) -I$(MATLAB_DIR)/extern/include  -I$(MATLAB_DIR)/include -DLIN64 -fPIC
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make	(revision 15542)
++++ ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make	(revision 15543)
+@@ -1,4 +1,4 @@
+ CC=gcc
+-CSWITCHES = $(CFLAGS) -I$(MATLAB_DIR)/extern/include  -I$(MATLAB_DIR)/include -DLIN64 -fPIC
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/altix64/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/altix64/configure.make	(revision 15542)
++++ ../trunk-jpl/externalpackages/triangle/configs/altix64/configure.make	(revision 15543)
+@@ -1,4 +1,4 @@
+ CC=gcc
+-CSWITCHES = $(CFLAGS) -I$(MATLAB_DIR)/extern/include  -I$(MATLAB_DIR)/include -DLIN64 -fPIC
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC
+ OBJ_EXT=o
+ LIB_EXT=a
Index: /issm/oecreview/Archive/15392-16133/ISSM-15543-15544.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15543-15544.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15543-15544.diff	(revision 16134)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15543)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15544)
+@@ -3180,7 +3180,7 @@
+ 	IssmDouble  normal[2];
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,MacAyealApproximationEnum);
+ 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 	Input* bed_input      =inputs->GetInput(BedEnum);       _assert_(bed_input);
+ 	rho_water=matpar->GetRhoWater();
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15543)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15544)
+@@ -7999,7 +7999,7 @@
+ 	IssmDouble  normal[3];
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,PattynApproximationEnum);
+ 	Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+@@ -8204,7 +8204,7 @@
+ 	IssmDouble  normal[3];
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,StokesApproximationEnum);
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
Index: /issm/oecreview/Archive/15392-16133/ISSM-15544-15545.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15544-15545.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15544-15545.diff	(revision 16134)
@@ -0,0 +1,148 @@
+Index: ../trunk-jpl/externalpackages/triangle/install-win32.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-win32.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-win32.sh	(revision 15545)
+@@ -17,9 +17,6 @@
+ cp ../configs/win32/configure.make ./
+ cp ../makefile ./
+ 
+-#Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
+Index: ../trunk-jpl/externalpackages/triangle/install-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-macosx64.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-macosx64.sh	(revision 15545)
+@@ -17,9 +17,6 @@
+ cp ../configs/macosx64/configure.make ./
+ cp ../makefile ./
+ 
+-#Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
+Index: ../trunk-jpl/externalpackages/triangle/install-win7.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-win7.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-win7.sh	(revision 15545)
+@@ -17,9 +17,6 @@
+ cp ../configs/win7/configure.make ./
+ cp ../configs/win7/makefile ./
+ 
+-#Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
+Index: ../trunk-jpl/externalpackages/triangle/install-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-pleiades.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-pleiades.sh	(revision 15545)
+@@ -17,9 +17,6 @@
+ cp ../configs/pleiades/configure.make ./
+ cp ../makefile ./
+ 
+-#Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
+Index: ../trunk-jpl/externalpackages/triangle/install-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-linux64.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-linux64.sh	(revision 15545)
+@@ -17,9 +17,6 @@
+ cp ../configs/linux64/configure.make ./
+ cp ../makefile ./
+ 
+-#Patch triangle.c 
+-#patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
+Index: ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make	(revision 15545)
+@@ -1,5 +1,5 @@
+ CC=gcc -arch i386
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC 
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -fPIC 
+ TRILIBDEFS = -DTRILIBRARY
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make	(revision 15545)
+@@ -1,5 +1,5 @@
+ CC=gcc -arch x86_64
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -fPIC
+ TRILIBDEFS = -DTRILIBRARY
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/install-altix64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-altix64.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-altix64.sh	(revision 15545)
+@@ -17,9 +17,6 @@
+ cp ../configs/altix64/configure.make ./
+ cp ../makefile ./
+ 
+-#Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
+Index: ../trunk-jpl/externalpackages/triangle/install-discover.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-discover.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-discover.sh	(revision 15545)
+@@ -17,9 +17,6 @@
+ cp ../configs/pleiades/configure.make ./
+ cp ../makefile ./
+ 
+-#Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
+Index: ../trunk-jpl/externalpackages/triangle/install-macosx32.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-macosx32.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-macosx32.sh	(revision 15545)
+@@ -17,9 +17,6 @@
+ cp ../configs/macosx32/configure.make ./
+ cp ../makefile ./
+ 
+-#Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
+Index: ../trunk-jpl/externalpackages/triangle/install-android.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-android.sh	(revision 15544)
++++ ../trunk-jpl/externalpackages/triangle/install-android.sh	(revision 15545)
+@@ -19,9 +19,6 @@
+ cp ../configs/android/configure.make ./
+ cp ../makefile ./
+ 
+-#Patch triangle.c 
+-patch triangle.c ../triangle.c.patch
+-
+ #Compile triangle
+ make
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15545-15546.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15545-15546.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15545-15546.diff	(revision 16134)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/externalpackages/triangle/install-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/install-linux64.sh	(revision 15545)
++++ ../trunk-jpl/externalpackages/triangle/install-linux64.sh	(revision 15546)
+@@ -21,4 +21,4 @@
+ make
+ 
+ #Patch triangle.h
+-#patch triangle.h ../triangle.h.patch
++patch triangle.h ../triangle.h.patch
Index: /issm/oecreview/Archive/15392-16133/ISSM-15546-15547.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15546-15547.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15546-15547.diff	(revision 16134)
@@ -0,0 +1,101 @@
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 0)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 15547)
+@@ -0,0 +1,54 @@
++%Start defining model parameters here
++
++%Geometry
++hmin=300;
++hmax=1000;
++ymin=min(md.mesh.y);
++ymax=max(md.mesh.y);
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin);
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++
++%Initial velocity and pressure
++x     = transpose(ncread('../Data/SquareShelf.nc','x'));
++y     = transpose(ncread('../Data/SquareShelf.nc','y'));
++vx    = transpose(ncread('../Data/SquareShelf.nc','vx'));
++vy    = transpose(ncread('../Data/SquareShelf.nc','vy'));
++index = transpose(ncread('../Data/SquareShelf.nc','index'));
++md.initialization.vx=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y);
++md.initialization.vy=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y);
++clear vx vy x y index;
++md.initialization.vz=zeros(md.mesh.numberofvertices,1);
++md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
++
++%Materials
++md.initialization.temperature=(273-20)*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_B=paterson(md.initialization.temperature);
++md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++
++%Friction
++pos=find(md.mask.elementonfloatingice);
++md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.p=ones(md.mesh.numberofelements,1);
++md.friction.q=ones(md.mesh.numberofelements,1);
++
++%Numerical parameters
++md.diagnostic.viscosity_overshoot=0.3;
++md.prognostic.stabilization=1;
++md.thermal.stabilization=1;
++md.settings.waitonlock=30;
++md.verbose=verbose(0);
++md.diagnostic.restol=0.10;
++md.steadystate.reltol=0.02;
++md.diagnostic.reltol=0.02;
++md.diagnostic.abstol=NaN;
++md.timestepping.time_step=1;
++md.timestepping.final_time=3;
++
++%Boundary conditions:
++md=SetIceShelfBC(md,'../Exp/SquareFront2.exp');
++
++%Change name so that no test have the same name
++A=dbstack;
++if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
+
+Property changes on: ../trunk-jpl/test/Par/SquareShelf2.par
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 15546)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 15547)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.);
+ md=meshprocessrifts(md,'../Exp/Square.exp');
+ md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.par');
++md=parameterize(md,'../Par/SquareShelf2.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+Index: ../trunk-jpl/test/Exp/SquareFront2.exp
+===================================================================
+--- ../trunk-jpl/test/Exp/SquareFront2.exp	(revision 0)
++++ ../trunk-jpl/test/Exp/SquareFront2.exp	(revision 15547)
+@@ -0,0 +1,10 @@
++## Name:icefront
++## Icon:0
++# Points Count  Value
++5 1.
++# X pos Y pos
++1000 999000
++1000 1100000
++999000 1100000
++999000 999000
++-1000 999000
+
+Property changes on: ../trunk-jpl/test/Exp/SquareFront2.exp
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15547-15548.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15547-15548.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15547-15548.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive216.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15548-15549.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15548-15549.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15548-15549.diff	(revision 16134)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make	(revision 15548)
++++ ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make	(revision 15549)
+@@ -1,4 +1,4 @@
+ CC=gcc
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC
++CSWITCHES = $(CFLAGS) -DLIN64 -fPIC
+ OBJ_EXT=o
+ LIB_EXT=a
Index: /issm/oecreview/Archive/15392-16133/ISSM-15549-15550.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15549-15550.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15549-15550.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive216.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15550-15551.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15550-15551.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15550-15551.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/test509.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.m	(revision 15550)
++++ ../trunk-jpl/test/NightlyRun/test509.m	(revision 15551)
+@@ -5,6 +5,7 @@
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
++md.thermal.penalty_threshold=7;
+ md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/15392-16133/ISSM-15551-15552.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15551-15552.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15551-15552.diff	(revision 16134)
@@ -0,0 +1,96 @@
+Index: ../trunk-jpl/test/Par/Pig.par
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.par	(revision 15551)
++++ ../trunk-jpl/test/Par/Pig.par	(revision 15552)
+@@ -46,6 +46,7 @@
+ 
+ %Boundary conditions:
+ md=SetMarineIceSheetBC(md);
++md.diagnostic.icefront(:,end)=1;
+ 
+ %Change name so that no test have the same name
+ A=dbstack;
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 15551)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 15552)
+@@ -2,7 +2,8 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
++md.verbose=verbose('all');
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 15551)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 15552)
+@@ -1,9 +1,13 @@
+-md=triangle(model(),'../Exp/Square.exp',180000.);
++md=triangle(model(),'../Exp/Square.exp',250000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'stokes','all');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
++md.verbose=verbose('all');
++md.flowequation.fe_stokes=1;
++%md.diagnostic.stokesreconditioning=1;
++md.diagnostic.maxiter=10;
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 15551)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 15552)
+@@ -3,7 +3,8 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'stokes','all');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
++md.verbose=verbose('convergence',true);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/Archives/Archive501.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive509.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive504.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive513.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive502.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive505.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive508.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive512.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15552-15553.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15552-15553.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15552-15553.diff	(revision 16134)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make	(revision 15552)
++++ ../trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make	(revision 15553)
+@@ -1,5 +1,5 @@
+ CC=gcc -arch i386
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -fPIC 
++CSWITCHES = $(CFLAGS) -DNO_TIMER -fPIC 
+ TRILIBDEFS = -DTRILIBRARY
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/android/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/android/configure.make	(revision 15552)
++++ ../trunk-jpl/externalpackages/triangle/configs/android/configure.make	(revision 15553)
+@@ -12,7 +12,7 @@
+ CC=${host_triplet}-gcc
+ AR=${host_triplet}-ar
+ RANLIB=${host_triplet}-ranlib
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED
++CSWITCHES = $(CFLAGS) -DNO_TIMER 
+ TRILIBDEFS = -DTRILIBRARY
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/win32/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/win32/configure.make	(revision 15552)
++++ ../trunk-jpl/externalpackages/triangle/configs/win32/configure.make	(revision 15553)
+@@ -1,4 +1,4 @@
+ CC=icl
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DWIN32
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DWIN32
+ OBJ_EXT=obj
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make	(revision 15552)
++++ ../trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make	(revision 15553)
+@@ -1,5 +1,5 @@
+ CC=gcc -arch x86_64
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -fPIC
++CSWITCHES = $(CFLAGS) -DNO_TIMER -fPIC
+ TRILIBDEFS = -DTRILIBRARY
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/win7/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/win7/configure.make	(revision 15552)
++++ ../trunk-jpl/externalpackages/triangle/configs/win7/configure.make	(revision 15553)
+@@ -1,4 +1,4 @@
+ CC=cl
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DWIN32
++CSWITCHES = $(CFLAGS) -DNO_TIMER 
+ OBJ_EXT=obj
+ LIB_EXT=lib
+Index: ../trunk-jpl/externalpackages/triangle/configs/pleiades/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/pleiades/configure.make	(revision 15552)
++++ ../trunk-jpl/externalpackages/triangle/configs/pleiades/configure.make	(revision 15553)
+@@ -1,4 +1,4 @@
+ CC=gcc
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DLINUX -fPIC
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make	(revision 15552)
++++ ../trunk-jpl/externalpackages/triangle/configs/linux64/configure.make	(revision 15553)
+@@ -1,4 +1,4 @@
+ CC=gcc
+-CSWITCHES = $(CFLAGS) -DLIN64 -fPIC
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DLINUX -fPIC
+ OBJ_EXT=o
+ LIB_EXT=a
+Index: ../trunk-jpl/externalpackages/triangle/configs/altix64/configure.make
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle/configs/altix64/configure.make	(revision 15552)
++++ ../trunk-jpl/externalpackages/triangle/configs/altix64/configure.make	(revision 15553)
+@@ -1,4 +1,4 @@
+ CC=gcc
+-CSWITCHES = $(CFLAGS) -DNO_TIMER -DREDUCED -DLINUX -fPIC
++CSWITCHES = $(CFLAGS) -DNO_TIMER -DLINUX -fPIC
+ OBJ_EXT=o
+ LIB_EXT=a
Index: /issm/oecreview/Archive/15392-16133/ISSM-15553-15554.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15553-15554.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15553-15554.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 15553)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 15554)
+@@ -57,7 +57,8 @@
+ 
+ #Boundary conditions:
+ md=SetMarineIceSheetBC(md)
++md.diagnostic.icefront[:,-1]=1
+ 
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+-	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
++	md.miscellaneous.name = ospath.basename(inspect.stack()[2][1]).split('.')[0]
+Index: ../trunk-jpl/test/NightlyRun/test509.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.py	(revision 15553)
++++ ../trunk-jpl/test/NightlyRun/test509.py	(revision 15554)
+@@ -14,6 +14,7 @@
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
++md.thermal.penalty_threshold=7
+ md=solve(md,SteadystateSolutionEnum())
+ 
+ # Fields and tolerances to track changes
Index: /issm/oecreview/Archive/15392-16133/ISSM-15554-15555.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15554-15555.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15554-15555.diff	(revision 16134)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 15554)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 15555)
+@@ -61,4 +61,4 @@
+ 
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+-	md.miscellaneous.name = ospath.basename(inspect.stack()[2][1]).split('.')[0]
++	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
Index: /issm/oecreview/Archive/15392-16133/ISSM-15555-15556.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15555-15556.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15555-15556.diff	(revision 16134)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15555)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15556)
+@@ -8215,7 +8215,7 @@
+ 	/*Start looping on Gaussian points*/
+ 	IssmDouble zmax=xyz_list[0][2]; for(int i=1;i<6;i++) if(xyz_list[i][2]>zmax) zmax=xyz_list[i][2];
+ 	IssmDouble zmin=xyz_list[0][2]; for(int i=1;i<6;i++) if(xyz_list[i][2]<zmin) zmin=xyz_list[i][2];
+-	if(zmax>0 && zmin<0) gauss=new GaussPenta(area_coordinates,3,10); //refined in vertical because of the sea level discontinuity
++	if(zmax>0 && zmin<0) gauss=new GaussPenta(area_coordinates,3,30); //refined in vertical because of the sea level discontinuity
+ 	else                 gauss=new GaussPenta(area_coordinates,3,3);
+ 
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -8233,13 +8233,13 @@
+ 			pe->values[4*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
+ 			pe->values[4*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];
+ 			pe->values[4*i+2]+= pressure*Jdet*gauss->weight*normal[2]*basis[i];
++			pe->values[4*i+3]+= 0;
+ 		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+ 	TransformLoadVectorCoord(pe,nodes,numnodes,XYZPEnum);
+ 
+-
+ 	/*Clean up and return*/
+ 	xDelete<IssmDouble>(basis);
+ 	delete gauss;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15556-15557.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15556-15557.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15556-15557.diff	(revision 16134)
@@ -0,0 +1,263 @@
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp	(revision 15556)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp	(revision 15557)
+@@ -46,7 +46,7 @@
+ 
+ 		/*display current iteration*/
+ 		if (debug && my_thread==0 && fmod((double)i,(double)100)==0)
+-		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i-i0)/double(i1-i0)*100<<"%");
++		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i-i0)/double(i1-i0)*100<<"%   ");
+ 
+ 		/*if there is no point inside the domain, go to next iteration*/
+ 		if ( (x_data[(int)index_data[3*i+0]-1]<xmin) && (x_data[(int)index_data[3*i+1]-1]<xmin) && (x_data[(int)index_data[3*i+2]-1]<xmin)) continue;
+@@ -98,6 +98,6 @@
+ 		}
+ 	}
+ 	if(debug && my_thread==0)
+-	 _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++	 _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 	return NULL;
+ }
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 15556)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 15557)
+@@ -67,7 +67,7 @@
+ 
+ 	/*Loop over output nodes*/
+ 	for(i=0;i<N_interp;i++){
+-		//if(i%100==0) _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i)/double(N_interp)*100.<<"%");
++		//if(i%100==0) _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i)/double(N_interp)*100.<<"%   ");
+ 
+ 		if(isdefault){
+ 			if(x_interp[i]<xmin || x_interp[i]>xmax || y_interp[i]<ymin || y_interp[i]>ymax){
+@@ -141,7 +141,7 @@
+ 			}
+ 		}
+ 	}
+-	//if(N_interp>=100) _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++	//if(N_interp>=100) _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 
+ 	/*clean-up and return*/
+ 	xDelete<long>(reft);
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 15556)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 15557)
+@@ -91,7 +91,7 @@
+ 
+ 		/*display current iteration*/
+ 		if (debug && fmod((double)n,(double)100)==0)
+-		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(n)/double(nels)*100<<"%");
++		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(n)/double(nels)*100<<"%   ");
+ 
+ 		/*Get extrema coordinates of current elements*/
+ 		x_tria_min=x_mesh[(int)index_mesh[3*n+0]-1]; x_tria_max=x_tria_min;
+@@ -171,7 +171,7 @@
+ 		}
+ 	}
+ 	if (debug)
+-	 _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++	 _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 
+ 	/*Assign output pointers:*/
+ 	*pgriddata=griddata;
+Index: ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 15556)
++++ ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 15557)
+@@ -109,7 +109,7 @@
+ 
+ 		/*launch the thread manager with Krigingxt as a core: */
+ 		LaunchThread(NearestNeighbort,(void*)&gate,num);
+-		_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++		_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 		xDelete<int>(gate.numdone);
+ 	}
+ 	else if(strcmp(output,"idw")==0){ //Inverse distance weighting
+@@ -131,7 +131,7 @@
+ 
+ 		/*launch the thread manager with Krigingxt as a core: */
+ 		LaunchThread(idwt,(void*)&gate,num);
+-		_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++		_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 		xDelete<int>(gate.numdone);
+ 	}
+ 	else if(strcmp(output,"v4")==0){ //Inverse distance weighting
+@@ -153,7 +153,7 @@
+ 
+ 		/*launch the thread manager with Krigingxt as a core: */
+ 		LaunchThread(v4t,(void*)&gate,num);
+-		_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++		_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 		xDelete<int>(gate.numdone);
+ 	}
+ 	else if(strcmp(output,"prediction")==0){
+@@ -176,7 +176,7 @@
+ 
+ 		/*launch the thread manager with Krigingxt as a core: */
+ 		LaunchThread(Krigingxt,(void*)&gate,num);
+-		_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++		_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 		xDelete<int>(gate.numdone);
+ 	}
+ 	else{
+@@ -229,7 +229,7 @@
+ 		if(my_thread==0){
+ 			int alldone=numdone[0];
+ 			for(int i=1;i<num_threads;i++) alldone+=numdone[i];
+-			_printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(alldone)/double(n_interp)*100.<<"%");
++			_printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(alldone)/double(n_interp)*100.<<"%   ");
+ 		}
+ 
+ 		/*Kriging interpolation*/
+@@ -276,7 +276,7 @@
+ 		if(my_thread==0){
+ 			int alldone=numdone[0];
+ 			for(int i=1;i<num_threads;i++) alldone+=numdone[i];
+-			_printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(alldone)/double(n_interp)*100.<<"%");
++			_printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(alldone)/double(n_interp)*100.<<"%   ");
+ 		}
+ 
+ 		observations->InterpolationNearestNeighbor(&predictions[idx],x_interp[idx],y_interp[idx],radius);
+@@ -323,7 +323,7 @@
+ 		if(my_thread==0){
+ 			int alldone=numdone[0];
+ 			for(int i=1;i<num_threads;i++) alldone+=numdone[i];
+-			_printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(alldone)/double(n_interp)*100.<<"%");
++			_printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(alldone)/double(n_interp)*100.<<"%   ");
+ 		}
+ 
+ 		observations->InterpolationIDW(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,power);
+@@ -368,7 +368,7 @@
+ 		if(my_thread==0){
+ 			int alldone=numdone[0];
+ 			for(int i=1;i<num_threads;i++) alldone+=numdone[i];
+-			_printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(alldone)/double(n_interp)*100.<<"%");
++			_printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(alldone)/double(n_interp)*100.<<"%   ");
+ 		}
+ 
+ 		observations->InterpolationV4(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata);
+Index: ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 15556)
++++ ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 15557)
+@@ -67,10 +67,10 @@
+ 
+ 		/*partition loop across threads: */
+ 		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
+-			_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%\n");
++			_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%  \n");
+ 			observations->InterpolationKriging(&predictions[idx],&error[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,variogram);
+ 		}
+-		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%\n");
++		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+ #ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+@@ -85,10 +85,10 @@
+ 
+ 		/*partition loop across threads: */
+ 		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
+-			_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%\n");
++			_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%  \n");
+ 			observations->InterpolationV4(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata);
+ 		}
+-		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%\n");
++		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+ #ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+@@ -100,10 +100,10 @@
+ 
+ 		/*partition loop across threads: */
+ 		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
+-			_printf0_("      interpolation progress: "<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%\n");
++			_printf0_("      interpolation progress: "<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%  \n");
+ 			observations->InterpolationNearestNeighbor(&predictions[idx],x_interp[idx],y_interp[idx],radius);
+ 		}
+-		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%\n");
++		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+ #ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+@@ -117,10 +117,10 @@
+ 
+ 		/*partition loop across threads: */
+ 		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
+-			_printf0_("      interpolation progress: "<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%\n");
++			_printf0_("      interpolation progress: "<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%  \n");
+ 			observations->InterpolationIDW(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,power);
+ 		}
+-		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%\n");
++		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+ #ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp	(revision 15556)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp	(revision 15557)
+@@ -60,7 +60,7 @@
+ 
+ 		/*display current iteration*/
+ 		if (debug && fmod((double)i,(double)100)==0)
+-		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i)/double(nels_data)*100<<"%");
++		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i)/double(nels_data)*100<<"%   ");
+ 
+ 		/*Get extrema coordinates of current elements*/
+ 		x_tria_min=x_data[(int)index_data[6*i+0]-1]; x_tria_max=x_tria_min;
+@@ -131,7 +131,7 @@
+ 		}
+ 	}
+ 	if (debug)
+-	 _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++	 _printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 
+ 	/*Assign output pointers:*/
+ 	*pdata_prime=data_prime;
+Index: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 15556)
++++ ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 15557)
+@@ -86,7 +86,7 @@
+ 
+ 	/*launch the thread manager with InterpFromGridToMeshxt as a core: */
+ 	LaunchThread(InterpFromGridToMeshxt,(void*)&gate,num);
+-	_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++	_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 
+ 	/*Assign output pointers:*/
+ 	*pdata_mesh=data_mesh;
+@@ -140,7 +140,7 @@
+ 	for (i=i0;i<i1;i++) {
+ 
+ 		if(debug && my_thread==0)
+-		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i-i0)/double(i1-i0)*100<<"%");
++		 _printf_("\r      interpolation progress: "<<setw(6)<<setprecision(2)<<double(i-i0)/double(i1-i0)*100<<"%   ");
+ 		x_grid=*(x_mesh+i);
+ 		y_grid=*(y_mesh+i);
+ 
+Index: ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp	(revision 15556)
++++ ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp	(revision 15557)
+@@ -48,7 +48,7 @@
+ 
+ 		/*display current iteration*/
+ 		if (my_thread==0 && fmod((double)i,(double)100)==0)
+-		 _printf_("\r      loop progress: "<<setw(6)<<setprecision(2)<<double(i-i0)/double(i1-i0)*100<<"%");
++		 _printf_("\r      loop progress: "<<setw(6)<<setprecision(2)<<double(i-i0)/double(i1-i0)*100<<"%   ");
+ 
+ 		distance=mindistance+100; //make sure initialization respects min distance criterion.
+ 		for (j=0;j<nods;j++){
+@@ -69,7 +69,7 @@
+ 		}
+ 	}
+ 	if (my_thread==0)
+-	 _printf_("\r      loop progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%\n");
++	 _printf_("\r      loop progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 
+ 	/*Free ressources:*/
+ 	xDelete<bool>(already);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15557-15558.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15557-15558.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15557-15558.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/test218.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test218.m	(revision 15557)
++++ ../trunk-jpl/test/NightlyRun/test218.m	(revision 15558)
+@@ -1,6 +1,6 @@
+ md=squaremesh(model(),1000000,1000000,5,5);
+ md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.par');
++md=parameterize(md,'../Par/SquareShelf2.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15558-15559.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15558-15559.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15558-15559.diff	(revision 16134)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/src/c/shared/io/Disk/diskio.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Disk/diskio.h	(revision 15558)
++++ ../trunk-jpl/src/c/shared/io/Disk/diskio.h	(revision 15559)
+@@ -8,6 +8,7 @@
+ #include <stdio.h>
+ 
+ FILE* pfopen(char* filename,const char* format);
++FILE* pfopen0(char* filename,const char* format);
+ void  pfclose(FILE* fid,char* filename);
+ void WriteLockFile(char* filename);
+ 
+Index: ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp	(revision 15558)
++++ ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp	(revision 15559)
+@@ -3,21 +3,46 @@
+  */ 
+ 
+ #ifdef HAVE_CONFIG_H
+-	#include <config.h>
++#include <config.h>
+ #else
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+ #include <stdio.h>
+-#include "../../shared.h"
++#include "../Print/Print.h"
++#include "../Comm/Comm.h"
++#include "../../Exceptions/exceptions.h"
+ 
++FILE* pfopen0(char* filename,const char* format){
++
++	FILE* fid=NULL;
++
++	/*recover my_rank:*/
++	int my_rank  = IssmComm::GetRank();
++	if(my_rank) _error_("This function should only be called by cpu 0");
++
++	/*Open handle to data on disk*/
++	fid = fopen(filename,format);
++	if(fid==NULL) _error_("could not open file " << filename << " for binary reading or writing");
++
++	return fid;
++}
+ FILE* pfopen(char* filename,const char* format){
+ 
+ 	FILE* fid=NULL;
+ 
+-	/*Open handle to data on disk: */
+-	fid=fopen(filename,format);
+-	if(fid==NULL) _error_("could not open file " << filename << " for binary reading or writing"); 
++	/*recover my_rank:*/
++	int my_rank  = IssmComm::GetRank();
++	int num_proc = IssmComm::GetSize();
+ 
++	/*Open handle to data on disk (one by one to avoid errors)*/
++	for(int i=0;i<num_proc;i++){
++		if(my_rank==i) fid = fopen(filename,format);
++#ifdef _HAVE_MPI_
++		MPI_Barrier(IssmComm::GetComm());
++#endif
++	}
++	if(fid==NULL) _error_("could not open file " << filename << " for binary reading or writing");
++
+ 	return fid;
+ }
+Index: ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 15558)
++++ ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 15559)
+@@ -60,7 +60,7 @@
+ 
+ 		if(io_gather){
+ 			/*Just open the file for output on cpu 0. We are gathering the data on cpu 0 from all other cpus: */
+-			if(my_rank==0) fid=pfopen(outputfilename ,"wb");
++			if(my_rank==0) fid=pfopen0(outputfilename ,"wb");
+ 		}
+ 		else{
+ 			/*We are opening different  files for output on all cpus. Append the  rank to the filename, and open: */
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15558)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15559)
+@@ -187,7 +187,7 @@
+ 	my_rank=IssmComm::GetRank();
+ 
+ 	/*Open input file on cpu 0: */
+-	if(my_rank==0) IOMODEL = pfopen(inputfilename ,"rb");
++	if(my_rank==0) IOMODEL = pfopen0(inputfilename ,"rb");
+ 
+ 	/*Initialize internal data: */
+ 	this->nummodels        = nummodels;
+@@ -1464,10 +1464,13 @@
+ 
+ 	/*Get response*/
+ 	J=0;
++	//_printf_(true,"list of misfits: ");
+ 	for(int i=0;i<num_responses;i++){
+ 		this->Responsex(&Jplus,EnumToStringx(responses[i]),i);
++		//_printf_(true," %12.7g ",Jplus);
+ 		J+=Jplus;
+ 	}
++	//_printf_(true," \n");
+ 
+ 	/*Assign output pointers: */
+ 	xDelete<int>(responses);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15559-15560.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15559-15560.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15559-15560.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test218.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test218.m	(revision 15559)
++++ ../trunk-jpl/test/NightlyRun/test218.m	(revision 15560)
+@@ -1,6 +1,6 @@
+ md=squaremesh(model(),1000000,1000000,5,5);
+ md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf2.par');
++md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+@@ -47,13 +47,6 @@
+ md.diagnostic.spcvx(pos)=0;
+ md.diagnostic.spcvy(pos)=0;
+ 
+-%icefront
+-nodeonicefront=zeros(md.mesh.numberofvertices,1);
+-pos=find(md.mesh.y==ymax); nodeonicefront(pos)=1;
+-pos=find(nodeonicefront(md.mesh.segments(:,1)) | nodeonicefront(md.mesh.segments(:,2))); diagnostic.icefront=md.mesh.segments(pos,:);
+-diagnostic.icefront=[diagnostic.icefront 1*md.mask.elementonfloatingice(diagnostic.icefront(:,end))];
+-md.diagnostic.icefront=diagnostic.icefront;
+-
+ %partitioning
+ md.qmu.numberofpartitions=md.mesh.numberofvertices;
+ md=partitioner(md,'package','linear','npart',md.qmu.numberofpartitions);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15560-15561.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15560-15561.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15560-15561.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/test218.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test218.m	(revision 15560)
++++ ../trunk-jpl/test/NightlyRun/test218.m	(revision 15561)
+@@ -1,6 +1,6 @@
+ md=squaremesh(model(),1000000,1000000,5,5);
+ md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.par');
++md=parameterize(md,'../Par/SquareShelf2.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15561-15562.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15561-15562.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15561-15562.diff	(revision 16134)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 15561)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 15562)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+-md.cluster=generic('name',oshostname(),'np',1);
++md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('all');
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 15561)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 15562)
+@@ -1,13 +1,9 @@
+-md=triangle(model(),'../Exp/Square.exp',250000.);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'stokes','all');
+-md.cluster=generic('name',oshostname(),'np',1);
+-md.verbose=verbose('all');
+-md.flowequation.fe_stokes=1;
+-%md.diagnostic.stokesreconditioning=1;
+-md.diagnostic.maxiter=10;
++md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 15561)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 15562)
+@@ -3,8 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'stokes','all');
+-md.cluster=generic('name',oshostname(),'np',1);
+-md.verbose=verbose('convergence',true);
++md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/15392-16133/ISSM-15562-15563.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15562-15563.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15562-15563.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/Archives/Archive510.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive503.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15563-15564.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15563-15564.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15563-15564.diff	(revision 16134)
@@ -0,0 +1,8020 @@
+Index: ../trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp	(revision 15564)
+@@ -12,12 +12,12 @@
+ void adjointdiagnostic_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
+-	bool isstokes;
++	bool isFS;
+ 	bool save_results;
+ 	bool conserve_loads   = true;
+ 
+ 	/*retrieve parameters:*/
+-	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 
+ 	/*Compute velocities*/
+@@ -38,7 +38,7 @@
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointxEnum);
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointyEnum);
+-		if (isstokes){
++		if (isFS){
+ 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointzEnum);
+ 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointpEnum);
+ 		}
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15564)
+@@ -29,7 +29,7 @@
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=DiagnosticHorizAnalysisEnum;
+ 			analyses[1]=DiagnosticVertAnalysisEnum;
+-			analyses[2]=DiagnosticHutterAnalysisEnum;
++			analyses[2]=DiagnosticSIAAnalysisEnum;
+ 			analyses[3]=SurfaceSlopeAnalysisEnum;
+ 			analyses[4]=BedSlopeAnalysisEnum;
+ 			break;
+@@ -39,7 +39,7 @@
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=DiagnosticHorizAnalysisEnum;
+ 			analyses[1]=DiagnosticVertAnalysisEnum;
+-			analyses[2]=DiagnosticHutterAnalysisEnum;
++			analyses[2]=DiagnosticSIAAnalysisEnum;
+ 			analyses[3]=SurfaceSlopeAnalysisEnum;
+ 			analyses[4]=BedSlopeAnalysisEnum;
+ 			analyses[5]=EnthalpyAnalysisEnum;
+@@ -111,7 +111,7 @@
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=DiagnosticHorizAnalysisEnum;
+ 			analyses[1]=DiagnosticVertAnalysisEnum;
+-			analyses[2]=DiagnosticHutterAnalysisEnum;
++			analyses[2]=DiagnosticSIAAnalysisEnum;
+ 			analyses[3]=SurfaceSlopeAnalysisEnum;
+ 			analyses[4]=BedSlopeAnalysisEnum;
+ 			analyses[5]=ThermalAnalysisEnum;
+Index: ../trunk-jpl/src/c/analyses/objectivefunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/objectivefunction.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/analyses/objectivefunction.cpp	(revision 15564)
+@@ -23,7 +23,7 @@
+ 
+ 	/*parameters: */
+ 	int        solution_type,analysis_type;
+-	bool       isstokes       = false;
++	bool       isFS       = false;
+ 	bool       conserve_loads = true;
+ 	FemModel  *femmodel       = NULL;
+ 
+@@ -31,7 +31,7 @@
+ 	femmodel=optargs->femmodel;
+ 
+ 	/*Recover parameters: */
+-	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+ 	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 15564)
+@@ -23,7 +23,7 @@
+ 	bool       cm_gradient;
+ 	int        dim;
+ 	int        solution_type;
+-	bool       isstokes;
++	bool       isFS;
+ 	bool       dakota_analysis = false;
+ 
+ 	int        *control_type   = NULL;
+@@ -56,7 +56,7 @@
+ 	femmodel->parameters->FindParam(&cm_gradient,InversionGradientOnlyEnum);
+ 	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->SetParam(false,SaveResultsEnum);
+ 
+@@ -66,7 +66,7 @@
+ 
+ 	/*Launch once a complete solution to set up all inputs*/
+ 	if(VerboseControl()) _printf0_("   preparing initial solution\n");
+-	if(isstokes) solutioncore(femmodel);
++	if(isFS) solutioncore(femmodel);
+ 
+ 	/*Initialize responses: */
+ 	J=xNew<IssmDouble>(nsteps);
+Index: ../trunk-jpl/src/c/analyses/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15564)
+@@ -14,7 +14,7 @@
+ 	/*parameters: */
+ 	bool  dakota_analysis;
+ 	int   dim;
+-	bool  ishutter,ismacayeal,isl1l2,ispattyn,isstokes;
++	bool  isSIA,isSSA,isL1L2,isHO,isFS;
+ 	bool  conserve_loads    = true;
+ 	bool  save_results;
+ 	int   newton;
+@@ -24,11 +24,11 @@
+ 
+ 	/* recover parameters:*/
+ 	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+-	femmodel->parameters->FindParam(&ishutter,FlowequationIshutterEnum);
+-	femmodel->parameters->FindParam(&ismacayeal,FlowequationIsmacayealEnum);
+-	femmodel->parameters->FindParam(&isl1l2,FlowequationIsl1l2Enum);
+-	femmodel->parameters->FindParam(&ispattyn,FlowequationIspattynEnum);
+-	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
++	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
++	femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
++	femmodel->parameters->FindParam(&isL1L2,FlowequationIsL1L2Enum);
++	femmodel->parameters->FindParam(&isHO,FlowequationIsHOEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+ 	femmodel->parameters->FindParam(&newton,DiagnosticIsnewtonEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+@@ -45,24 +45,24 @@
+ 	}
+ 
+ 	/*Compute slopes: */
+-	if(ishutter) surfaceslope_core(femmodel);
+-	if(isstokes){
++	if(isSIA) surfaceslope_core(femmodel);
++	if(isFS){
+ 		bedslope_core(femmodel);
+ 		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
+ 		ResetCoordinateSystemx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 	}
+ 
+-	if(ishutter){
+-		if(VerboseSolution()) _printf0_("   computing hutter velocities\n");
++	if(isSIA){
++		if(VerboseSolution()) _printf0_("   computing SIA velocities\n");
+ 
+ 		/*Take the last velocity into account so that the velocity on the MacAyeal domain is not zero*/
+-		if(ismacayeal || isl1l2 || ispattyn ) ResetBoundaryConditions(femmodel,DiagnosticHutterAnalysisEnum);
+-		femmodel->SetCurrentConfiguration(DiagnosticHutterAnalysisEnum);
++		if(isSSA || isL1L2 || isHO ) ResetBoundaryConditions(femmodel,DiagnosticSIAAnalysisEnum);
++		femmodel->SetCurrentConfiguration(DiagnosticSIAAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
+-		if(ismacayeal || isl1l2 || ispattyn) ResetBoundaryConditions(femmodel,DiagnosticHorizAnalysisEnum);
++		if(isSSA || isL1L2 || isHO) ResetBoundaryConditions(femmodel,DiagnosticHorizAnalysisEnum);
+ 	}
+ 
+-	if ((ismacayeal || ispattyn || isl1l2) ^ isstokes){ // ^ = xor
++	if ((isSSA || isHO || isL1L2) ^ isFS){ // ^ = xor
+ 		if(VerboseSolution()) _printf0_("   computing velocities\n");
+ 
+ 		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
+@@ -72,12 +72,12 @@
+ 		 solutionsequence_nonlinear(femmodel,conserve_loads); 
+ 	}
+ 
+-	if ((ismacayeal || isl1l2 || ispattyn) && isstokes){
+-		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-Stokes\n");
+-		solutionsequence_stokescoupling_nonlinear(femmodel,conserve_loads);
++	if ((isSSA || isL1L2 || isHO) && isFS){
++		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-FS\n");
++		solutionsequence_FScoupling_nonlinear(femmodel,conserve_loads);
+ 	}
+ 
+-	if (dim==3 & (ishutter || ismacayeal || isl1l2 || ispattyn)){
++	if (dim==3 & (isSIA || isSSA || isL1L2 || isHO)){
+ 		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
+ 		femmodel->SetCurrentConfiguration(DiagnosticVertAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15563)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15564)
+@@ -56,23 +56,23 @@
+ 	DiagnosticSpcvxEnum,
+ 	DiagnosticSpcvyEnum,
+ 	DiagnosticSpcvzEnum,
+-	DiagnosticStokesreconditioningEnum,
++	DiagnosticFSreconditioningEnum,
+ 	DiagnosticVertexPairingEnum,
+ 	DiagnosticViscosityOvershootEnum,
+ 	LoadingforceXEnum,
+ 	LoadingforceYEnum,
+ 	LoadingforceZEnum,
+-	FlowequationBordermacayealEnum,
+-	FlowequationBorderpattynEnum,
+-	FlowequationBorderstokesEnum,
++	FlowequationBorderSSAEnum,
++	FlowequationBorderHOEnum,
++	FlowequationBorderFSEnum,
+ 	FlowequationElementEquationEnum,
+-	FlowequationIshutterEnum,
+-	FlowequationIsmacayealEnum,
+-	FlowequationIsl1l2Enum,
+-	FlowequationIspattynEnum,
+-	FlowequationIsstokesEnum,
+-	FlowequationFeStokesEnum,
+-	FlowequationFeSsaEnum,
++	FlowequationIsSIAEnum,
++	FlowequationIsSSAEnum,
++	FlowequationIsL1L2Enum,
++	FlowequationIsHOEnum,
++	FlowequationIsFSEnum,
++	FlowequationFeFSEnum,
++	FlowequationFeSSAEnum,
+ 	FlowequationVertexEquationEnum,
+ 	FrictionCoefficientEnum,
+ 	FrictionPEnum,
+@@ -281,7 +281,7 @@
+ 	BedSlopeXAnalysisEnum,
+ 	BedSlopeYAnalysisEnum,
+ 	DiagnosticHorizAnalysisEnum,
+-	DiagnosticHutterAnalysisEnum,
++	DiagnosticSIAAnalysisEnum,
+ 	DiagnosticSolutionEnum,
+ 	DiagnosticVertAnalysisEnum,
+ 	EnthalpyAnalysisEnum,
+@@ -309,14 +309,14 @@
+ 	/*Approximations {{{*/
+ 	ApproximationEnum,
+ 	NoneApproximationEnum,
+-	HutterApproximationEnum,
++	SIAApproximationEnum,
+ 	MacAyealApproximationEnum,
+-	MacAyealPattynApproximationEnum,
+-	MacAyealStokesApproximationEnum,
++	MacAyealHOApproximationEnum,
++	MacAyealFSApproximationEnum,
+ 	L1L2ApproximationEnum,
+-	PattynApproximationEnum,
+-	PattynStokesApproximationEnum,
+-	StokesApproximationEnum,
++	HOApproximationEnum,
++	HOFSApproximationEnum,
++	FSApproximationEnum,
+ 	/*}}}*/
+ 	/*Datasets {{{*/
+ 	ConstraintsEnum,
+@@ -365,7 +365,7 @@
+ 	NumericalfluxTypeEnum,
+ 	ParamEnum,
+ 	L1L2IceFrontEnum,
+-	PattynIceFrontEnum,
++	HOIceFrontEnum,
+ 	PengridEnum,
+ 	PenpairEnum,
+ 	PentaEnum,
+@@ -381,7 +381,7 @@
+ 	SpcDynamicEnum,
+ 	SpcStaticEnum,
+ 	SpcTransientEnum,
+-	StokesIceFrontEnum,
++	FSIceFrontEnum,
+ 	StringArrayParamEnum,
+ 	StringParamEnum,
+ 	TriaEnum,
+@@ -460,9 +460,9 @@
+ 	VyPicardEnum,
+ 	VzEnum,
+ 	VzMacAyealEnum,
+-	VzPattynEnum,
++	VzHOEnum,
+ 	VzPicardEnum,
+-	VzStokesEnum,
++	VzFSEnum,
+ 	VxMeshEnum,
+ 	VyMeshEnum,
+ 	VzMeshEnum,
+@@ -552,7 +552,7 @@
+ 	GLlevelsetEnum,
+ 	/*}}}*/
+ 	/*Solver{{{*/
+-	StokesSolverEnum,
++	FSSolverEnum,
+ 	/*}}}*/
+ 	/*Parameters{{{*/
+ 	AdjointEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15564)
+@@ -64,23 +64,23 @@
+ 		case DiagnosticSpcvxEnum : return "DiagnosticSpcvx";
+ 		case DiagnosticSpcvyEnum : return "DiagnosticSpcvy";
+ 		case DiagnosticSpcvzEnum : return "DiagnosticSpcvz";
+-		case DiagnosticStokesreconditioningEnum : return "DiagnosticStokesreconditioning";
++		case DiagnosticFSreconditioningEnum : return "DiagnosticFSreconditioning";
+ 		case DiagnosticVertexPairingEnum : return "DiagnosticVertexPairing";
+ 		case DiagnosticViscosityOvershootEnum : return "DiagnosticViscosityOvershoot";
+ 		case LoadingforceXEnum : return "LoadingforceX";
+ 		case LoadingforceYEnum : return "LoadingforceY";
+ 		case LoadingforceZEnum : return "LoadingforceZ";
+-		case FlowequationBordermacayealEnum : return "FlowequationBordermacayeal";
+-		case FlowequationBorderpattynEnum : return "FlowequationBorderpattyn";
+-		case FlowequationBorderstokesEnum : return "FlowequationBorderstokes";
++		case FlowequationBorderSSAEnum : return "FlowequationBorderSSA";
++		case FlowequationBorderHOEnum : return "FlowequationBorderHO";
++		case FlowequationBorderFSEnum : return "FlowequationBorderFS";
+ 		case FlowequationElementEquationEnum : return "FlowequationElementEquation";
+-		case FlowequationIshutterEnum : return "FlowequationIshutter";
+-		case FlowequationIsmacayealEnum : return "FlowequationIsmacayeal";
+-		case FlowequationIsl1l2Enum : return "FlowequationIsl1l2";
+-		case FlowequationIspattynEnum : return "FlowequationIspattyn";
+-		case FlowequationIsstokesEnum : return "FlowequationIsstokes";
+-		case FlowequationFeStokesEnum : return "FlowequationFeStokes";
+-		case FlowequationFeSsaEnum : return "FlowequationFeSsa";
++		case FlowequationIsSIAEnum : return "FlowequationIsSIA";
++		case FlowequationIsSSAEnum : return "FlowequationIsSSA";
++		case FlowequationIsL1L2Enum : return "FlowequationIsL1L2";
++		case FlowequationIsHOEnum : return "FlowequationIsHO";
++		case FlowequationIsFSEnum : return "FlowequationIsFS";
++		case FlowequationFeFSEnum : return "FlowequationFeFS";
++		case FlowequationFeSSAEnum : return "FlowequationFeSSA";
+ 		case FlowequationVertexEquationEnum : return "FlowequationVertexEquation";
+ 		case FrictionCoefficientEnum : return "FrictionCoefficient";
+ 		case FrictionPEnum : return "FrictionP";
+@@ -287,7 +287,7 @@
+ 		case BedSlopeXAnalysisEnum : return "BedSlopeXAnalysis";
+ 		case BedSlopeYAnalysisEnum : return "BedSlopeYAnalysis";
+ 		case DiagnosticHorizAnalysisEnum : return "DiagnosticHorizAnalysis";
+-		case DiagnosticHutterAnalysisEnum : return "DiagnosticHutterAnalysis";
++		case DiagnosticSIAAnalysisEnum : return "DiagnosticSIAAnalysis";
+ 		case DiagnosticSolutionEnum : return "DiagnosticSolution";
+ 		case DiagnosticVertAnalysisEnum : return "DiagnosticVertAnalysis";
+ 		case EnthalpyAnalysisEnum : return "EnthalpyAnalysis";
+@@ -313,14 +313,14 @@
+ 		case GiaAnalysisEnum : return "GiaAnalysis";
+ 		case ApproximationEnum : return "Approximation";
+ 		case NoneApproximationEnum : return "NoneApproximation";
+-		case HutterApproximationEnum : return "HutterApproximation";
++		case SIAApproximationEnum : return "SIAApproximation";
+ 		case MacAyealApproximationEnum : return "MacAyealApproximation";
+-		case MacAyealPattynApproximationEnum : return "MacAyealPattynApproximation";
+-		case MacAyealStokesApproximationEnum : return "MacAyealStokesApproximation";
++		case MacAyealHOApproximationEnum : return "MacAyealHOApproximation";
++		case MacAyealFSApproximationEnum : return "MacAyealFSApproximation";
+ 		case L1L2ApproximationEnum : return "L1L2Approximation";
+-		case PattynApproximationEnum : return "PattynApproximation";
+-		case PattynStokesApproximationEnum : return "PattynStokesApproximation";
+-		case StokesApproximationEnum : return "StokesApproximation";
++		case HOApproximationEnum : return "HOApproximation";
++		case HOFSApproximationEnum : return "HOFSApproximation";
++		case FSApproximationEnum : return "FSApproximation";
+ 		case ConstraintsEnum : return "Constraints";
+ 		case LoadsEnum : return "Loads";
+ 		case MaterialsEnum : return "Materials";
+@@ -365,7 +365,7 @@
+ 		case NumericalfluxTypeEnum : return "NumericalfluxType";
+ 		case ParamEnum : return "Param";
+ 		case L1L2IceFrontEnum : return "L1L2IceFront";
+-		case PattynIceFrontEnum : return "PattynIceFront";
++		case HOIceFrontEnum : return "HOIceFront";
+ 		case PengridEnum : return "Pengrid";
+ 		case PenpairEnum : return "Penpair";
+ 		case PentaEnum : return "Penta";
+@@ -381,7 +381,7 @@
+ 		case SpcDynamicEnum : return "SpcDynamic";
+ 		case SpcStaticEnum : return "SpcStatic";
+ 		case SpcTransientEnum : return "SpcTransient";
+-		case StokesIceFrontEnum : return "StokesIceFront";
++		case FSIceFrontEnum : return "FSIceFront";
+ 		case StringArrayParamEnum : return "StringArrayParam";
+ 		case StringParamEnum : return "StringParam";
+ 		case TriaEnum : return "Tria";
+@@ -454,9 +454,9 @@
+ 		case VyPicardEnum : return "VyPicard";
+ 		case VzEnum : return "Vz";
+ 		case VzMacAyealEnum : return "VzMacAyeal";
+-		case VzPattynEnum : return "VzPattyn";
++		case VzHOEnum : return "VzHO";
+ 		case VzPicardEnum : return "VzPicard";
+-		case VzStokesEnum : return "VzStokes";
++		case VzFSEnum : return "VzFS";
+ 		case VxMeshEnum : return "VxMesh";
+ 		case VyMeshEnum : return "VyMesh";
+ 		case VzMeshEnum : return "VzMesh";
+@@ -534,7 +534,7 @@
+ 		case SubelementMigrationEnum : return "SubelementMigration";
+ 		case SubelementMigration2Enum : return "SubelementMigration2";
+ 		case GLlevelsetEnum : return "GLlevelset";
+-		case StokesSolverEnum : return "StokesSolver";
++		case FSSolverEnum : return "FSSolver";
+ 		case AdjointEnum : return "Adjoint";
+ 		case ColinearEnum : return "Colinear";
+ 		case ControlSteadyEnum : return "ControlSteady";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15564)
+@@ -64,23 +64,23 @@
+ 	      else if (strcmp(name,"DiagnosticSpcvx")==0) return DiagnosticSpcvxEnum;
+ 	      else if (strcmp(name,"DiagnosticSpcvy")==0) return DiagnosticSpcvyEnum;
+ 	      else if (strcmp(name,"DiagnosticSpcvz")==0) return DiagnosticSpcvzEnum;
+-	      else if (strcmp(name,"DiagnosticStokesreconditioning")==0) return DiagnosticStokesreconditioningEnum;
++	      else if (strcmp(name,"DiagnosticFSreconditioning")==0) return DiagnosticFSreconditioningEnum;
+ 	      else if (strcmp(name,"DiagnosticVertexPairing")==0) return DiagnosticVertexPairingEnum;
+ 	      else if (strcmp(name,"DiagnosticViscosityOvershoot")==0) return DiagnosticViscosityOvershootEnum;
+ 	      else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum;
+ 	      else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
+ 	      else if (strcmp(name,"LoadingforceZ")==0) return LoadingforceZEnum;
+-	      else if (strcmp(name,"FlowequationBordermacayeal")==0) return FlowequationBordermacayealEnum;
+-	      else if (strcmp(name,"FlowequationBorderpattyn")==0) return FlowequationBorderpattynEnum;
+-	      else if (strcmp(name,"FlowequationBorderstokes")==0) return FlowequationBorderstokesEnum;
++	      else if (strcmp(name,"FlowequationBorderSSA")==0) return FlowequationBorderSSAEnum;
++	      else if (strcmp(name,"FlowequationBorderHO")==0) return FlowequationBorderHOEnum;
++	      else if (strcmp(name,"FlowequationBorderFS")==0) return FlowequationBorderFSEnum;
+ 	      else if (strcmp(name,"FlowequationElementEquation")==0) return FlowequationElementEquationEnum;
+-	      else if (strcmp(name,"FlowequationIshutter")==0) return FlowequationIshutterEnum;
+-	      else if (strcmp(name,"FlowequationIsmacayeal")==0) return FlowequationIsmacayealEnum;
+-	      else if (strcmp(name,"FlowequationIsl1l2")==0) return FlowequationIsl1l2Enum;
+-	      else if (strcmp(name,"FlowequationIspattyn")==0) return FlowequationIspattynEnum;
+-	      else if (strcmp(name,"FlowequationIsstokes")==0) return FlowequationIsstokesEnum;
+-	      else if (strcmp(name,"FlowequationFeStokes")==0) return FlowequationFeStokesEnum;
+-	      else if (strcmp(name,"FlowequationFeSsa")==0) return FlowequationFeSsaEnum;
++	      else if (strcmp(name,"FlowequationIsSIA")==0) return FlowequationIsSIAEnum;
++	      else if (strcmp(name,"FlowequationIsSSA")==0) return FlowequationIsSSAEnum;
++	      else if (strcmp(name,"FlowequationIsL1L2")==0) return FlowequationIsL1L2Enum;
++	      else if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
++	      else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum;
++	      else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum;
++	      else if (strcmp(name,"FlowequationFeSSA")==0) return FlowequationFeSSAEnum;
+ 	      else if (strcmp(name,"FlowequationVertexEquation")==0) return FlowequationVertexEquationEnum;
+ 	      else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
+ 	      else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
+@@ -293,7 +293,7 @@
+ 	      else if (strcmp(name,"BedSlopeXAnalysis")==0) return BedSlopeXAnalysisEnum;
+ 	      else if (strcmp(name,"BedSlopeYAnalysis")==0) return BedSlopeYAnalysisEnum;
+ 	      else if (strcmp(name,"DiagnosticHorizAnalysis")==0) return DiagnosticHorizAnalysisEnum;
+-	      else if (strcmp(name,"DiagnosticHutterAnalysis")==0) return DiagnosticHutterAnalysisEnum;
++	      else if (strcmp(name,"DiagnosticSIAAnalysis")==0) return DiagnosticSIAAnalysisEnum;
+ 	      else if (strcmp(name,"DiagnosticSolution")==0) return DiagnosticSolutionEnum;
+ 	      else if (strcmp(name,"DiagnosticVertAnalysis")==0) return DiagnosticVertAnalysisEnum;
+ 	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+@@ -319,14 +319,14 @@
+ 	      else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+-	      else if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
++	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
+-	      else if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
+-	      else if (strcmp(name,"MacAyealStokesApproximation")==0) return MacAyealStokesApproximationEnum;
++	      else if (strcmp(name,"MacAyealHOApproximation")==0) return MacAyealHOApproximationEnum;
++	      else if (strcmp(name,"MacAyealFSApproximation")==0) return MacAyealFSApproximationEnum;
+ 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+-	      else if (strcmp(name,"PattynApproximation")==0) return PattynApproximationEnum;
+-	      else if (strcmp(name,"PattynStokesApproximation")==0) return PattynStokesApproximationEnum;
+-	      else if (strcmp(name,"StokesApproximation")==0) return StokesApproximationEnum;
++	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
++	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
++	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
+ 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+ 	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+ 	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+@@ -371,7 +371,7 @@
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+ 	      else if (strcmp(name,"Param")==0) return ParamEnum;
+ 	      else if (strcmp(name,"L1L2IceFront")==0) return L1L2IceFrontEnum;
+-	      else if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum;
++	      else if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+@@ -390,7 +390,7 @@
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+-	      else if (strcmp(name,"StokesIceFront")==0) return StokesIceFrontEnum;
++	      else if (strcmp(name,"FSIceFront")==0) return FSIceFrontEnum;
+ 	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+ 	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+@@ -463,9 +463,9 @@
+ 	      else if (strcmp(name,"VyPicard")==0) return VyPicardEnum;
+ 	      else if (strcmp(name,"Vz")==0) return VzEnum;
+ 	      else if (strcmp(name,"VzMacAyeal")==0) return VzMacAyealEnum;
+-	      else if (strcmp(name,"VzPattyn")==0) return VzPattynEnum;
++	      else if (strcmp(name,"VzHO")==0) return VzHOEnum;
+ 	      else if (strcmp(name,"VzPicard")==0) return VzPicardEnum;
+-	      else if (strcmp(name,"VzStokes")==0) return VzStokesEnum;
++	      else if (strcmp(name,"VzFS")==0) return VzFSEnum;
+ 	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
+ 	      else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
+ 	      else if (strcmp(name,"VzMesh")==0) return VzMeshEnum;
+@@ -546,7 +546,7 @@
+ 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+ 	      else if (strcmp(name,"GLlevelset")==0) return GLlevelsetEnum;
+-	      else if (strcmp(name,"StokesSolver")==0) return StokesSolverEnum;
++	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
+ 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
+ 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+ 	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15564)
+@@ -1,5 +1,5 @@
+ /*
+- * UpdateElementsDiagnosticHutter:
++ * UpdateElementsDiagnosticSIA:
+  */
+ 
+ #include "../../../toolkits/toolkits.h"
+@@ -8,14 +8,14 @@
+ #include "../../MeshPartitionx/MeshPartitionx.h"
+ #include "../ModelProcessorx.h"
+ 
+-void	UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++void	UpdateElementsDiagnosticSIA(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	/*Fetch data needed: */
+-	bool   ishutter;
+-	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
++	bool   isSIA;
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+ 
+-	/*Now, is the flag hutter on? otherwise, do nothing: */
+-	if (!ishutter)return;
++	/*Now, is the flag SIA on? otherwise, do nothing: */
++	if (!isSIA)return;
+ 
+ 	iomodel->FetchData(1,FlowequationElementEquationEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 15564)
+@@ -1,4 +1,4 @@
+-/*! \file CreateLoadsDiagnosticHutter.c:
++/*! \file CreateLoadsDiagnosticSIA.c:
+  */
+ 
+ #include "../../../toolkits/toolkits.h"
+@@ -6,7 +6,7 @@
+ #include "../../../shared/shared.h"
+ #include "../ModelProcessorx.h"
+ 
+-void	CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel){
++void	CreateLoadsDiagnosticSIA(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*No loads*/
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15564)
+@@ -1,5 +1,5 @@
+ /*
+- * CreateConstraintsDiagnosticHutter.c:
++ * CreateConstraintsDiagnosticSIA.c:
+  */
+ 
+ #include "../../../toolkits/toolkits.h"
+@@ -7,12 +7,12 @@
+ #include "../../../shared/shared.h"
+ #include "../ModelProcessorx.h"
+ 
+-void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints, IoModel* iomodel){
++void	CreateConstraintsDiagnosticSIA(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+ 	int        count;
+ 	IssmDouble yts;
+-	bool       ishutter;
++	bool       isSIA;
+ 
+ 	/*Output*/
+ 	Constraints* constraints = NULL;
+@@ -23,10 +23,10 @@
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+ 
+-	/*Now, is the flag ishutter on? otherwise, do nothing: */
+-	if (!ishutter) return;
++	/*Now, is the flag isSIA on? otherwise, do nothing: */
++	if (!isSIA) return;
+ 
+ 	/*Fetch data: */
+ 	iomodel->FetchData(3,DiagnosticSpcvxEnum,DiagnosticSpcvyEnum,FlowequationVertexEquationEnum);
+@@ -34,26 +34,26 @@
+ 	/*Initialize conunter*/
+ 	count=0;
+ 
+-	/*vx and vy are spc'd if we are not on nodeonhutter: */
++	/*vx and vy are spc'd if we are not on nodeonSIA: */
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		/*keep only this partition's nodes:*/
+ 		if((iomodel->my_vertices[i])){
+-			if (!reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])==HutterApproximationEnum){
++			if (!reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])==SIAApproximationEnum){
+ 
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHutterAnalysisEnum));
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticSIAAnalysisEnum));
+ 				count++;
+ 
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHutterAnalysisEnum));
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticSIAAnalysisEnum));
+ 				count++;
+ 			}
+ 			else{
+ 				if (!xIsNan<IssmDouble>(iomodel->Data(DiagnosticSpcvxEnum)[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(DiagnosticSpcvxEnum)[i]/yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(DiagnosticSpcvxEnum)[i]/yts,DiagnosticSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 					count++;
+ 				}
+ 
+ 				if (!xIsNan<IssmDouble>(iomodel->Data(DiagnosticSpcvyEnum)[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->Data(DiagnosticSpcvyEnum)[i]/yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->Data(DiagnosticSpcvyEnum)[i]/yts,DiagnosticSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+ 					count++;
+ 				}
+ 			}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15564)
+@@ -1,5 +1,5 @@
+ /*
+- * CreateNodesDiagnosticHutter.c:
++ * CreateNodesDiagnosticSIA.c:
+  */
+ 
+ #include "../../../toolkits/toolkits.h"
+@@ -8,16 +8,16 @@
+ #include "../../MeshPartitionx/MeshPartitionx.h"
+ #include "../ModelProcessorx.h"
+ 
+-void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel){
++void	CreateNodesDiagnosticSIA(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Fetch parameters: */
+-	bool ishutter;
+-	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
++	bool isSIA;
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+ 
+-	/*Now, is the flag ishutter on? otherwise, do nothing: */
+-	if(!ishutter) return;
++	/*Now, is the flag isSIA on? otherwise, do nothing: */
++	if(!isSIA) return;
+ 
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	CreateNodes(pnodes,iomodel,DiagnosticHutterAnalysisEnum,P1Enum);
++	CreateNodes(pnodes,iomodel,DiagnosticSIAAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15564)
+@@ -23,7 +23,7 @@
+ 	if(iomodel->dim==2) *pconstraints=constraints;
+ 
+ 	/*Fetch data: */
+-	iomodel->FetchData(2,DiagnosticSpcvzEnum,FlowequationBorderstokesEnum);
++	iomodel->FetchData(2,DiagnosticSpcvzEnum,FlowequationBorderFSEnum);
+ 
+ 	/*Initialize counter*/
+ 	count=0;
+@@ -34,8 +34,8 @@
+ 		/*keep only this partition's nodes:*/
+ 		if(iomodel->my_vertices[i]){
+ 
+-			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderstokesEnum)[i])){
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticVertAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for Stokes
++			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderFSEnum)[i])){
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticVertAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
+ 				count++;
+ 			}
+ 			else if (!xIsNan<IssmDouble>(iomodel->Data(DiagnosticSpcvzEnum)[i])){
+@@ -48,7 +48,7 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(2,DiagnosticSpcvzEnum,FlowequationBorderstokesEnum);
++	iomodel->DeleteData(2,DiagnosticSpcvzEnum,FlowequationBorderFSEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pconstraints=constraints;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15564)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+ 	if(iomodel->dim==2) return;
+ 
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15564)
+@@ -16,21 +16,21 @@
+ void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	int    materials_type;
+-	bool   ismacayeal,isl1l2,ispattyn,isstokes;
++	bool   isSSA,isL1L2,isHO,isFS;
+ 	bool   control_analysis;
+ 	bool   dakota_analysis;
+ 
+ 	/*Fetch constants needed: */
+-	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
+-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+-	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
+-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&materials_type,MaterialsEnum);
+ 
+-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayeal & !isl1l2 & !ispattyn & !isstokes) return;
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(1,FlowequationElementEquationEnum);
+@@ -71,7 +71,7 @@
+ 		iomodel->FetchDataToInput(elements,VzEnum);
+ 		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-		iomodel->FetchDataToInput(elements,FlowequationBorderstokesEnum);
++		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
+ 		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15564)
+@@ -18,30 +18,30 @@
+ 	int         i;
+ 	int         count;
+ 	int         penpair_ids[2];
+-	bool        ismacayeal,isl1l2,ispattyn,isstokes;
++	bool        isSSA,isL1L2,isHO,isFS;
+ 	int         numpenalties,numberofpressureloads,numrifts,numriftsegments;
+ 	IssmDouble *pressureload   = NULL;
+ 	IssmDouble *elements_type  = NULL;
+ 	IssmDouble *nodeoniceshelf = NULL;
+ 	IssmDouble *riftinfo       = NULL;
+ 	IssmDouble *nodeonbed      = NULL;
+-	IssmDouble *nodeonstokes   = NULL;
++	IssmDouble *nodeonFS   = NULL;
+ 	IssmDouble *nodeonicesheet = NULL;
+ 	IssmDouble *vertices_type  = NULL;
+ 	IssmDouble *penalties      = NULL;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+-	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
+-	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+ 	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayeal & !ispattyn & !isstokes & !isl1l2) return;
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA & !isHO & !isFS & !isL1L2) return;
+ 
+ 	/*Initialize counter: */
+ 	count=0;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15564)
+@@ -15,8 +15,8 @@
+ 	IssmDouble yts;
+ 	IssmDouble g;
+ 	IssmDouble rho_ice;
+-	IssmDouble stokesreconditioning;
+-	bool       ismacayeal,isl1l2,ispattyn,isstokes;
++	IssmDouble FSreconditioning;
++	bool       isSSA,isL1L2,isHO,isFS;
+ 	int        fe_ssa;
+ 	bool       spcpresent = false;
+ 	int        Mx,Nx;
+@@ -25,9 +25,9 @@
+ 	IssmDouble *spcvx          = NULL;
+ 	IssmDouble *spcvy          = NULL;
+ 	IssmDouble *spcvz          = NULL;
+-	IssmDouble *nodeonmacayeal = NULL;
+-	IssmDouble *nodeonpattyn   = NULL;
+-	IssmDouble *nodeonstokes   = NULL;
++	IssmDouble *nodeonSSA = NULL;
++	IssmDouble *nodeonHO   = NULL;
++	IssmDouble *nodeonFS   = NULL;
+ 	IssmDouble *nodeonbed      = NULL;
+ 	IssmDouble *nodeonicesheet = NULL;
+ 	IssmDouble *vertices_type  = NULL;
+@@ -46,18 +46,18 @@
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&g,ConstantsGEnum);
+ 	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+-	iomodel->Constant(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+-	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
+-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+-	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
+-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+-	iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum);
++	iomodel->Constant(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++	iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
+ 
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+ 
+-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayeal & !ispattyn & !isstokes & !isl1l2){
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA & !isHO & !isFS & !isL1L2){
+ 		*pconstraints=constraints;
+ 		return;
+ 	}
+@@ -66,9 +66,9 @@
+ 	iomodel->FetchData(&spcvx,&Mx,&Nx,DiagnosticSpcvxEnum);
+ 	iomodel->FetchData(&spcvy,&My,&Ny,DiagnosticSpcvyEnum);
+ 	iomodel->FetchData(&spcvz,&Mz,&Nz,DiagnosticSpcvzEnum);
+-	iomodel->FetchData(&nodeonmacayeal,NULL,NULL,FlowequationBordermacayealEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonpattyn,NULL,NULL,FlowequationBorderpattynEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonstokes,NULL,NULL,FlowequationBorderstokesEnum);
++	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+ 	if(iomodel->dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+ 	if(iomodel->dim==3)iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
+ 	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+@@ -98,10 +98,10 @@
+ 	for(i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+-			/*Start with adding spcs of coupling: zero at the border macayeal/pattyn for the appropriate dofs*/
+-			if (reCast<int,IssmDouble>(vertices_type[i]==MacAyealPattynApproximationEnum)){
+-				/*If grionmacayeal, spc pattyn dofs: 3 & 4*/
+-					if (reCast<int,IssmDouble>(nodeonpattyn[i])){
++			/*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/
++			if (reCast<int,IssmDouble>(vertices_type[i]==MacAyealHOApproximationEnum)){
++				/*If grionSSA, spc HO dofs: 3 & 4*/
++					if (reCast<int,IssmDouble>(nodeonHO[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -116,7 +116,7 @@
+ 						}
+ 
+ 					}
+-					else if (reCast<int,IssmDouble>(nodeonmacayeal[i])){
++					else if (reCast<int,IssmDouble>(nodeonSSA[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -131,12 +131,12 @@
+ 						}
+ 
+ 					}
+-					else _error_("if vertices_type is MacAyealPattyn, you shoud have nodeonpattyn or nodeonmacayeal");
++					else _error_("if vertices_type is MacAyealHO, you shoud have nodeonHO or nodeonSSA");
+ 			}
+-			/*Also add spcs of coupling: zero at the border pattyn/stokes for the appropriate dofs*/
+-			else if (reCast<int,IssmDouble>(vertices_type[i])==PattynStokesApproximationEnum){
+-				/*If grion,pattyn spc stokes dofs: 3 4 & 5*/
+-					if (reCast<int,IssmDouble>(nodeonpattyn[i])){
++			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
++			else if (reCast<int,IssmDouble>(vertices_type[i])==HOFSApproximationEnum){
++				/*If grion,HO spc FS dofs: 3 4 & 5*/
++					if (reCast<int,IssmDouble>(nodeonHO[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -153,7 +153,7 @@
+ 						}
+ 
+ 					}
+-					else if (reCast<int,IssmDouble>(nodeonstokes[i])){ //spc pattyn nodes: 1 & 2
++					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc HO nodes: 1 & 2
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -171,12 +171,12 @@
+ 							count++;
+ 						}
+ 					}
+-					else _error_("if vertices_type is PattynStokes, you shoud have nodeonpattyn or nodeonstokes");
++					else _error_("if vertices_type is HOFS, you shoud have nodeonHO or nodeonFS");
+ 			}
+-			/*Also add spcs of coupling: zero at the border pattyn/stokes for the appropriate dofs*/
+-			else if (reCast<int,IssmDouble>(vertices_type[i])==MacAyealStokesApproximationEnum){
+-				/*If grion,pattyn spc stokes dofs: 3 4 & 5*/
+-					if (reCast<int,IssmDouble>(nodeonmacayeal[i])){
++			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
++			else if (reCast<int,IssmDouble>(vertices_type[i])==MacAyealFSApproximationEnum){
++				/*If grion,HO spc FS dofs: 3 4 & 5*/
++					if (reCast<int,IssmDouble>(nodeonSSA[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -193,7 +193,7 @@
+ 						}
+ 
+ 					}
+-					else if (reCast<int,IssmDouble>(nodeonstokes[i])){ //spc macayeal nodes: 1 & 2
++					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc SSA nodes: 1 & 2
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -211,7 +211,7 @@
+ 							count++;
+ 						}
+ 					}
+-					else _error_("if vertices_type is MacAyealStokes, you shoud have nodeonmacayeal or nodeonstokes");
++					else _error_("if vertices_type is MacAyealFS, you shoud have nodeonSSA or nodeonFS");
+ 			}
+ 			/*Now add the regular spcs*/
+ 			else{
+@@ -235,7 +235,7 @@
+ 					}
+ 					xDelete<IssmDouble>(values);
+ 				}
+-				else if (vertices_type[i]==HutterApproximationEnum){
++				else if (vertices_type[i]==SIAApproximationEnum){
+ 					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+@@ -258,12 +258,12 @@
+ 					}
+ 					xDelete<IssmDouble>(values);
+ 				}
+-				else if (vertices_type[i]==HutterApproximationEnum){
++				else if (vertices_type[i]==SIAApproximationEnum){
+ 					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+ 
+-				if (reCast<int,IssmDouble>(vertices_type[i])==StokesApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
++				if (reCast<int,IssmDouble>(vertices_type[i])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
+ 					if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+ 						count++;
+@@ -285,23 +285,23 @@
+ 
+ 				}
+ 				if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,g*rho_ice*(surface[i]-z[i])/stokesreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+ 					count++;
+ 				}
+ 			}
+ 
+ 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonstokes[i])){
++			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
+ 				 switch(reCast<int,IssmDouble>(vertices_type[i])){
+-					case MacAyealStokesApproximationEnum:
++					case MacAyealFSApproximationEnum:
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,DiagnosticHorizAnalysisEnum));
+ 						count++;
+ 						break;
+-					case PattynStokesApproximationEnum:
++					case HOFSApproximationEnum:
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,DiagnosticHorizAnalysisEnum));
+ 						count++;
+ 						break;
+-					case StokesApproximationEnum:
++					case FSApproximationEnum:
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0.,DiagnosticHorizAnalysisEnum));
+ 						count++;
+ 						break;
+@@ -312,7 +312,7 @@
+ 	}
+ 
+ 	/*SPC Quadratic elements*/
+-	if(ismacayeal && fe_ssa==1){
++	if(isSSA && fe_ssa==1){
+ 
+ 		int   v1,v2;
+ 		bool *my_edges = NULL;
+@@ -337,7 +337,7 @@
+ 									2,(spcvy[v1]+spcvy[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+-				if (reCast<int,IssmDouble>(vertices_type[v1])==StokesApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){
++				if (reCast<int,IssmDouble>(vertices_type[v1])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){
+ 					if(!xIsNan<IssmDouble>(spcvz[v1]) && !xIsNan<IssmDouble>(spcvz[v2])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+ 										3,(spcvz[v1]+spcvz[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
+@@ -355,9 +355,9 @@
+ 	iomodel->DeleteData(spcvx,DiagnosticSpcvxEnum);
+ 	iomodel->DeleteData(spcvy,DiagnosticSpcvyEnum);
+ 	iomodel->DeleteData(spcvz,DiagnosticSpcvzEnum);
+-	iomodel->DeleteData(nodeonmacayeal,FlowequationBordermacayealEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonpattyn,FlowequationBorderpattynEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonstokes,FlowequationBorderstokesEnum);
++	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+ 	if(iomodel->dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+ 	if(iomodel->dim==3)iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
+ 	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15564)
+@@ -11,21 +11,21 @@
+ void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	bool   ismacayeal,isl1l2,ispattyn,isstokes;
++	bool   isSSA,isL1L2,isHO,isFS;
+ 	int    finiteelementssa;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
+-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
+-	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
+-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+-	iomodel->Constant(&finiteelementssa,FlowequationFeSsaEnum);
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++	iomodel->Constant(&finiteelementssa,FlowequationFeSSAEnum);
+ 
+-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+-	if(!ismacayeal & !isl1l2 & !ispattyn & !isstokes) return;
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+ 
+ 	/*Create nodes: */
+-	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
++	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 	if(finiteelementssa==0){
+ 		CreateNodes(pnodes,iomodel,DiagnosticHorizAnalysisEnum,P1Enum);
+@@ -36,6 +36,6 @@
+ 	else{
+ 		_error_("finite element not supported yet");
+ 	}
+-	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
++	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15564)
+@@ -38,11 +38,11 @@
+ void CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel);
+ void UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+-/*diagnostic hutter*/
+-void CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++/*diagnostic SIA*/
++void CreateNodesDiagnosticSIA(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsDiagnosticSIA(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsDiagnosticSIA(Loads** ploads, IoModel* iomodel);
++void UpdateElementsDiagnosticSIA(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ #ifdef _HAVE_GIA_
+ /*gia*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15564)
+@@ -23,45 +23,45 @@
+ 				case L1L2ApproximationEnum:
+ 					numdofs=2;
+ 					break;
+-				case PattynApproximationEnum:
++				case HOApproximationEnum:
+ 					numdofs=2;
+ 					break;
+-				case HutterApproximationEnum:
++				case SIAApproximationEnum:
+ 					numdofs=2;
+ 					break;
+-				case StokesApproximationEnum:
++				case FSApproximationEnum:
+ 					numdofs=4;
+ 					break;
+ 				case NoneApproximationEnum:
+ 					numdofs=4;
+ 					break;
+-				case MacAyealPattynApproximationEnum:
++				case MacAyealHOApproximationEnum:
+ 					numdofs=4;
+ 					doftype=xNew<int>(numdofs);
+ 					doftype[0]=MacAyealApproximationEnum;
+ 					doftype[1]=MacAyealApproximationEnum;
+-					doftype[2]=PattynApproximationEnum;
+-					doftype[3]=PattynApproximationEnum;
++					doftype[2]=HOApproximationEnum;
++					doftype[3]=HOApproximationEnum;
+ 					break;
+-				case PattynStokesApproximationEnum:
++				case HOFSApproximationEnum:
+ 					numdofs=6;
+ 					doftype=xNew<int>(numdofs);
+-					doftype[0]=PattynApproximationEnum;
+-					doftype[1]=PattynApproximationEnum;
+-					doftype[2]=StokesApproximationEnum;
+-					doftype[3]=StokesApproximationEnum;
+-					doftype[4]=StokesApproximationEnum;
+-					doftype[5]=StokesApproximationEnum;
++					doftype[0]=HOApproximationEnum;
++					doftype[1]=HOApproximationEnum;
++					doftype[2]=FSApproximationEnum;
++					doftype[3]=FSApproximationEnum;
++					doftype[4]=FSApproximationEnum;
++					doftype[5]=FSApproximationEnum;
+ 					break;
+-				case MacAyealStokesApproximationEnum:
++				case MacAyealFSApproximationEnum:
+ 					numdofs=6;
+ 					doftype=xNew<int>(numdofs);
+ 					doftype[0]=MacAyealApproximationEnum;
+ 					doftype[1]=MacAyealApproximationEnum;
+-					doftype[2]=StokesApproximationEnum;
+-					doftype[3]=StokesApproximationEnum;
+-					doftype[4]=StokesApproximationEnum;
+-					doftype[5]=StokesApproximationEnum;
++					doftype[2]=FSApproximationEnum;
++					doftype[3]=FSApproximationEnum;
++					doftype[4]=FSApproximationEnum;
++					doftype[5]=FSApproximationEnum;
+ 					break;
+ 				default:
+ 					_error_("Approximationtype " << node_type << " (" << EnumToStringx(node_type) << ") not implemented yet for DiagnosticHoriz");
+@@ -71,7 +71,7 @@
+ 		case DiagnosticVertAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+-		case DiagnosticHutterAnalysisEnum:
++		case DiagnosticSIAAnalysisEnum:
+ 			numdofs=2;
+ 			break;
+ 		case BedSlopeAnalysisEnum:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15564)
+@@ -44,12 +44,12 @@
+ 
+ 	/*Copy some constants from iomodel */
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshDimensionEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIshutterEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsmacayealEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsl1l2Enum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIspattynEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsstokesEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeStokesEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSIAEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSSAEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsL1L2Enum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsHOEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeFSEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticRestolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticReltolEnum));
+@@ -81,7 +81,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyThresholdEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyLockEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticRiftPenaltyThresholdEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticStokesreconditioningEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticFSreconditioningEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticShelfDampeningEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticViscosityOvershootEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsWaitonlockEnum));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15564)
+@@ -58,7 +58,7 @@
+ 		if(solution_type==TransientSolutionEnum && analysis_type==PrognosticAnalysisEnum && isprognostic==false && isgroundingline==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticHorizAnalysisEnum && isdiagnostic==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticVertAnalysisEnum && isdiagnostic==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticHutterAnalysisEnum && isdiagnostic==false) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticSIAAnalysisEnum && isdiagnostic==false) continue;
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15564)
+@@ -54,11 +54,11 @@
+ 			UpdateElementsDiagnosticVert(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 
+-		case DiagnosticHutterAnalysisEnum:
+-			CreateNodesDiagnosticHutter(pnodes, iomodel);
+-			CreateConstraintsDiagnosticHutter(pconstraints,iomodel);
+-			CreateLoadsDiagnosticHutter(ploads,iomodel);
+-			UpdateElementsDiagnosticHutter(elements,iomodel,analysis_counter,analysis_type);
++		case DiagnosticSIAAnalysisEnum:
++			CreateNodesDiagnosticSIA(pnodes, iomodel);
++			CreateConstraintsDiagnosticSIA(pconstraints,iomodel);
++			CreateLoadsDiagnosticSIA(ploads,iomodel);
++			UpdateElementsDiagnosticSIA(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp	(revision 15564)
+@@ -1,5 +1,5 @@
+ /*!\file ResetCoordinateSystemx
+- * \brief: reset coordinate system for full-Stokes: tangential to the bedrock
++ * \brief: reset coordinate system for full-FS: tangential to the bedrock
+  */
+ 
+ #include "./ResetCoordinateSystemx.h"
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15564)
+@@ -1,5 +1,5 @@
+-/*!\file: solutionsequence_stokescoupling_nonlinear.cpp
+- * \brief: core of the coupling between stokes and macayealpattyn
++/*!\file: solutionsequence_FScoupling_nonlinear.cpp
++ * \brief: core of the coupling between FS and SSAHO
+  */ 
+ 
+ #include "./solutionsequences.h"
+@@ -8,7 +8,7 @@
+ #include "../shared/shared.h"
+ #include "../modules/modules.h"
+ 
+-void solutionsequence_stokescoupling_nonlinear(FemModel* femmodel,bool conserve_loads){
++void solutionsequence_FScoupling_nonlinear(FemModel* femmodel,bool conserve_loads){
+ 
+ 	/*intermediary: */
+ 	Matrix<IssmDouble> *Kff_horiz    = NULL;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequences.h
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 15563)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 15564)
+@@ -15,7 +15,7 @@
+ void solutionsequence_hydro_nonlinear(FemModel* femmodel);
+ void solutionsequence_nonlinear(FemModel* femmodel,bool conserve_loads);
+ void solutionsequence_newton(FemModel* femmodel);
+-void solutionsequence_stokescoupling_nonlinear(FemModel* femmodel,bool conserve_loads);
++void solutionsequence_FScoupling_nonlinear(FemModel* femmodel,bool conserve_loads);
+ void solutionsequence_linear(FemModel* femmodel);
+ void solutionsequence_adjoint_linear(FemModel* femmodel);
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp	(revision 15564)
+@@ -59,8 +59,8 @@
+ 	#endif
+ 
+ 	PetscOptionsGetString(PETSC_NULL,"-issm_option_solver",&option[0],100,&flag);
+-	if (strcmp(option,"stokes")==0){
+-		solver_type=StokesSolverEnum;
++	if (strcmp(option,"FS")==0){
++		solver_type=FSSolverEnum;
+ 	}
+ 
+ 	*psolver_type=solver_type;
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 15564)
+@@ -51,7 +51,7 @@
+ 	PetscBool flag,flg;
+ 	#endif
+ 
+-	/*Stokes: */
++	/*FS: */
+ 	IS         isv=NULL;
+ 	IS         isp=NULL;
+ 
+@@ -117,11 +117,11 @@
+ 		#endif
+ 	}
+ 
+-	/*Stokes: */
+-	if (solver_type==StokesSolverEnum){
++	/*FS: */
++	if (solver_type==FSSolverEnum){
+ 		/*Make indices out of doftypes: */
+-		if(!df)_error_("need doftypes for Stokes solver!\n");
+-		DofTypesToIndexSet(&isv,&isp,df,StokesSolverEnum);
++		if(!df)_error_("need doftypes for FS solver!\n");
++		DofTypesToIndexSet(&isv,&isp,df,FSSolverEnum);
+ 
+ 		/*Set field splits: */
+ 		KSPGetPC(ksp,&pc);
+@@ -178,7 +178,7 @@
+ 	int      pressure_count=0;
+ 	int      velocity_count=0;
+ 
+-	if(typeenum==StokesSolverEnum){
++	if(typeenum==FSSolverEnum){
+ 
+ 		/*Ok, recover doftypes vector values and indices: */
+ 		VecGetOwnershipRange(df,&start,&end);
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15564)
+@@ -350,8 +350,8 @@
+ 	*pviscosity3d=viscosity3d;
+ }
+ /*}}}*/
+-/*FUNCTION Matdamageice::GetViscosity3dStokes {{{*/
+-void  Matdamageice::GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon){
++/*FUNCTION Matdamageice::GetViscosity3dFS {{{*/
++void  Matdamageice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+ 	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
+ 	 *
+ 	 *                                          B
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15564)
+@@ -341,8 +341,8 @@
+ 	*pviscosity3d=viscosity3d;
+ }
+ /*}}}*/
+-/*FUNCTION Matice::GetViscosity3dStokes {{{*/
+-void  Matice::GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon){
++/*FUNCTION Matice::GetViscosity3dFS {{{*/
++void  Matice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+ 	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
+ 	 *
+ 	 *                                          B
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 15564)
+@@ -27,7 +27,7 @@
+ 		virtual void       GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum)=0;
+ 		virtual void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon)=0;
+-		virtual void       GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon)=0;
++		virtual void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon)=0;
+ 		virtual void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 15564)
+@@ -51,7 +51,7 @@
+ 		void   SetCurrentConfiguration(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin);
+ 		void   GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon);
+ 		void   GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
+-		void   GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon);
++		void   GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+ 		void   GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+ 		void   GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+ 		void   GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 15564)
+@@ -58,7 +58,7 @@
+ 		void       SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+ 		void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon);
+ 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
+-		void       GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon);
++		void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+ 		void GetViscosityZComplement(IssmDouble*, IssmDouble*){_error_("not supported");};
+ 		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 15564)
+@@ -88,7 +88,7 @@
+ 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){return;}
+ 		void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon){_error_("not supported");};
+-		void       GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon){_error_("not supported");};
++		void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){_error_("not supported");};
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15564)
+@@ -96,8 +96,8 @@
+ 		#endif
+         #ifdef _HAVE_3D_
+ 		ElementVector* CreatePVectorDiagnosticMacAyeal3d(void);
+-		ElementVector* CreatePVectorDiagnosticPattyn(void);
+-		ElementVector* CreatePVectorDiagnosticStokes(void);
++		ElementVector* CreatePVectorDiagnosticHO(void);
++		ElementVector* CreatePVectorDiagnosticFS(void);
+ 	    #endif
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15564)
+@@ -300,34 +300,34 @@
+ 	switch(approximation0){
+ 		case MacAyealApproximationEnum:
+ 			switch(approximation1){
+-				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealPattyn(kmax); 
+-				case PattynApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealPattyn(kmax); 
++				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
++				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+-		case PattynApproximationEnum:
++		case HOApproximationEnum:
+ 			switch(approximation1){
+-				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealPattyn(kmax); 
+-				case PattynApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealPattyn(kmax); 
++				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
++				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+-		case StokesApproximationEnum:
++		case FSApproximationEnum:
+ 			switch(approximation1){
+-				case StokesApproximationEnum: return PenaltyCreateKMatrixDiagnosticStokes(kmax); 
+-				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticStokes(kmax); 
++				case FSApproximationEnum: return PenaltyCreateKMatrixDiagnosticFS(kmax); 
++				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticFS(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+ 		case NoneApproximationEnum:
+ 			switch(approximation1){
+-				case StokesApproximationEnum: return PenaltyCreateKMatrixDiagnosticStokes(kmax); 
+-				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticStokes(kmax); 
++				case FSApproximationEnum: return PenaltyCreateKMatrixDiagnosticFS(kmax); 
++				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticFS(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+ 		default: _error_("not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticMacAyealPattyn {{{*/
+-ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticMacAyealPattyn(IssmDouble kmax){
++/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticMacAyealHO {{{*/
++ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticMacAyealHO(IssmDouble kmax){
+ 
+ 	const int numdof=NUMVERTICES*NDOF2;
+ 	IssmDouble penalty_offset;
+@@ -353,8 +353,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticStokes {{{*/
+-ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax){
++/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticFS {{{*/
++ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax){
+ 
+ 	const int numdof=NUMVERTICES*NDOF4;
+ 	IssmDouble penalty_offset;
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15564)
+@@ -67,8 +67,8 @@
+ 		/*}}}*/
+ 			/*Penpair management: {{{*/
+ 		ElementMatrix* PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax);
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticMacAyealPattyn(IssmDouble kmax);
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixDiagnosticMacAyealHO(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);
+ 		ElementMatrix* PenaltyCreateKMatrixPrognostic(IssmDouble kmax);
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15564)
+@@ -222,7 +222,7 @@
+ 	switch(analysis_type){
+ 		#ifdef _HAVE_DIAGNOSTIC_
+ 		case DiagnosticHorizAnalysisEnum: case AdjointHorizAnalysisEnum:
+-			Ke=PenaltyCreateKMatrixDiagnosticStokes(kmax);
++			Ke=PenaltyCreateKMatrixDiagnosticFS(kmax);
+ 			break;
+ 		#endif
+ 		#ifdef _HAVE_THERMAL_
+@@ -448,8 +448,8 @@
+ }
+ /*}}}*/
+ #ifdef _HAVE_DIAGNOSTIC_
+-/*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticStokes {{{*/
+-ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax){
++/*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticFS {{{*/
++ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax){
+ 
+ 	const int numdof = NUMVERTICES *NDOF4;
+ 	IssmDouble    slope[2];
+@@ -460,8 +460,8 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	penta->inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=StokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters,StokesApproximationEnum);
++	if(approximation!=FSApproximationEnum &&  approximation!=HOFSApproximationEnum) return NULL;
++	ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15564)
+@@ -74,7 +74,7 @@
+ 		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+ 		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+ 	}
+-	else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
++	else if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
+ 		numnodes    = 4;
+ 		numvertices = 4;
+ 		icefront_node_ids   = xNew<int>(numnodes);
+@@ -157,7 +157,7 @@
+ //		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+ //		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+ 	}
+-	else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
++	else if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
+ //		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+ //		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+ //		icefront_node_ids[2]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
+@@ -169,7 +169,7 @@
+ 	}
+ 	else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!");
+ 
+-	if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
++	if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
+ 		numnodes=4;
+ 		numvertices=4;
+ 	}
+@@ -379,8 +379,8 @@
+ 			for(int i=0;i<NUMVERTICESSEG;i++) sidlist[i]=nodes[i]->Sid();
+ 			return;
+ #ifdef _HAVE_3D_
+-		case PattynIceFrontEnum:
+-		case StokesIceFrontEnum:
++		case HOIceFrontEnum:
++		case FSIceFrontEnum:
+ 			for(int i=0;i<NUMVERTICESQUA;i++) sidlist[i]=nodes[i]->Sid();
+ 			return;
+ #endif
+@@ -401,9 +401,9 @@
+ #ifdef _HAVE_3D_
+ 		case MacAyeal3dIceFrontEnum:
+ 			return NUMVERTICESSEG;
+-		case PattynIceFrontEnum:
++		case HOIceFrontEnum:
+ 			return NUMVERTICESQUA;
+-		case StokesIceFrontEnum:
++		case FSIceFrontEnum:
+ 			return NUMVERTICESQUA;
+ #endif
+ 		default:
+@@ -563,10 +563,10 @@
+         #ifdef _HAVE_3D_
+ 		case MacAyeal3dIceFrontEnum:
+ 			return CreatePVectorDiagnosticMacAyeal3d();
+-		case PattynIceFrontEnum:
+-			return CreatePVectorDiagnosticPattyn();
+-		case StokesIceFrontEnum:
+-			return CreatePVectorDiagnosticStokes();
++		case HOIceFrontEnum:
++			return CreatePVectorDiagnosticHO();
++		case FSIceFrontEnum:
++			return CreatePVectorDiagnosticFS();
+ 	    #endif
+ 		default:
+ 			_error_("Icefront type " << EnumToStringx(type) << " not supported yet");
+@@ -695,8 +695,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Icefront::CreatePVectorDiagnosticPattyn{{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticPattyn(void){
++/*FUNCTION Icefront::CreatePVectorDiagnosticHO{{{*/
++ElementVector* Icefront::CreatePVectorDiagnosticHO(void){
+ 
+ 	/*Constants*/
+ 	const int numdofs = NUMVERTICESQUA *NDOF2;
+@@ -716,7 +716,7 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	if(penta->IsOnWater()) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,PattynApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,HOApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICESQUA);
+@@ -772,8 +772,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Icefront::CreatePVectorDiagnosticStokes{{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticStokes(void){
++/*FUNCTION Icefront::CreatePVectorDiagnosticFS{{{*/
++ElementVector* Icefront::CreatePVectorDiagnosticFS(void){
+ 
+ 	/*Constants*/
+ 	const int numdofs = NUMVERTICESQUA *NDOF4;
+@@ -793,7 +793,7 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	if(penta->IsOnWater()) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,StokesApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICESQUA);
+@@ -832,7 +832,7 @@
+ 				_error_("fill type " << EnumToStringx(fill) << " not supported yet");
+ 		}
+ 		air_pressure=0;
+-		pressure = water_pressure + air_pressure; //no ice pressure fore Stokes
++		pressure = water_pressure + air_pressure; //no ice pressure fore FS
+ 
+ 		for(i=0;i<NUMVERTICESQUA;i++){
+ 			for(j=0;j<NDOF4;j++){
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 15564)
+@@ -87,7 +87,7 @@
+ 		/*}}}*/
+ 		/*Pengrid management {{{*/
+ 		#ifdef _HAVE_DIAGNOSTIC_
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);
+ 		#endif
+ 		#ifdef _HAVE_THERMAL_
+ 		ElementMatrix* PenaltyCreateKMatrixThermal(IssmDouble kmax);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15564)
+@@ -192,8 +192,8 @@
+ 		case DiagnosticHorizAnalysisEnum:
+ 			Ke=CreateKMatrixDiagnosticMacAyeal();
+ 			break;
+-		case DiagnosticHutterAnalysisEnum:
+-			Ke=CreateKMatrixDiagnosticHutter();
++		case DiagnosticSIAAnalysisEnum:
++			Ke=CreateKMatrixDiagnosticSIA();
+ 			break;
+ 		 #endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+@@ -305,8 +305,8 @@
+ 		case DiagnosticHorizAnalysisEnum:
+ 			pe=CreatePVectorDiagnosticMacAyeal();
+ 			break;
+-		case DiagnosticHutterAnalysisEnum:
+-			pe=CreatePVectorDiagnosticHutter();
++		case DiagnosticSIAAnalysisEnum:
++			pe=CreatePVectorDiagnosticSIA();
+ 			break;
+ 		#endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+@@ -422,7 +422,7 @@
+ 	switch(analysis_type){
+ #ifdef _HAVE_DIAGNOSTIC_
+ 		case DiagnosticHorizAnalysisEnum:
+-			Ke=CreateJacobianDiagnosticMacayeal();
++			Ke=CreateJacobianDiagnosticSSA();
+ 			break;
+ #endif
+ 		default:
+@@ -1200,8 +1200,8 @@
+ 	case DiagnosticHorizAnalysisEnum:
+ 		GetSolutionFromInputsDiagnosticHoriz(solution);
+ 		break;
+-	case DiagnosticHutterAnalysisEnum:
+-		GetSolutionFromInputsDiagnosticHutter(solution);
++	case DiagnosticSIAAnalysisEnum:
++		GetSolutionFromInputsDiagnosticSIA(solution);
+ 		break;
+ 	#endif
+ 	#ifdef _HAVE_HYDROLOGY_
+@@ -1521,7 +1521,7 @@
+ 		case DiagnosticHorizAnalysisEnum:
+ 			InputUpdateFromSolutionDiagnosticHoriz(solution);
+ 			break;
+-		case DiagnosticHutterAnalysisEnum:
++		case DiagnosticSIAAnalysisEnum:
+ 			InputUpdateFromSolutionDiagnosticHoriz(solution);
+ 			break;
+ 		#endif
+@@ -2342,7 +2342,7 @@
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&progstabilization,PrognosticStabilizationEnum);
+ 	iomodel->Constant(&balancestabilization,BalancethicknessStabilizationEnum);
+-	iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum);
++	iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 
+ 	/*Recover element type*/
+@@ -3054,8 +3054,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixDiagnosticHutter{{{*/
+-ElementMatrix* Tria::CreateKMatrixDiagnosticHutter(void){
++/*FUNCTION Tria::CreateKMatrixDiagnosticSIA{{{*/
++ElementMatrix* Tria::CreateKMatrixDiagnosticSIA(void){
+ 
+ 	/*Intermediaries*/
+ 	const int numdof=NUMVERTICES*NDOF2;
+@@ -3223,8 +3223,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorDiagnosticHutter{{{*/
+-ElementVector* Tria::CreatePVectorDiagnosticHutter(void){
++/*FUNCTION Tria::CreatePVectorDiagnosticSIA{{{*/
++ElementVector* Tria::CreatePVectorDiagnosticSIA(void){
+ 
+ 	/*Intermediaries */
+ 	int        i,connectivity;
+@@ -3273,8 +3273,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateJacobianDiagnosticMacayeal{{{*/
+-ElementMatrix* Tria::CreateJacobianDiagnosticMacayeal(void){
++/*FUNCTION Tria::CreateJacobianDiagnosticSSA{{{*/
++ElementMatrix* Tria::CreateJacobianDiagnosticSSA(void){
+ 
+ 	/*Intermediaries */
+ 	int        i,j;
+@@ -3381,8 +3381,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetSolutionFromInputsDiagnosticHutter{{{*/
+-void  Tria::GetSolutionFromInputsDiagnosticHutter(Vector<IssmDouble>* solution){
++/*FUNCTION Tria::GetSolutionFromInputsDiagnosticSIA{{{*/
++void  Tria::GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -3493,8 +3493,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputUpdateFromSolutionDiagnosticHutter {{{*/
+-void  Tria::InputUpdateFromSolutionDiagnosticHutter(IssmDouble* solution){
++/*FUNCTION Tria::InputUpdateFromSolutionDiagnosticSIA {{{*/
++void  Tria::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){
+ 
+ 	int        i;
+ 	IssmDouble rho_ice,g;
+@@ -5136,8 +5136,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorAdjointStokes{{{*/
+-ElementVector* Tria::CreatePVectorAdjointStokes(void){
++/*FUNCTION Tria::CreatePVectorAdjointFS{{{*/
++ElementVector* Tria::CreatePVectorAdjointFS(void){
+ 
+ 	/*Intermediaries */
+ 	int        i,resp;
+@@ -5155,7 +5155,7 @@
+ 	GaussTria* gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 15564)
+@@ -23,9 +23,9 @@
+ 
+ 		/*Numerics*/
+ 		void GetBMacAyeal(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+-		void GetBMacAyealStokes(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBMacAyealFS(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBprimeMacAyeal(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+-		void GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBprimePrognostic(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBPrognostic(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBHydro(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15564)
+@@ -53,8 +53,8 @@
+ /*}}}*/
+ 
+ /*Reference Element numerics*/
+-/*FUNCTION PentaRef::GetBMacAyealPattyn {{{*/
+-void PentaRef::GetBMacAyealPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBMacAyealHO {{{*/
++void PentaRef::GetBMacAyealHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -84,8 +84,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBMacAyealStokes{{{*/
+-void PentaRef::GetBMacAyealStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBMacAyealFS{{{*/
++void PentaRef::GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -130,8 +130,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBPattyn {{{*/
+-void PentaRef::GetBPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBHO {{{*/
++void PentaRef::GetBHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -170,8 +170,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBprimePattyn {{{*/
+-void PentaRef::GetBprimePattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss_coord){
++/*FUNCTION PentaRef::GetBprimeHO {{{*/
++void PentaRef::GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss_coord){
+ 	/*Compute B  prime matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -208,8 +208,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBprimeMacAyealStokes{{{*/
+-void PentaRef::GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBprimeMacAyealFS{{{*/
++void PentaRef::GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Compute Bprime  matrix. Bprime=[Bprime1 Bprime2 Bprime3 Bprime4 Bprime5 Bprime6] where Bprimei is of size 5*NDOF2. 
+ 	 * For node i, Bprimei can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -248,8 +248,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBStokes {{{*/
+-void PentaRef::GetBStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBFS {{{*/
++void PentaRef::GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*NDOF4. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+@@ -315,8 +315,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBStokesGLS {{{*/
+-void PentaRef::GetBStokesGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBFSGLS {{{*/
++void PentaRef::GetBFSGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*NDOF4. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+@@ -381,8 +381,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBprimeStokes {{{*/
+-void PentaRef::GetBprimeStokes(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBprimeFS {{{*/
++void PentaRef::GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*	Compute B'  matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 
+ 	 *	For node i, Bi' can be expressed in the actual coordinate system
+ 	 *	by: 
+@@ -448,8 +448,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBprimeStokesGLS {{{*/
+-void PentaRef::GetBprimeStokesGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBprimeFSGLS {{{*/
++void PentaRef::GetBprimeFSGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*	Compute B'  matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 
+ 	 *	For node i, Bi' can be expressed in the actual coordinate system
+ 	 *	by: 
+@@ -617,8 +617,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBPattynFriction{{{*/
+-void PentaRef::GetBPattynFriction(IssmDouble* B, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBHOFriction{{{*/
++void PentaRef::GetBHOFriction(IssmDouble* B, GaussPenta* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is square and of size 2x2. 
+ 	 ** For node i, Bi can be expressed in the actual coordinate system
+ 	 ** by: 
+@@ -641,8 +641,8 @@
+ 	}
+ } 
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLStokes{{{*/
+-void PentaRef::GetLStokes(IssmDouble* LStokes, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLFS{{{*/
++void PentaRef::GetLFS(IssmDouble* LFS, GaussPenta* gauss){
+ 	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -654,29 +654,29 @@
+ 	 */
+ 
+ 	const int num_dof=4;
+-	IssmDouble l1l2l3[NUMNODESP1_2d];
++	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 
+-	/*Get l1l2l3 in actual coordinate system: */
+-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	/*Get L1L2l3 in actual coordinate system: */
++	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
++	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
++	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+-	/*Build LStokes: */
++	/*Build LFS: */
+ 	for(int i=0;i<3;i++){
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+ 
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLprimeStokes {{{*/
+-void PentaRef::GetLprimeStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLprimeFS {{{*/
++void PentaRef::GetLprimeFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
+ 	 * For node i, Lpi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -714,79 +714,79 @@
+ 	int i;
+ 	int num_dof=4;
+ 
+-	IssmDouble l1l2l3[NUMNODESP1_2d];
++	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 	IssmDouble dbasis[3][NUMNODESP1];
+ 
+-	/*Get l1l2l3 in actual coordinate system: */
+-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	/*Get L1L2l3 in actual coordinate system: */
++	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
++	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
++	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+ 	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
+ 
+-	/*Build LprimeStokes: */
++	/*Build LprimeFS: */
+ 	for(int i=0;i<3;i++){
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0]  = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1]  = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0]  = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1]  = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+2]  = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+2]  = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+2]  = dbasis[2][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+2]  = dbasis[2][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+0]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+1]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+2]  = dbasis[2][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+0]  = dbasis[2][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+1]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+2]  = dbasis[0][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+3]  = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+1] = dbasis[2][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+2] = dbasis[1][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+3] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+2] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+3] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+2] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+3] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+1] = 0;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+2] = 0;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+3] = l1l2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0]  = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1]  = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0]  = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1]  = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+2]  = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+2]  = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+2]  = dbasis[2][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+2]  = dbasis[2][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+0]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+1]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+2]  = dbasis[2][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+0]  = dbasis[2][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+1]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+2]  = dbasis[0][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+3]  = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+1] = dbasis[2][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+2] = dbasis[1][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+3] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+2] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+3] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+2] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+3] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+1] = 0;
++		LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+2] = 0;
++		LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+3] = L1L2l3[i];
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLMacAyealStokes {{{*/
+-void PentaRef::GetLMacAyealStokes(IssmDouble* LStokes, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLMacAyealFS {{{*/
++void PentaRef::GetLMacAyealFS(IssmDouble* LFS, GaussPenta* gauss){
+ 	/*
+ 	 * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+@@ -803,36 +803,36 @@
+ 	 */
+ 
+ 	int num_dof=2;
+-	IssmDouble l1l2l3[NUMNODESP1_2d];
++	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 
+-	/*Get l1l2l3 in actual coordinate system: */
+-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	/*Get L1L2l3 in actual coordinate system: */
++	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
++	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
++	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+-	/*Build LStokes: */
++	/*Build LFS: */
+ 	for(int i=0;i<3;i++){
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0;
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0;
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0;
+-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0;
+-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0;
+-		LStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0;
+-		LStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0;
+-		LStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0;
+-		LStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = l1l2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0;
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0;
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0;
++		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0;
++		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0;
++		LFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0;
++		LFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0;
++		LFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0;
++		LFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = L1L2l3[i];
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLprimeMacAyealStokes {{{*/
+-void PentaRef::GetLprimeMacAyealStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLprimeMacAyealFS {{{*/
++void PentaRef::GetLprimeMacAyealFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
+ 	 * For node i, Lpi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -847,55 +847,55 @@
+ 	 * where h is the interpolation function for node i.
+ 	 */
+ 	int num_dof=4;
+-	IssmDouble l1l2l3[NUMNODESP1_2d];
++	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 	IssmDouble dbasis[3][NUMNODESP1];
+ 
+-	/*Get l1l2l3 in actual coordinate system: */
+-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	/*Get L1L2l3 in actual coordinate system: */
++	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
++	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
++	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+ 	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
+ 
+-	/*Build LprimeStokes: */
++	/*Build LprimeFS: */
+ 	for(int i=0;i<3;i++){
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = dbasis[2][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = dbasis[2][i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = l1l2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = dbasis[2][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = dbasis[2][i];
++		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = L1L2l3[i];
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLStokesMacAyeal {{{*/
+-void PentaRef::GetLStokesMacAyeal(IssmDouble* LStokes, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLFSMacAyeal {{{*/
++void PentaRef::GetLFSMacAyeal(IssmDouble* LFS, GaussPenta* gauss){
+ 	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -907,36 +907,36 @@
+ 	 */
+ 
+ 	int num_dof=4;
+-	IssmDouble l1l2l3[NUMNODESP1_2d];
++	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 
+-	/*Get l1l2l3 in actual coordinate system: */
+-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	/*Get L1L2l3 in actual coordinate system: */
++	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
++	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
++	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 
+-	/*Build LStokes: */
++	/*Build LFS: */
+ 	for(int i=0;i<3;i++){
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
+-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = l1l2l3[i];
+-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
++		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = L1L2l3[i];
++		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLprimeStokesMacAyeal {{{*/
+-void PentaRef::GetLprimeStokesMacAyeal(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLprimeFSMacAyeal {{{*/
++void PentaRef::GetLprimeFSMacAyeal(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
+ 	 * For node i, Lpi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -947,25 +947,25 @@
+ 	 * where h is the interpolation function for node i.
+ 	 */
+ 	int num_dof=2;
+-	IssmDouble l1l2l3[NUMNODESP1_2d];
++	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 	IssmDouble dbasis[3][NUMNODESP1];
+ 
+-	/*Get l1l2l3 in actual coordinate system: */
+-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	/*Get L1L2l3 in actual coordinate system: */
++	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
++	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
++	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+ 	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
+ 
+-	/*Build LprimeStokes: */
++	/*Build LprimeFS: */
+ 	for(int i=0;i<3;i++){
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];
+-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
+-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = L1L2l3[i];
++		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
++		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = L1L2l3[i];
+ 	}
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15564)
+@@ -146,7 +146,7 @@
+ 		void   GradjBMacAyeal(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjZMacAyeal(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjDragStokes(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjDragGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+ 		void   GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjVxBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+@@ -222,23 +222,23 @@
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyealViscous(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyealFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticHutter(void);
++		ElementMatrix* CreateKMatrixDiagnosticSIA(void);
+ 		ElementVector* CreatePVectorDiagnosticMacAyeal(void);
+ 		ElementVector* CreatePVectorDiagnosticMacAyealDrivingStress(void);
+ 		ElementVector* CreatePVectorDiagnosticMacAyealFront(void);
+-		ElementVector* CreatePVectorDiagnosticHutter(void);
+-		ElementMatrix* CreateJacobianDiagnosticMacayeal(void);
++		ElementVector* CreatePVectorDiagnosticSIA(void);
++		ElementMatrix* CreateJacobianDiagnosticSSA(void);
+ 		void	  GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution);
+-		void	  GetSolutionFromInputsDiagnosticHutter(Vector<IssmDouble>* solution);
++		void	  GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution);
+ 		void	  InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solution);
+-		void	  InputUpdateFromSolutionDiagnosticHutter( IssmDouble* solution);
++		void	  InputUpdateFromSolutionDiagnosticSIA( IssmDouble* solution);
+ 		#endif
+ 
+ 		#ifdef _HAVE_CONTROL_
+ 		ElementMatrix* CreateKMatrixAdjointBalancethickness(void);
+ 		ElementMatrix* CreateKMatrixAdjointMacAyeal(void);
+ 		ElementVector* CreatePVectorAdjointHoriz(void);
+-		ElementVector* CreatePVectorAdjointStokes(void);
++		ElementVector* CreatePVectorAdjointFS(void);
+ 		ElementVector* CreatePVectorAdjointBalancethickness(void);
+ 		void	  InputUpdateFromSolutionAdjointBalancethickness( IssmDouble* solution);
+ 		void	  InputUpdateFromSolutionAdjointHoriz( IssmDouble* solution);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15564)
+@@ -216,7 +216,7 @@
+ 	int         analysis_type,approximation;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[3][3];
+-	IssmDouble  rho_ice,gravity,stokesreconditioning;
++	IssmDouble  rho_ice,gravity,FSreconditioning;
+ 	IssmDouble  pressure,viscosity,Jdet2d;
+ 	IssmDouble  bed_normal[3];
+ 	IssmDouble  basalforce[3];
+@@ -233,10 +233,10 @@
+ 
+ 	/*Check analysis_types*/
+ 	if (analysis_type!=DiagnosticHorizAnalysisEnum) _error_("Not supported yet!");
+-	if (approximation!=StokesApproximationEnum) _error_("Not supported yet!");
++	if (approximation!=FSApproximationEnum) _error_("Not supported yet!");
+ 
+ 	/*retrieve some parameters: */
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+ 	if(!IsOnBed()){
+ 		//put zero
+@@ -266,13 +266,13 @@
+ 
+ 		/*Compute strain rate viscosity and pressure: */
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 		pressure_input->GetInputValue(&pressure,gauss);
+ 
+ 		/*Compute Stress*/
+-		sigma_xx=2*viscosity*epsilon[0]-pressure*stokesreconditioning; // sigma = nu eps - pressure
+-		sigma_yy=2*viscosity*epsilon[1]-pressure*stokesreconditioning;
+-		sigma_zz=2*viscosity*epsilon[2]-pressure*stokesreconditioning;
++		sigma_xx=2*viscosity*epsilon[0]-pressure*FSreconditioning; // sigma = nu eps - pressure
++		sigma_yy=2*viscosity*epsilon[1]-pressure*FSreconditioning;
++		sigma_zz=2*viscosity*epsilon[2]-pressure*FSreconditioning;
+ 		sigma_xy=2*viscosity*epsilon[3];
+ 		sigma_xz=2*viscosity*epsilon[4];
+ 		sigma_yz=2*viscosity*epsilon[5];
+@@ -414,8 +414,8 @@
+ 		case AdjointHorizAnalysisEnum:
+ 			Ke=CreateKMatrixAdjointHoriz();
+ 			break;
+-		case DiagnosticHutterAnalysisEnum:
+-			Ke=CreateKMatrixDiagnosticHutter();
++		case DiagnosticSIAAnalysisEnum:
++			Ke=CreateKMatrixDiagnosticSIA();
+ 			break;
+ 		case DiagnosticVertAnalysisEnum:
+ 			Ke=CreateKMatrixDiagnosticVert();
+@@ -545,8 +545,8 @@
+ 		case DiagnosticHorizAnalysisEnum:
+ 			pe=CreatePVectorDiagnosticHoriz();
+ 			break;
+-		case DiagnosticHutterAnalysisEnum:
+-			pe=CreatePVectorDiagnosticHutter();
++		case DiagnosticSIAAnalysisEnum:
++			pe=CreatePVectorDiagnosticSIA();
+ 			break;
+ 		case DiagnosticVertAnalysisEnum:
+ 			pe=CreatePVectorDiagnosticVert();
+@@ -1189,18 +1189,18 @@
+ 	case DiagnosticHorizAnalysisEnum:
+ 		int approximation;
+ 		inputs->GetInputValue(&approximation,ApproximationEnum);
+-		if(approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
+-			GetSolutionFromInputsDiagnosticStokes(solution);
++		if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
++			GetSolutionFromInputsDiagnosticFS(solution);
+ 		}
+-		else if (approximation==MacAyealApproximationEnum || approximation==PattynApproximationEnum || approximation==HutterApproximationEnum){
++		else if (approximation==MacAyealApproximationEnum || approximation==HOApproximationEnum || approximation==SIAApproximationEnum){
+ 			GetSolutionFromInputsDiagnosticHoriz(solution);
+ 		}
+-		else if (approximation==MacAyealPattynApproximationEnum || approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
++		else if (approximation==MacAyealHOApproximationEnum || approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
+ 			return; //the elements around will create the solution
+ 		}
+ 		break;
+-	case DiagnosticHutterAnalysisEnum:
+-		GetSolutionFromInputsDiagnosticHutter(solution);
++	case DiagnosticSIAAnalysisEnum:
++		GetSolutionFromInputsDiagnosticSIA(solution);
+ 		break;
+ 	case DiagnosticVertAnalysisEnum:
+ 		//GetSolutionFromInputsDiagnosticVert(solution);
+@@ -1248,9 +1248,9 @@
+ 	return tau_parameter;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetStrainRate3dPattyn{{{*/
+-void Penta::GetStrainRate3dPattyn(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input){
+-	/*Compute the 3d Blatter/PattynStrain Rate (5 components):
++/*FUNCTION Penta::GetStrainRate3dHO{{{*/
++void Penta::GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input){
++	/*Compute the 3d Blatter/HOStrain Rate (5 components):
+ 	 *
+ 	 * epsilon=[exx eyy exy exz eyz]
+ 	 *
+@@ -1270,8 +1270,8 @@
+ 	}
+ 
+ 	/*Get strain rate assuming that epsilon has been allocated*/
+-	vx_input->GetVxStrainRate3dPattyn(epsilonvx,xyz_list,gauss);
+-	vy_input->GetVyStrainRate3dPattyn(epsilonvy,xyz_list,gauss);
++	vx_input->GetVxStrainRate3dHO(epsilonvx,xyz_list,gauss);
++	vy_input->GetVyStrainRate3dHO(epsilonvy,xyz_list,gauss);
+ 
+ 	/*Sum all contributions*/
+ 	for(i=0;i<5;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i];
+@@ -1972,26 +1972,26 @@
+ 		if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealApproximationEnum){
+ 			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealApproximationEnum));
+ 		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==PattynApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,PattynApproximationEnum));
++		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,HOApproximationEnum));
+ 		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealPattynApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealPattynApproximationEnum));
++		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealHOApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealHOApproximationEnum));
+ 		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HutterApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,HutterApproximationEnum));
++		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SIAApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,SIAApproximationEnum));
+ 		}
+ 		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==L1L2ApproximationEnum){
+ 			this->inputs->AddInput(new IntInput(ApproximationEnum,L1L2ApproximationEnum));
+ 		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==StokesApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,StokesApproximationEnum));
++		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==FSApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,FSApproximationEnum));
+ 		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealStokesApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealStokesApproximationEnum));
++		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealFSApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealFSApproximationEnum));
+ 		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==PattynStokesApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,PattynStokesApproximationEnum));
++		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOFSApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,HOFSApproximationEnum));
+ 		}
+ 		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==NoneApproximationEnum){
+ 			this->inputs->AddInput(new IntInput(ApproximationEnum,NoneApproximationEnum));
+@@ -2030,8 +2030,8 @@
+ 	case DiagnosticHorizAnalysisEnum:
+ 		InputUpdateFromSolutionDiagnosticHoriz( solution);
+ 		break;
+-	case DiagnosticHutterAnalysisEnum:
+-		InputUpdateFromSolutionDiagnosticHutter( solution);
++	case DiagnosticSIAAnalysisEnum:
++		InputUpdateFromSolutionDiagnosticSIA( solution);
+ 		break;
+ 	case DiagnosticVertAnalysisEnum:
+ 		InputUpdateFromSolutionDiagnosticVert( solution);
+@@ -2041,8 +2041,8 @@
+ 	case AdjointHorizAnalysisEnum:
+ 		int approximation;
+ 		inputs->GetInputValue(&approximation,ApproximationEnum);
+-		if(approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
+-			InputUpdateFromSolutionAdjointStokes( solution);
++		if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
++			InputUpdateFromSolutionAdjointFS( solution);
+ 		}
+ 		else{
+ 			InputUpdateFromSolutionAdjointHoriz( solution);
+@@ -2650,8 +2650,8 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::ReduceMatrixStokes {{{*/
+-void Penta::ReduceMatrixStokes(IssmDouble* Ke_reduced, IssmDouble* Ke_temp){
++/*FUNCTION Penta::ReduceMatrixFS {{{*/
++void Penta::ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp){
+ 
+ 	int    i,j;
+ 	IssmDouble Kii[24][24];
+@@ -2692,8 +2692,8 @@
+ 	for(i=0;i<24;i++) for(j=0;j<24;j++) *(Ke_reduced+24*i+j)=Kii[i][j]-Kright[i][j];
+ }
+ /*}}}*/
+-/*FUNCTION Penta::ReduceVectorStokes {{{*/
+-void Penta::ReduceVectorStokes(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp){
++/*FUNCTION Penta::ReduceVectorFS {{{*/
++void Penta::ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp){
+ 
+ 	int    i,j;
+ 	IssmDouble Pi[24];
+@@ -2785,9 +2785,9 @@
+ 	IssmDouble slopey[NUMVERTICES];
+ 	IssmDouble xz_plane[6];
+ 
+-	/*For Stokes only: we want the CS to be tangential to the bedrock*/
++	/*For FS only: we want the CS to be tangential to the bedrock*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(IsFloating() || !IsOnBed() || (approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum)) return;
++	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return;
+ 
+ 	/*Get slope on each node*/
+ 	GetInputListOnVertices(&slopex[0],BedSlopeXEnum);
+@@ -2882,7 +2882,7 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	if(analysis_type==DiagnosticHorizAnalysisEnum){
+ 		inputs->GetInputValue(&approximation,ApproximationEnum);
+-		if(approximation==MacAyealPattynApproximationEnum || approximation==MacAyealStokesApproximationEnum){
++		if(approximation==MacAyealHOApproximationEnum || approximation==MacAyealFSApproximationEnum){
+ 			parameters->FindParam(&numlayers,MeshNumberoflayersEnum);
+ 			o_nz += numlayers*3;
+ 			d_nz += numlayers*3;
+@@ -3101,14 +3101,14 @@
+ 	IssmDouble yts;
+ 	int        stabilization;
+ 	bool       dakota_analysis;
+-	bool       isstokes;
++	bool       isFS;
+ 	IssmDouble beta,heatcapacity,referencetemperature,meltingpoint,latentheat;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+ 	iomodel->Constant(&beta,MaterialsBetaEnum);
+ 	iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum);
+ 	iomodel->Constant(&referencetemperature,ConstantsReferencetemperatureEnum);
+@@ -3174,36 +3174,36 @@
+ 					this->inputs->AddInput(new PentaInput(PressureEnum,nodeinputs,P1Enum));
+ 					this->inputs->AddInput(new PentaInput(QmuPressureEnum,nodeinputs,P1Enum));
+ 				}
+-				if(isstokes){
++				if(isFS){
+ 					this->inputs->AddInput(new PentaInput(PressureEnum,nodeinputs,P1Enum));
+ 					this->inputs->AddInput(new PentaInput(PressurePicardEnum,nodeinputs,P1Enum));
+ 				}
+ 			}
+-			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==PattynStokesApproximationEnum){
+-				/*Create VzPattyn and VzStokes Enums*/
+-				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderstokesEnum)){
+-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1];
+-					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
+-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1]);
+-					this->inputs->AddInput(new PentaInput(VzPattynEnum,nodeinputs,P1Enum));
++			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==HOFSApproximationEnum){
++				/*Create VzHO and VzFS Enums*/
++				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){
++					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1];
++					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
++					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]);
++					this->inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum));
+ 				}
+ 				else{
+ 					for(i=0;i<6;i++)nodeinputs[i]=0;
+-					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
+-					this->inputs->AddInput(new PentaInput(VzPattynEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum));
+ 				}
+ 			}
+-			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==MacAyealStokesApproximationEnum){
+-				/*Create VzMacAyeal and VzStokes Enums*/
+-				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderstokesEnum)){
+-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1];
+-					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
+-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1]);
++			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==MacAyealFSApproximationEnum){
++				/*Create VzMacAyeal and VzFS Enums*/
++				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){
++					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1];
++					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
++					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]);
+ 					this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum));
+ 				}
+ 				else{
+ 					for(i=0;i<6;i++)nodeinputs[i]=0;
+-					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
+ 					this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum));
+ 				}
+ 			}
+@@ -3288,7 +3288,7 @@
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 		GetPhi(&phi, &epsilon[0], viscosity);
+ 
+ 		viscousheating[iv]=phi*thickness;
+@@ -4066,7 +4066,7 @@
+ 		GetNodalFunctionsP1(&L[0], gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 		GetPhi(&phi, &epsilon[0], viscosity);
+ 
+ 		scalar_def=phi/rho_ice*Jdet*gauss->weight;
+@@ -4322,7 +4322,7 @@
+ 		GetNodalFunctionsP1(&L[0], gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 		GetPhi(&phi, &epsilon[0], viscosity);
+ 
+ 		scalar_def=phi/(rho_ice*heatcapacity)*Jdet*gauss->weight;
+@@ -4775,10 +4775,10 @@
+ 	switch(approximation){
+ 		case MacAyealApproximationEnum:
+ 			return CreateKMatrixAdjointMacAyeal2d();
+-		case PattynApproximationEnum:
+-			return CreateKMatrixAdjointPattyn();
+-		case StokesApproximationEnum:
+-			return CreateKMatrixAdjointStokes();
++		case HOApproximationEnum:
++			return CreateKMatrixAdjointHO();
++		case FSApproximationEnum:
++			return CreateKMatrixAdjointFS();
+ 		case NoneApproximationEnum:
+ 			return NULL;
+ 		default:
+@@ -4820,8 +4820,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixAdjointPattyn{{{*/
+-ElementMatrix* Penta::CreateKMatrixAdjointPattyn(void){
++/*FUNCTION Penta::CreateKMatrixAdjointHO{{{*/
++ElementMatrix* Penta::CreateKMatrixAdjointHO(void){
+ 
+ 	/*Intermediaries */
+ 	int        i,j;
+@@ -4837,9 +4837,9 @@
+ 	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+-	/*Initialize Jacobian with regular Pattyn (first part of the Gateau derivative)*/
++	/*Initialize Jacobian with regular HO (first part of the Gateau derivative)*/
+ 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticPattyn();
++	ElementMatrix* Ke=CreateKMatrixDiagnosticHO();
+ 	if(incomplete_adjoint) return Ke;
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -4856,7 +4856,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
+ 
+-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
++		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
+ 		eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
+ 		eps1[1]=epsilon[2];                eps2[1]=epsilon[0]+2*epsilon[1];
+@@ -4885,8 +4885,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixAdjointStokes{{{*/
+-ElementMatrix* Penta::CreateKMatrixAdjointStokes(void){
++/*FUNCTION Penta::CreateKMatrixAdjointFS{{{*/
++ElementMatrix* Penta::CreateKMatrixAdjointFS(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF4*NUMVERTICES;
+@@ -4905,9 +4905,9 @@
+ 	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+-	/*Initialize Jacobian with regular Stokes (first part of the Gateau derivative)*/
++	/*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/
+ 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticStokes();
++	ElementMatrix* Ke=CreateKMatrixDiagnosticFS();
+ 	if(incomplete_adjoint) return Ke;
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -4925,7 +4925,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
+ 
+-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
++		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
+ 		eps1[0]=epsilon[0];   eps2[0]=epsilon[2];   eps3[0]=epsilon[3];
+ 		eps1[1]=epsilon[2];   eps2[1]=epsilon[1];   eps3[1]=epsilon[4];
+@@ -4972,12 +4972,12 @@
+ 	switch(approximation){
+ 		case MacAyealApproximationEnum:
+ 			return CreatePVectorAdjointMacAyeal();
+-		case PattynApproximationEnum:
+-			return CreatePVectorAdjointPattyn();
++		case HOApproximationEnum:
++			return CreatePVectorAdjointHO();
+ 		case NoneApproximationEnum:
+ 			return NULL;
+-		case StokesApproximationEnum:
+-			return CreatePVectorAdjointStokes();
++		case FSApproximationEnum:
++			return CreatePVectorAdjointFS();
+ 		default:
+ 			_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
+ 	}
+@@ -4997,8 +4997,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorAdjointPattyn{{{*/
+-ElementVector* Penta::CreatePVectorAdjointPattyn(void){
++/*FUNCTION Penta::CreatePVectorAdjointHO{{{*/
++ElementVector* Penta::CreatePVectorAdjointHO(void){
+ 
+ 	if (!IsOnSurface()) return NULL;
+ 
+@@ -5011,14 +5011,14 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorAdjointStokes{{{*/
+-ElementVector* Penta::CreatePVectorAdjointStokes(void){
++/*FUNCTION Penta::CreatePVectorAdjointFS{{{*/
++ElementVector* Penta::CreatePVectorAdjointFS(void){
+ 
+ 	if (!IsOnSurface()) return NULL;
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
+-	ElementVector* pe=tria->CreatePVectorAdjointStokes();
++	ElementVector* pe=tria->CreatePVectorAdjointFS();
+ 	delete tria->material; delete tria;
+ 
+ 	/*clean up and return*/
+@@ -5058,11 +5058,11 @@
+ 				case MacAyealApproximationEnum:
+ 					GradjDragMacAyeal(gradient,control_index);
+ 					break;
+-				case PattynApproximationEnum:
+-					GradjDragPattyn(gradient,control_index);
++				case HOApproximationEnum:
++					GradjDragHO(gradient,control_index);
+ 					break;
+-				case StokesApproximationEnum:
+-					GradjDragStokes(gradient,control_index);
++				case FSApproximationEnum:
++					GradjDragFS(gradient,control_index);
+ 					break;
+ 				case NoneApproximationEnum:
+ 					/*Gradient is 0*/
+@@ -5078,11 +5078,11 @@
+ 				case MacAyealApproximationEnum:
+ 					GradjBbarMacAyeal(gradient,control_index);
+ 					break;
+-				case PattynApproximationEnum:
+-					GradjBbarPattyn(gradient,control_index);
++				case HOApproximationEnum:
++					GradjBbarHO(gradient,control_index);
+ 					break;
+-				case StokesApproximationEnum:
+-					GradjBbarStokes(gradient,control_index);
++				case FSApproximationEnum:
++					GradjBbarFS(gradient,control_index);
+ 					break;
+ 				case NoneApproximationEnum:
+ 					/*Gradient is 0*/
+@@ -5142,8 +5142,8 @@
+ 	delete tria->material; delete tria;
+ 
+ } /*}}}*/
+-/*FUNCTION Penta::GradjDragPattyn {{{*/
+-void  Penta::GradjDragPattyn(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Penta::GradjDragHO {{{*/
++void  Penta::GradjDragHO(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	int        i,j;
+ 	int        analysis_type;
+@@ -5213,8 +5213,8 @@
+ 	delete friction;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GradjDragStokes {{{*/
+-void  Penta::GradjDragStokes(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Penta::GradjDragFS {{{*/
++void  Penta::GradjDragFS(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	int        i,j;
+ 	int        analysis_type;
+@@ -5323,8 +5323,8 @@
+ 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
+ 
+ } /*}}}*/
+-/*FUNCTION Penta::GradjBbarPattyn {{{*/
+-void  Penta::GradjBbarPattyn(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Penta::GradjBbarHO {{{*/
++void  Penta::GradjBbarHO(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Gradient is computed on bed only (Bbar)*/
+ 	if (!IsOnBed()) return;
+@@ -5340,8 +5340,8 @@
+ 	/*delete Average B*/
+ 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
+ } /*}}}*/
+-/*FUNCTION Penta::GradjBbarStokes {{{*/
+-void  Penta::GradjBbarStokes(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Penta::GradjBbarFS {{{*/
++void  Penta::GradjBbarFS(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Gradient is computed on bed only (Bbar)*/
+ 	if (!IsOnBed()) return;
+@@ -5402,8 +5402,8 @@
+ 	xDelete<int>(control_type);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionAdjointStokes {{{*/
+-void  Penta::InputUpdateFromSolutionAdjointStokes(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionAdjointFS {{{*/
++void  Penta::InputUpdateFromSolutionAdjointFS(IssmDouble* solution){
+ 
+ 	const int    numdof=NDOF4*NUMVERTICES;
+ 
+@@ -5950,15 +5950,15 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+-		case StokesApproximationEnum:
+-			return CreateDVectorDiagnosticStokes();
++		case FSApproximationEnum:
++			return CreateDVectorDiagnosticFS();
+ 		default:
+-			return NULL; //no need for doftypes outside of stokes approximation
++			return NULL; //no need for doftypes outside of FS approximation
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateDVectorDiagnosticStokes{{{*/
+-ElementVector* Penta::CreateDVectorDiagnosticStokes(void){
++/*FUNCTION Penta::CreateDVectorDiagnosticFS{{{*/
++ElementVector* Penta::CreateDVectorDiagnosticFS(void){
+ 
+ 	/*output: */
+ 	ElementVector* De=NULL;
+@@ -5968,9 +5968,9 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=StokesApproximationEnum) return NULL;
++	if(approximation!=FSApproximationEnum) return NULL;
+ 
+-	De=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	De=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	for (i=0;i<NUMVERTICES;i++){
+ 		De->values[i*4+0]=VelocityEnum;
+@@ -5982,12 +5982,12 @@
+ 	return De;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealPattyn{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealPattyn(void){
++/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHO{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHO(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealPattynViscous();
+-	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealPattynFriction();
++	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealHOViscous();
++	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealHOFriction();
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -5996,8 +5996,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealPattynViscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealPattynViscous(void){
++/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHOViscous{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHOViscous(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes    = 2 *NUMVERTICES;
+@@ -6022,7 +6022,7 @@
+ 	Node       *node_list[numnodes];
+ 	int         cs_list[numnodes];
+ 
+-	/*Find penta on bed as pattyn must be coupled to the dofs on the bed: */
++	/*Find penta on bed as HO must be coupled to the dofs on the bed: */
+ 	Penta* pentabase=GetBasalElement();
+ 	Tria*  tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 
+@@ -6036,7 +6036,7 @@
+ 
+ 	/*Initialize Element matrix*/
+ 	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+@@ -6057,11 +6057,11 @@
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBMacAyealPattyn(&B[0][0], &xyz_list[0][0], gauss);
++		GetBMacAyealHO(&B[0][0], &xyz_list[0][0], gauss);
+ 		tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
+ 
+-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+-		this->GetStrainRate3dPattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
++		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
++		this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+ 		material->GetViscosity3d(&viscosity, &epsilon[0]);
+ 		material->GetViscosity3d(&oldviscosity, &oldepsilon[0]);
+ 
+@@ -6089,8 +6089,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealPattynFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealPattynFriction(void){
++/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHOFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHOFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes    = 2 *NUMVERTICES;
+@@ -6115,7 +6115,7 @@
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+ 	ElementMatrix* Ke1=new ElementMatrix(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+@@ -6148,7 +6148,7 @@
+ 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
+ 
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
+-		GetBPattynFriction(&L[0][0],gauss);
++		GetBHOFriction(&L[0][0],gauss);
+ 
+ 		DL_scalar=alpha2*gauss->weight*Jdet2d;
+ 		for (i=0;i<2;i++) DL[i][i]=DL_scalar; 
+@@ -6174,12 +6174,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealStokes{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealStokes(void){
++/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFS{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealStokesViscous();
+-	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealStokesFriction();
++	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealFSViscous();
++	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealFSFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -6188,8 +6188,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealStokesViscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealStokesViscous(void){
++/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFSViscous{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFSViscous(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes    = 2 *NUMVERTICES;
+@@ -6200,7 +6200,7 @@
+ 	/*Intermediaries */
+ 	int         i,j;
+ 	IssmDouble Jdet;
+-	IssmDouble viscosity,stokesreconditioning; //viscosity
++	IssmDouble viscosity,FSreconditioning; //viscosity
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble B[4][numdofs+3];
+@@ -6219,7 +6219,7 @@
+ 	Node       *node_list[numnodes];
+ 	int         cs_list[numnodes];
+ 
+-	/*Find penta on bed as stokes must be coupled to the dofs on the bed: */
++	/*Find penta on bed as FS must be coupled to the dofs on the bed: */
+ 	Penta* pentabase=GetBasalElement();
+ 	Tria* tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 
+@@ -6233,13 +6233,13 @@
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);       _assert_(vz_input);
+@@ -6253,17 +6253,17 @@
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBMacAyealStokes(&B[0][0], &xyz_list[0][0], gauss);
+-		tria->GetBprimeMacAyealStokes(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
+-		tria->GetBMacAyealStokes(&B2[0][0], &xyz_list[0][0], gauss_tria);
+-		GetBprimeMacAyealStokes(&Bprime2[0][0], &xyz_list[0][0], gauss);
++		GetBMacAyealFS(&B[0][0], &xyz_list[0][0], gauss);
++		tria->GetBprimeMacAyealFS(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
++		tria->GetBMacAyealFS(&B2[0][0], &xyz_list[0][0], gauss_tria);
++		GetBprimeMacAyealFS(&Bprime2[0][0], &xyz_list[0][0], gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity, &epsilon[0]);
++		material->GetViscosity3dFS(&viscosity, &epsilon[0]);
+ 
+ 		D_scalar=2*viscosity*gauss->weight*Jdet;
+ 		for (i=0;i<3;i++) D[i][i]=D_scalar;
+-		D[3][3]=-gauss->weight*Jdet*stokesreconditioning;
++		D[3][3]=-gauss->weight*Jdet*FSreconditioning;
+ 		for (i=0;i<3;i++) D2[i][i]=D_scalar;
+ 
+ 		TripleMultiply( &B[0][0],4,numdofs+3,1,
+@@ -6292,8 +6292,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealStokesFriction {{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealStokesFriction(void){
++/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFSFriction {{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFSFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes  = 2 *NUMVERTICES;
+@@ -6306,18 +6306,18 @@
+ 	/*Intermediaries */
+ 	int        i,j;
+ 	int        analysis_type,approximation;
+-	IssmDouble stokesreconditioning;
++	IssmDouble FSreconditioning;
+ 	IssmDouble viscosity,alpha2_gauss,Jdet2d;
+ 	IssmDouble bed_normal[3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble LMacAyealStokes[8][numdof2dm];
+-	IssmDouble LprimeMacAyealStokes[8][numdof2d];
+-	IssmDouble DLMacAyealStokes[8][8]={0.0};
+-	IssmDouble LStokesMacAyeal[4][numdof2d];
+-	IssmDouble LprimeStokesMacAyeal[4][numdof2dm];
+-	IssmDouble DLStokesMacAyeal[4][4]={0.0};
++	IssmDouble LMacAyealFS[8][numdof2dm];
++	IssmDouble LprimeMacAyealFS[8][numdof2d];
++	IssmDouble DLMacAyealFS[8][8]={0.0};
++	IssmDouble LFSMacAyeal[4][numdof2d];
++	IssmDouble LprimeFSMacAyeal[4][numdof2dm];
++	IssmDouble DLFSMacAyeal[4][4]={0.0};
+ 	IssmDouble Ke_drag_gaussian[numdof2dm][numdof2d];
+ 	IssmDouble Ke_drag_gaussian2[numdof2d][numdof2dm];
+ 	Friction*  friction=NULL;
+@@ -6325,11 +6325,11 @@
+ 	Node       *node_list[numnodes];
+ 	int         cs_list[numnodes];
+ 
+-	/*If on water or not Stokes, skip stiffness: */
++	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+@@ -6344,7 +6344,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -6360,39 +6360,39 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
+-		GetLMacAyealStokes(&LMacAyealStokes[0][0], gauss);
+-		GetLprimeMacAyealStokes(&LprimeMacAyealStokes[0][0], &xyz_list[0][0], gauss);
+-		GetLStokesMacAyeal(&LStokesMacAyeal[0][0], gauss);
+-		GetLprimeStokesMacAyeal(&LprimeStokesMacAyeal[0][0], &xyz_list[0][0], gauss);
++		GetLMacAyealFS(&LMacAyealFS[0][0], gauss);
++		GetLprimeMacAyealFS(&LprimeMacAyealFS[0][0], &xyz_list[0][0], gauss);
++		GetLFSMacAyeal(&LFSMacAyeal[0][0], gauss);
++		GetLprimeFSMacAyeal(&LprimeFSMacAyeal[0][0], &xyz_list[0][0], gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		BedNormal(&bed_normal[0],xyz_list_tria);
+ 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
+ 
+-		DLMacAyealStokes[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
+-		DLMacAyealStokes[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
+-		DLMacAyealStokes[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
+-		DLMacAyealStokes[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
+-		DLMacAyealStokes[4][4]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0];
+-		DLMacAyealStokes[5][5]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1];
+-		DLMacAyealStokes[6][6]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[0];
+-		DLMacAyealStokes[7][7]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[1];
++		DLMacAyealFS[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
++		DLMacAyealFS[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
++		DLMacAyealFS[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
++		DLMacAyealFS[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
++		DLMacAyealFS[4][4]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0];
++		DLMacAyealFS[5][5]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1];
++		DLMacAyealFS[6][6]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[0];
++		DLMacAyealFS[7][7]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[1];
+ 
+-		DLStokesMacAyeal[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
+-		DLStokesMacAyeal[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
+-		DLStokesMacAyeal[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
+-		DLStokesMacAyeal[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
++		DLFSMacAyeal[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
++		DLFSMacAyeal[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
++		DLFSMacAyeal[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
++		DLFSMacAyeal[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
+ 
+-		TripleMultiply( &LMacAyealStokes[0][0],8,numdof2dm,1,
+-					&DLMacAyealStokes[0][0],8,8,0,
+-					&LprimeMacAyealStokes[0][0],8,numdof2d,0,
++		TripleMultiply( &LMacAyealFS[0][0],8,numdof2dm,1,
++					&DLMacAyealFS[0][0],8,8,0,
++					&LprimeMacAyealFS[0][0],8,numdof2d,0,
+ 					&Ke_drag_gaussian[0][0],0);
+ 
+-		TripleMultiply( &LStokesMacAyeal[0][0],4,numdof2d,1,
+-					&DLStokesMacAyeal[0][0],4,4,0,
+-					&LprimeStokesMacAyeal[0][0],4,numdof2dm,0,
++		TripleMultiply( &LFSMacAyeal[0][0],4,numdof2d,1,
++					&DLFSMacAyeal[0][0],4,4,0,
++					&LprimeFSMacAyeal[0][0],4,numdof2dm,0,
+ 					&Ke_drag_gaussian2[0][0],0);
+ 
+ 		for(i=0;i<numdof2dm;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdoftot+j+numdofm]+=Ke_drag_gaussian[i][j];
+@@ -6408,8 +6408,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingPattynStokes{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingPattynStokes(void){
++/*FUNCTION Penta::CreateKMatrixCouplingHOFS{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingHOFS(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes  = 2 *NUMVERTICES;
+@@ -6431,13 +6431,13 @@
+ 	}
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1;
+ 	delete Ke2;
+-	Ke1=CreateKMatrixDiagnosticPattyn(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
+-	Ke2=CreateKMatrixDiagnosticStokes(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZPEnum);
++	Ke1=CreateKMatrixDiagnosticHO(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
++	Ke2=CreateKMatrixDiagnosticFS(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZPEnum);
+ 
+ 	for(i=0;i<numdofs;i++) for(j=0;j<NUMVERTICES;j++){
+ 		Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+0]+=Ke2->values[i*numdofs+NDOF4*j+0];
+@@ -6468,27 +6468,27 @@
+ 			return CreateKMatrixDiagnosticMacAyeal2d();
+ 		case L1L2ApproximationEnum:
+ 			return CreateKMatrixDiagnosticL1L2();
+-		case PattynApproximationEnum:
+-			return CreateKMatrixDiagnosticPattyn();
+-		case StokesApproximationEnum:
+-			return CreateKMatrixDiagnosticStokes();
+-		case HutterApproximationEnum:
++		case HOApproximationEnum:
++			return CreateKMatrixDiagnosticHO();
++		case FSApproximationEnum:
++			return CreateKMatrixDiagnosticFS();
++		case SIAApproximationEnum:
+ 			return NULL;
+ 		case NoneApproximationEnum:
+ 			return NULL;
+-		case MacAyealPattynApproximationEnum:
+-			return CreateKMatrixDiagnosticMacAyealPattyn();
+-		case MacAyealStokesApproximationEnum:
+-			return CreateKMatrixDiagnosticMacAyealStokes();
+-		case PattynStokesApproximationEnum:
+-			return CreateKMatrixDiagnosticPattynStokes();
++		case MacAyealHOApproximationEnum:
++			return CreateKMatrixDiagnosticMacAyealHO();
++		case MacAyealFSApproximationEnum:
++			return CreateKMatrixDiagnosticMacAyealFS();
++		case HOFSApproximationEnum:
++			return CreateKMatrixDiagnosticHOFS();
+ 		default:
+ 			_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticHutter{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticHutter(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticSIA{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticSIA(void){
+ 
+ 	/*Constants*/
+ 	const int numdof=NDOF2*NUMVERTICES;
+@@ -6609,7 +6609,7 @@
+ 	IssmDouble  Jdet;
+ 	IssmDouble  viscosity , oldviscosity, newviscosity, viscosity_overshoot;
+ 	IssmDouble  epsilon[5],oldepsilon[5];       /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble  epsilons[6];                    //6 for stokes
++	IssmDouble  epsilons[6];                    //6 for FS
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  B[3][numdof2d];
+ 	IssmDouble  Bprime[3][numdof2d];
+@@ -6621,7 +6621,7 @@
+ 	GaussPenta *gauss      = NULL;
+ 	GaussTria  *gauss_tria = NULL;
+ 
+-	/*Find penta on bed as this is a macayeal elements: */
++	/*Find penta on bed as this is a SSA elements: */
+ 	pentabase=GetBasalElement();
+ 	tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 
+@@ -6650,17 +6650,17 @@
+ 		tria->GetBMacAyeal(&B[0][0], &xyz_list[0][0], gauss_tria);
+ 		tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
+ 
+-		if(approximation==MacAyealPattynApproximationEnum){
+-			this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+-			this->GetStrainRate3dPattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
++		if(approximation==MacAyealHOApproximationEnum){
++			this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
++			this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+ 			material->GetViscosity3d(&viscosity, &epsilon[0]);
+ 			material->GetViscosity3d(&oldviscosity, &oldepsilon[0]);
+ 
+ 			newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+ 		}
+-		else if (approximation==MacAyealStokesApproximationEnum){
++		else if (approximation==MacAyealFSApproximationEnum){
+ 			this->GetStrainRate3d(&epsilons[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-			material->GetViscosity3dStokes(&newviscosity,&epsilons[0]);
++			material->GetViscosity3dFS(&newviscosity,&epsilons[0]);
+ 		}
+ 		else _error_("approximation " << approximation << " (" << EnumToStringx(approximation) << ") not supported yet");
+ 
+@@ -6703,13 +6703,13 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealPattyn{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealPattyn(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealHO{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealHO(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3d();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticPattyn();
+-	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealPattyn();
++	ElementMatrix* Ke2=CreateKMatrixDiagnosticHO();
++	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealHO();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+ 
+ 	/*clean-up and return*/
+@@ -6719,13 +6719,13 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealStokes{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealStokes(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealFS{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3d();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticStokes();
+-	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealStokes();
++	ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealFS();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+ 
+ 	/*clean-up and return*/
+@@ -6769,7 +6769,7 @@
+ 	GaussPenta *gauss      = NULL;
+ 	GaussTria  *gauss_tria = NULL;
+ 
+-	/*Find penta on bed as this is a macayeal elements: */
++	/*Find penta on bed as this is a SSA elements: */
+ 	pentabase=GetBasalElement();
+ 	tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 
+@@ -6834,12 +6834,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticPattyn{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticPattyn(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticHO{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticHO(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticPattynViscous();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticPattynFriction();
++	ElementMatrix* Ke1=CreateKMatrixDiagnosticHOViscous();
++	ElementMatrix* Ke2=CreateKMatrixDiagnosticHOFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -6849,8 +6849,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticPattynViscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticPattynViscous(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticHOViscous{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticHOViscous(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF2*NUMVERTICES;
+@@ -6870,7 +6870,7 @@
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element matrix*/
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+@@ -6888,11 +6888,11 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBPattyn(&B[0][0], &xyz_list[0][0], gauss);
+-		GetBprimePattyn(&Bprime[0][0], &xyz_list[0][0], gauss);
++		GetBHO(&B[0][0], &xyz_list[0][0], gauss);
++		GetBprimeHO(&Bprime[0][0], &xyz_list[0][0], gauss);
+ 
+-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+-		this->GetStrainRate3dPattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
++		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
++		this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+ 		material->GetViscosity3d(&viscosity, &epsilon[0]);
+ 		material->GetViscosity3d(&oldviscosity, &oldepsilon[0]);
+ 		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+@@ -6914,8 +6914,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticPattynFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticPattynFriction(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticHOFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticHOFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numdof   = NDOF2*NUMVERTICES;
+@@ -6936,7 +6936,7 @@
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+ 
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -6961,7 +6961,7 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0],gauss);
+-		GetBPattynFriction(&L[0][0],gauss);
++		GetBHOFriction(&L[0][0],gauss);
+ 
+ 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum); 
+ 		if(migration_style==SubelementMigrationEnum) alpha2=phi*alpha2;
+@@ -6984,13 +6984,13 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticPattynStokes{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticPattynStokes(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticHOFS{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticHOFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticPattyn();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticStokes();
+-	ElementMatrix* Ke3=CreateKMatrixCouplingPattynStokes();
++	ElementMatrix* Ke1=CreateKMatrixDiagnosticHO();
++	ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke3=CreateKMatrixCouplingHOFS();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+ 
+ 	/*clean-up and return*/
+@@ -7000,30 +7000,30 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticStokes{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticStokes(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticFS{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticFS(void){
+ 
+-	int fe_stokes;
++	int fe_FS;
+ 	ElementMatrix* Ke1;
+ 	ElementMatrix* Ke2;
+ 	ElementMatrix* Ke;
+-	parameters->FindParam(&fe_stokes,FlowequationFeStokesEnum);
++	parameters->FindParam(&fe_FS,FlowequationFeFSEnum);
+ 
+-	switch(fe_stokes){
++	switch(fe_FS){
+ 		case 0:
+ 			/*compute all stiffness matrices for this element*/
+-			Ke1=CreateKMatrixDiagnosticStokesViscous();
+-			Ke2=CreateKMatrixDiagnosticStokesFriction();
++			Ke1=CreateKMatrixDiagnosticFSViscous();
++			Ke2=CreateKMatrixDiagnosticFSFriction();
+ 			Ke =new ElementMatrix(Ke1,Ke2);
+ 			break;
+ 		case 1:
+ 			/*compute all stiffness matrices for this element*/
+-			Ke1=CreateKMatrixDiagnosticStokesGLSViscous();
+-			Ke2=CreateKMatrixDiagnosticStokesFriction();
++			Ke1=CreateKMatrixDiagnosticFSGLSViscous();
++			Ke2=CreateKMatrixDiagnosticFSFriction();
+ 			Ke =new ElementMatrix(Ke1,Ke2);
+ 			break;
+ 		default:
+-			_error_("Finite element" << fe_stokes << " not supported yet");
++			_error_("Finite element" << fe_FS << " not supported yet");
+ 	}
+ 
+ 	/*clean-up and return*/
+@@ -7033,12 +7033,12 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticStokesViscous {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticStokesViscous(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticFSViscous {{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticFSViscous(void){
+ 
+ 	/*Intermediaries */
+ 	int        i,approximation;
+-	IssmDouble Jdet,viscosity,stokesreconditioning;
++	IssmDouble Jdet,viscosity,FSreconditioning;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble B[8][27];
+@@ -7048,14 +7048,14 @@
+ 	IssmDouble Ke_temp[27][27]={0.0}; //for the six nodes and the bubble 
+ 	GaussPenta *gauss=NULL;
+ 
+-	/*If on water or not Stokes, skip stiffness: */
++	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -7067,15 +7067,15 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBStokes(&B[0][0],&xyz_list[0][0],gauss); 
+-		GetBprimeStokes(&B_prime[0][0],&xyz_list[0][0],gauss); 
++		GetBFS(&B[0][0],&xyz_list[0][0],gauss); 
++		GetBprimeFS(&B_prime[0][0],&xyz_list[0][0],gauss); 
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		D_scalar=gauss->weight*Jdet;
+ 		for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity;
+-		for (i=6;i<8;i++) D[i][i]=-D_scalar*stokesreconditioning;
++		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
+ 
+ 		TripleMultiply( &B[0][0],8,27,1,
+ 					&D[0][0],8,8,0,
+@@ -7084,7 +7084,7 @@
+ 	}
+ 
+ 	/*Condensation*/
+-	ReduceMatrixStokes(Ke->values, &Ke_temp[0][0]);
++	ReduceMatrixFS(Ke->values, &Ke_temp[0][0]);
+ 	//Ke->Echo();
+ 	//_error_("stop");
+ 
+@@ -7096,14 +7096,14 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticStokesGLSViscous {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSViscous(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticFSGLSViscous {{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticFSGLSViscous(void){
+ 
+ 	int        numdof  = NUMVERTICES*NDOF4;
+ 
+ 	/*Intermediaries */
+ 	int        i,j,approximation;
+-	IssmDouble Jdet,viscosity,stokesreconditioning,diameter,rigidity;
++	IssmDouble Jdet,viscosity,FSreconditioning,diameter,rigidity;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble B[8][24];
+@@ -7127,14 +7127,14 @@
+ 	int p,q,ii;
+ 	int c=3; //index of pressure
+ 
+-	/*If on water or not Stokes, skip stiffness: */
++	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -7164,15 +7164,15 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBStokesGLS(&B[0][0],&xyz_list[0][0],gauss); 
+-		GetBprimeStokesGLS(&B_prime[0][0],&xyz_list[0][0],gauss); 
++		GetBFSGLS(&B[0][0],&xyz_list[0][0],gauss); 
++		GetBprimeFSGLS(&B_prime[0][0],&xyz_list[0][0],gauss); 
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		D_scalar=gauss->weight*Jdet;
+ 		for (i=0;i<6;i++) D[i][i]=D_scalar*2.*2.*viscosity;
+-		for (i=6;i<8;i++) D[i][i]=-D_scalar*stokesreconditioning;
++		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
+ 
+ 		TripleMultiply( &B[0][0],8,24,1,
+ 					&D[0][0],8,8,0,
+@@ -7234,8 +7234,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticStokesFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticStokesFriction(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticFSFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticFSFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numdof=NUMVERTICES*NDOF4;
+@@ -7245,25 +7245,25 @@
+ 	int        i,j;
+ 	int        analysis_type,approximation;
+ 	IssmDouble alpha2,Jdet2d;
+-	IssmDouble stokesreconditioning,viscosity;
++	IssmDouble FSreconditioning,viscosity;
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble LStokes[2][numdof2d];
+-	IssmDouble DLStokes[2][2]={0.0};
++	IssmDouble LFS[2][numdof2d];
++	IssmDouble DLFS[2][2]={0.0};
+ 	IssmDouble Ke_drag_gaussian[numdof2d][numdof2d];
+ 	Friction*  friction=NULL;
+ 	GaussPenta *gauss=NULL;
+ 
+-	/*If on water or not Stokes, skip stiffness: */
++	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(IsFloating() || !IsOnBed() || (approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum)) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return NULL;
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -7279,19 +7279,19 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
+-		GetLStokes(&LStokes[0][0], gauss);
++		GetLFS(&LFS[0][0], gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
+ 
+-		DLStokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
+-		DLStokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
++		DLFS[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
++		DLFS[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
+ 
+-		TripleMultiply( &LStokes[0][0],2,numdof2d,1,
+-					&DLStokes[0][0],2,2,0,
+-					&LStokes[0][0],2,numdof2d,0,
++		TripleMultiply( &LFS[0][0],2,numdof2d,1,
++					&DLFS[0][0],2,2,0,
++					&LFS[0][0],2,numdof2d,0,
+ 					&Ke_drag_gaussian[0][0],0);
+ 
+ 		for(i=0;i<numdof2d;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdof+j]+=Ke_drag_gaussian[i][j];
+@@ -7411,12 +7411,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingMacAyealStokes {{{*/
+-ElementVector* Penta::CreatePVectorCouplingMacAyealStokes(void){
++/*FUNCTION Penta::CreatePVectorCouplingMacAyealFS {{{*/
++ElementVector* Penta::CreatePVectorCouplingMacAyealFS(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorCouplingMacAyealStokesViscous();
+-	ElementVector* pe2=CreatePVectorCouplingMacAyealStokesFriction();
++	ElementVector* pe1=CreatePVectorCouplingMacAyealFSViscous();
++	ElementVector* pe2=CreatePVectorCouplingMacAyealFSFriction();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -7425,8 +7425,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingMacAyealStokesViscous {{{*/
+-ElementVector* Penta::CreatePVectorCouplingMacAyealStokesViscous(void){
++/*FUNCTION Penta::CreatePVectorCouplingMacAyealFSViscous {{{*/
++ElementVector* Penta::CreatePVectorCouplingMacAyealFSViscous(void){
+ 
+ 	/*Constants*/
+ 	const int   numdof=NUMVERTICES*NDOF4;
+@@ -7435,7 +7435,7 @@
+ 	int         i,j;
+ 	int         approximation;
+ 	IssmDouble  viscosity,Jdet;
+-	IssmDouble  stokesreconditioning;
++	IssmDouble  FSreconditioning;
+ 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble  dw[3];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+@@ -7445,16 +7445,16 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=MacAyealStokesApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=MacAyealFSApproximationEnum) return NULL;
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+-	Input* vzmacayeal_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzmacayeal_input);
++	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzSSA_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+@@ -7466,16 +7466,16 @@
+ 		GetNodalFunctionsP1(&basis[0], gauss);
+ 		GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss);
+ 
+-		vzmacayeal_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
++		vzSSA_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		for(i=0;i<NUMVERTICES;i++){
+ 			pe->values[i*NDOF4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];
+ 			pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
+ 			pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
+-			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*stokesreconditioning*dw[2]*basis[i];
++			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];
+ 		}
+ 	}
+ 
+@@ -7487,8 +7487,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingMacAyealStokesFriction{{{*/
+-ElementVector* Penta::CreatePVectorCouplingMacAyealStokesFriction(void){
++/*FUNCTION Penta::CreatePVectorCouplingMacAyealFSFriction{{{*/
++ElementVector* Penta::CreatePVectorCouplingMacAyealFSFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numdof=NUMVERTICES*NDOF4;
+@@ -7497,7 +7497,7 @@
+ 	int         i,j;
+ 	int         approximation,analysis_type;
+ 	IssmDouble  Jdet,Jdet2d;
+-	IssmDouble  stokesreconditioning;
++	IssmDouble  FSreconditioning;
+ 	IssmDouble	bed_normal[3];
+ 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble  viscosity, w, alpha2_gauss;
+@@ -7512,17 +7512,17 @@
+ 	/*Initialize Element vector and return if necessary*/
+ 	if(!IsOnBed() || IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=MacAyealStokesApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=MacAyealFSApproximationEnum) return NULL;
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+-	Input* vzmacayeal_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzmacayeal_input);
++	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzSSA_input);
+ 
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 
+@@ -7538,12 +7538,12 @@
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss);
+ 		GetNodalFunctionsP1(basis, gauss);
+ 
+-		vzmacayeal_input->GetInputValue(&w, gauss);
+-		vzmacayeal_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
++		vzSSA_input->GetInputValue(&w, gauss);
++		vzSSA_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+ 
+ 		BedNormal(&bed_normal[0],xyz_list_tria);
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
+ 
+ 		for(i=0;i<NUMVERTICES2D;i++){
+@@ -7562,12 +7562,12 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingPattynStokes {{{*/
+-ElementVector* Penta::CreatePVectorCouplingPattynStokes(void){
++/*FUNCTION Penta::CreatePVectorCouplingHOFS {{{*/
++ElementVector* Penta::CreatePVectorCouplingHOFS(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorCouplingPattynStokesViscous();
+-	ElementVector* pe2=CreatePVectorCouplingPattynStokesFriction();
++	ElementVector* pe1=CreatePVectorCouplingHOFSViscous();
++	ElementVector* pe2=CreatePVectorCouplingHOFSFriction();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -7576,8 +7576,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingPattynStokesViscous {{{*/
+-ElementVector* Penta::CreatePVectorCouplingPattynStokesViscous(void){
++/*FUNCTION Penta::CreatePVectorCouplingHOFSViscous {{{*/
++ElementVector* Penta::CreatePVectorCouplingHOFSViscous(void){
+ 
+ 	/*Constants*/
+ 	const int   numdof=NUMVERTICES*NDOF4;
+@@ -7586,7 +7586,7 @@
+ 	int         i;
+ 	int         approximation;
+ 	IssmDouble  viscosity,Jdet;
+-	IssmDouble  stokesreconditioning;
++	IssmDouble  FSreconditioning;
+ 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble  dw[3];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+@@ -7596,16 +7596,16 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=PattynStokesApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=HOFSApproximationEnum) return NULL;
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+-	Input* vzpattyn_input=inputs->GetInput(VzPattynEnum);   _assert_(vzpattyn_input);
++	Input* vzHO_input=inputs->GetInput(VzHOEnum);   _assert_(vzHO_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+@@ -7617,16 +7617,16 @@
+ 		GetNodalFunctionsP1(&basis[0], gauss);
+ 		GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss);
+ 
+-		vzpattyn_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
++		vzHO_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		for(i=0;i<NUMVERTICES;i++){
+ 			pe->values[i*NDOF4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];
+ 			pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
+ 			pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
+-			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*stokesreconditioning*dw[2]*basis[i];
++			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];
+ 		}
+ 	}
+ 
+@@ -7638,8 +7638,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingPattynStokesFriction{{{*/
+-ElementVector* Penta::CreatePVectorCouplingPattynStokesFriction(void){
++/*FUNCTION Penta::CreatePVectorCouplingHOFSFriction{{{*/
++ElementVector* Penta::CreatePVectorCouplingHOFSFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numdof=NUMVERTICES*NDOF4;
+@@ -7648,7 +7648,7 @@
+ 	int         i,j;
+ 	int         approximation,analysis_type;
+ 	IssmDouble  Jdet,Jdet2d;
+-	IssmDouble  stokesreconditioning;
++	IssmDouble  FSreconditioning;
+ 	IssmDouble	bed_normal[3];
+ 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble  viscosity, w, alpha2_gauss;
+@@ -7663,17 +7663,17 @@
+ 	/*Initialize Element vector and return if necessary*/
+ 	if(!IsOnBed() || IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=PattynStokesApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=HOFSApproximationEnum) return NULL;
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+-	Input* vzpattyn_input=inputs->GetInput(VzPattynEnum);   _assert_(vzpattyn_input);
++	Input* vzHO_input=inputs->GetInput(VzHOEnum);   _assert_(vzHO_input);
+ 
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 
+@@ -7689,12 +7689,12 @@
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss);
+ 		GetNodalFunctionsP1(basis, gauss);
+ 
+-		vzpattyn_input->GetInputValue(&w, gauss);
+-		vzpattyn_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
++		vzHO_input->GetInputValue(&w, gauss);
++		vzHO_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+ 
+ 		BedNormal(&bed_normal[0],xyz_list_tria);
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
+ 
+ 		for(i=0;i<NUMVERTICES2D;i++){
+@@ -7722,33 +7722,33 @@
+ 	switch(approximation){
+ 		case MacAyealApproximationEnum:
+ 			return CreatePVectorDiagnosticMacAyeal();
+-		case PattynApproximationEnum:
+-			return CreatePVectorDiagnosticPattyn();
++		case HOApproximationEnum:
++			return CreatePVectorDiagnosticHO();
+ 		case L1L2ApproximationEnum:
+ 			return CreatePVectorDiagnosticL1L2();
+-		case HutterApproximationEnum:
++		case SIAApproximationEnum:
+ 			return NULL;
+ 		case NoneApproximationEnum:
+ 			return NULL;
+-		case StokesApproximationEnum:
+-			return CreatePVectorDiagnosticStokes();
+-		case MacAyealPattynApproximationEnum:
+-			return CreatePVectorDiagnosticMacAyealPattyn();
+-		case MacAyealStokesApproximationEnum:
+-			return CreatePVectorDiagnosticMacAyealStokes();
+-		case PattynStokesApproximationEnum:
+-			return CreatePVectorDiagnosticPattynStokes();
++		case FSApproximationEnum:
++			return CreatePVectorDiagnosticFS();
++		case MacAyealHOApproximationEnum:
++			return CreatePVectorDiagnosticMacAyealHO();
++		case MacAyealFSApproximationEnum:
++			return CreatePVectorDiagnosticMacAyealFS();
++		case HOFSApproximationEnum:
++			return CreatePVectorDiagnosticHOFS();
+ 		default:
+ 			_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealPattyn{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticMacAyealPattyn(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealHO{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticMacAyealHO(void){
+ 
+ 	/*compute all load vectors for this element*/
+ 	ElementVector* pe1=CreatePVectorDiagnosticMacAyeal();
+-	ElementVector* pe2=CreatePVectorDiagnosticPattyn();
++	ElementVector* pe2=CreatePVectorDiagnosticHO();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -7757,13 +7757,13 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealStokes{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticMacAyealStokes(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealFS{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticMacAyealFS(void){
+ 
+ 	/*compute all load vectors for this element*/
+ 	ElementVector* pe1=CreatePVectorDiagnosticMacAyeal();
+-	ElementVector* pe2=CreatePVectorDiagnosticStokes();
+-	ElementVector* pe3=CreatePVectorCouplingMacAyealStokes();
++	ElementVector* pe2=CreatePVectorDiagnosticFS();
++	ElementVector* pe3=CreatePVectorCouplingMacAyealFS();
+ 	ElementVector* pe =new ElementVector(pe1,pe2,pe3);
+ 
+ 	/*clean-up and return*/
+@@ -7773,13 +7773,13 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticPattynStokes{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticPattynStokes(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticHOFS{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticHOFS(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticPattyn();
+-	ElementVector* pe2=CreatePVectorDiagnosticStokes();
+-	ElementVector* pe3=CreatePVectorCouplingPattynStokes();
++	ElementVector* pe1=CreatePVectorDiagnosticHO();
++	ElementVector* pe2=CreatePVectorDiagnosticFS();
++	ElementVector* pe3=CreatePVectorCouplingHOFS();
+ 	ElementVector* pe =new ElementVector(pe1,pe2,pe3);
+ 
+ 	/*clean-up and return*/
+@@ -7789,8 +7789,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticHutter{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticHutter(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticSIA{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticSIA(void){
+ 
+ 	/*Intermediaries*/
+ 	int          i,j;
+@@ -7902,12 +7902,12 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticPattyn{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticPattyn(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticHO{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticHO(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticPattynDrivingStress();
+-	ElementVector* pe2=CreatePVectorDiagnosticPattynFront();
++	ElementVector* pe1=CreatePVectorDiagnosticHODrivingStress();
++	ElementVector* pe2=CreatePVectorDiagnosticHOFront();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -7916,8 +7916,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticPattynDrivingStress{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticPattynDrivingStress(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticHODrivingStress{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticHODrivingStress(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF2*NUMVERTICES;
+@@ -7932,7 +7932,7 @@
+ 	GaussPenta  *gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -7964,8 +7964,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticPattynFront{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticPattynFront(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticHOFront{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticHOFront(void){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble  ls[6];
+@@ -7999,7 +7999,7 @@
+ 	IssmDouble  normal[3];
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,PattynApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,HOApproximationEnum);
+ 	Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+@@ -8042,33 +8042,33 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticStokes {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticStokes(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticFS {{{*/
++ElementVector* Penta::CreatePVectorDiagnosticFS(void){
+ 
+-	int fe_stokes;
++	int fe_FS;
+ 	ElementVector* pe1;
+ 	ElementVector* pe2;
+ 	ElementVector* pe3;
+ 	ElementVector* pe;
+-	parameters->FindParam(&fe_stokes,FlowequationFeStokesEnum);
++	parameters->FindParam(&fe_FS,FlowequationFeFSEnum);
+ 
+-	switch(fe_stokes){
++	switch(fe_FS){
+ 		case 0:
+ 			/*compute all stiffness matrices for this element*/
+-			pe1=CreatePVectorDiagnosticStokesViscous();
+-			pe2=CreatePVectorDiagnosticStokesShelf();
+-			pe3=CreatePVectorDiagnosticStokesFront();
++			pe1=CreatePVectorDiagnosticFSViscous();
++			pe2=CreatePVectorDiagnosticFSShelf();
++			pe3=CreatePVectorDiagnosticFSFront();
+ 			pe =new ElementVector(pe1,pe2,pe3);
+ 			break;
+ 		case 1:
+ 			/*compute all stiffness matrices for this element*/
+-			pe1=CreatePVectorDiagnosticStokesGLSViscous();
+-			pe2=CreatePVectorDiagnosticStokesShelf();
+-			pe3=CreatePVectorDiagnosticStokesFront();
++			pe1=CreatePVectorDiagnosticFSGLSViscous();
++			pe2=CreatePVectorDiagnosticFSShelf();
++			pe3=CreatePVectorDiagnosticFSFront();
+ 			pe =new ElementVector(pe1,pe2,pe3);
+ 			break;
+ 		default:
+-			_error_("Finite element" << fe_stokes << " not supported yet");
++			_error_("Finite element" << fe_FS << " not supported yet");
+ 	}
+ 
+ 
+@@ -8079,8 +8079,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticStokesViscous {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticStokesViscous(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticFSViscous {{{*/
++ElementVector* Penta::CreatePVectorDiagnosticFSViscous(void){
+ 
+ 	/*Constants*/
+ 	const int numdofbubble=NDOF4*NUMVERTICES+NDOF3*1;
+@@ -8089,7 +8089,7 @@
+ 	int        i,j;
+ 	int        approximation;
+ 	IssmDouble Jdet,viscosity;
+-	IssmDouble gravity,rho_ice,stokesreconditioning;
++	IssmDouble gravity,rho_ice,FSreconditioning;
+ 	IssmDouble forcex,forcey,forcez;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+@@ -8105,11 +8105,11 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	rho_ice=matpar->GetRhoIce();
+ 	gravity=matpar->GetG();
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -8127,12 +8127,12 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBStokes(&B[0][0],&xyz_list[0][0],gauss); 
+-		GetBprimeStokes(&B_prime[0][0],&xyz_list[0][0], gauss); 
++		GetBFS(&B[0][0],&xyz_list[0][0],gauss); 
++		GetBprimeFS(&B_prime[0][0],&xyz_list[0][0], gauss); 
+ 		GetNodalFunctionsMINI(&l1l7[0], gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		loadingforcex_input->GetInputValue(&forcex, gauss);
+ 		loadingforcey_input->GetInputValue(&forcey, gauss);
+@@ -8150,7 +8150,7 @@
+ 
+ 		D_scalar=gauss->weight*Jdet;
+ 		for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity;
+-		for (i=6;i<8;i++) D[i][i]=-D_scalar*stokesreconditioning;
++		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
+ 
+ 		TripleMultiply(&B[0][0],8,numdofbubble,1,
+ 					&D[0][0],8,8,0,
+@@ -8159,7 +8159,7 @@
+ 	}
+ 
+ 	/*Condensation*/
+-	ReduceVectorStokes(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);
++	ReduceVectorFS(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);
+ 
+ 	/*Transform coordinate system*/
+ 	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
+@@ -8169,8 +8169,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticStokesFront{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticStokesFront(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticFSFront{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticFSFront(void){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble  ls[6];
+@@ -8204,7 +8204,7 @@
+ 	IssmDouble  normal[3];
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,StokesApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,FSApproximationEnum);
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
+@@ -8246,8 +8246,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticStokesGLSViscous {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticStokesGLSViscous(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticFSGLSViscous {{{*/
++ElementVector* Penta::CreatePVectorDiagnosticFSGLSViscous(void){
+ 
+ 	/*Constants*/
+ 	const int numdof=NDOF4*NUMVERTICES;
+@@ -8256,7 +8256,7 @@
+ 	int        i,j;
+ 	int        approximation;
+ 	IssmDouble Jdet,gravity,rho_ice,B,D_scalar_stab,viscosity;
+-	IssmDouble forcex,forcey,forcez,diameter,stokesreconditioning;
++	IssmDouble forcex,forcey,forcez,diameter,FSreconditioning;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble l1l6[6]; //for the six nodes and the bubble 
+@@ -8275,9 +8275,9 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
+-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	rho_ice=matpar->GetRhoIce();
+@@ -8317,7 +8317,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctionsP1(&l1l6[0], gauss);
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		loadingforcex_input->GetInputValue(&forcex, gauss);
+ 		loadingforcey_input->GetInputValue(&forcey, gauss);
+@@ -8371,8 +8371,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticStokesShelf{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticStokesShelf(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticFSShelf{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticFSShelf(void){
+ 
+ 	/*Intermediaries*/
+ 	int         i,j;
+@@ -8391,8 +8391,8 @@
+ 	if(!IsOnBed() || !IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	this->parameters->FindParam(&shelf_dampening,DiagnosticShelfDampeningEnum);
+-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
++	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	rho_water=matpar->GetRhoWater();
+@@ -8476,9 +8476,9 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+-	Input* vzstokes_input=NULL;
+-	if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
+-		vzstokes_input=inputs->GetInput(VzStokesEnum); _assert_(vzstokes_input);
++	Input* vzFS_input=NULL;
++	if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++		vzFS_input=inputs->GetInput(VzFSEnum); _assert_(vzFS_input);
+ 	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+@@ -8492,8 +8492,8 @@
+ 
+ 		vx_input->GetInputDerivativeValue(&du[0],&xyz_list[0][0],gauss);
+ 		vy_input->GetInputDerivativeValue(&dv[0],&xyz_list[0][0],gauss);
+-		if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
+-			vzstokes_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
++		if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++			vzFS_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+ 			dwdz=dw[2];
+ 		}
+ 		else dwdz=0;
+@@ -8538,9 +8538,9 @@
+ 	Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(basal_melting_input);
+ 	Input* vx_input=inputs->GetInput(VxEnum);                                  _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);                                  _assert_(vy_input);
+-	Input* vzstokes_input=NULL;
+-	if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
+-		vzstokes_input=inputs->GetInput(VzStokesEnum);       _assert_(vzstokes_input);
++	Input* vzFS_input=NULL;
++	if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++		vzFS_input=inputs->GetInput(VzFSEnum);       _assert_(vzFS_input);
+ 	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+@@ -8553,8 +8553,8 @@
+ 		bed_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
+ 		vx_input->GetInputValue(&vx, gauss);
+ 		vy_input->GetInputValue(&vy, gauss);
+-		if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
+-			vzstokes_input->GetInputValue(&vz, gauss);
++		if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++			vzFS_input->GetInputValue(&vz, gauss);
+ 		}
+ 		else vz=0;
+ 
+@@ -8580,11 +8580,11 @@
+ 
+ 	switch(approximation){
+ 		case MacAyealApproximationEnum:
+-			return CreateJacobianDiagnosticMacayeal2d();
+-		case PattynApproximationEnum:
+-			return CreateJacobianDiagnosticPattyn();
+-		case StokesApproximationEnum:
+-			return CreateJacobianDiagnosticStokes();
++			return CreateJacobianDiagnosticSSA2d();
++		case HOApproximationEnum:
++			return CreateJacobianDiagnosticHO();
++		case FSApproximationEnum:
++			return CreateJacobianDiagnosticFS();
+ 		case NoneApproximationEnum:
+ 			return NULL;
+ 		default:
+@@ -8592,8 +8592,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateJacobianDiagnosticMacayeal2d{{{*/
+-ElementMatrix* Penta::CreateJacobianDiagnosticMacayeal2d(void){
++/*FUNCTION Penta::CreateJacobianDiagnosticSSA2d{{{*/
++ElementMatrix* Penta::CreateJacobianDiagnosticSSA2d(void){
+ 
+ 	/*Figure out if this penta is collapsed. If so, then bailout, except if it is at the 
+ 	  bedrock, in which case we spawn a tria element using the 3 first nodes, and use it to build 
+@@ -8615,7 +8615,7 @@
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-	ElementMatrix* Ke=tria->CreateJacobianDiagnosticMacayeal();
++	ElementMatrix* Ke=tria->CreateJacobianDiagnosticSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Delete averaged inputs*/
+@@ -8626,8 +8626,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateJacobianDiagnosticPattyn{{{*/
+-ElementMatrix* Penta::CreateJacobianDiagnosticPattyn(void){
++/*FUNCTION Penta::CreateJacobianDiagnosticHO{{{*/
++ElementMatrix* Penta::CreateJacobianDiagnosticHO(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF2*NUMVERTICES;
+@@ -8644,8 +8644,8 @@
+ 	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+-	/*Initialize Jacobian with regular Pattyn (first part of the Gateau derivative)*/
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticPattyn();
++	/*Initialize Jacobian with regular HO (first part of the Gateau derivative)*/
++	ElementMatrix* Ke=CreateKMatrixDiagnosticHO();
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -8661,7 +8661,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
+ 
+-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
++		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
+ 		eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
+ 		eps1[1]=epsilon[2];                eps2[1]=epsilon[0]+2*epsilon[1];
+@@ -8690,8 +8690,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateJacobianDiagnosticStokes{{{*/
+-ElementMatrix* Penta::CreateJacobianDiagnosticStokes(void){
++/*FUNCTION Penta::CreateJacobianDiagnosticFS{{{*/
++ElementMatrix* Penta::CreateJacobianDiagnosticFS(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF4*NUMVERTICES;
+@@ -8709,8 +8709,8 @@
+ 	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+-	/*Initialize Jacobian with regular Stokes (first part of the Gateau derivative)*/
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticStokes();
++	/*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/
++	ElementMatrix* Ke=CreateKMatrixDiagnosticFS();
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -8727,7 +8727,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
+ 
+-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
++		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
+ 		eps1[0]=epsilon[0];   eps2[0]=epsilon[2];   eps3[0]=epsilon[3];
+ 		eps1[1]=epsilon[2];   eps2[1]=epsilon[1];   eps3[1]=epsilon[4];
+@@ -8783,7 +8783,7 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 
+ 	/*If the element is a coupling, do nothing: every node is also on an other elements 
+-	 * (as coupling is between MacAyeal and Pattyn) so the other element will take care of it*/
++	 * (as coupling is between MacAyeal and HO) so the other element will take care of it*/
+ 	GetDofList(&doflist,approximation,GsetEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+@@ -8807,8 +8807,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsDiagnosticHutter{{{*/
+-void  Penta::GetSolutionFromInputsDiagnosticHutter(Vector<IssmDouble>* solution){
++/*FUNCTION Penta::GetSolutionFromInputsDiagnosticSIA{{{*/
++void  Penta::GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -8876,27 +8876,27 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsDiagnosticStokes{{{*/
+-void  Penta::GetSolutionFromInputsDiagnosticStokes(Vector<IssmDouble>* solution){
++/*FUNCTION Penta::GetSolutionFromInputsDiagnosticFS{{{*/
++void  Penta::GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solution){
+ 
+ 	const int    numdof=NDOF4*NUMVERTICES;
+ 
+ 	int          i;
+ 	int*         doflist=NULL;
+ 	IssmDouble       vx,vy,vz,p;
+-	IssmDouble       stokesreconditioning;
++	IssmDouble       FSreconditioning;
+ 	IssmDouble       values[numdof];
+ 	GaussPenta   *gauss;
+ 
+ 	/*Get dof list: */
+-	GetDofList(&doflist,StokesApproximationEnum,GsetEnum);
++	GetDofList(&doflist,FSApproximationEnum,GsetEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);       _assert_(vz_input);
+ 	Input* p_input =inputs->GetInput(PressureEnum); _assert_(p_input);
+ 
+ 	/*Recondition pressure: */
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+ 	/*Ok, we have vx vy vz and P in values, fill in vx vy vz P arrays: */
+ 	/*P1 element only for now*/
+@@ -8910,7 +8910,7 @@
+ 		values[i*NDOF4+0]=vx;
+ 		values[i*NDOF4+1]=vy;
+ 		values[i*NDOF4+2]=vz;
+-		values[i*NDOF4+3]=p/stokesreconditioning;
++		values[i*NDOF4+3]=p/FSreconditioning;
+ 	}
+ 
+ 	/*Add value to global vector*/
+@@ -8960,8 +8960,8 @@
+ 	tau_perp = matpar->GetRhoIce() * matpar->GetG() * fabs(s-z)*sqrt(slope[0]*slope[0]+slope[1]*slope[1]);
+ 
+ 	/* Get eps_b*/
+-	vx_input->GetVxStrainRate3dPattyn(epsilonvx,xyz_list,gauss);
+-	vy_input->GetVyStrainRate3dPattyn(epsilonvy,xyz_list,gauss);
++	vx_input->GetVxStrainRate3dHO(epsilonvx,xyz_list,gauss);
++	vy_input->GetVyStrainRate3dHO(epsilonvy,xyz_list,gauss);
+ 	for(i=0;i<5;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i];
+ 	eps_b = sqrt(epsilon[0]*epsilon[0] + epsilon[1]*epsilon[1] + epsilon[0]*epsilon[1] + epsilon[2]*epsilon[2]);
+ 	if(eps_b==0.){
+@@ -9014,20 +9014,20 @@
+ 		InputUpdateFromSolutionDiagnosticL1L2(solution);
+ 		return;
+ 	}
+-	else if (approximation==PattynApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticPattyn(solution);
++	else if (approximation==HOApproximationEnum){
++		InputUpdateFromSolutionDiagnosticHO(solution);
+ 	}
+-	else if (approximation==PattynStokesApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticPattynStokes(solution);
++	else if (approximation==HOFSApproximationEnum){
++		InputUpdateFromSolutionDiagnosticHOFS(solution);
+ 	}
+-	else if (approximation==MacAyealStokesApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticMacAyealStokes(solution);
++	else if (approximation==MacAyealFSApproximationEnum){
++		InputUpdateFromSolutionDiagnosticMacAyealFS(solution);
+ 	}
+-	else if (approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticStokes(solution);
++	else if (approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
++		InputUpdateFromSolutionDiagnosticFS(solution);
+ 	}
+-	else if (approximation==MacAyealPattynApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticMacAyealPattyn(solution);
++	else if (approximation==MacAyealHOApproximationEnum){
++		InputUpdateFromSolutionDiagnosticMacAyealHO(solution);
+ 	}
+ }
+ /*}}}*/
+@@ -9112,16 +9112,16 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealPattyn {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticMacAyealPattyn(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealHO {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticMacAyealHO(IssmDouble* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 	const int    numdof2d=NDOF2*NUMVERTICES2D;
+ 
+ 	int     i;
+ 	IssmDouble  rho_ice,g;
+-	IssmDouble  macayeal_values[numdof];
+-	IssmDouble  pattyn_values[numdof];
++	IssmDouble  SSA_values[numdof];
++	IssmDouble  HO_values[numdof];
+ 	IssmDouble  vx[NUMVERTICES];
+ 	IssmDouble  vy[NUMVERTICES];
+ 	IssmDouble  vz[NUMVERTICES];
+@@ -9133,12 +9133,12 @@
+ 	int*    doflistm = NULL;
+ 	Penta   *penta   = NULL;
+ 
+-	/*OK, we have to add results of this element for pattyn 
+-	 * and results from the penta at base for macayeal. Now recover results*/
++	/*OK, we have to add results of this element for HO 
++	 * and results from the penta at base for SSA. Now recover results*/
+ 	penta=GetBasalElement();
+ 
+-	/*Get dof listof this element (pattyn dofs) and of the penta at base (macayeal dofs): */
+-	GetDofList(&doflistp,PattynApproximationEnum,GsetEnum);
++	/*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */
++	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
+ 	penta->GetDofList(&doflistm,MacAyealApproximationEnum,GsetEnum);
+ 
+ 	/*Get node data: */
+@@ -9146,22 +9146,22 @@
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof2d;i++){
+-		pattyn_values[i]=solution[doflistp[i]];
+-		macayeal_values[i]=solution[doflistm[i]];
++		HO_values[i]=solution[doflistp[i]];
++		SSA_values[i]=solution[doflistm[i]];
+ 	}
+ 	for(i=numdof2d;i<numdof;i++){
+-		pattyn_values[i]=solution[doflistp[i]];
+-		macayeal_values[i]=macayeal_values[i-numdof2d];
++		HO_values[i]=solution[doflistp[i]];
++		SSA_values[i]=SSA_values[i-numdof2d];
+ 	}
+ 
+ 	/*Transform solution in Cartesian Space*/
+-	TransformSolutionCoord(&macayeal_values[0],penta->nodes,NUMVERTICES,XYEnum);
+-	TransformSolutionCoord(&pattyn_values[0],   this->nodes,NUMVERTICES,XYEnum);
++	TransformSolutionCoord(&SSA_values[0],penta->nodes,NUMVERTICES,XYEnum);
++	TransformSolutionCoord(&HO_values[0],   this->nodes,NUMVERTICES,XYEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		vx[i]=macayeal_values[i*NDOF2+0]+pattyn_values[i*NDOF2+0];
+-		vy[i]=macayeal_values[i*NDOF2+1]+pattyn_values[i*NDOF2+1];
++		vx[i]=SSA_values[i*NDOF2+0]+HO_values[i*NDOF2+0];
++		vy[i]=SSA_values[i*NDOF2+1]+HO_values[i*NDOF2+1];
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+@@ -9196,22 +9196,22 @@
+ 	xDelete<int>(doflistm);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealStokes {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticMacAyealStokes(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealFS {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticMacAyealFS(IssmDouble* solution){
+ 
+ 	const int    numdofm=NDOF2*NUMVERTICES;
+ 	const int    numdofs=NDOF4*NUMVERTICES;
+ 	const int    numdof2d=NDOF2*NUMVERTICES2D;
+ 
+ 	int     i;
+-	IssmDouble  stokesreconditioning;
+-	IssmDouble  macayeal_values[numdofm];
+-	IssmDouble  stokes_values[numdofs];
++	IssmDouble  FSreconditioning;
++	IssmDouble  SSA_values[numdofm];
++	IssmDouble  FS_values[numdofs];
+ 	IssmDouble  vx[NUMVERTICES];
+ 	IssmDouble  vy[NUMVERTICES];
+ 	IssmDouble  vz[NUMVERTICES];
+-	IssmDouble  vzmacayeal[NUMVERTICES];
+-	IssmDouble  vzstokes[NUMVERTICES];
++	IssmDouble  vzSSA[NUMVERTICES];
++	IssmDouble  vzFS[NUMVERTICES];
+ 	IssmDouble  vel[NUMVERTICES];
+ 	IssmDouble  pressure[NUMVERTICES];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+@@ -9219,52 +9219,52 @@
+ 	int*    doflists        = NULL;
+ 	Penta   *penta          = NULL;
+ 
+-	/*OK, we have to add results of this element for macayeal 
+-	 * and results from the penta at base for macayeal. Now recover results*/
++	/*OK, we have to add results of this element for SSA 
++	 * and results from the penta at base for SSA. Now recover results*/
+ 	penta=GetBasalElement();
+ 
+-	/*Get dof listof this element (macayeal dofs) and of the penta at base (macayeal dofs): */
++	/*Get dof listof this element (SSA dofs) and of the penta at base (SSA dofs): */
+ 	penta->GetDofList(&doflistm,MacAyealApproximationEnum,GsetEnum);
+-	GetDofList(&doflists,StokesApproximationEnum,GsetEnum);
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	GetDofList(&doflists,FSApproximationEnum,GsetEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof2d;i++){
+-		macayeal_values[i]=solution[doflistm[i]];
+-		macayeal_values[i+numdof2d]=solution[doflistm[i]];
++		SSA_values[i]=solution[doflistm[i]];
++		SSA_values[i+numdof2d]=solution[doflistm[i]];
+ 	}
+ 	for(i=0;i<numdofs;i++){
+-		stokes_values[i]=solution[doflists[i]];
++		FS_values[i]=solution[doflists[i]];
+ 	}
+ 
+ 	/*Transform solution in Cartesian Space*/
+-	TransformSolutionCoord(&macayeal_values[0],this->nodes,NUMVERTICES,XYEnum);
+-	TransformSolutionCoord(&stokes_values[0],this->nodes,NUMVERTICES,XYZPEnum);
++	TransformSolutionCoord(&SSA_values[0],this->nodes,NUMVERTICES,XYEnum);
++	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZPEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		vx[i]=stokes_values[i*NDOF4+0]+macayeal_values[i*NDOF2+0];
+-		vy[i]=stokes_values[i*NDOF4+1]+macayeal_values[i*NDOF2+1];
+-		vzstokes[i]=stokes_values[i*NDOF4+2];
+-		pressure[i]=stokes_values[i*NDOF4+3]*stokesreconditioning;
++		vx[i]=FS_values[i*NDOF4+0]+SSA_values[i*NDOF2+0];
++		vy[i]=FS_values[i*NDOF4+1]+SSA_values[i*NDOF2+1];
++		vzFS[i]=FS_values[i*NDOF4+2];
++		pressure[i]=FS_values[i*NDOF4+3]*FSreconditioning;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(vzstokes[i])) _error_("NaN found in solution vector");
++		if(xIsNan<IssmDouble>(vzFS[i])) _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+ 	}
+ 
+ 	/*Get Vz*/
+-	Input* vzmacayeal_input=inputs->GetInput(VzMacAyealEnum);
+-	if (vzmacayeal_input){
+-		if (vzmacayeal_input->ObjectEnum()!=PentaInputEnum){
+-			_error_("Cannot compute Vel as VzMacAyeal is of type " << EnumToStringx(vzmacayeal_input->ObjectEnum()));
++	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);
++	if (vzSSA_input){
++		if (vzSSA_input->ObjectEnum()!=PentaInputEnum){
++			_error_("Cannot compute Vel as VzMacAyeal is of type " << EnumToStringx(vzSSA_input->ObjectEnum()));
+ 		}
+-		GetInputListOnVertices(&vzmacayeal[0],VzMacAyealEnum);
++		GetInputListOnVertices(&vzSSA[0],VzMacAyealEnum);
+ 	}
+ 	else{
+ 		_error_("Cannot update solution as VzMacAyeal is not present");
+@@ -9272,7 +9272,7 @@
+ 
+ 	/*Now Compute vel*/
+ 	for(i=0;i<NUMVERTICES;i++) {
+-		vz[i]=vzmacayeal[i]+vzstokes[i];
++		vz[i]=vzSSA[i]+vzFS[i];
+ 		vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
+ 	}
+ 
+@@ -9287,7 +9287,7 @@
+ 	this->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
+-	this->inputs->AddInput(new PentaInput(VzStokesEnum,vzstokes,P1Enum));
++	this->inputs->AddInput(new PentaInput(VzFSEnum,vzFS,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+@@ -9377,8 +9377,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticPattyn {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticPattyn(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHO {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticHO(IssmDouble* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -9395,7 +9395,7 @@
+ 	int*   doflist = NULL;
+ 
+ 	/*Get dof list: */
+-	GetDofList(&doflist,PattynApproximationEnum,GsetEnum);
++	GetDofList(&doflist,HOApproximationEnum,GsetEnum);
+ 
+ 	/*Get node data: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -9451,77 +9451,77 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticPattynStokes {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticPattynStokes(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHOFS {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticHOFS(IssmDouble* solution){
+ 
+ 	const int    numdofp=NDOF2*NUMVERTICES;
+ 	const int    numdofs=NDOF4*NUMVERTICES;
+ 
+ 	int    i;
+-	IssmDouble pattyn_values[numdofp];
+-	IssmDouble stokes_values[numdofs];
++	IssmDouble HO_values[numdofp];
++	IssmDouble FS_values[numdofs];
+ 	IssmDouble vx[NUMVERTICES];
+ 	IssmDouble vy[NUMVERTICES];
+ 	IssmDouble vz[NUMVERTICES];
+-	IssmDouble vzpattyn[NUMVERTICES];
+-	IssmDouble vzstokes[NUMVERTICES];
++	IssmDouble vzHO[NUMVERTICES];
++	IssmDouble vzFS[NUMVERTICES];
+ 	IssmDouble vel[NUMVERTICES];
+ 	IssmDouble pressure[NUMVERTICES];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble stokesreconditioning;
++	IssmDouble FSreconditioning;
+ 	int*   doflistp      = NULL;
+ 	int*   doflists      = NULL;
+ 	Penta  *penta        = NULL;
+ 
+-	/*OK, we have to add results of this element for pattyn 
+-	 * and results from the penta at base for macayeal. Now recover results*/
++	/*OK, we have to add results of this element for HO 
++	 * and results from the penta at base for SSA. Now recover results*/
+ 	penta=GetBasalElement();
+ 
+-	/*Get dof listof this element (pattyn dofs) and of the penta at base (macayeal dofs): */
+-	GetDofList(&doflistp,PattynApproximationEnum,GsetEnum);
+-	GetDofList(&doflists,StokesApproximationEnum,GsetEnum);
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
++	/*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */
++	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
++	GetDofList(&doflists,FSApproximationEnum,GsetEnum);
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	for(i=0;i<numdofp;i++) pattyn_values[i]=solution[doflistp[i]];
+-	for(i=0;i<numdofs;i++) stokes_values[i]=solution[doflists[i]];
++	for(i=0;i<numdofp;i++) HO_values[i]=solution[doflistp[i]];
++	for(i=0;i<numdofs;i++) FS_values[i]=solution[doflists[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+-	TransformSolutionCoord(&pattyn_values[0],this->nodes,NUMVERTICES,XYEnum);
+-	TransformSolutionCoord(&stokes_values[0],this->nodes,NUMVERTICES,XYZPEnum);
++	TransformSolutionCoord(&HO_values[0],this->nodes,NUMVERTICES,XYEnum);
++	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZPEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		vx[i]=stokes_values[i*NDOF4+0]+pattyn_values[i*NDOF2+0];
+-		vy[i]=stokes_values[i*NDOF4+1]+pattyn_values[i*NDOF2+1];
+-		vzstokes[i]=stokes_values[i*NDOF4+2];
+-		pressure[i]=stokes_values[i*NDOF4+3]*stokesreconditioning;
++		vx[i]=FS_values[i*NDOF4+0]+HO_values[i*NDOF2+0];
++		vy[i]=FS_values[i*NDOF4+1]+HO_values[i*NDOF2+1];
++		vzFS[i]=FS_values[i*NDOF4+2];
++		pressure[i]=FS_values[i*NDOF4+3]*FSreconditioning;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(vzstokes[i])) _error_("NaN found in solution vector");
++		if(xIsNan<IssmDouble>(vzFS[i])) _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+ 	}
+ 
+ 	/*Get Vz*/
+-	Input* vzpattyn_input=inputs->GetInput(VzPattynEnum);
+-	if (vzpattyn_input){
+-		if (vzpattyn_input->ObjectEnum()!=PentaInputEnum){
+-			_error_("Cannot compute Vel as VzPattyn is of type " << EnumToStringx(vzpattyn_input->ObjectEnum()));
++	Input* vzHO_input=inputs->GetInput(VzHOEnum);
++	if (vzHO_input){
++		if (vzHO_input->ObjectEnum()!=PentaInputEnum){
++			_error_("Cannot compute Vel as VzHO is of type " << EnumToStringx(vzHO_input->ObjectEnum()));
+ 		}
+-		GetInputListOnVertices(&vzpattyn[0],VzPattynEnum);
++		GetInputListOnVertices(&vzHO[0],VzHOEnum);
+ 	}
+ 	else{
+-		_error_("Cannot update solution as VzPattyn is not present");
++		_error_("Cannot update solution as VzHO is not present");
+ 	}
+ 
+ 	/*Now Compute vel*/
+ 	for(i=0;i<NUMVERTICES;i++) {
+-		vz[i]=vzpattyn[i]+vzstokes[i];
++		vz[i]=vzHO[i]+vzFS[i];
+ 		vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
+ 	}
+ 
+@@ -9536,7 +9536,7 @@
+ 	this->inputs->AddInput(new PentaInput(VxEnum,vx,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
+-	this->inputs->AddInput(new PentaInput(VzStokesEnum,vzstokes,P1Enum));
++	this->inputs->AddInput(new PentaInput(VzFSEnum,vzFS,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+@@ -9545,8 +9545,8 @@
+ 	xDelete<int>(doflists);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHutter {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticHutter(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSIA {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -9620,18 +9620,18 @@
+ 	IssmDouble   vx[NUMVERTICES];
+ 	IssmDouble   vy[NUMVERTICES];
+ 	IssmDouble   vz[NUMVERTICES];
+-	IssmDouble   vzmacayeal[NUMVERTICES];
+-	IssmDouble   vzpattyn[NUMVERTICES];
+-	IssmDouble   vzstokes[NUMVERTICES];
++	IssmDouble   vzSSA[NUMVERTICES];
++	IssmDouble   vzHO[NUMVERTICES];
++	IssmDouble   vzFS[NUMVERTICES];
+ 	IssmDouble   vel[NUMVERTICES];
+ 	IssmDouble   pressure[NUMVERTICES];
+ 	IssmDouble   surface[NUMVERTICES];
+ 	IssmDouble   xyz_list[NUMVERTICES][3];
+ 	int*     doflist      = NULL;
+ 
+-	/*Get the approximation and do nothing if the element in Stokes or None*/
++	/*Get the approximation and do nothing if the element in FS or None*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
++	if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+ 		return;
+ 	}
+ 
+@@ -9652,29 +9652,29 @@
+ 	GetInputListOnVertices(&vx[0],VxEnum,0.0); //default is 0
+ 	GetInputListOnVertices(&vy[0],VyEnum,0.0); //default is 0
+ 
+-	/*Do some modifications if we actually have a PattynStokes or MacAyealStokes element*/
+-	if(approximation==PattynStokesApproximationEnum){
+-		Input* vzstokes_input=inputs->GetInput(VzStokesEnum);
+-		if (vzstokes_input){
+-			if (vzstokes_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));
+-			GetInputListOnVertices(&vzstokes[0],VzStokesEnum);
++	/*Do some modifications if we actually have a HOFS or MacAyealFS element*/
++	if(approximation==HOFSApproximationEnum){
++		Input* vzFS_input=inputs->GetInput(VzFSEnum);
++		if (vzFS_input){
++			if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
++			GetInputListOnVertices(&vzFS[0],VzFSEnum);
+ 		}
+-		else _error_("Cannot compute Vz as VzStokes in not present in PattynStokes element");
++		else _error_("Cannot compute Vz as VzFS in not present in HOFS element");
+ 		for(i=0;i<NUMVERTICES;i++){
+-			vzpattyn[i]=vz[i];
+-			vz[i]=vzpattyn[i]+vzstokes[i];
++			vzHO[i]=vz[i];
++			vz[i]=vzHO[i]+vzFS[i];
+ 		}
+ 	}
+-	else if(approximation==MacAyealStokesApproximationEnum){
+-		Input* vzstokes_input=inputs->GetInput(VzStokesEnum);
+-		if (vzstokes_input){
+-			if (vzstokes_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));
+-			GetInputListOnVertices(&vzstokes[0],VzStokesEnum);
++	else if(approximation==MacAyealFSApproximationEnum){
++		Input* vzFS_input=inputs->GetInput(VzFSEnum);
++		if (vzFS_input){
++			if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
++			GetInputListOnVertices(&vzFS[0],VzFSEnum);
+ 		}
+-		else _error_("Cannot compute Vz as VzStokes in not present in MacAyealStokes element");
++		else _error_("Cannot compute Vz as VzFS in not present in MacAyealFS element");
+ 		for(i=0;i<NUMVERTICES;i++){
+-			vzmacayeal[i]=vz[i];
+-			vz[i]=vzmacayeal[i]+vzstokes[i];
++			vzSSA[i]=vz[i];
++			vz[i]=vzSSA[i]+vzFS[i];
+ 		}
+ 	}
+ 
+@@ -9682,8 +9682,8 @@
+ 	for(i=0;i<NUMVERTICES;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
+ 
+ 	/*For pressure: we have not computed pressure in this analysis, for this element. We are in 3D, 
+-	 *so the pressure is just the pressure at the z elevation: except it this is a PattynStokes element */
+-	if(approximation!=PattynStokesApproximationEnum &&  approximation!=MacAyealStokesApproximationEnum){
++	 *so the pressure is just the pressure at the z elevation: except it this is a HOFS element */
++	if(approximation!=HOFSApproximationEnum &&  approximation!=MacAyealFSApproximationEnum){
+ 		rho_ice=matpar->GetRhoIce();
+ 		g=matpar->GetG();
+ 		GetInputListOnVertices(&surface[0],SurfaceEnum);
+@@ -9694,15 +9694,15 @@
+ 	 * status, otherwise, we'll wipe them off and add the new inputs: */
+ 	this->inputs->ChangeEnum(VzEnum,VzPicardEnum);
+ 
+-	if(approximation!=PattynStokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum){
++	if(approximation!=HOFSApproximationEnum && approximation!=MacAyealFSApproximationEnum){
+ 		this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 		this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 	}
+-	else if(approximation==PattynStokesApproximationEnum){
+-		this->inputs->AddInput(new PentaInput(VzPattynEnum,vzpattyn,P1Enum));
++	else if(approximation==HOFSApproximationEnum){
++		this->inputs->AddInput(new PentaInput(VzHOEnum,vzHO,P1Enum));
+ 	}
+-	else if(approximation==MacAyealStokesApproximationEnum){
+-		this->inputs->AddInput(new PentaInput(VzMacAyealEnum,vzmacayeal,P1Enum));
++	else if(approximation==MacAyealFSApproximationEnum){
++		this->inputs->AddInput(new PentaInput(VzMacAyealEnum,vzSSA,P1Enum));
+ 	}
+ 	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
+@@ -9711,8 +9711,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticStokes {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticStokes(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticFS {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticFS(IssmDouble* solution){
+ 
+ 	const int numdof=NDOF4*NUMVERTICES;
+ 
+@@ -9723,11 +9723,11 @@
+ 	IssmDouble  vz[NUMVERTICES];
+ 	IssmDouble  vel[NUMVERTICES];
+ 	IssmDouble  pressure[NUMVERTICES];
+-	IssmDouble  stokesreconditioning;
++	IssmDouble  FSreconditioning;
+ 	int*    doflist=NULL;
+ 
+ 	/*Get dof list: */
+-	GetDofList(&doflist,StokesApproximationEnum,GsetEnum);
++	GetDofList(&doflist,FSApproximationEnum,GsetEnum);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
+@@ -9750,8 +9750,8 @@
+ 	}
+ 
+ 	/*Recondition pressure and compute vel: */
+-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+-	for(i=0;i<NUMVERTICES;i++) pressure[i]=pressure[i]*stokesreconditioning;
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	for(i=0;i<NUMVERTICES;i++) pressure[i]=pressure[i]*FSreconditioning;
+ 	for(i=0;i<NUMVERTICES;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
+ 
+ 	/*Now, we have to move the previous inputs  to old 
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15564)
+@@ -37,27 +37,27 @@
+ 		void GetTriaJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss);
+ 		void GetSegmentJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss);
+ 		void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussPenta* gauss);
+-		void GetBMacAyealPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBMacAyealStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBStokesGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBprimePattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBprimeStokes(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBprimeStokesGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBMacAyealHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBFSGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBprimeFSGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBAdvec(IssmDouble* B_advec, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBConduct(IssmDouble* B_conduct, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeAdvec(IssmDouble* Bprime_advec, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBPattynFriction(IssmDouble* L, GaussPenta* gauss);
+-		void GetLStokes(IssmDouble* LStokes, GaussPenta* gauss);
+-		void GetLprimeStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetLMacAyealStokes(IssmDouble* LMacAyealStokes, GaussPenta* gauss);
+-		void GetLprimeMacAyealStokes(IssmDouble* LprimeMacAyealStokes, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetLStokesMacAyeal(IssmDouble* LStokesMacAyeal, GaussPenta* gauss);
+-		void GetLprimeStokesMacAyeal(IssmDouble* LprimeStokesMacAyeal, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBHOFriction(IssmDouble* L, GaussPenta* gauss);
++		void GetLFS(IssmDouble* LFS, GaussPenta* gauss);
++		void GetLprimeFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetLMacAyealFS(IssmDouble* LMacAyealFS, GaussPenta* gauss);
++		void GetLprimeMacAyealFS(IssmDouble* LprimeMacAyealFS, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetLFSMacAyeal(IssmDouble* LFSMacAyeal, GaussPenta* gauss);
++		void GetLprimeFSMacAyeal(IssmDouble* LprimeFSMacAyeal, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,IssmDouble* plist, GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,IssmDouble* plist,GaussTria* gauss){_error_("only PentaGauss are supported");};
+ 		void GetInputDerivativeValue(IssmDouble* pvalues, IssmDouble* plist,IssmDouble* xyz_list, GaussPenta* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15564)
+@@ -144,11 +144,11 @@
+ 		void   GradientIndexing(int* indexing,int control_index);
+ 		void   Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
+ 		void   GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjDragPattyn(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjDragStokes(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjDragHO(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjBbarMacAyeal(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjBbarPattyn(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjBbarStokes(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjBbarHO(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjBbarFS(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data);
+ 		void   SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index);
+ 		void   ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
+@@ -196,7 +196,7 @@
+ 		void           GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+ 		void	         GetSolutionFromInputsEnthalpy(Vector<IssmDouble>* solutiong);
+ 		IssmDouble     GetStabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa);
+-		void    GetStrainRate3dPattyn(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);
++		void    GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);
+ 		void    GetStrainRate3d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input, Input* vz_input);
+ 		Penta*  GetUpperElement(void);
+ 		void    GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[6][3],int levelsetenum);
+@@ -214,86 +214,86 @@
+ 		bool    IsNodeOnShelfFromFlags(IssmDouble* flags);
+ 		bool    IsOnWater(void); 
+ 		IssmDouble  MinEdgeLength(IssmDouble xyz_list[6][3]);
+-		void	  ReduceMatrixStokes(IssmDouble* Ke_reduced, IssmDouble* Ke_temp);
+-		void	  ReduceVectorStokes(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);
++		void	  ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp);
++		void	  ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);
+ 		void	  SetClone(int* minranks);
+ 		Tria*	  SpawnTria(int g0, int g1, int g2);
+ 		void	  SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+ 		void     UpdateConstraints(void);
+ 
+ 		#ifdef _HAVE_DIAGNOSTIC_
+-		ElementMatrix* CreateKMatrixCouplingMacAyealPattyn(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealPattynViscous(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealPattynFriction(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealStokes(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealStokesViscous(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealStokesFriction(void);
+-		ElementMatrix* CreateKMatrixCouplingPattynStokes(void);
++		ElementMatrix* CreateKMatrixCouplingMacAyealHO(void);
++		ElementMatrix* CreateKMatrixCouplingMacAyealHOViscous(void);
++		ElementMatrix* CreateKMatrixCouplingMacAyealHOFriction(void);
++		ElementMatrix* CreateKMatrixCouplingMacAyealFS(void);
++		ElementMatrix* CreateKMatrixCouplingMacAyealFSViscous(void);
++		ElementMatrix* CreateKMatrixCouplingMacAyealFSFriction(void);
++		ElementMatrix* CreateKMatrixCouplingHOFS(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticHoriz(void);
+ 		ElementMatrix* CreateKMatrixAdjointHoriz(void);
+ 		ElementVector* CreateDVectorDiagnosticHoriz(void);
+-		ElementVector* CreateDVectorDiagnosticStokes(void);
+-		ElementMatrix* CreateKMatrixDiagnosticHutter(void);
++		ElementVector* CreateDVectorDiagnosticFS(void);
++		ElementMatrix* CreateKMatrixDiagnosticSIA(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal2d(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3d(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3dViscous(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3dFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyealPattyn(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyealStokes(void);
++		ElementMatrix* CreateKMatrixDiagnosticMacAyealHO(void);
++		ElementMatrix* CreateKMatrixDiagnosticMacAyealFS(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticL1L2(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticL1L2Viscous(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticL1L2Friction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticPattyn(void);
+-		ElementMatrix* CreateKMatrixDiagnosticPattynViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticPattynFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticPattynStokes(void);
+-		ElementMatrix* CreateKMatrixDiagnosticStokes(void);
+-		ElementMatrix* CreateKMatrixDiagnosticStokesViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticStokesGLSViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticStokesFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticStokesGLSFriction(void);
++		ElementMatrix* CreateKMatrixDiagnosticHO(void);
++		ElementMatrix* CreateKMatrixDiagnosticHOViscous(void);
++		ElementMatrix* CreateKMatrixDiagnosticHOFriction(void);
++		ElementMatrix* CreateKMatrixDiagnosticHOFS(void);
++		ElementMatrix* CreateKMatrixDiagnosticFS(void);
++		ElementMatrix* CreateKMatrixDiagnosticFSViscous(void);
++		ElementMatrix* CreateKMatrixDiagnosticFSGLSViscous(void);
++		ElementMatrix* CreateKMatrixDiagnosticFSFriction(void);
++		ElementMatrix* CreateKMatrixDiagnosticFSGLSFriction(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVert(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVertVolume(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVertSurface(void);
+ 		ElementMatrix* CreateJacobianDiagnosticHoriz(void);
+-		ElementMatrix* CreateJacobianDiagnosticMacayeal2d(void);
+-		ElementMatrix* CreateJacobianDiagnosticPattyn(void);
+-		ElementMatrix* CreateJacobianDiagnosticStokes(void);
++		ElementMatrix* CreateJacobianDiagnosticSSA2d(void);
++		ElementMatrix* CreateJacobianDiagnosticHO(void);
++		ElementMatrix* CreateJacobianDiagnosticFS(void);
+ 		void           InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionDiagnosticMacAyeal( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticMacAyealPattyn( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticMacAyealStokes( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticMacAyealHO( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticMacAyealFS( IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionDiagnosticL1L2( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticPattyn( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticPattynStokes( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticHutter( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticHO( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticHOFS( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticSIA( IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionDiagnosticVert( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticStokes( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticFS( IssmDouble* solutiong);
+ 		void	         GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solutiong);
+-		void	         GetSolutionFromInputsDiagnosticHutter(Vector<IssmDouble>* solutiong);
+-		void	         GetSolutionFromInputsDiagnosticStokes(Vector<IssmDouble>* solutiong);
++		void	         GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solutiong);
++		void	         GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solutiong);
+ 		void	         GetSolutionFromInputsDiagnosticVert(Vector<IssmDouble>* solutiong);
+-		ElementVector* CreatePVectorCouplingMacAyealStokes(void);
+-		ElementVector* CreatePVectorCouplingMacAyealStokesViscous(void);
+-		ElementVector* CreatePVectorCouplingMacAyealStokesFriction(void);
+-		ElementVector* CreatePVectorCouplingPattynStokes(void);
+-		ElementVector* CreatePVectorCouplingPattynStokesViscous(void);
+-		ElementVector* CreatePVectorCouplingPattynStokesFriction(void);
++		ElementVector* CreatePVectorCouplingMacAyealFS(void);
++		ElementVector* CreatePVectorCouplingMacAyealFSViscous(void);
++		ElementVector* CreatePVectorCouplingMacAyealFSFriction(void);
++		ElementVector* CreatePVectorCouplingHOFS(void);
++		ElementVector* CreatePVectorCouplingHOFSViscous(void);
++		ElementVector* CreatePVectorCouplingHOFSFriction(void);
+ 		ElementVector* CreatePVectorDiagnosticHoriz(void);
+-		ElementVector* CreatePVectorDiagnosticHutter(void);
++		ElementVector* CreatePVectorDiagnosticSIA(void);
+ 		ElementVector* CreatePVectorDiagnosticMacAyeal(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyealPattyn(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyealStokes(void);
++		ElementVector* CreatePVectorDiagnosticMacAyealHO(void);
++		ElementVector* CreatePVectorDiagnosticMacAyealFS(void);
+ 		ElementVector* CreatePVectorDiagnosticL1L2(void);
+-		ElementVector* CreatePVectorDiagnosticPattyn(void);
+-		ElementVector* CreatePVectorDiagnosticPattynDrivingStress(void);
+-		ElementVector* CreatePVectorDiagnosticPattynFront(void);
+-		ElementVector* CreatePVectorDiagnosticPattynStokes(void);
+-		ElementVector* CreatePVectorDiagnosticStokes(void);
+-		ElementVector* CreatePVectorDiagnosticStokesFront(void);
+-		ElementVector* CreatePVectorDiagnosticStokesViscous(void);
+-		ElementVector* CreatePVectorDiagnosticStokesGLSViscous(void);
+-		ElementVector* CreatePVectorDiagnosticStokesShelf(void);
++		ElementVector* CreatePVectorDiagnosticHO(void);
++		ElementVector* CreatePVectorDiagnosticHODrivingStress(void);
++		ElementVector* CreatePVectorDiagnosticHOFront(void);
++		ElementVector* CreatePVectorDiagnosticHOFS(void);
++		ElementVector* CreatePVectorDiagnosticFS(void);
++		ElementVector* CreatePVectorDiagnosticFSFront(void);
++		ElementVector* CreatePVectorDiagnosticFSViscous(void);
++		ElementVector* CreatePVectorDiagnosticFSGLSViscous(void);
++		ElementVector* CreatePVectorDiagnosticFSShelf(void);
+ 		ElementVector* CreatePVectorDiagnosticVert(void);
+ 		ElementVector* CreatePVectorDiagnosticVertVolume(void);
+ 		ElementVector* CreatePVectorDiagnosticVertBase(void);
+@@ -303,13 +303,13 @@
+ 		#ifdef _HAVE_CONTROL_
+ 		ElementVector* CreatePVectorAdjointHoriz(void);
+ 		ElementMatrix* CreateKMatrixAdjointMacAyeal2d(void);
+-		ElementMatrix* CreateKMatrixAdjointPattyn(void);
+-		ElementMatrix* CreateKMatrixAdjointStokes(void);
++		ElementMatrix* CreateKMatrixAdjointHO(void);
++		ElementMatrix* CreateKMatrixAdjointFS(void);
+ 		ElementVector* CreatePVectorAdjointMacAyeal(void);
+-		ElementVector* CreatePVectorAdjointPattyn(void);
+-		ElementVector* CreatePVectorAdjointStokes(void);
++		ElementVector* CreatePVectorAdjointHO(void);
++		ElementVector* CreatePVectorAdjointFS(void);
+ 		void    InputUpdateFromSolutionAdjointHoriz( IssmDouble* solutiong);
+-		void    InputUpdateFromSolutionAdjointStokes( IssmDouble* solutiong);
++		void    InputUpdateFromSolutionAdjointFS( IssmDouble* solutiong);
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15564)
+@@ -113,8 +113,8 @@
+ 	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBMacAyealStokes {{{*/
+-void TriaRef::GetBMacAyealStokes(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
++/*FUNCTION TriaRef::GetBMacAyealFS {{{*/
++void TriaRef::GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
+ 
+ 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+@@ -264,8 +264,8 @@
+ 	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBprimeMacAyealStokes {{{*/
+-void TriaRef::GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
++/*FUNCTION TriaRef::GetBprimeMacAyealFS {{{*/
++void TriaRef::GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
+ 	/*Compute Bprime  matrix. Bprime=[Bprime1 Bprime2 Bprime3] where Bprimei is of size 3*NDOF2. 
+ 	 * For node i, Bprimei can be expressed in the actual coordinate system
+ 	 * by: 
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 15564)
+@@ -60,8 +60,8 @@
+ 		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void ChangeEnum(int newenumtype);
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+ 		void ConstrainMin(IssmDouble minimum);
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 15564)
+@@ -43,8 +43,8 @@
+ 		virtual void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss)=0;
+ 		virtual void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss)=0;
+ 		virtual void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss)=0;
+-		virtual void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss)=0;
+-		virtual void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss)=0;
++		virtual void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss)=0;
++		virtual void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss)=0;
+ 		virtual void ChangeEnum(int newenumtype)=0;
+ 		virtual void Configure(Parameters* parameters)=0;
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 15564)
+@@ -66,8 +66,8 @@
+ 		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 15564)
+@@ -60,8 +60,8 @@
+ 		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 15564)
+@@ -62,8 +62,8 @@
+ 		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void ChangeEnum(int newenumtype);
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 15564)
+@@ -61,8 +61,8 @@
+ 		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void ChangeEnum(int newenumtype);
+ 		void SquareMin(IssmDouble* psquaremin, Parameters* parameters);
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 15564)
+@@ -61,8 +61,8 @@
+ 		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void ChangeEnum(int newenumtype);
+ 
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15564)
+@@ -144,7 +144,7 @@
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+ 	/*Get B matrix: */
+-	GetBStokes(&B[0][0], xyz_list, gauss);
++	GetBFS(&B[0][0], xyz_list, gauss);
+ 
+ 	/*Create a reduced matrix of B to get rid of pressure */
+ 	for (i=0;i<6;i++){
+@@ -192,7 +192,7 @@
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+ 	/*Get B matrix: */
+-	GetBStokes(&B[0][0], xyz_list, gauss);
++	GetBFS(&B[0][0], xyz_list, gauss);
+ 	/*Create a reduced matrix of B to get rid of pressure */
+ 	for (i=0;i<6;i++){
+ 		for (j=0;j<3;j++){
+@@ -237,7 +237,7 @@
+ 	IssmDouble velocity[numnodes][DOFVELOCITY];
+ 
+ 	/*Get B matrix: */
+-	GetBStokes(&B[0][0], xyz_list, gauss);
++	GetBFS(&B[0][0], xyz_list, gauss);
+ 
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+@@ -275,8 +275,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaInput::GetVxStrainRate3dPattyn{{{*/
+-void PentaInput::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaInput::GetVxStrainRate3dHO{{{*/
++void PentaInput::GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+ 	int i;
+ 	const int numnodes=6;
+@@ -284,7 +284,7 @@
+ 	IssmDouble velocity[numnodes][NDOF2];
+ 
+ 	/*Get B matrix: */
+-	GetBPattyn(&B[0][0], xyz_list, gauss);
++	GetBHO(&B[0][0], xyz_list, gauss);
+ 
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+@@ -302,8 +302,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaInput::GetVyStrainRate3dPattyn{{{*/
+-void PentaInput::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaInput::GetVyStrainRate3dHO{{{*/
++void PentaInput::GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+ 	int i;
+ 	const int numnodes=6;
+@@ -311,7 +311,7 @@
+ 	IssmDouble velocity[numnodes][NDOF2];
+ 
+ 	/*Get B matrix: */
+-	GetBPattyn(&B[0][0], xyz_list, gauss);
++	GetBHO(&B[0][0], xyz_list, gauss);
+ 
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 15564)
+@@ -155,14 +155,14 @@
+ 	for(int i=0;i<6;i++) epsilonvz[i]=0;
+ }
+ /*}}}*/
+-/*FUNCTION DoubleInput::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){{{*/
+-void DoubleInput::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION DoubleInput::GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){{{*/
++void DoubleInput::GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Epsilon is zero as vx is constant over the element*/
+ 	for(int i=0;i<5;i++) epsilonvx[i]=0;
+ }
+ /*}}}*/
+-/*FUNCTION DoubleInput::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){{{*/
+-void DoubleInput::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION DoubleInput::GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){{{*/
++void DoubleInput::GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Epsilon is zero as vy is constant over the element*/
+ 	for(int i=0;i<5;i++) epsilonvy[i]=0;
+ }
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 15564)
+@@ -61,8 +61,8 @@
+ 		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void ChangeEnum(int newenumtype);
+ 
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 15564)
+@@ -64,8 +64,8 @@
+ 		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void ChangeEnum(int newenumtype);
+ 
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15563)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15564)
+@@ -82,29 +82,29 @@
+ 			if(node_type==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 				this->Deactivate();
+ 			}
+-			if(node_type==MacAyealPattynApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
++			if(node_type==MacAyealHOApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
+ 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 					this->Deactivate();
+ 				}
+ 			}
+-			if(node_type==MacAyealStokesApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
++			if(node_type==MacAyealFSApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
+ 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 					for(k=1;k<=2;k++) this->FreezeDof(k);
+ 				}
+ 			}
+ 		}
+-		/*spc all nodes on hutter*/
+-		if(node_type==HutterApproximationEnum){
++		/*spc all nodes on SIA*/
++		if(node_type==SIAApproximationEnum){
+ 			this->Deactivate();
+ 		}
+ 	}
+ 	#endif
+ 
+-	/*Diagnostic Hutter*/
+-	if(analysis_type==DiagnosticHutterAnalysisEnum){
++	/*Diagnostic SIA*/
++	if(analysis_type==DiagnosticSIAAnalysisEnum){
+ 		_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+-		/*Constrain all nodes that are not Hutter*/
+-		if(reCast<int>(node_type)!=HutterApproximationEnum){
++		/*Constrain all nodes that are not SIA*/
++		if(reCast<int>(node_type)!=SIAApproximationEnum){
+ 			this->Deactivate();
+ 		}
+ 	}
+Index: ../trunk-jpl/src/ad/validation/Update/update.m
+===================================================================
+--- ../trunk-jpl/src/ad/validation/Update/update.m	(revision 15563)
++++ ../trunk-jpl/src/ad/validation/Update/update.m	(revision 15564)
+@@ -3,7 +3,7 @@
+ md=setmesh(model,'Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.cluster.executionpath=[issmtier() '/src/ad/validation/Validation/'];
+ 
+Index: ../trunk-jpl/src/m/solvers/stokesoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/stokesoptions.m	(revision 15563)
++++ ../trunk-jpl/src/m/solvers/stokesoptions.m	(revision 15564)
+@@ -1,29 +1,29 @@
+-function stokes=stokesoptions(varargin)
++function FS=FSoptions(varargin)
+ %STOKESOPTIONS - return STOKES multi-physics solver petsc options
+ %
+ %   Usage:
+-%      options=stokesoptions;
++%      options=FSoptions;
+ 
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
+-stokes=struct();
++FS=struct();
+ 
+-%default stokes options
++%default FS options
+ PETSC_VERSION=petscversion();
+ if PETSC_VERSION==2,
+-	error('stokesoptions error message: multi-physics options not supported in Petsc 2');
++	error('FSoptions error message: multi-physics options not supported in Petsc 2');
+ end
+ if PETSC_VERSION==3,
+-	stokes.toolkit='petsc';
+-	stokes.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+-	stokes.ksp_max_it=getfieldvalue(options,'ksp_max_it',1000);
+-	stokes.ksp_type=getfieldvalue(options,'ksp_type','gmres');
+-	stokes.pc_type=getfieldvalue(options,'pc_type','fieldsplit');
+-	stokes.pc_field_split_type=getfieldvalue(options,'pc_field_split_type','schur');
+-	stokes.fieldsplit_0_pc_type=getfieldvalue(options,'fieldsplit_0_pc_type','hypre');
+-	stokes.fieldsplit_0_ksp_type=getfieldvalue(options,'fieldsplit_0_ksp_type','gmres');
+-	stokes.fieldsplit_0_pc_hypre_type=getfieldvalue(options,'fieldsplit_0_pc_hypre_type','boomerang');
+-	stokes.fieldsplit_1_pc_type=getfieldvalue(options,'fieldsplit_1_pc_type','jacobi');
+-	stokes.fieldsplit_1_ksp_type=getfieldvalue(options,'fieldsplit_1_ksp_type','preonly');
+-	stokes.issm_option_solver=getfieldvalue(options,'issm_option_solver','stokes');
++	FS.toolkit='petsc';
++	FS.mat_type=getfieldvalue(options,'mat_type','mpiaij');
++	FS.ksp_max_it=getfieldvalue(options,'ksp_max_it',1000);
++	FS.ksp_type=getfieldvalue(options,'ksp_type','gmres');
++	FS.pc_type=getfieldvalue(options,'pc_type','fieldsplit');
++	FS.pc_field_split_type=getfieldvalue(options,'pc_field_split_type','schur');
++	FS.fieldsplit_0_pc_type=getfieldvalue(options,'fieldsplit_0_pc_type','hypre');
++	FS.fieldsplit_0_ksp_type=getfieldvalue(options,'fieldsplit_0_ksp_type','gmres');
++	FS.fieldsplit_0_pc_hypre_type=getfieldvalue(options,'fieldsplit_0_pc_hypre_type','boomerang');
++	FS.fieldsplit_1_pc_type=getfieldvalue(options,'fieldsplit_1_pc_type','jacobi');
++	FS.fieldsplit_1_ksp_type=getfieldvalue(options,'fieldsplit_1_ksp_type','preonly');
++	FS.issm_option_solver=getfieldvalue(options,'issm_option_solver','FS');
+ end
+Index: ../trunk-jpl/src/m/solvers/stokesoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/stokesoptions.py	(revision 15563)
++++ ../trunk-jpl/src/m/solvers/stokesoptions.py	(revision 15564)
+@@ -2,25 +2,25 @@
+ from pairoptions import *
+ from petscversion  import *
+ #}}}
+-def stokesoptions(*args):
++def FSoptions(*args):
+ 	#STOKESOPTIONS - return STOKES multi-physics solver petsc options
+ 	#
+ 	#   Usage:
+-	#      options=stokesoptions;
++	#      options=FSoptions;
+ 	
+ 	#retrieve options provided in varargin
+ 	arguments=pairoptions(*args) 
+ 
+ 
+-	#default stokes options
++	#default FS options
+ 	PETSC_VERSION=petscversion()
+ 
+ 	if PETSC_VERSION==2:
+-		raise RuntimeError('stokesoptions error message: multi-physics options not supported in Petsc 2')
++		raise RuntimeError('FSoptions error message: multi-physics options not supported in Petsc 2')
+ 	if PETSC_VERSION==3:
+ 		options=[['toolkit','petsc'],['mat_type','mpiaij'],['ksp_max_it',1000],['ksp_type','gmres'],['pc_type','fieldsplit'],['pc_field_split_type','schur'],\
+ 	['fieldsplit_0_pc_type','hypre'],['fieldsplit_0_ksp_type','gmres'],['fieldsplit_0_pc_hypre_type','boomerang'],\
+-	['fieldsplit_1_pc_type','jacobi'],['fieldsplit_1_ksp_type','preonly'],['issm_option_solver','stokes']]
++	['fieldsplit_1_pc_type','jacobi'],['fieldsplit_1_ksp_type','preonly'],['issm_option_solver','FS']]
+ 
+ 	#now, go through our arguments, and write over default options.
+ 	for i in range(len(arguments.list)):
+Index: ../trunk-jpl/src/m/classes/toolkits.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/toolkits.m	(revision 15563)
++++ ../trunk-jpl/src/m/classes/toolkits.m	(revision 15564)
+@@ -21,7 +21,7 @@
+ 			 end % }}}
+ 		 function obj = addoptions(obj,analysis,varargin) % {{{
+ 		 % Usage example:
+-		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),stokesoptions());
++		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),FSoptions());
+ 		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum());
+ 
+ 			 %Convert analysis from enum to string
+Index: ../trunk-jpl/src/m/classes/diagnostic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/diagnostic.py	(revision 15563)
++++ ../trunk-jpl/src/m/classes/diagnostic.py	(revision 15564)
+@@ -22,7 +22,7 @@
+ 		self.reltol                   = 0
+ 		self.abstol                   = 0
+ 		self.isnewton                 = 0
+-		self.stokesreconditioning     = 0
++		self.FSreconditioning     = 0
+ 		self.viscosity_overshoot      = 0
+ 		self.icefront                 = float('NaN')
+ 		self.maxiter                  = 0
+@@ -65,8 +65,8 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'vertex_pairing','pairs of vertices that are penalized'))
+ 
+ 		string="%s\n%s"%(string,'\n      Other:')
+-		string="%s\n%s"%(string,fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for Stokes model'))
+-		string="%s\n%s"%(string,fielddisplay(self,'stokesreconditioning','multiplier for incompressibility equation. Only for Stokes model'))
++		string="%s\n%s"%(string,fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for FS model'))
++		string="%s\n%s"%(string,fielddisplay(self,'FSreconditioning','multiplier for incompressibility equation. Only for FS model'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'referential','local referential'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'loadingforce','loading force applied on each point [N/m^3]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+@@ -82,7 +82,7 @@
+ 		self.reltol=0.01
+ 		self.abstol=10
+ 
+-		self.stokesreconditioning=10**13
++		self.FSreconditioning=10**13
+ 		self.shelf_dampening=0
+ 
+ 		#Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+@@ -119,7 +119,7 @@
+ 		md = checkfield(md,'diagnostic.reltol','size',[1])
+ 		md = checkfield(md,'diagnostic.abstol','size',[1])
+ 		md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0,1,2])
+-		md = checkfield(md,'diagnostic.stokesreconditioning','size',[1],'NaN',1)
++		md = checkfield(md,'diagnostic.FSreconditioning','size',[1],'NaN',1)
+ 		md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1],'NaN',1)
+ 		if md.mesh.dimension==2:
+ 			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),4],'NaN',1)
+@@ -151,8 +151,8 @@
+ 				if numpy.abs(numpy.inner(item[0:2],item[3:5]))>sys.float_info.epsilon:
+ 					md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
+ 		#CHECK THAT NO rotation specified for FS Grounded ice at base
+-#		if md.mesh.dimension==3 & md.flowequation.isstokes,
+-		if md.mesh.dimension==3 and md.flowequation.isstokes:
++#		if md.mesh.dimension==3 & md.flowequation.isFS,
++		if md.mesh.dimension==3 and md.flowequation.isFS:
+ 			pos=numpy.nonzero(numpy.logical_and(md.mask.vertexongroundedice,md.mesh.vertexonbed))
+ 			if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.referential[pos,:]))):
+ 				md.checkmessage("no referential should be specified for basal vertices of grounded ice")
+@@ -167,7 +167,7 @@
+ 		WriteData(fid,'object',self,'fieldname','reltol','format','Double')
+ 		WriteData(fid,'object',self,'fieldname','abstol','format','Double')
+ 		WriteData(fid,'object',self,'fieldname','isnewton','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','stokesreconditioning','format','Double')
++		WriteData(fid,'object',self,'fieldname','FSreconditioning','format','Double')
+ 		WriteData(fid,'object',self,'fieldname','viscosity_overshoot','format','Double')
+ 		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','shelf_dampening','format','Integer')
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15563)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15564)
+@@ -176,7 +176,7 @@
+ 		   md must be followed by the corresponding exp file or flags list
+ 		   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+ 		   If user wants every element outside the domain to be 
+-		   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
++		   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
+ 		   an empty string '' will be considered as an empty domain
+ 		   a string 'all' will be considered as the entire domain
+ 
+@@ -612,9 +612,9 @@
+ 			md.flowequation.vertex_equation=numpy.zeros(number_nodes3d,int)
+ 			md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node')
+ 
+-		md.flowequation.bordermacayeal=project3d(md,'vector',md.flowequation.bordermacayeal,'type','node')
+-		md.flowequation.borderpattyn=project3d(md,'vector',md.flowequation.borderpattyn,'type','node')
+-		md.flowequation.borderstokes=project3d(md,'vector',md.flowequation.borderstokes,'type','node')
++		md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node')
++		md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node')
++		md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node')
+ 
+ 		#boundary conditions
+ 		md.diagnostic.spcvx=project3d(md,'vector',md.diagnostic.spcvx,'type','node')
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15563)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15564)
+@@ -170,9 +170,9 @@
+ 			if ~isnan(md.flowequation.element_equation)
+ 				md.flowequation.element_equation=project2d(md,md.flowequation.element_equation,1);
+ 				md.flowequation.vertex_equation=project2d(md,md.flowequation.vertex_equation,1);
+-				md.flowequation.bordermacayeal=project2d(md,md.flowequation.bordermacayeal,1);
+-				md.flowequation.borderpattyn=project2d(md,md.flowequation.borderpattyn,1);
+-				md.flowequation.borderstokes=project2d(md,md.flowequation.borderstokes,1);
++				md.flowequation.borderSSA=project2d(md,md.flowequation.borderSSA,1);
++				md.flowequation.borderHO=project2d(md,md.flowequation.borderHO,1);
++				md.flowequation.borderFS=project2d(md,md.flowequation.borderFS,1);
+ 			end	
+ 
+ 			%boundary conditions
+@@ -261,7 +261,7 @@
+ 			%   md must be followed by the corresponding exp file or flags list
+ 			%   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+ 			%   If user wants every element outside the domain to be 
+-			%   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
++			%   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
+ 			%   an empty string '' will be considered as an empty domain
+ 			%   a string 'all' will be considered as the entire domain
+ 			%
+@@ -717,9 +717,9 @@
+ 				md.flowequation.vertex_equation=zeros(number_nodes3d,1);
+ 				md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node');
+ 			end
+-			md.flowequation.bordermacayeal=project3d(md,'vector',md.flowequation.bordermacayeal,'type','node');
+-			md.flowequation.borderpattyn=project3d(md,'vector',md.flowequation.borderpattyn,'type','node');
+-			md.flowequation.borderstokes=project3d(md,'vector',md.flowequation.borderstokes,'type','node');
++			md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node');
++			md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node');
++			md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node');
+ 
+ 			%boundary conditions
+ 			md.diagnostic.spcvx=project3d(md,'vector',md.diagnostic.spcvx,'type','node');
+@@ -881,8 +881,8 @@
+ 			if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
+ 			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
+ 			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
+-			if isfield(structmd,'ishutter'), md.flowequation.ishutter=structmd.ishutter; end
+-			if isfield(structmd,'isstokes'), md.flowequation.isstokes=structmd.isstokes; end
++			if isfield(structmd,'isSIA'), md.flowequation.isSIA=structmd.isSIA; end
++			if isfield(structmd,'isFS'), md.flowequation.isFS=structmd.isFS; end
+ 			if isfield(structmd,'elements_type'), md.flowequation.element_equation=structmd.elements_type; end
+ 			if isfield(structmd,'vertices_type'), md.flowequation.vertex_equation=structmd.vertices_type; end
+ 			if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
+Index: ../trunk-jpl/src/m/classes/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/diagnostic.m	(revision 15563)
++++ ../trunk-jpl/src/m/classes/diagnostic.m	(revision 15564)
+@@ -12,7 +12,7 @@
+ 		reltol                   = 0;
+ 		abstol                   = 0;
+ 		isnewton                 = 0;
+-		stokesreconditioning     = 0;
++		FSreconditioning     = 0;
+ 		viscosity_overshoot      = 0;
+ 		icefront                 = NaN;
+ 		maxiter                  = 0;
+@@ -44,7 +44,7 @@
+ 			 obj.reltol=0.01;
+ 			 obj.abstol=10;
+ 
+-			 obj.stokesreconditioning=10^13;
++			 obj.FSreconditioning=10^13;
+ 			 obj.shelf_dampening=0;
+ 
+ 			 %Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+@@ -77,7 +77,7 @@
+ 			md = checkfield(md,'diagnostic.reltol','size',[1 1]);
+ 			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
+ 			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
+-			md = checkfield(md,'diagnostic.stokesreconditioning','size',[1 1],'NaN',1);
++			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
+ 			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
+ 			if md.mesh.dimension==2,
+ 				md = checkfield(md,'diagnostic.icefront','size',[NaN 4],'NaN',1);
+@@ -108,12 +108,12 @@
+ 				end
+ 			end
+ 			%CHECK THAT NO rotation specified for FS Grounded ice at base
+-			if md.mesh.dimension==3 & md.flowequation.isstokes,
++			if md.mesh.dimension==3 & md.flowequation.isFS,
+ 				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
+ 				if any(~isnan(md.diagnostic.referential(pos,:))),
+ 					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+ 				end
+-				md = checkfield(md,'diagnostic.stokesreconditioning','>',0);
++				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
+@@ -143,8 +143,8 @@
+ 			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
+ 
+ 			disp(sprintf('\n      %s','Other:'));
+-			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for Stokes model');
+-			fielddisplay(obj,'stokesreconditioning','multiplier for incompressibility equation. Only for Stokes model');
++			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for FS model');
++			fielddisplay(obj,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');
+ 			fielddisplay(obj,'referential','local referential');
+ 			fielddisplay(obj,'loadingforce','loading force applied on each point [N/m^3]');
+ 			fielddisplay(obj,'requested_outputs','additional outputs requested');
+@@ -158,7 +158,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','reltol','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','abstol','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','isnewton','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','stokesreconditioning','format','Double');
++			WriteData(fid,'object',obj,'fieldname','FSreconditioning','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','viscosity_overshoot','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','shelf_dampening','format','Integer');
+Index: ../trunk-jpl/src/m/classes/toolkits.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/toolkits.py	(revision 15563)
++++ ../trunk-jpl/src/m/classes/toolkits.py	(revision 15564)
+@@ -38,7 +38,7 @@
+ 	# }}}
+ 	def addoptions(self,analysis,*args):    # {{{
+ 		# Usage example:
+-		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),stokesoptions());
++		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),FSoptions());
+ 		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum());
+ 
+ 		#Convert analysis from enum to string
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15563)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15564)
+@@ -15,18 +15,18 @@
+ 
+ 	def __init__(self): # {{{
+ 		
+-		self.ishutter         = 0
+-		self.ismacayeal       = 0
+-		self.isl1l2           = 0
+-		self.ispattyn         = 0
+-		self.isstokes         = 0
+-		self.fe_stokes        = 0
+-		self.fe_ssa           = 0
++		self.isSIA            = 0
++		self.isSSA            = 0
++		self.isL1L2           = 0
++		self.isHO             = 0
++		self.isFS             = 0
++		self.fe_SSA           = 0
++		self.fe_FS            = 0
+ 		self.vertex_equation  = float('NaN')
+ 		self.element_equation = float('NaN')
+-		self.bordermacayeal   = float('NaN')
+-		self.borderpattyn     = float('NaN')
+-		self.borderstokes     = float('NaN')
++		self.borderSSA        = float('NaN')
++		self.borderHO         = float('NaN')
++		self.borderFS         = float('NaN')
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -35,17 +35,17 @@
+ 	def __repr__(self): # {{{
+ 		string='   flow equation parameters:'
+ 
+-		string="%s\n%s"%(string,fielddisplay(self,'ishutter',"is the shallow ice approximation used ?"))
+-		string="%s\n%s"%(string,fielddisplay(self,'ismacayeal',"is the macayeal approximation used ?"))
+-		string="%s\n%s"%(string,fielddisplay(self,'isl1l2',"are l1l2 equations used ?"))
+-		string="%s\n%s"%(string,fielddisplay(self,'ispattyn',"is the pattyn approximation used ?"))
+-		string="%s\n%s"%(string,fielddisplay(self,'isstokes',"are the Full-Stokes equations used ?"))
+-		string="%s\n%s"%(string,fielddisplay(self,'fe_ssa',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
++		string="%s\n%s"%(string,fielddisplay(self,'isSIA',"is the Shallow Ice Approximation (SIA) used ?"))
++		string="%s\n%s"%(string,fielddisplay(self,'isSSA',"is the Shelfy-Stream Approximation (SSA) used ?"))
++		string="%s\n%s"%(string,fielddisplay(self,'isL1L2',"are L1L2 equations used ?"))
++		string="%s\n%s"%(string,fielddisplay(self,'isHO',"is the Higher-Order (HO) approximation used ?"))
++		string="%s\n%s"%(string,fielddisplay(self,'isFS',"are the Full-FS (FS) equations used ?"))
++		string="%s\n%s"%(string,fielddisplay(self,'fe_SSA',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vertex_equation',"flow equation for each vertex"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'element_equation',"flow equation for each element"))
+-		string="%s\n%s"%(string,fielddisplay(self,'bordermacayeal',"vertices on MacAyeal's border (for tiling)"))
+-		string="%s\n%s"%(string,fielddisplay(self,'borderpattyn',"vertices on Pattyn's border (for tiling)"))
+-		string="%s\n%s"%(string,fielddisplay(self,'borderstokes',"vertices on Stokes' border (for tiling)"))
++		string="%s\n%s"%(string,fielddisplay(self,'borderSSA',"vertices on SSA's border (for tiling)"))
++		string="%s\n%s"%(string,fielddisplay(self,'borderHO',"vertices on HO's border (for tiling)"))
++		string="%s\n%s"%(string,fielddisplay(self,'borderFS',"vertices on FS' border (for tiling)"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -54,62 +54,62 @@
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+ 		if DiagnosticHorizAnalysisEnum() in analyses:
+-			md = checkfield(md,'flowequation.ishutter','numel',[1],'values',[0,1])
+-			md = checkfield(md,'flowequation.ismacayeal','numel',[1],'values',[0,1])
+-			md = checkfield(md,'flowequation.isl1l2','numel',[1],'values',[0,1])
+-			md = checkfield(md,'flowequation.ispattyn','numel',[1],'values',[0,1])
+-			md = checkfield(md,'flowequation.isstokes','numel',[1],'values',[0,1])
+-			md = checkfield(md,'flowequation.bordermacayeal','size',[md.mesh.numberofvertices],'values',[0,1])
+-			md = checkfield(md,'flowequation.borderpattyn','size',[md.mesh.numberofvertices],'values',[0,1])
+-			md = checkfield(md,'flowequation.borderstokes','size',[md.mesh.numberofvertices],'values',[0,1])
++			md = checkfield(md,'flowequation.isSIA','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.isSSA','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
++			md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
++			md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			if md.mesh.dimension==2:
+ 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
+ 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2])
+ 			else:
+ 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,8+1))
+ 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,8+1))
+-			if not (self.ishutter or self.ismacayeal or self.isl1l2 or self.ispattyn or self.isstokes):
++			if not (self.isSIA or self.isSSA or self.isL1L2 or self.isHO or self.isFS):
+ 				md.checkmessage("no element types set for this model")
+ 
+-		if DiagnosticHutterAnalysisEnum() in analyses:
++		if DiagnosticSIAAnalysisEnum() in analyses:
+ 			if any(self.element_equation==1):
+ 				if numpy.any(numpy.logical_and(self.element_equation,md.mask.elementonfloatingice)):
+-					print "\n !!! Warning: Hutter's model is not consistent on ice shelves !!!\n"
++					print "\n !!! Warning: SIA's model is not consistent on ice shelves !!!\n"
+ 
+ 		return md
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'object',self,'fieldname','ishutter','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','ismacayeal','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','isl1l2','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','ispattyn','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','isstokes','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','fe_stokes','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','fe_ssa','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','bordermacayeal','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'fieldname','borderpattyn','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'fieldname','borderstokes','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','isSIA','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','isSSA','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','isL1L2','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','isHO','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','isFS','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','fe_FS','format','Integer')
++		WriteData(fid,'object',self,'fieldname','fe_SSA','format','Integer')
++		WriteData(fid,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1)
+ 		#convert approximations to enums
+ 		data=copy.deepcopy(self.vertex_equation)
+ 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
+-		data[numpy.nonzero(data==1)]=HutterApproximationEnum()
++		data[numpy.nonzero(data==1)]=SIAApproximationEnum()
+ 		data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
+-		data[numpy.nonzero(data==3)]=PattynApproximationEnum()
+-		data[numpy.nonzero(data==4)]=StokesApproximationEnum()
+-		data[numpy.nonzero(data==5)]=MacAyealPattynApproximationEnum()
+-		data[numpy.nonzero(data==6)]=MacAyealStokesApproximationEnum()
+-		data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
++		data[numpy.nonzero(data==3)]=HOApproximationEnum()
++		data[numpy.nonzero(data==4)]=FSApproximationEnum()
++		data[numpy.nonzero(data==5)]=MacAyealHOApproximationEnum()
++		data[numpy.nonzero(data==6)]=MacAyealFSApproximationEnum()
++		data[numpy.nonzero(data==7)]=HOFSApproximationEnum()
+ 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
+ 		WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1)
+ 		data=copy.deepcopy(self.element_equation)
+ 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
+-		data[numpy.nonzero(data==1)]=HutterApproximationEnum()
++		data[numpy.nonzero(data==1)]=SIAApproximationEnum()
+ 		data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
+-		data[numpy.nonzero(data==3)]=PattynApproximationEnum()
+-		data[numpy.nonzero(data==4)]=StokesApproximationEnum()
+-		data[numpy.nonzero(data==5)]=MacAyealPattynApproximationEnum()
+-		data[numpy.nonzero(data==6)]=MacAyealStokesApproximationEnum()
+-		data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
++		data[numpy.nonzero(data==3)]=HOApproximationEnum()
++		data[numpy.nonzero(data==4)]=FSApproximationEnum()
++		data[numpy.nonzero(data==5)]=MacAyealHOApproximationEnum()
++		data[numpy.nonzero(data==6)]=MacAyealFSApproximationEnum()
++		data[numpy.nonzero(data==7)]=HOFSApproximationEnum()
+ 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
+ 		WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15563)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15564)
+@@ -5,19 +5,57 @@
+ 
+ classdef flowequation
+ 	properties (SetAccess=public) 
+-		ismacayeal       = 0;
+-		ispattyn         = 0;
+-		ishutter         = 0;
+-		isl1l2           = 0;
+-		isstokes         = 0;
+-		fe_stokes        = 0;
+-		fe_ssa           = 0;
++		isSIA            = 0;
++		isSSA            = 0;
++		isL1L2           = 0;
++		isHO             = 0;
++		isFS             = 0;
++		fe_SSA           = 0;
++		fe_FS            = 0;
+ 		vertex_equation  = NaN;
+ 		element_equation = NaN;
+-		bordermacayeal   = NaN;
+-		borderpattyn     = NaN;
+-		borderstokes     = NaN;
++		borderSSA        = NaN;
++		borderHO         = NaN;
++		borderFS         = NaN;
+ 	end
++	methods (Static)
++		function obj = loadobj(obj) % {{{
++			% This function is directly called by matlab when a model object is
++			% loaded. If the input is a struct it is an old version of this class and
++			% old fields must be recovered (make sure they are in the deprecated
++			% model properties)
++
++			if verLessThan('matlab','7.9'),
++				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
++				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
++
++				% This is a Matlab bug: all the fields of md have their default value
++				% Example of error message:
++				% Warning: Error loading an object of class 'model':
++				% Undefined function or method 'exist' for input arguments of type 'cell'
++				%
++				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
++			end
++
++			if isstruct(obj)
++				disp('Recovering flowequation from older version');
++				objstruct = obj;
++				obj = structtoobj(flowequation(),objstruct);
++
++				%2013 July 23rd
++				if isfield(objstruct,'isSIA'),          obj.isSIA     = objstruct.isSIA;         end;
++				if isfield(objstruct,'isSSA'),          obj.isSSA     = objstruct.isSSA;         end;
++				if isfield(objstruct,'isL1L2'),         obj.isL1L2    = objstruct.isL1L2;        end;
++				if isfield(objstruct,'isHO'),           obj.isHO      = objstruct.isHO;          end;
++				if isfield(objstruct,'isFS'),           obj.isFS      = objstruct.isFS;          end;
++				if isfield(objstruct,'fe_FS'),      obj.fe_FS     = objstruct.fe_FS;     end;
++				if isfield(objstruct,'borderSSA'), obj.borderSSA = objstruct.borderSSA;end;
++				if isfield(objstruct,'borderHO'),   obj.borderHO  = objstruct.borderHO;  end;
++				if isfield(objstruct,'borderFS'),   obj.borderFS  = objstruct.borderFS;  end;
++			end
++
++		end% }}}
++	end
+ 	methods
+ 		function obj = flowequation(varargin) % {{{
+ 			switch nargin
+@@ -34,14 +72,14 @@
+ 
+ 			if ismember(DiagnosticHorizAnalysisEnum(),analyses),
+ 
+-				md = checkfield(md,'flowequation.ishutter','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.ismacayeal','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.isl1l2','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.ispattyn','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.isstokes','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.bordermacayeal','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.borderpattyn','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.borderstokes','size',[md.mesh.numberofvertices 1],'values',[0 1]);
++				md = checkfield(md,'flowequation.isSIA','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.isSSA','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
++				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
++				md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				if (md.mesh.dimension==2),
+ 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[1:2]);
+ 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[1:2]);
+@@ -49,14 +87,14 @@
+ 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[0:8]);
+ 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[0:8]);
+ 				end
+-				if ~(obj.ishutter || obj.ismacayeal || obj.isl1l2 || obj.ispattyn || obj.isstokes),
++				if ~(obj.isSIA || obj.isSSA || obj.isL1L2 || obj.isHO || obj.isFS),
+ 					md = checkmessage(md,['no element types set for this model']);
+ 				end
+ 			end
+-			if ismember(DiagnosticHutterAnalysisEnum(),analyses),
++			if ismember(DiagnosticSIAAnalysisEnum(),analyses),
+ 				if any(obj.element_equation==1),
+ 					if(obj.element_equation & md.mask.elementonfloatingice),
+-						disp(sprintf('\n !!! Warning: Hutter''s model is not consistent on ice shelves !!!\n'));
++						disp(sprintf('\n !!! Warning: SIA''s model is not consistent on ice shelves !!!\n'));
+ 					end
+ 				end
+ 			end
+@@ -65,51 +103,51 @@
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   flow equation parameters:'));
+ 
+-			fielddisplay(obj,'ishutter','is the shallow ice approximation used ?');
+-			fielddisplay(obj,'ismacayeal','is the macayeal approximation used ?');
+-			fielddisplay(obj,'isl1l2','is the l1l2 approximation used ?');
+-			fielddisplay(obj,'ispattyn','is the pattyn approximation used ?');
+-			fielddisplay(obj,'isstokes','are the Full-Stokes equations used ?');
+-			fielddisplay(obj,'fe_ssa','Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
++			fielddisplay(obj,'isSIA','is the Shallow Ice Approximation (SIA) used ?');
++			fielddisplay(obj,'isSSA','is the Shelfy-Stream Approximation (SSA) used ?');
++			fielddisplay(obj,'isL1L2','is the L1L2 approximation used ?');
++			fielddisplay(obj,'isHO','is the Higher-Order (HO) approximation used ?');
++			fielddisplay(obj,'isFS','are the Full-FS (FS) equations used ?');
++			fielddisplay(obj,'fe_SSA','Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
+ 			fielddisplay(obj,'vertex_equation','flow equation for each vertex');
+ 			fielddisplay(obj,'element_equation','flow equation for each element');
+-			fielddisplay(obj,'bordermacayeal','vertices on MacAyeal''s border (for tiling)');
+-			fielddisplay(obj,'borderpattyn','vertices on Pattyn''s border (for tiling)');
+-			fielddisplay(obj,'borderstokes','vertices on Stokes'' border (for tiling)');
++			fielddisplay(obj,'borderSSA','vertices on SSA''s border (for tiling)');
++			fielddisplay(obj,'borderHO','vertices on HO''s border (for tiling)');
++			fielddisplay(obj,'borderFS','vertices on FS'' border (for tiling)');
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'fieldname','ishutter','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','ismacayeal','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','isl1l2','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','ispattyn','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','isstokes','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','fe_stokes','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','fe_ssa','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','bordermacayeal','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','borderpattyn','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','borderstokes','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','isSIA','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','isSSA','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','isL1L2','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','isHO','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','isFS','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','fe_FS','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','fe_SSA','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','borderSSA','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','borderHO','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','borderFS','format','DoubleMat','mattype',1);
+ 			%convert approximations to enums
+ 			data=obj.vertex_equation;
+ 			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
+-			pos=find(data==1); data(pos,end)=HutterApproximationEnum();
++			pos=find(data==1); data(pos,end)=SIAApproximationEnum();
+ 			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum();
+-			pos=find(data==3); data(pos,end)=PattynApproximationEnum();
+-			pos=find(data==4); data(pos,end)=StokesApproximationEnum();
+-			pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum();
+-			pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum();
+-			pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum();
++			pos=find(data==3); data(pos,end)=HOApproximationEnum();
++			pos=find(data==4); data(pos,end)=FSApproximationEnum();
++			pos=find(data==5); data(pos,end)=MacAyealHOApproximationEnum();
++			pos=find(data==6); data(pos,end)=MacAyealFSApproximationEnum();
++			pos=find(data==7); data(pos,end)=HOFSApproximationEnum();
+ 			pos=find(data==8); data(pos,end)=L1L2ApproximationEnum();
+ 			WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1);
+ 			data=obj.element_equation;
+ 			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
+-			pos=find(data==1); data(pos,end)=HutterApproximationEnum();
++			pos=find(data==1); data(pos,end)=SIAApproximationEnum();
+ 			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum();
+-			pos=find(data==3); data(pos,end)=PattynApproximationEnum();
+-			pos=find(data==4); data(pos,end)=StokesApproximationEnum();
+-			pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum();
+-			pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum();
+-			pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum();
++			pos=find(data==3); data(pos,end)=HOApproximationEnum();
++			pos=find(data==4); data(pos,end)=FSApproximationEnum();
++			pos=find(data==5); data(pos,end)=MacAyealHOApproximationEnum();
++			pos=find(data==6); data(pos,end)=MacAyealFSApproximationEnum();
++			pos=find(data==7); data(pos,end)=HOFSApproximationEnum();
+ 			pos=find(data==8); data(pos,end)=L1L2ApproximationEnum();
+ 			WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2);
+ 		end % }}}
+Index: ../trunk-jpl/src/m/contrib/hack/sia.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/hack/sia.m	(revision 15563)
++++ ../trunk-jpl/src/m/contrib/hack/sia.m	(revision 15564)
+@@ -1,7 +1,7 @@
+ function [velx,vely,vel]=sia(md)
+ %BALVEL - computation of Shallow Ice velocities
+ %
+-%   This routine uses the model of Hutter to compute the velocities
++%   This routine uses the model of SIA to compute the velocities
+ %   of a 2d model using the surface slope
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 15563)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 15564)
+@@ -11,11 +11,11 @@
+ 
+ 	if   solutiontype == DiagnosticSolutionEnum():
+ 		numanalyses=5
+-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticHutterAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum()]
++		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum()]
+ 
+ 	elif solutiontype == SteadystateSolutionEnum():
+ 		numanalyses=7 
+-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticHutterAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
++		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
+ 
+ 	elif solutiontype == ThermalSolutionEnum():
+ 		numanalyses=2 
+@@ -47,7 +47,7 @@
+ 
+ 	elif solutiontype == TransientSolutionEnum():
+ 		numanalyses=9 
+-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticHutterAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),PrognosticAnalysisEnum()]
++		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),PrognosticAnalysisEnum()]
+ 
+ 	elif solutiontype == FlaimSolutionEnum():
+ 		numanalyses=1 
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 15563)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 15564)
+@@ -46,11 +46,11 @@
+ 
+ 	case DiagnosticSolutionEnum(),
+ 		numanalyses=5;
+-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticHutterAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum()];
++		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum()];
+ 
+ 	case SteadystateSolutionEnum(),
+ 		numanalyses=7; 
+-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticHutterAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum()];
++		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum()];
+ 
+ 	case ThermalSolutionEnum(),
+ 		numanalyses=2; 
+@@ -86,7 +86,7 @@
+ 
+ 	case TransientSolutionEnum(),
+ 		numanalyses=9; 
+-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticHutterAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();PrognosticAnalysisEnum()];
++		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();PrognosticAnalysisEnum()];
+ 
+ 	case FlaimSolutionEnum(),
+ 		numanalyses=1; 
+Index: ../trunk-jpl/src/m/qmu/qmuresponse.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/qmuresponse.m	(revision 15563)
++++ ../trunk-jpl/src/m/qmu/qmuresponse.m	(revision 15564)
+@@ -27,11 +27,11 @@
+ 	m_dh=models.dh;
+ 	m_dhu=models.dhu;
+ 	m_ds=models.ds;
+-	ishutter=m_dhu.parameters.ishutter;
+-	ismacayeal=m_dh.parameters.ismacayeal;
+-	ispattyn=m_dh.parameters.ispattyn;
+-	isstokes=m_ds.parameters.isstokes;
+-	if ishutter,
++	isSIA=m_dhu.parameters.isSIA;
++	isSSA=m_dh.parameters.isSSA;
++	isHO=m_dh.parameters.isHO;
++	isFS=m_ds.parameters.isFS;
++	if isSIA,
+ 
+ % for now, separate all segments from double array for parallel to make cells
+ 		if (length(m_dhu.parameters.qmu_mass_flux_num_segments) > 1)
+@@ -57,7 +57,7 @@
+ 			clear save
+ 		end
+ 
+-	elseif ismacayeal || ispattyn,
++	elseif isSSA || isHO,
+ 
+ % for now, separate all segments from double array for parallel to make cells
+ 		if (length(m_dh.parameters.qmu_mass_flux_num_segments) > 1)
+@@ -83,7 +83,7 @@
+ 			clear save
+ 		end
+ 
+-	elseif isstokes,
++	elseif isFS,
+ 
+ % for now, separate all segments from double array for parallel to make cells
+ 		if (length(m_ds.parameters.qmu_mass_flux_num_segments) > 1)
+Index: ../trunk-jpl/src/m/miscellaneous/issmdoc.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 15563)
++++ ../trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 15564)
+@@ -10,6 +10,6 @@
+ disp(sprintf('%-63s %s','       md=triangle(md,''DomainOutline.exp'',50000);','%creates a mesh of the domain outline with a resolution of 50000 m'));
+ disp(sprintf('%-63s %s','       md=setmask(md,''all'','''');','%defines the glacier system as an ice shelf (no island)'));
+ disp(sprintf('%-63s %s','       md=parameterize(md,''Square.par'');','%fills all the other fields of the model'));
+-disp(sprintf('%-63s %s','       md=setflowequation(md,''macayeal'',''all'');','%defines all elements as MacAyeal''s SSA'));
++disp(sprintf('%-63s %s','       md=setflowequation(md,''SSA'',''all'');','%defines all elements as MacAyeal''s SSA'));
+ disp(sprintf('%-63s %s','       md=solve(md,DiagnosticSolutionEnum());','%solve for stress balance'));
+ disp(sprintf('%-63s %s','       plotmodel(md,''data'',md.results.DiagnosticSolution.Vel);','%displays the velocity (type plotdoc for plotmodel help)'));
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15563)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15564)
+@@ -680,19 +680,19 @@
+ 
+ 	return StringToEnum('DiagnosticSpcvz')[0]
+ 
+-def DiagnosticStokesreconditioningEnum():
++def DiagnosticFSreconditioningEnum():
+ 	"""
+-	DIAGNOSTICSTOKESRECONDITIONINGENUM - Enum of DiagnosticStokesreconditioning
++	DIAGNOSTICFSRECONDITIONINGENUM - Enum of DiagnosticFSreconditioning
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=DiagnosticStokesreconditioningEnum()
++	      macro=DiagnosticFSreconditioningEnum()
+ 	"""
+ 
+-	return StringToEnum('DiagnosticStokesreconditioning')[0]
++	return StringToEnum('DiagnosticFSreconditioning')[0]
+ 
+ def DiagnosticVertexPairingEnum():
+ 	"""
+@@ -764,47 +764,47 @@
+ 
+ 	return StringToEnum('LoadingforceZ')[0]
+ 
+-def FlowequationBordermacayealEnum():
++def FlowequationBorderSSAEnum():
+ 	"""
+-	FLOWEQUATIONBORDERMACAYEALENUM - Enum of FlowequationBordermacayeal
++	FLOWEQUATIONBORDERSSAENUM - Enum of FlowequationBorderSSA
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationBordermacayealEnum()
++	      macro=FlowequationBorderSSAEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationBordermacayeal')[0]
++	return StringToEnum('FlowequationBorderSSA')[0]
+ 
+-def FlowequationBorderpattynEnum():
++def FlowequationBorderHOEnum():
+ 	"""
+-	FLOWEQUATIONBORDERPATTYNENUM - Enum of FlowequationBorderpattyn
++	FLOWEQUATIONBORDERHOENUM - Enum of FlowequationBorderHO
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationBorderpattynEnum()
++	      macro=FlowequationBorderHOEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationBorderpattyn')[0]
++	return StringToEnum('FlowequationBorderHO')[0]
+ 
+-def FlowequationBorderstokesEnum():
++def FlowequationBorderFSEnum():
+ 	"""
+-	FLOWEQUATIONBORDERSTOKESENUM - Enum of FlowequationBorderstokes
++	FLOWEQUATIONBORDERFSENUM - Enum of FlowequationBorderFS
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationBorderstokesEnum()
++	      macro=FlowequationBorderFSEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationBorderstokes')[0]
++	return StringToEnum('FlowequationBorderFS')[0]
+ 
+ def FlowequationElementEquationEnum():
+ 	"""
+@@ -820,103 +820,103 @@
+ 
+ 	return StringToEnum('FlowequationElementEquation')[0]
+ 
+-def FlowequationIshutterEnum():
++def FlowequationIsSIAEnum():
+ 	"""
+-	FLOWEQUATIONISHUTTERENUM - Enum of FlowequationIshutter
++	FLOWEQUATIONISSIAENUM - Enum of FlowequationIsSIA
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationIshutterEnum()
++	      macro=FlowequationIsSIAEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationIshutter')[0]
++	return StringToEnum('FlowequationIsSIA')[0]
+ 
+-def FlowequationIsmacayealEnum():
++def FlowequationIsSSAEnum():
+ 	"""
+-	FLOWEQUATIONISMACAYEALENUM - Enum of FlowequationIsmacayeal
++	FLOWEQUATIONISSSAENUM - Enum of FlowequationIsSSA
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationIsmacayealEnum()
++	      macro=FlowequationIsSSAEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationIsmacayeal')[0]
++	return StringToEnum('FlowequationIsSSA')[0]
+ 
+-def FlowequationIsl1l2Enum():
++def FlowequationIsL1L2Enum():
+ 	"""
+-	FLOWEQUATIONISL1L2ENUM - Enum of FlowequationIsl1l2
++	FLOWEQUATIONISL1L2ENUM - Enum of FlowequationIsL1L2
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationIsl1l2Enum()
++	      macro=FlowequationIsL1L2Enum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationIsl1l2')[0]
++	return StringToEnum('FlowequationIsL1L2')[0]
+ 
+-def FlowequationIspattynEnum():
++def FlowequationIsHOEnum():
+ 	"""
+-	FLOWEQUATIONISPATTYNENUM - Enum of FlowequationIspattyn
++	FLOWEQUATIONISHOENUM - Enum of FlowequationIsHO
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationIspattynEnum()
++	      macro=FlowequationIsHOEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationIspattyn')[0]
++	return StringToEnum('FlowequationIsHO')[0]
+ 
+-def FlowequationIsstokesEnum():
++def FlowequationIsFSEnum():
+ 	"""
+-	FLOWEQUATIONISSTOKESENUM - Enum of FlowequationIsstokes
++	FLOWEQUATIONISFSENUM - Enum of FlowequationIsFS
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationIsstokesEnum()
++	      macro=FlowequationIsFSEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationIsstokes')[0]
++	return StringToEnum('FlowequationIsFS')[0]
+ 
+-def FlowequationFeStokesEnum():
++def FlowequationFeFSEnum():
+ 	"""
+-	FLOWEQUATIONFESTOKESENUM - Enum of FlowequationFeStokes
++	FLOWEQUATIONFEFSENUM - Enum of FlowequationFeFS
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationFeStokesEnum()
++	      macro=FlowequationFeFSEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationFeStokes')[0]
++	return StringToEnum('FlowequationFeFS')[0]
+ 
+-def FlowequationFeSsaEnum():
++def FlowequationFeSSAEnum():
+ 	"""
+-	FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSsa
++	FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSSA
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationFeSsaEnum()
++	      macro=FlowequationFeSSAEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationFeSsa')[0]
++	return StringToEnum('FlowequationFeSSA')[0]
+ 
+ def FlowequationVertexEquationEnum():
+ 	"""
+@@ -3802,19 +3802,19 @@
+ 
+ 	return StringToEnum('DiagnosticHorizAnalysis')[0]
+ 
+-def DiagnosticHutterAnalysisEnum():
++def DiagnosticSIAAnalysisEnum():
+ 	"""
+-	DIAGNOSTICHUTTERANALYSISENUM - Enum of DiagnosticHutterAnalysis
++	DIAGNOSTICSIAANALYSISENUM - Enum of DiagnosticSIAAnalysis
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=DiagnosticHutterAnalysisEnum()
++	      macro=DiagnosticSIAAnalysisEnum()
+ 	"""
+ 
+-	return StringToEnum('DiagnosticHutterAnalysis')[0]
++	return StringToEnum('DiagnosticSIAAnalysis')[0]
+ 
+ def DiagnosticSolutionEnum():
+ 	"""
+@@ -4166,19 +4166,19 @@
+ 
+ 	return StringToEnum('NoneApproximation')[0]
+ 
+-def HutterApproximationEnum():
++def SIAApproximationEnum():
+ 	"""
+-	HUTTERAPPROXIMATIONENUM - Enum of HutterApproximation
++	SIAAPPROXIMATIONENUM - Enum of SIAApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=HutterApproximationEnum()
++	      macro=SIAApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('HutterApproximation')[0]
++	return StringToEnum('SIAApproximation')[0]
+ 
+ def MacAyealApproximationEnum():
+ 	"""
+@@ -4194,33 +4194,33 @@
+ 
+ 	return StringToEnum('MacAyealApproximation')[0]
+ 
+-def MacAyealPattynApproximationEnum():
++def MacAyealHOApproximationEnum():
+ 	"""
+-	MACAYEALPATTYNAPPROXIMATIONENUM - Enum of MacAyealPattynApproximation
++	MACAYEALHOAPPROXIMATIONENUM - Enum of MacAyealHOApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=MacAyealPattynApproximationEnum()
++	      macro=MacAyealHOApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('MacAyealPattynApproximation')[0]
++	return StringToEnum('MacAyealHOApproximation')[0]
+ 
+-def MacAyealStokesApproximationEnum():
++def MacAyealFSApproximationEnum():
+ 	"""
+-	MACAYEALSTOKESAPPROXIMATIONENUM - Enum of MacAyealStokesApproximation
++	MACAYEALFSAPPROXIMATIONENUM - Enum of MacAyealFSApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=MacAyealStokesApproximationEnum()
++	      macro=MacAyealFSApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('MacAyealStokesApproximation')[0]
++	return StringToEnum('MacAyealFSApproximation')[0]
+ 
+ def L1L2ApproximationEnum():
+ 	"""
+@@ -4236,47 +4236,47 @@
+ 
+ 	return StringToEnum('L1L2Approximation')[0]
+ 
+-def PattynApproximationEnum():
++def HOApproximationEnum():
+ 	"""
+-	PATTYNAPPROXIMATIONENUM - Enum of PattynApproximation
++	HOAPPROXIMATIONENUM - Enum of HOApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=PattynApproximationEnum()
++	      macro=HOApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('PattynApproximation')[0]
++	return StringToEnum('HOApproximation')[0]
+ 
+-def PattynStokesApproximationEnum():
++def HOFSApproximationEnum():
+ 	"""
+-	PATTYNSTOKESAPPROXIMATIONENUM - Enum of PattynStokesApproximation
++	HOFSAPPROXIMATIONENUM - Enum of HOFSApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=PattynStokesApproximationEnum()
++	      macro=HOFSApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('PattynStokesApproximation')[0]
++	return StringToEnum('HOFSApproximation')[0]
+ 
+-def StokesApproximationEnum():
++def FSApproximationEnum():
+ 	"""
+-	STOKESAPPROXIMATIONENUM - Enum of StokesApproximation
++	FSAPPROXIMATIONENUM - Enum of FSApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=StokesApproximationEnum()
++	      macro=FSApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('StokesApproximation')[0]
++	return StringToEnum('FSApproximation')[0]
+ 
+ def ConstraintsEnum():
+ 	"""
+@@ -4894,19 +4894,19 @@
+ 
+ 	return StringToEnum('L1L2IceFront')[0]
+ 
+-def PattynIceFrontEnum():
++def HOIceFrontEnum():
+ 	"""
+-	PATTYNICEFRONTENUM - Enum of PattynIceFront
++	HOICEFRONTENUM - Enum of HOIceFront
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=PattynIceFrontEnum()
++	      macro=HOIceFrontEnum()
+ 	"""
+ 
+-	return StringToEnum('PattynIceFront')[0]
++	return StringToEnum('HOIceFront')[0]
+ 
+ def PengridEnum():
+ 	"""
+@@ -5118,19 +5118,19 @@
+ 
+ 	return StringToEnum('SpcTransient')[0]
+ 
+-def StokesIceFrontEnum():
++def FSIceFrontEnum():
+ 	"""
+-	STOKESICEFRONTENUM - Enum of StokesIceFront
++	FSICEFRONTENUM - Enum of FSIceFront
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=StokesIceFrontEnum()
++	      macro=FSIceFrontEnum()
+ 	"""
+ 
+-	return StringToEnum('StokesIceFront')[0]
++	return StringToEnum('FSIceFront')[0]
+ 
+ def StringArrayParamEnum():
+ 	"""
+@@ -6140,19 +6140,19 @@
+ 
+ 	return StringToEnum('VzMacAyeal')[0]
+ 
+-def VzPattynEnum():
++def VzHOEnum():
+ 	"""
+-	VZPATTYNENUM - Enum of VzPattyn
++	VZHOENUM - Enum of VzHO
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=VzPattynEnum()
++	      macro=VzHOEnum()
+ 	"""
+ 
+-	return StringToEnum('VzPattyn')[0]
++	return StringToEnum('VzHO')[0]
+ 
+ def VzPicardEnum():
+ 	"""
+@@ -6168,19 +6168,19 @@
+ 
+ 	return StringToEnum('VzPicard')[0]
+ 
+-def VzStokesEnum():
++def VzFSEnum():
+ 	"""
+-	VZSTOKESENUM - Enum of VzStokes
++	VZFSENUM - Enum of VzFS
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=VzStokesEnum()
++	      macro=VzFSEnum()
+ 	"""
+ 
+-	return StringToEnum('VzStokes')[0]
++	return StringToEnum('VzFS')[0]
+ 
+ def VxMeshEnum():
+ 	"""
+@@ -7260,19 +7260,19 @@
+ 
+ 	return StringToEnum('GLlevelset')[0]
+ 
+-def StokesSolverEnum():
++def FSSolverEnum():
+ 	"""
+-	STOKESSOLVERENUM - Enum of StokesSolver
++	FSSOLVERENUM - Enum of FSSolver
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=StokesSolverEnum()
++	      macro=FSSolverEnum()
+ 	"""
+ 
+-	return StringToEnum('StokesSolver')[0]
++	return StringToEnum('FSSolver')[0]
+ 
+ def AdjointEnum():
+ 	"""
+Index: ../trunk-jpl/src/m/mech/strainrateuncert.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/strainrateuncert.m	(revision 15563)
++++ ../trunk-jpl/src/m/mech/strainrateuncert.m	(revision 15564)
+@@ -35,7 +35,7 @@
+ 	error('only 2d model supported yet');
+ end
+ if any(md.flowequation.element_equation~=2),
+-	disp('Warning: the model has some non macayeal elements. These will be treated like MacAyeal''s elements');
++	disp('Warning: the model has some non SSA elements. These will be treated like MacAyeal''s elements');
+ end
+ 
+ %initialization
+Index: ../trunk-jpl/src/m/mech/mechanicalproperties.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 15563)
++++ ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 15564)
+@@ -20,7 +20,7 @@
+ 	error('only 2d model supported yet');
+ end
+ if any(md.flowequation.element_equation~=2),
+-	disp('Warning: the model has some non macayeal elements. These will be treated like MacAyeal''s elements');
++	disp('Warning: the model has some non SSA elements. These will be treated like MacAyeal''s elements');
+ end
+ 
+ %initialization
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15563)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15564)
+@@ -10,11 +10,11 @@
+ 	SETELEMENTSTYPE - associate a solution type to each element
+ 
+ 	   This routine works like plotmodel: it works with an even number of inputs
+-	   'hutter','macayeal','pattyn','l1l2','stokes' and 'fill' are the possible options
++	   'SIA','SSA','HO','L1L2','FS' and 'fill' are the possible options
+ 	   that must be followed by the corresponding exp file or flags list
+ 	   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+ 	   If user wants every element outside the domain to be 
+-	   setflowequationd, add '~' to the name of the domain file (ex: '~Pattyn.exp');
++	   setflowequationd, add '~' to the name of the domain file (ex: '~HO.exp');
+ 	   an empty string '' will be considered as an empty domain
+ 	   a string 'all' will be considered as the entire domain
+ 	   You can specify the type of coupling, 'penalties' or 'tiling', to use with the input 'coupling'
+@@ -23,8 +23,8 @@
+ 	      md=setflowequation(md,varargin)
+ 
+ 	   Example:
+-	      md=setflowequation(md,'pattyn','Pattyn.exp','macayeal',md.mask.elementonfloatingice,'fill','hutter');
+-	      md=setflowequation(md,'pattyn','Pattyn.exp',fill','hutter','coupling','tiling');
++	      md=setflowequation(md,'HO','HO.exp','SSA',md.mask.elementonfloatingice,'fill','SIA');
++	      md=setflowequation(md,'HO','HO.exp',fill','SIA','coupling','tiling');
+ 	"""
+ 
+ 	#some checks on list of arguments
+@@ -41,89 +41,89 @@
+ 		raise TypeError("coupling type can only be: tiling or penalties")
+ 
+ 	#recover elements distribution
+-	hutterflag   = FlagElements(md,options.getfieldvalue('hutter',''))
+-	macayealflag = FlagElements(md,options.getfieldvalue('macayeal',''))
+-	pattynflag   = FlagElements(md,options.getfieldvalue('pattyn',''))
+-	l1l2flag     = FlagElements(md,options.getfieldvalue('l1l2',''))
+-	stokesflag   = FlagElements(md,options.getfieldvalue('stokes',''))
++	SIAflag   = FlagElements(md,options.getfieldvalue('SIA',''))
++	SSAflag = FlagElements(md,options.getfieldvalue('SSA',''))
++	HOflag   = FlagElements(md,options.getfieldvalue('HO',''))
++	L1L2flag     = FlagElements(md,options.getfieldvalue('L1L2',''))
++	FSflag   = FlagElements(md,options.getfieldvalue('FS',''))
+ 	filltype     = options.getfieldvalue('fill','none')
+ 
+ 	#Flag the elements that have not been flagged as filltype
+-	if   strcmpi(filltype,'hutter'):
+-		hutterflag[numpy.nonzero(numpy.logical_not(logical_or_n(macayealflag,pattynflag)))]=True
+-	elif strcmpi(filltype,'macayeal'):
+-		macayealflag[numpy.nonzero(numpy.logical_not(logical_or_n(hutterflag,pattynflag,stokesflag)))]=True
+-	elif strcmpi(filltype,'pattyn'):
+-		pattynflag[numpy.nonzero(numpy.logical_not(logical_or_n(hutterflag,macayealflag,stokesflag)))]=True
++	if   strcmpi(filltype,'SIA'):
++		SIAflag[numpy.nonzero(numpy.logical_not(logical_or_n(SSAflag,HOflag)))]=True
++	elif strcmpi(filltype,'SSA'):
++		SSAflag[numpy.nonzero(numpy.logical_not(logical_or_n(SIAflag,HOflag,FSflag)))]=True
++	elif strcmpi(filltype,'HO'):
++		HOflag[numpy.nonzero(numpy.logical_not(logical_or_n(SIAflag,SSAflag,FSflag)))]=True
+ 
+ 	#check that each element has at least one flag
+-	if not any(hutterflag+macayealflag+l1l2flag+pattynflag+stokesflag):
++	if not any(SIAflag+SSAflag+L1L2flag+HOflag+FSflag):
+ 		raise TypeError("elements type not assigned, must be specified")
+ 
+ 	#check that each element has only one flag
+-	if any(hutterflag+macayealflag+l1l2flag+pattynflag+stokesflag>1):
++	if any(SIAflag+SSAflag+L1L2flag+HOflag+FSflag>1):
+ 		print "setflowequation warning message: some elements have several types, higher order type is used for them"
+-		hutterflag[numpy.nonzero(numpy.logical_and(hutterflag,macayealflag))]=False
+-		hutterflag[numpy.nonzero(numpy.logical_and(hutterflag,pattynflag))]=False
+-		macayealflag[numpy.nonzero(numpy.logical_and(macayealflag,pattynflag))]=False
++		SIAflag[numpy.nonzero(numpy.logical_and(SIAflag,SSAflag))]=False
++		SIAflag[numpy.nonzero(numpy.logical_and(SIAflag,HOflag))]=False
++		SSAflag[numpy.nonzero(numpy.logical_and(SSAflag,HOflag))]=False
+ 
+-	#Check that no pattyn or stokes for 2d mesh
++	#Check that no HO or FS for 2d mesh
+ 	if md.mesh.dimension==2:
+-		if numpy.any(logical_or_n(l1l2flag,stokesflag,pattynflag)):
+-			raise TypeError("stokes and pattyn elements not allowed in 2d mesh, extrude it first")
++		if numpy.any(logical_or_n(L1L2flag,FSflag,HOflag)):
++			raise TypeError("FS and HO elements not allowed in 2d mesh, extrude it first")
+ 
+-	#Stokes can only be used alone for now:
+-	if any(stokesflag) and any(hutterflag):
+-		raise TypeError("stokes cannot be used with any other model for now, put stokes everywhere")
++	#FS can only be used alone for now:
++	if any(FSflag) and any(SIAflag):
++		raise TypeError("FS cannot be used with any other model for now, put FS everywhere")
+ 
+ 	#Initialize node fields
+-	nodeonhutter=numpy.zeros(md.mesh.numberofvertices,bool)
+-	nodeonhutter[md.mesh.elements[numpy.nonzero(hutterflag),:]-1]=True
+-	nodeonmacayeal=numpy.zeros(md.mesh.numberofvertices,bool)
+-	nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
+-	nodeonl1l2=numpy.zeros(md.mesh.numberofvertices,bool)
+-	nodeonl1l2[md.mesh.elements[numpy.nonzero(l1l2flag),:]-1]=True
+-	nodeonpattyn=numpy.zeros(md.mesh.numberofvertices,bool)
+-	nodeonpattyn[md.mesh.elements[numpy.nonzero(pattynflag),:]-1]=True
+-	nodeonstokes=numpy.zeros(md.mesh.numberofvertices,bool)
++	nodeonSIA=numpy.zeros(md.mesh.numberofvertices,bool)
++	nodeonSIA[md.mesh.elements[numpy.nonzero(SIAflag),:]-1]=True
++	nodeonSSA=numpy.zeros(md.mesh.numberofvertices,bool)
++	nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
++	nodeonL1L2=numpy.zeros(md.mesh.numberofvertices,bool)
++	nodeonL1L2[md.mesh.elements[numpy.nonzero(L1L2flag),:]-1]=True
++	nodeonHO=numpy.zeros(md.mesh.numberofvertices,bool)
++	nodeonHO[md.mesh.elements[numpy.nonzero(HOflag),:]-1]=True
++	nodeonFS=numpy.zeros(md.mesh.numberofvertices,bool)
+ 	noneflag=numpy.zeros(md.mesh.numberofelements,bool)
+ 
+-	#First modify stokesflag to get rid of elements contrained everywhere (spc + border with pattyn or macayeal)
+-	if any(stokesflag):
+-#		fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonpattyn & nodeonstokes));         %find all the nodes on the boundary of the domain without icefront
++	#First modify FSflag to get rid of elements contrained everywhere (spc + border with HO or SSA)
++	if any(FSflag):
++#		fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonHO & nodeonFS));         %find all the nodes on the boundary of the domain without icefront
+ 		fullspcnodes=numpy.logical_or(numpy.logical_not(numpy.isnan(md.diagnostic.spcvx)).astype(int)+ \
+ 		                              numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)).astype(int)+ \
+ 		                              numpy.logical_not(numpy.isnan(md.diagnostic.spcvz)).astype(int)==3, \
+-		                              numpy.logical_and(nodeonpattyn,nodeonstokes).reshape(-1,1)).astype(int)    #find all the nodes on the boundary of the domain without icefront
++		                              numpy.logical_and(nodeonHO,nodeonFS).reshape(-1,1)).astype(int)    #find all the nodes on the boundary of the domain without icefront
+ #		fullspcelems=double(sum(fullspcnodes(md.mesh.elements),2)==6);         %find all the nodes on the boundary of the domain without icefront
+ 		fullspcelems=(numpy.sum(fullspcnodes[md.mesh.elements-1],axis=1)==6).astype(int)    #find all the nodes on the boundary of the domain without icefront
+-		stokesflag[numpy.nonzero(fullspcelems.reshape(-1))]=False
+-		nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
++		FSflag[numpy.nonzero(fullspcelems.reshape(-1))]=False
++		nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
+ 
+-	#Then complete with NoneApproximation or the other model used if there is no stokes
+-	if any(stokesflag): 
+-		if   any(pattynflag):    #fill with pattyn
+-			pattynflag[numpy.logical_not(stokesflag)]=True
+-			nodeonpattyn[md.mesh.elements[numpy.nonzero(pattynflag),:]-1]=True
+-		elif any(macayealflag):    #fill with macayeal
+-			macayealflag[numpy.logical_not(stokesflag)]=True
+-			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
++	#Then complete with NoneApproximation or the other model used if there is no FS
++	if any(FSflag): 
++		if   any(HOflag):    #fill with HO
++			HOflag[numpy.logical_not(FSflag)]=True
++			nodeonHO[md.mesh.elements[numpy.nonzero(HOflag),:]-1]=True
++		elif any(SSAflag):    #fill with SSA
++			SSAflag[numpy.logical_not(FSflag)]=True
++			nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
+ 		else:    #fill with none 
+-			noneflag[numpy.nonzero(numpy.logical_not(stokesflag))]=True
++			noneflag[numpy.nonzero(numpy.logical_not(FSflag))]=True
+ 
+-	#Now take care of the coupling between MacAyeal and Pattyn
++	#Now take care of the coupling between MacAyeal and HO
+ 	md.diagnostic.vertex_pairing=numpy.array([])
+-	nodeonmacayealpattyn=numpy.zeros(md.mesh.numberofvertices,bool)
+-	nodeonpattynstokes=numpy.zeros(md.mesh.numberofvertices,bool)
+-	nodeonmacayealstokes=numpy.zeros(md.mesh.numberofvertices,bool)
+-	macayealpattynflag=numpy.zeros(md.mesh.numberofelements,bool)
+-	macayealstokesflag=numpy.zeros(md.mesh.numberofelements,bool)
+-	pattynstokesflag=numpy.zeros(md.mesh.numberofelements,bool)
++	nodeonSSAHO=numpy.zeros(md.mesh.numberofvertices,bool)
++	nodeonHOFS=numpy.zeros(md.mesh.numberofvertices,bool)
++	nodeonSSAFS=numpy.zeros(md.mesh.numberofvertices,bool)
++	SSAHOflag=numpy.zeros(md.mesh.numberofelements,bool)
++	SSAFSflag=numpy.zeros(md.mesh.numberofelements,bool)
++	HOFSflag=numpy.zeros(md.mesh.numberofelements,bool)
+ 	if   strcmpi(coupling_method,'penalties'):
+-		#Create the border nodes between Pattyn and MacAyeal and extrude them
++		#Create the border nodes between HO and MacAyeal and extrude them
+ 		numnodes2d=md.mesh.numberofvertices2d
+ 		numlayers=md.mesh.numberoflayers
+-		bordernodes2d=numpy.nonzero(numpy.logical_and(nodeonpattyn[0:numnodes2d],nodeonmacayeal[0:numnodes2d]))[0]+1    #Nodes connected to two different types of elements
++		bordernodes2d=numpy.nonzero(numpy.logical_and(nodeonHO[0:numnodes2d],nodeonSSA[0:numnodes2d]))[0]+1    #Nodes connected to two different types of elements
+ 
+ 		#initialize and fill in penalties structure
+ 		if numpy.all(numpy.logical_not(numpy.isnan(bordernodes2d))):
+@@ -133,160 +133,160 @@
+ 			md.diagnostic.vertex_pairing=penalties
+ 
+ 	elif strcmpi(coupling_method,'tiling'):
+-		if   any(macayealflag) and any(pattynflag):    #coupling macayeal pattyn
++		if   any(SSAflag) and any(HOflag):    #coupling SSA HO
+ 			#Find node at the border
+-			nodeonmacayealpattyn[numpy.nonzero(numpy.logical_and(nodeonmacayeal,nodeonpattyn))]=True
+-			#Macayeal elements in contact with this layer become MacAyealPattyn elements
+-			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonmacayealpattyn)[0])
++			nodeonSSAHO[numpy.nonzero(numpy.logical_and(nodeonSSA,nodeonHO))]=True
++			#SSA elements in contact with this layer become MacAyealHO elements
++			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonSSAHO)[0])
+ 			commonelements=numpy.sum(matrixelements,axis=1)!=0
+-			commonelements[numpy.nonzero(pattynflag)]=False    #only one layer: the elements previously in macayeal
+-			macayealflag[numpy.nonzero(commonelements)]=False    #these elements are now macayealpattynelements
+-			macayealpattynflag[numpy.nonzero(commonelements)]=True
+-			nodeonmacayeal[:]=False
+-			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
++			commonelements[numpy.nonzero(HOflag)]=False    #only one layer: the elements previously in SSA
++			SSAflag[numpy.nonzero(commonelements)]=False    #these elements are now SSAHOelements
++			SSAHOflag[numpy.nonzero(commonelements)]=True
++			nodeonSSA[:]=False
++			nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
+ 
+ 			#rule out elements that don't touch the 2 boundaries
+-			pos=numpy.nonzero(macayealpattynflag)[0]
++			pos=numpy.nonzero(SSAHOflag)[0]
+ 			elist=numpy.zeros(numpy.size(pos),dtype=int)
+-			elist = elist + numpy.sum(nodeonmacayeal[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
+-			elist = elist - numpy.sum(nodeonpattyn[md.mesh.elements[pos,:]-1]  ,axis=1).astype(bool)
++			elist = elist + numpy.sum(nodeonSSA[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
++			elist = elist - numpy.sum(nodeonHO[md.mesh.elements[pos,:]-1]  ,axis=1).astype(bool)
+ 			pos1=numpy.nonzero(elist==1)[0]
+-			macayealflag[pos[pos1]]=True
+-			macayealpattynflag[pos[pos1]]=False
++			SSAflag[pos[pos1]]=True
++			SSAHOflag[pos[pos1]]=False
+ 			pos2=numpy.nonzero(elist==-1)[0]
+-			pattynflag[pos[pos2]]=True
+-			macayealpattynflag[pos[pos2]]=False
++			HOflag[pos[pos2]]=True
++			SSAHOflag[pos[pos2]]=False
+ 
+ 			#Recompute nodes associated to these elements
+-			nodeonmacayeal[:]=False
+-			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
+-			nodeonpattyn[:]=False
+-			nodeonpattyn[md.mesh.elements[numpy.nonzero(pattynflag),:]-1]=True
+-			nodeonmacayealpattyn[:]=False
+-			nodeonmacayealpattyn[md.mesh.elements[numpy.nonzero(macayealpattynflag),:]-1]=True
++			nodeonSSA[:]=False
++			nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
++			nodeonHO[:]=False
++			nodeonHO[md.mesh.elements[numpy.nonzero(HOflag),:]-1]=True
++			nodeonSSAHO[:]=False
++			nodeonSSAHO[md.mesh.elements[numpy.nonzero(SSAHOflag),:]-1]=True
+ 
+-		elif any(pattynflag) and any(stokesflag):    #coupling pattyn stokes
++		elif any(HOflag) and any(FSflag):    #coupling HO FS
+ 			#Find node at the border
+-			nodeonpattynstokes[numpy.nonzero(numpy.logical_and(nodeonpattyn,nodeonstokes))]=True
+-			#Stokes elements in contact with this layer become PattynStokes elements
+-			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonpattynstokes)[0])
++			nodeonHOFS[numpy.nonzero(numpy.logical_and(nodeonHO,nodeonFS))]=True
++			#FS elements in contact with this layer become HOFS elements
++			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonHOFS)[0])
+ 			commonelements=numpy.sum(matrixelements,axis=1)!=0
+-			commonelements[numpy.nonzero(pattynflag)]=False    #only one layer: the elements previously in macayeal
+-			stokesflag[numpy.nonzero(commonelements)]=False    #these elements are now macayealpattynelements
+-			pattynstokesflag[numpy.nonzero(commonelements)]=True
+-			nodeonstokes=numpy.zeros(md.mesh.numberofvertices,bool)
+-			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
++			commonelements[numpy.nonzero(HOflag)]=False    #only one layer: the elements previously in SSA
++			FSflag[numpy.nonzero(commonelements)]=False    #these elements are now SSAHOelements
++			HOFSflag[numpy.nonzero(commonelements)]=True
++			nodeonFS=numpy.zeros(md.mesh.numberofvertices,bool)
++			nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
+ 
+ 			#rule out elements that don't touch the 2 boundaries
+-			pos=numpy.nonzero(pattynstokesflag)[0]
++			pos=numpy.nonzero(HOFSflag)[0]
+ 			elist=numpy.zeros(numpy.size(pos),dtype=int)
+-			elist = elist + numpy.sum(nodeonstokes[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
+-			elist = elist - numpy.sum(nodeonpattyn[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
++			elist = elist + numpy.sum(nodeonFS[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
++			elist = elist - numpy.sum(nodeonHO[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
+ 			pos1=numpy.nonzero(elist==1)[0]
+-			stokesflag[pos[pos1]]=True
+-			pattynstokesflag[pos[pos1]]=False
++			FSflag[pos[pos1]]=True
++			HOFSflag[pos[pos1]]=False
+ 			pos2=numpy.nonzero(elist==-1)[0]
+-			pattynflag[pos[pos2]]=True
+-			pattynstokesflag[pos[pos2]]=False
++			HOflag[pos[pos2]]=True
++			HOFSflag[pos[pos2]]=False
+ 
+ 			#Recompute nodes associated to these elements
+-			nodeonstokes[:]=False
+-			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
+-			nodeonpattyn[:]=False
+-			nodeonpattyn[md.mesh.elements[numpy.nonzero(pattynflag),:]-1]=True
+-			nodeonpattynstokes[:]=False
+-			nodeonpattynstokes[md.mesh.elements[numpy.nonzero(pattynstokesflag),:]-1]=True
++			nodeonFS[:]=False
++			nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
++			nodeonHO[:]=False
++			nodeonHO[md.mesh.elements[numpy.nonzero(HOflag),:]-1]=True
++			nodeonHOFS[:]=False
++			nodeonHOFS[md.mesh.elements[numpy.nonzero(HOFSflag),:]-1]=True
+ 
+-		elif any(stokesflag) and any(macayealflag):
++		elif any(FSflag) and any(SSAflag):
+ 			#Find node at the border
+-			nodeonmacayealstokes[numpy.nonzero(numpy.logical_and(nodeonmacayeal,nodeonstokes))]=True
+-			#Stokes elements in contact with this layer become MacAyealStokes elements
+-			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonmacayealstokes)[0])
++			nodeonSSAFS[numpy.nonzero(numpy.logical_and(nodeonSSA,nodeonFS))]=True
++			#FS elements in contact with this layer become MacAyealFS elements
++			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonSSAFS)[0])
+ 			commonelements=numpy.sum(matrixelements,axis=1)!=0
+-			commonelements[numpy.nonzero(macayealflag)]=False    #only one layer: the elements previously in macayeal
+-			stokesflag[numpy.nonzero(commonelements)]=False    #these elements are now macayealmacayealelements
+-			macayealstokesflag[numpy.nonzero(commonelements)]=True
+-			nodeonstokes=numpy.zeros(md.mesh.numberofvertices,bool)
+-			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
++			commonelements[numpy.nonzero(SSAflag)]=False    #only one layer: the elements previously in SSA
++			FSflag[numpy.nonzero(commonelements)]=False    #these elements are now SSASSAelements
++			SSAFSflag[numpy.nonzero(commonelements)]=True
++			nodeonFS=numpy.zeros(md.mesh.numberofvertices,bool)
++			nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
+ 
+ 			#rule out elements that don't touch the 2 boundaries
+-			pos=numpy.nonzero(macayealstokesflag)[0]
++			pos=numpy.nonzero(SSAFSflag)[0]
+ 			elist=numpy.zeros(numpy.size(pos),dtype=int)
+-			elist = elist + numpy.sum(nodeonmacayeal[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
+-			elist = elist - numpy.sum(nodeonstokes[md.mesh.elements[pos,:]-1]  ,axis=1).astype(bool)
++			elist = elist + numpy.sum(nodeonSSA[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
++			elist = elist - numpy.sum(nodeonFS[md.mesh.elements[pos,:]-1]  ,axis=1).astype(bool)
+ 			pos1=numpy.nonzero(elist==1)[0]
+-			macayealflag[pos[pos1]]=True
+-			macayealstokesflag[pos[pos1]]=False
++			SSAflag[pos[pos1]]=True
++			SSAFSflag[pos[pos1]]=False
+ 			pos2=numpy.nonzero(elist==-1)[0]
+-			stokesflag[pos[pos2]]=True
+-			macayealstokesflag[pos[pos2]]=False
++			FSflag[pos[pos2]]=True
++			SSAFSflag[pos[pos2]]=False
+ 
+ 			#Recompute nodes associated to these elements
+-			nodeonmacayeal[:]=False
+-			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
+-			nodeonstokes[:]=False
+-			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
+-			nodeonmacayealstokes[:]=False
+-			nodeonmacayealstokes[md.mesh.elements[numpy.nonzero(macayealstokesflag),:]-1]=True
++			nodeonSSA[:]=False
++			nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
++			nodeonFS[:]=False
++			nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
++			nodeonSSAFS[:]=False
++			nodeonSSAFS[md.mesh.elements[numpy.nonzero(SSAFSflag),:]-1]=True
+ 
+-		elif any(stokesflag) and any(hutterflag):
++		elif any(FSflag) and any(SIAflag):
+ 			raise TypeError("type of coupling not supported yet")
+ 
+-	#Create MacAyealPattynApproximation where needed
++	#Create MacAyealHOApproximation where needed
+ 	md.flowequation.element_equation=numpy.zeros(md.mesh.numberofelements,int)
+ 	md.flowequation.element_equation[numpy.nonzero(noneflag)]=0
+-	md.flowequation.element_equation[numpy.nonzero(hutterflag)]=1
+-	md.flowequation.element_equation[numpy.nonzero(macayealflag)]=2
+-	md.flowequation.element_equation[numpy.nonzero(l1l2flag)]=8
+-	md.flowequation.element_equation[numpy.nonzero(pattynflag)]=3
+-	md.flowequation.element_equation[numpy.nonzero(stokesflag)]=4
+-	md.flowequation.element_equation[numpy.nonzero(macayealpattynflag)]=5
+-	md.flowequation.element_equation[numpy.nonzero(macayealstokesflag)]=6
+-	md.flowequation.element_equation[numpy.nonzero(pattynstokesflag)]=7
++	md.flowequation.element_equation[numpy.nonzero(SIAflag)]=1
++	md.flowequation.element_equation[numpy.nonzero(SSAflag)]=2
++	md.flowequation.element_equation[numpy.nonzero(L1L2flag)]=8
++	md.flowequation.element_equation[numpy.nonzero(HOflag)]=3
++	md.flowequation.element_equation[numpy.nonzero(FSflag)]=4
++	md.flowequation.element_equation[numpy.nonzero(SSAHOflag)]=5
++	md.flowequation.element_equation[numpy.nonzero(SSAFSflag)]=6
++	md.flowequation.element_equation[numpy.nonzero(HOFSflag)]=7
+ 
+ 	#border
+-	md.flowequation.borderpattyn=nodeonpattyn
+-	md.flowequation.bordermacayeal=nodeonmacayeal
+-	md.flowequation.borderstokes=nodeonstokes
++	md.flowequation.borderHO=nodeonHO
++	md.flowequation.borderSSA=nodeonSSA
++	md.flowequation.borderFS=nodeonFS
+ 
+ 	#Create vertices_type
+ 	md.flowequation.vertex_equation=numpy.zeros(md.mesh.numberofvertices,int)
+-	pos=numpy.nonzero(nodeonmacayeal)
++	pos=numpy.nonzero(nodeonSSA)
+ 	md.flowequation.vertex_equation[pos]=2
+-	pos=numpy.nonzero(nodeonl1l2)
++	pos=numpy.nonzero(nodeonL1L2)
+ 	md.flowequation.vertex_equation[pos]=8
+-	pos=numpy.nonzero(nodeonpattyn)
++	pos=numpy.nonzero(nodeonHO)
+ 	md.flowequation.vertex_equation[pos]=3
+-	pos=numpy.nonzero(nodeonhutter)
++	pos=numpy.nonzero(nodeonSIA)
+ 	md.flowequation.vertex_equation[pos]=1
+-	pos=numpy.nonzero(nodeonmacayealpattyn)
++	pos=numpy.nonzero(nodeonSSAHO)
+ 	md.flowequation.vertex_equation[pos]=5
+-	pos=numpy.nonzero(nodeonstokes)
++	pos=numpy.nonzero(nodeonFS)
+ 	md.flowequation.vertex_equation[pos]=4
+-	if any(stokesflag):
+-		pos=numpy.nonzero(numpy.logical_not(nodeonstokes))
+-		if not (any(pattynflag) or any(macayealflag)):
++	if any(FSflag):
++		pos=numpy.nonzero(numpy.logical_not(nodeonFS))
++		if not (any(HOflag) or any(SSAflag)):
+ 			md.flowequation.vertex_equation[pos]=0
+-	pos=numpy.nonzero(nodeonpattynstokes)
++	pos=numpy.nonzero(nodeonHOFS)
+ 	md.flowequation.vertex_equation[pos]=7
+-	pos=numpy.nonzero(nodeonmacayealstokes)
++	pos=numpy.nonzero(nodeonSSAFS)
+ 	md.flowequation.vertex_equation[pos]=6
+ 
+ 	#figure out solution types
+-	md.flowequation.ishutter=any(md.flowequation.element_equation==1)
+-	md.flowequation.ismacayeal=any(md.flowequation.element_equation==2)
+-	md.flowequation.isl1l2=any(md.flowequation.element_equation==8)
+-	md.flowequation.ispattyn=any(md.flowequation.element_equation==3)
+-	md.flowequation.isstokes=any(md.flowequation.element_equation==4)
++	md.flowequation.isSIA=any(md.flowequation.element_equation==1)
++	md.flowequation.isSSA=any(md.flowequation.element_equation==2)
++	md.flowequation.isL1L2=any(md.flowequation.element_equation==8)
++	md.flowequation.isHO=any(md.flowequation.element_equation==3)
++	md.flowequation.isFS=any(md.flowequation.element_equation==4)
+ 
+ 	return md
+ 
+ 	#Check that tiling can work:
+-	if any(md.flowequation.bordermacayeal) and any(md.flowequation.borderpattyn) and any(md.flowequation.borderpattyn + md.flowequation.bordermacayeal !=1):
++	if any(md.flowequation.borderSSA) and any(md.flowequation.borderHO) and any(md.flowequation.borderHO + md.flowequation.borderSSA !=1):
+ 		raise TypeError("error coupling domain too irregular")
+-	if any(md.flowequation.bordermacayeal) and any(md.flowequation.borderstokes) and any(md.flowequation.borderstokes + md.flowequation.bordermacayeal !=1):
++	if any(md.flowequation.borderSSA) and any(md.flowequation.borderFS) and any(md.flowequation.borderFS + md.flowequation.borderSSA !=1):
+ 		raise TypeError("error coupling domain too irregular")
+-	if any(md.flowequation.borderstokes) and any(md.flowequation.borderpattyn) and any(md.flowequation.borderpattyn + md.flowequation.borderstokes !=1):
++	if any(md.flowequation.borderFS) and any(md.flowequation.borderHO) and any(md.flowequation.borderHO + md.flowequation.borderFS !=1):
+ 		raise TypeError("error coupling domain too irregular")
+ 
+ 	return md
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15563)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15564)
+@@ -2,22 +2,22 @@
+ %SETELEMENTSTYPE - associate a solution type to each element
+ %
+ %   This routine works like plotmodel: it works with an even number of inputs
+-%   'hutter','macayeal','l1l2','pattyn','stokes' and 'fill' are the possible options
++%   'SIA','SSA','L1L2','HO','FS' and 'fill' are the possible options
+ %   that must be followed by the corresponding exp file or flags list
+ %   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+ %   If user wants every element outside the domain to be 
+-%   setflowequationd, add '~' to the name of the domain file (ex: '~Pattyn.exp');
++%   setflowequationd, add '~' to the name of the domain file (ex: '~HO.exp');
+ %   an empty string '' will be considered as an empty domain
+ %   a string 'all' will be considered as the entire domain
+ %   You can specify the type of coupling, 'penalties' or 'tiling', to use with the input 'coupling'
+-%   NB: l1l2 cannot currently be coupled to any other ice flow model
++%   NB: L1L2 cannot currently be coupled to any other ice flow model
+ %
+ %   Usage:
+ %      md=setflowequation(md,varargin)
+ %
+ %   Example:
+-%      md=setflowequation(md,'pattyn','Pattyn.exp','macayeal',md.mask.elementonfloatingice,'fill','hutter');
+-%      md=setflowequation(md,'pattyn','Pattyn.exp',fill','hutter','coupling','tiling');
++%      md=setflowequation(md,'HO','HO.exp','SSA',md.mask.elementonfloatingice,'fill','SIA');
++%      md=setflowequation(md,'HO','HO.exp',fill','SIA','coupling','tiling');
+ 
+ %some checks on list of arguments
+ if ((nargin<2) | (nargout~=1)),
+@@ -35,98 +35,99 @@
+ end
+ 
+ %recover elements distribution
+-hutterflag   = FlagElements(md,getfieldvalue(options,'hutter',''));
+-macayealflag = FlagElements(md,getfieldvalue(options,'macayeal',''));
+-pattynflag   = FlagElements(md,getfieldvalue(options,'pattyn',''));
+-l1l2flag     = FlagElements(md,getfieldvalue(options,'l1l2',''));
+-stokesflag   = FlagElements(md,getfieldvalue(options,'stokes',''));
+-filltype     = getfieldvalue(options,'fill','none');
++SIAflag  = FlagElements(md,getfieldvalue(options,'SIA',''));
++SSAflag  = FlagElements(md,getfieldvalue(options,'SSA',''));
++HOflag   = FlagElements(md,getfieldvalue(options,'HO',''));
++L1L2flag = FlagElements(md,getfieldvalue(options,'L1L2',''));
++FSflag   = FlagElements(md,getfieldvalue(options,'FS',''));
++filltype = getfieldvalue(options,'fill','none');
++displayunused(options);
+ 
+ %Flag the elements that have not been flagged as filltype
+-if strcmpi(filltype,'hutter'),
+-	hutterflag(find(~(macayealflag | pattynflag)))=1;
+-elseif strcmpi(filltype,'macayeal'),
+-	macayealflag(find(~(hutterflag | pattynflag | stokesflag)))=1;
+-elseif strcmpi(filltype,'pattyn'),
+-	pattynflag(find(~(hutterflag | macayealflag | stokesflag)))=1;
++if strcmpi(filltype,'SIA'),
++	SIAflag(find(~(SSAflag | HOflag)))=1;
++elseif strcmpi(filltype,'SSA'),
++	SSAflag(find(~(SIAflag | HOflag | FSflag)))=1;
++elseif strcmpi(filltype,'HO'),
++	HOflag(find(~(SIAflag | SSAflag | FSflag)))=1;
+ end
+ 
+ %check that each element has at least one flag
+-if any(hutterflag+macayealflag+pattynflag+l1l2flag+stokesflag==0),
++if any(SIAflag+SSAflag+HOflag+L1L2flag+FSflag==0),
+ 	error('elements type not assigned, must be specified')
+ end
+ 
+ %check that each element has only one flag
+-if any(hutterflag+macayealflag+pattynflag+l1l2flag+stokesflag>1),
++if any(SIAflag+SSAflag+HOflag+L1L2flag+FSflag>1),
+ 	disp('setflowequation warning message: some elements have several types, higher order type is used for them')
+-	hutterflag(find(hutterflag & macayealflag))=0;
+-	hutterflag(find(hutterflag & pattynflag))=0;
+-	macayealflag(find(macayealflag & pattynflag))=0;
++	SIAflag(find(SIAflag & SSAflag))=0;
++	SIAflag(find(SIAflag & HOflag))=0;
++	SSAflag(find(SSAflag & HOflag))=0;
+ end
+ 
+-%check that l1l2 is not coupled to any other model for now
+-if any(l1l2flag) & any(hutterflag | macayealflag | pattynflag | stokesflag)
+-	error('l1l2 cannot be coupled to any other model');
++%check that L1L2 is not coupled to any other model for now
++if any(L1L2flag) & any(SIAflag | SSAflag | HOflag | FSflag)
++	error('L1L2 cannot be coupled to any other model');
+ end
+ 
+-%Check that no l1l2 or pattyn or stokes for 2d mesh
++%Check that no L1L2 or HO or FS for 2d mesh
+ if (md.mesh.dimension==2),
+-	if any(l1l2flag | stokesflag | pattynflag)
+-		error('stokes and pattyn elements not allowed in 2d mesh, extrude it first')
++	if any(L1L2flag | FSflag | HOflag)
++		error('FS and HO elements not allowed in 2d mesh, extrude it first')
+ 	end
+ end
+ 
+-%Stokes can only be used alone for now:
+-if any(stokesflag) &any(hutterflag),
+-	error('stokes cannot be used with any other model for now, put stokes everywhere')
++%FS can only be used alone for now:
++if any(FSflag) &any(SIAflag),
++	error('FS cannot be used with any other model for now, put FS everywhere')
+ end
+ 
+ %Initialize node fields
+-nodeonhutter=zeros(md.mesh.numberofvertices,1);
+-nodeonhutter(md.mesh.elements(find(hutterflag),:))=1;
+-nodeonmacayeal=zeros(md.mesh.numberofvertices,1);
+-nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
+-nodeonpattyn=zeros(md.mesh.numberofvertices,1);
+-nodeonpattyn(md.mesh.elements(find(pattynflag),:))=1;
+-nodeonl1l2=zeros(md.mesh.numberofvertices,1);
+-nodeonl1l2(md.mesh.elements(find(l1l2flag),:))=1;
+-nodeonstokes=zeros(md.mesh.numberofvertices,1);
++nodeonSIA=zeros(md.mesh.numberofvertices,1);
++nodeonSIA(md.mesh.elements(find(SIAflag),:))=1;
++nodeonSSA=zeros(md.mesh.numberofvertices,1);
++nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
++nodeonHO=zeros(md.mesh.numberofvertices,1);
++nodeonHO(md.mesh.elements(find(HOflag),:))=1;
++nodeonL1L2=zeros(md.mesh.numberofvertices,1);
++nodeonL1L2(md.mesh.elements(find(L1L2flag),:))=1;
++nodeonFS=zeros(md.mesh.numberofvertices,1);
+ noneflag=zeros(md.mesh.numberofelements,1);
+ 
+-%First modify stokesflag to get rid of elements contrained everywhere (spc + border with pattyn or macayeal)
+-if any(stokesflag),
+-	fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonpattyn & nodeonstokes));         %find all the nodes on the boundary of the domain without icefront
++%First modify FSflag to get rid of elements contrained everywhere (spc + border with HO or SSA)
++if any(FSflag),
++	fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonHO & nodeonFS));         %find all the nodes on the boundary of the domain without icefront
+ 	fullspcelems=double(sum(fullspcnodes(md.mesh.elements),2)==6);         %find all the nodes on the boundary of the domain without icefront
+-	stokesflag(find(fullspcelems))=0;
+-	nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
++	FSflag(find(fullspcelems))=0;
++	nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+ end
+ 
+-%Then complete with NoneApproximation or the other model used if there is no stokes
+-if any(stokesflag), 
+-	if any(pattynflag), %fill with pattyn
+-		pattynflag(~stokesflag)=1;
+-		nodeonpattyn(md.mesh.elements(find(pattynflag),:))=1;
+-	elseif any(macayealflag), %fill with macayeal
+-		macayealflag(~stokesflag)=1;
+-		nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
++%Then complete with NoneApproximation or the other model used if there is no FS
++if any(FSflag), 
++	if any(HOflag), %fill with HO
++		HOflag(~FSflag)=1;
++		nodeonHO(md.mesh.elements(find(HOflag),:))=1;
++	elseif any(SSAflag), %fill with SSA
++		SSAflag(~FSflag)=1;
++		nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+ 	else %fill with none 
+-		noneflag(find(~stokesflag))=1;
++		noneflag(find(~FSflag))=1;
+ 	end
+ end
+ 
+-%Now take care of the coupling between MacAyeal and Pattyn
++%Now take care of the coupling between MacAyeal and HO
+ md.diagnostic.vertex_pairing=[];
+-nodeonmacayealpattyn=zeros(md.mesh.numberofvertices,1);
+-nodeonpattynstokes=zeros(md.mesh.numberofvertices,1);
+-nodeonmacayealstokes=zeros(md.mesh.numberofvertices,1);
+-macayealpattynflag=zeros(md.mesh.numberofelements,1);
+-macayealstokesflag=zeros(md.mesh.numberofelements,1);
+-pattynstokesflag=zeros(md.mesh.numberofelements,1);
++nodeonSSAHO=zeros(md.mesh.numberofvertices,1);
++nodeonHOFS=zeros(md.mesh.numberofvertices,1);
++nodeonSSAFS=zeros(md.mesh.numberofvertices,1);
++SSAHOflag=zeros(md.mesh.numberofelements,1);
++SSAFSflag=zeros(md.mesh.numberofelements,1);
++HOFSflag=zeros(md.mesh.numberofelements,1);
+ if strcmpi(coupling_method,'penalties'),
+-	%Create the border nodes between Pattyn and MacAyeal and extrude them
++	%Create the border nodes between HO and MacAyeal and extrude them
+ 	numnodes2d=md.mesh.numberofvertices2d;
+ 	numlayers=md.mesh.numberoflayers;
+-	bordernodes2d=find(nodeonpattyn(1:numnodes2d) & nodeonmacayeal(1:numnodes2d)); %Nodes connected to two different types of elements
++	bordernodes2d=find(nodeonHO(1:numnodes2d) & nodeonSSA(1:numnodes2d)); %Nodes connected to two different types of elements
+ 
+ 	%initialize and fill in penalties structure
+ 	if ~isnan(bordernodes2d),
+@@ -137,165 +138,165 @@
+ 		md.diagnostic.vertex_pairing=penalties;
+ 	end
+ elseif strcmpi(coupling_method,'tiling'),
+-	if any(macayealflag) & any(pattynflag), %coupling macayeal pattyn
++	if any(SSAflag) & any(HOflag), %coupling SSA HO
+ 		%Find node at the border
+-		nodeonmacayealpattyn(find(nodeonmacayeal & nodeonpattyn))=1;
+-		%Macayeal elements in contact with this layer become MacAyealPattyn elements
+-		matrixelements=ismember(md.mesh.elements,find(nodeonmacayealpattyn));
++		nodeonSSAHO(find(nodeonSSA & nodeonHO))=1;
++		%SSA elements in contact with this layer become MacAyealHO elements
++		matrixelements=ismember(md.mesh.elements,find(nodeonSSAHO));
+ 		commonelements=sum(matrixelements,2)~=0;
+-		commonelements(find(pattynflag))=0; %only one layer: the elements previously in macayeal
+-		macayealflag(find(commonelements))=0; %these elements are now macayealpattynelements
+-		macayealpattynflag(find(commonelements))=1;
+-		nodeonmacayeal(:)=0;
+-		nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
++		commonelements(find(HOflag))=0; %only one layer: the elements previously in SSA
++		SSAflag(find(commonelements))=0; %these elements are now SSAHOelements
++		SSAHOflag(find(commonelements))=1;
++		nodeonSSA(:)=0;
++		nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+ 
+ 		%rule out elements that don't touch the 2 boundaries
+-		pos=find(macayealpattynflag);
++		pos=find(SSAHOflag);
+ 		elist=zeros(length(pos),1);
+-		elist = elist + any(sum(nodeonmacayeal(md.mesh.elements(pos,:)),2),2);
+-		elist = elist - any(sum(nodeonpattyn(md.mesh.elements(pos,:))  ,2),2);
++		elist = elist + any(sum(nodeonSSA(md.mesh.elements(pos,:)),2),2);
++		elist = elist - any(sum(nodeonHO(md.mesh.elements(pos,:))  ,2),2);
+ 		pos1=find(elist==1);
+-		macayealflag(pos(pos1))=1;
+-		macayealpattynflag(pos(pos1))=0;
++		SSAflag(pos(pos1))=1;
++		SSAHOflag(pos(pos1))=0;
+ 		pos2=find(elist==-1);
+-		pattynflag(pos(pos2))=1;
+-		macayealpattynflag(pos(pos2))=0;
++		HOflag(pos(pos2))=1;
++		SSAHOflag(pos(pos2))=0;
+ 
+ 		%Recompute nodes associated to these elements
+-		nodeonmacayeal(:)=0;
+-		nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
+-		nodeonpattyn(:)=0;
+-		nodeonpattyn(md.mesh.elements(find(pattynflag),:))=1;
+-		nodeonmacayealpattyn(:)=0;
+-		nodeonmacayealpattyn(md.mesh.elements(find(macayealpattynflag),:))=1;
++		nodeonSSA(:)=0;
++		nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
++		nodeonHO(:)=0;
++		nodeonHO(md.mesh.elements(find(HOflag),:))=1;
++		nodeonSSAHO(:)=0;
++		nodeonSSAHO(md.mesh.elements(find(SSAHOflag),:))=1;
+ 
+-	elseif any(pattynflag) & any(stokesflag), %coupling pattyn stokes
++	elseif any(HOflag) & any(FSflag), %coupling HO FS
+ 		%Find node at the border
+-		nodeonpattynstokes(find(nodeonpattyn & nodeonstokes))=1;
+-		%Stokes elements in contact with this layer become PattynStokes elements
+-		matrixelements=ismember(md.mesh.elements,find(nodeonpattynstokes));
++		nodeonHOFS(find(nodeonHO & nodeonFS))=1;
++		%FS elements in contact with this layer become HOFS elements
++		matrixelements=ismember(md.mesh.elements,find(nodeonHOFS));
+ 		commonelements=sum(matrixelements,2)~=0;
+-		commonelements(find(pattynflag))=0; %only one layer: the elements previously in macayeal
+-		stokesflag(find(commonelements))=0; %these elements are now macayealpattynelements
+-		pattynstokesflag(find(commonelements))=1;
+-		nodeonstokes=zeros(md.mesh.numberofvertices,1);
+-		nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
++		commonelements(find(HOflag))=0; %only one layer: the elements previously in SSA
++		FSflag(find(commonelements))=0; %these elements are now SSAHOelements
++		HOFSflag(find(commonelements))=1;
++		nodeonFS=zeros(md.mesh.numberofvertices,1);
++		nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+ 
+ 		%rule out elements that don't touch the 2 boundaries
+-		pos=find(pattynstokesflag);
++		pos=find(HOFSflag);
+ 		elist=zeros(length(pos),1);
+-		elist = elist + any(sum(nodeonstokes(md.mesh.elements(pos,:)),2),2);
+-		elist = elist - any(sum(nodeonpattyn(md.mesh.elements(pos,:)),2),2);
++		elist = elist + any(sum(nodeonFS(md.mesh.elements(pos,:)),2),2);
++		elist = elist - any(sum(nodeonHO(md.mesh.elements(pos,:)),2),2);
+ 		pos1=find(elist==1);
+-		stokesflag(pos(pos1))=1;
+-		pattynstokesflag(pos(pos1))=0;
++		FSflag(pos(pos1))=1;
++		HOFSflag(pos(pos1))=0;
+ 		pos2=find(elist==-1);
+-		pattynflag(pos(pos2))=1;
+-		pattynstokesflag(pos(pos2))=0;
++		HOflag(pos(pos2))=1;
++		HOFSflag(pos(pos2))=0;
+ 
+ 		%Recompute nodes associated to these elements
+-		nodeonstokes(:)=0;
+-		nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
+-		nodeonpattyn(:)=0;
+-		nodeonpattyn(md.mesh.elements(find(pattynflag),:))=1;
+-		nodeonpattynstokes(:)=0;
+-		nodeonpattynstokes(md.mesh.elements(find(pattynstokesflag),:))=1;
++		nodeonFS(:)=0;
++		nodeonFS(md.mesh.elements(find(FSflag),:))=1;
++		nodeonHO(:)=0;
++		nodeonHO(md.mesh.elements(find(HOflag),:))=1;
++		nodeonHOFS(:)=0;
++		nodeonHOFS(md.mesh.elements(find(HOFSflag),:))=1;
+ 
+-	elseif any(stokesflag) & any(macayealflag),
++	elseif any(FSflag) & any(SSAflag),
+ 		%Find node at the border
+-		nodeonmacayealstokes(find(nodeonmacayeal & nodeonstokes))=1;
+-		%Stokes elements in contact with this layer become MacAyealStokes elements
+-		matrixelements=ismember(md.mesh.elements,find(nodeonmacayealstokes));
++		nodeonSSAFS(find(nodeonSSA & nodeonFS))=1;
++		%FS elements in contact with this layer become MacAyealFS elements
++		matrixelements=ismember(md.mesh.elements,find(nodeonSSAFS));
+ 		commonelements=sum(matrixelements,2)~=0;
+-		commonelements(find(macayealflag))=0; %only one layer: the elements previously in macayeal
+-		stokesflag(find(commonelements))=0; %these elements are now macayealmacayealelements
+-		macayealstokesflag(find(commonelements))=1;
+-		nodeonstokes=zeros(md.mesh.numberofvertices,1);
+-		nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
++		commonelements(find(SSAflag))=0; %only one layer: the elements previously in SSA
++		FSflag(find(commonelements))=0; %these elements are now SSASSAelements
++		SSAFSflag(find(commonelements))=1;
++		nodeonFS=zeros(md.mesh.numberofvertices,1);
++		nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+ 
+ 		%rule out elements that don't touch the 2 boundaries
+-		pos=find(macayealstokesflag);
++		pos=find(SSAFSflag);
+ 		elist=zeros(length(pos),1);
+-		elist = elist + any(sum(nodeonmacayeal(md.mesh.elements(pos,:)),2),2);
+-		elist = elist - any(sum(nodeonstokes(md.mesh.elements(pos,:))  ,2),2);
++		elist = elist + any(sum(nodeonSSA(md.mesh.elements(pos,:)),2),2);
++		elist = elist - any(sum(nodeonFS(md.mesh.elements(pos,:))  ,2),2);
+ 		pos1=find(elist==1);
+-		macayealflag(pos(pos1))=1;
+-		macayealstokesflag(pos(pos1))=0;
++		SSAflag(pos(pos1))=1;
++		SSAFSflag(pos(pos1))=0;
+ 		pos2=find(elist==-1);
+-		stokesflag(pos(pos2))=1;
+-		macayealstokesflag(pos(pos2))=0;
++		FSflag(pos(pos2))=1;
++		SSAFSflag(pos(pos2))=0;
+ 
+ 		%Recompute nodes associated to these elements
+-		nodeonmacayeal(:)=0;
+-		nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
+-		nodeonstokes(:)=0;
+-		nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
+-		nodeonmacayealstokes(:)=0;
+-		nodeonmacayealstokes(md.mesh.elements(find(macayealstokesflag),:))=1;
++		nodeonSSA(:)=0;
++		nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
++		nodeonFS(:)=0;
++		nodeonFS(md.mesh.elements(find(FSflag),:))=1;
++		nodeonSSAFS(:)=0;
++		nodeonSSAFS(md.mesh.elements(find(SSAFSflag),:))=1;
+ 
+-	elseif any(stokesflag) & any(hutterflag),
++	elseif any(FSflag) & any(SIAflag),
+ 		error('type of coupling not supported yet');
+ 	end
+ end
+ 
+-%Create MacaAyealPattynApproximation where needed
++%Create MacaAyealHOApproximation where needed
+ md.flowequation.element_equation=zeros(md.mesh.numberofelements,1);
+ md.flowequation.element_equation(find(noneflag))=0;
+-md.flowequation.element_equation(find(hutterflag))=1;
+-md.flowequation.element_equation(find(macayealflag))=2;
+-md.flowequation.element_equation(find(l1l2flag))=8;
+-md.flowequation.element_equation(find(pattynflag))=3;
+-md.flowequation.element_equation(find(stokesflag))=4;
+-md.flowequation.element_equation(find(macayealpattynflag))=5;
+-md.flowequation.element_equation(find(macayealstokesflag))=6;
+-md.flowequation.element_equation(find(pattynstokesflag))=7;
++md.flowequation.element_equation(find(SIAflag))=1;
++md.flowequation.element_equation(find(SSAflag))=2;
++md.flowequation.element_equation(find(L1L2flag))=8;
++md.flowequation.element_equation(find(HOflag))=3;
++md.flowequation.element_equation(find(FSflag))=4;
++md.flowequation.element_equation(find(SSAHOflag))=5;
++md.flowequation.element_equation(find(SSAFSflag))=6;
++md.flowequation.element_equation(find(HOFSflag))=7;
+ 
+ %border
+-md.flowequation.borderpattyn=nodeonpattyn;
+-md.flowequation.bordermacayeal=nodeonmacayeal;
+-md.flowequation.borderstokes=nodeonstokes;
++md.flowequation.borderHO=nodeonHO;
++md.flowequation.borderSSA=nodeonSSA;
++md.flowequation.borderFS=nodeonFS;
+ 
+ %Create vertices_type
+ md.flowequation.vertex_equation=zeros(md.mesh.numberofvertices,1);
+-pos=find(nodeonmacayeal);
++pos=find(nodeonSSA);
+ md.flowequation.vertex_equation(pos)=2;
+-pos=find(nodeonl1l2);
++pos=find(nodeonL1L2);
+ md.flowequation.vertex_equation(pos)=8;
+-pos=find(nodeonpattyn);
++pos=find(nodeonHO);
+ md.flowequation.vertex_equation(pos)=3;
+-pos=find(nodeonhutter);
++pos=find(nodeonSIA);
+ md.flowequation.vertex_equation(pos)=1;
+-pos=find(nodeonmacayealpattyn);
++pos=find(nodeonSSAHO);
+ md.flowequation.vertex_equation(pos)=5;
+-pos=find(nodeonstokes);
++pos=find(nodeonFS);
+ md.flowequation.vertex_equation(pos)=4;
+-if any(stokesflag),
+-	pos=find(~nodeonstokes);
+-	if(~any(pattynflag) & ~any(macayealflag)),
++if any(FSflag),
++	pos=find(~nodeonFS);
++	if(~any(HOflag) & ~any(SSAflag)),
+ 		md.flowequation.vertex_equation(pos)=0;
+ 	end
+ end
+-pos=find(nodeonpattynstokes);
++pos=find(nodeonHOFS);
+ md.flowequation.vertex_equation(pos)=7;
+-pos=find(nodeonmacayealstokes);
++pos=find(nodeonSSAFS);
+ md.flowequation.vertex_equation(pos)=6;
+ 
+ %figure out solution types
+-md.flowequation.ishutter=double(any(md.flowequation.element_equation==1));
+-md.flowequation.ismacayeal=double(any(md.flowequation.element_equation==2));
+-md.flowequation.ispattyn=double(any(md.flowequation.element_equation==3));
+-md.flowequation.isl1l2=double(any(md.flowequation.element_equation==8));
+-md.flowequation.isstokes=double(any(md.flowequation.element_equation==4));
++md.flowequation.isSIA  = double(any(md.flowequation.element_equation == 1));
++md.flowequation.isSSA  = double(any(md.flowequation.element_equation == 2));
++md.flowequation.isHO   = double(any(md.flowequation.element_equation == 3));
++md.flowequation.isL1L2 = double(any(md.flowequation.element_equation == 8));
++md.flowequation.isFS   = double(any(md.flowequation.element_equation == 4));
+ 
+ return
+ 
+ %Check that tiling can work:
+-if any(md.flowequation.bordermacayeal) & any(md.flowequation.borderpattyn) & any(md.flowequation.borderpattyn + md.flowequation.bordermacayeal ~=1),
++if any(md.flowequation.borderSSA) & any(md.flowequation.borderHO) & any(md.flowequation.borderHO + md.flowequation.borderSSA ~=1),
+ 	error('error coupling domain too irregular');
+ end
+-if any(md.flowequation.bordermacayeal) & any(md.flowequation.borderstokes) & any(md.flowequation.borderstokes + md.flowequation.bordermacayeal ~=1),
++if any(md.flowequation.borderSSA) & any(md.flowequation.borderFS) & any(md.flowequation.borderFS + md.flowequation.borderSSA ~=1),
+ 	error('error coupling domain too irregular');
+ end
+-if any(md.flowequation.borderstokes) & any(md.flowequation.borderpattyn) & any(md.flowequation.borderpattyn + md.flowequation.borderstokes~=1),
++if any(md.flowequation.borderFS) & any(md.flowequation.borderHO) & any(md.flowequation.borderHO + md.flowequation.borderFS~=1),
+ 	error('error coupling domain too irregular');
+ end
+Index: ../trunk-jpl/src/m/plot/plot_elementstype.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_elementstype.m	(revision 15563)
++++ ../trunk-jpl/src/m/plot/plot_elementstype.m	(revision 15564)
+@@ -17,7 +17,7 @@
+ subplot(width,width,i);
+ 
+ if is2d
+-	%Hutter elements
++	%SIA elements
+ 	posH=find(data==1);
+ 	A=elements(posH,1); B=elements(posH,2); C=elements(posH,3); 
+ 	p1=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',1,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -25,23 +25,23 @@
+ 	posM=find(data==2);
+ 	A=elements(posM,1); B=elements(posM,2); C=elements(posM,3); 
+ 	p2=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',2,'FaceColor','flat','EdgeColor',edgecolor);
+-	%Pattyn element
++	%HO element
+ 	posP=find(data==3);
+ 	A=elements(posP,1); B=elements(posP,2); C=elements(posP,3); 
+ 	p3=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',3,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyealPattyn element
++	%MacAyealHO element
+ 	posMP=find(data==5);
+ 	A=elements(posMP,1); B=elements(posMP,2); C=elements(posMP,3); 
+ 	p5=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',5,'FaceColor','flat','EdgeColor',edgecolor);
+-	%Stokes elements
++	%FS elements
+ 	posS=find(data==4);
+ 	A=elements(posS,1); B=elements(posS,2); C=elements(posS,3); 
+ 	p6=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',4,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyealStokes elements
++	%MacAyealFS elements
+ 	posMS=find(data==6);
+ 	A=elements(posMS,1); B=elements(posMS,2); C=elements(posMS,3); 
+ 	p7=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',6,'FaceColor','flat','EdgeColor',edgecolor);
+-	%PattynStokes elements
++	%HOFS elements
+ 	posPS=find(data==7);
+ 	A=elements(posPS,1); B=elements(posPS,2); C=elements(posPS,3); 
+ 	p8=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',7,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -51,11 +51,11 @@
+ 	p9=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',0,'FaceColor','flat','EdgeColor',edgecolor);
+ 
+ 	legend([p1 p2 p3 p5 p6 p7 p8 p9],...
+-		'Hutter''s elements','MacAyeal''s elements','Pattyn''s elements',...
+-		'MacAyealPattyn''s elements','Stokes''s elements','MacAyealStokes''s elements','PattynStokes''s elements','None element');
++		'SIA''s elements','MacAyeal''s elements','HO''s elements',...
++		'MacAyealHO''s elements','FS''s elements','MacAyealFS''s elements','HOFS''s elements','None element');
+ 
+ else
+-	%Hutter elements
++	%SIA elements
+ 	posH=find(data==1);
+ 	A=elements(posH,1); B=elements(posH,2); C=elements(posH,3); D=elements(posH,4); E=elements(posH,5); F=elements(posH,6);
+ 	p1=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 1,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -71,7 +71,7 @@
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', 2,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 2,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 2,'FaceColor','flat','EdgeColor',edgecolor);
+-	%Pattyn elements
++	%HO elements
+ 	posP=find(data==3);
+ 	A=elements(posP,1); B=elements(posP,2); C=elements(posP,3); D=elements(posP,4); E=elements(posP,5); F=elements(posP,6);
+ 	p3=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 3,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -79,7 +79,7 @@
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', 3,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 3,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 3,'FaceColor','flat','EdgeColor',edgecolor);
+-	%Stokes elements
++	%FS elements
+ 	posS=find(data==4);
+ 	A=elements(posS,1); B=elements(posS,2); C=elements(posS,3); D=elements(posS,4); E=elements(posS,5); F=elements(posS,6);
+ 	p4=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -87,7 +87,7 @@
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyealPattyn elements
++	%MacAyealHO elements
+ 	posP=find(data==5);
+ 	A=elements(posP,1); B=elements(posP,2); C=elements(posP,3); D=elements(posP,4); E=elements(posP,5); F=elements(posP,6);
+ 	p5=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 5,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -95,7 +95,7 @@
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', 5,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 5,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 5,'FaceColor','flat','EdgeColor',edgecolor);
+-	%PattynStokes elements
++	%HOFS elements
+ 	PosPS=find(data==7);
+ 	A=elements(PosPS,1); B=elements(PosPS,2); C=elements(PosPS,3); D=elements(PosPS,4); E=elements(PosPS,5); F=elements(PosPS,6);
+ 	p6=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -103,7 +103,7 @@
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyealStokes elements
++	%MacAyealFS elements
+ 	PosMS=find(data==6);
+ 	A=elements(PosMS,1); B=elements(PosMS,2); C=elements(PosMS,3); D=elements(PosMS,4); E=elements(PosMS,5); F=elements(PosMS,6);
+ 	p7=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 6,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -121,8 +121,8 @@
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 0,'FaceColor','flat','EdgeColor',edgecolor);
+ 
+ 	legend([p1 p2 p3 p4 p5 p6 p7 p8],...
+-		'Hutter''s elements','MacAyeal''s elements','Pattyn''s elements','Stokes''s elements',...
+-		'MacAyealPattyn''s elements','PattynStokes''s elements','MacAyealStokes''s elements','None elements');
++		'SIA''s elements','MacAyeal''s elements','HO''s elements','FS''s elements',...
++		'MacAyealHO''s elements','HOFS''s elements','MacAyealFS''s elements','None elements');
+ end
+ 
+ %apply options
+Index: ../trunk-jpl/src/m/plot/plot_penalties.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_penalties.m	(revision 15563)
++++ ../trunk-jpl/src/m/plot/plot_penalties.m	(revision 15564)
+@@ -39,7 +39,7 @@
+ 		P1=plot3(x(md.penalties(i,1)),y(md.penalties(i,1)),z(md.penalties(i,1)),'ro','MarkerSize',15,'MarkerFaceColor','r');
+ 		P2=plot3(x(md.penalties(i,:)),y(md.penalties(i,:)),z(md.penalties(i,:)),'bo-','LineWidth',2,'MarkerSize',8,'MarkerFaceColor','b');
+ 	end
+-	legend([P1 P2],'MacAyeal''s penalized nodes','Pattyn''s penalized nodes');
++	legend([P1 P2],'MacAyeal''s penalized nodes','HO''s penalized nodes');
+ end
+ 
+ %apply options
Index: /issm/oecreview/Archive/15392-16133/ISSM-15564-15565.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15564-15565.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15564-15565.diff	(revision 16134)
@@ -0,0 +1,6419 @@
+Index: ../trunk-jpl/test/NightlyRun/test202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test202.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.transient.isdiagnostic=False
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 15565)
+@@ -16,7 +16,7 @@
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ md.extrude(3,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md=md.extract(md.mask.elementonfloatingice)
+ 
+ #control parameters
+Index: ../trunk-jpl/test/NightlyRun/test430.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test430.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.diagnostic.isnewton=1
+ md.diagnostic.restol=0.0001
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test404.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test404.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test323.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test323.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1
+ md.timestepping.final_time=600.
+Index: ../trunk-jpl/test/NightlyRun/test401.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test401.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test320.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test320.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 15565)
+@@ -13,7 +13,7 @@
+ md=meshprocessrifts(md,'../Exp/Square.exp')
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ # rift settings
+Index: ../trunk-jpl/test/NightlyRun/test109.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test109.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=False
+ md.transient.isprognostic=False
+Index: ../trunk-jpl/test/NightlyRun/test222.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test222.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test222.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test303.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test303.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test303.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal');
++md=setflowequation(md,'SIA','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test205.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal','coupling','penalties');
++md=setflowequation(md,'HO','../Exp/SquareHalfRight.exp','fill','SSA','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test606.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test606.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test606.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BedSlopeSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test107.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md=extrude(md,5,3.);
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test605.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test605.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,5,1.5);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,SurfaceSlopeSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 15565)
+@@ -9,7 +9,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md.surfaceforcings.mass_balance(:)=100.;
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.transient.isdiagnostic=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+Index: ../trunk-jpl/test/NightlyRun/test507.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test507.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,2,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test328.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test328.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.surfaceforcings.issmbgradients=1;
+ md.surfaceforcings.b_pos=-100. + 0.00005*md.mesh.x - 0.0001*md.mesh.y;
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y;
+Index: ../trunk-jpl/test/NightlyRun/test409.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test409.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test409.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties');
++md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.diagnostic.requested_outputs=StressTensorEnum();
+Index: ../trunk-jpl/test/NightlyRun/test1205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1205.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1205.py	(revision 15565)
+@@ -31,7 +31,7 @@
+ 
+ #We extrude the model to have a 3d model
+ md.extrude(numlayers,1.);
+-md=setflowequation(md,'hutter','all')
++md=setflowequation(md,'SIA','all')
+ 
+ #Spc the nodes on the bed
+ pos=numpy.nonzero(md.mesh.vertexonbed)
+@@ -94,8 +94,8 @@
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('hutterstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
+-#	system(['mv hutterstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
++#	printmodel('SIAstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
++#	system(['mv SIAstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
+ 
+ #Fields and tolerances to track changes
+ field_names     =[ \
+Index: ../trunk-jpl/test/NightlyRun/test1202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1202.m	(revision 15565)
+@@ -6,7 +6,7 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+-md=setflowequation(md,'macayeal','all'); %MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all'); %MacAyeal's model and 2d
+ 
+ %Compute solution for MacAyeal's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+Index: ../trunk-jpl/test/NightlyRun/test1104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1104.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1104.m	(revision 15565)
+@@ -13,7 +13,7 @@
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPB.par');
+ 	md=extrude(md,10,1.);
+-	md=setflowequation(md,'pattyn','all');
++	md=setflowequation(md,'HO','all');
+ 
+ 	%Create dirichlet on the bed only
+ 	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -41,7 +41,7 @@
+ 	md.diagnostic.spcvx(pos)=md.results.DiagnosticSolution.Vx(pos);
+ 	md.diagnostic.spcvy(pos)=md.results.DiagnosticSolution.Vy(pos);
+ 	md.diagnostic.vertex_pairing=[];
+-	md=setflowequation(md,'stokes','all');
++	md=setflowequation(md,'FS','all');
+ 	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+Index: ../trunk-jpl/test/NightlyRun/test1602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1602.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.diagnostic.spcvx(find(md.mesh.y>0.))=NaN;
+ md.initialization.vx(:)=0.;
+ md.initialization.vy(:)=0.;
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.transient.isdiagnostic=0;
+ md.transient.isprognostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test211.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test211.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.diagnostic.reltol=NaN
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test104.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test104.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test601.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test601.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test410.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test410.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+ md=solve(md,SteadystateSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test225.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test225.py	(revision 15565)
+@@ -13,7 +13,7 @@
+ md.geometry.bed=md.geometry.bed+50.
+ md.geometry.surface=md.geometry.surface+50.
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.prognostic.hydrostatic_adjustment='Incremental'
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test306.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test306.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(4,2.)
+-md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal')
++md=setflowequation(md,'SIA','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test118.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test118.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test118.py	(revision 15565)
+@@ -14,7 +14,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.balancethickness.stabilization=3
+ md.initialization.vy=md.initialization.vy+400.
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BalancethicknessSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test231.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test231.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test231.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.timestepping.time_step=1;
+Index: ../trunk-jpl/test/NightlyRun/test312.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test312.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.timestepping.time_step=0.;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,ThermalSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test116.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test116.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test116.m	(revision 15565)
+@@ -4,7 +4,7 @@
+ %Add boundary conditions on thickness on the border
+ pos=find(md.mesh.vertexonboundary);
+ md.balancethickness.spcthickness(pos)=md.geometry.thickness(pos);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(4,1.1)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+ md=solve(md,SteadystateSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test427.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test427.py	(revision 15565)
+@@ -17,7 +17,7 @@
+ md.geometry.bathymetry=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
+ md.geometry.thickness[:]=1300
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.extrude(3,1.)
+ 
+ md.surfaceforcings.mass_balance[:]=-150
+Index: ../trunk-jpl/test/NightlyRun/test516.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test516.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test516.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+Index: ../trunk-jpl/test/NightlyRun/test418.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test418.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test418.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=triangle(model(),'../Exp/Square.exp',30000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ %partitioning
+Index: ../trunk-jpl/test/NightlyRun/test3010.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3010.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.transient.requested_outputs=IceVolumeEnum();
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1107.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1107.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1107.py	(revision 15565)
+@@ -31,7 +31,7 @@
+ 	md=parameterize(md,'../Par/ISMIPD.py')
+ 	md.extrude(10,1.)
+ 
+-	md=setflowequation(md,'pattyn','all')
++	md=setflowequation(md,'HO','all')
+ 
+ 	#We need one grd on dirichlet: the 4 corners are set to zero
+ 	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+@@ -87,14 +87,14 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipdpattynvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipdpattynvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
++#		printmodel(['ismipdHOvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipdHOvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
+ #	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',3)
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipdpattynvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipdpattynvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
++#		printmodel(['ismipdHOvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipdHOvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
+ 
+ 	if   (L==5000.):
+ 		pass
+@@ -123,22 +123,22 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipdpattynvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipdpattynvxsec%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
++#		printmodel(['ismipdHOvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipdHOvxsec%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
+ 
+ #Now plot the min and max values of vx for each size of the square
+ #plot([5 10 20 40 80 160],minvx);ylim([2 18]);xlim([0 160])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipdpattynminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipdpattynminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
++#	printmodel('ismipdHOminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipdHOminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
+ #plot([5 10 20 40 80 160],maxvx);ylim([0 300]);xlim([0 160])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipdpattynmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipdpattynmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
++#	printmodel('ismipdHOmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipdHOmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestD')
+ 
+ #Fields and tolerances to track changes
+ field_names     =[\
+Index: ../trunk-jpl/test/NightlyRun/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test220.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(2,1.)
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn')
++md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test301.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test301.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test113.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test113.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test113.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,SurfaceSlopeSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test610.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test610.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BalancethicknessSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test503.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test503.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,0.9)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test422.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test422.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal')
++md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.reltol=0.4
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test315.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test315.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(5,1.2)
+-md=setflowequation(md,'hutter','all')
++md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test402.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test402.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test321.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test321.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test208.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test208.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test208.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test223.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test223.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+Index: ../trunk-jpl/test/NightlyRun/test304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test304.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test206.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,ThermalSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test108.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,ThermalSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 15565)
+@@ -19,7 +19,7 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test329.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test329.py	(revision 15565)
+@@ -13,7 +13,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.surfaceforcings.issmbgradients=1
+ md.surfaceforcings.b_pos=-100. + 0.00005*md.mesh.x - 0.0001*md.mesh.y
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y
+Index: ../trunk-jpl/test/NightlyRun/test606.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test606.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test606.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BedSlopeSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 15565)
+@@ -7,7 +7,7 @@
+ md.geometry.bathymetry=-700.-abs(md.mesh.y-500000.)/1000.;
+ md.geometry.thickness(:)=1300;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md=extrude(md,3,1.);
+ 
+ md.surfaceforcings.mass_balance(:)=-150;
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,4,1.1);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+ md=solve(md,SteadystateSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.surfaceforcings.issmbgradients=1;
+ md.surfaceforcings.b_pos=-100. + 0.00005*md.mesh.x - 0.0001*md.mesh.y;
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y;
+Index: ../trunk-jpl/test/NightlyRun/test1102.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1102.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1102.py	(revision 15565)
+@@ -38,7 +38,7 @@
+ 
+ 	md=parameterize(md,'../Par/ISMIPA.py')
+ 	md.extrude(10,1.)
+-	md=setflowequation(md,'stokes','all')
++	md=setflowequation(md,'FS','all')
+ 
+ 	#Create dirichlet on the bed only
+ 	pos=numpy.nonzero(md.mesh.vertexonbed)
+@@ -78,20 +78,20 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipastokesvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipastokesvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#		printmodel(['ismipaFSvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipaFSvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ #	plotmodel(md,'data',vy,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',3)
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipastokesvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipastokesvy%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#		printmodel(['ismipaFSvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipaFSvy%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ #	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',4)
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipastokesvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipastokesvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#		printmodel(['ismipaFSvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipaFSvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ 
+ 	if   (L==5000.):
+ 		pass
+@@ -120,22 +120,22 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipastokesvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipastokesvxsec.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#		printmodel(['ismipaFSvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipaFSvxsec.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ 
+ #Now plot the min and max values of vx for each size of the square
+ #plot([5 10 20 40 80 160],minvx);ylim([0 18])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipastokesminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipastokesminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#	printmodel('ismipaFSminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipaFSminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ #plot([5 10 20 40 80 160],maxvx);ylim([0 120])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipastokesmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipastokesmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#	printmodel('ismipaFSmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipaFSmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ 
+ #Fields and tolerances to track changes
+ field_names     =[\
+Index: ../trunk-jpl/test/NightlyRun/test3005.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3005.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.autodiff.isautodiff=True
+Index: ../trunk-jpl/test/NightlyRun/test1304.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1304.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1304.py	(revision 15565)
+@@ -23,7 +23,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareThermal.py')
+ md.extrude(11,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ pos2=numpy.nonzero(md.mesh.elementonsurface)[0]
+ md.thermal.spctemperature[md.mesh.elements[pos2,3:6]-1]=0.
+Index: ../trunk-jpl/test/NightlyRun/test3002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3002.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+Index: ../trunk-jpl/test/NightlyRun/test1301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1301.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1301.m	(revision 15565)
+@@ -9,7 +9,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ %Some conditions specific to melting test
+ md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test1203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1203.m	(revision 15565)
+@@ -6,7 +6,7 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',5100.); %test3
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+-md=setflowequation(md,'macayeal','all'); %MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all'); %MacAyeal's model and 2d
+ 
+ %Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=find(md.mesh.y==max(md.mesh.y));
+Index: ../trunk-jpl/test/NightlyRun/test1105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1105.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1105.m	(revision 15565)
+@@ -17,7 +17,7 @@
+ 	md=parameterize(md,'../Par/ISMIPC.par');
+ 	md=extrude(md,10,1.);
+ 
+-	md=setflowequation(md,'pattyn','all');
++	md=setflowequation(md,'HO','all');
+ 
+ 	%Create MPCs to have periodic boundary conditions
+ 	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -76,20 +76,20 @@
+ 	plotmodel(md,'data',vx,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',2)
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipcpattynvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipcpattynvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
++		printmodel(['ismipcHOvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipcHOvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
+ 	end
+ 	plotmodel(md,'data',vy,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',3)
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipcpattynvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipcpattynvy' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
++		printmodel(['ismipcHOvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipcHOvy' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
+ 	end
+ 	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',4)
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipcpattynvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipcpattynvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
++		printmodel(['ismipcHOvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipcHOvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
+ 	end
+ 
+ 	if(L==5000.),
+@@ -113,8 +113,8 @@
+ 	end
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipcpattynvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipcpattynvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
++		printmodel(['ismipcHOvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipcHOvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
+ 	end
+ end
+ 
+@@ -122,14 +122,14 @@
+ plot([5 10 20 40 80 160],minvx);ylim([4 18]);xlim([0 160])
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('ismipcpattynminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipcpattynminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
++	printmodel('ismipcHOminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipcHOminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
+ end
+ plot([5 10 20 40 80 160],maxvx);ylim([0 200]); xlim([0 160])
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('ismipcpattynmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipcpattynmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
++	printmodel('ismipcHOmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipcHOmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestC']);
+ end
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3019.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3019.py	(revision 15565)
+@@ -14,7 +14,7 @@
+ md=triangle(model(),'../Exp/Square.exp',100000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md.autodiff.isautodiff=True
+Index: ../trunk-jpl/test/NightlyRun/test310.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test310.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test310.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=meshconvert(md)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.prognostic.stabilization=3
+ md.prognostic.spcthickness=md.geometry.thickness
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test122.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test122.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.thermal.isenthalpy=1
+ md.thermal.stabilization=2
+Index: ../trunk-jpl/test/NightlyRun/test203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test203.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test431.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test431.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+ md.thermal.isenthalpy=1
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ # control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test324.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test324.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(5,1.2)
+-md=setflowequation(md,'hutter','all')
++md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1
+ md.timestepping.final_time=500.
+Index: ../trunk-jpl/test/NightlyRun/test405.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test405.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties')
++md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO','coupling','penalties')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ # redo the parameter file for this special shelf. 
+Index: ../trunk-jpl/test/NightlyRun/test411.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test411.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+ md=solve(md,SteadystateSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test313.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test313.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('convergence',true,'solution',true);
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test232.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test232.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5., md.thermal.spctemperature+10., md.thermal.spctemperature+15.; 1.5 2.5 3.5 4.];
+ md.timestepping.time_step=1;
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test117.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test117.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test117.m	(revision 15565)
+@@ -5,7 +5,7 @@
+ %Add boundary conditions on thickness on the border
+ pos=find(md.mesh.vertexonboundary);
+ md.balancethickness.spcthickness(pos)=md.geometry.thickness(pos);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test607.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test607.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+ md.extrude(2,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BedSlopeSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test419.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test419.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn')
++md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 15565)
+@@ -6,7 +6,7 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test419.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test419.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn');
++md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1501.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1501.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1501.py	(revision 15565)
+@@ -14,7 +14,7 @@
+ md=triangle(model(),'../Exp/Square.exp',350000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isthermal=False
+ 
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.autodiff.isautodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/test1206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1206.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1206.py	(revision 15565)
+@@ -31,7 +31,7 @@
+ 
+ #We extrude the model to have a 3d model
+ md.extrude(numlayers,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ #Spc the nodes on the bed
+ pos=numpy.nonzero(md.mesh.vertexonbed)
+@@ -93,8 +93,8 @@
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('pattynstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
+-#	system(['mv pattynstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
++#	printmodel('HOstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
++#	system(['mv HOstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
+ 
+ #Fields and tolerances to track changes
+ field_names     =[ \
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.toolkits.DefaultAnalysis=issmsolver();
+ 
+Index: ../trunk-jpl/test/NightlyRun/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test212.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ 
+ # control parameters
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum();
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test105.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test105.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test105.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test602.py	(revision 15565)
+@@ -13,7 +13,7 @@
+ md=meshconvert(md)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.prognostic.stabilization=3
+ md.prognostic.spcthickness=md.geometry.thickness
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test307.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test307.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test226.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test226.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1.
+ md.timestepping.final_time=10.
+Index: ../trunk-jpl/test/NightlyRun/test420.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test420.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test420.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ %partitioning
+Index: ../trunk-jpl/test/NightlyRun/test501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test501.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test322.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test322.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test403.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test403.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test305.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test305.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,2.);
+-md=setflowequation(md,'hutter','all');
++md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test224.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test224.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test207.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+ md.transient.isprognostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test109.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+ md.transient.isprognostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test428.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test428.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.diagnostic.isnewton=1
+ md.diagnostic.restol=0.0001
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test509.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test509.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+ md.thermal.penalty_threshold=7
+Index: ../trunk-jpl/test/NightlyRun/test607.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test607.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,2,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BedSlopeSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test428.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test428.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.diagnostic.isnewton=1;
+ md.diagnostic.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test509.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test509.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+ md.thermal.penalty_threshold=7;
+Index: ../trunk-jpl/test/NightlyRun/test1201.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1201.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1201.py	(revision 15565)
+@@ -22,7 +22,7 @@
+ 	md=setmask(md,'all','')
+ 	md=parameterize(md,'../Par/SquareEISMINT.py')
+ 	md.surfaceforcings.mass_balance[:]=0.
+-	md=setflowequation(md,'macayeal','all')
++	md=setflowequation(md,'SSA','all')
+ 	md.cluster=generic('name',oshostname(),'np',8)
+ 
+ 	print "      initial velocity"
+Index: ../trunk-jpl/test/NightlyRun/android.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/android.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/android.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',40000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('mprocessor',true,'module',true,'solution',true,'solver',true,'convergence',true,'control',true,'qmu',true,'autodiff',true);
+ md.diagnostic.requested_outputs=StressTensorEnum();
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 15565)
+@@ -5,7 +5,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum()];
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.diagnostic.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/test1108.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1108.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1108.py	(revision 15565)
+@@ -26,7 +26,7 @@
+ 	md=parameterize(md,'../Par/ISMIPD.py')
+ 	md.extrude(10,1.)
+ 
+-	md=setflowequation(md,'pattyn','all')
++	md=setflowequation(md,'HO','all')
+ 
+ 	#We need one grd on dirichlet: the 4 corners are set to zero
+ 	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+@@ -61,7 +61,7 @@
+ 	pos=numpy.nonzero(logical_or_n(md.mesh.y==0.,md.mesh.x==0.,md.mesh.x==numpy.max(md.mesh.x),md.mesh.y==numpy.max(md.mesh.y)))    #Don't take the same nodes two times
+ 	md.diagnostic.spcvx[pos]=md.results.DiagnosticSolution.Vx[pos]
+ 	md.diagnostic.spcvy[pos]=md.results.DiagnosticSolution.Vy[pos]
+-	md=setflowequation(md,'stokes','all')
++	md=setflowequation(md,'FS','all')
+ 	md=solve(md,DiagnosticSolutionEnum())
+ 
+ 	#Plot the results and save them
+Index: ../trunk-jpl/test/NightlyRun/test1302.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1302.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1302.m	(revision 15565)
+@@ -8,7 +8,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+ md=extrude(md,30,1.);   %NB: the more one extrudes, the better (10-> relative~0.35%, 20->0.1%, 30->0.05%)
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ %Thermal boundary conditions
+ pos1=find(md.mesh.elementonbed);     md.thermal.spctemperature(md.mesh.elements(pos1,1:3))=10.;
+Index: ../trunk-jpl/test/NightlyRun/test1204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1204.m	(revision 15565)
+@@ -6,7 +6,7 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+-md=setflowequation(md,'macayeal','all'); %MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all'); %MacAyeal's model and 2d
+ 
+ %Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=find(md.mesh.y==max(md.mesh.y));
+Index: ../trunk-jpl/test/NightlyRun/test1106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1106.m	(revision 15565)
+@@ -36,7 +36,7 @@
+ 		md.diagnostic.spcvy(pos)=-1.27;
+ 	end
+ 
+-	md=setflowequation(md,'stokes','all');
++	md=setflowequation(md,'FS','all');
+ 
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+Index: ../trunk-jpl/test/NightlyRun/tmp332.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/tmp332.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/tmp332.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',2);
+ md.hydrology=(hydrologydc);
+ md.initialization.sediment_head=0.0*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test221.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test221.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(2,1.)
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal')
++md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.viscosity_overshoot=0
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test302.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test302.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test302.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'hutter','all')
++md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test110.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test110.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.requested_outputs=IceVolumeEnum();
+ 
+Index: ../trunk-jpl/test/NightlyRun/test114.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test114.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test114.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BedSlopeSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test611.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test611.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.nsteps=2
+Index: ../trunk-jpl/test/NightlyRun/test504.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test504.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test423.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test423.py	(revision 15565)
+@@ -25,7 +25,7 @@
+ flags[pos]=1
+ md=setmask(md,flags,'') 
+ md=parameterize(md,'../Par/RoundSheetShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md.transient.isthermal=False
+Index: ../trunk-jpl/test/NightlyRun/test510.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test510.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,2,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+ md=solve(md,SteadystateSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test316.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test316.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test316.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test412.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test412.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test412.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',300000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ %partitioning
+Index: ../trunk-jpl/test/NightlyRun/test331.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test331.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test331.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.watercolumn=10^-3*ones(md.mesh.numberofvertices,1);
+ md.hydrology.spcwatercolumn=NaN*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test209.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test209.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test233.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test233.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5.; 1. 2.];
+ md.timestepping.time_step=0.5;
+Index: ../trunk-jpl/test/NightlyRun/test314.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test314.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test314.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'hutter','all');
++md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=meshprocessrifts(md,'../Exp/Square.exp');
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf2.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ %rift settings
+Index: ../trunk-jpl/test/NightlyRun/test118.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test118.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test118.m	(revision 15565)
+@@ -4,7 +4,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md.balancethickness.stabilization=3;
+ md.initialization.vy=md.initialization.vy+400;
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1103.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1103.py	(revision 15565)
+@@ -31,7 +31,7 @@
+ 	md=parameterize(md,'../Par/ISMIPB.py')
+ 	md.extrude(10,1.)
+ 
+-	md=setflowequation(md,'pattyn','all')
++	md=setflowequation(md,'HO','all')
+ 
+ 	#Create dirichlet on the bed only
+ 	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+@@ -67,14 +67,14 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipbpattynvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipbpattynvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
++#		printmodel(['ismipbHOvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipbHOvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
+ #	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km')
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipbpattynvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipbpattynvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
++#		printmodel(['ismipbHOvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipbHOvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
+ 
+ 	if   (L==5000.):
+ 		pass
+@@ -103,22 +103,22 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipbpattynvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipbpattynvxsec%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
++#		printmodel(['ismipbHOvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipbHOvxsec%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
+ 
+ #Now plot the min and max values of vx for each size of the square
+ #plot([5 10 20 40 80 160],minvx);ylim([0 14]);xlim([0 160])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipbpattynminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipbpattynminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
++#	printmodel('ismipbHOminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipbHOminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
+ #plot([5 10 20 40 80 160],maxvx);ylim([0 120]);xlim([0 160])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipbpattynmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipbpattynmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
++#	printmodel('ismipbHOmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipbHOmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestB')
+ 
+ #Fields and tolerances to track changes
+ field_names     =[\
+Index: ../trunk-jpl/test/NightlyRun/test3006.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3006.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=meshconvert(md)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.prognostic.stabilization=3
+ md.prognostic.spcthickness=md.geometry.thickness
+Index: ../trunk-jpl/test/NightlyRun/test230.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test230.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test230.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md.timestepping.time_step=1.
+Index: ../trunk-jpl/test/NightlyRun/test311.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test311.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.extrude(5,0.5)
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test204.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test102.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test513.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test513.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ # control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test432.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test432.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+ md.thermal.isenthalpy=1
+Index: ../trunk-jpl/test/NightlyRun/test270.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test270.py	(revision 15565)
+@@ -17,7 +17,7 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test406.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test406.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(4,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+ md=solve(md,ThermalSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test325.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test325.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0.
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/NightlyRun/test502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test502.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,0.9);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn');
++md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test323.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test323.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1;
+ md.timestepping.final_time=600.;
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 15565)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test306.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test306.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,4,2.);
+-md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal');
++md=setflowequation(md,'SIA','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test608.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test608.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test608.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BalancethicknessSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test208.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test208.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test608.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test608.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test608.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test429.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test429.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.diagnostic.isnewton=1;
+ md.diagnostic.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+ md.toolkits.DefaultAnalysis=issmsolver()
+Index: ../trunk-jpl/test/NightlyRun/test1502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1502.py	(revision 15565)
+@@ -14,7 +14,7 @@
+ md=triangle(model(),'../Exp/Square.exp',450000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.extrude(3,1.)
+ md.cluster=generic('name',oshostname(),'np',2)
+ md.transient.isthermal=False
+Index: ../trunk-jpl/test/NightlyRun/test3015.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3015.py	(revision 15565)
+@@ -19,7 +19,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.prognostic.requested_outputs=IceVolumeEnum()
+ md.verbose=verbose('autodiff',True)
+Index: ../trunk-jpl/test/NightlyRun/test1207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1207.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1207.py	(revision 15565)
+@@ -31,7 +31,7 @@
+ 
+ #We extrude the model to have a 3d model
+ md.extrude(numlayers,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ 
+ #Spc the nodes on the bed
+ pos=numpy.nonzero(md.mesh.vertexonbed)
+@@ -93,8 +93,8 @@
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('stokesstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
+-#	system(['mv stokesstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
++#	printmodel('FSstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
++#	system(['mv FSstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
+ 
+ #Fields and tolerances to track changes
+ field_names     =[ \
+Index: ../trunk-jpl/test/NightlyRun/test3021.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3021.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3021.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=false;
+Index: ../trunk-jpl/test/NightlyRun/test1303.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1303.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1303.m	(revision 15565)
+@@ -9,7 +9,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+ md=extrude(md,11,2.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ pos1=find(md.mesh.elementonbed);     md.thermal.spctemperature(md.mesh.elements(pos1,1:3))=10.;
+ pos2=find(md.mesh.elementonsurface); md.thermal.spctemperature(md.mesh.elements(pos2,4:6))=0.;
+Index: ../trunk-jpl/test/NightlyRun/test3004.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3004.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+Index: ../trunk-jpl/test/NightlyRun/test1205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1205.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1205.m	(revision 15565)
+@@ -18,7 +18,7 @@
+ 
+ %We extrude the model to have a 3d model
+ md=extrude(md,numlayers,1.);
+-md=setflowequation(md,'hutter','all');
++md=setflowequation(md,'SIA','all');
+ 
+ %Spc the nodes on the bed
+ pos=find(md.mesh.vertexonbed);
+@@ -82,8 +82,8 @@
+ 
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('hutterstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
+-	system(['mv hutterstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
++	printmodel('SIAstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
++	system(['mv SIAstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
+ end
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test1107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1107.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1107.m	(revision 15565)
+@@ -17,7 +17,7 @@
+ 	md=parameterize(md,'../Par/ISMIPD.par');
+ 	md=extrude(md,10,1.);
+ 
+-	md=setflowequation(md,'pattyn','all');
++	md=setflowequation(md,'HO','all');
+ 
+ 	%We need one grd on dirichlet: the 4 corners are set to zero
+ 	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -71,14 +71,14 @@
+ 	plotmodel(md,'data',vx,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',2)
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipdpattynvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipdpattynvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
++		printmodel(['ismipdHOvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipdHOvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
+ 	end
+ 	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',3)
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipdpattynvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipdpattynvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
++		printmodel(['ismipdHOvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipdHOvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
+ 	end
+ 
+ 	if(L==5000.),
+@@ -102,8 +102,8 @@
+ 	end
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipdpattynvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipdpattynvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
++		printmodel(['ismipdHOvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipdHOvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
+ 	end
+ end
+ 
+@@ -111,14 +111,14 @@
+ plot([5 10 20 40 80 160],minvx);ylim([2 18]);xlim([0 160])
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('ismipdpattynminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipdpattynminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
++	printmodel('ismipdHOminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipdHOminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
+ end
+ plot([5 10 20 40 80 160],maxvx);ylim([0 300]);xlim([0 160])
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('ismipdpattynmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipdpattynmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
++	printmodel('ismipdHOmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipdHOmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestD']);
+ end
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test401.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test401.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test320.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test320.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ 
+ # control parameters
+Index: ../trunk-jpl/test/NightlyRun/test106.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test106.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test106.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=meshconvert(md)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.prognostic.stabilization=3
+ md.prognostic.spcthickness=md.geometry.thickness
+Index: ../trunk-jpl/test/NightlyRun/test111.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test111.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.requested_outputs=IceVolumeEnum();
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test603.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test603.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+ md.extrude(6,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test415.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test415.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 15565)
+@@ -6,7 +6,7 @@
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md=extract(md,md.mask.elementonfloatingice);
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.diagnostic.isnewton=1;
+ md.diagnostic.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test227.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test227.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1.
+ md.timestepping.final_time=10.
+Index: ../trunk-jpl/test/NightlyRun/test308.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test308.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test413.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test413.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test413.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ %Dakota options
+Index: ../trunk-jpl/test/NightlyRun/test332.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test332.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test332.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.hydrology=(hydrologydc);
+ md.hydrology.isefficientlayer=0;
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.timestepping.time_step=1;
+Index: ../trunk-jpl/test/NightlyRun/test315.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test315.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,1.2);
+-md=setflowequation(md,'hutter','all');
++md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test217.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test217.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ %redo the parameter file for this special shelf. 
+Index: ../trunk-jpl/test/NightlyRun/test429.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test429.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.diagnostic.isnewton=1
+ md.diagnostic.restol=0.0001
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test3010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3010.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.transient.requested_outputs=IceVolumeEnum()
+Index: ../trunk-jpl/test/NightlyRun/test1202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1202.py	(revision 15565)
+@@ -19,7 +19,7 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareEISMINT.py')
+-md=setflowequation(md,'macayeal','all')    #MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all')    #MacAyeal's model and 2d
+ 
+ #Compute solution for MacAyeal's model 
+ md.cluster=generic('name',oshostname(),'np',8)
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test410.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test410.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0
+ md=solve(md,SteadystateSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test222.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test222.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test222.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.prognostic.hydrostatic_adjustment='Incremental'
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test303.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test303.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test303.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal')
++md=setflowequation(md,'SIA','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('all');
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test115.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test115.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test115.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BedSlopeSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test103.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum();
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test612.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test612.py	(revision 15565)
+@@ -13,7 +13,7 @@
+ md=meshconvert(md)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.nsteps=2
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.initialization.vx[:]=0.
+ md.initialization.vy[:]=0.
+ md.geometry.bed=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
+Index: ../trunk-jpl/test/NightlyRun/test601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test601.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test317.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test317.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test317.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test236.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test236.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test236.py	(revision 15565)
+@@ -56,7 +56,7 @@
+ md.timestepping.final_time=60.
+ 
+ # 
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test503.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test503.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,0.9);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal');
++md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.reltol=0.4;
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test405.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test405.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties');
++md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test324.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test324.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,1.2);
+-md=setflowequation(md,'hutter','all');
++md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1;
+ md.timestepping.final_time=500.;
+Index: ../trunk-jpl/test/NightlyRun/test226.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test226.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1.;
+ md.timestepping.final_time=10.;
+Index: ../trunk-jpl/test/NightlyRun/test307.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test307.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test209.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test209.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test609.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test609.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test609.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.balancethickness.stabilization=3;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1104.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1104.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1104.py	(revision 15565)
+@@ -25,7 +25,7 @@
+ 	md=setmask(md,'','')    #ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPB.py')
+ 	md.extrude(10,1.)
+-	md=setflowequation(md,'pattyn','all')
++	md=setflowequation(md,'HO','all')
+ 
+ 	#Create dirichlet on the bed only
+ 	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+@@ -53,7 +53,7 @@
+ 	md.diagnostic.spcvx[pos]=md.results.DiagnosticSolution.Vx[pos]
+ 	md.diagnostic.spcvy[pos]=md.results.DiagnosticSolution.Vy[pos]
+ 	md.diagnostic.vertex_pairing=numpy.empty((0,2),int)
+-	md=setflowequation(md,'stokes','all')
++	md=setflowequation(md,'FS','all')
+ 	md=solve(md,DiagnosticSolutionEnum())
+ 
+ 	#Plot the results and save them
+Index: ../trunk-jpl/test/NightlyRun/test1601.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1601.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.diagnostic.spcvx[numpy.nonzero(md.mesh.y>0.)]=float('NaN')
+ md.initialization.vx[:]=0.
+ md.initialization.vy[:]=0.
+Index: ../trunk-jpl/test/NightlyRun/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3007.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.extrude(5,3.)
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmsolver()
+Index: ../trunk-jpl/test/NightlyRun/test1304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1304.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1304.m	(revision 15565)
+@@ -9,7 +9,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+ md=extrude(md,11,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ pos2=find(md.mesh.elementonsurface); md.thermal.spctemperature(md.mesh.elements(pos2,4:6))=0.;
+ md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test3005.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3005.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+Index: ../trunk-jpl/test/NightlyRun/test1206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1206.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1206.m	(revision 15565)
+@@ -18,7 +18,7 @@
+ 
+ %We extrude the model to have a 3d model
+ md=extrude(md,numlayers,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ %Spc the nodes on the bed
+ pos=find(md.mesh.vertexonbed);
+@@ -81,8 +81,8 @@
+ 
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('pattynstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
+-	system(['mv pattynstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
++	printmodel('HOstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
++	system(['mv HOstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
+ end
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test1108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1108.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1108.m	(revision 15565)
+@@ -14,7 +14,7 @@
+ 	md=parameterize(md,'../Par/ISMIPD.par');
+ 	md=extrude(md,10,1.);
+ 
+-	md=setflowequation(md,'pattyn','all');
++	md=setflowequation(md,'HO','all');
+ 
+ 	%We need one grid on dirichlet: the 4 corners are set to zero
+ 	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -49,7 +49,7 @@
+ 	pos=find(md.mesh.y==0. | md.mesh.x==0. | md.mesh.x==max(md.mesh.x) | md.mesh.y==max(md.mesh.y)); %Don't take the same nodes two times
+ 	md.diagnostic.spcvx(pos)=md.results.DiagnosticSolution.Vx(pos);
+ 	md.diagnostic.spcvy(pos)=md.results.DiagnosticSolution.Vy(pos);
+-	md=setflowequation(md,'stokes','all');
++	md=setflowequation(md,'FS','all');
+ 	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+Index: ../trunk-jpl/test/NightlyRun/test110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test110.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test110.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.requested_outputs=IceVolumeEnum()
+ 
+Index: ../trunk-jpl/test/NightlyRun/test231.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test231.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test231.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md.timestepping.time_step=1.
+Index: ../trunk-jpl/test/NightlyRun/test312.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test312.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0.
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,ThermalSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test205.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal','coupling','penalties')
++md=setflowequation(md,'HO','../Exp/SquareHalfRight.exp','fill','SSA','coupling','penalties')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test210.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test210.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test112.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test112.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test112.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,SurfaceSlopeSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test433.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test433.py	(revision 15565)
+@@ -25,7 +25,7 @@
+ flags[pos]=1
+ md=setmask(md,flags,'') 
+ md=parameterize(md,'../Par/RoundSheetShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.extrude(3,1.)
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test610.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test610.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test407.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test407.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(4,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=False
+ md.transient.isprognostic=False
+Index: ../trunk-jpl/test/NightlyRun/test326.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test326.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.transient.isdiagnostic=False
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test431.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test431.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+ md.thermal.isenthalpy=1;
+Index: ../trunk-jpl/test/NightlyRun/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test219.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal')
++md=setflowequation(md,'HO','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test414.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test414.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test414.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.materials.rho_ice=10^7; %involved in the mass flux, make it easy
+ md.geometry.thickness(:)=1; %make it easy
+Index: ../trunk-jpl/test/NightlyRun/test333.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test333.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test333.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.hydrology=(hydrologydc);
+ md.hydrology.isefficientlayer=1;
+Index: ../trunk-jpl/test/NightlyRun/test316.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test316.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test316.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test235.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test235.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test235.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.timestepping.time_step=1;
+Index: ../trunk-jpl/test/NightlyRun/test609.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test609.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test609.py	(revision 15565)
+@@ -13,7 +13,7 @@
+ md=meshconvert(md)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.balancethickness.stabilization=3
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BalancethicknessSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test218.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test218.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test218.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=squaremesh(model(),1000000,1000000,5,5);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf2.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ %redo the parameter file for this special shelf. 
+Index: ../trunk-jpl/test/NightlyRun/test1301.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1301.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1301.py	(revision 15565)
+@@ -23,7 +23,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareThermal.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ #Some conditions specific to melting test
+ md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1),int)
+Index: ../trunk-jpl/test/NightlyRun/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3002.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.autodiff.isautodiff=True
+ md.toolkits.DefaultAnalysis=issmsolver()
+Index: ../trunk-jpl/test/NightlyRun/test1208.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1208.py	(revision 15565)
+@@ -22,7 +22,7 @@
+ 
+ #We extrude the model to have a 3d model
+ md.extrude(numlayers,1.)
+-md=setflowequation(md,'hutter','all')
++md=setflowequation(md,'SIA','all')
+ 
+ #Spc the nodes on the bed
+ pos=numpy.nonzero(md.mesh.vertexonbed)
+Index: ../trunk-jpl/test/NightlyRun/test402.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test402.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(4,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test321.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test321.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ 
+ # control parameters
+Index: ../trunk-jpl/test/NightlyRun/test107.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test107.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.extrude(5,3.)
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test202.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test280.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test280.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.flowequation.fe_ssa=1
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test604.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test604.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test604.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,SurfaceSlopeSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test416.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test416.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test309.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test309.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test309.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test228.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test228.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test228.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md.timestepping.time_step=1.
+Index: ../trunk-jpl/test/NightlyRun/test602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test602.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.prognostic.stabilization=3;
+ md.prognostic.spcthickness=md.geometry.thickness;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 15565)
+@@ -14,7 +14,7 @@
+ flags(pos)=1;
+ md=setmask(md,flags,''); 
+ md=parameterize(md,'../Par/RoundSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.transient.isthermal=0;
+Index: ../trunk-jpl/test/NightlyRun/test504.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test504.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test325.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test325.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.timestepping.time_step=0.;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test406.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test406.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+ md=solve(md,ThermalSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test308.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test308.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test227.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test227.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1.;
+ md.timestepping.final_time=10.;
+Index: ../trunk-jpl/test/NightlyRun/test1203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1203.py	(revision 15565)
+@@ -20,7 +20,7 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',5100.)    #test3
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareEISMINT.py')
+-md=setflowequation(md,'macayeal','all')    #MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all')    #MacAyeal's model and 2d
+ 
+ #Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=numpy.nonzero(md.mesh.y==numpy.max(md.mesh.y))
+Index: ../trunk-jpl/test/NightlyRun/test1101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1101.m	(revision 15565)
+@@ -17,7 +17,7 @@
+ 	md=parameterize(md,'../Par/ISMIPA.par');
+ 	md=extrude(md,9,1.);
+ 
+-	md=setflowequation(md,'pattyn','all');
++	md=setflowequation(md,'HO','all');
+ 
+ 	%Create dirichlet on the bed only
+ 	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -53,20 +53,20 @@
+ 	plotmodel(md,'data',vx,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km')
+ 	if printingflag, 
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipapattynvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipapattynvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++		printmodel(['ismipaHOvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipaHOvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ 	end
+ 	plotmodel(md,'data',vy,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km')
+ 	if printingflag, 
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipapattynvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipapattynvy' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++		printmodel(['ismipaHOvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipaHOvy' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ 	end
+ 	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km')
+ 	if printingflag, 
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipapattynvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipapattynvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++		printmodel(['ismipaHOvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipaHOvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ 	end
+ 
+ 	if(L==5000.),
+@@ -90,8 +90,8 @@
+ 	end
+ 	if printingflag, 
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipapattynvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipapattynvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++		printmodel(['ismipaHOvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipaHOvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ 	end
+ end
+ 
+@@ -99,14 +99,14 @@
+ plot([5 10 20 40 80 160],minvx);ylim([0 18]);xlim([0 160])
+ if printingflag, 
+ 	set(gcf,'Color','w')
+-	printmodel('ismipapattynminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipapattynminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++	printmodel('ismipaHOminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipaHOminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ end
+ plot([5 10 20 40 80 160],maxvx);ylim([0 120]);xlim([0 160])
+ if printingflag, 
+ 	set(gcf,'Color','w')
+-	printmodel('ismipapattynmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipapattynmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++	printmodel('ismipaHOmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipaHOmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ end
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test1501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1501.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1501.m	(revision 15565)
+@@ -3,7 +3,7 @@
+ md=triangle(model(),'../Exp/Square.exp',350000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isthermal=0;
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3006.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3006.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=meshconvert(md);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.prognostic.stabilization=3;
+ md.prognostic.spcthickness=md.geometry.thickness;
+Index: ../trunk-jpl/test/NightlyRun/test1207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1207.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1207.m	(revision 15565)
+@@ -18,7 +18,7 @@
+ 
+ %We extrude the model to have a 3d model
+ md=extrude(md,numlayers,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ 
+ %Spc the nodes on the bed
+ pos=find(md.mesh.vertexonbed);
+@@ -81,8 +81,8 @@
+ 
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('stokesstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
+-	system(['mv stokesstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
++	printmodel('FSstatic','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off');
++	system(['mv FSstatic.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT/IceSheet']);
+ end
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test1109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1109.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1109.m	(revision 15565)
+@@ -19,9 +19,9 @@
+ 	md=extrude(md,10,1.);
+ 
+ 	if i==1 | i==3,
+-		md=setflowequation(md,'pattyn','all');
++		md=setflowequation(md,'HO','all');
+ 	elseif i==2 | i==4,
+-		md=setflowequation(md,'stokes','all');
++		md=setflowequation(md,'FS','all');
+ 	end
+ 
+ 	%Create MPCs to have periodic boundary conditions
+@@ -59,29 +59,29 @@
+ 		plotmodel(md,'data',vy,'ylim',[-10 80],'layer',md.mesh.numberoflayers,'sectionvalue','../Exp/ISMIPE.exp','resolution',[10 10],'title','','xlabel','')
+ 		if printingflag,
+ 			set(gcf,'Color','w')
+-			printmodel('ismipepattynvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipepattynvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestE']);
++			printmodel('ismipeHOvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipeHOvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestE']);
+ 		end
+ 	elseif i==2,
+ 		plotmodel(md,'data',vy,'ylim',[-10 80],'layer',md.mesh.numberoflayers,'sectionvalue','../Exp/ISMIPE.exp','resolution',[10 10],'title','','xlabel','')
+ 		if printingflag,
+ 			set(gcf,'Color','w')
+-			printmodel('ismipestokesvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipestokesvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestE']);
++			printmodel('ismipeFSvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipeFSvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestE']);
+ 		end
+ 	elseif i==3,
+ 		plotmodel(md,'data',vy,'ylim',[-50 200],'layer',md.mesh.numberoflayers,'sectionvalue','../Exp/ISMIPE.exp','resolution',[10 10],'title','','xlabel','')
+ 		if printingflag,
+ 			set(gcf,'Color','w')
+-			printmodel('ismipepattynvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipepattynvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestE']);
++			printmodel('ismipeHOvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipeHOvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestE']);
+ 		end
+ 	elseif i==4,
+ 		plotmodel(md,'data',vy,'ylim',[-50 200],'layer',md.mesh.numberoflayers,'sectionvalue','../Exp/ISMIPE.exp','resolution',[10 10],'title','','xlabel','')
+ 		if printingflag,
+ 			set(gcf,'Color','w')
+-			printmodel('ismipestokesvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipestokesvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestE']);
++			printmodel('ismipeFSvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipeFSvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestE']);
+ 		end
+ 	end
+ end
+Index: ../trunk-jpl/test/NightlyRun/test102.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test102.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test411.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test411.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0
+ md=solve(md,SteadystateSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test304.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test304.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test223.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test223.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.geometry.bed=md.geometry.bed+50.
+ md.geometry.surface=md.geometry.surface+50.
+ md.cluster=generic('name',oshostname(),'np',1)
+Index: ../trunk-jpl/test/NightlyRun/test211.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test211.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.diagnostic.reltol=NaN;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test116.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test116.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test116.py	(revision 15565)
+@@ -14,7 +14,7 @@
+ #Add boundary conditions on thickness on the border
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.balancethickness.spcthickness[pos]=md.geometry.thickness[pos]
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BalancethicknessSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test113.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test113.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test113.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,SurfaceSlopeSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test613.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test613.py	(revision 15565)
+@@ -14,7 +14,7 @@
+ md=meshconvert(md)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ #Ice sheet only
+ md=md.extract(md.mask.elementongroundedice)
+Index: ../trunk-jpl/test/NightlyRun/test425.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test425.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.initialization.vx[:]=0.
+ md.initialization.vy[:]=0.
+ md.geometry.bed=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(2,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test237.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test237.py	(revision 15565)
+@@ -58,7 +58,7 @@
+ 
+ #
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test318.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test318.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(4,1.)
+-md=setflowequation(md,'hutter','all')
++md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0
+ md=solve(md,SteadystateSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test611.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test611.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.nsteps=2;
+Index: ../trunk-jpl/test/NightlyRun/test270.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test270.m	(revision 15565)
+@@ -5,7 +5,7 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test432.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test432.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+ md.thermal.isenthalpy=1;
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test236.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test236.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test236.m	(revision 15565)
+@@ -45,7 +45,7 @@
+ md.timestepping.final_time=60;
+ 
+ % 
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test317.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test317.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test317.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test219.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test219.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal');
++md=setflowequation(md,'HO','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3020.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3020.py	(revision 15565)
+@@ -19,7 +19,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.transient.requested_outputs=[IceVolumeEnum(),MaxVelEnum()]
+ md.verbose=verbose('autodiff',True)
+Index: ../trunk-jpl/test/NightlyRun/test1110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1110.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1110.m	(revision 15565)
+@@ -15,9 +15,9 @@
+ 	md=extrude(md,4,1.);
+ 
+ 	if (i==1 | i==2),
+-		md=setflowequation(md,'pattyn','all');
++		md=setflowequation(md,'HO','all');
+ 	else
+-		md=setflowequation(md,'stokes','all');
++		md=setflowequation(md,'FS','all');
+ 	end
+ 
+ 	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -71,17 +71,17 @@
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+ 		if i==1,
+-			printmodel('ismipfpattynvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipfpattynvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
++			printmodel('ismipfHOvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipfHOvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
+ 		elseif i==2,
+-			printmodel('ismipfpattynvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipfpattynvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
++			printmodel('ismipfHOvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipfHOvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
+ 		elseif i==3,
+-			printmodel('ismipfstokesvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipfstokesvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
++			printmodel('ismipfFSvxfrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipfFSvxfrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
+ 		elseif i==4,
+-			printmodel('ismipfstokesvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipfstokesvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
++			printmodel('ismipfFSvxsliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipfFSvxsliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
+ 		end
+ 	end
+ 
+@@ -89,17 +89,17 @@
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+ 		if i==1,
+-			printmodel('ismipfpattyndeltasurfacefrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipfpattyndeltasurfacefrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
++			printmodel('ismipfHOdeltasurfacefrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipfHOdeltasurfacefrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
+ 		elseif i==2,
+-			printmodel('ismipfpattyndeltasurfacesliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipfpattyndeltasurfacesliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
++			printmodel('ismipfHOdeltasurfacesliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipfHOdeltasurfacesliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
+ 		elseif i==3,
+-			printmodel('ismipfstokesdeltasurfacefrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipfstokesdeltasurfacefrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
++			printmodel('ismipfFSdeltasurfacefrozen','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipfFSdeltasurfacefrozen.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
+ 		elseif i==4,
+-			printmodel('ismipfstokesdeltasurfacesliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-			system(['mv ismipfstokesdeltasurfacesliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
++			printmodel('ismipfFSdeltasurfacesliding','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++			system(['mv ismipfFSdeltasurfacesliding.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestF']);
+ 		end
+ 	end
+ end
+Index: ../trunk-jpl/test/NightlyRun/test1105.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1105.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1105.py	(revision 15565)
+@@ -31,7 +31,7 @@
+ 	md=parameterize(md,'../Par/ISMIPC.py')
+ 	md.extrude(10,1.)
+ 
+-	md=setflowequation(md,'pattyn','all')
++	md=setflowequation(md,'HO','all')
+ 
+ 	#Create MPCs to have periodic boundary conditions
+ 	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+@@ -90,20 +90,20 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipcpattynvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipcpattynvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
++#		printmodel(['ismipcHOvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipcHOvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
+ #	plotmodel(md,'data',vy,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',3)
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipcpattynvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipcpattynvy%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
++#		printmodel(['ismipcHOvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipcHOvy%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
+ #	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',4)
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipcpattynvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipcpattynvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
++#		printmodel(['ismipcHOvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipcHOvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
+ 
+ 	if   (L==5000.):
+ 		pass
+@@ -132,22 +132,22 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipcpattynvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipcpattynvxsec%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
++#		printmodel(['ismipcHOvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipcHOvxsec%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
+ 
+ #Now plot the min and max values of vx for each size of the square
+ #plot([5 10 20 40 80 160],minvx);ylim([4 18]);xlim([0 160])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipcpattynminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipcpattynminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
++#	printmodel('ismipcHOminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipcHOminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
+ #plot([5 10 20 40 80 160],maxvx);ylim([0 200]); xlim([0 160])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipcpattynmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipcpattynmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
++#	printmodel('ismipcHOmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipcHOmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestC')
+ 
+ #Fields and tolerances to track changes
+ field_names     =[\
+Index: ../trunk-jpl/test/NightlyRun/test1602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1602.py	(revision 15565)
+@@ -13,7 +13,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.diagnostic.spcvx[numpy.nonzero(md.mesh.y>0.)]=float('NaN')
+ md.initialization.vx[:]=0.
+ md.initialization.vy[:]=0.
+Index: ../trunk-jpl/test/NightlyRun/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3008.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmsolver()
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 15565)
+@@ -5,7 +5,7 @@
+ md=triangle(model(),'../Exp/Square.exp',50000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.prognostic.requested_outputs=IceVolumeEnum();
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test111.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test111.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.requested_outputs=IceVolumeEnum()
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15565)
+@@ -5,17 +5,17 @@
+ %      name=IdToName(id);
+ 
+ switch id,
+-	case 101, name='SquareShelfConstrainedDiagM2d';
+-	case 102, name='SquareShelfConstrainedDiagM3d';
+-	case 103, name='SquareShelfConstrainedDiagP3d';
++	case 101, name='SquareShelfConstrainedDiagSSA2d';
++	case 102, name='SquareShelfConstrainedDiagSSA3d';
++	case 103, name='SquareShelfConstrainedDiagHO';
+ 	case 104, name='SquareShelfConstrainedDiagS3d';
+ 	case 105, name='SquareShelfConstrainedProg2d';
+ 	case 106, name='SquareShelfConstrainedProg2dDG';
+ 	case 107, name='SquareShelfConstrainedProg3d';
+ 	case 108, name='SquareShelfConstrainedTherStea';
+ 	case 109, name='SquareShelfConstrainedTherTran';
+-	case 110, name='SquareShelfConstrainedTranM2d';
+-	case 111, name='SquareShelfConstrainedTranP3d';
++	case 110, name='SquareShelfConstrainedTranSSA2d';
++	case 111, name='SquareShelfConstrainedTranHO';
+ 	case 112, name='SquareShelfConstrainedSurfSlop2d';
+ 	case 113, name='SquareShelfConstrainedSurfSlope3d';
+ 	case 114, name='SquareShelfConstrainedBedSlop2d';
+@@ -26,127 +26,127 @@
+ 	case 119, name='SquareBamgMesh';
+ 	case 120, name='SquareShelfConstrainedEnthalpyStea';
+ 	case 121, name='SquareShelfConstrainedEnthalpyTran';
+-	case 122, name='SquareShelfConstrainedTransP3dEnth';
+-	case 201, name='SquareShelfDiagM2d';
+-	case 202, name='SquareShelfDiagM3d';
+-	case 203, name='SquareShelfDiagP3d';
++	case 122, name='SquareShelfConstrainedTransHOEnth';
++	case 201, name='SquareShelfDiagSSA2d';
++	case 202, name='SquareShelfDiagSSA3d';
++	case 203, name='SquareShelfDiagHO';
+ 	case 204, name='SquareShelfDiagS3d';
+-	case 205, name='SquareShelfDiagMP3dPenalties';
++	case 205, name='SquareShelfDiagMHOPenalties';
+ 	case 206, name='SquareShelfTherStea';
+ 	case 207, name='SquareShelfTherTran';
+-	case 208, name='SquareShelfTranM2d';
+-	case 209, name='SquareShelfTranM3d';
+-	case 210, name='SquareShelfTranP3d';
++	case 208, name='SquareShelfTranSSA2d';
++	case 209, name='SquareShelfTranSSA3d';
++	case 210, name='SquareShelfTranHO';
+ 	case 211, name='SquareShelfTranS3d';
+-	case 212, name='SquareShelfCMBM2d';
+-	case 213, name='SquareShelfCMBM3d';
+-	case 214, name='SquareShelfCMBP3d';
++	case 212, name='SquareShelfCMBSSA2d';
++	case 213, name='SquareShelfCMBSSA3d';
++	case 214, name='SquareShelfCMBHO';
+ 	case 215, name='SquareShelfCMBS3d';
+-	case 216, name='SquareShelfDiagM2dRift';
++	case 216, name='SquareShelfDiagSSA2dRift';
+ 	case 217, name='SquareShelfConstrained';
+ 	case 218, name='SquareShelfConstrainedDakotaB';
+-	case 219, name='SquareShelfDiagMP3dTiling';
++	case 219, name='SquareShelfDiagMHOTiling';
+ 	case 220, name='SquareShelfDiagPS3dTiling';
+ 	case 221, name='SquareShelfDiagMS3dTiling';
+-	case 222, name='SquareShelfDiagM2dTransientIncrHydro';
+-	case 223, name='SquareShelfDiagM2dTransientIncrNonHydro';
+-	case 224, name='SquareShelfDiagP3dTransientIncrHydro';
+-	case 225, name='SquareShelfDiagP3dTransientIncrNonHydro';
+-	case 226, name='SquareShelfTranCflM2d';
+-	case 227, name='SquareShelfTranCflP3d';
++	case 222, name='SquareShelfDiagSSA2dTransientIncrHydro';
++	case 223, name='SquareShelfDiagSSA2dTransientIncrNonHydro';
++	case 224, name='SquareShelfDiagHOTransientIncrHydro';
++	case 225, name='SquareShelfDiagHOTransientIncrNonHydro';
++	case 226, name='SquareShelfTranCflSSA2d';
++	case 227, name='SquareShelfTranCflHO';
+ 	case 228, name='SquareShelfTranForceNeg2d';
+ 	case 229, name='SquareShelfTranForcePos2d';
+ 	case 230, name='SquareShelfTranForceNeg3d';
+ 	case 231, name='SquareShelfTranForcePos3d';
+ 	case 232, name='SquareShelfTherTranForcTemp';
+-	case 233, name='SquareShelfTranP3dForcTemp';
++	case 233, name='SquareShelfTranHOForcTemp';
+ 	case 234, name='SquareShelfTranForceNeg2dDakotaSamp';
+ 	case 235, name='SquareShelfTranForceNeg2dDakotaLocal';
+-	case 236, name='SquareShelfTranIspddIsdeltaM2d';
+-	case 237, name='SquareShelfTranIspddIsdeltaM3d';
+-	case 270, name='SquareShelfDiagM2dDamage';
+-	case 272, name='SquareShelfCMZM2dDamage';
+-	case 274, name='SquareShelfDiagM2dDamageRift';
+-	case 280, name='SquareShelfDiagM2dP2';
+-	case 301, name='SquareSheetConstrainedDiagM2d';
+-	case 302, name='SquareSheetConstrainedDiagH2d';
+-	case 303, name='SquareSheetConstrainedDiagHM2d';
+-	case 304, name='SquareSheetConstrainedDiagM3d';
+-	case 305, name='SquareSheetConstrainedDiagH3d';
+-	case 306, name='SquareSheetConstrainedDiagHM3d';
+-	case 307, name='SquareSheetConstrainedDiagP3d';
++	case 236, name='SquareShelfTranIspddIsdeltaSSA2d';
++	case 237, name='SquareShelfTranIspddIsdeltaSSA3d';
++	case 270, name='SquareShelfDiagSSA2dDamage';
++	case 272, name='SquareShelfCMZSSA2dDamage';
++	case 274, name='SquareShelfDiagSSA2dDamageRift';
++	case 280, name='SquareShelfDiagSSA2dP2';
++	case 301, name='SquareSheetConstrainedDiagSSA2d';
++	case 302, name='SquareSheetConstrainedDiagSIA2d';
++	case 303, name='SquareSheetConstrainedDiagHSSA2d';
++	case 304, name='SquareSheetConstrainedDiagSSA3d';
++	case 305, name='SquareSheetConstrainedDiagSIA3d';
++	case 306, name='SquareSheetConstrainedDiagHSSA3d';
++	case 307, name='SquareSheetConstrainedDiagHO';
+ 	case 308, name='SquareSheetConstrainedDiagS3d';
+ 	case 309, name='SquareSheetConstrainedProg2d';
+ 	case 320, name='SquareSheetConstrainedProg2dDG';
+ 	case 311, name='SquareSheetConstrainedProg3d';
+ 	case 312, name='SquareSheetConstrainedTherStea';
+ 	case 313, name='SquareSheetConstrainedTherTran';
+-	case 314, name='SquareSheetConstrainedTranH2d';
+-	case 315, name='SquareSheetConstrainedTranH3d';
+-	case 316, name='SquareSheetConstrainedTranM2d';
+-	case 317, name='SquareSheetConstrainedTranP3d';
+-	case 318, name='SquareSheetConstrainedSteaH3d';
+-	case 319, name='SquareSheetConstrainedCMDragM2d';
+-	case 320, name='SquareSheetConstrainedCMDragM3d';
+-	case 321, name='SquareSheetConstrainedCMDragP3d';
++	case 314, name='SquareSheetConstrainedTranSIA2d';
++	case 315, name='SquareSheetConstrainedTranSIA3d';
++	case 316, name='SquareSheetConstrainedTranSSA2d';
++	case 317, name='SquareSheetConstrainedTranHO';
++	case 318, name='SquareSheetConstrainedSteaSIA3d';
++	case 319, name='SquareSheetConstrainedCMDragSSA2d';
++	case 320, name='SquareSheetConstrainedCMDragSSA3d';
++	case 321, name='SquareSheetConstrainedCMDragHO';
+ 	case 322, name='SquareSheetConstrainedCMDragS3d';
+-	case 323, name='SquareSheetConstrainedTranCflM2d';
+-	case 324, name='SquareSheetConstrainedTranCflH3d';
++	case 323, name='SquareSheetConstrainedTranCflSSA2d';
++	case 324, name='SquareSheetConstrainedTranCflSIA3d';
+ 	case 325, name='SquareSheetConstrainedEnthalpyStea';
+ 	case 326, name='SquareSheetConstrainedEnthalpyTran';
+-	case 327, name='SquareSheetConstrainedTransP3dEnth';
++	case 327, name='SquareSheetConstrainedTransHOEnth';
+ 	case 328, name='SquareSheetConstrainedSmbGradients2d';
+ 	case 329, name='SquareSheetConstrainedSmbGradients3d';
+ 	case 331, name='SquareSheetConstrainedHydrologyShreve';
+ 	case 332, name='SquareSheetConstrainedHydrologyDC';
+ 	case 333, name='SquareSheetHydrologyDCTwoLayers';
+-	case 401, name='SquareSheetShelfDiagM2d';
+-	case 402, name='SquareSheetShelfDiagM3d';
+-	case 403, name='SquareSheetShelfDiagP3d';
++	case 401, name='SquareSheetShelfDiagSSA2d';
++	case 402, name='SquareSheetShelfDiagSSA3d';
++	case 403, name='SquareSheetShelfDiagHO';
+ 	case 404, name='SquareSheetShelfDiagS3d';
+-	case 405, name='SquareSheetShelfDiagMP3dPenalties';
++	case 405, name='SquareSheetShelfDiagMHOPenalties';
+ 	case 406, name='SquareSheetShelfTherStea';
+ 	case 407, name='SquareSheetShelfTherTran';
+-	case 408, name='SquareSheetShelfTranM2d';
+-	case 409, name='SquareSheetShelfTranMP3dPenalties';
+-	case 410, name='SquareSheetShelfSteaM3d';
+-	case 411, name='SquareSheetShelfSteaP3d';
+-	case 412, name='SquareSheetShelfDiadM3dDakota';
+-	case 413, name='SquareSheetShelfDiadM3dDakotaPart';
+-	case 414, name='SquareSheetShelfDiadM3dDakotaMassFlux';
+-	case 415, name='SquareSheetShelfCMDragSteaM3d';
+-	case 416, name='SquareSheetShelfCMDragSteaP3d';
+-	case 417, name='SquareSheetShelfDiadM3dDakotaSamp';
+-	case 418, name='SquareSheetShelfDiadM3dDakotaAreaAverage';
+-	case 419, name='SquareSheetShelfDiagMP3dTiling';
++	case 408, name='SquareSheetShelfTranSSA2d';
++	case 409, name='SquareSheetShelfTranMHOPenalties';
++	case 410, name='SquareSheetShelfSteaSSA3d';
++	case 411, name='SquareSheetShelfSteaHO';
++	case 412, name='SquareSheetShelfDiadSSA3dDakota';
++	case 413, name='SquareSheetShelfDiadSSA3dDakotaPart';
++	case 414, name='SquareSheetShelfDiadSSA3dDakotaMassFlux';
++	case 415, name='SquareSheetShelfCMDragSteaSSA3d';
++	case 416, name='SquareSheetShelfCMDragSteaHO';
++	case 417, name='SquareSheetShelfDiadSSA3dDakotaSamp';
++	case 418, name='SquareSheetShelfDiadSSA3dDakotaAreaAverage';
++	case 419, name='SquareSheetShelfDiagMHOTiling';
+ 	case 420, name='SquareSheetShelfDakotaScaledResponse';
+ 	case 421, name='SquareSheetShelfDiagPS3dTiling';
+ 	case 422, name='SquareSheetShelfDiagMS3dTiling';
+-	case 423, name='RoundSheetShelfGLMigrationM2d';
+-	case 424, name='SquareSheetShelfGroundingLine2dAgressice';
++	case 423, name='RoundSheetShelfGLMigrationSSA2d';
++	case 424, name='SquareSheetShelfGroundingLine2dAgressive';
+ 	case 425, name='SquareSheetShelfGroundingLine2dSoft';
+-	case 426, name='SquareSheetShelfGroundingLine3dAgressice';
++	case 426, name='SquareSheetShelfGroundingLine3dAgressive';
+ 	case 427, name='SquareSheetShelfGroundingLine3dSoft';
+-	case 428, name='SquareSheetShelfDiagM2dNewton';
+-	case 429, name='SquareSheetShelfDiagP3dNewton';
++	case 428, name='SquareSheetShelfDiagSSA2dNewton';
++	case 429, name='SquareSheetShelfDiagHONewton';
+ 	case 430, name='SquareSheetShelfDiagS3dNewton';
+-	case 431, name='SquareSheetShelfSteaEnthalpyM3d';
+-	case 432, name='SquareSheetShelfSteaEnthalpyP3d';
+-	case 433, name='RoundSheetShelfGLMigrationM3d';
++	case 431, name='SquareSheetShelfSteaEnthalpySSA3d';
++	case 432, name='SquareSheetShelfSteaEnthalpyHO';
++	case 433, name='RoundSheetShelfGLMigrationSSA3d';
+ 	case 434, name='SquareSheetShelfL1L2';
+-	case 501, name='PigDiagM2d';
+-	case 502, name='PigDiagP3d';
++	case 501, name='PigDiagSSA2d';
++	case 502, name='PigDiagHO';
+ 	case 503, name='PigDiagS3d';
+-	case 504, name='PigTranM2d';
+-	case 505, name='PigTranM3d';
+-	case 506, name='PigTranP3d';
++	case 504, name='PigTranSSA2d';
++	case 505, name='PigTranSSA3d';
++	case 506, name='PigTranHO';
+ 	case 507, name='PigTranS3d';
+-	case 508, name='PigSteaM3d';
+-	case 509, name='PigSteaP3d';
++	case 508, name='PigSteaSSA3d';
++	case 509, name='PigSteaHO';
+ 	case 510, name='PigSteaS3d';
+ 	case 511, name='PigCMBS3d';
+-	case 512, name='PigCMDragP3d';
+-	case 513, name='PigCMDragSteaM3d';
++	case 512, name='PigCMDragHO';
++	case 513, name='PigCMDragSteaSSA3d';
+ 	case 514, name='PigBamgMesh';
+ 	case 515, name='PigTherTranSUPG';
+ 	case 516, name='PigTherSteaSUPG';
+@@ -162,24 +162,24 @@
+ 	case 610, name='79NorthBalThic3d';
+ 	case 611, name='79NorthCMBalThic2dCG';
+ 	case 612, name='79NorthCMBalThic2dDG';
+-	case 613, name='79NorthCMBalThicVxVyParalle';
+-	case 1101, name='ISMIPAPattyn';
+-	case 1102, name='ISMIPAStokes';
+-	case 1103, name='ISMIPBPattyn';
+-	case 1104, name='ISMIPBStokes';
+-	case 1105, name='ISMIPCPattyn';
+-	case 1106, name='ISMIPCStokes';
+-	case 1107, name='ISMIPDPattyn';
+-	case 1108, name='ISMIPDStokes';
++	case 613, name='79NorthCMBalThicVxVy';
++	case 1101, name='ISMIPAHO';
++	case 1102, name='ISMIPAFS';
++	case 1103, name='ISMIPBHO';
++	case 1104, name='ISMIPBFS';
++	case 1105, name='ISMIPCHO';
++	case 1106, name='ISMIPCFS';
++	case 1107, name='ISMIPDHO';
++	case 1108, name='ISMIPDFS';
+ 	case 1109, name='ISMIPE';
+ 	case 1110, name='ISMIPF';
+ 	case 1201, name='EISMINTMassConservation';
+ 	case 1202, name='EISMINTDiag1';
+ 	case 1203, name='EISMINTDiag2';
+ 	case 1204, name='EISMINTTran2';
+-	case 1205, name='EISMINTRoundIceSheetStaticHutter';
+-	case 1206, name='EISMINTRoundIceSheetStaticPattyn';
+-	case 1207, name='EISMINTRoundIceSheetStaticStokes';
++	case 1205, name='EISMINTRoundIceSheetStaticSIA';
++	case 1206, name='EISMINTRoundIceSheetStaticHO';
++	case 1207, name='EISMINTRoundIceSheetStaticFS';
+ 	case 1208, name='EISMINTA';
+ 	case 1301, name='ThermalMelting';
+ 	case 1302, name='ThermalAdvection';
+@@ -189,8 +189,8 @@
+ 	case 1402, name='AdaptiveMeshRefinement2';
+ 	case 1501, name='SquareShelfTranSawTooth2d';
+ 	case 1502, name='SquareShelfTranSawTooth3d';
+-	case 1601, name='SquareShelfM2dRotation';
+-	case 1602, name='SquareSheetShelfP3dRotation';
++	case 1601, name='SquareShelfSSA2dRotation';
++	case 1602, name='SquareSheetShelfHORotation';
+ 	case 2001, name='SquareSheetConstrainedGia2d';
+ 	case 2051, name='GiaBenchmarksAB2dA1';
+ 	case 2052, name='GiaBenchmarksAB2dA2';
+@@ -204,16 +204,16 @@
+ 	case 2081, name='GiaBenchmarksAB2dD1';
+ 	case 2082, name='GiaBenchmarksAB2dD2';
+ 	case 2083, name='GiaBenchmarksAB2dD3';
+-	case 3001, name='SquareShelfConstrainedDiagM2dAdolc';
+-	case 3002, name='SquareShelfConstrainedDiagM3dAdolc';
+-	case 3003, name='SquareShelfConstrainedDiagP3dAdolc';
++	case 3001, name='SquareShelfConstrainedDiagSSA2dAdolc';
++	case 3002, name='SquareShelfConstrainedDiagSSA3dAdolc';
++	case 3003, name='SquareShelfConstrainedDiagHOAdolc';
+ 	case 3004, name='SquareShelfConstrainedDiagS3dAdolc';
+ 	case 3005, name='SquareShelfConstrainedProg2dAdolc';
+ 	case 3006, name='SquareShelfConstrainedProg2dDGAdolc';
+ 	case 3007, name='SquareShelfConstrainedProg3dAdolc';
+ 	case 3008, name='SquareShelfConstrainedTherSteaAdolc';
+ 	case 3009, name='SquareShelfConstrainedTherTranAdolc';
+-	case 3010, name='SquareShelfConstrainedTranM2dAdolc';
++	case 3010, name='SquareShelfConstrainedTranSSA2dAdolc';
+ 	case 3015, name='SquareShelfConstrainedProg2dAdolcForwardDifference';
+ 	case 3019, name='SquareShelfConstrainedTherTranAdolcReverseVsForward';
+ 
+Index: ../trunk-jpl/test/NightlyRun/test501.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test501.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test313.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test313.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.verbose=verbose('convergence',True,'solution',True)
+ md.transient.isdiagnostic=False
+Index: ../trunk-jpl/test/NightlyRun/test232.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test232.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.thermal.spctemperature=numpy.vstack((numpy.hstack((md.thermal.spctemperature, md.thermal.spctemperature+5., md.thermal.spctemperature+10., md.thermal.spctemperature+15.)), [1.5,2.5,3.5,4.]))
+ md.timestepping.time_step=1.
+Index: ../trunk-jpl/test/NightlyRun/test301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test301.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test220.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test220.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,2,1.);
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn');
++md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test206.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,ThermalSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test122.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test122.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.thermal.isenthalpy=1;
+ md.thermal.stabilization=2;
+Index: ../trunk-jpl/test/NightlyRun/test203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test203.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test105.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test105.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 15565)
+@@ -17,7 +17,7 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test434.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test434.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(4,1.)
+-md=setflowequation(md,'l1l2','all')
++md=setflowequation(md,'L1L2','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test515.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test515.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.thermal.stabilization=2
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=False
+Index: ../trunk-jpl/test/NightlyRun/test327.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test327.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.initialization.temperature[:]=272.
+Index: ../trunk-jpl/test/NightlyRun/test408.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test408.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test603.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test603.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,6,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.initialization.vx(:)=0.;
+ md.initialization.vy(:)=0.;
+ md.geometry.bed=-700.-abs(md.mesh.y-500000.)/1000.;
+Index: ../trunk-jpl/test/NightlyRun/test505.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test505.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test326.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test326.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test407.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test407.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+ md.transient.isprognostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test309.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test309.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test309.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test228.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test228.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test228.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.timestepping.time_step=1.;
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+ md.toolkits.DefaultAnalysis=issmsolver()
+Index: ../trunk-jpl/test/NightlyRun/test1302.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1302.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1302.py	(revision 15565)
+@@ -22,7 +22,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareThermal.py')
+ md.extrude(30,1.)    #NB: the more one extrudes, the better (10-> relative~0.35%, 20->0.1%, 30->0.05%)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ #Thermal boundary conditions
+ pos1=numpy.nonzero(md.mesh.elementonbed)[0]
+Index: ../trunk-jpl/test/NightlyRun/test1102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1102.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1102.m	(revision 15565)
+@@ -24,7 +24,7 @@
+ 
+ 	md=parameterize(md,'../Par/ISMIPA.par');
+ 	md=extrude(md,10,1.);
+-	md=setflowequation(md,'stokes','all');
++	md=setflowequation(md,'FS','all');
+ 
+ 	%Create dirichlet on the bed only
+ 	pos=find(md.mesh.vertexonbed);
+@@ -63,20 +63,20 @@
+ 	plotmodel(md,'data',vx,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',2)
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipastokesvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipastokesvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++		printmodel(['ismipaFSvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipaFSvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ 	end
+ 	plotmodel(md,'data',vy,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',3)
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipastokesvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipastokesvy' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++		printmodel(['ismipaFSvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipaFSvy' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ 	end
+ 	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km','figure',4)
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipastokesvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipastokesvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++		printmodel(['ismipaFSvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipaFSvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ 	end
+ 
+ 	if(L==5000.),
+@@ -100,8 +100,8 @@
+ 	end
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipastokesvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipastokesvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++		printmodel(['ismipaFSvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipaFSvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ 	end
+ end
+ 
+@@ -109,14 +109,14 @@
+ plot([5 10 20 40 80 160],minvx);ylim([0 18])
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('ismipastokesminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipastokesminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++	printmodel('ismipaFSminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipaFSminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ end
+ plot([5 10 20 40 80 160],maxvx);ylim([0 120])
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('ismipastokesmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipastokesmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
++	printmodel('ismipaFSmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipaFSmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestA']);
+ end
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 15565)
+@@ -3,7 +3,7 @@
+ md=triangle(model(),'../Exp/Square.exp',450000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md=extrude(md,3,1.);
+ md.cluster=generic('name',oshostname(),'np',2);
+ md.transient.isthermal=0;
+Index: ../trunk-jpl/test/NightlyRun/test3007.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3007.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md=extrude(md,5,3.);
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/test1208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1208.m	(revision 15565)
+@@ -9,7 +9,7 @@
+ 
+ %We extrude the model to have a 3d model
+ md=extrude(md,numlayers,1.);
+-md=setflowequation(md,'hutter','all');
++md=setflowequation(md,'SIA','all');
+ 
+ %Spc the nodes on the bed
+ pos=find(md.mesh.vertexonbed);
+Index: ../trunk-jpl/test/NightlyRun/test120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test120.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros(md.mesh.numberofvertices)
+Index: ../trunk-jpl/test/NightlyRun/test201.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test201.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test510.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test510.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(2,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+ md=solve(md,SteadystateSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test322.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test322.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test403.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test403.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test310.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test310.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test310.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=meshconvert(md);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.prognostic.stabilization=3;
+ md.prognostic.spcthickness=md.geometry.thickness;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ 
+ 
+ # control parameters
+Index: ../trunk-jpl/test/NightlyRun/test212.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test212.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test108.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test108.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,ThermalSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test114.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test114.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test114.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BedSlopeSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test605.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test605.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+ md.extrude(5,1.5)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,SurfaceSlopeSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test229.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test229.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test229.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md.timestepping.time_step=1.
+Index: ../trunk-jpl/test/NightlyRun/test612.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test612.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.nsteps=2;
+Index: ../trunk-jpl/test/NightlyRun/test433.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test433.m	(revision 15565)
+@@ -14,7 +14,7 @@
+ flags(pos)=1;
+ md=setmask(md,flags,''); 
+ md=parameterize(md,'../Par/RoundSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md=extrude(md,3,1);
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test416.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test416.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test237.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test237.m	(revision 15565)
+@@ -47,7 +47,7 @@
+ 
+ %
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test318.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test318.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,4,1.);
+-md=setflowequation(md,'hutter','all');
++md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+ md=solve(md,SteadystateSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1204.py	(revision 15565)
+@@ -20,7 +20,7 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareEISMINT.py')
+-md=setflowequation(md,'macayeal','all')    #MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all')    #MacAyeal's model and 2d
+ 
+ #Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=numpy.nonzero(md.mesh.y==max(md.mesh.y))
+Index: ../trunk-jpl/test/NightlyRun/test210.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test210.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test103.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test331.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test331.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test331.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.watercolumn=1e-3*numpy.ones((md.mesh.numberofvertices,1))
+ md.hydrology.spcwatercolumn=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/NightlyRun/test305.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test305.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md.extrude(5,2.)
+-md=setflowequation(md,'hutter','all')
++md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test224.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test224.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.prognostic.hydrostatic_adjustment='Incremental'
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test302.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test302.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test302.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'hutter','all');
++md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,2,1.);
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal');
++md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.viscosity_overshoot=0;
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/ad_maxalloc.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.autodiff.isautodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/test117.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test117.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test117.py	(revision 15565)
+@@ -15,7 +15,7 @@
+ #Add boundary conditions on thickness on the border
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.balancethickness.spcthickness[pos]=md.geometry.thickness[pos]
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BalancethicknessSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+-md=setflowequation(md,'stokes','all');
++md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test106.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test106.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=meshconvert(md);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.stabilization=3;
+ md.prognostic.spcthickness=md.geometry.thickness;
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 15565)
+@@ -19,7 +19,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ md.surfaceforcings.mass_balance[:]=100.
+ md.extrude(3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.transient.isdiagnostic=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AgressiveMigration'
+Index: ../trunk-jpl/test/NightlyRun/test507.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test507.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(2,1.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test319.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test319.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test280.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test280.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.flowequation.fe_ssa=1;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test604.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test604.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test604.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,SurfaceSlopeSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test425.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test425.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.initialization.vx(:)=0.;
+ md.initialization.vy(:)=0.;
+ md.geometry.bed=-700.-abs(md.mesh.y-500000.)/1000.;
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,2,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test327.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test327.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.initialization.temperature(:)=272.;
+Index: ../trunk-jpl/test/NightlyRun/test408.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test408.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test229.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test229.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test229.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.timestepping.time_step=1.;
+Index: ../trunk-jpl/test/NightlyRun/test1106.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1106.py	(revision 15565)
+@@ -47,7 +47,7 @@
+ 		md.diagnostic.spcvx[pos]=16.03
+ 		md.diagnostic.spcvy[pos]=-1.27
+ 
+-	md=setflowequation(md,'stokes','all')
++	md=setflowequation(md,'FS','all')
+ 
+ 	#Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8)
+Index: ../trunk-jpl/test/NightlyRun/test1201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1201.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1201.m	(revision 15565)
+@@ -9,7 +9,7 @@
+ 	md=setmask(md,'all','');
+ 	md=parameterize(md,'../Par/SquareEISMINT.par');
+ 	md.surfaceforcings.mass_balance(:)=0.;
+-	md=setflowequation(md,'macayeal','all');
++	md=setflowequation(md,'SSA','all');
+ 	md.cluster=generic('name',oshostname(),'np',8);
+ 
+ 	disp('      initial velocity');
+Index: ../trunk-jpl/test/NightlyRun/test1103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1103.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1103.m	(revision 15565)
+@@ -17,7 +17,7 @@
+ 	md=parameterize(md,'../Par/ISMIPB.par');
+ 	md=extrude(md,10,1.);
+ 
+-	md=setflowequation(md,'pattyn','all');
++	md=setflowequation(md,'HO','all');
+ 
+ 	%Create dirichlet on the bed only
+ 	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -52,14 +52,14 @@
+ 	plotmodel(md,'data',vx,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km')
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipbpattynvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipbpattynvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
++		printmodel(['ismipbHOvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipbHOvx' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
+ 	end
+ 	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km')
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipbpattynvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipbpattynvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
++		printmodel(['ismipbHOvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipbHOvz' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
+ 	end
+ 
+ 	if(L==5000.),
+@@ -83,8 +83,8 @@
+ 	end
+ 	if printingflag,
+ 		set(gcf,'Color','w')
+-		printmodel(['ismipbpattynvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-		system(['mv ismipbpattynvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
++		printmodel(['ismipbHOvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++		system(['mv ismipbHOvxsec' num2str(L) '.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
+ 	end
+ end
+ 
+@@ -92,14 +92,14 @@
+ plot([5 10 20 40 80 160],minvx);ylim([0 14]);xlim([0 160])
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('ismipbpattynminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipbpattynminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
++	printmodel('ismipbHOminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipbHOminvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
+ end
+ plot([5 10 20 40 80 160],maxvx);ylim([0 120]);xlim([0 160])
+ if printingflag,
+ 	set(gcf,'Color','w')
+-	printmodel('ismipbpattynmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-	system(['mv ismipbpattynmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
++	printmodel('ismipbHOmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++	system(['mv ismipbHOmaxvx.png ' ISSM_DIR '/website/doc_pdf/validation/Images/ISMIP/TestB']);
+ end
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.transient.isdiagnostic=False
+ md.transient.isprognostic=False
+Index: ../trunk-jpl/test/NightlyRun/test1601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1601.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.diagnostic.spcvx(find(md.mesh.y>0.))=NaN;
+ md.initialization.vx(:)=0.;
+ md.initialization.vy(:)=0.;
+Index: ../trunk-jpl/test/NightlyRun/test3008.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3008.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15565)
+@@ -9,205 +9,220 @@
+ 	"""
+ 
+ 	idname={
+-		101 : 'SquareShelfConstrainedDiagM2d',
+-		102 : 'SquareShelfConstrainedDiagM3d',
+-		103 : 'SquareShelfConstrainedDiagP3d',
+-		104 : 'SquareShelfConstrainedDiagS3d',
+-		105 : 'SquareShelfConstrainedProg2d',
+-		106 : 'SquareShelfConstrainedProg2dDG',
+-		107 : 'SquareShelfConstrainedProg3d',
+-		108 : 'SquareShelfConstrainedTherStea',
+-		109 : 'SquareShelfConstrainedTherTran',
+-		110 : 'SquareShelfConstrainedTranM2d',
+-		111 : 'SquareShelfConstrainedTranP3d',
+-		112 : 'SquareShelfConstrainedSurfSlop2d',
+-		113 : 'SquareShelfConstrainedSurfSlope3d',
+-		114 : 'SquareShelfConstrainedBedSlop2d',
+-		115 : 'SquareShelfConstrainedBedSlop3d',
+-		116 : 'SquareShelfConstrainedBalThic2d',
+-		117 : 'SquareShelfConstrainedBalThic3d',
+-		118 : 'SquareShelfConstrainedBalThic2dDG',
+-		119 : 'SquareBamgMesh',
+-		120 : 'SquareShelfConstrainedEnthalpyStea',
+-		121 : 'SquareShelfConstrainedEnthalpyTran',
+-		122 : 'SquareShelfConstrainedTransP3dEnth',
+-		201 : 'SquareShelfDiagM2d',
+-		202 : 'SquareShelfDiagM3d',
+-		203 : 'SquareShelfDiagP3d',
+-		204 : 'SquareShelfDiagS3d',
+-		205 : 'SquareShelfDiagMP3dPenalties',
+-		206 : 'SquareShelfTherStea',
+-		207 : 'SquareShelfTherTran',
+-		208 : 'SquareShelfTranM2d',
+-		209 : 'SquareShelfTranM3d',
+-		210 : 'SquareShelfTranP3d',
+-		211 : 'SquareShelfTranS3d',
+-		212 : 'SquareShelfCMBM2d',
+-		213 : 'SquareShelfCMBM3d',
+-		214 : 'SquareShelfCMBP3d',
+-		215 : 'SquareShelfCMBS3d',
+-		216 : 'SquareShelfDiagM2dRift',
+-		217 : 'SquareShelfConstrained',
+-		218 : 'SquareShelfConstrainedDakotaB',
+-		219 : 'SquareShelfDiagMP3dTiling',
+-		220 : 'SquareShelfDiagPS3dTiling',
+-		221 : 'SquareShelfDiagMS3dTiling',
+-		222 : 'SquareShelfDiagM2dTransientIncrHydro',
+-		223 : 'SquareShelfDiagM2dTransientIncrNonHydro',
+-		224 : 'SquareShelfDiagP3dTransientIncrHydro',
+-		225 : 'SquareShelfDiagP3dTransientIncrNonHydro',
+-		226 : 'SquareShelfTranCflM2d',
+-		227 : 'SquareShelfTranCflP3d',
+-		228 : 'SquareShelfTranForceNeg2d',
+-		229 : 'SquareShelfTranForcePos2d',
+-		230 : 'SquareShelfTranForceNeg3d',
+-		231 : 'SquareShelfTranForcePos3d',
+-		232 : 'SquareShelfTherTranForcTemp',
+-		233 : 'SquareShelfTranP3dForcTemp',
+-		234 : 'SquareShelfTranForceNeg2dDakotaSamp',
+-		235 : 'SquareShelfTranForceNeg2dDakotaLocal',
+-		236 : 'SquareShelfTranIspddIsdeltaM2d',
+-		237 : 'SquareShelfTranIspddIsdeltaM3d',
+-		280 : 'SquareShelfDiagM2dP2',
+-		301 : 'SquareSheetConstrainedDiagM2d',
+-		302 : 'SquareSheetConstrainedDiagH2d',
+-		303 : 'SquareSheetConstrainedDiagHM2d',
+-		304 : 'SquareSheetConstrainedDiagM3d',
+-		305 : 'SquareSheetConstrainedDiagH3d',
+-		306 : 'SquareSheetConstrainedDiagHM3d',
+-		307 : 'SquareSheetConstrainedDiagP3d',
+-		308 : 'SquareSheetConstrainedDiagS3d',
+-		309 : 'SquareSheetConstrainedProg2d',
+-		310 : 'SquareSheetConstrainedProg2dDG',
+-		311 : 'SquareSheetConstrainedProg3d',
+-		312 : 'SquareSheetConstrainedTherStea',
+-		313 : 'SquareSheetConstrainedTherTran',
+-		314 : 'SquareSheetConstrainedTranH2d',
+-		315 : 'SquareSheetConstrainedTranH3d',
+-		316 : 'SquareSheetConstrainedTranM2d',
+-		317 : 'SquareSheetConstrainedTranP3d',
+-		318 : 'SquareSheetConstrainedSteaH3d',
+-		319 : 'SquareSheetConstrainedCMDragM2d',
+-		320 : 'SquareSheetConstrainedCMDragM3d',
+-		321 : 'SquareSheetConstrainedCMDragP3d',
+-		322 : 'SquareSheetConstrainedCMDragS3d',
+-		323 : 'SquareSheetConstrainedTranCflM2d',
+-		324 : 'SquareSheetConstrainedTranCflH3d',
+-		325 : 'SquareSheetConstrainedEnthalpyStea',
+-		326 : 'SquareSheetConstrainedEnthalpyTran',
+-		327 : 'SquareSheetConstrainedTransP3dEnth',
+-		328 : 'SquareSheetConstrainedSmbGradients2d',
+-		329 : 'SquareSheetConstrainedSmbGradients3d',
+-		331 : 'SquareSheetConstrainedHydrology',
+-		333 : 'SquareSheetConstrainedTranCflM3d',
+-		401 : 'SquareSheetShelfDiagM2d',
+-		402 : 'SquareSheetShelfDiagM3d',
+-		403 : 'SquareSheetShelfDiagP3d',
+-		404 : 'SquareSheetShelfDiagS3d',
+-		405 : 'SquareSheetShelfDiagMP3dPenalties',
+-		406 : 'SquareSheetShelfTherStea',
+-		407 : 'SquareSheetShelfTherTran',
+-		408 : 'SquareSheetShelfTranM2d',
+-		409 : 'SquareSheetShelfTranMP3dPenalties',
+-		410 : 'SquareSheetShelfSteaM3d',
+-		411 : 'SquareSheetShelfSteaP3d',
+-		412 : 'SquareSheetShelfDiadM3dDakota',
+-		413 : 'SquareSheetShelfDiadM3dDakotaPart',
+-		414 : 'SquareSheetShelfDiadM3dDakotaMassFlux',
+-		415 : 'SquareSheetShelfCMDragSteaM3d',
+-		416 : 'SquareSheetShelfCMDragSteaP3d',
+-		417 : 'SquareSheetShelfDiadM3dDakotaSamp',
+-		418 : 'SquareSheetShelfDiadM3dDakotaAreaAverage',
+-		419 : 'SquareSheetShelfDiagMP3dTiling',
+-		420 : 'SquareSheetShelfDakotaScaledResponse',
+-		421 : 'SquareSheetShelfDiagPS3dTiling',
+-		422 : 'SquareSheetShelfDiagMS3dTiling',
+-		423 : 'RoundSheetShelfGLMigrationM2d',
+-		424 : 'SquareSheetShelfGroundingLine2dAgressice',
+-		425 : 'SquareSheetShelfGroundingLine2dSoft',
+-		426 : 'SquareSheetShelfGroundingLine3dAgressice',
+-		427 : 'SquareSheetShelfGroundingLine3dSoft',
+-		428 : 'SquareSheetShelfDiagM2dNewton',
+-		429 : 'SquareSheetShelfDiagP3dNewton',
+-		430 : 'SquareSheetShelfDiagS3dNewton',
+-		431 : 'SquareSheetShelfSteaEnthalpyM3d',
+-		432 : 'SquareSheetShelfSteaEnthalpyP3d',
+-		433 : 'RoundSheetShelfGLMigrationM3d',
+-		434 : 'SquareSheetShelfDiagL1L2',
+-		501 : 'PigDiagM2d',
+-		502 : 'PigDiagP3d',
+-		503 : 'PigDiagS3d',
+-		504 : 'PigTranM2d',
+-		505 : 'PigTranM3d',
+-		506 : 'PigTranP3d',
+-		507 : 'PigTranS3d',
+-		508 : 'PigSteaM3d',
+-		509 : 'PigSteaP3d',
+-		510 : 'PigSteaS3d',
+-		511 : 'PigCMBS3d',
+-		512 : 'PigCMDragP3d',
+-		513 : 'PigCMDragSteaM3d',
+-		514 : 'PigBamgMesh',
+-		515 : 'PigTherTranSUPG',
+-		516 : 'PigTherSteaSUPG',
+-		601 : '79NorthProg2d',
+-		602 : '79NorthProg2dDG',
+-		603 : '79NorthProg3d',
+-		604 : '79NorthSurfSlop2d',
+-		605 : '79NorthSurfSlop3d',
+-		606 : '79NorthBedSlop2d',
+-		607 : '79NorthBedSlop3d',
+-		608 : '79NorthBalThic2d',
+-		609 : '79NorthBalThic2dDG',
+-		610 : '79NorthBalThic3d',
+-		611 : '79NorthCMBalThic2dCG',
+-		612 : '79NorthCMBalThic2dDG',
+-		613 : '79NorthCMBalThicVxVy',
+-		1101 : 'ISMIPAPattyn',
+-		1102 : 'ISMIPAStokes',
+-		1103 : 'ISMIPBPattyn',
+-		1104 : 'ISMIPBStokes',
+-		1105 : 'ISMIPCPattyn',
+-		1106 : 'ISMIPCStokes',
+-		1107 : 'ISMIPDPattyn',
+-		1108 : 'ISMIPDStokes',
+-		1109 : 'ISMIPE',
+-		1110 : 'ISMIPF',
+-		1201 : 'EISMINTMassConservation',
+-		1202 : 'EISMINTDiag1',
+-		1203 : 'EISMINTDiag2',
+-		1204 : 'EISMINTTran2',
+-		1205 : 'EISMINTRoundIceSheetStaticHutter',
+-		1206 : 'EISMINTRoundIceSheetStaticPattyn',
+-		1207 : 'EISMINTRoundIceSheetStaticStokes',
+-		1208 : 'EISMINTA',
+-		1301 : 'ThermalMelting',
+-		1302 : 'ThermalAdvection',
+-		1303 : 'ThermalConduction',
+-		1304 : 'ThermalGeothermalFlux',
+-		1401 : 'AdaptiveMeshRefinement1',
+-		1402 : 'AdaptiveMeshRefinement2',
+-		1501 : 'SquareShelfTranSawTooth2d',
+-		1502 : 'SquareShelfTranSawTooth3d',
+-		1601 : 'SquareShelfM2dRotation',
+-		1602 : 'SquareSheetShelfP3dRotation', 
+-		2001 : 'SquareSheetConstrainedGia2d',
+-		3001 : 'SquareShelfConstrainedDiagM2dAdolc',
+-		3002 : 'SquareShelfConstrainedDiagM3dAdolc',
+-		3003 : 'SquareShelfConstrainedDiagP3dAdolc',
+-		3004 : 'SquareShelfConstrainedDiagS3dAdolc',
+-		3005 : 'SquareShelfConstrainedProg2dAdolc',
+-		3006 : 'SquareShelfConstrainedProg2dDGAdolc',
+-		3007 : 'SquareShelfConstrainedProg3dAdolc',
+-		3008 : 'SquareShelfConstrainedTherSteaAdolc',
+-		3009 : 'SquareShelfConstrainedTherTranAdolc',
+-		3010 : 'SquareShelfConstrainedTranM2dAdolc',
+-		3015 : 'SquareShelfConstrainedProg2dAdolcForwardDifference',
+-		3019 : 'SquareShelfConstrainedTherTranAdolcReverseVsForward',
++	101 : 'SquareShelfConstrainedDiagSSA2d',
++	102 : 'SquareShelfConstrainedDiagSSA3d',
++	103 : 'SquareShelfConstrainedDiagHO',
++	104 : 'SquareShelfConstrainedDiagS3d',
++	105 : 'SquareShelfConstrainedProg2d',
++	106 : 'SquareShelfConstrainedProg2dDG',
++	107 : 'SquareShelfConstrainedProg3d',
++	108 : 'SquareShelfConstrainedTherStea',
++	109 : 'SquareShelfConstrainedTherTran',
++	110 : 'SquareShelfConstrainedTranSSA2d',
++	111 : 'SquareShelfConstrainedTranHO',
++	112 : 'SquareShelfConstrainedSurfSlop2d',
++	113 : 'SquareShelfConstrainedSurfSlope3d',
++	114 : 'SquareShelfConstrainedBedSlop2d',
++	115 : 'SquareShelfConstrainedBedSlop3d',
++	116 : 'SquareShelfConstrainedBalThic2d',
++	117 : 'SquareShelfConstrainedBalThic3d',
++	118 : 'SquareShelfConstrainedBalThic2dDG',
++	119 : 'SquareBamgMesh',
++	120 : 'SquareShelfConstrainedEnthalpyStea',
++	121 : 'SquareShelfConstrainedEnthalpyTran',
++	122 : 'SquareShelfConstrainedTransHOEnth',
++	201 : 'SquareShelfDiagSSA2d',
++	202 : 'SquareShelfDiagSSA3d',
++	203 : 'SquareShelfDiagHO',
++	204 : 'SquareShelfDiagS3d',
++	205 : 'SquareShelfDiagMHOPenalties',
++	206 : 'SquareShelfTherStea',
++	207 : 'SquareShelfTherTran',
++	208 : 'SquareShelfTranSSA2d',
++	209 : 'SquareShelfTranSSA3d',
++	210 : 'SquareShelfTranHO',
++	211 : 'SquareShelfTranS3d',
++	212 : 'SquareShelfCMBSSA2d',
++	213 : 'SquareShelfCMBSSA3d',
++	214 : 'SquareShelfCMBHO',
++	215 : 'SquareShelfCMBS3d',
++	216 : 'SquareShelfDiagSSA2dRift',
++	217 : 'SquareShelfConstrained',
++	218 : 'SquareShelfConstrainedDakotaB',
++	219 : 'SquareShelfDiagMHOTiling',
++	220 : 'SquareShelfDiagPS3dTiling',
++	221 : 'SquareShelfDiagMS3dTiling',
++	222 : 'SquareShelfDiagSSA2dTransientIncrHydro',
++	223 : 'SquareShelfDiagSSA2dTransientIncrNonHydro',
++	224 : 'SquareShelfDiagHOTransientIncrHydro',
++	225 : 'SquareShelfDiagHOTransientIncrNonHydro',
++	226 : 'SquareShelfTranCflSSA2d',
++	227 : 'SquareShelfTranCflHO',
++	228 : 'SquareShelfTranForceNeg2d',
++	229  : 'SquareShelfTranForcePos2d',
++	230  : 'SquareShelfTranForceNeg3d',
++	231  : 'SquareShelfTranForcePos3d',
++	232  : 'SquareShelfTherTranForcTemp',
++	233  : 'SquareShelfTranHOForcTemp',
++	234  : 'SquareShelfTranForceNeg2dDakotaSamp',
++	235  : 'SquareShelfTranForceNeg2dDakotaLocal',
++	236  : 'SquareShelfTranIspddIsdeltaSSA2d',
++	237  : 'SquareShelfTranIspddIsdeltaSSA3d',
++	270  : 'SquareShelfDiagSSA2dDamage',
++	272  : 'SquareShelfCMZSSA2dDamage',
++	274  : 'SquareShelfDiagSSA2dDamageRift',
++	280  : 'SquareShelfDiagSSA2dP2',
++	301  : 'SquareSheetConstrainedDiagSSA2d',
++	302  : 'SquareSheetConstrainedDiagSIA2d',
++	303  : 'SquareSheetConstrainedDiagHSSA2d',
++	304  : 'SquareSheetConstrainedDiagSSA3d',
++	305  : 'SquareSheetConstrainedDiagSIA3d',
++	306  : 'SquareSheetConstrainedDiagHSSA3d',
++	307  : 'SquareSheetConstrainedDiagHO',
++	308  : 'SquareSheetConstrainedDiagS3d',
++	309  : 'SquareSheetConstrainedProg2d',
++	320  : 'SquareSheetConstrainedProg2dDG',
++	311  : 'SquareSheetConstrainedProg3d',
++	312  : 'SquareSheetConstrainedTherStea',
++	313  : 'SquareSheetConstrainedTherTran',
++	314  : 'SquareSheetConstrainedTranSIA2d',
++	315  : 'SquareSheetConstrainedTranSIA3d',
++	316  : 'SquareSheetConstrainedTranSSA2d',
++	317  : 'SquareSheetConstrainedTranHO',
++	318  : 'SquareSheetConstrainedSteaSIA3d',
++	319  : 'SquareSheetConstrainedCMDragSSA2d',
++	320  : 'SquareSheetConstrainedCMDragSSA3d',
++	321  : 'SquareSheetConstrainedCMDragHO',
++	322  : 'SquareSheetConstrainedCMDragS3d',
++	323  : 'SquareSheetConstrainedTranCflSSA2d',
++	324  : 'SquareSheetConstrainedTranCflSIA3d',
++	325  : 'SquareSheetConstrainedEnthalpyStea',
++	326  : 'SquareSheetConstrainedEnthalpyTran',
++	327  : 'SquareSheetConstrainedTransHOEnth',
++	328  : 'SquareSheetConstrainedSmbGradients2d',
++	329  : 'SquareSheetConstrainedSmbGradients3d',
++	331  : 'SquareSheetConstrainedHydrologyShreve',
++	332  : 'SquareSheetConstrainedHydrologyDC',
++	333  : 'SquareSheetHydrologyDCTwoLayers',
++	401  : 'SquareSheetShelfDiagSSA2d',
++	402  : 'SquareSheetShelfDiagSSA3d',
++	403  : 'SquareSheetShelfDiagHO',
++	404  : 'SquareSheetShelfDiagS3d',
++	405  : 'SquareSheetShelfDiagMHOPenalties',
++	406  : 'SquareSheetShelfTherStea',
++	407  : 'SquareSheetShelfTherTran',
++	408  : 'SquareSheetShelfTranSSA2d',
++	409  : 'SquareSheetShelfTranMHOPenalties',
++	410  : 'SquareSheetShelfSteaSSA3d',
++	411  : 'SquareSheetShelfSteaHO',
++	412  : 'SquareSheetShelfDiadSSA3dDakota',
++	413  : 'SquareSheetShelfDiadSSA3dDakotaPart',
++	414  : 'SquareSheetShelfDiadSSA3dDakotaMassFlux',
++	415  : 'SquareSheetShelfCMDragSteaSSA3d',
++	416  : 'SquareSheetShelfCMDragSteaHO',
++	417  : 'SquareSheetShelfDiadSSA3dDakotaSamp',
++	418  : 'SquareSheetShelfDiadSSA3dDakotaAreaAverage',
++	419  : 'SquareSheetShelfDiagMHOTiling',
++	420  : 'SquareSheetShelfDakotaScaledResponse',
++	421  : 'SquareSheetShelfDiagPS3dTiling',
++	422  : 'SquareSheetShelfDiagMS3dTiling',
++	423  : 'RoundSheetShelfGLMigrationSSA2d',
++	424  : 'SquareSheetShelfGroundingLine2dAgressive',
++	425  : 'SquareSheetShelfGroundingLine2dSoft',
++	426  : 'SquareSheetShelfGroundingLine3dAgressive',
++	427  : 'SquareSheetShelfGroundingLine3dSoft',
++	428  : 'SquareSheetShelfDiagSSA2dNewton',
++	429  : 'SquareSheetShelfDiagHONewton',
++	430  : 'SquareSheetShelfDiagS3dNewton',
++	431  : 'SquareSheetShelfSteaEnthalpySSA3d',
++	432  : 'SquareSheetShelfSteaEnthalpyHO',
++	433  : 'RoundSheetShelfGLMigrationSSA3d',
++	434  : 'SquareSheetShelfL1L2',
++	501  : 'PigDiagSSA2d',
++	502  : 'PigDiagHO',
++	503  : 'PigDiagS3d',
++	504  : 'PigTranSSA2d',
++	505  : 'PigTranSSA3d',
++	506  : 'PigTranHO',
++	507  : 'PigTranS3d',
++	508  : 'PigSteaSSA3d',
++	509  : 'PigSteaHO',
++	510  : 'PigSteaS3d',
++	511  : 'PigCMBS3d',
++	512  : 'PigCMDragHO',
++	513  : 'PigCMDragSteaSSA3d',
++	514  : 'PigBamgMesh',
++	515  : 'PigTherTranSUPG',
++	516  : 'PigTherSteaSUPG',
++	601  : '79NorthProg2d',
++	602  : '79NorthProg2dDG',
++	603  : '79NorthProg3d',
++	604  : '79NorthSurfSlop2d',
++	605  : '79NorthSurfSlop3d',
++	606  : '79NorthBedSlop2d',
++	607  : '79NorthBedSlop3d',
++	608  : '79NorthBalThic2d',
++	609  : '79NorthBalThic2dDG',
++	610  : '79NorthBalThic3d',
++	611  : '79NorthCMBalThic2dCG',
++	612  : '79NorthCMBalThic2dDG',
++	613  : '79NorthCMBalThicVxVy',
++	1101 : 'ISMIPAHO',
++	1102 : 'ISMIPAFS',
++	1103 : 'ISMIPBHO',
++	1104 : 'ISMIPBFS',
++	1105 : 'ISMIPCHO',
++	1106 : 'ISMIPCFS',
++	1107 : 'ISMIPDHO',
++	1108 : 'ISMIPDFS',
++	1109 : 'ISMIPE',
++	1110 : 'ISMIPF',
++	1201 : 'EISMINTMassConservation',
++	1202 : 'EISMINTDiag1',
++	1203 : 'EISMINTDiag2',
++	1204 : 'EISMINTTran2',
++	1205 : 'EISMINTRoundIceSheetStaticSIA',
++	1206 : 'EISMINTRoundIceSheetStaticHO',
++	1207 : 'EISMINTRoundIceSheetStaticFS',
++	1208 : 'EISMINTA',
++	1301 : 'ThermalMelting',
++	1302 : 'ThermalAdvection',
++	1303 : 'ThermalConduction',
++	1304 : 'ThermalGeothermalFlux',
++	1401 : 'AdaptiveMeshRefinement1',
++	1402 : 'AdaptiveMeshRefinement2',
++	1501 : 'SquareShelfTranSawTooth2d',
++	1502 : 'SquareShelfTranSawTooth3d',
++	1601 : 'SquareShelfSSA2dRotation',
++	1602 : 'SquareSheetShelfHORotation',
++	2001 : 'SquareSheetConstrainedGia2d',
++	2051 : 'GiaBenchmarksAB2dA1',
++	2052 : 'GiaBenchmarksAB2dA2',
++	2053 : 'GiaBenchmarksAB2dA3',
++	2061 : 'GiaBenchmarksAB2dB1',
++	2062 : 'GiaBenchmarksAB2dB2',
++	2063 : 'GiaBenchmarksAB2dB3',
++	2071 : 'GiaBenchmarksAB2dC1',
++	2072 : 'GiaBenchmarksAB2dC2',
++	2073 : 'GiaBenchmarksAB2dC3',
++	2081 : 'GiaBenchmarksAB2dD1',
++	2082 : 'GiaBenchmarksAB2dD2',
++	2083 : 'GiaBenchmarksAB2dD3',
++	3001 : 'SquareShelfConstrainedDiagSSA2dAdolc',
++	3002 : 'SquareShelfConstrainedDiagSSA3dAdolc',
++	3003 : 'SquareShelfConstrainedDiagHOAdolc',
++	3004 : 'SquareShelfConstrainedDiagS3dAdolc',
++	3005 : 'SquareShelfConstrainedProg2dAdolc',
++	3006 : 'SquareShelfConstrainedProg2dDGAdolc',
++	3007 : 'SquareShelfConstrainedProg3dAdolc',
++	3008 : 'SquareShelfConstrainedTherSteaAdolc',
++	3009 : 'SquareShelfConstrainedTherTranAdolc',
++	3010 : 'SquareShelfConstrainedTranSSA2dAdolc',
++	3015 : 'SquareShelfConstrainedProg2dAdolcForwardDifference',
++	3019 : 'SquareShelfConstrainedTherTranAdolcReverseVsForward',
+ 	}
+ 
+ 	if not id == 0:
+ 		return idname.get(id,'N/A')
+ 	else:
+ 		return idname
+-
+Index: ../trunk-jpl/test/NightlyRun/test112.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test112.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test112.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,SurfaceSlopeSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn')
++md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test502.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,0.9)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test314.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test314.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test314.py	(revision 15565)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'hutter','all')
++md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test233.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test233.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.thermal.spctemperature=numpy.vstack((numpy.hstack((md.thermal.spctemperature, md.thermal.spctemperature+5.)), [1.,2.]))
+ md.timestepping.time_step=0.5
+Index: ../trunk-jpl/test/NightlyRun/test311.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test311.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md=extrude(md,5,0.5);
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test230.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test230.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test230.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.timestepping.time_step=1;
+Index: ../trunk-jpl/test/NightlyRun/test207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test207.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=False
+ md.transient.isprognostic=False
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test115.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test115.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test115.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,5,1.);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BedSlopeSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test516.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test516.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test516.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ md.thermal.stabilization=2
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0
+Index: ../trunk-jpl/test/NightlyRun/test328.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test328.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md=setflowequation(md,'macayeal','all')
++md=setflowequation(md,'SSA','all')
+ md.surfaceforcings.issmbgradients=1
+ md.surfaceforcings.b_pos=-100. + 0.00005*md.mesh.x - 0.0001*md.mesh.y
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y
+Index: ../trunk-jpl/test/NightlyRun/test409.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test409.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test409.py	(revision 15565)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,1.)
+-md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties')
++md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO','coupling','penalties')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %Ice sheet only
+ md=extract(md,md.mask.elementongroundedice);
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 15565)
+@@ -5,7 +5,7 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test434.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test434.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1.);
+-md=setflowequation(md,'l1l2','all');
++md=setflowequation(md,'L1L2','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test515.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test515.m	(revision 15565)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+-md=setflowequation(md,'pattyn','all');
++md=setflowequation(md,'HO','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test417.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test417.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test417.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.materials.rho_ice=10^7; %involved in the mass flux, make it easy
+ md.geometry.thickness(:)=1; %make it easy
+Index: ../trunk-jpl/test/NightlyRun/test319.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.m	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test319.m	(revision 15565)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'macayeal','all');
++md=setflowequation(md,'SSA','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test1101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1101.py	(revision 15565)
+@@ -31,7 +31,7 @@
+ 	md=parameterize(md,'../Par/ISMIPA.py')
+ 	md.extrude(9,1.)
+ 
+-	md=setflowequation(md,'pattyn','all')
++	md=setflowequation(md,'HO','all')
+ 
+ 	#Create dirichlet on the bed only
+ 	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+@@ -68,20 +68,20 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipapattynvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipapattynvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#		printmodel(['ismipaHOvx' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipaHOvx%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ #	plotmodel(md,'data',vy,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km')
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipapattynvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipapattynvy%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#		printmodel(['ismipaHOvy' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipaHOvy%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ #	plotmodel(md,'data',vz,'layer#all',md.mesh.numberoflayers,'xlim',[0 L/10^3],'ylim',[0 L/10^3],'unit','km')
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipapattynvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipapattynvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#		printmodel(['ismipaHOvz' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipaHOvz%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ 
+ 	if   (L==5000.):
+ 		pass
+@@ -110,22 +110,22 @@
+ 	if printingflag:
+ 		pass
+ #		set(gcf,'Color','w')
+-#		printmodel(['ismipapattynvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#		shutil.move("ismipapattynvxsec%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#		printmodel(['ismipaHOvxsec' num2str(L)],'png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#		shutil.move("ismipaHOvxsec%d.png" % L,ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ 
+ #Now plot the min and max values of vx for each size of the square
+ #plot([5 10 20 40 80 160],minvx);ylim([0 18]);xlim([0 160])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipapattynminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipapattynminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#	printmodel('ismipaHOminvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipaHOminvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ #plot([5 10 20 40 80 160],maxvx);ylim([0 120]);xlim([0 160])
+ if printingflag:
+ 	pass
+ #	set(gcf,'Color','w')
+-#	printmodel('ismipapattynmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
+-#	shutil.move('ismipapattynmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
++#	printmodel('ismipaHOmaxvx','png','margin','on','marginsize',25,'frame','off','resolution',1.5,'hardcopy','off');
++#	shutil.move('ismipaHOmaxvx.png',ISSM_DIR+'/website/doc_pdf/validation/Images/ISMIP/TestA')
+ 
+ #Fields and tolerances to track changes
+ field_names     =[\
+Index: ../trunk-jpl/test/NightlyRun/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test3004.py	(revision 15565)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+-md=setflowequation(md,'stokes','all')
++md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.autodiff.isautodiff=True
+Index: ../trunk-jpl/test/NightlyRun/test1303.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1303.py	(revision 15564)
++++ ../trunk-jpl/test/NightlyRun/test1303.py	(revision 15565)
+@@ -23,7 +23,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareThermal.py')
+ md.extrude(11,2.)
+-md=setflowequation(md,'pattyn','all')
++md=setflowequation(md,'HO','all')
+ 
+ pos1=numpy.nonzero(md.mesh.elementonbed)[0]
+ md.thermal.spctemperature[md.mesh.elements[pos1,0:3]-1]=10.
Index: /issm/oecreview/Archive/15392-16133/ISSM-15565-15566.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15565-15566.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15565-15566.diff	(revision 16134)
@@ -0,0 +1,181 @@
+Index: ../trunk-jpl/test/NightlyRun/test1205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1205.py	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1205.py	(revision 15566)
+@@ -9,7 +9,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-The aim of this program is to compare a model with an analytical solution given in MacAyeal EISMINT : Lessons in Ice-Sheet Modeling.
++The aim of this program is to compare a model with an analytical solution given in SSA EISMINT : Lessons in Ice-Sheet Modeling.
+ """
+ 
+ printingflag=False
+Index: ../trunk-jpl/test/NightlyRun/test1202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.m	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1202.m	(revision 15566)
+@@ -6,9 +6,9 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+-md=setflowequation(md,'SSA','all'); %MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all'); %SSA's model and 2d
+ 
+-%Compute solution for MacAyeal's model 
++%Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.m	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1203.m	(revision 15566)
+@@ -6,13 +6,13 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',5100.); %test3
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+-md=setflowequation(md,'SSA','all'); %MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all'); %SSA's model and 2d
+ 
+ %Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=find(md.mesh.y==max(md.mesh.y));
+ md.diagnostic.spcvy(pos)=400.*(((md.mesh.x(pos)-100000.)/25000.).^2-ones(size(pos,1),1)).*heaviside((1.+eps)*ones(size(pos,1),1)-((md.mesh.x(pos)-100000.)/25000.).^2);
+ 
+-%Compute solution for MacAyeal's model 
++%Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1206.py	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1206.py	(revision 15566)
+@@ -9,7 +9,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-The aim of this program is to compare a model with an analytical solution given in MacAyeal EISMINT : Lessons in Ice-Sheet Modeling.
++The aim of this program is to compare a model with an analytical solution given in SSA EISMINT : Lessons in Ice-Sheet Modeling.
+ """
+ 
+ printingflag=False
+Index: ../trunk-jpl/test/NightlyRun/test1204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.m	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1204.m	(revision 15566)
+@@ -6,13 +6,13 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+-md=setflowequation(md,'SSA','all'); %MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all'); %SSA's model and 2d
+ 
+ %Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=find(md.mesh.y==max(md.mesh.y));
+ md.diagnostic.spcvy(pos)=400.*(((md.mesh.x(pos)-100000.)/25000.).^2-ones(size(pos,1),1)).*heaviside((1.+eps)*ones(size(pos,1),1)-((md.mesh.x(pos)-100000.)/25000.).^2);
+ 
+-%Compute solution for MacAyeal's model 
++%Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1207.py	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1207.py	(revision 15566)
+@@ -9,7 +9,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-The aim of this program is to compare a model with an analytical solution given in MacAyeal EISMINT : Lessons in Ice-Sheet Modeling.
++The aim of this program is to compare a model with an analytical solution given in SSA EISMINT : Lessons in Ice-Sheet Modeling.
+ """
+ 
+ printingflag=False
+Index: ../trunk-jpl/test/NightlyRun/test1205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1205.m	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1205.m	(revision 15566)
+@@ -1,4 +1,4 @@
+-%The aim of this program is to compare a model with an analytical solution given in MacAyeal EISMINT : Lessons in Ice-Sheet Modeling.
++%The aim of this program is to compare a model with an analytical solution given in SSA EISMINT : Lessons in Ice-Sheet Modeling.
+ printingflag=false;
+ 
+ numlayers=10;
+Index: ../trunk-jpl/test/NightlyRun/test1202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.py	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1202.py	(revision 15566)
+@@ -19,9 +19,9 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareEISMINT.py')
+-md=setflowequation(md,'SSA','all')    #MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all')    #SSA's model and 2d
+ 
+-#Compute solution for MacAyeal's model 
++#Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1206.m	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1206.m	(revision 15566)
+@@ -1,4 +1,4 @@
+-%The aim of this program is to compare a model with an analytical solution given in MacAyeal EISMINT : Lessons in Ice-Sheet Modeling.
++%The aim of this program is to compare a model with an analytical solution given in SSA EISMINT : Lessons in Ice-Sheet Modeling.
+ printingflag=false;
+ 
+ numlayers=10;
+Index: ../trunk-jpl/test/NightlyRun/test1203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.py	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1203.py	(revision 15566)
+@@ -20,13 +20,13 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',5100.)    #test3
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareEISMINT.py')
+-md=setflowequation(md,'SSA','all')    #MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all')    #SSA's model and 2d
+ 
+ #Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=numpy.nonzero(md.mesh.y==numpy.max(md.mesh.y))
+ md.diagnostic.spcvy[pos]=400.*(((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2-numpy.ones((numpy.size(pos),1)))*heaviside((1.+sys.float_info.epsilon)*numpy.ones((numpy.size(pos),1))-((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2)
+ 
+-#Compute solution for MacAyeal's model 
++#Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1207.m	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1207.m	(revision 15566)
+@@ -1,4 +1,4 @@
+-%The aim of this program is to compare a model with an analytical solution given in MacAyeal EISMINT : Lessons in Ice-Sheet Modeling.
++%The aim of this program is to compare a model with an analytical solution given in SSA EISMINT : Lessons in Ice-Sheet Modeling.
+ printingflag=false;
+ 
+ numlayers=10;
+Index: ../trunk-jpl/test/NightlyRun/test1204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.py	(revision 15565)
++++ ../trunk-jpl/test/NightlyRun/test1204.py	(revision 15566)
+@@ -20,13 +20,13 @@
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareEISMINT.py')
+-md=setflowequation(md,'SSA','all')    #MacAyeal's model and 2d
++md=setflowequation(md,'SSA','all')    #SSA's model and 2d
+ 
+ #Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=numpy.nonzero(md.mesh.y==max(md.mesh.y))
+ md.diagnostic.spcvy[pos]=400.*(((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2-numpy.ones((numpy.size(pos),1)))*heaviside((1.+sys.float_info.epsilon)*numpy.ones((numpy.size(pos),1))-((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2)
+ 
+-#Compute solution for MacAyeal's model 
++#Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15566-15567.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15566-15567.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15566-15567.diff	(revision 16134)
@@ -0,0 +1,3590 @@
+Index: ../trunk-jpl/src/c/analyses/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15567)
+@@ -55,7 +55,7 @@
+ 	if(isSIA){
+ 		if(VerboseSolution()) _printf0_("   computing SIA velocities\n");
+ 
+-		/*Take the last velocity into account so that the velocity on the MacAyeal domain is not zero*/
++		/*Take the last velocity into account so that the velocity on the SSA domain is not zero*/
+ 		if(isSSA || isL1L2 || isHO ) ResetBoundaryConditions(femmodel,DiagnosticSIAAnalysisEnum);
+ 		femmodel->SetCurrentConfiguration(DiagnosticSIAAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15566)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15567)
+@@ -310,9 +310,9 @@
+ 	ApproximationEnum,
+ 	NoneApproximationEnum,
+ 	SIAApproximationEnum,
+-	MacAyealApproximationEnum,
+-	MacAyealHOApproximationEnum,
+-	MacAyealFSApproximationEnum,
++	SSAApproximationEnum,
++	SSAHOApproximationEnum,
++	SSAFSApproximationEnum,
+ 	L1L2ApproximationEnum,
+ 	HOApproximationEnum,
+ 	HOFSApproximationEnum,
+@@ -355,8 +355,8 @@
+ 	IntVecParamEnum,
+ 	TransientParamEnum,
+ 	IceFrontTypeEnum,
+-	MacAyeal2dIceFrontEnum,
+-	MacAyeal3dIceFrontEnum,
++	SSA2dIceFrontEnum,
++	SSA3dIceFrontEnum,
+ 	MaticeEnum,
+ 	MatdamageiceEnum,
+ 	MatparEnum,
+@@ -459,7 +459,7 @@
+ 	VyEnum,
+ 	VyPicardEnum,
+ 	VzEnum,
+-	VzMacAyealEnum,
++	VzSSAEnum,
+ 	VzHOEnum,
+ 	VzPicardEnum,
+ 	VzFSEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15567)
+@@ -314,9 +314,9 @@
+ 		case ApproximationEnum : return "Approximation";
+ 		case NoneApproximationEnum : return "NoneApproximation";
+ 		case SIAApproximationEnum : return "SIAApproximation";
+-		case MacAyealApproximationEnum : return "MacAyealApproximation";
+-		case MacAyealHOApproximationEnum : return "MacAyealHOApproximation";
+-		case MacAyealFSApproximationEnum : return "MacAyealFSApproximation";
++		case SSAApproximationEnum : return "SSAApproximation";
++		case SSAHOApproximationEnum : return "SSAHOApproximation";
++		case SSAFSApproximationEnum : return "SSAFSApproximation";
+ 		case L1L2ApproximationEnum : return "L1L2Approximation";
+ 		case HOApproximationEnum : return "HOApproximation";
+ 		case HOFSApproximationEnum : return "HOFSApproximation";
+@@ -355,8 +355,8 @@
+ 		case IntVecParamEnum : return "IntVecParam";
+ 		case TransientParamEnum : return "TransientParam";
+ 		case IceFrontTypeEnum : return "IceFrontType";
+-		case MacAyeal2dIceFrontEnum : return "MacAyeal2dIceFront";
+-		case MacAyeal3dIceFrontEnum : return "MacAyeal3dIceFront";
++		case SSA2dIceFrontEnum : return "SSA2dIceFront";
++		case SSA3dIceFrontEnum : return "SSA3dIceFront";
+ 		case MaticeEnum : return "Matice";
+ 		case MatdamageiceEnum : return "Matdamageice";
+ 		case MatparEnum : return "Matpar";
+@@ -453,7 +453,7 @@
+ 		case VyEnum : return "Vy";
+ 		case VyPicardEnum : return "VyPicard";
+ 		case VzEnum : return "Vz";
+-		case VzMacAyealEnum : return "VzMacAyeal";
++		case VzSSAEnum : return "VzSSA";
+ 		case VzHOEnum : return "VzHO";
+ 		case VzPicardEnum : return "VzPicard";
+ 		case VzFSEnum : return "VzFS";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15567)
+@@ -320,9 +320,9 @@
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+ 	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+-	      else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
+-	      else if (strcmp(name,"MacAyealHOApproximation")==0) return MacAyealHOApproximationEnum;
+-	      else if (strcmp(name,"MacAyealFSApproximation")==0) return MacAyealFSApproximationEnum;
++	      else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
++	      else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum;
++	      else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
+ 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+@@ -361,8 +361,8 @@
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"IceFrontType")==0) return IceFrontTypeEnum;
+-	      else if (strcmp(name,"MacAyeal2dIceFront")==0) return MacAyeal2dIceFrontEnum;
+-	      else if (strcmp(name,"MacAyeal3dIceFront")==0) return MacAyeal3dIceFrontEnum;
++	      else if (strcmp(name,"SSA2dIceFront")==0) return SSA2dIceFrontEnum;
++	      else if (strcmp(name,"SSA3dIceFront")==0) return SSA3dIceFrontEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+ 	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
+ 	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+@@ -462,7 +462,7 @@
+ 	      else if (strcmp(name,"Vy")==0) return VyEnum;
+ 	      else if (strcmp(name,"VyPicard")==0) return VyPicardEnum;
+ 	      else if (strcmp(name,"Vz")==0) return VzEnum;
+-	      else if (strcmp(name,"VzMacAyeal")==0) return VzMacAyealEnum;
++	      else if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
+ 	      else if (strcmp(name,"VzHO")==0) return VzHOEnum;
+ 	      else if (strcmp(name,"VzPicard")==0) return VzPicardEnum;
+ 	      else if (strcmp(name,"VzFS")==0) return VzFSEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15567)
+@@ -99,7 +99,7 @@
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/
+-			if (reCast<int,IssmDouble>(vertices_type[i]==MacAyealHOApproximationEnum)){
++			if (reCast<int,IssmDouble>(vertices_type[i]==SSAHOApproximationEnum)){
+ 				/*If grionSSA, spc HO dofs: 3 & 4*/
+ 					if (reCast<int,IssmDouble>(nodeonHO[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -131,7 +131,7 @@
+ 						}
+ 
+ 					}
+-					else _error_("if vertices_type is MacAyealHO, you shoud have nodeonHO or nodeonSSA");
++					else _error_("if vertices_type is SSAHO, you shoud have nodeonHO or nodeonSSA");
+ 			}
+ 			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
+ 			else if (reCast<int,IssmDouble>(vertices_type[i])==HOFSApproximationEnum){
+@@ -174,7 +174,7 @@
+ 					else _error_("if vertices_type is HOFS, you shoud have nodeonHO or nodeonFS");
+ 			}
+ 			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
+-			else if (reCast<int,IssmDouble>(vertices_type[i])==MacAyealFSApproximationEnum){
++			else if (reCast<int,IssmDouble>(vertices_type[i])==SSAFSApproximationEnum){
+ 				/*If grion,HO spc FS dofs: 3 4 & 5*/
+ 					if (reCast<int,IssmDouble>(nodeonSSA[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -211,7 +211,7 @@
+ 							count++;
+ 						}
+ 					}
+-					else _error_("if vertices_type is MacAyealFS, you shoud have nodeonSSA or nodeonFS");
++					else _error_("if vertices_type is SSAFS, you shoud have nodeonSSA or nodeonFS");
+ 			}
+ 			/*Now add the regular spcs*/
+ 			else{
+@@ -293,7 +293,7 @@
+ 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+ 			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
+ 				 switch(reCast<int,IssmDouble>(vertices_type[i])){
+-					case MacAyealFSApproximationEnum:
++					case SSAFSApproximationEnum:
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,DiagnosticHorizAnalysisEnum));
+ 						count++;
+ 						break;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15567)
+@@ -17,7 +17,7 @@
+ 	switch(analysis_type){
+ 		case DiagnosticHorizAnalysisEnum:
+ 			switch(node_type){
+-				case MacAyealApproximationEnum:
++				case SSAApproximationEnum:
+ 					numdofs=2;
+ 					break;
+ 				case L1L2ApproximationEnum:
+@@ -35,11 +35,11 @@
+ 				case NoneApproximationEnum:
+ 					numdofs=4;
+ 					break;
+-				case MacAyealHOApproximationEnum:
++				case SSAHOApproximationEnum:
+ 					numdofs=4;
+ 					doftype=xNew<int>(numdofs);
+-					doftype[0]=MacAyealApproximationEnum;
+-					doftype[1]=MacAyealApproximationEnum;
++					doftype[0]=SSAApproximationEnum;
++					doftype[1]=SSAApproximationEnum;
+ 					doftype[2]=HOApproximationEnum;
+ 					doftype[3]=HOApproximationEnum;
+ 					break;
+@@ -53,11 +53,11 @@
+ 					doftype[4]=FSApproximationEnum;
+ 					doftype[5]=FSApproximationEnum;
+ 					break;
+-				case MacAyealFSApproximationEnum:
++				case SSAFSApproximationEnum:
+ 					numdofs=6;
+ 					doftype=xNew<int>(numdofs);
+-					doftype[0]=MacAyealApproximationEnum;
+-					doftype[1]=MacAyealApproximationEnum;
++					doftype[0]=SSAApproximationEnum;
++					doftype[1]=SSAApproximationEnum;
+ 					doftype[2]=FSApproximationEnum;
+ 					doftype[3]=FSApproximationEnum;
+ 					doftype[4]=FSApproximationEnum;
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15567)
+@@ -281,7 +281,7 @@
+ /*FUNCTION Matdamageice::GetViscosity3d {{{*/
+ void  Matdamageice::GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+ 
+-	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
++	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+ 	 *                                               B
+ 	 * viscosity3d= -------------------------------------------------------------------
+@@ -352,7 +352,7 @@
+ /*}}}*/
+ /*FUNCTION Matdamageice::GetViscosity3dFS {{{*/
+ void  Matdamageice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+-	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
++	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+ 	 *                                          B
+ 	 * viscosity3d= -------------------------------------------------------------------
+@@ -425,7 +425,7 @@
+ /*}}}*/
+ /*FUNCTION Matdamageice::GetViscosityComplement {{{*/
+ void  Matdamageice::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){
+-	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
++	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+ 	 *  										                1
+ 	 * viscosity= -------------------------------------------------------------------
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15567)
+@@ -273,7 +273,7 @@
+ /*FUNCTION Matice::GetViscosity3d {{{*/
+ void  Matice::GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+ 
+-	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
++	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+ 	 *                                               B
+ 	 * viscosity3d= -------------------------------------------------------------------
+@@ -343,7 +343,7 @@
+ /*}}}*/
+ /*FUNCTION Matice::GetViscosity3dFS {{{*/
+ void  Matice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+-	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
++	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+ 	 *                                          B
+ 	 * viscosity3d= -------------------------------------------------------------------
+@@ -415,7 +415,7 @@
+ /*}}}*/
+ /*FUNCTION Matice::GetViscosityComplement {{{*/
+ void  Matice::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){
+-	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
++	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+ 	 *  										                1
+ 	 * viscosity= -------------------------------------------------------------------
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15567)
+@@ -92,10 +92,10 @@
+ 		#endif
+ 		#ifdef _HAVE_DIAGNOSTIC_
+ 		ElementVector* CreatePVectorDiagnosticHoriz(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyeal2d(void);
++		ElementVector* CreatePVectorDiagnosticSSA2d(void);
+ 		#endif
+         #ifdef _HAVE_3D_
+-		ElementVector* CreatePVectorDiagnosticMacAyeal3d(void);
++		ElementVector* CreatePVectorDiagnosticSSA3d(void);
+ 		ElementVector* CreatePVectorDiagnosticHO(void);
+ 		ElementVector* CreatePVectorDiagnosticFS(void);
+ 	    #endif
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15567)
+@@ -298,16 +298,16 @@
+ 	int    approximation1=nodes[1]->GetApproximation();
+ 
+ 	switch(approximation0){
+-		case MacAyealApproximationEnum:
++		case SSAApproximationEnum:
+ 			switch(approximation1){
+-				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
+-				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
++				case SSAApproximationEnum: return PenaltyCreateKMatrixDiagnosticSSAHO(kmax); 
++				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticSSAHO(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+ 		case HOApproximationEnum:
+ 			switch(approximation1){
+-				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
+-				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
++				case SSAApproximationEnum: return PenaltyCreateKMatrixDiagnosticSSAHO(kmax); 
++				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticSSAHO(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+ 		case FSApproximationEnum:
+@@ -326,8 +326,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticMacAyealHO {{{*/
+-ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticMacAyealHO(IssmDouble kmax){
++/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticSSAHO {{{*/
++ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticSSAHO(IssmDouble kmax){
+ 
+ 	const int numdof=NUMVERTICES*NDOF2;
+ 	IssmDouble penalty_offset;
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15567)
+@@ -67,7 +67,7 @@
+ 		/*}}}*/
+ 			/*Penpair management: {{{*/
+ 		ElementMatrix* PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax);
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticMacAyealHO(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixDiagnosticSSAHO(IssmDouble kmax);
+ 		ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);
+ 		ElementMatrix* PenaltyCreateKMatrixPrognostic(IssmDouble kmax);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15567)
+@@ -64,7 +64,7 @@
+ 	icefront_eid    = reCast<int,IssmDouble>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]); //matlab indexing
+ 	icefront_mparid = iomodel->numberofelements+1;
+ 
+-	if (in_icefront_type==MacAyeal2dIceFrontEnum || in_icefront_type==MacAyeal3dIceFrontEnum){
++	if (in_icefront_type==SSA2dIceFrontEnum || in_icefront_type==SSA3dIceFrontEnum){
+ 		numnodes    = 2;
+ 		numvertices = 2;
+ 		icefront_node_ids   = xNew<int>(numnodes);
+@@ -151,7 +151,7 @@
+ //	icefront_eid=reCast<int,IssmDouble>( *(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)); //matlab indexing
+ //	icefront_mparid=numberofelements+1; //matlab indexing
+ //
+-	if (in_icefront_type==MacAyeal2dIceFrontEnum || in_icefront_type==MacAyeal3dIceFrontEnum){
++	if (in_icefront_type==SSA2dIceFrontEnum || in_icefront_type==SSA3dIceFrontEnum){
+ //		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+ //		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+ //		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+@@ -374,8 +374,8 @@
+ 	_assert_(nodes);
+ 
+ 	switch(type){
+-		case MacAyeal2dIceFrontEnum:
+-		case MacAyeal3dIceFrontEnum:
++		case SSA2dIceFrontEnum:
++		case SSA3dIceFrontEnum:
+ 			for(int i=0;i<NUMVERTICESSEG;i++) sidlist[i]=nodes[i]->Sid();
+ 			return;
+ #ifdef _HAVE_3D_
+@@ -396,10 +396,10 @@
+ 	inputs->GetInputValue(&type,IceFrontTypeEnum);
+ 
+ 	switch(type){
+-		case MacAyeal2dIceFrontEnum:
++		case SSA2dIceFrontEnum:
+ 			return NUMVERTICESSEG;
+ #ifdef _HAVE_3D_
+-		case MacAyeal3dIceFrontEnum:
++		case SSA3dIceFrontEnum:
+ 			return NUMVERTICESSEG;
+ 		case HOIceFrontEnum:
+ 			return NUMVERTICESQUA;
+@@ -558,11 +558,11 @@
+ 	inputs->GetInputValue(&type,IceFrontTypeEnum);
+ 
+ 	switch(type){
+-		case MacAyeal2dIceFrontEnum:
+-			return CreatePVectorDiagnosticMacAyeal2d();
++		case SSA2dIceFrontEnum:
++			return CreatePVectorDiagnosticSSA2d();
+         #ifdef _HAVE_3D_
+-		case MacAyeal3dIceFrontEnum:
+-			return CreatePVectorDiagnosticMacAyeal3d();
++		case SSA3dIceFrontEnum:
++			return CreatePVectorDiagnosticSSA3d();
+ 		case HOIceFrontEnum:
+ 			return CreatePVectorDiagnosticHO();
+ 		case FSIceFrontEnum:
+@@ -573,8 +573,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Icefront::CreatePVectorDiagnosticMacAyeal2d{{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticMacAyeal2d(void){
++/*FUNCTION Icefront::CreatePVectorDiagnosticSSA2d{{{*/
++ElementVector* Icefront::CreatePVectorDiagnosticSSA2d(void){
+ 
+ 	/*Intermediary*/
+ 	int         ig,index1,index2,fill;
+@@ -594,7 +594,7 @@
+ 	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element vector and vectors*/
+-	ElementVector* pe=new ElementVector(tria->nodes,numnodes,this->parameters,MacAyealApproximationEnum);
++	ElementVector* pe=new ElementVector(tria->nodes,numnodes,this->parameters,SSAApproximationEnum);
+ 	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -668,8 +668,8 @@
+ /*}}}*/
+ #endif
+ #ifdef _HAVE_3D_
+-/*FUNCTION Icefront::CreatePVectorDiagnosticMacAyeal3d{{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticMacAyeal3d(void){
++/*FUNCTION Icefront::CreatePVectorDiagnosticSSA3d{{{*/
++ElementVector* Icefront::CreatePVectorDiagnosticSSA3d(void){
+ 
+ 	Icefront *icefront = NULL;
+ 	Penta    *penta    = NULL;
+@@ -681,12 +681,12 @@
+ 	/*Return if not on bed*/
+ 	if(!penta->IsOnBed() || penta->IsOnWater()) return NULL;
+ 
+-	/*Spawn Tria and call MacAyeal2d*/
++	/*Spawn Tria and call SSA2d*/
+ 	tria    =(Tria*)penta->SpawnTria(0,1,2);
+ 	icefront=(Icefront*)this->copy();
+ 	icefront->element=tria;
+-	icefront->inputs->AddInput(new IntInput(IceFrontTypeEnum,MacAyeal2dIceFrontEnum));
+-	ElementVector* pe=icefront->CreatePVectorDiagnosticMacAyeal2d();
++	icefront->inputs->AddInput(new IntInput(IceFrontTypeEnum,SSA2dIceFrontEnum));
++	ElementVector* pe=icefront->CreatePVectorDiagnosticSSA2d();
+ 
+ 	/*clean-up and return*/
+ 	delete tria->material;
+@@ -869,7 +869,7 @@
+ 	_assert_(nodes);
+ 
+ 	/*How many nodes? :*/
+-	if(type==MacAyeal2dIceFrontEnum || type==MacAyeal3dIceFrontEnum)
++	if(type==SSA2dIceFrontEnum || type==SSA3dIceFrontEnum)
+ 	 numberofnodes=2;
+ 	else 
+ 	 numberofnodes=4;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15567)
+@@ -190,7 +190,7 @@
+ 	switch(analysis_type){
+ 		#ifdef _HAVE_DIAGNOSTIC_
+ 		case DiagnosticHorizAnalysisEnum:
+-			Ke=CreateKMatrixDiagnosticMacAyeal();
++			Ke=CreateKMatrixDiagnosticSSA();
+ 			break;
+ 		case DiagnosticSIAAnalysisEnum:
+ 			Ke=CreateKMatrixDiagnosticSIA();
+@@ -223,7 +223,7 @@
+ 			Ke=CreateKMatrixAdjointBalancethickness();
+ 			break;
+ 		case AdjointHorizAnalysisEnum:
+-			Ke=CreateKMatrixAdjointMacAyeal();
++			Ke=CreateKMatrixAdjointSSA();
+ 			break;
+ 		#endif
+ 		default:
+@@ -303,7 +303,7 @@
+ 	switch(analysis_type){
+ 		#ifdef _HAVE_DIAGNOSTIC_
+ 		case DiagnosticHorizAnalysisEnum:
+-			pe=CreatePVectorDiagnosticMacAyeal();
++			pe=CreatePVectorDiagnosticSSA();
+ 			break;
+ 		case DiagnosticSIAAnalysisEnum:
+ 			pe=CreatePVectorDiagnosticSIA();
+@@ -2885,12 +2885,12 @@
+ #endif
+ 
+ #ifdef _HAVE_DIAGNOSTIC_
+-/*FUNCTION Tria::CreateKMatrixDiagnosticMacAyeal {{{*/
+-ElementMatrix* Tria::CreateKMatrixDiagnosticMacAyeal(void){
++/*FUNCTION Tria::CreateKMatrixDiagnosticSSA {{{*/
++ElementMatrix* Tria::CreateKMatrixDiagnosticSSA(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyealViscous();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticMacAyealFriction();
++	ElementMatrix* Ke1=CreateKMatrixDiagnosticSSAViscous();
++	ElementMatrix* Ke2=CreateKMatrixDiagnosticSSAFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -2899,8 +2899,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixDiagnosticMacAyealViscous{{{*/
+-ElementMatrix* Tria::CreateKMatrixDiagnosticMacAyealViscous(void){
++/*FUNCTION Tria::CreateKMatrixDiagnosticSSAViscous{{{*/
++ElementMatrix* Tria::CreateKMatrixDiagnosticSSAViscous(void){
+ 
+ 	/*Intermediaries*/
+ 	int        i,j;
+@@ -2915,7 +2915,7 @@
+ 	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,MacAyealApproximationEnum);
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,SSAApproximationEnum);
+ 	IssmDouble*    B      = xNew<IssmDouble>(3*numdof);
+ 	IssmDouble*    Bprime = xNew<IssmDouble>(3*numdof);
+ 	IssmDouble*    D      = xNewZeroInit<IssmDouble>(3*3);
+@@ -2936,8 +2936,8 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBMacAyeal(&B[0], &xyz_list[0][0], gauss);
+-		GetBprimeMacAyeal(&Bprime[0], &xyz_list[0][0], gauss);
++		GetBSSA(&B[0], &xyz_list[0][0], gauss);
++		GetBprimeSSA(&Bprime[0], &xyz_list[0][0], gauss);
+ 
+ 		this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 		this->GetStrainRate2d(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+@@ -2966,8 +2966,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixDiagnosticMacAyealFriction {{{*/
+-ElementMatrix* Tria::CreateKMatrixDiagnosticMacAyealFriction(void){
++/*FUNCTION Tria::CreateKMatrixDiagnosticSSAFriction {{{*/
++ElementMatrix* Tria::CreateKMatrixDiagnosticSSAFriction(void){
+ 
+ 	/*Intermediaries*/
+ 	bool       mainlyfloating;
+@@ -2992,7 +2992,7 @@
+ 	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,MacAyealApproximationEnum);
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,SSAApproximationEnum);
+ 	IssmDouble*    B      = xNew<IssmDouble>(2*numdof);
+ 	IssmDouble*    D      = xNewZeroInit<IssmDouble>(2*2);
+ 
+@@ -3032,7 +3032,7 @@
+ 			if(gllevelset<0) alpha2=0;
+ 		}
+ 
+-		GetBMacAyealFriction(&B[0], &xyz_list[0][0], gauss);
++		GetBSSAFriction(&B[0], &xyz_list[0][0], gauss);
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		D_scalar=alpha2*gauss->weight*Jdet;
+ 		for(i=0;i<2;i++) D[i*2+i]=D_scalar;
+@@ -3075,12 +3075,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorDiagnosticMacAyeal {{{*/
+-ElementVector* Tria::CreatePVectorDiagnosticMacAyeal(){
++/*FUNCTION Tria::CreatePVectorDiagnosticSSA {{{*/
++ElementVector* Tria::CreatePVectorDiagnosticSSA(){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticMacAyealDrivingStress();
+-	ElementVector* pe2=CreatePVectorDiagnosticMacAyealFront();
++	ElementVector* pe1=CreatePVectorDiagnosticSSADrivingStress();
++	ElementVector* pe2=CreatePVectorDiagnosticSSAFront();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -3089,8 +3089,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorDiagnosticMacAyealDrivingStress {{{*/
+-ElementVector* Tria::CreatePVectorDiagnosticMacAyealDrivingStress(){
++/*FUNCTION Tria::CreatePVectorDiagnosticSSADrivingStress {{{*/
++ElementVector* Tria::CreatePVectorDiagnosticSSADrivingStress(){
+ 
+ 	/*Intermediaries */
+ 	int            i,j;
+@@ -3105,7 +3105,7 @@
+ 	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element vector and vectors*/
+-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,MacAyealApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,SSAApproximationEnum);
+ 	GaussTria*     gauss  = new GaussTria(2);
+ 	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+@@ -3145,8 +3145,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorDiagnosticMacAyealFront {{{*/
+-ElementVector* Tria::CreatePVectorDiagnosticMacAyealFront(){
++/*FUNCTION Tria::CreatePVectorDiagnosticSSAFront {{{*/
++ElementVector* Tria::CreatePVectorDiagnosticSSAFront(){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble  ls[3];
+@@ -3180,7 +3180,7 @@
+ 	IssmDouble  normal[2];
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,MacAyealApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,SSAApproximationEnum);
+ 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 	Input* bed_input      =inputs->GetInput(BedEnum);       _assert_(bed_input);
+ 	rho_water=matpar->GetRhoWater();
+@@ -3292,7 +3292,7 @@
+ 	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element matrix, vectors and Gaussian points*/
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticMacAyeal(); //Initialize Jacobian with regular MacAyeal (first part of the Gateau derivative)
++	ElementMatrix* Ke=CreateKMatrixDiagnosticSSA(); //Initialize Jacobian with regular SSA (first part of the Gateau derivative)
+ 	IssmDouble*    dbasis = xNew<IssmDouble>(2*numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -3729,13 +3729,13 @@
+ 	/*First deal with ∂/∂alpha(KU-F)*/
+ 	switch(control_type){
+ 		case FrictionCoefficientEnum:
+-			GradjDragMacAyeal(gradient,control_index);
++			GradjDragSSA(gradient,control_index);
+ 			break;
+ 		case MaterialsRheologyBbarEnum:
+-			GradjBMacAyeal(gradient,control_index);
++			GradjBSSA(gradient,control_index);
+ 			break;
+ 		case MaterialsRheologyZbarEnum:
+-			GradjZMacAyeal(gradient,control_index);
++			GradjZSSA(gradient,control_index);
+ 			break;
+ 		case BalancethicknessThickeningRateEnum:
+ 			GradjDhDtBalancedthickness(gradient,control_index);
+@@ -3867,8 +3867,8 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GradjBMacAyeal{{{*/
+-void  Tria::GradjBMacAyeal(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Tria::GradjBSSA{{{*/
++void  Tria::GradjBSSA(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Intermediaries*/
+ 	int        i;
+@@ -3924,8 +3924,8 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GradjZMacAyeal{{{*/
+-void  Tria::GradjZMacAyeal(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Tria::GradjZSSA{{{*/
++void  Tria::GradjZSSA(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Intermediaries*/
+ 	int        i;
+@@ -3981,8 +3981,8 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GradjDragMacAyeal {{{*/
+-void  Tria::GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Tria::GradjDragSSA {{{*/
++void  Tria::GradjDragSSA(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	int        i;
+ 	int        analysis_type;
+@@ -5384,8 +5384,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixAdjointMacAyeal{{{*/
+-ElementMatrix* Tria::CreateKMatrixAdjointMacAyeal(void){
++/*FUNCTION Tria::CreateKMatrixAdjointSSA{{{*/
++ElementMatrix* Tria::CreateKMatrixAdjointSSA(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes = this->NumberofNodes();
+@@ -5403,9 +5403,9 @@
+ 	IssmDouble  eps1[2],eps2[2];
+ 	GaussTria  *gauss=NULL;
+ 
+-	/*Initialize Jacobian with regular MacAyeal (first part of the Gateau derivative)*/
++	/*Initialize Jacobian with regular SSA (first part of the Gateau derivative)*/
+ 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticMacAyeal();
++	ElementMatrix* Ke=CreateKMatrixDiagnosticSSA();
+ 	if(incomplete_adjoint) return Ke;
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -6518,7 +6518,7 @@
+ 			D[1][1]=h/(2*vel)*vy*vy;
+ 		}
+ 		else if(stabilization==1){
+-			/*MacAyeal*/
++			/*SSA*/
+ 			vxaverage_input->GetInputAverage(&vx);
+ 			vyaverage_input->GetInputAverage(&vy);
+ 			D[0][0]=h/2.0*fabs(vx);
+@@ -6977,7 +6977,7 @@
+ 			K[1][1]=h/(2*vel)*vy*vy;
+ 		}
+ 		else if(stabilization==2){
+-			/*MacAyeal*/
++			/*SSA*/
+ 			vxaverage_input->GetInputAverage(&vx);
+ 			vyaverage_input->GetInputAverage(&vy);
+ 			K[0][0]=h/2.0*fabs(vx);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 15567)
+@@ -22,14 +22,14 @@
+ 		void SetElementType(int type,int type_counter);
+ 
+ 		/*Numerics*/
+-		void GetBMacAyeal(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+-		void GetBMacAyealFS(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
+-		void GetBprimeMacAyeal(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+-		void GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBSSA(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBSSAFS(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBprimeSSA(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBprimeSSAFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBprimePrognostic(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBPrognostic(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBHydro(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+-		void GetBMacAyealFriction(IssmDouble* L, IssmDouble* xyz_list,GaussTria* gauss);
++		void GetBSSAFriction(IssmDouble* L, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetSegmentJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15567)
+@@ -53,8 +53,8 @@
+ /*}}}*/
+ 
+ /*Reference Element numerics*/
+-/*FUNCTION PentaRef::GetBMacAyealHO {{{*/
+-void PentaRef::GetBMacAyealHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBSSAHO {{{*/
++void PentaRef::GetBSSAHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -84,8 +84,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBMacAyealFS{{{*/
+-void PentaRef::GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBSSAFS{{{*/
++void PentaRef::GetBSSAFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -208,8 +208,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBprimeMacAyealFS{{{*/
+-void PentaRef::GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBprimeSSAFS{{{*/
++void PentaRef::GetBprimeSSAFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/*Compute Bprime  matrix. Bprime=[Bprime1 Bprime2 Bprime3 Bprime4 Bprime5 Bprime6] where Bprimei is of size 5*NDOF2. 
+ 	 * For node i, Bprimei can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -785,8 +785,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLMacAyealFS {{{*/
+-void PentaRef::GetLMacAyealFS(IssmDouble* LFS, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLSSAFS {{{*/
++void PentaRef::GetLSSAFS(IssmDouble* LFS, GaussPenta* gauss){
+ 	/*
+ 	 * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+@@ -831,8 +831,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLprimeMacAyealFS {{{*/
+-void PentaRef::GetLprimeMacAyealFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLprimeSSAFS {{{*/
++void PentaRef::GetLprimeSSAFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
+ 	 * For node i, Lpi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -894,8 +894,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLFSMacAyeal {{{*/
+-void PentaRef::GetLFSMacAyeal(IssmDouble* LFS, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLFSSSA {{{*/
++void PentaRef::GetLFSSSA(IssmDouble* LFS, GaussPenta* gauss){
+ 	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -935,8 +935,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetLprimeFSMacAyeal {{{*/
+-void PentaRef::GetLprimeFSMacAyeal(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetLprimeFSSSA {{{*/
++void PentaRef::GetLprimeFSSSA(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
+ 	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
+ 	 * For node i, Lpi can be expressed in the actual coordinate system
+ 	 * by: 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15567)
+@@ -143,9 +143,9 @@
+ 		void   Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
+ 		void   GradjBGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+ 		void   GradjZGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+-		void   GradjBMacAyeal(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjZMacAyeal(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjBSSA(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjZSSA(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjDragSSA(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjDragGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+ 		void   GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+@@ -219,13 +219,13 @@
+ 		void             UpdateConstraints(void);
+ 
+ 		#ifdef _HAVE_DIAGNOSTIC_
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyeal(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyealViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyealFriction(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSA(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSAViscous(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSAFriction(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticSIA(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyeal(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyealDrivingStress(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyealFront(void);
++		ElementVector* CreatePVectorDiagnosticSSA(void);
++		ElementVector* CreatePVectorDiagnosticSSADrivingStress(void);
++		ElementVector* CreatePVectorDiagnosticSSAFront(void);
+ 		ElementVector* CreatePVectorDiagnosticSIA(void);
+ 		ElementMatrix* CreateJacobianDiagnosticSSA(void);
+ 		void	  GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution);
+@@ -236,7 +236,7 @@
+ 
+ 		#ifdef _HAVE_CONTROL_
+ 		ElementMatrix* CreateKMatrixAdjointBalancethickness(void);
+-		ElementMatrix* CreateKMatrixAdjointMacAyeal(void);
++		ElementMatrix* CreateKMatrixAdjointSSA(void);
+ 		ElementVector* CreatePVectorAdjointHoriz(void);
+ 		ElementVector* CreatePVectorAdjointFS(void);
+ 		ElementVector* CreatePVectorAdjointBalancethickness(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15567)
+@@ -1192,10 +1192,10 @@
+ 		if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+ 			GetSolutionFromInputsDiagnosticFS(solution);
+ 		}
+-		else if (approximation==MacAyealApproximationEnum || approximation==HOApproximationEnum || approximation==SIAApproximationEnum){
++		else if (approximation==SSAApproximationEnum || approximation==HOApproximationEnum || approximation==SIAApproximationEnum){
+ 			GetSolutionFromInputsDiagnosticHoriz(solution);
+ 		}
+-		else if (approximation==MacAyealHOApproximationEnum || approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++		else if (approximation==SSAHOApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+ 			return; //the elements around will create the solution
+ 		}
+ 		break;
+@@ -1969,14 +1969,14 @@
+ 
+ 	//Need to know the type of approximation for this element
+ 	if(iomodel->Data(FlowequationElementEquationEnum)){
+-		if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealApproximationEnum));
++		if (iomodel->Data(FlowequationElementEquationEnum)[index]==SSAApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,SSAApproximationEnum));
+ 		}
+ 		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOApproximationEnum){
+ 			this->inputs->AddInput(new IntInput(ApproximationEnum,HOApproximationEnum));
+ 		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealHOApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealHOApproximationEnum));
++		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SSAHOApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,SSAHOApproximationEnum));
+ 		}
+ 		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SIAApproximationEnum){
+ 			this->inputs->AddInput(new IntInput(ApproximationEnum,SIAApproximationEnum));
+@@ -1987,8 +1987,8 @@
+ 		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==FSApproximationEnum){
+ 			this->inputs->AddInput(new IntInput(ApproximationEnum,FSApproximationEnum));
+ 		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealFSApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealFSApproximationEnum));
++		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SSAFSApproximationEnum){
++			this->inputs->AddInput(new IntInput(ApproximationEnum,SSAFSApproximationEnum));
+ 		}
+ 		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOFSApproximationEnum){
+ 			this->inputs->AddInput(new IntInput(ApproximationEnum,HOFSApproximationEnum));
+@@ -2787,7 +2787,7 @@
+ 
+ 	/*For FS only: we want the CS to be tangential to the bedrock*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return;
++	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return;
+ 
+ 	/*Get slope on each node*/
+ 	GetInputListOnVertices(&slopex[0],BedSlopeXEnum);
+@@ -2882,7 +2882,7 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	if(analysis_type==DiagnosticHorizAnalysisEnum){
+ 		inputs->GetInputValue(&approximation,ApproximationEnum);
+-		if(approximation==MacAyealHOApproximationEnum || approximation==MacAyealFSApproximationEnum){
++		if(approximation==SSAHOApproximationEnum || approximation==SSAFSApproximationEnum){
+ 			parameters->FindParam(&numlayers,MeshNumberoflayersEnum);
+ 			o_nz += numlayers*3;
+ 			d_nz += numlayers*3;
+@@ -2998,12 +2998,12 @@
+ 	if(IsOnWater())return 0;
+ 
+ 	/*Bail out if this element if:
+-	 * -> Non MacAyeal not on the surface
+-	 * -> MacAyeal (2d model) and not on bed) */
+-	if ((approximation!=MacAyealApproximationEnum && !IsOnSurface()) || (approximation==MacAyealApproximationEnum && !IsOnBed())){
++	 * -> Non SSA not on the surface
++	 * -> SSA (2d model) and not on bed) */
++	if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBed())){
+ 		return 0;
+ 	}
+-	else if (approximation==MacAyealApproximationEnum){
++	else if (approximation==SSAApproximationEnum){
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceArea*/
+@@ -3193,18 +3193,18 @@
+ 					this->inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum));
+ 				}
+ 			}
+-			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==MacAyealFSApproximationEnum){
+-				/*Create VzMacAyeal and VzFS Enums*/
++			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==SSAFSApproximationEnum){
++				/*Create VzSSA and VzFS Enums*/
+ 				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){
+ 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1];
+ 					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
+ 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]);
+-					this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(VzSSAEnum,nodeinputs,P1Enum));
+ 				}
+ 				else{
+ 					for(i=0;i<6;i++)nodeinputs[i]=0;
+ 					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
+-					this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum));
++					this->inputs->AddInput(new PentaInput(VzSSAEnum,nodeinputs,P1Enum));
+ 				}
+ 			}
+ 			break;
+@@ -4773,8 +4773,8 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+-		case MacAyealApproximationEnum:
+-			return CreateKMatrixAdjointMacAyeal2d();
++		case SSAApproximationEnum:
++			return CreateKMatrixAdjointSSA2d();
+ 		case HOApproximationEnum:
+ 			return CreateKMatrixAdjointHO();
+ 		case FSApproximationEnum:
+@@ -4786,8 +4786,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixAdjointMacAyeal2d{{{*/
+-ElementMatrix* Penta::CreateKMatrixAdjointMacAyeal2d(void){
++/*FUNCTION Penta::CreateKMatrixAdjointSSA2d{{{*/
++ElementMatrix* Penta::CreateKMatrixAdjointSSA2d(void){
+ 
+ 	/*Figure out if this penta is collapsed. If so, then bailout, except if it is at the 
+ 	  bedrock, in which case we spawn a tria element using the 3 first nodes, and use it to build 
+@@ -4809,7 +4809,7 @@
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-	ElementMatrix* Ke=tria->CreateKMatrixAdjointMacAyeal();
++	ElementMatrix* Ke=tria->CreateKMatrixAdjointSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Delete averaged fields*/
+@@ -4970,8 +4970,8 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+-		case MacAyealApproximationEnum:
+-			return CreatePVectorAdjointMacAyeal();
++		case SSAApproximationEnum:
++			return CreatePVectorAdjointSSA();
+ 		case HOApproximationEnum:
+ 			return CreatePVectorAdjointHO();
+ 		case NoneApproximationEnum:
+@@ -4983,8 +4983,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorAdjointMacAyeal{{{*/
+-ElementVector* Penta::CreatePVectorAdjointMacAyeal(){
++/*FUNCTION Penta::CreatePVectorAdjointSSA{{{*/
++ElementVector* Penta::CreatePVectorAdjointSSA(){
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+@@ -5055,8 +5055,8 @@
+ 		case FrictionCoefficientEnum:
+ 			inputs->GetInputValue(&approximation,ApproximationEnum);
+ 			switch(approximation){
+-				case MacAyealApproximationEnum:
+-					GradjDragMacAyeal(gradient,control_index);
++				case SSAApproximationEnum:
++					GradjDragSSA(gradient,control_index);
+ 					break;
+ 				case HOApproximationEnum:
+ 					GradjDragHO(gradient,control_index);
+@@ -5075,8 +5075,8 @@
+ 		case MaterialsRheologyBbarEnum:
+ 			inputs->GetInputValue(&approximation,ApproximationEnum);
+ 			switch(approximation){
+-				case MacAyealApproximationEnum:
+-					GradjBbarMacAyeal(gradient,control_index);
++				case SSAApproximationEnum:
++					GradjBbarSSA(gradient,control_index);
+ 					break;
+ 				case HOApproximationEnum:
+ 					GradjBbarHO(gradient,control_index);
+@@ -5130,15 +5130,15 @@
+ 	xDelete<int>(responses);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GradjDragMacAyeal {{{*/
+-void  Penta::GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Penta::GradjDragSSA {{{*/
++void  Penta::GradjDragSSA(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Gradient is 0 if on shelf or not on bed*/
+ 	if(IsFloating() || !IsOnBed()) return;
+ 
+ 	/*Spawn tria*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-	tria->GradjDragMacAyeal(gradient,control_index);
++	tria->GradjDragSSA(gradient,control_index);
+ 	delete tria->material; delete tria;
+ 
+ } /*}}}*/
+@@ -5305,8 +5305,8 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GradjBbarMacAyeal {{{*/
+-void  Penta::GradjBbarMacAyeal(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Penta::GradjBbarSSA {{{*/
++void  Penta::GradjBbarSSA(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*This element should be collapsed into a tria element at its base*/
+ 	if (!IsOnBed()) return; 
+@@ -5316,7 +5316,7 @@
+ 
+ 	/*Collapse element to the base*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria (lower face).
+-	tria->GradjBMacAyeal(gradient,control_index);
++	tria->GradjBSSA(gradient,control_index);
+ 	delete tria->material; delete tria;
+ 
+ 	/*delete Average B*/
+@@ -5334,7 +5334,7 @@
+ 
+ 	/*Collapse element to the base*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2);
+-	tria->GradjBMacAyeal(gradient,control_index);    //We use MacAyeal as an estimate for now
++	tria->GradjBSSA(gradient,control_index);    //We use SSA as an estimate for now
+ 	delete tria->material; delete tria;
+ 
+ 	/*delete Average B*/
+@@ -5351,7 +5351,7 @@
+ 
+ 	/*Collapse element to the base*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2);
+-	tria->GradjBMacAyeal(gradient,control_index);    //We use MacAyeal as an estimate for now
++	tria->GradjBSSA(gradient,control_index);    //We use SSA as an estimate for now
+ 	delete tria->material; delete tria;
+ 
+ 	/*delete Average B*/
+@@ -5494,12 +5494,12 @@
+ 	if(IsOnWater())return 0;
+ 
+ 	/*Bail out if this element if:
+-	 * -> Non MacAyeal and not on the surface
+-	 * -> MacAyeal (2d model) and not on bed) */
+-	if ((approximation!=MacAyealApproximationEnum && !IsOnSurface()) || (approximation==MacAyealApproximationEnum && !IsOnBed())){
++	 * -> Non SSA and not on the surface
++	 * -> SSA (2d model) and not on bed) */
++	if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBed())){
+ 		return 0;
+ 	}
+-	else if (approximation==MacAyealApproximationEnum){
++	else if (approximation==SSAApproximationEnum){
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceAverageVelMisfit*/
+@@ -5531,12 +5531,12 @@
+ 	if(IsOnWater())return 0;
+ 
+ 	/*Bail out if this element if:
+-	 * -> Non MacAyeal and not on the surface
+-	 * -> MacAyeal (2d model) and not on bed) */
+-	if ((approximation!=MacAyealApproximationEnum && !IsOnSurface()) || (approximation==MacAyealApproximationEnum && !IsOnBed())){
++	 * -> Non SSA and not on the surface
++	 * -> SSA (2d model) and not on bed) */
++	if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBed())){
+ 		return 0;
+ 	}
+-	else if (approximation==MacAyealApproximationEnum){
++	else if (approximation==SSAApproximationEnum){
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceAbsVelMisfit*/
+@@ -5568,12 +5568,12 @@
+ 	if(IsOnWater())return 0;
+ 
+ 	/*Bail out if this element if:
+-	 * -> Non MacAyeal and not on the surface
+-	 * -> MacAyeal (2d model) and not on bed) */
+-	if ((approximation!=MacAyealApproximationEnum && !IsOnSurface()) || (approximation==MacAyealApproximationEnum && !IsOnBed())){
++	 * -> Non SSA and not on the surface
++	 * -> SSA (2d model) and not on bed) */
++	if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBed())){
+ 		return 0;
+ 	}
+-	else if (approximation==MacAyealApproximationEnum){
++	else if (approximation==SSAApproximationEnum){
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceLogVelMisfit*/
+@@ -5607,12 +5607,12 @@
+ 	if(IsOnWater())return 0;
+ 
+ 	/*Bail out if this element if:
+-	 * -> Non MacAyeal and not on the surface
+-	 * -> MacAyeal (2d model) and not on bed) */
+-	if ((approximation!=MacAyealApproximationEnum && !IsOnSurface()) || (approximation==MacAyealApproximationEnum && !IsOnBed())){
++	 * -> Non SSA and not on the surface
++	 * -> SSA (2d model) and not on bed) */
++	if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBed())){
+ 		return 0;
+ 	}
+-	else if (approximation==MacAyealApproximationEnum){
++	else if (approximation==SSAApproximationEnum){
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceLogVxVyMisfit*/
+@@ -5644,12 +5644,12 @@
+ 	if(IsOnWater())return 0;
+ 
+ 	/*Bail out if this element if:
+-	 * -> Non MacAyeal and not on the surface
+-	 * -> MacAyeal (2d model) and not on bed) */
+-	if ((approximation!=MacAyealApproximationEnum && !IsOnSurface()) || (approximation==MacAyealApproximationEnum && !IsOnBed())){
++	 * -> Non SSA and not on the surface
++	 * -> SSA (2d model) and not on bed) */
++	if ((approximation!=SSAApproximationEnum && !IsOnSurface()) || (approximation==SSAApproximationEnum && !IsOnBed())){
+ 		return 0;
+ 	}
+-	else if (approximation==MacAyealApproximationEnum){
++	else if (approximation==SSAApproximationEnum){
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceRelVelMisfit*/
+@@ -5982,12 +5982,12 @@
+ 	return De;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHO{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHO(void){
++/*FUNCTION Penta::CreateKMatrixCouplingSSAHO{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingSSAHO(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealHOViscous();
+-	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealHOFriction();
++	ElementMatrix* Ke1=CreateKMatrixCouplingSSAHOViscous();
++	ElementMatrix* Ke2=CreateKMatrixCouplingSSAHOFriction();
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -5996,8 +5996,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHOViscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHOViscous(void){
++/*FUNCTION Penta::CreateKMatrixCouplingSSAHOViscous{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingSSAHOViscous(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes    = 2 *NUMVERTICES;
+@@ -6035,7 +6035,7 @@
+ 	}
+ 
+ 	/*Initialize Element matrix*/
+-	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
++	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+@@ -6057,8 +6057,8 @@
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBMacAyealHO(&B[0][0], &xyz_list[0][0], gauss);
+-		tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
++		GetBSSAHO(&B[0][0], &xyz_list[0][0], gauss);
++		tria->GetBprimeSSA(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
+ 
+ 		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 		this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+@@ -6089,8 +6089,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHOFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHOFriction(void){
++/*FUNCTION Penta::CreateKMatrixCouplingSSAHOFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingSSAHOFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes    = 2 *NUMVERTICES;
+@@ -6114,7 +6114,7 @@
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+-	ElementMatrix* Ke1=new ElementMatrix(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
++	ElementMatrix* Ke1=new ElementMatrix(nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+@@ -6174,12 +6174,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFS{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFS(void){
++/*FUNCTION Penta::CreateKMatrixCouplingSSAFS{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingSSAFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealFSViscous();
+-	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealFSFriction();
++	ElementMatrix* Ke1=CreateKMatrixCouplingSSAFSViscous();
++	ElementMatrix* Ke2=CreateKMatrixCouplingSSAFSFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -6188,8 +6188,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFSViscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFSViscous(void){
++/*FUNCTION Penta::CreateKMatrixCouplingSSAFSViscous{{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingSSAFSViscous(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes    = 2 *NUMVERTICES;
+@@ -6232,7 +6232,7 @@
+ 	}
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+-	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
++	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+@@ -6253,10 +6253,10 @@
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBMacAyealFS(&B[0][0], &xyz_list[0][0], gauss);
+-		tria->GetBprimeMacAyealFS(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
+-		tria->GetBMacAyealFS(&B2[0][0], &xyz_list[0][0], gauss_tria);
+-		GetBprimeMacAyealFS(&Bprime2[0][0], &xyz_list[0][0], gauss);
++		GetBSSAFS(&B[0][0], &xyz_list[0][0], gauss);
++		tria->GetBprimeSSAFS(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
++		tria->GetBSSAFS(&B2[0][0], &xyz_list[0][0], gauss_tria);
++		GetBprimeSSAFS(&Bprime2[0][0], &xyz_list[0][0], gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dFS(&viscosity, &epsilon[0]);
+@@ -6292,8 +6292,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFSFriction {{{*/
+-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFSFriction(void){
++/*FUNCTION Penta::CreateKMatrixCouplingSSAFSFriction {{{*/
++ElementMatrix* Penta::CreateKMatrixCouplingSSAFSFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numnodes  = 2 *NUMVERTICES;
+@@ -6312,12 +6312,12 @@
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble LMacAyealFS[8][numdof2dm];
+-	IssmDouble LprimeMacAyealFS[8][numdof2d];
+-	IssmDouble DLMacAyealFS[8][8]={0.0};
+-	IssmDouble LFSMacAyeal[4][numdof2d];
+-	IssmDouble LprimeFSMacAyeal[4][numdof2dm];
+-	IssmDouble DLFSMacAyeal[4][4]={0.0};
++	IssmDouble LSSAFS[8][numdof2dm];
++	IssmDouble LprimeSSAFS[8][numdof2d];
++	IssmDouble DLSSAFS[8][8]={0.0};
++	IssmDouble LFSSSA[4][numdof2d];
++	IssmDouble LprimeFSSSA[4][numdof2dm];
++	IssmDouble DLFSSSA[4][4]={0.0};
+ 	IssmDouble Ke_drag_gaussian[numdof2dm][numdof2d];
+ 	IssmDouble Ke_drag_gaussian2[numdof2d][numdof2dm];
+ 	Friction*  friction=NULL;
+@@ -6328,7 +6328,7 @@
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+-	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
++	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+@@ -6360,10 +6360,10 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
+-		GetLMacAyealFS(&LMacAyealFS[0][0], gauss);
+-		GetLprimeMacAyealFS(&LprimeMacAyealFS[0][0], &xyz_list[0][0], gauss);
+-		GetLFSMacAyeal(&LFSMacAyeal[0][0], gauss);
+-		GetLprimeFSMacAyeal(&LprimeFSMacAyeal[0][0], &xyz_list[0][0], gauss);
++		GetLSSAFS(&LSSAFS[0][0], gauss);
++		GetLprimeSSAFS(&LprimeSSAFS[0][0], &xyz_list[0][0], gauss);
++		GetLFSSSA(&LFSSSA[0][0], gauss);
++		GetLprimeFSSSA(&LprimeFSSSA[0][0], &xyz_list[0][0], gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+@@ -6371,28 +6371,28 @@
+ 		BedNormal(&bed_normal[0],xyz_list_tria);
+ 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
+ 
+-		DLMacAyealFS[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
+-		DLMacAyealFS[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
+-		DLMacAyealFS[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
+-		DLMacAyealFS[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
+-		DLMacAyealFS[4][4]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0];
+-		DLMacAyealFS[5][5]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1];
+-		DLMacAyealFS[6][6]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[0];
+-		DLMacAyealFS[7][7]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[1];
++		DLSSAFS[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
++		DLSSAFS[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
++		DLSSAFS[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
++		DLSSAFS[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
++		DLSSAFS[4][4]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0];
++		DLSSAFS[5][5]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1];
++		DLSSAFS[6][6]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[0];
++		DLSSAFS[7][7]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[1];
+ 
+-		DLFSMacAyeal[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
+-		DLFSMacAyeal[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
+-		DLFSMacAyeal[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
+-		DLFSMacAyeal[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
++		DLFSSSA[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
++		DLFSSSA[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
++		DLFSSSA[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
++		DLFSSSA[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
+ 
+-		TripleMultiply( &LMacAyealFS[0][0],8,numdof2dm,1,
+-					&DLMacAyealFS[0][0],8,8,0,
+-					&LprimeMacAyealFS[0][0],8,numdof2d,0,
++		TripleMultiply( &LSSAFS[0][0],8,numdof2dm,1,
++					&DLSSAFS[0][0],8,8,0,
++					&LprimeSSAFS[0][0],8,numdof2d,0,
+ 					&Ke_drag_gaussian[0][0],0);
+ 
+-		TripleMultiply( &LFSMacAyeal[0][0],4,numdof2d,1,
+-					&DLFSMacAyeal[0][0],4,4,0,
+-					&LprimeFSMacAyeal[0][0],4,numdof2dm,0,
++		TripleMultiply( &LFSSSA[0][0],4,numdof2d,1,
++					&DLFSSSA[0][0],4,4,0,
++					&LprimeFSSSA[0][0],4,numdof2dm,0,
+ 					&Ke_drag_gaussian2[0][0],0);
+ 
+ 		for(i=0;i<numdof2dm;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdoftot+j+numdofm]+=Ke_drag_gaussian[i][j];
+@@ -6464,8 +6464,8 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+-		case MacAyealApproximationEnum:
+-			return CreateKMatrixDiagnosticMacAyeal2d();
++		case SSAApproximationEnum:
++			return CreateKMatrixDiagnosticSSA2d();
+ 		case L1L2ApproximationEnum:
+ 			return CreateKMatrixDiagnosticL1L2();
+ 		case HOApproximationEnum:
+@@ -6476,10 +6476,10 @@
+ 			return NULL;
+ 		case NoneApproximationEnum:
+ 			return NULL;
+-		case MacAyealHOApproximationEnum:
+-			return CreateKMatrixDiagnosticMacAyealHO();
+-		case MacAyealFSApproximationEnum:
+-			return CreateKMatrixDiagnosticMacAyealFS();
++		case SSAHOApproximationEnum:
++			return CreateKMatrixDiagnosticSSAHO();
++		case SSAFSApproximationEnum:
++			return CreateKMatrixDiagnosticSSAFS();
+ 		case HOFSApproximationEnum:
+ 			return CreateKMatrixDiagnosticHOFS();
+ 		default:
+@@ -6550,8 +6550,8 @@
+ 	/*Clean up and return*/
+ 	return Ke;
+ }/*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyeal2d{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyeal2d(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticSSA2d{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticSSA2d(void){
+ 
+ 	/*Figure out if this penta is collapsed. If so, then bailout, except if it is at the 
+ 	  bedrock, in which case we spawn a tria element using the 3 first nodes, and use it to build 
+@@ -6573,7 +6573,7 @@
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticMacAyeal();
++	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Delete averaged fields*/
+@@ -6584,12 +6584,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyeal3d{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyeal3d(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticSSA3d{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticSSA3d(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3dViscous();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticMacAyeal3dFriction();
++	ElementMatrix* Ke1=CreateKMatrixDiagnosticSSA3dViscous();
++	ElementMatrix* Ke2=CreateKMatrixDiagnosticSSA3dFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -6598,8 +6598,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyeal3dViscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyeal3dViscous(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticSSA3dViscous{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticSSA3dViscous(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof2d=2*NUMVERTICES2D;
+@@ -6626,7 +6626,7 @@
+ 	tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 
+ 	/*Initialize Element matrix*/
+-	ElementMatrix* Ke=new ElementMatrix(tria->nodes,NUMVERTICES2D,this->parameters,MacAyealApproximationEnum);
++	ElementMatrix* Ke=new ElementMatrix(tria->nodes,NUMVERTICES2D,this->parameters,SSAApproximationEnum);
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -6647,10 +6647,10 @@
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		tria->GetBMacAyeal(&B[0][0], &xyz_list[0][0], gauss_tria);
+-		tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
++		tria->GetBSSA(&B[0][0], &xyz_list[0][0], gauss_tria);
++		tria->GetBprimeSSA(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
+ 
+-		if(approximation==MacAyealHOApproximationEnum){
++		if(approximation==SSAHOApproximationEnum){
+ 			this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 			this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+ 			material->GetViscosity3d(&viscosity, &epsilon[0]);
+@@ -6658,7 +6658,7 @@
+ 
+ 			newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+ 		}
+-		else if (approximation==MacAyealFSApproximationEnum){
++		else if (approximation==SSAFSApproximationEnum){
+ 			this->GetStrainRate3d(&epsilons[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 			material->GetViscosity3dFS(&newviscosity,&epsilons[0]);
+ 		}
+@@ -6686,8 +6686,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyeal3dFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyeal3dFriction(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticSSA3dFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticSSA3dFriction(void){
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+@@ -6696,20 +6696,20 @@
+ 	 * the tria functionality to build a friction stiffness matrix on these 3
+ 	 * nodes: */
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticMacAyealFriction();
++	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSAFriction();
+ 	delete tria->material; delete tria;
+ 
+ 	/*clean-up and return*/
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealHO{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealHO(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticSSAHO{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticSSAHO(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3d();
++	ElementMatrix* Ke1=CreateKMatrixDiagnosticSSA3d();
+ 	ElementMatrix* Ke2=CreateKMatrixDiagnosticHO();
+-	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealHO();
++	ElementMatrix* Ke3=CreateKMatrixCouplingSSAHO();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+ 
+ 	/*clean-up and return*/
+@@ -6719,13 +6719,13 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealFS{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealFS(void){
++/*FUNCTION Penta::CreateKMatrixDiagnosticSSAFS{{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticSSAFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3d();
++	ElementMatrix* Ke1=CreateKMatrixDiagnosticSSA3d();
+ 	ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();
+-	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealFS();
++	ElementMatrix* Ke3=CreateKMatrixCouplingSSAFS();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+ 
+ 	/*clean-up and return*/
+@@ -6791,8 +6791,8 @@
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		tria->GetBMacAyeal(&B[0][0], &xyz_list[0][0], gauss_tria);
+-		tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
++		tria->GetBSSA(&B[0][0], &xyz_list[0][0], gauss_tria);
++		tria->GetBprimeSSA(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
+ 
+ 		/*Get viscosity for L1L2 model*/
+ 		GetL1L2Viscosity(&viscosity,&xyz_list[0][0],gauss,vx_input,vy_input,surf_input);
+@@ -6827,7 +6827,7 @@
+ 	 * the tria functionality to build a friction stiffness matrix on these 3
+ 	 * nodes: */
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticMacAyealFriction();
++	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSAFriction();
+ 	delete tria->material; delete tria;
+ 
+ 	/*clean-up and return*/
+@@ -7050,7 +7050,7 @@
+ 
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -7129,7 +7129,7 @@
+ 
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -7257,7 +7257,7 @@
+ 
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return NULL;
++	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return NULL;
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -7411,12 +7411,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingMacAyealFS {{{*/
+-ElementVector* Penta::CreatePVectorCouplingMacAyealFS(void){
++/*FUNCTION Penta::CreatePVectorCouplingSSAFS {{{*/
++ElementVector* Penta::CreatePVectorCouplingSSAFS(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorCouplingMacAyealFSViscous();
+-	ElementVector* pe2=CreatePVectorCouplingMacAyealFSFriction();
++	ElementVector* pe1=CreatePVectorCouplingSSAFSViscous();
++	ElementVector* pe2=CreatePVectorCouplingSSAFSFriction();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -7425,8 +7425,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingMacAyealFSViscous {{{*/
+-ElementVector* Penta::CreatePVectorCouplingMacAyealFSViscous(void){
++/*FUNCTION Penta::CreatePVectorCouplingSSAFSViscous {{{*/
++ElementVector* Penta::CreatePVectorCouplingSSAFSViscous(void){
+ 
+ 	/*Constants*/
+ 	const int   numdof=NUMVERTICES*NDOF4;
+@@ -7445,7 +7445,7 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=MacAyealFSApproximationEnum) return NULL;
++	if(approximation!=SSAFSApproximationEnum) return NULL;
+ 	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -7454,7 +7454,7 @@
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+-	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzSSA_input);
++	Input* vzSSA_input=inputs->GetInput(VzSSAEnum);   _assert_(vzSSA_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+@@ -7487,8 +7487,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorCouplingMacAyealFSFriction{{{*/
+-ElementVector* Penta::CreatePVectorCouplingMacAyealFSFriction(void){
++/*FUNCTION Penta::CreatePVectorCouplingSSAFSFriction{{{*/
++ElementVector* Penta::CreatePVectorCouplingSSAFSFriction(void){
+ 
+ 	/*Constants*/
+ 	const int numdof=NUMVERTICES*NDOF4;
+@@ -7512,7 +7512,7 @@
+ 	/*Initialize Element vector and return if necessary*/
+ 	if(!IsOnBed() || IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=MacAyealFSApproximationEnum) return NULL;
++	if(approximation!=SSAFSApproximationEnum) return NULL;
+ 	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -7522,7 +7522,7 @@
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+-	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzSSA_input);
++	Input* vzSSA_input=inputs->GetInput(VzSSAEnum);   _assert_(vzSSA_input);
+ 
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 
+@@ -7720,8 +7720,8 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+-		case MacAyealApproximationEnum:
+-			return CreatePVectorDiagnosticMacAyeal();
++		case SSAApproximationEnum:
++			return CreatePVectorDiagnosticSSA();
+ 		case HOApproximationEnum:
+ 			return CreatePVectorDiagnosticHO();
+ 		case L1L2ApproximationEnum:
+@@ -7732,10 +7732,10 @@
+ 			return NULL;
+ 		case FSApproximationEnum:
+ 			return CreatePVectorDiagnosticFS();
+-		case MacAyealHOApproximationEnum:
+-			return CreatePVectorDiagnosticMacAyealHO();
+-		case MacAyealFSApproximationEnum:
+-			return CreatePVectorDiagnosticMacAyealFS();
++		case SSAHOApproximationEnum:
++			return CreatePVectorDiagnosticSSAHO();
++		case SSAFSApproximationEnum:
++			return CreatePVectorDiagnosticSSAFS();
+ 		case HOFSApproximationEnum:
+ 			return CreatePVectorDiagnosticHOFS();
+ 		default:
+@@ -7743,11 +7743,11 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealHO{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticMacAyealHO(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticSSAHO{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticSSAHO(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticMacAyeal();
++	ElementVector* pe1=CreatePVectorDiagnosticSSA();
+ 	ElementVector* pe2=CreatePVectorDiagnosticHO();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+@@ -7757,13 +7757,13 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealFS{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticMacAyealFS(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticSSAFS{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticSSAFS(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticMacAyeal();
++	ElementVector* pe1=CreatePVectorDiagnosticSSA();
+ 	ElementVector* pe2=CreatePVectorDiagnosticFS();
+-	ElementVector* pe3=CreatePVectorCouplingMacAyealFS();
++	ElementVector* pe3=CreatePVectorCouplingSSAFS();
+ 	ElementVector* pe =new ElementVector(pe1,pe2,pe3);
+ 
+ 	/*clean-up and return*/
+@@ -7874,14 +7874,14 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticMacAyeal{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticMacAyeal(void){
++/*FUNCTION Penta::CreatePVectorDiagnosticSSA{{{*/
++ElementVector* Penta::CreatePVectorDiagnosticSSA(void){
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-	ElementVector* pe=tria->CreatePVectorDiagnosticMacAyeal();
++	ElementVector* pe=tria->CreatePVectorDiagnosticSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Clean up and return*/
+@@ -7895,7 +7895,7 @@
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-	ElementVector* pe=tria->CreatePVectorDiagnosticMacAyeal();
++	ElementVector* pe=tria->CreatePVectorDiagnosticSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Clean up and return*/
+@@ -8105,7 +8105,7 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+ 	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -8275,7 +8275,7 @@
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+ 	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+@@ -8391,7 +8391,7 @@
+ 	if(!IsOnBed() || !IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	this->parameters->FindParam(&shelf_dampening,DiagnosticShelfDampeningEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+ 	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -8477,7 +8477,7 @@
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vzFS_input=NULL;
+-	if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++	if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+ 		vzFS_input=inputs->GetInput(VzFSEnum); _assert_(vzFS_input);
+ 	}
+ 
+@@ -8492,7 +8492,7 @@
+ 
+ 		vx_input->GetInputDerivativeValue(&du[0],&xyz_list[0][0],gauss);
+ 		vy_input->GetInputDerivativeValue(&dv[0],&xyz_list[0][0],gauss);
+-		if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++		if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+ 			vzFS_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+ 			dwdz=dw[2];
+ 		}
+@@ -8539,7 +8539,7 @@
+ 	Input* vx_input=inputs->GetInput(VxEnum);                                  _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);                                  _assert_(vy_input);
+ 	Input* vzFS_input=NULL;
+-	if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++	if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+ 		vzFS_input=inputs->GetInput(VzFSEnum);       _assert_(vzFS_input);
+ 	}
+ 
+@@ -8553,7 +8553,7 @@
+ 		bed_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
+ 		vx_input->GetInputValue(&vx, gauss);
+ 		vy_input->GetInputValue(&vy, gauss);
+-		if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
++		if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+ 			vzFS_input->GetInputValue(&vz, gauss);
+ 		}
+ 		else vz=0;
+@@ -8579,7 +8579,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+-		case MacAyealApproximationEnum:
++		case SSAApproximationEnum:
+ 			return CreateJacobianDiagnosticSSA2d();
+ 		case HOApproximationEnum:
+ 			return CreateJacobianDiagnosticHO();
+@@ -8783,7 +8783,7 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 
+ 	/*If the element is a coupling, do nothing: every node is also on an other elements 
+-	 * (as coupling is between MacAyeal and HO) so the other element will take care of it*/
++	 * (as coupling is between SSA and HO) so the other element will take care of it*/
+ 	GetDofList(&doflist,approximation,GsetEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+@@ -8998,14 +8998,14 @@
+ 	/*Recover inputs*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+-	/*MacAyeal, everything is done by the element on bed*/
+-	if (approximation==MacAyealApproximationEnum){
++	/*SSA, everything is done by the element on bed*/
++	if (approximation==SSAApproximationEnum){
+ 		if (!IsOnBed()){
+ 			/*Do nothing. Element on bed will take care of it*/
+ 			return;
+ 		}
+ 		else{
+-			InputUpdateFromSolutionDiagnosticMacAyeal(solution);
++			InputUpdateFromSolutionDiagnosticSSA(solution);
+ 			return;
+ 		}
+ 	}
+@@ -9020,19 +9020,19 @@
+ 	else if (approximation==HOFSApproximationEnum){
+ 		InputUpdateFromSolutionDiagnosticHOFS(solution);
+ 	}
+-	else if (approximation==MacAyealFSApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticMacAyealFS(solution);
++	else if (approximation==SSAFSApproximationEnum){
++		InputUpdateFromSolutionDiagnosticSSAFS(solution);
+ 	}
+ 	else if (approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+ 		InputUpdateFromSolutionDiagnosticFS(solution);
+ 	}
+-	else if (approximation==MacAyealHOApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticMacAyealHO(solution);
++	else if (approximation==SSAHOApproximationEnum){
++		InputUpdateFromSolutionDiagnosticSSAHO(solution);
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyeal {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticMacAyeal(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSSA {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticSSA(IssmDouble* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -9050,7 +9050,7 @@
+ 	Penta  *penta   = NULL;
+ 
+ 	/*Get dof list: */
+-	GetDofList(&doflist,MacAyealApproximationEnum,GsetEnum);
++	GetDofList(&doflist,SSAApproximationEnum,GsetEnum);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
+@@ -9112,8 +9112,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealHO {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticMacAyealHO(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSSAHO {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticSSAHO(IssmDouble* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 	const int    numdof2d=NDOF2*NUMVERTICES2D;
+@@ -9139,7 +9139,7 @@
+ 
+ 	/*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */
+ 	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
+-	penta->GetDofList(&doflistm,MacAyealApproximationEnum,GsetEnum);
++	penta->GetDofList(&doflistm,SSAApproximationEnum,GsetEnum);
+ 
+ 	/*Get node data: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -9196,8 +9196,8 @@
+ 	xDelete<int>(doflistm);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealFS {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticMacAyealFS(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSSAFS {{{*/
++void  Penta::InputUpdateFromSolutionDiagnosticSSAFS(IssmDouble* solution){
+ 
+ 	const int    numdofm=NDOF2*NUMVERTICES;
+ 	const int    numdofs=NDOF4*NUMVERTICES;
+@@ -9224,7 +9224,7 @@
+ 	penta=GetBasalElement();
+ 
+ 	/*Get dof listof this element (SSA dofs) and of the penta at base (SSA dofs): */
+-	penta->GetDofList(&doflistm,MacAyealApproximationEnum,GsetEnum);
++	penta->GetDofList(&doflistm,SSAApproximationEnum,GsetEnum);
+ 	GetDofList(&doflists,FSApproximationEnum,GsetEnum);
+ 	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+@@ -9259,15 +9259,15 @@
+ 	}
+ 
+ 	/*Get Vz*/
+-	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);
++	Input* vzSSA_input=inputs->GetInput(VzSSAEnum);
+ 	if (vzSSA_input){
+ 		if (vzSSA_input->ObjectEnum()!=PentaInputEnum){
+-			_error_("Cannot compute Vel as VzMacAyeal is of type " << EnumToStringx(vzSSA_input->ObjectEnum()));
++			_error_("Cannot compute Vel as VzSSA is of type " << EnumToStringx(vzSSA_input->ObjectEnum()));
+ 		}
+-		GetInputListOnVertices(&vzSSA[0],VzMacAyealEnum);
++		GetInputListOnVertices(&vzSSA[0],VzSSAEnum);
+ 	}
+ 	else{
+-		_error_("Cannot update solution as VzMacAyeal is not present");
++		_error_("Cannot update solution as VzSSA is not present");
+ 	}
+ 
+ 	/*Now Compute vel*/
+@@ -9652,7 +9652,7 @@
+ 	GetInputListOnVertices(&vx[0],VxEnum,0.0); //default is 0
+ 	GetInputListOnVertices(&vy[0],VyEnum,0.0); //default is 0
+ 
+-	/*Do some modifications if we actually have a HOFS or MacAyealFS element*/
++	/*Do some modifications if we actually have a HOFS or SSAFS element*/
+ 	if(approximation==HOFSApproximationEnum){
+ 		Input* vzFS_input=inputs->GetInput(VzFSEnum);
+ 		if (vzFS_input){
+@@ -9665,13 +9665,13 @@
+ 			vz[i]=vzHO[i]+vzFS[i];
+ 		}
+ 	}
+-	else if(approximation==MacAyealFSApproximationEnum){
++	else if(approximation==SSAFSApproximationEnum){
+ 		Input* vzFS_input=inputs->GetInput(VzFSEnum);
+ 		if (vzFS_input){
+ 			if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
+ 			GetInputListOnVertices(&vzFS[0],VzFSEnum);
+ 		}
+-		else _error_("Cannot compute Vz as VzFS in not present in MacAyealFS element");
++		else _error_("Cannot compute Vz as VzFS in not present in SSAFS element");
+ 		for(i=0;i<NUMVERTICES;i++){
+ 			vzSSA[i]=vz[i];
+ 			vz[i]=vzSSA[i]+vzFS[i];
+@@ -9683,7 +9683,7 @@
+ 
+ 	/*For pressure: we have not computed pressure in this analysis, for this element. We are in 3D, 
+ 	 *so the pressure is just the pressure at the z elevation: except it this is a HOFS element */
+-	if(approximation!=HOFSApproximationEnum &&  approximation!=MacAyealFSApproximationEnum){
++	if(approximation!=HOFSApproximationEnum &&  approximation!=SSAFSApproximationEnum){
+ 		rho_ice=matpar->GetRhoIce();
+ 		g=matpar->GetG();
+ 		GetInputListOnVertices(&surface[0],SurfaceEnum);
+@@ -9694,15 +9694,15 @@
+ 	 * status, otherwise, we'll wipe them off and add the new inputs: */
+ 	this->inputs->ChangeEnum(VzEnum,VzPicardEnum);
+ 
+-	if(approximation!=HOFSApproximationEnum && approximation!=MacAyealFSApproximationEnum){
++	if(approximation!=HOFSApproximationEnum && approximation!=SSAFSApproximationEnum){
+ 		this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
+ 		this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 	}
+ 	else if(approximation==HOFSApproximationEnum){
+ 		this->inputs->AddInput(new PentaInput(VzHOEnum,vzHO,P1Enum));
+ 	}
+-	else if(approximation==MacAyealFSApproximationEnum){
+-		this->inputs->AddInput(new PentaInput(VzMacAyealEnum,vzSSA,P1Enum));
++	else if(approximation==SSAFSApproximationEnum){
++		this->inputs->AddInput(new PentaInput(VzSSAEnum,vzSSA,P1Enum));
+ 	}
+ 	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15567)
+@@ -37,12 +37,12 @@
+ 		void GetTriaJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss);
+ 		void GetSegmentJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss);
+ 		void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussPenta* gauss);
+-		void GetBMacAyealHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBSSAHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBSSAFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBFSGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBprimeSSAFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeFSGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
+@@ -54,10 +54,10 @@
+ 		void GetBHOFriction(IssmDouble* L, GaussPenta* gauss);
+ 		void GetLFS(IssmDouble* LFS, GaussPenta* gauss);
+ 		void GetLprimeFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetLMacAyealFS(IssmDouble* LMacAyealFS, GaussPenta* gauss);
+-		void GetLprimeMacAyealFS(IssmDouble* LprimeMacAyealFS, IssmDouble* xyz_list, GaussPenta* gauss);
+-		void GetLFSMacAyeal(IssmDouble* LFSMacAyeal, GaussPenta* gauss);
+-		void GetLprimeFSMacAyeal(IssmDouble* LprimeFSMacAyeal, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetLSSAFS(IssmDouble* LSSAFS, GaussPenta* gauss);
++		void GetLprimeSSAFS(IssmDouble* LprimeSSAFS, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetLFSSSA(IssmDouble* LFSSSA, GaussPenta* gauss);
++		void GetLprimeFSSSA(IssmDouble* LprimeFSSSA, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,IssmDouble* plist, GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,IssmDouble* plist,GaussTria* gauss){_error_("only PentaGauss are supported");};
+ 		void GetInputDerivativeValue(IssmDouble* pvalues, IssmDouble* plist,IssmDouble* xyz_list, GaussPenta* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15567)
+@@ -143,10 +143,10 @@
+ 		IssmDouble DragCoefficientAbsGradient(int weight_index);
+ 		void   GradientIndexing(int* indexing,int control_index);
+ 		void   Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
+-		void   GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjDragSSA(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjDragHO(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjBbarMacAyeal(Vector<IssmDouble>* gradient,int control_index);
++		void   GradjBbarSSA(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjBbarHO(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GradjBbarFS(Vector<IssmDouble>* gradient,int control_index);
+ 		void   GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data);
+@@ -222,24 +222,24 @@
+ 		void     UpdateConstraints(void);
+ 
+ 		#ifdef _HAVE_DIAGNOSTIC_
+-		ElementMatrix* CreateKMatrixCouplingMacAyealHO(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealHOViscous(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealHOFriction(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealFS(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealFSViscous(void);
+-		ElementMatrix* CreateKMatrixCouplingMacAyealFSFriction(void);
++		ElementMatrix* CreateKMatrixCouplingSSAHO(void);
++		ElementMatrix* CreateKMatrixCouplingSSAHOViscous(void);
++		ElementMatrix* CreateKMatrixCouplingSSAHOFriction(void);
++		ElementMatrix* CreateKMatrixCouplingSSAFS(void);
++		ElementMatrix* CreateKMatrixCouplingSSAFSViscous(void);
++		ElementMatrix* CreateKMatrixCouplingSSAFSFriction(void);
+ 		ElementMatrix* CreateKMatrixCouplingHOFS(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticHoriz(void);
+ 		ElementMatrix* CreateKMatrixAdjointHoriz(void);
+ 		ElementVector* CreateDVectorDiagnosticHoriz(void);
+ 		ElementVector* CreateDVectorDiagnosticFS(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticSIA(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyeal2d(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3d(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3dViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3dFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyealHO(void);
+-		ElementMatrix* CreateKMatrixDiagnosticMacAyealFS(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSA2d(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSA3d(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSA3dViscous(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSA3dFriction(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSAHO(void);
++		ElementMatrix* CreateKMatrixDiagnosticSSAFS(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticL1L2(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticL1L2Viscous(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticL1L2Friction(void);
+@@ -260,9 +260,9 @@
+ 		ElementMatrix* CreateJacobianDiagnosticHO(void);
+ 		ElementMatrix* CreateJacobianDiagnosticFS(void);
+ 		void           InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticMacAyeal( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticMacAyealHO( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticMacAyealFS( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticSSA( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticSSAHO( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionDiagnosticSSAFS( IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionDiagnosticL1L2( IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionDiagnosticHO( IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionDiagnosticHOFS( IssmDouble* solutiong);
+@@ -273,17 +273,17 @@
+ 		void	         GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solutiong);
+ 		void	         GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solutiong);
+ 		void	         GetSolutionFromInputsDiagnosticVert(Vector<IssmDouble>* solutiong);
+-		ElementVector* CreatePVectorCouplingMacAyealFS(void);
+-		ElementVector* CreatePVectorCouplingMacAyealFSViscous(void);
+-		ElementVector* CreatePVectorCouplingMacAyealFSFriction(void);
++		ElementVector* CreatePVectorCouplingSSAFS(void);
++		ElementVector* CreatePVectorCouplingSSAFSViscous(void);
++		ElementVector* CreatePVectorCouplingSSAFSFriction(void);
+ 		ElementVector* CreatePVectorCouplingHOFS(void);
+ 		ElementVector* CreatePVectorCouplingHOFSViscous(void);
+ 		ElementVector* CreatePVectorCouplingHOFSFriction(void);
+ 		ElementVector* CreatePVectorDiagnosticHoriz(void);
+ 		ElementVector* CreatePVectorDiagnosticSIA(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyeal(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyealHO(void);
+-		ElementVector* CreatePVectorDiagnosticMacAyealFS(void);
++		ElementVector* CreatePVectorDiagnosticSSA(void);
++		ElementVector* CreatePVectorDiagnosticSSAHO(void);
++		ElementVector* CreatePVectorDiagnosticSSAFS(void);
+ 		ElementVector* CreatePVectorDiagnosticL1L2(void);
+ 		ElementVector* CreatePVectorDiagnosticHO(void);
+ 		ElementVector* CreatePVectorDiagnosticHODrivingStress(void);
+@@ -302,10 +302,10 @@
+ 
+ 		#ifdef _HAVE_CONTROL_
+ 		ElementVector* CreatePVectorAdjointHoriz(void);
+-		ElementMatrix* CreateKMatrixAdjointMacAyeal2d(void);
++		ElementMatrix* CreateKMatrixAdjointSSA2d(void);
+ 		ElementMatrix* CreateKMatrixAdjointHO(void);
+ 		ElementMatrix* CreateKMatrixAdjointFS(void);
+-		ElementVector* CreatePVectorAdjointMacAyeal(void);
++		ElementVector* CreatePVectorAdjointSSA(void);
+ 		ElementVector* CreatePVectorAdjointHO(void);
+ 		ElementVector* CreatePVectorAdjointFS(void);
+ 		void    InputUpdateFromSolutionAdjointHoriz( IssmDouble* solutiong);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15567)
+@@ -79,8 +79,8 @@
+ 	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBMacAyeal {{{*/
+-void TriaRef::GetBMacAyeal(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
++/*FUNCTION TriaRef::GetBSSA {{{*/
++void TriaRef::GetBSSA(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -113,8 +113,8 @@
+ 	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBMacAyealFS {{{*/
+-void TriaRef::GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
++/*FUNCTION TriaRef::GetBSSAFS {{{*/
++void TriaRef::GetBSSAFS(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
+ 
+ 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+@@ -229,8 +229,8 @@
+ 	xDelete<IssmDouble>(basis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBprimeMacAyeal {{{*/
+-void TriaRef::GetBprimeMacAyeal(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
++/*FUNCTION TriaRef::GetBprimeSSA {{{*/
++void TriaRef::GetBprimeSSA(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
+ 
+ 	/*Compute B'  matrix. B'=[B1' B2' B3'] where Bi' is of size 3*NDOF2. 
+ 	 * For node i, Bi' can be expressed in the actual coordinate system
+@@ -264,8 +264,8 @@
+ 	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBprimeMacAyealFS {{{*/
+-void TriaRef::GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
++/*FUNCTION TriaRef::GetBprimeSSAFS {{{*/
++void TriaRef::GetBprimeSSAFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
+ 	/*Compute Bprime  matrix. Bprime=[Bprime1 Bprime2 Bprime3] where Bprimei is of size 3*NDOF2. 
+ 	 * For node i, Bprimei can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -330,8 +330,8 @@
+ 	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBMacAyealFriction{{{*/
+-void TriaRef::GetBMacAyealFriction(IssmDouble* B, IssmDouble* xyz_list,GaussTria* gauss){
++/*FUNCTION TriaRef::GetBSSAFriction{{{*/
++void TriaRef::GetBSSAFriction(IssmDouble* B, IssmDouble* xyz_list,GaussTria* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is square and of size 2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 15567)
+@@ -129,7 +129,7 @@
+ 	IssmDouble* velocity=xNew<IssmDouble>(numnodes*NDOF2);
+ 
+ 	/*Get B matrix: */
+-	GetBMacAyeal(&B[0],xyz_list,gauss);
++	GetBSSA(&B[0],xyz_list,gauss);
+ 
+ 	/*Here, we are computing the strain rate of (vx,0)*/
+ 	for(int i=0;i<numnodes;i++){
+@@ -155,7 +155,7 @@
+ 	IssmDouble* velocity=xNew<IssmDouble>(numnodes*NDOF2);
+ 
+ 	/*Get B matrix: */
+-	GetBMacAyeal(&B[0],xyz_list,gauss);
++	GetBSSA(&B[0],xyz_list,gauss);
+ 
+ 	/*Here, we are computing the strain rate of (0,vy)*/
+ 	for(int i=0;i<numnodes;i++){
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15566)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15567)
+@@ -76,18 +76,18 @@
+ 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum)); 
+ 			_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+-			if(node_type==MacAyealApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
++			if(node_type==SSAApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 				this->Deactivate();
+ 			}
+ 			if(node_type==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 				this->Deactivate();
+ 			}
+-			if(node_type==MacAyealHOApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
++			if(node_type==SSAHOApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
+ 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 					this->Deactivate();
+ 				}
+ 			}
+-			if(node_type==MacAyealFSApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
++			if(node_type==SSAFSApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
+ 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 					for(k=1;k<=2;k++) this->FreezeDof(k);
+ 				}
+Index: ../trunk-jpl/src/m/classes/balancethickness.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/balancethickness.py	(revision 15566)
++++ ../trunk-jpl/src/m/classes/balancethickness.py	(revision 15567)
+@@ -26,7 +26,7 @@
+ 		
+ 		string="%s\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint) [m]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt) [m/yr]'))
+-		string="%s\n%s"%(string,fielddisplay(self,'stabilization',"0: None, 1: SU, 2: MacAyeal's artificial diffusivity, 3:DG"))
++		string="%s\n%s"%(string,fielddisplay(self,'stabilization',"0: None, 1: SU, 2: SSA's artificial diffusivity, 3:DG"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+Index: ../trunk-jpl/src/m/classes/balancethickness.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/balancethickness.m	(revision 15566)
++++ ../trunk-jpl/src/m/classes/balancethickness.m	(revision 15567)
+@@ -37,7 +37,7 @@
+ 
+ 			fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint) [m]');
+ 			fielddisplay(obj,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt) [m/yr]');
+-			fielddisplay(obj,'stabilization','0: None, 1: SU, 2: MacAyeal''s artificial diffusivity, 3:DG');
++			fielddisplay(obj,'stabilization','0: None, 1: SU, 2: SSA''s artificial diffusivity, 3:DG');
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15566)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15567)
+@@ -93,22 +93,22 @@
+ 		data=copy.deepcopy(self.vertex_equation)
+ 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
+ 		data[numpy.nonzero(data==1)]=SIAApproximationEnum()
+-		data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
++		data[numpy.nonzero(data==2)]=SSAApproximationEnum()
+ 		data[numpy.nonzero(data==3)]=HOApproximationEnum()
+ 		data[numpy.nonzero(data==4)]=FSApproximationEnum()
+-		data[numpy.nonzero(data==5)]=MacAyealHOApproximationEnum()
+-		data[numpy.nonzero(data==6)]=MacAyealFSApproximationEnum()
++		data[numpy.nonzero(data==5)]=SSAHOApproximationEnum()
++		data[numpy.nonzero(data==6)]=SSAFSApproximationEnum()
+ 		data[numpy.nonzero(data==7)]=HOFSApproximationEnum()
+ 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
+ 		WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1)
+ 		data=copy.deepcopy(self.element_equation)
+ 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
+ 		data[numpy.nonzero(data==1)]=SIAApproximationEnum()
+-		data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
++		data[numpy.nonzero(data==2)]=SSAApproximationEnum()
+ 		data[numpy.nonzero(data==3)]=HOApproximationEnum()
+ 		data[numpy.nonzero(data==4)]=FSApproximationEnum()
+-		data[numpy.nonzero(data==5)]=MacAyealHOApproximationEnum()
+-		data[numpy.nonzero(data==6)]=MacAyealFSApproximationEnum()
++		data[numpy.nonzero(data==5)]=SSAHOApproximationEnum()
++		data[numpy.nonzero(data==6)]=SSAFSApproximationEnum()
+ 		data[numpy.nonzero(data==7)]=HOFSApproximationEnum()
+ 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
+ 		WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2)
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15566)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15567)
+@@ -131,22 +131,22 @@
+ 			data=obj.vertex_equation;
+ 			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
+ 			pos=find(data==1); data(pos,end)=SIAApproximationEnum();
+-			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum();
++			pos=find(data==2); data(pos,end)=SSAApproximationEnum();
+ 			pos=find(data==3); data(pos,end)=HOApproximationEnum();
+ 			pos=find(data==4); data(pos,end)=FSApproximationEnum();
+-			pos=find(data==5); data(pos,end)=MacAyealHOApproximationEnum();
+-			pos=find(data==6); data(pos,end)=MacAyealFSApproximationEnum();
++			pos=find(data==5); data(pos,end)=SSAHOApproximationEnum();
++			pos=find(data==6); data(pos,end)=SSAFSApproximationEnum();
+ 			pos=find(data==7); data(pos,end)=HOFSApproximationEnum();
+ 			pos=find(data==8); data(pos,end)=L1L2ApproximationEnum();
+ 			WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1);
+ 			data=obj.element_equation;
+ 			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
+ 			pos=find(data==1); data(pos,end)=SIAApproximationEnum();
+-			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum();
++			pos=find(data==2); data(pos,end)=SSAApproximationEnum();
+ 			pos=find(data==3); data(pos,end)=HOApproximationEnum();
+ 			pos=find(data==4); data(pos,end)=FSApproximationEnum();
+-			pos=find(data==5); data(pos,end)=MacAyealHOApproximationEnum();
+-			pos=find(data==6); data(pos,end)=MacAyealFSApproximationEnum();
++			pos=find(data==5); data(pos,end)=SSAHOApproximationEnum();
++			pos=find(data==6); data(pos,end)=SSAFSApproximationEnum();
+ 			pos=find(data==7); data(pos,end)=HOFSApproximationEnum();
+ 			pos=find(data==8); data(pos,end)=L1L2ApproximationEnum();
+ 			WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2);
+Index: ../trunk-jpl/src/m/miscellaneous/issmdoc.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 15566)
++++ ../trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 15567)
+@@ -10,6 +10,6 @@
+ disp(sprintf('%-63s %s','       md=triangle(md,''DomainOutline.exp'',50000);','%creates a mesh of the domain outline with a resolution of 50000 m'));
+ disp(sprintf('%-63s %s','       md=setmask(md,''all'','''');','%defines the glacier system as an ice shelf (no island)'));
+ disp(sprintf('%-63s %s','       md=parameterize(md,''Square.par'');','%fills all the other fields of the model'));
+-disp(sprintf('%-63s %s','       md=setflowequation(md,''SSA'',''all'');','%defines all elements as MacAyeal''s SSA'));
++disp(sprintf('%-63s %s','       md=setflowequation(md,''SSA'',''all'');','%defines all elements as SSA''s SSA'));
+ disp(sprintf('%-63s %s','       md=solve(md,DiagnosticSolutionEnum());','%solve for stress balance'));
+ disp(sprintf('%-63s %s','       plotmodel(md,''data'',md.results.DiagnosticSolution.Vel);','%displays the velocity (type plotdoc for plotmodel help)'));
+Index: ../trunk-jpl/src/m/enum/FlowequationFeSsaEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationFeSsaEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationFeSsaEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationFeSsaEnum()
+-%FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSsa
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationFeSsaEnum()
+-
+-macro=StringToEnum('FlowequationFeSsa');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsstokesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsstokesEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationIsstokesEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationIsstokesEnum()
+-%FLOWEQUATIONISSTOKESENUM - Enum of FlowequationIsstokes
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationIsstokesEnum()
+-
+-macro=StringToEnum('FlowequationIsstokes');
+Index: ../trunk-jpl/src/m/enum/FlowequationIshutterEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIshutterEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationIshutterEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationIshutterEnum()
+-%FLOWEQUATIONISHUTTERENUM - Enum of FlowequationIshutter
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationIshutterEnum()
+-
+-macro=StringToEnum('FlowequationIshutter');
+Index: ../trunk-jpl/src/m/enum/FlowequationBorderpattynEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationBorderpattynEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationBorderpattynEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationBorderpattynEnum()
+-%FLOWEQUATIONBORDERPATTYNENUM - Enum of FlowequationBorderpattyn
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationBorderpattynEnum()
+-
+-macro=StringToEnum('FlowequationBorderpattyn');
+Index: ../trunk-jpl/src/m/enum/StokesSolverEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StokesSolverEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/StokesSolverEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=StokesSolverEnum()
+-%STOKESSOLVERENUM - Enum of StokesSolver
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=StokesSolverEnum()
+-
+-macro=StringToEnum('StokesSolver');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsmacayealEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsmacayealEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationIsmacayealEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationIsmacayealEnum()
+-%FLOWEQUATIONISMACAYEALENUM - Enum of FlowequationIsmacayeal
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationIsmacayealEnum()
+-
+-macro=StringToEnum('FlowequationIsmacayeal');
+Index: ../trunk-jpl/src/m/enum/FlowequationIspattynEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIspattynEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationIspattynEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationIspattynEnum()
+-%FLOWEQUATIONISPATTYNENUM - Enum of FlowequationIspattyn
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationIspattynEnum()
+-
+-macro=StringToEnum('FlowequationIspattyn');
+Index: ../trunk-jpl/src/m/enum/VzStokesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/VzStokesEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/VzStokesEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=VzStokesEnum()
+-%VZSTOKESENUM - Enum of VzStokes
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=VzStokesEnum()
+-
+-macro=StringToEnum('VzStokes');
+Index: ../trunk-jpl/src/m/enum/FlowequationBordermacayealEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationBordermacayealEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationBordermacayealEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationBordermacayealEnum()
+-%FLOWEQUATIONBORDERMACAYEALENUM - Enum of FlowequationBordermacayeal
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationBordermacayealEnum()
+-
+-macro=StringToEnum('FlowequationBordermacayeal');
+Index: ../trunk-jpl/src/m/enum/PattynIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PattynIceFrontEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/PattynIceFrontEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=PattynIceFrontEnum()
+-%PATTYNICEFRONTENUM - Enum of PattynIceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PattynIceFrontEnum()
+-
+-macro=StringToEnum('PattynIceFront');
+Index: ../trunk-jpl/src/m/enum/MacAyealPattynApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MacAyealPattynApproximationEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/MacAyealPattynApproximationEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=MacAyealPattynApproximationEnum()
+-%MACAYEALPATTYNAPPROXIMATIONENUM - Enum of MacAyealPattynApproximation
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MacAyealPattynApproximationEnum()
+-
+-macro=StringToEnum('MacAyealPattynApproximation');
+Index: ../trunk-jpl/src/m/enum/MacAyealStokesApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MacAyealStokesApproximationEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/MacAyealStokesApproximationEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=MacAyealStokesApproximationEnum()
+-%MACAYEALSTOKESAPPROXIMATIONENUM - Enum of MacAyealStokesApproximation
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MacAyealStokesApproximationEnum()
+-
+-macro=StringToEnum('MacAyealStokesApproximation');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsl1l2Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsl1l2Enum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationIsl1l2Enum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationIsl1l2Enum()
+-%FLOWEQUATIONISL1L2ENUM - Enum of FlowequationIsl1l2
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationIsl1l2Enum()
+-
+-macro=StringToEnum('FlowequationIsl1l2');
+Index: ../trunk-jpl/src/m/enum/VzPattynEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/VzPattynEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/VzPattynEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=VzPattynEnum()
+-%VZPATTYNENUM - Enum of VzPattyn
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=VzPattynEnum()
+-
+-macro=StringToEnum('VzPattyn');
+Index: ../trunk-jpl/src/m/enum/StokesIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StokesIceFrontEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/StokesIceFrontEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=StokesIceFrontEnum()
+-%STOKESICEFRONTENUM - Enum of StokesIceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=StokesIceFrontEnum()
+-
+-macro=StringToEnum('StokesIceFront');
+Index: ../trunk-jpl/src/m/enum/MacAyeal3dIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MacAyeal3dIceFrontEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/MacAyeal3dIceFrontEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=MacAyeal3dIceFrontEnum()
+-%MACAYEAL3DICEFRONTENUM - Enum of MacAyeal3dIceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MacAyeal3dIceFrontEnum()
+-
+-macro=StringToEnum('MacAyeal3dIceFront');
+Index: ../trunk-jpl/src/m/enum/DiagnosticStokesreconditioningEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticStokesreconditioningEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/DiagnosticStokesreconditioningEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticStokesreconditioningEnum()
+-%DIAGNOSTICSTOKESRECONDITIONINGENUM - Enum of DiagnosticStokesreconditioning
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticStokesreconditioningEnum()
+-
+-macro=StringToEnum('DiagnosticStokesreconditioning');
+Index: ../trunk-jpl/src/m/enum/FlowequationFeStokesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationFeStokesEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationFeStokesEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationFeStokesEnum()
+-%FLOWEQUATIONFESTOKESENUM - Enum of FlowequationFeStokes
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationFeStokesEnum()
+-
+-macro=StringToEnum('FlowequationFeStokes');
+Index: ../trunk-jpl/src/m/enum/PattynApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PattynApproximationEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/PattynApproximationEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=PattynApproximationEnum()
+-%PATTYNAPPROXIMATIONENUM - Enum of PattynApproximation
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PattynApproximationEnum()
+-
+-macro=StringToEnum('PattynApproximation');
+Index: ../trunk-jpl/src/m/enum/StokesApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StokesApproximationEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/StokesApproximationEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=StokesApproximationEnum()
+-%STOKESAPPROXIMATIONENUM - Enum of StokesApproximation
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=StokesApproximationEnum()
+-
+-macro=StringToEnum('StokesApproximation');
+Index: ../trunk-jpl/src/m/enum/DiagnosticHutterAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticHutterAnalysisEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/DiagnosticHutterAnalysisEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticHutterAnalysisEnum()
+-%DIAGNOSTICHUTTERANALYSISENUM - Enum of DiagnosticHutterAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticHutterAnalysisEnum()
+-
+-macro=StringToEnum('DiagnosticHutterAnalysis');
+Index: ../trunk-jpl/src/m/enum/MacAyealApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MacAyealApproximationEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/MacAyealApproximationEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=MacAyealApproximationEnum()
+-%MACAYEALAPPROXIMATIONENUM - Enum of MacAyealApproximation
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MacAyealApproximationEnum()
+-
+-macro=StringToEnum('MacAyealApproximation');
+Index: ../trunk-jpl/src/m/enum/VzMacAyealEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/VzMacAyealEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/VzMacAyealEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=VzMacAyealEnum()
+-%VZMACAYEALENUM - Enum of VzMacAyeal
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=VzMacAyealEnum()
+-
+-macro=StringToEnum('VzMacAyeal');
+Index: ../trunk-jpl/src/m/enum/PattynStokesApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PattynStokesApproximationEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/PattynStokesApproximationEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=PattynStokesApproximationEnum()
+-%PATTYNSTOKESAPPROXIMATIONENUM - Enum of PattynStokesApproximation
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PattynStokesApproximationEnum()
+-
+-macro=StringToEnum('PattynStokesApproximation');
+Index: ../trunk-jpl/src/m/enum/HutterApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/HutterApproximationEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/HutterApproximationEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=HutterApproximationEnum()
+-%HUTTERAPPROXIMATIONENUM - Enum of HutterApproximation
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=HutterApproximationEnum()
+-
+-macro=StringToEnum('HutterApproximation');
+Index: ../trunk-jpl/src/m/enum/MacAyeal2dIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MacAyeal2dIceFrontEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/MacAyeal2dIceFrontEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=MacAyeal2dIceFrontEnum()
+-%MACAYEAL2DICEFRONTENUM - Enum of MacAyeal2dIceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MacAyeal2dIceFrontEnum()
+-
+-macro=StringToEnum('MacAyeal2dIceFront');
+Index: ../trunk-jpl/src/m/enum/FlowequationBorderstokesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationBorderstokesEnum.m	(revision 15566)
++++ ../trunk-jpl/src/m/enum/FlowequationBorderstokesEnum.m	(revision 15567)
+@@ -1,11 +0,0 @@
+-function macro=FlowequationBorderstokesEnum()
+-%FLOWEQUATIONBORDERSTOKESENUM - Enum of FlowequationBorderstokes
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FlowequationBorderstokesEnum()
+-
+-macro=StringToEnum('FlowequationBorderstokes');
+Index: ../trunk-jpl/src/m/enum/FlowequationFeSSAEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationFeSSAEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationFeSSAEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationFeSSAEnum()
++%FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSSA
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationFeSSAEnum()
++
++macro=StringToEnum('FlowequationFeSSA');
+Index: ../trunk-jpl/src/m/enum/VzSSAEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/VzSSAEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/VzSSAEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=VzSSAEnum()
++%VZSSAENUM - Enum of VzSSA
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=VzSSAEnum()
++
++macro=StringToEnum('VzSSA');
+Index: ../trunk-jpl/src/m/enum/SSAHOApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SSAHOApproximationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SSAHOApproximationEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=SSAHOApproximationEnum()
++%SSAHOAPPROXIMATIONENUM - Enum of SSAHOApproximation
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SSAHOApproximationEnum()
++
++macro=StringToEnum('SSAHOApproximation');
+Index: ../trunk-jpl/src/m/enum/HOFSApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/HOFSApproximationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/HOFSApproximationEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=HOFSApproximationEnum()
++%HOFSAPPROXIMATIONENUM - Enum of HOFSApproximation
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=HOFSApproximationEnum()
++
++macro=StringToEnum('HOFSApproximation');
+Index: ../trunk-jpl/src/m/enum/FlowequationBorderHOEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationBorderHOEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationBorderHOEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationBorderHOEnum()
++%FLOWEQUATIONBORDERHOENUM - Enum of FlowequationBorderHO
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationBorderHOEnum()
++
++macro=StringToEnum('FlowequationBorderHO');
+Index: ../trunk-jpl/src/m/enum/SSAFSApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SSAFSApproximationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SSAFSApproximationEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=SSAFSApproximationEnum()
++%SSAFSAPPROXIMATIONENUM - Enum of SSAFSApproximation
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SSAFSApproximationEnum()
++
++macro=StringToEnum('SSAFSApproximation');
+Index: ../trunk-jpl/src/m/enum/FSSolverEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FSSolverEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FSSolverEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FSSolverEnum()
++%FSSOLVERENUM - Enum of FSSolver
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FSSolverEnum()
++
++macro=StringToEnum('FSSolver');
+Index: ../trunk-jpl/src/m/enum/VzFSEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/VzFSEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/VzFSEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=VzFSEnum()
++%VZFSENUM - Enum of VzFS
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=VzFSEnum()
++
++macro=StringToEnum('VzFS');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsL1L2Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsL1L2Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationIsL1L2Enum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationIsL1L2Enum()
++%FLOWEQUATIONISL1L2ENUM - Enum of FlowequationIsL1L2
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationIsL1L2Enum()
++
++macro=StringToEnum('FlowequationIsL1L2');
+Index: ../trunk-jpl/src/m/enum/SIAApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SIAApproximationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SIAApproximationEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=SIAApproximationEnum()
++%SIAAPPROXIMATIONENUM - Enum of SIAApproximation
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SIAApproximationEnum()
++
++macro=StringToEnum('SIAApproximation');
+Index: ../trunk-jpl/src/m/enum/FSIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FSIceFrontEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FSIceFrontEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FSIceFrontEnum()
++%FSICEFRONTENUM - Enum of FSIceFront
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FSIceFrontEnum()
++
++macro=StringToEnum('FSIceFront');
+Index: ../trunk-jpl/src/m/enum/SSA3dIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SSA3dIceFrontEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SSA3dIceFrontEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=SSA3dIceFrontEnum()
++%SSA3DICEFRONTENUM - Enum of SSA3dIceFront
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SSA3dIceFrontEnum()
++
++macro=StringToEnum('SSA3dIceFront');
+Index: ../trunk-jpl/src/m/enum/FlowequationFeFSEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationFeFSEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationFeFSEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationFeFSEnum()
++%FLOWEQUATIONFEFSENUM - Enum of FlowequationFeFS
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationFeFSEnum()
++
++macro=StringToEnum('FlowequationFeFS');
+Index: ../trunk-jpl/src/m/enum/FlowequationBorderFSEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationBorderFSEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationBorderFSEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationBorderFSEnum()
++%FLOWEQUATIONBORDERFSENUM - Enum of FlowequationBorderFS
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationBorderFSEnum()
++
++macro=StringToEnum('FlowequationBorderFS');
+Index: ../trunk-jpl/src/m/enum/HOApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/HOApproximationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/HOApproximationEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=HOApproximationEnum()
++%HOAPPROXIMATIONENUM - Enum of HOApproximation
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=HOApproximationEnum()
++
++macro=StringToEnum('HOApproximation');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsHOEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsHOEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationIsHOEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationIsHOEnum()
++%FLOWEQUATIONISHOENUM - Enum of FlowequationIsHO
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationIsHOEnum()
++
++macro=StringToEnum('FlowequationIsHO');
+Index: ../trunk-jpl/src/m/enum/DiagnosticSIAAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticSIAAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DiagnosticSIAAnalysisEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=DiagnosticSIAAnalysisEnum()
++%DIAGNOSTICSIAANALYSISENUM - Enum of DiagnosticSIAAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DiagnosticSIAAnalysisEnum()
++
++macro=StringToEnum('DiagnosticSIAAnalysis');
+Index: ../trunk-jpl/src/m/enum/HOIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/HOIceFrontEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/HOIceFrontEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=HOIceFrontEnum()
++%HOICEFRONTENUM - Enum of HOIceFront
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=HOIceFrontEnum()
++
++macro=StringToEnum('HOIceFront');
+Index: ../trunk-jpl/src/m/enum/SSAApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SSAApproximationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SSAApproximationEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=SSAApproximationEnum()
++%SSAAPPROXIMATIONENUM - Enum of SSAApproximation
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SSAApproximationEnum()
++
++macro=StringToEnum('SSAApproximation');
+Index: ../trunk-jpl/src/m/enum/FSApproximationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FSApproximationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FSApproximationEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FSApproximationEnum()
++%FSAPPROXIMATIONENUM - Enum of FSApproximation
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FSApproximationEnum()
++
++macro=StringToEnum('FSApproximation');
+Index: ../trunk-jpl/src/m/enum/FlowequationBorderSSAEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationBorderSSAEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationBorderSSAEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationBorderSSAEnum()
++%FLOWEQUATIONBORDERSSAENUM - Enum of FlowequationBorderSSA
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationBorderSSAEnum()
++
++macro=StringToEnum('FlowequationBorderSSA');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsSIAEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsSIAEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationIsSIAEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationIsSIAEnum()
++%FLOWEQUATIONISSIAENUM - Enum of FlowequationIsSIA
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationIsSIAEnum()
++
++macro=StringToEnum('FlowequationIsSIA');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsFSEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsFSEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationIsFSEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationIsFSEnum()
++%FLOWEQUATIONISFSENUM - Enum of FlowequationIsFS
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationIsFSEnum()
++
++macro=StringToEnum('FlowequationIsFS');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15566)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15567)
+@@ -4180,47 +4180,47 @@
+ 
+ 	return StringToEnum('SIAApproximation')[0]
+ 
+-def MacAyealApproximationEnum():
++def SSAApproximationEnum():
+ 	"""
+-	MACAYEALAPPROXIMATIONENUM - Enum of MacAyealApproximation
++	SSAAPPROXIMATIONENUM - Enum of SSAApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=MacAyealApproximationEnum()
++	      macro=SSAApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('MacAyealApproximation')[0]
++	return StringToEnum('SSAApproximation')[0]
+ 
+-def MacAyealHOApproximationEnum():
++def SSAHOApproximationEnum():
+ 	"""
+-	MACAYEALHOAPPROXIMATIONENUM - Enum of MacAyealHOApproximation
++	SSAHOAPPROXIMATIONENUM - Enum of SSAHOApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=MacAyealHOApproximationEnum()
++	      macro=SSAHOApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('MacAyealHOApproximation')[0]
++	return StringToEnum('SSAHOApproximation')[0]
+ 
+-def MacAyealFSApproximationEnum():
++def SSAFSApproximationEnum():
+ 	"""
+-	MACAYEALFSAPPROXIMATIONENUM - Enum of MacAyealFSApproximation
++	SSAFSAPPROXIMATIONENUM - Enum of SSAFSApproximation
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=MacAyealFSApproximationEnum()
++	      macro=SSAFSApproximationEnum()
+ 	"""
+ 
+-	return StringToEnum('MacAyealFSApproximation')[0]
++	return StringToEnum('SSAFSApproximation')[0]
+ 
+ def L1L2ApproximationEnum():
+ 	"""
+@@ -4754,33 +4754,33 @@
+ 
+ 	return StringToEnum('IceFrontType')[0]
+ 
+-def MacAyeal2dIceFrontEnum():
++def SSA2dIceFrontEnum():
+ 	"""
+-	MACAYEAL2DICEFRONTENUM - Enum of MacAyeal2dIceFront
++	SSA2DICEFRONTENUM - Enum of SSA2dIceFront
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=MacAyeal2dIceFrontEnum()
++	      macro=SSA2dIceFrontEnum()
+ 	"""
+ 
+-	return StringToEnum('MacAyeal2dIceFront')[0]
++	return StringToEnum('SSA2dIceFront')[0]
+ 
+-def MacAyeal3dIceFrontEnum():
++def SSA3dIceFrontEnum():
+ 	"""
+-	MACAYEAL3DICEFRONTENUM - Enum of MacAyeal3dIceFront
++	SSA3DICEFRONTENUM - Enum of SSA3dIceFront
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=MacAyeal3dIceFrontEnum()
++	      macro=SSA3dIceFrontEnum()
+ 	"""
+ 
+-	return StringToEnum('MacAyeal3dIceFront')[0]
++	return StringToEnum('SSA3dIceFront')[0]
+ 
+ def MaticeEnum():
+ 	"""
+@@ -6126,19 +6126,19 @@
+ 
+ 	return StringToEnum('Vz')[0]
+ 
+-def VzMacAyealEnum():
++def VzSSAEnum():
+ 	"""
+-	VZMACAYEALENUM - Enum of VzMacAyeal
++	VZSSAENUM - Enum of VzSSA
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=VzMacAyealEnum()
++	      macro=VzSSAEnum()
+ 	"""
+ 
+-	return StringToEnum('VzMacAyeal')[0]
++	return StringToEnum('VzSSA')[0]
+ 
+ def VzHOEnum():
+ 	"""
+Index: ../trunk-jpl/src/m/enum/DiagnosticFSreconditioningEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticFSreconditioningEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DiagnosticFSreconditioningEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=DiagnosticFSreconditioningEnum()
++%DIAGNOSTICFSRECONDITIONINGENUM - Enum of DiagnosticFSreconditioning
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DiagnosticFSreconditioningEnum()
++
++macro=StringToEnum('DiagnosticFSreconditioning');
+Index: ../trunk-jpl/src/m/enum/FlowequationIsSSAEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationIsSSAEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationIsSSAEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=FlowequationIsSSAEnum()
++%FLOWEQUATIONISSSAENUM - Enum of FlowequationIsSSA
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationIsSSAEnum()
++
++macro=StringToEnum('FlowequationIsSSA');
+Index: ../trunk-jpl/src/m/enum/VzHOEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/VzHOEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/VzHOEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=VzHOEnum()
++%VZHOENUM - Enum of VzHO
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=VzHOEnum()
++
++macro=StringToEnum('VzHO');
+Index: ../trunk-jpl/src/m/enum/SSA2dIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SSA2dIceFrontEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SSA2dIceFrontEnum.m	(revision 15567)
+@@ -0,0 +1,11 @@
++function macro=SSA2dIceFrontEnum()
++%SSA2DICEFRONTENUM - Enum of SSA2dIceFront
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SSA2dIceFrontEnum()
++
++macro=StringToEnum('SSA2dIceFront');
+Index: ../trunk-jpl/src/m/mech/strainrateuncert.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/strainrateuncert.m	(revision 15566)
++++ ../trunk-jpl/src/m/mech/strainrateuncert.m	(revision 15567)
+@@ -35,7 +35,7 @@
+ 	error('only 2d model supported yet');
+ end
+ if any(md.flowequation.element_equation~=2),
+-	disp('Warning: the model has some non SSA elements. These will be treated like MacAyeal''s elements');
++	disp('Warning: the model has some non SSA elements. These will be treated like SSA''s elements');
+ end
+ 
+ %initialization
+Index: ../trunk-jpl/src/m/mech/mechanicalproperties.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 15566)
++++ ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 15567)
+@@ -20,7 +20,7 @@
+ 	error('only 2d model supported yet');
+ end
+ if any(md.flowequation.element_equation~=2),
+-	disp('Warning: the model has some non SSA elements. These will be treated like MacAyeal''s elements');
++	disp('Warning: the model has some non SSA elements. These will be treated like SSA''s elements');
+ end
+ 
+ %initialization
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15566)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15567)
+@@ -111,7 +111,7 @@
+ 		else:    #fill with none 
+ 			noneflag[numpy.nonzero(numpy.logical_not(FSflag))]=True
+ 
+-	#Now take care of the coupling between MacAyeal and HO
++	#Now take care of the coupling between SSA and HO
+ 	md.diagnostic.vertex_pairing=numpy.array([])
+ 	nodeonSSAHO=numpy.zeros(md.mesh.numberofvertices,bool)
+ 	nodeonHOFS=numpy.zeros(md.mesh.numberofvertices,bool)
+@@ -120,7 +120,7 @@
+ 	SSAFSflag=numpy.zeros(md.mesh.numberofelements,bool)
+ 	HOFSflag=numpy.zeros(md.mesh.numberofelements,bool)
+ 	if   strcmpi(coupling_method,'penalties'):
+-		#Create the border nodes between HO and MacAyeal and extrude them
++		#Create the border nodes between HO and SSA and extrude them
+ 		numnodes2d=md.mesh.numberofvertices2d
+ 		numlayers=md.mesh.numberoflayers
+ 		bordernodes2d=numpy.nonzero(numpy.logical_and(nodeonHO[0:numnodes2d],nodeonSSA[0:numnodes2d]))[0]+1    #Nodes connected to two different types of elements
+@@ -136,7 +136,7 @@
+ 		if   any(SSAflag) and any(HOflag):    #coupling SSA HO
+ 			#Find node at the border
+ 			nodeonSSAHO[numpy.nonzero(numpy.logical_and(nodeonSSA,nodeonHO))]=True
+-			#SSA elements in contact with this layer become MacAyealHO elements
++			#SSA elements in contact with this layer become SSAHO elements
+ 			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonSSAHO)[0])
+ 			commonelements=numpy.sum(matrixelements,axis=1)!=0
+ 			commonelements[numpy.nonzero(HOflag)]=False    #only one layer: the elements previously in SSA
+@@ -200,7 +200,7 @@
+ 		elif any(FSflag) and any(SSAflag):
+ 			#Find node at the border
+ 			nodeonSSAFS[numpy.nonzero(numpy.logical_and(nodeonSSA,nodeonFS))]=True
+-			#FS elements in contact with this layer become MacAyealFS elements
++			#FS elements in contact with this layer become SSAFS elements
+ 			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonSSAFS)[0])
+ 			commonelements=numpy.sum(matrixelements,axis=1)!=0
+ 			commonelements[numpy.nonzero(SSAflag)]=False    #only one layer: the elements previously in SSA
+@@ -232,7 +232,7 @@
+ 		elif any(FSflag) and any(SIAflag):
+ 			raise TypeError("type of coupling not supported yet")
+ 
+-	#Create MacAyealHOApproximation where needed
++	#Create SSAHOApproximation where needed
+ 	md.flowequation.element_equation=numpy.zeros(md.mesh.numberofelements,int)
+ 	md.flowequation.element_equation[numpy.nonzero(noneflag)]=0
+ 	md.flowequation.element_equation[numpy.nonzero(SIAflag)]=1
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15566)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15567)
+@@ -115,7 +115,7 @@
+ 	end
+ end
+ 
+-%Now take care of the coupling between MacAyeal and HO
++%Now take care of the coupling between SSA and HO
+ md.diagnostic.vertex_pairing=[];
+ nodeonSSAHO=zeros(md.mesh.numberofvertices,1);
+ nodeonHOFS=zeros(md.mesh.numberofvertices,1);
+@@ -124,7 +124,7 @@
+ SSAFSflag=zeros(md.mesh.numberofelements,1);
+ HOFSflag=zeros(md.mesh.numberofelements,1);
+ if strcmpi(coupling_method,'penalties'),
+-	%Create the border nodes between HO and MacAyeal and extrude them
++	%Create the border nodes between HO and SSA and extrude them
+ 	numnodes2d=md.mesh.numberofvertices2d;
+ 	numlayers=md.mesh.numberoflayers;
+ 	bordernodes2d=find(nodeonHO(1:numnodes2d) & nodeonSSA(1:numnodes2d)); %Nodes connected to two different types of elements
+@@ -141,7 +141,7 @@
+ 	if any(SSAflag) & any(HOflag), %coupling SSA HO
+ 		%Find node at the border
+ 		nodeonSSAHO(find(nodeonSSA & nodeonHO))=1;
+-		%SSA elements in contact with this layer become MacAyealHO elements
++		%SSA elements in contact with this layer become SSAHO elements
+ 		matrixelements=ismember(md.mesh.elements,find(nodeonSSAHO));
+ 		commonelements=sum(matrixelements,2)~=0;
+ 		commonelements(find(HOflag))=0; %only one layer: the elements previously in SSA
+@@ -205,7 +205,7 @@
+ 	elseif any(FSflag) & any(SSAflag),
+ 		%Find node at the border
+ 		nodeonSSAFS(find(nodeonSSA & nodeonFS))=1;
+-		%FS elements in contact with this layer become MacAyealFS elements
++		%FS elements in contact with this layer become SSAFS elements
+ 		matrixelements=ismember(md.mesh.elements,find(nodeonSSAFS));
+ 		commonelements=sum(matrixelements,2)~=0;
+ 		commonelements(find(SSAflag))=0; %only one layer: the elements previously in SSA
+Index: ../trunk-jpl/src/m/plot/plot_elementstype.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_elementstype.m	(revision 15566)
++++ ../trunk-jpl/src/m/plot/plot_elementstype.m	(revision 15567)
+@@ -21,7 +21,7 @@
+ 	posH=find(data==1);
+ 	A=elements(posH,1); B=elements(posH,2); C=elements(posH,3); 
+ 	p1=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',1,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyeal element
++	%SSA element
+ 	posM=find(data==2);
+ 	A=elements(posM,1); B=elements(posM,2); C=elements(posM,3); 
+ 	p2=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',2,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -29,7 +29,7 @@
+ 	posP=find(data==3);
+ 	A=elements(posP,1); B=elements(posP,2); C=elements(posP,3); 
+ 	p3=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',3,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyealHO element
++	%SSAHO element
+ 	posMP=find(data==5);
+ 	A=elements(posMP,1); B=elements(posMP,2); C=elements(posMP,3); 
+ 	p5=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',5,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -37,7 +37,7 @@
+ 	posS=find(data==4);
+ 	A=elements(posS,1); B=elements(posS,2); C=elements(posS,3); 
+ 	p6=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',4,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyealFS elements
++	%SSAFS elements
+ 	posMS=find(data==6);
+ 	A=elements(posMS,1); B=elements(posMS,2); C=elements(posMS,3); 
+ 	p7=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',6,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -51,8 +51,8 @@
+ 	p9=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',0,'FaceColor','flat','EdgeColor',edgecolor);
+ 
+ 	legend([p1 p2 p3 p5 p6 p7 p8 p9],...
+-		'SIA''s elements','MacAyeal''s elements','HO''s elements',...
+-		'MacAyealHO''s elements','FS''s elements','MacAyealFS''s elements','HOFS''s elements','None element');
++		'SIA''s elements','SSA''s elements','HO''s elements',...
++		'SSAHO''s elements','FS''s elements','SSAFS''s elements','HOFS''s elements','None element');
+ 
+ else
+ 	%SIA elements
+@@ -63,7 +63,7 @@
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', 1,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 1,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 1,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyeal elements
++	%SSA elements
+ 	posM=find(data==2);
+ 	A=elements(posM,1); B=elements(posM,2); C=elements(posM,3); D=elements(posM,4); E=elements(posM,5); F=elements(posM,6);
+ 	p2=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 2,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -87,7 +87,7 @@
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyealHO elements
++	%SSAHO elements
+ 	posP=find(data==5);
+ 	A=elements(posP,1); B=elements(posP,2); C=elements(posP,3); D=elements(posP,4); E=elements(posP,5); F=elements(posP,6);
+ 	p5=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 5,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -103,7 +103,7 @@
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
+-	%MacAyealFS elements
++	%SSAFS elements
+ 	PosMS=find(data==6);
+ 	A=elements(PosMS,1); B=elements(PosMS,2); C=elements(PosMS,3); D=elements(PosMS,4); E=elements(PosMS,5); F=elements(PosMS,6);
+ 	p7=patch( 'Faces', [A B C],'Vertices', [x y z],'CData', 6,'FaceColor','flat','EdgeColor',edgecolor);
+@@ -121,8 +121,8 @@
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 0,'FaceColor','flat','EdgeColor',edgecolor);
+ 
+ 	legend([p1 p2 p3 p4 p5 p6 p7 p8],...
+-		'SIA''s elements','MacAyeal''s elements','HO''s elements','FS''s elements',...
+-		'MacAyealHO''s elements','HOFS''s elements','MacAyealFS''s elements','None elements');
++		'SIA''s elements','SSA''s elements','HO''s elements','FS''s elements',...
++		'SSAHO''s elements','HOFS''s elements','SSAFS''s elements','None elements');
+ end
+ 
+ %apply options
+Index: ../trunk-jpl/src/m/plot/plot_penalties.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_penalties.m	(revision 15566)
++++ ../trunk-jpl/src/m/plot/plot_penalties.m	(revision 15567)
+@@ -39,7 +39,7 @@
+ 		P1=plot3(x(md.penalties(i,1)),y(md.penalties(i,1)),z(md.penalties(i,1)),'ro','MarkerSize',15,'MarkerFaceColor','r');
+ 		P2=plot3(x(md.penalties(i,:)),y(md.penalties(i,:)),z(md.penalties(i,:)),'bo-','LineWidth',2,'MarkerSize',8,'MarkerFaceColor','b');
+ 	end
+-	legend([P1 P2],'MacAyeal''s penalized nodes','HO''s penalized nodes');
++	legend([P1 P2],'SSA''s penalized nodes','HO''s penalized nodes');
+ end
+ 
+ %apply options
Index: /issm/oecreview/Archive/15392-16133/ISSM-15567-15568.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15567-15568.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15567-15568.diff	(revision 16134)
@@ -0,0 +1,86 @@
+Index: ../trunk-jpl/src/m/solvers/stokesoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/stokesoptions.m	(revision 15567)
++++ ../trunk-jpl/src/m/solvers/stokesoptions.m	(revision 15568)
+@@ -1,29 +1,29 @@
+-function FS=FSoptions(varargin)
++function stokes=stokesoptions(varargin)
+ %STOKESOPTIONS - return STOKES multi-physics solver petsc options
+ %
+ %   Usage:
+-%      options=FSoptions;
++%      options=stokesoptions;
+ 
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
+-FS=struct();
++stokes=struct();
+ 
+-%default FS options
++%default stokes options
+ PETSC_VERSION=petscversion();
+ if PETSC_VERSION==2,
+-	error('FSoptions error message: multi-physics options not supported in Petsc 2');
++	error('stokesoptions error message: multi-physics options not supported in Petsc 2');
+ end
+ if PETSC_VERSION==3,
+-	FS.toolkit='petsc';
+-	FS.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+-	FS.ksp_max_it=getfieldvalue(options,'ksp_max_it',1000);
+-	FS.ksp_type=getfieldvalue(options,'ksp_type','gmres');
+-	FS.pc_type=getfieldvalue(options,'pc_type','fieldsplit');
+-	FS.pc_field_split_type=getfieldvalue(options,'pc_field_split_type','schur');
+-	FS.fieldsplit_0_pc_type=getfieldvalue(options,'fieldsplit_0_pc_type','hypre');
+-	FS.fieldsplit_0_ksp_type=getfieldvalue(options,'fieldsplit_0_ksp_type','gmres');
+-	FS.fieldsplit_0_pc_hypre_type=getfieldvalue(options,'fieldsplit_0_pc_hypre_type','boomerang');
+-	FS.fieldsplit_1_pc_type=getfieldvalue(options,'fieldsplit_1_pc_type','jacobi');
+-	FS.fieldsplit_1_ksp_type=getfieldvalue(options,'fieldsplit_1_ksp_type','preonly');
+-	FS.issm_option_solver=getfieldvalue(options,'issm_option_solver','FS');
++	stokes.toolkit='petsc';
++	stokes.mat_type=getfieldvalue(options,'mat_type','mpiaij');
++	stokes.ksp_max_it=getfieldvalue(options,'ksp_max_it',1000);
++	stokes.ksp_type=getfieldvalue(options,'ksp_type','gmres');
++	stokes.pc_type=getfieldvalue(options,'pc_type','fieldsplit');
++	stokes.pc_field_split_type=getfieldvalue(options,'pc_field_split_type','schur');
++	stokes.fieldsplit_0_pc_type=getfieldvalue(options,'fieldsplit_0_pc_type','hypre');
++	stokes.fieldsplit_0_ksp_type=getfieldvalue(options,'fieldsplit_0_ksp_type','gmres');
++	stokes.fieldsplit_0_pc_hypre_type=getfieldvalue(options,'fieldsplit_0_pc_hypre_type','boomerang');
++	stokes.fieldsplit_1_pc_type=getfieldvalue(options,'fieldsplit_1_pc_type','jacobi');
++	stokes.fieldsplit_1_ksp_type=getfieldvalue(options,'fieldsplit_1_ksp_type','preonly');
++	stokes.issm_option_solver=getfieldvalue(options,'issm_option_solver','stokes');
+ end
+Index: ../trunk-jpl/src/m/solvers/stokesoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/stokesoptions.py	(revision 15567)
++++ ../trunk-jpl/src/m/solvers/stokesoptions.py	(revision 15568)
+@@ -2,25 +2,25 @@
+ from pairoptions import *
+ from petscversion  import *
+ #}}}
+-def FSoptions(*args):
++def stokesoptions(*args):
+ 	#STOKESOPTIONS - return STOKES multi-physics solver petsc options
+ 	#
+ 	#   Usage:
+-	#      options=FSoptions;
++	#      options=stokesoptions;
+ 	
+ 	#retrieve options provided in varargin
+ 	arguments=pairoptions(*args) 
+ 
+ 
+-	#default FS options
++	#default stokes options
+ 	PETSC_VERSION=petscversion()
+ 
+ 	if PETSC_VERSION==2:
+-		raise RuntimeError('FSoptions error message: multi-physics options not supported in Petsc 2')
++		raise RuntimeError('stokesoptions error message: multi-physics options not supported in Petsc 2')
+ 	if PETSC_VERSION==3:
+ 		options=[['toolkit','petsc'],['mat_type','mpiaij'],['ksp_max_it',1000],['ksp_type','gmres'],['pc_type','fieldsplit'],['pc_field_split_type','schur'],\
+ 	['fieldsplit_0_pc_type','hypre'],['fieldsplit_0_ksp_type','gmres'],['fieldsplit_0_pc_hypre_type','boomerang'],\
+-	['fieldsplit_1_pc_type','jacobi'],['fieldsplit_1_ksp_type','preonly'],['issm_option_solver','FS']]
++	['fieldsplit_1_pc_type','jacobi'],['fieldsplit_1_ksp_type','preonly'],['issm_option_solver','stokes']]
+ 
+ 	#now, go through our arguments, and write over default options.
+ 	for i in range(len(arguments.list)):
Index: /issm/oecreview/Archive/15392-16133/ISSM-15568-15569.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15568-15569.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15568-15569.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/Archives/Archive221.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive220.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive274.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15569-15570.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15569-15570.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15569-15570.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/main/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/kriging.cpp	(revision 15569)
++++ ../trunk-jpl/src/c/main/kriging.cpp	(revision 15570)
+@@ -56,7 +56,7 @@
+ 	_printf0_("write results to disk:\n");
+ 	Results *results = new Results();
+ 	if(IssmComm::GetRank()==0){
+-		output_fid=pfopen(outbinfilename,"wb");
++		output_fid=pfopen0(outbinfilename,"wb");
+ 		results->AddObject(new GenericExternalResult<double*>(results->Size()+1,0,predictions,ninterp,1,1,0));
+ 		results->AddObject(new GenericExternalResult<double*>(results->Size()+1,1,error,ninterp,1,1,0));
+ 		for(int i=0;i<results->Size();i++){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15570-15571.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15570-15571.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15570-15571.diff	(revision 16134)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/externalpackages/cmake/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/cmake/install.sh	(revision 15570)
++++ ../trunk-jpl/externalpackages/cmake/install.sh	(revision 15571)
+@@ -2,18 +2,18 @@
+ set -eu 
+ 
+ #Some cleanup
+-rm -rf install cmake-2.8.5
++rm -rf install cmake-2.8.11.2
+ mkdir install
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/cmake-2.8.5.tar.gz' 'cmake-2.8.5.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/cmake-2.8.11.2.tar.gz' 'cmake-2.8.11.2.tar.gz'
+ 
+ #Untar 
+-tar -zxvf  cmake-2.8.5.tar.gz
++tar -zxvf  cmake-2.8.11.2.tar.gz
+ 
+ #Move cmake into install directory
+-mv cmake-2.8.5/* install
+-rm -rf cmake-2.8.5
++mv cmake-2.8.11.2/* install
++rm -rf cmake-2.8.11.2
+ 
+ #Compile cmake
+ cd install 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15571-15572.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15571-15572.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15571-15572.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/contrib/gslib/pkriging.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/gslib/pkriging.m	(revision 15571)
++++ ../trunk-jpl/src/m/contrib/gslib/pkriging.m	(revision 15572)
+@@ -37,8 +37,8 @@
+ LaunchQueueJob(cluster,name,name,{[name '.bin'] [name '.queue']});
+ 
+ %Call waitonlock
+-md=model; md.cluster=cluster; md.settings.waitonlock=Inf;
+-waitonlock(md)
++md=model; md.cluster=cluster; md.settings.waitonlock=Inf; md.private.runtimename=name;md.miscellaneous.name=name;
++waitonlock(md);
+ 
+ %Download
+ Download(cluster,name,{[name '.outbin']});
Index: /issm/oecreview/Archive/15392-16133/ISSM-15572-15573.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15572-15573.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15572-15573.diff	(revision 16134)
@@ -0,0 +1,205 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15572)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15573)
+@@ -412,14 +412,13 @@
+ syn keyword cType BoolElementResult
+ syn keyword cType BoolInput
+ syn keyword cType BoolParam
+-syn keyword cType classes
+ syn keyword cType Constraint
+ syn keyword cType Constraints
+ syn keyword cType Contour
+ syn keyword cType Contours
+ syn keyword cType ControlInput
++syn keyword cType DataSetParam
+ syn keyword cType DatasetInput
+-syn keyword cType DataSetParam
+ syn keyword cType DependentObject
+ syn keyword cType DofIndexing
+ syn keyword cType DoubleElementResult
+@@ -433,17 +432,16 @@
+ syn keyword cType ElementHook
+ syn keyword cType ElementMatrix
+ syn keyword cType ElementResult
++syn keyword cType ElementVector
+ syn keyword cType Elements
+-syn keyword cType ElementVector
+ syn keyword cType ExponentialVariogram
+ syn keyword cType ExternalResult
+ syn keyword cType FemModel
+ syn keyword cType FileParam
+ syn keyword cType Friction
+-syn keyword cType GaussianVariogram
+-syn keyword cType gaussobjects
+ syn keyword cType GaussPenta
+ syn keyword cType GaussTria
++syn keyword cType GaussianVariogram
+ syn keyword cType GenericExternalResult
+ syn keyword cType GenericOption
+ syn keyword cType GenericParam
+@@ -458,7 +456,6 @@
+ syn keyword cType IntParam
+ syn keyword cType IntVecParam
+ syn keyword cType IoModel
+-syn keyword cType krigingobjects
+ syn keyword cType Load
+ syn keyword cType Loads
+ syn keyword cType Matdamageice
+@@ -466,7 +463,6 @@
+ syn keyword cType Materials
+ syn keyword cType Matice
+ syn keyword cType Matpar
+-syn keyword cType matrixobjects
+ syn keyword cType MatrixParam
+ syn keyword cType Node
+ syn keyword cType Nodes
+@@ -474,8 +470,8 @@
+ syn keyword cType Observation
+ syn keyword cType Observations
+ syn keyword cType Option
++syn keyword cType OptionUtilities
+ syn keyword cType Options
+-syn keyword cType OptionUtilities
+ syn keyword cType Param
+ syn keyword cType Parameters
+ syn keyword cType Patch
+@@ -489,8 +485,8 @@
+ syn keyword cType Profiler
+ syn keyword cType Quadtree
+ syn keyword cType Results
++syn keyword cType RiftStruct
+ syn keyword cType Riftfront
+-syn keyword cType RiftStruct
+ syn keyword cType Segment
+ syn keyword cType SpcDynamic
+ syn keyword cType SpcStatic
+@@ -509,6 +505,10 @@
+ syn keyword cType VectorParam
+ syn keyword cType Vertex
+ syn keyword cType Vertices
++syn keyword cType classes
++syn keyword cType gaussobjects
++syn keyword cType krigingobjects
++syn keyword cType matrixobjects
+ "ISSM's objects end
+ "ISSM's Enums begin
+ syn keyword cConstant AutodiffIsautodiffEnum
+@@ -559,23 +559,23 @@
+ syn keyword cConstant DiagnosticSpcvxEnum
+ syn keyword cConstant DiagnosticSpcvyEnum
+ syn keyword cConstant DiagnosticSpcvzEnum
+-syn keyword cConstant DiagnosticStokesreconditioningEnum
++syn keyword cConstant DiagnosticFSreconditioningEnum
+ syn keyword cConstant DiagnosticVertexPairingEnum
+ syn keyword cConstant DiagnosticViscosityOvershootEnum
+ syn keyword cConstant LoadingforceXEnum
+ syn keyword cConstant LoadingforceYEnum
+ syn keyword cConstant LoadingforceZEnum
+-syn keyword cConstant FlowequationBordermacayealEnum
+-syn keyword cConstant FlowequationBorderpattynEnum
+-syn keyword cConstant FlowequationBorderstokesEnum
++syn keyword cConstant FlowequationBorderSSAEnum
++syn keyword cConstant FlowequationBorderHOEnum
++syn keyword cConstant FlowequationBorderFSEnum
+ syn keyword cConstant FlowequationElementEquationEnum
+-syn keyword cConstant FlowequationIshutterEnum
+-syn keyword cConstant FlowequationIsmacayealEnum
+-syn keyword cConstant FlowequationIsl1l2Enum
+-syn keyword cConstant FlowequationIspattynEnum
+-syn keyword cConstant FlowequationIsstokesEnum
+-syn keyword cConstant FlowequationFeStokesEnum
+-syn keyword cConstant FlowequationFeSsaEnum
++syn keyword cConstant FlowequationIsSIAEnum
++syn keyword cConstant FlowequationIsSSAEnum
++syn keyword cConstant FlowequationIsL1L2Enum
++syn keyword cConstant FlowequationIsHOEnum
++syn keyword cConstant FlowequationIsFSEnum
++syn keyword cConstant FlowequationFeFSEnum
++syn keyword cConstant FlowequationFeSSAEnum
+ syn keyword cConstant FlowequationVertexEquationEnum
+ syn keyword cConstant FrictionCoefficientEnum
+ syn keyword cConstant FrictionPEnum
+@@ -782,7 +782,7 @@
+ syn keyword cConstant BedSlopeXAnalysisEnum
+ syn keyword cConstant BedSlopeYAnalysisEnum
+ syn keyword cConstant DiagnosticHorizAnalysisEnum
+-syn keyword cConstant DiagnosticHutterAnalysisEnum
++syn keyword cConstant DiagnosticSIAAnalysisEnum
+ syn keyword cConstant DiagnosticSolutionEnum
+ syn keyword cConstant DiagnosticVertAnalysisEnum
+ syn keyword cConstant EnthalpyAnalysisEnum
+@@ -808,14 +808,14 @@
+ syn keyword cConstant GiaAnalysisEnum
+ syn keyword cConstant ApproximationEnum
+ syn keyword cConstant NoneApproximationEnum
+-syn keyword cConstant HutterApproximationEnum
+-syn keyword cConstant MacAyealApproximationEnum
+-syn keyword cConstant MacAyealPattynApproximationEnum
+-syn keyword cConstant MacAyealStokesApproximationEnum
++syn keyword cConstant SIAApproximationEnum
++syn keyword cConstant SSAApproximationEnum
++syn keyword cConstant SSAHOApproximationEnum
++syn keyword cConstant SSAFSApproximationEnum
+ syn keyword cConstant L1L2ApproximationEnum
+-syn keyword cConstant PattynApproximationEnum
+-syn keyword cConstant PattynStokesApproximationEnum
+-syn keyword cConstant StokesApproximationEnum
++syn keyword cConstant HOApproximationEnum
++syn keyword cConstant HOFSApproximationEnum
++syn keyword cConstant FSApproximationEnum
+ syn keyword cConstant ConstraintsEnum
+ syn keyword cConstant LoadsEnum
+ syn keyword cConstant MaterialsEnum
+@@ -850,8 +850,8 @@
+ syn keyword cConstant IntVecParamEnum
+ syn keyword cConstant TransientParamEnum
+ syn keyword cConstant IceFrontTypeEnum
+-syn keyword cConstant MacAyeal2dIceFrontEnum
+-syn keyword cConstant MacAyeal3dIceFrontEnum
++syn keyword cConstant SSA2dIceFrontEnum
++syn keyword cConstant SSA3dIceFrontEnum
+ syn keyword cConstant MaticeEnum
+ syn keyword cConstant MatdamageiceEnum
+ syn keyword cConstant MatparEnum
+@@ -860,7 +860,7 @@
+ syn keyword cConstant NumericalfluxTypeEnum
+ syn keyword cConstant ParamEnum
+ syn keyword cConstant L1L2IceFrontEnum
+-syn keyword cConstant PattynIceFrontEnum
++syn keyword cConstant HOIceFrontEnum
+ syn keyword cConstant PengridEnum
+ syn keyword cConstant PenpairEnum
+ syn keyword cConstant PentaEnum
+@@ -876,7 +876,7 @@
+ syn keyword cConstant SpcDynamicEnum
+ syn keyword cConstant SpcStaticEnum
+ syn keyword cConstant SpcTransientEnum
+-syn keyword cConstant StokesIceFrontEnum
++syn keyword cConstant FSIceFrontEnum
+ syn keyword cConstant StringArrayParamEnum
+ syn keyword cConstant StringParamEnum
+ syn keyword cConstant TriaEnum
+@@ -948,10 +948,10 @@
+ syn keyword cConstant VyEnum
+ syn keyword cConstant VyPicardEnum
+ syn keyword cConstant VzEnum
+-syn keyword cConstant VzMacAyealEnum
+-syn keyword cConstant VzPattynEnum
++syn keyword cConstant VzSSAEnum
++syn keyword cConstant VzHOEnum
+ syn keyword cConstant VzPicardEnum
+-syn keyword cConstant VzStokesEnum
++syn keyword cConstant VzFSEnum
+ syn keyword cConstant VxMeshEnum
+ syn keyword cConstant VyMeshEnum
+ syn keyword cConstant VzMeshEnum
+@@ -1029,7 +1029,7 @@
+ syn keyword cConstant SubelementMigrationEnum
+ syn keyword cConstant SubelementMigration2Enum
+ syn keyword cConstant GLlevelsetEnum
+-syn keyword cConstant StokesSolverEnum
++syn keyword cConstant FSSolverEnum
+ syn keyword cConstant AdjointEnum
+ syn keyword cConstant ColinearEnum
+ syn keyword cConstant ControlSteadyEnum
Index: /issm/oecreview/Archive/15392-16133/ISSM-15573-15574.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15573-15574.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15573-15574.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15573)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15574)
+@@ -592,6 +592,9 @@
+ 		
+ 	if test -d "$PETSC_ROOT"; then
+ 		AC_MSG_CHECKING(for petsc version)
++	   if ! test -f "$PETSC_ROOT/include/petscversion.h"; then
++			AC_MSG_ERROR([PETSc not instaled corretly: file ($PETSC_ROOT/include/petscversion.h) does not exist]);
++		fi
+ 		PETSC_MAJOR=`cat $PETSC_ROOT/include/petscversion.h | grep "#define PETSC_VERSION_MAJOR" | sed 's/#define PETSC_VERSION_MAJOR//' | sed 's/ //g'`
+ 		PETSC_MINOR=`cat $PETSC_ROOT/include/petscversion.h | grep "#define PETSC_VERSION_MINOR" | sed 's/#define PETSC_VERSION_MINOR//' | sed 's/ //g'`
+ 		AC_DEFINE_UNQUOTED([_PETSC_MAJOR_],$PETSC_MAJOR,[PETSc version major])
Index: /issm/oecreview/Archive/15392-16133/ISSM-15574-15575.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15574-15575.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15574-15575.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/configs/config-pleiades-petsc3.4.sh
+===================================================================
+--- ../trunk-jpl/configs/config-pleiades-petsc3.4.sh	(revision 15574)
++++ ../trunk-jpl/configs/config-pleiades-petsc3.4.sh	(revision 15575)
+@@ -9,7 +9,7 @@
+  --with-mpi-include="/nasa/sgi/mpt/2.06rp16/include" \
+  --with-mpi-libflags="-L/nasa/sgi/mpt/2.06rp16/ -lmpi" \
+  --with-mkl-dir="/nasa/intel/Compiler/2013.1.117/composer_xe_2013.1.117/mkl/lib/intel64" \
+- --with-petsc-arch=$ISSM_ARCH \
++ --with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install" \
+  --with-dakota-dir="$ISSM_DIR/externalpackages/dakota/install" \
+  --with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
+  --with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
Index: /issm/oecreview/Archive/15392-16133/ISSM-15575-15576.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15575-15576.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15575-15576.diff	(revision 16134)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15575)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15576)
+@@ -119,7 +119,6 @@
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+ 			 fprintf(fid,'module load comp-intel/2013.1.117\n');
+ 			 fprintf(fid,'module load mpi-sgi/mpt.2.06rp16\n');
+-			 fprintf(fid,'module load math/intel_mkl_64_10.0.011\n\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
+ 			 fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
+ 			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+@@ -170,7 +169,6 @@
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+ 			 fprintf(fid,'module load comp-intel/2013.1.117\n');
+ 			 fprintf(fid,'module load mpi-sgi/mpt.2.06rp16\n');
+-			 fprintf(fid,'module load math/intel_mkl_64_10.0.011\n\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n');
+ 			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
+ 			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
Index: /issm/oecreview/Archive/15392-16133/ISSM-15576-15577.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15576-15577.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15576-15577.diff	(revision 16134)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 15576)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 15577)
+@@ -15,7 +15,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-11,1e-11,1e-11,1e-11};
++field_tolerances={2e-11,1e-11,1e-11,1e-11};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 15576)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 15577)
+@@ -24,7 +24,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06};
++field_tolerances={1e-10,2e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06};
+ field_values={...
+ 	(md.results.SteadystateSolution.Gradient1),...
+ 	md.results.SteadystateSolution.J,...
+Index: ../trunk-jpl/test/NightlyRun/test505.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.m	(revision 15576)
++++ ../trunk-jpl/test/NightlyRun/test505.m	(revision 15577)
+@@ -10,7 +10,7 @@
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
+ field_tolerances={1e-12,1e-12,1e-10,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-						1e-13,1e-12,1e-10,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8};
++						1e-13,1e-12,1e-10,1e-12,1e-13,1e-11,1e-11,2e-12,1e-11,1e-8};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 15576)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 15577)
+@@ -9,7 +9,7 @@
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
+-field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,1e-12,1e-11,1e-12,1e-12,...
++field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,...
+ 						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,1e-08};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15577-15578.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15577-15578.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15577-15578.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive274.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15578-15579.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15578-15579.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15578-15579.diff	(revision 16134)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/test/NightlyRun/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.py	(revision 15578)
++++ ../trunk-jpl/test/NightlyRun/test220.py	(revision 15579)
+@@ -10,7 +10,7 @@
+ 
+ md=triangle(model(),'../Exp/Square.exp',120000.)
+ md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
++md=parameterize(md,'../Par/SquareShelf2.py')
+ md.extrude(2,1.)
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO')
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 15578)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 15579)
+@@ -14,7 +14,7 @@
+ md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.)
+ md=meshprocessrifts(md,'../Exp/Square.exp')
+ md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
++md=parameterize(md,'../Par/SquareShelf2.py')
+ md.materials=matdamageice()
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 15578)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 15579)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.);
+ md=meshprocessrifts(md,'../Exp/Square.exp');
+ md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.par');
++md=parameterize(md,'../Par/SquareShelf2.par');
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+Index: ../trunk-jpl/test/NightlyRun/test221.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.py	(revision 15578)
++++ ../trunk-jpl/test/NightlyRun/test221.py	(revision 15579)
+@@ -9,7 +9,7 @@
+ 
+ md=triangle(model(),'../Exp/Square.exp',120000.)
+ md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
++md=parameterize(md,'../Par/SquareShelf2.py')
+ md.extrude(2,1.)
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test220.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.m	(revision 15578)
++++ ../trunk-jpl/test/NightlyRun/test220.m	(revision 15579)
+@@ -1,6 +1,6 @@
+ md=triangle(model(),'../Exp/Square.exp',120000.);
+ md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.par');
++md=parameterize(md,'../Par/SquareShelf2.par');
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 15578)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 15579)
+@@ -1,6 +1,6 @@
+ md=triangle(model(),'../Exp/Square.exp',120000.);
+ md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.par');
++md=parameterize(md,'../Par/SquareShelf2.par');
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15579-15580.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15579-15580.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15579-15580.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test280.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.py	(revision 15579)
++++ ../trunk-jpl/test/NightlyRun/test280.py	(revision 15580)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md=setflowequation(md,'SSA','all')
+-md.flowequation.fe_ssa=1
++md.flowequation.fe_SSA=1
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test280.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.m	(revision 15579)
++++ ../trunk-jpl/test/NightlyRun/test280.m	(revision 15580)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+-md.flowequation.fe_ssa=1;
++md.flowequation.fe_SSA=1;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15580-15581.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15580-15581.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15580-15581.diff	(revision 16134)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 15580)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 15581)
+@@ -8,7 +8,7 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',10000.)
++md=triangle(model(),'../Exp/Pig.exp',11000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ 
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 15580)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 15581)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Pig.exp',10000.);
++md=triangle(model(),'../Exp/Pig.exp',11000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ 
+Index: ../trunk-jpl/test/Archives/Archive511.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15581-15582.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15581-15582.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15581-15582.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive201.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15582-15583.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15582-15583.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15582-15583.diff	(revision 16134)
@@ -0,0 +1,375 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15582)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15583)
+@@ -17,7 +17,20 @@
+ 	/*Now, is the flag isSIA on? otherwise, do nothing: */
+ 	if(!isSIA) return;
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	CreateNodes(pnodes,iomodel,DiagnosticSIAAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	/*First create nodes*/
++	Nodes* nodes=*pnodes;
++	if(!nodes) nodes = new Nodes();
++
++	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		if(iomodel->my_vertices[i]){
++			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,DiagnosticSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
++		}
++	}
++	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++
++	/*Assign output pointer: */
++	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15582)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15583)
+@@ -11,31 +11,74 @@
+ void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	bool   isSSA,isL1L2,isHO,isFS;
+-	int    finiteelementssa;
++	bool isSSA,isL1L2,isHO,isFS,iscoupling;
++	int  temp,finiteelement=-1,approximation=-1;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+ 	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+ 	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+ 	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-	iomodel->Constant(&finiteelementssa,FlowequationFeSSAEnum);
+ 
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	/*Now, check that we have non SIA elements */
+ 	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+ 
+-	/*Create nodes: */
+-	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-	if(finiteelementssa==0){
+-		CreateNodes(pnodes,iomodel,DiagnosticHorizAnalysisEnum,P1Enum);
++	/*Do we have coupling*/
++	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*If no coupling, call Regular CreateNodes, else, use P1 elements only*/
++	if(!iscoupling){
++
++		/*Get finite element type*/
++		if(isSSA){
++			approximation=SSAApproximationEnum;
++			iomodel->Constant(&temp,FlowequationFeSSAEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum; break;
++				case 1 : finiteelement = P2Enum; break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isL1L2){
++			approximation = L1L2ApproximationEnum;
++			finiteelement = P1Enum;
++		}
++		else if(isHO){
++			approximation = HOApproximationEnum;
++			finiteelement = P1Enum;
++		}
++		else if(isFS){
++			approximation = FSApproximationEnum;
++			finiteelement = P1Enum;
++		}
++
++		iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++		CreateNodes(pnodes,iomodel,DiagnosticHorizAnalysisEnum,finiteelement,approximation);
++		iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 	}
+-	else if(finiteelementssa==1){
+-		CreateNodes(pnodes,iomodel,DiagnosticHorizAnalysisEnum,P2Enum);
+-	}
+ 	else{
+-		_error_("finite element not supported yet");
++		/*Coupling: we are going to create P1 Elements only*/
++
++		/*First create nodes*/
++		Nodes* nodes=*pnodes;
++		if(!nodes) nodes = new Nodes();
++
++		iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++		for(int i=0;i<iomodel->numberofvertices;i++){
++			if(iomodel->my_vertices[i]){
++				nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,DiagnosticHorizAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
++			}
++		}
++		iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++
++		/*Assign output pointer: */
++		*pnodes=nodes;
+ 	}
+-	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15582)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15583)
+@@ -22,7 +22,7 @@
+ void CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
+-void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element);
++void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation=NoneApproximationEnum);
+ 
+ /*Creation of fem datasets: specialised drivers: */
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15582)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15583)
+@@ -8,7 +8,7 @@
+ #include "../MeshPartitionx/MeshPartitionx.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element){
++void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation){
+ 
+ 	/*Intermediaries*/
+ 	int   i,j;
+@@ -25,7 +25,7 @@
+ 		case P1Enum:
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			break;
+@@ -35,7 +35,7 @@
+ 			for(i=0;i<iomodel->numberofelements;i++){
+ 				for(j=0;j<3;j++){
+ 					if(my_nodes[3*i+j]){ 
+-						nodes->AddObject(new Node(iomodel->nodecounter+3*i+j+1,iomodel->nodecounter+3*i+j,iomodel->elements[+3*i+j]-1,iomodel,analysis));
++						nodes->AddObject(new Node(iomodel->nodecounter+3*i+j+1,iomodel->nodecounter+3*i+j,iomodel->elements[+3*i+j]-1,iomodel,analysis,approximation));
+ 
+ 					}
+ 				}
+@@ -47,27 +47,28 @@
+ 			CreateElementToEdgeConnectivity(iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			break;
+ 
+ 		case MINIcondensedEnum:
++			_assert_(approximation==FSApproximationEnum);
+ 			/*P1 velocity*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			/*P1+ pressure statically condensed*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,i,i,iomodel,analysis));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,i,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 15582)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 15583)
+@@ -10,6 +10,7 @@
+ #include "../datastructures/datastructures.h"
+ #include "../shared/shared.h"
+ #include "./DofIndexing.h"
++#include "./Update.h"
+ class  Inputs;
+ class  Hook;
+ class  IoModel;
+@@ -19,7 +20,6 @@
+ template <class doubletype> class  Matrix;
+ class ElementVector;
+ class ElementMatrix;
+-#include "Update.h"
+ /*}}}*/
+ 
+ class Node: public Object ,public Update{
+@@ -37,19 +37,19 @@
+ 		int          analysis_type;
+ 		IssmDouble   coord_system[3][3];
+ 
+-		/*Node constructors, destructors {{{*/
++		/*Node constructors, destructors*/
+ 		Node();
+-		Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type);
++		Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int approximation_in);
+ 		~Node();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
++
++		/*Object virtual functions definitions:*/
+ 		void    Echo();
+ 		void    DeepEcho();
+ 		int     Id();
+ 		int     ObjectEnum();
+-		Object *copy()        {_error_("Not implemented yet (similar to Elements)"); };
+-		/*}}}*/
+-		/*Update virtual functions definitions: {{{*/
++		Object *copy(){_error_("Not implemented yet (similar to Elements)"); };
++
++		/*Update virtual functions definitions:*/
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+ 		void  InputUpdateFromVector(int* vector, int name, int type);
+ 		void  InputUpdateFromVector(bool* vector, int name, int type);
+@@ -62,8 +62,8 @@
+ 		void  InputUpdateFromConstant(bool constant, int name);
+ 		void  InputUpdateFromSolution(IssmDouble* solution){_error_("Not implemented yet!");}
+ 		void  InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("Not implemented yet!");}
+-		/*}}}*/
+-		/*Node numerical routines {{{*/
++
++		/*Node numerical routines*/
+ 		void  CreateNodalConstraints(Vector<IssmDouble>* ys);
+ 		void  SetCurrentConfiguration(DataSet* nodes,Vertices* vertices);
+ 		int   Sid(void); 
+@@ -96,7 +96,6 @@
+ 		void  ShowTrueDofs(int* truerows,int ncols,int setenum);
+ 		void  UpdateCloneDofs(int* alltruerows,int ncols,int setenum);
+ 		void  SetClone(int* minranks);
+-		/*}}}*/
+ };
+ 
+ /*Methods inherent to Node: */
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15582)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15583)
+@@ -21,13 +21,12 @@
+ 	this->inputs=NULL;
+ }
+ /*}}}*/
+-/*FUNCTION Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type) {{{*/
+-Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type){
++/*FUNCTION Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int approximation) {{{*/
++Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int in_approximation){
+ 
+ 	/*Intermediary*/
+ 	int k,l;
+ 	int gsize;
+-	int node_type;
+ 
+ 	/*id: */
+ 	this->id            = node_id;
+@@ -39,12 +38,11 @@
+ 	for(k=0;k<3;k++) this->coord_system[k][k]=1.0;
+ 
+ 	/*indexing:*/
+-	node_type = reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index]);
+-	DistributeNumDofs(&this->indexing,analysis_type,node_type); //number of dofs per node
++	DistributeNumDofs(&this->indexing,analysis_type,in_approximation); //number of dofs per node
+ 	gsize=this->indexing.gsize;
+ 
+ 	if(analysis_type==DiagnosticHorizAnalysisEnum)
+-	 this->approximation=reCast<int>(node_type);
++	 this->approximation=in_approximation;
+ 	else
+ 	 this->approximation=0;
+ 
+@@ -54,8 +52,6 @@
+ 	 this->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,reCast<bool>(iomodel->Data(MaskVertexonfloatingiceEnum)[io_index])));
+ 	if(iomodel->Data(MaskVertexongroundediceEnum))
+ 	  this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<bool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index])));
+-	if(analysis_type==DiagnosticHorizAnalysisEnum)
+-	 this->approximation=reCast<int>(node_type);
+ 	/*set single point constraints: */
+ 
+ 	/*spc all nodes on water*/
+@@ -76,25 +72,25 @@
+ 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum)); 
+ 			_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+-			if(node_type==SSAApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
++			if(in_approximation==SSAApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 				this->Deactivate();
+ 			}
+-			if(node_type==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
++			if(in_approximation==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 				this->Deactivate();
+ 			}
+-			if(node_type==SSAHOApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
++			if(in_approximation==SSAHOApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
+ 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 					this->Deactivate();
+ 				}
+ 			}
+-			if(node_type==SSAFSApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
++			if(in_approximation==SSAFSApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
+ 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
+ 					for(k=1;k<=2;k++) this->FreezeDof(k);
+ 				}
+ 			}
+ 		}
+ 		/*spc all nodes on SIA*/
+-		if(node_type==SIAApproximationEnum){
++		if(in_approximation==SIAApproximationEnum){
+ 			this->Deactivate();
+ 		}
+ 	}
+@@ -104,7 +100,7 @@
+ 	if(analysis_type==DiagnosticSIAAnalysisEnum){
+ 		_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+ 		/*Constrain all nodes that are not SIA*/
+-		if(reCast<int>(node_type)!=SIAApproximationEnum){
++		if(reCast<int>(in_approximation)!=SIAApproximationEnum){
+ 			this->Deactivate();
+ 		}
+ 	}
+@@ -142,11 +138,12 @@
+ void Node::Echo(void){
+ 
+ 	_printf_("Node:\n");
+-	_printf_("   id: " << id << "\n");
++	_printf_("   id : " << id << "\n");
+ 	_printf_("   sid: " << sid << "\n");
+ 	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
++	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
+ 	indexing.Echo();
+-	_printf_("   inputs:      " << inputs << "\n");
++	_printf_("   inputs: " << inputs << "\n");
+ 
+ }
+ /*}}}*/
+@@ -450,6 +447,10 @@
+ 	/*Put dof for this node into the s set (ie, this dof will be constrained 
+ 	 * to a fixed value during computations. */
+ 
++	if(dof>=this->indexing.gsize){
++		printf("dof spc = %i\n",dof);
++		this->Echo();
++	}
+ 	_assert_(dof<this->indexing.gsize);
+ 
+ 	this->indexing.f_set[dof]=0; //n splits into f (for which we solve) and s (single point constraints)
Index: /issm/oecreview/Archive/15392-16133/ISSM-15583-15584.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15583-15584.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15583-15584.diff	(revision 16134)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15583)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15584)
+@@ -181,6 +181,27 @@
+ 	fi
+ 	AC_MSG_RESULT($HAVE_TRIANGLE)
+ 	dnl }}}
++	dnl boost{{{
++	AC_ARG_WITH([boost-dir],
++	  AS_HELP_STRING([--with-boost-dir=DIR], [boost root directory.]),
++	  [BOOST_ROOT=$withval],[BOOST_ROOT=""]) 
++	AC_MSG_CHECKING(for boost)
++	
++	if test -d "$BOOST_ROOT"; then
++		dnl defaults
++		HAVE_BOOST=yes
++		BOOSTINCL=-I$BOOST_ROOT/include
++		BOOSTLIB="-L$BOOST_ROOT/lib -lboost_python"
++
++		AC_DEFINE([_HAVE_BOOST_],[1],[with Boost in ISSM src])
++		AC_SUBST([BOOSTINCL])
++		AC_SUBST([BOOSTLIB])
++	else
++		HAVE_BOOST=no
++	fi
++	AM_CONDITIONAL([BOOST], [test x$HAVE_BOOST = xyes])
++	AC_MSG_RESULT($HAVE_BOOST)
++	dnl }}}
+ 	dnl dakota{{{
+ 	AC_ARG_WITH([dakota-dir],
+ 	  AS_HELP_STRING([--with-dakota-dir=DIR], [dakota root directory. necessary for serial build]),
+@@ -211,7 +232,7 @@
+ 				if      test x$DAKOTA_VERSION = x4.2 || test x$DAKOTA_VERSION = x4.2+; then
+ 					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -lfftw3 -llhs -levidence -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -lopt -lpsuade -lnewmat -lncsuopt -lgsl -lquadrature -lcoliny -lcolin -lpebbl -lutilib -l3po -lnappspack -lappspack -lconveyor -lshared -lcdd -lamplsolver"
+ 				else if test x$DAKOTA_VERSION = x5.1 || test x$DAKOTA_VERSION = x5.2; then
+-					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -llhs -lsparsegrid -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -loptpp -lpsuade -lncsuopt -lcolin -linterfaces -lmomh -lscolib -lpebbl -ltinyxml -lutilib -l3po -lhopspack -lnidr -lamplsolver -lboost_signals -lboost_regex -lboost_filesystem -lboost_system"
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -llhs -lsparsegrid -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -loptpp -lpsuade -lncsuopt -lcolin -linterfaces -lmomh -lscolib -lpebbl -ltinyxml -lutilib -l3po -lhopspack -lnidr -lamplsolver -lboost_signals -lboost_regex -lboost_filesystem"
+ 				else
+ 					AC_MSG_ERROR([Dakota version not found or version ($DAKOTA_VERSION) not supported!]);
+ 				fi
+@@ -224,7 +245,7 @@
+ 					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -llhs -lsparsegrid -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -loptpp -lpsuade -lncsuopt -lcolin -linterfaces -lmomh -lscolib -lpebbl -ltinyxml -lutilib -l3po -lhopspack -lnidr -lamplsolver -lboost_signals -lboost_regex -lboost_filesystem -lboost_system -ldl"
+ 				else if test x$DAKOTA_VERSION = x5.3 || test x$DAKOTA_VERSION = x5.3.1; then
+ 					DAKOTAFLAGS="-DDISABLE_DAKOTA_CONFIG_H -DBOOST_MULTI_INDEX_DISABLE_SERIALIZATION -DDAKOTA_PLUGIN -DBOOST_DISABLE_ASSERTS -DDAKOTA_HAVE_BOOST_FS -DHAVE_UNISTD_H -DHAVE_SYSTEM -DHAVE_WORKING_FORK -DHAVE_WORKING_VFORK -DHAVE_SYS_WAIT_H -DHAVE_USLEEP -DDAKOTA_F90 -DDAKOTA_HAVE_MPI -DHAVE_PECOS -DHAVE_SURFPACK -DDAKOTA_COLINY -DDAKOTA_UTILIB -DHAVE_ADAPTIVE_SAMPLING -DHAVE_CONMIN -DDAKOTA_DDACE -DHAVE_FSUDACE -DDAKOTA_HOPS -DHAVE_JEGA -DHAVE_NCSU -DHAVE_NL2SOL -DHAVE_OPTPP -DDAKOTA_OPTPP -DHAVE_PSUADE -DHAVE_AMPL"
+-					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota_src -ldakota_src_fortran -lnidr -lteuchos -lpecos -lpecos_src -llhs -lmods -lmod -ldfftpack -lsparsegrid -lsurfpack -lsurfpack_fortran -lutilib -lcolin -linterfaces -lscolib -l3po -lpebbl -ltinyxml -lconmin -ldace -lanalyzer -lrandom -lsampling -lbose -lfsudace -lhopspack -ljega -ljega_fe -lmoga -lsoga -leutils -lutilities -lncsuopt -lcport -loptpp -lpsuade -lamplsolver"
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota_src -ldakota_src_fortran -lnidr -lteuchos -lpecos -lpecos_src -llhs -lmods -lmod -ldfftpack -lsparsegrid -lsurfpack -lsurfpack_fortran -lutilib -lcolin -linterfaces -lscolib -l3po -lpebbl -ltinyxml -lconmin -ldace -lanalyzer -lrandom -lsampling -lbose -lfsudace -lhopspack -ljega -ljega_fe -lmoga -lsoga -leutils -lutilities -lncsuopt -lcport -loptpp -lpsuade -lamplsolver -L$BOOST_ROOT/lib -lboost_signals -lboost_regex -lboost_filesystem -lboost_system "
+ 				else
+ 					AC_MSG_ERROR([Dakota version not found or version ($DAKOTA_VERSION) not supported!]);
+ 				fi
+@@ -287,27 +308,6 @@
+ 
+ 	AM_CONDITIONAL([DAKOTA], [test x$HAVE_DAKOTA = xyes])
+ 	dnl }}}
+-	dnl boost{{{
+-	AC_ARG_WITH([boost-dir],
+-	  AS_HELP_STRING([--with-boost-dir=DIR], [boost root directory.]),
+-	  [BOOST_ROOT=$withval],[BOOST_ROOT=""]) 
+-	AC_MSG_CHECKING(for boost)
+-	
+-	if test -d "$BOOST_ROOT"; then
+-		dnl defaults
+-		HAVE_BOOST=yes
+-		BOOSTINCL=-I$BOOST_ROOT/include
+-		BOOSTLIB="-L$BOOST_ROOT/lib -lboost_python"
+-
+-		AC_DEFINE([_HAVE_BOOST_],[1],[with Boost in ISSM src])
+-		AC_SUBST([BOOSTINCL])
+-		AC_SUBST([BOOSTLIB])
+-	else
+-		HAVE_BOOST=no
+-	fi
+-	AM_CONDITIONAL([BOOST], [test x$HAVE_BOOST = xyes])
+-	AC_MSG_RESULT($HAVE_BOOST)
+-	dnl }}}
+ 	dnl python{{{
+ 	AC_ARG_WITH([python-dir],
+ 	  AS_HELP_STRING([--with-python-dir=DIR], [python root directory.]),
Index: /issm/oecreview/Archive/15392-16133/ISSM-15584-15585.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15584-15585.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15584-15585.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive274.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15585-15586.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15585-15586.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15585-15586.diff	(revision 16134)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/test/NightlyRun/test211.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.py	(revision 15585)
++++ ../trunk-jpl/test/NightlyRun/test211.py	(revision 15586)
+@@ -27,7 +27,7 @@
+ field_tolerances=[\
+ 	1e-08,1e-08,1e-06,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,\
+ 	1e-08,1e-08,1e-06,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06,\
+-	1e-07,1e-07,1e-06,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06]
++	1e-07,1e-07,1e-06,2e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 15585)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 15586)
+@@ -18,7 +18,7 @@
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-08]
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,2e-08]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test513.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.py	(revision 15585)
++++ ../trunk-jpl/test/NightlyRun/test513.py	(revision 15586)
+@@ -35,7 +35,7 @@
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06]
++field_tolerances=[2e-10,2e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06]
+ field_values=[\
+ 	md.results.SteadystateSolution.Gradient1,\
+ 	md.results.SteadystateSolution.J,\
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 15585)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 15586)
+@@ -19,7 +19,7 @@
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
+ field_tolerances=[1e-12,1e-12,1e-10,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13, \
+-						1e-13,1e-12,1e-10,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8]
++						1e-13,1e-12,1e-10,1e-12,1e-13,1e-11,1e-11,2e-12,1e-11,1e-8]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 15585)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 15586)
+@@ -18,7 +18,7 @@
+ # Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
+-field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,1e-12,1e-11,1e-12,1e-12,\
++field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,\
+ 						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,1e-08]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15586-15587.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15586-15587.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15586-15587.diff	(revision 16134)
@@ -0,0 +1,91 @@
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 0)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 15587)
+@@ -0,0 +1,86 @@
++import os.path
++import inspect
++import netCDF4
++from numpy import *
++from verbose import *
++from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
++from paterson import *
++from SetIceShelfBC import *
++
++#Start defining model parameters here
++#Geometry
++hmin=300.
++hmax=1000.
++ymin=min(md.mesh.y)
++ymax=max(md.mesh.y)
++
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++
++#Initial velocity and pressure
++iVelF = netCDF4.Dataset('../Data/SquareShelf.nc','r')
++
++x=reshape(iVelF.variables['x'][:],(-1))
++y=reshape(iVelF.variables['y'][:],(-1))
++vx=iVelF.variables['vx'][:]
++vy=iVelF.variables['vy'][:]
++index=iVelF.variables['index'][:].astype(int)
++
++#dbg - begin
++# #print 'vars in SquareShelf.nc:'
++# #for v in iVelF.variables:
++# #	print v
++#dbg - end 
++
++iVelF.close()
++
++[md.initialization.vx]=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
++[md.initialization.vy]=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
++md.initialization.vz=zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
++
++#dbg - begin
++#print '...vx:'
++#print md.initialization.vx
++#print '...vy:'
++#print md.initialization.vy
++##print '...vz:'
++##print md.initialization.vz
++##print '...pressure:'
++##print md.initialization.pressure
++#dbg - end 
++
++
++#Materials
++md.initialization.temperature = (273.-20.)*ones((md.mesh.numberofvertices,1))
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
++
++#Friction
++pos=nonzero(md.mask.elementonfloatingice)
++md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1] = 0.
++md.friction.p = ones((md.mesh.numberofelements,1))
++md.friction.q = ones((md.mesh.numberofelements,1))
++
++#Numerical parameters
++md.diagnostic.viscosity_overshoot = 0.3
++md.prognostic.stabilization = 1.
++md.thermal.stabilization = 1.
++md.settings.waitonlock = 30
++md.verbose=verbose()
++md.diagnostic.restol = 0.10
++md.steadystate.reltol = 0.02
++md.diagnostic.reltol = 0.02
++md.diagnostic.abstol = nan
++md.timestepping.time_step = 1.
++md.timestepping.final_time = 3.
++
++#Boundary conditions:
++# #md=SetIceShelfBC(md)
++md=SetIceShelfBC(md,'../Exp/SquareFront2.exp')
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name=os.path.basename(inspect.stack()[2][1]).split('.')[0]
Index: /issm/oecreview/Archive/15392-16133/ISSM-15587-15588.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15587-15588.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15587-15588.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 15587)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 15588)
+@@ -12,7 +12,7 @@
+ md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.)
+ md=meshprocessrifts(md,'../Exp/Square.exp')
+ md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
++md=parameterize(md,'../Par/SquareShelf2.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15588-15589.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15588-15589.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15588-15589.diff	(revision 16134)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 15588)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 15589)
+@@ -28,7 +28,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[1e-11,1e-11,1e-11,1e-11]
++field_tolerances=[2e-11,1e-11,1e-11,1e-11]
+ field_values=[\
+ 	md.results.DiagnosticSolution.Vx,\
+ 	md.results.DiagnosticSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test429.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.py	(revision 15588)
++++ ../trunk-jpl/test/NightlyRun/test429.py	(revision 15589)
+@@ -20,7 +20,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
++field_tolerances=[1e-09,2e-09,1e-09,2e-09,1e-09]
+ field_values=[\
+ 	md.results.DiagnosticSolution.Vx,\
+ 	md.results.DiagnosticSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test434.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.m	(revision 15588)
++++ ../trunk-jpl/test/NightlyRun/test434.m	(revision 15589)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-07,1e-06,1e-07,1e-06,1e-07};
++field_tolerances={1e-07,1e-06,2e-07,1e-06,1e-07};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15589-15590.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15589-15590.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15589-15590.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 15589)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 15590)
+@@ -41,9 +41,9 @@
+ %%  nond_sampling study
+ md.qmu.method=dakota_method('nond_samp');
+ md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'seed',1234,'samples',20,'sample_type','lhs');
+-dver=textscan(dakotaversion(),'%[0123456789].%[0123456789].%[0123456789]')
++dver=textscan(dakotaversion(),'%[0123456789].%[0123456789].%[0123456789]');
+ if ((str2num(dver{1}{1})==4 && str2num(dver{2}{1})>2) || str2num(dver{1}{1})>4)
+-	md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'rng','rnum2')
++	md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'rng','rnum2');
+ end
+ 
+ %parameters
Index: /issm/oecreview/Archive/15392-16133/ISSM-15590-15591.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15590-15591.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15590-15591.diff	(revision 16134)
@@ -0,0 +1,144 @@
+Index: ../trunk-jpl/test/Archives/Archive212.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive232.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive206.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive226.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive272.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive221.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive215.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive209.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive229.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive210.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive230.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive204.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive224.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive270.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive213.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive233.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive207.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive202.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive222.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive216.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive236.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive211.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive231.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive205.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive225.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive219.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive220.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive214.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive280.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive208.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive228.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive274.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive203.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive223.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive217.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive237.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15591-15592.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15591-15592.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15591-15592.diff	(revision 16134)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/test/Archives/Archive434.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive408.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive428.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive403.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive423.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive406.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive426.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive401.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive421.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive415.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive409.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive429.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive410.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive430.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive404.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive424.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive407.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive427.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive402.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive422.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive416.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive411.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive405.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive425.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive419.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15592-15593.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15592-15593.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15592-15593.diff	(revision 16134)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/test/Archives/Archive501.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive515.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive509.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive510.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive504.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive513.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive502.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive516.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive511.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive505.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive514.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive508.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive503.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive512.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15593-15594.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15593-15594.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15593-15594.diff	(revision 16134)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15593)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15594)
+@@ -10,8 +10,11 @@
+ 
+ void	CreateNodesDiagnosticSIA(Nodes** pnodes, IoModel* iomodel){
+ 
++	/*Intermediaries*/
++	bool  isSIA;
++	Node* node = NULL;
++
+ 	/*Fetch parameters: */
+-	bool isSIA;
+ 	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+ 
+ 	/*Now, is the flag isSIA on? otherwise, do nothing: */
+@@ -23,11 +26,23 @@
+ 
+ 	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,DiagnosticSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
++
++			/*Create new node if is in this processor's partition*/
++			node = new Node(iomodel->nodecounter+i+1,i,i,iomodel,DiagnosticSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
++
++			/*Deactivate node if not SIA*/
++			if(reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
++				node->Deactivate();
++			}
++
++			/*Add to Nodes dataset*/
++			nodes->AddObject(node);
+ 		}
+ 	}
++
+ 	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15593)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15594)
+@@ -96,16 +96,7 @@
+ 	}
+ 	#endif
+ 
+-	/*Diagnostic SIA*/
+-	if(analysis_type==DiagnosticSIAAnalysisEnum){
+-		_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+-		/*Constrain all nodes that are not SIA*/
+-		if(reCast<int>(in_approximation)!=SIAApproximationEnum){
+-			this->Deactivate();
+-		}
+-	}
+-
+-	/*Prognostic/ Melting/ Slopecompute/ Balancethickness*/
++	/*2d solutions in 3d, we need to constrain all the nodes that are not on base*/
+ 	if(
+ 				analysis_type==PrognosticAnalysisEnum || 
+ 				analysis_type==MeltingAnalysisEnum || 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15594-15595.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15594-15595.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15594-15595.diff	(revision 16134)
@@ -0,0 +1,378 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15594)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15595)
+@@ -146,7 +146,7 @@
+ 	MaskVertexonfloatingiceEnum,
+ 	MaskVertexongroundediceEnum,
+ 	MaskVertexonwaterEnum,
+-	IcelevelsetEnum,
++	MaskIcelevelsetEnum,
+ 	MaterialsBetaEnum,
+ 	MaterialsHeatcapacityEnum,
+ 	MaterialsLatentheatEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15594)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15595)
+@@ -154,7 +154,7 @@
+ 		case MaskVertexonfloatingiceEnum : return "MaskVertexonfloatingice";
+ 		case MaskVertexongroundediceEnum : return "MaskVertexongroundedice";
+ 		case MaskVertexonwaterEnum : return "MaskVertexonwater";
+-		case IcelevelsetEnum : return "Icelevelset";
++		case MaskIcelevelsetEnum : return "MaskIcelevelset";
+ 		case MaterialsBetaEnum : return "MaterialsBeta";
+ 		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
+ 		case MaterialsLatentheatEnum : return "MaterialsLatentheat";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15594)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15595)
+@@ -157,7 +157,7 @@
+ 	      else if (strcmp(name,"MaskVertexonfloatingice")==0) return MaskVertexonfloatingiceEnum;
+ 	      else if (strcmp(name,"MaskVertexongroundedice")==0) return MaskVertexongroundediceEnum;
+ 	      else if (strcmp(name,"MaskVertexonwater")==0) return MaskVertexonwaterEnum;
+-	      else if (strcmp(name,"Icelevelset")==0) return IcelevelsetEnum;
++	      else if (strcmp(name,"MaskIcelevelset")==0) return MaskIcelevelsetEnum;
+ 	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
+ 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
+ 	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15594)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15595)
+@@ -55,7 +55,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+-	iomodel->FetchDataToInput(elements,IcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15594)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15595)
+@@ -81,7 +81,7 @@
+ 	/*Create vertices: */
+ 
+ 	/*Fetch data:*/
+-	iomodel->FetchData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
++	iomodel->FetchData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIcelevelsetEnum);
+ 	CreateNumberNodeToElementConnectivity(iomodel);
+ 
+ 	for(i=0;i<iomodel->numberofvertices;i++){
+@@ -95,7 +95,7 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,IcelevelsetEnum);
++	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIcelevelsetEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pelements=elements;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15594)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15595)
+@@ -1847,7 +1847,7 @@
+ 				name==BathymetryEnum ||
+ 				name==BedEnum ||
+ 				name==GLlevelsetEnum ||
+-				name==IcelevelsetEnum ||
++				name==MaskIcelevelsetEnum ||
+ 				name==SurfaceSlopeXEnum ||
+ 				name==SurfaceSlopeYEnum ||
+ 				name==BasalforcingsMeltingRateEnum ||
+@@ -3154,7 +3154,7 @@
+ 	bool        isfront;
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
++	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
+ 
+ 	/*If the level set is awlays <0, there is no ice front here*/
+ 	isfront = false;
+@@ -3186,7 +3186,7 @@
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
+-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
+ 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,2);
+ 	GetSegmentNormal(&normal[0],xyz_list_front);
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15594)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15595)
+@@ -2356,7 +2356,7 @@
+ 				name==WaterfractionEnum||
+ 				name==FrictionCoefficientEnum ||
+ 				name==GLlevelsetEnum ||
+-				name==IcelevelsetEnum ||
++				name==MaskIcelevelsetEnum ||
+ 				name==GradientEnum ||
+ 				name==OldGradientEnum  ||
+ 				name==ConvergedEnum || 
+@@ -7973,7 +7973,7 @@
+ 	bool        isfront;
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
++	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
+ 
+ 	/*If the level set is awlays <=0, there is no ice front here*/
+ 	isfront = false;
+@@ -8004,7 +8004,7 @@
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
+-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
+ 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
+ 	GetQuadNormal(&normal[0],xyz_list_front);
+ 
+@@ -8178,7 +8178,7 @@
+ 	bool        isfront;
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	GetInputListOnVertices(&ls[0],IcelevelsetEnum);
++	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
+ 
+ 	/*If the level set is awlays <=0, there is no ice front here*/
+ 	isfront = false;
+@@ -8208,7 +8208,7 @@
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
+-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,IcelevelsetEnum);
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
+ 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
+ 	GetQuadNormal(&normal[0],xyz_list_front);
+ 
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15594)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15595)
+@@ -11,7 +11,8 @@
+ 		vertexonfloatingice  = NaN;
+ 		vertexongroundedice  = NaN;
+ 		vertexonwater        = NaN;
+-		vertexonrock        = NaN;
++		vertexonrock         = NaN;
++		icelevelset          = NaN;
+ 	end
+ 	methods
+ 		function obj = mask(varargin) % {{{
+@@ -33,6 +34,11 @@
+ 			md = checkfield(md,'mask.vertexonfloatingice','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'mask.vertexongroundedice','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'mask.vertexonwater'      ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
++			md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices 1]);
++			isice=(md.mask.icelevelset>0);
++			if any(sum(isice(md.mesh.elements),2)==0),
++				error('elements with no ice not implemented yet, each element should have at least one vertex with md.mask.icelevelset > 0');
++			end
+ 			%md = checkfield(md,'mask.vertexonrock'      ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 		end % }}}
+ 		function disp(obj) % {{{
+@@ -45,6 +51,7 @@
+ 			fielddisplay(obj,'elementonwater','element on rock flags list');
+ 			fielddisplay(obj,'vertexonwater','vertex on water flags list');
+ 			fielddisplay(obj,'vertexonrock','vertex on rock flags list');
++			fielddisplay(obj,'icelevelset','presence of ice if > 0, icefront position if = 0, no ice if < 0');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','elementonfloatingice','format','BooleanMat','mattype',2);
+@@ -56,7 +63,7 @@
+ 			icelevelset=ones(md.mesh.numberofvertices,1);
+ 			pos=md.diagnostic.icefront(:,1:end-2);
+ 			icelevelset(pos(:))=0;
+-			WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum());
++			WriteData(fid,'object',obj,'fieldname','icelevelset','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15594)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15595)
+@@ -18,6 +18,7 @@
+ 		self.vertexonfloatingice  = float('NaN')
+ 		self.vertexongroundedice  = float('NaN')
+ 		self.vertexonwater        = float('NaN')
++		self.icelevelset          = float('NaN')
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -32,6 +33,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"vertexongroundedice","vertex on grounded ice flags list"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"elementonwater","element on water flags list"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"vertexonwater","vertex on water flags list"))
++		string="%s\n%s"%(string,fielddisplay(self,"icelevelset","presence of ice if > 0, icefront position if = 0, no ice if < 0"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -45,6 +47,7 @@
+ 		md = checkfield(md,'mask.vertexonfloatingice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexonwater'       ,'size',[md.mesh.numberofvertices],'values',[0,1])
++		md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices])
+ 
+ 		return md
+ 	# }}}
+@@ -59,5 +62,5 @@
+ 		if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.icefront))):
+ 			pos=md.diagnostic.icefront[:,:-2]
+ 			icelevelset[pos[:].astype(int)-1]=0;
+-		WriteData(fid,'data',icelevelset,'format','DoubleMat','mattype',1,'enum',IcelevelsetEnum())
++		WriteData(fid,'object',self,'fieldname','icelevelset','format','DoubleMat','mattype',1)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15594)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15595)
+@@ -660,6 +660,7 @@
+ 		md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node')
+ 		md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element')
+ 		md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node')
++		md.mask.iceleveset=project3d(md,'vector',md.mask.icelevelset,'type','node')
+ 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+ 			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 		if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15594)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15595)
+@@ -224,6 +224,7 @@
+ 			if ~isnan(md.mask.vertexonrock)
+ 				md.mask.vertexonrock=project2d(md,md.mask.vertexonrock,1);
+ 			end
++			md.mask.icelevelset=project2d(md,md.mask.icelevelset,1);
+ 
+ 			%lat long
+ 			if numel(md.mesh.lat) ==md.mesh.numberofvertices,  md.mesh.lat=project2d(md,md.mesh.lat,1); end
+@@ -771,6 +772,7 @@
+ 			md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element');
+ 			md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node');
+ 			md.mask.vertexonrock=project3d(md,'vector',md.mask.vertexonrock,'type','node');
++			md.mask.icelevelset=project3d(md,'vector',md.mask.icelevelset,'type','node');
+ 			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 			if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
+ 			if ~isnan(md.inversion.max_parameters),md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node');end;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15594)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15595)
+@@ -1940,19 +1940,19 @@
+ 
+ 	return StringToEnum('MaskVertexonwater')[0]
+ 
+-def IcelevelsetEnum():
++def MaskIcelevelsetEnum():
+ 	"""
+-	ICELEVELSETENUM - Enum of Icelevelset
++	MASKICELEVELSETENUM - Enum of MaskIcelevelset
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=IcelevelsetEnum()
++	      macro=MaskIcelevelsetEnum()
+ 	"""
+ 
+-	return StringToEnum('Icelevelset')[0]
++	return StringToEnum('MaskIcelevelset')[0]
+ 
+ def MaterialsBetaEnum():
+ 	"""
+Index: ../trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m	(revision 15595)
+@@ -0,0 +1,11 @@
++function macro=MaskIcelevelsetEnum()
++%MASKICELEVELSETENUM - Enum of MaskIcelevelset
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaskIcelevelsetEnum()
++
++macro=StringToEnum('MaskIcelevelset');
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15594)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15595)
+@@ -73,6 +73,7 @@
+ 
+ %plug onto model
+ md.diagnostic.icefront=pressureload;
++md.mask.icelevelset(find(vertexonicefront))=0;
+ 
+ %Create zeros basalforcings and surfaceforcings
+ if (isnan(md.surfaceforcings.precipitation) & (md.surfaceforcings.ispdd==1)),
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15594)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15595)
+@@ -73,6 +73,8 @@
+ 
+ 	#plug onto model
+ 	md.diagnostic.icefront=pressureload
++	pos=numpy.nonzero(nodeonicefront)[0]
++	md.mask.icelevelset[pos]=0
+ 
+ 	#Create zeros basalforcings and surfaceforcings
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15594)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15595)
+@@ -79,6 +79,8 @@
+ 
+ 	#plug onto model
+ 	md.diagnostic.icefront=pressureload
++	pos=numpy.nonzero(vertexonicefront)[0]
++	md.mask.icelevelset[pos]=0
+ 
+ 	#Create zeros basalforcings and surfaceforcings
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15594)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15595)
+@@ -63,6 +63,7 @@
+ 
+ %plug onto model
+ md.diagnostic.icefront=pressureload;
++md.mask.icelevelset(find(nodeonicefront))=0;
+ 
+ %Create zeros basalforcings and surfaceforcings
+ if (isnan(md.surfaceforcings.precipitation) & (md.surfaceforcings.ispdd==1)),
+Index: ../trunk-jpl/src/m/parameterization/setmask.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15594)
++++ ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15595)
+@@ -47,3 +47,4 @@
+ md.mask.vertexongroundedice=vertexongroundedice;
+ md.mask.vertexonwater=zeros(md.mesh.numberofvertices,1);
+ md.mask.elementonwater=zeros(md.mesh.numberofelements,1);
++md.mask.icelevelset=ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/src/m/parameterization/setmask.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15594)
++++ ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15595)
+@@ -47,5 +47,6 @@
+ 	md.mask.vertexongroundedice = vertexongroundedice
+ 	md.mask.vertexonwater = numpy.zeros(md.mesh.numberofvertices,bool)
+ 	md.mask.elementonwater = numpy.zeros(md.mesh.numberofelements,bool)
++	md.mask.iceleveset = numpy.ones(md.mesh.numberofvertices,bool)
+ 
+ 	return md
Index: /issm/oecreview/Archive/15392-16133/ISSM-15595-15596.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15595-15596.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15595-15596.diff	(revision 16134)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15595)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15596)
+@@ -60,9 +60,6 @@
+ 			WriteData(fid,'object',obj,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','vertexonwater','format','DoubleMat','mattype',1);
+-			icelevelset=ones(md.mesh.numberofvertices,1);
+-			pos=md.diagnostic.icefront(:,1:end-2);
+-			icelevelset(pos(:))=0;
+ 			WriteData(fid,'object',obj,'fieldname','icelevelset','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15595)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15596)
+@@ -48,6 +48,12 @@
+ 		md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexonwater'       ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices])
++			isice=numpy.zeros_like(md.mesh.numberofvertices,int)
++			pos=npy.nonzero(md.mask.icelevelset>0)
++			isice[pos]=1
++			totalyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
++			if any(totalyicefree)
++				raise TypeError("elements with no ice not implemented yet, each element should have at least one vertex with md.mask.icelevelset > 0")
+ 
+ 		return md
+ 	# }}}
+@@ -58,9 +64,5 @@
+ 		WriteData(fid,'object',self,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexonwater','format','DoubleMat','mattype',1)
+-		icelevelset=numpy.ones(md.mesh.numberofvertices,float)
+-		if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.icefront))):
+-			pos=md.diagnostic.icefront[:,:-2]
+-			icelevelset[pos[:].astype(int)-1]=0;
+ 		WriteData(fid,'object',self,'fieldname','icelevelset','format','DoubleMat','mattype',1)
+ 	# }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15596-15597.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15596-15597.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15596-15597.diff	(revision 16134)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/test/Archives/Archive602.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive611.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive605.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive608.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive603.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive612.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive606.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive601.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive609.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive610.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive604.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive613.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive607.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Exp/79North.exp
+===================================================================
+--- ../trunk-jpl/test/Exp/79North.exp	(revision 15596)
++++ ../trunk-jpl/test/Exp/79North.exp	(revision 15597)
+@@ -1,7 +1,7 @@
+ ## Name:DomainOutline
+ ## Icon:0
+ # Points Count Value
+-16 1.000000
++18 1.000000
+ # X pos Y pos
+ 464009.1397656691 -1027407.4008438819
+ 434858.8796422836 -1057322.8251592305
+@@ -15,8 +15,10 @@
+ 451455.3781066929 -1081082.8123726556
+ 474328.7574005903 -1040333.8187579215
+ 490074.1533796453 -1041072.4712101523
++491111.0844876733 -1038645.7820016426
+ 489754.9899476374 -1026299.4221655356
+ 477094.8404779918 -1020390.2025476890
++471001.4291198556 -1014587.7884811594
+ 468158.2643817714 -1015096.5266400346
+ 464009.1397656691 -1027407.4008438819
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15597-15598.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15597-15598.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15597-15598.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/test/NightlyRun/test227.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.py	(revision 15597)
++++ ../trunk-jpl/test/NightlyRun/test227.py	(revision 15598)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1.
+-md.timestepping.final_time=10.
++md.timestepping.final_time=15.
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test227.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.m	(revision 15597)
++++ ../trunk-jpl/test/NightlyRun/test227.m	(revision 15598)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1.;
+-md.timestepping.final_time=10.;
++md.timestepping.final_time=15.;
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/Archives/Archive227.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15598-15599.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15598-15599.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15598-15599.diff	(revision 16134)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test410.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.m	(revision 15598)
++++ ../trunk-jpl/test/NightlyRun/test410.m	(revision 15599)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-10,1e-13,1e-10,1e-06};
++field_tolerances={1e-09,1e-09,1e-09,2e-10,1e-13,1e-10,1e-06};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test411.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.m	(revision 15598)
++++ ../trunk-jpl/test/NightlyRun/test411.m	(revision 15599)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-09,1e-09,1e-08,1e-09,1e-09,1e-08,1e-05
++field_tolerances={2e-09,1e-09,1e-08,1e-09,1e-09,1e-08,1e-05
+ };
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test429.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.m	(revision 15598)
++++ ../trunk-jpl/test/NightlyRun/test429.m	(revision 15599)
+@@ -10,7 +10,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09};
++field_tolerances={2e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test434.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.m	(revision 15598)
++++ ../trunk-jpl/test/NightlyRun/test434.m	(revision 15599)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-07,1e-06,2e-07,1e-06,1e-07};
++field_tolerances={3e-07,1e-06,2e-07,1e-06,1e-07};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15599-15600.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15599-15600.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15599-15600.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15599)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15600)
+@@ -48,12 +48,12 @@
+ 		md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexonwater'       ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices])
+-			isice=numpy.zeros_like(md.mesh.numberofvertices,int)
+-			pos=npy.nonzero(md.mask.icelevelset>0)
+-			isice[pos]=1
+-			totalyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
+-			if any(totalyicefree)
+-				raise TypeError("elements with no ice not implemented yet, each element should have at least one vertex with md.mask.icelevelset > 0")
++		isice=numpy.zeros(md.mesh.numberofvertices,int)
++		pos=npy.nonzero(md.mask.icelevelset>0)
++		isice[pos]=1
++		totallyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
++		if any(totallyicefree):
++			raise TypeError("elements with no ice not implemented yet, each element should have at least one vertex with md.mask.icelevelset > 0")
+ 
+ 		return md
+ 	# }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15600-15601.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15600-15601.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15600-15601.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15600)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15601)
+@@ -49,7 +49,7 @@
+ 		md = checkfield(md,'mask.vertexonwater'       ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices])
+ 		isice=numpy.zeros(md.mesh.numberofvertices,int)
+-		pos=npy.nonzero(md.mask.icelevelset>0)
++		pos=numpy.nonzero(md.mask.icelevelset>0)
+ 		isice[pos]=1
+ 		totallyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
+ 		if any(totallyicefree):
Index: /issm/oecreview/Archive/15392-16133/ISSM-15601-15602.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15601-15602.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15601-15602.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/parameterization/setmask.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15601)
++++ ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15602)
+@@ -47,6 +47,6 @@
+ 	md.mask.vertexongroundedice = vertexongroundedice
+ 	md.mask.vertexonwater = numpy.zeros(md.mesh.numberofvertices,bool)
+ 	md.mask.elementonwater = numpy.zeros(md.mesh.numberofelements,bool)
+-	md.mask.iceleveset = numpy.ones(md.mesh.numberofvertices,bool)
++	md.mask.icelevelset = numpy.ones(md.mesh.numberofvertices,bool)
+ 
+ 	return md
Index: /issm/oecreview/Archive/15392-16133/ISSM-15602-15603.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15602-15603.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15602-15603.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15602)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15603)
+@@ -660,7 +660,7 @@
+ 		md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node')
+ 		md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element')
+ 		md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node')
+-		md.mask.iceleveset=project3d(md,'vector',md.mask.icelevelset,'type','node')
++		md.mask.icelevelset=project3d(md,'vector',md.mask.icelevelset,'type','node')
+ 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+ 			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 		if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
Index: /issm/oecreview/Archive/15392-16133/ISSM-15603-15604.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15603-15604.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15603-15604.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15603)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15604)
+@@ -48,9 +48,7 @@
+ 		md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexonwater'       ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices])
+-		isice=numpy.zeros(md.mesh.numberofvertices,int)
+-		pos=numpy.nonzero(md.mask.icelevelset>0)
+-		isice[pos]=1
++		isice=numpy.array(md.mask.icelevelset>0,int)
+ 		totallyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
+ 		if any(totallyicefree):
+ 			raise TypeError("elements with no ice not implemented yet, each element should have at least one vertex with md.mask.icelevelset > 0")
Index: /issm/oecreview/Archive/15392-16133/ISSM-15604-15605.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15604-15605.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15604-15605.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/test/NightlyRun/test514.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.m	(revision 15604)
++++ ../trunk-jpl/test/NightlyRun/test514.m	(revision 15605)
+@@ -43,14 +43,6 @@
+ y7=md2.mesh.y;
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'x1y1x2y2x3y3x4y4x5y5x6y6'  'x7y7' };
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-field_values={...
+-	x1, y1,...
+-	y2, y2,...
+-	y3, y3,...
+-	y4, y4,...
+-	y5, y5,...
+-	y6, y6,...
+-	y7, y7,...
+-	};
++field_names      = {'x1' ,'y1' ,'x2' ,'y2' ,'x3' ,'y3' ,'x4' ,'y4' ,'x5' ,'y5' ,'x6' ,'y6' ,'x7' ,'y7' };
++field_tolerances = {1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values     = { x1  ,y1   ,y2   ,y2   ,y3   ,y3   ,y4   ,y4   ,y5   ,y5   ,y6   ,y6   ,y7   ,y7   };
Index: /issm/oecreview/Archive/15392-16133/ISSM-15605-15606.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15605-15606.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15605-15606.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive514.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15606-15607.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15606-15607.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15606-15607.diff	(revision 16134)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 15606)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 15607)
+@@ -14,7 +14,7 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
++	2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
+ 	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 15606)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 15607)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-09,1e-09,1e-06,1e-09,1e-09};
++field_tolerances={1e-09,1e-09,2e-06,1e-09,1e-09};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test432.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.m	(revision 15606)
++++ ../trunk-jpl/test/NightlyRun/test432.m	(revision 15607)
+@@ -11,7 +11,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','Water fraction','Enthalpy'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-13,1e-10,1e-10,1e-10};
++field_tolerances={2e-09,1e-09,1e-09,1e-09,1e-13,1e-10,1e-10,1e-10};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test434.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.m	(revision 15606)
++++ ../trunk-jpl/test/NightlyRun/test434.m	(revision 15607)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={3e-07,1e-06,2e-07,1e-06,1e-07};
++field_tolerances={1e-06,1e-06,2e-07,1e-06,1e-07};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15607-15608.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15607-15608.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15607-15608.diff	(revision 16134)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/test/Archives/Archive235.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive412.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive218.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive413.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive234.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15608-15609.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15608-15609.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15608-15609.diff	(revision 16134)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/test/NightlyRun/test225.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.py	(revision 15608)
++++ ../trunk-jpl/test/NightlyRun/test225.py	(revision 15609)
+@@ -24,7 +24,7 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
+ field_tolerances=[\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
+-	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
++	2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
+ 	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test410.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.py	(revision 15608)
++++ ../trunk-jpl/test/NightlyRun/test410.py	(revision 15609)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-13,1e-10,1e-06]
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13,1e-10,1e-06]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test434.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.py	(revision 15608)
++++ ../trunk-jpl/test/NightlyRun/test434.py	(revision 15609)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-07,1e-06,1e-07,1e-06,1e-07]
++field_tolerances=[1e-06,1e-06,1e-06,1e-06,1e-07]
+ field_values=[\
+ 	md.results.DiagnosticSolution.Vx,\
+ 	md.results.DiagnosticSolution.Vy,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15609-15610.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15609-15610.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15609-15610.diff	(revision 16134)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15609)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15610)
+@@ -112,6 +112,8 @@
+ pressureload=copy.deepcopy(md.mesh.segments)
+ pressureload=numpy.hstack((pressureload,(1*md.mask.elementonfloatingice[pressureload[:,-1].astype(int)-1] + 0*md.mask.elementongroundedice[pressureload[:,-1].astype(int)-1]).reshape(-1,1)))
+ md.diagnostic.icefront=pressureload
++pos=numpy.nonzero(md.mesh.vertexonboundary)
++md.mask.icelevelset[pos]=0
+ md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15609)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15610)
+@@ -103,6 +103,7 @@
+ pressureload=md.mesh.segments;
+ pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end)) + 0*md.mask.elementongroundedice(pressureload(:,end))];
+ md.diagnostic.icefront=pressureload;
++md.mask.icelevelset(find(md.mesh.vertexonboundary))=0;
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15610-15611.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15610-15611.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15610-15611.diff	(revision 16134)
@@ -0,0 +1,733 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp	(revision 15611)
+@@ -1,59 +0,0 @@
+-/*!\file:  CreateElementToEdgeConnectivity.cpp
+- * \brief: create connectivity tables from index
+- */ 
+-
+-#include "../../classes/classes.h"
+-#include "../../shared/shared.h"
+-#include "./ModelProcessorx.h"
+-
+-void CreateElementToEdgeConnectivity(IoModel* iomodel){
+-
+-	/*Intermediaries*/
+-	int v1,v2,v3,e1,e2;
+-
+-	/*If connectivity is already present, exit*/
+-	if(iomodel->elementtoedgeconnectivity) return;
+-
+-	/*Check Iomodel properties*/
+-	if(iomodel->dim!=2)             _error_("only 2d model are supported");
+-	if(iomodel->numberofvertices<3) _error_("not enough elements in mesh");
+-	_assert_(iomodel->elements);
+-
+-	/*First, we need to have edges*/
+-	CreateEdges(iomodel);
+-	_assert_(iomodel->numberofedges>2);
+-
+-	/*Initialize intermediaries*/
+-	int*  element_edge_connectivity = xNew<int>(iomodel->numberofelements*3);   /*edge1   edge2   edge3*/
+-
+-	/*Go through all edges and create connectivity table*/
+-	for(int i=0;i<iomodel->numberofedges;i++){
+-
+-		/*Get the two vertices of current edge*/
+-		v1 = iomodel->edges[i*4+0]-1; _assert_(v1>=0 && v1<iomodel->numberofvertices);
+-		v2 = iomodel->edges[i*4+1]-1; _assert_(v2>=0 && v2<iomodel->numberofvertices);
+-		e1 = iomodel->edges[i*4+2]-1; _assert_(e1>=0 && e1<iomodel->numberofelements);
+-		e2 = iomodel->edges[i*4+3]-1; _assert_(e2>=-2 && e2<iomodel->numberofelements);
+-
+-		/*Process element by element*/
+-		for(int j=0;j<3;j++){
+-			v3 = iomodel->elements[e1*3+j]-1;
+-			if(v1!=v3 && v2!=v3){
+-				element_edge_connectivity[e1*3+j]=i;
+-				break;
+-			}
+-		}
+-		if(e2>-1){
+-			for(int j=0;j<3;j++){
+-				v3 = iomodel->elements[e2*3+j]-1;
+-				if(v1!=v3 && v2!=v3){
+-					element_edge_connectivity[e2*3+j]=i;
+-					break;
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointers*/
+-	iomodel->elementtoedgeconnectivity = element_edge_connectivity;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15611)
+@@ -24,15 +24,15 @@
+ 	/*Loads only in DG*/
+ 	if (stabilization==3){
+ 
+-		/*Get edges and elements*/
+-		CreateEdges(iomodel);
++		/*Get faces and elements*/
++		CreateFaces(iomodel);
+ 		iomodel->FetchData(1,ThicknessEnum);
+ 
+ 		/*First load data:*/
+-		for(int i=0;i<iomodel->numberofedges;i++){
++		for(int i=0;i<iomodel->numberoffaces;i++){
+ 
+ 			/*Get left and right elements*/
+-			element=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
++			element=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
+ 
+ 			/*Now, if this element is not in the partition, pass: */
+ 			if(!iomodel->my_elements[element]) continue;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp	(revision 15611)
+@@ -0,0 +1,42 @@
++/*!\file:  FacesPartitioning.cpp
++ * \brief: partition elements and nodes and vertices
++ */ 
++
++#include <string.h>
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++#include "./ModelProcessorx.h"
++
++void FacesPartitioning(bool** pmy_faces,IoModel* iomodel){
++
++	/*Intermediaries*/
++	int  el1,el2;
++	bool my_face;
++
++	/*Check Iomodel properties*/
++	if(iomodel->dim!=2) _error_("only 2d model are supported");
++
++	/*Get faces and elements*/
++	CreateFaces(iomodel);
++
++	/*output: */
++	bool* my_faces=xNew<bool>(iomodel->numberoffaces);
++
++	for(int i=0;i<iomodel->numberoffaces;i++){
++
++		/*Get left and right elements*/
++		el1=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
++		el2=iomodel->faces[4*i+3]-1; //faces are [node1 node2 elem1 elem2]
++
++		/*Check whether we should include this face (el2 is -2 for boundary faces)*/
++		my_face = iomodel->my_elements[el1];
++		if(!my_face && el2>=0){
++			my_face = iomodel->my_elements[el2];
++		}
++
++		my_faces[i] = my_face;
++	}
++
++	/*Free data and assign output pointers */
++	*pmy_faces=my_faces;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15611)
+@@ -11,22 +11,48 @@
+ 	if(iomodel->edges) return;
+ 
+ 	/*Check Iomodel properties*/
+-	if(iomodel->dim!=2)             _error_("only 2d model are supported");
+ 	if(iomodel->numberofvertices<3) _error_("not enough elements in mesh");
+ 	_assert_(iomodel->elements);
+ 
+ 	/*Intermediaries*/
+ 	bool exist;
+ 	int  i,j,v1,v2,v3;
+-	int  maxnbe,nbe;
++	int  maxnbe,nbe,elementnbe,elementnbv;
++	int *elementedges = NULL;
+ 
++	/*Mesh dependent variables*/
++	if(iomodel->dim==2){
++		elementnbv = 3;
++		elementnbe = 3;
++		elementedges=xNew<int>(elementnbe*2);
++		elementedges[2*0+0] = 1; elementedges[2*0+1] = 2;
++		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0;
++		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1;
++	}
++	else if(iomodel->dim==3){
++		elementnbv = 6;
++		elementnbe = 9;
++		elementedges=xNew<int>(elementnbe*2);
++		elementedges[2*0+0] = 0; elementedges[2*0+1] = 3;
++		elementedges[2*1+0] = 1; elementedges[2*1+1] = 4;
++		elementedges[2*2+0] = 2; elementedges[2*2+1] = 5;
++		elementedges[2*3+0] = 1; elementedges[2*3+1] = 2;
++		elementedges[2*4+0] = 2; elementedges[2*4+1] = 0;
++		elementedges[2*5+0] = 0; elementedges[2*5+1] = 1;
++		elementedges[2*6+0] = 4; elementedges[2*6+1] = 5;
++		elementedges[2*7+0] = 5; elementedges[2*7+1] = 3;
++		elementedges[2*8+0] = 3; elementedges[2*8+1] = 4;
++	}
++	else{
++		_error_("mesh dimension not supported yet");
++	}
++
+ 	/*Maximum number of edges*/
+-	maxnbe = 3*iomodel->numberofelements;
++	maxnbe = elementnbe*iomodel->numberofelements;
+ 
+ 	/*Initialize intermediaries*/
+-	int*  edgestemp = xNew<int>(maxnbe*4);         /*format: [vertex1 vertex2 element1 element2]                */
+-	bool* exchange  = xNewZeroInit<bool>(maxnbe);  /*Edges are ordered, we need to keep track of vertex swapping*/
+-	for(i=0;i<maxnbe;i++) edgestemp[i*4+3]=-1;     /*Initialize last column of edges as -1 (boundary edge)      */
++	int *edgestemp                 = xNew<int>(maxnbe*2);                             /*format: [vertex1 vertex2]       */
++	int *element_edge_connectivity = xNew<int>(iomodel->numberofelements*elementnbe); /*format: [edge1 edge2 ... edgen] */
+ 
+ 	/*Initialize chain*/
+ 	int* head_minv = xNew<int>(iomodel->numberofvertices);
+@@ -37,14 +63,11 @@
+ 	nbe = 0;
+ 
+ 	for(i=0;i<iomodel->numberofelements;i++){
+-		for(j=0;j<3;j++){
++		for(j=0;j<elementnbe;j++){
+ 
+-			/*Get the two indices of the edge number j of the ith triangle*/
+-			v1 = iomodel->elements[i*3+j];
+-			if(j==2)
+-			 v2 = iomodel->elements[i*3+0];
+-			else
+-			 v2 = iomodel->elements[i*3+j+1];
++			/*Get the two indices of the edge number j of the ith element*/
++			v1 = iomodel->elements[i*elementnbv+elementedges[2*j+0]]-1; _assert_(v1>=0 & v1<iomodel->numberofvertices);
++			v2 = iomodel->elements[i*elementnbv+elementedges[2*j+1]]-1; _assert_(v2>=0 & v2<iomodel->numberofvertices);
+ 
+ 			/*v1 and v2 must be sorted*/
+ 			if(v2<v1){
+@@ -55,11 +78,10 @@
+ 			exist = false;
+ 
+ 			/*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/
+-			_assert_(v1>=0 & v1<iomodel->numberofvertices);
+ 			for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
+-				if(edgestemp[e*4+1]==v2){
++				if(edgestemp[e*2+1]==v2+1){
+ 					exist = true;
+-					edgestemp[e*4+3]=i+1;
++					element_edge_connectivity[i*elementnbv+j]=e;
+ 					break;
+ 				}
+ 			}
+@@ -69,11 +91,12 @@
+ 				_assert_(nbe<maxnbe);
+ 
+ 				/*Update edges*/
+-				edgestemp[nbe*4+0] = v1;
+-				edgestemp[nbe*4+1] = v2;
+-				edgestemp[nbe*4+2] = i+1;
+-				if(v1!=iomodel->elements[i*3+j]) exchange[nbe]=true;
++				edgestemp[nbe*2+0] = v1+1;
++				edgestemp[nbe*2+1] = v2+1;
+ 
++				/*Update Connectivity*/
++				element_edge_connectivity[i*elementnbv+j]=nbe;
++
+ 				/*Update chain*/
+ 				next_edge[nbe] = head_minv[v1];
+ 				head_minv[v1]  = nbe;
+@@ -89,23 +112,15 @@
+ 	xDelete<int>(next_edge);
+ 
+ 	/*Create final edges*/
+-	int* edges = xNew<int>(nbe*4); /*vertex1 vertex2 element1 element2*/
+-	for(int i=0;i<nbe;i++){
+-		if(exchange[i]){
+-			edges[i*4+0]=edgestemp[i*4+1];
+-			edges[i*4+1]=edgestemp[i*4+0];
+-		}
+-		else{
+-			edges[i*4+0]=edgestemp[i*4+0];
+-			edges[i*4+1]=edgestemp[i*4+1];
+-		}
+-		edges[i*4+2]=edgestemp[i*4+2];
+-		edges[i*4+3]=edgestemp[i*4+3];
+-	}
++	int* edges = xNew<int>(nbe*2); /*vertex1 vertex2*/
++	for(int i=0;i<2*nbe;i++) edges[i] = edgestemp[i];
++
++	/*Clean up*/
+ 	xDelete<int>(edgestemp);
+-	xDelete<bool>(exchange);
++	xDelete<int>(elementedges);
+ 
+ 	/*Assign output pointers*/
+-	iomodel->edges         = edges;
+-	iomodel->numberofedges = nbe;
++	iomodel->edges                     = edges;
++	iomodel->elementtoedgeconnectivity = element_edge_connectivity;
++	iomodel->numberofedges             = nbe;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15611)
+@@ -324,8 +324,8 @@
+ 
+ 			if(my_edges[i]){
+ 
+-				v1 = iomodel->edges[4*i+0]-1;
+-				v2 = iomodel->edges[4*i+1]-1;
++				v1 = iomodel->edges[2*i+0]-1;
++				v2 = iomodel->edges[2*i+1]-1;
+ 
+ 				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 15611)
+@@ -21,15 +21,15 @@
+ 	/*Loads only in DG*/
+ 	if (stabilization==3){
+ 
+-		/*Get edges and elements*/
+-		CreateEdges(iomodel);
++		/*Get faces and elements*/
++		CreateFaces(iomodel);
+ 		iomodel->FetchData(1,ThicknessEnum);
+ 
+ 		/*First load data:*/
+-		for(int i=0;i<iomodel->numberofedges;i++){
++		for(int i=0;i<iomodel->numberoffaces;i++){
+ 
+ 			/*Get left and right elements*/
+-			element=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
++			element=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
+ 
+ 			/*Now, if this element is not in the partition, pass: */
+ 			if(!iomodel->my_elements[element]) continue;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15611)
+@@ -116,11 +116,14 @@
+ /*partitioning: */
+ void ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel);
+ void NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, bool continuous);
+-void EdgesPartitioning(bool** pmy_nodes,IoModel* iomodel);
++void FacesPartitioning(bool** pmy_faces,IoModel* iomodel);
++void EdgesPartitioning(bool** pmy_edges,IoModel* iomodel);
+ 
++/*Mesh properties*/
++void CreateFaces(IoModel* iomodel);
++void CreateEdges(IoModel* iomodel);
++
+ /*Connectivity*/
+-void CreateEdges(IoModel* iomodel);
+-void CreateElementToEdgeConnectivity(IoModel* iomodel);
+ void CreateSingleNodeToElementConnectivity(IoModel* iomodel);
+ void CreateNumberNodeToElementConnectivity(IoModel* iomodel);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15611)
+@@ -38,10 +38,10 @@
+ void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel){
+ 
+ 	/* Each element has it own nodes (as many as vertices) + additional nodes
+-	 * from neighboring elements for each edge. This yields to a very different
++	 * from neighboring elements for each face. This yields to a very different
+ 	 * partition for the nodes and the vertices. The vertices are similar to
+-	 * continuous galerkin, but the nodes partitioning involves edges, which
+-	 * mess up sorting of ids. */
++	 * continuous galerkin, but the nodes partitioning involves faces, which
++	 * messes up sorting of ids. */
+ 
+ 
+ 	/*Intermediaries*/
+@@ -50,15 +50,15 @@
+ 	int  e1,e2;
+ 	int  pos;
+ 
+-	/*Get edges and elements*/
++	/*Get faces and elements*/
+ 	CreateEdges(iomodel);
+ 
+ 	/*Build discontinuous node partitioning
+ 	 *  - there are three nodes per element (discontinous)
+ 	 *  - for each element present of each partition, its three nodes will be in this partition
+-	 *  - the edges require the dofs of the 2 nodes of each elements sharing the edge.
+-	 *    if the 2 elements sharing the edge are on 2 different cpus, we must duplicate
+-	 *    the two nodes that are not on the cpus so that the edge can access the dofs of
++	 *  - the faces require the dofs of the 2 nodes of each elements sharing the face.
++	 *    if the 2 elements sharing the face are on 2 different cpus, we must duplicate
++	 *    the two nodes that are not on the cpus so that the face can access the dofs of
+ 	 *    all its 4 nodes
+ 	 */
+ 
+@@ -66,7 +66,7 @@
+ 	bool* my_nodes=xNewZeroInit<bool>(3*iomodel->numberofelements);
+ 
+ 	/*First: add all the nodes of all the elements belonging to this cpu*/
+-	if (iomodel->dim==2){
++	if(iomodel->dim==2){
+ 		for (i=0;i<iomodel->numberofelements;i++){
+ 			if (my_elements[i]){
+ 				my_nodes[3*i+0]=true;
+@@ -81,26 +81,26 @@
+ 
+ 	/*Second: add all missing nodes*/
+ 
+-	/*Get edges and elements*/
+-	CreateEdges(iomodel);
++	/*Get faces and elements*/
++	CreateFaces(iomodel);
+ 
+ 	/*!All elements have been partitioned above, only create elements for this CPU: */
+-	for(int i=0;i<iomodel->numberofedges;i++){
++	for(int i=0;i<iomodel->numberoffaces;i++){
+ 
+ 		/*Get left and right elements*/
+-		e1=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
+-		e2=iomodel->edges[4*i+3]-1; //edges are [node1 node2 elem1 elem2]
++		e1=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
++		e2=iomodel->faces[4*i+3]-1; //faces are [node1 node2 elem1 elem2]
+ 
+ 		/* 1) If the element e1 is in the current partition
+-		 * 2) and if the edge of the element is shared by another element (internal edge)
++		 * 2) and if the face of the element is shared by another element (internal face)
+ 		 * 3) and if this element is not in the same partition:
+ 		 * we must clone the nodes on this partition so that the loads (Numericalflux)
+ 		 * will have access to their properties (dofs,...)*/
+ 		if(my_elements[e1] && e2!=-2 && !my_elements[e2]){
+ 
+ 			/*1: Get vertices ids*/
+-			i1=iomodel->edges[4*i+0];
+-			i2=iomodel->edges[4*i+1];
++			i1=iomodel->faces[4*i+0];
++			i2=iomodel->faces[4*i+1];
+ 
+ 			/*2: Get the column where these ids are located in the index*/
+ 			pos=UNDEF;
+@@ -123,7 +123,7 @@
+ 				my_nodes[e2*3+1]=true;
+ 			}
+ 			else{
+-				_error_("Problem in edges creation");
++				_error_("Problem in faces creation");
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 15611)
+@@ -0,0 +1,111 @@
++/*!\file:  CreateFaces.cpp
++ * \brief: create faces from 2d mesh
++ */ 
++
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++
++void CreateFaces(IoModel* iomodel){
++
++	/*If faces are already present, exit*/
++	if(iomodel->faces) return;
++
++	/*Check Iomodel properties*/
++	if(iomodel->dim!=2)             _error_("only 2d model are supported");
++	if(iomodel->numberofvertices<3) _error_("not enough elements in mesh");
++	_assert_(iomodel->elements);
++
++	/*Intermediaries*/
++	bool exist;
++	int  i,j,v1,v2,v3;
++	int  maxnbf,nbf;
++
++	/*Maximum number of faces*/
++	maxnbf = 3*iomodel->numberofelements;
++
++	/*Initialize intermediaries*/
++	int*  facestemp = xNew<int>(maxnbf*4);         /*format: [vertex1 vertex2 element1 element2]                */
++	bool* exchange  = xNewZeroInit<bool>(maxnbf);  /*Faces are ordered, we need to keep track of vertex swapping*/
++	for(i=0;i<maxnbf;i++) facestemp[i*4+3]=-1;     /*Initialize last column of faces as -1 (boundary edge)      */
++
++	/*Initialize chain*/
++	int* head_minv = xNew<int>(iomodel->numberofvertices);
++	int* next_edge = xNew<int>(maxnbf);
++	for(i=0;i<iomodel->numberofvertices;i++) head_minv[i]=-1;
++
++	/*Initialize number of faces*/
++	nbf = 0;
++
++	for(i=0;i<iomodel->numberofelements;i++){
++		for(j=0;j<3;j++){
++
++			/*Get the two indices of the edge number j of the ith triangle*/
++			v1 = iomodel->elements[i*3+j];
++			if(j==2)
++			 v2 = iomodel->elements[i*3+0];
++			else
++			 v2 = iomodel->elements[i*3+j+1];
++
++			/*v1 and v2 must be sorted*/
++			if(v2<v1){
++				v3=v2; v2=v1; v1=v3;
++			}
++
++			/*This edge a priori has not been processed yet*/
++			exist = false;
++
++			/*Go through all processed faces connected to v1 and check whether we have seen this edge yet*/
++			_assert_(v1>=0 & v1<iomodel->numberofvertices);
++			for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
++				if(facestemp[e*4+1]==v2){
++					exist = true;
++					facestemp[e*4+3]=i+1;
++					break;
++				}
++			}
++
++			/*If this edge is new, add it to the lists*/
++			if(!exist){
++				_assert_(nbf<maxnbf);
++
++				/*Update faces*/
++				facestemp[nbf*4+0] = v1;
++				facestemp[nbf*4+1] = v2;
++				facestemp[nbf*4+2] = i+1;
++				if(v1!=iomodel->elements[i*3+j]) exchange[nbf]=true;
++
++				/*Update chain*/
++				next_edge[nbf] = head_minv[v1];
++				head_minv[v1]  = nbf;
++
++				/*Increase number of faces*/
++				nbf++;
++			}
++		}
++	}
++
++	/*Clean up*/
++	xDelete<int>(head_minv);
++	xDelete<int>(next_edge);
++
++	/*Create final faces*/
++	int* faces = xNew<int>(nbf*4); /*vertex1 vertex2 element1 element2*/
++	for(int i=0;i<nbf;i++){
++		if(exchange[i]){
++			faces[i*4+0]=facestemp[i*4+1];
++			faces[i*4+1]=facestemp[i*4+0];
++		}
++		else{
++			faces[i*4+0]=facestemp[i*4+0];
++			faces[i*4+1]=facestemp[i*4+1];
++		}
++		faces[i*4+2]=facestemp[i*4+2];
++		faces[i*4+3]=facestemp[i*4+3];
++	}
++	xDelete<int>(facestemp);
++	xDelete<bool>(exchange);
++
++	/*Assign output pointers*/
++	iomodel->faces         = faces;
++	iomodel->numberoffaces = nbf;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 15611)
+@@ -10,28 +10,31 @@
+ void EdgesPartitioning(bool** pmy_edges,IoModel* iomodel){
+ 
+ 	/*Intermediaries*/
+-	int  el1,el2;
+-	bool my_edge;
++	int elementnbe;
+ 
+ 	/*Get edges and elements*/
+ 	CreateEdges(iomodel);
++	_assert_(iomodel->elementtoedgeconnectivity);
+ 
++	/*Mesh dependent variables*/
++	if(iomodel->dim==2){
++		elementnbe = 3;
++	}
++	else if(iomodel->dim==3){
++		elementnbe = 9;
++	}
++	else{
++		_error_("mesh dimension not supported yet");
++	}
+ 	/*output: */
+-	bool* my_edges=xNew<bool>(iomodel->numberofedges);
++	bool* my_edges=xNewZeroInit<bool>(iomodel->numberofedges);
+ 
+-	for(int i=0;i<iomodel->numberofedges;i++){
+-
+-		/*Get left and right elements*/
+-		el1=iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
+-		el2=iomodel->edges[4*i+3]-1; //edges are [node1 node2 elem1 elem2]
+-
+-		/*Check whether we should include this edge (el2 is -2 for boundary edges)*/
+-		my_edge = iomodel->my_elements[el1];
+-		if(!my_edge && el2>=0){
+-			my_edge = iomodel->my_elements[el2];
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			for(int j=0;j<elementnbe;j++){
++				my_edges[iomodel->elementtoedgeconnectivity[i*elementnbe+j]] = true;
++			}
+ 		}
+-
+-		my_edges[i] = my_edge;
+ 	}
+ 
+ 	/*Free data and assign output pointers */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15611)
+@@ -44,7 +44,6 @@
+ 
+ 		case P2Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+-			CreateElementToEdgeConnectivity(iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+ 					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15611)
+@@ -56,8 +56,8 @@
+ 		if(finite_element==P2Enum){
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
+-					v1 = iomodel->edges[4*i+0]-1;
+-					v2 = iomodel->edges[4*i+1]-1;
++					v1 = iomodel->edges[2*i+0]-1;
++					v2 = iomodel->edges[2*i+1]-1;
+ 					if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+ 										1,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
+@@ -98,8 +98,8 @@
+ 		if(finite_element==P2Enum){
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
+-					v1 = iomodel->edges[4*i+0]-1;
+-					v2 = iomodel->edges[4*i+1]-1;
++					v1 = iomodel->edges[2*i+0]-1;
++					v2 = iomodel->edges[2*i+1]-1;
+ 					values=xNew<IssmDouble>(N);
+ 					spcpresent=false;
+ 					for(j=0;j<N;j++){
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15610)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15611)
+@@ -243,13 +243,14 @@
+ 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp\
+ 					./modules/ModelProcessorx/EdgesPartitioning.cpp\
++					./modules/ModelProcessorx/FacesPartitioning.cpp\
+ 					./modules/ModelProcessorx/SortDataSets.cpp\
+ 					./modules/ModelProcessorx/UpdateCounters.cpp\
+ 					./modules/ModelProcessorx/CreateDataSets.cpp\
+ 					./modules/ModelProcessorx/CreateParameters.cpp\
+ 					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
++					./modules/ModelProcessorx/CreateFaces.cpp\
+ 					./modules/ModelProcessorx/CreateEdges.cpp\
+-					./modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15611)
+@@ -51,10 +51,10 @@
+ 	numericalflux_mparid=iomodel->numberofelements+1; //matlab indexing
+ 
+ 	/*Get edge*/
+-	int i1 = iomodel->edges[4*index+0];
+-	int i2 = iomodel->edges[4*index+1];
+-	int e1 = iomodel->edges[4*index+2];
+-	int e2 = iomodel->edges[4*index+3];
++	int i1 = iomodel->faces[4*index+0];
++	int i2 = iomodel->faces[4*index+1];
++	int e1 = iomodel->faces[4*index+2];
++	int e2 = iomodel->faces[4*index+3];
+ 
+ 	/*First, see wether this is an internal or boundary edge (if e2=-1)*/
+ 	if(e2==-1){
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15611)
+@@ -49,8 +49,8 @@
+ 		this->parameters=NULL;
+ 
+ 		/*intialize inputs and results: */
+-		this->inputs=new Inputs();
+-		this->results=new Results();
++		this->inputs  = new Inputs();
++		this->results = new Results();
+ 
+ 		/*initialize pointers:*/
+ 		this->nodes    = NULL;
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 15610)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 15611)
+@@ -33,8 +33,10 @@
+ 		int   dim;
+ 		int   numberofvertices;
+ 		int   numberofelements;
++		int   numberoffaces;
+ 		int   numberofedges;
+ 		int  *elements;
++		int  *faces;
+ 		int  *edges;
+ 		int  *elementtoedgeconnectivity;
+ 		int  *singlenodetoelementconnectivity;
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15610)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15611)
+@@ -32,8 +32,10 @@
+ 	this->dim=-1;
+ 	this->numberofvertices=-1;
+ 	this->numberofelements=-1;
++	this->numberoffaces=-1;
+ 	this->numberofedges=-1;
+ 	this->elements=NULL;
++	this->faces=NULL;
+ 	this->edges=NULL;
+ 	this->elementtoedgeconnectivity      =NULL;
+ 	this->singlenodetoelementconnectivity=NULL;
+@@ -74,6 +76,7 @@
+ 	FetchData(&this->numberofvertices,MeshNumberofverticesEnum);
+ 	FetchData(&this->numberofelements,MeshNumberofelementsEnum);
+ 	FetchData(&this->elements,NULL,NULL,MeshElementsEnum);
++	this->faces                           = NULL;
+ 	this->edges                           = NULL;
+ 	this->elementtoedgeconnectivity       = NULL;
+ 	this->singlenodetoelementconnectivity = NULL;
+@@ -108,6 +111,7 @@
+ 	xDelete<int>(this->my_vertices);
+ 
+ 	xDelete<int>(this->elements);
++	xDelete<int>(this->faces);
+ 	xDelete<int>(this->edges);
+ 	xDelete<int>(this->elementtoedgeconnectivity);
+ 	xDelete<int>(this->singlenodetoelementconnectivity);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15611-15612.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15611-15612.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15611-15612.diff	(revision 16134)
@@ -0,0 +1,104 @@
+Index: ../trunk-jpl/src/m/plot/plot_icefront.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 15611)
++++ ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 15612)
+@@ -11,7 +11,13 @@
+ 
+ %process mesh and data
+ [x y z elements is2d isplanet]=processmesh(md,[],options);
+-icefront=md.diagnostic.icefront;
++ice=(md.mask.icelevelset>0);
++noice=(md.mask.icelevelset<=0);
++zeroice=(md.mask.icelevelset==0);
++elementice=sum(ice(md.mesh.elements),2);
++elementnoice=sum(noice(md.mesh.elements),2);
++elementzeroice=sum(zeroice(md.mesh.elements),2);
++icefront=(elementice & elementnoice) & ~(elementice==2 & elementzeroice);
+ 
+ if (md.mesh.dimension==2),
+ 
+@@ -21,30 +27,14 @@
+ 	hold on;
+ 
+ 	%highlight elements on neumann
+-	pos=find(icefront(:,end)==1);
+-	pos=icefront(pos,end-1);
++	pos=find(icefront);
+ 	A=elements(pos,1); B=elements(pos,2); C=elements(pos,3); 
+ 	h2=patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','blue','EdgeColor','black');
+-	pos=find(icefront(:,end)==0);
+-	pos=icefront(pos,end-1);
+-	A=elements(pos,1); B=elements(pos,2); C=elements(pos,3); 
+-	h3=patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','green','EdgeColor','black');
++	hold on;
+ 
+-	pos=find(icefront(:,end)==2);
+-	pos=icefront(pos,end-1);
+-	A=elements(pos,1); B=elements(pos,2); C=elements(pos,3); 
+-	h3bis=patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','cyan','EdgeColor','black');
++	%Plot zero icelevelset line
+ 
+-	%display arrows pointing outward
+-	xstart=mean(x(icefront(:,1:end-2)),2);
+-	ystart=mean(y(icefront(:,1:end-2)),2);
+-	length=sqrt((x(icefront(:,1))-x(icefront(:,2))).^2 + (y(icefront(:,1))-y(icefront(:,2))).^2 );
+-	normal(:,1)=cos(atan2((x(icefront(:,1))-x(icefront(:,2))) , (y(icefront(:,2))-y(icefront(:,1)))));
+-	normal(:,2)=sin(atan2((x(icefront(:,1))-x(icefront(:,2))) , (y(icefront(:,2))-y(icefront(:,1)))));
+-	xend=xstart+length.*normal(:,1);
+-	yend=ystart+length.*normal(:,2);
+-	q=quiver(xstart,ystart,xend-xstart,yend-ystart); hold on;
+-	h4=plot(xstart,ystart,'r*');
++
+ else
+ 
+ 	%plot mesh
+@@ -57,47 +47,18 @@
+ 	hold on;
+ 
+ 	%highlight elements on neumann
+-	pos=find(icefront(:,end)==1);
+-	pos=icefront(pos,end-1);
++	pos=find(icefront);
+ 	A=elements(pos,1); B=elements(pos,2); C=elements(pos,3); D=elements(pos,4); E=elements(pos,5); F=elements(pos,6);
+ 	h2=patch( 'Faces', [A B C],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','blue','EdgeColor','black');
+ 	patch( 'Faces', [D E F],  'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','blue','EdgeColor','black');
+ 	patch( 'Faces', [A B E D],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','blue','EdgeColor','black');
+ 	patch( 'Faces', [B E F C],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','blue','EdgeColor','black');
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','blue','EdgeColor','black');
+-	pos=find(icefront(:,end)==0);
+-	pos=icefront(pos,end-1);
+-	A=elements(pos,1); B=elements(pos,2); C=elements(pos,3); D=elements(pos,4); E=elements(pos,5); F=elements(pos,6);
+-	h3=patch( 'Faces', [A B C],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','green','EdgeColor','black');
+-	patch( 'Faces', [D E F],  'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','green','EdgeColor','black');
+-	patch( 'Faces', [A B E D],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','green','EdgeColor','black');
+-	patch( 'Faces', [B E F C],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','green','EdgeColor','black');
+-	patch( 'Faces', [C A D F],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','green','EdgeColor','black');
+-	pos=find(icefront(:,end)==2);
+-	pos=icefront(pos,end-1);
+-	A=elements(pos,1); B=elements(pos,2); C=elements(pos,3); D=elements(pos,4); E=elements(pos,5); F=elements(pos,6);
+-	h3bis=patch( 'Faces', [A B C],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','cyan','EdgeColor','black');
+-	patch( 'Faces', [D E F],  'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','cyan','EdgeColor','black');
+-	patch( 'Faces', [A B E D],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','cyan','EdgeColor','black');
+-	patch( 'Faces', [B E F C],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','cyan','EdgeColor','black');
+-	patch( 'Faces', [C A D F],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','cyan','EdgeColor','black');
+-
+-	%display arrows pointing outward
+-	xstart=mean(x(icefront(:,1:end-2)),2);
+-	ystart=mean(y(icefront(:,1:end-2)),2);
+-	zstart=mean(z(icefront(:,1:end-2)),2);
+-	length=sqrt((x(icefront(:,1))-x(icefront(:,2))).^2 + (y(icefront(:,1))-y(icefront(:,2))).^2 );
+-	normal(:,1)=cos(atan2((x(icefront(:,1))-x(icefront(:,2))) , (y(icefront(:,2))-y(icefront(:,1)))));
+-	normal(:,2)=sin(atan2((x(icefront(:,1))-x(icefront(:,2))) , (y(icefront(:,2))-y(icefront(:,1)))));
+-	xend=xstart+length.*normal(:,1);
+-	yend=ystart+length.*normal(:,2);
+-	q=quiver3(xstart,ystart,zstart,xend-xstart,yend-ystart,zeros(numel(xstart),1)); hold on;
+-	h4=plot3(xstart,ystart,zstart,'r*');
+ end
+ 
+ %legend (disable warnings)
+ warning off
+-legend([h2,h3,h3bis,q],'element on ice front (Water)','element on ice front (Air)','element on ice front (Ice)','normal vectors')
++legend([h2],'element on ice front')
+ warning on
+ 
+ %apply options
Index: /issm/oecreview/Archive/15392-16133/ISSM-15612-15613.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15612-15613.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15612-15613.diff	(revision 16134)
@@ -0,0 +1,396 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15613)
+@@ -24,7 +24,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15613)
+@@ -21,7 +21,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15613)
+@@ -18,7 +18,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15613)
+@@ -10,7 +10,7 @@
+ 
+ void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    stabilization;
++	int    stabilization,finiteelement;
+ 	bool   dakota_analysis;
+ 	bool   issmbgradients;
+ 	bool   ispdd;
+@@ -23,12 +23,18 @@
+ 	iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+ 	iomodel->Constant(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+ 
++	/*Finite element type*/
++	finiteelement = P1Enum;
++	if(stabilization==3){
++		finiteelement = P1DGEnum;
++	}
++
+ 	/*Update elements: */
+ 	int counter=0;
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15613)
+@@ -23,7 +23,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15613)
+@@ -15,7 +15,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15613)
+@@ -15,8 +15,8 @@
+ 
+ void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    materials_type;
+-	bool   isSSA,isL1L2,isHO,isFS;
++	int    materials_type,finiteelement,temp;
++	bool   isSSA,isL1L2,isHO,isFS,iscoupling;
+ 	bool   control_analysis;
+ 	bool   dakota_analysis;
+ 
+@@ -32,6 +32,34 @@
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+ 	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+ 
++	/*Do we have coupling*/
++	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*Get finite element type*/
++	finiteelement = P1Enum;
++	if(!iscoupling){
++		if(isSSA){
++			iomodel->Constant(&temp,FlowequationFeSSAEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum; break;
++				case 1 : finiteelement = P2Enum; break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isL1L2){
++			finiteelement = P1Enum;
++		}
++		else if(isHO){
++			finiteelement = P1Enum;
++		}
++		else if(isFS){
++			finiteelement = P1Enum;
++		}
++	}
++
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(1,FlowequationElementEquationEnum);
+ 
+@@ -40,7 +68,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15613)
+@@ -10,12 +10,23 @@
+ 
+ void	UpdateElementsBalancethickness(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
++	int    stabilization,finiteelement;
++
++	/*Fetch data needed: */
++	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
++
++	/*Finite element type*/
++	finiteelement = P1Enum;
++	if(stabilization==3){
++		finiteelement = P1DGEnum;
++	}
++
+ 	/*Update elements: */
+ 	int counter=0;
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15613)
+@@ -26,7 +26,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15613)
+@@ -27,7 +27,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15613)
+@@ -15,7 +15,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15613)
+@@ -18,7 +18,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15613)
+@@ -18,7 +18,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 15613)
+@@ -15,7 +15,7 @@
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type); //we need i to index into elements.
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+ 			counter++;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15612)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15613)
+@@ -62,7 +62,7 @@
+ 		virtual void   PatchFill(int* pcount, Patch* patch)=0;
+ 		virtual void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results)=0;
+ 		virtual void   DeleteResults(void)=0;
+-		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type)=0;
++		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
+ 		virtual void   InputToResult(int enum_type,int step,IssmDouble time)=0;
+ 		virtual void   InputDuplicate(int original_enum,int new_enum)=0;
+ 		virtual void   InputCreate(IssmDouble scalar,int name,int code)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15613)
+@@ -2318,13 +2318,12 @@
+ 	return dt;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type){{{*/
+-void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type){ //i is the element index
++/*FUNCTION Tria::Update{{{*/
++void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement_type){
+ 
+ 	/*Intermediaries*/
+ 	int        i,j;
+ 	int        tria_vertex_ids[3];
+-	int        tria_type;
+ 	IssmDouble nodeinputs[3];
+ 	IssmDouble yts;
+ 	int        progstabilization,balancestabilization;
+@@ -2346,16 +2345,7 @@
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 
+ 	/*Recover element type*/
+-	if ((analysis_type==PrognosticAnalysisEnum && progstabilization==3) || (analysis_type==BalancethicknessAnalysisEnum && balancestabilization==3)){
+-		tria_type=P1DGEnum;
+-	}
+-	else if(analysis_type==DiagnosticHorizAnalysisEnum && fe_ssa==1){
+-		tria_type=P2Enum;
+-	}
+-	else{
+-		tria_type=P1Enum;
+-	}
+-	this->SetElementType(tria_type,analysis_counter);
++	this->SetElementType(finitelement_type,analysis_counter);
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<3;i++){ 
+@@ -2363,7 +2353,7 @@
+ 	}
+ 
+ 	/*Recover nodes ids needed to initialize the node hook.*/
+-	switch(tria_type){
++	switch(finitelement_type){
+ 		case P1Enum:
+ 			numnodes        = 3;
+ 			tria_node_ids   = xNew<int>(numnodes);
+@@ -2389,7 +2379,7 @@
+ 			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
+ 			break;
+ 		default:
+-			_error_("Finite element "<<EnumToStringx(tria_type)<<" not supported yet");
++			_error_("Finite element "<<EnumToStringx(finitelement_type)<<" not supported yet");
+ 	}
+ 
+ 	/*hooks: */
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15612)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15613)
+@@ -111,7 +111,7 @@
+ 		void   ResetCoordinateSystem(void){_error_("not implemented yet");};
+ 		void	 SmbGradients();
+ 		IssmDouble SurfaceArea(void);
+-		void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type);
++		void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+ 		IssmDouble TimeAdapt();
+ 
+ 		#ifdef _HAVE_RESPONSES_
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15612)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15613)
+@@ -3089,12 +3089,11 @@
+ 
+ 	return dt;
+ }/*}}}*/
+-/*FUNCTION Penta::Update(int index,IoModel* iomodel,int analysis_counter,int analysis_type) {{{*/
+-void Penta::Update(int index,IoModel* iomodel,int analysis_counter,int analysis_type){ 
++/*FUNCTION Penta::Update {{{*/
++void Penta::Update(int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ 
+ 
+ 	/*Intermediaries*/
+ 	int        i;
+-	int        penta_type;
+ 	int        penta_node_ids[6];
+ 	int        penta_vertex_ids[6];
+ 	IssmDouble nodeinputs[6];
+@@ -3120,16 +3119,7 @@
+ 	_assert_(iomodel->elements);
+ 	/*}}}*/
+ 
+-	/*Recover element type*/
+-	if ((analysis_type==PrognosticAnalysisEnum || analysis_type==BalancethicknessAnalysisEnum) && stabilization==3){
+-		/*P1 Discontinuous Galerkin*/
+-		penta_type=P1DGEnum;
+-	}
+-	else{
+-		/*P1 Continuous Galerkin*/
+-		penta_type=P1Enum;
+-	}
+-	this->SetElementType(penta_type,analysis_counter);
++	this->SetElementType(finiteelement_type,analysis_counter);
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<6;i++) penta_vertex_ids[i]=iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15612)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15613)
+@@ -111,7 +111,7 @@
+ 		void   ResetCoordinateSystem(void);
+ 		void   SmbGradients();
+ 		IssmDouble SurfaceArea(void);
+-		void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type);
++		void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+ 		int    NodalValue(IssmDouble* pvalue, int index, int natureofdataenum);
+ 		IssmDouble TimeAdapt();
+ 		void   ViscousHeatingCreateInput(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15613-15614.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15613-15614.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15613-15614.diff	(revision 16134)
@@ -0,0 +1,1382 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15613)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15614)
+@@ -109,9 +109,6 @@
+ md.diagnostic.spcvx[pos]=0
+ md.diagnostic.spcvy[pos]=0
+ 
+-pressureload=copy.deepcopy(md.mesh.segments)
+-pressureload=numpy.hstack((pressureload,(1*md.mask.elementonfloatingice[pressureload[:,-1].astype(int)-1] + 0*md.mask.elementongroundedice[pressureload[:,-1].astype(int)-1]).reshape(-1,1)))
+-md.diagnostic.icefront=pressureload
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.mask.icelevelset[pos]=0
+ md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/Pig.par
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.par	(revision 15613)
++++ ../trunk-jpl/test/Par/Pig.par	(revision 15614)
+@@ -46,7 +46,6 @@
+ 
+ %Boundary conditions:
+ md=SetMarineIceSheetBC(md);
+-md.diagnostic.icefront(:,end)=1;
+ 
+ %Change name so that no test have the same name
+ A=dbstack;
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 15613)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 15614)
+@@ -57,7 +57,6 @@
+ 
+ #Boundary conditions:
+ md=SetMarineIceSheetBC(md)
+-md.diagnostic.icefront[:,-1]=1
+ 
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15613)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15614)
+@@ -100,9 +100,6 @@
+ md.diagnostic.spcvx(pos)=0;
+ md.diagnostic.spcvy(pos)=0;
+ 
+-pressureload=md.mesh.segments;
+-pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end)) + 0*md.mask.elementongroundedice(pressureload(:,end))];
+-md.diagnostic.icefront=pressureload;
+ md.mask.icelevelset(find(md.mesh.vertexonboundary))=0;
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 15613)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 15614)
+@@ -65,10 +65,7 @@
+ nodeonicefront=zeros(md.mesh.numberofvertices)
+ pos=numpy.nonzero(md.mesh.y==ymax)
+ nodeonicefront[pos]=1
+-pos=numpy.nonzero(numpy.logical_or(nodeonicefront[md.mesh.segments[:,0].astype(int)-1],nodeonicefront[md.mesh.segments[:,1].astype(int)-1]))[0]
+-diagnostic.icefront=md.mesh.segments[pos,:]
+-diagnostic.icefront=numpy.hstack((diagnostic.icefront,1.*md.mask.elementonfloatingice[diagnostic.icefront[:,-1].astype(int)-1].reshape(-1,1)))
+-md.diagnostic.icefront=diagnostic.icefront
++md.mask.icelevelset=1-nodeonicefront
+ 
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test217.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.m	(revision 15613)
++++ ../trunk-jpl/test/NightlyRun/test217.m	(revision 15614)
+@@ -53,9 +53,7 @@
+ %icefront
+ nodeonicefront=zeros(md.mesh.numberofvertices,1);
+ pos=find(md.mesh.y==ymax); nodeonicefront(pos)=1;
+-pos=find(nodeonicefront(md.mesh.segments(:,1)) | nodeonicefront(md.mesh.segments(:,2))); diagnostic.icefront=md.mesh.segments(pos,:);
+-diagnostic.icefront=[diagnostic.icefront 1*md.mask.elementonfloatingice(diagnostic.icefront(:,end))];
+-md.diagnostic.icefront=diagnostic.icefront;
++md.mask.icelevelset=1-nodeonicefront;
+ 
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 15613)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 15614)
+@@ -4,6 +4,8 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('all');
++md.mask.icelevelset(find(md.mask.icelevelset==0))=-1;
++
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/externalpackages/matlab/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/matlab/install.sh	(revision 15613)
++++ ../trunk-jpl/externalpackages/matlab/install.sh	(revision 15614)
+@@ -1,35 +1,3 @@
+ #!/bin/bash
+-set -eu
+-
+-if [ ! -h install ];
+-then
+-	echo "  ****************************************************************"
+-	echo "  *                                                              *"
+-	echo "  * you need create a symbolic link from matlab's root directory *"
+-	echo "  *                                                              *"
+-	echo "  * First, you need to locate matlab's root directory            *"
+-	echo "  * The easiest way to find it is to launch matlab and run the   *"
+-	echo "  * following command: matlabroot                                *"
+-	echo "  * Then, create a symbolic link using the command 'ln -s ' the  *"
+-	echo "  * target directory should be named 'install'                   *"
+-	echo "  *                                                              *"
+-	echo "  * Examples:                                                    *"
+-	echo "  *    ln -s /usr/local/matlab712/ install                       *"
+-	echo "  *    ln -s /Applications/MATLAB_R2012a.app/ install            *"
+-	echo "  *                                                              *"
+-	echo "  * run ./install.sh again to check that the link is correct     *"
+-	echo "  *                                                              *"
+-	echo "  ****************************************************************"
+-else
+-
+-	#Read link
+-	DIR=$(readlink install)
+-	if [ -d $DIR ]
+-	then
+-		echo "Symbolic link correctly set"
+-	else
+-		rm -rf install
+-		echo "Incorrect symbolic link:"
+-		echo "provided target ($DIR) does not exist or is not a directory"
+-	fi
+-fi
++rm -rf install
++ln -s /usr/local/matlab80/ install
+Index: ../trunk-jpl/src/m/classes/diagnostic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/diagnostic.py	(revision 15613)
++++ ../trunk-jpl/src/m/classes/diagnostic.py	(revision 15614)
+@@ -1,190 +0,0 @@
+-import numpy
+-import sys
+-import copy
+-from fielddisplay import fielddisplay
+-from EnumDefinitions import *
+-from checkfield import *
+-from WriteData import *
+-
+-class diagnostic(object):
+-	"""
+-	DIAGNOSTIC class definition
+-
+-	   Usage:
+-	      diagnostic=diagnostic();
+-	"""
+-
+-	def __init__(self): # {{{
+-		self.spcvx                    = float('NaN')
+-		self.spcvy                    = float('NaN')
+-		self.spcvz                    = float('NaN')
+-		self.restol                   = 0
+-		self.reltol                   = 0
+-		self.abstol                   = 0
+-		self.isnewton                 = 0
+-		self.FSreconditioning     = 0
+-		self.viscosity_overshoot      = 0
+-		self.icefront                 = float('NaN')
+-		self.maxiter                  = 0
+-		self.shelf_dampening          = 0
+-		self.vertex_pairing           = float('NaN')
+-		self.penalty_factor           = float('NaN')
+-		self.rift_penalty_lock        = float('NaN')
+-		self.rift_penalty_threshold   = 0
+-		self.referential              = float('NaN')
+-		self.loadingforce             = float('NaN')
+-		self.requested_outputs        = float('NaN')
+-
+-		#set defaults
+-		self.setdefaultparameters()
+-
+-		#}}}
+-	def __repr__(self): # {{{
+-		
+-		string='   Diagnostic solution parameters:'
+-		string="%s\n%s"%(string,'      Convergence criteria:')
+-		string="%s\n%s"%(string,fielddisplay(self,'restol','mechanical equilibrium residual convergence criterion'))
+-		string="%s\n%s"%(string,fielddisplay(self,'reltol','velocity relative convergence criterion, NaN: not applied'))
+-		string="%s\n%s"%(string,fielddisplay(self,'abstol','velocity absolute convergence criterion, NaN: not applied'))
+-		string="%s\n%s"%(string,fielddisplay(self,'isnewton',"0: Picard's fixed point, 1: Newton's method, 2: hybrid"))
+-		string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of nonlinear iterations'))
+-		string="%s\n%s"%(string,fielddisplay(self,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'))
+-
+-		string="%s\n%s"%(string,'\n      boundary conditions:')
+-		string="%s\n%s"%(string,fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]'))
+-		string="%s\n%s"%(string,fielddisplay(self,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]'))
+-		string="%s\n%s"%(string,fielddisplay(self,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]'))
+-		string="%s\n%s"%(string,fielddisplay(self,'icefront','segments on ice front list (last column 0: Air, 1: Water, 2: Ice'))
+-
+-		string="%s\n%s"%(string,'\n      Rift options:')
+-		string="%s\n%s"%(string,fielddisplay(self,'rift_penalty_threshold','threshold for instability of mechanical constraints'))
+-		string="%s\n%s"%(string,fielddisplay(self,'rift_penalty_lock','number of iterations before rift penalties are locked'))
+-
+-		string="%s\n%s"%(string,'\n      Penalty options:')
+-		string="%s\n%s"%(string,fielddisplay(self,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset'))
+-		string="%s\n%s"%(string,fielddisplay(self,'vertex_pairing','pairs of vertices that are penalized'))
+-
+-		string="%s\n%s"%(string,'\n      Other:')
+-		string="%s\n%s"%(string,fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for FS model'))
+-		string="%s\n%s"%(string,fielddisplay(self,'FSreconditioning','multiplier for incompressibility equation. Only for FS model'))
+-		string="%s\n%s"%(string,fielddisplay(self,'referential','local referential'))
+-		string="%s\n%s"%(string,fielddisplay(self,'loadingforce','loading force applied on each point [N/m^3]'))
+-		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+-
+-		return string
+-		#}}}
+-	def setdefaultparameters(self): # {{{
+-		#maximum of non-linear iterations.
+-		self.maxiter=100
+-
+-		#Convergence criterion: absolute, relative and residual
+-		self.restol=10**-4
+-		self.reltol=0.01
+-		self.abstol=10
+-
+-		self.FSreconditioning=10**13
+-		self.shelf_dampening=0
+-
+-		#Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+-		self.penalty_factor=3
+-
+-		#coefficient to update the viscosity between each iteration of
+-		#a diagnostic according to the following formula
+-		#viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+-		self.viscosity_overshoot=0
+-
+-		#Stop the iterations of rift if below a threshold
+-		self.rift_penalty_threshold=0
+-
+-		#in some solutions, it might be needed to stop a run when only
+-		#a few constraints remain unstable. For thermal computation, this
+-		#parameter is often used.
+-		self.rift_penalty_lock=10
+-
+-		return self
+-	#}}}
+-	def checkconsistency(self,md,solution,analyses):    # {{{
+-
+-		#Early return
+-		if DiagnosticHorizAnalysisEnum() not in analyses:
+-			return md
+-		#if (DiagnosticHorizAnalysisEnum() not in analyses) | (solution==TransientSolutionEnum() and not md.transient.isdiagnostic):
+-		#	return md
+-
+-		md = checkfield(md,'diagnostic.spcvx','forcing',1)
+-		md = checkfield(md,'diagnostic.spcvy','forcing',1)
+-		if md.mesh.dimension==3:
+-			md = checkfield(md,'diagnostic.spcvz','forcing',1)
+-		md = checkfield(md,'diagnostic.restol','size',[1],'>',0)
+-		md = checkfield(md,'diagnostic.reltol','size',[1])
+-		md = checkfield(md,'diagnostic.abstol','size',[1])
+-		md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0,1,2])
+-		md = checkfield(md,'diagnostic.FSreconditioning','size',[1],'NaN',1)
+-		md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1],'NaN',1)
+-		if md.mesh.dimension==2:
+-			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),4],'NaN',1)
+-		else:
+-			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),6],'NaN',1)
+-		md = checkfield(md,'diagnostic.icefront[:,-1]','values',[0,1,2])
+-		md = checkfield(md,'diagnostic.maxiter','size',[1],'>=',1)
+-		md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices,6])
+-		md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices,3])
+-		if not md.diagnostic.requested_outputs:
+-			md = checkfield(md,'diagnostic.requested_outputs','size',[float('NaN'),1])
+-
+-		#singular solution
+-#		if ~any((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy))==2),
+-		if not numpy.any(numpy.logical_and(numpy.logical_not(numpy.isnan(md.diagnostic.spcvx)),numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)))):
+-			md.checkmessage("model is not well posed (singular). You need at least one node with fixed velocity!")
+-		#CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+-#		if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
+-		if numpy.any(numpy.logical_and(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)!=0,numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)!=6)):
+-			md.checkmessage("Each line of diagnostic.referential should contain either only NaN values or no NaN values")
+-		#CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+-#		if any(sum(isnan(md.diagnostic.referential),2)==0),
+-		if numpy.any(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==0):
+-			pos=[i for i,item in enumerate(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)) if item==0]
+-#			numpy.inner (and numpy.dot) calculate all the dot product permutations, resulting in a full matrix multiply
+-#			if numpy.any(numpy.abs(numpy.inner(md.diagnostic.referential[pos,0:2],md.diagnostic.referential[pos,3:5]).diagonal())>sys.float_info.epsilon):
+-#				md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
+-			for item in md.diagnostic.referential[pos,:]:
+-				if numpy.abs(numpy.inner(item[0:2],item[3:5]))>sys.float_info.epsilon:
+-					md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
+-		#CHECK THAT NO rotation specified for FS Grounded ice at base
+-#		if md.mesh.dimension==3 & md.flowequation.isFS,
+-		if md.mesh.dimension==3 and md.flowequation.isFS:
+-			pos=numpy.nonzero(numpy.logical_and(md.mask.vertexongroundedice,md.mesh.vertexonbed))
+-			if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.referential[pos,:]))):
+-				md.checkmessage("no referential should be specified for basal vertices of grounded ice")
+-
+-		return md
+-	# }}}
+-	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'object',self,'fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'fieldname','restol','format','Double')
+-		WriteData(fid,'object',self,'fieldname','reltol','format','Double')
+-		WriteData(fid,'object',self,'fieldname','abstol','format','Double')
+-		WriteData(fid,'object',self,'fieldname','isnewton','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','FSreconditioning','format','Double')
+-		WriteData(fid,'object',self,'fieldname','viscosity_overshoot','format','Double')
+-		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','shelf_dampening','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+-		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+-		WriteData(fid,'object',self,'fieldname','rift_penalty_lock','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','rift_penalty_threshold','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','referential','format','DoubleMat','mattype',1)
+-		WriteData(fid,'data',self.loadingforce[:,0],'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum())
+-		WriteData(fid,'data',self.loadingforce[:,1],'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum())
+-		WriteData(fid,'data',self.loadingforce[:,2],'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum())
+-		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3)
+-
+-		#marshall ice front
+-		data=copy.deepcopy(self.icefront)
+-		data[numpy.nonzero(data[:,-1]==0),-1]=AirEnum()
+-		data[numpy.nonzero(data[:,-1]==1),-1]=WaterEnum()
+-		data[numpy.nonzero(data[:,-1]==2),-1]=IceEnum()
+-		WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum(),'format','DoubleMat','mattype',3)
+-	# }}}
+Index: ../trunk-jpl/src/m/classes/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/diagnostic.m	(revision 15613)
++++ ../trunk-jpl/src/m/classes/diagnostic.m	(revision 15614)
+@@ -1,183 +0,0 @@
+-%DIAGNOSTIC class definition
+-%
+-%   Usage:
+-%      diagnostic=diagnostic();
+-
+-classdef diagnostic
+-	properties (SetAccess=public) 
+-		spcvx                    = NaN;
+-		spcvy                    = NaN;
+-		spcvz                    = NaN;
+-		restol                   = 0;
+-		reltol                   = 0;
+-		abstol                   = 0;
+-		isnewton                 = 0;
+-		FSreconditioning     = 0;
+-		viscosity_overshoot      = 0;
+-		icefront                 = NaN;
+-		maxiter                  = 0;
+-		shelf_dampening          = 0;
+-		vertex_pairing           = NaN;
+-		penalty_factor           = NaN;
+-		rift_penalty_lock        = NaN;
+-		rift_penalty_threshold   = 0;
+-		referential              = NaN;
+-		loadingforce             = NaN;
+-		requested_outputs        = NaN;
+-	end
+-	methods
+-		function obj = diagnostic(varargin) % {{{
+-			switch nargin
+-				case 0
+-					obj=setdefaultparameters(obj);
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function obj = setdefaultparameters(obj) % {{{
+-
+-			 %maximum of non-linear iterations.
+-			 obj.maxiter=100;
+-
+-			 %Convergence criterion: absolute, relative and residual
+-			 obj.restol=10^-4; 
+-			 obj.reltol=0.01;
+-			 obj.abstol=10;
+-
+-			 obj.FSreconditioning=10^13;
+-			 obj.shelf_dampening=0;
+-
+-			 %Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
+-			 obj.penalty_factor=3;
+-
+-			 %coefficient to update the viscosity between each iteration of
+-			 %a diagnostic according to the following formula
+-			 %viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+-			 obj.viscosity_overshoot=0;
+-
+-			 %Stop the iterations of rift if below a threshold
+-			 obj.rift_penalty_threshold=0;
+-
+-			 %in some solutions, it might be needed to stop a run when only
+-			 %a few constraints remain unstable. For thermal computation, this
+-			 %parameter is often used.
+-			 obj.rift_penalty_lock=10;
+-
+-		end % }}}
+-		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-
+-			%Early return
+-			if ~ismember(DiagnosticHorizAnalysisEnum(),analyses), return; end
+-			%if ~ismember(DiagnosticHorizAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isdiagnostic==0), return; end
+-
+-			md = checkfield(md,'diagnostic.spcvx','forcing',1);
+-			md = checkfield(md,'diagnostic.spcvy','forcing',1);
+-			if md.mesh.dimension==3, md = checkfield(md,'diagnostic.spcvz','forcing',1); end
+-			md = checkfield(md,'diagnostic.restol','size',[1 1],'>',0,'NaN',1);
+-			md = checkfield(md,'diagnostic.reltol','size',[1 1]);
+-			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
+-			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
+-			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
+-			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
+-			if md.mesh.dimension==2,
+-				md = checkfield(md,'diagnostic.icefront','size',[NaN 4],'NaN',1);
+-			else
+-				md = checkfield(md,'diagnostic.icefront','size',[NaN 6],'NaN',1);
+-			end
+-			md = checkfield(md,'diagnostic.icefront(:,end)','values',[0 1 2]);
+-			md = checkfield(md,'diagnostic.maxiter','size',[1 1],'>=',1);
+-			md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices 6]);
+-			md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices 3]);
+-			if ~isempty(md.diagnostic.requested_outputs),
+-				md = checkfield(md,'diagnostic.requested_outputs','size',[NaN 1]);
+-			end
+-
+-			%singular solution
+-			if ~(any(~isnan(md.diagnostic.spcvx)) & any(~isnan(md.diagnostic.spcvy))),
+-				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
+-			end
+-			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+-			if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
+-				md = checkmessage(md,['Each line of diagnostic.referential should contain either only NaN values or no NaN values']);
+-			end
+-			%CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+-			if any(sum(isnan(md.diagnostic.referential),2)==0),
+-				pos=find(sum(isnan(md.diagnostic.referential),2)==0);
+-				if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps),
+-					md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
+-				end
+-			end
+-			%CHECK THAT NO rotation specified for FS Grounded ice at base
+-			if md.mesh.dimension==3 & md.flowequation.isFS,
+-				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
+-				if any(~isnan(md.diagnostic.referential(pos,:))),
+-					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+-				end
+-				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
+-			end
+-		end % }}}
+-		function disp(obj) % {{{
+-
+-			disp(sprintf('   Diagnostic solution parameters:'));
+-
+-			disp(sprintf('\n      %s','Convergence criteria:'));
+-			fielddisplay(obj,'restol','mechanical equilibrium residual convergence criterion');
+-			fielddisplay(obj,'reltol','velocity relative convergence criterion, NaN: not applied');
+-			fielddisplay(obj,'abstol','velocity absolute convergence criterion, NaN: not applied');
+-			fielddisplay(obj,'isnewton','0: Picard''s fixed point, 1: Newton''s method, 2: hybrid');
+-			fielddisplay(obj,'maxiter','maximum number of nonlinear iterations');
+-			fielddisplay(obj,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
+-
+-			disp(sprintf('\n      %s','boundary conditions:'));
+-			fielddisplay(obj,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');
+-			fielddisplay(obj,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]');
+-			fielddisplay(obj,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]');
+-			fielddisplay(obj,'icefront','segments on ice front list (last column 0: Air, 1: Water, 2: Ice)');
+-
+-			disp(sprintf('\n      %s','Rift options:'));
+-			fielddisplay(obj,'rift_penalty_threshold','threshold for instability of mechanical constraints');
+-			fielddisplay(obj,'rift_penalty_lock','number of iterations before rift penalties are locked');
+-
+-			disp(sprintf('\n      %s','Penalty options:'));
+-			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
+-			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
+-
+-			disp(sprintf('\n      %s','Other:'));
+-			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for FS model');
+-			fielddisplay(obj,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');
+-			fielddisplay(obj,'referential','local referential');
+-			fielddisplay(obj,'loadingforce','loading force applied on each point [N/m^3]');
+-			fielddisplay(obj,'requested_outputs','additional outputs requested');
+-
+-		end % }}}
+-		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'fieldname','restol','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','reltol','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','abstol','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','isnewton','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','FSreconditioning','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','viscosity_overshoot','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','shelf_dampening','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+-			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','rift_penalty_lock','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','rift_penalty_threshold','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','referential','format','DoubleMat','mattype',1);
+-			WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
+-			WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
+-			WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
+-			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
+-
+-			%marshall ice front
+-			data=obj.icefront;
+-			pos=find(data(:,end)==0); data(pos,end)=AirEnum();
+-			pos=find(data(:,end)==1); data(pos,end)=WaterEnum();
+-			pos=find(data(:,end)==2); data(pos,end)=IceEnum();
+-			WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum(),'format','DoubleMat','mattype',3);
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15614)
+@@ -0,0 +1,183 @@
++%DIAGNOSTIC class definition
++%
++%   Usage:
++%      diagnostic=diagnostic();
++
++classdef diagnostic
++	properties (SetAccess=public) 
++		spcvx                    = NaN;
++		spcvy                    = NaN;
++		spcvz                    = NaN;
++		restol                   = 0;
++		reltol                   = 0;
++		abstol                   = 0;
++		isnewton                 = 0;
++		FSreconditioning     = 0;
++		viscosity_overshoot      = 0;
++		icefront                 = NaN;
++		maxiter                  = 0;
++		shelf_dampening          = 0;
++		vertex_pairing           = NaN;
++		penalty_factor           = NaN;
++		rift_penalty_lock        = NaN;
++		rift_penalty_threshold   = 0;
++		referential              = NaN;
++		loadingforce             = NaN;
++		requested_outputs        = NaN;
++	end
++	methods
++		function obj = diagnostic(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			 %maximum of non-linear iterations.
++			 obj.maxiter=100;
++
++			 %Convergence criterion: absolute, relative and residual
++			 obj.restol=10^-4; 
++			 obj.reltol=0.01;
++			 obj.abstol=10;
++
++			 obj.FSreconditioning=10^13;
++			 obj.shelf_dampening=0;
++
++			 %Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
++			 obj.penalty_factor=3;
++
++			 %coefficient to update the viscosity between each iteration of
++			 %a diagnostic according to the following formula
++			 %viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
++			 obj.viscosity_overshoot=0;
++
++			 %Stop the iterations of rift if below a threshold
++			 obj.rift_penalty_threshold=0;
++
++			 %in some solutions, it might be needed to stop a run when only
++			 %a few constraints remain unstable. For thermal computation, this
++			 %parameter is often used.
++			 obj.rift_penalty_lock=10;
++
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			%Early return
++			if ~ismember(DiagnosticHorizAnalysisEnum(),analyses), return; end
++			%if ~ismember(DiagnosticHorizAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isdiagnostic==0), return; end
++
++			md = checkfield(md,'diagnostic.spcvx','forcing',1);
++			md = checkfield(md,'diagnostic.spcvy','forcing',1);
++			if md.mesh.dimension==3, md = checkfield(md,'diagnostic.spcvz','forcing',1); end
++			md = checkfield(md,'diagnostic.restol','size',[1 1],'>',0,'NaN',1);
++			md = checkfield(md,'diagnostic.reltol','size',[1 1]);
++			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
++			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
++			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
++			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
++			if md.mesh.dimension==2,
++				md = checkfield(md,'diagnostic.icefront','size',[NaN 4],'NaN',1);
++			else
++				md = checkfield(md,'diagnostic.icefront','size',[NaN 6],'NaN',1);
++			end
++			md = checkfield(md,'diagnostic.icefront(:,end)','values',[0 1 2]);
++			md = checkfield(md,'diagnostic.maxiter','size',[1 1],'>=',1);
++			md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices 6]);
++			md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices 3]);
++			if ~isempty(md.diagnostic.requested_outputs),
++				md = checkfield(md,'diagnostic.requested_outputs','size',[NaN 1]);
++			end
++
++			%singular solution
++			if ~(any(~isnan(md.diagnostic.spcvx)) & any(~isnan(md.diagnostic.spcvy))),
++				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
++			end
++			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
++			if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
++				md = checkmessage(md,['Each line of diagnostic.referential should contain either only NaN values or no NaN values']);
++			end
++			%CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
++			if any(sum(isnan(md.diagnostic.referential),2)==0),
++				pos=find(sum(isnan(md.diagnostic.referential),2)==0);
++				if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps),
++					md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
++				end
++			end
++			%CHECK THAT NO rotation specified for FS Grounded ice at base
++			if md.mesh.dimension==3 & md.flowequation.isFS,
++				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
++				if any(~isnan(md.diagnostic.referential(pos,:))),
++					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
++				end
++				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
++			end
++		end % }}}
++		function disp(obj) % {{{
++
++			disp(sprintf('   Diagnostic solution parameters:'));
++
++			disp(sprintf('\n      %s','Convergence criteria:'));
++			fielddisplay(obj,'restol','mechanical equilibrium residual convergence criterion');
++			fielddisplay(obj,'reltol','velocity relative convergence criterion, NaN: not applied');
++			fielddisplay(obj,'abstol','velocity absolute convergence criterion, NaN: not applied');
++			fielddisplay(obj,'isnewton','0: Picard''s fixed point, 1: Newton''s method, 2: hybrid');
++			fielddisplay(obj,'maxiter','maximum number of nonlinear iterations');
++			fielddisplay(obj,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
++
++			disp(sprintf('\n      %s','boundary conditions:'));
++			fielddisplay(obj,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');
++			fielddisplay(obj,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]');
++			fielddisplay(obj,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]');
++			fielddisplay(obj,'icefront','segments on ice front list (last column 0: Air, 1: Water, 2: Ice)');
++
++			disp(sprintf('\n      %s','Rift options:'));
++			fielddisplay(obj,'rift_penalty_threshold','threshold for instability of mechanical constraints');
++			fielddisplay(obj,'rift_penalty_lock','number of iterations before rift penalties are locked');
++
++			disp(sprintf('\n      %s','Penalty options:'));
++			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
++			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
++
++			disp(sprintf('\n      %s','Other:'));
++			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for FS model');
++			fielddisplay(obj,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');
++			fielddisplay(obj,'referential','local referential');
++			fielddisplay(obj,'loadingforce','loading force applied on each point [N/m^3]');
++			fielddisplay(obj,'requested_outputs','additional outputs requested');
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++			WriteData(fid,'object',obj,'fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'fieldname','restol','format','Double');
++			WriteData(fid,'object',obj,'fieldname','reltol','format','Double');
++			WriteData(fid,'object',obj,'fieldname','abstol','format','Double');
++			WriteData(fid,'object',obj,'fieldname','isnewton','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','FSreconditioning','format','Double');
++			WriteData(fid,'object',obj,'fieldname','viscosity_overshoot','format','Double');
++			WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','shelf_dampening','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
++			WriteData(fid,'object',obj,'fieldname','rift_penalty_lock','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','rift_penalty_threshold','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','referential','format','DoubleMat','mattype',1);
++			WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
++			WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
++			WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
++			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
++
++			%marshall ice front
++			data=obj.icefront;
++			pos=find(data(:,end)==0); data(pos,end)=AirEnum();
++			pos=find(data(:,end)==1); data(pos,end)=WaterEnum();
++			pos=find(data(:,end)==2); data(pos,end)=IceEnum();
++			WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum(),'format','DoubleMat','mattype',3);
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15613)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15614)
+@@ -71,7 +71,7 @@
+ 		self.cluster          = generic()
+ 
+ 		self.balancethickness = balancethickness()
+-		self.diagnostic       = diagnostic()
++		self.diagnostic       = stressbalance()
+ 		self.groundingline    = groundingline()
+ 		self.hydrology        = hydrologyshreve()
+ 		self.prognostic       = prognostic()
+@@ -391,16 +391,6 @@
+ 		if numpy.any(numpy.logical_not(numpy.isnan(md1.thermal.spctemperature))):
+ 			md2.thermal.spctemperature[nodestoflag2,0]=1
+ 
+-		#Diagnostic
+-		if numpy.any(numpy.logical_not(numpy.isnan(md2.diagnostic.icefront))):
+-			md2.diagnostic.icefront[:,0]=Pnode[md1.diagnostic.icefront[:,0].astype(int)-1]
+-			md2.diagnostic.icefront[:,1]=Pnode[md1.diagnostic.icefront[:,1].astype(int)-1]
+-			md2.diagnostic.icefront[:,-2]=Pelem[md1.diagnostic.icefront[:,-2].astype(int)-1]
+-			if md1.mesh.dimension==3:
+-				md2.diagnostic.icefront[:,2]=Pnode[md1.diagnostic.icefront[:,2].astype(int)-1]
+-				md2.diagnostic.icefront[:,3]=Pnode[md1.diagnostic.icefront[:,3].astype(int)-1]
+-			md2.diagnostic.icefront=md2.diagnostic.icefront[numpy.nonzero(logical_and_n(md2.diagnostic.icefront[:,0],md2.diagnostic.icefront[:,1],md2.diagnostic.icefront[:,-1]))[0],:]
+-
+ 		#Results fields
+ 		if md1.results:
+ 			md2.results=results()
+@@ -626,13 +616,6 @@
+ 		md.diagnostic.referential=project3d(md,'vector',md.diagnostic.referential,'type','node')
+ 		md.diagnostic.loadingforce=project3d(md,'vector',md.diagnostic.loadingforce,'type','node')
+ 
+-		#in 3d, pressureload: [node1 node2 node3 node4 element]
+-		pressureload_layer1=numpy.hstack((md.diagnostic.icefront[:,0:2],md.diagnostic.icefront[:,1:2]+md.mesh.numberofvertices2d,md.diagnostic.icefront[:,0:1]+md.mesh.numberofvertices2d,md.diagnostic.icefront[:,2:4]))    #Add two columns on the first layer 
+-		pressureload=numpy.empty((0,6),int)
+-		for i in xrange(numlayers-1):
+-			pressureload=numpy.vstack((pressureload,numpy.hstack((pressureload_layer1[:,0:4]+i*md.mesh.numberofvertices2d,pressureload_layer1[:,4:5]+i*md.mesh.numberofelements2d,pressureload_layer1[:,5:6]))))
+-		md.diagnostic.icefront=pressureload
+-
+ 		#connectivity
+ 		md.mesh.elementconnectivity=numpy.tile(md.mesh.elementconnectivity,(numlayers-1,1))
+ 		md.mesh.elementconnectivity[numpy.nonzero(md.mesh.elementconnectivity==0)]=-sys.maxint-1
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15613)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15614)
+@@ -91,7 +91,17 @@
+ 				disp('Recovering old hydrology class');
+ 				md.hydrology=hydrologyshreve(md.materials);
+ 			end
++			%2013 Juli 25th
++			if isa(md.diagnostic,'diagnostic'),
++				disp('Recovering old stressbalance class');
++				icefront = md.diagnostic.icefront;
++				md.diagnostic=stressbalance(md.diagnostic);
+ 
++				%Deal with front
++				md.mask.icelevelset=ones(md.mesh.numberofvertices,1);
++				md.mask.icelevelset(icefront(:,1:end-2))=0;
++			end
++
+ 		end% }}}
+ 	end
+ 	methods
+@@ -184,12 +194,6 @@
+ 			md.prognostic.spcthickness=project2d(md,md.prognostic.spcthickness,md.mesh.numberoflayers);
+ 			md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
+ 
+-			%Extrusion of Neumann BC
+-			if ~isnan(md.diagnostic.icefront),
+-				numberofneumann2d=size(md.diagnostic.icefront,1)/(md.mesh.numberoflayers-1);
+-				md.diagnostic.icefront=[md.diagnostic.icefront(1:numberofneumann2d,1:2) md.diagnostic.icefront(1:numberofneumann2d,5:6)]; %Add two columns on the first layer 
+-			end
+-
+ 			%materials
+ 			md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
+ 			md.materials.rheology_n=project2d(md,md.materials.rheology_n,1);
+@@ -498,18 +502,6 @@
+ 				md2.thermal.spctemperature(nodestoflag2,1)=1;
+ 			end
+ 
+-			%Diagnostic
+-			if ~isnan(md2.diagnostic.icefront)
+-				md2.diagnostic.icefront(:,1)=Pnode(md1.diagnostic.icefront(:,1)); 
+-				md2.diagnostic.icefront(:,2)=Pnode(md1.diagnostic.icefront(:,2)); 
+-				md2.diagnostic.icefront(:,end-1)=Pelem(md1.diagnostic.icefront(:,end-1));
+-				if md1.mesh.dimension==3
+-					md2.diagnostic.icefront(:,3)=Pnode(md1.diagnostic.icefront(:,3)); 
+-					md2.diagnostic.icefront(:,4)=Pnode(md1.diagnostic.icefront(:,4)); 
+-				end
+-				md2.diagnostic.icefront=md2.diagnostic.icefront(find(md2.diagnostic.icefront(:,1) & md2.diagnostic.icefront(:,2) & md2.diagnostic.icefront(:,end)),:);
+-			end
+-
+ 			%Results fields
+ 			if isstruct(md1.results),
+ 				md2.results=struct();
+@@ -732,14 +724,6 @@
+ 			md.diagnostic.referential=project3d(md,'vector',md.diagnostic.referential,'type','node');
+ 			md.diagnostic.loadingforce=project3d(md,'vector',md.diagnostic.loadingforce,'type','node');
+ 
+-			%in 3d, pressureload: [node1 node2 node3 node4 element]
+-			pressureload_layer1=[md.diagnostic.icefront(:,1:2)  md.diagnostic.icefront(:,2)+md.mesh.numberofvertices2d  md.diagnostic.icefront(:,1)+md.mesh.numberofvertices2d  md.diagnostic.icefront(:,3:4)]; %Add two columns on the first layer 
+-			pressureload=[];
+-			for i=1:numlayers-1,
+-				pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d pressureload_layer1(:,6)];
+-			end
+-			md.diagnostic.icefront=pressureload;
+-
+ 			%connectivity
+ 			md.mesh.elementconnectivity=repmat(md.mesh.elementconnectivity,numlayers-1,1);
+ 			md.mesh.elementconnectivity(find(md.mesh.elementconnectivity==0))=NaN;
+@@ -1098,7 +1082,7 @@
+ 			md.toolkits         = toolkits();
+ 			md.cluster          = generic();
+ 			md.balancethickness = balancethickness();
+-			md.diagnostic       = diagnostic();
++			md.diagnostic       = stressbalance();
+ 			md.hydrology        = hydrologyshreve();
+ 			md.prognostic       = prognostic();
+ 			md.thermal          = thermal();
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15614)
+@@ -0,0 +1,181 @@
++import numpy
++import sys
++import copy
++from fielddisplay import fielddisplay
++from EnumDefinitions import *
++from checkfield import *
++from WriteData import *
++
++class stressbalance(object):
++	"""
++	STRESSBALANCE class definition
++
++	   Usage:
++	      stressbalance=stressbalance();
++	"""
++
++	def __init__(self): # {{{
++		self.spcvx                    = float('NaN')
++		self.spcvy                    = float('NaN')
++		self.spcvz                    = float('NaN')
++		self.restol                   = 0
++		self.reltol                   = 0
++		self.abstol                   = 0
++		self.isnewton                 = 0
++		self.FSreconditioning     = 0
++		self.viscosity_overshoot      = 0
++		self.icefront                 = float('NaN')
++		self.maxiter                  = 0
++		self.shelf_dampening          = 0
++		self.vertex_pairing           = float('NaN')
++		self.penalty_factor           = float('NaN')
++		self.rift_penalty_lock        = float('NaN')
++		self.rift_penalty_threshold   = 0
++		self.referential              = float('NaN')
++		self.loadingforce             = float('NaN')
++		self.requested_outputs        = float('NaN')
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#}}}
++	def __repr__(self): # {{{
++		
++		string='   StressBalance solution parameters:'
++		string="%s\n%s"%(string,'      Convergence criteria:')
++		string="%s\n%s"%(string,fielddisplay(self,'restol','mechanical equilibrium residual convergence criterion'))
++		string="%s\n%s"%(string,fielddisplay(self,'reltol','velocity relative convergence criterion, NaN: not applied'))
++		string="%s\n%s"%(string,fielddisplay(self,'abstol','velocity absolute convergence criterion, NaN: not applied'))
++		string="%s\n%s"%(string,fielddisplay(self,'isnewton',"0: Picard's fixed point, 1: Newton's method, 2: hybrid"))
++		string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of nonlinear iterations'))
++		string="%s\n%s"%(string,fielddisplay(self,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'))
++
++		string="%s\n%s"%(string,'\n      boundary conditions:')
++		string="%s\n%s"%(string,fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]'))
++		string="%s\n%s"%(string,fielddisplay(self,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]'))
++		string="%s\n%s"%(string,fielddisplay(self,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]'))
++		string="%s\n%s"%(string,fielddisplay(self,'icefront','segments on ice front list (last column 0: Air, 1: Water, 2: Ice'))
++
++		string="%s\n%s"%(string,'\n      Rift options:')
++		string="%s\n%s"%(string,fielddisplay(self,'rift_penalty_threshold','threshold for instability of mechanical constraints'))
++		string="%s\n%s"%(string,fielddisplay(self,'rift_penalty_lock','number of iterations before rift penalties are locked'))
++
++		string="%s\n%s"%(string,'\n      Penalty options:')
++		string="%s\n%s"%(string,fielddisplay(self,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset'))
++		string="%s\n%s"%(string,fielddisplay(self,'vertex_pairing','pairs of vertices that are penalized'))
++
++		string="%s\n%s"%(string,'\n      Other:')
++		string="%s\n%s"%(string,fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for FS model'))
++		string="%s\n%s"%(string,fielddisplay(self,'FSreconditioning','multiplier for incompressibility equation. Only for FS model'))
++		string="%s\n%s"%(string,fielddisplay(self,'referential','local referential'))
++		string="%s\n%s"%(string,fielddisplay(self,'loadingforce','loading force applied on each point [N/m^3]'))
++		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
++
++		return string
++		#}}}
++	def setdefaultparameters(self): # {{{
++		#maximum of non-linear iterations.
++		self.maxiter=100
++
++		#Convergence criterion: absolute, relative and residual
++		self.restol=10**-4
++		self.reltol=0.01
++		self.abstol=10
++
++		self.FSreconditioning=10**13
++		self.shelf_dampening=0
++
++		#Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
++		self.penalty_factor=3
++
++		#coefficient to update the viscosity between each iteration of
++		#a stressbalance according to the following formula
++		#viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
++		self.viscosity_overshoot=0
++
++		#Stop the iterations of rift if below a threshold
++		self.rift_penalty_threshold=0
++
++		#in some solutions, it might be needed to stop a run when only
++		#a few constraints remain unstable. For thermal computation, this
++		#parameter is often used.
++		self.rift_penalty_lock=10
++
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++
++		#Early return
++		if DiagnosticHorizAnalysisEnum() not in analyses:
++			return md
++
++		md = checkfield(md,'diagnostic.spcvx','forcing',1)
++		md = checkfield(md,'diagnostic.spcvy','forcing',1)
++		if md.mesh.dimension==3:
++			md = checkfield(md,'diagnostic.spcvz','forcing',1)
++		md = checkfield(md,'diagnostic.restol','size',[1],'>',0)
++		md = checkfield(md,'diagnostic.reltol','size',[1])
++		md = checkfield(md,'diagnostic.abstol','size',[1])
++		md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0,1,2])
++		md = checkfield(md,'diagnostic.FSreconditioning','size',[1],'NaN',1)
++		md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1],'NaN',1)
++		if md.mesh.dimension==2:
++			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),4],'NaN',1)
++		else:
++			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),6],'NaN',1)
++		md = checkfield(md,'diagnostic.icefront[:,-1]','values',[0,1,2])
++		md = checkfield(md,'diagnostic.maxiter','size',[1],'>=',1)
++		md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices,6])
++		md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices,3])
++		if not md.diagnostic.requested_outputs:
++			md = checkfield(md,'diagnostic.requested_outputs','size',[float('NaN'),1])
++
++		#singular solution
++#		if ~any((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy))==2),
++		if not numpy.any(numpy.logical_and(numpy.logical_not(numpy.isnan(md.diagnostic.spcvx)),numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)))):
++			md.checkmessage("model is not well posed (singular). You need at least one node with fixed velocity!")
++		#CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
++#		if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
++		if numpy.any(numpy.logical_and(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)!=0,numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)!=6)):
++			md.checkmessage("Each line of diagnostic.referential should contain either only NaN values or no NaN values")
++		#CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
++#		if any(sum(isnan(md.diagnostic.referential),2)==0),
++		if numpy.any(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==0):
++			pos=[i for i,item in enumerate(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)) if item==0]
++#			numpy.inner (and numpy.dot) calculate all the dot product permutations, resulting in a full matrix multiply
++#			if numpy.any(numpy.abs(numpy.inner(md.diagnostic.referential[pos,0:2],md.diagnostic.referential[pos,3:5]).diagonal())>sys.float_info.epsilon):
++#				md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
++			for item in md.diagnostic.referential[pos,:]:
++				if numpy.abs(numpy.inner(item[0:2],item[3:5]))>sys.float_info.epsilon:
++					md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
++		#CHECK THAT NO rotation specified for FS Grounded ice at base
++#		if md.mesh.dimension==3 & md.flowequation.isFS,
++		if md.mesh.dimension==3 and md.flowequation.isFS:
++			pos=numpy.nonzero(numpy.logical_and(md.mask.vertexongroundedice,md.mesh.vertexonbed))
++			if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.referential[pos,:]))):
++				md.checkmessage("no referential should be specified for basal vertices of grounded ice")
++
++		return md
++	# }}}
++	def marshall(self,md,fid):    # {{{
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','restol','format','Double')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','reltol','format','Double')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','abstol','format','Double')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','isnewton','format','Integer')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','FSreconditioning','format','Double')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','viscosity_overshoot','format','Double')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','maxiter','format','Integer')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','shelf_dampening','format','Integer')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','vertex_pairing','format','DoubleMat','mattype',3)
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','penalty_factor','format','Double')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','rift_penalty_lock','format','Integer')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','rift_penalty_threshold','format','Integer')
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','referential','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','requested_outputs','format','DoubleMat','mattype',3)
++		WriteData(fid,'data',self.loadingforce[:,0],'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum())
++		WriteData(fid,'data',self.loadingforce[:,1],'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum())
++		WriteData(fid,'data',self.loadingforce[:,2],'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum())
++	# }}}
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 15614)
+@@ -0,0 +1,177 @@
++%STRESSBALANC Eclass definition
++%
++%   Usage:
++%      stressbalance=stressbalance();
++
++classdef stressbalance
++	properties (SetAccess=public) 
++		spcvx                  = NaN;
++		spcvy                  = NaN;
++		spcvz                  = NaN;
++		restol                 = 0;
++		reltol                 = 0;
++		abstol                 = 0;
++		isnewton               = 0;
++		FSreconditioning       = 0;
++		viscosity_overshoot    = 0;
++		maxiter                = 0;
++		shelf_dampening        = 0;
++		vertex_pairing         = NaN;
++		penalty_factor         = NaN;
++		rift_penalty_lock      = NaN;
++		rift_penalty_threshold = 0;
++		referential            = NaN;
++		loadingforce           = NaN;
++		requested_outputs      = NaN;
++	end
++	methods
++		function obj = stressbalance(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('stressbalance');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							obj.(fieldname) = inputstruct.(fieldname);
++						end
++					end
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			 %maximum of non-linear iterations.
++			 obj.maxiter=100;
++
++			 %Convergence criterion: absolute, relative and residual
++			 obj.restol=10^-4; 
++			 obj.reltol=0.01;
++			 obj.abstol=10;
++
++			 obj.FSreconditioning=10^13;
++			 obj.shelf_dampening=0;
++
++			 %Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor
++			 obj.penalty_factor=3;
++
++			 %coefficient to update the viscosity between each iteration of
++			 %a stressbalance according to the following formula
++			 %viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
++			 obj.viscosity_overshoot=0;
++
++			 %Stop the iterations of rift if below a threshold
++			 obj.rift_penalty_threshold=0;
++
++			 %in some solutions, it might be needed to stop a run when only
++			 %a few constraints remain unstable. For thermal computation, this
++			 %parameter is often used.
++			 obj.rift_penalty_lock=10;
++
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			%Early return
++			if ~ismember(DiagnosticHorizAnalysisEnum(),analyses), return; end
++
++			md = checkfield(md,'diagnostic.spcvx','forcing',1);
++			md = checkfield(md,'diagnostic.spcvy','forcing',1);
++			if md.mesh.dimension==3, md = checkfield(md,'diagnostic.spcvz','forcing',1); end
++			md = checkfield(md,'diagnostic.restol','size',[1 1],'>',0,'NaN',1);
++			md = checkfield(md,'diagnostic.reltol','size',[1 1]);
++			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
++			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
++			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
++			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
++			md = checkfield(md,'diagnostic.maxiter','size',[1 1],'>=',1);
++			md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices 6]);
++			md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices 3]);
++			if ~isempty(md.diagnostic.requested_outputs),
++				md = checkfield(md,'diagnostic.requested_outputs','size',[NaN 1]);
++			end
++
++			%singular solution
++			if ~(any(~isnan(md.diagnostic.spcvx)) & any(~isnan(md.diagnostic.spcvy))),
++				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
++			end
++			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
++			if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
++				md = checkmessage(md,['Each line of diagnostic.referential should contain either only NaN values or no NaN values']);
++			end
++			%CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
++			if any(sum(isnan(md.diagnostic.referential),2)==0),
++				pos=find(sum(isnan(md.diagnostic.referential),2)==0);
++				if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps),
++					md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
++				end
++			end
++			%CHECK THAT NO rotation specified for FS Grounded ice at base
++			if md.mesh.dimension==3 & md.flowequation.isFS,
++				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
++				if any(~isnan(md.diagnostic.referential(pos,:))),
++					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
++				end
++				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
++			end
++		end % }}}
++		function disp(obj) % {{{
++
++			disp(sprintf('   StressBalance solution parameters:'));
++
++			disp(sprintf('\n      %s','Convergence criteria:'));
++			fielddisplay(obj,'restol','mechanical equilibrium residual convergence criterion');
++			fielddisplay(obj,'reltol','velocity relative convergence criterion, NaN: not applied');
++			fielddisplay(obj,'abstol','velocity absolute convergence criterion, NaN: not applied');
++			fielddisplay(obj,'isnewton','0: Picard''s fixed point, 1: Newton''s method, 2: hybrid');
++			fielddisplay(obj,'maxiter','maximum number of nonlinear iterations');
++			fielddisplay(obj,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
++
++			disp(sprintf('\n      %s','boundary conditions:'));
++			fielddisplay(obj,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');
++			fielddisplay(obj,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]');
++			fielddisplay(obj,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]');
++
++			disp(sprintf('\n      %s','Rift options:'));
++			fielddisplay(obj,'rift_penalty_threshold','threshold for instability of mechanical constraints');
++			fielddisplay(obj,'rift_penalty_lock','number of iterations before rift penalties are locked');
++
++			disp(sprintf('\n      %s','Penalty options:'));
++			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
++			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
++
++			disp(sprintf('\n      %s','Other:'));
++			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for FS model');
++			fielddisplay(obj,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');
++			fielddisplay(obj,'referential','local referential');
++			fielddisplay(obj,'loadingforce','loading force applied on each point [N/m^3]');
++			fielddisplay(obj,'requested_outputs','additional outputs requested');
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','restol','format','Double');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','reltol','format','Double');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','abstol','format','Double');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','isnewton','format','Integer');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','FSreconditioning','format','Double');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','viscosity_overshoot','format','Double');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','maxiter','format','Integer');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','shelf_dampening','format','Integer');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','penalty_factor','format','Double');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','rift_penalty_lock','format','Integer');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','rift_penalty_threshold','format','Integer');
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','referential','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','requested_outputs','format','DoubleMat','mattype',3);
++			WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
++			WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
++			WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/consistency/checkfield.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.py	(revision 15613)
++++ ../trunk-jpl/src/m/consistency/checkfield.py	(revision 15614)
+@@ -28,8 +28,6 @@
+ 
+ 	   Example:
+ 	      md = checkfield(md,'mesh.elementonbed','size',[md.mesh.numberofelements 1],'values',[0 1]);
+-	      md = checkfield(md,'diagnostic.icefront','size',[NaN 4],'NaN',1);
+-	      md = checkfield(md,'diagnostic.icefront(:,end)','values',[0 1 2]);
+ 	"""
+ 
+ 	#get options
+Index: ../trunk-jpl/src/m/consistency/checkfield.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.m	(revision 15613)
++++ ../trunk-jpl/src/m/consistency/checkfield.m	(revision 15614)
+@@ -22,8 +22,6 @@
+ %
+ %   Example:
+ %      md = checkfield(md,'mesh.elementonbed','size',[md.mesh.numberofelements 1],'values',[0 1]);
+-%      md = checkfield(md,'diagnostic.icefront','size',[NaN 4],'NaN',1);
+-%      md = checkfield(md,'diagnostic.icefront(:,end)','values',[0 1 2]);
+ 
+ %get options
+ options=pairoptions(varargin{:});
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 15613)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 15614)
+@@ -31,11 +31,7 @@
+ 	else:
+ 		print "      boundary conditions for diagnostic model: spc set as zero"
+ 
+-	#segment on neumann (Ice Front) -> none
+-	if md.mesh.dimension==2:
+-		md.diagnostic.icefront=numpy.zeros((0,4))
+-	else:
+-		md.diagnostic.icefront=numpy.zeros((0,6))
++	#No ice front -> do nothing
+ 
+ 	#Create zeros basal melting rate and surface mass balance if not specified
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15613)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15614)
+@@ -56,23 +56,7 @@
+ pos=find(md.mesh.vertexonboundary);
+ md.hydrology.spcwatercolumn(pos,1)=1;
+ 
+-%segment on Neumann (Ice Front)
+-pos=find(vertexonicefront(md.mesh.segments(:,1)) | vertexonicefront(md.mesh.segments(:,2)));
+-if (md.mesh.dimension==2)
+-	pressureload=md.mesh.segments(pos,:);
+-elseif md.mesh.dimension==3
+-	pressureload_layer1=[md.mesh.segments(pos,1:2)  md.mesh.segments(pos,2)+md.mesh.numberofvertices2d  md.mesh.segments(pos,1)+md.mesh.numberofvertices2d  md.mesh.segments(pos,3)];
+-	pressureload=[];
+-	for i=1:md.mesh.numberoflayers-1,
+-		pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d ];
+-	end
+-end
+-
+-%Add water or air enum depending on the element
+-pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end))+ 0*md.mask.elementongroundedice(pressureload(:,end))];
+-
+-%plug onto model
+-md.diagnostic.icefront=pressureload;
++%Position of ice front
+ md.mask.icelevelset(find(vertexonicefront))=0;
+ 
+ %Create zeros basalforcings and surfaceforcings
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 15613)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 15614)
+@@ -26,12 +26,7 @@
+ 	disp('      boundary conditions for diagnostic model: spc set as zero');
+ end
+ 
+-%segment on neumann (Ice Front) -> none
+-if (md.mesh.dimension==2)
+-	md.diagnostic.icefront=zeros(0,4);
+-else
+-	md.diagnostic.icefront=zeros(0,6);
+-end
++%No ice front: do nothing
+ 
+ %Create zeros basal melting rate and surface mass balance if not specified
+ if (isnan(md.surfaceforcings.precipitation) & (md.surfaceforcings.ispdd==1)),
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15613)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15614)
+@@ -53,26 +53,7 @@
+ 	else:
+ 		print "      boundary conditions for diagnostic model: spc set as zero"
+ 
+-	#segment on Ice Front
+-	#segment on Neumann (Ice Front)
+-#	pos=find(nodeonicefront(md.mesh.segments(:,1)) | nodeonicefront(md.mesh.segments(:,2)));
+-	pos=numpy.nonzero(numpy.logical_or(nodeonicefront[md.mesh.segments[:,0]-1],nodeonicefront[md.mesh.segments[:,1]-1]))[0]
+-	if   md.mesh.dimension==2:
+-		pressureload=md.mesh.segments[pos,:]
+-	elif md.mesh.dimension==3:
+-#		pressureload_layer1=[md.mesh.segments(pos,1:2)  md.mesh.segments(pos,2)+md.mesh.numberofvertices2d  md.mesh.segments(pos,1)+md.mesh.numberofvertices2d  md.mesh.segments(pos,3)];
+-		pressureload_layer1=numpy.hstack((md.mesh.segments[pos,0:2],md.mesh.segments[pos,1]+md.mesh.numberofvertices2d,md.mesh.segments[pos,0]+md.mesh.numberofvertices2d,md.mesh.segments[pos,2]))
+-		pressureload=numpy.zeros((0,5),int)
+-		for i in xrange(1,md.mesh.numberoflayers):
+-#			pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d ];
+-			pressureload=numpy.vstack((pressureload,numpy.hstack((pressureload_layer1[:,0:4]+(i-1)*md.mesh.numberofvertices2d,pressureload_layer1[:,4]+(i-1)*md.mesh.numberofelements2d))))
+-
+-	#Add water or air enum depending on the element
+-#	pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end))];
+-	pressureload=numpy.hstack((pressureload,1*md.mask.elementonfloatingice[pressureload[:,-1]-1].reshape(-1,1)))
+-
+-	#plug onto model
+-	md.diagnostic.icefront=pressureload
++	#Icefront position
+ 	pos=numpy.nonzero(nodeonicefront)[0]
+ 	md.mask.icelevelset[pos]=0
+ 
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15613)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15614)
+@@ -60,25 +60,7 @@
+ 	pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+ 	md.hydrology.spcwatercolumn[pos,0]=1
+ 
+-	#segment on Neumann (Ice Front)
+-#	pos=find(vertexonicefront(md.mesh.segments(:,1)) | vertexonicefront(md.mesh.segments(:,2)));
+-	pos=numpy.nonzero(numpy.logical_or(vertexonicefront[md.mesh.segments[:,0]-1],vertexonicefront[md.mesh.segments[:,1]-1]))[0]
+-	if   md.mesh.dimension==2:
+-		pressureload=md.mesh.segments[pos,:]
+-	elif md.mesh.dimension==3:
+-#		pressureload_layer1=[md.mesh.segments(pos,1:2)  md.mesh.segments(pos,2)+md.mesh.numberofvertices2d  md.mesh.segments(pos,1)+md.mesh.numberofvertices2d  md.mesh.segments(pos,3)];
+-		pressureload_layer1=numpy.hstack((md.mesh.segments[pos,0:2],md.mesh.segments[pos,1]+md.mesh.numberofvertices2d,md.mesh.segments[pos,0]+md.mesh.numberofvertices2d,md.mesh.segments[pos,2]))
+-		pressureload=numpy.zeros((0,5),int)
+-		for i in xrange(1,md.mesh.numberoflayers):
+-#			pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d ];
+-			pressureload=numpy.vstack((pressureload,numpy.hstack((pressureload_layer1[:,0:4]+(i-1)*md.mesh.numberofvertices2d,pressureload_layer1[:,4]+(i-1)*md.mesh.numberofelements2d))))
+-
+-	#Add water or air enum depending on the element
+-#	pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end))+ 0*md.mask.elementongroundedice(pressureload(:,end))];
+-	pressureload=numpy.hstack((pressureload,1*md.mask.elementonfloatingice[pressureload[:,-1]-1].reshape(-1,1)+0*md.mask.elementongroundedice[pressureload[:,-1]-1].reshape(-1,1)))
+-
+-	#plug onto model
+-	md.diagnostic.icefront=pressureload
++	#Position of ice front
+ 	pos=numpy.nonzero(vertexonicefront)[0]
+ 	md.mask.icelevelset[pos]=0
+ 
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15613)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15614)
+@@ -45,24 +45,7 @@
+ 	disp('      boundary conditions for diagnostic model: spc set as zero');
+ end
+ 
+-%segment on Ice Front
+-%segment on Neumann (Ice Front)
+-pos=find(nodeonicefront(md.mesh.segments(:,1)) | nodeonicefront(md.mesh.segments(:,2)));
+-if (md.mesh.dimension==2)
+-	pressureload=md.mesh.segments(pos,:);
+-elseif md.mesh.dimension==3
+-	pressureload_layer1=[md.mesh.segments(pos,1:2)  md.mesh.segments(pos,2)+md.mesh.numberofvertices2d  md.mesh.segments(pos,1)+md.mesh.numberofvertices2d  md.mesh.segments(pos,3)];
+-	pressureload=[];
+-	for i=1:md.mesh.numberoflayers-1,
+-		pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d ];
+-	end
+-end
+-
+-%Add water or air enum depending on the element
+-pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end))];
+-
+-%plug onto model
+-md.diagnostic.icefront=pressureload;
++%Ice front position
+ md.mask.icelevelset(find(nodeonicefront))=0;
+ 
+ %Create zeros basalforcings and surfaceforcings
Index: /issm/oecreview/Archive/15392-16133/ISSM-15614-15615.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15614-15615.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15614-15615.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15614)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15615)
+@@ -20,7 +20,7 @@
+ from toolkits import toolkits
+ from generic import generic
+ from balancethickness import balancethickness
+-from diagnostic import diagnostic
++from stressbalance import stressbalance
+ from groundingline import groundingline
+ from hydrologyshreve import hydrologyshreve
+ from prognostic import prognostic
Index: /issm/oecreview/Archive/15392-16133/ISSM-15615-15616.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15615-15616.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15615-15616.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15615)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15616)
+@@ -119,11 +119,6 @@
+ 		md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0,1,2])
+ 		md = checkfield(md,'diagnostic.FSreconditioning','size',[1],'NaN',1)
+ 		md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1],'NaN',1)
+-		if md.mesh.dimension==2:
+-			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),4],'NaN',1)
+-		else:
+-			md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),6],'NaN',1)
+-		md = checkfield(md,'diagnostic.icefront[:,-1]','values',[0,1,2])
+ 		md = checkfield(md,'diagnostic.maxiter','size',[1],'>=',1)
+ 		md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices,6])
+ 		md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices,3])
Index: /issm/oecreview/Archive/15392-16133/ISSM-15616-15617.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15616-15617.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15616-15617.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15616)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15617)
+@@ -1376,7 +1376,7 @@
+ 
+ 	int         normal_orientation;
+ 	IssmDouble  s1,s2;
+-	IssmDouble  levelset[3];
++	IssmDouble  levelset[6];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&levelset[0],levelsetenum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15617-15618.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15617-15618.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15617-15618.diff	(revision 16134)
@@ -0,0 +1,62 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15617)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15618)
+@@ -697,7 +697,7 @@
+ 
+ 	int         i,j,k;
+ 	IssmDouble  area_init,area_portion;
+-	IssmDouble  xyz_bis[3][3];
++	IssmDouble  xyz_bis[NUMVERTICES][3];
+ 
+ 	area_init=GetArea();
+ 
+@@ -937,7 +937,7 @@
+ 
+ 	int         normal_orientation;
+ 	IssmDouble  s1,s2;
+-	IssmDouble  levelset[3];
++	IssmDouble  levelset[NUMVERTICES];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&levelset[0],levelsetenum);
+@@ -3139,7 +3139,7 @@
+ ElementVector* Tria::CreatePVectorDiagnosticSSAFront(){
+ 
+ 	/*Intermediaries */
+-	IssmDouble  ls[3];
++	IssmDouble  ls[NUMVERTICES];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	bool        isfront;
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15617)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15618)
+@@ -1376,7 +1376,7 @@
+ 
+ 	int         normal_orientation;
+ 	IssmDouble  s1,s2;
+-	IssmDouble  levelset[6];
++	IssmDouble  levelset[NUMVERTICES];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&levelset[0],levelsetenum);
+@@ -7958,7 +7958,7 @@
+ ElementVector* Penta::CreatePVectorDiagnosticHOFront(void){
+ 
+ 	/*Intermediaries */
+-	IssmDouble  ls[6];
++	IssmDouble  ls[NUMVERTICES];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	bool        isfront;
+ 
+@@ -8163,7 +8163,7 @@
+ ElementVector* Penta::CreatePVectorDiagnosticFSFront(void){
+ 
+ 	/*Intermediaries */
+-	IssmDouble  ls[6];
++	IssmDouble  ls[NUMVERTICES];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	bool        isfront;
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15618-15619.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15618-15619.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15618-15619.diff	(revision 16134)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/m/plot/plot_vertexnumbering.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_vertexnumbering.m	(revision 15618)
++++ ../trunk-jpl/src/m/plot/plot_vertexnumbering.m	(revision 15619)
+@@ -19,7 +19,7 @@
+ 	patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','none','EdgeColor','black');
+ 
+ 	%numbering
+-	text(x,y,z,num2str(transpose(1:size(x,1))),...
++	text(x,y,z,num2str(vertexnumbers),...
+ 		'backgroundcolor',[0.8 0.9 0.8],'HorizontalAlignment','center','VerticalAlignment','middle');
+ 
+ 	%Highlight
+@@ -36,7 +36,7 @@
+ 	patch( 'Faces', [C A D F],'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','none','EdgeColor','black');
+ 
+ 	%numbering
+-	text(x,y,z,num2str(transpose(1:size(x,1))),...
++	text(x,y,z,num2str(vertexnumbers),...
+ 		'backgroundcolor',[0.8 0.9 0.8],'HorizontalAlignment','center','VerticalAlignment','middle');
+ 
+ 	%Highlight
+Index: ../trunk-jpl/src/m/plot/plot_elementnumbering.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_elementnumbering.m	(revision 15618)
++++ ../trunk-jpl/src/m/plot/plot_elementnumbering.m	(revision 15619)
+@@ -25,7 +25,7 @@
+ 
+ 	%numbering
+ 	text(sum(x(elements(:,1:3)),2)/3,sum(y(elements(:,1:3)),2)/3,sum(z(elements(:,1:3)),2)/3,...
+-		num2str(transpose(1:size(elements,1))),...
++		num2str(elementnumbers),...
+ 		'HorizontalAlignment','center','VerticalAlignment','middle');
+ else
+ 	%plot mesh 
+@@ -47,7 +47,7 @@
+ 
+ 	%numbering
+ 	text(sum(x(elements(:,1:6)),2)/6,sum(y(elements(:,1:6)),2)/6,sum(z(elements(:,1:6)),2)/6,...
+-		num2str(transpose(1:size(elements,1))),...
++		num2str(elementnumbers),...
+ 		'HorizontalAlignment','center','VerticalAlignment','middle');
+ end
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15619-15620.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15619-15620.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15619-15620.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 15619)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 15620)
+@@ -3,9 +3,6 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.verbose=verbose('all');
+-md.mask.icelevelset(find(md.mask.icelevelset==0))=-1;
+-
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/15392-16133/ISSM-15620-15621.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15620-15621.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15620-15621.diff	(revision 16134)
@@ -0,0 +1,1048 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15620)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15621)
+@@ -71,8 +71,9 @@
+ 	FlowequationIsL1L2Enum,
+ 	FlowequationIsHOEnum,
+ 	FlowequationIsFSEnum,
++	FlowequationFeSSAEnum,
++	FlowequationFeHOEnum,
+ 	FlowequationFeFSEnum,
+-	FlowequationFeSSAEnum,
+ 	FlowequationVertexEquationEnum,
+ 	FrictionCoefficientEnum,
+ 	FrictionPEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15621)
+@@ -79,8 +79,9 @@
+ 		case FlowequationIsL1L2Enum : return "FlowequationIsL1L2";
+ 		case FlowequationIsHOEnum : return "FlowequationIsHO";
+ 		case FlowequationIsFSEnum : return "FlowequationIsFS";
++		case FlowequationFeSSAEnum : return "FlowequationFeSSA";
++		case FlowequationFeHOEnum : return "FlowequationFeHO";
+ 		case FlowequationFeFSEnum : return "FlowequationFeFS";
+-		case FlowequationFeSSAEnum : return "FlowequationFeSSA";
+ 		case FlowequationVertexEquationEnum : return "FlowequationVertexEquation";
+ 		case FrictionCoefficientEnum : return "FrictionCoefficient";
+ 		case FrictionPEnum : return "FrictionP";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15621)
+@@ -79,8 +79,9 @@
+ 	      else if (strcmp(name,"FlowequationIsL1L2")==0) return FlowequationIsL1L2Enum;
+ 	      else if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
+ 	      else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum;
++	      else if (strcmp(name,"FlowequationFeSSA")==0) return FlowequationFeSSAEnum;
++	      else if (strcmp(name,"FlowequationFeHO")==0) return FlowequationFeHOEnum;
+ 	      else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum;
+-	      else if (strcmp(name,"FlowequationFeSSA")==0) return FlowequationFeSSAEnum;
+ 	      else if (strcmp(name,"FlowequationVertexEquation")==0) return FlowequationVertexEquationEnum;
+ 	      else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
+ 	      else if (strcmp(name,"FrictionP")==0) return FrictionPEnum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+ 	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+ 	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+-	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
++	      if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
++	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+ 	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+ 	      else if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
+ 	      else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+-	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
++	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+ 	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+-	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Segment")==0) return SegmentEnum;
++	      if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
++	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+-	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
++	      if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
++	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15621)
+@@ -81,7 +81,7 @@
+ 			for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
+ 				if(edgestemp[e*2+1]==v2+1){
+ 					exist = true;
+-					element_edge_connectivity[i*elementnbv+j]=e;
++					element_edge_connectivity[i*elementnbe+j]=e;
+ 					break;
+ 				}
+ 			}
+@@ -95,7 +95,7 @@
+ 				edgestemp[nbe*2+1] = v2+1;
+ 
+ 				/*Update Connectivity*/
+-				element_edge_connectivity[i*elementnbv+j]=nbe;
++				element_edge_connectivity[i*elementnbe+j]=nbe;
+ 
+ 				/*Update chain*/
+ 				next_edge[nbe] = head_minv[v1];
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15621)
+@@ -53,7 +53,12 @@
+ 			finiteelement = P1Enum;
+ 		}
+ 		else if(isHO){
+-			finiteelement = P1Enum;
++			iomodel->Constant(&temp,FlowequationFeHOEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum; break;
++				case 1 : finiteelement = P2Enum; break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
+ 		}
+ 		else if(isFS){
+ 			finiteelement = P1Enum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15621)
+@@ -12,12 +12,11 @@
+ 	/*Intermediary*/
+ 	int        i,j;
+ 	int        count;
+-	IssmDouble yts;
+ 	IssmDouble g;
+ 	IssmDouble rho_ice;
+ 	IssmDouble FSreconditioning;
+ 	bool       isSSA,isL1L2,isHO,isFS;
+-	int        fe_ssa;
++	int        fe_ssa,fe_ho;
+ 	bool       spcpresent = false;
+ 	int        Mx,Nx;
+ 	int        My,Ny;
+@@ -43,7 +42,6 @@
+ 	SpcStatic   *spcstatic        = NULL;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&g,ConstantsGEnum);
+ 	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+ 	iomodel->Constant(&FSreconditioning,DiagnosticFSreconditioningEnum);
+@@ -52,6 +50,7 @@
+ 	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+ 	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+ 	iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
++	iomodel->Constant(&fe_ho,FlowequationFeHOEnum);
+ 
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+@@ -107,11 +106,11 @@
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 
+@@ -122,11 +121,11 @@
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 
+@@ -144,11 +143,11 @@
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 
+@@ -159,15 +158,15 @@
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 						if (!xIsNan<IssmDouble>(spcvz[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 					}
+@@ -184,11 +183,11 @@
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 
+@@ -199,15 +198,15 @@
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 						count++;
+ 						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 						if (!xIsNan<IssmDouble>(spcvz[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 							count++;
+ 						}
+ 					}
+@@ -216,7 +215,7 @@
+ 			/*Now add the regular spcs*/
+ 			else{
+ 				if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+ 					count++;
+ 
+ 				}
+@@ -225,7 +224,7 @@
+ 					values=xNew<IssmDouble>(Nx);
+ 					spcpresent=false;
+ 					for(j=0;j<Nx;j++){
+-						values[j]=spcvx[i*Nx+j]/yts;
++						values[j]=spcvx[i*Nx+j];
+ 						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+ 					}
+ 
+@@ -241,7 +240,7 @@
+ 				}
+ 
+ 				if (My==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
+ 					count++;
+ 				}
+ 				else if (My==iomodel->numberofvertices+1){
+@@ -249,7 +248,7 @@
+ 					values=xNew<IssmDouble>(Ny);
+ 					spcpresent=false;
+ 					for(j=0;j<Ny;j++){
+-						values[j]=spcvy[i*Ny+j]/yts;
++						values[j]=spcvy[i*Ny+j];
+ 						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+ 					}
+ 					if(spcpresent){
+@@ -265,7 +264,7 @@
+ 
+ 				if (reCast<int,IssmDouble>(vertices_type[i])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
+ 					if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+ 						count++;
+ 					}
+ 					else if (Mz==iomodel->numberofvertices+1){
+@@ -273,7 +272,7 @@
+ 						values=xNew<IssmDouble>(Nz);
+ 						spcpresent=false;
+ 						for(j=0;j<Nz;j++){
+-							values[j]=spcvz[i*Nz+j]/yts;
++							values[j]=spcvz[i*Nz+j];
+ 							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+ 						}
+ 						if(spcpresent){
+@@ -312,7 +311,7 @@
+ 	}
+ 
+ 	/*SPC Quadratic elements*/
+-	if(isSSA && fe_ssa==1){
++	if((isSSA && fe_ssa==1) || (isHO && fe_ho==1)){
+ 
+ 		int   v1,v2;
+ 		bool *my_edges = NULL;
+@@ -329,18 +328,18 @@
+ 
+ 				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-									1,(spcvx[v1]+spcvx[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
++									1,(spcvx[v1]+spcvx[v2])/(2.),DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+ 				if(!xIsNan<IssmDouble>(spcvy[v1]) && !xIsNan<IssmDouble>(spcvy[v2])){
+ 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-									2,(spcvy[v1]+spcvy[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
++									2,(spcvy[v1]+spcvy[v2])/(2.),DiagnosticHorizAnalysisEnum));
+ 					count++;
+ 				}
+ 				if (reCast<int,IssmDouble>(vertices_type[v1])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){
+ 					if(!xIsNan<IssmDouble>(spcvz[v1]) && !xIsNan<IssmDouble>(spcvz[v2])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-										3,(spcvz[v1]+spcvz[v2])/(2.*yts),DiagnosticHorizAnalysisEnum));
++										3,(spcvz[v1]+spcvz[v2])/(2.),DiagnosticHorizAnalysisEnum));
+ 						count++;
+ 					}
+ 				}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15621)
+@@ -48,7 +48,12 @@
+ 		}
+ 		else if(isHO){
+ 			approximation = HOApproximationEnum;
+-			finiteelement = P1Enum;
++			iomodel->Constant(&temp,FlowequationFeHOEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum; break;
++				case 1 : finiteelement = P2Enum; break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
+ 		}
+ 		else if(isFS){
+ 			approximation = FSApproximationEnum;
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 15620)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 15621)
+@@ -7,6 +7,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element);
++void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof=1);
+ 
+ #endif  /* _IOMODELTOELEMENTINPUTX_H */
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15621)
+@@ -7,7 +7,7 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../ModelProcessorx/ModelProcessorx.h"
+ 
+-void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element){
++void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof){
+ 
+ 	/*intermediary: */
+ 	int         i,j,count;
+@@ -48,7 +48,7 @@
+ 		for (i=0;i<iomodel->numberofvertices;i++){
+ 			if((iomodel->my_vertices[i])){
+ 				if (!xIsNan<IssmDouble>(spcdata[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcdata[i],analysis_type));
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
+ 					count++;
+ 				}
+ 			}
+@@ -60,7 +60,7 @@
+ 					v2 = iomodel->edges[2*i+1]-1;
+ 					if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-										1,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
++										dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
+ 						count++;
+ 					}
+ 				}
+@@ -89,7 +89,7 @@
+ 				}
+ 
+ 				if(spcpresent){
+-					constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,N,times,values,analysis_type));
++					constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
+ 					count++;
+ 				}
+ 				xDelete<IssmDouble>(values);
+@@ -107,7 +107,7 @@
+ 						if(!xIsNan<IssmDouble>(values[j])) spcpresent=true; //NaN means no spc by default
+ 					}
+ 					if(spcpresent){
+-						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,1,
++						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
+ 										N,times,values,analysis_type));
+ 						count++;
+ 					}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15621)
+@@ -2319,7 +2319,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::Update{{{*/
+-void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement_type){
++void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){
+ 
+ 	/*Intermediaries*/
+ 	int        i,j;
+@@ -2345,7 +2345,7 @@
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 
+ 	/*Recover element type*/
+-	this->SetElementType(finitelement_type,analysis_counter);
++	this->SetElementType(finiteelement_type,analysis_counter);
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<3;i++){ 
+@@ -2353,7 +2353,7 @@
+ 	}
+ 
+ 	/*Recover nodes ids needed to initialize the node hook.*/
+-	switch(finitelement_type){
++	switch(finiteelement_type){
+ 		case P1Enum:
+ 			numnodes        = 3;
+ 			tria_node_ids   = xNew<int>(numnodes);
+@@ -2379,7 +2379,7 @@
+ 			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
+ 			break;
+ 		default:
+-			_error_("Finite element "<<EnumToStringx(finitelement_type)<<" not supported yet");
++			_error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
+ 	}
+ 
+ 	/*hooks: */
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15621)
+@@ -45,8 +45,6 @@
+ /*FUNCTION PentaRef::SetElementType{{{*/
+ void PentaRef::SetElementType(int type,int type_counter){
+ 
+-	_assert_(type==P1Enum || type==P1DGEnum);
+-
+ 	/*initialize element type*/
+ 	this->element_type_list[type_counter]=type;
+ }
+@@ -142,70 +140,73 @@
+ 	 *          [  0         1/2*dh/dz  ]
+ 	 * where h is the interpolation function for node i.
+ 	 *
+-	 * We assume B has been allocated already, of size: 5x(NDOF2*NUMNODESP1)
++	 * We assume B has been allocated already, of size: 5x(NDOF2*numnodes)
+ 	 */
+ 
+-	IssmDouble dbasis[3][NUMNODESP1];
+ 
+-	/*Get dbasis in actual coordinate system: */
+-	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss);
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
+ 	/*Build B: */
+-	for (int i=0;i<NUMNODESP1;i++){
+-		B[NDOF2*NUMNODESP1*0+NDOF2*i+0] = dbasis[0][i];
+-		B[NDOF2*NUMNODESP1*0+NDOF2*i+1] = 0.;
+-
+-		B[NDOF2*NUMNODESP1*1+NDOF2*i+0] = 0.;
+-		B[NDOF2*NUMNODESP1*1+NDOF2*i+1] = dbasis[1][i];
+-
+-		B[NDOF2*NUMNODESP1*2+NDOF2*i+0] = .5*dbasis[1][i];
+-		B[NDOF2*NUMNODESP1*2+NDOF2*i+1] = .5*dbasis[0][i];
+-
+-		B[NDOF2*NUMNODESP1*3+NDOF2*i+0] = .5*dbasis[2][i];
+-		B[NDOF2*NUMNODESP1*3+NDOF2*i+1] = 0.;
+-
+-		B[NDOF2*NUMNODESP1*4+NDOF2*i+0] = 0.;
+-		B[NDOF2*NUMNODESP1*4+NDOF2*i+1] = .5*dbasis[2][i];
++	for(int i=0;i<numnodes;i++){
++		B[NDOF2*numnodes*0+NDOF2*i+0] = dbasis[0*numnodes+i];
++		B[NDOF2*numnodes*0+NDOF2*i+1] = 0.;
++		B[NDOF2*numnodes*1+NDOF2*i+0] = 0.;
++		B[NDOF2*numnodes*1+NDOF2*i+1] = dbasis[1*numnodes+i];
++		B[NDOF2*numnodes*2+NDOF2*i+0] = .5*dbasis[1*numnodes+i];
++		B[NDOF2*numnodes*2+NDOF2*i+1] = .5*dbasis[0*numnodes+i];
++		B[NDOF2*numnodes*3+NDOF2*i+0] = .5*dbasis[2*numnodes+i];
++		B[NDOF2*numnodes*3+NDOF2*i+1] = 0.;
++		B[NDOF2*numnodes*4+NDOF2*i+0] = 0.;
++		B[NDOF2*numnodes*4+NDOF2*i+1] = .5*dbasis[2*numnodes+i];
+ 	}
+ 
++	/*Clean-up*/
++	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBprimeHO {{{*/
+-void PentaRef::GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss_coord){
++void PentaRef::GetBprimeHO(IssmDouble* B,IssmDouble* xyz_list,GaussPenta* gauss){
+ 	/*Compute B  prime matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+ 	 *       Bi=[ 2*dh/dx     dh/dy   ]
+-	 *                [   dh/dx    2*dh/dy  ]
+-	 *                [ dh/dy      dh/dx    ]
+-	 *                [ dh/dz         0     ]
+-	 *                [  0         dh/dz    ]
++	 *          [   dh/dx    2*dh/dy  ]
++	 *          [ dh/dy      dh/dx    ]
++	 *          [ dh/dz         0     ]
++	 *          [  0         dh/dz    ]
+ 	 * where h is the interpolation function for node i.
+ 	 *
+-	 * We assume B has been allocated already, of size: 5x(NDOF2*NUMNODESP1)
++	 * We assume B has been allocated already, of size: 5x(NDOF2*numnodes)
+ 	 */
+-	IssmDouble dbasis[3][NUMNODESP1];
+ 
+-	/*Get dbasis in actual coordinate system: */
+-	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss_coord);
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
+ 	/*Build BPrime: */
+-	for(int i=0;i<NUMNODESP1;i++){
+-		B[NDOF2*NUMNODESP1*0+NDOF2*i+0]=2.*dbasis[0][i]; 
+-		B[NDOF2*NUMNODESP1*0+NDOF2*i+1]=dbasis[1][i];
++	for(int i=0;i<numnodes;i++){
++		B[NDOF2*numnodes*0+NDOF2*i+0]=2.*dbasis[0*numnodes+i]; 
++		B[NDOF2*numnodes*0+NDOF2*i+1]=dbasis[1*numnodes+i];
++		B[NDOF2*numnodes*1+NDOF2*i+0]=dbasis[0*numnodes+i];
++		B[NDOF2*numnodes*1+NDOF2*i+1]=2.*dbasis[1*numnodes+i];
++		B[NDOF2*numnodes*2+NDOF2*i+0]=dbasis[1*numnodes+i]; 
++		B[NDOF2*numnodes*2+NDOF2*i+1]=dbasis[0*numnodes+i]; 
++		B[NDOF2*numnodes*3+NDOF2*i+0]=dbasis[2*numnodes+i]; 
++		B[NDOF2*numnodes*3+NDOF2*i+1]=0.;
++		B[NDOF2*numnodes*4+NDOF2*i+0]=0.;
++		B[NDOF2*numnodes*4+NDOF2*i+1]=dbasis[2*numnodes+i]; 
++	}
+ 
+-		B[NDOF2*NUMNODESP1*1+NDOF2*i+0]=dbasis[0][i];
+-		B[NDOF2*NUMNODESP1*1+NDOF2*i+1]=2.*dbasis[1][i];
+-
+-		B[NDOF2*NUMNODESP1*2+NDOF2*i+0]=dbasis[1][i]; 
+-		B[NDOF2*NUMNODESP1*2+NDOF2*i+1]=dbasis[0][i]; 
+-
+-		B[NDOF2*NUMNODESP1*3+NDOF2*i+0]=dbasis[2][i]; 
+-		B[NDOF2*NUMNODESP1*3+NDOF2*i+1]=0.;
+-
+-		B[NDOF2*NUMNODESP1*4+NDOF2*i+0]=0.;
+-		B[NDOF2*NUMNODESP1*4+NDOF2*i+1]=dbasis[2][i]; 
+-	}
++	/*Clean-up*/
++	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBprimeSSAFS{{{*/
+@@ -1183,6 +1184,9 @@
+ 		dbasis[numnodes*2+i]=Jinv[2][0]*dbasis_ref[0*numnodes+i]+Jinv[2][1]*dbasis_ref[1*numnodes+i]+Jinv[2][2]*dbasis_ref[2*numnodes+i];
+ 	}
+ 
++	/*Clean up*/
++	xDelete<IssmDouble>(dbasis_ref);
++
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsDerivativesReference{{{*/
+@@ -1621,6 +1625,7 @@
+ 
+ 	switch(this->element_type){
+ 		case P1Enum:   return NUMNODESP1;
++		case P2Enum:   return NUMNODESP2;
+ 		case MINIEnum: return NUMNODESP1b;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15620)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15621)
+@@ -3094,18 +3094,17 @@
+ 
+ 	/*Intermediaries*/
+ 	int        i;
+-	int        penta_node_ids[6];
+ 	int        penta_vertex_ids[6];
+ 	IssmDouble nodeinputs[6];
+ 	IssmDouble yts;
+-	int        stabilization;
+ 	bool       dakota_analysis;
+ 	bool       isFS;
+ 	IssmDouble beta,heatcapacity,referencetemperature,meltingpoint,latentheat;
++	int        numnodes;
++	int*       penta_node_ids = NULL;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+ 	iomodel->Constant(&beta,MaterialsBetaEnum);
+@@ -3119,20 +3118,50 @@
+ 	_assert_(iomodel->elements);
+ 	/*}}}*/
+ 
++	/*Recover element type*/
+ 	this->SetElementType(finiteelement_type,analysis_counter);
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<6;i++) penta_vertex_ids[i]=iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
+ 
+ 	/*Recover nodes ids needed to initialize the node hook.*/
+-	for(i=0;i<6;i++){ 
+-		//go recover node ids, needed to initialize the node hook.
+-		//WARNING: We assume P1 elements here!!!!!
+-		penta_node_ids[i]=iomodel->nodecounter+iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
++	switch(finiteelement_type){
++		case P1Enum:
++			numnodes         = 6;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[0]=iomodel->nodecounter+iomodel->elements[6*index+0];
++			penta_node_ids[1]=iomodel->nodecounter+iomodel->elements[6*index+1];
++			penta_node_ids[2]=iomodel->nodecounter+iomodel->elements[6*index+2];
++			penta_node_ids[3]=iomodel->nodecounter+iomodel->elements[6*index+3];
++			penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
++			penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++			break;
++		case P2Enum:
++			numnodes         = 15;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
++			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
++			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
++			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
++			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
++			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
++			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
++			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
++			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
++			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
++			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
++			penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
++			penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
++			penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
++			break;
++		default:
++			_error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
+ 	}
+ 
+ 	/*hooks: */
+-	this->SetHookNodes(penta_node_ids,6,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
++	this->SetHookNodes(penta_node_ids,numnodes,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
++	xDelete<int>(penta_node_ids);
+ 
+ 	/*Fill with IoModel*/
+ 	this->InputUpdateFromIoModel(index,iomodel);
+@@ -6842,26 +6871,26 @@
+ /*FUNCTION Penta::CreateKMatrixDiagnosticHOViscous{{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticHOViscous(void){
+ 
+-	/*Constants*/
+-	const int    numdof=NDOF2*NUMVERTICES;
+-
+ 	/*Intermediaries */
+-	int        i,j;
+-	int        approximation;
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble Jdet;
+-	IssmDouble viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
+-	IssmDouble epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble D_scalar;
+-	IssmDouble D[5][5]={0.0};            // material matrix, simple scalar matrix.
+-	IssmDouble B[5][numdof];
+-	IssmDouble Bprime[5][numdof];
+-	Tria*      tria=NULL;
++	int         i,j;
++	int         approximation;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  Jdet;
++	IssmDouble  viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
++	IssmDouble  epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble  D_scalar;
+ 	GaussPenta *gauss=NULL;
+ 
+-	/*Initialize Element matrix*/
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
+ 
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,HOApproximationEnum);
++	IssmDouble*    B      = xNew<IssmDouble>(5*numdof);
++	IssmDouble*    Bprime = xNew<IssmDouble>(5*numdof);
++	IssmDouble*    D      = xNewZeroInit<IssmDouble>(5*5);
++
+ 	/*Retrieve all inputs and parameters*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -6878,8 +6907,8 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBHO(&B[0][0], &xyz_list[0][0], gauss);
+-		GetBprimeHO(&Bprime[0][0], &xyz_list[0][0], gauss);
++		GetBHO(&B[0], &xyz_list[0][0], gauss);
++		GetBprimeHO(&Bprime[0], &xyz_list[0][0], gauss);
+ 
+ 		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 		this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+@@ -6888,46 +6917,51 @@
+ 		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+ 
+ 		D_scalar=2*newviscosity*gauss->weight*Jdet;
+-		for (i=0;i<5;i++) D[i][i]=D_scalar;
++		for (i=0;i<5;i++) D[i*5+i]=D_scalar;
+ 
+-		TripleMultiply( &B[0][0],5,numdof,1,
+-					&D[0][0],5,5,0,
+-					&Bprime[0][0],5,numdof,0,
++		TripleMultiply(B,5,numdof,1,
++					D,5,5,0,
++					Bprime,5,numdof,0,
+ 					&Ke->values[0],1);
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<IssmDouble>(D);
++	xDelete<IssmDouble>(Bprime);
++	xDelete<IssmDouble>(B);
+ 	return Ke;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::CreateKMatrixDiagnosticHOFriction{{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticHOFriction(void){
+ 
+-	/*Constants*/
+-	const int numdof   = NDOF2*NUMVERTICES;
+-
+ 	/*Intermediaries */
+-	int       i,j;
+-	int       analysis_type,migration_style;
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
+-	IssmDouble alpha2,Jdet;
+-	IssmDouble phi=1.0;
+-	IssmDouble L[2][numdof];
+-	IssmDouble DL[2][2]={{ 0,0 },{0,0}}; //for basal drag
+-	IssmDouble DL_scalar;
+-	Friction  *friction = NULL;
+-	GaussPenta *gauss=NULL;
++	int         i,j;
++	int         analysis_type,migration_style;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  xyz_list_tria[NUMVERTICES2D][3]={0.};
++	IssmDouble  alpha2,Jdet;
++	IssmDouble  phi=1.0;
++	IssmDouble  DL_scalar;
++	Friction   *friction = NULL;
++	GaussPenta *gauss    = NULL;
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+ 
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
+ 
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,HOApproximationEnum);
++	IssmDouble*    B      = xNew<IssmDouble>(2*numdof);
++	IssmDouble*    D      = xNewZeroInit<IssmDouble>(2*2);
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+@@ -6950,26 +6984,28 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0],gauss);
+-		GetBHOFriction(&L[0][0],gauss);
++		GetTriaJacobianDeterminant(&Jdet,&xyz_list_tria[0][0],gauss);
++		GetBHOFriction(&B[0],gauss);
+ 
+ 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum); 
+ 		if(migration_style==SubelementMigrationEnum) alpha2=phi*alpha2;
+ 
+ 		DL_scalar=alpha2*gauss->weight*Jdet;
+-		for (i=0;i<2;i++) DL[i][i]=DL_scalar;
++		for (i=0;i<2;i++) D[i*2+i]=DL_scalar;
+ 
+-		TripleMultiply( &L[0][0],2,numdof,1,
+-					&DL[0][0],2,2,0,
+-					&L[0][0],2,numdof,0,
++		TripleMultiply(B,2,numdof,1,
++					D,2,2,0,
++					B,2,numdof,0,
+ 					&Ke->values[0],1);
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<IssmDouble>(D);
++	xDelete<IssmDouble>(B);
+ 	delete friction;
+ 	return Ke;
+ }
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15620)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15621)
+@@ -153,9 +153,12 @@
+ 		return md
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
++
++		yts=365.0*24.0*3600.0
++
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
+ 		WriteData(fid,'object',self,'class','diagnostic','fieldname','restol','format','Double')
+ 		WriteData(fid,'object',self,'class','diagnostic','fieldname','reltol','format','Double')
+ 		WriteData(fid,'object',self,'class','diagnostic','fieldname','abstol','format','Double')
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 15620)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 15621)
+@@ -152,9 +152,12 @@
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++
++			yts=365.0*24.0*3600.0;
++
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
+ 			WriteData(fid,'object',obj,'class','diagnostic','fieldname','restol','format','Double');
+ 			WriteData(fid,'object',obj,'class','diagnostic','fieldname','reltol','format','Double');
+ 			WriteData(fid,'object',obj,'class','diagnostic','fieldname','abstol','format','Double');
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15620)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15621)
+@@ -21,6 +21,7 @@
+ 		self.isHO             = 0
+ 		self.isFS             = 0
+ 		self.fe_SSA           = 0
++		self.fe_HO            = 0
+ 		self.fe_FS            = 0
+ 		self.vertex_equation  = float('NaN')
+ 		self.element_equation = float('NaN')
+@@ -59,6 +60,9 @@
+ 			md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0])
+ 			md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1])
+@@ -84,8 +88,9 @@
+ 		WriteData(fid,'object',self,'fieldname','isL1L2','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isHO','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isFS','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','fe_SSA','format','Integer')
++		WriteData(fid,'object',self,'fieldname','fe_HO','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','fe_FS','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','fe_SSA','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1)
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15620)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15621)
+@@ -11,6 +11,7 @@
+ 		isHO             = 0;
+ 		isFS             = 0;
+ 		fe_SSA           = 0;
++		fe_HO            = 0;
+ 		fe_FS            = 0;
+ 		vertex_equation  = NaN;
+ 		element_equation = NaN;
+@@ -77,6 +78,9 @@
+ 				md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0]);
+ 				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+@@ -122,8 +126,9 @@
+ 			WriteData(fid,'object',obj,'fieldname','isL1L2','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isHO','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isFS','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','fe_SSA','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','fe_HO','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','fe_FS','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','fe_SSA','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','borderSSA','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','borderHO','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','borderFS','format','DoubleMat','mattype',1);
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15620)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15621)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=565;
++macro=566;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15620)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15621)
+@@ -890,34 +890,48 @@
+ 
+ 	return StringToEnum('FlowequationIsFS')[0]
+ 
+-def FlowequationFeFSEnum():
++def FlowequationFeSSAEnum():
+ 	"""
+-	FLOWEQUATIONFEFSENUM - Enum of FlowequationFeFS
++	FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSSA
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationFeFSEnum()
++	      macro=FlowequationFeSSAEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationFeFS')[0]
++	return StringToEnum('FlowequationFeSSA')[0]
+ 
+-def FlowequationFeSSAEnum():
++def FlowequationFeHOEnum():
+ 	"""
+-	FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSSA
++	FLOWEQUATIONFEHOENUM - Enum of FlowequationFeHO
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=FlowequationFeSSAEnum()
++	      macro=FlowequationFeHOEnum()
+ 	"""
+ 
+-	return StringToEnum('FlowequationFeSSA')[0]
++	return StringToEnum('FlowequationFeHO')[0]
+ 
++def FlowequationFeFSEnum():
++	"""
++	FLOWEQUATIONFEFSENUM - Enum of FlowequationFeFS
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=FlowequationFeFSEnum()
++	"""
++
++	return StringToEnum('FlowequationFeFS')[0]
++
+ def FlowequationVertexEquationEnum():
+ 	"""
+ 	FLOWEQUATIONVERTEXEQUATIONENUM - Enum of FlowequationVertexEquation
+@@ -7930,5 +7944,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 565
++	return 566
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15621-15622.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15621-15622.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15621-15622.diff	(revision 16134)
@@ -0,0 +1,107 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15621)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15622)
+@@ -412,13 +412,14 @@
+ syn keyword cType BoolElementResult
+ syn keyword cType BoolInput
+ syn keyword cType BoolParam
++syn keyword cType classes
+ syn keyword cType Constraint
+ syn keyword cType Constraints
+ syn keyword cType Contour
+ syn keyword cType Contours
+ syn keyword cType ControlInput
++syn keyword cType DatasetInput
+ syn keyword cType DataSetParam
+-syn keyword cType DatasetInput
+ syn keyword cType DependentObject
+ syn keyword cType DofIndexing
+ syn keyword cType DoubleElementResult
+@@ -432,16 +433,17 @@
+ syn keyword cType ElementHook
+ syn keyword cType ElementMatrix
+ syn keyword cType ElementResult
++syn keyword cType Elements
+ syn keyword cType ElementVector
+-syn keyword cType Elements
+ syn keyword cType ExponentialVariogram
+ syn keyword cType ExternalResult
+ syn keyword cType FemModel
+ syn keyword cType FileParam
+ syn keyword cType Friction
++syn keyword cType GaussianVariogram
++syn keyword cType gaussobjects
+ syn keyword cType GaussPenta
+ syn keyword cType GaussTria
+-syn keyword cType GaussianVariogram
+ syn keyword cType GenericExternalResult
+ syn keyword cType GenericOption
+ syn keyword cType GenericParam
+@@ -456,6 +458,7 @@
+ syn keyword cType IntParam
+ syn keyword cType IntVecParam
+ syn keyword cType IoModel
++syn keyword cType krigingobjects
+ syn keyword cType Load
+ syn keyword cType Loads
+ syn keyword cType Matdamageice
+@@ -463,6 +466,7 @@
+ syn keyword cType Materials
+ syn keyword cType Matice
+ syn keyword cType Matpar
++syn keyword cType matrixobjects
+ syn keyword cType MatrixParam
+ syn keyword cType Node
+ syn keyword cType Nodes
+@@ -470,8 +474,8 @@
+ syn keyword cType Observation
+ syn keyword cType Observations
+ syn keyword cType Option
++syn keyword cType Options
+ syn keyword cType OptionUtilities
+-syn keyword cType Options
+ syn keyword cType Param
+ syn keyword cType Parameters
+ syn keyword cType Patch
+@@ -485,8 +489,8 @@
+ syn keyword cType Profiler
+ syn keyword cType Quadtree
+ syn keyword cType Results
++syn keyword cType Riftfront
+ syn keyword cType RiftStruct
+-syn keyword cType Riftfront
+ syn keyword cType Segment
+ syn keyword cType SpcDynamic
+ syn keyword cType SpcStatic
+@@ -505,10 +509,6 @@
+ syn keyword cType VectorParam
+ syn keyword cType Vertex
+ syn keyword cType Vertices
+-syn keyword cType classes
+-syn keyword cType gaussobjects
+-syn keyword cType krigingobjects
+-syn keyword cType matrixobjects
+ "ISSM's objects end
+ "ISSM's Enums begin
+ syn keyword cConstant AutodiffIsautodiffEnum
+@@ -574,8 +574,9 @@
+ syn keyword cConstant FlowequationIsL1L2Enum
+ syn keyword cConstant FlowequationIsHOEnum
+ syn keyword cConstant FlowequationIsFSEnum
++syn keyword cConstant FlowequationFeSSAEnum
++syn keyword cConstant FlowequationFeHOEnum
+ syn keyword cConstant FlowequationFeFSEnum
+-syn keyword cConstant FlowequationFeSSAEnum
+ syn keyword cConstant FlowequationVertexEquationEnum
+ syn keyword cConstant FrictionCoefficientEnum
+ syn keyword cConstant FrictionPEnum
+@@ -649,7 +650,7 @@
+ syn keyword cConstant MaskVertexonfloatingiceEnum
+ syn keyword cConstant MaskVertexongroundediceEnum
+ syn keyword cConstant MaskVertexonwaterEnum
+-syn keyword cConstant IcelevelsetEnum
++syn keyword cConstant MaskIcelevelsetEnum
+ syn keyword cConstant MaterialsBetaEnum
+ syn keyword cConstant MaterialsHeatcapacityEnum
+ syn keyword cConstant MaterialsLatentheatEnum
Index: /issm/oecreview/Archive/15392-16133/ISSM-15622-15623.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15622-15623.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15622-15623.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/enum/FlowequationFeHOEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FlowequationFeHOEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FlowequationFeHOEnum.m	(revision 15623)
+@@ -0,0 +1,11 @@
++function macro=FlowequationFeHOEnum()
++%FLOWEQUATIONFEHOENUM - Enum of FlowequationFeHO
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FlowequationFeHOEnum()
++
++macro=StringToEnum('FlowequationFeHO');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15623-15624.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15623-15624.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15623-15624.diff	(revision 16134)
@@ -0,0 +1,137 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15623)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15624)
+@@ -5,18 +5,18 @@
+ #include "../../../toolkits/toolkits.h"
+ #include "../../../classes/classes.h"
+ #include "../../../shared/shared.h"
++#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+ #include "../ModelProcessorx.h"
+ 
+ void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+ 	int        i,j;
+-	int        count;
++	int        count,temp,finiteelement;
+ 	IssmDouble g;
+ 	IssmDouble rho_ice;
+ 	IssmDouble FSreconditioning;
+-	bool       isSSA,isL1L2,isHO,isFS;
+-	int        fe_ssa,fe_ho;
++	bool       isSSA,isL1L2,isHO,isFS,iscoupling;
+ 	bool       spcpresent = false;
+ 	int        Mx,Nx;
+ 	int        My,Ny;
+@@ -49,8 +49,6 @@
+ 	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+ 	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+ 	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-	iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
+-	iomodel->Constant(&fe_ho,FlowequationFeHOEnum);
+ 
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+@@ -61,6 +59,45 @@
+ 		return;
+ 	}
+ 
++	/*Do we have coupling*/
++	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*If no coupling, call Regular IoModelToConstraintsx, else, use P1 elements only*/
++	if(!iscoupling && !isFS){
++
++		/*Get finite element type*/
++		if(isSSA){
++			iomodel->Constant(&temp,FlowequationFeSSAEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum; break;
++				case 1 : finiteelement = P2Enum; break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isL1L2){
++			finiteelement = P1Enum;
++		}
++		else if(isHO){
++			iomodel->Constant(&temp,FlowequationFeHOEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum; break;
++				case 1 : finiteelement = P2Enum; break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isFS){
++			finiteelement = P1Enum;
++		}
++		IoModelToConstraintsx(constraints,iomodel,DiagnosticSpcvxEnum,DiagnosticHorizAnalysisEnum,finiteelement,1);
++		IoModelToConstraintsx(constraints,iomodel,DiagnosticSpcvyEnum,DiagnosticHorizAnalysisEnum,finiteelement,2);
++
++		*pconstraints=constraints;
++		return;
++	}
++
+ 	/*Constraints: fetch data: */
+ 	iomodel->FetchData(&spcvx,&Mx,&Nx,DiagnosticSpcvxEnum);
+ 	iomodel->FetchData(&spcvy,&My,&Ny,DiagnosticSpcvyEnum);
+@@ -98,7 +135,7 @@
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/
+-			if (reCast<int,IssmDouble>(vertices_type[i]==SSAHOApproximationEnum)){
++			if(reCast<int,IssmDouble>(vertices_type[i]==SSAHOApproximationEnum)){
+ 				/*If grionSSA, spc HO dofs: 3 & 4*/
+ 					if (reCast<int,IssmDouble>(nodeonHO[i])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+@@ -310,46 +347,6 @@
+ 		}
+ 	}
+ 
+-	/*SPC Quadratic elements*/
+-	if((isSSA && fe_ssa==1) || (isHO && fe_ho==1)){
+-
+-		int   v1,v2;
+-		bool *my_edges = NULL;
+-
+-		if(Mx!=iomodel->numberofvertices) _error_("transient spc not supported yet");
+-		EdgesPartitioning(&my_edges,iomodel);
+-
+-		for(i=0;i<iomodel->numberofedges;i++){
+-
+-			if(my_edges[i]){
+-
+-				v1 = iomodel->edges[2*i+0]-1;
+-				v2 = iomodel->edges[2*i+1]-1;
+-
+-				if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-									1,(spcvx[v1]+spcvx[v2])/(2.),DiagnosticHorizAnalysisEnum));
+-					count++;
+-				}
+-				if(!xIsNan<IssmDouble>(spcvy[v1]) && !xIsNan<IssmDouble>(spcvy[v2])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-									2,(spcvy[v1]+spcvy[v2])/(2.),DiagnosticHorizAnalysisEnum));
+-					count++;
+-				}
+-				if (reCast<int,IssmDouble>(vertices_type[v1])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){
+-					if(!xIsNan<IssmDouble>(spcvz[v1]) && !xIsNan<IssmDouble>(spcvz[v2])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-										3,(spcvz[v1]+spcvz[v2])/(2.),DiagnosticHorizAnalysisEnum));
+-						count++;
+-					}
+-				}
+-			}
+-		}
+-
+-		/*Clean up*/
+-		xDelete<bool>(my_edges);
+-	}
+-
+ 	/*Free data: */
+ 	iomodel->DeleteData(spcvx,DiagnosticSpcvxEnum);
+ 	iomodel->DeleteData(spcvy,DiagnosticSpcvyEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15624-15625.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15624-15625.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15624-15625.diff	(revision 16134)
@@ -0,0 +1,328 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15624)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15625)
+@@ -3424,12 +3424,12 @@
+ 	/*Fetch dof list and allocate solution vectors*/
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+ 	IssmDouble* values    = xNew<IssmDouble>(numdof);
+-	IssmDouble* vx        = xNew<IssmDouble>(numdof);
+-	IssmDouble* vy        = xNew<IssmDouble>(numdof);
+-	IssmDouble* vz        = xNew<IssmDouble>(numdof);
+-	IssmDouble* vel       = xNew<IssmDouble>(numdof);
+-	IssmDouble* pressure  = xNew<IssmDouble>(numdof);
+-	IssmDouble* thickness = xNew<IssmDouble>(numdof);
++	IssmDouble* vx        = xNew<IssmDouble>(numnodes);
++	IssmDouble* vy        = xNew<IssmDouble>(numnodes);
++	IssmDouble* vz        = xNew<IssmDouble>(numnodes);
++	IssmDouble* vel       = xNew<IssmDouble>(numnodes);
++	IssmDouble* pressure  = xNew<IssmDouble>(numnodes);
++	IssmDouble* thickness = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15624)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15625)
+@@ -844,19 +844,19 @@
+ /*FUNCTION Penta::GetDofList {{{*/
+ void  Penta::GetDofList(int** pdoflist,int approximation_enum,int setenum){
+ 
+-	int  i,count=0;
+-	int  numberofdofs=0;
+-	int* doflist=NULL;
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
+-	/*First, figure out size of doflist: */
+-	for(i=0;i<6;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
++	/*First, figure out size of doflist and create it: */
++	int numberofdofs=0;
++	for(int i=0;i<numnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+ 
+-	/*Allocate: */
+-	doflist=xNew<int>(numberofdofs);
++	/*Allocate output*/
++	int* doflist=xNew<int>(numberofdofs);
+ 
+ 	/*Populate: */
+-	count=0;
+-	for(i=0;i<6;i++){
++	int count=0;
++	for(int i=0;i<numnodes;i++){
+ 		nodes[i]->GetDofList(doflist+count,approximation_enum,setenum);
+ 		count+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+ 	}
+@@ -1103,6 +1103,47 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue) {{{*/
++void Penta::GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){
++
++	_assert_(pvalue);
++
++	Input *input    = inputs->GetInput(enumtype);
++	int    numnodes = this->NumberofNodes();
++
++	/* Start looping on the number of vertices: */
++	if(input){
++		GaussPenta* gauss=new GaussPenta();
++		for(int iv=0;iv<this->NumberofNodes();iv++){
++			gauss->GaussNode(numnodes,iv);
++			input->GetInputValue(&pvalue[iv],gauss);
++		}
++		delete gauss;
++	}
++	else{
++		for(int iv=0;iv<numnodes;iv++) pvalue[iv]=defaultvalue;
++	}
++}
++/*}}}*/
++/*FUNCTION Penta::GetInputListOnNodes(IssmDouble* pvalue,int enumtype) {{{*/
++void Penta::GetInputListOnNodes(IssmDouble* pvalue,int enumtype){
++
++	_assert_(pvalue);
++
++	/*Recover input*/
++	Input* input=inputs->GetInput(enumtype);
++	if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
++	int    numnodes = this->NumberofNodes();
++
++	/* Start looping on the number of vertices: */
++	GaussPenta* gauss=new GaussPenta();
++	for (int iv=0;iv<this->NumberofNodes();iv++){
++		gauss->GaussNode(numnodes,iv);
++		input->GetInputValue(&pvalue[iv],gauss);
++	}
++	delete gauss;
++}
++/*}}}*/
+ /*FUNCTION Penta::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype) {{{*/
+ void Penta::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){
+ 
+@@ -9406,34 +9447,34 @@
+ /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHO {{{*/
+ void  Penta::InputUpdateFromSolutionDiagnosticHO(IssmDouble* solution){
+ 
+-	const int    numdof=NDOF2*NUMVERTICES;
++	int         i;
++	IssmDouble  rho_ice,g;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	int        *doflist = NULL;
+ 
+-	int    i;
+-	IssmDouble rho_ice,g;
+-	IssmDouble values[numdof];
+-	IssmDouble vx[NUMVERTICES];
+-	IssmDouble vy[NUMVERTICES];
+-	IssmDouble vz[NUMVERTICES];
+-	IssmDouble vel[NUMVERTICES];
+-	IssmDouble pressure[NUMVERTICES];
+-	IssmDouble surface[NUMVERTICES];
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	int*   doflist = NULL;
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
+ 
+-	/*Get dof list: */
++	/*Fetch dof list and allocate solution vectors*/
+ 	GetDofList(&doflist,HOApproximationEnum,GsetEnum);
++	IssmDouble* values    = xNew<IssmDouble>(numdof);
++	IssmDouble* vx        = xNew<IssmDouble>(numnodes);
++	IssmDouble* vy        = xNew<IssmDouble>(numnodes);
++	IssmDouble* vz        = xNew<IssmDouble>(numnodes);
++	IssmDouble* vel       = xNew<IssmDouble>(numnodes);
++	IssmDouble* pressure  = xNew<IssmDouble>(numnodes);
++	IssmDouble* surface   = xNew<IssmDouble>(numnodes);
+ 
+-	/*Get node data: */
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+ 	TransformSolutionCoord(&values[0],nodes,NUMVERTICES,XYEnum);
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+-	for(i=0;i<NUMVERTICES;i++){
++	for(i=0;i<numnodes;i++){
+ 		vx[i]=values[i*NDOF2+0];
+ 		vy[i]=values[i*NDOF2+1];
+ 
+@@ -9442,18 +9483,10 @@
+ 		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+ 	}
+ 
+-	/*Get Vz*/
+-	Input* vz_input=inputs->GetInput(VzEnum);
+-	if (vz_input){
+-		GetInputListOnVertices(&vz[0],VzEnum);
+-	}
+-	else{
+-		for(i=0;i<NUMVERTICES;i++) vz[i]=0.0;
+-	}
++	/*Get Vz and compute vel*/
++	GetInputListOnNodes(&vz[0],VzEnum,0.);
++	for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
+ 
+-	/*Now Compute vel*/
+-	for(i=0;i<NUMVERTICES;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
+-
+ 	/*For pressure: we have not computed pressure in this analysis, for this element. We are in 3D, 
+ 	 *so the pressure is just the pressure at the z elevation: */
+ 	rho_ice=matpar->GetRhoIce();
+@@ -9474,6 +9507,13 @@
+ 	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
++	xDelete<IssmDouble>(surface);
++	xDelete<IssmDouble>(pressure);
++	xDelete<IssmDouble>(vel);
++	xDelete<IssmDouble>(vz);
++	xDelete<IssmDouble>(vy);
++	xDelete<IssmDouble>(vx);
++	xDelete<IssmDouble>(values);
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15624)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15625)
+@@ -191,6 +191,8 @@
+ 		void           GetElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype);
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
++		void           GetInputListOnNodes(IssmDouble* pvalue,int enumtype);
++		void           GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
+ 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
+ 		void	         GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
+ 		void           GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 15624)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 15625)
+@@ -43,6 +43,7 @@
+ 		void Echo(void);
+ 		void GaussPoint(int ig);
+ 		void GaussVertex(int iv);
++		void GaussNode(int numnodes,int iv);
+ 		void GaussFaceTria(int index1, int index2, int index3, int order);
+ 		void GaussCenter(void);
+ 		void SynchronizeGaussTria(GaussTria* gauss_tria);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15624)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15625)
+@@ -365,26 +365,13 @@
+ 
+ 	/*update static arrays*/
+ 	switch(iv){
+-		case 0:
+-			coord1=1; coord2=0; coord3=0; coord4= -1;
+-			break;
+-		case 1:
+-			coord1=0; coord2=1; coord3=0; coord4= -1;
+-			break;
+-		case 2:
+-			coord1=0; coord2=0; coord3=1; coord4= -1;
+-			break;
+-		case 3:
+-			coord1=1; coord2=0; coord3=0; coord4= +1;
+-			break;
+-		case 4:
+-			coord1=0; coord2=1; coord3=0; coord4= +1;
+-			break;
+-		case 5:
+-			coord1=0; coord2=0; coord3=1; coord4= +1;
+-			break;
+-		default:
+-			_error_("vertex index should be in [0 5]");
++		case 0: coord1=1.; coord2=0.; coord3=0.; coord4= -1.; break;
++		case 1: coord1=0.; coord2=1.; coord3=0.; coord4= -1.; break;
++		case 2: coord1=0.; coord2=0.; coord3=1.; coord4= -1.; break;
++		case 3: coord1=1.; coord2=0.; coord3=0.; coord4= +1.; break;
++		case 4: coord1=0.; coord2=1.; coord3=0.; coord4= +1.; break;
++		case 5: coord1=0.; coord2=0.; coord3=1.; coord4= +1.; break;
++		default: _error_("vertex index should be in [0 5]");
+ 
+ 	}
+ 
+@@ -408,6 +395,52 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION GaussPenta::GaussNode{{{*/
++void GaussPenta::GaussNode(int numnodes,int iv){
++
++	/*in debugging mode: check that the default constructor has been called*/
++	_assert_(numgauss==-1);
++
++	/*update static arrays*/
++	switch(numnodes){
++		case 6: //P1 Lagrange element
++			switch(iv){
++				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
++				case 1: coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
++				case 2: coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
++				case 3: coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
++				case 4: coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
++				case 5: coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
++				default: _error_("node index should be in [0 5]");
++			}
++			break;
++		case 15: //P2 Lagrange element
++			switch(iv){
++				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
++				case 1: coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
++				case 2: coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
++				case 3: coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
++				case 4: coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
++				case 5: coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
++
++				case 6: coord1=1.; coord2=0.; coord3=0.; coord4=0.; break;
++				case 7: coord1=0.; coord2=1.; coord3=0.; coord4=0.; break;
++				case 8: coord1=0.; coord2=0.; coord3=1.; coord4=0.; break;
++
++				case  9: coord1=0.; coord2=.5; coord3=.5; coord4=-1.;break;
++				case 10: coord1=.5; coord2=0.; coord3=.5; coord4=-1.;break;
++				case 11: coord1=.5; coord2=.5; coord3=0.; coord4=-1.;break;
++				case 12: coord1=0.; coord2=.5; coord3=.5; coord4=+1.;break;
++				case 13: coord1=.5; coord2=0.; coord3=.5; coord4=+1.;break;
++				case 14: coord1=.5; coord2=.5; coord3=0.; coord4=+1.;break;
++				default: _error_("node index should be in [0 5]");
++			}
++			break;
++		default: _error_("supported number of nodes are 6 and 15");
++	}
++
++}
++/*}}}*/
+ /*FUNCTION GaussPenta::begin{{{*/
+ int GaussPenta::begin(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15624)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15625)
+@@ -140,7 +140,6 @@
+ 	IssmDouble B[8][27];
+ 	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
+ 	IssmDouble velocity[numnodes][DOFVELOCITY];
+-
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+ 	/*Get B matrix: */
+@@ -312,7 +311,6 @@
+ 
+ 	/*Get B matrix: */
+ 	GetBHO(&B[0][0], xyz_list, gauss);
+-
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15625-15626.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15625-15626.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15625-15626.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15625)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15626)
+@@ -16,7 +16,7 @@
+ 	IssmDouble g;
+ 	IssmDouble rho_ice;
+ 	IssmDouble FSreconditioning;
+-	bool       isSSA,isL1L2,isHO,isFS,iscoupling;
++	bool       isSIA,isSSA,isL1L2,isHO,isFS,iscoupling;
+ 	bool       spcpresent = false;
+ 	int        Mx,Nx;
+ 	int        My,Ny;
+@@ -45,6 +45,7 @@
+ 	iomodel->Constant(&g,ConstantsGEnum);
+ 	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+ 	iomodel->Constant(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+ 	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+ 	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+ 	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+@@ -60,7 +61,7 @@
+ 	}
+ 
+ 	/*Do we have coupling*/
+-	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	if((isSIA?1.:0.) + (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+ 	 iscoupling = true;
+ 	else
+ 	 iscoupling = false;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15626-15627.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15626-15627.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15626-15627.diff	(revision 16134)
@@ -0,0 +1,173 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15626)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15627)
+@@ -55,8 +55,9 @@
+ 		else if(isHO){
+ 			iomodel->Constant(&temp,FlowequationFeHOEnum);
+ 			switch(temp){
+-				case 0 : finiteelement = P1Enum; break;
+-				case 1 : finiteelement = P2Enum; break;
++				case 0 : finiteelement = P1Enum;    break;
++				case 1 : finiteelement = P2Enum;    break;
++				case 2 : finiteelement = P2xP1Enum; break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15626)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15627)
+@@ -84,8 +84,9 @@
+ 		else if(isHO){
+ 			iomodel->Constant(&temp,FlowequationFeHOEnum);
+ 			switch(temp){
+-				case 0 : finiteelement = P1Enum; break;
+-				case 1 : finiteelement = P2Enum; break;
++				case 0 : finiteelement = P1Enum;    break;
++				case 1 : finiteelement = P2Enum;    break;
++				case 2 : finiteelement = P2xP1Enum; break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15626)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15627)
+@@ -50,8 +50,9 @@
+ 			approximation = HOApproximationEnum;
+ 			iomodel->Constant(&temp,FlowequationFeHOEnum);
+ 			switch(temp){
+-				case 0 : finiteelement = P1Enum; break;
+-				case 1 : finiteelement = P2Enum; break;
++				case 0 : finiteelement = P1Enum;    break;
++				case 1 : finiteelement = P2Enum;    break;
++				case 2 : finiteelement = P2xP1Enum; break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15626)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15627)
+@@ -42,6 +42,25 @@
+ 			}
+ 			break;
+ 
++		case P2xP1Enum:
++			EdgesPartitioning(&my_edges,iomodel);
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++				}
++			}
++			int numberofvertices2d;
++			Node* node = NULL;
++			iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
++			/*Create all P2 nodes anyway*/
++			for(i=0;i<iomodel->numberofedges;i++){
++				if(my_edges[i]){
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation);
++					nodes->AddObject(node);
++				}
++			}
++			break;
++
+ 		case P2Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15626)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15627)
+@@ -1624,9 +1624,10 @@
+ int PentaRef::NumberofNodes(void){
+ 
+ 	switch(this->element_type){
+-		case P1Enum:   return NUMNODESP1;
+-		case P2Enum:   return NUMNODESP2;
+-		case MINIEnum: return NUMNODESP1b;
++		case P1Enum:    return NUMNODESP1;
++		case P2Enum:    return NUMNODESP2;
++		case P2xP1Enum: return NUMNODESP2xP1;
++		case MINIEnum:  return NUMNODESP1b;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15626)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15627)
+@@ -3177,6 +3177,22 @@
+ 			penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
+ 			penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
+ 			break;
++		case P2xP1Enum:
++			numnodes         = 12;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
++			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
++			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
++			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
++			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
++			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
++			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
++			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
++			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
++			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
++			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
++			break;
+ 		case P2Enum:
+ 			numnodes         = 15;
+ 			penta_node_ids   = xNew<int>(numnodes);
+@@ -6974,6 +6990,7 @@
+ 	xDelete<IssmDouble>(D);
+ 	xDelete<IssmDouble>(Bprime);
+ 	xDelete<IssmDouble>(B);
++	if(id==1) Ke->Echo();
+ 	return Ke;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15626)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15627)
+@@ -414,6 +414,24 @@
+ 				default: _error_("node index should be in [0 5]");
+ 			}
+ 			break;
++		case 12: //P2xP1 Lagrange element
++			switch(iv){
++				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
++				case 1: coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
++				case 2: coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
++				case 3: coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
++				case 4: coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
++				case 5: coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
++
++				case  6: coord1=0.; coord2=.5; coord3=.5; coord4=-1.;break;
++				case  7: coord1=.5; coord2=0.; coord3=.5; coord4=-1.;break;
++				case  8: coord1=.5; coord2=.5; coord3=0.; coord4=-1.;break;
++				case  9: coord1=0.; coord2=.5; coord3=.5; coord4=+1.;break;
++				case 10: coord1=.5; coord2=0.; coord3=.5; coord4=+1.;break;
++				case 11: coord1=.5; coord2=.5; coord3=0.; coord4=+1.;break;
++				default: _error_("node index should be in [0 5]");
++			}
++			break;
+ 		case 15: //P2 Lagrange element
+ 			switch(iv){
+ 				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15626)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15627)
+@@ -79,7 +79,7 @@
+ 				md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1]);
++				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1 2]);
+ 				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0]);
+ 				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15627-15628.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15627-15628.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15627-15628.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15627)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15628)
+@@ -6990,7 +6990,6 @@
+ 	xDelete<IssmDouble>(D);
+ 	xDelete<IssmDouble>(Bprime);
+ 	xDelete<IssmDouble>(B);
+-	if(id==1) Ke->Echo();
+ 	return Ke;
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15628-15629.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15628-15629.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15628-15629.diff	(revision 16134)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15628)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15629)
+@@ -12,8 +12,10 @@
+ 
+ 	/*Intermediaries*/
+ 	int   i,j;
++	int   numberofvertices2d;
+ 	bool *my_edges = NULL;
+ 	bool *my_nodes = NULL;
++	Node *node     = NULL;
+ 
+ 	/*Recover pointer: */
+ 	Nodes* nodes=*pnodes;
+@@ -49,8 +51,7 @@
+ 					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+-			int numberofvertices2d;
+-			Node* node = NULL;
++
+ 			iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
+ 			/*Create all P2 nodes anyway*/
+ 			for(i=0;i<iomodel->numberofedges;i++){
+@@ -97,6 +98,7 @@
+ 
+ 	/*Clean up*/
+ 	xDelete<bool>(my_edges);
++	xDelete<bool>(my_nodes);
+ 
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15629-15630.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15629-15630.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15629-15630.diff	(revision 16134)
@@ -0,0 +1,120 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15629)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15630)
+@@ -18,30 +18,33 @@
+ 	bool exist;
+ 	int  i,j,v1,v2,v3;
+ 	int  maxnbe,nbe,elementnbe,elementnbv;
+-	int *elementedges = NULL;
++	int *elementedges         = NULL;
++	int *elementedges_markers = NULL;
+ 
+ 	/*Mesh dependent variables*/
+ 	if(iomodel->dim==2){
+ 		elementnbv = 3;
+ 		elementnbe = 3;
+-		elementedges=xNew<int>(elementnbe*2);
+-		elementedges[2*0+0] = 1; elementedges[2*0+1] = 2;
+-		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0;
+-		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1;
++		elementedges         = xNew<int>(elementnbe*2);
++		elementedges_markers = xNew<int>(elementnbe);
++		elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;
++		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
++		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
+ 	}
+ 	else if(iomodel->dim==3){
+ 		elementnbv = 6;
+ 		elementnbe = 9;
+-		elementedges=xNew<int>(elementnbe*2);
+-		elementedges[2*0+0] = 0; elementedges[2*0+1] = 3;
+-		elementedges[2*1+0] = 1; elementedges[2*1+1] = 4;
+-		elementedges[2*2+0] = 2; elementedges[2*2+1] = 5;
+-		elementedges[2*3+0] = 1; elementedges[2*3+1] = 2;
+-		elementedges[2*4+0] = 2; elementedges[2*4+1] = 0;
+-		elementedges[2*5+0] = 0; elementedges[2*5+1] = 1;
+-		elementedges[2*6+0] = 4; elementedges[2*6+1] = 5;
+-		elementedges[2*7+0] = 5; elementedges[2*7+1] = 3;
+-		elementedges[2*8+0] = 3; elementedges[2*8+1] = 4;
++		elementedges         = xNew<int>(elementnbe*2);
++		elementedges_markers = xNew<int>(elementnbe);
++		elementedges[2*0+0] = 0; elementedges[2*0+1] = 3; elementedges_markers[0] = 2;
++		elementedges[2*1+0] = 1; elementedges[2*1+1] = 4; elementedges_markers[1] = 2;
++		elementedges[2*2+0] = 2; elementedges[2*2+1] = 5; elementedges_markers[2] = 2;
++		elementedges[2*3+0] = 1; elementedges[2*3+1] = 2; elementedges_markers[3] = 1;
++		elementedges[2*4+0] = 2; elementedges[2*4+1] = 0; elementedges_markers[4] = 1;
++		elementedges[2*5+0] = 0; elementedges[2*5+1] = 1; elementedges_markers[5] = 1;
++		elementedges[2*6+0] = 4; elementedges[2*6+1] = 5; elementedges_markers[6] = 3;
++		elementedges[2*7+0] = 5; elementedges[2*7+1] = 3; elementedges_markers[7] = 3;
++		elementedges[2*8+0] = 3; elementedges[2*8+1] = 4; elementedges_markers[8] = 3;
+ 	}
+ 	else{
+ 		_error_("mesh dimension not supported yet");
+@@ -51,7 +54,7 @@
+ 	maxnbe = elementnbe*iomodel->numberofelements;
+ 
+ 	/*Initialize intermediaries*/
+-	int *edgestemp                 = xNew<int>(maxnbe*2);                             /*format: [vertex1 vertex2]       */
++	int *edgestemp                 = xNew<int>(maxnbe*3);                             /*format: [vertex1 vertex2 marker]       */
+ 	int *element_edge_connectivity = xNew<int>(iomodel->numberofelements*elementnbe); /*format: [edge1 edge2 ... edgen] */
+ 
+ 	/*Initialize chain*/
+@@ -79,7 +82,7 @@
+ 
+ 			/*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/
+ 			for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
+-				if(edgestemp[e*2+1]==v2+1){
++				if(edgestemp[e*3+1]==v2+1){
+ 					exist = true;
+ 					element_edge_connectivity[i*elementnbe+j]=e;
+ 					break;
+@@ -91,8 +94,9 @@
+ 				_assert_(nbe<maxnbe);
+ 
+ 				/*Update edges*/
+-				edgestemp[nbe*2+0] = v1+1;
+-				edgestemp[nbe*2+1] = v2+1;
++				edgestemp[nbe*3+0] = v1+1;
++				edgestemp[nbe*3+1] = v2+1;
++				edgestemp[nbe*3+2] = elementedges_markers[j];
+ 
+ 				/*Update Connectivity*/
+ 				element_edge_connectivity[i*elementnbe+j]=nbe;
+@@ -112,8 +116,8 @@
+ 	xDelete<int>(next_edge);
+ 
+ 	/*Create final edges*/
+-	int* edges = xNew<int>(nbe*2); /*vertex1 vertex2*/
+-	for(int i=0;i<2*nbe;i++) edges[i] = edgestemp[i];
++	int* edges = xNew<int>(nbe*2); /*format: [vertex1 vertex2 marker]*/
++	for(int i=0;i<3*nbe;i++) edges[i] = edgestemp[i];
+ 
+ 	/*Clean up*/
+ 	xDelete<int>(edgestemp);
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15629)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15630)
+@@ -56,8 +56,8 @@
+ 		if(finite_element==P2Enum){
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
+-					v1 = iomodel->edges[2*i+0]-1;
+-					v2 = iomodel->edges[2*i+1]-1;
++					v1 = iomodel->edges[3*i+0]-1;
++					v2 = iomodel->edges[3*i+1]-1;
+ 					if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+ 										dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
+@@ -98,8 +98,8 @@
+ 		if(finite_element==P2Enum){
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
+-					v1 = iomodel->edges[2*i+0]-1;
+-					v2 = iomodel->edges[2*i+1]-1;
++					v1 = iomodel->edges[3*i+0]-1;
++					v2 = iomodel->edges[3*i+1]-1;
+ 					values=xNew<IssmDouble>(N);
+ 					spcpresent=false;
+ 					for(j=0;j<N;j++){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15630-15631.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15630-15631.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15630-15631.diff	(revision 16134)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15630)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15631)
+@@ -11,7 +11,7 @@
+ void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation){
+ 
+ 	/*Intermediaries*/
+-	int   i,j;
++	int   i,j,counter;
+ 	int   numberofvertices2d;
+ 	bool *my_edges = NULL;
+ 	bool *my_nodes = NULL;
+@@ -53,11 +53,14 @@
+ 			}
+ 
+ 			iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
+-			/*Create all P2 nodes anyway*/
++			counter = i;
+ 			for(i=0;i<iomodel->numberofedges;i++){
+-				if(my_edges[i]){
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation);
+-					nodes->AddObject(node);
++				if(iomodel->edges[i*3+2]!=2){
++					if(my_edges[i]){
++						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,0,iomodel,analysis,approximation);
++						nodes->AddObject(node);
++					}
++					counter++;
+ 				}
+ 			}
+ 			break;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15631-15632.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15631-15632.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15631-15632.diff	(revision 16134)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/externalpackages/matlab/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/matlab/install.sh	(revision 15631)
++++ ../trunk-jpl/externalpackages/matlab/install.sh	(revision 15632)
+@@ -1,3 +1,35 @@
+ #!/bin/bash
+-rm -rf install
+-ln -s /usr/local/matlab80/ install
++set -eu
++
++if [ ! -h install ];
++then
++	echo "  ****************************************************************"
++	echo "  *                                                              *"
++	echo "  * you need create a symbolic link from matlab's root directory *"
++	echo "  *                                                              *"
++	echo "  * First, you need to locate matlab's root directory            *"
++	echo "  * The easiest way to find it is to launch matlab and run the   *"
++	echo "  * following command: matlabroot                                *"
++	echo "  * Then, create a symbolic link using the command 'ln -s ' the  *"
++	echo "  * target directory should be named 'install'                   *"
++	echo "  *                                                              *"
++	echo "  * Examples:                                                    *"
++	echo "  *    ln -s /usr/local/matlab712/ install                       *"
++	echo "  *    ln -s /Applications/MATLAB_R2012a.app/ install            *"
++	echo "  *                                                              *"
++	echo "  * run ./install.sh again to check that the link is correct     *"
++	echo "  *                                                              *"
++	echo "  ****************************************************************"
++else
++
++	#Read link
++	DIR=$(readlink install)
++	if [ -d $DIR ]
++	then
++		echo "Symbolic link correctly set"
++	else
++		rm -rf install
++		echo "Incorrect symbolic link:"
++		echo "provided target ($DIR) does not exist or is not a directory"
++	fi
++fi
Index: /issm/oecreview/Archive/15392-16133/ISSM-15632-15633.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15632-15633.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15632-15633.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15632)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15633)
+@@ -116,7 +116,7 @@
+ 	xDelete<int>(next_edge);
+ 
+ 	/*Create final edges*/
+-	int* edges = xNew<int>(nbe*2); /*format: [vertex1 vertex2 marker]*/
++	int* edges = xNew<int>(nbe*3); /*format: [vertex1 vertex2 marker]*/
+ 	for(int i=0;i<3*nbe;i++) edges[i] = edgestemp[i];
+ 
+ 	/*Clean up*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15633-15634.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15633-15634.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15633-15634.diff	(revision 16134)
@@ -0,0 +1,144 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 15633)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 15634)
+@@ -23,7 +23,7 @@
+ 	loads=*ploads;
+ 	constraints=*pconstraints;
+ 
+-	if(nodes) iomodel->nodecounter=nodes->NumberOfNodes();
++	if(nodes) iomodel->nodecounter=nodes->MaximumId();
+ 	else iomodel->nodecounter=0;
+ 
+ 	if(loads)iomodel->loadcounter=loads->NumberOfLoads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15633)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15634)
+@@ -12,7 +12,6 @@
+ 
+ 	/*Intermediaries*/
+ 	int   i,j,counter;
+-	int   numberofvertices2d;
+ 	bool *my_edges = NULL;
+ 	bool *my_nodes = NULL;
+ 	Node *node     = NULL;
+@@ -52,8 +51,7 @@
+ 				}
+ 			}
+ 
+-			iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
+-			counter = i;
++			counter = iomodel->numberofvertices;
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(iomodel->edges[i*3+2]!=2){
+ 					if(my_edges[i]){
+Index: ../trunk-jpl/src/c/classes/Nodes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodes.h	(revision 15633)
++++ ../trunk-jpl/src/c/classes/Nodes.h	(revision 15634)
+@@ -27,6 +27,7 @@
+ 		void  DistributeDofs(int analysis_type,int SETENUM);
+ 		void  FlagClones(int analysis_type);
+ 		int   MaxNumDofs(int analysis_type,int setenum);
++		int   MaximumId(void);
+ 		int   NumberOfDofs(int analysis_type,int setenum);
+ 		int   NumberOfDofsLocal(int analysis_type,int setenum);
+ 		int   NumberOfNodes(int analysis_type);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15633)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15634)
+@@ -356,7 +356,7 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-		/*FUNCTION Penta::Configure {{{*/
++/*FUNCTION Penta::Configure {{{*/
+ void  Penta::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin){
+ 
+ 	int analysis_counter;
+Index: ../trunk-jpl/src/c/classes/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15633)
++++ ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15634)
+@@ -174,13 +174,11 @@
+ /*FUNCTION Nodes::MaxNumDofs{{{*/
+ int   Nodes::MaxNumDofs(int analysis_type,int setenum){
+ 
+-	int i;
+ 	int max=0;
+-	int allmax;
+-	int numdofs=0;
++	int allmax,numdofs;
+ 
+ 	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+-	for(i=0;i<this->Size();i++){
++	for(int i=0;i<this->Size();i++){
+ 
+ 		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+@@ -201,6 +199,34 @@
+ 	return max;
+ }
+ /*}}}*/
++/*FUNCTION Nodes::MaximymId{{{*/
++int Nodes::MaximumId(){
++
++	int max=-1;
++	int id,allmax;
++
++	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
++	if(!sorted){
++		for(int i=0;i<this->Size();i++){
++			Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
++			id=node->Id();
++			if(id>max)max=id;
++		}
++	}
++	else{
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(this->Size()-1));
++		max = node->Id();
++	}
++
++	/*Grab max of all cpus: */
++#ifdef _HAVE_MPI_
++	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	max=allmax;
++#endif
++
++	return max;
++}
++/*}}}*/
+ /*FUNCTION Nodes::NumberOfDofs{{{*/
+ int   Nodes::NumberOfDofs(int analysis_type,int setenum){
+ 
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15633)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15634)
+@@ -1146,13 +1146,12 @@
+ /*}}}*/
+ void TransformStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int* cs_array){/*{{{*/
+ 
+-	int     i,j;
+-	int     numdofs   = 0;
++	int         numdofs = 0;
+ 	IssmDouble *transform = NULL;
+ 	IssmDouble *values    = NULL;
+ 
+ 	/*Get total number of dofs*/
+-	for(i=0;i<numnodes;i++){
++	for(int i=0;i<numnodes;i++){
+ 		switch(cs_array[i]){
+ 			case XYEnum:   numdofs+=2; break;
+ 			case XYZPEnum: numdofs+=4; break;
+@@ -1162,7 +1161,7 @@
+ 
+ 	/*Copy current stiffness matrix*/
+ 	values=xNew<IssmDouble>(Ke->nrows*Ke->ncols);
+-	for(i=0;i<Ke->nrows;i++) for(j=0;j<Ke->ncols;j++) values[i*Ke->ncols+j]=Ke->values[i*Ke->ncols+j];
++	for(int i=0;i<Ke->nrows*Ke->ncols;i++) values[i]=Ke->values[i];
+ 
+ 	/*Get Coordinate Systems transform matrix*/
+ 	CoordinateSystemTransform(&transform,nodes,numnodes,cs_array);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15634-15635.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15634-15635.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15634-15635.diff	(revision 16134)
@@ -0,0 +1,249 @@
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15634)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15635)
+@@ -37,83 +37,190 @@
+ 	/*Fetch vector:*/
+ 	iomodel->FetchData(&spcdata,&M,&N,vector_enum);
+ 
+-	/*Partition edges if we are using P2 finite elements*/
+-	if(finite_element==P2Enum){
+-		EdgesPartitioning(&my_edges,iomodel);
++	switch(finite_element){
++		case P1Enum:
++			/*Nothing else to do*/
++			break;
++		case P2Enum:
++			EdgesPartitioning(&my_edges,iomodel);
++			break;
++		case P2xP1Enum:
++			EdgesPartitioning(&my_edges,iomodel);
++			break;
++		default:
++			_error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet");
+ 	}
+ 
++	count=0;
+ 	if(M==iomodel->numberofvertices){
+-		/*Static constraint*/
+-		count=0;
+-		for (i=0;i<iomodel->numberofvertices;i++){
+-			if((iomodel->my_vertices[i])){
+-				if (!xIsNan<IssmDouble>(spcdata[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
+-					count++;
++		switch(finite_element){
++			case P1Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++						if (!xIsNan<IssmDouble>(spcdata[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
++							count++;
++						}
++					}
+ 				}
+-			}
+-		}
+-		if(finite_element==P2Enum){
+-			for(i=0;i<iomodel->numberofedges;i++){
+-				if(my_edges[i]){
+-					v1 = iomodel->edges[3*i+0]-1;
+-					v2 = iomodel->edges[3*i+1]-1;
+-					if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
+-										dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
+-						count++;
++				break;
++			case P2Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++						if (!xIsNan<IssmDouble>(spcdata[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
++							count++;
++						}
+ 					}
+ 				}
+-			}
++				for(i=0;i<iomodel->numberofedges;i++){
++					if(my_edges[i]){
++						v1 = iomodel->edges[3*i+0]-1;
++						v2 = iomodel->edges[3*i+1]-1;
++						if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++											dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
++							count++;
++						}
++					}
++				}
++				break;
++			case P2xP1Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++						if (!xIsNan<IssmDouble>(spcdata[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
++							count++;
++						}
++					}
++				}
++				for(i=0;i<iomodel->numberofedges;i++){
++					if(iomodel->edges[i*3+2]!=2){
++						if(my_edges[i]){
++							v1 = iomodel->edges[3*i+0]-1;
++							v2 = iomodel->edges[3*i+1]-1;
++							if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
++								constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++												dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
++								count++;
++							}
++						}
++					}
++				}
++				break;
++			default:
++				_error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet");
+ 		}
+ 	}
+ 	else if (M==(iomodel->numberofvertices+1)){
+ 		/*transient: create transient SpcTransient objects. Same logic, except we need to retrieve 
+ 		 * various times and values to initialize an SpcTransient object: */
+-		count=0;
+ 
+ 		/*figure out times: */
+ 		times=xNew<IssmDouble>(N);
+ 		for(j=0;j<N;j++) times[j]=spcdata[(M-1)*N+j]*yts;
+ 
+-		/*Create constraints: */
+-		for (i=0;i<iomodel->numberofvertices;i++){
+-			if((iomodel->my_vertices[i])){
++		switch(finite_element){
++			case P1Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
+ 
+-				/*figure out times and values: */
+-				values=xNew<IssmDouble>(N);
+-				spcpresent=false;
+-				for(j=0;j<N;j++){
+-					values[j]=spcdata[i*N+j];
+-					if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++						/*figure out times and values: */
++						values=xNew<IssmDouble>(N);
++						spcpresent=false;
++						for(j=0;j<N;j++){
++							values[j]=spcdata[i*N+j];
++							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++						}
++
++						if(spcpresent){
++							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
++							count++;
++						}
++						xDelete<IssmDouble>(values);
++					}
+ 				}
++				break;
++			case P2Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
+ 
+-				if(spcpresent){
+-					constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
+-					count++;
++						/*figure out times and values: */
++						values=xNew<IssmDouble>(N);
++						spcpresent=false;
++						for(j=0;j<N;j++){
++							values[j]=spcdata[i*N+j];
++							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++						}
++
++						if(spcpresent){
++							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
++							count++;
++						}
++						xDelete<IssmDouble>(values);
++					}
+ 				}
+-				xDelete<IssmDouble>(values);
+-			}
+-		}
+-		if(finite_element==P2Enum){
+-			for(i=0;i<iomodel->numberofedges;i++){
+-				if(my_edges[i]){
+-					v1 = iomodel->edges[3*i+0]-1;
+-					v2 = iomodel->edges[3*i+1]-1;
+-					values=xNew<IssmDouble>(N);
+-					spcpresent=false;
+-					for(j=0;j<N;j++){
+-						values[j]=(spcdata[v1*N+j]+spcdata[v2*N+j])/2.;
+-						if(!xIsNan<IssmDouble>(values[j])) spcpresent=true; //NaN means no spc by default
++				for(i=0;i<iomodel->numberofedges;i++){
++					if(my_edges[i]){
++						v1 = iomodel->edges[3*i+0]-1;
++						v2 = iomodel->edges[3*i+1]-1;
++						values=xNew<IssmDouble>(N);
++						spcpresent=false;
++						for(j=0;j<N;j++){
++							values[j]=(spcdata[v1*N+j]+spcdata[v2*N+j])/2.;
++							if(!xIsNan<IssmDouble>(values[j])) spcpresent=true; //NaN means no spc by default
++						}
++						if(spcpresent){
++							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
++											N,times,values,analysis_type));
++							count++;
++						}
++						xDelete<IssmDouble>(values);
+ 					}
+-					if(spcpresent){
+-						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
+-										N,times,values,analysis_type));
+-						count++;
++				}
++				break;
++			case P2xP1Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++
++						/*figure out times and values: */
++						values=xNew<IssmDouble>(N);
++						spcpresent=false;
++						for(j=0;j<N;j++){
++							values[j]=spcdata[i*N+j];
++							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++						}
++
++						if(spcpresent){
++							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
++							count++;
++						}
++						xDelete<IssmDouble>(values);
+ 					}
+-					xDelete<IssmDouble>(values);
+ 				}
+-			}
++				for(i=0;i<iomodel->numberofedges;i++){
++					if(iomodel->edges[i*3+2]!=2){
++						if(my_edges[i]){
++							v1 = iomodel->edges[3*i+0]-1;
++							v2 = iomodel->edges[3*i+1]-1;
++							values=xNew<IssmDouble>(N);
++							spcpresent=false;
++							for(j=0;j<N;j++){
++								values[j]=(spcdata[v1*N+j]+spcdata[v2*N+j])/2.;
++								if(!xIsNan<IssmDouble>(values[j])) spcpresent=true; //NaN means no spc by default
++							}
++							if(spcpresent){
++								constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
++												N,times,values,analysis_type));
++								count++;
++							}
++							xDelete<IssmDouble>(values);
++						}
++					}
++				}
++				break;
++			default:
++				_error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet");
+ 		}
+ 	}
+ 	else{
Index: /issm/oecreview/Archive/15392-16133/ISSM-15635-15636.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15635-15636.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15635-15636.diff	(revision 16134)
@@ -0,0 +1,444 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15635)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15636)
+@@ -502,6 +502,7 @@
+ 	P1bubbleEnum,
+ 	P2Enum,
+ 	P2xP1Enum,
++	P1xP2Enum,
+ 	MINIEnum,
+ 	MINIcondensedEnum,
+ 	TaylorHoodEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15636)
+@@ -494,6 +494,7 @@
+ 		case P1bubbleEnum : return "P1bubble";
+ 		case P2Enum : return "P2";
+ 		case P2xP1Enum : return "P2xP1";
++		case P1xP2Enum : return "P1xP2";
+ 		case MINIEnum : return "MINI";
+ 		case MINIcondensedEnum : return "MINIcondensed";
+ 		case TaylorHoodEnum : return "TaylorHood";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15636)
+@@ -503,12 +503,13 @@
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
++	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+-	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
++	      if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
++	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15636)
+@@ -58,6 +58,7 @@
+ 				case 0 : finiteelement = P1Enum;    break;
+ 				case 1 : finiteelement = P2Enum;    break;
+ 				case 2 : finiteelement = P2xP1Enum; break;
++				case 3 : finiteelement = P1xP2Enum; break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15636)
+@@ -87,6 +87,7 @@
+ 				case 0 : finiteelement = P1Enum;    break;
+ 				case 1 : finiteelement = P2Enum;    break;
+ 				case 2 : finiteelement = P2xP1Enum; break;
++				case 3 : finiteelement = P1xP2Enum; break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15636)
+@@ -53,6 +53,7 @@
+ 				case 0 : finiteelement = P1Enum;    break;
+ 				case 1 : finiteelement = P2Enum;    break;
+ 				case 2 : finiteelement = P2xP1Enum; break;
++				case 3 : finiteelement = P1xP2Enum; break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15636)
+@@ -43,6 +43,25 @@
+ 			}
+ 			break;
+ 
++		case P1xP2Enum:
++			EdgesPartitioning(&my_edges,iomodel);
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++				}
++			}
++
++			counter = iomodel->numberofvertices;
++			for(i=0;i<iomodel->numberofedges;i++){
++				if(iomodel->edges[i*3+2]==2){
++					if(my_edges[i]){
++						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,0,iomodel,analysis,approximation);
++						nodes->AddObject(node);
++					}
++					counter++;
++				}
++			}
++			break;
+ 		case P2xP1Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15636)
+@@ -41,12 +41,15 @@
+ 		case P1Enum:
+ 			/*Nothing else to do*/
+ 			break;
+-		case P2Enum:
++		case P1xP2Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			break;
+ 		case P2xP1Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			break;
++		case P2Enum:
++			EdgesPartitioning(&my_edges,iomodel);
++			break;
+ 		default:
+ 			_error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet");
+ 	}
+@@ -85,6 +88,29 @@
+ 					}
+ 				}
+ 				break;
++			case P1xP2Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++						if (!xIsNan<IssmDouble>(spcdata[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
++							count++;
++						}
++					}
++				}
++				for(i=0;i<iomodel->numberofedges;i++){
++					if(iomodel->edges[i*3+2]==2){
++						if(my_edges[i]){
++							v1 = iomodel->edges[3*i+0]-1;
++							v2 = iomodel->edges[3*i+1]-1;
++							if(!xIsNan<IssmDouble>(spcdata[v1]) && !xIsNan<IssmDouble>(spcdata[v2])){
++								constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++												dof,(spcdata[v1]+spcdata[v2])/2.,analysis_type));
++								count++;
++							}
++						}
++					}
++				}
++				break;
+ 			case P2xP1Enum:
+ 				for(i=0;i<iomodel->numberofvertices;i++){
+ 					if((iomodel->my_vertices[i])){
+@@ -179,6 +205,46 @@
+ 					}
+ 				}
+ 				break;
++			case P1xP2Enum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++
++						/*figure out times and values: */
++						values=xNew<IssmDouble>(N);
++						spcpresent=false;
++						for(j=0;j<N;j++){
++							values[j]=spcdata[i*N+j];
++							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++						}
++
++						if(spcpresent){
++							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,N,times,values,analysis_type));
++							count++;
++						}
++						xDelete<IssmDouble>(values);
++					}
++				}
++				for(i=0;i<iomodel->numberofedges;i++){
++					if(iomodel->edges[i*3+2]==2){
++						if(my_edges[i]){
++							v1 = iomodel->edges[3*i+0]-1;
++							v2 = iomodel->edges[3*i+1]-1;
++							values=xNew<IssmDouble>(N);
++							spcpresent=false;
++							for(j=0;j<N;j++){
++								values[j]=(spcdata[v1*N+j]+spcdata[v2*N+j])/2.;
++								if(!xIsNan<IssmDouble>(values[j])) spcpresent=true; //NaN means no spc by default
++							}
++							if(spcpresent){
++								constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,dof,
++												N,times,values,analysis_type));
++								count++;
++							}
++							xDelete<IssmDouble>(values);
++						}
++					}
++				}
++				break;
+ 			case P2xP1Enum:
+ 				for(i=0;i<iomodel->numberofvertices;i++){
+ 					if((iomodel->my_vertices[i])){
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15636)
+@@ -18,6 +18,7 @@
+ #define NUMNODESP1    6
+ #define NUMNODESP1_2d 3
+ #define NUMNODESP1b   7
++#define NUMNODESP1xP2 9
+ #define NUMNODESP2xP1 12
+ #define NUMNODESP2    15
+ 
+@@ -1129,6 +1130,19 @@
+ 			basis[10]=4.*gauss->coord3*gauss->coord1*(1.+gauss->coord4)/2.;
+ 			basis[11]=4.*gauss->coord1*gauss->coord2*(1.+gauss->coord4)/2.;
+ 			return;
++		case P1xP2Enum:
++			/*Corner nodes*/
++			basis[ 0]=gauss->coord1*gauss->coord4*(gauss->coord4-1.)/2.;
++			basis[ 1]=gauss->coord2*gauss->coord4*(gauss->coord4-1.)/2.;
++			basis[ 2]=gauss->coord3*gauss->coord4*(gauss->coord4-1.)/2.;
++			basis[ 3]=gauss->coord1*gauss->coord4*(gauss->coord4+1.)/2.;
++			basis[ 4]=gauss->coord2*gauss->coord4*(gauss->coord4+1.)/2.;
++			basis[ 5]=gauss->coord3*gauss->coord4*(gauss->coord4+1.)/2.;
++			/*mid-sides of quads*/
++			basis[ 6]=gauss->coord1*(1.-gauss->coord4*gauss->coord4);
++			basis[ 7]=gauss->coord2*(1.-gauss->coord4*gauss->coord4);
++			basis[ 8]=gauss->coord3*(1.-gauss->coord4*gauss->coord4);
++			return;
+ 		case P2Enum:
+ 			/*Corner nodes*/
+ 			basis[ 0]=gauss->coord1*(2.*gauss->coord1-1.)*gauss->coord4*(gauss->coord4-1.)/2.;
+@@ -1308,6 +1322,45 @@
+ 			dbasis[NUMNODESP2xP1*1+11] = .5*(1.+zeta)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
+ 			dbasis[NUMNODESP2xP1*2+11] = 2.*gauss->coord1*gauss->coord2;
+ 			return;
++		case P1xP2Enum:
++			/*Nodal function 1*/
++			dbasis[NUMNODESP1xP2*0+0]   = zeta*(zeta-1.)/4.;
++			dbasis[NUMNODESP1xP2*1+0]   = SQRT3/12.*zeta*(zeta-1.);
++			dbasis[NUMNODESP1xP2*2+0]   = .5*(1.-2.*zeta)*gauss->coord1;
++			/*Nodal function 2*/
++			dbasis[NUMNODESP1xP2*0+1]   = zeta*(1.-zeta)/4.;
++			dbasis[NUMNODESP1xP2*1+1]   = SQRT3/12.*zeta*(zeta-1);
++			dbasis[NUMNODESP1xP2*2+1]   = .5*(1.-2.*zeta)*gauss->coord2;
++			/*Nodal function 3*/
++			dbasis[NUMNODESP1xP2*0+2]   = 0.;
++			dbasis[NUMNODESP1xP2*1+2]   = SQRT3/6.*zeta*(1.-zeta);
++			dbasis[NUMNODESP1xP2*2+2]   = .5*(1.-2.*zeta)*gauss->coord3;
++			/*Nodal function 4*/
++			dbasis[NUMNODESP1xP2*0+3]   = -zeta*(1.+zeta)/4.;
++			dbasis[NUMNODESP1xP2*1+3]   = -SQRT3/12.*(1.+zeta);
++			dbasis[NUMNODESP1xP2*2+3]   = .5*(1.+2.*zeta)*gauss->coord1;
++			/*Nodal function 5*/
++			dbasis[NUMNODESP1xP2*0+4]   = zeta*(1.+zeta)/4.;
++			dbasis[NUMNODESP1xP2*1+4]   = -SQRT3/12.*zeta*(1.+zeta);
++			dbasis[NUMNODESP1xP2*2+4]   = .5*(1.+2.*zeta)*gauss->coord2;
++			/*Nodal function 6*/
++			dbasis[NUMNODESP1xP2*0+5]   = 0.;
++			dbasis[NUMNODESP1xP2*1+5]   = SQRT3/6.*zeta*(1.+zeta);
++			dbasis[NUMNODESP1xP2*2+5]   = .5*(1.+2.*zeta)*gauss->coord3;
++
++			/*Nodal function 7*/
++			dbasis[NUMNODESP1xP2*0+6 ] = -0.5*(1.-zeta*zeta);
++			dbasis[NUMNODESP1xP2*1+6 ] = -SQRT3/6.*(1.-zeta*zeta);
++			dbasis[NUMNODESP1xP2*2+6 ] = -2.*zeta*gauss->coord1;
++			/*Nodal function 8*/
++			dbasis[NUMNODESP1xP2*0+7 ] = 0.5*(1.-zeta*zeta);
++			dbasis[NUMNODESP1xP2*1+7 ] = -SQRT3/6.*(1.-zeta*zeta);
++			dbasis[NUMNODESP1xP2*2+7 ] = -2.*zeta*gauss->coord2;
++			/*Nodal function 9*/
++			dbasis[NUMNODESP1xP2*0+8 ] = 0.;
++			dbasis[NUMNODESP1xP2*1+8 ] = SQRT3/3.*(1.-zeta*zeta);
++			dbasis[NUMNODESP1xP2*2+8 ] = -2.*zeta*gauss->coord3;
++			return;
+ 		case P2Enum:
+ 			/*Nodal function 1*/
+ 			dbasis[NUMNODESP2*0+0 ] = .5*zeta*(1.-zeta)*(-2.*gauss->coord1 + 0.5);
+@@ -1627,6 +1680,7 @@
+ 		case P1Enum:    return NUMNODESP1;
+ 		case P2Enum:    return NUMNODESP2;
+ 		case P2xP1Enum: return NUMNODESP2xP1;
++		case P1xP2Enum: return NUMNODESP1xP2;
+ 		case MINIEnum:  return NUMNODESP1b;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15636)
+@@ -3177,6 +3177,19 @@
+ 			penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
+ 			penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
+ 			break;
++		case P1xP2Enum:
++			numnodes         = 9;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
++			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
++			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
++			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
++			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
++			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
++			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
++			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
++			break;
+ 		case P2xP1Enum:
+ 			numnodes         = 12;
+ 			penta_node_ids   = xNew<int>(numnodes);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15635)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15636)
+@@ -414,6 +414,21 @@
+ 				default: _error_("node index should be in [0 5]");
+ 			}
+ 			break;
++		case 9: //P1xP2 Lagrange element
++			switch(iv){
++				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
++				case 1: coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
++				case 2: coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
++				case 3: coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
++				case 4: coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
++				case 5: coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
++
++				case 6: coord1=1.; coord2=0.; coord3=0.; coord4=0.; break;
++				case 7: coord1=0.; coord2=1.; coord3=0.; coord4=0.; break;
++				case 8: coord1=0.; coord2=0.; coord3=1.; coord4=0.; break;
++				default: _error_("node index should be in [0 5]");
++			}
++			break;
+ 		case 12: //P2xP1 Lagrange element
+ 			switch(iv){
+ 				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15635)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15636)
+@@ -61,7 +61,7 @@
+ 			md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0,1])
+-			md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0,1])
++			md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',numpy.arange(0,3+1))
+ 			md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0])
+ 			md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15635)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15636)
+@@ -79,7 +79,7 @@
+ 				md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1 2]);
++				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0:3]);
+ 				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0]);
+ 				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+Index: ../trunk-jpl/src/m/enum/IcelevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/IcelevelsetEnum.m	(revision 15635)
++++ ../trunk-jpl/src/m/enum/IcelevelsetEnum.m	(revision 15636)
+@@ -1,11 +0,0 @@
+-function macro=IcelevelsetEnum()
+-%ICELEVELSETENUM - Enum of Icelevelset
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=IcelevelsetEnum()
+-
+-macro=StringToEnum('Icelevelset');
+Index: ../trunk-jpl/src/m/enum/P1xP2Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/P1xP2Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/P1xP2Enum.m	(revision 15636)
+@@ -0,0 +1,11 @@
++function macro=P1xP2Enum()
++%P1XP2ENUM - Enum of P1xP2
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=P1xP2Enum()
++
++macro=StringToEnum('P1xP2');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15635)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15636)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=566;
++macro=567;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15635)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15636)
+@@ -6700,6 +6700,20 @@
+ 
+ 	return StringToEnum('P2xP1')[0]
+ 
++def P1xP2Enum():
++	"""
++	P1XP2ENUM - Enum of P1xP2
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=P1xP2Enum()
++	"""
++
++	return StringToEnum('P1xP2')[0]
++
+ def MINIEnum():
+ 	"""
+ 	MINIENUM - Enum of MINI
+@@ -7944,5 +7958,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 566
++	return 567
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15636-15637.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15636-15637.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15636-15637.diff	(revision 16134)
@@ -0,0 +1,176 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15636)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15637)
+@@ -1095,73 +1095,76 @@
+ 
+ 	_assert_(basis);
+ 
++	/*Get current coordinates in reference element*/
++	IssmDouble zeta=gauss->coord4;
++
+ 	switch(this->element_type){
+ 		case P1Enum:
+ 		case P1DGEnum:
+-			basis[0]=gauss->coord1*(1.-gauss->coord4)/2.;
+-			basis[1]=gauss->coord2*(1.-gauss->coord4)/2.;
+-			basis[2]=gauss->coord3*(1.-gauss->coord4)/2.;
+-			basis[3]=gauss->coord1*(1.+gauss->coord4)/2.;
+-			basis[4]=gauss->coord2*(1.+gauss->coord4)/2.;
+-			basis[5]=gauss->coord3*(1.+gauss->coord4)/2.;
++			basis[0]=gauss->coord1*(1.-zeta)/2.;
++			basis[1]=gauss->coord2*(1.-zeta)/2.;
++			basis[2]=gauss->coord3*(1.-zeta)/2.;
++			basis[3]=gauss->coord1*(1.+zeta)/2.;
++			basis[4]=gauss->coord2*(1.+zeta)/2.;
++			basis[5]=gauss->coord3*(1.+zeta)/2.;
+ 			return;
+ 		case P1bubbleEnum:
+-			basis[0]=gauss->coord1*(1.-gauss->coord4)/2.;
+-			basis[1]=gauss->coord2*(1.-gauss->coord4)/2.;
+-			basis[2]=gauss->coord3*(1.-gauss->coord4)/2.;
+-			basis[3]=gauss->coord1*(1.+gauss->coord4)/2.;
+-			basis[4]=gauss->coord2*(1.+gauss->coord4)/2.;
+-			basis[5]=gauss->coord3*(1.+gauss->coord4)/2.;
+-			basis[6]=27.*gauss->coord1*gauss->coord2*gauss->coord3*(1.+gauss->coord4)*(1.-gauss->coord4);
++			basis[0]=gauss->coord1*(1.-zeta)/2.;
++			basis[1]=gauss->coord2*(1.-zeta)/2.;
++			basis[2]=gauss->coord3*(1.-zeta)/2.;
++			basis[3]=gauss->coord1*(1.+zeta)/2.;
++			basis[4]=gauss->coord2*(1.+zeta)/2.;
++			basis[5]=gauss->coord3*(1.+zeta)/2.;
++			basis[6]=27.*gauss->coord1*gauss->coord2*gauss->coord3*(1.+zeta)*(1.-zeta);
+ 			return;
+ 		case P2xP1Enum:
+ 			/*Corner nodes*/
+-			basis[ 0]=gauss->coord1*(2.*gauss->coord1-1.)*(1.-gauss->coord4)/2.;
+-			basis[ 1]=gauss->coord2*(2.*gauss->coord2-1.)*(1.-gauss->coord4)/2.;
+-			basis[ 2]=gauss->coord3*(2.*gauss->coord3-1.)*(1.-gauss->coord4)/2.;
+-			basis[ 3]=gauss->coord1*(2.*gauss->coord1-1.)*(1.+gauss->coord4)/2.;
+-			basis[ 4]=gauss->coord2*(2.*gauss->coord2-1.)*(1.+gauss->coord4)/2.;
+-			basis[ 5]=gauss->coord3*(2.*gauss->coord3-1.)*(1.+gauss->coord4)/2.;
++			basis[ 0]=gauss->coord1*(2.*gauss->coord1-1.)*(1.-zeta)/2.;
++			basis[ 1]=gauss->coord2*(2.*gauss->coord2-1.)*(1.-zeta)/2.;
++			basis[ 2]=gauss->coord3*(2.*gauss->coord3-1.)*(1.-zeta)/2.;
++			basis[ 3]=gauss->coord1*(2.*gauss->coord1-1.)*(1.+zeta)/2.;
++			basis[ 4]=gauss->coord2*(2.*gauss->coord2-1.)*(1.+zeta)/2.;
++			basis[ 5]=gauss->coord3*(2.*gauss->coord3-1.)*(1.+zeta)/2.;
+ 			/*mid-sides of triangles*/
+-			basis[ 6]=4.*gauss->coord3*gauss->coord2*(1.-gauss->coord4)/2.;
+-			basis[ 7]=4.*gauss->coord3*gauss->coord1*(1.-gauss->coord4)/2.;
+-			basis[ 8]=4.*gauss->coord1*gauss->coord2*(1.-gauss->coord4)/2.;
+-			basis[ 9]=4.*gauss->coord3*gauss->coord2*(1.+gauss->coord4)/2.;
+-			basis[10]=4.*gauss->coord3*gauss->coord1*(1.+gauss->coord4)/2.;
+-			basis[11]=4.*gauss->coord1*gauss->coord2*(1.+gauss->coord4)/2.;
++			basis[ 6]=4.*gauss->coord3*gauss->coord2*(1.-zeta)/2.;
++			basis[ 7]=4.*gauss->coord3*gauss->coord1*(1.-zeta)/2.;
++			basis[ 8]=4.*gauss->coord1*gauss->coord2*(1.-zeta)/2.;
++			basis[ 9]=4.*gauss->coord3*gauss->coord2*(1.+zeta)/2.;
++			basis[10]=4.*gauss->coord3*gauss->coord1*(1.+zeta)/2.;
++			basis[11]=4.*gauss->coord1*gauss->coord2*(1.+zeta)/2.;
+ 			return;
+ 		case P1xP2Enum:
+ 			/*Corner nodes*/
+-			basis[ 0]=gauss->coord1*gauss->coord4*(gauss->coord4-1.)/2.;
+-			basis[ 1]=gauss->coord2*gauss->coord4*(gauss->coord4-1.)/2.;
+-			basis[ 2]=gauss->coord3*gauss->coord4*(gauss->coord4-1.)/2.;
+-			basis[ 3]=gauss->coord1*gauss->coord4*(gauss->coord4+1.)/2.;
+-			basis[ 4]=gauss->coord2*gauss->coord4*(gauss->coord4+1.)/2.;
+-			basis[ 5]=gauss->coord3*gauss->coord4*(gauss->coord4+1.)/2.;
++			basis[ 0]=gauss->coord1*zeta*(zeta-1.)/2.;
++			basis[ 1]=gauss->coord2*zeta*(zeta-1.)/2.;
++			basis[ 2]=gauss->coord3*zeta*(zeta-1.)/2.;
++			basis[ 3]=gauss->coord1*zeta*(zeta+1.)/2.;
++			basis[ 4]=gauss->coord2*zeta*(zeta+1.)/2.;
++			basis[ 5]=gauss->coord3*zeta*(zeta+1.)/2.;
+ 			/*mid-sides of quads*/
+-			basis[ 6]=gauss->coord1*(1.-gauss->coord4*gauss->coord4);
+-			basis[ 7]=gauss->coord2*(1.-gauss->coord4*gauss->coord4);
+-			basis[ 8]=gauss->coord3*(1.-gauss->coord4*gauss->coord4);
++			basis[ 6]=gauss->coord1*(1.-zeta*zeta);
++			basis[ 7]=gauss->coord2*(1.-zeta*zeta);
++			basis[ 8]=gauss->coord3*(1.-zeta*zeta);
+ 			return;
+ 		case P2Enum:
+ 			/*Corner nodes*/
+-			basis[ 0]=gauss->coord1*(2.*gauss->coord1-1.)*gauss->coord4*(gauss->coord4-1.)/2.;
+-			basis[ 1]=gauss->coord2*(2.*gauss->coord2-1.)*gauss->coord4*(gauss->coord4-1.)/2.;
+-			basis[ 2]=gauss->coord3*(2.*gauss->coord3-1.)*gauss->coord4*(gauss->coord4-1.)/2.;
+-			basis[ 3]=gauss->coord1*(2.*gauss->coord1-1.)*gauss->coord4*(gauss->coord4+1.)/2.;
+-			basis[ 4]=gauss->coord2*(2.*gauss->coord2-1.)*gauss->coord4*(gauss->coord4+1.)/2.;
+-			basis[ 5]=gauss->coord3*(2.*gauss->coord3-1.)*gauss->coord4*(gauss->coord4+1.)/2.;
++			basis[ 0]=gauss->coord1*(2.*gauss->coord1-1.)*zeta*(zeta-1.)/2.;
++			basis[ 1]=gauss->coord2*(2.*gauss->coord2-1.)*zeta*(zeta-1.)/2.;
++			basis[ 2]=gauss->coord3*(2.*gauss->coord3-1.)*zeta*(zeta-1.)/2.;
++			basis[ 3]=gauss->coord1*(2.*gauss->coord1-1.)*zeta*(zeta+1.)/2.;
++			basis[ 4]=gauss->coord2*(2.*gauss->coord2-1.)*zeta*(zeta+1.)/2.;
++			basis[ 5]=gauss->coord3*(2.*gauss->coord3-1.)*zeta*(zeta+1.)/2.;
+ 			/*mid-sides of quads*/
+-			basis[ 6]=gauss->coord1*(1.-gauss->coord4*gauss->coord4);
+-			basis[ 7]=gauss->coord2*(1.-gauss->coord4*gauss->coord4);
+-			basis[ 8]=gauss->coord3*(1.-gauss->coord4*gauss->coord4);
++			basis[ 6]=gauss->coord1*(1.-zeta*zeta);
++			basis[ 7]=gauss->coord2*(1.-zeta*zeta);
++			basis[ 8]=gauss->coord3*(1.-zeta*zeta);
+ 			/*mid-sides of triangles*/
+-			basis[ 9]=2.*gauss->coord3*gauss->coord2*gauss->coord4*(gauss->coord4-1.);
+-			basis[10]=2.*gauss->coord3*gauss->coord1*gauss->coord4*(gauss->coord4-1.);
+-			basis[11]=2.*gauss->coord1*gauss->coord2*gauss->coord4*(gauss->coord4-1.);
+-			basis[12]=2.*gauss->coord3*gauss->coord2*gauss->coord4*(gauss->coord4+1.);
+-			basis[13]=2.*gauss->coord3*gauss->coord1*gauss->coord4*(gauss->coord4+1.);
+-			basis[14]=2.*gauss->coord1*gauss->coord2*gauss->coord4*(gauss->coord4+1.);
++			basis[ 9]=2.*gauss->coord3*gauss->coord2*zeta*(zeta-1.);
++			basis[10]=2.*gauss->coord3*gauss->coord1*zeta*(zeta-1.);
++			basis[11]=2.*gauss->coord1*gauss->coord2*zeta*(zeta-1.);
++			basis[12]=2.*gauss->coord3*gauss->coord2*zeta*(zeta+1.);
++			basis[13]=2.*gauss->coord3*gauss->coord1*zeta*(zeta+1.);
++			basis[14]=2.*gauss->coord1*gauss->coord2*zeta*(zeta+1.);
+ 			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+@@ -1324,29 +1327,29 @@
+ 			return;
+ 		case P1xP2Enum:
+ 			/*Nodal function 1*/
+-			dbasis[NUMNODESP1xP2*0+0]   = zeta*(zeta-1.)/4.;
+-			dbasis[NUMNODESP1xP2*1+0]   = SQRT3/12.*zeta*(zeta-1.);
+-			dbasis[NUMNODESP1xP2*2+0]   = .5*(1.-2.*zeta)*gauss->coord1;
++			dbasis[NUMNODESP1xP2*0+0]   = -zeta*(zeta-1.)/4.;
++			dbasis[NUMNODESP1xP2*1+0]   = -SQRT3/12.*zeta*(zeta-1.);
++			dbasis[NUMNODESP1xP2*2+0]   = .5*(2.*zeta-1.)*gauss->coord1;
+ 			/*Nodal function 2*/
+-			dbasis[NUMNODESP1xP2*0+1]   = zeta*(1.-zeta)/4.;
+-			dbasis[NUMNODESP1xP2*1+1]   = SQRT3/12.*zeta*(zeta-1);
+-			dbasis[NUMNODESP1xP2*2+1]   = .5*(1.-2.*zeta)*gauss->coord2;
++			dbasis[NUMNODESP1xP2*0+1]   = zeta*(zeta-1.)/4.;
++			dbasis[NUMNODESP1xP2*1+1]   = -SQRT3/12.*zeta*(zeta-1);
++			dbasis[NUMNODESP1xP2*2+1]   = .5*(2.*zeta-1.)*gauss->coord2;
+ 			/*Nodal function 3*/
+ 			dbasis[NUMNODESP1xP2*0+2]   = 0.;
+-			dbasis[NUMNODESP1xP2*1+2]   = SQRT3/6.*zeta*(1.-zeta);
+-			dbasis[NUMNODESP1xP2*2+2]   = .5*(1.-2.*zeta)*gauss->coord3;
++			dbasis[NUMNODESP1xP2*1+2]   = SQRT3/6.*zeta*(zeta-1.);
++			dbasis[NUMNODESP1xP2*2+2]   = .5*(2.*zeta-1.)*gauss->coord3;
+ 			/*Nodal function 4*/
+-			dbasis[NUMNODESP1xP2*0+3]   = -zeta*(1.+zeta)/4.;
+-			dbasis[NUMNODESP1xP2*1+3]   = -SQRT3/12.*(1.+zeta);
+-			dbasis[NUMNODESP1xP2*2+3]   = .5*(1.+2.*zeta)*gauss->coord1;
++			dbasis[NUMNODESP1xP2*0+3]   = -zeta*(zeta+1)/4.;
++			dbasis[NUMNODESP1xP2*1+3]   = -SQRT3/12.*zeta*(zeta+1.);
++			dbasis[NUMNODESP1xP2*2+3]   = .5*(2.*zeta+1.)*gauss->coord1;
+ 			/*Nodal function 5*/
+-			dbasis[NUMNODESP1xP2*0+4]   = zeta*(1.+zeta)/4.;
+-			dbasis[NUMNODESP1xP2*1+4]   = -SQRT3/12.*zeta*(1.+zeta);
+-			dbasis[NUMNODESP1xP2*2+4]   = .5*(1.+2.*zeta)*gauss->coord2;
++			dbasis[NUMNODESP1xP2*0+4]   = zeta*(zeta+1.)/4.;
++			dbasis[NUMNODESP1xP2*1+4]   = -SQRT3/12.*zeta*(zeta+1.);
++			dbasis[NUMNODESP1xP2*2+4]   = .5*(2.*zeta+1.)*gauss->coord2;
+ 			/*Nodal function 6*/
+ 			dbasis[NUMNODESP1xP2*0+5]   = 0.;
+-			dbasis[NUMNODESP1xP2*1+5]   = SQRT3/6.*zeta*(1.+zeta);
+-			dbasis[NUMNODESP1xP2*2+5]   = .5*(1.+2.*zeta)*gauss->coord3;
++			dbasis[NUMNODESP1xP2*1+5]   = SQRT3/6.*zeta*(zeta+1.);
++			dbasis[NUMNODESP1xP2*2+5]   = .5*(2.*zeta+1.)*gauss->coord3;
+ 
+ 			/*Nodal function 7*/
+ 			dbasis[NUMNODESP1xP2*0+6 ] = -0.5*(1.-zeta*zeta);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15637-15638.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15637-15638.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15637-15638.diff	(revision 16134)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15637)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15638)
+@@ -1366,29 +1366,29 @@
+ 			return;
+ 		case P2Enum:
+ 			/*Nodal function 1*/
+-			dbasis[NUMNODESP2*0+0 ] = .5*zeta*(1.-zeta)*(-2.*gauss->coord1 + 0.5);
+-			dbasis[NUMNODESP2*1+0 ] = .5*zeta*(1.-zeta)*(-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.);
+-			dbasis[NUMNODESP2*2+0 ] = .5*(1.-2.*zeta)*gauss->coord1*(2.*gauss->coord1-1.);
++			dbasis[NUMNODESP2*0+0 ] = .5*zeta*(zeta-1.)*(-2.*gauss->coord1 + 0.5);
++			dbasis[NUMNODESP2*1+0 ] = .5*zeta*(zeta-1.)*(-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.);
++			dbasis[NUMNODESP2*2+0 ] = .5*(2.*zeta-1.)*gauss->coord1*(2.*gauss->coord1-1.);
+ 			/*Nodal function 2*/
+-			dbasis[NUMNODESP2*0+1 ] = .5*zeta*(1.-zeta)*(+2.*gauss->coord2 - 0.5);
+-			dbasis[NUMNODESP2*1+1 ] = .5*zeta*(1.-zeta)*(-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.);
+-			dbasis[NUMNODESP2*2+1 ] = .5*(1.-2.*zeta)*gauss->coord2*(2.*gauss->coord2-1.);
++			dbasis[NUMNODESP2*0+1 ] = .5*zeta*(zeta-1.)*(+2.*gauss->coord2 - 0.5);
++			dbasis[NUMNODESP2*1+1 ] = .5*zeta*(zeta-1.)*(-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.);
++			dbasis[NUMNODESP2*2+1 ] = .5*(2.*zeta-1.)*gauss->coord2*(2.*gauss->coord2-1.);
+ 			/*Nodal function 3*/
+ 			dbasis[NUMNODESP2*0+2 ] = 0.;
+-			dbasis[NUMNODESP2*1+2 ] = .5*zeta*(1.-zeta)*(4.*SQRT3/3.*gauss->coord3 - SQRT3/3.);
+-			dbasis[NUMNODESP2*2+2 ] = .5*(1.-2.*zeta)*gauss->coord3*(2.*gauss->coord3-1.);
++			dbasis[NUMNODESP2*1+2 ] = .5*zeta*(zeta-1.)*(4.*SQRT3/3.*gauss->coord3 - SQRT3/3.);
++			dbasis[NUMNODESP2*2+2 ] = .5*(2.*zeta-1.)*gauss->coord3*(2.*gauss->coord3-1.);
+ 			/*Nodal function 4*/
+-			dbasis[NUMNODESP2*0+3 ] = .5*zeta*(1.+zeta)*(-2.*gauss->coord1 + 0.5);
+-			dbasis[NUMNODESP2*1+3 ] = .5*zeta*(1.+zeta)*(-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.);
+-			dbasis[NUMNODESP2*2+3 ] = .5*(1.+2.*zeta)*gauss->coord1*(2.*gauss->coord1-1.);
++			dbasis[NUMNODESP2*0+3 ] = .5*zeta*(zeta+1.)*(-2.*gauss->coord1 + 0.5);
++			dbasis[NUMNODESP2*1+3 ] = .5*zeta*(zeta+1.)*(-2.*SQRT3/3.*gauss->coord1 + SQRT3/6.);
++			dbasis[NUMNODESP2*2+3 ] = .5*(2.*zeta+1.)*gauss->coord1*(2.*gauss->coord1-1.);
+ 			/*Nodal function 5*/
+-			dbasis[NUMNODESP2*0+4 ] = .5*zeta*(1.+zeta)*(+2.*gauss->coord2 - 0.5);
+-			dbasis[NUMNODESP2*1+4 ] = .5*zeta*(1.+zeta)*(-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.);
+-			dbasis[NUMNODESP2*2+4 ] = .5*(1.+2.*zeta)*gauss->coord2*(2.*gauss->coord2-1.);
++			dbasis[NUMNODESP2*0+4 ] = .5*zeta*(zeta+1.)*(+2.*gauss->coord2 - 0.5);
++			dbasis[NUMNODESP2*1+4 ] = .5*zeta*(zeta+1.)*(-2.*SQRT3/3.*gauss->coord2 + SQRT3/6.);
++			dbasis[NUMNODESP2*2+4 ] = .5*(2.*zeta+1.)*gauss->coord2*(2.*gauss->coord2-1.);
+ 			/*Nodal function 6*/
+ 			dbasis[NUMNODESP2*0+5 ] = 0.;
+-			dbasis[NUMNODESP2*1+5 ] = .5*zeta*(1.+zeta)*(4.*SQRT3/3.*gauss->coord3 - SQRT3/3.);
+-			dbasis[NUMNODESP2*2+5 ] = .5*(1.+2.*zeta)*gauss->coord3*(2.*gauss->coord3-1.);
++			dbasis[NUMNODESP2*1+5 ] = .5*zeta*(zeta+1.)*(4.*SQRT3/3.*gauss->coord3 - SQRT3/3.);
++			dbasis[NUMNODESP2*2+5 ] = .5*(2.*zeta+1.)*gauss->coord3*(2.*gauss->coord3-1.);
+ 
+ 			/*Nodal function 7*/
+ 			dbasis[NUMNODESP2*0+6 ] = -0.5*(1.-zeta*zeta);
+@@ -1404,29 +1404,29 @@
+ 			dbasis[NUMNODESP2*2+8 ] = -2.*zeta*gauss->coord3;
+ 
+ 			/*Nodal function 10*/
+-			dbasis[NUMNODESP2*0+9 ] = zeta*(1.-zeta)*gauss->coord3;
+-			dbasis[NUMNODESP2*1+9 ] = .5*zeta*(1.-zeta)*(+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3);
+-			dbasis[NUMNODESP2*2+9 ] = 2.*gauss->coord3*gauss->coord2*(1.-2.*zeta);
++			dbasis[NUMNODESP2*0+9 ] = zeta*(zeta-1.)*gauss->coord3;
++			dbasis[NUMNODESP2*1+9 ] = .5*zeta*(zeta-1.)*(+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2*2+9 ] = 2.*gauss->coord3*gauss->coord2*(2.*zeta-1.);
+ 			/*Nodal function 11*/
+-			dbasis[NUMNODESP2*0+10] = -zeta*(1.-zeta)*gauss->coord3;
+-			dbasis[NUMNODESP2*1+10] = .5*zeta*(1.-zeta)*(+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3);
+-			dbasis[NUMNODESP2*2+10] = 2.*gauss->coord3*gauss->coord1*(1.-2.*zeta);
++			dbasis[NUMNODESP2*0+10] = -zeta*(zeta-1.)*gauss->coord3;
++			dbasis[NUMNODESP2*1+10] = .5*zeta*(zeta-1.)*(+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2*2+10] = 2.*gauss->coord3*gauss->coord1*(2.*zeta-1.);
+ 			/*Nodal function 12*/
+-			dbasis[NUMNODESP2*0+11] = zeta*(1.-zeta)*(gauss->coord1-gauss->coord2);
+-			dbasis[NUMNODESP2*1+11] = .5*zeta*(1.-zeta)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
+-			dbasis[NUMNODESP2*2+11] = 2.*gauss->coord1*gauss->coord2*(1.-2.*zeta);
++			dbasis[NUMNODESP2*0+11] = zeta*(zeta-1.)*(gauss->coord1-gauss->coord2);
++			dbasis[NUMNODESP2*1+11] = .5*zeta*(zeta-1.)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
++			dbasis[NUMNODESP2*2+11] = 2.*gauss->coord1*gauss->coord2*(2.*zeta-1.);
+ 			/*Nodal function 13*/
+-			dbasis[NUMNODESP2*0+12] = zeta*(1.+zeta)*gauss->coord3;
+-			dbasis[NUMNODESP2*1+12] = .5*zeta*(1.+zeta)*(+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3);
+-			dbasis[NUMNODESP2*2+12] = 2.*gauss->coord3*gauss->coord2*(1.+2.*zeta);
++			dbasis[NUMNODESP2*0+12] = zeta*(zeta+1.)*gauss->coord3;
++			dbasis[NUMNODESP2*1+12] = .5*zeta*(zeta+1.)*(+4.*SQRT3/3.*gauss->coord2 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2*2+12] = 2.*gauss->coord3*gauss->coord2*(2.*zeta+1.);
+ 			/*Nodal function 14*/
+-			dbasis[NUMNODESP2*0+13] = -zeta*(1.+zeta)*gauss->coord3;
+-			dbasis[NUMNODESP2*1+13] = .5*zeta*(1.+zeta)*(+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3);
+-			dbasis[NUMNODESP2*2+13] = 2.*gauss->coord3*gauss->coord1*(1.+2.*zeta);
++			dbasis[NUMNODESP2*0+13] = -zeta*(zeta+1.)*gauss->coord3;
++			dbasis[NUMNODESP2*1+13] = .5*zeta*(zeta+1.)*(+4.*SQRT3/3.*gauss->coord1 - 2.*SQRT3/3.*gauss->coord3);
++			dbasis[NUMNODESP2*2+13] = 2.*gauss->coord3*gauss->coord1*(2.*zeta+1.);
+ 			/*Nodal function 15*/
+-			dbasis[NUMNODESP2*0+14] = zeta*(1.+zeta)*(gauss->coord1-gauss->coord2);
+-			dbasis[NUMNODESP2*1+14] = .5*zeta*(1.+zeta)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
+-			dbasis[NUMNODESP2*2+14] = 2.*gauss->coord1*gauss->coord2*(1.+2.*zeta);
++			dbasis[NUMNODESP2*0+14] = zeta*(zeta+1.)*(gauss->coord1-gauss->coord2);
++			dbasis[NUMNODESP2*1+14] = .5*zeta*(zeta+1.)*(-2.*SQRT3/3.*(gauss->coord1+gauss->coord2));
++			dbasis[NUMNODESP2*2+14] = 2.*gauss->coord1*gauss->coord2*(2.*zeta+1.);
+ 			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
Index: /issm/oecreview/Archive/15392-16133/ISSM-15638-15639.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15638-15639.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15638-15639.diff	(revision 16134)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/classes/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15638)
++++ ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15639)
+@@ -214,8 +214,13 @@
+ 		}
+ 	}
+ 	else{
+-		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(this->Size()-1));
+-		max = node->Id();
++		if(this->Size()==0){
++			max = 0;
++		}
++		else{
++			Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(this->Size()-1));
++			max = node->Id();
++		}
+ 	}
+ 
+ 	/*Grab max of all cpus: */
Index: /issm/oecreview/Archive/15392-16133/ISSM-15639-15640.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15639-15640.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15639-15640.diff	(revision 16134)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15639)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15640)
+@@ -631,16 +631,23 @@
+ 	 ** We assume B has been allocated already, of size: 2 (2 x numnodes)
+ 	 **/
+ 
+-	/*Get basis in actual coordinate system: */
+-	IssmDouble basis[6];
+-	GetNodalFunctionsP1(&basis[0],gauss);
+ 
+-	for(int i=0;i<NUMNODESP1;i++){
+-		B[2*NUMNODESP1*0+2*i+0] = basis[i];
+-		B[2*NUMNODESP1*0+2*i+1] = 0.;
+-		B[2*NUMNODESP1*1+2*i+0] = 0.;
+-		B[2*NUMNODESP1*1+2*i+1] = basis[i];
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Get nodal functions derivatives*/
++	IssmDouble* basis=xNew<IssmDouble>(numnodes);
++	GetNodalFunctions(basis,gauss);
++
++	for(int i=0;i<numnodes;i++){
++		B[2*numnodes*0+2*i+0] = basis[i];
++		B[2*numnodes*0+2*i+1] = 0.;
++		B[2*numnodes*1+2*i+0] = 0.;
++		B[2*numnodes*1+2*i+1] = basis[i];
+ 	}
++
++	/*Clean-up*/
++	xDelete<IssmDouble>(basis);
+ } 
+ /*}}}*/
+ /*FUNCTION PentaRef::GetLFS{{{*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15640-15641.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15640-15641.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15640-15641.diff	(revision 16134)
@@ -0,0 +1,134 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15640)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15641)
+@@ -3157,32 +3157,35 @@
+ 	/*If no front, return NULL*/
+ 	if(!isfront) return NULL;
+ 
+-	/*Fetch number of nodes and dof for this finite element*/
+-	int         numnodes = this->NumberofNodes();
+-	int         numdof   = numnodes*NDOF2;
++	/*Intermediaries*/
+ 	IssmDouble  rho_ice,rho_water,gravity;
+ 	IssmDouble  Jdet,thickness,bed,water_pressure,ice_pressure,air_pressure;
+ 	IssmDouble  surface_under_water,base_under_water,pressure;
+-	GaussTria*  gauss;
+-	IssmDouble* basis = xNew<IssmDouble>(numnodes);
+ 	IssmDouble  xyz_list_front[2][3];
+ 	IssmDouble  area_coordinates[2][3];
+ 	IssmDouble  normal[2];
+ 
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
++
++	/*Initialize Element vector and other vectors*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,SSAApproximationEnum);
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters,HOApproximationEnum);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
+ 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 	Input* bed_input      =inputs->GetInput(BedEnum);       _assert_(bed_input);
+-	rho_water=matpar->GetRhoWater();
+-	rho_ice  =matpar->GetRhoIce();
+-	gravity  =matpar->GetG();
++	rho_water = matpar->GetRhoWater();
++	rho_ice   = matpar->GetRhoIce();
++	gravity   = matpar->GetG();
+ 	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
+ 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,2);
+ 	GetSegmentNormal(&normal[0],xyz_list_front);
+ 
+ 	/*Start looping on Gaussian points*/
+-	gauss=new GaussTria(area_coordinates,3);
+-
++	GaussTria* gauss=new GaussTria(area_coordinates,3);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+@@ -3191,11 +3194,11 @@
+ 		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_front[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		surface_under_water=min(0.,thickness+bed); // 0 if the top of the glacier is above water level
+-		base_under_water=min(0.,bed);              // 0 if the bottom of the glacier is above water level
+-		water_pressure=1.0/2.0*gravity*rho_water*(pow(surface_under_water,2) - pow(base_under_water,2));
+-		ice_pressure=1.0/2.0*gravity*rho_ice*pow(thickness,2);
+-		air_pressure=0;
++		surface_under_water = min(0.,thickness+bed); // 0 if the top of the glacier is above water level
++		base_under_water    = min(0.,bed);           // 0 if the bottom of the glacier is above water level
++		water_pressure = 1.0/2.0*gravity*rho_water*(pow(surface_under_water,2) - pow(base_under_water,2));
++		ice_pressure   = 1.0/2.0*gravity*rho_ice*pow(thickness,2);
++		air_pressure   = 0;
+ 		pressure = ice_pressure + water_pressure + air_pressure;
+ 
+ 		for (int i=0;i<numnodes;i++){
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15640)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15641)
+@@ -8082,20 +8082,25 @@
+ 	/*If no front, return NULL*/
+ 	if(!isfront) return NULL;
+ 
+-	/*Fetch number of nodes and dof for this finite element*/
+-	int         numnodes = this->NumberofNodes();
+-	int         numdof   = numnodes*NDOF2;
++	/*Intermediaries*/
+ 	IssmDouble  rho_ice,rho_water,gravity;
+ 	IssmDouble  Jdet,surface,z_g,water_pressure,ice_pressure,air_pressure;
+ 	IssmDouble  surface_under_water,base_under_water,pressure;
+-	GaussPenta*  gauss;
+-	IssmDouble* basis = xNew<IssmDouble>(numnodes);
+ 	IssmDouble  xyz_list_front[4][3];
+ 	IssmDouble  area_coordinates[4][3];
+ 	IssmDouble  normal[3];
++	GaussPenta* gauss;
+ 
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
++
++	/*Initialize Element vector and other vectors*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,HOApproximationEnum);
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters,HOApproximationEnum);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
+ 	Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+@@ -8104,12 +8109,13 @@
+ 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
+ 	GetQuadNormal(&normal[0],xyz_list_front);
+ 
+-	/*Start looping on Gaussian points*/
++	/*Initialize gauss points*/
+ 	IssmDouble zmax=xyz_list[0][2]; for(int i=1;i<6;i++) if(xyz_list[i][2]>zmax) zmax=xyz_list[i][2];
+ 	IssmDouble zmin=xyz_list[0][2]; for(int i=1;i<6;i++) if(xyz_list[i][2]<zmin) zmin=xyz_list[i][2];
+ 	if(zmax>0 && zmin<0) gauss=new GaussPenta(area_coordinates,3,10); //refined in vertical because of the sea level discontinuity
+ 	else                 gauss=new GaussPenta(area_coordinates,3,3);
+ 
++	/* Start  looping on the number of gaussian points: */
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+@@ -8118,10 +8124,10 @@
+ 		GetNodalFunctions(basis,gauss);
+ 		GetQuadJacobianDeterminant(&Jdet,xyz_list_front,gauss);
+ 
+-		water_pressure=rho_water*gravity*min(0.,z_g);//0 if the gaussian point is above water level
+-		ice_pressure=rho_ice*gravity*(surface-z_g);
+-		air_pressure=0;
+-		pressure = ice_pressure + water_pressure + air_pressure;
++		water_pressure = rho_water*gravity*min(0.,z_g);//0 if the gaussian point is above water level
++		ice_pressure   = rho_ice*gravity*(surface-z_g);
++		air_pressure   = 0;
++		pressure       = ice_pressure + water_pressure + air_pressure;
+ 
+ 		for (int i=0;i<numnodes;i++){
+ 			pe->values[2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
Index: /issm/oecreview/Archive/15392-16133/ISSM-15641-15642.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15641-15642.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15641-15642.diff	(revision 16134)
@@ -0,0 +1,155 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15641)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15642)
+@@ -144,7 +144,6 @@
+ 	 * We assume B has been allocated already, of size: 5x(NDOF2*numnodes)
+ 	 */
+ 
+-
+ 	/*Fetch number of nodes for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+ 
+@@ -530,18 +529,22 @@
+ 	 * We assume B has been allocated already, of size: 3x(NDOF1*NUMNODESP1)
+ 	 */
+ 
+-	/*Same thing in the actual coordinate system: */
+-	IssmDouble basis[6];
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
+-	/*Get dh1dh2dh3 in actual coordinates system : */
+-	GetNodalFunctionsP1(basis, gauss);
++	/*Get nodal functions derivatives*/
++	IssmDouble* basis=xNew<IssmDouble>(numnodes);
++	GetNodalFunctions(basis,gauss);
+ 
+-	/*Build B': */
+-	for(int i=0;i<NUMNODESP1;i++){
+-		B_advec[NDOF1*NUMNODESP1*0+NDOF1*i] = basis[i];
+-		B_advec[NDOF1*NUMNODESP1*1+NDOF1*i] = basis[i];
+-		B_advec[NDOF1*NUMNODESP1*2+NDOF1*i] = basis[i];
++	/*Build B: */
++	for(int i=0;i<numnodes;i++){
++		B_advec[numnodes*0+i] = basis[i];
++		B_advec[numnodes*1+i] = basis[i];
++		B_advec[numnodes*2+i] = basis[i];
+ 	}
++
++	/*Clean-up*/
++	xDelete<IssmDouble>(basis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBConduct{{{*/
+@@ -554,21 +557,25 @@
+ 	 *                  [ dh/dz ]
+ 	 * where h is the interpolation function for node i.
+ 	 *
+-	 * We assume B has been allocated already, of size: 3x(NDOF1*NUMNODESP1)
++	 * We assume B has been allocated already, of size: 3x(NDOF1*numnodes)
+ 	 */
+ 
+-	/*Same thing in the actual coordinate system: */
+-	IssmDouble dbasis[3][NUMNODESP1];
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
+-	/*Get dh1dh2dh3 in actual coordinates system : */
+-	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
+-	/*Build B': */
+-	for(int i=0;i<NUMNODESP1;i++){
+-		B_conduct[NDOF1*NUMNODESP1*0+NDOF1*i] = dbasis[0][i];
+-		B_conduct[NDOF1*NUMNODESP1*1+NDOF1*i] = dbasis[1][i];
+-		B_conduct[NDOF1*NUMNODESP1*2+NDOF1*i] = dbasis[2][i];
++	/*Build B: */
++	for(int i=0;i<numnodes;i++){
++		B_conduct[numnodes*0+i] = dbasis[0*numnodes+i];
++		B_conduct[numnodes*1+i] = dbasis[1*numnodes+i];
++		B_conduct[numnodes*2+i] = dbasis[2*numnodes+i];
+ 	}
++
++	/*Clean-up*/
++	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBVert{{{*/
+@@ -576,15 +583,20 @@
+ 	/*	Compute B  matrix. B=[dh1/dz dh2/dz dh3/dz dh4/dz dh5/dz dh6/dz];
+ 		where hi is the interpolation function for node i.*/
+ 
+-	/*Get dbasis in actual coordinate system: */
+-	IssmDouble dbasis[3][NUMNODESP1];
+-	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list, gauss);
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
+ 	/*Build B: */
+-	for(int i=0;i<NUMNODESP1;i++){
+-		B[i] = dbasis[2][i];  
++	for(int i=0;i<numnodes;i++){
++		B[i] = dbasis[2*numnodes+i];  
+ 	}
+ 
++	/*Clean-up*/
++	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBprimeAdvec{{{*/
+@@ -597,25 +609,31 @@
+ 	 *                     [ dh/dz ]
+ 	 * where h is the interpolation function for node i.
+ 	 *
+-	 * We assume B has been allocated already, of size: 3x(NDOF1*NUMNODESP1)
++	 * We assume B has been allocated already, of size: 3x(NDOF1*numnodes)
+ 	 */
+ 
+-	/*Get nodal function derivatives in actual coordinates system : */
+-	IssmDouble dbasis[3][NUMNODESP1];
+-	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
+ 	/*Build B': */
+-	for(int i=0;i<NUMNODESP1;i++){
+-		Bprime_advec[NDOF1*NUMNODESP1*0+NDOF1*i] = dbasis[0][i];
+-		Bprime_advec[NDOF1*NUMNODESP1*1+NDOF1*i] = dbasis[1][i];
+-		Bprime_advec[NDOF1*NUMNODESP1*2+NDOF1*i] = dbasis[2][i];
++	for(int i=0;i<numnodes;i++){
++		Bprime_advec[numnodes*0+i] = dbasis[0*numnodes+i];
++		Bprime_advec[numnodes*1+i] = dbasis[1*numnodes+i];
++		Bprime_advec[numnodes*2+i] = dbasis[2*numnodes+i];
+ 	}
++
++	/*Clean-up*/
++	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBprimeVert{{{*/
+ void PentaRef::GetBprimeVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+-	GetNodalFunctionsP1(B, gauss);
++	GetNodalFunctions(B,gauss);
+ 
+ }
+ /*}}}*/
+@@ -631,7 +649,6 @@
+ 	 ** We assume B has been allocated already, of size: 2 (2 x numnodes)
+ 	 **/
+ 
+-
+ 	/*Fetch number of nodes for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15642-15643.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15642-15643.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15642-15643.diff	(revision 16134)
@@ -0,0 +1,540 @@
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 15643)
+@@ -62,8 +62,6 @@
+ 	if (yposting<0) yflip=1;
+ 	else yflip=0;
+ 
+-
+-
+ 	/*Get extreme coordinates of the grid*/
+ 	if (xflip){
+ 		for(i=0;i<ncols; i++) x_grid[ncols-1-i] = xmin - xposting*i;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 15643)
+@@ -43,7 +43,6 @@
+ 	 * continuous galerkin, but the nodes partitioning involves faces, which
+ 	 * messes up sorting of ids. */
+ 
+-
+ 	/*Intermediaries*/
+ 	int  i,i1,i2;
+ 	int  cols;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 15643)
+@@ -15,7 +15,7 @@
+ 	int hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 	if(hydrology_model!=HydrologydcEnum) return;
+-	
++
+ 	iomodel->FetchData(1,MeshVertexonbedEnum);
+ 
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15643)
+@@ -18,10 +18,10 @@
+ 	Vector<IssmDouble>* uf_epl=NULL;
+ 	Vector<IssmDouble>* uf_epl_sub_iter=NULL; 
+ 	Vector<IssmDouble>* ug_epl_main_iter=NULL;
+- 
++
+ 	Vector<IssmDouble>* ys=NULL; 
+ 	Vector<IssmDouble>* dug=NULL;
+-	
++
+ 	Matrix<IssmDouble>* Kff=NULL;
+ 	Matrix<IssmDouble>* Kfs=NULL;
+ 	Vector<IssmDouble>* pf=NULL;
+@@ -50,7 +50,7 @@
+ 	/*Retrieve inputs as the initial state for the non linear iteration*/
+ 	//femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+ 	GetSolutionFromInputsx(&ug_sed, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+-	
++
+ 	if(isefficientlayer) {
+ 		femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
+ 		GetSolutionFromInputsx(&ug_epl, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+@@ -136,7 +136,7 @@
+ 				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);
+ 				ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 				femmodel->HydrologyEPLupdateDomainx();			
+-				
++
+ 				if (!eplconverged){
+ 					if(VerboseConvergence()) _printf0_("   # EPL unstable constraints = " << num_unstable_constraints << "\n");
+ 					if(num_unstable_constraints==0) eplconverged = true;
+@@ -205,7 +205,7 @@
+ 		hydrocount++;
+ 		if(hydroconverged)break;
+ 	}
+-	
++
+ 	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_sed);
+ 	if(isefficientlayer)InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_epl);
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15643)
+@@ -344,7 +344,7 @@
+ 		_printf0_("Core solution elapsed time    : " << solution_time   << " Seconds\n");
+ 		_printf0_("Core solution number of flops : " << solution_flops  << " Flops\n");
+ 		_printf0_("Core solution memory used     : " << solution_memory << " Bytes\n");
+-		
++
+ 		/*Add to results: */
+ 		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
+ 		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
+@@ -359,7 +359,6 @@
+ 		_printf0_("AD Solution number of flops : " << solution_flops  << " Flops\n");
+ 		_printf0_("AD Solution memory used     : " << solution_memory << " Bytes\n");
+ 
+-
+ 		#endif
+ 
+ 			}
+@@ -883,7 +882,7 @@
+ 		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+ 		element->CreateKMatrix(Kff,Kfs);
+ 	}
+-	
++
+ 	for (i=0;i<this->loads->Size();i++){
+ 		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+ 		if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15642)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15643)
+@@ -132,7 +132,7 @@
+ 		virtual void HydrologyEPLGetMask(Vector<IssmDouble>* mask)=0;
+ 		virtual void HydrologyEPLGetActive(Vector<IssmDouble>* active)=0;
+ 		#endif
+-		
++
+ 		#ifdef _HAVE_GROUNDINGLINE_
+ 		virtual void   MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding)=0;
+ 		virtual void   PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15643)
+@@ -23,7 +23,7 @@
+ /*Constructors/destructor/copy*/
+ /*FUNCTION Tria::Tria(){{{*/
+ Tria::Tria(){
+-	
++
+ 	int i;
+ 
+ 	this->nodes    = NULL;
+@@ -3482,7 +3482,6 @@
+ 	xDelete<IssmDouble>(vx);
+ 	xDelete<IssmDouble>(values);
+ 	xDelete<int>(doflist);
+-	
+ 
+ }
+ /*}}}*/
+@@ -4541,7 +4540,6 @@
+ 					pow(log((fabs(vx)+epsvel)/(fabs(vxobs)+epsvel)),2) +
+ 					pow(log((fabs(vy)+epsvel)/(fabs(vyobs)+epsvel)),2) );
+ 
+-
+ 		/*Add to cost function*/
+ 		Jelem+=misfit*weight*Jdet*gauss->weight;
+ 	}
+@@ -5627,27 +5625,27 @@
+ #ifdef _HAVE_HYDROLOGY_
+ /*FUNCTION Tria::AllActive{{{*/
+ bool Tria::AllActive(void){
+-	
++
+ 	/*Intermediaries*/
+ 	const int  numnodes = NUMVERTICES;
+-	
++
+ 	for(int i=0;i<numnodes;i++){
+ 		if(!this->nodes[i]->IsActive()) return false;
+ 	}
+-	
++
+ 	return true;
+ }
+ /*}}}*/
+ /*FUNCTION Tria::AnyActive{{{*/
+ bool Tria::AnyActive(void){
+-	
++
+ 	/*Intermediaries*/
+ 	const int  numnodes = NUMVERTICES;
+-	
++
+ 	for(int i=0;i<numnodes;i++){
+ 		if(this->nodes[i]->IsActive()) return true;
+ 	}
+-	
++
+ 	return false;
+ }/*}}}*/
+ /*FUNCTION Tria::CreateHydrologyWaterVelocityInput {{{*/
+@@ -6095,7 +6093,7 @@
+ 		}
+ 	}
+ 	delete gauss;
+-	
++
+ 	/*	Add residual if necessary*/
+ 	gauss=new GaussTria();
+ 	for(int iv=0;iv<NUMVERTICES;iv++){
+@@ -6112,7 +6110,7 @@
+ /*}}}*/
+ /*FUNCTION Tria::GetSolutionFromInputsOneDof{{{*/
+ void  Tria::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){
+-	
++
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	int         i;
+@@ -6199,9 +6197,9 @@
+ 	if(converged){
+ 		this->parameters->FindParam(&kmax,HydrologySedimentKmaxEnum);
+ 		this->parameters->FindParam(&penalty_factor,HydrologydcPenaltyFactorEnum);
+-		
++
+ 		kappa=kmax*pow(10.,penalty_factor);
+-		
++
+ 		for(int i=0;i<NUMVERTICES;i++){
+ 			this->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
+ 			if(values[i]>h_max){
+@@ -6271,10 +6269,10 @@
+ 	IssmDouble epl_head[numdof],sed_head[numdof];
+ 
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+-	
++
+ 	/*Get the flag to know if the efficient layer is present*/
+ 	this->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	
++
+ 	if(isefficientlayer){
+ 		/*Also get the flag to the transfer method*/
+ 		this->parameters->FindParam(&transfermethod,HydrologydcTransferFlagEnum);
+@@ -6289,12 +6287,12 @@
+ 			GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveEnum);
+ 			GetInputListOnVertices(&sed_head[0],SedimentHeadEnum); 
+ 			GetInputListOnVertices(&epl_head[0],EplHeadEnum);
+-			
++
+ 			this->parameters->FindParam(&leakage,HydrologydcLeakageFactorEnum);
+ 
+ 			sed_trans = matpar->GetSedimentTransmitivity();
+ 			sed_thick = matpar->GetSedimentThickness();
+-			
++
+ 			for(int i=0;i<numdof;i++){
+ 				/*No transfer if the EPL is not active*/
+ 				if(activeEpl[i]==0.0){
+@@ -6303,11 +6301,11 @@
+ 				else{
+ 					eplstoring[i]=matpar->GetEplStoring();		
+ 					sedstoring[i]=matpar->GetSedimentStoring();
+-					
++
+ 					/*EPL head higher than sediment head, transfer from the epl to the sediment*/
+ 					if(epl_head[i]>sed_head[i]){
+ 						wh_trans=eplstoring[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick);				
+-						
++
+ 						/*No transfer if the sediment head is allready at the maximum*/
+ 						this->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
+ 						if(sed_head[i]>=h_max)wh_trans=0.0;
+@@ -6336,11 +6334,11 @@
+ 	const int  numnodes = NUMVERTICES;
+ 	IssmDouble flag     = 0.;
+ 	IssmDouble active[numnodes];
+-	
++
+ 	GetInputListOnVertices(&active[0],HydrologydcMaskEplactiveEnum);
+ 
+ 	for(int i=0;i<numnodes;i++) flag+=active[i];
+-	
++
+ 	if(flag>0.){
+ 		for(int i=0;i<numnodes;i++){
+ 			active_vec->SetValue(nodes[i]->Sid(),1.,INS_VAL);
+@@ -6349,7 +6347,7 @@
+ 	else{
+ 		/*Do not do anything: at least one node is active for this element but this element is not solved for*/
+ 	}
+-	
++
+ }
+ /*}}}*/
+ /*FUNCTION Tria::HydrologyEPLGetMask{{{*/
+@@ -6373,13 +6371,13 @@
+ 	/*Get minimum sediment head*/
+ 	sedheadmin=sedhead[0];
+ 	for(i=1;i<numdof;i++) if(sedhead[i]<=sedheadmin)sedheadmin=sedhead[i];
+-	
++
+ 	for(i=0;i<numdof;i++){
+ 		/*Activate EPL if residual is >0 */
+ 		if(residual[i]>0.){
+ 			vec_mask->SetValue(nodes[i]->Sid(),1.,INS_VAL);
+ 		}
+-		
++
+ 		/*If mask was alread one, keep one*/
+ 		else if(old_active[i]>0.){
+ 			vec_mask->SetValue(nodes[i]->Sid(),1.,INS_VAL);
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15643)
+@@ -1456,7 +1456,6 @@
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+-
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsMINI{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15643)
+@@ -793,7 +793,6 @@
+ 
+ 	area_init=fabs(xyz_list[1][0]*xyz_list[2][1] - xyz_list[1][1]*xyz_list[2][0] + xyz_list[0][0]*xyz_list[1][1] - xyz_list[0][1]*xyz_list[1][0] + xyz_list[2][0]*xyz_list[0][1] - xyz_list[2][1]*xyz_list[0][0])/2.;
+ 
+-
+ 	/*Initialize xyz_list with original xyz_list of triangle coordinates*/
+ 	for(j=0;j<3;j++){ 
+ 		for(k=0;k<3;k++){
+@@ -2341,11 +2340,11 @@
+ 			}
+ 			/*Add input to the element: */
+ 			this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+-			
++
+ 			/*Free ressources:*/
+ 			xDelete<int>(doflist);
+ 			return;
+-			
++
+ 	  default:
+ 			_error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+ 	}
+@@ -2421,7 +2420,7 @@
+ 				name==EplHeadOldEnum ||
+ 				name==HydrologydcMaskEplactiveEnum ||
+ 				name==WaterTransferEnum
+-				
++
+ 				) {
+ 		return true;
+ 	}
+@@ -7324,7 +7323,7 @@
+ 
+ 	/*Transform Coordinate System*/
+ 	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
+-	
++
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	return Ke;
+@@ -8173,7 +8172,6 @@
+ 			_error_("Finite element" << fe_FS << " not supported yet");
+ 	}
+ 
+-
+ 	/*clean-up and return*/
+ 	delete pe1;
+ 	delete pe2;
+@@ -9984,7 +9982,7 @@
+ void  Penta::GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode){
+ 
+ 	if (!IsOnBed()) return;
+-	
++
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 	tria->GetHydrologyDCInefficientHmax(ph_max,innode);
+ 	delete tria->material; delete tria;
+@@ -9994,7 +9992,7 @@
+ void  Penta::GetHydrologyTransfer(Vector<IssmDouble>* transfer){
+ 
+ 	if (!IsOnBed()) return;
+-	
++
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 	tria->GetHydrologyTransfer(transfer);
+ 	delete tria->material; delete tria;
+@@ -10035,7 +10033,7 @@
+ void Penta::HydrologyEPLGetActive(Vector<IssmDouble>* active_vec){
+ 
+ 	if (!IsOnBed())return;
+-	
++
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 	tria->HydrologyEPLGetActive(active_vec);
+ 	delete tria->material; delete tria;
+@@ -10046,11 +10044,11 @@
+ void  Penta::HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask){
+ 
+ 	if (!IsOnBed())return;
+-	
++
+ 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+ 	tria->HydrologyEPLGetMask(vec_mask);
+ 	delete tria->material; delete tria;
+-	
++
+ }
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionHydrologyDCInefficient{{{*/
+@@ -10086,9 +10084,9 @@
+ 	if(converged){
+ 		this->parameters->FindParam(&kmax,HydrologySedimentKmaxEnum);
+ 		this->parameters->FindParam(&penalty_factor,HydrologydcPenaltyFactorEnum);
+-		
++
+ 		kappa=kmax*pow(10.,penalty_factor);
+-		
++
+ 		Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.	
+ 		for(int i=0;i<NUMVERTICES2D;i++){
+ 			tria->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15642)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15643)
+@@ -167,7 +167,7 @@
+ 		IssmDouble BalancethicknessMisfit(int weight_index){_error_("not supported");};
+ 		void   InputControlUpdate(IssmDouble scalar,bool save_parameter);
+ 		#endif
+-		
++
+ 		#ifdef _HAVE_GROUNDINGLINE_
+ 		void   MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding);
+ 		void   PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+@@ -315,12 +315,12 @@
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
+-		
++
+ 		ElementMatrix* CreateKMatrixHydrologyDCInefficient(void);
+ 		ElementMatrix* CreateKMatrixHydrologyDCEfficient(void);
+ 		ElementVector* CreatePVectorHydrologyDCInefficient(void);
+ 		ElementVector* CreatePVectorHydrologyDCEfficient(void);
+-		
++
+ 		void    GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode);
+ 		void    GetHydrologyTransfer(Vector<IssmDouble>* transfer);
+ 		void    GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15643)
+@@ -287,7 +287,6 @@
+ 
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+-
+ 	/*Here, we are computing the strain rate of (vx,0)*/
+ 	for(i=0;i<numnodes;i++){
+ 		velocity[i][0]=this->values[i];
+@@ -313,7 +312,6 @@
+ 	GetBHO(&B[0][0], xyz_list, gauss);
+ 	_assert_(this->NumberofNodes()==6); //Check Tria too
+ 
+-
+ 	/*Here, we are computing the strain rate of (0,vy)*/
+ 	for(i=0;i<numnodes;i++){
+ 		velocity[i][0]=0.0;
+Index: ../trunk-jpl/src/c/classes/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 15642)
++++ ../trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 15643)
+@@ -180,7 +180,7 @@
+ 		 independent matrix inthe iomodel->data[name] data slot: */
+ 		iomodel->data[name]=matrix;
+ 		iomodel->independents[name]=true;
+-		
++
+ 		//Finally, record the number of independents created: 
+ 		this->numberofindependents=M*N;
+ 
+Index: ../trunk-jpl/src/m/classes/settings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/settings.m	(revision 15642)
++++ ../trunk-jpl/src/m/classes/settings.m	(revision 15643)
+@@ -45,7 +45,7 @@
+ 			%N minutes that is generated once the solution has converged
+ 			%0 to deactivate
+ 			obj.waitonlock=Inf;
+-		
++
+ 			%upload options: 
+ 			upload_port         = 0;
+ 
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15642)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15643)
+@@ -1206,13 +1206,12 @@
+ 		%get locally rid of file that was uploaded
+ 		eval(['delete ' id]);
+ 
+-
+ 		end % }}}
+ 		function md=download(md) % {{{
+-		
++
+ 		%the goal of this routine is to download the internals of the current model from a server, because 
+ 		%this model is empty, except for the settings which tell us where to go and find this model!
+-		
++
+ 		%Download the file: 
+ 		issmscpin(md.settings.upload_server, md.settings.upload_login, md.settings.upload_port, md.settings.upload_path, {md.settings.upload_filename});
+ 
+Index: ../trunk-jpl/src/m/coordsystems/lambert2xy.m
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/lambert2xy.m	(revision 15642)
++++ ../trunk-jpl/src/m/coordsystems/lambert2xy.m	(revision 15643)
+@@ -66,4 +66,3 @@
+ 	x=(B*D)*(cos(b)*sin(lam-lam0));
+ 	y=(B/D)*((cos(b0)*sin(b))-(sin(b0)*cos(b)*cos(lam-lam0)));
+ end
+-
+Index: ../trunk-jpl/src/m/coordsystems/xy2lambert.m
+===================================================================
+--- ../trunk-jpl/src/m/coordsystems/xy2lambert.m	(revision 15642)
++++ ../trunk-jpl/src/m/coordsystems/xy2lambert.m	(revision 15643)
+@@ -66,4 +66,3 @@
+ 	lat=lat_rad*180/pi;
+ 	lon=lon_rad*180/pi;
+ end
+-
+Index: ../trunk-jpl/src/m/plot/plot_icefront.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 15642)
++++ ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 15643)
+@@ -34,7 +34,6 @@
+ 
+ 	%Plot zero icelevelset line
+ 
+-
+ else
+ 
+ 	%plot mesh
Index: /issm/oecreview/Archive/15392-16133/ISSM-15643-15644.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15643-15644.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15643-15644.diff	(revision 16134)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15643)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15644)
+@@ -56,9 +56,9 @@
+ 			iomodel->Constant(&temp,FlowequationFeHOEnum);
+ 			switch(temp){
+ 				case 0 : finiteelement = P1Enum;    break;
+-				case 1 : finiteelement = P2Enum;    break;
++				case 1 : finiteelement = P1xP2Enum; break;
+ 				case 2 : finiteelement = P2xP1Enum; break;
+-				case 3 : finiteelement = P1xP2Enum; break;
++				case 3 : finiteelement = P2Enum;    break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15643)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15644)
+@@ -85,9 +85,9 @@
+ 			iomodel->Constant(&temp,FlowequationFeHOEnum);
+ 			switch(temp){
+ 				case 0 : finiteelement = P1Enum;    break;
+-				case 1 : finiteelement = P2Enum;    break;
++				case 1 : finiteelement = P1xP2Enum; break;
+ 				case 2 : finiteelement = P2xP1Enum; break;
+-				case 3 : finiteelement = P1xP2Enum; break;
++				case 3 : finiteelement = P2Enum;    break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15643)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15644)
+@@ -51,9 +51,9 @@
+ 			iomodel->Constant(&temp,FlowequationFeHOEnum);
+ 			switch(temp){
+ 				case 0 : finiteelement = P1Enum;    break;
+-				case 1 : finiteelement = P2Enum;    break;
++				case 1 : finiteelement = P1xP2Enum; break;
+ 				case 2 : finiteelement = P2xP1Enum; break;
+-				case 3 : finiteelement = P1xP2Enum; break;
++				case 3 : finiteelement = P2Enum;    break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15643)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15644)
+@@ -42,6 +42,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'isHO',"is the Higher-Order (HO) approximation used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isFS',"are the Full-FS (FS) equations used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'fe_SSA',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
++		string="%s\n%s"%(string,fielddisplay(self,'fe_HO' ,"Finite Element for HO   0: P1xP1, 1: P1xP2, 2: P2xP1, 3: P2xP2"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vertex_equation',"flow equation for each vertex"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'element_equation',"flow equation for each element"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'borderSSA',"vertices on SSA's border (for tiling)"))
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15643)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15644)
+@@ -112,7 +112,8 @@
+ 			fielddisplay(obj,'isL1L2','is the L1L2 approximation used ?');
+ 			fielddisplay(obj,'isHO','is the Higher-Order (HO) approximation used ?');
+ 			fielddisplay(obj,'isFS','are the Full-FS (FS) equations used ?');
+-			fielddisplay(obj,'fe_SSA','Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
++			fielddisplay(obj,'fe_SSA','Finite Element for SSA  0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
++			fielddisplay(obj,'fe_HO', 'Finite Element for HO   0: P1xP1, 1: P1xP2, 2: P2xP1, 3: P2xP2');
+ 			fielddisplay(obj,'vertex_equation','flow equation for each vertex');
+ 			fielddisplay(obj,'element_equation','flow equation for each element');
+ 			fielddisplay(obj,'borderSSA','vertices on SSA''s border (for tiling)');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15644-15645.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15644-15645.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15644-15645.diff	(revision 16134)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/c/classes/DofIndexing.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 15644)
++++ ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 15645)
+@@ -166,6 +166,8 @@
+ 
+ 	_printf_("DofIndexing:\n");
+ 	_printf_("   gsize:  " << gsize << "\n");
++	_printf_("   fsize:  " << fsize << "\n");
++	_printf_("   ssize:  " << ssize << "\n");
+ 	_printf_("   clone:  " << clone << "\n");
+ 	_printf_("   active: " << active << "\n");
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15644)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15645)
+@@ -3165,13 +3165,12 @@
+ 	IssmDouble  area_coordinates[2][3];
+ 	IssmDouble  normal[2];
+ 
+-	/*Fetch number of nodes and dof for this finite element*/
++	/*Fetch number of nodes for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element vector and other vectors*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters,HOApproximationEnum);
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters,SSAApproximationEnum);
+ 	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15645-15646.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15645-15646.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15645-15646.diff	(revision 16134)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive1402.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1401.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15646-15647.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15646-15647.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15646-15647.diff	(revision 16134)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/test/NightlyRun/test225.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.py	(revision 15646)
++++ ../trunk-jpl/test/NightlyRun/test225.py	(revision 15647)
+@@ -25,7 +25,7 @@
+ field_tolerances=[\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
+ 	2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
+-	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
++	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test119.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.py	(revision 15646)
++++ ../trunk-jpl/test/NightlyRun/test119.py	(revision 15647)
+@@ -22,7 +22,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['x1','y1','x2','y2','nbelements','elapsed time']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,0.8]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1.0]
+ field_values=[\
+ 	x1, y1,\
+ 	x2, y2,\
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 15646)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 15647)
+@@ -15,7 +15,7 @@
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
+ 	2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
+-	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
++	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test429.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.py	(revision 15646)
++++ ../trunk-jpl/test/NightlyRun/test429.py	(revision 15647)
+@@ -20,7 +20,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-09,2e-09,1e-09,2e-09,1e-09]
++field_tolerances=[2e-09,2e-09,1e-09,2e-09,1e-09]
+ field_values=[\
+ 	md.results.DiagnosticSolution.Vx,\
+ 	md.results.DiagnosticSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 15646)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 15647)
+@@ -17,7 +17,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'x1','y1','x2','y2','nbelements','elapsed time'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,0.8};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1.};
+ field_values={...
+ 	x1, y1,...
+ 	x2, y2,...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15647-15648.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15647-15648.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15647-15648.diff	(revision 16134)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/test/Archives/Archive1107.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1102.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1105.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1108.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1103.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1106.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1101.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1110.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1104.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15648-15649.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15648-15649.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15648-15649.diff	(revision 16134)
@@ -0,0 +1,1094 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15648)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15649)
+@@ -1,105 +0,0 @@
+-/*!\file Icefront.h
+- * \brief: header file for icefront object
+- */
+-
+-#ifndef _ICEFRONT_H_
+-#define _ICEFRONT_H_
+-
+-/*Headers:*/
+-/*{{{*/
+-#include "./Load.h"
+-class Hook;
+-class Inputs;
+-class Parameters;
+-class Matpar;
+-class Node;
+-class Element;
+-class IoModel;
+-class ElementVector;
+-class Vertex;
+-/*}}}*/
+-
+-class Icefront: public Load {
+-
+-	public:
+-		int id;
+-		int analysis_type;
+-
+-		/*hooks: */
+-		Hook *hnodes;
+-		Hook *hvertices;
+-		Hook *helement;
+-		Hook *hmatpar;
+-
+-		/*Corresponding fields*/
+-		Matpar   *matpar;
+-		Node    **nodes;
+-		Vertex  **vertices;
+-		Element  *element;
+-
+-		/*inputs and parameters: */
+-		Inputs     *inputs;
+-		Parameters *parameters;
+-
+-		/*Icefront constructors, destructors: {{{*/
+-		Icefront();
+-		Icefront(int icefront_id,int i, IoModel* iomodel,int in_icefront_type, int analysis_type);
+-		Icefront(int element_id,const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type);
+-		~Icefront();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   ObjectEnum();
+-		Object* copy();
+-		/*}}}*/
+-		/*Update virtual functions definitions: {{{*/
+-		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVector(int* vector, int name, int type);
+-		void  InputUpdateFromVector(bool* vector, int name, int type);
+-		void  InputUpdateFromMatrixDakota(IssmDouble* matrix,int ncols,int nrows, int name, int type);
+-		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(int* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(bool* vector, int name, int type);
+-		void  InputUpdateFromConstant(IssmDouble constant, int name);
+-		void  InputUpdateFromConstant(int constant, int name);
+-		void  InputUpdateFromConstant(bool constant, int name);
+-		void  InputUpdateFromSolution(IssmDouble* solution);
+-		void  InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("not implemented yet");};
+-		/*}}}*/
+-		/*Load virtual functions definitions: {{{*/
+-		void  Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+-		void  SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+-		void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+-		void  CreatePVector(Vector<IssmDouble>* pf);
+-		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+-		int   GetNumberOfNodes(void);
+-		void  GetNodesSidList(int* sidlist);
+-		bool  IsPenalty(void);
+-		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+-		void  PenaltyCreatePVector(Vector<IssmDouble>*  pf, IssmDouble kmax);
+-		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax);
+-		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+-		bool  InAnalysis(int analysis_type);
+-		/*}}}*/
+-		/*Load management: {{{*/
+-		void GetDofList(int** pdoflist,int approximation_enum,int setenum);
+-		void GetSegmentNormal(IssmDouble* normal,IssmDouble xyz_list[2][3]);
+-		void GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+-		#ifdef _HAVE_CONTROL_
+-		ElementVector* CreatePVectorAdjointHoriz(void);
+-		#endif
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		ElementVector* CreatePVectorDiagnosticHoriz(void);
+-		ElementVector* CreatePVectorDiagnosticSSA2d(void);
+-		#endif
+-        #ifdef _HAVE_3D_
+-		ElementVector* CreatePVectorDiagnosticSSA3d(void);
+-		ElementVector* CreatePVectorDiagnosticHO(void);
+-		ElementVector* CreatePVectorDiagnosticFS(void);
+-	    #endif
+-		/*}}}*/
+-};
+-
+-#endif  /* _ICEFRONT_H_ */
+Index: ../trunk-jpl/src/c/classes/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15648)
++++ ../trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15649)
+@@ -1,932 +0,0 @@
+-/*!\file Icefront.c
+- * \brief: implementation of the Icefront object
+- */
+-
+-/*Headers:*/
+-/*{{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../classes.h"
+-#include "shared/shared.h"
+-/*}}}*/	
+-
+-/*Load macros*/
+-#define NUMVERTICESSEG 2
+-#define NUMVERTICESQUA 4
+-
+-/*Icefront constructors and destructor*/
+-/*FUNCTION Icefront::Icefront() {{{*/
+-Icefront::Icefront(){
+-
+-	this->inputs=NULL;
+-	this->parameters=NULL;
+-
+-	this->hnodes=NULL;
+-	this->nodes= NULL;
+-	this->hvertices=NULL;
+-	this->vertices= NULL;
+-	this->helement=NULL;
+-	this->element= NULL;
+-	this->hmatpar=NULL;
+-	this->matpar= NULL;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::Icefront(int id, int i, IoModel* iomodel,int analysis_type) {{{*/
+-Icefront::Icefront(int icefront_id,int i, IoModel* iomodel,int in_icefront_type, int in_analysis_type){
+-
+-	int segment_width;
+-	int element;
+-	int numnodes; 
+-	int numvertices; 
+-
+-	/*icefront constructor data: */
+-	int  icefront_eid;
+-	int  icefront_mparid;
+-	int  icefront_fill;
+-	int *icefront_node_ids   = NULL;
+-	int *icefront_vertex_ids = NULL;
+-
+-	/*First, retrieve element index and element type: */
+-	if(iomodel->dim==2){
+-		segment_width=4;
+-	}
+-	else{
+-		segment_width=6;
+-	}
+-	_assert_(iomodel->Data(DiagnosticIcefrontEnum));
+-	element=reCast<int,IssmDouble>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]-1);
+-
+-	/*Build ids for hook constructors: */
+-	icefront_eid    = reCast<int,IssmDouble>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]); //matlab indexing
+-	icefront_mparid = iomodel->numberofelements+1;
+-
+-	if (in_icefront_type==SSA2dIceFrontEnum || in_icefront_type==SSA3dIceFrontEnum){
+-		numnodes    = 2;
+-		numvertices = 2;
+-		icefront_node_ids   = xNew<int>(numnodes);
+-		icefront_vertex_ids = xNew<int>(numvertices);
+-		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+-		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+-		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+-		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+-	}
+-	else if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
+-		numnodes    = 4;
+-		numvertices = 4;
+-		icefront_node_ids   = xNew<int>(numnodes);
+-		icefront_vertex_ids = xNew<int>(numvertices);
+-		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+-		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+-		icefront_node_ids[2]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
+-		icefront_node_ids[3]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+3));
+-		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+-		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+-		icefront_vertex_ids[2]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
+-		icefront_vertex_ids[3]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+3));
+-	}
+-	else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!");
+-
+-	/*Fill*/
+-	icefront_fill=reCast<int>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-1]);
+-
+-	/*Ok, we have everything to build the object: */
+-	this->id=icefront_id;
+-	this->analysis_type=in_analysis_type;
+-
+-	/*Hooks: */
+-	this->hnodes=new Hook(icefront_node_ids,numnodes);
+-	this->hvertices=new Hook(icefront_vertex_ids,numvertices);
+-	this->helement=new Hook(&icefront_eid,1);
+-	this->hmatpar=new Hook(&icefront_mparid,1);
+-
+-	//intialize  and add as many inputs per element as requested: 
+-	this->inputs=new Inputs();
+-	this->inputs->AddInput(new IntInput(FillEnum,icefront_fill));
+-	this->inputs->AddInput(new IntInput(IceFrontTypeEnum,in_icefront_type));
+-
+-	//parameters and hooked fields: we still can't point to them, they may not even exist. Configure will handle this.
+-	this->parameters = NULL;
+-	this->nodes      = NULL;
+-	this->vertices   = NULL;
+-	this->element    = NULL;
+-	this->matpar     = NULL;
+-
+-	/*Clean up*/
+-	xDelete<int>(icefront_node_ids);
+-	xDelete<int>(icefront_vertex_ids);
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type) {{{*/
+-Icefront::Icefront(int element_id, const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in,int in_icefront_type,  int in_analysis_type){
+-
+-	int segment_width;
+-	int element;
+-	int numnodes; 
+-	int numvertices; 
+-	int numberofelements;
+-
+-	/*icefront constructor data: */
+-	int  icefront_eid;
+-	int  icefront_mparid;
+-	int  icefront_node_ids[NUMVERTICESQUA]; //initialize with largest size
+-	int  icefront_vertex_ids[NUMVERTICESQUA]; //initialize with largest size
+-
+-//	/*find parameters: */
+-//	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+-//
+-	/*First, retrieve element index and element type: */
+-	if(strcmp(element_type_in,"2d")==0){
+-		segment_width=4;
+-	}
+-	else{
+-		segment_width=6;
+-	}
+-//	element=element_number;
+-
+-	/*Build ids for hook constructors: */
+-//	icefront_eid=reCast<int,IssmDouble>( *(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)); //matlab indexing
+-//	icefront_mparid=numberofelements+1; //matlab indexing
+-//
+-	if (in_icefront_type==SSA2dIceFrontEnum || in_icefront_type==SSA3dIceFrontEnum){
+-//		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+-//		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+-//		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+-//		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+-	}
+-	else if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
+-//		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+-//		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+-//		icefront_node_ids[2]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
+-//		icefront_node_ids[3]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+3));
+-//		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+-//		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+-//		icefront_vertex_ids[2]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
+-//		icefront_vertex_ids[3]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+3));
+-	}
+-	else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!");
+-
+-	if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
+-		numnodes=4;
+-		numvertices=4;
+-	}
+-	else{
+-		numnodes=2;
+-		numvertices=2;
+-	}
+-
+-	/*Ok, we have everything to build the object: */
+-	this->id=1;
+-	this->analysis_type=in_analysis_type;
+-
+-	/*Hooks: */
+-	this->hnodes=new Hook(icefront_node_ids,numnodes);
+-	this->hvertices=new Hook(icefront_vertex_ids,numvertices);
+-	this->helement=new Hook(&icefront_eid,1);
+-	this->hmatpar=new Hook(&icefront_mparid,1);
+-
+-	//intialize  and add as many inputs per element as requested: 
+-	this->inputs=inputs_in;
+-	this->inputs->AddInput(new IntInput(FillEnum,1)); //We always consider we have water, if above sea level, only air will be applied
+-	this->inputs->AddInput(new IntInput(IceFrontTypeEnum,in_icefront_type)); 
+-
+-	//parameters and hooked fields: we still can't point to them, they may not even exist. Configure will handle this.
+-	this->parameters = NULL;
+-	this->nodes      = NULL;
+-	this->vertices   = NULL;
+-	this->element    = NULL;
+-	this->matpar     = matpar_in;
+-}
+-
+-/*}}}*/
+-/*FUNCTION Icefront::~Icefront() {{{*/
+-Icefront::~Icefront(){
+-	delete inputs;
+-	this->parameters=NULL;
+-	delete hnodes;
+-	delete hvertices;
+-	delete helement;
+-	delete hmatpar;
+-}
+-/*}}}*/
+-
+-/*Object virtual functions definitions:*/
+-/*FUNCTION Icefront::Echo {{{*/
+-void Icefront::Echo(void){
+-	_printf_("Icefront:\n");
+-	_printf_("   id: " << id << "\n");
+-	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+-	hnodes->Echo();
+-	hvertices->Echo();
+-	helement->Echo();
+-	hmatpar->Echo();
+-	_printf_("   parameters: " << parameters << "\n");
+-	if(parameters)parameters->Echo();
+-	_printf_("   inputs: " << inputs << "\n");
+-	if(inputs)inputs->Echo();
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::DeepEcho{{{*/
+-void Icefront::DeepEcho(void){
+-
+-	_printf_("Icefront:\n");
+-	_printf_("   id: " << id << "\n");
+-	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+-	hnodes->DeepEcho();
+-	hvertices->DeepEcho();
+-	helement->DeepEcho();
+-	hmatpar->DeepEcho();
+-	_printf_("   parameters: " << parameters << "\n");
+-	if(parameters)parameters->DeepEcho();
+-	_printf_("   inputs: " << inputs << "\n");
+-	if(inputs)inputs->DeepEcho();
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::Id {{{*/
+-int    Icefront::Id(void){ return id; }
+-/*}}}*/
+-/*FUNCTION Icefront::ObjectEnum{{{*/
+-int Icefront::ObjectEnum(void){
+-
+-	return IcefrontEnum;
+-
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::copy {{{*/
+-Object* Icefront::copy() {
+-
+-	Icefront* icefront=NULL;
+-
+-	icefront=new Icefront();
+-
+-	/*copy fields: */
+-	icefront->id=this->id;
+-	icefront->analysis_type=this->analysis_type;
+-	if(this->inputs){
+-		icefront->inputs=(Inputs*)this->inputs->Copy();
+-	}
+-	else{
+-		icefront->inputs=new Inputs();
+-	}
+-	/*point parameters: */
+-	icefront->parameters=this->parameters;
+-
+-	/*now deal with hooks and objects: */
+-	icefront->hnodes    = (Hook*)this->hnodes->copy();
+-	icefront->hvertices = (Hook*)this->hvertices->copy();
+-	icefront->helement  = (Hook*)this->helement->copy();
+-	icefront->hmatpar   = (Hook*)this->hmatpar->copy();
+-
+-	/*corresponding fields*/
+-	icefront->nodes    = (Node**)icefront->hnodes->deliverp();
+-	icefront->vertices = (Vertex**)icefront->hvertices->deliverp();
+-	icefront->element  = (Element*)icefront->helement->delivers();
+-	icefront->matpar   = (Matpar*)icefront->hmatpar->delivers();
+-
+-	return icefront;
+-
+-}
+-/*}}}*/
+-
+-/*Load virtual functions definitions:*/
+-/*FUNCTION Icefront::Configure {{{*/
+-void  Icefront::Configure(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){
+-
+-	/*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 
+-	 * datasets, using internal ids and offsets hidden in hooks: */
+-	hnodes->configure((DataSet*)nodesin);
+-	hvertices->configure((DataSet*)verticesin);
+-	helement->configure((DataSet*)elementsin);
+-	hmatpar->configure((DataSet*)materialsin);
+-
+-	/*Initialize hooked fields*/
+-	this->nodes    = (Node**)hnodes->deliverp();
+-	this->vertices = (Vertex**)hvertices->deliverp();
+-	this->element  = (Element*)helement->delivers();
+-	this->matpar   = (Matpar*)hmatpar->delivers();
+-
+-	/*point parameters to real dataset: */
+-	this->parameters=parametersin;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::SetCurrentConfiguration {{{*/
+-void  Icefront::SetCurrentConfiguration(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::CreateKMatrix {{{*/
+-void  Icefront::CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs){
+-
+-	/*No stiffness loads applied, do nothing: */
+-	return;
+-
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::CreatePVector {{{*/
+-void  Icefront::CreatePVector(Vector<IssmDouble>* pf){
+-
+-	/*Checks in debugging mode*/
+-	_assert_(nodes);
+-	_assert_(element);
+-	_assert_(matpar);
+-
+-	/*Retrieve parameters: */
+-	ElementVector* pe=NULL;
+-	int analysis_type;
+-	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-
+-	/*Just branch to the correct element icefront vector generator, according to the type of analysis we are carrying out: */
+-	switch(analysis_type){
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			pe=CreatePVectorDiagnosticHoriz();
+-			break;
+-		#endif
+-		#ifdef _HAVE_CONTROL_
+-		case AdjointHorizAnalysisEnum:
+-			pe=CreatePVectorAdjointHoriz();
+-			break;
+-		#endif
+-		default:
+-			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+-	}
+-
+-	/*Add to global Vector*/
+-	if(pe){
+-		pe->AddToGlobal(pf);
+-		delete pe;
+-	}
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::CreateJacobianMatrix{{{*/
+-void  Icefront::CreateJacobianMatrix(Matrix<IssmDouble>* Jff){
+-	this->CreateKMatrix(Jff,NULL);
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::GetNodesSidList{{{*/
+-void Icefront::GetNodesSidList(int* sidlist){
+-
+-	int type;
+-	inputs->GetInputValue(&type,IceFrontTypeEnum);
+-	_assert_(sidlist);
+-	_assert_(nodes);
+-
+-	switch(type){
+-		case SSA2dIceFrontEnum:
+-		case SSA3dIceFrontEnum:
+-			for(int i=0;i<NUMVERTICESSEG;i++) sidlist[i]=nodes[i]->Sid();
+-			return;
+-#ifdef _HAVE_3D_
+-		case HOIceFrontEnum:
+-		case FSIceFrontEnum:
+-			for(int i=0;i<NUMVERTICESQUA;i++) sidlist[i]=nodes[i]->Sid();
+-			return;
+-#endif
+-		default:
+-			_error_("Icefront type " << EnumToStringx(type) << " not supported yet");
+-	}
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::GetNumberOfNodes{{{*/
+-int Icefront::GetNumberOfNodes(void){
+-
+-	int type;
+-	inputs->GetInputValue(&type,IceFrontTypeEnum);
+-
+-	switch(type){
+-		case SSA2dIceFrontEnum:
+-			return NUMVERTICESSEG;
+-#ifdef _HAVE_3D_
+-		case SSA3dIceFrontEnum:
+-			return NUMVERTICESSEG;
+-		case HOIceFrontEnum:
+-			return NUMVERTICESQUA;
+-		case FSIceFrontEnum:
+-			return NUMVERTICESQUA;
+-#endif
+-		default:
+-			_error_("Icefront type " << EnumToStringx(type) << " not supported yet");
+-	}
+-
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::IsPenalty{{{*/
+-bool Icefront::IsPenalty(void){
+-	return false;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::PenaltyCreateKMatrix {{{*/
+-void  Icefront::PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs, IssmDouble kmax){
+-	/*do nothing: */
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::PenaltyCreatePVector{{{*/
+-void  Icefront::PenaltyCreatePVector(Vector<IssmDouble>* pf,IssmDouble kmax){
+-	/*do nothing: */
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::PenaltyCreateJacobianMatrix{{{*/
+-void  Icefront::PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){
+-	this->PenaltyCreateKMatrix(Jff,NULL,kmax);
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::SetwiseNodeConnectivity{{{*/
+-void Icefront::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+-
+-	/*Output */
+-	int d_nz = 0;
+-	int o_nz = 0;
+-
+-	/*Loop over all nodes*/
+-	for(int i=0;i<this->GetNumberOfNodes();i++){
+-
+-		if(!flags[this->nodes[i]->Sid()]){
+-
+-			/*flag current node so that no other element processes it*/
+-			flags[this->nodes[i]->Sid()]=true;
+-
+-			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+-			switch(set2_enum){
+-				case FsetEnum:
+-					if(nodes[i]->indexing.fsize){
+-						if(this->nodes[i]->IsClone())
+-						 o_nz += 1;
+-						else
+-						 d_nz += 1;
+-					}
+-					break;
+-				case GsetEnum:
+-					if(nodes[i]->indexing.gsize){
+-						if(this->nodes[i]->IsClone())
+-						 o_nz += 1;
+-						else
+-						 d_nz += 1;
+-					}
+-					break;
+-				case SsetEnum:
+-					if(nodes[i]->indexing.ssize){
+-						if(this->nodes[i]->IsClone())
+-						 o_nz += 1;
+-						else
+-						 d_nz += 1;
+-					}
+-					break;
+-				default: _error_("not supported");
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointers: */
+-	*pd_nz=d_nz;
+-	*po_nz=o_nz;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InAnalysis{{{*/
+-bool Icefront::InAnalysis(int in_analysis_type){
+-	if (in_analysis_type==this->analysis_type)return true;
+-	else return false;
+-}
+-/*}}}*/
+-
+-/*Update virtual functions definitions:*/
+-/*FUNCTION Icefront::InputUpdateFromVector(IssmDouble* vector, int name, int type) {{{*/
+-void  Icefront::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromVector(int* vector, int name, int type) {{{*/
+-void  Icefront::InputUpdateFromVector(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromVector(bool* vector, int name, int type) {{{*/
+-void  Icefront::InputUpdateFromVector(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type) {{{*/
+-void  Icefront::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type) {{{*/
+-void  Icefront::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromVectorDakota(int* vector, int name, int type) {{{*/
+-void  Icefront::InputUpdateFromVectorDakota(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromVectorDakota(bool* vector, int name, int type) {{{*/
+-void  Icefront::InputUpdateFromVectorDakota(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromConstant(IssmDouble constant, int name) {{{*/
+-void  Icefront::InputUpdateFromConstant(IssmDouble constant, int name){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromConstant(int constant, int name) {{{*/
+-void  Icefront::InputUpdateFromConstant(int constant, int name){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromConstant(bool constant, int name) {{{*/
+-void  Icefront::InputUpdateFromConstant(bool constant, int name){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::InputUpdateFromSolution{{{*/
+-void  Icefront::InputUpdateFromSolution(IssmDouble* solution){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-
+-/*Icefront numerics: */
+-#ifdef _HAVE_DIAGNOSTIC_
+-/*FUNCTION Icefront::CreatePVectorDiagnosticHoriz {{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticHoriz(void){
+-
+-	int type;
+-	inputs->GetInputValue(&type,IceFrontTypeEnum);
+-
+-	switch(type){
+-		case SSA2dIceFrontEnum:
+-			return CreatePVectorDiagnosticSSA2d();
+-        #ifdef _HAVE_3D_
+-		case SSA3dIceFrontEnum:
+-			return CreatePVectorDiagnosticSSA3d();
+-		case HOIceFrontEnum:
+-			return CreatePVectorDiagnosticHO();
+-		case FSIceFrontEnum:
+-			return CreatePVectorDiagnosticFS();
+-	    #endif
+-		default:
+-			_error_("Icefront type " << EnumToStringx(type) << " not supported yet");
+-	}
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::CreatePVectorDiagnosticSSA2d{{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticSSA2d(void){
+-
+-	/*Intermediary*/
+-	int         ig,index1,index2,fill;
+-	IssmDouble  Jdet;
+-	IssmDouble  thickness,bed,pressure,ice_pressure,rho_water,rho_ice,gravity;
+-	IssmDouble  water_pressure,air_pressure,surface_under_water,base_under_water;
+-	IssmDouble  xyz_list[NUMVERTICESSEG][3];
+-	IssmDouble  normal[2];
+-	GaussTria *gauss;
+-
+-	/*return of element is on water*/
+-	Tria* tria=((Tria*)element);
+-	if(tria->IsOnWater()) return NULL;
+-
+-	/*Fetch number of nodes and dof for this finite element*/
+-	int numnodes = tria->NumberofNodes();
+-	int numdof   = numnodes*NDOF2;
+-
+-	/*Initialize Element vector and vectors*/
+-	ElementVector* pe=new ElementVector(tria->nodes,numnodes,this->parameters,SSAApproximationEnum);
+-	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+-
+-	/*Retrieve all inputs and parameters*/
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICESSEG);
+-	Input* thickness_input=tria->inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
+-	Input* bed_input      =tria->inputs->GetInput(BedEnum);       _assert_(bed_input);
+-	inputs->GetInputValue(&fill,FillEnum);
+-	rho_water=matpar->GetRhoWater();
+-	rho_ice  =matpar->GetRhoIce();
+-	gravity  =matpar->GetG();
+-	GetSegmentNormal(&normal[0],xyz_list);
+-
+-	/*Start looping on Gaussian points*/
+-	index1=tria->GetNodeIndex(nodes[0]);
+-	index2=tria->GetNodeIndex(nodes[1]);
+-	gauss=new GaussTria(index1,index2,3);
+-
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
+-
+-		gauss->GaussPoint(ig);
+-
+-		thickness_input->GetInputValue(&thickness,gauss);
+-		bed_input->GetInputValue(&bed,gauss);
+-
+-		switch(fill){
+-			case WaterEnum:
+-				surface_under_water=min(0.,thickness+bed); // 0 if the top of the glacier is above water level
+-				base_under_water=min(0.,bed);              // 0 if the bottom of the glacier is above water level
+-				water_pressure=1.0/2.0*gravity*rho_water*(pow(surface_under_water,2) - pow(base_under_water,2));
+-				break;
+-			case AirEnum:
+-				water_pressure=0;
+-				break;
+-			case IceEnum:
+-				water_pressure=-1.0/2.0*gravity*rho_ice*pow(thickness,2); // we are facing a wall of ice. use water_pressure to cancel the lithostatic pressure.
+-				break;
+-			default:
+-				_error_("fill type " << EnumToStringx(fill) << " not supported yet");
+-		}
+-		ice_pressure=1.0/2.0*gravity*rho_ice*pow(thickness,2);
+-		air_pressure=0;
+-		pressure = ice_pressure + water_pressure + air_pressure;
+-
+-		tria->GetSegmentJacobianDeterminant(&Jdet,&xyz_list[0][0],gauss);
+-		tria->GetNodalFunctions(basis,gauss);
+-
+-		for (int i=0;i<numnodes;i++){
+-			pe->values[2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
+-			pe->values[2*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];
+-		}
+-	}
+-
+-	/*Transform load vector*/
+-	TransformLoadVectorCoord(pe,tria->nodes,numnodes,XYEnum);
+-
+-	/*Clean up and return*/
+-	xDelete<IssmDouble>(basis);
+-	delete gauss;
+-	return pe;
+-}
+-/*}}}*/
+-#endif
+-
+-#ifdef _HAVE_CONTROL_
+-/*FUNCTION Icefront::CreatePVectorAdjointHoriz {{{*/
+-ElementVector* Icefront::CreatePVectorAdjointHoriz(void){
+-
+-	/*No load vector applied to the adjoint*/
+-	return NULL;
+-}
+-/*}}}*/
+-#endif
+-#ifdef _HAVE_3D_
+-/*FUNCTION Icefront::CreatePVectorDiagnosticSSA3d{{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticSSA3d(void){
+-
+-	Icefront *icefront = NULL;
+-	Penta    *penta    = NULL;
+-	Tria     *tria     = NULL;
+-
+-	/*Cast element onto Penta*/
+-	penta   =(Penta*)this->element;
+-
+-	/*Return if not on bed*/
+-	if(!penta->IsOnBed() || penta->IsOnWater()) return NULL;
+-
+-	/*Spawn Tria and call SSA2d*/
+-	tria    =(Tria*)penta->SpawnTria(0,1,2);
+-	icefront=(Icefront*)this->copy();
+-	icefront->element=tria;
+-	icefront->inputs->AddInput(new IntInput(IceFrontTypeEnum,SSA2dIceFrontEnum));
+-	ElementVector* pe=icefront->CreatePVectorDiagnosticSSA2d();
+-
+-	/*clean-up and return*/
+-	delete tria->material;
+-	delete tria;
+-	delete icefront;
+-	return pe;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::CreatePVectorDiagnosticHO{{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticHO(void){
+-
+-	/*Constants*/
+-	const int numdofs = NUMVERTICESQUA *NDOF2;
+-
+-	/*Intermediaries*/
+-	int         i,j,ig,index1,index2,index3,index4;
+-	int         fill;
+-	IssmDouble      surface,pressure,ice_pressure,rho_water,rho_ice,gravity;
+-	IssmDouble      water_pressure,air_pressure;
+-	IssmDouble      Jdet,z_g;
+-	IssmDouble      xyz_list[NUMVERTICESQUA][3];
+-	IssmDouble      normal[3];
+-	IssmDouble      l1l4[4];
+-	GaussPenta *gauss = NULL;
+-
+-	Penta* penta=(Penta*)element;
+-
+-	/*Initialize Element vector and return if necessary*/
+-	if(penta->IsOnWater()) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,HOApproximationEnum);
+-
+-	/*Retrieve all inputs and parameters*/
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICESQUA);
+-	Input* surface_input  =penta->inputs->GetInput(SurfaceEnum);   _assert_(surface_input);
+-	inputs->GetInputValue(&fill,FillEnum);
+-	rho_water=matpar->GetRhoWater();
+-	rho_ice  =matpar->GetRhoIce();
+-	gravity  =matpar->GetG();
+-	GetQuadNormal(&normal[0],xyz_list);
+-
+-	/*Identify which nodes are in the quad: */
+-	index1=element->GetNodeIndex(nodes[0]);
+-	index2=element->GetNodeIndex(nodes[1]);
+-	index3=element->GetNodeIndex(nodes[2]);
+-	index4=element->GetNodeIndex(nodes[3]);
+-
+-	/* Start  looping on the number of gaussian points: */
+-	IssmDouble zmax=xyz_list[0][2]; for(i=1;i<NUMVERTICESQUA;i++) if(xyz_list[i][2]>zmax) zmax=xyz_list[i][2];
+-	IssmDouble zmin=xyz_list[0][2]; for(i=1;i<NUMVERTICESQUA;i++) if(xyz_list[i][2]<zmin) zmin=xyz_list[i][2];
+-	if(zmax>0 && zmin<0) gauss=new GaussPenta(index1,index2,index3,index4,3,10); //refined in vertical because of the sea level discontinuity
+-	else                 gauss=new GaussPenta(index1,index2,index3,index4,3,3);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
+-
+-		gauss->GaussPoint(ig);
+-
+-		penta->GetQuadNodalFunctions(l1l4,gauss,index1,index2,index3,index4);
+-		penta->GetQuadJacobianDeterminant(&Jdet,xyz_list,gauss);
+-		z_g=penta->GetZcoord(gauss);
+-		surface_input->GetInputValue(&surface,gauss);
+-
+-		switch(fill){
+-			case WaterEnum:
+-				water_pressure=rho_water*gravity*min(0.,z_g);//0 if the gaussian point is above water level
+-				break;
+-			case AirEnum:
+-				water_pressure=0;
+-				break;
+-			default:
+-				_error_("fill type " << EnumToStringx(fill) << " not supported yet");
+-		}
+-		ice_pressure=rho_ice*gravity*(surface-z_g);
+-		air_pressure=0;
+-		pressure = ice_pressure + water_pressure + air_pressure;
+-
+-		for(i=0;i<NUMVERTICESQUA;i++) for(j=0;j<NDOF2;j++) pe->values[i*NDOF2+j]+=Jdet*gauss->weight*pressure*l1l4[i]*normal[j];
+-	}
+-
+-	/*Transform load vector*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICESQUA,XYEnum);
+-
+-	/*Clean up and return*/
+-	delete gauss;
+-	return pe;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::CreatePVectorDiagnosticFS{{{*/
+-ElementVector* Icefront::CreatePVectorDiagnosticFS(void){
+-
+-	/*Constants*/
+-	const int numdofs = NUMVERTICESQUA *NDOF4;
+-
+-	/*Intermediaries*/
+-	int         i,j,ig,index1,index2,index3,index4;
+-	int         fill;
+-	IssmDouble      pressure,rho_water,gravity;
+-	IssmDouble      water_pressure,air_pressure;
+-	IssmDouble      Jdet,z_g;
+-	IssmDouble      xyz_list[NUMVERTICESQUA][3];
+-	IssmDouble      normal[3];
+-	IssmDouble      l1l4[4];
+-	GaussPenta *gauss = NULL;
+-
+-	Penta* penta=(Penta*)element;
+-
+-	/*Initialize Element vector and return if necessary*/
+-	if(penta->IsOnWater()) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,FSApproximationEnum);
+-
+-	/*Retrieve all inputs and parameters*/
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICESQUA);
+-	inputs->GetInputValue(&fill,FillEnum);
+-	rho_water=matpar->GetRhoWater();
+-	gravity  =matpar->GetG();
+-	GetQuadNormal(&normal[0],xyz_list);
+-
+-	/*Identify which nodes are in the quad: */
+-	index1=element->GetNodeIndex(nodes[0]);
+-	index2=element->GetNodeIndex(nodes[1]);
+-	index3=element->GetNodeIndex(nodes[2]);
+-	index4=element->GetNodeIndex(nodes[3]);
+-
+-	/* Start  looping on the number of gaussian points: */
+-	IssmDouble zmax=xyz_list[0][2]; for(i=1;i<NUMVERTICESQUA;i++) if(xyz_list[i][2]>zmax) zmax=xyz_list[i][2];
+-	IssmDouble zmin=xyz_list[0][2]; for(i=1;i<NUMVERTICESQUA;i++) if(xyz_list[i][2]<zmin) zmin=xyz_list[i][2];
+-	if(zmax>0 && zmin<0) gauss=new GaussPenta(index1,index2,index3,index4,3,30); //refined in vertical because of the sea level discontinuity
+-	else                 gauss=new GaussPenta(index1,index2,index3,index4,3,3);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
+-
+-		gauss->GaussPoint(ig);
+-
+-		penta->GetQuadNodalFunctions(l1l4,gauss,index1,index2,index3,index4);
+-		penta->GetQuadJacobianDeterminant(&Jdet,xyz_list,gauss);
+-		z_g=penta->GetZcoord(gauss);
+-
+-		switch(fill){
+-			case WaterEnum:
+-				water_pressure=rho_water*gravity*min(0.,z_g);//0 if the gaussian point is above water level
+-				break;
+-			case AirEnum:
+-				water_pressure=0;
+-				break;
+-			default:
+-				_error_("fill type " << EnumToStringx(fill) << " not supported yet");
+-		}
+-		air_pressure=0;
+-		pressure = water_pressure + air_pressure; //no ice pressure fore FS
+-
+-		for(i=0;i<NUMVERTICESQUA;i++){
+-			for(j=0;j<NDOF4;j++){
+-				if(j<3)  pe->values[i*NDOF4+j]+=Jdet*gauss->weight*pressure*l1l4[i]*normal[j];
+-				else     pe->values[i*NDOF4+j]+=0; //pressure term
+-			}
+-		}
+-	}
+-
+-	/*Transform load vector*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICESQUA,XYZPEnum);
+-
+-	/*Clean up and return*/
+-	delete gauss;
+-	return pe;
+-}
+-/*}}}*/
+-#endif
+-/*FUNCTION Icefront::GetDofList {{{*/
+-void  Icefront::GetDofList(int** pdoflist,int approximation_enum,int setenum){
+-
+-	int numberofdofs=0;
+-	int count=0;
+-	int type;
+-	int numberofnodes=2;
+-
+-	/*output: */
+-	int* doflist=NULL;
+-
+-	/*recover type: */
+-	inputs->GetInputValue(&type,IceFrontTypeEnum);
+-
+-	/*Some checks for debugging*/
+-	_assert_(nodes);
+-
+-	/*How many nodes? :*/
+-	if(type==SSA2dIceFrontEnum || type==SSA3dIceFrontEnum)
+-	 numberofnodes=2;
+-	else 
+-	 numberofnodes=4;
+-
+-	/*Figure out size of doflist: */
+-	for(int i=0;i<numberofnodes;i++){
+-		numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+-	}
+-
+-	/*Allocate: */
+-	doflist=xNew<int>(numberofdofs);
+-
+-	/*Populate: */
+-	count=0;
+-	for(int i=0;i<numberofnodes;i++){
+-		nodes[i]->GetDofList(doflist+count,approximation_enum,setenum);
+-		count+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pdoflist=doflist;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::GetSegmentNormal {{{*/
+-void Icefront:: GetSegmentNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]){
+-
+-	/*Build unit outward pointing vector*/
+-	IssmDouble vector[2];
+-	IssmDouble norm;
+-
+-	vector[0]=xyz_list[1][0] - xyz_list[0][0];
+-	vector[1]=xyz_list[1][1] - xyz_list[0][1];
+-
+-	norm=sqrt(pow(vector[0],2.0)+pow(vector[1],2.0));
+-
+-	normal[0]= + vector[1]/norm;
+-	normal[1]= - vector[0]/norm;
+-}
+-/*}}}*/
+-/*FUNCTION Icefront::GetQuadNormal {{{*/
+-void Icefront:: GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]){
+-
+-	/*Build unit outward pointing vector*/
+-	IssmDouble AB[3];
+-	IssmDouble AC[3];
+-	IssmDouble norm;
+-
+-	AB[0]=xyz_list[1][0] - xyz_list[0][0];
+-	AB[1]=xyz_list[1][1] - xyz_list[0][1];
+-	AB[2]=xyz_list[1][2] - xyz_list[0][2];
+-	AC[0]=xyz_list[2][0] - xyz_list[0][0];
+-	AC[1]=xyz_list[2][1] - xyz_list[0][1];
+-	AC[2]=xyz_list[2][2] - xyz_list[0][2];
+-
+-	cross(normal,AB,AC);
+-	norm=sqrt(pow(normal[0],2.0)+pow(normal[1],2.0)+pow(normal[2],2.0));
+-
+-	for(int i=0;i<3;i++) normal[i]=normal[i]/norm;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 15648)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 15649)
+@@ -6,15 +6,15 @@
+ #define _NUMERICALFLUX_H_
+ 
+ /*Headers:*/
+-/*{{{*/
+ #include "./Load.h"
+ class Hook;
+ class Parameters;
+ class Inputs;
+ class IoModel;
++class Element;
++class Vertex;
+ class ElementMatrix;
+ class ElementVector;
+-/*}}}*/
+ 
+ class Numericalflux: public Load {
+ 
+Index: ../trunk-jpl/src/c/classes/Loads/Load.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Load.h	(revision 15648)
++++ ../trunk-jpl/src/c/classes/Loads/Load.h	(revision 15649)
+@@ -8,7 +8,6 @@
+ #define _LOAD_H_
+ 
+ /*Headers:*/
+-/*{{{*/
+ class Node;
+ template <class doublematrix> class Matrix;
+ template <class doubletype> class Vector;
+@@ -18,12 +17,9 @@
+ class Vertices;
+ class Materials;
+ class Parameters;
+-
+ #include "../../datastructures/datastructures.h"
+ #include "../Update.h"
+ 
+-/*}}}*/
+-
+ class Load: public Object,public Update{
+ 
+ 	public: 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15649-15650.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15649-15650.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15649-15650.diff	(revision 16134)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15649)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15650)
+@@ -9,7 +9,6 @@
+ void	CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*DataSets*/
+-	Icefront  *icefront  = NULL;
+ 	Pengrid   *pengrid   = NULL;
+ 
+ 	/*Intermediary*/
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15649)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15650)
+@@ -117,8 +117,6 @@
+ 					./classes/Loads/Penpair.h\
+ 					./classes/Loads/Pengrid.cpp\
+ 					./classes/Loads/Pengrid.h\
+-					./classes/Loads/Icefront.cpp\
+-					./classes/Loads/Icefront.h\
+ 					./classes/Loads/Numericalflux.cpp\
+ 					./classes/Loads/Numericalflux.h\
+ 					./classes/matrix/matrixobjects.h\
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 15649)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 15650)
+@@ -28,7 +28,6 @@
+ #include "./Loads/Loads.h"
+ #include "./Loads/Load.h"
+ #include "./Loads/Friction.h"
+-#include "./Loads/Icefront.h"
+ #include "./Loads/Numericalflux.h"
+ #include "./Loads/Riftfront.h"
+ #include "./Loads/Penpair.h"
Index: /issm/oecreview/Archive/15392-16133/ISSM-15650-15651.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15650-15651.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15650-15651.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/configs/config-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 15650)
++++ ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 15651)
+@@ -21,7 +21,7 @@
+ 	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+ 	--with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+-	--with-graphics-lib=/usr/lib64/libX11.so \
++	--with-graphics-lib="/usr/lib/x86_64-linux-gnu/libX11.so" \
+ 	--with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
+ 	--with-numthreads=18 \
+ 	--enable-debugging 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15651-15652.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15651-15652.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15651-15652.diff	(revision 16134)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/externalpackages/gdal
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal	(revision 15651)
++++ ../trunk-jpl/externalpackages/gdal	(revision 15652)
+
+Property changes on: ../trunk-jpl/externalpackages/gdal
+___________________________________________________________________
+Modified: svn:ignore
+## -1,4 +1,5 ##
+ *.gz
++*.gz
+ *.zip
+ *.a
+ *.so
+Index: ../trunk-jpl/externalpackages/triangle
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle	(revision 15651)
++++ ../trunk-jpl/externalpackages/triangle	(revision 15652)
+
+Property changes on: ../trunk-jpl/externalpackages/triangle
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,4 ##
++*.zip
+ *.gz
+ *.zip
+ *.a
+Index: ../trunk-jpl/execution
+===================================================================
+--- ../trunk-jpl/execution	(revision 15651)
++++ ../trunk-jpl/execution	(revision 15652)
+
+Property changes on: ../trunk-jpl/execution
+___________________________________________________________________
+Modified: svn:ignore
+## -1,5 +1,6 ##
+ *-*-*-*
+ Pig-*
+ test*
++Pig*
+ pig*
+ ad*
Index: /issm/oecreview/Archive/15392-16133/ISSM-15652-15653.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15652-15653.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15652-15653.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/configs/config-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 15652)
++++ ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 15653)
+@@ -18,10 +18,10 @@
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+ 	--with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+ 	--with-graphics-lib="/usr/lib/x86_64-linux-gnu/libX11.so" \
+ 	--with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
+ 	--with-numthreads=18 \
+ 	--enable-debugging 
++	#--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
Index: /issm/oecreview/Archive/15392-16133/ISSM-15653-15654.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15653-15654.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15653-15654.diff	(revision 16134)
@@ -0,0 +1,3774 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15653)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15654)
+@@ -318,6 +318,8 @@
+ 	HOApproximationEnum,
+ 	HOFSApproximationEnum,
+ 	FSApproximationEnum,
++	FSvelocityEnum,
++	FSpressureEnum,
+ 	/*}}}*/
+ 	/*Datasets {{{*/
+ 	ConstraintsEnum,
+@@ -503,6 +505,8 @@
+ 	P2Enum,
+ 	P2xP1Enum,
+ 	P1xP2Enum,
++	P1P1Enum,
++	P1P1GLSEnum,
+ 	MINIEnum,
+ 	MINIcondensedEnum,
+ 	TaylorHoodEnum,
+@@ -593,7 +597,7 @@
+ 	/*}}}*/
+ 	/*Coordinate Systems{{{*/
+ 	XYEnum,
+-	XYZPEnum,
++	XYZEnum,
+ 	/*}}}*/
+ 	/*Toolkits{{{*/
+ 	DenseEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15654)
+@@ -322,6 +322,8 @@
+ 		case HOApproximationEnum : return "HOApproximation";
+ 		case HOFSApproximationEnum : return "HOFSApproximation";
+ 		case FSApproximationEnum : return "FSApproximation";
++		case FSvelocityEnum : return "FSvelocity";
++		case FSpressureEnum : return "FSpressure";
+ 		case ConstraintsEnum : return "Constraints";
+ 		case LoadsEnum : return "Loads";
+ 		case MaterialsEnum : return "Materials";
+@@ -495,6 +497,8 @@
+ 		case P2Enum : return "P2";
+ 		case P2xP1Enum : return "P2xP1";
+ 		case P1xP2Enum : return "P1xP2";
++		case P1P1Enum : return "P1P1";
++		case P1P1GLSEnum : return "P1P1GLS";
+ 		case MINIEnum : return "MINI";
+ 		case MINIcondensedEnum : return "MINIcondensed";
+ 		case TaylorHoodEnum : return "TaylorHood";
+@@ -569,7 +573,7 @@
+ 		case BilinearInterpEnum : return "BilinearInterp";
+ 		case NearestInterpEnum : return "NearestInterp";
+ 		case XYEnum : return "XY";
+-		case XYZPEnum : return "XYZP";
++		case XYZEnum : return "XYZ";
+ 		case DenseEnum : return "Dense";
+ 		case MpiDenseEnum : return "MpiDense";
+ 		case SeqEnum : return "Seq";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15654)
+@@ -328,6 +328,8 @@
+ 	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+ 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+ 	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
++	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
++	      else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
+ 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+ 	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+ 	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+@@ -380,12 +382,12 @@
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+-	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+-	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
++	      if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+@@ -503,12 +505,14 @@
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+-	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+-	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
++	      if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
++	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
++	      else if (strcmp(name,"MINI")==0) return MINIEnum;
++	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+ 	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+@@ -581,7 +585,7 @@
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+-	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
++	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"Dense")==0) return DenseEnum;
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+ 	      else if (strcmp(name,"Seq")==0) return SeqEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15654)
+@@ -63,7 +63,14 @@
+ 			}
+ 		}
+ 		else if(isFS){
+-			finiteelement = P1Enum;
++			iomodel->Constant(&temp,FlowequationFeFSEnum);
++			switch(temp){
++				case 0 : finiteelement = P1P1Enum;          break;
++				case 1 : finiteelement = P1P1GLSEnum;       break;
++				case 2 : finiteelement = MINIcondensedEnum; break;
++				case 3 : finiteelement = MINIEnum;          break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
+ 		}
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15654)
+@@ -67,7 +67,7 @@
+ 	 iscoupling = false;
+ 
+ 	/*If no coupling, call Regular IoModelToConstraintsx, else, use P1 elements only*/
+-	if(!iscoupling && !isFS){
++	if(!iscoupling){
+ 
+ 		/*Get finite element type*/
+ 		if(isSSA){
+@@ -93,10 +93,63 @@
+ 		}
+ 		else if(isFS){
+ 			finiteelement = P1Enum;
++			iomodel->Constant(&temp,FlowequationFeFSEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum; break;//P1P1
++				case 1 : finiteelement = P1Enum; break;//P1P1GSL
++				case 2 : finiteelement = P1Enum; break;//MINIcondensedEnum
++				case 3 : finiteelement = P1bubbleEnum; break;//MINIEnum
++				default: _error_("finite element "<<temp<<" not supported");
++			}
+ 		}
+ 		IoModelToConstraintsx(constraints,iomodel,DiagnosticSpcvxEnum,DiagnosticHorizAnalysisEnum,finiteelement,1);
+ 		IoModelToConstraintsx(constraints,iomodel,DiagnosticSpcvyEnum,DiagnosticHorizAnalysisEnum,finiteelement,2);
+ 
++		if(isFS){
++
++			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
++			iomodel->FetchData(&spcvz,&Mz,&Nz,DiagnosticSpcvzEnum);
++			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
++			iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
++			iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++			iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
++						if(vertices_type[i] == FSApproximationEnum){
++							for(j=0;j<Nz;j++) spcvz[i*Nz+j] = 0.;
++						}
++						else{
++							_error_("not supported");
++						}
++					}
++				}
++			}
++			IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,DiagnosticHorizAnalysisEnum,finiteelement,3);
++			iomodel->DeleteData(spcvz,DiagnosticSpcvzEnum);
++			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
++			iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
++			iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++			iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
++
++			/*Pressure spc*/
++			count = constraints->Size();
++			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
++			iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
++			iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++						constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum));
++						count++;
++					}
++				}
++			}
++			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
++			iomodel->DeleteData(surface,SurfaceEnum);
++			iomodel->DeleteData(z,MeshZEnum);
++		}
++
+ 		*pconstraints=constraints;
+ 		return;
+ 	}
+@@ -324,7 +377,7 @@
+ 
+ 				}
+ 				if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+ 					count++;
+ 				}
+ 			}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15654)
+@@ -59,7 +59,14 @@
+ 		}
+ 		else if(isFS){
+ 			approximation = FSApproximationEnum;
+-			finiteelement = P1Enum;
++			iomodel->Constant(&temp,FlowequationFeFSEnum);
++			switch(temp){
++				case 0 : finiteelement = P1P1Enum;          break;
++				case 1 : finiteelement = P1P1GLSEnum;       break;
++				case 2 : finiteelement = MINIcondensedEnum; break;
++				case 3 : finiteelement = MINIEnum;          break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
+ 		}
+ 
+ 		iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15654)
+@@ -32,6 +32,12 @@
+ 				case FSApproximationEnum:
+ 					numdofs=4;
+ 					break;
++				case FSvelocityEnum:
++					numdofs=3;
++					break;
++				case FSpressureEnum:
++					numdofs=1;
++					break;
+ 				case NoneApproximationEnum:
+ 					numdofs=4;
+ 					break;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15654)
+@@ -96,18 +96,69 @@
+ 			}
+ 			break;
+ 
+-		case MINIcondensedEnum:
++		/*Stokes elements*/
++		case P1P1Enum:
+ 			_assert_(approximation==FSApproximationEnum);
+ 			/*P1 velocity*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
++			/*P1 pressure*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,i,iomodel,analysis,FSpressureEnum));
++				}
++			}
++			break;
++		case P1P1GLSEnum:
++			_assert_(approximation==FSApproximationEnum);
++			/*P1 velocity*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++				}
++			}
++			/*P1 pressure*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,i,iomodel,analysis,FSpressureEnum));
++				}
++			}
++			break;
++		case MINIcondensedEnum:
++			_assert_(approximation==FSApproximationEnum);
++			/*P1 velocity (bubble statically condensed)*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++				}
++			}
++			/*P1 pressure*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,i,iomodel,analysis,FSpressureEnum));
++				}
++			}
++			break;
++		case MINIEnum:
++			_assert_(approximation==FSApproximationEnum);
++			/*P1+ velocity*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++				}
++			}
++			for(i=0;i<iomodel->numberofelements;i++){
++				if(iomodel->my_elements[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
++				}
++			}
+ 			/*P1+ pressure statically condensed*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,i,i,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
+ 			break;
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 15653)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 15654)
+@@ -8,5 +8,6 @@
+ 
+ /* local prototypes: */
+ void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof=1);
++void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,IssmDouble* spcdata,int M,int N,int analysis_type,int finite_element,int dof=1);
+ 
+ #endif  /* _IOMODELTOELEMENTINPUTX_H */
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15654)
+@@ -10,25 +10,11 @@
+ void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof){
+ 
+ 	/*intermediary: */
+-	int         i,j,count;
+-	IssmDouble  yts;
+-	FILE       *fid              = NULL;
++	FILE       *fid = NULL;
+ 	int         code,vector_layout;
+-	IssmDouble *times            = NULL;
+-	IssmDouble *values           = NULL;
+-	bool        spcpresent       = false;
+-
+-	/*P2 finite elements*/
+-	int   v1,v2;
+-	bool *my_edges = NULL;
+-
+-	/*variables being fetched: */
+ 	IssmDouble *spcdata = NULL;
+ 	int         M,N;
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&yts,ConstantsYtsEnum);
+-
+ 	/*First of, find the record for the enum, and get code  of data type: */
+ 	fid=iomodel->SetFilePointerToData(&code, &vector_layout,vector_enum);
+ 	if(code!=7)_error_("expecting a IssmDouble vector for constraints with enum " << EnumToStringx(vector_enum));
+@@ -37,10 +23,34 @@
+ 	/*Fetch vector:*/
+ 	iomodel->FetchData(&spcdata,&M,&N,vector_enum);
+ 
++	/*Call IoModelToConstraintsx*/
++	IoModelToConstraintsx(constraints,iomodel,spcdata,M,N,analysis_type,finite_element,dof);
++
++	/*Clean up*/
++	xDelete<IssmDouble>(spcdata);
++}
++
++void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,IssmDouble* spcdata,int M,int N,int analysis_type,int finite_element,int dof){
++
++	/*intermediary: */
++	int         i,j,count,elementnbv;
++	IssmDouble  value;
++	IssmDouble *times            = NULL;
++	IssmDouble *values           = NULL;
++	bool        spcpresent       = false;
++
++	/*P2 finite elements*/
++	int   v1,v2;
++	bool *my_edges = NULL;
++
+ 	switch(finite_element){
+ 		case P1Enum:
+ 			/*Nothing else to do*/
+ 			break;
++		case P1bubbleEnum:
++			if(iomodel->dim!=3) _error_("3d is the only supported dimension");
++			elementnbv = 6;
++			break;
+ 		case P1xP2Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			break;
+@@ -88,6 +98,28 @@
+ 					}
+ 				}
+ 				break;
++			case P1bubbleEnum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++						if (!xIsNan<IssmDouble>(spcdata[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
++							count++;
++						}
++					}
++				}
++				for(i=0;i<iomodel->numberofelements;i++){
++					if(iomodel->my_elements[i]){
++						value = spcdata[iomodel->elements[i*elementnbv+0]-1];
++						for(j=1;j<elementnbv;j++) value += spcdata[iomodel->elements[i*elementnbv+j]-1];
++						value = value/reCast<IssmDouble,int>(elementnbv+0);
++						if(!xIsNan<IssmDouble>(value)){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
++											dof,value,analysis_type));
++							count++;
++						}
++					}
++				}
++				break;
+ 			case P1xP2Enum:
+ 				for(i=0;i<iomodel->numberofvertices;i++){
+ 					if((iomodel->my_vertices[i])){
+@@ -144,7 +176,7 @@
+ 
+ 		/*figure out times: */
+ 		times=xNew<IssmDouble>(N);
+-		for(j=0;j<N;j++) times[j]=spcdata[(M-1)*N+j]*yts;
++		for(j=0;j<N;j++) times[j]=spcdata[(M-1)*N+j];
+ 
+ 		switch(finite_element){
+ 			case P1Enum:
+@@ -290,11 +322,10 @@
+ 		}
+ 	}
+ 	else{
+-		_error_("Size of field " << EnumToStringx(vector_enum) << " not supported");
++		_error_("Size of spc field not supported");
+ 	}
+ 
+ 	/*Free ressources:*/
+-	xDelete<IssmDouble>(spcdata);
+ 	xDelete<IssmDouble>(times);
+ 	xDelete<IssmDouble>(values);
+ 	xDelete<bool>(my_edges);
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15654)
+@@ -569,6 +569,41 @@
+ 	*pmu_prime=mu_prime;
+ }
+ /*}}}*/
++/*FUNCTION Matdamageice::GetViscosityDerivativeEpsSquareFS{{{*/
++void  Matdamageice::GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* epsilon){
++
++	/*output: */
++	IssmDouble mu_prime;
++	IssmDouble mu,n,eff2;
++
++	/*input strain rate: */
++	IssmDouble exx,eyy,ezz,exy,exz,eyz;
++
++	/*Get visocisty and n*/
++	GetViscosity3d(&mu,epsilon);
++	n=GetN();
++
++	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
++				(epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){
++		mu_prime=0.5*pow((IssmDouble)10,(IssmDouble)14);
++	}
++	else{
++		/*Retrive strain rate components: */
++		exx=epsilon[0];
++		eyy=epsilon[1];
++		ezz=epsilon[2];
++		exy=epsilon[3];
++		exz=epsilon[4];
++		eyz=epsilon[5];
++		eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy + exz*exz + eyz*eyz;
++
++		mu_prime=(1-n)/(2*n) * mu/eff2;
++	}
++
++	/*Assign output pointers:*/
++	*pmu_prime=mu_prime;
++}
++/*}}}*/
+ /*FUNCTION Matdamageice::GetViscosity2dDerivativeEpsSquare{{{*/
+ void  Matdamageice::GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon){
+ 
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15654)
+@@ -503,6 +503,41 @@
+ 	*pmu_prime=mu_prime;
+ }
+ /*}}}*/
++/*FUNCTION Matice::GetViscosityDerivativeEpsSquareFS{{{*/
++void  Matice::GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* epsilon){
++
++	/*output: */
++	IssmDouble mu_prime;
++	IssmDouble mu,n,eff2;
++
++	/*input strain rate: */
++	IssmDouble exx,eyy,exy,exz,eyz,ezz;
++
++	/*Get visocisty and n*/
++	GetViscosity3d(&mu,epsilon);
++	n=GetN();
++
++	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
++				(epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){
++		mu_prime=0.5*pow((IssmDouble)10,(IssmDouble)14);
++	}
++	else{
++		/*Retrive strain rate components: */
++		exx=epsilon[0];
++		eyy=epsilon[1];
++		ezz=epsilon[2];
++		exy=epsilon[3];
++		exz=epsilon[4];
++		eyz=epsilon[5];
++		eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy + exz*exz + eyz*eyz;
++
++		mu_prime=(1-n)/(2*n) * mu/eff2;
++	}
++
++	/*Assign output pointers:*/
++	*pmu_prime=mu_prime;
++}
++/*}}}*/
+ /*FUNCTION Matice::GetViscosity2dDerivativeEpsSquare{{{*/
+ void  Matice::GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon){
+ 
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 15654)
+@@ -31,6 +31,7 @@
+ 		virtual void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
++		virtual void       GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
+ 		virtual IssmDouble GetA()=0;
+ 		virtual IssmDouble GetB()=0;
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 15654)
+@@ -55,6 +55,7 @@
+ 		void   GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+ 		void   GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+ 		void   GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
++		void   GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		void   GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		IssmDouble GetA();
+ 		IssmDouble GetB();
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 15654)
+@@ -62,6 +62,7 @@
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+ 		void GetViscosityZComplement(IssmDouble*, IssmDouble*){_error_("not supported");};
+ 		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
++		void       GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		IssmDouble GetA();
+ 		IssmDouble GetB();
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 15654)
+@@ -92,6 +92,7 @@
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
++		void       GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+ 		IssmDouble GetA(){_error_("not supported");};
+ 		IssmDouble GetB(){_error_("not supported");};
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15654)
+@@ -474,7 +474,7 @@
+ 	Ke->values[2*NDOF4+2]= kmax*pow((IssmDouble)10,penalty_offset);
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,&node,NUMVERTICES,XYZPEnum);
++	TransformStiffnessMatrixCoord(Ke,&node,NUMVERTICES,XYZEnum);
+ 
+ 	/*Clean up and return*/
+ 	return Ke;
+Index: ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 15654)
+@@ -222,7 +222,6 @@
+ 	this->col_ssize=0;
+ 	this->col_slocaldoflist=NULL;
+ 	this->col_sglobaldoflist=NULL;
+-
+ }
+ /*}}}*/
+ /*FUNCTION ElementMatrix::~ElementMatrix(){{{*/
+@@ -422,6 +421,7 @@
+ void ElementMatrix::Init(ElementMatrix* Ke){
+ 
+ 	_assert_(Ke);
++	_assert_(this);
+ 
+ 	this->nrows =Ke->nrows;
+ 	this->ncols =Ke->ncols;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15654)
+@@ -3352,10 +3352,8 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+-	/*P1 element only for now*/
+ 	gauss=new GaussTria();
+ 	for(int i=0;i<numnodes;i++){
+-
+ 		gauss->GaussNode(numnodes,i);
+ 
+ 		/*Recover vx and vy*/
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15654)
+@@ -249,71 +249,136 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetBFS {{{*/
+-void PentaRef::GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++/*FUNCTION PentaRef::GetBFSstrainrate {{{*/
++void PentaRef::GetBFSstrainrate(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+ 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*NDOF4. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+-	 * by: 		Bi=[ dh/dx          0              0       0  ]
+-	 *					[   0           dh/dy           0       0  ]
+-	 *					[   0             0           dh/dy     0  ]
+-	 *					[ 1/2*dh/dy    1/2*dh/dx        0       0  ]
+-	 *					[ 1/2*dh/dz       0         1/2*dh/dx   0  ]
+-	 *					[   0          1/2*dh/dz    1/2*dh/dy   0  ]
+-	 *					[   0             0             0       h  ]
+-	 *					[ dh/dx         dh/dy         dh/dz     0  ]
++	 * by: 		Bi=[ dh/dx          0              0     ]
++	 *					[   0           dh/dy           0     ]
++	 *					[   0             0           dh/dy   ]
++	 *					[ 1/2*dh/dy    1/2*dh/dx        0     ]
++	 *					[ 1/2*dh/dz       0         1/2*dh/dx ]
++	 *					[   0          1/2*dh/dz    1/2*dh/dy ]
+ 	 *	where h is the interpolation function for node i.
+ 	 *	Same thing for Bb except the last column that does not exist.
+ 	 */
+ 
+-	int i;
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
+-	IssmDouble dbasismini[3][NUMNODESP1b];
+-	IssmDouble basis[NUMNODESP1];
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(3*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 
+-	/*Get dbasismini in actual coordinate system: */
+-	GetNodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss);
+-	GetNodalFunctionsP1(basis, gauss);
++	/*Build B: */
++	for(int i=0;i<numnodes;i++){
++		B[3*numnodes*0+3*i+0] = dbasis[0*numnodes+i+0];
++		B[3*numnodes*0+3*i+1] = 0.;
++		B[3*numnodes*0+3*i+2] = 0.;
+ 
+-	/*Build B: */
+-	for(i=0;i<NUMNODESP1b;i++){
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i+0]; //B[0][NDOF4*i+0] = dbasis[0][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dbasismini[1][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = dbasismini[2][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = .5*dbasismini[1][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = .5*dbasismini[0][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+0] = .5*dbasismini[2][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2] = .5*dbasismini[0][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+0] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1] = .5*dbasismini[2][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2] = .5*dbasismini[1][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+0] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+0] = dbasismini[0][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1] = dbasismini[1][i+0];
+-		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2] = dbasismini[2][i+0];
++		B[3*numnodes*1+3*i+0] = 0.;
++		B[3*numnodes*1+3*i+1] = dbasis[1*numnodes+i+0];
++		B[3*numnodes*1+3*i+2] = 0.;
++
++		B[3*numnodes*2+3*i+0] = 0.;
++		B[3*numnodes*2+3*i+1] = 0.;
++		B[3*numnodes*2+3*i+2] = dbasis[2*numnodes+i+0];
++
++		B[3*numnodes*3+3*i+0] = .5*dbasis[1*numnodes+i+0];
++		B[3*numnodes*3+3*i+1] = .5*dbasis[0*numnodes+i+0];
++		B[3*numnodes*3+3*i+2] = 0.;
++
++		B[3*numnodes*4+3*i+0] = .5*dbasis[2*numnodes+i+0];
++		B[3*numnodes*4+3*i+1] = 0.;
++		B[3*numnodes*4+3*i+2] = .5*dbasis[0*numnodes+i+0];
++
++		B[3*numnodes*5+3*i+0] = 0.;
++		B[3*numnodes*5+3*i+1] = .5*dbasis[2*numnodes+i+0];
++		B[3*numnodes*5+3*i+2] = .5*dbasis[1*numnodes+i+0];
+ 	}
+ 
+-	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3] = basis[i];
+-		B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3] = 0.;
++	/*Clean up*/
++	xDelete<IssmDouble>(dbasis);
++}
++/*}}}*/
++/*FUNCTION PentaRef::GetBFS {{{*/
++void PentaRef::GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
++
++	/*Compute B  matrix. B=[Bv1 Bv2 ... Bp1 Bp2 ...] where Bvi is of size 3*NDOF3. 
++	 * For node i, Bvi can be expressed in the actual coordinate system
++	 * by: 	   Bvi=[ dh/dx          0              0      ]
++	 *					[   0           dh/dy           0      ]
++	 *					[   0             0           dh/dy    ]
++	 *					[ 1/2*dh/dy    1/2*dh/dx        0      ]
++	 *					[ 1/2*dh/dz       0         1/2*dh/dx  ]
++	 *					[   0          1/2*dh/dz    1/2*dh/dy  ]
++	 *					[   0             0             0      ]
++	 *					[ dh/dx         dh/dy         dh/dz    ]
++	 *
++	 * by: 	  Bpi=[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ h ]
++	 *					[ 0 ]
++	 *	where h is the interpolation function for node i.
++	 *	Same thing for Bb except the last column that does not exist.
++	 */
++
++	/*Fetch number of nodes for this finite element*/
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumnodes = this->NumberofNodesVelocity();
++
++	/*Get nodal functions derivatives*/
++	IssmDouble* vdbasis=xNew<IssmDouble>(3*vnumnodes);
++	IssmDouble* pbasis =xNew<IssmDouble>(pnumnodes);
++	GetNodalFunctionsDerivativesVelocity(vdbasis,xyz_list,gauss);
++	GetNodalFunctionsPressure(pbasis,gauss);
++
++	/*Build B: */
++	for(int i=0;i<vnumnodes;i++){
++		B[(3*vnumnodes+pnumnodes)*0+3*i+0] = vdbasis[0*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*0+3*i+1] = 0.;
++		B[(3*vnumnodes+pnumnodes)*0+3*i+2] = 0.;
++		B[(3*vnumnodes+pnumnodes)*1+3*i+0] = 0.;
++		B[(3*vnumnodes+pnumnodes)*1+3*i+1] = vdbasis[1*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*1+3*i+2] = 0.;
++		B[(3*vnumnodes+pnumnodes)*2+3*i+0] = 0.;
++		B[(3*vnumnodes+pnumnodes)*2+3*i+1] = 0.;
++		B[(3*vnumnodes+pnumnodes)*2+3*i+2] = vdbasis[2*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*3+3*i+0] = .5*vdbasis[1*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*3+3*i+1] = .5*vdbasis[0*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*3+3*i+2] = 0.;
++		B[(3*vnumnodes+pnumnodes)*4+3*i+0] = .5*vdbasis[2*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*4+3*i+1] = 0.;
++		B[(3*vnumnodes+pnumnodes)*4+3*i+2] = .5*vdbasis[0*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*5+3*i+0] = 0.;
++		B[(3*vnumnodes+pnumnodes)*5+3*i+1] = .5*vdbasis[2*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*5+3*i+2] = .5*vdbasis[1*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*6+3*i+0] = 0.;
++		B[(3*vnumnodes+pnumnodes)*6+3*i+1] = 0.;
++		B[(3*vnumnodes+pnumnodes)*6+3*i+2] = 0.;
++		B[(3*vnumnodes+pnumnodes)*7+3*i+0] = vdbasis[0*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*7+3*i+1] = vdbasis[1*vnumnodes+i];
++		B[(3*vnumnodes+pnumnodes)*7+3*i+2] = vdbasis[2*vnumnodes+i];
+ 	}
++	for(int i=0;i<pnumnodes;i++){
++		B[(3*vnumnodes+pnumnodes)*0+(3*vnumnodes)+i] = 0.;
++		B[(3*vnumnodes+pnumnodes)*1+(3*vnumnodes)+i] = 0.;
++		B[(3*vnumnodes+pnumnodes)*2+(3*vnumnodes)+i] = 0.;
++		B[(3*vnumnodes+pnumnodes)*3+(3*vnumnodes)+i] = 0.;
++		B[(3*vnumnodes+pnumnodes)*4+(3*vnumnodes)+i] = 0.;
++		B[(3*vnumnodes+pnumnodes)*5+(3*vnumnodes)+i] = 0.;
++		B[(3*vnumnodes+pnumnodes)*6+(3*vnumnodes)+i] = pbasis[i];
++		B[(3*vnumnodes+pnumnodes)*7+(3*vnumnodes)+i] = 0.;
++	}
+ 
++	/*Clean up*/
++	xDelete<IssmDouble>(vdbasis);
++	xDelete<IssmDouble>(pbasis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBFSGLS {{{*/
+@@ -387,66 +452,77 @@
+ 	/*	Compute B'  matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 
+ 	 *	For node i, Bi' can be expressed in the actual coordinate system
+ 	 *	by: 
+-	 *				Bi'=[  dh/dx   0          0       0]
+-	 *					 [   0      dh/dy      0       0]
+-	 *					 [   0      0         dh/dz    0]
+-	 *					 [  dh/dy   dh/dx      0       0]
+-	 *					 [  dh/dz   0        dh/dx     0]
+-	 *					 [   0      dh/dz    dh/dy     0]
+-	 *					 [  dh/dx   dh/dy    dh/dz     0]
+-	 *					 [   0      0          0       h]
++	 *			Bvi' = [  dh/dx   0          0    ]
++	 *					 [   0      dh/dy      0    ]
++	 *					 [   0      0         dh/dz ]
++	 *					 [  dh/dy   dh/dx      0    ]
++	 *					 [  dh/dz   0        dh/dx  ]
++	 *					 [   0      dh/dz    dh/dy  ]
++	 *					 [  dh/dx   dh/dy    dh/dz  ]
++	 *					 [   0      0          0    ]
++	 *
++	 * by: 	  Bpi=[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ 0 ]
++	 *					[ h ]
+ 	 *	where h is the interpolation function for node i.
+-	 *
+-	 * 	Same thing for the bubble fonction except that there is no fourth column
+ 	 */
+ 
+-	int i;
+-	IssmDouble dbasismini[3][NUMNODESP1b];
+-	IssmDouble basis[NUMNODESP1];
++	/*Fetch number of nodes for this finite element*/
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumnodes = this->NumberofNodesVelocity();
+ 
+-	/*Get dbasismini in actual coordinate system: */
+-	GetNodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss);
+-	GetNodalFunctionsP1(basis, gauss);
++	/*Get nodal functions derivatives*/
++	IssmDouble* vdbasis=xNew<IssmDouble>(3*vnumnodes);
++	IssmDouble* pbasis =xNew<IssmDouble>(pnumnodes);
++	GetNodalFunctionsDerivativesVelocity(vdbasis,xyz_list,gauss);
++	GetNodalFunctionsPressure(pbasis,gauss);
+ 
+-	/*B_primeuild B_prime: */
+-	for(i=0;i<NUMNODESP1b;i++){
+-		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dbasismini[1][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = dbasismini[2][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = dbasismini[1][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = dbasismini[0][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+0] = dbasismini[2][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2] = dbasismini[0][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+0] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1] = dbasismini[2][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2] = dbasismini[1][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+0] = dbasismini[0][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1] = dbasismini[1][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2] = dbasismini[2][i];
+-		B_prime[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+0] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2] = 0.;
++	/*Build B_prime: */
++	for(int i=0;i<vnumnodes;i++){
++		B_prime[(3*vnumnodes+pnumnodes)*0+3*i+0] = vdbasis[0*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*0+3*i+1] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*0+3*i+2] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*1+3*i+0] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*1+3*i+1] = vdbasis[1*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*1+3*i+2] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*2+3*i+0] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*2+3*i+1] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*2+3*i+2] = vdbasis[2*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*3+3*i+0] = vdbasis[1*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*3+3*i+1] = vdbasis[0*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*3+3*i+2] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*4+3*i+0] = vdbasis[2*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*4+3*i+1] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*4+3*i+2] = vdbasis[0*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*5+3*i+0] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*5+3*i+1] = vdbasis[2*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*5+3*i+2] = vdbasis[1*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*6+3*i+0] = vdbasis[0*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*6+3*i+1] = vdbasis[1*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*6+3*i+2] = vdbasis[2*vnumnodes+i];
++		B_prime[(3*vnumnodes+pnumnodes)*7+3*i+0] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*7+3*i+1] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*7+3*i+2] = 0.;
+ 	}
+-
+-	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		B_prime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3] = 0.;
+-		B_prime[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3] = basis[i];
++	for(int i=0;i<pnumnodes;i++){
++		B_prime[(3*vnumnodes+pnumnodes)*0+(3*vnumnodes)+i] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*1+(3*vnumnodes)+i] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*2+(3*vnumnodes)+i] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*3+(3*vnumnodes)+i] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*4+(3*vnumnodes)+i] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*5+(3*vnumnodes)+i] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*6+(3*vnumnodes)+i] = 0.;
++		B_prime[(3*vnumnodes+pnumnodes)*7+(3*vnumnodes)+i] = pbasis[i];
+ 	}
+ 
++	/*Clean up*/
++	xDelete<IssmDouble>(vdbasis);
++	xDelete<IssmDouble>(pbasis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetBprimeFSGLS {{{*/
+@@ -672,33 +748,39 @@
+ 	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+ 	 * by: 
+-	 *       Li=[ h 0 ]
+-	 *	 	      [ 0 h ]
+-	 *		      [ 0 0 ]
+-	 *		      [ 0 0 ]
++	 *       Li=[ h 0 0 0 ]
++	 *	 	      [ 0 h 0 0 ]
+ 	 * where h is the interpolation function for node i.
+ 	 */
+ 
+-	const int num_dof=4;
+-	IssmDouble L1L2l3[NUMNODESP1_2d];
++	/*Fetch number of nodes for this finite element*/
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumdof   = pnumnodes;
++	int vnumdof   = vnumnodes*NDOF3;
+ 
+-	/*Get L1L2l3 in actual coordinate system: */
+-	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+-	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+-	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
++	/*Get nodal functions derivatives*/
++	IssmDouble* vbasis=xNew<IssmDouble>(vnumnodes);
++	GetNodalFunctionsVelocity(vbasis,gauss);
+ 
+ 	/*Build LFS: */
+-	for(int i=0;i<3;i++){
+-		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
+-		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+-		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+-		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
++	for(int i=0;i<vnumnodes;i++){
++		LFS[(vnumdof+pnumdof)*0+3*i+0] = vbasis[i];
++		LFS[(vnumdof+pnumdof)*0+3*i+1] = 0.;
++		LFS[(vnumdof+pnumdof)*0+3*i+2] = 0.;
+ 
+-		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+-		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
+-		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+-		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
++		LFS[(vnumdof+pnumdof)*1+3*i+0] = 0.;
++		LFS[(vnumdof+pnumdof)*1+3*i+1] = vbasis[i];
++		LFS[(vnumdof+pnumdof)*1+3*i+2] = 0.;
+ 	}
++
++	for(int i=0;i<pnumnodes;i++){
++		LFS[(vnumdof+pnumdof)*0+i+vnumdof+0] = 0.;
++		LFS[(vnumdof+pnumdof)*1+i+vnumdof+0] = 0.;
++	}
++
++	/*Clean-up*/
++	xDelete<IssmDouble>(vbasis);
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetLprimeFS {{{*/
+@@ -1195,6 +1277,66 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION PentaRef::GetNodalFunctionsVelocity{{{*/
++void PentaRef::GetNodalFunctionsVelocity(IssmDouble* basis,GaussPenta* gauss){
++	/*This routine returns the values of the nodal functions  at the gaussian point.*/
++
++	switch(this->element_type){
++		case P1P1Enum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = P1P1Enum;
++			return;
++		case P1P1GLSEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = P1P1GLSEnum;
++			return;
++		case MINIcondensedEnum:
++			this->element_type = P1bubbleEnum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = MINIcondensedEnum;
++			return;
++		case MINIEnum:
++			this->element_type = P1bubbleEnum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = MINIEnum;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION PentaRef::GetNodalFunctionsPressure{{{*/
++void PentaRef::GetNodalFunctionsPressure(IssmDouble* basis,GaussPenta* gauss){
++	/*This routine returns the values of the nodal functions  at the gaussian point.*/
++
++	switch(this->element_type){
++		case P1P1Enum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = P1P1Enum;
++			return;
++		case P1P1GLSEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = P1P1GLSEnum;
++			return;
++		case MINIcondensedEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = MINIcondensedEnum;
++			return;
++		case MINIEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = MINIEnum;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsDerivatives{{{*/
+ void PentaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+@@ -1230,6 +1372,62 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION PentaRef::GetNodalFunctionsDerivativesVelocity{{{*/
++void PentaRef::GetNodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list, GaussPenta* gauss){
++	switch(this->element_type){
++		case P1P1Enum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = P1P1Enum;
++			return;
++		case P1P1GLSEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = P1P1GLSEnum;
++			return;
++		case MINIcondensedEnum:
++			this->element_type = P1bubbleEnum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = MINIcondensedEnum;
++			return;
++		case MINIEnum:
++			this->element_type = P1bubbleEnum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = MINIEnum;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION PentaRef::GetNodalFunctionsDerivativesPressure{{{*/
++void PentaRef::GetNodalFunctionsDerivativesPressure(IssmDouble* dbasis,IssmDouble* xyz_list, GaussPenta* gauss){
++	switch(this->element_type){
++		case P1P1Enum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = P1P1Enum;
++			return;
++		case P1P1GLSEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = P1P1GLSEnum;
++			return;
++		case MINIcondensedEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = MINIcondensedEnum;
++			return;
++		case MINIEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = MINIEnum;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
+ /*FUNCTION PentaRef::GetNodalFunctionsDerivativesReference{{{*/
+ void PentaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussPenta* gauss){
+ 
+@@ -1270,29 +1468,29 @@
+ 			return;
+ 		case P1bubbleEnum:
+ 			/*Nodal function 1*/
+-			dbasis[NUMNODESP1*0+0]   = (zeta-1.)/4.;
+-			dbasis[NUMNODESP1*1+0]   = SQRT3/12.*(zeta-1.);
+-			dbasis[NUMNODESP1*2+0]   = -.5*gauss->coord1;
++			dbasis[NUMNODESP1b*0+0]   = (zeta-1.)/4.;
++			dbasis[NUMNODESP1b*1+0]   = SQRT3/12.*(zeta-1.);
++			dbasis[NUMNODESP1b*2+0]   = -.5*gauss->coord1;
+ 			/*Nodal function 2*/
+-			dbasis[NUMNODESP1*0+1]   = (1.-zeta)/4.;
+-			dbasis[NUMNODESP1*1+1]   = SQRT3/12.*(zeta-1);
+-			dbasis[NUMNODESP1*2+1]   = -.5*gauss->coord2;
++			dbasis[NUMNODESP1b*0+1]   = (1.-zeta)/4.;
++			dbasis[NUMNODESP1b*1+1]   = SQRT3/12.*(zeta-1);
++			dbasis[NUMNODESP1b*2+1]   = -.5*gauss->coord2;
+ 			/*Nodal function 3*/
+-			dbasis[NUMNODESP1*0+2]   = 0.;
+-			dbasis[NUMNODESP1*1+2]   = SQRT3/6.*(1.-zeta);
+-			dbasis[NUMNODESP1*2+2]   = -.5*gauss->coord3;
++			dbasis[NUMNODESP1b*0+2]   = 0.;
++			dbasis[NUMNODESP1b*1+2]   = SQRT3/6.*(1.-zeta);
++			dbasis[NUMNODESP1b*2+2]   = -.5*gauss->coord3;
+ 			/*Nodal function 4*/
+-			dbasis[NUMNODESP1*0+3]   = -(1.+zeta)/4.;
+-			dbasis[NUMNODESP1*1+3]   = -SQRT3/12.*(1.+zeta);
+-			dbasis[NUMNODESP1*2+3]   = .5*gauss->coord1;
++			dbasis[NUMNODESP1b*0+3]   = -(1.+zeta)/4.;
++			dbasis[NUMNODESP1b*1+3]   = -SQRT3/12.*(1.+zeta);
++			dbasis[NUMNODESP1b*2+3]   = .5*gauss->coord1;
+ 			/*Nodal function 5*/
+-			dbasis[NUMNODESP1*0+4]   = (1.+zeta)/4.;
+-			dbasis[NUMNODESP1*1+4]   = -SQRT3/12.*(1.+zeta);
+-			dbasis[NUMNODESP1*2+4]   = .5*gauss->coord2;
++			dbasis[NUMNODESP1b*0+4]   = (1.+zeta)/4.;
++			dbasis[NUMNODESP1b*1+4]   = -SQRT3/12.*(1.+zeta);
++			dbasis[NUMNODESP1b*2+4]   = .5*gauss->coord2;
+ 			/*Nodal function 6*/
+-			dbasis[NUMNODESP1*0+5]   = 0.;
+-			dbasis[NUMNODESP1*1+5]   = SQRT3/6.*(1.+zeta);
+-			dbasis[NUMNODESP1*2+5]   = .5*gauss->coord3;
++			dbasis[NUMNODESP1b*0+5]   = 0.;
++			dbasis[NUMNODESP1b*1+5]   = SQRT3/6.*(1.+zeta);
++			dbasis[NUMNODESP1b*2+5]   = .5*gauss->coord3;
+ 			/*Nodal function 7*/
+ 			dbasis[NUMNODESP1b*0+6] = 27.*(1.+zeta)*(1.-zeta)*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);
+ 			dbasis[NUMNODESP1b*1+6] = 27.*(1.+zeta)*(1.-zeta)*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
+@@ -1703,14 +1901,62 @@
+ int PentaRef::NumberofNodes(void){
+ 
+ 	switch(this->element_type){
+-		case P1Enum:    return NUMNODESP1;
+-		case P2Enum:    return NUMNODESP2;
+-		case P2xP1Enum: return NUMNODESP2xP1;
+-		case P1xP2Enum: return NUMNODESP1xP2;
+-		case MINIEnum:  return NUMNODESP1b;
++		case P1Enum:            return NUMNODESP1;
++		case P1bubbleEnum:      return NUMNODESP1b;
++		case P2Enum:            return NUMNODESP2;
++		case P2xP1Enum:         return NUMNODESP2xP1;
++		case P1xP2Enum:         return NUMNODESP1xP2;
++		case P1P1Enum:          return NUMNODESP1*2;
++		case P1P1GLSEnum:       return NUMNODESP1*2;
++		case MINIcondensedEnum: return NUMNODESP1*2;
++		case MINIEnum:          return NUMNODESP1b+NUMNODESP1;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+ 	return -1;
+ }
+ /*}}}*/
++/*FUNCTION PentaRef::NumberofNodesPressure{{{*/
++int PentaRef::NumberofNodesPressure(void){
++
++	switch(this->element_type){
++		case P1P1Enum:          return NUMNODESP1;
++		case P1P1GLSEnum:       return NUMNODESP1;
++		case MINIcondensedEnum: return NUMNODESP1;
++		case MINIEnum:          return NUMNODESP1;
++		default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	return -1;
++}
++/*}}}*/
++/*FUNCTION PentaRef::NumberofNodesVelocity{{{*/
++int PentaRef::NumberofNodesVelocity(void){
++
++	switch(this->element_type){
++		case P1P1Enum:          return NUMNODESP1;
++		case P1P1GLSEnum:       return NUMNODESP1;
++		case MINIcondensedEnum: return NUMNODESP1b;
++		case MINIEnum:          return NUMNODESP1b;
++		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	return -1;
++}
++/*}}}*/
++/*FUNCTION PentaRef::NumberofNodesVelocityFinal{{{*/
++int PentaRef::NumberofNodesVelocityFinal(void){
++
++	/*When static condensation is applied, the final number of nodes might be different*/
++
++	switch(this->element_type){
++		case P1P1Enum:          return NUMNODESP1;
++		case P1P1GLSEnum:       return NUMNODESP1;
++		case MINIcondensedEnum: return NUMNODESP1;
++		case MINIEnum:          return NUMNODESP1b;
++		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	return -1;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15654)
+@@ -864,6 +864,55 @@
+ 	*pdoflist=doflist;
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetDofListVelocity{{{*/
++void  Penta::GetDofListVelocity(int** pdoflist,int setenum){
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodesVelocity();
++
++	/*First, figure out size of doflist and create it: */
++	int numberofdofs=0;
++	for(int i=0;i<numnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(FSApproximationEnum,setenum);
++
++	/*Allocate output*/
++	int* doflist=xNew<int>(numberofdofs);
++
++	/*Populate: */
++	int count=0;
++	for(int i=0;i<numnodes;i++){
++		nodes[i]->GetDofList(doflist+count,FSApproximationEnum,setenum);
++		count+=nodes[i]->GetNumberOfDofs(FSApproximationEnum,setenum);
++	}
++
++	/*Assign output pointers:*/
++	*pdoflist=doflist;
++}
++/*}}}*/
++/*FUNCTION Penta::GetDofListPressure{{{*/
++void  Penta::GetDofListPressure(int** pdoflist,int setenum){
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++
++	/*First, figure out size of doflist and create it: */
++	int numberofdofs=0;
++	for(int i=vnumnodes;i<vnumnodes+pnumnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(FSApproximationEnum,setenum);
++
++	/*Allocate output*/
++	int* doflist=xNew<int>(numberofdofs);
++
++	/*Populate: */
++	int count=0;
++	for(int i=vnumnodes;i<vnumnodes+pnumnodes;i++){
++		nodes[i]->GetDofList(doflist+count,FSApproximationEnum,setenum);
++		count+=nodes[i]->GetNumberOfDofs(FSApproximationEnum,setenum);
++	}
++
++	/*Assign output pointers:*/
++	*pdoflist=doflist;
++}
++/*}}}*/
+ /*FUNCTION Penta::GetGroundedPortion{{{*/
+ IssmDouble Penta::GetGroundedPortion(IssmDouble* xyz_list){
+ 	/*Computeportion of the element that is grounded*/ 
+@@ -1033,9 +1082,10 @@
+ int Penta::GetNodeIndex(Node* node){
+ 
+ 	_assert_(nodes);
+-	for(int i=0;i<NUMVERTICES;i++){
+-		if(node==nodes[i])
+-		 return i;
++	int numnodes = this->NumberofNodes();
++
++	for(int i=0;i<numnodes;i++){
++		if(node==nodes[i]) return i;
+ 	}
+ 	_error_("Node provided not found among element nodes");
+ 
+@@ -1324,7 +1374,6 @@
+ 	 * epsilon=[exx eyy ezz exy exz eyz]
+ 	 */
+ 
+-	int i;
+ 	IssmDouble epsilonvx[6];
+ 	IssmDouble epsilonvy[6];
+ 	IssmDouble epsilonvz[6];
+@@ -1340,7 +1389,7 @@
+ 	vz_input->GetVzStrainRate3d(epsilonvz,xyz_list,gauss);
+ 
+ 	/*Sum all contributions*/
+-	for(i=0;i<6;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i]+epsilonvz[i];
++	for(int i=0;i<6;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i]+epsilonvz[i];
+ }
+ /*}}}*/
+ /*FUNCTION Penta::GetUpperElement{{{*/
+@@ -2678,7 +2727,6 @@
+    for (int iv = 0; iv < NUMVERTICES; iv++){
+      agd[iv]=PddSurfaceMassBlance(&monthlytemperatures[iv][0], &monthlyprec[iv][0], pdds, pds, 
+ 				  signorm, yts, h[iv], s[iv], rho_ice, rho_water, desfac, s0p);
+-     //printf("mass balance %f \n",agd[iv]);
+    }
+ 
+    /*Update inputs*/    
+@@ -3224,6 +3272,39 @@
+ 			penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
+ 			penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
+ 			break;
++		case P1P1Enum: case P1P1GLSEnum: case MINIcondensedEnum:
++			numnodes         = 12;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
++			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
++			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
++			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
++			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
++			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+0];
++			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+1];
++			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+2];
++			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+3];
++			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+4];
++			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+5];
++			break;
++		case MINIEnum:
++			numnodes         = 13;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
++			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
++			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
++			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
++			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
++			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
++			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+0];
++			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+1];
++			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+2];
++			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+3];
++			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+4];
++			penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+5];
++			break;
+ 		default:
+ 			_error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
+ 	}
+@@ -4976,9 +5057,6 @@
+ /*FUNCTION Penta::CreateKMatrixAdjointFS{{{*/
+ ElementMatrix* Penta::CreateKMatrixAdjointFS(void){
+ 
+-	/*Constants*/
+-	const int    numdof=NDOF4*NUMVERTICES;
+-
+ 	/*Intermediaries */
+ 	int        i,j;
+ 	bool       incomplete_adjoint;
+@@ -4998,6 +5076,11 @@
+ 	ElementMatrix* Ke=CreateKMatrixDiagnosticFS();
+ 	if(incomplete_adjoint) return Ke;
+ 
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int numdof    = vnumnodes*NDOF3 + pnumnodes*NDOF1;
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+@@ -5044,7 +5127,7 @@
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -5102,14 +5185,199 @@
+ /*FUNCTION Penta::CreatePVectorAdjointFS{{{*/
+ ElementVector* Penta::CreatePVectorAdjointFS(void){
+ 
+-	if (!IsOnSurface()) return NULL;
++	if(!IsOnSurface()) return NULL;
+ 
+-	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
+-	ElementVector* pe=tria->CreatePVectorAdjointFS();
+-	delete tria->material; delete tria;
++	/*Intermediaries */
++	int         i,j,resp;
++	int        *responses= NULL;
++	int         num_responses;
++	IssmDouble  Jdet2d;
++	IssmDouble  obs_velocity_mag,velocity_mag;
++	IssmDouble  dux,duy;
++	IssmDouble  epsvel  = 2.220446049250313e-16;
++	IssmDouble  meanvel = 3.170979198376458e-05;  /*1000 m/yr */
++	IssmDouble  scalex  = 0,scaley=0,scale=0,S=0;
++	IssmDouble  vx,vy,vxobs,vyobs,weight;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble	xyz_list_tria[NUMVERTICES2D][3];
+ 
+-	/*clean up and return*/
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF3;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	IssmDouble*    vbasis = xNew<IssmDouble>(vnumdof);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
++	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	Input* weights_input = inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
++	Input* vx_input      = inputs->GetInput(VxEnum);                                 _assert_(vx_input);
++	Input* vy_input      = inputs->GetInput(VyEnum);                                 _assert_(vy_input);
++	Input* vxobs_input   = inputs->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
++	Input* vyobs_input   = inputs->GetInput(InversionVyObsEnum);                     _assert_(vyobs_input);
++
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++
++	/*Get Surface if required by one response*/
++	for(resp=0;resp<num_responses;resp++){
++		if(responses[resp]==SurfaceAverageVelMisfitEnum){
++			inputs->GetInputValue(&S,SurfaceAreaEnum); break;
++		}
++	}
++
++	/* Start  looping on the number of gaussian points: */
++	GaussPenta* gauss=new GaussPenta(3,4,5,4);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		/* Get Jacobian determinant: */
++		GetTriaJacobianDeterminant(&Jdet2d,&xyz_list_tria[0][0],gauss);
++
++		/*Get all parameters at gaussian point*/
++		vx_input->GetInputValue(&vx,gauss);
++		vy_input->GetInputValue(&vy,gauss);
++		vxobs_input->GetInputValue(&vxobs,gauss);
++		vyobs_input->GetInputValue(&vyobs,gauss);
++		GetNodalFunctionsVelocity(vbasis,gauss);
++
++		/*Loop over all requested responses*/
++		for(resp=0;resp<num_responses;resp++){
++
++			weights_input->GetInputValue(&weight,gauss,resp);
++
++			switch(responses[resp]){
++
++				case SurfaceAbsVelMisfitEnum:
++					/*
++					 *      1  [           2              2 ]
++					 * J = --- | (u - u   )  +  (v - v   )  |
++					 *      2  [       obs            obs   ]
++					 *
++					 *        dJ
++					 * DU = - -- = (u   - u )
++					 *        du     obs
++					 */
++					for(i=0;i<vnumnodes;i++){
++						dux=vxobs-vx;
++						duy=vyobs-vy;
++						pe->values[i*NDOF3+0]+=dux*weight*Jdet2d*gauss->weight*vbasis[i]; 
++						pe->values[i*NDOF3+1]+=duy*weight*Jdet2d*gauss->weight*vbasis[i]; 
++					}
++					break;
++				case SurfaceRelVelMisfitEnum:
++					/*
++					 *      1  [     \bar{v}^2             2   \bar{v}^2              2 ]
++					 * J = --- | -------------  (u - u   ) + -------------  (v - v   )  |
++					 *      2  [  (u   + eps)^2       obs    (v   + eps)^2       obs    ]
++					 *              obs                        obs                      
++					 *
++					 *        dJ     \bar{v}^2
++					 * DU = - -- = ------------- (u   - u )
++					 *        du   (u   + eps)^2    obs
++					 *               obs
++					 */
++					for(i=0;i<vnumnodes;i++){
++						scalex=pow(meanvel/(vxobs+epsvel),2); if(vxobs==0)scalex=0;
++						scaley=pow(meanvel/(vyobs+epsvel),2); if(vyobs==0)scaley=0;
++						dux=scalex*(vxobs-vx);
++						duy=scaley*(vyobs-vy);
++						pe->values[i*NDOF3+0]+=dux*weight*Jdet2d*gauss->weight*vbasis[i]; 
++						pe->values[i*NDOF3+1]+=duy*weight*Jdet2d*gauss->weight*vbasis[i]; 
++					}
++					break;
++				case SurfaceLogVelMisfitEnum:
++					/*
++					 *                 [        vel + eps     ] 2
++					 * J = 4 \bar{v}^2 | log ( -----------  ) |  
++					 *                 [       vel   + eps    ]
++					 *                            obs
++					 *
++					 *        dJ                 2 * log(...)
++					 * DU = - -- = - 4 \bar{v}^2 -------------  u
++					 *        du                 vel^2 + eps
++					 *            
++					 */
++					for(i=0;i<vnumnodes;i++){
++						velocity_mag    =sqrt(pow(vx,   2)+pow(vy,   2))+epsvel;
++						obs_velocity_mag=sqrt(pow(vxobs,2)+pow(vyobs,2))+epsvel;
++						scale=-8*pow(meanvel,2)/pow(velocity_mag,2)*log(velocity_mag/obs_velocity_mag);
++						dux=scale*vx;
++						duy=scale*vy;
++						pe->values[i*NDOF3+0]+=dux*weight*Jdet2d*gauss->weight*vbasis[i]; 
++						pe->values[i*NDOF3+1]+=duy*weight*Jdet2d*gauss->weight*vbasis[i]; 
++					}
++					break;
++				case SurfaceAverageVelMisfitEnum:
++					/*
++					 *      1                    2              2
++					 * J = ---  sqrt(  (u - u   )  +  (v - v   )  )
++					 *      S                obs            obs
++					 *
++					 *        dJ      1       1 
++					 * DU = - -- = - --- ----------- * 2 (u - u   )
++					 *        du      S  2 sqrt(...)           obs
++					 */
++					for(i=0;i<vnumnodes;i++){
++						scale=1./(S*2*sqrt(pow(vx-vxobs,2)+pow(vy-vyobs,2))+epsvel);
++						dux=scale*(vxobs-vx);
++						duy=scale*(vyobs-vy);
++						pe->values[i*NDOF3+0]+=dux*weight*Jdet2d*gauss->weight*vbasis[i]; 
++						pe->values[i*NDOF3+1]+=duy*weight*Jdet2d*gauss->weight*vbasis[i]; 
++					}
++					break;
++				case SurfaceLogVxVyMisfitEnum:
++					/*
++					 *      1            [        |u| + eps     2          |v| + eps     2  ]
++					 * J = --- \bar{v}^2 | log ( -----------  )   +  log ( -----------  )   |  
++					 *      2            [       |u    |+ eps              |v    |+ eps     ]
++					 *                              obs                       obs
++					 *        dJ                              1      u                             1
++					 * DU = - -- = - \bar{v}^2 log(u...) --------- ----  ~ - \bar{v}^2 log(u...) ------
++					 *        du                         |u| + eps  |u|                           u + eps
++					 */
++					for(i=0;i<vnumnodes;i++){
++						dux = - meanvel*meanvel * log((fabs(vx)+epsvel)/(fabs(vxobs)+epsvel)) / (vx+epsvel);
++						duy = - meanvel*meanvel * log((fabs(vy)+epsvel)/(fabs(vyobs)+epsvel)) / (vy+epsvel);
++						pe->values[i*NDOF3+0]+=dux*weight*Jdet2d*gauss->weight*vbasis[i]; 
++						pe->values[i*NDOF3+1]+=duy*weight*Jdet2d*gauss->weight*vbasis[i]; 
++					}
++					break;
++				case DragCoefficientAbsGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case ThicknessAbsGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case ThicknessAcrossGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case ThicknessAlongGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case RheologyBbarAbsGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				default:
++					_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
++			}
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<int>(responses);
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(vbasis);
++	delete gauss;
+ 	return pe;
+ }
+ /*}}}*/
+@@ -5493,36 +5761,51 @@
+ /*FUNCTION Penta::InputUpdateFromSolutionAdjointFS {{{*/
+ void  Penta::InputUpdateFromSolutionAdjointFS(IssmDouble* solution){
+ 
+-	const int    numdof=NDOF4*NUMVERTICES;
++	int          i;
++	int*         vdoflist=NULL;
++	int*         pdoflist=NULL;
++	IssmDouble   FSreconditioning;
++	GaussPenta  *gauss;
+ 
+-	int    i;
+-	IssmDouble values[numdof];
+-	IssmDouble lambdax[NUMVERTICES];
+-	IssmDouble lambday[NUMVERTICES];
+-	IssmDouble lambdaz[NUMVERTICES];
+-	IssmDouble lambdap[NUMVERTICES];
+-	int*   doflist=NULL;
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocityFinal();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF3;
++	int pnumdof   = pnumnodes*NDOF1;
+ 
++	/*Initialize values*/
++	IssmDouble* vvalues = xNew<IssmDouble>(vnumdof);
++	IssmDouble* pvalues = xNew<IssmDouble>(pnumdof);
++	IssmDouble* lambdax = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* lambday = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* lambdaz = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* lambdap = xNew<IssmDouble>(pnumnodes);
++
+ 	/*Get dof list: */
+-	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++	GetDofListVelocity(&vdoflist,GsetEnum);
++	GetDofListPressure(&pdoflist,GsetEnum);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
++	for(i=0;i<vnumdof;i++) vvalues[i]=solution[vdoflist[i]];
++	for(i=0;i<pnumdof;i++) pvalues[i]=solution[pdoflist[i]];
+ 
+-	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+-	for(i=0;i<NUMVERTICES;i++){
+-		lambdax[i]=values[i*NDOF4+0];
+-		lambday[i]=values[i*NDOF4+1];
+-		lambdaz[i]=values[i*NDOF4+2];
+-		lambdap[i]=values[i*NDOF4+3];
++	/*Transform solution in Cartesian Space*/
++	TransformSolutionCoord(&vvalues[0],nodes,vnumnodes,XYZEnum);
+ 
+-		/*Check solution*/
+-		if(xIsNan<IssmDouble>(lambdax[i])) _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(lambday[i])) _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(lambdaz[i])) _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(lambdap[i])) _error_("NaN found in solution vector");
++	/*fill in all arrays: */
++	for(i=0;i<vnumnodes;i++){
++		lambdax[i] = vvalues[i*NDOF3+0]; if(xIsNan<IssmDouble>(lambdax[i])) _error_("NaN found in solution vector");
++		lambday[i] = vvalues[i*NDOF3+1]; if(xIsNan<IssmDouble>(lambday[i])) _error_("NaN found in solution vector");
++		lambdaz[i] = vvalues[i*NDOF3+2]; if(xIsNan<IssmDouble>(lambdaz[i])) _error_("NaN found in solution vector");
+ 	}
++	for(i=0;i<pnumnodes;i++){
++		lambdap[i] = pvalues[i]; if(xIsNan<IssmDouble>(lambdap[i])) _error_("NaN found in solution vector");
++	}
+ 
++	/*Recondition pressure and compute vel: */
++	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	for(i=0;i<pnumnodes;i++) lambdap[i]=lambdap[i]*FSreconditioning;
++
+ 	/*Add vx and vy as inputs to the tria element: */
+ 	this->inputs->AddInput(new PentaInput(AdjointxEnum,lambdax,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(AdjointyEnum,lambday,P1Enum));
+@@ -5530,7 +5813,14 @@
+ 	this->inputs->AddInput(new PentaInput(AdjointpEnum,lambdap,P1Enum));
+ 
+ 	/*Free ressources:*/
+-	xDelete<int>(doflist);
++	xDelete<int>(vdoflist);
++	xDelete<int>(pdoflist);
++	xDelete<IssmDouble>(lambdap);
++	xDelete<IssmDouble>(lambdaz);
++	xDelete<IssmDouble>(lambday);
++	xDelete<IssmDouble>(lambdax);
++	xDelete<IssmDouble>(vvalues);
++	xDelete<IssmDouble>(pvalues);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionAdjointHoriz {{{*/
+@@ -6050,22 +6340,26 @@
+ 
+ 	/*output: */
+ 	ElementVector* De=NULL;
+-	/*intermediary: */
+-	int approximation;
+-	int i;
+ 
+ 	/*Initialize Element vector and return if necessary*/
++	int approximation;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=FSApproximationEnum) return NULL;
+ 
+-	De=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
+ 
+-	for (i=0;i<NUMVERTICES;i++){
+-		De->values[i*4+0]=VelocityEnum;
+-		De->values[i*4+1]=VelocityEnum;
+-		De->values[i*4+2]=VelocityEnum;
+-		De->values[i*4+3]=PressureEnum;
++	De=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++
++	for(int i=0;i<vnumnodes;i++){
++		De->values[i*3+0]=VelocityEnum;
++		De->values[i*3+1]=VelocityEnum;
++		De->values[i*3+2]=VelocityEnum;
+ 	}
++	for(int i=0;i<pnumnodes;i++){
++		De->values[vnumnodes*3+i]=PressureEnum;
++	}
+ 
+ 	return De;
+ }
+@@ -6316,7 +6610,7 @@
+ 		node_list[i+0*NUMVERTICES] = pentabase->nodes[i];
+ 		node_list[i+1*NUMVERTICES] = this->nodes[i];
+ 		cs_list[i+0*NUMVERTICES] = XYEnum;
+-		cs_list[i+1*NUMVERTICES] = XYZPEnum;
++		cs_list[i+1*NUMVERTICES] = XYZEnum;
+ 	}
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+@@ -6426,7 +6720,7 @@
+ 		node_list[i+0*NUMVERTICES] = this->nodes[i];
+ 		node_list[i+1*NUMVERTICES] = this->nodes[i];
+ 		cs_list[i+0*NUMVERTICES] = XYEnum;
+-		cs_list[i+1*NUMVERTICES] = XYZPEnum;
++		cs_list[i+1*NUMVERTICES] = XYZEnum;
+ 	}
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -6515,7 +6809,7 @@
+ 		node_list[i+0*NUMVERTICES] = this->nodes[i];
+ 		node_list[i+1*NUMVERTICES] = this->nodes[i];
+ 		cs_list[i+0*NUMVERTICES] = XYEnum;
+-		cs_list[i+1*NUMVERTICES] = XYZPEnum;
++		cs_list[i+1*NUMVERTICES] = XYZEnum;
+ 	}
+ 
+ 	/*compute all stiffness matrices for this element*/
+@@ -6525,7 +6819,7 @@
+ 	delete Ke1;
+ 	delete Ke2;
+ 	Ke1=CreateKMatrixDiagnosticHO(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
+-	Ke2=CreateKMatrixDiagnosticFS(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZPEnum);
++	Ke2=CreateKMatrixDiagnosticFS(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZEnum);
+ 
+ 	for(i=0;i<numdofs;i++) for(j=0;j<NUMVERTICES;j++){
+ 		Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+0]+=Ke2->values[i*numdofs+NDOF4*j+0];
+@@ -7098,28 +7392,14 @@
+ /*FUNCTION Penta::CreateKMatrixDiagnosticFS{{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticFS(void){
+ 
+-	int fe_FS;
+-	ElementMatrix* Ke1;
+-	ElementMatrix* Ke2;
+-	ElementMatrix* Ke;
+-	parameters->FindParam(&fe_FS,FlowequationFeFSEnum);
++	ElementMatrix* Ke1 = NULL;
++	ElementMatrix* Ke2 = NULL;
++	ElementMatrix* Ke  = NULL;
+ 
+-	switch(fe_FS){
+-		case 0:
+-			/*compute all stiffness matrices for this element*/
+-			Ke1=CreateKMatrixDiagnosticFSViscous();
+-			Ke2=CreateKMatrixDiagnosticFSFriction();
+-			Ke =new ElementMatrix(Ke1,Ke2);
+-			break;
+-		case 1:
+-			/*compute all stiffness matrices for this element*/
+-			Ke1=CreateKMatrixDiagnosticFSGLSViscous();
+-			Ke2=CreateKMatrixDiagnosticFSFriction();
+-			Ke =new ElementMatrix(Ke1,Ke2);
+-			break;
+-		default:
+-			_error_("Finite element" << fe_FS << " not supported yet");
+-	}
++	/*compute all stiffness matrices for this element*/
++	Ke1=CreateKMatrixDiagnosticFSViscous();
++	Ke2=CreateKMatrixDiagnosticFSFriction();
++	Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+ 	delete Ke1;
+@@ -7128,72 +7408,9 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticFSViscous {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticFSViscous(void){
++/*FUNCTION Penta::KMatrixGLSstabilization{{{*/
++void Penta::KMatrixGLSstabilization(ElementMatrix* Ke){
+ 
+-	/*Intermediaries */
+-	int        i,approximation;
+-	IssmDouble Jdet,viscosity,FSreconditioning;
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble B[8][27];
+-	IssmDouble B_prime[8][27];
+-	IssmDouble D_scalar;
+-	IssmDouble D[8][8]={0.0};
+-	IssmDouble Ke_temp[27][27]={0.0}; //for the six nodes and the bubble 
+-	GaussPenta *gauss=NULL;
+-
+-	/*If on water or not FS, skip stiffness: */
+-	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+-
+-	/*Retrieve all inputs and parameters*/
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+-	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+-
+-	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(5,5);
+-	for(int ig=gauss->begin();ig<gauss->end();ig++){
+-
+-		gauss->GaussPoint(ig);
+-
+-		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBFS(&B[0][0],&xyz_list[0][0],gauss); 
+-		GetBprimeFS(&B_prime[0][0],&xyz_list[0][0],gauss); 
+-
+-		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+-
+-		D_scalar=gauss->weight*Jdet;
+-		for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity;
+-		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
+-
+-		TripleMultiply( &B[0][0],8,27,1,
+-					&D[0][0],8,8,0,
+-					&B_prime[0][0],8,27,0,
+-					&Ke_temp[0][0],1);
+-	}
+-
+-	/*Condensation*/
+-	ReduceMatrixFS(Ke->values, &Ke_temp[0][0]);
+-	//Ke->Echo();
+-	//_error_("stop");
+-
+-	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
+-
+-	/*Clean up and return*/
+-	delete gauss;
+-	return Ke;
+-}
+-/*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticFSGLSViscous {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticFSGLSViscous(void){
+-
+ 	int        numdof  = NUMVERTICES*NDOF4;
+ 
+ 	/*Intermediaries */
+@@ -7222,11 +7439,6 @@
+ 	int p,q,ii;
+ 	int c=3; //index of pressure
+ 
+-	/*If on water or not FS, skip stiffness: */
+-	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+-
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+@@ -7238,7 +7450,6 @@
+ 	rigidity=material->GetB();
+ 	diameter=MinEdgeLength(xyz_list);
+ 
+-	if(stabilization){
+ 		gauss=new GaussPenta();
+ 		for(int iv=0;iv<6;iv++){
+ 			gauss->GaussVertex(iv);
+@@ -7250,7 +7461,6 @@
+ 			}
+ 		}
+ 		delete gauss;
+-	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+@@ -7259,102 +7469,159 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBFSGLS(&B[0][0],&xyz_list[0][0],gauss); 
+-		GetBprimeFSGLS(&B_prime[0][0],&xyz_list[0][0],gauss); 
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		D_scalar=gauss->weight*Jdet;
+-		for (i=0;i<6;i++) D[i][i]=D_scalar*2.*2.*viscosity;
+-		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
+ 
+-		TripleMultiply( &B[0][0],8,24,1,
+-					&D[0][0],8,8,0,
+-					&B_prime[0][0],8,24,0,
+-					&Ke_temp[0][0],0);
+ 
+-		for(i=0;i<numdof;i++) for(j=0;j<numdof;j++) Ke->values[i*numdof+j]+=Ke_temp[i][j];
+-
+ 		/*Add stabilization*/
+-		if(stabilization){
+-			GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
+-			dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
+-			mu = 2.*viscosity;
+-			for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
+-				SU[p][i][j]=0.;
+-				SW[p][i][j]=0.;
+-			}
+-			for(p=0;p<6;p++){
+-				for(i=0;i<3;i++){
+-					SU[p][i][c] += dbasis[i][p];
+-					SW[p][c][i] += dbasis[i][p];
+-					for(j=0;j<3;j++){
+-						SU[p][i][i] += -dmu[j]*dbasis[j][p];
+-						SU[p][i][j] += -dmu[i]*dbasis[i][p];
+-						for(ii=0;ii<6;ii++){
+-							SU[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
+-							SU[p][i][j] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
+-						}
+-						SW[p][i][i] += -dmu[j]*dbasis[j][p];
+-						SW[p][j][i] += -dmu[j]*dbasis[i][p];
+-						for(ii=0;ii<6;ii++){
+-							SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
+-							SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
+-						}
++		GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
++		dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
++		mu = 2.*viscosity;
++		for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
++			SU[p][i][j]=0.;
++			SW[p][i][j]=0.;
++		}
++		for(p=0;p<6;p++){
++			for(i=0;i<3;i++){
++				SU[p][i][c] += dbasis[i][p];
++				SW[p][c][i] += dbasis[i][p];
++				for(j=0;j<3;j++){
++					SU[p][i][i] += -dmu[j]*dbasis[j][p];
++					SU[p][i][j] += -dmu[i]*dbasis[i][p];
++					for(ii=0;ii<6;ii++){
++						SU[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
++						SU[p][i][j] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
+ 					}
++					SW[p][i][i] += -dmu[j]*dbasis[j][p];
++					SW[p][j][i] += -dmu[j]*dbasis[i][p];
++					for(ii=0;ii<6;ii++){
++						SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
++						SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
++					}
+ 				}
+ 			}
+-			IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
+-			for(p=0;p<6;p++){
+-				for(q=0;q<6;q++){
+-					for(i=0;i<4;i++){
+-						for(j=0;j<4;j++){
+-							Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][0]*SU[q][0][j];
+-							Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][1]*SU[q][1][j];
+-							Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][2]*SU[q][2][j];
+-						}
++		}
++		IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
++		for(p=0;p<6;p++){
++			for(q=0;q<6;q++){
++				for(i=0;i<4;i++){
++					for(j=0;j<4;j++){
++						Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][0]*SU[q][0][j];
++						Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][1]*SU[q][1][j];
++						Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][2]*SU[q][2][j];
+ 					}
+ 				}
+ 			}
+-
+ 		}
+ 	}
+ 
++	/*Clean up*/
++	delete gauss;
++}
++/*}}}*/
++/*FUNCTION Penta::CreateKMatrixDiagnosticFSViscous {{{*/
++ElementMatrix* Penta::CreateKMatrixDiagnosticFSViscous(void){
++
++	/*Intermediaries */
++	int        i,j,approximation;
++	IssmDouble Jdet,viscosity,FSreconditioning,D_scalar;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	GaussPenta *gauss=NULL;
++
++	/*If on water or not FS, skip stiffness: */
++	inputs->GetInputValue(&approximation,ApproximationEnum);
++	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int numdof    = vnumnodes*NDOF3 + pnumnodes*NDOF1;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	IssmDouble*    B      = xNew<IssmDouble>(8*numdof);
++	IssmDouble*    Bprime = xNew<IssmDouble>(8*numdof);
++	IssmDouble*    D      = xNewZeroInit<IssmDouble>(8*8);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussPenta(5,5);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetBFS(B,&xyz_list[0][0],gauss); 
++		GetBprimeFS(Bprime,&xyz_list[0][0],gauss); 
++
++		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
++		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
++
++		D_scalar=gauss->weight*Jdet;
++		for(i=0;i<6;i++) D[i*8+i] = +D_scalar*2.*viscosity;
++		for(i=6;i<8;i++) D[i*8+i] = -D_scalar*FSreconditioning;
++
++		TripleMultiply(B,8,numdof,1,
++					D,8,8,0,
++					Bprime,8,numdof,0,
++					Ke->values,1);
++	}
++
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,(vnumnodes+pnumnodes),cs_list);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(Bprime);
++	xDelete<IssmDouble>(D);
+ 	return Ke;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::CreateKMatrixDiagnosticFSFriction{{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticFSFriction(void){
+ 
+-	/*Constants*/
+-	const int numdof=NUMVERTICES*NDOF4;
+-	const int numdof2d=NUMVERTICES2D*NDOF4;
+-
+ 	/*Intermediaries */
+-	int        i,j;
+-	int        analysis_type,approximation;
+-	IssmDouble alpha2,Jdet2d;
+-	IssmDouble FSreconditioning,viscosity;
+-	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble LFS[2][numdof2d];
+-	IssmDouble DLFS[2][2]={0.0};
+-	IssmDouble Ke_drag_gaussian[numdof2d][numdof2d];
+-	Friction*  friction=NULL;
+-	GaussPenta *gauss=NULL;
++	int         i,j;
++	int         analysis_type,approximation;
++	IssmDouble  alpha2,Jdet2d;
++	IssmDouble  FSreconditioning,viscosity;
++	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
++	Friction   *friction = NULL;
++	GaussPenta *gauss    = NULL;
+ 
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
++	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+ 
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int  numdof   = vnumnodes*NDOF3 + pnumnodes*NDOF1;
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke        = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	IssmDouble*    BFriction = xNew<IssmDouble>(2*numdof);
++	IssmDouble*    D         = xNewZeroInit<IssmDouble>(2*2);
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+@@ -7374,30 +7641,30 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
+-		GetLFS(&LFS[0][0], gauss);
++		GetLFS(BFriction,gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+-		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
++		friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+ 
+-		DLFS[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
+-		DLFS[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
++		D[0*2+0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
++		D[1*2+1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
+ 
+-		TripleMultiply( &LFS[0][0],2,numdof2d,1,
+-					&DLFS[0][0],2,2,0,
+-					&LFS[0][0],2,numdof2d,0,
+-					&Ke_drag_gaussian[0][0],0);
+-
+-		for(i=0;i<numdof2d;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdof+j]+=Ke_drag_gaussian[i][j];
++		TripleMultiply(BFriction,2,numdof,1,
++					D,2,2,0,
++					BFriction,2,numdof,0,
++					Ke->values,1);
+ 	}
+ 
+ 	/*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
+-	//TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
++	//TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	delete friction;
++	xDelete<IssmDouble>(BFriction);
++	xDelete<IssmDouble>(D);
+ 	return Ke;
+ }
+ /*}}}*/
+@@ -7575,7 +7842,7 @@
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
++	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -7649,7 +7916,7 @@
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
++	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -7726,7 +7993,7 @@
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
++	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -7800,7 +8067,7 @@
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
++	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZEnum);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -8146,31 +8413,16 @@
+ /*FUNCTION Penta::CreatePVectorDiagnosticFS {{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticFS(void){
+ 
+-	int fe_FS;
+ 	ElementVector* pe1;
+ 	ElementVector* pe2;
+ 	ElementVector* pe3;
+ 	ElementVector* pe;
+-	parameters->FindParam(&fe_FS,FlowequationFeFSEnum);
+ 
+-	switch(fe_FS){
+-		case 0:
+-			/*compute all stiffness matrices for this element*/
+-			pe1=CreatePVectorDiagnosticFSViscous();
+-			pe2=CreatePVectorDiagnosticFSShelf();
+-			pe3=CreatePVectorDiagnosticFSFront();
+-			pe =new ElementVector(pe1,pe2,pe3);
+-			break;
+-		case 1:
+-			/*compute all stiffness matrices for this element*/
+-			pe1=CreatePVectorDiagnosticFSGLSViscous();
+-			pe2=CreatePVectorDiagnosticFSShelf();
+-			pe3=CreatePVectorDiagnosticFSFront();
+-			pe =new ElementVector(pe1,pe2,pe3);
+-			break;
+-		default:
+-			_error_("Finite element" << fe_FS << " not supported yet");
+-	}
++	/*compute all stiffness matrices for this element*/
++	pe1=CreatePVectorDiagnosticFSViscous();
++	pe2=CreatePVectorDiagnosticFSShelf();
++	pe3=CreatePVectorDiagnosticFSFront();
++	pe =new ElementVector(pe1,pe2,pe3);
+ 
+ 	/*clean-up and return*/
+ 	delete pe1;
+@@ -8179,100 +8431,11 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticFSViscous {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticFSViscous(void){
+-
+-	/*Constants*/
+-	const int numdofbubble=NDOF4*NUMVERTICES+NDOF3*1;
+-
+-	/*Intermediaries*/
+-	int        i,j;
+-	int        approximation;
+-	IssmDouble Jdet,viscosity;
+-	IssmDouble gravity,rho_ice,FSreconditioning;
+-	IssmDouble forcex,forcey,forcez;
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble l1l7[7]; //for the six nodes and the bubble 
+-	IssmDouble B[8][numdofbubble];
+-	IssmDouble B_prime[8][numdofbubble];
+-	IssmDouble B_prime_bubble[8][3];
+-	IssmDouble D[8][8]={0.0};
+-	IssmDouble D_scalar;
+-	IssmDouble Pe_gaussian[numdofbubble]={0.0}; //for the six nodes and the bubble 
+-	IssmDouble Ke_temp[numdofbubble][3]={0.0}; //for the six nodes and the bubble 
+-	GaussPenta *gauss=NULL;
+-
+-	/*Initialize Element vector and return if necessary*/
+-	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+-
+-	/*Retrieve all inputs and parameters*/
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+-	rho_ice=matpar->GetRhoIce();
+-	gravity=matpar->GetG();
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* vx_input=inputs->GetInput(VxEnum);   _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum);   _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum);   _assert_(vz_input);
+-	Input* loadingforcex_input=inputs->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
+-	Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
+-	Input* loadingforcez_input=inputs->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
+-
+-	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(5,5);
+-	for(int ig=gauss->begin();ig<gauss->end();ig++){
+-
+-		gauss->GaussPoint(ig);
+-
+-		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetBFS(&B[0][0],&xyz_list[0][0],gauss); 
+-		GetBprimeFS(&B_prime[0][0],&xyz_list[0][0], gauss); 
+-		GetNodalFunctionsMINI(&l1l7[0], gauss);
+-
+-		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+-
+-		loadingforcex_input->GetInputValue(&forcex, gauss);
+-		loadingforcey_input->GetInputValue(&forcey, gauss);
+-		loadingforcez_input->GetInputValue(&forcez, gauss);
+-
+-		for(i=0;i<NUMVERTICES+1;i++){
+-			Pe_gaussian[i*NDOF4+2]+=-rho_ice*gravity*Jdet*gauss->weight*l1l7[i];
+-			Pe_gaussian[i*NDOF4+0]+=rho_ice*forcex*Jdet*gauss->weight*l1l7[i];
+-			Pe_gaussian[i*NDOF4+1]+=rho_ice*forcey*Jdet*gauss->weight*l1l7[i];
+-			Pe_gaussian[i*NDOF4+2]+=rho_ice*forcez*Jdet*gauss->weight*l1l7[i];
+-		}
+-
+-		/*Get bubble part of Bprime */
+-		for(i=0;i<8;i++) for(j=0;j<3;j++) B_prime_bubble[i][j]=B_prime[i][j+24];
+-
+-		D_scalar=gauss->weight*Jdet;
+-		for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity;
+-		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
+-
+-		TripleMultiply(&B[0][0],8,numdofbubble,1,
+-					&D[0][0],8,8,0,
+-					&B_prime_bubble[0][0],8,3,0,
+-					&Ke_temp[0][0],1);
+-	}
+-
+-	/*Condensation*/
+-	ReduceVectorFS(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);
+-
+-	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
+-
+-	/*Clean up and return*/
+-	delete gauss;
+-	return pe;
+-}
+-/*}}}*/
+ /*FUNCTION Penta::CreatePVectorDiagnosticFSFront{{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticFSFront(void){
+ 
+ 	/*Intermediaries */
++	int         i;
+ 	IssmDouble  ls[NUMVERTICES];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	bool        isfront;
+@@ -8292,19 +8455,30 @@
+ 	if(!isfront) return NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+-	int         numnodes = this->NumberofNodes();
+-	int         numdof   = numnodes*NDOF4;
+ 	IssmDouble  rho_ice,rho_water,gravity;
+ 	IssmDouble  Jdet,z_g,water_pressure,air_pressure;
+ 	IssmDouble  surface_under_water,base_under_water,pressure;
+-	GaussPenta* gauss;
+-	IssmDouble* basis = xNew<IssmDouble>(numnodes);
+ 	IssmDouble  xyz_list_front[4][3];
+ 	IssmDouble  area_coordinates[4][3];
+ 	IssmDouble  normal[3];
++	GaussPenta* gauss;
+ 
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF3;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	IssmDouble*    vbasis = xNew<IssmDouble>(vnumdof);
++
++	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,FSApproximationEnum);
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
+@@ -8322,32 +8496,32 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 		z_g=GetZcoord(gauss);
+-		GetNodalFunctions(basis,gauss);
++		GetNodalFunctionsVelocity(vbasis,gauss);
+ 		GetQuadJacobianDeterminant(&Jdet,xyz_list_front,gauss);
+ 
+ 		water_pressure=rho_water*gravity*min(0.,z_g);//0 if the gaussian point is above water level
+ 		air_pressure=0;
+ 		pressure = water_pressure + air_pressure;
+ 
+-		for (int i=0;i<numnodes;i++){
+-			pe->values[4*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
+-			pe->values[4*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];
+-			pe->values[4*i+2]+= pressure*Jdet*gauss->weight*normal[2]*basis[i];
+-			pe->values[4*i+3]+= 0;
++		for(i=0;i<vnumnodes;i++){
++			pe->values[3*i+0]+= pressure*Jdet*gauss->weight*normal[0]*vbasis[i];
++			pe->values[3*i+1]+= pressure*Jdet*gauss->weight*normal[1]*vbasis[i];
++			pe->values[3*i+2]+= pressure*Jdet*gauss->weight*normal[2]*vbasis[i];
+ 		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,numnodes,XYZPEnum);
++	TransformLoadVectorCoord(pe,nodes,(vnumnodes+pnumnodes),cs_list);
+ 
+ 	/*Clean up and return*/
+-	xDelete<IssmDouble>(basis);
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(vbasis);
+ 	delete gauss;
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticFSGLSViscous {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticFSGLSViscous(void){
++/*FUNCTION Penta::PVectorGLSstabilization{{{*/
++void Penta::PVectorGLSstabilization(ElementVector* pe){
+ 
+ 	/*Constants*/
+ 	const int numdof=NDOF4*NUMVERTICES;
+@@ -8373,20 +8547,11 @@
+ 	int p,q,ii;
+ 	int c=3; //index of pressure
+ 
+-	/*Initialize Element vector and return if necessary*/
+-	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+-	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+-
+ 	/*Retrieve all inputs and parameters*/
+ 	rho_ice=matpar->GetRhoIce();
+ 	gravity=matpar->GetG();
+ 	B=material->GetB();
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* loadingforcex_input=inputs->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
+-	Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
+-	Input* loadingforcez_input=inputs->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -8394,7 +8559,6 @@
+ 	/*Find minimal length*/
+ 	diameter=MinEdgeLength(xyz_list);
+ 
+-	if(stabilization){
+ 		gauss=new GaussPenta();
+ 		for(int iv=0;iv<6;iv++){
+ 			gauss->GaussVertex(iv);
+@@ -8406,7 +8570,6 @@
+ 			}
+ 		}
+ 		delete gauss;
+-	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+@@ -8419,55 +8582,104 @@
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+-		loadingforcex_input->GetInputValue(&forcex, gauss);
+-		loadingforcey_input->GetInputValue(&forcey, gauss);
+-		loadingforcez_input->GetInputValue(&forcez, gauss);
+-
+-		for(i=0;i<NUMVERTICES;i++){
+-			pe->values[i*NDOF4+2]+=-rho_ice*gravity*Jdet*gauss->weight*l1l6[i];
+-			pe->values[i*NDOF4+0]+=rho_ice*forcex*Jdet*gauss->weight*l1l6[i];
+-			pe->values[i*NDOF4+1]+=rho_ice*forcey*Jdet*gauss->weight*l1l6[i];
+-			pe->values[i*NDOF4+2]+=rho_ice*forcez*Jdet*gauss->weight*l1l6[i];
++		GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
++		dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
++		mu = 2.*viscosity;
++		for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
++			SW[p][i][j]=0.;
+ 		}
+-
+-		/*Add stabilization*/
+-		if(stabilization){
+-			GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
+-			dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
+-			mu = 2.*viscosity;
+-			for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
+-				SW[p][i][j]=0.;
+-			}
+-			for(p=0;p<6;p++){
+-				for(i=0;i<3;i++){
+-					SW[p][c][i] += dbasis[i][p];
+-					for(j=0;j<3;j++){
+-						SW[p][i][i] += -dmu[j]*dbasis[j][p];
+-						SW[p][j][i] += -dmu[j]*dbasis[i][p];
+-						for(ii=0;ii<6;ii++){
+-							SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
+-							SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
+-						}
++		for(p=0;p<6;p++){
++			for(i=0;i<3;i++){
++				SW[p][c][i] += dbasis[i][p];
++				for(j=0;j<3;j++){
++					SW[p][i][i] += -dmu[j]*dbasis[j][p];
++					SW[p][j][i] += -dmu[j]*dbasis[i][p];
++					for(ii=0;ii<6;ii++){
++						SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
++						SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
+ 					}
+ 				}
+ 			}
+-			IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
+-			for(p=0;p<6;p++){
+-				for(j=0;j<4;j++){
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcex*SW[p][j][0];
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcey*SW[p][j][1];
+-					pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*(forcez-gravity)*SW[p][j][2];
+-				}
++		}
++		IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
++		for(p=0;p<6;p++){
++			for(j=0;j<4;j++){
++				pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcex*SW[p][j][0];
++				pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*forcey*SW[p][j][1];
++				pe->values[p*4+j] += gauss->weight*Jdet*tau*rho_ice*(forcez-gravity)*SW[p][j][2];
+ 			}
++		}
++	}
+ 
++	/*Clean up*/
++	delete gauss;
++}
++/*}}}*/
++/*FUNCTION Penta::CreatePVectorDiagnosticFSViscous {{{*/
++ElementVector* Penta::CreatePVectorDiagnosticFSViscous(void){
++
++	/*Intermediaries*/
++	int        i,j;
++	int        approximation;
++	IssmDouble Jdet,gravity,rho_ice;
++	IssmDouble forcex,forcey,forcez;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	GaussPenta *gauss=NULL;
++
++	/*Initialize Element vector and return if necessary*/
++	inputs->GetInputValue(&approximation,ApproximationEnum);
++	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF3;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	IssmDouble*    vbasis = xNew<IssmDouble>(vnumdof);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* loadingforcex_input=inputs->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
++	Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
++	Input* loadingforcez_input=inputs->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
++	rho_ice = matpar->GetRhoIce();
++	gravity = matpar->GetG();
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussPenta(5,5);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctionsVelocity(vbasis, gauss);
++
++		loadingforcex_input->GetInputValue(&forcex,gauss);
++		loadingforcey_input->GetInputValue(&forcey,gauss);
++		loadingforcez_input->GetInputValue(&forcez,gauss);
++
++		for(i=0;i<vnumnodes;i++){
++			pe->values[i*NDOF3+2] += -rho_ice*gravity*Jdet*gauss->weight*vbasis[i];
++			pe->values[i*NDOF3+0] += +rho_ice*forcex *Jdet*gauss->weight*vbasis[i];
++			pe->values[i*NDOF3+1] += +rho_ice*forcey *Jdet*gauss->weight*vbasis[i];
++			pe->values[i*NDOF3+2] += +rho_ice*forcez *Jdet*gauss->weight*vbasis[i];
+ 		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
++	TransformLoadVectorCoord(pe,nodes,vnumnodes+pnumnodes,cs_list);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(vbasis);
+ 	return pe;
+ }
+ /*}}}*/
+@@ -8483,18 +8695,30 @@
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble	bed_normal[3];
+ 	IssmDouble  dz[3];
+-	IssmDouble  basis[6]; //for the six nodes of the penta
+ 	IssmDouble  Jdet2d;
+ 	GaussPenta  *gauss=NULL;
+ 
+ 	/*Initialize Element vector and return if necessary*/
+ 	if(!IsOnBed() || !IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-	this->parameters->FindParam(&shelf_dampening,DiagnosticShelfDampeningEnum);
+ 	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
+ 
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF3;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	IssmDouble*    vbasis = xNew<IssmDouble>(vnumdof);
++
+ 	/*Retrieve all inputs and parameters*/
++	this->parameters->FindParam(&shelf_dampening,DiagnosticShelfDampeningEnum);
+ 	rho_water=matpar->GetRhoWater();
+ 	gravity=matpar->GetG();
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -8512,7 +8736,7 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss);
+-		GetNodalFunctionsP1(basis, gauss);
++		GetNodalFunctionsVelocity(vbasis, gauss);
+ 
+ 		BedNormal(&bed_normal[0],xyz_list_tria);
+ 		bed_input->GetInputValue(&bed, gauss);
+@@ -8521,21 +8745,27 @@
+ 			vx_input->GetInputValue(&vx, gauss);
+ 			vy_input->GetInputValue(&vy, gauss);
+ 			vz_input->GetInputValue(&vz, gauss);
+-			dt=0;
++			dt=0.;
+ 			normal_vel=bed_normal[0]*vx+bed_normal[1]*vy+bed_normal[2]*vz;
+ 			damper=gravity*rho_water*pow(1+pow(dz[0],2)+pow(dz[1],2),0.5)*normal_vel*dt;
+ 		}
+-		else damper=0;
++		else damper=0.;
+ 		water_pressure=gravity*rho_water*bed;
+ 
+-		for(i=0;i<NUMVERTICES;i++) for(j=0;j<3;j++) pe->values[i*NDOF4+j]+=(water_pressure+damper)*gauss->weight*Jdet2d*basis[i]*bed_normal[j];
++		for(i=0;i<vnumnodes;i++){
++			pe->values[3*i+0]+=(water_pressure+damper)*gauss->weight*Jdet2d*vbasis[i]*bed_normal[0];
++			pe->values[3*i+1]+=(water_pressure+damper)*gauss->weight*Jdet2d*vbasis[i]*bed_normal[1];
++			pe->values[3*i+2]+=(water_pressure+damper)*gauss->weight*Jdet2d*vbasis[i]*bed_normal[2];
++		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
++	TransformLoadVectorCoord(pe,nodes,(vnumnodes+pnumnodes),cs_list);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(vbasis);
+ 	return pe;
+ }
+ /*}}}*/
+@@ -8793,30 +9023,41 @@
+ /*FUNCTION Penta::CreateJacobianDiagnosticFS{{{*/
+ ElementMatrix* Penta::CreateJacobianDiagnosticFS(void){
+ 
+-	/*Constants*/
+-	const int    numdof=NDOF4*NUMVERTICES;
+-
+ 	/*Intermediaries */
+-	int        i,j;
++	int        i,j,approximation;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble Jdet;
+ 	IssmDouble eps1dotdphii,eps1dotdphij;
+ 	IssmDouble eps2dotdphii,eps2dotdphij;
+ 	IssmDouble eps3dotdphii,eps3dotdphij;
+ 	IssmDouble mu_prime;
+-	IssmDouble epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble eps1[3],eps2[3],eps3[3];
+-	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
++	/*If on water or not FS, skip stiffness: */
++	//inputs->GetInputValue(&approximation,ApproximationEnum);
++	//if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int numdof    = vnumnodes*NDOF3 + pnumnodes*NDOF1;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
+ 	/*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/
+ 	ElementMatrix* Ke=CreateKMatrixDiagnosticFS();
++	IssmDouble*    dbasis = xNew<IssmDouble>(3*vnumnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum);       _assert_(vz_input);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+@@ -8824,43 +9065,50 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet,&xyz_list[0][0],gauss);
++		GetNodalFunctionsDerivativesVelocity(dbasis,&xyz_list[0][0],gauss);
+ 
++		//this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
++		//material->GetViscosityDerivativeEpsSquareFS(&mu_prime,&epsilon[0]);
++		//eps1[0]=epsilon[0];   eps2[0]=epsilon[3];   eps3[0]=epsilon[4];
++		//eps1[1]=epsilon[3];   eps2[1]=epsilon[1];   eps3[1]=epsilon[5];
++		//eps1[2]=epsilon[4];   eps2[2]=epsilon[5];   eps3[2]=epsilon[2];
+ 		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+ 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
+ 		eps1[0]=epsilon[0];   eps2[0]=epsilon[2];   eps3[0]=epsilon[3];
+ 		eps1[1]=epsilon[2];   eps2[1]=epsilon[1];   eps3[1]=epsilon[4];
+ 		eps1[2]=epsilon[3];   eps2[2]=epsilon[4];   eps3[2]= -epsilon[0] -epsilon[1];
+ 
+-		for(i=0;i<6;i++){
+-			for(j=0;j<6;j++){
+-				eps1dotdphii=eps1[0]*dphi[0][i]+eps1[1]*dphi[1][i]+eps1[2]*dphi[2][i];
+-				eps1dotdphij=eps1[0]*dphi[0][j]+eps1[1]*dphi[1][j]+eps1[2]*dphi[2][j];
+-				eps2dotdphii=eps2[0]*dphi[0][i]+eps2[1]*dphi[1][i]+eps2[2]*dphi[2][i];
+-				eps2dotdphij=eps2[0]*dphi[0][j]+eps2[1]*dphi[1][j]+eps2[2]*dphi[2][j];
+-				eps3dotdphii=eps3[0]*dphi[0][i]+eps3[1]*dphi[1][i]+eps3[2]*dphi[2][i];
+-				eps3dotdphij=eps3[0]*dphi[0][j]+eps3[1]*dphi[1][j]+eps3[2]*dphi[2][j];
++		for(i=0;i<vnumnodes-1;i++){
++			for(j=0;j<vnumnodes-1;j++){
++				eps1dotdphii=eps1[0]*dbasis[0*vnumnodes+i]+eps1[1]*dbasis[1*vnumnodes+i]+eps1[2]*dbasis[2*vnumnodes+i];
++				eps1dotdphij=eps1[0]*dbasis[0*vnumnodes+j]+eps1[1]*dbasis[1*vnumnodes+j]+eps1[2]*dbasis[2*vnumnodes+j];
++				eps2dotdphii=eps2[0]*dbasis[0*vnumnodes+i]+eps2[1]*dbasis[1*vnumnodes+i]+eps2[2]*dbasis[2*vnumnodes+i];
++				eps2dotdphij=eps2[0]*dbasis[0*vnumnodes+j]+eps2[1]*dbasis[1*vnumnodes+j]+eps2[2]*dbasis[2*vnumnodes+j];
++				eps3dotdphii=eps3[0]*dbasis[0*vnumnodes+i]+eps3[1]*dbasis[1*vnumnodes+i]+eps3[2]*dbasis[2*vnumnodes+i];
++				eps3dotdphij=eps3[0]*dbasis[0*vnumnodes+j]+eps3[1]*dbasis[1*vnumnodes+j]+eps3[2]*dbasis[2*vnumnodes+j];
+ 
+-				Ke->values[numdof*(4*i+0)+4*j+0]+=gauss->weight*Jdet*2*mu_prime*eps1dotdphij*eps1dotdphii;
+-				Ke->values[numdof*(4*i+0)+4*j+1]+=gauss->weight*Jdet*2*mu_prime*eps2dotdphij*eps1dotdphii;
+-				Ke->values[numdof*(4*i+0)+4*j+2]+=gauss->weight*Jdet*2*mu_prime*eps3dotdphij*eps1dotdphii;
++				Ke->values[numdof*(3*i+0)+3*j+0]+=gauss->weight*Jdet*2*mu_prime*eps1dotdphij*eps1dotdphii;
++				Ke->values[numdof*(3*i+0)+3*j+1]+=gauss->weight*Jdet*2*mu_prime*eps2dotdphij*eps1dotdphii;
++				Ke->values[numdof*(3*i+0)+3*j+2]+=gauss->weight*Jdet*2*mu_prime*eps3dotdphij*eps1dotdphii;
+ 
+-				Ke->values[numdof*(4*i+1)+4*j+0]+=gauss->weight*Jdet*2*mu_prime*eps1dotdphij*eps2dotdphii;
+-				Ke->values[numdof*(4*i+1)+4*j+1]+=gauss->weight*Jdet*2*mu_prime*eps2dotdphij*eps2dotdphii;
+-				Ke->values[numdof*(4*i+1)+4*j+2]+=gauss->weight*Jdet*2*mu_prime*eps3dotdphij*eps2dotdphii;
++				Ke->values[numdof*(3*i+1)+3*j+0]+=gauss->weight*Jdet*2*mu_prime*eps1dotdphij*eps2dotdphii;
++				Ke->values[numdof*(3*i+1)+3*j+1]+=gauss->weight*Jdet*2*mu_prime*eps2dotdphij*eps2dotdphii;
++				Ke->values[numdof*(3*i+1)+3*j+2]+=gauss->weight*Jdet*2*mu_prime*eps3dotdphij*eps2dotdphii;
+ 
+-				Ke->values[numdof*(4*i+2)+4*j+0]+=gauss->weight*Jdet*2*mu_prime*eps1dotdphij*eps3dotdphii;
+-				Ke->values[numdof*(4*i+2)+4*j+1]+=gauss->weight*Jdet*2*mu_prime*eps2dotdphij*eps3dotdphii;
+-				Ke->values[numdof*(4*i+2)+4*j+2]+=gauss->weight*Jdet*2*mu_prime*eps3dotdphij*eps3dotdphii;
++				Ke->values[numdof*(3*i+2)+3*j+0]+=gauss->weight*Jdet*2*mu_prime*eps1dotdphij*eps3dotdphii;
++				Ke->values[numdof*(3*i+2)+3*j+1]+=gauss->weight*Jdet*2*mu_prime*eps2dotdphij*eps3dotdphii;
++				Ke->values[numdof*(3*i+2)+3*j+2]+=gauss->weight*Jdet*2*mu_prime*eps3dotdphij*eps3dotdphii;
+ 			}
+ 		}
+ 	}
+ 
+ 	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
++	TransformStiffnessMatrixCoord(Ke,nodes,(vnumnodes+pnumnodes),cs_list);
+ 
+ 	/*Clean up and return*/
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(dbasis);
+ 	delete gauss;
+ 	return Ke;
+ }
+@@ -8868,31 +9116,29 @@
+ /*FUNCTION Penta::GetSolutionFromInputsDiagnosticHoriz{{{*/
+ void  Penta::GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution){
+ 
+-	const int    numdof=NDOF2*NUMVERTICES;
+-
+-	int         i;
+ 	int         approximation;
+-	int        *doflist        = NULL;
++	int        *doflist = NULL;
+ 	IssmDouble  vx,vy;
+-	IssmDouble  values[numdof];
+-	GaussPenta *gauss;
+ 
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
++
+ 	/*Get approximation enum and dof list: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 
+-	/*If the element is a coupling, do nothing: every node is also on an other elements 
+-	 * (as coupling is between SSA and HO) so the other element will take care of it*/
++	/*Fetch dof list and allocate solution vectors*/
+ 	GetDofList(&doflist,approximation,GsetEnum);
++	IssmDouble* values = xNew<IssmDouble>(numdof);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+-	/*P1 element only for now*/
+-	gauss=new GaussPenta();
+-	for(i=0;i<NUMVERTICES;i++){
++	GaussPenta* gauss=new GaussPenta();
++	for(int i=0;i<numnodes;i++){
++		gauss->GaussNode(numnodes,i);
+ 
+ 		/*Recover vx and vy*/
+-		gauss->GaussVertex(i);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		values[i*NDOF2+0]=vx;
+@@ -8904,6 +9150,7 @@
+ 
+ 	/*Free ressources:*/
+ 	delete gauss;
++	xDelete<IssmDouble>(values);
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+@@ -8979,46 +9226,61 @@
+ /*FUNCTION Penta::GetSolutionFromInputsDiagnosticFS{{{*/
+ void  Penta::GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solution){
+ 
+-	const int    numdof=NDOF4*NUMVERTICES;
++	int*         vdoflist=NULL;
++	int*         pdoflist=NULL;
++	IssmDouble   vx,vy,vz,p;
++	IssmDouble   FSreconditioning;
++	GaussPenta  *gauss;
+ 
+-	int          i;
+-	int*         doflist=NULL;
+-	IssmDouble       vx,vy,vz,p;
+-	IssmDouble       FSreconditioning;
+-	IssmDouble       values[numdof];
+-	GaussPenta   *gauss;
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocityFinal();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF3;
++	int pnumdof   = pnumnodes*NDOF1;
+ 
++	/*Initialize values*/
++	IssmDouble* vvalues = xNew<IssmDouble>(vnumdof);
++	IssmDouble* pvalues = xNew<IssmDouble>(pnumdof);
++
+ 	/*Get dof list: */
+-	GetDofList(&doflist,FSApproximationEnum,GsetEnum);
++	GetDofListVelocity(&vdoflist,GsetEnum);
++	GetDofListPressure(&pdoflist,GsetEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);       _assert_(vz_input);
+ 	Input* p_input =inputs->GetInput(PressureEnum); _assert_(p_input);
+ 
+-	/*Recondition pressure: */
+ 	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+-	/*Ok, we have vx vy vz and P in values, fill in vx vy vz P arrays: */
+-	/*P1 element only for now*/
+-	gauss=new GaussPenta();
+-	for(i=0;i<NUMVERTICES;i++){
+-		gauss->GaussVertex(i);
++	/*Ok, we have vx vy vz in values, fill in vx vy vz arrays: */
++	gauss = new GaussPenta();
++	for(int i=0;i<vnumnodes;i++){
++		gauss->GaussNode(vnumnodes,i);
++
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vz_input->GetInputValue(&vz,gauss);
++		vvalues[i*NDOF3+0]=vx;
++		vvalues[i*NDOF3+1]=vy;
++		vvalues[i*NDOF3+2]=vz;
++	}
++	for(int i=0;i<pnumnodes;i++){
++		gauss->GaussNode(pnumnodes,i);
++
+ 		p_input ->GetInputValue(&p ,gauss);
+-		values[i*NDOF4+0]=vx;
+-		values[i*NDOF4+1]=vy;
+-		values[i*NDOF4+2]=vz;
+-		values[i*NDOF4+3]=p/FSreconditioning;
++		pvalues[i]=p/FSreconditioning;
+ 	}
+ 
+ 	/*Add value to global vector*/
+-	solution->SetValues(numdof,doflist,values,INS_VAL);
++	solution->SetValues(vnumdof,vdoflist,vvalues,INS_VAL);
++	solution->SetValues(pnumdof,pdoflist,pvalues,INS_VAL);
+ 
+ 	/*Free ressources:*/
+ 	delete gauss;
+-	xDelete<int>(doflist);
++	xDelete<int>(pdoflist);
++	xDelete<int>(vdoflist);
++	xDelete<IssmDouble>(pvalues);
++	xDelete<IssmDouble>(vvalues);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::GetL1L2Viscosity{{{*/
+@@ -9342,7 +9604,7 @@
+ 
+ 	/*Transform solution in Cartesian Space*/
+ 	TransformSolutionCoord(&SSA_values[0],this->nodes,NUMVERTICES,XYEnum);
+-	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZPEnum);
++	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+@@ -9590,7 +9852,7 @@
+ 
+ 	/*Transform solution in Cartesian Space*/
+ 	TransformSolutionCoord(&HO_values[0],this->nodes,NUMVERTICES,XYEnum);
+-	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZPEnum);
++	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+@@ -9813,45 +10075,56 @@
+ /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticFS {{{*/
+ void  Penta::InputUpdateFromSolutionDiagnosticFS(IssmDouble* solution){
+ 
+-	const int numdof=NDOF4*NUMVERTICES;
++	int          i;
++	int*         vdoflist=NULL;
++	int*         pdoflist=NULL;
++	IssmDouble   FSreconditioning;
++	GaussPenta  *gauss;
+ 
+-	int     i;
+-	IssmDouble  values[numdof];
+-	IssmDouble  vx[NUMVERTICES];
+-	IssmDouble  vy[NUMVERTICES];
+-	IssmDouble  vz[NUMVERTICES];
+-	IssmDouble  vel[NUMVERTICES];
+-	IssmDouble  pressure[NUMVERTICES];
+-	IssmDouble  FSreconditioning;
+-	int*    doflist=NULL;
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocityFinal();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF3;
++	int pnumdof   = pnumnodes*NDOF1;
+ 
++	/*Initialize values*/
++	IssmDouble* vvalues  = xNew<IssmDouble>(vnumdof);
++	IssmDouble* pvalues  = xNew<IssmDouble>(pnumdof);
++	IssmDouble* vx       = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* vy       = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* vz       = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* vel      = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* pressure = xNew<IssmDouble>(vnumnodes);
++
+ 	/*Get dof list: */
+-	GetDofList(&doflist,FSApproximationEnum,GsetEnum);
++	GetDofListVelocity(&vdoflist,GsetEnum);
++	GetDofListPressure(&pdoflist,GsetEnum);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
++	for(i=0;i<vnumdof;i++) vvalues[i]=solution[vdoflist[i]];
++	for(i=0;i<pnumdof;i++) pvalues[i]=solution[pdoflist[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+-	TransformSolutionCoord(&values[0],nodes,NUMVERTICES,XYZPEnum);
++	TransformSolutionCoord(&vvalues[0],nodes,vnumnodes,XYZEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in all arrays: */
+-	for(i=0;i<NUMVERTICES;i++){
+-		vx[i]=values[i*NDOF4+0];
+-		vy[i]=values[i*NDOF4+1];
+-		vz[i]=values[i*NDOF4+2];
+-		pressure[i]=values[i*NDOF4+3];
+-
+-		/*Check solution*/
+-		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(vz[i]))       _error_("NaN found in solution vector");
++	for(i=0;i<vnumnodes;i++){
++		vx[i] = vvalues[i*NDOF3+0];
++		vy[i] = vvalues[i*NDOF3+1];
++		vz[i] = vvalues[i*NDOF3+2];
++		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
++		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
++		if(xIsNan<IssmDouble>(vz[i])) _error_("NaN found in solution vector");
++	}
++	for(i=0;i<pnumnodes;i++){
++		pressure[i] = pvalues[i];
+ 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+ 	}
+ 
+ 	/*Recondition pressure and compute vel: */
+ 	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+-	for(i=0;i<NUMVERTICES;i++) pressure[i]=pressure[i]*FSreconditioning;
+-	for(i=0;i<NUMVERTICES;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
++	for(i=0;i<pnumnodes;i++) pressure[i]=pressure[i]*FSreconditioning;
++	for(i=0;i<vnumnodes;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
+ 
+ 	/*Now, we have to move the previous inputs  to old 
+ 	 * status, otherwise, we'll wipe them off: */
+@@ -9868,7 +10141,15 @@
+ 	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+-	xDelete<int>(doflist);
++	xDelete<IssmDouble>(pressure);
++	xDelete<IssmDouble>(vel);
++	xDelete<IssmDouble>(vz);
++	xDelete<IssmDouble>(vy);
++	xDelete<IssmDouble>(vx);
++	xDelete<IssmDouble>(vvalues);
++	xDelete<IssmDouble>(pvalues);
++	xDelete<int>(vdoflist);
++	xDelete<int>(pdoflist);
+ }
+ /*}}}*/
+ #endif
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15654)
+@@ -22,7 +22,11 @@
+ 
+ 		/*Numerics*/
+ 		void GetNodalFunctions(IssmDouble* basis, GaussPenta* gauss);
++		void GetNodalFunctionsVelocity(IssmDouble* basis, GaussPenta* gauss);
++		void GetNodalFunctionsPressure(IssmDouble* basis, GaussPenta* gauss);
+ 		void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,GaussPenta* gauss);
++		void GetNodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,GaussPenta* gauss);
++		void GetNodalFunctionsDerivativesPressure(IssmDouble* dbasis,IssmDouble* xyz_list,GaussPenta* gauss);
+ 		void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussPenta* gauss);
+ 		void GetNodalFunctionsP1(IssmDouble* l1l6, GaussPenta* gauss);
+ 		void GetNodalFunctionsMINI(IssmDouble* l1l7, GaussPenta* gauss);
+@@ -40,6 +44,7 @@
+ 		void GetBSSAHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBSSAFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
++		void GetBFSstrainrate(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBFSGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetBprimeSSAFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);
+@@ -64,5 +69,8 @@
+ 		void GetInputDerivativeValue(IssmDouble* pvalues, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss){_error_("only PentaGauss are supported");};
+ 
+ 		int  NumberofNodes(void);
++		int  NumberofNodesVelocity(void);
++		int  NumberofNodesVelocityFinal(void);
++		int  NumberofNodesPressure(void);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15654)
+@@ -183,6 +183,8 @@
+ 		ElementVector* CreatePVectorSlope(void);
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[6][3],int numpoints);
+ 		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
++		void	         GetDofListVelocity(int** pdoflist,int setenum);
++		void	         GetDofListPressure(int** pdoflist,int setenum);
+ 		void	         GetVertexPidList(int* doflist);
+ 		void           GetVertexSidList(int* sidlist);
+ 		void           GetConnectivityList(int* connectivity);
+@@ -251,9 +253,8 @@
+ 		ElementMatrix* CreateKMatrixDiagnosticHOFS(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticFS(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticFSViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticFSGLSViscous(void);
++		void           KMatrixGLSstabilization(ElementMatrix* Ke);
+ 		ElementMatrix* CreateKMatrixDiagnosticFSFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticFSGLSFriction(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVert(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVertVolume(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticVertSurface(void);
+@@ -294,7 +295,7 @@
+ 		ElementVector* CreatePVectorDiagnosticFS(void);
+ 		ElementVector* CreatePVectorDiagnosticFSFront(void);
+ 		ElementVector* CreatePVectorDiagnosticFSViscous(void);
+-		ElementVector* CreatePVectorDiagnosticFSGLSViscous(void);
++		void           PVectorGLSstabilization(ElementVector* pe);
+ 		ElementVector* CreatePVectorDiagnosticFSShelf(void);
+ 		ElementVector* CreatePVectorDiagnosticVert(void);
+ 		ElementVector* CreatePVectorDiagnosticVertVolume(void);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15654)
+@@ -447,6 +447,19 @@
+ 				default: _error_("node index should be in [0 5]");
+ 			}
+ 			break;
++		case 7: //P1+ Lagrange element
++			switch(iv){
++				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
++				case 1: coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
++				case 2: coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
++				case 3: coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
++				case 4: coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
++				case 5: coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
++
++				case 6: coord1=0.; coord2=0.; coord3=0.; coord4=0.;break;
++				default: _error_("node index should be in [0 5]");
++			}
++			break;
+ 		case 15: //P2 Lagrange element
+ 			switch(iv){
+ 				case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
+@@ -469,7 +482,7 @@
+ 				default: _error_("node index should be in [0 5]");
+ 			}
+ 			break;
+-		default: _error_("supported number of nodes are 6 and 15");
++		default: _error_("Number of nodes "<<numnodes<<" not supported");
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 15654)
+@@ -109,3 +109,13 @@
+ 	input->GetInputValue(pvalue,gauss);
+ }
+ /*}}}*/
++/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){{{*/
++void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){
++
++	/*Get requested input within dataset*/
++	if(index<0 || index > inputs->Size()-1) _error_("index requested (" << index << ") exceeds dataset size (" << inputs->Size() << ")");
++	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(index));
++
++	input->GetInputValue(pvalue,gauss);
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 15654)
+@@ -49,7 +49,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index);
+-		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index);
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15654)
+@@ -133,145 +133,78 @@
+ /*}}}*/
+ /*FUNCTION PentaInput::GetVxStrainRate3d{{{*/
+ void PentaInput::GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+-	int i,j;
+ 
+-	const int numnodes=6;
+-	const int DOFVELOCITY=3;
+-	IssmDouble B[8][27];
+-	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
+-	IssmDouble velocity[numnodes][DOFVELOCITY];
+-	_assert_(this->NumberofNodes()==6); //Check Tria too
++	/*Intermediary*/
++	int         numnodes=this->NumberofNodes();
++	IssmDouble* B=xNew<IssmDouble>(numnodes*(NDOF3*numnodes));
++	IssmDouble* velocity=xNew<IssmDouble>(numnodes*NDOF3);
+ 
+ 	/*Get B matrix: */
+-	GetBFS(&B[0][0], xyz_list, gauss);
++	GetBFSstrainrate(B,xyz_list,gauss);
+ 
+-	/*Create a reduced matrix of B to get rid of pressure */
+-	for (i=0;i<6;i++){
+-		for (j=0;j<3;j++){
+-			B_reduced[i][j]=B[i][j];
+-		}
+-		for (j=4;j<7;j++){
+-			B_reduced[i][j-1]=B[i][j];
+-		}
+-		for (j=8;j<11;j++){
+-			B_reduced[i][j-2]=B[i][j];
+-		}
+-		for (j=12;j<15;j++){
+-			B_reduced[i][j-3]=B[i][j];
+-		}
+-		for (j=16;j<19;j++){
+-			B_reduced[i][j-4]=B[i][j];
+-		}
+-		for (j=20;j<23;j++){
+-			B_reduced[i][j-5]=B[i][j];
+-		}
+-	}
+-
+ 	/*Here, we are computing the strain rate of (vx,0,0)*/
+-	for(i=0;i<numnodes;i++){
+-		velocity[i][0]=this->values[i];
+-		velocity[i][1]=0.0;
+-		velocity[i][2]=0.0;
++	for(int i=0;i<numnodes;i++){
++		velocity[NDOF3*i+0]=this->values[i];
++		velocity[NDOF3*i+1]=0.;
++		velocity[NDOF3*i+2]=0.;
+ 	}
+ 	/*Multiply B by velocity, to get strain rate: */
+-	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvx,0);
++	MatrixMultiply(B,numnodes,NDOF3*numnodes,0,velocity,NDOF3*numnodes,1,0,epsilonvx,0);
+ 
++	/*Clean-up*/
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(velocity);
++
+ }
+ /*}}}*/
+ /*FUNCTION PentaInput::GetVyStrainRate3d{{{*/
+-void PentaInput::GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
+-	int i,j;
++void PentaInput::GetVyStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+-	const int numnodes=6;
+-	const int DOFVELOCITY=3;
+-	IssmDouble B[8][27];
+-	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
+-	IssmDouble velocity[numnodes][DOFVELOCITY];
++	/*Intermediary*/
++	int         numnodes=this->NumberofNodes();
++	IssmDouble* B=xNew<IssmDouble>(numnodes*(NDOF3*numnodes));
++	IssmDouble* velocity=xNew<IssmDouble>(numnodes*NDOF3);
+ 
+-	_assert_(this->NumberofNodes()==6); //Check Tria too
+-
+ 	/*Get B matrix: */
+-	GetBFS(&B[0][0], xyz_list, gauss);
+-	/*Create a reduced matrix of B to get rid of pressure */
+-	for (i=0;i<6;i++){
+-		for (j=0;j<3;j++){
+-			B_reduced[i][j]=B[i][j];
+-		}
+-		for (j=4;j<7;j++){
+-			B_reduced[i][j-1]=B[i][j];
+-		}
+-		for (j=8;j<11;j++){
+-			B_reduced[i][j-2]=B[i][j];
+-		}
+-		for (j=12;j<15;j++){
+-			B_reduced[i][j-3]=B[i][j];
+-		}
+-		for (j=16;j<19;j++){
+-			B_reduced[i][j-4]=B[i][j];
+-		}
+-		for (j=20;j<23;j++){
+-			B_reduced[i][j-5]=B[i][j];
+-		}
+-	}
++	GetBFSstrainrate(B,xyz_list,gauss);
+ 
+ 	/*Here, we are computing the strain rate of (0,vy,0)*/
+-	for(i=0;i<numnodes;i++){
+-		velocity[i][0]=0.0;
+-		velocity[i][1]=this->values[i];
+-		velocity[i][2]=0.0;
++	for(int i=0;i<numnodes;i++){
++		velocity[NDOF3*i+0]=0.;
++		velocity[NDOF3*i+1]=this->values[i];
++		velocity[NDOF3*i+2]=0.;
+ 	}
+ 	/*Multiply B by velocity, to get strain rate: */
+-	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvy,0);
++	MatrixMultiply(B,numnodes,NDOF3*numnodes,0,velocity,NDOF3*numnodes,1,0,epsilonvx,0);
+ 
++	/*Clean-up*/
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(velocity);
+ }
+ /*}}}*/
+ /*FUNCTION PentaInput::GetVzStrainRate3d{{{*/
+-void PentaInput::GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){
+-	int i,j;
++void PentaInput::GetVzStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+ 
+-	const int numnodes=6;
+-	const int DOFVELOCITY=3;
+-	IssmDouble B[8][27];
+-	IssmDouble B_reduced[6][DOFVELOCITY*numnodes];
+-	IssmDouble velocity[numnodes][DOFVELOCITY];
++	/*Intermediary*/
++	int         numnodes=this->NumberofNodes();
++	IssmDouble* B=xNew<IssmDouble>(numnodes*(NDOF3*numnodes));
++	IssmDouble* velocity=xNew<IssmDouble>(numnodes*NDOF3);
+ 
+ 	/*Get B matrix: */
+-	GetBFS(&B[0][0], xyz_list, gauss);
++	GetBFSstrainrate(B,xyz_list,gauss);
+ 
+-	_assert_(this->NumberofNodes()==6); //Check Tria too
+-
+-	/*Create a reduced matrix of B to get rid of pressure */
+-	for (i=0;i<6;i++){
+-		for (j=0;j<3;j++){
+-			B_reduced[i][j]=B[i][j];
+-		}
+-		for (j=4;j<7;j++){
+-			B_reduced[i][j-1]=B[i][j];
+-		}
+-		for (j=8;j<11;j++){
+-			B_reduced[i][j-2]=B[i][j];
+-		}
+-		for (j=12;j<15;j++){
+-			B_reduced[i][j-3]=B[i][j];
+-		}
+-		for (j=16;j<19;j++){
+-			B_reduced[i][j-4]=B[i][j];
+-		}
+-		for (j=20;j<23;j++){
+-			B_reduced[i][j-5]=B[i][j];
+-		}
+-	}
+-
+ 	/*Here, we are computing the strain rate of (0,0,vz)*/
+-	for(i=0;i<numnodes;i++){
+-		velocity[i][0]=0.0;
+-		velocity[i][1]=0.0;
+-		velocity[i][2]=this->values[i];
++	for(int i=0;i<numnodes;i++){
++		velocity[NDOF3*i+0]=0.;
++		velocity[NDOF3*i+1]=0.;
++		velocity[NDOF3*i+2]=this->values[i];
+ 	}
+-
+ 	/*Multiply B by velocity, to get strain rate: */
+-	MatrixMultiply(&B_reduced[0][0],6,DOFVELOCITY*numnodes,0,&velocity[0][0],DOFVELOCITY*numnodes,1,0,epsilonvz,0);
++	MatrixMultiply(B,numnodes,NDOF3*numnodes,0,velocity,NDOF3*numnodes,1,0,epsilonvx,0);
+ 
++	/*Clean-up*/
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(velocity);
+ }
+ /*}}}*/
+ /*FUNCTION PentaInput::GetVxStrainRate3dHO{{{*/
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15653)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15654)
+@@ -66,7 +66,7 @@
+ 
+ 		/*Coordinate system provided, convert to coord_system matrix*/
+ 		_assert_(iomodel->Data(DiagnosticReferentialEnum)); 
+-		XZvectorsToCoordinateSystem(&this->coord_system[0][0],iomodel->Data(DiagnosticReferentialEnum)+io_index*6);
++		XZvectorsToCoordinateSystem(&this->coord_system[0][0],&iomodel->Data(DiagnosticReferentialEnum)[io_index*6]);
+ 
+ 		if(iomodel->dim==3){
+ 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+@@ -437,11 +437,6 @@
+ 
+ 	/*Put dof for this node into the s set (ie, this dof will be constrained 
+ 	 * to a fixed value during computations. */
+-
+-	if(dof>=this->indexing.gsize){
+-		printf("dof spc = %i\n",dof);
+-		this->Echo();
+-	}
+ 	_assert_(dof<this->indexing.gsize);
+ 
+ 	this->indexing.f_set[dof]=0; //n splits into f (for which we solve) and s (single point constraints)
+@@ -1009,8 +1004,9 @@
+ 	/*Get total number of dofs*/
+ 	for(i=0;i<numnodes;i++){
+ 		switch(cs_array[i]){
+-			case XYEnum:   numdofs+=2; break;
+-			case XYZPEnum: numdofs+=4; break;
++			case PressureEnum: numdofs+=1; break;
++			case XYEnum:       numdofs+=2; break;
++			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+ 	}
+@@ -1058,8 +1054,9 @@
+ 	/*Get total number of dofs*/
+ 	for(i=0;i<numnodes;i++){
+ 		switch(cs_array[i]){
+-			case XYEnum:   numdofs+=2; break;
+-			case XYZPEnum: numdofs+=4; break;
++			case PressureEnum: numdofs+=1; break;
++			case XYEnum:       numdofs+=2; break;
++			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+ 	}
+@@ -1106,8 +1103,9 @@
+ 	/*Get total number of dofs*/
+ 	for(i=0;i<numnodes;i++){
+ 		switch(cs_array[i]){
+-			case XYEnum:   numdofs+=2; break;
+-			case XYZPEnum: numdofs+=4; break;
++			case PressureEnum: numdofs+=1; break;
++			case XYEnum:       numdofs+=2; break;
++			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+ 	}
+@@ -1153,8 +1151,9 @@
+ 	/*Get total number of dofs*/
+ 	for(int i=0;i<numnodes;i++){
+ 		switch(cs_array[i]){
+-			case XYEnum:   numdofs+=2; break;
+-			case XYZPEnum: numdofs+=4; break;
++			case PressureEnum: numdofs+=1; break;
++			case XYEnum:       numdofs+=2; break;
++			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+ 	}
+@@ -1192,8 +1191,9 @@
+ 	/*Get total number of dofs*/
+ 	for(i=0;i<numnodes;i++){
+ 		switch(cs_array[i]){
+-			case XYEnum:   numdofs+=2; break;
+-			case XYZPEnum: numdofs+=4; break;
++			case PressureEnum: numdofs+=1; break;
++			case XYEnum:       numdofs+=2; break;
++			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+ 	}
+@@ -1215,6 +1215,11 @@
+ 	for(i=0;i<numnodes;i++){
+ 		nodes[i]->GetCoordinateSystem(&coord_system[0][0]);
+ 		switch(cs_array[i]){
++			case PressureEnum:
++				/*DO NOT change anything*/
++				transform[(numdofs)*(counter) + counter] = 1.;
++				counter+=1;
++				break;
+ 			case XYEnum:
+ 				/*We remove the z component, we need to renormalize x and y: x=[x1 x2 0] y=[-x2 x1 0]*/
+ 				norm = sqrt( coord_system[0][0]*coord_system[0][0] + coord_system[1][0]*coord_system[1][0]); _assert_(norm>1.e-4);
+@@ -1224,8 +1229,8 @@
+ 				transform[(numdofs)*(counter+1) + counter+1] =   coord_system[0][0]/norm;
+ 				counter+=2;
+ 				break;
+-			case XYZPEnum:
+-				/*Only the first 3 coordinates are changed (x,y,z), leave the others (P) unchanged*/
++			case XYZEnum:
++				/*The 3 coordinates are changed (x,y,z)*/
+ 				transform[(numdofs)*(counter+0) + counter+0] = coord_system[0][0];
+ 				transform[(numdofs)*(counter+0) + counter+1] = coord_system[0][1];
+ 				transform[(numdofs)*(counter+0) + counter+2] = coord_system[0][2];
+@@ -1235,8 +1240,7 @@
+ 				transform[(numdofs)*(counter+2) + counter+0] = coord_system[2][0];
+ 				transform[(numdofs)*(counter+2) + counter+1] = coord_system[2][1];
+ 				transform[(numdofs)*(counter+2) + counter+2] = coord_system[2][2];
+-				transform[(numdofs)*(counter+3) + counter+3] = 1.0;
+-				counter+=4;
++				counter+=3;
+ 				break;
+ 			default:
+ 				_error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15653)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15654)
+@@ -68,6 +68,8 @@
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
++			%MINI element for FS by default
++			obj.fe_FS = 3;
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -80,7 +82,7 @@
+ 				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0:3]);
+-				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0]);
++				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0:3]);
+ 				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+Index: ../trunk-jpl/src/m/enum/XYZPEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/XYZPEnum.m	(revision 15653)
++++ ../trunk-jpl/src/m/enum/XYZPEnum.m	(revision 15654)
+@@ -1,11 +0,0 @@
+-function macro=XYZPEnum()
+-%XYZPENUM - Enum of XYZP
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=XYZPEnum()
+-
+-macro=StringToEnum('XYZP');
+Index: ../trunk-jpl/src/m/enum/FSvelocityEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FSvelocityEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FSvelocityEnum.m	(revision 15654)
+@@ -0,0 +1,11 @@
++function macro=FSvelocityEnum()
++%FSVELOCITYENUM - Enum of FSvelocity
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FSvelocityEnum()
++
++macro=StringToEnum('FSvelocity');
+Index: ../trunk-jpl/src/m/enum/P1P1GLSEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/P1P1GLSEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/P1P1GLSEnum.m	(revision 15654)
+@@ -0,0 +1,11 @@
++function macro=P1P1GLSEnum()
++%P1P1GLSENUM - Enum of P1P1GLS
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=P1P1GLSEnum()
++
++macro=StringToEnum('P1P1GLS');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15653)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15654)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=567;
++macro=571;
+Index: ../trunk-jpl/src/m/enum/FSpressureEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FSpressureEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FSpressureEnum.m	(revision 15654)
+@@ -0,0 +1,11 @@
++function macro=FSpressureEnum()
++%FSPRESSUREENUM - Enum of FSpressure
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FSpressureEnum()
++
++macro=StringToEnum('FSpressure');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15653)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15654)
+@@ -4292,6 +4292,34 @@
+ 
+ 	return StringToEnum('FSApproximation')[0]
+ 
++def FSvelocityEnum():
++	"""
++	FSVELOCITYENUM - Enum of FSvelocity
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=FSvelocityEnum()
++	"""
++
++	return StringToEnum('FSvelocity')[0]
++
++def FSpressureEnum():
++	"""
++	FSPRESSUREENUM - Enum of FSpressure
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=FSpressureEnum()
++	"""
++
++	return StringToEnum('FSpressure')[0]
++
+ def ConstraintsEnum():
+ 	"""
+ 	CONSTRAINTSENUM - Enum of Constraints
+@@ -6714,6 +6742,34 @@
+ 
+ 	return StringToEnum('P1xP2')[0]
+ 
++def P1P1Enum():
++	"""
++	P1P1ENUM - Enum of P1P1
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=P1P1Enum()
++	"""
++
++	return StringToEnum('P1P1')[0]
++
++def P1P1GLSEnum():
++	"""
++	P1P1GLSENUM - Enum of P1P1GLS
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=P1P1GLSEnum()
++	"""
++
++	return StringToEnum('P1P1GLS')[0]
++
+ def MINIEnum():
+ 	"""
+ 	MINIENUM - Enum of MINI
+@@ -7750,19 +7806,19 @@
+ 
+ 	return StringToEnum('XY')[0]
+ 
+-def XYZPEnum():
++def XYZEnum():
+ 	"""
+-	XYZPENUM - Enum of XYZP
++	XYZENUM - Enum of XYZ
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=XYZPEnum()
++	      macro=XYZEnum()
+ 	"""
+ 
+-	return StringToEnum('XYZP')[0]
++	return StringToEnum('XYZ')[0]
+ 
+ def DenseEnum():
+ 	"""
+@@ -7958,5 +8014,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 567
++	return 571
+ 
+Index: ../trunk-jpl/src/m/enum/XYZEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/XYZEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/XYZEnum.m	(revision 15654)
+@@ -0,0 +1,11 @@
++function macro=XYZEnum()
++%XYZENUM - Enum of XYZ
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=XYZEnum()
++
++macro=StringToEnum('XYZ');
+Index: ../trunk-jpl/src/m/enum/P1P1Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/P1P1Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/P1P1Enum.m	(revision 15654)
+@@ -0,0 +1,11 @@
++function macro=P1P1Enum()
++%P1P1ENUM - Enum of P1P1
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=P1P1Enum()
++
++macro=StringToEnum('P1P1');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15654-15655.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15654-15655.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15654-15655.diff	(revision 16134)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/m/solve/WriteData.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.m	(revision 15654)
++++ ../trunk-jpl/src/m/solve/WriteData.m	(revision 15655)
+@@ -39,6 +39,10 @@
+ 		data  = scale.*data;
+ 	end
+ end
++if(size(data,1)==forcinglength),
++	yts=365.0*24.0*3600.0;
++	data(end,:) = data(end,:)*yts;
++end
+ 
+ %Step 1: write the enum to identify this record uniquely
+ fwrite(fid,enum,'int'); 
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 15654)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 15655)
+@@ -52,6 +52,10 @@
+ 				data  = scale*data
+ 		else:
+ 			data  = scale*data
++	if numpy.size(data) > 1 :
++		if numpy.size(data,0)==forcinglength:
++			yts=365.0*24.0*3600.0
++			data[-1,:] = yts*data[-1,:]
+ 
+ 	#Step 1: write the enum to identify this record uniquely
+ 	fid.write(struct.pack('i',enum)) 
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15654)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15655)
+@@ -51,6 +51,10 @@
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
++
++		#MINI element for FS by default
++		self.fe_FS=3
++
+ 		return self
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -63,7 +67,7 @@
+ 			md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',numpy.arange(0,3+1))
+-			md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0])
++			md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',numpy.arange(0,3+1))
+ 			md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1])
Index: /issm/oecreview/Archive/15392-16133/ISSM-15655-15656.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15655-15656.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15655-15656.diff	(revision 16134)
@@ -0,0 +1,250 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15655)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15656)
+@@ -69,6 +69,7 @@
+ 				case 1 : finiteelement = P1P1GLSEnum;       break;
+ 				case 2 : finiteelement = MINIcondensedEnum; break;
+ 				case 3 : finiteelement = MINIEnum;          break;
++				case 4 : finiteelement = TaylorHoodEnum;    break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15655)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15656)
+@@ -95,10 +95,11 @@
+ 			finiteelement = P1Enum;
+ 			iomodel->Constant(&temp,FlowequationFeFSEnum);
+ 			switch(temp){
+-				case 0 : finiteelement = P1Enum; break;//P1P1
+-				case 1 : finiteelement = P1Enum; break;//P1P1GSL
+-				case 2 : finiteelement = P1Enum; break;//MINIcondensedEnum
+-				case 3 : finiteelement = P1bubbleEnum; break;//MINIEnum
++				case 0 : finiteelement = P1Enum;       break;//P1P1
++				case 1 : finiteelement = P1Enum;       break;//P1P1GSL
++				case 2 : finiteelement = P1Enum;       break;//MINIcondensed
++				case 3 : finiteelement = P1bubbleEnum; break;//MINI
++				case 4 : finiteelement = P2Enum;       break;//TaylorHood (P2P1)
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15655)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15656)
+@@ -65,6 +65,7 @@
+ 				case 1 : finiteelement = P1P1GLSEnum;       break;
+ 				case 2 : finiteelement = MINIcondensedEnum; break;
+ 				case 3 : finiteelement = MINIEnum;          break;
++				case 4 : finiteelement = TaylorHoodEnum;    break;
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15655)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15656)
+@@ -155,14 +155,36 @@
+ 					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+-			/*P1+ pressure statically condensed*/
++			/*P1 pressure*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+ 					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
+ 			break;
++		case TaylorHoodEnum:
++			_assert_(approximation==FSApproximationEnum);
++			/*P2 velocity*/
++			EdgesPartitioning(&my_edges,iomodel);
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++				}
++			}
++			for(i=0;i<iomodel->numberofedges;i++){
++				if(my_edges[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
++				}
++			}
+ 
++			/*P1 pressure*/
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,i,iomodel,analysis,FSpressureEnum));
++				}
++			}
++			break;
++
+ 		default:
+ 			_error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet");
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15655)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15656)
+@@ -1302,6 +1302,11 @@
+ 			this->GetNodalFunctions(basis,gauss);
+ 			this->element_type = MINIEnum;
+ 			return;
++		case TaylorHoodEnum:
++			this->element_type = P2Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = TaylorHoodEnum;
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+@@ -1332,6 +1337,11 @@
+ 			this->GetNodalFunctions(basis,gauss);
+ 			this->element_type = MINIEnum;
+ 			return;
++		case TaylorHoodEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = TaylorHoodEnum;
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+@@ -1395,6 +1405,11 @@
+ 			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 			this->element_type = MINIEnum;
+ 			return;
++		case TaylorHoodEnum:
++			this->element_type = P2Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = TaylorHoodEnum;
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+@@ -1423,6 +1438,11 @@
+ 			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+ 			this->element_type = MINIEnum;
+ 			return;
++		case TaylorHoodEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = TaylorHoodEnum;
++			return;
+ 		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+@@ -1910,6 +1930,7 @@
+ 		case P1P1GLSEnum:       return NUMNODESP1*2;
+ 		case MINIcondensedEnum: return NUMNODESP1*2;
+ 		case MINIEnum:          return NUMNODESP1b+NUMNODESP1;
++		case TaylorHoodEnum:    return NUMNODESP2+NUMNODESP1;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+@@ -1924,6 +1945,7 @@
+ 		case P1P1GLSEnum:       return NUMNODESP1;
+ 		case MINIcondensedEnum: return NUMNODESP1;
+ 		case MINIEnum:          return NUMNODESP1;
++		case TaylorHoodEnum:    return NUMNODESP1;
+ 		default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+@@ -1938,6 +1960,7 @@
+ 		case P1P1GLSEnum:       return NUMNODESP1;
+ 		case MINIcondensedEnum: return NUMNODESP1b;
+ 		case MINIEnum:          return NUMNODESP1b;
++		case TaylorHoodEnum:    return NUMNODESP2;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+@@ -1954,6 +1977,7 @@
+ 		case P1P1GLSEnum:       return NUMNODESP1;
+ 		case MINIcondensedEnum: return NUMNODESP1;
+ 		case MINIEnum:          return NUMNODESP1b;
++		case TaylorHoodEnum:    return NUMNODESP2;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15655)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15656)
+@@ -3281,6 +3281,7 @@
+ 			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
+ 			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
+ 			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++
+ 			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+0];
+ 			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+1];
+ 			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[6*index+2];
+@@ -3298,6 +3299,7 @@
+ 			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
+ 			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
+ 			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
++
+ 			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+0];
+ 			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+1];
+ 			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+2];
+@@ -3305,6 +3307,33 @@
+ 			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+4];
+ 			penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[6*index+5];
+ 			break;
++		case TaylorHoodEnum:
++			numnodes         = 21;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
++			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
++			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
++			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
++			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
++			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+0]+1;
++			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+1]+1;
++			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+2]+1;
++			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
++			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
++			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
++			penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
++			penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
++			penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
++
++			penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+0];
++			penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+1];
++			penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+2];
++			penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+3];
++			penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+4];
++			penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+5];
++			printarray(penta_node_ids,1,21);
++			break;
+ 		default:
+ 			_error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
+ 	}
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15655)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15656)
+@@ -67,7 +67,7 @@
+ 			md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',numpy.arange(0,3+1))
+-			md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',numpy.arange(0,3+1))
++			md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',numpy.arange(0,4+1))
+ 			md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1])
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15655)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15656)
+@@ -82,7 +82,7 @@
+ 				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0:3]);
+-				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0:3]);
++				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0:4]);
+ 				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices 1],'values',[0 1]);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15656-15657.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15656-15657.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15656-15657.diff	(revision 16134)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15656)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15657)
+@@ -138,13 +138,29 @@
+ 			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+ 			iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+ 			iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+-			for(i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-						constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum));
+-						count++;
++			switch(finiteelement){
++				case P1bubbleEnum:
++					for(i=0;i<iomodel->numberofvertices;i++){
++						if(iomodel->my_vertices[i]){
++							if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum));
++								count++;
++							}
++						}
+ 					}
+-				}
++					break;
++				case P2Enum:
++					for(i=0;i<iomodel->numberofvertices;i++){
++						if(iomodel->my_vertices[i]){
++							if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum));
++								count++;
++							}
++						}
++					}
++					break;
++				default:
++					_error_("not implemented yet");
+ 			}
+ 			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+ 			iomodel->DeleteData(surface,SurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15656)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15657)
+@@ -168,11 +168,13 @@
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
++					if(IssmComm::GetRank()==0) printf("Creating node id %i\n",iomodel->nodecounter+i+1);
+ 					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
++					if(IssmComm::GetRank()==0) printf("Creating node id %i\n",iomodel->nodecounter+iomodel->numberofvertices+i+1);
+ 					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+@@ -180,6 +182,7 @@
+ 			/*P1 pressure*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
++					if(IssmComm::GetRank()==0) printf("Creating node id %i\n",iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1);
+ 					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15656)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15657)
+@@ -3332,7 +3332,6 @@
+ 			penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+3];
+ 			penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+4];
+ 			penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+5];
+-			printarray(penta_node_ids,1,21);
+ 			break;
+ 		default:
+ 			_error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
Index: /issm/oecreview/Archive/15392-16133/ISSM-15657-15658.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15657-15658.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15657-15658.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15657)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15658)
+@@ -168,13 +168,11 @@
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					if(IssmComm::GetRank()==0) printf("Creating node id %i\n",iomodel->nodecounter+i+1);
+ 					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
+-					if(IssmComm::GetRank()==0) printf("Creating node id %i\n",iomodel->nodecounter+iomodel->numberofvertices+i+1);
+ 					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+@@ -182,7 +180,6 @@
+ 			/*P1 pressure*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					if(IssmComm::GetRank()==0) printf("Creating node id %i\n",iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1);
+ 					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15688-15689.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15688-15689.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15688-15689.diff	(revision 16134)
@@ -0,0 +1,658 @@
+Index: ../trunk-jpl/src/c/main/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/kriging.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/main/kriging.cpp	(revision 15689)
+@@ -147,7 +147,7 @@
+ 	IoModel* iomodel = new IoModel();
+ 	iomodel->fid=fid;
+ 	iomodel->CheckEnumSync();
+-	iomodel->independents=xNew<bool>(MaximumNumberOfEnums); for(int i=0;i<MaximumNumberOfEnums;i++) iomodel->independents[i]=false;
++	iomodel->independents=xNew<bool>(MaximumNumberOfDefinitionsEnum); for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++) iomodel->independents[i]=false;
+ 	iomodel->FetchData(&x,&M,&N,0);        nobs=M*N;
+ 	iomodel->FetchData(&y,&M,&N,1);        _assert_(M*N==nobs);
+ 	iomodel->FetchData(&data,&M,&N,2);     _assert_(M*N==nobs);
+Index: ../trunk-jpl/src/c/shared/Enum/Synchronize.sh
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 15688)
++++ ../trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 15689)
+@@ -2,7 +2,7 @@
+ #Synchronize EnumToStringx.cpp and StringToEnumx.cpp and matlab Enums
+ 
+ #Get all lines of EnumDefinitions2.h which hold Enum | remove all commas > put everything in file temp
+-cat EnumDefinitions.h | grep -e "[0-9]Enum," -e "[a-zA-Z]Enum," | grep -v include | sed -e "s/,/ /g" | awk '{print $1}' > temp
++cat EnumDefinitions.h | grep -e "[0-9]Enum," -e "[a-zA-Z]Enum," -e "MaximumNumberOfDefinitionsEnum" | grep -v include | sed -e "s/,/ /g" | awk '{print $1}' > temp
+ 
+ #Removed existing files
+ rm $ISSM_DIR/src/m/enum/*.m
+@@ -176,44 +176,6 @@
+ #}}}
+ 
+ done
+-#MaximumNumberOfEnums (matlab){{{
+-cat <<END > $ISSM_DIR/src/m/enum/MaximumNumberOfEnums.m
+-function macro=MaximumNumberOfEnums()
+-%$(echo "MaximumNumberOfEnums" | awk {'print toupper($1)'}) - Enum of MaximumNumberOfEnums
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaximumNumberOfEnums()
+-
+-macro=$(cat EnumDefinitions.h | grep -e "[0-9]Enum" -e "[a-zA-Z]Enum" | grep -v include \
+-		| awk '{ printf "%s %s\n", NR-1, $0 }' \
+-		| grep "MaximumNumberOfEnums" | awk '{print $1}');
+-END
+-#}}}
+-#MaximumNumberOfEnums (python){{{
+-cat <<END >> $ISSM_DIR/src/m/enum/EnumDefinitions.py
+-def MaximumNumberOfEnums():
+-	"""
+-	$(echo "MaximumNumberOfEnums" | awk {'print toupper($1)'}) - Enum of MaximumNumberOfEnums
+-
+-	WARNING: DO NOT MODIFY THIS FILE
+-				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-				Please read src/c/shared/Enum/README for more information
+-
+-	   Usage:
+-	      macro=MaximumNumberOfEnums()
+-	"""
+-
+-	return $(cat EnumDefinitions.h | grep -e "[0-9]Enum" -e "[a-zA-Z]Enum" | grep -v include \
+-		| awk '{ printf "%s %s\n", NR-1, $0 }' \
+-		| grep "MaximumNumberOfEnums" | awk '{print $1}')
+-
+-END
+-#}}}
+-
+ #clean up{{{
+ rm temp
+ #}}}
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15688)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15689)
+@@ -502,6 +502,7 @@
+ 	P1Enum,
+ 	P1DGEnum,
+ 	P1bubbleEnum,
++	P1bubblecondensedEnum,
+ 	P2Enum,
+ 	P2xP1Enum,
+ 	P1xP2Enum,
+@@ -618,7 +619,7 @@
+ 	PatersonEnum,
+ 	ArrheniusEnum,
+ 	/*}}}*/
+-	MaximumNumberOfEnums
++	MaximumNumberOfDefinitionsEnum
+ };
+ 
+ #endif
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15689)
+@@ -494,6 +494,7 @@
+ 		case P1Enum : return "P1";
+ 		case P1DGEnum : return "P1DG";
+ 		case P1bubbleEnum : return "P1bubble";
++		case P1bubblecondensedEnum : return "P1bubblecondensed";
+ 		case P2Enum : return "P2";
+ 		case P2xP1Enum : return "P2xP1";
+ 		case P1xP2Enum : return "P1xP2";
+@@ -587,6 +588,7 @@
+ 		case OptionLogicalEnum : return "OptionLogical";
+ 		case PatersonEnum : return "Paterson";
+ 		case ArrheniusEnum : return "Arrhenius";
++		case MaximumNumberOfDefinitionsEnum : return "MaximumNumberOfDefinitions";
+ 		default : return "unknown";
+ 
+ 	}
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15689)
+@@ -503,12 +503,13 @@
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
++	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+-	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
++	      if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
++	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+@@ -599,6 +600,7 @@
+ 	      else if (strcmp(name,"OptionLogical")==0) return OptionLogicalEnum;
+ 	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
++	      else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
+          else stage=6;
+    }
+ 	/*If we reach this point, the string provided has not been found*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 15689)
+@@ -43,6 +43,34 @@
+ 			}
+ 			break;
+ 
++		case P1bubbleEnum:
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++				}
++			}
++			for(i=0;i<iomodel->numberofelements;i++){
++				if(iomodel->my_elements[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation));
++				}
++			}
++			break;
++
++		case P1bubblecondensedEnum:
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++				}
++			}
++			for(i=0;i<iomodel->numberofelements;i++){
++				if(iomodel->my_elements[i]){
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation);
++					node->Deactivate();
++					nodes->AddObject(node);
++				}
++			}
++			break;
++
+ 		case P1xP2Enum:
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 15689)
+@@ -120,6 +120,16 @@
+ 					}
+ 				}
+ 				break;
++			case P1bubblecondensedEnum:
++				for(i=0;i<iomodel->numberofvertices;i++){
++					if((iomodel->my_vertices[i])){
++						if (!xIsNan<IssmDouble>(spcdata[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,dof,spcdata[i],analysis_type));
++							count++;
++						}
++					}
++				}
++				break;
+ 			case P1xP2Enum:
+ 				for(i=0;i<iomodel->numberofvertices;i++){
+ 					if((iomodel->my_vertices[i])){
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15689)
+@@ -2364,6 +2364,14 @@
+ 			tria_node_ids[1]=iomodel->nodecounter+3*index+2;
+ 			tria_node_ids[2]=iomodel->nodecounter+3*index+3;
+ 			break;
++		case P1bubbleEnum: case P1bubblecondensedEnum:
++			numnodes        = 4;
++			tria_node_ids   = xNew<int>(numnodes);
++			tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
++			tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
++			tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
++			tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
++			break;
+ 		case P2Enum:
+ 			numnodes        = 6;
+ 			tria_node_ids   = xNew<int>(numnodes);
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15689)
+@@ -1205,8 +1205,7 @@
+ 	IssmDouble zeta=gauss->coord4;
+ 
+ 	switch(this->element_type){
+-		case P1Enum:
+-		case P1DGEnum:
++		case P1Enum: case P1DGEnum:
+ 			basis[0]=gauss->coord1*(1.-zeta)/2.;
+ 			basis[1]=gauss->coord2*(1.-zeta)/2.;
+ 			basis[2]=gauss->coord3*(1.-zeta)/2.;
+@@ -1214,7 +1213,7 @@
+ 			basis[4]=gauss->coord2*(1.+zeta)/2.;
+ 			basis[5]=gauss->coord3*(1.+zeta)/2.;
+ 			return;
+-		case P1bubbleEnum:
++		case P1bubbleEnum: case P1bubblecondensedEnum:
+ 			basis[0]=gauss->coord1*(1.-zeta)/2.;
+ 			basis[1]=gauss->coord2*(1.-zeta)/2.;
+ 			basis[2]=gauss->coord3*(1.-zeta)/2.;
+@@ -1486,7 +1485,7 @@
+ 			dbasis[NUMNODESP1*1+5]   = SQRT3/6.*(1.+zeta);
+ 			dbasis[NUMNODESP1*2+5]   = .5*gauss->coord3;
+ 			return;
+-		case P1bubbleEnum:
++		case P1bubbleEnum: case P1bubblecondensedEnum:
+ 			/*Nodal function 1*/
+ 			dbasis[NUMNODESP1b*0+0]   = (zeta-1.)/4.;
+ 			dbasis[NUMNODESP1b*1+0]   = SQRT3/12.*(zeta-1.);
+@@ -1921,16 +1920,17 @@
+ int PentaRef::NumberofNodes(void){
+ 
+ 	switch(this->element_type){
+-		case P1Enum:            return NUMNODESP1;
+-		case P1bubbleEnum:      return NUMNODESP1b;
+-		case P2Enum:            return NUMNODESP2;
+-		case P2xP1Enum:         return NUMNODESP2xP1;
+-		case P1xP2Enum:         return NUMNODESP1xP2;
+-		case P1P1Enum:          return NUMNODESP1*2;
+-		case P1P1GLSEnum:       return NUMNODESP1*2;
+-		case MINIcondensedEnum: return NUMNODESP1b+NUMNODESP1;
+-		case MINIEnum:          return NUMNODESP1b+NUMNODESP1;
+-		case TaylorHoodEnum:    return NUMNODESP2+NUMNODESP1;
++		case P1Enum:                return NUMNODESP1;
++		case P1bubbleEnum:          return NUMNODESP1b;
++		case P1bubblecondensedEnum: return NUMNODESP1b;
++		case P2Enum:                return NUMNODESP2;
++		case P2xP1Enum:             return NUMNODESP2xP1;
++		case P1xP2Enum:             return NUMNODESP1xP2;
++		case P1P1Enum:              return NUMNODESP1*2;
++		case P1P1GLSEnum:           return NUMNODESP1*2;
++		case MINIcondensedEnum:     return NUMNODESP1b+NUMNODESP1;
++		case MINIEnum:              return NUMNODESP1b+NUMNODESP1;
++		case TaylorHoodEnum:        return NUMNODESP2+NUMNODESP1;
+ 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15689)
+@@ -3219,6 +3219,17 @@
+ 			penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
+ 			penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
+ 			break;
++		case P1bubbleEnum: case P1bubblecondensedEnum:
++			numnodes         = 7;
++			penta_node_ids   = xNew<int>(numnodes);
++			penta_node_ids[0]=iomodel->nodecounter+iomodel->elements[6*index+0];
++			penta_node_ids[1]=iomodel->nodecounter+iomodel->elements[6*index+1];
++			penta_node_ids[2]=iomodel->nodecounter+iomodel->elements[6*index+2];
++			penta_node_ids[3]=iomodel->nodecounter+iomodel->elements[6*index+3];
++			penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
++			penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
++			penta_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
++			break;
+ 		case P1xP2Enum:
+ 			numnodes         = 9;
+ 			penta_node_ids   = xNew<int>(numnodes);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15689)
+@@ -15,8 +15,9 @@
+ /*}}}*/
+ 
+ /*Element macros*/
+-#define NUMNODESP1 3
+-#define NUMNODESP2 6
++#define NUMNODESP1  3
++#define NUMNODESP1b 4
++#define NUMNODESP2  6
+ 
+ /*Object constructors and destructor*/
+ /*FUNCTION TriaRef::TriaRef(){{{*/
+@@ -42,7 +43,7 @@
+ /*FUNCTION TriaRef::SetElementType{{{*/
+ void TriaRef::SetElementType(int type,int type_counter){
+ 
+-	_assert_(type==P1Enum || type==P1DGEnum || type==P2Enum);
++	_assert_(type==P1Enum || type==P1DGEnum || type==P1bubbleEnum || type==P1bubblecondensedEnum || type==P2Enum);
+ 
+ 	/*initialize element type*/
+ 	this->element_type_list[type_counter]=type;
+@@ -430,12 +431,18 @@
+ 	_assert_(basis);
+ 
+ 	switch(this->element_type){
+-		case P1Enum:
+-		case P1DGEnum:
++		case P1Enum: case P1DGEnum:
+ 			basis[0]=gauss->coord1;
+ 			basis[1]=gauss->coord2;
+ 			basis[2]=gauss->coord3;
+ 			return;
++		case P1bubbleEnum: case P1bubblecondensedEnum:
++			/*Corner nodes*/
++			basis[0]=gauss->coord1*(2.*gauss->coord1-1.);
++			basis[1]=gauss->coord2*(2.*gauss->coord2-1.);
++			basis[2]=gauss->coord3*(2.*gauss->coord3-1.);
++			/*bubble*/
++			basis[3]=27.*gauss->coord1*gauss->coord2*gauss->coord3;
+ 		case P2Enum:
+ 			/*Corner nodes*/
+ 			basis[0]=gauss->coord1*(2.*gauss->coord1-1.);
+@@ -466,12 +473,16 @@
+ 	GetNodalFunctions(triabasis,gauss);
+ 
+ 	switch(this->element_type){
+-		case P1Enum:
+-		case P1DGEnum:
++		case P1Enum: case P1DGEnum:
+ 			basis[0]=triabasis[index1];
+ 			basis[1]=triabasis[index2];
+ 			xDelete<IssmDouble>(triabasis);
+ 			return;
++		case P1bubbleEnum: case P1bubblecondensedEnum:
++			basis[0]=triabasis[index1];
++			basis[1]=triabasis[index2];
++			xDelete<IssmDouble>(triabasis);
++			return;
+ 		case P2Enum:
+ 			_assert_(index2<index1);
+ 			basis[0]=triabasis[index1];
+@@ -537,6 +548,20 @@
+ 			dbasis[NUMNODESP1*0+2] = 0;
+ 			dbasis[NUMNODESP1*1+2] = SQRT3/3.;
+ 			return;
++		case P1bubbleEnum: case P1bubblecondensedEnum:
++			/*Nodal function 1*/
++			dbasis[NUMNODESP1b*0+0] = -0.5;
++			dbasis[NUMNODESP1b*1+0] = -SQRT3/6.;
++			/*Nodal function 2*/
++			dbasis[NUMNODESP1b*0+1] = 0.5;
++			dbasis[NUMNODESP1b*1+1] = -SQRT3/6.;
++			/*Nodal function 3*/
++			dbasis[NUMNODESP1b*0+2] = 0;
++			dbasis[NUMNODESP1b*1+2] = SQRT3/3.;
++			/*Nodal function 4*/
++			dbasis[NUMNODESP1b*0+2] = 27.*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);;
++			dbasis[NUMNODESP1b*1+2] = 27.*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
++			return;
+ 		case P2Enum:
+ 			/*Nodal function 1*/
+ 			dbasis[NUMNODESP2*0+0] = -2.*gauss->coord1 + 0.5;
+@@ -621,9 +646,11 @@
+ int TriaRef::NumberofNodes(void){
+ 
+ 	switch(this->element_type){
+-		case P1Enum:   return NUMNODESP1;
+-		case P1DGEnum: return NUMNODESP1;
+-		case P2Enum:   return NUMNODESP2;
++		case P1Enum:                return NUMNODESP1;
++		case P1DGEnum:              return NUMNODESP1;
++		case P1bubbleEnum:          return NUMNODESP1b;
++		case P1bubblecondensedEnum: return NUMNODESP1b;
++		case P2Enum:                return NUMNODESP2;
+ 		default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15688)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15689)
+@@ -56,8 +56,8 @@
+ 	this->CheckEnumSync();
+ 
+ 	/*Initialize data: */
+-	this->data=xNew<IssmDouble*>(MaximumNumberOfEnums);
+-	for(int i=0;i<MaximumNumberOfEnums;i++) this->data[i]=NULL;
++	this->data=xNew<IssmDouble*>(MaximumNumberOfDefinitionsEnum);
++	for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++) this->data[i]=NULL;
+ 
+ 	/*If we are running in AD mode, we need to start the trace and declare our independent variables now, 
+ 	 *and prevent them from being erased during successive calls to iomodel->FetchConstants, iomodel->FetchData and 
+@@ -93,7 +93,7 @@
+ 	/*Some checks in debugging mode*/
+ 	#ifdef _ISSM_DEBUG_
+ 	if(this->data){
+-		for(int i=0;i<MaximumNumberOfEnums;i++){
++		for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++){
+ 			if(this->data[i]){
+ 				_printf0_("Info: previous pointer of " << EnumToStringx(i) << " has not been freed (DeleteData has not been called)\n");
+ 			}
+@@ -142,7 +142,7 @@
+ 			_error_("Marshalled file is empty");
+ 		}
+ 		else{
+-			if(record_enum!=MaximumNumberOfEnums){
++			if(record_enum!=MaximumNumberOfDefinitionsEnum){
+ 				_printf0_("\n");
+ 				_printf0_("=========================================================================\n");
+ 				_printf0_(" Enums in marshalled file are not compatible with compiled code          \n");
+@@ -214,7 +214,7 @@
+ /*FUNCTION IoModel::Data{{{*/
+ IssmDouble* IoModel::Data(int data_enum){
+ 
+-	_assert_(data_enum<MaximumNumberOfEnums);
++	_assert_(data_enum<MaximumNumberOfDefinitionsEnum);
+ 	_assert_(data_enum>=0);
+ 
+ 	return this->data[data_enum];
+@@ -234,8 +234,8 @@
+ 	bool keep=false;
+ 
+ 	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
+-	this->independents=xNew<bool>(MaximumNumberOfEnums);
+-	for(i=0;i<MaximumNumberOfEnums;i++) this->independents[i]=false;
++	this->independents=xNew<bool>(MaximumNumberOfDefinitionsEnum);
++	for(i=0;i<MaximumNumberOfDefinitionsEnum;i++) this->independents[i]=false;
+ 
+ 	this->FetchData(&autodiff,AutodiffIsautodiffEnum);
+ 	if(autodiff){
+@@ -291,7 +291,7 @@
+ 	va_start(ap,num);
+ 	for(i = 0; i <num; i++){
+ 		dataenum=va_arg(ap, int);
+-		_assert_(dataenum<MaximumNumberOfEnums);
++		_assert_(dataenum<MaximumNumberOfDefinitionsEnum);
+ 
+ 		/*do not erase independent variables for the AD mode computations!: */
+ 		if (!this->independents[dataenum]) xDelete<IssmDouble>(this->data[dataenum]);
+@@ -1065,7 +1065,7 @@
+ 		/*Some checks in debugging mode*/
+ 		/*{{{*/
+ 		#ifdef _ISSM_DEBUG_
+-		_assert_(dataenum<MaximumNumberOfEnums);
++		_assert_(dataenum<MaximumNumberOfDefinitionsEnum);
+ 		if(this->data[dataenum]){
+ 			_error_("Info: trying to fetch " << EnumToStringx(dataenum) << " but previous pointer has not been freed (DeleteData has not been called)");
+ 		}
+@@ -1095,12 +1095,12 @@
+ 	int     numberofelements;
+ 
+ 	/*variables being fetched: */
+-	bool    boolean;
+-	int     integer;
++	bool        boolean;
++	int         integer;
+ 	IssmDouble  scalar;
+-	char   *string        = NULL;
+-	IssmDouble *IssmDoublevector  = NULL;
+-	int     M,N;
++	char       *string           = NULL;
++	IssmDouble *IssmDoublevector = NULL;
++	int         M,N;
+ 
+ 	/*Fetch parameters: */
+ 	this->constants->FindParam(&numberofelements,MeshNumberofelementsEnum);
+Index: ../trunk-jpl/src/m/solve/marshall.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/marshall.py	(revision 15688)
++++ ../trunk-jpl/src/m/solve/marshall.py	(revision 15689)
+@@ -21,7 +21,7 @@
+ 		raise IOError("marshall error message: could not open '%s.bin' file for binary writing." % md.miscellaneous.name)
+ 
+ 	#First, write MaximumNumberOfEnum to make sure that the Enums are synchronized
+-	WriteData(fid,'enum',MaximumNumberOfEnums(),'data',True,'format','Boolean')
++	WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum(),'data',True,'format','Boolean')
+ 
+ 	#Go through all model fields: check that it is a class and call checkconsistency
+ 	fields=vars(md)
+Index: ../trunk-jpl/src/m/solve/marshall.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/marshall.m	(revision 15688)
++++ ../trunk-jpl/src/m/solve/marshall.m	(revision 15689)
+@@ -16,7 +16,7 @@
+ end
+ 
+ %First, write MaximumNumberOfEnum to make sure that the Enums are synchronized
+-WriteData(fid,'enum',MaximumNumberOfEnums(),'data',true,'format','Boolean');
++WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum(),'data',true,'format','Boolean');
+ 
+ %Go through all model fields: check that it is a class and call checkconsistency
+ fields=properties('model');
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15688)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15689)
+@@ -43,7 +43,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'isFS',"are the Full-FS (FS) equations used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'fe_SSA',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'fe_HO' ,"Finite Element for HO   0: P1xP1, 1: P1xP2, 2: P2xP1, 3: P2xP2"))
+-		string="%s\n%s"%(string,fielddisplay(self,'fe_FS' ,"Finite Element for FS   0: P1P1 (debugging), 1: P1P1GSL (under dev), 2: MINI condensed (under dev), 3: MINI, 4: P2P1 (Taylor-Hood)"))
++		string="%s\n%s"%(string,fielddisplay(self,'fe_FS' ,"Finite Element for FS   0: P1P1 (debugging), 1: P1P1GSL (under dev), 2: MINI condensed, 3: MINI, 4: P2P1 (Taylor-Hood)"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vertex_equation',"flow equation for each vertex"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'element_equation',"flow equation for each element"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'borderSSA',"vertices on SSA's border (for tiling)"))
+@@ -54,7 +54,7 @@
+ 	def setdefaultparameters(self): # {{{
+ 
+ 		#MINI element for FS by default
+-		self.fe_FS=3
++		self.fe_FS=2
+ 
+ 		return self
+ 	#}}}
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15688)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15689)
+@@ -68,8 +68,8 @@
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+-			%MINI element for FS by default
+-			obj.fe_FS = 3;
++			%MINI condensed element for FS by default
++			obj.fe_FS = 2;
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -116,7 +116,7 @@
+ 			fielddisplay(obj,'isFS','are the Full-FS (FS) equations used ?');
+ 			fielddisplay(obj,'fe_SSA','Finite Element for SSA  0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
+ 			fielddisplay(obj,'fe_HO', 'Finite Element for HO   0: P1xP1, 1: P1xP2, 2: P2xP1, 3: P2xP2');
+-			fielddisplay(obj,'fe_FS', 'Finite Element for FS   0: P1P1 (debugging), 1: P1P1GSL (under dev), 2: MINI condensed (under dev), 3: MINI, 4: P2P1 (Taylor-Hood)');
++			fielddisplay(obj,'fe_FS', 'Finite Element for FS   0: P1P1 (debugging), 1: P1P1GSL (under dev), 2: MINI condensed, 3: MINI, 4: P2P1 (Taylor-Hood)');
+ 			fielddisplay(obj,'vertex_equation','flow equation for each vertex');
+ 			fielddisplay(obj,'element_equation','flow equation for each element');
+ 			fielddisplay(obj,'borderSSA','vertices on SSA''s border (for tiling)');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15688)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 15689)
+@@ -1,11 +0,0 @@
+-function macro=MaximumNumberOfEnums()
+-%MAXIMUMNUMBEROFENUMS - Enum of MaximumNumberOfEnums
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaximumNumberOfEnums()
+-
+-macro=571;
+Index: ../trunk-jpl/src/m/enum/P1bubblecondensedEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/P1bubblecondensedEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/P1bubblecondensedEnum.m	(revision 15689)
+@@ -0,0 +1,11 @@
++function macro=P1bubblecondensedEnum()
++%P1BUBBLECONDENSEDENUM - Enum of P1bubblecondensed
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=P1bubblecondensedEnum()
++
++macro=StringToEnum('P1bubblecondensed');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfDefinitionsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfDefinitionsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfDefinitionsEnum.m	(revision 15689)
+@@ -0,0 +1,11 @@
++function macro=MaximumNumberOfDefinitionsEnum()
++%MAXIMUMNUMBEROFDEFINITIONSENUM - Enum of MaximumNumberOfDefinitions
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaximumNumberOfDefinitionsEnum()
++
++macro=StringToEnum('MaximumNumberOfDefinitions');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15688)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15689)
+@@ -6700,6 +6700,20 @@
+ 
+ 	return StringToEnum('P1bubble')[0]
+ 
++def P1bubblecondensedEnum():
++	"""
++	P1BUBBLECONDENSEDENUM - Enum of P1bubblecondensed
++
++	WARNING: DO NOT MODIFY THIS FILE
++				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++				Please read src/c/shared/Enum/README for more information
++
++	   Usage:
++	      macro=P1bubblecondensedEnum()
++	"""
++
++	return StringToEnum('P1bubblecondensed')[0]
++
+ def P2Enum():
+ 	"""
+ 	P2ENUM - Enum of P2
+@@ -8002,17 +8016,17 @@
+ 
+ 	return StringToEnum('Arrhenius')[0]
+ 
+-def MaximumNumberOfEnums():
++def MaximumNumberOfDefinitionsEnum():
+ 	"""
+-	MAXIMUMNUMBEROFENUMS - Enum of MaximumNumberOfEnums
++	MAXIMUMNUMBEROFDEFINITIONSENUM - Enum of MaximumNumberOfDefinitions
+ 
+ 	WARNING: DO NOT MODIFY THIS FILE
+ 				this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+ 				Please read src/c/shared/Enum/README for more information
+ 
+ 	   Usage:
+-	      macro=MaximumNumberOfEnums()
++	      macro=MaximumNumberOfDefinitionsEnum()
+ 	"""
+ 
+-	return 571
++	return StringToEnum('MaximumNumberOfDefinitions')[0]
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15703-15704.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15703-15704.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15703-15704.diff	(revision 16134)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15703)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15704)
+@@ -2440,7 +2440,7 @@
+ 	}
+ 
+ 	/*hooks: */
+-	this->SetHookNodes(tria_node_ids,numnodes,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
++	this->SetHookNodes(tria_node_ids,numnodes,analysis_counter); this->nodes=NULL;
+ 	xDelete<int>(tria_node_ids);
+ 
+ 	/*Fill with IoModel*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15703)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15704)
+@@ -3410,7 +3410,7 @@
+ 	}
+ 
+ 	/*hooks: */
+-	this->SetHookNodes(penta_node_ids,numnodes,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
++	this->SetHookNodes(penta_node_ids,numnodes,analysis_counter); this->nodes=NULL;
+ 	xDelete<int>(penta_node_ids);
+ 
+ 	/*Fill with IoModel*/
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15703)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15704)
+@@ -560,7 +560,7 @@
+ 			dbasis[NUMNODESP1b*0+2] = 0;
+ 			dbasis[NUMNODESP1b*1+2] = SQRT3/3.;
+ 			/*Nodal function 4*/
+-			dbasis[NUMNODESP1b*0+3] = 27.*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);;
++			dbasis[NUMNODESP1b*0+3] = 27.*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);
+ 			dbasis[NUMNODESP1b*1+3] = 27.*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
+ 			return;
+ 		case P2Enum:
Index: /issm/oecreview/Archive/15392-16133/ISSM-15721-15722.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15721-15722.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15721-15722.diff	(revision 16134)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15721)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15722)
+@@ -16,6 +16,8 @@
+ void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	int    materials_type,finiteelement,temp;
++	int    approximation;
++	int*   finiteelement_list=NULL;
+ 	bool   isSSA,isL1L2,isHO,isFS,iscoupling;
+ 	bool   control_analysis;
+ 	bool   dakota_analysis;
+@@ -29,6 +31,10 @@
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&materials_type,MaterialsEnum);
+ 
++	/*Fetch data needed and allocate vectors: */
++	iomodel->FetchData(1,FlowequationElementEquationEnum);
++	finiteelement_list=xNewZeroInit<int>(iomodel->numberofelements);
++
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+ 	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+ 
+@@ -76,26 +82,36 @@
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
++		for(int i=0;i<iomodel->numberofelements;i++){
++			finiteelement_list[i]=finiteelement;
++		}
+ 	}
+ 	else{
+ 		if(isFS){
+-			finiteelement = MINIEnum;
++			for(int i=0;i<iomodel->numberofelements;i++){
++				approximation=reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[i]);
++				if(approximation==FSApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
++					finiteelement_list[i]=MINIcondensedEnum;
++				}
++				else{
++					finiteelement_list[i]=P1Enum;
++				}
++			}
+ 		}
+ 		else{
+ 			finiteelement = P1Enum;
++			for(int i=0;i<iomodel->numberofelements;i++){
++				finiteelement_list[i]=finiteelement;
++			}
+ 		}
+-
+ 	}
+ 
+-	/*Fetch data needed: */
+-	iomodel->FetchData(1,FlowequationElementEquationEnum);
+-
+ 	/*Update elements: */
+ 	int counter=0;
+ 	for(int i=0;i<iomodel->numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+ 			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
+ 			counter++;
+ 		}
+ 	}
+@@ -156,4 +172,5 @@
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(1,FlowequationElementEquationEnum);
++	xDelete<int>(finiteelement_list);
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15722-15723.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15722-15723.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15722-15723.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15722)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 15723)
+@@ -114,6 +114,7 @@
+ 	/*Clean up*/
+ 	xDelete<int>(head_minv);
+ 	xDelete<int>(next_edge);
++	xDelete<int>(elementedges_markers);
+ 
+ 	/*Create final edges*/
+ 	int* edges = xNew<int>(nbe*3); /*format: [vertex1 vertex2 marker]*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15723-15724.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15723-15724.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15723-15724.diff	(revision 16134)
@@ -0,0 +1,112 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15723)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15724)
+@@ -6721,7 +6721,7 @@
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,FSApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+@@ -6817,7 +6817,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+@@ -6920,7 +6920,7 @@
+ 
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1;
+ 	delete Ke2;
+@@ -7653,7 +7653,7 @@
+ 	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementMatrix* Ke     = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	ElementMatrix* Ke     = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
+ 	IssmDouble*    B      = xNew<IssmDouble>(8*numdof);
+ 	IssmDouble*    Bprime = xNew<IssmDouble>(8*numdof);
+ 	IssmDouble*    D      = xNewZeroInit<IssmDouble>(8*8);
+@@ -7724,7 +7724,7 @@
+ 	int  numdof   = vnumnodes*NDOF3 + pnumnodes*NDOF1;
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementMatrix* Ke        = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	ElementMatrix* Ke        = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
+ 	IssmDouble*    BFriction = xNew<IssmDouble>(2*numdof);
+ 	IssmDouble*    D         = xNewZeroInit<IssmDouble>(2*2);
+ 
+@@ -7908,7 +7908,7 @@
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=SSAFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -7972,7 +7972,7 @@
+ 	if(!IsOnBed() || IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=SSAFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -8053,7 +8053,7 @@
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=HOFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -8117,7 +8117,7 @@
+ 	if(!IsOnBed() || IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=HOFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
++	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -8572,7 +8572,7 @@
+ 	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
+ 	IssmDouble*    vbasis = xNew<IssmDouble>(vnumnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -8735,7 +8735,7 @@
+ 	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
+ 	IssmDouble*    vbasis = xNew<IssmDouble>(vnumnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -8807,7 +8807,7 @@
+ 	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
+ 	IssmDouble*    vbasis = xNew<IssmDouble>(vnumnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15724-15725.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15724-15725.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15724-15725.diff	(revision 16134)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 15724)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 15725)
+@@ -158,22 +158,33 @@
+ 				else
+ 					disp(['Extracting results of ' fields{i}]);
+ 				end
+-				errlog = cellstr(md.results.(fields{i}).errlog);
+-				lines  = strfind(errlog,'definitely lost:');
+-				lines  = find(~cellfun(@isempty,lines));
+-				total  = 0;
+-				for j=1:numel(lines)
+-					Line    = errlog(lines(j));
++				results = md.results.(fields{i});
++				errlog  = cellstr(results(1).errlog);
++				lines1  = strfind(errlog,'definitely lost:');
++				lines1  = find(~cellfun(@isempty,lines1));
++				lines2  = strfind(errlog,'Conditional jump or move depends on uninitialised value');
++				lines2  = find(~cellfun(@isempty,lines2));
++				jumps   = numel(lines2);
++				leaks   = 0;
++				for j=1:numel(lines1)
++					Line    = errlog(lines1(j));
+ 					Numbers = sscanf(Line{1},'==%i==   definitely lost: %s bytes in %i blocks',[1 Inf]);
+-					total   = total+ str2num(strrep(char(Numbers(2:end-1)),',',''));
++					leaks   = leaks + str2num(strrep(char(Numbers(2:end-1)),',',''));
+ 				end
+-				if total==0,
+-					disp(sprintf(['SUCCESS difference: 0 < 0 test id: %i test name: %s field: valgrind'],id,id_string));
++				if leaks==0,
++					disp(sprintf(['SUCCESS difference: 0 < 0 test id: %i test name: %s field: valgrindleaks'],id,id_string));
+ 				else
+-					disp(sprintf(['ERROR   difference: %i > 0 test id: %i test name: %s field: valgrind'],total,id,id_string));
++					disp(sprintf(['ERROR   difference: %i > 0 test id: %i test name: %s field: valgrindleaks'],leaks,id,id_string));
+ 					disp('STOP');
+ 					return;
+ 				end
++				if jumps==0,
++					disp(sprintf(['SUCCESS difference: 0 < 0 test id: %i test name: %s field: valgrindjumps'],id,id_string));
++				else
++					disp(sprintf(['ERROR   difference: %i > 0 test id: %i test name: %s field: valgrindjumps'],jumps,id,id_string));
++					disp('STOP');
++					return;
++				end
+ 			end
+ 
+ 		%ELSE: CHECK TEST
Index: /issm/oecreview/Archive/15392-16133/ISSM-15725-15726.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15725-15726.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15725-15726.diff	(revision 16134)
@@ -0,0 +1,286 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15725)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15726)
+@@ -31,12 +31,13 @@
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&materials_type,MaterialsEnum);
+ 
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
++
+ 	/*Fetch data needed and allocate vectors: */
+ 	iomodel->FetchData(1,FlowequationElementEquationEnum);
+ 	finiteelement_list=xNewZeroInit<int>(iomodel->numberofelements);
+ 
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+ 
+ 	/*Do we have coupling*/
+ 	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15725)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15726)
+@@ -152,7 +152,7 @@
+ 
+ 	/*Finalize PETSC for this model: */
+ 	#ifdef _HAVE_PETSC_
+-	_printf0_("closing Petsc\n");
++	_printf0_("closing PETSc\n");
+ 	PetscFinalize(); 
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15725)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15726)
+@@ -6372,8 +6372,8 @@
+ 
+ 		D[0][0]=D_scalar*dvxdx;
+ 		D[0][1]=0.;
++		D[1][0]=0.;
+ 		D[1][1]=D_scalar*dvydy;
+-		D[1][0]=0.;
+ 		TripleMultiply(B,2,numnodes,1,
+ 					&D[0][0],2,2,0,
+ 					B,2,numnodes,0,
+@@ -6822,8 +6822,8 @@
+ 
+ 		D[0][0]=D_scalar*dvxdx;
+ 		D[0][1]=0.;
++		D[1][0]=0.;
+ 		D[1][1]=D_scalar*dvydy;
+-		D[1][0]=0.;
+ 		TripleMultiply(B,2,numnodes,1,
+ 					&D[0][0],2,2,0,
+ 					B,2,numnodes,0,
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15725)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15726)
+@@ -5285,14 +5285,192 @@
+ /*FUNCTION Penta::CreatePVectorAdjointHO{{{*/
+ ElementVector* Penta::CreatePVectorAdjointHO(void){
+ 
++
++	/*Nothing to be done if not on surface*/
+ 	if (!IsOnSurface()) return NULL;
+ 
+-	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
+-	ElementVector* pe=tria->CreatePVectorAdjointHoriz();
+-	delete tria->material; delete tria;
++	/*Intermediaries */
++	int        i,j,resp;
++	int       *responses=NULL;
++	int        num_responses;
++	IssmDouble Jdet2d;
++	IssmDouble obs_velocity_mag,velocity_mag;
++	IssmDouble dux,duy;
++	IssmDouble epsvel=2.220446049250313e-16;
++	IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
++	IssmDouble scalex=0.,scaley=0.,scale=0.,S=0.;
++	IssmDouble vx,vy,vxobs,vyobs,weight;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
+ 
+-	/*clean up and return*/
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
++	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
++	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
++	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
++	Input* vxobs_input  =inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
++	Input* vyobs_input  =inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
++
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++
++	/*Get Surface if required by one response*/
++	for(resp=0;resp<num_responses;resp++){
++		if(responses[resp]==SurfaceAverageVelMisfitEnum){
++			inputs->GetInputValue(&S,SurfaceAreaEnum); break;
++		}
++	}
++
++	/* Start  looping on the number of gaussian points: */
++	GaussPenta* gauss=new GaussPenta(3,4,5,4);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		/* Get Jacobian determinant: */
++		GetTriaJacobianDeterminant(&Jdet2d,&xyz_list_tria[0][0],gauss);
++
++		/*Get all parameters at gaussian point*/
++		vx_input->GetInputValue(&vx,gauss);
++		vy_input->GetInputValue(&vy,gauss);
++		vxobs_input->GetInputValue(&vxobs,gauss);
++		vyobs_input->GetInputValue(&vyobs,gauss);
++		GetNodalFunctions(basis, gauss);
++
++		/*Loop over all requested responses*/
++		for(resp=0;resp<num_responses;resp++){
++
++			weights_input->GetInputValue(&weight,gauss,resp);
++
++			switch(responses[resp]){
++				case SurfaceAbsVelMisfitEnum:
++					/*
++					 *      1  [           2              2 ]
++					 * J = --- | (u - u   )  +  (v - v   )  |
++					 *      2  [       obs            obs   ]
++					 *
++					 *        dJ
++					 * DU = - -- = (u   - u )
++					 *        du     obs
++					 */
++					for(i=0;i<numnodes;i++){
++						dux=vxobs-vx;
++						duy=vyobs-vy;
++						pe->values[i*NDOF2+0]+=dux*weight*Jdet2d*gauss->weight*basis[i]; 
++						pe->values[i*NDOF2+1]+=duy*weight*Jdet2d*gauss->weight*basis[i]; 
++					}
++					break;
++				case SurfaceRelVelMisfitEnum:
++					/*
++					 *      1  [     \bar{v}^2             2   \bar{v}^2              2 ]
++					 * J = --- | -------------  (u - u   ) + -------------  (v - v   )  |
++					 *      2  [  (u   + eps)^2       obs    (v   + eps)^2       obs    ]
++					 *              obs                        obs                      
++					 *
++					 *        dJ     \bar{v}^2
++					 * DU = - -- = ------------- (u   - u )
++					 *        du   (u   + eps)^2    obs
++					 *               obs
++					 */
++					for(i=0;i<numnodes;i++){
++						scalex=pow(meanvel/(vxobs+epsvel),2); if(vxobs==0)scalex=0;
++						scaley=pow(meanvel/(vyobs+epsvel),2); if(vyobs==0)scaley=0;
++						dux=scalex*(vxobs-vx);
++						duy=scaley*(vyobs-vy);
++						pe->values[i*NDOF2+0]+=dux*weight*Jdet2d*gauss->weight*basis[i]; 
++						pe->values[i*NDOF2+1]+=duy*weight*Jdet2d*gauss->weight*basis[i]; 
++					}
++					break;
++				case SurfaceLogVelMisfitEnum:
++					/*
++					 *                 [        vel + eps     ] 2
++					 * J = 4 \bar{v}^2 | log ( -----------  ) |  
++					 *                 [       vel   + eps    ]
++					 *                            obs
++					 *
++					 *        dJ                 2 * log(...)
++					 * DU = - -- = - 4 \bar{v}^2 -------------  u
++					 *        du                 vel^2 + eps
++					 *            
++					 */
++					for(i=0;i<numnodes;i++){
++						velocity_mag    =sqrt(pow(vx,   2)+pow(vy,   2))+epsvel;
++						obs_velocity_mag=sqrt(pow(vxobs,2)+pow(vyobs,2))+epsvel;
++						scale=-8*pow(meanvel,2)/pow(velocity_mag,2)*log(velocity_mag/obs_velocity_mag);
++						dux=scale*vx;
++						duy=scale*vy;
++						pe->values[i*NDOF2+0]+=dux*weight*Jdet2d*gauss->weight*basis[i]; 
++						pe->values[i*NDOF2+1]+=duy*weight*Jdet2d*gauss->weight*basis[i]; 
++					}
++					break;
++				case SurfaceAverageVelMisfitEnum:
++					/*
++					 *      1                    2              2
++					 * J = ---  sqrt(  (u - u   )  +  (v - v   )  )
++					 *      S                obs            obs
++					 *
++					 *        dJ      1       1 
++					 * DU = - -- = - --- ----------- * 2 (u - u   )
++					 *        du      S  2 sqrt(...)           obs
++					 */
++					for(i=0;i<numnodes;i++){
++						scale=1./(S*2*sqrt(pow(vx-vxobs,2)+pow(vy-vyobs,2))+epsvel);
++						dux=scale*(vxobs-vx);
++						duy=scale*(vyobs-vy);
++						pe->values[i*NDOF2+0]+=dux*weight*Jdet2d*gauss->weight*basis[i]; 
++						pe->values[i*NDOF2+1]+=duy*weight*Jdet2d*gauss->weight*basis[i]; 
++					}
++					break;
++				case SurfaceLogVxVyMisfitEnum:
++					/*
++					 *      1            [        |u| + eps     2          |v| + eps     2  ]
++					 * J = --- \bar{v}^2 | log ( -----------  )   +  log ( -----------  )   |  
++					 *      2            [       |u    |+ eps              |v    |+ eps     ]
++					 *                              obs                       obs
++					 *        dJ                              1      u                             1
++					 * DU = - -- = - \bar{v}^2 log(u...) --------- ----  ~ - \bar{v}^2 log(u...) ------
++					 *        du                         |u| + eps  |u|                           u + eps
++					 */
++					for(i=0;i<numnodes;i++){
++						dux = - meanvel*meanvel * log((fabs(vx)+epsvel)/(fabs(vxobs)+epsvel)) / (vx+epsvel);
++						duy = - meanvel*meanvel * log((fabs(vy)+epsvel)/(fabs(vyobs)+epsvel)) / (vy+epsvel);
++						pe->values[i*NDOF2+0]+=dux*weight*Jdet2d*gauss->weight*basis[i]; 
++						pe->values[i*NDOF2+1]+=duy*weight*Jdet2d*gauss->weight*basis[i]; 
++					}
++					break;
++				case DragCoefficientAbsGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case ThicknessAbsGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case ThicknessAlongGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case ThicknessAcrossGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				case RheologyBbarAbsGradientEnum:
++					/*Nothing in P vector*/
++					break;
++				default:
++					_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
++			}
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	xDelete<int>(responses);
++	delete gauss;
+ 	return pe;
+ }
+ /*}}}*/
+@@ -5582,16 +5760,18 @@
+ 			/*Nothing, J does not depends on the parameter being inverted for*/
+ 			break;
+ 		case DragCoefficientAbsGradientEnum:
+-			if (!IsOnBed()) return;
+-			tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-			tria->GradjDragGradient(gradient,resp,control_index);
+-			delete tria->material; delete tria;
++			if(IsOnBed()){
++				tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
++				tria->GradjDragGradient(gradient,resp,control_index);
++				delete tria->material; delete tria;
++			}
+ 			break;
+ 		case RheologyBbarAbsGradientEnum:
+-			if (!IsOnBed()) return;
+-			tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
+-			tria->GradjBGradient(gradient,resp,control_index);
+-			delete tria->material; delete tria;
++			if(IsOnBed()){
++				tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
++				tria->GradjBGradient(gradient,resp,control_index);
++				delete tria->material; delete tria;
++			}
+ 			break;
+ 		default:
+ 			_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
Index: /issm/oecreview/Archive/15392-16133/ISSM-15726-15727.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15726-15727.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15726-15727.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15726)
++++ ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15727)
+@@ -96,6 +96,8 @@
+ 	}
+ 
+ 	/*Free ressources:*/
++	delete tg_old;
++	delete ug_old;
+ 	delete tg;
+ 	delete ug;
+ 	xDelete<int>(requested_outputs);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15727-15728.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15727-15728.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15727-15728.diff	(revision 16134)
@@ -0,0 +1,120 @@
+Index: ../trunk-jpl/src/c/main/globals.h
+===================================================================
+--- ../trunk-jpl/src/c/main/globals.h	(revision 15727)
++++ ../trunk-jpl/src/c/main/globals.h	(revision 15728)
+@@ -12,7 +12,9 @@
+ COMM IssmComm::comm;
+ bool IssmComm::parallel;
+ 
+-/*String that is used to characterize our toolkits, ends up in Petsc Options database if we use Petsc. Can also be used to characterize the ISSM toolkit, often used when Petsc is not allowed*/
++/*String that is used to characterize our toolkits, ends up in Petsc Options
++ * database if we use Petsc. Can also be used to characterize the ISSM toolkit,
++ * often used when Petsc is not allowed*/
+ char* ToolkitOptions::toolkitoptions;
+ 
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/ToolkitOptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/ToolkitOptions.cpp	(revision 15727)
++++ ../trunk-jpl/src/c/toolkits/ToolkitOptions.cpp	(revision 15728)
+@@ -2,12 +2,6 @@
+  * \brief  file containing the methods for ToolkitOptions.h
+  */
+ 
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+ #include <string.h>
+ #include "./ToolkitOptions.h"
+ #include "../shared/Numerics/types.h"
+Index: ../trunk-jpl/src/c/toolkits/ToolkitOptions.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/ToolkitOptions.h	(revision 15727)
++++ ../trunk-jpl/src/c/toolkits/ToolkitOptions.h	(revision 15728)
+@@ -7,15 +7,6 @@
+ #ifndef _TOOLKIT_OPTIONS_H
+ #define _TOOLKIT_OPTIONS_H
+ 
+-/*{{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*}}}*/
+-
+ class ToolkitOptions {
+ 
+ 	private:
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15727)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15728)
+@@ -5596,13 +5596,12 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF1;
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
+ 	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+-	IssmDouble*    B      = xNew<IssmDouble>(2*numdof);
+-	IssmDouble*    Bprime = xNew<IssmDouble>(2*numdof);
++	IssmDouble*    B      = xNew<IssmDouble>(2*numnodes);
++	IssmDouble*    Bprime = xNew<IssmDouble>(2*numnodes);
+ 	IssmDouble     D[2][2];
+ 
+ 	/*Create water velocity vx and vy from current inputs*/
+@@ -5632,9 +5631,9 @@
+ 
+ 		D_scalar=gauss->weight*Jdettria;
+ 
+-		TripleMultiply(basis,1,numdof,1,
++		TripleMultiply(basis,1,numnodes,1,
+ 					&D_scalar,1,1,0,
+-					basis,1,numdof,0,
++					basis,1,numnodes,0,
+ 					Ke->values,1);
+ 
+ 		GetBPrognostic(B,&xyz_list[0][0], gauss);
+@@ -5646,18 +5645,18 @@
+ 
+ 		D[0][0]=D_scalar*dvxdx;
+ 		D[0][1]=0.;
++		D[1][0]=0.;
+ 		D[1][1]=D_scalar*dvydy;
+-		D[1][1]=0.;
+-		TripleMultiply(B,2,numdof,1,
++		TripleMultiply(B,2,numnodes,1,
+ 					&D[0][0],2,2,0,
+-					B,2,numdof,0,
++					B,2,numnodes,0,
+ 					&Ke->values[0],1);
+ 
+ 		D[0][0]=D_scalar*vx;
+ 		D[1][1]=D_scalar*vy;
+-		TripleMultiply(B,2,numdof,1,
++		TripleMultiply(B,2,numnodes,1,
+ 					&D[0][0],2,2,0,
+-					Bprime,2,numdof,0,
++					Bprime,2,numnodes,0,
+ 					&Ke->values[0],1);
+ 
+ 		/*Artificial diffusivity*/
+@@ -5666,9 +5665,9 @@
+ 		D[1][0]=D_scalar*diffusivity*h/(2*vel)*vy*vx;
+ 		D[0][1]=D_scalar*diffusivity*h/(2*vel)*vx*vy;
+ 		D[1][1]=D_scalar*diffusivity*h/(2*vel)*vy*vy;
+-		TripleMultiply(Bprime,2,numdof,1,
++		TripleMultiply(Bprime,2,numnodes,1,
+ 					&D[0][0],2,2,0,
+-					Bprime,2,numdof,0,
++					Bprime,2,numnodes,0,
+ 					&Ke->values[0],1);
+ 	}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15728-15729.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15728-15729.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15728-15729.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive512.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15729-15730.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15729-15730.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15729-15730.diff	(revision 16134)
@@ -0,0 +1,207 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15729)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15730)
+@@ -953,7 +953,7 @@
+ 
+ 	/*First, figure out size of doflist and create it: */
+ 	int numberofdofs=0;
+-	for(int i=0;i<numnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(FSApproximationEnum,setenum);
++	for(int i=0;i<numnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(FSvelocityEnum,setenum);
+ 
+ 	/*Allocate output*/
+ 	int* doflist=xNew<int>(numberofdofs);
+@@ -961,8 +961,8 @@
+ 	/*Populate: */
+ 	int count=0;
+ 	for(int i=0;i<numnodes;i++){
+-		nodes[i]->GetDofList(doflist+count,FSApproximationEnum,setenum);
+-		count+=nodes[i]->GetNumberOfDofs(FSApproximationEnum,setenum);
++		nodes[i]->GetDofList(doflist+count,FSvelocityEnum,setenum);
++		count+=nodes[i]->GetNumberOfDofs(FSvelocityEnum,setenum);
+ 	}
+ 
+ 	/*Assign output pointers:*/
+@@ -7089,6 +7089,7 @@
+ 	Node     *node_list[numnodes];
+ 	int       cs_list[numnodes];
+ 	int       i,j;
++	int       init;
+ 
+ 	/*Prepare node list*/
+ 	for(i=0;i<NUMVERTICES;i++){
+@@ -7098,14 +7099,20 @@
+ 		cs_list[i+1*NUMVERTICES] = XYZEnum;
+ 	}
+ 
++	/*Some parameters needed*/
++	init=this->element_type;
++
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1;
+ 	delete Ke2;
+-	Ke1=CreateKMatrixDiagnosticHO(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
+-	Ke2=CreateKMatrixDiagnosticFS(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZEnum);
++	
++	this->element_type=P1Enum;
++	Ke1=CreateKMatrixDiagnosticHO(); 
++	this->element_type=init;
++	Ke2=CreateKMatrixDiagnosticFS(); 
+ 
+ 	for(i=0;i<numdofs;i++) for(j=0;j<NUMVERTICES;j++){
+ 		Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+0]+=Ke2->values[i*numdofs+NDOF4*j+0];
+@@ -7130,7 +7137,6 @@
+ 
+ 	int approximation;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+-
+ 	switch(approximation){
+ 		case SSAApproximationEnum:
+ 			return CreateKMatrixDiagnosticSSA2d();
+@@ -7663,7 +7669,10 @@
+ ElementMatrix* Penta::CreateKMatrixDiagnosticHOFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
++	int init = this->element_type;
++	this->element_type=P1Enum;
+ 	ElementMatrix* Ke1=CreateKMatrixDiagnosticHO();
++	this->element_type=init;
+ 	ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();
+ 	ElementMatrix* Ke3=CreateKMatrixCouplingHOFS();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+@@ -9529,7 +9538,6 @@
+ 	gauss = new GaussPenta();
+ 	for(int i=0;i<vnumnodes;i++){
+ 		gauss->GaussNode(this->VelocityInterpolation(),i);
+-
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vz_input->GetInputValue(&vz,gauss);
+@@ -9669,9 +9677,10 @@
+ /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSSA {{{*/
+ void  Penta::InputUpdateFromSolutionDiagnosticSSA(IssmDouble* solution){
+ 
+-	const int    numdof=NDOF2*NUMVERTICES;
++	int         numnodes = this->NumberofNodes();
++	int         numdof=NDOF2*numnodes;
+ 
+-	int     i;
++	int         i;
+ 	IssmDouble  rho_ice,g;
+ 	IssmDouble  values[numdof];
+ 	IssmDouble  vx[NUMVERTICES];
+@@ -9860,7 +9869,7 @@
+ 
+ 	/*Get dof listof this element (SSA dofs) and of the penta at base (SSA dofs): */
+ 	penta->GetDofList(&doflistm,SSAApproximationEnum,GsetEnum);
+-	GetDofList(&doflists,FSApproximationEnum,GsetEnum);
++	GetDofList(&doflists,FSvelocityEnum,GsetEnum);
+ 	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+@@ -10089,11 +10098,13 @@
+ void  Penta::InputUpdateFromSolutionDiagnosticHOFS(IssmDouble* solution){
+ 
+ 	const int    numdofp=NDOF2*NUMVERTICES;
+-	const int    numdofs=NDOF4*NUMVERTICES;
++	const int    numdofs=NDOF3*NUMVERTICES;
++	const int    numdofpressure=NDOF1*NUMVERTICES;
+ 
+-	int    i;
++	int        i;
+ 	IssmDouble HO_values[numdofp];
+ 	IssmDouble FS_values[numdofs];
++	IssmDouble Pressure_values[numdofpressure];
+ 	IssmDouble vx[NUMVERTICES];
+ 	IssmDouble vy[NUMVERTICES];
+ 	IssmDouble vz[NUMVERTICES];
+@@ -10103,9 +10114,10 @@
+ 	IssmDouble pressure[NUMVERTICES];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble FSreconditioning;
+-	int*   doflistp      = NULL;
+-	int*   doflists      = NULL;
+-	Penta  *penta        = NULL;
++	int*       doflistp        = NULL;
++	int*       doflists        = NULL;
++	int*       doflistpressure = NULL;
++	Penta      *penta          = NULL;
+ 
+ 	/*OK, we have to add results of this element for HO 
+ 	 * and results from the penta at base for SSA. Now recover results*/
+@@ -10113,7 +10125,8 @@
+ 
+ 	/*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */
+ 	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
+-	GetDofList(&doflists,FSApproximationEnum,GsetEnum);
++	GetDofList(&doflists,FSvelocityEnum,GsetEnum);
++	GetDofListPressure(&doflistpressure,GsetEnum);
+ 	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+@@ -10122,6 +10135,7 @@
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdofp;i++) HO_values[i]=solution[doflistp[i]];
+ 	for(i=0;i<numdofs;i++) FS_values[i]=solution[doflists[i]];
++	for(i=0;i<numdofpressure;i++) Pressure_values[i]=solution[doflistpressure[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+ 	TransformSolutionCoord(&HO_values[0],this->nodes,NUMVERTICES,XYEnum);
+@@ -10129,10 +10143,10 @@
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		vx[i]=FS_values[i*NDOF4+0]+HO_values[i*NDOF2+0];
+-		vy[i]=FS_values[i*NDOF4+1]+HO_values[i*NDOF2+1];
+-		vzFS[i]=FS_values[i*NDOF4+2];
+-		pressure[i]=FS_values[i*NDOF4+3]*FSreconditioning;
++		vx[i]=FS_values[i*NDOF3+0]+HO_values[i*NDOF2+0];
++		vy[i]=FS_values[i*NDOF3+1]+HO_values[i*NDOF2+1];
++		vzFS[i]=FS_values[i*NDOF3+2];
++		pressure[i]=FS_values[i*NDOF1]*FSreconditioning;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+@@ -10177,12 +10191,14 @@
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflistp);
+ 	xDelete<int>(doflists);
++	xDelete<int>(doflistpressure);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSIA {{{*/
+ void  Penta::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){
+ 
+-	const int    numdof=NDOF2*NUMVERTICES;
++	int         numnodes = this->NumberofNodes();
++	int         numdof=NDOF2*numnodes;
+ 
+ 	int     i;
+ 	IssmDouble  rho_ice,g;
+@@ -10245,10 +10261,11 @@
+ /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticVert {{{*/
+ void  Penta::InputUpdateFromSolutionDiagnosticVert(IssmDouble* solution){
+ 
+-	const int numdof=NDOF1*NUMVERTICES;
++	int          numnodes = this->NumberofNodes();
++	int          numdof=NDOF1*numnodes;
+ 
+-	int      i;
+-	int      approximation;
++	int          i;
++	int          approximation;
+ 	IssmDouble   rho_ice,g;
+ 	IssmDouble   values[numdof];
+ 	IssmDouble   vx[NUMVERTICES];
+@@ -10261,7 +10278,7 @@
+ 	IssmDouble   pressure[NUMVERTICES];
+ 	IssmDouble   surface[NUMVERTICES];
+ 	IssmDouble   xyz_list[NUMVERTICES][3];
+-	int*     doflist      = NULL;
++	int*         doflist      = NULL;
+ 
+ 	/*Get the approximation and do nothing if the element in FS or None*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15730-15731.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15730-15731.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15730-15731.diff	(revision 16134)
@@ -0,0 +1,593 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15730)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15731)
+@@ -269,7 +269,6 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF1;
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke    = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
+@@ -288,9 +287,9 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		D=gauss->weight*Jdet;
+ 
+-		TripleMultiply(basis,1,numdof,1,
++		TripleMultiply(basis,1,numnodes,1,
+ 					&D,1,1,0,
+-					basis,1,numdof,0,
++					basis,1,numnodes,0,
+ 					&Ke->values[0],1);
+ 	}
+ 
+@@ -1582,7 +1581,7 @@
+ 			InputUpdateFromSolutionAdjointHoriz(solution);
+ 			break;
+ 		case AdjointBalancethicknessAnalysisEnum:
+-			InputUpdateFromSolutionAdjointBalancethickness(solution);
++			InputUpdateFromSolutionOneDof(solution,AdjointEnum);
+ 			break;
+ 		#endif
+ 		#ifdef _HAVE_HYDROLOGY_ 
+@@ -1624,15 +1623,18 @@
+ /*FUNCTION Tria::InputUpdateFromSolutionOneDof{{{*/
+ void  Tria::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){
+ 
+-	const int  numdof         = NDOF1*NUMVERTICES;
+-	int*       doflist        = NULL;
+-	IssmDouble values[numdof];
++	/*Intermediary*/
++	int* doflist = NULL;
+ 
+-	/*Get dof list: */
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Fetch dof list and allocate solution vector*/
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++	IssmDouble* values    = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	for(int i=0;i<numdof;i++){
++	for(int i=0;i<numnodes;i++){
+ 		values[i]=solution[doflist[i]];
+ 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+ 	}
+@@ -1641,6 +1643,7 @@
+ 	this->inputs->AddInput(new TriaInput(enum_type,values,P1Enum));
+ 
+ 	/*Free ressources:*/
++	xDelete<IssmDouble>(values);
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+@@ -1648,24 +1651,25 @@
+ void  Tria::InputUpdateFromSolutionPrognostic(IssmDouble* solution){
+ 
+ 	/*Intermediaries*/
+-	const int numdof = NDOF1*NUMVERTICES;
++	int        i,hydroadjustment;
++	int*       doflist=NULL;
++	IssmDouble rho_ice,rho_water,minthickness;
+ 
+-	int       i,hydroadjustment;
+-	int*      doflist=NULL;
+-	IssmDouble    rho_ice,rho_water,minthickness;
+-	IssmDouble    newthickness[numdof];
+-	IssmDouble    newbed[numdof];
+-	IssmDouble    newsurface[numdof];
+-	IssmDouble    oldbed[NUMVERTICES];
+-	IssmDouble    oldsurface[NUMVERTICES];
+-	IssmDouble    oldthickness[NUMVERTICES];
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
+ 
+-	/*Get dof list: */
++	/*Fetch dof list and allocate solution vector*/
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++	IssmDouble* newthickness = xNew<IssmDouble>(numnodes);
++	IssmDouble* newbed       = xNew<IssmDouble>(numnodes);
++	IssmDouble* newsurface   = xNew<IssmDouble>(numnodes);
++	IssmDouble* oldthickness = xNew<IssmDouble>(numnodes);
++	IssmDouble* oldbed       = xNew<IssmDouble>(numnodes);
++	IssmDouble* oldsurface   = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	this->parameters->FindParam(&minthickness,PrognosticMinThicknessEnum);
+-	for(i=0;i<numdof;i++){
++	for(i=0;i<numnodes;i++){
+ 		newthickness[i]=solution[doflist[i]];
+ 		if(xIsNan<IssmDouble>(newthickness[i])) _error_("NaN found in solution vector");
+ 		/*Constrain thickness to be at least 1m*/
+@@ -1673,30 +1677,29 @@
+ 	}
+ 
+ 	/*Get previous bed, thickness and surface*/
+-	GetInputListOnVertices(&oldbed[0],BedEnum);
+-	GetInputListOnVertices(&oldsurface[0],SurfaceEnum);
+-	GetInputListOnVertices(&oldthickness[0],ThicknessEnum);
++	GetInputListOnNodes(&oldbed[0],BedEnum);
++	GetInputListOnNodes(&oldsurface[0],SurfaceEnum);
++	GetInputListOnNodes(&oldthickness[0],ThicknessEnum);
+ 
+ 	/*Fing PrognosticHydrostaticAdjustment to figure out how to update the geometry:*/
+ 	this->parameters->FindParam(&hydroadjustment,PrognosticHydrostaticAdjustmentEnum);
+ 	rho_ice=matpar->GetRhoIce();
+ 	rho_water=matpar->GetRhoWater();
+ 
+-	for(i=0;i<numdof;i++) {
++	for(i=0;i<numnodes;i++) {
+ 		/*If shelf: hydrostatic equilibrium*/
+ 		if (this->nodes[i]->IsGrounded()){
+-			newsurface[i]=oldbed[i]+newthickness[i]; //surface = oldbed + newthickness
+-			newbed[i]=oldbed[i];               //same bed: do nothing
++			newsurface[i] = oldbed[i]+newthickness[i]; //surface = oldbed + newthickness
++			newbed[i]     = oldbed[i];                 //same bed: do nothing
+ 		}
+ 		else{ //this is an ice shelf
+-
+ 			if(hydroadjustment==AbsoluteEnum){
+-				newsurface[i]=newthickness[i]*(1-rho_ice/rho_water);
+-				newbed[i]=newthickness[i]*(-rho_ice/rho_water);
++				newsurface[i] = newthickness[i]*(1-rho_ice/rho_water);
++				newbed[i]     = newthickness[i]*(-rho_ice/rho_water);
+ 			}
+ 			else if(hydroadjustment==IncrementalEnum){
+-				newsurface[i]=oldsurface[i]+(1.0-rho_ice/rho_water)*(newthickness[i]-oldthickness[i]); //surface = oldsurface + (1-di) * dH 
+-				newbed[i]=oldbed[i]-rho_ice/rho_water*(newthickness[i]-oldthickness[i]); //bed = oldbed + di * dH
++				newsurface[i] = oldsurface[i]+(1.0-rho_ice/rho_water)*(newthickness[i]-oldthickness[i]); //surface = oldsurface + (1-di) * dH
++				newbed[i]     = oldbed[i]-rho_ice/rho_water*(newthickness[i]-oldthickness[i]); //bed               = oldbed + di * dH
+ 			}
+ 			else _error_("Hydrostatic adjustment " << hydroadjustment << " (" << EnumToStringx(hydroadjustment) << ") not supported yet");
+ 		}
+@@ -1708,15 +1711,21 @@
+ 	this->inputs->AddInput(new TriaInput(BedEnum,newbed,P1Enum));
+ 
+ 	/*Free ressources:*/
++	xDelete<IssmDouble>(newthickness);
++	xDelete<IssmDouble>(newbed);
++	xDelete<IssmDouble>(newsurface);
++	xDelete<IssmDouble>(oldthickness);
++	xDelete<IssmDouble>(oldbed);
++	xDelete<IssmDouble>(oldsurface);
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type);{{{*/
+ void  Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+ 
+-	const int   numdof         = NDOF1 *NUMVERTICES;
+-	int        *doflist        = NULL;
+-	IssmDouble  values[numdof];
++	const int   numnodes = NUMVERTICES;
++	int        *doflist  = NULL;
++	IssmDouble  values[numnodes];
+ 
+ 	/*Check that name is an element input*/
+ 	if (!IsInput(name)) return;
+@@ -1749,11 +1758,12 @@
+ 		return; 
+ 
+ 	case NodesEnum:
++		_assert_(this->element_type==P1Enum);
+ 		/*Get dof list: */
+ 		GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+ 
+ 		/*Use the dof list to index into the vector: */
+-		for(int i=0;i<numdof;i++){
++		for(int i=0;i<numnodes;i++){
+ 			values[i]=vector[doflist[i]];
+ 			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+ 		}
+@@ -1765,15 +1775,13 @@
+ 		return;
+ 
+ 	case NodeSIdEnum:
++		_assert_(this->element_type==P1Enum);
+ 		for(int i=0;i<NUMVERTICES;i++){
+ 			values[i]=vector[nodes[i]->Sid()];
+ 			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+ 		}
+ 		/*Add input to the element: */
+ 		this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+-
+-		/*Free ressources:*/
+-		xDelete<int>(doflist);
+ 		return;
+ 
+ 	default:
+@@ -2566,9 +2574,8 @@
+ /*FUNCTION Tria::MassFlux {{{*/
+ IssmDouble Tria::MassFlux( IssmDouble* segment){
+ 
+-	const int  numdofs=2;
+ 	int        dim;
+-	IssmDouble mass_flux=0;
++	IssmDouble mass_flux=0.;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble normal[2];
+ 	IssmDouble length,rho_ice;
+@@ -5018,7 +5025,6 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element vector*/
+ 	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
+@@ -5254,10 +5260,6 @@
+ /*FUNCTION Tria::CreateKMatrixAdjointSSA{{{*/
+ ElementMatrix* Tria::CreateKMatrixAdjointSSA(void){
+ 
+-	/*Constants*/
+-	const int numnodes = this->NumberofNodes();
+-	const int numdof   = NDOF2*numnodes;
+-
+ 	/*Intermediaries */
+ 	int         i,j;
+ 	bool        incomplete_adjoint;
+@@ -5270,6 +5272,9 @@
+ 	IssmDouble  eps1[2],eps2[2];
+ 	GaussTria  *gauss=NULL;
+ 
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
+ 	/*Initialize Jacobian with regular SSA (first part of the Gateau derivative)*/
+ 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
+ 	ElementMatrix* Ke=CreateKMatrixDiagnosticSSA();
+@@ -5327,22 +5332,27 @@
+ /*FUNCTION Tria::InputUpdateFromSolutionAdjointHoriz {{{*/
+ void  Tria::InputUpdateFromSolutionAdjointHoriz(IssmDouble* solution){
+ 
+-	const int numdof=NDOF2*NUMVERTICES;
++	int  i;
++	int* doflist=NULL;
+ 
+-	int       i;
+-	int*      doflist=NULL;
+-	IssmDouble    values[numdof];
+-	IssmDouble    lambdax[NUMVERTICES];
+-	IssmDouble    lambday[NUMVERTICES];
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++	int numdof   = numnodes*NDOF2;
+ 
+-	/*Get dof list: */
++	/*Fetch dof list and allocate solution vectors*/
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++	IssmDouble* values  = xNew<IssmDouble>(numdof);
++	IssmDouble* lambdax = xNew<IssmDouble>(numnodes);
++	IssmDouble* lambday = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
+ 
++	/*Transform solution in Cartesian Space*/
++	TransformSolutionCoord(&values[0],nodes,numnodes,XYEnum);
++
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+-	for(i=0;i<NUMVERTICES;i++){
++	for(i=0;i<numdof;i++){
+ 		lambdax[i]=values[i*NDOF2+0];
+ 		lambday[i]=values[i*NDOF2+1];
+ 
+@@ -5356,38 +5366,12 @@
+ 	this->inputs->AddInput(new TriaInput(AdjointyEnum,lambday,P1Enum));
+ 
+ 	/*Free ressources:*/
++	xDelete<IssmDouble>(values);
++	xDelete<IssmDouble>(lambdax);
++	xDelete<IssmDouble>(lambday);
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputUpdateFromSolutionAdjointBalancethickness {{{*/
+-void  Tria::InputUpdateFromSolutionAdjointBalancethickness(IssmDouble* solution){
+-
+-	const int numdof=NDOF1*NUMVERTICES;
+-
+-	int       i;
+-	int*      doflist=NULL;
+-	IssmDouble    values[numdof];
+-	IssmDouble    lambda[NUMVERTICES];
+-
+-	/*Get dof list: */
+-	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+-
+-	/*Use the dof list to index into the solution vector: */
+-	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
+-
+-	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+-	for(i=0;i<numdof;i++){
+-		lambda[i]=values[i];
+-		if(xIsNan<IssmDouble>(lambda[i])) _error_("NaN found in solution vector");
+-	}
+-
+-	/*Add vx and vy as inputs to the tria element: */
+-	this->inputs->AddInput(new TriaInput(AdjointEnum,lambda,P1Enum));
+-
+-	/*Free ressources:*/
+-	xDelete<int>(doflist);
+-}
+-/*}}}*/
+ /*FUNCTION Tria::GetVectorFromControlInputs{{{*/
+ void  Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data){
+ 
+@@ -5463,14 +5447,11 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF1;
+ 
+ 	/*Initialize Element vector and vectors*/
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
+ 	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+-	/*Initialize Element matrix*/
+-
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	latentheat   = matpar->GetLatentHeat();
+@@ -5487,9 +5468,9 @@
+ 
+ 		D_scalar=latentheat/heatcapacity*gauss->weight*Jdet;
+ 
+-		TripleMultiply(basis,numdof,1,0,
++		TripleMultiply(basis,numnodes,1,0,
+ 					&D_scalar,1,1,0,
+-					basis,1,numdof,0,
++					basis,1,numnodes,0,
+ 					&Ke->values[0],1);
+ 	}
+ 
+@@ -5690,11 +5671,10 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF1;
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters);
+-	IssmDouble*    B      = xNew<IssmDouble>(5*numdof);
++	IssmDouble*    B      = xNew<IssmDouble>(5*numnodes);
+ 	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+ 	IssmDouble     D[2][2];
+ 
+@@ -5718,9 +5698,9 @@
+ 		D[0][0]=D_scalar; D[0][1]=0.;
+ 		D[1][0]=0.;       D[1][1]=D_scalar;
+ 		GetBHydro(B,&xyz_list[0][0],gauss); 
+-		TripleMultiply(B,2,numdof,1,
++		TripleMultiply(B,2,numnodes,1,
+ 					&D[0][0],2,2,0,
+-					B,2,numdof,0,
++					B,2,numnodes,0,
+ 					&Ke->values[0],1);
+ 
+ 		/*Transient*/
+@@ -5728,9 +5708,9 @@
+ 			GetNodalFunctions(&basis[0],gauss);
+ 			D_scalar=sediment_storing*gauss->weight*Jdet;
+ 
+-			TripleMultiply(basis,numdof,1,0,
++			TripleMultiply(basis,numnodes,1,0,
+ 						&D_scalar,1,1,0,
+-						basis,1,numdof,0,
++						basis,1,numnodes,0,
+ 						&Ke->values[0],1);
+ 		}
+ 	}
+@@ -5757,11 +5737,10 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF1;
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters);
+-	IssmDouble*    B      = xNew<IssmDouble>(5*numdof);
++	IssmDouble*    B      = xNew<IssmDouble>(5*numnodes);
+ 	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+ 	IssmDouble     D[2][2];
+ 
+@@ -5784,9 +5763,9 @@
+ 		D[0][0]=D_scalar; D[0][1]=0.;
+ 		D[1][0]=0.;       D[1][1]=D_scalar;
+ 		GetBHydro(B,&xyz_list[0][0],gauss); 
+-		TripleMultiply(B,2,numdof,1,
++		TripleMultiply(B,2,numnodes,1,
+ 					&D[0][0],2,2,0,
+-					B,2,numdof,0,
++					B,2,numnodes,0,
+ 					&Ke->values[0],1);
+ 
+ 		/*Transient*/
+@@ -5794,9 +5773,9 @@
+ 			GetNodalFunctions(basis,gauss);
+ 			D_scalar=epl_storing*gauss->weight*Jdet;
+ 
+-			TripleMultiply(basis,numdof,1,0,
++			TripleMultiply(basis,numnodes,1,0,
+ 						&D_scalar,1,1,0,
+-						basis,1,numdof,0,
++						basis,1,numnodes,0,
+ 						&Ke->values[0],1);
+ 		}
+ 	}
+@@ -5823,7 +5802,6 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF1;
+ 
+ 	/*Initialize Element vector*/
+ 	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters);
+@@ -5849,10 +5827,10 @@
+ 		old_watercolumn_input->GetInputValue(&old_watercolumn_g,gauss);
+ 
+ 		if(reCast<int,IssmDouble>(dt)){
+-			for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(old_watercolumn_g+dt*basal_melting_g)*basis[i];
++			for(i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(old_watercolumn_g+dt*basal_melting_g)*basis[i];
+ 		}
+ 		else{
+-			for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*basal_melting_g*basis[i];
++			for(i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*basal_melting_g*basis[i];
+ 		}
+ 	}
+ 
+@@ -5998,52 +5976,51 @@
+ /*FUNCTION Tria::GetSolutionFromInputsOneDof{{{*/
+ void  Tria::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){
+ 
+-	const int    numdof=NDOF1*NUMVERTICES;
+-
+-	int         i;
+ 	int        *doflist = NULL;
+-	IssmDouble  enum_value;
+-	IssmDouble  values[numdof];
+-	GaussTria  *gauss   = NULL;
++	IssmDouble  value;
+ 
+-	/*Get dof list: */
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Fetch dof list and allocate solution vector*/
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++	IssmDouble* values = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Get inputs*/
+ 	Input* enum_input=inputs->GetInput(enum_type); _assert_(enum_input);
+ 
+ 	/*Ok, we have the values, fill in the array: */
+-	/*P1 element only for now*/
+-	gauss=new GaussTria();
+-	for(i=0;i<NUMVERTICES;i++){
++	GaussTria* gauss=new GaussTria();
++	for(int i=0;i<numnodes;i++){
++		gauss->GaussNode(this->element_type,i);
+ 
+-		gauss->GaussVertex(i);
+-
+-		/*Recover dof values*/
+-		enum_input->GetInputValue(&enum_value,gauss);
+-		values[i]=enum_value;
++		enum_input->GetInputValue(&value,gauss);
++		values[i]=value;
+ 	}
+ 
+-	solution->SetValues(numdof,doflist,values,INS_VAL);
++	solution->SetValues(numnodes,doflist,values,INS_VAL);
+ 
+ 	/*Free ressources:*/
++	xDelete<int>(doflist);
++	xDelete<IssmDouble>(values);
+ 	delete gauss;
+-	xDelete<int>(doflist);
+ }
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromSolutionHydrologyShreve{{{*/
+ void  Tria::InputUpdateFromSolutionHydrologyShreve(IssmDouble* solution){
+ 
+-	/*Intermediaries*/
+-	const int   numdof         = NDOF1 *NUMVERTICES;
+-	int        *doflist        = NULL;
+-	IssmDouble  values[numdof];
++	/*Intermediary*/
++	int* doflist = NULL;
+ 
+-	/*Get dof list: */
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Fetch dof list and allocate solution vector*/
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++	IssmDouble* values    = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	for(int i=0;i<numdof;i++){
++	for(int i=0;i<numnodes;i++){
+ 		values[i]=solution[doflist[i]];
+ 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+ 		if (values[i]<10e-10) values[i]=10e-10; //correcting the water column to positive values
+@@ -6053,6 +6030,7 @@
+ 	this->inputs->AddInput(new TriaInput(WatercolumnEnum,values,P1Enum));
+ 
+ 	/*Free ressources:*/
++	xDelete<IssmDouble>(values);
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+@@ -6060,19 +6038,21 @@
+ void  Tria::InputUpdateFromSolutionHydrologyDCInefficient(IssmDouble* solution){
+ 
+ 	/*Intermediaries*/
+-	const int   numdof   = NDOF1 *NUMVERTICES;
+ 	int        *doflist  = NULL;
+ 	bool        converged;
+-	IssmDouble  values[numdof];
+-	IssmDouble  residual[numdof];
+ 	IssmDouble  penalty_factor, dt;
+ 	IssmDouble  kmax, kappa, h_max;
+ 
+-	/*Get dof list: */
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Fetch dof list and allocate solution vector*/
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++	IssmDouble* values   = xNew<IssmDouble>(numnodes);
++	IssmDouble* residual = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	for(int i=0;i<numdof;i++){
++	for(int i=0;i<numnodes;i++){
+ 		values[i]=solution[doflist[i]];
+ 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+ 	}
+@@ -6087,7 +6067,7 @@
+ 
+ 		kappa=kmax*pow(10.,penalty_factor);
+ 
+-		for(int i=0;i<NUMVERTICES;i++){
++		for(int i=0;i<numnodes;i++){
+ 			this->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
+ 			if(values[i]>h_max){
+ 				residual[i]=kappa*(values[i]-h_max);
+@@ -6103,6 +6083,8 @@
+ 	this->inputs->AddInput(new TriaInput(SedimentHeadEnum,values,P1Enum));
+ 
+ 	/*Free ressources:*/
++	xDelete<IssmDouble>(values);
++	xDelete<IssmDouble>(residual);
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+@@ -6144,8 +6126,8 @@
+ /*FUNCTION Tria::GetHydrologyTransfer{{{*/
+ void  Tria::GetHydrologyTransfer(Vector<IssmDouble>* transfer){
+ 
+-	const int  numdof         = NDOF1 *NUMVERTICES;
+-	int        *doflist       = NULL;
++	const int  numdof   = NDOF1 *NUMVERTICES;
++	int        *doflist = NULL;
+ 	bool       isefficientlayer;
+ 	int        transfermethod;
+ 	IssmDouble sed_trans,sed_thick;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15730)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15731)
+@@ -241,8 +241,7 @@
+ 		ElementMatrix* CreateKMatrixAdjointSSA(void);
+ 		ElementVector* CreatePVectorAdjointHoriz(void);
+ 		ElementVector* CreatePVectorAdjointBalancethickness(void);
+-		void	  InputUpdateFromSolutionAdjointBalancethickness( IssmDouble* solution);
+-		void	  InputUpdateFromSolutionAdjointHoriz( IssmDouble* solution);
++		void	         InputUpdateFromSolutionAdjointHoriz( IssmDouble* solution);
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15731-15732.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15731-15732.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15731-15732.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15731)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15732)
+@@ -5352,7 +5352,7 @@
+ 	TransformSolutionCoord(&values[0],nodes,numnodes,XYEnum);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+-	for(i=0;i<numdof;i++){
++	for(i=0;i<numnodes;i++){
+ 		lambdax[i]=values[i*NDOF2+0];
+ 		lambday[i]=values[i*NDOF2+1];
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15732-15733.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15732-15733.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15732-15733.diff	(revision 16134)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 15732)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 15733)
+@@ -160,31 +160,45 @@
+ 				end
+ 				results = md.results.(fields{i});
+ 				errlog  = cellstr(results(1).errlog);
+-				lines1  = strfind(errlog,'definitely lost:');
+-				lines1  = find(~cellfun(@isempty,lines1));
+-				lines2  = strfind(errlog,'Conditional jump or move depends on uninitialised value');
+-				lines2  = find(~cellfun(@isempty,lines2));
+-				jumps   = numel(lines2);
++
++				%Check leaks
++				lines  = strfind(errlog,'definitely lost:');
++				lines  = find(~cellfun(@isempty,lines));
+ 				leaks   = 0;
+-				for j=1:numel(lines1)
+-					Line    = errlog(lines1(j));
++				for j=1:numel(lines)
++					Line    = errlog(lines(j));
+ 					Numbers = sscanf(Line{1},'==%i==   definitely lost: %s bytes in %i blocks',[1 Inf]);
+ 					leaks   = leaks + str2num(strrep(char(Numbers(2:end-1)),',',''));
+ 				end
++				%Check conditional jumps
++				lines  = strfind(errlog,'Conditional jump or move depends on uninitialised value');
++				lines  = find(~cellfun(@isempty,lines));
++				jumps   = numel(lines);
++				%Check invalid read/write
++				lines  = strfind(errlog,'Invalid');
++				lines  = find(~cellfun(@isempty,lines));
++				inval  = numel(lines);
+ 				if leaks==0,
+-					disp(sprintf(['SUCCESS difference: 0 < 0 test id: %i test name: %s field: valgrindleaks'],id,id_string));
++					disp(sprintf(['SUCCESS difference: 0 < 0 test id: %i test name: %s field: valgrind mem. leaks'],id,id_string));
+ 				else
+-					disp(sprintf(['ERROR   difference: %i > 0 test id: %i test name: %s field: valgrindleaks'],leaks,id,id_string));
++					disp(sprintf(['ERROR   difference: %i > 0 test id: %i test name: %s field: valgrind mem. leaks'],leaks,id,id_string));
+ 					disp('STOP');
+ 					return;
+ 				end
+ 				if jumps==0,
+-					disp(sprintf(['SUCCESS difference: 0 < 0 test id: %i test name: %s field: valgrindjumps'],id,id_string));
++					disp(sprintf(['SUCCESS difference: 0 < 0 test id: %i test name: %s field: valgrind cond. jumps'],id,id_string));
+ 				else
+-					disp(sprintf(['ERROR   difference: %i > 0 test id: %i test name: %s field: valgrindjumps'],jumps,id,id_string));
++					disp(sprintf(['ERROR   difference: %i > 0 test id: %i test name: %s field: valgrind cond. jumps'],jumps,id,id_string));
+ 					disp('STOP');
+ 					return;
+ 				end
++				if inval==0,
++					disp(sprintf(['SUCCESS difference: 0 < 0 test id: %i test name: %s field: valgrind invalid read/write'],id,id_string));
++				else
++					disp(sprintf(['ERROR   difference: %i > 0 test id: %i test name: %s field: valgrind invalid read/write'],inval,id,id_string));
++					disp('STOP');
++					return;
++				end
+ 			end
+ 
+ 		%ELSE: CHECK TEST
Index: /issm/oecreview/Archive/15392-16133/ISSM-15733-15734.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15733-15734.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15733-15734.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15733)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15734)
+@@ -89,6 +89,7 @@
+ 	}
+ 	else{
+ 		if(isFS){
++			_error_("COupling under development");
+ 			for(int i=0;i<iomodel->numberofelements;i++){
+ 				approximation=reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[i]);
+ 				if(approximation==FSApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15734-15735.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15734-15735.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15734-15735.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test285.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.m	(revision 15734)
++++ ../trunk-jpl/test/NightlyRun/test285.m	(revision 15735)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-13};
++field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-13};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Vx),...
+ 	(md.results.DiagnosticSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test285.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.py	(revision 15734)
++++ ../trunk-jpl/test/NightlyRun/test285.py	(revision 15735)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13];
++field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-13];
+ field_values=[\
+ 	md.results.DiagnosticSolution.Vx,\
+ 	md.results.DiagnosticSolution.Vy,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15737-15738.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15737-15738.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15737-15738.diff	(revision 16134)
@@ -0,0 +1,420 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15737)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15738)
+@@ -499,7 +499,7 @@
+ 	this->InputDepthAverageAtBase(VxEnum,VxAverageEnum);
+ 	this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixPrognostic();
+ 	delete tria->material; delete tria;
+ 
+@@ -516,7 +516,7 @@
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateMassMatrix();
+ 	delete tria->material; delete tria;
+ 
+@@ -674,7 +674,7 @@
+ 	this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementVector* pe=tria->CreatePVectorPrognostic();
+ 	delete tria->material; delete tria;
+ 
+@@ -692,7 +692,7 @@
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementVector* pe=tria->CreatePVectorSlope();
+ 	delete tria->material; delete tria;
+ 
+@@ -3158,14 +3158,14 @@
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceArea*/
+-		tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
++		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 		S=tria->SurfaceArea();
+ 		delete tria->material; delete tria;
+ 		return S;
+ 	}
+ 	else{
+ 
+-		tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
++		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+ 		S=tria->SurfaceArea();
+ 		delete tria->material; delete tria;
+ 		return S;
+@@ -3654,7 +3654,7 @@
+ 	this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
+ 
+ 	/*Spawn Tria element from the base of the Penta: */
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	mass_flux=tria->MassFlux(segment);
+ 	delete tria->material; delete tria;
+ 
+@@ -4037,7 +4037,7 @@
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixMelting();
+ 
+ 	delete tria->material; delete tria;
+@@ -5078,7 +5078,7 @@
+ 	}
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixAdjointSSA();
+ 	delete tria->material; delete tria;
+ 
+@@ -5261,7 +5261,7 @@
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementVector* pe=tria->CreatePVectorAdjointHoriz();
+ 	delete tria->material; delete tria;
+ 
+@@ -5748,14 +5748,14 @@
+ 			break;
+ 		case DragCoefficientAbsGradientEnum:
+ 			if(IsOnBed()){
+-				tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++				tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 				tria->GradjDragGradient(gradient,resp,control_index);
+ 				delete tria->material; delete tria;
+ 			}
+ 			break;
+ 		case RheologyBbarAbsGradientEnum:
+ 			if(IsOnBed()){
+-				tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++				tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 				tria->GradjBGradient(gradient,resp,control_index);
+ 				delete tria->material; delete tria;
+ 			}
+@@ -5773,7 +5773,7 @@
+ 	if(IsFloating() || !IsOnBed()) return;
+ 
+ 	/*Spawn tria*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	tria->GradjDragSSA(gradient,control_index);
+ 	delete tria->material; delete tria;
+ 
+@@ -5951,7 +5951,7 @@
+ 	this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
+ 
+ 	/*Collapse element to the base*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	tria->GradjBSSA(gradient,control_index);
+ 	delete tria->material; delete tria;
+ 
+@@ -6161,14 +6161,14 @@
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceAverageVelMisfit*/
+-		tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
++		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceAverageVelMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+-		tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
++		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceAverageVelMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+@@ -6198,14 +6198,14 @@
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceAbsVelMisfit*/
+-		tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
++		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceAbsVelMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+-		tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
++		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceAbsVelMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+@@ -6235,14 +6235,14 @@
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceLogVelMisfit*/
+-		tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
++		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceLogVelMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+-		tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
++		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceLogVelMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+@@ -6274,14 +6274,14 @@
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceLogVxVyMisfit*/
+-		tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
++		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceLogVxVyMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+-		tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
++		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceLogVxVyMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+@@ -6311,14 +6311,14 @@
+ 
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceRelVelMisfit*/
+-		tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
++		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceRelVelMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+-		tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
++		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+ 		J=tria->SurfaceRelVelMisfit(weight_index);
+ 		delete tria->material; delete tria;
+ 		return J;
+@@ -6360,7 +6360,7 @@
+ 	/*If on water, on shelf or not on bed, skip: */
+ 	if(IsOnWater()|| IsFloating() || !IsOnBed()) return 0;
+ 
+-	tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria
++	tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1
+ 	J=tria->DragCoefficientAbsGradient(weight_index);
+ 	delete tria->material; delete tria;
+ 	return J;
+@@ -6375,7 +6375,7 @@
+ 	/*If on water, on shelf or not on bed, skip: */
+ 	if(IsOnWater() || !IsOnBed()) return 0;
+ 
+-	tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria
++	tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1
+ 	J=tria->RheologyBbarAbsGradient(weight_index);
+ 	delete tria->material; delete tria;
+ 	return J;
+@@ -6679,7 +6679,7 @@
+ 
+ 	/*Find penta on bed as HO must be coupled to the dofs on the bed: */
+ 	Penta* pentabase=GetBasalElement();
+-	Tria*  tria=pentabase->SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria*  tria=pentabase->SpawnTria(0); //lower face is 0, upper face is 1.
+ 
+ 	/*Prepare node list*/
+ 	for(i=0;i<NUMVERTICES;i++){
+@@ -6876,7 +6876,7 @@
+ 
+ 	/*Find penta on bed as FS must be coupled to the dofs on the bed: */
+ 	Penta* pentabase=GetBasalElement();
+-	Tria* tria=pentabase->SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=pentabase->SpawnTria(0); //lower face is 0, upper face is 1.
+ 
+ 	/*Prepare node list*/
+ 	for(i=0;i<NUMVERTICES;i++){
+@@ -7233,7 +7233,7 @@
+ 	}
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSA();
+ 	delete tria->material; delete tria;
+ 
+@@ -7284,7 +7284,7 @@
+ 
+ 	/*Find penta on bed as this is a SSA elements: */
+ 	pentabase=GetBasalElement();
+-	tria=pentabase->SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	tria=pentabase->SpawnTria(0); //lower face is 0, upper face is 1.
+ 
+ 	/*Initialize Element matrix*/
+ 	ElementMatrix* Ke=new ElementMatrix(tria->nodes,NUMVERTICES2D,this->parameters,SSAApproximationEnum);
+@@ -7356,7 +7356,7 @@
+ 	/*Build a tria element using the 3 nodes of the base of the penta. Then use 
+ 	 * the tria functionality to build a friction stiffness matrix on these 3
+ 	 * nodes: */
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSAFriction();
+ 	delete tria->material; delete tria;
+ 
+@@ -7432,7 +7432,7 @@
+ 
+ 	/*Find penta on bed as this is a SSA elements: */
+ 	pentabase=GetBasalElement();
+-	tria=pentabase->SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	tria=pentabase->SpawnTria(0); //lower face is 0, upper face is 1.
+ 
+ 	/*Initialize Element matrix*/
+ 	ElementMatrix* Ke=new ElementMatrix(tria->nodes,NUMVERTICES2D,this->parameters,L1L2ApproximationEnum);
+@@ -7487,7 +7487,7 @@
+ 	/*Build a tria element using the 3 nodes of the base of the penta. Then use 
+ 	 * the tria functionality to build a friction stiffness matrix on these 3
+ 	 * nodes: */
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSAFriction();
+ 	delete tria->material; delete tria;
+ 
+@@ -8514,7 +8514,7 @@
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementVector* pe=tria->CreatePVectorDiagnosticSSA();
+ 	delete tria->material; delete tria;
+ 
+@@ -8528,7 +8528,7 @@
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementVector* pe=tria->CreatePVectorDiagnosticSSA();
+ 	delete tria->material; delete tria;
+ 
+@@ -9213,7 +9213,7 @@
+ 	}
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateJacobianDiagnosticSSA();
+ 	delete tria->material; delete tria;
+ 
+@@ -10445,7 +10445,7 @@
+ 	this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
+ 
+ 	/*Spawn Tria element from the base of the Penta: */
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixBalancethickness();
+ 	delete tria->material; delete tria;
+ 
+@@ -10467,7 +10467,7 @@
+ 	this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementVector* pe=tria->CreatePVectorBalancethickness();
+ 	delete tria->material; delete tria;
+ 
+@@ -10487,7 +10487,7 @@
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixHydrologyDCInefficient();
+ 	delete tria->material; delete tria;
+ 
+@@ -10500,7 +10500,7 @@
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementMatrix* Ke=tria->CreateKMatrixHydrologyDCEfficient();
+ 	delete tria->material; delete tria;
+ 
+@@ -10514,7 +10514,7 @@
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementVector* pe=tria->CreatePVectorHydrologyDCInefficient();
+ 	delete tria->material; delete tria;
+ 
+@@ -10528,7 +10528,7 @@
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	ElementVector* pe=tria->CreatePVectorHydrologyDCEfficient();
+ 	delete tria->material; delete tria;
+ 
+@@ -10541,7 +10541,7 @@
+ 
+ 	if (!IsOnBed()) return;
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	tria->GetHydrologyDCInefficientHmax(ph_max,innode);
+ 	delete tria->material; delete tria;
+ }
+@@ -10551,7 +10551,7 @@
+ 
+ 	if (!IsOnBed()) return;
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	tria->GetHydrologyTransfer(transfer);
+ 	delete tria->material; delete tria;
+ }
+@@ -10592,7 +10592,7 @@
+ 
+ 	if (!IsOnBed())return;
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	tria->HydrologyEPLGetActive(active_vec);
+ 	delete tria->material; delete tria;
+ 
+@@ -10603,7 +10603,7 @@
+ 
+ 	if (!IsOnBed())return;
+ 
+-	Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+ 	tria->HydrologyEPLGetMask(vec_mask);
+ 	delete tria->material; delete tria;
+ 
+@@ -10645,7 +10645,7 @@
+ 
+ 		kappa=kmax*pow(10.,penalty_factor);
+ 
+-		Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.	
++		Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.	
+ 		for(int i=0;i<NUMVERTICES2D;i++){
+ 			tria->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
+ 			if(values[i]>h_max){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15738-15739.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15738-15739.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15738-15739.diff	(revision 16134)
@@ -0,0 +1,112 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15738)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15739)
+@@ -240,7 +240,7 @@
+ 	}
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
+-			viscosity=0.5*pow((IssmDouble)10,(IssmDouble)14);
++			viscosity=0.5*pow(10.,14);
+ 		}
+ 		else{
+ 			/*Retrive strain rate components: */
+@@ -252,7 +252,7 @@
+ 			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+ 			if(A==0){
+ 				/*Maxiviscositym viscosity for 0 shear areas: */
+-				viscosity=2.5*pow(10.,17.);
++				viscosity=2.5*pow(10.,17);
+ 			}
+ 			else{
+ 				e=(n-1)/(2*n);
+@@ -307,7 +307,7 @@
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+ 				(epsilon[3]==0) && (epsilon[4]==0)){
+-			viscosity3d=0.5*pow((IssmDouble)10,(IssmDouble)14);
++			viscosity3d=0.5*pow(10.,14);
+ 		}
+ 		else{
+ 
+@@ -322,7 +322,7 @@
+ 			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+pow(exz,2)+pow(eyz,2)+exx*eyy;
+ 			if(A==0){
+ 				/*Maxiviscosity3dm viscosity for 0 shear areas: */
+-				viscosity3d=2.25*pow((IssmDouble)10,(IssmDouble)17);
++				viscosity3d=2.25*pow(10.,17);
+ 			}
+ 			else{
+ 				e=(n-1)/2/n;
+@@ -368,7 +368,7 @@
+ 	IssmDouble eps0;
+ 
+ 	/*Get B and n*/
+-	eps0=pow((IssmDouble)10,(IssmDouble)-27);
++	eps0=pow(10.,-27);
+ 	B=GetB();
+ 	n=GetN();
+ 
+@@ -379,7 +379,7 @@
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+ 				(epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){
+-			viscosity3d=0.5*pow((IssmDouble)10,(IssmDouble)14);
++			viscosity3d=0.5*pow(10.,14);
+ 		}
+ 		else{
+ 
+@@ -395,7 +395,7 @@
+ 			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+pow(exz,2)+pow(eyz,2)+exx*eyy+pow(eps0,2);
+ 			if(A==0){
+ 				/*Maxiviscosity3dm viscosity for 0 shear areas: */
+-				viscosity3d=2.25*pow((IssmDouble)10,(IssmDouble)17);
++				viscosity3d=2.25*pow(10.,17);
+ 			}
+ 			else{
+ 				e=(n-1)/2/n;
+@@ -448,7 +448,7 @@
+ 		A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+ 		if(A==0){
+ 			/*Maximum viscosity_complement for 0 shear areas: */
+-			viscosity_complement=2.25*pow((IssmDouble)10,(IssmDouble)17);
++			viscosity_complement=2.25*pow(10.,17);
+ 		}
+ 		else{
+ 			e=(n-1)/(2*n);
+@@ -457,7 +457,7 @@
+ 		}
+ 	}
+ 	else{
+-		viscosity_complement=4.5*pow((IssmDouble)10,(IssmDouble)17);
++		viscosity_complement=4.5*pow(10.,17);
+ 	}
+ 
+ 	/*Checks in debugging mode*/
+@@ -485,7 +485,7 @@
+ 
+ 	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+ 				(epsilon[3]==0) && (epsilon[4]==0)){
+-		mu_prime=0.5*pow((IssmDouble)10,(IssmDouble)14);
++		mu_prime=0.5*pow(10.,14);
+ 	}
+ 	else{
+ 		/*Retrive strain rate components: */
+@@ -519,7 +519,7 @@
+ 
+ 	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+ 				(epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){
+-		mu_prime=0.5*pow((IssmDouble)10,(IssmDouble)14);
++		mu_prime=0.5*pow(10.,14);
+ 	}
+ 	else{
+ 		/*Retrive strain rate components: */
+@@ -553,7 +553,7 @@
+ 	n=GetN();
+ 
+ 	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
+-		mu_prime=0.5*pow((IssmDouble)10,(IssmDouble)14);
++		mu_prime=0.5*pow(10.,14);
+ 	}
+ 	else{
+ 		/*Retrive strain rate components: */
Index: /issm/oecreview/Archive/15392-16133/ISSM-15739-15740.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15739-15740.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15739-15740.diff	(revision 16134)
@@ -0,0 +1,368 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15739)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15740)
+@@ -248,7 +248,7 @@
+ 	}
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
+-			viscosity=0.5*pow((IssmDouble)10,(IssmDouble)14);
++			viscosity=0.5*pow(10.,14);
+ 		}
+ 		else{
+ 			/*Retrive strain rate components: */
+@@ -260,7 +260,7 @@
+ 			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+ 			if(A==0){
+ 				/*Maxiviscositym viscosity for 0 shear areas: */
+-				viscosity=2.5*pow(10.,17.);
++				viscosity=2.5*pow(10.,17);
+ 			}
+ 			else{
+ 				e=(n-1)/(2*n);
+@@ -316,7 +316,7 @@
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+ 				(epsilon[3]==0) && (epsilon[4]==0)){
+-			viscosity3d=0.5*pow((IssmDouble)10,(IssmDouble)14);
++			viscosity3d=0.5*pow(10.,14);
+ 		}
+ 		else{
+ 
+@@ -331,7 +331,7 @@
+ 			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+pow(exz,2)+pow(eyz,2)+exx*eyy;
+ 			if(A==0){
+ 				/*Maxiviscosity3dm viscosity for 0 shear areas: */
+-				viscosity3d=2.25*pow((IssmDouble)10,(IssmDouble)17);
++				viscosity3d=2.25*pow(10.,17);
+ 			}
+ 			else{
+ 				e=(n-1)/2/n;
+@@ -377,7 +377,7 @@
+ 	IssmDouble eps0;
+ 
+ 	/*Get B and n*/
+-	eps0=pow((IssmDouble)10,(IssmDouble)-27);
++	eps0=pow(10.,(IssmDouble)-27);
+ 	n=GetN();
+ 	Z=GetZ();
+ 	B=Z*GetB();
+@@ -389,7 +389,7 @@
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+ 				(epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){
+-			viscosity3d=0.5*pow((IssmDouble)10,(IssmDouble)14);
++			viscosity3d=0.5*pow(10.,14);
+ 		}
+ 		else{
+ 
+@@ -405,7 +405,7 @@
+ 			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+pow(exz,2)+pow(eyz,2)+exx*eyy+pow(eps0,2);
+ 			if(A==0){
+ 				/*Maxiviscosity3dm viscosity for 0 shear areas: */
+-				viscosity3d=2.25*pow((IssmDouble)10,(IssmDouble)17);
++				viscosity3d=2.25*pow(10.,17);
+ 			}
+ 			else{
+ 				e=(n-1)/2/n;
+@@ -458,7 +458,7 @@
+ 		A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+ 		if(A==0){
+ 			/*Maximum viscosity_complement for 0 shear areas: */
+-			viscosity_complement=2.25*pow((IssmDouble)10,(IssmDouble)17);
++			viscosity_complement=2.25*pow(10.,17);
+ 		}
+ 		else{
+ 			e=(n-1)/(2*n);
+@@ -467,7 +467,7 @@
+ 		}
+ 	}
+ 	else{
+-		viscosity_complement=4.5*pow((IssmDouble)10,(IssmDouble)17);
++		viscosity_complement=4.5*pow(10.,17);
+ 	}
+ 
+ 	/*Checks in debugging mode*/
+@@ -514,7 +514,7 @@
+ 		A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+ 		if(A==0){
+ 			/*Maximum viscosity_complement for 0 shear areas: */
+-			viscosity_complement=2.25*pow((IssmDouble)10,(IssmDouble)17);
++			viscosity_complement=2.25*pow(10.,17);
+ 		}
+ 		else{
+ 			e=(n-1)/(2*n);
+@@ -523,7 +523,7 @@
+ 		}
+ 	}
+ 	else{
+-		viscosity_complement=4.5*pow((IssmDouble)10,(IssmDouble)17);
++		viscosity_complement=4.5*pow(10.,17);
+ 	}
+ 
+ 	/*Checks in debugging mode*/
+@@ -551,7 +551,7 @@
+ 
+ 	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+ 				(epsilon[3]==0) && (epsilon[4]==0)){
+-		mu_prime=0.5*pow((IssmDouble)10,(IssmDouble)14);
++		mu_prime=0.5*pow(10.,14);
+ 	}
+ 	else{
+ 		/*Retrive strain rate components: */
+@@ -585,7 +585,7 @@
+ 
+ 	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+ 				(epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){
+-		mu_prime=0.5*pow((IssmDouble)10,(IssmDouble)14);
++		mu_prime=0.5*pow(10.,14);
+ 	}
+ 	else{
+ 		/*Retrive strain rate components: */
+@@ -619,7 +619,7 @@
+ 	n=GetN();
+ 
+ 	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
+-		mu_prime=0.5*pow((IssmDouble)10,(IssmDouble)14);
++		mu_prime=0.5*pow(10.,14);
+ 	}
+ 	else{
+ 		/*Retrive strain rate components: */
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15739)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15740)
+@@ -339,15 +339,15 @@
+ 	parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
+ 
+ 	//Create elementary matrix: add penalty to 
+-	Ke->values[0*numdof+0]=+kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[0*numdof+2]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[2*numdof+0]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[2*numdof+2]=+kmax*pow((IssmDouble)10.0,penalty_offset);
++	Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_offset);
++	Ke->values[0*numdof+2]=-kmax*pow(10.,penalty_offset);
++	Ke->values[2*numdof+0]=-kmax*pow(10.,penalty_offset);
++	Ke->values[2*numdof+2]=+kmax*pow(10.,penalty_offset);
+ 
+-	Ke->values[1*numdof+1]=+kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[1*numdof+3]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[3*numdof+1]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[3*numdof+3]=+kmax*pow((IssmDouble)10.0,penalty_offset);
++	Ke->values[1*numdof+1]=+kmax*pow(10.,penalty_offset);
++	Ke->values[1*numdof+3]=-kmax*pow(10.,penalty_offset);
++	Ke->values[3*numdof+1]=-kmax*pow(10.,penalty_offset);
++	Ke->values[3*numdof+3]=+kmax*pow(10.,penalty_offset);
+ 
+ 	/*Clean up and return*/
+ 	return Ke;
+@@ -366,25 +366,25 @@
+ 	parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
+ 
+ 	//Create elementary matrix: add penalty to 
+-	Ke->values[0*numdof+0]=+kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[0*numdof+4]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[4*numdof+0]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[4*numdof+4]=+kmax*pow((IssmDouble)10.0,penalty_offset);
++	Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_offset);
++	Ke->values[0*numdof+4]=-kmax*pow(10.,penalty_offset);
++	Ke->values[4*numdof+0]=-kmax*pow(10.,penalty_offset);
++	Ke->values[4*numdof+4]=+kmax*pow(10.,penalty_offset);
+ 
+-	Ke->values[1*numdof+1]=+kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[1*numdof+5]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[5*numdof+1]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[5*numdof+5]=+kmax*pow((IssmDouble)10.0,penalty_offset);
++	Ke->values[1*numdof+1]=+kmax*pow(10.,penalty_offset);
++	Ke->values[1*numdof+5]=-kmax*pow(10.,penalty_offset);
++	Ke->values[5*numdof+1]=-kmax*pow(10.,penalty_offset);
++	Ke->values[5*numdof+5]=+kmax*pow(10.,penalty_offset);
+ 
+-	Ke->values[2*numdof+2]=+kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[2*numdof+6]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[6*numdof+2]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[6*numdof+6]=+kmax*pow((IssmDouble)10.0,penalty_offset);
++	Ke->values[2*numdof+2]=+kmax*pow(10.,penalty_offset);
++	Ke->values[2*numdof+6]=-kmax*pow(10.,penalty_offset);
++	Ke->values[6*numdof+2]=-kmax*pow(10.,penalty_offset);
++	Ke->values[6*numdof+6]=+kmax*pow(10.,penalty_offset);
+ 
+-	Ke->values[3*numdof+3]=+kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[3*numdof+7]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[7*numdof+3]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[7*numdof+7]=+kmax*pow((IssmDouble)10.0,penalty_offset);
++	Ke->values[3*numdof+3]=+kmax*pow(10.,penalty_offset);
++	Ke->values[3*numdof+7]=-kmax*pow(10.,penalty_offset);
++	Ke->values[7*numdof+3]=-kmax*pow(10.,penalty_offset);
++	Ke->values[7*numdof+7]=+kmax*pow(10.,penalty_offset);
+ 
+ 	/*Clean up and return*/
+ 	return Ke;
+@@ -403,10 +403,10 @@
+ 	parameters->FindParam(&penalty_factor,PrognosticPenaltyFactorEnum);
+ 
+ 	//Create elementary matrix: add penalty to 
+-	Ke->values[0*numdof+0]=+kmax*pow((IssmDouble)10.0,penalty_factor);
+-	Ke->values[0*numdof+1]=-kmax*pow((IssmDouble)10.0,penalty_factor);
+-	Ke->values[1*numdof+0]=-kmax*pow((IssmDouble)10.0,penalty_factor);
+-	Ke->values[1*numdof+1]=+kmax*pow((IssmDouble)10.0,penalty_factor);
++	Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_factor);
++	Ke->values[0*numdof+1]=-kmax*pow(10.,penalty_factor);
++	Ke->values[1*numdof+0]=-kmax*pow(10.,penalty_factor);
++	Ke->values[1*numdof+1]=+kmax*pow(10.,penalty_factor);
+ 
+ 	/*Clean up and return*/
+ 	return Ke;
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15739)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15740)
+@@ -220,11 +220,6 @@
+ 	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	switch(analysis_type){
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum: case AdjointHorizAnalysisEnum:
+-			Ke=PenaltyCreateKMatrixDiagnosticFS(kmax);
+-			break;
+-		#endif
+ 		#ifdef _HAVE_THERMAL_
+ 		case ThermalAnalysisEnum:
+ 			Ke=PenaltyCreateKMatrixThermal(kmax);
+@@ -447,40 +442,6 @@
+ 
+ }
+ /*}}}*/
+-#ifdef _HAVE_DIAGNOSTIC_
+-/*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticFS {{{*/
+-ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax){
+-
+-	const int numdof = NUMVERTICES *NDOF4;
+-	IssmDouble    slope[2];
+-	IssmDouble    penalty_offset;
+-	int       approximation;
+-
+-	Penta* penta=(Penta*)element;
+-
+-	/*Initialize Element vector and return if necessary*/
+-	penta->inputs->GetInputValue(&approximation,ApproximationEnum);
+-	if(approximation!=FSApproximationEnum &&  approximation!=HOFSApproximationEnum) return NULL;
+-	ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters,FSApproximationEnum);
+-
+-	/*Retrieve all inputs and parameters*/
+-	parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
+-	penta->GetInputValue(&slope[0],node,BedSlopeXEnum);
+-	penta->GetInputValue(&slope[1],node,BedSlopeYEnum);
+-
+-	/*Create elementary matrix: add penalty to constrain wb (wb=ub*db/dx+vb*db/dy)*/
+-	Ke->values[2*NDOF4+0]=-slope[0]*kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[2*NDOF4+1]=-slope[1]*kmax*pow((IssmDouble)10.0,penalty_offset);
+-	Ke->values[2*NDOF4+2]= kmax*pow((IssmDouble)10,penalty_offset);
+-
+-	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,&node,NUMVERTICES,XYZEnum);
+-
+-	/*Clean up and return*/
+-	return Ke;
+-}
+-/*}}}*/
+-#endif
+ #ifdef _HAVE_THERMAL_
+ /*FUNCTION Pengrid::ConstraintActivateThermal {{{*/
+ void  Pengrid::ConstraintActivateThermal(int* punstable){
+@@ -573,7 +534,7 @@
+ 
+ 	/*Add penalty load*/
+ 	if (temperature<t_pmp){ //If T<Tpmp, there must be no melting. Therefore, melting should be  constrained to 0 when T<Tpmp, instead of using spcs, use penalties
+-		Ke->values[0]=kmax*pow((IssmDouble)10,penalty_factor);
++		Ke->values[0]=kmax*pow(10.,penalty_factor);
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -593,7 +554,7 @@
+ 	/*recover parameters: */
+ 	parameters->FindParam(&penalty_factor,ThermalPenaltyFactorEnum);
+ 
+-	Ke->values[0]=kmax*pow((IssmDouble)10,penalty_factor);
++	Ke->values[0]=kmax*pow(10.,penalty_factor);
+ 
+ 	/*Clean up and return*/
+ 	return Ke;
+@@ -634,8 +595,8 @@
+ 		pe->values[0]=0;
+ 	}
+ 	else{
+-		if (reCast<bool>(dt)) pe->values[0]=melting_offset*pow((IssmDouble)10,penalty_factor)*(temperature-t_pmp)/dt;
+-		else    pe->values[0]=melting_offset*pow((IssmDouble)10,penalty_factor)*(temperature-t_pmp);
++		if (reCast<bool>(dt)) pe->values[0]=melting_offset*pow(10.,penalty_factor)*(temperature-t_pmp)/dt;
++		else    pe->values[0]=melting_offset*pow(10.,penalty_factor)*(temperature-t_pmp);
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -663,7 +624,7 @@
+ 	/*Compute pressure melting point*/
+ 	t_pmp=matpar->GetMeltingPoint()-matpar->GetBeta()*pressure;
+ 
+-	pe->values[0]=kmax*pow((IssmDouble)10,penalty_factor)*t_pmp;
++	pe->values[0]=kmax*pow(10.,penalty_factor)*t_pmp;
+ 
+ 	/*Clean up and return*/
+ 	return pe;
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 15739)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 15740)
+@@ -86,9 +86,6 @@
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Pengrid management {{{*/
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);
+-		#endif
+ 		#ifdef _HAVE_THERMAL_
+ 		ElementMatrix* PenaltyCreateKMatrixThermal(IssmDouble kmax);
+ 		ElementMatrix* PenaltyCreateKMatrixMelting(IssmDouble kmax);
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15739)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15740)
+@@ -575,15 +575,15 @@
+ 	if(fill==WaterEnum){
+ 		if(shelf){
+ 			/*We are on an ice shelf, hydrostatic equilibrium is used to determine the pressure for water fill: */
+-			pressure=rho_ice*gravity*pow(thickness,(IssmDouble)2)/(IssmDouble)2  - rho_water*gravity*pow(bed,(IssmDouble)2)/(IssmDouble)2; 
++			pressure=rho_ice*gravity*pow(thickness,2)/2.- rho_water*gravity*pow(bed,2)/2.; 
+ 		}
+ 		else{
+ 			//We are on an icesheet, we assume the water column fills the entire front: */
+-			pressure=rho_ice*gravity*pow(thickness,(IssmDouble)2)/(IssmDouble)2  - rho_water*gravity*pow(thickness,(IssmDouble)2)/(IssmDouble)2; 
++			pressure=rho_ice*gravity*pow(thickness,2)/2.- rho_water*gravity*pow(thickness,2)/2.; 
+ 		}
+ 	}
+ 	else if(fill==AirEnum){
+-		pressure=rho_ice*gravity*pow(thickness,(IssmDouble)2)/(IssmDouble)2;   //icefront on an ice sheet, pressure imbalance ice vs air.
++		pressure=rho_ice*gravity*pow(thickness,2)/2.;   //icefront on an ice sheet, pressure imbalance ice vs air.
+ 	}
+ 	else if(fill==IceEnum){ //icefront finding itself against another icefront (pressure imbalance is fully compensated, ice vs ice)
+ 		pressure=0;
+@@ -592,9 +592,9 @@
+ 
+ 		if(!shelf) _error_("fill type " << fill << " not supported on ice sheets yet.");
+ 
+-		pressure_litho=rho_ice*gravity*pow(thickness,(IssmDouble)2)/(IssmDouble)2;
++		pressure_litho=rho_ice*gravity*pow(thickness,2)/2.;
+ 		pressure_air=0;
+-		pressure_melange=rho_ice*gravity*pow(fraction*thickness,(IssmDouble)2)/(IssmDouble)2;
++		pressure_melange=rho_ice*gravity*pow(fraction*thickness,2)/2.;
+ 		pressure_water=1.0/2.0*rho_water*gravity*  ( pow(bed,2.0)-pow(rho_ice/rho_water*fraction*thickness,2.0) );
+ 
+ 		pressure=pressure_litho-pressure_air-pressure_melange-pressure_water;
+@@ -683,7 +683,7 @@
+ 		this->counter=0;
+ 		/*increase melange fraction: */
+ 		this->fraction+=fractionincrement;
+-		if (this->fraction>1)this->fraction=(IssmDouble)1.0;
++		if (this->fraction>1)this->fraction=1.;
+ 		//_printf_("riftfront " << this->Id() << " fraction: " << this->fraction << "\n");
+ 	}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15740-15741.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15740-15741.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15740-15741.diff	(revision 16134)
@@ -0,0 +1,308 @@
+Index: ../trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp	(revision 15741)
+@@ -57,7 +57,7 @@
+ 	/*  Conversion constant from degrees to radians  */
+ 	cde = 57.29577951;
+ 	/*  Radius of the earth in meters  */
+-	re  = 6378.273*pow(10.,3.);
++	re  = 6378.273*1.e3;
+ 	/*  Eccentricity of the Hughes ellipsoid squared  */
+ 	ex2 = 0.006693883;
+ 	/*  Eccentricity of the Hughes ellipsoid  */
+@@ -76,7 +76,7 @@
+ 		else {
+ 			sl  = slat*PI/180.;
+ 			tc  = tan(PI/4.-sl/2.)/pow(((1.-ex*sin(sl))/(1.+ex*sin(sl))),(ex/2.));
+-			mc  = cos(sl)/sqrt(1.0-ex2*(pow(sin(sl),2.)));
++			mc  = cos(sl)/sqrt(1.0-ex2*(pow(sin(sl),2)));
+ 			rho = re*mc*T/tc;
+ 		}
+ 
+Index: ../trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp	(revision 15741)
+@@ -58,7 +58,7 @@
+ 	/*  Conversion constant from degrees to radians  */
+ 	cde  = 57.29577951;
+ 	/*  Radius of the earth in meters  */
+-	re   = 6378.273*pow(10.,3.);
++	re   = 6378.273e+3;
+ 	/*  Eccentricity of the Hughes ellipsoid squared  */
+ 	ex2  = 0.006693883;
+ 	/*  Eccentricity of the Hughes ellipsoid  */
+@@ -67,8 +67,8 @@
+ 	/*  loop over all the coordinate pairs  */
+ 	for(i=0; i<ncoord; i++){
+ 		sl = slat*PI/180.;
+-		cm = cos(sl)/sqrt(1.0-ex2*(pow(sin(sl),2.)));
+-		rho= sqrt(pow(x[i],2.) + pow(y[i],2.));
++		cm = cos(sl)/sqrt(1.0-ex2*(pow(sin(sl),2)));
++		rho= sqrt(pow(x[i],2) + pow(y[i],2));
+ 		T  = tan((PI/4.0) - (sl/2.0))/pow(((1.0-ex*sin(sl))/(1.0+ex*sin(sl))),(ex/2.0));
+ 
+ 		if(fabs(slat-90.) < 1.e-5)
+Index: ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 15741)
+@@ -1451,9 +1451,7 @@
+ 					eta       =1./4./SQRT3
+ 					  *(5.+3.*egaus[j]-zgaus[k]-3.*egaus[j]*zgaus[k]);
+ 					zeta      =sqrt(2./3.)*(1.+zgaus[k]);
+-					(*pwgt)[ipt]=xwgt[i]*ewgt[j]*zwgt[k]
+-					  *(SQRT2/16.
+-								  *(1.-egaus[j])*pow(1.-zgaus[k],2.));
++					(*pwgt)[ipt]=xwgt[i]*ewgt[j]*zwgt[k]*(SQRT2/16.*(1.-egaus[j])*pow(1.-zgaus[k],2));
+ 
+ 					(*pl1 )[ipt]=(1.-xi-eta/SQRT3-zeta/sqrt(6.))/2.;
+ 					(*pl2 )[ipt]=(1.+xi-eta/SQRT3-zeta/sqrt(6.))/2.;
+Index: ../trunk-jpl/src/c/shared/Elements/Arrhenius.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/Arrhenius.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/shared/Elements/Arrhenius.cpp	(revision 15741)
+@@ -25,7 +25,7 @@
+ 	 *  Convert A to B :  B = A^(-1/n) */
+ 
+ 	/*Some physical constants (Payne2000)*/
+-	IssmDouble beta=8.66*pow(10.,-4.);
++	IssmDouble beta=8.66*1.e-4;
+ 	IssmDouble R=8.314;
+ 
+ 	/*Intermediaries*/
+@@ -38,10 +38,10 @@
+ 
+ 	/*Get A*/
+ 	if(Tstar<263.15){
+-		A=3.61*pow(10.,-13.) * exp(  -6.*pow(10.,4.)/(R*Tstar));
++		A=3.61e-13*exp(  -6.e+4/(R*Tstar));
+ 	}
+ 	else{
+-		A=1.73*pow(10.,  3.) * exp(-13.9*pow(10.,4.)/(R*Tstar));
++		A=1.73e+3 *exp(-13.9e+4/(R*Tstar));
+ 	}
+ 
+ 	/*Convert to B*/
+Index: ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp	(revision 15741)
+@@ -64,7 +64,7 @@
+ 	double h,a,cova;
+ 
+ 	/*Calculate length*/
+-	h=sqrt(pow(deltax,2.)+pow(deltay,2.));
++	h=sqrt(deltax*deltax + deltay*deltay);
+ 
+ 	/*If h is too small, return sill*/
+ 	if(h<0.0000001) return sill;
+@@ -81,7 +81,7 @@
+ 	double h,a,gamma;
+ 
+ 	/*Calculate length*/
+-	h=sqrt(pow(deltax,2.)+pow(deltay,2.));
++	h=sqrt(deltax*deltax + deltay*deltay);
+ 
+ 	/*return semi-variogram*/
+ 	a     = 1./3.;
+Index: ../trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp	(revision 15741)
+@@ -65,7 +65,7 @@
+ 	double h,cova;
+ 
+ 	/*Calculate length square*/
+-	h=sqrt(pow(deltax,2.)+pow(deltay,2.));
++	h=sqrt(deltax*deltax + deltay*deltay);
+ 
+ 	/*return covariance*/
+ 	cova = 9999. - this->slope*pow(h,this->power);
+@@ -79,7 +79,7 @@
+ 	double h,gamma;
+ 
+ 	/*Calculate length square*/
+-	h=sqrt(pow(deltax,2.)+pow(deltay,2.));
++	h=sqrt(deltax*deltax + deltay*deltay);
+ 
+ 	/*return semi-variogram*/
+ 	gamma = this->nugget + this->slope*pow(h,this->power);
+Index: ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 15741)
+@@ -229,9 +229,9 @@
+ 	/*Add obervation in this box (should be full)*/
+ 	if(box && box->nbitems==4){
+ 		index  = 0;
+-		length = pow(box->obs[0]->x - x,2.) + pow(box->obs[0]->y - y,2.);
++		length = pow(box->obs[0]->x - x,2) + pow(box->obs[0]->y - y,2);
+ 		for(int i=1;i<4;i++){
+-			length2 = pow(box->obs[i]->x - x,2.) + pow(box->obs[i]->y - y,2.);
++			length2 = pow(box->obs[i]->x - x,2) + pow(box->obs[i]->y - y,2);
+ 			if(length2<length){
+ 				index  = i;
+ 				length = length2;
+@@ -281,9 +281,9 @@
+ 	/*Add obervation in this box (should be full)*/
+ 	if(box && box->nbitems>0){
+ 		index  = box->obs[0]->index;
+-		length = pow(box->obs[0]->x - x,2.) + pow(box->obs[0]->y - y,2.);
++		length = pow(box->obs[0]->x - x,2) + pow(box->obs[0]->y - y,2);
+ 		for(int i=1;i<box->nbitems;i++){
+-			length2 = pow(box->obs[i]->x - x,2.) + pow(box->obs[i]->y - y,2.);
++			length2 = pow(box->obs[i]->x - x,2) + pow(box->obs[i]->y - y,2);
+ 			if(length2<length){
+ 				index  = box->obs[i]->index;
+ 				length = length2;
+Index: ../trunk-jpl/src/c/classes/kriging/Observations.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 15741)
+@@ -562,14 +562,14 @@
+ 		for(j=i+1;j<this->Size();j++){
+ 			observation2=dynamic_cast<Observation*>(this->GetObjectByOffset(j));
+ 
+-			distance=sqrt(pow(observation1->x - observation2->x,2.) + pow(observation1->y - observation2->y,2.));
++			distance=sqrt(pow(observation1->x - observation2->x,2) + pow(observation1->y - observation2->y,2));
+ 			if(distance>x[n-1]) continue;
+ 
+ 			int index = int(distance/(x[1]-x[0]));
+ 			if(index>n-1) index = n-1;
+ 			if(index<0)   index = 0;
+ 
+-			gamma[index]   += 1./2.*pow(observation1->value - observation2->value,2.);
++			gamma[index]   += 1./2.*pow(observation1->value - observation2->value,2);
+ 			counter[index] += 1.;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp	(revision 15741)
+@@ -64,7 +64,7 @@
+ 	double h2,a,cova;
+ 
+ 	/*Calculate length square*/
+-	h2=pow(deltax,2.)+pow(deltay,2.);
++	h2=deltax*deltax + deltay*deltay;
+ 
+ 	/*If h is too small, return sill*/
+ 	if(h2<0.0000001) return sill;
+@@ -82,7 +82,7 @@
+ 	double h2,a,gamma;
+ 
+ 	/*Calculate length square*/
+-	h2=pow(deltax,2.)+pow(deltay,2.);
++	h2=deltax*deltax + deltay*deltay;
+ 
+ 	/*return semi-variogram*/
+ 	a     = 1./3.;
+Index: ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp	(revision 15741)
+@@ -64,11 +64,11 @@
+ 	double h,cova;
+ 
+ 	/*Calculate length square*/
+-	h=sqrt(pow(deltax,2.)+pow(deltay,2.));
++	h=sqrt(deltax*deltax + deltay*deltay);
+ 
+ 	/*return covariance*/
+ 	if(h<=range)
+-	 cova = (sill-nugget)*(1 - (3*h)/(2*range) + pow(h,3.)/(2*pow(range,3.)) );
++	 cova = (sill-nugget)*(1 - (3*h)/(2*range) + pow(h,3)/(2*pow(range,3)) );
+ 	else
+ 	 cova = 0.;
+ 
+@@ -81,11 +81,11 @@
+ 	double h,gamma;
+ 
+ 	/*Calculate length square*/
+-	h=sqrt(pow(deltax,2.)+pow(deltay,2.));
++	h=sqrt(deltax*deltax + deltay*deltay);
+ 
+ 	/*return semi-variogram*/
+ 	if(h<=range)
+-	 gamma = (sill-nugget)*( (3*h)/(2*range) - pow(h,3.)/(2*pow(range,3.)) ) + nugget;
++	 gamma = (sill-nugget)*( (3*h)/(2*range) - pow(h,3)/(2*pow(range,3)) ) + nugget;
+ 	else
+ 	 gamma = sill;
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15741)
+@@ -3320,8 +3320,8 @@
+ 
+ 		constant_part=-2.*pow(rho_ice*gravity,n)*pow(slope2,((n-1.)/2.));
+ 
+-		ub=-1.58*pow(10.,-10.)*rho_ice*gravity*thickness*slope[0];
+-		vb=-1.58*pow(10.,-10.)*rho_ice*gravity*thickness*slope[1];
++		ub=-1.58*1.e-10*rho_ice*gravity*thickness*slope[0];
++		vb=-1.58*1.e-10*rho_ice*gravity*thickness*slope[1];
+ 
+ 		pe->values[2*i+0]=(ub-2.*pow(rho_ice*gravity,n)*pow(slope2,((n-1.)/2.))*pow(thickness,n)/(pow(B,n)*(n+1))*slope[0])/connectivity;
+ 		pe->values[2*i+1]=(vb-2.*pow(rho_ice*gravity,n)*pow(slope2,((n-1.)/2.))*pow(thickness,n)/(pow(B,n)*(n+1))*slope[1])/connectivity;
+@@ -4428,7 +4428,7 @@
+ 		rheologyb_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
+ 
+ 		/*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */ 
+-		Jelem+=weight*1/2*(pow(dp[0],2.)+pow(dp[1],2.))*Jdet*gauss->weight;
++		Jelem+=weight*1/2*(dp[0]*dp[0] + dp[1]*dp[1])*Jdet*gauss->weight;
+ 	}
+ 
+ 	/*Clean up and return*/
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15741)
+@@ -1873,8 +1873,8 @@
+ 
+ 	/*Jdet = (Area of the trapezoid)/(Area trapezoid ref) with AreaRef = 4*/
+ 	/*Area of a trabezoid = altitude * (base1 + base2)/2 */
+-	*Jdet= pow(pow(x2-x1,2.) + pow(y2-y1,2.),0.5) * (z4-z1 + z3-z2)/8;
+-	if(*Jdet<0) _error_("negative jacobian determinant!");
++	*Jdet= sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)) * (z4-z1 + z3-z2)/8.;
++	if(*Jdet<0.) _error_("negative jacobian determinant!");
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15740)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15741)
+@@ -3937,8 +3937,8 @@
+ 		if(stabilization==1){
+ 			/*Build K: */
+ 			GetElementSizes(&hx,&hy,&hz);
+-			vel=sqrt(pow(vx,2.)+pow(vy,2.)+pow(vz,2.))+1.e-14;
+-			h=sqrt( pow(hx*vx/vel,2.) + pow(hy*vy/vel,2.) + pow(hz*vz/vel,2.));
++			vel=sqrt(vx*vx + vy*vy + vz*vz)+1.e-14;
++			h=sqrt( pow(hx*vx/vel,2) + pow(hy*vy/vel,2) + pow(hz*vz/vel,2));
+ 			K[0][0]=h/(2*vel)*vx*vx;  K[0][1]=h/(2*vel)*vx*vy; K[0][2]=h/(2*vel)*vx*vz;
+ 			K[1][0]=h/(2*vel)*vy*vx;  K[1][1]=h/(2*vel)*vy*vy; K[1][2]=h/(2*vel)*vy*vz;
+ 			K[2][0]=h/(2*vel)*vz*vx;  K[2][1]=h/(2*vel)*vz*vy; K[2][2]=h/(2*vel)*vz*vz;
+@@ -4166,8 +4166,8 @@
+ 		if(stabilization==1){
+ 			/*Build K: */
+ 			GetElementSizes(&hx,&hy,&hz);
+-			vel=sqrt(pow(vx,2.)+pow(vy,2.)+pow(vz,2.))+1.e-14;
+-			h=sqrt( pow(hx*vx/vel,2.) + pow(hy*vy/vel,2.) + pow(hz*vz/vel,2.));
++			vel=sqrt(vx*vx + vy*vy + vz*vz)+1.e-14;
++			h=sqrt( pow(hx*vx/vel,2) + pow(hy*vy/vel,2) + pow(hz*vz/vel,2));
+ 
+ 			K[0][0]=h/(2*vel)*fabs(vx*vx);  K[0][1]=h/(2*vel)*fabs(vx*vy); K[0][2]=h/(2*vel)*fabs(vx*vz);
+ 			K[1][0]=h/(2*vel)*fabs(vy*vx);  K[1][1]=h/(2*vel)*fabs(vy*vy); K[1][2]=h/(2*vel)*fabs(vy*vz);
+@@ -8495,7 +8495,7 @@
+ 
+ 		/*Deal with lower surface*/
+ 		if(IsOnBed()){
+-			constant_part=-1.58*pow(10.,-10.)*rho_ice*gravity*thickness;
++			constant_part=-1.58*1.e-10*rho_ice*gravity*thickness;
+ 			ub=constant_part*slope[0];
+ 			vb=constant_part*slope[1];
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15741-15742.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15741-15742.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15741-15742.diff	(revision 16134)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 15741)
++++ ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 15742)
+@@ -492,32 +492,32 @@
+ 	}
+ 
+ 	_printf_("   gglobaldoflist (" << gglobaldoflist << "): ");
+-	if(gglobaldoflist) for(i=0;i<nrows;i++) _printf_(" " << gglobaldoflist[i] << "\n"); _printf_("\n");
++	if(gglobaldoflist) for(i=0;i<nrows;i++) _printf_(" " << gglobaldoflist[i]); _printf_("\n");
+ 
+ 	_printf_("   row_fsize: " << row_fsize << "\n");
+ 	_printf_("   row_flocaldoflist  (" << row_flocaldoflist << "): ");
+-	if(row_flocaldoflist) for(i=0;i<row_fsize;i++) _printf_(" " << row_flocaldoflist[i] << "\n"); _printf_(" \n");
++	if(row_flocaldoflist) for(i=0;i<row_fsize;i++) _printf_(" " << row_flocaldoflist[i] ); _printf_(" \n");
+ 	_printf_("   row_fglobaldoflist  (" << row_fglobaldoflist << "): ");
+-	if(row_fglobaldoflist) for(i=0;i<row_fsize;i++) _printf_(" " << row_fglobaldoflist[i] << "\n"); _printf_(" \n");
++	if(row_fglobaldoflist) for(i=0;i<row_fsize;i++)_printf_(" " << row_fglobaldoflist[i]); _printf_(" \n");
+ 
+ 	_printf_("   row_ssize: " << row_ssize << "\n");
+ 	_printf_("   row_slocaldoflist  (" << row_slocaldoflist << "): ");
+-	if(row_slocaldoflist) for(i=0;i<row_ssize;i++) _printf_(" " << row_slocaldoflist[i] << "\n"); _printf_(" \n");
++	if(row_slocaldoflist) for(i=0;i<row_ssize;i++) _printf_(" " << row_slocaldoflist[i] ); _printf_(" \n");
+ 	_printf_("   row_sglobaldoflist  (" << row_sglobaldoflist << "): ");
+-	if(row_sglobaldoflist) for(i=0;i<row_ssize;i++) _printf_(" " << row_sglobaldoflist[i] << "\n"); _printf_(" \n");
++	if(row_sglobaldoflist) for(i=0;i<row_ssize;i++)_printf_(" " << row_sglobaldoflist[i]); _printf_(" \n");
+ 
+ 	if(!dofsymmetrical){
+ 		_printf_("   col_fsize: " << col_fsize << "\n");
+ 		_printf_("   col_flocaldoflist  (" << col_flocaldoflist << "): ");
+-		if(col_flocaldoflist) for(i=0;i<col_fsize;i++) _printf_(" " << col_flocaldoflist[i] << "\n"); _printf_(" \n");
++		if(col_flocaldoflist) for(i=0;i<col_fsize;i++) _printf_(" " << col_flocaldoflist[i] ); _printf_(" \n");
+ 		_printf_("   col_fglobaldoflist  (" << col_fglobaldoflist << "): ");
+-		if(col_fglobaldoflist) for(i=0;i<col_fsize;i++) _printf_(" " << col_fglobaldoflist[i] << "\n"); _printf_(" \n");
++		if(col_fglobaldoflist) for(i=0;i<col_fsize;i++)_printf_(" " << col_fglobaldoflist[i]); _printf_(" \n");
+ 
+ 		_printf_("   col_ssize: " << col_ssize << "\n");
+ 		_printf_("   col_slocaldoflist  (" << col_slocaldoflist << "): ");
+-		if(col_slocaldoflist) for(i=0;i<col_ssize;i++) _printf_(" " << col_slocaldoflist[i] << "\n"); _printf_(" \n");
++		if(col_slocaldoflist) for(i=0;i<col_ssize;i++) _printf_(" " << col_slocaldoflist[i] ); _printf_(" \n");
+ 		_printf_("   col_sglobaldoflist  (" << col_sglobaldoflist << "): ");
+-		if(col_sglobaldoflist) for(i=0;i<col_ssize;i++) _printf_(" " << col_sglobaldoflist[i] << "\n"); _printf_(" \n");
++		if(col_sglobaldoflist) for(i=0;i<col_ssize;i++)_printf_(" " << col_sglobaldoflist[i]); _printf_(" \n");
+ 	}
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15742-15743.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15742-15743.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15742-15743.diff	(revision 16134)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-dev.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-dev.sh	(revision 15742)
++++ ../trunk-jpl/externalpackages/adolc/install-dev.sh	(revision 15743)
+@@ -4,7 +4,7 @@
+ #Some cleanup
+ rm -rf install adolc*issm
+ 
+-git clone -b 2.3.x_ISSM  git://git.mcs.anl.gov/adol-c.git adolc_issm
++git clone -b ampi git://git.mcs.anl.gov/adol-c.git adolc_issm
+ #git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
+ 
+ #Compile ADOL-C
+Index: ../trunk-jpl/externalpackages/adolc/install-update-dev.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-update-dev.sh	(revision 15742)
++++ ../trunk-jpl/externalpackages/adolc/install-update-dev.sh	(revision 15743)
+@@ -13,7 +13,8 @@
+ 
+ #update and compile
+ cd adolc_issm
+-git pull
++git pull origin
++git checkout ampi
+ #git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
+ 
+ autoreconf -f -i 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15743-15744.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15743-15744.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15743-15744.diff	(revision 16134)
@@ -0,0 +1,261 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15743)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15744)
+@@ -99,7 +99,9 @@
+ 			}
+ 			for(int i=0;i<iomodel->numberofelements;i++){
+ 				if(iomodel->my_elements[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,DiagnosticHorizAnalysisEnum,FSvelocityEnum));
++					Node* node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,DiagnosticHorizAnalysisEnum,FSvelocityEnum);
++					node->Deactivate();
++					nodes->AddObject(node);
+ 				}
+ 			}
+ 			/*P1 pressure*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15743)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15744)
+@@ -400,19 +400,26 @@
+ 	ElementMatrix* Ke=CreateKMatrix();
+ 
+ 	if(Ke){
+-		/*Condense if requested*/
+-		if(this->element_type==MINIcondensedEnum){
+-			int indices[3]={18,19,20};
+-			Ke->StaticCondensation(3,&indices[0]);
++		int approximation;
++		inputs->GetInputValue(&approximation,ApproximationEnum);
++		if(approximation==HOFSApproximationEnum){
++			//Do nothing condensatino already done for Stokes part
+ 		}
+-		else if(this->element_type==P1bubblecondensedEnum){
+-			int size   = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+-			int offset = 0;
+-			for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+-			int* indices=xNew<int>(size);
+-			for(int i=0;i<size;i++) indices[i] = offset+i;
+-			Ke->StaticCondensation(size,indices);
+-			xDelete<int>(indices);
++		else{
++			/*Condense if requested*/
++			if(this->element_type==MINIcondensedEnum){
++				int indices[3]={18,19,20};
++				Ke->StaticCondensation(3,&indices[0]);
++			}
++			else if(this->element_type==P1bubblecondensedEnum){
++				int size   = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
++				int offset = 0;
++				for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
++				int* indices=xNew<int>(size);
++				for(int i=0;i<size;i++) indices[i] = offset+i;
++				Ke->StaticCondensation(size,indices);
++				xDelete<int>(indices);
++			}
+ 		}
+ 
+ 		/*Add to global matrix*/
+@@ -564,14 +571,22 @@
+ 	if(pe){
+ 		/*StaticCondensation if requested*/
+ 		if(this->element_type==MINIcondensedEnum){
+-			int indices[3]={18,19,20};
++			int approximation;
++			inputs->GetInputValue(&approximation,ApproximationEnum);
++			if(approximation==HOFSApproximationEnum){
++				//Do nothing, condensation already done in PVectorCoupling
++			}
++			else{
++				int indices[3]={18,19,20};
+ 
+-			this->element_type=MINIEnum;
+-			ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
+-			this->element_type=MINIcondensedEnum;
++				this->element_type=MINIEnum;
++				ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
++				this->element_type=MINIcondensedEnum;
+ 
+-			pe->StaticCondensation(Ke,3,&indices[0]);
+-			delete Ke;
++				pe->StaticCondensation(Ke,3,&indices[0]);
++				delete Ke;
++			}
++
+ 		}
+ 		else if(this->element_type==P1bubblecondensedEnum){
+ 			int size   = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+@@ -6623,7 +6638,7 @@
+ 	int vnumnodes = this->NumberofNodesVelocity();
+ 	int pnumnodes = this->NumberofNodesPressure();
+ 
+-	De=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum);
++	De=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
+ 
+ 	for(int i=0;i<vnumnodes;i++){
+ 		De->values[i*3+0]=VelocityEnum;
+@@ -7067,58 +7082,51 @@
+ ElementMatrix* Penta::CreateKMatrixCouplingHOFS(void){
+ 
+ 	/*Constants*/
+-	const int numnodes  = 2 *NUMVERTICES;
+-	const int numdofp     = NDOF2 *NUMVERTICES;
+-	const int numdofs     = NDOF4 *NUMVERTICES;
+-	const int numdoftotal = (NDOF2+NDOF4) *NUMVERTICES;
++	const int numnodes       = 2 *NUMVERTICES;
++	const int numdofp        = NDOF2 *NUMVERTICES;
++	const int numdofs        = NDOF4 * 6 + NDOF3;
++	const int numdoftotal    = (NDOF2+NDOF4) *NUMVERTICES + NDOF3;
+ 
+ 	/*Intermediaries*/
+-	Node     *node_list[numnodes];
+-	int       cs_list[numnodes];
+-	int       i,j;
+-	int       init;
++	int       i,j,init;
+ 
+-	/*Prepare node list*/
+-	for(i=0;i<NUMVERTICES;i++){
+-		node_list[i+0*NUMVERTICES] = this->nodes[i];
+-		node_list[i+1*NUMVERTICES] = this->nodes[i];
+-		cs_list[i+0*NUMVERTICES] = XYEnum;
+-		cs_list[i+1*NUMVERTICES] = XYZEnum;
+-	}
+-
+ 	/*Some parameters needed*/
+ 	init=this->element_type;
+ 
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes,2*NUMVERTICES+1,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1;
+ 	delete Ke2;
+ 	
++	/*Compute HO Matrix with P1 element type\n");*/
+ 	this->element_type=P1Enum;
+-	Ke1=CreateKMatrixDiagnosticHO(); 
++	Ke1=CreateKMatrixDiagnosticHO();
+ 	this->element_type=init;
++	/*Compute FS Matrix and condense it \n");*/
+ 	Ke2=CreateKMatrixDiagnosticFS(); 
++	int indices[3]={18,19,20};
++	Ke2->StaticCondensation(3,&indices[0]);
+ 
+ 	for(i=0;i<numdofs;i++) for(j=0;j<NUMVERTICES;j++){
+-		Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+0]+=Ke2->values[i*numdofs+NDOF4*j+0];
+-		Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+1]+=Ke2->values[i*numdofs+NDOF4*j+1];
++		Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+0]+=Ke2->values[i*numdofs+NDOF3*j+0];
++		Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+1]+=Ke2->values[i*numdofs+NDOF3*j+1];
+ 	}
+ 	for(i=0;i<numdofp;i++) for(j=0;j<NUMVERTICES;j++){
+-		Ke->values[i*numdoftotal+numdofp+NDOF4*j+0]+=Ke1->values[i*numdofp+NDOF2*j+0];
+-		Ke->values[i*numdoftotal+numdofp+NDOF4*j+1]+=Ke1->values[i*numdofp+NDOF2*j+1];
++		Ke->values[i*numdoftotal+numdofp+NDOF3*j+0]+=Ke1->values[i*numdofp+NDOF2*j+0];
++		Ke->values[i*numdoftotal+numdofp+NDOF3*j+1]+=Ke1->values[i*numdofp+NDOF2*j+1];
+ 	}
+ 
+-	/*Transform Coordinate System*/
+-	TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
++	/*Transform Coordinate System*/ //Do not transform, already sone in the matrices
++	//TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
+ 
+ 	/*clean-up and return*/
+ 	delete Ke1;
+ 	delete Ke2;
+ 	return Ke;
+ }
+-/*}}}*/
++//*}}}*/
+ /*FUNCTION Penta::CreateKMatrixDiagnosticHoriz {{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticHoriz(void){
+ 
+@@ -7656,11 +7664,11 @@
+ ElementMatrix* Penta::CreateKMatrixDiagnosticHOFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
++	ElementMatrix* Ke1=CreateKMatrixDiagnosticFS();
+ 	int init = this->element_type;
+-	this->element_type=P1Enum;
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticHO();
++	this->element_type=P1Enum; //P1 needed for HO 
++	ElementMatrix* Ke2=CreateKMatrixDiagnosticHO();
+ 	this->element_type=init;
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();
+ 	ElementMatrix* Ke3=CreateKMatrixCouplingHOFS();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+ 
+@@ -8229,14 +8237,23 @@
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=HOFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
+ 
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementVector* pe=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+-	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
++	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum);       _assert_(vz_input);
+ 	Input* vzHO_input=inputs->GetInput(VzHOEnum);   _assert_(vzHO_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+@@ -8255,17 +8272,18 @@
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		for(i=0;i<NUMVERTICES;i++){
+-			pe->values[i*NDOF4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];
+-			pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
+-			pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
+-			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];
++			pe->values[i*NDOF3+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];
++			pe->values[i*NDOF3+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
++			pe->values[i*NDOF3+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
++			pe->values[NDOF3*vnumnodes+i]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];
+ 		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZEnum);
++	TransformLoadVectorCoord(pe,nodes,vnumnodes+pnumnodes,cs_list);
+ 
+ 	/*Clean up and return*/
++	xDelete<int>(cs_list);
+ 	delete gauss;
+ 	return pe;
+ }
+@@ -8406,10 +8424,19 @@
+ ElementVector* Penta::CreatePVectorDiagnosticHOFS(void){
+ 
+ 	/*compute all load vectors for this element*/
++	int init = this->element_type;
++	this->element_type=P1Enum;
+ 	ElementVector* pe1=CreatePVectorDiagnosticHO();
++	this->element_type=init;
+ 	ElementVector* pe2=CreatePVectorDiagnosticFS();
++	int indices[3]={18,19,20};
++	this->element_type=MINIcondensedEnum;
++	ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
++	this->element_type=init;
++	pe2->StaticCondensation(Ke,3,&indices[0]);
++	delete Ke;
+ 	ElementVector* pe3=CreatePVectorCouplingHOFS();
+-	ElementVector* pe =new ElementVector(pe1,pe2,pe3);
++	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+ 	delete pe1;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15744-15745.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15744-15745.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15744-15745.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15744)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15745)
+@@ -7898,6 +7898,9 @@
+ 	Friction   *friction = NULL;
+ 	GaussPenta *gauss    = NULL;
+ 
++	/*Initialize Element matrix and return if necessary*/
++	if(IsFloating() || !IsOnBed()) return NULL;
++
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15745-15746.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15745-15746.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15745-15746.diff	(revision 16134)
@@ -0,0 +1,133 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15745)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15746)
+@@ -400,25 +400,29 @@
+ 	ElementMatrix* Ke=CreateKMatrix();
+ 
+ 	if(Ke){
+-		int approximation;
+-		inputs->GetInputValue(&approximation,ApproximationEnum);
+-		if(approximation==HOFSApproximationEnum){
+-			//Do nothing condensatino already done for Stokes part
+-		}
+-		else{
+-			/*Condense if requested*/
+-			if(this->element_type==MINIcondensedEnum){
+-				int indices[3]={18,19,20};
+-				Ke->StaticCondensation(3,&indices[0]);
++		int analysis_type;
++		parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++		if(analysis_type==DiagnosticHorizAnalysisEnum){
++			int approximation;
++			inputs->GetInputValue(&approximation,ApproximationEnum);
++			if(approximation==HOFSApproximationEnum){
++				//Do nothing condensatino already done for Stokes part
+ 			}
+-			else if(this->element_type==P1bubblecondensedEnum){
+-				int size   = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+-				int offset = 0;
+-				for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+-				int* indices=xNew<int>(size);
+-				for(int i=0;i<size;i++) indices[i] = offset+i;
+-				Ke->StaticCondensation(size,indices);
+-				xDelete<int>(indices);
++			else{
++				/*Condense if requested*/
++				if(this->element_type==MINIcondensedEnum){
++					int indices[3]={18,19,20};
++					Ke->StaticCondensation(3,&indices[0]);
++				}
++				else if(this->element_type==P1bubblecondensedEnum){
++					int size   = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
++					int offset = 0;
++					for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
++					int* indices=xNew<int>(size);
++					for(int i=0;i<size;i++) indices[i] = offset+i;
++					Ke->StaticCondensation(size,indices);
++					xDelete<int>(indices);
++				}
+ 			}
+ 		}
+ 
+@@ -569,40 +573,43 @@
+ 	ElementVector* pe = CreatePVector();
+ 
+ 	if(pe){
+-		/*StaticCondensation if requested*/
+-		if(this->element_type==MINIcondensedEnum){
+-			int approximation;
+-			inputs->GetInputValue(&approximation,ApproximationEnum);
+-			if(approximation==HOFSApproximationEnum){
+-				//Do nothing, condensation already done in PVectorCoupling
++		int analysis_type;
++		parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++		if(analysis_type==DiagnosticHorizAnalysisEnum){
++			/*StaticCondensation if requested*/
++			if(this->element_type==MINIcondensedEnum){
++				int approximation;
++				inputs->GetInputValue(&approximation,ApproximationEnum);
++				if(approximation==HOFSApproximationEnum){
++					//Do nothing, condensation already done in PVectorCoupling
++				}
++				else{
++					int indices[3]={18,19,20};
++
++					this->element_type=MINIEnum;
++					ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
++					this->element_type=MINIcondensedEnum;
++
++					pe->StaticCondensation(Ke,3,&indices[0]);
++					delete Ke;
++				}
+ 			}
+-			else{
+-				int indices[3]={18,19,20};
++			else if(this->element_type==P1bubblecondensedEnum){
++				int size   = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
++				int offset = 0;
++				for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
++				int* indices=xNew<int>(size);
++				for(int i=0;i<size;i++) indices[i] = offset+i;
+ 
+-				this->element_type=MINIEnum;
+-				ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
+-				this->element_type=MINIcondensedEnum;
+-
+-				pe->StaticCondensation(Ke,3,&indices[0]);
++				this->element_type=P1bubbleEnum;
++				ElementMatrix* Ke = CreateKMatrix();
++				this->element_type=P1bubblecondensedEnum;
++				pe->StaticCondensation(Ke,size,indices);
++				xDelete<int>(indices);
+ 				delete Ke;
+ 			}
+-
+ 		}
+-		else if(this->element_type==P1bubblecondensedEnum){
+-			int size   = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+-			int offset = 0;
+-			for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+-			int* indices=xNew<int>(size);
+-			for(int i=0;i<size;i++) indices[i] = offset+i;
+ 
+-			this->element_type=P1bubbleEnum;
+-			ElementMatrix* Ke = CreateKMatrix();
+-			this->element_type=P1bubblecondensedEnum;
+-			pe->StaticCondensation(Ke,size,indices);
+-			xDelete<int>(indices);
+-			delete Ke;
+-		}
+-
+ 		/*Add to global Vector*/
+ 		pe->AddToGlobal(pf);
+ 		delete pe;
+@@ -8439,7 +8446,7 @@
+ 	pe2->StaticCondensation(Ke,3,&indices[0]);
+ 	delete Ke;
+ 	ElementVector* pe3=CreatePVectorCouplingHOFS();
+-	ElementVector* pe =new ElementVector(pe1,pe2);
++	ElementVector* pe =new ElementVector(pe1,pe2,pe3);
+ 
+ 	/*clean-up and return*/
+ 	delete pe1;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15746-15747.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15746-15747.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15746-15747.diff	(revision 16134)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15746)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15747)
+@@ -82,8 +82,9 @@
+ 	else{
+ 		/*Coupling: we are going to create P1 Elements only*/
+ 
+-		/*First create nodes*/
+-		Nodes* nodes=*pnodes;
++		/*Recover nodes*/
++		Nodes* nodes = *pnodes;
++		Node*  node  = NULL;
+ 		if(!nodes) nodes = new Nodes();
+ 
+ 		iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+@@ -99,7 +100,7 @@
+ 			}
+ 			for(int i=0;i<iomodel->numberofelements;i++){
+ 				if(iomodel->my_elements[i]){
+-					Node* node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,DiagnosticHorizAnalysisEnum,FSvelocityEnum);
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,DiagnosticHorizAnalysisEnum,FSvelocityEnum);
+ 					node->Deactivate();
+ 					nodes->AddObject(node);
+ 				}
+@@ -107,7 +108,12 @@
+ 			/*P1 pressure*/
+ 			for(int i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,DiagnosticHorizAnalysisEnum,FSpressureEnum));
++					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,DiagnosticHorizAnalysisEnum,FSpressureEnum);
++					if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
++						node->Deactivate();
++					}
++					nodes->AddObject(node);
+ 				}
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15746)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15747)
+@@ -5841,7 +5841,7 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0],gauss);
+-		GetNodalFunctionsP1(basis, gauss);
++		GetNodalFunctionsP1(basis,gauss);
+ 
+ 		/*Build alpha_complement_list: */
+ 		friction->GetAlphaComplement(&alpha_complement, gauss,VxEnum,VyEnum,VzEnum);
+@@ -5855,7 +5855,7 @@
+ 
+ 		/*Build gradje_g_gaussian vector (actually -dJ/ddrag): */
+ 		for (i=0;i<NUMVERTICES;i++){
+-			grade_g_gaussian[i]=-2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss->weight*basis[i]; /*basis are 0 for the 3 upper nodes*/
++			grade_g_gaussian[i]=-2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss->weight*basis[i];
+ 		}
+ 
+ 		/*Add gradje_g_gaussian vector to gradje_g: */
Index: /issm/oecreview/Archive/15392-16133/ISSM-15747-15748.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15747-15748.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15747-15748.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/plot/plot_icefront.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 15747)
++++ ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 15748)
+@@ -17,9 +17,9 @@
+ elementice=sum(ice(md.mesh.elements),2);
+ elementnoice=sum(noice(md.mesh.elements),2);
+ elementzeroice=sum(zeroice(md.mesh.elements),2);
+-icefront=(elementice & elementnoice) & ~(elementice==2 & elementzeroice);
+ 
+ if (md.mesh.dimension==2),
++	icefront=(elementice & elementnoice) & ~(elementice==2 & elementzeroice);
+ 
+ 	%plot mesh
+ 	A=elements(:,1); B=elements(:,2); C=elements(:,3); 
+@@ -35,6 +35,7 @@
+ 	%Plot zero icelevelset line
+ 
+ else
++	icefront=(elementice & elementnoice) & ~(elementice==4 & elementzeroice);
+ 
+ 	%plot mesh
+ 	A=elements(:,1); B=elements(:,2); C=elements(:,3); D=elements(:,4); E=elements(:,5); F=elements(:,6);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15748-15749.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15748-15749.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15748-15749.diff	(revision 16134)
@@ -0,0 +1,1708 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15748)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15749)
+@@ -143,10 +143,8 @@
+ 	InversionVzObsEnum,
+ 	MaskElementonfloatingiceEnum,
+ 	MaskElementongroundediceEnum,
+-	MaskElementonwaterEnum,
+ 	MaskVertexonfloatingiceEnum,
+ 	MaskVertexongroundediceEnum,
+-	MaskVertexonwaterEnum,
+ 	MaskIcelevelsetEnum,
+ 	MaterialsBetaEnum,
+ 	MaterialsHeatcapacityEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15749)
+@@ -151,10 +151,8 @@
+ 		case InversionVzObsEnum : return "InversionVzObs";
+ 		case MaskElementonfloatingiceEnum : return "MaskElementonfloatingice";
+ 		case MaskElementongroundediceEnum : return "MaskElementongroundedice";
+-		case MaskElementonwaterEnum : return "MaskElementonwater";
+ 		case MaskVertexonfloatingiceEnum : return "MaskVertexonfloatingice";
+ 		case MaskVertexongroundediceEnum : return "MaskVertexongroundedice";
+-		case MaskVertexonwaterEnum : return "MaskVertexonwater";
+ 		case MaskIcelevelsetEnum : return "MaskIcelevelset";
+ 		case MaterialsBetaEnum : return "MaterialsBeta";
+ 		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15749)
+@@ -154,10 +154,8 @@
+ 	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+ 	      else if (strcmp(name,"MaskElementonfloatingice")==0) return MaskElementonfloatingiceEnum;
+ 	      else if (strcmp(name,"MaskElementongroundedice")==0) return MaskElementongroundediceEnum;
+-	      else if (strcmp(name,"MaskElementonwater")==0) return MaskElementonwaterEnum;
+ 	      else if (strcmp(name,"MaskVertexonfloatingice")==0) return MaskVertexonfloatingiceEnum;
+ 	      else if (strcmp(name,"MaskVertexongroundedice")==0) return MaskVertexongroundediceEnum;
+-	      else if (strcmp(name,"MaskVertexonwater")==0) return MaskVertexonwaterEnum;
+ 	      else if (strcmp(name,"MaskIcelevelset")==0) return MaskIcelevelsetEnum;
+ 	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
+ 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
+@@ -259,12 +257,12 @@
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
++	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
++	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+-	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+@@ -382,12 +380,12 @@
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
++	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+-	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+-	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
++	      if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+@@ -505,12 +503,12 @@
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
++	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
++	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+-	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+-	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15749)
+@@ -24,8 +24,8 @@
+ 	Nodes* nodes=*pnodes;
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++	iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+@@ -43,8 +43,8 @@
+ 		}
+ 	}
+ 
+-	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++	iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15749)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15749)
+@@ -35,7 +35,6 @@
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15749)
+@@ -13,7 +13,7 @@
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+ 	if(iomodel->dim==2) return;
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,DiagnosticVertAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15749)
+@@ -30,7 +30,6 @@
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15749)
+@@ -18,12 +18,12 @@
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,PrognosticAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+ 		CreateNodes(pnodes,iomodel,PrognosticAnalysisEnum,P1DGEnum);
+ 	}
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15749)
+@@ -44,7 +44,6 @@
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,BathymetryEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15749)
+@@ -17,7 +17,7 @@
+ 	/*Now, do we really want Shreve?*/
+ 	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15749)
+@@ -31,10 +31,8 @@
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15749)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,BedSlopeAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15749)
+@@ -22,7 +22,6 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15749)
+@@ -89,7 +89,6 @@
+ 	}
+ 	else{
+ 		if(isFS){
+-			_error_("COupling under development");
+ 			for(int i=0;i<iomodel->numberofelements;i++){
+ 				approximation=reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[i]);
+ 				if(approximation==FSApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+@@ -127,7 +126,6 @@
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15749)
+@@ -73,11 +73,11 @@
+ 				default: _error_("finite element "<<temp<<" not supported");
+ 			}
+ 		}
+-		iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 		CreateNodes(pnodes,iomodel,DiagnosticHorizAnalysisEnum,finiteelement,approximation);
+-		iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++		iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 	}
+ 	else{
+ 		/*Coupling: we are going to create P1 Elements only*/
+@@ -87,8 +87,8 @@
+ 		Node*  node  = NULL;
+ 		if(!nodes) nodes = new Nodes();
+ 
+-		iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 		if(isFS){
+ 			/*P1+ velocity*/
+ 			for(int i=0;i<iomodel->numberofvertices;i++){
+@@ -124,8 +124,8 @@
+ 				}
+ 			}
+ 		}
+-		iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
++		iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+ 
+ 		/*Assign output pointer: */
+ 		*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15749)
+@@ -18,12 +18,12 @@
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+ 		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
+ 	}
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15749)
+@@ -35,7 +35,6 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15749)
+@@ -20,7 +20,7 @@
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	if(!isefficientlayer) return;
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyDCEfficientAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15749)
+@@ -37,7 +37,6 @@
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,EplHeadEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15749)
+@@ -17,7 +17,7 @@
+ 	/*Now, do we really want DC?*/
+ 	if(hydrology_model!=HydrologydcEnum) return;
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15749)
+@@ -38,7 +38,6 @@
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,SedimentHeadEnum);
+ 	if(isefficientlayer)iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15749)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,SurfaceSlopeAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15749)
+@@ -22,8 +22,6 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+-
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15749)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15749)
+@@ -32,7 +32,6 @@
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15749)
+@@ -33,7 +33,6 @@
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+ 	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15749)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 15749)
+@@ -9,8 +9,5 @@
+ #include "../ModelProcessorx.h"
+ 
+ void	CreateNodesGia(Nodes** pnodes, IoModel* iomodel){
+-
+-	iomodel->FetchData(1,MaskVertexonwaterEnum);
+ 	CreateNodes(pnodes,iomodel,GiaAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(1,MaskVertexonwaterEnum);
+ }
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15749)
+@@ -456,7 +456,7 @@
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	Tria*  tria=(Tria*)element;
+-	if(tria->IsOnWater()) return NULL;
++	if(tria->NoIceInElement()) return NULL;
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMNODES_INTERNAL,this->parameters);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -520,7 +520,7 @@
+ 	/*Initialize Element matrix and return if necessary*/
+ 	ElementMatrix* Ke = NULL;
+ 	Tria*  tria=(Tria*)element;
+-	if(tria->IsOnWater()) return NULL;
++	if(tria->NoIceInElement()) return NULL;
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -609,7 +609,7 @@
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	Tria*  tria=(Tria*)element;
+-	if(tria->IsOnWater()) return NULL;
++	if(tria->NoIceInElement()) return NULL;
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMNODES_INTERNAL,this->parameters);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -672,7 +672,7 @@
+ 	/*Initialize Element matrix and return if necessary*/
+ 	ElementMatrix* Ke = NULL;
+ 	Tria*  tria=(Tria*)element;
+-	if(tria->IsOnWater()) return NULL;
++	if(tria->NoIceInElement()) return NULL;
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -798,7 +798,7 @@
+ 	/*Initialize Load Vector and return if necessary*/
+ 	ElementVector* pe = NULL;
+ 	Tria*  tria=(Tria*)element;
+-	if(tria->IsOnWater()) return NULL;
++	if(tria->NoIceInElement()) return NULL;
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -892,7 +892,7 @@
+ 	/*Initialize Load Vector and return if necessary*/
+ 	ElementVector* pe = NULL;
+ 	Tria*  tria=(Tria*)element;
+-	if(tria->IsOnWater()) return NULL;
++	if(tria->NoIceInElement()) return NULL;
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15749)
+@@ -175,7 +175,7 @@
+ void  Tria::CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs){
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return;
++	if(NoIceInElement()) return;
+ 
+ 	/*Create element stiffness matrix*/
+ 	ElementMatrix* Ke=CreateKMatrix();
+@@ -210,7 +210,7 @@
+ 	/*}}}*/
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return NULL;
++	if(NoIceInElement()) return NULL;
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+@@ -309,7 +309,7 @@
+ void  Tria::CreatePVector(Vector<IssmDouble>* pf){
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return;
++	if(NoIceInElement()) return;
+ 
+ 	/*Create element load vector*/
+ 	ElementVector* pe = CreatePVector();
+@@ -352,7 +352,7 @@
+ 	/*}}}*/
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return NULL;
++	if(NoIceInElement()) return NULL;
+ 
+ 	/*Just branch to the correct load generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+@@ -467,7 +467,7 @@
+ 	/*}}}*/
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return;
++	if(NoIceInElement()) return;
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+@@ -1988,12 +1988,18 @@
+ 	return shelf;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::IsOnWater {{{*/
+-bool   Tria::IsOnWater(){
++/*FUNCTION Tria::NoIceInElement {{{*/
++bool   Tria::NoIceInElement(){
+ 
+-	bool water;
+-	inputs->GetInputValue(&water,MaskElementonwaterEnum);
+-	return water;
++	/*Get levelset*/
++	IssmDouble ls[NUMVERTICES];
++	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
++
++	/*If the level set is >0, ice is present in this element*/
++	if(ls[0]>0. || ls[1]>0. || ls[2]>0.) return false;
++
++	/*If the level set is awlays <=0, there is no ice here*/
++	return true;
+ }
+ /*}}}*/
+ /*FUNCTION Tria::ListResultsInfo{{{*/
+@@ -2286,7 +2292,7 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+@@ -2500,7 +2506,7 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return;
++	if(NoIceInElement()) return;
+ 
+ }
+ /*}}}*/
+@@ -2552,7 +2558,7 @@
+ 	IssmDouble base,surface,bed;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+@@ -2788,7 +2794,7 @@
+ 	/*Get material parameters :*/
+ 	rho_ice=matpar->GetRhoIce();
+ 
+-   if(IsOnWater())return 0;
++   if(NoIceInElement())return 0;
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+@@ -3638,7 +3644,7 @@
+ 	GaussTria *gauss = NULL;
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater()) return 0;
++	if(NoIceInElement()) return 0;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -3780,7 +3786,7 @@
+ 	/*dJ/dalpha = ∂L/∂alpha = ∂J/∂alpha + ∂/∂alpha(KU-F)*/
+ 
+ 	/*If on water, grad = 0: */
+-	if(IsOnWater()) return;
++	if(NoIceInElement()) return;
+ 
+ 	/*First deal with ∂/∂alpha(KU-F)*/
+ 	switch(control_type){
+@@ -4407,7 +4413,7 @@
+ 	/*retrieve parameters and inputs*/
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater()) return 0;
++	if(NoIceInElement()) return 0;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4446,7 +4452,7 @@
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4505,7 +4511,7 @@
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4565,7 +4571,7 @@
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4623,7 +4629,7 @@
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4682,7 +4688,7 @@
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4744,7 +4750,7 @@
+ 	/*retrieve parameters and inputs*/
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater()) return 0;
++	if(NoIceInElement()) return 0;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4788,7 +4794,7 @@
+ 	/*retrieve parameters and inputs*/
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater()) return 0;
++	if(NoIceInElement()) return 0;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4839,7 +4845,7 @@
+ 	/*retrieve parameters and inputs*/
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater()) return 0;
++	if(NoIceInElement()) return 0;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -4887,7 +4893,7 @@
+ 	IssmDouble dH[2];
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -5206,7 +5212,7 @@
+ 	/*retrieve parameters and inputs*/
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater()) return 0;
++	if(NoIceInElement()) return 0;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -5573,7 +5579,7 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Skip if water or ice shelf element*/
+-	if(IsOnWater() | IsFloating()) return NULL;
++	if(NoIceInElement() | IsFloating()) return NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -5798,7 +5804,7 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Skip if water or ice shelf element*/
+-	if(IsOnWater() | IsFloating()) return NULL;
++	if(NoIceInElement() | IsFloating()) return NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15748)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15749)
+@@ -70,67 +70,67 @@
+ 		void  InputUpdateFromIoModel(int index, IoModel* iomodel);
+ 		/*}}}*/
+ 		/*Element virtual functions definitions: {{{*/
+-		void   ComputeBasalStress(Vector<IssmDouble>* sigma_b);
+-		void   ComputeStrainRate(Vector<IssmDouble>* eps);
+-		void   ComputeStressTensor();
+-		void   Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
+-		void   SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
+-		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+-		void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+-		void   CreateDVector(Vector<IssmDouble>* df);
+-		void   CreatePVector(Vector<IssmDouble>* pf);
+-		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+-		void   Delta18oParameterization(void);
+-		int    GetNodeIndex(Node* node);
+-		void   GetNodesSidList(int* sidlist);
+-		int    GetNumberOfNodes(void);
+-		int    Sid();
+-		bool   IsOnBed();
+-		bool   IsFloating();
+-		bool   IsNodeOnShelf(); 
+-		bool   IsNodeOnShelfFromFlags(IssmDouble* flags);
+-		bool   IsOnWater();
+-		void   GetSolutionFromInputs(Vector<IssmDouble>* solution);
+-		void   GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
+-		void   GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp);
+-		void   InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
+-		void   InputCreate(IssmDouble scalar,int name,int code);
+-		void   InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+-		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+-		void   InputDuplicate(int original_enum,int new_enum);
+-		void   InputScale(int enum_type,IssmDouble scale_factor);
+-		void   InputToResult(int enum_type,int step,IssmDouble time);
+-		void   DeleteResults(void);
+-		void   MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
+-		int    NodalValue(IssmDouble* pvalue, int index, int natureofdataenum);
+-		void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
+-		void   RequestedOutput(int output_enum,int step,IssmDouble time);
+-		void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+-		void   PatchFill(int* pcount, Patch* patch);
+-		void   PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
+-		void   ResetCoordinateSystem(void){_error_("not implemented yet");};
+-		void	 SmbGradients();
+-		IssmDouble SurfaceArea(void);
+-		void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+-		IssmDouble TimeAdapt();
++		void        ComputeBasalStress(Vector<IssmDouble>* sigma_b);
++		void        ComputeStrainRate(Vector<IssmDouble>* eps);
++		void        ComputeStressTensor();
++		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
++		void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
++		void        SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
++		void        CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
++		void        CreateDVector(Vector<IssmDouble>* df);
++		void        CreatePVector(Vector<IssmDouble>* pf);
++		void        CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
++		void        Delta18oParameterization(void);
++		int         GetNodeIndex(Node* node);
++		void        GetNodesSidList(int* sidlist);
++		int         GetNumberOfNodes(void);
++		int         Sid();
++		bool        IsOnBed();
++		bool        IsFloating();
++		bool        IsNodeOnShelf(); 
++		bool        IsNodeOnShelfFromFlags(IssmDouble* flags);
++		bool        NoIceInElement();
++		void        GetSolutionFromInputs(Vector<IssmDouble>* solution);
++		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
++		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp);
++		void        InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
++		void        InputCreate(IssmDouble scalar,int name,int code);
++		void        InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
++		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
++		void        InputDuplicate(int original_enum,int new_enum);
++		void        InputScale(int enum_type,IssmDouble scale_factor);
++		void        InputToResult(int enum_type,int step,IssmDouble time);
++		void        DeleteResults(void);
++		void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
++		int         NodalValue(IssmDouble* pvalue, int index, int natureofdataenum);
++		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
++		void        RequestedOutput(int output_enum,int step,IssmDouble time);
++		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
++		void        PatchFill(int* pcount, Patch* patch);
++		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
++		void        ResetCoordinateSystem(void){_error_("not implemented yet");};
++		void	      SmbGradients();
++		IssmDouble  SurfaceArea(void);
++		void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
++		IssmDouble  TimeAdapt();
+ 
+ 		#ifdef _HAVE_RESPONSES_
+-		void   AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
++		void       AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
+ 		IssmDouble IceVolume(void);
+ 		IssmDouble TotalSmb(void);
+-		void   MinVel(IssmDouble* pminvel);
+-		void   MinVx(IssmDouble* pminvx);
+-		void   MinVy(IssmDouble* pminvy);
+-		void   MinVz(IssmDouble* pminvz);
++		void       MinVel(IssmDouble* pminvel);
++		void       MinVx(IssmDouble* pminvx);
++		void       MinVy(IssmDouble* pminvy);
++		void       MinVz(IssmDouble* pminvz);
+ 		IssmDouble MassFlux(IssmDouble* segment);
+-		void   MaxAbsVx(IssmDouble* pmaxabsvx);
+-		void   MaxAbsVy(IssmDouble* pmaxabsvy);
+-		void   MaxAbsVz(IssmDouble* pmaxabsvz);
+-		void   ElementResponse(IssmDouble* presponse,int response_enum);
+-		void   MaxVel(IssmDouble* pmaxvel);
+-		void   MaxVx(IssmDouble* pmaxvx);
+-		void   MaxVy(IssmDouble* pmaxvy);
+-		void   MaxVz(IssmDouble* pmaxvz);
++		void       MaxAbsVx(IssmDouble* pmaxabsvx);
++		void       MaxAbsVy(IssmDouble* pmaxabsvy);
++		void       MaxAbsVz(IssmDouble* pmaxabsvz);
++		void       ElementResponse(IssmDouble* presponse,int response_enum);
++		void       MaxVel(IssmDouble* pmaxvel);
++		void       MaxVx(IssmDouble* pmaxvx);
++		void       MaxVy(IssmDouble* pmaxvy);
++		void       MaxVz(IssmDouble* pmaxvz);
+ 		#endif
+ 
+ 		#ifdef _HAVE_GIA_
+@@ -139,24 +139,24 @@
+ 
+ 		#ifdef _HAVE_CONTROL_
+ 		IssmDouble DragCoefficientAbsGradient(int weight_index);
+-		void   GradientIndexing(int* indexing,int control_index);
+-		void   Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
+-		void   GradjBGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+-		void   GradjZGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+-		void   GradjBSSA(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjZSSA(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjDragSSA(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjDragGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+-		void   GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjVxBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjVyBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+-		void   GradjThicknessBalancethicknessSoft(Vector<IssmDouble>* gradient,int control_index);
+-		void   GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data);
+-		void   SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index);
+-		void   ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
+-		void   ControlInputScaleGradient(int enum_type,IssmDouble scale);
+-		void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
++		void       GradientIndexing(int* indexing,int control_index);
++		void       Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
++		void       GradjBGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
++		void       GradjZGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
++		void       GradjBSSA(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjZSSA(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjDragSSA(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjDragGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
++		void       GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjVxBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjVyBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjThicknessBalancethicknessSoft(Vector<IssmDouble>* gradient,int control_index);
++		void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data);
++		void       SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index);
++		void       ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
++		void       ControlInputScaleGradient(int enum_type,IssmDouble scale);
++		void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
+ 		IssmDouble RheologyBbarAbsGradient(int weight_index);
+ 		IssmDouble ThicknessAbsMisfit(     int weight_index);
+ 		IssmDouble SurfaceAbsVelMisfit(    int weight_index);
+@@ -168,8 +168,9 @@
+ 		IssmDouble SurfaceLogVelMisfit(    int weight_index);
+ 		IssmDouble SurfaceLogVxVyMisfit(   int weight_index);
+ 		IssmDouble SurfaceAverageVelMisfit(int weight_index);
+-		void   InputControlUpdate(IssmDouble scalar,bool save_parameter);
++		void       InputControlUpdate(IssmDouble scalar,bool save_parameter);
+ 		#endif
++
+ 		#ifdef _HAVE_GROUNDINGLINE_
+ 		void   PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		void   MigrateGroundingLine(IssmDouble* oldfloating,IssmDouble* sheet_ungrounding);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15749)
+@@ -394,7 +394,7 @@
+ void  Penta::CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs){
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return;
++	if(NoIceInElement()) return;
+ 
+ 	/*Create element stiffness matrix*/
+ 	ElementMatrix* Ke=CreateKMatrix();
+@@ -445,7 +445,7 @@
+ 	/*}}}*/
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return NULL;
++	if(NoIceInElement()) return NULL;
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+@@ -567,7 +567,7 @@
+ void  Penta::CreatePVector(Vector<IssmDouble>* pf){
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return;
++	if(NoIceInElement()) return;
+ 
+ 	/*Create element load vector*/
+ 	ElementVector* pe = CreatePVector();
+@@ -628,7 +628,7 @@
+ 	/*}}}*/
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return NULL;
++	if(NoIceInElement()) return NULL;
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+@@ -735,7 +735,7 @@
+ 	/*}}}*/
+ 
+ 	/*Skip if water element*/
+-	if(IsOnWater()) return;
++	if(NoIceInElement()) return;
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+@@ -2620,12 +2620,18 @@
+ 	return onsurface;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::IsOnWater {{{*/
+-bool   Penta::IsOnWater(){
++/*FUNCTION Penta::NoIceInElement {{{*/
++bool   Penta::NoIceInElement(){
+ 
+-	bool onwater;
+-	inputs->GetInputValue(&onwater,MaskElementonwaterEnum);
+-	return onwater;
++	/*Get levelset*/
++	IssmDouble ls[NUMVERTICES];
++	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
++
++	/*If the level set is >0, ice is present in this element*/
++	if(ls[0]>0. || ls[1]>0. || ls[2]>0.) return false;
++
++	/*If the level set is awlays <=0, there is no ice here*/
++	return true;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::ListResultsInfo{{{*/
+@@ -3168,7 +3174,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/*Bail out if this element if:
+ 	 * -> Non SSA not on the surface
+@@ -3608,7 +3614,7 @@
+ 	IssmDouble base,height;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+@@ -3800,7 +3806,7 @@
+ 	/*Get material parameters :*/
+ 	rho_ice=matpar->GetRhoIce();
+ 
+-	if(IsOnWater() || !IsOnSurface()) return 0.;
++	if(NoIceInElement() || !IsOnSurface()) return 0.;
+ 
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+@@ -5703,7 +5709,7 @@
+ 	Tria*            tria=NULL;
+ 
+ 	/*If on water, skip grad (=0): */
+-	if(IsOnWater())return;
++	if(NoIceInElement())return;
+ 
+ 	/*First deal with ∂/∂alpha(KU-F)*/
+ 	switch(control_type){
+@@ -6171,7 +6177,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/*Bail out if this element if:
+ 	 * -> Non SSA and not on the surface
+@@ -6208,7 +6214,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/*Bail out if this element if:
+ 	 * -> Non SSA and not on the surface
+@@ -6245,7 +6251,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/*Bail out if this element if:
+ 	 * -> Non SSA and not on the surface
+@@ -6284,7 +6290,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/*Bail out if this element if:
+ 	 * -> Non SSA and not on the surface
+@@ -6321,7 +6327,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 
+ 	/*Bail out if this element if:
+ 	 * -> Non SSA and not on the surface
+@@ -6364,7 +6370,7 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*If on water, return 0: */
+-	if(IsOnWater())return 0;
++	if(NoIceInElement())return 0;
+ 	_error_("Not implemented yet");
+ 
+ 	tria=(Tria*)SpawnTria(0);
+@@ -6380,7 +6386,7 @@
+ 	Tria*  tria=NULL;
+ 
+ 	/*If on water, on shelf or not on bed, skip: */
+-	if(IsOnWater()|| IsFloating() || !IsOnBed()) return 0;
++	if(NoIceInElement()|| IsFloating() || !IsOnBed()) return 0;
+ 
+ 	tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1
+ 	J=tria->DragCoefficientAbsGradient(weight_index);
+@@ -6395,7 +6401,7 @@
+ 	Tria*  tria=NULL;
+ 
+ 	/*If on water, on shelf or not on bed, skip: */
+-	if(IsOnWater() || !IsOnBed()) return 0;
++	if(NoIceInElement() || !IsOnBed()) return 0;
+ 
+ 	tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1
+ 	J=tria->RheologyBbarAbsGradient(weight_index);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15748)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15749)
+@@ -176,7 +176,7 @@
+ 
+ 		/*}}}*/
+ 		/*Penta specific routines:{{{*/
+-		void	  BedNormal(IssmDouble* bed_normal, IssmDouble xyz_list[3][3]);
++		void	         BedNormal(IssmDouble* bed_normal, IssmDouble xyz_list[3][3]);
+ 		ElementMatrix* CreateBasalMassMatrix(void);
+ 		ElementMatrix* CreateKMatrix(void);
+ 		ElementMatrix* CreateKMatrixPrognostic(void);
+@@ -202,30 +202,30 @@
+ 		void           GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+ 		void	         GetSolutionFromInputsEnthalpy(Vector<IssmDouble>* solutiong);
+ 		IssmDouble     GetStabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa);
+-		void    GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);
+-		void    GetStrainRate3d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input, Input* vz_input);
+-		Penta*  GetUpperElement(void);
+-		void    GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[6][3],int levelsetenum);
+-		Penta*  GetLowerElement(void);
+-		Penta*  GetBasalElement(void);
+-		void	  InputExtrude(int enum_type,int object_type);
+-		void    InputUpdateFromSolutionPrognostic(IssmDouble* solutiong);
+-		void    InputUpdateFromSolutionOneDof(IssmDouble* solutiong,int enum_type);
+-		void    InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solutiong,int enum_type);
+-		bool	  IsInput(int name);
+-		bool	  IsOnSurface(void);
+-		bool	  IsOnBed(void);
+-		bool    IsFloating(void); 
+-		bool    IsNodeOnShelf(); 
+-		bool    IsNodeOnShelfFromFlags(IssmDouble* flags);
+-		bool    IsOnWater(void); 
+-		IssmDouble  MinEdgeLength(IssmDouble xyz_list[6][3]);
+-		void	  ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp);
+-		void	  ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);
+-		void	  SetClone(int* minranks);
+-		Tria*	  SpawnTria(int location);
+-		void	  SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+-		void     UpdateConstraints(void);
++		void           GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);
++		void           GetStrainRate3d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input, Input* vz_input);
++		Penta*         GetUpperElement(void);
++		void           GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[6][3],int levelsetenum);
++		Penta*         GetLowerElement(void);
++		Penta*         GetBasalElement(void);
++		void	         InputExtrude(int enum_type,int object_type);
++		void           InputUpdateFromSolutionPrognostic(IssmDouble* solutiong);
++		void           InputUpdateFromSolutionOneDof(IssmDouble* solutiong,int enum_type);
++		void           InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solutiong,int enum_type);
++		bool	         IsInput(int name);
++		bool	         IsOnSurface(void);
++		bool	         IsOnBed(void);
++		bool           IsFloating(void); 
++		bool           IsNodeOnShelf(); 
++		bool           IsNodeOnShelfFromFlags(IssmDouble* flags);
++		bool           NoIceInElement(void); 
++		IssmDouble     MinEdgeLength(IssmDouble xyz_list[6][3]);
++		void	         ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp);
++		void	         ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);
++		void	         SetClone(int* minranks);
++		Tria*	         SpawnTria(int location);
++		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
++		void           UpdateConstraints(void);
+ 
+ 		#ifdef _HAVE_DIAGNOSTIC_
+ 		ElementMatrix* CreateKMatrixCouplingSSAHO(void);
+@@ -302,7 +302,7 @@
+ 		ElementVector* CreatePVectorDiagnosticVert(void);
+ 		ElementVector* CreatePVectorDiagnosticVertVolume(void);
+ 		ElementVector* CreatePVectorDiagnosticVertBase(void);
+-		void GetL1L2Viscosity(IssmDouble*, IssmDouble*, GaussPenta*, Input*, Input*, Input*);
++		void           GetL1L2Viscosity(IssmDouble*, IssmDouble*, GaussPenta*, Input*, Input*, Input*);
+ 		#endif
+ 
+ 		#ifdef _HAVE_CONTROL_
+@@ -313,17 +313,15 @@
+ 		ElementVector* CreatePVectorAdjointSSA(void);
+ 		ElementVector* CreatePVectorAdjointHO(void);
+ 		ElementVector* CreatePVectorAdjointFS(void);
+-		void    InputUpdateFromSolutionAdjointHoriz( IssmDouble* solutiong);
+-		void    InputUpdateFromSolutionAdjointFS( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionAdjointHoriz( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionAdjointFS( IssmDouble* solutiong);
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
+-
+ 		ElementMatrix* CreateKMatrixHydrologyDCInefficient(void);
+ 		ElementMatrix* CreateKMatrixHydrologyDCEfficient(void);
+ 		ElementVector* CreatePVectorHydrologyDCInefficient(void);
+ 		ElementVector* CreatePVectorHydrologyDCEfficient(void);
+-
+ 		void    GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode);
+ 		void    GetHydrologyTransfer(Vector<IssmDouble>* transfer);
+ 		void    GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type);
+@@ -331,6 +329,7 @@
+ 		void    HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask);
+ 		void    InputUpdateFromSolutionHydrologyDCInefficient(IssmDouble* solution);
+ 		#endif
++
+ 		#ifdef _HAVE_THERMAL_
+ 		ElementMatrix* CreateKMatrixEnthalpy(void);
+ 		ElementMatrix* CreateKMatrixEnthalpyVolume(void);
+@@ -348,10 +347,11 @@
+ 		ElementVector* CreatePVectorThermalVolume(void);
+ 		ElementVector* CreatePVectorThermalShelf(void);
+ 		ElementVector* CreatePVectorThermalSheet(void);
+-		void	       GetSolutionFromInputsThermal(Vector<IssmDouble>* solutiong);
++		void	         GetSolutionFromInputsThermal(Vector<IssmDouble>* solutiong);
+ 		void           InputUpdateFromSolutionThermal( IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionEnthalpy( IssmDouble* solutiong);
+ 		#endif
++
+ 		#ifdef _HAVE_BALANCED_
+ 		ElementMatrix* CreateKMatrixBalancethickness(void);
+ 		ElementVector* CreatePVectorBalancethickness(void);
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15749)
+@@ -52,14 +52,7 @@
+ 	 this->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,reCast<bool>(iomodel->Data(MaskVertexonfloatingiceEnum)[io_index])));
+ 	if(iomodel->Data(MaskVertexongroundediceEnum))
+ 	  this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<bool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index])));
+-	/*set single point constraints: */
+ 
+-	/*spc all nodes on water*/
+-	if(!iomodel->Data(MaskVertexonwaterEnum)) _error_("iomodel->nodeonwater is NULL");
+-	if(reCast<bool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){
+-		this->Deactivate();
+-	}
+-
+ 	/*Diagnostic Horiz*/
+ 	#ifdef _HAVE_DIAGNOSTIC_
+ 	if(analysis_type==DiagnosticHorizAnalysisEnum){
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15748)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15749)
+@@ -1043,11 +1043,11 @@
+ /*FUNCTION IoModel::FetchData(int num,...){{{*/
+ void  IoModel::FetchData(int num,...){
+ 
+-	va_list ap;
+-	int     dataenum;
+-	IssmDouble* matrix=NULL;
+-	int     M,N;
+-	int     i;
++	va_list     ap;
++	int         dataenum;
++	IssmDouble *matrix   = NULL;
++	int         M,N;
++	int         i;
+ 
+ 	/*Go through the entire list of enums and fetch the corresponding data. Add it to the iomodel->data dataset. Everything
+ 	 *we fetch is a IssmDouble* : */
+@@ -1056,6 +1056,8 @@
+ 	for(i=0; i<num; i++){
+ 
+ 		dataenum=va_arg(ap, int);
++		_assert_(dataenum<MaximumNumberOfDefinitionsEnum); 
++		_assert_(dataenum>=0);
+ 
+ 		if (this->independents[dataenum]){
+ 			/*this data has already been checked out! Continue: */
+Index: ../trunk-jpl/src/m/mesh/meshconvert.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/meshconvert.m	(revision 15748)
++++ ../trunk-jpl/src/m/mesh/meshconvert.m	(revision 15749)
+@@ -41,7 +41,6 @@
+ md.mesh.numberofedges=size(md.mesh.edges,1);
+ md.mesh.z=zeros(md.mesh.numberofvertices,1);
+ md.mesh.vertexonbed=ones(md.mesh.numberofvertices,1);
+-md.mask.vertexonwater=zeros(md.mesh.numberofvertices,1);
+ md.mesh.vertexonsurface=ones(md.mesh.numberofvertices,1);
+ md.mesh.elementonbed=ones(md.mesh.numberofelements,1);
+ md.mesh.elementonsurface=ones(md.mesh.numberofelements,1);
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 15748)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 15749)
+@@ -331,7 +331,6 @@
+ 	md.mesh.numberofedges=numpy.size(md.mesh.edges,axis=0)
+ 	md.mesh.z=numpy.zeros(md.mesh.numberofvertices)
+ 	md.mesh.vertexonbed=numpy.ones(md.mesh.numberofvertices,bool)
+-	md.mask.vertexonwater=numpy.zeros(md.mesh.numberofvertices,bool)
+ 	md.mesh.vertexonsurface=numpy.ones(md.mesh.numberofvertices,bool)
+ 	md.mesh.elementonbed=numpy.ones(md.mesh.numberofelements,bool)
+ 	md.mesh.elementonsurface=numpy.ones(md.mesh.numberofelements,bool)
+Index: ../trunk-jpl/src/m/mesh/MeshQuality.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/MeshQuality.m	(revision 15748)
++++ ../trunk-jpl/src/m/mesh/MeshQuality.m	(revision 15749)
+@@ -16,12 +16,7 @@
+ hessian=ComputeHessian(index,x,y,md.inversion.vel_obs,'node');
+ 
+ %Compute metric
+-if length(md.nodeonwater)==md.mesh.numberofvertices,
+-	pos=find(md.nodeonwater);
+-else
+-	pos=[];
+-end
+-metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,pos);
++metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,[]);
+ 
+ %Get Areas
+ areas=GetAreas(index,x,y);
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 15748)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 15749)
+@@ -324,7 +324,6 @@
+ md.mesh.numberofedges=size(md.mesh.edges,1);
+ md.mesh.z=zeros(md.mesh.numberofvertices,1);
+ md.mesh.vertexonbed=ones(md.mesh.numberofvertices,1);
+-md.mask.vertexonwater=zeros(md.mesh.numberofvertices,1);
+ md.mesh.vertexonsurface=ones(md.mesh.numberofvertices,1);
+ md.mesh.elementonbed=ones(md.mesh.numberofelements,1);
+ md.mesh.elementonsurface=ones(md.mesh.numberofelements,1);
+Index: ../trunk-jpl/src/m/mesh/ComputeMetric.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/ComputeMetric.py	(revision 15748)
++++ ../trunk-jpl/src/m/mesh/ComputeMetric.py	(revision 15749)
+@@ -9,7 +9,7 @@
+ 	      pos is contains the positions where the metric is wished to be maximized (water?)
+ 
+ 	   Example:
+-	      metric=ComputeMetric(hessian,2/9,10^-1,100,10^5,find(md.nodeonwater)
++	      metric=ComputeMetric(hessian,2/9,10^-1,100,10^5,[])
+ 	"""
+ 
+ 	#first, find the eigen values of each line of H=[hessian(i,1) hessian(i,2); hessian(i,2) hessian(i,3)]
+Index: ../trunk-jpl/src/m/mesh/ComputeMetric.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/ComputeMetric.m	(revision 15748)
++++ ../trunk-jpl/src/m/mesh/ComputeMetric.m	(revision 15749)
+@@ -6,7 +6,7 @@
+ %      pos is contains the positions where the metric is wished to be maximized (water?)
+ %
+ %   Example:
+-%      metric=ComputeMetric(hessian,2/9,10^-1,100,10^5,find(md.nodeonwater)
++%      metric=ComputeMetric(hessian,2/9,10^-1,100,10^5,[])
+ 
+ %first, find the eigen values of each line of H=[hessian(i,1) hessian(i,2); hessian(i,2) hessian(i,3)]
+ a=hessian(:,1); b=hessian(:,2); d=hessian(:,3);
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15748)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15749)
+@@ -7,10 +7,8 @@
+ 	properties (SetAccess=public) 
+ 		elementonfloatingice = NaN;
+ 		elementongroundedice = NaN;
+-		elementonwater       = NaN;
+ 		vertexonfloatingice  = NaN;
+ 		vertexongroundedice  = NaN;
+-		vertexonwater        = NaN;
+ 		vertexonrock         = NaN;
+ 		icelevelset          = NaN;
+ 	end
+@@ -30,10 +28,8 @@
+ 
+ 			md = checkfield(md,'mask.elementonfloatingice','size',[md.mesh.numberofelements 1],'values',[0 1]);
+ 			md = checkfield(md,'mask.elementongroundedice','size',[md.mesh.numberofelements 1],'values',[0 1]);
+-			md = checkfield(md,'mask.elementonwater'      ,'size',[md.mesh.numberofelements 1],'values',[0 1]);
+ 			md = checkfield(md,'mask.vertexonfloatingice','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'mask.vertexongroundedice','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+-			md = checkfield(md,'mask.vertexonwater'      ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices 1]);
+ 			isice=(md.mask.icelevelset>0);
+ 			if any(sum(isice(md.mesh.elements),2)==0),
+@@ -48,18 +44,14 @@
+ 			fielddisplay(obj,'vertexonfloatingice','vertex on floating ice flags list');
+ 			fielddisplay(obj,'elementongroundedice','element on grounded ice  list');
+ 			fielddisplay(obj,'vertexongroundedice','vertex on grounded ice flags list');
+-			fielddisplay(obj,'elementonwater','element on rock flags list');
+-			fielddisplay(obj,'vertexonwater','vertex on water flags list');
+ 			fielddisplay(obj,'vertexonrock','vertex on rock flags list');
+ 			fielddisplay(obj,'icelevelset','presence of ice if > 0, icefront position if = 0, no ice if < 0');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','elementonfloatingice','format','BooleanMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','elementongroundedice','format','BooleanMat','mattype',2);
+-			WriteData(fid,'object',obj,'fieldname','elementonwater','format','BooleanMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','vertexonwater','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','icelevelset','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15748)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15749)
+@@ -14,10 +14,8 @@
+ 	def __init__(self): # {{{
+ 		self.elementonfloatingice = float('NaN')
+ 		self.elementongroundedice = float('NaN')
+-		self.elementonwater       = float('NaN')
+ 		self.vertexonfloatingice  = float('NaN')
+ 		self.vertexongroundedice  = float('NaN')
+-		self.vertexonwater        = float('NaN')
+ 		self.icelevelset          = float('NaN')
+ 
+ 		#set defaults
+@@ -31,8 +29,6 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"vertexonfloatingice","vertex on floating ice flags list"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"elementongroundedice","element on grounded ice list"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"vertexongroundedice","vertex on grounded ice flags list"))
+-		string="%s\n%s"%(string,fielddisplay(self,"elementonwater","element on water flags list"))
+-		string="%s\n%s"%(string,fielddisplay(self,"vertexonwater","vertex on water flags list"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"icelevelset","presence of ice if > 0, icefront position if = 0, no ice if < 0"))
+ 		return string
+ 		#}}}
+@@ -43,10 +39,8 @@
+ 
+ 		md = checkfield(md,'mask.elementonfloatingice','size',[md.mesh.numberofelements],'values',[0,1])
+ 		md = checkfield(md,'mask.elementongroundedice','size',[md.mesh.numberofelements],'values',[0,1])
+-		md = checkfield(md,'mask.elementonwater'      ,'size',[md.mesh.numberofelements],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexonfloatingice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+-		md = checkfield(md,'mask.vertexonwater'       ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices])
+ 		isice=numpy.array(md.mask.icelevelset>0,int)
+ 		totallyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
+@@ -58,9 +52,7 @@
+ 	def marshall(self,md,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','elementonfloatingice','format','BooleanMat','mattype',2)
+ 		WriteData(fid,'object',self,'fieldname','elementongroundedice','format','BooleanMat','mattype',2)
+-		WriteData(fid,'object',self,'fieldname','elementonwater','format','BooleanMat','mattype',2)
+ 		WriteData(fid,'object',self,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'fieldname','vertexonwater','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','icelevelset','format','DoubleMat','mattype',1)
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15748)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15749)
+@@ -641,8 +641,6 @@
+ 		md.mask.vertexonfloatingice=project3d(md,'vector',md.mask.vertexonfloatingice,'type','node')
+ 		md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element')
+ 		md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node')
+-		md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element')
+-		md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node')
+ 		md.mask.icelevelset=project3d(md,'vector',md.mask.icelevelset,'type','node')
+ 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+ 			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15748)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15749)
+@@ -223,8 +223,6 @@
+ 			md.mask.vertexonfloatingice=project2d(md,md.mask.vertexonfloatingice,1);
+ 			md.mask.elementongroundedice=project2d(md,md.mask.elementongroundedice,1);
+ 			md.mask.vertexongroundedice=project2d(md,md.mask.vertexongroundedice,1);
+-			md.mask.elementonwater=project2d(md,md.mask.elementonwater,1);
+-			md.mask.vertexonwater=project2d(md,md.mask.vertexonwater,1);
+ 			if ~isnan(md.mask.vertexonrock)
+ 				md.mask.vertexonrock=project2d(md,md.mask.vertexonrock,1);
+ 			end
+@@ -753,8 +751,6 @@
+ 			md.mask.vertexonfloatingice=project3d(md,'vector',md.mask.vertexonfloatingice,'type','node');
+ 			md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element');
+ 			md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node');
+-			md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element');
+-			md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node');
+ 			md.mask.vertexonrock=project3d(md,'vector',md.mask.vertexonrock,'type','node');
+ 			md.mask.icelevelset=project3d(md,'vector',md.mask.icelevelset,'type','node');
+ 			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+@@ -808,7 +804,6 @@
+ 			if isfield(structmd,'extractedgrids'), md.mesh.extractedvertices=structmd.extractedgrids; end
+ 			if isfield(structmd,'gridoniceshelf'), md.mask.vertexonfloatingice=structmd.gridoniceshelf; end
+ 			if isfield(structmd,'gridonicesheet'), md.mask.vertexongroundedice=structmd.gridonicesheet; end
+-			if isfield(structmd,'gridonwater'), md.mask.vertexonwater=structmd.gridonwater; end
+ 			if isfield(structmd,'gridonboundary'), md.mesh.vertexonboundary=structmd.gridonboundary; end
+ 			if isfield(structmd,'petscoptions') & ~isempty(structmd.petscoptions), md.toolkits=structmd.petscoptions; end
+ 			if isfield(structmd,'g'), md.constants.g=structmd.g; end
+@@ -860,10 +855,8 @@
+ 			if isfield(structmd,'rheology_n'), md.materials.rheology_n=structmd.rheology_n; end
+ 			if isfield(structmd,'elementoniceshelf'), md.mask.elementonfloatingice=structmd.elementoniceshelf; end
+ 			if isfield(structmd,'elementonicesheet'), md.mask.elementongroundedice=structmd.elementonicesheet; end
+-			if isfield(structmd,'elementonwater'), md.mask.elementonwater=structmd.elementonwater; end
+ 			if isfield(structmd,'nodeoniceshelf'), md.mask.vertexonfloatingice=structmd.nodeoniceshelf; end
+ 			if isfield(structmd,'nodeonicesheet'), md.mask.vertexongroundedice=structmd.nodeonicesheet; end
+-			if isfield(structmd,'nodeonwater'), md.mask.vertexonwater=structmd.nodeonwater; end
+ 			if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
+ 			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
+ 			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
+Index: ../trunk-jpl/src/m/contrib/bamg/YamsCall.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/YamsCall.m	(revision 15748)
++++ ../trunk-jpl/src/m/contrib/bamg/YamsCall.m	(revision 15749)
+@@ -24,12 +24,7 @@
+ 
+ %Compute metric
+ t1=clock; fprintf('%s','      computing metric...');
+-if length(md.mask.vertexonwater)==md.mesh.numberofvertices,
+-	pos=find(md.mask.vertexonwater);
+-else
+-	pos=[];
+-end
+-metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,pos);
++metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,[]);
+ t2=clock;fprintf('%s\n',[' done (' num2str(etime(t2,t1)) ' seconds)']);
+ 
+ %write files
+Index: ../trunk-jpl/src/m/contrib/bamg/yams.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/yams.m	(revision 15748)
++++ ../trunk-jpl/src/m/contrib/bamg/yams.m	(revision 15749)
+@@ -78,15 +78,6 @@
+ 	end
+ 	field=sqrt(vx_obs.^2+vy_obs.^2);
+ 
+-	%set mask.vertexonwater  field
+-	if ~strcmp(groundeddomain,'N/A'),
+-		nodeground=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,groundeddomain,'node',2);
+-		md.mask.vertexonwater=ones(md.mesh.numberofvertices,1);
+-		md.mask.vertexonwater(find(nodeground))=0;
+-	else
+-		md.mask.vertexonwater=zeros(md.mesh.numberofvertices,1);
+-	end
+-
+ 	%adapt according to velocities
+ 	disp('   adapting...');
+ 	md=YamsCall(md,field,hmin,hmax,gradation(i),epsilon);
+@@ -118,13 +109,6 @@
+ md.mesh.vertexonsurface=ones(md.mesh.numberofvertices,1);
+ md.mesh.elementonbed=ones(md.mesh.numberofelements,1);
+ md.mesh.elementonsurface=ones(md.mesh.numberofelements,1);
+-if ~strcmp(groundeddomain,'N/A'),
+-	nodeground=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,groundeddomain,'node',2);
+-	md.mask.vertexonwater=ones(md.mesh.numberofvertices,1);
+-	md.mask.vertexonwater(find(nodeground))=0;
+-else
+-	md.mask.vertexonwater=zeros(md.mesh.numberofvertices,1);
+-end
+ if strcmpi(Names.interp,'node'),
+ 	md.inversion.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.mesh.x,md.mesh.y,0);
+ 	md.inversion.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.mesh.x,md.mesh.y,0);
+Index: ../trunk-jpl/src/m/contrib/bamg/YamsCall.py
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/YamsCall.py	(revision 15748)
++++ ../trunk-jpl/src/m/contrib/bamg/YamsCall.py	(revision 15749)
+@@ -37,11 +37,7 @@
+ 	#Compute metric
+ 	t1=time.time()
+ 	print "%s" % '      computing metric...'
+-	if numpy.size(md.mask.vertexonwater)==md.mesh.numberofvertices:
+-		pos=numpy.nonzero(md.mask.vertexonwater)[0]
+-	else:
+-		pos=numpy.empty(0,int)
+-	metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,pos)
++	metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,numpy.empty(0,int))
+ 	t2=time.time()
+ 	print "%s%d%s\n" % (' done (',t2-t1,' seconds)')
+ 
+Index: ../trunk-jpl/src/m/contrib/bamg/BamgCall.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/BamgCall.m	(revision 15748)
++++ ../trunk-jpl/src/m/contrib/bamg/BamgCall.m	(revision 15749)
+@@ -24,12 +24,7 @@
+ 
+ %Compute metric
+ t1=clock; fprintf('%s','      computing metric...');
+-if length(md.nodeonwater)==md.mesh.numberofvertices,
+-	pos=find(md.nodeonwater);
+-else
+-	pos=[];
+-end
+-metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,pos);
++metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,[]);
+ t2=clock;fprintf('%s\n',[' done (' num2str(etime(t2,t1)) ' seconds)']);
+ 
+ %write files
+Index: ../trunk-jpl/src/m/enum/MaskElementonwaterEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskElementonwaterEnum.m	(revision 15748)
++++ ../trunk-jpl/src/m/enum/MaskElementonwaterEnum.m	(revision 15749)
+@@ -1,11 +0,0 @@
+-function macro=MaskElementonwaterEnum()
+-%MASKELEMENTONWATERENUM - Enum of MaskElementonwater
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaskElementonwaterEnum()
+-
+-macro=StringToEnum('MaskElementonwater');
+Index: ../trunk-jpl/src/m/enum/MaskVertexonwaterEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskVertexonwaterEnum.m	(revision 15748)
++++ ../trunk-jpl/src/m/enum/MaskVertexonwaterEnum.m	(revision 15749)
+@@ -1,11 +0,0 @@
+-function macro=MaskVertexonwaterEnum()
+-%MASKVERTEXONWATERENUM - Enum of MaskVertexonwater
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaskVertexonwaterEnum()
+-
+-macro=StringToEnum('MaskVertexonwater');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15748)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15749)
+@@ -143,10 +143,8 @@
+ def InversionVzObsEnum(): return StringToEnum("InversionVzObs")[0]
+ def MaskElementonfloatingiceEnum(): return StringToEnum("MaskElementonfloatingice")[0]
+ def MaskElementongroundediceEnum(): return StringToEnum("MaskElementongroundedice")[0]
+-def MaskElementonwaterEnum(): return StringToEnum("MaskElementonwater")[0]
+ def MaskVertexonfloatingiceEnum(): return StringToEnum("MaskVertexonfloatingice")[0]
+ def MaskVertexongroundediceEnum(): return StringToEnum("MaskVertexongroundedice")[0]
+-def MaskVertexonwaterEnum(): return StringToEnum("MaskVertexonwater")[0]
+ def MaskIcelevelsetEnum(): return StringToEnum("MaskIcelevelset")[0]
+ def MaterialsBetaEnum(): return StringToEnum("MaterialsBeta")[0]
+ def MaterialsHeatcapacityEnum(): return StringToEnum("MaterialsHeatcapacity")[0]
+Index: ../trunk-jpl/src/m/parameterization/setmask.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15748)
++++ ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15749)
+@@ -45,6 +45,4 @@
+ md.mask.vertexonfloatingice=vertexonfloatingice;
+ md.mask.elementongroundedice=elementongroundedice;
+ md.mask.vertexongroundedice=vertexongroundedice;
+-md.mask.vertexonwater=zeros(md.mesh.numberofvertices,1);
+-md.mask.elementonwater=zeros(md.mesh.numberofelements,1);
+ md.mask.icelevelset=ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/src/m/parameterization/setmask.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15748)
++++ ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15749)
+@@ -45,8 +45,6 @@
+ 	md.mask.vertexonfloatingice = vertexonfloatingice
+ 	md.mask.elementongroundedice = elementongroundedice
+ 	md.mask.vertexongroundedice = vertexongroundedice
+-	md.mask.vertexonwater = numpy.zeros(md.mesh.numberofvertices,bool)
+-	md.mask.elementonwater = numpy.zeros(md.mesh.numberofelements,bool)
+ 	md.mask.icelevelset = numpy.ones(md.mesh.numberofvertices,bool)
+ 
+ 	return md
Index: /issm/oecreview/Archive/15392-16133/ISSM-15749-15750.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15749-15750.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15749-15750.diff	(revision 16134)
@@ -0,0 +1,59 @@
+Index: ../trunk-jpl/startup.m
+===================================================================
+--- ../trunk-jpl/startup.m	(revision 15749)
++++ ../trunk-jpl/startup.m	(revision 15750)
+@@ -15,7 +15,6 @@
+ 	ISSM_DIR=getenv('ISSM_DIR');
+ else
+ 	ISSM_DIR=getenv('ISSM_DIR_WIN');
+-	%ISSM_DIR='';
+ end
+ if (isempty(ISSM_DIR)),
+ 	error('''ISSM_DIR'' environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!');
+@@ -26,9 +25,8 @@
+ %the variable ISSM_DIR in this file, in case it is not correctly setup. 
+ 
+ %ISSM path
+-addpath([ISSM_DIR '/src/m/os/']); %loads recursivepath
+-addpath([ISSM_DIR '/bin']);
+-addpath([ISSM_DIR '/lib']);
++addpath([ISSM_DIR '/src/m/os/']); %load recursivepath
++addpath([ISSM_DIR '/lib']);       %load mex
+ addpath(recursivepath([ISSM_DIR '/src/m']));
+ addpath(recursivepath([ISSM_DIR '/externalpackages/scotch']));
+ addpath(recursivepath([ISSM_DIR '/externalpackages/canos']));
+@@ -36,9 +34,7 @@
+ addpath(recursivepath([ISSM_DIR '/externalpackages/export_fig']));
+ addpath(recursivepath([ISSM_DIR '/externalpackages/googleearthtoolbox']));
+ addpath(recursivepath([ISSM_DIR '/externalpackages/howatmask']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/cm_and_cb_utilities']));
+ addpath(recursivepath([ISSM_DIR '/externalpackages/dem']));
+-
+ clear ISSM_DIR;
+ 
+ %Check on any warning messages that might indicate that the paths were not correct. 
+@@ -49,24 +45,5 @@
+ 	fprintf('\n  To get started with ISSM, type issmdoc at the command prompt.\n\n');
+ end
+ 
+-%  deal with Matlab bug (on Linux, not WinXP) -- unless
+-%  the class has been called, "empty" method can not be found
+-if ~ispc,
+-	normal_uncertain;
+-	continuous_design;
+-	continuous_state;
+-	linear_inequality_constraint;
+-	linear_equality_constraint;
+-	response_function;
+-	objective_function;
+-	least_squares_term;
+-	nonlinear_inequality_constraint;
+-	nonlinear_equality_constraint;
+-	clear ans;
+-end
+-
+ %disable matlab bell!
+ beep off;
+-
+-% no warning if we try to plot while in nojvm (will not be supported in future releases)
+-warning off MATLAB:HandleGraphics:noJVM
Index: /issm/oecreview/Archive/15392-16133/ISSM-15750-15751.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15750-15751.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15750-15751.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15750)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15751)
+@@ -7678,6 +7678,8 @@
+ 
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=CreateKMatrixDiagnosticFS();
++	int indices[3]={18,19,20};
++	Ke1->StaticCondensation(3,&indices[0]);
+ 	int init = this->element_type;
+ 	this->element_type=P1Enum; //P1 needed for HO 
+ 	ElementMatrix* Ke2=CreateKMatrixDiagnosticHO();
Index: /issm/oecreview/Archive/15392-16133/ISSM-15751-15752.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15751-15752.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15751-15752.diff	(revision 16134)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15751)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15752)
+@@ -405,7 +405,7 @@
+ 		if(analysis_type==DiagnosticHorizAnalysisEnum){
+ 			int approximation;
+ 			inputs->GetInputValue(&approximation,ApproximationEnum);
+-			if(approximation==HOFSApproximationEnum){
++			if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+ 				//Do nothing condensatino already done for Stokes part
+ 			}
+ 			else{
+@@ -580,7 +580,7 @@
+ 			if(this->element_type==MINIcondensedEnum){
+ 				int approximation;
+ 				inputs->GetInputValue(&approximation,ApproximationEnum);
+-				if(approximation==HOFSApproximationEnum){
++				if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+ 					//Do nothing, condensation already done in PVectorCoupling
+ 				}
+ 				else{
+@@ -7405,8 +7405,13 @@
+ ElementMatrix* Penta::CreateKMatrixDiagnosticSSAFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticSSA3d();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke1=CreateKMatrixDiagnosticFS();
++	int indices[3]={18,19,20};
++	Ke1->StaticCondensation(3,&indices[0]);
++	int init = this->element_type;
++	this->element_type=P1Enum; //P1 needed for HO 
++	ElementMatrix* Ke2=CreateKMatrixDiagnosticSSA3d();
++	this->element_type=init;
+ 	ElementMatrix* Ke3=CreateKMatrixCouplingSSAFS();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+ 
+@@ -8426,8 +8431,17 @@
+ ElementVector* Penta::CreatePVectorDiagnosticSSAFS(void){
+ 
+ 	/*compute all load vectors for this element*/
++	int init = this->element_type;
++	this->element_type=P1Enum;
+ 	ElementVector* pe1=CreatePVectorDiagnosticSSA();
++	this->element_type=init;
+ 	ElementVector* pe2=CreatePVectorDiagnosticFS();
++	int indices[3]={18,19,20};
++	this->element_type=MINIcondensedEnum;
++	ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
++	this->element_type=init;
++	pe2->StaticCondensation(Ke,3,&indices[0]);
++	delete Ke;
+ 	ElementVector* pe3=CreatePVectorCouplingSSAFS();
+ 	ElementVector* pe =new ElementVector(pe1,pe2,pe3);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15752-15753.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15752-15753.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15752-15753.diff	(revision 16134)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15752)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15753)
+@@ -9890,13 +9890,15 @@
+ void  Penta::InputUpdateFromSolutionDiagnosticSSAFS(IssmDouble* solution){
+ 
+ 	const int    numdofm=NDOF2*NUMVERTICES;
+-	const int    numdofs=NDOF4*NUMVERTICES;
++	const int    numdofs=NDOF3*NUMVERTICES;
+ 	const int    numdof2d=NDOF2*NUMVERTICES2D;
++	const int    numdofpressure=NDOF1*NUMVERTICES;
+ 
+ 	int     i;
+ 	IssmDouble  FSreconditioning;
+ 	IssmDouble  SSA_values[numdofm];
+ 	IssmDouble  FS_values[numdofs];
++	IssmDouble  Pressure_values[numdofs];
+ 	IssmDouble  vx[NUMVERTICES];
+ 	IssmDouble  vy[NUMVERTICES];
+ 	IssmDouble  vz[NUMVERTICES];
+@@ -9907,6 +9909,7 @@
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	int*    doflistm        = NULL;
+ 	int*    doflists        = NULL;
++	int*    doflistpressure = NULL;
+ 	Penta   *penta          = NULL;
+ 
+ 	/*OK, we have to add results of this element for SSA 
+@@ -9916,6 +9919,7 @@
+ 	/*Get dof listof this element (SSA dofs) and of the penta at base (SSA dofs): */
+ 	penta->GetDofList(&doflistm,SSAApproximationEnum,GsetEnum);
+ 	GetDofList(&doflists,FSvelocityEnum,GsetEnum);
++	GetDofListPressure(&doflistpressure,GsetEnum);
+ 	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+@@ -9926,9 +9930,8 @@
+ 		SSA_values[i]=solution[doflistm[i]];
+ 		SSA_values[i+numdof2d]=solution[doflistm[i]];
+ 	}
+-	for(i=0;i<numdofs;i++){
+-		FS_values[i]=solution[doflists[i]];
+-	}
++	for(i=0;i<numdofs;i++)FS_values[i]=solution[doflists[i]];
++	for(i=0;i<numdofpressure;i++) Pressure_values[i]=solution[doflistpressure[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+ 	TransformSolutionCoord(&SSA_values[0],this->nodes,NUMVERTICES,XYEnum);
+@@ -9936,10 +9939,10 @@
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		vx[i]=FS_values[i*NDOF4+0]+SSA_values[i*NDOF2+0];
+-		vy[i]=FS_values[i*NDOF4+1]+SSA_values[i*NDOF2+1];
+-		vzFS[i]=FS_values[i*NDOF4+2];
+-		pressure[i]=FS_values[i*NDOF4+3]*FSreconditioning;
++		vx[i]=FS_values[i*NDOF3+0]+SSA_values[i*NDOF2+0];
++		vy[i]=FS_values[i*NDOF3+1]+SSA_values[i*NDOF2+1];
++		vzFS[i]=FS_values[i*NDOF3+2];
++		pressure[i]=Pressure_values[i*NDOF1]*FSreconditioning;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+@@ -10192,7 +10195,7 @@
+ 		vx[i]=FS_values[i*NDOF3+0]+HO_values[i*NDOF2+0];
+ 		vy[i]=FS_values[i*NDOF3+1]+HO_values[i*NDOF2+1];
+ 		vzFS[i]=FS_values[i*NDOF3+2];
+-		pressure[i]=FS_values[i*NDOF1]*FSreconditioning;
++		pressure[i]=Pressure_values[i*NDOF1]*FSreconditioning;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
Index: /issm/oecreview/Archive/15392-16133/ISSM-15753-15754.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15753-15754.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15753-15754.diff	(revision 16134)
@@ -0,0 +1,96 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15753)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15754)
+@@ -32,6 +32,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15753)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15754)
+@@ -27,6 +27,7 @@
+ 	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15753)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15754)
+@@ -43,6 +43,7 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,BathymetryEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15753)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15754)
+@@ -34,6 +34,7 @@
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15753)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15754)
+@@ -34,6 +34,7 @@
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15753)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15754)
+@@ -35,6 +35,7 @@
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15753)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15754)
+@@ -29,6 +29,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15753)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15754)
+@@ -30,6 +30,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15754-15755.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15754-15755.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15754-15755.diff	(revision 16134)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/packagers/ubuntu/README
+===================================================================
+--- ../trunk-jpl/packagers/ubuntu/README	(revision 15754)
++++ ../trunk-jpl/packagers/ubuntu/README	(revision 15755)
+@@ -1,3 +1,5 @@
++TARBALL INSTALLATION:
++
+ To install ISSM, untar ISSM-Ubuntu32.tar.gz 
+ You will get an ISSM directory. 
+ 
+@@ -12,3 +14,47 @@
+ 
+ Once this is done, fireup matlab from inside the ISSM directory: 
+ matlab -nojvm -r "startup;"
++
++
++UNDER CONSTRUCTION - UNDER CONSTRUCTION - UNDER CONSTRUCTION - UNDER CONSTRUCTION 
++-------------------------------------------------------------------------------
++				OR THE RIGHT WAY....
++DPKG/DEB INSTALLATION:
++
++To install from deb archives (*.deb), use:
++
++	> sudo dpkg --install <debarchive>
++
++That's it! But not really. Do make sure that you install petsc and metis first.
++When you first try to install issm, dpkg will tell you that you are missing
++dependencies. Just:
++
++	> sudo apt-get install -f
++
++to fix the dependencies and complete the install. When apt-get is done, you 
++should see something that says that ISSM is installed correctly on your 
++machine. That's it! For real this time.
++
++Uninstalling is simple too:
++
++	> sudo apt-get remove <issmPackageName>
++
++That'll do all the work for you. This won't delete any configuration or user
++defined environment stuff. Just swap "remove" out for "purge" and that'll
++delete everything. And apt-get might ask you to remove unneeded dependencies,
++so you should probably do that to keep your system clean.
++
++To create your own custom debian archive, see the README in issmpkg.
++
++-------------------------------------------------------------------------------
++
++APT-GET INSTALLATION: (this doesnot work yet)
++
++To install from apt-get:
++
++	> sudo add-apt-repository <issm_PPA_URL>
++	> sudo apt-get install <issmPackageName>
++
++Just say yes to everything apt asks you, and you're good.
++
++UNDER CONSTRUCTION - UNDER CONSTRUCTION - UNDER CONSTRUCTION - UNDER CONSTRUCTION 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15755-15756.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15755-15756.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15755-15756.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/packagers/ubuntu/issm.deb
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/packagers/ubuntu/issm.deb
+===================================================================
+--- ../trunk-jpl/packagers/ubuntu/issm.deb	(revision 15755)
++++ ../trunk-jpl/packagers/ubuntu/issm.deb	(revision 15756)
+
+Property changes on: ../trunk-jpl/packagers/ubuntu/issm.deb
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15756-15757.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15756-15757.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15756-15757.diff	(revision 16134)
@@ -0,0 +1,277 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15756)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15757)
+@@ -106,26 +106,40 @@
+ 	GetNodalFunctionsP1(basis,gauss);
+ 
+ 	/*Build B: */
+-	for(i=0;i<NUMNODESP1b;i++){
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i];
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dbasismini[1][i];
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.5*dbasismini[1][i];
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.5*dbasismini[0][i];
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = 0.;
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.;
++	for(i=0;i<NUMNODESP1;i++){
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+0] = dbasismini[0][i];
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+1] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+2] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+0] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+1] = dbasismini[1][i];
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+2] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+0] = 0.5*dbasismini[1][i];
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+1] = 0.5*dbasismini[0][i];
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+2] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*i+0] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*i+1] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*i+2] = 0.;
+ 	}
++	for(i=0;i<1;i++){
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+0] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+1] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+2] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+0] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+1] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+2] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+0] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+1] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+2] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*(NUMNODESP1+i)+0] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*(NUMNODESP1+i)+1] = 0.;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*(NUMNODESP1+i)+2] = 0.;
++	}
+ 
+ 	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3] = 0;
+-		B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3] = 0;
+-		B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3] = 0;
+-		B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3] = basis[i];
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NUMNODESP1b*NDOF3+i] = 0;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NUMNODESP1b*NDOF3+i] = 0;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NUMNODESP1b*NDOF3+i] = 0;
++		B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NUMNODESP1b*NDOF3+i] = basis[i];
+ 	}
+ }
+ /*}}}*/
+@@ -229,22 +243,34 @@
+ 	GetNodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss);
+ 
+ 	/*Build Bprime: */
+-	for(i=0;i<NUMNODESP1b;i++){
+-		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = 2.*dbasismini[0][i];
+-		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = dbasismini[1][i];
+-		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
+-		Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = dbasismini[0][i];
+-		Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = 2.*dbasismini[1][i];
+-		Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
+-		Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = dbasismini[1][i];
+-		Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = dbasismini[0][i];
+-		Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = 0.;
++	for(i=0;i<NUMNODESP1;i++){
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+0] = 2.*dbasismini[0][i];
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+1] = dbasismini[1][i];
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+2] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+0] = dbasismini[0][i];
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+1] = 2.*dbasismini[1][i];
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+2] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+0] = dbasismini[1][i];
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+1] = dbasismini[0][i];
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+2] = 0.;
+ 	}
+ 
++	for(i=0;i<1;i++){ //Add zeros for the bubble function
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+0] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+1] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+2] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+0] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+1] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+2] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+0] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+1] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+2] = 0.;
++	}
++
+ 	for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
+-		Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3] = 0.;
+-		Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3] = 0.;
+-		Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NUMNODESP1b*NDOF3+i] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NUMNODESP1b*NDOF3+i] = 0.;
++		Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NUMNODESP1b*NDOF3+i] = 0.;
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15756)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15757)
+@@ -6875,49 +6875,60 @@
+ ElementMatrix* Penta::CreateKMatrixCouplingSSAFSViscous(void){
+ 
+ 	/*Constants*/
+-	const int numnodes    = 2 *NUMVERTICES;
+-	const int numdofm     = NDOF2 *NUMVERTICES2D;
+-	const int numdofs     = NDOF4 *NUMVERTICES;
+-	const int numdoftotal = 2 *numdofm+numdofs;
++	const int numdofm      = NDOF2 *NUMVERTICES2D;
++	const int numdofs      = NDOF4 *NUMVERTICES;
++	const int numdofstotal = NDOF4 *NUMVERTICES + NDOF3;
++	const int numdoftotal  = 2 *numdofm+numdofstotal;
+ 
+ 	/*Intermediaries */
+-	int         i,j;
++	int        i,j;
+ 	IssmDouble Jdet;
+ 	IssmDouble viscosity,FSreconditioning; //viscosity
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble B[4][numdofs+3];
++	IssmDouble B[4][numdofstotal];
+ 	IssmDouble Bprime[4][numdofm];
+ 	IssmDouble B2[3][numdofm];
+-	IssmDouble Bprime2[3][numdofs+3];
++	IssmDouble Bprime2[3][numdofstotal];
+ 	IssmDouble D[4][4]={0.0};            // material matrix, simple scalar matrix.
+ 	IssmDouble D2[3][3]={0.0};            // material matrix, simple scalar matrix.
+ 	IssmDouble D_scalar;
+ 	IssmDouble Ke_gg[numdofs][numdofm]={0.0}; //local element stiffness matrix 
+ 	IssmDouble Ke_gg2[numdofm][numdofs]={0.0}; //local element stiffness matrix 
+-	IssmDouble Ke_gg_gaussian[numdofs+3][numdofm]; //stiffness matrix evaluated at the gaussian point.
+-	IssmDouble Ke_gg_gaussian2[numdofm][numdofs+3]; //stiffness matrix evaluated at the gaussian point.
++	IssmDouble Ke_gg_gaussian[numdofstotal][numdofm]; //stiffness matrix evaluated at the gaussian point.
++	IssmDouble Ke_gg_gaussian2[numdofm][numdofstotal]; //stiffness matrix evaluated at the gaussian point.
+ 	GaussPenta *gauss=NULL;
+ 	GaussTria  *gauss_tria=NULL;
+-	Node       *node_list[numnodes];
+-	int         cs_list[numnodes];
++	Node       *node_list[20];
+ 
+ 	/*Find penta on bed as FS must be coupled to the dofs on the bed: */
+ 	Penta* pentabase=GetBasalElement();
+ 	Tria* tria=pentabase->SpawnTria(0); //lower face is 0, upper face is 1.
+ 
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int numnodes  = 2*vnumnodes-1+pnumnodes;
++
+ 	/*Prepare node list*/
+-	for(i=0;i<NUMVERTICES;i++){
+-		node_list[i+0*NUMVERTICES] = pentabase->nodes[i];
+-		node_list[i+1*NUMVERTICES] = this->nodes[i];
+-		cs_list[i+0*NUMVERTICES] = XYEnum;
+-		cs_list[i+1*NUMVERTICES] = XYZEnum;
++	int* cs_list = xNew<int>(2*vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes-1;i++){
++		node_list[i] = pentabase->nodes[i];
++		cs_list[i] = XYEnum;
+ 	}
++	for(i=0;i<vnumnodes;i++){
++		node_list[i+vnumnodes-1] = this->nodes[i];
++		cs_list[i+vnumnodes-1] = XYZEnum;
++	}
++	for(i=0;i<pnumnodes;i++){
++		node_list[2*vnumnodes-1+i] = this->nodes[vnumnodes+i];
++		cs_list[2*vnumnodes-1+i] = PressureEnum;
++	}
+ 
++
+ 	/*Initialize Element matrix and return if necessary*/
+-	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,FSvelocityEnum);
+-	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
++	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,    this->parameters,SSAApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,2*NUMVERTICES+1,this->parameters,FSvelocityEnum);
++	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+ 	/* Get node coordinates and dof list: */
+@@ -6949,18 +6960,18 @@
+ 		D[3][3]=-gauss->weight*Jdet*FSreconditioning;
+ 		for (i=0;i<3;i++) D2[i][i]=D_scalar;
+ 
+-		TripleMultiply( &B[0][0],4,numdofs+3,1,
++		TripleMultiply( &B[0][0],4,numdofstotal,1,
+ 					&D[0][0],4,4,0,
+ 					&Bprime[0][0],4,numdofm,0,
+ 					&Ke_gg_gaussian[0][0],0);
+ 
+ 		TripleMultiply( &B2[0][0],3,numdofm,1,
+ 					&D2[0][0],3,3,0,
+-					&Bprime2[0][0],3,numdofs+3,0,
++					&Bprime2[0][0],3,numdofstotal,0,
+ 					&Ke_gg_gaussian2[0][0],0);
+ 
+-		for( i=0; i<numdofs; i++) for(j=0;j<numdofm; j++) Ke_gg[i][j]+=Ke_gg_gaussian[i][j];
+-		for( i=0; i<numdofm; i++) for(j=0;j<numdofs; j++) Ke_gg2[i][j]+=Ke_gg_gaussian2[i][j];
++		for( i=0; i<numdofstotal; i++) for(j=0;j<numdofm; j++)      Ke_gg[i][j]+=Ke_gg_gaussian[i][j];
++		for( i=0; i<numdofm; i++)      for(j=0;j<numdofstotal; j++) Ke_gg2[i][j]+=Ke_gg_gaussian2[i][j];
+ 	} 
+ 	for(i=0;i<numdofs;i++) for(j=0;j<numdofm;j++) Ke->values[(i+2*numdofm)*numdoftotal+j]+=Ke_gg[i][j];
+ 	for(i=0;i<numdofm;i++) for(j=0;j<numdofs;j++) Ke->values[i*numdoftotal+(j+2*numdofm)]+=Ke_gg2[i][j];
+@@ -7110,8 +7121,7 @@
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes,2*NUMVERTICES+1,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+-	delete Ke1;
+-	delete Ke2;
++	delete Ke1; delete Ke2;
+ 	
+ 	/*Compute HO Matrix with P1 element type\n");*/
+ 	this->element_type=P1Enum;
+@@ -7131,7 +7141,7 @@
+ 		Ke->values[i*numdoftotal+numdofp+NDOF3*j+1]+=Ke1->values[i*numdofp+NDOF2*j+1];
+ 	}
+ 
+-	/*Transform Coordinate System*/ //Do not transform, already sone in the matrices
++	/*Transform Coordinate System*/ //Do not transform, already done in the matrices
+ 	//TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
+ 
+ 	/*clean-up and return*/
+@@ -8115,8 +8125,15 @@
+ 	/*Initialize Element vector and return if necessary*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=SSAFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
+ 
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++	ElementVector* pe=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+@@ -8141,17 +8158,18 @@
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+ 		for(i=0;i<NUMVERTICES;i++){
+-			pe->values[i*NDOF4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];
+-			pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
+-			pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
+-			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];
++			pe->values[i*NDOF3+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];
++			pe->values[i*NDOF3+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
++			pe->values[i*NDOF3+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
++			pe->values[NDOF3*vnumnodes+i]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];
+ 		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZEnum);
++	TransformLoadVectorCoord(pe,nodes,vnumnodes+pnumnodes,cs_list);
+ 
+ 	/*Clean up and return*/
++	xDelete<int>(cs_list);
+ 	delete gauss;
+ 	return pe;
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15757-15758.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15757-15758.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15757-15758.diff	(revision 16134)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15757)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15758)
+@@ -33,6 +33,7 @@
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15757)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15758)
+@@ -22,6 +22,7 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15757)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15758)
+@@ -22,6 +22,7 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15758-15759.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15758-15759.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15758-15759.diff	(revision 16134)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/externalpackages/adjoinablempi/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adjoinablempi/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adjoinablempi/install.sh	(revision 15759)
+@@ -0,0 +1,26 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src  install
++
++#Mercurial cloning: 
++hg clone http://mercurial.mcs.anl.gov//ad/AdjoinableMPI src
++
++export C_INCLUDE_PATH=:/usr/include/sys/:$C_INCLUDE_PATH
++
++#Configure adjoinablempi
++cd src
++autoreconf -fi
++
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/adjoinablempi/install" --libdir="$ISSM_DIR/externalpackages/adjoinablempi/install/lib" --enable-requestOnTrace
++
++#Compile adjoinablempi 
++make clean
++if [ $# -eq 0 ]; then
++	make 
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/adjoinablempi/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15759-15760.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15759-15760.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15759-15760.diff	(revision 16134)
@@ -0,0 +1,307 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-dev.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-dev.sh	(revision 15759)
++++ ../trunk-jpl/externalpackages/adolc/install-dev.sh	(revision 15760)
+@@ -1,21 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Some cleanup
+-rm -rf install adolc*issm
+-
+-git clone -b ampi git://git.mcs.anl.gov/adol-c.git adolc_issm
+-#git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
+-
+-#Compile ADOL-C
+-cd adolc_issm
+-
+-autoreconf -f -i 
+-./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
+-
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/adolc/install-update-dev.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-update-dev.sh	(revision 15759)
++++ ../trunk-jpl/externalpackages/adolc/install-update-dev.sh	(revision 15760)
+@@ -1,28 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#This script is very specific to the larour larsen nightly using adolc. 
+-#It relies on just an update of adolc, and symlink to an existing adolc 
+-#repo. 
+-
+-#Some cleanup
+-rm -rf install adolc_issm
+-
+-#symlink: 
+-ln -s /proj/ice/larour2/issm-uci/trunk-jpl/externalpackages/adolc/adolc_issm ./adolc_issm
+-
+-#update and compile
+-cd adolc_issm
+-git pull origin
+-git checkout ampi
+-#git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
+-
+-autoreconf -f -i 
+-./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
+-
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/adolc/update.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/update.sh	(revision 15759)
++++ ../trunk-jpl/externalpackages/adolc/update.sh	(revision 15760)
+@@ -1,14 +0,0 @@
+-#!/bin/bash
+-
+-cd adolc_issm
+-git pull
+-
+-autoreconf -f -i 
+-./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
+-
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/adolc/install-2.2.0.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-2.2.0.sh	(revision 15759)
++++ ../trunk-jpl/externalpackages/adolc/install-2.2.0.sh	(revision 15760)
+@@ -1,60 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#some issues on macosx64 with ISSM's autoconf. you might want to run native to mac on this.
+-
+-#Some cleanup
+-rm -rf install ADOL-C-2.2.0 src trunk
+-
+-#Create install directories
+-mkdir install src
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ADOL-C-2.2.0.tar.gz' 'ADOL-C-2.2.0.tar.gz'
+-
+-#Untar 
+-tar -zxvf  ADOL-C-2.2.0.tar.gz
+-
+-#Move ADOL-C into install directory
+-mv ADOL-C-2.2.0/* src
+-rm -rf ADOL-C-2.2.0
+-
+-#Compile ADOL-C
+-cd src 
+-
+-#export CC=gcc
+-#export CXX=g++
+-#export CFLAGS="-arch x86_64"
+-#export CXXFLAGS="-arch x86_64"
+-
+-./configure \
+-	--prefix=$ISSM_DIR/externalpackages/adolc/install \
+-	--enable-sparse \
+-	--enable-docexa \
+-	--enable-addexa \
+-	--disable-shave
+-
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+-
+-
+-#Ok, bug with libtool: replace all LIBTOOL= by LIBTOOL=libtool 
+-#in all Makefiles
+-for i in `find ./ -name Makefile `
+-do
+-	echo $i
+-	cat $i | sed 's/LIBTOOL =/LIBTOOL = libtool/g' > $i.bak 
+-	mv $i.bak $i
+-done
+-
+-#remake: 
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/adolc/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/install.sh	(revision 15760)
+@@ -0,0 +1,21 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install adolc*issm
++
++git clone -b ampi git://git.mcs.anl.gov/adol-c.git adolc_issm
++#git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
++
++#Compile ADOL-C
++cd adolc_issm
++
++autoreconf -f -i 
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
++
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/adolc/update-existing.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/update-existing.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/update-existing.sh	(revision 15760)
+@@ -0,0 +1,28 @@
++#!/bin/bash
++set -eu
++
++#This script is very specific to the larour larsen nightly using adolc. 
++#It relies on just an update of adolc, and symlink to an existing adolc 
++#repo. 
++
++#Some cleanup
++rm -rf install adolc_issm
++
++#symlink: 
++ln -s /proj/ice/larour2/issm-uci/trunk-jpl/externalpackages/adolc/adolc_issm ./adolc_issm
++
++#update and compile
++cd adolc_issm
++git pull origin
++git checkout ampi
++#git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
++
++autoreconf -f -i 
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
++
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/update-existing.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/adolc/old/update.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/old/update.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/old/update.sh	(revision 15760)
+@@ -0,0 +1,14 @@
++#!/bin/bash
++
++cd adolc_issm
++git pull
++
++autoreconf -f -i 
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
++
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/old/update.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/adolc/old/install-2.2.0.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/old/install-2.2.0.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/old/install-2.2.0.sh	(revision 15760)
+@@ -0,0 +1,60 @@
++#!/bin/bash
++set -eu
++
++#some issues on macosx64 with ISSM's autoconf. you might want to run native to mac on this.
++
++#Some cleanup
++rm -rf install ADOL-C-2.2.0 src trunk
++
++#Create install directories
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ADOL-C-2.2.0.tar.gz' 'ADOL-C-2.2.0.tar.gz'
++
++#Untar 
++tar -zxvf  ADOL-C-2.2.0.tar.gz
++
++#Move ADOL-C into install directory
++mv ADOL-C-2.2.0/* src
++rm -rf ADOL-C-2.2.0
++
++#Compile ADOL-C
++cd src 
++
++#export CC=gcc
++#export CXX=g++
++#export CFLAGS="-arch x86_64"
++#export CXXFLAGS="-arch x86_64"
++
++./configure \
++	--prefix=$ISSM_DIR/externalpackages/adolc/install \
++	--enable-sparse \
++	--enable-docexa \
++	--enable-addexa \
++	--disable-shave
++
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
++
++
++#Ok, bug with libtool: replace all LIBTOOL= by LIBTOOL=libtool 
++#in all Makefiles
++for i in `find ./ -name Makefile `
++do
++	echo $i
++	cat $i | sed 's/LIBTOOL =/LIBTOOL = libtool/g' > $i.bak 
++	mv $i.bak $i
++done
++
++#remake: 
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
Index: /issm/oecreview/Archive/15392-16133/ISSM-15760-15761.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15760-15761.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15760-15761.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/externalpackages/adjoinablempi/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adjoinablempi/install.sh	(revision 15760)
++++ ../trunk-jpl/externalpackages/adjoinablempi/install.sh	(revision 15761)
+@@ -14,7 +14,10 @@
+ autoreconf -fi
+ 
+ ./configure \
+-	--prefix="$ISSM_DIR/externalpackages/adjoinablempi/install" --libdir="$ISSM_DIR/externalpackages/adjoinablempi/install/lib" --enable-requestOnTrace
++	--prefix="$ISSM_DIR/externalpackages/adjoinablempi/install" \
++	--libdir="$ISSM_DIR/externalpackages/adjoinablempi/install/lib" \
++	--with-mpi-root="$ISSM_DIR/externalpackages/mpich/install" \
++	--enable-requestOnTrace
+ 
+ #Compile adjoinablempi 
+ make clean
Index: /issm/oecreview/Archive/15392-16133/ISSM-15761-15762.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15761-15762.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15761-15762.diff	(revision 16134)
@@ -0,0 +1,94 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-withampi.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-withampi.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/install-withampi.sh	(revision 15762)
+@@ -0,0 +1,30 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install src
++
++git clone -b ampi git://git.mcs.anl.gov/adol-c.git src
++#git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
++
++#Compile ADOL-C
++cd src
++autoreconf -f -i 
++
++export CFLAGS="-O2 -L$ISSM_DIR/externalpackages/mpich/install/lib -lpmpich"
++export CXXFLAGS="-O2 -L$ISSM_DIR/externalpackages/mpich/install/lib -lpmpich"
++
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install  \
++	--libdir=$ISSM_DIR/externalpackages/adolc/install/lib \
++	--with-mpi-root=$ISSM_DIR/externalpackages/mpich/install \
++	--enable-ampi \
++	--with-ampi=$ISSM_DIR/externalpackages/adjoinablempi/install \
++	--disable-tapedoc-values
++
++make clean
++if [ $# -eq 0 ]; then
++	make V=1
++else
++	make -j $1 V=1
++fi
++make V=1 install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/install-withampi.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/adolc/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install.sh	(revision 15761)
++++ ../trunk-jpl/externalpackages/adolc/install.sh	(revision 15762)
+@@ -2,20 +2,20 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install adolc*issm
++rm -rf install src
+ 
+-git clone -b ampi git://git.mcs.anl.gov/adol-c.git adolc_issm
++git clone -b ampi git://git.mcs.anl.gov/adol-c.git src
+ #git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
+ 
+ #Compile ADOL-C
+-cd adolc_issm
++cd src
+ 
+ autoreconf -f -i 
+ ./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
+ 
+ if [ $# -eq 0 ]; then
+-	make
++	make V=1
+ else
+-	make -j $1
++	make -j $1 V=1
+ fi
+-make install
++make V=1 install
+Index: ../trunk-jpl/externalpackages/adolc/update-existing.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/update-existing.sh	(revision 15761)
++++ ../trunk-jpl/externalpackages/adolc/update-existing.sh	(revision 15762)
+@@ -6,13 +6,13 @@
+ #repo. 
+ 
+ #Some cleanup
+-rm -rf install adolc_issm
++rm -rf install src
+ 
+ #symlink: 
+-ln -s /proj/ice/larour2/issm-uci/trunk-jpl/externalpackages/adolc/adolc_issm ./adolc_issm
++ln -s /proj/ice/larour2/issm-uci/trunk-jpl/externalpackages/adolc/adolc_issm ./src
+ 
+ #update and compile
+-cd adolc_issm
++cd src
+ git pull origin
+ git checkout ampi
+ #git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
Index: /issm/oecreview/Archive/15392-16133/ISSM-15762-15763.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15762-15763.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15762-15763.diff	(revision 16134)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/externalpackages/adjoinablempi
+===================================================================
+--- ../trunk-jpl/externalpackages/adjoinablempi	(revision 15762)
++++ ../trunk-jpl/externalpackages/adjoinablempi	(revision 15763)
+
+Property changes on: ../trunk-jpl/externalpackages/adjoinablempi
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++install
++src
Index: /issm/oecreview/Archive/15392-16133/ISSM-15763-15764.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15763-15764.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15763-15764.diff	(revision 16134)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15763)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15764)
+@@ -479,7 +479,8 @@
+ 	dnl adolc headers and libraries
+ 	if test "x$HAVE_ADOLC" == "xyes"; then
+ 		ADOLCINCL="-I$ADOLC_ROOT/include"
+-		ADOLCLIB="-L$ADOLC_ROOT/lib64 -ladolc"
++		dnl ADOLCLIB="-L$ADOLC_ROOT/lib64 -ladolc" used to be the path
++		ADOLCLIB="-L$ADOLC_ROOT/lib -ladolc"
+ 		AC_DEFINE([_HAVE_ADOLC_],[1],[with adolc in ISSM src])
+ 		AC_SUBST([ADOLCINCL])
+ 		AC_SUBST([ADOLCLIB])
+@@ -588,6 +589,33 @@
+ 	fi
+ 	AM_CONDITIONAL([GSL], [test x$HAVE_GSL = xyes])
+ 	dnl }}}
++	dnl adjoinable-mpi{{{
++	AC_ARG_WITH([ampi-dir],
++	  AS_HELP_STRING([--with-ampi-dir=DIR], [adjoinable mpi root directory.]),
++	  [AMPI_ROOT=$withval],[AMPI_ROOT="no"]) 
++
++	dnl Check whether ampi is enabled
++	AC_MSG_CHECKING([for ampi])
++	if test "x$AMPI_ROOT" = "xno" ; then
++		HAVE_AMPI=no
++	else
++		HAVE_AMPI=yes
++		if ! test -d "$AMPI_ROOT"; then
++			AC_MSG_ERROR([ampi directory provided ($AMPI_ROOT) does not exist]);
++		fi
++	fi
++	AC_MSG_RESULT($HAVE_AMPI)
++	
++	dnl ampi headers and libraries
++	if test "x$HAVE_AMPI" == "xyes"; then
++		AMPIINCL="-I$AMPI_ROOT/include"
++		AMPILIB="-dy -L$AMPI_ROOT/lib -lampiCommon -L$ADOLC_ROOT/lib -ladolc -L$AMPI_ROOT/lib -lampiCommon -lampiBookkeeping -lampiTape"
++		AC_DEFINE([_HAVE_AMPI_],[1],[with adjoinable mpi in ISSM src])
++		AC_SUBST([AMPIINCL])
++		AC_SUBST([AMPILIB])
++	fi
++	AM_CONDITIONAL([AMPI], [test x$HAVE_AMPI = xyes])
++	dnl }}}
+ 	dnl rose{{{
+ 	AC_ARG_WITH([rose-dir],
+ 	  AS_HELP_STRING([--with-rose-dir=DIR], [rose root directory.]),
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15763)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15764)
+@@ -1,4 +1,4 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @GSLINCL@ @BOOSTINCL@ @ANDROID_NDKINCL@
++AM_CPPFLAGS = @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @AMPIINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @GSLINCL@ @BOOSTINCL@ @ANDROID_NDKINCL@
+ 
+ EXEEXT=$(ISSMEXT)
+ 
+@@ -941,7 +941,7 @@
+ libISSM_la_LIBADD = libISSMCore.la libISSMOverload.la
+ 
+ libISSMCore_la_SOURCES  = $(issm_sources)
+-libISSMCore_la_LIBADD = $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB)
++libISSMCore_la_LIBADD = $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(AMPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB)
+ libISSMCore_la_FFLAGS = $(AM_FFLAGS)
+ endif
+ 
+@@ -989,7 +989,7 @@
+ LDADD = ./libISSMCore.a ./libISSMOverload.a
+ 
+ #External packages
+-LDADD += $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB)
++LDADD += $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(AMPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB)
+ 
+ if FORTRAN
+ LDADD += $(FLIBS)
Index: /issm/oecreview/Archive/15392-16133/ISSM-15764-15765.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15764-15765.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15764-15765.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15764)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15765)
+@@ -34,9 +34,9 @@
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+ 
+ 	elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
+-
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15765-15766.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15765-15766.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15765-15766.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/Archives/Archive322.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive215.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive511.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15766-15767.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15766-15767.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15766-15767.diff	(revision 16134)
@@ -0,0 +1,5096 @@
+Index: ../trunk-jpl/test/Par/SquareEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 15767)
+@@ -41,9 +41,9 @@
+ pos=numpy.nonzero(md.mesh.y==200000.)    #nodes on the upper boundary condition
+ md.balancethickness.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ md.balancethickness.spcthickness[pos]=500.
+-md.prognostic.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-md.prognostic.spcthickness[pos]=500.
+-md.prognostic.stabilization=0    #Better result with no artificial diffusivity
++md.masstransport.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++md.masstransport.spcthickness[pos]=500.
++md.masstransport.stabilization=0    #Better result with no artificial diffusivity
+ md.thermal.stabilization=0
+ md.timestepping.final_time=500.
+ md.timestepping.time_step=1
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15766)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15767)
+@@ -83,7 +83,7 @@
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0
+-md.prognostic.stabilization=1
++md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+@@ -112,7 +112,7 @@
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.mask.icelevelset[pos]=0
+ md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+ md.diagnostic.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+ md.thermal.spctemperature=737.*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/79North.par
+===================================================================
+--- ../trunk-jpl/test/Par/79North.par	(revision 15766)
++++ ../trunk-jpl/test/Par/79North.par	(revision 15767)
+@@ -35,7 +35,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.3;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+@@ -50,7 +50,7 @@
+ md=SetMarineIceSheetBC(md);
+ pos=find(md.mesh.vertexonboundary);
+ md.balancethickness.spcthickness(pos)=md.geometry.thickness(pos);
+-md.prognostic.spcthickness(pos)=md.geometry.thickness(pos);
++md.masstransport.spcthickness(pos)=md.geometry.thickness(pos);
+ 
+ %Change name so that no test have the same name
+ A=dbstack;
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 15767)
+@@ -66,7 +66,7 @@
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot = 0.3
+-md.prognostic.stabilization = 1.
++md.masstransport.stabilization = 1.
+ md.thermal.stabilization = 1.
+ md.settings.waitonlock = 30
+ md.verbose=verbose()
+Index: ../trunk-jpl/test/Par/Pig.par
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.par	(revision 15766)
++++ ../trunk-jpl/test/Par/Pig.par	(revision 15767)
+@@ -34,7 +34,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.3;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+ md.timestepping.time_step=1;
+Index: ../trunk-jpl/test/Par/SquareShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.par	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareShelf.par	(revision 15767)
+@@ -35,7 +35,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.3;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.settings.waitonlock=30;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 15767)
+@@ -51,7 +51,7 @@
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0
+-md.prognostic.stabilization=1.
++md.masstransport.stabilization=1.
+ md.thermal.stabilization=1.
+ md.verbose = verbose(0)
+ md.settings.waitonlock=30
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 15766)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 15767)
+@@ -45,7 +45,7 @@
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.3
+-md.prognostic.stabilization=1.
++md.masstransport.stabilization=1.
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+ md.timestepping.time_step=1.
+Index: ../trunk-jpl/test/Par/ISMIPF.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPF.par	(revision 15766)
++++ ../trunk-jpl/test/Par/ISMIPF.par	(revision 15767)
+@@ -30,8 +30,8 @@
+ pos=find(md.mesh.x==min(md.mesh.x) | md.mesh.x==max(md.mesh.x) | md.mesh.y==min(md.mesh.y) | md.mesh.y==max(md.mesh.y));
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.balancethickness.spcthickness(pos)=md.geometry.thickness(pos);
+-md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+-md.prognostic.spcthickness(pos)=md.geometry.thickness(pos);
++md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.masstransport.spcthickness(pos)=md.geometry.thickness(pos);
+ md.thermal.spctemperature=255.*ones(md.mesh.numberofvertices,1);
+ md.basalforcings.geothermalflux=0.4*ones(md.mesh.numberofvertices,1);
+ 
+@@ -41,7 +41,7 @@
+ %Transient options
+ md.timestepping.time_step=1.;
+ md.timestepping.final_time=10.;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.thermal.penalty_threshold=10^5;
+ md.transient.isthermal=0;
+Index: ../trunk-jpl/test/Par/ISMIPF.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPF.py	(revision 15766)
++++ ../trunk-jpl/test/Par/ISMIPF.py	(revision 15767)
+@@ -33,8 +33,8 @@
+ pos=numpy.nonzero(numpy.logical_or(numpy.logical_or(md.mesh.x==numpy.min(md.mesh.x),md.mesh.x==numpy.max(md.mesh.x)),numpy.logical_or(md.mesh.y==numpy.min(md.mesh.y),md.mesh.y==numpy.max(md.mesh.y))))
+ md.balancethickness.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ md.balancethickness.spcthickness[pos]=md.geometry.thickness[pos]
+-md.prognostic.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-md.prognostic.spcthickness[pos]=md.geometry.thickness[pos]
++md.masstransport.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++md.masstransport.spcthickness[pos]=md.geometry.thickness[pos]
+ md.thermal.spctemperature=255.*numpy.ones((md.mesh.numberofvertices,1))
+ md.basalforcings.geothermalflux=0.4*numpy.ones((md.mesh.numberofvertices,1))
+ 
+@@ -44,7 +44,7 @@
+ #Transient options
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=10.
+-md.prognostic.stabilization=1
++md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.thermal.penalty_threshold=10**5
+ md.transient.isthermal=0
+Index: ../trunk-jpl/test/Par/GiaBenchmarksAB.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaBenchmarksAB.par	(revision 15766)
++++ ../trunk-jpl/test/Par/GiaBenchmarksAB.par	(revision 15767)
+@@ -52,7 +52,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0;
+-md.prognostic.stabilization=1.;
++md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15766)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15767)
+@@ -75,7 +75,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+@@ -102,7 +102,7 @@
+ 
+ md.mask.icelevelset(find(md.mesh.vertexonboundary))=0;
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+-md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+ md.diagnostic.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ md.thermal.spctemperature=737.*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 15767)
+@@ -35,7 +35,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.3;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.settings.waitonlock=30;
+ md.verbose=verbose(0);
+Index: ../trunk-jpl/test/Par/GiaBenchmarksCD.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaBenchmarksCD.par	(revision 15766)
++++ ../trunk-jpl/test/Par/GiaBenchmarksCD.par	(revision 15767)
+@@ -51,7 +51,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0;
+-md.prognostic.stabilization=1.;
++md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 15767)
+@@ -42,7 +42,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 15767)
+@@ -39,7 +39,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 15766)
++++ ../trunk-jpl/test/Par/79North.py	(revision 15767)
+@@ -47,7 +47,7 @@
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.3
+-md.prognostic.stabilization=1
++md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+@@ -62,7 +62,7 @@
+ md=SetMarineIceSheetBC(md)
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.balancethickness.spcthickness[pos]=md.geometry.thickness[pos]
+-md.prognostic.spcthickness[pos]=md.geometry.thickness[pos]
++md.masstransport.spcthickness[pos]=md.geometry.thickness[pos]
+ 
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 15767)
+@@ -53,7 +53,7 @@
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0
+-md.prognostic.stabilization=1
++md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 15767)
+@@ -37,7 +37,7 @@
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0;
+-md.prognostic.stabilization=1.;
++md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 15767)
+@@ -66,7 +66,7 @@
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot = 0.3
+-md.prognostic.stabilization = 1.
++md.masstransport.stabilization = 1.
+ md.thermal.stabilization = 1.
+ md.settings.waitonlock = 30
+ md.verbose=verbose()
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 15767)
+@@ -47,7 +47,7 @@
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0
+-md.prognostic.stabilization=1.
++md.masstransport.stabilization=1.
+ md.thermal.stabilization=1.
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+Index: ../trunk-jpl/test/Par/SquareEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 15766)
++++ ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 15767)
+@@ -38,9 +38,9 @@
+ pos=find(md.mesh.y==200000.); %nodes on the upper boundary condition
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.balancethickness.spcthickness(pos)=500.;
+-md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+-md.prognostic.spcthickness(pos)=500.;
+-md.prognostic.stabilization=0; %Better result with no artificial diffusivity
++md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.masstransport.spcthickness(pos)=500.;
++md.masstransport.stabilization=0; %Better result with no artificial diffusivity
+ md.thermal.stabilization=0;
+ md.timestepping.final_time=500.;
+ md.timestepping.time_step=1;
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 15767)
+@@ -15,7 +15,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md.thermal.isenthalpy=1
+Index: ../trunk-jpl/test/NightlyRun/test109.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test109.py	(revision 15767)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test222.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test222.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test222.m	(revision 15767)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.prognostic.hydrostatic_adjustment='Incremental';
++md.masstransport.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test107.m	(revision 15767)
+@@ -4,11 +4,11 @@
+ md=setflowequation(md,'SSA','all');
+ md=extrude(md,5,3.);
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1202.m	(revision 15767)
+@@ -1,4 +1,4 @@
+-%Test on the diagnostic model and the prognostic in 2d.
++%Test on the diagnostic model and the masstransport in 2d.
+ printingflag=false;
+ 
+ %tests 3 and 4: using Glen's flow law
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 15767)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md.autodiff.isautodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/test601.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test601.py	(revision 15767)
+@@ -12,11 +12,11 @@
+ md=parameterize(md,'../Par/79North.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test225.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test225.py	(revision 15767)
+@@ -15,7 +15,7 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.prognostic.hydrostatic_adjustment='Incremental'
++md.masstransport.hydrostatic_adjustment='Incremental'
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test223.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test223.m	(revision 15767)
+@@ -4,7 +4,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.prognostic.hydrostatic_adjustment='Incremental';
++md.masstransport.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3005.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3005.py	(revision 15767)
+@@ -14,11 +14,11 @@
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.autodiff.isautodiff=True
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test1203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1203.m	(revision 15767)
+@@ -1,4 +1,4 @@
+-%Test on the diagnostic model and the prognostic in 2d
++%Test on the diagnostic model and the masstransport in 2d
+ printingflag=false;
+ 
+ %test 5 and 6: 
+Index: ../trunk-jpl/test/NightlyRun/test310.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test310.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test310.py	(revision 15767)
+@@ -13,14 +13,14 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md=setflowequation(md,'SSA','all')
+-md.prognostic.stabilization=3
+-md.prognostic.spcthickness=md.geometry.thickness
++md.masstransport.stabilization=3
++md.masstransport.spcthickness=md.geometry.thickness
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test232.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test232.m	(revision 15767)
+@@ -8,7 +8,7 @@
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=4;
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test313.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test313.m	(revision 15767)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('convergence',true,'solution',true);
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1501.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1501.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1501.py	(revision 15767)
+@@ -27,11 +27,11 @@
+ md.surfaceforcings.mass_balance= smb
+ md.basalforcings.melting_rate= smb
+ 
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ for i in xrange(1,11):
+-	 md=solve(md,PrognosticSolutionEnum())
+-	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.PrognosticSolution.Thickness)-md.geometry.thickness)
++	 md=solve(md,MasstransportSolutionEnum())
++	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.MasstransportSolution.Thickness)-md.geometry.thickness)
+ 
+ #Set up transient
+ smb = md.surfaceforcings.mass_balance
+Index: ../trunk-jpl/test/NightlyRun/test105.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test105.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test105.py	(revision 15767)
+@@ -12,11 +12,11 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test602.py	(revision 15767)
+@@ -14,14 +14,14 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+ md=setflowequation(md,'SSA','all')
+-md.prognostic.stabilization=3
+-md.prognostic.spcthickness=md.geometry.thickness
++md.masstransport.stabilization=3
++md.masstransport.spcthickness=md.geometry.thickness
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test224.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test224.m	(revision 15767)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.prognostic.hydrostatic_adjustment='Incremental';
++md.masstransport.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test207.m	(revision 15767)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test109.m	(revision 15767)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1201.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1201.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1201.py	(revision 15767)
+@@ -17,7 +17,7 @@
+ results=[]
+ 
+ for stabilization in xrange(1,4):
+-	#The goal is to test the prognostic model
++	#The goal is to test the masstransport model
+ 	md=bamg(model(),'domain','../Exp/SquareEISMINT.exp','hmax',3000.)
+ 	md=setmask(md,'all','')
+ 	md=parameterize(md,'../Par/SquareEISMINT.py')
+@@ -31,19 +31,19 @@
+ 
+ 	#Stabilization
+ 	if stabilization==2:
+-		md.prognostic.stabilization=0
++		md.masstransport.stabilization=0
+ 	else:
+-		md.prognostic.stabilization=stabilization
++		md.masstransport.stabilization=stabilization
+ 
+ 	#spc thickness
+ 	pos=numpy.nonzero(md.mesh.y>199999.9)[0]
+ 	times=numpy.arange(0,501)
+-	md.prognostic.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices+1,numpy.size(times)))
+-	md.prognostic.spcthickness[-1,:]=times
+-	md.prognostic.spcthickness[pos,:]=numpy.tile(500.+100.*numpy.sin(2.*numpy.pi*times/200.),(numpy.size(pos),1))
++	md.masstransport.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices+1,numpy.size(times)))
++	md.masstransport.spcthickness[-1,:]=times
++	md.masstransport.spcthickness[pos,:]=numpy.tile(500.+100.*numpy.sin(2.*numpy.pi*times/200.),(numpy.size(pos),1))
+ 	if stabilization==3:
+-		pos=numpy.nonzero(numpy.isnan(md.prognostic.spcthickness))
+-		md.prognostic.spcthickness[pos]=500.    #No NaN for DG
++		pos=numpy.nonzero(numpy.isnan(md.masstransport.spcthickness))
++		md.masstransport.spcthickness[pos]=500.    #No NaN for DG
+ 
+ 	#solve
+ 	md.transient.isdiagnostic=False
+Index: ../trunk-jpl/test/NightlyRun/test1204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1204.m	(revision 15767)
+@@ -1,4 +1,4 @@
+-%Test on the diagnostic model and the prognostic in 2d
++%Test on the diagnostic model and the masstransport in 2d
+ printingflag=false;
+ 
+ %tests 3 and 4: using Glen's flow law
+@@ -22,7 +22,7 @@
+ 
+ md.timestepping.time_step=1.;
+ md.timestepping.final_time=5000.;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md=solve(md,TransientSolutionEnum());
+ 
+ plotmodel(md,'data',(md.results.TransientSolution(end).Vx))
+Index: ../trunk-jpl/test/NightlyRun/test611.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test611.py	(revision 15767)
+@@ -15,7 +15,7 @@
+ 
+ #control parameters
+ md.inversion.nsteps=2
+-md.prognostic.stabilization=1
++md.masstransport.stabilization=1
+ md.inversion.iscontrol=1
+ md.inversion.control_parameters=['BalancethicknessThickeningRate']
+ md.inversion.thickness_obs=md.geometry.thickness
+Index: ../trunk-jpl/test/NightlyRun/test423.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test423.py	(revision 15767)
+@@ -29,7 +29,7 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md.transient.isthermal=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isdiagnostic=True
+ md.transient.isgroundingline=True
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3006.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3006.py	(revision 15767)
+@@ -14,15 +14,15 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.prognostic.stabilization=3
+-md.prognostic.spcthickness=md.geometry.thickness
++md.masstransport.stabilization=3
++md.masstransport.spcthickness=md.geometry.thickness
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.autodiff.isautodiff=True
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test311.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test311.py	(revision 15767)
+@@ -13,11 +13,11 @@
+ md=setflowequation(md,'SSA','all')
+ md.extrude(5,0.5)
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 15767)
+@@ -5,7 +5,7 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.prognostic.hydrostatic_adjustment='Incremental';
++md.masstransport.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test1502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1502.py	(revision 15767)
+@@ -28,11 +28,11 @@
+ md.surfaceforcings.mass_balance= smb
+ md.basalforcings.melting_rate= smb
+ 
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ for i in xrange(1,11):
+-	 md=solve(md,PrognosticSolutionEnum())
+-	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.PrognosticSolution.Thickness)-md.geometry.thickness)
++	 md=solve(md,MasstransportSolutionEnum())
++	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.MasstransportSolution.Thickness)-md.geometry.thickness)
+ 
+ #Set up transient
+ smb = md.surfaceforcings.mass_balance
+Index: ../trunk-jpl/test/NightlyRun/test3015.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3015.py	(revision 15767)
+@@ -21,7 +21,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.prognostic.requested_outputs=IceVolumeEnum()
++md.masstransport.requested_outputs=IceVolumeEnum()
+ md.verbose=verbose('autodiff',True)
+ 
+ #setup autodiff parameters
+@@ -54,8 +54,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ md=SetIceShelfBC(md)
+ 
+-md=solve(md,PrognosticSolutionEnum())
+-V0=md.results.PrognosticSolution.IceVolume
++md=solve(md,MasstransportSolutionEnum())
++V0=md.results.MasstransportSolution.IceVolume
+ 
+ #backward
+ md=copy.deepcopy(md2)
+@@ -65,8 +65,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ md=SetIceShelfBC(md)
+ 
+-md=solve(md,PrognosticSolutionEnum())
+-V2=md.results.PrognosticSolution.IceVolume
++md=solve(md,MasstransportSolutionEnum())
++V2=md.results.MasstransportSolution.IceVolume
+ 
+ #compute resulting derivative
+ dVdh_an=(V2-V0)/deltaH
+@@ -79,9 +79,9 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ md=SetIceShelfBC(md)
+ 
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ #retrieve directly
+-dVdh_ad=md.results.PrognosticSolution.AutodiffJacobian
++dVdh_ad=md.results.MasstransportSolution.AutodiffJacobian
+ 
+ print "dV/dh: analytical:  #16.16g\n       using adolc:  #16.16g\n" % (dVdh_an,dVdh_ad)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test106.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test106.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test106.py	(revision 15767)
+@@ -14,13 +14,13 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.prognostic.stabilization=3
+-md.prognostic.spcthickness=md.geometry.thickness
+-md=solve(md,PrognosticSolutionEnum())
++md.masstransport.stabilization=3
++md.masstransport.spcthickness=md.geometry.thickness
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test603.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test603.py	(revision 15767)
+@@ -14,11 +14,11 @@
+ md.extrude(6,1.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test1202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1202.py	(revision 15767)
+@@ -9,7 +9,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-Test on the diagnostic model and the prognostic in 2d
++Test on the diagnostic model and the masstransport in 2d
+ """
+ 
+ printingflag=False
+Index: ../trunk-jpl/test/NightlyRun/test222.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test222.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test222.py	(revision 15767)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.prognostic.hydrostatic_adjustment='Incremental'
++md.masstransport.hydrostatic_adjustment='Incremental'
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test601.m	(revision 15767)
+@@ -3,11 +3,11 @@
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3007.py	(revision 15767)
+@@ -15,11 +15,11 @@
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.autodiff.isautodiff=True
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3005.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3005.m	(revision 15767)
+@@ -6,11 +6,11 @@
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test433.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test433.py	(revision 15767)
+@@ -30,7 +30,7 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md.transient.isthermal=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isdiagnostic=False
+ md.transient.isgroundingline=True
+ 
+Index: ../trunk-jpl/test/NightlyRun/test407.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test407.py	(revision 15767)
+@@ -15,7 +15,7 @@
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test326.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test326.py	(revision 15767)
+@@ -16,7 +16,7 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md.thermal.isenthalpy=1
+Index: ../trunk-jpl/test/NightlyRun/test1208.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1208.py	(revision 15767)
+@@ -34,7 +34,7 @@
+ md.timestepping.time_step=15.
+ md.settings.output_frequency=500
+ md.timestepping.final_time=30000.
+-md.prognostic.stabilization=1
++md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ 
+ #Now we can solve the problem 
+Index: ../trunk-jpl/test/NightlyRun/test107.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test107.py	(revision 15767)
+@@ -13,11 +13,11 @@
+ md=setflowequation(md,'SSA','all')
+ md.extrude(5,3.)
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 15767)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md.thermal.isenthalpy=1;
+Index: ../trunk-jpl/test/NightlyRun/test309.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test309.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test309.py	(revision 15767)
+@@ -12,11 +12,11 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,PrognosticSolutionEnum())
++md=solve(md,MasstransportSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.PrognosticSolution.Thickness,\
++	md.results.MasstransportSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test602.m	(revision 15767)
+@@ -3,14 +3,14 @@
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'SSA','all');
+-md.prognostic.stabilization=3;
+-md.prognostic.spcthickness=md.geometry.thickness;
++md.masstransport.stabilization=3;
++md.masstransport.spcthickness=md.geometry.thickness;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 15767)
+@@ -18,7 +18,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.transient.isthermal=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isdiagnostic=1;
+ md.transient.isgroundingline=1;
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1203.py	(revision 15767)
+@@ -10,7 +10,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-Test on the diagnostic model and the prognostic in 2d
++Test on the diagnostic model and the masstransport in 2d
+ """
+ 
+ printingflag=False
+Index: ../trunk-jpl/test/NightlyRun/test1501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1501.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1501.m	(revision 15767)
+@@ -16,11 +16,11 @@
+ md.surfaceforcings.mass_balance= smb;
+ md.basalforcings.melting_rate= smb;
+ 
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ for i=1:10
+-	 md=solve(md,PrognosticSolutionEnum());
+-	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.PrognosticSolution.Thickness)-md.geometry.thickness);
++	 md=solve(md,MasstransportSolutionEnum());
++	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.MasstransportSolution.Thickness)-md.geometry.thickness);
+ end
+ 
+ %Set up transient
+Index: ../trunk-jpl/test/NightlyRun/test3006.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3006.m	(revision 15767)
+@@ -4,16 +4,16 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.prognostic.stabilization=3;
+-md.prognostic.spcthickness=md.geometry.thickness;
++md.masstransport.stabilization=3;
++md.masstransport.spcthickness=md.geometry.thickness;
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test223.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test223.py	(revision 15767)
+@@ -14,7 +14,7 @@
+ md.geometry.bed=md.geometry.bed+50.
+ md.geometry.surface=md.geometry.surface+50.
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.prognostic.hydrostatic_adjustment='Incremental'
++md.masstransport.hydrostatic_adjustment='Incremental'
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test611.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test611.m	(revision 15767)
+@@ -5,7 +5,7 @@
+ 
+ %control parameters
+ md.inversion.nsteps=2;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'BalancethicknessThickeningRate'};
+ md.inversion.thickness_obs=md.geometry.thickness;
+Index: ../trunk-jpl/test/NightlyRun/test1110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1110.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1110.m	(revision 15767)
+@@ -46,12 +46,12 @@
+ 	posy2=find(md.mesh.y==max(md.mesh.y));
+ 
+ 	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
+-	md.prognostic.vertex_pairing=[posx,posx2;posy,posy2];
++	md.masstransport.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+ 	md.timestepping.time_step=3.;
+ 	md.timestepping.final_time=300.;
+ 	md.settings.output_frequency=50;
+-	md.prognostic.stabilization=1;
++	md.masstransport.stabilization=1;
+ 	md.diagnostic.maxiter=1;
+ 	
+ 	%Compute the diagnostic
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 15767)
+@@ -7,7 +7,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.prognostic.requested_outputs=IceVolumeEnum();
++md.masstransport.requested_outputs=IceVolumeEnum();
+ md.verbose=verbose('autodiff',true);
+ md.toolkits.DefaultAnalysis=issmsolver();
+ 
+@@ -41,8 +41,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,PrognosticSolutionEnum());
+-V0=md.results.PrognosticSolution.IceVolume;
++md=solve(md,MasstransportSolutionEnum());
++V0=md.results.MasstransportSolution.IceVolume;
+ 
+ %backward
+ md=md2;
+@@ -52,8 +52,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,PrognosticSolutionEnum());
+-V2=md.results.PrognosticSolution.IceVolume;
++md=solve(md,MasstransportSolutionEnum());
++V2=md.results.MasstransportSolution.IceVolume;
+ 
+ %compute resulting derivative
+ dVdh_an=(V2-V0)/deltaH;
+@@ -66,9 +66,9 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ %retrieve directly
+-dVdh_ad=md.results.PrognosticSolution.AutodiffJacobian;
++dVdh_ad=md.results.MasstransportSolution.AutodiffJacobian;
+ 
+ disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
+ 
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15767)
+@@ -9,9 +9,9 @@
+ 	case 102, name='SquareShelfConstrainedDiagSSA3d';
+ 	case 103, name='SquareShelfConstrainedDiagHO';
+ 	case 104, name='SquareShelfConstrainedDiagS3d';
+-	case 105, name='SquareShelfConstrainedProg2d';
+-	case 106, name='SquareShelfConstrainedProg2dDG';
+-	case 107, name='SquareShelfConstrainedProg3d';
++	case 105, name='SquareShelfConstrainedMasstransp2d';
++	case 106, name='SquareShelfConstrainedMasstransp2dDG';
++	case 107, name='SquareShelfConstrainedMasstransp3d';
+ 	case 108, name='SquareShelfConstrainedTherStea';
+ 	case 109, name='SquareShelfConstrainedTherTran';
+ 	case 110, name='SquareShelfConstrainedTranSSA2d';
+@@ -45,9 +45,9 @@
+ 	case 216, name='SquareShelfDiagSSA2dRift';
+ 	case 217, name='SquareShelfConstrained';
+ 	case 218, name='SquareShelfConstrainedDakotaB';
+-	case 219, name='SquareShelfDiagMHOTiling';
+-	case 220, name='SquareShelfDiagPS3dTiling';
+-	case 221, name='SquareShelfDiagMS3dTiling';
++	case 219, name='SquareShelfDiagSSAHOTiling';
++	case 220, name='SquareShelfDiagHOFS3dTiling';
++	case 221, name='SquareShelfDiagSSAFS3dTiling';
+ 	case 222, name='SquareShelfDiagSSA2dTransientIncrHydro';
+ 	case 223, name='SquareShelfDiagSSA2dTransientIncrNonHydro';
+ 	case 224, name='SquareShelfDiagHOTransientIncrHydro';
+@@ -80,9 +80,9 @@
+ 	case 306, name='SquareSheetConstrainedDiagHSSA3d';
+ 	case 307, name='SquareSheetConstrainedDiagHO';
+ 	case 308, name='SquareSheetConstrainedDiagS3d';
+-	case 309, name='SquareSheetConstrainedProg2d';
+-	case 320, name='SquareSheetConstrainedProg2dDG';
+-	case 311, name='SquareSheetConstrainedProg3d';
++	case 309, name='SquareSheetConstrainedMasstransp2d';
++	case 320, name='SquareSheetConstrainedMasstransp2dDG';
++	case 311, name='SquareSheetConstrainedMasstransp3d';
+ 	case 312, name='SquareSheetConstrainedTherStea';
+ 	case 313, name='SquareSheetConstrainedTherTran';
+ 	case 314, name='SquareSheetConstrainedTranSIA2d';
+@@ -122,10 +122,10 @@
+ 	case 416, name='SquareSheetShelfCMDragSteaHO';
+ 	case 417, name='SquareSheetShelfDiadSSA3dDakotaSamp';
+ 	case 418, name='SquareSheetShelfDiadSSA3dDakotaAreaAverage';
+-	case 419, name='SquareSheetShelfDiagMHOTiling';
++	case 419, name='SquareSheetShelfDiagSSAHOTiling';
+ 	case 420, name='SquareSheetShelfDakotaScaledResponse';
+-	case 421, name='SquareSheetShelfDiagPS3dTiling';
+-	case 422, name='SquareSheetShelfDiagMS3dTiling';
++	case 421, name='SquareSheetShelfDiagHOFS3dTiling';
++	case 422, name='SquareSheetShelfDiagSSAFS3dTiling';
+ 	case 423, name='RoundSheetShelfGLMigrationSSA2d';
+ 	case 424, name='SquareSheetShelfGroundingLine2dAgressive';
+ 	case 425, name='SquareSheetShelfGroundingLine2dSoft';
+@@ -154,9 +154,9 @@
+ 	case 514, name='PigBamgMesh';
+ 	case 515, name='PigTherTranSUPG';
+ 	case 516, name='PigTherSteaSUPG';
+-	case 601, name='79NorthProg2d';
+-	case 602, name='79NorthProg2dDG';
+-	case 603, name='79NorthProg3d';
++	case 601, name='79NorthMasstransp2d';
++	case 602, name='79NorthMasstransp2dDG';
++	case 603, name='79NorthMasstransp3d';
+ 	case 604, name='79NorthSurfSlop2d';
+ 	case 605, name='79NorthSurfSlop3d';
+ 	case 606, name='79NorthBedSlop2d';
+@@ -212,13 +212,13 @@
+ 	case 3002, name='SquareShelfConstrainedDiagSSA3dAdolc';
+ 	case 3003, name='SquareShelfConstrainedDiagHOAdolc';
+ 	case 3004, name='SquareShelfConstrainedDiagS3dAdolc';
+-	case 3005, name='SquareShelfConstrainedProg2dAdolc';
+-	case 3006, name='SquareShelfConstrainedProg2dDGAdolc';
+-	case 3007, name='SquareShelfConstrainedProg3dAdolc';
++	case 3005, name='SquareShelfConstrainedMasstransp2dAdolc';
++	case 3006, name='SquareShelfConstrainedMasstransp2dDGAdolc';
++	case 3007, name='SquareShelfConstrainedMasstransp3dAdolc';
+ 	case 3008, name='SquareShelfConstrainedTherSteaAdolc';
+ 	case 3009, name='SquareShelfConstrainedTherTranAdolc';
+ 	case 3010, name='SquareShelfConstrainedTranSSA2dAdolc';
+-	case 3015, name='SquareShelfConstrainedProg2dAdolcForwardDifference';
++	case 3015, name='SquareShelfConstrainedMasstransp2dAdolcForwardDifference';
+ 	case 3019, name='SquareShelfConstrainedTherTranAdolcReverseVsForward';
+ 
+ 	otherwise, name='N/A';
+Index: ../trunk-jpl/test/NightlyRun/test232.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test232.py	(revision 15767)
+@@ -18,7 +18,7 @@
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=4.
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test313.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test313.py	(revision 15767)
+@@ -15,7 +15,7 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.verbose=verbose('convergence',True,'solution',True)
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test105.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test105.m	(revision 15767)
+@@ -3,11 +3,11 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test515.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test515.py	(revision 15767)
+@@ -15,7 +15,7 @@
+ md.thermal.stabilization=2
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test603.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test603.m	(revision 15767)
+@@ -4,11 +4,11 @@
+ md=extrude(md,6,1.);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test326.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test326.m	(revision 15767)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md.thermal.isenthalpy=1;
+Index: ../trunk-jpl/test/NightlyRun/test407.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test407.m	(revision 15767)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test309.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test309.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test309.m	(revision 15767)
+@@ -3,11 +3,11 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 15767)
+@@ -17,11 +17,11 @@
+ md.surfaceforcings.mass_balance= smb;
+ md.basalforcings.melting_rate= smb;
+ 
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ for i=1:10
+-	 md=solve(md,PrognosticSolutionEnum());
+-	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.PrognosticSolution.Thickness)-md.geometry.thickness);
++	 md=solve(md,MasstransportSolutionEnum());
++	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.MasstransportSolution.Thickness)-md.geometry.thickness);
+ end
+ 
+ %Set up transient
+Index: ../trunk-jpl/test/NightlyRun/test3007.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3007.m	(revision 15767)
+@@ -7,11 +7,11 @@
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+ md.toolkits.DefaultAnalysis=issmsolver();
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1208.m	(revision 15767)
+@@ -21,7 +21,7 @@
+ md.timestepping.time_step=15.;
+ md.settings.output_frequency=500;
+ md.timestepping.final_time=30000.;
+-md.prognostic.stabilization=1;
++md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ 
+ %Now we can solve the problem 
+Index: ../trunk-jpl/test/NightlyRun/test310.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test310.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test310.m	(revision 15767)
+@@ -3,14 +3,14 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'SSA','all');
+-md.prognostic.stabilization=3;
+-md.prognostic.spcthickness=md.geometry.thickness;
++md.masstransport.stabilization=3;
++md.masstransport.spcthickness=md.geometry.thickness;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test433.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test433.m	(revision 15767)
+@@ -19,7 +19,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.transient.isthermal=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isdiagnostic=0;
+ md.transient.isgroundingline=1;
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1204.py	(revision 15767)
+@@ -10,7 +10,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-Test on the diagnostic model and the prognostic in 2d
++Test on the diagnostic model and the masstransport in 2d
+ """
+ 
+ printingflag=False
+@@ -36,7 +36,7 @@
+ 
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=5000.
+-md.prognostic.stabilization=1
++md.masstransport.stabilization=1
+ md=solve(md,TransientSolutionEnum())
+ 
+ #plotmodel(md,'data',(md.results.TransientSolution(end).Vx))
+Index: ../trunk-jpl/test/NightlyRun/test224.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test224.py	(revision 15767)
+@@ -13,7 +13,7 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.prognostic.hydrostatic_adjustment='Incremental'
++md.masstransport.hydrostatic_adjustment='Incremental'
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test106.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test106.m	(revision 15767)
+@@ -4,13 +4,13 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.prognostic.stabilization=3;
+-md.prognostic.spcthickness=md.geometry.thickness;
+-md=solve(md,PrognosticSolutionEnum());
++md.masstransport.stabilization=3;
++md.masstransport.spcthickness=md.geometry.thickness;
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1201.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test1201.m	(revision 15767)
+@@ -4,7 +4,7 @@
+ results={};
+ 
+ for stabilization=1:3;
+-	%The goal is to test the prognostic model
++	%The goal is to test the masstransport model
+ 	md=bamg(model(),'domain','../Exp/SquareEISMINT.exp','hmax',3000.);
+ 	md=setmask(md,'all','');
+ 	md=parameterize(md,'../Par/SquareEISMINT.par');
+@@ -18,19 +18,19 @@
+ 
+ 	%Stabilization
+ 	if stabilization==2,
+-		md.prognostic.stabilization=0;
++		md.masstransport.stabilization=0;
+ 	else
+-		md.prognostic.stabilization=stabilization;
++		md.masstransport.stabilization=stabilization;
+ 	end
+ 
+ 	%spc thickness
+ 	pos=find(md.mesh.y>199999.9);
+ 	times=0:1:500;
+-	md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices+1,length(times));
+-	md.prognostic.spcthickness(end,:)=times;
+-	md.prognostic.spcthickness(pos,:)=repmat(500.+100.*sin(2.*pi*times/200.),length(pos),1);
++	md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices+1,length(times));
++	md.masstransport.spcthickness(end,:)=times;
++	md.masstransport.spcthickness(pos,:)=repmat(500.+100.*sin(2.*pi*times/200.),length(pos),1);
+ 	if stabilization==3,
+-		pos=find(isnan(md.prognostic.spcthickness)); md.prognostic.spcthickness(pos)=500.; %No NaN for DG
++		pos=find(isnan(md.masstransport.spcthickness)); md.masstransport.spcthickness(pos)=500.; %No NaN for DG
+ 	end
+ 
+ 	%solve
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 15767)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md.toolkits.DefaultAnalysis=issmsolver()
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15767)
+@@ -13,9 +13,9 @@
+ 	102 : 'SquareShelfConstrainedDiagSSA3d',
+ 	103 : 'SquareShelfConstrainedDiagHO',
+ 	104 : 'SquareShelfConstrainedDiagS3d',
+-	105 : 'SquareShelfConstrainedProg2d',
+-	106 : 'SquareShelfConstrainedProg2dDG',
+-	107 : 'SquareShelfConstrainedProg3d',
++	105 : 'SquareShelfConstrainedMasstransp2d',
++	106 : 'SquareShelfConstrainedMasstransp2dDG',
++	107 : 'SquareShelfConstrainedMasstransp3d',
+ 	108 : 'SquareShelfConstrainedTherStea',
+ 	109 : 'SquareShelfConstrainedTherTran',
+ 	110 : 'SquareShelfConstrainedTranSSA2d',
+@@ -49,9 +49,9 @@
+ 	216 : 'SquareShelfDiagSSA2dRift',
+ 	217 : 'SquareShelfConstrained',
+ 	218 : 'SquareShelfConstrainedDakotaB',
+-	219 : 'SquareShelfDiagMHOTiling',
+-	220 : 'SquareShelfDiagPS3dTiling',
+-	221 : 'SquareShelfDiagMS3dTiling',
++	219 : 'SquareShelfDiagSSAHOTiling',
++	220 : 'SquareShelfDiagHOFS3dTiling',
++	221 : 'SquareShelfDiagSSAFS3dTiling',
+ 	222 : 'SquareShelfDiagSSA2dTransientIncrHydro',
+ 	223 : 'SquareShelfDiagSSA2dTransientIncrNonHydro',
+ 	224 : 'SquareShelfDiagHOTransientIncrHydro',
+@@ -84,9 +84,9 @@
+ 	306  : 'SquareSheetConstrainedDiagHSSA3d',
+ 	307  : 'SquareSheetConstrainedDiagHO',
+ 	308  : 'SquareSheetConstrainedDiagS3d',
+-	309  : 'SquareSheetConstrainedProg2d',
+-	320  : 'SquareSheetConstrainedProg2dDG',
+-	311  : 'SquareSheetConstrainedProg3d',
++	309  : 'SquareSheetConstrainedMasstransp2d',
++	320  : 'SquareSheetConstrainedMasstransp2dDG',
++	311  : 'SquareSheetConstrainedMasstransp3d',
+ 	312  : 'SquareSheetConstrainedTherStea',
+ 	313  : 'SquareSheetConstrainedTherTran',
+ 	314  : 'SquareSheetConstrainedTranSIA2d',
+@@ -126,10 +126,10 @@
+ 	416  : 'SquareSheetShelfCMDragSteaHO',
+ 	417  : 'SquareSheetShelfDiadSSA3dDakotaSamp',
+ 	418  : 'SquareSheetShelfDiadSSA3dDakotaAreaAverage',
+-	419  : 'SquareSheetShelfDiagMHOTiling',
++	419  : 'SquareSheetShelfDiagSSAHOTiling',
+ 	420  : 'SquareSheetShelfDakotaScaledResponse',
+-	421  : 'SquareSheetShelfDiagPS3dTiling',
+-	422  : 'SquareSheetShelfDiagMS3dTiling',
++	421  : 'SquareSheetShelfDiagHOFS3dTiling',
++	422  : 'SquareSheetShelfDiagSSAFS3dTiling',
+ 	423  : 'RoundSheetShelfGLMigrationSSA2d',
+ 	424  : 'SquareSheetShelfGroundingLine2dAgressive',
+ 	425  : 'SquareSheetShelfGroundingLine2dSoft',
+@@ -158,9 +158,9 @@
+ 	514  : 'PigBamgMesh',
+ 	515  : 'PigTherTranSUPG',
+ 	516  : 'PigTherSteaSUPG',
+-	601  : '79NorthProg2d',
+-	602  : '79NorthProg2dDG',
+-	603  : '79NorthProg3d',
++	601  : '79NorthMasstransp2d',
++	602  : '79NorthMasstransp2dDG',
++	603  : '79NorthMasstransp3d',
+ 	604  : '79NorthSurfSlop2d',
+ 	605  : '79NorthSurfSlop3d',
+ 	606  : '79NorthBedSlop2d',
+@@ -216,13 +216,13 @@
+ 	3002 : 'SquareShelfConstrainedDiagSSA3dAdolc',
+ 	3003 : 'SquareShelfConstrainedDiagHOAdolc',
+ 	3004 : 'SquareShelfConstrainedDiagS3dAdolc',
+-	3005 : 'SquareShelfConstrainedProg2dAdolc',
+-	3006 : 'SquareShelfConstrainedProg2dDGAdolc',
+-	3007 : 'SquareShelfConstrainedProg3dAdolc',
++	3005 : 'SquareShelfConstrainedMasstransp2dAdolc',
++	3006 : 'SquareShelfConstrainedMasstransp2dDGAdolc',
++	3007 : 'SquareShelfConstrainedMasstransp3dAdolc',
+ 	3008 : 'SquareShelfConstrainedTherSteaAdolc',
+ 	3009 : 'SquareShelfConstrainedTherTranAdolc',
+ 	3010 : 'SquareShelfConstrainedTranSSA2dAdolc',
+-	3015 : 'SquareShelfConstrainedProg2dAdolcForwardDifference',
++	3015 : 'SquareShelfConstrainedMasstransp2dAdolcForwardDifference',
+ 	3019 : 'SquareShelfConstrainedTherTranAdolcReverseVsForward',
+ 	}
+ 
+Index: ../trunk-jpl/test/NightlyRun/test311.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test311.m	(revision 15767)
+@@ -4,11 +4,11 @@
+ md=setflowequation(md,'SSA','all');
+ md=extrude(md,5,0.5);
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum());
++md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+ field_tolerances={1e-13};
+ field_values={...
+-	(md.results.PrognosticSolution.Thickness),...
++	(md.results.MasstransportSolution.Thickness),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.py	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test207.py	(revision 15767)
+@@ -15,7 +15,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=False
+-md.transient.isprognostic=False
++md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test515.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.m	(revision 15766)
++++ ../trunk-jpl/test/NightlyRun/test515.m	(revision 15767)
+@@ -6,7 +6,7 @@
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+-md.transient.isprognostic=0;
++md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15766)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15767)
+@@ -1522,23 +1522,23 @@
+ 	AM_CONDITIONAL([THERMAL], [test x$HAVE_THERMAL = xyes])
+ 	AC_MSG_RESULT($HAVE_THERMAL)
+ 	dnl }}}
+-	dnl with-prognostic{{{
+-	AC_ARG_WITH([prognostic],
+-		AS_HELP_STRING([--with-prognostic = YES], [compile with prognostic capabilities (default is yes)]),
+-		[PROGNOSTIC=$withval],[PROGNOSTIC=yes]) 
+-	AC_MSG_CHECKING(for prognostic capability compilation)
++	dnl with-masstransport{{{
++	AC_ARG_WITH([masstransport],
++		AS_HELP_STRING([--with-masstransport = YES], [compile with masstransport capabilities (default is yes)]),
++		[MASSTRANSPORT=$withval],[MASSTRANSPORT=yes]) 
++	AC_MSG_CHECKING(for masstransport capability compilation)
+ 
+-	if test "x$PROGNOSTIC" = "xyes"; then
++	if test "x$MASSTRANSPORT" = "xyes"; then
+ 
+ 		dnl defaults
+-		HAVE_PROGNOSTIC=yes
++		HAVE_MASSTRANSPORT=yes
+ 
+-		AC_DEFINE([_HAVE_PROGNOSTIC_],[1],[with prognostic capability])
++		AC_DEFINE([_HAVE_MASSTRANSPORT_],[1],[with masstransport capability])
+ 	else
+-		HAVE_PROGNOSTIC=no
++		HAVE_MASSTRANSPORT=no
+ 	fi
+-	AM_CONDITIONAL([PROGNOSTIC], [test x$HAVE_PROGNOSTIC = xyes])
+-	AC_MSG_RESULT($HAVE_PROGNOSTIC)
++	AM_CONDITIONAL([MASSTRANSPORT], [test x$HAVE_MASSTRANSPORT = xyes])
++	AC_MSG_RESULT($HAVE_MASSTRANSPORT)
+ 	dnl }}}
+ 	dnl with-control{{{
+ 	AC_ARG_WITH([control],
+Index: ../trunk-jpl/src/c/analyses/prognostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/prognostic_core.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/analyses/prognostic_core.cpp	(revision 15767)
+@@ -1,58 +0,0 @@
+-/*!\file: prognostic_core.cpp
+- * \brief: core of the prognostic solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void prognostic_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool save_results;
+-	bool issmbgradients,ispdd,isdelta18o;
+-	int  solution_type;
+-	int  *requested_outputs = NULL;
+-	int  numoutputs=0;
+-
+-	/*activate formulation: */
+-	femmodel->SetCurrentConfiguration(PrognosticAnalysisEnum);
+-
+-	/*recover parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+-	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
+-	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&numoutputs,PrognosticNumRequestedOutputsEnum);
+-	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,PrognosticRequestedOutputsEnum);
+-
+-	if(issmbgradients){
+-	  if(VerboseSolution())_printf_("	call smb gradients module\n\n");
+-	  SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	}
+-	if(ispdd){
+-		if(isdelta18o){
+-			if(VerboseSolution()) _printf0_("   call Delta18oParametrization module\n");
+-			Delta18oParameterizationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-		} 
+-		if(VerboseSolution()) _printf0_("   call positive degree day module\n");
+-		PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	}
+-	if(VerboseSolution()) _printf0_("   call computational core\n");
+-	solutionsequence_linear(femmodel);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
+-		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+-	}
+-
+-	if(solution_type==PrognosticSolutionEnum)femmodel->RequestedDependentsx();
+-
+-	/*Free ressources:*/
+-	xDelete<int>(requested_outputs);
+-}
+Index: ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 15767)
+@@ -92,11 +92,11 @@
+ 			_error_("ISSM was not compiled with transient capabilities. Exiting");
+ 			#endif
+ 			break;
+-		case PrognosticSolutionEnum:
+-			#ifdef _HAVE_PROGNOSTIC_
+-			solutioncore=&prognostic_core;
++		case MasstransportSolutionEnum:
++			#ifdef _HAVE_MASSTRANSPORT_
++			solutioncore=&masstransport_core;
+ 			#else
+-			_error_("ISSM was not compiled with prognostic capabilities. Exiting");
++			_error_("ISSM was not compiled with masstransport capabilities. Exiting");
+ 			#endif
+ 			break;
+ 
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15767)
+@@ -70,10 +70,10 @@
+ 			analyses[4]=BedSlopeAnalysisEnum;
+ 			break;
+ 
+-		case PrognosticSolutionEnum:
++		case MasstransportSolutionEnum:
+ 			numanalyses=1;
+ 			analyses=xNew<int>(numanalyses);
+-			analyses[0]=PrognosticAnalysisEnum;
++			analyses[0]=MasstransportAnalysisEnum;
+ 			break;
+ 
+ 		case BalancethicknessSolutionEnum:
+@@ -117,7 +117,7 @@
+ 			analyses[5]=ThermalAnalysisEnum;
+ 			analyses[6]=MeltingAnalysisEnum;
+ 			analyses[7]=EnthalpyAnalysisEnum;
+-			analyses[8]=PrognosticAnalysisEnum;
++			analyses[8]=MasstransportAnalysisEnum;
+ 			break;
+ 
+ 		default:
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15767)
+@@ -20,7 +20,7 @@
+ 
+ 	/*parameters: */
+ 	IssmDouble starttime,finaltime,dt,yts;
+-	bool   isdiagnostic,isprognostic,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
++	bool   isdiagnostic,ismasstransport,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
+ 	bool   save_results,dakota_analysis;
+ 	bool   time_adapt=false;
+ 	int    output_frequency;
+@@ -42,7 +42,7 @@
+ 	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
+ 	femmodel->parameters->FindParam(&time_adapt,TimesteppingTimeAdaptEnum);
+ 	femmodel->parameters->FindParam(&isdiagnostic,TransientIsdiagnosticEnum);
+-	femmodel->parameters->FindParam(&isprognostic,TransientIsprognosticEnum);
++	femmodel->parameters->FindParam(&ismasstransport,TransientIsmasstransportEnum);
+ 	femmodel->parameters->FindParam(&isthermal,TransientIsthermalEnum);
+ 	femmodel->parameters->FindParam(&isgia,TransientIsgiaEnum);
+ 	femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
+@@ -68,7 +68,7 @@
+ 		if(dim==2)InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+ 		if(isthermal && dim==3){
+ 			//Update Vertex Position after updating Thickness and Bed
+-			femmodel->SetCurrentConfiguration(PrognosticAnalysisEnum);
++			femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
+ 			femmodel->UpdateVertexPositionsx();
+ 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxMeshEnum,VxMeshEnum);
+ 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyMeshEnum,VyMeshEnum);
+@@ -125,9 +125,9 @@
+ 			#endif
+ 		}
+ 
+-		if(isprognostic){
++		if(ismasstransport){
+ 			if(VerboseSolution()) _printf0_("   computing new thickness\n");
+-			prognostic_core(femmodel);
++			masstransport_core(femmodel);
+ 			if(VerboseSolution()) _printf0_("   updating vertices positions\n");
+ 			femmodel->UpdateVertexPositionsx();
+ 		}
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 15766)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 15767)
+@@ -27,7 +27,7 @@
+ void bedslope_core(FemModel* femmodel);
+ void control_core(FemModel* femmodel);
+ void controltao_core(FemModel* femmodel);
+-void prognostic_core(FemModel* femmodel);
++void masstransport_core(FemModel* femmodel);
+ void balancethickness_core(FemModel* femmodel);
+ void slopecompute_core(FemModel* femmodel);
+ void steadystate_core(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 15767)
+@@ -0,0 +1,58 @@
++/*!\file: masstransport_core.cpp
++ * \brief: core of the masstransport solution 
++ */ 
++
++#include "./analyses.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void masstransport_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++	bool issmbgradients,ispdd,isdelta18o;
++	int  solution_type;
++	int  *requested_outputs = NULL;
++	int  numoutputs=0;
++
++	/*activate formulation: */
++	femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
++
++	/*recover parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
++	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
++	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
++
++	if(issmbgradients){
++	  if(VerboseSolution())_printf_("	call smb gradients module\n\n");
++	  SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	}
++	if(ispdd){
++		if(isdelta18o){
++			if(VerboseSolution()) _printf0_("   call Delta18oParametrization module\n");
++			Delta18oParameterizationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		} 
++		if(VerboseSolution()) _printf0_("   call positive degree day module\n");
++		PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	}
++	if(VerboseSolution()) _printf0_("   call computational core\n");
++	solutionsequence_linear(femmodel);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
++		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
++	}
++
++	if(solution_type==MasstransportSolutionEnum)femmodel->RequestedDependentsx();
++
++	/*Free ressources:*/
++	xDelete<int>(requested_outputs);
++}
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15766)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15767)
+@@ -186,14 +186,14 @@
+ 	MeshYEnum,
+ 	MeshZEnum,
+ 	MiscellaneousNameEnum, //FIXME: only used by qmu, should not be marshalled (already in queueing script)
+-	PrognosticHydrostaticAdjustmentEnum,
+-	PrognosticMinThicknessEnum,
+-	PrognosticPenaltyFactorEnum,
+-	PrognosticSpcthicknessEnum,
+-	PrognosticStabilizationEnum,
+-	PrognosticVertexPairingEnum,
+-	PrognosticNumRequestedOutputsEnum,
+-	PrognosticRequestedOutputsEnum,
++	MasstransportHydrostaticAdjustmentEnum,
++	MasstransportMinThicknessEnum,
++	MasstransportPenaltyFactorEnum,
++	MasstransportSpcthicknessEnum,
++	MasstransportStabilizationEnum,
++	MasstransportVertexPairingEnum,
++	MasstransportNumRequestedOutputsEnum,
++	MasstransportRequestedOutputsEnum,
+ 	QmuIsdakotaEnum,
+ 	MassFluxSegmentsEnum,
+ 	MassFluxSegmentsPresentEnum,
+@@ -255,7 +255,7 @@
+ 	TimesteppingTimeStepEnum,
+ 	TransientIsdiagnosticEnum,
+ 	TransientIsgroundinglineEnum,
+-	TransientIsprognosticEnum,
++	TransientIsmasstransportEnum,
+ 	TransientIsthermalEnum,
+ 	TransientIsgiaEnum,
+ 	TransientNumRequestedOutputsEnum,
+@@ -292,8 +292,8 @@
+ 	HydrologyDCEfficientAnalysisEnum,
+ 	HydrologySolutionEnum,
+ 	MeltingAnalysisEnum,
+-	PrognosticAnalysisEnum,
+-	PrognosticSolutionEnum,
++	MasstransportAnalysisEnum,
++	MasstransportSolutionEnum,
+ 	SteadystateSolutionEnum,
+ 	SurfaceSlopeAnalysisEnum,
+ 	SurfaceSlopeSolutionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15767)
+@@ -194,14 +194,14 @@
+ 		case MeshYEnum : return "MeshY";
+ 		case MeshZEnum : return "MeshZ";
+ 		case MiscellaneousNameEnum : return "MiscellaneousName";
+-		case PrognosticHydrostaticAdjustmentEnum : return "PrognosticHydrostaticAdjustment";
+-		case PrognosticMinThicknessEnum : return "PrognosticMinThickness";
+-		case PrognosticPenaltyFactorEnum : return "PrognosticPenaltyFactor";
+-		case PrognosticSpcthicknessEnum : return "PrognosticSpcthickness";
+-		case PrognosticStabilizationEnum : return "PrognosticStabilization";
+-		case PrognosticVertexPairingEnum : return "PrognosticVertexPairing";
+-		case PrognosticNumRequestedOutputsEnum : return "PrognosticNumRequestedOutputs";
+-		case PrognosticRequestedOutputsEnum : return "PrognosticRequestedOutputs";
++		case MasstransportHydrostaticAdjustmentEnum : return "MasstransportHydrostaticAdjustment";
++		case MasstransportMinThicknessEnum : return "MasstransportMinThickness";
++		case MasstransportPenaltyFactorEnum : return "MasstransportPenaltyFactor";
++		case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness";
++		case MasstransportStabilizationEnum : return "MasstransportStabilization";
++		case MasstransportVertexPairingEnum : return "MasstransportVertexPairing";
++		case MasstransportNumRequestedOutputsEnum : return "MasstransportNumRequestedOutputs";
++		case MasstransportRequestedOutputsEnum : return "MasstransportRequestedOutputs";
+ 		case QmuIsdakotaEnum : return "QmuIsdakota";
+ 		case MassFluxSegmentsEnum : return "MassFluxSegments";
+ 		case MassFluxSegmentsPresentEnum : return "MassFluxSegmentsPresent";
+@@ -263,7 +263,7 @@
+ 		case TimesteppingTimeStepEnum : return "TimesteppingTimeStep";
+ 		case TransientIsdiagnosticEnum : return "TransientIsdiagnostic";
+ 		case TransientIsgroundinglineEnum : return "TransientIsgroundingline";
+-		case TransientIsprognosticEnum : return "TransientIsprognostic";
++		case TransientIsmasstransportEnum : return "TransientIsmasstransport";
+ 		case TransientIsthermalEnum : return "TransientIsthermal";
+ 		case TransientIsgiaEnum : return "TransientIsgia";
+ 		case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs";
+@@ -298,8 +298,8 @@
+ 		case HydrologyDCEfficientAnalysisEnum : return "HydrologyDCEfficientAnalysis";
+ 		case HydrologySolutionEnum : return "HydrologySolution";
+ 		case MeltingAnalysisEnum : return "MeltingAnalysis";
+-		case PrognosticAnalysisEnum : return "PrognosticAnalysis";
+-		case PrognosticSolutionEnum : return "PrognosticSolution";
++		case MasstransportAnalysisEnum : return "MasstransportAnalysis";
++		case MasstransportSolutionEnum : return "MasstransportSolution";
+ 		case SteadystateSolutionEnum : return "SteadystateSolution";
+ 		case SurfaceSlopeAnalysisEnum : return "SurfaceSlopeAnalysis";
+ 		case SurfaceSlopeSolutionEnum : return "SurfaceSlopeSolution";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15767)
+@@ -197,14 +197,14 @@
+ 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
+ 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+ 	      else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum;
+-	      else if (strcmp(name,"PrognosticHydrostaticAdjustment")==0) return PrognosticHydrostaticAdjustmentEnum;
+-	      else if (strcmp(name,"PrognosticMinThickness")==0) return PrognosticMinThicknessEnum;
+-	      else if (strcmp(name,"PrognosticPenaltyFactor")==0) return PrognosticPenaltyFactorEnum;
+-	      else if (strcmp(name,"PrognosticSpcthickness")==0) return PrognosticSpcthicknessEnum;
+-	      else if (strcmp(name,"PrognosticStabilization")==0) return PrognosticStabilizationEnum;
+-	      else if (strcmp(name,"PrognosticVertexPairing")==0) return PrognosticVertexPairingEnum;
+-	      else if (strcmp(name,"PrognosticNumRequestedOutputs")==0) return PrognosticNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"PrognosticRequestedOutputs")==0) return PrognosticRequestedOutputsEnum;
++	      else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum;
++	      else if (strcmp(name,"MasstransportMinThickness")==0) return MasstransportMinThicknessEnum;
++	      else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum;
++	      else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
++	      else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
++	      else if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum;
++	      else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
++	      else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
+ 	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
+ 	      else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
+ 	      else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
+@@ -269,7 +269,7 @@
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+ 	      else if (strcmp(name,"TransientIsdiagnostic")==0) return TransientIsdiagnosticEnum;
+ 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
+-	      else if (strcmp(name,"TransientIsprognostic")==0) return TransientIsprognosticEnum;
++	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+ 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+ 	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+ 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+@@ -304,8 +304,8 @@
+ 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+ 	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+ 	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+-	      else if (strcmp(name,"PrognosticAnalysis")==0) return PrognosticAnalysisEnum;
+-	      else if (strcmp(name,"PrognosticSolution")==0) return PrognosticSolutionEnum;
++	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
++	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+ 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 15767)
+@@ -1,83 +0,0 @@
+-/*! \file CreateLoadsPrognostic.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel){
+-
+-	/*Intermediaries*/
+-	int element;
+-	int penpair_ids[2];
+-	int count=0;
+-	int stabilization;
+-	int numvertex_pairing;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Loads only in DG*/
+-	if (stabilization==3){
+-
+-		/*Get faces and elements*/
+-		CreateFaces(iomodel);
+-		iomodel->FetchData(1,ThicknessEnum);
+-
+-		/*First load data:*/
+-		for(int i=0;i<iomodel->numberoffaces;i++){
+-
+-			/*Get left and right elements*/
+-			element=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
+-
+-			/*Now, if this element is not in the partition, pass: */
+-			if(!iomodel->my_elements[element]) continue;
+-
+-			/* Add load */
+-			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,PrognosticAnalysisEnum));
+-		}
+-
+-		/*Free data: */
+-		iomodel->DeleteData(1,ThicknessEnum);
+-	}
+-
+-	/*Create Penpair for vertex_pairing: */
+-	IssmDouble *vertex_pairing=NULL;
+-	IssmDouble *nodeonbed=NULL;
+-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,PrognosticVertexPairingEnum);
+-	iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-
+-	for(int i=0;i<numvertex_pairing;i++){
+-
+-		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
+-
+-			/*In debugging mode, check that the second node is in the same cpu*/
+-			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
+-
+-			/*Skip if one of the two is not on the bed*/
+-			if(!(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
+-
+-			/*Get node ids*/
+-			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
+-			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
+-
+-			/*Create Load*/
+-			loads->AddObject(new Penpair(
+-							iomodel->loadcounter+count+1,
+-							&penpair_ids[0],
+-							PrognosticAnalysisEnum));
+-			count++;
+-		}
+-	}
+-
+-	/*free ressources: */
+-	iomodel->DeleteData(vertex_pairing,PrognosticVertexPairingEnum);
+-	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 15767)
+@@ -1,23 +0,0 @@
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsPrognostic(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int stabilization;
+-	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*Do not add constraints in DG, they are weakly imposed*/
+-	if(stabilization!=3){
+-		IoModelToConstraintsx(constraints,iomodel,PrognosticSpcthicknessEnum,PrognosticAnalysisEnum,P1Enum);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 15767)
+@@ -1,29 +0,0 @@
+-/*
+- * CreateNodesPrognostic.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesPrognostic(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int  stabilization;
+-	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+-
+-	/*Check in 3d*/
+-	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+-
+-	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+-	if(stabilization!=3){
+-		CreateNodes(pnodes,iomodel,PrognosticAnalysisEnum,P1Enum);
+-	}
+-	else{
+-		CreateNodes(pnodes,iomodel,PrognosticAnalysisEnum,P1DGEnum);
+-	}
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15767)
+@@ -1,99 +0,0 @@
+-/*
+- * UpdateElementsPrognostic:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	int    stabilization,finiteelement;
+-	bool   dakota_analysis;
+-	bool   issmbgradients;
+-	bool   ispdd;
+-	bool   isdelta18o;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
+-	iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+-	iomodel->Constant(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+-
+-	/*Finite element type*/
+-	finiteelement = P1Enum;
+-	if(stabilization==3){
+-		finiteelement = P1DGEnum;
+-	}
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,BathymetryEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-
+-	if(stabilization==3){
+-		iomodel->FetchDataToInput(elements,PrognosticSpcthicknessEnum); //for DG, we need the spc in the element
+-	}
+-
+-	if(dakota_analysis){
+-		elements->InputDuplicate(BedEnum,QmuBedEnum);
+-		elements->InputDuplicate(ThicknessEnum,QmuThicknessEnum);
+-		elements->InputDuplicate(SurfaceEnum,QmuSurfaceEnum);
+-		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
+-		elements->InputDuplicate(VxEnum,QmuVxEnum);
+-		elements->InputDuplicate(VyEnum,QmuVyEnum);
+-	}
+-
+-	if(iomodel->dim==3){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-		iomodel->FetchDataToInput(elements,PressureEnum);
+-		iomodel->FetchDataToInput(elements,TemperatureEnum);
+-		iomodel->FetchDataToInput(elements,VzEnum);
+-		if(dakota_analysis){
+-			elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+-			elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+-			elements->InputDuplicate(VzEnum,QmuVzEnum);
+-		}
+-	}
+-	if(issmbgradients){
+-	        iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
+-	        iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
+-	        iomodel->FetchDataToInput(elements,SurfaceforcingsBPosEnum);
+-	        iomodel->FetchDataToInput(elements,SurfaceforcingsBNegEnum);
+-	}
+-	if(ispdd){
+-		iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
+-		if(isdelta18o){
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesLgmEnum);
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesPresentdayEnum);
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsPresentdayEnum);
+-		}
+-		else{
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationEnum);
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
+-		}
+-	}
+-	if(~ispdd & ~issmbgradients){
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 15767)
+@@ -0,0 +1,99 @@
++/*
++ * UpdateElementsMasstransport:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsMasstransport(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	int    stabilization,finiteelement;
++	bool   dakota_analysis;
++	bool   issmbgradients;
++	bool   ispdd;
++	bool   isdelta18o;
++
++	/*Fetch data needed: */
++	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
++	iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
++	iomodel->Constant(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
++
++	/*Finite element type*/
++	finiteelement = P1Enum;
++	if(stabilization==3){
++		finiteelement = P1DGEnum;
++	}
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,BathymetryEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++
++	if(stabilization==3){
++		iomodel->FetchDataToInput(elements,MasstransportSpcthicknessEnum); //for DG, we need the spc in the element
++	}
++
++	if(dakota_analysis){
++		elements->InputDuplicate(BedEnum,QmuBedEnum);
++		elements->InputDuplicate(ThicknessEnum,QmuThicknessEnum);
++		elements->InputDuplicate(SurfaceEnum,QmuSurfaceEnum);
++		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
++		elements->InputDuplicate(VxEnum,QmuVxEnum);
++		elements->InputDuplicate(VyEnum,QmuVyEnum);
++	}
++
++	if(iomodel->dim==3){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++		iomodel->FetchDataToInput(elements,PressureEnum);
++		iomodel->FetchDataToInput(elements,TemperatureEnum);
++		iomodel->FetchDataToInput(elements,VzEnum);
++		if(dakota_analysis){
++			elements->InputDuplicate(PressureEnum,QmuPressureEnum);
++			elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
++			elements->InputDuplicate(VzEnum,QmuVzEnum);
++		}
++	}
++	if(issmbgradients){
++	        iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
++	        iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
++	        iomodel->FetchDataToInput(elements,SurfaceforcingsBPosEnum);
++	        iomodel->FetchDataToInput(elements,SurfaceforcingsBNegEnum);
++	}
++	if(ispdd){
++		iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
++		if(isdelta18o){
++			iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesLgmEnum);
++			iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesPresentdayEnum);
++			iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsPresentdayEnum);
++		}
++		else{
++			iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationEnum);
++			iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
++		}
++	}
++	if(~ispdd & ~issmbgradients){
++		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp	(revision 15767)
+@@ -0,0 +1,83 @@
++/*! \file CreateLoadsMasstransport.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsMasstransport(Loads** ploads, IoModel* iomodel){
++
++	/*Intermediaries*/
++	int element;
++	int penpair_ids[2];
++	int count=0;
++	int stabilization;
++	int numvertex_pairing;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Loads only in DG*/
++	if (stabilization==3){
++
++		/*Get faces and elements*/
++		CreateFaces(iomodel);
++		iomodel->FetchData(1,ThicknessEnum);
++
++		/*First load data:*/
++		for(int i=0;i<iomodel->numberoffaces;i++){
++
++			/*Get left and right elements*/
++			element=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
++
++			/*Now, if this element is not in the partition, pass: */
++			if(!iomodel->my_elements[element]) continue;
++
++			/* Add load */
++			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,MasstransportAnalysisEnum));
++		}
++
++		/*Free data: */
++		iomodel->DeleteData(1,ThicknessEnum);
++	}
++
++	/*Create Penpair for vertex_pairing: */
++	IssmDouble *vertex_pairing=NULL;
++	IssmDouble *nodeonbed=NULL;
++	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
++	iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++
++	for(int i=0;i<numvertex_pairing;i++){
++
++		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
++
++			/*In debugging mode, check that the second node is in the same cpu*/
++			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
++
++			/*Skip if one of the two is not on the bed*/
++			if(!(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
++
++			/*Get node ids*/
++			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
++			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
++
++			/*Create Load*/
++			loads->AddObject(new Penpair(
++							iomodel->loadcounter+count+1,
++							&penpair_ids[0],
++							MasstransportAnalysisEnum));
++			count++;
++		}
++	}
++
++	/*free ressources: */
++	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
++	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp	(revision 15767)
+@@ -0,0 +1,23 @@
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
++
++void	CreateConstraintsMasstransport(Constraints** pconstraints, IoModel* iomodel){
++
++	/*Fetch parameters: */
++	int stabilization;
++	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*Do not add constraints in DG, they are weakly imposed*/
++	if(stabilization!=3){
++		IoModelToConstraintsx(constraints,iomodel,MasstransportSpcthicknessEnum,MasstransportAnalysisEnum,P1Enum);
++	}
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 15767)
+@@ -0,0 +1,29 @@
++/*
++ * CreateNodesMasstransport.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesMasstransport(Nodes** pnodes, IoModel* iomodel){
++
++	/*Fetch parameters: */
++	int  stabilization;
++	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
++
++	/*Check in 3d*/
++	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
++
++	/*Create Nodes either DG or CG depending on stabilization*/
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	if(stabilization!=3){
++		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
++	}
++	else{
++		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1DGEnum);
++	}
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15767)
+@@ -98,11 +98,11 @@
+ void CreateLoadsMelting(Loads** ploads, IoModel* iomodel);
+ void UpdateElementsMelting(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+-/*prognostic:*/
+-void CreateNodesPrognostic(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsPrognostic(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsPrognostic(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsPrognostic(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++/*masstransport:*/
++void CreateNodesMasstransport(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsMasstransport(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsMasstransport(Loads** ploads, IoModel* iomodel);
++void UpdateElementsMasstransport(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*balancedthickness:*/
+ void CreateNodesBalancethickness(Nodes** pnodes,IoModel* iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15767)
+@@ -99,7 +99,7 @@
+ 		case MeltingAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+-		case PrognosticAnalysisEnum:
++		case MasstransportAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+ 		case GiaAnalysisEnum:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15767)
+@@ -64,11 +64,11 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeAdaptEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(PrognosticHydrostaticAdjustmentEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(PrognosticStabilizationEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(MasstransportHydrostaticAdjustmentEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(MasstransportStabilizationEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticPenaltyFactorEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(PrognosticMinThicknessEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(PrognosticPenaltyFactorEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(MasstransportMinThicknessEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(MasstransportPenaltyFactorEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyFactorEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsLowmemEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DebugProfilingEnum));
+@@ -92,7 +92,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsResultsAsPatchesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsdiagnosticEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(TransientIsprognosticEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(TransientIsmasstransportEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsthermalEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsgroundinglineEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsgiaEnum));
+@@ -161,10 +161,10 @@
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(SteadystateRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,SteadystateRequestedOutputsEnum);
+ 
+-	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,PrognosticRequestedOutputsEnum);
+-	parameters->AddObject(new IntParam(PrognosticNumRequestedOutputsEnum,numoutputs));
+-	if(numoutputs)parameters->AddObject(new IntVecParam(PrognosticRequestedOutputsEnum,requestedoutputs,numoutputs));
+-	iomodel->DeleteData(requestedoutputs,PrognosticRequestedOutputsEnum);
++	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,MasstransportRequestedOutputsEnum);
++	parameters->AddObject(new IntParam(MasstransportNumRequestedOutputsEnum,numoutputs));
++	if(numoutputs)parameters->AddObject(new IntVecParam(MasstransportRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(requestedoutputs,MasstransportRequestedOutputsEnum);
+ 
+ 	/*Deal with mass flux segments: {{{*/
+ 	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15767)
+@@ -15,7 +15,7 @@
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){
+ 
+ 	int   i,analysis_type,verbose;
+-	bool  isthermal,isprognostic,isdiagnostic,isgroundingline,isenthalpy;
++	bool  isthermal,ismasstransport,isdiagnostic,isgroundingline,isenthalpy;
+ 
+ 	/*output: */
+ 	Elements    *elements    = NULL;
+@@ -33,7 +33,7 @@
+ 	iomodel->Constant(&verbose,VerboseEnum);
+ 	iomodel->Constant(&isthermal,TransientIsthermalEnum);
+ 	iomodel->Constant(&isenthalpy,ThermalIsenthalpyEnum);
+-	iomodel->Constant(&isprognostic,TransientIsprognosticEnum);
++	iomodel->Constant(&ismasstransport,TransientIsmasstransportEnum);
+ 	iomodel->Constant(&isdiagnostic,TransientIsdiagnosticEnum);
+ 	iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
+ 
+@@ -55,7 +55,7 @@
+ 		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==PrognosticAnalysisEnum && isprognostic==false && isgroundingline==false) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==MasstransportAnalysisEnum && ismasstransport==false && isgroundingline==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticHorizAnalysisEnum && isdiagnostic==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticVertAnalysisEnum && isdiagnostic==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticSIAAnalysisEnum && isdiagnostic==false) continue;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15767)
+@@ -116,7 +116,7 @@
+ 		}
+ 	}
+ 	xDelete<int>(vertex_pairing);
+-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,PrognosticVertexPairingEnum);
++	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
+ 	for(i=0;i<numvertex_pairing;i++){
+ 		if(my_vertices[vertex_pairing[2*i+0]-1] && !my_vertices[vertex_pairing[2*i+1]-1]){
+ 			my_vertices[vertex_pairing[2*i+1]-1]=2; //to know that these elements are not on the partition
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15767)
+@@ -140,12 +140,12 @@
+ 			break;
+ 		#endif
+ 
+-		#ifdef _HAVE_PROGNOSTIC_
+-		case PrognosticAnalysisEnum:
+-			CreateNodesPrognostic(pnodes, iomodel);
+-			CreateConstraintsPrognostic(pconstraints,iomodel);
+-			CreateLoadsPrognostic(ploads,iomodel);
+-			UpdateElementsPrognostic(elements,iomodel,analysis_counter,analysis_type);
++		#ifdef _HAVE_MASSTRANSPORT_
++		case MasstransportAnalysisEnum:
++			CreateNodesMasstransport(pnodes, iomodel);
++			CreateConstraintsMasstransport(pconstraints,iomodel);
++			CreateLoadsMasstransport(ploads,iomodel);
++			UpdateElementsMasstransport(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15766)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15767)
+@@ -365,12 +365,12 @@
+ #Steadystate sources  {{{
+ steadystate_sources = ./analyses/steadystate_core.cpp
+ #}}}
+-#Prognostic sources  {{{
+-prognostic_sources = ./modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp\
+-					      ./modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp\
+-					      ./modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp\
+-					      ./modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp\
+-							./analyses/prognostic_core.cpp
++#Masstransport sources  {{{
++masstransport_sources = ./modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp\
++					      ./modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp\
++					      ./modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp\
++					      ./modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp\
++							./analyses/masstransport_core.cpp
+ #}}}
+ #Thermal sources  {{{
+ thermal_sources = ./modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\
+@@ -869,8 +869,8 @@
+ issm_sources  +=  $(steadystate_sources)
+ endif
+ 
+-if PROGNOSTIC
+-issm_sources  +=  $(prognostic_sources)
++if MASSTRANSPORT
++issm_sources  +=  $(masstransport_sources)
+ endif
+ 
+ if THERMAL
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15767)
+@@ -253,8 +253,8 @@
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-		case PrognosticAnalysisEnum:
+-			Ke=CreateKMatrixPrognostic();
++		case MasstransportAnalysisEnum:
++			Ke=CreateKMatrixMasstransport();
+ 			break;
+ 		case BalancethicknessAnalysisEnum:
+ 			Ke=CreateKMatrixBalancethickness();
+@@ -283,8 +283,8 @@
+ 	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	switch(analysis_type){
+-		case PrognosticAnalysisEnum:
+-			pe=CreatePVectorPrognostic();
++		case MasstransportAnalysisEnum:
++			pe=CreatePVectorMasstransport();
+ 			break;
+ 		case BalancethicknessAnalysisEnum:
+ 			pe=CreatePVectorBalancethickness();
+@@ -421,24 +421,24 @@
+ /*}}}*/
+ 
+ /*Numericalflux management*/
+-/*FUNCTION Numericalflux::CreateKMatrixPrognostic{{{*/
+-ElementMatrix* Numericalflux::CreateKMatrixPrognostic(void){
++/*FUNCTION Numericalflux::CreateKMatrixMasstransport{{{*/
++ElementMatrix* Numericalflux::CreateKMatrixMasstransport(void){
+ 
+ 	int type;
+ 	inputs->GetInputValue(&type,NumericalfluxTypeEnum);
+ 
+ 	switch(type){
+ 		case InternalEnum:
+-			return CreateKMatrixPrognosticInternal();
++			return CreateKMatrixMasstransportInternal();
+ 		case BoundaryEnum:
+-			return CreateKMatrixPrognosticBoundary();
++			return CreateKMatrixMasstransportBoundary();
+ 		default:
+ 			_error_("type not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Numericalflux::CreateKMatrixPrognosticInternal {{{*/
+-ElementMatrix* Numericalflux::CreateKMatrixPrognosticInternal(void){
++/*FUNCTION Numericalflux::CreateKMatrixMasstransportInternal {{{*/
++ElementMatrix* Numericalflux::CreateKMatrixMasstransportInternal(void){
+ 
+ 	/* constants*/
+ 	const int numdof=NDOF1*NUMNODES_INTERNAL;
+@@ -502,8 +502,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Numericalflux::CreateKMatrixPrognosticBoundary {{{*/
+-ElementMatrix* Numericalflux::CreateKMatrixPrognosticBoundary(void){
++/*FUNCTION Numericalflux::CreateKMatrixMasstransportBoundary {{{*/
++ElementMatrix* Numericalflux::CreateKMatrixMasstransportBoundary(void){
+ 
+ 	/* constants*/
+ 	const int numdof=NDOF1*NUMNODES_BOUNDARY;
+@@ -757,32 +757,32 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Numericalflux::CreatePVectorPrognostic{{{*/
+-ElementVector* Numericalflux::CreatePVectorPrognostic(void){
++/*FUNCTION Numericalflux::CreatePVectorMasstransport{{{*/
++ElementVector* Numericalflux::CreatePVectorMasstransport(void){
+ 
+ 	int type;
+ 	inputs->GetInputValue(&type,NumericalfluxTypeEnum);
+ 
+ 	switch(type){
+ 		case InternalEnum:
+-			return CreatePVectorPrognosticInternal();
++			return CreatePVectorMasstransportInternal();
+ 		case BoundaryEnum:
+-			return CreatePVectorPrognosticBoundary();
++			return CreatePVectorMasstransportBoundary();
+ 		default:
+ 			_error_("type not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Numericalflux::CreatePVectorPrognosticInternal{{{*/
+-ElementVector* Numericalflux::CreatePVectorPrognosticInternal(void){
++/*FUNCTION Numericalflux::CreatePVectorMasstransportInternal{{{*/
++ElementVector* Numericalflux::CreatePVectorMasstransportInternal(void){
+ 
+ 	/*Nothing added to PVector*/
+ 	return NULL;
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Numericalflux::CreatePVectorPrognosticBoundary{{{*/
+-ElementVector* Numericalflux::CreatePVectorPrognosticBoundary(void){
++/*FUNCTION Numericalflux::CreatePVectorMasstransportBoundary{{{*/
++ElementVector* Numericalflux::CreatePVectorMasstransportBoundary(void){
+ 
+ 	/* constants*/
+ 	const int numdof=NDOF1*NUMNODES_BOUNDARY;
+@@ -805,7 +805,7 @@
+ 	parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	Input* vxaverage_input   =tria->inputs->GetInput(VxEnum);                     _assert_(vxaverage_input); 
+ 	Input* vyaverage_input   =tria->inputs->GetInput(VyEnum);                     _assert_(vyaverage_input);
+-	Input* spcthickness_input=tria->inputs->GetInput(PrognosticSpcthicknessEnum); _assert_(spcthickness_input);
++	Input* spcthickness_input=tria->inputs->GetInput(MasstransportSpcthicknessEnum); _assert_(spcthickness_input);
+ 	GetNormal(&normal[0],xyz_list);
+ 
+ 	/*Check wether it is an inflow or outflow BC (0 is the middle of the segment)*/
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15767)
+@@ -175,8 +175,8 @@
+ 		case DiagnosticHorizAnalysisEnum:
+ 			Ke=PenaltyCreateKMatrixDiagnosticHoriz(kmax);
+ 			break;
+-		case PrognosticAnalysisEnum:
+-			Ke=PenaltyCreateKMatrixPrognostic(kmax);
++		case MasstransportAnalysisEnum:
++			Ke=PenaltyCreateKMatrixMasstransport(kmax);
+ 			break;
+ 		default:
+ 			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+@@ -390,8 +390,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penpair::PenaltyCreateKMatrixPrognostic {{{*/
+-ElementMatrix* Penpair::PenaltyCreateKMatrixPrognostic(IssmDouble kmax){
++/*FUNCTION Penpair::PenaltyCreateKMatrixMasstransport {{{*/
++ElementMatrix* Penpair::PenaltyCreateKMatrixMasstransport(IssmDouble kmax){
+ 
+ 	const int numdof=NUMVERTICES*NDOF1;
+ 	IssmDouble penalty_factor;
+@@ -400,7 +400,7 @@
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters);
+ 
+ 	/*recover parameters: */
+-	parameters->FindParam(&penalty_factor,PrognosticPenaltyFactorEnum);
++	parameters->FindParam(&penalty_factor,MasstransportPenaltyFactorEnum);
+ 
+ 	//Create elementary matrix: add penalty to 
+ 	Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_factor);
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 15767)
+@@ -77,18 +77,18 @@
+ 		/*}}}*/
+ 		/*Numericalflux management:{{{*/
+ 		void           GetNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+-		ElementMatrix* CreateKMatrixPrognostic(void);
+-		ElementMatrix* CreateKMatrixPrognosticInternal(void);
+-		ElementMatrix* CreateKMatrixPrognosticBoundary(void);
++		ElementMatrix* CreateKMatrixMasstransport(void);
++		ElementMatrix* CreateKMatrixMasstransportInternal(void);
++		ElementMatrix* CreateKMatrixMasstransportBoundary(void);
+ 		ElementMatrix* CreateKMatrixBalancethickness(void);
+ 		ElementMatrix* CreateKMatrixBalancethicknessInternal(void);
+ 		ElementMatrix* CreateKMatrixBalancethicknessBoundary(void);
+ 		ElementMatrix* CreateKMatrixAdjointBalancethickness(void);
+ 		ElementMatrix* CreateKMatrixAdjointBalancethicknessInternal(void);
+ 		ElementMatrix* CreateKMatrixAdjointBalancethicknessBoundary(void);
+-		ElementVector* CreatePVectorPrognostic(void);
+-		ElementVector* CreatePVectorPrognosticInternal(void);
+-		ElementVector* CreatePVectorPrognosticBoundary(void);
++		ElementVector* CreatePVectorMasstransport(void);
++		ElementVector* CreatePVectorMasstransportInternal(void);
++		ElementVector* CreatePVectorMasstransportBoundary(void);
+ 		ElementVector* CreatePVectorBalancethickness(void);
+ 		ElementVector* CreatePVectorBalancethicknessInternal(void);
+ 		ElementVector* CreatePVectorBalancethicknessBoundary(void);
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15767)
+@@ -69,7 +69,7 @@
+ 		ElementMatrix* PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax);
+ 		ElementMatrix* PenaltyCreateKMatrixDiagnosticSSAHO(IssmDouble kmax);
+ 		ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);
+-		ElementMatrix* PenaltyCreateKMatrixPrognostic(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixMasstransport(IssmDouble kmax);
+ 		/*}}}*/
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15767)
+@@ -225,8 +225,8 @@
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+ 			return CreateMassMatrix();
+ 			break;
+-		case PrognosticAnalysisEnum:
+-			return CreateKMatrixPrognostic();
++		case MasstransportAnalysisEnum:
++			return CreateKMatrixMasstransport();
+ 			break;
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+@@ -367,8 +367,8 @@
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+ 			return CreatePVectorSlope();
+ 			break;
+-		case PrognosticAnalysisEnum:
+-			return CreatePVectorPrognostic();
++		case MasstransportAnalysisEnum:
++			return CreatePVectorMasstransport();
+ 			break;
+ #ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+@@ -1612,8 +1612,8 @@
+ 		case SurfaceSlopeYAnalysisEnum:
+ 			InputUpdateFromSolutionOneDof(solution,SurfaceSlopeYEnum);
+ 			break;
+-		case PrognosticAnalysisEnum:
+-			InputUpdateFromSolutionPrognostic(solution);
++		case MasstransportAnalysisEnum:
++			InputUpdateFromSolutionMasstransport(solution);
+ 			break;
+ 		default:
+ 			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+@@ -1647,8 +1647,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputUpdateFromSolutionPrognostic{{{*/
+-void  Tria::InputUpdateFromSolutionPrognostic(IssmDouble* solution){
++/*FUNCTION Tria::InputUpdateFromSolutionMasstransport{{{*/
++void  Tria::InputUpdateFromSolutionMasstransport(IssmDouble* solution){
+ 
+ 	/*Intermediaries*/
+ 	int        i,hydroadjustment;
+@@ -1668,7 +1668,7 @@
+ 	IssmDouble* oldsurface   = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	this->parameters->FindParam(&minthickness,PrognosticMinThicknessEnum);
++	this->parameters->FindParam(&minthickness,MasstransportMinThicknessEnum);
+ 	for(i=0;i<numnodes;i++){
+ 		newthickness[i]=solution[doflist[i]];
+ 		if(xIsNan<IssmDouble>(newthickness[i])) _error_("NaN found in solution vector");
+@@ -1681,8 +1681,8 @@
+ 	GetInputListOnNodes(&oldsurface[0],SurfaceEnum);
+ 	GetInputListOnNodes(&oldthickness[0],ThicknessEnum);
+ 
+-	/*Fing PrognosticHydrostaticAdjustment to figure out how to update the geometry:*/
+-	this->parameters->FindParam(&hydroadjustment,PrognosticHydrostaticAdjustmentEnum);
++	/*Fing MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
++	this->parameters->FindParam(&hydroadjustment,MasstransportHydrostaticAdjustmentEnum);
+ 	rho_ice=matpar->GetRhoIce();
+ 	rho_water=matpar->GetRhoWater();
+ 
+@@ -2401,7 +2401,7 @@
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&progstabilization,PrognosticStabilizationEnum);
++	iomodel->Constant(&progstabilization,MasstransportStabilizationEnum);
+ 	iomodel->Constant(&balancestabilization,BalancethicknessStabilizationEnum);
+ 	iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+@@ -5623,8 +5623,8 @@
+ 					basis,1,numnodes,0,
+ 					Ke->values,1);
+ 
+-		GetBPrognostic(B,&xyz_list[0][0], gauss);
+-		GetBprimePrognostic(Bprime,&xyz_list[0][0], gauss);
++		GetBMasstransport(B,&xyz_list[0][0], gauss);
++		GetBprimeMasstransport(Bprime,&xyz_list[0][0], gauss);
+ 
+ 		dvxdx=dvx[0];
+ 		dvydy=dvy[1];
+@@ -6277,22 +6277,22 @@
+ /*}}}*/
+ #endif
+ 
+-#ifdef _HAVE_PROGNOSTIC_
+-/*FUNCTION Tria::CreateKMatrixPrognostic {{{*/
+-ElementMatrix* Tria::CreateKMatrixPrognostic(void){
++#ifdef _HAVE_MASSTRANSPORT_
++/*FUNCTION Tria::CreateKMatrixMasstransport {{{*/
++ElementMatrix* Tria::CreateKMatrixMasstransport(void){
+ 
+ 	switch(GetElementType()){
+ 		case P1Enum: case P2Enum:
+-			return CreateKMatrixPrognostic_CG();
++			return CreateKMatrixMasstransport_CG();
+ 		case P1DGEnum:
+-			return CreateKMatrixPrognostic_DG();
++			return CreateKMatrixMasstransport_DG();
+ 		default:
+ 			_error_("Element type " << EnumToStringx(GetElementType()) << " not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixPrognostic_CG {{{*/
+-ElementMatrix* Tria::CreateKMatrixPrognostic_CG(void){
++/*FUNCTION Tria::CreateKMatrixMasstransport_CG {{{*/
++ElementMatrix* Tria::CreateKMatrixMasstransport_CG(void){
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+@@ -6316,7 +6316,7 @@
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	this->parameters->FindParam(&dim,MeshDimensionEnum);
+-	this->parameters->FindParam(&stabilization,PrognosticStabilizationEnum);
++	this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum);
+ 	Input* vxaverage_input=NULL;
+ 	Input* vyaverage_input=NULL;
+ 	if(dim==2){
+@@ -6350,8 +6350,8 @@
+ 					basis,1,numnodes,0,
+ 					&Ke->values[0],1);
+ 
+-		GetBPrognostic(B,&xyz_list[0][0],gauss);
+-		GetBprimePrognostic(Bprime,&xyz_list[0][0],gauss);
++		GetBMasstransport(B,&xyz_list[0][0],gauss);
++		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
+ 
+ 		dvxdx=dvx[0];
+ 		dvydy=dvy[1];
+@@ -6410,8 +6410,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixPrognostic_DG {{{*/
+-ElementMatrix* Tria::CreateKMatrixPrognostic_DG(void){
++/*FUNCTION Tria::CreateKMatrixMasstransport_DG {{{*/
++ElementMatrix* Tria::CreateKMatrixMasstransport_DG(void){
+ 
+ 	/*Intermediaries */
+ 	int        dim;
+@@ -6462,9 +6462,9 @@
+ 					basis,1,numnodes,0,
+ 					&Ke->values[0],1);
+ 
+-		/*WARNING: B and Bprime are inverted compared to usual prognostic!!!!*/
+-		GetBPrognostic(Bprime, &xyz_list[0][0], gauss);
+-		GetBprimePrognostic(B, &xyz_list[0][0], gauss);
++		/*WARNING: B and Bprime are inverted compared to usual masstransport!!!!*/
++		GetBMasstransport(Bprime, &xyz_list[0][0], gauss);
++		GetBprimeMasstransport(B, &xyz_list[0][0], gauss);
+ 
+ 		D_scalar=-dt*gauss->weight*Jdettria;
+ 		D[0][0]=D_scalar*vx;
+@@ -6486,21 +6486,21 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorPrognostic{{{*/
+-ElementVector* Tria::CreatePVectorPrognostic(void){
++/*FUNCTION Tria::CreatePVectorMasstransport{{{*/
++ElementVector* Tria::CreatePVectorMasstransport(void){
+ 
+ 	switch(GetElementType()){
+ 		case P1Enum: case P2Enum:
+-			return CreatePVectorPrognostic_CG();
++			return CreatePVectorMasstransport_CG();
+ 		case P1DGEnum:
+-			return CreatePVectorPrognostic_DG();
++			return CreatePVectorMasstransport_DG();
+ 		default:
+ 			_error_("Element type " << EnumToStringx(GetElementType()) << " not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorPrognostic_CG {{{*/
+-ElementVector* Tria::CreatePVectorPrognostic_CG(void){
++/*FUNCTION Tria::CreatePVectorMasstransport_CG {{{*/
++ElementVector* Tria::CreatePVectorMasstransport_CG(void){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble Jdettria,dt;
+@@ -6549,8 +6549,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorPrognostic_DG {{{*/
+-ElementVector* Tria::CreatePVectorPrognostic_DG(void){
++/*FUNCTION Tria::CreatePVectorMasstransport_DG {{{*/
++ElementVector* Tria::CreatePVectorMasstransport_DG(void){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble Jdettria,dt;
+@@ -6795,8 +6795,8 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+-		GetBPrognostic(B,&xyz_list[0][0],gauss);
+-		GetBprimePrognostic(Bprime,&xyz_list[0][0],gauss);
++		GetBMasstransport(B,&xyz_list[0][0],gauss);
++		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
+ 
+ 		vxaverage_input->GetInputValue(&vx,gauss);
+ 		vyaverage_input->GetInputValue(&vy,gauss);
+@@ -6891,9 +6891,9 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+-		/*WARNING: B and Bprime are inverted compared to usual prognostic!!!!*/
+-		GetBPrognostic(Bprime,&xyz_list[0][0],gauss);
+-		GetBprimePrognostic(B,&xyz_list[0][0],gauss);
++		/*WARNING: B and Bprime are inverted compared to usual masstransport!!!!*/
++		GetBMasstransport(Bprime,&xyz_list[0][0],gauss);
++		GetBprimeMasstransport(B,&xyz_list[0][0],gauss);
+ 
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 15767)
+@@ -26,8 +26,8 @@
+ 		void GetBSSAFS(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBprimeSSA(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBprimeSSAFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+-		void GetBprimePrognostic(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+-		void GetBPrognostic(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBprimeMasstransport(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBMasstransport(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBHydro(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBSSAFriction(IssmDouble* L, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussTria* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15767)
+@@ -184,17 +184,17 @@
+ 		ElementMatrix* CreateKMatrixBalancethickness_DG(void);
+ 		ElementMatrix* CreateKMatrixBalancethickness_CG(void);
+ 		ElementMatrix* CreateKMatrixMelting(void);
+-		ElementMatrix* CreateKMatrixPrognostic(void);
+-		ElementMatrix* CreateKMatrixPrognostic_CG(void);
+-		ElementMatrix* CreateKMatrixPrognostic_DG(void);
++		ElementMatrix* CreateKMatrixMasstransport(void);
++		ElementMatrix* CreateKMatrixMasstransport_CG(void);
++		ElementMatrix* CreateKMatrixMasstransport_DG(void);
+ 		ElementMatrix* CreateMassMatrix(void);
+ 		ElementVector* CreatePVector(void);
+ 		ElementVector* CreatePVectorBalancethickness(void);
+ 		ElementVector* CreatePVectorBalancethickness_DG(void);
+ 		ElementVector* CreatePVectorBalancethickness_CG(void);
+-		ElementVector* CreatePVectorPrognostic(void);
+-		ElementVector* CreatePVectorPrognostic_CG(void);
+-		ElementVector* CreatePVectorPrognostic_DG(void);
++		ElementVector* CreatePVectorMasstransport(void);
++		ElementVector* CreatePVectorMasstransport_CG(void);
++		ElementVector* CreatePVectorMasstransport_DG(void);
+ 		ElementVector* CreatePVectorSlope(void);
+ 		IssmDouble     GetArea(void);
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[3][3],int numpoints);
+@@ -215,7 +215,7 @@
+ 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
+ 		void           GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussTria* gauss, Input* vx_input, Input* vy_input);
+ 		void	         InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type);
+-		void	         InputUpdateFromSolutionPrognostic(IssmDouble* solution);
++		void	         InputUpdateFromSolutionMasstransport(IssmDouble* solution);
+ 		bool	         IsInput(int name);
+ 		void	         SetClone(int* minranks);
+ 		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15767)
+@@ -466,8 +466,8 @@
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+ 			return CreateBasalMassMatrix();
+ 			break;
+-		case PrognosticAnalysisEnum:
+-			return CreateKMatrixPrognostic();
++		case MasstransportAnalysisEnum:
++			return CreateKMatrixMasstransport();
+ 			break;
+ 		#ifdef _HAVE_BALANCED_
+ 		case BalancethicknessAnalysisEnum:
+@@ -501,8 +501,8 @@
+ 	return NULL;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixPrognostic {{{*/
+-ElementMatrix* Penta::CreateKMatrixPrognostic(void){
++/*FUNCTION Penta::CreateKMatrixMasstransport {{{*/
++ElementMatrix* Penta::CreateKMatrixMasstransport(void){
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+@@ -511,7 +511,7 @@
+ 	this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
+ 
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementMatrix* Ke=tria->CreateKMatrixPrognostic();
++	ElementMatrix* Ke=tria->CreateKMatrixMasstransport();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Delete Vx and Vy averaged*/
+@@ -662,8 +662,8 @@
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+ 			return CreatePVectorSlope();
+ 			break;
+-		case PrognosticAnalysisEnum:
+-			return CreatePVectorPrognostic();
++		case MasstransportAnalysisEnum:
++			return CreatePVectorMasstransport();
+ 			break;
+ 		#ifdef _HAVE_BALANCED_
+ 		case BalancethicknessAnalysisEnum:
+@@ -686,8 +686,8 @@
+ 	return NULL;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorPrognostic {{{*/
+-ElementVector* Penta::CreatePVectorPrognostic(void){
++/*FUNCTION Penta::CreatePVectorMasstransport {{{*/
++ElementVector* Penta::CreatePVectorMasstransport(void){
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+@@ -697,7 +697,7 @@
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementVector* pe=tria->CreatePVectorPrognostic();
++	ElementVector* pe=tria->CreatePVectorMasstransport();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Delete Vx and Vy averaged*/
+@@ -2259,8 +2259,8 @@
+ 	case SurfaceSlopeYAnalysisEnum:
+ 		InputUpdateFromSolutionOneDofCollapsed(solution,SurfaceSlopeYEnum);
+ 		break;
+-	case PrognosticAnalysisEnum:
+-		InputUpdateFromSolutionPrognostic(solution);
++	case MasstransportAnalysisEnum:
++		InputUpdateFromSolutionMasstransport(solution);
+ 		break;
+ 	#ifdef _HAVE_BALANCED_
+ 	case BalancethicknessAnalysisEnum:
+@@ -2280,8 +2280,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionPrognostic{{{*/
+-void  Penta::InputUpdateFromSolutionPrognostic(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionMasstransport{{{*/
++void  Penta::InputUpdateFromSolutionMasstransport(IssmDouble* solution){
+ 
+ 	const int  numdof   = NDOF1*NUMVERTICES;
+ 	const int  numdof2d = NDOF1*NUMVERTICES2D;
+@@ -2304,7 +2304,7 @@
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+ 
+ 	/*Use the dof list to index into the solution vector and extrude it */
+-	this->parameters->FindParam(&minthickness,PrognosticMinThicknessEnum);
++	this->parameters->FindParam(&minthickness,MasstransportMinThicknessEnum);
+ 	for(i=0;i<numdof2d;i++){
+ 		newthickness[i]=solution[doflist[i]];
+ 		if(xIsNan<IssmDouble>(newthickness[i])) _error_("NaN found in solution vector");
+@@ -2318,8 +2318,8 @@
+ 	GetInputListOnVertices(&oldsurface[0],SurfaceEnum);
+ 	GetInputListOnVertices(&oldthickness[0],ThicknessEnum);
+ 
+-	/*Fing PrognosticHydrostaticAdjustment to figure out how to update the geometry:*/
+-	this->parameters->FindParam(&hydroadjustment,PrognosticHydrostaticAdjustmentEnum);
++	/*Fing MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
++	this->parameters->FindParam(&hydroadjustment,MasstransportHydrostaticAdjustmentEnum);
+ 
+ 	/*recover material parameters: */
+ 	rho_ice=matpar->GetRhoIce();
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15767)
+@@ -179,9 +179,9 @@
+ 		void	         BedNormal(IssmDouble* bed_normal, IssmDouble xyz_list[3][3]);
+ 		ElementMatrix* CreateBasalMassMatrix(void);
+ 		ElementMatrix* CreateKMatrix(void);
+-		ElementMatrix* CreateKMatrixPrognostic(void);
++		ElementMatrix* CreateKMatrixMasstransport(void);
+ 		ElementVector* CreatePVector(void);
+-		ElementVector* CreatePVectorPrognostic(void);
++		ElementVector* CreatePVectorMasstransport(void);
+ 		ElementVector* CreatePVectorSlope(void);
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[6][3],int numpoints);
+ 		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
+@@ -209,7 +209,7 @@
+ 		Penta*         GetLowerElement(void);
+ 		Penta*         GetBasalElement(void);
+ 		void	         InputExtrude(int enum_type,int object_type);
+-		void           InputUpdateFromSolutionPrognostic(IssmDouble* solutiong);
++		void           InputUpdateFromSolutionMasstransport(IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionOneDof(IssmDouble* solutiong,int enum_type);
+ 		void           InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solutiong,int enum_type);
+ 		bool	         IsInput(int name);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15767)
+@@ -201,8 +201,8 @@
+ 	xDelete<IssmDouble>(basis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBPrognostic{{{*/
+-void TriaRef::GetBPrognostic(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
++/*FUNCTION TriaRef::GetBMasstransport{{{*/
++void TriaRef::GetBMasstransport(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 
+ 	 * For node i, Bi can be expressed in the actual coordinate system
+ 	 * by: 
+@@ -302,8 +302,8 @@
+ 	xDelete<IssmDouble>(dbasis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetBprimePrognostic{{{*/
+-void TriaRef::GetBprimePrognostic(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
++/*FUNCTION TriaRef::GetBprimeMasstransport{{{*/
++void TriaRef::GetBprimeMasstransport(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
+ 	/*Compute B'  matrix. B'=[B1' B2' B3'] where Bi' is of size 3*NDOF2. 
+ 	 * For node i, Bi' can be expressed in the actual coordinate system
+ 	 * by: 
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15766)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15767)
+@@ -91,7 +91,7 @@
+ 
+ 	/*2d solutions in 3d, we need to constrain all the nodes that are not on base*/
+ 	if(
+-				analysis_type==PrognosticAnalysisEnum || 
++				analysis_type==MasstransportAnalysisEnum || 
+ 				analysis_type==MeltingAnalysisEnum || 
+ 				analysis_type==BedSlopeAnalysisEnum || 
+ 				analysis_type==SurfaceSlopeAnalysisEnum || 
+Index: ../trunk-jpl/src/ad/validation/Update/update.m
+===================================================================
+--- ../trunk-jpl/src/ad/validation/Update/update.m	(revision 15766)
++++ ../trunk-jpl/src/ad/validation/Update/update.m	(revision 15767)
+@@ -11,7 +11,7 @@
+ md.autodiff.forward=true;
+ md.verbose=verbose('solution',true);
+ 
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,MasstransportSolutionEnum);
+ 
+-thickness=md.results.PrognosticSolution.Thickness;
++thickness=md.results.MasstransportSolution.Thickness;
+ save ../Validation/Archive.mat thickness;
+Index: ../trunk-jpl/src/ad/validation/Validation/validation.m
+===================================================================
+--- ../trunk-jpl/src/ad/validation/Validation/validation.m	(revision 15766)
++++ ../trunk-jpl/src/ad/validation/Validation/validation.m	(revision 15767)
+@@ -21,7 +21,7 @@
+ 	!rm validation.outbin
+ 
+ 	s=load('Archive.mat'); h0=s.thickness;
+-	h=md.results.PrognosticSolution.Thickness;
++	h=md.results.MasstransportSolution.Thickness;
+ 	error_diff=full(max(abs(h-h0))/(max(abs(h0))+eps));
+ 	if (error_diff>tolerance);
+ 		disp(sprintf(['\nERROR   difference: %-7.2g > %7.2g \n'],error_diff,tolerance));
+Index: ../trunk-jpl/src/m/solve/solve.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.py	(revision 15766)
++++ ../trunk-jpl/src/m/solve/solve.py	(revision 15767)
+@@ -21,7 +21,7 @@
+  
+ 	   solution types available comprise:
+ 	      - DiagnosticSolutionEnum
+-	      - PrognosticSolutionEnum
++	      - MasstransportSolutionEnum
+ 	      - ThermalSolutionEnum
+ 	      - SteadystateSolutionEnum
+ 	      - TransientSolutionEnum...
+Index: ../trunk-jpl/src/m/solve/solve.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.m	(revision 15766)
++++ ../trunk-jpl/src/m/solve/solve.m	(revision 15767)
+@@ -7,7 +7,7 @@
+ %
+ %   solution types available comprise:
+ %		 - DiagnosticSolutionEnum
+-%		 - PrognosticSolutionEnum
++%		 - MasstransportSolutionEnum
+ %		 - ThermalSolutionEnum
+ %		 - SteadystateSolutionEnum
+ %		 - TransientSolutionEnum...
+Index: ../trunk-jpl/src/m/solve/process_solve_options.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.py	(revision 15766)
++++ ../trunk-jpl/src/m/solve/process_solve_options.py	(revision 15767)
+@@ -17,7 +17,7 @@
+ 
+ 	#solution_type: check on this option, error out otherwise
+ 	solution_type=options.getfieldvalue('solution_type')
+-	if solution_type not in (DiagnosticSolutionEnum(),PrognosticSolutionEnum(),ThermalSolutionEnum(),\
++	if solution_type not in (DiagnosticSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),\
+ 			SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),\
+ 			BalancethicknessSolutionEnum(),BedSlopeSolutionEnum(),SurfaceSlopeSolutionEnum(),\
+ 			HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()):
+Index: ../trunk-jpl/src/m/solve/process_solve_options.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 15766)
++++ ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 15767)
+@@ -8,7 +8,7 @@
+ 
+ %solution_type: check on this option, error out otherwise
+ solution_type=getfieldvalue(options,'solution_type');
+-if ~ismember(solution_type,[DiagnosticSolutionEnum(),PrognosticSolutionEnum(),ThermalSolutionEnum(),...
++if ~ismember(solution_type,[DiagnosticSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),...
+ 		SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),...
+ 		BalancethicknessSolutionEnum(),BalancethicknessSoftSolutionEnum(),BedSlopeSolutionEnum(),...
+ 		SurfaceSlopeSolutionEnum(),HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()]),
+Index: ../trunk-jpl/src/m/classes/prognostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/prognostic.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/prognostic.m	(revision 15767)
+@@ -1,76 +0,0 @@
+-%PROGNOSTIC class definition
+-%
+-%   Usage:
+-%      prognostic=prognostic();
+-
+-classdef prognostic
+-	properties (SetAccess=public) 
+-		 spcthickness           = NaN;
+-		 min_thickness          = 0;
+-		 hydrostatic_adjustment = 0;
+-		 stabilization          = 0;
+-		 vertex_pairing         = NaN;
+-		 penalty_factor         = 0;
+-		 requested_outputs      = NaN;
+-	end
+-	methods
+-		function obj = prognostic(varargin) % {{{
+-			switch nargin
+-				case 0
+-					obj=setdefaultparameters(obj);
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function obj = setdefaultparameters(obj) % {{{
+-
+-			%Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
+-			obj.stabilization=1;
+-
+-			%Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor
+-			obj.penalty_factor=3;
+-
+-			%Minimum ice thickness that can be used
+-			obj.min_thickness=1;
+-
+-			%Hydrostatic adjustment
+-			obj.hydrostatic_adjustment='Absolute';
+-		end % }}}
+-		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-
+-			%Early return
+-			if ~ismember(PrognosticAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isprognostic==0), return; end
+-
+-			md = checkfield(md,'prognostic.spcthickness','forcing',1);
+-			md = checkfield(md,'prognostic.hydrostatic_adjustment','values',{'Absolute' 'Incremental'});
+-			md = checkfield(md,'prognostic.stabilization','values',[0 1 2 3]);
+-			md = checkfield(md,'prognostic.min_thickness','>',0);
+-			if ~isempty(md.prognostic.requested_outputs),
+-				md = checkfield(md,'prognostic.requested_outputs','size',[NaN 1]);
+-			end
+-
+-		end % }}}
+-		function disp(obj) % {{{
+-			disp(sprintf('   Prognostic solution parameters:'));
+-			fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint) [m]');
+-			fielddisplay(obj,'min_thickness','minimum ice thickness allowed [m]');
+-			fielddisplay(obj,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' ');
+-			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin');
+-
+-			disp(sprintf('\n      %s','Penalty options:'));
+-			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
+-			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
+-			fielddisplay(obj,'requested_outputs','additional outputs requested');
+-
+-		end % }}}
+-		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double');
+-			WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum());
+-			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+-			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/prognostic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/prognostic.py	(revision 15766)
++++ ../trunk-jpl/src/m/classes/prognostic.py	(revision 15767)
+@@ -1,77 +0,0 @@
+-from fielddisplay import fielddisplay
+-from EnumDefinitions import *
+-from StringToEnum import StringToEnum
+-from checkfield import *
+-from WriteData import *
+-
+-class prognostic(object):
+-	"""
+-	PROGNOSTIC class definition
+-
+-	   Usage:
+-	      prognostic=prognostic();
+-	"""
+-
+-	def __init__(self): # {{{
+-		self.spcthickness           = float('NaN')
+-		self.min_thickness          = 0
+-		self.hydrostatic_adjustment = 0
+-		self.stabilization          = 0
+-		self.vertex_pairing         = float('NaN')
+-		self.penalty_factor         = 0
+-		self.requested_outputs      = float('NaN')
+-
+-		#set defaults
+-		self.setdefaultparameters()
+-
+-		#}}}
+-	def __repr__(self): # {{{
+-		string='   Prognostic solution parameters:'
+-		string="%s\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint) [m]'))
+-		string="%s\n%s"%(string,fielddisplay(self,'min_thickness','minimum ice thickness allowed [m]'))
+-		string="%s\n%s"%(string,fielddisplay(self,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' '))
+-		string="%s\n%s"%(string,fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin'))
+-		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+-
+-		return string
+-		#}}}
+-	def setdefaultparameters(self): # {{{
+-		
+-		#Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
+-		self.stabilization=1
+-
+-		#Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor
+-		self.penalty_factor=3
+-
+-		#Minimum ice thickness that can be used
+-		self.min_thickness=1
+-
+-		#Hydrostatic adjustment
+-		self.hydrostatic_adjustment='Absolute'
+-
+-		return self
+-	#}}}
+-	def checkconsistency(self,md,solution,analyses):    # {{{
+-
+-		#Early return
+-		if (PrognosticAnalysisEnum() not in analyses) or (solution==TransientSolutionEnum() and not md.transient.isprognostic):
+-			return md
+-
+-		md = checkfield(md,'prognostic.spcthickness','forcing',1)
+-		md = checkfield(md,'prognostic.hydrostatic_adjustment','values',['Absolute','Incremental'])
+-		md = checkfield(md,'prognostic.stabilization','values',[0,1,2,3])
+-		md = checkfield(md,'prognostic.min_thickness','>',0)
+-		if not md.prognostic.requested_outputs:
+-			md = checkfield(md,'prognostic.requested_outputs','size',[float('NaN'),1])
+-
+-		return md
+-	# }}}
+-	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'fieldname','min_thickness','format','Double')
+-		WriteData(fid,'data',StringToEnum(self.hydrostatic_adjustment)[0],'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum())
+-		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+-		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+-		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
+-	# }}}
+Index: ../trunk-jpl/src/m/classes/initialization.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/initialization.m	(revision 15767)
+@@ -35,7 +35,7 @@
+ 					md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 				end
+ 			end
+-			if ismember(PrognosticAnalysisEnum(),analyses),
++			if ismember(MasstransportAnalysisEnum(),analyses),
+ 				md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 				md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 			end
+Index: ../trunk-jpl/src/m/classes/gia.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/gia.py	(revision 15766)
++++ ../trunk-jpl/src/m/classes/gia.py	(revision 15767)
+@@ -45,7 +45,7 @@
+ 		md = checkfield(md,'gia.lithosphere_thickness','NaN',1,'size',[md.mesh.numberofvertices,1],'>',0)
+ 		md = checkfield(md,'gia.cross_section_shape','numel',[1],'values',[1,2])
+ 
+-		#be sure that if we are running a prognostic ice flow model coupled with gia, that thickness forcings 
++		#be sure that if we are running a masstransport ice flow model coupled with gia, that thickness forcings 
+ 		#are not provided into the future.
+ 
+ 		return md
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 15766)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 15767)
+@@ -12,7 +12,7 @@
+ 	"""
+ 
+ 	def __init__(self): # {{{
+-		self.isprognostic      = False
++		self.ismasstransport      = False
+ 		self.isdiagnostic      = False
+ 		self.isthermal         = False
+ 		self.isgroundingline   = False
+@@ -25,7 +25,7 @@
+ 		#}}}
+ 	def __repr__(self): # {{{
+ 		string='   transient solution parameters:'
+-		string="%s\n%s"%(string,fielddisplay(self,'isprognostic','indicates if a prognostic solution is used in the transient'))
++		string="%s\n%s"%(string,fielddisplay(self,'ismasstransport','indicates if a masstransport solution is used in the transient'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isdiagnostic','indicates if a diagnostic solution is used in the transient'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isthermal','indicates if a thermal solution is used in the transient'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isgroundingline','indicates if a groundingline migration is used in the transient'))
+@@ -35,8 +35,8 @@
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+ 		
+-		#full analysis: Diagnostic, Prognostic and Thermal but no groundingline migration for now
+-		self.isprognostic=True
++		#full analysis: Diagnostic, Masstransport and Thermal but no groundingline migration for now
++		self.ismasstransport=True
+ 		self.isdiagnostic=True
+ 		self.isthermal=True
+ 		self.isgroundingline=False
+@@ -50,7 +50,7 @@
+ 		if not solution==TransientSolutionEnum():
+ 			return md
+ 
+-		md = checkfield(md,'transient.isprognostic','numel',[1],'values',[0,1])
++		md = checkfield(md,'transient.ismasstransport','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isdiagnostic','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isthermal','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+@@ -61,7 +61,7 @@
+ 		return md
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'object',self,'fieldname','isprognostic','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','ismasstransport','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isdiagnostic','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isthermal','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean')
+Index: ../trunk-jpl/src/m/classes/surfaceforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/surfaceforcings.py	(revision 15766)
++++ ../trunk-jpl/src/m/classes/surfaceforcings.py	(revision 15767)
+@@ -71,7 +71,7 @@
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+-		if PrognosticAnalysisEnum() in analyses:
++		if MasstransportAnalysisEnum() in analyses:
+ 			md = checkfield(md,'surfaceforcings.ispdd','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'surfaceforcings.issmbgradients','numel',[1],'values',[0,1])
+ 			if   self.ispdd:
+Index: ../trunk-jpl/src/m/classes/mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.py	(revision 15766)
++++ ../trunk-jpl/src/m/classes/mesh.py	(revision 15767)
+@@ -148,14 +148,14 @@
+ 			md = checkfield(md,'mesh.average_vertex_connectivity','>=',24,'message',"'mesh.average_vertex_connectivity' should be at least 24 in 3d")
+ 
+ 		#Solution specific checks
+-		if   solution==PrognosticSolutionEnum():
+-			if md.prognostic.stabilization==3:
++		if   solution==MasstransportSolutionEnum():
++			if md.masstransport.stabilization==3:
+ 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
+ 		elif solution==BalancethicknessSolutionEnum():
+ 			if md.balancethickness.stabilization==3:
+ 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
+ 		elif solution==TransientSolutionEnum():
+-			if md.transient.isprognostic and md.prognostic.stabilization==3:
++			if md.transient.ismasstransport and md.masstransport.stabilization==3:
+ 				md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes")
+ 		elif solution==ThermalSolutionEnum():
+ 			md = checkfield(md,'mesh.dimension','values',3,'message','thermal solution only supported on 3d meshes')
+Index: ../trunk-jpl/src/m/classes/gia.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/gia.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/gia.m	(revision 15767)
+@@ -28,14 +28,14 @@
+ 			md = checkfield(md,'gia.lithosphere_thickness','NaN',1,'size',[md.mesh.numberofvertices 1],'>',0);
+ 			md = checkfield(md,'gia.cross_section_shape','numel',[1],'values',[1,2]);
+ 
+-			%be sure that if we are running a prognostic ice flow model coupled with gia, that thickness forcings 
++			%be sure that if we are running a masstransport ice flow model coupled with gia, that thickness forcings 
+ 			%are not provided into the future.
+-			if solution==TransientSolutionEnum() & md.transient.isprognostic & md.transient.isgia,
++			if solution==TransientSolutionEnum() & md.transient.ismasstransport & md.transient.isgia,
+ 				%figure out if thickness is a transient forcing: 
+ 				if size(md.geometry.thickness,1)==md.mesh.numberofvertices+1,
+ 					%recover the furthest time "in time": 
+ 					if(thickness(end,end)~=md.timestepping.start_time),
+-						md = checkmessage(md,['if isprognostic is on, transient thickness forcing'...
++						md = checkmessage(md,['if ismasstransport is on, transient thickness forcing'...
+ 							' for the gia model should not be provided in the future.'...
+ 							' Synchronize your start_time to correspond to the most recent transient'...
+ 							' thickness forcing timestep']);
+Index: ../trunk-jpl/src/m/classes/initialization.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.py	(revision 15766)
++++ ../trunk-jpl/src/m/classes/initialization.py	(revision 15767)
+@@ -51,7 +51,7 @@
+ 			if not numpy.any(numpy.logical_or(numpy.isnan(md.initialization.vx),numpy.isnan(md.initialization.vy))):
+ 				md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
+ 				md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
+-		if PrognosticAnalysisEnum() in analyses:
++		if MasstransportAnalysisEnum() in analyses:
+ 			md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
+ 			md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
+ 		if BalancethicknessAnalysisEnum() in analyses:
+Index: ../trunk-jpl/src/m/classes/mesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/mesh.m	(revision 15767)
+@@ -111,8 +111,8 @@
+ 
+ 			%Solution specific checks
+ 			switch(solution),
+-				case PrognosticSolutionEnum(),
+-					if md.prognostic.stabilization==3,
++				case MasstransportSolutionEnum(),
++					if md.masstransport.stabilization==3,
+ 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
+ 					end
+ 				case BalancethicknessSolutionEnum(),
+@@ -120,7 +120,7 @@
+ 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
+ 					end
+ 				case TransientSolutionEnum(),
+-					if md.transient.isprognostic & md.prognostic.stabilization==3,
++					if md.transient.ismasstransport & md.masstransport.stabilization==3,
+ 						md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
+ 					end
+ 				case ThermalSolutionEnum(),
+Index: ../trunk-jpl/src/m/classes/modellist.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/modellist.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/modellist.m	(revision 15767)
+@@ -213,7 +213,7 @@
+ 			%   Usage:
+ 			%      obj=solve(obj,varargin)
+ 			%      where varargin is a lit of paired arguments. 
+-			%      arguments can be: 'analysis_type': 'diagnostic','thermal','prognostic','transient'
++			%      arguments can be: 'analysis_type': 'diagnostic','thermal','masstransport','transient'
+ 			%
+ 			%   Examples:
+ 			%      obj=solve(obj,'analysis_type','diagnostic');
+Index: ../trunk-jpl/src/m/classes/planetmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/planetmesh.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/planetmesh.m	(revision 15767)
+@@ -69,12 +69,12 @@
+ 
+ 			%Solution specific checks
+ 			switch(solution),
+-				case PrognosticSolutionEnum(),
+-					if md.prognostic.stabilization==3,
++				case MasstransportSolutionEnum(),
++					if md.masstransport.stabilization==3,
+ 						md = checkfield(md,'planetmesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d planetmeshes');
+ 					end
+ 				case TransientSolutionEnum(),
+-					if md.transient.isprognostic & md.prognostic.stabilization==3,
++					if md.transient.ismasstransport & md.masstransport.stabilization==3,
+ 						md = checkfield(md,'planetmesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d planetmeshes');
+ 					end
+ 				case ThermalSolutionEnum(),
+Index: ../trunk-jpl/src/m/classes/oldclasses/prognostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/prognostic.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/oldclasses/prognostic.m	(revision 15767)
+@@ -0,0 +1,76 @@
++%MASSTRANSPORT class definition
++%
++%   Usage:
++%      prognostic=prognostic();
++
++classdef prognostic
++	properties (SetAccess=public) 
++		 spcthickness           = NaN;
++		 min_thickness          = 0;
++		 hydrostatic_adjustment = 0;
++		 stabilization          = 0;
++		 vertex_pairing         = NaN;
++		 penalty_factor         = 0;
++		 requested_outputs      = NaN;
++	end
++	methods
++		function obj = prognostic(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			%Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
++			obj.stabilization=1;
++
++			%Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor
++			obj.penalty_factor=3;
++
++			%Minimum ice thickness that can be used
++			obj.min_thickness=1;
++
++			%Hydrostatic adjustment
++			obj.hydrostatic_adjustment='Absolute';
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			%Early return
++			if ~ismember(PrognosticAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isprognostic==0), return; end
++
++			md = checkfield(md,'prognostic.spcthickness','forcing',1);
++			md = checkfield(md,'prognostic.hydrostatic_adjustment','values',{'Absolute' 'Incremental'});
++			md = checkfield(md,'prognostic.stabilization','values',[0 1 2 3]);
++			md = checkfield(md,'prognostic.min_thickness','>',0);
++			if ~isempty(md.prognostic.requested_outputs),
++				md = checkfield(md,'prognostic.requested_outputs','size',[NaN 1]);
++			end
++
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   Prognostic solution parameters:'));
++			fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint) [m]');
++			fielddisplay(obj,'min_thickness','minimum ice thickness allowed [m]');
++			fielddisplay(obj,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' ');
++			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin');
++
++			disp(sprintf('\n      %s','Penalty options:'));
++			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
++			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
++			fielddisplay(obj,'requested_outputs','additional outputs requested');
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++			WriteData(fid,'object',obj,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double');
++			WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum());
++			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
++			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15766)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15767)
+@@ -23,7 +23,7 @@
+ from stressbalance import stressbalance
+ from groundingline import groundingline
+ from hydrologyshreve import hydrologyshreve
+-from prognostic import prognostic
++from masstransport import masstransport
+ from thermal import thermal
+ from steadystate import steadystate
+ from transient import transient
+@@ -74,7 +74,7 @@
+ 		self.diagnostic       = stressbalance()
+ 		self.groundingline    = groundingline()
+ 		self.hydrology        = hydrologyshreve()
+-		self.prognostic       = prognostic()
++		self.masstransport       = masstransport()
+ 		self.thermal          = thermal()
+ 		self.steadystate      = steadystate()
+ 		self.transient        = transient()
+@@ -113,7 +113,7 @@
+ 		        'diagnostic',\
+ 		        'groundingline',\
+ 		        'hydrology',\
+-		        'prognostic',\
++		        'masstransport',\
+ 		        'thermal',\
+ 		        'steadystate',\
+ 		        'transient',\
+@@ -150,7 +150,7 @@
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("diagnostic","[%s,%s]" % ("1x1",obj.diagnostic.__class__.__name__),"parameters for diagnostic solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("groundingline","[%s,%s]" % ("1x1",obj.groundingline.__class__.__name__),"parameters for groundingline solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("hydrology","[%s,%s]" % ("1x1",obj.hydrology.__class__.__name__),"parameters for hydrology solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("prognostic","[%s,%s]" % ("1x1",obj.prognostic.__class__.__name__),"parameters for prognostic solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("masstransport","[%s,%s]" % ("1x1",obj.masstransport.__class__.__name__),"parameters for masstransport solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("thermal","[%s,%s]" % ("1x1",obj.thermal.__class__.__name__),"parameters for thermal solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("steadystate","[%s,%s]" % ("1x1",obj.steadystate.__class__.__name__),"parameters for steadystate solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("transient","[%s,%s]" % ("1x1",obj.transient.__class__.__name__),"parameters for transient solution"))
+@@ -347,10 +347,10 @@
+ 			for i in xrange(numpy.size(md1.diagnostic.vertex_pairing,axis=0)):
+ 				md2.diagnostic.vertex_pairing[i,:]=Pnode[md1.diagnostic.vertex_pairing[i,:]]
+ 			md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing[numpy.nonzero(md2.diagnostic.vertex_pairing[:,0])[0],:]
+-		if numpy.any(numpy.logical_not(numpy.isnan(md2.prognostic.vertex_pairing))):
+-			for i in xrange(numpy.size(md1.prognostic.vertex_pairing,axis=0)):
+-				md2.prognostic.vertex_pairing[i,:]=Pnode[md1.prognostic.vertex_pairing[i,:]]
+-			md2.prognostic.vertex_pairing=md2.prognostic.vertex_pairing[numpy.nonzero(md2.prognostic.vertex_pairing[:,0])[0],:]
++		if numpy.any(numpy.logical_not(numpy.isnan(md2.masstransport.vertex_pairing))):
++			for i in xrange(numpy.size(md1.masstransport.vertex_pairing,axis=0)):
++				md2.masstransport.vertex_pairing[i,:]=Pnode[md1.masstransport.vertex_pairing[i,:]]
++			md2.masstransport.vertex_pairing=md2.masstransport.vertex_pairing[numpy.nonzero(md2.masstransport.vertex_pairing[:,0])[0],:]
+ 
+ 		#recreate segments
+ 		if md1.mesh.dimension==2:
+@@ -611,7 +611,7 @@
+ 		md.diagnostic.spcvy=project3d(md,'vector',md.diagnostic.spcvy,'type','node')
+ 		md.diagnostic.spcvz=project3d(md,'vector',md.diagnostic.spcvz,'type','node')
+ 		md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',float('NaN'))
+-		md.prognostic.spcthickness=project3d(md,'vector',md.prognostic.spcthickness,'type','node')
++		md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node')
+ 		md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node')
+ 		md.diagnostic.referential=project3d(md,'vector',md.diagnostic.referential,'type','node')
+ 		md.diagnostic.loadingforce=project3d(md,'vector',md.diagnostic.loadingforce,'type','node')
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15767)
+@@ -31,7 +31,7 @@
+ 		diagnostic       = 0;
+ 		groundingline    = 0;
+ 		hydrology        = 0;
+-		prognostic       = 0;
++		masstransport       = 0;
+ 		thermal          = 0;
+ 		steadystate      = 0;
+ 		transient        = 0;
+@@ -91,17 +91,14 @@
+ 				disp('Recovering old hydrology class');
+ 				md.hydrology=hydrologyshreve(md.materials);
+ 			end
+-			%2013 Juli 25th
++			%2013 July 25th
+ 			if isa(md.diagnostic,'diagnostic'),
+ 				disp('Recovering old stressbalance class');
+ 				icefront = md.diagnostic.icefront;
+ 				md.diagnostic=stressbalance(md.diagnostic);
+-
+-				%Deal with front
+ 				md.mask.icelevelset=ones(md.mesh.numberofvertices,1);
+ 				md.mask.icelevelset(icefront(:,1:end-2))=0;
+ 			end
+-
+ 		end% }}}
+ 	end
+ 	methods
+@@ -191,7 +188,7 @@
+ 			md.diagnostic.spcvz=project2d(md,md.diagnostic.spcvz,md.mesh.numberoflayers);
+ 			md.diagnostic.referential=project2d(md,md.diagnostic.referential,md.mesh.numberoflayers);
+ 			md.diagnostic.loadingforce=project2d(md,md.diagnostic.loadingforce,md.mesh.numberoflayers);
+-			md.prognostic.spcthickness=project2d(md,md.prognostic.spcthickness,md.mesh.numberoflayers);
++			md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers);
+ 			md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
+ 
+ 			%materials
+@@ -450,11 +447,11 @@
+ 				end
+ 				md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing(find(md2.diagnostic.vertex_pairing(:,1)),:);
+ 			end
+-			if ~isnan(md2.prognostic.vertex_pairing),
+-				for i=1:size(md1.prognostic.vertex_pairing,1);
+-					md2.prognostic.vertex_pairing(i,:)=Pnode(md1.prognostic.vertex_pairing(i,:));
++			if ~isnan(md2.masstransport.vertex_pairing),
++				for i=1:size(md1.masstransport.vertex_pairing,1);
++					md2.masstransport.vertex_pairing(i,:)=Pnode(md1.masstransport.vertex_pairing(i,:));
+ 				end
+-				md2.prognostic.vertex_pairing=md2.prognostic.vertex_pairing(find(md2.prognostic.vertex_pairing(:,1)),:);
++				md2.masstransport.vertex_pairing=md2.masstransport.vertex_pairing(find(md2.masstransport.vertex_pairing(:,1)),:);
+ 			end
+ 
+ 			%recreate segments
+@@ -717,7 +714,7 @@
+ 			md.diagnostic.spcvy=project3d(md,'vector',md.diagnostic.spcvy,'type','node');
+ 			md.diagnostic.spcvz=project3d(md,'vector',md.diagnostic.spcvz,'type','node');
+ 			md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
+-			md.prognostic.spcthickness=project3d(md,'vector',md.prognostic.spcthickness,'type','node');
++			md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node');
+ 			md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
+ 			md.diagnostic.referential=project3d(md,'vector',md.diagnostic.referential,'type','node');
+ 			md.diagnostic.loadingforce=project3d(md,'vector',md.diagnostic.loadingforce,'type','node');
+@@ -844,11 +841,11 @@
+ 			if isfield(structmd,'ndt'), md.timestepping.final_time=structmd.ndt; end
+ 			if isfield(structmd,'time_adapt'), md.timestepping.time_adapt=structmd.time_adapt; end
+ 			if isfield(structmd,'cfl_coefficient'), md.timestepping.cfl_coefficient=structmd.cfl_coefficient; end
+-			if isfield(structmd,'spcthickness'), md.prognostic.spcthickness=structmd.spcthickness; end
+-			if isfield(structmd,'artificial_diffusivity'), md.prognostic.stabilization=structmd.artificial_diffusivity; end
+-			if isfield(structmd,'hydrostatic_adjustment'), md.prognostic.hydrostatic_adjustment=structmd.hydrostatic_adjustment; end
+-			if isfield(structmd,'penalties'), md.prognostic.vertex_pairing=structmd.penalties; end
+-			if isfield(structmd,'penalty_offset'), md.prognostic.penalty_factor=structmd.penalty_offset; end
++			if isfield(structmd,'spcthickness'), md.masstransport.spcthickness=structmd.spcthickness; end
++			if isfield(structmd,'artificial_diffusivity'), md.masstransport.stabilization=structmd.artificial_diffusivity; end
++			if isfield(structmd,'hydrostatic_adjustment'), md.masstransport.hydrostatic_adjustment=structmd.hydrostatic_adjustment; end
++			if isfield(structmd,'penalties'), md.masstransport.vertex_pairing=structmd.penalties; end
++			if isfield(structmd,'penalty_offset'), md.masstransport.penalty_factor=structmd.penalty_offset; end
+ 			if isfield(structmd,'B'), md.materials.rheology_B=structmd.B; end
+ 			if isfield(structmd,'n'), md.materials.rheology_n=structmd.n; end
+ 			if isfield(structmd,'rheology_B'), md.materials.rheology_B=structmd.rheology_B; end
+@@ -867,7 +864,7 @@
+ 			if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
+ 			if isfield(structmd,'max_steadystate_iterations'), md.steadystate.maxiter=structmd.max_steadystate_iterations; end
+ 			if isfield(structmd,'isdiagnostic'), md.transient.isdiagnostic=structmd.isdiagnostic; end
+-			if isfield(structmd,'isprognostic'), md.transient.isprognostic=structmd.isprognostic; end
++			if isfield(structmd,'ismasstransport'), md.transient.ismasstransport=structmd.ismasstransport; end
+ 			if isfield(structmd,'isthermal'), md.transient.isthermal=structmd.isthermal; end
+ 			if isfield(structmd,'control_analysis'), md.inversion.iscontrol=structmd.control_analysis; end
+ 			if isfield(structmd,'weights'), md.inversion.cost_functions_coefficients=structmd.weights; end
+@@ -1024,14 +1021,14 @@
+ 
+ 			if isfield(structmd,'artificial_diffusivity') & structmd.artificial_diffusivity==2,
+ 					md.thermal.stabilization=2;
+-					md.prognostic.stabilization=1;
++					md.masstransport.stabilization=1;
+ 					md.balancethickness.stabilization=1;
+ 			end
+-			if isnumeric(md.prognostic.hydrostatic_adjustment)
+-				if md.prognostic.hydrostatic_adjustment==269,
+-					md.prognostic.hydrostatic_adjustment='Incremental';
++			if isnumeric(md.masstransport.hydrostatic_adjustment)
++				if md.masstransport.hydrostatic_adjustment==269,
++					md.masstransport.hydrostatic_adjustment='Incremental';
+ 				else
+-					md.prognostic.hydrostatic_adjustment='Absolute';
++					md.masstransport.hydrostatic_adjustment='Absolute';
+ 				end
+ 			end
+ 
+@@ -1077,7 +1074,7 @@
+ 			md.balancethickness = balancethickness();
+ 			md.diagnostic       = stressbalance();
+ 			md.hydrology        = hydrologyshreve();
+-			md.prognostic       = prognostic();
++			md.masstransport       = masstransport();
+ 			md.thermal          = thermal();
+ 			md.steadystate      = steadystate();
+ 			md.transient        = transient();
+@@ -1114,7 +1111,7 @@
+ 			disp(sprintf('%19s: %-22s -- %s','diagnostic'      ,['[1x1 ' class(obj.diagnostic) ']'],'parameters for diagnostic solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','groundingline'   ,['[1x1 ' class(obj.groundingline) ']'],'parameters for groundingline solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','hydrology'       ,['[1x1 ' class(obj.hydrology) ']'],'parameters for hydrology solution'));
+-			disp(sprintf('%19s: %-22s -- %s','prognostic'      ,['[1x1 ' class(obj.prognostic) ']'],'parameters for prognostic solution'));
++			disp(sprintf('%19s: %-22s -- %s','masstransport'      ,['[1x1 ' class(obj.masstransport) ']'],'parameters for masstransport solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','thermal'         ,['[1x1 ' class(obj.thermal) ']'],'parameters for thermal solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','steadystate'     ,['[1x1 ' class(obj.steadystate) ']'],'parameters for steadystate solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','transient'       ,['[1x1 ' class(obj.transient) ']'],'parameters for transient solution'));
+Index: ../trunk-jpl/src/m/classes/model/planet.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/planet.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/model/planet.m	(revision 15767)
+@@ -46,7 +46,7 @@
+ 			 md.balancethickness = balancethickness();
+ 			 md.diagnostic       = diagnostic();
+ 			 md.hydrology        = hydrology();
+-			 md.prognostic       = prognostic();
++			 md.masstransport       = masstransport();
+ 			 md.thermal          = thermal();
+ 			 md.steadystate      = steadystate();
+ 			 md.transient        = transient();
+Index: ../trunk-jpl/src/m/classes/transient.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/transient.m	(revision 15767)
+@@ -5,7 +5,7 @@
+ 
+ classdef transient
+ 	properties (SetAccess=public) 
+-		isprognostic      = 0;
++		ismasstransport      = 0;
+ 		isdiagnostic      = 0;
+ 		isthermal         = 0;
+ 		isgroundingline   = 0;
+@@ -23,8 +23,8 @@
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+-			%full analysis: Diagnostic, Prognostic and Thermal but no groundingline migration for now
+-			obj.isprognostic=1;
++			%full analysis: Diagnostic, Masstransport and Thermal but no groundingline migration for now
++			obj.ismasstransport=1;
+ 			obj.isdiagnostic=1;
+ 			obj.isthermal=1;
+ 			obj.isgroundingline=0;
+@@ -36,7 +36,7 @@
+ 			%Early return
+ 			if solution~=TransientSolutionEnum(), return; end
+ 
+-			md = checkfield(md,'transient.isprognostic','numel',[1],'values',[0 1]);
++			md = checkfield(md,'transient.ismasstransport','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isdiagnostic','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isthermal','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0 1]);
+@@ -47,7 +47,7 @@
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   transient solution parameters:'));
+ 
+-			fielddisplay(obj,'isprognostic','indicates if a prognostic solution is used in the transient');
++			fielddisplay(obj,'ismasstransport','indicates if a masstransport solution is used in the transient');
+ 			fielddisplay(obj,'isdiagnostic','indicates if a diagnostic solution is used in the transient');
+ 			fielddisplay(obj,'isthermal','indicates if a thermal solution is used in the transient');
+ 			fielddisplay(obj,'isgroundingline','indicates if a groundingline migration is used in the transient');
+@@ -56,7 +56,7 @@
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'fieldname','isprognostic','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','ismasstransport','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isdiagnostic','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isthermal','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isgroundingline','format','Boolean');
+Index: ../trunk-jpl/src/m/classes/masstransport.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/masstransport.py	(revision 15767)
+@@ -0,0 +1,77 @@
++from fielddisplay import fielddisplay
++from EnumDefinitions import *
++from StringToEnum import StringToEnum
++from checkfield import *
++from WriteData import *
++
++class masstransport(object):
++	"""
++	MASSTRANSPORT class definition
++
++	   Usage:
++	      masstransport=masstransport();
++	"""
++
++	def __init__(self): # {{{
++		self.spcthickness           = float('NaN')
++		self.min_thickness          = 0
++		self.hydrostatic_adjustment = 0
++		self.stabilization          = 0
++		self.vertex_pairing         = float('NaN')
++		self.penalty_factor         = 0
++		self.requested_outputs      = float('NaN')
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#}}}
++	def __repr__(self): # {{{
++		string='   Masstransport solution parameters:'
++		string="%s\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint) [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'min_thickness','minimum ice thickness allowed [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' '))
++		string="%s\n%s"%(string,fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin'))
++		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
++
++		return string
++		#}}}
++	def setdefaultparameters(self): # {{{
++		
++		#Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
++		self.stabilization=1
++
++		#Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor
++		self.penalty_factor=3
++
++		#Minimum ice thickness that can be used
++		self.min_thickness=1
++
++		#Hydrostatic adjustment
++		self.hydrostatic_adjustment='Absolute'
++
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++
++		#Early return
++		if (MasstransportAnalysisEnum() not in analyses) or (solution==TransientSolutionEnum() and not md.transient.ismasstransport):
++			return md
++
++		md = checkfield(md,'masstransport.spcthickness','forcing',1)
++		md = checkfield(md,'masstransport.hydrostatic_adjustment','values',['Absolute','Incremental'])
++		md = checkfield(md,'masstransport.stabilization','values',[0,1,2,3])
++		md = checkfield(md,'masstransport.min_thickness','>',0)
++		if not md.masstransport.requested_outputs:
++			md = checkfield(md,'masstransport.requested_outputs','size',[float('NaN'),1])
++
++		return md
++	# }}}
++	def marshall(self,md,fid):    # {{{
++		WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'fieldname','min_thickness','format','Double')
++		WriteData(fid,'data',StringToEnum(self.hydrostatic_adjustment)[0],'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum())
++		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
++		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
++		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
++		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
++	# }}}
+Index: ../trunk-jpl/src/m/classes/surfaceforcings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/surfaceforcings.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/surfaceforcings.m	(revision 15767)
+@@ -43,7 +43,7 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+-			if ismember(PrognosticAnalysisEnum(),analyses),
++			if ismember(MasstransportAnalysisEnum(),analyses),
+ 				md = checkfield(md,'surfaceforcings.ispdd','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'surfaceforcings.issmbgradients','numel',[1],'values',[0 1]);
+ 				if(obj.ispdd)
+Index: ../trunk-jpl/src/m/classes/basalforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/basalforcings.py	(revision 15766)
++++ ../trunk-jpl/src/m/classes/basalforcings.py	(revision 15767)
+@@ -34,7 +34,7 @@
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+-		if PrognosticAnalysisEnum() in analyses and not (solution==TransientSolutionEnum() and not md.transient.isprognostic):
++		if MasstransportAnalysisEnum() in analyses and not (solution==TransientSolutionEnum() and not md.transient.ismasstransport):
+ 			md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1)
+ 
+ 		if BalancethicknessAnalysisEnum() in analyses:
+Index: ../trunk-jpl/src/m/classes/basalforcings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/basalforcings.m	(revision 15766)
++++ ../trunk-jpl/src/m/classes/basalforcings.m	(revision 15767)
+@@ -23,7 +23,7 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+-			if ismember(PrognosticAnalysisEnum(),analyses) & ~(solution==TransientSolutionEnum() & md.transient.isprognostic==0),
++			if ismember(MasstransportAnalysisEnum(),analyses) & ~(solution==TransientSolutionEnum() & md.transient.ismasstransport==0),
+ 				md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1);
+ 			end
+ 			if ismember(BalancethicknessAnalysisEnum(),analyses),
+Index: ../trunk-jpl/src/m/classes/masstransport.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/masstransport.m	(revision 15767)
+@@ -0,0 +1,76 @@
++%MASSTRANSPORT class definition
++%
++%   Usage:
++%      masstransport=masstransport();
++
++classdef masstransport
++	properties (SetAccess=public) 
++		 spcthickness           = NaN;
++		 min_thickness          = 0;
++		 hydrostatic_adjustment = 0;
++		 stabilization          = 0;
++		 vertex_pairing         = NaN;
++		 penalty_factor         = 0;
++		 requested_outputs      = NaN;
++	end
++	methods
++		function obj = masstransport(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			%Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
++			obj.stabilization=1;
++
++			%Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor
++			obj.penalty_factor=3;
++
++			%Minimum ice thickness that can be used
++			obj.min_thickness=1;
++
++			%Hydrostatic adjustment
++			obj.hydrostatic_adjustment='Absolute';
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			%Early return
++			if ~ismember(MasstransportAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.ismasstransport==0), return; end
++
++			md = checkfield(md,'masstransport.spcthickness','forcing',1);
++			md = checkfield(md,'masstransport.hydrostatic_adjustment','values',{'Absolute' 'Incremental'});
++			md = checkfield(md,'masstransport.stabilization','values',[0 1 2 3]);
++			md = checkfield(md,'masstransport.min_thickness','>',0);
++			if ~isempty(md.masstransport.requested_outputs),
++				md = checkfield(md,'masstransport.requested_outputs','size',[NaN 1]);
++			end
++
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   Masstransport solution parameters:'));
++			fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint) [m]');
++			fielddisplay(obj,'min_thickness','minimum ice thickness allowed [m]');
++			fielddisplay(obj,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' ');
++			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin');
++
++			disp(sprintf('\n      %s','Penalty options:'));
++			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
++			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
++			fielddisplay(obj,'requested_outputs','additional outputs requested');
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++			WriteData(fid,'object',obj,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double');
++			WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum());
++			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
++			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/regional/regionaltransient2d.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 15766)
++++ ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 15767)
+@@ -117,15 +117,15 @@
+ 		md2.diagnostic.spcvx=md2.diagnostic.spcvx*ones(1,size(spcx,2));
+ 		md2.diagnostic.spcvy=md2.diagnostic.spcvy*ones(1,size(spcy,2));
+ 		md2.diagnostic.spcvz=md2.diagnostic.spcvz*ones(1,size(spcx,2));
+-		md2.prognostic.spcthickness=md2.prognostic.spcthickness*ones(1,size(spct,2));
++		md2.masstransport.spcthickness=md2.masstransport.spcthickness*ones(1,size(spct,2));
+ 		md2.diagnostic.spcvx(find(md2.mesh.vertexonboundary),:)=spcx(find(md2.mesh.vertexonboundary),:);
+ 		md2.diagnostic.spcvy(find(md2.mesh.vertexonboundary),:)=spcy(find(md2.mesh.vertexonboundary),:);
+ 		md2.diagnostic.spcvz(find(md2.mesh.vertexonboundary),:)=0;
+-		md2.prognostic.spcthickness(find(md2.mesh.vertexonboundary),:)=spct(find(md2.mesh.vertexonboundary),:);
++		md2.masstransport.spcthickness(find(md2.mesh.vertexonboundary),:)=spct(find(md2.mesh.vertexonboundary),:);
+ 		md2.diagnostic.spcvx=[md2.diagnostic.spcvx; steps];
+ 		md2.diagnostic.spcvy=[md2.diagnostic.spcvy; steps];
+ 		md2.diagnostic.spcvz=[md2.diagnostic.spcvz; steps];
+-		md2.prognostic.spcthickness=[md2.prognostic.spcthickness; steps];
++		md2.masstransport.spcthickness=[md2.masstransport.spcthickness; steps];
+ 	end
+ 
+ 	%Diagnostic.  Don't spc the icefront vertices.
+@@ -148,7 +148,7 @@
+ 		md2.diagnostic.spcvx(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
+ 		md2.diagnostic.spcvy(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
+ 		md2.diagnostic.spcvz(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
+-		md2.prognostic.spcthickness(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
++		md2.masstransport.spcthickness(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
+ 	end
+ 
+ 	%Clear results fields
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 15766)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 15767)
+@@ -25,9 +25,9 @@
+ 		numanalyses=1 
+ 		analyses=[EnthalpyAnalysisEnum()]
+ 
+-	elif solutiontype == PrognosticSolutionEnum():
++	elif solutiontype == MasstransportSolutionEnum():
+ 		numanalyses=1 
+-		analyses=[PrognosticAnalysisEnum()]
++		analyses=[MasstransportAnalysisEnum()]
+ 
+ 	elif solutiontype == BalancethicknessSolutionEnum():
+ 		numanalyses=1 
+@@ -47,7 +47,7 @@
+ 
+ 	elif solutiontype == TransientSolutionEnum():
+ 		numanalyses=9 
+-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),PrognosticAnalysisEnum()]
++		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),MasstransportAnalysisEnum()]
+ 
+ 	elif solutiontype == FlaimSolutionEnum():
+ 		numanalyses=1 
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 15766)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 15767)
+@@ -60,9 +60,9 @@
+ 		numanalyses=1; 
+ 		analyses=[EnthalpyAnalysisEnum()];
+ 
+-	case PrognosticSolutionEnum(),
++	case MasstransportSolutionEnum(),
+ 		numanalyses=1; 
+-		analyses=[PrognosticAnalysisEnum()];
++		analyses=[MasstransportAnalysisEnum()];
+ 
+ 	case BalancethicknessSolutionEnum(),
+ 		numanalyses=1; 
+@@ -86,7 +86,7 @@
+ 
+ 	case TransientSolutionEnum(),
+ 		numanalyses=9; 
+-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();PrognosticAnalysisEnum()];
++		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();MasstransportAnalysisEnum()];
+ 
+ 	case FlaimSolutionEnum(),
+ 		numanalyses=1; 
+Index: ../trunk-jpl/src/m/qmu/process_qmu_options.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/process_qmu_options.m	(revision 15766)
++++ ../trunk-jpl/src/m/qmu/process_qmu_options.m	(revision 15767)
+@@ -39,7 +39,7 @@
+ %check solution type is supported
+ if ~(strcmpi(analysis_type,'control') |  ...
+ 		strcmpi(analysis_type,'diagnostic') |  ...
+-		strcmpi(analysis_type,'prognostic') |  ...
++		strcmpi(analysis_type,'masstransport') |  ...
+ 		strcmpi(analysis_type,'thermal') |  ...
+ 		strcmpi(analysis_type,'parameters') |  ...
+ 		strcmpi(analysis_type,'transient') ),
+Index: ../trunk-jpl/src/m/enum/TransientIsprognosticEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/TransientIsprognosticEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/TransientIsprognosticEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=TransientIsprognosticEnum()
+-%TRANSIENTISPROGNOSTICENUM - Enum of TransientIsprognostic
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=TransientIsprognosticEnum()
+-
+-macro=StringToEnum('TransientIsprognostic');
+Index: ../trunk-jpl/src/m/enum/PrognosticNumRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticNumRequestedOutputsEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticNumRequestedOutputsEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticNumRequestedOutputsEnum()
+-%PROGNOSTICNUMREQUESTEDOUTPUTSENUM - Enum of PrognosticNumRequestedOutputs
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticNumRequestedOutputsEnum()
+-
+-macro=StringToEnum('PrognosticNumRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/PrognosticPenaltyFactorEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticPenaltyFactorEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticPenaltyFactorEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticPenaltyFactorEnum()
+-%PROGNOSTICPENALTYFACTORENUM - Enum of PrognosticPenaltyFactor
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticPenaltyFactorEnum()
+-
+-macro=StringToEnum('PrognosticPenaltyFactor');
+Index: ../trunk-jpl/src/m/enum/PrognosticHydrostaticAdjustmentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticHydrostaticAdjustmentEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticHydrostaticAdjustmentEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticHydrostaticAdjustmentEnum()
+-%PROGNOSTICHYDROSTATICADJUSTMENTENUM - Enum of PrognosticHydrostaticAdjustment
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticHydrostaticAdjustmentEnum()
+-
+-macro=StringToEnum('PrognosticHydrostaticAdjustment');
+Index: ../trunk-jpl/src/m/enum/PrognosticSpcthicknessEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticSpcthicknessEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticSpcthicknessEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticSpcthicknessEnum()
+-%PROGNOSTICSPCTHICKNESSENUM - Enum of PrognosticSpcthickness
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticSpcthicknessEnum()
+-
+-macro=StringToEnum('PrognosticSpcthickness');
+Index: ../trunk-jpl/src/m/enum/PrognosticStabilizationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticStabilizationEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticStabilizationEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticStabilizationEnum()
+-%PROGNOSTICSTABILIZATIONENUM - Enum of PrognosticStabilization
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticStabilizationEnum()
+-
+-macro=StringToEnum('PrognosticStabilization');
+Index: ../trunk-jpl/src/m/enum/PrognosticRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticRequestedOutputsEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticRequestedOutputsEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticRequestedOutputsEnum()
+-%PROGNOSTICREQUESTEDOUTPUTSENUM - Enum of PrognosticRequestedOutputs
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticRequestedOutputsEnum()
+-
+-macro=StringToEnum('PrognosticRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/PrognosticSolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticSolutionEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticSolutionEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticSolutionEnum()
+-%PROGNOSTICSOLUTIONENUM - Enum of PrognosticSolution
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticSolutionEnum()
+-
+-macro=StringToEnum('PrognosticSolution');
+Index: ../trunk-jpl/src/m/enum/PrognosticVertexPairingEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticVertexPairingEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticVertexPairingEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticVertexPairingEnum()
+-%PROGNOSTICVERTEXPAIRINGENUM - Enum of PrognosticVertexPairing
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticVertexPairingEnum()
+-
+-macro=StringToEnum('PrognosticVertexPairing');
+Index: ../trunk-jpl/src/m/enum/PrognosticAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticAnalysisEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticAnalysisEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticAnalysisEnum()
+-%PROGNOSTICANALYSISENUM - Enum of PrognosticAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticAnalysisEnum()
+-
+-macro=StringToEnum('PrognosticAnalysis');
+Index: ../trunk-jpl/src/m/enum/PrognosticMinThicknessEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticMinThicknessEnum.m	(revision 15766)
++++ ../trunk-jpl/src/m/enum/PrognosticMinThicknessEnum.m	(revision 15767)
+@@ -1,11 +0,0 @@
+-function macro=PrognosticMinThicknessEnum()
+-%PROGNOSTICMINTHICKNESSENUM - Enum of PrognosticMinThickness
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PrognosticMinThicknessEnum()
+-
+-macro=StringToEnum('PrognosticMinThickness');
+Index: ../trunk-jpl/src/m/enum/MasstransportNumRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportNumRequestedOutputsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportNumRequestedOutputsEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportNumRequestedOutputsEnum()
++%MASSTRANSPORTNUMREQUESTEDOUTPUTSENUM - Enum of MasstransportNumRequestedOutputs
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportNumRequestedOutputsEnum()
++
++macro=StringToEnum('MasstransportNumRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/TransientIsmasstransportEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/TransientIsmasstransportEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/TransientIsmasstransportEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=TransientIsmasstransportEnum()
++%TRANSIENTISMASSTRANSPORTENUM - Enum of TransientIsmasstransport
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=TransientIsmasstransportEnum()
++
++macro=StringToEnum('TransientIsmasstransport');
+Index: ../trunk-jpl/src/m/enum/MasstransportAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportAnalysisEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportAnalysisEnum()
++%MASSTRANSPORTANALYSISENUM - Enum of MasstransportAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportAnalysisEnum()
++
++macro=StringToEnum('MasstransportAnalysis');
+Index: ../trunk-jpl/src/m/enum/MasstransportRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportRequestedOutputsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportRequestedOutputsEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportRequestedOutputsEnum()
++%MASSTRANSPORTREQUESTEDOUTPUTSENUM - Enum of MasstransportRequestedOutputs
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportRequestedOutputsEnum()
++
++macro=StringToEnum('MasstransportRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/MasstransportMinThicknessEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportMinThicknessEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportMinThicknessEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportMinThicknessEnum()
++%MASSTRANSPORTMINTHICKNESSENUM - Enum of MasstransportMinThickness
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportMinThicknessEnum()
++
++macro=StringToEnum('MasstransportMinThickness');
+Index: ../trunk-jpl/src/m/enum/MasstransportPenaltyFactorEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportPenaltyFactorEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportPenaltyFactorEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportPenaltyFactorEnum()
++%MASSTRANSPORTPENALTYFACTORENUM - Enum of MasstransportPenaltyFactor
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportPenaltyFactorEnum()
++
++macro=StringToEnum('MasstransportPenaltyFactor');
+Index: ../trunk-jpl/src/m/enum/MasstransportStabilizationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportStabilizationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportStabilizationEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportStabilizationEnum()
++%MASSTRANSPORTSTABILIZATIONENUM - Enum of MasstransportStabilization
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportStabilizationEnum()
++
++macro=StringToEnum('MasstransportStabilization');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15766)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15767)
+@@ -186,14 +186,14 @@
+ def MeshYEnum(): return StringToEnum("MeshY")[0]
+ def MeshZEnum(): return StringToEnum("MeshZ")[0]
+ def MiscellaneousNameEnum(): return StringToEnum("MiscellaneousName")[0]
+-def PrognosticHydrostaticAdjustmentEnum(): return StringToEnum("PrognosticHydrostaticAdjustment")[0]
+-def PrognosticMinThicknessEnum(): return StringToEnum("PrognosticMinThickness")[0]
+-def PrognosticPenaltyFactorEnum(): return StringToEnum("PrognosticPenaltyFactor")[0]
+-def PrognosticSpcthicknessEnum(): return StringToEnum("PrognosticSpcthickness")[0]
+-def PrognosticStabilizationEnum(): return StringToEnum("PrognosticStabilization")[0]
+-def PrognosticVertexPairingEnum(): return StringToEnum("PrognosticVertexPairing")[0]
+-def PrognosticNumRequestedOutputsEnum(): return StringToEnum("PrognosticNumRequestedOutputs")[0]
+-def PrognosticRequestedOutputsEnum(): return StringToEnum("PrognosticRequestedOutputs")[0]
++def MasstransportHydrostaticAdjustmentEnum(): return StringToEnum("MasstransportHydrostaticAdjustment")[0]
++def MasstransportMinThicknessEnum(): return StringToEnum("MasstransportMinThickness")[0]
++def MasstransportPenaltyFactorEnum(): return StringToEnum("MasstransportPenaltyFactor")[0]
++def MasstransportSpcthicknessEnum(): return StringToEnum("MasstransportSpcthickness")[0]
++def MasstransportStabilizationEnum(): return StringToEnum("MasstransportStabilization")[0]
++def MasstransportVertexPairingEnum(): return StringToEnum("MasstransportVertexPairing")[0]
++def MasstransportNumRequestedOutputsEnum(): return StringToEnum("MasstransportNumRequestedOutputs")[0]
++def MasstransportRequestedOutputsEnum(): return StringToEnum("MasstransportRequestedOutputs")[0]
+ def QmuIsdakotaEnum(): return StringToEnum("QmuIsdakota")[0]
+ def MassFluxSegmentsEnum(): return StringToEnum("MassFluxSegments")[0]
+ def MassFluxSegmentsPresentEnum(): return StringToEnum("MassFluxSegmentsPresent")[0]
+@@ -255,7 +255,7 @@
+ def TimesteppingTimeStepEnum(): return StringToEnum("TimesteppingTimeStep")[0]
+ def TransientIsdiagnosticEnum(): return StringToEnum("TransientIsdiagnostic")[0]
+ def TransientIsgroundinglineEnum(): return StringToEnum("TransientIsgroundingline")[0]
+-def TransientIsprognosticEnum(): return StringToEnum("TransientIsprognostic")[0]
++def TransientIsmasstransportEnum(): return StringToEnum("TransientIsmasstransport")[0]
+ def TransientIsthermalEnum(): return StringToEnum("TransientIsthermal")[0]
+ def TransientIsgiaEnum(): return StringToEnum("TransientIsgia")[0]
+ def TransientNumRequestedOutputsEnum(): return StringToEnum("TransientNumRequestedOutputs")[0]
+@@ -290,8 +290,8 @@
+ def HydrologyDCEfficientAnalysisEnum(): return StringToEnum("HydrologyDCEfficientAnalysis")[0]
+ def HydrologySolutionEnum(): return StringToEnum("HydrologySolution")[0]
+ def MeltingAnalysisEnum(): return StringToEnum("MeltingAnalysis")[0]
+-def PrognosticAnalysisEnum(): return StringToEnum("PrognosticAnalysis")[0]
+-def PrognosticSolutionEnum(): return StringToEnum("PrognosticSolution")[0]
++def MasstransportAnalysisEnum(): return StringToEnum("MasstransportAnalysis")[0]
++def MasstransportSolutionEnum(): return StringToEnum("MasstransportSolution")[0]
+ def SteadystateSolutionEnum(): return StringToEnum("SteadystateSolution")[0]
+ def SurfaceSlopeAnalysisEnum(): return StringToEnum("SurfaceSlopeAnalysis")[0]
+ def SurfaceSlopeSolutionEnum(): return StringToEnum("SurfaceSlopeSolution")[0]
+Index: ../trunk-jpl/src/m/enum/MasstransportHydrostaticAdjustmentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportHydrostaticAdjustmentEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportHydrostaticAdjustmentEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportHydrostaticAdjustmentEnum()
++%MASSTRANSPORTHYDROSTATICADJUSTMENTENUM - Enum of MasstransportHydrostaticAdjustment
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportHydrostaticAdjustmentEnum()
++
++macro=StringToEnum('MasstransportHydrostaticAdjustment');
+Index: ../trunk-jpl/src/m/enum/MasstransportSpcthicknessEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportSpcthicknessEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportSpcthicknessEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportSpcthicknessEnum()
++%MASSTRANSPORTSPCTHICKNESSENUM - Enum of MasstransportSpcthickness
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportSpcthicknessEnum()
++
++macro=StringToEnum('MasstransportSpcthickness');
+Index: ../trunk-jpl/src/m/enum/MasstransportSolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportSolutionEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportSolutionEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportSolutionEnum()
++%MASSTRANSPORTSOLUTIONENUM - Enum of MasstransportSolution
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportSolutionEnum()
++
++macro=StringToEnum('MasstransportSolution');
+Index: ../trunk-jpl/src/m/enum/MasstransportVertexPairingEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportVertexPairingEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportVertexPairingEnum.m	(revision 15767)
+@@ -0,0 +1,11 @@
++function macro=MasstransportVertexPairingEnum()
++%MASSTRANSPORTVERTEXPAIRINGENUM - Enum of MasstransportVertexPairing
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportVertexPairingEnum()
++
++macro=StringToEnum('MasstransportVertexPairing');
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 15766)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 15767)
+@@ -47,7 +47,7 @@
+ 		md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
+ 		print "      no balancethickness.thickening_rate specified: values set as zero"
+ 
+-	md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15766)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15767)
+@@ -77,7 +77,7 @@
+ 	disp('      no balancethickness.thickening_rate specified: values set as zero');
+ end
+ 
+-md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 15766)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 15767)
+@@ -46,7 +46,7 @@
+ 	disp('      no balancethickness.thickening_rate specified: values set as zero');
+ end
+ 
+-md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15766)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15767)
+@@ -71,7 +71,7 @@
+ 		md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
+ 		print "      no balancethickness.thickening_rate specified: values set as zero"
+ 
+-	md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15766)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15767)
+@@ -78,7 +78,7 @@
+ 		md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
+ 		print "      no balancethickness.thickening_rate specified: values set as zero"
+ 
+-	md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15766)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15767)
+@@ -66,7 +66,7 @@
+ 	disp('      no balancethickness.thickening_rate specified: values set as zero');
+ end
+ 
+-md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
Index: /issm/oecreview/Archive/15392-16133/ISSM-15767-15768.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15767-15768.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15767-15768.diff	(revision 16134)
@@ -0,0 +1,138 @@
+Index: ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15767)
++++ ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15768)
+@@ -25,6 +25,31 @@
+ 		loadingforce             = NaN;
+ 		requested_outputs        = NaN;
+ 	end
++	methods (Static)
++		function obj = loadobj(obj) % {{{
++			% This function is directly called by matlab when a model object is
++			% loaded. If the input is a struct it is an old version of this class and
++			% old fields must be recovered (make sure they are in the deprecated
++			% model properties)
++
++			if verLessThan('matlab','7.9'),
++				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
++				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
++
++				% This is a Matlab bug: all the fields of md have their default value
++				% Example of error message:
++				% Warning: Error loading an object of class 'model':
++				% Undefined function or method 'exist' for input arguments of type 'cell'
++				%
++				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
++			end
++
++			if size(md.diagnostic.icefront,2)==3 || size(md.diagnostic.icefront,2)==5,
++				front=md.diagnostic.icefront;
++				md.diagnostic.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
++			end
++		end% }}}
++	end
+ 	methods
+ 		function obj = diagnostic(varargin) % {{{
+ 			switch nargin
+@@ -150,6 +175,7 @@
+ 			fielddisplay(obj,'requested_outputs','additional outputs requested');
+ 
+ 		end % }}}
++
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','spcvx','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+ 			WriteData(fid,'object',obj,'fieldname','spcvy','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15767)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15768)
+@@ -864,7 +864,7 @@
+ 			if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
+ 			if isfield(structmd,'max_steadystate_iterations'), md.steadystate.maxiter=structmd.max_steadystate_iterations; end
+ 			if isfield(structmd,'isdiagnostic'), md.transient.isdiagnostic=structmd.isdiagnostic; end
+-			if isfield(structmd,'ismasstransport'), md.transient.ismasstransport=structmd.ismasstransport; end
++			if isfield(structmd,'isprognostic'), md.transient.ismasstransport=structmd.isprognostic; end
+ 			if isfield(structmd,'isthermal'), md.transient.isthermal=structmd.isthermal; end
+ 			if isfield(structmd,'control_analysis'), md.inversion.iscontrol=structmd.control_analysis; end
+ 			if isfield(structmd,'weights'), md.inversion.cost_functions_coefficients=structmd.weights; end
+@@ -941,10 +941,7 @@
+ 			if isnumeric(md.verbose),
+ 				md.verbose=verbose;
+ 			end
+-			if size(md.diagnostic.icefront,2)==3 || size(md.diagnostic.icefront,2)==5,
+-				front=md.diagnostic.icefront;
+-				md.diagnostic.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
+-			end
++
+ 			if isfield(structmd,'spcvelocity'), 
+ 				md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+ 				md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+@@ -1045,10 +1042,15 @@
+ 			if ~isfield(structmd,'diagnostic_ref');
+ 				md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+ 			end
+-
+ 			if ~isfield(structmd,'loadingforce');
+ 				md.diagnostic.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 			end
++
++			%2013 August 9
++			if isfield(structmd,'prognostic') & isa(structmd.prognostic,'prognostic'),
++				disp('Recovering old prognostic class');
++				md.masstransport=masstransport(structmd.prognostic);
++			end
+ 		end% }}}
+ 		function md = setdefaultparameters(md) % {{{
+ 
+Index: ../trunk-jpl/src/m/classes/masstransport.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.m	(revision 15767)
++++ ../trunk-jpl/src/m/classes/masstransport.m	(revision 15768)
+@@ -13,11 +13,47 @@
+ 		 penalty_factor         = 0;
+ 		 requested_outputs      = NaN;
+ 	end
++	methods (Static)
++		function obj = loadobj(obj) % {{{
++			% This function is directly called by matlab when a model object is
++			% loaded. If the input is a struct it is an old version of this class and
++			% old fields must be recovered (make sure they are in the deprecated
++			% model properties)
++
++			if verLessThan('matlab','7.9'),
++				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
++				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
++
++				% This is a Matlab bug: all the fields of md have their default value
++				% Example of error message:
++				% Warning: Error loading an object of class 'model':
++				% Undefined function or method 'exist' for input arguments of type 'cell'
++				%
++				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
++			end
++
++			if isstruct(obj)
++				disp('Recovering masstransport from older version');
++				objstruct = obj;
++				obj = structtoobj(masstransport(),objstruct);
++			end
++		end% }}}
++	end
+ 	methods
+ 		function obj = masstransport(varargin) % {{{
+ 			switch nargin
+ 				case 0
+ 					obj=setdefaultparameters(obj);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('masstransport');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							obj.(fieldname) = inputstruct.(fieldname);
++						end
++					end
+ 				otherwise
+ 					error('constructor not supported');
+ 			end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15768-15769.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15768-15769.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15768-15769.diff	(revision 16134)
@@ -0,0 +1,68 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15768)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15769)
+@@ -6875,10 +6875,9 @@
+ ElementMatrix* Penta::CreateKMatrixCouplingSSAFSViscous(void){
+ 
+ 	/*Constants*/
+-	const int numdofm      = NDOF2 *NUMVERTICES2D;
+-	const int numdofs      = NDOF4 *NUMVERTICES;
+-	const int numdofstotal = NDOF4 *NUMVERTICES + NDOF3;
+-	const int numdoftotal  = 2 *numdofm+numdofstotal;
++	const int numdofm     = NDOF2 *NUMVERTICES2D;
++	const int numdofs     = NDOF4 *NUMVERTICES + NDOF3;
++	const int numdoftotal = 2 *numdofm+numdofs;
+ 
+ 	/*Intermediaries */
+ 	int        i,j;
+@@ -6886,17 +6885,17 @@
+ 	IssmDouble viscosity,FSreconditioning; //viscosity
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble B[4][numdofstotal];
++	IssmDouble B[4][numdofs];
+ 	IssmDouble Bprime[4][numdofm];
+ 	IssmDouble B2[3][numdofm];
+-	IssmDouble Bprime2[3][numdofstotal];
++	IssmDouble Bprime2[3][numdofs];
+ 	IssmDouble D[4][4]={0.0};            // material matrix, simple scalar matrix.
+ 	IssmDouble D2[3][3]={0.0};            // material matrix, simple scalar matrix.
+ 	IssmDouble D_scalar;
+ 	IssmDouble Ke_gg[numdofs][numdofm]={0.0}; //local element stiffness matrix 
+ 	IssmDouble Ke_gg2[numdofm][numdofs]={0.0}; //local element stiffness matrix 
+-	IssmDouble Ke_gg_gaussian[numdofstotal][numdofm]; //stiffness matrix evaluated at the gaussian point.
+-	IssmDouble Ke_gg_gaussian2[numdofm][numdofstotal]; //stiffness matrix evaluated at the gaussian point.
++	IssmDouble Ke_gg_gaussian[numdofs][numdofm]; //stiffness matrix evaluated at the gaussian point.
++	IssmDouble Ke_gg_gaussian2[numdofm][numdofs]; //stiffness matrix evaluated at the gaussian point.
+ 	GaussPenta *gauss=NULL;
+ 	GaussTria  *gauss_tria=NULL;
+ 	Node       *node_list[20];
+@@ -6960,21 +6959,21 @@
+ 		D[3][3]=-gauss->weight*Jdet*FSreconditioning;
+ 		for (i=0;i<3;i++) D2[i][i]=D_scalar;
+ 
+-		TripleMultiply( &B[0][0],4,numdofstotal,1,
++		TripleMultiply( &B[0][0],4,numdofs,1,
+ 					&D[0][0],4,4,0,
+ 					&Bprime[0][0],4,numdofm,0,
+ 					&Ke_gg_gaussian[0][0],0);
+ 
+ 		TripleMultiply( &B2[0][0],3,numdofm,1,
+ 					&D2[0][0],3,3,0,
+-					&Bprime2[0][0],3,numdofstotal,0,
++					&Bprime2[0][0],3,numdofs,0,
+ 					&Ke_gg_gaussian2[0][0],0);
+ 
+-		for( i=0; i<numdofstotal; i++) for(j=0;j<numdofm; j++)      Ke_gg[i][j]+=Ke_gg_gaussian[i][j];
+-		for( i=0; i<numdofm; i++)      for(j=0;j<numdofstotal; j++) Ke_gg2[i][j]+=Ke_gg_gaussian2[i][j];
++		for( i=0; i<numdofs; i++) for(j=0;j<numdofm; j++)      Ke_gg[i][j]+=Ke_gg_gaussian[i][j];
++		for( i=0; i<numdofm; i++)      for(j=0;j<numdofs; j++) Ke_gg2[i][j]+=Ke_gg_gaussian2[i][j];
+ 	} 
+-	for(i=0;i<numdofs;i++) for(j=0;j<numdofm;j++) Ke->values[(i+2*numdofm)*numdoftotal+j]+=Ke_gg[i][j];
+-	for(i=0;i<numdofm;i++) for(j=0;j<numdofs;j++) Ke->values[i*numdoftotal+(j+2*numdofm)]+=Ke_gg2[i][j];
++	for(i=0;i<numdofs;i++) for(j=0;j<numdofm;j++)      Ke->values[(i+2*numdofm)*numdoftotal+j]+=Ke_gg[i][j];
++	for(i=0;i<numdofm;i++)      for(j=0;j<numdofs;j++) Ke->values[i*numdoftotal+(j+2*numdofm)]+=Ke_gg2[i][j];
+ 
+ 	/*Transform Coordinate System*/
+ 	TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15769-15770.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15769-15770.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15769-15770.diff	(revision 16134)
@@ -0,0 +1,92 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15769)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15770)
+@@ -6989,7 +6989,6 @@
+ ElementMatrix* Penta::CreateKMatrixCouplingSSAFSFriction(void){
+ 
+ 	/*Constants*/
+-	const int numnodes  = 2 *NUMVERTICES;
+ 	const int numdof    = NUMVERTICES *NDOF4;
+ 	const int numdofm   = NUMVERTICES *NDOF2;
+ 	const int numdof2d  = NUMVERTICES2D *NDOF4;
+@@ -7015,19 +7014,25 @@
+ 	IssmDouble Ke_drag_gaussian2[numdof2d][numdof2dm];
+ 	Friction*  friction=NULL;
+ 	GaussPenta *gauss=NULL;
+-	Node       *node_list[numnodes];
+-	int         cs_list[numnodes];
+ 
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(IsFloating() || !IsOnBed()) return NULL;
++
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int numnodes  = 2*vnumnodes-1+pnumnodes;
++
++	Node       *node_list[numnodes];
++	int         cs_list[numnodes];
++
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes,numnodes,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+ 	/*Prepare node list*/
+-	for(i=0;i<NUMVERTICES;i++){
++	for(i=0;i<numnodes+NUMVERTICES;i++){
+ 		node_list[i+0*NUMVERTICES] = this->nodes[i];
+ 		node_list[i+1*NUMVERTICES] = this->nodes[i];
+ 		cs_list[i+0*NUMVERTICES] = XYEnum;
+@@ -7096,6 +7101,7 @@
+ 	TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
+ 
+ 	/*Clean up and return*/
++	xDelete<int>(cs_list);
+ 	delete gauss;
+ 	delete friction;
+ 	return Ke;
+@@ -8351,8 +8357,18 @@
+ 	if(!IsOnBed() || IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=HOFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
+ 
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int numnodes  = vnumnodes+pnumnodes;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,FSvelocityEnum);
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+@@ -8385,16 +8401,17 @@
+ 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
+ 
+ 		for(i=0;i<NUMVERTICES2D;i++){
+-			pe->values[i*NDOF4+0]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[0]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[0])*basis[i];
+-			pe->values[i*NDOF4+1]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[1]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[1])*basis[i];
+-			pe->values[i*NDOF4+2]+=Jdet2d*gauss->weight*2*viscosity*(dw[0]*bed_normal[0]+dw[1]*bed_normal[1]+dw[2]*bed_normal[2])*basis[i];
++			pe->values[i*NDOF3+0]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[0]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[0])*basis[i];
++			pe->values[i*NDOF3+1]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[1]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[1])*basis[i];
++			pe->values[i*NDOF3+2]+=Jdet2d*gauss->weight*2*viscosity*(dw[0]*bed_normal[0]+dw[1]*bed_normal[1]+dw[2]*bed_normal[2])*basis[i];
+ 		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZEnum);
++	TransformLoadVectorCoord(pe,nodes,vnumnodes+pnumnodes,cs_list);
+ 
+ 	/*Clean up and return*/
++	xDelete<int>(cs_list);
+ 	delete gauss;
+ 	delete friction;
+ 	return pe;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15770-15771.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15770-15771.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15770-15771.diff	(revision 16134)
@@ -0,0 +1,14563 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15770)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15771)
+@@ -82,15 +82,15 @@
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0
++md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+-md.diagnostic.restol=0.05
+-md.diagnostic.reltol=0.05
++md.stressbalance.restol=0.05
++md.stressbalance.reltol=0.05
+ md.steadystate.reltol=0.05
+-md.diagnostic.abstol=float('nan')
++md.stressbalance.abstol=float('nan')
+ md.timestepping.time_step=5.
+ md.timestepping.final_time=5.
+ 
+@@ -101,20 +101,20 @@
+ md.geometry.bathymetry[pos]=md.geometry.bed[pos]-900.
+ 
+ #Deal with boundary conditions:
+-md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.stressbalance.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.stressbalance.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.stressbalance.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ pos=numpy.nonzero(numpy.logical_and(md.mesh.x==0,md.mesh.y==0))
+-md.diagnostic.spcvx[pos]=0
+-md.diagnostic.spcvy[pos]=0
++md.stressbalance.spcvx[pos]=0
++md.stressbalance.spcvy[pos]=0
+ 
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.mask.icelevelset[pos]=0
+ md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+-md.diagnostic.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
++md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
++md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+ md.thermal.spctemperature=737.*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ #Change name so that no test have the same name
+Index: ../trunk-jpl/test/Par/RoundSheetEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetEISMINT.par	(revision 15770)
++++ ../trunk-jpl/test/Par/RoundSheetEISMINT.par	(revision 15771)
+@@ -37,16 +37,16 @@
+ md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
+ 
+ %Deal with boundary conditions:
+-disp('      boundary conditions for diagnostic model:');
++disp('      boundary conditions for stressbalance model:');
+ md=SetMarineIceSheetBC(md,'../Exp/RoundFrontEISMINT.exp');
+ 
+ radius=sqrt((md.mesh.x).^2+(md.mesh.y).^2);
+ pos=find(radius==min(radius));
+ md.mesh.x(pos)=0.; md.mesh.y(pos)=0.; %the closest node to the center is changed to be exactly at the center
+ 
+-md.diagnostic.spcvx(pos)=0.;
+-md.diagnostic.spcvy(pos)=0.;
+-md.diagnostic.spcvz(pos)=0.;
++md.stressbalance.spcvx(pos)=0.;
++md.stressbalance.spcvy(pos)=0.;
++md.stressbalance.spcvz(pos)=0.;
+ 
+ %parallel options
+ md.timestepping.final_time=50000.;
+Index: ../trunk-jpl/test/Par/79North.par
+===================================================================
+--- ../trunk-jpl/test/Par/79North.par	(revision 15770)
++++ ../trunk-jpl/test/Par/79North.par	(revision 15771)
+@@ -34,17 +34,17 @@
+ md.surfaceforcings.mass_balance=15.*ones(md.mesh.numberofvertices,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.3;
++md.stressbalance.viscosity_overshoot=0.3;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+ md.timestepping.time_step=1.;
+ md.timestepping.final_time=3.;
+-md.diagnostic.restol=0.05;
+-md.diagnostic.reltol=0.005;
++md.stressbalance.restol=0.05;
++md.stressbalance.reltol=0.005;
+ md.steadystate.reltol=0.005;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.abstol=NaN;
+ 
+ %Boundary conditions:
+ md=SetMarineIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 15771)
+@@ -65,15 +65,15 @@
+ md.friction.q = ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot = 0.3
++md.stressbalance.viscosity_overshoot = 0.3
+ md.masstransport.stabilization = 1.
+ md.thermal.stabilization = 1.
+ md.settings.waitonlock = 30
+ md.verbose=verbose()
+-md.diagnostic.restol = 0.10
++md.stressbalance.restol = 0.10
+ md.steadystate.reltol = 0.02
+-md.diagnostic.reltol = 0.02
+-md.diagnostic.abstol = nan
++md.stressbalance.reltol = 0.02
++md.stressbalance.abstol = nan
+ md.timestepping.time_step = 1.
+ md.timestepping.final_time = 3.
+ 
+Index: ../trunk-jpl/test/Par/SquareThermal.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.par	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareThermal.par	(revision 15771)
+@@ -34,7 +34,7 @@
+ 
+ %Deal with boundary conditions:
+ 
+-disp('      boundary conditions for diagnostic model');
++disp('      boundary conditions for stressbalance model');
+ md=SetMarineIceSheetBC(md,'../Exp/SquareFront.exp');
+ 
+ disp('      boundary conditions for thermal model');
+Index: ../trunk-jpl/test/Par/RoundSheetEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetEISMINT.py	(revision 15770)
++++ ../trunk-jpl/test/Par/RoundSheetEISMINT.py	(revision 15771)
+@@ -40,7 +40,7 @@
+ md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Deal with boundary conditions:
+-print "      boundary conditions for diagnostic model:"
++print "      boundary conditions for stressbalance model:"
+ md=SetMarineIceSheetBC(md,'../Exp/RoundFrontEISMINT.exp')
+ 
+ radius=numpy.sqrt((md.mesh.x)**2+(md.mesh.y)**2)
+@@ -48,9 +48,9 @@
+ md.mesh.x[pos]=0.
+ md.mesh.y[pos]=0.    #the closest node to the center is changed to be exactly at the center
+ 
+-md.diagnostic.spcvx[pos]=0.
+-md.diagnostic.spcvy[pos]=0.
+-md.diagnostic.spcvz[pos]=0.
++md.stressbalance.spcvx[pos]=0.
++md.stressbalance.spcvy[pos]=0.
++md.stressbalance.spcvz[pos]=0.
+ 
+ #parallel options
+ md.timestepping.final_time=50000.
+Index: ../trunk-jpl/test/Par/Pig.par
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.par	(revision 15770)
++++ ../trunk-jpl/test/Par/Pig.par	(revision 15771)
+@@ -33,16 +33,16 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.3;
++md.stressbalance.viscosity_overshoot=0.3;
+ md.masstransport.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=2;
+-md.diagnostic.restol=0.05;
+-md.diagnostic.reltol=1;
++md.stressbalance.restol=0.05;
++md.stressbalance.reltol=1;
+ md.steadystate.reltol=1;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.abstol=NaN;
+ 
+ %Boundary conditions:
+ md=SetMarineIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par	(revision 15770)
++++ ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par	(revision 15771)
+@@ -43,13 +43,13 @@
+ md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
+ 
+ %Deal with boundary conditions:
+-disp('      boundary conditions for diagnostic model:');
++disp('      boundary conditions for stressbalance model:');
+ md=SetMarineIceSheetBC(md,'../Exp/RoundFrontEISMINT.exp');
+ 
+ radius=sqrt((md.mesh.x).^2+(md.mesh.y).^2);
+ pos=find(radius==min(radius));
+ md.mesh.x(pos)=0.; md.mesh.y(pos)=0.; %the closest node to the center is changed to be exactly at the center
+ 
+-md.diagnostic.spcvx(pos)=0.;
+-md.diagnostic.spcvy(pos)=0.;
+-md.diagnostic.spcvz(pos)=0.;
++md.stressbalance.spcvx(pos)=0.;
++md.stressbalance.spcvy(pos)=0.;
++md.stressbalance.spcvz(pos)=0.;
+Index: ../trunk-jpl/test/Par/SquareShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.par	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareShelf.par	(revision 15771)
+@@ -34,15 +34,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.3;
++md.stressbalance.viscosity_overshoot=0.3;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.settings.waitonlock=30;
+ md.verbose=verbose(0);
+-md.diagnostic.restol=0.10;
++md.stressbalance.restol=0.10;
+ md.steadystate.reltol=0.02;
+-md.diagnostic.reltol=0.02;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.reltol=0.02;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=3;
+ 
+Index: ../trunk-jpl/test/Par/ISMIPA.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPA.par	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPA.par	(revision 15771)
+@@ -17,6 +17,6 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+-disp('      boundary conditions for diagnostic model');
++disp('      boundary conditions for stressbalance model');
+ %Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 15771)
+@@ -50,15 +50,15 @@
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0
++md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1.
+ md.thermal.stabilization=1.
+ md.verbose = verbose(0)
+ md.settings.waitonlock=30
+-md.diagnostic.restol=0.05
+-md.diagnostic.reltol=0.05
++md.stressbalance.restol=0.05
++md.stressbalance.reltol=0.05
+ md.steadystate.reltol=0.05
+-md.diagnostic.abstol=float('nan')
++md.stressbalance.abstol=float('nan')
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=3.
+ 
+Index: ../trunk-jpl/test/Par/ISMIPB.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPB.par	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPB.par	(revision 15771)
+@@ -17,6 +17,6 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+-disp('      boundary conditions for diagnostic model');
++disp('      boundary conditions for stressbalance model');
+ %Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/SquareThermal.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.py	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareThermal.py	(revision 15771)
+@@ -38,7 +38,7 @@
+ 
+ #Deal with boundary conditions:
+ 
+-print "      boundary conditions for diagnostic model"
++print "      boundary conditions for stressbalance model"
+ md=SetMarineIceSheetBC(md,'../Exp/SquareFront.exp')
+ 
+ print "      boundary conditions for thermal model"
+Index: ../trunk-jpl/test/Par/ISMIPC.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPC.par	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPC.par	(revision 15771)
+@@ -18,6 +18,6 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+-disp('      boundary conditions for diagnostic model:');
++disp('      boundary conditions for stressbalance model:');
+ %Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/ISMIPD.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPD.par	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPD.par	(revision 15771)
+@@ -17,6 +17,6 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+-disp('      boundary conditions for diagnostic model:');
++disp('      boundary conditions for stressbalance model:');
+ %Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 15770)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 15771)
+@@ -44,16 +44,16 @@
+ md.friction.q=ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.3
++md.stressbalance.viscosity_overshoot=0.3
+ md.masstransport.stabilization=1.
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=2.
+-md.diagnostic.restol=0.05
+-md.diagnostic.reltol=1.
++md.stressbalance.restol=0.05
++md.stressbalance.reltol=1.
+ md.steadystate.reltol=1.
+-md.diagnostic.abstol=float('nan')
++md.stressbalance.abstol=float('nan')
+ 
+ #Boundary conditions:
+ md=SetMarineIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/ISMIPE.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPE.par	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPE.par	(revision 15771)
+@@ -25,6 +25,6 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+-disp('      boundary conditions for diagnostic model:');
++disp('      boundary conditions for stressbalance model:');
+ %Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/ISMIPF.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPF.par	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPF.par	(revision 15771)
+@@ -17,10 +17,10 @@
+ md.materials.rheology_n=1.*ones(md.mesh.numberofelements,1);
+ md.materials.rheology_law='None';
+ 
+-disp('      boundary conditions for diagnostic model');
++disp('      boundary conditions for stressbalance model');
+ %Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md);
+-md.diagnostic.spcvx=100.*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx=100.*ones(md.mesh.numberofvertices,1);
+ md.initialization.vx=zeros(md.mesh.numberofvertices,1);
+ md.initialization.vy=zeros(md.mesh.numberofvertices,1);
+ md.initialization.vz=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py	(revision 15770)
++++ ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py	(revision 15771)
+@@ -46,7 +46,7 @@
+ md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Deal with boundary conditions:
+-print "      boundary conditions for diagnostic model:"
++print "      boundary conditions for stressbalance model:"
+ md=SetMarineIceSheetBC(md,'../Exp/RoundFrontEISMINT.exp')
+ 
+ radius=numpy.sqrt((md.mesh.x)**2+(md.mesh.y)**2)
+@@ -54,6 +54,6 @@
+ md.mesh.x[pos]=0.
+ md.mesh.y[pos]=0.    #the closest node to the center is changed to be exactly at the center
+ 
+-md.diagnostic.spcvx[pos]=0.
+-md.diagnostic.spcvy[pos]=0.
+-md.diagnostic.spcvz[pos]=0.
++md.stressbalance.spcvx[pos]=0.
++md.stressbalance.spcvy[pos]=0.
++md.stressbalance.spcvz[pos]=0.
+Index: ../trunk-jpl/test/Par/ISMIPB.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPB.py	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPB.py	(revision 15771)
+@@ -20,6 +20,6 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+-print "      boundary conditions for diagnostic model"
++print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/ISMIPD.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPD.py	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPD.py	(revision 15771)
+@@ -20,6 +20,6 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+-print "      boundary conditions for diagnostic model:"
++print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/ISMIPF.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPF.py	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPF.py	(revision 15771)
+@@ -20,10 +20,10 @@
+ md.materials.rheology_n=1.*numpy.ones((md.mesh.numberofelements,1))
+ md.materials.rheology_law='None'
+ 
+-print "      boundary conditions for diagnostic model"
++print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md)
+-md.diagnostic.spcvx=100.*numpy.ones((md.mesh.numberofvertices,1))
++md.stressbalance.spcvx=100.*numpy.ones((md.mesh.numberofvertices,1))
+ md.initialization.vx=numpy.zeros((md.mesh.numberofvertices,1))
+ md.initialization.vy=numpy.zeros((md.mesh.numberofvertices,1))
+ md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/GiaBenchmarksAB.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaBenchmarksAB.par	(revision 15770)
++++ ../trunk-jpl/test/Par/GiaBenchmarksAB.par	(revision 15771)
+@@ -51,15 +51,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0;
++md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+-md.diagnostic.restol=0.05;
++md.stressbalance.restol=0.05;
+ md.steadystate.reltol=0.05;
+-md.diagnostic.reltol=0.05;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.reltol=0.05;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=1.;
+ md.timestepping.final_time=3.;
+ 
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15770)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15771)
+@@ -74,15 +74,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0;
++md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+-md.diagnostic.restol=0.05;
+-md.diagnostic.reltol=0.05;
++md.stressbalance.restol=0.05;
++md.stressbalance.reltol=0.05;
+ md.steadystate.reltol=0.05;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=5.;
+ md.timestepping.final_time=5.;
+ 
+@@ -92,19 +92,19 @@
+ pos=find(md.mask.vertexonfloatingice); md.geometry.bathymetry(pos)=md.geometry.bed(pos)-900.;
+ 
+ %Deal with boundary conditions:
+-md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ pos=find(md.mesh.x==0 & md.mesh.y==0);
+-md.diagnostic.spcvx(pos)=0;
+-md.diagnostic.spcvy(pos)=0;
++md.stressbalance.spcvx(pos)=0;
++md.stressbalance.spcvy(pos)=0;
+ 
+ md.mask.icelevelset(find(md.mesh.vertexonboundary))=0;
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+-md.diagnostic.loadingforce=0*ones(md.mesh.numberofvertices,3);
++md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
++md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ md.thermal.spctemperature=737.*ones(md.mesh.numberofvertices,1);
+ 
+ %Change name so that no test have the same name
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 15771)
+@@ -34,15 +34,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.3;
++md.stressbalance.viscosity_overshoot=0.3;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.settings.waitonlock=30;
+ md.verbose=verbose(0);
+-md.diagnostic.restol=0.10;
++md.stressbalance.restol=0.10;
+ md.steadystate.reltol=0.02;
+-md.diagnostic.reltol=0.02;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.reltol=0.02;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=3;
+ 
+Index: ../trunk-jpl/test/Par/GiaBenchmarksCD.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaBenchmarksCD.par	(revision 15770)
++++ ../trunk-jpl/test/Par/GiaBenchmarksCD.par	(revision 15771)
+@@ -50,15 +50,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0;
++md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+-md.diagnostic.restol=0.05;
++md.stressbalance.restol=0.05;
+ md.steadystate.reltol=0.05;
+-md.diagnostic.reltol=0.05;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.reltol=0.05;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=1.;
+ md.timestepping.final_time=3.;
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 15771)
+@@ -41,15 +41,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0;
++md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+-md.diagnostic.restol=0.05;
++md.stressbalance.restol=0.05;
+ md.steadystate.reltol=0.05;
+-md.diagnostic.reltol=0.05;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.reltol=0.05;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=1.;
+ md.timestepping.final_time=3.;
+ 
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 15771)
+@@ -38,15 +38,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0;
++md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+-md.diagnostic.restol=0.05;
+-md.diagnostic.reltol=0.05;
++md.stressbalance.restol=0.05;
++md.stressbalance.reltol=0.05;
+ md.steadystate.reltol=0.05;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=3;
+ 
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 15770)
++++ ../trunk-jpl/test/Par/79North.py	(revision 15771)
+@@ -46,17 +46,17 @@
+ md.surfaceforcings.mass_balance=15*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.3
++md.stressbalance.viscosity_overshoot=0.3
+ md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=3.
+-md.diagnostic.restol=0.05
+-md.diagnostic.reltol=0.005
++md.stressbalance.restol=0.05
++md.stressbalance.reltol=0.005
+ md.steadystate.reltol=0.005
+-md.diagnostic.abstol=float('NaN')
++md.stressbalance.abstol=float('NaN')
+ 
+ #Boundary conditions:
+ md=SetMarineIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 15771)
+@@ -52,15 +52,15 @@
+ md.friction.q=ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0
++md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1
+ md.thermal.stabilization=1
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+-md.diagnostic.restol=0.05
++md.stressbalance.restol=0.05
+ md.steadystate.reltol=0.05
+-md.diagnostic.reltol=0.05
+-md.diagnostic.abstol=float('NaN')
++md.stressbalance.reltol=0.05
++md.stressbalance.abstol=float('NaN')
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=3.
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 15771)
+@@ -36,15 +36,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0;
++md.stressbalance.viscosity_overshoot=0.0;
+ md.masstransport.stabilization=1.;
+ md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+-md.diagnostic.restol=0.05;
++md.stressbalance.restol=0.05;
+ md.steadystate.reltol=0.05;
+-md.diagnostic.reltol=0.05;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.reltol=0.05;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=1.;
+ md.timestepping.final_time=3.;
+ 
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 15771)
+@@ -65,15 +65,15 @@
+ md.friction.q = ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot = 0.3
++md.stressbalance.viscosity_overshoot = 0.3
+ md.masstransport.stabilization = 1.
+ md.thermal.stabilization = 1.
+ md.settings.waitonlock = 30
+ md.verbose=verbose()
+-md.diagnostic.restol = 0.10
++md.stressbalance.restol = 0.10
+ md.steadystate.reltol = 0.02
+-md.diagnostic.reltol = 0.02
+-md.diagnostic.abstol = nan
++md.stressbalance.reltol = 0.02
++md.stressbalance.abstol = nan
+ md.timestepping.time_step = 1.
+ md.timestepping.final_time = 3.
+ 
+Index: ../trunk-jpl/test/Par/ISMIPA.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPA.py	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPA.py	(revision 15771)
+@@ -20,6 +20,6 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+-print "      boundary conditions for diagnostic model"
++print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 15770)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 15771)
+@@ -46,15 +46,15 @@
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0
++md.stressbalance.viscosity_overshoot=0.0
+ md.masstransport.stabilization=1.
+ md.thermal.stabilization=1.
+ md.verbose=verbose(0)
+ md.settings.waitonlock=30
+-md.diagnostic.restol=0.05
++md.stressbalance.restol=0.05
+ md.steadystate.reltol=0.05
+-md.diagnostic.reltol=0.05
+-md.diagnostic.abstol=float('NaN')
++md.stressbalance.reltol=0.05
++md.stressbalance.abstol=float('NaN')
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=3.
+ 
+Index: ../trunk-jpl/test/Par/ISMIPC.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPC.py	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPC.py	(revision 15771)
+@@ -21,6 +21,6 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+-print "      boundary conditions for diagnostic model:"
++print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/ISMIPE.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPE.py	(revision 15770)
++++ ../trunk-jpl/test/Par/ISMIPE.py	(revision 15771)
+@@ -30,6 +30,6 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+-print "      boundary conditions for diagnostic model:"
++print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/NightlyRun/test202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test202.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ 
+ # Fields and tolerances to track changes
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 15771)
+@@ -34,17 +34,17 @@
+ md.inversion.vy_obs=md.initialization.vy
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','MaterialsRheologyB','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-11,1e-12,1e-12,1e-09,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.MaterialsRheologyB,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.MaterialsRheologyB,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test430.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test430.py	(revision 15771)
+@@ -13,18 +13,18 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(3,1.)
+ md=setflowequation(md,'FS','all')
+-md.diagnostic.isnewton=1
+-md.diagnostic.restol=0.0001
++md.stressbalance.isnewton=1
++md.stressbalance.restol=0.0001
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-07,1e-07,1e-06,1e-07,1e-07]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test404.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test404.py	(revision 15771)
+@@ -14,15 +14,15 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-07,1e-07,1e-06,1e-07,1e-07]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test401.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test401.m	(revision 15771)
+@@ -3,14 +3,14 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test320.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test320.m	(revision 15771)
+@@ -18,17 +18,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	(md.results.DiagnosticSolution.J),...
+-	(md.results.DiagnosticSolution.FrictionCoefficient),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	(md.results.StressbalanceSolution.J),...
++	(md.results.StressbalanceSolution.FrictionCoefficient),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 15771)
+@@ -20,18 +20,18 @@
+ 
+ md.rifts.riftstruct[0]['fill']=MelangeEnum()
+ md.rifts.riftstruct[0]['fraction']=0
+-md.diagnostic.rift_penalty_lock=2
+-md.diagnostic.rift_penalty_threshold=0
++md.stressbalance.rift_penalty_lock=2
++md.stressbalance.rift_penalty_threshold=0
+ md.rifts.riftstruct[0]['fractionincrement']=0.1
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[2e-11,1e-11,1e-11,1e-11]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test109.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test109.py	(revision 15771)
+@@ -13,7 +13,7 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test303.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test303.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test303.m	(revision 15771)
+@@ -3,14 +3,14 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'SIA','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test205.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','../Exp/SquareHalfRight.exp','fill','SSA','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-05,1e-05,1e-05,1e-05,1e-05};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 15771)
+@@ -10,7 +10,7 @@
+ md.surfaceforcings.mass_balance(:)=100.;
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'SSA','all');
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 15771)
+@@ -4,11 +4,11 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.toolkits.DefaultAnalysis=issmsolver();
+-md.diagnostic.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure',...
+@@ -16,11 +16,11 @@
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.StressTensorxx),...
+-	(md.results.DiagnosticSolution.StressTensoryy),...
+-	(md.results.DiagnosticSolution.StressTensorxy),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.StressTensorxx),...
++	(md.results.StressbalanceSolution.StressTensoryy),...
++	(md.results.StressbalanceSolution.StressTensorxy),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1205.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1205.py	(revision 15771)
+@@ -35,17 +35,17 @@
+ 
+ #Spc the nodes on the bed
+ pos=numpy.nonzero(md.mesh.vertexonbed)
+-md.diagnostic.spcvx[pos]=0.
+-md.diagnostic.spcvy[pos]=0.
+-md.diagnostic.spcvz[pos]=0.
++md.stressbalance.spcvx[pos]=0.
++md.stressbalance.spcvy[pos]=0.
++md.stressbalance.spcvz[pos]=0.
+ 
+ #Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Calculate the depth averaged velocity field (2d):
+-vx=md.results.DiagnosticSolution.Vx
+-vy=md.results.DiagnosticSolution.Vy
++vx=md.results.StressbalanceSolution.Vx
++vy=md.results.StressbalanceSolution.Vy
+ vel=numpy.zeros((md.mesh.numberofvertices2d,1))
+ 
+ for i in xrange(0,md.mesh.numberofvertices2d):
+Index: ../trunk-jpl/test/NightlyRun/test1202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1202.m	(revision 15771)
+@@ -1,4 +1,4 @@
+-%Test on the diagnostic model and the masstransport in 2d.
++%Test on the stressbalance model and the masstransport in 2d.
+ printingflag=false;
+ 
+ %tests 3 and 4: using Glen's flow law
+@@ -10,11 +10,11 @@
+ 
+ %Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %plot results
+-vx=(md.results.DiagnosticSolution.Vx);
+-vy=(md.results.DiagnosticSolution.Vy);
++vx=(md.results.StressbalanceSolution.Vx);
++vy=(md.results.StressbalanceSolution.Vy);
+ 
+ plotmodel(md,'data',vx,'contourlevels',{0,20,40,60,60,100,120,140,160,180,-20,-40,-60,-80,-100,-120,-140,-160,-180}, ...
+ 	'contourcolor','k')
+Index: ../trunk-jpl/test/NightlyRun/test1104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1104.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1104.m	(revision 15771)
+@@ -16,13 +16,13 @@
+ 	md=setflowequation(md,'HO','all');
+ 
+ 	%Create dirichlet on the bed only
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ 	pos=find(md.mesh.vertexonbed);
+-	md.diagnostic.spcvx(pos)=0.;
+-	md.diagnostic.spcvy(pos)=0.;
++	md.stressbalance.spcvx(pos)=0.;
++	md.stressbalance.spcvy(pos)=0.;
+ 
+ 	%Create MPCs to have periodic boundary conditions
+ 	posx=find(md.mesh.x==0.);
+@@ -31,24 +31,24 @@
+ 	posy=find(md.mesh.y==0. & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x)); %Don't take the same nodes two times
+ 	posy2=find(md.mesh.y==max(md.mesh.y) & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x));
+ 
+-	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
++	md.stressbalance.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+-	%Compute the diagnostic
+-	md.diagnostic.abstol=NaN;
++	%Compute the stressbalance
++	md.stressbalance.abstol=NaN;
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 	pos=find(md.mesh.x==0. | md.mesh.y==0. | md.mesh.x==max(md.mesh.x) | md.mesh.y==max(md.mesh.y));
+-	md.diagnostic.spcvx(pos)=md.results.DiagnosticSolution.Vx(pos);
+-	md.diagnostic.spcvy(pos)=md.results.DiagnosticSolution.Vy(pos);
+-	md.diagnostic.vertex_pairing=[];
++	md.stressbalance.spcvx(pos)=md.results.StressbalanceSolution.Vx(pos);
++	md.stressbalance.spcvy(pos)=md.results.StressbalanceSolution.Vy(pos);
++	md.stressbalance.vertex_pairing=[];
+ 	md=setflowequation(md,'FS','all');
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	%Plot the results and save them
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	results{i}=md.results.StressbalanceSolution;
+ 
+ 	plotmodel(md,'data',vx,'data',vy,'data',vz,'layer#all',md.mesh.numberoflayers)
+ end
+Index: ../trunk-jpl/test/NightlyRun/test1602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1602.m	(revision 15771)
+@@ -3,14 +3,14 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'HO','all');
+-md.diagnostic.spcvx(find(md.mesh.y>0.))=NaN;
++md.stressbalance.spcvx(find(md.mesh.y>0.))=NaN;
+ md.initialization.vx(:)=0.;
+ md.initialization.vy(:)=0.;
+ md.initialization.vel(:)=0.;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
+-vel0=md.results.DiagnosticSolution.Vel;
++md=solve(md,StressbalanceSolutionEnum());
++vel0=md.results.StressbalanceSolution.Vel;
+ 
+ theta=30.*pi/180.;
+ x=md.mesh.x;
+@@ -18,10 +18,10 @@
+ md.mesh.x=cos(theta)*x-sin(theta)*y;
+ md.mesh.y=sin(theta)*x+cos(theta)*y;
+ 
+-md.diagnostic.referential(:,1:3)=repmat([cos(theta),sin(theta),0],md.mesh.numberofvertices,1);
+-md.diagnostic.referential(:,4:6)=repmat([0,0,1],md.mesh.numberofvertices,1);
+-md=solve(md,DiagnosticSolutionEnum());
+-vel1=md.results.DiagnosticSolution.Vel;
++md.stressbalance.referential(:,1:3)=repmat([cos(theta),sin(theta),0],md.mesh.numberofvertices,1);
++md.stressbalance.referential(:,4:6)=repmat([0,0,1],md.mesh.numberofvertices,1);
++md=solve(md,StressbalanceSolutionEnum());
++vel1=md.results.StressbalanceSolution.Vel;
+ 
+ plotmodel(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference','view#all',2)
+ disp(['Error between Cartesian and rotated CS: ' num2str(max(abs(vel0-vel1))/(max(abs(vel0))+eps)) ]);
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 15771)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test211.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test211.py	(revision 15771)
+@@ -13,7 +13,7 @@
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,1.)
+ md=setflowequation(md,'FS','all')
+-md.diagnostic.reltol=NaN
++md.stressbalance.reltol=NaN
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test104.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test104.py	(revision 15771)
+@@ -13,15 +13,15 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-06,1e-08,1e-08]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test306.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test306.py	(revision 15771)
+@@ -13,15 +13,15 @@
+ md.extrude(4,2.)
+ md=setflowequation(md,'SIA','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 15771)
+@@ -18,17 +18,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	(md.results.DiagnosticSolution.J),...
+-	(md.results.DiagnosticSolution.MaterialsRheologyB),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	(md.results.StressbalanceSolution.J),...
++	(md.results.StressbalanceSolution.MaterialsRheologyB),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test427.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test427.py	(revision 15771)
+@@ -21,7 +21,7 @@
+ md.extrude(3,1.)
+ 
+ md.surfaceforcings.mass_balance[:]=-150
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='SoftMigration'
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test290.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test290.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test290.m	(revision 15771)
+@@ -5,15 +5,15 @@
+ md=setflowequation(md,'FS','all');
+ md.flowequation.fe_FS=4;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-7,1e-7,1e-7,1e-7,1e-7};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1107.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1107.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1107.py	(revision 15771)
+@@ -34,9 +34,9 @@
+ 	md=setflowequation(md,'HO','all')
+ 
+ 	#We need one grd on dirichlet: the 4 corners are set to zero
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	#Create MPCs to have periodic boundary conditions
+ #	posx=find(md.mesh.x==0. & ~(md.mesh.y==0. & md.mesh.vertexonbed) & ~(md.mesh.y==L & md.mesh.vertexonbed));
+@@ -47,38 +47,38 @@
+ 	posy=numpy.nonzero(logical_and_n(md.mesh.y==0.,md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]    #Don't take the same nodes two times
+ 	posy2=numpy.nonzero(logical_and_n(md.mesh.y==numpy.max(md.mesh.y),md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]
+ 
+-	md.diagnostic.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
++	md.stressbalance.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
+ 
+ 	#Add spc on the corners
+ 	pos=numpy.nonzero(logical_and_n(numpy.logical_or(md.mesh.x==0.,md.mesh.x==L),numpy.logical_or(md.mesh.y==0.,md.mesh.y==L),md.mesh.vertexonbed))
+-	md.diagnostic.spcvy[:]=0.
+-	md.diagnostic.spcvx[pos]=0.
++	md.stressbalance.spcvy[:]=0.
++	md.stressbalance.spcvx[pos]=0.
+ 	if   (L==5000.):
+-		md.diagnostic.spcvx[pos]=16.0912
++		md.stressbalance.spcvx[pos]=16.0912
+ 	elif (L==10000.):
+-		md.diagnostic.spcvx[pos]=16.52
++		md.stressbalance.spcvx[pos]=16.52
+ 	elif (L==20000.):
+-		md.diagnostic.spcvx[pos]=17.77
++		md.stressbalance.spcvx[pos]=17.77
+ 	elif (L==40000.):
+-		md.diagnostic.spcvx[pos]=19.88
++		md.stressbalance.spcvx[pos]=19.88
+ 	elif (L==80000.):
+-		md.diagnostic.spcvx[pos]=18.65
++		md.stressbalance.spcvx[pos]=18.65
+ 	elif (L==160000.):
+-		md.diagnostic.spcvx[pos]=16.91
++		md.stressbalance.spcvx[pos]=16.91
+ 	
+ 	#Spc the bed at zero for vz
+ 	pos=numpy.nonzero(md.mesh.vertexonbed)
+-	md.diagnostic.spcvz[pos]=0.
++	md.stressbalance.spcvz[pos]=0.
+ 
+-	#Compute the diagnostic
++	#Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8)
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 
+ 	#Plot the results and save them
+-	vx=md.results.DiagnosticSolution.Vx
+-	vy=md.results.DiagnosticSolution.Vy
+-	vz=md.results.DiagnosticSolution.Vz
+-	results.append(md.results.DiagnosticSolution)
++	vx=md.results.StressbalanceSolution.Vx
++	vy=md.results.StressbalanceSolution.Vy
++	vz=md.results.StressbalanceSolution.Vz
++	results.append(md.results.StressbalanceSolution)
+ 	minvx.append(numpy.min(vx[-md.mesh.numberofvertices2d:]))
+ 	maxvx.append(numpy.max(vx[-md.mesh.numberofvertices2d:]))
+ 
+Index: ../trunk-jpl/test/NightlyRun/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test220.py	(revision 15771)
+@@ -14,16 +14,16 @@
+ md.extrude(2,1.)
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test301.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test301.py	(revision 15771)
+@@ -12,14 +12,14 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test503.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test503.py	(revision 15771)
+@@ -13,15 +13,15 @@
+ md.extrude(3,0.9)
+ md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test422.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test422.py	(revision 15771)
+@@ -14,16 +14,16 @@
+ md.extrude(5,1.)
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.diagnostic.reltol=0.4
+-md=solve(md,DiagnosticSolutionEnum())
++md.stressbalance.reltol=0.4
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test402.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test402.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,4,1.);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test321.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test321.m	(revision 15771)
+@@ -18,17 +18,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-08,1e-07,1e-10,1e-10,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	(md.results.DiagnosticSolution.J),...
+-	(md.results.DiagnosticSolution.FrictionCoefficient),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	(md.results.StressbalanceSolution.J),...
++	(md.results.StressbalanceSolution.FrictionCoefficient),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test304.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 15771)
+@@ -22,14 +22,14 @@
+ md=setflowequation(md,'SSA','all')
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-11,1e-11,1e-11,1e-11]
+ field_values=[\
+-	   md.results.DiagnosticSolution.Vx,\
+-	   md.results.DiagnosticSolution.Vy,\
+-	   md.results.DiagnosticSolution.Vel,\
+-	   md.results.DiagnosticSolution.Pressure,\
++	   md.results.StressbalanceSolution.Vx,\
++	   md.results.StressbalanceSolution.Vy,\
++	   md.results.StressbalanceSolution.Vel,\
++	   md.results.StressbalanceSolution.Pressure,\
+ 	   ]
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 15771)
+@@ -11,7 +11,7 @@
+ md=extrude(md,3,1.);
+ 
+ md.surfaceforcings.mass_balance(:)=-150;
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='SoftMigration';
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test1102.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1102.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1102.py	(revision 15771)
+@@ -42,9 +42,9 @@
+ 
+ 	#Create dirichlet on the bed only
+ 	pos=numpy.nonzero(md.mesh.vertexonbed)
+-	md.diagnostic.spcvx[pos]=0.
+-	md.diagnostic.spcvy[pos]=0.
+-	md.diagnostic.spcvz[pos]=0.
++	md.stressbalance.spcvx[pos]=0.
++	md.stressbalance.spcvy[pos]=0.
++	md.stressbalance.spcvz[pos]=0.
+ 
+ #	#Create MPCs to have periodic boundary conditions
+ #	posx=numpy.nonzero(md.mesh.x==0.)[0]
+@@ -55,21 +55,21 @@
+ #	posy=numpy.nonzero(logical_and_n(md.mesh.y==0.,md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x),numpy.logical_not(md.mesh.vertexonbed)))[0]    #Don't take the same nodes two times
+ #	posy2=numpy.nonzero(logical_and_n(md.mesh.y==numpy.max(md.mesh.y),md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x),numpy.logical_not(md.mesh.vertexonbed)))[0]
+ 
+-#	md.diagnostic.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
++#	md.stressbalance.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
+ 
+-	#Compute the diagnostic
+-	md.diagnostic.abstol=float('NaN')
+-	md.diagnostic.reltol=float('NaN')
+-	md.diagnostic.restol=1.
++	#Compute the stressbalance
++	md.stressbalance.abstol=float('NaN')
++	md.stressbalance.reltol=float('NaN')
++	md.stressbalance.restol=1.
+ 	md.cluster=generic('name',oshostname(),'np',8)
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 
+ 	#Plot the results and save them
+-	vx=md.results.DiagnosticSolution.Vx
+-	vy=md.results.DiagnosticSolution.Vy
+-	vz=md.results.DiagnosticSolution.Vz
+-	pressure=md.results.DiagnosticSolution.Pressure
+-	results.append(md.results.DiagnosticSolution)
++	vx=md.results.StressbalanceSolution.Vx
++	vy=md.results.StressbalanceSolution.Vy
++	vz=md.results.StressbalanceSolution.Vz
++	pressure=md.results.StressbalanceSolution.Pressure
++	results.append(md.results.StressbalanceSolution)
+ 	minvx.append(numpy.min(vx[-md.mesh.numberofvertices2d:]))
+ 	maxvx.append(numpy.max(vx[-md.mesh.numberofvertices2d:]))
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3002.m	(revision 15771)
+@@ -7,15 +7,15 @@
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1203.m	(revision 15771)
+@@ -1,4 +1,4 @@
+-%Test on the diagnostic model and the masstransport in 2d
++%Test on the stressbalance model and the masstransport in 2d
+ printingflag=false;
+ 
+ %test 5 and 6: 
+@@ -10,14 +10,14 @@
+ 
+ %Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=find(md.mesh.y==max(md.mesh.y));
+-md.diagnostic.spcvy(pos)=400.*(((md.mesh.x(pos)-100000.)/25000.).^2-ones(size(pos,1),1)).*heaviside((1.+eps)*ones(size(pos,1),1)-((md.mesh.x(pos)-100000.)/25000.).^2);
++md.stressbalance.spcvy(pos)=400.*(((md.mesh.x(pos)-100000.)/25000.).^2-ones(size(pos,1),1)).*heaviside((1.+eps)*ones(size(pos,1),1)-((md.mesh.x(pos)-100000.)/25000.).^2);
+ 
+ %Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+-vx=(md.results.DiagnosticSolution.Vx);
+-vy=(md.results.DiagnosticSolution.Vy);
++vx=(md.results.StressbalanceSolution.Vx);
++vy=(md.results.StressbalanceSolution.Vy);
+ 
+ %plot results
+ plotmodel(md,'data',vx,'contourlevels',{0,20,40,60,80,100,-20,-40,-60,-80,-100},...
+Index: ../trunk-jpl/test/NightlyRun/test1105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1105.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1105.m	(revision 15771)
+@@ -20,9 +20,9 @@
+ 	md=setflowequation(md,'HO','all');
+ 
+ 	%Create MPCs to have periodic boundary conditions
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ 	posx=find(md.mesh.x==0. & md.mesh.y~=0. & md.mesh.y~=L);
+ 	posx2=find(md.mesh.x==L & md.mesh.y~=0. & md.mesh.y~=L);
+@@ -30,45 +30,45 @@
+ 	posy=find(md.mesh.y==0. & md.mesh.x~=0. & md.mesh.x~=L); %Don't take the same nodes two times
+ 	posy2=find(md.mesh.y==L & md.mesh.x~=0. & md.mesh.x~=L);
+ 
+-	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
++	md.stressbalance.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+ 	%Add spc on the corners
+ 	pos=find((md.mesh.x==0. | md.mesh.x==L) & (md.mesh.y==0. | md.mesh.y==L) & md.mesh.vertexonbed);
+-	md.diagnostic.spcvx(pos)=0.;
+-	md.diagnostic.spcvy(pos)=0.;
++	md.stressbalance.spcvx(pos)=0.;
++	md.stressbalance.spcvy(pos)=0.;
+ 	if(L==5000.),
+-		md.diagnostic.spcvx(pos)=15.66;
+-		md.diagnostic.spcvy(pos)=-0.1967;
++		md.stressbalance.spcvx(pos)=15.66;
++		md.stressbalance.spcvy(pos)=-0.1967;
+ 	elseif(L==10000.),
+-		md.diagnostic.spcvx(pos)=16.04;
+-		md.diagnostic.spcvy(pos)=-0.1977;
++		md.stressbalance.spcvx(pos)=16.04;
++		md.stressbalance.spcvy(pos)=-0.1977;
+ 	elseif(L==20000.),
+-		md.diagnostic.spcvx(pos)=16.53;
+-		md.diagnostic.spcvy(pos)=-1.27;
++		md.stressbalance.spcvx(pos)=16.53;
++		md.stressbalance.spcvy(pos)=-1.27;
+ 	elseif(L==40000.),
+-		md.diagnostic.spcvx(pos)=17.23;
+-		md.diagnostic.spcvy(pos)=-3.17;
++		md.stressbalance.spcvx(pos)=17.23;
++		md.stressbalance.spcvy(pos)=-3.17;
+ 	elseif(L==80000.),
+-		md.diagnostic.spcvx(pos)=16.68;
+-		md.diagnostic.spcvy(pos)=-2.69;
++		md.stressbalance.spcvx(pos)=16.68;
++		md.stressbalance.spcvy(pos)=-2.69;
+ 	elseif(L==160000.),
+-		md.diagnostic.spcvx(pos)=16.03;
+-		md.diagnostic.spcvy(pos)=-1.27;
++		md.stressbalance.spcvx(pos)=16.03;
++		md.stressbalance.spcvy(pos)=-1.27;
+ 	end
+ 	
+ 	%Spc the bed at zero for vz
+ 	pos=find(md.mesh.vertexonbed);
+-	md.diagnostic.spcvz(pos)=0.;
++	md.stressbalance.spcvz(pos)=0.;
+ 
+-	%Compute the diagnostic
++	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	%Plot the results and save them
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	results{i}=md.results.StressbalanceSolution;
+ 	minvx(i)=min(vx(end-md.mesh.numberofvertices2d+1:end));
+ 	maxvx(i)=max(vx(end-md.mesh.numberofvertices2d+1:end));
+ 
+Index: ../trunk-jpl/test/NightlyRun/test203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test203.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ 
+ # Fields and tolerances to track changes
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 15771)
+@@ -30,17 +30,17 @@
+ md.inversion.vy_obs=md.initialization.vy
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.FrictionCoefficient,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.FrictionCoefficient,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test405.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test405.py	(revision 15771)
+@@ -14,15 +14,15 @@
+ md.extrude(5,1.)
+ md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO','coupling','penalties')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[5e-05,5e-05,5e-05,5e-05,1e-05]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 15771)
+@@ -20,7 +20,7 @@
+ # from 0 m/yr at the grounding line.
+ 
+ # tighten
+-md.diagnostic.restol=10**-4
++md.stressbalance.restol=10**-4
+ 
+ # needed later
+ ymin=min(md.mesh.y)
+@@ -47,19 +47,19 @@
+ md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
+ 
+ # Boundary conditions:
+-md.diagnostic.spcvx=float(nan)*ones((md.mesh.numberofvertices,1))
+-md.diagnostic.spcvy=float(nan)*ones((md.mesh.numberofvertices,1))
+-md.diagnostic.spcvz=float(nan)*ones((md.mesh.numberofvertices,1))
++md.stressbalance.spcvx=float(nan)*ones((md.mesh.numberofvertices,1))
++md.stressbalance.spcvy=float(nan)*ones((md.mesh.numberofvertices,1))
++md.stressbalance.spcvz=float(nan)*ones((md.mesh.numberofvertices,1))
+ 
+ # constrain flanks to 0 normal velocity
+ pos=numpy.nonzero(numpy.logical_or(md.mesh.x==xmin,md.mesh.x==xmax))
+-md.diagnostic.spcvx[pos]=0
+-md.diagnostic.spcvz[pos]=float(nan)
++md.stressbalance.spcvx[pos]=0
++md.stressbalance.spcvz[pos]=float(nan)
+ 
+ # constrain grounding line to 0 velocity
+ pos=numpy.nonzero(md.mesh.y==ymin)
+-md.diagnostic.spcvx[pos]=0
+-md.diagnostic.spcvy[pos]=0
++md.stressbalance.spcvx[pos]=0
++md.stressbalance.spcvy[pos]=0
+ 
+ # icefront
+ nodeonicefront=zeros(md.mesh.numberofvertices)
+@@ -67,7 +67,7 @@
+ nodeonicefront[pos]=1
+ md.mask.icelevelset=1-nodeonicefront
+ 
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ # create analytical solution: strain rate is constant = ((rho_ice*g*h)/4B)^3 (Paterson, 4th Edition, page 292.
+ # ey_c=(md.materials.rho_ice*md.constants.g*(1-di)*md.geometry.thickness./(4*md.materials.rheology_B)).^3;
+@@ -77,5 +77,5 @@
+ field_names     =['Vy']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vy,\
++	md.results.StressbalanceSolution.Vy,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test232.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test232.m	(revision 15771)
+@@ -7,7 +7,7 @@
+ md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5., md.thermal.spctemperature+10., md.thermal.spctemperature+15.; 1.5 2.5 3.5 4.];
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=4;
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test313.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test313.m	(revision 15771)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('convergence',true,'solution',true);
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 15771)
+@@ -18,17 +18,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	(md.results.DiagnosticSolution.J),...
+-	(md.results.DiagnosticSolution.MaterialsRheologyB),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	(md.results.StressbalanceSolution.J),...
++	(md.results.StressbalanceSolution.MaterialsRheologyB),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test419.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test419.py	(revision 15771)
+@@ -14,15 +14,15 @@
+ md.extrude(5,1.)
+ md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 15771)
+@@ -9,14 +9,14 @@
+ md=setflowequation(md,'SSA','all');
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-11,1e-11,1e-11,1e-11};
+ field_values={...
+-	   (md.results.DiagnosticSolution.Vx),...
+-	   (md.results.DiagnosticSolution.Vy),...
+-	   (md.results.DiagnosticSolution.Vel),...
+-	   (md.results.DiagnosticSolution.Pressure),...
++	   (md.results.StressbalanceSolution.Vx),...
++	   (md.results.StressbalanceSolution.Vy),...
++	   (md.results.StressbalanceSolution.Vel),...
++	   (md.results.StressbalanceSolution.Pressure),...
+ 	   };
+Index: ../trunk-jpl/test/NightlyRun/test419.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test419.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1206.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1206.py	(revision 15771)
+@@ -35,17 +35,17 @@
+ 
+ #Spc the nodes on the bed
+ pos=numpy.nonzero(md.mesh.vertexonbed)
+-md.diagnostic.spcvx[pos]=0.
+-md.diagnostic.spcvy[pos]=0.
+-md.diagnostic.spcvz[pos]=0.
++md.stressbalance.spcvx[pos]=0.
++md.stressbalance.spcvy[pos]=0.
++md.stressbalance.spcvz[pos]=0.
+ 
+ #Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Calculate the depth averaged velocity field (2d):
+-vx=md.results.DiagnosticSolution.Vx
+-vy=md.results.DiagnosticSolution.Vy
++vx=md.results.StressbalanceSolution.Vx
++vy=md.results.StressbalanceSolution.Vy
+ vel=numpy.zeros((md.mesh.numberofvertices2d,1))
+ 
+ for i in xrange(0,md.mesh.numberofvertices2d):
+Index: ../trunk-jpl/test/NightlyRun/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test212.py	(revision 15771)
+@@ -31,7 +31,7 @@
+ 
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ 
+ # Fields and tolerances to track changes
+@@ -39,11 +39,11 @@
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-md.results.DiagnosticSolution.Gradient1,\
+-md.results.DiagnosticSolution.J,\
+-md.results.DiagnosticSolution.MaterialsRheologyBbar,\
+-md.results.DiagnosticSolution.Pressure,\
+-md.results.DiagnosticSolution.Vel,\
+-md.results.DiagnosticSolution.Vx,\
+-md.results.DiagnosticSolution.Vy,\
++md.results.StressbalanceSolution.Gradient1,\
++md.results.StressbalanceSolution.J,\
++md.results.StressbalanceSolution.MaterialsRheologyBbar,\
++md.results.StressbalanceSolution.Pressure,\
++md.results.StressbalanceSolution.Vel,\
++md.results.StressbalanceSolution.Vx,\
++md.results.StressbalanceSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 15771)
+@@ -3,8 +3,8 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.requested_outputs=StressTensorEnum();
+-md=solve(md,DiagnosticSolutionEnum());
++md.stressbalance.requested_outputs=StressTensorEnum();
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure',...
+@@ -12,11 +12,11 @@
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.StressTensorxx),...
+-	(md.results.DiagnosticSolution.StressTensoryy),...
+-	(md.results.DiagnosticSolution.StressTensorxy),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.StressTensorxx),...
++	(md.results.StressbalanceSolution.StressTensoryy),...
++	(md.results.StressbalanceSolution.StressTensorxy),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test307.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test307.py	(revision 15771)
+@@ -13,15 +13,15 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,2e-10,2e-10,1e-10]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test420.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test420.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test420.m	(revision 15771)
+@@ -22,16 +22,16 @@
+ 
+ %parameters
+ md.qmu.params.direct=true;
+-md.qmu.params.analysis_driver='diagnostic';
++md.qmu.params.analysis_driver='stressbalance';
+ md.qmu.params.evaluation_concurrency=1;
+ md.qmu.params.interval_type='forward';
+ 
+ 
+ %imperative! 
+-md.diagnostic.reltol=10^-5; %tighten for qmu analysese
++md.stressbalance.reltol=10^-5; %tighten for qmu analysese
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
++md=solve(md,StressbalanceSolutionEnum(),'overwrite','y');
+ md.qmu.results=md.results.dakota;
+ 
+ %test on thickness
+Index: ../trunk-jpl/test/NightlyRun/test501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test501.m	(revision 15771)
+@@ -3,14 +3,14 @@
+ md=parameterize(md,'../Par/Pig.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test322.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test322.m	(revision 15771)
+@@ -18,17 +18,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-06,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	(md.results.DiagnosticSolution.J),...
+-	(md.results.DiagnosticSolution.FrictionCoefficient),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	(md.results.StressbalanceSolution.J),...
++	(md.results.StressbalanceSolution.FrictionCoefficient),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test403.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test403.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test305.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test305.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,5,2.);
+ md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test207.m	(revision 15771)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test109.m	(revision 15771)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test428.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test428.py	(revision 15771)
+@@ -12,17 +12,17 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md=setflowequation(md,'SSA','all')
+-md.diagnostic.isnewton=1
+-md.diagnostic.restol=0.0001
++md.stressbalance.isnewton=1
++md.stressbalance.restol=0.0001
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test428.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test428.m	(revision 15771)
+@@ -2,17 +2,17 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'SSA','all');
+-md.diagnostic.isnewton=1;
+-md.diagnostic.restol=0.0001;
++md.stressbalance.isnewton=1;
++md.stressbalance.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1201.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1201.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1201.py	(revision 15771)
+@@ -46,7 +46,7 @@
+ 		md.masstransport.spcthickness[pos]=500.    #No NaN for DG
+ 
+ 	#solve
+-	md.transient.isdiagnostic=False
++	md.transient.isstressbalance=False
+ 	md.settings.output_frequency=500    #keep only last step
+ 	md.verbose=verbose()
+ 	md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/android.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/android.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/android.m	(revision 15771)
+@@ -4,8 +4,8 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('mprocessor',true,'module',true,'solution',true,'solver',true,'convergence',true,'control',true,'qmu',true,'autodiff',true);
+-md.diagnostic.requested_outputs=StressTensorEnum();
+-md=solve(md,DiagnosticSolutionEnum());
++md.stressbalance.requested_outputs=StressTensorEnum();
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	
+ index=md.mesh.elements;
+@@ -13,7 +13,7 @@
+ x=md.mesh.x;
+ y=md.mesh.y;
+ z=md.mesh.z;
+-vel=md.results.DiagnosticSolution.Vel;
++vel=md.results.StressbalanceSolution.Vel;
+ 
+ patch=zeros(nel,12);
+ for i=1:nel,
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 15771)
+@@ -9,7 +9,7 @@
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum()];
+ md.verbose=verbose('autodiff',true);
+-md.diagnostic.restol=1e-4;
++md.stressbalance.restol=1e-4;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ 
+ %setup autodiff parameters
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 15771)
+@@ -4,11 +4,11 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.diagnostic.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure',...
+@@ -16,15 +16,15 @@
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.StressTensorxx),...
+-	(md.results.DiagnosticSolution.StressTensoryy),...
+-	(md.results.DiagnosticSolution.StressTensorzz),...
+-	(md.results.DiagnosticSolution.StressTensorxy),...
+-	(md.results.DiagnosticSolution.StressTensorxz),...
+-	(md.results.DiagnosticSolution.StressTensoryz),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.StressTensorxx),...
++	(md.results.StressbalanceSolution.StressTensoryy),...
++	(md.results.StressbalanceSolution.StressTensorzz),...
++	(md.results.StressbalanceSolution.StressTensorxy),...
++	(md.results.StressbalanceSolution.StressTensorxz),...
++	(md.results.StressbalanceSolution.StressTensoryz),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1108.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1108.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1108.py	(revision 15771)
+@@ -29,14 +29,14 @@
+ 	md=setflowequation(md,'HO','all')
+ 
+ 	#We need one grd on dirichlet: the 4 corners are set to zero
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 	
+ 	pos=numpy.nonzero(logical_and_n(md.mesh.vertexonbed,numpy.logical_or(md.mesh.x==0.,md.mesh.x==numpy.max(md.mesh.x)),numpy.logical_or(md.mesh.y==0.,md.mesh.y==numpy.max(md.mesh.y))))
+-	md.diagnostic.spcvx[pos]=0.
+-	md.diagnostic.spcvy[pos]=0.
+-	md.diagnostic.spcvz[pos]=0.
++	md.stressbalance.spcvx[pos]=0.
++	md.stressbalance.spcvy[pos]=0.
++	md.stressbalance.spcvz[pos]=0.
+ 
+ 	#Create MPCs to have periodic boundary conditions
+ 	posx=numpy.nonzero(md.mesh.x==0.)[0]
+@@ -45,30 +45,30 @@
+ 	posy=numpy.nonzero(logical_and_n(md.mesh.y==0.,md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]    #Don't take the same nodes two times
+ 	posy2=numpy.nonzero(logical_and_n(md.mesh.y==numpy.max(md.mesh.y),md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]
+ 
+-	md.diagnostic.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
++	md.stressbalance.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
+ 
+-	#Compute the diagnostic
++	#Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8)
+ 	md.verbose=verbose('convergence',True)
+-	md=solve(md,DiagnosticSolutionEnum())
+-	md.diagnostic.reltol=float('NaN')
+-	md.diagnostic.abstol=float('NaN')
+-	md.diagnostic.vertex_pairing=numpy.empty((0,2))
++	md=solve(md,StressbalanceSolutionEnum())
++	md.stressbalance.reltol=float('NaN')
++	md.stressbalance.abstol=float('NaN')
++	md.stressbalance.vertex_pairing=numpy.empty((0,2))
+ 	#We need one grid on dirichlet: the 4 corners are set to zero
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 	pos=numpy.nonzero(logical_or_n(md.mesh.y==0.,md.mesh.x==0.,md.mesh.x==numpy.max(md.mesh.x),md.mesh.y==numpy.max(md.mesh.y)))    #Don't take the same nodes two times
+-	md.diagnostic.spcvx[pos]=md.results.DiagnosticSolution.Vx[pos]
+-	md.diagnostic.spcvy[pos]=md.results.DiagnosticSolution.Vy[pos]
++	md.stressbalance.spcvx[pos]=md.results.StressbalanceSolution.Vx[pos]
++	md.stressbalance.spcvy[pos]=md.results.StressbalanceSolution.Vy[pos]
+ 	md=setflowequation(md,'FS','all')
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 
+ 	#Plot the results and save them
+-	vx=md.results.DiagnosticSolution.Vx
+-	vy=md.results.DiagnosticSolution.Vy
+-	vz=md.results.DiagnosticSolution.Vz
+-	results.append(md.results.DiagnosticSolution)
++	vx=md.results.StressbalanceSolution.Vx
++	vy=md.results.StressbalanceSolution.Vy
++	vz=md.results.StressbalanceSolution.Vz
++	results.append(md.results.StressbalanceSolution)
+ 
+ #	plotmodel(md,'data',vx,'data',vy,'data',vz,'layer#all',md.mesh.numberoflayers)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1204.m	(revision 15771)
+@@ -1,4 +1,4 @@
+-%Test on the diagnostic model and the masstransport in 2d
++%Test on the stressbalance model and the masstransport in 2d
+ printingflag=false;
+ 
+ %tests 3 and 4: using Glen's flow law
+@@ -10,15 +10,15 @@
+ 
+ %Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=find(md.mesh.y==max(md.mesh.y));
+-md.diagnostic.spcvy(pos)=400.*(((md.mesh.x(pos)-100000.)/25000.).^2-ones(size(pos,1),1)).*heaviside((1.+eps)*ones(size(pos,1),1)-((md.mesh.x(pos)-100000.)/25000.).^2);
++md.stressbalance.spcvy(pos)=400.*(((md.mesh.x(pos)-100000.)/25000.).^2-ones(size(pos,1),1)).*heaviside((1.+eps)*ones(size(pos,1),1)-((md.mesh.x(pos)-100000.)/25000.).^2);
+ 
+ %Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %plot results
+-md.initialization.vx=(md.results.DiagnosticSolution.Vx);
+-md.initialization.vy=(md.results.DiagnosticSolution.Vy);
++md.initialization.vx=(md.results.StressbalanceSolution.Vx);
++md.initialization.vy=(md.results.StressbalanceSolution.Vy);
+ 
+ md.timestepping.time_step=1.;
+ md.timestepping.final_time=5000.;
+Index: ../trunk-jpl/test/NightlyRun/test1106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1106.m	(revision 15771)
+@@ -14,39 +14,39 @@
+ 
+ 	%Add spc on the borders
+ 	pos=find(md.mesh.x==0. | md.mesh.x==max(md.mesh.x) | md.mesh.y==0. | md.mesh.y==max(md.mesh.y));
+-	md.diagnostic.spcvx(pos)=0.;
+-	md.diagnostic.spcvy(pos)=0.;
++	md.stressbalance.spcvx(pos)=0.;
++	md.stressbalance.spcvy(pos)=0.;
+ 	if(L==5000.),
+-		md.diagnostic.spcvx(pos)=15.66;
+-		md.diagnostic.spcvy(pos)=-0.1967;
++		md.stressbalance.spcvx(pos)=15.66;
++		md.stressbalance.spcvy(pos)=-0.1967;
+ 	elseif(L==10000.),
+-		md.diagnostic.spcvx(pos)=16.04;
+-		md.diagnostic.spcvy(pos)=-0.1977;
++		md.stressbalance.spcvx(pos)=16.04;
++		md.stressbalance.spcvy(pos)=-0.1977;
+ 	elseif(L==20000.),
+-		md.diagnostic.spcvx(pos)=16.53;
+-		md.diagnostic.spcvy(pos)=-1.27;
++		md.stressbalance.spcvx(pos)=16.53;
++		md.stressbalance.spcvy(pos)=-1.27;
+ 	elseif(L==40000.),
+-		md.diagnostic.spcvx(pos)=17.23;
+-		md.diagnostic.spcvy(pos)=-3.17;
++		md.stressbalance.spcvx(pos)=17.23;
++		md.stressbalance.spcvy(pos)=-3.17;
+ 	elseif(L==80000.),
+-		md.diagnostic.spcvx(pos)=16.68;
+-		md.diagnostic.spcvy(pos)=-2.69;
++		md.stressbalance.spcvx(pos)=16.68;
++		md.stressbalance.spcvy(pos)=-2.69;
+ 	elseif(L==160000.),
+-		md.diagnostic.spcvx(pos)=16.03;
+-		md.diagnostic.spcvy(pos)=-1.27;
++		md.stressbalance.spcvx(pos)=16.03;
++		md.stressbalance.spcvy(pos)=-1.27;
+ 	end
+ 
+ 	md=setflowequation(md,'FS','all');
+ 
+-	%Compute the diagnostic
++	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	%Plot the results and save them
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	results{i}=md.results.StressbalanceSolution;
+ 
+ 	plotmodel(md,'data',vx,'data',vy,'data',vz,'layer#all',md.mesh.numberoflayers)
+ end
+Index: ../trunk-jpl/test/NightlyRun/test221.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test221.py	(revision 15771)
+@@ -13,16 +13,16 @@
+ md.extrude(2,1.)
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.diagnostic.viscosity_overshoot=0
+-md=solve(md,DiagnosticSolutionEnum())
++md.stressbalance.viscosity_overshoot=0
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test302.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test302.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test302.py	(revision 15771)
+@@ -12,14 +12,14 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test423.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test423.py	(revision 15771)
+@@ -30,7 +30,7 @@
+ 
+ md.transient.isthermal=False
+ md.transient.ismasstransport=False
+-md.transient.isdiagnostic=True
++md.transient.isstressbalance=True
+ md.transient.isgroundingline=True
+ 
+ #test different grounding line dynamics.
+Index: ../trunk-jpl/test/NightlyRun/test412.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test412.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test412.m	(revision 15771)
+@@ -24,15 +24,15 @@
+ 
+ %parameters
+ md.qmu.params.direct=true;
+-md.qmu.params.analysis_driver='diagnostic';
++md.qmu.params.analysis_driver='stressbalance';
+ md.qmu.params.evaluation_concurrency=1;
+ md.qmu.params.interval_type='forward';
+ 
+ %imperative! 
+-md.diagnostic.reltol=10^-5; %tighten for qmu analysese
++md.stressbalance.reltol=10^-5; %tighten for qmu analysese
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
++md=solve(md,StressbalanceSolutionEnum(),'overwrite','y');
+ 
+ %Fields and tolerances to track changes
+ md.qmu.results=md.results.dakota;
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 15771)
+@@ -8,17 +8,17 @@
+ %rift settings
+ md.rifts.riftstruct.fill=MelangeEnum();
+ md.rifts.riftstruct.fraction=0;
+-md.diagnostic.rift_penalty_lock=2;
+-md.diagnostic.rift_penalty_threshold=0;
++md.stressbalance.rift_penalty_lock=2;
++md.stressbalance.rift_penalty_threshold=0;
+ md.rifts.riftstruct.fractionincrement=.1;
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={2e-11,1e-11,1e-11,1e-11};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1103.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1103.py	(revision 15771)
+@@ -34,12 +34,12 @@
+ 	md=setflowequation(md,'HO','all')
+ 
+ 	#Create dirichlet on the bed only
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 	pos=numpy.nonzero(md.mesh.vertexonbed)
+-	md.diagnostic.spcvx[pos]=0.
+-	md.diagnostic.spcvy[pos]=0.
++	md.stressbalance.spcvx[pos]=0.
++	md.stressbalance.spcvy[pos]=0.
+ 
+ 	#Create MPCs to have periodic boundary conditions
+ 	posx=numpy.nonzero(md.mesh.x==0.)[0]
+@@ -48,17 +48,17 @@
+ 	posy=numpy.nonzero(logical_and_n(md.mesh.y==0.,md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]    #Don't take the same nodes two times
+ 	posy2=numpy.nonzero(logical_and_n(md.mesh.y==numpy.max(md.mesh.y),md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]
+ 
+-	md.diagnostic.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
++	md.stressbalance.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
+ 
+-	#Compute the diagnostic
++	#Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8)
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 
+ 	#Plot the results and save them
+-	vx=md.results.DiagnosticSolution.Vx
+-	vy=md.results.DiagnosticSolution.Vy
+-	vz=md.results.DiagnosticSolution.Vz
+-	results.append(md.results.DiagnosticSolution)
++	vx=md.results.StressbalanceSolution.Vx
++	vy=md.results.StressbalanceSolution.Vy
++	vz=md.results.StressbalanceSolution.Vz
++	results.append(md.results.StressbalanceSolution)
+ 	minvx.append(numpy.min(vx[md.mesh.numberofvertices2d:]))
+ 	maxvx.append(numpy.max(vx[md.mesh.numberofvertices2d:]))
+ 
+Index: ../trunk-jpl/test/NightlyRun/test204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test204.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ 
+ # Fields and tolerances to track changes
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test102.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test270.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test270.py	(revision 15771)
+@@ -19,14 +19,14 @@
+ md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test502.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,0.9);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-08};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-08,2e-09,2e-05,1e-09,2e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-07,1e-07,1e-06,1e-07,1e-07};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test306.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test306.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,4,2.);
+ md=setflowequation(md,'SIA','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test429.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test429.m	(revision 15771)
+@@ -3,18 +3,18 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'HO','all');
+-md.diagnostic.isnewton=1;
+-md.diagnostic.restol=0.0001;
++md.stressbalance.isnewton=1;
++md.stressbalance.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={2e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 15771)
+@@ -12,10 +12,10 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.diagnostic.requested_outputs=StressTensorEnum()
++md.stressbalance.requested_outputs=StressTensorEnum()
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.autodiff.isautodiff=True
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure',\
+@@ -23,11 +23,11 @@
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.StressTensorxx,\
+-	md.results.DiagnosticSolution.StressTensoryy,\
+-	md.results.DiagnosticSolution.StressTensorxy,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.StressTensorxx,\
++	md.results.StressbalanceSolution.StressTensoryy,\
++	md.results.StressbalanceSolution.StressTensorxy,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test1207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1207.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1207.py	(revision 15771)
+@@ -35,17 +35,17 @@
+ 
+ #Spc the nodes on the bed
+ pos=numpy.nonzero(md.mesh.vertexonbed)
+-md.diagnostic.spcvx[pos]=0.
+-md.diagnostic.spcvy[pos]=0.
+-md.diagnostic.spcvz[pos]=0.
++md.stressbalance.spcvx[pos]=0.
++md.stressbalance.spcvy[pos]=0.
++md.stressbalance.spcvz[pos]=0.
+ 
+ #Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Calculate the depth averaged velocity field (2d):
+-vx=md.results.DiagnosticSolution.Vx
+-vy=md.results.DiagnosticSolution.Vy
++vx=md.results.StressbalanceSolution.Vx
++vy=md.results.StressbalanceSolution.Vy
+ vel=numpy.zeros((md.mesh.numberofvertices2d,1))
+ 
+ for i in xrange(0,md.mesh.numberofvertices2d):
+Index: ../trunk-jpl/test/NightlyRun/test3021.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3021.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3021.m	(revision 15771)
+@@ -3,11 +3,11 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=false;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.verbose=verbose('1111111');
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure',...
+@@ -15,11 +15,11 @@
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.StressTensorxx),...
+-	(md.results.DiagnosticSolution.StressTensoryy),...
+-	(md.results.DiagnosticSolution.StressTensorxy),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.StressTensorxx),...
++	(md.results.StressbalanceSolution.StressTensoryy),...
++	(md.results.StressbalanceSolution.StressTensorxy),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test3004.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3004.m	(revision 15771)
+@@ -7,15 +7,15 @@
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-08,1e-08,1e-07,1e-08,1e-08};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1205.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1205.m	(revision 15771)
+@@ -22,17 +22,17 @@
+ 
+ %Spc the nodes on the bed
+ pos=find(md.mesh.vertexonbed);
+-md.diagnostic.spcvx(pos)=0.;
+-md.diagnostic.spcvy(pos)=0.;
+-md.diagnostic.spcvz(pos)=0.;
++md.stressbalance.spcvx(pos)=0.;
++md.stressbalance.spcvy(pos)=0.;
++md.stressbalance.spcvz(pos)=0.;
+ 
+ %Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Calculate the depth averaged velocity field (2d):
+-vx=(md.results.DiagnosticSolution.Vx);
+-vy=(md.results.DiagnosticSolution.Vy);
++vx=(md.results.StressbalanceSolution.Vx);
++vy=(md.results.StressbalanceSolution.Vy);
+ vel=zeros(md.mesh.numberofvertices2d,1);
+ 
+ for i=1:md.mesh.numberofvertices2d
+Index: ../trunk-jpl/test/NightlyRun/test1107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1107.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1107.m	(revision 15771)
+@@ -20,9 +20,9 @@
+ 	md=setflowequation(md,'HO','all');
+ 
+ 	%We need one grd on dirichlet: the 4 corners are set to zero
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ 	%Create MPCs to have periodic boundary conditions
+ 	posx=find(md.mesh.x==0. & ~(md.mesh.y==0. & md.mesh.vertexonbed) & ~(md.mesh.y==L & md.mesh.vertexonbed));
+@@ -31,39 +31,39 @@
+ 	posy=find(md.mesh.y==0. & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x)); %Don't take the same nodes two times
+ 	posy2=find(md.mesh.y==max(md.mesh.y) & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x));
+ 
+-	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
++	md.stressbalance.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+ 	%Add spc on the corners
+ 	pos=find((md.mesh.x==0. | md.mesh.x==L) & (md.mesh.y==0. | md.mesh.y==L) & md.mesh.vertexonbed);
+-	md.diagnostic.spcvy(:)=0.;
+-	md.diagnostic.spcvx(pos)=0.;
++	md.stressbalance.spcvy(:)=0.;
++	md.stressbalance.spcvx(pos)=0.;
+ 	if(L==5000.),
+-		md.diagnostic.spcvx(pos)=16.0912;
++		md.stressbalance.spcvx(pos)=16.0912;
+ 	elseif(L==10000.),
+-		md.diagnostic.spcvx(pos)=16.52;
++		md.stressbalance.spcvx(pos)=16.52;
+ 	elseif(L==20000.),
+-		md.diagnostic.spcvx(pos)=17.77;
++		md.stressbalance.spcvx(pos)=17.77;
+ 	elseif(L==40000.),
+-		md.diagnostic.spcvx(pos)=19.88;
++		md.stressbalance.spcvx(pos)=19.88;
+ 	elseif(L==80000.),
+-		md.diagnostic.spcvx(pos)=18.65;
++		md.stressbalance.spcvx(pos)=18.65;
+ 	elseif(L==160000.),
+-		md.diagnostic.spcvx(pos)=16.91;
++		md.stressbalance.spcvx(pos)=16.91;
+ 	end
+ 	
+ 	%Spc the bed at zero for vz
+ 	pos=find(md.mesh.vertexonbed);
+-	md.diagnostic.spcvz(pos)=0.;
++	md.stressbalance.spcvz(pos)=0.;
+ 
+-	%Compute the diagnostic
++	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	%Plot the results and save them
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	results{i}=md.results.StressbalanceSolution;
+ 	minvx(i)=min(vx(end-md.mesh.numberofvertices2d+1:end));
+ 	maxvx(i)=max(vx(end-md.mesh.numberofvertices2d+1:end));
+ 
+Index: ../trunk-jpl/test/NightlyRun/test401.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test401.py	(revision 15771)
+@@ -13,14 +13,14 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test320.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test320.py	(revision 15771)
+@@ -30,17 +30,17 @@
+ md.inversion.vy_obs=md.initialization.vy
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.FrictionCoefficient,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.FrictionCoefficient,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 15771)
+@@ -32,7 +32,7 @@
+ 
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ 
+ # Fields and tolerances to track changes
+@@ -41,11 +41,11 @@
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ #field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.MaterialsRheologyB,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.MaterialsRheologyB,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 15771)
+@@ -23,17 +23,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyB','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-11,1e-12,1e-12,1e-09,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	(md.results.DiagnosticSolution.J),...
+-	(md.results.DiagnosticSolution.MaterialsRheologyB),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	(md.results.StressbalanceSolution.J),...
++	(md.results.StressbalanceSolution.MaterialsRheologyB),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 15771)
+@@ -3,18 +3,18 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'FS','all');
+-md.diagnostic.isnewton=1;
+-md.diagnostic.restol=0.0001;
++md.stressbalance.isnewton=1;
++md.stressbalance.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-07,1e-07,1e-06,1e-07,1e-07};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test308.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test308.py	(revision 15771)
+@@ -13,15 +13,15 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test413.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test413.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test413.m	(revision 15771)
+@@ -23,17 +23,17 @@
+ 
+ %parameters
+ md.qmu.params.direct=true;
+-md.qmu.params.analysis_driver='diagnostic';
++md.qmu.params.analysis_driver='stressbalance';
+ md.qmu.params.evaluation_concurrency=1;
+ md.qmu.params.interval_type='forward';
+ 
+ 
+ %imperative!
+-md.diagnostic.reltol=10^-5; %tighten for qmu analyses
++md.stressbalance.reltol=10^-5; %tighten for qmu analyses
+ md.qmu.isdakota=1;
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
++md=solve(md,StressbalanceSolutionEnum(),'overwrite','y');
+ 
+ %Fields and tolerances to track changes
+ md.qmu.results=md.results.dakota;
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 15771)
+@@ -55,7 +55,7 @@
+ md.qmu.params.tabular_graphics_data=true;
+ md.qmu.isdakota=1;
+ 
+-md.diagnostic.reltol=10^-5; %tighten for qmu analyses
++md.stressbalance.reltol=10^-5; %tighten for qmu analyses
+ md.transient.requested_outputs=IceVolumeEnum();
+ 
+ %solve
+Index: ../trunk-jpl/test/NightlyRun/test217.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test217.m	(revision 15771)
+@@ -9,7 +9,7 @@
+ %from 0 m/yr at the grounding line.
+ 
+ %tighten
+-md.diagnostic.restol=10^-4;
++md.stressbalance.restol=10^-4;
+ 
+ %needed later
+ ymin=min(md.mesh.y);
+@@ -36,26 +36,26 @@
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
+ %Boundary conditions:
+-md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ %constrain flanks to 0 normal velocity
+ pos=find(md.mesh.x==xmin | md.mesh.x==xmax);
+-md.diagnostic.spcvx(pos)=0;
+-md.diagnostic.spcvz(pos)=NaN;
++md.stressbalance.spcvx(pos)=0;
++md.stressbalance.spcvz(pos)=NaN;
+ 
+ %constrain grounding line to 0 velocity
+ pos=find(md.mesh.y==ymin);
+-md.diagnostic.spcvx(pos)=0;
+-md.diagnostic.spcvy(pos)=0;
++md.stressbalance.spcvx(pos)=0;
++md.stressbalance.spcvy(pos)=0;
+ 
+ %icefront
+ nodeonicefront=zeros(md.mesh.numberofvertices,1);
+ pos=find(md.mesh.y==ymax); nodeonicefront(pos)=1;
+ md.mask.icelevelset=1-nodeonicefront;
+ 
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %create analytical solution: strain rate is constant = ((rho_ice*g*h)/4B)^3 (Paterson, 4th Edition, page 292.
+ %ey_c=(md.materials.rho_ice*md.constants.g*(1-di)*md.geometry.thickness./(4*md.materials.rheology_B)).^3;
+@@ -64,4 +64,4 @@
+ %Fields and tolerances to track changes
+ field_names     ={'Vy'};
+ field_tolerances={1e-13};
+-field_values={(md.results.DiagnosticSolution.Vy)};
++field_values={(md.results.StressbalanceSolution.Vy)};
+Index: ../trunk-jpl/test/NightlyRun/test429.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test429.py	(revision 15771)
+@@ -13,18 +13,18 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+ md=setflowequation(md,'HO','all')
+-md.diagnostic.isnewton=1
+-md.diagnostic.restol=0.0001
++md.stressbalance.isnewton=1
++md.stressbalance.restol=0.0001
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[2e-09,2e-09,1e-09,2e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test1202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1202.py	(revision 15771)
+@@ -9,7 +9,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-Test on the diagnostic model and the masstransport in 2d
++Test on the stressbalance model and the masstransport in 2d
+ """
+ 
+ printingflag=False
+@@ -23,11 +23,11 @@
+ 
+ #Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #plot results
+-vx=md.results.DiagnosticSolution.Vx
+-vy=md.results.DiagnosticSolution.Vy
++vx=md.results.StressbalanceSolution.Vx
++vy=md.results.StressbalanceSolution.Vy
+ 
+ #plotmodel(md,'data',vx,'contourlevels',{0,20,40,60,60,100,120,140,160,180,-20,-40,-60,-80,-100,-120,-140,-160,-180}, ...
+ #	'contourcolor','k')
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 15771)
+@@ -12,8 +12,8 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.diagnostic.requested_outputs=StressTensorEnum()
+-md=solve(md,DiagnosticSolutionEnum())
++md.stressbalance.requested_outputs=StressTensorEnum()
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure',\
+@@ -21,11 +21,11 @@
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.StressTensorxx,\
+-	md.results.DiagnosticSolution.StressTensoryy,\
+-	md.results.DiagnosticSolution.StressTensorxy,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.StressTensorxx,\
++	md.results.StressbalanceSolution.StressTensoryy,\
++	md.results.StressbalanceSolution.StressTensorxy,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test303.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test303.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test303.py	(revision 15771)
+@@ -12,14 +12,14 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md=setflowequation(md,'SIA','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 15771)
+@@ -3,14 +3,14 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test103.m	(revision 15771)
+@@ -4,8 +4,8 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.requested_outputs=StressTensorEnum();
+-md=solve(md,DiagnosticSolutionEnum());
++md.stressbalance.requested_outputs=StressTensorEnum();
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure',...
+@@ -13,15 +13,15 @@
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.StressTensorxx),...
+-	(md.results.DiagnosticSolution.StressTensoryy),...
+-	(md.results.DiagnosticSolution.StressTensorzz),...
+-	(md.results.DiagnosticSolution.StressTensorxy),...
+-	(md.results.DiagnosticSolution.StressTensorxz),...
+-	(md.results.DiagnosticSolution.StressTensoryz),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.StressTensorxx),...
++	(md.results.StressbalanceSolution.StressTensoryy),...
++	(md.results.StressbalanceSolution.StressTensorzz),...
++	(md.results.StressbalanceSolution.StressTensorxy),...
++	(md.results.StressbalanceSolution.StressTensorxz),...
++	(md.results.StressbalanceSolution.StressTensoryz),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 15771)
+@@ -19,7 +19,7 @@
+ md.geometry.thickness[:]=1000.
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ md.surfaceforcings.mass_balance[:]=100.
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AgressiveMigration'
+ 
+Index: ../trunk-jpl/test/NightlyRun/test503.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test503.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,0.9);
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 15771)
+@@ -4,16 +4,16 @@
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.reltol=0.4;
+-md=solve(md,DiagnosticSolutionEnum());
++md.stressbalance.reltol=0.4;
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,2e-06,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test405.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test405.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'SSA','../Exp/SquareHalfRight.exp','fill','HO','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={5e-05,5e-05,5e-05,5e-05,1e-05};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test307.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test307.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,2e-10,2e-10,1e-10};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test285.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test285.m	(revision 15771)
+@@ -5,15 +5,15 @@
+ md=setflowequation(md,'HO','all');
+ md.flowequation.fe_HO=1;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1104.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1104.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1104.py	(revision 15771)
+@@ -28,13 +28,13 @@
+ 	md=setflowequation(md,'HO','all')
+ 
+ 	#Create dirichlet on the bed only
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	pos=numpy.nonzero(md.mesh.vertexonbed)
+-	md.diagnostic.spcvx[pos]=0.
+-	md.diagnostic.spcvy[pos]=0.
++	md.stressbalance.spcvx[pos]=0.
++	md.stressbalance.spcvy[pos]=0.
+ 
+ 	#Create MPCs to have periodic boundary conditions
+ 	posx=numpy.nonzero(md.mesh.x==0.)[0]
+@@ -43,24 +43,24 @@
+ 	posy=numpy.nonzero(logical_and_n(md.mesh.y==0.,md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]    #Don't take the same nodes two times
+ 	posy2=numpy.nonzero(logical_and_n(md.mesh.y==numpy.max(md.mesh.y),md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]
+ 
+-	md.diagnostic.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
++	md.stressbalance.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
+ 
+-	#Compute the diagnostic
+-	md.diagnostic.abstol=float('NaN')
++	#Compute the stressbalance
++	md.stressbalance.abstol=float('NaN')
+ 	md.cluster=generic('name',oshostname(),'np',8)
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 	pos=numpy.nonzero(logical_or_n(md.mesh.x==0.,md.mesh.y==0.,md.mesh.x==numpy.max(md.mesh.x),md.mesh.y==numpy.max(md.mesh.y)))
+-	md.diagnostic.spcvx[pos]=md.results.DiagnosticSolution.Vx[pos]
+-	md.diagnostic.spcvy[pos]=md.results.DiagnosticSolution.Vy[pos]
+-	md.diagnostic.vertex_pairing=numpy.empty((0,2),int)
++	md.stressbalance.spcvx[pos]=md.results.StressbalanceSolution.Vx[pos]
++	md.stressbalance.spcvy[pos]=md.results.StressbalanceSolution.Vy[pos]
++	md.stressbalance.vertex_pairing=numpy.empty((0,2),int)
+ 	md=setflowequation(md,'FS','all')
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 
+ 	#Plot the results and save them
+-	vx=md.results.DiagnosticSolution.Vx
+-	vy=md.results.DiagnosticSolution.Vy
+-	vz=md.results.DiagnosticSolution.Vz
+-	results.append(md.results.DiagnosticSolution)
++	vx=md.results.StressbalanceSolution.Vx
++	vy=md.results.StressbalanceSolution.Vy
++	vz=md.results.StressbalanceSolution.Vz
++	results.append(md.results.StressbalanceSolution)
+ 
+ #	plotmodel(md,'data',vx,'data',vy,'data',vz,'layer#all',md.mesh.numberoflayers)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1601.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1601.py	(revision 15771)
+@@ -13,14 +13,14 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md=setflowequation(md,'SSA','all')
+-md.diagnostic.spcvx[numpy.nonzero(md.mesh.y>0.)]=float('NaN')
++md.stressbalance.spcvx[numpy.nonzero(md.mesh.y>0.)]=float('NaN')
+ md.initialization.vx[:]=0.
+ md.initialization.vy[:]=0.
+ md.initialization.vel=numpy.zeros_like(md.initialization.vx)
+ 
+ md.cluster=generic('name',oshostname(),'np',2)
+-md=solve(md,DiagnosticSolutionEnum())
+-vel0=md.results.DiagnosticSolution.Vel
++md=solve(md,StressbalanceSolutionEnum())
++vel0=md.results.StressbalanceSolution.Vel
+ 
+ theta=30.*numpy.pi/180.
+ x=md.mesh.x
+@@ -28,21 +28,21 @@
+ md.mesh.x=numpy.cos(theta)*x-numpy.sin(theta)*y
+ md.mesh.y=numpy.sin(theta)*x+numpy.cos(theta)*y
+ 
+-md.diagnostic.referential[:,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(md.mesh.numberofvertices,1))
+-md.diagnostic.referential[:,3: ]=numpy.tile([0,0,1],(md.mesh.numberofvertices,1))
+-md=solve(md,DiagnosticSolutionEnum())
+-vel1=md.results.DiagnosticSolution.Vel
++md.stressbalance.referential[:,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(md.mesh.numberofvertices,1))
++md.stressbalance.referential[:,3: ]=numpy.tile([0,0,1],(md.mesh.numberofvertices,1))
++md=solve(md,StressbalanceSolutionEnum())
++vel1=md.results.StressbalanceSolution.Vel
+ 
+ #plotmodel(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
+ print "Error between Cartesian and rotated CS: %g" % (numpy.max(numpy.abs(vel0-vel1))/(numpy.max(numpy.abs(vel0))+sys.float_info.epsilon))
+ 
+ #Now, put CS back to normal except on the side where the spc are applied
+ pos=numpy.nonzero(numpy.logical_or(x==0.,x==1000000.))[0]
+-md.diagnostic.referential[:]=float('NaN')
+-md.diagnostic.referential[pos,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(len(pos),1))
+-md.diagnostic.referential[pos,3: ]=numpy.tile([0,0,1],(len(pos),1))
+-md=solve(md,DiagnosticSolutionEnum())
+-vel2=md.results.DiagnosticSolution.Vel
++md.stressbalance.referential[:]=float('NaN')
++md.stressbalance.referential[pos,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(len(pos),1))
++md.stressbalance.referential[pos,3: ]=numpy.tile([0,0,1],(len(pos),1))
++md=solve(md,StressbalanceSolutionEnum())
++vel2=md.results.StressbalanceSolution.Vel
+ 
+ #plotmodel(md,'data',vel0,'data',vel2,'data',vel2-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
+ print "Error between Cartesian and rotated CS: %g" % (numpy.max(numpy.abs(vel0-vel2))/(numpy.max(numpy.abs(vel0))+sys.float_info.epsilon))
+Index: ../trunk-jpl/test/NightlyRun/test1206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1206.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1206.m	(revision 15771)
+@@ -22,17 +22,17 @@
+ 
+ %Spc the nodes on the bed
+ pos=find(md.mesh.vertexonbed);
+-md.diagnostic.spcvx(pos)=0.;
+-md.diagnostic.spcvy(pos)=0.;
+-md.diagnostic.spcvz(pos)=0.;
++md.stressbalance.spcvx(pos)=0.;
++md.stressbalance.spcvy(pos)=0.;
++md.stressbalance.spcvz(pos)=0.;
+ 
+ %Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Calculate the depth averaged velocity field (2d):
+-vx=(md.results.DiagnosticSolution.Vx);
+-vy=(md.results.DiagnosticSolution.Vy);
++vx=(md.results.StressbalanceSolution.Vx);
++vy=(md.results.StressbalanceSolution.Vy);
+ vel=zeros(md.mesh.numberofvertices2d,1);
+ 
+ for i=1:md.mesh.numberofvertices2d
+Index: ../trunk-jpl/test/NightlyRun/test1108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1108.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1108.m	(revision 15771)
+@@ -17,14 +17,14 @@
+ 	md=setflowequation(md,'HO','all');
+ 
+ 	%We need one grid on dirichlet: the 4 corners are set to zero
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 	
+ 	pos=find(md.mesh.vertexonbed & (md.mesh.x==0. | md.mesh.x==max(md.mesh.x)) & (md.mesh.y==0. | md.mesh.y==max(md.mesh.y)));
+-	md.diagnostic.spcvx(pos)=0.;
+-	md.diagnostic.spcvy(pos)=0.;
+-	md.diagnostic.spcvz(pos)=0.;
++	md.stressbalance.spcvx(pos)=0.;
++	md.stressbalance.spcvy(pos)=0.;
++	md.stressbalance.spcvz(pos)=0.;
+ 
+ 	%Create MPCs to have periodic boundary conditions
+ 	posx=find(md.mesh.x==0.);
+@@ -33,30 +33,30 @@
+ 	posy=find(md.mesh.y==0. & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x)); %Don't take the same nodes two times
+ 	posy2=find(md.mesh.y==max(md.mesh.y) & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x));
+ 
+-	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
++	md.stressbalance.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+-	%Compute the diagnostic
++	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+ 	md.verbose=verbose('convergence',true);
+-	md=solve(md,DiagnosticSolutionEnum());
+-	md.diagnostic.reltol=NaN;
+-	md.diagnostic.abstol=NaN;
+-	md.diagnostic.vertex_pairing=[];
++	md=solve(md,StressbalanceSolutionEnum());
++	md.stressbalance.reltol=NaN;
++	md.stressbalance.abstol=NaN;
++	md.stressbalance.vertex_pairing=[];
+ 	%We need one grd on dirichlet: the 4 corners are set to zero
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 	pos=find(md.mesh.y==0. | md.mesh.x==0. | md.mesh.x==max(md.mesh.x) | md.mesh.y==max(md.mesh.y)); %Don't take the same nodes two times
+-	md.diagnostic.spcvx(pos)=md.results.DiagnosticSolution.Vx(pos);
+-	md.diagnostic.spcvy(pos)=md.results.DiagnosticSolution.Vy(pos);
++	md.stressbalance.spcvx(pos)=md.results.StressbalanceSolution.Vx(pos);
++	md.stressbalance.spcvy(pos)=md.results.StressbalanceSolution.Vy(pos);
+ 	md=setflowequation(md,'FS','all');
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	%Plot the results and save them
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	results{i}=md.results.StressbalanceSolution;
+ 
+ 	plotmodel(md,'data',vx,'data',vy,'data',vz,'layer#all',md.mesh.numberoflayers)
+ end
+Index: ../trunk-jpl/test/NightlyRun/test205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test205.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','../Exp/SquareHalfRight.exp','fill','SSA','coupling','penalties')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ 
+ # Fields and tolerances to track changes
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-05,1e-05,1e-05,1e-05,1e-05]
+ field_values=[\
+-md.results.DiagnosticSolution.Vx,\
+-md.results.DiagnosticSolution.Vy,\
+-md.results.DiagnosticSolution.Vz,\
+-md.results.DiagnosticSolution.Vel,\
+-md.results.DiagnosticSolution.Pressure,\
++md.results.StressbalanceSolution.Vx,\
++md.results.StressbalanceSolution.Vy,\
++md.results.StressbalanceSolution.Vz,\
++md.results.StressbalanceSolution.Vel,\
++md.results.StressbalanceSolution.Pressure,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test433.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test433.py	(revision 15771)
+@@ -31,7 +31,7 @@
+ 
+ md.transient.isthermal=False
+ md.transient.ismasstransport=False
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ 
+ #test different grounding line dynamics.
+Index: ../trunk-jpl/test/NightlyRun/test407.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test407.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md.extrude(4,1.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test326.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test326.py	(revision 15771)
+@@ -15,7 +15,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 15771)
+@@ -18,17 +18,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
+-	(md.results.DiagnosticSolution.FrictionCoefficient),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	md.results.StressbalanceSolution.J,...
++	(md.results.StressbalanceSolution.FrictionCoefficient),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test219.py	(revision 15771)
+@@ -14,16 +14,16 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','../Exp/SquareHalfRight.exp','fill','SSA')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test414.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test414.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test414.m	(revision 15771)
+@@ -7,9 +7,9 @@
+ md.geometry.thickness(:)=1; %make it easy
+ 
+ %constrain all velocities to 1 m/yr, in the y-direction
+-md.diagnostic.spcvx=zeros(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvy=ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvz=zeros(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx=zeros(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy=ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz=zeros(md.mesh.numberofvertices,1);
+ 
+ %Dakota options
+ 
+@@ -40,14 +40,14 @@
+ 
+ %parameters
+ md.qmu.params.direct=true;
+-md.qmu.params.analysis_driver='diagnostic';
++md.qmu.params.analysis_driver='stressbalance';
+ md.qmu.params.evaluation_concurrency=1;
+ md.qmu.params.interval_type='forward';
+ md.qmu.isdakota=1;
+-md.diagnostic.reltol=10^-5; %tighten for qmu analyses
++md.stressbalance.reltol=10^-5; %tighten for qmu analyses
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
++md=solve(md,StressbalanceSolutionEnum(),'overwrite','y');
+ md.qmu.results=md.results.dakota;
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test235.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test235.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test235.m	(revision 15771)
+@@ -50,7 +50,7 @@
+ md.qmu.params.fd_gradient_step_size='0.1';
+ md.qmu.isdakota=1;
+ 
+-md.diagnostic.reltol=10^-5; %tighten for qmu analyses
++md.stressbalance.reltol=10^-5; %tighten for qmu analyses
+ md.transient.requested_outputs=IceVolumeEnum();
+ 
+ %solve
+Index: ../trunk-jpl/test/NightlyRun/test218.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test218.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test218.m	(revision 15771)
+@@ -33,19 +33,19 @@
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
+ %Boundary conditions:
+-md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ %constrain flanks to 0 normal velocity
+ pos=find(md.mesh.x==xmin | md.mesh.x==xmax);
+-md.diagnostic.spcvx(pos)=0;
+-md.diagnostic.spcvz(pos)=NaN;
++md.stressbalance.spcvx(pos)=0;
++md.stressbalance.spcvz(pos)=NaN;
+ 
+ %constrain grounding line to 0 velocity
+ pos=find(md.mesh.y==ymin);
+-md.diagnostic.spcvx(pos)=0;
+-md.diagnostic.spcvy(pos)=0;
++md.stressbalance.spcvx(pos)=0;
++md.stressbalance.spcvy(pos)=0;
+ 
+ %partitioning
+ md.qmu.numberofpartitions=md.mesh.numberofvertices;
+@@ -64,16 +64,16 @@
+ 
+ %parameters
+ md.qmu.params.direct=true;
+-md.qmu.params.analysis_driver='diagnostic';
++md.qmu.params.analysis_driver='stressbalance';
+ md.qmu.params.evaluation_concurrency=1;
+ md.qmu.params.interval_type='forward';
+ 
+ %imperative! 
+-md.diagnostic.reltol=10^-10; %tighten for qmu analysese
++md.stressbalance.reltol=10^-10; %tighten for qmu analysese
+ md.qmu.isdakota=1;
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
++md=solve(md,StressbalanceSolutionEnum(),'overwrite','y');
+ 
+ %Fields and tolerances to track changes
+ md.qmu.results=md.results.dakota;
+Index: ../trunk-jpl/test/NightlyRun/test285.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test285.py	(revision 15771)
+@@ -15,15 +15,15 @@
+ md=setflowequation(md,'HO','all');
+ md.flowequation.fe_HO=1;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+ field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-13];
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	];
+Index: ../trunk-jpl/test/NightlyRun/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3002.py	(revision 15771)
+@@ -15,15 +15,15 @@
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.autodiff.isautodiff=True
+ md.toolkits.DefaultAnalysis=issmsolver()
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test1208.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1208.py	(revision 15771)
+@@ -26,9 +26,9 @@
+ 
+ #Spc the nodes on the bed
+ pos=numpy.nonzero(md.mesh.vertexonbed)
+-md.diagnostic.spcvx[pos]=0.
+-md.diagnostic.spcvy[pos]=0.
+-md.diagnostic.spcvz[pos]=0.
++md.stressbalance.spcvx[pos]=0.
++md.stressbalance.spcvy[pos]=0.
++md.stressbalance.spcvz[pos]=0.
+ 
+ #Adapt the time steps to the resolution
+ md.timestepping.time_step=15.
+Index: ../trunk-jpl/test/NightlyRun/test321.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test321.py	(revision 15771)
+@@ -30,17 +30,17 @@
+ md.inversion.vy_obs=md.initialization.vy
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-08,1e-07,1e-10,1e-10,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.FrictionCoefficient,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.FrictionCoefficient,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test402.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test402.py	(revision 15771)
+@@ -14,15 +14,15 @@
+ md.extrude(4,1.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 15771)
+@@ -32,7 +32,7 @@
+ 
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ 
+ # Fields and tolerances to track changes
+@@ -40,11 +40,11 @@
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.MaterialsRheologyB,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.MaterialsRheologyB,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 15771)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test202.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-08,1e-08,1e-06,1e-08,1e-08};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test280.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test280.py	(revision 15771)
+@@ -14,14 +14,14 @@
+ md=setflowequation(md,'SSA','all')
+ md.flowequation.fe_SSA=1
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-12,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 15771)
+@@ -19,7 +19,7 @@
+ 
+ md.transient.isthermal=0;
+ md.transient.ismasstransport=0;
+-md.transient.isdiagnostic=1;
++md.transient.isstressbalance=1;
+ md.transient.isgroundingline=1;
+ 
+ %test different grounding line dynamics.
+Index: ../trunk-jpl/test/NightlyRun/test308.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test308.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test286.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test286.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test286.m	(revision 15771)
+@@ -5,15 +5,15 @@
+ md=setflowequation(md,'HO','all');
+ md.flowequation.fe_HO=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-9,1e-9,1e-9,1e-9,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test1203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1203.py	(revision 15771)
+@@ -10,7 +10,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-Test on the diagnostic model and the masstransport in 2d
++Test on the stressbalance model and the masstransport in 2d
+ """
+ 
+ printingflag=False
+@@ -24,14 +24,14 @@
+ 
+ #Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=numpy.nonzero(md.mesh.y==numpy.max(md.mesh.y))
+-md.diagnostic.spcvy[pos]=400.*(((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2-numpy.ones((numpy.size(pos),1)))*heaviside((1.+sys.float_info.epsilon)*numpy.ones((numpy.size(pos),1))-((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2)
++md.stressbalance.spcvy[pos]=400.*(((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2-numpy.ones((numpy.size(pos),1)))*heaviside((1.+sys.float_info.epsilon)*numpy.ones((numpy.size(pos),1))-((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2)
+ 
+ #Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+-vx=md.results.DiagnosticSolution.Vx
+-vy=md.results.DiagnosticSolution.Vy
++vx=md.results.StressbalanceSolution.Vx
++vy=md.results.StressbalanceSolution.Vy
+ 
+ #plot results
+ #plotmodel(md,'data',vx,'contourlevels',{0,20,40,60,80,100,-20,-40,-60,-80,-100},...
+Index: ../trunk-jpl/test/NightlyRun/test1101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1101.m	(revision 15771)
+@@ -20,13 +20,13 @@
+ 	md=setflowequation(md,'HO','all');
+ 
+ 	%Create dirichlet on the bed only
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ 	pos=find(md.mesh.vertexonbed);
+-	md.diagnostic.spcvx(pos)=0.;
+-	md.diagnostic.spcvy(pos)=0.;
++	md.stressbalance.spcvx(pos)=0.;
++	md.stressbalance.spcvy(pos)=0.;
+ 
+ 	%Create MPCs to have periodic boundary conditions
+ 	posx=find(md.mesh.x==0.);
+@@ -35,17 +35,17 @@
+ 	posy=find(md.mesh.y==0. & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x)); %Don't take the same nodes two times
+ 	posy2=find(md.mesh.y==max(md.mesh.y) & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x));
+ 
+-	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
++	md.stressbalance.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+-	%Compute the diagnostic
++	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	%Plot the results and save them
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	results{i}=md.results.StressbalanceSolution;
+ 	minvx(i)=min(vx(end-md.mesh.numberofvertices2d+1:end));
+ 	maxvx(i)=max(vx(end-md.mesh.numberofvertices2d+1:end));
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1207.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1207.m	(revision 15771)
+@@ -22,17 +22,17 @@
+ 
+ %Spc the nodes on the bed
+ pos=find(md.mesh.vertexonbed);
+-md.diagnostic.spcvx(pos)=0.;
+-md.diagnostic.spcvy(pos)=0.;
+-md.diagnostic.spcvz(pos)=0.;
++md.stressbalance.spcvx(pos)=0.;
++md.stressbalance.spcvy(pos)=0.;
++md.stressbalance.spcvz(pos)=0.;
+ 
+ %Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Calculate the depth averaged velocity field (2d):
+-vx=(md.results.DiagnosticSolution.Vx);
+-vy=(md.results.DiagnosticSolution.Vy);
++vx=(md.results.StressbalanceSolution.Vx);
++vy=(md.results.StressbalanceSolution.Vy);
+ vel=zeros(md.mesh.numberofvertices2d,1);
+ 
+ for i=1:md.mesh.numberofvertices2d
+Index: ../trunk-jpl/test/NightlyRun/test1109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1109.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1109.m	(revision 15771)
+@@ -27,33 +27,33 @@
+ 	%Create MPCs to have periodic boundary conditions
+ 	posx=find(md.mesh.x==0.);
+ 	posx2=find(md.mesh.x==max(md.mesh.x));
+-	md.diagnostic.vertex_pairing=[posx,posx2];
++	md.stressbalance.vertex_pairing=[posx,posx2];
+ 
+ 	%Create spcs on the bed 
+ 	pos=find(md.mesh.vertexonbed);
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvx(pos)=0.;
+-	md.diagnostic.spcvy(pos)=0.;
+-	md.diagnostic.spcvz(pos)=0.;
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx(pos)=0.;
++	md.stressbalance.spcvy(pos)=0.;
++	md.stressbalance.spcvz(pos)=0.;
+ 
+ 	%Remove the spc where there is some sliding (case 3 and 4):
+ 	if i==3 | i==4,
+ 		pos=find(md.mesh.y/max(md.mesh.y)>=0.44 & md.mesh.y/max(md.mesh.y)<=0.5);
+-		md.diagnostic.spcvx(pos)=NaN;
+-		md.diagnostic.spcvy(pos)=NaN;
+-		md.diagnostic.spcvz(pos)=NaN;
++		md.stressbalance.spcvx(pos)=NaN;
++		md.stressbalance.spcvy(pos)=NaN;
++		md.stressbalance.spcvz(pos)=NaN;
+ 	end
+ 
+-	%Compute the diagnostic
++	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	results{i}=md.results.StressbalanceSolution;
+ 
+ 	if i==1,
+ 		plotmodel(md,'data',vy,'ylim',[-10 80],'layer',md.mesh.numberoflayers,'sectionvalue','../Exp/ISMIPE.exp','resolution',[10 10],'title','','xlabel','')
+Index: ../trunk-jpl/test/NightlyRun/test102.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test102.py	(revision 15771)
+@@ -13,16 +13,16 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+ 
+Index: ../trunk-jpl/test/NightlyRun/test304.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test304.py	(revision 15771)
+@@ -13,15 +13,15 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test211.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test211.m	(revision 15771)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'FS','all');
+-md.diagnostic.reltol=NaN;
++md.stressbalance.reltol=NaN;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test425.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test425.py	(revision 15771)
+@@ -19,7 +19,7 @@
+ md.geometry.thickness[:]=1300.
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ md.surfaceforcings.mass_balance[:]=-150.
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='SoftMigration'
+ 
+Index: ../trunk-jpl/test/NightlyRun/test270.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test270.m	(revision 15771)
+@@ -7,14 +7,14 @@
+ md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test219.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test219.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test3020.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3020.py	(revision 15771)
+@@ -23,7 +23,7 @@
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.transient.requested_outputs=[IceVolumeEnum(),MaxVelEnum()]
+ md.verbose=verbose('autodiff',True)
+-md.diagnostic.restol=0.000001
++md.stressbalance.restol=0.000001
+ md.toolkits.DefaultAnalysis=issmsolver()
+ 
+ #setup autodiff parameters
+Index: ../trunk-jpl/test/NightlyRun/test1110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1110.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1110.m	(revision 15771)
+@@ -20,20 +20,20 @@
+ 		md=setflowequation(md,'FS','all');
+ 	end
+ 
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 	if (i==1 | i==3),
+ 		%Create dirichlet on the bed if no slip
+ 		pos=find(md.mesh.vertexonbed);
+-		md.diagnostic.spcvx(pos)=0.;
+-		md.diagnostic.spcvy(pos)=0.;
+-		md.diagnostic.spcvz(pos)=0.;
++		md.stressbalance.spcvx(pos)=0.;
++		md.stressbalance.spcvy(pos)=0.;
++		md.stressbalance.spcvz(pos)=0.;
+ 	else
+ 		pos=find(md.mesh.vertexonbed & (md.mesh.x==0. | md.mesh.x==max(md.mesh.x)) & (md.mesh.y==0. | md.mesh.y==max(md.mesh.y)));
+-		md.diagnostic.spcvx(pos)=100.; %because we need a dirichlet somewhere
+-		md.diagnostic.spcvy(pos)=0.;
+-		md.diagnostic.spcvz(pos)=0.;
++		md.stressbalance.spcvx(pos)=100.; %because we need a dirichlet somewhere
++		md.stressbalance.spcvy(pos)=0.;
++		md.stressbalance.spcvz(pos)=0.;
+ 	end
+ 	pos=find(~md.mesh.vertexonbed);
+ 	md.thermal.spctemperature(pos)=255.;
+@@ -45,16 +45,16 @@
+ 	posy=find(md.mesh.y==0.);
+ 	posy2=find(md.mesh.y==max(md.mesh.y));
+ 
+-	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
++	md.stressbalance.vertex_pairing=[posx,posx2;posy,posy2];
+ 	md.masstransport.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+ 	md.timestepping.time_step=3.;
+ 	md.timestepping.final_time=300.;
+ 	md.settings.output_frequency=50;
+ 	md.masstransport.stabilization=1;
+-	md.diagnostic.maxiter=1;
++	md.stressbalance.maxiter=1;
+ 	
+-	%Compute the diagnostic
++	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+ 	md.verbose=verbose('convergence',true,'solution',true);
+ 	md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1105.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1105.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1105.py	(revision 15771)
+@@ -34,9 +34,9 @@
+ 	md=setflowequation(md,'HO','all')
+ 
+ 	#Create MPCs to have periodic boundary conditions
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	posx=numpy.nonzero(logical_and_n(md.mesh.x==0.,md.mesh.y!=0.,md.mesh.y!=L))[0]
+ 	posx2=numpy.nonzero(logical_and_n(md.mesh.x==L,md.mesh.y!=0.,md.mesh.y!=L))[0]
+@@ -44,44 +44,44 @@
+ 	posy=numpy.nonzero(logical_and_n(md.mesh.y==0.,md.mesh.x!=0.,md.mesh.x!=L))[0]    #Don't take the same nodes two times
+ 	posy2=numpy.nonzero(logical_and_n(md.mesh.y==L,md.mesh.x!=0.,md.mesh.x!=L))[0]
+ 
+-	md.diagnostic.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
++	md.stressbalance.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
+ 
+ 	#Add spc on the corners
+ 	pos=numpy.nonzero(logical_and_n(numpy.logical_or(md.mesh.x==0.,md.mesh.x==L),numpy.logical_or(md.mesh.y==0.,md.mesh.y==L),md.mesh.vertexonbed))
+-	md.diagnostic.spcvx[pos]=0.
+-	md.diagnostic.spcvy[pos]=0.
++	md.stressbalance.spcvx[pos]=0.
++	md.stressbalance.spcvy[pos]=0.
+ 	if   (L==5000.):
+-		md.diagnostic.spcvx[pos]=15.66
+-		md.diagnostic.spcvy[pos]=-0.1967
++		md.stressbalance.spcvx[pos]=15.66
++		md.stressbalance.spcvy[pos]=-0.1967
+ 	elif (L==10000.):
+-		md.diagnostic.spcvx[pos]=16.04
+-		md.diagnostic.spcvy[pos]=-0.1977
++		md.stressbalance.spcvx[pos]=16.04
++		md.stressbalance.spcvy[pos]=-0.1977
+ 	elif (L==20000.):
+-		md.diagnostic.spcvx[pos]=16.53
+-		md.diagnostic.spcvy[pos]=-1.27
++		md.stressbalance.spcvx[pos]=16.53
++		md.stressbalance.spcvy[pos]=-1.27
+ 	elif (L==40000.):
+-		md.diagnostic.spcvx[pos]=17.23
+-		md.diagnostic.spcvy[pos]=-3.17
++		md.stressbalance.spcvx[pos]=17.23
++		md.stressbalance.spcvy[pos]=-3.17
+ 	elif (L==80000.):
+-		md.diagnostic.spcvx[pos]=16.68
+-		md.diagnostic.spcvy[pos]=-2.69
++		md.stressbalance.spcvx[pos]=16.68
++		md.stressbalance.spcvy[pos]=-2.69
+ 	elif (L==160000.):
+-		md.diagnostic.spcvx[pos]=16.03
+-		md.diagnostic.spcvy[pos]=-1.27
++		md.stressbalance.spcvx[pos]=16.03
++		md.stressbalance.spcvy[pos]=-1.27
+ 	
+ 	#Spc the bed at zero for vz
+ 	pos=numpy.nonzero(md.mesh.vertexonbed)
+-	md.diagnostic.spcvz[pos]=0.
++	md.stressbalance.spcvz[pos]=0.
+ 
+-	#Compute the diagnostic
++	#Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8)
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 
+ 	#Plot the results and save them
+-	vx=md.results.DiagnosticSolution.Vx
+-	vy=md.results.DiagnosticSolution.Vy
+-	vz=md.results.DiagnosticSolution.Vz
+-	results.append(md.results.DiagnosticSolution)
++	vx=md.results.StressbalanceSolution.Vx
++	vy=md.results.StressbalanceSolution.Vy
++	vz=md.results.StressbalanceSolution.Vz
++	results.append(md.results.StressbalanceSolution)
+ 	minvx.append(numpy.min(vx[-md.mesh.numberofvertices2d:]))
+ 	maxvx.append(numpy.max(vx[-md.mesh.numberofvertices2d:]))
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1602.py	(revision 15771)
+@@ -14,14 +14,14 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+ md.extrude(5,1.)
+ md=setflowequation(md,'HO','all')
+-md.diagnostic.spcvx[numpy.nonzero(md.mesh.y>0.)]=float('NaN')
++md.stressbalance.spcvx[numpy.nonzero(md.mesh.y>0.)]=float('NaN')
+ md.initialization.vx[:]=0.
+ md.initialization.vy[:]=0.
+ md.initialization.vel=numpy.zeros_like(md.initialization.vx)
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
+-vel0=md.results.DiagnosticSolution.Vel
++md=solve(md,StressbalanceSolutionEnum())
++vel0=md.results.StressbalanceSolution.Vel
+ 
+ theta=30.*numpy.pi/180.
+ x=md.mesh.x
+@@ -29,10 +29,10 @@
+ md.mesh.x=numpy.cos(theta)*x-numpy.sin(theta)*y
+ md.mesh.y=numpy.sin(theta)*x+numpy.cos(theta)*y
+ 
+-md.diagnostic.referential[:,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(md.mesh.numberofvertices,1))
+-md.diagnostic.referential[:,3: ]=numpy.tile([0,0,1],(md.mesh.numberofvertices,1))
+-md=solve(md,DiagnosticSolutionEnum())
+-vel1=md.results.DiagnosticSolution.Vel
++md.stressbalance.referential[:,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(md.mesh.numberofvertices,1))
++md.stressbalance.referential[:,3: ]=numpy.tile([0,0,1],(md.mesh.numberofvertices,1))
++md=solve(md,StressbalanceSolutionEnum())
++vel1=md.results.StressbalanceSolution.Vel
+ 
+ #plotmodel(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference','view#all',2)
+ print "Error between Cartesian and rotated CS: %g" % (numpy.max(numpy.abs(vel0-vel1))/(numpy.max(numpy.abs(vel0))+sys.float_info.epsilon))
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15771)
+@@ -5,10 +5,10 @@
+ %      name=IdToName(id);
+ 
+ switch id,
+-	case 101, name='SquareShelfConstrainedDiagSSA2d';
+-	case 102, name='SquareShelfConstrainedDiagSSA3d';
+-	case 103, name='SquareShelfConstrainedDiagHO';
+-	case 104, name='SquareShelfConstrainedDiagS3d';
++	case 101, name='SquareShelfConstrainedStressSSA2d';
++	case 102, name='SquareShelfConstrainedStressSSA3d';
++	case 103, name='SquareShelfConstrainedStressHO';
++	case 104, name='SquareShelfConstrainedStressS3d';
+ 	case 105, name='SquareShelfConstrainedMasstransp2d';
+ 	case 106, name='SquareShelfConstrainedMasstransp2dDG';
+ 	case 107, name='SquareShelfConstrainedMasstransp3d';
+@@ -27,11 +27,11 @@
+ 	case 120, name='SquareShelfConstrainedEnthalpyStea';
+ 	case 121, name='SquareShelfConstrainedEnthalpyTran';
+ 	case 122, name='SquareShelfConstrainedTransHOEnth';
+-	case 201, name='SquareShelfDiagSSA2d';
+-	case 202, name='SquareShelfDiagSSA3d';
+-	case 203, name='SquareShelfDiagHO';
+-	case 204, name='SquareShelfDiagS3d';
+-	case 205, name='SquareShelfDiagMHOPenalties';
++	case 201, name='SquareShelfStressSSA2d';
++	case 202, name='SquareShelfStressSSA3d';
++	case 203, name='SquareShelfStressHO';
++	case 204, name='SquareShelfStressS3d';
++	case 205, name='SquareShelfStressMHOPenalties';
+ 	case 206, name='SquareShelfTherStea';
+ 	case 207, name='SquareShelfTherTran';
+ 	case 208, name='SquareShelfTranSSA2d';
+@@ -42,16 +42,16 @@
+ 	case 213, name='SquareShelfCMBSSA3d';
+ 	case 214, name='SquareShelfCMBHO';
+ 	case 215, name='SquareShelfCMBS3d';
+-	case 216, name='SquareShelfDiagSSA2dRift';
++	case 216, name='SquareShelfStressSSA2dRift';
+ 	case 217, name='SquareShelfConstrained';
+ 	case 218, name='SquareShelfConstrainedDakotaB';
+-	case 219, name='SquareShelfDiagSSAHOTiling';
+-	case 220, name='SquareShelfDiagHOFS3dTiling';
+-	case 221, name='SquareShelfDiagSSAFS3dTiling';
+-	case 222, name='SquareShelfDiagSSA2dTransientIncrHydro';
+-	case 223, name='SquareShelfDiagSSA2dTransientIncrNonHydro';
+-	case 224, name='SquareShelfDiagHOTransientIncrHydro';
+-	case 225, name='SquareShelfDiagHOTransientIncrNonHydro';
++	case 219, name='SquareShelfStressSSAHOTiling';
++	case 220, name='SquareShelfStressHOFS3dTiling';
++	case 221, name='SquareShelfStressSSAFS3dTiling';
++	case 222, name='SquareShelfStressSSA2dTransientIncrHydro';
++	case 223, name='SquareShelfStressSSA2dTransientIncrNonHydro';
++	case 224, name='SquareShelfStressHOTransientIncrHydro';
++	case 225, name='SquareShelfStressHOTransientIncrNonHydro';
+ 	case 226, name='SquareShelfTranCflSSA2d';
+ 	case 227, name='SquareShelfTranCflHO';
+ 	case 228, name='SquareShelfTranForceNeg2d';
+@@ -64,22 +64,22 @@
+ 	case 235, name='SquareShelfTranForceNeg2dDakotaLocal';
+ 	case 236, name='SquareShelfTranIspddIsdeltaSSA2d';
+ 	case 237, name='SquareShelfTranIspddIsdeltaSSA3d';
+-	case 270, name='SquareShelfDiagSSA2dDamage';
++	case 270, name='SquareShelfStressSSA2dDamage';
+ 	case 272, name='SquareShelfCMZSSA2dDamage';
+-	case 274, name='SquareShelfDiagSSA2dDamageRift';
+-	case 280, name='SquareShelfDiagSSA2dP2';
+-	case 285, name='SquareShelfDiagHOP1xP2';
+-	case 286, name='SquareShelfDiagHOP2xP1';
+-	case 287, name='SquareShelfDiagHOP2xP2';
+-	case 290, name='SquareShelfDiagFSP2P1';
+-	case 301, name='SquareSheetConstrainedDiagSSA2d';
+-	case 302, name='SquareSheetConstrainedDiagSIA2d';
+-	case 303, name='SquareSheetConstrainedDiagHSSA2d';
+-	case 304, name='SquareSheetConstrainedDiagSSA3d';
+-	case 305, name='SquareSheetConstrainedDiagSIA3d';
+-	case 306, name='SquareSheetConstrainedDiagHSSA3d';
+-	case 307, name='SquareSheetConstrainedDiagHO';
+-	case 308, name='SquareSheetConstrainedDiagS3d';
++	case 274, name='SquareShelfStressSSA2dDamageRift';
++	case 280, name='SquareShelfStressSSA2dP2';
++	case 285, name='SquareShelfStressHOP1xP2';
++	case 286, name='SquareShelfStressHOP2xP1';
++	case 287, name='SquareShelfStressHOP2xP2';
++	case 290, name='SquareShelfStressFSP2P1';
++	case 301, name='SquareSheetConstrainedStressSSA2d';
++	case 302, name='SquareSheetConstrainedStressSIA2d';
++	case 303, name='SquareSheetConstrainedStressHSSA2d';
++	case 304, name='SquareSheetConstrainedStressSSA3d';
++	case 305, name='SquareSheetConstrainedStressSIA3d';
++	case 306, name='SquareSheetConstrainedStressHSSA3d';
++	case 307, name='SquareSheetConstrainedStressHO';
++	case 308, name='SquareSheetConstrainedStressS3d';
+ 	case 309, name='SquareSheetConstrainedMasstransp2d';
+ 	case 320, name='SquareSheetConstrainedMasstransp2dDG';
+ 	case 311, name='SquareSheetConstrainedMasstransp3d';
+@@ -104,11 +104,11 @@
+ 	case 331, name='SquareSheetConstrainedHydrologyShreve';
+ 	case 332, name='SquareSheetConstrainedHydrologyDC';
+ 	case 333, name='SquareSheetHydrologyDCTwoLayers';
+-	case 401, name='SquareSheetShelfDiagSSA2d';
+-	case 402, name='SquareSheetShelfDiagSSA3d';
+-	case 403, name='SquareSheetShelfDiagHO';
+-	case 404, name='SquareSheetShelfDiagS3d';
+-	case 405, name='SquareSheetShelfDiagMHOPenalties';
++	case 401, name='SquareSheetShelfStressSSA2d';
++	case 402, name='SquareSheetShelfStressSSA3d';
++	case 403, name='SquareSheetShelfStressHO';
++	case 404, name='SquareSheetShelfStressS3d';
++	case 405, name='SquareSheetShelfStressMHOPenalties';
+ 	case 406, name='SquareSheetShelfTherStea';
+ 	case 407, name='SquareSheetShelfTherTran';
+ 	case 408, name='SquareSheetShelfTranSSA2d';
+@@ -122,25 +122,25 @@
+ 	case 416, name='SquareSheetShelfCMDragSteaHO';
+ 	case 417, name='SquareSheetShelfDiadSSA3dDakotaSamp';
+ 	case 418, name='SquareSheetShelfDiadSSA3dDakotaAreaAverage';
+-	case 419, name='SquareSheetShelfDiagSSAHOTiling';
++	case 419, name='SquareSheetShelfStressSSAHOTiling';
+ 	case 420, name='SquareSheetShelfDakotaScaledResponse';
+-	case 421, name='SquareSheetShelfDiagHOFS3dTiling';
+-	case 422, name='SquareSheetShelfDiagSSAFS3dTiling';
++	case 421, name='SquareSheetShelfStressHOFS3dTiling';
++	case 422, name='SquareSheetShelfStressSSAFS3dTiling';
+ 	case 423, name='RoundSheetShelfGLMigrationSSA2d';
+ 	case 424, name='SquareSheetShelfGroundingLine2dAgressive';
+ 	case 425, name='SquareSheetShelfGroundingLine2dSoft';
+ 	case 426, name='SquareSheetShelfGroundingLine3dAgressive';
+ 	case 427, name='SquareSheetShelfGroundingLine3dSoft';
+-	case 428, name='SquareSheetShelfDiagSSA2dNewton';
+-	case 429, name='SquareSheetShelfDiagHONewton';
+-	case 430, name='SquareSheetShelfDiagS3dNewton';
++	case 428, name='SquareSheetShelfStressSSA2dNewton';
++	case 429, name='SquareSheetShelfStressHONewton';
++	case 430, name='SquareSheetShelfStressS3dNewton';
+ 	case 431, name='SquareSheetShelfSteaEnthalpySSA3d';
+ 	case 432, name='SquareSheetShelfSteaEnthalpyHO';
+ 	case 433, name='RoundSheetShelfGLMigrationSSA3d';
+ 	case 434, name='SquareSheetShelfL1L2';
+-	case 501, name='PigDiagSSA2d';
+-	case 502, name='PigDiagHO';
+-	case 503, name='PigDiagS3d';
++	case 501, name='PigStressSSA2d';
++	case 502, name='PigStressHO';
++	case 503, name='PigStressS3d';
+ 	case 504, name='PigTranSSA2d';
+ 	case 505, name='PigTranSSA3d';
+ 	case 506, name='PigTranHO';
+@@ -178,8 +178,8 @@
+ 	case 1109, name='ISMIPE';
+ 	case 1110, name='ISMIPF';
+ 	case 1201, name='EISMINTMassConservation';
+-	case 1202, name='EISMINTDiag1';
+-	case 1203, name='EISMINTDiag2';
++	case 1202, name='EISMINTStress1';
++	case 1203, name='EISMINTStress2';
+ 	case 1204, name='EISMINTTran2';
+ 	case 1205, name='EISMINTRoundIceSheetStaticSIA';
+ 	case 1206, name='EISMINTRoundIceSheetStaticHO';
+@@ -208,10 +208,10 @@
+ 	case 2081, name='GiaBenchmarksAB2dD1';
+ 	case 2082, name='GiaBenchmarksAB2dD2';
+ 	case 2083, name='GiaBenchmarksAB2dD3';
+-	case 3001, name='SquareShelfConstrainedDiagSSA2dAdolc';
+-	case 3002, name='SquareShelfConstrainedDiagSSA3dAdolc';
+-	case 3003, name='SquareShelfConstrainedDiagHOAdolc';
+-	case 3004, name='SquareShelfConstrainedDiagS3dAdolc';
++	case 3001, name='SquareShelfConstrainedStressSSA2dAdolc';
++	case 3002, name='SquareShelfConstrainedStressSSA3dAdolc';
++	case 3003, name='SquareShelfConstrainedStressHOAdolc';
++	case 3004, name='SquareShelfConstrainedStressS3dAdolc';
+ 	case 3005, name='SquareShelfConstrainedMasstransp2dAdolc';
+ 	case 3006, name='SquareShelfConstrainedMasstransp2dDGAdolc';
+ 	case 3007, name='SquareShelfConstrainedMasstransp3dAdolc';
+Index: ../trunk-jpl/test/NightlyRun/test501.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test501.py	(revision 15771)
+@@ -12,14 +12,14 @@
+ md=parameterize(md,'../Par/Pig.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test232.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test232.py	(revision 15771)
+@@ -17,7 +17,7 @@
+ md.thermal.spctemperature=numpy.vstack((numpy.hstack((md.thermal.spctemperature, md.thermal.spctemperature+5., md.thermal.spctemperature+10., md.thermal.spctemperature+15.)), [1.5,2.5,3.5,4.]))
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=4.
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test313.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test313.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.verbose=verbose('convergence',True,'solution',True)
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test301.m	(revision 15771)
+@@ -3,14 +3,14 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test220.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test220.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,1e-06,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test203.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 15771)
+@@ -34,17 +34,17 @@
+ md.inversion.vy_obs=md.initialization.vy
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','MaterialsRheologyZbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-   md.results.DiagnosticSolution.Gradient1,\
+-   md.results.DiagnosticSolution.J,\
+-   md.results.DiagnosticSolution.MaterialsRheologyZbar,\
+-   md.results.DiagnosticSolution.Pressure,\
+-   md.results.DiagnosticSolution.Vel,\
+-   md.results.DiagnosticSolution.Vx,\
+-   md.results.DiagnosticSolution.Vy,\
++   md.results.StressbalanceSolution.Gradient1,\
++   md.results.StressbalanceSolution.J,\
++   md.results.StressbalanceSolution.MaterialsRheologyZbar,\
++   md.results.StressbalanceSolution.Pressure,\
++   md.results.StressbalanceSolution.Vel,\
++   md.results.StressbalanceSolution.Vx,\
++   md.results.StressbalanceSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test434.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test434.py	(revision 15771)
+@@ -14,15 +14,15 @@
+ md.extrude(4,1.)
+ md=setflowequation(md,'L1L2','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-06,1e-06,1e-06,1e-06,1e-07]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test515.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test515.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'HO','all')
+ md.thermal.stabilization=2
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 15771)
+@@ -9,7 +9,7 @@
+ md.geometry.thickness(:)=1000.;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md.surfaceforcings.mass_balance(:)=100.;
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+ 
+Index: ../trunk-jpl/test/NightlyRun/test326.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test326.m	(revision 15771)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test407.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test407.m	(revision 15771)
+@@ -4,7 +4,7 @@
+ md=extrude(md,4,1.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test286.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test286.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test286.py	(revision 15771)
+@@ -15,15 +15,15 @@
+ md=setflowequation(md,'HO','all');
+ md.flowequation.fe_HO=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+ field_tolerances=[1e-9,1e-9,1e-9,1e-9,1e-13];
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	];
+Index: ../trunk-jpl/test/NightlyRun/test287.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test287.m	(revision 15771)
+@@ -5,15 +5,15 @@
+ md=setflowequation(md,'HO','all');
+ md.flowequation.fe_HO=3;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 15771)
+@@ -13,10 +13,10 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.diagnostic.requested_outputs=StressTensorEnum()
++md.stressbalance.requested_outputs=StressTensorEnum()
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.autodiff.isautodiff=True
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure',\
+@@ -24,15 +24,15 @@
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.StressTensorxx,\
+-	md.results.DiagnosticSolution.StressTensoryy,\
+-	md.results.DiagnosticSolution.StressTensorzz,\
+-	md.results.DiagnosticSolution.StressTensorxy,\
+-	md.results.DiagnosticSolution.StressTensorxz,\
+-	md.results.DiagnosticSolution.StressTensoryz,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.StressTensorxx,\
++	md.results.StressbalanceSolution.StressTensoryy,\
++	md.results.StressbalanceSolution.StressTensorzz,\
++	md.results.StressbalanceSolution.StressTensorxy,\
++	md.results.StressbalanceSolution.StressTensorxz,\
++	md.results.StressbalanceSolution.StressTensoryz,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test1102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1102.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1102.m	(revision 15771)
+@@ -28,9 +28,9 @@
+ 
+ 	%Create dirichlet on the bed only
+ 	pos=find(md.mesh.vertexonbed);
+-	md.diagnostic.spcvx(pos)=0.;
+-	md.diagnostic.spcvy(pos)=0.;
+-	md.diagnostic.spcvz(pos)=0.;
++	md.stressbalance.spcvx(pos)=0.;
++	md.stressbalance.spcvy(pos)=0.;
++	md.stressbalance.spcvz(pos)=0.;
+ 
+ %	%Create MPCs to have periodic boundary conditions
+ %	posx=find(md.mesh.x==0.);
+@@ -41,21 +41,21 @@
+ %	posy=find(md.mesh.y==0. & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x) & ~md.mesh.vertexonbed); %Don't take the same nodes two times
+ %	posy2=find(md.mesh.y==max(md.mesh.y) & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x) & ~md.mesh.vertexonbed);
+ 
+-%	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
++%	md.stressbalance.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+-	%Compute the diagnostic
+-	md.diagnostic.abstol=NaN;
+-	md.diagnostic.reltol=NaN;
+-	md.diagnostic.restol=1.;
++	%Compute the stressbalance
++	md.stressbalance.abstol=NaN;
++	md.stressbalance.reltol=NaN;
++	md.stressbalance.restol=1.;
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	%Plot the results and save them
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	pressure=(md.results.DiagnosticSolution.Pressure);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	pressure=(md.results.StressbalanceSolution.Pressure);
++	results{i}=md.results.StressbalanceSolution;
+ 	minvx(i)=min(vx(end-md.mesh.numberofvertices2d+1:end));
+ 	maxvx(i)=max(vx(end-md.mesh.numberofvertices2d+1:end));
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1208.m	(revision 15771)
+@@ -13,9 +13,9 @@
+ 
+ %Spc the nodes on the bed
+ pos=find(md.mesh.vertexonbed);
+-md.diagnostic.spcvx(pos)=0.;
+-md.diagnostic.spcvy(pos)=0.;
+-md.diagnostic.spcvz(pos)=0.;
++md.stressbalance.spcvx(pos)=0.;
++md.stressbalance.spcvy(pos)=0.;
++md.stressbalance.spcvz(pos)=0.;
+ 
+ %Adapt the time steps to the resolution
+ md.timestepping.time_step=15.;
+Index: ../trunk-jpl/test/NightlyRun/test201.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test201.py	(revision 15771)
+@@ -13,14 +13,14 @@
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test322.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test322.py	(revision 15771)
+@@ -30,17 +30,17 @@
+ md.inversion.vy_obs=md.initialization.vy
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-06,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.FrictionCoefficient,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.FrictionCoefficient,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test403.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test403.py	(revision 15771)
+@@ -14,15 +14,15 @@
+ md.extrude(5,1.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 15771)
+@@ -32,7 +32,7 @@
+ 
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ 
+ # Fields and tolerances to track changes
+@@ -40,11 +40,11 @@
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.MaterialsRheologyB,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.MaterialsRheologyB,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test212.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test212.m	(revision 15771)
+@@ -17,17 +17,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	(md.results.DiagnosticSolution.J),...
+-	(md.results.DiagnosticSolution.MaterialsRheologyBbar),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	(md.results.StressbalanceSolution.J),...
++	(md.results.StressbalanceSolution.MaterialsRheologyBbar),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test433.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test433.m	(revision 15771)
+@@ -20,7 +20,7 @@
+ 
+ md.transient.isthermal=0;
+ md.transient.ismasstransport=0;
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ 
+ %test different grounding line dynamics.
+Index: ../trunk-jpl/test/NightlyRun/test1204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1204.py	(revision 15771)
+@@ -10,7 +10,7 @@
+ from MatlabFuncs import *
+ 
+ """
+-Test on the diagnostic model and the masstransport in 2d
++Test on the stressbalance model and the masstransport in 2d
+ """
+ 
+ printingflag=False
+@@ -24,15 +24,15 @@
+ 
+ #Impose a non zero velocity on the upper boundary condition (y=max(y))
+ pos=numpy.nonzero(md.mesh.y==max(md.mesh.y))
+-md.diagnostic.spcvy[pos]=400.*(((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2-numpy.ones((numpy.size(pos),1)))*heaviside((1.+sys.float_info.epsilon)*numpy.ones((numpy.size(pos),1))-((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2)
++md.stressbalance.spcvy[pos]=400.*(((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2-numpy.ones((numpy.size(pos),1)))*heaviside((1.+sys.float_info.epsilon)*numpy.ones((numpy.size(pos),1))-((md.mesh.x[pos].reshape(-1,1)-100000.)/25000.)**2)
+ 
+ #Compute solution for SSA's model 
+ md.cluster=generic('name',oshostname(),'np',8)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #plot results
+-md.initialization.vx=md.results.DiagnosticSolution.Vx
+-md.initialization.vy=md.results.DiagnosticSolution.Vy
++md.initialization.vx=md.results.StressbalanceSolution.Vx
++md.initialization.vy=md.results.StressbalanceSolution.Vy
+ 
+ md.timestepping.time_step=1.
+ md.timestepping.final_time=5000.
+Index: ../trunk-jpl/test/NightlyRun/test103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test103.py	(revision 15771)
+@@ -13,8 +13,8 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.diagnostic.requested_outputs=StressTensorEnum()
+-md=solve(md,DiagnosticSolutionEnum())
++md.stressbalance.requested_outputs=StressTensorEnum()
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure',\
+@@ -22,15 +22,15 @@
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.StressTensorxx,\
+-	md.results.DiagnosticSolution.StressTensoryy,\
+-	md.results.DiagnosticSolution.StressTensorzz,\
+-	md.results.DiagnosticSolution.StressTensorxy,\
+-	md.results.DiagnosticSolution.StressTensorxz,\
+-	md.results.DiagnosticSolution.StressTensoryz,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.StressTensorxx,\
++	md.results.StressbalanceSolution.StressTensoryy,\
++	md.results.StressbalanceSolution.StressTensorzz,\
++	md.results.StressbalanceSolution.StressTensorxy,\
++	md.results.StressbalanceSolution.StressTensorxz,\
++	md.results.StressbalanceSolution.StressTensoryz,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test305.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test305.py	(revision 15771)
+@@ -13,15 +13,15 @@
+ md.extrude(5,2.)
+ md=setflowequation(md,'SIA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test302.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test302.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test302.m	(revision 15771)
+@@ -3,14 +3,14 @@
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'SIA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 15771)
+@@ -4,16 +4,16 @@
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.viscosity_overshoot=0;
+-md=solve(md,DiagnosticSolutionEnum());
++md.stressbalance.viscosity_overshoot=0;
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-09,1e-09,1e-06,1e-09,1e-09};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-08,1e-08,1e-07,1e-08,1e-08};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test290.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test290.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test290.py	(revision 15771)
+@@ -15,15 +15,15 @@
+ md=setflowequation(md,'FS','all');
+ md.flowequation.fe_FS=4;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+ field_tolerances=[1e-7,1e-7,1e-7,1e-7,1e-7];
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	];
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 15771)
+@@ -20,7 +20,7 @@
+ md.surfaceforcings.mass_balance[:]=100.
+ md.extrude(3,1.);
+ md=setflowequation(md,'SSA','all');
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AgressiveMigration'
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test319.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test319.py	(revision 15771)
+@@ -29,17 +29,17 @@
+ md.inversion.vy_obs=md.initialization.vy
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.DiagnosticSolution.Gradient1,\
+-	md.results.DiagnosticSolution.J,\
+-	md.results.DiagnosticSolution.FrictionCoefficient,\
+-	md.results.DiagnosticSolution.Pressure,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
++	md.results.StressbalanceSolution.Gradient1,\
++	md.results.StressbalanceSolution.J,\
++	md.results.StressbalanceSolution.FrictionCoefficient,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test280.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test280.m	(revision 15771)
+@@ -4,14 +4,14 @@
+ md=setflowequation(md,'SSA','all');
+ md.flowequation.fe_SSA=1;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+ field_tolerances={1e-12,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test425.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test425.m	(revision 15771)
+@@ -9,7 +9,7 @@
+ md.geometry.thickness(:)=1300.;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md.surfaceforcings.mass_balance(:)=-150.;
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='SoftMigration';
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1106.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1106.py	(revision 15771)
+@@ -26,38 +26,38 @@
+ 
+ 	#Add spc on the borders
+ 	pos=numpy.nonzero(logical_or_n(md.mesh.x==0.,md.mesh.x==numpy.max(md.mesh.x),md.mesh.y==0.,md.mesh.y==numpy.max(md.mesh.y)))
+-	md.diagnostic.spcvx[pos]=0.
+-	md.diagnostic.spcvy[pos]=0.
++	md.stressbalance.spcvx[pos]=0.
++	md.stressbalance.spcvy[pos]=0.
+ 	if   (L==5000.):
+-		md.diagnostic.spcvx[pos]=15.66
+-		md.diagnostic.spcvy[pos]=-0.1967
++		md.stressbalance.spcvx[pos]=15.66
++		md.stressbalance.spcvy[pos]=-0.1967
+ 	elif (L==10000.):
+-		md.diagnostic.spcvx[pos]=16.04
+-		md.diagnostic.spcvy[pos]=-0.1977
++		md.stressbalance.spcvx[pos]=16.04
++		md.stressbalance.spcvy[pos]=-0.1977
+ 	elif (L==20000.):
+-		md.diagnostic.spcvx[pos]=16.53
+-		md.diagnostic.spcvy[pos]=-1.27
++		md.stressbalance.spcvx[pos]=16.53
++		md.stressbalance.spcvy[pos]=-1.27
+ 	elif (L==40000.):
+-		md.diagnostic.spcvx[pos]=17.23
+-		md.diagnostic.spcvy[pos]=-3.17
++		md.stressbalance.spcvx[pos]=17.23
++		md.stressbalance.spcvy[pos]=-3.17
+ 	elif (L==80000.):
+-		md.diagnostic.spcvx[pos]=16.68
+-		md.diagnostic.spcvy[pos]=-2.69
++		md.stressbalance.spcvx[pos]=16.68
++		md.stressbalance.spcvy[pos]=-2.69
+ 	elif (L==160000.):
+-		md.diagnostic.spcvx[pos]=16.03
+-		md.diagnostic.spcvy[pos]=-1.27
++		md.stressbalance.spcvx[pos]=16.03
++		md.stressbalance.spcvy[pos]=-1.27
+ 
+ 	md=setflowequation(md,'FS','all')
+ 
+-	#Compute the diagnostic
++	#Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8)
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 
+ 	#Plot the results and save them
+-	vx=md.results.DiagnosticSolution.Vx
+-	vy=md.results.DiagnosticSolution.Vy
+-	vz=md.results.DiagnosticSolution.Vz
+-	results.append(md.results.DiagnosticSolution)
++	vx=md.results.StressbalanceSolution.Vx
++	vy=md.results.StressbalanceSolution.Vy
++	vz=md.results.StressbalanceSolution.Vz
++	results.append(md.results.StressbalanceSolution)
+ 
+ #	plotmodel(md,'data',vx,'data',vy,'data',vz,'layer#all',md.mesh.numberoflayers)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1201.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1201.m	(revision 15771)
+@@ -34,7 +34,7 @@
+ 	end
+ 
+ 	%solve
+-	md.transient.isdiagnostic=0;
++	md.transient.isstressbalance=0;
+ 	md.settings.output_frequency=500; %keep only last step
+ 	md.verbose=verbose();
+ 	md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1103.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1103.m	(revision 15771)
+@@ -20,12 +20,12 @@
+ 	md=setflowequation(md,'HO','all');
+ 
+ 	%Create dirichlet on the bed only
+-	md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-	md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++	md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+ 	pos=find(md.mesh.vertexonbed);
+-	md.diagnostic.spcvx(pos)=0.;
+-	md.diagnostic.spcvy(pos)=0.;
++	md.stressbalance.spcvx(pos)=0.;
++	md.stressbalance.spcvy(pos)=0.;
+ 
+ 	%Create MPCs to have periodic boundary conditions
+ 	posx=find(md.mesh.x==0.);
+@@ -34,17 +34,17 @@
+ 	posy=find(md.mesh.y==0. & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x)); %Don't take the same nodes two times
+ 	posy2=find(md.mesh.y==max(md.mesh.y) & md.mesh.x~=0. & md.mesh.x~=max(md.mesh.x));
+ 
+-	md.diagnostic.vertex_pairing=[posx,posx2;posy,posy2];
++	md.stressbalance.vertex_pairing=[posx,posx2;posy,posy2];
+ 
+-	%Compute the diagnostic
++	%Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum());
++	md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	%Plot the results and save them
+-	vx=(md.results.DiagnosticSolution.Vx);
+-	vy=(md.results.DiagnosticSolution.Vy);
+-	vz=(md.results.DiagnosticSolution.Vz);
+-	results{i}=md.results.DiagnosticSolution;
++	vx=(md.results.StressbalanceSolution.Vx);
++	vy=(md.results.StressbalanceSolution.Vy);
++	vz=(md.results.StressbalanceSolution.Vz);
++	results{i}=md.results.StressbalanceSolution;
+ 	minvx(i)=min(vx(end-md.mesh.numberofvertices2d+1:end));
+ 	maxvx(i)=max(vx(end-md.mesh.numberofvertices2d+1:end));
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 15771)
+@@ -13,7 +13,7 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test1601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1601.m	(revision 15771)
+@@ -2,14 +2,14 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+-md.diagnostic.spcvx(find(md.mesh.y>0.))=NaN;
++md.stressbalance.spcvx(find(md.mesh.y>0.))=NaN;
+ md.initialization.vx(:)=0.;
+ md.initialization.vy(:)=0.;
+ md.initialization.vel(:)=0.;
+ 
+ md.cluster=generic('name',oshostname(),'np',2);
+-md=solve(md,DiagnosticSolutionEnum());
+-vel0=md.results.DiagnosticSolution.Vel;
++md=solve(md,StressbalanceSolutionEnum());
++vel0=md.results.StressbalanceSolution.Vel;
+ 
+ theta=30.*pi/180.;
+ x=md.mesh.x;
+@@ -17,21 +17,21 @@
+ md.mesh.x=cos(theta)*x-sin(theta)*y;
+ md.mesh.y=sin(theta)*x+cos(theta)*y;
+ 
+-md.diagnostic.referential(:,1:3)=repmat([cos(theta),sin(theta),0],md.mesh.numberofvertices,1);
+-md.diagnostic.referential(:,4:6)=repmat([0,0,1],md.mesh.numberofvertices,1);
+-md=solve(md,DiagnosticSolutionEnum());
+-vel1=md.results.DiagnosticSolution.Vel;
++md.stressbalance.referential(:,1:3)=repmat([cos(theta),sin(theta),0],md.mesh.numberofvertices,1);
++md.stressbalance.referential(:,4:6)=repmat([0,0,1],md.mesh.numberofvertices,1);
++md=solve(md,StressbalanceSolutionEnum());
++vel1=md.results.StressbalanceSolution.Vel;
+ 
+ plotmodel(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
+ disp(['Error between Cartesian and rotated CS: ' num2str(max(abs(vel0-vel1))/(max(abs(vel0))+eps)) ]);
+ 
+ %Now, put CS back to normal except on the side where the spc are applied
+ pos=find(x==0. | x==1000000.);
+-md.diagnostic.referential(:)=NaN;
+-md.diagnostic.referential(pos,1:3)=repmat([cos(theta),sin(theta),0],size(pos,1),1);
+-md.diagnostic.referential(pos,4:6)=repmat([0,0,1],size(pos,1),1);
+-md=solve(md,DiagnosticSolutionEnum());
+-vel2=md.results.DiagnosticSolution.Vel;
++md.stressbalance.referential(:)=NaN;
++md.stressbalance.referential(pos,1:3)=repmat([cos(theta),sin(theta),0],size(pos,1),1);
++md.stressbalance.referential(pos,4:6)=repmat([0,0,1],size(pos,1),1);
++md=solve(md,StressbalanceSolutionEnum());
++vel2=md.results.StressbalanceSolution.Vel;
+ 
+ plotmodel(md,'data',vel0,'data',vel2,'data',vel2-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
+ disp(['Error between Cartesian and rotated CS: ' num2str(max(abs(vel0-vel2))/(max(abs(vel0))+eps)) ]);
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15771)
+@@ -9,10 +9,10 @@
+ 	"""
+ 
+ 	idname={
+-	101 : 'SquareShelfConstrainedDiagSSA2d',
+-	102 : 'SquareShelfConstrainedDiagSSA3d',
+-	103 : 'SquareShelfConstrainedDiagHO',
+-	104 : 'SquareShelfConstrainedDiagS3d',
++	101 : 'SquareShelfConstrainedStressSSA2d',
++	102 : 'SquareShelfConstrainedStressSSA3d',
++	103 : 'SquareShelfConstrainedStressHO',
++	104 : 'SquareShelfConstrainedStressS3d',
+ 	105 : 'SquareShelfConstrainedMasstransp2d',
+ 	106 : 'SquareShelfConstrainedMasstransp2dDG',
+ 	107 : 'SquareShelfConstrainedMasstransp3d',
+@@ -31,11 +31,11 @@
+ 	120 : 'SquareShelfConstrainedEnthalpyStea',
+ 	121 : 'SquareShelfConstrainedEnthalpyTran',
+ 	122 : 'SquareShelfConstrainedTransHOEnth',
+-	201 : 'SquareShelfDiagSSA2d',
+-	202 : 'SquareShelfDiagSSA3d',
+-	203 : 'SquareShelfDiagHO',
+-	204 : 'SquareShelfDiagS3d',
+-	205 : 'SquareShelfDiagMHOPenalties',
++	201 : 'SquareShelfStressSSA2d',
++	202 : 'SquareShelfStressSSA3d',
++	203 : 'SquareShelfStressHO',
++	204 : 'SquareShelfStressS3d',
++	205 : 'SquareShelfStressMHOPenalties',
+ 	206 : 'SquareShelfTherStea',
+ 	207 : 'SquareShelfTherTran',
+ 	208 : 'SquareShelfTranSSA2d',
+@@ -46,16 +46,16 @@
+ 	213 : 'SquareShelfCMBSSA3d',
+ 	214 : 'SquareShelfCMBHO',
+ 	215 : 'SquareShelfCMBS3d',
+-	216 : 'SquareShelfDiagSSA2dRift',
++	216 : 'SquareShelfStressSSA2dRift',
+ 	217 : 'SquareShelfConstrained',
+ 	218 : 'SquareShelfConstrainedDakotaB',
+-	219 : 'SquareShelfDiagSSAHOTiling',
+-	220 : 'SquareShelfDiagHOFS3dTiling',
+-	221 : 'SquareShelfDiagSSAFS3dTiling',
+-	222 : 'SquareShelfDiagSSA2dTransientIncrHydro',
+-	223 : 'SquareShelfDiagSSA2dTransientIncrNonHydro',
+-	224 : 'SquareShelfDiagHOTransientIncrHydro',
+-	225 : 'SquareShelfDiagHOTransientIncrNonHydro',
++	219 : 'SquareShelfStressSSAHOTiling',
++	220 : 'SquareShelfStressHOFS3dTiling',
++	221 : 'SquareShelfStressSSAFS3dTiling',
++	222 : 'SquareShelfStressSSA2dTransientIncrHydro',
++	223 : 'SquareShelfStressSSA2dTransientIncrNonHydro',
++	224 : 'SquareShelfStressHOTransientIncrHydro',
++	225 : 'SquareShelfStressHOTransientIncrNonHydro',
+ 	226 : 'SquareShelfTranCflSSA2d',
+ 	227 : 'SquareShelfTranCflHO',
+ 	228 : 'SquareShelfTranForceNeg2d',
+@@ -68,22 +68,22 @@
+ 	235  : 'SquareShelfTranForceNeg2dDakotaLocal',
+ 	236  : 'SquareShelfTranIspddIsdeltaSSA2d',
+ 	237  : 'SquareShelfTranIspddIsdeltaSSA3d',
+-	270  : 'SquareShelfDiagSSA2dDamage',
++	270  : 'SquareShelfStressSSA2dDamage',
+ 	272  : 'SquareShelfCMZSSA2dDamage',
+-	274  : 'SquareShelfDiagSSA2dDamageRift',
+-	280  : 'SquareShelfDiagSSA2dP2',
+-	285  : 'SquareShelfDiagHOP1xP2',
+-	286  : 'SquareShelfDiagHOP2xP1',
+-	287  : 'SquareShelfDiagHOP2xP2',
+-	290  : 'SquareShelfDiagFSP2P1',
+-	301  : 'SquareSheetConstrainedDiagSSA2d',
+-	302  : 'SquareSheetConstrainedDiagSIA2d',
+-	303  : 'SquareSheetConstrainedDiagHSSA2d',
+-	304  : 'SquareSheetConstrainedDiagSSA3d',
+-	305  : 'SquareSheetConstrainedDiagSIA3d',
+-	306  : 'SquareSheetConstrainedDiagHSSA3d',
+-	307  : 'SquareSheetConstrainedDiagHO',
+-	308  : 'SquareSheetConstrainedDiagS3d',
++	274  : 'SquareShelfStressSSA2dDamageRift',
++	280  : 'SquareShelfStressSSA2dP2',
++	285  : 'SquareShelfStressHOP1xP2',
++	286  : 'SquareShelfStressHOP2xP1',
++	287  : 'SquareShelfStressHOP2xP2',
++	290  : 'SquareShelfStressFSP2P1',
++	301  : 'SquareSheetConstrainedStressSSA2d',
++	302  : 'SquareSheetConstrainedStressSIA2d',
++	303  : 'SquareSheetConstrainedStressHSSA2d',
++	304  : 'SquareSheetConstrainedStressSSA3d',
++	305  : 'SquareSheetConstrainedStressSIA3d',
++	306  : 'SquareSheetConstrainedStressHSSA3d',
++	307  : 'SquareSheetConstrainedStressHO',
++	308  : 'SquareSheetConstrainedStressS3d',
+ 	309  : 'SquareSheetConstrainedMasstransp2d',
+ 	320  : 'SquareSheetConstrainedMasstransp2dDG',
+ 	311  : 'SquareSheetConstrainedMasstransp3d',
+@@ -108,11 +108,11 @@
+ 	331  : 'SquareSheetConstrainedHydrologyShreve',
+ 	332  : 'SquareSheetConstrainedHydrologyDC',
+ 	333  : 'SquareSheetHydrologyDCTwoLayers',
+-	401  : 'SquareSheetShelfDiagSSA2d',
+-	402  : 'SquareSheetShelfDiagSSA3d',
+-	403  : 'SquareSheetShelfDiagHO',
+-	404  : 'SquareSheetShelfDiagS3d',
+-	405  : 'SquareSheetShelfDiagMHOPenalties',
++	401  : 'SquareSheetShelfStressSSA2d',
++	402  : 'SquareSheetShelfStressSSA3d',
++	403  : 'SquareSheetShelfStressHO',
++	404  : 'SquareSheetShelfStressS3d',
++	405  : 'SquareSheetShelfStressMHOPenalties',
+ 	406  : 'SquareSheetShelfTherStea',
+ 	407  : 'SquareSheetShelfTherTran',
+ 	408  : 'SquareSheetShelfTranSSA2d',
+@@ -126,25 +126,25 @@
+ 	416  : 'SquareSheetShelfCMDragSteaHO',
+ 	417  : 'SquareSheetShelfDiadSSA3dDakotaSamp',
+ 	418  : 'SquareSheetShelfDiadSSA3dDakotaAreaAverage',
+-	419  : 'SquareSheetShelfDiagSSAHOTiling',
++	419  : 'SquareSheetShelfStressSSAHOTiling',
+ 	420  : 'SquareSheetShelfDakotaScaledResponse',
+-	421  : 'SquareSheetShelfDiagHOFS3dTiling',
+-	422  : 'SquareSheetShelfDiagSSAFS3dTiling',
++	421  : 'SquareSheetShelfStressHOFS3dTiling',
++	422  : 'SquareSheetShelfStressSSAFS3dTiling',
+ 	423  : 'RoundSheetShelfGLMigrationSSA2d',
+ 	424  : 'SquareSheetShelfGroundingLine2dAgressive',
+ 	425  : 'SquareSheetShelfGroundingLine2dSoft',
+ 	426  : 'SquareSheetShelfGroundingLine3dAgressive',
+ 	427  : 'SquareSheetShelfGroundingLine3dSoft',
+-	428  : 'SquareSheetShelfDiagSSA2dNewton',
+-	429  : 'SquareSheetShelfDiagHONewton',
+-	430  : 'SquareSheetShelfDiagS3dNewton',
++	428  : 'SquareSheetShelfStressSSA2dNewton',
++	429  : 'SquareSheetShelfStressHONewton',
++	430  : 'SquareSheetShelfStressS3dNewton',
+ 	431  : 'SquareSheetShelfSteaEnthalpySSA3d',
+ 	432  : 'SquareSheetShelfSteaEnthalpyHO',
+ 	433  : 'RoundSheetShelfGLMigrationSSA3d',
+ 	434  : 'SquareSheetShelfL1L2',
+-	501  : 'PigDiagSSA2d',
+-	502  : 'PigDiagHO',
+-	503  : 'PigDiagS3d',
++	501  : 'PigStressSSA2d',
++	502  : 'PigStressHO',
++	503  : 'PigStressS3d',
+ 	504  : 'PigTranSSA2d',
+ 	505  : 'PigTranSSA3d',
+ 	506  : 'PigTranHO',
+@@ -182,8 +182,8 @@
+ 	1109 : 'ISMIPE',
+ 	1110 : 'ISMIPF',
+ 	1201 : 'EISMINTMassConservation',
+-	1202 : 'EISMINTDiag1',
+-	1203 : 'EISMINTDiag2',
++	1202 : 'EISMINTStress1',
++	1203 : 'EISMINTStress2',
+ 	1204 : 'EISMINTTran2',
+ 	1205 : 'EISMINTRoundIceSheetStaticSIA',
+ 	1206 : 'EISMINTRoundIceSheetStaticHO',
+@@ -212,10 +212,10 @@
+ 	2081 : 'GiaBenchmarksAB2dD1',
+ 	2082 : 'GiaBenchmarksAB2dD2',
+ 	2083 : 'GiaBenchmarksAB2dD3',
+-	3001 : 'SquareShelfConstrainedDiagSSA2dAdolc',
+-	3002 : 'SquareShelfConstrainedDiagSSA3dAdolc',
+-	3003 : 'SquareShelfConstrainedDiagHOAdolc',
+-	3004 : 'SquareShelfConstrainedDiagS3dAdolc',
++	3001 : 'SquareShelfConstrainedStressSSA2dAdolc',
++	3002 : 'SquareShelfConstrainedStressSSA3dAdolc',
++	3003 : 'SquareShelfConstrainedStressHOAdolc',
++	3004 : 'SquareShelfConstrainedStressS3dAdolc',
+ 	3005 : 'SquareShelfConstrainedMasstransp2dAdolc',
+ 	3006 : 'SquareShelfConstrainedMasstransp2dDGAdolc',
+ 	3007 : 'SquareShelfConstrainedMasstransp3dAdolc',
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 15771)
+@@ -14,15 +14,15 @@
+ md.extrude(5,1.)
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,2e-09,2e-05,1e-09,2e-09]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test502.py	(revision 15771)
+@@ -13,15 +13,15 @@
+ md.extrude(3,0.9)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-08]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test207.py	(revision 15771)
+@@ -14,7 +14,7 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.transient.isdiagnostic=False
++md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 15771)
+@@ -18,17 +18,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
+-	(md.results.DiagnosticSolution.MaterialsRheologyB),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	md.results.StressbalanceSolution.J,...
++	(md.results.StressbalanceSolution.MaterialsRheologyB),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 15771)
+@@ -22,17 +22,17 @@
+ md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyZbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+-   (md.results.DiagnosticSolution.Gradient1),...
+-   (md.results.DiagnosticSolution.J),...
+-   (md.results.DiagnosticSolution.MaterialsRheologyZbar),...
+-   (md.results.DiagnosticSolution.Pressure),...
+-   (md.results.DiagnosticSolution.Vel),...
+-   (md.results.DiagnosticSolution.Vx),...
+-   (md.results.DiagnosticSolution.Vy)
++   (md.results.StressbalanceSolution.Gradient1),...
++   (md.results.StressbalanceSolution.J),...
++   (md.results.StressbalanceSolution.MaterialsRheologyZbar),...
++   (md.results.StressbalanceSolution.Pressure),...
++   (md.results.StressbalanceSolution.Vel),...
++   (md.results.StressbalanceSolution.Vx),...
++   (md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test434.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test434.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test434.m	(revision 15771)
+@@ -4,15 +4,15 @@
+ md=extrude(md,4,1.);
+ md=setflowequation(md,'L1L2','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+ field_tolerances={1e-06,1e-06,2e-07,1e-06,1e-07};
+ field_values={...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy),...
+-	(md.results.DiagnosticSolution.Vz),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test515.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test515.m	(revision 15771)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'HO','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.isdiagnostic=0;
++md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+Index: ../trunk-jpl/test/NightlyRun/test417.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test417.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test417.m	(revision 15771)
+@@ -7,9 +7,9 @@
+ md.geometry.thickness(:)=1; %make it easy
+ 
+ %constrain all velocities to 1 m/yr, in the y-direction
+-md.diagnostic.spcvx(:)=0;
+-md.diagnostic.spcvy(:)=1;
+-md.diagnostic.spcvz(:)=0;
++md.stressbalance.spcvx(:)=0;
++md.stressbalance.spcvy(:)=1;
++md.stressbalance.spcvz(:)=0;
+ 
+ %Dakota options
+ md.qmu.variables.drag_coefficient=normal_uncertain('scaled_FrictionCoefficient',1,0.01);
+@@ -47,9 +47,9 @@
+ md.qmu.partition=md.qmu.partition-1;
+ md.qmu.isdakota=1;
+ 
+-md.diagnostic.reltol=10^-5; %tighten for qmu analyses
++md.stressbalance.reltol=10^-5; %tighten for qmu analyses
+ 
+-md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
++md=solve(md,StressbalanceSolutionEnum(),'overwrite','y');
+ 
+ %Fields and tolerances to track changes
+ md.qmu.results=md.results.dakota;
+Index: ../trunk-jpl/test/NightlyRun/test287.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test287.py	(revision 15771)
+@@ -15,15 +15,15 @@
+ md=setflowequation(md,'HO','all');
+ md.flowequation.fe_HO=3;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-13];
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	];
+Index: ../trunk-jpl/test/NightlyRun/test319.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.m	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test319.m	(revision 15771)
+@@ -17,17 +17,17 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum());
++md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.DiagnosticSolution.Gradient1),...
+-	(md.results.DiagnosticSolution.J),...
+-	(md.results.DiagnosticSolution.FrictionCoefficient),...
+-	(md.results.DiagnosticSolution.Pressure),...
+-	(md.results.DiagnosticSolution.Vel),...
+-	(md.results.DiagnosticSolution.Vx),...
+-	(md.results.DiagnosticSolution.Vy)
++	(md.results.StressbalanceSolution.Gradient1),...
++	(md.results.StressbalanceSolution.J),...
++	(md.results.StressbalanceSolution.FrictionCoefficient),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy)
+ };
+Index: ../trunk-jpl/test/NightlyRun/test1101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test1101.py	(revision 15771)
+@@ -34,13 +34,13 @@
+ 	md=setflowequation(md,'HO','all')
+ 
+ 	#Create dirichlet on the bed only
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	pos=numpy.nonzero(md.mesh.vertexonbed)
+-	md.diagnostic.spcvx[pos]=0.
+-	md.diagnostic.spcvy[pos]=0.
++	md.stressbalance.spcvx[pos]=0.
++	md.stressbalance.spcvy[pos]=0.
+ 
+ 	#Create MPCs to have periodic boundary conditions
+ 	posx=numpy.nonzero(md.mesh.x==0.)[0]
+@@ -49,17 +49,17 @@
+ 	posy=numpy.nonzero(logical_and_n(md.mesh.y==0.,md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]    #Don't take the same nodes two times
+ 	posy2=numpy.nonzero(logical_and_n(md.mesh.y==numpy.max(md.mesh.y),md.mesh.x!=0.,md.mesh.x!=numpy.max(md.mesh.x)))[0]
+ 
+-	md.diagnostic.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
++	md.stressbalance.vertex_pairing=numpy.vstack((numpy.hstack((posx.reshape(-1,1)+1,posx2.reshape(-1,1)+1)),numpy.hstack((posy.reshape(-1,1)+1,posy2.reshape(-1,1)+1))))
+ 
+-	#Compute the diagnostic
++	#Compute the stressbalance
+ 	md.cluster=generic('name',oshostname(),'np',8)
+-	md=solve(md,DiagnosticSolutionEnum())
++	md=solve(md,StressbalanceSolutionEnum())
+ 
+ 	#Plot the results and save them
+-	vx=md.results.DiagnosticSolution.Vx
+-	vy=md.results.DiagnosticSolution.Vy
+-	vz=md.results.DiagnosticSolution.Vz
+-	results.append(md.results.DiagnosticSolution)
++	vx=md.results.StressbalanceSolution.Vx
++	vy=md.results.StressbalanceSolution.Vy
++	vz=md.results.StressbalanceSolution.Vz
++	results.append(md.results.StressbalanceSolution)
+ 	minvx.append(numpy.min(vx[-md.mesh.numberofvertices2d:]))
+ 	maxvx.append(numpy.max(vx[-md.mesh.numberofvertices2d:]))
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.py	(revision 15770)
++++ ../trunk-jpl/test/NightlyRun/test3004.py	(revision 15771)
+@@ -15,15 +15,15 @@
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmsolver()
+ md.autodiff.isautodiff=True
+-md=solve(md,DiagnosticSolutionEnum())
++md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
+ field_values=[\
+-	md.results.DiagnosticSolution.Vx,\
+-	md.results.DiagnosticSolution.Vy,\
+-	md.results.DiagnosticSolution.Vz,\
+-	md.results.DiagnosticSolution.Vel,\
+-	md.results.DiagnosticSolution.Pressure,\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15770)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15771)
+@@ -1576,23 +1576,23 @@
+ 	AM_CONDITIONAL([HYDROLOGY], [test x$HAVE_HYDROLOGY = xyes])
+ 	AC_MSG_RESULT($HAVE_HYDROLOGY)
+ 	dnl }}}
+-	dnl with-diagnostic{{{
+-	AC_ARG_WITH([diagnostic],
+-		AS_HELP_STRING([--with-diagnostic = YES], [compile with diagnostic capabilities (default is yes)]),
+-		[DIAGNOSTIC=$withval],[DIAGNOSTIC=yes]) 
+-	AC_MSG_CHECKING(for diagnostic capability compilation)
++	dnl with-stressbalance{{{
++	AC_ARG_WITH([stressbalance],
++		AS_HELP_STRING([--with-stressbalance = YES], [compile with stressbalance capabilities (default is yes)]),
++		[STRESSBALANCE=$withval],[STRESSBALANCE=yes]) 
++	AC_MSG_CHECKING(for stressbalance capability compilation)
+ 
+-	if test "x$DIAGNOSTIC" = "xyes"; then
++	if test "x$STRESSBALANCE" = "xyes"; then
+ 
+ 		dnl defaults
+-		HAVE_DIAGNOSTIC=yes
++		HAVE_STRESSBALANCE=yes
+ 
+-		AC_DEFINE([_HAVE_DIAGNOSTIC_],[1],[with diagnostic capability])
++		AC_DEFINE([_HAVE_STRESSBALANCE_],[1],[with stressbalance capability])
+ 	else
+-		HAVE_DIAGNOSTIC=no
++		HAVE_STRESSBALANCE=no
+ 	fi
+-	AM_CONDITIONAL([DIAGNOSTIC], [test x$HAVE_DIAGNOSTIC = xyes])
+-	AC_MSG_RESULT($HAVE_DIAGNOSTIC)
++	AM_CONDITIONAL([STRESSBALANCE], [test x$HAVE_STRESSBALANCE = xyes])
++	AC_MSG_RESULT($HAVE_STRESSBALANCE)
+ 	dnl }}}
+ 	dnl with-balanced{{{
+ 	AC_ARG_WITH([balanced],
+Index: ../trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp	(revision 15771)
+@@ -1,46 +0,0 @@
+-/*!\file:  adjointdiagnostic_core.cpp
+- * \brief compute inverse method adjoint state
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void adjointdiagnostic_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool isFS;
+-	bool save_results;
+-	bool conserve_loads   = true;
+-
+-	/*retrieve parameters:*/
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-
+-	/*Compute velocities*/
+-	if(VerboseSolution()) _printf0_("   computing velocities\n");
+-	femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
+-	solutionsequence_nonlinear(femmodel,conserve_loads); 
+-
+-	/*Call SurfaceAreax, because some it might be needed by PVector*/
+-	SurfaceAreax(NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-
+-	/*Compute adjoint*/
+-	if(VerboseSolution()) _printf0_("   computing adjoint\n");
+-	femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum,AdjointHorizAnalysisEnum);
+-	solutionsequence_adjoint_linear(femmodel);
+-
+-	/*Save results*/
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointxEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointyEnum);
+-		if (isFS){
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointzEnum);
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointpEnum);
+-		}
+-	}
+-}
+Index: ../trunk-jpl/src/c/analyses/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15771)
+@@ -1,100 +0,0 @@
+-/*!\file: diagnostic_core.cpp
+- * \brief: core of the diagnostic solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void diagnostic_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool  dakota_analysis;
+-	int   dim;
+-	bool  isSIA,isSSA,isL1L2,isHO,isFS;
+-	bool  conserve_loads    = true;
+-	bool  save_results;
+-	int   newton;
+-	int   solution_type;
+-	int   numoutputs        = 0;
+-	int  *requested_outputs = NULL;
+-
+-	/* recover parameters:*/
+-	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+-	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
+-	femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
+-	femmodel->parameters->FindParam(&isL1L2,FlowequationIsL1L2Enum);
+-	femmodel->parameters->FindParam(&isHO,FlowequationIsHOEnum);
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	femmodel->parameters->FindParam(&newton,DiagnosticIsnewtonEnum);
+-	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&numoutputs,DiagnosticNumRequestedOutputsEnum);
+-	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,DiagnosticRequestedOutputsEnum);
+-
+-	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+-	if(dakota_analysis && solution_type==DiagnosticSolutionEnum){
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
+-	}
+-
+-	/*Compute slopes: */
+-	if(isSIA) surfaceslope_core(femmodel);
+-	if(isFS){
+-		bedslope_core(femmodel);
+-		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
+-		ResetCoordinateSystemx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	}
+-
+-	if(isSIA){
+-		if(VerboseSolution()) _printf0_("   computing SIA velocities\n");
+-
+-		/*Take the last velocity into account so that the velocity on the SSA domain is not zero*/
+-		if(isSSA || isL1L2 || isHO ) ResetBoundaryConditions(femmodel,DiagnosticSIAAnalysisEnum);
+-		femmodel->SetCurrentConfiguration(DiagnosticSIAAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-		if(isSSA || isL1L2 || isHO) ResetBoundaryConditions(femmodel,DiagnosticHorizAnalysisEnum);
+-	}
+-
+-	if ((isSSA || isHO || isL1L2) ^ isFS){ // ^ = xor
+-		if(VerboseSolution()) _printf0_("   computing velocities\n");
+-
+-		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
+-		if(newton>0)
+-		 solutionsequence_newton(femmodel);
+-		else
+-		 solutionsequence_nonlinear(femmodel,conserve_loads); 
+-	}
+-
+-	if ((isSSA || isL1L2 || isHO) && isFS){
+-		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-FS\n");
+-		solutionsequence_FScoupling_nonlinear(femmodel,conserve_loads);
+-	}
+-
+-	if (dim==3 & (isSIA || isSSA || isL1L2 || isHO)){
+-		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
+-		femmodel->SetCurrentConfiguration(DiagnosticVertAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-	}
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum);
+-		if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
+-		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+-	}
+-
+-	if(solution_type==DiagnosticSolutionEnum)femmodel->RequestedDependentsx();
+-
+-	/*Free ressources:*/
+-	xDelete<int>(requested_outputs);
+-}
+Index: ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 15771)
+@@ -22,11 +22,11 @@
+ 
+ 	switch(solutiontype){
+ 
+-		case DiagnosticSolutionEnum:
+-			#ifdef _HAVE_DIAGNOSTIC_
+-			solutioncore=&diagnostic_core;
++		case StressbalanceSolutionEnum:
++			#ifdef _HAVE_STRESSBALANCE_
++			solutioncore=&stressbalance_core;
+ 			#else
+-			_error_("ISSM was not compiled with diagnostic capabilities. Exiting");
++			_error_("ISSM was not compiled with stressbalance capabilities. Exiting");
+ 			#endif
+ 			break;
+ 		case SteadystateSolutionEnum:
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 15771)
+@@ -0,0 +1,100 @@
++/*!\file: stressbalance_core.cpp
++ * \brief: core of the stressbalance solution 
++ */ 
++
++#include "./analyses.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void stressbalance_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool  dakota_analysis;
++	int   dim;
++	bool  isSIA,isSSA,isL1L2,isHO,isFS;
++	bool  conserve_loads    = true;
++	bool  save_results;
++	int   newton;
++	int   solution_type;
++	int   numoutputs        = 0;
++	int  *requested_outputs = NULL;
++
++	/* recover parameters:*/
++	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
++	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
++	femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
++	femmodel->parameters->FindParam(&isL1L2,FlowequationIsL1L2Enum);
++	femmodel->parameters->FindParam(&isHO,FlowequationIsHOEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&newton,StressbalanceIsnewtonEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&numoutputs,StressbalanceNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,StressbalanceRequestedOutputsEnum);
++
++	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
++	if(dakota_analysis && solution_type==StressbalanceSolutionEnum){
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
++	}
++
++	/*Compute slopes: */
++	if(isSIA) surfaceslope_core(femmodel);
++	if(isFS){
++		bedslope_core(femmodel);
++		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
++		ResetCoordinateSystemx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	}
++
++	if(isSIA){
++		if(VerboseSolution()) _printf0_("   computing SIA velocities\n");
++
++		/*Take the last velocity into account so that the velocity on the SSA domain is not zero*/
++		if(isSSA || isL1L2 || isHO ) ResetBoundaryConditions(femmodel,StressbalanceSIAAnalysisEnum);
++		femmodel->SetCurrentConfiguration(StressbalanceSIAAnalysisEnum);
++		solutionsequence_linear(femmodel);
++		if(isSSA || isL1L2 || isHO) ResetBoundaryConditions(femmodel,StressbalanceAnalysisEnum);
++	}
++
++	if ((isSSA || isHO || isL1L2) ^ isFS){ // ^ = xor
++		if(VerboseSolution()) _printf0_("   computing velocities\n");
++
++		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
++		if(newton>0)
++		 solutionsequence_newton(femmodel);
++		else
++		 solutionsequence_nonlinear(femmodel,conserve_loads); 
++	}
++
++	if ((isSSA || isL1L2 || isHO) && isFS){
++		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-FS\n");
++		solutionsequence_FScoupling_nonlinear(femmodel,conserve_loads);
++	}
++
++	if (dim==3 & (isSIA || isSSA || isL1L2 || isHO)){
++		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
++		femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum);
++		solutionsequence_linear(femmodel);
++	}
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
++		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
++		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
++		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum);
++		if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
++		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
++	}
++
++	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
++
++	/*Free ressources:*/
++	xDelete<int>(requested_outputs);
++}
+Index: ../trunk-jpl/src/c/analyses/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15771)
+@@ -63,7 +63,7 @@
+ 		#endif
+ 
+ 		if(VerboseSolution()) _printf0_("   computing new velocity\n");
+-		diagnostic_core(femmodel);
++		stressbalance_core(femmodel);
+ 		GetSolutionFromInputsx(&ug,femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+ 
+ 		if(step>1){
+Index: ../trunk-jpl/src/c/analyses/AdjointCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointCorePointerFromSolutionEnum.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/AdjointCorePointerFromSolutionEnum.cpp	(revision 15771)
+@@ -22,11 +22,11 @@
+ 
+ 	switch(solutiontype){
+ 
+-		case DiagnosticSolutionEnum:
+-			adjointcore=&adjointdiagnostic_core;
++		case StressbalanceSolutionEnum:
++			adjointcore=&adjointstressbalance_core;
+ 			break;
+ 		case SteadystateSolutionEnum:
+-			adjointcore=&adjointdiagnostic_core;
++			adjointcore=&adjointstressbalance_core;
+ 			break;
+ 		case BalancethicknessSolutionEnum:
+ 			adjointcore=&adjointbalancethickness_core;
+Index: ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 15771)
+@@ -0,0 +1,46 @@
++/*!\file:  adjointstressbalance_core.cpp
++ * \brief compute inverse method adjoint state
++ */ 
++
++#include "./analyses.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void adjointstressbalance_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool isFS;
++	bool save_results;
++	bool conserve_loads   = true;
++
++	/*retrieve parameters:*/
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++
++	/*Compute velocities*/
++	if(VerboseSolution()) _printf0_("   computing velocities\n");
++	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
++	solutionsequence_nonlinear(femmodel,conserve_loads); 
++
++	/*Call SurfaceAreax, because some it might be needed by PVector*/
++	SurfaceAreax(NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++
++	/*Compute adjoint*/
++	if(VerboseSolution()) _printf0_("   computing adjoint\n");
++	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum,AdjointHorizAnalysisEnum);
++	solutionsequence_adjoint_linear(femmodel);
++
++	/*Save results*/
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointxEnum);
++		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointyEnum);
++		if (isFS){
++			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointzEnum);
++			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointpEnum);
++		}
++	}
++}
+Index: ../trunk-jpl/src/c/analyses/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 15771)
+@@ -13,7 +13,7 @@
+  * to the other CPUS, hence ISSM is running in parallel, and Dakota serially on CPU0. 
+  *
+  * Now, how does CPU 0 drive all other CPUS to carry out sensitivity analysese? By synchronizing its call to 
+- * our ISSM cores (diagnostic_core, thermal_core, transient_core, etc ...) on CPU 0 with all other CPUS. 
++ * our ISSM cores (stressbalance_core, thermal_core, transient_core, etc ...) on CPU 0 with all other CPUS. 
+  * This explains the structure of qmu.cpp, where cpu 0 runs Dakota, the Dakota pluggin fires up DakotaSpawnCore.cpp, 
+  * while the other CPUS are waiting for a broadcast from CPU0, once they get it, they also fire up 
+  * DakotaSpawnCore. In the end, DakotaSpawnCore is fired up on all CPUS, with CPU0 having Dakota inputs, that it will 
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15771)
+@@ -24,12 +24,12 @@
+ 	/*Analyses lists*/
+ 	switch(solutiontype){
+ 
+-		case DiagnosticSolutionEnum:
++		case StressbalanceSolutionEnum:
+ 			numanalyses=5;
+ 			analyses=xNew<int>(numanalyses);
+-			analyses[0]=DiagnosticHorizAnalysisEnum;
+-			analyses[1]=DiagnosticVertAnalysisEnum;
+-			analyses[2]=DiagnosticSIAAnalysisEnum;
++			analyses[0]=StressbalanceAnalysisEnum;
++			analyses[1]=StressbalanceVerticalAnalysisEnum;
++			analyses[2]=StressbalanceSIAAnalysisEnum;
+ 			analyses[3]=SurfaceSlopeAnalysisEnum;
+ 			analyses[4]=BedSlopeAnalysisEnum;
+ 			break;
+@@ -37,9 +37,9 @@
+ 		case SteadystateSolutionEnum:
+ 			numanalyses=8;
+ 			analyses=xNew<int>(numanalyses);
+-			analyses[0]=DiagnosticHorizAnalysisEnum;
+-			analyses[1]=DiagnosticVertAnalysisEnum;
+-			analyses[2]=DiagnosticSIAAnalysisEnum;
++			analyses[0]=StressbalanceAnalysisEnum;
++			analyses[1]=StressbalanceVerticalAnalysisEnum;
++			analyses[2]=StressbalanceSIAAnalysisEnum;
+ 			analyses[3]=SurfaceSlopeAnalysisEnum;
+ 			analyses[4]=BedSlopeAnalysisEnum;
+ 			analyses[5]=EnthalpyAnalysisEnum;
+@@ -109,9 +109,9 @@
+ 		case TransientSolutionEnum:
+ 			numanalyses=10-1;
+ 			analyses=xNew<int>(numanalyses);
+-			analyses[0]=DiagnosticHorizAnalysisEnum;
+-			analyses[1]=DiagnosticVertAnalysisEnum;
+-			analyses[2]=DiagnosticSIAAnalysisEnum;
++			analyses[0]=StressbalanceAnalysisEnum;
++			analyses[1]=StressbalanceVerticalAnalysisEnum;
++			analyses[2]=StressbalanceSIAAnalysisEnum;
+ 			analyses[3]=SurfaceSlopeAnalysisEnum;
+ 			analyses[4]=BedSlopeAnalysisEnum;
+ 			analyses[5]=ThermalAnalysisEnum;
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15771)
+@@ -20,7 +20,7 @@
+ 
+ 	/*parameters: */
+ 	IssmDouble starttime,finaltime,dt,yts;
+-	bool   isdiagnostic,ismasstransport,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
++	bool   isstressbalance,ismasstransport,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
+ 	bool   save_results,dakota_analysis;
+ 	bool   time_adapt=false;
+ 	int    output_frequency;
+@@ -41,7 +41,7 @@
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
+ 	femmodel->parameters->FindParam(&time_adapt,TimesteppingTimeAdaptEnum);
+-	femmodel->parameters->FindParam(&isdiagnostic,TransientIsdiagnosticEnum);
++	femmodel->parameters->FindParam(&isstressbalance,TransientIsstressbalanceEnum);
+ 	femmodel->parameters->FindParam(&ismasstransport,TransientIsmasstransportEnum);
+ 	femmodel->parameters->FindParam(&isthermal,TransientIsthermalEnum);
+ 	femmodel->parameters->FindParam(&isgia,TransientIsgiaEnum);
+@@ -116,12 +116,12 @@
+ 			#endif
+ 		}
+ 
+-		if(isdiagnostic){
++		if(isstressbalance){
+ 			if(VerboseSolution()) _printf0_("   computing new velocity\n");
+-			#ifdef _HAVE_DIAGNOSTIC_
+-			diagnostic_core(femmodel);
++			#ifdef _HAVE_STRESSBALANCE_
++			stressbalance_core(femmodel);
+ 			#else
+-			_error_("ISSM was not compiled with diagnostic capabilities. Exiting");
++			_error_("ISSM was not compiled with stressbalance capabilities. Exiting");
+ 			#endif
+ 		}
+ 
+Index: ../trunk-jpl/src/c/analyses/objectivefunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/objectivefunction.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/objectivefunction.cpp	(revision 15771)
+@@ -36,8 +36,8 @@
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 
+ 	/*set analysis type to compute velocity: */
+-	if (solution_type==SteadystateSolutionEnum || solution_type==DiagnosticSolutionEnum){
+-		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
++	if (solution_type==SteadystateSolutionEnum || solution_type==StressbalanceSolutionEnum){
++		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+ 	}
+ 	else if (solution_type==BalancethicknessSolutionEnum){
+ 		femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
+@@ -52,11 +52,11 @@
+ 	/*update parameter according to scalar: */ //false means: do not save control
+ 	InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,false);
+ 
+-	/*Run diagnostic with updated inputs: */
++	/*Run stressbalance with updated inputs: */
+ 	if (solution_type==SteadystateSolutionEnum){
+-		diagnostic_core(femmodel);	//We need a 3D velocity!! (vz is required for the next thermal run)
++		stressbalance_core(femmodel);	//We need a 3D velocity!! (vz is required for the next thermal run)
+ 	}
+-	else if (solution_type==DiagnosticSolutionEnum){
++	else if (solution_type==StressbalanceSolutionEnum){
+ 		solutionsequence_nonlinear(femmodel,conserve_loads); 
+ 	}
+ 	else if (solution_type==BalancethicknessSolutionEnum){
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 15771)
+@@ -16,10 +16,10 @@
+ #include "../shared/Numerics/types.h"
+ 
+ /*cores: */
+-void adjointdiagnostic_core(FemModel* femmodel);
++void adjointstressbalance_core(FemModel* femmodel);
+ void adjointbalancethickness_core(FemModel* femmodel);
+ void gradient_core(FemModel* femmodel,int n=0,bool orthogonalize=false);
+-void diagnostic_core(FemModel* femmodel);
++void stressbalance_core(FemModel* femmodel);
+ void hydrology_core(FemModel* femmodel);
+ void thermal_core(FemModel* femmodel);
+ void enthalpy_core(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 15771)
+@@ -111,7 +111,7 @@
+ 	femmodel->parameters->SetParam(true,SaveResultsEnum);
+ 	solutioncore(femmodel);
+ 
+-	/*some results not computed by steadystate_core or diagnostic_core: */
++	/*some results not computed by steadystate_core or stressbalance_core: */
+ 	if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
+ 		for(i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15770)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15771)
+@@ -40,25 +40,25 @@
+ 	ConstantsReferencetemperatureEnum,
+ 	ConstantsYtsEnum,
+ 	DependentObjectEnum,
+-	DiagnosticAbstolEnum,
+-	DiagnosticIcefrontEnum,
+-	DiagnosticIsnewtonEnum,
+-	DiagnosticMaxiterEnum,
+-	DiagnosticNumRequestedOutputsEnum,
+-	DiagnosticPenaltyFactorEnum,
+-	DiagnosticReferentialEnum,
+-	DiagnosticReltolEnum,
+-	DiagnosticRequestedOutputsEnum,
+-	DiagnosticRestolEnum,
+-	DiagnosticRiftPenaltyLockEnum,
+-	DiagnosticRiftPenaltyThresholdEnum,
+-	DiagnosticShelfDampeningEnum,
+-	DiagnosticSpcvxEnum,
+-	DiagnosticSpcvyEnum,
+-	DiagnosticSpcvzEnum,
+-	DiagnosticFSreconditioningEnum,
+-	DiagnosticVertexPairingEnum,
+-	DiagnosticViscosityOvershootEnum,
++	StressbalanceAbstolEnum,
++	StressbalanceIcefrontEnum,
++	StressbalanceIsnewtonEnum,
++	StressbalanceMaxiterEnum,
++	StressbalanceNumRequestedOutputsEnum,
++	StressbalancePenaltyFactorEnum,
++	StressbalanceReferentialEnum,
++	StressbalanceReltolEnum,
++	StressbalanceRequestedOutputsEnum,
++	StressbalanceRestolEnum,
++	StressbalanceRiftPenaltyLockEnum,
++	StressbalanceRiftPenaltyThresholdEnum,
++	StressbalanceShelfDampeningEnum,
++	StressbalanceSpcvxEnum,
++	StressbalanceSpcvyEnum,
++	StressbalanceSpcvzEnum,
++	StressbalanceFSreconditioningEnum,
++	StressbalanceVertexPairingEnum,
++	StressbalanceViscosityOvershootEnum,
+ 	LoadingforceXEnum,
+ 	LoadingforceYEnum,
+ 	LoadingforceZEnum,
+@@ -253,7 +253,7 @@
+ 	TimesteppingCflCoefficientEnum,
+ 	TimesteppingTimeAdaptEnum,
+ 	TimesteppingTimeStepEnum,
+-	TransientIsdiagnosticEnum,
++	TransientIsstressbalanceEnum,
+ 	TransientIsgroundinglineEnum,
+ 	TransientIsmasstransportEnum,
+ 	TransientIsthermalEnum,
+@@ -279,10 +279,10 @@
+ 	BedSlopeSolutionEnum,
+ 	BedSlopeXAnalysisEnum,
+ 	BedSlopeYAnalysisEnum,
+-	DiagnosticHorizAnalysisEnum,
+-	DiagnosticSIAAnalysisEnum,
+-	DiagnosticSolutionEnum,
+-	DiagnosticVertAnalysisEnum,
++	StressbalanceAnalysisEnum,
++	StressbalanceSIAAnalysisEnum,
++	StressbalanceSolutionEnum,
++	StressbalanceVerticalAnalysisEnum,
+ 	EnthalpyAnalysisEnum,
+ 	EnthalpySolutionEnum,
+ 	FlaimAnalysisEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15771)
+@@ -48,25 +48,25 @@
+ 		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
+ 		case ConstantsYtsEnum : return "ConstantsYts";
+ 		case DependentObjectEnum : return "DependentObject";
+-		case DiagnosticAbstolEnum : return "DiagnosticAbstol";
+-		case DiagnosticIcefrontEnum : return "DiagnosticIcefront";
+-		case DiagnosticIsnewtonEnum : return "DiagnosticIsnewton";
+-		case DiagnosticMaxiterEnum : return "DiagnosticMaxiter";
+-		case DiagnosticNumRequestedOutputsEnum : return "DiagnosticNumRequestedOutputs";
+-		case DiagnosticPenaltyFactorEnum : return "DiagnosticPenaltyFactor";
+-		case DiagnosticReferentialEnum : return "DiagnosticReferential";
+-		case DiagnosticReltolEnum : return "DiagnosticReltol";
+-		case DiagnosticRequestedOutputsEnum : return "DiagnosticRequestedOutputs";
+-		case DiagnosticRestolEnum : return "DiagnosticRestol";
+-		case DiagnosticRiftPenaltyLockEnum : return "DiagnosticRiftPenaltyLock";
+-		case DiagnosticRiftPenaltyThresholdEnum : return "DiagnosticRiftPenaltyThreshold";
+-		case DiagnosticShelfDampeningEnum : return "DiagnosticShelfDampening";
+-		case DiagnosticSpcvxEnum : return "DiagnosticSpcvx";
+-		case DiagnosticSpcvyEnum : return "DiagnosticSpcvy";
+-		case DiagnosticSpcvzEnum : return "DiagnosticSpcvz";
+-		case DiagnosticFSreconditioningEnum : return "DiagnosticFSreconditioning";
+-		case DiagnosticVertexPairingEnum : return "DiagnosticVertexPairing";
+-		case DiagnosticViscosityOvershootEnum : return "DiagnosticViscosityOvershoot";
++		case StressbalanceAbstolEnum : return "StressbalanceAbstol";
++		case StressbalanceIcefrontEnum : return "StressbalanceIcefront";
++		case StressbalanceIsnewtonEnum : return "StressbalanceIsnewton";
++		case StressbalanceMaxiterEnum : return "StressbalanceMaxiter";
++		case StressbalanceNumRequestedOutputsEnum : return "StressbalanceNumRequestedOutputs";
++		case StressbalancePenaltyFactorEnum : return "StressbalancePenaltyFactor";
++		case StressbalanceReferentialEnum : return "StressbalanceReferential";
++		case StressbalanceReltolEnum : return "StressbalanceReltol";
++		case StressbalanceRequestedOutputsEnum : return "StressbalanceRequestedOutputs";
++		case StressbalanceRestolEnum : return "StressbalanceRestol";
++		case StressbalanceRiftPenaltyLockEnum : return "StressbalanceRiftPenaltyLock";
++		case StressbalanceRiftPenaltyThresholdEnum : return "StressbalanceRiftPenaltyThreshold";
++		case StressbalanceShelfDampeningEnum : return "StressbalanceShelfDampening";
++		case StressbalanceSpcvxEnum : return "StressbalanceSpcvx";
++		case StressbalanceSpcvyEnum : return "StressbalanceSpcvy";
++		case StressbalanceSpcvzEnum : return "StressbalanceSpcvz";
++		case StressbalanceFSreconditioningEnum : return "StressbalanceFSreconditioning";
++		case StressbalanceVertexPairingEnum : return "StressbalanceVertexPairing";
++		case StressbalanceViscosityOvershootEnum : return "StressbalanceViscosityOvershoot";
+ 		case LoadingforceXEnum : return "LoadingforceX";
+ 		case LoadingforceYEnum : return "LoadingforceY";
+ 		case LoadingforceZEnum : return "LoadingforceZ";
+@@ -261,7 +261,7 @@
+ 		case TimesteppingCflCoefficientEnum : return "TimesteppingCflCoefficient";
+ 		case TimesteppingTimeAdaptEnum : return "TimesteppingTimeAdapt";
+ 		case TimesteppingTimeStepEnum : return "TimesteppingTimeStep";
+-		case TransientIsdiagnosticEnum : return "TransientIsdiagnostic";
++		case TransientIsstressbalanceEnum : return "TransientIsstressbalance";
+ 		case TransientIsgroundinglineEnum : return "TransientIsgroundingline";
+ 		case TransientIsmasstransportEnum : return "TransientIsmasstransport";
+ 		case TransientIsthermalEnum : return "TransientIsthermal";
+@@ -285,10 +285,10 @@
+ 		case BedSlopeSolutionEnum : return "BedSlopeSolution";
+ 		case BedSlopeXAnalysisEnum : return "BedSlopeXAnalysis";
+ 		case BedSlopeYAnalysisEnum : return "BedSlopeYAnalysis";
+-		case DiagnosticHorizAnalysisEnum : return "DiagnosticHorizAnalysis";
+-		case DiagnosticSIAAnalysisEnum : return "DiagnosticSIAAnalysis";
+-		case DiagnosticSolutionEnum : return "DiagnosticSolution";
+-		case DiagnosticVertAnalysisEnum : return "DiagnosticVertAnalysis";
++		case StressbalanceAnalysisEnum : return "StressbalanceAnalysis";
++		case StressbalanceSIAAnalysisEnum : return "StressbalanceSIAAnalysis";
++		case StressbalanceSolutionEnum : return "StressbalanceSolution";
++		case StressbalanceVerticalAnalysisEnum : return "StressbalanceVerticalAnalysis";
+ 		case EnthalpyAnalysisEnum : return "EnthalpyAnalysis";
+ 		case EnthalpySolutionEnum : return "EnthalpySolution";
+ 		case FlaimAnalysisEnum : return "FlaimAnalysis";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15771)
+@@ -48,25 +48,25 @@
+ 	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+ 	      else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
+ 	      else if (strcmp(name,"DependentObject")==0) return DependentObjectEnum;
+-	      else if (strcmp(name,"DiagnosticAbstol")==0) return DiagnosticAbstolEnum;
+-	      else if (strcmp(name,"DiagnosticIcefront")==0) return DiagnosticIcefrontEnum;
+-	      else if (strcmp(name,"DiagnosticIsnewton")==0) return DiagnosticIsnewtonEnum;
+-	      else if (strcmp(name,"DiagnosticMaxiter")==0) return DiagnosticMaxiterEnum;
+-	      else if (strcmp(name,"DiagnosticNumRequestedOutputs")==0) return DiagnosticNumRequestedOutputsEnum;
+-	      else if (strcmp(name,"DiagnosticPenaltyFactor")==0) return DiagnosticPenaltyFactorEnum;
+-	      else if (strcmp(name,"DiagnosticReferential")==0) return DiagnosticReferentialEnum;
+-	      else if (strcmp(name,"DiagnosticReltol")==0) return DiagnosticReltolEnum;
+-	      else if (strcmp(name,"DiagnosticRequestedOutputs")==0) return DiagnosticRequestedOutputsEnum;
+-	      else if (strcmp(name,"DiagnosticRestol")==0) return DiagnosticRestolEnum;
+-	      else if (strcmp(name,"DiagnosticRiftPenaltyLock")==0) return DiagnosticRiftPenaltyLockEnum;
+-	      else if (strcmp(name,"DiagnosticRiftPenaltyThreshold")==0) return DiagnosticRiftPenaltyThresholdEnum;
+-	      else if (strcmp(name,"DiagnosticShelfDampening")==0) return DiagnosticShelfDampeningEnum;
+-	      else if (strcmp(name,"DiagnosticSpcvx")==0) return DiagnosticSpcvxEnum;
+-	      else if (strcmp(name,"DiagnosticSpcvy")==0) return DiagnosticSpcvyEnum;
+-	      else if (strcmp(name,"DiagnosticSpcvz")==0) return DiagnosticSpcvzEnum;
+-	      else if (strcmp(name,"DiagnosticFSreconditioning")==0) return DiagnosticFSreconditioningEnum;
+-	      else if (strcmp(name,"DiagnosticVertexPairing")==0) return DiagnosticVertexPairingEnum;
+-	      else if (strcmp(name,"DiagnosticViscosityOvershoot")==0) return DiagnosticViscosityOvershootEnum;
++	      else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;
++	      else if (strcmp(name,"StressbalanceIcefront")==0) return StressbalanceIcefrontEnum;
++	      else if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum;
++	      else if (strcmp(name,"StressbalanceMaxiter")==0) return StressbalanceMaxiterEnum;
++	      else if (strcmp(name,"StressbalanceNumRequestedOutputs")==0) return StressbalanceNumRequestedOutputsEnum;
++	      else if (strcmp(name,"StressbalancePenaltyFactor")==0) return StressbalancePenaltyFactorEnum;
++	      else if (strcmp(name,"StressbalanceReferential")==0) return StressbalanceReferentialEnum;
++	      else if (strcmp(name,"StressbalanceReltol")==0) return StressbalanceReltolEnum;
++	      else if (strcmp(name,"StressbalanceRequestedOutputs")==0) return StressbalanceRequestedOutputsEnum;
++	      else if (strcmp(name,"StressbalanceRestol")==0) return StressbalanceRestolEnum;
++	      else if (strcmp(name,"StressbalanceRiftPenaltyLock")==0) return StressbalanceRiftPenaltyLockEnum;
++	      else if (strcmp(name,"StressbalanceRiftPenaltyThreshold")==0) return StressbalanceRiftPenaltyThresholdEnum;
++	      else if (strcmp(name,"StressbalanceShelfDampening")==0) return StressbalanceShelfDampeningEnum;
++	      else if (strcmp(name,"StressbalanceSpcvx")==0) return StressbalanceSpcvxEnum;
++	      else if (strcmp(name,"StressbalanceSpcvy")==0) return StressbalanceSpcvyEnum;
++	      else if (strcmp(name,"StressbalanceSpcvz")==0) return StressbalanceSpcvzEnum;
++	      else if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum;
++	      else if (strcmp(name,"StressbalanceVertexPairing")==0) return StressbalanceVertexPairingEnum;
++	      else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum;
+ 	      else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum;
+ 	      else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
+ 	      else if (strcmp(name,"LoadingforceZ")==0) return LoadingforceZEnum;
+@@ -267,7 +267,7 @@
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+-	      else if (strcmp(name,"TransientIsdiagnostic")==0) return TransientIsdiagnosticEnum;
++	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
+ 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
+ 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+ 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+@@ -291,10 +291,10 @@
+ 	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+ 	      else if (strcmp(name,"BedSlopeXAnalysis")==0) return BedSlopeXAnalysisEnum;
+ 	      else if (strcmp(name,"BedSlopeYAnalysis")==0) return BedSlopeYAnalysisEnum;
+-	      else if (strcmp(name,"DiagnosticHorizAnalysis")==0) return DiagnosticHorizAnalysisEnum;
+-	      else if (strcmp(name,"DiagnosticSIAAnalysis")==0) return DiagnosticSIAAnalysisEnum;
+-	      else if (strcmp(name,"DiagnosticSolution")==0) return DiagnosticSolutionEnum;
+-	      else if (strcmp(name,"DiagnosticVertAnalysis")==0) return DiagnosticVertAnalysisEnum;
++	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
++	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
++	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
++	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
+ 	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+ 	      else if (strcmp(name,"EnthalpySolution")==0) return EnthalpySolutionEnum;
+ 	      else if (strcmp(name,"FlaimAnalysis")==0) return FlaimAnalysisEnum;
+Index: ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp	(revision 15771)
+@@ -1,5 +1,5 @@
+ /*!\file OutputRiftsx
+- * \brief: output results from diagnostic solution, for rifts. Notably: fraction of 
++ * \brief: output results from stressbalance solution, for rifts. Notably: fraction of 
+  * melange, and penetration.
+  */
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 15771)
+@@ -1,12 +0,0 @@
+-/*! \file CreateLoadsDiagnosticSIA.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsDiagnosticSIA(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15771)
+@@ -1,68 +0,0 @@
+-/*
+- * CreateConstraintsDiagnosticSIA.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsDiagnosticSIA(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int        count;
+-	IssmDouble yts;
+-	bool       isSIA;
+-
+-	/*Output*/
+-	Constraints* constraints = NULL;
+-	SpcStatic*    spcstatic  = NULL;
+-
+-	/*Recover pointer: */
+-	constraints=*pconstraints;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+-
+-	/*Now, is the flag isSIA on? otherwise, do nothing: */
+-	if (!isSIA) return;
+-
+-	/*Fetch data: */
+-	iomodel->FetchData(3,DiagnosticSpcvxEnum,DiagnosticSpcvyEnum,FlowequationVertexEquationEnum);
+-
+-	/*Initialize conunter*/
+-	count=0;
+-
+-	/*vx and vy are spc'd if we are not on nodeonSIA: */
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		/*keep only this partition's nodes:*/
+-		if((iomodel->my_vertices[i])){
+-			if (!reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])==SIAApproximationEnum){
+-
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticSIAAnalysisEnum));
+-				count++;
+-
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticSIAAnalysisEnum));
+-				count++;
+-			}
+-			else{
+-				if (!xIsNan<IssmDouble>(iomodel->Data(DiagnosticSpcvxEnum)[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(DiagnosticSpcvxEnum)[i]/yts,DiagnosticSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-					count++;
+-				}
+-
+-				if (!xIsNan<IssmDouble>(iomodel->Data(DiagnosticSpcvyEnum)[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->Data(DiagnosticSpcvyEnum)[i]/yts,DiagnosticSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+-					count++;
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(3,DiagnosticSpcvxEnum,DiagnosticSpcvyEnum,FlowequationVertexEquationEnum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15771)
+@@ -1,51 +0,0 @@
+-/*
+- * CreateNodesDiagnosticSIA.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesDiagnosticSIA(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Intermediaries*/
+-	bool  isSIA;
+-	Node* node = NULL;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+-
+-	/*Now, is the flag isSIA on? otherwise, do nothing: */
+-	if(!isSIA) return;
+-
+-	/*First create nodes*/
+-	Nodes* nodes=*pnodes;
+-	if(!nodes) nodes = new Nodes();
+-
+-	iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Create new node if is in this processor's partition*/
+-			node = new Node(iomodel->nodecounter+i+1,i,i,iomodel,DiagnosticSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
+-
+-			/*Deactivate node if not SIA*/
+-			if(reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
+-				node->Deactivate();
+-			}
+-
+-			/*Add to Nodes dataset*/
+-			nodes->AddObject(node);
+-		}
+-	}
+-
+-	iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15771)
+@@ -1,37 +0,0 @@
+-/*
+- * UpdateElementsDiagnosticSIA:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsDiagnosticSIA(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Fetch data needed: */
+-	bool   isSIA;
+-	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+-
+-	/*Now, is the flag SIA on? otherwise, do nothing: */
+-	if (!isSIA)return;
+-
+-	iomodel->FetchData(1,FlowequationElementEquationEnum);
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 15771)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsDiagnosticVert.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15771)
+@@ -1,55 +0,0 @@
+-/*
+- * CreateConstraintsDiagnosticHoriz.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsDiagnosticVert(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int count;
+-	IssmDouble yts;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&yts,ConstantsYtsEnum);
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*return if 2d mesh*/
+-	if(iomodel->dim==2) *pconstraints=constraints;
+-
+-	/*Fetch data: */
+-	iomodel->FetchData(2,DiagnosticSpcvzEnum,FlowequationBorderFSEnum);
+-
+-	/*Initialize counter*/
+-	count=0;
+-
+-	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		/*keep only this partition's nodes:*/
+-		if(iomodel->my_vertices[i]){
+-
+-			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderFSEnum)[i])){
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticVertAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
+-				count++;
+-			}
+-			else if (!xIsNan<IssmDouble>(iomodel->Data(DiagnosticSpcvzEnum)[i])){
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
+-								iomodel->Data(DiagnosticSpcvzEnum)[i]/yts,DiagnosticVertAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-				count++;
+-
+-			}
+-		} 
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(2,DiagnosticSpcvzEnum,FlowequationBorderFSEnum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15771)
+@@ -1,19 +0,0 @@
+-/*
+- * CreateNodesDiagnosticVert.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(iomodel->dim==2) return;
+-
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+-	CreateNodes(pnodes,iomodel,DiagnosticVertAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 15771)
+@@ -1,38 +0,0 @@
+-/*
+- * UpdateElementsDiagnosticVert:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsDiagnosticVert(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (iomodel->dim==2)return;
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15771)
+@@ -1,89 +0,0 @@
+-/*! \file CreateLoadsDiagnosticHoriz.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel){
+-
+-	/*DataSets*/
+-	Pengrid   *pengrid   = NULL;
+-
+-	/*Intermediary*/
+-	int         segment_width;
+-	int         element;
+-	int         i;
+-	int         count;
+-	int         penpair_ids[2];
+-	bool        isSSA,isL1L2,isHO,isFS;
+-	int         numpenalties,numberofpressureloads,numrifts,numriftsegments;
+-	IssmDouble *pressureload   = NULL;
+-	IssmDouble *elements_type  = NULL;
+-	IssmDouble *nodeoniceshelf = NULL;
+-	IssmDouble *riftinfo       = NULL;
+-	IssmDouble *nodeonbed      = NULL;
+-	IssmDouble *nodeonFS   = NULL;
+-	IssmDouble *nodeonicesheet = NULL;
+-	IssmDouble *vertices_type  = NULL;
+-	IssmDouble *penalties      = NULL;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+-	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+-	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+-	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA & !isHO & !isFS & !isL1L2) return;
+-
+-	/*Initialize counter: */
+-	count=0;
+-
+-	/*Create Penpair for penalties: */
+-	iomodel->FetchData(&penalties,&numpenalties,NULL,DiagnosticVertexPairingEnum);
+-
+-	for(i=0;i<numpenalties;i++){
+-
+-		if(iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+0]-1)]){
+-
+-			/*In debugging mode, check that the second node is in the same cpu*/
+-			_assert_(iomodel->my_vertices[(int)penalties[2*i+1]-1]);
+-
+-			/*Get node ids*/
+-			penpair_ids[0]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+0]);
+-			penpair_ids[1]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+1]);
+-
+-			/*Create Load*/
+-			loads->AddObject(new Penpair(iomodel->loadcounter+count+1,&penpair_ids[0],DiagnosticHorizAnalysisEnum));
+-			count++;
+-		}
+-	}
+-
+-	/*free ressources: */
+-	iomodel->DeleteData(penalties,DiagnosticVertexPairingEnum);
+-
+-	/*Create Riffront loads for rifts: */
+-	#ifdef _HAVE_RIFTS_
+-	if(numrifts){
+-		iomodel->FetchData(&riftinfo,&numriftsegments,NULL,RiftsRiftstructEnum);
+-		iomodel->FetchData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskVertexonfloatingiceEnum);
+-		for(i=0;i<numriftsegments;i++){
+-			if(iomodel->my_elements[reCast<int,IssmDouble>(*(riftinfo+RIFTINFOSIZE*i+2))-1]){
+-				loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,DiagnosticHorizAnalysisEnum));
+-				count++;
+-			}
+-		}
+-		iomodel->DeleteData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskVertexonfloatingiceEnum);
+-		xDelete<IssmDouble>(riftinfo);
+-	}
+-	#endif
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15771)
+@@ -1,448 +0,0 @@
+-/*
+- * CreateConstraintsDiagnosticHoriz.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsDiagnosticHoriz(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int        i,j;
+-	int        count,temp,finiteelement;
+-	IssmDouble g;
+-	IssmDouble rho_ice;
+-	IssmDouble FSreconditioning;
+-	bool       isSIA,isSSA,isL1L2,isHO,isFS,iscoupling;
+-	bool       spcpresent = false;
+-	int        Mx,Nx;
+-	int        My,Ny;
+-	int        Mz,Nz;
+-	IssmDouble *spcvx          = NULL;
+-	IssmDouble *spcvy          = NULL;
+-	IssmDouble *spcvz          = NULL;
+-	IssmDouble *nodeonSSA = NULL;
+-	IssmDouble *nodeonHO   = NULL;
+-	IssmDouble *nodeonFS   = NULL;
+-	IssmDouble *nodeonbed      = NULL;
+-	IssmDouble *nodeonicesheet = NULL;
+-	IssmDouble *vertices_type  = NULL;
+-	IssmDouble *surface        = NULL;
+-	IssmDouble *z              = NULL;
+-	IssmDouble *timesx=NULL;
+-	IssmDouble *timesy=NULL;
+-	IssmDouble *timesz=NULL;
+-   IssmDouble* values=NULL;
+-
+-	/*Output*/
+-	Constraints *constraints      = NULL;
+-	SpcStatic   *spcstatic        = NULL;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&g,ConstantsGEnum);
+-	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+-	iomodel->Constant(&FSreconditioning,DiagnosticFSreconditioningEnum);
+-	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+-	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+-	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+-	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+-	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-
+-	/*Recover pointer: */
+-	constraints=*pconstraints;
+-
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA & !isHO & !isFS & !isL1L2){
+-		*pconstraints=constraints;
+-		return;
+-	}
+-
+-	/*Do we have coupling*/
+-	if((isSIA?1.:0.) + (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+-	 iscoupling = true;
+-	else
+-	 iscoupling = false;
+-
+-	/*If no coupling, call Regular IoModelToConstraintsx, else, use P1 elements only*/
+-	if(!iscoupling){
+-
+-		/*Get finite element type*/
+-		if(isSSA){
+-			iomodel->Constant(&temp,FlowequationFeSSAEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P2Enum;                break; 
+-				case 2 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 3 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isL1L2){
+-			finiteelement = P1Enum;
+-		}
+-		else if(isHO){
+-			iomodel->Constant(&temp,FlowequationFeHOEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P1xP2Enum;             break; 
+-				case 2 : finiteelement = P2xP1Enum;             break; 
+-				case 3 : finiteelement = P2Enum;                break; 
+-				case 4 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 5 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isFS){
+-			finiteelement = P1Enum;
+-			iomodel->Constant(&temp,FlowequationFeFSEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;       break;//P1P1
+-				case 1 : finiteelement = P1Enum;       break;//P1P1GSL
+-				case 2 : finiteelement = P1bubbleEnum; break;//MINIcondensed
+-				case 3 : finiteelement = P1bubbleEnum; break;//MINI
+-				case 4 : finiteelement = P2Enum;       break;//TaylorHood (P2P1)
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		IoModelToConstraintsx(constraints,iomodel,DiagnosticSpcvxEnum,DiagnosticHorizAnalysisEnum,finiteelement,1);
+-		IoModelToConstraintsx(constraints,iomodel,DiagnosticSpcvyEnum,DiagnosticHorizAnalysisEnum,finiteelement,2);
+-
+-		if(isFS){
+-
+-			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			iomodel->FetchData(&spcvz,&Mz,&Nz,DiagnosticSpcvzEnum);
+-			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+-			iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+-			iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-			iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
+-			for(i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
+-						if(vertices_type[i] == FSApproximationEnum){
+-							for(j=0;j<Nz;j++) spcvz[i*Nz+j] = 0.;
+-						}
+-						else{
+-							_error_("not supported");
+-						}
+-					}
+-				}
+-			}
+-			IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,DiagnosticHorizAnalysisEnum,finiteelement,3);
+-			iomodel->DeleteData(spcvz,DiagnosticSpcvzEnum);
+-			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+-			iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+-			iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-			iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
+-
+-			/*Pressure spc*/
+-			count = constraints->Size();
+-			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+-			iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+-			iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+-			switch(finiteelement){
+-				case P1bubbleEnum:
+-					for(i=0;i<iomodel->numberofvertices;i++){
+-						if(iomodel->my_vertices[i]){
+-							if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum));
+-								count++;
+-							}
+-						}
+-					}
+-					break;
+-				case P2Enum:
+-					for(i=0;i<iomodel->numberofvertices;i++){
+-						if(iomodel->my_vertices[i]){
+-							if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum));
+-								count++;
+-							}
+-						}
+-					}
+-					break;
+-				default:
+-					_error_("not implemented yet");
+-			}
+-			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+-			iomodel->DeleteData(surface,SurfaceEnum);
+-			iomodel->DeleteData(z,MeshZEnum);
+-		}
+-
+-		*pconstraints=constraints;
+-		return;
+-	}
+-
+-	/*Constraints: fetch data: */
+-	iomodel->FetchData(&spcvx,&Mx,&Nx,DiagnosticSpcvxEnum);
+-	iomodel->FetchData(&spcvy,&My,&Ny,DiagnosticSpcvyEnum);
+-	iomodel->FetchData(&spcvz,&Mz,&Nz,DiagnosticSpcvzEnum);
+-	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
+-	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+-	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+-	iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+-
+-	/*Initialize counter: */
+-	count=0;
+-
+-	/*figure out times: */
+-	timesx=xNew<IssmDouble>(Nx);
+-	for(j=0;j<Nx;j++){
+-		timesx[j]=spcvx[(Mx-1)*Nx+j];
+-	}
+-	/*figure out times: */
+-	timesy=xNew<IssmDouble>(Ny);
+-	for(j=0;j<Ny;j++){
+-		timesy[j]=spcvy[(My-1)*Ny+j];
+-	}
+-	/*figure out times: */
+-	timesz=xNew<IssmDouble>(Nz);
+-	for(j=0;j<Nz;j++){
+-		timesz[j]=spcvz[(Mz-1)*Nz+j];
+-	}
+-
+-	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+-	for(i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/
+-			if(reCast<int,IssmDouble>(vertices_type[i]==SSAHOApproximationEnum)){
+-				/*If grionSSA, spc HO dofs: 3 & 4*/
+-					if (reCast<int,IssmDouble>(nodeonHO[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-
+-					}
+-					else if (reCast<int,IssmDouble>(nodeonSSA[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-
+-					}
+-					else _error_("if vertices_type is SSAHO, you shoud have nodeonHO or nodeonSSA");
+-			}
+-			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
+-			else if (reCast<int,IssmDouble>(vertices_type[i])==HOFSApproximationEnum){
+-				/*If grion,HO spc FS dofs: 3 4 & 5*/
+-					if (reCast<int,IssmDouble>(nodeonHO[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-
+-					}
+-					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc HO nodes: 1 & 2
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvz[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-					}
+-					else _error_("if vertices_type is HOFS, you shoud have nodeonHO or nodeonFS");
+-			}
+-			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
+-			else if (reCast<int,IssmDouble>(vertices_type[i])==SSAFSApproximationEnum){
+-				/*If grion,HO spc FS dofs: 3 4 & 5*/
+-					if (reCast<int,IssmDouble>(nodeonSSA[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-
+-					}
+-					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc SSA nodes: 1 & 2
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvz[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-					}
+-					else _error_("if vertices_type is SSAFS, you shoud have nodeonSSA or nodeonFS");
+-			}
+-			/*Now add the regular spcs*/
+-			else{
+-				if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-					count++;
+-
+-				}
+-				else if (Mx==iomodel->numberofvertices+1) {
+-					/*figure out times and values: */
+-					values=xNew<IssmDouble>(Nx);
+-					spcpresent=false;
+-					for(j=0;j<Nx;j++){
+-						values[j]=spcvx[i*Nx+j];
+-						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+-					}
+-
+-					if(spcpresent){
+-						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,Nx,timesx,values,DiagnosticHorizAnalysisEnum));
+-						count++;
+-					}
+-					xDelete<IssmDouble>(values);
+-				}
+-				else if (vertices_type[i]==SIAApproximationEnum){
+-					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,DiagnosticHorizAnalysisEnum));
+-					count++;
+-				}
+-
+-				if (My==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
+-					count++;
+-				}
+-				else if (My==iomodel->numberofvertices+1){
+-					/*figure out times and values: */
+-					values=xNew<IssmDouble>(Ny);
+-					spcpresent=false;
+-					for(j=0;j<Ny;j++){
+-						values[j]=spcvy[i*Ny+j];
+-						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+-					}
+-					if(spcpresent){
+-						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,Ny,timesy,values,DiagnosticHorizAnalysisEnum));
+-						count++;
+-					}
+-					xDelete<IssmDouble>(values);
+-				}
+-				else if (vertices_type[i]==SIAApproximationEnum){
+-					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,DiagnosticHorizAnalysisEnum));
+-					count++;
+-				}
+-
+-				if (reCast<int,IssmDouble>(vertices_type[i])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
+-					if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i],DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+-						count++;
+-					}
+-					else if (Mz==iomodel->numberofvertices+1){
+-						/*figure out times and values: */
+-						values=xNew<IssmDouble>(Nz);
+-						spcpresent=false;
+-						for(j=0;j<Nz;j++){
+-							values[j]=spcvz[i*Nz+j];
+-							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+-						}
+-						if(spcpresent){
+-							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,Nz,timesz,values,DiagnosticHorizAnalysisEnum));
+-							count++;
+-						}
+-						xDelete<IssmDouble>(values);
+-					}
+-
+-				}
+-				if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+-					count++;
+-				}
+-			}
+-
+-			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
+-				 switch(reCast<int,IssmDouble>(vertices_type[i])){
+-					case SSAFSApproximationEnum:
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,DiagnosticHorizAnalysisEnum));
+-						count++;
+-						break;
+-					case HOFSApproximationEnum:
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,DiagnosticHorizAnalysisEnum));
+-						count++;
+-						break;
+-					case FSApproximationEnum:
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0.,DiagnosticHorizAnalysisEnum));
+-						count++;
+-						break;
+-					default: _error_("Vertex approximation " << EnumToStringx(reCast<int,IssmDouble>(vertices_type[i])) << " not supported");
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(spcvx,DiagnosticSpcvxEnum);
+-	iomodel->DeleteData(spcvy,DiagnosticSpcvyEnum);
+-	iomodel->DeleteData(spcvz,DiagnosticSpcvzEnum);
+-	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
+-	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+-	iomodel->DeleteData(surface,SurfaceEnum);
+-	iomodel->DeleteData(z,MeshZEnum);
+-
+-	/*Free resources:*/
+-	xDelete<IssmDouble>(timesx);
+-	xDelete<IssmDouble>(timesy);
+-	xDelete<IssmDouble>(timesz);
+-	xDelete<IssmDouble>(values);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15771)
+@@ -1,133 +0,0 @@
+-/*
+- * CreateNodesDiagnosticHoriz.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesDiagnosticHoriz(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	bool isSSA,isL1L2,isHO,isFS,iscoupling;
+-	int  temp,finiteelement=-1,approximation=-1;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+-	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+-	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+-	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-
+-	/*Now, check that we have non SIA elements */
+-	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+-
+-	/*Do we have coupling*/
+-	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+-	 iscoupling = true;
+-	else
+-	 iscoupling = false;
+-
+-	/*If no coupling, call Regular CreateNodes, else, use P1 elements only*/
+-	if(!iscoupling){
+-
+-		/*Get finite element type*/
+-		if(isSSA){
+-			approximation=SSAApproximationEnum;
+-			iomodel->Constant(&temp,FlowequationFeSSAEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P2Enum;                break; 
+-				case 2 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 3 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isL1L2){
+-			approximation = L1L2ApproximationEnum;
+-			finiteelement = P1Enum;
+-		}
+-		else if(isHO){
+-			approximation = HOApproximationEnum;
+-			iomodel->Constant(&temp,FlowequationFeHOEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P1xP2Enum;             break; 
+-				case 2 : finiteelement = P2xP1Enum;             break; 
+-				case 3 : finiteelement = P2Enum;                break; 
+-				case 4 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 5 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isFS){
+-			approximation = FSApproximationEnum;
+-			iomodel->Constant(&temp,FlowequationFeFSEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1P1Enum;          break;
+-				case 1 : finiteelement = P1P1GLSEnum;       break;
+-				case 2 : finiteelement = MINIcondensedEnum; break;
+-				case 3 : finiteelement = MINIEnum;          break;
+-				case 4 : finiteelement = TaylorHoodEnum;    break;
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-		CreateNodes(pnodes,iomodel,DiagnosticHorizAnalysisEnum,finiteelement,approximation);
+-		iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-	}
+-	else{
+-		/*Coupling: we are going to create P1 Elements only*/
+-
+-		/*Recover nodes*/
+-		Nodes* nodes = *pnodes;
+-		Node*  node  = NULL;
+-		if(!nodes) nodes = new Nodes();
+-
+-		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-		if(isFS){
+-			/*P1+ velocity*/
+-			for(int i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
+-					if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,DiagnosticHorizAnalysisEnum,approximation));
+-				}
+-			}
+-			for(int i=0;i<iomodel->numberofelements;i++){
+-				if(iomodel->my_elements[i]){
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,DiagnosticHorizAnalysisEnum,FSvelocityEnum);
+-					node->Deactivate();
+-					nodes->AddObject(node);
+-				}
+-			}
+-			/*P1 pressure*/
+-			for(int i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,DiagnosticHorizAnalysisEnum,FSpressureEnum);
+-					if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
+-						node->Deactivate();
+-					}
+-					nodes->AddObject(node);
+-				}
+-			}
+-		}
+-		else{
+-			for(int i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,DiagnosticHorizAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
+-				}
+-			}
+-		}
+-		iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-
+-		/*Assign output pointer: */
+-		*pnodes=nodes;
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15771)
+@@ -1,176 +0,0 @@
+-/*
+- * UpdateElementsDiagnosticHoriz:
+- */
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsDiagnosticHoriz(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	int    materials_type,finiteelement,temp;
+-	int    approximation;
+-	int*   finiteelement_list=NULL;
+-	bool   isSSA,isL1L2,isHO,isFS,iscoupling;
+-	bool   control_analysis;
+-	bool   dakota_analysis;
+-
+-	/*Fetch constants needed: */
+-	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+-	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+-	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+-	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-	iomodel->Constant(&materials_type,MaterialsEnum);
+-
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+-
+-	/*Fetch data needed and allocate vectors: */
+-	iomodel->FetchData(1,FlowequationElementEquationEnum);
+-	finiteelement_list=xNewZeroInit<int>(iomodel->numberofelements);
+-
+-
+-	/*Do we have coupling*/
+-	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+-	 iscoupling = true;
+-	else
+-	 iscoupling = false;
+-
+-	/*Get finite element type*/
+-	if(!iscoupling){
+-		if(isSSA){
+-			iomodel->Constant(&temp,FlowequationFeSSAEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P2Enum;                break; 
+-				case 2 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 3 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isL1L2){
+-			finiteelement = P1Enum;
+-		}
+-		else if(isHO){
+-			iomodel->Constant(&temp,FlowequationFeHOEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P1xP2Enum;             break; 
+-				case 2 : finiteelement = P2xP1Enum;             break; 
+-				case 3 : finiteelement = P2Enum;                break; 
+-				case 4 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 5 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isFS){
+-			iomodel->Constant(&temp,FlowequationFeFSEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1P1Enum;          break;
+-				case 1 : finiteelement = P1P1GLSEnum;       break;
+-				case 2 : finiteelement = MINIcondensedEnum; break;
+-				case 3 : finiteelement = MINIEnum;          break;
+-				case 4 : finiteelement = TaylorHoodEnum;    break;
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		for(int i=0;i<iomodel->numberofelements;i++){
+-			finiteelement_list[i]=finiteelement;
+-		}
+-	}
+-	else{
+-		if(isFS){
+-			for(int i=0;i<iomodel->numberofelements;i++){
+-				approximation=reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[i]);
+-				if(approximation==FSApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+-					finiteelement_list[i]=MINIcondensedEnum;
+-				}
+-				else{
+-					finiteelement_list[i]=P1Enum;
+-				}
+-			}
+-		}
+-		else{
+-			finiteelement = P1Enum;
+-			for(int i=0;i<iomodel->numberofelements;i++){
+-				finiteelement_list[i]=finiteelement;
+-			}
+-		}
+-	}
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
+-			counter++;
+-		}
+-	}
+-
+-	/*Create inputs: */
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+-	iomodel->FetchDataToInput(elements,FrictionPEnum);
+-	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+-	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+-	if(materials_type==MatdamageiceEnum){
+-		iomodel->FetchDataToInput(elements,MaterialsRheologyZEnum);
+-	}
+-	if(iomodel->dim==3){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-		iomodel->FetchDataToInput(elements,VzEnum);
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+-		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
+-		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
+-	}
+-
+-	if(control_analysis){
+-		iomodel->FetchDataToInput(elements,InversionVxObsEnum);
+-		iomodel->FetchDataToInput(elements,InversionVyObsEnum);
+-	}
+-
+-	/*Post-process: */
+-	elements->InputDuplicate(VxEnum,VxPicardEnum);
+-	elements->InputDuplicate(VxEnum,InversionVxObsEnum);
+-	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
+-
+-	#ifdef _HAVE_ANDROID_
+-	elements->InputDuplicate(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
+-	#endif
+-
+-	elements->InputDuplicate(VyEnum,VyPicardEnum);
+-	elements->InputDuplicate(VyEnum,InversionVyObsEnum);
+-	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
+-
+-	if(iomodel->dim==3){
+-		elements->InputDuplicate(VzEnum,VzPicardEnum);
+-		elements->InputDuplicate(VzEnum,InversionVzObsEnum);
+-		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+-	xDelete<int>(finiteelement_list);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15771)
+@@ -1,5 +1,5 @@
+ /*
+- * CreateElementsNodesAndMaterialsDiagnosticHoriz.c:
++ * CreateElementsNodesAndMaterialsStressbalanceHoriz.c:
+  */
+ 
+ #include "../../toolkits/toolkits.h"
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15771)
+@@ -26,23 +26,23 @@
+ 
+ /*Creation of fem datasets: specialised drivers: */
+ 
+-/*diagnostic horizontal*/
+-void CreateNodesDiagnosticHoriz(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsDiagnosticHoriz(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsDiagnosticHoriz(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++/*stressbalance horizontal*/
++void CreateNodesStressbalance(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsStressbalance(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsStressbalance(Loads** ploads, IoModel* iomodel);
++void UpdateElementsStressbalance(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+-/*diagnostic vertical*/
+-void CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsDiagnosticVert(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++/*stressbalance vertical*/
++void CreateNodesStressbalanceVertical(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsStressbalanceVertical(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsStressbalanceVertical(Loads** ploads, IoModel* iomodel);
++void UpdateElementsStressbalanceVertical(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+-/*diagnostic SIA*/
+-void CreateNodesDiagnosticSIA(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsDiagnosticSIA(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsDiagnosticSIA(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsDiagnosticSIA(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++/*stressbalance SIA*/
++void CreateNodesStressbalanceSIA(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsStressbalanceSIA(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsStressbalanceSIA(Loads** ploads, IoModel* iomodel);
++void UpdateElementsStressbalanceSIA(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ #ifdef _HAVE_GIA_
+ /*gia*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 15771)
+@@ -0,0 +1,55 @@
++/*
++ * CreateConstraintsStressbalanceHoriz.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateConstraintsStressbalanceVertical(Constraints** pconstraints, IoModel* iomodel){
++
++	/*Intermediary*/
++	int count;
++	IssmDouble yts;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&yts,ConstantsYtsEnum);
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*return if 2d mesh*/
++	if(iomodel->dim==2) *pconstraints=constraints;
++
++	/*Fetch data: */
++	iomodel->FetchData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
++
++	/*Initialize counter*/
++	count=0;
++
++	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
++	for(int i=0;i<iomodel->numberofvertices;i++){
++
++		/*keep only this partition's nodes:*/
++		if(iomodel->my_vertices[i]){
++
++			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderFSEnum)[i])){
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceVerticalAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
++				count++;
++			}
++			else if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvzEnum)[i])){
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
++								iomodel->Data(StressbalanceSpcvzEnum)[i]/yts,StressbalanceVerticalAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++				count++;
++
++			}
++		} 
++	}
++
++	/*Free data: */
++	iomodel->DeleteData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 15771)
+@@ -0,0 +1,19 @@
++/*
++ * CreateNodesStressbalanceVertical.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesStressbalanceVertical(Nodes** pnodes, IoModel* iomodel){
++
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(iomodel->dim==2) return;
++
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	CreateNodes(pnodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 15771)
+@@ -0,0 +1,38 @@
++/*
++ * UpdateElementsStressbalanceVertical:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsStressbalanceVertical(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if (iomodel->dim==2)return;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp	(revision 15771)
+@@ -0,0 +1,13 @@
++/*! \file CreateLoadsStressbalanceVertical.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsStressbalanceVertical(Loads** ploads, IoModel* iomodel){
++
++	/*No loads*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp	(revision 15771)
+@@ -0,0 +1,68 @@
++/*
++ * CreateConstraintsStressbalanceSIA.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateConstraintsStressbalanceSIA(Constraints** pconstraints, IoModel* iomodel){
++
++	/*Intermediary*/
++	int        count;
++	IssmDouble yts;
++	bool       isSIA;
++
++	/*Output*/
++	Constraints* constraints = NULL;
++	SpcStatic*    spcstatic  = NULL;
++
++	/*Recover pointer: */
++	constraints=*pconstraints;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&yts,ConstantsYtsEnum);
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
++
++	/*Now, is the flag isSIA on? otherwise, do nothing: */
++	if (!isSIA) return;
++
++	/*Fetch data: */
++	iomodel->FetchData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
++
++	/*Initialize conunter*/
++	count=0;
++
++	/*vx and vy are spc'd if we are not on nodeonSIA: */
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		/*keep only this partition's nodes:*/
++		if((iomodel->my_vertices[i])){
++			if (!reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])==SIAApproximationEnum){
++
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceSIAAnalysisEnum));
++				count++;
++
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceSIAAnalysisEnum));
++				count++;
++			}
++			else{
++				if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvxEnum)[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(StressbalanceSpcvxEnum)[i]/yts,StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++					count++;
++				}
++
++				if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvyEnum)[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->Data(StressbalanceSpcvyEnum)[i]/yts,StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++					count++;
++				}
++			}
++		}
++	}
++
++	/*Free data: */
++	iomodel->DeleteData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp	(revision 15771)
+@@ -0,0 +1,51 @@
++/*
++ * CreateNodesStressbalanceSIA.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesStressbalanceSIA(Nodes** pnodes, IoModel* iomodel){
++
++	/*Intermediaries*/
++	bool  isSIA;
++	Node* node = NULL;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
++
++	/*Now, is the flag isSIA on? otherwise, do nothing: */
++	if(!isSIA) return;
++
++	/*First create nodes*/
++	Nodes* nodes=*pnodes;
++	if(!nodes) nodes = new Nodes();
++
++	iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		if(iomodel->my_vertices[i]){
++
++			/*Create new node if is in this processor's partition*/
++			node = new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
++
++			/*Deactivate node if not SIA*/
++			if(reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
++				node->Deactivate();
++			}
++
++			/*Add to Nodes dataset*/
++			nodes->AddObject(node);
++		}
++	}
++
++	iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++
++	/*Assign output pointer: */
++	*pnodes=nodes;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp	(revision 15771)
+@@ -0,0 +1,37 @@
++/*
++ * UpdateElementsStressbalanceSIA:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsStressbalanceSIA(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Fetch data needed: */
++	bool   isSIA;
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
++
++	/*Now, is the flag SIA on? otherwise, do nothing: */
++	if (!isSIA)return;
++
++	iomodel->FetchData(1,FlowequationElementEquationEnum);
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
++
++	/*Free data: */
++	iomodel->DeleteData(1,FlowequationElementEquationEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp	(revision 15771)
+@@ -0,0 +1,12 @@
++/*! \file CreateLoadsStressbalanceSIA.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsStressbalanceSIA(Loads** ploads, IoModel* iomodel){
++
++	/*No loads*/
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 15771)
+@@ -0,0 +1,89 @@
++/*! \file CreateLoadsStressbalance.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsStressbalance(Loads** ploads, IoModel* iomodel){
++
++	/*DataSets*/
++	Pengrid   *pengrid   = NULL;
++
++	/*Intermediary*/
++	int         segment_width;
++	int         element;
++	int         i;
++	int         count;
++	int         penpair_ids[2];
++	bool        isSSA,isL1L2,isHO,isFS;
++	int         numpenalties,numberofpressureloads,numrifts,numriftsegments;
++	IssmDouble *pressureload   = NULL;
++	IssmDouble *elements_type  = NULL;
++	IssmDouble *nodeoniceshelf = NULL;
++	IssmDouble *riftinfo       = NULL;
++	IssmDouble *nodeonbed      = NULL;
++	IssmDouble *nodeonFS   = NULL;
++	IssmDouble *nodeonicesheet = NULL;
++	IssmDouble *vertices_type  = NULL;
++	IssmDouble *penalties      = NULL;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA & !isHO & !isFS & !isL1L2) return;
++
++	/*Initialize counter: */
++	count=0;
++
++	/*Create Penpair for penalties: */
++	iomodel->FetchData(&penalties,&numpenalties,NULL,StressbalanceVertexPairingEnum);
++
++	for(i=0;i<numpenalties;i++){
++
++		if(iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+0]-1)]){
++
++			/*In debugging mode, check that the second node is in the same cpu*/
++			_assert_(iomodel->my_vertices[(int)penalties[2*i+1]-1]);
++
++			/*Get node ids*/
++			penpair_ids[0]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+0]);
++			penpair_ids[1]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+1]);
++
++			/*Create Load*/
++			loads->AddObject(new Penpair(iomodel->loadcounter+count+1,&penpair_ids[0],StressbalanceAnalysisEnum));
++			count++;
++		}
++	}
++
++	/*free ressources: */
++	iomodel->DeleteData(penalties,StressbalanceVertexPairingEnum);
++
++	/*Create Riffront loads for rifts: */
++	#ifdef _HAVE_RIFTS_
++	if(numrifts){
++		iomodel->FetchData(&riftinfo,&numriftsegments,NULL,RiftsRiftstructEnum);
++		iomodel->FetchData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskVertexonfloatingiceEnum);
++		for(i=0;i<numriftsegments;i++){
++			if(iomodel->my_elements[reCast<int,IssmDouble>(*(riftinfo+RIFTINFOSIZE*i+2))-1]){
++				loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,StressbalanceAnalysisEnum));
++				count++;
++			}
++		}
++		iomodel->DeleteData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskVertexonfloatingiceEnum);
++		xDelete<IssmDouble>(riftinfo);
++	}
++	#endif
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 15771)
+@@ -0,0 +1,448 @@
++/*
++ * CreateConstraintsStressbalance.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateConstraintsStressbalance(Constraints** pconstraints, IoModel* iomodel){
++
++	/*Intermediary*/
++	int        i,j;
++	int        count,temp,finiteelement;
++	IssmDouble g;
++	IssmDouble rho_ice;
++	IssmDouble FSreconditioning;
++	bool       isSIA,isSSA,isL1L2,isHO,isFS,iscoupling;
++	bool       spcpresent = false;
++	int        Mx,Nx;
++	int        My,Ny;
++	int        Mz,Nz;
++	IssmDouble *spcvx          = NULL;
++	IssmDouble *spcvy          = NULL;
++	IssmDouble *spcvz          = NULL;
++	IssmDouble *nodeonSSA = NULL;
++	IssmDouble *nodeonHO   = NULL;
++	IssmDouble *nodeonFS   = NULL;
++	IssmDouble *nodeonbed      = NULL;
++	IssmDouble *nodeonicesheet = NULL;
++	IssmDouble *vertices_type  = NULL;
++	IssmDouble *surface        = NULL;
++	IssmDouble *z              = NULL;
++	IssmDouble *timesx=NULL;
++	IssmDouble *timesy=NULL;
++	IssmDouble *timesz=NULL;
++   IssmDouble* values=NULL;
++
++	/*Output*/
++	Constraints *constraints      = NULL;
++	SpcStatic   *spcstatic        = NULL;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&g,ConstantsGEnum);
++	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
++	iomodel->Constant(&FSreconditioning,StressbalanceFSreconditioningEnum);
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++
++	/*Recover pointer: */
++	constraints=*pconstraints;
++
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA & !isHO & !isFS & !isL1L2){
++		*pconstraints=constraints;
++		return;
++	}
++
++	/*Do we have coupling*/
++	if((isSIA?1.:0.) + (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*If no coupling, call Regular IoModelToConstraintsx, else, use P1 elements only*/
++	if(!iscoupling){
++
++		/*Get finite element type*/
++		if(isSSA){
++			iomodel->Constant(&temp,FlowequationFeSSAEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum;                break; 
++				case 1 : finiteelement = P2Enum;                break; 
++				case 2 : finiteelement = P1bubblecondensedEnum; break; 
++				case 3 : finiteelement = P1bubbleEnum;          break; 
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isL1L2){
++			finiteelement = P1Enum;
++		}
++		else if(isHO){
++			iomodel->Constant(&temp,FlowequationFeHOEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum;                break; 
++				case 1 : finiteelement = P1xP2Enum;             break; 
++				case 2 : finiteelement = P2xP1Enum;             break; 
++				case 3 : finiteelement = P2Enum;                break; 
++				case 4 : finiteelement = P1bubblecondensedEnum; break; 
++				case 5 : finiteelement = P1bubbleEnum;          break; 
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isFS){
++			finiteelement = P1Enum;
++			iomodel->Constant(&temp,FlowequationFeFSEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum;       break;//P1P1
++				case 1 : finiteelement = P1Enum;       break;//P1P1GSL
++				case 2 : finiteelement = P1bubbleEnum; break;//MINIcondensed
++				case 3 : finiteelement = P1bubbleEnum; break;//MINI
++				case 4 : finiteelement = P2Enum;       break;//TaylorHood (P2P1)
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
++		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
++
++		if(isFS){
++
++			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
++			iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
++			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
++			iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
++			iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++			iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
++						if(vertices_type[i] == FSApproximationEnum){
++							for(j=0;j<Nz;j++) spcvz[i*Nz+j] = 0.;
++						}
++						else{
++							_error_("not supported");
++						}
++					}
++				}
++			}
++			IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,3);
++			iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
++			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
++			iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
++			iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++			iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
++
++			/*Pressure spc*/
++			count = constraints->Size();
++			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
++			iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
++			iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
++			switch(finiteelement){
++				case P1bubbleEnum:
++					for(i=0;i<iomodel->numberofvertices;i++){
++						if(iomodel->my_vertices[i]){
++							if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
++								count++;
++							}
++						}
++					}
++					break;
++				case P2Enum:
++					for(i=0;i<iomodel->numberofvertices;i++){
++						if(iomodel->my_vertices[i]){
++							if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
++								count++;
++							}
++						}
++					}
++					break;
++				default:
++					_error_("not implemented yet");
++			}
++			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
++			iomodel->DeleteData(surface,SurfaceEnum);
++			iomodel->DeleteData(z,MeshZEnum);
++		}
++
++		*pconstraints=constraints;
++		return;
++	}
++
++	/*Constraints: fetch data: */
++	iomodel->FetchData(&spcvx,&Mx,&Nx,StressbalanceSpcvxEnum);
++	iomodel->FetchData(&spcvy,&My,&Ny,StressbalanceSpcvyEnum);
++	iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
++	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
++	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
++	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
++	iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
++
++	/*Initialize counter: */
++	count=0;
++
++	/*figure out times: */
++	timesx=xNew<IssmDouble>(Nx);
++	for(j=0;j<Nx;j++){
++		timesx[j]=spcvx[(Mx-1)*Nx+j];
++	}
++	/*figure out times: */
++	timesy=xNew<IssmDouble>(Ny);
++	for(j=0;j<Ny;j++){
++		timesy[j]=spcvy[(My-1)*Ny+j];
++	}
++	/*figure out times: */
++	timesz=xNew<IssmDouble>(Nz);
++	for(j=0;j<Nz;j++){
++		timesz[j]=spcvz[(Mz-1)*Nz+j];
++	}
++
++	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
++	for(i=0;i<iomodel->numberofvertices;i++){
++		if(iomodel->my_vertices[i]){
++
++			/*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/
++			if(reCast<int,IssmDouble>(vertices_type[i]==SSAHOApproximationEnum)){
++				/*If grionSSA, spc HO dofs: 3 & 4*/
++					if (reCast<int,IssmDouble>(nodeonHO[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++
++					}
++					else if (reCast<int,IssmDouble>(nodeonSSA[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++
++					}
++					else _error_("if vertices_type is SSAHO, you shoud have nodeonHO or nodeonSSA");
++			}
++			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
++			else if (reCast<int,IssmDouble>(vertices_type[i])==HOFSApproximationEnum){
++				/*If grion,HO spc FS dofs: 3 4 & 5*/
++					if (reCast<int,IssmDouble>(nodeonHO[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++
++					}
++					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc HO nodes: 1 & 2
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvz[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++					}
++					else _error_("if vertices_type is HOFS, you shoud have nodeonHO or nodeonFS");
++			}
++			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
++			else if (reCast<int,IssmDouble>(vertices_type[i])==SSAFSApproximationEnum){
++				/*If grion,HO spc FS dofs: 3 4 & 5*/
++					if (reCast<int,IssmDouble>(nodeonSSA[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++
++					}
++					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc SSA nodes: 1 & 2
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvz[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++					}
++					else _error_("if vertices_type is SSAFS, you shoud have nodeonSSA or nodeonFS");
++			}
++			/*Now add the regular spcs*/
++			else{
++				if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++					count++;
++
++				}
++				else if (Mx==iomodel->numberofvertices+1) {
++					/*figure out times and values: */
++					values=xNew<IssmDouble>(Nx);
++					spcpresent=false;
++					for(j=0;j<Nx;j++){
++						values[j]=spcvx[i*Nx+j];
++						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++					}
++
++					if(spcpresent){
++						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,Nx,timesx,values,StressbalanceAnalysisEnum));
++						count++;
++					}
++					xDelete<IssmDouble>(values);
++				}
++				else if (vertices_type[i]==SIAApproximationEnum){
++					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,StressbalanceAnalysisEnum));
++					count++;
++				}
++
++				if (My==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
++					count++;
++				}
++				else if (My==iomodel->numberofvertices+1){
++					/*figure out times and values: */
++					values=xNew<IssmDouble>(Ny);
++					spcpresent=false;
++					for(j=0;j<Ny;j++){
++						values[j]=spcvy[i*Ny+j];
++						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++					}
++					if(spcpresent){
++						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,Ny,timesy,values,StressbalanceAnalysisEnum));
++						count++;
++					}
++					xDelete<IssmDouble>(values);
++				}
++				else if (vertices_type[i]==SIAApproximationEnum){
++					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,StressbalanceAnalysisEnum));
++					count++;
++				}
++
++				if (reCast<int,IssmDouble>(vertices_type[i])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
++					if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++						count++;
++					}
++					else if (Mz==iomodel->numberofvertices+1){
++						/*figure out times and values: */
++						values=xNew<IssmDouble>(Nz);
++						spcpresent=false;
++						for(j=0;j<Nz;j++){
++							values[j]=spcvz[i*Nz+j];
++							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++						}
++						if(spcpresent){
++							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,Nz,timesz,values,StressbalanceAnalysisEnum));
++							count++;
++						}
++						xDelete<IssmDouble>(values);
++					}
++
++				}
++				if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++					count++;
++				}
++			}
++
++			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
++			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
++				 switch(reCast<int,IssmDouble>(vertices_type[i])){
++					case SSAFSApproximationEnum:
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,StressbalanceAnalysisEnum));
++						count++;
++						break;
++					case HOFSApproximationEnum:
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,StressbalanceAnalysisEnum));
++						count++;
++						break;
++					case FSApproximationEnum:
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0.,StressbalanceAnalysisEnum));
++						count++;
++						break;
++					default: _error_("Vertex approximation " << EnumToStringx(reCast<int,IssmDouble>(vertices_type[i])) << " not supported");
++				}
++			}
++		}
++	}
++
++	/*Free data: */
++	iomodel->DeleteData(spcvx,StressbalanceSpcvxEnum);
++	iomodel->DeleteData(spcvy,StressbalanceSpcvyEnum);
++	iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
++	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
++	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(surface,SurfaceEnum);
++	iomodel->DeleteData(z,MeshZEnum);
++
++	/*Free resources:*/
++	xDelete<IssmDouble>(timesx);
++	xDelete<IssmDouble>(timesy);
++	xDelete<IssmDouble>(timesz);
++	xDelete<IssmDouble>(values);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 15771)
+@@ -0,0 +1,133 @@
++/*
++ * CreateNodesStressbalance.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesStressbalance(Nodes** pnodes, IoModel* iomodel){
++
++	/*Intermediary*/
++	bool isSSA,isL1L2,isHO,isFS,iscoupling;
++	int  temp,finiteelement=-1,approximation=-1;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++
++	/*Now, check that we have non SIA elements */
++	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
++
++	/*Do we have coupling*/
++	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*If no coupling, call Regular CreateNodes, else, use P1 elements only*/
++	if(!iscoupling){
++
++		/*Get finite element type*/
++		if(isSSA){
++			approximation=SSAApproximationEnum;
++			iomodel->Constant(&temp,FlowequationFeSSAEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum;                break; 
++				case 1 : finiteelement = P2Enum;                break; 
++				case 2 : finiteelement = P1bubblecondensedEnum; break; 
++				case 3 : finiteelement = P1bubbleEnum;          break; 
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isL1L2){
++			approximation = L1L2ApproximationEnum;
++			finiteelement = P1Enum;
++		}
++		else if(isHO){
++			approximation = HOApproximationEnum;
++			iomodel->Constant(&temp,FlowequationFeHOEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum;                break; 
++				case 1 : finiteelement = P1xP2Enum;             break; 
++				case 2 : finiteelement = P2xP1Enum;             break; 
++				case 3 : finiteelement = P2Enum;                break; 
++				case 4 : finiteelement = P1bubblecondensedEnum; break; 
++				case 5 : finiteelement = P1bubbleEnum;          break; 
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isFS){
++			approximation = FSApproximationEnum;
++			iomodel->Constant(&temp,FlowequationFeFSEnum);
++			switch(temp){
++				case 0 : finiteelement = P1P1Enum;          break;
++				case 1 : finiteelement = P1P1GLSEnum;       break;
++				case 2 : finiteelement = MINIcondensedEnum; break;
++				case 3 : finiteelement = MINIEnum;          break;
++				case 4 : finiteelement = TaylorHoodEnum;    break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		CreateNodes(pnodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
++		iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++	}
++	else{
++		/*Coupling: we are going to create P1 Elements only*/
++
++		/*Recover nodes*/
++		Nodes* nodes = *pnodes;
++		Node*  node  = NULL;
++		if(!nodes) nodes = new Nodes();
++
++		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		if(isFS){
++			/*P1+ velocity*/
++			for(int i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
++					if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceAnalysisEnum,approximation));
++				}
++			}
++			for(int i=0;i<iomodel->numberofelements;i++){
++				if(iomodel->my_elements[i]){
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
++					node->Deactivate();
++					nodes->AddObject(node);
++				}
++			}
++			/*P1 pressure*/
++			for(int i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
++					if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
++						node->Deactivate();
++					}
++					nodes->AddObject(node);
++				}
++			}
++		}
++		else{
++			for(int i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
++				}
++			}
++		}
++		iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++
++		/*Assign output pointer: */
++		*pnodes=nodes;
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15771)
+@@ -0,0 +1,176 @@
++/*
++ * UpdateElementsStressbalance:
++ */
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsStressbalance(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	int    materials_type,finiteelement,temp;
++	int    approximation;
++	int*   finiteelement_list=NULL;
++	bool   isSSA,isL1L2,isHO,isFS,iscoupling;
++	bool   control_analysis;
++	bool   dakota_analysis;
++
++	/*Fetch constants needed: */
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++	iomodel->Constant(&materials_type,MaterialsEnum);
++
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
++
++	/*Fetch data needed and allocate vectors: */
++	iomodel->FetchData(1,FlowequationElementEquationEnum);
++	finiteelement_list=xNewZeroInit<int>(iomodel->numberofelements);
++
++
++	/*Do we have coupling*/
++	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*Get finite element type*/
++	if(!iscoupling){
++		if(isSSA){
++			iomodel->Constant(&temp,FlowequationFeSSAEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum;                break; 
++				case 1 : finiteelement = P2Enum;                break; 
++				case 2 : finiteelement = P1bubblecondensedEnum; break; 
++				case 3 : finiteelement = P1bubbleEnum;          break; 
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isL1L2){
++			finiteelement = P1Enum;
++		}
++		else if(isHO){
++			iomodel->Constant(&temp,FlowequationFeHOEnum);
++			switch(temp){
++				case 0 : finiteelement = P1Enum;                break; 
++				case 1 : finiteelement = P1xP2Enum;             break; 
++				case 2 : finiteelement = P2xP1Enum;             break; 
++				case 3 : finiteelement = P2Enum;                break; 
++				case 4 : finiteelement = P1bubblecondensedEnum; break; 
++				case 5 : finiteelement = P1bubbleEnum;          break; 
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		else if(isFS){
++			iomodel->Constant(&temp,FlowequationFeFSEnum);
++			switch(temp){
++				case 0 : finiteelement = P1P1Enum;          break;
++				case 1 : finiteelement = P1P1GLSEnum;       break;
++				case 2 : finiteelement = MINIcondensedEnum; break;
++				case 3 : finiteelement = MINIEnum;          break;
++				case 4 : finiteelement = TaylorHoodEnum;    break;
++				default: _error_("finite element "<<temp<<" not supported");
++			}
++		}
++		for(int i=0;i<iomodel->numberofelements;i++){
++			finiteelement_list[i]=finiteelement;
++		}
++	}
++	else{
++		if(isFS){
++			for(int i=0;i<iomodel->numberofelements;i++){
++				approximation=reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[i]);
++				if(approximation==FSApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
++					finiteelement_list[i]=MINIcondensedEnum;
++				}
++				else{
++					finiteelement_list[i]=P1Enum;
++				}
++			}
++		}
++		else{
++			finiteelement = P1Enum;
++			for(int i=0;i<iomodel->numberofelements;i++){
++				finiteelement_list[i]=finiteelement;
++			}
++		}
++	}
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
++			counter++;
++		}
++	}
++
++	/*Create inputs: */
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
++	iomodel->FetchDataToInput(elements,FrictionPEnum);
++	iomodel->FetchDataToInput(elements,FrictionQEnum);
++	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
++	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
++	if(materials_type==MatdamageiceEnum){
++		iomodel->FetchDataToInput(elements,MaterialsRheologyZEnum);
++	}
++	if(iomodel->dim==3){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++		iomodel->FetchDataToInput(elements,VzEnum);
++		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
++		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
++	}
++
++	if(control_analysis){
++		iomodel->FetchDataToInput(elements,InversionVxObsEnum);
++		iomodel->FetchDataToInput(elements,InversionVyObsEnum);
++	}
++
++	/*Post-process: */
++	elements->InputDuplicate(VxEnum,VxPicardEnum);
++	elements->InputDuplicate(VxEnum,InversionVxObsEnum);
++	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
++
++	#ifdef _HAVE_ANDROID_
++	elements->InputDuplicate(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
++	#endif
++
++	elements->InputDuplicate(VyEnum,VyPicardEnum);
++	elements->InputDuplicate(VyEnum,InversionVyObsEnum);
++	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
++
++	if(iomodel->dim==3){
++		elements->InputDuplicate(VzEnum,VzPicardEnum);
++		elements->InputDuplicate(VzEnum,InversionVzObsEnum);
++		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
++	}
++
++	/*Free data: */
++	iomodel->DeleteData(1,FlowequationElementEquationEnum);
++	xDelete<int>(finiteelement_list);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15771)
+@@ -15,7 +15,7 @@
+ 
+ 	/*ok, according to analysis type: */
+ 	switch(analysis_type){
+-		case DiagnosticHorizAnalysisEnum:
++		case StressbalanceAnalysisEnum:
+ 			switch(node_type){
+ 				case SSAApproximationEnum:
+ 					numdofs=2;
+@@ -65,14 +65,14 @@
+ 					doftype[4]=FSvelocityEnum;
+ 					break;
+ 				default:
+-					_error_("Approximationtype " << node_type << " (" << EnumToStringx(node_type) << ") not implemented yet for DiagnosticHoriz");
++					_error_("Approximationtype " << node_type << " (" << EnumToStringx(node_type) << ") not implemented yet for StressbalanceHoriz");
+ 
+ 			}
+ 			break;
+-		case DiagnosticVertAnalysisEnum:
++		case StressbalanceVerticalAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+-		case DiagnosticSIAAnalysisEnum:
++		case StressbalanceSIAAnalysisEnum:
+ 			numdofs=2;
+ 			break;
+ 		case BedSlopeAnalysisEnum:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15771)
+@@ -51,11 +51,11 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeFSEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticRestolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticReltolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticAbstolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticIsnewtonEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticMaxiterEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRestolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceReltolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceIsnewtonEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateReltolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ConstantsYtsEnum));
+@@ -66,7 +66,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MasstransportHydrostaticAdjustmentEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MasstransportStabilizationEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticPenaltyFactorEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MasstransportMinThicknessEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MasstransportPenaltyFactorEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyFactorEnum));
+@@ -80,10 +80,10 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalStabilizationEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyThresholdEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyLockEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticRiftPenaltyThresholdEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticFSreconditioningEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticShelfDampeningEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticViscosityOvershootEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRiftPenaltyThresholdEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceFSreconditioningEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceShelfDampeningEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceViscosityOvershootEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsWaitonlockEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofelementsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofverticesEnum));
+@@ -91,7 +91,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsIoGatherEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsResultsAsPatchesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(TransientIsdiagnosticEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(TransientIsstressbalanceEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsmasstransportEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsthermalEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsgroundinglineEnum));
+@@ -146,10 +146,10 @@
+ 	parameters->AddObject(new BoolParam(SaveResultsEnum,true));
+ 
+ 	/*Requested outputs*/
+-	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,DiagnosticRequestedOutputsEnum);
+-	parameters->AddObject(new IntParam(DiagnosticNumRequestedOutputsEnum,numoutputs));
+-	if(numoutputs)parameters->AddObject(new IntVecParam(DiagnosticRequestedOutputsEnum,requestedoutputs,numoutputs));
+-	iomodel->DeleteData(requestedoutputs,DiagnosticRequestedOutputsEnum);
++	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,StressbalanceRequestedOutputsEnum);
++	parameters->AddObject(new IntParam(StressbalanceNumRequestedOutputsEnum,numoutputs));
++	if(numoutputs)parameters->AddObject(new IntVecParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(requestedoutputs,StressbalanceRequestedOutputsEnum);
+ 
+ 	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,TransientRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(TransientNumRequestedOutputsEnum,numoutputs));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15771)
+@@ -15,7 +15,7 @@
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){
+ 
+ 	int   i,analysis_type,verbose;
+-	bool  isthermal,ismasstransport,isdiagnostic,isgroundingline,isenthalpy;
++	bool  isthermal,ismasstransport,isstressbalance,isgroundingline,isenthalpy;
+ 
+ 	/*output: */
+ 	Elements    *elements    = NULL;
+@@ -34,7 +34,7 @@
+ 	iomodel->Constant(&isthermal,TransientIsthermalEnum);
+ 	iomodel->Constant(&isenthalpy,ThermalIsenthalpyEnum);
+ 	iomodel->Constant(&ismasstransport,TransientIsmasstransportEnum);
+-	iomodel->Constant(&isdiagnostic,TransientIsdiagnosticEnum);
++	iomodel->Constant(&isstressbalance,TransientIsstressbalanceEnum);
+ 	iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
+ 
+ 	SetVerbosityLevel(verbose);
+@@ -56,9 +56,9 @@
+ 		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==MasstransportAnalysisEnum && ismasstransport==false && isgroundingline==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticHorizAnalysisEnum && isdiagnostic==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticVertAnalysisEnum && isdiagnostic==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticSIAAnalysisEnum && isdiagnostic==false) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==StressbalanceAnalysisEnum && isstressbalance==false) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==StressbalanceVerticalAnalysisEnum && isstressbalance==false) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==StressbalanceSIAAnalysisEnum && isstressbalance==false) continue;
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15771)
+@@ -39,26 +39,26 @@
+ 	/*Now, branch onto analysis dependent model generation: */
+ 	switch(analysis_type){
+ 
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			CreateNodesDiagnosticHoriz(pnodes, iomodel);
+-			CreateConstraintsDiagnosticHoriz(pconstraints,iomodel);
+-			CreateLoadsDiagnosticHoriz(ploads,iomodel);
+-			UpdateElementsDiagnosticHoriz(elements,iomodel,analysis_counter,analysis_type);
++		#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			CreateNodesStressbalance(pnodes,iomodel);
++			CreateConstraintsStressbalance(pconstraints,iomodel);
++			CreateLoadsStressbalance(ploads,iomodel);
++			UpdateElementsStressbalance(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 
+-		case DiagnosticVertAnalysisEnum:
+-			CreateNodesDiagnosticVert(pnodes, iomodel);
+-			CreateConstraintsDiagnosticVert(pconstraints,iomodel);
+-			CreateLoadsDiagnosticVert(ploads,iomodel);
+-			UpdateElementsDiagnosticVert(elements,iomodel,analysis_counter,analysis_type);
++		case StressbalanceVerticalAnalysisEnum:
++			CreateNodesStressbalanceVertical(pnodes, iomodel);
++			CreateConstraintsStressbalanceVertical(pconstraints,iomodel);
++			CreateLoadsStressbalanceVertical(ploads,iomodel);
++			UpdateElementsStressbalanceVertical(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 
+-		case DiagnosticSIAAnalysisEnum:
+-			CreateNodesDiagnosticSIA(pnodes, iomodel);
+-			CreateConstraintsDiagnosticSIA(pconstraints,iomodel);
+-			CreateLoadsDiagnosticSIA(ploads,iomodel);
+-			UpdateElementsDiagnosticSIA(elements,iomodel,analysis_counter,analysis_type);
++		case StressbalanceSIAAnalysisEnum:
++			CreateNodesStressbalanceSIA(pnodes, iomodel);
++			CreateConstraintsStressbalanceSIA(pconstraints,iomodel);
++			CreateLoadsStressbalanceSIA(ploads,iomodel);
++			UpdateElementsStressbalanceSIA(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 15771)
+@@ -109,7 +109,7 @@
+ 	/*We might have vertex_pairing in which case, some vertices have to be cloned:
+ 	 * penpair has 2 nodes that are poointing toward 2 vertices.
+ 	 * The 2 vertices must be in the same cpu as the penpair*/
+-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,DiagnosticVertexPairingEnum);
++	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,StressbalanceVertexPairingEnum);
+ 	for(i=0;i<numvertex_pairing;i++){
+ 		if(my_vertices[vertex_pairing[2*i+0]-1] && !my_vertices[vertex_pairing[2*i+1]-1]){
+ 			my_vertices[vertex_pairing[2*i+1]-1]=2; //to know that these elements are not on the partition
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 15771)
+@@ -19,7 +19,7 @@
+ 	if(VerboseModule()) _printf0_("   Constraining penalties\n");
+ 
+ 	/*recover parameters: */
+-	parameters->FindParam(&min_mechanical_constraints,DiagnosticRiftPenaltyThresholdEnum);
++	parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	/*Do we have penalties linked to rifts? In this case, run our special rifts penalty 
+Index: ../trunk-jpl/src/c/solutionsequences/convergence.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/convergence.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/solutionsequences/convergence.cpp	(revision 15771)
+@@ -39,9 +39,9 @@
+ 	}
+ 
+ 	/*get convergence options*/
+-	parameters->FindParam(&eps_res,DiagnosticRestolEnum);
+-	parameters->FindParam(&eps_rel,DiagnosticReltolEnum);
+-	parameters->FindParam(&eps_abs,DiagnosticAbstolEnum);
++	parameters->FindParam(&eps_res,StressbalanceRestolEnum);
++	parameters->FindParam(&eps_rel,StressbalanceReltolEnum);
++	parameters->FindParam(&eps_abs,StressbalanceAbstolEnum);
+ 	parameters->FindParam(&yts,ConstantsYtsEnum);
+ 
+ 	/*Display solver caracteristics*/
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15771)
+@@ -32,9 +32,9 @@
+ 	int  configuration_type;
+ 
+ 	/*Recover parameters: */
+-	femmodel->parameters->FindParam(&max_nonlinear_iterations,DiagnosticMaxiterEnum);
++	femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum);
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	femmodel->parameters->FindParam(&newton,DiagnosticIsnewtonEnum);
++	femmodel->parameters->FindParam(&newton,StressbalanceIsnewtonEnum);
+ 	femmodel->UpdateConstraintsx();
+ 
+ 	count=1;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15771)
+@@ -34,22 +34,22 @@
+ 	int  configuration_type;
+ 
+ 	/*Recover parameters: */
+-	femmodel->parameters->FindParam(&min_mechanical_constraints,DiagnosticRiftPenaltyThresholdEnum);
+-	femmodel->parameters->FindParam(&max_nonlinear_iterations,DiagnosticMaxiterEnum);
++	femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum);
++	femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum);
+ 	femmodel->UpdateConstraintsx();
+ 
+ 	count=1;
+ 	converged=false;
+ 
+ 	/*First get ug_horiz:*/
+-	femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
++	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+ 	GetSolutionFromInputsx(&ug_horiz, femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters);
+ 	Reducevectorgtofx(&uf_horiz, ug_horiz, femmodel->nodes,femmodel->parameters);
+ 
+ 	for(;;){
+ 
+-		/*First diagnostic horiz:*/
+-		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
++		/*First stressbalance horiz:*/
++		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+ 		femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+ 		//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
+@@ -70,7 +70,7 @@
+ 		convergence(&converged,Kff_horiz,pf_horiz,uf_horiz,old_uf_horiz,femmodel->parameters); delete Kff_horiz; delete pf_horiz; delete df_horiz;
+ 
+ 		/*Second compute vertical velocity: */
+-		femmodel->SetCurrentConfiguration(DiagnosticVertAnalysisEnum);
++		femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum);
+ 		femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+ 		/*solve: */
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 15771)
+@@ -32,8 +32,8 @@
+ 	int configuration_type;
+ 
+ 	/*Recover parameters: */
+-	femmodel->parameters->FindParam(&min_mechanical_constraints,DiagnosticRiftPenaltyThresholdEnum);
+-	femmodel->parameters->FindParam(&max_nonlinear_iterations,DiagnosticMaxiterEnum);
++	femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum);
++	femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum);
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	femmodel->UpdateConstraintsx();
+ 
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15770)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15771)
+@@ -439,7 +439,7 @@
+ 					  ./analyses/controltao_core.cpp\
+ 					  ./analyses/objectivefunction.cpp\
+ 					  ./analyses/gradient_core.cpp\
+-					  ./analyses/adjointdiagnostic_core.cpp\
++					  ./analyses/adjointstressbalance_core.cpp\
+ 					  ./analyses/adjointbalancethickness_core.cpp\
+ 					  ./analyses/AdjointCorePointerFromSolutionEnum.cpp\
+ 					  ./solutionsequences/solutionsequence_adjoint_linear.cpp
+@@ -464,20 +464,20 @@
+ 							./analyses/hydrology_core.cpp\
+ 							./solutionsequences/solutionsequence_hydro_nonlinear.cpp
+ #}}}
+-#Diagnostic sources  {{{
+-diagnostic_sources = ./modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp\
+-					      ./modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp \
+-					      ./modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp \
+-					      ./modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp\
+-					      ./modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp\
+-					      ./modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp \
+-					      ./modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp \
+-					      ./modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp\
+-					      ./modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp\
+-					      ./modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp \
+-					      ./modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp \
+-							./modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp \
+-							./analyses/diagnostic_core.cpp\
++#Stressbalance sources  {{{
++stressbalance_sources = ./modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp\
++					      ./modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp \
++					      ./modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp \
++					      ./modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp\
++					      ./modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp\
++					      ./modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp \
++					      ./modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp \
++					      ./modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp\
++					      ./modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp\
++					      ./modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp \
++					      ./modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp \
++							./modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp \
++							./analyses/stressbalance_core.cpp\
+ 							./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+ #}}}
+ #Balanced sources  {{{
+@@ -889,8 +889,8 @@
+ issm_sources  +=  $(hydrology_sources)
+ endif
+ 
+-if DIAGNOSTIC
+-issm_sources  +=  $(diagnostic_sources)
++if STRESSBALANCE
++issm_sources  +=  $(stressbalance_sources)
+ endif
+ 
+ if BALANCED
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15771)
+@@ -172,8 +172,8 @@
+ 	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	switch(analysis_type){
+-		case DiagnosticHorizAnalysisEnum:
+-			Ke=PenaltyCreateKMatrixDiagnosticHoriz(kmax);
++		case StressbalanceAnalysisEnum:
++			Ke=PenaltyCreateKMatrixStressbalanceHoriz(kmax);
+ 			break;
+ 		case MasstransportAnalysisEnum:
+ 			Ke=PenaltyCreateKMatrixMasstransport(kmax);
+@@ -291,8 +291,8 @@
+ /*}}}*/
+ 
+ /*Penpair management:*/
+-/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticHoriz{{{*/
+-ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax){
++/*FUNCTION Penpair::PenaltyCreateKMatrixStressbalanceHoriz{{{*/
++ElementMatrix* Penpair::PenaltyCreateKMatrixStressbalanceHoriz(IssmDouble kmax){
+ 
+ 	int    approximation0=nodes[0]->GetApproximation();
+ 	int    approximation1=nodes[1]->GetApproximation();
+@@ -300,34 +300,34 @@
+ 	switch(approximation0){
+ 		case SSAApproximationEnum:
+ 			switch(approximation1){
+-				case SSAApproximationEnum: return PenaltyCreateKMatrixDiagnosticSSAHO(kmax); 
+-				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticSSAHO(kmax); 
++				case SSAApproximationEnum: return PenaltyCreateKMatrixStressbalanceSSAHO(kmax); 
++				case HOApproximationEnum:   return PenaltyCreateKMatrixStressbalanceSSAHO(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+ 		case HOApproximationEnum:
+ 			switch(approximation1){
+-				case SSAApproximationEnum: return PenaltyCreateKMatrixDiagnosticSSAHO(kmax); 
+-				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticSSAHO(kmax); 
++				case SSAApproximationEnum: return PenaltyCreateKMatrixStressbalanceSSAHO(kmax); 
++				case HOApproximationEnum:   return PenaltyCreateKMatrixStressbalanceSSAHO(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+ 		case FSApproximationEnum:
+ 			switch(approximation1){
+-				case FSApproximationEnum: return PenaltyCreateKMatrixDiagnosticFS(kmax); 
+-				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticFS(kmax); 
++				case FSApproximationEnum: return PenaltyCreateKMatrixStressbalanceFS(kmax); 
++				case NoneApproximationEnum: return   PenaltyCreateKMatrixStressbalanceFS(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+ 		case NoneApproximationEnum:
+ 			switch(approximation1){
+-				case FSApproximationEnum: return PenaltyCreateKMatrixDiagnosticFS(kmax); 
+-				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticFS(kmax); 
++				case FSApproximationEnum: return PenaltyCreateKMatrixStressbalanceFS(kmax); 
++				case NoneApproximationEnum: return   PenaltyCreateKMatrixStressbalanceFS(kmax); 
+ 				default: _error_("not supported yet");
+ 			}
+ 		default: _error_("not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticSSAHO {{{*/
+-ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticSSAHO(IssmDouble kmax){
++/*FUNCTION Penpair::PenaltyCreateKMatrixStressbalanceSSAHO {{{*/
++ElementMatrix* Penpair::PenaltyCreateKMatrixStressbalanceSSAHO(IssmDouble kmax){
+ 
+ 	const int numdof=NUMVERTICES*NDOF2;
+ 	IssmDouble penalty_offset;
+@@ -336,7 +336,7 @@
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters);
+ 
+ 	/*recover parameters: */
+-	parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
++	parameters->FindParam(&penalty_offset,StressbalancePenaltyFactorEnum);
+ 
+ 	//Create elementary matrix: add penalty to 
+ 	Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_offset);
+@@ -353,8 +353,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticFS {{{*/
+-ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax){
++/*FUNCTION Penpair::PenaltyCreateKMatrixStressbalanceFS {{{*/
++ElementMatrix* Penpair::PenaltyCreateKMatrixStressbalanceFS(IssmDouble kmax){
+ 
+ 	const int numdof=NUMVERTICES*NDOF4;
+ 	IssmDouble penalty_offset;
+@@ -363,7 +363,7 @@
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters);
+ 
+ 	/*recover parameters: */
+-	parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
++	parameters->FindParam(&penalty_offset,StressbalancePenaltyFactorEnum);
+ 
+ 	//Create elementary matrix: add penalty to 
+ 	Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_offset);
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 15771)
+@@ -88,8 +88,8 @@
+ 		/*}}}*/
+ 		/*Riftfront specific routines: {{{*/
+ 		bool  PreStable();
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax);
+-		ElementVector* PenaltyCreatePVectorDiagnosticHoriz(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixStressbalanceHoriz(IssmDouble kmax);
++		ElementVector* PenaltyCreatePVectorStressbalanceHoriz(IssmDouble kmax);
+ 		void  SetPreStable();
+ 		int   PreConstrain(int* punstable);
+ 		int   Constrain(int* punstable);
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15771)
+@@ -66,9 +66,9 @@
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 			/*Penpair management: {{{*/
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax);
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticSSAHO(IssmDouble kmax);
+-		ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixStressbalanceHoriz(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixStressbalanceSSAHO(IssmDouble kmax);
++		ElementMatrix* PenaltyCreateKMatrixStressbalanceFS(IssmDouble kmax);
+ 		ElementMatrix* PenaltyCreateKMatrixMasstransport(IssmDouble kmax);
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15771)
+@@ -260,7 +260,7 @@
+ 		case MeltingAnalysisEnum:
+ 			pe=PenaltyCreatePVectorMelting(kmax);
+ 			break;
+-		case DiagnosticHorizAnalysisEnum: case AdjointHorizAnalysisEnum:
++		case StressbalanceAnalysisEnum: case AdjointHorizAnalysisEnum:
+ 			break;
+ 		#endif
+ 		#ifdef _HAVE_HYDROLOGY_
+@@ -417,7 +417,7 @@
+ 	/*Retrieve parameters: */
+ 	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+-	if (analysis_type==DiagnosticHorizAnalysisEnum){
++	if (analysis_type==StressbalanceAnalysisEnum){
+ 		/*No penalty to check*/
+ 		return;
+ 	}
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15771)
+@@ -50,7 +50,7 @@
+ 	int node1  ,node2;
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&penalty_lock,DiagnosticRiftPenaltyLockEnum);
++	iomodel->Constant(&penalty_lock,StressbalanceRiftPenaltyLockEnum);
+ 
+ 	/*Ok, retrieve all the data needed to add a penalty between the two nodes: */
+ 	el1=reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+2));
+@@ -307,11 +307,11 @@
+ 	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	switch(analysis_type){
+-		case DiagnosticHorizAnalysisEnum:
+-			Ke=PenaltyCreateKMatrixDiagnosticHoriz(kmax);
++		case StressbalanceAnalysisEnum:
++			Ke=PenaltyCreateKMatrixStressbalanceHoriz(kmax);
+ 			break;
+ 		case AdjointHorizAnalysisEnum:
+-			Ke=PenaltyCreateKMatrixDiagnosticHoriz(kmax);
++			Ke=PenaltyCreateKMatrixStressbalanceHoriz(kmax);
+ 			break;
+ 		default:
+ 			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+@@ -333,8 +333,8 @@
+ 	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	switch(analysis_type){
+-		case DiagnosticHorizAnalysisEnum:
+-			pe=PenaltyCreatePVectorDiagnosticHoriz(kmax);
++		case StressbalanceAnalysisEnum:
++			pe=PenaltyCreatePVectorStressbalanceHoriz(kmax);
+ 			break;
+ 		case AdjointHorizAnalysisEnum:
+ 			/*No penalty applied on load vector*/
+@@ -436,8 +436,8 @@
+ /*}}}*/
+ 
+ /*Riftfront numerics*/
+-/*FUNCTION Riftfront::PenaltyCreateKMatrixDiagnosticHoriz {{{*/
+-ElementMatrix* Riftfront::PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax){
++/*FUNCTION Riftfront::PenaltyCreateKMatrixStressbalanceHoriz {{{*/
++ElementMatrix* Riftfront::PenaltyCreateKMatrixStressbalanceHoriz(IssmDouble kmax){
+ 
+ 	const int   numdof = NDOF2*NUMVERTICES;
+ 	int         dofs[1]             = {0};
+@@ -460,7 +460,7 @@
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters);
+ 
+ 	/*Get some parameters: */
+-	this->parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
++	this->parameters->FindParam(&penalty_offset,StressbalancePenaltyFactorEnum);
+ 	this->inputs->GetInputValue(&friction,FrictionEnum);
+ 	tria1->GetInputValue(&h[0],nodes[0],ThicknessEnum);
+ 	tria2->GetInputValue(&h[1],nodes[1],ThicknessEnum);
+@@ -517,8 +517,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Riftfront::PenaltyCreatePVectorDiagnosticHoriz {{{*/
+-ElementVector* Riftfront::PenaltyCreatePVectorDiagnosticHoriz(IssmDouble kmax){
++/*FUNCTION Riftfront::PenaltyCreatePVectorStressbalanceHoriz {{{*/
++ElementVector* Riftfront::PenaltyCreatePVectorStressbalanceHoriz(IssmDouble kmax){
+ 
+ 	const int  numdof = NDOF2*NUMVERTICES;
+ 	int        j;
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 15771)
+@@ -67,7 +67,7 @@
+ 		void  CreateNodalConstraints(Vector<IssmDouble>* ys);
+ 		void  SetCurrentConfiguration(DataSet* nodes,Vertices* vertices);
+ 		int   Sid(void); 
+-#ifdef _HAVE_DIAGNOSTIC_
++#ifdef _HAVE_STRESSBALANCE_
+ 		void  GetCoordinateSystem(IssmDouble* coord_system_out);
+ #endif
+ 		bool  InAnalysis(int analysis_type);
+@@ -102,7 +102,7 @@
+ int* GetLocalDofList(Node** nodes,int numnodes,int setenum,int approximation);
+ int* GetGlobalDofList(Node** nodes,int numnodes,int setenum,int approximation);
+ int  GetNumberOfDofs(Node** nodes,int numnodes,int setenum,int approximation);
+-#ifdef _HAVE_DIAGNOSTIC_
++#ifdef _HAVE_STRESSBALANCE_
+ void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum);
+ void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int* cs_array);
+ void TransformLoadVectorCoord(ElementVector* pe,Node** nodes,int numnodes,int cs_enum);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15771)
+@@ -214,12 +214,12 @@
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			return CreateKMatrixDiagnosticSSA();
++		#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			return CreateKMatrixStressbalanceSSA();
+ 			break;
+-		case DiagnosticSIAAnalysisEnum:
+-			return CreateKMatrixDiagnosticSIA();
++		case StressbalanceSIAAnalysisEnum:
++			return CreateKMatrixStressbalanceSIA();
+ 			break;
+ 		 #endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+@@ -356,12 +356,12 @@
+ 
+ 	/*Just branch to the correct load generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			return CreatePVectorDiagnosticSSA();
++#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			return CreatePVectorStressbalanceSSA();
+ 			break;
+-		case DiagnosticSIAAnalysisEnum:
+-			return CreatePVectorDiagnosticSIA();
++		case StressbalanceSIAAnalysisEnum:
++			return CreatePVectorStressbalanceSIA();
+ 			break;
+ #endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+@@ -471,9 +471,9 @@
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			Ke=CreateJacobianDiagnosticSSA();
++#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			Ke=CreateJacobianStressbalanceSSA();
+ 			break;
+ #endif
+ 		default:
+@@ -1247,12 +1247,12 @@
+ 
+ 	/*Just branch to the correct InputUpdateFromSolution generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-	#ifdef _HAVE_DIAGNOSTIC_
+-	case DiagnosticHorizAnalysisEnum:
+-		GetSolutionFromInputsDiagnosticHoriz(solution);
++	#ifdef _HAVE_STRESSBALANCE_
++	case StressbalanceAnalysisEnum:
++		GetSolutionFromInputsStressbalanceHoriz(solution);
+ 		break;
+-	case DiagnosticSIAAnalysisEnum:
+-		GetSolutionFromInputsDiagnosticSIA(solution);
++	case StressbalanceSIAAnalysisEnum:
++		GetSolutionFromInputsStressbalanceSIA(solution);
+ 		break;
+ 	#endif
+ 	#ifdef _HAVE_HYDROLOGY_
+@@ -1568,12 +1568,12 @@
+ 
+ 	/*Just branch to the correct InputUpdateFromSolution generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			InputUpdateFromSolutionDiagnosticHoriz(solution);
++		#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			InputUpdateFromSolutionStressbalanceHoriz(solution);
+ 			break;
+-		case DiagnosticSIAAnalysisEnum:
+-			InputUpdateFromSolutionDiagnosticHoriz(solution);
++		case StressbalanceSIAAnalysisEnum:
++			InputUpdateFromSolutionStressbalanceHoriz(solution);
+ 			break;
+ 		#endif
+ 		#ifdef _HAVE_CONTROL_
+@@ -2462,7 +2462,7 @@
+ 	/*Defaults if not provided in iomodel*/
+ 	switch(analysis_type){
+ 
+-		case DiagnosticHorizAnalysisEnum:
++		case StressbalanceAnalysisEnum:
+ 
+ 			/*default vx,vy and vz: either observation or 0 */
+ 			if(!iomodel->Data(VxEnum)){
+@@ -2943,13 +2943,13 @@
+ /*}}}*/
+ #endif
+ 
+-#ifdef _HAVE_DIAGNOSTIC_
+-/*FUNCTION Tria::CreateKMatrixDiagnosticSSA {{{*/
+-ElementMatrix* Tria::CreateKMatrixDiagnosticSSA(void){
++#ifdef _HAVE_STRESSBALANCE_
++/*FUNCTION Tria::CreateKMatrixStressbalanceSSA {{{*/
++ElementMatrix* Tria::CreateKMatrixStressbalanceSSA(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticSSAViscous();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticSSAFriction();
++	ElementMatrix* Ke1=CreateKMatrixStressbalanceSSAViscous();
++	ElementMatrix* Ke2=CreateKMatrixStressbalanceSSAFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -2958,8 +2958,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixDiagnosticSSAViscous{{{*/
+-ElementMatrix* Tria::CreateKMatrixDiagnosticSSAViscous(void){
++/*FUNCTION Tria::CreateKMatrixStressbalanceSSAViscous{{{*/
++ElementMatrix* Tria::CreateKMatrixStressbalanceSSAViscous(void){
+ 
+ 	/*Intermediaries*/
+ 	int        i,j;
+@@ -2986,7 +2986,7 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vxold_input=inputs->GetInput(VxPicardEnum);      _assert_(vxold_input);
+ 	Input* vyold_input=inputs->GetInput(VyPicardEnum);      _assert_(vyold_input);
+-	this->parameters->FindParam(&viscosity_overshoot,DiagnosticViscosityOvershootEnum);
++	this->parameters->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss  = new GaussTria(2);
+@@ -3025,8 +3025,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixDiagnosticSSAFriction {{{*/
+-ElementMatrix* Tria::CreateKMatrixDiagnosticSSAFriction(void){
++/*FUNCTION Tria::CreateKMatrixStressbalanceSSAFriction {{{*/
++ElementMatrix* Tria::CreateKMatrixStressbalanceSSAFriction(void){
+ 
+ 	/*Intermediaries*/
+ 	bool       mainlyfloating;
+@@ -3113,8 +3113,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateKMatrixDiagnosticSIA{{{*/
+-ElementMatrix* Tria::CreateKMatrixDiagnosticSIA(void){
++/*FUNCTION Tria::CreateKMatrixStressbalanceSIA{{{*/
++ElementMatrix* Tria::CreateKMatrixStressbalanceSIA(void){
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble connectivity;
+@@ -3137,12 +3137,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorDiagnosticSSA {{{*/
+-ElementVector* Tria::CreatePVectorDiagnosticSSA(){
++/*FUNCTION Tria::CreatePVectorStressbalanceSSA {{{*/
++ElementVector* Tria::CreatePVectorStressbalanceSSA(){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticSSADrivingStress();
+-	ElementVector* pe2=CreatePVectorDiagnosticSSAFront();
++	ElementVector* pe1=CreatePVectorStressbalanceSSADrivingStress();
++	ElementVector* pe2=CreatePVectorStressbalanceSSAFront();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -3151,8 +3151,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorDiagnosticSSADrivingStress {{{*/
+-ElementVector* Tria::CreatePVectorDiagnosticSSADrivingStress(){
++/*FUNCTION Tria::CreatePVectorStressbalanceSSADrivingStress {{{*/
++ElementVector* Tria::CreatePVectorStressbalanceSSADrivingStress(){
+ 
+ 	/*Intermediaries */
+ 	int        i;
+@@ -3206,8 +3206,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorDiagnosticSSAFront {{{*/
+-ElementVector* Tria::CreatePVectorDiagnosticSSAFront(){
++/*FUNCTION Tria::CreatePVectorStressbalanceSSAFront {{{*/
++ElementVector* Tria::CreatePVectorStressbalanceSSAFront(){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble  ls[NUMVERTICES];
+@@ -3286,8 +3286,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorDiagnosticSIA{{{*/
+-ElementVector* Tria::CreatePVectorDiagnosticSIA(void){
++/*FUNCTION Tria::CreatePVectorStressbalanceSIA{{{*/
++ElementVector* Tria::CreatePVectorStressbalanceSIA(void){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble constant_part,ub,vb;
+@@ -3338,8 +3338,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateJacobianDiagnosticSSA{{{*/
+-ElementMatrix* Tria::CreateJacobianDiagnosticSSA(void){
++/*FUNCTION Tria::CreateJacobianStressbalanceSSA{{{*/
++ElementMatrix* Tria::CreateJacobianStressbalanceSSA(void){
+ 
+ 	/*Intermediaries */
+ 	int        i,j;
+@@ -3357,7 +3357,7 @@
+ 	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element matrix, vectors and Gaussian points*/
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticSSA(); //Initialize Jacobian with regular SSA (first part of the Gateau derivative)
++	ElementMatrix* Ke=CreateKMatrixStressbalanceSSA(); //Initialize Jacobian with regular SSA (first part of the Gateau derivative)
+ 	IssmDouble*    dbasis = xNew<IssmDouble>(2*numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -3405,8 +3405,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetSolutionFromInputsDiagnosticHoriz{{{*/
+-void  Tria::GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution){
++/*FUNCTION Tria::GetSolutionFromInputsStressbalanceHoriz{{{*/
++void  Tria::GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solution){
+ 
+ 	IssmDouble   vx,vy;
+ 	int*         doflist = NULL;
+@@ -3444,8 +3444,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetSolutionFromInputsDiagnosticSIA{{{*/
+-void  Tria::GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution){
++/*FUNCTION Tria::GetSolutionFromInputsStressbalanceSIA{{{*/
++void  Tria::GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -3483,8 +3483,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputUpdateFromSolutionDiagnosticHoriz {{{*/
+-void  Tria::InputUpdateFromSolutionDiagnosticHoriz(IssmDouble* solution){
++/*FUNCTION Tria::InputUpdateFromSolutionStressbalanceHoriz {{{*/
++void  Tria::InputUpdateFromSolutionStressbalanceHoriz(IssmDouble* solution){
+ 
+ 	int        i;
+ 	IssmDouble rho_ice,g;
+@@ -3555,8 +3555,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputUpdateFromSolutionDiagnosticSIA {{{*/
+-void  Tria::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){
++/*FUNCTION Tria::InputUpdateFromSolutionStressbalanceSIA {{{*/
++void  Tria::InputUpdateFromSolutionStressbalanceSIA(IssmDouble* solution){
+ 
+ 	int        i;
+ 	IssmDouble rho_ice,g;
+@@ -5283,7 +5283,7 @@
+ 
+ 	/*Initialize Jacobian with regular SSA (first part of the Gateau derivative)*/
+ 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticSSA();
++	ElementMatrix* Ke=CreateKMatrixStressbalanceSSA();
+ 	if(incomplete_adjoint) return Ke;
+ 
+ 	/*Retrieve all inputs and parameters*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15771)
+@@ -221,20 +221,20 @@
+ 		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+ 		void             UpdateConstraints(void);
+ 
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		ElementMatrix* CreateKMatrixDiagnosticSSA(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSSAViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSSAFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSIA(void);
+-		ElementVector* CreatePVectorDiagnosticSSA(void);
+-		ElementVector* CreatePVectorDiagnosticSSADrivingStress(void);
+-		ElementVector* CreatePVectorDiagnosticSSAFront(void);
+-		ElementVector* CreatePVectorDiagnosticSIA(void);
+-		ElementMatrix* CreateJacobianDiagnosticSSA(void);
+-		void	  GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution);
+-		void	  GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution);
+-		void	  InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solution);
+-		void	  InputUpdateFromSolutionDiagnosticSIA( IssmDouble* solution);
++		#ifdef _HAVE_STRESSBALANCE_
++		ElementMatrix* CreateKMatrixStressbalanceSSA(void);
++		ElementMatrix* CreateKMatrixStressbalanceSSAViscous(void);
++		ElementMatrix* CreateKMatrixStressbalanceSSAFriction(void);
++		ElementMatrix* CreateKMatrixStressbalanceSIA(void);
++		ElementVector* CreatePVectorStressbalanceSSA(void);
++		ElementVector* CreatePVectorStressbalanceSSADrivingStress(void);
++		ElementVector* CreatePVectorStressbalanceSSAFront(void);
++		ElementVector* CreatePVectorStressbalanceSIA(void);
++		ElementMatrix* CreateJacobianStressbalanceSSA(void);
++		void	  GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solution);
++		void	  GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solution);
++		void	  InputUpdateFromSolutionStressbalanceHoriz( IssmDouble* solution);
++		void	  InputUpdateFromSolutionStressbalanceSIA( IssmDouble* solution);
+ 		#endif
+ 
+ 		#ifdef _HAVE_CONTROL_
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15771)
+@@ -183,7 +183,7 @@
+ 	Input* vz_input=inputs->GetInput(VzEnum);                         _assert_(vz_input);
+ 
+ 	/*Build friction element, needed later: */
+-	friction=new Friction("3d",inputs,matpar,DiagnosticHorizAnalysisEnum);
++	friction=new Friction("3d",inputs,matpar,StressbalanceAnalysisEnum);
+ 
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+@@ -232,11 +232,11 @@
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	/*Check analysis_types*/
+-	if (analysis_type!=DiagnosticHorizAnalysisEnum) _error_("Not supported yet!");
++	if (analysis_type!=StressbalanceAnalysisEnum) _error_("Not supported yet!");
+ 	if (approximation!=FSApproximationEnum) _error_("Not supported yet!");
+ 
+ 	/*retrieve some parameters: */
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 
+ 	if(!IsOnBed()){
+ 		//put zero
+@@ -402,7 +402,7 @@
+ 	if(Ke){
+ 		int analysis_type;
+ 		parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-		if(analysis_type==DiagnosticHorizAnalysisEnum){
++		if(analysis_type==StressbalanceAnalysisEnum){
+ 			int approximation;
+ 			inputs->GetInputValue(&approximation,ApproximationEnum);
+ 			if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+@@ -449,18 +449,18 @@
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			return CreateKMatrixDiagnosticHoriz();
++		#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			return CreateKMatrixStressbalanceHoriz();
+ 			break;
+ 		case AdjointHorizAnalysisEnum:
+ 			return CreateKMatrixAdjointHoriz();
+ 			break;
+-		case DiagnosticSIAAnalysisEnum:
+-			return CreateKMatrixDiagnosticSIA();
++		case StressbalanceSIAAnalysisEnum:
++			return CreateKMatrixStressbalanceSIA();
+ 			break;
+-		case DiagnosticVertAnalysisEnum:
+-			return CreateKMatrixDiagnosticVert();
++		case StressbalanceVerticalAnalysisEnum:
++			return CreateKMatrixStressbalanceVert();
+ 			break;
+ 		#endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+@@ -549,9 +549,9 @@
+ 	/*}}}*/
+ 
+ 	switch(analysis_type){
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			De=CreateDVectorDiagnosticHoriz();
++		#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			De=CreateDVectorStressbalanceHoriz();
+ 			break;
+ 		#endif
+ 	}
+@@ -575,7 +575,7 @@
+ 	if(pe){
+ 		int analysis_type;
+ 		parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-		if(analysis_type==DiagnosticHorizAnalysisEnum){
++		if(analysis_type==StressbalanceAnalysisEnum){
+ 			/*StaticCondensation if requested*/
+ 			if(this->element_type==MINIcondensedEnum){
+ 				int approximation;
+@@ -587,7 +587,7 @@
+ 					int indices[3]={18,19,20};
+ 
+ 					this->element_type=MINIEnum;
+-					ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
++					ElementMatrix* Ke = CreateKMatrixStressbalanceFS();
+ 					this->element_type=MINIcondensedEnum;
+ 
+ 					pe->StaticCondensation(Ke,3,&indices[0]);
+@@ -632,15 +632,15 @@
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-		#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			return CreatePVectorDiagnosticHoriz();
++		#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			return CreatePVectorStressbalanceHoriz();
+ 			break;
+-		case DiagnosticSIAAnalysisEnum:
+-			return CreatePVectorDiagnosticSIA();
++		case StressbalanceSIAAnalysisEnum:
++			return CreatePVectorStressbalanceSIA();
+ 			break;
+-		case DiagnosticVertAnalysisEnum:
+-			return CreatePVectorDiagnosticVert();
++		case StressbalanceVerticalAnalysisEnum:
++			return CreatePVectorStressbalanceVert();
+ 			break;
+ 		#endif
+ 	 	#ifdef _HAVE_CONTROL_
+@@ -739,9 +739,9 @@
+ 
+ 	/*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-#ifdef _HAVE_DIAGNOSTIC_
+-		case DiagnosticHorizAnalysisEnum:
+-			Ke=CreateJacobianDiagnosticHoriz();
++#ifdef _HAVE_STRESSBALANCE_
++		case StressbalanceAnalysisEnum:
++			Ke=CreateJacobianStressbalanceHoriz();
+ 			break;
+ #endif
+ 		default:
+@@ -1378,25 +1378,25 @@
+ 
+ 	/*Just branch to the correct InputUpdateFromSolution generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-	#ifdef _HAVE_DIAGNOSTIC_
+-	case DiagnosticHorizAnalysisEnum:
++	#ifdef _HAVE_STRESSBALANCE_
++	case StressbalanceAnalysisEnum:
+ 		int approximation;
+ 		inputs->GetInputValue(&approximation,ApproximationEnum);
+ 		if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+-			GetSolutionFromInputsDiagnosticFS(solution);
++			GetSolutionFromInputsStressbalanceFS(solution);
+ 		}
+ 		else if (approximation==SSAApproximationEnum || approximation==HOApproximationEnum || approximation==SIAApproximationEnum){
+-			GetSolutionFromInputsDiagnosticHoriz(solution);
++			GetSolutionFromInputsStressbalanceHoriz(solution);
+ 		}
+ 		else if (approximation==SSAHOApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+ 			return; //the elements around will create the solution
+ 		}
+ 		break;
+-	case DiagnosticSIAAnalysisEnum:
+-		GetSolutionFromInputsDiagnosticSIA(solution);
++	case StressbalanceSIAAnalysisEnum:
++		GetSolutionFromInputsStressbalanceSIA(solution);
+ 		break;
+-	case DiagnosticVertAnalysisEnum:
+-		//GetSolutionFromInputsDiagnosticVert(solution);
++	case StressbalanceVerticalAnalysisEnum:
++		//GetSolutionFromInputsStressbalanceVert(solution);
+ 		GetSolutionFromInputsOneDof(solution, VzEnum);
+ 		break;
+ 	#endif
+@@ -2213,15 +2213,15 @@
+ 
+ 	/*Just branch to the correct InputUpdateFromSolution generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-	#ifdef _HAVE_DIAGNOSTIC_
+-	case DiagnosticHorizAnalysisEnum:
+-		InputUpdateFromSolutionDiagnosticHoriz( solution);
++	#ifdef _HAVE_STRESSBALANCE_
++	case StressbalanceAnalysisEnum:
++		InputUpdateFromSolutionStressbalanceHoriz( solution);
+ 		break;
+-	case DiagnosticSIAAnalysisEnum:
+-		InputUpdateFromSolutionDiagnosticSIA( solution);
++	case StressbalanceSIAAnalysisEnum:
++		InputUpdateFromSolutionStressbalanceSIA( solution);
+ 		break;
+-	case DiagnosticVertAnalysisEnum:
+-		InputUpdateFromSolutionDiagnosticVert( solution);
++	case StressbalanceVerticalAnalysisEnum:
++		InputUpdateFromSolutionStressbalanceVert( solution);
+ 		break;
+ 	#endif
+ 	#ifdef _HAVE_CONTROL_
+@@ -3072,7 +3072,7 @@
+ 	 *to the basal element*/
+ 	int analysis_type,approximation,numlayers;
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	if(analysis_type==DiagnosticHorizAnalysisEnum){
++	if(analysis_type==StressbalanceAnalysisEnum){
+ 		inputs->GetInputValue(&approximation,ApproximationEnum);
+ 		if(approximation==SSAHOApproximationEnum || approximation==SSAFSApproximationEnum){
+ 			parameters->FindParam(&numlayers,MeshNumberoflayersEnum);
+@@ -3449,7 +3449,7 @@
+ 	/*Defaults if not provided in iomodel*/
+ 	switch(analysis_type){
+ 
+-		case DiagnosticHorizAnalysisEnum:
++		case StressbalanceAnalysisEnum:
+ 
+ 			/*default vx,vy and vz: either observation or 0 */
+ 			if(!iomodel->Data(VxEnum)){
+@@ -5137,7 +5137,7 @@
+ 
+ 	/*Initialize Jacobian with regular HO (first part of the Gateau derivative)*/
+ 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticHO();
++	ElementMatrix* Ke=CreateKMatrixStressbalanceHO();
+ 	if(incomplete_adjoint) return Ke;
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -5202,7 +5202,7 @@
+ 
+ 	/*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/
+ 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke=CreateKMatrixStressbalanceFS();
+ 	if(incomplete_adjoint) return Ke;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -6111,7 +6111,7 @@
+ 	}
+ 
+ 	/*Recondition pressure and compute vel: */
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	for(i=0;i<pnumnodes;i++) lambdap[i]=lambdap[i]*FSreconditioning;
+ 
+ 	/*Add vx and vy as inputs to the tria element: */
+@@ -6621,23 +6621,23 @@
+ /*}}}*/
+ #endif
+ 
+-#ifdef _HAVE_DIAGNOSTIC_
+-/*FUNCTION Penta::CreateDVectorDiagnosticHoriz {{{*/
+-ElementVector* Penta::CreateDVectorDiagnosticHoriz(void){
++#ifdef _HAVE_STRESSBALANCE_
++/*FUNCTION Penta::CreateDVectorStressbalanceHoriz {{{*/
++ElementVector* Penta::CreateDVectorStressbalanceHoriz(void){
+ 
+ 	int approximation;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+ 		case FSApproximationEnum:
+-			return CreateDVectorDiagnosticFS();
++			return CreateDVectorStressbalanceFS();
+ 		default:
+ 			return NULL; //no need for doftypes outside of FS approximation
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateDVectorDiagnosticFS{{{*/
+-ElementVector* Penta::CreateDVectorDiagnosticFS(void){
++/*FUNCTION Penta::CreateDVectorStressbalanceFS{{{*/
++ElementVector* Penta::CreateDVectorStressbalanceFS(void){
+ 
+ 	/*output: */
+ 	ElementVector* De=NULL;
+@@ -6725,7 +6725,7 @@
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	this->parameters->FindParam(&viscosity_overshoot,DiagnosticViscosityOvershootEnum);
++	this->parameters->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* vxold_input=inputs->GetInput(VxPicardEnum); _assert_(vxold_input);
+@@ -6932,7 +6932,7 @@
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);       _assert_(vz_input);
+@@ -7042,7 +7042,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -7130,10 +7130,10 @@
+ 	
+ 	/*Compute HO Matrix with P1 element type\n");*/
+ 	this->element_type=P1Enum;
+-	Ke1=CreateKMatrixDiagnosticHO();
++	Ke1=CreateKMatrixStressbalanceHO();
+ 	this->element_type=init;
+ 	/*Compute FS Matrix and condense it \n");*/
+-	Ke2=CreateKMatrixDiagnosticFS(); 
++	Ke2=CreateKMatrixStressbalanceFS(); 
+ 	int indices[3]={18,19,20};
+ 	Ke2->StaticCondensation(3,&indices[0]);
+ 
+@@ -7155,37 +7155,37 @@
+ 	return Ke;
+ }
+ //*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticHoriz {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticHoriz(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceHoriz {{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceHoriz(void){
+ 
+ 	int approximation;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	switch(approximation){
+ 		case SSAApproximationEnum:
+-			return CreateKMatrixDiagnosticSSA2d();
++			return CreateKMatrixStressbalanceSSA2d();
+ 		case L1L2ApproximationEnum:
+-			return CreateKMatrixDiagnosticL1L2();
++			return CreateKMatrixStressbalanceL1L2();
+ 		case HOApproximationEnum:
+-			return CreateKMatrixDiagnosticHO();
++			return CreateKMatrixStressbalanceHO();
+ 		case FSApproximationEnum:
+-			return CreateKMatrixDiagnosticFS();
++			return CreateKMatrixStressbalanceFS();
+ 		case SIAApproximationEnum:
+ 			return NULL;
+ 		case NoneApproximationEnum:
+ 			return NULL;
+ 		case SSAHOApproximationEnum:
+-			return CreateKMatrixDiagnosticSSAHO();
++			return CreateKMatrixStressbalanceSSAHO();
+ 		case SSAFSApproximationEnum:
+-			return CreateKMatrixDiagnosticSSAFS();
++			return CreateKMatrixStressbalanceSSAFS();
+ 		case HOFSApproximationEnum:
+-			return CreateKMatrixDiagnosticHOFS();
++			return CreateKMatrixStressbalanceHOFS();
+ 		default:
+ 			_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticSIA{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticSIA(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceSIA{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceSIA(void){
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble connectivity[2];
+@@ -7247,8 +7247,8 @@
+ 	/*Clean up and return*/
+ 	return Ke;
+ }/*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticSSA2d{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticSSA2d(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceSSA2d{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceSSA2d(void){
+ 
+ 	/*Figure out if this penta is collapsed. If so, then bailout, except if it is at the 
+ 	  bedrock, in which case we spawn a tria element using the 3 first nodes, and use it to build 
+@@ -7270,7 +7270,7 @@
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSA();
++	ElementMatrix* Ke=tria->CreateKMatrixStressbalanceSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Delete averaged fields*/
+@@ -7281,12 +7281,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticSSA3d{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticSSA3d(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceSSA3d{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceSSA3d(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticSSA3dViscous();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticSSA3dFriction();
++	ElementMatrix* Ke1=CreateKMatrixStressbalanceSSA3dViscous();
++	ElementMatrix* Ke2=CreateKMatrixStressbalanceSSA3dFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -7295,8 +7295,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticSSA3dViscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticSSA3dViscous(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceSSA3dViscous{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceSSA3dViscous(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof2d=2*NUMVERTICES2D;
+@@ -7328,7 +7328,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	this->parameters->FindParam(&viscosity_overshoot,DiagnosticViscosityOvershootEnum);
++	this->parameters->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* vxold_input=inputs->GetInput(VxPicardEnum); _assert_(vxold_input);
+@@ -7383,8 +7383,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticSSA3dFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticSSA3dFriction(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceSSA3dFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceSSA3dFriction(void){
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+@@ -7393,19 +7393,19 @@
+ 	 * the tria functionality to build a friction stiffness matrix on these 3
+ 	 * nodes: */
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSAFriction();
++	ElementMatrix* Ke=tria->CreateKMatrixStressbalanceSSAFriction();
+ 	delete tria->material; delete tria;
+ 
+ 	/*clean-up and return*/
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticSSAHO{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticSSAHO(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceSSAHO{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceSSAHO(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticSSA3d();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticHO();
++	ElementMatrix* Ke1=CreateKMatrixStressbalanceSSA3d();
++	ElementMatrix* Ke2=CreateKMatrixStressbalanceHO();
+ 	ElementMatrix* Ke3=CreateKMatrixCouplingSSAHO();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+ 
+@@ -7416,16 +7416,16 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticSSAFS{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticSSAFS(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceSSAFS{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceSSAFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke1=CreateKMatrixStressbalanceFS();
+ 	int indices[3]={18,19,20};
+ 	Ke1->StaticCondensation(3,&indices[0]);
+ 	int init = this->element_type;
+ 	this->element_type=P1Enum; //P1 needed for HO 
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticSSA3d();
++	ElementMatrix* Ke2=CreateKMatrixStressbalanceSSA3d();
+ 	this->element_type=init;
+ 	ElementMatrix* Ke3=CreateKMatrixCouplingSSAFS();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+@@ -7437,12 +7437,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticL1L2{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticL1L2(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceL1L2{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceL1L2(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticL1L2Viscous();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticL1L2Friction();
++	ElementMatrix* Ke1=CreateKMatrixStressbalanceL1L2Viscous();
++	ElementMatrix* Ke2=CreateKMatrixStressbalanceL1L2Friction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -7451,8 +7451,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticL1L2Viscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticL1L2Viscous(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceL1L2Viscous{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceL1L2Viscous(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof2d=2*NUMVERTICES2D;
+@@ -7519,8 +7519,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticL1L2Friction{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticL1L2Friction(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceL1L2Friction{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceL1L2Friction(void){
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(IsFloating() || !IsOnBed()) return NULL;
+@@ -7529,19 +7529,19 @@
+ 	 * the tria functionality to build a friction stiffness matrix on these 3
+ 	 * nodes: */
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSAFriction();
++	ElementMatrix* Ke=tria->CreateKMatrixStressbalanceSSAFriction();
+ 	delete tria->material; delete tria;
+ 
+ 	/*clean-up and return*/
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticHO{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticHO(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceHO{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceHO(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticHOViscous();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticHOFriction();
++	ElementMatrix* Ke1=CreateKMatrixStressbalanceHOViscous();
++	ElementMatrix* Ke2=CreateKMatrixStressbalanceHOFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -7551,8 +7551,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticHOViscous{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticHOViscous(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceHOViscous{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceHOViscous(void){
+ 
+ 	/*Intermediaries */
+ 	int         i,j;
+@@ -7577,7 +7577,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	this->parameters->FindParam(&viscosity_overshoot,DiagnosticViscosityOvershootEnum);
++	this->parameters->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* vxold_input=inputs->GetInput(VxPicardEnum); _assert_(vxold_input);
+@@ -7619,8 +7619,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticHOFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticHOFriction(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceHOFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceHOFriction(void){
+ 
+ 	/*Intermediaries */
+ 	int         i,j;
+@@ -7693,16 +7693,16 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticHOFS{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticHOFS(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceHOFS{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceHOFS(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke1=CreateKMatrixStressbalanceFS();
+ 	int indices[3]={18,19,20};
+ 	Ke1->StaticCondensation(3,&indices[0]);
+ 	int init = this->element_type;
+ 	this->element_type=P1Enum; //P1 needed for HO 
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticHO();
++	ElementMatrix* Ke2=CreateKMatrixStressbalanceHO();
+ 	this->element_type=init;
+ 	ElementMatrix* Ke3=CreateKMatrixCouplingHOFS();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
+@@ -7714,16 +7714,16 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticFS{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticFS(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceFS{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceFS(void){
+ 
+ 	ElementMatrix* Ke1 = NULL;
+ 	ElementMatrix* Ke2 = NULL;
+ 	ElementMatrix* Ke  = NULL;
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	Ke1=CreateKMatrixDiagnosticFSViscous();
+-	Ke2=CreateKMatrixDiagnosticFSFriction();
++	Ke1=CreateKMatrixStressbalanceFSViscous();
++	Ke2=CreateKMatrixStressbalanceFSFriction();
+ 	Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -7766,7 +7766,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -7847,8 +7847,8 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticFSViscous {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticFSViscous(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceFSViscous {{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceFSViscous(void){
+ 
+ 	/*Intermediaries */
+ 	int        i,j,approximation;
+@@ -7879,7 +7879,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -7919,8 +7919,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticFSFriction{{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticFSFriction(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceFSFriction{{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceFSFriction(void){
+ 
+ 	/*Intermediaries */
+ 	int         i,j;
+@@ -7953,7 +7953,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -7996,12 +7996,12 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticVert {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticVert(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceVert {{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceVert(void){
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	ElementMatrix* Ke1=CreateKMatrixDiagnosticVertVolume();
+-	ElementMatrix* Ke2=CreateKMatrixDiagnosticVertSurface();
++	ElementMatrix* Ke1=CreateKMatrixStressbalanceVertVolume();
++	ElementMatrix* Ke2=CreateKMatrixStressbalanceVertSurface();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+ 
+ 	/*clean-up and return*/
+@@ -8011,8 +8011,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticVertVolume {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticVertVolume(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceVertVolume {{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceVertVolume(void){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble  Jdet;
+@@ -8051,8 +8051,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateKMatrixDiagnosticVertSurface {{{*/
+-ElementMatrix* Penta::CreateKMatrixDiagnosticVertSurface(void){
++/*FUNCTION Penta::CreateKMatrixStressbalanceVertSurface {{{*/
++ElementMatrix* Penta::CreateKMatrixStressbalanceVertSurface(void){
+ 
+ 	if (!IsOnSurface()) return NULL;
+ 
+@@ -8141,7 +8141,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+@@ -8207,7 +8207,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+@@ -8296,7 +8296,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);       _assert_(vz_input);
+@@ -8372,7 +8372,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+@@ -8417,42 +8417,42 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticHoriz{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticHoriz(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceHoriz{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceHoriz(void){
+ 
+ 	int approximation;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+ 		case SSAApproximationEnum:
+-			return CreatePVectorDiagnosticSSA();
++			return CreatePVectorStressbalanceSSA();
+ 		case HOApproximationEnum:
+-			return CreatePVectorDiagnosticHO();
++			return CreatePVectorStressbalanceHO();
+ 		case L1L2ApproximationEnum:
+-			return CreatePVectorDiagnosticL1L2();
++			return CreatePVectorStressbalanceL1L2();
+ 		case SIAApproximationEnum:
+ 			return NULL;
+ 		case NoneApproximationEnum:
+ 			return NULL;
+ 		case FSApproximationEnum:
+-			return CreatePVectorDiagnosticFS();
++			return CreatePVectorStressbalanceFS();
+ 		case SSAHOApproximationEnum:
+-			return CreatePVectorDiagnosticSSAHO();
++			return CreatePVectorStressbalanceSSAHO();
+ 		case SSAFSApproximationEnum:
+-			return CreatePVectorDiagnosticSSAFS();
++			return CreatePVectorStressbalanceSSAFS();
+ 		case HOFSApproximationEnum:
+-			return CreatePVectorDiagnosticHOFS();
++			return CreatePVectorStressbalanceHOFS();
+ 		default:
+ 			_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticSSAHO{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticSSAHO(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceSSAHO{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceSSAHO(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticSSA();
+-	ElementVector* pe2=CreatePVectorDiagnosticHO();
++	ElementVector* pe1=CreatePVectorStressbalanceSSA();
++	ElementVector* pe2=CreatePVectorStressbalanceHO();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -8461,18 +8461,18 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticSSAFS{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticSSAFS(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceSSAFS{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceSSAFS(void){
+ 
+ 	/*compute all load vectors for this element*/
+ 	int init = this->element_type;
+ 	this->element_type=P1Enum;
+-	ElementVector* pe1=CreatePVectorDiagnosticSSA();
++	ElementVector* pe1=CreatePVectorStressbalanceSSA();
+ 	this->element_type=init;
+-	ElementVector* pe2=CreatePVectorDiagnosticFS();
++	ElementVector* pe2=CreatePVectorStressbalanceFS();
+ 	int indices[3]={18,19,20};
+ 	this->element_type=MINIcondensedEnum;
+-	ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke = CreateKMatrixStressbalanceFS();
+ 	this->element_type=init;
+ 	pe2->StaticCondensation(Ke,3,&indices[0]);
+ 	delete Ke;
+@@ -8486,18 +8486,18 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticHOFS{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticHOFS(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceHOFS{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceHOFS(void){
+ 
+ 	/*compute all load vectors for this element*/
+ 	int init = this->element_type;
+ 	this->element_type=P1Enum;
+-	ElementVector* pe1=CreatePVectorDiagnosticHO();
++	ElementVector* pe1=CreatePVectorStressbalanceHO();
+ 	this->element_type=init;
+-	ElementVector* pe2=CreatePVectorDiagnosticFS();
++	ElementVector* pe2=CreatePVectorStressbalanceFS();
+ 	int indices[3]={18,19,20};
+ 	this->element_type=MINIcondensedEnum;
+-	ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke = CreateKMatrixStressbalanceFS();
+ 	this->element_type=init;
+ 	pe2->StaticCondensation(Ke,3,&indices[0]);
+ 	delete Ke;
+@@ -8511,8 +8511,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticSIA{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticSIA(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceSIA{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceSIA(void){
+ 
+ 	/*Intermediaries*/
+ 	int         i,j;
+@@ -8601,40 +8601,40 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticSSA{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticSSA(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceSSA{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceSSA(void){
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementVector* pe=tria->CreatePVectorDiagnosticSSA();
++	ElementVector* pe=tria->CreatePVectorStressbalanceSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Clean up and return*/
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticL1L2{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticL1L2(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceL1L2{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceL1L2(void){
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementVector* pe=tria->CreatePVectorDiagnosticSSA();
++	ElementVector* pe=tria->CreatePVectorStressbalanceSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Clean up and return*/
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticHO{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticHO(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceHO{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceHO(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticHODrivingStress();
+-	ElementVector* pe2=CreatePVectorDiagnosticHOFront();
++	ElementVector* pe1=CreatePVectorStressbalanceHODrivingStress();
++	ElementVector* pe2=CreatePVectorStressbalanceHOFront();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -8643,8 +8643,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticHODrivingStress{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticHODrivingStress(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceHODrivingStress{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceHODrivingStress(void){
+ 
+ 	/*Intermediaries*/
+ 	int         i,j;
+@@ -8695,8 +8695,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticHOFront{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticHOFront(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceHOFront{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceHOFront(void){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble  ls[NUMVERTICES];
+@@ -8778,8 +8778,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticFS {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticFS(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceFS {{{*/
++ElementVector* Penta::CreatePVectorStressbalanceFS(void){
+ 
+ 	ElementVector* pe1;
+ 	ElementVector* pe2;
+@@ -8787,9 +8787,9 @@
+ 	ElementVector* pe;
+ 
+ 	/*compute all stiffness matrices for this element*/
+-	pe1=CreatePVectorDiagnosticFSViscous();
+-	pe2=CreatePVectorDiagnosticFSShelf();
+-	pe3=CreatePVectorDiagnosticFSFront();
++	pe1=CreatePVectorStressbalanceFSViscous();
++	pe2=CreatePVectorStressbalanceFSShelf();
++	pe3=CreatePVectorStressbalanceFSFront();
+ 	pe =new ElementVector(pe1,pe2,pe3);
+ 
+ 	/*clean-up and return*/
+@@ -8799,8 +8799,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticFSFront{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticFSFront(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceFSFront{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceFSFront(void){
+ 
+ 	/*Intermediaries */
+ 	int         i;
+@@ -8979,8 +8979,8 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticFSViscous {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticFSViscous(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceFSViscous {{{*/
++ElementVector* Penta::CreatePVectorStressbalanceFSViscous(void){
+ 
+ 	/*Intermediaries*/
+ 	int        i,j;
+@@ -9046,8 +9046,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticFSShelf{{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticFSShelf(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceFSShelf{{{*/
++ElementVector* Penta::CreatePVectorStressbalanceFSShelf(void){
+ 
+ 	/*Intermediaries*/
+ 	int         i,j;
+@@ -9080,7 +9080,7 @@
+ 	IssmDouble*    vbasis = xNew<IssmDouble>(vnumnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	this->parameters->FindParam(&shelf_dampening,DiagnosticShelfDampeningEnum);
++	this->parameters->FindParam(&shelf_dampening,StressbalanceShelfDampeningEnum);
+ 	rho_water=matpar->GetRhoWater();
+ 	gravity=matpar->GetG();
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -9131,12 +9131,12 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticVert {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticVert(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceVert {{{*/
++ElementVector* Penta::CreatePVectorStressbalanceVert(void){
+ 
+ 	/*compute all load vectors for this element*/
+-	ElementVector* pe1=CreatePVectorDiagnosticVertVolume();
+-	ElementVector* pe2=CreatePVectorDiagnosticVertBase();
++	ElementVector* pe1=CreatePVectorStressbalanceVertVolume();
++	ElementVector* pe2=CreatePVectorStressbalanceVertBase();
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
+@@ -9145,8 +9145,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticVertVolume {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticVertVolume(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceVertVolume {{{*/
++ElementVector* Penta::CreatePVectorStressbalanceVertVolume(void){
+ 
+ 	/*Constants*/
+ 	const int  numdof=NDOF1*NUMVERTICES;
+@@ -9200,8 +9200,8 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorDiagnosticVertBase {{{*/
+-ElementVector* Penta::CreatePVectorDiagnosticVertBase(void){
++/*FUNCTION Penta::CreatePVectorStressbalanceVertBase {{{*/
++ElementVector* Penta::CreatePVectorStressbalanceVertBase(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF1*NUMVERTICES;
+@@ -9264,19 +9264,19 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateJacobianDiagnosticHoriz{{{*/
+-ElementMatrix* Penta::CreateJacobianDiagnosticHoriz(void){
++/*FUNCTION Penta::CreateJacobianStressbalanceHoriz{{{*/
++ElementMatrix* Penta::CreateJacobianStressbalanceHoriz(void){
+ 
+ 	int approximation;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 
+ 	switch(approximation){
+ 		case SSAApproximationEnum:
+-			return CreateJacobianDiagnosticSSA2d();
++			return CreateJacobianStressbalanceSSA2d();
+ 		case HOApproximationEnum:
+-			return CreateJacobianDiagnosticHO();
++			return CreateJacobianStressbalanceHO();
+ 		case FSApproximationEnum:
+-			return CreateJacobianDiagnosticFS();
++			return CreateJacobianStressbalanceFS();
+ 		case NoneApproximationEnum:
+ 			return NULL;
+ 		default:
+@@ -9284,8 +9284,8 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateJacobianDiagnosticSSA2d{{{*/
+-ElementMatrix* Penta::CreateJacobianDiagnosticSSA2d(void){
++/*FUNCTION Penta::CreateJacobianStressbalanceSSA2d{{{*/
++ElementMatrix* Penta::CreateJacobianStressbalanceSSA2d(void){
+ 
+ 	/*Figure out if this penta is collapsed. If so, then bailout, except if it is at the 
+ 	  bedrock, in which case we spawn a tria element using the 3 first nodes, and use it to build 
+@@ -9307,7 +9307,7 @@
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementMatrix* Ke=tria->CreateJacobianDiagnosticSSA();
++	ElementMatrix* Ke=tria->CreateJacobianStressbalanceSSA();
+ 	delete tria->material; delete tria;
+ 
+ 	/*Delete averaged inputs*/
+@@ -9318,8 +9318,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateJacobianDiagnosticHO{{{*/
+-ElementMatrix* Penta::CreateJacobianDiagnosticHO(void){
++/*FUNCTION Penta::CreateJacobianStressbalanceHO{{{*/
++ElementMatrix* Penta::CreateJacobianStressbalanceHO(void){
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF2*NUMVERTICES;
+@@ -9337,7 +9337,7 @@
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Jacobian with regular HO (first part of the Gateau derivative)*/
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticHO();
++	ElementMatrix* Ke=CreateKMatrixStressbalanceHO();
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -9382,8 +9382,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreateJacobianDiagnosticFS{{{*/
+-ElementMatrix* Penta::CreateJacobianDiagnosticFS(void){
++/*FUNCTION Penta::CreateJacobianStressbalanceFS{{{*/
++ElementMatrix* Penta::CreateJacobianStressbalanceFS(void){
+ 
+ 	/*Intermediaries */
+ 	int        i,j,approximation;
+@@ -9412,7 +9412,7 @@
+ 	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
+ 
+ 	/*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/
+-	ElementMatrix* Ke=CreateKMatrixDiagnosticFS();
++	ElementMatrix* Ke=CreateKMatrixStressbalanceFS();
+ 	IssmDouble*    dbasis = xNew<IssmDouble>(3*vnumnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -9475,8 +9475,8 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsDiagnosticHoriz{{{*/
+-void  Penta::GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution){
++/*FUNCTION Penta::GetSolutionFromInputsStressbalanceHoriz{{{*/
++void  Penta::GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solution){
+ 
+ 	int         approximation;
+ 	int        *doflist = NULL;
+@@ -9516,8 +9516,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsDiagnosticSIA{{{*/
+-void  Penta::GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution){
++/*FUNCTION Penta::GetSolutionFromInputsStressbalanceSIA{{{*/
++void  Penta::GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -9552,8 +9552,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsDiagnosticVert{{{*/
+-void  Penta::GetSolutionFromInputsDiagnosticVert(Vector<IssmDouble>* solution){
++/*FUNCTION Penta::GetSolutionFromInputsStressbalanceVert{{{*/
++void  Penta::GetSolutionFromInputsStressbalanceVert(Vector<IssmDouble>* solution){
+ 
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+@@ -9585,8 +9585,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsDiagnosticFS{{{*/
+-void  Penta::GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solution){
++/*FUNCTION Penta::GetSolutionFromInputsStressbalanceFS{{{*/
++void  Penta::GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solution){
+ 
+ 	int*         vdoflist=NULL;
+ 	int*         pdoflist=NULL;
+@@ -9612,7 +9612,7 @@
+ 	Input* vz_input=inputs->GetInput(VzEnum);       _assert_(vz_input);
+ 	Input* p_input =inputs->GetInput(PressureEnum); _assert_(p_input);
+ 
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 
+ 	/*Ok, we have vx vy vz in values, fill in vx vy vz arrays: */
+ 	gauss = new GaussPenta();
+@@ -9713,8 +9713,8 @@
+ 	return; 
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHoriz {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticHoriz(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceHoriz {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceHoriz(IssmDouble* solution){
+ 
+ 	int  approximation;
+ 
+@@ -9728,34 +9728,34 @@
+ 			return;
+ 		}
+ 		else{
+-			InputUpdateFromSolutionDiagnosticSSA(solution);
++			InputUpdateFromSolutionStressbalanceSSA(solution);
+ 			return;
+ 		}
+ 	}
+ 	if (approximation==L1L2ApproximationEnum){
+ 		if (!IsOnBed()) return;
+-		InputUpdateFromSolutionDiagnosticL1L2(solution);
++		InputUpdateFromSolutionStressbalanceL1L2(solution);
+ 		return;
+ 	}
+ 	else if (approximation==HOApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticHO(solution);
++		InputUpdateFromSolutionStressbalanceHO(solution);
+ 	}
+ 	else if (approximation==HOFSApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticHOFS(solution);
++		InputUpdateFromSolutionStressbalanceHOFS(solution);
+ 	}
+ 	else if (approximation==SSAFSApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticSSAFS(solution);
++		InputUpdateFromSolutionStressbalanceSSAFS(solution);
+ 	}
+ 	else if (approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticFS(solution);
++		InputUpdateFromSolutionStressbalanceFS(solution);
+ 	}
+ 	else if (approximation==SSAHOApproximationEnum){
+-		InputUpdateFromSolutionDiagnosticSSAHO(solution);
++		InputUpdateFromSolutionStressbalanceSSAHO(solution);
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSSA {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticSSA(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceSSA {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceSSA(IssmDouble* solution){
+ 
+ 	int         numnodes = this->NumberofNodes();
+ 	int         numdof=NDOF2*numnodes;
+@@ -9836,8 +9836,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSSAHO {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticSSAHO(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceSSAHO {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceSSAHO(IssmDouble* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 	const int    numdof2d=NDOF2*NUMVERTICES2D;
+@@ -9920,8 +9920,8 @@
+ 	xDelete<int>(doflistm);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSSAFS {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticSSAFS(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceSSAFS {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceSSAFS(IssmDouble* solution){
+ 
+ 	const int    numdofm=NDOF2*NUMVERTICES;
+ 	const int    numdofs=NDOF3*NUMVERTICES;
+@@ -9954,7 +9954,7 @@
+ 	penta->GetDofList(&doflistm,SSAApproximationEnum,GsetEnum);
+ 	GetDofList(&doflists,FSvelocityEnum,GsetEnum);
+ 	GetDofListPressure(&doflistpressure,GsetEnum);
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -10023,8 +10023,8 @@
+ 	xDelete<int>(doflists);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticL1L2 {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticL1L2(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceL1L2 {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceL1L2(IssmDouble* solution){
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+@@ -10104,8 +10104,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHO {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticHO(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceHO {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceHO(IssmDouble* solution){
+ 
+ 	int         i;
+ 	IssmDouble  rho_ice,g;
+@@ -10177,8 +10177,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHOFS {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticHOFS(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceHOFS {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceHOFS(IssmDouble* solution){
+ 
+ 	const int    numdofp=NDOF2*NUMVERTICES;
+ 	const int    numdofs=NDOF3*NUMVERTICES;
+@@ -10210,7 +10210,7 @@
+ 	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
+ 	GetDofList(&doflists,FSvelocityEnum,GsetEnum);
+ 	GetDofListPressure(&doflistpressure,GsetEnum);
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -10277,8 +10277,8 @@
+ 	xDelete<int>(doflistpressure);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSIA {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceSIA {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceSIA(IssmDouble* solution){
+ 
+ 	int         numnodes = this->NumberofNodes();
+ 	int         numdof=NDOF2*numnodes;
+@@ -10341,8 +10341,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticVert {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticVert(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceVert {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceVert(IssmDouble* solution){
+ 
+ 	int          numnodes = this->NumberofNodes();
+ 	int          numdof=NDOF1*numnodes;
+@@ -10445,8 +10445,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticFS {{{*/
+-void  Penta::InputUpdateFromSolutionDiagnosticFS(IssmDouble* solution){
++/*FUNCTION Penta::InputUpdateFromSolutionStressbalanceFS {{{*/
++void  Penta::InputUpdateFromSolutionStressbalanceFS(IssmDouble* solution){
+ 
+ 	int          i;
+ 	int*         vdoflist=NULL;
+@@ -10495,7 +10495,7 @@
+ 	}
+ 
+ 	/*Recondition pressure and compute vel: */
+-	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	for(i=0;i<pnumnodes;i++) pressure[i]=pressure[i]*FSreconditioning;
+ 	for(i=0;i<vnumnodes;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15771)
+@@ -227,7 +227,7 @@
+ 		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+ 		void           UpdateConstraints(void);
+ 
+-		#ifdef _HAVE_DIAGNOSTIC_
++		#ifdef _HAVE_STRESSBALANCE_
+ 		ElementMatrix* CreateKMatrixCouplingSSAHO(void);
+ 		ElementMatrix* CreateKMatrixCouplingSSAHOViscous(void);
+ 		ElementMatrix* CreateKMatrixCouplingSSAHOFriction(void);
+@@ -235,73 +235,73 @@
+ 		ElementMatrix* CreateKMatrixCouplingSSAFSViscous(void);
+ 		ElementMatrix* CreateKMatrixCouplingSSAFSFriction(void);
+ 		ElementMatrix* CreateKMatrixCouplingHOFS(void);
+-		ElementMatrix* CreateKMatrixDiagnosticHoriz(void);
++		ElementMatrix* CreateKMatrixStressbalanceHoriz(void);
+ 		ElementMatrix* CreateKMatrixAdjointHoriz(void);
+-		ElementVector* CreateDVectorDiagnosticHoriz(void);
+-		ElementVector* CreateDVectorDiagnosticFS(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSIA(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSSA2d(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSSA3d(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSSA3dViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSSA3dFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSSAHO(void);
+-		ElementMatrix* CreateKMatrixDiagnosticSSAFS(void);
+-		ElementMatrix* CreateKMatrixDiagnosticL1L2(void);
+-		ElementMatrix* CreateKMatrixDiagnosticL1L2Viscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticL1L2Friction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticHO(void);
+-		ElementMatrix* CreateKMatrixDiagnosticHOViscous(void);
+-		ElementMatrix* CreateKMatrixDiagnosticHOFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticHOFS(void);
+-		ElementMatrix* CreateKMatrixDiagnosticFS(void);
+-		ElementMatrix* CreateKMatrixDiagnosticFSViscous(void);
++		ElementVector* CreateDVectorStressbalanceHoriz(void);
++		ElementVector* CreateDVectorStressbalanceFS(void);
++		ElementMatrix* CreateKMatrixStressbalanceSIA(void);
++		ElementMatrix* CreateKMatrixStressbalanceSSA2d(void);
++		ElementMatrix* CreateKMatrixStressbalanceSSA3d(void);
++		ElementMatrix* CreateKMatrixStressbalanceSSA3dViscous(void);
++		ElementMatrix* CreateKMatrixStressbalanceSSA3dFriction(void);
++		ElementMatrix* CreateKMatrixStressbalanceSSAHO(void);
++		ElementMatrix* CreateKMatrixStressbalanceSSAFS(void);
++		ElementMatrix* CreateKMatrixStressbalanceL1L2(void);
++		ElementMatrix* CreateKMatrixStressbalanceL1L2Viscous(void);
++		ElementMatrix* CreateKMatrixStressbalanceL1L2Friction(void);
++		ElementMatrix* CreateKMatrixStressbalanceHO(void);
++		ElementMatrix* CreateKMatrixStressbalanceHOViscous(void);
++		ElementMatrix* CreateKMatrixStressbalanceHOFriction(void);
++		ElementMatrix* CreateKMatrixStressbalanceHOFS(void);
++		ElementMatrix* CreateKMatrixStressbalanceFS(void);
++		ElementMatrix* CreateKMatrixStressbalanceFSViscous(void);
+ 		void           KMatrixGLSstabilization(ElementMatrix* Ke);
+-		ElementMatrix* CreateKMatrixDiagnosticFSFriction(void);
+-		ElementMatrix* CreateKMatrixDiagnosticVert(void);
+-		ElementMatrix* CreateKMatrixDiagnosticVertVolume(void);
+-		ElementMatrix* CreateKMatrixDiagnosticVertSurface(void);
+-		ElementMatrix* CreateJacobianDiagnosticHoriz(void);
+-		ElementMatrix* CreateJacobianDiagnosticSSA2d(void);
+-		ElementMatrix* CreateJacobianDiagnosticHO(void);
+-		ElementMatrix* CreateJacobianDiagnosticFS(void);
+-		void           InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticSSA( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticSSAHO( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticSSAFS( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticL1L2( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticHO( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticHOFS( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticSIA( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticVert( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionDiagnosticFS( IssmDouble* solutiong);
+-		void	         GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solutiong);
+-		void	         GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solutiong);
+-		void	         GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solutiong);
+-		void	         GetSolutionFromInputsDiagnosticVert(Vector<IssmDouble>* solutiong);
++		ElementMatrix* CreateKMatrixStressbalanceFSFriction(void);
++		ElementMatrix* CreateKMatrixStressbalanceVert(void);
++		ElementMatrix* CreateKMatrixStressbalanceVertVolume(void);
++		ElementMatrix* CreateKMatrixStressbalanceVertSurface(void);
++		ElementMatrix* CreateJacobianStressbalanceHoriz(void);
++		ElementMatrix* CreateJacobianStressbalanceSSA2d(void);
++		ElementMatrix* CreateJacobianStressbalanceHO(void);
++		ElementMatrix* CreateJacobianStressbalanceFS(void);
++		void           InputUpdateFromSolutionStressbalanceHoriz( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceSSA( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceSSAHO( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceSSAFS( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceL1L2( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceHO( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceHOFS( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceSIA( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceVert( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionStressbalanceFS( IssmDouble* solutiong);
++		void	         GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solutiong);
++		void	         GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solutiong);
++		void	         GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solutiong);
++		void	         GetSolutionFromInputsStressbalanceVert(Vector<IssmDouble>* solutiong);
+ 		ElementVector* CreatePVectorCouplingSSAFS(void);
+ 		ElementVector* CreatePVectorCouplingSSAFSViscous(void);
+ 		ElementVector* CreatePVectorCouplingSSAFSFriction(void);
+ 		ElementVector* CreatePVectorCouplingHOFS(void);
+ 		ElementVector* CreatePVectorCouplingHOFSViscous(void);
+ 		ElementVector* CreatePVectorCouplingHOFSFriction(void);
+-		ElementVector* CreatePVectorDiagnosticHoriz(void);
+-		ElementVector* CreatePVectorDiagnosticSIA(void);
+-		ElementVector* CreatePVectorDiagnosticSSA(void);
+-		ElementVector* CreatePVectorDiagnosticSSAHO(void);
+-		ElementVector* CreatePVectorDiagnosticSSAFS(void);
+-		ElementVector* CreatePVectorDiagnosticL1L2(void);
+-		ElementVector* CreatePVectorDiagnosticHO(void);
+-		ElementVector* CreatePVectorDiagnosticHODrivingStress(void);
+-		ElementVector* CreatePVectorDiagnosticHOFront(void);
+-		ElementVector* CreatePVectorDiagnosticHOFS(void);
+-		ElementVector* CreatePVectorDiagnosticFS(void);
+-		ElementVector* CreatePVectorDiagnosticFSFront(void);
+-		ElementVector* CreatePVectorDiagnosticFSViscous(void);
++		ElementVector* CreatePVectorStressbalanceHoriz(void);
++		ElementVector* CreatePVectorStressbalanceSIA(void);
++		ElementVector* CreatePVectorStressbalanceSSA(void);
++		ElementVector* CreatePVectorStressbalanceSSAHO(void);
++		ElementVector* CreatePVectorStressbalanceSSAFS(void);
++		ElementVector* CreatePVectorStressbalanceL1L2(void);
++		ElementVector* CreatePVectorStressbalanceHO(void);
++		ElementVector* CreatePVectorStressbalanceHODrivingStress(void);
++		ElementVector* CreatePVectorStressbalanceHOFront(void);
++		ElementVector* CreatePVectorStressbalanceHOFS(void);
++		ElementVector* CreatePVectorStressbalanceFS(void);
++		ElementVector* CreatePVectorStressbalanceFSFront(void);
++		ElementVector* CreatePVectorStressbalanceFSViscous(void);
+ 		void           PVectorGLSstabilization(ElementVector* pe);
+-		ElementVector* CreatePVectorDiagnosticFSShelf(void);
+-		ElementVector* CreatePVectorDiagnosticVert(void);
+-		ElementVector* CreatePVectorDiagnosticVertVolume(void);
+-		ElementVector* CreatePVectorDiagnosticVertBase(void);
++		ElementVector* CreatePVectorStressbalanceFSShelf(void);
++		ElementVector* CreatePVectorStressbalanceVert(void);
++		ElementVector* CreatePVectorStressbalanceVertVolume(void);
++		ElementVector* CreatePVectorStressbalanceVertBase(void);
+ 		void           GetL1L2Viscosity(IssmDouble*, IssmDouble*, GaussPenta*, Input*, Input*, Input*);
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15770)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15771)
+@@ -41,7 +41,7 @@
+ 	DistributeNumDofs(&this->indexing,analysis_type,in_approximation); //number of dofs per node
+ 	gsize=this->indexing.gsize;
+ 
+-	if(analysis_type==DiagnosticHorizAnalysisEnum)
++	if(analysis_type==StressbalanceAnalysisEnum)
+ 	 this->approximation=in_approximation;
+ 	else
+ 	 this->approximation=0;
+@@ -53,13 +53,13 @@
+ 	if(iomodel->Data(MaskVertexongroundediceEnum))
+ 	  this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<bool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index])));
+ 
+-	/*Diagnostic Horiz*/
+-	#ifdef _HAVE_DIAGNOSTIC_
+-	if(analysis_type==DiagnosticHorizAnalysisEnum){
++	/*Stressbalance Horiz*/
++	#ifdef _HAVE_STRESSBALANCE_
++	if(analysis_type==StressbalanceAnalysisEnum){
+ 
+ 		/*Coordinate system provided, convert to coord_system matrix*/
+-		_assert_(iomodel->Data(DiagnosticReferentialEnum)); 
+-		XZvectorsToCoordinateSystem(&this->coord_system[0][0],&iomodel->Data(DiagnosticReferentialEnum)[io_index*6]);
++		_assert_(iomodel->Data(StressbalanceReferentialEnum)); 
++		XZvectorsToCoordinateSystem(&this->coord_system[0][0],&iomodel->Data(StressbalanceReferentialEnum)[io_index*6]);
+ 
+ 		if(iomodel->dim==3){
+ 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+@@ -337,7 +337,7 @@
+ /*FUNCTION Node::Sid{{{*/
+ int    Node::Sid(void){ return sid; }
+ /*}}}*/
+-#ifdef _HAVE_DIAGNOSTIC_
++#ifdef _HAVE_STRESSBALANCE_
+ /*FUNCTION Node::GetCoordinateSystem{{{*/
+ void Node::GetCoordinateSystem(IssmDouble* coord_system_out){
+ 
+@@ -971,7 +971,7 @@
+ 	return numberofdofs;
+ }
+ /*}}}*/
+-#ifdef _HAVE_DIAGNOSTIC_
++#ifdef _HAVE_STRESSBALANCE_
+ void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum){/*{{{*/
+ 
+ 	int* cs_array=NULL;
+Index: ../trunk-jpl/src/ad/validation/Update/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/src/ad/validation/Update/SquareShelfConstrained.par	(revision 15770)
++++ ../trunk-jpl/src/ad/validation/Update/SquareShelfConstrained.par	(revision 15771)
+@@ -34,15 +34,15 @@
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+-md.diagnostic.viscosity_overshoot=0.0;
++md.stressbalance.viscosity_overshoot=0.0;
+ md.prognostic.stabilization=1;
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+-md.diagnostic.restol=0.05;
+-md.diagnostic.reltol=0.05;
++md.stressbalance.restol=0.05;
++md.stressbalance.reltol=0.05;
+ md.steadystate.reltol=0.05;
+-md.diagnostic.abstol=NaN;
++md.stressbalance.abstol=NaN;
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=3;
+ 
+Index: ../trunk-jpl/src/m/solve/solve.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.py	(revision 15770)
++++ ../trunk-jpl/src/m/solve/solve.py	(revision 15771)
+@@ -20,7 +20,7 @@
+ 	      where varargin is a list of paired arguments of string OR enums
+  
+ 	   solution types available comprise:
+-	      - DiagnosticSolutionEnum
++	      - StressbalanceSolutionEnum
+ 	      - MasstransportSolutionEnum
+ 	      - ThermalSolutionEnum
+ 	      - SteadystateSolutionEnum
+@@ -35,7 +35,7 @@
+ 	      - loadonly : does not solve. only load results
+  
+ 	   Examples:
+-	      md=solve(md,DiagnosticSolutionEnum);
++	      md=solve(md,StressbalanceSolutionEnum);
+ 	"""
+ 
+ 	#recover and process solve options
+Index: ../trunk-jpl/src/m/solve/solve.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.m	(revision 15770)
++++ ../trunk-jpl/src/m/solve/solve.m	(revision 15771)
+@@ -6,7 +6,7 @@
+ %      where varargin is a lit of paired arguments of string OR enums
+ %
+ %   solution types available comprise:
+-%		 - DiagnosticSolutionEnum
++%		 - StressbalanceSolutionEnum
+ %		 - MasstransportSolutionEnum
+ %		 - ThermalSolutionEnum
+ %		 - SteadystateSolutionEnum
+@@ -21,7 +21,7 @@
+ %      - loadonly : does not solve. only load results
+ %
+ %   Examples:
+-%      md=solve(md,DiagnosticSolutionEnum);
++%      md=solve(md,StressbalanceSolutionEnum);
+ 
+ %recover and process solve options
+ options=pairoptions(varargin{:},'solution_type',solutionenum);
+Index: ../trunk-jpl/src/m/solve/process_solve_options.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.py	(revision 15770)
++++ ../trunk-jpl/src/m/solve/process_solve_options.py	(revision 15771)
+@@ -17,7 +17,7 @@
+ 
+ 	#solution_type: check on this option, error out otherwise
+ 	solution_type=options.getfieldvalue('solution_type')
+-	if solution_type not in (DiagnosticSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),\
++	if solution_type not in (StressbalanceSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),\
+ 			SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),\
+ 			BalancethicknessSolutionEnum(),BedSlopeSolutionEnum(),SurfaceSlopeSolutionEnum(),\
+ 			HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()):
+Index: ../trunk-jpl/src/m/solve/process_solve_options.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 15770)
++++ ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 15771)
+@@ -8,7 +8,7 @@
+ 
+ %solution_type: check on this option, error out otherwise
+ solution_type=getfieldvalue(options,'solution_type');
+-if ~ismember(solution_type,[DiagnosticSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),...
++if ~ismember(solution_type,[StressbalanceSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),...
+ 		SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),...
+ 		BalancethicknessSolutionEnum(),BalancethicknessSoftSolutionEnum(),BedSlopeSolutionEnum(),...
+ 		SurfaceSlopeSolutionEnum(),HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()]),
+Index: ../trunk-jpl/src/m/classes/initialization.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/initialization.m	(revision 15771)
+@@ -29,7 +29,7 @@
+ 
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-			if ismember(DiagnosticHorizAnalysisEnum(),analyses)
++			if ismember(StressbalanceAnalysisEnum(),analyses)
+ 				if ~(isnan(md.initialization.vx) | isnan(md.initialization.vy)),
+ 					md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 					md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]);
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 15770)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 15771)
+@@ -13,7 +13,7 @@
+ 
+ 	def __init__(self): # {{{
+ 		self.ismasstransport      = False
+-		self.isdiagnostic      = False
++		self.isstressbalance      = False
+ 		self.isthermal         = False
+ 		self.isgroundingline   = False
+ 		self.isgia             = False
+@@ -26,7 +26,7 @@
+ 	def __repr__(self): # {{{
+ 		string='   transient solution parameters:'
+ 		string="%s\n%s"%(string,fielddisplay(self,'ismasstransport','indicates if a masstransport solution is used in the transient'))
+-		string="%s\n%s"%(string,fielddisplay(self,'isdiagnostic','indicates if a diagnostic solution is used in the transient'))
++		string="%s\n%s"%(string,fielddisplay(self,'isstressbalance','indicates if a stressbalance solution is used in the transient'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isthermal','indicates if a thermal solution is used in the transient'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isgroundingline','indicates if a groundingline migration is used in the transient'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isgia','indicates if a postglacial rebound is used in the transient'))
+@@ -35,9 +35,9 @@
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+ 		
+-		#full analysis: Diagnostic, Masstransport and Thermal but no groundingline migration for now
++		#full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
+ 		self.ismasstransport=True
+-		self.isdiagnostic=True
++		self.isstressbalance=True
+ 		self.isthermal=True
+ 		self.isgroundingline=False
+ 		self.isgia=False
+@@ -51,7 +51,7 @@
+ 			return md
+ 
+ 		md = checkfield(md,'transient.ismasstransport','numel',[1],'values',[0,1])
+-		md = checkfield(md,'transient.isdiagnostic','numel',[1],'values',[0,1])
++		md = checkfield(md,'transient.isstressbalance','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isthermal','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgia','numel',[1],'values',[0,1])
+@@ -62,7 +62,7 @@
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','ismasstransport','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','isdiagnostic','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','isstressbalance','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isthermal','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isgia','format','Boolean')
+Index: ../trunk-jpl/src/m/classes/toolkits.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/toolkits.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/toolkits.m	(revision 15771)
+@@ -21,8 +21,8 @@
+ 			 end % }}}
+ 		 function obj = addoptions(obj,analysis,varargin) % {{{
+ 		 % Usage example:
+-		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),FSoptions());
+-		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum());
++		 %    md.toolkits=addoptions(md.toolkits,StressbalanceAnalysisEnum(),FSoptions());
++		 %    md.toolkits=addoptions(md.toolkits,StressbalanceAnalysisEnum());
+ 
+ 			 %Convert analysis from enum to string
+ 			 analysis=EnumToString(analysis);
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 15771)
+@@ -299,7 +299,7 @@
+                 param_write(fid,sbeg,'false_conv_tol','       = ','\n',dm.params);
+                 param_write(fid,sbeg,'initial_trust_radius',' = ','\n',dm.params);
+                 param_write(fid,sbeg,'covariance','           = ','\n',dm.params);
+-                param_write(fid,sbeg,'regression_diagnostics','','\n',dm.params);
++                param_write(fid,sbeg,'regression_stressbalances','','\n',dm.params);
+ 
+             case {'nlssol_sqp'}
+                 param_write(fid,sbeg,'max_iterations','           = ','\n',dm.params);
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m	(revision 15771)
+@@ -559,7 +559,7 @@
+                                 dm.params.false_conv_tol=-1.;
+                                 dm.params.initial_trust_radius=-1.;
+                                 dm.params.covariance=0;
+-                                dm.params.regression_diagnostics=false;
++                                dm.params.regression_stressbalances=false;
+                             case {'nlssol_sqp'}
+                                 dm.type     ='lsq';
+                                 dm.variables={'continuous_design',...
+Index: ../trunk-jpl/src/m/classes/friction.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/friction.py	(revision 15770)
++++ ../trunk-jpl/src/m/classes/friction.py	(revision 15771)
+@@ -34,7 +34,7 @@
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+ 		#Early return
+-		if DiagnosticHorizAnalysisEnum() not in analyses and ThermalAnalysisEnum() not in analyses:
++		if StressbalanceAnalysisEnum() not in analyses and ThermalAnalysisEnum() not in analyses:
+ 			return md
+ 
+ 		md = checkfield(md,'friction.coefficient','NaN',1,'size',[md.mesh.numberofvertices])
+Index: ../trunk-jpl/src/m/classes/friction.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/friction.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/friction.m	(revision 15771)
+@@ -24,7 +24,7 @@
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+ 			%Early return
+-			if ~ismember(DiagnosticHorizAnalysisEnum(),analyses) & ~ismember(ThermalAnalysisEnum(),analyses), return; end
++			if ~ismember(StressbalanceAnalysisEnum(),analyses) & ~ismember(ThermalAnalysisEnum(),analyses), return; end
+ 
+ 			md = checkfield(md,'friction.coefficient','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'friction.q','NaN',1,'size',[md.mesh.numberofelements 1]);
+Index: ../trunk-jpl/src/m/classes/initialization.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.py	(revision 15770)
++++ ../trunk-jpl/src/m/classes/initialization.py	(revision 15771)
+@@ -47,7 +47,7 @@
+ 		return self
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+-		if DiagnosticHorizAnalysisEnum() in analyses:
++		if StressbalanceAnalysisEnum() in analyses:
+ 			if not numpy.any(numpy.logical_or(numpy.isnan(md.initialization.vx),numpy.isnan(md.initialization.vy))):
+ 				md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
+ 				md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
+Index: ../trunk-jpl/src/m/classes/steadystate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/steadystate.m	(revision 15771)
+@@ -34,8 +34,8 @@
+ 				md = checkmessage(md,['for a steadystate computation, timestepping.time_step must be zero.']);
+ 			end
+ 
+-			if isnan(md.diagnostic.reltol),
+-				md = checkmessage(md,['for a steadystate computation, diagnostic.reltol (relative convergence criterion) must be defined!']);
++			if isnan(md.stressbalance.reltol),
++				md = checkmessage(md,['for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!']);
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
+Index: ../trunk-jpl/src/m/classes/modellist.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/modellist.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/modellist.m	(revision 15771)
+@@ -213,10 +213,10 @@
+ 			%   Usage:
+ 			%      obj=solve(obj,varargin)
+ 			%      where varargin is a lit of paired arguments. 
+-			%      arguments can be: 'analysis_type': 'diagnostic','thermal','masstransport','transient'
++			%      arguments can be: 'analysis_type': 'stressbalance','thermal','masstransport','transient'
+ 			%
+ 			%   Examples:
+-			%      obj=solve(obj,'analysis_type','diagnostic');
++			%      obj=solve(obj,'analysis_type','stressbalance');
+ 
+ 			%recover options
+ 			options=pairoptions(varargin{:});
+Index: ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15771)
+@@ -1,9 +1,9 @@
+-%DIAGNOSTIC class definition
++%STRESSBALANCE class definition
+ %
+ %   Usage:
+-%      diagnostic=diagnostic();
++%      stressbalance=stressbalance();
+ 
+-classdef diagnostic
++classdef stressbalance
+ 	properties (SetAccess=public) 
+ 		spcvx                    = NaN;
+ 		spcvy                    = NaN;
+@@ -44,14 +44,14 @@
+ 				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
+ 			end
+ 
+-			if size(md.diagnostic.icefront,2)==3 || size(md.diagnostic.icefront,2)==5,
+-				front=md.diagnostic.icefront;
+-				md.diagnostic.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
++			if size(md.stressbalance.icefront,2)==3 || size(md.stressbalance.icefront,2)==5,
++				front=md.stressbalance.icefront;
++				md.stressbalance.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
+ 			end
+ 		end% }}}
+ 	end
+ 	methods
+-		function obj = diagnostic(varargin) % {{{
++		function obj = stressbalance(varargin) % {{{
+ 			switch nargin
+ 				case 0
+ 					obj=setdefaultparameters(obj);
+@@ -76,7 +76,7 @@
+ 			 obj.penalty_factor=3;
+ 
+ 			 %coefficient to update the viscosity between each iteration of
+-			 %a diagnostic according to the following formula
++			 %a stressbalance according to the following formula
+ 			 %viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+ 			 obj.viscosity_overshoot=0;
+ 
+@@ -92,58 +92,58 @@
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+ 			%Early return
+-			if ~ismember(DiagnosticHorizAnalysisEnum(),analyses), return; end
+-			%if ~ismember(DiagnosticHorizAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isdiagnostic==0), return; end
++			if ~ismember(StressbalanceAnalysisEnum(),analyses), return; end
++			%if ~ismember(StressbalanceAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isstressbalance==0), return; end
+ 
+-			md = checkfield(md,'diagnostic.spcvx','forcing',1);
+-			md = checkfield(md,'diagnostic.spcvy','forcing',1);
+-			if md.mesh.dimension==3, md = checkfield(md,'diagnostic.spcvz','forcing',1); end
+-			md = checkfield(md,'diagnostic.restol','size',[1 1],'>',0,'NaN',1);
+-			md = checkfield(md,'diagnostic.reltol','size',[1 1]);
+-			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
+-			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
+-			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
+-			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
++			md = checkfield(md,'stressbalance.spcvx','forcing',1);
++			md = checkfield(md,'stressbalance.spcvy','forcing',1);
++			if md.mesh.dimension==3, md = checkfield(md,'stressbalance.spcvz','forcing',1); end
++			md = checkfield(md,'stressbalance.restol','size',[1 1],'>',0,'NaN',1);
++			md = checkfield(md,'stressbalance.reltol','size',[1 1]);
++			md = checkfield(md,'stressbalance.abstol','size',[1 1]);
++			md = checkfield(md,'stressbalance.isnewton','numel',[1],'values',[0 1 2]);
++			md = checkfield(md,'stressbalance.FSreconditioning','size',[1 1],'NaN',1);
++			md = checkfield(md,'stressbalance.viscosity_overshoot','size',[1 1],'NaN',1);
+ 			if md.mesh.dimension==2,
+-				md = checkfield(md,'diagnostic.icefront','size',[NaN 4],'NaN',1);
++				md = checkfield(md,'stressbalance.icefront','size',[NaN 4],'NaN',1);
+ 			else
+-				md = checkfield(md,'diagnostic.icefront','size',[NaN 6],'NaN',1);
++				md = checkfield(md,'stressbalance.icefront','size',[NaN 6],'NaN',1);
+ 			end
+-			md = checkfield(md,'diagnostic.icefront(:,end)','values',[0 1 2]);
+-			md = checkfield(md,'diagnostic.maxiter','size',[1 1],'>=',1);
+-			md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices 6]);
+-			md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices 3]);
+-			if ~isempty(md.diagnostic.requested_outputs),
+-				md = checkfield(md,'diagnostic.requested_outputs','size',[NaN 1]);
++			md = checkfield(md,'stressbalance.icefront(:,end)','values',[0 1 2]);
++			md = checkfield(md,'stressbalance.maxiter','size',[1 1],'>=',1);
++			md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices 6]);
++			md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices 3]);
++			if ~isempty(md.stressbalance.requested_outputs),
++				md = checkfield(md,'stressbalance.requested_outputs','size',[NaN 1]);
+ 			end
+ 
+ 			%singular solution
+-			if ~(any(~isnan(md.diagnostic.spcvx)) & any(~isnan(md.diagnostic.spcvy))),
++			if ~(any(~isnan(md.stressbalance.spcvx)) & any(~isnan(md.stressbalance.spcvy))),
+ 				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
+ 			end
+ 			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+-			if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
+-				md = checkmessage(md,['Each line of diagnostic.referential should contain either only NaN values or no NaN values']);
++			if any(sum(isnan(md.stressbalance.referential),2)~=0 & sum(isnan(md.stressbalance.referential),2)~=6),
++				md = checkmessage(md,['Each line of stressbalance.referential should contain either only NaN values or no NaN values']);
+ 			end
+ 			%CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+-			if any(sum(isnan(md.diagnostic.referential),2)==0),
+-				pos=find(sum(isnan(md.diagnostic.referential),2)==0);
+-				if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps),
+-					md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
++			if any(sum(isnan(md.stressbalance.referential),2)==0),
++				pos=find(sum(isnan(md.stressbalance.referential),2)==0);
++				if any(abs(dot(md.stressbalance.referential(pos,1:3),md.stressbalance.referential(pos,4:6),2))>eps),
++					md = checkmessage(md,['Vectors in stressbalance.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
+ 				end
+ 			end
+ 			%CHECK THAT NO rotation specified for FS Grounded ice at base
+ 			if md.mesh.dimension==3 & md.flowequation.isFS,
+ 				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
+-				if any(~isnan(md.diagnostic.referential(pos,:))),
++				if any(~isnan(md.stressbalance.referential(pos,:))),
+ 					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+ 				end
+-				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
++				md = checkfield(md,'stressbalance.FSreconditioning','>',0);
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 
+-			disp(sprintf('   Diagnostic solution parameters:'));
++			disp(sprintf('   Stressbalance solution parameters:'));
+ 
+ 			disp(sprintf('\n      %s','Convergence criteria:'));
+ 			fielddisplay(obj,'restol','mechanical equilibrium residual convergence criterion');
+@@ -203,7 +203,7 @@
+ 			pos=find(data(:,end)==0); data(pos,end)=AirEnum();
+ 			pos=find(data(:,end)==1); data(pos,end)=WaterEnum();
+ 			pos=find(data(:,end)==2); data(pos,end)=IceEnum();
+-			WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum(),'format','DoubleMat','mattype',3);
++			WriteData(fid,'data',data,'enum',StressbalanceIcefrontEnum(),'format','DoubleMat','mattype',3);
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15770)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15771)
+@@ -71,7 +71,7 @@
+ 		self.cluster          = generic()
+ 
+ 		self.balancethickness = balancethickness()
+-		self.diagnostic       = stressbalance()
++		self.stressbalance       = stressbalance()
+ 		self.groundingline    = groundingline()
+ 		self.hydrology        = hydrologyshreve()
+ 		self.masstransport       = masstransport()
+@@ -110,7 +110,7 @@
+ 		        'toolkits',\
+ 		        'cluster',\
+ 		        'balancethickness',\
+-		        'diagnostic',\
++		        'stressbalance',\
+ 		        'groundingline',\
+ 		        'hydrology',\
+ 		        'masstransport',\
+@@ -147,7 +147,7 @@
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("toolkits","[%s,%s]" % ("1x1",obj.toolkits.__class__.__name__),"PETSc options for each solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("cluster","[%s,%s]" % ("1x1",obj.cluster.__class__.__name__),"cluster parameters (number of cpus...)"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("balancethickness","[%s,%s]" % ("1x1",obj.balancethickness.__class__.__name__),"parameters for balancethickness solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("diagnostic","[%s,%s]" % ("1x1",obj.diagnostic.__class__.__name__),"parameters for diagnostic solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("stressbalance","[%s,%s]" % ("1x1",obj.stressbalance.__class__.__name__),"parameters for stressbalance solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("groundingline","[%s,%s]" % ("1x1",obj.groundingline.__class__.__name__),"parameters for groundingline solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("hydrology","[%s,%s]" % ("1x1",obj.hydrology.__class__.__name__),"parameters for hydrology solution"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("masstransport","[%s,%s]" % ("1x1",obj.masstransport.__class__.__name__),"parameters for masstransport solution"))
+@@ -343,10 +343,10 @@
+ 			md2.mesh.edges=numpy.delete(md2.mesh.edges,pos,axis=0)
+ 
+ 		#Penalties
+-		if numpy.any(numpy.logical_not(numpy.isnan(md2.diagnostic.vertex_pairing))):
+-			for i in xrange(numpy.size(md1.diagnostic.vertex_pairing,axis=0)):
+-				md2.diagnostic.vertex_pairing[i,:]=Pnode[md1.diagnostic.vertex_pairing[i,:]]
+-			md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing[numpy.nonzero(md2.diagnostic.vertex_pairing[:,0])[0],:]
++		if numpy.any(numpy.logical_not(numpy.isnan(md2.stressbalance.vertex_pairing))):
++			for i in xrange(numpy.size(md1.stressbalance.vertex_pairing,axis=0)):
++				md2.stressbalance.vertex_pairing[i,:]=Pnode[md1.stressbalance.vertex_pairing[i,:]]
++			md2.stressbalance.vertex_pairing=md2.stressbalance.vertex_pairing[numpy.nonzero(md2.stressbalance.vertex_pairing[:,0])[0],:]
+ 		if numpy.any(numpy.logical_not(numpy.isnan(md2.masstransport.vertex_pairing))):
+ 			for i in xrange(numpy.size(md1.masstransport.vertex_pairing,axis=0)):
+ 				md2.masstransport.vertex_pairing[i,:]=Pnode[md1.masstransport.vertex_pairing[i,:]]
+@@ -378,16 +378,16 @@
+ 		#Figure out which node are on the boundary between md2 and md1
+ 		nodestoflag1=numpy.intersect1d(orphans_node,pos_node)
+ 		nodestoflag2=Pnode[nodestoflag1].astype(int)-1
+-		if numpy.size(md1.diagnostic.spcvx)>1 and numpy.size(md1.diagnostic.spcvy)>2 and numpy.size(md1.diagnostic.spcvz)>2:
++		if numpy.size(md1.stressbalance.spcvx)>1 and numpy.size(md1.stressbalance.spcvy)>2 and numpy.size(md1.stressbalance.spcvz)>2:
+ 			if numpy.size(md1.inversion.vx_obs)>1 and numpy.size(md1.inversion.vy_obs)>1:
+-				md2.diagnostic.spcvx[nodestoflag2]=md2.inversion.vx_obs[nodestoflag2] 
+-				md2.diagnostic.spcvy[nodestoflag2]=md2.inversion.vy_obs[nodestoflag2]
++				md2.stressbalance.spcvx[nodestoflag2]=md2.inversion.vx_obs[nodestoflag2] 
++				md2.stressbalance.spcvy[nodestoflag2]=md2.inversion.vy_obs[nodestoflag2]
+ 			else:
+-				md2.diagnostic.spcvx[nodestoflag2]=float('NaN')
+-				md2.diagnostic.spcvy[nodestoflag2]=float('NaN')
++				md2.stressbalance.spcvx[nodestoflag2]=float('NaN')
++				md2.stressbalance.spcvy[nodestoflag2]=float('NaN')
+ 				print "\n!! extract warning: spc values should be checked !!\n\n"
+ 			#put 0 for vz
+-			md2.diagnostic.spcvz[nodestoflag2]=0
++			md2.stressbalance.spcvz[nodestoflag2]=0
+ 		if numpy.any(numpy.logical_not(numpy.isnan(md1.thermal.spctemperature))):
+ 			md2.thermal.spctemperature[nodestoflag2,0]=1
+ 
+@@ -607,14 +607,14 @@
+ 		md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node')
+ 
+ 		#boundary conditions
+-		md.diagnostic.spcvx=project3d(md,'vector',md.diagnostic.spcvx,'type','node')
+-		md.diagnostic.spcvy=project3d(md,'vector',md.diagnostic.spcvy,'type','node')
+-		md.diagnostic.spcvz=project3d(md,'vector',md.diagnostic.spcvz,'type','node')
++		md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node')
++		md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node')
++		md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node')
+ 		md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',float('NaN'))
+ 		md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node')
+ 		md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node')
+-		md.diagnostic.referential=project3d(md,'vector',md.diagnostic.referential,'type','node')
+-		md.diagnostic.loadingforce=project3d(md,'vector',md.diagnostic.loadingforce,'type','node')
++		md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node')
++		md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node')
+ 
+ 		#connectivity
+ 		md.mesh.elementconnectivity=numpy.tile(md.mesh.elementconnectivity,(numlayers-1,1))
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15771)
+@@ -28,7 +28,7 @@
+ 		cluster          = 0;
+ 
+ 		balancethickness = 0;
+-		diagnostic       = 0;
++		stressbalance       = 0;
+ 		groundingline    = 0;
+ 		hydrology        = 0;
+ 		masstransport       = 0;
+@@ -83,22 +83,14 @@
+ 				end
+ 			end
+ 			%2013 April 12
+-			if numel(md.diagnostic.loadingforce==1)
+-				md.diagnostic.loadingforce=0*ones(md.mesh.numberofvertices,3);
++			if numel(md.stressbalance.loadingforce==1)
++				md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 			end
+ 			%2013 April 17
+ 			if isa(md.hydrology,'hydrology'),
+ 				disp('Recovering old hydrology class');
+ 				md.hydrology=hydrologyshreve(md.materials);
+ 			end
+-			%2013 July 25th
+-			if isa(md.diagnostic,'diagnostic'),
+-				disp('Recovering old stressbalance class');
+-				icefront = md.diagnostic.icefront;
+-				md.diagnostic=stressbalance(md.diagnostic);
+-				md.mask.icelevelset=ones(md.mesh.numberofvertices,1);
+-				md.mask.icelevelset(icefront(:,1:end-2))=0;
+-			end
+ 		end% }}}
+ 	end
+ 	methods
+@@ -183,11 +175,11 @@
+ 			end	
+ 
+ 			%boundary conditions
+-			md.diagnostic.spcvx=project2d(md,md.diagnostic.spcvx,md.mesh.numberoflayers);
+-			md.diagnostic.spcvy=project2d(md,md.diagnostic.spcvy,md.mesh.numberoflayers);
+-			md.diagnostic.spcvz=project2d(md,md.diagnostic.spcvz,md.mesh.numberoflayers);
+-			md.diagnostic.referential=project2d(md,md.diagnostic.referential,md.mesh.numberoflayers);
+-			md.diagnostic.loadingforce=project2d(md,md.diagnostic.loadingforce,md.mesh.numberoflayers);
++			md.stressbalance.spcvx=project2d(md,md.stressbalance.spcvx,md.mesh.numberoflayers);
++			md.stressbalance.spcvy=project2d(md,md.stressbalance.spcvy,md.mesh.numberoflayers);
++			md.stressbalance.spcvz=project2d(md,md.stressbalance.spcvz,md.mesh.numberoflayers);
++			md.stressbalance.referential=project2d(md,md.stressbalance.referential,md.mesh.numberoflayers);
++			md.stressbalance.loadingforce=project2d(md,md.stressbalance.loadingforce,md.mesh.numberoflayers);
+ 			md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers);
+ 			md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
+ 
+@@ -441,11 +433,11 @@
+ 			end
+ 
+ 			%Penalties
+-			if ~isnan(md2.diagnostic.vertex_pairing),
+-				for i=1:size(md1.diagnostic.vertex_pairing,1);
+-					md2.diagnostic.vertex_pairing(i,:)=Pnode(md1.diagnostic.vertex_pairing(i,:));
++			if ~isnan(md2.stressbalance.vertex_pairing),
++				for i=1:size(md1.stressbalance.vertex_pairing,1);
++					md2.stressbalance.vertex_pairing(i,:)=Pnode(md1.stressbalance.vertex_pairing(i,:));
+ 				end
+-				md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing(find(md2.diagnostic.vertex_pairing(:,1)),:);
++				md2.stressbalance.vertex_pairing=md2.stressbalance.vertex_pairing(find(md2.stressbalance.vertex_pairing(:,1)),:);
+ 			end
+ 			if ~isnan(md2.masstransport.vertex_pairing),
+ 				for i=1:size(md1.masstransport.vertex_pairing,1);
+@@ -479,19 +471,19 @@
+ 			%Figure out which node are on the boundary between md2 and md1
+ 			nodestoflag1=intersect(orphans_node,pos_node);
+ 			nodestoflag2=Pnode(nodestoflag1);
+-			if numel(md1.diagnostic.spcvx)>1 & numel(md1.diagnostic.spcvy)>2 & numel(md1.diagnostic.spcvz)>2,
++			if numel(md1.stressbalance.spcvx)>1 & numel(md1.stressbalance.spcvy)>2 & numel(md1.stressbalance.spcvz)>2,
+ 				if numel(md1.inversion.vx_obs)>1 & numel(md1.inversion.vy_obs)>1
+-					md2.diagnostic.spcvx(nodestoflag2)=md2.inversion.vx_obs(nodestoflag2); 
+-					md2.diagnostic.spcvy(nodestoflag2)=md2.inversion.vy_obs(nodestoflag2);
++					md2.stressbalance.spcvx(nodestoflag2)=md2.inversion.vx_obs(nodestoflag2); 
++					md2.stressbalance.spcvy(nodestoflag2)=md2.inversion.vy_obs(nodestoflag2);
+ 				else
+-					md2.diagnostic.spcvx(nodestoflag2)=NaN;
+-					md2.diagnostic.spcvy(nodestoflag2)=NaN;
++					md2.stressbalance.spcvx(nodestoflag2)=NaN;
++					md2.stressbalance.spcvy(nodestoflag2)=NaN;
+ 					disp(' ')
+ 					disp('!! extract warning: spc values should be checked !!')
+ 					disp(' ')
+ 				end
+ 				%put 0 for vz
+-				md2.diagnostic.spcvz(nodestoflag2)=0;
++				md2.stressbalance.spcvz(nodestoflag2)=0;
+ 			end
+ 			if ~isnan(md1.thermal.spctemperature),
+ 				md2.thermal.spctemperature(nodestoflag2,1)=1;
+@@ -710,14 +702,14 @@
+ 			md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node');
+ 
+ 			%boundary conditions
+-			md.diagnostic.spcvx=project3d(md,'vector',md.diagnostic.spcvx,'type','node');
+-			md.diagnostic.spcvy=project3d(md,'vector',md.diagnostic.spcvy,'type','node');
+-			md.diagnostic.spcvz=project3d(md,'vector',md.diagnostic.spcvz,'type','node');
++			md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node');
++			md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node');
++			md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node');
+ 			md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
+ 			md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node');
+ 			md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
+-			md.diagnostic.referential=project3d(md,'vector',md.diagnostic.referential,'type','node');
+-			md.diagnostic.loadingforce=project3d(md,'vector',md.diagnostic.loadingforce,'type','node');
++			md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node');
++			md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node');
+ 
+ 			%connectivity
+ 			md.mesh.elementconnectivity=repmat(md.mesh.elementconnectivity,numlayers-1,1);
+@@ -863,7 +855,7 @@
+ 			if isfield(structmd,'vertices_type'), md.flowequation.vertex_equation=structmd.vertices_type; end
+ 			if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
+ 			if isfield(structmd,'max_steadystate_iterations'), md.steadystate.maxiter=structmd.max_steadystate_iterations; end
+-			if isfield(structmd,'isdiagnostic'), md.transient.isdiagnostic=structmd.isdiagnostic; end
++			if isfield(structmd,'isdiagnostic'), md.transient.isstressbalance=structmd.isdiagnostic; end
+ 			if isfield(structmd,'isprognostic'), md.transient.ismasstransport=structmd.isprognostic; end
+ 			if isfield(structmd,'isthermal'), md.transient.isthermal=structmd.isthermal; end
+ 			if isfield(structmd,'control_analysis'), md.inversion.iscontrol=structmd.control_analysis; end
+@@ -928,8 +920,7 @@
+ 			if isfield(structmd,'x'), md.mesh.x=structmd.x; end
+ 			if isfield(structmd,'z'), md.mesh.z=structmd.z; end
+ 			if isfield(structmd,'mask'), md.flaim.criterion=structmd.mask; end
+-			if isfield(structmd,'pressureload'), md.diagnostic.icefront=structmd.pressureload; end
+-			if isfield(structmd,'diagnostic_ref'), md.diagnostic.referential=structmd.diagnostic_ref; end
++			if isfield(structmd,'diagnostic_ref'), md.stressbalance.referential=structmd.diagnostic_ref; end
+ 			if isfield(structmd,'npart'); md.qmu.numberofpartitions=structmd.npart; end
+ 			if isfield(structmd,'part'); md.qmu.partition=structmd.part; end
+ 
+@@ -943,30 +934,30 @@
+ 			end
+ 
+ 			if isfield(structmd,'spcvelocity'), 
+-				md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-				md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-				md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-				pos=find(structmd.spcvelocity(:,1)); md.diagnostic.spcvx(pos)=structmd.spcvelocity(pos,4); 
+-				pos=find(structmd.spcvelocity(:,2)); md.diagnostic.spcvy(pos)=structmd.spcvelocity(pos,5); 
+-				pos=find(structmd.spcvelocity(:,3)); md.diagnostic.spcvz(pos)=structmd.spcvelocity(pos,6); 
++				md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++				md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++				md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(structmd.spcvelocity(:,1)); md.stressbalance.spcvx(pos)=structmd.spcvelocity(pos,4); 
++				pos=find(structmd.spcvelocity(:,2)); md.stressbalance.spcvy(pos)=structmd.spcvelocity(pos,5); 
++				pos=find(structmd.spcvelocity(:,3)); md.stressbalance.spcvz(pos)=structmd.spcvelocity(pos,6); 
+ 			end
+ 			if isfield(structmd,'spcvx'), 
+-				md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-				pos=find(~isnan(structmd.spcvx)); md.diagnostic.spcvx(pos)=structmd.spcvx(pos); 
++				md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvx)); md.stressbalance.spcvx(pos)=structmd.spcvx(pos); 
+ 			end
+ 			if isfield(structmd,'spcvy'),
+-				md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-				pos=find(~isnan(structmd.spcvy)); md.diagnostic.spcvy(pos)=structmd.spcvy(pos);     
++				md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvy)); md.stressbalance.spcvy(pos)=structmd.spcvy(pos);     
+ 			end
+ 			if isfield(structmd,'spcvz'),
+-				md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-				pos=find(~isnan(structmd.spcvz)); md.diagnostic.spcvz(pos)=structmd.spcvz(pos);     
++				md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvz)); md.stressbalance.spcvz(pos)=structmd.spcvz(pos);     
+ 			end
+ 			if isfield(structmd,'pressureload'),
+ 				if ~isempty(structmd.pressureload) & ismember(structmd.pressureload(end,end),[118 119 120]),
+-					pos=find(structmd.pressureload(:,end)==120); md.diagnostic.icefront(pos,end)=0;
+-					pos=find(structmd.pressureload(:,end)==118); md.diagnostic.icefront(pos,end)=1;
+-					pos=find(structmd.pressureload(:,end)==119); md.diagnostic.icefront(pos,end)=2;
++					pos=find(structmd.pressureload(:,end)==120); md.stressbalance.icefront(pos,end)=0;
++					pos=find(structmd.pressureload(:,end)==118); md.stressbalance.icefront(pos,end)=1;
++					pos=find(structmd.pressureload(:,end)==119); md.stressbalance.icefront(pos,end)=2;
+ 				end
+ 			end
+ 			if isfield(structmd,'elements_type') & structmd.elements_type(end,end)>50,
+@@ -1038,12 +1029,11 @@
+ 				md.mesh.lowerelements=transpose(1:md.mesh.numberofelements)-md.mesh.numberofelements2d;
+ 				md.mesh.lowerelements(1:md.mesh.numberofelements2d)=NaN;
+ 			end
+-
+ 			if ~isfield(structmd,'diagnostic_ref');
+-				md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
++				md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
+ 			end
+ 			if ~isfield(structmd,'loadingforce');
+-				md.diagnostic.loadingforce=0*ones(md.mesh.numberofvertices,3);
++				md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 			end
+ 
+ 			%2013 August 9
+@@ -1051,6 +1041,11 @@
+ 				disp('Recovering old prognostic class');
+ 				md.masstransport=masstransport(structmd.prognostic);
+ 			end
++			%2013 August 9
++			if isfield(structmd,'diagnostic') & isa(structmd.diagnostic,'diagnostic'),
++				disp('Recovering old diagnostic class');
++				md.stressbalance=masstransport(structmd.diagnostic);
++			end
+ 		end% }}}
+ 		function md = setdefaultparameters(md) % {{{
+ 
+@@ -1074,7 +1069,7 @@
+ 			md.toolkits         = toolkits();
+ 			md.cluster          = generic();
+ 			md.balancethickness = balancethickness();
+-			md.diagnostic       = stressbalance();
++			md.stressbalance       = stressbalance();
+ 			md.hydrology        = hydrologyshreve();
+ 			md.masstransport       = masstransport();
+ 			md.thermal          = thermal();
+@@ -1110,7 +1105,7 @@
+ 			disp(sprintf('%19s: %-22s -- %s','toolkits'          ,['[1x1 ' class(obj.toolkits) ']'],'PETSc options for each solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','cluster'         ,['[1x1 ' class(obj.cluster) ']'],'cluster parameters (number of cpus...)'));
+ 			disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class(obj.balancethickness) ']'],'parameters for balancethickness solution'));
+-			disp(sprintf('%19s: %-22s -- %s','diagnostic'      ,['[1x1 ' class(obj.diagnostic) ']'],'parameters for diagnostic solution'));
++			disp(sprintf('%19s: %-22s -- %s','stressbalance'      ,['[1x1 ' class(obj.stressbalance) ']'],'parameters for stressbalance solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','groundingline'   ,['[1x1 ' class(obj.groundingline) ']'],'parameters for groundingline solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','hydrology'       ,['[1x1 ' class(obj.hydrology) ']'],'parameters for hydrology solution'));
+ 			disp(sprintf('%19s: %-22s -- %s','masstransport'      ,['[1x1 ' class(obj.masstransport) ']'],'parameters for masstransport solution'));
+Index: ../trunk-jpl/src/m/classes/model/planet.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/planet.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/model/planet.m	(revision 15771)
+@@ -38,13 +38,13 @@
+ 			 md.settings         = settings();
+ 			 md.solver           = solver();
+ 			 if ismumps(),
+-				 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum(),mumpsoptions());
++				 md.solver           = addoptions(md.solver,StressbalanceVerticalAnalysisEnum(),mumpsoptions());
+ 			 else
+-				 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum(),iluasmoptions());
++				 md.solver           = addoptions(md.solver,StressbalanceVerticalAnalysisEnum(),iluasmoptions());
+ 			 end
+ 			 md.cluster          = generic();
+ 			 md.balancethickness = balancethickness();
+-			 md.diagnostic       = diagnostic();
++			 md.stressbalance       = stressbalance();
+ 			 md.hydrology        = hydrology();
+ 			 md.masstransport       = masstransport();
+ 			 md.thermal          = thermal();
+Index: ../trunk-jpl/src/m/classes/transient.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/transient.m	(revision 15771)
+@@ -6,7 +6,7 @@
+ classdef transient
+ 	properties (SetAccess=public) 
+ 		ismasstransport      = 0;
+-		isdiagnostic      = 0;
++		isstressbalance      = 0;
+ 		isthermal         = 0;
+ 		isgroundingline   = 0;
+ 		isgia             = 0;
+@@ -23,9 +23,9 @@
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+-			%full analysis: Diagnostic, Masstransport and Thermal but no groundingline migration for now
++			%full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
+ 			obj.ismasstransport=1;
+-			obj.isdiagnostic=1;
++			obj.isstressbalance=1;
+ 			obj.isthermal=1;
+ 			obj.isgroundingline=0;
+ 			obj.isgia=0;
+@@ -37,7 +37,7 @@
+ 			if solution~=TransientSolutionEnum(), return; end
+ 
+ 			md = checkfield(md,'transient.ismasstransport','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'transient.isdiagnostic','numel',[1],'values',[0 1]);
++			md = checkfield(md,'transient.isstressbalance','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isthermal','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isgia','numel',[1],'values',[0 1]);
+@@ -48,7 +48,7 @@
+ 			disp(sprintf('   transient solution parameters:'));
+ 
+ 			fielddisplay(obj,'ismasstransport','indicates if a masstransport solution is used in the transient');
+-			fielddisplay(obj,'isdiagnostic','indicates if a diagnostic solution is used in the transient');
++			fielddisplay(obj,'isstressbalance','indicates if a stressbalance solution is used in the transient');
+ 			fielddisplay(obj,'isthermal','indicates if a thermal solution is used in the transient');
+ 			fielddisplay(obj,'isgroundingline','indicates if a groundingline migration is used in the transient');
+ 			fielddisplay(obj,'isgia','indicates if a postglacial rebound model is used in the transient');
+@@ -57,7 +57,7 @@
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','ismasstransport','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','isdiagnostic','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','isstressbalance','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isthermal','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isgroundingline','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isgia','format','Boolean');
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15770)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15771)
+@@ -106,48 +106,48 @@
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+ 		#Early return
+-		if DiagnosticHorizAnalysisEnum() not in analyses:
++		if StressbalanceAnalysisEnum() not in analyses:
+ 			return md
+ 
+-		md = checkfield(md,'diagnostic.spcvx','forcing',1)
+-		md = checkfield(md,'diagnostic.spcvy','forcing',1)
++		md = checkfield(md,'stressbalance.spcvx','forcing',1)
++		md = checkfield(md,'stressbalance.spcvy','forcing',1)
+ 		if md.mesh.dimension==3:
+-			md = checkfield(md,'diagnostic.spcvz','forcing',1)
+-		md = checkfield(md,'diagnostic.restol','size',[1],'>',0)
+-		md = checkfield(md,'diagnostic.reltol','size',[1])
+-		md = checkfield(md,'diagnostic.abstol','size',[1])
+-		md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0,1,2])
+-		md = checkfield(md,'diagnostic.FSreconditioning','size',[1],'NaN',1)
+-		md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1],'NaN',1)
+-		md = checkfield(md,'diagnostic.maxiter','size',[1],'>=',1)
+-		md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices,6])
+-		md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices,3])
+-		if not md.diagnostic.requested_outputs:
+-			md = checkfield(md,'diagnostic.requested_outputs','size',[float('NaN'),1])
++			md = checkfield(md,'stressbalance.spcvz','forcing',1)
++		md = checkfield(md,'stressbalance.restol','size',[1],'>',0)
++		md = checkfield(md,'stressbalance.reltol','size',[1])
++		md = checkfield(md,'stressbalance.abstol','size',[1])
++		md = checkfield(md,'stressbalance.isnewton','numel',[1],'values',[0,1,2])
++		md = checkfield(md,'stressbalance.FSreconditioning','size',[1],'NaN',1)
++		md = checkfield(md,'stressbalance.viscosity_overshoot','size',[1],'NaN',1)
++		md = checkfield(md,'stressbalance.maxiter','size',[1],'>=',1)
++		md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices,6])
++		md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices,3])
++		if not md.stressbalance.requested_outputs:
++			md = checkfield(md,'stressbalance.requested_outputs','size',[float('NaN'),1])
+ 
+ 		#singular solution
+-#		if ~any((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy))==2),
+-		if not numpy.any(numpy.logical_and(numpy.logical_not(numpy.isnan(md.diagnostic.spcvx)),numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)))):
++#		if ~any((~isnan(md.stressbalance.spcvx)+~isnan(md.stressbalance.spcvy))==2),
++		if not numpy.any(numpy.logical_and(numpy.logical_not(numpy.isnan(md.stressbalance.spcvx)),numpy.logical_not(numpy.isnan(md.stressbalance.spcvy)))):
+ 			md.checkmessage("model is not well posed (singular). You need at least one node with fixed velocity!")
+ 		#CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+-#		if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
+-		if numpy.any(numpy.logical_and(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)!=0,numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)!=6)):
+-			md.checkmessage("Each line of diagnostic.referential should contain either only NaN values or no NaN values")
++#		if any(sum(isnan(md.stressbalance.referential),2)~=0 & sum(isnan(md.stressbalance.referential),2)~=6),
++		if numpy.any(numpy.logical_and(numpy.sum(numpy.isnan(md.stressbalance.referential),axis=1)!=0,numpy.sum(numpy.isnan(md.stressbalance.referential),axis=1)!=6)):
++			md.checkmessage("Each line of stressbalance.referential should contain either only NaN values or no NaN values")
+ 		#CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+-#		if any(sum(isnan(md.diagnostic.referential),2)==0),
+-		if numpy.any(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==0):
+-			pos=[i for i,item in enumerate(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)) if item==0]
++#		if any(sum(isnan(md.stressbalance.referential),2)==0),
++		if numpy.any(numpy.sum(numpy.isnan(md.stressbalance.referential),axis=1)==0):
++			pos=[i for i,item in enumerate(numpy.sum(numpy.isnan(md.stressbalance.referential),axis=1)) if item==0]
+ #			numpy.inner (and numpy.dot) calculate all the dot product permutations, resulting in a full matrix multiply
+-#			if numpy.any(numpy.abs(numpy.inner(md.diagnostic.referential[pos,0:2],md.diagnostic.referential[pos,3:5]).diagonal())>sys.float_info.epsilon):
+-#				md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
+-			for item in md.diagnostic.referential[pos,:]:
++#			if numpy.any(numpy.abs(numpy.inner(md.stressbalance.referential[pos,0:2],md.stressbalance.referential[pos,3:5]).diagonal())>sys.float_info.epsilon):
++#				md.checkmessage("Vectors in stressbalance.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
++			for item in md.stressbalance.referential[pos,:]:
+ 				if numpy.abs(numpy.inner(item[0:2],item[3:5]))>sys.float_info.epsilon:
+-					md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
++					md.checkmessage("Vectors in stressbalance.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
+ 		#CHECK THAT NO rotation specified for FS Grounded ice at base
+ #		if md.mesh.dimension==3 & md.flowequation.isFS,
+ 		if md.mesh.dimension==3 and md.flowequation.isFS:
+ 			pos=numpy.nonzero(numpy.logical_and(md.mask.vertexongroundedice,md.mesh.vertexonbed))
+-			if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.referential[pos,:]))):
++			if numpy.any(numpy.logical_not(numpy.isnan(md.stressbalance.referential[pos,:]))):
+ 				md.checkmessage("no referential should be specified for basal vertices of grounded ice")
+ 
+ 		return md
+@@ -156,23 +156,23 @@
+ 
+ 		yts=365.0*24.0*3600.0
+ 
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','restol','format','Double')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','reltol','format','Double')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','abstol','format','Double')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','isnewton','format','Integer')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','FSreconditioning','format','Double')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','viscosity_overshoot','format','Double')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','maxiter','format','Integer')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','shelf_dampening','format','Integer')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','penalty_factor','format','Double')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','rift_penalty_lock','format','Integer')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','rift_penalty_threshold','format','Integer')
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','referential','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'class','diagnostic','fieldname','requested_outputs','format','DoubleMat','mattype',3)
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','restol','format','Double')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','reltol','format','Double')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','abstol','format','Double')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3)
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','penalty_factor','format','Double')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer')
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','requested_outputs','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'data',self.loadingforce[:,0],'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum())
+ 		WriteData(fid,'data',self.loadingforce[:,1],'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum())
+ 		WriteData(fid,'data',self.loadingforce[:,2],'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum())
+Index: ../trunk-jpl/src/m/classes/steadystate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.py	(revision 15770)
++++ ../trunk-jpl/src/m/classes/steadystate.py	(revision 15771)
+@@ -47,8 +47,8 @@
+ 		if not md.timestepping.time_step==0:
+ 			md.checkmessage("for a steadystate computation, timestepping.time_step must be zero.")
+ 
+-		if numpy.isnan(md.diagnostic.reltol):
+-			md.checkmessage("for a steadystate computation, diagnostic.reltol (relative convergence criterion) must be defined!")
++		if numpy.isnan(md.stressbalance.reltol):
++			md.checkmessage("for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!")
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 15771)
+@@ -76,46 +76,46 @@
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+ 			%Early return
+-			if ~ismember(DiagnosticHorizAnalysisEnum(),analyses), return; end
++			if ~ismember(StressbalanceAnalysisEnum(),analyses), return; end
+ 
+-			md = checkfield(md,'diagnostic.spcvx','forcing',1);
+-			md = checkfield(md,'diagnostic.spcvy','forcing',1);
+-			if md.mesh.dimension==3, md = checkfield(md,'diagnostic.spcvz','forcing',1); end
+-			md = checkfield(md,'diagnostic.restol','size',[1 1],'>',0,'NaN',1);
+-			md = checkfield(md,'diagnostic.reltol','size',[1 1]);
+-			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
+-			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
+-			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
+-			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
+-			md = checkfield(md,'diagnostic.maxiter','size',[1 1],'>=',1);
+-			md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices 6]);
+-			md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices 3]);
+-			if ~isempty(md.diagnostic.requested_outputs),
+-				md = checkfield(md,'diagnostic.requested_outputs','size',[NaN 1]);
++			md = checkfield(md,'stressbalance.spcvx','forcing',1);
++			md = checkfield(md,'stressbalance.spcvy','forcing',1);
++			if md.mesh.dimension==3, md = checkfield(md,'stressbalance.spcvz','forcing',1); end
++			md = checkfield(md,'stressbalance.restol','size',[1 1],'>',0,'NaN',1);
++			md = checkfield(md,'stressbalance.reltol','size',[1 1]);
++			md = checkfield(md,'stressbalance.abstol','size',[1 1]);
++			md = checkfield(md,'stressbalance.isnewton','numel',[1],'values',[0 1 2]);
++			md = checkfield(md,'stressbalance.FSreconditioning','size',[1 1],'NaN',1);
++			md = checkfield(md,'stressbalance.viscosity_overshoot','size',[1 1],'NaN',1);
++			md = checkfield(md,'stressbalance.maxiter','size',[1 1],'>=',1);
++			md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices 6]);
++			md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices 3]);
++			if ~isempty(md.stressbalance.requested_outputs),
++				md = checkfield(md,'stressbalance.requested_outputs','size',[NaN 1]);
+ 			end
+ 
+ 			%singular solution
+-			if ~(any(~isnan(md.diagnostic.spcvx)) & any(~isnan(md.diagnostic.spcvy))),
++			if ~(any(~isnan(md.stressbalance.spcvx)) & any(~isnan(md.stressbalance.spcvy))),
+ 				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
+ 			end
+ 			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+-			if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
+-				md = checkmessage(md,['Each line of diagnostic.referential should contain either only NaN values or no NaN values']);
++			if any(sum(isnan(md.stressbalance.referential),2)~=0 & sum(isnan(md.stressbalance.referential),2)~=6),
++				md = checkmessage(md,['Each line of stressbalance.referential should contain either only NaN values or no NaN values']);
+ 			end
+ 			%CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+-			if any(sum(isnan(md.diagnostic.referential),2)==0),
+-				pos=find(sum(isnan(md.diagnostic.referential),2)==0);
+-				if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps),
+-					md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
++			if any(sum(isnan(md.stressbalance.referential),2)==0),
++				pos=find(sum(isnan(md.stressbalance.referential),2)==0);
++				if any(abs(dot(md.stressbalance.referential(pos,1:3),md.stressbalance.referential(pos,4:6),2))>eps),
++					md = checkmessage(md,['Vectors in stressbalance.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
+ 				end
+ 			end
+ 			%CHECK THAT NO rotation specified for FS Grounded ice at base
+ 			if md.mesh.dimension==3 & md.flowequation.isFS,
+ 				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
+-				if any(~isnan(md.diagnostic.referential(pos,:))),
++				if any(~isnan(md.stressbalance.referential(pos,:))),
+ 					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+ 				end
+-				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
++				md = checkfield(md,'stressbalance.FSreconditioning','>',0);
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
+@@ -155,23 +155,23 @@
+ 
+ 			yts=365.0*24.0*3600.0;
+ 
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','restol','format','Double');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','reltol','format','Double');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','abstol','format','Double');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','isnewton','format','Integer');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','FSreconditioning','format','Double');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','viscosity_overshoot','format','Double');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','maxiter','format','Integer');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','shelf_dampening','format','Integer');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','penalty_factor','format','Double');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','rift_penalty_lock','format','Integer');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','rift_penalty_threshold','format','Integer');
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','referential','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','diagnostic','fieldname','requested_outputs','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','restol','format','Double');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','reltol','format','Double');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','abstol','format','Double');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','isnewton','format','Integer');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','FSreconditioning','format','Double');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','maxiter','format','Integer');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','shelf_dampening','format','Integer');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','penalty_factor','format','Double');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','requested_outputs','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
+ 			WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
+ 			WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
+Index: ../trunk-jpl/src/m/classes/toolkits.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/toolkits.py	(revision 15770)
++++ ../trunk-jpl/src/m/classes/toolkits.py	(revision 15771)
+@@ -38,8 +38,8 @@
+ 	# }}}
+ 	def addoptions(self,analysis,*args):    # {{{
+ 		# Usage example:
+-		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),FSoptions());
+-		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum());
++		#    md.toolkits=addoptions(md.toolkits,StressbalanceAnalysisEnum(),FSoptions());
++		#    md.toolkits=addoptions(md.toolkits,StressbalanceAnalysisEnum());
+ 
+ 		#Convert analysis from enum to string
+ 		[analysis]=EnumToString(analysis)
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15770)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15771)
+@@ -60,7 +60,7 @@
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+-		if DiagnosticHorizAnalysisEnum() in analyses:
++		if StressbalanceAnalysisEnum() in analyses:
+ 			md = checkfield(md,'flowequation.isSIA','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isSSA','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0,1])
+@@ -81,7 +81,7 @@
+ 			if not (self.isSIA or self.isSSA or self.isL1L2 or self.isHO or self.isFS):
+ 				md.checkmessage("no element types set for this model")
+ 
+-		if DiagnosticSIAAnalysisEnum() in analyses:
++		if StressbalanceSIAAnalysisEnum() in analyses:
+ 			if any(self.element_equation==1):
+ 				if numpy.any(numpy.logical_and(self.element_equation,md.mask.elementonfloatingice)):
+ 					print "\n !!! Warning: SIA's model is not consistent on ice shelves !!!\n"
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15770)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15771)
+@@ -73,7 +73,7 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+-			if ismember(DiagnosticHorizAnalysisEnum(),analyses),
++			if ismember(StressbalanceAnalysisEnum(),analyses),
+ 
+ 				md = checkfield(md,'flowequation.isSIA','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isSSA','numel',[1],'values',[0 1]);
+@@ -97,7 +97,7 @@
+ 					md = checkmessage(md,['no element types set for this model']);
+ 				end
+ 			end
+-			if ismember(DiagnosticSIAAnalysisEnum(),analyses),
++			if ismember(StressbalanceSIAAnalysisEnum(),analyses),
+ 				if any(obj.element_equation==1),
+ 					if(obj.element_equation & md.mask.elementonfloatingice),
+ 						disp(sprintf('\n !!! Warning: SIA''s model is not consistent on ice shelves !!!\n'));
+Index: ../trunk-jpl/src/m/inversions/MisfitDeinterlace.m
+===================================================================
+--- ../trunk-jpl/src/m/inversions/MisfitDeinterlace.m	(revision 15770)
++++ ../trunk-jpl/src/m/inversions/MisfitDeinterlace.m	(revision 15771)
+@@ -5,7 +5,7 @@
+ %      Jstruct=MisfitDeinterlace(misfit,type)
+ %
+ %   Example:
+-%      Jstruct=MisfitDeinterlace(md.results.diagnostic.J,md.fit)
++%      Jstruct=MisfitDeinterlace(md.results.stressbalance.J,md.fit)
+ %
+ %
+ Jstruct=struct();
+Index: ../trunk-jpl/src/m/regional/BasinConstrain.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/BasinConstrain.m	(revision 15770)
++++ ../trunk-jpl/src/m/regional/BasinConstrain.m	(revision 15771)
+@@ -47,17 +47,17 @@
+ elementnotondomain=find(~elementondomain);
+ 
+ %all elements outside the constraint domain are equivalent to water. all nodes outside are spc'd.
+-md.diagnostic.spcvx(vertexnotondomain)=md.inversion.vx_obs(vertexnotondomain);
+-md.diagnostic.spcvy(vertexnotondomain)=md.inversion.vy_obs(vertexnotondomain);
++md.stressbalance.spcvx(vertexnotondomain)=md.inversion.vx_obs(vertexnotondomain);
++md.stressbalance.spcvy(vertexnotondomain)=md.inversion.vy_obs(vertexnotondomain);
+ md.mask.elementonwater(elementnotondomain)=1;
+ 
+ %now, make sure all elements on water have nodes that are spc'd, otherwise, we'll get a singular problem.
+ pos=find(~md.mask.elementonwater);
+ numpos=unique(md.mesh.elements(pos,:));
+ nodes=setdiff(1:1:md.mesh.numberofvertices,numpos);
+-md.diagnostic.spcvx(nodes)=md.inversion.vx_obs(nodes);
+-md.diagnostic.spcvy(nodes)=md.inversion.vy_obs(nodes);
++md.stressbalance.spcvx(nodes)=md.inversion.vx_obs(nodes);
++md.stressbalance.spcvy(nodes)=md.inversion.vy_obs(nodes);
+ 
+ %make sure icefronts that are completely spc'd are taken out:
+-free_segments=find((~isnan(md.diagnostic.spcvx(md.diagnostic.icefront(:,1:2))) + ~isnan(md.diagnostic.spcvy(md.diagnostic.icefront(:,1:2))))~=2);
+-md.diagnostic.icefront=md.diagnostic.icefront(free_segments,:);
++free_segments=find((~isnan(md.stressbalance.spcvx(md.stressbalance.icefront(:,1:2))) + ~isnan(md.stressbalance.spcvy(md.stressbalance.icefront(:,1:2))))~=2);
++md.stressbalance.icefront=md.stressbalance.icefront(free_segments,:);
+Index: ../trunk-jpl/src/m/regional/regionaltransient2d.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 15770)
++++ ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 15771)
+@@ -114,29 +114,29 @@
+ 
+ 	%As long as there are recorded time steps, spc the boundaries with velocities
+ 	if nsteps > 0
+-		md2.diagnostic.spcvx=md2.diagnostic.spcvx*ones(1,size(spcx,2));
+-		md2.diagnostic.spcvy=md2.diagnostic.spcvy*ones(1,size(spcy,2));
+-		md2.diagnostic.spcvz=md2.diagnostic.spcvz*ones(1,size(spcx,2));
++		md2.stressbalance.spcvx=md2.stressbalance.spcvx*ones(1,size(spcx,2));
++		md2.stressbalance.spcvy=md2.stressbalance.spcvy*ones(1,size(spcy,2));
++		md2.stressbalance.spcvz=md2.stressbalance.spcvz*ones(1,size(spcx,2));
+ 		md2.masstransport.spcthickness=md2.masstransport.spcthickness*ones(1,size(spct,2));
+-		md2.diagnostic.spcvx(find(md2.mesh.vertexonboundary),:)=spcx(find(md2.mesh.vertexonboundary),:);
+-		md2.diagnostic.spcvy(find(md2.mesh.vertexonboundary),:)=spcy(find(md2.mesh.vertexonboundary),:);
+-		md2.diagnostic.spcvz(find(md2.mesh.vertexonboundary),:)=0;
++		md2.stressbalance.spcvx(find(md2.mesh.vertexonboundary),:)=spcx(find(md2.mesh.vertexonboundary),:);
++		md2.stressbalance.spcvy(find(md2.mesh.vertexonboundary),:)=spcy(find(md2.mesh.vertexonboundary),:);
++		md2.stressbalance.spcvz(find(md2.mesh.vertexonboundary),:)=0;
+ 		md2.masstransport.spcthickness(find(md2.mesh.vertexonboundary),:)=spct(find(md2.mesh.vertexonboundary),:);
+-		md2.diagnostic.spcvx=[md2.diagnostic.spcvx; steps];
+-		md2.diagnostic.spcvy=[md2.diagnostic.spcvy; steps];
+-		md2.diagnostic.spcvz=[md2.diagnostic.spcvz; steps];
++		md2.stressbalance.spcvx=[md2.stressbalance.spcvx; steps];
++		md2.stressbalance.spcvy=[md2.stressbalance.spcvy; steps];
++		md2.stressbalance.spcvz=[md2.stressbalance.spcvz; steps];
+ 		md2.masstransport.spcthickness=[md2.masstransport.spcthickness; steps];
+ 	end
+ 
+-	%Diagnostic.  Don't spc the icefront vertices.
+-	if ~isnan(md2.diagnostic.icefront)
++	%Stressbalance.  Don't spc the icefront vertices.
++	if ~isnan(md2.stressbalance.icefront)
+ 		md1s=md1.extract(area);
+-		%md2.diagnostic.icefront=[md2.mesh.segments 2];
++		%md2.stressbalance.icefront=[md2.mesh.segments 2];
+ 		e2=md2.mesh.segments(:,end);
+ 		e1=md1s.mesh.segments(:,end);
+ 
+ 		pload = nan*ones(size(md1s.mesh.elements,1),1);
+-		pload(md1s.diagnostic.icefront(:,end-1))=md1s.diagnostic.icefront(:,end);
++		pload(md1s.stressbalance.icefront(:,end-1))=md1s.stressbalance.icefront(:,end);
+ 
+ 		x2=mean(md2.mesh.x(md2.mesh.elements(e2,:)),2);
+       y2=mean(md2.mesh.y(md2.mesh.elements(e2,:)),2);
+@@ -144,11 +144,11 @@
+       y1=mean(md1s.mesh.y(md1s.mesh.elements),2);
+ 
+ 		pload2=griddata(x1,y1,pload,x2,y2,'nearest');
+-		md2.diagnostic.icefront=[md2.mesh.segments(~isnan(pload2),:) pload2(~isnan(pload2))];
+-		md2.diagnostic.spcvx(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
+-		md2.diagnostic.spcvy(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
+-		md2.diagnostic.spcvz(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
+-		md2.masstransport.spcthickness(unique(md2.diagnostic.icefront(:,1:2)),:)=nan;
++		md2.stressbalance.icefront=[md2.mesh.segments(~isnan(pload2),:) pload2(~isnan(pload2))];
++		md2.stressbalance.spcvx(unique(md2.stressbalance.icefront(:,1:2)),:)=nan;
++		md2.stressbalance.spcvy(unique(md2.stressbalance.icefront(:,1:2)),:)=nan;
++		md2.stressbalance.spcvz(unique(md2.stressbalance.icefront(:,1:2)),:)=nan;
++		md2.masstransport.spcthickness(unique(md2.stressbalance.icefront(:,1:2)),:)=nan;
+ 	end
+ 
+ 	%Clear results fields
+Index: ../trunk-jpl/src/m/regional/BasinConstrainShelf.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/BasinConstrainShelf.m	(revision 15770)
++++ ../trunk-jpl/src/m/regional/BasinConstrainShelf.m	(revision 15771)
+@@ -47,28 +47,28 @@
+ elementnotondomain=find(~elementondomain);
+ 
+ %all elements outside the constraint domain are equivalent to water. all nodes outside are spc'd.
+-md.diagnostic.spcvx(vertexnotondomain)=md.inversion.vx_obs(vertexnotondomain);
+-md.diagnostic.spcvy(vertexnotondomain)=md.inversion.vy_obs(vertexnotondomain);
++md.stressbalance.spcvx(vertexnotondomain)=md.inversion.vx_obs(vertexnotondomain);
++md.stressbalance.spcvy(vertexnotondomain)=md.inversion.vy_obs(vertexnotondomain);
+ md.mask.elementonwater(elementnotondomain)=1;
+ 
+ %now, make sure all elements on water have nodes that are spc'd, otherwise, we'll get a singular problem.
+ pos=find(~md.mask.elementonwater);
+ numpos=unique(md.mesh.elements(pos,:));
+ nodes=setdiff(1:1:md.mesh.numberofvertices,numpos);
+-md.diagnostic.spcvx(nodes)=md.inversion.vx_obs(nodes);
+-md.diagnostic.spcvy(nodes)=md.inversion.vy_obs(nodes);
++md.stressbalance.spcvx(nodes)=md.inversion.vx_obs(nodes);
++md.stressbalance.spcvy(nodes)=md.inversion.vy_obs(nodes);
+ 
+ %make sure any node with NaN velocity is spc'd:
+ %we spc to the smoothed value, so that control methods don't go berserk trying to figure out what reaction force to apply for the spc to stand.
+ pos=find(isnan(md.inversion.vel_obs_raw));
+-md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos); 
+-md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos); 
++md.stressbalance.spcvx(pos)=md.inversion.vx_obs(pos); 
++md.stressbalance.spcvy(pos)=md.inversion.vy_obs(pos); 
+ 
+ %iceshelves: any vertex on floating ice is spc'd
+ pos=find(md.mask.vertexongroundedice);
+-md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos); 
+-md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos); 
++md.stressbalance.spcvx(pos)=md.inversion.vx_obs(pos); 
++md.stressbalance.spcvy(pos)=md.inversion.vy_obs(pos); 
+ 
+ %make sure icefronts that are completely spc'd are taken out:
+-free_segments=find((~isnan(md.diagnostic.spcvx(md.diagnostic.icefront(:,1:2))) + ~isnan(md.diagnostic.spcvy(md.diagnostic.icefront(:,1:2))) )~=2);
+-md.diagnostic.icefront=md.diagnostic.icefront(free_segments,:);
++free_segments=find((~isnan(md.stressbalance.spcvx(md.stressbalance.icefront(:,1:2))) + ~isnan(md.stressbalance.spcvy(md.stressbalance.icefront(:,1:2))) )~=2);
++md.stressbalance.icefront=md.stressbalance.icefront(free_segments,:);
+Index: ../trunk-jpl/src/m/contrib/hack/tres.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/hack/tres.m	(revision 15770)
++++ ../trunk-jpl/src/m/contrib/hack/tres.m	(revision 15771)
+@@ -3,27 +3,27 @@
+ %
+ %    Usage: md=tres(md,string)
+ %
+-%    Example: md=tres(md,'diagnostic');
++%    Example: md=tres(md,'stressbalance');
+ 
+ %check number of arguments
+ 
+-if strcmpi(string,'diagnostic'),
++if strcmpi(string,'stressbalance'),
+ 	if md.mesh.dimension==2,
+-		md.initialization.vx=md.results.DiagnosticSolution.Vx;
+-		md.initialization.vy=md.results.DiagnosticSolution.Vy;
++		md.initialization.vx=md.results.StressbalanceSolution.Vx;
++		md.initialization.vy=md.results.StressbalanceSolution.Vy;
+ 	else 
+-		md.initialization.vx=md.results.DiagnosticSolution.Vx;
+-		md.initialization.vy=md.results.DiagnosticSolution.Vy;
+-		md.initialization.vz=md.results.DiagnosticSolution.Vz;
++		md.initialization.vx=md.results.StressbalanceSolution.Vx;
++		md.initialization.vy=md.results.StressbalanceSolution.Vy;
++		md.initialization.vz=md.results.StressbalanceSolution.Vz;
+ 	end
+-	md.initialization.vel=md.results.DiagnosticSolution.Vel;
++	md.initialization.vel=md.results.StressbalanceSolution.Vel;
+ 
+-	if isfield(md.results.DiagnosticSolution,'Pressure'),
+-		md.initialization.pressure=md.results.DiagnosticSolution.Pressure;
++	if isfield(md.results.StressbalanceSolution,'Pressure'),
++		md.initialization.pressure=md.results.StressbalanceSolution.Pressure;
+ 	end
+ 	if ~isempty(md.rifts.riftstruct),
+-		if isfield(md.results.DiagnosticSolution,'riftproperties'),
+-			md.rifts.riftproperties=md.results.DiagnosticSolution.riftproperties;
++		if isfield(md.results.StressbalanceSolution,'riftproperties'),
++			md.rifts.riftproperties=md.results.StressbalanceSolution.riftproperties;
+ 		end
+ 	end
+ 
+Index: ../trunk-jpl/src/m/contrib/massbalance/contourmassbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/massbalance/contourmassbalance.m	(revision 15770)
++++ ../trunk-jpl/src/m/contrib/massbalance/contourmassbalance.m	(revision 15771)
+@@ -18,7 +18,7 @@
+ 
+ %Get segments enveloping contour
+ segments=contourenvelope(md,file);
+-%md.diagnostic.icefront=segments; plotmodel(md,'data','pressureload','expdisp',file);
++%md.stressbalance.icefront=segments; plotmodel(md,'data','pressureload','expdisp',file);
+ 
+ %get flag list of elements and nodes inside the contour
+ nodein=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,file,'node',1);
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 15770)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 15771)
+@@ -9,13 +9,13 @@
+ 			[analyses, numanalyses]=AnalysisConfiguration(solutiontype);
+ 	"""
+ 
+-	if   solutiontype == DiagnosticSolutionEnum():
++	if   solutiontype == StressbalanceSolutionEnum():
+ 		numanalyses=5
+-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum()]
++		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum()]
+ 
+ 	elif solutiontype == SteadystateSolutionEnum():
+ 		numanalyses=7 
+-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
++		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
+ 
+ 	elif solutiontype == ThermalSolutionEnum():
+ 		numanalyses=2 
+@@ -47,7 +47,7 @@
+ 
+ 	elif solutiontype == TransientSolutionEnum():
+ 		numanalyses=9 
+-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),MasstransportAnalysisEnum()]
++		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),MasstransportAnalysisEnum()]
+ 
+ 	elif solutiontype == FlaimSolutionEnum():
+ 		numanalyses=1 
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 15770)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 15771)
+@@ -44,13 +44,13 @@
+ 
+ switch solutiontype,
+ 
+-	case DiagnosticSolutionEnum(),
++	case StressbalanceSolutionEnum(),
+ 		numanalyses=5;
+-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum()];
++		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum()];
+ 
+ 	case SteadystateSolutionEnum(),
+ 		numanalyses=7; 
+-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum()];
++		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum()];
+ 
+ 	case ThermalSolutionEnum(),
+ 		numanalyses=2; 
+@@ -86,7 +86,7 @@
+ 
+ 	case TransientSolutionEnum(),
+ 		numanalyses=9; 
+-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();MasstransportAnalysisEnum()];
++		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();MasstransportAnalysisEnum()];
+ 
+ 	case FlaimSolutionEnum(),
+ 		numanalyses=1; 
+Index: ../trunk-jpl/src/m/qmu/dakota_m_write.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_m_write.m	(revision 15770)
++++ ../trunk-jpl/src/m/qmu/dakota_m_write.m	(revision 15771)
+@@ -206,7 +206,7 @@
+ display('Writing solution for Matlab m-file.');
+ fprintf(fidm,'%%  Run the solution.\n\n');
+ 
+-fprintf(fidm,['\tmd=solve(md,''diagnostic'',''' package ''');\n\n']);
++fprintf(fidm,['\tmd=solve(md,''stressbalance'',''' package ''');\n\n']);
+ 
+ end
+ 
+Index: ../trunk-jpl/src/m/qmu/preqmu.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/preqmu.m	(revision 15770)
++++ ../trunk-jpl/src/m/qmu/preqmu.m	(revision 15771)
+@@ -1,6 +1,6 @@
+ function md=preqmu(md,options)
+ %QMU - apply Quantification of Margins and Uncertainties techniques 
+-%      to a solution sequence (like diagnostic.m, progonstic.m, etc ...), 
++%      to a solution sequence (like stressbalance.m, progonstic.m, etc ...), 
+ %      using the Dakota software from Sandia.
+ %
+ %   options come from the solve.m routine. They can include Dakota options:
+Index: ../trunk-jpl/src/m/qmu/process_qmu_options.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/process_qmu_options.m	(revision 15770)
++++ ../trunk-jpl/src/m/qmu/process_qmu_options.m	(revision 15771)
+@@ -38,7 +38,7 @@
+ 
+ %check solution type is supported
+ if ~(strcmpi(analysis_type,'control') |  ...
+-		strcmpi(analysis_type,'diagnostic') |  ...
++		strcmpi(analysis_type,'stressbalance') |  ...
+ 		strcmpi(analysis_type,'masstransport') |  ...
+ 		strcmpi(analysis_type,'thermal') |  ...
+ 		strcmpi(analysis_type,'parameters') |  ...
+Index: ../trunk-jpl/src/m/qmu/examples/direct.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/examples/direct.m	(revision 15770)
++++ ../trunk-jpl/src/m/qmu/examples/direct.m	(revision 15771)
+@@ -1,6 +1,6 @@
+ %using library mode of Dakota, only for parallel runs.
+ md.qmu.params.direct=true;
+-md.qmu.params.analysis_driver='diagnostic';
++md.qmu.params.analysis_driver='stressbalance';
+ md.qmu.params.evaluation_concurrency=1;
+ 
+ %or for matlab direct driver
+Index: ../trunk-jpl/src/m/qmu/examples/samp_direct.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/examples/samp_direct.m	(revision 15770)
++++ ../trunk-jpl/src/m/qmu/examples/samp_direct.m	(revision 15771)
+@@ -49,7 +49,7 @@
+ %%  a variety of parameters
+ 
+ md.qmu.params.direct=true;
+-md.qmu.params.analysis_driver='diagnostic';
++md.qmu.params.analysis_driver='stressbalance';
+ md.qmu.params.evaluation_concurrency=1;
+ 
+ md.qmu.numberofpartitions=10;
+Index: ../trunk-jpl/src/m/qmu/examples/lrel_mmf.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/examples/lrel_mmf.m	(revision 15770)
++++ ../trunk-jpl/src/m/qmu/examples/lrel_mmf.m	(revision 15771)
+@@ -85,7 +85,7 @@
+ 
+ %%  sample analysis
+ 
+-%md=solve(md,'analysis_type','diagnostic');
++%md=solve(md,'analysis_type','stressbalance');
+ 
+ %plotmodel(md,'data','mesh')
+ %plotmodel(md,'data',md.qmu.partition)
+Index: ../trunk-jpl/src/m/miscellaneous/issmdoc.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 15770)
++++ ../trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 15771)
+@@ -11,5 +11,5 @@
+ disp(sprintf('%-63s %s','       md=setmask(md,''all'','''');','%defines the glacier system as an ice shelf (no island)'));
+ disp(sprintf('%-63s %s','       md=parameterize(md,''Square.par'');','%fills all the other fields of the model'));
+ disp(sprintf('%-63s %s','       md=setflowequation(md,''SSA'',''all'');','%defines all elements as SSA''s SSA'));
+-disp(sprintf('%-63s %s','       md=solve(md,DiagnosticSolutionEnum());','%solve for stress balance'));
+-disp(sprintf('%-63s %s','       plotmodel(md,''data'',md.results.DiagnosticSolution.Vel);','%displays the velocity (type plotdoc for plotmodel help)'));
++disp(sprintf('%-63s %s','       md=solve(md,StressbalanceSolutionEnum());','%solve for stress balance'));
++disp(sprintf('%-63s %s','       plotmodel(md,''data'',md.results.StressbalanceSolution.Vel);','%displays the velocity (type plotdoc for plotmodel help)'));
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15770)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15771)
+@@ -40,25 +40,25 @@
+ def ConstantsReferencetemperatureEnum(): return StringToEnum("ConstantsReferencetemperature")[0]
+ def ConstantsYtsEnum(): return StringToEnum("ConstantsYts")[0]
+ def DependentObjectEnum(): return StringToEnum("DependentObject")[0]
+-def DiagnosticAbstolEnum(): return StringToEnum("DiagnosticAbstol")[0]
+-def DiagnosticIcefrontEnum(): return StringToEnum("DiagnosticIcefront")[0]
+-def DiagnosticIsnewtonEnum(): return StringToEnum("DiagnosticIsnewton")[0]
+-def DiagnosticMaxiterEnum(): return StringToEnum("DiagnosticMaxiter")[0]
+-def DiagnosticNumRequestedOutputsEnum(): return StringToEnum("DiagnosticNumRequestedOutputs")[0]
+-def DiagnosticPenaltyFactorEnum(): return StringToEnum("DiagnosticPenaltyFactor")[0]
+-def DiagnosticReferentialEnum(): return StringToEnum("DiagnosticReferential")[0]
+-def DiagnosticReltolEnum(): return StringToEnum("DiagnosticReltol")[0]
+-def DiagnosticRequestedOutputsEnum(): return StringToEnum("DiagnosticRequestedOutputs")[0]
+-def DiagnosticRestolEnum(): return StringToEnum("DiagnosticRestol")[0]
+-def DiagnosticRiftPenaltyLockEnum(): return StringToEnum("DiagnosticRiftPenaltyLock")[0]
+-def DiagnosticRiftPenaltyThresholdEnum(): return StringToEnum("DiagnosticRiftPenaltyThreshold")[0]
+-def DiagnosticShelfDampeningEnum(): return StringToEnum("DiagnosticShelfDampening")[0]
+-def DiagnosticSpcvxEnum(): return StringToEnum("DiagnosticSpcvx")[0]
+-def DiagnosticSpcvyEnum(): return StringToEnum("DiagnosticSpcvy")[0]
+-def DiagnosticSpcvzEnum(): return StringToEnum("DiagnosticSpcvz")[0]
+-def DiagnosticFSreconditioningEnum(): return StringToEnum("DiagnosticFSreconditioning")[0]
+-def DiagnosticVertexPairingEnum(): return StringToEnum("DiagnosticVertexPairing")[0]
+-def DiagnosticViscosityOvershootEnum(): return StringToEnum("DiagnosticViscosityOvershoot")[0]
++def StressbalanceAbstolEnum(): return StringToEnum("StressbalanceAbstol")[0]
++def StressbalanceIcefrontEnum(): return StringToEnum("StressbalanceIcefront")[0]
++def StressbalanceIsnewtonEnum(): return StringToEnum("StressbalanceIsnewton")[0]
++def StressbalanceMaxiterEnum(): return StringToEnum("StressbalanceMaxiter")[0]
++def StressbalanceNumRequestedOutputsEnum(): return StringToEnum("StressbalanceNumRequestedOutputs")[0]
++def StressbalancePenaltyFactorEnum(): return StringToEnum("StressbalancePenaltyFactor")[0]
++def StressbalanceReferentialEnum(): return StringToEnum("StressbalanceReferential")[0]
++def StressbalanceReltolEnum(): return StringToEnum("StressbalanceReltol")[0]
++def StressbalanceRequestedOutputsEnum(): return StringToEnum("StressbalanceRequestedOutputs")[0]
++def StressbalanceRestolEnum(): return StringToEnum("StressbalanceRestol")[0]
++def StressbalanceRiftPenaltyLockEnum(): return StringToEnum("StressbalanceRiftPenaltyLock")[0]
++def StressbalanceRiftPenaltyThresholdEnum(): return StringToEnum("StressbalanceRiftPenaltyThreshold")[0]
++def StressbalanceShelfDampeningEnum(): return StringToEnum("StressbalanceShelfDampening")[0]
++def StressbalanceSpcvxEnum(): return StringToEnum("StressbalanceSpcvx")[0]
++def StressbalanceSpcvyEnum(): return StringToEnum("StressbalanceSpcvy")[0]
++def StressbalanceSpcvzEnum(): return StringToEnum("StressbalanceSpcvz")[0]
++def StressbalanceFSreconditioningEnum(): return StringToEnum("StressbalanceFSreconditioning")[0]
++def StressbalanceVertexPairingEnum(): return StringToEnum("StressbalanceVertexPairing")[0]
++def StressbalanceViscosityOvershootEnum(): return StringToEnum("StressbalanceViscosityOvershoot")[0]
+ def LoadingforceXEnum(): return StringToEnum("LoadingforceX")[0]
+ def LoadingforceYEnum(): return StringToEnum("LoadingforceY")[0]
+ def LoadingforceZEnum(): return StringToEnum("LoadingforceZ")[0]
+@@ -253,7 +253,7 @@
+ def TimesteppingCflCoefficientEnum(): return StringToEnum("TimesteppingCflCoefficient")[0]
+ def TimesteppingTimeAdaptEnum(): return StringToEnum("TimesteppingTimeAdapt")[0]
+ def TimesteppingTimeStepEnum(): return StringToEnum("TimesteppingTimeStep")[0]
+-def TransientIsdiagnosticEnum(): return StringToEnum("TransientIsdiagnostic")[0]
++def TransientIsstressbalanceEnum(): return StringToEnum("TransientIsstressbalance")[0]
+ def TransientIsgroundinglineEnum(): return StringToEnum("TransientIsgroundingline")[0]
+ def TransientIsmasstransportEnum(): return StringToEnum("TransientIsmasstransport")[0]
+ def TransientIsthermalEnum(): return StringToEnum("TransientIsthermal")[0]
+@@ -277,10 +277,10 @@
+ def BedSlopeSolutionEnum(): return StringToEnum("BedSlopeSolution")[0]
+ def BedSlopeXAnalysisEnum(): return StringToEnum("BedSlopeXAnalysis")[0]
+ def BedSlopeYAnalysisEnum(): return StringToEnum("BedSlopeYAnalysis")[0]
+-def DiagnosticHorizAnalysisEnum(): return StringToEnum("DiagnosticHorizAnalysis")[0]
+-def DiagnosticSIAAnalysisEnum(): return StringToEnum("DiagnosticSIAAnalysis")[0]
+-def DiagnosticSolutionEnum(): return StringToEnum("DiagnosticSolution")[0]
+-def DiagnosticVertAnalysisEnum(): return StringToEnum("DiagnosticVertAnalysis")[0]
++def StressbalanceAnalysisEnum(): return StringToEnum("StressbalanceAnalysis")[0]
++def StressbalanceSIAAnalysisEnum(): return StringToEnum("StressbalanceSIAAnalysis")[0]
++def StressbalanceSolutionEnum(): return StringToEnum("StressbalanceSolution")[0]
++def StressbalanceVerticalAnalysisEnum(): return StringToEnum("StressbalanceVerticalAnalysis")[0]
+ def EnthalpyAnalysisEnum(): return StringToEnum("EnthalpyAnalysis")[0]
+ def EnthalpySolutionEnum(): return StringToEnum("EnthalpySolution")[0]
+ def FlaimAnalysisEnum(): return StringToEnum("FlaimAnalysis")[0]
+Index: ../trunk-jpl/src/m/mech/cfl_step.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/cfl_step.m	(revision 15770)
++++ ../trunk-jpl/src/m/mech/cfl_step.m	(revision 15771)
+@@ -7,7 +7,7 @@
+ %      maxtime=cfl_step(md,vx,vy);
+ %
+ %   Example:
+-%      dt=cfl_step(md,md.results.DiagnosticSolution.Vx,md.results.DiagnosticSolution.Vy)
++%      dt=cfl_step(md,md.results.StressbalanceSolution.Vx,md.results.StressbalanceSolution.Vy)
+ 
+ %Check length of velocities 
+ if size(vx,1)~=md.mesh.numberofvertices & size(vy,1)~=md.mesh.numberofvertices,
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 15770)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 15771)
+@@ -4,7 +4,7 @@
+ 
+ def SetIceSheetBC(md):
+ 	"""
+-	SETICESHEETBC - Create the boundary conditions for diagnostic and thermal models for an IceSheet with no Ice Front
++	SETICESHEETBC - Create the boundary conditions for stressbalance and thermal models for an IceSheet with no Ice Front
+ 
+ 	   Usage:
+ 	      md=SetIceSheetBC(md)
+@@ -14,22 +14,22 @@
+ 
+ 	#node on Dirichlet
+ 	pos=numpy.nonzero(md.mesh.vertexonboundary)
+-	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvx[pos]=0
+-	md.diagnostic.spcvy[pos]=0
+-	md.diagnostic.spcvz[pos]=0
+-	md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+-	md.diagnostic.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
++	md.stressbalance.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx[pos]=0
++	md.stressbalance.spcvy[pos]=0
++	md.stressbalance.spcvz[pos]=0
++	md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
++	md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+-		print "      boundary conditions for diagnostic model: spc set as observed velocities"
+-		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
+-		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
++		print "      boundary conditions for stressbalance model: spc set as observed velocities"
++		md.stressbalance.spcvx[pos]=md.inversion.vx_obs[pos]
++		md.stressbalance.spcvy[pos]=md.inversion.vy_obs[pos]
+ 	else:
+-		print "      boundary conditions for diagnostic model: spc set as zero"
++		print "      boundary conditions for stressbalance model: spc set as zero"
+ 
+ 	#No ice front -> do nothing
+ 
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15770)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15771)
+@@ -1,9 +1,9 @@
+ function md=SetMarineIceSheetBC(md,varargin)
+-%SETICEMARINESHEETBC - Create the boundary conditions for diagnostic and thermal models for a  Marine Ice Sheet with Ice Front
++%SETICEMARINESHEETBC - Create the boundary conditions for stressbalance and thermal models for a  Marine Ice Sheet with Ice Front
+ %
+ %   Neumann BC are used on the ice front (an ARGUS contour around the ice front
+ %   can be given in input, or it will be deduced as onfloatingice & onboundary)
+-%   Dirichlet BC are used elsewhere for diagnostic
++%   Dirichlet BC are used elsewhere for stressbalance
+ %
+ %   Usage:
+ %      md=SetMarineIceSheetBC(md,icefrontfile)
+@@ -34,22 +34,22 @@
+ if isempty(pos),
+ 	warning('SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually')
+ end
+-md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvx(pos)=0;
+-md.diagnostic.spcvy(pos)=0;
+-md.diagnostic.spcvz(pos)=0;
+-md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+-md.diagnostic.loadingforce=0*ones(md.mesh.numberofvertices,3);
++md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx(pos)=0;
++md.stressbalance.spcvy(pos)=0;
++md.stressbalance.spcvz(pos)=0;
++md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
++md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 
+ %Dirichlet Values
+ if (length(md.inversion.vx_obs)==md.mesh.numberofvertices & length(md.inversion.vy_obs)==md.mesh.numberofvertices)
+-	disp('      boundary conditions for diagnostic model: spc set as observed velocities');
+-	md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos);
+-	md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos);
++	disp('      boundary conditions for stressbalance model: spc set as observed velocities');
++	md.stressbalance.spcvx(pos)=md.inversion.vx_obs(pos);
++	md.stressbalance.spcvy(pos)=md.inversion.vy_obs(pos);
+ else
+-	disp('      boundary conditions for diagnostic model: spc set as zero');
++	disp('      boundary conditions for stressbalance model: spc set as zero');
+ end
+ 
+ md.hydrology.spcwatercolumn=zeros(md.mesh.numberofvertices,2);
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 15770)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 15771)
+@@ -1,5 +1,5 @@
+ function md=SetIceSheetBC(md)
+-%SETICESHEETBC - Create the boundary conditions for diagnostic and thermal models for an IceSheet with no Ice Front
++%SETICESHEETBC - Create the boundary conditions for stressbalance and thermal models for an IceSheet with no Ice Front
+ %
+ %   Usage:
+ %      md=SetIceSheetBC(md)
+@@ -8,22 +8,22 @@
+ 
+ %node on Dirichlet
+ pos=find(md.mesh.vertexonboundary);
+-md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvx(pos)=0;
+-md.diagnostic.spcvy(pos)=0;
+-md.diagnostic.spcvz(pos)=0;
+-md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+-md.diagnostic.loadingforce=0*ones(md.mesh.numberofvertices,3);
++md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx(pos)=0;
++md.stressbalance.spcvy(pos)=0;
++md.stressbalance.spcvz(pos)=0;
++md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
++md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 
+ %Dirichlet Values
+ if (length(md.inversion.vx_obs)==md.mesh.numberofvertices & length(md.inversion.vy_obs)==md.mesh.numberofvertices)
+-	disp('      boundary conditions for diagnostic model: spc set as observed velocities');
+-	md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos);
+-	md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos);
++	disp('      boundary conditions for stressbalance model: spc set as observed velocities');
++	md.stressbalance.spcvx(pos)=md.inversion.vx_obs(pos);
++	md.stressbalance.spcvy(pos)=md.inversion.vy_obs(pos);
+ else
+-	disp('      boundary conditions for diagnostic model: spc set as zero');
++	disp('      boundary conditions for stressbalance model: spc set as zero');
+ end
+ 
+ %No ice front: do nothing
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15770)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15771)
+@@ -4,11 +4,11 @@
+ 
+ def SetIceShelfBC(md,icefrontfile=''):
+ 	"""
+-	SETICESHELFBC - Create the boundary conditions for diagnostic and thermal models for a  Ice Shelf with Ice Front
++	SETICESHELFBC - Create the boundary conditions for stressbalance and thermal models for a  Ice Shelf with Ice Front
+ 
+ 	   Neumann BC are used on the ice front (an ARGUS contour around the ice front
+ 	   must be given in input)
+-	   Dirichlet BC are used elsewhere for diagnostic
++	   Dirichlet BC are used elsewhere for stressbalance
+ 
+ 	   Usage:
+ 	      md=SetIceShelfBC(md,varargin)
+@@ -31,14 +31,14 @@
+ 
+ #	pos=find(md.mesh.vertexonboundary & ~nodeonicefront);
+ 	pos=numpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(nodeonicefront)))[0]
+-	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvx[pos]=0
+-	md.diagnostic.spcvy[pos]=0
+-	md.diagnostic.spcvz[pos]=0
+-	md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+-	md.diagnostic.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
++	md.stressbalance.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx[pos]=0
++	md.stressbalance.spcvy[pos]=0
++	md.stressbalance.spcvz[pos]=0
++	md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
++	md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+@@ -47,11 +47,11 @@
+ 			md.inversion.vx_obs=md.inversion.vx_obs.reshape(-1,1)
+ 		if numpy.ndim(md.inversion.vy_obs)==1:
+ 			md.inversion.vy_obs=md.inversion.vy_obs.reshape(-1,1)
+-		print "      boundary conditions for diagnostic model: spc set as observed velocities"
+-		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
+-		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
++		print "      boundary conditions for stressbalance model: spc set as observed velocities"
++		md.stressbalance.spcvx[pos]=md.inversion.vx_obs[pos]
++		md.stressbalance.spcvy[pos]=md.inversion.vy_obs[pos]
+ 	else:
+-		print "      boundary conditions for diagnostic model: spc set as zero"
++		print "      boundary conditions for stressbalance model: spc set as zero"
+ 
+ 	#Icefront position
+ 	pos=numpy.nonzero(nodeonicefront)[0]
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15770)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15771)
+@@ -4,11 +4,11 @@
+ 
+ def SetMarineIceSheetBC(md,icefrontfile=''):
+ 	"""
+-	SETICEMARINESHEETBC - Create the boundary conditions for diagnostic and thermal models for a  Marine Ice Sheet with Ice Front
++	SETICEMARINESHEETBC - Create the boundary conditions for stressbalance and thermal models for a  Marine Ice Sheet with Ice Front
+ 
+ 	   Neumann BC are used on the ice front (an ARGUS contour around the ice front
+ 	   can be given in input, or it will be deduced as onfloatingice & onboundary)
+-	   Dirichlet BC are used elsewhere for diagnostic
++	   Dirichlet BC are used elsewhere for stressbalance
+ 
+ 	   Usage:
+ 	      md=SetMarineIceSheetBC(md,icefrontfile)
+@@ -39,22 +39,22 @@
+ 	if not numpy.size(pos):
+ 		print "SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually."
+ 
+-	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvx[pos]=0
+-	md.diagnostic.spcvy[pos]=0
+-	md.diagnostic.spcvz[pos]=0
+-	md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+-	md.diagnostic.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
++	md.stressbalance.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.stressbalance.spcvx[pos]=0
++	md.stressbalance.spcvy[pos]=0
++	md.stressbalance.spcvz[pos]=0
++	md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
++	md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+-		print "      boundary conditions for diagnostic model: spc set as observed velocities"
+-		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
+-		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
++		print "      boundary conditions for stressbalance model: spc set as observed velocities"
++		md.stressbalance.spcvx[pos]=md.inversion.vx_obs[pos]
++		md.stressbalance.spcvy[pos]=md.inversion.vy_obs[pos]
+ 	else:
+-		print "      boundary conditions for diagnostic model: spc set as zero"
++		print "      boundary conditions for stressbalance model: spc set as zero"
+ 
+ 	md.hydrology.spcwatercolumn=numpy.zeros((md.mesh.numberofvertices,2))
+ 	pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15770)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15771)
+@@ -1,9 +1,9 @@
+ function md=SetIceShelfBC(md,varargin)
+-%SETICESHELFBC - Create the boundary conditions for diagnostic and thermal models for a  Ice Shelf with Ice Front
++%SETICESHELFBC - Create the boundary conditions for stressbalance and thermal models for a  Ice Shelf with Ice Front
+ %
+ %   Neumann BC are used on the ice front (an ANRGUS contour around the ice front
+ %   must be given in input)
+-%   Dirichlet BC are used elsewhere for diagnostic
++%   Dirichlet BC are used elsewhere for stressbalance
+ %
+ %   Usage:
+ %      md=SetIceShelfBC(md,varargin)
+@@ -27,22 +27,22 @@
+ 	error('bad usage');
+ end
+ pos=find(md.mesh.vertexonboundary & ~nodeonicefront);
+-md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-md.diagnostic.spcvx(pos)=0;
+-md.diagnostic.spcvy(pos)=0;
+-md.diagnostic.spcvz(pos)=0;
+-md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+-md.diagnostic.loadingforce=0*ones(md.mesh.numberofvertices,3);
++md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx(pos)=0;
++md.stressbalance.spcvy(pos)=0;
++md.stressbalance.spcvz(pos)=0;
++md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
++md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 
+ %Dirichlet Values
+ if (length(md.inversion.vx_obs)==md.mesh.numberofvertices & length(md.inversion.vy_obs)==md.mesh.numberofvertices)
+-	disp('      boundary conditions for diagnostic model: spc set as observed velocities');
+-	md.diagnostic.spcvx(pos)=md.inversion.vx_obs(pos);
+-	md.diagnostic.spcvy(pos)=md.inversion.vy_obs(pos);
++	disp('      boundary conditions for stressbalance model: spc set as observed velocities');
++	md.stressbalance.spcvx(pos)=md.inversion.vx_obs(pos);
++	md.stressbalance.spcvy(pos)=md.inversion.vy_obs(pos);
+ else
+-	disp('      boundary conditions for diagnostic model: spc set as zero');
++	disp('      boundary conditions for stressbalance model: spc set as zero');
+ end
+ 
+ %Ice front position
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15770)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15771)
+@@ -90,10 +90,10 @@
+ 
+ 	#First modify FSflag to get rid of elements contrained everywhere (spc + border with HO or SSA)
+ 	if any(FSflag):
+-#		fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonHO & nodeonFS));         %find all the nodes on the boundary of the domain without icefront
+-		fullspcnodes=numpy.logical_or(numpy.logical_not(numpy.isnan(md.diagnostic.spcvx)).astype(int)+ \
+-		                              numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)).astype(int)+ \
+-		                              numpy.logical_not(numpy.isnan(md.diagnostic.spcvz)).astype(int)==3, \
++#		fullspcnodes=double((~isnan(md.stressbalance.spcvx)+~isnan(md.stressbalance.spcvy)+~isnan(md.stressbalance.spcvz))==3 | (nodeonHO & nodeonFS));         %find all the nodes on the boundary of the domain without icefront
++		fullspcnodes=numpy.logical_or(numpy.logical_not(numpy.isnan(md.stressbalance.spcvx)).astype(int)+ \
++		                              numpy.logical_not(numpy.isnan(md.stressbalance.spcvy)).astype(int)+ \
++		                              numpy.logical_not(numpy.isnan(md.stressbalance.spcvz)).astype(int)==3, \
+ 		                              numpy.logical_and(nodeonHO,nodeonFS).reshape(-1,1)).astype(int)    #find all the nodes on the boundary of the domain without icefront
+ #		fullspcelems=double(sum(fullspcnodes(md.mesh.elements),2)==6);         %find all the nodes on the boundary of the domain without icefront
+ 		fullspcelems=(numpy.sum(fullspcnodes[md.mesh.elements-1],axis=1)==6).astype(int)    #find all the nodes on the boundary of the domain without icefront
+@@ -112,7 +112,7 @@
+ 			noneflag[numpy.nonzero(numpy.logical_not(FSflag))]=True
+ 
+ 	#Now take care of the coupling between SSA and HO
+-	md.diagnostic.vertex_pairing=numpy.array([])
++	md.stressbalance.vertex_pairing=numpy.array([])
+ 	nodeonSSAHO=numpy.zeros(md.mesh.numberofvertices,bool)
+ 	nodeonHOFS=numpy.zeros(md.mesh.numberofvertices,bool)
+ 	nodeonSSAFS=numpy.zeros(md.mesh.numberofvertices,bool)
+@@ -130,7 +130,7 @@
+ 			penalties=numpy.zeros((0,2))
+ 			for	i in xrange(1,numlayers):
+ 				penalties=numpy.vstack((penalties,numpy.hstack((bordernodes2d.reshape(-1,1),bordernodes2d.reshape(-1,1)+md.mesh.numberofvertices2d*(i)))))
+-			md.diagnostic.vertex_pairing=penalties
++			md.stressbalance.vertex_pairing=penalties
+ 
+ 	elif strcmpi(coupling_method,'tiling'):
+ 		if   any(SSAflag) and any(HOflag):    #coupling SSA HO
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15770)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15771)
+@@ -96,7 +96,7 @@
+ 
+ %First modify FSflag to get rid of elements contrained everywhere (spc + border with HO or SSA)
+ if any(FSflag),
+-	fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonHO & nodeonFS));         %find all the nodes on the boundary of the domain without icefront
++	fullspcnodes=double((~isnan(md.stressbalance.spcvx)+~isnan(md.stressbalance.spcvy)+~isnan(md.stressbalance.spcvz))==3 | (nodeonHO & nodeonFS));         %find all the nodes on the boundary of the domain without icefront
+ 	fullspcelems=double(sum(fullspcnodes(md.mesh.elements),2)==6);         %find all the nodes on the boundary of the domain without icefront
+ 	FSflag(find(fullspcelems))=0;
+ 	nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+@@ -116,7 +116,7 @@
+ end
+ 
+ %Now take care of the coupling between SSA and HO
+-md.diagnostic.vertex_pairing=[];
++md.stressbalance.vertex_pairing=[];
+ nodeonSSAHO=zeros(md.mesh.numberofvertices,1);
+ nodeonHOFS=zeros(md.mesh.numberofvertices,1);
+ nodeonSSAFS=zeros(md.mesh.numberofvertices,1);
+@@ -135,7 +135,7 @@
+ 		for	i=1:numlayers-1,
+ 			penalties=[penalties; [bordernodes2d bordernodes2d+md.mesh.numberofvertices2d*(i)]];
+ 		end
+-		md.diagnostic.vertex_pairing=penalties;
++		md.stressbalance.vertex_pairing=penalties;
+ 	end
+ elseif strcmpi(coupling_method,'tiling'),
+ 	if any(SSAflag) & any(HOflag), %coupling SSA HO
+Index: ../trunk-jpl/src/m/plot/plot_BC.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_BC.m	(revision 15770)
++++ ../trunk-jpl/src/m/plot/plot_BC.m	(revision 15771)
+@@ -9,19 +9,19 @@
+ dirichleton=getfieldvalue(options,'dirichlet','on');
+ if strcmpi(dirichleton,'on'),
+ 	h1=plot3(...
+-		md.mesh.x(find(~isnan(md.diagnostic.spcvx(1:md.mesh.numberofvertices,1)))),...
+-		md.mesh.y(find(~isnan(md.diagnostic.spcvx(1:md.mesh.numberofvertices,1)))),...
+-		md.mesh.z(find(~isnan(md.diagnostic.spcvx(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.x(find(~isnan(md.stressbalance.spcvx(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.y(find(~isnan(md.stressbalance.spcvx(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.z(find(~isnan(md.stressbalance.spcvx(1:md.mesh.numberofvertices,1)))),...
+ 		'ro','MarkerSize',14,'MarkerFaceColor','r');
+ 	h2=plot3(...
+-		md.mesh.x(find(~isnan(md.diagnostic.spcvy(1:md.mesh.numberofvertices,1)))),...
+-		md.mesh.y(find(~isnan(md.diagnostic.spcvy(1:md.mesh.numberofvertices,1)))),...
+-		md.mesh.z(find(~isnan(md.diagnostic.spcvy(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.x(find(~isnan(md.stressbalance.spcvy(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.y(find(~isnan(md.stressbalance.spcvy(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.z(find(~isnan(md.stressbalance.spcvy(1:md.mesh.numberofvertices,1)))),...
+ 		'bo','MarkerSize',10,'MarkerFaceColor','b');
+ 	h3=plot3(...
+-		md.mesh.x(find(~isnan(md.diagnostic.spcvz(1:md.mesh.numberofvertices,1)))),...
+-		md.mesh.y(find(~isnan(md.diagnostic.spcvz(1:md.mesh.numberofvertices,1)))),...
+-		md.mesh.z(find(~isnan(md.diagnostic.spcvz(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.x(find(~isnan(md.stressbalance.spcvz(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.y(find(~isnan(md.stressbalance.spcvz(1:md.mesh.numberofvertices,1)))),...
++		md.mesh.z(find(~isnan(md.stressbalance.spcvz(1:md.mesh.numberofvertices,1)))),...
+ 		'yo','MarkerSize',6 ,'MarkerFaceColor','y');
+ end
+ 
+Index: ../trunk-jpl/src/m/plot/plot_referential.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_referential.m	(revision 15770)
++++ ../trunk-jpl/src/m/plot/plot_referential.m	(revision 15771)
+@@ -11,15 +11,15 @@
+ 
+ %process mesh and data
+ [x y z elements is2d isplanet]=processmesh(md,[],options);
+-referential=md.diagnostic.referential;
++referential=md.stressbalance.referential;
+ 
+-Xhat=md.diagnostic.referential(:,1:3);
++Xhat=md.stressbalance.referential(:,1:3);
+ pos=find(sum(isnan(Xhat),2));
+ Xhat(pos,:)=repmat([1 0 0],size(pos,1),1);
+ Xhatnorm=sqrt(Xhat(:,1).^2+Xhat(:,2).^2+Xhat(:,3).^2);
+ Xhat=Xhat./[Xhatnorm Xhatnorm Xhatnorm];
+ 
+-Zhat=md.diagnostic.referential(:,4:6);
++Zhat=md.stressbalance.referential(:,4:6);
+ pos=find(sum(isnan(Zhat),2));
+ Zhat(pos,:)=repmat([0 0 1],size(pos,1),1);
+ Zhatnorm=sqrt(Zhat(:,1).^2+Zhat(:,2).^2+Zhat(:,3).^2);
+@@ -86,6 +86,6 @@
+ end
+ 
+ %apply options
+-options=addfielddefault(options,'title','Diagnostic referential');
++options=addfielddefault(options,'title','Stressbalance referential');
+ options=addfielddefault(options,'colorbar',0);
+ applyoptions(md,[],options);
+Index: ../trunk-jpl/src/m/plot/plotdoc.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotdoc.m	(revision 15770)
++++ ../trunk-jpl/src/m/plot/plotdoc.m	(revision 15771)
+@@ -26,7 +26,7 @@
+ disp('                  - ''highlightelements'': to highlight elements to highlight the element list');
+ disp('                  - ''highlightvertices'': to highlight vertices (use highlight option to enter the vertex list');
+ disp('                  - ''mesh'': draw mesh using trisurf');
+-disp('                  - ''referential'': diagnostic referential');
++disp('                  - ''referential'': stressbalance referential');
+ disp('                  - ''riftvel'': velocities along rifts');
+ disp('                  - ''riftrelvel'': relative velocities along rifts');
+ disp('                  - ''riftpenetration'': penetration levels for a fault');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15771-15772.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15771-15772.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15771-15772.diff	(revision 16134)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15771)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15772)
+@@ -7014,6 +7014,7 @@
+ 	IssmDouble Ke_drag_gaussian2[numdof2d][numdof2dm];
+ 	Friction*  friction=NULL;
+ 	GaussPenta *gauss=NULL;
++	Node *node_list[20];
+ 
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+@@ -7023,8 +7024,7 @@
+ 	int pnumnodes = this->NumberofNodesPressure();
+ 	int numnodes  = 2*vnumnodes-1+pnumnodes;
+ 
+-	Node       *node_list[numnodes];
+-	int         cs_list[numnodes];
++	int* cs_list = xNew<int>(numnodes);
+ 
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes,numnodes,this->parameters,FSvelocityEnum);
+@@ -8257,6 +8257,11 @@
+ 	/*compute all load vectors for this element*/
+ 	ElementVector* pe1=CreatePVectorCouplingHOFSViscous();
+ 	ElementVector* pe2=CreatePVectorCouplingHOFSFriction();
++//	if(id==15){
++//	pe1->Echo();
++//	pe2->Echo();
++//	_error_("");
++//	}
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15772-15773.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15772-15773.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15772-15773.diff	(revision 16134)
@@ -0,0 +1,768 @@
+Index: ../trunk-jpl/src/m/enum/DiagnosticHorizAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticHorizAnalysisEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticHorizAnalysisEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticHorizAnalysisEnum()
+-%DIAGNOSTICHORIZANALYSISENUM - Enum of DiagnosticHorizAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticHorizAnalysisEnum()
+-
+-macro=StringToEnum('DiagnosticHorizAnalysis');
+Index: ../trunk-jpl/src/m/enum/DiagnosticMaxiterEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticMaxiterEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticMaxiterEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticMaxiterEnum()
+-%DIAGNOSTICMAXITERENUM - Enum of DiagnosticMaxiter
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticMaxiterEnum()
+-
+-macro=StringToEnum('DiagnosticMaxiter');
+Index: ../trunk-jpl/src/m/enum/DiagnosticVertAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticVertAnalysisEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticVertAnalysisEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticVertAnalysisEnum()
+-%DIAGNOSTICVERTANALYSISENUM - Enum of DiagnosticVertAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticVertAnalysisEnum()
+-
+-macro=StringToEnum('DiagnosticVertAnalysis');
+Index: ../trunk-jpl/src/m/enum/DiagnosticVertexPairingEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticVertexPairingEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticVertexPairingEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticVertexPairingEnum()
+-%DIAGNOSTICVERTEXPAIRINGENUM - Enum of DiagnosticVertexPairing
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticVertexPairingEnum()
+-
+-macro=StringToEnum('DiagnosticVertexPairing');
+Index: ../trunk-jpl/src/m/enum/DiagnosticIsnewtonEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticIsnewtonEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticIsnewtonEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticIsnewtonEnum()
+-%DIAGNOSTICISNEWTONENUM - Enum of DiagnosticIsnewton
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticIsnewtonEnum()
+-
+-macro=StringToEnum('DiagnosticIsnewton');
+Index: ../trunk-jpl/src/m/enum/DiagnosticViscosityOvershootEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticViscosityOvershootEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticViscosityOvershootEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticViscosityOvershootEnum()
+-%DIAGNOSTICVISCOSITYOVERSHOOTENUM - Enum of DiagnosticViscosityOvershoot
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticViscosityOvershootEnum()
+-
+-macro=StringToEnum('DiagnosticViscosityOvershoot');
+Index: ../trunk-jpl/src/m/enum/DiagnosticSpcvxEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticSpcvxEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticSpcvxEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticSpcvxEnum()
+-%DIAGNOSTICSPCVXENUM - Enum of DiagnosticSpcvx
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticSpcvxEnum()
+-
+-macro=StringToEnum('DiagnosticSpcvx');
+Index: ../trunk-jpl/src/m/enum/DiagnosticSolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticSolutionEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticSolutionEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticSolutionEnum()
+-%DIAGNOSTICSOLUTIONENUM - Enum of DiagnosticSolution
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticSolutionEnum()
+-
+-macro=StringToEnum('DiagnosticSolution');
+Index: ../trunk-jpl/src/m/enum/DiagnosticSIAAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticSIAAnalysisEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticSIAAnalysisEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticSIAAnalysisEnum()
+-%DIAGNOSTICSIAANALYSISENUM - Enum of DiagnosticSIAAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticSIAAnalysisEnum()
+-
+-macro=StringToEnum('DiagnosticSIAAnalysis');
+Index: ../trunk-jpl/src/m/enum/DiagnosticSpcvyEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticSpcvyEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticSpcvyEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticSpcvyEnum()
+-%DIAGNOSTICSPCVYENUM - Enum of DiagnosticSpcvy
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticSpcvyEnum()
+-
+-macro=StringToEnum('DiagnosticSpcvy');
+Index: ../trunk-jpl/src/m/enum/DiagnosticReferentialEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticReferentialEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticReferentialEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticReferentialEnum()
+-%DIAGNOSTICREFERENTIALENUM - Enum of DiagnosticReferential
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticReferentialEnum()
+-
+-macro=StringToEnum('DiagnosticReferential');
+Index: ../trunk-jpl/src/m/enum/DiagnosticIcefrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticIcefrontEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticIcefrontEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticIcefrontEnum()
+-%DIAGNOSTICICEFRONTENUM - Enum of DiagnosticIcefront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticIcefrontEnum()
+-
+-macro=StringToEnum('DiagnosticIcefront');
+Index: ../trunk-jpl/src/m/enum/DiagnosticPenaltyFactorEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticPenaltyFactorEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticPenaltyFactorEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticPenaltyFactorEnum()
+-%DIAGNOSTICPENALTYFACTORENUM - Enum of DiagnosticPenaltyFactor
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticPenaltyFactorEnum()
+-
+-macro=StringToEnum('DiagnosticPenaltyFactor');
+Index: ../trunk-jpl/src/m/enum/DiagnosticRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticRequestedOutputsEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticRequestedOutputsEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticRequestedOutputsEnum()
+-%DIAGNOSTICREQUESTEDOUTPUTSENUM - Enum of DiagnosticRequestedOutputs
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticRequestedOutputsEnum()
+-
+-macro=StringToEnum('DiagnosticRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/DiagnosticSpcvzEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticSpcvzEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticSpcvzEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticSpcvzEnum()
+-%DIAGNOSTICSPCVZENUM - Enum of DiagnosticSpcvz
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticSpcvzEnum()
+-
+-macro=StringToEnum('DiagnosticSpcvz');
+Index: ../trunk-jpl/src/m/enum/DiagnosticRestolEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticRestolEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticRestolEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticRestolEnum()
+-%DIAGNOSTICRESTOLENUM - Enum of DiagnosticRestol
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticRestolEnum()
+-
+-macro=StringToEnum('DiagnosticRestol');
+Index: ../trunk-jpl/src/m/enum/DiagnosticReltolEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticReltolEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticReltolEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticReltolEnum()
+-%DIAGNOSTICRELTOLENUM - Enum of DiagnosticReltol
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticReltolEnum()
+-
+-macro=StringToEnum('DiagnosticReltol');
+Index: ../trunk-jpl/src/m/enum/TransientIsdiagnosticEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/TransientIsdiagnosticEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/TransientIsdiagnosticEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=TransientIsdiagnosticEnum()
+-%TRANSIENTISDIAGNOSTICENUM - Enum of TransientIsdiagnostic
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=TransientIsdiagnosticEnum()
+-
+-macro=StringToEnum('TransientIsdiagnostic');
+Index: ../trunk-jpl/src/m/enum/DiagnosticFSreconditioningEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticFSreconditioningEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticFSreconditioningEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticFSreconditioningEnum()
+-%DIAGNOSTICFSRECONDITIONINGENUM - Enum of DiagnosticFSreconditioning
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticFSreconditioningEnum()
+-
+-macro=StringToEnum('DiagnosticFSreconditioning');
+Index: ../trunk-jpl/src/m/enum/DiagnosticRiftPenaltyLockEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticRiftPenaltyLockEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticRiftPenaltyLockEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticRiftPenaltyLockEnum()
+-%DIAGNOSTICRIFTPENALTYLOCKENUM - Enum of DiagnosticRiftPenaltyLock
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticRiftPenaltyLockEnum()
+-
+-macro=StringToEnum('DiagnosticRiftPenaltyLock');
+Index: ../trunk-jpl/src/m/enum/DiagnosticAbstolEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticAbstolEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticAbstolEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticAbstolEnum()
+-%DIAGNOSTICABSTOLENUM - Enum of DiagnosticAbstol
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticAbstolEnum()
+-
+-macro=StringToEnum('DiagnosticAbstol');
+Index: ../trunk-jpl/src/m/enum/DiagnosticRiftPenaltyThresholdEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticRiftPenaltyThresholdEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticRiftPenaltyThresholdEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticRiftPenaltyThresholdEnum()
+-%DIAGNOSTICRIFTPENALTYTHRESHOLDENUM - Enum of DiagnosticRiftPenaltyThreshold
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticRiftPenaltyThresholdEnum()
+-
+-macro=StringToEnum('DiagnosticRiftPenaltyThreshold');
+Index: ../trunk-jpl/src/m/enum/DiagnosticNumRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticNumRequestedOutputsEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticNumRequestedOutputsEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticNumRequestedOutputsEnum()
+-%DIAGNOSTICNUMREQUESTEDOUTPUTSENUM - Enum of DiagnosticNumRequestedOutputs
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticNumRequestedOutputsEnum()
+-
+-macro=StringToEnum('DiagnosticNumRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/DiagnosticShelfDampeningEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DiagnosticShelfDampeningEnum.m	(revision 15772)
++++ ../trunk-jpl/src/m/enum/DiagnosticShelfDampeningEnum.m	(revision 15773)
+@@ -1,11 +0,0 @@
+-function macro=DiagnosticShelfDampeningEnum()
+-%DIAGNOSTICSHELFDAMPENINGENUM - Enum of DiagnosticShelfDampening
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DiagnosticShelfDampeningEnum()
+-
+-macro=StringToEnum('DiagnosticShelfDampening');
+Index: ../trunk-jpl/src/m/enum/StressbalanceViscosityOvershootEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceViscosityOvershootEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceViscosityOvershootEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceViscosityOvershootEnum()
++%STRESSBALANCEVISCOSITYOVERSHOOTENUM - Enum of StressbalanceViscosityOvershoot
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceViscosityOvershootEnum()
++
++macro=StringToEnum('StressbalanceViscosityOvershoot');
+Index: ../trunk-jpl/src/m/enum/StressbalanceRiftPenaltyThresholdEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceRiftPenaltyThresholdEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceRiftPenaltyThresholdEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceRiftPenaltyThresholdEnum()
++%STRESSBALANCERIFTPENALTYTHRESHOLDENUM - Enum of StressbalanceRiftPenaltyThreshold
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceRiftPenaltyThresholdEnum()
++
++macro=StringToEnum('StressbalanceRiftPenaltyThreshold');
+Index: ../trunk-jpl/src/m/enum/StressbalanceVertexPairingEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceVertexPairingEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceVertexPairingEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceVertexPairingEnum()
++%STRESSBALANCEVERTEXPAIRINGENUM - Enum of StressbalanceVertexPairing
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceVertexPairingEnum()
++
++macro=StringToEnum('StressbalanceVertexPairing');
+Index: ../trunk-jpl/src/m/enum/StressbalanceSpcvxEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceSpcvxEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceSpcvxEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceSpcvxEnum()
++%STRESSBALANCESPCVXENUM - Enum of StressbalanceSpcvx
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceSpcvxEnum()
++
++macro=StringToEnum('StressbalanceSpcvx');
+Index: ../trunk-jpl/src/m/enum/StressbalanceMaxiterEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceMaxiterEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceMaxiterEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceMaxiterEnum()
++%STRESSBALANCEMAXITERENUM - Enum of StressbalanceMaxiter
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceMaxiterEnum()
++
++macro=StringToEnum('StressbalanceMaxiter');
+Index: ../trunk-jpl/src/m/enum/StressbalanceRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceRequestedOutputsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceRequestedOutputsEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceRequestedOutputsEnum()
++%STRESSBALANCEREQUESTEDOUTPUTSENUM - Enum of StressbalanceRequestedOutputs
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceRequestedOutputsEnum()
++
++macro=StringToEnum('StressbalanceRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/StressbalanceShelfDampeningEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceShelfDampeningEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceShelfDampeningEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceShelfDampeningEnum()
++%STRESSBALANCESHELFDAMPENINGENUM - Enum of StressbalanceShelfDampening
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceShelfDampeningEnum()
++
++macro=StringToEnum('StressbalanceShelfDampening');
+Index: ../trunk-jpl/src/m/enum/StressbalanceRiftPenaltyLockEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceRiftPenaltyLockEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceRiftPenaltyLockEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceRiftPenaltyLockEnum()
++%STRESSBALANCERIFTPENALTYLOCKENUM - Enum of StressbalanceRiftPenaltyLock
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceRiftPenaltyLockEnum()
++
++macro=StringToEnum('StressbalanceRiftPenaltyLock');
+Index: ../trunk-jpl/src/m/enum/StressbalanceSIAAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceSIAAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceSIAAnalysisEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceSIAAnalysisEnum()
++%STRESSBALANCESIAANALYSISENUM - Enum of StressbalanceSIAAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceSIAAnalysisEnum()
++
++macro=StringToEnum('StressbalanceSIAAnalysis');
+Index: ../trunk-jpl/src/m/enum/StressbalanceReferentialEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceReferentialEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceReferentialEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceReferentialEnum()
++%STRESSBALANCEREFERENTIALENUM - Enum of StressbalanceReferential
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceReferentialEnum()
++
++macro=StringToEnum('StressbalanceReferential');
+Index: ../trunk-jpl/src/m/enum/StressbalanceSpcvyEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceSpcvyEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceSpcvyEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceSpcvyEnum()
++%STRESSBALANCESPCVYENUM - Enum of StressbalanceSpcvy
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceSpcvyEnum()
++
++macro=StringToEnum('StressbalanceSpcvy');
+Index: ../trunk-jpl/src/m/enum/StressbalanceFSreconditioningEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceFSreconditioningEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceFSreconditioningEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceFSreconditioningEnum()
++%STRESSBALANCEFSRECONDITIONINGENUM - Enum of StressbalanceFSreconditioning
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceFSreconditioningEnum()
++
++macro=StringToEnum('StressbalanceFSreconditioning');
+Index: ../trunk-jpl/src/m/enum/StressbalanceIsnewtonEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceIsnewtonEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceIsnewtonEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceIsnewtonEnum()
++%STRESSBALANCEISNEWTONENUM - Enum of StressbalanceIsnewton
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceIsnewtonEnum()
++
++macro=StringToEnum('StressbalanceIsnewton');
+Index: ../trunk-jpl/src/m/enum/StressbalanceSpcvzEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceSpcvzEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceSpcvzEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceSpcvzEnum()
++%STRESSBALANCESPCVZENUM - Enum of StressbalanceSpcvz
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceSpcvzEnum()
++
++macro=StringToEnum('StressbalanceSpcvz');
+Index: ../trunk-jpl/src/m/enum/TransientIsstressbalanceEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/TransientIsstressbalanceEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/TransientIsstressbalanceEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=TransientIsstressbalanceEnum()
++%TRANSIENTISSTRESSBALANCEENUM - Enum of TransientIsstressbalance
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=TransientIsstressbalanceEnum()
++
++macro=StringToEnum('TransientIsstressbalance');
+Index: ../trunk-jpl/src/m/enum/StressbalanceRestolEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceRestolEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceRestolEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceRestolEnum()
++%STRESSBALANCERESTOLENUM - Enum of StressbalanceRestol
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceRestolEnum()
++
++macro=StringToEnum('StressbalanceRestol');
+Index: ../trunk-jpl/src/m/enum/StressbalancePenaltyFactorEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalancePenaltyFactorEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalancePenaltyFactorEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalancePenaltyFactorEnum()
++%STRESSBALANCEPENALTYFACTORENUM - Enum of StressbalancePenaltyFactor
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalancePenaltyFactorEnum()
++
++macro=StringToEnum('StressbalancePenaltyFactor');
+Index: ../trunk-jpl/src/m/enum/StressbalanceReltolEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceReltolEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceReltolEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceReltolEnum()
++%STRESSBALANCERELTOLENUM - Enum of StressbalanceReltol
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceReltolEnum()
++
++macro=StringToEnum('StressbalanceReltol');
+Index: ../trunk-jpl/src/m/enum/StressbalanceSolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceSolutionEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceSolutionEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceSolutionEnum()
++%STRESSBALANCESOLUTIONENUM - Enum of StressbalanceSolution
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceSolutionEnum()
++
++macro=StringToEnum('StressbalanceSolution');
+Index: ../trunk-jpl/src/m/enum/StressbalanceVerticalAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceVerticalAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceVerticalAnalysisEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceVerticalAnalysisEnum()
++%STRESSBALANCEVERTICALANALYSISENUM - Enum of StressbalanceVerticalAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceVerticalAnalysisEnum()
++
++macro=StringToEnum('StressbalanceVerticalAnalysis');
+Index: ../trunk-jpl/src/m/enum/StressbalanceIcefrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceIcefrontEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceIcefrontEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceIcefrontEnum()
++%STRESSBALANCEICEFRONTENUM - Enum of StressbalanceIcefront
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceIcefrontEnum()
++
++macro=StringToEnum('StressbalanceIcefront');
+Index: ../trunk-jpl/src/m/enum/StressbalanceAbstolEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceAbstolEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceAbstolEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceAbstolEnum()
++%STRESSBALANCEABSTOLENUM - Enum of StressbalanceAbstol
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceAbstolEnum()
++
++macro=StringToEnum('StressbalanceAbstol');
+Index: ../trunk-jpl/src/m/enum/StressbalanceAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceAnalysisEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceAnalysisEnum()
++%STRESSBALANCEANALYSISENUM - Enum of StressbalanceAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceAnalysisEnum()
++
++macro=StringToEnum('StressbalanceAnalysis');
+Index: ../trunk-jpl/src/m/enum/StressbalanceNumRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceNumRequestedOutputsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/StressbalanceNumRequestedOutputsEnum.m	(revision 15773)
+@@ -0,0 +1,11 @@
++function macro=StressbalanceNumRequestedOutputsEnum()
++%STRESSBALANCENUMREQUESTEDOUTPUTSENUM - Enum of StressbalanceNumRequestedOutputs
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=StressbalanceNumRequestedOutputsEnum()
++
++macro=StringToEnum('StressbalanceNumRequestedOutputs');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15773-15774.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15773-15774.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15773-15774.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/configs/config-macosx64-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-ad.sh	(revision 15773)
++++ ../trunk-jpl/configs/config-macosx64-ad.sh	(revision 15774)
+@@ -7,7 +7,7 @@
+ 	--without-thermal \
+ 	--without-control \
+ 	--without-hydrology \
+-	--without-diagnostic \
++	--without-stressbalance \
+ 	--without-balanced \
+ 	--without-responses \
+ 	--without-slope \
+Index: ../trunk-jpl/configs/config-linux64-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-ad.sh	(revision 15773)
++++ ../trunk-jpl/configs/config-linux64-ad.sh	(revision 15774)
+@@ -7,7 +7,7 @@
+ 	--without-thermal \
+ 	--without-control \
+ 	--without-hydrology \
+-	--without-diagnostic \
++	--without-stressbalance \
+ 	--without-balanced \
+ 	--without-responses \
+ 	--without-slope \
Index: /issm/oecreview/Archive/15392-16133/ISSM-15774-15775.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15774-15775.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15774-15775.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15774)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15775)
+@@ -1042,9 +1042,9 @@
+ 				md.masstransport=masstransport(structmd.prognostic);
+ 			end
+ 			%2013 August 9
+-			if isfield(structmd,'diagnostic') & isa(structmd.diagnostic,'diagnostic'),
++			if isfield(structmd,'diagnostic') & (isa(structmd.diagnostic,'diagnostic') || isa(structmd.diagnostic,'stressbalance')),
+ 				disp('Recovering old diagnostic class');
+-				md.stressbalance=masstransport(structmd.diagnostic);
++				md.stressbalance=stressbalance(structmd.diagnostic);
+ 			end
+ 		end% }}}
+ 		function md = setdefaultparameters(md) % {{{
Index: /issm/oecreview/Archive/15392-16133/ISSM-15775-15776.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15775-15776.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15775-15776.diff	(revision 16134)
@@ -0,0 +1,83 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15775)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15776)
+@@ -6709,7 +6709,7 @@
+ 	Penta* pentabase=GetBasalElement();
+ 	Tria*  tria=pentabase->SpawnTria(0); //lower face is 0, upper face is 1.
+ 
+-	/*Prepare node list*/
++	/*prepare node list*/
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		node_list[i+0*NUMVERTICES] = pentabase->nodes[i];
+ 		node_list[i+1*NUMVERTICES] = this->nodes[i];
+@@ -7111,17 +7111,34 @@
+ ElementMatrix* Penta::CreateKMatrixCouplingHOFS(void){
+ 
+ 	/*Constants*/
+-	const int numnodes       = 2 *NUMVERTICES;
++	const int numnodes       = 3 *NUMVERTICES+1;
+ 	const int numdofp        = NDOF2 *NUMVERTICES;
+ 	const int numdofs        = NDOF4 * 6 + NDOF3;
+ 	const int numdoftotal    = (NDOF2+NDOF4) *NUMVERTICES + NDOF3;
+ 
+ 	/*Intermediaries*/
+ 	int       i,j,init;
++	Node  *node_list[NUMVERTICES*3+1];
++	int   cs_list[NUMVERTICES*3+1];
++	int   cs_list2[NUMVERTICES*2+1];
+ 
+ 	/*Some parameters needed*/
+ 	init=this->element_type;
+ 
++	/*prepare node list*/
++	for(i=0;i<NUMVERTICES+1;i++){
++		node_list[i+NUMVERTICES] = this->nodes[i];
++		cs_list[i+NUMVERTICES]   = XYZEnum;
++		cs_list2[i]              = XYZEnum;
++	}
++	for(i=0;i<NUMVERTICES;i++){
++		node_list[i]                 = this->nodes[i];
++		node_list[i+2*NUMVERTICES+1] = this->nodes[i+NUMVERTICES+1];
++		cs_list[i]                   = XYEnum;
++		cs_list[i+2*NUMVERTICES+1]   = PressureEnum;
++		cs_list2[i+NUMVERTICES+1]    = PressureEnum;
++	}
++
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes,2*NUMVERTICES+1,this->parameters,FSvelocityEnum);
+@@ -7130,10 +7147,10 @@
+ 	
+ 	/*Compute HO Matrix with P1 element type\n");*/
+ 	this->element_type=P1Enum;
+-	Ke1=CreateKMatrixStressbalanceHO();
++	Ke1=CreateKMatrixStressbalanceHO(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
+ 	this->element_type=init;
+ 	/*Compute FS Matrix and condense it \n");*/
+-	Ke2=CreateKMatrixStressbalanceFS(); 
++	Ke2=CreateKMatrixStressbalanceFS(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,2*NUMVERTICES+1,cs_list2);
+ 	int indices[3]={18,19,20};
+ 	Ke2->StaticCondensation(3,&indices[0]);
+ 
+@@ -7147,7 +7164,7 @@
+ 	}
+ 
+ 	/*Transform Coordinate System*/ //Do not transform, already done in the matrices
+-	//TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
++	TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
+ 
+ 	/*clean-up and return*/
+ 	delete Ke1;
+@@ -8257,11 +8274,6 @@
+ 	/*compute all load vectors for this element*/
+ 	ElementVector* pe1=CreatePVectorCouplingHOFSViscous();
+ 	ElementVector* pe2=CreatePVectorCouplingHOFSFriction();
+-//	if(id==15){
+-//	pe1->Echo();
+-//	pe2->Echo();
+-//	_error_("");
+-//	}
+ 	ElementVector* pe =new ElementVector(pe1,pe2);
+ 
+ 	/*clean-up and return*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15776-15777.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15776-15777.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15776-15777.diff	(revision 16134)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h	(revision 15776)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h	(revision 15777)
+@@ -11,17 +11,9 @@
+ #define _ISSM_ABS_VEC_H_
+ 
+ /*Headers:*/
+-/*{{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+ #include "../toolkitsenums.h"
++#include "../../shared/Numerics/types.h"
+ 
+-/*}}}*/
+-
+ /*We need to template this class, in case we want to create Vectors that hold
+   IssmDouble* vector or IssmPDouble* vector. 
+   Such vectors are useful for use without or with the matlab or python
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmAbsMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmAbsMat.h	(revision 15776)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmAbsMat.h	(revision 15777)
+@@ -11,23 +11,14 @@
+ #define _ISSM_ABS_MAT_H_
+ 
+ /*Headers:*/
+-/*{{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+ #include "../toolkitsenums.h"
++#include "../../shared/Numerics/types.h"
+ 
+-/*}}}*/
+-
+ /*We need to template this class, in case we want to create Matrices that hold
+   IssmDouble* matrix or IssmPDouble* matrix. 
+   Such vectors are useful for use without or with the matlab or python
+   interface (which do not care for IssmDouble types, but only rely on
+-  IssmPDouble types)
+-*/
++  IssmPDouble types) */
+ 
+ template <class doubletype> class IssmAbsVec;
+ class Parameters;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15777-15778.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15777-15778.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15777-15778.diff	(revision 16134)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/externalpackages/adjoinablempi/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adjoinablempi/install.sh	(revision 15777)
++++ ../trunk-jpl/externalpackages/adjoinablempi/install.sh	(revision 15778)
+@@ -7,8 +7,6 @@
+ #Mercurial cloning: 
+ hg clone http://mercurial.mcs.anl.gov//ad/AdjoinableMPI src
+ 
+-export C_INCLUDE_PATH=:/usr/include/sys/:$C_INCLUDE_PATH
+-
+ #Configure adjoinablempi
+ cd src
+ autoreconf -fi
+Index: ../trunk-jpl/externalpackages/adjoinablempi/install-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adjoinablempi/install-macosx64.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adjoinablempi/install-macosx64.sh	(revision 15778)
+@@ -0,0 +1,29 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src  install
++
++#Mercurial cloning: 
++hg clone http://mercurial.mcs.anl.gov//ad/AdjoinableMPI src
++
++export C_INCLUDE_PATH=:/usr/include/sys/:$C_INCLUDE_PATH
++
++#Configure adjoinablempi
++cd src
++autoreconf -fi
++
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/adjoinablempi/install" \
++	--libdir="$ISSM_DIR/externalpackages/adjoinablempi/install/lib" \
++	--with-mpi-root="$ISSM_DIR/externalpackages/mpich/install" \
++	--enable-requestOnTrace
++
++#Compile adjoinablempi 
++make clean
++if [ $# -eq 0 ]; then
++	make 
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/adjoinablempi/install-macosx64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15778-15779.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15778-15779.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15778-15779.diff	(revision 16134)
@@ -0,0 +1,327 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15778)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15779)
+@@ -980,7 +980,9 @@
+ 	 *           [ 0    0    0   h]
+ 	 * where h is the interpolation function for node i.
+ 	 */
+-	int num_dof=4;
++	int num_dof=3;
++	int num_dof_vel=3*NUMNODESP1b;
++	int num_dof_total=3*NUMNODESP1b+1*NUMNODESP1;
+ 	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 	IssmDouble dbasis[3][NUMNODESP1];
+ 
+@@ -993,39 +995,77 @@
+ 
+ 	/*Build LprimeFS: */
+ 	for(int i=0;i<3;i++){
+-		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
+-		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
+-		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = L1L2l3[i];
+-		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = L1L2l3[i];
+-		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = dbasis[2][i];
+-		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = dbasis[2][i];
+-		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = L1L2l3[i];
+-		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = 0.;
+-		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = L1L2l3[i];
++		LprimeFS[num_dof_total*0+num_dof*i+0] = L1L2l3[i];
++		LprimeFS[num_dof_total*0+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*0+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*1+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*1+num_dof*i+1] = L1L2l3[i];
++		LprimeFS[num_dof_total*1+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*2+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*2+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*2+num_dof*i+2] = L1L2l3[i];
++		LprimeFS[num_dof_total*3+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*3+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*3+num_dof*i+2] = L1L2l3[i];
++		LprimeFS[num_dof_total*4+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*4+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*4+num_dof*i+2] = dbasis[2][i];
++		LprimeFS[num_dof_total*5+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*5+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*5+num_dof*i+2] = dbasis[2][i];
++		LprimeFS[num_dof_total*6+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*6+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*6+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*7+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*7+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*7+num_dof*i+2] = 0.;
+ 	}
++	for(int i=3;i<7;i++){
++		LprimeFS[num_dof_total*0+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*0+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*0+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*1+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*1+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*1+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*2+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*2+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*2+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*3+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*3+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*3+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*4+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*4+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*4+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*5+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*5+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*5+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*6+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*6+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*6+num_dof*i+2] = 0.;
++		LprimeFS[num_dof_total*7+num_dof*i+0] = 0.;
++		LprimeFS[num_dof_total*7+num_dof*i+1] = 0.;
++		LprimeFS[num_dof_total*7+num_dof*i+2] = 0.;
++	}
++	for(int i=0;i<3;i++){
++		LprimeFS[num_dof_total*0+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*1+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*2+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*3+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*4+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*5+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*6+num_dof_vel+i] = L1L2l3[i];
++		LprimeFS[num_dof_total*7+num_dof_vel+i] = L1L2l3[i];
++	}
++	for(int i=3;i<6;i++){
++		LprimeFS[num_dof_total*0+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*1+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*2+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*3+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*4+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*5+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*6+num_dof_vel+i] = 0.;
++		LprimeFS[num_dof_total*7+num_dof_vel+i] = 0.;
++	}
+ }
+ /*}}}*/
+ /*FUNCTION PentaRef::GetLFSSSA {{{*/
+@@ -1033,14 +1073,14 @@
+ 	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
+ 	 * For node i, Li can be expressed in the actual coordinate system
+ 	 * by: 
+-	 *       Li=[ h    0    0   0]
+-	 *	 	      [ 0    h    0   0]
+-	 *		      [ 0    0    h   0]
+-	 *		      [ 0    0    h   0]
++	 *       Li=[ h    0    0 ]
++	 *	 	      [ 0    h    0 ]
++	 *		      [ 0    0    h ]
++	 *		      [ 0    0    h ]
+ 	 * where h is the interpolation function for node i.
+ 	 */
+ 
+-	int num_dof=4;
++	int num_dof=3;
+ 	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 
+ 	/*Get L1L2l3 in actual coordinate system: */
+@@ -1053,19 +1093,15 @@
+ 		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
+ 		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+-		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
+ 		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+-		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = L1L2l3[i];
+-		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
+ 		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = L1L2l3[i];
+-		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
+ 	}
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15778)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15779)
+@@ -6923,7 +6923,6 @@
+ 		cs_list[2*vnumnodes-1+i] = PressureEnum;
+ 	}
+ 
+-
+ 	/*Initialize Element matrix and return if necessary*/
+ 	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,    this->parameters,SSAApproximationEnum);
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,2*NUMVERTICES+1,this->parameters,FSvelocityEnum);
+@@ -6987,13 +6986,12 @@
+ /*}}}*/
+ /*FUNCTION Penta::CreateKMatrixCouplingSSAFSFriction {{{*/
+ ElementMatrix* Penta::CreateKMatrixCouplingSSAFSFriction(void){
+-
+ 	/*Constants*/
+-	const int numdof    = NUMVERTICES *NDOF4;
++	const int numdofs   = (NUMVERTICES+1)*NDOF3 + NUMVERTICES*NDOF1;
+ 	const int numdofm   = NUMVERTICES *NDOF2;
+-	const int numdof2d  = NUMVERTICES2D *NDOF4;
++	const int numdof2d  = NUMVERTICES2D *NDOF3;
+ 	const int numdof2dm = NUMVERTICES2D *NDOF2;
+-	const int numdoftot = numdof+numdofm;
++	const int numdoftot = NUMVERTICES*2 + (NUMVERTICES+1)*3 +NUMVERTICES; // HO + FS vel + FS Pressure
+ 
+ 	/*Intermediaries */
+ 	int        i,j;
+@@ -7005,16 +7003,16 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
+ 	IssmDouble LSSAFS[8][numdof2dm];
+-	IssmDouble LprimeSSAFS[8][numdof2d];
++	IssmDouble LprimeSSAFS[8][numdofs];
+ 	IssmDouble DLSSAFS[8][8]={0.0};
+ 	IssmDouble LFSSSA[4][numdof2d];
+ 	IssmDouble LprimeFSSSA[4][numdof2dm];
+ 	IssmDouble DLFSSSA[4][4]={0.0};
+-	IssmDouble Ke_drag_gaussian[numdof2dm][numdof2d];
++	IssmDouble Ke_drag_gaussian[numdof2dm][numdofs];
+ 	IssmDouble Ke_drag_gaussian2[numdof2d][numdof2dm];
+ 	Friction*  friction=NULL;
+ 	GaussPenta *gauss=NULL;
+-	Node *node_list[20];
++	Node       *node_list[20];
+ 
+ 	/*If on water or not FS, skip stiffness: */
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+@@ -7024,21 +7022,26 @@
+ 	int pnumnodes = this->NumberofNodesPressure();
+ 	int numnodes  = 2*vnumnodes-1+pnumnodes;
+ 
+-	int* cs_list = xNew<int>(numnodes);
++	/*Prepare node list*/
++	int* cs_list = xNew<int>(2*vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes-1;i++){
++		node_list[i] = this->nodes[i];
++		cs_list[i] = XYEnum;
++	}
++	for(i=0;i<vnumnodes;i++){
++		node_list[i+vnumnodes-1] = this->nodes[i];
++		cs_list[i+vnumnodes-1] = XYZEnum;
++	}
++	for(i=0;i<pnumnodes;i++){
++		node_list[2*vnumnodes-1+i] = this->nodes[vnumnodes+i];
++		cs_list[2*vnumnodes-1+i] = PressureEnum;
++	}
+ 
+-	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,SSAApproximationEnum);
+-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,numnodes,this->parameters,FSvelocityEnum);
++	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,        this->parameters,SSAApproximationEnum);
++	ElementMatrix* Ke2=new ElementMatrix(this->nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+ 
+-	/*Prepare node list*/
+-	for(i=0;i<numnodes+NUMVERTICES;i++){
+-		node_list[i+0*NUMVERTICES] = this->nodes[i];
+-		node_list[i+1*NUMVERTICES] = this->nodes[i];
+-		cs_list[i+0*NUMVERTICES] = XYEnum;
+-		cs_list[i+1*NUMVERTICES] = XYZEnum;
+-	}
+-
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+@@ -7085,15 +7088,14 @@
+ 
+ 		TripleMultiply( &LSSAFS[0][0],8,numdof2dm,1,
+ 					&DLSSAFS[0][0],8,8,0,
+-					&LprimeSSAFS[0][0],8,numdof2d,0,
++					&LprimeSSAFS[0][0],8,numdofs,0,
+ 					&Ke_drag_gaussian[0][0],0);
+ 
+ 		TripleMultiply( &LFSSSA[0][0],4,numdof2d,1,
+ 					&DLFSSSA[0][0],4,4,0,
+ 					&LprimeFSSSA[0][0],4,numdof2dm,0,
+ 					&Ke_drag_gaussian2[0][0],0);
+-
+-		for(i=0;i<numdof2dm;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdoftot+j+numdofm]+=Ke_drag_gaussian[i][j];
++		for(i=0;i<numdof2dm;i++) for(j=0;j<numdofs;j++) Ke->values[i*numdoftot+j+numdofm]+=Ke_drag_gaussian[i][j];
+ 		for(i=0;i<numdof2d;i++) for(j=0;j<numdof2dm;j++) Ke->values[(i+numdofm)*numdoftot+j]+=Ke_drag_gaussian2[i][j];
+ 	}
+ 
+@@ -7117,7 +7119,7 @@
+ 	const int numdoftotal    = (NDOF2+NDOF4) *NUMVERTICES + NDOF3;
+ 
+ 	/*Intermediaries*/
+-	int       i,j,init;
++	int   i,j,init;
+ 	Node  *node_list[NUMVERTICES*3+1];
+ 	int   cs_list[NUMVERTICES*3+1];
+ 	int   cs_list2[NUMVERTICES*2+1];
+@@ -8219,16 +8221,23 @@
+ 	if(!IsOnBed() || IsFloating()) return NULL;
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation!=SSAFSApproximationEnum) return NULL;
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
+ 
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++	ElementVector* pe=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
++
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+-	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
+-	Input* vzSSA_input=inputs->GetInput(VzSSAEnum);   _assert_(vzSSA_input);
++	Input* vx_input=inputs->GetInput(VxEnum);        _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum);        _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum);        _assert_(vz_input);
++	Input* vzSSA_input=inputs->GetInput(VzSSAEnum);  _assert_(vzSSA_input);
+ 
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 
+@@ -8253,14 +8262,14 @@
+ 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
+ 
+ 		for(i=0;i<NUMVERTICES2D;i++){
+-			pe->values[i*NDOF4+0]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[0]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[0])*basis[i];
+-			pe->values[i*NDOF4+1]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[1]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[1])*basis[i];
+-			pe->values[i*NDOF4+2]+=Jdet2d*gauss->weight*2*viscosity*(dw[0]*bed_normal[0]+dw[1]*bed_normal[1]+dw[2]*bed_normal[2])*basis[i];
++			pe->values[i*NDOF3+0]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[0]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[0])*basis[i];
++			pe->values[i*NDOF3+1]+=Jdet2d*gauss->weight*(alpha2_gauss*w*bed_normal[1]*bed_normal[2]+2*viscosity*dw[2]*bed_normal[1])*basis[i];
++			pe->values[i*NDOF3+2]+=Jdet2d*gauss->weight*2*viscosity*(dw[0]*bed_normal[0]+dw[1]*bed_normal[1]+dw[2]*bed_normal[2])*basis[i];
+ 		}
+ 	}
+ 
+ 	/*Transform coordinate system*/
+-	TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZEnum);
++	TransformLoadVectorCoord(pe,nodes,(vnumnodes+pnumnodes),cs_list);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15779-15780.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15779-15780.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15779-15780.diff	(revision 16134)
@@ -0,0 +1,69 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-withampi.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-withampi.sh	(revision 15779)
++++ ../trunk-jpl/externalpackages/adolc/install-withampi.sh	(revision 15780)
+@@ -11,9 +11,6 @@
+ cd src
+ autoreconf -f -i 
+ 
+-export CFLAGS="-O2 -L$ISSM_DIR/externalpackages/mpich/install/lib -lpmpich"
+-export CXXFLAGS="-O2 -L$ISSM_DIR/externalpackages/mpich/install/lib -lpmpich"
+-
+ ./configure --prefix=$ISSM_DIR/externalpackages/adolc/install  \
+ 	--libdir=$ISSM_DIR/externalpackages/adolc/install/lib \
+ 	--with-mpi-root=$ISSM_DIR/externalpackages/mpich/install \
+Index: ../trunk-jpl/externalpackages/adolc/install-withampi-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-withampi-macosx64.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/install-withampi-macosx64.sh	(revision 15780)
+@@ -0,0 +1,30 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install src
++
++git clone -b ampi git://git.mcs.anl.gov/adol-c.git src
++#git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
++
++#Compile ADOL-C
++cd src
++autoreconf -f -i 
++
++export CFLAGS="-O2 -L$ISSM_DIR/externalpackages/mpich/install/lib -lpmpich"
++export CXXFLAGS="-O2 -L$ISSM_DIR/externalpackages/mpich/install/lib -lpmpich"
++
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install  \
++	--libdir=$ISSM_DIR/externalpackages/adolc/install/lib \
++	--with-mpi-root=$ISSM_DIR/externalpackages/mpich/install \
++	--enable-ampi \
++	--with-ampi=$ISSM_DIR/externalpackages/adjoinablempi/install \
++	--disable-tapedoc-values
++
++make clean
++if [ $# -eq 0 ]; then
++	make V=1
++else
++	make -j $1 V=1
++fi
++make V=1 install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/install-withampi-macosx64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/adolc
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc	(revision 15779)
++++ ../trunk-jpl/externalpackages/adolc	(revision 15780)
+
+Property changes on: ../trunk-jpl/externalpackages/adolc
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,4 ##
++install-noampi
+ trunk
+ adolc_issm
+ *.gz
Index: /issm/oecreview/Archive/15392-16133/ISSM-15780-15781.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15780-15781.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15780-15781.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/externalpackages/adolc
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc	(revision 15780)
++++ ../trunk-jpl/externalpackages/adolc	(revision 15781)
+
+Property changes on: ../trunk-jpl/externalpackages/adolc
+___________________________________________________________________
+Modified: svn:ignore
+## -1,4 +1,5 ##
+ install-noampi
++install-ampi
+ trunk
+ adolc_issm
+ *.gz
Index: /issm/oecreview/Archive/15392-16133/ISSM-15781-15782.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15781-15782.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15781-15782.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/main/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/kriging.cpp	(revision 15781)
++++ ../trunk-jpl/src/c/main/kriging.cpp	(revision 15782)
+@@ -21,8 +21,6 @@
+ 	char *outbinfilename = NULL;
+ 	char *rootpath       = NULL;
+ 
+-	MPI_Comm comm;
+-
+ 	/*Input*/
+ 	int         ninterp,nobs;
+ 	IssmDouble *x        = NULL;
+@@ -40,7 +38,7 @@
+ 	ExceptionTrapBegin();
+ 
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+-	comm=EnvironmentInit(argc,argv);
++	COMM comm=EnvironmentInit(argc,argv);
+ 	IssmComm::SetComm(comm);
+ 
+ 	ProcessArguments2(&binfilename,&outbinfilename,&lockfilename,&rootpath,argc,argv);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15782-15783.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15782-15783.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15782-15783.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15782)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15783)
+@@ -1013,6 +1013,7 @@
+ 	}
+ 
+ 	/*Assign output pointers:*/
++	xDelete<int>(doflist);
+ 	*pdoflist=doflist;
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15783-15784.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15783-15784.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15783-15784.diff	(revision 16134)
@@ -0,0 +1,126 @@
+Index: ../trunk-jpl/configs/config-linux64-ubuntu64.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-ubuntu64.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-linux64-ubuntu64.sh	(revision 15784)
+@@ -2,7 +2,7 @@
+ 
+ ./configure \
+  --prefix=$ISSM_DIR \
+- --with-matlab-dir=$MATLAB_DIR \
++ --with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+  --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+  --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+  --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+Index: ../trunk-jpl/configs/config-macosx64.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-macosx64.sh	(revision 15784)
+@@ -5,7 +5,7 @@
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+-	--with-matlab-dir=$MATLAB_DIR \
++	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+Index: ../trunk-jpl/configs/config-win7-32.sh
+===================================================================
+--- ../trunk-jpl/configs/config-win7-32.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-win7-32.sh	(revision 15784)
+@@ -4,7 +4,7 @@
+ ./configure --prefix=$ISSM_DIR \
+    --disable-static \
+    --with-vendor=intel-win7-32  \
+-   --with-matlab-dir="$MATLAB_DIR" \
++   --with-matlab-dir=""$ISSM_DIR/externalpackages/matlab/install"" \
+    --with-blas-lapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
+    --with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+    --with-metis-dir="$ISSM_DIR/externalpackages/metis/install" \
+Index: ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh	(revision 15784)
+@@ -4,7 +4,7 @@
+  --prefix=$ISSM_DIR \
+  --with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+  --with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich" \
+- --with-matlab-dir=$MATLAB_DIR \
++ --with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+  --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+  --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+  --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install/lib \
+Index: ../trunk-jpl/configs/config-win7-64.sh
+===================================================================
+--- ../trunk-jpl/configs/config-win7-64.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-win7-64.sh	(revision 15784)
+@@ -4,7 +4,7 @@
+ ./configure --prefix=$ISSM_DIR \
+    --disable-static \
+ 	--with-vendor=intel-win7-64  \
+-	--with-matlab-dir="$MATLAB_DIR" \
++	--with-matlab-dir=""$ISSM_DIR/externalpackages/matlab/install"" \
+ 	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
+ 	--with-metis-dir="$ISSM_DIR/externalpackages/metis/install" \
+ 	--with-petsc-dir="$ISSM_DIR/externalpackages/petsc/install" \
+Index: ../trunk-jpl/configs/config-macosx64-ogive.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-ogive.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-macosx64-ogive.sh	(revision 15784)
+@@ -9,7 +9,7 @@
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+-	--with-matlab-dir=$MATLAB_DIR \
++	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+Index: ../trunk-jpl/configs/config-linux64-larsen-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-larsen-ad.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-linux64-larsen-ad.sh	(revision 15784)
+@@ -7,5 +7,5 @@
+ 	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
+ 	--with-adolc-dir=$ISSM_DIR/externalpackages/adolc/install \
+ 	--with-adolc-version=3 \
+-	--with-matlab-dir=$MATLAB_DIR \
++	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+Index: ../trunk-jpl/configs/config-discover.sh
+===================================================================
+--- ../trunk-jpl/configs/config-discover.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-discover.sh	(revision 15784)
+@@ -5,7 +5,7 @@
+ 
+ ./configure \
+  --prefix=$ISSM_DIR \
+- --with-matlab-dir=$MATLAB_DIR \
++ --with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+  --with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+  --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+  --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+Index: ../trunk-jpl/configs/config-linux64-murdo-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo-ad.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-linux64-murdo-ad.sh	(revision 15784)
+@@ -6,5 +6,5 @@
+ 	 --without-kml \
+ 	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
+ 	--with-adolc-dir=$ISSM_DIR/externalpackages/adolc/install \
+-	--with-matlab-dir=$MATLAB_DIR \
++	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install
+Index: ../trunk-jpl/configs/config-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 15783)
++++ ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 15784)
+@@ -5,7 +5,7 @@
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+-	--with-matlab-dir=$MATLAB_DIR \
++	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
Index: /issm/oecreview/Archive/15392-16133/ISSM-15784-15785.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15784-15785.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15784-15785.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15784)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15785)
+@@ -9654,7 +9654,6 @@
+ 	}
+ 	for(int i=0;i<pnumnodes;i++){
+ 		gauss->GaussNode(this->PressureInterpolation(),i);
+-
+ 		p_input ->GetInputValue(&p ,gauss);
+ 		pvalues[i]=p/FSreconditioning;
+ 	}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15785-15786.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15785-15786.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15785-15786.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/organizer.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.m	(revision 15785)
++++ ../trunk-jpl/src/m/classes/organizer.m	(revision 15786)
+@@ -132,7 +132,7 @@
+ 				error(['Could not find ' path ]);
+ 			end
+ 		end%}}}
+-		function md=loaddata(org,string),% {{{
++		function loaddata(org,string),% {{{
+ 
+ 			%Get model path
+ 			if ~ischar(string), error('argument provided is not a string'); end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15786-15787.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15786-15787.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15786-15787.diff	(revision 16134)
@@ -0,0 +1,63 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15786)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15787)
+@@ -1013,7 +1013,6 @@
+ 	}
+ 
+ 	/*Assign output pointers:*/
+-	xDelete<int>(doflist);
+ 	*pdoflist=doflist;
+ }
+ /*}}}*/
+@@ -2973,21 +2972,24 @@
+ /*FUNCTION Penta::ResetCoordinateSystem{{{*/
+ void  Penta::ResetCoordinateSystem(void){
+ 
+-	int    approximation;
+-	IssmDouble slopex[NUMVERTICES];
+-	IssmDouble slopey[NUMVERTICES];
++	int        approximation;
+ 	IssmDouble xz_plane[6];
+ 
+ 	/*For FS only: we want the CS to be tangential to the bedrock*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return;
+ 
++	/*Get number of nodes for velocity only and base*/
++	int         numnodes = this->NumberofNodesVelocity();
++	IssmDouble* slopex   = xNew<IssmDouble>(numnodes);
++	IssmDouble* slopey   = xNew<IssmDouble>(numnodes);
++
+ 	/*Get slope on each node*/
+-	GetInputListOnVertices(&slopex[0],BedSlopeXEnum);
+-	GetInputListOnVertices(&slopey[0],BedSlopeYEnum);
++	GetInputListOnNodes(slopex,BedSlopeXEnum);
++	GetInputListOnNodes(slopey,BedSlopeYEnum);
+ 
+-	/*Loop over basal nodes (first 3) and update their CS*/
+-	for(int i=0;i<NUMVERTICES2D;i++){
++	/*Loop over basal nodes and update their CS*/
++	for(int i=0;i<3;i++){//FIXME
+ 
+ 		/*New X axis             New Z axis*/
+ 		xz_plane[0]=1.;          xz_plane[3]=-slopex[i];  
+@@ -2996,6 +2998,10 @@
+ 
+ 		XZvectorsToCoordinateSystem(&this->nodes[i]->coord_system[0][0],&xz_plane[0]);
+ 	}
++
++	/*cleanup*/
++	xDelete<IssmDouble>(slopex);
++	xDelete<IssmDouble>(slopey);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SetClone {{{*/
+@@ -10047,6 +10053,7 @@
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflistm);
+ 	xDelete<int>(doflists);
++	xDelete<int>(doflistpressure);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionStressbalanceL1L2 {{{*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15787-15788.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15787-15788.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15787-15788.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15787)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15788)
+@@ -6985,6 +6985,7 @@
+ 	TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
+ 
+ 	/*Clean-up and return*/
++	xDelete<int>(cs_list);
+ 	delete tria->material; delete tria;
+ 	delete gauss;
+ 	delete gauss_tria;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15788-15789.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15788-15789.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15788-15789.diff	(revision 16134)
@@ -0,0 +1,55 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15788)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15789)
+@@ -2973,6 +2973,7 @@
+ void  Penta::ResetCoordinateSystem(void){
+ 
+ 	int        approximation;
++	IssmDouble slopex,slopey;
+ 	IssmDouble xz_plane[6];
+ 
+ 	/*For FS only: we want the CS to be tangential to the bedrock*/
+@@ -2980,28 +2981,30 @@
+ 	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return;
+ 
+ 	/*Get number of nodes for velocity only and base*/
+-	int         numnodes = this->NumberofNodesVelocity();
+-	IssmDouble* slopex   = xNew<IssmDouble>(numnodes);
+-	IssmDouble* slopey   = xNew<IssmDouble>(numnodes);
++	int  vnumnodes = this->NumberofNodesVelocity();
+ 
+-	/*Get slope on each node*/
+-	GetInputListOnNodes(slopex,BedSlopeXEnum);
+-	GetInputListOnNodes(slopey,BedSlopeYEnum);
++	/*Get inputs*/
++	Input* slopex_input=inputs->GetInput(BedSlopeXEnum); _assert_(slopex_input);
++	Input* slopey_input=inputs->GetInput(BedSlopeYEnum); _assert_(slopey_input);
+ 
+ 	/*Loop over basal nodes and update their CS*/
++	GaussPenta* gauss = new GaussPenta();
+ 	for(int i=0;i<3;i++){//FIXME
++		gauss->GaussNode(this->VelocityInterpolation(),i);
+ 
+-		/*New X axis             New Z axis*/
+-		xz_plane[0]=1.;          xz_plane[3]=-slopex[i];  
+-		xz_plane[1]=0.;          xz_plane[4]=-slopey[i];  
+-		xz_plane[2]=slopex[i];   xz_plane[5]=1.;          
++		slopex_input->GetInputValue(&slopex,gauss);
++		slopey_input->GetInputValue(&slopey,gauss);
+ 
++		/*New X axis          New Z axis*/
++		xz_plane[0]=1.;       xz_plane[3]=-slopex;  
++		xz_plane[1]=0.;       xz_plane[4]=-slopey;  
++		xz_plane[2]=slopex;   xz_plane[5]=1.;          
++
+ 		XZvectorsToCoordinateSystem(&this->nodes[i]->coord_system[0][0],&xz_plane[0]);
+ 	}
+ 
+ 	/*cleanup*/
+-	xDelete<IssmDouble>(slopex);
+-	xDelete<IssmDouble>(slopey);
++	delete gauss;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SetClone {{{*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15789-15790.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15789-15790.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15789-15790.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15789)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15790)
+@@ -8283,6 +8283,7 @@
+ 	TransformLoadVectorCoord(pe,nodes,(vnumnodes+pnumnodes),cs_list);
+ 
+ 	/*Clean up and return*/
++	xDelete<int>(cs_list);
+ 	delete gauss;
+ 	delete friction;
+ 	return pe;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15790-15791.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15790-15791.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15790-15791.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test237.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.py	(revision 15790)
++++ ../trunk-jpl/test/NightlyRun/test237.py	(revision 15791)
+@@ -59,7 +59,7 @@
+ #
+ md.extrude(3,1.)
+ md=setflowequation(md,'SSA','all')
+-md.cluster=generic('name',oshostname(),'np',3)
++md.cluster=generic('name',oshostname(),'np',1)
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test237.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.m	(revision 15790)
++++ ../trunk-jpl/test/NightlyRun/test237.m	(revision 15791)
+@@ -48,7 +48,7 @@
+ %
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/15392-16133/ISSM-15791-15792.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15791-15792.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15791-15792.diff	(revision 16134)
@@ -0,0 +1,124 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15791)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15792)
+@@ -2059,3 +2059,61 @@
+ 	return -1;
+ }
+ /*}}}*/
++/*FUNCTION PentaRef::BasalNodeIndices{{{*/
++void PentaRef::BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){
++
++	/*Output*/
++	int  numindices;
++	int* indices = NULL;
++
++	switch(finiteelement){
++		case P1Enum: case P1DGEnum:
++			numindices = 3;
++			indices    = xNew<int>(numindices);
++			indices[0] = 0;
++			indices[1] = 1;
++			indices[2] = 2;
++			break;
++		case P1bubbleEnum: case P1bubblecondensedEnum:
++			numindices = 3;
++			indices    = xNew<int>(numindices);
++			indices[0] = 0;
++			indices[1] = 1;
++			indices[2] = 2;
++			break;
++		case P2xP1Enum:
++			numindices = 6;
++			indices    = xNew<int>(numindices);
++			indices[0] = 0;
++			indices[1] = 1;
++			indices[2] = 2;
++			indices[3] = 6;
++			indices[4] = 7;
++			indices[5] = 8;
++			break;
++		case P1xP2Enum:
++			numindices = 3;
++			indices    = xNew<int>(numindices);
++			indices[0] = 0;
++			indices[1] = 1;
++			indices[2] = 2;
++			return;
++		case P2Enum:
++			numindices = 6;
++			indices    = xNew<int>(numindices);
++			indices[0] = 0;
++			indices[1] = 1;
++			indices[2] = 2;
++			indices[3] = 9;
++			indices[4] = 10;
++			indices[5] = 11;
++			break;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	/*Assign output pointer*/
++	*pnumindices = numindices;
++	*pindices    = indices;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15791)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15792)
+@@ -2973,6 +2973,8 @@
+ void  Penta::ResetCoordinateSystem(void){
+ 
+ 	int        approximation;
++	int        numindices;
++	int       *indices = NULL;
+ 	IssmDouble slopex,slopey;
+ 	IssmDouble xz_plane[6];
+ 
+@@ -2981,7 +2983,7 @@
+ 	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return;
+ 
+ 	/*Get number of nodes for velocity only and base*/
+-	int  vnumnodes = this->NumberofNodesVelocity();
++	BasalNodeIndices(&numindices,&indices,this->VelocityInterpolation());
+ 
+ 	/*Get inputs*/
+ 	Input* slopex_input=inputs->GetInput(BedSlopeXEnum); _assert_(slopex_input);
+@@ -2989,8 +2991,8 @@
+ 
+ 	/*Loop over basal nodes and update their CS*/
+ 	GaussPenta* gauss = new GaussPenta();
+-	for(int i=0;i<3;i++){//FIXME
+-		gauss->GaussNode(this->VelocityInterpolation(),i);
++	for(int i=0;i<numindices;i++){//FIXME
++		gauss->GaussNode(this->VelocityInterpolation(),indices[i]);
+ 
+ 		slopex_input->GetInputValue(&slopex,gauss);
+ 		slopey_input->GetInputValue(&slopey,gauss);
+@@ -3000,10 +3002,11 @@
+ 		xz_plane[1]=0.;       xz_plane[4]=-slopey;  
+ 		xz_plane[2]=slopex;   xz_plane[5]=1.;          
+ 
+-		XZvectorsToCoordinateSystem(&this->nodes[i]->coord_system[0][0],&xz_plane[0]);
++		XZvectorsToCoordinateSystem(&this->nodes[indices[i]]->coord_system[0][0],&xz_plane[0]);
+ 	}
+ 
+ 	/*cleanup*/
++	xDelete<int>(indices);
+ 	delete gauss;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15791)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15792)
+@@ -68,6 +68,7 @@
+ 		void GetInputDerivativeValue(IssmDouble* pvalues, IssmDouble* plist,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* pvalues, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss){_error_("only PentaGauss are supported");};
+ 
++		int  BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement);
+ 		int  NumberofNodes(void);
+ 		int  NumberofNodesVelocity(void);
+ 		int  NumberofNodesPressure(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15792-15793.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15792-15793.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15792-15793.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15792)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15793)
+@@ -68,7 +68,7 @@
+ 		void GetInputDerivativeValue(IssmDouble* pvalues, IssmDouble* plist,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* pvalues, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss){_error_("only PentaGauss are supported");};
+ 
+-		int  BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement);
++		void BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement);
+ 		int  NumberofNodes(void);
+ 		int  NumberofNodesVelocity(void);
+ 		int  NumberofNodesPressure(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15793-15794.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15793-15794.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15793-15794.diff	(revision 16134)
@@ -0,0 +1,83 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15793)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15794)
+@@ -302,27 +302,26 @@
+ 			switch(approximation1){
+ 				case SSAApproximationEnum: return PenaltyCreateKMatrixStressbalanceSSAHO(kmax); 
+ 				case HOApproximationEnum:   return PenaltyCreateKMatrixStressbalanceSSAHO(kmax); 
+-				default: _error_("not supported yet");
++				default: _error_("Approximation "<<EnumToStringx(approximation1)<<" not supported yet");
+ 			}
+ 		case HOApproximationEnum:
+ 			switch(approximation1){
+ 				case SSAApproximationEnum: return PenaltyCreateKMatrixStressbalanceSSAHO(kmax); 
+ 				case HOApproximationEnum:   return PenaltyCreateKMatrixStressbalanceSSAHO(kmax); 
+-				default: _error_("not supported yet");
++				default: _error_("Approximation "<<EnumToStringx(approximation1)<<" not supported yet");
+ 			}
+-		case FSApproximationEnum:
++		case FSvelocityEnum:
+ 			switch(approximation1){
+-				case FSApproximationEnum: return PenaltyCreateKMatrixStressbalanceFS(kmax); 
++				case FSvelocityEnum: return PenaltyCreateKMatrixStressbalanceFS(kmax); 
+ 				case NoneApproximationEnum: return   PenaltyCreateKMatrixStressbalanceFS(kmax); 
+-				default: _error_("not supported yet");
++				default: _error_("Approximation "<<EnumToStringx(approximation1)<<" not supported yet");
+ 			}
+ 		case NoneApproximationEnum:
+ 			switch(approximation1){
+-				case FSApproximationEnum: return PenaltyCreateKMatrixStressbalanceFS(kmax); 
++				case FSvelocityEnum: return PenaltyCreateKMatrixStressbalanceFS(kmax); 
+ 				case NoneApproximationEnum: return   PenaltyCreateKMatrixStressbalanceFS(kmax); 
+-				default: _error_("not supported yet");
+ 			}
+-		default: _error_("not supported yet");
++		default: _error_("Approximation "<<EnumToStringx(approximation0)<<" not supported yet");
+ 	}
+ }
+ /*}}}*/
+@@ -356,7 +355,7 @@
+ /*FUNCTION Penpair::PenaltyCreateKMatrixStressbalanceFS {{{*/
+ ElementMatrix* Penpair::PenaltyCreateKMatrixStressbalanceFS(IssmDouble kmax){
+ 
+-	const int numdof=NUMVERTICES*NDOF4;
++	const int  numdof=NUMVERTICES*NDOF3;
+ 	IssmDouble penalty_offset;
+ 
+ 	/*Initialize Element vector and return if necessary*/
+@@ -367,25 +366,20 @@
+ 
+ 	//Create elementary matrix: add penalty to 
+ 	Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_offset);
+-	Ke->values[0*numdof+4]=-kmax*pow(10.,penalty_offset);
+-	Ke->values[4*numdof+0]=-kmax*pow(10.,penalty_offset);
+-	Ke->values[4*numdof+4]=+kmax*pow(10.,penalty_offset);
++	Ke->values[0*numdof+3]=-kmax*pow(10.,penalty_offset);
++	Ke->values[3*numdof+0]=-kmax*pow(10.,penalty_offset);
++	Ke->values[3*numdof+3]=+kmax*pow(10.,penalty_offset);
+ 
+ 	Ke->values[1*numdof+1]=+kmax*pow(10.,penalty_offset);
+-	Ke->values[1*numdof+5]=-kmax*pow(10.,penalty_offset);
+-	Ke->values[5*numdof+1]=-kmax*pow(10.,penalty_offset);
+-	Ke->values[5*numdof+5]=+kmax*pow(10.,penalty_offset);
++	Ke->values[1*numdof+4]=-kmax*pow(10.,penalty_offset);
++	Ke->values[4*numdof+1]=-kmax*pow(10.,penalty_offset);
++	Ke->values[4*numdof+4]=+kmax*pow(10.,penalty_offset);
+ 
+ 	Ke->values[2*numdof+2]=+kmax*pow(10.,penalty_offset);
+-	Ke->values[2*numdof+6]=-kmax*pow(10.,penalty_offset);
+-	Ke->values[6*numdof+2]=-kmax*pow(10.,penalty_offset);
+-	Ke->values[6*numdof+6]=+kmax*pow(10.,penalty_offset);
++	Ke->values[2*numdof+5]=-kmax*pow(10.,penalty_offset);
++	Ke->values[5*numdof+2]=-kmax*pow(10.,penalty_offset);
++	Ke->values[5*numdof+5]=+kmax*pow(10.,penalty_offset);
+ 
+-	Ke->values[3*numdof+3]=+kmax*pow(10.,penalty_offset);
+-	Ke->values[3*numdof+7]=-kmax*pow(10.,penalty_offset);
+-	Ke->values[7*numdof+3]=-kmax*pow(10.,penalty_offset);
+-	Ke->values[7*numdof+7]=+kmax*pow(10.,penalty_offset);
+-
+ 	/*Clean up and return*/
+ 	return Ke;
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15794-15795.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15794-15795.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15794-15795.diff	(revision 16134)
@@ -0,0 +1,89 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15794)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15795)
+@@ -37,12 +37,27 @@
+ md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+ md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+ md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-md.stressbalance.spcvx(pos)=0;
+-md.stressbalance.spcvy(pos)=0;
+-md.stressbalance.spcvz(pos)=0;
+ md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
+ md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 
++
++%Position of ice front
++md.mask.icelevelset(find(vertexonicefront))=0;
++
++%First find segments that are not completely on the front
++if(md.mesh.dimension==2),
++	numbernodesfront=2;
++else 
++	numbernodesfront=4;
++end
++segmentsfront=md.mask.icelevelset(md.mesh.segments(:,1:numbernodesfront))==0;
++segments=find(sum(segmentsfront,2)~=numbernodesfront);
++%Find all nodes for these segments and spc them
++pos=[md.mesh.segments(segments,1:numbernodesfront)];
++md.stressbalance.spcvx(pos(:))=0;
++md.stressbalance.spcvy(pos(:))=0;
++md.stressbalance.spcvz(pos(:))=0;
++
+ %Dirichlet Values
+ if (length(md.inversion.vx_obs)==md.mesh.numberofvertices & length(md.inversion.vy_obs)==md.mesh.numberofvertices)
+ 	disp('      boundary conditions for stressbalance model: spc set as observed velocities');
+@@ -56,9 +71,6 @@
+ pos=find(md.mesh.vertexonboundary);
+ md.hydrology.spcwatercolumn(pos,1)=1;
+ 
+-%Position of ice front
+-md.mask.icelevelset(find(vertexonicefront))=0;
+-
+ %Create zeros basalforcings and surfaceforcings
+ if (isnan(md.surfaceforcings.precipitation) & (md.surfaceforcings.ispdd==1)),
+ 	md.surfaceforcings.precipitation=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15794)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15795)
+@@ -30,12 +30,26 @@
+ md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+ md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+ md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-md.stressbalance.spcvx(pos)=0;
+-md.stressbalance.spcvy(pos)=0;
+-md.stressbalance.spcvz(pos)=0;
+ md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
+ md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 
++%Ice front position: 
++md.mask.icelevelset(find(nodeonicefront))=0;
++
++%First find segments that are not completely on the front
++if(md.mesh.dimension==2),
++	numbernodesfront=2;
++else 
++	numbernodesfront=4;
++end
++segmentsfront=md.mask.icelevelset(md.mesh.segments(:,1:numbernodesfront))==0;
++segments=find(sum(segmentsfront,2)~=numbernodesfront);
++%Find all nodes for these segments and spc them
++pos=[md.mesh.segments(segments,1:numbernodesfront)];
++md.stressbalance.spcvx(pos(:))=0;
++md.stressbalance.spcvy(pos(:))=0;
++md.stressbalance.spcvz(pos(:))=0;
++
+ %Dirichlet Values
+ if (length(md.inversion.vx_obs)==md.mesh.numberofvertices & length(md.inversion.vy_obs)==md.mesh.numberofvertices)
+ 	disp('      boundary conditions for stressbalance model: spc set as observed velocities');
+@@ -45,9 +59,6 @@
+ 	disp('      boundary conditions for stressbalance model: spc set as zero');
+ end
+ 
+-%Ice front position
+-md.mask.icelevelset(find(nodeonicefront))=0;
+-
+ %Create zeros basalforcings and surfaceforcings
+ if (isnan(md.surfaceforcings.precipitation) & (md.surfaceforcings.ispdd==1)),
+ 	md.surfaceforcings.precipitation=zeros(md.mesh.numberofvertices,1);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15795-15796.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15795-15796.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15795-15796.diff	(revision 16134)
@@ -0,0 +1,79 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15795)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15796)
+@@ -40,7 +40,6 @@
+ md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
+ md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 
+-
+ %Position of ice front
+ md.mask.icelevelset(find(vertexonicefront))=0;
+ 
+@@ -53,7 +52,7 @@
+ segmentsfront=md.mask.icelevelset(md.mesh.segments(:,1:numbernodesfront))==0;
+ segments=find(sum(segmentsfront,2)~=numbernodesfront);
+ %Find all nodes for these segments and spc them
+-pos=[md.mesh.segments(segments,1:numbernodesfront)];
++pos=md.mesh.segments(segments,1:numbernodesfront);
+ md.stressbalance.spcvx(pos(:))=0;
+ md.stressbalance.spcvy(pos(:))=0;
+ md.stressbalance.spcvz(pos(:))=0;
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15795)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15796)
+@@ -42,12 +42,26 @@
+ 	md.stressbalance.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.stressbalance.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.stressbalance.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.stressbalance.spcvx[pos]=0
+-	md.stressbalance.spcvy[pos]=0
+-	md.stressbalance.spcvz[pos]=0
+ 	md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+ 	md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+ 
++	#Position of ice front
++	pos=numpy.nonzero(vertexonicefront)[0]
++	md.mask.icelevelset[pos]=0
++
++	#First find segments that are not completely on the front
++	if md.mesh.dimension==2:
++		numbernodesfront=2
++	else:
++		numbernodesfront=4
++	segmentsfront=numpy.nonzeros(md.mask.icelevelset(md.mesh.segments(:,0:-1)))
++	segments=numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int) 
++	#Find all nodes for these segments and spc them
++	pos=md.mesh.segments[segments,0:-1]
++	md.stressbalance.spcvx[pos[:]]=0
++	md.stressbalance.spcvy[pos[:]]=0
++	md.stressbalance.spcvz[pos[:]]=0
++
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+ 		print "      boundary conditions for stressbalance model: spc set as observed velocities"
+@@ -60,10 +74,6 @@
+ 	pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+ 	md.hydrology.spcwatercolumn[pos,0]=1
+ 
+-	#Position of ice front
+-	pos=numpy.nonzero(vertexonicefront)[0]
+-	md.mask.icelevelset[pos]=0
+-
+ 	#Create zeros basalforcings and surfaceforcings
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
+ 		md.surfaceforcings.precipitation=numpy.zeros((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15795)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15796)
+@@ -45,7 +45,7 @@
+ segmentsfront=md.mask.icelevelset(md.mesh.segments(:,1:numbernodesfront))==0;
+ segments=find(sum(segmentsfront,2)~=numbernodesfront);
+ %Find all nodes for these segments and spc them
+-pos=[md.mesh.segments(segments,1:numbernodesfront)];
++pos=md.mesh.segments(segments,1:numbernodesfront);
+ md.stressbalance.spcvx(pos(:))=0;
+ md.stressbalance.spcvy(pos(:))=0;
+ md.stressbalance.spcvz(pos(:))=0;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15796-15797.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15796-15797.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15796-15797.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15796)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15797)
+@@ -54,7 +54,7 @@
+ 		numbernodesfront=2
+ 	else:
+ 		numbernodesfront=4
+-	segmentsfront=numpy.nonzeros(md.mask.icelevelset(md.mesh.segments(:,0:-1)))
++	segmentsfront=numpy.nonzeros(md.mask.icelevelset(md.mesh.segments[:,0:-1]))
+ 	segments=numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int) 
+ 	#Find all nodes for these segments and spc them
+ 	pos=md.mesh.segments[segments,0:-1]
Index: /issm/oecreview/Archive/15392-16133/ISSM-15797-15798.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15797-15798.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15797-15798.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15797)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15798)
+@@ -55,7 +55,7 @@
+ 	else:
+ 		numbernodesfront=4
+ 	segmentsfront=numpy.nonzeros(md.mask.icelevelset(md.mesh.segments[:,0:-1]))
+-	segments=numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int) 
++	segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int) 
+ 	#Find all nodes for these segments and spc them
+ 	pos=md.mesh.segments[segments,0:-1]
+ 	md.stressbalance.spcvx[pos[:]]=0
Index: /issm/oecreview/Archive/15392-16133/ISSM-15798-15799.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15798-15799.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15798-15799.diff	(revision 16134)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/examples/Mesh/circles.m
+===================================================================
+--- ../trunk-jpl/examples/Mesh/circles.m	(revision 0)
++++ ../trunk-jpl/examples/Mesh/circles.m	(revision 15799)
+@@ -0,0 +1,7 @@
++function vel=circles(x,y),
++
++u=4*x-2; v=4*y-2;
++
++vel=tanh(30*(u.^2+v.^2-0.25)) ...
++	+tanh(30*((u-0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u-0.75).^2+(v+0.75).^2-0.25)) ...
++	+tanh(30*((u+0.75).^2+(v-0.75).^2-0.25)) +tanh(30*((u+0.75).^2+(v+0.75).^2-0.25)) ;
+Index: ../trunk-jpl/examples/Mesh/shock.m
+===================================================================
+--- ../trunk-jpl/examples/Mesh/shock.m	(revision 0)
++++ ../trunk-jpl/examples/Mesh/shock.m	(revision 15799)
+@@ -0,0 +1,3 @@
++function vel=shock(x,y),
++
++vel=exp(-(sqrt((x+0.1).^2+(y+0.1).^2)-0.75).^2*10^6)+((x+0.1).^2+(y+0.1).^2)/2;
+Index: ../trunk-jpl/examples/Mesh/Square.exp
+===================================================================
+--- ../trunk-jpl/examples/Mesh/Square.exp	(revision 0)
++++ ../trunk-jpl/examples/Mesh/Square.exp	(revision 15799)
+@@ -0,0 +1,10 @@
++## Name:Square
++## Icon:0
++# Points Count  Value
++5 1.
++# X pos Y pos
++0 0
++1 0
++1 1
++0 1
++0 0
+
+Property changes on: ../trunk-jpl/examples/Mesh/Square.exp
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15799-15800.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15799-15800.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15799-15800.diff	(revision 16134)
@@ -0,0 +1,340 @@
+Index: ../trunk-jpl/test/Archives/Archive212.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive501.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive232.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive414.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive226.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive515.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive434.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive272.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive408.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive509.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive428.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive286.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive201.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive221.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive510.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive403.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive215.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive423.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive504.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive235.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive209.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive417.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive229.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive210.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive230.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive204.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive412.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive224.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive513.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive270.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive406.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive218.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive290.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive401.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive213.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive502.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive421.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive233.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive207.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive415.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive227.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive409.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive429.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive287.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive202.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive410.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive222.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive511.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive430.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive404.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive216.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive505.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive424.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive236.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive211.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive231.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive205.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive413.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive225.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive407.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive219.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive508.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive285.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive220.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive402.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive214.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive422.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive503.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive234.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive280.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive208.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive416.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive228.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive274.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive203.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive411.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive223.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive512.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive405.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive237.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive419.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15800-15801.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15800-15801.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15800-15801.diff	(revision 16134)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15800)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15801)
+@@ -34,12 +34,23 @@
+ 	md.stressbalance.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.stressbalance.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.stressbalance.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.stressbalance.spcvx[pos]=0
+-	md.stressbalance.spcvy[pos]=0
+-	md.stressbalance.spcvz[pos]=0
+ 	md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+ 	md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+ 
++	#First find segments that are not completely on the front
++	if md.mesh.dimension==2:
++		numbernodesfront=2
++	else:
++		numbernodesfront=4
++	values=md.mask.icelevelset[md.mesh.segments[:,0:-1]]
++	segmentsfront=1-values
++	segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
++	#Find all nodes for these segments and spc them
++	pos=md.mesh.segments[segments,0:-1]
++	md.stressbalance.spcvx[pos[:]]=0
++	md.stressbalance.spcvy[pos[:]]=0
++	md.stressbalance.spcvz[pos[:]]=0
++
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+ 		#reshape to rank-2 if necessary to match spc arrays
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15800)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15801)
+@@ -54,8 +54,9 @@
+ 		numbernodesfront=2
+ 	else:
+ 		numbernodesfront=4
+-	segmentsfront=numpy.nonzeros(md.mask.icelevelset(md.mesh.segments[:,0:-1]))
+-	segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int) 
++	values=md.mask.icelevelset[md.mesh.segments[:,0:-1]]
++	segmentsfront=1-values
++	segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
+ 	#Find all nodes for these segments and spc them
+ 	pos=md.mesh.segments[segments,0:-1]
+ 	md.stressbalance.spcvx[pos[:]]=0
Index: /issm/oecreview/Archive/15392-16133/ISSM-15801-15802.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15801-15802.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15801-15802.diff	(revision 16134)
@@ -0,0 +1,125 @@
+Index: ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15801)
++++ ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15802)
+@@ -1,9 +1,9 @@
+-%STRESSBALANCE class definition
++%DIAGNOSTIC class definition
+ %
+ %   Usage:
+-%      stressbalance=stressbalance();
++%      diagnostic=diagnostic();
+ 
+-classdef stressbalance
++classdef diagnostic
+ 	properties (SetAccess=public) 
+ 		spcvx                    = NaN;
+ 		spcvy                    = NaN;
+@@ -44,14 +44,14 @@
+ 				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
+ 			end
+ 
+-			if size(md.stressbalance.icefront,2)==3 || size(md.stressbalance.icefront,2)==5,
+-				front=md.stressbalance.icefront;
+-				md.stressbalance.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
++			if size(md.diagnostic.icefront,2)==3 || size(md.diagnostic.icefront,2)==5,
++				front=md.diagnostic.icefront;
++				md.diagnostic.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
+ 			end
+ 		end% }}}
+ 	end
+ 	methods
+-		function obj = stressbalance(varargin) % {{{
++		function obj = diagnostic(varargin) % {{{
+ 			switch nargin
+ 				case 0
+ 					obj=setdefaultparameters(obj);
+@@ -76,7 +76,7 @@
+ 			 obj.penalty_factor=3;
+ 
+ 			 %coefficient to update the viscosity between each iteration of
+-			 %a stressbalance according to the following formula
++			 %a diagnostic according to the following formula
+ 			 %viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1))
+ 			 obj.viscosity_overshoot=0;
+ 
+@@ -93,52 +93,52 @@
+ 
+ 			%Early return
+ 			if ~ismember(StressbalanceAnalysisEnum(),analyses), return; end
+-			%if ~ismember(StressbalanceAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isstressbalance==0), return; end
++			%if ~ismember(StressbalanceAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isdiagnostic==0), return; end
+ 
+-			md = checkfield(md,'stressbalance.spcvx','forcing',1);
+-			md = checkfield(md,'stressbalance.spcvy','forcing',1);
+-			if md.mesh.dimension==3, md = checkfield(md,'stressbalance.spcvz','forcing',1); end
+-			md = checkfield(md,'stressbalance.restol','size',[1 1],'>',0,'NaN',1);
+-			md = checkfield(md,'stressbalance.reltol','size',[1 1]);
+-			md = checkfield(md,'stressbalance.abstol','size',[1 1]);
+-			md = checkfield(md,'stressbalance.isnewton','numel',[1],'values',[0 1 2]);
+-			md = checkfield(md,'stressbalance.FSreconditioning','size',[1 1],'NaN',1);
+-			md = checkfield(md,'stressbalance.viscosity_overshoot','size',[1 1],'NaN',1);
++			md = checkfield(md,'diagnostic.spcvx','forcing',1);
++			md = checkfield(md,'diagnostic.spcvy','forcing',1);
++			if md.mesh.dimension==3, md = checkfield(md,'diagnostic.spcvz','forcing',1); end
++			md = checkfield(md,'diagnostic.restol','size',[1 1],'>',0,'NaN',1);
++			md = checkfield(md,'diagnostic.reltol','size',[1 1]);
++			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
++			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
++			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
++			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
+ 			if md.mesh.dimension==2,
+-				md = checkfield(md,'stressbalance.icefront','size',[NaN 4],'NaN',1);
++				md = checkfield(md,'diagnostic.icefront','size',[NaN 4],'NaN',1);
+ 			else
+-				md = checkfield(md,'stressbalance.icefront','size',[NaN 6],'NaN',1);
++				md = checkfield(md,'diagnostic.icefront','size',[NaN 6],'NaN',1);
+ 			end
+-			md = checkfield(md,'stressbalance.icefront(:,end)','values',[0 1 2]);
+-			md = checkfield(md,'stressbalance.maxiter','size',[1 1],'>=',1);
+-			md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices 6]);
+-			md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices 3]);
+-			if ~isempty(md.stressbalance.requested_outputs),
+-				md = checkfield(md,'stressbalance.requested_outputs','size',[NaN 1]);
++			md = checkfield(md,'diagnostic.icefront(:,end)','values',[0 1 2]);
++			md = checkfield(md,'diagnostic.maxiter','size',[1 1],'>=',1);
++			md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices 6]);
++			md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices 3]);
++			if ~isempty(md.diagnostic.requested_outputs),
++				md = checkfield(md,'diagnostic.requested_outputs','size',[NaN 1]);
+ 			end
+ 
+ 			%singular solution
+-			if ~(any(~isnan(md.stressbalance.spcvx)) & any(~isnan(md.stressbalance.spcvy))),
++			if ~(any(~isnan(md.diagnostic.spcvx)) & any(~isnan(md.diagnostic.spcvy))),
+ 				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
+ 			end
+ 			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+-			if any(sum(isnan(md.stressbalance.referential),2)~=0 & sum(isnan(md.stressbalance.referential),2)~=6),
+-				md = checkmessage(md,['Each line of stressbalance.referential should contain either only NaN values or no NaN values']);
++			if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
++				md = checkmessage(md,['Each line of diagnostic.referential should contain either only NaN values or no NaN values']);
+ 			end
+ 			%CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+-			if any(sum(isnan(md.stressbalance.referential),2)==0),
+-				pos=find(sum(isnan(md.stressbalance.referential),2)==0);
+-				if any(abs(dot(md.stressbalance.referential(pos,1:3),md.stressbalance.referential(pos,4:6),2))>eps),
+-					md = checkmessage(md,['Vectors in stressbalance.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
++			if any(sum(isnan(md.diagnostic.referential),2)==0),
++				pos=find(sum(isnan(md.diagnostic.referential),2)==0);
++				if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps),
++					md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
+ 				end
+ 			end
+ 			%CHECK THAT NO rotation specified for FS Grounded ice at base
+ 			if md.mesh.dimension==3 & md.flowequation.isFS,
+ 				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
+-				if any(~isnan(md.stressbalance.referential(pos,:))),
++				if any(~isnan(md.diagnostic.referential(pos,:))),
+ 					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+ 				end
+-				md = checkfield(md,'stressbalance.FSreconditioning','>',0);
++				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
Index: /issm/oecreview/Archive/15392-16133/ISSM-15802-15803.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15802-15803.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15802-15803.diff	(revision 16134)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/test/NightlyRun/test1105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1105.m	(revision 15802)
++++ ../trunk-jpl/test/NightlyRun/test1105.m	(revision 15803)
+@@ -147,7 +147,7 @@
+ 	1e-09,1e-09,1e-07,...
+ 	1e-09,1e-09,1e-08,...
+ 	1e-09,1e-08,1e-08,...
+-	1e-09,1e-08,1e-08,...
++	1e-08,1e-08,1e-08,...
+ };
+ field_values={};
+ for i=1:6,
+Index: ../trunk-jpl/test/NightlyRun/test1106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.m	(revision 15802)
++++ ../trunk-jpl/test/NightlyRun/test1106.m	(revision 15803)
+@@ -62,11 +62,11 @@
+ };
+ field_tolerances={...
+ 	1e-12,1e-12,1e-11,...
++	1e-12,2e-12,2e-12,...
+ 	1e-12,1e-12,1e-12,...
+-	1e-12,1e-12,1e-12,...
+-	1e-12,1e-12,1e-12,...
+-	1e-12,1e-12,1e-12,...
+-	1e-12,1e-11,1e-12,...
++	1e-12,2e-12,2e-12,...
++	1e-12,2e-12,2e-12,...
++	1e-12,2e-11,2e-12,...
+ };
+ field_values={};
+ for i=1:6,
+Index: ../trunk-jpl/test/NightlyRun/test1108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1108.m	(revision 15802)
++++ ../trunk-jpl/test/NightlyRun/test1108.m	(revision 15803)
+@@ -74,7 +74,7 @@
+ 	1e-07,1e-07,1e-07,...
+ 	1e-08,1e-08,1e-08,...
+ 	1e-08,1e-07,1e-07,...
+-	1e-08,1e-08,1e-08,...
++	1e-08,1e-08,2e-08,...
+ 	1e-08,1e-07,1e-07,...
+ 	1e-07,1e-06,1e-07,...
+ };
Index: /issm/oecreview/Archive/15392-16133/ISSM-15803-15804.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15803-15804.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15803-15804.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/Archives/Archive1501.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1602.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1502.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1601.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15804-15805.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15804-15805.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15804-15805.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15804)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15805)
+@@ -18,9 +18,7 @@
+ 
+ #sources
+ #Core sources{{{
+-core_sources = ./main/issm.h\
+-			   ./main/globals.h\
+-			   ./datastructures/DataSet.h\
++core_sources = ./datastructures/DataSet.h\
+ 					./datastructures/DataSet.cpp\
+ 					./datastructures/Object.h\
+ 					./datastructures/datastructures.h\
+@@ -995,12 +993,12 @@
+ LDADD += $(FLIBS)
+ endif
+ 
+-issm_SOURCES = main/issm.cpp
++issm_SOURCES = main/issm.h main/globals.h main/issm.cpp
+ issm_CXXFLAGS= -fPIC $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) 
+ 
+ if KRIGING
+ bin_PROGRAMS += kriging
+-kriging_SOURCES = main/kriging.cpp
++kriging_SOURCES = main/issm.h main/globals.h main/kriging.cpp
+ kriging_CXXFLAGS= -fPIC $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) 
+ endif
+ #}}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15805-15806.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15805-15806.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15805-15806.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15805)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15806)
+@@ -37,6 +37,10 @@
+ 	md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+ 	md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+ 
++	#Icefront position
++	pos=numpy.nonzero(nodeonicefront)[0]
++	md.mask.icelevelset[pos]=0
++
+ 	#First find segments that are not completely on the front
+ 	if md.mesh.dimension==2:
+ 		numbernodesfront=2
+@@ -64,10 +68,6 @@
+ 	else:
+ 		print "      boundary conditions for stressbalance model: spc set as zero"
+ 
+-	#Icefront position
+-	pos=numpy.nonzero(nodeonicefront)[0]
+-	md.mask.icelevelset[pos]=0
+-
+ 	#Create zeros basalforcings and surfaceforcings
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
+ 		md.surfaceforcings.precipitation=numpy.zeros((md.mesh.numberofvertices,1))
Index: /issm/oecreview/Archive/15392-16133/ISSM-15806-15807.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15806-15807.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15806-15807.diff	(revision 16134)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15806)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15807)
+@@ -46,11 +46,14 @@
+ 		numbernodesfront=2
+ 	else:
+ 		numbernodesfront=4
+-	values=md.mask.icelevelset[md.mesh.segments[:,0:-1]]
+-	segmentsfront=1-values
+-	segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
+-	#Find all nodes for these segments and spc them
+-	pos=md.mesh.segments[segments,0:-1]
++	if any(md.mask.icelevelset<=0):
++		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]]
++		segmentsfront=1-values
++		segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
++		#Find all nodes for these segments and spc them
++		pos=md.mesh.segments[segments,0:-1]
++	else:
++		pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+ 	md.stressbalance.spcvx[pos[:]]=0
+ 	md.stressbalance.spcvy[pos[:]]=0
+ 	md.stressbalance.spcvz[pos[:]]=0
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15806)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15807)
+@@ -54,11 +54,14 @@
+ 		numbernodesfront=2
+ 	else:
+ 		numbernodesfront=4
+-	values=md.mask.icelevelset[md.mesh.segments[:,0:-1]]
+-	segmentsfront=1-values
+-	segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
+-	#Find all nodes for these segments and spc them
+-	pos=md.mesh.segments[segments,0:-1]
++	if any(md.mask.icelevelset<=0):
++		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]]
++		segmentsfront=1-values
++		segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
++		#Find all nodes for these segments and spc them
++		pos=md.mesh.segments[segments,0:-1]
++	else:
++		pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+ 	md.stressbalance.spcvx[pos[:]]=0
+ 	md.stressbalance.spcvy[pos[:]]=0
+ 	md.stressbalance.spcvz[pos[:]]=0
Index: /issm/oecreview/Archive/15392-16133/ISSM-15807-15808.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15807-15808.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15807-15808.diff	(revision 16134)
@@ -0,0 +1,115 @@
+Index: ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp	(revision 0)
++++ ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp	(revision 15808)
+@@ -0,0 +1,110 @@
++/* \file LliboutryDuval.cpp
++ * \brief figure out B of ice for a certain temperature and water fraction or enthalpy
++ */
++
++#include <math.h>
++#include "../Numerics/types.h"
++#include "../Exceptions/exceptions.h"
++
++
++/* get ice stiffness B from enthalpy, pressure and flow law exponent*/
++IssmDouble LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n){
++  /*Use parameterization for the rheology: Aschwanden 2012
++   *
++   *  A(H,p) = A0 exp(-Q/RT(H,p)), if H < H_s(p)
++   *         = A0 exp(-Q/RTpmp) (1+181.25w(H,p)), if H_s(p) \le H < H_l(p)
++   *  
++   *  T(H,p) = Tref + H/c_i, if H < H_s(p)
++   *         = Tpmp , if H_s(p) \le H \le H_l(p)
++   *
++   *  w(H,p) = 0, if H < H_s(p)
++   *         = (H - H_s(p))/L
++   *
++   *  H_s(p) = c_i (Tpmp - Tref)
++   *
++   *  Tpmp   = T - beta p;
++   *
++   *  A0 constant of proportionality
++   *     = 3.61 * 10^-13   if T*<263.15K
++   *     = 1.73 * 10^3     if T*>263.15K
++   *  Q  Activation energy for creep
++   *     = 6.0  * 10^4     if T*<263.15K
++   *     = 13.9 * 10^4     if T*>263.15K
++   *  R  Universal gas constant
++   *     = 8.314
++   *  
++   *  Convert A to B :  B = A^(-1/n) */
++  
++  /*Some physical constants (Aschwanden 2012)*/
++  /*TODO: get those constants from model*/
++  IssmDouble beta=7.9*pow(10.,-8.);
++  IssmDouble R=8.314;
++  IssmDouble heatcapacity=2009; // J/kg/K
++  IssmDouble Tref=253.15;
++  IssmDouble latentheat=3.34*pow(10,5.); // from Aschwanden 2012
++
++  /*Intermediaries*/
++  IssmDouble A,B,Tstar,Tpmp,H_sp,waterfraction;
++	
++  _assert_(pressure);
++  _assert_(enthalpy);
++  Tpmp=273.15-beta*pressure; 
++  H_sp=heatcapacity*(Tpmp - Tref);
++  if (enthalpy < H_sp){
++    Tstar = Tref + enthalpy/heatcapacity - beta*pressure;	
++    waterfraction = 0;
++  }
++  else{
++    Tstar=Tpmp;
++    waterfraction=(enthalpy - H_sp)/latentheat;
++  }
++
++  /*Get A*/
++  if(Tstar<263.15){
++    A=3.61*pow(10.,-13.) * exp(  -6.*pow(10.,4.)/(R*Tstar));
++  }
++  else{
++    A=1.73*pow(10.,  3.) * exp(-13.9*pow(10.,4.)/(R*Tstar));
++  }
++  A*=(1 + 181.25*waterfraction);
++
++  /*Convert to B*/
++  _assert_(n);
++  B=pow(A,-1./n);
++
++  return B;
++}
++
++/*Get stiffness from temperature, waterfraction and depth*/
++IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n){
++	/*Use parameterization for the rheology: Greve and Blatter 2009
++	 * get enthalpy from temperature and water fraction,
++	 * and use LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n) */
++  
++  IssmDouble rho_ice=910; // kg/m^3
++  IssmDouble g=9.81; //kg*m/s^2
++  IssmDouble heatcapacity=2009; // J/kg/K
++  IssmDouble Tref=253.15;
++  IssmDouble beta=7.9*pow(10.,-8.);
++  IssmDouble latentheat=3.34*pow(10,5.); // from Aschwanden 2012
++  IssmDouble Tstar, enthalpy, pressure, B;
++  _assert_(temperature);
++  _assert_(waterfraction);
++  _assert_(depth);
++
++  /*get pressure*/
++  pressure= rho_ice*g*depth;
++  Tstar=temperature-beta*pressure; // TODO: check whether plus or minus
++  /*get enthalpy*/
++  if (Tstar < 273.15){
++    enthalpy=heatcapacity*(Tstar - Tref);
++  }
++  else{
++    enthalpy=heatcapacity*(273.15 - Tref) + waterfraction*latentheat;
++  }
++	
++  B=LliboutryDuval(enthalpy, pressure, n);
++
++  return B;
++}
++
Index: /issm/oecreview/Archive/15392-16133/ISSM-15808-15809.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15808-15809.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15808-15809.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15808)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15809)
+@@ -18,7 +18,9 @@
+ 
+ #sources
+ #Core sources{{{
+-core_sources = ./datastructures/DataSet.h\
++core_sources = ./main/issm.h\
++			   ./main/globals.h\
++			   ./datastructures/DataSet.h\
+ 					./datastructures/DataSet.cpp\
+ 					./datastructures/Object.h\
+ 					./datastructures/datastructures.h\
+@@ -993,12 +995,12 @@
+ LDADD += $(FLIBS)
+ endif
+ 
+-issm_SOURCES = main/issm.h main/globals.h main/issm.cpp
++issm_SOURCES = main/issm.cpp
+ issm_CXXFLAGS= -fPIC $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) 
+ 
+ if KRIGING
+ bin_PROGRAMS += kriging
+-kriging_SOURCES = main/issm.h main/globals.h main/kriging.cpp
++kriging_SOURCES = main/kriging.cpp
+ kriging_CXXFLAGS= -fPIC $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) 
+ endif
+ #}}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15809-15810.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15809-15810.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15809-15810.diff	(revision 16134)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15809)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15810)
+@@ -18,9 +18,7 @@
+ 
+ #sources
+ #Core sources{{{
+-core_sources = ./main/issm.h\
+-			   ./main/globals.h\
+-			   ./datastructures/DataSet.h\
++core_sources = ./datastructures/DataSet.h\
+ 					./datastructures/DataSet.cpp\
+ 					./datastructures/Object.h\
+ 					./datastructures/datastructures.h\
+@@ -206,6 +204,7 @@
+ 					./shared/Elements/elements.h\
+ 					./shared/Elements/Paterson.cpp\
+ 					./shared/Elements/Arrhenius.cpp\
++					./shared/Elements/LliboutryDuval.cpp \
+ 					./shared/Elements/PrintArrays.cpp\
+ 					./shared/Elements/PddSurfaceMassBalance.cpp\
+ 					./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\
+@@ -995,12 +994,12 @@
+ LDADD += $(FLIBS)
+ endif
+ 
+-issm_SOURCES = main/issm.cpp
++issm_SOURCES = main/issm.h main/globals.h main/issm.cpp
+ issm_CXXFLAGS= -fPIC $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) 
+ 
+ if KRIGING
+ bin_PROGRAMS += kriging
+-kriging_SOURCES = main/kriging.cpp
++kriging_SOURCES = main/issm.h main/globals.h main/kriging.cpp
+ kriging_CXXFLAGS= -fPIC $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) 
+ endif
+ #}}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15810-15811.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15810-15811.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15810-15811.diff	(revision 16134)
@@ -0,0 +1,91 @@
+Index: ../trunk-jpl/test/NightlyRun/test290.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test290.m	(revision 15810)
++++ ../trunk-jpl/test/NightlyRun/test290.m	(revision 15811)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-7,1e-7,1e-7,1e-7,1e-7};
++field_tolerances={1e-7,1e-7,1e-6,1e-7,1e-7};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 15810)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 15811)
+@@ -13,7 +13,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-11,1e-11,1e-11,1e-11};
++field_tolerances={1e-10,1e-11,1e-11,1e-11};
+ field_values={...
+ 	   (md.results.StressbalanceSolution.Vx),...
+ 	   (md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 15810)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 15811)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-08,2e-09,2e-05,1e-09,2e-09};
++field_tolerances={1e-08,2e-09,2e-05,5e-09,5e-09};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 15810)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 15811)
+@@ -14,7 +14,7 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
+-	2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
++	2e-09,1e-09,2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
+ 	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 15810)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 15811)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-09,1e-09,2e-06,1e-09,1e-09};
++field_tolerances={1e-09,1e-09,2e-06,1e-09,5e-09};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test287.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.m	(revision 15810)
++++ ../trunk-jpl/test/NightlyRun/test287.m	(revision 15811)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-13};
++field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-13};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 15810)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 15811)
+@@ -10,7 +10,7 @@
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
+ field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,...
+-						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,1e-08};
++						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,r21e-08};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15811-15812.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15811-15812.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15811-15812.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15811)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15812)
+@@ -47,7 +47,7 @@
+ 	else:
+ 		numbernodesfront=4
+ 	if any(md.mask.icelevelset<=0):
+-		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]]
++		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]-1]
+ 		segmentsfront=1-values
+ 		segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
+ 		#Find all nodes for these segments and spc them
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15811)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15812)
+@@ -55,7 +55,7 @@
+ 	else:
+ 		numbernodesfront=4
+ 	if any(md.mask.icelevelset<=0):
+-		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]]
++		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]-1]
+ 		segmentsfront=1-values
+ 		segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
+ 		#Find all nodes for these segments and spc them
Index: /issm/oecreview/Archive/15392-16133/ISSM-15812-15813.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15812-15813.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15812-15813.diff	(revision 16134)
@@ -0,0 +1,121 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15812)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15813)
+@@ -542,25 +542,25 @@
+ syn keyword cConstant ConstantsReferencetemperatureEnum
+ syn keyword cConstant ConstantsYtsEnum
+ syn keyword cConstant DependentObjectEnum
+-syn keyword cConstant DiagnosticAbstolEnum
+-syn keyword cConstant DiagnosticIcefrontEnum
+-syn keyword cConstant DiagnosticIsnewtonEnum
+-syn keyword cConstant DiagnosticMaxiterEnum
+-syn keyword cConstant DiagnosticNumRequestedOutputsEnum
+-syn keyword cConstant DiagnosticPenaltyFactorEnum
+-syn keyword cConstant DiagnosticReferentialEnum
+-syn keyword cConstant DiagnosticReltolEnum
+-syn keyword cConstant DiagnosticRequestedOutputsEnum
+-syn keyword cConstant DiagnosticRestolEnum
+-syn keyword cConstant DiagnosticRiftPenaltyLockEnum
+-syn keyword cConstant DiagnosticRiftPenaltyThresholdEnum
+-syn keyword cConstant DiagnosticShelfDampeningEnum
+-syn keyword cConstant DiagnosticSpcvxEnum
+-syn keyword cConstant DiagnosticSpcvyEnum
+-syn keyword cConstant DiagnosticSpcvzEnum
+-syn keyword cConstant DiagnosticFSreconditioningEnum
+-syn keyword cConstant DiagnosticVertexPairingEnum
+-syn keyword cConstant DiagnosticViscosityOvershootEnum
++syn keyword cConstant StressbalanceAbstolEnum
++syn keyword cConstant StressbalanceIcefrontEnum
++syn keyword cConstant StressbalanceIsnewtonEnum
++syn keyword cConstant StressbalanceMaxiterEnum
++syn keyword cConstant StressbalanceNumRequestedOutputsEnum
++syn keyword cConstant StressbalancePenaltyFactorEnum
++syn keyword cConstant StressbalanceReferentialEnum
++syn keyword cConstant StressbalanceReltolEnum
++syn keyword cConstant StressbalanceRequestedOutputsEnum
++syn keyword cConstant StressbalanceRestolEnum
++syn keyword cConstant StressbalanceRiftPenaltyLockEnum
++syn keyword cConstant StressbalanceRiftPenaltyThresholdEnum
++syn keyword cConstant StressbalanceShelfDampeningEnum
++syn keyword cConstant StressbalanceSpcvxEnum
++syn keyword cConstant StressbalanceSpcvyEnum
++syn keyword cConstant StressbalanceSpcvzEnum
++syn keyword cConstant StressbalanceFSreconditioningEnum
++syn keyword cConstant StressbalanceVertexPairingEnum
++syn keyword cConstant StressbalanceViscosityOvershootEnum
+ syn keyword cConstant LoadingforceXEnum
+ syn keyword cConstant LoadingforceYEnum
+ syn keyword cConstant LoadingforceZEnum
+@@ -645,10 +645,8 @@
+ syn keyword cConstant InversionVzObsEnum
+ syn keyword cConstant MaskElementonfloatingiceEnum
+ syn keyword cConstant MaskElementongroundediceEnum
+-syn keyword cConstant MaskElementonwaterEnum
+ syn keyword cConstant MaskVertexonfloatingiceEnum
+ syn keyword cConstant MaskVertexongroundediceEnum
+-syn keyword cConstant MaskVertexonwaterEnum
+ syn keyword cConstant MaskIcelevelsetEnum
+ syn keyword cConstant MaterialsBetaEnum
+ syn keyword cConstant MaterialsHeatcapacityEnum
+@@ -690,14 +688,14 @@
+ syn keyword cConstant MeshYEnum
+ syn keyword cConstant MeshZEnum
+ syn keyword cConstant MiscellaneousNameEnum
+-syn keyword cConstant PrognosticHydrostaticAdjustmentEnum
+-syn keyword cConstant PrognosticMinThicknessEnum
+-syn keyword cConstant PrognosticPenaltyFactorEnum
+-syn keyword cConstant PrognosticSpcthicknessEnum
+-syn keyword cConstant PrognosticStabilizationEnum
+-syn keyword cConstant PrognosticVertexPairingEnum
+-syn keyword cConstant PrognosticNumRequestedOutputsEnum
+-syn keyword cConstant PrognosticRequestedOutputsEnum
++syn keyword cConstant MasstransportHydrostaticAdjustmentEnum
++syn keyword cConstant MasstransportMinThicknessEnum
++syn keyword cConstant MasstransportPenaltyFactorEnum
++syn keyword cConstant MasstransportSpcthicknessEnum
++syn keyword cConstant MasstransportStabilizationEnum
++syn keyword cConstant MasstransportVertexPairingEnum
++syn keyword cConstant MasstransportNumRequestedOutputsEnum
++syn keyword cConstant MasstransportRequestedOutputsEnum
+ syn keyword cConstant QmuIsdakotaEnum
+ syn keyword cConstant MassFluxSegmentsEnum
+ syn keyword cConstant MassFluxSegmentsPresentEnum
+@@ -757,9 +755,9 @@
+ syn keyword cConstant TimesteppingCflCoefficientEnum
+ syn keyword cConstant TimesteppingTimeAdaptEnum
+ syn keyword cConstant TimesteppingTimeStepEnum
+-syn keyword cConstant TransientIsdiagnosticEnum
++syn keyword cConstant TransientIsstressbalanceEnum
+ syn keyword cConstant TransientIsgroundinglineEnum
+-syn keyword cConstant TransientIsprognosticEnum
++syn keyword cConstant TransientIsmasstransportEnum
+ syn keyword cConstant TransientIsthermalEnum
+ syn keyword cConstant TransientIsgiaEnum
+ syn keyword cConstant TransientNumRequestedOutputsEnum
+@@ -781,10 +779,10 @@
+ syn keyword cConstant BedSlopeSolutionEnum
+ syn keyword cConstant BedSlopeXAnalysisEnum
+ syn keyword cConstant BedSlopeYAnalysisEnum
+-syn keyword cConstant DiagnosticHorizAnalysisEnum
+-syn keyword cConstant DiagnosticSIAAnalysisEnum
+-syn keyword cConstant DiagnosticSolutionEnum
+-syn keyword cConstant DiagnosticVertAnalysisEnum
++syn keyword cConstant StressbalanceAnalysisEnum
++syn keyword cConstant StressbalanceSIAAnalysisEnum
++syn keyword cConstant StressbalanceSolutionEnum
++syn keyword cConstant StressbalanceVerticalAnalysisEnum
+ syn keyword cConstant EnthalpyAnalysisEnum
+ syn keyword cConstant EnthalpySolutionEnum
+ syn keyword cConstant FlaimAnalysisEnum
+@@ -794,8 +792,8 @@
+ syn keyword cConstant HydrologyDCEfficientAnalysisEnum
+ syn keyword cConstant HydrologySolutionEnum
+ syn keyword cConstant MeltingAnalysisEnum
+-syn keyword cConstant PrognosticAnalysisEnum
+-syn keyword cConstant PrognosticSolutionEnum
++syn keyword cConstant MasstransportAnalysisEnum
++syn keyword cConstant MasstransportSolutionEnum
+ syn keyword cConstant SteadystateSolutionEnum
+ syn keyword cConstant SurfaceSlopeAnalysisEnum
+ syn keyword cConstant SurfaceSlopeSolutionEnum
Index: /issm/oecreview/Archive/15392-16133/ISSM-15813-15814.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15813-15814.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15813-15814.diff	(revision 16134)
@@ -0,0 +1,145 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15813)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15814)
+@@ -817,16 +817,16 @@
+ 	bool               floating=true;
+ 	int                point;
+ 	const IssmPDouble  epsilon= 1.e-15;
+-	IssmDouble         gl[3];
++	IssmDouble         gl[NUMVERTICES];
+ 	IssmDouble         f1,f2;
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&gl[0],GLlevelsetEnum);
+ 
+ 	/*Be sure that values are not zero*/
+-	if(gl[0]==0) gl[0]=gl[0]+epsilon;
+-	if(gl[1]==0) gl[1]=gl[1]+epsilon;
+-	if(gl[2]==0) gl[2]=gl[2]+epsilon;
++	if(gl[0]==0.) gl[0]=gl[0]+epsilon;
++	if(gl[1]==0.) gl[1]=gl[1]+epsilon;
++	if(gl[2]==0.) gl[2]=gl[2]+epsilon;
+ 
+ 	/*Check that not all nodes are grounded or floating*/
+ 	if(gl[0]>0 && gl[1]>0 && gl[2]>0){ // All grounded
+@@ -868,19 +868,19 @@
+ IssmDouble Tria::GetGroundedPortion(IssmDouble* xyz_list){
+ 	/*Computeportion of the element that is grounded*/ 
+ 
+-	bool               mainlyfloating = true;
+-	const IssmPDouble  epsilon= 1.e-15;
++	bool              mainlyfloating = true;
++	const IssmPDouble epsilon        = 1.e-15;
+ 	IssmDouble         phi,s1,s2,area_init,area_grounded;
+-	IssmDouble         gl[3];
++	IssmDouble         gl[NUMVERTICES];
+ 	IssmDouble         xyz_bis[3][3];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&gl[0],GLlevelsetEnum);
+ 
+ 	/*Be sure that values are not zero*/
+-	if(gl[0]==0) gl[0]=gl[0]+epsilon;
+-	if(gl[1]==0) gl[1]=gl[1]+epsilon;
+-	if(gl[2]==0) gl[2]=gl[2]+epsilon;
++	if(gl[0]==0.) gl[0]=gl[0]+epsilon;
++	if(gl[1]==0.) gl[1]=gl[1]+epsilon;
++	if(gl[2]==0.) gl[2]=gl[2]+epsilon;
+ 
+ 	/*Check that not all nodes are grounded or floating*/
+ 	if(gl[0]>0 && gl[1]>0 && gl[2]>0){ // All grounded
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15813)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15814)
+@@ -1023,16 +1023,16 @@
+ 	bool               mainlyfloating = true;
+ 	const IssmPDouble  epsilon= 1.e-15;
+ 	IssmDouble         phi,s1,s2,area_init,area_grounded;
+-	IssmDouble         gl[3];
+-	IssmDouble         xyz_bis[3][3];
++	IssmDouble         gl[NUMVERTICES];
++	IssmDouble         xyz_bis[NUMVERTICES2D][3];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&gl[0],GLlevelsetEnum);
+ 
+ 	/*Be sure that values are not zero*/
+-	if(gl[0]==0) gl[0]=gl[0]+epsilon;
+-	if(gl[1]==0) gl[1]=gl[1]+epsilon;
+-	if(gl[2]==0) gl[2]=gl[2]+epsilon;
++	if(gl[0]==0.) gl[0]=gl[0]+epsilon;
++	if(gl[1]==0.) gl[1]=gl[1]+epsilon;
++	if(gl[2]==0.) gl[2]=gl[2]+epsilon;
+ 
+ 	/*Check that not all nodes are grounded or floating*/
+ 	if(gl[0]>0 && gl[1]>0 && gl[2]>0){ // All grounded
+@@ -1047,23 +1047,23 @@
+ 
+ 		if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
+ 			/*Coordinates of point 2: same as initial point 2*/
+-			xyz_bis[2][0]=*(xyz_list+3*2+0);
+-			xyz_bis[2][1]=*(xyz_list+3*2+1);
+-			xyz_bis[2][2]=*(xyz_list+3*2+2);
++			xyz_bis[2][0]=xyz_list[3*2+0];
++			xyz_bis[2][1]=xyz_list[3*2+1];
++			xyz_bis[2][2]=xyz_list[3*2+2];
+ 
+ 			/*Portion of the segments*/
+ 			s1=gl[2]/(gl[2]-gl[1]);
+ 			s2=gl[2]/(gl[2]-gl[0]);
+ 
+ 			/*New point 1*/
+-			xyz_bis[1][0]=*(xyz_list+3*2+0)+s1*(*(xyz_list+3*1+0)-*(xyz_list+3*2+0));
+-			xyz_bis[1][1]=*(xyz_list+3*2+1)+s1*(*(xyz_list+3*1+1)-*(xyz_list+3*2+1));
+-			xyz_bis[1][2]=*(xyz_list+3*2+2)+s1*(*(xyz_list+3*1+2)-*(xyz_list+3*2+2));
++			xyz_bis[1][0]=xyz_list[3*2+0]+s1*(xyz_list[3*1+0]-xyz_list[3*2+0]);
++			xyz_bis[1][1]=xyz_list[3*2+1]+s1*(xyz_list[3*1+1]-xyz_list[3*2+1]);
++			xyz_bis[1][2]=xyz_list[3*2+2]+s1*(xyz_list[3*1+2]-xyz_list[3*2+2]);
+ 
+ 			/*New point 0*/
+-			xyz_bis[0][0]=*(xyz_list+3*2+0)+s2*(*(xyz_list+3*0+0)-*(xyz_list+3*2+0));
+-			xyz_bis[0][1]=*(xyz_list+3*2+1)+s2*(*(xyz_list+3*0+1)-*(xyz_list+3*2+1));
+-			xyz_bis[0][2]=*(xyz_list+3*2+2)+s2*(*(xyz_list+3*0+2)-*(xyz_list+3*2+2));
++			xyz_bis[0][0]=xyz_list[3*2+0]+s2*(xyz_list[3*0+0]-xyz_list[3*2+0]);
++			xyz_bis[0][1]=xyz_list[3*2+1]+s2*(xyz_list[3*0+1]-xyz_list[3*2+1]);
++			xyz_bis[0][2]=xyz_list[3*2+2]+s2*(xyz_list[3*0+2]-xyz_list[3*2+2]);
+ 		}
+ 		else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
+ 			/*Coordinates of point 0: same as initial point 2*/
+@@ -1107,13 +1107,13 @@
+ 		}
+ 
+ 		/*Compute fraction of grounded element*/
+-		GetJacobianDeterminant(&area_init, xyz_list,NULL);
+-		GetJacobianDeterminant(&area_grounded, &xyz_bis[0][0],NULL);
++		GetTriaJacobianDeterminant(&area_init, xyz_list,NULL);
++		GetTriaJacobianDeterminant(&area_grounded, &xyz_bis[0][0],NULL);
+ 		if(mainlyfloating==true) area_grounded=area_init-area_grounded;
+ 		phi=area_grounded/area_init;
+ 	}
+ 
+-	if(phi>1 || phi<0) _error_("Error. Problem with portion of grounded element: value should be between 0 and 1");
++	if(phi>1. || phi<0.) _error_("Error. Problem with portion of grounded element: value should be between 0 and 1");
+ 
+ 	return phi;
+ }
+@@ -7659,7 +7659,7 @@
+ 	int         i,j;
+ 	int         analysis_type,migration_style;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+-	IssmDouble  xyz_list_tria[NUMVERTICES2D][3]={0.};
++	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+ 	IssmDouble  alpha2,Jdet;
+ 	IssmDouble  phi=1.0;
+ 	IssmDouble  DL_scalar;
+@@ -7692,7 +7692,7 @@
+ 	friction=new Friction("2d",inputs,matpar,analysis_type);
+ 
+ 	/*Recover portion of element that is grounded*/
+-	if(migration_style==SubelementMigrationEnum) phi=this->GetGroundedPortion(&xyz_list[0][0]);
++	if(migration_style==SubelementMigrationEnum) phi=this->GetGroundedPortion(&xyz_list_tria[0][0]);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,2);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15814-15815.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15814-15815.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15814-15815.diff	(revision 16134)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15814)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15815)
+@@ -49,14 +49,34 @@
+ 	if any(md.mask.icelevelset<=0):
+ 		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]-1]
+ 		segmentsfront=1-values
+-		segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
++		numpy.sum(segmentsfront,axis=1)!=numbernodesfront
++		segments=numpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]
+ 		#Find all nodes for these segments and spc them
+ 		pos=md.mesh.segments[segments,0:-1]
+ 	else:
+ 		pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+-	md.stressbalance.spcvx[pos[:]]=0
+-	md.stressbalance.spcvy[pos[:]]=0
+-	md.stressbalance.spcvz[pos[:]]=0
++	md.stressbalance.spcvx[pos[:]-1]=0
++	md.stressbalance.spcvy[pos[:]-1]=0
++	md.stressbalance.spcvz[pos[:]-1]=0
++																													   
++	if md.mesh.dimension==2:
++		numbernodesfront=2
++	else:
++		numbernodesfront=4
++	if any(md.mask.icelevelset<=0):
++		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]-1]
++		segmentsfront=1-values
++		numpy.sum(segmentsfront,axis=1)!=numbernodesfront
++		segments=numpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]
++		print segments
++		#Find all nodes for these segments and spc them
++		pos=md.mesh.segments[segments,0:-1]
++		print pos
++	else:
++		pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
++	md.stressbalance.spcvx[pos[:]-1]=0
++	md.stressbalance.spcvy[pos[:]-1]=0
++	md.stressbalance.spcvz[pos[:]-1]=0
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15814)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15815)
+@@ -57,14 +57,15 @@
+ 	if any(md.mask.icelevelset<=0):
+ 		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]-1]
+ 		segmentsfront=1-values
+-		segments=(numpy.sum(segmentsfront,axis=1)!=numbernodesfront).astype(int)
++		numpy.sum(segmentsfront,axis=1)!=numbernodesfront
++		segments=numpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]
+ 		#Find all nodes for these segments and spc them
+ 		pos=md.mesh.segments[segments,0:-1]
+ 	else:
+ 		pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+-	md.stressbalance.spcvx[pos[:]]=0
+-	md.stressbalance.spcvy[pos[:]]=0
+-	md.stressbalance.spcvz[pos[:]]=0
++	md.stressbalance.spcvx[pos[:]-1]=0
++	md.stressbalance.spcvy[pos[:]-1]=0
++	md.stressbalance.spcvz[pos[:]-1]=0
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
Index: /issm/oecreview/Archive/15392-16133/ISSM-15815-15816.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15815-15816.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15815-15816.diff	(revision 16134)
@@ -0,0 +1,62 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15815)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15816)
+@@ -52,32 +52,13 @@
+ 		numpy.sum(segmentsfront,axis=1)!=numbernodesfront
+ 		segments=numpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]
+ 		#Find all nodes for these segments and spc them
+-		pos=md.mesh.segments[segments,0:-1]
++		pos=md.mesh.segments[segments,0:-1]-1
+ 	else:
+ 		pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+-	md.stressbalance.spcvx[pos[:]-1]=0
+-	md.stressbalance.spcvy[pos[:]-1]=0
+-	md.stressbalance.spcvz[pos[:]-1]=0
++	md.stressbalance.spcvx[pos[:]]=0
++	md.stressbalance.spcvy[pos[:]]=0
++	md.stressbalance.spcvz[pos[:]]=0
+ 																													   
+-	if md.mesh.dimension==2:
+-		numbernodesfront=2
+-	else:
+-		numbernodesfront=4
+-	if any(md.mask.icelevelset<=0):
+-		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]-1]
+-		segmentsfront=1-values
+-		numpy.sum(segmentsfront,axis=1)!=numbernodesfront
+-		segments=numpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]
+-		print segments
+-		#Find all nodes for these segments and spc them
+-		pos=md.mesh.segments[segments,0:-1]
+-		print pos
+-	else:
+-		pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+-	md.stressbalance.spcvx[pos[:]-1]=0
+-	md.stressbalance.spcvy[pos[:]-1]=0
+-	md.stressbalance.spcvz[pos[:]-1]=0
+-
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+ 		#reshape to rank-2 if necessary to match spc arrays
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15815)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15816)
+@@ -60,12 +60,12 @@
+ 		numpy.sum(segmentsfront,axis=1)!=numbernodesfront
+ 		segments=numpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]
+ 		#Find all nodes for these segments and spc them
+-		pos=md.mesh.segments[segments,0:-1]
++		pos=md.mesh.segments[segments,0:-1]-1
+ 	else:
+ 		pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+-	md.stressbalance.spcvx[pos[:]-1]=0
+-	md.stressbalance.spcvy[pos[:]-1]=0
+-	md.stressbalance.spcvz[pos[:]-1]=0
++	md.stressbalance.spcvx[pos[:]]=0
++	md.stressbalance.spcvy[pos[:]]=0
++	md.stressbalance.spcvz[pos[:]]=0
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
Index: /issm/oecreview/Archive/15392-16133/ISSM-15816-15817.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15816-15817.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15816-15817.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/inversions/misfit.m
+===================================================================
+--- ../trunk-jpl/src/m/inversions/misfit.m	(revision 15816)
++++ ../trunk-jpl/src/m/inversions/misfit.m	(revision 15817)
+@@ -12,8 +12,10 @@
+ 	elements=md.mesh.elements;
+ 	x=md.mesh.x;
+ 	y=md.mesh.y;
+-	vx=md.initialization.vx;
+-	vy=md.initialization.vy;
++	%vx=md.initialization.vx;
++	%vy=md.initialization.vy;
++	vx=md.results.StressbalanceSolution.Vx;
++	vy=md.results.StressbalanceSolution.Vy;
+ 	vx_obs=md.inversion.vx_obs;
+ 	vy_obs=md.inversion.vy_obs;
+ else
Index: /issm/oecreview/Archive/15392-16133/ISSM-15817-15818.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15817-15818.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15817-15818.diff	(revision 16134)
@@ -0,0 +1,222 @@
+Index: ../trunk-jpl/test/NightlyRun/test225.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.py	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test225.py	(revision 15818)
+@@ -24,7 +24,7 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
+ field_tolerances=[\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
+-	2e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
++	2e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
+ 	1e-08,1e-08,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test422.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.py	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test422.py	(revision 15818)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
++field_tolerances=[1e-08,1e-09,1e-06,1e-09,1e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 15818)
+@@ -3,7 +3,8 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
++md.verbose=verbose('all');
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test429.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test429.m	(revision 15818)
+@@ -10,7 +10,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={2e-09,1e-09,1e-09,1e-09,1e-09};
++field_tolerances={2e-06,1e-06,1e-06,1e-06,1e-06};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test429.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.py	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test429.py	(revision 15818)
+@@ -20,7 +20,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[2e-09,2e-09,1e-09,2e-09,1e-09]
++field_tolerances=[2e-06,2e-06,1e-06,2e-06,1e-06]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 15818)
+@@ -2,7 +2,8 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
++md.debug.valgrind=1;
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 15818)
+@@ -3,13 +3,14 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
+ md.stressbalance.reltol=0.4;
++md.verbose=verbose('all');
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-09,1e-09,2e-06,1e-09,5e-09};
++field_tolerances={1e-08,1e-08,2e-06,1e-08,5e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test202.m	(revision 15818)
+@@ -3,7 +3,8 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
++md.debug.valgrind=1;
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 15818)
+@@ -1,6 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
++error
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 15818)
+@@ -19,7 +19,7 @@
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
+ field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,\
+-						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,1e-08]
++						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,2e-08]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 15818)
+@@ -24,7 +24,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-10,2e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06};
++field_tolerances={2e-10,2e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06};
+ field_values={...
+ 	(md.results.SteadystateSolution.Gradient1),...
+ 	md.results.SteadystateSolution.J,...
+Index: ../trunk-jpl/test/NightlyRun/test203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test203.m	(revision 15818)
+@@ -3,7 +3,8 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
++md.debug.valgrind=1;
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 15818)
+@@ -3,8 +3,9 @@
+ md=parameterize(md,'../Par/SquareShelf2.par');
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
+ md.stressbalance.viscosity_overshoot=0;
++md.debug.valgrind=1;
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 15818)
+@@ -3,7 +3,8 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'FS','all');
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
++md.debug.valgrind=1;
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 15818)
+@@ -10,7 +10,7 @@
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
+ field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,2e-12,1e-11,1e-12,1e-09,...
+-						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,r21e-08};
++						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,2e-08};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 15817)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 15818)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-08,2e-09,2e-05,1e-09,2e-09]
++field_tolerances=[1e-08,2e-09,2e-05,2e-09,2e-09]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15818-15819.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15818-15819.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15818-15819.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 15818)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 15819)
+@@ -1,8 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-error
+-md=extrude(md,3,2.);
++vn d=extrude(md,3,2.);
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
Index: /issm/oecreview/Archive/15392-16133/ISSM-15819-15820.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15819-15820.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15819-15820.diff	(revision 16134)
@@ -0,0 +1,100 @@
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 15819)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 15820)
+@@ -3,8 +3,7 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','HO');
+-md.cluster=generic('name',oshostname(),'np',1);
+-md.verbose=verbose('all');
++md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 15819)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 15820)
+@@ -2,8 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',1);
+-md.debug.valgrind=1;
++md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 15819)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 15820)
+@@ -3,9 +3,8 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+-md.cluster=generic('name',oshostname(),'np',1);
++md.cluster=generic('name',oshostname(),'np',3);
+ md.stressbalance.reltol=0.4;
+-md.verbose=verbose('all');
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.m	(revision 15819)
++++ ../trunk-jpl/test/NightlyRun/test202.m	(revision 15820)
+@@ -3,8 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',1);
+-md.debug.valgrind=1;
++md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.m	(revision 15819)
++++ ../trunk-jpl/test/NightlyRun/test203.m	(revision 15820)
+@@ -3,8 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+-md.cluster=generic('name',oshostname(),'np',1);
+-md.debug.valgrind=1;
++md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 15819)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 15820)
+@@ -3,9 +3,8 @@
+ md=parameterize(md,'../Par/SquareShelf2.par');
+ md=extrude(md,2,1.);
+ md=setflowequation(md,'FS','../Exp/SquareHalfRight.exp','fill','SSA');
+-md.cluster=generic('name',oshostname(),'np',1);
++md.cluster=generic('name',oshostname(),'np',3);
+ md.stressbalance.viscosity_overshoot=0;
+-md.debug.valgrind=1;
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 15819)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 15820)
+@@ -3,8 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'FS','all');
+-md.cluster=generic('name',oshostname(),'np',1);
+-md.debug.valgrind=1;
++md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/15392-16133/ISSM-15820-15821.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15820-15821.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15820-15821.diff	(revision 16134)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/externalpackages/adolc/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install.sh	(revision 15820)
++++ ../trunk-jpl/externalpackages/adolc/install.sh	(revision 15821)
+@@ -11,7 +11,8 @@
+ cd src
+ 
+ autoreconf -f -i 
+-./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install \
++	--libdir=$ISSM_DIR/externalpackages/adolc/install/lib 
+ 
+ if [ $# -eq 0 ]; then
+ 	make V=1
+Index: ../trunk-jpl/externalpackages/adolc/update-existing.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/update-existing.sh	(revision 15820)
++++ ../trunk-jpl/externalpackages/adolc/update-existing.sh	(revision 15821)
+@@ -18,7 +18,8 @@
+ #git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
+ 
+ autoreconf -f -i 
+-./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install \
++	--libdir=$ISSM_DIR/externalpackages/adolc/install/lib 
+ 
+ if [ $# -eq 0 ]; then
+ 	make
Index: /issm/oecreview/Archive/15392-16133/ISSM-15821-15822.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15821-15822.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15821-15822.diff	(revision 16134)
@@ -0,0 +1,248 @@
+Index: ../trunk-jpl/scripts/errlog_process.sh
+===================================================================
+--- ../trunk-jpl/scripts/errlog_process.sh	(revision 15821)
++++ ../trunk-jpl/scripts/errlog_process.sh	(revision 15822)
+@@ -1,8 +0,0 @@
+-#!/bin/bash
+-
+-#first get rank we want to keep.
+-rank=`cat $1 | awk 'NR==1' | sed 's/==/ /'g | awk '{printf("%s\n",$1);}'`
+-
+-#now only keep lines with this rank
+-cat $1 | grep "==$rank==" > $1.bak
+-mv $1.bak $1
+Index: ../trunk-jpl/scripts/dailyrun.sh
+===================================================================
+--- ../trunk-jpl/scripts/dailyrun.sh	(revision 15821)
++++ ../trunk-jpl/scripts/dailyrun.sh	(revision 15822)
+@@ -1,164 +0,0 @@
+-#!/bin/bash
+-#This bash script calls the dailyrun.m matlab file to run our daily test decks. 
+-#It then processes the results and sends an email to the Ice developpers.
+-
+-#Hard coded options
+-NUMCPUS_RUN=7
+-NROPTIONS=""
+-
+-#some functions
+-function timer() #{{{1
+-{
+-	if [[ $# -eq 0 ]]; then
+-		echo $(date '+%s')
+-	else
+-		local  stime=$1
+-		etime=$(date '+%s')
+-
+-		if [[ -z "$stime" ]]; then stime=$etime; fi
+-
+-		dt=$((etime - stime))
+-		ds=$((dt % 60))
+-		dm=$(((dt / 60) % 60))
+-		dh=$((dt / 3600))
+-		printf '%d:%02d:%02d' $dh $dm $ds
+-	fi
+-} #}}}
+-function todaydate() #{{{1
+-{
+-	suffix=`date | awk '{printf("%s-%s-%s  %s",$2,$3,$6,$4);}'`			 
+-	echo $suffix;			 
+-} #}}}
+-function host_name() #{{{1
+-{
+-	#return host name depending on the OS
+-	if [ "$1" = "winxp32" ] 
+-	then
+-		HOST_NAME=`hostname`;
+-	else
+-		HOST_NAME=`hostname -s`;
+-	fi
+-	echo $HOST_NAME;
+-} #}}}
+-
+-#Get configuration
+-#Initialize variables {{{1
+-TODAY=$(todaydate);
+-HOST_NAME=$(host_name $OS);
+-START_TIME=$(timer);
+-ISSM_RELEASE="N/A"
+-USER=$(whoami);
+-INIT_PATH=$(pwd);
+-#}}}
+-
+-#Prepare run
+-#Windows hack for startup.m {{{1
+-#windows environments: ISSM_DIR_WIN variable not correctly picked up when using 
+-#the cron job. just get startup to take the ISSM_DIR variable as the pwd:
+-if [ "$OS" = "winxp32" ]
+-then
+-	cat startup.m | sed 's/clear status/clear status; ISSM_DIR=pwd;/g' > startup.m.bak
+-	mv startup.m.bak startup.m
+-fi
+-#}}}
+-#create softlink to startup {{{1
+-cd $ISSM_DIR/test/NightlyRun/
+-ln -s $ISSM_DIR/startup.m .
+-#}}}
+-#Create dailylog directory and info.log {{{1
+-#put installation elapsed time in info.log
+-INSTALL_TIME=$(timer)
+-ELAPSED_INSTALL=$(timer $START_TIME)
+-rm -rf $ISSM_DIR/dailylog
+-mkdir  $ISSM_DIR/dailylog
+-cat << END > $ISSM_DIR/dailylog/info.log
+-today:     $(echo $TODAY)
+-user:      $(echo $USER)
+-host:      $(echo $HOST_NAME)
+-OS:        N/A
+-release:   N/A
+-init_path: $(echo $INIT_PATH)
+-elapsed_install: $(echo $ELAPSED_INSTALL)
+-END
+-#}}}
+-#check NUMCPUS_RUN options {{{1
+-if [ "$NUMCPUS_RUN" = "" ]
+-then
+-	echo "NUMCPUS_RUN option not found, defaulting to NUMCPUS_RUN = 1"
+-	NUMCPUS_RUN=1
+-fi
+-#}}}
+-
+-#Run tests
+-#Launch all tests on different cpus {{{1
+-for (( i=1;i<=$NUMCPUS_RUN;i++ ))
+-do
+-	#Launch matlab and the daily run script
+-	cat > $ISSM_DIR/dailylog/matlab_run$i.m << EOF
+-	warning off %necessary to avoid a info.log of several Go for parallel runs
+-	try,
+-	cd $ISSM_DIR/test/NightlyRun
+-	startup;
+-	$(if [ "$NROPTIONS" = ""  ]
+-	then
+-		echo "runme('output','daily','rank',$i,'numprocs',$NUMCPUS_RUN);"
+-	else
+-		echo "runme($NROPTIONS,'output','daily','rank',$i,'numprocs',$NUMCPUS_RUN);"
+-	fi
+-	)
+-	catch me,
+-		%An error occured, get report and exit
+-		directory=strsplit(pwd,'/');
+-		message=getReport(me)
+-		fid=fopen([ISSM_DIR '/dailylog/matlaberror.log'], 'at');
+-		fprintf(fid,'\nMatlab error occured in: %s\n\n',directory{end});
+-		fprintf(fid,'%s',message);
+-		fclose(fid);
+-	end
+-	disp('MATLABEXITEDCORRECTLY');
+-	exit
+-EOF
+-
+-	#Start run from dailylog directory
+-	cd $ISSM_DIR/dailylog/
+-
+-	#Start test
+-	MATLAB_VERSION="7.6" #7.2,7.4,7.6 and 7.8
+-	/usr/local/pkgs/matlab-$MATLAB_VERSION/bin/matlab  -nojvm -nosplash  -r matlab_run$i -logfile matlab_log$i.log &
+-done
+-
+-#wait until matlab closes
+-wait
+-#}}}
+-#concatenate all reports {{{1
+-cd $ISSM_DIR/dailylog/
+-mv matlab_log1.log  matlab_log.log
+-for (( i=2;i<=$NUMCPUS_RUN;i++ ))
+-do
+-	cat matlab_log.log matlab_log$i.log > matlab_log.log.bak
+-	mv matlab_log.log.bak matlab_log.log
+-done
+-#}}}
+-#Complete info.log {{{1
+-if [ $(cat matlab_log.log | grep "MATLABEXITEDCORRECTLY" | wc -l) -eq $NUMCPUS_RUN ]
+-then
+-	MATLABCRASH=0
+-else
+-	MATLABCRASH=1
+-fi
+-ELAPSED_RUN=$(timer $INSTALL_TIME)
+-ELAPSED_TOTAL=$(timer $START_TIME)
+-cat << END >>  $ISSM_DIR/dailylog/info.log
+-elapsed_run:   $(echo $ELAPSED_RUN)
+-elapsed_total: $(echo $ELAPSED_TOTAL)
+-matlab_crash:  $(echo $MATLABCRASH)
+-END
+-#}}}
+-
+-#Send Report
+-#Build html report {{{1
+-cd $ISSM_DIR/dailylog/
+-sh ../scripts/report.sh
+-ln -s $ISSM_DIR/dailylog/report.html $INIT_PATH
+-echo "html report located in $ISSM_DIR/dailylog/report.html and $INIT_PATH/report.html"
+-#}}}
+Index: ../trunk-jpl/scripts/issm_webpdf.sh
+===================================================================
+--- ../trunk-jpl/scripts/issm_webpdf.sh	(revision 15821)
++++ ../trunk-jpl/scripts/issm_webpdf.sh	(revision 15822)
+@@ -1,27 +0,0 @@
+-#!/bin/bash
+-
+-# issm_webpdf.sh
+-# convert http://issm/ to issm_web.pdf
+-
+-# Created by gqwang Thu May 12 13:40:08 PDT 2011
+-
+-PATH=/usr/bin:/bin:/usr/sbin:/sbin
+-
+-# 1. Download html
+-cd /proj/ice/gqwang/
+-rm -rf issm.jpl.nasa.gov || exit 1
+-wget -r http://issm.jpl.nasa.gov/
+-
+-# 2. Convert to pdf
+-cd issm.jpl.nasa.gov
+-a=`find . -name "*.html"`
+-for html in $a; do
+-   pdf=`echo $html | sed -e '1,1s/\.html/\.pdf/'`
+-   echo /usr/bin/wkhtmltopdf $html $pdf
+-done
+-
+-# 3. Merge into one pdf
+-
+-mkdir pdf
+-find . -name "*.pdf" -exec mv {} pdf \;
+-gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=issm_web.pdf pdf/*.pdf
+Index: ../trunk-jpl/scripts/tai
+===================================================================
+--- ../trunk-jpl/scripts/tai	(revision 15821)
++++ ../trunk-jpl/scripts/tai	(revision 15822)
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-if [ ! -z $EXECUTION_DIR ];
++if [ -z $EXECUTION_DIR ];
+ then
+ 	EXECUTION_DIR=$ISSM_DIR/execution
+ fi
+Index: ../trunk-jpl/scripts/vie
+===================================================================
+--- ../trunk-jpl/scripts/vie	(revision 15821)
++++ ../trunk-jpl/scripts/vie	(revision 15822)
+@@ -1,6 +1,6 @@
+ #!/bin/bash
+ 
+-if [ ! -z $EXECUTION_DIR ];
++if [ -z "$EXECUTION_DIR" ];
+ then
+ 	EXECUTION_DIR=$ISSM_DIR/execution
+ fi
+Index: ../trunk-jpl/scripts/vil
+===================================================================
+--- ../trunk-jpl/scripts/vil	(revision 15821)
++++ ../trunk-jpl/scripts/vil	(revision 15822)
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-if [ ! -z $EXECUTION_DIR ];
++if [ -z $EXECUTION_DIR ];
+ then
+ 	EXECUTION_DIR=$ISSM_DIR/execution
+ fi
Index: /issm/oecreview/Archive/15392-16133/ISSM-15822-15823.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15822-15823.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15822-15823.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/classes/matice.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/matice.m	(revision 15822)
++++ ../trunk-jpl/src/m/classes/matice.m	(revision 15823)
+@@ -99,7 +99,7 @@
+ 			md = checkfield(md,'materials.mu_water','>',0);
+ 			md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
+-			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius'});
++			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
+ 
+ 			if ismember(GiaAnalysisEnum(),analyses),
+ 				md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',1);
+@@ -125,7 +125,7 @@
+ 			fielddisplay(obj,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
+ 			fielddisplay(obj,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+ 			fielddisplay(obj,'rheology_n','Glen''s flow law exponent');
+-			fielddisplay(obj,'rheology_law','law for the temperature dependance of the rheology: ''None'', ''Paterson'' or ''Arrhenius''');
++			fielddisplay(obj,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Paterson'',  ''Arrhenius'' or ''LliboutryDuval''']);
+ 			fielddisplay(obj,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
+ 			fielddisplay(obj,'lithosphere_density','Lithosphere density [g/cm^-3]');
+ 			fielddisplay(obj,'mantle_shear_modulus','Mantle shear modulus [Pa]');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15823-15824.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15823-15824.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15823-15824.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/classes/matice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matice.py	(revision 15823)
++++ ../trunk-jpl/src/m/classes/matice.py	(revision 15824)
+@@ -52,7 +52,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"rheology_n","Glen's flow law exponent"))
+-		string="%s\n%s"%(string,fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson' or 'Arrhenius'"))
++		string="%s\n%s"%(string,fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson', 'Arrhenius' or 'LliboutryDuval'"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"lithosphere_shear_modulus","Lithosphere shear modulus [Pa]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"lithosphere_density","Lithosphere density [g/cm^-3]"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"mantle_shear_modulus","Mantle shear modulus [Pa]"))
+@@ -113,7 +113,7 @@
+ 		md = checkfield(md,'materials.mu_water','>',0)
+ 		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
+-		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius'])
++		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius','LliboutryDuval'])
+ 		md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.lithosphere_density','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.mantle_shear_modulus','>',0,'numel',[1]);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15824-15825.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15824-15825.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15824-15825.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/classes/matdamageice.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.m	(revision 15824)
++++ ../trunk-jpl/src/m/classes/matdamageice.m	(revision 15825)
+@@ -101,7 +101,7 @@
+ 			md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
+ 			md = checkfield(md,'materials.rheology_Z','>',0,'size',[md.mesh.numberofvertices 1]);
+-			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius'});
++			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
+ 
+ 			if ismember(GiaAnalysisEnum(),analyses),
+ 				md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',1);
+@@ -128,7 +128,7 @@
+ 			fielddisplay(obj,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+ 			fielddisplay(obj,'rheology_n','Glen''s flow law exponent');
+ 			fielddisplay(obj,'rheology_Z','rheology multiplier');
+-			fielddisplay(obj,'rheology_law','law for the temperature dependance of the rheology: ''None'', ''Paterson'' or ''Arrhenius''');
++			fielddisplay(obj,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
+ 			fielddisplay(obj,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
+ 			fielddisplay(obj,'lithosphere_density','Lithosphere density [g/cm^-3]');
+ 			fielddisplay(obj,'mantle_shear_modulus','Mantle shear modulus [Pa]');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15825-15826.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15825-15826.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15825-15826.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/classes/matdamageice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.py	(revision 15825)
++++ ../trunk-jpl/src/m/classes/matdamageice.py	(revision 15826)
+@@ -58,7 +58,7 @@
+ 		s+="%s\n" % fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]")
+ 		s+="%s\n" % fielddisplay(self,"rheology_n","Glen's flow law exponent")
+ 		s+="%s\n" % fielddisplay(self,"rheology_Z","rheology multiplier")
+-		s+="%s\n" % fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson' or 'Arrhenius'")
++		s+="%s\n" % fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson', 'Arrhenius' or 'LliboutryDuval'")
+ 		s+="%s\n" % fielddisplay(self,"lithosphere_shear_modulus","Lithosphere shear modulus [Pa]")
+ 		s+="%s\n" % fielddisplay(self,"lithosphere_density","Lithosphere density [g/cm^-3]")
+ 		s+="%s\n" % fielddisplay(self,"mantle_shear_modulus","Mantle shear modulus [Pa]")
+@@ -119,7 +119,7 @@
+ 		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices,1])
+ 		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements,1])
+ 		md = checkfield(md,'materials.rheology_Z','>',0,'size',[md.mesh.numberofvertices,1])
+-		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius'])
++		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius','LliboutryDuval'])
+ 		md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.lithosphere_density','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.mantle_shear_modulus','>',0,'numel',[1]);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15826-15827.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15826-15827.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15826-15827.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15826)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15827)
+@@ -616,6 +616,7 @@
+ 	/*Rheology law (move too Material) {{{*/
+ 	PatersonEnum,
+ 	ArrheniusEnum,
++	LliboutryDuvalEnum,
+ 	/*}}}*/
+ 	MaximumNumberOfDefinitionsEnum
+ };
Index: /issm/oecreview/Archive/15392-16133/ISSM-15827-15828.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15827-15828.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15827-15828.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/enum/LliboutryDuvalEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/LliboutryDuvalEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/LliboutryDuvalEnum.m	(revision 15828)
+@@ -0,0 +1,11 @@
++function macro=LliboutryDuvalEnum()
++%LLIBOUTRYDUVALENUM - Enum of LliboutryDuval
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=LliboutryDuvalEnum()
++
++macro=StringToEnum('LliboutryDuval');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15828-15829.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15828-15829.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15828-15829.diff	(revision 16134)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15828)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15829)
+@@ -578,4 +578,5 @@
+ def OptionLogicalEnum(): return StringToEnum("OptionLogical")[0]
+ def PatersonEnum(): return StringToEnum("Paterson")[0]
+ def ArrheniusEnum(): return StringToEnum("Arrhenius")[0]
++def LliboutryDuvalEnum(): return StringToEnum("LliboutryDuval")[0]
+ def MaximumNumberOfDefinitionsEnum(): return StringToEnum("MaximumNumberOfDefinitions")[0]
Index: /issm/oecreview/Archive/15392-16133/ISSM-15829-15830.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15829-15830.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15829-15830.diff	(revision 16134)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/src/m/mech/strainrateuncert.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/strainrateuncert.m	(revision 15829)
++++ ../trunk-jpl/src/m/mech/strainrateuncert.m	(revision 15830)
+@@ -5,8 +5,8 @@
+ %	 components given the uncertainty in surface velocity data.
+ %   The results are stored in md.results
+ %
+-%	 'dvx' and 'dvy' are velocity errors in x and y components.  These 
+-%	 can either be scalars or arrays of length md.mesh.numberofvertices
++%	 'dvx' and 'dvy' are velocity errors in x and y components in m/yr.  
++%   These can either be scalars or arrays of length md.mesh.numberofvertices
+ %
+ %   Usage:
+ %      md=strainrateuncert(md,vx,vy,dv)
+@@ -41,25 +41,27 @@
+ %initialization
+ index=md.mesh.elements;
+ summation=[1;1;1];
++dvxlist=dvx(index);
++dvylist=dvy(index);
+ 
+ %compute nodal functions coefficients N(x,y)=alpha x + beta y +gamma
+ [alpha beta]=GetNodalFunctionsCoeff(index,md.mesh.x,md.mesh.y);
+ 
+ strainrateuncert=struct('xx',[],'yy',[],'xy',[],'principalvalue1',[],'principalvalue2',[],'effectivevalue',[]);
+ 
+-strainrateuncert.xx=dvx.*sqrt(alpha.^2*summation);
+-strainrateuncert.yy=dvy.*sqrt(beta.^2*summation);
+-strainrateuncert.xy=0.5*sqrt(dvx.^2.*(beta.^2*summation)+dvy.^2.*(alpha.^2*summation));
++strainrateuncert.xx=sqrt((dvxlist.*alpha).^2*summation);
++strainrateuncert.yy=sqrt((dvylist.*beta).^2*summation);
++strainrateuncert.xy=0.5*sqrt((dvxlist.*beta).^2*summation+(dvylist.*alpha).^2*summation);
+ 
+-exx=md.results.strainrate.xx;
++exx=md.results.strainrate.xx; 
+ eyy=md.results.strainrate.yy;
+ exy=md.results.strainrate.xy;
+-p1a=strainrateuncert.xx.*(0.5+0.25*(0.5*((exx-eyy)/2).^2+exy.^2).^(-1./2).*(exx-eyy));
+-p2a=strainrateuncert.yy.*(0.5-0.25*(0.5*((exx-eyy)/2).^2+exy.^2).^(-1./2).*(exx-eyy));
+-p3a=strainrateuncert.xy.*(((exx-eyy)/2).^(2)+exy.^2).^(-1./2).*exy;
+-p1b=strainrateuncert.xx.*(0.5-0.25*(0.5*((exx-eyy)/2).^2+exy.^2).^(-1./2).*(exx-eyy));
+-p2b=strainrateuncert.yy.*(0.5+0.25*(0.5*((exx-eyy)/2).^2+exy.^2).^(-1./2).*(exx-eyy));
+-p3b=strainrateuncert.xy.*(-(((exx-eyy)/2).^(2)+exy.^2).^(-1./2).*exy);
++p1a=strainrateuncert.xx.*(0.5+0.25*(((exx-eyy)/2).^2+exy.^2).^(-1./2).*(exx-eyy));
++p2a=strainrateuncert.yy.*(0.5-0.25*(((exx-eyy)/2).^2+exy.^2).^(-1./2).*(exx-eyy));
++p3a=strainrateuncert.xy.*((((exx-eyy)/2).^2+exy.^2).^(-1./2).*exy);
++p1b=strainrateuncert.xx.*(0.5-0.25*(((exx-eyy)/2).^2+exy.^2).^(-1./2).*(exx-eyy));
++p2b=strainrateuncert.yy.*(0.5+0.25*(((exx-eyy)/2).^2+exy.^2).^(-1./2).*(exx-eyy));
++p3b=strainrateuncert.xy.*(-(((exx-eyy)/2).^2+exy.^2).^(-1./2).*exy);
+ strainrateuncert.principalvalue1=sqrt(p1a.^2+p2a.^2+p3a.^2);
+ strainrateuncert.principalvalue2=sqrt(p1b.^2+p2b.^2+p3b.^2);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15830-15831.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15830-15831.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15830-15831.diff	(revision 16134)
@@ -0,0 +1,72 @@
+Index: ../trunk-jpl/src/m/mech/steadystateiceshelftemp.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/steadystateiceshelftemp.m	(revision 0)
++++ ../trunk-jpl/src/m/mech/steadystateiceshelftemp.m	(revision 15831)
+@@ -0,0 +1,60 @@
++function temperature=steadystateiceshelftemp(md,surfacetemp,basaltemp)
++%STEADYSTATEICESHELFTEMP - compute depth-averaged steady-state temperature of an ice shelf 
++%
++%   This routine computes the depth-averaged temperature accounting for vertical advection 
++%   and diffusion of heat into the base of the ice shelf as a function of surface and 
++%   basal temperature and the basal melting rate.  Horizontal advection is ignored.
++%   The solution is a depth-averaged version of Equation 25 in Holland and Jenkins (1999).
++%
++%	 In addition to supplying md, the surface and basal temperatures of the ice shelf must
++%	 be supplied in degrees Kelvin.
++%
++%	 The model md must also contain the fields: 
++%	 md.geometry.thickness
++%	 md.basalforcings.melting_rate (positive for melting, negative for freezing)
++
++%   Usage:
++%      temperature=steadystateiceshelftemp(md,surfacetemp,basaltemp)
++
++if (length(md.geometry.thickness)~=md.mesh.numberofvertices)
++	error(['steadystateiceshelftemp error message: thickness should have a length of ' num2str(md.mesh.numberofvertices)])
++end
++
++%surface and basal temperatures in degrees C
++if (length(surfacetemp)~=md.mesh.numberofvertices)
++	error(['steadystateiceshelftemp error message: surfacetemp should have a length of ' num2str(md.mesh.numberofvertices)])
++end
++
++if (length(basaltemp)~=md.mesh.numberofvertices)
++	error(['steadystateiceshelftemp error message: basaltemp should have a length of ' num2str(md.mesh.numberofvertices)])
++end
++
++% Convert temps to Celsius for Holland and Jenkins (1999) equation
++Ts=-273.15+surfacetemp;
++Tb=-273.15+basaltemp;
++
++Hi=md.geometry.thickness;
++ki=1.14e-6*md.constants.yts; % ice shelf thermal diffusivity from Holland and Jenkins (1999) converted to m^2/yr 
++
++%vertical velocity of ice shelf, calculated from melting rate 
++wi=md.materials.rho_water/md.materials.rho_ice.*md.basalforcings.melting_rate; 
++
++%temperature profile is linear if melting rate is zero, depth-averaged temp is simple average in this case
++temperature=(Ts+Tb)/2;  % where wi~=0
++
++pos=find(abs(wi)>=1e-4); % to avoid division by zero
++
++%calculate depth-averaged temperature (in Celsius)
++temperature(pos)=-( (Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos) - (Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos)).*exp(Hi(pos).*wi(pos)/ki) )./( Hi(pos).*(exp(Hi(pos).*wi(pos)/ki)-1));
++%temperature(pos)=-( ((Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos))./exp(Hi(pos).*wi(pos)/ki) - Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos))./( Hi(pos).*(1-exp(-Hi(pos).*wi(pos)/ki)));
++
++%temperature should not be less than surface temp
++pos=find(temperature<Ts);
++temperature(pos)=Ts(pos);
++
++% NaN where melt rates are too high (infinity/infinity in exponential)
++pos=find(isnan(temperature));
++temperature(pos)=Ts(pos);
++
++%convert to Kelvin
++temperature=temperature+273.15;
+
+Property changes on: ../trunk-jpl/src/m/mech/steadystateiceshelftemp.m
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15831-15832.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15831-15832.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15831-15832.diff	(revision 16134)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/src/m/mech/steadystateiceshelftemp.py
+===================================================================
+--- ../trunk-jpl/src/m/mech/steadystateiceshelftemp.py	(revision 0)
++++ ../trunk-jpl/src/m/mech/steadystateiceshelftemp.py	(revision 15832)
+@@ -0,0 +1,65 @@
++import numpy as npy
++
++def steadystateiceshelftemp(md,surfacetemp,basaltemp):
++	"""
++	Compute the depth-averaged steady-state temperature of an ice shelf 
++	This routine computes the depth-averaged temperature accounting for vertical advection 
++	and diffusion of heat into the base of the ice shelf as a function of surface and basal 
++	temperature and the basal melting rate.  Horizontal advection is ignored.
++   The solution is a depth-averaged version of Equation 25 in Holland and Jenkins (1999).
++
++	In addition to supplying md, the surface and basal temperatures of the ice shelf must be supplied in degrees Kelvin.
++
++	The model md must also contain the fields: 
++	md.geometry.thickness
++	md.basalforcings.melting_rate (positive for melting, negative for freezing)
++
++   Usage:
++      temperature=steadystateiceshelftemp(md,surfacetemp,basaltemp)
++	"""
++
++	if len(md.geometry.thickness)!=md.mesh.numberofvertices:
++		raise ValueError('steadystateiceshelftemp error message: thickness should have a length of ' + md.mesh.numberofvertices)
++	
++	#surface and basal temperatures in degrees C
++	if len(surfacetemp)!=md.mesh.numberofvertices:
++		raise ValueError('steadystateiceshelftemp error message: surfacetemp should have a length of ' + md.mesh.numberofvertices)
++	
++	if len(basaltemp)!=md.mesh.numberofvertices:
++		raise ValueError('steadystateiceshelftemp error message: basaltemp should have a length of ' +md.mesh.numberofvertices)
++	
++	# Convert temps to Celsius for Holland and Jenkins (1999) equation
++	Ts=-273.15+surfacetemp
++	Tb=-273.15+basaltemp
++	
++	Hi=md.geometry.thickness
++	ki=1.14e-6*md.constants.yts # ice shelf thermal diffusivity from Holland and Jenkins (1999) converted to m^2/yr 
++	
++	#vertical velocity of ice shelf, calculated from melting rate 
++	wi=md.materials.rho_water/md.materials.rho_ice*md.basalforcings.melting_rate 
++	
++	#temperature profile is linear if melting rate is zero, depth-averaged temp is simple average in this case
++	temperature=(Ts+Tb)/2  # where wi~=0
++	
++	pos=npy.nonzero(abs(wi)>=1e-4) # to avoid division by zero
++
++	npy.seterr(over='raise',divide='raise') # raise errors if floating point exceptions are encountered in following calculation
++	#calculate depth-averaged temperature (in Celsius)
++	try:
++		temperature[pos]=-( (Tb[pos]-Ts[pos])*ki/wi[pos] + Hi[pos]*Tb[pos] - (Hi[pos]*Ts[pos] + (Tb[pos]-Ts[pos])*ki/wi[pos])*npy.exp(Hi[pos]*wi[pos]/ki) )/( Hi[pos]*(npy.exp(Hi[pos]*wi[pos]/ki)-1))
++	except FloatingPointError:
++		print 'steadystateiceshelf warning: overflow encountered in multipy/divide/exp, trying another formulation.' 
++		temperature[pos]=-( ((Tb[pos]-Ts[pos])*ki/wi[pos] + Hi[pos]*Tb[pos])/npy.exp(Hi[pos]*wi[pos]/ki) - Hi[pos]*Ts[pos] + (Tb[pos]-Ts[pos])*ki/wi[pos])/( Hi[pos]*(1-npy.exp(-Hi[pos]*wi[pos]/ki)))
++	
++	#temperature should not be less than surface temp
++	pos=npy.nonzero(temperature<Ts)
++	temperature[pos]=Ts[pos]
++	
++	# NaN where melt rates are too high (infinity/infinity in exponential)
++	pos=npy.nonzero(npy.isnan(temperature))
++	temperature[pos]=Ts[pos]
++	
++	#convert to Kelvin
++	temperature=temperature+273.15
++
++	return temperature
+Index: ../trunk-jpl/src/m/mech/steadystateiceshelftemp.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/steadystateiceshelftemp.m	(revision 15831)
++++ ../trunk-jpl/src/m/mech/steadystateiceshelftemp.m	(revision 15832)
+@@ -45,8 +45,8 @@
+ pos=find(abs(wi)>=1e-4); % to avoid division by zero
+ 
+ %calculate depth-averaged temperature (in Celsius)
+-temperature(pos)=-( (Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos) - (Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos)).*exp(Hi(pos).*wi(pos)/ki) )./( Hi(pos).*(exp(Hi(pos).*wi(pos)/ki)-1));
+-%temperature(pos)=-( ((Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos))./exp(Hi(pos).*wi(pos)/ki) - Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos))./( Hi(pos).*(1-exp(-Hi(pos).*wi(pos)/ki)));
++%temperature(pos)=-( (Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos) - (Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos)).*exp(Hi(pos).*wi(pos)/ki) )./( Hi(pos).*(exp(Hi(pos).*wi(pos)/ki)-1));
++temperature(pos)=-( ((Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos))./exp(Hi(pos).*wi(pos)/ki) - Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos))./( Hi(pos).*(1-exp(-Hi(pos).*wi(pos)/ki)));
+ 
+ %temperature should not be less than surface temp
+ pos=find(temperature<Ts);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15832-15833.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15832-15833.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15832-15833.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 15832)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 15833)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-vn d=extrude(md,3,2.);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
Index: /issm/oecreview/Archive/15392-16133/ISSM-15833-15834.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15833-15834.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15833-15834.diff	(revision 16134)
@@ -0,0 +1,431 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp	(revision 15833)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp	(revision 15834)
+@@ -1,45 +0,0 @@
+-/*! \file:  GetOwnershipBoundariesFromRange.cpp
+- *  \brief from a local range on each cpu, we determine what 
+- *  lower row and upper row from a matrix a cpu owns.
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <stdio.h>
+-#include "../../../shared/MemOps/MemOps.h"
+-#include "../../../shared/io/Comm/Comm.h"
+-
+-void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
+-
+-	/*externals :*/
+-	int my_rank;
+-	int num_procs;
+-
+-	/*recover my_rank and num_procs:*/
+-	MPI_Comm_size(comm,&num_procs);
+-	MPI_Comm_rank(comm,&my_rank);
+-
+-	/*output: */
+-	int lower_row,upper_row;
+-
+-	/*Gather all range values into allranges, for all nodes*/
+-	int* allranges=xNew<int>(num_procs);
+-	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
+-
+-	/*From all ranges, get lower row and upper row*/
+-	lower_row=0;
+-	upper_row=lower_row+allranges[0];
+-	for(int i=1;i<=my_rank;i++){
+-		lower_row=lower_row+allranges[i-1];
+-		upper_row=upper_row+allranges[i];
+-	}
+-
+-	/*Assign output*/
+-	*plower_row=lower_row;
+-	*pupper_row=upper_row;
+-	xDelete<int>(allranges);
+-}
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 15833)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 15834)
+@@ -1,58 +0,0 @@
+-/* \file DetermineLocalSize.cpp
+- * \brief: routine to determine local size of a global petsc matrix or vector. 
+- */
+-
+-#include <stdio.h>
+-#include <math.h>
+-#include "../../../shared/shared.h"
+-
+-int DetermineLocalSize(int global_size,COMM comm){
+-
+-	/*output: */
+-	int  local_size;
+-
+-	/*intermediary: */
+-	int  i;
+-	int  row_rest;
+-	int* num_local_rows=NULL;
+-
+-	/*from MPI: */
+-	int num_procs;
+-	int my_rank;
+-
+-	/*recover my_rank*/
+-	MPI_Comm_rank(comm,&my_rank);
+-	MPI_Comm_size(comm,&num_procs);
+-
+-	/* TODO replace the following with ->
+-
+-	local_size=global_size/num_procs; // integer division
+-	if (global_size%num_procs>my_rank) local_size++; // distribute the remainder
+-	return local_size;
+-
+-	<- to here  */
+-
+-	/*We are  not bound by any library, just use what seems most logical*/
+-	num_local_rows=xNew<int>(num_procs);    
+-
+-	for (i=0;i<num_procs;i++){
+-		/*Here, we use floor. We under distribute rows. The rows 
+-		  left  are then redistributed, therefore resulting in a 
+-		  more even distribution.*/
+-		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs); 
+-	}
+-
+-	/*There may be some rows left. Distribute evenly.*/ 
+-	row_rest=global_size - num_procs*(int)floor((double)global_size/(double)num_procs);
+-	for (i=0;i<row_rest;i++){
+-		num_local_rows[i]++;
+-	}
+-	local_size=num_local_rows[my_rank];
+-
+-	/*free ressources: */
+-	xDelete<int>(num_local_rows);
+-
+-	/*return size: */
+-	return local_size;
+-
+-}
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 15833)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 15834)
+@@ -1,16 +0,0 @@
+-/*! \file mpipatches.h
+- *  \brief: prototype header for all ISSM add-ons to MPI
+- */
+-
+-#ifndef MPI_PATCHES_H_ 
+-#define MPI_PATCHES_H_
+-
+-#include "../../../shared/Numerics/types.h" 
+-#include "../../../shared/io/Comm/Comm.h"
+-
+-int DetermineLocalSize(int global_size,COMM comm);
+-int* DetermineRowRankFromLocalSize(int global_size,int localsize,COMM comm);
+-void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm);
+-int DetermineGlobalSize(int local_size,COMM comm);
+-
+-#endif
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineGlobalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineGlobalSize.cpp	(revision 15833)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineGlobalSize.cpp	(revision 15834)
+@@ -1,20 +0,0 @@
+-/* \file DetermineGlobalSize.cpp
+- * \brief: routine to determine global size from local size 
+- */
+-
+-#include <stdio.h>
+-#include <math.h>
+-#include "../../../shared/shared.h"
+-#include "../../../shared/Numerics/types.h"
+-
+-int DetermineGlobalSize(int local_size,COMM comm){
+-
+-	/*output: */
+-	int  global_size;
+-
+-	MPI_Reduce(&local_size, &global_size, 1, MPI_INT, MPI_SUM, 0, comm);
+-	MPI_Bcast(&global_size,1,MPI_INT,0,comm);
+-
+-	return global_size;
+-
+-}
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineRowRankFromLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineRowRankFromLocalSize.cpp	(revision 15833)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineRowRankFromLocalSize.cpp	(revision 15834)
+@@ -1,45 +0,0 @@
+-/* \file DetermineRowRankFromLocalSize.cpp
+- * \brief: routine to determine, from local size of a matrix or vector (in terms of number 
+- * of rows), a vector of global size  which for each row of the matrix or vector, determines
+- * what cpu this row belong to.
+- */
+-
+-#include <stdio.h>
+-#include <math.h>
+-#include "../../../shared/shared.h"
+-#include "../../../shared/Numerics/types.h"
+-
+-int* DetermineRowRankFromLocalSize(int global_size,int localsize,COMM comm){
+-
+-	/*intermediary: */
+-	int i,j;
+-	int my_rank=0;
+-	int num_procs=0;
+-	int lower_row,upper_row;
+-
+-	/*output: */
+-	int* RowRank=NULL;
+-
+-	MPI_Comm_rank(comm,&my_rank);
+-	MPI_Comm_size(comm,&num_procs);
+-
+-	/*allocate: */
+-	RowRank=xNew<int>(global_size);
+-
+-	/*Gather all local_size values into alllocalsizes, for all cpus*/
+-	int* alllocalsizes=xNew<int>(num_procs);
+-	MPI_Allgather(&localsize,1,MPI_INT,alllocalsizes,1,MPI_INT,comm);
+-
+-	/*From all localsizes, get lower row and upper row*/
+-	lower_row=0;
+-	upper_row=lower_row+alllocalsizes[0];
+-	for(j=lower_row;j<upper_row;j++)RowRank[j]=0;
+-
+-	for(i=1;i<num_procs;i++){
+-		lower_row=lower_row+alllocalsizes[i-1];
+-		upper_row=upper_row+alllocalsizes[i];
+-		for(j=lower_row;j<upper_row;j++)RowRank[j]=i;
+-	}
+-
+-	return RowRank;
+-}
+Index: ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h	(revision 15833)
++++ ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h	(revision 15834)
+@@ -17,7 +17,7 @@
+ #include <mpi.h>
+ 
+ /*Patches: */
+-#include "./patches/mpipatches.h"
++#include "./commops/commops.h"
+ #endif
+ 
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp	(revision 15834)
+@@ -0,0 +1,58 @@
++/* \file DetermineLocalSize.cpp
++ * \brief: routine to determine local size of a global petsc matrix or vector. 
++ */
++
++#include <stdio.h>
++#include <math.h>
++#include "../../../shared/shared.h"
++
++int DetermineLocalSize(int global_size,COMM comm){
++
++	/*output: */
++	int  local_size;
++
++	/*intermediary: */
++	int  i;
++	int  row_rest;
++	int* num_local_rows=NULL;
++
++	/*from MPI: */
++	int num_procs;
++	int my_rank;
++
++	/*recover my_rank*/
++	MPI_Comm_rank(comm,&my_rank);
++	MPI_Comm_size(comm,&num_procs);
++
++	/* TODO replace the following with ->
++
++	local_size=global_size/num_procs; // integer division
++	if (global_size%num_procs>my_rank) local_size++; // distribute the remainder
++	return local_size;
++
++	<- to here  */
++
++	/*We are  not bound by any library, just use what seems most logical*/
++	num_local_rows=xNew<int>(num_procs);    
++
++	for (i=0;i<num_procs;i++){
++		/*Here, we use floor. We under distribute rows. The rows 
++		  left  are then redistributed, therefore resulting in a 
++		  more even distribution.*/
++		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs); 
++	}
++
++	/*There may be some rows left. Distribute evenly.*/ 
++	row_rest=global_size - num_procs*(int)floor((double)global_size/(double)num_procs);
++	for (i=0;i<row_rest;i++){
++		num_local_rows[i]++;
++	}
++	local_size=num_local_rows[my_rank];
++
++	/*free ressources: */
++	xDelete<int>(num_local_rows);
++
++	/*return size: */
++	return local_size;
++
++}
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/commops.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/commops.h	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/commops.h	(revision 15834)
+@@ -0,0 +1,16 @@
++/*! \file mpipatches.h
++ *  \brief: prototype header for all ISSM add-ons to MPI
++ */
++
++#ifndef MPI_PATCHES_H_ 
++#define MPI_PATCHES_H_
++
++#include "../../../shared/Numerics/types.h" 
++#include "../../../shared/io/Comm/Comm.h"
++
++int DetermineLocalSize(int global_size,COMM comm);
++int* DetermineRowRankFromLocalSize(int global_size,int localsize,COMM comm);
++void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm);
++int DetermineGlobalSize(int local_size,COMM comm);
++
++#endif
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp	(revision 15834)
+@@ -0,0 +1,20 @@
++/* \file DetermineGlobalSize.cpp
++ * \brief: routine to determine global size from local size 
++ */
++
++#include <stdio.h>
++#include <math.h>
++#include "../../../shared/shared.h"
++#include "../../../shared/Numerics/types.h"
++
++int DetermineGlobalSize(int local_size,COMM comm){
++
++	/*output: */
++	int  global_size;
++
++	MPI_Reduce(&local_size, &global_size, 1, MPI_INT, MPI_SUM, 0, comm);
++	MPI_Bcast(&global_size,1,MPI_INT,0,comm);
++
++	return global_size;
++
++}
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp	(revision 15834)
+@@ -0,0 +1,45 @@
++/* \file DetermineRowRankFromLocalSize.cpp
++ * \brief: routine to determine, from local size of a matrix or vector (in terms of number 
++ * of rows), a vector of global size  which for each row of the matrix or vector, determines
++ * what cpu this row belong to.
++ */
++
++#include <stdio.h>
++#include <math.h>
++#include "../../../shared/shared.h"
++#include "../../../shared/Numerics/types.h"
++
++int* DetermineRowRankFromLocalSize(int global_size,int localsize,COMM comm){
++
++	/*intermediary: */
++	int i,j;
++	int my_rank=0;
++	int num_procs=0;
++	int lower_row,upper_row;
++
++	/*output: */
++	int* RowRank=NULL;
++
++	MPI_Comm_rank(comm,&my_rank);
++	MPI_Comm_size(comm,&num_procs);
++
++	/*allocate: */
++	RowRank=xNew<int>(global_size);
++
++	/*Gather all local_size values into alllocalsizes, for all cpus*/
++	int* alllocalsizes=xNew<int>(num_procs);
++	MPI_Allgather(&localsize,1,MPI_INT,alllocalsizes,1,MPI_INT,comm);
++
++	/*From all localsizes, get lower row and upper row*/
++	lower_row=0;
++	upper_row=lower_row+alllocalsizes[0];
++	for(j=lower_row;j<upper_row;j++)RowRank[j]=0;
++
++	for(i=1;i<num_procs;i++){
++		lower_row=lower_row+alllocalsizes[i-1];
++		upper_row=upper_row+alllocalsizes[i];
++		for(j=lower_row;j<upper_row;j++)RowRank[j]=i;
++	}
++
++	return RowRank;
++}
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp	(revision 15834)
+@@ -0,0 +1,45 @@
++/*! \file:  GetOwnershipBoundariesFromRange.cpp
++ *  \brief from a local range on each cpu, we determine what 
++ *  lower row and upper row from a matrix a cpu owns.
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <stdio.h>
++#include "../../../shared/MemOps/MemOps.h"
++#include "../../../shared/io/Comm/Comm.h"
++
++void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
++
++	/*externals :*/
++	int my_rank;
++	int num_procs;
++
++	/*recover my_rank and num_procs:*/
++	MPI_Comm_size(comm,&num_procs);
++	MPI_Comm_rank(comm,&my_rank);
++
++	/*output: */
++	int lower_row,upper_row;
++
++	/*Gather all range values into allranges, for all nodes*/
++	int* allranges=xNew<int>(num_procs);
++	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
++
++	/*From all ranges, get lower row and upper row*/
++	lower_row=0;
++	upper_row=lower_row+allranges[0];
++	for(int i=1;i<=my_rank;i++){
++		lower_row=lower_row+allranges[i-1];
++		upper_row=upper_row+allranges[i];
++	}
++
++	/*Assign output*/
++	*plower_row=lower_row;
++	*pupper_row=upper_row;
++	xDelete<int>(allranges);
++}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15834-15835.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15834-15835.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15834-15835.diff	(revision 16134)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15834)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15835)
+@@ -762,11 +762,11 @@
+ #}}}
+ #Mpi sources  {{{
+ mpi_sources= ./toolkits/mpi/mpiincludes.h\
+-				./toolkits/mpi/patches/mpipatches.h\
+-				./toolkits/mpi/patches/DetermineLocalSize.cpp\
+-				./toolkits/mpi/patches/DetermineGlobalSize.cpp\
+-				./toolkits/mpi/patches/DetermineRowRankFromLocalSize.cpp\
+-				./toolkits/mpi/patches/GetOwnershipBoundariesFromRange.cpp\
++				./toolkits/mpi/commops/commops.h\
++				./toolkits/mpi/commops/DetermineLocalSize.cpp\
++				./toolkits/mpi/commops/DetermineGlobalSize.cpp\
++				./toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp\
++				./toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp\
+ 				./toolkits/issm/IssmMpiDenseMat.h\
+ 				./toolkits/issm/IssmMpiVec.h
+ #}}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15835-15836.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15835-15836.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15835-15836.diff	(revision 16134)
@@ -0,0 +1,658 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h	(revision 15835)
++++ ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h	(revision 15836)
+@@ -1,23 +0,0 @@
+-/* \file mpiincludes.h
+- * \brief all includes for MPI layer
+- */
+-
+-#ifndef _MPI_INCLUDES_H_
+-#define _MPI_INCLUDES_H_
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#ifdef _HAVE_MPI_
+-
+-/*MPI includes: */
+-#include <mpi.h>
+-
+-/*Patches: */
+-#include "./commops/commops.h"
+-#endif
+-
+-#endif
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 15836)
+@@ -0,0 +1,500 @@
++/* \file issmmpi.cpp
++ * \brief: implementation of all the mpi wrappers that ISSM requires. The goal is to control 
++ * which MPI layer we are using at compile time: the standard mpi, the autodiff mpi or no mpi at all.
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <cassert>
++#include <cstring> // for memcpy
++
++#include "issmmpi.h"
++
++// for now - needs to be replaced by issm's type header file >>>>---- from here
++#ifdef _HAVE_ADOLC_
++# include "adolc/adolc.h"
++typedef adouble IssmDouble;
++#else 
++typedef double IssmDouble;
++#endif
++// ------<<<< until here
++
++#ifndef _HAVE_MPI_
++ISSMMPI_Status ourIssmMPIStatusIgnore=0;
++size_t sizeHelper(ISSMMPI_Datatype type) { /*{{{*/
++
++  switch(type) { 
++  case ISSMMPI_CHAR: 
++    return sizeof(char);
++    break;
++  case ISSMMPI_DOUBLE: 
++    return sizeof(double);
++    break;
++  case ISSMMPI_INT: 
++    return sizeof(int);
++    break;
++  default: 
++    assert(0);
++    break;
++  }
++  return 0;
++}/*}}}*/
++#endif
++
++int ISSMMPI_Allgather(void *sendbuf, int sendcount, ISSMMPI_Datatype sendtype, void *recvbuf, int recvcount, ISSMMPI_Datatype recvtype, ISSMMPI_Comm comm) {  /*{{{*/
++  int rc=0;
++  assert(sendcount==recvcount || sendtype==recvtype); // we handle only identical representations
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Allgather(sendbuf,
++		    sendcount,
++		    sendtype,
++		    recvbuf,
++		    recvcount,
++		    recvtype,
++		    comm);
++# else
++  rc=MPI_Allgather(sendbuf,
++		   sendcount,
++		   sendtype,
++		   recvbuf,
++		   recvcount,
++		   recvtype,
++		   comm);
++# endif
++#else
++# ifdef _HAVE_ADOLC_
++  if (sendtype==ISSMMPI_DOUBLE) { 
++    IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
++    IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
++    for(int i=0;i<sendcount;++i) activeRecvBuf[i]=activeSendBuf[i];
++  }
++  else 
++# endif
++    memcpy(recvbuf,sendbuf,sizeHelper(sendtype)*sendcount);
++#endif
++  return rc;
++} /*}}}*/
++int ISSMMPI_Allgatherv(void *sendbuf, int sendcount, ISSMMPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, ISSMMPI_Datatype recvtype, ISSMMPI_Comm comm) {  /*{{{*/
++  int rc=0;
++  assert(sendtype==recvtype); // we handle only identical representations
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Allgatherv(sendbuf,
++		     sendcount,
++		     sendtype,
++		     recvbuf,
++		     recvcounts,
++		     displs,
++		     recvtype,
++		     comm);
++# else
++  rc=MPI_Allgatherv(sendbuf,
++		    sendcount,
++		    sendtype,
++		    recvbuf,
++		    recvcounts,
++		    displs,
++		    recvtype,
++		    comm);
++# endif
++#else
++  assert(sendcount==recvcounts[0]); // we handle only identical representations 
++# ifdef _HAVE_ADOLC_
++  if (sendtype==ISSMMPI_DOUBLE) { 
++    IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
++    IssmDouble* activeRecvBuf=(IssmDouble*)(recvbuf)+displs[0];
++    for(int i=0;i<sendcount;++i) activeRecvBuf[i]=activeSendBuf[i];
++  }
++  else 
++# endif
++    memcpy((char*)recvbuf+(sizeHelper(recvtype)*displs[0]),sendbuf,sizeHelper(sendtype)*sendcount);
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Allreduce(void *sendbuf, void *recvbuf, int count, ISSMMPI_Datatype datatype, ISSMMPI_Op op, ISSMMPI_Comm comm){/*{{{*/
++ 
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Allreduce(sendbuf,
++		    recvbuf,
++		    count,
++		    datatype,
++		    op,
++		    comm);
++# else
++  rc=MPI_Allreduce(sendbuf,
++		   recvbuf,
++		   count,
++		   datatype,
++		   op,
++		   comm);
++# endif
++#else
++# ifdef _HAVE_ADOLC_
++  if (datatype==ISSMMPI_DOUBLE) { 
++    IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
++    IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
++    for(int i=0;i<count;++i) activeRecvBuf[i]=activeSendBuf[i];
++  }
++  else 
++# endif
++    memcpy(recvbuf,sendbuf,sizeHelper(datatype)*count);
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Barrier(ISSMMPI_Comm comm){  /*{{{*/
++
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Barrier(comm);
++# else 
++  rc=MPI_Barrier(comm);
++# endif
++#else
++// do nothing
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Bcast(void *buffer, int count, ISSMMPI_Datatype datatype, int root, ISSMMPI_Comm comm){  /*{{{*/
++
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Bcast(buffer, 
++		count,
++		datatype,
++		root,
++		comm);
++# else
++  rc=MPI_Bcast(buffer, 
++	       count,
++	       datatype,
++	       root,
++	       comm);
++# endif
++#else 
++// nothing to be done here 
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Comm_free(ISSMMPI_Comm *comm){ /*{{{*/
++ 
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  assert(0); // to be implemented
++# else 
++  rc=MPI_Comm_free(comm);
++# endif
++#else
++// do nothing
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Comm_rank(ISSMMPI_Comm comm, int *rank){  /*{{{*/
++
++  int rc=0;
++#ifdef _HAVE_MPI_
++  rc=MPI_Comm_rank(comm,
++		   rank);
++#else
++  *rank=0;
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Comm_size( ISSMMPI_Comm comm, int *size){ /*{{{*/
++ 
++  int rc=0;
++#ifdef _HAVE_MPI_
++  rc=MPI_Comm_size(comm,
++		   size);
++#else
++  *size=1;
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Finalize(void){  /*{{{*/
++
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Finalize_NT();
++# else
++  rc=MPI_Finalize();
++# endif
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Gather(void *sendbuf, int sendcnt, ISSMMPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSMMPI_Datatype recvtype, int root, ISSMMPI_Comm comm){  /*{{{*/
++
++  int rc=0;
++  assert(sendtype==recvtype && sendcnt==recvcnt); // we handle only identical representations
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Gather(sendbuf,
++		 sendcnt,
++		 sendtype,
++		 recvbuf,
++		 recvcnt,
++		 recvtype,
++		 root,
++		 comm);
++# else
++  rc=MPI_Gather(sendbuf,
++		sendcnt,
++		sendtype,
++		recvbuf,
++		recvcnt,
++		recvtype,
++		root,
++		comm);
++# endif
++#else
++# ifdef _HAVE_ADOLC_
++  if (sendtype==ISSMMPI_DOUBLE) { 
++    IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
++    IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
++    for(int i=0;i<sendcnt;++i) activeRecvBuf[i]=activeSendBuf[i];
++  }
++  else 
++# endif
++    memcpy(recvbuf,sendbuf,sizeHelper(sendtype)*sendcnt);
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Gatherv(void *sendbuf, int sendcnt, ISSMMPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, ISSMMPI_Datatype recvtype, int root, ISSMMPI_Comm comm){/*{{{*/
++ 
++  int rc=0;
++  assert(sendtype==recvtype); // we handle only identical representations
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Gatherv(sendbuf,
++		  sendcnt,
++		  sendtype,
++		  recvbuf,
++		  recvcnts,
++		  displs,
++		  recvtype,
++		  root,
++		  comm);
++# else
++  rc=MPI_Gatherv(sendbuf,
++		 sendcnt,
++		 sendtype,
++		 recvbuf,
++		 recvcnts,
++		 displs,
++		 recvtype,
++		 root,
++		 comm);
++# endif
++#else
++  assert(sendcnt==recvcnts[0]); // we handle only identical representations 
++# ifdef _HAVE_ADOLC_
++  if (sendtype==ISSMMPI_DOUBLE) { 
++    IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
++    IssmDouble* activeRecvBuf=(IssmDouble*)(recvbuf)+displs[0];
++    for(int i=0;i<sendcnt;++i) activeRecvBuf[i]=activeSendBuf[i];
++  }
++  else 
++# endif
++    memcpy((char*)recvbuf+(sizeHelper(recvtype)*displs[0]),sendbuf,sizeHelper(sendtype)*sendcnt);
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Init(int *argc, char ***argv){  /*{{{*/
++
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Init_NT(argc,argv);
++# else
++  rc=MPI_Init(argc,argv);
++# endif
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Recv(void *buf, int count, ISSMMPI_Datatype datatype, int source, int tag, ISSMMPI_Comm comm, ISSMMPI_Status *status){ /*{{{*/
++
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Recv(buf, 
++	       count,
++	       datatype,
++	       source,
++	       tag,
++	       AMPI_SEND, // as long as there are no other variants
++	       comm,
++	       status);
++# else
++  rc=MPI_Recv(buf, 
++	      count,
++	      datatype,
++	      source,
++	      tag,
++	      comm,
++	      status);
++# endif
++#else 
++// nothing to be done here 
++// as long as nobody tries to do anything with 'status' 
++// we won't do anything to it here either
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Reduce(void *sendbuf, void *recvbuf, int count, ISSMMPI_Datatype datatype, ISSMMPI_Op op, int root, ISSMMPI_Comm comm){ /*{{{*/
++
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Reduce(sendbuf,
++		 recvbuf,
++		 count,
++		 datatype,
++		 op,
++		 root,
++		 comm);
++# else
++  rc=MPI_Reduce(sendbuf,
++		recvbuf,
++		count,
++		datatype,
++		op,
++		root,
++		comm);
++# endif
++#else
++# ifdef _HAVE_ADOLC_
++  if (datatype==ISSMMPI_DOUBLE) { 
++    IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
++    IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
++    for(int i=0;i<count;++i) activeRecvBuf[i]=activeSendBuf[i];
++  }
++  else 
++# endif
++    memcpy(recvbuf,sendbuf,sizeHelper(datatype)*count);
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Scatter(void *sendbuf, int sendcnt, ISSMMPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSMMPI_Datatype recvtype, int root, ISSMMPI_Comm comm){ /*{{{*/
++
++  int rc=0;
++  assert(sendtype==recvtype && sendcnt==recvcnt); // we handle only identical representations
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Scatter(sendbuf,
++		  sendcnt,
++		  sendtype,
++		  recvbuf,
++		  recvcnt,
++		  recvtype,
++		  root,
++		  comm);
++# else
++  rc=MPI_Scatter(sendbuf,
++		 sendcnt,
++		 sendtype,
++		 recvbuf,
++		 recvcnt,
++		 recvtype,
++		 root,
++		 comm);
++# endif
++#else
++# ifdef _HAVE_ADOLC_
++  if (sendtype==ISSMMPI_DOUBLE) { 
++    IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
++    IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
++    for(int i=0;i<recvcnt;++i) activeRecvBuf[i]=activeSendBuf[i];
++  }
++  else 
++# endif
++    memcpy(recvbuf,sendbuf,sizeHelper(sendtype)*recvcnt);
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, ISSMMPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSMMPI_Datatype recvtype, int root, ISSMMPI_Comm comm){ /*{{{*/
++
++  int rc=0;
++  assert(sendtype==recvtype); // we handle only identical representations
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Scatterv(sendbuf,
++		   sendcnts,
++		   displs,
++		   sendtype,
++		   recvbuf,
++		   recvcnt,
++		   recvtype,
++		   root,
++		   comm);
++# else
++  rc=MPI_Scatterv(sendbuf,
++		  sendcnts,
++		  displs,
++		  sendtype,
++		  recvbuf,
++		  recvcnt,
++		  recvtype,
++		  root,
++		  comm);
++# endif
++#else
++  assert(sendcnts[0]==recvcnt); // we handle only identical representations 
++# ifdef _HAVE_ADOLC_
++  if (sendtype==ISSMMPI_DOUBLE) { 
++    IssmDouble* activeSendBuf=(IssmDouble*)(sendbuf)+displs[0];
++    IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
++    for(int i=0;i<recvcnt;++i) activeRecvBuf[i]=activeSendBuf[i];
++  }
++  else 
++# endif
++    memcpy(recvbuf,(char*)sendbuf+(sizeHelper(sendtype)*displs[0]),sizeHelper(sendtype)*recvcnt);
++#endif
++  return rc;
++}/*}}}*/
++int ISSMMPI_Send(void *buf, int count, ISSMMPI_Datatype datatype, int dest, int tag, ISSMMPI_Comm comm){ /*{{{*/
++
++  int rc=0;
++#ifdef _HAVE_MPI_
++# ifdef _HAVE_AMPI_
++  rc=AMPI_Send(buf, 
++	       count,
++	       datatype,
++	       dest,
++	       tag,
++	       AMPI_RECV, // as long as there are no other variants
++	       comm);
++# else
++  rc=MPI_Send(buf, 
++	      count,
++	      datatype,
++	      dest,
++	      tag,
++	      comm);
++# endif
++#else 
++// nothing to be done here 
++#endif
++  return rc;
++}/*}}}*/
++double ISSMMPI_Wtime(void){/*{{{*/
++ 
++  assert(0); // to be implemented
++  return 0.0;
++}/*}}}*/
++void ISSMMPI_ContiguousInAdolc(size_t aSize) { /*{{{*/
++
++#ifdef _HAVE_ADOLC_
++  ensureContiguousLocations(aSize);
++#endif
++}/*}}}*/
++
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 15836)
+@@ -0,0 +1,106 @@
++/* \file issmmpi.h
++ * \brief: header file that defines all the mpi wrappers that ISSM requires. The goal is to control 
++ * which MPI layer we are using at compile time: the standard mpi, the autodiff mpi or no mpi at all.
++ */
++
++#ifndef _ISSM_MPI_H_
++#define _ISSM_MPI_H_
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#ifdef _HAVE_MPI_
++	/*Include header files: {{{*/
++	#ifdef _HAVE_AMPI_
++		#include <ampi/ampi.h>
++	#else 
++		#include <mpi.h>
++	#endif
++	#include "./commops/commops.h"
++	/*}}}*/
++	/*MPI defines: *{{{*/
++	// types
++	typedef MPI_Comm             ISSM_MPI_Comm;
++	typedef MPI_Datatype         ISSM_MPI_Datatype;
++	typedef MPI_Op               ISSM_MPI_Op;
++	typedef MPI_Status           ISSM_MPI_Status;
++
++	// data types
++	#define ISSM_MPI_CHAR       MPI_CHAR
++	#ifdef _HAVE_AMPI_
++		#define ISSM_MPI_DOUBLE    AMPI_ADOUBLE // corresponds to IssmDouble
++	#else 
++		#define ISSM_MPI_DOUBLE    MPI_DOUBLE  // corresponds to IssmDouble 
++	#endif
++	#define ISSM_MPI_PDOUBLE    MPI_DOUBLE  // corresponds to IssmPDouble
++	#define ISSM_MPI_INT        MPI_INT
++
++	// operations
++	#define ISSM_MPI_MAX        MPI_MAX
++	#define ISSM_MPI_MIN        MPI_MIN
++	#define ISSM_MPI_PROD       MPI_PROD
++	#define ISSM_MPI_SUM        MPI_SUM
++
++	// others
++	#define ISSM_MPI_COMM_WORLD    MPI_COMM_WORLD
++	#define ISSM_MPI_STATUS_IGNORE MPI_STATUS_IGNORE
++	#define ISSM_MPI_ANY_TAG       MPI_ANY_TAG
++	#define ISSM_MPI_ANY_SOURCE    MPI_ANY_SOURCE
++	/*}}}*/
++#else  
++	/*Our ISSM MPI defines: {{{*/
++	// types
++	typedef int                  ISSM_MPI_Comm;
++	typedef int                  ISSM_MPI_Datatype;
++	typedef int                  ISSM_MPI_Op;
++	typedef int                  ISSM_MPI_Status;
++
++	// data types
++	#define ISSM_MPI_CHAR       1
++	#define ISSM_MPI_DOUBLE     2
++	#define ISSM_MPI_INT        3
++
++	// operations
++	#define ISSM_MPI_MAX        1
++	#define ISSM_MPI_MIN        2
++	#define ISSM_MPI_PROD       3
++	#define ISSM_MPI_SUM        4
++
++	// others
++	#define ISSM_MPI_COMM_WORLD    1
++	extern ISSM_MPI_Status ourIssmMPIStatusIgnore;
++	#define ISSM_MPI_STATUS_IGNORE &ourIssmMPIStatusIgnore
++	#define ISSM_MPI_ANY_TAG       2
++	#define ISSM_MPI_ANY_SOURCE    3
++	/*}}}*/
++# endif 
++/* interfaces  {{{*/
++int ISSM_MPI_Allgather(void *sendbuf, int sendcount, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcount, ISSM_MPI_Datatype recvtype, ISSM_MPI_Comm comm);
++int ISSM_MPI_Allgatherv(void *sendbuf, int sendcount, ISSM_MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, ISSM_MPI_Datatype recvtype, ISSM_MPI_Comm comm); 
++int ISSM_MPI_Allreduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, ISSM_MPI_Comm comm); 
++int ISSM_MPI_Barrier(ISSM_MPI_Comm comm);
++int ISSM_MPI_Bcast(void *buffer, int count, ISSM_MPI_Datatype datatype, int root, ISSM_MPI_Comm comm);
++int ISSM_MPI_Comm_free(ISSM_MPI_Comm *comm);
++int ISSM_MPI_Comm_rank(ISSM_MPI_Comm comm, int *rank);
++int ISSM_MPI_Comm_size( ISSM_MPI_Comm comm, int *size);
++int ISSM_MPI_Finalize(void);
++int ISSM_MPI_Gather(void *sendbuf, int sendcnt, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm);
++int ISSM_MPI_Gatherv(void *sendbuf, int sendcnt, ISSM_MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm);
++int ISSM_MPI_Init(int *argc, char ***argv);
++int ISSM_MPI_Recv(void *buf, int count, ISSM_MPI_Datatype datatype, int source, int tag, ISSM_MPI_Comm comm, ISSM_MPI_Status *status);
++int ISSM_MPI_Reduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, int root, ISSM_MPI_Comm comm);
++int ISSM_MPI_Scatter(void *sendbuf, int sendcnt, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm); 
++int ISSM_MPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm); 
++int ISSM_MPI_Send(void *buf, int count, ISSM_MPI_Datatype datatype, int dest, int tag, ISSM_MPI_Comm comm);
++double ISSM_MPI_Wtime(void);
++
++// special for Adol-C locations when buffers are allocated with new
++// this could end up in the xNew template specialized for adoubles 
++// so as to not litter the code with it.
++void ISSM_MPI_ContiguousInAdolc(size_t aSize);
++/*}}}*/
++
++#endif  //#ifndef _ISSM_MPI_H_
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15835)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15836)
+@@ -761,7 +761,8 @@
+ 					./toolkits/gsl/DenseGslSolve.cpp
+ #}}}
+ #Mpi sources  {{{
+-mpi_sources= ./toolkits/mpi/mpiincludes.h\
++mpi_sources= ./toolkits/mpi/issmmpi.h\
++				./toolkits/mpi/issmpi.cpp\
+ 				./toolkits/mpi/commops/commops.h\
+ 				./toolkits/mpi/commops/DetermineLocalSize.cpp\
+ 				./toolkits/mpi/commops/DetermineGlobalSize.cpp\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15836-15837.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15836-15837.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15836-15837.diff	(revision 16134)
@@ -0,0 +1,284 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 15836)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 15837)
+@@ -12,29 +12,21 @@
+ #include <cassert>
+ #include <cstring> // for memcpy
+ 
+-#include "issmmpi.h"
++#include "./issmmpi.h"
++#include "../../shared/Numerics/types.h"
+ 
+-// for now - needs to be replaced by issm's type header file >>>>---- from here
+-#ifdef _HAVE_ADOLC_
+-# include "adolc/adolc.h"
+-typedef adouble IssmDouble;
+-#else 
+-typedef double IssmDouble;
+-#endif
+-// ------<<<< until here
+-
+ #ifndef _HAVE_MPI_
+-ISSMMPI_Status ourIssmMPIStatusIgnore=0;
+-size_t sizeHelper(ISSMMPI_Datatype type) { /*{{{*/
++ISSM_MPI_Status ourIssmMPIStatusIgnore=0;
++size_t sizeHelper(ISSM_MPI_Datatype type) { /*{{{*/
+ 
+   switch(type) { 
+-  case ISSMMPI_CHAR: 
++  case ISSM_MPI_CHAR: 
+     return sizeof(char);
+     break;
+-  case ISSMMPI_DOUBLE: 
++  case ISSM_MPI_DOUBLE: 
+     return sizeof(double);
+     break;
+-  case ISSMMPI_INT: 
++  case ISSM_MPI_INT: 
+     return sizeof(int);
+     break;
+   default: 
+@@ -45,7 +37,7 @@
+ }/*}}}*/
+ #endif
+ 
+-int ISSMMPI_Allgather(void *sendbuf, int sendcount, ISSMMPI_Datatype sendtype, void *recvbuf, int recvcount, ISSMMPI_Datatype recvtype, ISSMMPI_Comm comm) {  /*{{{*/
++int ISSM_MPI_Allgather(void *sendbuf, int sendcount, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcount, ISSM_MPI_Datatype recvtype, ISSM_MPI_Comm comm) {  /*{{{*/
+   int rc=0;
+   assert(sendcount==recvcount || sendtype==recvtype); // we handle only identical representations
+ #ifdef _HAVE_MPI_
+@@ -68,7 +60,7 @@
+ # endif
+ #else
+ # ifdef _HAVE_ADOLC_
+-  if (sendtype==ISSMMPI_DOUBLE) { 
++  if (sendtype==ISSM_MPI_DOUBLE) { 
+     IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
+     IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
+     for(int i=0;i<sendcount;++i) activeRecvBuf[i]=activeSendBuf[i];
+@@ -79,7 +71,7 @@
+ #endif
+   return rc;
+ } /*}}}*/
+-int ISSMMPI_Allgatherv(void *sendbuf, int sendcount, ISSMMPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, ISSMMPI_Datatype recvtype, ISSMMPI_Comm comm) {  /*{{{*/
++int ISSM_MPI_Allgatherv(void *sendbuf, int sendcount, ISSM_MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, ISSM_MPI_Datatype recvtype, ISSM_MPI_Comm comm) {  /*{{{*/
+   int rc=0;
+   assert(sendtype==recvtype); // we handle only identical representations
+ #ifdef _HAVE_MPI_
+@@ -105,7 +97,7 @@
+ #else
+   assert(sendcount==recvcounts[0]); // we handle only identical representations 
+ # ifdef _HAVE_ADOLC_
+-  if (sendtype==ISSMMPI_DOUBLE) { 
++  if (sendtype==ISSM_MPI_DOUBLE) { 
+     IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
+     IssmDouble* activeRecvBuf=(IssmDouble*)(recvbuf)+displs[0];
+     for(int i=0;i<sendcount;++i) activeRecvBuf[i]=activeSendBuf[i];
+@@ -116,7 +108,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Allreduce(void *sendbuf, void *recvbuf, int count, ISSMMPI_Datatype datatype, ISSMMPI_Op op, ISSMMPI_Comm comm){/*{{{*/
++int ISSM_MPI_Allreduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, ISSM_MPI_Comm comm){/*{{{*/
+  
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -137,7 +129,7 @@
+ # endif
+ #else
+ # ifdef _HAVE_ADOLC_
+-  if (datatype==ISSMMPI_DOUBLE) { 
++  if (datatype==ISSM_MPI_DOUBLE) { 
+     IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
+     IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
+     for(int i=0;i<count;++i) activeRecvBuf[i]=activeSendBuf[i];
+@@ -148,7 +140,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Barrier(ISSMMPI_Comm comm){  /*{{{*/
++int ISSM_MPI_Barrier(ISSM_MPI_Comm comm){  /*{{{*/
+ 
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -162,7 +154,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Bcast(void *buffer, int count, ISSMMPI_Datatype datatype, int root, ISSMMPI_Comm comm){  /*{{{*/
++int ISSM_MPI_Bcast(void *buffer, int count, ISSM_MPI_Datatype datatype, int root, ISSM_MPI_Comm comm){  /*{{{*/
+ 
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -184,7 +176,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Comm_free(ISSMMPI_Comm *comm){ /*{{{*/
++int ISSM_MPI_Comm_free(ISSM_MPI_Comm *comm){ /*{{{*/
+  
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -198,7 +190,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Comm_rank(ISSMMPI_Comm comm, int *rank){  /*{{{*/
++int ISSM_MPI_Comm_rank(ISSM_MPI_Comm comm, int *rank){  /*{{{*/
+ 
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -209,7 +201,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Comm_size( ISSMMPI_Comm comm, int *size){ /*{{{*/
++int ISSM_MPI_Comm_size( ISSM_MPI_Comm comm, int *size){ /*{{{*/
+  
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -220,7 +212,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Finalize(void){  /*{{{*/
++int ISSM_MPI_Finalize(void){  /*{{{*/
+ 
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -232,7 +224,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Gather(void *sendbuf, int sendcnt, ISSMMPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSMMPI_Datatype recvtype, int root, ISSMMPI_Comm comm){  /*{{{*/
++int ISSM_MPI_Gather(void *sendbuf, int sendcnt, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm){  /*{{{*/
+ 
+   int rc=0;
+   assert(sendtype==recvtype && sendcnt==recvcnt); // we handle only identical representations
+@@ -258,7 +250,7 @@
+ # endif
+ #else
+ # ifdef _HAVE_ADOLC_
+-  if (sendtype==ISSMMPI_DOUBLE) { 
++  if (sendtype==ISSM_MPI_DOUBLE) { 
+     IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
+     IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
+     for(int i=0;i<sendcnt;++i) activeRecvBuf[i]=activeSendBuf[i];
+@@ -269,7 +261,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Gatherv(void *sendbuf, int sendcnt, ISSMMPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, ISSMMPI_Datatype recvtype, int root, ISSMMPI_Comm comm){/*{{{*/
++int ISSM_MPI_Gatherv(void *sendbuf, int sendcnt, ISSM_MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm){/*{{{*/
+  
+   int rc=0;
+   assert(sendtype==recvtype); // we handle only identical representations
+@@ -298,7 +290,7 @@
+ #else
+   assert(sendcnt==recvcnts[0]); // we handle only identical representations 
+ # ifdef _HAVE_ADOLC_
+-  if (sendtype==ISSMMPI_DOUBLE) { 
++  if (sendtype==ISSM_MPI_DOUBLE) { 
+     IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
+     IssmDouble* activeRecvBuf=(IssmDouble*)(recvbuf)+displs[0];
+     for(int i=0;i<sendcnt;++i) activeRecvBuf[i]=activeSendBuf[i];
+@@ -309,7 +301,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Init(int *argc, char ***argv){  /*{{{*/
++int ISSM_MPI_Init(int *argc, char ***argv){  /*{{{*/
+ 
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -321,7 +313,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Recv(void *buf, int count, ISSMMPI_Datatype datatype, int source, int tag, ISSMMPI_Comm comm, ISSMMPI_Status *status){ /*{{{*/
++int ISSM_MPI_Recv(void *buf, int count, ISSM_MPI_Datatype datatype, int source, int tag, ISSM_MPI_Comm comm, ISSM_MPI_Status *status){ /*{{{*/
+ 
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -350,7 +342,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Reduce(void *sendbuf, void *recvbuf, int count, ISSMMPI_Datatype datatype, ISSMMPI_Op op, int root, ISSMMPI_Comm comm){ /*{{{*/
++int ISSM_MPI_Reduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, int root, ISSM_MPI_Comm comm){ /*{{{*/
+ 
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -373,7 +365,7 @@
+ # endif
+ #else
+ # ifdef _HAVE_ADOLC_
+-  if (datatype==ISSMMPI_DOUBLE) { 
++  if (datatype==ISSM_MPI_DOUBLE) { 
+     IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
+     IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
+     for(int i=0;i<count;++i) activeRecvBuf[i]=activeSendBuf[i];
+@@ -384,7 +376,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Scatter(void *sendbuf, int sendcnt, ISSMMPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSMMPI_Datatype recvtype, int root, ISSMMPI_Comm comm){ /*{{{*/
++int ISSM_MPI_Scatter(void *sendbuf, int sendcnt, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm){ /*{{{*/
+ 
+   int rc=0;
+   assert(sendtype==recvtype && sendcnt==recvcnt); // we handle only identical representations
+@@ -410,7 +402,7 @@
+ # endif
+ #else
+ # ifdef _HAVE_ADOLC_
+-  if (sendtype==ISSMMPI_DOUBLE) { 
++  if (sendtype==ISSM_MPI_DOUBLE) { 
+     IssmDouble* activeSendBuf=(IssmDouble*)sendbuf;
+     IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
+     for(int i=0;i<recvcnt;++i) activeRecvBuf[i]=activeSendBuf[i];
+@@ -421,7 +413,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, ISSMMPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSMMPI_Datatype recvtype, int root, ISSMMPI_Comm comm){ /*{{{*/
++int ISSM_MPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm){ /*{{{*/
+ 
+   int rc=0;
+   assert(sendtype==recvtype); // we handle only identical representations
+@@ -450,7 +442,7 @@
+ #else
+   assert(sendcnts[0]==recvcnt); // we handle only identical representations 
+ # ifdef _HAVE_ADOLC_
+-  if (sendtype==ISSMMPI_DOUBLE) { 
++  if (sendtype==ISSM_MPI_DOUBLE) { 
+     IssmDouble* activeSendBuf=(IssmDouble*)(sendbuf)+displs[0];
+     IssmDouble* activeRecvBuf=(IssmDouble*)recvbuf;
+     for(int i=0;i<recvcnt;++i) activeRecvBuf[i]=activeSendBuf[i];
+@@ -461,7 +453,7 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-int ISSMMPI_Send(void *buf, int count, ISSMMPI_Datatype datatype, int dest, int tag, ISSMMPI_Comm comm){ /*{{{*/
++int ISSM_MPI_Send(void *buf, int count, ISSM_MPI_Datatype datatype, int dest, int tag, ISSM_MPI_Comm comm){ /*{{{*/
+ 
+   int rc=0;
+ #ifdef _HAVE_MPI_
+@@ -486,15 +478,14 @@
+ #endif
+   return rc;
+ }/*}}}*/
+-double ISSMMPI_Wtime(void){/*{{{*/
++double ISSM_MPI_Wtime(void){/*{{{*/
+  
+   assert(0); // to be implemented
+   return 0.0;
+ }/*}}}*/
+-void ISSMMPI_ContiguousInAdolc(size_t aSize) { /*{{{*/
++void ISSM_MPI_ContiguousInAdolc(size_t aSize) { /*{{{*/
+ 
+ #ifdef _HAVE_ADOLC_
+   ensureContiguousLocations(aSize);
+ #endif
+ }/*}}}*/
+-
Index: /issm/oecreview/Archive/15392-16133/ISSM-15837-15838.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15837-15838.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15837-15838.diff	(revision 16134)
@@ -0,0 +1,2492 @@
+Index: ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 15838)
+@@ -48,9 +48,7 @@
+ 	bool       nodakotacore             = true;
+ 
+ 	/*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&counter,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&counter,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 	if(counter==-1)return 0;
+ 
+ 	/*cast void_femmodel to FemModel: */
+@@ -115,11 +113,11 @@
+ 	numresponses=*pnumresponses;
+ 
+ 	/*numvariables: */
+-	MPI_Bcast(&numvariables,1,MPI_INT,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(&numvariables,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*variables:*/
+ 	if(my_rank!=0)variables=xNew<double>(numvariables);
+-	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 	/*variables_descriptors: */
+ 	if(my_rank!=0){
+@@ -130,14 +128,14 @@
+ 			string=variables_descriptors[i];
+ 			string_length=(strlen(string)+1)*sizeof(char);
+ 		}
+-		MPI_Bcast(&string_length,1,MPI_INT,0,IssmComm::GetComm()); 
++		ISSM_MPI_Bcast(&string_length,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 		if(my_rank!=0)string=xNew<char>(string_length);
+-		MPI_Bcast(string,string_length,MPI_CHAR,0,IssmComm::GetComm()); 
++		ISSM_MPI_Bcast(string,string_length,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+ 		if(my_rank!=0)variables_descriptors[i]=string;
+ 	}
+ 
+ 	/*numresponses: */
+-	MPI_Bcast(&numresponses,1,MPI_INT,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(&numresponses,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+ 	*pnumvariables=numvariables;
+Index: ../trunk-jpl/src/c/analyses/EnvironmentFinalize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnvironmentFinalize.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/analyses/EnvironmentFinalize.cpp	(revision 15838)
+@@ -11,18 +11,15 @@
+ 
+ void EnvironmentFinalize(void){
+ 
+-	#ifdef _HAVE_MPI_
++	int my_rank;
+ 
+ 	/*Make sure we are all here*/
+-	MPI_Barrier(MPI_COMM_WORLD);
++	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD);
+ 
+ 	/*Print closing statement*/
+-	int my_rank;
+-	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
++	ISSM_MPI_Comm_rank(ISSM_MPI_COMM_WORLD,&my_rank);
+ 	if(!my_rank) printf("closing MPI\n");
+ 
+ 	/*Finalize: */
+-	MPI_Finalize();
+-
+-	#endif
++	ISSM_MPI_Finalize();
+ }
+Index: ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp	(revision 15838)
+@@ -16,17 +16,15 @@
+ 
+ 	/*Initialize MPI environment: */
+ 	#if defined(_HAVE_MPI_)
+-	MPI_Init(&argc,&argv);
+-	comm = MPI_COMM_WORLD;
++	ISSM_MPI_Init(&argc,&argv);
++	comm = ISSM_MPI_COMM_WORLD;
+ 	#else
+ 	comm = 1; //bogus number for comm, which does not exist anyway.
+ 	#endif
+ 
+ 	/*Print Banner*/
+ 	int my_rank = 0;
+-	#ifdef _HAVE_MPI_
+-	MPI_Comm_rank(comm,&my_rank);
+-	#endif
++	ISSM_MPI_Comm_rank(comm,&my_rank);
+ 	if(!my_rank) printf("\n");
+ 	if(!my_rank) printf("Ice Sheet System Model (%s) version  %s\n",PACKAGE_NAME,PACKAGE_VERSION);
+ 	if(!my_rank) printf("(website: %s contact: %s)\n",PACKAGE_URL,PACKAGE_BUGREPORT);
+Index: ../trunk-jpl/src/c/shared/Numerics/types.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/types.h	(revision 15837)
++++ ../trunk-jpl/src/c/shared/Numerics/types.h	(revision 15838)
+@@ -16,10 +16,8 @@
+ /*here are our abstracted types: inspired on petsc */
+ #if ISSM_USE_64BIT_INDICES == 1
+ typedef long long IssmInt;
+-//#define MPIU_INT MPI_LONG_LONG_INT already define in petsc
+ #else
+ typedef int IssmInt;
+-//#define MPIU_INT MPI_INT already defined in petsc
+ #endif  
+ 
+ #if defined(_HAVE_ADOLC_) &&  !defined(_WRAPPERS_)
+Index: ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp	(revision 15838)
+@@ -38,9 +38,7 @@
+ 	/*Open handle to data on disk (one by one to avoid errors)*/
+ 	for(int i=0;i<num_proc;i++){
+ 		if(my_rank==i) fid = fopen(filename,format);
+-#ifdef _HAVE_MPI_
+-		MPI_Barrier(IssmComm::GetComm());
+-#endif
++		ISSM_MPI_Barrier(IssmComm::GetComm());
+ 	}
+ 	if(fid==NULL) _error_("could not open file " << filename << " for binary reading or writing");
+ 
+Index: ../trunk-jpl/src/c/shared/io/Comm/CommDef.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Comm/CommDef.h	(revision 15837)
++++ ../trunk-jpl/src/c/shared/io/Comm/CommDef.h	(revision 15838)
+@@ -1,16 +0,0 @@
+-/*\file CommDef.h
+- *\brief: defined communicator typedefs
+- */
+-
+-#ifndef _IO_COMMDEF_H_
+-#define _IO_COMMDEF_H_
+-
+-/*Define communicator: */
+-#ifdef _HAVE_MPI_
+-	#include <mpi.h>
+-	typedef MPI_Comm COMM;
+-#else
+-	typedef int COMM;
+-#endif
+-
+-#endif
+Index: ../trunk-jpl/src/c/shared/io/Comm/Comm.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Comm/Comm.h	(revision 15837)
++++ ../trunk-jpl/src/c/shared/io/Comm/Comm.h	(revision 15838)
+@@ -5,7 +5,7 @@
+ #ifndef _IO_COMM_H_
+ #define _IO_COMM_H_
+ 
+-#include "./CommDef.h"
++#include "../../../toolkits/mpi/issmmpi.h"
+ #include "./IssmComm.h"
+ 
+ #endif
+Index: ../trunk-jpl/src/c/shared/io/Comm/IssmComm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Comm/IssmComm.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/shared/io/Comm/IssmComm.cpp	(revision 15838)
+@@ -12,7 +12,7 @@
+ #include "../../Numerics/types.h"
+ #include "../../Exceptions/exceptions.h"
+ 
+-void IssmComm::SetComm(COMM incomm){ /*{{{*/
++void IssmComm::SetComm(ISSM_MPI_COMM incomm){ /*{{{*/
+ 
+ 	/*A comm is provided, we are running in parallel (this is not a module)*/
+ 	parallel = true;
+@@ -27,7 +27,7 @@
+ 	/*No need to initialise comm*/
+ 
+ }/*}}}*/
+-COMM IssmComm::GetComm(){  /*{{{*/
++ISSM_MPI_COMM IssmComm::GetComm(){  /*{{{*/
+ 	if(!parallel) _error_("Cannot return comm in serial mode");
+ 	return comm;
+ }/*}}}*/
+@@ -38,9 +38,7 @@
+ 	/*for matlab and python modules*/
+ 	if(!parallel) return my_rank;
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Comm_rank(comm,&my_rank);
+-	#endif
++	ISSM_MPI_Comm_rank(comm,&my_rank);
+ 
+ 	return my_rank;
+ 
+@@ -52,9 +50,7 @@
+ 	/*for matlab and python modules*/
+ 	if(!parallel) return size;
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Comm_size(comm,&size);
+-	#endif
++	ISSM_MPI_Comm_size(comm,&size);
+ 
+ 	return size;
+ 
+Index: ../trunk-jpl/src/c/shared/io/Comm/IssmComm.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Comm/IssmComm.h	(revision 15837)
++++ ../trunk-jpl/src/c/shared/io/Comm/IssmComm.h	(revision 15838)
+@@ -20,13 +20,13 @@
+ class IssmComm {
+ 
+ 	private:
+-		static COMM comm;
++		static ISSM_MPI_Comm comm;
+ 		static bool parallel;
+ 
+ 	public:
+-		static void SetComm(COMM incomm);
++		static void SetComm(ISSM_MPI_COMM incomm);
+ 		static void SetComm(void);
+-		static COMM GetComm(void);
++		static ISSM_MPI_COMM GetComm(void);
+ 		static int GetRank(void);
+ 		static int GetSize(void);
+ };
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15838)
+@@ -159,12 +159,8 @@
+ 		}
+ 		vec_nodes_on_floatingice->Assemble();
+ 
+-		#ifdef _HAVE_MPI_
+-		MPI_Allreduce(&local_nflipped,&nflipped,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(&local_nflipped,&nflipped,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		if(VerboseConvergence()) _printf0_("   Additional number of vertices allowed to unground: " << nflipped << "\n");
+-		#else
+-		nflipped=local_nflipped;
+-		#endif
+ 
+ 		/*Avoid leaks: */
+ 		xDelete<IssmDouble>(elements_neighboring_floatingce);
+Index: ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp	(revision 15838)
+@@ -94,26 +94,22 @@
+ 	}
+ 
+ 	/*Ok, broadcast to other cpus: */
+- 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&numanalyses,1,MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&numanalyses,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	if(my_rank!=0){
+ 		analyses=xNew<IssmDouble>(numanalyses);
+ 		strings=xNew<char*>(numanalyses);
+ 	}
+-	MPI_Bcast(analyses,numanalyses,MPI_DOUBLE,0,IssmComm::GetComm());
+-	#endif
++	ISSM_MPI_Bcast(analyses,numanalyses,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	for(i=0;i<numanalyses;i++){
+ 		char* string=strings[i];
+ 		if(my_rank==0){
+ 			if(string==NULL) _error_("PETSc options for analysis " << EnumToStringx(reCast<int>(analyses[i])) << " have been declared but were not found");
+ 		}
+ 		if(my_rank==0)stringlength=(strlen(string)+1)*sizeof(char);
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&stringlength,1,MPI_INT,0,IssmComm::GetComm());
++		ISSM_MPI_Bcast(&stringlength,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 		if(my_rank!=0)string=xNew<char>(stringlength);
+-		MPI_Bcast(string,stringlength,MPI_CHAR,0,IssmComm::GetComm());
++		ISSM_MPI_Bcast(string,stringlength,ISSM_MPI_CHAR,0,IssmComm::GetComm());
+ 		if(my_rank!=0)strings[i]=string;
+-		#endif
+ 	}
+ 
+ 	/*Ok, out of strings and analyses and numanalyses, create parameters, and plug them into parameters container: */
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 15838)
+@@ -28,11 +28,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 15838)
+@@ -25,11 +25,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+- 	MPI_Reduce (&S,&S_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&S_sum,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
++ 	ISSM_MPI_Reduce (&S,&S_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&S_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 	S=S_sum;
+-	#endif
+ 
+ 	/*add surface area to element inputs:*/
+ 	InputUpdateFromConstantx(elements,nodes,vertices,loads,materials,parameters,S,SurfaceAreaEnum);
+Index: ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 15838)
+@@ -36,15 +36,15 @@
+ 	num_procs=IssmComm::GetSize();
+ 
+ 	/*Get some Options*/
+-	MPI_Barrier(MPI_COMM_WORLD); start=MPI_Wtime();
++	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD); start=ISSM_MPI_Wtime();
+ 	options->Get(&radius,"searchradius",0.);
+ 	options->Get(&mindata,"mindata",1);
+ 	options->Get(&maxdata,"maxdata",50);
+ 
+ 	/*Process observation dataset*/
+-	MPI_Barrier(MPI_COMM_WORLD); start_init=MPI_Wtime();
++	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD); start_init=ISSM_MPI_Wtime();
+ 	observations=new Observations(obs_list,obs_x,obs_y,obs_length,options);
+-	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
++	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD); finish_init=ISSM_MPI_Wtime();
+ 
+ 	/*Allocate output*/
+ 	predictions =xNewZeroInit<double>(n_interp);
+@@ -53,7 +53,7 @@
+ 	/*Get output*/
+ 	options->Get(&output,"output",(char*)"prediction");
+ 
+-	MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
++	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD); start_core=ISSM_MPI_Wtime( );
+ 	if(strcmp(output,"quadtree")==0){
+ 		observations->QuadtreeColoring(predictions,x_interp,y_interp,n_interp);
+ 	}
+@@ -72,14 +72,12 @@
+ 		}
+ 		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+-#ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+ 		double *sumerror       =xNew<double>(n_interp);
+-		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
+-		MPI_Allreduce(error,sumerror,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(error,sumerror,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(error); error=sumerror;
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+-#endif
+ 	}
+ 	else if(strcmp(output,"v4")==0){
+ 
+@@ -90,11 +88,9 @@
+ 		}
+ 		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+-#ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+-		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+-#endif
+ 	}
+ 	else if(strcmp(output,"nearestneighbor")==0){
+ 
+@@ -105,11 +101,9 @@
+ 		}
+ 		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+-#ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+-		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+-#endif
+ 	}
+ 	else if(strcmp(output,"idw")==0){
+ 		double power;
+@@ -122,16 +116,14 @@
+ 		}
+ 		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+-#ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+-		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+-#endif
+ 	}
+ 	else{
+ 		_error_("output '" << output << "' not supported yet");
+ 	}
+-	MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
++	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD); finish_core=ISSM_MPI_Wtime( );
+ 
+ 	/*clean-up and Assign output pointer*/
+ 	delete variogram;
+@@ -140,7 +132,7 @@
+ 	*ppredictions = predictions;
+ 	*perror       = error;
+ 
+-	MPI_Barrier(MPI_COMM_WORLD); finish=MPI_Wtime( );
++	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD); finish=ISSM_MPI_Wtime( );
+ 	_printf0_("\n   " << setw(34) << left << "Observation fitering elapsed time: " << finish_init-start_init << " seconds  \n\n");
+ 	_printf0_("   " << setw(34) << left << "Kriging prediction elapsed time: " << finish_core-start_core << " seconds  \n\n");
+ 	_printf0_("\n   " << "Total elapsed time " << int((finish-start)/3600) << " hrs " << int(int(finish-start)%3600/60) << " min " << int(finish-start)%60 << " sec\n\n\n");
+Index: ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 15838)
+@@ -36,18 +36,12 @@
+ 	}
+ 
+ 	/*Broadcast whether we found the element: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
++	ISSM_MPI_Allreduce ( &found,&sumfound,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 	if(!sumfound)_error_("could not find element with vertex with id" << index << " to compute nodal value " << EnumToStringx(natureofdataenum));
+-	#endif
+ 
+ 	/*Broadcast and plug into response: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
+-	MPI_Bcast(&value,1,MPI_DOUBLE,cpu_found,IssmComm::GetComm()); 
+-	#else
+-	value=cpu_found;
+-	#endif
++	ISSM_MPI_Allreduce ( &cpu_found,&cpu_found,1,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&value,1,ISSM_MPI_DOUBLE,cpu_found,IssmComm::GetComm()); 
+ 
+ 	*pnodalvalue=value;
+ }
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp	(revision 15838)
+@@ -35,11 +35,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+-	#endif
+ 
+ 	/*Have we converged? : */
+ 	if (num_unstable_constraints==0) converged=1;
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp	(revision 15838)
+@@ -27,11 +27,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+-	#endif
+ 
+ 	return found;
+ }
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 15838)
+@@ -27,11 +27,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+-	#endif
+ 
+ 	return found;
+ }
+@@ -89,11 +87,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pnum_unstable_constraints=num_unstable_constraints;
+@@ -129,11 +125,9 @@
+ 	}
+ 
+ 	/*Is there just one found? that would mean we have frozen! : */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+-	#endif
+ 
+ 	return found;
+ }
+@@ -189,11 +183,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+-	#endif
+ 
+ 	return found;
+ }
+@@ -221,11 +213,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+-	#endif
+ 
+ 	if (found){
+ 		/*We found an unstable constraint. : */
+@@ -281,11 +271,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pnum_unstable_constraints=num_unstable_constraints;
+@@ -321,11 +309,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&max_penetration,&mpi_max_penetration,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&mpi_max_penetration,1,MPI_DOUBLE,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&max_penetration,&mpi_max_penetration,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&mpi_max_penetration,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());                
+ 	max_penetration=mpi_max_penetration;
+-	#endif
+ 
+ 	/*feed max_penetration to inputs: */
+ 	for(i=0;i<loads->Size();i++){
+@@ -360,11 +346,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+-	#endif
+ 
+ 	return num_unstable_constraints;
+ }
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 15838)
+@@ -24,11 +24,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp	(revision 15838)
+@@ -21,8 +21,8 @@
+ 	int my_rank;
+ 
+ 	/*recover my_rank*/
+-	MPI_Comm_rank(comm,&my_rank);
+-	MPI_Comm_size(comm,&num_procs);
++	ISSM_MPI_Comm_rank(comm,&my_rank);
++	ISSM_MPI_Comm_size(comm,&num_procs);
+ 
+ 	/* TODO replace the following with ->
+ 
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp	(revision 15838)
+@@ -12,8 +12,8 @@
+ 	/*output: */
+ 	int  global_size;
+ 
+-	MPI_Reduce(&local_size, &global_size, 1, MPI_INT, MPI_SUM, 0, comm);
+-	MPI_Bcast(&global_size,1,MPI_INT,0,comm);
++	ISSM_MPI_Reduce(&local_size, &global_size, 1, ISSM_MPI_INT, ISSM_MPI_SUM, 0, comm);
++	ISSM_MPI_Bcast(&global_size,1,ISSM_MPI_INT,0,comm);
+ 
+ 	return global_size;
+ 
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp	(revision 15838)
+@@ -20,15 +20,15 @@
+ 	/*output: */
+ 	int* RowRank=NULL;
+ 
+-	MPI_Comm_rank(comm,&my_rank);
+-	MPI_Comm_size(comm,&num_procs);
++	ISSM_MPI_Comm_rank(comm,&my_rank);
++	ISSM_MPI_Comm_size(comm,&num_procs);
+ 
+ 	/*allocate: */
+ 	RowRank=xNew<int>(global_size);
+ 
+ 	/*Gather all local_size values into alllocalsizes, for all cpus*/
+ 	int* alllocalsizes=xNew<int>(num_procs);
+-	MPI_Allgather(&localsize,1,MPI_INT,alllocalsizes,1,MPI_INT,comm);
++	ISSM_MPI_Allgather(&localsize,1,ISSM_MPI_INT,alllocalsizes,1,ISSM_MPI_INT,comm);
+ 
+ 	/*From all localsizes, get lower row and upper row*/
+ 	lower_row=0;
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp	(revision 15838)
+@@ -20,15 +20,15 @@
+ 	int num_procs;
+ 
+ 	/*recover my_rank and num_procs:*/
+-	MPI_Comm_size(comm,&num_procs);
+-	MPI_Comm_rank(comm,&my_rank);
++	ISSM_MPI_Comm_size(comm,&num_procs);
++	ISSM_MPI_Comm_rank(comm,&my_rank);
+ 
+ 	/*output: */
+ 	int lower_row,upper_row;
+ 
+ 	/*Gather all range values into allranges, for all nodes*/
+ 	int* allranges=xNew<int>(num_procs);
+-	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
++	ISSM_MPI_Allgather(&range,1,ISSM_MPI_INT,allranges,1,ISSM_MPI_INT,comm);
+ 
+ 	/*From all ranges, get lower row and upper row*/
+ 	lower_row=0;
+Index: ../trunk-jpl/src/c/toolkits/toolkits.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/toolkits.h	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/toolkits.h	(revision 15838)
+@@ -15,9 +15,7 @@
+ #include "./petsc/petscincludes.h"
+ #endif
+ 
+-#ifdef _HAVE_MPI_
+-#include "./mpi/mpiincludes.h"
+-#endif
++#include "./mpi/issmmpi.h"
+ 
+ #ifdef _HAVE_METIS_
+ #include "./metis/metisincludes.h"
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 15838)
+@@ -13,7 +13,7 @@
+ #include "../../shared/MemOps/MemOps.h"
+ #include "../../shared/Exceptions/exceptions.h"
+ #include "../../shared/io/Comm/Comm.h"
+-#include "../mpi/patches/mpipatches.h"
++#include "../mpi/issmmpi.h"
+ 
+ /*Mumps header files: */
+ #include "dmumps_c.h"
+@@ -27,7 +27,7 @@
+ 
+ 	/*Variables: {{{*/
+ 
+-	MPI_Comm   comm;
++	ISSM_MPI_Comm   comm;
+ 	int        my_rank;
+ 	int        num_procs;
+ 	int        i;
+@@ -83,8 +83,8 @@
+ 		}
+ 	}
+ 
+-	MPI_Reduce(&local_nnz,&nnz,1,MPI_INT,MPI_SUM,0,comm);
+-	MPI_Bcast(&nnz,1,MPI_INT,0,comm);
++	ISSM_MPI_Reduce(&local_nnz,&nnz,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,comm);
++	ISSM_MPI_Bcast(&nnz,1,ISSM_MPI_INT,0,comm);
+ 	id.nz=nnz;
+ 	id.nz_loc=local_nnz;
+ 
+@@ -112,20 +112,20 @@
+ 	id.jcn_loc=jcn_loc;
+ 	id.a_loc=a_loc;
+ 
+-	/*Deal with right hand side. We need to MPI_Gather it onto cpu 0: */
++	/*Deal with right hand side. We need to ISSM_MPI_Gather it onto cpu 0: */
+ 	rhs=xNew<IssmPDouble>(pf_M);
+ 
+ 	recvcounts=xNew<int>(num_procs);
+ 	displs=xNew<int>(num_procs);
+ 
+ 	/*recvcounts:*/
+-	MPI_Allgather(&pf_m,1,MPI_INT,recvcounts,1,MPI_INT,comm);
++	ISSM_MPI_Allgather(&pf_m,1,ISSM_MPI_INT,recvcounts,1,ISSM_MPI_INT,comm);
+ 
+ 	/*displs: */
+-	MPI_Allgather(&lower_row,1,MPI_INT,displs,1,MPI_INT,comm);
++	ISSM_MPI_Allgather(&lower_row,1,ISSM_MPI_INT,displs,1,ISSM_MPI_INT,comm);
+ 
+ 	/*Gather:*/
+-	MPI_Gatherv(pf, pf_m, MPI_DOUBLE, rhs, recvcounts, displs, MPI_DOUBLE,0,comm);
++	ISSM_MPI_Gatherv(pf, pf_m, ISSM_MPI_DOUBLE, rhs, recvcounts, displs, ISSM_MPI_DOUBLE,0,comm);
+ 	id.rhs=rhs;
+ 	id.nrhs=1;
+ 	id.lrhs=1;
+@@ -136,7 +136,7 @@
+ 	dmumps_c (&id);
+ 	/*}}}*/
+ 	/*Now scatter from cpu 0 to all other cpus: {{{*/
+-	MPI_Scatterv( rhs, recvcounts, displs, MPI_DOUBLE, uf, uf_m, MPI_DOUBLE, 0, comm); 
++	ISSM_MPI_Scatterv( rhs, recvcounts, displs, ISSM_MPI_DOUBLE, uf, uf_m, ISSM_MPI_DOUBLE, 0, comm); 
+ 
+ 	/*}}}*/
+ 	/*Cleanup: {{{*/
+Index: ../trunk-jpl/src/c/toolkits/issm/Bucket.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/Bucket.h	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/issm/Bucket.h	(revision 15838)
+@@ -12,7 +12,7 @@
+ #include "../toolkitsenums.h"
+ /*}}}*/
+ 
+-/*how many MPI_Isend requests does it take to transfer the contents of a bucket to another cpu?*/
++/*how many ISSM_MPI_Isend requests does it take to transfer the contents of a bucket to another cpu?*/
+ #define MATRIXBUCKETSIZEOFREQUESTS 7 
+ #define VECTORBUCKETSIZEOFREQUESTS 5 
+ typedef enum {VECTOR_BUCKET, MATRIX_BUCKET} BucketType;
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 15838)
+@@ -20,9 +20,7 @@
+ #include "../../shared/Exceptions/exceptions.h"
+ #include "../../shared/MemOps/MemOps.h"
+ #include "../../shared/io/io.h"
+-#ifdef _HAVE_MPI_
+-#include "../mpi/mpiincludes.h"
+-#endif
++#include "../mpi/issmmpi.h"
+ #include <math.h>
+ 
+ /*}}}*/
+@@ -137,7 +135,7 @@
+ 					}
+ 					_printf_("\n");
+ 				}
+-				MPI_Barrier(IssmComm::GetComm());
++				ISSM_MPI_Barrier(IssmComm::GetComm());
+ 			}
+ 		}
+ 		/*}}}*/
+@@ -170,7 +168,7 @@
+ 
+ 			/*some communicator info: */
+ 			num_procs=IssmComm::GetSize();
+-			MPI_Comm comm=IssmComm::GetComm();
++			ISSM_MPI_Comm comm=IssmComm::GetComm();
+ 
+ 			/*First, make a vector of size M, which for each row between 0 and M-1, tells which cpu this row belongs to: */
+ 			RowRank=DetermineRowRankFromLocalSize(M,m,comm);
+@@ -198,7 +196,7 @@
+ 			 *some scatter calls: */
+ 			numvalues_fromcpu   = xNew<int>(num_procs);
+ 			for(i=0;i<num_procs;i++){
+-				MPI_Scatter(numvalues_forcpu,1,MPI_INT,numvalues_fromcpu+i,1,MPI_INT,i,comm);
++				ISSM_MPI_Scatter(numvalues_forcpu,1,ISSM_MPI_INT,numvalues_fromcpu+i,1,ISSM_MPI_INT,i,comm);
+ 			}
+ 
+ 			row_indices_fromcpu=xNew<int*>(num_procs);
+@@ -221,8 +219,8 @@
+ 
+ 			/*Scatter values around: {{{*/
+ 			/*Now, to scatter values across the cluster, we need sendcnts and displs. Our sendbufs have been built by BucketsBuildScatterBuffers, with a stride given 
+-			 * by numvalues_forcpu. Get this ready to go before starting the scatter itslef. For reference, here is the MPI_Scatterv prototype: 
+-			 * int MPI_Scatterv( void *sendbuf, int *sendcnts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) :*/
++			 * by numvalues_forcpu. Get this ready to go before starting the scatter itslef. For reference, here is the ISSM_MPI_Scatterv prototype: 
++			 * int ISSM_MPI_Scatterv( void *sendbuf, int *sendcnts, int *displs, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm) :*/
+ 			sendcnts=xNew<int>(num_procs);
+ 			displs=xNew<int>(num_procs);
+ 			count=0;
+@@ -233,9 +231,9 @@
+ 			}
+ 
+ 			for(i=0;i<num_procs;i++){
+-				MPI_Scatterv( row_indices_forcpu, sendcnts, displs, MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], MPI_INT, i, comm);
+-				MPI_Scatterv( values_forcpu, sendcnts, displs, MPI_DOUBLE, values_fromcpu[i], numvalues_fromcpu[i], MPI_DOUBLE, i, comm);
+-				MPI_Scatterv( modes_forcpu, sendcnts, displs, MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], MPI_INT, i, comm);
++				ISSM_MPI_Scatterv( row_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
++				ISSM_MPI_Scatterv( values_forcpu, sendcnts, displs, ISSM_MPI_DOUBLE, values_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_DOUBLE, i, comm);
++				ISSM_MPI_Scatterv( modes_forcpu, sendcnts, displs, ISSM_MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
+ 			}
+ 			/*}}}*/
+ 
+@@ -377,10 +375,10 @@
+ 		doubletype* ToMPISerial(void){
+ 
+ 			/*communicator info: */
+-			MPI_Comm comm;
++			ISSM_MPI_Comm comm;
+ 			int num_procs;
+ 
+-			/*MPI_Allgatherv info: */
++			/*ISSM_MPI_Allgatherv info: */
+ 			int  lower_row,upper_row;
+ 			int* recvcounts=NULL;
+ 			int* displs=NULL;
+@@ -398,16 +396,16 @@
+ 			displs=xNew<int>(num_procs);
+ 
+ 			/*recvcounts:*/
+-			MPI_Allgather(&this->m,1,MPI_INT,recvcounts,1,MPI_INT,comm);
++			ISSM_MPI_Allgather(&this->m,1,ISSM_MPI_INT,recvcounts,1,ISSM_MPI_INT,comm);
+ 
+ 			/*get lower_row: */
+ 			GetOwnershipBoundariesFromRange(&lower_row,&upper_row,this->m,comm);
+ 
+ 			/*displs: */
+-			MPI_Allgather(&lower_row,1,MPI_INT,displs,1,MPI_INT,comm);
++			ISSM_MPI_Allgather(&lower_row,1,ISSM_MPI_INT,displs,1,ISSM_MPI_INT,comm);
+ 
+ 			/*All gather:*/
+-			MPI_Allgatherv(this->vector, this->m, MPI_DOUBLE, buffer, recvcounts, displs, MPI_DOUBLE,comm);
++			ISSM_MPI_Allgatherv(this->vector, this->m, ISSM_MPI_DOUBLE, buffer, recvcounts, displs, ISSM_MPI_DOUBLE,comm);
+ 
+ 			/*free ressources: */
+ 			xDelete<int>(recvcounts);
+@@ -444,15 +442,15 @@
+ 				case NORM_INF:
+ 					//local_norm=0; for(i=0;i<this->m;i++)local_norm=max(local_norm,fabs(this->vector[i]));
+ 					local_norm=0; for(i=0;i<this->m;i++)local_norm=max(local_norm,this->vector[i]);
+-					MPI_Reduce(&local_norm, &norm, 1, MPI_DOUBLE, MPI_MAX, 0, IssmComm::GetComm());
+-					MPI_Bcast(&norm,1,MPI_DOUBLE,0,IssmComm::GetComm());
++					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_MAX, 0, IssmComm::GetComm());
++					ISSM_MPI_Bcast(&norm,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 					return norm;
+ 					break;
+ 				case NORM_TWO:
+ 					local_norm=0; 
+ 					for(i=0;i<this->m;i++)local_norm+=pow(this->vector[i],2);
+-					MPI_Reduce(&local_norm, &norm, 1, MPI_DOUBLE, MPI_SUM, 0, IssmComm::GetComm());
+-					MPI_Bcast(&norm,1,MPI_DOUBLE,0,IssmComm::GetComm());
++					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_SUM, 0, IssmComm::GetComm());
++					ISSM_MPI_Bcast(&norm,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 					return sqrt(norm);
+ 					break;
+ 				default:
+@@ -483,11 +481,9 @@
+ 
+ 			for(i=0;i<this->m;i++)local_dot+=this->vector[i]*input->vector[i];
+ 
+-			#ifdef _HAVE_MPI_
+-			/*MPI_SUM all the dots across the cluster: */
+-			MPI_Reduce(&local_dot, &dot, 1, MPI_DOUBLE, MPI_SUM, 0, IssmComm::GetComm());
+-			MPI_Bcast(&dot,1,MPI_DOUBLE,0,IssmComm::GetComm());
+-			#endif
++			/*ISSM_MPI_SUM all the dots across the cluster: */
++			ISSM_MPI_Reduce(&local_dot, &dot, 1, ISSM_MPI_DOUBLE, ISSM_MPI_SUM, 0, IssmComm::GetComm());
++			ISSM_MPI_Bcast(&dot,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 
+ 			return dot;
+ 		}
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 15838)
+@@ -152,7 +152,7 @@
+ 						_printf_("\n");
+ 					}
+ 				}
+-				MPI_Barrier(IssmComm::GetComm());
++				ISSM_MPI_Barrier(IssmComm::GetComm());
+ 			}
+ 
+ 		}
+@@ -186,7 +186,7 @@
+ 
+ 			/*some communicator info: */
+ 			num_procs=IssmComm::GetSize();
+-			MPI_Comm comm=IssmComm::GetComm();
++			ISSM_MPI_Comm comm=IssmComm::GetComm();
+ 
+ 			/*First, make a vector of size M, which for each row between 0 and M-1, tells which cpu this row belongs to: */
+ 			RowRank=DetermineRowRankFromLocalSize(M,m,comm);
+@@ -214,7 +214,7 @@
+ 			 *some scatter calls: */
+ 			numvalues_fromcpu   = xNew<int>(num_procs);
+ 			for(i=0;i<num_procs;i++){
+-				MPI_Scatter(numvalues_forcpu,1,MPI_INT,numvalues_fromcpu+i,1,MPI_INT,i,comm);
++				ISSM_MPI_Scatter(numvalues_forcpu,1,ISSM_MPI_INT,numvalues_fromcpu+i,1,ISSM_MPI_INT,i,comm);
+ 			}
+ 
+ 			row_indices_fromcpu=xNew<int*>(num_procs);
+@@ -240,8 +240,8 @@
+ 
+ 			/*Scatter values around: {{{*/
+ 			/*Now, to scatter values across the cluster, we need sendcnts and displs. Our sendbufs have been built by BucketsBuildScatterBuffers, with a stride given 
+-			 * by numvalues_forcpu. Get this ready to go before starting the scatter itslef. For reference, here is the MPI_Scatterv prototype: 
+-			 * int MPI_Scatterv( void *sendbuf, int *sendcnts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) :*/
++			 * by numvalues_forcpu. Get this ready to go before starting the scatter itslef. For reference, here is the ISSM_MPI_Scatterv prototype: 
++			 * int ISSM_MPI_Scatterv( void *sendbuf, int *sendcnts, int *displs, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm) :*/
+ 			sendcnts=xNew<int>(num_procs);
+ 			displs=xNew<int>(num_procs);
+ 			count=0;
+@@ -252,10 +252,10 @@
+ 			}
+ 
+ 			for(i=0;i<num_procs;i++){
+-				MPI_Scatterv( row_indices_forcpu, sendcnts, displs, MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], MPI_INT, i, comm);
+-				MPI_Scatterv( col_indices_forcpu, sendcnts, displs, MPI_INT, col_indices_fromcpu[i], numvalues_fromcpu[i], MPI_INT, i, comm);
+-				MPI_Scatterv( values_forcpu, sendcnts, displs, MPI_DOUBLE, values_fromcpu[i], numvalues_fromcpu[i], MPI_DOUBLE, i, comm);
+-				MPI_Scatterv( modes_forcpu, sendcnts, displs, MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], MPI_INT, i, comm);
++				ISSM_MPI_Scatterv( row_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
++				ISSM_MPI_Scatterv( col_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, col_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
++				ISSM_MPI_Scatterv( values_forcpu, sendcnts, displs, ISSM_MPI_DOUBLE, values_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_DOUBLE, i, comm);
++				ISSM_MPI_Scatterv( modes_forcpu, sendcnts, displs, ISSM_MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
+ 			}
+ 			/*}}}*/
+ 
+@@ -329,8 +329,8 @@
+ 						}
+ 						local_norm=max(local_norm,absolute);
+ 					}
+-					MPI_Reduce(&local_norm, &norm, 1, MPI_DOUBLE, MPI_MAX, 0, IssmComm::GetComm());
+-					MPI_Bcast(&norm,1,MPI_DOUBLE,0,IssmComm::GetComm());
++					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_MAX, 0, IssmComm::GetComm());
++					ISSM_MPI_Bcast(&norm,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 					return norm;
+ 					break; 
+ 				case NORM_FROB:
+@@ -340,8 +340,8 @@
+ 							local_norm+=pow(this->matrix[N*i+j],2);
+ 						}
+ 					}
+-					MPI_Reduce(&local_norm, &norm, 1, MPI_DOUBLE, MPI_SUM, 0, IssmComm::GetComm());
+-					MPI_Bcast(&norm,1,MPI_DOUBLE,0,IssmComm::GetComm());
++					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_SUM, 0, IssmComm::GetComm());
++					ISSM_MPI_Bcast(&norm,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 					return sqrt(norm);
+ 					break; 
+ 
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 15838)
+@@ -11,7 +11,7 @@
+ /* Some fortran routines: */
+ #include "../../scalapack/FortranMapping.h"
+ 
+-void PlapackInvertMatrixLocalCleanup(PLA_Obj* pa,PLA_Template* ptempl,double** parrayA,int** pidxnA,MPI_Comm* pcomm_2d);
++void PlapackInvertMatrixLocalCleanup(PLA_Obj* pa,PLA_Template* ptempl,double** parrayA,int** pidxnA,ISSM_MPI_Comm* pcomm_2d);
+ 
+ int PlapackInvertMatrix(Mat* A,Mat* inv_A,int status,int con,COMM comm){ 
+ 	/*inv_A does not yet exist, inv_A was just allocated, that's all*/
+@@ -26,8 +26,8 @@
+ 	MatType type;
+ 
+ 	/*Plapack: */
+-	MPI_Datatype   datatype;
+-	MPI_Comm       comm_2d;
++	ISSM_MPI_Datatype   datatype;
++	ISSM_MPI_Comm       comm_2d;
+ 	PLA_Obj a=NULL;
+ 	PLA_Template   templ;	
+ 	double one=1.0;		
+@@ -84,7 +84,7 @@
+ 	}
+ 
+ 	/* Set the datatype */
+-	datatype = MPI_DOUBLE;
++	datatype = ISSM_MPI_DOUBLE;
+ 
+ 	/* Copy A into a*/
+ 	PLA_Matrix_create(datatype,mA,nA,templ,PLA_ALIGN_FIRST,PLA_ALIGN_FIRST,&a);  
+@@ -122,5 +122,5 @@
+ 
+ 	/*Finalize PLAPACK*/
+ 	PLA_Finalize();
+-	MPI_Comm_free(&comm_2d);
++	ISSM_MPI_Comm_free(&comm_2d);
+ }
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 15838)
+@@ -13,7 +13,7 @@
+ #include <petscvec.h>
+ #include <petscksp.h>
+ 
+-#include "../../mpi/mpiincludes.h"
++#include "../../mpi/issmmpi.h"
+ #include "../../../shared/shared.h"
+ 
+ /*Function prototypes: */
+@@ -53,7 +53,7 @@
+ 	int num_procs;
+ 
+ 	/*recover num_procs:*/
+-	MPI_Comm_size(comm,&num_procs);
++	ISSM_MPI_Comm_size(comm,&num_procs);
+ 
+ 	MatGetLocalSize(A,&local_m,&local_n);;
+ 	VecGetLocalSize(x,&range);;
+@@ -61,8 +61,8 @@
+ 	if (local_n!=range)result=0;
+ 
+ 	/*synchronize result: */
+-	MPI_Reduce (&result,&sumresult,1,MPI_INT,MPI_SUM,0,comm );
+-	MPI_Bcast(&sumresult,1,MPI_INT,0,comm);                
++	ISSM_MPI_Reduce (&result,&sumresult,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,comm );
++	ISSM_MPI_Bcast(&sumresult,1,ISSM_MPI_INT,0,comm);                
+ 	if (sumresult!=num_procs){
+ 		result=0;
+ 	}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 15838)
+@@ -21,15 +21,15 @@
+ 	PetscInt lower_row,upper_row; 
+ 	int range;
+ 	int M,N; //size of matrix
+-	MPI_Status status;
++	ISSM_MPI_Status status;
+ 	int* idxm=NULL;
+ 	int* idxn=NULL; 
+ 	double* local_matrix=NULL; /*matrix local to each node used for temporary holding matrix values*/
+ 	int buffer[3];
+ 
+ 	/*recover my_rank and num_procs:*/
+-	MPI_Comm_size(comm,&num_procs);
+-	MPI_Comm_rank(comm,&my_rank);
++	ISSM_MPI_Comm_size(comm,&num_procs);
++	ISSM_MPI_Comm_rank(comm,&my_rank);
+ 
+ 	/*Output*/
+ 	double* outmatrix=NULL;
+@@ -68,12 +68,12 @@
+ 			buffer[0]=my_rank;
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+-			MPI_Send(buffer,3,MPI_INT,0,1,comm);   
+-			if (range)MPI_Send(local_matrix,N*range,MPI_DOUBLE,0,1,comm); 
++			ISSM_MPI_Send(buffer,3,ISSM_MPI_INT,0,1,comm);   
++			if (range)ISSM_MPI_Send(local_matrix,N*range,ISSM_MPI_DOUBLE,0,1,comm); 
+ 		}
+ 		if (my_rank==0){
+-			MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status); 
+-			if (buffer[2])MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],MPI_DOUBLE,i,1,comm,&status);
++			ISSM_MPI_Recv(buffer,3,ISSM_MPI_INT,i,1,comm,&status); 
++			if (buffer[2])ISSM_MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],ISSM_MPI_DOUBLE,i,1,comm,&status);
+ 		}
+ 	} 
+ 	if (my_rank==0){ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 15838)
+@@ -18,7 +18,7 @@
+ 	int my_rank;
+ 
+ 	/*Petsc*/
+-	MPI_Status status;
++	ISSM_MPI_Status status;
+ 	PetscInt lower_row,upper_row; 
+ 	int range;
+ 	int * idxn=NULL; 
+@@ -34,8 +34,8 @@
+ 	double* gathered_vector=NULL; //Global vector holding the final assembled vector on all nodes.
+ 
+ 	/*recover my_rank and num_procs*/
+-	MPI_Comm_size(comm,&num_procs);
+-	MPI_Comm_rank(comm,&my_rank);
++	ISSM_MPI_Comm_size(comm,&num_procs);
++	ISSM_MPI_Comm_rank(comm,&my_rank);
+ 
+ 	VecGetSize(vector,&vector_size);
+ 	if(vector_size==0){
+@@ -68,12 +68,12 @@
+ 			buffer[0]=my_rank;
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+-			MPI_Send(buffer,3,MPI_INT,0,1,comm);  
+-			if (range)MPI_Send(local_vector,range,MPI_DOUBLE,0,1,comm); 
++			ISSM_MPI_Send(buffer,3,ISSM_MPI_INT,0,1,comm);  
++			if (range)ISSM_MPI_Send(local_vector,range,ISSM_MPI_DOUBLE,0,1,comm); 
+ 		}
+ 		if (my_rank==0){
+-			MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status); 
+-			if (buffer[2])MPI_Recv(gathered_vector+buffer[1],buffer[2],MPI_DOUBLE,i,1,comm,&status);
++			ISSM_MPI_Recv(buffer,3,ISSM_MPI_INT,i,1,comm,&status); 
++			if (buffer[2])ISSM_MPI_Recv(gathered_vector+buffer[1],buffer[2],ISSM_MPI_DOUBLE,i,1,comm,&status);
+ 		}
+ 	}
+ 
+@@ -83,7 +83,7 @@
+ 	}
+ 
+ 	/*Now, broadcast gathered_vector from node 0 to other nodes: */
+-	MPI_Bcast(gathered_vector,vector_size,MPI_DOUBLE,0,comm);
++	ISSM_MPI_Bcast(gathered_vector,vector_size,ISSM_MPI_DOUBLE,0,comm);
+ 
+ 	/*Assign output pointers: */
+ 	*pgathered_vector=gathered_vector;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 15838)
+@@ -14,7 +14,7 @@
+ #include "petscksp.h"
+ 
+ #include "./petscpatches.h"
+-#include "../../mpi/patches/mpipatches.h"
++#include "../../mpi/issmmpi.h"
+ 
+ Vec NewVec(int size,COMM comm,bool fromlocalsize){
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 15838)
+@@ -14,9 +14,8 @@
+ #include <petscksp.h>
+ 
+ #include "./petscpatches.h"
+-
+ #include "../../../shared/shared.h"
+-#include "../../mpi/patches/mpipatches.h"
++#include "../../mpi/issmmpi.h"
+ 
+ /*NewMat(int M,int N){{{*/
+ Mat NewMat(int M,int N,COMM comm){
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15837)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15838)
+@@ -172,7 +172,6 @@
+ 					./shared/io/Print/PrintfFunction.cpp\
+ 					./shared/io/Print/Print.h\
+ 					./shared/io/Comm/Comm.h\
+-					./shared/io/Comm/CommDef.h\
+ 					./shared/io/Comm/IssmComm.h\
+ 					./shared/io/Comm/IssmComm.cpp\
+ 					./shared/LatLong/Ll2xyx.cpp\
+@@ -762,7 +761,7 @@
+ #}}}
+ #Mpi sources  {{{
+ mpi_sources= ./toolkits/mpi/issmmpi.h\
+-				./toolkits/mpi/issmpi.cpp\
++				./toolkits/mpi/issmmpi.cpp\
+ 				./toolkits/mpi/commops/commops.h\
+ 				./toolkits/mpi/commops/DetermineLocalSize.cpp\
+ 				./toolkits/mpi/commops/DetermineGlobalSize.cpp\
+Index: ../trunk-jpl/src/c/classes/Loads/Loads.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Loads.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/Loads/Loads.cpp	(revision 15838)
+@@ -66,10 +66,8 @@
+ 	}
+ 
+ 	/*Grab sum of all cpus: */
+-#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)&ispenalty,(void*)&allispenalty,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
++	ISSM_MPI_Allreduce((void*)&ispenalty,(void*)&allispenalty,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 	ispenalty=allispenalty;
+-#endif
+ 
+ 	if(ispenalty)
+ 	 return true;
+@@ -95,10 +93,8 @@
+ 	}
+ 
+ 	/*Grab max of all cpus: */
+-#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	ISSM_MPI_Allreduce((void*)&max,(void*)&allmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
+ 	max=allmax;
+-#endif
+ 
+ 	return max;
+ }
+@@ -113,12 +109,8 @@
+ 	localloads=this->Size();
+ 
+ 	/*figure out total number of loads combining all the cpus (no clones here)*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&localloads,&numberofloads,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&numberofloads,1,MPI_INT,0,IssmComm::GetComm());
+-	#else
+-	numberofloads=localloads;
+-	#endif
++	ISSM_MPI_Reduce(&localloads,&numberofloads,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&numberofloads,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 
+ 	return numberofloads;
+ }
+@@ -139,12 +131,8 @@
+ 	}
+ 
+ 	/*figure out total number of loads combining all the cpus (no clones here)*/
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&localloads,&numberofloads,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&numberofloads,1,MPI_INT,0,IssmComm::GetComm());
+-#else
+-	numberofloads=localloads;
+-#endif
++	ISSM_MPI_Reduce(&localloads,&numberofloads,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&numberofloads,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 
+ 	return numberofloads;
+ }
+Index: ../trunk-jpl/src/c/classes/Profiler.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Profiler.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/Profiler.cpp	(revision 15838)
+@@ -72,14 +72,12 @@
+ 	/*If mpisync requested, make sure all the cpus are at the same point 
+ 	 *in the execution: */
+ 	if(!dontmpisync){
+-		#ifdef _HAVE_MPI_
+-		MPI_Barrier(IssmComm::GetComm()); 
+-		#endif
++		ISSM_MPI_Barrier(IssmComm::GetComm()); 
+ 	}
+ 
+ 	/*Capture time: */
+ 	#ifdef _HAVE_MPI_
+-	t=MPI_Wtime();
++	t=ISSM_MPI_Wtime();
+ 	#else
+ 	t=(IssmPDouble)clock();
+ 	#endif
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15838)
+@@ -568,9 +568,7 @@
+ 	xDelete<int>(next_l);
+ 
+ 	/*sum over all cpus*/
+-#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,MPI_INT,MPI_SUM,IssmComm::GetComm());
+-#endif
++	ISSM_MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 	xDelete<int>(connectivity_clone);
+ 
+ 	if(set1enum==FsetEnum){
+@@ -964,11 +962,9 @@
+ 	}
+ 
+ 	/*Figure out minimum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce (&min_dt,&node_min_dt,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_min_dt,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&min_dt,&node_min_dt,1,ISSM_MPI_DOUBLE,ISSM_MPI_MIN,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_min_dt,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	min_dt=node_min_dt;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pdt=min_dt;
+@@ -1017,10 +1013,8 @@
+ 		}
+ 	}
+ 
+-#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&mass_flux,(void*)&all_mass_flux,1,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
++	ISSM_MPI_Allreduce ( (void*)&mass_flux,(void*)&all_mass_flux,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 	mass_flux=all_mass_flux;
+-#endif
+ 
+ 	/*Free ressources:*/
+ 	for(i=0;i<M;i++){
+@@ -1051,11 +1045,9 @@
+ 	}
+ 
+ 	/*Figure out maximum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&maxabsvx,&node_maxabsvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxabsvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&maxabsvx,&node_maxabsvx,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_maxabsvx,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxabsvx=node_maxabsvx;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pmaxabsvx=maxabsvx;
+@@ -1077,11 +1069,9 @@
+ 	}
+ 
+ 	/*Figure out maximum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&maxabsvy,&node_maxabsvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxabsvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&maxabsvy,&node_maxabsvy,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_maxabsvy,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxabsvy=node_maxabsvy;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pmaxabsvy=maxabsvy;
+@@ -1103,11 +1093,9 @@
+ 	}
+ 
+ 	/*Figure out maximum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&maxabsvz,&node_maxabsvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxabsvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&maxabsvz,&node_maxabsvz,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_maxabsvz,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxabsvz=node_maxabsvz;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pmaxabsvz=maxabsvz;
+@@ -1129,11 +1117,9 @@
+ 	}
+ 
+ 	/*Figure out maximum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&maxvel,&node_maxvel,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&maxvel,&node_maxvel,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_maxvel,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxvel=node_maxvel;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pmaxvel=maxvel;
+@@ -1155,11 +1141,9 @@
+ 	}
+ 
+ 	/*Figure out maximum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&maxvx,&node_maxvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&maxvx,&node_maxvx,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_maxvx,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxvx=node_maxvx;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pmaxvx=maxvx;
+@@ -1181,11 +1165,9 @@
+ 	}
+ 
+ 	/*Figure out maximum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&maxvy,&node_maxvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&maxvy,&node_maxvy,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_maxvy,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxvy=node_maxvy;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pmaxvy=maxvy;
+@@ -1207,11 +1189,9 @@
+ 	}
+ 
+ 	/*Figure out maximum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&maxvz,&node_maxvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&maxvz,&node_maxvz,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_maxvz,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxvz=node_maxvz;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pmaxvz=maxvz;
+@@ -1233,11 +1213,9 @@
+ 	}
+ 
+ 	/*Figure out minimum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&minvel,&node_minvel,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_minvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&minvel,&node_minvel,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_minvel,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	minvel=node_minvel;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pminvel=minvel;
+@@ -1259,11 +1237,9 @@
+ 	}
+ 
+ 	/*Figure out minimum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&minvx,&node_minvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_minvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&minvx,&node_minvx,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_minvx,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	minvx=node_minvx;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pminvx=minvx;
+@@ -1285,11 +1261,9 @@
+ 	}
+ 
+ 	/*Figure out minimum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&minvy,&node_minvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_minvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&minvy,&node_minvy,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_minvy,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	minvy=node_minvy;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pminvy=minvy;
+@@ -1311,11 +1285,9 @@
+ 	}
+ 
+ 	/*Figure out minimum across the cluster: */
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&minvz,&node_minvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_minvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	ISSM_MPI_Reduce(&minvz,&node_minvz,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_minvz,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	minvz=node_minvz;
+-#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pminvz=minvz;
+@@ -1330,12 +1302,8 @@
+ 		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+ 		local_smb+=element->TotalSmb();
+ 	}
+-#ifdef _HAVE_MPI_
+-	MPI_Reduce(&local_smb,&total_smb,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&total_smb,1,MPI_DOUBLE,0,IssmComm::GetComm());
+-#else
+-	total_smb=local_smb;
+-#endif
++	ISSM_MPI_Reduce(&local_smb,&total_smb,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&total_smb,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 
+ 	/*Assign output pointers: */
+ 	*pSmb=total_smb;
+@@ -1350,12 +1318,8 @@
+ 		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+ 		local_ice_volume+=element->IceVolume();
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&local_ice_volume,&total_ice_volume,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&total_ice_volume,1,MPI_DOUBLE,0,IssmComm::GetComm());
+-	#else
+-	total_ice_volume=local_ice_volume;
+-	#endif
++	ISSM_MPI_Reduce(&local_ice_volume,&total_ice_volume,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&total_ice_volume,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 
+ 	/*Assign output pointers: */
+ 	*pV=total_ice_volume;
+@@ -1385,10 +1349,8 @@
+ 	}
+ 
+ 	/*Broadcast whether we found the element: */
+-#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
++	ISSM_MPI_Allreduce ( &found,&sumfound,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 	if(!sumfound)_error_("could not find material with id" << index << " to compute ElementResponse");
+-#endif
+ 
+ 	/*Ok, we found the element, compute responseocity: */
+ 	if(my_rank==cpu_found){
+@@ -1396,10 +1358,8 @@
+ 	}
+ 
+ 	/*Broadcast and plug into response: */
+-#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
+-	MPI_Bcast(&response,1,MPI_DOUBLE,cpu_found,IssmComm::GetComm()); 
+-#endif
++	ISSM_MPI_Allreduce ( &cpu_found,&cpu_found,1,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
++	ISSM_MPI_Bcast(&response,1,ISSM_MPI_DOUBLE,cpu_found,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers: */
+ 	*presponse=response;
+@@ -1416,11 +1376,9 @@
+ 		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+ 		J+=element->BalancethicknessMisfit(weight_index);
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*presponse=J;
+@@ -1443,11 +1401,9 @@
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+-	#endif
+ 
+ 	/*Assign output pointers: */
+ 	*pJ=J;
+@@ -1652,12 +1608,10 @@
+ 		}
+ 	}
+ 	xDelete<IssmDouble>(serial_active);
+-	#ifdef _HAVE_MPI_
+ 	int sum_counter;
+-	MPI_Reduce(&counter,&sum_counter,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&sum_counter,1,MPI_INT,0,IssmComm::GetComm());                
++	ISSM_MPI_Reduce(&counter,&sum_counter,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_counter,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+ 	counter=sum_counter;
+-	#endif
+ 	if(VerboseSolution()) _printf0_("   Number of active nodes in EPL layer: "<< counter <<"\n");
+ 
+ 	/*Update dof indexings*/
+Index: ../trunk-jpl/src/c/classes/Elements/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 15838)
+@@ -113,15 +113,13 @@
+ 	}
+ 
+ 	/*Synchronize across cluster, so as to not end up with different sizes for each patch on each cpu: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&numvertices,&max_numvertices,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&max_numvertices,1,MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&numvertices,&max_numvertices,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&max_numvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	numvertices=max_numvertices;
+ 
+-	MPI_Reduce (&numnodes,&max_numnodes,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&max_numnodes,1,MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&numnodes,&max_numnodes,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&max_numnodes,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	numnodes=max_numnodes;
+-	#endif
+ 
+ 	/*Ok, initialize Patch object: */
+ 	patch=new Patch(numrows,numvertices,numnodes);
+@@ -185,13 +183,9 @@
+ 		/*No patch here, we prepare vectors*/
+ 
+ 		/*Get rank of first cpu that has results*/
+-		#ifdef _HAVE_MPI_
+ 		if(this->Size()) rank=my_rank;
+ 		else rank=num_procs;
+-		MPI_Allreduce (&rank,&minrank,1,MPI_INT,MPI_MIN,IssmComm::GetComm());
+-		#else
+-		minrank=my_rank;
+-		#endif
++		ISSM_MPI_Allreduce (&rank,&minrank,1,ISSM_MPI_INT,ISSM_MPI_MIN,IssmComm::GetComm());
+ 
+ 		/*see what the first element of this partition has in stock (this is common to all partitions)*/
+ 		if(my_rank==minrank){
+@@ -199,24 +193,20 @@
+ 			Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(0));
+ 			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+ 		}
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&numberofresults,1,MPI_DOUBLE,minrank,IssmComm::GetComm());
+-		#endif
++		ISSM_MPI_Bcast(&numberofresults,1,ISSM_MPI_DOUBLE,minrank,IssmComm::GetComm());
+ 
+ 		/*Get out if there is no results. Otherwise broadcast info*/
+ 		if(!numberofresults) return;
+-		#ifdef _HAVE_MPI_
+ 		if(my_rank!=minrank){
+ 			resultsenums=xNew<int>(numberofresults);
+ 			resultssizes=xNew<int>(numberofresults);
+ 			resultstimes=xNew<IssmDouble>(numberofresults);
+ 			resultssteps=xNew<int>(numberofresults);
+ 		}
+-		MPI_Bcast(resultsenums,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
+-		MPI_Bcast(resultssizes,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
+-		MPI_Bcast(resultstimes,numberofresults,MPI_DOUBLE,minrank,IssmComm::GetComm());
+-		MPI_Bcast(resultssteps,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
+-		#endif
++		ISSM_MPI_Bcast(resultsenums,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
++		ISSM_MPI_Bcast(resultssizes,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
++		ISSM_MPI_Bcast(resultstimes,numberofresults,ISSM_MPI_DOUBLE,minrank,IssmComm::GetComm());
++		ISSM_MPI_Bcast(resultssteps,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+ 
+ 		/*Loop over all results and get nodal vector*/
+ 		for(int i=0;i<numberofresults;i++){
+@@ -298,10 +288,8 @@
+ 	}
+ 
+ 	/*Grab max of all cpus: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	ISSM_MPI_Allreduce((void*)&max,(void*)&allmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
+ 	max=allmax;
+-	#endif
+ 
+ 	return max;
+ }
+@@ -313,11 +301,7 @@
+ 	int numberofelements;
+ 
+ 	local_nelem=this->Size();
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&local_nelem,(void*)&numberofelements,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+-	#else
+-	numberofelements=local_nelem;
+-	#endif
++	ISSM_MPI_Allreduce ( (void*)&local_nelem,(void*)&numberofelements,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 
+ 	return numberofelements;
+ }
+Index: ../trunk-jpl/src/c/classes/Patch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/Patch.cpp	(revision 15838)
+@@ -110,21 +110,15 @@
+ 	int         total_numrows;
+ 	int         node_numrows;
+ 	IssmDouble     *total_values  = NULL;
+-	#ifdef _HAVE_MPI_
+-	MPI_Status  status;
+-	#endif
++	ISSM_MPI_Status  status;
+ 
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 	num_procs=IssmComm::GetSize();
+ 
+ 	/*First, figure out total number of rows combining all the cpus: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&this->numrows,&total_numrows,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&total_numrows,1,MPI_INT,0,IssmComm::GetComm());
+-	#else
+-	total_numrows=this->numrows;
+-	#endif
++	ISSM_MPI_Reduce(&this->numrows,&total_numrows,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&total_numrows,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 
+ 	/*return if patch empty*/
+ 	if(total_numrows==0) return;
+@@ -140,19 +134,17 @@
+ 	}
+ 
+ 	/*Now, ask other nodes to send their values: */
+-	#ifdef _HAVE_MPI_
+ 	for(int i=1;i<num_procs;i++){
+ 		if (my_rank==i){ 
+-			MPI_Send(&this->numrows,1,MPI_INT,0,1,IssmComm::GetComm());   
+-			if (this->numrows)MPI_Send(this->values,this->numrows*this->numcols,MPI_DOUBLE,0,1,IssmComm::GetComm()); 
++			ISSM_MPI_Send(&this->numrows,1,ISSM_MPI_INT,0,1,IssmComm::GetComm());   
++			if (this->numrows)ISSM_MPI_Send(this->values,this->numrows*this->numcols,ISSM_MPI_DOUBLE,0,1,IssmComm::GetComm()); 
+ 		}
+ 		if (my_rank==0){
+-			MPI_Recv(&node_numrows,1,MPI_INT,i,1,IssmComm::GetComm(),&status); 
+-			if (node_numrows)MPI_Recv(total_values+count,node_numrows*this->numcols,MPI_DOUBLE,i,1,IssmComm::GetComm(),&status);
++			ISSM_MPI_Recv(&node_numrows,1,ISSM_MPI_INT,i,1,IssmComm::GetComm(),&status); 
++			if (node_numrows)ISSM_MPI_Recv(total_values+count,node_numrows*this->numcols,ISSM_MPI_DOUBLE,i,1,IssmComm::GetComm(),&status);
+ 			count+=node_numrows*this->numcols;
+ 		}
+ 	}	
+-	#endif
+ 
+ 	/*Now, node 0 has total_values, of size total_numrows*this->numcols. Update the fields in the patch, to reflect this new 
+ 	 * reality. For other cpus, no point in keeping their data anymore: */
+@@ -161,10 +153,8 @@
+ 		xDelete<IssmDouble>(this->values);
+ 		this->values=total_values;
+ 	}
+-	#ifdef _HAVE_MPI_
+ 	else{
+ 		this->numrows=0;
+ 		xDelete<IssmDouble>(this->values);
+ 	}
+-	#endif
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15838)
+@@ -64,12 +64,8 @@
+ 	 * cpus by the total last dofs of the previus cpu, starting from 0.
+ 	 * First: get number of dofs for each cpu*/
+ 	alldofcount=xNew<int>(num_procs);
+-	#ifdef _HAVE_MPI_
+-	MPI_Gather(&dofcount,1,MPI_INT,alldofcount,1,MPI_INT,0,IssmComm::GetComm());
+-	MPI_Bcast(alldofcount,num_procs,MPI_INT,0,IssmComm::GetComm());
+-	#else
+-	alldofcount[0]=dofcount;
+-	#endif
++	ISSM_MPI_Gather(&dofcount,1,ISSM_MPI_INT,alldofcount,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(alldofcount,num_procs,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 
+ 	/* Every cpu should start its own dof count at the end of the dofcount from cpu-1*/
+ 	dofcount=0;
+@@ -101,11 +97,7 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)truedofs,(void*)alltruedofs,numnodes*maxdofspernode,MPI_INT,MPI_MAX,IssmComm::GetComm());
+-	#else
+-	for(i=0;i<numnodes*maxdofspernode;i++)alltruedofs[i]=truedofs[i];
+-	#endif
++	ISSM_MPI_Allreduce((void*)truedofs,(void*)alltruedofs,numnodes*maxdofspernode,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
+ 
+ 	/* Now every cpu knows the true dofs of everyone else that is not a clone*/
+ 	for (i=0;i<this->Size();i++){
+@@ -146,11 +138,7 @@
+ 	 * when we start building the dof list for all vertexs, a cpu can check whether its vertex already has been 
+ 	 * dealt with by another cpu. We take the minimum because we are going to manage dof assignment in increasing 
+ 	 * order of cpu rank. This is also why we initialized this array to num_procs.*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)ranks,(void*)minranks,numnodes,MPI_INT,MPI_MIN,IssmComm::GetComm());
+-	#else
+-	for(i=0;i<numnodes;i++)minranks[i]=ranks[i];
+-	#endif
++	ISSM_MPI_Allreduce((void*)ranks,(void*)minranks,numnodes,ISSM_MPI_INT,ISSM_MPI_MIN,IssmComm::GetComm());
+ 
+ 	/*Now go through all objects, and use minranks to flag which objects are cloned: */
+ 	for(i=0;i<this->Size();i++){
+@@ -191,10 +179,8 @@
+ 	}
+ 
+ 	/*Grab max of all cpus: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	ISSM_MPI_Allreduce((void*)&max,(void*)&allmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
+ 	max=allmax;
+-	#endif
+ 
+ 	return max;
+ }
+@@ -224,10 +210,8 @@
+ 	}
+ 
+ 	/*Grab max of all cpus: */
+-#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	ISSM_MPI_Allreduce((void*)&max,(void*)&allmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
+ 	max=allmax;
+-#endif
+ 
+ 	return max;
+ }
+@@ -241,11 +225,7 @@
+ 	int numdofs=this->NumberOfDofsLocal(analysis_type,setenum);
+ 
+ 	/*Gather from all cpus: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&numdofs,(void*)&allnumdofs,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+-	#else
+-	allnumdofs=numdofs;
+-	#endif
++	ISSM_MPI_Allreduce ( (void*)&numdofs,(void*)&allnumdofs,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 	return allnumdofs;
+ }
+ /*}}}*/
+@@ -289,11 +269,7 @@
+ 	}
+ 
+ 	/*Gather from all cpus: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&numnodes,(void*)&allnumnodes,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+-	#else
+-	allnumnodes=numnodes;
+-	#endif
++	ISSM_MPI_Allreduce ( (void*)&numnodes,(void*)&allnumnodes,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 
+ 	return allnumnodes;
+ }
+@@ -319,11 +295,9 @@
+ 		}
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&max_sid,&node_max_sid,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_max_sid,1,MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&max_sid,&node_max_sid,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&node_max_sid,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	max_sid=node_max_sid;
+-	#endif
+ 
+ 	/*sid starts at 0*/
+ 	max_sid++;
+Index: ../trunk-jpl/src/c/classes/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 15838)
+@@ -110,9 +110,7 @@
+ 		/*Now, before we even broadcast this to other nodes, declare the scalar  as an independent variable!: */
+ 		scalar<<=pscalar;
+ 
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&scalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-		#endif
++		ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 		/*Ok, we are almost done. scalar is now an independent variable. We don't want this variable to be fetched again in the 
+ 		 *future, which would effectively write over the independency in the ADOLC tape! So we are going to keep track of this 
+@@ -144,16 +142,12 @@
+ 		if(my_rank==0){  
+ 			if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 		}
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+-		#endif
++		ISSM_MPI_Bcast(&M,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 		if(my_rank==0){  
+ 			if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 		}
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&N,1,MPI_INT,0,IssmComm::GetComm()); 
+-		#endif
++		ISSM_MPI_Bcast(&N,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 		/*Now allocate matrix: */
+ 		if(M*N){
+@@ -167,9 +161,7 @@
+ 				/*Now, before we even broadcast this to other nodes, declare the whole matrix as a independent variable!: */
+ 				for (int i=0;i<M*N;++i) matrix[i]<<=buffer[i];  /*we use the <<= ADOLC overloaded operator to declare the independency*/
+ 			}
+-			#ifdef _HAVE_MPI_
+-			MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-			#endif
++			ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 			xDelete<IssmPDouble>(buffer);
+ 		}
+Index: ../trunk-jpl/src/c/classes/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Vertices.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/Vertices.cpp	(revision 15838)
+@@ -63,12 +63,8 @@
+ 	 * cpus by the total last pids of the previus cpu, starting from 0.
+ 	 * First: get number of pids for each cpu*/
+ 	allpidcount=xNew<int>(num_procs);
+-	#ifdef _HAVE_MPI_
+-	MPI_Gather(&pidcount,1,MPI_INT,allpidcount,1,MPI_INT,0,IssmComm::GetComm());
+-	MPI_Bcast(allpidcount,num_procs,MPI_INT,0,IssmComm::GetComm());
+-	#else
+-	allpidcount[0]=pidcount;
+-	#endif
++	ISSM_MPI_Gather(&pidcount,1,ISSM_MPI_INT,allpidcount,1,ISSM_MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Bcast(allpidcount,num_procs,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 
+ 	/* Every cpu should start its own pid count at the end of the pidcount from cpu-1*/
+ 	pidcount=0;
+@@ -91,11 +87,7 @@
+ 		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+ 		vertex->ShowTruePids(truepids);
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)truepids,(void*)alltruepids,numberofobjects,MPI_INT,MPI_MAX,IssmComm::GetComm());
+-	#else
+-	for(i=0;i<numberofobjects;i++)alltruepids[i]=truepids[i];
+-	#endif
++	ISSM_MPI_Allreduce((void*)truepids,(void*)alltruepids,numberofobjects,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
+ 
+ 	/* Now every cpu knows the true pids of everyone else that is not a clone*/
+ 	for(i=0;i<this->Size();i++){
+@@ -134,11 +126,7 @@
+ 	 * when we start building the dof list for all vertexs, a cpu can check whether its vertex already has been 
+ 	 * dealt with by another cpu. We take the minimum because we are going to manage dof assignment in increasing 
+ 	 * order of cpu rank. This is also why we initialized this array to num_procs.*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)ranks,(void*)minranks,numberofobjects,MPI_INT,MPI_MIN,IssmComm::GetComm());
+-	#else
+-	for(i=0;i<numberofobjects;i++)minranks[i]=ranks[i];
+-	#endif
++	ISSM_MPI_Allreduce ( (void*)ranks,(void*)minranks,numberofobjects,ISSM_MPI_INT,ISSM_MPI_MIN,IssmComm::GetComm());
+ 
+ 	/*Now go through all objects, and use minranks to flag which objects are cloned: */
+ 	for(i=0;i<this->Size();i++){
+@@ -166,11 +154,9 @@
+ 		if (sid>max_sid)max_sid=sid;
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&max_sid,&vertex_max_sid,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&vertex_max_sid,1,MPI_INT,0,IssmComm::GetComm());
++	ISSM_MPI_Reduce (&max_sid,&vertex_max_sid,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&vertex_max_sid,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 	max_sid=vertex_max_sid;
+-	#endif
+ 
+ 	/*sid starts at 0*/
+ 	max_sid++;
+Index: ../trunk-jpl/src/c/classes/Constraints/Constraints.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/Constraints.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/Constraints/Constraints.cpp	(revision 15838)
+@@ -28,12 +28,8 @@
+ 	localconstraints=this->Size();
+ 
+ 	/*figure out total number of constraints combining all the cpus (no clones here)*/
+-	#ifdef _HAVE_MPI_
+-		MPI_Reduce(&localconstraints,&numberofconstraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+-		MPI_Bcast(&numberofconstraints,1,MPI_INT,0,IssmComm::GetComm());
+-	#else
+-		numberofconstraints=localconstraints;
+-	#endif
++	ISSM_MPI_Reduce(&localconstraints,&numberofconstraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&numberofconstraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 
+ 	return numberofconstraints;
+ }
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15837)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 15838)
+@@ -342,9 +342,7 @@
+ 
+ 				/*Ok, we have reached the end of the file. break: */
+ 				record_code=0; //0 means bailout
+-				#ifdef _HAVE_MPI_
+-				MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm());  /*tell others cpus we are bailing: */
+-				#endif
++				ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm());  /*tell others cpus we are bailing: */
+ 				break;
+ 			}
+ 			else{
+@@ -353,22 +351,18 @@
+ 				if(fread(&record_length,sizeof(int),1,this->fid)!=1) _error_("Cound not read record_length");
+ 				if(fread(&record_code  ,sizeof(int),1,this->fid)!=1) _error_("Cound not read record_code");
+ 
+-				#ifdef _HAVE_MPI_
+ 				/*Tell other cpus what we are doing: */
+-				MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm());  /*tell other cpus what we are going to do: */
++				ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm());  /*tell other cpus what we are going to do: */
+ 
+ 				/*Tell other cpus the name of the data, then branch according to the data type: */
+-				MPI_Bcast(&record_enum,1,MPI_INT,0,IssmComm::GetComm());  
+-				MPI_Bcast(&record_length,1,MPI_INT,0,IssmComm::GetComm());  
+-				#endif
++				ISSM_MPI_Bcast(&record_enum,1,ISSM_MPI_INT,0,IssmComm::GetComm());  
++				ISSM_MPI_Bcast(&record_length,1,ISSM_MPI_INT,0,IssmComm::GetComm());  
+ 
+ 				switch(record_code){
+ 					case 1: 
+ 						/*Read the boolean and broadcast it to other cpus:*/
+ 						if(fread(&booleanint,sizeof(int),1,this->fid)!=1) _error_("could not read boolean ");
+-						#ifdef _HAVE_MPI_
+-						MPI_Bcast(&booleanint,1,MPI_INT,0,IssmComm::GetComm()); 
+-						#endif
++						ISSM_MPI_Bcast(&booleanint,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 						/*create BoolParam: */
+ 						this->constants->AddObject(new BoolParam(record_enum,(bool)booleanint)); //cast to boolean
+@@ -377,9 +371,7 @@
+ 					case 2:
+ 						/*Read the integer and broadcast it to other cpus:*/
+ 						if(fread(&integer,sizeof(int),1,this->fid)!=1) _error_("could not read integer ");
+-						#ifdef _HAVE_MPI_
+-						MPI_Bcast(&integer,1,MPI_INT,0,IssmComm::GetComm()); 
+-						#endif
++						ISSM_MPI_Bcast(&integer,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 						/*create IntParam: */
+ 						this->constants->AddObject(new IntParam(record_enum,integer));
+@@ -394,9 +386,7 @@
+ 						}
+ 						else{
+ 							if(fread(&pscalar,sizeof(IssmPDouble),1,this->fid)!=1) _error_("could not read scalar ");
+-							#ifdef _HAVE_MPI_
+-							MPI_Bcast(&pscalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-							#endif
++							ISSM_MPI_Bcast(&pscalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 							scalar=reCast<IssmDouble>(pscalar);
+ 						}
+ 
+@@ -407,9 +397,7 @@
+ 					case 4: 
+ 						/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+ 						if(fread(&string_size,sizeof(int),1,this->fid)!=1) _error_("could not read length of string ");
+-						#ifdef _HAVE_MPI_
+-						MPI_Bcast(&string_size,1,MPI_INT,0,IssmComm::GetComm()); 
+-						#endif
++						ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 						if(string_size){
+ 							string=xNew<char>(string_size+1);
+@@ -417,9 +405,7 @@
+ 
+ 							/*Read string, then broadcast: */
+ 							if(fread(string,string_size*sizeof(char),1,this->fid)!=1)_error_(" could not read string ");
+-							#ifdef _HAVE_MPI_
+-							MPI_Bcast(string,string_size,MPI_CHAR,0,IssmComm::GetComm()); 
+-							#endif
++							ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+ 						}
+ 						else{
+ 							string=xNew<char>(1);
+@@ -473,20 +459,19 @@
+ 			}
+ 		}
+ 	} //}}}
+-	#ifdef _HAVE_MPI_
+ 	else{ //cpu ~0 {{{
+ 		for(;;){ //wait on cpu 0
+-			MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm());  /*get from cpu 0 what we are going to do: */
++			ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm());  /*get from cpu 0 what we are going to do: */
+ 			if(record_code==0){
+ 				break; //we are done, break from the loop
+ 			}
+ 			else{
+-				MPI_Bcast(&record_enum,1,MPI_INT,0,IssmComm::GetComm());   //get from cpu 0 name of the data
+-				MPI_Bcast(&record_length,1,MPI_INT,0,IssmComm::GetComm());  
++				ISSM_MPI_Bcast(&record_enum,1,ISSM_MPI_INT,0,IssmComm::GetComm());   //get from cpu 0 name of the data
++				ISSM_MPI_Bcast(&record_length,1,ISSM_MPI_INT,0,IssmComm::GetComm());  
+ 				switch(record_code){
+ 				case 1: 
+ 					/*boolean. get it from cpu 0 */
+-					MPI_Bcast(&booleanint,1,MPI_INT,0,IssmComm::GetComm()); 
++					ISSM_MPI_Bcast(&booleanint,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 					/*create BoolParam: */
+ 					this->constants->AddObject(new BoolParam(record_enum,(bool)booleanint)); //cast to a boolean
+@@ -494,7 +479,7 @@
+ 
+ 				case 2:
+ 					/*integer. get it from cpu 0 */
+-					MPI_Bcast(&integer,1,MPI_INT,0,IssmComm::GetComm()); 
++					ISSM_MPI_Bcast(&integer,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 					/*create IntParam: */
+ 					this->constants->AddObject(new IntParam(record_enum,integer));
+@@ -502,20 +487,20 @@
+ 					break;
+ 				case 3:
+ 					/*scalar. get it from cpu 0 */
+-					MPI_Bcast(&scalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
++					ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 					/*create DoubleParam: */
+ 					this->constants->AddObject(new DoubleParam(record_enum,scalar));
+ 
+ 					break;
+ 				case 4: 
+-					MPI_Bcast(&string_size,1,MPI_INT,0,IssmComm::GetComm()); 
++					ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 					if(string_size){
+ 						string=xNew<char>((string_size+1));
+ 						string[string_size]='\0';
+ 
+ 						/*Read string from cpu 0: */
+-						MPI_Bcast(string,string_size,MPI_CHAR,0,IssmComm::GetComm()); 
++						ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+ 					}
+ 					else{
+ 						string=xNew<char>(1);
+@@ -542,7 +527,6 @@
+ 			}
+ 		}
+ 	} //}}}
+-	#endif
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::FetchData(bool*     pbool,int data_enum){{{*/
+@@ -566,9 +550,7 @@
+ 	if(my_rank==0){  
+ 		if(fread(&booleanint,sizeof(int),1,fid)!=1) _error_("could not read boolean ");
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&booleanint,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&booleanint,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*cast to bool: */
+ 	/*Assign output pointers: */
+@@ -598,9 +580,7 @@
+ 		if(fread(&integer,sizeof(int),1,fid)!=1) _error_("could not read integer ");
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&integer,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&integer,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers: */
+ 	*pinteger=integer;
+@@ -627,9 +607,7 @@
+ 	if(my_rank==0){
+ 		if(fread(&scalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&scalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers: */
+ 	*pscalar=scalar;
+@@ -661,9 +639,7 @@
+ 		if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&string_size,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Now allocate string: */
+ 	if(string_size){
+@@ -674,9 +650,7 @@
+ 		if(my_rank==0){  
+ 			if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 		}
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(string,string_size,MPI_CHAR,0,IssmComm::GetComm()); 
+-		#endif
++		ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+ 	}
+ 	else{
+ 		string=xNew<char>(1);
+@@ -715,16 +689,12 @@
+ 		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 	}
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&M,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	if(my_rank==0){  
+ 		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&N,1,MPI_INT,0,IssmComm::GetComm());
+-	#endif
++	ISSM_MPI_Bcast(&N,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+ 
+ 	/*Now allocate matrix: */
+ 	if(M*N){
+@@ -735,9 +705,7 @@
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+ 
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-		#endif
++		ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 	}
+ 
+ 	/*Now cast to integer: */
+@@ -786,16 +754,12 @@
+ 	if(my_rank==0){  
+ 		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&M,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	if(my_rank==0){  
+ 		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&N,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&N,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Now allocate matrix: */
+ 	if(M*N){
+@@ -805,9 +769,7 @@
+ 		if(my_rank==0){  
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-		#endif
++		ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 		_assert_(this->independents);
+ 		if (this->independents[data_enum]){
+@@ -856,9 +818,7 @@
+ 	if(my_rank==0){  
+ 		if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_("could not read length of string array");
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&numstrings,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&numstrings,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Now allocate string array: */
+ 	if(numstrings){
+@@ -871,9 +831,7 @@
+ 			if(my_rank==0){  
+ 				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 			}
+-			#ifdef _HAVE_MPI_
+-			MPI_Bcast(&string_size,1,MPI_INT,0,IssmComm::GetComm()); 
+-			#endif
++			ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 			if(string_size){
+ 				string=xNew<char>((string_size+1));
+ 				string[string_size]='\0';
+@@ -882,9 +840,7 @@
+ 				if(my_rank==0){  
+ 					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 				}
+-				#ifdef _HAVE_MPI_
+-				MPI_Bcast(string,string_size,MPI_CHAR,0,IssmComm::GetComm()); 
+-				#endif
++				ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+ 			}
+ 			else{
+ 				string=xNew<char>(1);
+@@ -929,9 +885,7 @@
+ 	if(my_rank==0){  
+ 		if(fread(&numrecords,sizeof(int),1,fid)!=1) _error_("could not read number of records in matrix array ");
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&numrecords,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&numrecords,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	if(numrecords){
+ 
+@@ -952,16 +906,12 @@
+ 			if(my_rank==0){  
+ 				if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows in " << i << "th matrix of matrix array");
+ 			}
+-			#ifdef _HAVE_MPI_
+-			MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+-			#endif
++			ISSM_MPI_Bcast(&M,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 			if(my_rank==0){  
+ 				if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns in " << i << "th matrix of matrix array");
+ 			}
+-			#ifdef _HAVE_MPI_
+-			MPI_Bcast(&N,1,MPI_INT,0,IssmComm::GetComm()); 
+-			#endif
++			ISSM_MPI_Bcast(&N,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 			/*Now allocate matrix: */
+ 			if(M*N){
+@@ -972,9 +922,7 @@
+ 					if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 				}
+ 
+-				#ifdef _HAVE_MPI_
+-				MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-				#endif
++				ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 				matrices[i]=xNew<IssmDouble>(M*N);
+ 				for (int j=0;j<M*N;++j) {matrices[i][j]=matrix[j];}
+ 				xDelete<IssmPDouble>(matrix);
+@@ -1306,9 +1254,7 @@
+ 		}
+ 	}
+ 	/*Broadcast code and vector type: */
+-#ifdef _HAVE_MPI_
+-	MPI_Bcast(&lastindex,1,MPI_INT,0,IssmComm::GetComm()); 
+-#endif
++	ISSM_MPI_Bcast(&lastindex,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+ 	*pindex=lastindex;
+@@ -1364,17 +1310,13 @@
+ 			}
+ 		}
+ 	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&found,1,MPI_INT,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(&found,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 	if(!found)_error_("could not find data with name " << EnumToStringx(data_enum) << " in binary file");
+-	#endif
+ 
+ 	/*Broadcast code and vector type: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm()); 
+-	MPI_Bcast(&vector_type,1,MPI_INT,0,IssmComm::GetComm()); 
+-	if(record_code==5) MPI_Bcast(&vector_type,1,MPI_INT,0,IssmComm::GetComm()); 
+-	#endif
++	ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(&vector_type,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++	if(record_code==5) ISSM_MPI_Bcast(&vector_type,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+ 	*pcode=record_code;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15838-15839.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15838-15839.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15838-15839.diff	(revision 16134)
@@ -0,0 +1,538 @@
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 15838)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 15839)
+@@ -12,7 +12,7 @@
+ template <class doubletype> class Matrix;
+ template <class doubletype> class Vector;
+ 
+-#include "../shared/io/Comm/Comm.h"
++#include "../shared/io/Comm/IssmComm.h"
+ #include "../shared/Numerics/types.h"
+ 
+ /*cores: */
+@@ -45,7 +45,7 @@
+ void ProcessArguments(int* solution,char** pbinname,char** poutbinname,char** ptoolkitsname,char** plockname,char** prootpath,int argc,char **argv);
+ void WriteLockFile(char* filename);
+ void ResetBoundaryConditions(FemModel* femmodel, int analysis_type);
+-COMM EnvironmentInit(int argc,char** argv);
++ISSM_MPI_Comm EnvironmentInit(int argc,char** argv);
+ void EnvironmentFinalize(void);
+ void PrintBanner(void);
+ 
+Index: ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp	(revision 15839)
+@@ -9,10 +9,10 @@
+ #include <stdio.h>
+ #include "../toolkits/toolkits.h"
+ 
+-COMM EnvironmentInit(int argc,char** argv){
++ISSM_MPI_Comm EnvironmentInit(int argc,char** argv){
+ 
+ 	/*Output*/
+-	COMM comm = 0;
++	ISSM_MPI_Comm comm = 0;
+ 
+ 	/*Initialize MPI environment: */
+ 	#if defined(_HAVE_MPI_)
+Index: ../trunk-jpl/src/c/main/globals.h
+===================================================================
+--- ../trunk-jpl/src/c/main/globals.h	(revision 15838)
++++ ../trunk-jpl/src/c/main/globals.h	(revision 15839)
+@@ -5,11 +5,11 @@
+ #ifndef _GLOBALS_H_
+ #define _GLOBALS_H_
+ 
+-#include "../shared/io/Comm/Comm.h"
++#include "../shared/io/Comm/IssmComm.h"
+ #include "../toolkits/ToolkitOptions.h"
+ 
+ /*Communicators: */
+-COMM IssmComm::comm;
++ISSM_MPI_Comm IssmComm::comm;
+ bool IssmComm::parallel;
+ 
+ /*String that is used to characterize our toolkits, ends up in Petsc Options
+Index: ../trunk-jpl/src/c/main/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/kriging.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/main/kriging.cpp	(revision 15839)
+@@ -38,7 +38,7 @@
+ 	ExceptionTrapBegin();
+ 
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+-	COMM comm=EnvironmentInit(argc,argv);
++	ISSM_MPI_Comm comm=EnvironmentInit(argc,argv);
+ 	IssmComm::SetComm(comm);
+ 
+ 	ProcessArguments2(&binfilename,&outbinfilename,&lockfilename,&rootpath,argc,argv);
+Index: ../trunk-jpl/src/c/main/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/issm.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/main/issm.cpp	(revision 15839)
+@@ -10,7 +10,7 @@
+ 	ExceptionTrapBegin();
+ 
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+-	COMM comm_init=EnvironmentInit(argc,argv);
++	ISSM_MPI_Comm comm_init=EnvironmentInit(argc,argv);
+ 
+ 	/*Initialize femmodel from arguments provided command line: */
+ 	FemModel *femmodel = new FemModel(argc,argv,comm_init);
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 15839)
+@@ -10,7 +10,7 @@
+ 
+ #include "./exceptions.h"
+ #include "../io/Print/Print.h"
+-#include "../io/Comm/Comm.h"
++#include "../io/Comm/IssmComm.h"
+ 
+ ErrorException::ErrorException(const string &what_arg){/*{{{*/
+ 
+Index: ../trunk-jpl/src/c/shared/io/Disk/WriteLockFile.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Disk/WriteLockFile.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/shared/io/Disk/WriteLockFile.cpp	(revision 15839)
+@@ -3,7 +3,7 @@
+  */ 
+ #include <cstdio>
+ #include "../../Exceptions/exceptions.h"
+-#include "../Comm/Comm.h"
++#include "../Comm/IssmComm.h"
+ #include "../Print/Print.h"
+ #include <cstdio>
+ 
+Index: ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/shared/io/Disk/pfopen.cpp	(revision 15839)
+@@ -10,7 +10,7 @@
+ 
+ #include <stdio.h>
+ #include "../Print/Print.h"
+-#include "../Comm/Comm.h"
++#include "../Comm/IssmComm.h"
+ #include "../../Exceptions/exceptions.h"
+ 
+ FILE* pfopen0(char* filename,const char* format){
+Index: ../trunk-jpl/src/c/shared/io/Comm/Comm.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Comm/Comm.h	(revision 15838)
++++ ../trunk-jpl/src/c/shared/io/Comm/Comm.h	(revision 15839)
+@@ -1,11 +0,0 @@
+-/*\file Comm.h
+- *\brief: communicator information
+- */
+-
+-#ifndef _IO_COMM_H_
+-#define _IO_COMM_H_
+-
+-#include "../../../toolkits/mpi/issmmpi.h"
+-#include "./IssmComm.h"
+-
+-#endif
+Index: ../trunk-jpl/src/c/shared/io/Comm/IssmComm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Comm/IssmComm.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/shared/io/Comm/IssmComm.cpp	(revision 15839)
+@@ -12,7 +12,7 @@
+ #include "../../Numerics/types.h"
+ #include "../../Exceptions/exceptions.h"
+ 
+-void IssmComm::SetComm(ISSM_MPI_COMM incomm){ /*{{{*/
++void IssmComm::SetComm(ISSM_MPI_Comm incomm){ /*{{{*/
+ 
+ 	/*A comm is provided, we are running in parallel (this is not a module)*/
+ 	parallel = true;
+@@ -27,7 +27,7 @@
+ 	/*No need to initialise comm*/
+ 
+ }/*}}}*/
+-ISSM_MPI_COMM IssmComm::GetComm(){  /*{{{*/
++ISSM_MPI_Comm IssmComm::GetComm(){  /*{{{*/
+ 	if(!parallel) _error_("Cannot return comm in serial mode");
+ 	return comm;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/shared/io/Comm/IssmComm.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Comm/IssmComm.h	(revision 15838)
++++ ../trunk-jpl/src/c/shared/io/Comm/IssmComm.h	(revision 15839)
+@@ -13,7 +13,7 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-#include "./CommDef.h"
++#include "../../../toolkits/mpi/issmmpi.h"
+ 
+ /*}}}*/
+ 
+@@ -24,9 +24,9 @@
+ 		static bool parallel;
+ 
+ 	public:
+-		static void SetComm(ISSM_MPI_COMM incomm);
++		static void SetComm(ISSM_MPI_Comm incomm);
+ 		static void SetComm(void);
+-		static ISSM_MPI_COMM GetComm(void);
++		static ISSM_MPI_Comm GetComm(void);
+ 		static int GetRank(void);
+ 		static int GetSize(void);
+ };
+Index: ../trunk-jpl/src/c/shared/io/Print/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Print/PrintfFunction.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/shared/io/Print/PrintfFunction.cpp	(revision 15839)
+@@ -15,7 +15,7 @@
+ #include <android/log.h>
+ #endif
+ #include "./Print.h"
+-#include "../Comm/Comm.h"
++#include "../Comm/IssmComm.h"
+ #include "../../String/sharedstring.h"
+ #include "../../MemOps/MemOps.h"
+ 
+Index: ../trunk-jpl/src/c/shared/io/io.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/io.h	(revision 15838)
++++ ../trunk-jpl/src/c/shared/io/io.h	(revision 15839)
+@@ -13,6 +13,6 @@
+ 
+ #include "./Disk/diskio.h"
+ #include "./Print/Print.h"
+-#include "./Comm/Comm.h"
++#include "./Comm/IssmComm.h"
+ 
+ #endif	/* _IO_H_ */
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 15839)
+@@ -19,7 +19,6 @@
+ 	#else 
+ 		#include <mpi.h>
+ 	#endif
+-	#include "./commops/commops.h"
+ 	/*}}}*/
+ 	/*MPI defines: *{{{*/
+ 	// types
+@@ -49,6 +48,9 @@
+ 	#define ISSM_MPI_STATUS_IGNORE MPI_STATUS_IGNORE
+ 	#define ISSM_MPI_ANY_TAG       MPI_ANY_TAG
+ 	#define ISSM_MPI_ANY_SOURCE    MPI_ANY_SOURCE
++	
++    /*other include files: */
++	#include "./commops/commops.h"
+ 	/*}}}*/
+ #else  
+ 	/*Our ISSM MPI defines: {{{*/
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp	(revision 15839)
+@@ -6,7 +6,7 @@
+ #include <math.h>
+ #include "../../../shared/shared.h"
+ 
+-int DetermineLocalSize(int global_size,COMM comm){
++int DetermineLocalSize(int global_size,ISSM_MPI_Comm comm){
+ 
+ 	/*output: */
+ 	int  local_size;
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/commops.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/commops.h	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/commops.h	(revision 15839)
+@@ -6,11 +6,12 @@
+ #define MPI_PATCHES_H_
+ 
+ #include "../../../shared/Numerics/types.h" 
+-#include "../../../shared/io/Comm/Comm.h"
++#include "../../../shared/io/Comm/IssmComm.h"
++#include "../../mpi/issmmpi.h"
+ 
+-int DetermineLocalSize(int global_size,COMM comm);
+-int* DetermineRowRankFromLocalSize(int global_size,int localsize,COMM comm);
+-void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm);
+-int DetermineGlobalSize(int local_size,COMM comm);
++int DetermineLocalSize(int global_size,ISSM_MPI_Comm comm);
++int* DetermineRowRankFromLocalSize(int global_size,int localsize,ISSM_MPI_Comm comm);
++void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,ISSM_MPI_Comm comm);
++int DetermineGlobalSize(int local_size,ISSM_MPI_Comm comm);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp	(revision 15839)
+@@ -7,7 +7,7 @@
+ #include "../../../shared/shared.h"
+ #include "../../../shared/Numerics/types.h"
+ 
+-int DetermineGlobalSize(int local_size,COMM comm){
++int DetermineGlobalSize(int local_size,ISSM_MPI_Comm comm){
+ 
+ 	/*output: */
+ 	int  global_size;
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp	(revision 15839)
+@@ -9,7 +9,7 @@
+ #include "../../../shared/shared.h"
+ #include "../../../shared/Numerics/types.h"
+ 
+-int* DetermineRowRankFromLocalSize(int global_size,int localsize,COMM comm){
++int* DetermineRowRankFromLocalSize(int global_size,int localsize,ISSM_MPI_Comm comm){
+ 
+ 	/*intermediary: */
+ 	int i,j;
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp	(revision 15839)
+@@ -11,9 +11,9 @@
+ 
+ #include <stdio.h>
+ #include "../../../shared/MemOps/MemOps.h"
+-#include "../../../shared/io/Comm/Comm.h"
++#include "../../../shared/io/Comm/IssmComm.h"
+ 
+-void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
++void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,ISSM_MPI_Comm comm){
+ 
+ 	/*externals :*/
+ 	int my_rank;
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 15839)
+@@ -12,7 +12,7 @@
+ #include "../../shared/Numerics/types.h"
+ #include "../../shared/MemOps/MemOps.h"
+ #include "../../shared/Exceptions/exceptions.h"
+-#include "../../shared/io/Comm/Comm.h"
++#include "../../shared/io/Comm/IssmComm.h"
+ #include "../mpi/issmmpi.h"
+ 
+ /*Mumps header files: */
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 15839)
+@@ -11,7 +11,7 @@
+ #endif
+ 
+ #include "../../shared/MemOps/MemOps.h"
+-#include "../../shared/io/Comm/Comm.h"
++#include "../../shared/io/Comm/IssmComm.h"
+ #include "../../shared/Enum/Enum.h"
+ #include "../../shared/Exceptions/exceptions.h"
+ #include "../ToolkitOptions.h"
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 15839)
+@@ -17,10 +17,10 @@
+ #include "../../../shared/shared.h"
+ 
+ /*Function prototypes: */
+-int MatMultCompatible(Mat A,Vec x,COMM comm);
+-void VecRelocalize(Vec* outvector,Vec vector,int m,COMM comm);
++int MatMultCompatible(Mat A,Vec x,ISSM_MPI_Comm comm);
++void VecRelocalize(Vec* outvector,Vec vector,int m,ISSM_MPI_Comm comm);
+ 
+-void MatMultPatch(Mat A,Vec X, Vec AX,COMM comm){ //same prototype as MatMult in Petsc
++void MatMultPatch(Mat A,Vec X, Vec AX,ISSM_MPI_Comm comm){ //same prototype as MatMult in Petsc
+ 
+ 	int m,n;
+ 	Vec X_rel=NULL;
+@@ -42,7 +42,7 @@
+ 	}
+ }
+ 
+-int MatMultCompatible(Mat A,Vec x,COMM comm){
++int MatMultCompatible(Mat A,Vec x,ISSM_MPI_Comm comm){
+ 
+ 	/*error management*/
+ 
+@@ -72,7 +72,7 @@
+ 	return result;
+ }
+ 
+-void VecRelocalize(Vec* poutvector,Vec vector,int m,COMM comm){
++void VecRelocalize(Vec* poutvector,Vec vector,int m,ISSM_MPI_Comm comm){
+ 
+ 	/*vector index and vector values*/
+ 	int* index=NULL;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 15839)
+@@ -11,7 +11,7 @@
+ #include "../petscincludes.h"
+ #include "../../../shared/shared.h"
+ 
+-void MatToSerial(double** poutmatrix,Mat matrix,COMM comm){
++void MatToSerial(double** poutmatrix,Mat matrix,ISSM_MPI_Comm comm){
+ 
+ 	int i;
+ 	int my_rank;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 15839)
+@@ -11,7 +11,7 @@
+ #include "../petscincludes.h"
+ #include "../../../shared/shared.h"
+ 
+-int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm){
++int VecToMPISerial(double** pgathered_vector, Vec vector,ISSM_MPI_Comm comm){
+ 
+ 	int i;
+ 	int num_procs; 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 15839)
+@@ -16,7 +16,7 @@
+ #include "./petscpatches.h"
+ #include "../../mpi/issmmpi.h"
+ 
+-Vec NewVec(int size,COMM comm,bool fromlocalsize){
++Vec NewVec(int size,ISSM_MPI_Comm comm,bool fromlocalsize){
+ 
+ 	int local_size;
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 15839)
+@@ -18,7 +18,7 @@
+ #include "../../mpi/issmmpi.h"
+ 
+ /*NewMat(int M,int N){{{*/
+-Mat NewMat(int M,int N,COMM comm){
++Mat NewMat(int M,int N,ISSM_MPI_Comm comm){
+ 
+ 	/*output:*/
+ 	Mat outmatrix=NULL;
+@@ -45,8 +45,8 @@
+ 	return outmatrix;
+ }
+ /*}}}*/
+-/*NewMat(int M,int N,double sparsity,COMM comm){{{*/
+-Mat NewMat(int M,int N,double sparsity,COMM comm){
++/*NewMat(int M,int N,double sparsity,ISSM_MPI_Comm comm){{{*/
++Mat NewMat(int M,int N,double sparsity,ISSM_MPI_Comm comm){
+ 
+ 	/*output:*/
+ 	Mat outmatrix=NULL;
+@@ -79,7 +79,7 @@
+ }
+ /*}}}*/
+ /*NewMat(int M,int N,int connectivity,int numberofdofspernode){{{*/
+-Mat NewMat(int M,int N,int connectivity,int numberofdofspernode,COMM comm){
++Mat NewMat(int M,int N,int connectivity,int numberofdofspernode,ISSM_MPI_Comm comm){
+ 
+ 	/*output:*/
+ 	Mat outmatrix=NULL;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 15839)
+@@ -12,16 +12,16 @@
+ 
+ #include "./SolverEnum.h"
+ #include "../../toolkitsenums.h"
+-#include "../../../shared/io/Comm/Comm.h"
++#include "../../../shared/io/Comm/IssmComm.h"
+ 
+ class Parameters;
+ 
+-Vec NewVec(int size,COMM comm,bool fromlocalsize=false);
+-Mat NewMat(int M,int N,COMM comm);
+-Mat NewMat(int M,int N,double sparsity,COMM comm);
+-Mat NewMat(int M,int N,int connectivity,int numberofdofspernode, COMM comm);
++Vec NewVec(int size,ISSM_MPI_Comm comm,bool fromlocalsize=false);
++Mat NewMat(int M,int N,ISSM_MPI_Comm comm);
++Mat NewMat(int M,int N,double sparsity,ISSM_MPI_Comm comm);
++Mat NewMat(int M,int N,int connectivity,int numberofdofspernode, ISSM_MPI_Comm comm);
+ 
+-int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm);
++int VecToMPISerial(double** pgathered_vector, Vec vector,ISSM_MPI_Comm comm);
+ void MatFree(Mat* pmat);
+ void ISFree(IS* pis);
+ void VecFree(Vec* pvec);
+@@ -31,8 +31,8 @@
+ void PetscOptionsInsertMultipleString(char* options_string);
+ void PetscOptionsDetermineSolverType(int* psolver_type);
+ void VecMerge(Vec A, Vec B, double* row_partition_vector,int row_partition_size);
+-void MatMultPatch(Mat A,Vec X, Vec AX,COMM comm);
+-void MatToSerial(double** poutmatrix,Mat matrix,COMM comm);
++void MatMultPatch(Mat A,Vec X, Vec AX,ISSM_MPI_Comm comm);
++void MatToSerial(double** poutmatrix,Mat matrix,ISSM_MPI_Comm comm);
+ void VecDuplicatePatch(Vec* output, Vec input);
+ Vec  SerialToVec(double* vector,int vector_size);
+ InsertMode ISSMToPetscInsertMode(InsMode mode);
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 15839)
+@@ -12,7 +12,7 @@
+ #include "../../../shared/Numerics/Verbosity.h"
+ #include "../../../shared/MemOps/MemOps.h"
+ #include "../../../shared/Exceptions/exceptions.h"
+-#include "../../../shared/io/Comm/Comm.h"
++#include "../../../shared/io/Comm/IssmComm.h"
+ #include "../../../shared/Enum/Enum.h"
+ 
+ void	PetscSolve(PetscVec** puf, PetscMat* Kff, PetscVec* pf, PetscVec* uf0,PetscVec* df, Parameters* parameters){ /*{{{*/
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15838)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15839)
+@@ -171,7 +171,6 @@
+ 					./shared/io/Disk/WriteLockFile.cpp\
+ 					./shared/io/Print/PrintfFunction.cpp\
+ 					./shared/io/Print/Print.h\
+-					./shared/io/Comm/Comm.h\
+ 					./shared/io/Comm/IssmComm.h\
+ 					./shared/io/Comm/IssmComm.cpp\
+ 					./shared/LatLong/Ll2xyx.cpp\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15838)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15839)
+@@ -40,8 +40,8 @@
+ /*}}}*/
+ 
+ /*Object constructors and destructor*/
+-/*FUNCTION FemModel::FemModel(int argc,char** argv,COMM incomm){{{*/
+-FemModel::FemModel(int argc,char** argv,COMM incomm){
++/*FUNCTION FemModel::FemModel(int argc,char** argv,ISSM_MPI_Comm incomm){{{*/
++FemModel::FemModel(int argc,char** argv,ISSM_MPI_Comm incomm){
+ 
+ 	/*configuration: */
+ 	int* analyses=NULL;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 15838)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 15839)
+@@ -42,10 +42,10 @@
+ 		Materials   *materials;            //one set of materials, for each element
+ 		Parameters  *parameters;           //one set of parameters, independent of the analysis_type
+ 		Results     *results;              //results that cannot be fit into the elements 
+-		COMM        comm;                  //communicator for this particular model
++		ISSM_MPI_Comm        comm;                  //communicator for this particular model
+ 
+ 		/*constructors, destructors: */
+-		FemModel(int argc,char** argv,COMM comm_init);
++		FemModel(int argc,char** argv,ISSM_MPI_Comm comm_init);
+ 		FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		~FemModel();
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15839-15840.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15839-15840.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15839-15840.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 15839)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 15840)
+@@ -12,6 +12,8 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
++#include <cstddef>
++
+ #ifdef _HAVE_MPI_
+ 	/*Include header files: {{{*/
+ 	#ifdef _HAVE_AMPI_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15840-15841.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15840-15841.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15840-15841.diff	(revision 16134)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15840)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15841)
+@@ -221,6 +221,13 @@
+ 					./toolkits/issm/IssmSolver.h\
+ 					./toolkits/issm/IssmSolver.cpp\
+ 					./toolkits/issm/Bucket.h\
++					./toolkits/mpi/issmmpi.h\
++					./toolkits/mpi/issmmpi.cpp\
++					./toolkits/mpi/commops/commops.h\
++					./toolkits/mpi/commops/DetermineLocalSize.cpp\
++					./toolkits/mpi/commops/DetermineGlobalSize.cpp\
++					./toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp\
++					./toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp\
+ 					./toolkits/adolc/adolcincludes.h\
+ 					./toolkits/adolc/AdolcEdf.h\
+ 					./toolkits/ToolkitOptions.h\
+@@ -759,14 +766,7 @@
+ 					./toolkits/gsl/DenseGslSolve.cpp
+ #}}}
+ #Mpi sources  {{{
+-mpi_sources= ./toolkits/mpi/issmmpi.h\
+-				./toolkits/mpi/issmmpi.cpp\
+-				./toolkits/mpi/commops/commops.h\
+-				./toolkits/mpi/commops/DetermineLocalSize.cpp\
+-				./toolkits/mpi/commops/DetermineGlobalSize.cpp\
+-				./toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp\
+-				./toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp\
+-				./toolkits/issm/IssmMpiDenseMat.h\
++mpi_sources= ./toolkits/issm/IssmMpiDenseMat.h\
+ 				./toolkits/issm/IssmMpiVec.h
+ #}}}
+ #Metis sources  {{{
Index: /issm/oecreview/Archive/15392-16133/ISSM-15841-15842.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15841-15842.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15841-15842.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/materials/paterson.py
+===================================================================
+--- ../trunk-jpl/src/m/materials/paterson.py	(revision 15841)
++++ ../trunk-jpl/src/m/materials/paterson.py	(revision 15842)
+@@ -14,7 +14,7 @@
+ 	if numpy.any(temperature<0.):
+ 		raise RuntimeError("input temperature should be in Kelvin (positive)")
+ 	
+-	T = temperature-273.15
++	T = temperature.reshape(-1,)-273.15
+ 
+ 	#The routine below is equivalent to:
+ 
+@@ -29,7 +29,7 @@
+ 	# fittedmodel=fit(Temp,B,'cubicspline');
+ 	# rigidity=fittedmodel(temperature);
+ 
+-	rigidity=numpy.zeros((numpy.size(T,axis=0),1))
++	rigidity=numpy.zeros_like(T)
+ 	pos1=numpy.nonzero(T<=-45)
+ 	rigidity[pos1]=10**8*(-0.000292866376675*(T[pos1]+50)**3+ 0.011672640664130*(T[pos1]+50)**2  -0.325004442485481*(T[pos1]+50)+  6.524779401948101)
+ 	pos2=numpy.nonzero(numpy.logical_and(-45<=T,T<-40))
Index: /issm/oecreview/Archive/15392-16133/ISSM-15842-15843.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15842-15843.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15842-15843.diff	(revision 16134)
@@ -0,0 +1,219 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15842)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15843)
+@@ -609,6 +609,10 @@
+ 	dnl ampi headers and libraries
+ 	if test "x$HAVE_AMPI" == "xyes"; then
+ 		AMPIINCL="-I$AMPI_ROOT/include"
++		echo "adolc_root: |$ADOLC_ROOT|"
++		if test "x$ADOLC_ROOT" == "xno"; then
++			AC_MSG_ERROR([cannot run adjoinable mpi without adolc]);
++		fi
+ 		AMPILIB="-dy -L$AMPI_ROOT/lib -lampiCommon -L$ADOLC_ROOT/lib -ladolc -L$AMPI_ROOT/lib -lampiCommon -lampiBookkeeping -lampiTape"
+ 		AC_DEFINE([_HAVE_AMPI_],[1],[with adjoinable mpi in ISSM src])
+ 		AC_SUBST([AMPIINCL])
+@@ -1864,7 +1868,13 @@
+ 		  if test "$HAVE_METIS" = "yes"  && test "$HAVE_MPI" = "no" ; then
+ 			AC_MSG_ERROR([need mpi if using the metis partitioner!]);
+ 		fi
++		
++		dnl check that if we run adolc, we don't compile krigging.exe
++		  if test "$HAVE_ADOLC" = "yes"  && test "$HAVE_KRIGING" = "yes" ; then
++			AC_MSG_ERROR([cannot compile kriging.exe under adolc conditions!]);
++		fi
+ 
++
+ 		  AC_MSG_RESULT(done)
+ 		  dnl }}}
+ ])
+Index: ../trunk-jpl/src/c/kml/KML_LinearRing.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_LinearRing.cpp	(revision 15842)
++++ ../trunk-jpl/src/c/kml/KML_LinearRing.cpp	(revision 15843)
+@@ -168,8 +168,8 @@
+ 
+ /*  extract latitude and longitude into vectors  */
+ 
+-	lat=xNew<IssmDouble>(ncoord);
+-	lon=xNew<IssmDouble>(ncoord);
++	lat=xNew<IssmPDouble>(ncoord);
++	lon=xNew<IssmPDouble>(ncoord);
+ 	for (i=0; i<ncoord; i++) {
+ 		lon[i]=coords[3*i+0];
+ 		lat[i]=coords[3*i+1];
+@@ -177,8 +177,8 @@
+ 
+ /*  convert latitude and longitude to x and y  */
+ 
+-	x  =xNew<IssmDouble>(ncoord);
+-	y  =xNew<IssmDouble>(ncoord);
++	x  =xNew<IssmPDouble>(ncoord);
++	y  =xNew<IssmPDouble>(ncoord);
+ 	if (sgn) {
+ 		Ll2xyx(x,y,lat,lon,ncoord,sgn,cm,sp);
+ 	}
+Index: ../trunk-jpl/src/c/kml/KMLFileReadUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KMLFileReadUtils.cpp	(revision 15842)
++++ ../trunk-jpl/src/c/kml/KMLFileReadUtils.cpp	(revision 15843)
+@@ -555,9 +555,9 @@
+ 
+ 	if (!*pdval)
+ 		if (maxlen)
+-			*pdval=xNew<IssmDouble>(maxlen            );
++			*pdval=xNew<IssmPDouble>(maxlen            );
+ 		else
+-			*pdval=xNew<IssmDouble>((strlen(kstr)+1)/2);
++			*pdval=xNew<IssmPDouble>((strlen(kstr)+1)/2);
+ 
+ /*  loop through string to get all values  */
+ 
+@@ -621,9 +621,9 @@
+ 
+ 	if (!*pdval)
+ 		if (maxlen)
+-			*pdval=xNew<IssmDouble>(maxlen*n          );
++			*pdval=xNew<IssmPDouble>(maxlen*n          );
+ 		else
+-			*pdval=xNew<IssmDouble>((strlen(kstr)+1)/2);
++			*pdval=xNew<IssmPDouble>((strlen(kstr)+1)/2);
+ 
+ /*  loop through string to get all values  */
+ 
+Index: ../trunk-jpl/src/c/kml/KML_LineString.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_LineString.cpp	(revision 15842)
++++ ../trunk-jpl/src/c/kml/KML_LineString.cpp	(revision 15843)
+@@ -180,8 +180,8 @@
+ 
+ /*  extract latitude and longitude into vectors  */
+ 
+-	lat=xNew<IssmDouble>(ncoord);
+-	lon=xNew<IssmDouble>(ncoord);
++	lat=xNew<IssmPDouble>(ncoord);
++	lon=xNew<IssmPDouble>(ncoord);
+ 	for (i=0; i<ncoord; i++) {
+ 		lon[i]=coords[3*i+0];
+ 		lat[i]=coords[3*i+1];
+@@ -189,8 +189,8 @@
+ 
+ /*  convert latitude and longitude to x and y  */
+ 
+-	x  =xNew<IssmDouble>(ncoord);
+-	y  =xNew<IssmDouble>(ncoord);
++	x  =xNew<IssmPDouble>(ncoord);
++	y  =xNew<IssmPDouble>(ncoord);
+ 	if (sgn) {
+ 		Ll2xyx(x,y,lat,lon,ncoord,sgn,cm,sp);
+ 	}
+@@ -221,10 +221,10 @@
+ 
+ 	fprintf(fid,"\n");
+ 
+-	xDelete<IssmDouble>(y);
+-	xDelete<IssmDouble>(x);
+-	xDelete<IssmDouble>(lon);
+-	xDelete<IssmDouble>(lat);
++	xDelete<IssmPDouble>(y);
++	xDelete<IssmPDouble>(x);
++	xDelete<IssmPDouble>(lon);
++	xDelete<IssmPDouble>(lat);
+ 
+ 	return;
+ }
+Index: ../trunk-jpl/src/c/shared/Elements/Arrhenius.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/Arrhenius.cpp	(revision 15842)
++++ ../trunk-jpl/src/c/shared/Elements/Arrhenius.cpp	(revision 15843)
+@@ -32,9 +32,9 @@
+ 	IssmDouble A,B,Tstar;
+ 
+ 	/*convert temperature to absolute temperature*/
+-	_assert_(depth);
++	_assert_(depth>0);
+ 	Tstar=temperature-beta*depth;
+-	_assert_(Tstar);
++	_assert_(Tstar>0);
+ 
+ 	/*Get A*/
+ 	if(Tstar<263.15){
+Index: ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp	(revision 15842)
++++ ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp	(revision 15843)
+@@ -46,8 +46,8 @@
+   /*Intermediaries*/
+   IssmDouble A,B,Tstar,Tpmp,H_sp,waterfraction;
+ 	
+-  _assert_(pressure);
+-  _assert_(enthalpy);
++  _assert_(pressure>0);
++  _assert_(enthalpy>0);
+   Tpmp=273.15-beta*pressure; 
+   H_sp=heatcapacity*(Tpmp - Tref);
+   if (enthalpy < H_sp){
+@@ -69,7 +69,7 @@
+   A*=(1 + 181.25*waterfraction);
+ 
+   /*Convert to B*/
+-  _assert_(n);
++  _assert_(n>0);
+   B=pow(A,-1./n);
+ 
+   return B;
+@@ -88,9 +88,9 @@
+   IssmDouble beta=7.9*pow(10.,-8.);
+   IssmDouble latentheat=3.34*pow(10,5.); // from Aschwanden 2012
+   IssmDouble Tstar, enthalpy, pressure, B;
+-  _assert_(temperature);
+-  _assert_(waterfraction);
+-  _assert_(depth);
++  _assert_(temperature>0);
++  _assert_(waterfraction>0);
++  _assert_(depth>0);
+ 
+   /*get pressure*/
+   pressure= rho_ice*g*depth;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 15842)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 15843)
+@@ -1,6 +1,6 @@
+ /*! \file CreateLoadsStressbalance.c:
+  */
+-
++#include <string.h>
+ #include "../../../toolkits/toolkits.h"
+ #include "../../../classes/classes.h"
+ #include "../../../shared/shared.h"
+@@ -28,6 +28,7 @@
+ 	IssmDouble *nodeonicesheet = NULL;
+ 	IssmDouble *vertices_type  = NULL;
+ 	IssmDouble *penalties      = NULL;
++	int         assert_int;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+@@ -53,7 +54,7 @@
+ 		if(iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+0]-1)]){
+ 
+ 			/*In debugging mode, check that the second node is in the same cpu*/
+-			_assert_(iomodel->my_vertices[(int)penalties[2*i+1]-1]);
++			assert_int=iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+1]-1)]; _assert_(assert_int);
+ 
+ 			/*Get node ids*/
+ 			penpair_ids[0]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+0]);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15842)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15843)
+@@ -9745,7 +9745,7 @@
+ 
+ 	/*Viscosity*/
+ 	viscosity = 1./(2.*A*(tau_par*tau_par + tau_perp*tau_perp));
+-	_assert_(!isnan(viscosity));
++	//_assert_(!isnan(viscosity)); this is not defined for adoubles
+ 	_assert_(viscosity > 0.);
+ 
+ 	/*Assign output pointer*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15843-15844.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15843-15844.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15843-15844.diff	(revision 16134)
@@ -0,0 +1,146 @@
+Index: ../trunk-jpl/src/m/mech/mechanicalproperties.py
+===================================================================
+--- ../trunk-jpl/src/m/mech/mechanicalproperties.py	(revision 0)
++++ ../trunk-jpl/src/m/mech/mechanicalproperties.py	(revision 15844)
+@@ -0,0 +1,141 @@
++import numpy as npy
++from GetNodalFunctionsCoeff import GetNodalFunctionsCoeff
++from results import results
++
++def mechanicalproperties(md,vx,vy):
++	"""
++	MECHANICALPROPERTIES - compute stress and strain rate for a goven velocity
++	
++   this routine computes the components of the stress tensor
++   strain rate tensor and their respective principal directions.
++   the results are in the model md: md.results
++	
++   Usage:
++      md=mechanicalproperties(md,vx,vy)
++	
++   Example:
++      md=mechanicalproperties(md,md.initialization.vx,md.initialization.vy)
++      md=mechanicalproperties(md,md.inversion.vx_obs,md.inversion.vy_obs)
++	"""
++
++	#some checks
++	if len(vx)!=md.mesh.numberofvertices or len(vy)!=md.mesh.numberofvertices:
++		raise ValueError('the input velocity should be of size ' + md.mesh.numberofvertices)
++
++	if md.mesh.dimension!=2:
++		raise StandardError('only 2D model supported currently')
++
++	if npy.any(md.flowequation.element_equation!=2):
++		print 'Warning: the model has some non SSA elements. These will be treated like SSA elements'
++	
++	#initialization
++	numberofelements=md.mesh.numberofelements
++	index=md.mesh.elements
++	summation=npy.array([[1],[1],[1]])
++	directionsstress=npy.zeros((numberofelements,4))
++	directionsstrain=npy.zeros((numberofelements,4))
++	valuesstress=npy.zeros((numberofelements,2))
++	valuesstrain=npy.zeros((numberofelements,2))
++	
++	#compute nodal functions coefficients N(x,y)=alpha x + beta y +gamma
++	alpha,beta=GetNodalFunctionsCoeff(index,md.mesh.x,md.mesh.y)[0:2]
++	
++	#compute shear
++	vxlist=vx[index-1]/md.constants.yts
++	vylist=vy[index-1]/md.constants.yts
++	ux=npy.dot((vxlist*alpha),summation).reshape(-1,)
++	uy=npy.dot((vxlist*beta),summation).reshape(-1,)
++	vx=npy.dot((vylist*alpha),summation).reshape(-1,)
++	vy=npy.dot((vylist*beta),summation).reshape(-1,)
++	uyvx=(vx+uy)/2.
++	#clear vxlist vylist
++	
++	#compute viscosity
++	nu=npy.zeros((numberofelements,))
++	B_bar=npy.dot(md.materials.rheology_B[index-1],summation/3.).reshape(-1,)
++	power=(md.materials.rheology_n-1.)/(2.*md.materials.rheology_n)
++	second_inv=(ux**2.+vy**2.+((uy+vx)**2.)/4.+ux*vy).reshape(-1,)
++	
++	#some corrections
++	location=npy.nonzero(npy.logical_and(second_inv==0,power!=0))
++	nu[location]=10^18 	#arbitrary maximum viscosity to apply where there is no effective shear
++	
++	if 'matice' in md.materials.__module__:
++		location=npy.nonzero(second_inv)
++		nu[location]=B_bar[location]/(second_inv[location]**power[location])
++		location=npy.nonzero(npy.logical_and(second_inv==0,power==0))
++		nu[location]=B_bar[location]
++	elif 'matdamageice' in md.materials.__module__:
++		Zinv=npy.dot(md.materials.rheology_Z[index-1],summation/3.).reshape(-1,)
++		location=npy.nonzero(second_inv)
++		nu[location]=Zinv[location]*B_bar[location]/npy.power(second_inv[location],power[location])
++		location=npy.nonzero(npy.logical_and(second_inv==0,power==0))
++		nu[location]=Zinv[location]*B_bar[location]
++		#clear Zinv
++	else:
++		raise StandardError('class of md.materials (' + md.materials.__module__ + ') not recognized or not supported')
++	
++	#compute stress
++	tau_xx=nu*ux
++	tau_yy=nu*vy
++	tau_xy=nu*uyvx
++	
++	#compute principal properties of stress
++	for i in npy.arange(numberofelements):
++	
++		#compute stress and strainrate matrices
++		stress=npy.array([ [tau_xx[i], tau_xy[i]], [tau_xy[i], tau_yy[i]] ])
++		strain=npy.array([ [ux[i], uyvx[i]], [uyvx[i], vy[i]] ])
++	
++		#eigenvalues and vectors for stress
++		value,directions=npy.linalg.eig(stress);
++		idx=abs(value).argsort()[::-1] # sort in descending order
++		value=value[idx]
++		directions=directions[:,idx]
++		valuesstress[i,:]=[value[0],value[1]]
++		directionsstress[i,:]=directions.transpose().flatten()
++
++		#eigenvalues and vectors for strain
++		value,directions=npy.linalg.eig(strain);
++		idx=abs(value).argsort()[::-1] # sort in descending order
++		value=value[idx]
++		directions=directions[:,idx]
++		valuesstrain[i,:]=[value[0],value[1]]
++		directionsstrain[i,:]=directions.transpose().flatten()
++
++	##plug onto the model
++	##NB: Matlab sorts the eigen value in increasing order, we want the reverse
++	stress=results()
++	stress.xx=tau_xx
++	stress.yy=tau_yy
++	stress.xy=tau_xy
++	stress.principalvalue1=valuesstress[:,0]
++	stress.principalaxis1=directionsstress[:,0:2]
++	stress.principalvalue2=valuesstress[:,1]
++	stress.principalaxis2=directionsstress[:,2:4]
++	stress.effectivevalue=1./npy.sqrt(2.)*npy.sqrt(stress.xx**2+stress.yy**2+2.*stress.xy**2)
++	md.results.stress=stress
++	
++	strainrate=results()
++	strainrate.xx=ux*md.constants.yts #strain rate in 1/a instead of 1/s
++	strainrate.yy=vy*md.constants.yts 
++	strainrate.xy=uyvx*md.constants.yts 
++	strainrate.principalvalue1=valuesstrain[:,0]*md.constants.yts 
++	strainrate.principalaxis1=directionsstrain[:,0:2]
++	strainrate.principalvalue2=valuesstrain[:,1]*md.constants.yts 
++	strainrate.principalaxis2=directionsstrain[:,2:4]
++	strainrate.effectivevalue=1./npy.sqrt(2.)*npy.sqrt(strainrate.xx**2+strainrate.yy**2+2.*strainrate.xy**2)
++	md.results.strainrate=strainrate
++	
++	deviatoricstress=results()
++	deviatoricstress.xx=tau_xx
++	deviatoricstress.yy=tau_yy
++	deviatoricstress.xy=tau_xy
++	deviatoricstress.principalvalue1=valuesstress[:,0]
++	deviatoricstress.principalaxis1=directionsstress[:,1:2]
++	deviatoricstress.principalvalue2=valuesstress[:,1]
++	deviatoricstress.principalaxis2=directionsstress[:,2:4]
++	deviatoricstress.effectivevalue=1./npy.sqrt(2.)*npy.sqrt(stress.xx**2+stress.yy**2+2.*stress.xy**2)
++	md.results.deviatoricstress=deviatoricstress
++
++	return md
Index: /issm/oecreview/Archive/15392-16133/ISSM-15844-15845.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15844-15845.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15844-15845.diff	(revision 16134)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15844)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15845)
+@@ -613,7 +613,11 @@
+ 		if test "x$ADOLC_ROOT" == "xno"; then
+ 			AC_MSG_ERROR([cannot run adjoinable mpi without adolc]);
+ 		fi
+-		AMPILIB="-dy -L$AMPI_ROOT/lib -lampiCommon -L$ADOLC_ROOT/lib -ladolc -L$AMPI_ROOT/lib -lampiCommon -lampiBookkeeping -lampiTape"
++		dnl AMPILIB="-dy -L$AMPI_ROOT/lib -lampiCommon -L$ADOLC_ROOT/lib -ladolc -L$AMPI_ROOT/lib -lampiCommon -lampiBookkeeping -lampiTape"
++		dnl AMPILIB="-dy -L$AMPI_ROOT/lib  -L$ADOLC_ROOT/lib -Wl,--start-group,-lampiCommon,-ladolc,-lampiCommon,-lampiBookkeeping,-lampiTape,-lampiPlainC,-lampiADtoolStubsST,--end-group"
++		dnl AMPILIB="-L$AMPI_ROOT/lib  -L$ADOLC_ROOT/lib -Wl,--start-group -lampiCommon -ladolc -lampiCommon -lampiBookkeeping -lampiTape -lampiPlainC -lampiADtoolStubsST -Wl,--end-group"
++		dnl AMPILIB="$AMPI_ROOT/lib/libampiCommon.so $ADOLC_ROOT/lib/libadolc.so  $AMPI_ROOT/lib/libampiCommon.so $AMPI_ROOT/lib/libampiBookkeeping.so $AMPI_ROOT/lib/libampiTape.so $AMPI_ROOT/lib/libampiPlainC.so  $AMPI_ROOT/lib/libampiADtoolStubsST.so"
++		AMPILIB="-dy -L$AMPI_ROOT/lib  -L$ADOLC_ROOT/lib -lampiCommon -ladolc -lampiCommon -lampiBookkeeping -lampiTape -lampiPlainC -lampiADtoolStubsST"
+ 		AC_DEFINE([_HAVE_AMPI_],[1],[with adjoinable mpi in ISSM src])
+ 		AC_SUBST([AMPIINCL])
+ 		AC_SUBST([AMPILIB])
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15844)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15845)
+@@ -939,7 +939,7 @@
+ libISSM_la_LIBADD = libISSMCore.la libISSMOverload.la
+ 
+ libISSMCore_la_SOURCES  = $(issm_sources)
+-libISSMCore_la_LIBADD = $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(AMPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB)
++libISSMCore_la_LIBADD = $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB)   $(ADOLCLIB) $(AMPILIB)
+ libISSMCore_la_FFLAGS = $(AM_FFLAGS)
+ endif
+ 
+@@ -987,7 +987,7 @@
+ LDADD = ./libISSMCore.a ./libISSMOverload.a
+ 
+ #External packages
+-LDADD += $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(AMPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(ADOLCLIB)
++LDADD += $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB)  $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(AMPILIB) $(ADOLCLIB)
+ 
+ if FORTRAN
+ LDADD += $(FLIBS)
Index: /issm/oecreview/Archive/15392-16133/ISSM-15845-15846.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15845-15846.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15845-15846.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 15845)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 15846)
+@@ -479,9 +479,18 @@
+   return rc;
+ }/*}}}*/
+ double ISSM_MPI_Wtime(void){/*{{{*/
+- 
+-  assert(0); // to be implemented
+-  return 0.0;
++
++#ifdef _HAVE_MPI_
++	#ifdef _HAVE_AMPI_
++	assert(0); // to be implemented
++	return 0.0;
++	#else
++	return MPI_Wtime();
++	#endif
++#else 
++	assert(0); // to be implemented
++	return 0.0;
++#endif
+ }/*}}}*/
+ void ISSM_MPI_ContiguousInAdolc(size_t aSize) { /*{{{*/
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15846-15847.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15846-15847.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15846-15847.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15846)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15847)
+@@ -9745,7 +9745,7 @@
+ 
+ 	/*Viscosity*/
+ 	viscosity = 1./(2.*A*(tau_par*tau_par + tau_perp*tau_perp));
+-	//_assert_(!isnan(viscosity)); this is not defined for adoubles
++	_assert_(!xIsNan(viscosity));
+ 	_assert_(viscosity > 0.);
+ 
+ 	/*Assign output pointer*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15847-15848.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15847-15848.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15847-15848.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15847)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15848)
+@@ -1,4 +1,5 @@
+ AM_CPPFLAGS = @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @AMPIINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @GSLINCL@ @BOOSTINCL@ @ANDROID_NDKINCL@
++AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(ISSMEXT)
+ 
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 15847)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 15848)
+@@ -1,4 +1,5 @@
+ AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@
++AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(PYTHONWRAPPEREXT)
+ 
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15847)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15848)
+@@ -1,4 +1,5 @@
+ AM_CPPFLAGS = @DAKOTAINCL@ @MATLABINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@
++AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(MATLABWRAPPEREXT)
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15848-15849.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15848-15849.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15848-15849.diff	(revision 16134)
@@ -0,0 +1,1674 @@
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 15849)
+@@ -85,11 +85,11 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum);
+-		if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
++		InputToResultx(femmodel,VxEnum);
++		InputToResultx(femmodel,VyEnum);
++		InputToResultx(femmodel,VelEnum);
++		InputToResultx(femmodel,PressureEnum);
++		if(dim==3) InputToResultx(femmodel,VzEnum);
+ 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/analyses/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15849)
+@@ -52,11 +52,11 @@
+ 		if(isenthalpy==0){
+ 			thermal_core(femmodel);
+ 			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+-			GetSolutionFromInputsx(&tg,femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++			GetSolutionFromInputsx(&tg,femmodel);
+ 		}
+ 		else{
+ 			enthalpy_core(femmodel);
+-			GetSolutionFromInputsx(&tg,femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++			GetSolutionFromInputsx(&tg,femmodel);
+ 		}
+ 		#else
+ 		_error_("ISSM was not compiled with thermal capabilities. Exiting");
+@@ -64,7 +64,7 @@
+ 
+ 		if(VerboseSolution()) _printf0_("   computing new velocity\n");
+ 		stressbalance_core(femmodel);
+-		GetSolutionFromInputsx(&ug,femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++		GetSolutionFromInputsx(&ug,femmodel);
+ 
+ 		if(step>1){
+ 			if(VerboseSolution()) _printf0_("   checking steadystate convergence\n");
+@@ -83,15 +83,15 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
+-		if(isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WaterfractionEnum);
+-		if(isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum);
+-		if(!isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum);
++		InputToResultx(femmodel,VxEnum);
++		InputToResultx(femmodel,VyEnum);
++		InputToResultx(femmodel,VzEnum);
++		InputToResultx(femmodel,VelEnum);
++		InputToResultx(femmodel,PressureEnum);
++		InputToResultx(femmodel,TemperatureEnum);
++		if(isenthalpy)  InputToResultx(femmodel,WaterfractionEnum);
++		if(isenthalpy)  InputToResultx(femmodel,EnthalpyEnum);
++		if(!isenthalpy) InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
+ 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 15849)
+@@ -27,8 +27,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("saving results:\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeXEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeYEnum);
++		InputToResultx(femmodel,SurfaceSlopeXEnum);
++		InputToResultx(femmodel,SurfaceSlopeYEnum);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15849)
+@@ -23,7 +23,7 @@
+ 
+ 	if(dakota_analysis && solution_type!=TransientSolutionEnum){
+ 		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+-		ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		ResetConstraintsx(femmodel);
+ 	}
+ 
+ 	if(VerboseSolution()) _printf0_("   computing temperatures\n");
+@@ -36,7 +36,7 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum);
++		InputToResultx(femmodel,TemperatureEnum);
++		InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 15849)
+@@ -27,8 +27,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeXEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeYEnum);
++		InputToResultx(femmodel,BedSlopeXEnum);
++		InputToResultx(femmodel,BedSlopeYEnum);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/gia_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 15849)
+@@ -45,13 +45,13 @@
+ 	wg->Assemble();
+ 	dwdtg->Assemble();
+ 
+-	InputUpdateFromVectorx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,wg,GiaWEnum,VertexSIdEnum);
+-	InputUpdateFromVectorx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,dwdtg,GiadWdtEnum,VertexSIdEnum);
++	InputUpdateFromVectorx(femmodel,wg,GiaWEnum,VertexSIdEnum);
++	InputUpdateFromVectorx(femmodel,dwdtg,GiadWdtEnum,VertexSIdEnum);
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiaWEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiadWdtEnum);
++		InputToResultx(femmodel,GiaWEnum);
++		InputToResultx(femmodel,GiadWdtEnum);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/balancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 15849)
+@@ -25,7 +25,7 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
++		InputToResultx(femmodel,ThicknessEnum);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 15849)
+@@ -26,7 +26,7 @@
+ 	solutionsequence_nonlinear(femmodel,conserve_loads); 
+ 
+ 	/*Call SurfaceAreax, because some it might be needed by PVector*/
+-	SurfaceAreax(NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	SurfaceAreax(NULL,femmodel);
+ 
+ 	/*Compute adjoint*/
+ 	if(VerboseSolution()) _printf0_("   computing adjoint\n");
+@@ -36,11 +36,11 @@
+ 	/*Save results*/
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointxEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointyEnum);
++		InputToResultx(femmodel,AdjointxEnum);
++		InputToResultx(femmodel,AdjointyEnum);
+ 		if (isFS){
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointzEnum);
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointpEnum);
++			InputToResultx(femmodel,AdjointzEnum);
++			InputToResultx(femmodel,AdjointpEnum);
+ 		}
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15849)
+@@ -78,7 +78,7 @@
+ 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
+ 			//Reset Thermal Constraints
+ 			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+-			ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++			ResetConstraintsx(femmodel);
+ 		}
+ 	}
+ 
+@@ -153,19 +153,19 @@
+ 		/*unload results*/
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving transient results\n");
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceEnum);
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedEnum);
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMassBalanceEnum);
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MaskElementonfloatingiceEnum);
++			InputToResultx(femmodel,SurfaceEnum);
++			InputToResultx(femmodel,BedEnum);
++			InputToResultx(femmodel,SurfaceforcingsMassBalanceEnum);
++			InputToResultx(femmodel,MaskElementonfloatingiceEnum);
+ 			femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 
+ 			if(isdelta18o){
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMonthlytemperaturesEnum);
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsPrecipitationEnum);
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalFrictionEnum);
++				InputToResultx(femmodel,SurfaceforcingsMonthlytemperaturesEnum);
++				InputToResultx(femmodel,SurfaceforcingsPrecipitationEnum);
++				InputToResultx(femmodel,BasalFrictionEnum);
+ 			}
+ 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GLlevelsetEnum);
++				InputToResultx(femmodel,GLlevelsetEnum);
+ 			}
+ 
+ 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+Index: ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 15849)
+@@ -21,7 +21,7 @@
+ 	nodes=femmodel->nodes;
+ 
+ 	/*retrieve boundary conditions from element inputs :*/
+-	GetSolutionFromInputsx( &yg, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,  femmodel->parameters);
++	GetSolutionFromInputsx(&yg,femmodel);
+ 
+ 	/*update spcs using this new vector of constraints: */
+ 	UpdateDynamicConstraintsx(femmodel->constraints,femmodel->nodes,femmodel->parameters,yg);
+Index: ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 15849)
+@@ -23,7 +23,7 @@
+ 	solutionsequence_linear(femmodel);
+ 
+ 	/*Call SurfaceAreax, because some it might be needed by PVector*/
+-	SurfaceAreax(NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	SurfaceAreax(NULL,femmodel);
+ 
+ 	/*compute adjoint*/
+ 	if(VerboseSolution()) _printf0_("   computing adjoint\n");
+@@ -33,6 +33,6 @@
+ 	/*Save results*/
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointEnum);
++		InputToResultx(femmodel,AdjointEnum);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 15849)
+@@ -65,7 +65,7 @@
+ 	DakotaMPI_Bcast(&d_variables,&d_variables_descriptors,&d_numvariables,&d_numresponses);
+ 
+ 	/*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */
+-	InputUpdateFromDakotax(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,d_variables,d_variables_descriptors,d_numvariables);
++	InputUpdateFromDakotax(femmodel,d_variables,d_variables_descriptors,d_numvariables);
+ 
+ 	/*Determine solution sequence: */
+ 	if(VerboseQmu()) _printf0_("Starting " << EnumToStringx(solution_type) << " core:\n");
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 15849)
+@@ -93,7 +93,7 @@
+ 
+ 		/*Return gradient if asked: */
+ 		if (cm_gradient){
+-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GradientEnum);
++			InputToResultx(femmodel,GradientEnum);
+ 			goto cleanup_and_return;
+ 		}
+ 
+@@ -113,7 +113,7 @@
+ 
+ 	/*some results not computed by steadystate_core or stressbalance_core: */
+ 	if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
+-		for(i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
++		for(i=0;i<num_controls;i++) InputToResultx(femmodel,control_type[i]);
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 		IssmPDouble* J_passive=xNew<IssmPDouble>(nsteps);
+Index: ../trunk-jpl/src/c/analyses/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 15849)
+@@ -67,9 +67,9 @@
+ 
+ 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+ 				if(VerboseSolution()) _printf0_("   saving results \n");
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WatercolumnEnum);
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVxEnum);
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVyEnum);
++				InputToResultx(femmodel,WatercolumnEnum);
++				InputToResultx(femmodel,HydrologyWaterVxEnum);
++				InputToResultx(femmodel,HydrologyWaterVyEnum);
+ 
+ 				/*unload results*/
+ 				if(VerboseSolution()) _printf0_("   saving temporary results\n");
+@@ -88,11 +88,11 @@
+ 			solutionsequence_hydro_nonlinear(femmodel);
+ 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+ 				if(VerboseSolution()) _printf0_("   saving results \n");
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadEnum);
+-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadResidualEnum);
++				InputToResultx(femmodel,SedimentHeadEnum);
++				InputToResultx(femmodel,SedimentHeadResidualEnum);
+ 				if(isefficientlayer){
+-					InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EplHeadEnum);
+-					InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologydcMaskEplactiveEnum);
++					InputToResultx(femmodel,EplHeadEnum);
++					InputToResultx(femmodel,HydrologydcMaskEplactiveEnum);
+ 				}
+ 				/*unload results*/
+ 				if(VerboseSolution()) _printf0_("   saving temporary results\n");
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 15849)
+@@ -47,7 +47,7 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
++		InputToResultx(femmodel,ThicknessEnum);
+ 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/analyses/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 15849)
+@@ -84,7 +84,7 @@
+ 	TaoGetSolutionVector(tao,&X->pvector->vector);
+ 	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
+ 	for(int i=0;i<num_controls;i++){
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_list[i]);
++		InputToResultx(femmodel,control_list[i]);
+ 	}
+ 	femmodel->results->AddObject(new GenericExternalResult<double*>(femmodel->results->Size()+1,JEnum,user.J,maxiter+3,1,1,0));
+ 
+Index: ../trunk-jpl/src/c/analyses/enthalpy_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 15849)
+@@ -26,8 +26,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum);
+-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WaterfractionEnum);
++		InputToResultx(femmodel,TemperatureEnum);
++		InputToResultx(femmodel,EnthalpyEnum);
++		InputToResultx(femmodel,WaterfractionEnum);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 15849)
+@@ -7,33 +7,32 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h"
+ 
+-void InputUpdateFromMatrixDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* matrix,int nrows,int ncols, int name, int type){
++void InputUpdateFromMatrixDakotax(FemModel* femmodel,double* matrix,int nrows,int ncols, int name, int type){
+ 
+ 	int i;
+ 	int numberofvertices;
+ 
+-	numberofvertices=vertices->NumberOfVertices();
++	numberofvertices=femmodel->vertices->NumberOfVertices();
+ 
+-	if((ncols==1) && (nrows==numberofvertices)) InputUpdateFromVectorDakotax( elements,nodes, vertices,loads, materials,  parameters,matrix, name,type);
++	if((ncols==1) && (nrows==numberofvertices)) InputUpdateFromVectorDakotax(femmodel,matrix,name,type);
+ 	else{
+ 
+ 		/*Update elements, nodes, loads and materials from inputs: */
+-		for(i=0;i<elements->Size();i++){
+-			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		for(i=0;i<femmodel->elements->Size();i++){
++			Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 			element->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
+ 		}
+-		for(i=0;i<nodes->Size();i++){
+-			Node* node=(Node*)nodes->GetObjectByOffset(i);
++		for(i=0;i<femmodel->nodes->Size();i++){
++			Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+ 			node->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
+ 		}
+-		for(i=0;i<loads->Size();i++){
+-			Load* load=(Load*)loads->GetObjectByOffset(i);
++		for(i=0;i<femmodel->loads->Size();i++){
++			Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 			load->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
+ 		}
+-		for(i=0;i<materials->Size();i++){
+-			Material* material=(Material*)materials->GetObjectByOffset(i);
++		for(i=0;i<femmodel->materials->Size();i++){
++			Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 			material->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
+ 		}
+ 	}
+-
+ }
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h	(revision 15849)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void InputUpdateFromMatrixDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* matrix,int nrows,int ncols, int name, int type);
++void InputUpdateFromMatrixDakotax(FemModel* femmodel,double* matrix,int nrows,int ncols, int name, int type);
+ 
+ #endif  /* _UPDATEINPUTSFROMMATRIXDAKOTAXX_H */
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 15849)
+@@ -6,83 +6,78 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* vector, int name, int type){
++void InputUpdateFromVectorx(FemModel* femmodel,Vector<IssmDouble>* vector, int name, int type){
+ 
+-	IssmDouble* serial_vector=NULL;
+-
+-	serial_vector=vector->ToMPISerial();
+-
+-	InputUpdateFromVectorx( elements,nodes, vertices, loads, materials, parameters,serial_vector,name, type);
+-
+-	/*Free ressources:*/
++	IssmDouble* serial_vector=vector->ToMPISerial();
++	InputUpdateFromVectorx(femmodel,serial_vector,name,type);
+ 	xDelete<IssmDouble>(serial_vector);
+ }
+ 
+-void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* vector, int name, int type){
++void InputUpdateFromVectorx(FemModel* femmodel,IssmDouble* vector, int name, int type){
+ 
+ 	int i;
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<nodes->Size();i++){
+-		Node* node=(Node*)nodes->GetObjectByOffset(i);
++	for(i=0;i<femmodel->nodes->Size();i++){
++		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+ 		node->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromVector(vector,name,type);
+ 	}
+ }
+ 
+-void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int* vector, int name, int type){
++void InputUpdateFromVectorx(FemModel* femmodel,int* vector, int name, int type){
+ 
+ 	int i;
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<nodes->Size();i++){
+-		Node* node=(Node*)nodes->GetObjectByOffset(i);
++	for(i=0;i<femmodel->nodes->Size();i++){
++		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+ 		node->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromVector(vector,name,type);
+ 	}
+ }
+ 
+-void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool* vector, int name, int type){
++void InputUpdateFromVectorx(FemModel* femmodel,bool* vector, int name, int type){
+ 
+ 	int i;
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<nodes->Size();i++){
+-		Node* node=(Node*)nodes->GetObjectByOffset(i);
++	for(i=0;i<femmodel->nodes->Size();i++){
++		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+ 		node->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromVector(vector,name,type);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 15849)
+@@ -8,9 +8,9 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,Vector<IssmDouble>* vector, int name,int type);
+-void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,IssmDouble* vector, int name,int type);
+-void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int* vector, int name,int type);
+-void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,bool* vector, int name,int type);
++void	InputUpdateFromVectorx(FemModel* femmodel,Vector<IssmDouble>* vector, int name,int type);
++void	InputUpdateFromVectorx(FemModel* femmodel,IssmDouble* vector, int name,int type);
++void	InputUpdateFromVectorx(FemModel* femmodel,int* vector, int name,int type);
++void	InputUpdateFromVectorx(FemModel* femmodel,bool* vector, int name,int type);
+ 
+ #endif  /* _UPDATEINPUTSFROMVECTORXX_H */
+Index: ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 15849)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void GetSolutionFromInputsx( Vector<IssmDouble>** psolution, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters);
++void GetSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel);
+ 
+ #endif  /* _GETSOLUTIONFROMINPUTSXX_H */
+Index: ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 15849)
+@@ -6,12 +6,11 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void	GetSolutionFromInputsx( Vector<IssmDouble>** psolution, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters){
++void GetSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel){
+ 
+ 	/*intermediary: */
+-	int gsize;
+-	int i;
+-	Element* element=NULL;
++	int      gsize;
++	Element* element = NULL;
+ 
+ 	int configuration_type;
+ 
+@@ -21,18 +20,18 @@
+ 	if(VerboseModule()) _printf0_("   Get solution from inputs\n");
+ 
+ 	/*retrive parameters: */
+-	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+ 	/*Get size of vector: */
+-	gsize=nodes->NumberOfDofs(configuration_type,GsetEnum);
+-	if (gsize==0) _error_("Allocating a Vec of size 0 as gsize=0 for configuration: " << EnumToStringx(configuration_type));
++	gsize=femmodel->nodes->NumberOfDofs(configuration_type,GsetEnum);
++	if(gsize==0) _error_("Allocating a Vec of size 0 as gsize=0 for configuration: " << EnumToStringx(configuration_type));
+ 
+ 	/*Initialize solution: */
+ 	solution=new Vector<IssmDouble>(gsize);
+ 
+ 	/*Go through elements and plug solution: */
+-	for (i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(int i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->GetSolutionFromInputs(solution);
+ 	}
+ 
+@@ -41,5 +40,4 @@
+ 
+ 	/*Assign output pointers:*/
+ 	*psolution=solution;
+-
+ }
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 15849)
+@@ -8,22 +8,21 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../SurfaceAreax/SurfaceAreax.h"
+ 
+-void SurfaceAverageVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
++void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel,int weight_index){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	Element* element=NULL;
+ 
+ 	/*output: */
+-	IssmDouble J=0;
++	IssmDouble J = 0.;
+ 	IssmDouble J_sum;
+ 
+ 	/*Compute surface area and add to elements inputs */
+-	SurfaceAreax(NULL,elements,nodes,vertices, loads,materials,parameters);
++	SurfaceAreax(NULL,femmodel);
+ 
+ 	/*Compute Misfit: */
+-	for (i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(int i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		J+=element->SurfaceAverageVelMisfit(weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h	(revision 15849)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void SurfaceAverageVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel,int weight_index);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 15849)
+@@ -9,7 +9,7 @@
+ #include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+ #include "../InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h"
+ 
+-void  InputUpdateFromDakotax(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials*  materials,Parameters* parameters,double* variables,char* *variables_descriptors,int numvariables){
++void InputUpdateFromDakotax(FemModel* femmodel,double* variables,char* *variables_descriptors,int numvariables){
+ 
+ 	int     i,j,k,l;
+ 	int     dummy;
+@@ -26,9 +26,9 @@
+ 	char    root[50]; //root name of variable, ex: DragCoefficent, RhoIce, etc ...
+ 
+ 	/*retrieve parameters: */
+-	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
+-	parameters->FindParam(&qmu_part,&dummy,QmuPartitionEnum);
+-	numberofvertices=vertices->NumberOfVertices();
++	femmodel->parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
++	femmodel->parameters->FindParam(&qmu_part,&dummy,QmuPartitionEnum);
++	numberofvertices=femmodel->vertices->NumberOfVertices();
+ 
+ 	/*Go through all dakota descriptors, ex: "rho_ice","thermal_conductivity","thickness1","thickness2", etc ..., and 
+ 	 * for each descriptor, take the variable value and plug it into the inputs: */
+@@ -53,7 +53,7 @@
+ 			}
+ 
+ 			/*Now, pick up the parameter corresponding to root: */
+-			parameters->FindParam(&parameter,&nrows,&ncols,StringToEnumx(root));
++			femmodel->parameters->FindParam(&parameter,&nrows,&ncols,StringToEnumx(root));
+ 
+ 			/*We've got the parameter, we need to update it using qmu_part (a partitioning vector), 
+ 			 * and the distributed_values. Two cases: we either have a nrows=numberofvertices, in 
+@@ -82,7 +82,7 @@
+ 			#endif
+ 
+ 			/*Update inputs using the parameter matrix: */
+-			InputUpdateFromMatrixDakotax( elements,nodes, vertices,loads, materials,  parameters, parameter, nrows,ncols,StringToEnumx(root), VertexEnum);
++			InputUpdateFromMatrixDakotax(femmodel, parameter, nrows,ncols,StringToEnumx(root), VertexEnum);
+ 
+ 			/*increment i to skip the distributed values just collected: */
+ 			i+=npart-1; //careful, the for loop will add 1.
+@@ -99,7 +99,7 @@
+ 		}
+ 		else{
+ 			/*Ok, standard variable, just update inputs using the variable: */
+-			InputUpdateFromConstantx( elements,nodes, vertices,loads, materials,  parameters, variables[i],StringToEnumx(descriptor));
++			InputUpdateFromConstantx(femmodel,variables[i],StringToEnumx(descriptor));
+ 		}
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h	(revision 15849)
+@@ -7,6 +7,6 @@
+ 
+ #include "../../classes/classes.h"
+ 
+-void  InputUpdateFromDakotax(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials*  materials,Parameters* parameters,double* variables,char* *variables_descriptors,int numvariables);
++void  InputUpdateFromDakotax(FemModel* femmodel,double* variables,char* *variables_descriptors,int numvariables);
+ 
+ #endif  /* _INPUTUPDATEFROMDAKOTAXX_H */
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 15849)
+@@ -13,28 +13,26 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../ConstraintsStatex/ConstraintsStatex.h"
+ 
+-void ResetConstraintsx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters){
++void ResetConstraintsx(FemModel* femmodel){
+ 
+-	/*output: */
+-	int analysis_type;
+ 
+ 	/*Display message*/
+ 	if(VerboseModule()) _printf0_("   Resetting penalties\n");
+ 
+ 	/*recover parameters: */
+-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	int analysis_type;
++	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	/*Do we have penalties linked to rifts? In this case, run our special rifts penalty 
+ 	 * management routine, otherwise, skip : */
+ 	#ifdef _HAVE_RIFTS_
+-	if (RiftIsPresent(loads,analysis_type)){
++	if(RiftIsPresent(femmodel->loads,analysis_type)){
+ 		_error_("rift constraints reset not supported yet!");
+ 	}
+ 	#endif
+ 	#ifdef _HAVE_THERMAL_
+-	if(ThermalIsPresent(loads,analysis_type)){
+-		ThermalConstraintsReset(loads,analysis_type);
++	if(ThermalIsPresent(femmodel->loads,analysis_type)){
++		ThermalConstraintsReset(femmodel->loads,analysis_type);
+ 	}
+ 	#endif
+-
+ }
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 15849)
+@@ -8,7 +8,7 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void  ThermalConstraintsReset(Loads* loads, int configuration_type);
+-void ResetConstraintsx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters); 
++void ThermalConstraintsReset(Loads* loads, int configuration_type);
++void ResetConstraintsx(FemModel* femmodel);
+ 
+ #endif  /* _RESETCONSTRAINTSX_H */
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h	(revision 15849)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void SurfaceAreax( IssmDouble* pS, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
++void SurfaceAreax(IssmDouble* pS,FemModel* femmodel);
+ 
+ #endif  /* _SURFACEAREAX_H */
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 15849)
+@@ -8,19 +8,18 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+ 
+-void SurfaceAreax( IssmDouble* pS, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
++void SurfaceAreax(IssmDouble* pS,FemModel* femmodel){
+ 
+ 	/*Intermediary*/
+ 	Element* element=NULL;
+-	int i;
+ 
+ 	/*output: */
+-	IssmDouble S=0;
++	IssmDouble S = 0.;
+ 	IssmDouble S_sum;
+ 
+ 	/*Compute gradients: */
+-	for (i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(int i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		S+=element->SurfaceArea();
+ 	}
+ 
+@@ -30,7 +29,7 @@
+ 	S=S_sum;
+ 
+ 	/*add surface area to element inputs:*/
+-	InputUpdateFromConstantx(elements,nodes,vertices,loads,materials,parameters,S,SurfaceAreaEnum);
++	InputUpdateFromConstantx(femmodel,S,SurfaceAreaEnum);
+ 
+ 	/*Assign output pointers: */
+ 	if(pS) *pS=S;
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h	(revision 15849)
+@@ -8,11 +8,7 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void		InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,Vector<IssmDouble>* solution);
+-void        InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* solution);
++void	InputUpdateFromSolutionx(FemModel* femmodel,Vector<IssmDouble>* solution);
++void  InputUpdateFromSolutionx(FemModel* femmodel,IssmDouble* solution);
+ 
+-//with timestep
+-void		InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,Vector<IssmDouble>* solution,int timestep);
+-void        InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* solution, int timestep);
+-
+ #endif  /* _UPDATEINPUTSFROMSOLUTIONXX_H */
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 15849)
+@@ -6,29 +6,22 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* solution){
++void InputUpdateFromSolutionx(FemModel* femmodel,Vector<IssmDouble>* solution){
+ 
+-	IssmDouble* serial_solution=NULL;
+-
+ 	/*Serialize solution, so that elements can index into it on every CPU: */
+-	serial_solution=solution->ToMPISerial();
++	IssmDouble* serial_solution=solution->ToMPISerial();
+ 
+ 	/*Call overloaded form of InputUpdateFromSolutionx: */
+-	InputUpdateFromSolutionx( elements, nodes,  vertices,  loads,  materials,  parameters,serial_solution);
++	InputUpdateFromSolutionx(femmodel,serial_solution);
+ 
+-	/*Free ressources:*/
++	/*cleanup and return*/
+ 	xDelete<IssmDouble>(serial_solution);
+ }
+ 
+-void InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* solution){
++void InputUpdateFromSolutionx(FemModel* femmodel,IssmDouble* solution){
+ 
+-	/*Intermediary*/
+-	int i;
+-	Element* element=NULL;
+-
+-	/*Elements drive the update: */
+-	for (i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(int i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromSolution(solution);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 15849)
+@@ -6,7 +6,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void GetVectorFromInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, int name, int type){
++void GetVectorFromInputsx( Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type){
+ 
+ 	int i;
+ 	Vector<IssmDouble>* vector=NULL;
+@@ -14,17 +14,17 @@
+ 	if(type==VertexEnum){
+ 
+ 		/*Allocate vector*/
+-		vector=new Vector<IssmDouble>(vertices->NumberOfVertices());
++		vector=new Vector<IssmDouble>(femmodel->vertices->NumberOfVertices());
+ 
+ 		/*Look up in elements*/
+-		for(i=0;i<elements->Size();i++){
+-			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		for(i=0;i<femmodel->elements->Size();i++){
++			Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 			element->GetVectorFromInputs(vector,name);
+ 		}
+ 
+ 		/*Look up in materials*/
+-		for(i=0;i<materials->Size();i++){
+-			Material* material=(Material*)materials->GetObjectByOffset(i);
++		for(i=0;i<femmodel->materials->Size();i++){
++			Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 			material->GetVectorFromInputs(vector,name);
+ 		}
+ 	}
+@@ -38,7 +38,7 @@
+ 	*pvector=vector;
+ }
+ 
+-void GetVectorFromInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, int name, int type){
++void GetVectorFromInputsx(IssmDouble** pvector,FemModel* femmodel,int name, int type){
+ 
+ 	/*output: */
+ 	IssmDouble* vector=NULL;
+@@ -46,7 +46,7 @@
+ 	/*intermediary: */
+ 	Vector<IssmDouble>* vec_vector=NULL;
+ 
+-	GetVectorFromInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters, name, type);
++	GetVectorFromInputsx(&vec_vector,femmodel,name,type);
+ 	vector=vec_vector->ToMPISerial();
+ 
+ 	/*Free ressources:*/
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 15849)
+@@ -7,7 +7,7 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void	GetVectorFromInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int name,int type);
+-void	GetVectorFromInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int name,int type);
++void	GetVectorFromInputsx( Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type);
++void	GetVectorFromInputsx( IssmDouble** pvector,FemModel* femmodel,int name,int type);
+ 
+ #endif  /* _GETVECTORFROMINPUTSXX_H */
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 15849)
+@@ -6,60 +6,57 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* vector, int name, int type){
++void InputUpdateFromVectorDakotax(FemModel* femmodel,Vector<IssmDouble>* vector, int name, int type){
+ 
+-	double* serial_vector=NULL;
++	IssmDouble* serial_vector=vector->ToMPISerial();
++	InputUpdateFromVectorDakotax(femmodel,serial_vector,name, type);
+ 
+-	serial_vector=vector->ToMPISerial();
+-
+-	InputUpdateFromVectorDakotax( elements,nodes, vertices, loads, materials, parameters,serial_vector,name, type);
+-
+ 	/*Free ressources:*/
+ 	xDelete<double>(serial_vector);
+ }
+ 
+-void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* vector, int name, int type){
++void InputUpdateFromVectorDakotax(FemModel* femmodel,IssmDouble* vector, int name, int type){
+ 
+ 	int i;
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<nodes->Size();i++){
+-		Node* node=(Node*)nodes->GetObjectByOffset(i);
++	for(i=0;i<femmodel->nodes->Size();i++){
++		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+ 		node->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+ }
+ 
+-void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int* vector, int name, int type){
++void InputUpdateFromVectorDakotax(FemModel* femmodel,int* vector, int name, int type){
+ 
+ 	int i;
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<nodes->Size();i++){
+-		Node* node=(Node*)nodes->GetObjectByOffset(i);
++	for(i=0;i<femmodel->nodes->Size();i++){
++		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+ 		node->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+ }
+@@ -69,20 +66,20 @@
+ 	int i;
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<nodes->Size();i++){
+-		Node* node=(Node*)nodes->GetObjectByOffset(i);
++	for(i=0;i<femmodel->nodes->Size();i++){
++		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+ 		node->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 15849)
+@@ -8,9 +8,9 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,Vector<IssmDouble>* vector, int name,int type);
+-void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,double* vector, int name,int type);
+-void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int* vector, int name,int type);
+-void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,bool* vector, int name,int type);
++void	InputUpdateFromVectorDakotax(FemModel* femmodel,Vector<IssmDouble>* vector, int name,int type);
++void	InputUpdateFromVectorDakotax(FemModel* femmodel,IssmDouble* vector, int name,int type);
++void	InputUpdateFromVectorDakotax(FemModel* femmodel,int* vector, int name,int type);
++void	InputUpdateFromVectorDakotax(FemModel* femmodel,bool* vector, int name,int type);
+ 
+ #endif  /* _UPDATEINPUTSFROMVECTORDAKOTAXX_H */
+Index: ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h	(revision 15849)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void InputToResultx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type);
++void InputToResultx(FemModel* femmodel,int enum_type);
+ 
+ #endif  /* _INPUTTORESULTX_H */
+Index: ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 15849)
+@@ -7,21 +7,20 @@
+ #include "../../classes/classes.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void InputToResultx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type){
++void InputToResultx(FemModel* femmodel,int enum_type){
+ 
+ 	/*intermediary:*/
+-	int      step;
+-	IssmDouble   time;
+-	Element *element = NULL;
++	int        step;
++	IssmDouble time;
++	Element   *element = NULL;
+ 
+ 	/*Get time and step*/
+-	parameters->FindParam(&step,StepEnum);
+-	parameters->FindParam(&time,TimeEnum);
++	femmodel->parameters->FindParam(&step,StepEnum);
++	femmodel->parameters->FindParam(&time,TimeEnum);
+ 
+ 	/*Go through elemnets, and ask each element to transfer the enum_type input into the results dataset, with step and time information: */
+-	for(int i=0;i<elements->Size();i++){
+-
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(int i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputToResult(enum_type,step,time);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 15849)
+@@ -7,20 +7,20 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters){
++void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints,FemModel* femmodel){
+ 
+ 	/*output: */
+-	int converged=0;
+-	int num_unstable_constraints=0;
+-	int min_mechanical_constraints=0; 
++	int converged                  = 0;
++	int num_unstable_constraints   = 0;
++	int min_mechanical_constraints = 0;
+ 	int analysis_type;
+ 
+ 	/*Display message*/
+ 	if(VerboseModule()) _printf0_("   Constraining penalties\n");
+ 
+ 	/*recover parameters: */
+-	parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum);
+-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum);
++	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	/*Do we have penalties linked to rifts? In this case, run our special rifts penalty 
+ 	 * management routine, otherwise, skip : */
+@@ -30,13 +30,13 @@
+ 	converged=1;
+ 
+ 	#ifdef _HAVE_RIFTS_
+-	if (RiftIsPresent(loads,analysis_type)){
+-		RiftConstraintsState(&converged,&num_unstable_constraints,loads,min_mechanical_constraints,analysis_type);
++	if(RiftIsPresent(femmodel->loads,analysis_type)){
++		RiftConstraintsState(&converged,&num_unstable_constraints,femmodel->loads,min_mechanical_constraints,analysis_type);
+ 	}
+ 	#endif
+ 	#ifdef _HAVE_THERMAL_
+-	if(ThermalIsPresent(loads,analysis_type)){
+-		ThermalConstraintsState(loads,&converged,&num_unstable_constraints,analysis_type);
++	if(ThermalIsPresent(femmodel->loads,analysis_type)){
++		ThermalConstraintsState(femmodel->loads,&converged,&num_unstable_constraints,analysis_type);
+ 	}
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 15849)
+@@ -8,8 +8,8 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-int   ThermalIsPresent(Loads* loads,int analysis_type);
+-int    RiftIsPresent(Loads* loads,int analysis_type);
+-void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters); 
++int  ThermalIsPresent(Loads* loads,int analysis_type);
++int  RiftIsPresent(Loads* loads,int analysis_type);
++void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints,FemModel* femmodel);
+ 
+ #endif  /* _CONSTRAINTSSTATEX_H */
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 15849)
+@@ -6,66 +6,66 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool   constant, int name){
++void InputUpdateFromConstantx(FemModel* femmodel,bool constant, int name){
+ 
+ 	int i;
+ 	if(VerboseModule()) _printf0_("   Input updates from constant\n");
+ 
+ 	/*Elements and loads drive the update: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromConstant(constant,name);
+ 	}
+ }
+-void InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int    constant, int name){
++void InputUpdateFromConstantx(FemModel* femmodel,int constant, int name){
+ 
+ 	int i;
+ 	if(VerboseModule()) _printf0_("   Input updates from constant\n");
+ 
+ 	/*Elements and loads drive the update: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromConstant(constant,name);
+ 	}
+ }
+-void InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble constant, int name){
++void InputUpdateFromConstantx(FemModel* femmodel,IssmDouble constant, int name){
+ 
+ 	int i;
+ 	if(VerboseModule()) _printf0_("   Input updates from constant\n");
+ 
+ 	/*Elements and loads drive the update: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
++	for(i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 15848)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 15849)
+@@ -8,8 +8,8 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void		InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters, bool   constant, int name);
+-void		InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters, int    constant, int name);
+-void		InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters, IssmDouble constant, int name);
++void InputUpdateFromConstantx(FemModel* femmode,bool   constant    ,int name);
++void InputUpdateFromConstantx(FemModel* femmode,int    constant    ,int name);
++void InputUpdateFromConstantx(FemModel* femmode,IssmDouble constant,int name);
+ 
+ #endif  /* _UPDATEINPUTSFROMCONSTANTXX_H */
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15849)
+@@ -49,11 +49,11 @@
+ 
+ 	/*Retrieve inputs as the initial state for the non linear iteration*/
+ 	//femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+-	GetSolutionFromInputsx(&ug_sed, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++	GetSolutionFromInputsx(&ug_sed,femmodel);
+ 
+ 	if(isefficientlayer) {
+ 		femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
+-		GetSolutionFromInputsx(&ug_epl, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++		GetSolutionFromInputsx(&ug_epl,femmodel);
+ 	}
+ 
+ 	/*Iteration on the two layers*/
+@@ -69,8 +69,8 @@
+ 		}
+ 
+ 		femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
+-		InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);
+-		InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);
++		InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
++		InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
+ 		femmodel->UpdateConstraintsx();
+ 		femmodel->parameters->SetParam(HydrologySedimentEnum,HydrologyLayerEnum);
+ 
+@@ -89,8 +89,8 @@
+ 			uf_sed->Copy(uf_sed_sub_iter);
+ 			delete ug_sed;
+ 			Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
+-			InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);
+-			ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++			InputUpdateFromSolutionx(femmodel,ug_sed);
++			ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
+ 
+ 			if (!sedconverged){
+ 				if(VerboseConvergence()) _printf0_("   # Sediment unstable constraints = " << num_unstable_constraints << "\n");
+@@ -103,9 +103,9 @@
+ 
+ 			if(sedconverged){
+ 				femmodel->parameters->SetParam(sediment_kmax,HydrologySedimentKmaxEnum);
+-				InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sedconverged,ConvergedEnum);
+-				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);
+-				InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,HydrologySedimentKmaxEnum);
++				InputUpdateFromConstantx(femmodel,sedconverged,ConvergedEnum);
++				InputUpdateFromSolutionx(femmodel,ug_sed);
++				InputUpdateFromConstantx(femmodel,sediment_kmax,HydrologySedimentKmaxEnum);
+ 				break;
+ 			}
+ 		}
+@@ -113,8 +113,8 @@
+ 		/*Second layer*/
+ 		if(isefficientlayer){
+ 			femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
+-			InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);
+-			InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);
++			InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
++			InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
+ 			femmodel->HydrologyEPLupdateDomainx();
+ 			femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
+ 
+@@ -133,8 +133,8 @@
+ 				uf_epl->Copy(uf_epl_sub_iter);
+ 				delete ug_epl; 
+ 				Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys;
+-				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);
+-				ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++				InputUpdateFromSolutionx(femmodel,ug_epl);
++				ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
+ 				femmodel->HydrologyEPLupdateDomainx();			
+ 
+ 				if (!eplconverged){
+@@ -147,9 +147,9 @@
+ 				eplcount++;
+ 
+ 				if(eplconverged){
+-					InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,eplconverged,ConvergedEnum);
+-					InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,MeltingOffsetEnum);
+-					InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);
++					InputUpdateFromConstantx(femmodel,eplconverged,ConvergedEnum);
++					InputUpdateFromConstantx(femmodel,sediment_kmax,MeltingOffsetEnum);
++					InputUpdateFromSolutionx(femmodel,ug_epl);
+ 					break;
+ 				}
+ 			}
+@@ -206,8 +206,8 @@
+ 		if(hydroconverged)break;
+ 	}
+ 
+-	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_sed);
+-	if(isefficientlayer)InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_epl);
++	InputUpdateFromSolutionx(femmodel,ug_sed);
++	if(isefficientlayer)InputUpdateFromSolutionx(femmodel,ug_epl);
+ 
+ 	/*Free ressources: */
+ 	delete ug_epl;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp	(revision 15849)
+@@ -34,6 +34,6 @@
+ //        }
+ //#endif
+ 	Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys;
+-	InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug); 
++	InputUpdateFromSolutionx(femmodel,ug); 
+ 	delete ug;  
+ }
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15849)
+@@ -41,12 +41,12 @@
+ 	converged=false;
+ 
+ 	/*Start non-linear iteration using input velocity: */
+-	GetSolutionFromInputsx(&ug,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	GetSolutionFromInputsx(&ug,femmodel);
+ 	Reducevectorgtofx(&uf,ug,femmodel->nodes,femmodel->parameters);
+ 
+ 	//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
+-	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,converged,ConvergedEnum);
+-	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
++	InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
++	InputUpdateFromSolutionx(femmodel,ug);
+ 
+ 	for(;;){
+ 
+@@ -60,7 +60,7 @@
+ 			Reduceloadx(pf,Kfs,ys);delete Kfs;
+ 			Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);delete df; delete Kff; delete pf;
+ 			Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
+-			InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
++			InputUpdateFromSolutionx(femmodel,ug);
+ 			delete old_ug;old_ug=ug;
+ 			delete old_uf;old_uf=uf;
+ 		}
+@@ -79,7 +79,7 @@
+ 		Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); delete Jff; delete pJf;
+ 		uf->AXPY(duf, 1.0); delete duf;
+ 		Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
+-		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
++		InputUpdateFromSolutionx(femmodel,ug);
+ 
+ 		/*Check convergence*/
+ 		convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters); 
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15849)
+@@ -43,7 +43,7 @@
+ 
+ 	/*First get ug_horiz:*/
+ 	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+-	GetSolutionFromInputsx(&ug_horiz, femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters);
++	GetSolutionFromInputsx(&ug_horiz,femmodel);
+ 	Reducevectorgtofx(&uf_horiz, ug_horiz, femmodel->nodes,femmodel->parameters);
+ 
+ 	for(;;){
+@@ -53,7 +53,7 @@
+ 		femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+ 		//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
+-		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_horiz);
++		InputUpdateFromSolutionx(femmodel,ug_horiz);
+ 		delete ug_horiz;
+ 
+ 		//save pointer to old velocity
+@@ -65,7 +65,7 @@
+ 		Reduceloadx(pf_horiz, Kfs_horiz, ys); delete Kfs_horiz;
+ 		Solverx(&uf_horiz, Kff_horiz, pf_horiz, old_uf_horiz, df_horiz,femmodel->parameters);
+ 		Mergesolutionfromftogx(&ug_horiz, uf_horiz,ys,femmodel->nodes,femmodel->parameters); delete ys;
+-		InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_horiz);
++		InputUpdateFromSolutionx(femmodel,ug_horiz);
+ 
+ 		convergence(&converged,Kff_horiz,pf_horiz,uf_horiz,old_uf_horiz,femmodel->parameters); delete Kff_horiz; delete pf_horiz; delete df_horiz;
+ 
+@@ -81,7 +81,7 @@
+ 		Mergesolutionfromftogx(&ug_vert, uf_vert,ys,femmodel->nodes,femmodel->parameters);
+ 		delete uf_vert; 
+ 		delete ys; 
+-		InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_vert);
++		InputUpdateFromSolutionx(femmodel,ug_vert);
+ 		delete ug_vert;
+ 
+ 		/*Increase count: */
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 15849)
+@@ -40,8 +40,8 @@
+ 	count=1;
+ 	converged=false;
+ 
+-	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);
+-	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);
++	InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
++	InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
+ 	femmodel->UpdateConstraintsx();
+ 
+ 	for(;;){
+@@ -53,9 +53,9 @@
+ 		Solverx(&tf, Kff, pf,tf_old, df, femmodel->parameters);
+ 		delete Kff;delete pf;delete tg; delete df;
+ 		Mergesolutionfromftogx(&tg, tf,ys,femmodel->nodes,femmodel->parameters); delete ys;
+-		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,tg);
++		InputUpdateFromSolutionx(femmodel,tg);
+ 
+-		ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
+ 
+ 		if (!converged){
+ 			if(VerboseConvergence()) _printf0_("   #unstable constraints = " << num_unstable_constraints << "\n");
+@@ -67,13 +67,13 @@
+ 		}
+ 		count++;
+ 
+-		InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
++		InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
+ 
+ 		if(converged)break;
+ 	}
+ 
+-	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,tg);
+-	InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,melting_offset,MeltingOffsetEnum);
++	InputUpdateFromSolutionx(femmodel,tg);
++	InputUpdateFromConstantx(femmodel,melting_offset,MeltingOffsetEnum);
+ 
+ 	/*Free ressources: */
+ 	delete tg;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp	(revision 15849)
+@@ -30,6 +30,6 @@
+ 	Reduceloadx(pf, Kfs, ys,true); delete Kfs; //true means spc = 0
+ 	Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); delete Kff; delete pf; delete df;
+ 	Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters,true); delete ys; //true means spc0
+-	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
++	InputUpdateFromSolutionx(femmodel,ug);
+ 	delete ug; delete uf;
+ }
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 15849)
+@@ -46,12 +46,12 @@
+ 	converged=false;
+ 
+ 	/*Start non-linear iteration using input velocity: */
+-	GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++	GetSolutionFromInputsx(&ug,femmodel);
+ 	Reducevectorgtofx(&uf, ug, femmodel->nodes,femmodel->parameters);
+ 
+ 	//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
+-	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
+-	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
++	InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
++	InputUpdateFromSolutionx(femmodel,ug);
+ 
+ 	for(;;){
+ 
+@@ -66,10 +66,10 @@
+ 		Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
+ 
+ 		convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters); delete Kff; delete pf; delete df;
+-		InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
+-		InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
++		InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
++		InputUpdateFromSolutionx(femmodel,ug);
+ 
+-		ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
+ 		if(VerboseConvergence()) _printf0_("   number of unstable constraints: " << num_unstable_constraints << "\n");
+ 
+ 		//rift convergence
+@@ -92,8 +92,8 @@
+ 		if(count>=max_nonlinear_iterations){
+ 			_printf0_("   maximum number of nonlinear iterations (" << max_nonlinear_iterations << ") exceeded\n"); 
+ 			converged=true;
+-			InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
+-			InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);		
++			InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
++			InputUpdateFromSolutionx(femmodel,ug);		
+ 			bool max_iteration_state=true;
+ 			int tempStep=1;
+ 			IssmDouble tempTime=1.0;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15848)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15849)
+@@ -648,8 +648,8 @@
+ 	IssmDouble *bed       = NULL;
+ 
+ 	/*get vertex vectors for bed and thickness: */
+-	GetVectorFromInputsx(&thickness,elements,nodes, vertices, loads, materials, parameters, ThicknessEnum,VertexEnum);
+-	GetVectorFromInputsx(&bed      ,elements,nodes, vertices, loads, materials, parameters, BedEnum,      VertexEnum);
++	GetVectorFromInputsx(&thickness,this, ThicknessEnum,VertexEnum);
++	GetVectorFromInputsx(&bed      ,this, BedEnum,      VertexEnum);
+ 
+ 	/*Allocate vector*/
+ 	vz=new Vector<IssmDouble>(vertices->NumberOfVertices());
+@@ -664,7 +664,7 @@
+ 	vz->Assemble();
+ 
+ 	/*Update element inputs*/
+-	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,vz,VzMeshEnum,VertexPIdEnum);
++	InputUpdateFromVectorx(this,vz,VzMeshEnum,VertexPIdEnum);
+ 
+ 	/*Free ressources:*/
+ 	delete vz;
+@@ -730,7 +730,7 @@
+ 		case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+ 		case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+ 		case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx( responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx(responses,this,weight_index); break;
+ 		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+ 		case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(responses,weight_index); break;
+ 		case ThicknessAlongGradientEnum: ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+@@ -1472,7 +1472,7 @@
+ 		if(flag==ScaledEnum){
+ 
+ 			/*this response was scaled. pick up the response from the inputs: */
+-			GetVectorFromInputsx(&vertex_response,elements,nodes, vertices, loads, materials, parameters, StringToEnumx(root),VertexEnum);
++			GetVectorFromInputsx(&vertex_response,this, StringToEnumx(root),VertexEnum);
+ 
+ 			/*Now, average it onto the partition nodes: */
+ 			AverageOntoPartitionx(&qmu_response,elements,nodes,vertices,loads,materials,parameters,vertex_response);
+@@ -1578,7 +1578,7 @@
+ 	delete mask;
+ 
+ 	/*Update Mask*/
+-	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,serial_mask,HydrologydcMaskEplactiveEnum,NodeSIdEnum);
++	InputUpdateFromVectorx(this,serial_mask,HydrologydcMaskEplactiveEnum,NodeSIdEnum);
+ 	xDelete<IssmDouble>(serial_mask);
+ 
+ 	/*Step 2: update node activity. If one element is connected to mask=1, all nodes are active*/
+@@ -1634,7 +1634,7 @@
+ 	transferg->Assemble();
+ 
+ 	/*Update Inputs*/
+-	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,transferg,WaterTransferEnum,NodesEnum);
++	InputUpdateFromVectorx(this,transferg,WaterTransferEnum,NodesEnum);
+ 	delete transferg;
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15849-15850.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15849-15850.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15849-15850.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 15849)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 15850)
+@@ -61,7 +61,7 @@
+ 	}
+ }
+ 
+-void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool* vector, int name, int type){
++void InputUpdateFromVectorDakotax(FemModel* femmodel,bool* vector, int name, int type){
+ 
+ 	int i;
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15850-15851.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15850-15851.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15850-15851.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 15850)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 15851)
+@@ -1,5 +1,5 @@
+ AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@
+-AUTOMAKE_OPTIONS = subdir-objects
++#AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(PYTHONWRAPPEREXT)
+ 
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15850)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15851)
+@@ -1,5 +1,5 @@
+ AM_CPPFLAGS = @DAKOTAINCL@ @MATLABINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@
+-AUTOMAKE_OPTIONS = subdir-objects
++#AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(MATLABWRAPPEREXT)
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15851-15852.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15851-15852.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15851-15852.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/classes/matdamageice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.py	(revision 15851)
++++ ../trunk-jpl/src/m/classes/matdamageice.py	(revision 15852)
+@@ -116,9 +116,9 @@
+ 		md = checkfield(md,'materials.rho_water','>',0)
+ 		md = checkfield(md,'materials.rho_freshwater','>',0)
+ 		md = checkfield(md,'materials.mu_water','>',0)
+-		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices,1])
+-		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements,1])
+-		md = checkfield(md,'materials.rheology_Z','>',0,'size',[md.mesh.numberofvertices,1])
++		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
++		md = checkfield(md,'materials.rheology_Z','>',0,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius','LliboutryDuval'])
+ 		md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.lithosphere_density','>',0,'numel',[1]);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15852-15853.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15852-15853.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15852-15853.diff	(revision 16134)
@@ -0,0 +1,168 @@
+Index: ../trunk-jpl/src/c/analyses/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15852)
++++ ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15853)
+@@ -26,6 +26,9 @@
+ 		ResetConstraintsx(femmodel);
+ 	}
+ 
++	if(VerboseSolution()) _printf0_("   setting basal Dirichlet boundary conditions\n");
++	femmodel->UpdateThermalBasalConstraintsx();
++
+ 	if(VerboseSolution()) _printf0_("   computing temperatures\n");
+ 	femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+ 	solutionsequence_thermal_nonlinear(femmodel);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15852)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15853)
+@@ -1556,7 +1556,6 @@
+ }
+ /*}}}*/
+ #endif
+-
+ #ifdef _HAVE_HYDROLOGY_
+ void FemModel::HydrologyEPLupdateDomainx(void){ /*{{{*/
+ 
+@@ -1639,3 +1638,14 @@
+ }
+ /*}}}*/
+ #endif
++#ifdef _HAVE_THERMAL_
++void FemModel::UpdateThermalBasalConstraintsx(void){ /*{{{*/
++
++	for(int i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		element->UpdateThermalBasalConstraints();
++	}
++
++}
++/*}}}*/
++#endif
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15852)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15853)
+@@ -126,6 +126,10 @@
+ 		virtual void   InputControlUpdate(IssmDouble scalar,bool save_parameter)=0;
+ 		#endif
+ 
++		#ifdef _HAVE_THERMAL_
++		virtual void UpdateThermalBasalConstraints(void)=0;
++		#endif
++
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		virtual void GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode)=0;
+ 		virtual void GetHydrologyTransfer(Vector<IssmDouble>* transfer)=0; 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15852)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15853)
+@@ -245,6 +245,10 @@
+ 		void	         InputUpdateFromSolutionAdjointHoriz( IssmDouble* solution);
+ 		#endif
+ 
++		#ifdef _HAVE_THERMAL_
++		void UpdateThermalBasalConstraints(void){_error_("not implemented yet");};
++		#endif
++
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		ElementMatrix* CreateKMatrixHydrologyShreve(void);
+ 		ElementMatrix* CreateKMatrixHydrologyDCInefficient(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15852)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15853)
+@@ -5004,6 +5004,57 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
++/*FUNCTION Penta::UpdateThermalBasalConstraints{{{*/
++void  Penta::UpdateThermalBasalConstraints(void){
++
++	/*Intermediary*/
++	bool        isenthalpy,isdynamicbasalspc,istemperatelayer;
++	int         numindices;
++	IssmDouble  h_pmp,pressure;
++	int        *indices = NULL;
++
++	/* Only update Constraints at the base of grounded ice*/
++	if(!IsOnBed() || !IsFloating()) return;
++
++	/*Check wether dynamic basal boudary conditions are activated -> TODO: Johannes :) */
++	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
++	if(!isenthalpy) return;
++	//parameters->FindParam(&isdynamicbasalspc,ThermalIsdynamicbasalspcEnum);
++	isdynamicbasalspc = true;
++	if(!isdynamicbasalspc) return;
++
++
++	/*Fetch indices of basal nodes for this finite element*/
++	BasalNodeIndices(&numindices,&indices,this->VelocityInterpolation());
++
++	/*Get parameters and inputs: */
++	Input* pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);
++
++	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
++	GaussPenta* gauss=new GaussPenta();
++	for(int i=0;i<numindices;i++){
++		gauss->GaussNode(this->element_type,indices[i]);
++
++		/*Check wether there is a temperate layer at the base or not -> TODO: Johannes:) */
++		istemperatelayer = false;
++
++		/*Add Dirichlet constraint to this node if there is a positive thickness of temperate ice*/
++		if(istemperatelayer){
++
++			/*Calculate enthalpy at pressure melting point */
++			pressure_input->GetInputValue(&pressure,gauss);
++			h_pmp=matpar->PureIceEnthalpy(pressure);
++
++
++			/*Apply Dirichlet condition (dof = 0 here, since there is only one degree of freedom per node)*/
++			nodes[indices[i]]->ApplyConstraint(0,h_pmp);
++		}
++	}
++
++	/*Free ressources:*/
++	xDelete<int>(indices);
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef _HAVE_CONTROL_
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15852)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15853)
+@@ -348,8 +348,9 @@
+ 		ElementVector* CreatePVectorThermalShelf(void);
+ 		ElementVector* CreatePVectorThermalSheet(void);
+ 		void	         GetSolutionFromInputsThermal(Vector<IssmDouble>* solutiong);
+-		void           InputUpdateFromSolutionThermal( IssmDouble* solutiong);
+-		void           InputUpdateFromSolutionEnthalpy( IssmDouble* solutiong);
++		void           InputUpdateFromSolutionThermal(IssmDouble* solutiong);
++		void           InputUpdateFromSolutionEnthalpy(IssmDouble* solutiong);
++		void           UpdateThermalBasalConstraints(void);
+ 		#endif
+ 
+ 		#ifdef _HAVE_BALANCED_
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 15852)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 15853)
+@@ -98,9 +98,13 @@
+ 		void TimeAdaptx(IssmDouble* pdt);
+ 		void UpdateConstraintsx(void);
+ 		int  UpdateVertexPositionsx(void);
+-		void ParEplMask(void);		
++		#ifdef _HAVE_HYDROLOGY_
+ 		void HydrologyTransferx(void);
+ 		void HydrologyEPLupdateDomainx(void);
++		#endif
++		#ifdef _HAVE_THERMAL_
++		void UpdateThermalBasalConstraintsx(void);
++		#endif
+ };
+ 
+ #endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-15853-15854.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15853-15854.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15853-15854.diff	(revision 16134)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 15853)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 15854)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-08,2e-09,2e-05,5e-09,5e-09};
++field_tolerances={1e-08,2e-09,2e-05,5e-09,1e-08};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test287.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.m	(revision 15853)
++++ ../trunk-jpl/test/NightlyRun/test287.m	(revision 15854)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-13};
++field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-13};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 15853)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 15854)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-08,2e-09,2e-05,2e-09,2e-09]
++field_tolerances=[1e-08,2e-09,2e-05,2e-09,1e-08]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test287.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.py	(revision 15853)
++++ ../trunk-jpl/test/NightlyRun/test287.py	(revision 15854)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+-field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-13];
++field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-13];
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15854-15855.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15854-15855.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15854-15855.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15854)
++++ ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15855)
+@@ -43,11 +43,6 @@
+ 				%
+ 				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
+ 			end
+-
+-			if size(md.diagnostic.icefront,2)==3 || size(md.diagnostic.icefront,2)==5,
+-				front=md.diagnostic.icefront;
+-				md.diagnostic.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
+-			end
+ 		end% }}}
+ 	end
+ 	methods
Index: /issm/oecreview/Archive/15392-16133/ISSM-15855-15856.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15855-15856.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15855-15856.diff	(revision 16134)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15855)
++++ ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15856)
+@@ -25,26 +25,6 @@
+ 		loadingforce             = NaN;
+ 		requested_outputs        = NaN;
+ 	end
+-	methods (Static)
+-		function obj = loadobj(obj) % {{{
+-			% This function is directly called by matlab when a model object is
+-			% loaded. If the input is a struct it is an old version of this class and
+-			% old fields must be recovered (make sure they are in the deprecated
+-			% model properties)
+-
+-			if verLessThan('matlab','7.9'),
+-				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
+-				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
+-
+-				% This is a Matlab bug: all the fields of md have their default value
+-				% Example of error message:
+-				% Warning: Error loading an object of class 'model':
+-				% Undefined function or method 'exist' for input arguments of type 'cell'
+-				%
+-				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
+-			end
+-		end% }}}
+-	end
+ 	methods
+ 		function obj = diagnostic(varargin) % {{{
+ 			switch nargin
Index: /issm/oecreview/Archive/15392-16133/ISSM-15856-15857.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15856-15857.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15856-15857.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 15856)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 15857)
+@@ -20,7 +20,7 @@
+ 	Constraints* constraints=*pconstraints;
+ 
+ 	/*return if 2d mesh*/
+-	if(iomodel->dim==2) *pconstraints=constraints;
++	if(iomodel->dim==2) return;
+ 
+ 	/*Fetch data: */
+ 	iomodel->FetchData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15857-15858.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15857-15858.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15857-15858.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15857)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15858)
+@@ -59,7 +59,7 @@
+ 		 %}}}
+ 		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+ 
+-			 available_queues={'long','normal','debug','devel'};
++			 available_queues={'long','normal','debug','devel','alphatst@pbspl233'};
+ 			 queue_requirements_time=[5*24*60 8*60 2*60 2*60];
+ 			 queue_requirements_np=[2048 2048 150 150];
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15858-15859.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15858-15859.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15858-15859.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15858)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15859)
+@@ -58,7 +58,7 @@
+ 
+ 	#check that each element has at least one flag
+ 	if not any(SIAflag+SSAflag+L1L2flag+HOflag+FSflag):
+-		raise TypeError("elements type not assigned, must be specified")
++		raise TypeError("elements type not assigned, supported models are 'SIA','SSA','HO' and 'FS'")
+ 
+ 	#check that each element has only one flag
+ 	if any(SIAflag+SSAflag+L1L2flag+HOflag+FSflag>1):
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15858)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15859)
+@@ -54,7 +54,7 @@
+ 
+ %check that each element has at least one flag
+ if any(SIAflag+SSAflag+HOflag+L1L2flag+FSflag==0),
+-	error('elements type not assigned, must be specified')
++	error('elements type not assigned, supported models are ''SIA'',''SSA'',''HO'' and ''FS''')
+ end
+ 
+ %check that each element has only one flag
Index: /issm/oecreview/Archive/15392-16133/ISSM-15859-15860.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15859-15860.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15859-15860.diff	(revision 16134)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 15859)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 15860)
+@@ -126,6 +126,13 @@
+ 			md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
+ 			md = checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]);
+ 
++			%Only SSA, HO and FS are supported right now
++			if solution==StressbalanceSolutionEnum()
++				if ~(md.flowequation.isSSA || md.flowequation.isHO || md.flowequation.isFS),
++					md = checkmessage(md,['inversion can only be performed for SSA, HO or FS ice flow models']);
++				end
++			end
++
+ 			if solution==BalancethicknessSolutionEnum()
+ 				md = checkfield(md,'inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1);
+ 			elseif solution==BalancethicknessSoftSolutionEnum()
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 15859)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 15860)
+@@ -134,6 +134,11 @@
+ 		md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices,num_controls])
+ 		md = checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices,num_controls])
+ 
++		#Only SSA, HO and FS are supported right now
++		if solution==StressbalanceSolutionEnum():
++			if not (md.flowequation.isSSA or md.flowequation.isHO or md.flowequation.isFS):
++				md.checkmessage("'inversion can only be performed for SSA, HO or FS ice flow models");
++
+ 		if solution==BalancethicknessSolutionEnum():
+ 			md = checkfield(md,'inversion.thickness_obs','size',[md.mesh.numberofvertices],'NaN',1)
+ 		else:
Index: /issm/oecreview/Archive/15392-16133/ISSM-15860-15861.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15860-15861.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15860-15861.diff	(revision 16134)
@@ -0,0 +1,325 @@
+Index: ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp	(revision 15860)
++++ ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp	(revision 15861)
+@@ -9,22 +9,23 @@
+ 
+ void NodesDofx(Nodes* nodes, Parameters* parameters,int configuration_type){
+ 
+-	int noerr=1;
+-	int found=0;
+-
+ 	/*Do we have any nodes for this analysis type? :*/
+-	if(nodes->NumberOfNodes(configuration_type)){ 
++	if(!nodes->NumberOfNodes(configuration_type)) return;
+ 
+-		/*Ensure that only for each cpu, the partition border nodes only will be taken into account once 
+-		 * across the cluster. To do so, we flag all the clone nodes: */
+-		nodes->FlagClones(configuration_type);
++	/*Do we really need to update dof indexings*/
++	if(!nodes->RequiresDofReindexing(configuration_type)) return;
+ 
+-		/*Go through all nodes, and build degree of freedom lists. Each node gets a fixed number of dofs. When 
+-		 *a  node has already been distributed dofs on one cpu, all other cpus with the same node cannot distribute it 
+-		 *anymore. Use clone field to be sure of that: */
+-		nodes->DistributeDofs(configuration_type,GsetEnum);
+-		nodes->DistributeDofs(configuration_type,FsetEnum);
+-		nodes->DistributeDofs(configuration_type,SsetEnum);
+-	}
++	if(VerboseModule()) _printf0_("   Renumbering degrees of freedom\n");
+ 
++	/*Ensure that only for each cpu, the partition border nodes only will be taken into account once 
++	 * across the cluster. To do so, we flag all the clone nodes: */
++	nodes->FlagClones(configuration_type);
++
++	/*Go through all nodes, and build degree of freedom lists. Each node gets a fixed number of dofs. When 
++	 *a  node has already been distributed dofs on one cpu, all other cpus with the same node cannot distribute it 
++	 *anymore. Use clone field to be sure of that: */
++	nodes->DistributeDofs(configuration_type,GsetEnum);
++	nodes->DistributeDofs(configuration_type,FsetEnum);
++	nodes->DistributeDofs(configuration_type,SsetEnum);
++
+ }
+Index: ../trunk-jpl/src/c/classes/Nodes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodes.h	(revision 15860)
++++ ../trunk-jpl/src/c/classes/Nodes.h	(revision 15861)
+@@ -26,6 +26,7 @@
+ 		/*numerics*/
+ 		void  DistributeDofs(int analysis_type,int SETENUM);
+ 		void  FlagClones(int analysis_type);
++		bool  RequiresDofReindexing(int analysis_type);
+ 		int   MaxNumDofs(int analysis_type,int setenum);
+ 		int   MaximumId(void);
+ 		int   NumberOfDofs(int analysis_type,int setenum);
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 15860)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 15861)
+@@ -32,6 +32,7 @@
+ 		int id;    //unique arbitrary id.
+ 		int sid;   //"serial" id (rank of this node if the dataset was serial on 1 cpu)
+ 
++		bool         indexingupdate;
+ 		DofIndexing  indexing;
+ 		Inputs      *inputs;               //properties of this node
+ 		int          analysis_type;
+@@ -87,6 +88,8 @@
+ 		void  Activate(void);
+ 		void  Deactivate(void);
+ 		void  UpdateSpcs(IssmDouble* ys);
++		void  ReindexingDone(void);
++		bool  RequiresDofReindexing(void);
+ 		int   IsFloating();
+ 		int   IsGrounded();
+ 		void  VecMerge(Vector<IssmDouble>* ug, IssmDouble* vector_serial,int setenum);
+Index: ../trunk-jpl/src/c/classes/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15860)
++++ ../trunk-jpl/src/c/classes/Nodes.cpp	(revision 15861)
+@@ -50,11 +50,11 @@
+ 	_assert_(setenum==GsetEnum || setenum==FsetEnum || setenum==SsetEnum);
+ 
+ 	/*Go through objects, and distribute dofs locally, from 0 to numberofdofsperobject*/
+-	for (i=0;i<this->Size();i++){
++	for(i=0;i<this->Size();i++){
+ 		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+-		if (node->InAnalysis(analysis_type)){
++		if(node->InAnalysis(analysis_type)){
+ 			node->DistributeDofs(&dofcount,setenum);
+ 		}
+ 	}
+@@ -72,7 +72,7 @@
+ 	for(i=0;i<my_rank;i++){
+ 		dofcount+=alldofcount[i];
+ 	}
+-	for (i=0;i<this->Size();i++){
++	for(i=0;i<this->Size();i++){
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+ 		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 		if (node->InAnalysis(analysis_type)){
+@@ -90,7 +90,7 @@
+ 		alltruedofs=xNewZeroInit<int>(numnodes*maxdofspernode);
+ 	}
+ 
+-	for (i=0;i<this->Size();i++){
++	for(i=0;i<this->Size();i++){
+ 		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 		if (node->InAnalysis(analysis_type)){
+ 			node->ShowTrueDofs(truedofs,maxdofspernode,setenum);//give maxdofspernode, column size, so that nodes can index into truedofs
+@@ -100,13 +100,21 @@
+ 	ISSM_MPI_Allreduce((void*)truedofs,(void*)alltruedofs,numnodes*maxdofspernode,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
+ 
+ 	/* Now every cpu knows the true dofs of everyone else that is not a clone*/
+-	for (i=0;i<this->Size();i++){
++	for(i=0;i<this->Size();i++){
+ 		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 		if (node->InAnalysis(analysis_type)){
+ 			node->UpdateCloneDofs(alltruedofs,maxdofspernode,setenum);
+ 		}
+ 	}
+ 
++	/*Update indexingupdateflag*/
++	for(i=0;i<this->Size();i++){
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
++		if (node->InAnalysis(analysis_type)){
++			node->ReindexingDone();
++		}
++	}
++
+ 	/* Free ressources: */
+ 	xDelete<int>(alldofcount);
+ 	xDelete<int>(truedofs);
+@@ -329,3 +337,34 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Nodes::RequiresDofReindexing{{{*/
++bool Nodes::RequiresDofReindexing(int analysis_type){
++
++	int flag = 0;
++	int allflag;
++
++	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
++	for(int i=0;i<this->Size();i++){
++
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
++
++		/*Check that this node corresponds to our analysis currently being carried out: */
++		if(node->InAnalysis(analysis_type)){
++			if(node->RequiresDofReindexing()){
++				flag = 1;
++				break;
++			}
++		}
++	}
++
++	/*Grab max of all cpus: */
++	ISSM_MPI_Allreduce((void*)&flag,(void*)&allflag,1,ISSM_MPI_INT,ISSM_MPI_MAX,IssmComm::GetComm());
++
++	if(allflag){
++		return true;
++	}
++	else{
++		return false;
++	}
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15860)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15861)
+@@ -38,6 +38,7 @@
+ 	for(k=0;k<3;k++) this->coord_system[k][k]=1.0;
+ 
+ 	/*indexing:*/
++	this->indexingupdate = true;
+ 	DistributeNumDofs(&this->indexing,analysis_type,in_approximation); //number of dofs per node
+ 	gsize=this->indexing.gsize;
+ 
+@@ -126,6 +127,7 @@
+ 	_printf_("   sid: " << sid << "\n");
+ 	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+ 	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
++	_printf_("   indexingupdate: " << indexingupdate << "\n");
+ 	indexing.Echo();
+ 	_printf_("   inputs: " << inputs << "\n");
+ 
+@@ -138,6 +140,8 @@
+ 	_printf_("   id: " << id << "\n");
+ 	_printf_("   sid: " << sid << "\n");
+ 	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
++	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
++	_printf_("   indexingupdate: " << indexingupdate << "\n");
+ 	indexing.DeepEcho();
+ 	_printf_("   inputs\n");
+ 
+@@ -158,6 +162,7 @@
+ /*FUNCTION Node::GetDof {{{*/
+ int   Node::GetDof(int dofindex,int setenum){
+ 
++	_assert_(!this->indexingupdate);
+ 	if(setenum==GsetEnum){
+ 		_assert_(dofindex>=0 && dofindex<indexing.gsize);
+ 		return indexing.gdoflist[dofindex];
+@@ -179,6 +184,8 @@
+ 	int count=0;
+ 	int count2=0;
+ 
++	_assert_(!this->indexingupdate);
++
+ 	if(approximation_enum==NoneApproximationEnum){
+ 		if(setenum==GsetEnum)for(i=0;i<this->indexing.gsize;i++) outdoflist[i]=indexing.gdoflist[i];
+ 		if(setenum==FsetEnum)for(i=0;i<this->indexing.fsize;i++) outdoflist[i]=indexing.fdoflist[i];
+@@ -241,6 +248,8 @@
+ 	int count=0;
+ 	int count2=0;
+ 
++	_assert_(!this->indexingupdate);
++
+ 	if(approximation_enum==NoneApproximationEnum){
+ 		if(setenum==GsetEnum)for(i=0;i<this->indexing.gsize;i++) outdoflist[i]=i;
+ 		else if(setenum==FsetEnum){
+@@ -364,6 +373,20 @@
+ 	this->indexing.svalues[dof-1]=value;
+ }
+ /*}}}*/
++/*FUNCTION Node::RequiresDofReindexing{{{*/
++bool Node::RequiresDofReindexing(void){
++
++	return this->indexingupdate;
++
++}
++/*}}}*/
++/*FUNCTION Node::ReindexingDone{{{*/
++void Node::ReindexingDone(void){
++
++	this->indexingupdate = false;
++
++}
++/*}}}*/
+ /*FUNCTION Node::RelaxConstraint{{{*/
+ void  Node::RelaxConstraint(int dof){
+ 
+@@ -375,13 +398,11 @@
+ /*FUNCTION Node::CreateVecSets {{{*/
+ void  Node::CreateVecSets(Vector<IssmDouble>* pv_g,Vector<IssmDouble>* pv_f,Vector<IssmDouble>* pv_s){
+ 
+-	IssmDouble gvalue=1.0; //all nodes are in the g set;
++	IssmDouble gvalue=1.; //all nodes are in the g set;
+ 	IssmDouble value;
+ 
+-	int i;
++	for(int i=0;i<this->indexing.gsize;i++){
+ 
+-	for(i=0;i<this->indexing.gsize;i++){
+-
+ 		/*g set: */
+ 		pv_g->SetValue(indexing.gdoflist[i],gvalue,INS_VAL);
+ 
+@@ -456,14 +477,20 @@
+ /*FUNCTION Node::Deactivate{{{*/
+ void  Node::Deactivate(void){
+ 
+-	indexing.Deactivate();
++	if(IsActive()){
++		this->indexingupdate = true;
++		indexing.Deactivate();
++	}
+ 
+ }
+ /*}}}*/
+ /*FUNCTION Node::Activate{{{*/
+ void  Node::Activate(void){
+ 
+-	indexing.Activate();
++	if(!IsActive()){
++		this->indexingupdate = true;
++		indexing.Activate();
++	}
+ 
+ }
+ /*}}}*/
+@@ -490,7 +517,7 @@
+ 	int numdofs=0;
+ 
+ 	if(approximation_enum==NoneApproximationEnum){
+-		if (setenum==GsetEnum) numdofs=this->indexing.gsize;
++		if      (setenum==GsetEnum) numdofs=this->indexing.gsize;
+ 		else if (setenum==FsetEnum) numdofs=this->indexing.fsize;
+ 		else if (setenum==SsetEnum) numdofs=this->indexing.ssize;
+ 		else _error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
+@@ -620,11 +647,8 @@
+ /*FUNCTION Node::UpdateSpcs {{{*/
+ void   Node::UpdateSpcs(IssmDouble* ys){
+ 
+-	int     count=0;
+-	int     i;
+-
+-	count=0;
+-	for(i=0;i<this->indexing.gsize;i++){
++	int count = 0;
++	for(int i=0;i<this->indexing.gsize;i++){
+ 		if(this->indexing.s_set[i]){
+ 			this->indexing.svalues[i]=ys[this->indexing.sdoflist[count]];
+ 			count++;
+@@ -633,12 +657,12 @@
+ }
+ /*}}}*/
+ /*FUNCTION Node::VecMerge {{{*/
+-void   Node::VecMerge(Vector<IssmDouble>* ug, IssmDouble* vector_serial,int setenum){
++void Node::VecMerge(Vector<IssmDouble>* ug, IssmDouble* vector_serial,int setenum){
+ 
+-	IssmDouble* values=NULL;
+-	int*    indices=NULL;
+-	int     count=0;
+-	int     i;
++	IssmDouble *values  = NULL;
++	int        *indices = NULL;
++	int         count   = 0;
++	int         i;
+ 
+ 	if(setenum==FsetEnum){
+ 		if(this->indexing.fsize){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15861-15862.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15861-15862.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15861-15862.diff	(revision 16134)
@@ -0,0 +1,72 @@
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15861)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15862)
+@@ -392,7 +392,7 @@
+ 
+ 	/*Dof should be added to the f-set, and taken out of the s-set:*/
+ 	DofInFSet(dof-1);
+-	this->indexing.svalues[dof-1]=NAN;
++	this->indexing.svalues[dof-1]=0.;
+ }
+ /*}}}*/
+ /*FUNCTION Node::CreateVecSets {{{*/
+@@ -453,8 +453,11 @@
+ 	 * to a fixed value during computations. */
+ 	_assert_(dof<this->indexing.gsize);
+ 
+-	this->indexing.f_set[dof]=0; //n splits into f (for which we solve) and s (single point constraints)
+-	this->indexing.s_set[dof]=1;
++	if(this->indexing.f_set[dof] == 1){
++		this->indexingupdate = true;
++		this->indexing.f_set[dof]=0; //n splits into f (for which we solve) and s (single point constraints)
++		this->indexing.s_set[dof]=1;
++	}
+ }
+ /*}}}*/
+ /*FUNCTION Node::DofInFSet {{{*/
+@@ -463,8 +466,11 @@
+ 	/*Put dof for this node into the f set (ie, this dof will NOT be constrained 
+ 	 * to a fixed value during computations. */
+ 
+-	this->indexing.f_set[dof]=1; 
+-	this->indexing.s_set[dof]=0;
++	if(this->indexing.f_set[dof] == 0){
++		this->indexingupdate = true;
++		this->indexing.f_set[dof]=1; 
++		this->indexing.s_set[dof]=0;
++	}
+ }
+ /*}}}*/
+ /*FUNCTION Node::FreezeDof{{{*/
+Index: ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 15861)
++++ ../trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 15862)
+@@ -100,12 +100,12 @@
+ /*FUNCTION SpcTransient::ConstrainNode{{{*/
+ void SpcTransient::ConstrainNode(Nodes* nodes,Parameters* parameters){
+ 
+-	Node* node=NULL;
+-	IssmDouble time=0;
+-	int    i;
+-	IssmDouble alpha=-1;
+-	IssmDouble value;
+-	bool   found=false;
++	Node       *node  = NULL;
++	IssmDouble  time  = 0.;
++	int         i;
++	IssmDouble  alpha = -1.;
++	IssmDouble  value;
++	bool        found = false;
+ 
+ 	/*Chase through nodes and find the node to which this SpcTransient applys: */
+ 	node=(Node*)nodes->GetObjectById(NULL,nodeid);
+@@ -139,6 +139,7 @@
+ 
+ 		/*Apply or relax constraint: */
+ 		if(xIsNan<IssmDouble>(value)){
++			printf("-------------- file: SpcTransient.cpp line: %i\n",__LINE__); 
+ 			node->RelaxConstraint(dof);
+ 		}
+ 		else node->ApplyConstraint(dof,value);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15862-15863.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15862-15863.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15862-15863.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 15862)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 15863)
+@@ -397,10 +397,10 @@
+ /*FUNCTION Matpar::GetEnthalpyDiffusionParameter{{{*/
+ IssmDouble Matpar::GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure){
+ 	if(enthalpy<PureIceEnthalpy(pressure)){
+-		return thermalconductivity/(rho_ice*heatcapacity);
++	  return thermalconductivity/(rho_ice*heatcapacity);
+ 	}
+ 	else{
+-		return 0.1*thermalconductivity/(rho_ice*heatcapacity);
++	  return 1.045*pow(10,-4.)/rho_ice; // K0=1.045*1e-4 from Aschwanden 2012. TODO: fetch K0 from model
+ 	}
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15863-15864.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15863-15864.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15863-15864.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/shared/Elements/elements.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 15863)
++++ ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 15864)
+@@ -9,6 +9,8 @@
+ 
+ IssmDouble Paterson(IssmDouble temperature);
+ IssmDouble Arrhenius(IssmDouble temperature,IssmDouble depth,IssmDouble n);
++IssmDouble LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n);
++IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n);
+ IssmDouble PddSurfaceMassBlance(IssmDouble* monthlytemperatures,  IssmDouble* monthlyprec, IssmDouble* pdds, IssmDouble* pds, 
+ 				IssmDouble signorm, IssmDouble yts, IssmDouble h, IssmDouble s,
+ 				IssmDouble rho_ice, IssmDouble rho_water, IssmDouble desfac, IssmDouble s0p);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15864-15865.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15864-15865.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15864-15865.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15864)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15865)
+@@ -128,6 +128,7 @@
+ 
+ 		#ifdef _HAVE_THERMAL_
+ 		virtual void UpdateThermalBasalConstraints(void)=0;
++		virtual void ComputeBasalMeltrate(void)=0;
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15865-15866.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15865-15866.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15865-15866.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15865)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15866)
+@@ -247,6 +247,7 @@
+ 
+ 		#ifdef _HAVE_THERMAL_
+ 		void UpdateThermalBasalConstraints(void){_error_("not implemented yet");};
++		void ComputeBasalMeltrate(void){_error_("not implemented yet");};
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15866-15867.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15866-15867.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15866-15867.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15866)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15867)
+@@ -351,6 +351,7 @@
+ 		void           InputUpdateFromSolutionThermal(IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionEnthalpy(IssmDouble* solutiong);
+ 		void           UpdateThermalBasalConstraints(void);
++		void           ComputeBasalMeltrate(void);
+ 		#endif
+ 
+ 		#ifdef _HAVE_BALANCED_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15867-15868.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15867-15868.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15867-15868.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15867)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15868)
+@@ -5055,6 +5055,12 @@
+ 	xDelete<int>(indices);
+ }
+ /*}}}*/
++/*FUNCTION Penta::ComputeBasalMeltrate{{{*/
++void Penta::ComputeBasalMeltrate(void){
++  /*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/
++  // Do nothing for now.
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef _HAVE_CONTROL_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15868-15869.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15868-15869.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15868-15869.diff	(revision 16134)
@@ -0,0 +1,117 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15868)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15869)
+@@ -5058,7 +5058,111 @@
+ /*FUNCTION Penta::ComputeBasalMeltrate{{{*/
+ void Penta::ComputeBasalMeltrate(void){
+   /*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/
+-  // Do nothing for now.
++
++  /*Parameters*/
++  int dim;
++  parameters->FindParam(&dim, MeshDimensionEnum);
++
++  /* Intermediaries */
++  bool isenthalpy;
++  int i, analysis_type;
++  IssmDouble xyz_list[NUMVERTICES][3];
++  IssmDouble heatflux, geothermalflux_value;
++  IssmDouble vec_heatflux[dim];
++  IssmDouble normal_base[dim], d1enthalpy[dim];
++  IssmDouble kappa;
++  IssmDouble enthalpy, enthalpyup;
++  IssmDouble pressure, pressureup;
++  IssmDouble meltrate, watercolumn;
++  IssmDouble temperature, waterfraction;
++  IssmDouble latentheat;
++  IssmDouble basalfriction, alpha2;
++  IssmDouble vx,vy,vz;
++  IssmDouble dt;
++  Friction*  friction=NULL;
++  GaussPenta* gauss=NULL;
++  GaussPenta* gaussup=NULL;
++
++  /*check that dimension is 3*/
++  if(dim!=3) return;
++  /* Only compute melt rates at the base of grounded ice*/
++  if(!IsOnBed() || IsFloating()) return;
++  /*Check wether enthalpy is activated*/
++  parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
++  if(!isenthalpy) return;
++
++  /*Fetch parameters: */
++  latentheat=matpar->GetLatentHeat();
++
++  Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
++  Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
++  Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
++  Input* vx_input=inputs->GetInput(VxEnum);                         _assert_(vx_input);
++  Input* vy_input=inputs->GetInput(VyEnum);                         _assert_(vy_input);
++  Input* vz_input=inputs->GetInput(VzEnum);                         _assert_(vz_input);
++  Input* geothermalflux_input=inputs->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
++
++  /*Build friction element, needed later: */
++  parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++  friction=new Friction("3d",inputs,matpar,analysis_type);
++
++  /* Start  looping on the number of gaussian points: */
++  gauss=new GaussPenta(0,1,2,2);
++  gaussup=new GaussPenta(3,4,5,2);
++  for(int ig=gauss->begin();ig<gauss->end();ig++){
++    gauss->GaussPoint(ig);
++    gaussup->GaussPoint(ig);
++    
++    watercolumn_input->GetInputValue(&watercolumn, gauss);
++    enthalpy_input->GetInputValue(&enthalpy, gauss);
++    pressure_input->GetInputValue(&pressure, gauss);
++
++    /*Calculate basal meltrate*/
++    if((watercolumn>0) && (enthalpy<matpar->PureIceEnthalpy(pressure)))
++      enthalpy=matpar->PureIceEnthalpy(pressure);
++    else if(enthalpy<matpar->PureIceEnthalpy(pressure)){
++      meltrate=0.;   //TODO: set zero meltrate and watercolumn in model
++      watercolumn=0.;
++      return;
++    }
++
++    /*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice) */
++    enthalpy_input->GetInputValue(&enthalpyup, gaussup);
++    pressure_input->GetInputValue(&pressureup, gaussup);    
++    if(enthalpyup>=matpar->PureIceEnthalpy(pressureup))
++      for(i=0;i<dim;i++)
++	vec_heatflux[i]=0.;
++    else{
++      enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
++      kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy,pressure);
++      for(i=0;i<dim;i++)
++	vec_heatflux[i]=-1.*kappa*d1enthalpy[i];
++    }
++    /*Get normal at base*/
++    normal_base[0]=0.; normal_base[1]=0.; normal_base[2]=1.; // TODO: get normal from model geometry
++    
++    heatflux=0.;
++    for(i=0;i<dim;i++)
++      heatflux+=(vec_heatflux[i])*normal_base[i];
++    geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
++    
++    matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy,pressure);
++    
++    friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
++    vx_input->GetInputValue(&vx,gauss);
++    vy_input->GetInputValue(&vy,gauss);
++    vz_input->GetInputValue(&vz,gauss);
++    basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
++    meltrate=(basalfriction-(heatflux-geothermalflux_value))/(1-waterfraction)/latentheat; 
++    
++    /*Update water column*/
++    this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++    if(reCast<bool,IssmDouble>(dt))
++      watercolumn+=dt*meltrate;
++    else
++      watercolumn=meltrate;
++    // TODO: feed meltrate & watercolumn back to model
++  }  
+ }
+ /*}}}*/
+ #endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-15869-15870.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15869-15870.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15869-15870.diff	(revision 16134)
@@ -0,0 +1,228 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 15869)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 15870)
+@@ -397,10 +397,10 @@
+ /*FUNCTION Matpar::GetEnthalpyDiffusionParameter{{{*/
+ IssmDouble Matpar::GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure){
+ 	if(enthalpy<PureIceEnthalpy(pressure)){
+-	  return thermalconductivity/(rho_ice*heatcapacity);
++		return thermalconductivity/(rho_ice*heatcapacity);
+ 	}
+ 	else{
+-	  return 1.045*pow(10,-4.)/rho_ice; // K0=1.045*1e-4 from Aschwanden 2012. TODO: fetch K0 from model
++		return 1.045*1.e-4/rho_ice; // K0=1.045*1e-4 from Aschwanden 2012. TODO: fetch K0 from model
+ 	}
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15869)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15870)
+@@ -5057,112 +5057,109 @@
+ /*}}}*/
+ /*FUNCTION Penta::ComputeBasalMeltrate{{{*/
+ void Penta::ComputeBasalMeltrate(void){
+-  /*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/
++	/*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/
+ 
+-  /*Parameters*/
+-  int dim;
+-  parameters->FindParam(&dim, MeshDimensionEnum);
++	/* Intermediaries */
++	bool        isenthalpy;
++	int         i,j,analysis_type;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble  heatflux, geothermalflux_value;
++	IssmDouble  vec_heatflux[3];
++	IssmDouble  normal_base[3], d1enthalpy[3];
++	IssmDouble  kappa;
++	IssmDouble  enthalpy, enthalpyup;
++	IssmDouble  pressure, pressureup;
++	IssmDouble  meltrate, watercolumn;
++	IssmDouble  temperature, waterfraction;
++	IssmDouble  latentheat;
++	IssmDouble  basalfriction, alpha2;
++	IssmDouble  vx,vy,vz;
++	IssmDouble  dt;
++	Friction   *friction                 = NULL;
++	GaussPenta *gauss                    = NULL;
++	GaussPenta *gaussup                  = NULL;
+ 
+-  /* Intermediaries */
+-  bool isenthalpy;
+-  int i, analysis_type;
+-  IssmDouble xyz_list[NUMVERTICES][3];
+-  IssmDouble heatflux, geothermalflux_value;
+-  IssmDouble vec_heatflux[dim];
+-  IssmDouble normal_base[dim], d1enthalpy[dim];
+-  IssmDouble kappa;
+-  IssmDouble enthalpy, enthalpyup;
+-  IssmDouble pressure, pressureup;
+-  IssmDouble meltrate, watercolumn;
+-  IssmDouble temperature, waterfraction;
+-  IssmDouble latentheat;
+-  IssmDouble basalfriction, alpha2;
+-  IssmDouble vx,vy,vz;
+-  IssmDouble dt;
+-  Friction*  friction=NULL;
+-  GaussPenta* gauss=NULL;
+-  GaussPenta* gaussup=NULL;
++	/* Only compute melt rates at the base of grounded ice*/
++	if(!IsOnBed() || IsFloating()) return;
+ 
+-  /*check that dimension is 3*/
+-  if(dim!=3) return;
+-  /* Only compute melt rates at the base of grounded ice*/
+-  if(!IsOnBed() || IsFloating()) return;
+-  /*Check wether enthalpy is activated*/
+-  parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+-  if(!isenthalpy) return;
++	/*Check wether enthalpy is activated*/
++	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
++	if(!isenthalpy) return;
+ 
+-  /*Fetch parameters: */
+-  latentheat=matpar->GetLatentHeat();
++	/*Fetch parameters and inputs */
++	latentheat=matpar->GetLatentHeat();
++	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
++	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
++	Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
++	Input* vx_input=inputs->GetInput(VxEnum);                         _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum);                         _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum);                         _assert_(vz_input);
++	Input* geothermalflux_input=inputs->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
+ 
+-  Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
+-  Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
+-  Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
+-  Input* vx_input=inputs->GetInput(VxEnum);                         _assert_(vx_input);
+-  Input* vy_input=inputs->GetInput(VyEnum);                         _assert_(vy_input);
+-  Input* vz_input=inputs->GetInput(VzEnum);                         _assert_(vz_input);
+-  Input* geothermalflux_input=inputs->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 
+-  /*Build friction element, needed later: */
+-  parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-  friction=new Friction("3d",inputs,matpar,analysis_type);
++	/*Build friction element, needed later: */
++	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	friction=new Friction("3d",inputs,matpar,analysis_type);
+ 
+-  /* Start  looping on the number of gaussian points: */
+-  gauss=new GaussPenta(0,1,2,2);
+-  gaussup=new GaussPenta(3,4,5,2);
+-  for(int ig=gauss->begin();ig<gauss->end();ig++){
+-    gauss->GaussPoint(ig);
+-    gaussup->GaussPoint(ig);
+-    
+-    watercolumn_input->GetInputValue(&watercolumn, gauss);
+-    enthalpy_input->GetInputValue(&enthalpy, gauss);
+-    pressure_input->GetInputValue(&pressure, gauss);
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussPenta(0,1,2,2);
++	gaussup=new GaussPenta(3,4,5,2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++		gauss->GaussPoint(ig);
++		gaussup->GaussPoint(ig);
+ 
+-    /*Calculate basal meltrate*/
+-    if((watercolumn>0) && (enthalpy<matpar->PureIceEnthalpy(pressure)))
+-      enthalpy=matpar->PureIceEnthalpy(pressure);
+-    else if(enthalpy<matpar->PureIceEnthalpy(pressure)){
+-      meltrate=0.;   //TODO: set zero meltrate and watercolumn in model
+-      watercolumn=0.;
+-      return;
+-    }
++		watercolumn_input->GetInputValue(&watercolumn, gauss);
++		enthalpy_input->GetInputValue(&enthalpy, gauss);
++		pressure_input->GetInputValue(&pressure, gauss);
+ 
+-    /*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice) */
+-    enthalpy_input->GetInputValue(&enthalpyup, gaussup);
+-    pressure_input->GetInputValue(&pressureup, gaussup);    
+-    if(enthalpyup>=matpar->PureIceEnthalpy(pressureup))
+-      for(i=0;i<dim;i++)
+-	vec_heatflux[i]=0.;
+-    else{
+-      enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
+-      kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy,pressure);
+-      for(i=0;i<dim;i++)
+-	vec_heatflux[i]=-1.*kappa*d1enthalpy[i];
+-    }
+-    /*Get normal at base*/
+-    normal_base[0]=0.; normal_base[1]=0.; normal_base[2]=1.; // TODO: get normal from model geometry
+-    
+-    heatflux=0.;
+-    for(i=0;i<dim;i++)
+-      heatflux+=(vec_heatflux[i])*normal_base[i];
+-    geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
+-    
+-    matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy,pressure);
+-    
+-    friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+-    vx_input->GetInputValue(&vx,gauss);
+-    vy_input->GetInputValue(&vy,gauss);
+-    vz_input->GetInputValue(&vz,gauss);
+-    basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
+-    meltrate=(basalfriction-(heatflux-geothermalflux_value))/(1-waterfraction)/latentheat; 
+-    
+-    /*Update water column*/
+-    this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-    if(reCast<bool,IssmDouble>(dt))
+-      watercolumn+=dt*meltrate;
+-    else
+-      watercolumn=meltrate;
+-    // TODO: feed meltrate & watercolumn back to model
+-  }  
++		/*Calculate basal meltrate*/
++		if((watercolumn>0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
++			enthalpy=matpar->PureIceEnthalpy(pressure);
++		}
++		else if(enthalpy<matpar->PureIceEnthalpy(pressure)){
++			meltrate=0.;   //TODO: set zero meltrate and watercolumn in model
++			watercolumn=0.;
++			return;
++		}
++
++		/*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice) */
++		enthalpy_input->GetInputValue(&enthalpyup, gaussup);
++		pressure_input->GetInputValue(&pressureup, gaussup);    
++		if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)){
++		 for(i=0;i<3;i++) vec_heatflux[i]=0.;
++		}
++		else{
++			enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
++			kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy,pressure);
++			for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
++		}
++
++		/*Get normal vector to the bed */
++		BedNormal(&normal_base[0],xyz_list_tria);
++
++		heatflux=0.;
++		for(i=0;i<3;i++) heatflux+=(vec_heatflux[i])*normal_base[i];
++		geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
++
++		matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy,pressure);
++
++		friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
++		vx_input->GetInputValue(&vx,gauss);
++		vy_input->GetInputValue(&vy,gauss);
++		vz_input->GetInputValue(&vz,gauss);
++		basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
++		meltrate=(basalfriction-(heatflux-geothermalflux_value))/(1-waterfraction)/latentheat; 
++
++		/*Update water column*/
++		this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++		if(reCast<bool,IssmDouble>(dt))
++		 watercolumn+=dt*meltrate;
++		else
++		 watercolumn=meltrate;
++		// TODO: feed meltrate & watercolumn back to model
++	}  
+ }
+ /*}}}*/
+ #endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-15870-15871.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15870-15871.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15870-15871.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive430.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15871-15872.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15871-15872.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15871-15872.diff	(revision 16134)
@@ -0,0 +1,151 @@
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15871)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15872)
+@@ -2117,3 +2117,61 @@
+ 	*pindices    = indices;
+ }
+ /*}}}*/
++/*FUNCTION PentaRef::SurfaceNodeIndices{{{*/
++void PentaRef::SurfaceNodeIndices(int* pnumindices,int** pindices,int finiteelement){
++
++	/*Output*/
++	int  numindices;
++	int* indices = NULL;
++
++	switch(finiteelement){
++		case P1Enum: case P1DGEnum:
++			numindices = 3;
++			indices    = xNew<int>(numindices);
++			indices[0] = 3;
++			indices[1] = 4;
++			indices[2] = 5;
++			break;
++		case P1bubbleEnum: case P1bubblecondensedEnum:
++			numindices = 3;
++			indices    = xNew<int>(numindices);
++			indices[0] = 3;
++			indices[1] = 4;
++			indices[2] = 5;
++			break;
++		case P2xP1Enum:
++			numindices = 6;
++			indices    = xNew<int>(numindices);
++			indices[0] = 3;
++			indices[1] = 4;
++			indices[2] = 5;
++			indices[3] = 9;
++			indices[4] = 10;
++			indices[5] = 11;
++			break;
++		case P1xP2Enum:
++			numindices = 3;
++			indices    = xNew<int>(numindices);
++			indices[0] = 3;
++			indices[1] = 4;
++			indices[2] = 5;
++			return;
++		case P2Enum:
++			numindices = 6;
++			indices    = xNew<int>(numindices);
++			indices[0] = 3;
++			indices[1] = 4;
++			indices[2] = 5;
++			indices[3] = 12;
++			indices[4] = 13;
++			indices[5] = 14;
++			break;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	/*Assign output pointer*/
++	*pnumindices = numindices;
++	*pindices    = indices;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15871)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15872)
+@@ -5025,7 +5025,7 @@
+ 
+ 
+ 	/*Fetch indices of basal nodes for this finite element*/
+-	BasalNodeIndices(&numindices,&indices,this->VelocityInterpolation());
++	BasalNodeIndices(&numindices,&indices,this->element_type);
+ 
+ 	/*Get parameters and inputs: */
+ 	Input* pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);
+@@ -5061,7 +5061,7 @@
+ 
+ 	/* Intermediaries */
+ 	bool        isenthalpy;
+-	int         i,j,analysis_type;
++	int         i,j,analysis_type,numindices,numindicesup;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+ 	IssmDouble  heatflux, geothermalflux_value;
+@@ -5076,9 +5076,9 @@
+ 	IssmDouble  basalfriction, alpha2;
+ 	IssmDouble  vx,vy,vz;
+ 	IssmDouble  dt;
+-	Friction   *friction                 = NULL;
+-	GaussPenta *gauss                    = NULL;
+-	GaussPenta *gaussup                  = NULL;
++	int        *indices   = NULL;
++	int        *indicesup = NULL;
++	Friction   *friction  = NULL;
+ 
+ 	/* Only compute melt rates at the base of grounded ice*/
+ 	if(!IsOnBed() || IsFloating()) return;
+@@ -5103,13 +5103,18 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	friction=new Friction("3d",inputs,matpar,analysis_type);
+ 
+-	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(0,1,2,2);
+-	gaussup=new GaussPenta(3,4,5,2);
+-	for(int ig=gauss->begin();ig<gauss->end();ig++){
+-		gauss->GaussPoint(ig);
+-		gaussup->GaussPoint(ig);
++	/*Fetch indices of basal and surface nodes for this finite element*/
++	BasalNodeIndices(&numindices,&indices,this->element_type);
++	SurfaceNodeIndices(&numindicesup,&indicesup,this->element_type);
++	_assert_(numindices==numindicesup); 
+ 
++	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
++	GaussPenta* gauss=new GaussPenta();
++	GaussPenta* gaussup=new GaussPenta();
++	for(i=0;i<numindices;i++){
++		gauss->GaussNode(this->element_type,indices[i]);
++		gaussup->GaussNode(this->element_type,indicesup[i]);
++
+ 		watercolumn_input->GetInputValue(&watercolumn, gauss);
+ 		enthalpy_input->GetInputValue(&enthalpy, gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
+@@ -5160,6 +5165,12 @@
+ 		 watercolumn=meltrate;
+ 		// TODO: feed meltrate & watercolumn back to model
+ 	}  
++
++	/*Clean up and return*/
++	xDelete<int>(indices);
++	xDelete<int>(indicesup);
++	delete gauss;
++	delete gaussup;
+ }
+ /*}}}*/
+ #endif
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15871)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15872)
+@@ -69,6 +69,7 @@
+ 		void GetInputDerivativeValue(IssmDouble* pvalues, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss){_error_("only PentaGauss are supported");};
+ 
+ 		void BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement);
++		void SurfaceNodeIndices(int* pnumindices,int** pindices,int finiteelement);
+ 		int  NumberofNodes(void);
+ 		int  NumberofNodesVelocity(void);
+ 		int  NumberofNodesPressure(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15872-15873.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15872-15873.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15872-15873.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/interp/InterpFromFile.m
+===================================================================
+--- ../trunk-jpl/src/m/interp/InterpFromFile.m	(revision 15872)
++++ ../trunk-jpl/src/m/interp/InterpFromFile.m	(revision 15873)
+@@ -37,9 +37,12 @@
+ %load file
+ Names=FieldFindVarNames(filename);
+ Data=load(filename);
++disp('WARNING: function deprecated, replace InterpFromFile by the following command:');
+ if strcmpi(Names.interp,'node'),
++	disp(['   data=InterpFromGridToMesh(' Names.xname ',' Names.yname ',' Names.dataname ',x,y,default_value);']);
+ 	data_out=InterpFromGridToMesh(Data.(Names.xname),Data.(Names.yname),Data.(Names.dataname),x,y,default_value);
+ else
++	disp(['   data=InterpFromMeshToMesh2d(' Names.indexname ',' Names.xname ',' Names.yname ',' Names.dataname ',x,y);']);
+ 	data_out=InterpFromMeshToMesh2d(Data.(Names.indexname),Data.(Names.xname),Data.(Names.yname),Data.(Names.dataname),x,y);
+ end
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15873-15874.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15873-15874.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15873-15874.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15874-15875.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15874-15875.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15874-15875.diff	(revision 16134)
@@ -0,0 +1,198 @@
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15874)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15875)
+@@ -8,7 +8,7 @@
+ 	case 101, name='SquareShelfConstrainedStressSSA2d';
+ 	case 102, name='SquareShelfConstrainedStressSSA3d';
+ 	case 103, name='SquareShelfConstrainedStressHO';
+-	case 104, name='SquareShelfConstrainedStressS3d';
++	case 104, name='SquareShelfConstrainedStressFS';
+ 	case 105, name='SquareShelfConstrainedMasstransp2d';
+ 	case 106, name='SquareShelfConstrainedMasstransp2dDG';
+ 	case 107, name='SquareShelfConstrainedMasstransp3d';
+@@ -30,18 +30,18 @@
+ 	case 201, name='SquareShelfStressSSA2d';
+ 	case 202, name='SquareShelfStressSSA3d';
+ 	case 203, name='SquareShelfStressHO';
+-	case 204, name='SquareShelfStressS3d';
++	case 204, name='SquareShelfStressFS';
+ 	case 205, name='SquareShelfStressMHOPenalties';
+ 	case 206, name='SquareShelfTherStea';
+ 	case 207, name='SquareShelfTherTran';
+ 	case 208, name='SquareShelfTranSSA2d';
+ 	case 209, name='SquareShelfTranSSA3d';
+ 	case 210, name='SquareShelfTranHO';
+-	case 211, name='SquareShelfTranS3d';
++	case 211, name='SquareShelfTranFS';
+ 	case 212, name='SquareShelfCMBSSA2d';
+ 	case 213, name='SquareShelfCMBSSA3d';
+ 	case 214, name='SquareShelfCMBHO';
+-	case 215, name='SquareShelfCMBS3d';
++	case 215, name='SquareShelfCMBFS';
+ 	case 216, name='SquareShelfStressSSA2dRift';
+ 	case 217, name='SquareShelfConstrained';
+ 	case 218, name='SquareShelfConstrainedDakotaB';
+@@ -79,7 +79,7 @@
+ 	case 305, name='SquareSheetConstrainedStressSIA3d';
+ 	case 306, name='SquareSheetConstrainedStressHSSA3d';
+ 	case 307, name='SquareSheetConstrainedStressHO';
+-	case 308, name='SquareSheetConstrainedStressS3d';
++	case 308, name='SquareSheetConstrainedStressFS';
+ 	case 309, name='SquareSheetConstrainedMasstransp2d';
+ 	case 320, name='SquareSheetConstrainedMasstransp2dDG';
+ 	case 311, name='SquareSheetConstrainedMasstransp3d';
+@@ -93,7 +93,7 @@
+ 	case 319, name='SquareSheetConstrainedCMDragSSA2d';
+ 	case 320, name='SquareSheetConstrainedCMDragSSA3d';
+ 	case 321, name='SquareSheetConstrainedCMDragHO';
+-	case 322, name='SquareSheetConstrainedCMDragS3d';
++	case 322, name='SquareSheetConstrainedCMDragFS';
+ 	case 323, name='SquareSheetConstrainedTranCflSSA2d';
+ 	case 324, name='SquareSheetConstrainedTranCflSIA3d';
+ 	case 325, name='SquareSheetConstrainedEnthalpyStea';
+@@ -107,7 +107,7 @@
+ 	case 401, name='SquareSheetShelfStressSSA2d';
+ 	case 402, name='SquareSheetShelfStressSSA3d';
+ 	case 403, name='SquareSheetShelfStressHO';
+-	case 404, name='SquareSheetShelfStressS3d';
++	case 404, name='SquareSheetShelfStressFS';
+ 	case 405, name='SquareSheetShelfStressMHOPenalties';
+ 	case 406, name='SquareSheetShelfTherStea';
+ 	case 407, name='SquareSheetShelfTherTran';
+@@ -133,22 +133,22 @@
+ 	case 427, name='SquareSheetShelfGroundingLine3dSoft';
+ 	case 428, name='SquareSheetShelfStressSSA2dNewton';
+ 	case 429, name='SquareSheetShelfStressHONewton';
+-	case 430, name='SquareSheetShelfStressS3dNewton';
++	case 430, name='SquareSheetShelfStressFSNewton';
+ 	case 431, name='SquareSheetShelfSteaEnthalpySSA3d';
+ 	case 432, name='SquareSheetShelfSteaEnthalpyHO';
+ 	case 433, name='RoundSheetShelfGLMigrationSSA3d';
+ 	case 434, name='SquareSheetShelfL1L2';
+ 	case 501, name='PigStressSSA2d';
+ 	case 502, name='PigStressHO';
+-	case 503, name='PigStressS3d';
++	case 503, name='PigStressFS';
+ 	case 504, name='PigTranSSA2d';
+ 	case 505, name='PigTranSSA3d';
+ 	case 506, name='PigTranHO';
+-	case 507, name='PigTranS3d';
++	case 507, name='PigTranFS';
+ 	case 508, name='PigSteaSSA3d';
+ 	case 509, name='PigSteaHO';
+-	case 510, name='PigSteaS3d';
+-	case 511, name='PigCMBS3d';
++	case 510, name='PigSteaFS';
++	case 511, name='PigCMBFS';
+ 	case 512, name='PigCMDragHO';
+ 	case 513, name='PigCMDragSteaSSA3d';
+ 	case 514, name='PigBamgMesh';
+@@ -211,7 +211,7 @@
+ 	case 3001, name='SquareShelfConstrainedStressSSA2dAdolc';
+ 	case 3002, name='SquareShelfConstrainedStressSSA3dAdolc';
+ 	case 3003, name='SquareShelfConstrainedStressHOAdolc';
+-	case 3004, name='SquareShelfConstrainedStressS3dAdolc';
++	case 3004, name='SquareShelfConstrainedStressFSAdolc';
+ 	case 3005, name='SquareShelfConstrainedMasstransp2dAdolc';
+ 	case 3006, name='SquareShelfConstrainedMasstransp2dDGAdolc';
+ 	case 3007, name='SquareShelfConstrainedMasstransp3dAdolc';
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15874)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15875)
+@@ -12,7 +12,7 @@
+ 	101 : 'SquareShelfConstrainedStressSSA2d',
+ 	102 : 'SquareShelfConstrainedStressSSA3d',
+ 	103 : 'SquareShelfConstrainedStressHO',
+-	104 : 'SquareShelfConstrainedStressS3d',
++	104 : 'SquareShelfConstrainedStressFS',
+ 	105 : 'SquareShelfConstrainedMasstransp2d',
+ 	106 : 'SquareShelfConstrainedMasstransp2dDG',
+ 	107 : 'SquareShelfConstrainedMasstransp3d',
+@@ -34,18 +34,18 @@
+ 	201 : 'SquareShelfStressSSA2d',
+ 	202 : 'SquareShelfStressSSA3d',
+ 	203 : 'SquareShelfStressHO',
+-	204 : 'SquareShelfStressS3d',
++	204 : 'SquareShelfStressFS',
+ 	205 : 'SquareShelfStressMHOPenalties',
+ 	206 : 'SquareShelfTherStea',
+ 	207 : 'SquareShelfTherTran',
+ 	208 : 'SquareShelfTranSSA2d',
+ 	209 : 'SquareShelfTranSSA3d',
+ 	210 : 'SquareShelfTranHO',
+-	211 : 'SquareShelfTranS3d',
++	211 : 'SquareShelfTranFS',
+ 	212 : 'SquareShelfCMBSSA2d',
+ 	213 : 'SquareShelfCMBSSA3d',
+ 	214 : 'SquareShelfCMBHO',
+-	215 : 'SquareShelfCMBS3d',
++	215 : 'SquareShelfCMBFS',
+ 	216 : 'SquareShelfStressSSA2dRift',
+ 	217 : 'SquareShelfConstrained',
+ 	218 : 'SquareShelfConstrainedDakotaB',
+@@ -83,7 +83,7 @@
+ 	305  : 'SquareSheetConstrainedStressSIA3d',
+ 	306  : 'SquareSheetConstrainedStressHSSA3d',
+ 	307  : 'SquareSheetConstrainedStressHO',
+-	308  : 'SquareSheetConstrainedStressS3d',
++	308  : 'SquareSheetConstrainedStressFS',
+ 	309  : 'SquareSheetConstrainedMasstransp2d',
+ 	320  : 'SquareSheetConstrainedMasstransp2dDG',
+ 	311  : 'SquareSheetConstrainedMasstransp3d',
+@@ -97,7 +97,7 @@
+ 	319  : 'SquareSheetConstrainedCMDragSSA2d',
+ 	320  : 'SquareSheetConstrainedCMDragSSA3d',
+ 	321  : 'SquareSheetConstrainedCMDragHO',
+-	322  : 'SquareSheetConstrainedCMDragS3d',
++	322  : 'SquareSheetConstrainedCMDragFS',
+ 	323  : 'SquareSheetConstrainedTranCflSSA2d',
+ 	324  : 'SquareSheetConstrainedTranCflSIA3d',
+ 	325  : 'SquareSheetConstrainedEnthalpyStea',
+@@ -111,7 +111,7 @@
+ 	401  : 'SquareSheetShelfStressSSA2d',
+ 	402  : 'SquareSheetShelfStressSSA3d',
+ 	403  : 'SquareSheetShelfStressHO',
+-	404  : 'SquareSheetShelfStressS3d',
++	404  : 'SquareSheetShelfStressFS',
+ 	405  : 'SquareSheetShelfStressMHOPenalties',
+ 	406  : 'SquareSheetShelfTherStea',
+ 	407  : 'SquareSheetShelfTherTran',
+@@ -137,22 +137,22 @@
+ 	427  : 'SquareSheetShelfGroundingLine3dSoft',
+ 	428  : 'SquareSheetShelfStressSSA2dNewton',
+ 	429  : 'SquareSheetShelfStressHONewton',
+-	430  : 'SquareSheetShelfStressS3dNewton',
++	430  : 'SquareSheetShelfStressFSNewton',
+ 	431  : 'SquareSheetShelfSteaEnthalpySSA3d',
+ 	432  : 'SquareSheetShelfSteaEnthalpyHO',
+ 	433  : 'RoundSheetShelfGLMigrationSSA3d',
+ 	434  : 'SquareSheetShelfL1L2',
+ 	501  : 'PigStressSSA2d',
+ 	502  : 'PigStressHO',
+-	503  : 'PigStressS3d',
++	503  : 'PigStressFS',
+ 	504  : 'PigTranSSA2d',
+ 	505  : 'PigTranSSA3d',
+ 	506  : 'PigTranHO',
+-	507  : 'PigTranS3d',
++	507  : 'PigTranFS',
+ 	508  : 'PigSteaSSA3d',
+ 	509  : 'PigSteaHO',
+-	510  : 'PigSteaS3d',
+-	511  : 'PigCMBS3d',
++	510  : 'PigSteaFS',
++	511  : 'PigCMBFS',
+ 	512  : 'PigCMDragHO',
+ 	513  : 'PigCMDragSteaSSA3d',
+ 	514  : 'PigBamgMesh',
+@@ -215,7 +215,7 @@
+ 	3001 : 'SquareShelfConstrainedStressSSA2dAdolc',
+ 	3002 : 'SquareShelfConstrainedStressSSA3dAdolc',
+ 	3003 : 'SquareShelfConstrainedStressHOAdolc',
+-	3004 : 'SquareShelfConstrainedStressS3dAdolc',
++	3004 : 'SquareShelfConstrainedStressFSAdolc',
+ 	3005 : 'SquareShelfConstrainedMasstransp2dAdolc',
+ 	3006 : 'SquareShelfConstrainedMasstransp2dDGAdolc',
+ 	3007 : 'SquareShelfConstrainedMasstransp3dAdolc',
Index: /issm/oecreview/Archive/15392-16133/ISSM-15875-15876.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15875-15876.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15875-15876.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/doxygen/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/doxygen/install.sh	(revision 15875)
++++ ../trunk-jpl/externalpackages/doxygen/install.sh	(revision 15876)
+@@ -6,7 +6,7 @@
+ mkdir install
+ 
+ #Download latest version
+-svn co https://doxygen.svn.sourceforge.net/svnroot/doxygen/trunk src
++svn co https://svn.code.sf.net/p/doxygen/code/trunk src
+ 
+ #Configure doxygen
+ cd src && ./configure --prefix "$ISSM_DIR/externalpackages/doxygen/install"
Index: /issm/oecreview/Archive/15392-16133/ISSM-15876-15877.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15876-15877.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15876-15877.diff	(revision 16134)
@@ -0,0 +1,1423 @@
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15877)
+@@ -107,17 +107,19 @@
+ 			break;
+ 
+ 		case TransientSolutionEnum:
+-			numanalyses=10-1;
++			numanalyses=11;
+ 			analyses=xNew<int>(numanalyses);
+-			analyses[0]=StressbalanceAnalysisEnum;
+-			analyses[1]=StressbalanceVerticalAnalysisEnum;
+-			analyses[2]=StressbalanceSIAAnalysisEnum;
+-			analyses[3]=SurfaceSlopeAnalysisEnum;
+-			analyses[4]=BedSlopeAnalysisEnum;
+-			analyses[5]=ThermalAnalysisEnum;
+-			analyses[6]=MeltingAnalysisEnum;
+-			analyses[7]=EnthalpyAnalysisEnum;
+-			analyses[8]=MasstransportAnalysisEnum;
++			analyses[ 0]=StressbalanceAnalysisEnum;
++			analyses[ 1]=StressbalanceVerticalAnalysisEnum;
++			analyses[ 2]=StressbalanceSIAAnalysisEnum;
++			analyses[ 3]=SurfaceSlopeAnalysisEnum;
++			analyses[ 4]=BedSlopeAnalysisEnum;
++			analyses[ 5]=ThermalAnalysisEnum;
++			analyses[ 6]=MeltingAnalysisEnum;
++			analyses[ 7]=EnthalpyAnalysisEnum;
++			analyses[ 8]=MasstransportAnalysisEnum;
++			analyses[ 9]=FreeSurfaceBaseAnalysisEnum;
++			analyses[10]=FreeSurfaceTopAnalysisEnum;
+ 			break;
+ 
+ 		default:
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15877)
+@@ -153,21 +153,16 @@
+ 		/*unload results*/
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving transient results\n");
+-			InputToResultx(femmodel,SurfaceEnum);
+-			InputToResultx(femmodel,BedEnum);
+ 			InputToResultx(femmodel,SurfaceforcingsMassBalanceEnum);
+ 			InputToResultx(femmodel,MaskElementonfloatingiceEnum);
+ 			femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+-
+ 			if(isdelta18o){
+ 				InputToResultx(femmodel,SurfaceforcingsMonthlytemperaturesEnum);
+ 				InputToResultx(femmodel,SurfaceforcingsPrecipitationEnum);
+-				InputToResultx(femmodel,BasalFrictionEnum);
+ 			}
+ 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+ 				InputToResultx(femmodel,GLlevelsetEnum);
+ 			}
+-
+ 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+ 			OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+ 		}
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 15877)
+@@ -12,13 +12,13 @@
+ void masstransport_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
+-	bool save_results;
+-	bool issmbgradients,ispdd,isdelta18o;
+-	int  solution_type;
++	bool  save_results;
++	bool  issmbgradients,ispdd,isdelta18o,isFS,isfreesurface;
++	int   solution_type;
+ 	int  *requested_outputs = NULL;
+-	int  numoutputs=0;
++	int   numoutputs        = 0;
+ 
+-	/*activate formulation: */
++	/*activate configuration*/
+ 	femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
+ 
+ 	/*recover parameters: */
+@@ -26,6 +26,8 @@
+ 	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+ 	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
+ 	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&isfreesurface,MasstransportIsfreesurfaceEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
+@@ -42,12 +44,24 @@
+ 		if(VerboseSolution()) _printf0_("   call positive degree day module\n");
+ 		PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 	}
+-	if(VerboseSolution()) _printf0_("   call computational core\n");
+-	solutionsequence_linear(femmodel);
+ 
++	if(isFS && isfreesurface){
++		if(VerboseSolution()) _printf0_("   call free surface computational core\n");
++		femmodel->SetCurrentConfiguration(FreeSurfaceBaseAnalysisEnum);
++		solutionsequence_linear(femmodel);
++		femmodel->SetCurrentConfiguration(FreeSurfaceTopAnalysisEnum);
++		solutionsequence_linear(femmodel);
++	}
++	else{
++		if(VerboseSolution()) _printf0_("   call computational core\n");
++		solutionsequence_linear(femmodel);
++	}
++
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		InputToResultx(femmodel,ThicknessEnum);
++		InputToResultx(femmodel,BedEnum);
++		InputToResultx(femmodel,SurfaceEnum);
+ 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15876)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15877)
+@@ -187,6 +187,7 @@
+ 	MeshZEnum,
+ 	MiscellaneousNameEnum, //FIXME: only used by qmu, should not be marshalled (already in queueing script)
+ 	MasstransportHydrostaticAdjustmentEnum,
++	MasstransportIsfreesurfaceEnum,
+ 	MasstransportMinThicknessEnum,
+ 	MasstransportPenaltyFactorEnum,
+ 	MasstransportSpcthicknessEnum,
+@@ -294,6 +295,8 @@
+ 	MeltingAnalysisEnum,
+ 	MasstransportAnalysisEnum,
+ 	MasstransportSolutionEnum,
++	FreeSurfaceBaseAnalysisEnum,
++	FreeSurfaceTopAnalysisEnum,
+ 	SteadystateSolutionEnum,
+ 	SurfaceSlopeAnalysisEnum,
+ 	SurfaceSlopeSolutionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15877)
+@@ -195,6 +195,7 @@
+ 		case MeshZEnum : return "MeshZ";
+ 		case MiscellaneousNameEnum : return "MiscellaneousName";
+ 		case MasstransportHydrostaticAdjustmentEnum : return "MasstransportHydrostaticAdjustment";
++		case MasstransportIsfreesurfaceEnum : return "MasstransportIsfreesurface";
+ 		case MasstransportMinThicknessEnum : return "MasstransportMinThickness";
+ 		case MasstransportPenaltyFactorEnum : return "MasstransportPenaltyFactor";
+ 		case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness";
+@@ -300,6 +301,8 @@
+ 		case MeltingAnalysisEnum : return "MeltingAnalysis";
+ 		case MasstransportAnalysisEnum : return "MasstransportAnalysis";
+ 		case MasstransportSolutionEnum : return "MasstransportSolution";
++		case FreeSurfaceBaseAnalysisEnum : return "FreeSurfaceBaseAnalysis";
++		case FreeSurfaceTopAnalysisEnum : return "FreeSurfaceTopAnalysis";
+ 		case SteadystateSolutionEnum : return "SteadystateSolution";
+ 		case SurfaceSlopeAnalysisEnum : return "SurfaceSlopeAnalysis";
+ 		case SurfaceSlopeSolutionEnum : return "SurfaceSlopeSolution";
+@@ -586,6 +589,7 @@
+ 		case OptionLogicalEnum : return "OptionLogical";
+ 		case PatersonEnum : return "Paterson";
+ 		case ArrheniusEnum : return "Arrhenius";
++		case LliboutryDuvalEnum : return "LliboutryDuval";
+ 		case MaximumNumberOfDefinitionsEnum : return "MaximumNumberOfDefinitions";
+ 		default : return "unknown";
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15877)
+@@ -198,6 +198,7 @@
+ 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+ 	      else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum;
+ 	      else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum;
++	      else if (strcmp(name,"MasstransportIsfreesurface")==0) return MasstransportIsfreesurfaceEnum;
+ 	      else if (strcmp(name,"MasstransportMinThickness")==0) return MasstransportMinThicknessEnum;
+ 	      else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum;
+ 	      else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+-	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+@@ -306,6 +307,8 @@
+ 	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+ 	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
+ 	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
++	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
++	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
+ 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+@@ -379,13 +382,13 @@
+ 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+-	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+-	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+-	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
++	      if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
++	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+@@ -502,13 +505,13 @@
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+-	      else if (strcmp(name,"P2")==0) return P2Enum;
+-	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+-	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      if (strcmp(name,"P2")==0) return P2Enum;
++	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
++	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
++	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+@@ -598,6 +601,7 @@
+ 	      else if (strcmp(name,"OptionLogical")==0) return OptionLogicalEnum;
+ 	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
++	      else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
+ 	      else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
+          else stage=6;
+    }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp	(revision 15877)
+@@ -0,0 +1,10 @@
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
++
++void	CreateConstraintsFreeSurfaceBase(Constraints** pconstraints, IoModel* iomodel){
++
++	/*No constraints*/
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 15877)
+@@ -0,0 +1,17 @@
++/*
++ * CreateNodesFreeSurfaceBase.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesFreeSurfaceBase(Nodes** pnodes, IoModel* iomodel){
++
++	/*Create Nodes either DG or CG depending on stabilization*/
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 15877)
+@@ -0,0 +1,41 @@
++/*
++ * UpdateElementsFreeSurfaceBase:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsFreeSurfaceBase(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	int    finiteelement;
++	bool   dakota_analysis;
++
++	if(iomodel->dim!=3) _error_("not implemented yet for 2d models");
++	/*Finite element type*/
++	finiteelement = P1Enum;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
++	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,VzEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp	(revision 15877)
+@@ -0,0 +1,54 @@
++/*! \file CreateLoadsFreeSurfaceBase.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsFreeSurfaceBase(Loads** ploads, IoModel* iomodel){
++
++	/*Intermediaries*/
++	int element;
++	int penpair_ids[2];
++	int count=0;
++	int numvertex_pairing;
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Create Penpair for vertex_pairing: */
++	IssmDouble *vertex_pairing=NULL;
++	IssmDouble *nodeonbed=NULL;
++	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
++	iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++	for(int i=0;i<numvertex_pairing;i++){
++
++		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
++
++			/*In debugging mode, check that the second node is in the same cpu*/
++			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
++
++			/*Skip if one of the two is not on the bed*/
++			if(!(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
++
++			/*Get node ids*/
++			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
++			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
++
++			/*Create Load*/
++			loads->AddObject(new Penpair(
++							iomodel->loadcounter+count+1,
++							&penpair_ids[0],
++							FreeSurfaceBaseAnalysisEnum));
++			count++;
++		}
++	}
++
++	/*free ressources: */
++	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
++	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp	(revision 15877)
+@@ -0,0 +1,54 @@
++/*! \file CreateLoadsFreeSurfaceTop.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsFreeSurfaceTop(Loads** ploads, IoModel* iomodel){
++
++	/*Intermediaries*/
++	int element;
++	int penpair_ids[2];
++	int count=0;
++	int numvertex_pairing;
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Create Penpair for vertex_pairing: */
++	IssmDouble *vertex_pairing=NULL;
++	IssmDouble *nodeonsurface=NULL;
++	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
++	iomodel->FetchData(&nodeonsurface,NULL,NULL,MeshVertexonsurfaceEnum);
++	for(int i=0;i<numvertex_pairing;i++){
++
++		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
++
++			/*In debugging mode, check that the second node is in the same cpu*/
++			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
++
++			/*Skip if one of the two is not on the bed*/
++			if(!(reCast<bool>(nodeonsurface[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonsurface[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
++
++			/*Get node ids*/
++			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
++			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
++
++			/*Create Load*/
++			loads->AddObject(new Penpair(
++							iomodel->loadcounter+count+1,
++							&penpair_ids[0],
++							FreeSurfaceTopAnalysisEnum));
++			count++;
++		}
++	}
++
++	/*free ressources: */
++	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
++	iomodel->DeleteData(nodeonsurface,MeshVertexonsurfaceEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp	(revision 15877)
+@@ -0,0 +1,10 @@
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
++
++void	CreateConstraintsFreeSurfaceTop(Constraints** pconstraints, IoModel* iomodel){
++
++	/*No constraints*/
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 15877)
+@@ -0,0 +1,17 @@
++/*
++ * CreateNodesFreeSurfaceTop.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesFreeSurfaceTop(Nodes** pnodes, IoModel* iomodel){
++
++	/*Create Nodes either DG or CG depending on stabilization*/
++	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
++	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 15877)
+@@ -0,0 +1,41 @@
++/*
++ * UpdateElementsFreeSurfaceTop:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsFreeSurfaceTop(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	int    finiteelement;
++	bool   dakota_analysis;
++
++	if(iomodel->dim!=3) _error_("not implemented yet for 2d models");
++	/*Finite element type*/
++	finiteelement = P1Enum;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
++	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,VzEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15876)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15877)
+@@ -103,6 +103,14 @@
+ void CreateConstraintsMasstransport(Constraints** pconstraints,IoModel* iomodel);
+ void CreateLoadsMasstransport(Loads** ploads, IoModel* iomodel);
+ void UpdateElementsMasstransport(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesFreeSurfaceTop(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsFreeSurfaceTop(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsFreeSurfaceTop(Loads** ploads, IoModel* iomodel);
++void UpdateElementsFreeSurfaceTop(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateNodesFreeSurfaceBase(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsFreeSurfaceBase(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsFreeSurfaceBase(Loads** ploads, IoModel* iomodel);
++void UpdateElementsFreeSurfaceBase(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*balancedthickness:*/
+ void CreateNodesBalancethickness(Nodes** pnodes,IoModel* iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15877)
+@@ -102,6 +102,12 @@
+ 		case MasstransportAnalysisEnum:
+ 			numdofs=1;
+ 			break;
++		case FreeSurfaceTopAnalysisEnum:
++			numdofs=1;
++			break;
++		case FreeSurfaceBaseAnalysisEnum:
++			numdofs=1;
++			break;
+ 		case GiaAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15877)
+@@ -56,6 +56,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceIsnewtonEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateReltolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ConstantsYtsEnum));
+@@ -64,9 +65,9 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeAdaptEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(MasstransportIsfreesurfaceEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MasstransportHydrostaticAdjustmentEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MasstransportStabilizationEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MasstransportMinThicknessEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MasstransportPenaltyFactorEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyFactorEnum));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15877)
+@@ -147,6 +147,18 @@
+ 			CreateLoadsMasstransport(ploads,iomodel);
+ 			UpdateElementsMasstransport(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
++		case FreeSurfaceTopAnalysisEnum:
++			CreateNodesFreeSurfaceTop(pnodes, iomodel);
++			CreateConstraintsFreeSurfaceTop(pconstraints,iomodel);
++			CreateLoadsFreeSurfaceTop(ploads,iomodel);
++			UpdateElementsFreeSurfaceTop(elements,iomodel,analysis_counter,analysis_type);
++			break;
++		case FreeSurfaceBaseAnalysisEnum:
++			CreateNodesFreeSurfaceBase(pnodes, iomodel);
++			CreateConstraintsFreeSurfaceBase(pconstraints,iomodel);
++			CreateLoadsFreeSurfaceBase(ploads,iomodel);
++			UpdateElementsFreeSurfaceBase(elements,iomodel,analysis_counter,analysis_type);
++			break;
+ 		#endif
+ 
+ 		default:
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15876)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15877)
+@@ -372,10 +372,19 @@
+ #}}}
+ #Masstransport sources  {{{
+ masstransport_sources = ./modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp\
+-					      ./modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp\
+-					      ./modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp\
+-					      ./modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp\
+-							./analyses/masstransport_core.cpp
++								./modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp\
++								./modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp\
++								./modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp\
++								./modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp\
++								./modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp\
++								./modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp\
++								./modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp\
++								./modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp\
++								./modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp\
++								./modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp\
++								./modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp\
++								./analyses/masstransport_core.cpp
++
+ #}}}
+ #Thermal sources  {{{
+ thermal_sources = ./modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15877)
+@@ -6486,6 +6486,212 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreateKMatrixFreeSurfaceTop {{{*/
++ElementMatrix* Tria::CreateKMatrixFreeSurfaceTop(void){
++
++	/*Intermediaries */
++	int        stabilization;
++	int        dim;
++	IssmDouble Jdettria,D_scalar,dt,h;
++	IssmDouble vel,vx,vy,dvxdx,dvydy;
++	IssmDouble dvx[2],dvy[2];
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    B      = xNew<IssmDouble>(2*numnodes);
++	IssmDouble*    Bprime = xNew<IssmDouble>(2*numnodes);
++	IssmDouble     D[2][2];
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++	h=sqrt(2*this->GetArea());
++
++	/* Start  looping on the number of gaussian points: */
++	GaussTria *gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		vx_input->GetInputValue(&vx,gauss);
++		vy_input->GetInputValue(&vy,gauss);
++		vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
++		vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
++
++		D_scalar=gauss->weight*Jdettria;
++
++		TripleMultiply(basis,1,numnodes,1,
++					&D_scalar,1,1,0,
++					basis,1,numnodes,0,
++					&Ke->values[0],1);
++
++		GetBMasstransport(B,&xyz_list[0][0],gauss);
++		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
++
++		dvxdx=dvx[0];
++		dvydy=dvy[1];
++		D_scalar=dt*gauss->weight*Jdettria;
++
++		D[0][0]=D_scalar*vx;
++		D[0][1]=0.;
++		D[1][0]=0.;
++		D[1][1]=D_scalar*vy;
++		TripleMultiply(B,2,numnodes,1,
++					&D[0][0],2,2,0,
++					Bprime,2,numnodes,0,
++					&Ke->values[0],1);
++
++		if(stabilization==2){
++			/*Streamline upwinding*/
++			vel=sqrt(vx*vx+vy*vy)+1.e-8;
++			D[0][0]=h/(2*vel)*vx*vx;
++			D[1][0]=h/(2*vel)*vy*vx;
++			D[0][1]=h/(2*vel)*vx*vy;
++			D[1][1]=h/(2*vel)*vy*vy;
++		}
++		else if(stabilization==1){
++			/*SSA*/
++			vx_input->GetInputAverage(&vx);
++			vy_input->GetInputAverage(&vy);
++			D[0][0]=h/2.0*fabs(vx);
++			D[0][1]=0.;
++			D[1][0]=0.;
++			D[1][1]=h/2.0*fabs(vy);
++		}
++		if(stabilization==1 || stabilization==2){
++			D[0][0]=D_scalar*D[0][0];
++			D[1][0]=D_scalar*D[1][0];
++			D[0][1]=D_scalar*D[0][1];
++			D[1][1]=D_scalar*D[1][1];
++			TripleMultiply(Bprime,2,numnodes,1,
++						&D[0][0],2,2,0,
++						Bprime,2,numnodes,0,
++						&Ke->values[0],1);
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(Bprime);
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Tria::CreateKMatrixFreeSurfaceBase {{{*/
++ElementMatrix* Tria::CreateKMatrixFreeSurfaceBase(void){
++
++	/*Intermediaries */
++	int        stabilization;
++	int        dim;
++	IssmDouble Jdettria,D_scalar,dt,h;
++	IssmDouble vel,vx,vy,dvxdx,dvydy;
++	IssmDouble dvx[2],dvy[2];
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    B      = xNew<IssmDouble>(2*numnodes);
++	IssmDouble*    Bprime = xNew<IssmDouble>(2*numnodes);
++	IssmDouble     D[2][2];
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++	h=sqrt(2*this->GetArea());
++
++	/* Start  looping on the number of gaussian points: */
++	GaussTria *gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		vx_input->GetInputValue(&vx,gauss);
++		vy_input->GetInputValue(&vy,gauss);
++		vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
++		vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
++
++		D_scalar=gauss->weight*Jdettria;
++
++		TripleMultiply(basis,1,numnodes,1,
++					&D_scalar,1,1,0,
++					basis,1,numnodes,0,
++					&Ke->values[0],1);
++
++		GetBMasstransport(B,&xyz_list[0][0],gauss);
++		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
++
++		dvxdx=dvx[0];
++		dvydy=dvy[1];
++		D_scalar=dt*gauss->weight*Jdettria;
++
++		D[0][0]=D_scalar*vx;
++		D[0][1]=0.;
++		D[1][0]=0.;
++		D[1][1]=D_scalar*vy;
++		TripleMultiply(B,2,numnodes,1,
++					&D[0][0],2,2,0,
++					Bprime,2,numnodes,0,
++					&Ke->values[0],1);
++
++		if(stabilization==2){
++			/*Streamline upwinding*/
++			vel=sqrt(vx*vx+vy*vy)+1.e-8;
++			D[0][0]=h/(2*vel)*vx*vx;
++			D[1][0]=h/(2*vel)*vy*vx;
++			D[0][1]=h/(2*vel)*vx*vy;
++			D[1][1]=h/(2*vel)*vy*vy;
++		}
++		else if(stabilization==1){
++			/*SSA*/
++			vx_input->GetInputAverage(&vx);
++			vy_input->GetInputAverage(&vy);
++			D[0][0]=h/2.0*fabs(vx);
++			D[0][1]=0.;
++			D[1][0]=0.;
++			D[1][1]=h/2.0*fabs(vy);
++		}
++		if(stabilization==1 || stabilization==2){
++			D[0][0]=D_scalar*D[0][0];
++			D[1][0]=D_scalar*D[1][0];
++			D[0][1]=D_scalar*D[0][1];
++			D[1][1]=D_scalar*D[1][1];
++			TripleMultiply(Bprime,2,numnodes,1,
++						&D[0][0],2,2,0,
++						Bprime,2,numnodes,0,
++						&Ke->values[0],1);
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(Bprime);
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreatePVectorMasstransport{{{*/
+ ElementVector* Tria::CreatePVectorMasstransport(void){
+ 
+@@ -6504,7 +6710,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble Jdettria,dt;
+-	IssmDouble surface_mass_balance_g,basal_melting_g,basal_melting_correction_g,thickness_g;
++	IssmDouble ms,mb,mb_correction,thickness;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -6517,12 +6723,12 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-	Input* surface_mass_balance_input     = inputs->GetInput(SurfaceforcingsMassBalanceEnum);         _assert_(surface_mass_balance_input);
+-	Input* basal_melting_input            = inputs->GetInput(BasalforcingsMeltingRateEnum);           _assert_(basal_melting_input);
+-	Input* basal_melting_correction_input = inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum);
+-	Input* thickness_input                = inputs->GetInput(ThicknessEnum);                          _assert_(thickness_input);
++	Input* ms_input     = inputs->GetInput(SurfaceforcingsMassBalanceEnum);      _assert_(ms_input);
++	Input* mb_input     = inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input);
++	Input* mb_correction_input = inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum);
++	Input* thickness_input  = inputs->GetInput(ThicknessEnum);     _assert_(thickness_input);
+ 
+-	/*Initialize basal_melting_correction_g to 0, do not forget!:*/
++	/*Initialize mb_correction to 0, do not forget!:*/
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss=new GaussTria(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -6532,15 +6738,15 @@
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss);
+-		basal_melting_input->GetInputValue(&basal_melting_g,gauss);
+-		thickness_input->GetInputValue(&thickness_g,gauss);
+-		if(basal_melting_correction_input)
+-		 basal_melting_correction_input->GetInputValue(&basal_melting_correction_g,gauss);
++		ms_input->GetInputValue(&ms,gauss);
++		mb_input->GetInputValue(&mb,gauss);
++		thickness_input->GetInputValue(&thickness,gauss);
++		if(mb_correction_input)
++		 mb_correction_input->GetInputValue(&mb_correction,gauss);
+ 		else
+-		 basal_melting_correction_g=0.;
++		 mb_correction=0.;
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness+dt*(ms-mb-mb_correction))*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -6554,7 +6760,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble Jdettria,dt;
+-	IssmDouble surface_mass_balance_g,basal_melting_g,thickness_g;
++	IssmDouble ms,mb,thickness;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -6567,9 +6773,9 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+-	Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum);          _assert_(basal_melting_input);
+-	Input* thickness_input=inputs->GetInput(ThicknessEnum);                             _assert_(thickness_input);
++	Input* ms_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input);
++	Input* mb_input=inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(mb_input);
++	Input* thickness_input=inputs->GetInput(ThicknessEnum);           _assert_(thickness_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss=new GaussTria(2);
+@@ -6580,11 +6786,11 @@
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss);
+-		basal_melting_input->GetInputValue(&basal_melting_g,gauss);
+-		thickness_input->GetInputValue(&thickness_g,gauss);
++		ms_input->GetInputValue(&ms,gauss);
++		mb_input->GetInputValue(&mb,gauss);
++		thickness_input->GetInputValue(&thickness,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness+dt*(ms-mb))*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -6593,6 +6799,99 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreatePVectorFreeSurfaceTop {{{*/
++ElementVector* Tria::CreatePVectorFreeSurfaceTop(void){
++
++	/*Intermediaries */
++	IssmDouble Jdettria,dt;
++	IssmDouble ms,surface,vz;
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	Input* vz_input     = inputs->GetInput(VzEnum);                         _assert_(vz_input);
++	Input* ms_input     = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input);
++	Input* surface_input= inputs->GetInput(ThicknessEnum);              _assert_(surface_input);
++
++	/*Initialize mb_correction to 0, do not forget!:*/
++	/* Start  looping on the number of gaussian points: */
++	GaussTria* gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		ms_input->GetInputValue(&ms,gauss);
++		surface_input->GetInputValue(&surface,gauss);
++
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(surface + dt*ms + dt*vz)*basis[i];
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Tria::CreatePVectorFreeSurfaceBase {{{*/
++ElementVector* Tria::CreatePVectorFreeSurfaceBase(void){
++
++	/*Intermediaries */
++	IssmDouble Jdettria,dt;
++	IssmDouble mb,mb_correction,bed,vz;
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	Input* vz_input  = inputs->GetInput(VzEnum);                         _assert_(vz_input);
++	Input* mb_input  = inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(mb_input);
++	Input* mb_correction_input = inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum);
++	Input* bed_input = inputs->GetInput(BedEnum);                        _assert_(bed_input);
++
++	/*Initialize mb_correction to 0, do not forget!:*/
++	/* Start  looping on the number of gaussian points: */
++	GaussTria* gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		mb_input->GetInputValue(&mb,gauss);
++		bed_input->GetInputValue(&bed,gauss);
++		if(mb_correction_input)
++		 mb_correction_input->GetInputValue(&mb_correction,gauss);
++		else
++		 mb_correction=0.;
++
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(bed+dt*(mb-mb_correction) + dt*vz)*basis[i];
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef _HAVE_DAKOTA_
+@@ -6937,7 +7236,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble dhdt_g,basal_melting_g,surface_mass_balance_g,Jdettria;
++	IssmDouble dhdt_g,mb_g,ms_g,Jdettria;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -6948,9 +7247,9 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+-	Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum);          _assert_(basal_melting_input);
+-	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum);             _assert_(dhdt_input);
++	Input* ms_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input);
++	Input* mb_input=inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(mb_input);
++	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss=new GaussTria(2);
+@@ -6958,14 +7257,14 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss);
+-		basal_melting_input->GetInputValue(&basal_melting_g,gauss);
++		ms_input->GetInputValue(&ms_g,gauss);
++		mb_input->GetInputValue(&mb_g,gauss);
+ 		dhdt_input->GetInputValue(&dhdt_g,gauss);
+ 
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -6979,7 +7278,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble basal_melting_g,surface_mass_balance_g,dhdt_g,Jdettria;
++	IssmDouble mb_g,ms_g,dhdt_g,Jdettria;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -6990,9 +7289,9 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+-	Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum);          _assert_(basal_melting_input);
+-	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum);                                       _assert_(dhdt_input);
++	Input* ms_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input);
++	Input* mb_input=inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(mb_input);
++	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum);_assert_(dhdt_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss=new GaussTria(2);
+@@ -7000,14 +7299,14 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss);
+-		basal_melting_input->GetInputValue(&basal_melting_g,gauss);
++		ms_input->GetInputValue(&ms_g,gauss);
++		mb_input->GetInputValue(&mb_g,gauss);
+ 		dhdt_input->GetInputValue(&dhdt_g,gauss);
+ 
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15876)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15877)
+@@ -187,6 +187,8 @@
+ 		ElementMatrix* CreateKMatrixMasstransport(void);
+ 		ElementMatrix* CreateKMatrixMasstransport_CG(void);
+ 		ElementMatrix* CreateKMatrixMasstransport_DG(void);
++		ElementMatrix* CreateKMatrixFreeSurfaceTop(void);
++		ElementMatrix* CreateKMatrixFreeSurfaceBase(void);
+ 		ElementMatrix* CreateMassMatrix(void);
+ 		ElementVector* CreatePVector(void);
+ 		ElementVector* CreatePVectorBalancethickness(void);
+@@ -195,6 +197,8 @@
+ 		ElementVector* CreatePVectorMasstransport(void);
+ 		ElementVector* CreatePVectorMasstransport_CG(void);
+ 		ElementVector* CreatePVectorMasstransport_DG(void);
++		ElementVector* CreatePVectorFreeSurfaceTop(void);
++		ElementVector* CreatePVectorFreeSurfaceBase(void);
+ 		ElementVector* CreatePVectorSlope(void);
+ 		IssmDouble     GetArea(void);
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[3][3],int numpoints);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15877)
+@@ -469,6 +469,12 @@
+ 		case MasstransportAnalysisEnum:
+ 			return CreateKMatrixMasstransport();
+ 			break;
++		case FreeSurfaceTopAnalysisEnum:
++			return CreateKMatrixFreeSurfaceTop();
++			break;
++		case FreeSurfaceBaseAnalysisEnum:
++			return CreateKMatrixFreeSurfaceBase();
++			break;
+ 		#ifdef _HAVE_BALANCED_
+ 		case BalancethicknessAnalysisEnum:
+ 			return CreateKMatrixBalancethickness();
+@@ -522,6 +528,32 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Penta::CreateKMatrixFreeSurfaceTop {{{*/
++ElementMatrix* Penta::CreateKMatrixFreeSurfaceTop(void){
++
++	if(!IsOnSurface()) return NULL;
++
++	Tria* tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
++	ElementMatrix* Ke=tria->CreateKMatrixFreeSurfaceTop();
++	delete tria->material; delete tria;
++
++	/*clean up and return*/
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Penta::CreateKMatrixFreeSurfaceBase {{{*/
++ElementMatrix* Penta::CreateKMatrixFreeSurfaceBase(void){
++
++	if(!IsOnBed()) return NULL;
++
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
++	ElementMatrix* Ke=tria->CreateKMatrixFreeSurfaceBase();
++	delete tria->material; delete tria;
++
++	/*clean up and return*/
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Penta::CreateBasalMassMatrix{{{*/
+ ElementMatrix* Penta::CreateBasalMassMatrix(void){
+ 
+@@ -665,6 +697,12 @@
+ 		case MasstransportAnalysisEnum:
+ 			return CreatePVectorMasstransport();
+ 			break;
++		case FreeSurfaceTopAnalysisEnum:
++			return CreatePVectorFreeSurfaceTop();
++			break;
++		case FreeSurfaceBaseAnalysisEnum:
++			return CreatePVectorFreeSurfaceBase();
++			break;
+ 		#ifdef _HAVE_BALANCED_
+ 		case BalancethicknessAnalysisEnum:
+ 			return CreatePVectorBalancethickness();
+@@ -708,6 +746,34 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Penta::CreatePVectorFreeSurfaceTop {{{*/
++ElementVector* Penta::CreatePVectorFreeSurfaceTop(void){
++
++	if(!IsOnSurface()) return NULL;
++
++	/*Call Tria function*/
++	Tria* tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
++	ElementVector* pe=tria->CreatePVectorFreeSurfaceTop();
++	delete tria->material; delete tria;
++
++	/*Clean up and return*/
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Penta::CreatePVectorFreeSurfaceBase {{{*/
++ElementVector* Penta::CreatePVectorFreeSurfaceBase(void){
++
++	if(!IsOnBed()) return NULL;
++
++	/*Call Tria function*/
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
++	ElementVector* pe=tria->CreatePVectorFreeSurfaceBase();
++	delete tria->material; delete tria;
++
++	/*Clean up and return*/
++	return pe;
++}
++/*}}}*/
+ /*FUNCTION Penta::CreatePVectorSlope {{{*/
+ ElementVector* Penta::CreatePVectorSlope(void){
+ 
+@@ -2262,6 +2328,12 @@
+ 	case MasstransportAnalysisEnum:
+ 		InputUpdateFromSolutionMasstransport(solution);
+ 		break;
++	case FreeSurfaceTopAnalysisEnum:
++		InputUpdateFromSolutionFreeSurfaceTop(solution);
++		break;
++	case FreeSurfaceBaseAnalysisEnum:
++		InputUpdateFromSolutionFreeSurfaceBase(solution);
++		break;
+ 	#ifdef _HAVE_BALANCED_
+ 	case BalancethicknessAnalysisEnum:
+ 		InputUpdateFromSolutionOneDofCollapsed(solution,ThicknessEnum);
+@@ -2363,6 +2435,108 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
++/*FUNCTION Penta::InputUpdateFromSolutionFreeSurfaceTop{{{*/
++void  Penta::InputUpdateFromSolutionFreeSurfaceTop(IssmDouble* solution){
++
++	const int  numdof   = NDOF1*NUMVERTICES;
++	const int  numdof2d = NDOF1*NUMVERTICES2D;
++
++	int    i;
++	int*   doflist = NULL;
++	IssmDouble newthickness[numdof];
++	IssmDouble newbed[numdof];
++	IssmDouble newsurface[numdof];
++
++	/*If not on bed, return*/
++	if (!IsOnSurface()) return;
++
++	/*Get dof list: */
++	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++
++	/*Use the dof list to index into the solution vector and extrude it */
++	for(i=0;i<numdof2d;i++){
++		newsurface[i+numdof2d]=solution[doflist[i+numdof2d]];
++		if(xIsNan<IssmDouble>(newsurface[i+numdof2d])) _error_("NaN found in solution vector");
++		newsurface[i]=newsurface[i+numdof2d];
++	}
++
++	/*Get previous bed and thickness*/
++	GetInputListOnVertices(&newbed[0],BedEnum);
++
++	for(i=0;i<numdof;i++) {
++		newthickness[i]=newsurface[i]-newbed[i];
++		_assert_(newthickness[i]>0.);
++	}
++
++	/*Start looping over all elements above current element and update all inputs*/
++	Penta* penta=this;
++	for(;;){
++		/*Add input to the element: */
++		penta->inputs->AddInput(new PentaInput(ThicknessEnum,newthickness,P1Enum));
++		penta->inputs->AddInput(new PentaInput(SurfaceEnum,newsurface,P1Enum));
++
++		/*Stop if we have reached the surface*/
++		if(penta->IsOnBed()) break;
++
++		/* get upper Penta*/
++		penta=penta->GetLowerElement(); _assert_(penta->Id()!=this->id);
++	}
++
++	/*Free ressources:*/
++	xDelete<int>(doflist);
++}
++/*}}}*/
++/*FUNCTION Penta::InputUpdateFromSolutionFreeSurfaceBase{{{*/
++void  Penta::InputUpdateFromSolutionFreeSurfaceBase(IssmDouble* solution){
++
++	const int  numdof   = NDOF1*NUMVERTICES;
++	const int  numdof2d = NDOF1*NUMVERTICES2D;
++
++	int    i;
++	int*   doflist = NULL;
++	IssmDouble newthickness[numdof];
++	IssmDouble newbed[numdof];
++	IssmDouble newsurface[numdof];
++
++	/*If not on bed, return*/
++	if (!IsOnBed()) return;
++
++	/*Get dof list: */
++	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++
++	/*Use the dof list to index into the solution vector and extrude it */
++	for(i=0;i<numdof2d;i++){
++		newbed[i]=solution[doflist[i]];
++		if(xIsNan<IssmDouble>(newbed[i])) _error_("NaN found in solution vector");
++		newbed[i+numdof2d]=newbed[i];
++	}
++
++	/*Get previous bed and thickness*/
++	GetInputListOnVertices(&newsurface[0],SurfaceEnum);
++
++	for(i=0;i<numdof;i++) {
++		newthickness[i]=newsurface[i]-newbed[i];
++		_assert_(newthickness[i]>0.);
++	}
++
++	/*Start looping over all elements above current element and update all inputs*/
++	Penta* penta=this;
++	for(;;){
++		/*Add input to the element: */
++		penta->inputs->AddInput(new PentaInput(ThicknessEnum,newthickness,P1Enum));
++		penta->inputs->AddInput(new PentaInput(BedEnum,newbed,P1Enum));
++
++		/*Stop if we have reached the surface*/
++		if(penta->IsOnSurface()) break;
++
++		/* get upper Penta*/
++		penta=penta->GetUpperElement(); _assert_(penta->Id()!=this->id);
++	}
++
++	/*Free ressources:*/
++	xDelete<int>(doflist);
++}
++/*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionOneDof{{{*/
+ void  Penta::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15876)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15877)
+@@ -180,8 +180,12 @@
+ 		ElementMatrix* CreateBasalMassMatrix(void);
+ 		ElementMatrix* CreateKMatrix(void);
+ 		ElementMatrix* CreateKMatrixMasstransport(void);
++		ElementMatrix* CreateKMatrixFreeSurfaceTop(void);
++		ElementMatrix* CreateKMatrixFreeSurfaceBase(void);
+ 		ElementVector* CreatePVector(void);
+ 		ElementVector* CreatePVectorMasstransport(void);
++		ElementVector* CreatePVectorFreeSurfaceTop(void);
++		ElementVector* CreatePVectorFreeSurfaceBase(void);
+ 		ElementVector* CreatePVectorSlope(void);
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[6][3],int numpoints);
+ 		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
+@@ -210,6 +214,8 @@
+ 		Penta*         GetBasalElement(void);
+ 		void	         InputExtrude(int enum_type,int object_type);
+ 		void           InputUpdateFromSolutionMasstransport(IssmDouble* solutiong);
++		void           InputUpdateFromSolutionFreeSurfaceTop(IssmDouble* solutiong);
++		void           InputUpdateFromSolutionFreeSurfaceBase(IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionOneDof(IssmDouble* solutiong,int enum_type);
+ 		void           InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solutiong,int enum_type);
+ 		bool	         IsInput(int name);
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15876)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15877)
+@@ -92,6 +92,7 @@
+ 
+ 	/*2d solutions in 3d, we need to constrain all the nodes that are not on base*/
+ 	if(
++				analysis_type==FreeSurfaceBaseAnalysisEnum || 
+ 				analysis_type==MasstransportAnalysisEnum || 
+ 				analysis_type==MeltingAnalysisEnum || 
+ 				analysis_type==BedSlopeAnalysisEnum || 
+@@ -108,6 +109,15 @@
+ 			}
+ 		}
+ 	}
++	if(analysis_type==FreeSurfaceTopAnalysisEnum){
++		if(iomodel->dim==3){
++			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
++			_assert_(iomodel->Data(MeshVertexonsurfaceEnum));
++			if(!(reCast<bool>(iomodel->Data(MeshVertexonsurfaceEnum)[io_index]))){
++				this->Deactivate();
++			}
++		}
++	}
+ 
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15877-15878.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15877-15878.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15877-15878.diff	(revision 16134)
@@ -0,0 +1,72 @@
+Index: ../trunk-jpl/src/m/classes/masstransport.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.py	(revision 15877)
++++ ../trunk-jpl/src/m/classes/masstransport.py	(revision 15878)
+@@ -14,6 +14,7 @@
+ 
+ 	def __init__(self): # {{{
+ 		self.spcthickness           = float('NaN')
++		self.isfreesurface          = 0
+ 		self.min_thickness          = 0
+ 		self.hydrostatic_adjustment = 0
+ 		self.stabilization          = 0
+@@ -28,6 +29,7 @@
+ 	def __repr__(self): # {{{
+ 		string='   Masstransport solution parameters:'
+ 		string="%s\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint) [m]'))
++		string="%s\n%s"%(string,fielddisplay(self,'isfreesurface','do we use free surfaces (FS only) are mass conservation'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'min_thickness','minimum ice thickness allowed [m]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' '))
+ 		string="%s\n%s"%(string,fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin'))
+@@ -58,6 +60,7 @@
+ 			return md
+ 
+ 		md = checkfield(md,'masstransport.spcthickness','forcing',1)
++		md = checkfield(md,'masstransport.isfreesurface','values',[0 1])
+ 		md = checkfield(md,'masstransport.hydrostatic_adjustment','values',['Absolute','Incremental'])
+ 		md = checkfield(md,'masstransport.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'masstransport.min_thickness','>',0)
+@@ -68,6 +71,7 @@
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
++		WriteData(fid,'object',self,'fieldname','isfreesurface','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','min_thickness','format','Double')
+ 		WriteData(fid,'data',StringToEnum(self.hydrostatic_adjustment)[0],'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum())
+ 		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
+Index: ../trunk-jpl/src/m/classes/masstransport.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.m	(revision 15877)
++++ ../trunk-jpl/src/m/classes/masstransport.m	(revision 15878)
+@@ -6,6 +6,7 @@
+ classdef masstransport
+ 	properties (SetAccess=public) 
+ 		 spcthickness           = NaN;
++		 isfreesurface          = 0;
+ 		 min_thickness          = 0;
+ 		 hydrostatic_adjustment = 0;
+ 		 stabilization          = 0;
+@@ -78,6 +79,7 @@
+ 			if ~ismember(MasstransportAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.ismasstransport==0), return; end
+ 
+ 			md = checkfield(md,'masstransport.spcthickness','forcing',1);
++			md = checkfield(md,'masstransport.isfreesurface','values',[0 1]);
+ 			md = checkfield(md,'masstransport.hydrostatic_adjustment','values',{'Absolute' 'Incremental'});
+ 			md = checkfield(md,'masstransport.stabilization','values',[0 1 2 3]);
+ 			md = checkfield(md,'masstransport.min_thickness','>',0);
+@@ -89,6 +91,7 @@
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   Masstransport solution parameters:'));
+ 			fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint) [m]');
++			fielddisplay(obj,'isfreesurface','do we use free surfaces (FS only) are mass conservation');
+ 			fielddisplay(obj,'min_thickness','minimum ice thickness allowed [m]');
+ 			fielddisplay(obj,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' ');
+ 			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin');
+@@ -101,6 +104,7 @@
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'fieldname','isfreesurface','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double');
+ 			WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum());
+ 			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15878-15879.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15878-15879.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15878-15879.diff	(revision 16134)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/src/m/enum/FreeSurfaceTopAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FreeSurfaceTopAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FreeSurfaceTopAnalysisEnum.m	(revision 15879)
+@@ -0,0 +1,11 @@
++function macro=FreeSurfaceTopAnalysisEnum()
++%FREESURFACETOPANALYSISENUM - Enum of FreeSurfaceTopAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FreeSurfaceTopAnalysisEnum()
++
++macro=StringToEnum('FreeSurfaceTopAnalysis');
+Index: ../trunk-jpl/src/m/enum/FreeSurfaceBaseAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FreeSurfaceBaseAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/FreeSurfaceBaseAnalysisEnum.m	(revision 15879)
+@@ -0,0 +1,11 @@
++function macro=FreeSurfaceBaseAnalysisEnum()
++%FREESURFACEBASEANALYSISENUM - Enum of FreeSurfaceBaseAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=FreeSurfaceBaseAnalysisEnum()
++
++macro=StringToEnum('FreeSurfaceBaseAnalysis');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15878)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15879)
+@@ -187,6 +187,7 @@
+ def MeshZEnum(): return StringToEnum("MeshZ")[0]
+ def MiscellaneousNameEnum(): return StringToEnum("MiscellaneousName")[0]
+ def MasstransportHydrostaticAdjustmentEnum(): return StringToEnum("MasstransportHydrostaticAdjustment")[0]
++def MasstransportIsfreesurfaceEnum(): return StringToEnum("MasstransportIsfreesurface")[0]
+ def MasstransportMinThicknessEnum(): return StringToEnum("MasstransportMinThickness")[0]
+ def MasstransportPenaltyFactorEnum(): return StringToEnum("MasstransportPenaltyFactor")[0]
+ def MasstransportSpcthicknessEnum(): return StringToEnum("MasstransportSpcthickness")[0]
+@@ -292,6 +293,8 @@
+ def MeltingAnalysisEnum(): return StringToEnum("MeltingAnalysis")[0]
+ def MasstransportAnalysisEnum(): return StringToEnum("MasstransportAnalysis")[0]
+ def MasstransportSolutionEnum(): return StringToEnum("MasstransportSolution")[0]
++def FreeSurfaceBaseAnalysisEnum(): return StringToEnum("FreeSurfaceBaseAnalysis")[0]
++def FreeSurfaceTopAnalysisEnum(): return StringToEnum("FreeSurfaceTopAnalysis")[0]
+ def SteadystateSolutionEnum(): return StringToEnum("SteadystateSolution")[0]
+ def SurfaceSlopeAnalysisEnum(): return StringToEnum("SurfaceSlopeAnalysis")[0]
+ def SurfaceSlopeSolutionEnum(): return StringToEnum("SurfaceSlopeSolution")[0]
Index: /issm/oecreview/Archive/15392-16133/ISSM-15879-15880.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15879-15880.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15879-15880.diff	(revision 16134)
@@ -0,0 +1,320 @@
+Index: ../trunk-jpl/externalpackages/meteoio/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/meteoio/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/meteoio/install.sh	(revision 15880)
+@@ -0,0 +1,38 @@
++#!/bin/bash
++#METEOIO install package:  this package is not distributed by ISSM. Please request access to the code by 
++#contacting Mathias Bavay () or logging onto http://models.slf.ch/ and registering.  Once you have a tarball 
++#of the code, please use this script to install.
++
++#we assume you have a MeteoIO-*-tar.gz  tarball
++set -eu
++
++#Do some inquiry about the names of the tar balls: 
++source_tar=`ls MeteoIO-*.tar.gz`
++source_version=`echo $source_tar | sed 's/MeteoIO-//g' | sed 's/.tar.gz//g'`
++
++if [[ $source_tar == "" ]]; then 
++	echo "Could not identify a tar ball for the source code, name should be MeteoIO-*-tar.gz"
++	exit 1
++fi
++if [[ $source_version == "" ]]; then 
++	echo "Could not identify a tar ball version for the source code"
++	exit 1
++fi
++
++#Some cleanup
++rm -rf src MeteoIO-$source_version
++
++#First deal with source code 
++tar -zxvf  $source_tar
++mv MeteoIO-$source_version/usr src
++rm -rf MeteoIO-$source_version
++
++#Reset makefile: 
++cd src && rm -rf Makefile && ln -s ../makefiles/Makefile
++
++#Compile 
++if [ $# -eq 0 ]; then
++	make 
++else
++	make -j $1
++fi
+
+Property changes on: ../trunk-jpl/externalpackages/meteoio/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/meteoio/makefiles/Makefile
+===================================================================
+--- ../trunk-jpl/externalpackages/meteoio/makefiles/Makefile	(revision 0)
++++ ../trunk-jpl/externalpackages/meteoio/makefiles/Makefile	(revision 15880)
+@@ -0,0 +1,265 @@
++# CMAKE generated file: DO NOT EDIT!
++# Generated by "Unix Makefiles" Generator, CMake Version 2.8
++
++# Default target executed when no arguments are given to make.
++default_target: all
++.PHONY : default_target
++
++#=============================================================================
++# Special targets provided by cmake.
++
++# Disable implicit rules so canoncical targets will work.
++.SUFFIXES:
++
++# Remove some rules from gmake that .SUFFIXES does not remove.
++SUFFIXES =
++
++.SUFFIXES: .hpux_make_needs_suffix_list
++
++# Suppress display of executed commands.
++$(VERBOSE).SILENT:
++
++# A target that is always out of date.
++cmake_force:
++.PHONY : cmake_force
++
++#=============================================================================
++# Set environment variables for the build.
++
++# The shell in which to execute make rules.
++SHELL = /bin/sh
++
++#CMake location: 
++CMAKE_DIR = $(ISSM_DIR)/externalpackages/cmake/install/bin
++
++# The CMake executable.
++CMAKE_COMMAND = $(CMAKE_DIR)/cmake
++
++# The command to remove a file.
++RM = $(CMAKE_COMMAND) -E remove -f
++
++# The program to use to edit the cache.
++CMAKE_EDIT_COMMAND = $(CMAKE_DIR)/ccmake
++
++# The top-level source directory on which CMake was run.
++CMAKE_SOURCE_DIR = $(ISSM_DIR)/externalpackages/meteoio/src
++
++# The top-level build directory on which CMake was run.
++CMAKE_BINARY_DIR = $(ISSM_DIR)/externalpackages/meteoio/src
++
++#Cpack: 
++CPACK_COMMAND = $(CMAKE_DIR)/cpack
++
++#=============================================================================
++# Targets provided globally by CMake.
++
++# Special rule for the target edit_cache
++edit_cache:
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
++	$(CMAKE_EDIT_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
++.PHONY : edit_cache
++
++# Special rule for the target edit_cache
++edit_cache/fast: edit_cache
++.PHONY : edit_cache/fast
++
++# Special rule for the target install
++install: preinstall
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
++	$(CMAKE_COMMAND) -P cmake_install.cmake
++.PHONY : install
++
++# Special rule for the target install
++install/fast: preinstall/fast
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
++	$(CMAKE_COMMAND) -P cmake_install.cmake
++.PHONY : install/fast
++
++# Special rule for the target install/local
++install/local: preinstall
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
++	$(CMAKE_COMMAND) -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
++.PHONY : install/local
++
++# Special rule for the target install/local
++install/local/fast: install/local
++.PHONY : install/local/fast
++
++# Special rule for the target install/strip
++install/strip: preinstall
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
++	$(CMAKE_COMMAND) -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
++.PHONY : install/strip
++
++# Special rule for the target install/strip
++install/strip/fast: install/strip
++.PHONY : install/strip/fast
++
++# Special rule for the target list_install_components
++list_install_components:
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\" \"documentation\" \"examples\" \"headers\""
++.PHONY : list_install_components
++
++# Special rule for the target list_install_components
++list_install_components/fast: list_install_components
++.PHONY : list_install_components/fast
++
++# Special rule for the target package
++package: preinstall
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
++	$(CPACK_COMMAND) --config ./CPackConfig.cmake
++.PHONY : package
++
++# Special rule for the target package
++package/fast: package
++.PHONY : package/fast
++
++# Special rule for the target package_source
++package_source:
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
++	$(CPACK_COMMAND) --config ./CPackSourceConfig.cmake /home/bavay/tmp/meteoio/CPackSourceConfig.cmake
++.PHONY : package_source
++
++# Special rule for the target package_source
++package_source/fast: package_source
++.PHONY : package_source/fast
++
++# Special rule for the target rebuild_cache
++rebuild_cache:
++	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
++	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
++.PHONY : rebuild_cache
++
++# Special rule for the target rebuild_cache
++rebuild_cache/fast: rebuild_cache
++.PHONY : rebuild_cache/fast
++
++# The main all target
++all: cmake_check_build_system
++	$(CMAKE_COMMAND) -E cmake_progress_start /home/bavay/tmp/meteoio/CMakeFiles /home/bavay/tmp/meteoio/CMakeFiles/progress.marks
++	$(MAKE) -f CMakeFiles/Makefile2 all
++	$(CMAKE_COMMAND) -E cmake_progress_start /home/bavay/tmp/meteoio/CMakeFiles 0
++.PHONY : all
++
++# The main clean target
++clean:
++	$(MAKE) -f CMakeFiles/Makefile2 clean
++.PHONY : clean
++
++# The main clean target
++clean/fast: clean
++.PHONY : clean/fast
++
++# Prepare targets for installation.
++preinstall: all
++	$(MAKE) -f CMakeFiles/Makefile2 preinstall
++.PHONY : preinstall
++
++# Prepare targets for installation.
++preinstall/fast:
++	$(MAKE) -f CMakeFiles/Makefile2 preinstall
++.PHONY : preinstall/fast
++
++# clear depends
++depend:
++	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
++.PHONY : depend
++
++#=============================================================================
++# Target rules for targets named distclean
++
++# Build rule for target.
++distclean: cmake_check_build_system
++	$(MAKE) -f CMakeFiles/Makefile2 distclean
++.PHONY : distclean
++
++# fast build rule for target.
++distclean/fast:
++	$(MAKE) -f CMakeFiles/distclean.dir/build.make CMakeFiles/distclean.dir/build
++.PHONY : distclean/fast
++
++#=============================================================================
++# Target rules for targets named doc
++
++# Build rule for target.
++doc: cmake_check_build_system
++	$(MAKE) -f CMakeFiles/Makefile2 doc
++.PHONY : doc
++
++# fast build rule for target.
++doc/fast:
++	$(MAKE) -f CMakeFiles/doc.dir/build.make CMakeFiles/doc.dir/build
++.PHONY : doc/fast
++
++#=============================================================================
++# Target rules for targets named documentation
++
++# Build rule for target.
++documentation: cmake_check_build_system
++	$(MAKE) -f CMakeFiles/Makefile2 documentation
++.PHONY : documentation
++
++# fast build rule for target.
++documentation/fast:
++	$(MAKE) -f CMakeFiles/documentation.dir/build.make CMakeFiles/documentation.dir/build
++.PHONY : documentation/fast
++
++#=============================================================================
++# Target rules for targets named uninstall
++
++# Build rule for target.
++uninstall: cmake_check_build_system
++	$(MAKE) -f CMakeFiles/Makefile2 uninstall
++.PHONY : uninstall
++
++# fast build rule for target.
++uninstall/fast:
++	$(MAKE) -f CMakeFiles/uninstall.dir/build.make CMakeFiles/uninstall.dir/build
++.PHONY : uninstall/fast
++
++#=============================================================================
++# Target rules for targets named meteoio
++
++# Build rule for target.
++meteoio: cmake_check_build_system
++	$(MAKE) -f CMakeFiles/Makefile2 meteoio
++.PHONY : meteoio
++
++# fast build rule for target.
++meteoio/fast:
++	$(MAKE) -f meteoio/CMakeFiles/meteoio.dir/build.make meteoio/CMakeFiles/meteoio.dir/build
++.PHONY : meteoio/fast
++
++# Help Target
++help:
++	@echo "The following are some of the valid targets for this Makefile:"
++	@echo "... all (the default if no target is provided)"
++	@echo "... clean"
++	@echo "... depend"
++	@echo "... distclean"
++	@echo "... doc"
++	@echo "... documentation"
++	@echo "... edit_cache"
++	@echo "... install"
++	@echo "... install/local"
++	@echo "... install/strip"
++	@echo "... list_install_components"
++	@echo "... package"
++	@echo "... package_source"
++	@echo "... rebuild_cache"
++	@echo "... uninstall"
++	@echo "... meteoio"
++.PHONY : help
++
++
++
++#=============================================================================
++# Special targets to cleanup operation of make.
++
++# Special rule to run CMake to check the build system integrity.
++# No rule that depends on this can have commands that come from listfiles
++# because they might be regenerated.
++cmake_check_build_system:
++	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
++.PHONY : cmake_check_build_system
++
Index: /issm/oecreview/Archive/15392-16133/ISSM-15880-15881.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15880-15881.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15880-15881.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/enum/MasstransportIsfreesurfaceEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MasstransportIsfreesurfaceEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MasstransportIsfreesurfaceEnum.m	(revision 15881)
+@@ -0,0 +1,11 @@
++function macro=MasstransportIsfreesurfaceEnum()
++%MASSTRANSPORTISFREESURFACEENUM - Enum of MasstransportIsfreesurface
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MasstransportIsfreesurfaceEnum()
++
++macro=StringToEnum('MasstransportIsfreesurface');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15881-15882.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15881-15882.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15881-15882.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/masstransport.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.py	(revision 15881)
++++ ../trunk-jpl/src/m/classes/masstransport.py	(revision 15882)
+@@ -60,7 +60,7 @@
+ 			return md
+ 
+ 		md = checkfield(md,'masstransport.spcthickness','forcing',1)
+-		md = checkfield(md,'masstransport.isfreesurface','values',[0 1])
++		md = checkfield(md,'masstransport.isfreesurface','values',[0,1])
+ 		md = checkfield(md,'masstransport.hydrostatic_adjustment','values',['Absolute','Incremental'])
+ 		md = checkfield(md,'masstransport.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'masstransport.min_thickness','>',0)
Index: /issm/oecreview/Archive/15392-16133/ISSM-15882-15883.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15882-15883.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15882-15883.diff	(revision 16134)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 15882)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 15883)
+@@ -13,7 +13,9 @@
+ 	int    finiteelement;
+ 	bool   dakota_analysis;
+ 
+-	if(iomodel->dim!=3) _error_("not implemented yet for 2d models");
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if (iomodel->dim==2)return;
++
+ 	/*Finite element type*/
+ 	finiteelement = P1Enum;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 15882)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 15883)
+@@ -13,8 +13,9 @@
+ 	int    finiteelement;
+ 	bool   dakota_analysis;
+ 
+-	if(iomodel->dim!=3) _error_("not implemented yet for 2d models");
+-	/*Finite element type*/
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if (iomodel->dim==2)return;
++
+ 	finiteelement = P1Enum;
+ 
+ 	/*Update elements: */
Index: /issm/oecreview/Archive/15392-16133/ISSM-15883-15884.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15883-15884.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15883-15884.diff	(revision 16134)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/externalpackages/meteoio/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/meteoio/install.sh	(revision 15883)
++++ ../trunk-jpl/externalpackages/meteoio/install.sh	(revision 15884)
+@@ -20,7 +20,7 @@
+ fi
+ 
+ #Some cleanup
+-rm -rf src MeteoIO-$source_version
++rm -rf src install MeteoIO-$source_version
+ 
+ #First deal with source code 
+ tar -zxvf  $source_tar
+@@ -28,11 +28,12 @@
+ rm -rf MeteoIO-$source_version
+ 
+ #Reset makefile: 
+-cd src && rm -rf Makefile && ln -s ../makefiles/Makefile
++cd src && rm -rf CMakeCache.txt 
++cmake -DCMAKE_INSTALL_PREFIX:PATH=$ISSM_DIR/externalpackages/meteoio/install .
+ 
+ #Compile 
+ if [ $# -eq 0 ]; then
+-	make 
++	make all install
+ else
+-	make -j $1
++	make -j $1 all install
+ fi
+Index: ../trunk-jpl/externalpackages/meteoio
+===================================================================
+--- ../trunk-jpl/externalpackages/meteoio	(revision 15883)
++++ ../trunk-jpl/externalpackages/meteoio	(revision 15884)
+
+Property changes on: ../trunk-jpl/externalpackages/meteoio
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,3 ##
++install
++src
++*.tar.gz
Index: /issm/oecreview/Archive/15392-16133/ISSM-15884-15885.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15884-15885.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15884-15885.diff	(revision 16134)
@@ -0,0 +1,66 @@
+Index: ../trunk-jpl/externalpackages/snowpack/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/snowpack/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/snowpack/install.sh	(revision 15885)
+@@ -0,0 +1,43 @@
++#!/bin/bash
++#SNOWPACK install package:  this package is not distributed by ISSM. Please request access to the code by 
++#contacting Mathias Bavay () or logging onto http://models.slf.ch/ and registering.  Once you have a tarball 
++#of the code, please use this script to install.
++
++#we assume you have a Snowpack-*-src.tar.gz  tarball
++set -eu
++
++#Do some inquiry about the names of the tar balls: 
++source_tar=`ls Snowpack-*-src.tar.gz`
++source_version=`echo $source_tar | sed 's/Snowpack-//g' | sed 's/-src.tar.gz//g'`
++
++if [[ $source_tar == "" ]]; then 
++	echo "Could not identify a tar ball for the source code, name should be Snowpack-*-src.tar.gz"
++	exit 1
++fi
++if [[ $source_version == "" ]]; then 
++	echo "Could not identify a tar ball version for the source code"
++	exit 1
++fi
++
++#Some cleanup
++rm -rf src install Snowpack-$source_version
++
++#First deal with source code 
++tar -zxvf  $source_tar
++mv Snowpack-$source_version/usr src
++rm -rf Snowpack-$source_version
++
++#Reset makefile: 
++cd src && rm -rf CMakeCache.txt 
++cmake -DCMAKE_INSTALL_PREFIX:PATH=$ISSM_DIR/externalpackages/snowpack/install \
++	-DMETEOIO_INCLUDE_DIR:PATH=$ISSM_DIR/externalpackages/meteoio/install/include \
++	-DMETEOIO_LIBRARY:PATH=$ISSM_DIR/externalpackages/meteoio/install/lib/libmeteoio.dylib\
++	-DCMAKE_VERBOSE_MAKEFILE=true \
++	.
++
++#Compile
++if [ $# -eq 0 ]; then
++	make  all install
++else
++	make -j $1  all install
++fi
+
+Property changes on: ../trunk-jpl/externalpackages/snowpack/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/snowpack
+===================================================================
+--- ../trunk-jpl/externalpackages/snowpack	(revision 15884)
++++ ../trunk-jpl/externalpackages/snowpack	(revision 15885)
+
+Property changes on: ../trunk-jpl/externalpackages/snowpack
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++install
++src
Index: /issm/oecreview/Archive/15392-16133/ISSM-15885-15886.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15885-15886.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15885-15886.diff	(revision 16134)
@@ -0,0 +1,270 @@
+Index: ../trunk-jpl/externalpackages/meteoio/makefiles/Makefile
+===================================================================
+--- ../trunk-jpl/externalpackages/meteoio/makefiles/Makefile	(revision 15885)
++++ ../trunk-jpl/externalpackages/meteoio/makefiles/Makefile	(revision 15886)
+@@ -1,265 +0,0 @@
+-# CMAKE generated file: DO NOT EDIT!
+-# Generated by "Unix Makefiles" Generator, CMake Version 2.8
+-
+-# Default target executed when no arguments are given to make.
+-default_target: all
+-.PHONY : default_target
+-
+-#=============================================================================
+-# Special targets provided by cmake.
+-
+-# Disable implicit rules so canoncical targets will work.
+-.SUFFIXES:
+-
+-# Remove some rules from gmake that .SUFFIXES does not remove.
+-SUFFIXES =
+-
+-.SUFFIXES: .hpux_make_needs_suffix_list
+-
+-# Suppress display of executed commands.
+-$(VERBOSE).SILENT:
+-
+-# A target that is always out of date.
+-cmake_force:
+-.PHONY : cmake_force
+-
+-#=============================================================================
+-# Set environment variables for the build.
+-
+-# The shell in which to execute make rules.
+-SHELL = /bin/sh
+-
+-#CMake location: 
+-CMAKE_DIR = $(ISSM_DIR)/externalpackages/cmake/install/bin
+-
+-# The CMake executable.
+-CMAKE_COMMAND = $(CMAKE_DIR)/cmake
+-
+-# The command to remove a file.
+-RM = $(CMAKE_COMMAND) -E remove -f
+-
+-# The program to use to edit the cache.
+-CMAKE_EDIT_COMMAND = $(CMAKE_DIR)/ccmake
+-
+-# The top-level source directory on which CMake was run.
+-CMAKE_SOURCE_DIR = $(ISSM_DIR)/externalpackages/meteoio/src
+-
+-# The top-level build directory on which CMake was run.
+-CMAKE_BINARY_DIR = $(ISSM_DIR)/externalpackages/meteoio/src
+-
+-#Cpack: 
+-CPACK_COMMAND = $(CMAKE_DIR)/cpack
+-
+-#=============================================================================
+-# Targets provided globally by CMake.
+-
+-# Special rule for the target edit_cache
+-edit_cache:
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+-	$(CMAKE_EDIT_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+-.PHONY : edit_cache
+-
+-# Special rule for the target edit_cache
+-edit_cache/fast: edit_cache
+-.PHONY : edit_cache/fast
+-
+-# Special rule for the target install
+-install: preinstall
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+-	$(CMAKE_COMMAND) -P cmake_install.cmake
+-.PHONY : install
+-
+-# Special rule for the target install
+-install/fast: preinstall/fast
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
+-	$(CMAKE_COMMAND) -P cmake_install.cmake
+-.PHONY : install/fast
+-
+-# Special rule for the target install/local
+-install/local: preinstall
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
+-	$(CMAKE_COMMAND) -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
+-.PHONY : install/local
+-
+-# Special rule for the target install/local
+-install/local/fast: install/local
+-.PHONY : install/local/fast
+-
+-# Special rule for the target install/strip
+-install/strip: preinstall
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
+-	$(CMAKE_COMMAND) -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
+-.PHONY : install/strip
+-
+-# Special rule for the target install/strip
+-install/strip/fast: install/strip
+-.PHONY : install/strip/fast
+-
+-# Special rule for the target list_install_components
+-list_install_components:
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\" \"documentation\" \"examples\" \"headers\""
+-.PHONY : list_install_components
+-
+-# Special rule for the target list_install_components
+-list_install_components/fast: list_install_components
+-.PHONY : list_install_components/fast
+-
+-# Special rule for the target package
+-package: preinstall
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
+-	$(CPACK_COMMAND) --config ./CPackConfig.cmake
+-.PHONY : package
+-
+-# Special rule for the target package
+-package/fast: package
+-.PHONY : package/fast
+-
+-# Special rule for the target package_source
+-package_source:
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
+-	$(CPACK_COMMAND) --config ./CPackSourceConfig.cmake /home/bavay/tmp/meteoio/CPackSourceConfig.cmake
+-.PHONY : package_source
+-
+-# Special rule for the target package_source
+-package_source/fast: package_source
+-.PHONY : package_source/fast
+-
+-# Special rule for the target rebuild_cache
+-rebuild_cache:
+-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+-	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+-.PHONY : rebuild_cache
+-
+-# Special rule for the target rebuild_cache
+-rebuild_cache/fast: rebuild_cache
+-.PHONY : rebuild_cache/fast
+-
+-# The main all target
+-all: cmake_check_build_system
+-	$(CMAKE_COMMAND) -E cmake_progress_start /home/bavay/tmp/meteoio/CMakeFiles /home/bavay/tmp/meteoio/CMakeFiles/progress.marks
+-	$(MAKE) -f CMakeFiles/Makefile2 all
+-	$(CMAKE_COMMAND) -E cmake_progress_start /home/bavay/tmp/meteoio/CMakeFiles 0
+-.PHONY : all
+-
+-# The main clean target
+-clean:
+-	$(MAKE) -f CMakeFiles/Makefile2 clean
+-.PHONY : clean
+-
+-# The main clean target
+-clean/fast: clean
+-.PHONY : clean/fast
+-
+-# Prepare targets for installation.
+-preinstall: all
+-	$(MAKE) -f CMakeFiles/Makefile2 preinstall
+-.PHONY : preinstall
+-
+-# Prepare targets for installation.
+-preinstall/fast:
+-	$(MAKE) -f CMakeFiles/Makefile2 preinstall
+-.PHONY : preinstall/fast
+-
+-# clear depends
+-depend:
+-	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+-.PHONY : depend
+-
+-#=============================================================================
+-# Target rules for targets named distclean
+-
+-# Build rule for target.
+-distclean: cmake_check_build_system
+-	$(MAKE) -f CMakeFiles/Makefile2 distclean
+-.PHONY : distclean
+-
+-# fast build rule for target.
+-distclean/fast:
+-	$(MAKE) -f CMakeFiles/distclean.dir/build.make CMakeFiles/distclean.dir/build
+-.PHONY : distclean/fast
+-
+-#=============================================================================
+-# Target rules for targets named doc
+-
+-# Build rule for target.
+-doc: cmake_check_build_system
+-	$(MAKE) -f CMakeFiles/Makefile2 doc
+-.PHONY : doc
+-
+-# fast build rule for target.
+-doc/fast:
+-	$(MAKE) -f CMakeFiles/doc.dir/build.make CMakeFiles/doc.dir/build
+-.PHONY : doc/fast
+-
+-#=============================================================================
+-# Target rules for targets named documentation
+-
+-# Build rule for target.
+-documentation: cmake_check_build_system
+-	$(MAKE) -f CMakeFiles/Makefile2 documentation
+-.PHONY : documentation
+-
+-# fast build rule for target.
+-documentation/fast:
+-	$(MAKE) -f CMakeFiles/documentation.dir/build.make CMakeFiles/documentation.dir/build
+-.PHONY : documentation/fast
+-
+-#=============================================================================
+-# Target rules for targets named uninstall
+-
+-# Build rule for target.
+-uninstall: cmake_check_build_system
+-	$(MAKE) -f CMakeFiles/Makefile2 uninstall
+-.PHONY : uninstall
+-
+-# fast build rule for target.
+-uninstall/fast:
+-	$(MAKE) -f CMakeFiles/uninstall.dir/build.make CMakeFiles/uninstall.dir/build
+-.PHONY : uninstall/fast
+-
+-#=============================================================================
+-# Target rules for targets named meteoio
+-
+-# Build rule for target.
+-meteoio: cmake_check_build_system
+-	$(MAKE) -f CMakeFiles/Makefile2 meteoio
+-.PHONY : meteoio
+-
+-# fast build rule for target.
+-meteoio/fast:
+-	$(MAKE) -f meteoio/CMakeFiles/meteoio.dir/build.make meteoio/CMakeFiles/meteoio.dir/build
+-.PHONY : meteoio/fast
+-
+-# Help Target
+-help:
+-	@echo "The following are some of the valid targets for this Makefile:"
+-	@echo "... all (the default if no target is provided)"
+-	@echo "... clean"
+-	@echo "... depend"
+-	@echo "... distclean"
+-	@echo "... doc"
+-	@echo "... documentation"
+-	@echo "... edit_cache"
+-	@echo "... install"
+-	@echo "... install/local"
+-	@echo "... install/strip"
+-	@echo "... list_install_components"
+-	@echo "... package"
+-	@echo "... package_source"
+-	@echo "... rebuild_cache"
+-	@echo "... uninstall"
+-	@echo "... meteoio"
+-.PHONY : help
+-
+-
+-
+-#=============================================================================
+-# Special targets to cleanup operation of make.
+-
+-# Special rule to run CMake to check the build system integrity.
+-# No rule that depends on this can have commands that come from listfiles
+-# because they might be regenerated.
+-cmake_check_build_system:
+-	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+-.PHONY : cmake_check_build_system
+-
Index: /issm/oecreview/Archive/15392-16133/ISSM-15886-15887.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15886-15887.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15886-15887.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/externalpackages/snowpack
+===================================================================
+--- ../trunk-jpl/externalpackages/snowpack	(revision 15886)
++++ ../trunk-jpl/externalpackages/snowpack	(revision 15887)
+
+Property changes on: ../trunk-jpl/externalpackages/snowpack
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,3 ##
+ install
+ src
++*.tar.gz
Index: /issm/oecreview/Archive/15392-16133/ISSM-15887-15888.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15887-15888.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15887-15888.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/externalpackages/snowpack/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/snowpack/install.sh	(revision 15887)
++++ ../trunk-jpl/externalpackages/snowpack/install.sh	(revision 15888)
+@@ -32,8 +32,8 @@
+ cmake -DCMAKE_INSTALL_PREFIX:PATH=$ISSM_DIR/externalpackages/snowpack/install \
+ 	-DMETEOIO_INCLUDE_DIR:PATH=$ISSM_DIR/externalpackages/meteoio/install/include \
+ 	-DMETEOIO_LIBRARY:PATH=$ISSM_DIR/externalpackages/meteoio/install/lib/libmeteoio.dylib\
+-	-DCMAKE_VERBOSE_MAKEFILE=true \
+ 	.
++	#-DCMAKE_VERBOSE_MAKEFILE=true \
+ 
+ #Compile
+ if [ $# -eq 0 ]; then
Index: /issm/oecreview/Archive/15392-16133/ISSM-15888-15889.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15888-15889.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15888-15889.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/shared/Elements/elements.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 15888)
++++ ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 15889)
+@@ -19,6 +19,7 @@
+ 				     IssmDouble* PrecipitationsPresentday,
+ 				     IssmDouble* TemperaturesLgm, IssmDouble* TemperaturesPresentday, 
+ 					     IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout);
++IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction);
+ 
+ /*Print arrays*/
+ void printarray(IssmPDouble* array,int lines,int cols=1);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15889-15890.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15889-15890.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15889-15890.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15889)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15890)
+@@ -207,6 +207,7 @@
+ 					./shared/Elements/PrintArrays.cpp\
+ 					./shared/Elements/PddSurfaceMassBalance.cpp\
+ 					./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\
++					./shared/Elements/DrainageFunctionWaterfraction.cpp\
+ 					./shared/String/sharedstring.h\
+ 					./shared/String/DescriptorIndex.cpp\
+ 					./toolkits/metis/metisincludes.h\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15890-15891.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15890-15891.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15890-15891.diff	(revision 16134)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 0)
++++ ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 15891)
+@@ -0,0 +1,27 @@
++/*!\file DrainageFunctionWaterfraction.cpp
++ * \brief: drain excess water fraction
++ */
++
++#include <math.h>
++#include "../Numerics/types.h"
++#include "../Exceptions/exceptions.h"
++
++/*FUNCTION IssmDouble DrainageFunctionWaterfraction()*/
++IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction){
++    /* DrainageFunctionWaterfraction returns how much of the waterfraction is drained per year */
++    _assert_(waterfraction>0);
++
++    IssmDouble w0=0.01, w1=0.02, w2=0.03;
++    IssmDouble D0=0, D1=0.005, D2=0.05;
++
++    if((w0==w1)||(w1==w2)||(w0==w2))
++        perror ("error in DrainageFunctionWaterfraction. Abort");
++    if(waterfraction<=w0)
++        return D0;
++    if((waterfraction>w0) && (waterfraction<=w1))
++        return (D1-D0)/(w1-w0)*(waterfraction-w0)+D0;
++    if((waterfraction>w1) && (waterfraction<=w2))
++        return (D2-D1)/(w2-w1)*(waterfraction-w1)+D1;
++    else 
++        return D2;
++}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15891-15892.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15891-15892.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15891-15892.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15891)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15892)
+@@ -358,6 +358,7 @@
+ 		void           InputUpdateFromSolutionEnthalpy(IssmDouble* solutiong);
+ 		void           UpdateThermalBasalConstraints(void);
+ 		void           ComputeBasalMeltrate(void);
++        void           DrainWaterfraction(void);
+ 		#endif
+ 
+ 		#ifdef _HAVE_BALANCED_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15892-15893.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15892-15893.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15892-15893.diff	(revision 16134)
@@ -0,0 +1,86 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15892)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15893)
+@@ -5235,7 +5235,7 @@
+ 
+ 	/* Intermediaries */
+ 	bool        isenthalpy;
+-	int         i,j,analysis_type,numindices,numindicesup;
++	int         i,j,ig,analysis_type,numindices,numindicesup;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+ 	IssmDouble  heatflux, geothermalflux_value;
+@@ -5282,12 +5282,12 @@
+ 	SurfaceNodeIndices(&numindicesup,&indicesup,this->element_type);
+ 	_assert_(numindices==numindicesup); 
+ 
+-	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
++	/*Ok, get meltrates now from basal conditions*/
+ 	GaussPenta* gauss=new GaussPenta();
+ 	GaussPenta* gaussup=new GaussPenta();
+-	for(i=0;i<numindices;i++){
+-		gauss->GaussNode(this->element_type,indices[i]);
+-		gaussup->GaussNode(this->element_type,indicesup[i]);
++	for(ig=0;ig<numindices;ig++){
++		gauss->GaussNode(this->element_type,indices[ig]);
++		gaussup->GaussNode(this->element_type,indicesup[ig]);
+ 
+ 		watercolumn_input->GetInputValue(&watercolumn, gauss);
+ 		enthalpy_input->GetInputValue(&enthalpy, gauss);
+@@ -5307,7 +5307,7 @@
+ 		enthalpy_input->GetInputValue(&enthalpyup, gaussup);
+ 		pressure_input->GetInputValue(&pressureup, gaussup);    
+ 		if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)){
+-		 for(i=0;i<3;i++) vec_heatflux[i]=0.;
++            for(i=0;i<3;i++) vec_heatflux[i]=0.;
+ 		}
+ 		else{
+ 			enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
+@@ -5347,6 +5347,46 @@
+ 	delete gaussup;
+ }
+ /*}}}*/
++/*FUNCTION Penta::DrainWaterfraction{{{*/
++void Penta::DrainWaterfraction(void){
++    
++// TODO: create vector to mark whether node has been drained already i.o. to not drain nodes multiple times
++
++    /*Intermediaries*/
++    const int numdof=NDOF1*NUMVERTICES;
++    int ig;
++    bool isenthalpy;
++    IssmDouble waterfraction, temperature;
++    IssmDouble enthalpy, pressure; 
++    IssmDouble latentheat, dt;
++
++    Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
++	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
++    Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
++    
++    /*Check wether enthalpy is activated*/
++	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
++	if(!isenthalpy) return;       
++    this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++    
++    GaussPenta* gauss=new GaussPenta(2,3);
++    for(ig=gauss->begin();ig<gauss->end();ig++){ 
++        gauss->GaussPoint(ig);
++        
++        enthalpy_input->GetInputValue(&enthalpy, gauss);
++        pressure_input->GetInputValue(&pressure, gauss);
++        matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy,pressure); 
++    
++        /*drain water fraction*/
++        waterfraction-=dt*DrainageFunctionWaterfraction(waterfraction);
++        if(waterfraction<0) waterfraction=0.;
++        /*update enthalpy*/
++        latentheat=matpar->GetLatentHeat();
++        matpar->ThermalToEnthalpy(&enthalpy, temperature, waterfraction, pressure);
++        //TODO feed result back into model
++    }
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef _HAVE_CONTROL_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15893-15894.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15893-15894.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15893-15894.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15893)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15894)
+@@ -483,6 +483,7 @@
+ 	WaterfractionEnum,
+ 	WatercolumnEnum,
+ 	BasalFrictionEnum,
++    BasalMeltrateEnum,
+ 	ViscousHeatingEnum,
+ 	QmuTemperatureEnum,
+ 	HydrologyWaterVxEnum,
Index: /issm/oecreview/Archive/15392-16133/ISSM-15894-15895.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15894-15895.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15894-15895.diff	(revision 16134)
@@ -0,0 +1,129 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15894)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15895)
+@@ -5244,7 +5244,6 @@
+ 	IssmDouble  kappa;
+ 	IssmDouble  enthalpy, enthalpyup;
+ 	IssmDouble  pressure, pressureup;
+-	IssmDouble  meltrate, watercolumn;
+ 	IssmDouble  temperature, waterfraction;
+ 	IssmDouble  latentheat;
+ 	IssmDouble  basalfriction, alpha2;
+@@ -5281,25 +5280,29 @@
+ 	BasalNodeIndices(&numindices,&indices,this->element_type);
+ 	SurfaceNodeIndices(&numindicesup,&indicesup,this->element_type);
+ 	_assert_(numindices==numindicesup); 
++    
++	IssmDouble  meltrate[numindices], watercolumn[numindices];
+ 
+ 	/*Ok, get meltrates now from basal conditions*/
+ 	GaussPenta* gauss=new GaussPenta();
+ 	GaussPenta* gaussup=new GaussPenta();
+ 	for(ig=0;ig<numindices;ig++){
+-		gauss->GaussNode(this->element_type,indices[ig]);
++		gauss->GaussVertex(this->element_type,indices[ig]);
+ 		gaussup->GaussNode(this->element_type,indicesup[ig]);
+ 
+-		watercolumn_input->GetInputValue(&watercolumn, gauss);
++        // TODO: make sure that no node is computed twice (insert mask)
++
++		watercolumn_input->GetInputValue(&watercolumn[indices[ig]], gauss);
+ 		enthalpy_input->GetInputValue(&enthalpy, gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
+ 
+ 		/*Calculate basal meltrate*/
+-		if((watercolumn>0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
++		if((watercolumn[indices[ig]]>0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
+ 			enthalpy=matpar->PureIceEnthalpy(pressure);
+ 		}
+ 		else if(enthalpy<matpar->PureIceEnthalpy(pressure)){
+-			meltrate=0.;   //TODO: set zero meltrate and watercolumn in model
+-			watercolumn=0.;
++			meltrate[indices[ig]]=0.;   //TODO: set zero meltrate and watercolumn in model
++			watercolumn[indices[ig]]=0.;
+ 			return;
+ 		}
+ 
+@@ -5329,16 +5332,18 @@
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vz_input->GetInputValue(&vz,gauss);
+ 		basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
+-		meltrate=(basalfriction-(heatflux-geothermalflux_value))/(1-waterfraction)/latentheat; 
++		meltrate[indices[ig]]=(basalfriction-(heatflux-geothermalflux_value))/(1-waterfraction)/latentheat; 
+ 
+ 		/*Update water column*/
+ 		this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 		if(reCast<bool,IssmDouble>(dt))
+-		 watercolumn+=dt*meltrate;
++            watercolumn[indices[ig]]+=dt*meltrate[indices[ig]];
+ 		else
+-		 watercolumn=meltrate;
+-		// TODO: feed meltrate & watercolumn back to model
++            watercolumn[indices[ig]]=meltrate[indices[ig]];
+ 	}  
++    /*update meltrate and watercolumn*/
++    this->inputs->AddInput(new PentaInput(WatercolumnEnum, watercolumn, P1Enum));
++    this->inputs->AddInput(new PentaInput(BasalMeltrateEnum, meltrate, P1Enum));
+ 
+ 	/*Clean up and return*/
+ 	xDelete<int>(indices);
+@@ -5353,13 +5358,13 @@
+ // TODO: create vector to mark whether node has been drained already i.o. to not drain nodes multiple times
+ 
+     /*Intermediaries*/
+-    const int numdof=NDOF1*NUMVERTICES;
+     int ig;
+     bool isenthalpy;
+-    IssmDouble waterfraction, temperature;
+-    IssmDouble enthalpy, pressure; 
++    IssmDouble waterfraction_array[NUMVERTICES], temperature[NUMVERTICES];
++    IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
+     IssmDouble latentheat, dt;
+-
++    GaussPenta* gauss;
++    
+     Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
+ 	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
+     Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
+@@ -5367,24 +5372,27 @@
+     /*Check wether enthalpy is activated*/
+ 	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	if(!isenthalpy) return;       
++    
+     this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++    latentheat=matpar->GetLatentHeat();
++    gauss=new GaussPenta(2,3);
++    for(ig=0;ig<NUMVERTICES;ig++){ 
++        gauss->GaussVertex(ig);
++        /*TODO: Check whether Vertex has been drained already*/
++        enthalpy_input->GetInputValue(&enthalpy[ig], gauss);
++        pressure_input->GetInputValue(&pressure[ig], gauss);
++        matpar->EnthalpyToThermal(&temperature[ig], &waterfraction[ig], enthalpy[ig],pressure[ig]); 
+     
+-    GaussPenta* gauss=new GaussPenta(2,3);
+-    for(ig=gauss->begin();ig<gauss->end();ig++){ 
+-        gauss->GaussPoint(ig);
+-        
+-        enthalpy_input->GetInputValue(&enthalpy, gauss);
+-        pressure_input->GetInputValue(&pressure, gauss);
+-        matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy,pressure); 
+-    
+         /*drain water fraction*/
+-        waterfraction-=dt*DrainageFunctionWaterfraction(waterfraction);
+-        if(waterfraction<0) waterfraction=0.;
++        waterfraction[ig]-=dt*DrainageFunctionWaterfraction(waterfraction[ig]);
++        if(waterfraction[ig]<0) waterfraction[ig]=0.;
+         /*update enthalpy*/
+-        latentheat=matpar->GetLatentHeat();
+-        matpar->ThermalToEnthalpy(&enthalpy, temperature, waterfraction, pressure);
+-        //TODO feed result back into model
++        matpar->ThermalToEnthalpy(&enthalpy[ig], temperature[ig], waterfraction[ig], pressure[ig]);        
+     }
++    /*feed updated results back into model*/
++    this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
++    this->inputs->AddInput(new PentaInput(WaterfractionEnum,waterfraction,P1Enum));
++    this->inputs->AddInput(new PentaInput(TemperatureEnum,temperature,P1Enum));    
+ }
+ /*}}}*/
+ #endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-15895-15896.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15895-15896.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15895-15896.diff	(revision 16134)
@@ -0,0 +1,135 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15895)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15896)
+@@ -5235,13 +5235,14 @@
+ 
+ 	/* Intermediaries */
+ 	bool        isenthalpy;
+-	int         i,j,ig,analysis_type,numindices,numindicesup;
++	int         i,j,analysis_type;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+ 	IssmDouble  heatflux, geothermalflux_value;
+ 	IssmDouble  vec_heatflux[3];
+ 	IssmDouble  normal_base[3], d1enthalpy[3];
+ 	IssmDouble  kappa;
++    IssmDouble  meltrate[3], watercolumn[3];
+ 	IssmDouble  enthalpy, enthalpyup;
+ 	IssmDouble  pressure, pressureup;
+ 	IssmDouble  temperature, waterfraction;
+@@ -5249,8 +5250,6 @@
+ 	IssmDouble  basalfriction, alpha2;
+ 	IssmDouble  vx,vy,vz;
+ 	IssmDouble  dt;
+-	int        *indices   = NULL;
+-	int        *indicesup = NULL;
+ 	Friction   *friction  = NULL;
+ 
+ 	/* Only compute melt rates at the base of grounded ice*/
+@@ -5276,34 +5275,27 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	friction=new Friction("3d",inputs,matpar,analysis_type);
+ 
+-	/*Fetch indices of basal and surface nodes for this finite element*/
+-	BasalNodeIndices(&numindices,&indices,this->element_type);
+-	SurfaceNodeIndices(&numindicesup,&indicesup,this->element_type);
+-	_assert_(numindices==numindicesup); 
+-    
+-	IssmDouble  meltrate[numindices], watercolumn[numindices];
+-
+ 	/*Ok, get meltrates now from basal conditions*/
+ 	GaussPenta* gauss=new GaussPenta();
+ 	GaussPenta* gaussup=new GaussPenta();
+-	for(ig=0;ig<numindices;ig++){
+-		gauss->GaussVertex(this->element_type,indices[ig]);
+-		gaussup->GaussNode(this->element_type,indicesup[ig]);
++	for(int iv=0;iv<3;iv++){
++		gauss->GaussVertex(iv);
++		gaussup->GaussNode(iv+3);
+ 
+         // TODO: make sure that no node is computed twice (insert mask)
+ 
+-		watercolumn_input->GetInputValue(&watercolumn[indices[ig]], gauss);
++		watercolumn_input->GetInputValue(&watercolumn[iv], gauss);
+ 		enthalpy_input->GetInputValue(&enthalpy, gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
+ 
+ 		/*Calculate basal meltrate*/
+-		if((watercolumn[indices[ig]]>0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
++		if((watercolumn[iv]>0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
+ 			enthalpy=matpar->PureIceEnthalpy(pressure);
+ 		}
+ 		else if(enthalpy<matpar->PureIceEnthalpy(pressure)){
+-			meltrate[indices[ig]]=0.;   //TODO: set zero meltrate and watercolumn in model
+-			watercolumn[indices[ig]]=0.;
+-			return;
++			meltrate[iv]=0.;   
++			watercolumn[iv]=0.;
++			continue;
+ 		}
+ 
+ 		/*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice) */
+@@ -5332,22 +5324,20 @@
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vz_input->GetInputValue(&vz,gauss);
+ 		basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
+-		meltrate[indices[ig]]=(basalfriction-(heatflux-geothermalflux_value))/(1-waterfraction)/latentheat; 
++		meltrate[iv]=(basalfriction-(heatflux-geothermalflux_value))/(1-waterfraction)/latentheat; 
+ 
+ 		/*Update water column*/
+ 		this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 		if(reCast<bool,IssmDouble>(dt))
+-            watercolumn[indices[ig]]+=dt*meltrate[indices[ig]];
++            watercolumn[iv]+=dt*meltrate[iv];
+ 		else
+-            watercolumn[indices[ig]]=meltrate[indices[ig]];
++            watercolumn[iv]=meltrate[iv];
+ 	}  
+     /*update meltrate and watercolumn*/
+     this->inputs->AddInput(new PentaInput(WatercolumnEnum, watercolumn, P1Enum));
+     this->inputs->AddInput(new PentaInput(BasalMeltrateEnum, meltrate, P1Enum));
+ 
+ 	/*Clean up and return*/
+-	xDelete<int>(indices);
+-	xDelete<int>(indicesup);
+ 	delete gauss;
+ 	delete gaussup;
+ }
+@@ -5358,7 +5348,6 @@
+ // TODO: create vector to mark whether node has been drained already i.o. to not drain nodes multiple times
+ 
+     /*Intermediaries*/
+-    int ig;
+     bool isenthalpy;
+     IssmDouble waterfraction_array[NUMVERTICES], temperature[NUMVERTICES];
+     IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
+@@ -5375,19 +5364,19 @@
+     
+     this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+     latentheat=matpar->GetLatentHeat();
+-    gauss=new GaussPenta(2,3);
+-    for(ig=0;ig<NUMVERTICES;ig++){ 
+-        gauss->GaussVertex(ig);
++    gauss=new GaussPenta();
++    for(int iv=0;iv<NUMVERTICES;iv++){ 
++        gauss->GaussVertex(iv);
+         /*TODO: Check whether Vertex has been drained already*/
+-        enthalpy_input->GetInputValue(&enthalpy[ig], gauss);
+-        pressure_input->GetInputValue(&pressure[ig], gauss);
+-        matpar->EnthalpyToThermal(&temperature[ig], &waterfraction[ig], enthalpy[ig],pressure[ig]); 
++        enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
++        pressure_input->GetInputValue(&pressure[iv], gauss);
++        matpar->EnthalpyToThermal(&temperature[iv], &waterfraction[iv], enthalpy[iv],pressure[iv]); 
+     
+         /*drain water fraction*/
+-        waterfraction[ig]-=dt*DrainageFunctionWaterfraction(waterfraction[ig]);
+-        if(waterfraction[ig]<0) waterfraction[ig]=0.;
++        waterfraction[iv]-=dt*DrainageFunctionWaterfraction(waterfraction[iv]);
++        if(waterfraction[iv]<0.) waterfraction[iv]=0.;
+         /*update enthalpy*/
+-        matpar->ThermalToEnthalpy(&enthalpy[ig], temperature[ig], waterfraction[ig], pressure[ig]);        
++        matpar->ThermalToEnthalpy(&enthalpy[iv], temperature[iv], waterfraction[iv], pressure[iv]);        
+     }
+     /*feed updated results back into model*/
+     this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
Index: /issm/oecreview/Archive/15392-16133/ISSM-15896-15897.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15896-15897.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15896-15897.diff	(revision 16134)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/src/c/shared/Elements/elements.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 15896)
++++ ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 15897)
+@@ -18,7 +18,7 @@
+ 				     IssmDouble Delta18oPresent, IssmDouble Delta18oLgm, IssmDouble Delta18oTime, 
+ 				     IssmDouble* PrecipitationsPresentday,
+ 				     IssmDouble* TemperaturesLgm, IssmDouble* TemperaturesPresentday, 
+-					     IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout);
++					  IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout);
+ IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction);
+ 
+ /*Print arrays*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15896)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15897)
+@@ -5280,7 +5280,7 @@
+ 	GaussPenta* gaussup=new GaussPenta();
+ 	for(int iv=0;iv<3;iv++){
+ 		gauss->GaussVertex(iv);
+-		gaussup->GaussNode(iv+3);
++		gaussup->GaussVertex(iv+3);
+ 
+         // TODO: make sure that no node is computed twice (insert mask)
+ 
+@@ -5349,7 +5349,7 @@
+ 
+     /*Intermediaries*/
+     bool isenthalpy;
+-    IssmDouble waterfraction_array[NUMVERTICES], temperature[NUMVERTICES];
++    IssmDouble waterfraction[NUMVERTICES], temperature[NUMVERTICES];
+     IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
+     IssmDouble latentheat, dt;
+     GaussPenta* gauss;
+@@ -5370,7 +5370,7 @@
+         /*TODO: Check whether Vertex has been drained already*/
+         enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
+         pressure_input->GetInputValue(&pressure[iv], gauss);
+-        matpar->EnthalpyToThermal(&temperature[iv], &waterfraction[iv], enthalpy[iv],pressure[iv]); 
++        matpar->EnthalpyToThermal(&temperature[iv],&waterfraction[iv], enthalpy[iv],pressure[iv]); 
+     
+         /*drain water fraction*/
+         waterfraction[iv]-=dt*DrainageFunctionWaterfraction(waterfraction[iv]);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15896)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15897)
+@@ -358,7 +358,7 @@
+ 		void           InputUpdateFromSolutionEnthalpy(IssmDouble* solutiong);
+ 		void           UpdateThermalBasalConstraints(void);
+ 		void           ComputeBasalMeltrate(void);
+-        void           DrainWaterfraction(void);
++		void           DrainWaterfraction(void);
+ 		#endif
+ 
+ 		#ifdef _HAVE_BALANCED_
Index: /issm/oecreview/Archive/15392-16133/ISSM-15897-15898.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15897-15898.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15897-15898.diff	(revision 16134)
@@ -0,0 +1,117 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15897)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15898)
+@@ -139,6 +139,11 @@
+ 			#else
+ 			_error_("ISSM was not compiled with grounding line migration capabilities. Exiting");
+ 			#endif
++			if(save_results){
++				InputToResultx(femmodel,SurfaceEnum);
++				InputToResultx(femmodel,BedEnum);
++				InputToResultx(femmodel,MaskElementonfloatingiceEnum);
++			}
+ 		}
+ 		if(isgia){
+ 			if(VerboseSolution()) _printf0_("   computing glacial isostatic adjustment\n");
+@@ -154,7 +159,6 @@
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving transient results\n");
+ 			InputToResultx(femmodel,SurfaceforcingsMassBalanceEnum);
+-			InputToResultx(femmodel,MaskElementonfloatingiceEnum);
+ 			femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 			if(isdelta18o){
+ 				InputToResultx(femmodel,SurfaceforcingsMonthlytemperaturesEnum);
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 15897)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 15898)
+@@ -53,3 +53,31 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Results::Write{{{*/
++int Results::AddResult(ElementResult* in_result){
++
++	/*First, go through dataset of inputs and check whether any input 
++	 * with the same name is already in. If so, erase the corresponding 
++	 * object before adding this new one: */
++	vector<Object*>::iterator object;
++	ElementResult* result=NULL;
++
++	/*In debugging mode, check that the input is not a NULL pointer*/
++	_assert_(in_result);
++
++	for(object=objects.begin() ; object<objects.end(); object++){
++
++		result=dynamic_cast<ElementResult*>(*object);
++
++		if(result->InstanceEnum()==in_result->InstanceEnum()){
++			if(result->GetStep()==in_result->GetStep()){
++				this->DeleteObject(result);
++				break;
++			}
++		}
++	}
++	this->AddObject(in_result);
++
++	return 1;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.h	(revision 15897)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.h	(revision 15898)
+@@ -5,6 +5,7 @@
+ 
+ /*forward declarations */
+ class Parameters;
++class ElementResult;
+ 
+ /*!\brief Declaration of Results class.
+  *
+@@ -18,7 +19,8 @@
+ 		Results();
+ 		~Results();
+ 
+-		/*numerics*/
++		/*Mehthos*/
++		int AddResult(ElementResult* result);
+ 		void Write(Parameters* parameters);
+ };
+ #endif //ifndef _RESULTS_H_
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15897)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15898)
+@@ -1428,11 +1428,11 @@
+ 
+ 	/*If we don't find it, no big deal, just don't do the transfer. Otherwise, build a new Result 
+ 	 * object out of the input, with the additional step and time information: */
+-	this->results->AddObject((Object*)input->SpawnResult(step,time));
++	this->results->AddResult(input->SpawnResult(step,time));
+ 
+ 	#ifdef _HAVE_CONTROL_
+ 	if(input->ObjectEnum()==ControlInputEnum){
+-		if(((ControlInput*)input)->gradient!=NULL) this->results->AddObject((Object*)((ControlInput*)input)->SpawnGradient(step,time));
++		if(((ControlInput*)input)->gradient!=NULL) this->results->AddResult(((ControlInput*)input)->SpawnGradient(step,time));
+ 	}
+ 	#endif
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15897)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15898)
+@@ -2106,10 +2106,10 @@
+ 
+ 	/*If we don't find it, no big deal, just don't do the transfer. Otherwise, build a new Result 
+ 	 * object out of the input, with the additional step and time information: */
+-	this->results->AddObject((Object*)input->SpawnResult(step,time));
++	this->results->AddResult(input->SpawnResult(step,time));
+ 	#ifdef _HAVE_CONTROL_
+ 	if(input->ObjectEnum()==ControlInputEnum){
+-		if(((ControlInput*)input)->gradient!=NULL) this->results->AddObject((Object*)((ControlInput*)input)->SpawnGradient(step,time));
++		if(((ControlInput*)input)->gradient!=NULL) this->results->AddResult(((ControlInput*)input)->SpawnGradient(step,time));
+ 	}
+ 	#endif
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-15898-15899.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15898-15899.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15898-15899.diff	(revision 16134)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15898)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15899)
+@@ -6493,8 +6493,7 @@
+ 	int        stabilization;
+ 	int        dim;
+ 	IssmDouble Jdettria,D_scalar,dt,h;
+-	IssmDouble vel,vx,vy,dvxdx,dvydy;
+-	IssmDouble dvx[2],dvy[2];
++	IssmDouble vel,vx,vy;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Fetch number of nodes for this finite element*/
+@@ -6526,8 +6525,6 @@
+ 
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+-		vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
+-		vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
+ 
+ 		D_scalar=gauss->weight*Jdettria;
+ 
+@@ -6539,8 +6536,6 @@
+ 		GetBMasstransport(B,&xyz_list[0][0],gauss);
+ 		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
+ 
+-		dvxdx=dvx[0];
+-		dvydy=dvy[1];
+ 		D_scalar=dt*gauss->weight*Jdettria;
+ 
+ 		D[0][0]=D_scalar*vx;
+@@ -6596,8 +6591,7 @@
+ 	int        stabilization;
+ 	int        dim;
+ 	IssmDouble Jdettria,D_scalar,dt,h;
+-	IssmDouble vel,vx,vy,dvxdx,dvydy;
+-	IssmDouble dvx[2],dvy[2];
++	IssmDouble vel,vx,vy;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Fetch number of nodes for this finite element*/
+@@ -6629,8 +6623,6 @@
+ 
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+-		vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
+-		vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
+ 
+ 		D_scalar=gauss->weight*Jdettria;
+ 
+@@ -6642,8 +6634,6 @@
+ 		GetBMasstransport(B,&xyz_list[0][0],gauss);
+ 		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
+ 
+-		dvxdx=dvx[0];
+-		dvydy=dvy[1];
+ 		D_scalar=dt*gauss->weight*Jdettria;
+ 
+ 		D[0][0]=D_scalar*vx;
+@@ -6819,7 +6809,7 @@
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	Input* vz_input     = inputs->GetInput(VzEnum);                         _assert_(vz_input);
+ 	Input* ms_input     = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input);
+-	Input* surface_input= inputs->GetInput(ThicknessEnum);              _assert_(surface_input);
++	Input* surface_input= inputs->GetInput(SurfaceEnum);                    _assert_(surface_input);
+ 
+ 	/*Initialize mb_correction to 0, do not forget!:*/
+ 	/* Start  looping on the number of gaussian points: */
+@@ -6831,6 +6821,7 @@
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
++		vz_input->GetInputValue(&vz,gauss);
+ 		ms_input->GetInputValue(&ms,gauss);
+ 		surface_input->GetInputValue(&surface,gauss);
+ 
+@@ -6876,6 +6867,7 @@
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
++		vz_input->GetInputValue(&vz,gauss);
+ 		mb_input->GetInputValue(&mb,gauss);
+ 		bed_input->GetInputValue(&bed,gauss);
+ 		if(mb_correction_input)
Index: /issm/oecreview/Archive/15392-16133/ISSM-15899-15900.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15899-15900.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15899-15900.diff	(revision 16134)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/externalpackages/inishell/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/inishell/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/inishell/install.sh	(revision 15900)
+@@ -0,0 +1,40 @@
++#!/bin/bash
++#inishell install package:  this package is not distributed by ISSM. Please request access to the code by 
++#contacting Mathias Bavay () or logging onto http://models.slf.ch/ and registering.  Once you have a tarball 
++#of the code, please use this script to install.
++
++#we assume you have a inishell-src-*.tgz  tarball
++set -eu
++
++#Do some inquiry about the names of the tar balls: 
++source_tar=`ls inishell-src-*.tgz`
++source_version=`echo $source_tar | sed 's/inishell-src-//g' | sed 's/.tgz//g'`
++
++if [[ $source_tar == "" ]]; then 
++	echo "Could not identify a tar ball for the source code, name should be inishell-src-*.tgz"
++	exit 1
++fi
++if [[ $source_version == "" ]]; then 
++	echo "Could not identify a tar ball version for the source code"
++	exit 1
++fi
++
++
++#Some cleanup
++rm -rf src install inishell-$source_version
++mkdir install
++
++#First deal with source code 
++tar -zxvf  $source_tar
++mv inishell-$source_version src
++rm -rf inishell-$source_version
++
++#Build inishell
++cd src && ant snowpack
++
++#Put the .jar in the install directory
++cp dist/inishell.jar ../install
++
++#Install script to launch inishell jar file directly
++cd ..
++cp scripts/inishell install
+
+Property changes on: ../trunk-jpl/externalpackages/inishell/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/inishell/scripts/inishell
+===================================================================
+--- ../trunk-jpl/externalpackages/inishell/scripts/inishell	(revision 0)
++++ ../trunk-jpl/externalpackages/inishell/scripts/inishell	(revision 15900)
+@@ -0,0 +1,3 @@
++#/bin/bash
++
++java -jar $ISSM_DIR/externalpackages/inishell/install/inishell.jar
+
+Property changes on: ../trunk-jpl/externalpackages/inishell/scripts/inishell
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15900-15901.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15900-15901.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15900-15901.diff	(revision 16134)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/test/NightlyRun/test430.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.py	(revision 15900)
++++ ../trunk-jpl/test/NightlyRun/test430.py	(revision 15901)
+@@ -1,30 +0,0 @@
+-import numpy
+-from model import *
+-from EnumDefinitions import *
+-from MatlabFuncs import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',180000.)
+-md=setmask(md,'../Exp/SquareShelf.exp','')
+-md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md.extrude(3,1.)
+-md=setflowequation(md,'FS','all')
+-md.stressbalance.isnewton=1
+-md.stressbalance.restol=0.0001
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,StressbalanceSolutionEnum())
+-
+-#Fields and tolerances to track changes
+-field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-07,1e-07,1e-06,1e-07,1e-07]
+-field_values=[\
+-	md.results.StressbalanceSolution.Vx,\
+-	md.results.StressbalanceSolution.Vy,\
+-	md.results.StressbalanceSolution.Vz,\
+-	md.results.StressbalanceSolution.Vel,\
+-	md.results.StressbalanceSolution.Pressure,\
+-	]
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 15900)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 15901)
+@@ -1,20 +0,0 @@
+-md=triangle(model(),'../Exp/Square.exp',180000.);
+-md=setmask(md,'../Exp/SquareShelf.exp','');
+-md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,1.);
+-md=setflowequation(md,'FS','all');
+-md.stressbalance.isnewton=1;
+-md.stressbalance.restol=0.0001;
+-md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,StressbalanceSolutionEnum());
+-
+-%Fields and tolerances to track changes
+-field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-07,1e-07,1e-06,1e-07,1e-07};
+-field_values={...
+-	(md.results.StressbalanceSolution.Vx),...
+-	(md.results.StressbalanceSolution.Vy),...
+-	(md.results.StressbalanceSolution.Vz),...
+-	(md.results.StressbalanceSolution.Vel),...
+-	(md.results.StressbalanceSolution.Pressure),...
+-	};
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15900)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15901)
+@@ -133,7 +133,6 @@
+ 	case 427, name='SquareSheetShelfGroundingLine3dSoft';
+ 	case 428, name='SquareSheetShelfStressSSA2dNewton';
+ 	case 429, name='SquareSheetShelfStressHONewton';
+-	case 430, name='SquareSheetShelfStressFSNewton';
+ 	case 431, name='SquareSheetShelfSteaEnthalpySSA3d';
+ 	case 432, name='SquareSheetShelfSteaEnthalpyHO';
+ 	case 433, name='RoundSheetShelfGLMigrationSSA3d';
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15900)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15901)
+@@ -137,7 +137,6 @@
+ 	427  : 'SquareSheetShelfGroundingLine3dSoft',
+ 	428  : 'SquareSheetShelfStressSSA2dNewton',
+ 	429  : 'SquareSheetShelfStressHONewton',
+-	430  : 'SquareSheetShelfStressFSNewton',
+ 	431  : 'SquareSheetShelfSteaEnthalpySSA3d',
+ 	432  : 'SquareSheetShelfSteaEnthalpyHO',
+ 	433  : 'RoundSheetShelfGLMigrationSSA3d',
Index: /issm/oecreview/Archive/15392-16133/ISSM-15901-15902.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15901-15902.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15901-15902.diff	(revision 16134)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 15901)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 15902)
+@@ -18,7 +18,7 @@
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,2e-08]
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,2e-07]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 15901)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 15902)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-08};
++field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-07};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test119.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.py	(revision 15901)
++++ ../trunk-jpl/test/NightlyRun/test119.py	(revision 15902)
+@@ -22,7 +22,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['x1','y1','x2','y2','nbelements','elapsed time']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1.0]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1.5]
+ field_values=[\
+ 	x1, y1,\
+ 	x2, y2,\
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 15901)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 15902)
+@@ -17,7 +17,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'x1','y1','x2','y2','nbelements','elapsed time'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1.};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1.5};
+ field_values={...
+ 	x1, y1,...
+ 	x2, y2,...
Index: /issm/oecreview/Archive/15392-16133/ISSM-15902-15903.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15902-15903.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15902-15903.diff	(revision 16134)
@@ -0,0 +1,96 @@
+Index: ../trunk-jpl/configs/config-walgreen.sh
+===================================================================
+--- ../trunk-jpl/configs/config-walgreen.sh	(revision 15902)
++++ ../trunk-jpl/configs/config-walgreen.sh	(revision 15903)
+@@ -1,16 +0,0 @@
+-#!/bin/csh
+-
+-./configure \
+- --prefix=$ISSM_DIR \
+- --with-wrappers=no \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-petsc-arch=$ISSM_ARCH \
+- --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+- --with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+- --with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich -lmpl " \
+- --with-mkl-dir="/opt/intel/mkl/10.0.1.014/lib/64/lib/" \
+- --with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install/" \
+- --with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install/" \
+- --with-blacs-dir="$ISSM_DIR/externalpackages/petsc/install/" \
+- --with-graphics-lib="/usr/lib/libX11.so" \
+- --with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install"
+Index: ../trunk-jpl/configs/config-macosx64-ogive.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-ogive.sh	(revision 15902)
++++ ../trunk-jpl/configs/config-macosx64-ogive.sh	(revision 15903)
+@@ -1,31 +0,0 @@
+-#!/bin/sh
+-
+-#petsc 3.2
+-#mpich 1.4
+-export FCFLAGS=" -m64"
+-export FFLAGS=" -m64"
+-export CFLAGS=" -arch x86_64"
+-export CXXFLAGS=" -arch x86_64"
+-
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+-	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+-	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+-	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+-	--with-mpi-libflags=" $ISSM_DIR/externalpackages/mpich/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich/install/lib/libmpl.a " \
+-	--with-petsc-arch=$ISSM_ARCH \
+-	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+-	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+-	--with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/include/ " \
+-	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-fortran-lib="/usr/local/gfortran/lib/x86_64/libgfortran.a" \
+-	--with-math-lib="/usr/lib/libm.dylib" \
+-	--with-graphics-lib="/usr/X11/lib/libX11.dylib" \
+-	--with-cxxoptflags=" -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -mmacosx-version-min=10.5  -O3 -DNDEBUG -w "\
+-	--with-numthreads=8
+-	#--with-fortran-lib="/usr/local/gfortran/lib/libgfortran.a" \
+Index: ../trunk-jpl/configs/config-linux64-larsen-petsc3.2.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-larsen-petsc3.2.sh	(revision 15902)
++++ ../trunk-jpl/configs/config-linux64-larsen-petsc3.2.sh	(revision 15903)
+@@ -1,34 +0,0 @@
+-#!/bin/sh
+-
+-#External packages versions:
+-#petsc 3.1 or 3.2
+-#mpich 1.4
+-
+-./configure \
+- --prefix=$ISSM_DIR \
+- --with-matlab-dir=$ISSM_DIR/externalpackages/matlab/install \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-python-dir=$ISSM_DIR/externalpackages/python/install\
+- --with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
+- --with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+- --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+- --with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+- --with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich -lmpl " \
+- --with-petsc-arch=$ISSM_ARCH \
+- --with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
+- --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+- --with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/externalpackages/PLAPACKR32-hg/INCLUDE" \
+- --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+- --with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+- --with-shapelib-dir="$ISSM_DIR/externalpackages/shapelib/install" \
+- --with-fortran-lib="-L/usr/lib/gcc/x86_64-linux-gnu/4.6/ -lgfortran" \
+- --with-graphics-lib="/usr/lib/x86_64-linux-gnu/libX11.so" \
+- --with-cxxoptflags="-march=opteron -O2" \
+- --with-numthreads=16 \
+- --enable-debugging
Index: /issm/oecreview/Archive/15392-16133/ISSM-15903-15904.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15903-15904.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15903-15904.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/externalpackages/snowpack/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/snowpack/install.sh	(revision 15903)
++++ ../trunk-jpl/externalpackages/snowpack/install.sh	(revision 15904)
+@@ -27,7 +27,7 @@
+ mv Snowpack-$source_version/usr src
+ rm -rf Snowpack-$source_version
+ 
+-#Reset makefile: 
++#Build library
+ cd src && rm -rf CMakeCache.txt 
+ cmake -DCMAKE_INSTALL_PREFIX:PATH=$ISSM_DIR/externalpackages/snowpack/install \
+ 	-DMETEOIO_INCLUDE_DIR:PATH=$ISSM_DIR/externalpackages/meteoio/install/include \
+@@ -41,3 +41,16 @@
+ else
+ 	make -j $1  all install
+ fi
++
++#Build binary: 
++cd applications/snowpack
++cmake -DCMAKE_MODULE_PATH:PATH=/Users/larour/issm-uci/trunk-jpl/externalpackages/snowpack/src/tools/cmake/      -DMETEOIO_INCLUDE_DIR:PATH=$ISSM_DIR/externalpackages/meteoio/install/include  .
++
++#Compile
++if [ $# -eq 0 ]; then
++	make  all install
++else
++	make -j $1  all install
++fi
++
++
Index: /issm/oecreview/Archive/15392-16133/ISSM-15904-15905.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15904-15905.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15904-15905.diff	(revision 16134)
@@ -0,0 +1,192 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 15904)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 15905)
+@@ -50,6 +50,7 @@
+ 						EnumToString.la\
+ 						InterpFromMeshToMesh2d.la\
+ 						InterpFromGridToMesh.la\
++						IssmConfig.la\
+ 						MeshProfileIntersection.la\
+ 						NodeConnectivity.la\
+ 						StringToEnum.la\
+@@ -142,6 +143,10 @@
+ 												../InterpFromGridToMesh/InterpFromGridToMesh.h
+ InterpFromGridToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB) $(GSLLIB)
+ 
++IssmConfig_la_SOURCES = ../IssmConfig/IssmConfig.cpp\
++											 ../IssmConfig/IssmConfig.h
++IssmConfig_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
+ MeshProfileIntersection_la_SOURCES = ../MeshProfileIntersection/MeshProfileIntersection.cpp\
+ 										../MeshProfileIntersection/MeshProfileIntersection.h
+ MeshProfileIntersection_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB)
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15904)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 15905)
+@@ -59,6 +59,7 @@
+ 						 InterpFromMeshToMesh3d.la\
+ 						 InterpFromMeshToGrid.la\
+ 						 InterpFromMesh2d.la\
++						 IssmConfig.la\
+ 						 Ll2xy.la\
+ 						 NodeConnectivity.la\
+ 						 MeshPartition.la\
+@@ -195,6 +196,10 @@
+ 										../InterpFromMesh2d/InterpFromMesh2d.h
+ InterpFromMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB) $(GSLLIB)
+ 
++IssmConfig_la_SOURCES = ../IssmConfig/IssmConfig.cpp\
++										../IssmConfig/IssmConfig.h
++IssmConfig_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
+ KMLFileRead_la_SOURCES = ../KMLFileRead/KMLFileRead.cpp\
+ 								 ../KMLFileRead/KMLFileRead.h
+ KMLFileRead_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB)
+Index: ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 15905)
+@@ -0,0 +1,88 @@
++/*\file IssmConfig.c
++ *\brief: get configuration names
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./IssmConfig.h"
++
++void IssmConfigUsage(void){/*{{{*/
++	_printf0_("\n");
++	_printf0_("   usage: " << __FUNCT__ << "value = IssmConfig('string');\n");
++	_printf0_("\n");
++}/*}}}*/
++WRAPPER(IssmConfig){
++
++	/*input/output*/
++	char       *name  = NULL;
++	IssmDouble  value = 0.;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments: */
++	CHECKARGUMENTS(NLHS,NRHS,&IssmConfigUsage);
++
++	/*Fetch inputs: */
++	FetchData(&name,NAME);
++
++	/*Core*/
++	if(strcmp(name,"_HAVE_MPI_")==0){
++		#ifdef _HAVE_MPI_
++		value = 1.;
++		#else
++		value = 0.;
++		#endif
++	}
++	else if(strcmp(name,"_HAVE_DAKOTA_")==0){
++		#ifdef _HAVE_DAKOTA_
++		value = 1.;
++		#else
++		value = 0.;
++		#endif
++	}
++	else if(strcmp(name,"_HAVE_MUMPS_")==0){
++		#ifdef _HAVE_MUMPS_
++		value = 1.;
++		#else
++		value = 0.;
++		#endif
++	}
++	else if(strcmp(name,"_HAVE_PETSC_")==0){
++		#ifdef _HAVE_PETSC_
++		value = 1.;
++		#else
++		value = 0.;
++		#endif
++	}
++	else if(strcmp(name,"_PETSC_MAJOR_")==0){
++		#ifdef _PETSC_MAJOR_
++		value = IssmDouble(_PETSC_MAJOR_);
++		#else
++		_error_("_PETSC_MAJOR_ not found in config.h");
++		#endif
++	}
++	else if(strcmp(name,"_DAKOTA_VERSION_")==0){
++		#ifdef _DAKOTA_VERSION_
++		value = IssmDouble(_DAKOTA_VERSION_);
++		#else
++		_error_("_DAKOTA_VERSION_ not found in config.h");
++		#endif
++	}
++	else{
++		_error_("variable " << name << " not supported yet");
++	}
++
++	/* output: */
++	WriteData(VALUE,value);
++
++	/*Clean up*/
++	xDelete<char>(name);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.h	(revision 15905)
+@@ -0,0 +1,48 @@
++/*!\file:  IssmConfig.h
++ * \brief header file for IssmConfig module.
++ */ 
++
++#ifndef _ISSMCONFIG_H
++#define _ISSMCONFIG_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++/*Header files: */
++#include "../bindings.h"
++#include "../../c/main/globals.h"
++#include "../../c/shared/Enum/Enum.h"
++#include "../../c/shared/shared.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "IssmConfig"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define NAME (mxArray*)prhs[0]
++/* serial output macros: */
++#define VALUE (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define NAME PyTuple_GetItem(args,0)
++/* serial output macros: */
++#define VALUE output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  1
++
++#endif  /* _TEST_H */
Index: /issm/oecreview/Archive/15392-16133/ISSM-15905-15906.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15905-15906.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15905-15906.diff	(revision 16134)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 15905)
++++ ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 15906)
+@@ -18,8 +18,10 @@
+ WRAPPER(IssmConfig){
+ 
+ 	/*input/output*/
+-	char       *name  = NULL;
+-	IssmDouble  value = 0.;
++	char       *name     = NULL;
++	bool        isstring = false;
++	IssmDouble  value   = 0.;
++	char       *svalue   = NULL;
+ 
+ 	/*Boot module: */
+ 	MODULEBOOT();
+@@ -68,7 +70,9 @@
+ 	}
+ 	else if(strcmp(name,"_DAKOTA_VERSION_")==0){
+ 		#ifdef _DAKOTA_VERSION_
+-		value = IssmDouble(_DAKOTA_VERSION_);
++		isstring = true;
++		svalue =xNew<char>(strlen(_DAKOTA_VERSION_)+1);
++		xMemCpy<char>(svalue,_DAKOTA_VERSION_,(strlen(_DAKOTA_VERSION_)+1));
+ 		#else
+ 		_error_("_DAKOTA_VERSION_ not found in config.h");
+ 		#endif
+@@ -78,10 +82,14 @@
+ 	}
+ 
+ 	/* output: */
+-	WriteData(VALUE,value);
++	if(isstring)
++	 WriteData(VALUE,svalue);
++	else
++	 WriteData(VALUE,value);
+ 
+ 	/*Clean up*/
+ 	xDelete<char>(name);
++	xDelete<char>(svalue);
+ 
+ 	/*end module: */
+ 	MODULEEND();
Index: /issm/oecreview/Archive/15392-16133/ISSM-15906-15907.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15906-15907.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15906-15907.diff	(revision 16134)
@@ -0,0 +1,718 @@
+Index: ../trunk-jpl/src/m/os/petscversion.m
+===================================================================
+--- ../trunk-jpl/src/m/os/petscversion.m	(revision 15906)
++++ ../trunk-jpl/src/m/os/petscversion.m	(revision 15907)
+@@ -1,26 +0,0 @@
+-function PETSC_VERSION=petscversion()
+-%PETSCVERSION - recover petsc version number, inside config.h file
+-%
+-%   Usage:
+-%       PETSC_VERSION=petscversion();
+-
+-%default
+-PETSC_VERSION=3;
+-
+-configfile=[issmdir() '/config.h'];
+-if ~exist(configfile,'file'),
+-	error(['File ' configfile ' not found. ISSM has not been configured yet!']);
+-end
+-
+-%go through the file, and recover the line we want
+-fid=fopen(configfile,'r');
+-if(fid==-1), error(['could not open file: ' configfile]); end
+-
+-while(true),
+-	tline=fgets(fid);
+-	if ~ischar(tline), break, end
+-	if  strncmp(tline,'#define _PETSC_MAJOR_',21),
+-		PETSC_VERSION=str2num(tline(23));
+-	end
+-end
+-fclose(fid);
+Index: ../trunk-jpl/src/m/os/ismumps.py
+===================================================================
+--- ../trunk-jpl/src/m/os/ismumps.py	(revision 15906)
++++ ../trunk-jpl/src/m/os/ismumps.py	(revision 15907)
+@@ -1,37 +0,0 @@
+-import os
+-from issmdir import *
+-from MatlabFuncs import *
+-
+-def ismumps():
+-	"""
+-	ISMUMPS - figure out if MUMPS package was compiled with ISSM
+- 
+-	   Usage:
+-	      flag=ismumps();
+-	"""
+-
+-	configfile=os.path.join(issmdir(),'bin','config.h')    #should find it in the install target
+-	if not os.path.exists(configfile):
+-		raise RuntimeError("File '%s' not found. ISSM has not been configured yet!" % configfile)
+-
+-	#go through the file, and recover the line we want
+-	flag=2
+-	try:
+-		fid=open(configfile,'r')
+-	except IOError as e:
+-		raise IOError("could not open file: '%s'" % configfile)
+-
+-	for tline in fid:
+-		if strncmp(tline,'/* #undef _HAVE_MUMPS_ */',25):
+-			flag=0
+-			break
+-		if  strncmp(tline,'#define _HAVE_MUMPS_',20):
+-			flag=1
+-			break
+-
+-	fid.close()
+-	if flag==2:
+-		raise RuntimeError("could not determine whether MUMPS was or was not compiled.")
+-
+-	return flag
+-
+Index: ../trunk-jpl/src/m/os/ismumps.m
+===================================================================
+--- ../trunk-jpl/src/m/os/ismumps.m	(revision 15906)
++++ ../trunk-jpl/src/m/os/ismumps.m	(revision 15907)
+@@ -1,32 +0,0 @@
+-function flag=ismumps()
+-%ISMUMPS - figure out if MUMPS package was compiled with ISSM
+-%
+-%   Usage:
+-%       flag=ismumps();
+-
+-configfile=[issmdir() '/bin/config.h']; %should find it in the install target
+-if ~exist(configfile,'file'),
+-	error(['File ' configfile ' not found. ISSM has not been configured yet!']);
+-end
+-
+-%go through the file, and recover the line we want
+-flag=2;
+-fid=fopen(configfile,'r');
+-if(fid==-1), error(['could not open file: ' configfile]); end
+-
+-while(true),
+-	tline=fgets(fid);
+-	if ~ischar(tline), break, end
+-	if strncmp(tline,'/* #undef _HAVE_MUMPS_ */',25),
+-		flag=0;
+-		break;
+-	end
+-	if  strncmp(tline,'#define _HAVE_MUMPS_',20),
+-		flag=1;
+-		break;
+-	end
+-end
+-fclose(fid);
+-if flag==2,
+-	error('could not determine whether MUMPS was or was not compiled');
+-end
+Index: ../trunk-jpl/src/m/os/dakotaversion.py
+===================================================================
+--- ../trunk-jpl/src/m/os/dakotaversion.py	(revision 15906)
++++ ../trunk-jpl/src/m/os/dakotaversion.py	(revision 15907)
+@@ -1,34 +0,0 @@
+-import os
+-from issmdir import *
+-from MatlabFuncs import *
+-
+-def dakotaversion():
+-	"""
+-	DAKOTAVERSION - recover dakota version number, inside config.h file
+- 
+-	   Usage:
+-	      DAKOTA_VERSION=dakotaversion();
+-	"""
+-
+-	#default
+-	DAKOTA_VERSION=''
+-
+-	configfile=os.path.join(issmdir(),'config.h')
+-	if not os.path.exists(configfile):
+-		raise RuntimeError("File '%s' not found. ISSM has not been configured yet!" % configfile)
+-
+-	#go through the file, and recover the line we want
+-	try:
+-		fid=open(configfile,'r')
+-	except IOError as e:
+-		raise IOerror("could not open file: '%s'" % configfile)
+-
+-	for tline in fid:
+-		if strncmp(tline,'#define _DAKOTA_VERSION_',24):
+-			DAKOTA_VERSION=tline[25:].replace('"','').strip()
+-			break
+-
+-	fid.close()
+-
+-	return DAKOTA_VERSION
+-
+Index: ../trunk-jpl/src/m/os/ispetsc.py
+===================================================================
+--- ../trunk-jpl/src/m/os/ispetsc.py	(revision 15906)
++++ ../trunk-jpl/src/m/os/ispetsc.py	(revision 15907)
+@@ -1,37 +0,0 @@
+-import os
+-from issmdir import *
+-from MatlabFuncs import *
+-
+-def ispetsc():
+-	"""
+-	ISPETSC - figure out if PETSC package was compiled with ISSM
+- 
+-	   Usage:
+-	      flag=ispetsc();
+-	"""
+-
+-	configfile=os.path.join(issmdir(),'bin','config.h')    #should find it in the install target
+-	if not os.path.exists(configfile):
+-		raise RuntimeError("File '%s' not found. ISSM has not been configured yet!" % configfile)
+-
+-	#go through the file, and recover the line we want
+-	flag=2
+-	try:
+-		fid=open(configfile,'r')
+-	except IOError as e:
+-		raise IOError("could not open file: '%s'" % configfile)
+-
+-	for tline in fid:
+-		if strncmp(tline,'/* #undef _HAVE_PETSC_ */',25):
+-			flag=0
+-			break
+-		if  strncmp(tline,'#define _HAVE_PETSC_',20):
+-			flag=1
+-			break
+-
+-	fid.close()
+-	if flag==2:
+-		raise RuntimeError("could not determine whether PETSC was or was not compiled.")
+-
+-	return flag
+-
+Index: ../trunk-jpl/src/m/os/dakotaversion.m
+===================================================================
+--- ../trunk-jpl/src/m/os/dakotaversion.m	(revision 15906)
++++ ../trunk-jpl/src/m/os/dakotaversion.m	(revision 15907)
+@@ -1,26 +0,0 @@
+-function DAKOTA_VERSION=dakotaversion()
+-%DAKOTAVERSION - recover dakota version number, inside config.h file
+-%
+-%   Usage:
+-%       DAKOTA_VERSION=dakotaversion();
+-
+-%default
+-DAKOTA_VERSION='';
+-
+-configfile=[issmdir() '/config.h'];
+-if ~exist(configfile,'file'),
+-	error(['File ' configfile ' not found. ISSM has not been configured yet!']);
+-end
+-
+-%go through the file, and recover the line we want
+-fid=fopen(configfile,'r');
+-if(fid==-1), error(['could not open file: ' configfile]); end
+-
+-while(true),
+-	tline=fgets(fid);
+-	if ~ischar(tline), break, end
+-	if  strncmp(tline,'#define _DAKOTA_VERSION_',24),
+-		DAKOTA_VERSION=strtrim(strrep(tline(26:end),'"',''));
+-	end
+-end
+-fclose(fid);
+Index: ../trunk-jpl/src/m/os/ispetsc.m
+===================================================================
+--- ../trunk-jpl/src/m/os/ispetsc.m	(revision 15906)
++++ ../trunk-jpl/src/m/os/ispetsc.m	(revision 15907)
+@@ -1,32 +0,0 @@
+-function flag=ispetsc()
+-%ISPETSC - figure out if PETSC package was compiled with ISSM
+-%
+-%   Usage:
+-%       flag=ispetsc();
+-
+-configfile=[issmdir() '/bin/config.h']; %should find it in the install target
+-if ~exist(configfile,'file'),
+-	error(['File ' configfile ' not found. ISSM has not been configured yet!']);
+-end
+-
+-%go through the file, and recover the line we want
+-flag=2;
+-fid=fopen(configfile,'r');
+-if(fid==-1), error(['could not open file: ' configfile]); end
+-
+-while(true),
+-	tline=fgets(fid);
+-	if ~ischar(tline), break, end
+-	if strncmp(tline,'/* #undef _HAVE_PETSC_ */',25),
+-		flag=0;
+-		break;
+-	end
+-	if  strncmp(tline,'#define _HAVE_PETSC_',20),
+-		flag=1;
+-		break;
+-	end
+-end
+-fclose(fid);
+-if flag==2,
+-	error('could not determine whether PETSC was or was not compiled');
+-end
+Index: ../trunk-jpl/src/m/os/ismpi.py
+===================================================================
+--- ../trunk-jpl/src/m/os/ismpi.py	(revision 15906)
++++ ../trunk-jpl/src/m/os/ismpi.py	(revision 15907)
+@@ -1,37 +0,0 @@
+-import os
+-from issmdir import *
+-from MatlabFuncs import *
+-
+-def ismpi():
+-	"""
+-	ISMPI - figure out if MPI package was compiled with ISSM
+- 
+-	   Usage:
+-	      flag=ismpi();
+-	"""
+-
+-	configfile=os.path.join(issmdir(),'bin','config.h')    #should find it in the install target
+-	if not os.path.exists(configfile):
+-		raise RuntimeError("File '%s' not found. ISSM has not been configured yet!" % configfile)
+-
+-	#go through the file, and recover the line we want
+-	flag=2
+-	try:
+-		fid=open(configfile,'r')
+-	except IOError as e:
+-		raise IOError("could not open file: '%s'" % configfile)
+-
+-	for tline in fid:
+-		if strncmp(tline,'/* #undef _HAVE_MPI_ */',23):
+-			flag=0
+-			break
+-		if  strncmp(tline,'#define _HAVE_MPI_',18):
+-			flag=1
+-			break
+-
+-	fid.close()
+-	if flag==2:
+-		raise RuntimeError("could not determine whether MPI was or was not compiled.")
+-
+-	return flag
+-
+Index: ../trunk-jpl/src/m/os/petscversion.py
+===================================================================
+--- ../trunk-jpl/src/m/os/petscversion.py	(revision 15906)
++++ ../trunk-jpl/src/m/os/petscversion.py	(revision 15907)
+@@ -1,34 +0,0 @@
+-import os
+-from issmdir import *
+-from MatlabFuncs import *
+-
+-def petscversion():
+-	"""
+-	PETSCVERSION - recover petsc version number, inside config.h file
+- 
+-	   Usage:
+-	      PETSC_VERSION=petscversion();
+-	"""
+-
+-	#default
+-	PETSC_VERSION=3
+-
+-	configfile=os.path.join(issmdir(),'config.h')
+-	if not os.path.exists(configfile):
+-		raise RuntimeError("File '%s' not found. ISSM has not been configured yet!" % configfile)
+-
+-	#go through the file, and recover the line we want
+-	try:
+-		fid=open(configfile,'r')
+-	except IOError as e:
+-		raise IOerror("could not open file: '%s'" % configfile)
+-
+-	for tline in fid:
+-		if strncmp(tline,'#define _PETSC_MAJOR_',21):
+-			PETSC_VERSION=int(tline[22])
+-			break
+-
+-	fid.close()
+-
+-	return PETSC_VERSION
+-
+Index: ../trunk-jpl/src/m/os/ismpi.m
+===================================================================
+--- ../trunk-jpl/src/m/os/ismpi.m	(revision 15906)
++++ ../trunk-jpl/src/m/os/ismpi.m	(revision 15907)
+@@ -1,32 +0,0 @@
+-function flag=ismpi()
+-%ISMPI - figure out if MPI package was compiled with ISSM
+-%
+-%   Usage:
+-%       flag=ismpi();
+-
+-configfile=[issmdir() '/bin/config.h']; %should find it in the install target
+-if ~exist(configfile,'file'),
+-	error(['File ' configfile ' not found. ISSM has not been configured yet!']);
+-end
+-
+-%go through the file, and recover the line we want
+-flag=2;
+-fid=fopen(configfile,'r');
+-if(fid==-1), error(['could not open file: ' configfile]); end
+-
+-while(true),
+-	tline=fgets(fid);
+-	if ~ischar(tline), break, end
+-	if strncmp(tline,'/* #undef _HAVE_MPI_ */',23),
+-		flag=0;
+-		break;
+-	end
+-	if  strncmp(tline,'#define _HAVE_MPI_',18),
+-		flag=1;
+-		break;
+-	end
+-end
+-fclose(fid);
+-if flag==2,
+-	error('could not determine whether MPI was or was not compiled');
+-end
+Index: ../trunk-jpl/src/m/solve/solve.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.py	(revision 15906)
++++ ../trunk-jpl/src/m/solve/solve.py	(revision 15907)
+@@ -7,7 +7,6 @@
+ from EnumToString import EnumToString
+ from ismodelselfconsistent import *
+ from marshall import *
+-from ispetsc import *
+ from waitonlock import *
+ from loadresultsfromcluster import *
+ 
+Index: ../trunk-jpl/src/m/solvers/stokesoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/stokesoptions.m	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/stokesoptions.m	(revision 15907)
+@@ -9,11 +9,11 @@
+ stokes=struct();
+ 
+ %default stokes options
+-PETSC_VERSION=petscversion();
+-if PETSC_VERSION==2,
++PETSC_VERSION=IssmConfig('_PETSC_MAJOR_')[0];
++if PETSC_VERSION==2.,
+ 	error('stokesoptions error message: multi-physics options not supported in Petsc 2');
+ end
+-if PETSC_VERSION==3,
++if PETSC_VERSION==3.,
+ 	stokes.toolkit='petsc';
+ 	stokes.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+ 	stokes.ksp_max_it=getfieldvalue(options,'ksp_max_it',1000);
+Index: ../trunk-jpl/src/m/solvers/asmoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/asmoptions.py	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/asmoptions.py	(revision 15907)
+@@ -1,7 +1,4 @@
+-#module imports {{{
+ from pairoptions import *
+-from petscversion  import *
+-#}}}
+ def asmoptions(*args):
+ 	#ASMOPTIONS - return ASM petsc options
+ 	#
+Index: ../trunk-jpl/src/m/solvers/jacobiasmoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/jacobiasmoptions.py	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/jacobiasmoptions.py	(revision 15907)
+@@ -1,7 +1,4 @@
+-#module imports {{{
+ from pairoptions import *
+-from petscversion  import *
+-#}}}
+ def jacobiasmoptions(*args):
+ 	#ASMOPTIONS - return Additive Shwartz Method with Jacobi preconditioner petsc options
+ 	#
+Index: ../trunk-jpl/src/m/solvers/issmsolver.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmsolver.py	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/issmsolver.py	(revision 15907)
+@@ -1,7 +1,4 @@
+-#module imports {{{
+ from pairoptions import *
+-from petscversion  import *
+-#}}}
+ def asmoptions(*args):
+ 	#ISSMSOLVE - return issm solver options
+ 	#
+Index: ../trunk-jpl/src/m/solvers/matlaboptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/matlaboptions.py	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/matlaboptions.py	(revision 15907)
+@@ -1,7 +1,4 @@
+-#module imports {{{
+ from pairoptions import *
+-from petscversion  import *
+-#}}}
+ def matlaboptions(*args):
+ 	#MATLABOPTIONS - return Matlab petsc options
+ 	#
+Index: ../trunk-jpl/src/m/solvers/jacobicgoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/jacobicgoptions.py	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/jacobicgoptions.py	(revision 15907)
+@@ -1,7 +1,4 @@
+-#module imports {{{
+ from pairoptions import *
+-from petscversion  import *
+-#}}}
+ def jacobicgoptions(*args):
+ 	#ASMOPTIONS - return Additive Shwartz Method with Jacobi preconditioner petsc options
+ 	#
+Index: ../trunk-jpl/src/m/solvers/mumpsoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/mumpsoptions.py	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/mumpsoptions.py	(revision 15907)
+@@ -1,6 +1,6 @@
+ from collections import OrderedDict
+ from pairoptions import *
+-from petscversion import *
++from IssmConfig  import *
+ 
+ def mumpsoptions(*args):
+ 	"""
+@@ -15,15 +15,15 @@
+ 	mumps=OrderedDict()
+ 
+ 	#default mumps options
+-	PETSC_VERSION=petscversion()
+-	if PETSC_VERSION==2:
++	PETSC_VERSION=IssmConfig('_PETSC_MAJOR_')[0]
++	if PETSC_VERSION==2.:
+ 		mumps['toolkit']='petsc'
+ 		mumps['mat_type']=options.getfieldvalue('mat_type','aijmumps')
+ 		mumps['ksp_type']=options.getfieldvalue('ksp_type','preonly')
+ 		mumps['pc_type']=options.getfieldvalue('pc_type','lu')
+ 		mumps['mat_mumps_icntl_14']=options.getfieldvalue('mat_mumps_icntl_14',120)
+ 		mumps['pc_factor_shift_positive_definite']=options.getfieldvalue('pc_factor_shift_positive_definite','true')
+-	if PETSC_VERSION==3:
++	if PETSC_VERSION==3.:
+ 		mumps['toolkit']='petsc'
+ 		mumps['mat_type']=options.getfieldvalue('mat_type','mpiaij')
+ 		mumps['ksp_type']=options.getfieldvalue('ksp_type','preonly')
+Index: ../trunk-jpl/src/m/solvers/soroptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/soroptions.py	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/soroptions.py	(revision 15907)
+@@ -1,7 +1,4 @@
+-#module imports {{{
+ from pairoptions import *
+-from petscversion  import *
+-#}}}
+ def soroptions(*args):
+ 	#SOROPTIONS - return Relaxation Solver petsc options
+ 	#
+Index: ../trunk-jpl/src/m/solvers/mumpsoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/mumpsoptions.m	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/mumpsoptions.m	(revision 15907)
+@@ -9,8 +9,8 @@
+ mumps=struct();
+ 
+ %default mumps options
+-PETSC_VERSION=petscversion();
+-if PETSC_VERSION==2,
++PETSC_VERSION=IssmConfig('_PETSC_MAJOR_')[0];
++if PETSC_VERSION==2.,
+ 	mumps.toolkit='petsc';
+ 	mumps.mat_type=getfieldvalue(options,'mat_type','aijmumps');
+ 	mumps.ksp_type=getfieldvalue(options,'ksp_type','preonly');
+@@ -18,7 +18,7 @@
+ 	mumps.mat_mumps_icntl_14=getfieldvalue(options,'mat_mumps_icntl_14',120);
+ 	mumps.pc_factor_shift_positive_definite=getfieldvalue(options,'pc_factor_shift_positive_definite','true');
+ end
+-if PETSC_VERSION==3,
++if PETSC_VERSION==3.,
+ 	mumps.toolkit='petsc';
+ 	mumps.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+ 	mumps.ksp_type=getfieldvalue(options,'ksp_type','preonly');
+Index: ../trunk-jpl/src/m/solvers/stokesoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/stokesoptions.py	(revision 15906)
++++ ../trunk-jpl/src/m/solvers/stokesoptions.py	(revision 15907)
+@@ -1,7 +1,5 @@
+-#module imports {{{
+ from pairoptions import *
+-from petscversion  import *
+-#}}}
++from IssmConfig  import *
+ def stokesoptions(*args):
+ 	#STOKESOPTIONS - return STOKES multi-physics solver petsc options
+ 	#
+@@ -13,11 +11,11 @@
+ 
+ 
+ 	#default stokes options
+-	PETSC_VERSION=petscversion()
++	PETSC_VERSION=IssmConfig('_PETSC_MAJOR_')[0]
+ 
+-	if PETSC_VERSION==2:
++	if PETSC_VERSION==2.:
+ 		raise RuntimeError('stokesoptions error message: multi-physics options not supported in Petsc 2')
+-	if PETSC_VERSION==3:
++	if PETSC_VERSION==3.:
+ 		options=[['toolkit','petsc'],['mat_type','mpiaij'],['ksp_max_it',1000],['ksp_type','gmres'],['pc_type','fieldsplit'],['pc_field_split_type','schur'],\
+ 	['fieldsplit_0_pc_type','hypre'],['fieldsplit_0_ksp_type','gmres'],['fieldsplit_0_pc_hypre_type','boomerang'],\
+ 	['fieldsplit_1_pc_type','jacobi'],['fieldsplit_1_ksp_type','preonly'],['issm_option_solver','stokes']]
+Index: ../trunk-jpl/src/m/classes/toolkits.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/toolkits.m	(revision 15906)
++++ ../trunk-jpl/src/m/classes/toolkits.m	(revision 15907)
+@@ -39,9 +39,9 @@
+ 		 function obj = setdefaultparameters(obj) % {{{
+ 
+ 			 %default toolkits: 
+-			 if ispetsc,
++			 if IssmConfig('_HAVE_PETSC_'),
+ 				 %MUMPS is the default toolkits
+-				 if ismumps(),
++				 if IssmConfig('_HAVE_MUMPS_'),
+ 					 obj.DefaultAnalysis           = mumpsoptions();
+ 				 else
+ 					 obj.DefaultAnalysis           = iluasmoptions(); 
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 15906)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 15907)
+@@ -349,7 +349,7 @@
+             case {'nond_sampling'}
+                 param_write(fid,sbeg,'seed','             = ','\n',dm.params);
+                 param_write(fid,sbeg,'fixed_seed','','\n',dm.params);
+-                dver=textscan(dakotaversion(),'%[0123456789].%[0123456789].%[0123456789]');
++                dver=textscan(IssmConfig('_DAKOTA_VERSION_'),'%[0123456789].%[0123456789].%[0123456789]');
+                 if ((str2num(dver{1}{1})==4 && str2num(dver{2}{1})>2) || str2num(dver{1}{1})>4)
+                     param_write(fid,sbeg,'rng','                ','\n',dm.params);
+                 end
+Index: ../trunk-jpl/src/m/classes/clusters/generic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.py	(revision 15906)
++++ ../trunk-jpl/src/m/classes/clusters/generic.py	(revision 15907)
+@@ -1,7 +1,7 @@
+ import socket
+-import os
+ import math
+ import subprocess
++from IssmConfig import IssmConfig
+ from EnumToString import EnumToString
+ from issmdir import *
+ from pairoptions import *
+@@ -80,12 +80,12 @@
+ 			fid.write('#!/bin/sh\n')
+ 			if not isvalgrind:
+ 				if self.interactive: 
+-					if ismpi():
++					if IssmConfig('_HAVE_MPI_')[0]:
+ 						fid.write('mpiexec -np %i %s/issm.exe %s %s/%s %s ' % (self.np,self.codepath,EnumToString(solution)[0],self.executionpath,dirname,modelname))
+ 					else:
+ 						fid.write('%s/issm.exe %s %s/%s %s ' % (self.codepath,EnumToString(solution)[0],self.executionpath,dirname,modelname))
+ 				else:
+-					if ismpi():
++					if IssmConfig('_HAVE_MPI_')[0]:
+ 						fid.write('mpiexec -np %i %s/issm.exe %s %s/%s %s 2> %s.errlog >%s.outlog ' % (self.np,self.codepath,EnumToString(solution)[0],self.executionpath,dirname,modelname,modelname,modelname))
+ 					else:
+ 						fid.write('%s/issm.exe %s %s/%s %s 2> %s.errlog >%s.outlog ' % (self.codepath,EnumToString(solution)[0],self.executionpath,dirname,modelname,modelname,modelname))
+@@ -94,7 +94,7 @@
+ 			else:
+ 				#Add --gen-suppressions=all to get suppression lines
+ 				fid.write('LD_PRELOAD=%s \\\n' % self.valgrindlib)
+-				if ismpi():
++				if IssmConfig('_HAVE_MPI_')[0]:
+ 					fid.write('mpiexec -np %i %s --leak-check=full --suppressions=%s %s/issm.exe %s %s/%s %s 2> %s.errlog >%s.outlog ' % \
+ 							(self.np,self.valgrind,self.valgrindsup,self.codepath,EnumToString(solution)[0],self.executionpath,dirname,modelname,modelname,modelname))
+ 				else:	
+Index: ../trunk-jpl/src/m/classes/clusters/generic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 15906)
++++ ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 15907)
+@@ -69,13 +69,13 @@
+ 				fprintf(fid,'#!/bin/sh\n');
+ 				if ~isvalgrind,
+ 					if cluster.interactive
+-						if ismpi,
++						if IssmConfig('_HAVE_MPI_'),
+ 							fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname);
+ 						else
+ 							fprintf(fid,'%s/issm.exe %s %s %s ',cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname);
+ 						end
+ 					else
+-						if ismpi,
++						if IssmConfig('_HAVE_MPI_'),
+ 							fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+ 						else
+ 							fprintf(fid,'%s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+@@ -87,7 +87,7 @@
+ 					%Add --gen-suppressions=all to get suppression lines
+ 					fprintf(fid,'LD_PRELOAD=%s \\\n',cluster.valgrindlib);
+ 					if ismac, 
+-						if ismpi,
++						if IssmConfig('_HAVE_MPI_'),
+ 							fprintf(fid,'mpiexec -np %i %s --leak-check=full --dsymutil=yes --suppressions=%s %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
+ 							cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname], modelname,modelname,modelname);
+ 						else
+@@ -95,7 +95,7 @@
+ 							cluster.valgrind,cluster.valgrindsup,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname], modelname,modelname,modelname);
+ 						end
+ 					else
+-						if ismpi,
++						if IssmConfig('_HAVE_MPI_'),
+ 							fprintf(fid,'mpiexec -np %i %s --leak-check=full --suppressions=%s %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
+ 							cluster.np,cluster.valgrind,cluster.valgrindsup,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+ 						else
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15906)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15907)
+@@ -37,7 +37,6 @@
+ from miscellaneous import miscellaneous
+ from private import private
+ from EnumDefinitions import *
+-from ismumps import *
+ from mumpsoptions import *
+ from iluasmoptions import *
+ from project3d import *
+Index: ../trunk-jpl/src/m/classes/model/planet.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/planet.m	(revision 15906)
++++ ../trunk-jpl/src/m/classes/model/planet.m	(revision 15907)
+@@ -37,11 +37,6 @@
+ 			 md.verbose          = verbose('solution',true,'qmu',true,'control',true);
+ 			 md.settings         = settings();
+ 			 md.solver           = solver();
+-			 if ismumps(),
+-				 md.solver           = addoptions(md.solver,StressbalanceVerticalAnalysisEnum(),mumpsoptions());
+-			 else
+-				 md.solver           = addoptions(md.solver,StressbalanceVerticalAnalysisEnum(),iluasmoptions());
+-			 end
+ 			 md.cluster          = generic();
+ 			 md.balancethickness = balancethickness();
+ 			 md.stressbalance       = stressbalance();
+Index: ../trunk-jpl/src/m/classes/toolkits.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/toolkits.py	(revision 15906)
++++ ../trunk-jpl/src/m/classes/toolkits.py	(revision 15907)
+@@ -1,5 +1,4 @@
+-from ismumps import *
+-from ispetsc import *
++from IssmConfig import IssmConfig
+ from mumpsoptions import *
+ from iluasmoptions import *
+ from EnumToString import EnumToString
+@@ -18,9 +17,9 @@
+ 
+ 	def __init__(self):    # {{{
+ 		#default toolkits
+-		if ispetsc():
++		if IssmConfig('_HAVE_PETSC_')[0]:
+ 			#MUMPS is the default toolkits
+-			if ismumps():
++			if IssmConfig('_HAVE_MUMPS_')[0]:
+ 				self.DefaultAnalysis           = mumpsoptions()
+ 			else:
+ 				self.DefaultAnalysis           = iluasmoptions()
Index: /issm/oecreview/Archive/15392-16133/ISSM-15907-15908.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15907-15908.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15907-15908.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/solvers/mumpsoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/mumpsoptions.m	(revision 15907)
++++ ../trunk-jpl/src/m/solvers/mumpsoptions.m	(revision 15908)
+@@ -9,7 +9,7 @@
+ mumps=struct();
+ 
+ %default mumps options
+-PETSC_VERSION=IssmConfig('_PETSC_MAJOR_')[0];
++PETSC_VERSION=IssmConfig('_PETSC_MAJOR_');
+ if PETSC_VERSION==2.,
+ 	mumps.toolkit='petsc';
+ 	mumps.mat_type=getfieldvalue(options,'mat_type','aijmumps');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15908-15909.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15908-15909.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15908-15909.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 15908)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 15909)
+@@ -349,7 +349,7 @@
+             case {'nond_sampling'}
+                 param_write(fid,sbeg,'seed','             = ','\n',dm.params);
+                 param_write(fid,sbeg,'fixed_seed','','\n',dm.params);
+-                dver=textscan(IssmConfig('_DAKOTA_VERSION_'),'%[0123456789].%[0123456789].%[0123456789]');
++                dver=textscan(IssmConfig('_DAKOTA_VERSION_')[0],'%[0123456789].%[0123456789].%[0123456789]');
+                 if ((str2num(dver{1}{1})==4 && str2num(dver{2}{1})>2) || str2num(dver{1}{1})>4)
+                     param_write(fid,sbeg,'rng','                ','\n',dm.params);
+                 end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15909-15910.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15909-15910.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15909-15910.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 15909)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 15910)
+@@ -41,7 +41,7 @@
+ %%  nond_sampling study
+ md.qmu.method=dakota_method('nond_samp');
+ md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'seed',1234,'samples',20,'sample_type','lhs');
+-dver=textscan(dakotaversion(),'%[0123456789].%[0123456789].%[0123456789]');
++dver=textscan(IssmConfig('_DAKOTA_VERSION_'),'%[0123456789].%[0123456789].%[0123456789]');
+ if ((str2num(dver{1}{1})==4 && str2num(dver{2}{1})>2) || str2num(dver{1}{1})>4)
+ 	md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'rng','rnum2');
+ end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15910-15911.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15910-15911.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15910-15911.diff	(revision 16134)
@@ -0,0 +1,97 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15910)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15911)
+@@ -609,7 +609,6 @@
+ 	dnl ampi headers and libraries
+ 	if test "x$HAVE_AMPI" == "xyes"; then
+ 		AMPIINCL="-I$AMPI_ROOT/include"
+-		echo "adolc_root: |$ADOLC_ROOT|"
+ 		if test "x$ADOLC_ROOT" == "xno"; then
+ 			AC_MSG_ERROR([cannot run adjoinable mpi without adolc]);
+ 		fi
+@@ -1444,7 +1443,63 @@
+ 	fi
+ 	AC_MSG_RESULT(done)
+ 	dnl }}}
++	dnl meteoio{{{
++	AC_ARG_WITH([meteoio-dir],
++	  AS_HELP_STRING([--with-meteoio-dir=DIR], [use meteoio in conjunction with snowpack model.]),
++	  [METEOIO_ROOT=$withval],[METEOIO_ROOT="no"]) 
+ 
++	dnl Check whether meteoio is enabled
++	AC_MSG_CHECKING([for meteoio])
++	if test "x$METEOIO_ROOT" = "xno" ; then
++		HAVE_METEOIO=no
++	else
++		HAVE_METEOIO=yes
++		if ! test -d "$METEOIO_ROOT"; then
++			AC_MSG_ERROR([meteoio directory provided ($METEOIO_ROOT) does not exist]);
++		fi
++	fi
++	AC_MSG_RESULT($HAVE_METEOIO)
++	
++	dnl meteoio headers and libraries
++	if test "x$HAVE_METEOIO" == "xyes"; then
++		METEOIOINCL="-I$METEOIO_ROOT/include"
++		METEOIOLIB="-dy -L$METEOIO_ROOT/lib  -lmeteoio "
++
++		AC_DEFINE([_HAVE_METEOIO_],[1],[with meteoio])
++		AC_SUBST([METEOIOINCL])
++		AC_SUBST([METEOIOLIB])
++	fi
++	AM_CONDITIONAL([METEOIO], [test x$HAVE_METEOIO = xyes])
++	dnl }}}
++	dnl snowpack{{{
++	AC_ARG_WITH([snowpack-dir],
++	  AS_HELP_STRING([--with-snowpack-dir=DIR], [use snowpack for surface mass balance model.]),
++	  [SNOWPACK_ROOT=$withval],[SNOWPACK_ROOT="no"]) 
++
++	dnl Check whether snowpack is enabled
++	AC_MSG_CHECKING([for snowpack])
++	if test "x$SNOWPACK_ROOT" = "xno" ; then
++		HAVE_SNOWPACK=no
++	else
++		HAVE_SNOWPACK=yes
++		if ! test -d "$SNOWPACK_ROOT"; then
++			AC_MSG_ERROR([snowpack directory provided ($SNOWPACK_ROOT) does not exist]);
++		fi
++	fi
++	AC_MSG_RESULT($HAVE_SNOWPACK)
++	
++	dnl snowpack headers and libraries
++	if test "x$HAVE_SNOWPACK" == "xyes"; then
++		SNOWPACKINCL="-I$SNOWPACK_ROOT/include"
++		SNOWPACKLIB="-dy -L$SNOWPACK_ROOT/lib  -lsnowpack "
++
++		AC_DEFINE([_HAVE_SNOWPACK_],[1],[with snowpack for surface mass balance model])
++		AC_SUBST([SNOWPACKINCL])
++		AC_SUBST([SNOWPACKLIB])
++	fi
++	AM_CONDITIONAL([SNOWPACK], [test x$HAVE_SNOWPACK = xyes])
++	dnl }}}
++
+ 	dnl Capabilities
+ 	dnl with-kml{{{
+ 	AC_ARG_WITH([kml],
+@@ -1877,8 +1932,20 @@
+ 		  if test "$HAVE_ADOLC" = "yes"  && test "$HAVE_KRIGING" = "yes" ; then
+ 			AC_MSG_ERROR([cannot compile kriging.exe under adolc conditions!]);
+ 		fi
++		dnl check that if we run meteoio, we have snowpack also
++		  if test "$HAVE_METEOIO" = "yes"  && test "$HAVE_SNOWPACK" = "no" ; then
++			AC_MSG_ERROR([cannot compile MeteoIO package without Snowpack!]);
++		fi
++		dnl check that if we run snowpack, we have meteoio also
++		  if test "$HAVE_METEOIO" = "no"  && test "$HAVE_SNOWPACK" = "yes" ; then
++			AC_MSG_ERROR([cannot compile Snowpack package without MeteoIO!]);
++		fi
+ 
+ 
++
++
++
++
+ 		  AC_MSG_RESULT(done)
+ 		  dnl }}}
+ ])
Index: /issm/oecreview/Archive/15392-16133/ISSM-15911-15912.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15911-15912.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15911-15912.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/externalpackages/inishell
+===================================================================
+--- ../trunk-jpl/externalpackages/inishell	(revision 15911)
++++ ../trunk-jpl/externalpackages/inishell	(revision 15912)
+
+Property changes on: ../trunk-jpl/externalpackages/inishell
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,3 ##
++install
++src
++*.tgz
Index: /issm/oecreview/Archive/15392-16133/ISSM-15912-15913.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15912-15913.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15912-15913.diff	(revision 16134)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15912)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15913)
+@@ -1,5 +1,5 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @AMPIINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @GSLINCL@ @BOOSTINCL@ @ANDROID_NDKINCL@
+-AUTOMAKE_OPTIONS = subdir-objects
++AM_CPPFLAGS = @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @AMPIINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @GSLINCL@ @BOOSTINCL@ @ANDROID_NDKINCL@ @METEOIOINCL@ @SNOWPACKINCL@
++A UTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(ISSMEXT)
+ 
+@@ -950,7 +950,7 @@
+ libISSM_la_LIBADD = libISSMCore.la libISSMOverload.la
+ 
+ libISSMCore_la_SOURCES  = $(issm_sources)
+-libISSMCore_la_LIBADD = $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB)   $(ADOLCLIB) $(AMPILIB)
++libISSMCore_la_LIBADD = $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB)   $(ADOLCLIB) $(AMPILIB) $(METEOIOLIB) $(SNOWPACKLIB) 
+ libISSMCore_la_FFLAGS = $(AM_FFLAGS)
+ endif
+ 
+@@ -998,7 +998,7 @@
+ LDADD = ./libISSMCore.a ./libISSMOverload.a
+ 
+ #External packages
+-LDADD += $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB)  $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(AMPILIB) $(ADOLCLIB)
++LDADD += $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB)  $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(AMPILIB) $(ADOLCLIB) $(METEOIOLIB) $(SNOWPACKLIB)
+ 
+ if FORTRAN
+ LDADD += $(FLIBS)
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 15912)
++++ ../trunk-jpl/etc/environment.sh	(revision 15913)
+@@ -282,3 +282,6 @@
+ 
+ #AUX-CONFIG
+ pathappend   "$ISSM_DIR/aux-config"
++
++#INISHELL
++pathappend   "$ISSM_DIR/externalpackages/inishell/install"
Index: /issm/oecreview/Archive/15392-16133/ISSM-15913-15914.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15913-15914.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15913-15914.diff	(revision 16134)
@@ -0,0 +1,372 @@
+Index: ../trunk-jpl/src/m/classes/snowpack.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/snowpack.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/snowpack.m	(revision 15914)
+@@ -0,0 +1,367 @@
++%SNOWPACK class definition
++%
++%   Usage:
++%      snowpack=snowpack();
++
++classdef snowpack
++	properties (SetAccess=public) 
++
++		%first, the configuration fields, by category: 
++		%snowpack:  %{{{
++		snowpack_meas_tss = 0;
++		snowpack_enforce_measured_snow_heights = 0;
++		snowpack_sw_mode = 0;
++		snowpack_incoming_longwave = 0;
++		snowpack_height_of_wind_value = 0;
++		snowpack_height_of_meteo_values = 0;
++		snowpack_neutral = 0;
++		snowpack_roughness_length = 0;
++		snowpack_number_slopes = 0;
++		snowpack_snow_redistribution = 0;
++		snowpack_calculation_step_length = 0;
++		snowpack_change_bc = 0;
++		snowpack_thresh_change_bc = 0;
++		snowpack_snp_soil = 0;
++		snowpack_soil_flux = 0;
++		snowpack_geo_heat = 0;
++		snowpack_canopy = 0;
++		%}}}
++		%snowpackadvanced:  %{{{
++		snowpackadvanced_variant = ''; % use 320 kg m-3 for fixed density
++		snowpackadvanced_hn_density = '';
++		%}}}
++		%general:  %{{{
++		general_pluginpath = '';
++		general_buff_chunk_size = 0;
++		general_buff_before = 0;
++		%}}}
++		%input {{{
++		input_coordsys = '';
++		input_coordparam = '';
++		input_time_zone = 0;
++		input_meteo = '';
++		input_meteopath = '';
++		input_station1 = '';
++		input_snowfile1 = '';
++		%}}}
++		%output {{{
++		output_coordsys = '';
++		output_coordparam = '';
++		output_time_zone = 0;
++		output_meteopath = '';
++		output_experiment = '';
++		output_ts_write = 0;
++		output_ts_start = 0;
++		output_ts_days_between = 0;
++		output_profile = '';
++		output_prof_write = 0;
++		output_prof_start = 0;
++		output_prof_days_between = 0;
++		%}}}
++		%interpolations1d %{{{
++		interpolations1d_window_size = 0; %that is 5 d and 2 h; 1 d = 86400
++		interpolations1d_hnw_resample = '';
++		interpolations1d_hs_resample = '';
++		interpolations1d_tsg_resample = '';
++		interpolations1d_rho_hn_resample = '';
++		interpolations1d_vw_resample = '';
++		interpolations1d_vw_args = '';
++		%}}}
++		%filters {{{
++		filters_ta_filter1 = '';
++		filters_ta_arg1 = NaN;
++		filters_rh_filter1 = '';
++		filters_rh_arg1 = NaN;
++		filters_rh_filter2 = '';
++		filters_rh_arg2 = NaN;
++		filters_iswr_filter1 = '';
++		filters_iswr_arg1 = NaN;
++		filters_iswr_filter2 = '';
++		filters_iswr_arg2 = NaN;
++		filters_rswr_filter1 = '';
++		filters_rswr_arg1 = NaN;
++		filters_rswr_filter2 = '';
++		filters_rswr_arg2 = NaN;
++
++		%for ta between 190 and 280 k;
++		filters_ilwr_filter1 = '';
++		filters_ilwr_arg1 = NaN;
++		filters_ilwr_filter2 = '';
++		filters_ilwr_arg2 = NaN;
++		filters_tss_filter1 = '';
++		filters_tss_arg1 = NaN;
++		filters_tsg_filter1 = '';
++		filters_tsg_arg1 = NaN;
++		filters_vw_filter1 = '';
++		filters_vw_arg1 = NaN;
++		filters_vw_filter2 = '';
++		filters_vw_arg2 = NaN;
++		%}}}
++
++	end
++	methods
++		function obj = snowpack(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('snowpack');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							obj.(fieldname) = inputstruct.(fieldname);
++						end
++					end
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++	
++		%snowpack:  %{{{
++		obj.snowpack_meas_tss = 1;
++		obj.snowpack_enforce_measured_snow_heights = 0;
++		obj.snowpack_sw_mode = 0;
++		obj.snowpack_incoming_longwave = 1;
++		obj.snowpack_height_of_wind_value = 12.;
++		obj.snowpack_height_of_meteo_values = 12.;
++		obj.snowpack_neutral = 0;
++		obj.snowpack_roughness_length = 0.002;
++		obj.snowpack_number_slopes = 1;
++		obj.snowpack_snow_redistribution = 1;
++		obj.snowpack_calculation_step_length = 15.0;
++		obj.snowpack_change_bc = 0;
++		obj.snowpack_thresh_change_bc = -1.0;
++		obj.snowpack_snp_soil = 0;
++		obj.snowpack_soil_flux = 0;
++		obj.snowpack_geo_heat = 0.06;
++		obj.snowpack_canopy = 0;
++		%}}}
++		%snowpackadvanced:  %{{{
++		obj.snowpackadvanced_variant = 'ANTARCTICA'; % use 320 kg m-3 for fixed density
++		obj.snowpackadvanced_hn_density = 'EVENT';
++		%}}}
++		%general:  %{{{
++		obj.general_pluginpath = '/usr/local/lib/meteoio/plugins/';
++		obj.general_buff_chunk_size = 90;
++		obj.general_buff_before = 1.5;
++		%}}}
++		%input {{{
++		obj.input_coordsys = 'ch1903';
++		obj.input_coordparam = 'null';
++		obj.input_time_zone = 8;
++		obj.input_meteo = 'smet';
++		obj.input_meteopath = './input';
++		obj.input_station1 = 'domec.smet';
++		obj.input_snowfile1 = 'domec.sno';
++		%}}}
++		%output {{{
++		obj.output_coordsys = 'ch1903';
++		obj.output_coordparam = 'null';
++		obj.output_time_zone = 8;
++		obj.output_meteopath = './output';
++		obj.output_experiment = 'smet';
++		obj.output_ts_write = 1;
++		obj.output_ts_start = 0.0;
++		obj.output_ts_days_between = 0.04166667;
++		obj.output_profile = 'ascii';
++		obj.output_prof_write = 1;
++		obj.output_prof_start = 0.0;
++		obj.output_prof_days_between = 0.04166667;
++		%}}}
++		%interpolations1d %{{{
++		obj.interpolations1d_window_size = 439200 %that is 5 d and 2 h; 1 d = 86400
++		obj.interpolations1d_hnw_resample = 'none';
++		obj.interpolations1d_hs_resample = 'linear';
++		obj.interpolations1d_tsg_resample = 'linear';
++		obj.interpolations1d_rho_hn_resample = 'none';
++		obj.interpolations1d_vw_resample = 'nearest_neighbour';
++		obj.interpolations1d_vw_args = 'extrapolate';
++		%}}}
++		%filters {{{
++		obj.filters_ta_filter1 = 'min_max';
++		obj.filters_ta_arg1 = [190 280];
++		obj.filters_rh_filter1 = 'min_max';
++		obj.filters_rh_arg1 = [0.01 1.2];
++		obj.filters_rh_filter2 = 'min_max';
++		obj.filters_rh_arg2 = {'soft' 0.01 1.0};
++		obj.filters_iswr_filter1 = 'min_max';
++		obj.filters_iswr_arg1 = [-10 1500];
++		obj.filters_iswr_filter2 = 'min_max';
++		obj.filters_iswr_arg2 = {'soft' 0 1500};
++		obj.filters_rswr_filter1 = 'min_max';
++		obj.filters_rswr_arg1 = [-10 1500];
++		obj.filters_rswr_filter2 = 'min_max';
++		obj.filters_rswr_arg2 = {'soft' 0 1500};
++
++		%for ta between 190 and 280 k;
++		obj.filters_ilwr_filter1 = 'min_max';
++		obj.filters_ilwr_arg1 = [30 355];
++		obj.filters_ilwr_filter2 = 'min_max';
++		obj.filters_ilwr_arg2 = {'soft' 35 350};
++		obj.filters_tss_filter1 = 'min_max';
++		obj.filters_tss_arg1 = [180 275];
++		obj.filters_tsg_filter1 = 'min_max';
++		obj.filters_tsg_arg1 = [200 275];
++		obj.filters_vw_filter1 = 'min_max';
++		obj.filters_vw_arg1 = [-2 70];
++		obj.filters_vw_filter2 = 'min_max';
++		obj.filters_vw_arg2 = {'soft' 0 50};
++		%}}}
++
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++			%snowpack:  %{{{
++			md=checkfield(md,'snowpack.snowpack_meas_tss','values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_enforce_measured_snow_heights','values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_sw_mode','values',[0 1 2]);
++			md=checkfield(md,'snowpack.snowpack_incoming_longwave','values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_height_of_wind_value,'>=',0);
++			md=checkfield(md,'snowpack.snowpack_height_of_meteo_values','>=',0);
++			md=checkfield(md,'snowpack.snowpack_neutral','values',[-1 0 1]);
++			md=checkfield(md,'snowpack.snowpack_roughness_length','>=',0);
++			md=checkfield(md,'snowpack.snowpack_number_slopes','values',[1 3 5 9]);
++			md=checkfield(md,'snowpack.snowpack_snow_redistribution','values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_calculation_step_length','>',0);
++			md=checkfield(md,'snowpack.snowpack_change_bc','values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_thresh_change_bc','<=',0);
++			md=checkfield(md,'snowpack.snowpack_snp_soil','values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_soil_flux,'values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_geo_heat,'>=',0);
++			md=checkfield(md,'snowpack.snowpack_canopy,'values',[0 1]);
++			%}}}
++			%snowpackadvanced:  %{{{
++			md=checkfield(md,'snowpack.snowpackadvanced_variant = 'ANTARCTICA'; % use 320 kg m-3 for fixed density
++			md=checkfield(md,'snowpack.snowpackadvanced_hn_density = 'EVENT';
++			%}}}
++			%general:  %{{{
++			md=checkfield(md,'snowpack.general_pluginpath = '/usr/local/lib/meteoio/plugins/';
++			md=checkfield(md,'snowpack.general_buff_chunk_size = 90;
++			md=checkfield(md,'snowpack.general_buff_before = 1.5;
++			%}}}
++			%input {{{
++			md=checkfield(md,'snowpack.input_coordsys = 'ch1903';
++			md=checkfield(md,'snowpack.input_coordparam = 'null';
++			md=checkfield(md,'snowpack.input_time_zone = 8;
++			md=checkfield(md,'snowpack.input_meteo = 'smet';
++			md=checkfield(md,'snowpack.input_meteopath = './input';
++			md=checkfield(md,'snowpack.input_station1 = 'domec.smet';
++			md=checkfield(md,'snowpack.input_snowfile1 = 'domec.sno';
++			%}}}
++			%output {{{
++			md=checkfield(md,'snowpack.output_coordsys = 'ch1903';
++			md=checkfield(md,'snowpack.output_coordparam = 'null';
++			md=checkfield(md,'snowpack.output_time_zone = 8;
++			md=checkfield(md,'snowpack.output_meteopath = './output';
++			md=checkfield(md,'snowpack.output_experiment = 'smet';
++			md=checkfield(md,'snowpack.output_ts_write = 1;
++			md=checkfield(md,'snowpack.output_ts_start = 0.0;
++			md=checkfield(md,'snowpack.output_ts_days_between = 0.04166667;
++			md=checkfield(md,'snowpack.output_profile = 'ascii';
++			md=checkfield(md,'snowpack.output_prof_write = 1;
++			md=checkfield(md,'snowpack.output_prof_start = 0.0;
++			md=checkfield(md,'snowpack.output_prof_days_between = 0.04166667;
++			%}}}
++			%interpolations1d %{{{
++			md=checkfield(md,'snowpack.interpolations1d_window_size = 439200 %that is 5 d and 2 h; 1 d = 86400
++			md=checkfield(md,'snowpack.interpolations1d_hnw_resample = 'none';
++			md=checkfield(md,'snowpack.interpolations1d_hs_resample = 'linear';
++			md=checkfield(md,'snowpack.interpolations1d_tsg_resample = 'linear';
++			md=checkfield(md,'snowpack.interpolations1d_rho_hn_resample = 'none';
++			md=checkfield(md,'snowpack.interpolations1d_vw_resample = 'nearest_neighbour';
++			md=checkfield(md,'snowpack.interpolations1d_vw_args = 'extrapolate';
++			%}}}
++			%filters {{{
++			md=checkfield(md,'snowpack.filters_ta_filter1 = 'min_max';
++			md=checkfield(md,'snowpack.filters_ta_arg1 = [190 280];
++			md=checkfield(md,'snowpack.filters_rh_filter1 = 'min_max';
++			md=checkfield(md,'snowpack.filters_rh_arg1 = [0.01 1.2];
++			md=checkfield(md,'snowpack.filters_rh_filter2 = 'min_max';
++			md=checkfield(md,'snowpack.filters_rh_arg2 = {'soft' 0.01 1.0};
++			md=checkfield(md,'snowpack.filters_iswr_filter1 = 'min_max';
++			md=checkfield(md,'snowpack.filters_iswr_arg1 = [-10 1500];
++			md=checkfield(md,'snowpack.filters_iswr_filter2 = 'min_max';
++			md=checkfield(md,'snowpack.filters_iswr_arg2 = {'soft' 0 1500};
++			md=checkfield(md,'snowpack.filters_rswr_filter1 = 'min_max';
++			md=checkfield(md,'snowpack.filters_rswr_arg1 = [-10 1500];
++			md=checkfield(md,'snowpack.filters_rswr_filter2 = 'min_max';
++			md=checkfield(md,'snowpack.filters_rswr_arg2 = {'soft' 0 1500};
++
++			%for ta between 190 and 280 k;
++			md=checkfield(md,'snowpack.filters_ilwr_filter1 = 'min_max';
++			md=checkfield(md,'snowpack.filters_ilwr_arg1 = [30 355];
++			md=checkfield(md,'snowpack.filters_ilwr_filter2 = 'min_max';
++			md=checkfield(md,'snowpack.filters_ilwr_arg2 = {'soft' 35 350};
++			md=checkfield(md,'snowpack.filters_tss_filter1 = 'min_max';
++			md=checkfield(md,'snowpack.filters_tss_arg1 = [180 275];
++			md=checkfield(md,'snowpack.filters_tsg_filter1 = 'min_max';
++			md=checkfield(md,'snowpack.filters_tsg_arg1 = [200 275];
++			md=checkfield(md,'snowpack.filters_vw_filter1 = 'min_max';
++			md=checkfield(md,'snowpack.filters_vw_arg1 = [-2 70];
++			md=checkfield(md,'snowpack.filters_vw_filter2 = 'min_max';
++			md=checkfield(md,'snowpack.filters_vw_arg2 = {'soft' 0 50};
++			%}}}
++
++		end % }}}
++		function disp(obj) % {{{
++
++			disp(sprintf('   StressBalance solution parameters:'));
++
++			disp(sprintf('\n      %s','Convergence criteria:'));
++			fielddisplay(obj,'restol','mechanical equilibrium residual convergence criterion');
++			fielddisplay(obj,'reltol','velocity relative convergence criterion, NaN: not applied');
++			fielddisplay(obj,'abstol','velocity absolute convergence criterion, NaN: not applied');
++			fielddisplay(obj,'isnewton','0: Picard''s fixed point, 1: Newton''s method, 2: hybrid');
++			fielddisplay(obj,'maxiter','maximum number of nonlinear iterations');
++			fielddisplay(obj,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
++
++			disp(sprintf('\n      %s','boundary conditions:'));
++			fielddisplay(obj,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');
++			fielddisplay(obj,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]');
++			fielddisplay(obj,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]');
++
++			disp(sprintf('\n      %s','Rift options:'));
++			fielddisplay(obj,'rift_penalty_threshold','threshold for instability of mechanical constraints');
++			fielddisplay(obj,'rift_penalty_lock','number of iterations before rift penalties are locked');
++
++			disp(sprintf('\n      %s','Penalty options:'));
++			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
++			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
++
++			disp(sprintf('\n      %s','Other:'));
++			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for FS model');
++			fielddisplay(obj,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');
++			fielddisplay(obj,'referential','local referential');
++			fielddisplay(obj,'loadingforce','loading force applied on each point [N/m^3]');
++			fielddisplay(obj,'requested_outputs','additional outputs requested');
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++
++			yts=365.0*24.0*3600.0;
++
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','restol','format','Double');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','reltol','format','Double');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','abstol','format','Double');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','isnewton','format','Integer');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','FSreconditioning','format','Double');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','viscosity_overshoot','format','Double');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','maxiter','format','Integer');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','shelf_dampening','format','Integer');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','penalty_factor','format','Double');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','rift_penalty_lock','format','Integer');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','rift_penalty_threshold','format','Integer');
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','referential','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','requested_outputs','format','DoubleMat','mattype',3);
++			WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
++			WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
++			WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
++		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15914-15915.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15914-15915.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15914-15915.diff	(revision 16134)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 15914)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 15915)
+@@ -1,5 +1,5 @@
+ AM_CPPFLAGS = @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @AMPIINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @GSLINCL@ @BOOSTINCL@ @ANDROID_NDKINCL@ @METEOIOINCL@ @SNOWPACKINCL@
+-A UTOMAKE_OPTIONS = subdir-objects
++AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(ISSMEXT)
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15915-15916.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15915-15916.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15915-15916.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/Makefile.am
+===================================================================
+--- ../trunk-jpl/Makefile.am	(revision 15915)
++++ ../trunk-jpl/Makefile.am	(revision 15916)
+@@ -1,6 +1,6 @@
+ EXTRA_DIST = reconf scripts test m4 examples cron etc doc packages contributors.txt 
+ SUBDIRS = src
+-bin_SCRIPTS=config.h startup.m README.rtf
++bin_SCRIPTS=startup.m README.rtf
+ 
+ ACLOCAL_AMFLAGS = -I m4
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15916-15917.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15916-15917.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15916-15917.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/plot/showregion.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/showregion.m	(revision 15916)
++++ ../trunk-jpl/src/m/plot/showregion.m	(revision 15917)
+@@ -15,9 +15,9 @@
+ axis equal off
+ %box off
+ if strcmpi(md.mesh.hemisphere,'n') | strcmpi(md.mesh.hemisphere,'north'),
+-	A=expread([issmdir() 'projects/Exp/Greenland.exp']);
++	A=expread(['/u/astrid-r1b/ModelData/Exp/Greenland.exp']);
+ elseif strcmpi(md.mesh.hemisphere,'s') | strcmpi(md.mesh.hemisphere,'south'),
+-	A=expread([issmdir() '/projects/Exp/Antarctica.exp']);
++	A=expread(['/u/astrid-r1b/ModelData/Exp/Antarctica.exp']);
+ else
+ 	error('applyoptions error message: hemisphere not defined');
+ end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15917-15918.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15917-15918.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15917-15918.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 15917)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 15918)
+@@ -349,7 +349,7 @@
+             case {'nond_sampling'}
+                 param_write(fid,sbeg,'seed','             = ','\n',dm.params);
+                 param_write(fid,sbeg,'fixed_seed','','\n',dm.params);
+-                dver=textscan(IssmConfig('_DAKOTA_VERSION_')[0],'%[0123456789].%[0123456789].%[0123456789]');
++                dver=textscan(IssmConfig('_DAKOTA_VERSION_'),'%[0123456789].%[0123456789].%[0123456789]');
+                 if ((str2num(dver{1}{1})==4 && str2num(dver{2}{1})>2) || str2num(dver{1}{1})>4)
+                     param_write(fid,sbeg,'rng','                ','\n',dm.params);
+                 end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15918-15919.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15918-15919.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15918-15919.diff	(revision 16134)
@@ -0,0 +1,315 @@
+Index: ../trunk-jpl/src/m/classes/snowpack.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/snowpack.m	(revision 15918)
++++ ../trunk-jpl/src/m/classes/snowpack.m	(revision 15919)
+@@ -172,7 +172,7 @@
+ 		obj.output_prof_days_between = 0.04166667;
+ 		%}}}
+ 		%interpolations1d %{{{
+-		obj.interpolations1d_window_size = 439200 %that is 5 d and 2 h; 1 d = 86400
++		obj.interpolations1d_window_size = 439200; %that is 5 d and 2 h; 1 d = 86400
+ 		obj.interpolations1d_hnw_resample = 'none';
+ 		obj.interpolations1d_hs_resample = 'linear';
+ 		obj.interpolations1d_tsg_resample = 'linear';
+@@ -218,7 +218,7 @@
+ 			md=checkfield(md,'snowpack.snowpack_enforce_measured_snow_heights','values',[0 1]);
+ 			md=checkfield(md,'snowpack.snowpack_sw_mode','values',[0 1 2]);
+ 			md=checkfield(md,'snowpack.snowpack_incoming_longwave','values',[0 1]);
+-			md=checkfield(md,'snowpack.snowpack_height_of_wind_value,'>=',0);
++			md=checkfield(md,'snowpack.snowpack_height_of_wind_value','>=',0);
+ 			md=checkfield(md,'snowpack.snowpack_height_of_meteo_values','>=',0);
+ 			md=checkfield(md,'snowpack.snowpack_neutral','values',[-1 0 1]);
+ 			md=checkfield(md,'snowpack.snowpack_roughness_length','>=',0);
+@@ -228,115 +228,203 @@
+ 			md=checkfield(md,'snowpack.snowpack_change_bc','values',[0 1]);
+ 			md=checkfield(md,'snowpack.snowpack_thresh_change_bc','<=',0);
+ 			md=checkfield(md,'snowpack.snowpack_snp_soil','values',[0 1]);
+-			md=checkfield(md,'snowpack.snowpack_soil_flux,'values',[0 1]);
+-			md=checkfield(md,'snowpack.snowpack_geo_heat,'>=',0);
+-			md=checkfield(md,'snowpack.snowpack_canopy,'values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_soil_flux','values',[0 1]);
++			md=checkfield(md,'snowpack.snowpack_geo_heat','>=',0);
++			md=checkfield(md,'snowpack.snowpack_canopy','values',[0 1]);
+ 			%}}}
+ 			%snowpackadvanced:  %{{{
+-			md=checkfield(md,'snowpack.snowpackadvanced_variant = 'ANTARCTICA'; % use 320 kg m-3 for fixed density
+-			md=checkfield(md,'snowpack.snowpackadvanced_hn_density = 'EVENT';
++			md=checkfield(md,'snowpack.snowpackadvanced_variant','values',{'JAPAN','DEFAULT','ANTARCTICA'});
++			md=checkfield(md,'snowpack.snowpackadvanced_hn_density','values',{'PARAMETERIZED','EVENT','MEASURED'});
+ 			%}}}
+ 			%general:  %{{{
+-			md=checkfield(md,'snowpack.general_pluginpath = '/usr/local/lib/meteoio/plugins/';
+-			md=checkfield(md,'snowpack.general_buff_chunk_size = 90;
+-			md=checkfield(md,'snowpack.general_buff_before = 1.5;
++			md=checkfield(md,'snowpack.general_buff_chunk_size','>',0);
++			md=checkfield(md,'snowpack.general_buff_before','>',0);
+ 			%}}}
+ 			%input {{{
+-			md=checkfield(md,'snowpack.input_coordsys = 'ch1903';
+-			md=checkfield(md,'snowpack.input_coordparam = 'null';
+-			md=checkfield(md,'snowpack.input_time_zone = 8;
+-			md=checkfield(md,'snowpack.input_meteo = 'smet';
+-			md=checkfield(md,'snowpack.input_meteopath = './input';
+-			md=checkfield(md,'snowpack.input_station1 = 'domec.smet';
+-			md=checkfield(md,'snowpack.input_snowfile1 = 'domec.sno';
++			md=checkfield(md,'snowpack.input_coordsys','values',{'CH1903','UTM','UPS','PROJ4','LOCAL'});
++			md=checkfield(md,'snowpack.input_coordparam','values','null');
++			md=checkfield(md,'snowpack.input_time_zone','>',-12,'<',12);
++			md=checkfield(md,'snowpack.input_meteo','values',{'BORMA','COSMO','GEOTOP','GRIB','GSN','IMIS','SMET','SNOWPACK'});
++			md=checkfield(md,'snowpack.input_meteopath','empty',1);
++			md=checkfield(md,'snowpack.input_station1 ','empty',1);
++			md=checkfield(md,'snowpack.input_snowfile1','empty',1);
+ 			%}}}
+ 			%output {{{
+-			md=checkfield(md,'snowpack.output_coordsys = 'ch1903';
+-			md=checkfield(md,'snowpack.output_coordparam = 'null';
+-			md=checkfield(md,'snowpack.output_time_zone = 8;
+-			md=checkfield(md,'snowpack.output_meteopath = './output';
+-			md=checkfield(md,'snowpack.output_experiment = 'smet';
+-			md=checkfield(md,'snowpack.output_ts_write = 1;
+-			md=checkfield(md,'snowpack.output_ts_start = 0.0;
+-			md=checkfield(md,'snowpack.output_ts_days_between = 0.04166667;
+-			md=checkfield(md,'snowpack.output_profile = 'ascii';
+-			md=checkfield(md,'snowpack.output_prof_write = 1;
+-			md=checkfield(md,'snowpack.output_prof_start = 0.0;
+-			md=checkfield(md,'snowpack.output_prof_days_between = 0.04166667;
++			md=checkfield(md,'snowpack.output_coordsys','values',{'CH1903','UTM','UPS','PROJ4','LOCAL'});
++			md=checkfield(md,'snowpack.output_coordparam','values','null');
++			md=checkfield(md,'snowpack.output_time_zone','>',-12,'<',12);
++			md=checkfield(md,'snowpack.output_meteopath','empty',1);
++			md=checkfield(md,'snowpack.output_experiment','empty',1);
++			md=checkfield(md,'snowpack.output_ts_write','values',[0 1]);
++			md=checkfield(md,'snowpack.output_ts_start','>=',0);
++			md=checkfield(md,'snowpack.output_ts_days_between','>=',0);
++			md=checkfield(md,'snowpack.output_profile','values',{'ASCII','IMIS','ASCII IMIS'});
++			md=checkfield(md,'snowpack.output_prof_write','values',[0 1]);
++			md=checkfield(md,'snowpack.output_prof_start','>=',0);
++			md=checkfield(md,'snowpack.output_prof_days_between','>=',0);
+ 			%}}}
+ 			%interpolations1d %{{{
+-			md=checkfield(md,'snowpack.interpolations1d_window_size = 439200 %that is 5 d and 2 h; 1 d = 86400
+-			md=checkfield(md,'snowpack.interpolations1d_hnw_resample = 'none';
+-			md=checkfield(md,'snowpack.interpolations1d_hs_resample = 'linear';
+-			md=checkfield(md,'snowpack.interpolations1d_tsg_resample = 'linear';
+-			md=checkfield(md,'snowpack.interpolations1d_rho_hn_resample = 'none';
+-			md=checkfield(md,'snowpack.interpolations1d_vw_resample = 'nearest_neighbour';
+-			md=checkfield(md,'snowpack.interpolations1d_vw_args = 'extrapolate';
++			md=checkfield(md,'snowpack.interpolations1d_window_size','>',0);
++			md=checkfield(md,'snowpack.interpolations1d_hnw_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
++			md=checkfield(md,'snowpack.interpolations1d_hs_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
++			md=checkfield(md,'snowpack.interpolations1d_tsg_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
++			md=checkfield(md,'snowpack.interpolations1d_rho_hn_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
++			md=checkfield(md,'snowpack.interpolations1d_vw_resample','values',{'NONE','NEAREST_NEIGHBOUR','ACCUMULATE','LINEAR'});
++			md=checkfield(md,'snowpack.interpolations1d_vw_args','values',{'EXTRAPOLATE'});
+ 			%}}}
+ 			%filters {{{
+-			md=checkfield(md,'snowpack.filters_ta_filter1 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_ta_arg1 = [190 280];
+-			md=checkfield(md,'snowpack.filters_rh_filter1 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_rh_arg1 = [0.01 1.2];
+-			md=checkfield(md,'snowpack.filters_rh_filter2 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_rh_arg2 = {'soft' 0.01 1.0};
+-			md=checkfield(md,'snowpack.filters_iswr_filter1 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_iswr_arg1 = [-10 1500];
+-			md=checkfield(md,'snowpack.filters_iswr_filter2 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_iswr_arg2 = {'soft' 0 1500};
+-			md=checkfield(md,'snowpack.filters_rswr_filter1 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_rswr_arg1 = [-10 1500];
+-			md=checkfield(md,'snowpack.filters_rswr_filter2 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_rswr_arg2 = {'soft' 0 1500};
++			filter_values={'MIN_MAX','RATE_FILTER1','RATE_FILTER2','UNHEATED_RAIN_GAUGE_FILTER','WMO_UNDERCATCH_FILTER','WMO_UNDERCATCH_FILTER-SIMPLIFIED','UNVENTILLATED_TEMPERATURE_SENSOR','ADD_AN_OFFSET'};
++			md=checkfield(md,'snowpack.filters_ta_filter1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_ta_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ta_filter1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_ta_arg1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_ta_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ta_arg1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_rh_filter1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_rh_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rh_filter1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_rh_arg1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_rh_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rh_arg1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_rh_filter2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_rh_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rh_filter2','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_rh_arg2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_rh_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rh_arg2','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_iswr_filter1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_iswr_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_iswr_filter1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_iswr_arg1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_iswr_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_iswr_arg1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_iswr_filter2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_iswr_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_iswr_filter2','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_iswr_arg2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_iswr_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_iswr_arg2','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_rswr_filter1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_rswr_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rswr_filter1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_rswr_arg1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_rswr_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rswr_arg1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_rswr_filter2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_rswr_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rswr_filter2','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_rswr_arg2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_rswr_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_rswr_arg2','size',[1 NaN]); end
+ 
+ 			%for ta between 190 and 280 k;
+-			md=checkfield(md,'snowpack.filters_ilwr_filter1 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_ilwr_arg1 = [30 355];
+-			md=checkfield(md,'snowpack.filters_ilwr_filter2 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_ilwr_arg2 = {'soft' 35 350};
+-			md=checkfield(md,'snowpack.filters_tss_filter1 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_tss_arg1 = [180 275];
+-			md=checkfield(md,'snowpack.filters_tsg_filter1 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_tsg_arg1 = [200 275];
+-			md=checkfield(md,'snowpack.filters_vw_filter1 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_vw_arg1 = [-2 70];
+-			md=checkfield(md,'snowpack.filters_vw_filter2 = 'min_max';
+-			md=checkfield(md,'snowpack.filters_vw_arg2 = {'soft' 0 50};
++			md=checkfield(md,'snowpack.filters_ilwr_filter1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_ilwr_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ilwr_filter1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_ilwr_arg1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_ilwr_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ilwr_arg1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_ilwr_filter2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_ilwr_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ilwr_filter2','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_ilwr_arg2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_ilwr_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ilwr_arg2','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_tss_filter1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_tss_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_tss_filter1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_tss_arg1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_tss_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_tss_arg1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_tsg_filter1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_tsg_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_tsg_filter1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_tsg_arg1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_tsg_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_tsg_arg1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_vw_filter1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_vw_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_vw_filter1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_vw_arg1','values',{filter_values});
++			if strcmpi(md.snowpack.filters_vw_arg1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_vw_arg1','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_vw_filter2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_vw_filter2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_vw_filter2','size',[1 NaN]); end
++			md=checkfield(md,'snowpack.filters_vw_arg2','values',{filter_values});
++			if strcmpi(md.snowpack.filters_vw_arg2,'MIN_MAX'), md=checkfield(md,'snowpack.filters_vw_arg2','size',[1 NaN]); end
++
+ 			%}}}
+-
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 
+-			disp(sprintf('   StressBalance solution parameters:'));
++			disp(sprintf('   Snowpack solution parameters:'));
++			disp(sprintf('\n	%s','Snowpack parameters:')); % {{{
++			fielddisplay(obj,'snowpack_meas_tss',' ');
++			fielddisplay(obj,'snowpack_enforce_measured_snow_heights',' ');
++			fielddisplay(obj,'snowpack_sw_mode',' ');
++			fielddisplay(obj,'snowpack_incoming_longwave',' ');
++			fielddisplay(obj,'snowpack_height_of_wind_value',' ');
++			fielddisplay(obj,'snowpack_height_of_meteo_values',' ');
++			fielddisplay(obj,'snowpack_neutral',' ');
++			fielddisplay(obj,'snowpack_roughness_length',' ');
++			fielddisplay(obj,'snowpack_number_slopes',' ');
++			fielddisplay(obj,'snowpack_snow_redistribution',' ');
++			fielddisplay(obj,'snowpack_calculation_step_length',' ');
++			fielddisplay(obj,'snowpack_change_bc',' ');
++			fielddisplay(obj,'snowpack_thresh_change_bc',' ');
++			fielddisplay(obj,'snowpack_snp_soil',' ');
++			fielddisplay(obj,'snowpack_soil_flux',' ');
++			fielddisplay(obj,'snowpack_geo_heat',' ');
++			fielddisplay(obj,'snowpack_canopy',' ');
++			% }}}
++			disp(sprintf('\n	%s','Snowpackadvanced parameters:')); % {{{
++			fielddisplay(obj,'snowpackadvanced_variant',''); % use 320 kg m-3 for fixed density
++			fielddisplay(obj,'snowpackadvanced_hn_density','');
++			% }}}
++			disp(sprintf('\n	%s','General parameters:')); % {{{
++			fielddisplay(obj,'general_pluginpath','');
++			fielddisplay(obj,'general_buff_chunk_size',' ');
++			fielddisplay(obj,'general_buff_before',' ');
++			% }}}
++			disp(sprintf('\n	%s','Input  parameter:')); % {{{
++			fielddisplay(obj,'input_coordsys','');
++			fielddisplay(obj,'input_coordparam',' ');
++			fielddisplay(obj,'input_time_zone',' ');
++			fielddisplay(obj,'input_meteo',' ');
++			fielddisplay(obj,'input_meteopath',' ');
++			fielddisplay(obj,'input_station1',' ');
++			fielddisplay(obj,'input_snowfile1',' ');
++			% }}}
++			disp(sprintf('\n	%s','Output parameters:')); % {{{
++			fielddisplay(obj,'output_coordsys',' ');
++			fielddisplay(obj,'output_coordparam',' ');
++			fielddisplay(obj,'output_time_zone',' ');
++			fielddisplay(obj,'output_meteopath',' ');
++			fielddisplay(obj,'output_experiment',' ');
++			fielddisplay(obj,'output_ts_write',' ');
++			fielddisplay(obj,'output_ts_start',' ');
++			fielddisplay(obj,'output_ts_days_between',' ');
++			fielddisplay(obj,'output_profile',' ');
++			fielddisplay(obj,'output_prof_write',' ');
++			fielddisplay(obj,'output_prof_start',' ');
++			fielddisplay(obj,'output_prof_days_between',' ');
++			% }}}
++			disp(sprintf('\n	%s','Interpolations1d parameters:')); % {{{
++			fielddisplay(obj,'interpolations1d_window_size',' '); %that is 5 d and 2 h; 1 d = 86400
++			fielddisplay(obj,'interpolations1d_hnw_resample',' ');
++			fielddisplay(obj,'interpolations1d_hs_resample',' ');
++			fielddisplay(obj,'interpolations1d_tsg_resample',' ');
++			fielddisplay(obj,'interpolations1d_rho_hn_resample',' ');
++			fielddisplay(obj,'interpolations1d_vw_resample',' ');
++			fielddisplay(obj,'interpolations1d_vw_args',' ');
++			% }}}
++			disp(sprintf('\n	%s','Filters parameters:')); % {{{
++			fielddisplay(obj,'filters_ta_filter1',' ');
++			fielddisplay(obj,'filters_ta_arg1','');
++			fielddisplay(obj,'filters_rh_filter1',' ');
++			fielddisplay(obj,'filters_rh_arg1','');
++			fielddisplay(obj,'filters_rh_filter2',' ');
++			fielddisplay(obj,'filters_rh_arg2','');
++			fielddisplay(obj,'filters_iswr_filter1',' ');
++			fielddisplay(obj,'filters_iswr_arg1','');
++			fielddisplay(obj,'filters_iswr_filter2',' ');
++			fielddisplay(obj,'filters_iswr_arg2','');
++			fielddisplay(obj,'filters_rswr_filter1',' ');
++			fielddisplay(obj,'filters_rswr_arg1','');
++			fielddisplay(obj,'filters_rswr_filter2',' ');
++			fielddisplay(obj,'filters_rswr_arg2','');
+ 
+-			disp(sprintf('\n      %s','Convergence criteria:'));
+-			fielddisplay(obj,'restol','mechanical equilibrium residual convergence criterion');
+-			fielddisplay(obj,'reltol','velocity relative convergence criterion, NaN: not applied');
+-			fielddisplay(obj,'abstol','velocity absolute convergence criterion, NaN: not applied');
+-			fielddisplay(obj,'isnewton','0: Picard''s fixed point, 1: Newton''s method, 2: hybrid');
+-			fielddisplay(obj,'maxiter','maximum number of nonlinear iterations');
+-			fielddisplay(obj,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');
++			%for ta between 190 and 280 k;
++			fielddisplay(obj,'filters_ilwr_filter1',' ');
++			fielddisplay(obj,'filters_ilwr_arg1','');
++			fielddisplay(obj,'filters_ilwr_filter2',' ');
++			fielddisplay(obj,'filters_ilwr_arg2','');
++			fielddisplay(obj,'filters_tss_filter1',' ');
++			fielddisplay(obj,'filters_tss_arg1','');
++			fielddisplay(obj,'filters_tsg_filter1',' ');
++			fielddisplay(obj,'filters_tsg_arg1','');
++			fielddisplay(obj,'filters_vw_filter1',' ');
++			fielddisplay(obj,'filters_vw_arg1','');
++			fielddisplay(obj,'filters_vw_filter2',' ');
++			fielddisplay(obj,'filters_vw_arg2','');
++			% }}}
+ 
+-			disp(sprintf('\n      %s','boundary conditions:'));
+-			fielddisplay(obj,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');
+-			fielddisplay(obj,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]');
+-			fielddisplay(obj,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]');
+-
+-			disp(sprintf('\n      %s','Rift options:'));
+-			fielddisplay(obj,'rift_penalty_threshold','threshold for instability of mechanical constraints');
+-			fielddisplay(obj,'rift_penalty_lock','number of iterations before rift penalties are locked');
+-
+-			disp(sprintf('\n      %s','Penalty options:'));
+-			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
+-			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
+-
+-			disp(sprintf('\n      %s','Other:'));
+-			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for FS model');
+-			fielddisplay(obj,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');
+-			fielddisplay(obj,'referential','local referential');
+-			fielddisplay(obj,'loadingforce','loading force applied on each point [N/m^3]');
+-			fielddisplay(obj,'requested_outputs','additional outputs requested');
+-
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15919-15920.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15919-15920.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15919-15920.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test410.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.m	(revision 15919)
++++ ../trunk-jpl/test/NightlyRun/test410.m	(revision 15920)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-09,1e-09,1e-09,2e-10,1e-13,1e-10,1e-06};
++field_tolerances={1e-09,1e-09,1e-08,2e-10,1e-13,1e-10,1e-06};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test410.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.py	(revision 15919)
++++ ../trunk-jpl/test/NightlyRun/test410.py	(revision 15920)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13,1e-10,1e-06]
++field_tolerances=[1e-09,1e-09,1e-08,1e-09,1e-13,1e-10,1e-06]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15920-15921.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15920-15921.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15920-15921.diff	(revision 16134)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/externalpackages/ipython/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/ipython/install.sh	(revision 15920)
++++ ../trunk-jpl/externalpackages/ipython/install.sh	(revision 15921)
+@@ -3,18 +3,18 @@
+ 
+ #Some cleanup
+ rm -rf src
+-rm -rf ipython-0.13
++rm -rf ipython-1.0.0
+ mkdir src 
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ipython-0.13.tar.gz' 'ipython-0.13.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ipython-1.0.0.tar.gz' 'ipython-1.0.0.tar.gz'
+ 
+ #Untar 
+-tar -zxvf  ipython-0.13.tar.gz
++tar -zxvf  ipython-1.0.0.tar.gz
+ 
+ #Move ipython into src directory
+-mv ipython-0.13/* src
+-rm -rf ipython-0.13
++mv ipython-1.0.0/* src
++rm -rf ipython-1.0.0
+ 
+ #install  ipython
+ cd src
Index: /issm/oecreview/Archive/15392-16133/ISSM-15921-15922.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15921-15922.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15921-15922.diff	(revision 16134)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/test/NightlyRun/test290.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test290.m	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test290.m	(revision 15922)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'FS','all');
+-md.flowequation.fe_FS=4;
++md.flowequation.fe_FS='TaylorHood';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test285.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.m	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test285.m	(revision 15922)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO=1;
++md.flowequation.fe_HO='P1xP2';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test285.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.py	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test285.py	(revision 15922)
+@@ -13,7 +13,7 @@
+ md=parameterize(md,'../Par/SquareShelf.py');
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO=1;
++md.flowequation.fe_HO='P1xP2';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test280.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.py	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test280.py	(revision 15922)
+@@ -12,7 +12,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md=setflowequation(md,'SSA','all')
+-md.flowequation.fe_SSA=1
++md.flowequation.fe_SSA='P2'
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test286.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test286.m	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test286.m	(revision 15922)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO=2;
++md.flowequation.fe_HO='P2xP1';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test286.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test286.py	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test286.py	(revision 15922)
+@@ -13,7 +13,7 @@
+ md=parameterize(md,'../Par/SquareShelf.py');
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO=2;
++md.flowequation.fe_HO='P2xP1';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test287.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.m	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test287.m	(revision 15922)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO=3;
++md.flowequation.fe_HO='P2';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test290.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test290.py	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test290.py	(revision 15922)
+@@ -13,7 +13,7 @@
+ md=parameterize(md,'../Par/SquareShelf.py');
+ md.extrude(3,2.)
+ md=setflowequation(md,'FS','all');
+-md.flowequation.fe_FS=4;
++md.flowequation.fe_FS='TaylorHood';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test280.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.m	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test280.m	(revision 15922)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+-md.flowequation.fe_SSA=1;
++md.flowequation.fe_SSA='P2';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test287.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.py	(revision 15921)
++++ ../trunk-jpl/test/NightlyRun/test287.py	(revision 15922)
+@@ -13,7 +13,7 @@
+ md=parameterize(md,'../Par/SquareShelf.py');
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO=3;
++md.flowequation.fe_HO='P2';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15922-15923.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15922-15923.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15922-15923.diff	(revision 16134)
@@ -0,0 +1,182 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 15922)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 15923)
+@@ -12,7 +12,7 @@
+ 
+ 	/*Intermediary*/
+ 	int        i,j;
+-	int        count,temp,finiteelement;
++	int        count,finiteelement;
+ 	IssmDouble g;
+ 	IssmDouble rho_ice;
+ 	IssmDouble FSreconditioning;
+@@ -70,43 +70,11 @@
+ 	if(!iscoupling){
+ 
+ 		/*Get finite element type*/
+-		if(isSSA){
+-			iomodel->Constant(&temp,FlowequationFeSSAEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P2Enum;                break; 
+-				case 2 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 3 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isL1L2){
+-			finiteelement = P1Enum;
+-		}
+-		else if(isHO){
+-			iomodel->Constant(&temp,FlowequationFeHOEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P1xP2Enum;             break; 
+-				case 2 : finiteelement = P2xP1Enum;             break; 
+-				case 3 : finiteelement = P2Enum;                break; 
+-				case 4 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 5 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isFS){
+-			finiteelement = P1Enum;
+-			iomodel->Constant(&temp,FlowequationFeFSEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;       break;//P1P1
+-				case 1 : finiteelement = P1Enum;       break;//P1P1GSL
+-				case 2 : finiteelement = P1bubbleEnum; break;//MINIcondensed
+-				case 3 : finiteelement = P1bubbleEnum; break;//MINI
+-				case 4 : finiteelement = P2Enum;       break;//TaylorHood (P2P1)
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
++		if(isSSA)       iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
++		else if(isL1L2) finiteelement = P1Enum;
++		else if(isHO)   iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
++		else if(isFS)   iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
++
+ 		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
+ 		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 15922)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 15923)
+@@ -12,7 +12,7 @@
+ 
+ 	/*Intermediary*/
+ 	bool isSSA,isL1L2,isHO,isFS,iscoupling;
+-	int  temp,finiteelement=-1,approximation=-1;
++	int  finiteelement=-1,approximation=-1;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+@@ -35,14 +35,7 @@
+ 		/*Get finite element type*/
+ 		if(isSSA){
+ 			approximation=SSAApproximationEnum;
+-			iomodel->Constant(&temp,FlowequationFeSSAEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P2Enum;                break; 
+-				case 2 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 3 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
++			iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
+ 		}
+ 		else if(isL1L2){
+ 			approximation = L1L2ApproximationEnum;
+@@ -50,28 +43,11 @@
+ 		}
+ 		else if(isHO){
+ 			approximation = HOApproximationEnum;
+-			iomodel->Constant(&temp,FlowequationFeHOEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P1xP2Enum;             break; 
+-				case 2 : finiteelement = P2xP1Enum;             break; 
+-				case 3 : finiteelement = P2Enum;                break; 
+-				case 4 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 5 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
++			iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
+ 		}
+ 		else if(isFS){
+ 			approximation = FSApproximationEnum;
+-			iomodel->Constant(&temp,FlowequationFeFSEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1P1Enum;          break;
+-				case 1 : finiteelement = P1P1GLSEnum;       break;
+-				case 2 : finiteelement = MINIcondensedEnum; break;
+-				case 3 : finiteelement = MINIEnum;          break;
+-				case 4 : finiteelement = TaylorHoodEnum;    break;
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
++			iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
+ 		}
+ 		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15922)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15923)
+@@ -15,7 +15,7 @@
+ 
+ void	UpdateElementsStressbalance(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    materials_type,finiteelement,temp;
++	int    materials_type,finiteelement;
+ 	int    approximation;
+ 	int*   finiteelement_list=NULL;
+ 	bool   isSSA,isL1L2,isHO,isFS,iscoupling;
+@@ -47,42 +47,10 @@
+ 
+ 	/*Get finite element type*/
+ 	if(!iscoupling){
+-		if(isSSA){
+-			iomodel->Constant(&temp,FlowequationFeSSAEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P2Enum;                break; 
+-				case 2 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 3 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isL1L2){
+-			finiteelement = P1Enum;
+-		}
+-		else if(isHO){
+-			iomodel->Constant(&temp,FlowequationFeHOEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1Enum;                break; 
+-				case 1 : finiteelement = P1xP2Enum;             break; 
+-				case 2 : finiteelement = P2xP1Enum;             break; 
+-				case 3 : finiteelement = P2Enum;                break; 
+-				case 4 : finiteelement = P1bubblecondensedEnum; break; 
+-				case 5 : finiteelement = P1bubbleEnum;          break; 
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
+-		else if(isFS){
+-			iomodel->Constant(&temp,FlowequationFeFSEnum);
+-			switch(temp){
+-				case 0 : finiteelement = P1P1Enum;          break;
+-				case 1 : finiteelement = P1P1GLSEnum;       break;
+-				case 2 : finiteelement = MINIcondensedEnum; break;
+-				case 3 : finiteelement = MINIEnum;          break;
+-				case 4 : finiteelement = TaylorHoodEnum;    break;
+-				default: _error_("finite element "<<temp<<" not supported");
+-			}
+-		}
++		if(isSSA)       iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
++		else if(isL1L2) finiteelement = P1Enum;
++		else if(isHO)   iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
++		else if(isFS)   iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
+ 		for(int i=0;i<iomodel->numberofelements;i++){
+ 			finiteelement_list[i]=finiteelement;
+ 		}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15923-15924.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15923-15924.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15923-15924.diff	(revision 16134)
@@ -0,0 +1,169 @@
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15923)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15924)
+@@ -20,9 +20,9 @@
+ 		self.isL1L2           = 0
+ 		self.isHO             = 0
+ 		self.isFS             = 0
+-		self.fe_SSA           = 0
+-		self.fe_HO            = 0
+-		self.fe_FS            = 0
++		self.fe_SSA           = ''
++		self.fe_HO            = ''
++		self.fe_FS            = ''
+ 		self.vertex_equation  = float('NaN')
+ 		self.element_equation = float('NaN')
+ 		self.borderSSA        = float('NaN')
+@@ -41,9 +41,9 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'isL1L2',"are L1L2 equations used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isHO',"is the Higher-Order (HO) approximation used ?"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isFS',"are the Full-FS (FS) equations used ?"))
+-		string="%s\n%s"%(string,fielddisplay(self,'fe_SSA',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
+-		string="%s\n%s"%(string,fielddisplay(self,'fe_HO' ,"Finite Element for HO   0: P1xP1, 1: P1xP2, 2: P2xP1, 3: P2xP2"))
+-		string="%s\n%s"%(string,fielddisplay(self,'fe_FS' ,"Finite Element for FS   0: P1P1 (debugging), 1: P1P1GSL (under dev), 2: MINI condensed, 3: MINI, 4: P2P1 (Taylor-Hood)"))
++		string="%s\n%s"%(string,fielddisplay(self,'fe_SSA',"Finite Element for SSA: 'P1', 'P1bubble' 'P1bubblecondensed' 'P2'"))
++		string="%s\n%s"%(string,fielddisplay(self,'fe_HO' ,"Finite Element for HO:  'P1' 'P1bubble' 'P1bubblecondensed' 'P1xP2' 'P2xP1' 'P2'"))
++		string="%s\n%s"%(string,fielddisplay(self,'fe_FS' ,"Finite Element for FS:  'P1P1' (debugging only) 'P1P1GLS' 'MINIcondensed' 'MINI' 'TaylorHood'"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vertex_equation',"flow equation for each vertex"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'element_equation',"flow equation for each element"))
+ 		string="%s\n%s"%(string,fielddisplay(self,'borderSSA',"vertices on SSA's border (for tiling)"))
+@@ -53,9 +53,15 @@
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+ 
+-		#MINI element for FS by default
+-		self.fe_FS=2
++		#P1 for SSA
++		self.fe_SSA= 'P1';
+ 
++		#P1 for HO
++		self.fe_HO= 'P1';
++
++		#MINI condensed element for FS by default
++		self.fe_FS = 'MINIcondensed';
++
+ 		return self
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -66,9 +72,9 @@
+ 			md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0,1])
+-			md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0,1])
+-			md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',numpy.arange(0,3+1))
+-			md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',numpy.arange(0,4+1))
++			md = checkfield(md,'flowequation.fe_SSA','values',['P1','P1bubble','P1bubblecondensed','P2'])
++			md = checkfield(md,'flowequation.fe_HO' ,'values',['P1','P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2'])
++			md = checkfield(md,'flowequation.fe_FS' ,'values',['P1P1','P1P1GLS','MINIcondensed','MINI','TaylorHood'])
+ 			md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1])
+@@ -94,9 +100,9 @@
+ 		WriteData(fid,'object',self,'fieldname','isL1L2','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isHO','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isFS','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','fe_SSA','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','fe_HO','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','fe_FS','format','Integer')
++		WriteData(fid,'enum',FlowequationFeSSAEnum(),'data',StringToEnum(self.fe_SSA)[0],'format','Integer')
++		WriteData(fid,'enum',FlowequationFeHOEnum() ,'data',StringToEnum(self.fe_HO)[0] ,'format','Integer')
++		WriteData(fid,'enum',FlowequationFeFSEnum() ,'data',StringToEnum(self.fe_FS)[0] ,'format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1)
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15923)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15924)
+@@ -10,9 +10,9 @@
+ 		isL1L2           = 0;
+ 		isHO             = 0;
+ 		isFS             = 0;
+-		fe_SSA           = 0;
+-		fe_HO            = 0;
+-		fe_FS            = 0;
++		fe_SSA           = '';
++		fe_HO            = '';
++		fe_FS            = '';
+ 		vertex_equation  = NaN;
+ 		element_equation = NaN;
+ 		borderSSA        = NaN;
+@@ -44,15 +44,13 @@
+ 				obj = structtoobj(flowequation(),objstruct);
+ 
+ 				%2013 July 23rd
+-				if isfield(objstruct,'isSIA'),          obj.isSIA     = objstruct.isSIA;         end;
+-				if isfield(objstruct,'isSSA'),          obj.isSSA     = objstruct.isSSA;         end;
+-				if isfield(objstruct,'isL1L2'),         obj.isL1L2    = objstruct.isL1L2;        end;
+-				if isfield(objstruct,'isHO'),           obj.isHO      = objstruct.isHO;          end;
+-				if isfield(objstruct,'isFS'),           obj.isFS      = objstruct.isFS;          end;
+-				if isfield(objstruct,'fe_FS'),      obj.fe_FS     = objstruct.fe_FS;     end;
+-				if isfield(objstruct,'borderSSA'), obj.borderSSA = objstruct.borderSSA;end;
+-				if isfield(objstruct,'borderHO'),   obj.borderHO  = objstruct.borderHO;  end;
+-				if isfield(objstruct,'borderFS'),   obj.borderFS  = objstruct.borderFS;  end;
++				if isfield(objstruct,'ishutter'),      obj.isSIA     = objstruct.ishutter;       end; 
++				if isfield(objstruct,'ismacayeal'),    obj.isSSA     = objstruct.ismacayeal;     end; 
++				if isfield(objstruct,'ispattyn'),      obj.isHO      = objstruct.ispattyn;       end; 
++				if isfield(objstruct,'isstokes'),      obj.isFS      = objstruct.isstokes;       end; 
++				if isfield(objstruct,'bordermacayeal'),obj.borderSSA = objstruct.bordermacayeal; end; 
++				if isfield(objstruct,'borderpattyn'),  obj.borderHO  = objstruct.borderpattyn;   end; 
++				if isfield(objstruct,'borderstokes'),  obj.borderFS  = objstruct.borderstokes;   end; 
+ 			end
+ 
+ 		end% }}}
+@@ -68,8 +66,14 @@
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
++			%P1 for SSA
++			obj.fe_SSA= 'P1';
++
++			%P1 for HO
++			obj.fe_HO= 'P1';
++
+ 			%MINI condensed element for FS by default
+-			obj.fe_FS = 2;
++			obj.fe_FS = 'MINIcondensed';
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -80,9 +84,9 @@
+ 				md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0:3]);
+-				md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0:5]);
+-				md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0:4]);
++				md = checkfield(md,'flowequation.fe_SSA','values',{'P1','P1bubble','P1bubblecondensed','P2'});
++				md = checkfield(md,'flowequation.fe_HO' ,'values',{'P1','P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2'});
++				md = checkfield(md,'flowequation.fe_FS' ,'values',{'P1P1','P1P1GLS','MINIcondensed','MINI','TaylorHood'});
+ 				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+@@ -114,9 +118,9 @@
+ 			fielddisplay(obj,'isL1L2','is the L1L2 approximation used ?');
+ 			fielddisplay(obj,'isHO','is the Higher-Order (HO) approximation used ?');
+ 			fielddisplay(obj,'isFS','are the Full-FS (FS) equations used ?');
+-			fielddisplay(obj,'fe_SSA','Finite Element for SSA  0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic), 2: P1+ condensed, 3: P1+');
+-			fielddisplay(obj,'fe_HO', 'Finite Element for HO   0: P1xP1, 1: P1xP2, 2: P2xP1, 3: P2xP2, 4: P1+ condensed, 5: P1+');
+-			fielddisplay(obj,'fe_FS', 'Finite Element for FS   0: P1P1 (debugging), 1: P1P1GSL (under dev), 2: MINI condensed, 3: MINI, 4: P2P1 (Taylor-Hood)');
++			fielddisplay(obj,'fe_SSA','Finite Element for SSA  ''P1'', ''P1bubble'' ''P1bubblecondensed'' ''P2''');
++			fielddisplay(obj,'fe_HO', 'Finite Element for HO   ''P1'' ''P1bubble'' ''P1bubblecondensed'' ''P1xP2'' ''P2xP1'' ''P2''');
++			fielddisplay(obj,'fe_FS', 'Finite Element for FS   ''P1P1'' (debugging only) ''P1P1GLS'' ''MINIcondensed'' ''MINI'' ''TaylorHood''');
+ 			fielddisplay(obj,'vertex_equation','flow equation for each vertex');
+ 			fielddisplay(obj,'element_equation','flow equation for each element');
+ 			fielddisplay(obj,'borderSSA','vertices on SSA''s border (for tiling)');
+@@ -130,9 +134,9 @@
+ 			WriteData(fid,'object',obj,'fieldname','isL1L2','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isHO','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isFS','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','fe_SSA','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','fe_HO','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','fe_FS','format','Integer');
++			WriteData(fid,'enum',FlowequationFeSSAEnum(),'data',StringToEnum(obj.fe_SSA),'format','Integer');
++			WriteData(fid,'enum',FlowequationFeHOEnum() ,'data',StringToEnum(obj.fe_HO) ,'format','Integer');
++			WriteData(fid,'enum',FlowequationFeFSEnum() ,'data',StringToEnum(obj.fe_FS) ,'format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','borderSSA','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','borderHO','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','borderFS','format','DoubleMat','mattype',1);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15924-15925.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15924-15925.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15924-15925.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 15924)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 15925)
+@@ -73,7 +73,17 @@
+ 		if(isSSA)       iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
+ 		else if(isL1L2) finiteelement = P1Enum;
+ 		else if(isHO)   iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
+-		else if(isFS)   iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
++		else if(isFS){  iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
++			/*Deduce velocity interpolation from finite element*/
++			switch(finiteelement){
++				case P1P1Enum          : finiteelement = P1Enum;       break;
++				case P1P1GLSEnum       : finiteelement = P1Enum;       break;
++				case MINIcondensedEnum : finiteelement = P1bubbleEnum; break;
++				case MINIEnum          : finiteelement = P1bubbleEnum; break;
++				case TaylorHoodEnum    : finiteelement = P2Enum;       break;
++				default: _error_("finite element "<<finiteelement<<" not supported");
++			}
++		}
+ 
+ 		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
+ 		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15925-15926.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15925-15926.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15925-15926.diff	(revision 16134)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/test/NightlyRun/test280.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.py	(revision 15925)
++++ ../trunk-jpl/test/NightlyRun/test280.py	(revision 15926)
+@@ -12,16 +12,19 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md=setflowequation(md,'SSA','all')
+-md.flowequation.fe_SSA='P2'
+ md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,StressbalanceSolutionEnum())
+ 
+-#Fields and tolerances to track changes
+-field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[1e-12,1e-13,1e-13,1e-13]
+-field_values=[\
+-	md.results.StressbalanceSolution.Vx,\
+-	md.results.StressbalanceSolution.Vy,\
+-	md.results.StressbalanceSolution.Vel,\
+-	md.results.StressbalanceSolution.Pressure,\
+-	]
++field_names=[]
++field_tolerances=[]
++field_values=[]
++for i in ['P1bubble','P1bubblecondensed','P2']:
++	md.flowequation.fe_SSA=i
++	md=solve(md,StressbalanceSolutionEnum())
++	field_names     =field_names+['Vx'+i,'Vy'+i,'Vel'+i,'Pressure'+i]
++	field_tolerances=field_tolerances+[1e-12,1e-13,1e-13,1e-13]
++	field_values=field_values+[\
++		md.results.StressbalanceSolution.Vx,\
++		md.results.StressbalanceSolution.Vy,\
++		md.results.StressbalanceSolution.Vel,\
++		md.results.StressbalanceSolution.Pressure,\
++		]
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15925)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15926)
+@@ -67,7 +67,7 @@
+ 	case 270, name='SquareShelfStressSSA2dDamage';
+ 	case 272, name='SquareShelfCMZSSA2dDamage';
+ 	case 274, name='SquareShelfStressSSA2dDamageRift';
+-	case 280, name='SquareShelfStressSSA2dP2';
++	case 280, name='SquareShelfStressSSA2dHigherOrder';
+ 	case 285, name='SquareShelfStressHOP1xP2';
+ 	case 286, name='SquareShelfStressHOP2xP1';
+ 	case 287, name='SquareShelfStressHOP2xP2';
+Index: ../trunk-jpl/test/NightlyRun/test280.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.m	(revision 15925)
++++ ../trunk-jpl/test/NightlyRun/test280.m	(revision 15926)
+@@ -2,16 +2,21 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+-md.flowequation.fe_SSA='P2';
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,StressbalanceSolutionEnum());
+ 
+-%Fields and tolerances to track changes
+-field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-12,1e-13,1e-13,1e-13};
+-field_values={...
+-	(md.results.StressbalanceSolution.Vx),...
+-	(md.results.StressbalanceSolution.Vy),...
+-	(md.results.StressbalanceSolution.Vel),...
+-	(md.results.StressbalanceSolution.Pressure),...
+-	};
++field_names={};
++field_tolerances={};
++field_values={};
++for i={'P1bubble','P1bubblecondensed','P2'}
++	md.flowequation.fe_SSA=i{1};
++	md=solve(md,StressbalanceSolutionEnum());
++	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vel' i{1}],['Pressure' i{1}]};
++	field_tolerances={field_tolerances{:},1e-12,1e-13,1e-13,1e-13};
++	field_values={field_values{:},...
++		(md.results.StressbalanceSolution.Vx),...
++		(md.results.StressbalanceSolution.Vy),...
++		(md.results.StressbalanceSolution.Vel),...
++		(md.results.StressbalanceSolution.Pressure),...
++		};
++end
++
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15925)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15926)
+@@ -71,7 +71,7 @@
+ 	270  : 'SquareShelfStressSSA2dDamage',
+ 	272  : 'SquareShelfCMZSSA2dDamage',
+ 	274  : 'SquareShelfStressSSA2dDamageRift',
+-	280  : 'SquareShelfStressSSA2dP2',
++	280  : 'SquareShelfStressSSA2dHigherOrder',
+ 	285  : 'SquareShelfStressHOP1xP2',
+ 	286  : 'SquareShelfStressHOP2xP1',
+ 	287  : 'SquareShelfStressHOP2xP2',
Index: /issm/oecreview/Archive/15392-16133/ISSM-15926-15927.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15926-15927.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15926-15927.diff	(revision 16134)
@@ -0,0 +1,229 @@
+Index: ../trunk-jpl/test/NightlyRun/test286.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test286.m	(revision 15926)
++++ ../trunk-jpl/test/NightlyRun/test286.m	(revision 15927)
+@@ -1,19 +0,0 @@
+-md=triangle(model(),'../Exp/Square.exp',150000.);
+-md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,2.);
+-md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO='P2xP1';
+-md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,StressbalanceSolutionEnum());
+-
+-%Fields and tolerances to track changes
+-field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-9,1e-9,1e-9,1e-9,1e-13};
+-field_values={...
+-	(md.results.StressbalanceSolution.Vx),...
+-	(md.results.StressbalanceSolution.Vy),...
+-	(md.results.StressbalanceSolution.Vz),...
+-	(md.results.StressbalanceSolution.Vel),...
+-	(md.results.StressbalanceSolution.Pressure),...
+-	};
+Index: ../trunk-jpl/test/NightlyRun/test286.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test286.py	(revision 15926)
++++ ../trunk-jpl/test/NightlyRun/test286.py	(revision 15927)
+@@ -1,29 +0,0 @@
+-from model import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from EnumDefinitions import *
+-from solve import *
+-from MatlabFuncs import *
+-from ContourToMesh import *
+-
+-md=triangle(model(),'../Exp/Square.exp',150000.);
+-md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.py');
+-md.extrude(3,2.)
+-md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO='P2xP1';
+-md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,StressbalanceSolutionEnum());
+-
+-#Fields and tolerances to track changes
+-field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+-field_tolerances=[1e-9,1e-9,1e-9,1e-9,1e-13];
+-field_values=[\
+-	md.results.StressbalanceSolution.Vx,\
+-	md.results.StressbalanceSolution.Vy,\
+-	md.results.StressbalanceSolution.Vz,\
+-	md.results.StressbalanceSolution.Vel,\
+-	md.results.StressbalanceSolution.Pressure,\
+-	];
+Index: ../trunk-jpl/test/NightlyRun/test287.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.m	(revision 15926)
++++ ../trunk-jpl/test/NightlyRun/test287.m	(revision 15927)
+@@ -1,19 +0,0 @@
+-md=triangle(model(),'../Exp/Square.exp',150000.);
+-md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,2.);
+-md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO='P2';
+-md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,StressbalanceSolutionEnum());
+-
+-%Fields and tolerances to track changes
+-field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-13};
+-field_values={...
+-	(md.results.StressbalanceSolution.Vx),...
+-	(md.results.StressbalanceSolution.Vy),...
+-	(md.results.StressbalanceSolution.Vz),...
+-	(md.results.StressbalanceSolution.Vel),...
+-	(md.results.StressbalanceSolution.Pressure),...
+-	};
+Index: ../trunk-jpl/test/NightlyRun/test287.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test287.py	(revision 15926)
++++ ../trunk-jpl/test/NightlyRun/test287.py	(revision 15927)
+@@ -1,29 +0,0 @@
+-from model import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from EnumDefinitions import *
+-from solve import *
+-from MatlabFuncs import *
+-from ContourToMesh import *
+-
+-md=triangle(model(),'../Exp/Square.exp',150000.);
+-md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelf.py');
+-md.extrude(3,2.)
+-md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO='P2';
+-md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,StressbalanceSolutionEnum());
+-
+-#Fields and tolerances to track changes
+-field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+-field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-13];
+-field_values=[\
+-	md.results.StressbalanceSolution.Vx,\
+-	md.results.StressbalanceSolution.Vy,\
+-	md.results.StressbalanceSolution.Vz,\
+-	md.results.StressbalanceSolution.Vel,\
+-	md.results.StressbalanceSolution.Pressure,\
+-	];
+Index: ../trunk-jpl/test/NightlyRun/test285.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.m	(revision 15926)
++++ ../trunk-jpl/test/NightlyRun/test285.m	(revision 15927)
+@@ -5,15 +5,20 @@
+ md=setflowequation(md,'HO','all');
+ md.flowequation.fe_HO='P1xP2';
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,StressbalanceSolutionEnum());
+ 
+-%Fields and tolerances to track changes
+-field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-13};
+-field_values={...
++field_names={};
++field_tolerances={};
++field_values={};
++for i={'P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2'}
++	md.flowequation.fe_HO=i{1};
++	md=solve(md,StressbalanceSolutionEnum());
++	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}]};
++	field_tolerances={field_tolerances{:},1e-08,1e-08,1e-08,1e-08,1e-13};
++	field_values={field_values{:},...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+ 	(md.results.StressbalanceSolution.Vz),...
+ 	(md.results.StressbalanceSolution.Vel),...
+ 	(md.results.StressbalanceSolution.Pressure),...
+ 	};
++end
+Index: ../trunk-jpl/test/NightlyRun/test285.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.py	(revision 15926)
++++ ../trunk-jpl/test/NightlyRun/test285.py	(revision 15927)
+@@ -13,17 +13,20 @@
+ md=parameterize(md,'../Par/SquareShelf.py');
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO='P1xP2';
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,StressbalanceSolutionEnum());
+ 
+-#Fields and tolerances to track changes
+-field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+-field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-13];
+-field_values=[\
+-	md.results.StressbalanceSolution.Vx,\
+-	md.results.StressbalanceSolution.Vy,\
+-	md.results.StressbalanceSolution.Vz,\
+-	md.results.StressbalanceSolution.Vel,\
+-	md.results.StressbalanceSolution.Pressure,\
+-	];
++field_names=[]
++field_tolerances=[]
++field_values=[]
++for i in ['P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2']:
++	md.flowequation.fe_HO=i
++	md=solve(md,StressbalanceSolutionEnum())
++	field_names     =field_names+['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i]
++	field_tolerances=field_tolerances+[1e-08,1e-08,1e-08,1e-08,1e-13]
++	field_values=field_values+[\
++		md.results.StressbalanceSolution.Vx,\
++		md.results.StressbalanceSolution.Vy,\
++		md.results.StressbalanceSolution.Vz,\
++		md.results.StressbalanceSolution.Vel,\
++		md.results.StressbalanceSolution.Pressure,\
++		]
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15926)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15927)
+@@ -68,9 +68,7 @@
+ 	case 272, name='SquareShelfCMZSSA2dDamage';
+ 	case 274, name='SquareShelfStressSSA2dDamageRift';
+ 	case 280, name='SquareShelfStressSSA2dHigherOrder';
+-	case 285, name='SquareShelfStressHOP1xP2';
+-	case 286, name='SquareShelfStressHOP2xP1';
+-	case 287, name='SquareShelfStressHOP2xP2';
++	case 285, name='SquareShelfStressHOHigherOrder';
+ 	case 290, name='SquareShelfStressFSP2P1';
+ 	case 301, name='SquareSheetConstrainedStressSSA2d';
+ 	case 302, name='SquareSheetConstrainedStressSIA2d';
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15926)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15927)
+@@ -72,9 +72,7 @@
+ 	272  : 'SquareShelfCMZSSA2dDamage',
+ 	274  : 'SquareShelfStressSSA2dDamageRift',
+ 	280  : 'SquareShelfStressSSA2dHigherOrder',
+-	285  : 'SquareShelfStressHOP1xP2',
+-	286  : 'SquareShelfStressHOP2xP1',
+-	287  : 'SquareShelfStressHOP2xP2',
++	285  : 'SquareShelfStressHOHigherOrder',
+ 	290  : 'SquareShelfStressFSP2P1',
+ 	301  : 'SquareSheetConstrainedStressSSA2d',
+ 	302  : 'SquareSheetConstrainedStressSIA2d',
+Index: ../trunk-jpl/test/Archives/Archive286.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive287.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive285.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive280.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15927-15928.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15927-15928.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15927-15928.diff	(revision 16134)
@@ -0,0 +1,203 @@
+Index: ../trunk-jpl/test/NightlyRun/test455.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test455.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test455.py	(revision 15928)
+@@ -0,0 +1,32 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1.)
++md=setflowequation(md,'HO','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++field_names=[]
++field_tolerances=[]
++field_values=[]
++for i in ['P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2']:
++	md.flowequation.fe_HO=i
++	md=solve(md,StressbalanceSolutionEnum())
++	field_names     =field_names+['Vx'+i,'Vy'+i,'Vz'+i,'Vel'+i,'Pressure'+i]
++	field_tolerances=field_tolerances+[1e-08,1e-08,1e-08,1e-08,1e-13]
++	field_values=field_values+[\
++			md.results.StressbalanceSolution.Vx,\
++			md.results.StressbalanceSolution.Vy,\
++			md.results.StressbalanceSolution.Vz,\
++			md.results.StressbalanceSolution.Vel,\
++			md.results.StressbalanceSolution.Pressure,\
++			]
+Index: ../trunk-jpl/test/NightlyRun/test455.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test455.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test455.m	(revision 15928)
+@@ -0,0 +1,23 @@
++md=triangle(model(),'../Exp/Square.exp',180000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md=extrude(md,5,1.);
++md=setflowequation(md,'HO','all');
++md.cluster=generic('name',oshostname(),'np',3);
++
++field_names={};
++field_tolerances={};
++field_values={};
++for i={'P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2'}
++	md.flowequation.fe_HO=i{1};
++	md=solve(md,StressbalanceSolutionEnum());
++	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vz' i{1}],['Vel' i{1}],['Pressure' i{1}]};
++	field_tolerances={field_tolerances{:},1e-08,1e-08,1e-08,1e-08,1e-13};
++	field_values={field_values{:},...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	};
++end
+Index: ../trunk-jpl/test/NightlyRun/test450.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test450.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test450.py	(revision 15928)
+@@ -0,0 +1,30 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++field_names=[]
++field_tolerances=[]
++field_values=[]
++for i in ['P1bubble','P1bubblecondensed','P2']:
++	md.flowequation.fe_SSA=i
++	md=solve(md,StressbalanceSolutionEnum())
++	field_names     =field_names+['Vx'+i,'Vy'+i,'Vel'+i,'Pressure'+i]
++	field_tolerances=field_tolerances+[1e-12,1e-13,1e-13,1e-13]
++	field_values=field_values+[\
++		md.results.StressbalanceSolution.Vx,\
++		md.results.StressbalanceSolution.Vy,\
++		md.results.StressbalanceSolution.Vel,\
++		md.results.StressbalanceSolution.Pressure,\
++		]
+Index: ../trunk-jpl/test/NightlyRun/test285.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test285.m	(revision 15927)
++++ ../trunk-jpl/test/NightlyRun/test285.m	(revision 15928)
+@@ -3,7 +3,6 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+-md.flowequation.fe_HO='P1xP2';
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ field_names={};
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15927)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 15928)
+@@ -135,6 +135,8 @@
+ 	case 432, name='SquareSheetShelfSteaEnthalpyHO';
+ 	case 433, name='RoundSheetShelfGLMigrationSSA3d';
+ 	case 434, name='SquareSheetShelfL1L2';
++	case 450, name='SquareSheetShelfStressSSAHigherOrder';
++	case 455, name='SquareSheetShelfStressHOHigherOrder';
+ 	case 501, name='PigStressSSA2d';
+ 	case 502, name='PigStressHO';
+ 	case 503, name='PigStressFS';
+Index: ../trunk-jpl/test/NightlyRun/test450.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test450.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test450.m	(revision 15928)
+@@ -0,0 +1,21 @@
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'../Exp/SquareShelf.exp','');
++md=parameterize(md,'../Par/SquareSheetShelf.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++
++field_names={};
++field_tolerances={};
++field_values={};
++for i={'P1bubble','P1bubblecondensed','P2'}
++	md.flowequation.fe_SSA=i{1};
++	md=solve(md,StressbalanceSolutionEnum());
++	field_names     ={field_names{:},['Vx' i{1}],['Vy' i{1}],['Vel' i{1}],['Pressure' i{1}]};
++	field_tolerances={field_tolerances{:},1e-12,1e-13,1e-13,1e-13};
++	field_values={field_values{:},...
++		(md.results.StressbalanceSolution.Vx),...
++		(md.results.StressbalanceSolution.Vy),...
++		(md.results.StressbalanceSolution.Vel),...
++		(md.results.StressbalanceSolution.Pressure),...
++		};
++end
+Index: ../trunk-jpl/test/NightlyRun/test280.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test280.m	(revision 15927)
++++ ../trunk-jpl/test/NightlyRun/test280.m	(revision 15928)
+@@ -19,4 +19,3 @@
+ 		(md.results.StressbalanceSolution.Pressure),...
+ 		};
+ end
+-
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15927)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 15928)
+@@ -139,6 +139,8 @@
+ 	432  : 'SquareSheetShelfSteaEnthalpyHO',
+ 	433  : 'RoundSheetShelfGLMigrationSSA3d',
+ 	434  : 'SquareSheetShelfL1L2',
++	450  : 'SquareSheetShelfStressSSAHigherOrder',
++	455  : 'SquareSheetShelfStressHOHigherOrder',
+ 	501  : 'PigStressSSA2d',
+ 	502  : 'PigStressHO',
+ 	503  : 'PigStressFS',
+Index: ../trunk-jpl/test/Archives/Archive455.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive455.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive455.nc	(revision 15927)
++++ ../trunk-jpl/test/Archives/Archive455.nc	(revision 15928)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive455.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive450.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive450.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive450.nc	(revision 15927)
++++ ../trunk-jpl/test/Archives/Archive450.nc	(revision 15928)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive450.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-15928-15929.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15928-15929.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15928-15929.diff	(revision 16134)
@@ -0,0 +1,1709 @@
+Index: ../trunk-jpl/src/c/analyses
+===================================================================
+--- ../trunk-jpl/src/c/analyses	(revision 15928)
++++ ../trunk-jpl/src/c/analyses	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/analyses
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/kml
+===================================================================
+--- ../trunk-jpl/src/c/kml	(revision 15928)
++++ ../trunk-jpl/src/c/kml	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/kml
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/main
+===================================================================
+--- ../trunk-jpl/src/c/main	(revision 15928)
++++ ../trunk-jpl/src/c/main	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/main
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/bamg
+===================================================================
+--- ../trunk-jpl/src/c/bamg	(revision 15928)
++++ ../trunk-jpl/src/c/bamg	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/bamg
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/LatLong
+===================================================================
+--- ../trunk-jpl/src/c/shared/LatLong	(revision 15928)
++++ ../trunk-jpl/src/c/shared/LatLong	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/LatLong
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Exceptions
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Exceptions	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Exceptions
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Enum
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Enum	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Enum
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Matrix
+===================================================================
+--- ../trunk-jpl/src/c/shared/Matrix	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Matrix	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Matrix
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Numerics
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Numerics	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Numerics
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Sorting
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Sorting	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Sorting
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Bamg
+===================================================================
+--- ../trunk-jpl/src/c/shared/Bamg	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Bamg	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Bamg
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/String
+===================================================================
+--- ../trunk-jpl/src/c/shared/String	(revision 15928)
++++ ../trunk-jpl/src/c/shared/String	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/String
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/io/Disk
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Disk	(revision 15928)
++++ ../trunk-jpl/src/c/shared/io/Disk	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/io/Disk
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/io/Comm
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Comm	(revision 15928)
++++ ../trunk-jpl/src/c/shared/io/Comm	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/io/Comm
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/io/Print
+===================================================================
+--- ../trunk-jpl/src/c/shared/io/Print	(revision 15928)
++++ ../trunk-jpl/src/c/shared/io/Print	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/io/Print
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Threads
+===================================================================
+--- ../trunk-jpl/src/c/shared/Threads	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Threads	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Threads
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/TriMesh
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh	(revision 15928)
++++ ../trunk-jpl/src/c/shared/TriMesh	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/TriMesh
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Elements
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Elements	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Elements
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/shared/Exp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp	(revision 15928)
++++ ../trunk-jpl/src/c/shared/Exp	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/shared/Exp
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InterpFromMesh2dx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Shp2Expx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Expx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Shp2Expx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Shp2Expx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ControlInputSetGradientx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputSetGradientx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ControlInputSetGradientx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ControlInputSetGradientx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/EdgeDetectionx
+===================================================================
+--- ../trunk-jpl/src/c/modules/EdgeDetectionx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/EdgeDetectionx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/EdgeDetectionx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/AverageOntoPartitionx
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageOntoPartitionx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/AverageOntoPartitionx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/AverageOntoPartitionx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtofx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtofx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtofx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Reducevectorgtofx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/GroundinglineMigrationx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ParseToolkitsOptionsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SmbGradientsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmbGradientsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SmbGradientsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SmbGradientsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/BamgConvertMeshx
+===================================================================
+--- ../trunk-jpl/src/c/modules/BamgConvertMeshx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/BamgConvertMeshx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/BamgConvertMeshx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputDuplicatex
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputDuplicatex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputDuplicatex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputDuplicatex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/GetSolutionFromInputsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetSolutionFromInputsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/GetSolutionFromInputsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/GetSolutionFromInputsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/GiaDeflectionCorex
+===================================================================
+--- ../trunk-jpl/src/c/modules/GiaDeflectionCorex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/GiaDeflectionCorex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/GiaDeflectionCorex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputScalex
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputScalex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputScalex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputScalex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Reduceloadx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reduceloadx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Reduceloadx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Reduceloadx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ComputeStrainRatex
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeStrainRatex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ComputeStrainRatex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ComputeStrainRatex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromDakotax	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromDakotax	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ResetConstraintsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/PositiveDegreeDayx
+===================================================================
+--- ../trunk-jpl/src/c/modules/PositiveDegreeDayx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/PositiveDegreeDayx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/PositiveDegreeDayx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Chacox
+===================================================================
+--- ../trunk-jpl/src/c/modules/Chacox	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Chacox	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Chacox
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SpcNodesx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SpcNodesx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SpcNodesx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SpcNodesx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/AverageFilterx
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageFilterx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/AverageFilterx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/AverageFilterx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SurfaceAreax
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Exp2Kmlx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Exp2Kmlx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Exp2Kmlx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Exp2Kmlx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Kml2Expx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Kml2Expx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Kml2Expx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Kml2Expx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/OutputResultsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/OutputResultsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/OutputResultsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx
+===================================================================
+--- ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Scotchx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Scotchx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Scotchx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Scotchx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ComputeBasalStressx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeBasalStressx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ComputeBasalStressx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ComputeBasalStressx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/HoleFillerx
+===================================================================
+--- ../trunk-jpl/src/c/modules/HoleFillerx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/HoleFillerx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/HoleFillerx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ContourToNodesx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToNodesx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ContourToNodesx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ContourToNodesx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/KMLOverlayx
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLOverlayx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/KMLOverlayx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/KMLOverlayx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtosx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtosx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtosx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Reducevectorgtosx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ElementConnectivityx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementConnectivityx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ElementConnectivityx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ElementConnectivityx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/GetVectorFromInputsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ThicknessAlongGradientx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAlongGradientx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ThicknessAlongGradientx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ThicknessAlongGradientx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Krigingx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Krigingx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Krigingx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/NodalValuex
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/NodalValuex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/NodalValuex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ConfigureObjectsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConfigureObjectsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ConfigureObjectsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ConfigureObjectsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Transient
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Transient	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Transient	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Transient
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Control
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputToResultx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputToResultx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputToResultx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputToResultx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/NodesDofx
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodesDofx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/NodesDofx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/NodesDofx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputControlUpdatex
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputControlUpdatex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputControlUpdatex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputControlUpdatex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/BamgTriangulatex
+===================================================================
+--- ../trunk-jpl/src/c/modules/BamgTriangulatex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/BamgTriangulatex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/BamgTriangulatex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ConstraintsStatex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Solverx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Solverx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Solverx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromGridToMeshx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InterpFromGridToMeshx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Orthx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Orthx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Orthx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Orthx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/VerticesDofx
+===================================================================
+--- ../trunk-jpl/src/c/modules/VerticesDofx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/VerticesDofx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/VerticesDofx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/KMLFileReadx
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLFileReadx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/KMLFileReadx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/KMLFileReadx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Delta18oParameterizationx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Delta18oParameterizationx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Delta18oParameterizationx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Delta18oParameterizationx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/NodeConnectivityx
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodeConnectivityx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/NodeConnectivityx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/NodeConnectivityx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/TriaSearchx
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriaSearchx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/TriaSearchx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/TriaSearchx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Gradjx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Gradjx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Gradjx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Gradjx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/VecMergex
+===================================================================
+--- ../trunk-jpl/src/c/modules/VecMergex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/VecMergex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/VecMergex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ResetCoordinateSystemx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetCoordinateSystemx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ResetCoordinateSystemx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ResetCoordinateSystemx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Mergesolutionfromftogx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Mergesolutionfromftogx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Mergesolutionfromftogx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Mergesolutionfromftogx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Bamgx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Bamgx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Bamgx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Bamgx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/VertexCoordinatesx
+===================================================================
+--- ../trunk-jpl/src/c/modules/VertexCoordinatesx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/VertexCoordinatesx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/VertexCoordinatesx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/CreateNodalConstraintsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateNodalConstraintsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/CreateNodalConstraintsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/CreateNodalConstraintsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ContourToMeshx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToMeshx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ContourToMeshx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ContourToMeshx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/KMLMeshWritex
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLMeshWritex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/KMLMeshWritex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/KMLMeshWritex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/TriMeshx
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/TriMeshx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/TriMeshx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ControlInputGetGradientx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputGetGradientx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ControlInputGetGradientx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ControlInputGetGradientx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx
+===================================================================
+--- ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/Shp2Kmlx
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Kmlx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/Shp2Kmlx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/Shp2Kmlx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/IoModelToConstraintsx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx
+===================================================================
+--- ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/InputArtificialNoisex
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputArtificialNoisex	(revision 15928)
++++ ../trunk-jpl/src/c/modules/InputArtificialNoisex	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/InputArtificialNoisex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ControlInputScaleGradientx
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputScaleGradientx	(revision 15928)
++++ ../trunk-jpl/src/c/modules/ControlInputScaleGradientx	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/modules/ControlInputScaleGradientx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/solutionsequences
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences	(revision 15928)
++++ ../trunk-jpl/src/c/solutionsequences	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/solutionsequences
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits/metis/patches
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/metis/patches	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits/metis/patches	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits/metis/patches
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits/gsl
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/gsl	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits/gsl	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits/gsl
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits/mpi/commops
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits/mpi
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits/mpi	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits/mpi
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits/mumps
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits/mumps	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits/mumps
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits/issm
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits/issm	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits/issm
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits/petsc/patches
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits/petsc/objects
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/toolkits
+===================================================================
+--- ../trunk-jpl/src/c/toolkits	(revision 15928)
++++ ../trunk-jpl/src/c/toolkits	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/toolkits
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/Materials
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials	(revision 15928)
++++ ../trunk-jpl/src/c/classes/Materials	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/Materials
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/Params
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params	(revision 15928)
++++ ../trunk-jpl/src/c/classes/Params	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/Params
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/kriging
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging	(revision 15928)
++++ ../trunk-jpl/src/c/classes/kriging	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/kriging
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/Options
+===================================================================
+--- ../trunk-jpl/src/c/classes/Options	(revision 15928)
++++ ../trunk-jpl/src/c/classes/Options	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/Options
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/Loads
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads	(revision 15928)
++++ ../trunk-jpl/src/c/classes/Loads	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/Loads
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/matrix
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix	(revision 15928)
++++ ../trunk-jpl/src/c/classes/matrix	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/matrix
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/ExternalResults
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults	(revision 15928)
++++ ../trunk-jpl/src/c/classes/ExternalResults	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/ExternalResults
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/ElementResults
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults	(revision 15928)
++++ ../trunk-jpl/src/c/classes/ElementResults	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/ElementResults
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/Elements
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements	(revision 15928)
++++ ../trunk-jpl/src/c/classes/Elements	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/Elements
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/gauss
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss	(revision 15928)
++++ ../trunk-jpl/src/c/classes/gauss	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/gauss
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/Inputs
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs	(revision 15928)
++++ ../trunk-jpl/src/c/classes/Inputs	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/Inputs
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/Constraints
+===================================================================
+--- ../trunk-jpl/src/c/classes/Constraints	(revision 15928)
++++ ../trunk-jpl/src/c/classes/Constraints	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes/Constraints
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes
+===================================================================
+--- ../trunk-jpl/src/c/classes	(revision 15928)
++++ ../trunk-jpl/src/c/classes	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/classes
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/datastructures
+===================================================================
+--- ../trunk-jpl/src/c/datastructures	(revision 15928)
++++ ../trunk-jpl/src/c/datastructures	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c/datastructures
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c
+===================================================================
+--- ../trunk-jpl/src/c	(revision 15928)
++++ ../trunk-jpl/src/c	(revision 15929)
+
+Property changes on: ../trunk-jpl/src/c
+___________________________________________________________________
+Modified: svn:ignore
+## -13,4 +13,5 ##
+ g++results
+ probe.results
+ stXXXX*
+-
++.deps
++.dirstamp
Index: /issm/oecreview/Archive/15392-16133/ISSM-15929-15930.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15929-15930.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15929-15930.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15929)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15930)
+@@ -169,7 +169,8 @@
+ 	dnl library and header files
+ 	if test "x$HAVE_TRIANGLE" = "xyes"; then
+ 		TRIANGLEINCL=-I$TRIANGLE_ROOT/
+-	   AC_CHECK_FILE($TRIANGLE_ROOT/triangle.h,[],[AC_MSG_ERROR([Couldn't find triangle.h... check your installation of triangle])])
++		dnl AC_CHECK_FILE($TRIANGLE_ROOT/triangle.h,[],[AC_MSG_ERROR([Couldn't find triangle.h... check your installation of triangle])]) This check 
++		dnl blows up in cross-compile form.  Need to check for it in shell mode. 
+ 		case "${host_os}" in
+ 				*cygwin*)
+ 				TRIANGLELIB="-Wl,`cygpath -m $TRIANGLE_ROOT/`triangle.lib"
Index: /issm/oecreview/Archive/15392-16133/ISSM-15930-15931.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15930-15931.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15930-15931.diff	(revision 16134)
@@ -0,0 +1,153 @@
+Index: ../trunk-jpl/src/m/classes/snowpack.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/snowpack.m	(revision 15930)
++++ ../trunk-jpl/src/m/classes/snowpack.m	(revision 15931)
+@@ -68,6 +68,10 @@
+ 		interpolations1d_vw_args = '';
+ 		%}}}
+ 		%filters {{{
++		filters={'TA::filter1',{'soft',[-20 10]}};
++		filters=NaN;
++		filter_values=NaN;
++
+ 		filters_ta_filter1 = '';
+ 		filters_ta_arg1 = NaN;
+ 		filters_rh_filter1 = '';
+@@ -274,6 +278,8 @@
+ 			%}}}
+ 			%filters {{{
+ 			filter_values={'MIN_MAX','RATE_FILTER1','RATE_FILTER2','UNHEATED_RAIN_GAUGE_FILTER','WMO_UNDERCATCH_FILTER','WMO_UNDERCATCH_FILTER-SIMPLIFIED','UNVENTILLATED_TEMPERATURE_SENSOR','ADD_AN_OFFSET'};
++
++
+ 			md=checkfield(md,'snowpack.filters_ta_filter1','values',{filter_values});
+ 			if strcmpi(md.snowpack.filters_ta_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ta_filter1','size',[1 NaN]); end
+ 			md=checkfield(md,'snowpack.filters_ta_arg1','values',{filter_values});
+@@ -335,64 +341,83 @@
+ 
+ 			disp(sprintf('   Snowpack solution parameters:'));
+ 			disp(sprintf('\n	%s','Snowpack parameters:')); % {{{
+-			fielddisplay(obj,'snowpack_meas_tss',' ');
+-			fielddisplay(obj,'snowpack_enforce_measured_snow_heights',' ');
+-			fielddisplay(obj,'snowpack_sw_mode',' ');
+-			fielddisplay(obj,'snowpack_incoming_longwave',' ');
+-			fielddisplay(obj,'snowpack_height_of_wind_value',' ');
+-			fielddisplay(obj,'snowpack_height_of_meteo_values',' ');
+-			fielddisplay(obj,'snowpack_neutral',' ');
+-			fielddisplay(obj,'snowpack_roughness_length',' ');
+-			fielddisplay(obj,'snowpack_number_slopes',' ');
+-			fielddisplay(obj,'snowpack_snow_redistribution',' ');
+-			fielddisplay(obj,'snowpack_calculation_step_length',' ');
+-			fielddisplay(obj,'snowpack_change_bc',' ');
+-			fielddisplay(obj,'snowpack_thresh_change_bc',' ');
+-			fielddisplay(obj,'snowpack_snp_soil',' ');
+-			fielddisplay(obj,'snowpack_soil_flux',' ');
+-			fielddisplay(obj,'snowpack_geo_heat',' ');
+-			fielddisplay(obj,'snowpack_canopy',' ');
++			fielddisplay(obj,'snowpack_meas_tss',{'A measured surface temperature is available and can be reliably ','used for various consistency tests (it needs to be set to true if enabling CHANGE_BC) (0 or 1)'});
++			fielddisplay(obj,'snowpack_enforce_measured_snow_heights','Input mode by which a measurement of snow depth is used to drive the snow cover mass balance (0 or 1)');
++			fielddisplay(obj,'snowpack_sw_mode',{'Define the shortwave radiation input:',...
++				'0 Incoming shortwave radiation is measured and albedo estimated by the model',...
++				'1 Reflected shortwave radiation is available as input and albedo is estimated by the model (IMIS standard)',...
++				'2 Incoming and reflected shortwave radiation are both measured and the albedo is estimated from both measurements subject to plausibility checks.'});
++			fielddisplay(obj,'snowpack_incoming_longwave','Use the provided incoming long wave on the virtual slopes? (0 or 1)');
++			fielddisplay(obj,'snowpack_height_of_wind_value',{'The instrument height (or model layer height) for wind input data; note that height ',...
++				'is above ground for a standard SNOWPACK application but above surface (snow or ground) for Alpine3D applications '});
++			fielddisplay(obj,'snowpack_height_of_meteo_values',{'The instrument height (or model layer height) for meteorological input data except for wind,',...
++				'which may be at a different height; note that height is above ground for a standard SNOWPACK ',...
++				'application but above surface (snow or ground) for Alpine3D applications. '});
++			fielddisplay(obj,'snowpack_neutral',{'Select the atmospheric stability correction model:',...
++				'-1 use a simplified Richardson number stability correction',...
++				'0 assume standard Monin-Obukhov bulk formulation for surface exchange iteration with Paulson, Stearns and Weidner (can be used with BC_CHANGE=0)',...
++				'1 force Monin-Obukhov formulation to assume neutral conditions regardless of the actual stratification; it has been shown to work well in ',...
++				'complex terrain settings. It should be used with BC_CHANGE=1, i.e., Dirichlet /* but also is recommended with Neumann b.c., i.e., BC_CHANGE=0.'});
++			fielddisplay(obj,'snowpack_roughness_length',{'Aerodynamic roughness length as a parameter for the Monin-Obukhov bulk formulation;',...
++				'A typical value for complex terrain is 0.01 m and for snow covered flat sites 0.001 m. '});
++			fielddisplay(obj,'snowpack_number_slopes',{'Based on meteorological input from a (flat field) automatic station or numerical weather model,',...
++				'up to 8 expositions can be calculated in addition to the flat field if the corresponding *.sno files are provided. For example,',...
++				'if you provide a flat field *.snow file (mandatory), which is named KLO3.sno and you want 4 slopes to be calculated the corresponding',...
++				'slope files should be named KLO21.sno, ...,KLO24.sno '});
++			fielddisplay(obj,'snowpack_snow_redistribution',{'Specifies if redistribution of snow is allowed from (upwind) expositions to lee slopes.',...
++				'In case just the flat field is calculated, snow erosion is enabled but only for "ENFORCE_MEASURED_SNOW_HEIGHTS".'});
++				fielddisplay(obj,'snowpack_calculation_step_length',{'Internal time step (in minutes) used for model simulation. Please note that this MUST ',...
++				'be the same as HNW::accumulate (the latter being in seconds) if re-acumulating precipitation, otherwise it would lead to wrong results.'});
++			fielddisplay(obj,'snowpack_change_bc',{'Use measured surface temperature as Dirichlet temperature BC for sub-freezing snowpacks and switch to ',...
++			'Neumann only for melting snowpacks. If set to false, assumes Neumann boundary conditions.'});
++			fielddisplay(obj,'snowpack_thresh_change_bc','Threshold value (small number below freezing), which switches from Dirichlet to Neumann BCs if CHANGE_BC is selected');
++			fielddisplay(obj,'snowpack_snp_soil','Soil layers as defined by the *.sno files are included in the simulation');
++			fielddisplay(obj,'snowpack_soil_flux','Assume that the lower temperature boundary condition is given by GEO_HEAT (Neumann) and not by a measured temperature');
++			fielddisplay(obj,'snowpack_geo_heat','Constant geothermal heat flux at great) depth W m-2): Lower flux boundary condition for temperature equation if BC is Neumann');
++			fielddisplay(obj,'snowpack_canopy','Switch to tell the model that canopy is present (note that Canopy parameters should then be provided in the *.sno file)');
+ 			% }}}
+ 			disp(sprintf('\n	%s','Snowpackadvanced parameters:')); % {{{
+-			fielddisplay(obj,'snowpackadvanced_variant',''); % use 320 kg m-3 for fixed density
+-			fielddisplay(obj,'snowpackadvanced_hn_density','');
++			fielddisplay(obj,'snowpackadvanced_variant','variant selection (includes a choice of specific models, DEFAULT, ANTARCTICA and JAPAN )'); % use 320 kg m-3 for fixed density
++			fielddisplay(obj,'snowpackadvanced_hn_density',{'Fixed value to be used as new snow density if a constant density model is chosen, otherwise the choices are "PARAMETERIZED" "EVENT" "MEASURED"'});
+ 			% }}}
+ 			disp(sprintf('\n	%s','General parameters:')); % {{{
+ 			fielddisplay(obj,'general_pluginpath','');
+-			fielddisplay(obj,'general_buff_chunk_size',' ');
+-			fielddisplay(obj,'general_buff_before',' ');
++			fielddisplay(obj,'general_buff_chunk_size','Size in days of a chunk of data to read at once.');
++			fielddisplay(obj,'general_buff_before','Alternate way of buffer centering: When rebuffering, the new date will be located BUFF_BEFORE days from the beginning of the buffer (therefore, it takes a value in days). ');
+ 			% }}}
+ 			disp(sprintf('\n	%s','Input  parameter:')); % {{{
+-			fielddisplay(obj,'input_coordsys','');
++			fielddisplay(obj,'input_coordsys','coordinates in the Swiss Grid (http://geomatics.ladetto.ch/ch1903_wgs84_de.pdf). One of CH1903,UTM,UPS,PROJ4 or LOCAL');
+ 			fielddisplay(obj,'input_coordparam',' ');
+ 			fielddisplay(obj,'input_time_zone',' ');
+-			fielddisplay(obj,'input_meteo',' ');
+-			fielddisplay(obj,'input_meteopath',' ');
+-			fielddisplay(obj,'input_station1',' ');
+-			fielddisplay(obj,'input_snowfile1',' ');
++			fielddisplay(obj,'input_meteo','plugin for METEO data (one of BORMA,COSMO,GEOTOP,GRIB,GS,IMIS,SMET,SNOWPACK');
++			fielddisplay(obj,'input_meteopath','string containing the path to the xml files.');
++			fielddisplay(obj,'input_station1','Meteorology file for station number #');
++			fielddisplay(obj,'input_snowfile1','File name for the initial snow profile for station number #');
+ 			% }}}
+ 			disp(sprintf('\n	%s','Output parameters:')); % {{{
+-			fielddisplay(obj,'output_coordsys',' ');
+-			fielddisplay(obj,'output_coordparam',' ');
+-			fielddisplay(obj,'output_time_zone',' ');
+-			fielddisplay(obj,'output_meteopath',' ');
+-			fielddisplay(obj,'output_experiment',' ');
+-			fielddisplay(obj,'output_ts_write',' ');
+-			fielddisplay(obj,'output_ts_start',' ');
+-			fielddisplay(obj,'output_ts_days_between',' ');
+-			fielddisplay(obj,'output_profile',' ');
+-			fielddisplay(obj,'output_prof_write',' ');
+-			fielddisplay(obj,'output_prof_start',' ');
+-			fielddisplay(obj,'output_prof_days_between',' ');
++			fielddisplay(obj,'output_coordsys','Coordinates in the Swiss Grid http://geomatics.ladetto.ch/ch1903_wgs84_de.pdf. One of CH1903,UTM,UPS,PROJ4 or LOCAL ');
++			fielddisplay(obj,'output_coordparam','');
++			fielddisplay(obj,'output_time_zone','');
++			fielddisplay(obj,'output_meteopath','Path to the outputs (this path MUST exist, it won''t be created)');
++			fielddisplay(obj,'output_experiment','Option to give an additional simulation specific output name to the run in addition to "STATION_NAME"');
++			fielddisplay(obj,'output_ts_write','Write meteo data out? (0 or 1)');
++			fielddisplay(obj,'output_ts_start','When to start writing meteo data out (offset, in days)');
++			fielddisplay(obj,'output_ts_days_between','How often to write meteo data out (in days: 3 hours=.125, 1 hour=4.1666e-2)');
++			fielddisplay(obj,'output_profile','How to write the profiles (default: ASCII, choice is ASCII,IMIS or ASCII IMIS)');
++)');
++			fielddisplay(obj,'output_prof_write','Write profile data out? (0 or 1) ');
++			fielddisplay(obj,'output_prof_start','When to start writing profile data out (offset, in days)');
++			fielddisplay(obj,'output_prof_days_between','How often to write profile data out (in days: 3 hours=.125, 1 hour=4.1666e-2)');
+ 			% }}}
+ 			disp(sprintf('\n	%s','Interpolations1d parameters:')); % {{{
+-			fielddisplay(obj,'interpolations1d_window_size',' '); %that is 5 d and 2 h; 1 d = 86400
+-			fielddisplay(obj,'interpolations1d_hnw_resample',' ');
+-			fielddisplay(obj,'interpolations1d_hs_resample',' ');
+-			fielddisplay(obj,'interpolations1d_tsg_resample',' ');
+-			fielddisplay(obj,'interpolations1d_rho_hn_resample',' ');
+-			fielddisplay(obj,'interpolations1d_vw_resample',' ');
+-			fielddisplay(obj,'interpolations1d_vw_args',' ');
++			fielddisplay(obj,'interpolations1d_window_size','Affects resampling: expresses (in seconds) how far a valid point can be searched for when re-interpolating a missing value'); 
++			fielddisplay(obj,'interpolations1d_hnw_resample','NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR');
++ ');
++			fielddisplay(obj,'interpolations1d_hs_resample','Mean average processing. The mean average filter returns the mean value of all values within a user given time window. (NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)');
++			fielddisplay(obj,'interpolations1d_tsg_resample','Mean average processing. The mean average filter returns the mean value of all values within a user given time window.(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)');
++			fielddisplay(obj,'interpolations1d_rho_hn_resample','(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)');
++			fielddisplay(obj,'interpolations1d_vw_resample','(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)');
++			fielddisplay(obj,'interpolations1d_vw_args','default nothing, otherwise, ''extrapolcate''');
+ 			% }}}
+ 			disp(sprintf('\n	%s','Filters parameters:')); % {{{
+ 			fielddisplay(obj,'filters_ta_filter1',' ');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15931-15932.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15931-15932.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15931-15932.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/externalpackages/triangle
+===================================================================
+--- ../trunk-jpl/externalpackages/triangle	(revision 15931)
++++ ../trunk-jpl/externalpackages/triangle	(revision 15932)
+
+Property changes on: ../trunk-jpl/externalpackages/triangle
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,5 ##
++android-install
++macosx64-install
+ *.zip
+ *.gz
+ *.zip
Index: /issm/oecreview/Archive/15392-16133/ISSM-15932-15933.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15932-15933.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15932-15933.diff	(revision 16134)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/mobile/native/Main.cpp
+===================================================================
+--- ../trunk-jpl/src/mobile/native/Main.cpp	(revision 15932)
++++ ../trunk-jpl/src/mobile/native/Main.cpp	(revision 15933)
+@@ -1,4 +1,4 @@
+-#include "../../c/issm.h"
++#include "../../c/main/issm.h"
+ #include <cstddef>
+ #include <stdio.h>
+ 
+@@ -21,11 +21,11 @@
+ 		/*arguments to constructor: */
+ 		int argc; //arguments to constructor.
+ 		char** argv = NULL;
+-		COMM    communicator = 1; //fake communicator for constructor
+ 		const char* issmname = "issm.exe";
+ 		char *solution_type = NULL;
+ 		char *absfile = NULL;
+ 		char *relfile = NULL;
++		ISSM_MPI_Comm    comm=0;
+ 
+ 		/*log:*/
+ 		__android_log_print(ANDROID_LOG_INFO, "Native","Initializing FemModel");
+@@ -44,7 +44,7 @@
+ 		argv[3]=relfile;
+ 		
+ 		/*call Model constructor passing in infile as File Descriptor parameter.*/
+-		fm  = new FemModel(argc,argv,communicator);
++		fm  = new FemModel(argc,argv,comm);
+ 
+ 		/*we'll need the toolkits activated right away to use matrices: */
+ 		ToolkitsOptionsFromAnalysis(fm->parameters,NoneAnalysisEnum);
+@@ -99,7 +99,7 @@
+ 
+ 		/*retrieve results: */
+ 		__android_log_print(ANDROID_LOG_INFO, "Native","Retrieving results ");
+-		fm->elements->ProcessResultsUnits();
++		//fm->elements->ProcessResultsUnits(); we are now in SI units
+ 		patch=fm->elements->ResultsToPatch();
+ 
+ 		/*sort out the velocities: */
+Index: ../trunk-jpl/configs/config-arm-linux.sh
+===================================================================
+--- ../trunk-jpl/configs/config-arm-linux.sh	(revision 15932)
++++ ../trunk-jpl/configs/config-arm-linux.sh	(revision 15933)
+@@ -2,7 +2,7 @@
+ 
+ ./configure \
+    --prefix=$ISSM_DIR\
+-   --libdir=$ISSM_DIR/src/mobile/android/ISSM_APP/libs/armeabi\
++   --libdir=$ISSM_DIR/../mobile/android/ISSM_APP/libs/armeabi\
+    --build="i386-apple-darwin10.8.0"\
+    --host="arm-linux-androideabi"\
+    --enable-shared\
Index: /issm/oecreview/Archive/15392-16133/ISSM-15933-15934.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15933-15934.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15933-15934.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/lib
+===================================================================
+--- ../trunk-jpl/lib	(revision 15933)
++++ ../trunk-jpl/lib	(revision 15934)
+
+Property changes on: ../trunk-jpl/lib
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,3 ##
+ *.mexa64
+ *.mexmaci64
++*.so
Index: /issm/oecreview/Archive/15392-16133/ISSM-15934-15935.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15934-15935.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15934-15935.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/execution
+===================================================================
+--- ../trunk-jpl/execution	(revision 15934)
++++ ../trunk-jpl/execution	(revision 15935)
+
+Property changes on: ../trunk-jpl/execution
+___________________________________________________________________
+Modified: svn:ignore
+## -1,6 +1 ##
+-*-*-*-*
+-Pig-*
+-test*
+-Pig*
+-pig*
+-ad*
++*
Index: /issm/oecreview/Archive/15392-16133/ISSM-15935-15936.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15935-15936.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15935-15936.diff	(revision 16134)
@@ -0,0 +1,96 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vimrc
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 15935)
++++ ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 15936)
+@@ -92,6 +92,9 @@
+ "stop highlightings when spce is pressed
+ nnoremap <silent> <Space> :silent noh<Bar>echo<CR> 
+ 
++"increment number
++nnoremap <C-i> <C-a>
++
+ "line numbering in flip-flop
+ map num :set number!<CR>
+ 
+@@ -197,19 +200,21 @@
+ 	let c = nr2char(getchar())
+ 	return (c =~ a:pat) ? '' : c
+ endfunc
+-au BufRead,BufNewFile *.html     iabbr <silent> H1 <h1></h1><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-au BufRead,BufNewFile *.html     iabbr <silent> H2 <h2></h2><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-au BufRead,BufNewFile *.html     iabbr <silent> H3 <h3></h3><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-au BufRead,BufNewFile *.html     iabbr <silent> CO <code></code><Left><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-au BufRead,BufNewFile *.html     iabbr <silent> PP <p></p><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-au BufRead,BufNewFile *.m        iabbr <silent> p1  disp('');<Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-au BufRead,BufNewFile *.m        iab <expr> p0  "disp('-------------- file: ".expand('%')." line: ".line(".")."');"
+-au BufRead,BufNewFile *.c*       iabbr <silent> p1  printf("\n");<Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-au BufRead,BufNewFile *.c*,*.h   iabbr <silent> ER  _error_("");<Left><Left><Left><C-R>=Eatchar('\s')<CR>
+-au BufRead,BufNewFile *.c*       ab VV VecView(ug,PETSC_VIEWER_STDOUT_WORLD);
+-au BufRead,BufNewFile *.c*       ab AS _assert_();
+-au BufRead,BufNewFile *.c*       iab <expr> p0  "printf(\"-------------- file: ".expand('%')." line: %i\\n\",__LINE__);"
+-au BufRead,BufNewFile *.c*       iab <expr> pp0 "PetscSynchronizedPrintf(MPI_COMM_WORLD,\"-------------- file: ".expand('%')." line: %i\\n\",__LINE__);\nPetscSynchronizedFlush(MPI_COMM_WORLD);"
++au BufRead,BufNewFile *.html   iabbr <silent> H1 <h1></h1><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.html   iabbr <silent> H2 <h2></h2><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.html   iabbr <silent> H3 <h3></h3><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.html   iabbr <silent> CO <code></code><Left><Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.html   iabbr <silent> PP <p></p><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
++"au BufRead,BufNewFile *.m      iabbr <silent> p1  disp('');<Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.m      iab <expr> p0  "disp('-------------- file: ".expand('%')." line: ".line(".")."');"
++au BufRead,BufNewFile *.c*,*.h iabbr <silent> p1  printf("\n");<Left><Left><Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.c*,*.h iabbr <silent> ER  _error_("");<Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.py     iabbr <silent> ER  raise NameError('')<Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.m      iabbr <silent> ER  error('');<Left><Left><Left><C-R>=Eatchar('\s')<CR>
++au BufRead,BufNewFile *.c*     ab VV VecView(ug,PETSC_VIEWER_STDOUT_WORLD);
++au BufRead,BufNewFile *.c*,*.h ab AS _assert_();
++au BufRead,BufNewFile *.c*,*.h iab <expr> p0  "printf(\"-------------- file: ".expand('%')." line: %i\\n\",__LINE__);"
++au BufRead,BufNewFile *.c*,*.h iab <expr> pp0 "PetscSynchronizedPrintf(MPI_COMM_WORLD,\"-------------- file: ".expand('%')." line: %i\\n\",__LINE__);\nPetscSynchronizedFlush(MPI_COMM_WORLD);"
+ "tex
+ au BufRead,BufNewFile *.tex iab EQ 
+ 			\\begin{equation}
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15935)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15936)
+@@ -689,6 +689,7 @@
+ syn keyword cConstant MeshZEnum
+ syn keyword cConstant MiscellaneousNameEnum
+ syn keyword cConstant MasstransportHydrostaticAdjustmentEnum
++syn keyword cConstant MasstransportIsfreesurfaceEnum
+ syn keyword cConstant MasstransportMinThicknessEnum
+ syn keyword cConstant MasstransportPenaltyFactorEnum
+ syn keyword cConstant MasstransportSpcthicknessEnum
+@@ -794,6 +795,8 @@
+ syn keyword cConstant MeltingAnalysisEnum
+ syn keyword cConstant MasstransportAnalysisEnum
+ syn keyword cConstant MasstransportSolutionEnum
++syn keyword cConstant FreeSurfaceBaseAnalysisEnum
++syn keyword cConstant FreeSurfaceTopAnalysisEnum
+ syn keyword cConstant SteadystateSolutionEnum
+ syn keyword cConstant SurfaceSlopeAnalysisEnum
+ syn keyword cConstant SurfaceSlopeSolutionEnum
+@@ -968,6 +971,7 @@
+ syn keyword cConstant WaterfractionEnum
+ syn keyword cConstant WatercolumnEnum
+ syn keyword cConstant BasalFrictionEnum
++syn keyword cConstant BasalMeltrateEnum
+ syn keyword cConstant ViscousHeatingEnum
+ syn keyword cConstant QmuTemperatureEnum
+ syn keyword cConstant HydrologyWaterVxEnum
+@@ -1080,6 +1084,7 @@
+ syn keyword cConstant OptionLogicalEnum
+ syn keyword cConstant PatersonEnum
+ syn keyword cConstant ArrheniusEnum
++syn keyword cConstant LliboutryDuvalEnum
+ "ISSM's Enums end
+ """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+ 
+Index: ../trunk-jpl/externalpackages/proj.4
+===================================================================
+--- ../trunk-jpl/externalpackages/proj.4	(revision 15935)
++++ ../trunk-jpl/externalpackages/proj.4	(revision 15936)
+
+Property changes on: ../trunk-jpl/externalpackages/proj.4
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++install
Index: /issm/oecreview/Archive/15392-16133/ISSM-15936-15937.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15936-15937.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15936-15937.diff	(revision 16134)
@@ -0,0 +1,2633 @@
+Index: ../trunk-jpl/src/m/exp/expcreatecontour.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcreatecontour.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/expcreatecontour.m	(revision 15937)
+@@ -1,35 +0,0 @@
+-function expcreatecontour(filename)
+-%EXPCREATECONTOUR - create a contour from a list of points
+-%
+-%   expcreatecontour: from a list of (x,y) points (retrieve using ginput on an undetermined
+-%   number of points: used RETURN key to end input), create an Argus .exp 
+-%   file holding the corresponding closed contour.
+-%    
+-%   Usage:
+-%      expcreatecontour(filename)
+-%
+-%   See also EXPMASTER, EXPDOC
+-
+-%Get root of filename
+-[path root ext ver]=fileparts(filename);
+-
+-%Get contour
+-disp('Click on contour points you desire. Type RETURN to end input of points');
+-[x,y]=ginput();
+-
+-%close contour
+-x=[x;x(1)];
+-y=[y;y(1);];
+-
+-%plot contour
+-hold on;
+-plot(x,y,'r-');
+-
+-%create structure for expwrite routine
+-a.x=x;
+-a.y=y;
+-a.name=root;
+-a.density=1;
+-
+-%write contour using expwrite
+-expwrite(a,filename);
+Index: ../trunk-jpl/src/m/exp/expcreateprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcreateprofile.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/expcreateprofile.m	(revision 15937)
+@@ -1,31 +0,0 @@
+-function expcreateprofile(filename)
+-%EXPCREATEPROFILE - create an Argus file from a list of points
+-%
+-%   expcreateprofile: from a list of (x,y) points (retrieve using ginput on an undetermined
+-%   number of points: used RETURN key to end input), create an Argus .exp 
+-%   file holding the corresponding open profile.
+-%    
+-%   Usage:
+-%      expcreateprofile(filename)
+-%
+-%   See also EXPMASTER, EXPDOC
+-
+-%Get root of filename
+-[path root ext]=fileparts(filename);
+-
+-%Get profile
+-disp('Click on profile points you desire. Type RETURN to end input of points');
+-[x,y]=ginput();
+-
+-%plot contour
+-hold on;
+-plot(x,y,'r-');
+-
+-%create structure for expwrite routine
+-a.x=x;
+-a.y=y;
+-a.name=root;
+-a.density=1;
+-
+-%write profile using expwrite
+-expwrite(a,filename);
+Index: ../trunk-jpl/src/m/exp/manipulation/addprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addprofile.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/addprofile.m	(revision 15937)
+@@ -1,48 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=addprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%ADDPROFILE - add a profile
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=addprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	title('click to add a point to the new profile, RETURN to exit','FontSize',14)
+-	hold on
+-
+-	loop=1;
+-	x=[];
+-	y=[];
+-
+-	while loop
+-
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-			x(end+1,1)=xi;
+-			y(end+1,1)=yi;
+-
+-			%plot everything
+-			undoplots(prevplot);
+-			plot(x,y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-				'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-			plot(x(end),y(end),'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-
+-		else
+-
+-			%check that the profile is not empty
+-			if ~isempty(x)
+-				A(end+1).x=x; 
+-				A(end).y=y; 
+-				A(end).name=root; 
+-				A(end).density=1; 
+-				numprofiles=numprofiles+1;
+-				numpoints=numpoints+length(x);
+-				closed(end+1)=0;
+-			end
+-
+-			%get out
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/cutprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/cutprofile.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/cutprofile.m	(revision 15937)
+@@ -1,79 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=cutprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%CUTPROFILE - cut a profile
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=cutprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	%some checks
+-	if numprofiles==0
+-		disp('no profile present, exiting...')
+-		return
+-	end	   
+-	if numpoints<2
+-		disp('at least two points are needed')
+-		return
+-	end	   
+-	hold on
+-
+-	%plot squares
+-	for i=1:numprofiles
+-		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-	end
+-
+-	loop=1;
+-	while loop
+-
+-		%select a segment
+-		title('click the segment to cut, RETURN to exit','FontSize',14)
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-
+-			%get the closest segment
+-			[profsel indsel]=closestsegment(A,numprofiles,xi,yi);
+-
+-			%check that at least one segment exists
+-			if indsel==0
+-				disp('at least 2 points are required');
+-				return,
+-			end
+-
+-			if ((closed(profsel) & length(A(profsel).x)<3) | (~closed(profsel) & length(A(profsel).x)<2))
+-				disp('at least 2 points are required, make another selection');
+-			else
+-				%cut A
+-				if closed(profsel)
+-					%open the contour
+-					A(profsel).x=[A(profsel).x(indsel+1:end-1,1);A(profsel).x(1:indsel,1)];
+-					A(profsel).y=[A(profsel).y(indsel+1:end-1,1);A(profsel).y(1:indsel,1)];
+-					numpoints=numpoints-1;
+-					closed(profsel)=0;
+-				else
+-					%cut the contour in 2 profiles
+-					A(end+1).x=A(profsel).x(indsel+1:end,1);
+-					A(end).y=A(profsel).y(indsel+1:end,1);
+-					A(end).name=root; 
+-					A(end).density=1; 
+-					A(profsel).x=A(profsel).x(1:indsel,1);
+-					A(profsel).y=A(profsel).y(1:indsel,1);
+-					numprofiles=numprofiles+1;
+-					closed(end+1)=0;
+-				end
+-
+-				%plot new profile
+-				undoplots(prevplot);
+-				for i=1:numprofiles
+-					plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-						'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-				end
+-			end
+-		else
+-			%RETURN->exit
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/modifyposition.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/modifyposition.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/modifyposition.m	(revision 15937)
+@@ -1,77 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=modifyposition(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%MODIFYPOSITION - modify the prosition of a point of a profile
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=modifyposition(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	%some checks
+-	if numprofiles==0
+-		disp('no profile present, exiting..')
+-		return
+-	end
+-
+-	hold on
+-	loop=1;
+-
+-	%plot squares
+-	for i=1:numprofiles
+-		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-	end
+-
+-	while loop
+-
+-		%select a point to be modified 
+-		title('click on the point to be modified, RETURN to exit','FontSize',14)
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-
+-			%get the closest point
+-			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
+-
+-			%plot the point in blue
+-			plot(A(profsel).x(indsel),A(profsel).y(indsel),...
+-				'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-				'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-
+-			%select new location
+-			title('click on the new location, RETURN to exit','FontSize',14)
+-			[xi,yi] = ginput(1);
+-
+-			if ~isempty(xi)
+-
+-				%modification of its coordinates
+-				A(profsel).x(indsel)=xi;
+-				A(profsel).y(indsel)=yi;
+-
+-				%modify the last point if the profile is closed and indsel=end or 1
+-				if closed(profsel)
+-					if indsel==1 
+-						A(profsel).x(end)=xi;
+-						A(profsel).y(end)=yi;
+-					elseif indsel==length(A(profsel).x)
+-						A(profsel).x(1)=xi;
+-						A(profsel).y(1)=yi;
+-					end
+-				end
+-
+-				%plot new profile
+-				undoplots(prevplot);
+-				for i=1:numprofiles
+-					plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-						'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-				end
+-			else
+-				%RETURN-> exit
+-				loop=0;
+-			end
+-		else
+-			%RETURN-> exit
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m	(revision 15937)
+@@ -1,130 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=removeseveralpoints(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%REMOVESEVERALPOINTS - remove several point
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=removeseveralpoints(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	%some checks
+-	if numprofiles==0
+-		disp('no profile present, exiting...')
+-		return
+-	end	   
+-	if numpoints<3
+-		disp('at least 3 points are required, exiting...')
+-		return
+-	end	   
+-	hold on
+-	loop=1;
+-
+-	%plot squares
+-	for i=1:numprofiles
+-		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-	end
+-
+-	points=[];
+-
+-	%loop (at least 3 clicks needed)
+-	while loop
+-
+-		%some checks
+-		if numpoints<3
+-			disp('at least 3 points are required, exiting...')
+-			return
+-		end
+-
+-		%select a point
+-		if isempty(points)
+-			title('click on the first tip, RETURN to exit','FontSize',14)
+-		elseif length(points)==1
+-			title('click on the second tip, RETURN to exit','FontSize',14)
+-		else
+-			title('click in the middle of the area to be removed, RETURN to exit','FontSize',14)
+-		end
+-
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-			%get the closest point
+-			%first time, look at all profiles
+-			if isempty(points)
+-				[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
+-				if ((closed(profsel) & length(A(profsel).x)<4) |  (~closed(profsel) & length(A(profsel).x)<3)),
+-					disp('the selected profile has less than 3 points, make another selection');
+-				else
+-					selection=profsel;
+-					points(end+1)=indsel;
+-					plot(A(profsel).x,A(profsel).y,...
+-						'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-					text(A(selection).x(indsel),A(selection).y(indsel),num2str(1),'FontSize',14,'background',[0.7 0.7 0.9]);
+-				end
+-				%disp(['p1= ' num2str(indsel)]),
+-			else
+-				%get the 2d or 3d point for the given contou
+-				[profsel indsel]=closestpoint(A(selection),1,xi,yi);
+-				if ismember(indsel,points)
+-					disp('the selected points must be distinct')
+-				else
+-					%second click?
+-					if length(points)==1,
+-						points(end+1)=indsel;
+-						text(A(selection).x(indsel),A(selection).y(indsel),num2str(2),'FontSize',14,'background',[0.7 0.7 0.9]);
+-						%disp(['p2= ' num2str(indsel)]),
+-					%third click?
+-					else
+-						p1=points(1); p2=points(2); p3=indsel;
+-						%disp(['p3= ' num2str(indsel)]),
+-						if p1<p2
+-							if p3>p1 & p3<p2
+-								A(selection).x(p1+1:p2-1)=[];
+-								A(selection).y(p1+1:p2-1)=[];
+-								numpoints=numpoints-(p2-p1-1);
+-							else
+-								A(selection).x=A(selection).x(p1:p2);
+-								A(selection).y=A(selection).y(p1:p2);
+-								numpoints=numpoints-(numpoints-1-p2)-(p1-1);
+-								if closed(selection)
+-									%reattach the tips
+-									A(selection).x(end+1)=A(selection).x(1);
+-									A(selection).y(end+1)=A(selection).y(1);
+-									numpoints=numpoints+1;
+-								end
+-							end
+-						else
+-							if p3>p2 & p3<p1
+-								A(selection).x(p2+1:p1-1)=[];
+-								A(selection).y(p2+1:p1-1)=[];
+-								numpoints=numpoints-(p1-p2-1);
+-							else
+-								A(selection).x=A(selection).x(p2:p1);
+-								A(selection).y=A(selection).y(p2:p1);
+-								numpoints=numpoints-(numpoints-1-p1)-(p2-1);
+-								if closed(selection)
+-									%reattach the tips
+-									A(selection).x(end+1)=A(selection).x(1);
+-									A(selection).y(end+1)=A(selection).y(1);
+-									numpoints=numpoints+1;
+-								end
+-							end
+-						end
+-
+-						%plot new profiles
+-						undoplots(prevplot);
+-						for i=1:numprofiles
+-							plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-								'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-						end
+-						points=[];
+-
+-					end
+-				end
+-			end
+-		else
+-			%RETRUN-> quit
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/removeprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removeprofile.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/removeprofile.m	(revision 15937)
+@@ -1,56 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=removeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%REMOVEPROFILE - delete a profile
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=removeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	title('click on the profiles to be removed, RETURN to exit','FontSize',14)
+-	hold on
+-
+-	loop=1;
+-	selection=[];
+-
+-	while loop
+-
+-		%some checks
+-		if numprofiles==0
+-			disp('no profile to be removed, exiting...')
+-			return
+-		end
+-
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-
+-			%get closest profile
+-			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
+-
+-			if ismember(profsel,selection)
+-				%profile was in selection, remove it
+-				selection(find(selection==profsel))=[];
+-				%back to regular color
+-				plot(A(profsel).x,A(profsel).y,...
+-					'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-			else
+-				%add the profile to the list to be removed
+-				selection(end+1)=profsel;
+-				%in selectioncolor
+-				plot(A(profsel).x,A(profsel).y,...
+-					'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-			end
+-		else
+-			%remove the profiles
+-			selection=sort(selection);
+-			for i=1:length(selection),
+-				numprofiles=numprofiles-1;
+-				numpoints=numpoints-length(A(selection(i)-(i-1)).x);
+-				A(selection(i)-(i-1))=[];
+-				closed(selection(i)-(i-1))=[];
+-			end
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/orientprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/orientprofile.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/orientprofile.m	(revision 15937)
+@@ -1,54 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=orientprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%ORIENTPROFILE - cahnge profile orientation
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=orientprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	title('click on the profiles to be reoriented, RETURN to exit','FontSize',14)
+-	hold on
+-
+-	loop=1;
+-	selection=[];
+-
+-	while loop
+-
+-		%some checks
+-		if numprofiles==0
+-			disp('no profile to be reoriented, exiting...')
+-			return
+-		end
+-
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-
+-			%get closest profile
+-			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
+-
+-			if ismember(profsel,selection)
+-				%profile was in selection, remove it from list
+-				selection(find(selection==profsel))=[];
+-				%back to regular color
+-				plot(A(profsel).x,A(profsel).y,...
+-					'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-			else
+-				%add the profile to the list to be removed
+-				selection(end+1)=profsel;
+-				%in selectioncolor
+-				plot(A(profsel).x,A(profsel).y,...
+-					'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-			end
+-		else
+-			%reorient profiles
+-			selection=sort(selection);
+-			for i=1:length(selection),
+-				A(selection(i)).x=flipud(A(selection(i)).x);
+-				A(selection(i)).y=flipud(A(selection(i)).y);
+-			end
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/cutarea.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/cutarea.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/cutarea.m	(revision 15937)
+@@ -1,156 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=cutarea(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%CUTAREA - cut several point of a profile
+-%
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile. The user must click 3 times to select the
+-%   area to be removed. Twice to select the tips and one to select
+-%   the part of the profile to be removed
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=cutarea(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	hold on
+-	loop=1;
+-
+-	%plot squares
+-	for i=1:numprofiles
+-		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-	end
+-
+-	points=[];
+-
+-	%loop (at least 3 clicks needed)
+-	while loop
+-
+-		%some checks
+-		if numprofiles==0
+-			disp('no profile present, exiting...')
+-			return
+-		end	   
+-		if numpoints<3
+-			disp('at least two points are needed, exiting...')
+-			return
+-		end	   
+-
+-		%select a point
+-		if isempty(points)
+-			title('click on the first tip, RETURN to exit','FontSize',14)
+-		elseif length(points)==1
+-			title('click on the second tip, RETURN to exit','FontSize',14)
+-		else
+-			title('click in the middle of the area to be cut, RETURN to exit','FontSize',14)
+-		end
+-
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-			%get the closest point
+-			%first time, look at all profiles
+-			if isempty(points)
+-				[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
+-				if ((closed(profsel) & length(A(profsel).x)<4) |  (~closed(profsel) & length(A(profsel).x)<3)),
+-					disp('the selected profile has less than 3 points, make another selection');
+-				else
+-					selection=profsel;
+-					points(end+1)=indsel;
+-					plot(A(profsel).x,A(profsel).y,...
+-						'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-					text(A(selection).x(indsel),A(selection).y(indsel),num2str(1),'FontSize',14,'background',[0.7 0.7 0.9]);
+-				end
+-			else
+-				%get the 2d or 3d point for the given contou
+-				[profsel indsel]=closestpoint(A(selection),1,xi,yi);
+-				if ismember(indsel,points)
+-					disp('the selected points must be distinct')
+-				else
+-					%second click?
+-					if length(points)==1,
+-						points(end+1)=indsel;
+-						text(A(selection).x(indsel),A(selection).y(indsel),num2str(2),'FontSize',14,'background',[0.7 0.7 0.9]);
+-					%third click?
+-					else
+-						p1=points(1); p2=points(2); p3=indsel;
+-						x=A(selection).x; y=A(selection).y;
+-						if p1<p2
+-							if p3>p1 & p3<p2
+-								if closed(selection)
+-									%open the profile
+-									n=length(A(selection).x);
+-									A(selection).x=[A(selection).x(p2:end-1,1);A(selection).x(1:p1,1)];
+-									A(selection).y=[A(selection).y(p2:end-1,1);A(selection).y(1:p1,1)];
+-									numpoints=numpoints-(n-length(A(selection).x));
+-									closed(selection)=0;
+-								else
+-									%cut in 2 profiles
+-									A(selection).x=x(1:p1);
+-									A(selection).y=y(1:p1);
+-									closed(selection)=0;
+-									A(end+1).x=x(p2:end);
+-									A(end).y=y(p2:end);
+-									A(end).density=A(selection).density;
+-									A(end).name=A(selection).name;
+-									closed(end+1)=0;
+-									numprofiles=numprofiles+1;
+-									numpoints=numpoints-(p2-p1-1);
+-								end
+-							else
+-								%only point removal
+-								n=length(A(selection).x);
+-								A(selection).x=x(p1:p2);
+-								A(selection).y=y(p1:p2);
+-								numpoints=numpoints-(n-length(A(selection).x));
+-								closed(selection)=0;
+-							end
+-						else
+-							if p3>p2 & p3<p1
+-								if closed(selection)
+-									%open the profile
+-									n=length(A(selection).x);
+-									A(selection).x=[A(selection).x(p1:end-1,1);A(selection).x(1:p2,1)];
+-									A(selection).y=[A(selection).y(p1:end-1,1);A(selection).y(1:p2,1)];
+-									numpoints=numpoints-(n-length(A(selection).x));
+-									closed(selection)=0;
+-								else
+-									%cut in 2 profiles
+-									closed(selection)=0;
+-									A(selection).x=x(1:p2);
+-									A(selection).y=y(1:p2);
+-									A(end+1).x=x(p1:end);
+-									A(end).y=y(p1:end);
+-									A(end).density=A(selection).density;
+-									A(end).name=A(selection).name;
+-									closed(end+1)=0;
+-									numprofiles=numprofiles+1;
+-									numpoints=numpoints-(p1-p2-1);
+-								end
+-							else
+-								%only point removal
+-								n=length(A(selection).x);
+-								x(1:p2-1)=[];x(p1-p2+2:end)=[];%it should have been x(p2+1:end)
+-								y(1:p2-1)=[];y(p1-p2+2:end)=[];
+-								A(selection).x=x;
+-								A(selection).y=y;
+-								numpoints=numpoints-(n-length(A(selection).x));
+-								closed(selection)=0;
+-							end
+-						end
+-
+-						%plot new profile
+-						undoplots(prevplot);
+-						for i=1:numprofiles
+-							plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-								'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-						end
+-						points=[];
+-
+-					end
+-				end
+-			end
+-		else
+-			%RETRUN-> quit
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/closeprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/closeprofile.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/closeprofile.m	(revision 15937)
+@@ -1,68 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=closeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%CLOSEPROFILE - close one or several profile
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=closeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	%some checks
+-	if numprofiles==0
+-		disp('no profile to be closed')
+-		return
+-	end
+-
+-	title('click on the profiles to be closed, RETURN to exit','FontSize',14)
+-	hold on
+-
+-	loop=1;
+-	selection=[];
+-
+-	while loop
+-
+-		%some checks,
+-		if numprofiles==0    
+-			disp('no profile present, exiting...')
+-			return            
+-		end  
+-		if ~any(~closed),
+-			disp('All the profiles are closed, exiting...')
+-			return
+-		end
+-
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-
+-			%get closest profile
+-			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
+-
+-			if ismember(profsel,selection)
+-				%profile was in selection, remove it from the selection
+-				selection(find(selection==profsel))=[];
+-				%back to regular color
+-				plot(A(profsel).x,A(profsel).y,...
+-					'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-			elseif closed(profsel),
+-				%profile already closed, do nothing
+-				disp('selected profile aready closed, make another selection'),
+-			else
+-				%add the profile to the list to be closed
+-				selection(end+1)=profsel;
+-				%in selectioncolor
+-				plot(A(profsel).x,A(profsel).y,...
+-					'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-			end
+-		else
+-			%close the profiles
+-			for i=1:length(selection),
+-				A(selection(i)).x(end+1)=A(selection(i)).x(1);
+-				A(selection(i)).y(end+1)=A(selection(i)).y(1);
+-				numpoints=numpoints+1;
+-				closed(selection(i))=1;
+-			end
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/closestpoint.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/closestpoint.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/closestpoint.m	(revision 15937)
+@@ -1,21 +0,0 @@
+-function [profsel indsel]=closestpoint(A,numprofiles,xi,yi)
+-%CLOSESTPOINT - find the closest point of a profile
+-%
+-%   This routine find the point of the profile A that is the closest
+-%   to (xi,yi) and return the number of the profile and the number of
+-%   the point
+-%
+-%   Usage:
+-%     [profsel indsel]=closestpoint(A,numprofiles,xi,yi) 
+-
+-	%loop over the points of each profile, find the closest to (xi,yi)
+-	for i=1:numprofiles,
+-		distance=(xi-A(i).x).^2+(yi-A(i).y).^2;
+-		[newdistance p]=min(distance);
+-		if ((i==1) | (newdistance<olddistance)),
+-			indsel=p;
+-			profsel=i;
+-			olddistance=newdistance;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/undoplots.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/undoplots.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/undoplots.m	(revision 15937)
+@@ -1,12 +0,0 @@
+-function  undoplots(prevplot)
+-%UNDOPLOTS - undo plots
+-%
+-%   Usage:undoplots(prevplot)
+-
+-	%erase all previous plots
+-	g=get(gca,'children');
+-	L=length(g);
+-	for i=1:L-prevplot
+-		delete(g(i));
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/removepoints.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removepoints.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/removepoints.m	(revision 15937)
+@@ -1,85 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=removepoints(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%REMOVEPOINTS - remove a point from a profile
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=removepoints(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	%some checks
+-	if numprofiles==0
+-		disp('no profile present, exiting...')
+-		return
+-	end
+-
+-	hold on
+-	loop=1;
+-
+-	%plot squares
+-	for i=1:numprofiles
+-		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-
+-	end
+-
+-	while loop
+-
+-		%check that at least one point is present
+-		if numpoints==0
+-			disp('at least one point are needed')
+-			return
+-		end	   
+-
+-		%select a point to be deleted
+-		title('click on the point to be removed, RETURN to exit','FontSize',14)
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-
+-			%get the closest point
+-			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
+-
+-			%remove point of A
+-			A(profsel).x(indsel)=[];
+-			A(profsel).y(indsel)=[];
+-
+-			%unclose the domain if only 2 points remaining
+-			if closed(profsel)
+-				if length(A(profsel).x)==3
+-					A(profsel).x(end)=[];
+-					A(profsel).y(end)=[];
+-					numpoints=numpoints-1;
+-					closed(profsel)=0;
+-				end
+-			end
+-
+-			%remove the last point if the profile is closed and indsel=end or 1
+-			if closed(profsel)
+-				if indsel==1 
+-					A(profsel).x(end)=A(profsel).x(1);
+-					A(profsel).y(end)=A(profsel).y(1);
+-				elseif indsel==length(A(profsel).x)
+-					A(profsel).x(1)=A(profsel).x(end);
+-					A(profsel).y(1)=A(profsel).y(end);
+-				end
+-			end
+-			numpoints=numpoints-1;
+-
+-			%plot new profile
+-			undoplots(prevplot);
+-			for i=1:numprofiles
+-				plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-					'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-				if length(A(i).x)==1
+-					plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-						'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker','o');
+-				end
+-			end
+-
+-		else
+-			%RETURN-> exit
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/closestsegment.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/closestsegment.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/closestsegment.m	(revision 15937)
+@@ -1,28 +0,0 @@
+-function [profsel indsel]=closestsegment(A,numprofiles,xi,yi)
+-%CLOSESTSEGMENT - find the closest segment of a profile
+-%
+-%   This routine find the segment of the profile A that is the closest
+-%   to (xi,yi) and return the number of the profile and the number of
+-%   the first point belonging to this closest segment
+-%
+-%   Usage:
+-%     [profsel indsel]=closestsegment(A,numprofiles,xi,yi) 
+-
+-	%loop over the middles of each profile, find the closest to (xi,yi)
+-	profsel=0;
+-	indsel=0;
+-	first=1;
+-	for i=1:numprofiles,
+-		if length(A(i).x)>1
+-			middles=[(A(i).x(1:end-1)+A(i).x(2:end))/2 (A(i).y(1:end-1)+A(i).y(2:end))/2];
+-			distance=(xi-middles(:,1)).^2+(yi-middles(:,2)).^2;
+-			[newdistance p]=min(distance);
+-			if (first | (newdistance<olddistance)),
+-				first=0;
+-				indsel=p;
+-				profsel=i;
+-				olddistance=newdistance;
+-			end
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/addendprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addendprofile.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/addendprofile.m	(revision 15937)
+@@ -1,86 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=addendprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%ADDENDPROFILE - add point at the end of a n existing profile
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=addendprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	%some checks
+-	if numprofiles==0
+-		disp('no profile present, exiting...')
+-		return
+-	end	   
+-	if ~any(~closed)
+-		disp('all profiles are closed')
+-		return
+-	end	   
+-	%select a profile first
+-	if numprofiles>1
+-		%first step, select a profile
+-		isclosed=1;
+-		title('click on a profile, RETURN to exit','FontSize',14)
+-		while isclosed
+-			[xi,yi] = ginput(1);
+-			if ~isempty(xi)
+-				%get the closest point 
+-				[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
+-				if closed(profsel)
+-					disp('selected profile is closed, make another selection')
+-				else
+-					isclosed=0;
+-				end
+-
+-			else
+-				%RETURN -> out
+-				return
+-			end
+-		end
+-	else
+-		profsel=1;
+-	end
+-
+-	%initialize x and y
+-	x=A(profsel).x;
+-	y=A(profsel).y;
+-
+-	%plot the selected profile
+-	hold on
+-	plot(x,y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-		'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-	plot(x(end),y(end),'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-
+-	loop=1;
+-	while loop
+-
+-		%first step, select a profile
+-		title('click to add point to the selected profile, RETURN to exit','FontSize',14)
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-			x(end+1,1)=xi;
+-			y(end+1,1)=yi;
+-
+-			%plot everything
+-			undoplots(prevplot);
+-			plot(x,y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-				'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-			plot(x(end),y(end),'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize')+2,'Marker',getfieldvalue(options,'Marker'));
+-
+-		else
+-
+-			%check that the profile is not empty
+-			if ~isempty(x)
+-				A(profsel).x=x; 
+-				A(profsel).y=y; 
+-				A(profsel).name=root; 
+-				A(profsel).density=1; 
+-				numpoints=numpoints+length(x);
+-			end
+-
+-			%get out
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/addcontour.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addcontour.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/addcontour.m	(revision 15937)
+@@ -1,50 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=addcontour(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%ADDCONTOUR - add a closed contour
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=addcontour(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	title('click to add a point to the new profile, RETURN to exit','FontSize',14)
+-	hold on
+-
+-	loop=1;
+-	x=[];
+-	y=[];
+-
+-	while loop
+-
+-		[xi,yi] = ginput(1);
+-
+-		if ~isempty(xi)
+-			x(end+1,1)=xi;
+-			y(end+1,1)=yi;
+-
+-			%plot everything
+-			undoplots(prevplot);
+-			plot(x,y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-				'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-			plot(x(end),y(end),'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-
+-		else
+-
+-			%check that the profile is not empty
+-			if ~isempty(x)
+-				x(end+1)=x(1);
+-				y(end+1)=y(1);
+-				A(end+1).x=x; 
+-				A(end).y=y; 
+-				A(end).name=root; 
+-				A(end).density=1; 
+-				numprofiles=numprofiles+1;
+-				numpoints=numpoints+length(x);
+-				closed(end+1)=1;
+-			end
+-
+-			%get out
+-			loop=0;
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/mergeprofiles.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/mergeprofiles.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/mergeprofiles.m	(revision 15937)
+@@ -1,152 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=mergeprofiles(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%MERGEPROFILES - merge profiles
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile. The user must select the two tips that
+-%   he/she wants to merge
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=mergeprofiles(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-hold on
+-loop=1;
+-
+-%Take all the tips coordinates of open profiles
+-counter=1; tips=[];
+-for i=1:numprofiles
+-	if ~closed(i),
+-		%x and y coord, profile number, 1 if beginning, 2 and if end
+-		if length(A(i).x)==1,
+-			tips(counter,:)=[A(i).x(1)   A(i).y(1)   i  1];
+-			counter=counter+1;
+-		else
+-			tips(counter,:)=[A(i).x(1)   A(i).y(1)   i  1];
+-			tips(counter+1,:) = [A(i).x(end) A(i).y(end) i  2];
+-			counter=counter+2;
+-		end
+-	end
+-end
+-
+-if size(tips,1)<2
+-	disp('at least one unclosed profile is required')
+-	return
+-end
+-
+-%plot the tips only
+-plot(tips(:,1),tips(:,2),...
+-	'LineStyle','none','MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-firsttip=1;
+-
+-%loop (at least 2 clicks needed)
+-while loop
+-
+-	%some checks
+-	if size(tips,1)<2
+-		disp('at least one unclosed profiles are required')
+-		return
+-	end
+-
+-	%select a point
+-	if firsttip
+-		title('click on the first tip, RETURN to exit','FontSize',14)
+-	else
+-		title('click on the second tip, RETURN to exit','FontSize',14)
+-	end
+-
+-	[xi,yi] = ginput(1);
+-
+-	if ~isempty(xi)
+-
+-		if firsttip
+-			%find the selected tip
+-			distance=(xi-tips(:,1)).^2+(yi-tips(:,2)).^2;
+-			[dmin tip1]=min(distance);
+-			numprofile1=tips(tip1,3);
+-			firsttip=0;
+-
+-			%remove tip1 from tips list
+-			newtips=tips;
+-			newtips(tip1,:)=[];
+-
+-			%plot selected tip
+-			plot(tips(tip1,1),tips(tip1,2),...
+-				'LineStyle','none','MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-			plot(A(numprofile1).x,A(numprofile1).y,...
+-				'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-
+-		%second selection
+-		else
+-			distance=(xi-newtips(:,1)).^2+(yi-newtips(:,2)).^2;
+-			[dmin tip2]=min(distance);
+-			numprofile2=newtips(tip2,3);
+-
+-			if numprofile1==numprofile2
+-				%close the profile
+-				A(numprofile1).x(end+1)=A(numprofile1).x(1);
+-				A(numprofile1).y(end+1)=A(numprofile1).y(1);
+-				numpoints=numpoints+1;
+-				closed(numprofile1)=1;
+-
+-			else
+-
+-				if tips(tip1,4)==1 & newtips(tip2,4)==1,
+-					A(numprofile1).x=[flipud(A(numprofile2).x); A(numprofile1).x];
+-					A(numprofile1).y=[flipud(A(numprofile2).y); A(numprofile1).y];
+-					numprofiles=numprofiles-1;
+-
+-				elseif tips(tip1,4)==1 & newtips(tip2,4)==2,
+-					A(numprofile1).x=[A(numprofile2).x; A(numprofile1).x];
+-					A(numprofile1).y=[A(numprofile2).y; A(numprofile1).y];
+-					numprofiles=numprofiles-1;
+-
+-				elseif tips(tip1,4)==2 & newtips(tip2,4)==1,
+-					A(numprofile1).x=[A(numprofile1).x; A(numprofile2).x];
+-					A(numprofile1).y=[A(numprofile1).y; A(numprofile2).y];
+-					numprofiles=numprofiles-1;
+-
+-				elseif tips(tip1,4)==2 & newtips(tip2,4)==2,
+-					A(numprofile1).x=[A(numprofile1).x; flipud(A(numprofile2).x)];
+-					A(numprofile1).y=[A(numprofile1).y; flipud(A(numprofile2).y)];
+-					numprofiles=numprofiles-1;
+-				end
+-
+-				%delete profile2
+-				A(numprofile2)=[];
+-				closed(numprofile2)=[];
+-
+-			end
+-
+-			%update tips
+-			counter=1; tips=[];
+-			for i=1:numprofiles
+-				if ~closed(i),
+-					%x and y coord, profile number, 1 if beginning, 2 and if end
+-					if length(A(i).x)==1,
+-						tips(counter,:)=[A(i).x(1)   A(i).y(1)   i  1];
+-						counter=counter+1;
+-					else
+-						tips(counter,:)=[A(i).x(1)   A(i).y(1)   i  1];
+-						tips(counter+1,:) = [A(i).x(end) A(i).y(end) i  2];
+-						counter=counter+2;
+-					end
+-				end
+-			end
+-
+-			%plot new profile
+-			undoplots(prevplot);
+-			for i=1:numprofiles
+-				plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
+-			end
+-			if ~isempty(tips)
+-				plot(tips(:,1),tips(:,2),...
+-					'LineStyle','none','MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-			end
+-
+-			%back to beginning
+-			firsttip=1;
+-		end
+-	else
+-		%RETRUN-> quit
+-		loop=0;
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m	(revision 15936)
++++ ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m	(revision 15937)
+@@ -1,79 +0,0 @@
+-function [A,numprofiles,numpoints,closed]=addinsideprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-%ADDINSIDEPROFILE - add apoint inside a profile
+-%
+-%   this script is used by exptool as an elementary operation
+-%   on an ARGUS profile
+-%
+-%   Usage:
+-%      [A,numprofiles,numpoints,closed]=addinsideprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-
+-	%some checks
+-	if numprofiles==0
+-		disp('no profile present, exiting...')
+-		return
+-	end	   
+-	if numpoints<2
+-		disp('at least two points are required, exiting...')
+-		return
+-	end	   
+-	hold on
+-
+-	%plot squares
+-	for i=1:numprofiles
+-		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-	end
+-
+-	loop=1;
+-	while loop
+-
+-		%first step, select a segment
+-		title('click on a segment, RETURN to exit','FontSize',14)
+-		[xi,yi] = ginput(1);
+-
+-		%first click
+-		if ~isempty(xi)
+-
+-			%get the closest segment
+-			[profsel indsel]=closestsegment(A,numprofiles,xi,yi);
+-
+-			%check that at least one segment exists
+-			if indsel==0
+-				disp('at least two points in one profile are required, exiting...')
+-				return
+-			end
+-
+-			%highlight selected segment
+-			plot([A(profsel).x(indsel) A(profsel).x(indsel+1)],[A(profsel).y(indsel) A(profsel).y(indsel+1)],...
+-				'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-				'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-
+-			%next click
+-			title('click on the new point''s location, RETURN to exit','FontSize',14)
+-			[xi,yi,but] = ginput(1);
+-
+-			%second click
+-			if ~isempty(xi)
+-
+-				%add point to A
+-				A(profsel).x=[A(profsel).x(1:indsel,1); xi; A(profsel).x(indsel+1:end,1)];
+-				A(profsel).y=[A(profsel).y(1:indsel,1); yi; A(profsel).y(indsel+1:end,1)];
+-				numpoints=numpoints+1;
+-
+-				%plot new profile
+-				undoplots(prevplot);
+-				for i=1:numprofiles
+-					plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
+-						'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
+-				end
+-
+-			else
+-				%RETURN->exit
+-				return
+-			end
+-		else
+-			%RETURN-> exit
+-			return
+-		end
+-	end
+-end
+Index: ../trunk-jpl/src/m/exp/operation/cutarea.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/cutarea.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/cutarea.m	(revision 15937)
+@@ -0,0 +1,156 @@
++function [A,numprofiles,numpoints,closed]=cutarea(A,numprofiles,numpoints,closed,prevplot,root,options)
++%CUTAREA - cut several point of a profile
++%
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile. The user must click 3 times to select the
++%   area to be removed. Twice to select the tips and one to select
++%   the part of the profile to be removed
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=cutarea(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	hold on
++	loop=1;
++
++	%plot squares
++	for i=1:numprofiles
++		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++	end
++
++	points=[];
++
++	%loop (at least 3 clicks needed)
++	while loop
++
++		%some checks
++		if numprofiles==0
++			disp('no profile present, exiting...')
++			return
++		end	   
++		if numpoints<3
++			disp('at least two points are needed, exiting...')
++			return
++		end	   
++
++		%select a point
++		if isempty(points)
++			title('click on the first tip, RETURN to exit','FontSize',14)
++		elseif length(points)==1
++			title('click on the second tip, RETURN to exit','FontSize',14)
++		else
++			title('click in the middle of the area to be cut, RETURN to exit','FontSize',14)
++		end
++
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++			%get the closest point
++			%first time, look at all profiles
++			if isempty(points)
++				[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
++				if ((closed(profsel) & length(A(profsel).x)<4) |  (~closed(profsel) & length(A(profsel).x)<3)),
++					disp('the selected profile has less than 3 points, make another selection');
++				else
++					selection=profsel;
++					points(end+1)=indsel;
++					plot(A(profsel).x,A(profsel).y,...
++						'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++					text(A(selection).x(indsel),A(selection).y(indsel),num2str(1),'FontSize',14,'background',[0.7 0.7 0.9]);
++				end
++			else
++				%get the 2d or 3d point for the given contou
++				[profsel indsel]=closestpoint(A(selection),1,xi,yi);
++				if ismember(indsel,points)
++					disp('the selected points must be distinct')
++				else
++					%second click?
++					if length(points)==1,
++						points(end+1)=indsel;
++						text(A(selection).x(indsel),A(selection).y(indsel),num2str(2),'FontSize',14,'background',[0.7 0.7 0.9]);
++					%third click?
++					else
++						p1=points(1); p2=points(2); p3=indsel;
++						x=A(selection).x; y=A(selection).y;
++						if p1<p2
++							if p3>p1 & p3<p2
++								if closed(selection)
++									%open the profile
++									n=length(A(selection).x);
++									A(selection).x=[A(selection).x(p2:end-1,1);A(selection).x(1:p1,1)];
++									A(selection).y=[A(selection).y(p2:end-1,1);A(selection).y(1:p1,1)];
++									numpoints=numpoints-(n-length(A(selection).x));
++									closed(selection)=0;
++								else
++									%cut in 2 profiles
++									A(selection).x=x(1:p1);
++									A(selection).y=y(1:p1);
++									closed(selection)=0;
++									A(end+1).x=x(p2:end);
++									A(end).y=y(p2:end);
++									A(end).density=A(selection).density;
++									A(end).name=A(selection).name;
++									closed(end+1)=0;
++									numprofiles=numprofiles+1;
++									numpoints=numpoints-(p2-p1-1);
++								end
++							else
++								%only point removal
++								n=length(A(selection).x);
++								A(selection).x=x(p1:p2);
++								A(selection).y=y(p1:p2);
++								numpoints=numpoints-(n-length(A(selection).x));
++								closed(selection)=0;
++							end
++						else
++							if p3>p2 & p3<p1
++								if closed(selection)
++									%open the profile
++									n=length(A(selection).x);
++									A(selection).x=[A(selection).x(p1:end-1,1);A(selection).x(1:p2,1)];
++									A(selection).y=[A(selection).y(p1:end-1,1);A(selection).y(1:p2,1)];
++									numpoints=numpoints-(n-length(A(selection).x));
++									closed(selection)=0;
++								else
++									%cut in 2 profiles
++									closed(selection)=0;
++									A(selection).x=x(1:p2);
++									A(selection).y=y(1:p2);
++									A(end+1).x=x(p1:end);
++									A(end).y=y(p1:end);
++									A(end).density=A(selection).density;
++									A(end).name=A(selection).name;
++									closed(end+1)=0;
++									numprofiles=numprofiles+1;
++									numpoints=numpoints-(p1-p2-1);
++								end
++							else
++								%only point removal
++								n=length(A(selection).x);
++								x(1:p2-1)=[];x(p1-p2+2:end)=[];%it should have been x(p2+1:end)
++								y(1:p2-1)=[];y(p1-p2+2:end)=[];
++								A(selection).x=x;
++								A(selection).y=y;
++								numpoints=numpoints-(n-length(A(selection).x));
++								closed(selection)=0;
++							end
++						end
++
++						%plot new profile
++						undoplots(prevplot);
++						for i=1:numprofiles
++							plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++								'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++						end
++						points=[];
++
++					end
++				end
++			end
++		else
++			%RETRUN-> quit
++			loop=0;
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/closeprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/closeprofile.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/closeprofile.m	(revision 15937)
+@@ -0,0 +1,68 @@
++function [A,numprofiles,numpoints,closed]=closeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++%CLOSEPROFILE - close one or several profile
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=closeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	%some checks
++	if numprofiles==0
++		disp('no profile to be closed')
++		return
++	end
++
++	title('click on the profiles to be closed, RETURN to exit','FontSize',14)
++	hold on
++
++	loop=1;
++	selection=[];
++
++	while loop
++
++		%some checks,
++		if numprofiles==0    
++			disp('no profile present, exiting...')
++			return            
++		end  
++		if ~any(~closed),
++			disp('All the profiles are closed, exiting...')
++			return
++		end
++
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++
++			%get closest profile
++			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
++
++			if ismember(profsel,selection)
++				%profile was in selection, remove it from the selection
++				selection(find(selection==profsel))=[];
++				%back to regular color
++				plot(A(profsel).x,A(profsel).y,...
++					'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++			elseif closed(profsel),
++				%profile already closed, do nothing
++				disp('selected profile aready closed, make another selection'),
++			else
++				%add the profile to the list to be closed
++				selection(end+1)=profsel;
++				%in selectioncolor
++				plot(A(profsel).x,A(profsel).y,...
++					'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++			end
++		else
++			%close the profiles
++			for i=1:length(selection),
++				A(selection(i)).x(end+1)=A(selection(i)).x(1);
++				A(selection(i)).y(end+1)=A(selection(i)).y(1);
++				numpoints=numpoints+1;
++				closed(selection(i))=1;
++			end
++			loop=0;
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/closestpoint.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/closestpoint.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/closestpoint.m	(revision 15937)
+@@ -0,0 +1,21 @@
++function [profsel indsel]=closestpoint(A,numprofiles,xi,yi)
++%CLOSESTPOINT - find the closest point of a profile
++%
++%   This routine find the point of the profile A that is the closest
++%   to (xi,yi) and return the number of the profile and the number of
++%   the point
++%
++%   Usage:
++%     [profsel indsel]=closestpoint(A,numprofiles,xi,yi) 
++
++	%loop over the points of each profile, find the closest to (xi,yi)
++	for i=1:numprofiles,
++		distance=(xi-A(i).x).^2+(yi-A(i).y).^2;
++		[newdistance p]=min(distance);
++		if ((i==1) | (newdistance<olddistance)),
++			indsel=p;
++			profsel=i;
++			olddistance=newdistance;
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/undoplots.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/undoplots.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/undoplots.m	(revision 15937)
+@@ -0,0 +1,12 @@
++function  undoplots(prevplot)
++%UNDOPLOTS - undo plots
++%
++%   Usage:undoplots(prevplot)
++
++	%erase all previous plots
++	g=get(gca,'children');
++	L=length(g);
++	for i=1:L-prevplot
++		delete(g(i));
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/removepoints.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/removepoints.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/removepoints.m	(revision 15937)
+@@ -0,0 +1,85 @@
++function [A,numprofiles,numpoints,closed]=removepoints(A,numprofiles,numpoints,closed,prevplot,root,options)
++%REMOVEPOINTS - remove a point from a profile
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=removepoints(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	%some checks
++	if numprofiles==0
++		disp('no profile present, exiting...')
++		return
++	end
++
++	hold on
++	loop=1;
++
++	%plot squares
++	for i=1:numprofiles
++		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++
++	end
++
++	while loop
++
++		%check that at least one point is present
++		if numpoints==0
++			disp('at least one point are needed')
++			return
++		end	   
++
++		%select a point to be deleted
++		title('click on the point to be removed, RETURN to exit','FontSize',14)
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++
++			%get the closest point
++			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
++
++			%remove point of A
++			A(profsel).x(indsel)=[];
++			A(profsel).y(indsel)=[];
++
++			%unclose the domain if only 2 points remaining
++			if closed(profsel)
++				if length(A(profsel).x)==3
++					A(profsel).x(end)=[];
++					A(profsel).y(end)=[];
++					numpoints=numpoints-1;
++					closed(profsel)=0;
++				end
++			end
++
++			%remove the last point if the profile is closed and indsel=end or 1
++			if closed(profsel)
++				if indsel==1 
++					A(profsel).x(end)=A(profsel).x(1);
++					A(profsel).y(end)=A(profsel).y(1);
++				elseif indsel==length(A(profsel).x)
++					A(profsel).x(1)=A(profsel).x(end);
++					A(profsel).y(1)=A(profsel).y(end);
++				end
++			end
++			numpoints=numpoints-1;
++
++			%plot new profile
++			undoplots(prevplot);
++			for i=1:numprofiles
++				plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++					'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++				if length(A(i).x)==1
++					plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++						'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker','o');
++				end
++			end
++
++		else
++			%RETURN-> exit
++			loop=0;
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/closestsegment.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/closestsegment.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/closestsegment.m	(revision 15937)
+@@ -0,0 +1,28 @@
++function [profsel indsel]=closestsegment(A,numprofiles,xi,yi)
++%CLOSESTSEGMENT - find the closest segment of a profile
++%
++%   This routine find the segment of the profile A that is the closest
++%   to (xi,yi) and return the number of the profile and the number of
++%   the first point belonging to this closest segment
++%
++%   Usage:
++%     [profsel indsel]=closestsegment(A,numprofiles,xi,yi) 
++
++	%loop over the middles of each profile, find the closest to (xi,yi)
++	profsel=0;
++	indsel=0;
++	first=1;
++	for i=1:numprofiles,
++		if length(A(i).x)>1
++			middles=[(A(i).x(1:end-1)+A(i).x(2:end))/2 (A(i).y(1:end-1)+A(i).y(2:end))/2];
++			distance=(xi-middles(:,1)).^2+(yi-middles(:,2)).^2;
++			[newdistance p]=min(distance);
++			if (first | (newdistance<olddistance)),
++				first=0;
++				indsel=p;
++				profsel=i;
++				olddistance=newdistance;
++			end
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/addendprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/addendprofile.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/addendprofile.m	(revision 15937)
+@@ -0,0 +1,86 @@
++function [A,numprofiles,numpoints,closed]=addendprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++%ADDENDPROFILE - add point at the end of a n existing profile
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=addendprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	%some checks
++	if numprofiles==0
++		disp('no profile present, exiting...')
++		return
++	end	   
++	if ~any(~closed)
++		disp('all profiles are closed')
++		return
++	end	   
++	%select a profile first
++	if numprofiles>1
++		%first step, select a profile
++		isclosed=1;
++		title('click on a profile, RETURN to exit','FontSize',14)
++		while isclosed
++			[xi,yi] = ginput(1);
++			if ~isempty(xi)
++				%get the closest point 
++				[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
++				if closed(profsel)
++					disp('selected profile is closed, make another selection')
++				else
++					isclosed=0;
++				end
++
++			else
++				%RETURN -> out
++				return
++			end
++		end
++	else
++		profsel=1;
++	end
++
++	%initialize x and y
++	x=A(profsel).x;
++	y=A(profsel).y;
++
++	%plot the selected profile
++	hold on
++	plot(x,y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++		'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++	plot(x(end),y(end),'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++
++	loop=1;
++	while loop
++
++		%first step, select a profile
++		title('click to add point to the selected profile, RETURN to exit','FontSize',14)
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++			x(end+1,1)=xi;
++			y(end+1,1)=yi;
++
++			%plot everything
++			undoplots(prevplot);
++			plot(x,y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++				'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++			plot(x(end),y(end),'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize')+2,'Marker',getfieldvalue(options,'Marker'));
++
++		else
++
++			%check that the profile is not empty
++			if ~isempty(x)
++				A(profsel).x=x; 
++				A(profsel).y=y; 
++				A(profsel).name=root; 
++				A(profsel).density=1; 
++				numpoints=numpoints+length(x);
++			end
++
++			%get out
++			loop=0;
++		end
++	end
++end
+
+Property changes on: ../trunk-jpl/src/m/exp/operation/addendprofile.m
+___________________________________________________________________
+Added: svn:executable
+\ No newline at end of property
+Index: ../trunk-jpl/src/m/exp/operation/addcontour.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/addcontour.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/addcontour.m	(revision 15937)
+@@ -0,0 +1,50 @@
++function [A,numprofiles,numpoints,closed]=addcontour(A,numprofiles,numpoints,closed,prevplot,root,options)
++%ADDCONTOUR - add a closed contour
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=addcontour(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	title('click to add a point to the new profile, RETURN to exit','FontSize',14)
++	hold on
++
++	loop=1;
++	x=[];
++	y=[];
++
++	while loop
++
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++			x(end+1,1)=xi;
++			y(end+1,1)=yi;
++
++			%plot everything
++			undoplots(prevplot);
++			plot(x,y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++				'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++			plot(x(end),y(end),'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++
++		else
++
++			%check that the profile is not empty
++			if ~isempty(x)
++				x(end+1)=x(1);
++				y(end+1)=y(1);
++				A(end+1).x=x; 
++				A(end).y=y; 
++				A(end).name=root; 
++				A(end).density=1; 
++				numprofiles=numprofiles+1;
++				numpoints=numpoints+length(x);
++				closed(end+1)=1;
++			end
++
++			%get out
++			loop=0;
++		end
++	end
++end
+
+Property changes on: ../trunk-jpl/src/m/exp/operation/addcontour.m
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/m/exp/operation/mergeprofiles.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/mergeprofiles.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/mergeprofiles.m	(revision 15937)
+@@ -0,0 +1,152 @@
++function [A,numprofiles,numpoints,closed]=mergeprofiles(A,numprofiles,numpoints,closed,prevplot,root,options)
++%MERGEPROFILES - merge profiles
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile. The user must select the two tips that
++%   he/she wants to merge
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=mergeprofiles(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++hold on
++loop=1;
++
++%Take all the tips coordinates of open profiles
++counter=1; tips=[];
++for i=1:numprofiles
++	if ~closed(i),
++		%x and y coord, profile number, 1 if beginning, 2 and if end
++		if length(A(i).x)==1,
++			tips(counter,:)=[A(i).x(1)   A(i).y(1)   i  1];
++			counter=counter+1;
++		else
++			tips(counter,:)=[A(i).x(1)   A(i).y(1)   i  1];
++			tips(counter+1,:) = [A(i).x(end) A(i).y(end) i  2];
++			counter=counter+2;
++		end
++	end
++end
++
++if size(tips,1)<2
++	disp('at least one unclosed profile is required')
++	return
++end
++
++%plot the tips only
++plot(tips(:,1),tips(:,2),...
++	'LineStyle','none','MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++firsttip=1;
++
++%loop (at least 2 clicks needed)
++while loop
++
++	%some checks
++	if size(tips,1)<2
++		disp('at least one unclosed profiles are required')
++		return
++	end
++
++	%select a point
++	if firsttip
++		title('click on the first tip, RETURN to exit','FontSize',14)
++	else
++		title('click on the second tip, RETURN to exit','FontSize',14)
++	end
++
++	[xi,yi] = ginput(1);
++
++	if ~isempty(xi)
++
++		if firsttip
++			%find the selected tip
++			distance=(xi-tips(:,1)).^2+(yi-tips(:,2)).^2;
++			[dmin tip1]=min(distance);
++			numprofile1=tips(tip1,3);
++			firsttip=0;
++
++			%remove tip1 from tips list
++			newtips=tips;
++			newtips(tip1,:)=[];
++
++			%plot selected tip
++			plot(tips(tip1,1),tips(tip1,2),...
++				'LineStyle','none','MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++			plot(A(numprofile1).x,A(numprofile1).y,...
++				'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++
++		%second selection
++		else
++			distance=(xi-newtips(:,1)).^2+(yi-newtips(:,2)).^2;
++			[dmin tip2]=min(distance);
++			numprofile2=newtips(tip2,3);
++
++			if numprofile1==numprofile2
++				%close the profile
++				A(numprofile1).x(end+1)=A(numprofile1).x(1);
++				A(numprofile1).y(end+1)=A(numprofile1).y(1);
++				numpoints=numpoints+1;
++				closed(numprofile1)=1;
++
++			else
++
++				if tips(tip1,4)==1 & newtips(tip2,4)==1,
++					A(numprofile1).x=[flipud(A(numprofile2).x); A(numprofile1).x];
++					A(numprofile1).y=[flipud(A(numprofile2).y); A(numprofile1).y];
++					numprofiles=numprofiles-1;
++
++				elseif tips(tip1,4)==1 & newtips(tip2,4)==2,
++					A(numprofile1).x=[A(numprofile2).x; A(numprofile1).x];
++					A(numprofile1).y=[A(numprofile2).y; A(numprofile1).y];
++					numprofiles=numprofiles-1;
++
++				elseif tips(tip1,4)==2 & newtips(tip2,4)==1,
++					A(numprofile1).x=[A(numprofile1).x; A(numprofile2).x];
++					A(numprofile1).y=[A(numprofile1).y; A(numprofile2).y];
++					numprofiles=numprofiles-1;
++
++				elseif tips(tip1,4)==2 & newtips(tip2,4)==2,
++					A(numprofile1).x=[A(numprofile1).x; flipud(A(numprofile2).x)];
++					A(numprofile1).y=[A(numprofile1).y; flipud(A(numprofile2).y)];
++					numprofiles=numprofiles-1;
++				end
++
++				%delete profile2
++				A(numprofile2)=[];
++				closed(numprofile2)=[];
++
++			end
++
++			%update tips
++			counter=1; tips=[];
++			for i=1:numprofiles
++				if ~closed(i),
++					%x and y coord, profile number, 1 if beginning, 2 and if end
++					if length(A(i).x)==1,
++						tips(counter,:)=[A(i).x(1)   A(i).y(1)   i  1];
++						counter=counter+1;
++					else
++						tips(counter,:)=[A(i).x(1)   A(i).y(1)   i  1];
++						tips(counter+1,:) = [A(i).x(end) A(i).y(end) i  2];
++						counter=counter+2;
++					end
++				end
++			end
++
++			%plot new profile
++			undoplots(prevplot);
++			for i=1:numprofiles
++				plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++			end
++			if ~isempty(tips)
++				plot(tips(:,1),tips(:,2),...
++					'LineStyle','none','MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++			end
++
++			%back to beginning
++			firsttip=1;
++		end
++	else
++		%RETRUN-> quit
++		loop=0;
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/addinsideprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/addinsideprofile.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/addinsideprofile.m	(revision 15937)
+@@ -0,0 +1,79 @@
++function [A,numprofiles,numpoints,closed]=addinsideprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++%ADDINSIDEPROFILE - add apoint inside a profile
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=addinsideprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	%some checks
++	if numprofiles==0
++		disp('no profile present, exiting...')
++		return
++	end	   
++	if numpoints<2
++		disp('at least two points are required, exiting...')
++		return
++	end	   
++	hold on
++
++	%plot squares
++	for i=1:numprofiles
++		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++	end
++
++	loop=1;
++	while loop
++
++		%first step, select a segment
++		title('click on a segment, RETURN to exit','FontSize',14)
++		[xi,yi] = ginput(1);
++
++		%first click
++		if ~isempty(xi)
++
++			%get the closest segment
++			[profsel indsel]=closestsegment(A,numprofiles,xi,yi);
++
++			%check that at least one segment exists
++			if indsel==0
++				disp('at least two points in one profile are required, exiting...')
++				return
++			end
++
++			%highlight selected segment
++			plot([A(profsel).x(indsel) A(profsel).x(indsel+1)],[A(profsel).y(indsel) A(profsel).y(indsel+1)],...
++				'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++				'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++
++			%next click
++			title('click on the new point''s location, RETURN to exit','FontSize',14)
++			[xi,yi,but] = ginput(1);
++
++			%second click
++			if ~isempty(xi)
++
++				%add point to A
++				A(profsel).x=[A(profsel).x(1:indsel,1); xi; A(profsel).x(indsel+1:end,1)];
++				A(profsel).y=[A(profsel).y(1:indsel,1); yi; A(profsel).y(indsel+1:end,1)];
++				numpoints=numpoints+1;
++
++				%plot new profile
++				undoplots(prevplot);
++				for i=1:numprofiles
++					plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++						'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++				end
++
++			else
++				%RETURN->exit
++				return
++			end
++		else
++			%RETURN-> exit
++			return
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/addprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/addprofile.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/addprofile.m	(revision 15937)
+@@ -0,0 +1,48 @@
++function [A,numprofiles,numpoints,closed]=addprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++%ADDPROFILE - add a profile
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=addprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	title('click to add a point to the new profile, RETURN to exit','FontSize',14)
++	hold on
++
++	loop=1;
++	x=[];
++	y=[];
++
++	while loop
++
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++			x(end+1,1)=xi;
++			y(end+1,1)=yi;
++
++			%plot everything
++			undoplots(prevplot);
++			plot(x,y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++				'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++			plot(x(end),y(end),'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++
++		else
++
++			%check that the profile is not empty
++			if ~isempty(x)
++				A(end+1).x=x; 
++				A(end).y=y; 
++				A(end).name=root; 
++				A(end).density=1; 
++				numprofiles=numprofiles+1;
++				numpoints=numpoints+length(x);
++				closed(end+1)=0;
++			end
++
++			%get out
++			loop=0;
++		end
++	end
++end
+
+Property changes on: ../trunk-jpl/src/m/exp/operation/addprofile.m
+___________________________________________________________________
+Added: svn:executable
+\ No newline at end of property
+Index: ../trunk-jpl/src/m/exp/operation/cutprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/cutprofile.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/cutprofile.m	(revision 15937)
+@@ -0,0 +1,79 @@
++function [A,numprofiles,numpoints,closed]=cutprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++%CUTPROFILE - cut a profile
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=cutprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	%some checks
++	if numprofiles==0
++		disp('no profile present, exiting...')
++		return
++	end	   
++	if numpoints<2
++		disp('at least two points are needed')
++		return
++	end	   
++	hold on
++
++	%plot squares
++	for i=1:numprofiles
++		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++	end
++
++	loop=1;
++	while loop
++
++		%select a segment
++		title('click the segment to cut, RETURN to exit','FontSize',14)
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++
++			%get the closest segment
++			[profsel indsel]=closestsegment(A,numprofiles,xi,yi);
++
++			%check that at least one segment exists
++			if indsel==0
++				disp('at least 2 points are required');
++				return,
++			end
++
++			if ((closed(profsel) & length(A(profsel).x)<3) | (~closed(profsel) & length(A(profsel).x)<2))
++				disp('at least 2 points are required, make another selection');
++			else
++				%cut A
++				if closed(profsel)
++					%open the contour
++					A(profsel).x=[A(profsel).x(indsel+1:end-1,1);A(profsel).x(1:indsel,1)];
++					A(profsel).y=[A(profsel).y(indsel+1:end-1,1);A(profsel).y(1:indsel,1)];
++					numpoints=numpoints-1;
++					closed(profsel)=0;
++				else
++					%cut the contour in 2 profiles
++					A(end+1).x=A(profsel).x(indsel+1:end,1);
++					A(end).y=A(profsel).y(indsel+1:end,1);
++					A(end).name=root; 
++					A(end).density=1; 
++					A(profsel).x=A(profsel).x(1:indsel,1);
++					A(profsel).y=A(profsel).y(1:indsel,1);
++					numprofiles=numprofiles+1;
++					closed(end+1)=0;
++				end
++
++				%plot new profile
++				undoplots(prevplot);
++				for i=1:numprofiles
++					plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++						'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++				end
++			end
++		else
++			%RETURN->exit
++			loop=0;
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/modifyposition.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/modifyposition.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/modifyposition.m	(revision 15937)
+@@ -0,0 +1,77 @@
++function [A,numprofiles,numpoints,closed]=modifyposition(A,numprofiles,numpoints,closed,prevplot,root,options)
++%MODIFYPOSITION - modify the prosition of a point of a profile
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=modifyposition(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	%some checks
++	if numprofiles==0
++		disp('no profile present, exiting..')
++		return
++	end
++
++	hold on
++	loop=1;
++
++	%plot squares
++	for i=1:numprofiles
++		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++	end
++
++	while loop
++
++		%select a point to be modified 
++		title('click on the point to be modified, RETURN to exit','FontSize',14)
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++
++			%get the closest point
++			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
++
++			%plot the point in blue
++			plot(A(profsel).x(indsel),A(profsel).y(indsel),...
++				'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++				'MarkerEdgeColor',getfieldvalue(options,'selectioncolor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++
++			%select new location
++			title('click on the new location, RETURN to exit','FontSize',14)
++			[xi,yi] = ginput(1);
++
++			if ~isempty(xi)
++
++				%modification of its coordinates
++				A(profsel).x(indsel)=xi;
++				A(profsel).y(indsel)=yi;
++
++				%modify the last point if the profile is closed and indsel=end or 1
++				if closed(profsel)
++					if indsel==1 
++						A(profsel).x(end)=xi;
++						A(profsel).y(end)=yi;
++					elseif indsel==length(A(profsel).x)
++						A(profsel).x(1)=xi;
++						A(profsel).y(1)=yi;
++					end
++				end
++
++				%plot new profile
++				undoplots(prevplot);
++				for i=1:numprofiles
++					plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++						'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++				end
++			else
++				%RETURN-> exit
++				loop=0;
++			end
++		else
++			%RETURN-> exit
++			loop=0;
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/removeseveralpoints.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/removeseveralpoints.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/removeseveralpoints.m	(revision 15937)
+@@ -0,0 +1,130 @@
++function [A,numprofiles,numpoints,closed]=removeseveralpoints(A,numprofiles,numpoints,closed,prevplot,root,options)
++%REMOVESEVERALPOINTS - remove several point
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=removeseveralpoints(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	%some checks
++	if numprofiles==0
++		disp('no profile present, exiting...')
++		return
++	end	   
++	if numpoints<3
++		disp('at least 3 points are required, exiting...')
++		return
++	end	   
++	hold on
++	loop=1;
++
++	%plot squares
++	for i=1:numprofiles
++		plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++			'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++	end
++
++	points=[];
++
++	%loop (at least 3 clicks needed)
++	while loop
++
++		%some checks
++		if numpoints<3
++			disp('at least 3 points are required, exiting...')
++			return
++		end
++
++		%select a point
++		if isempty(points)
++			title('click on the first tip, RETURN to exit','FontSize',14)
++		elseif length(points)==1
++			title('click on the second tip, RETURN to exit','FontSize',14)
++		else
++			title('click in the middle of the area to be removed, RETURN to exit','FontSize',14)
++		end
++
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++			%get the closest point
++			%first time, look at all profiles
++			if isempty(points)
++				[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
++				if ((closed(profsel) & length(A(profsel).x)<4) |  (~closed(profsel) & length(A(profsel).x)<3)),
++					disp('the selected profile has less than 3 points, make another selection');
++				else
++					selection=profsel;
++					points(end+1)=indsel;
++					plot(A(profsel).x,A(profsel).y,...
++						'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++					text(A(selection).x(indsel),A(selection).y(indsel),num2str(1),'FontSize',14,'background',[0.7 0.7 0.9]);
++				end
++				%disp(['p1= ' num2str(indsel)]),
++			else
++				%get the 2d or 3d point for the given contou
++				[profsel indsel]=closestpoint(A(selection),1,xi,yi);
++				if ismember(indsel,points)
++					disp('the selected points must be distinct')
++				else
++					%second click?
++					if length(points)==1,
++						points(end+1)=indsel;
++						text(A(selection).x(indsel),A(selection).y(indsel),num2str(2),'FontSize',14,'background',[0.7 0.7 0.9]);
++						%disp(['p2= ' num2str(indsel)]),
++					%third click?
++					else
++						p1=points(1); p2=points(2); p3=indsel;
++						%disp(['p3= ' num2str(indsel)]),
++						if p1<p2
++							if p3>p1 & p3<p2
++								A(selection).x(p1+1:p2-1)=[];
++								A(selection).y(p1+1:p2-1)=[];
++								numpoints=numpoints-(p2-p1-1);
++							else
++								A(selection).x=A(selection).x(p1:p2);
++								A(selection).y=A(selection).y(p1:p2);
++								numpoints=numpoints-(numpoints-1-p2)-(p1-1);
++								if closed(selection)
++									%reattach the tips
++									A(selection).x(end+1)=A(selection).x(1);
++									A(selection).y(end+1)=A(selection).y(1);
++									numpoints=numpoints+1;
++								end
++							end
++						else
++							if p3>p2 & p3<p1
++								A(selection).x(p2+1:p1-1)=[];
++								A(selection).y(p2+1:p1-1)=[];
++								numpoints=numpoints-(p1-p2-1);
++							else
++								A(selection).x=A(selection).x(p2:p1);
++								A(selection).y=A(selection).y(p2:p1);
++								numpoints=numpoints-(numpoints-1-p1)-(p2-1);
++								if closed(selection)
++									%reattach the tips
++									A(selection).x(end+1)=A(selection).x(1);
++									A(selection).y(end+1)=A(selection).y(1);
++									numpoints=numpoints+1;
++								end
++							end
++						end
++
++						%plot new profiles
++						undoplots(prevplot);
++						for i=1:numprofiles
++							plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),...
++								'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker',getfieldvalue(options,'Marker'));
++						end
++						points=[];
++
++					end
++				end
++			end
++		else
++			%RETRUN-> quit
++			loop=0;
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/removeprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/removeprofile.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/removeprofile.m	(revision 15937)
+@@ -0,0 +1,56 @@
++function [A,numprofiles,numpoints,closed]=removeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++%REMOVEPROFILE - delete a profile
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=removeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	title('click on the profiles to be removed, RETURN to exit','FontSize',14)
++	hold on
++
++	loop=1;
++	selection=[];
++
++	while loop
++
++		%some checks
++		if numprofiles==0
++			disp('no profile to be removed, exiting...')
++			return
++		end
++
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++
++			%get closest profile
++			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
++
++			if ismember(profsel,selection)
++				%profile was in selection, remove it
++				selection(find(selection==profsel))=[];
++				%back to regular color
++				plot(A(profsel).x,A(profsel).y,...
++					'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++			else
++				%add the profile to the list to be removed
++				selection(end+1)=profsel;
++				%in selectioncolor
++				plot(A(profsel).x,A(profsel).y,...
++					'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++			end
++		else
++			%remove the profiles
++			selection=sort(selection);
++			for i=1:length(selection),
++				numprofiles=numprofiles-1;
++				numpoints=numpoints-length(A(selection(i)-(i-1)).x);
++				A(selection(i)-(i-1))=[];
++				closed(selection(i)-(i-1))=[];
++			end
++			loop=0;
++		end
++	end
++end
+Index: ../trunk-jpl/src/m/exp/operation/orientprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation/orientprofile.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/operation/orientprofile.m	(revision 15937)
+@@ -0,0 +1,54 @@
++function [A,numprofiles,numpoints,closed]=orientprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++%ORIENTPROFILE - cahnge profile orientation
++%
++%   this script is used by exptool as an elementary operation
++%   on an ARGUS profile
++%
++%   Usage:
++%      [A,numprofiles,numpoints,closed]=orientprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
++
++	title('click on the profiles to be reoriented, RETURN to exit','FontSize',14)
++	hold on
++
++	loop=1;
++	selection=[];
++
++	while loop
++
++		%some checks
++		if numprofiles==0
++			disp('no profile to be reoriented, exiting...')
++			return
++		end
++
++		[xi,yi] = ginput(1);
++
++		if ~isempty(xi)
++
++			%get closest profile
++			[profsel indsel]=closestpoint(A,numprofiles,xi,yi);
++
++			if ismember(profsel,selection)
++				%profile was in selection, remove it from list
++				selection(find(selection==profsel))=[];
++				%back to regular color
++				plot(A(profsel).x,A(profsel).y,...
++					'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++			else
++				%add the profile to the list to be removed
++				selection(end+1)=profsel;
++				%in selectioncolor
++				plot(A(profsel).x,A(profsel).y,...
++					'color',getfieldvalue(options,'selectioncolor'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'));
++			end
++		else
++			%reorient profiles
++			selection=sort(selection);
++			for i=1:length(selection),
++				A(selection(i)).x=flipud(A(selection(i)).x);
++				A(selection(i)).y=flipud(A(selection(i)).y);
++			end
++			loop=0;
++		end
++	end
++end
+
+Property changes on: ../trunk-jpl/src/m/exp/operation/orientprofile.m
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/m/exp/operation
+===================================================================
+--- ../trunk-jpl/src/m/exp/operation	(revision 15936)
++++ ../trunk-jpl/src/m/exp/operation	(revision 15937)
+
+Property changes on: ../trunk-jpl/src/m/exp/operation
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++Makefile
++Makefile.in
Index: /issm/oecreview/Archive/15392-16133/ISSM-15937-15938.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15937-15938.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15937-15938.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 15937)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 15938)
+@@ -18,7 +18,7 @@
+ 				 ./array/*.m \
+ 				 ./boundaryconditions/*.m \
+ 				 ./exp/*.m \
+-				 ./exp/manipulation/*.m \
++				 ./exp/operation/*.m \
+ 				 ./geometry/*.m \
+ 				 ./interp/*.m \
+ 				 ./coordsystems/*.m \
Index: /issm/oecreview/Archive/15392-16133/ISSM-15938-15939.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15938-15939.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15938-15939.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/clusters/generic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.py	(revision 15938)
++++ ../trunk-jpl/src/m/classes/clusters/generic.py	(revision 15939)
+@@ -5,7 +5,6 @@
+ from EnumToString import EnumToString
+ from issmdir import *
+ from pairoptions import *
+-from ismpi import *
+ from issmssh import *
+ from issmscpin import *
+ from issmscpout import *
Index: /issm/oecreview/Archive/15392-16133/ISSM-15939-15940.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15939-15940.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15939-15940.diff	(revision 16134)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15939)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15940)
+@@ -7409,10 +7409,8 @@
+ 	this->inputs->AddInput(new TriaInput(BedEnum,&b[0],P1Enum));
+ 
+ 	/*Recalculate phi*/
+-	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
+-		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
+-		this->inputs->AddInput(new TriaInput(GLlevelsetEnum,&phi[0],P1Enum));
+-	}
++	for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
++	this->inputs->AddInput(new TriaInput(GLlevelsetEnum,&phi[0],P1Enum));
+ }
+ /*}}}*/
+ /*FUNCTION Tria::PotentialUngrounding{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15939)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15940)
+@@ -11220,7 +11220,7 @@
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+ 	GetInputListOnVertices(&b[0],BedEnum);
+ 	GetInputListOnVertices(&r[0],BathymetryEnum);
+-	if(migration_style==SubelementMigrationEnum) GetInputListOnVertices(&phi[0],GLlevelsetEnum);
++	GetInputListOnVertices(&phi[0],GLlevelsetEnum);
+ 	rho_water = matpar->GetRhoWater();
+ 	rho_ice   = matpar->GetRhoIce();
+ 	density   = rho_ice/rho_water;
+@@ -11298,11 +11298,9 @@
+    this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
+ 
+ 	/*Recalculate phi*/
+-	if(migration_style==SubelementMigrationEnum){
+-		for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
+-		this->inputs->AddInput(new PentaInput(GLlevelsetEnum,&phi[0],P1Enum));
+-		this->InputExtrude(GLlevelsetEnum,ElementEnum);
+-	}
++	for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
++	this->inputs->AddInput(new PentaInput(GLlevelsetEnum,&phi[0],P1Enum));
++	this->InputExtrude(GLlevelsetEnum,ElementEnum);
+ 
+ 	/*Extrude inputs*/
+ 	this->InputExtrude(SurfaceEnum,ElementEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15940-15941.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15940-15941.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15940-15941.diff	(revision 16134)
@@ -0,0 +1,596 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15941)
+@@ -165,7 +165,7 @@
+ 				InputToResultx(femmodel,SurfaceforcingsPrecipitationEnum);
+ 			}
+ 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+-				InputToResultx(femmodel,GLlevelsetEnum);
++				InputToResultx(femmodel,MaskGroundediceLevelsetEnum);
+ 			}
+ 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+ 			OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15940)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15941)
+@@ -145,7 +145,7 @@
+ 	MaskElementongroundediceEnum,
+ 	MaskVertexonfloatingiceEnum,
+ 	MaskVertexongroundediceEnum,
+-	MaskIcelevelsetEnum,
++	MaskIceLevelsetEnum,
+ 	MaterialsBetaEnum,
+ 	MaterialsHeatcapacityEnum,
+ 	MaterialsLatentheatEnum,
+@@ -558,7 +558,7 @@
+ 	SoftMigrationEnum,
+ 	SubelementMigrationEnum,
+ 	SubelementMigration2Enum,
+-	GLlevelsetEnum,
++	MaskGroundediceLevelsetEnum,
+ 	/*}}}*/
+ 	/*Solver{{{*/
+ 	FSSolverEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15941)
+@@ -153,7 +153,7 @@
+ 		case MaskElementongroundediceEnum : return "MaskElementongroundedice";
+ 		case MaskVertexonfloatingiceEnum : return "MaskVertexonfloatingice";
+ 		case MaskVertexongroundediceEnum : return "MaskVertexongroundedice";
+-		case MaskIcelevelsetEnum : return "MaskIcelevelset";
++		case MaskIceLevelsetEnum : return "MaskIceLevelset";
+ 		case MaterialsBetaEnum : return "MaterialsBeta";
+ 		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
+ 		case MaterialsLatentheatEnum : return "MaterialsLatentheat";
+@@ -477,6 +477,7 @@
+ 		case WaterfractionEnum : return "Waterfraction";
+ 		case WatercolumnEnum : return "Watercolumn";
+ 		case BasalFrictionEnum : return "BasalFriction";
++		case BasalMeltrateEnum : return "BasalMeltrate";
+ 		case ViscousHeatingEnum : return "ViscousHeating";
+ 		case QmuTemperatureEnum : return "QmuTemperature";
+ 		case HydrologyWaterVxEnum : return "HydrologyWaterVx";
+@@ -541,7 +542,7 @@
+ 		case SoftMigrationEnum : return "SoftMigration";
+ 		case SubelementMigrationEnum : return "SubelementMigration";
+ 		case SubelementMigration2Enum : return "SubelementMigration2";
+-		case GLlevelsetEnum : return "GLlevelset";
++		case MaskGroundediceLevelsetEnum : return "MaskGroundediceLevelset";
+ 		case FSSolverEnum : return "FSSolver";
+ 		case AdjointEnum : return "Adjoint";
+ 		case ColinearEnum : return "Colinear";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15941)
+@@ -156,7 +156,7 @@
+ 	      else if (strcmp(name,"MaskElementongroundedice")==0) return MaskElementongroundediceEnum;
+ 	      else if (strcmp(name,"MaskVertexonfloatingice")==0) return MaskVertexonfloatingiceEnum;
+ 	      else if (strcmp(name,"MaskVertexongroundedice")==0) return MaskVertexongroundediceEnum;
+-	      else if (strcmp(name,"MaskIcelevelset")==0) return MaskIcelevelsetEnum;
++	      else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
+ 	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
+ 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
+ 	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
+@@ -486,6 +486,7 @@
+ 	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
+ 	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
+ 	      else if (strcmp(name,"BasalFriction")==0) return BasalFrictionEnum;
++	      else if (strcmp(name,"BasalMeltrate")==0) return BasalMeltrateEnum;
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+-	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P2")==0) return P2Enum;
++	      if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
++	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+@@ -553,7 +554,7 @@
+ 	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+-	      else if (strcmp(name,"GLlevelset")==0) return GLlevelsetEnum;
++	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
+ 	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
+ 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
+ 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 15941)
+@@ -43,7 +43,7 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,BathymetryEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15941)
+@@ -32,7 +32,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 15941)
+@@ -30,7 +30,7 @@
+ 	}
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15941)
+@@ -33,7 +33,7 @@
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 15941)
+@@ -22,7 +22,7 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15941)
+@@ -34,7 +34,7 @@
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15941)
+@@ -34,7 +34,7 @@
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 15941)
+@@ -37,7 +37,7 @@
+ 		/*Update elements: */
+ 		for(int i=0;i<elements->Size();i++){
+ 			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-			element->InputCreate(phi,element->Sid(),iomodel,iomodel->numberofvertices,1,1,GLlevelsetEnum,1);
++			element->InputCreate(phi,element->Sid(),iomodel,iomodel->numberofvertices,1,1,MaskGroundediceLevelsetEnum,1);
+ 		}
+ 
+ 		/*Free ressources:*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 15941)
+@@ -81,7 +81,7 @@
+ 	/*Create vertices: */
+ 
+ 	/*Fetch data:*/
+-	iomodel->FetchData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIcelevelsetEnum);
++	iomodel->FetchData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIceLevelsetEnum);
+ 	CreateNumberNodeToElementConnectivity(iomodel);
+ 
+ 	for(i=0;i<iomodel->numberofvertices;i++){
+@@ -95,7 +95,7 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIcelevelsetEnum);
++	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIceLevelsetEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pelements=elements;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 15941)
+@@ -29,7 +29,7 @@
+ 	}
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 15941)
+@@ -27,7 +27,7 @@
+ 	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15941)
+@@ -94,7 +94,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 15941)
+@@ -22,7 +22,7 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15941)
+@@ -35,7 +35,7 @@
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15941)
+@@ -29,7 +29,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15941)
+@@ -30,7 +30,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskIcelevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15941)
+@@ -821,7 +821,7 @@
+ 	IssmDouble         f1,f2;
+ 
+ 	/*Recover parameters and values*/
+-	GetInputListOnVertices(&gl[0],GLlevelsetEnum);
++	GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);
+ 
+ 	/*Be sure that values are not zero*/
+ 	if(gl[0]==0.) gl[0]=gl[0]+epsilon;
+@@ -875,7 +875,7 @@
+ 	IssmDouble         xyz_bis[3][3];
+ 
+ 	/*Recover parameters and values*/
+-	GetInputListOnVertices(&gl[0],GLlevelsetEnum);
++	GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);
+ 
+ 	/*Be sure that values are not zero*/
+ 	if(gl[0]==0.) gl[0]=gl[0]+epsilon;
+@@ -1902,8 +1902,8 @@
+ 				name==SurfaceEnum ||
+ 				name==BathymetryEnum ||
+ 				name==BedEnum ||
+-				name==GLlevelsetEnum ||
+-				name==MaskIcelevelsetEnum ||
++				name==MaskGroundediceLevelsetEnum ||
++				name==MaskIceLevelsetEnum ||
+ 				name==SurfaceSlopeXEnum ||
+ 				name==SurfaceSlopeYEnum ||
+ 				name==BasalforcingsMeltingRateEnum ||
+@@ -1993,7 +1993,7 @@
+ 
+ 	/*Get levelset*/
+ 	IssmDouble ls[NUMVERTICES];
+-	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
++	GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
+ 
+ 	/*If the level set is >0, ice is present in this element*/
+ 	if(ls[0]>0. || ls[1]>0. || ls[2]>0.) return false;
+@@ -3071,7 +3071,7 @@
+ 	/*Recover portion of element that is grounded*/
+ 	if(migration_style==SubelementMigrationEnum) phi=this->GetGroundedPortion(&xyz_list[0][0]);
+ 	if(migration_style==SubelementMigration2Enum){
+-		gllevelset_input=inputs->GetInput(GLlevelsetEnum); _assert_(gllevelset_input);
++		gllevelset_input=inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
+ 		this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+ 		gauss=new GaussTria(point1,fraction1,fraction2,mainlyfloating,2);
+ 	}
+@@ -3215,7 +3215,7 @@
+ 	bool        isfront;
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
++	GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
+ 
+ 	/*If the level set is awlays <0, there is no ice front here*/
+ 	isfront = false;
+@@ -3250,7 +3250,7 @@
+ 	rho_water = matpar->GetRhoWater();
+ 	rho_ice   = matpar->GetRhoIce();
+ 	gravity   = matpar->GetG();
+-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIceLevelsetEnum);
+ 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,2);
+ 	GetSegmentNormal(&normal[0],xyz_list_front);
+ 
+@@ -7330,7 +7330,7 @@
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+ 	GetInputListOnVertices(&b[0],BedEnum);
+ 	GetInputListOnVertices(&r[0],BathymetryEnum);
+-	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum) GetInputListOnVertices(&phi[0],GLlevelsetEnum);
++	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum) GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);
+ 	rho_water = matpar->GetRhoWater();
+ 	rho_ice   = matpar->GetRhoIce();
+ 	density   = rho_ice/rho_water;
+@@ -7410,7 +7410,7 @@
+ 
+ 	/*Recalculate phi*/
+ 	for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
+-	this->inputs->AddInput(new TriaInput(GLlevelsetEnum,&phi[0],P1Enum));
++	this->inputs->AddInput(new TriaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
+ }
+ /*}}}*/
+ /*FUNCTION Tria::PotentialUngrounding{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15940)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15941)
+@@ -1093,7 +1093,7 @@
+ 	IssmDouble         xyz_bis[NUMVERTICES2D][3];
+ 
+ 	/*Recover parameters and values*/
+-	GetInputListOnVertices(&gl[0],GLlevelsetEnum);
++	GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);
+ 
+ 	/*Be sure that values are not zero*/
+ 	if(gl[0]==0.) gl[0]=gl[0]+epsilon;
+@@ -2716,8 +2716,8 @@
+ 				name==EnthalpyPicardEnum ||
+ 				name==WaterfractionEnum||
+ 				name==FrictionCoefficientEnum ||
+-				name==GLlevelsetEnum ||
+-				name==MaskIcelevelsetEnum ||
++				name==MaskGroundediceLevelsetEnum ||
++				name==MaskIceLevelsetEnum ||
+ 				name==GradientEnum ||
+ 				name==OldGradientEnum  ||
+ 				name==ConvergedEnum || 
+@@ -2799,7 +2799,7 @@
+ 
+ 	/*Get levelset*/
+ 	IssmDouble ls[NUMVERTICES];
+-	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
++	GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
+ 
+ 	/*If the level set is >0, ice is present in this element*/
+ 	if(ls[0]>0. || ls[1]>0. || ls[2]>0.) return false;
+@@ -9125,7 +9125,7 @@
+ 	bool        isfront;
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
++	GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
+ 
+ 	/*If the level set is awlays <=0, there is no ice front here*/
+ 	isfront = false;
+@@ -9160,7 +9160,7 @@
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
+-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIceLevelsetEnum);
+ 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
+ 	GetQuadNormal(&normal[0],xyz_list_front);
+ 
+@@ -9230,7 +9230,7 @@
+ 	bool        isfront;
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	GetInputListOnVertices(&ls[0],MaskIcelevelsetEnum);
++	GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
+ 
+ 	/*If the level set is awlays <=0, there is no ice front here*/
+ 	isfront = false;
+@@ -9270,7 +9270,7 @@
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice  =matpar->GetRhoIce();
+ 	gravity  =matpar->GetG();
+-	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIcelevelsetEnum);
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIceLevelsetEnum);
+ 	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
+ 	GetQuadNormal(&normal[0],xyz_list_front);
+ 
+@@ -11220,7 +11220,7 @@
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+ 	GetInputListOnVertices(&b[0],BedEnum);
+ 	GetInputListOnVertices(&r[0],BathymetryEnum);
+-	GetInputListOnVertices(&phi[0],GLlevelsetEnum);
++	GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);
+ 	rho_water = matpar->GetRhoWater();
+ 	rho_ice   = matpar->GetRhoIce();
+ 	density   = rho_ice/rho_water;
+@@ -11299,8 +11299,8 @@
+ 
+ 	/*Recalculate phi*/
+ 	for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
+-	this->inputs->AddInput(new PentaInput(GLlevelsetEnum,&phi[0],P1Enum));
+-	this->InputExtrude(GLlevelsetEnum,ElementEnum);
++	this->inputs->AddInput(new PentaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
++	this->InputExtrude(MaskGroundediceLevelsetEnum,ElementEnum);
+ 
+ 	/*Extrude inputs*/
+ 	this->InputExtrude(SurfaceEnum,ElementEnum);
+Index: ../trunk-jpl/src/m/enum/GLlevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/GLlevelsetEnum.m	(revision 15940)
++++ ../trunk-jpl/src/m/enum/GLlevelsetEnum.m	(revision 15941)
+@@ -1,11 +0,0 @@
+-function macro=GLlevelsetEnum()
+-%GLLEVELSETENUM - Enum of GLlevelset
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=GLlevelsetEnum()
+-
+-macro=StringToEnum('GLlevelset');
+Index: ../trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m	(revision 15940)
++++ ../trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m	(revision 15941)
+@@ -1,11 +0,0 @@
+-function macro=MaskIcelevelsetEnum()
+-%MASKICELEVELSETENUM - Enum of MaskIcelevelset
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaskIcelevelsetEnum()
+-
+-macro=StringToEnum('MaskIcelevelset');
+Index: ../trunk-jpl/src/m/enum/MaskGroundediceLevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskGroundediceLevelsetEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaskGroundediceLevelsetEnum.m	(revision 15941)
+@@ -0,0 +1,11 @@
++function macro=MaskGroundediceLevelsetEnum()
++%MASKGROUNDEDICELEVELSETENUM - Enum of MaskGroundediceLevelset
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaskGroundediceLevelsetEnum()
++
++macro=StringToEnum('MaskGroundediceLevelset');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15940)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15941)
+@@ -145,7 +145,7 @@
+ def MaskElementongroundediceEnum(): return StringToEnum("MaskElementongroundedice")[0]
+ def MaskVertexonfloatingiceEnum(): return StringToEnum("MaskVertexonfloatingice")[0]
+ def MaskVertexongroundediceEnum(): return StringToEnum("MaskVertexongroundedice")[0]
+-def MaskIcelevelsetEnum(): return StringToEnum("MaskIcelevelset")[0]
++def MaskIceLevelsetEnum(): return StringToEnum("MaskIceLevelset")[0]
+ def MaterialsBetaEnum(): return StringToEnum("MaterialsBeta")[0]
+ def MaterialsHeatcapacityEnum(): return StringToEnum("MaterialsHeatcapacity")[0]
+ def MaterialsLatentheatEnum(): return StringToEnum("MaterialsLatentheat")[0]
+@@ -469,6 +469,7 @@
+ def WaterfractionEnum(): return StringToEnum("Waterfraction")[0]
+ def WatercolumnEnum(): return StringToEnum("Watercolumn")[0]
+ def BasalFrictionEnum(): return StringToEnum("BasalFriction")[0]
++def BasalMeltrateEnum(): return StringToEnum("BasalMeltrate")[0]
+ def ViscousHeatingEnum(): return StringToEnum("ViscousHeating")[0]
+ def QmuTemperatureEnum(): return StringToEnum("QmuTemperature")[0]
+ def HydrologyWaterVxEnum(): return StringToEnum("HydrologyWaterVx")[0]
+@@ -533,7 +534,7 @@
+ def SoftMigrationEnum(): return StringToEnum("SoftMigration")[0]
+ def SubelementMigrationEnum(): return StringToEnum("SubelementMigration")[0]
+ def SubelementMigration2Enum(): return StringToEnum("SubelementMigration2")[0]
+-def GLlevelsetEnum(): return StringToEnum("GLlevelset")[0]
++def MaskGroundediceLevelsetEnum(): return StringToEnum("MaskGroundediceLevelset")[0]
+ def FSSolverEnum(): return StringToEnum("FSSolver")[0]
+ def AdjointEnum(): return StringToEnum("Adjoint")[0]
+ def ColinearEnum(): return StringToEnum("Colinear")[0]
+Index: ../trunk-jpl/src/m/enum/MaskIceLevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskIceLevelsetEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaskIceLevelsetEnum.m	(revision 15941)
+@@ -0,0 +1,11 @@
++function macro=MaskIceLevelsetEnum()
++%MASKICELEVELSETENUM - Enum of MaskIceLevelset
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaskIceLevelsetEnum()
++
++macro=StringToEnum('MaskIceLevelset');
Index: /issm/oecreview/Archive/15392-16133/ISSM-15941-15942.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15941-15942.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15941-15942.diff	(revision 16134)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15941)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15942)
+@@ -10,7 +10,8 @@
+ 		vertexonfloatingice  = NaN;
+ 		vertexongroundedice  = NaN;
+ 		vertexonrock         = NaN;
+-		icelevelset          = NaN;
++		groundedice_levelset = NaN;
++		ice_levelset         = NaN;
+ 	end
+ 	methods
+ 		function obj = mask(varargin) % {{{
+@@ -28,12 +29,13 @@
+ 
+ 			md = checkfield(md,'mask.elementonfloatingice','size',[md.mesh.numberofelements 1],'values',[0 1]);
+ 			md = checkfield(md,'mask.elementongroundedice','size',[md.mesh.numberofelements 1],'values',[0 1]);
+-			md = checkfield(md,'mask.vertexonfloatingice','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+-			md = checkfield(md,'mask.vertexongroundedice','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+-			md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices 1]);
+-			isice=(md.mask.icelevelset>0);
++			md = checkfield(md,'mask.vertexonfloatingice' ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
++			md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
++			md = checkfield(md,'mask.groundedice_levelset','size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'mask.ice_levelset'        ,'size',[md.mesh.numberofvertices 1]);
++			isice=(md.mask.ice_levelset>0);
+ 			if any(sum(isice(md.mesh.elements),2)==0),
+-				error('elements with no ice not implemented yet, each element should have at least one vertex with md.mask.icelevelset > 0');
++				error('elements with no ice not implemented yet, each element should have at least one vertex with md.mask.ice_levelset > 0');
+ 			end
+ 			%md = checkfield(md,'mask.vertexonrock'      ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 		end % }}}
+@@ -45,14 +47,16 @@
+ 			fielddisplay(obj,'elementongroundedice','element on grounded ice  list');
+ 			fielddisplay(obj,'vertexongroundedice','vertex on grounded ice flags list');
+ 			fielddisplay(obj,'vertexonrock','vertex on rock flags list');
+-			fielddisplay(obj,'icelevelset','presence of ice if > 0, icefront position if = 0, no ice if < 0');
++			fielddisplay(obj,'grounded_levelset','is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0');
++			fielddisplay(obj,'ice_levelset','presence of ice if > 0, icefront position if = 0, no ice if < 0');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','elementonfloatingice','format','BooleanMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','elementongroundedice','format','BooleanMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','icelevelset','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','ice_levelset','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15941)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15942)
+@@ -16,7 +16,8 @@
+ 		self.elementongroundedice = float('NaN')
+ 		self.vertexonfloatingice  = float('NaN')
+ 		self.vertexongroundedice  = float('NaN')
+-		self.icelevelset          = float('NaN')
++		self.ice_levelset          = float('NaN')
++		self.groundedice_levelset          = float('NaN')
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -29,7 +30,8 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,"vertexonfloatingice","vertex on floating ice flags list"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"elementongroundedice","element on grounded ice list"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"vertexongroundedice","vertex on grounded ice flags list"))
+-		string="%s\n%s"%(string,fielddisplay(self,"icelevelset","presence of ice if > 0, icefront position if = 0, no ice if < 0"))
++		string="%s\n%s"%(string,fielddisplay(self,"groundedice_levelset","is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0"))
++		string="%s\n%s"%(string,fielddisplay(self,"ice_levelset","presence of ice if > 0, icefront position if = 0, no ice if < 0"))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -54,5 +56,6 @@
+ 		WriteData(fid,'object',self,'fieldname','elementongroundedice','format','BooleanMat','mattype',2)
+ 		WriteData(fid,'object',self,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'fieldname','icelevelset','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1)
+ 	# }}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15942-15943.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15942-15943.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15942-15943.diff	(revision 16134)
@@ -0,0 +1,66 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15942)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15943)
+@@ -43,11 +43,12 @@
+ 		md = checkfield(md,'mask.elementongroundedice','size',[md.mesh.numberofelements],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexonfloatingice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+ 		md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+-		md = checkfield(md,'mask.icelevelset'         ,'size',[md.mesh.numberofvertices])
+-		isice=numpy.array(md.mask.icelevelset>0,int)
++		md = checkfield(md,'mask.groundedice_levelset','size',[md.mesh.numberofvertices])
++		md = checkfield(md,'mask.ice_levelset'        ,'size',[md.mesh.numberofvertices])
++		isice=numpy.array(md.mask.ice_levelset>0,int)
+ 		totallyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
+ 		if any(totallyicefree):
+-			raise TypeError("elements with no ice not implemented yet, each element should have at least one vertex with md.mask.icelevelset > 0")
++			raise TypeError("elements with no ice not implemented yet, each element should have at least one vertex with md.mask.ice_levelset > 0")
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15942)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15943)
+@@ -215,7 +215,8 @@
+ 			if ~isnan(md.mask.vertexonrock)
+ 				md.mask.vertexonrock=project2d(md,md.mask.vertexonrock,1);
+ 			end
+-			md.mask.icelevelset=project2d(md,md.mask.icelevelset,1);
++			md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1);
++			md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1);
+ 
+ 			%lat long
+ 			if numel(md.mesh.lat) ==md.mesh.numberofvertices,  md.mesh.lat=project2d(md,md.mesh.lat,1); end
+@@ -741,7 +742,8 @@
+ 			md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element');
+ 			md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node');
+ 			md.mask.vertexonrock=project3d(md,'vector',md.mask.vertexonrock,'type','node');
+-			md.mask.icelevelset=project3d(md,'vector',md.mask.icelevelset,'type','node');
++			md.mask.groundedice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node');
++			md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node');
+ 			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 			if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
+ 			if ~isnan(md.inversion.max_parameters),md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node');end;
+Index: ../trunk-jpl/src/m/parameterization/setmask.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15942)
++++ ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15943)
+@@ -45,4 +45,4 @@
+ md.mask.vertexonfloatingice=vertexonfloatingice;
+ md.mask.elementongroundedice=elementongroundedice;
+ md.mask.vertexongroundedice=vertexongroundedice;
+-md.mask.icelevelset=ones(md.mesh.numberofvertices,1);
++md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/src/m/parameterization/setmask.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15942)
++++ ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15943)
+@@ -45,6 +45,6 @@
+ 	md.mask.vertexonfloatingice = vertexonfloatingice
+ 	md.mask.elementongroundedice = elementongroundedice
+ 	md.mask.vertexongroundedice = vertexongroundedice
+-	md.mask.icelevelset = numpy.ones(md.mesh.numberofvertices,bool)
++	md.mask.ice_levelset = numpy.ones(md.mesh.numberofvertices,bool)
+ 
+ 	return md
Index: /issm/oecreview/Archive/15392-16133/ISSM-15943-15944.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15943-15944.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15943-15944.diff	(revision 16134)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/m/parameterization/setmask.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15943)
++++ ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15944)
+@@ -45,4 +45,8 @@
+ md.mask.vertexonfloatingice=vertexonfloatingice;
+ md.mask.elementongroundedice=elementongroundedice;
+ md.mask.vertexongroundedice=vertexongroundedice;
++
++%level sets
+ md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
++md.mask.groundedice_levelset=vertexongroundedice;
++md.mask.groundedice_levelset(find(vertexongroundedice==0.))=-1.;
+Index: ../trunk-jpl/src/m/parameterization/setmask.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15943)
++++ ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15944)
+@@ -45,6 +45,10 @@
+ 	md.mask.vertexonfloatingice = vertexonfloatingice
+ 	md.mask.elementongroundedice = elementongroundedice
+ 	md.mask.vertexongroundedice = vertexongroundedice
+-	md.mask.ice_levelset = numpy.ones(md.mesh.numberofvertices,bool)
+ 
++	#level sets
++	md.mask.ice_levelset         = numpy.ones(md.mesh.numberofvertices,bool)
++	md.mask.groundedice_levelset = -1.*numpy.ones((md.mesh.numberofvertices,1))
++	md.mask.groundedice_levelset[md.mesh.elements[numpy.nonzero(elementongroundedice),:]-1]=1.
++
+ 	return md
Index: /issm/oecreview/Archive/15392-16133/ISSM-15944-15945.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15944-15945.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15944-15945.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15944)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15945)
+@@ -640,7 +640,7 @@
+ 		md.mask.vertexonfloatingice=project3d(md,'vector',md.mask.vertexonfloatingice,'type','node')
+ 		md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element')
+ 		md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node')
+-		md.mask.icelevelset=project3d(md,'vector',md.mask.icelevelset,'type','node')
++		md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node')
+ 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+ 			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 		if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
Index: /issm/oecreview/Archive/15392-16133/ISSM-15945-15946.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15945-15946.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15945-15946.diff	(revision 16134)
@@ -0,0 +1,116 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15945)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15946)
+@@ -41,7 +41,7 @@
+ md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 
+ %Position of ice front
+-md.mask.icelevelset(find(vertexonicefront))=0;
++md.mask.ice_levelset(find(vertexonicefront))=0;
+ 
+ %First find segments that are not completely on the front
+ if(md.mesh.dimension==2),
+@@ -49,7 +49,7 @@
+ else 
+ 	numbernodesfront=4;
+ end
+-segmentsfront=md.mask.icelevelset(md.mesh.segments(:,1:numbernodesfront))==0;
++segmentsfront=md.mask.ice_levelset(md.mesh.segments(:,1:numbernodesfront))==0;
+ segments=find(sum(segmentsfront,2)~=numbernodesfront);
+ %Find all nodes for these segments and spc them
+ pos=md.mesh.segments(segments,1:numbernodesfront);
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15945)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 15946)
+@@ -39,15 +39,15 @@
+ 
+ 	#Icefront position
+ 	pos=numpy.nonzero(nodeonicefront)[0]
+-	md.mask.icelevelset[pos]=0
++	md.mask.ice_levelset[pos]=0
+ 
+ 	#First find segments that are not completely on the front
+ 	if md.mesh.dimension==2:
+ 		numbernodesfront=2
+ 	else:
+ 		numbernodesfront=4
+-	if any(md.mask.icelevelset<=0):
+-		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]-1]
++	if any(md.mask.ice_levelset<=0):
++		values=md.mask.ice_levelset[md.mesh.segments[:,0:-1]-1]
+ 		segmentsfront=1-values
+ 		numpy.sum(segmentsfront,axis=1)!=numbernodesfront
+ 		segments=numpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15945)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15946)
+@@ -47,15 +47,15 @@
+ 
+ 	#Position of ice front
+ 	pos=numpy.nonzero(vertexonicefront)[0]
+-	md.mask.icelevelset[pos]=0
++	md.mask.ice_levelset[pos]=0
+ 
+ 	#First find segments that are not completely on the front
+ 	if md.mesh.dimension==2:
+ 		numbernodesfront=2
+ 	else:
+ 		numbernodesfront=4
+-	if any(md.mask.icelevelset<=0):
+-		values=md.mask.icelevelset[md.mesh.segments[:,0:-1]-1]
++	if any(md.mask.ice_levelset<=0):
++		values=md.mask.ice_levelset[md.mesh.segments[:,0:-1]-1]
+ 		segmentsfront=1-values
+ 		numpy.sum(segmentsfront,axis=1)!=numbernodesfront
+ 		segments=numpy.nonzero(numpy.sum(segmentsfront,axis=1)!=numbernodesfront)[0]
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15945)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 15946)
+@@ -34,7 +34,7 @@
+ md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+ 
+ %Ice front position: 
+-md.mask.icelevelset(find(nodeonicefront))=0;
++md.mask.ice_levelset(find(nodeonicefront))=0;
+ 
+ %First find segments that are not completely on the front
+ if(md.mesh.dimension==2),
+@@ -42,7 +42,7 @@
+ else 
+ 	numbernodesfront=4;
+ end
+-segmentsfront=md.mask.icelevelset(md.mesh.segments(:,1:numbernodesfront))==0;
++segmentsfront=md.mask.ice_levelset(md.mesh.segments(:,1:numbernodesfront))==0;
+ segments=find(sum(segmentsfront,2)~=numbernodesfront);
+ %Find all nodes for these segments and spc them
+ pos=md.mesh.segments(segments,1:numbernodesfront);
+Index: ../trunk-jpl/src/m/plot/plot_icefront.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 15945)
++++ ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 15946)
+@@ -11,9 +11,9 @@
+ 
+ %process mesh and data
+ [x y z elements is2d isplanet]=processmesh(md,[],options);
+-ice=(md.mask.icelevelset>0);
+-noice=(md.mask.icelevelset<=0);
+-zeroice=(md.mask.icelevelset==0);
++ice=(md.mask.ice_levelset>0);
++noice=(md.mask.ice_levelset<=0);
++zeroice=(md.mask.ice_levelset==0);
+ elementice=sum(ice(md.mesh.elements),2);
+ elementnoice=sum(noice(md.mesh.elements),2);
+ elementzeroice=sum(zeroice(md.mesh.elements),2);
+@@ -32,7 +32,7 @@
+ 	h2=patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','blue','EdgeColor','black');
+ 	hold on;
+ 
+-	%Plot zero icelevelset line
++	%Plot zero ice_levelset line
+ 
+ else
+ 	icefront=(elementice & elementnoice) & ~(elementice==4 & elementzeroice);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15946-15947.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15946-15947.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15946-15947.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15946)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15947)
+@@ -641,6 +641,7 @@
+ 		md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element')
+ 		md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node')
+ 		md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node')
++		md.mask.groundedicelevelset=project3d(md,'vector',md.mask.groundedicelevelset,'type','node')
+ 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+ 			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 		if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
Index: /issm/oecreview/Archive/15392-16133/ISSM-15947-15948.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15947-15948.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15947-15948.diff	(revision 16134)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15947)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15948)
+@@ -110,7 +110,7 @@
+ md.stressbalance.spcvy[pos]=0
+ 
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+-md.mask.icelevelset[pos]=0
++md.mask.ice_levelset[pos]=0
+ md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 15947)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 15948)
+@@ -65,7 +65,7 @@
+ nodeonicefront=zeros(md.mesh.numberofvertices)
+ pos=numpy.nonzero(md.mesh.y==ymax)
+ nodeonicefront[pos]=1
+-md.mask.icelevelset=1-nodeonicefront
++md.mask.ice_levelset=1-nodeonicefront
+ 
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test217.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.m	(revision 15947)
++++ ../trunk-jpl/test/NightlyRun/test217.m	(revision 15948)
+@@ -53,7 +53,7 @@
+ %icefront
+ nodeonicefront=zeros(md.mesh.numberofvertices,1);
+ pos=find(md.mesh.y==ymax); nodeonicefront(pos)=1;
+-md.mask.icelevelset=1-nodeonicefront;
++md.mask.ice_levelset=1-nodeonicefront;
+ 
+ md=solve(md,StressbalanceSolutionEnum());
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15948-15949.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15948-15949.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15948-15949.diff	(revision 16134)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/test/NightlyRun/test423.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.py	(revision 15948)
++++ ../trunk-jpl/test/NightlyRun/test423.py	(revision 15949)
+@@ -46,12 +46,12 @@
+ 
+ md.groundingline.migration='SubelementMigration'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_subelement=md.results.TransientSolution[0].GLlevelset
++element_on_iceshelf_subelement=md.results.TransientSolution[0].MaskGroundediceLevelset
+ vel_subelement=md.results.TransientSolution[0].Vel
+ 
+ md.groundingline.migration='SubelementMigration2'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_subelement2=md.results.TransientSolution[0].GLlevelset
++element_on_iceshelf_subelement2=md.results.TransientSolution[0].MaskGroundediceLevelset
+ vel_subelement2=md.results.TransientSolution[0].Vel
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test433.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.py	(revision 15948)
++++ ../trunk-jpl/test/NightlyRun/test433.py	(revision 15949)
+@@ -45,7 +45,7 @@
+ 
+ md.groundingline.migration='SubelementMigration'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_subelement=md.results.TransientSolution[0].GLlevelset
++element_on_iceshelf_subelement=md.results.TransientSolution[0].MaskGroundediceLevelset
+ 
+ #Fields and tolerances to track changes
+ field_names     =['ElementOnIceShelfAgressive','ElementOnIceShelfSoft','ElementOnIceShelfSubelement']
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 15948)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 15949)
+@@ -35,12 +35,12 @@
+ 
+ md.groundingline.migration='SubelementMigration';
+ md=solve(md,TransientSolutionEnum());
+-element_on_iceshelf_subelement=(md.results.TransientSolution.GLlevelset);
++element_on_iceshelf_subelement=(md.results.TransientSolution.MaskGroundediceLevelset);
+ vel_subelement=(md.results.TransientSolution.Vel);
+ 
+ md.groundingline.migration='SubelementMigration2';
+ md=solve(md,TransientSolutionEnum());
+-element_on_iceshelf_subelement2=(md.results.TransientSolution.GLlevelset);
++element_on_iceshelf_subelement2=(md.results.TransientSolution.MaskGroundediceLevelset);
+ vel_subelement2=(md.results.TransientSolution.Vel);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test433.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.m	(revision 15948)
++++ ../trunk-jpl/test/NightlyRun/test433.m	(revision 15949)
+@@ -34,7 +34,7 @@
+ 
+ md.groundingline.migration='SubelementMigration';
+ md=solve(md,TransientSolutionEnum());
+-element_on_iceshelf_subelement=(md.results.TransientSolution.GLlevelset);
++element_on_iceshelf_subelement=(md.results.TransientSolution.MaskGroundediceLevelset);
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'ElementOnIceShelfAgressive','ElementOnIceShelfSoft','ElementOnIceShelfSubelement'};
Index: /issm/oecreview/Archive/15392-16133/ISSM-15949-15950.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15949-15950.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15949-15950.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15949)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15950)
+@@ -100,7 +100,7 @@
+ md.stressbalance.spcvx(pos)=0;
+ md.stressbalance.spcvy(pos)=0;
+ 
+-md.mask.icelevelset(find(md.mesh.vertexonboundary))=0;
++md.mask.ice_levelset(find(md.mesh.vertexonboundary))=0;
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15950-15951.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15950-15951.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15950-15951.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15950)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15951)
+@@ -47,7 +47,7 @@
+ 			fielddisplay(obj,'elementongroundedice','element on grounded ice  list');
+ 			fielddisplay(obj,'vertexongroundedice','vertex on grounded ice flags list');
+ 			fielddisplay(obj,'vertexonrock','vertex on rock flags list');
+-			fielddisplay(obj,'grounded_levelset','is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0');
++			fielddisplay(obj,'groundedice_levelset','is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0');
+ 			fielddisplay(obj,'ice_levelset','presence of ice if > 0, icefront position if = 0, no ice if < 0');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
Index: /issm/oecreview/Archive/15392-16133/ISSM-15951-15952.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15951-15952.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15951-15952.diff	(revision 16134)
@@ -0,0 +1,68 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 15951)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 15952)
+@@ -44,6 +44,7 @@
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,BathymetryEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 15951)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 15952)
+@@ -9,39 +9,4 @@
+ #include "../ModelProcessorx.h"
+ 
+ void	UpdateElementsTransient(Elements* elements, Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	bool        isgl;
+-	int         migration_style;
+-	IssmDouble  rho_ice,rho_water;
+-	IssmDouble *phi   = NULL;
+-
+-	/*Fetch data needed*/
+-	iomodel->Constant(&isgl,TransientIsgroundinglineEnum);
+-	iomodel->Constant(&migration_style,GroundinglineMigrationEnum);
+-
+-	if(isgl==1 && (migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum)){
+-
+-		/*get parameters and constants: */
+-		iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+-		iomodel->Constant(&rho_water,MaterialsRhoWaterEnum);
+-		iomodel->FetchData(2,ThicknessEnum,BathymetryEnum);
+-
+-		/*Create phi vector */
+-		phi=xNew<IssmDouble>(iomodel->numberofvertices);
+-		for(int i=0;i<iomodel->numberofvertices;i++){
+-			if(iomodel->my_vertices[i]){
+-				phi[i] = iomodel->Data(ThicknessEnum)[i] + rho_water/rho_ice * iomodel->Data(BathymetryEnum)[i];
+-			}
+-		}
+-
+-		/*Update elements: */
+-		for(int i=0;i<elements->Size();i++){
+-			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-			element->InputCreate(phi,element->Sid(),iomodel,iomodel->numberofvertices,1,1,MaskGroundediceLevelsetEnum,1);
+-		}
+-
+-		/*Free ressources:*/
+-		iomodel->DeleteData(2,ThicknessEnum,BathymetryEnum);
+-		xDelete<IssmDouble>(phi);
+-	}
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15951)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15952)
+@@ -95,6 +95,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15952-15953.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15952-15953.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15952-15953.diff	(revision 16134)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/NightlyRun/test423.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.py	(revision 15952)
++++ ../trunk-jpl/test/NightlyRun/test423.py	(revision 15953)
+@@ -44,6 +44,7 @@
+ element_on_iceshelf_soft=md.results.TransientSolution[0].MaskElementonfloatingice
+ vel_soft=md.results.TransientSolution[0].Vel
+ 
++md.mask.groundedice_levelset=md.geometry.thickness + md.materials.rho_water/md.materials.rho_ice*md.geometry.bathymetry
+ md.groundingline.migration='SubelementMigration'
+ md=solve(md,TransientSolutionEnum())
+ element_on_iceshelf_subelement=md.results.TransientSolution[0].MaskGroundediceLevelset
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 15952)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 15953)
+@@ -33,6 +33,7 @@
+ element_on_iceshelf_soft=(md.results.TransientSolution.MaskElementonfloatingice);
+ vel_soft=(md.results.TransientSolution.Vel);
+ 
++md.mask.groundedice_levelset=md.geometry.thickness + md.materials.rho_water/md.materials.rho_ice*md.geometry.bathymetry;
+ md.groundingline.migration='SubelementMigration';
+ md=solve(md,TransientSolutionEnum());
+ element_on_iceshelf_subelement=(md.results.TransientSolution.MaskGroundediceLevelset);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15953-15954.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15953-15954.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15953-15954.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15953)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15954)
+@@ -7338,7 +7338,7 @@
+ 	/*go through vertices, and update inputs, considering them to be TriaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		/*Ice shelf: if bed below bathymetry, impose it at the bathymetry and update surface, elso do nothing */
+-		if(reCast<bool>(old_floating_ice[nodes[i]->Sid()])){
++		if(phi[i]<=0){
+ 			if(b[i]<=r[i]){ 
+ 				b[i]        = r[i];
+ 				s[i]        = b[i]+h[i];
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15953)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15954)
+@@ -11228,7 +11228,7 @@
+ 	/*go through vertices, and update inputs, considering them to be PentaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		/*Ice shelf: if bed below bathymetry, impose it at the bathymetry and update surface, elso do nothing */
+-		if(reCast<bool,IssmDouble>(old_floating_ice[nodes[i]->Sid()])){
++		if(phi[i]<=0){
+ 			if(b[i]<=r[i]){ 
+ 				b[i]        = r[i];
+ 				s[i]        = b[i]+h[i];
Index: /issm/oecreview/Archive/15392-16133/ISSM-15954-15955.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15954-15955.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15954-15955.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15954)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15955)
+@@ -617,7 +617,8 @@
+ 		dnl AMPILIB="-dy -L$AMPI_ROOT/lib  -L$ADOLC_ROOT/lib -Wl,--start-group,-lampiCommon,-ladolc,-lampiCommon,-lampiBookkeeping,-lampiTape,-lampiPlainC,-lampiADtoolStubsST,--end-group"
+ 		dnl AMPILIB="-L$AMPI_ROOT/lib  -L$ADOLC_ROOT/lib -Wl,--start-group -lampiCommon -ladolc -lampiCommon -lampiBookkeeping -lampiTape -lampiPlainC -lampiADtoolStubsST -Wl,--end-group"
+ 		dnl AMPILIB="$AMPI_ROOT/lib/libampiCommon.so $ADOLC_ROOT/lib/libadolc.so  $AMPI_ROOT/lib/libampiCommon.so $AMPI_ROOT/lib/libampiBookkeeping.so $AMPI_ROOT/lib/libampiTape.so $AMPI_ROOT/lib/libampiPlainC.so  $AMPI_ROOT/lib/libampiADtoolStubsST.so"
+-		AMPILIB="-dy -L$AMPI_ROOT/lib  -L$ADOLC_ROOT/lib -lampiCommon -ladolc -lampiCommon -lampiBookkeeping -lampiTape -lampiPlainC -lampiADtoolStubsST"
++		dnl AMPILIB="-dy -L$AMPI_ROOT/lib  -L$ADOLC_ROOT/lib -lampiCommon -ladolc -lampiCommon -lampiBookkeeping -lampiTape -lampiPlainC -lampiADtoolStubsST"
++		AMPILIB="-dy -L$AMPI_ROOT/lib  -lampiCommon -lampiBookkeeping -lampiTape"
+ 		AC_DEFINE([_HAVE_AMPI_],[1],[with adjoinable mpi in ISSM src])
+ 		AC_SUBST([AMPIINCL])
+ 		AC_SUBST([AMPILIB])
Index: /issm/oecreview/Archive/15392-16133/ISSM-15955-15956.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15955-15956.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15955-15956.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15955)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15956)
+@@ -7330,7 +7330,7 @@
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+ 	GetInputListOnVertices(&b[0],BedEnum);
+ 	GetInputListOnVertices(&r[0],BathymetryEnum);
+-	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum) GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);
++	GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);
+ 	rho_water = matpar->GetRhoWater();
+ 	rho_ice   = matpar->GetRhoIce();
+ 	density   = rho_ice/rho_water;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15956-15957.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15956-15957.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15956-15957.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15956)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15957)
+@@ -641,7 +641,7 @@
+ 		md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element')
+ 		md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node')
+ 		md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node')
+-		md.mask.groundedicelevelset=project3d(md,'vector',md.mask.groundedicelevelset,'type','node')
++		md.mask.groundedice_levelset=project3d(md,'vector',md.mask.grounded_icelevelset,'type','node')
+ 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+ 			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 		if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15956)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15957)
+@@ -742,7 +742,7 @@
+ 			md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element');
+ 			md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node');
+ 			md.mask.vertexonrock=project3d(md,'vector',md.mask.vertexonrock,'type','node');
+-			md.mask.groundedice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node');
++			md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node');
+ 			md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node');
+ 			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 			if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15957-15958.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15957-15958.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15957-15958.diff	(revision 16134)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh	(revision 15957)
++++ ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh	(revision 15958)
+@@ -1,27 +1,17 @@
+ #!/bin/sh
+-
+ ./configure \
+- --prefix=$ISSM_DIR \
+- --with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+- --with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich" \
+- --with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+- --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install/lib \
+- --with-graphics-lib=/usr/lib64/libX11.so \
+- --with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+- --with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+- --with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
+- --with-numthreads=18 \
+- --enable-debugging \
+- --with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install
+- 
+- 
+-# --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+-# --with-petsc-arch=$ISSM_ARCH \
+-# --with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+-# --with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/externalpackages/PLAPACKR32-hg/INCLUDE" \
+-# --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-# --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-# --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-# --with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
++	--prefix=$ISSM_DIR\
++	--with-matlab-dir=$MATLAB_DIR \
++	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
++	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
++	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
++	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich" \
++	--with-graphics-lib="/usr/lib/x86_64-linux-gnu/libX11.so" \
++	--with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
++	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install\
++	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-numthreads=18  \
++	--enable-debugging 
++	#--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
Index: /issm/oecreview/Archive/15392-16133/ISSM-15958-15959.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15958-15959.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15958-15959.diff	(revision 16134)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15958)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15959)
+@@ -7338,7 +7338,7 @@
+ 	/*go through vertices, and update inputs, considering them to be TriaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		/*Ice shelf: if bed below bathymetry, impose it at the bathymetry and update surface, elso do nothing */
+-		if(phi[i]<=0){
++		if(phi[i]<=0.){
+ 			if(b[i]<=r[i]){ 
+ 				b[i]        = r[i];
+ 				s[i]        = b[i]+h[i];
+@@ -7350,7 +7350,7 @@
+ 		}
+ 		/*Ice sheet: if hydrostatic bed above bathymetry, ice sheet starts to unground, elso do nothing */
+ 		/*Change only if AgressiveMigration or if the ice sheet is in contact with the ocean*/
+-		else{
++		else{ // phi>0
+ 			bed_hydro=-density*h[i];
+ 			if (bed_hydro>r[i]){
+ 				/*Unground only if the element is connected to the ice shelf*/
+@@ -7409,7 +7409,15 @@
+ 	this->inputs->AddInput(new TriaInput(BedEnum,&b[0],P1Enum));
+ 
+ 	/*Recalculate phi*/
+-	for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
++	for(i=0;i<NUMVERTICES;i++){
++		if(migration_style==SoftMigrationEnum){
++			bed_hydro=-density*h[i];
++			if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[nodes[i]->Sid()])){
++				phi[i]=h[i]+r[i]/density;
++			}
++		}
++		else phi[i]=h[i]+r[i]/density;
++	}
+ 	this->inputs->AddInput(new TriaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15958)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15959)
+@@ -11298,7 +11298,15 @@
+    this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
+ 
+ 	/*Recalculate phi*/
+-	for(i=0;i<NUMVERTICES;i++) phi[i]=h[i]+r[i]/density;
++	for(i=0;i<NUMVERTICES;i++){
++		if(migration_style==SoftMigrationEnum){
++			bed_hydro=-density*h[i];
++			if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[nodes[i]->Sid()])){
++				phi[i]=h[i]+r[i]/density;
++			}
++		}
++		else phi[i]=h[i]+r[i]/density;
++	}
+ 	this->inputs->AddInput(new PentaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
+ 	this->InputExtrude(MaskGroundediceLevelsetEnum,ElementEnum);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15959-15960.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15959-15960.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15959-15960.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15959)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15960)
+@@ -641,7 +641,7 @@
+ 		md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element')
+ 		md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node')
+ 		md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node')
+-		md.mask.groundedice_levelset=project3d(md,'vector',md.mask.grounded_icelevelset,'type','node')
++		md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node')
+ 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+ 			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+ 		if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
Index: /issm/oecreview/Archive/15392-16133/ISSM-15960-15961.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15960-15961.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15960-15961.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15960)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15961)
+@@ -16,8 +16,8 @@
+ 		self.elementongroundedice = float('NaN')
+ 		self.vertexonfloatingice  = float('NaN')
+ 		self.vertexongroundedice  = float('NaN')
+-		self.ice_levelset          = float('NaN')
+-		self.groundedice_levelset          = float('NaN')
++		self.ice_levelset         = float('NaN')
++		self.groundedice_levelset = float('NaN')
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
Index: /issm/oecreview/Archive/15392-16133/ISSM-15961-15962.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15961-15962.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15961-15962.diff	(revision 16134)
@@ -0,0 +1,101 @@
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15961)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15962)
+@@ -12,8 +12,6 @@
+ 	int                 migration_style,analysis_type;
+ 	IssmDouble         *vertices_potentially_ungrounding = NULL;
+ 	IssmDouble         *vertices_ungrounding             = NULL;
+-	IssmDouble         *old_floatingice                  = NULL;
+-	Vector<IssmDouble> *vec_old_floatingice              = NULL;
+ 	Element            *element                          = NULL;
+ 
+ 	if(VerboseModule()) _printf0_("   Migrating grounding line\n");
+@@ -41,21 +39,15 @@
+ 		vertices_ungrounding=PropagateFloatingiceToGroundedNeighbors(elements,nodes,vertices,parameters,vertices_potentially_ungrounding);
+ 	}
+ 
+-	/*Create vector with vertices initially floating and serialize*/
+-	vec_old_floatingice=CreateNodesOnFloatingIce(nodes,analysis_type);
+-	old_floatingice=vec_old_floatingice->ToMPISerial();
+-
+ 	/*Migrate grounding line : */
+ 	for(int i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->MigrateGroundingLine(old_floatingice,vertices_ungrounding);
++		element->MigrateGroundingLine(vertices_ungrounding);
+ 	}
+ 
+ 	/*free ressouces: */
+-	delete vec_old_floatingice;
+ 	xDelete<IssmDouble>(vertices_potentially_ungrounding);
+ 	xDelete<IssmDouble>(vertices_ungrounding);
+-	xDelete<IssmDouble>(old_floatingice);
+ }
+ 
+ /*FUNCTION CreateNodesOnFloatingIce {{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15961)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15962)
+@@ -139,7 +139,7 @@
+ 		#endif
+ 
+ 		#ifdef _HAVE_GROUNDINGLINE_
+-		virtual void   MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding)=0;
++		virtual void   MigrateGroundingLine(IssmDouble* sheet_ungrounding)=0;
+ 		virtual void   PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
+ 		virtual int    UpdatePotentialUngrounding(IssmDouble* potential_sheet_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf)=0;
+ 		#endif
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15961)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15962)
+@@ -7311,7 +7311,7 @@
+ 
+ #ifdef _HAVE_GROUNDINGLINE_
+ /*FUNCTION Tria::MigrateGroundingLine{{{*/
+-void  Tria::MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding){
++void  Tria::MigrateGroundingLine(IssmDouble* sheet_ungrounding){
+ 
+ 	int        i,migration_style;
+ 	bool       floatingelement = false;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15961)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15962)
+@@ -173,7 +173,7 @@
+ 
+ 		#ifdef _HAVE_GROUNDINGLINE_
+ 		void   PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+-		void   MigrateGroundingLine(IssmDouble* oldfloating,IssmDouble* sheet_ungrounding);
++		void   MigrateGroundingLine(IssmDouble* sheet_ungrounding);
+ 		int    UpdatePotentialUngrounding(IssmDouble* vertices_potentially_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf);
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15961)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15962)
+@@ -11199,7 +11199,7 @@
+ 
+ #ifdef _HAVE_GROUNDINGLINE_
+ /*FUNCTION Penta::MigrateGroundingLine{{{*/
+-void  Penta::MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding){
++void  Penta::MigrateGroundingLine(IssmDouble* sheet_ungrounding){
+ 
+ 	int        i,migration_style;
+ 	bool       floatingelement = false;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15961)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15962)
+@@ -169,7 +169,7 @@
+ 		#endif
+ 
+ 		#ifdef _HAVE_GROUNDINGLINE_
+-		void   MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding);
++		void   MigrateGroundingLine(IssmDouble* sheet_ungrounding);
+ 		void   PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+ 		int    UpdatePotentialUngrounding(IssmDouble* potential_sheet_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf);
+ 		#endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-15962-15963.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15962-15963.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15962-15963.diff	(revision 16134)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15962)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15963)
+@@ -7424,7 +7424,7 @@
+ /*FUNCTION Tria::PotentialUngrounding{{{*/
+ void  Tria::PotentialUngrounding(Vector<IssmDouble>* potential_ungrounding){
+ 
+-	IssmDouble  h[NUMVERTICES],r[NUMVERTICES];
++	IssmDouble  h[NUMVERTICES],r[NUMVERTICES],gl[NUMVERTICES];
+ 	IssmDouble  bed_hydro;
+ 	IssmDouble  rho_water,rho_ice,density;
+ 
+@@ -7434,11 +7434,12 @@
+ 	density=rho_ice/rho_water;
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&r[0],BathymetryEnum);
++	GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);
+ 
+ 	/*go through vertices, and figure out which ones are grounded and want to unground: */
+ 	for(int i=0;i<NUMVERTICES;i++){
+ 		/*Find if grounded vertices want to start floating*/
+-		if (!nodes[i]->IsFloating()){
++		if (gl[i]>0.){
+ 			bed_hydro=-density*h[i];
+ 			if(bed_hydro>r[i]){
+ 				/*Vertex that could potentially unground, flag it*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15962)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15963)
+@@ -11321,7 +11321,7 @@
+ /*FUNCTION Penta::PotentialUngrounding{{{*/
+ void  Penta::PotentialUngrounding(Vector<IssmDouble>* potential_ungrounding){
+ 
+-	IssmDouble  h[NUMVERTICES],r[NUMVERTICES];
++	IssmDouble  h[NUMVERTICES],r[NUMVERTICES],gl[NUMVERTICES];
+ 	IssmDouble  bed_hydro;
+ 	IssmDouble  rho_water,rho_ice,density;
+ 
+@@ -11331,11 +11331,12 @@
+ 	density=rho_ice/rho_water;
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&r[0],BathymetryEnum);
++	GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);
+ 
+ 	/*go through vertices, and figure out which ones are on the ice sheet, and want to unground: */
+ 	for(int i=0;i<NUMVERTICES;i++){
+ 		/*Find if grounded vertices want to start floating*/
+-		if (!nodes[i]->IsFloating()){
++		if (gl[i]>0.){
+ 			bed_hydro=-density*h[i];
+ 			if(bed_hydro>r[i]){
+ 				/*Vertex that could potentially unground, flag it*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15963-15964.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15963-15964.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15963-15964.diff	(revision 16134)
@@ -0,0 +1,92 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15963)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15964)
+@@ -7311,7 +7311,7 @@
+ 
+ #ifdef _HAVE_GROUNDINGLINE_
+ /*FUNCTION Tria::MigrateGroundingLine{{{*/
+-void  Tria::MigrateGroundingLine(IssmDouble* sheet_ungrounding){
++void  Tria::MigrateGroundingLine(IssmDouble* phi_ungrounding){
+ 
+ 	int        i,migration_style;
+ 	bool       floatingelement = false;
+@@ -7362,7 +7362,8 @@
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+-				else if(migration_style==SoftMigrationEnum && reCast<bool>(sheet_ungrounding[nodes[i]->Sid()])){
++				else if(migration_style==SoftMigrationEnum && reCast<bool>(sheet_ungrounding[vertices[i]->Sid()])){
++				//else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Sid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+@@ -7412,7 +7413,8 @@
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		if(migration_style==SoftMigrationEnum){
+ 			bed_hydro=-density*h[i];
+-			if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[nodes[i]->Sid()])){
++			//if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Sid()]<0.){
++			if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[vertices[i]->Sid()])){
+ 				phi[i]=h[i]+r[i]/density;
+ 			}
+ 		}
+@@ -7443,7 +7445,7 @@
+ 			bed_hydro=-density*h[i];
+ 			if(bed_hydro>r[i]){
+ 				/*Vertex that could potentially unground, flag it*/
+-				potential_ungrounding->SetValue(nodes[i]->Sid(),1,INS_VAL);
++				potential_ungrounding->SetValue(vertices[i]->Sid(),1,INS_VAL);
+ 			}
+ 		}
+ 	}
+@@ -7457,11 +7459,11 @@
+ 
+ 	/*Go through nodes, and whoever is on the potential_ungrounding, ends up in nodes_on_iceshelf: */
+ 	for(i=0;i<3;i++){
+-		if (reCast<bool>(vertices_potentially_ungrounding[nodes[i]->Sid()])){
+-			vec_nodes_on_iceshelf->SetValue(nodes[i]->Sid(),1,INS_VAL);
++		if (reCast<bool>(vertices_potentially_ungrounding[vertices[i]->Sid()])){
++			vec_nodes_on_iceshelf->SetValue(vertices[i]->Sid(),1,INS_VAL);
+ 
+ 			/*If node was not on ice shelf, we flipped*/
+-			if(nodes_on_iceshelf[nodes[i]->Sid()]==0){
++			if(nodes_on_iceshelf[vertices[i]->Sid()]==0){
+ 				nflipped++;
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15963)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15964)
+@@ -11252,7 +11252,7 @@
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+-				else if(migration_style==SoftMigrationEnum && reCast<int,IssmDouble>(sheet_ungrounding[nodes[i]->Sid()])){
++				else if(migration_style==SoftMigrationEnum && reCast<int,IssmDouble>(sheet_ungrounding[vertices[i]->Sid()])){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+@@ -11340,7 +11340,7 @@
+ 			bed_hydro=-density*h[i];
+ 			if(bed_hydro>r[i]){
+ 				/*Vertex that could potentially unground, flag it*/
+-				potential_ungrounding->SetValue(nodes[i]->Sid(),1,INS_VAL);
++				potential_ungrounding->SetValue(vertices[i]->Sid(),1,INS_VAL);
+ 			}
+ 		}
+ 	}
+@@ -11355,10 +11355,10 @@
+ 	/*Go through nodes, and whoever is on the potential_ungrounding, ends up in nodes_on_iceshelf: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		if (reCast<bool,IssmDouble>(vertices_potentially_ungrounding[nodes[i]->Sid()])){
+-			vec_nodes_on_iceshelf->SetValue(nodes[i]->Sid(),1,INS_VAL);
++			vec_nodes_on_iceshelf->SetValue(vertices[i]->Sid(),1,INS_VAL);
+ 
+ 			/*If node was not on ice shelf, we flipped*/
+-			if(nodes_on_iceshelf[nodes[i]->Sid()]==0){
++			if(nodes_on_iceshelf[vertices[i]->Sid()]==0){
+ 				nflipped++;
+ 			}
+ 		}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15964-15965.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15964-15965.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15964-15965.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.h	(revision 15964)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.h	(revision 15965)
+@@ -11,9 +11,7 @@
+ class Parameters;
+ 
+ /* local prototypes: */
+-void       GroundinglineMigrationx(Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters);
+-
+-Vector<IssmDouble>* CreateNodesOnFloatingIce(Nodes* nodes,int configuration_type);
+-IssmDouble*    PotentialUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters);
+-IssmDouble*    PropagateFloatingiceToGroundedNeighbors(Elements* elements,Nodes* nodes,Vertices* vertices,Parameters* parameters,IssmDouble* vertices_potentially_ungrounding);
++void         GroundinglineMigrationx(Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters);
++IssmDouble*  PotentialUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters);
++IssmDouble*  PropagateFloatingiceToGroundedNeighbors(Elements* elements,Nodes* nodes,Vertices* vertices,Parameters* parameters,IssmDouble* vertices_potentially_ungrounding);
+ #endif  /* _GROUNDINGLINEMIGRATIONX_H */
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15964)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15965)
+@@ -7311,7 +7311,7 @@
+ 
+ #ifdef _HAVE_GROUNDINGLINE_
+ /*FUNCTION Tria::MigrateGroundingLine{{{*/
+-void  Tria::MigrateGroundingLine(IssmDouble* phi_ungrounding){
++void  Tria::MigrateGroundingLine(IssmDouble* sheet_ungrounding){
+ 
+ 	int        i,migration_style;
+ 	bool       floatingelement = false;
Index: /issm/oecreview/Archive/15392-16133/ISSM-15965-15966.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15965-15966.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15965-15966.diff	(revision 16134)
@@ -0,0 +1,105 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15965)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 15966)
+@@ -412,14 +412,13 @@
+ syn keyword cType BoolElementResult
+ syn keyword cType BoolInput
+ syn keyword cType BoolParam
+-syn keyword cType classes
+ syn keyword cType Constraint
+ syn keyword cType Constraints
+ syn keyword cType Contour
+ syn keyword cType Contours
+ syn keyword cType ControlInput
++syn keyword cType DataSetParam
+ syn keyword cType DatasetInput
+-syn keyword cType DataSetParam
+ syn keyword cType DependentObject
+ syn keyword cType DofIndexing
+ syn keyword cType DoubleElementResult
+@@ -433,17 +432,16 @@
+ syn keyword cType ElementHook
+ syn keyword cType ElementMatrix
+ syn keyword cType ElementResult
++syn keyword cType ElementVector
+ syn keyword cType Elements
+-syn keyword cType ElementVector
+ syn keyword cType ExponentialVariogram
+ syn keyword cType ExternalResult
+ syn keyword cType FemModel
+ syn keyword cType FileParam
+ syn keyword cType Friction
+-syn keyword cType GaussianVariogram
+-syn keyword cType gaussobjects
+ syn keyword cType GaussPenta
+ syn keyword cType GaussTria
++syn keyword cType GaussianVariogram
+ syn keyword cType GenericExternalResult
+ syn keyword cType GenericOption
+ syn keyword cType GenericParam
+@@ -457,7 +455,6 @@
+ syn keyword cType IntParam
+ syn keyword cType IntVecParam
+ syn keyword cType IoModel
+-syn keyword cType krigingobjects
+ syn keyword cType Load
+ syn keyword cType Loads
+ syn keyword cType Matdamageice
+@@ -465,7 +462,6 @@
+ syn keyword cType Materials
+ syn keyword cType Matice
+ syn keyword cType Matpar
+-syn keyword cType matrixobjects
+ syn keyword cType MatrixParam
+ syn keyword cType Node
+ syn keyword cType Nodes
+@@ -473,8 +469,8 @@
+ syn keyword cType Observation
+ syn keyword cType Observations
+ syn keyword cType Option
++syn keyword cType OptionUtilities
+ syn keyword cType Options
+-syn keyword cType OptionUtilities
+ syn keyword cType Param
+ syn keyword cType Parameters
+ syn keyword cType Patch
+@@ -488,8 +484,8 @@
+ syn keyword cType Profiler
+ syn keyword cType Quadtree
+ syn keyword cType Results
++syn keyword cType RiftStruct
+ syn keyword cType Riftfront
+-syn keyword cType RiftStruct
+ syn keyword cType Segment
+ syn keyword cType SpcDynamic
+ syn keyword cType SpcStatic
+@@ -508,6 +504,10 @@
+ syn keyword cType VectorParam
+ syn keyword cType Vertex
+ syn keyword cType Vertices
++syn keyword cType classes
++syn keyword cType gaussobjects
++syn keyword cType krigingobjects
++syn keyword cType matrixobjects
+ "ISSM's objects end
+ "ISSM's Enums begin
+ syn keyword cConstant AutodiffIsautodiffEnum
+@@ -647,7 +647,7 @@
+ syn keyword cConstant MaskElementongroundediceEnum
+ syn keyword cConstant MaskVertexonfloatingiceEnum
+ syn keyword cConstant MaskVertexongroundediceEnum
+-syn keyword cConstant MaskIcelevelsetEnum
++syn keyword cConstant MaskIceLevelsetEnum
+ syn keyword cConstant MaterialsBetaEnum
+ syn keyword cConstant MaterialsHeatcapacityEnum
+ syn keyword cConstant MaterialsLatentheatEnum
+@@ -1036,7 +1036,7 @@
+ syn keyword cConstant SoftMigrationEnum
+ syn keyword cConstant SubelementMigrationEnum
+ syn keyword cConstant SubelementMigration2Enum
+-syn keyword cConstant GLlevelsetEnum
++syn keyword cConstant MaskGroundediceLevelsetEnum
+ syn keyword cConstant FSSolverEnum
+ syn keyword cConstant AdjointEnum
+ syn keyword cConstant ColinearEnum
Index: /issm/oecreview/Archive/15392-16133/ISSM-15966-15967.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15966-15967.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15966-15967.diff	(revision 16134)
@@ -0,0 +1,223 @@
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15966)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15967)
+@@ -50,33 +50,6 @@
+ 	xDelete<IssmDouble>(vertices_ungrounding);
+ }
+ 
+-/*FUNCTION CreateNodesOnFloatingIce {{{*/
+-Vector<IssmDouble>* CreateNodesOnFloatingIce(Nodes* nodes,int configuration_type){ 
+-
+-	int     i,numnods;
+-	Vector<IssmDouble>*   vec_nodes_on_floatingice = NULL;
+-	Node *node                     = NULL;
+-
+-	/*First, initialize nodes_on_floatingice, which will track which nodes have changed status: */
+-	numnods=nodes->NumberOfNodes(configuration_type);
+-	vec_nodes_on_floatingice=new Vector<IssmDouble>(numnods);
+-
+-	/*Loop through nodes, and fill vec_nodes_on_floatingice: */
+-	for(i=0;i<nodes->Size();i++){
+-		node=(Node*)nodes->GetObjectByOffset(i);
+-		if(node->InAnalysis(configuration_type)){
+-			if(node->IsFloating()){
+-				vec_nodes_on_floatingice->SetValue(node->Sid(),1.0,INS_VAL);
+-			}
+-		}
+-	}
+-
+-	/*Assemble vector: */
+-	vec_nodes_on_floatingice->Assemble();
+-
+-	return vec_nodes_on_floatingice;
+-}
+-/*%}}}*/
+ /*FUNCTION PotentialUngrounding {{{*/
+ IssmDouble*    PotentialUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters){ 
+ 
+@@ -110,10 +83,10 @@
+ 	int      i,analysis_type;
+ 	int      numberofvertices;
+ 	int      nflipped,local_nflipped;
+-	IssmDouble*  nodes_on_floatingice                  = NULL;
++	IssmDouble*  phi                  = NULL;
+ 	IssmDouble*  elements_neighboring_floatingce      = NULL;
+ 	Vector<IssmDouble>*      vec_elements_neighboring_floatingice = NULL;
+-	Vector<IssmDouble>*      vec_nodes_on_floatingice              = NULL;
++	Vector<IssmDouble>*      vec_phi              = NULL;
+ 	Node*    node                                  = NULL;
+ 	Element* element                               = NULL;
+ 
+@@ -121,9 +94,13 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	numberofvertices=vertices->NumberOfVertices();
+ 
+-	/*recover vec_nodes_on_floatingice*/
+-	vec_nodes_on_floatingice=CreateNodesOnFloatingIce(nodes,analysis_type);
+-	nodes_on_floatingice=vec_nodes_on_floatingice->ToMPISerial();
++	/*recover vec_phi*/
++	vec_phi=new Vector<IssmDouble>(vertices->NumberOfVertices());
++	for(i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		element->GetVectorFromInputs(vec_phi,MaskGroundediceLevelsetEnum);
++	}
++	phi=vec_phi->ToMPISerial();
+ 
+ 	nflipped=1; //bootstrap
+ 	while(nflipped){
+@@ -134,7 +111,7 @@
+ 		/*Figure out if any of the nodes of the element will be floating -> elements neighbouting the floating ice*/
+ 		for(i=0;i<elements->Size();i++){
+ 			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-			vec_elements_neighboring_floatingice->SetValue(element->Sid(),element->IsNodeOnShelfFromFlags(nodes_on_floatingice)?1.0:0.0,INS_VAL);
++			vec_elements_neighboring_floatingice->SetValue(element->Sid(),element->IsNodeOnShelfFromFlags(phi)?1.0:0.0,INS_VAL);
+ 		}
+ 
+ 		/*Assemble vector and serialize: */
+@@ -146,27 +123,27 @@
+ 		for(i=0;i<elements->Size();i++){
+ 			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 			if(reCast<int,IssmDouble>(elements_neighboring_floatingce[element->Sid()])){
+-				local_nflipped+=element->UpdatePotentialUngrounding(vertices_potentially_ungrounding,vec_nodes_on_floatingice,nodes_on_floatingice);
++				local_nflipped+=element->UpdatePotentialUngrounding(vertices_potentially_ungrounding,vec_phi,phi);
+ 			}
+ 		}
+-		vec_nodes_on_floatingice->Assemble();
++		vec_phi->Assemble();
+ 
+ 		ISSM_MPI_Allreduce(&local_nflipped,&nflipped,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		if(VerboseConvergence()) _printf0_("   Additional number of vertices allowed to unground: " << nflipped << "\n");
+ 
+ 		/*Avoid leaks: */
+ 		xDelete<IssmDouble>(elements_neighboring_floatingce);
+-		xDelete<IssmDouble>(nodes_on_floatingice);
++		xDelete<IssmDouble>(phi);
+ 
+ 		/*Assemble and serialize:*/
+ 		delete vec_elements_neighboring_floatingice;
+-		nodes_on_floatingice=vec_nodes_on_floatingice->ToMPISerial();
++		phi=vec_phi->ToMPISerial();
+ 	}
+ 
+ 	/*Free ressources:*/
+-	delete vec_nodes_on_floatingice;
++	delete vec_phi;
+ 	xDelete<IssmDouble>(elements_neighboring_floatingce);
+ 
+-	return nodes_on_floatingice;
++	return phi;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15966)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15967)
+@@ -1980,7 +1980,7 @@
+ 	bool shelf=false;
+ 
+ 	for(i=0;i<NUMVERTICES;i++){
+-		if (reCast<bool>(flags[nodes[i]->Sid()])){
++		if (flags[vertices[i]->Sid()]<0.){
+ 			shelf=true;
+ 			break;
+ 		}
+@@ -7311,7 +7311,7 @@
+ 
+ #ifdef _HAVE_GROUNDINGLINE_
+ /*FUNCTION Tria::MigrateGroundingLine{{{*/
+-void  Tria::MigrateGroundingLine(IssmDouble* sheet_ungrounding){
++void  Tria::MigrateGroundingLine(IssmDouble* phi_ungrounding){
+ 
+ 	int        i,migration_style;
+ 	bool       floatingelement = false;
+@@ -7362,8 +7362,8 @@
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+-				else if(migration_style==SoftMigrationEnum && reCast<bool>(sheet_ungrounding[vertices[i]->Sid()])){
+-				//else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Sid()]<0.){
++				//else if(migration_style==SoftMigrationEnum && reCast<bool>(sheet_ungrounding[vertices[i]->Sid()])){
++				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Sid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+@@ -7413,8 +7413,8 @@
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		if(migration_style==SoftMigrationEnum){
+ 			bed_hydro=-density*h[i];
+-			//if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Sid()]<0.){
+-			if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[vertices[i]->Sid()])){
++			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Sid()]<0.){
++			//if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[vertices[i]->Sid()])){
+ 				phi[i]=h[i]+r[i]/density;
+ 			}
+ 		}
+@@ -7460,10 +7460,10 @@
+ 	/*Go through nodes, and whoever is on the potential_ungrounding, ends up in nodes_on_iceshelf: */
+ 	for(i=0;i<3;i++){
+ 		if (reCast<bool>(vertices_potentially_ungrounding[vertices[i]->Sid()])){
+-			vec_nodes_on_iceshelf->SetValue(vertices[i]->Sid(),1,INS_VAL);
++			vec_nodes_on_iceshelf->SetValue(vertices[i]->Sid(),-1.,INS_VAL);
+ 
+ 			/*If node was not on ice shelf, we flipped*/
+-			if(nodes_on_iceshelf[vertices[i]->Sid()]==0){
++			if(nodes_on_iceshelf[vertices[i]->Sid()]>=0.){
+ 				nflipped++;
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15966)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15967)
+@@ -2778,7 +2778,7 @@
+ 	bool shelf=false;
+ 
+ 	for(i=0;i<NUMVERTICES;i++){
+-		if (reCast<bool,IssmDouble>(flags[nodes[i]->Sid()])){
++		if (flags[vertices[i]->Sid()]<0.){
+ 			shelf=true;
+ 			break;
+ 		}
+@@ -11199,7 +11199,7 @@
+ 
+ #ifdef _HAVE_GROUNDINGLINE_
+ /*FUNCTION Penta::MigrateGroundingLine{{{*/
+-void  Penta::MigrateGroundingLine(IssmDouble* sheet_ungrounding){
++void  Penta::MigrateGroundingLine(IssmDouble* phi_ungrounding){
+ 
+ 	int        i,migration_style;
+ 	bool       floatingelement = false;
+@@ -11252,7 +11252,8 @@
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+-				else if(migration_style==SoftMigrationEnum && reCast<int,IssmDouble>(sheet_ungrounding[vertices[i]->Sid()])){
++				//else if(migration_style==SoftMigrationEnum && reCast<int,IssmDouble>(sheet_ungrounding[vertices[i]->Sid()])){
++				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Sid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+@@ -11301,7 +11302,8 @@
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		if(migration_style==SoftMigrationEnum){
+ 			bed_hydro=-density*h[i];
+-			if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[nodes[i]->Sid()])){
++			//if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[nodes[i]->Sid()])){
++			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Sid()]<0.){
+ 				phi[i]=h[i]+r[i]/density;
+ 			}
+ 		}
+@@ -11355,10 +11357,10 @@
+ 	/*Go through nodes, and whoever is on the potential_ungrounding, ends up in nodes_on_iceshelf: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		if (reCast<bool,IssmDouble>(vertices_potentially_ungrounding[nodes[i]->Sid()])){
+-			vec_nodes_on_iceshelf->SetValue(vertices[i]->Sid(),1,INS_VAL);
++			vec_nodes_on_iceshelf->SetValue(vertices[i]->Sid(),-1.,INS_VAL);
+ 
+ 			/*If node was not on ice shelf, we flipped*/
+-			if(nodes_on_iceshelf[vertices[i]->Sid()]==0){
++			if(nodes_on_iceshelf[vertices[i]->Sid()]>=0.){
+ 				nflipped++;
+ 			}
+ 		}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15967-15968.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15967-15968.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15967-15968.diff	(revision 16134)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15967)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15968)
+@@ -11,7 +11,7 @@
+ 
+ 	int                 migration_style,analysis_type;
+ 	IssmDouble         *vertices_potentially_ungrounding = NULL;
+-	IssmDouble         *vertices_ungrounding             = NULL;
++	IssmDouble         *phi_ungrounding                  = NULL;
+ 	Element            *element                          = NULL;
+ 
+ 	if(VerboseModule()) _printf0_("   Migrating grounding line\n");
+@@ -36,27 +36,27 @@
+ 		vertices_potentially_ungrounding=PotentialUngrounding(elements,vertices,parameters);
+ 
+ 		/*propagate ice shelf into connex areas of the ice sheet that potentially want to unground: */
+-		vertices_ungrounding=PropagateFloatingiceToGroundedNeighbors(elements,nodes,vertices,parameters,vertices_potentially_ungrounding);
++		phi_ungrounding=PropagateFloatingiceToGroundedNeighbors(elements,nodes,vertices,parameters,vertices_potentially_ungrounding);
+ 	}
+ 
+ 	/*Migrate grounding line : */
+ 	for(int i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->MigrateGroundingLine(vertices_ungrounding);
++		element->MigrateGroundingLine(phi_ungrounding);
+ 	}
+ 
+ 	/*free ressouces: */
+ 	xDelete<IssmDouble>(vertices_potentially_ungrounding);
+-	xDelete<IssmDouble>(vertices_ungrounding);
++	xDelete<IssmDouble>(phi_ungrounding);
+ }
+ 
+ /*FUNCTION PotentialUngrounding {{{*/
+ IssmDouble*    PotentialUngrounding(Elements* elements,Vertices* vertices,Parameters* parameters){ 
+ 
+-	int      i,numberofvertices;
+-	IssmDouble*  vertices_potentially_ungrounding      = NULL;
+-	Vector<IssmDouble>*      vec_vertices_potentially_ungrounding  = NULL;
+-	Element* element                               = NULL;
++	int                 i,numberofvertices;
++	IssmDouble*         vertices_potentially_ungrounding      = NULL;
++	Vector<IssmDouble>* vec_vertices_potentially_ungrounding  = NULL;
++	Element*            element                               = NULL;
+ 
+ 	/*Initialize vector with number of vertices*/
+ 	numberofvertices=vertices->NumberOfVertices();
+@@ -79,17 +79,15 @@
+ /*}}}*/
+ /*FUNCTION PropagateFloatingiceToGroundedNeighbors {{{*/
+ IssmDouble*    PropagateFloatingiceToGroundedNeighbors(Elements* elements,Nodes* nodes,Vertices* vertices,Parameters* parameters,IssmDouble* vertices_potentially_ungrounding){ 
++	int                 i,analysis_type,numberofvertices;
++	int                 nflipped,local_nflipped;
++	IssmDouble*         phi                                  = NULL;
++	IssmDouble*         elements_neighboring_floatingce      = NULL;
++	Vector<IssmDouble>* vec_elements_neighboring_floatingice = NULL;
++	Vector<IssmDouble>* vec_phi                              = NULL;
++	Node*               node                                  = NULL;
++	Element*            element                               = NULL;
+ 
+-	int      i,analysis_type;
+-	int      numberofvertices;
+-	int      nflipped,local_nflipped;
+-	IssmDouble*  phi                  = NULL;
+-	IssmDouble*  elements_neighboring_floatingce      = NULL;
+-	Vector<IssmDouble>*      vec_elements_neighboring_floatingice = NULL;
+-	Vector<IssmDouble>*      vec_phi              = NULL;
+-	Node*    node                                  = NULL;
+-	Element* element                               = NULL;
+-
+ 	/*recover parameters: */
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	numberofvertices=vertices->NumberOfVertices();
Index: /issm/oecreview/Archive/15392-16133/ISSM-15968-15969.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15968-15969.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15968-15969.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15968)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15969)
+@@ -98,6 +98,7 @@
+ 		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->GetVectorFromInputs(vec_phi,MaskGroundediceLevelsetEnum);
+ 	}
++	vec_phi->Assemble();
+ 	phi=vec_phi->ToMPISerial();
+ 
+ 	nflipped=1; //bootstrap
Index: /issm/oecreview/Archive/15392-16133/ISSM-15969-15970.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15969-15970.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15969-15970.diff	(revision 16134)
@@ -0,0 +1,114 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15969)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15970)
+@@ -1980,7 +1980,7 @@
+ 	bool shelf=false;
+ 
+ 	for(i=0;i<NUMVERTICES;i++){
+-		if (flags[vertices[i]->Sid()]<0.){
++		if (flags[vertices[i]->Pid()]<0.){
+ 			shelf=true;
+ 			break;
+ 		}
+@@ -7362,8 +7362,7 @@
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+-				//else if(migration_style==SoftMigrationEnum && reCast<bool>(sheet_ungrounding[vertices[i]->Sid()])){
+-				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Sid()]<0.){
++				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Pid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+@@ -7413,8 +7412,7 @@
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		if(migration_style==SoftMigrationEnum){
+ 			bed_hydro=-density*h[i];
+-			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Sid()]<0.){
+-			//if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[vertices[i]->Sid()])){
++			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Pid()]<0.){
+ 				phi[i]=h[i]+r[i]/density;
+ 			}
+ 		}
+@@ -7445,7 +7443,7 @@
+ 			bed_hydro=-density*h[i];
+ 			if(bed_hydro>r[i]){
+ 				/*Vertex that could potentially unground, flag it*/
+-				potential_ungrounding->SetValue(vertices[i]->Sid(),1,INS_VAL);
++				potential_ungrounding->SetValue(vertices[i]->Pid(),1,INS_VAL);
+ 			}
+ 		}
+ 	}
+@@ -7459,11 +7457,11 @@
+ 
+ 	/*Go through nodes, and whoever is on the potential_ungrounding, ends up in nodes_on_iceshelf: */
+ 	for(i=0;i<3;i++){
+-		if (reCast<bool>(vertices_potentially_ungrounding[vertices[i]->Sid()])){
+-			vec_nodes_on_iceshelf->SetValue(vertices[i]->Sid(),-1.,INS_VAL);
++		if (reCast<bool>(vertices_potentially_ungrounding[vertices[i]->Pid()])){
++			vec_nodes_on_iceshelf->SetValue(vertices[i]->Pid(),-1.,INS_VAL);
+ 
+ 			/*If node was not on ice shelf, we flipped*/
+-			if(nodes_on_iceshelf[vertices[i]->Sid()]>=0.){
++			if(nodes_on_iceshelf[vertices[i]->Pid()]>=0.){
+ 				nflipped++;
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15969)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15970)
+@@ -2778,7 +2778,7 @@
+ 	bool shelf=false;
+ 
+ 	for(i=0;i<NUMVERTICES;i++){
+-		if (flags[vertices[i]->Sid()]<0.){
++		if (flags[vertices[i]->Pid()]<0.){
+ 			shelf=true;
+ 			break;
+ 		}
+@@ -11252,8 +11252,7 @@
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+ 					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+-				//else if(migration_style==SoftMigrationEnum && reCast<int,IssmDouble>(sheet_ungrounding[vertices[i]->Sid()])){
+-				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Sid()]<0.){
++				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Pid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+@@ -11302,8 +11301,7 @@
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		if(migration_style==SoftMigrationEnum){
+ 			bed_hydro=-density*h[i];
+-			//if(phi[i]<0. || bed_hydro<=r[i] || reCast<bool>(sheet_ungrounding[nodes[i]->Sid()])){
+-			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Sid()]<0.){
++			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Pid()]<0.){
+ 				phi[i]=h[i]+r[i]/density;
+ 			}
+ 		}
+@@ -11342,7 +11340,7 @@
+ 			bed_hydro=-density*h[i];
+ 			if(bed_hydro>r[i]){
+ 				/*Vertex that could potentially unground, flag it*/
+-				potential_ungrounding->SetValue(vertices[i]->Sid(),1,INS_VAL);
++				potential_ungrounding->SetValue(vertices[i]->Pid(),1,INS_VAL);
+ 			}
+ 		}
+ 	}
+@@ -11356,11 +11354,11 @@
+ 
+ 	/*Go through nodes, and whoever is on the potential_ungrounding, ends up in nodes_on_iceshelf: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		if (reCast<bool,IssmDouble>(vertices_potentially_ungrounding[nodes[i]->Sid()])){
+-			vec_nodes_on_iceshelf->SetValue(vertices[i]->Sid(),-1.,INS_VAL);
++		if (reCast<bool,IssmDouble>(vertices_potentially_ungrounding[nodes[i]->Pid()])){
++			vec_nodes_on_iceshelf->SetValue(vertices[i]->Pid(),-1.,INS_VAL);
+ 
+ 			/*If node was not on ice shelf, we flipped*/
+-			if(nodes_on_iceshelf[vertices[i]->Sid()]>=0.){
++			if(nodes_on_iceshelf[vertices[i]->Pid()]>=0.){
+ 				nflipped++;
+ 			}
+ 		}
Index: /issm/oecreview/Archive/15392-16133/ISSM-15970-15971.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15970-15971.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15970-15971.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15970)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15971)
+@@ -11354,7 +11354,7 @@
+ 
+ 	/*Go through nodes, and whoever is on the potential_ungrounding, ends up in nodes_on_iceshelf: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		if (reCast<bool,IssmDouble>(vertices_potentially_ungrounding[nodes[i]->Pid()])){
++		if (reCast<bool,IssmDouble>(vertices_potentially_ungrounding[vertices[i]->Pid()])){
+ 			vec_nodes_on_iceshelf->SetValue(vertices[i]->Pid(),-1.,INS_VAL);
+ 
+ 			/*If node was not on ice shelf, we flipped*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15971-15972.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15971-15972.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15971-15972.diff	(revision 16134)
@@ -0,0 +1,311 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15971)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15972)
+@@ -47,7 +47,6 @@
+ 
+ 		virtual int    Sid()=0;
+ 		virtual bool   IsFloating()=0; 
+-		virtual bool   IsNodeOnShelf()=0; 
+ 		virtual bool   IsNodeOnShelfFromFlags(IssmDouble* flags)=0; 
+ 		virtual bool   IsOnBed()=0;
+ 		virtual void   GetInputListOnVertices(IssmDouble* pvalue,int enumtype)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15971)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15972)
+@@ -1666,6 +1666,7 @@
+ 	IssmDouble* oldthickness = xNew<IssmDouble>(numnodes);
+ 	IssmDouble* oldbed       = xNew<IssmDouble>(numnodes);
+ 	IssmDouble* oldsurface   = xNew<IssmDouble>(numnodes);
++	IssmDouble* phi          = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	this->parameters->FindParam(&minthickness,MasstransportMinThicknessEnum);
+@@ -1680,15 +1681,16 @@
+ 	GetInputListOnNodes(&oldbed[0],BedEnum);
+ 	GetInputListOnNodes(&oldsurface[0],SurfaceEnum);
+ 	GetInputListOnNodes(&oldthickness[0],ThicknessEnum);
++	GetInputListOnNodes(&phi[0],MaskGroundediceLevelsetEnum);
+ 
+-	/*Fing MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
++	/*Find MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
+ 	this->parameters->FindParam(&hydroadjustment,MasstransportHydrostaticAdjustmentEnum);
+ 	rho_ice=matpar->GetRhoIce();
+ 	rho_water=matpar->GetRhoWater();
+ 
+ 	for(i=0;i<numnodes;i++) {
+ 		/*If shelf: hydrostatic equilibrium*/
+-		if (this->nodes[i]->IsGrounded()){
++		if (phi[i]>0.){
+ 			newsurface[i] = oldbed[i]+newthickness[i]; //surface = oldbed + newthickness
+ 			newbed[i]     = oldbed[i];                 //same bed: do nothing
+ 		}
+@@ -1717,6 +1719,7 @@
+ 	xDelete<IssmDouble>(oldthickness);
+ 	xDelete<IssmDouble>(oldbed);
+ 	xDelete<IssmDouble>(oldsurface);
++	xDelete<IssmDouble>(phi);
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+@@ -1958,21 +1961,6 @@
+ 	return shelf;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::IsNodeOnShelf {{{*/
+-bool   Tria::IsNodeOnShelf(){
+-
+-	int  i;
+-	bool shelf=false;
+-
+-	for(i=0;i<3;i++){
+-		if (nodes[i]->IsFloating()){
+-			shelf=true;
+-			break;
+-		}
+-	}
+-	return shelf;
+-}
+-/*}}}*/
+ /*FUNCTION Tria::IsNodeOnShelfFromFlags {{{*/
+ bool   Tria::IsNodeOnShelfFromFlags(IssmDouble* flags){
+ 
+@@ -7344,8 +7332,6 @@
+ 				s[i]        = b[i]+h[i];
+ 				floating[i] = false;
+ 				grounded[i] = true;
+-				nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,false));
+-				nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,true));
+ 			}
+ 		}
+ 		/*Ice sheet: if hydrostatic bed above bathymetry, ice sheet starts to unground, elso do nothing */
+@@ -7359,16 +7345,12 @@
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+ 					grounded[i] = false;
+-					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+-					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+ 				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Pid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+ 					grounded[i] = false;
+-					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+-					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+ 				else{
+ 					if(migration_style!=SoftMigrationEnum) _error_("Error: migration should be Aggressive, Soft or Subelement");
+@@ -7377,10 +7359,22 @@
+ 		}
+ 	}
+ 
++	/*Recalculate phi*/
++	for(i=0;i<NUMVERTICES;i++){
++		if(migration_style==SoftMigrationEnum){
++			bed_hydro=-density*h[i];
++			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Pid()]<0.){
++				phi[i]=h[i]+r[i]/density;
++			}
++		}
++		else phi[i]=h[i]+r[i]/density;
++	}
++	this->inputs->AddInput(new TriaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
++
+ 	/*SubelementMigrationEnum: if one grounded, all grounded*/
+ 	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
+ 		for(i=0;i<NUMVERTICES;i++){
+-			if(nodes[i]->IsGrounded()){
++			if(phi[i]>0.){
+ 				groundedelement=true;
+ 				break;
+ 			}
+@@ -7390,7 +7384,7 @@
+ 	else{
+ 		/*Otherwise: if one floating, all floating*/
+ 		for(i=0;i<NUMVERTICES;i++){
+-			if(nodes[i]->IsFloating()){
++			if(phi[i]<=0.){
+ 				floatingelement=true;
+ 				break;
+ 			}
+@@ -7408,17 +7402,6 @@
+ 	this->inputs->AddInput(new TriaInput(SurfaceEnum,&s[0],P1Enum));
+ 	this->inputs->AddInput(new TriaInput(BedEnum,&b[0],P1Enum));
+ 
+-	/*Recalculate phi*/
+-	for(i=0;i<NUMVERTICES;i++){
+-		if(migration_style==SoftMigrationEnum){
+-			bed_hydro=-density*h[i];
+-			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Pid()]<0.){
+-				phi[i]=h[i]+r[i]/density;
+-			}
+-		}
+-		else phi[i]=h[i]+r[i]/density;
+-	}
+-	this->inputs->AddInput(new TriaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
+ }
+ /*}}}*/
+ /*FUNCTION Tria::PotentialUngrounding{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15971)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15972)
+@@ -87,7 +87,6 @@
+ 		int         Sid();
+ 		bool        IsOnBed();
+ 		bool        IsFloating();
+-		bool        IsNodeOnShelf(); 
+ 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags);
+ 		bool        NoIceInElement();
+ 		void        GetSolutionFromInputs(Vector<IssmDouble>* solution);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15971)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15972)
+@@ -2367,6 +2367,7 @@
+ 	IssmDouble oldbed[NUMVERTICES];
+ 	IssmDouble oldsurface[NUMVERTICES];
+ 	IssmDouble oldthickness[NUMVERTICES];
++	IssmDouble phi[NUMVERTICES];
+ 	Penta  *penta   = NULL;
+ 
+ 	/*If not on bed, return*/
+@@ -2389,6 +2390,7 @@
+ 	GetInputListOnVertices(&oldbed[0],BedEnum);
+ 	GetInputListOnVertices(&oldsurface[0],SurfaceEnum);
+ 	GetInputListOnVertices(&oldthickness[0],ThicknessEnum);
++	GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);
+ 
+ 	/*Fing MasstransportHydrostaticAdjustment to figure out how to update the geometry:*/
+ 	this->parameters->FindParam(&hydroadjustment,MasstransportHydrostaticAdjustmentEnum);
+@@ -2399,7 +2401,7 @@
+ 
+ 	for(i=0;i<numdof;i++) {
+ 		/*If shelf: hydrostatic equilibrium*/
+-		if (this->nodes[i]->IsGrounded()){
++		if (phi[i]>0.){
+ 			newsurface[i]=oldbed[i]+newthickness[i]; //surface = oldbed + newthickness
+ 			newbed[i]=oldbed[i];               //same bed: do nothing
+ 		}
+@@ -2756,21 +2758,6 @@
+ 	return onshelf;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::IsNodeOnShelf {{{*/
+-bool   Penta::IsNodeOnShelf(){
+-
+-	int  i;
+-	bool shelf=false;
+-
+-	for(i=0;i<6;i++){
+-		if (nodes[i]->IsFloating()){
+-			shelf=true;
+-			break;
+-		}
+-	}
+-	return shelf;
+-}
+-/*}}}*/
+ /*FUNCTION Penta::IsNodeOnShelfFromFlags {{{*/
+ bool   Penta::IsNodeOnShelfFromFlags(IssmDouble* flags){
+ 
+@@ -11234,8 +11221,6 @@
+ 				s[i]        = b[i]+h[i];
+ 				floating[i] = false;
+ 				grounded[i] = true;
+-				nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,false));
+-				nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,true));
+ 			}
+ 		}
+ 		/*Ice sheet: if hydrostatic bed above bathymetry, ice sheet starts to unground, elso do nothing */
+@@ -11249,16 +11234,12 @@
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+ 					grounded[i] = false;
+-					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+-					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+ 				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Pid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+ 					grounded[i] = false;
+-					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,true));
+-					nodes[i]->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,false));
+ 				}
+ 				else{
+ 					if(migration_style!=SoftMigrationEnum) _error_("Error: migration should be Aggressive, Soft or Subelement");
+@@ -11267,10 +11248,23 @@
+ 		}
+ 	}
+ 
++	/*Recalculate phi*/
++	for(i=0;i<NUMVERTICES;i++){
++		if(migration_style==SoftMigrationEnum){
++			bed_hydro=-density*h[i];
++			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Pid()]<0.){
++				phi[i]=h[i]+r[i]/density;
++			}
++		}
++		else phi[i]=h[i]+r[i]/density;
++	}
++	this->inputs->AddInput(new PentaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
++	this->InputExtrude(MaskGroundediceLevelsetEnum,ElementEnum);
++
+ 	/*SubelementMigrationEnum: if one grounded, all grounded*/
+ 	if(migration_style==SubelementMigrationEnum){
+ 		for(i=0;i<NUMVERTICES;i++){
+-			if(nodes[i]->IsGrounded()){
++			if(phi[i]>0.){
+ 				groundedelement=true;
+ 				break;
+ 			}
+@@ -11279,7 +11273,7 @@
+ 	}
+ 	else{
+ 		for(i=0;i<NUMVERTICES;i++){
+-			if(nodes[i]->IsFloating()){
++			if(phi[i]<=0.){
+ 				floatingelement=true;
+ 				break;
+ 			}
+@@ -11297,25 +11291,10 @@
+ 	this->inputs->AddInput(new PentaInput(BedEnum,&b[0],P1Enum));
+    this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
+ 
+-	/*Recalculate phi*/
+-	for(i=0;i<NUMVERTICES;i++){
+-		if(migration_style==SoftMigrationEnum){
+-			bed_hydro=-density*h[i];
+-			if(phi[i]<0. || bed_hydro<=r[i] || phi_ungrounding[vertices[i]->Pid()]<0.){
+-				phi[i]=h[i]+r[i]/density;
+-			}
+-		}
+-		else phi[i]=h[i]+r[i]/density;
+-	}
+-	this->inputs->AddInput(new PentaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
+-	this->InputExtrude(MaskGroundediceLevelsetEnum,ElementEnum);
+-
+ 	/*Extrude inputs*/
+ 	this->InputExtrude(SurfaceEnum,ElementEnum);
+ 	this->InputExtrude(BedEnum,ElementEnum);
+ 	this->InputExtrude(MaskElementonfloatingiceEnum,ElementEnum);
+-	this->InputExtrude(MaskVertexonfloatingiceEnum,NodeEnum);
+-	this->InputExtrude(MaskVertexongroundediceEnum,NodeEnum);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::PotentialUngrounding{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15971)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15972)
+@@ -222,7 +222,6 @@
+ 		bool	         IsOnSurface(void);
+ 		bool	         IsOnBed(void);
+ 		bool           IsFloating(void); 
+-		bool           IsNodeOnShelf(); 
+ 		bool           IsNodeOnShelfFromFlags(IssmDouble* flags);
+ 		bool           NoIceInElement(void); 
+ 		IssmDouble     MinEdgeLength(IssmDouble xyz_list[6][3]);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15972-15973.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15972-15973.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15972-15973.diff	(revision 16134)
@@ -0,0 +1,70 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15972)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15973)
+@@ -7302,6 +7302,7 @@
+ void  Tria::MigrateGroundingLine(IssmDouble* phi_ungrounding){
+ 
+ 	int        i,migration_style;
++	bool       oldfloating;
+ 	bool       floatingelement = false;
+ 	bool       groundedelement = false;
+ 	IssmDouble bed_hydro,yts,gl_melting_rate;
+@@ -7319,9 +7320,10 @@
+ 	GetInputListOnVertices(&b[0],BedEnum);
+ 	GetInputListOnVertices(&r[0],BathymetryEnum);
+ 	GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);
+-	rho_water = matpar->GetRhoWater();
+-	rho_ice   = matpar->GetRhoIce();
+-	density   = rho_ice/rho_water;
++	rho_water   = matpar->GetRhoWater();
++	rho_ice     = matpar->GetRhoIce();
++	density     = rho_ice/rho_water;
++	oldfloating = this->IsFloating(); //figure out if element is floating before we start to change everything
+ 
+ 	/*go through vertices, and update inputs, considering them to be TriaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+@@ -7392,7 +7394,7 @@
+ 	}
+ 
+    /*Add basal melting rate if element just ungrounded*/
+-	if(!this->IsFloating() && floatingelement==true){
++	if(!oldfloating && floatingelement==true){
+ 		for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
+ 		this->inputs->AddInput(new TriaInput(BasalforcingsMeltingRateEnum,&melting[0],P1Enum));
+ 	} 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15972)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15973)
+@@ -11189,6 +11189,7 @@
+ void  Penta::MigrateGroundingLine(IssmDouble* phi_ungrounding){
+ 
+ 	int        i,migration_style;
++	bool       oldfloating;
+ 	bool       floatingelement = false;
+ 	bool       groundedelement = false;
+ 	IssmDouble bed_hydro,yts,gl_melting_rate;
+@@ -11208,9 +11209,10 @@
+ 	GetInputListOnVertices(&b[0],BedEnum);
+ 	GetInputListOnVertices(&r[0],BathymetryEnum);
+ 	GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);
+-	rho_water = matpar->GetRhoWater();
+-	rho_ice   = matpar->GetRhoIce();
+-	density   = rho_ice/rho_water;
++	rho_water   = matpar->GetRhoWater();
++	rho_ice     = matpar->GetRhoIce();
++	density     = rho_ice/rho_water;
++	oldfloating = this->IsFloating(); //figure out if the element is floating before starting to change everything
+ 
+ 	/*go through vertices, and update inputs, considering them to be PentaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+@@ -11281,7 +11283,7 @@
+ 	}
+ 
+    /*Add basal melting rate if element just ungrounded*/
+-	if(!this->IsFloating() && floatingelement==true){
++	if(!oldfloating && floatingelement==true){
+ 		for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
+ 		this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum,&melting[0],P1Enum));
+ 	} 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15973-15974.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15973-15974.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15973-15974.diff	(revision 16134)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15973)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15974)
+@@ -4663,7 +4663,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	rho_ice=matpar->GetRhoIce();
+ 	heatcapacity=matpar->GetHeatCapacity();
+@@ -4915,7 +4915,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	rho_ice=matpar->GetRhoIce();
+ 	heatcapacity=matpar->GetHeatCapacity();
+@@ -6210,7 +6210,7 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	GradientIndexing(&vertexpidlist[0],control_index);
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 	Input* adjointx_input=inputs->GetInput(AdjointxEnum);               _assert_(adjointx_input);
+ 	Input* adjointy_input=inputs->GetInput(AdjointyEnum);               _assert_(adjointy_input);
+ 	Input* vx_input=inputs->GetInput(VxEnum);                           _assert_(vx_input);
+@@ -6282,7 +6282,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 	GradientIndexing(&vertexpidlist[0],control_index);
+ 	Input* drag_input    =inputs->GetInput(FrictionCoefficientEnum); _assert_(drag_input);
+ 	Input* vx_input      =inputs->GetInput(VxEnum);                  _assert_(vx_input);
+@@ -7192,7 +7192,7 @@
+ 
+ 	/*retrieve inputs :*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum);           _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);           _assert_(vy_input);
+@@ -8047,7 +8047,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
++	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15974-15975.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15974-15975.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15974-15975.diff	(revision 16134)
@@ -0,0 +1,132 @@
+Index: ../trunk-jpl/test/Archives/Archive313.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive307.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive509.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive510.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive322.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive403.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive513.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive325.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive502.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive421.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive415.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive455.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive410.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive505.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive317.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive312.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive326.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive407.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive508.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive321.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive315.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive416.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive329.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive411.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive512.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive324.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive318.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive419.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15975-15976.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15975-15976.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15975-15976.diff	(revision 16134)
@@ -0,0 +1,119 @@
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 15975)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 15976)
+@@ -34,7 +34,6 @@
+ 
+ 		bool         indexingupdate;
+ 		DofIndexing  indexing;
+-		Inputs      *inputs;               //properties of this node
+ 		int          analysis_type;
+ 		IssmDouble   coord_system[3][3];
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15975)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15976)
+@@ -2027,13 +2027,6 @@
+ 		base_inputs=xNew<Input*>(num_inputs);
+ 		base_inputs[0]=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+-	else if (object_type==NodeEnum){
+-		num_inputs=3; //only the three upper nodes
+-		base_inputs=xNew<Input*>(num_inputs);
+-		for(i=0;i<num_inputs;i++){
+-			base_inputs[i]=(Input*)this->nodes[i]->inputs->GetInput(enum_type);
+-		}
+-	}
+ 	else{
+ 		_error_("object of type " << EnumToStringx(object_type) << " not supported yet");
+ 	}
+@@ -2061,9 +2054,6 @@
+ 			else if(object_type==MaterialsEnum){
+ 				penta->material->inputs->AddInput((Input*)copy);
+ 			}
+-			else if(object_type==NodeEnum){
+-				penta->nodes[i+3]->inputs->AddInput((Input*)copy); //change only the three upper nodes
+-			}
+ 			else{
+ 				_error_("object of type " << EnumToStringx(object_type) << " not supported yet");
+ 			}
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 15975)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 15976)
+@@ -18,7 +18,6 @@
+ /*FUNCTION Node::Node() default constructor {{{*/
+ Node::Node(){
+ 	this->approximation=0;
+-	this->inputs=NULL;
+ }
+ /*}}}*/
+ /*FUNCTION Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int approximation) {{{*/
+@@ -47,13 +46,6 @@
+ 	else
+ 	 this->approximation=0;
+ 
+-	//intialize inputs, and add as many inputs per element as requested: 
+-	this->inputs=new Inputs();
+-	if(iomodel->Data(MaskVertexonfloatingiceEnum))
+-	 this->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,reCast<bool>(iomodel->Data(MaskVertexonfloatingiceEnum)[io_index])));
+-	if(iomodel->Data(MaskVertexongroundediceEnum))
+-	  this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<bool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index])));
+-
+ 	/*Stressbalance Horiz*/
+ 	#ifdef _HAVE_STRESSBALANCE_
+ 	if(analysis_type==StressbalanceAnalysisEnum){
+@@ -123,7 +115,6 @@
+ /*}}}*/
+ /*FUNCTION Node::~Node(){{{*/
+ Node::~Node(){
+-	delete inputs;
+ 	return;
+ }
+ /*}}}*/
+@@ -139,7 +130,6 @@
+ 	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
+ 	_printf_("   indexingupdate: " << indexingupdate << "\n");
+ 	indexing.Echo();
+-	_printf_("   inputs: " << inputs << "\n");
+ 
+ }
+ /*}}}*/
+@@ -153,7 +143,6 @@
+ 	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
+ 	_printf_("   indexingupdate: " << indexingupdate << "\n");
+ 	indexing.DeepEcho();
+-	_printf_("   inputs\n");
+ 
+ }
+ /*}}}*/
+@@ -578,28 +567,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Node::IsGrounded {{{*/
+-int   Node::IsGrounded(){
+-
+-	bool onsheet;
+-
+-	/*recover parameters: */
+-	inputs->GetInputValue(&onsheet,MaskVertexongroundediceEnum);
+-
+-	return onsheet;
+-}		
+-/*}}}*/
+-/*FUNCTION Node::IsFloating {{{*/
+-int   Node::IsFloating(){
+-
+-	bool onshelf;
+-
+-	/*recover parameters: */
+-	inputs->GetInputValue(&onshelf,MaskVertexonfloatingiceEnum);
+-
+-	return onshelf;
+-}
+-/*}}}*/
+ /*FUNCTION Node::InputUpdateFromVector(IssmDouble* vector, int name, int type){{{*/
+ void  Node::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15976-15977.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15976-15977.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15976-15977.diff	(revision 16134)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive515.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive516.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15977-15978.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15977-15978.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15977-15978.diff	(revision 16134)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15977)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15978)
+@@ -1957,7 +1957,19 @@
+ bool   Tria::IsFloating(){
+ 
+ 	bool shelf;
+-	inputs->GetInputValue(&shelf,MaskElementonfloatingiceEnum);
++	int  migration_style;
++	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
++
++	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){ //Floating if all nodes are floating
++		if(this->inputs->Max(MaskGroundediceLevelsetEnum) <= 0.) shelf=true;
++		else shelf=false;
++	}
++	else if(migration_style==NoneEnum || migration_style==AgressiveMigrationEnum || migration_style==SoftMigrationEnum){ //Floating if all nodes are floating
++		if(this->inputs->Min(MaskGroundediceLevelsetEnum) > 0.) shelf=false;
++		else shelf=true;
++	}
++	else _error_("migration_style not implemented yet");
++
+ 	return shelf;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15977)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15978)
+@@ -2743,9 +2743,21 @@
+ /*FUNCTION Penta::IsFloating{{{*/
+ bool   Penta::IsFloating(){
+ 
+-	bool onshelf;
+-	inputs->GetInputValue(&onshelf,MaskElementonfloatingiceEnum);
+-	return onshelf;
++	bool shelf;
++	int  migration_style;
++	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
++
++	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){ //Floating if all nodes are floating
++		if(this->inputs->Max(MaskGroundediceLevelsetEnum) <= 0.) shelf=true;
++		else shelf=false;
++	}
++	else if(migration_style==NoneEnum || migration_style==AgressiveMigrationEnum || migration_style==SoftMigrationEnum){ //Floating if all nodes are floating
++		if(this->inputs->Min(MaskGroundediceLevelsetEnum) > 0.) shelf=false;
++		else shelf=true;
++	}
++	else _error_("migration_style not implemented yet");
++
++	return shelf;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::IsNodeOnShelfFromFlags {{{*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-15978-15979.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15978-15979.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15978-15979.diff	(revision 16134)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15978)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15979)
+@@ -33,6 +33,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15978)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15979)
+@@ -30,6 +30,7 @@
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15979-15980.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15979-15980.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15979-15980.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15979)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15980)
+@@ -34,6 +34,7 @@
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,WatercolumnEnum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15980-15981.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15980-15981.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15980-15981.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/Archives/Archive510.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive503.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive512.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15981-15982.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15981-15982.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15981-15982.diff	(revision 16134)
@@ -0,0 +1,94 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15981)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 15982)
+@@ -686,12 +686,6 @@
+ 	/*start module: */
+ 	if(VerboseModule()) _printf0_("   Updating constraints for time: " << time << "\n");
+ 
+-	/*First, Nodes might be activated/deactivated by element*/
+-	for(int i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->UpdateConstraints();
+-	}
+-
+ 	/*Second, constraints might be time dependent: */
+ 	SpcNodesx(nodes,constraints,parameters,analysis_type); 
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15981)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 15982)
+@@ -77,7 +77,6 @@
+ 		virtual void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0;
+ 		virtual void   Delta18oParameterization(void)=0;
+ 		virtual void   SmbGradients()=0;
+-		virtual void UpdateConstraints(void)=0; 
+ 		virtual void   ResetCoordinateSystem()=0;
+ 
+ 		#ifdef _HAVE_RESPONSES_
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15981)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15982)
+@@ -2499,18 +2499,7 @@
+ 	this->parameters=NULL;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::UpdateConstraints{{{*/
+-void  Tria::UpdateConstraints(void){
+ 
+-	int analysis_type;
+-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-
+-	/*Skip if water element*/
+-	if(NoIceInElement()) return;
+-
+-}
+-/*}}}*/
+-
+ #ifdef _HAVE_RESPONSES_
+ /*FUNCTION Tria::AverageOntoPartition {{{*/
+ void  Tria::AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part){
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15981)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15982)
+@@ -222,7 +222,6 @@
+ 		bool	         IsInput(int name);
+ 		void	         SetClone(int* minranks);
+ 		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+-		void             UpdateConstraints(void);
+ 
+ 		#ifdef _HAVE_STRESSBALANCE_
+ 		ElementMatrix* CreateKMatrixStressbalanceSSA(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15981)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15982)
+@@ -3723,13 +3723,6 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::UpdateConstraints{{{*/
+-void Penta::UpdateConstraints(void){
+-
+-	/*Do nothing for now*/
+-
+-}
+-/*}}}*/
+ /*FUNCTION Penta::ViscousHeatingCreateInput {{{*/
+ void Penta::ViscousHeatingCreateInput(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15981)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15982)
+@@ -230,7 +230,6 @@
+ 		void	         SetClone(int* minranks);
+ 		Tria*	         SpawnTria(int location);
+ 		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+-		void           UpdateConstraints(void);
+ 
+ 		#ifdef _HAVE_STRESSBALANCE_
+ 		ElementMatrix* CreateKMatrixCouplingSSAHO(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15982-15983.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15982-15983.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15982-15983.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15982)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15983)
+@@ -142,7 +142,7 @@
+ 			if(save_results){
+ 				InputToResultx(femmodel,SurfaceEnum);
+ 				InputToResultx(femmodel,BedEnum);
+-				InputToResultx(femmodel,MaskElementonfloatingiceEnum);
++				InputToResultx(femmodel,MaskGroundediceLevelsetEnum);
+ 			}
+ 		}
+ 		if(isgia){
Index: /issm/oecreview/Archive/15392-16133/ISSM-15983-15984.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15983-15984.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15983-15984.diff	(revision 16134)
@@ -0,0 +1,242 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 15984)
+@@ -28,13 +28,13 @@
+ 	(md.results.TransientSolution(1).Bed),...
+ 	(md.results.TransientSolution(1).Surface),...
+ 	(md.results.TransientSolution(1).Thickness),...
+-	(md.results.TransientSolution(1).MaskElementonfloatingice),...
++	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(2).Bed),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+-	(md.results.TransientSolution(2).MaskElementonfloatingice),...
++	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(3).Bed),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+-	(md.results.TransientSolution(3).MaskElementonfloatingice),...
++	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test427.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.py	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test427.py	(revision 15984)
+@@ -38,13 +38,13 @@
+ 	md.results.TransientSolution[0].Bed,\
+ 	md.results.TransientSolution[0].Surface,\
+ 	md.results.TransientSolution[0].Thickness,\
+-	md.results.TransientSolution[0].MaskElementonfloatingice,\
++	md.results.TransientSolution[0].MaskGroundediceLevelset,\
+ 	md.results.TransientSolution[1].Bed,\
+ 	md.results.TransientSolution[1].Surface,\
+ 	md.results.TransientSolution[1].Thickness,\
+-	md.results.TransientSolution[1].MaskElementonfloatingice,\
++	md.results.TransientSolution[1].MaskGroundediceLevelset,\
+ 	md.results.TransientSolution[2].Bed,\
+ 	md.results.TransientSolution[2].Surface,\
+ 	md.results.TransientSolution[2].Thickness,\
+-	md.results.TransientSolution[2].MaskElementonfloatingice,\
++	md.results.TransientSolution[2].MaskGroundediceLevelset,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 15984)
+@@ -28,13 +28,13 @@
+ 	(md.results.TransientSolution(1).Bed),...
+ 	(md.results.TransientSolution(1).Surface),...
+ 	(md.results.TransientSolution(1).Thickness),...
+-	(md.results.TransientSolution(1).MaskElementonfloatingice),...
++	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(2).Bed),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+-	(md.results.TransientSolution(2).MaskElementonfloatingice),...
++	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(3).Bed),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+-	(md.results.TransientSolution(3).MaskElementonfloatingice),...
++	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test423.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.py	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test423.py	(revision 15984)
+@@ -36,12 +36,12 @@
+ #test different grounding line dynamics.
+ md.groundingline.migration='AgressiveMigration'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_agressive=md.results.TransientSolution[0].MaskElementonfloatingice
++element_on_iceshelf_agressive=md.results.TransientSolution[0].MaskGroundediceLevelset
+ vel_agressive=md.results.TransientSolution[0].Vel
+ 
+ md.groundingline.migration='SoftMigration'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_soft=md.results.TransientSolution[0].MaskElementonfloatingice
++element_on_iceshelf_soft=md.results.TransientSolution[0].MaskGroundediceLevelset
+ vel_soft=md.results.TransientSolution[0].Vel
+ 
+ md.mask.groundedice_levelset=md.geometry.thickness + md.materials.rho_water/md.materials.rho_ice*md.geometry.bathymetry
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 15984)
+@@ -37,13 +37,13 @@
+ 	md.results.TransientSolution[0].Bed,\
+ 	md.results.TransientSolution[0].Surface,\
+ 	md.results.TransientSolution[0].Thickness,\
+-	md.results.TransientSolution[0].MaskElementonfloatingice,\
++	md.results.TransientSolution[0].MaskGroundediceLevelset,\
+ 	md.results.TransientSolution[1].Bed,\
+ 	md.results.TransientSolution[1].Surface,\
+ 	md.results.TransientSolution[1].Thickness,\
+-	md.results.TransientSolution[1].MaskElementonfloatingice,\
++	md.results.TransientSolution[1].MaskGroundediceLevelset,\
+ 	md.results.TransientSolution[2].Bed,\
+ 	md.results.TransientSolution[2].Surface,\
+ 	md.results.TransientSolution[2].Thickness,\
+-	md.results.TransientSolution[2].MaskElementonfloatingice,\
++	md.results.TransientSolution[2].MaskGroundediceLevelset,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test433.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.py	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test433.py	(revision 15984)
+@@ -37,11 +37,11 @@
+ #test different grounding line dynamics.
+ md.groundingline.migration='AgressiveMigration'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_agressive=md.results.TransientSolution[0].MaskElementonfloatingice
++element_on_iceshelf_agressive=md.results.TransientSolution[0].MaskGroundediceLevelset
+ 
+ md.groundingline.migration='SoftMigration'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_soft=md.results.TransientSolution[0].MaskElementonfloatingice
++element_on_iceshelf_soft=md.results.TransientSolution[0].MaskGroundediceLevelset
+ 
+ md.groundingline.migration='SubelementMigration'
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 15984)
+@@ -25,12 +25,12 @@
+ %test different grounding line dynamics.
+ md.groundingline.migration='AgressiveMigration';
+ md=solve(md,TransientSolutionEnum());
+-element_on_iceshelf_agressive=(md.results.TransientSolution.MaskElementonfloatingice);
++element_on_iceshelf_agressive=(md.results.TransientSolution.MaskGroundediceLevelset);
+ vel_agressive=(md.results.TransientSolution.Vel);
+ 
+ md.groundingline.migration='SoftMigration';
+ md=solve(md,TransientSolutionEnum());
+-element_on_iceshelf_soft=(md.results.TransientSolution.MaskElementonfloatingice);
++element_on_iceshelf_soft=(md.results.TransientSolution.MaskGroundediceLevelset);
+ vel_soft=(md.results.TransientSolution.Vel);
+ 
+ md.mask.groundedice_levelset=md.geometry.thickness + md.materials.rho_water/md.materials.rho_ice*md.geometry.bathymetry;
+Index: ../trunk-jpl/test/NightlyRun/test425.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.py	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test425.py	(revision 15984)
+@@ -37,13 +37,13 @@
+ 	md.results.TransientSolution[0].Bed,\
+ 	md.results.TransientSolution[0].Surface,\
+ 	md.results.TransientSolution[0].Thickness,\
+-	md.results.TransientSolution[0].MaskElementonfloatingice,\
++	md.results.TransientSolution[0].MaskGroundediceLevelset,\
+ 	md.results.TransientSolution[1].Bed,\
+ 	md.results.TransientSolution[1].Surface,\
+ 	md.results.TransientSolution[1].Thickness,\
+-	md.results.TransientSolution[1].MaskElementonfloatingice,\
++	md.results.TransientSolution[1].MaskGroundediceLevelset,\
+ 	md.results.TransientSolution[2].Bed,\
+ 	md.results.TransientSolution[2].Surface,\
+ 	md.results.TransientSolution[2].Thickness,\
+-	md.results.TransientSolution[2].MaskElementonfloatingice,\
++	md.results.TransientSolution[2].MaskGroundediceLevelset,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 15984)
+@@ -27,13 +27,13 @@
+ 	(md.results.TransientSolution(1).Bed),...
+ 	(md.results.TransientSolution(1).Surface),...
+ 	(md.results.TransientSolution(1).Thickness),...
+-	(md.results.TransientSolution(1).MaskElementonfloatingice),...
++	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(2).Bed),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+-	(md.results.TransientSolution(2).MaskElementonfloatingice),...
++	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(3).Bed),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+-	(md.results.TransientSolution(3).MaskElementonfloatingice),...
++	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test433.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.m	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test433.m	(revision 15984)
+@@ -26,11 +26,11 @@
+ %test different grounding line dynamics.
+ md.groundingline.migration='AgressiveMigration';
+ md=solve(md,TransientSolutionEnum());
+-element_on_iceshelf_agressive=(md.results.TransientSolution.MaskElementonfloatingice);
++element_on_iceshelf_agressive=(md.results.TransientSolution.MaskGroundediceLevelset);
+ 
+ md.groundingline.migration='SoftMigration';
+ md=solve(md,TransientSolutionEnum());
+-element_on_iceshelf_soft=(md.results.TransientSolution.MaskElementonfloatingice);
++element_on_iceshelf_soft=(md.results.TransientSolution.MaskGroundediceLevelset);
+ 
+ md.groundingline.migration='SubelementMigration';
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 15984)
+@@ -38,13 +38,13 @@
+ 	md.results.TransientSolution[0].Bed,\
+ 	md.results.TransientSolution[0].Surface,\
+ 	md.results.TransientSolution[0].Thickness,\
+-	md.results.TransientSolution[0].MaskElementonfloatingice,\
++	md.results.TransientSolution[0].MaskGroundediceLevelset,\
+ 	md.results.TransientSolution[1].Bed,\
+ 	md.results.TransientSolution[1].Surface,\
+ 	md.results.TransientSolution[1].Thickness,\
+-	md.results.TransientSolution[1].MaskElementonfloatingice,\
++	md.results.TransientSolution[1].MaskGroundediceLevelset,\
+ 	md.results.TransientSolution[2].Bed,\
+ 	md.results.TransientSolution[2].Surface,\
+ 	md.results.TransientSolution[2].Thickness,\
+-	md.results.TransientSolution[2].MaskElementonfloatingice,\
++	md.results.TransientSolution[2].MaskGroundediceLevelset,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test425.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.m	(revision 15983)
++++ ../trunk-jpl/test/NightlyRun/test425.m	(revision 15984)
+@@ -27,13 +27,13 @@
+ 	(md.results.TransientSolution(1).Bed),...
+ 	(md.results.TransientSolution(1).Surface),...
+ 	(md.results.TransientSolution(1).Thickness),...
+-	(md.results.TransientSolution(1).MaskElementonfloatingice),...
++	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(2).Bed),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+-	(md.results.TransientSolution(2).MaskElementonfloatingice),...
++	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
+ 	(md.results.TransientSolution(3).Bed),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+-	(md.results.TransientSolution(3).MaskElementonfloatingice),...
++	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
+ 	};
Index: /issm/oecreview/Archive/15392-16133/ISSM-15984-15985.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15984-15985.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15984-15985.diff	(revision 16134)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/test/Archives/Archive423.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive426.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive502.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive424.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive433.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive427.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive425.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15985-15986.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15985-15986.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15985-15986.diff	(revision 16134)
@@ -0,0 +1,803 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15985)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15986)
+@@ -141,10 +141,6 @@
+ 	InversionVxObsEnum,
+ 	InversionVyObsEnum,
+ 	InversionVzObsEnum,
+-	MaskElementonfloatingiceEnum,
+-	MaskElementongroundediceEnum,
+-	MaskVertexonfloatingiceEnum,
+-	MaskVertexongroundediceEnum,
+ 	MaskIceLevelsetEnum,
+ 	MaterialsBetaEnum,
+ 	MaterialsHeatcapacityEnum,
+@@ -483,7 +479,6 @@
+ 	WaterfractionEnum,
+ 	WatercolumnEnum,
+ 	BasalFrictionEnum,
+-    BasalMeltrateEnum,
+ 	ViscousHeatingEnum,
+ 	QmuTemperatureEnum,
+ 	HydrologyWaterVxEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15986)
+@@ -149,10 +149,6 @@
+ 		case InversionVxObsEnum : return "InversionVxObs";
+ 		case InversionVyObsEnum : return "InversionVyObs";
+ 		case InversionVzObsEnum : return "InversionVzObs";
+-		case MaskElementonfloatingiceEnum : return "MaskElementonfloatingice";
+-		case MaskElementongroundediceEnum : return "MaskElementongroundedice";
+-		case MaskVertexonfloatingiceEnum : return "MaskVertexonfloatingice";
+-		case MaskVertexongroundediceEnum : return "MaskVertexongroundedice";
+ 		case MaskIceLevelsetEnum : return "MaskIceLevelset";
+ 		case MaterialsBetaEnum : return "MaterialsBeta";
+ 		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
+@@ -477,7 +473,6 @@
+ 		case WaterfractionEnum : return "Waterfraction";
+ 		case WatercolumnEnum : return "Watercolumn";
+ 		case BasalFrictionEnum : return "BasalFriction";
+-		case BasalMeltrateEnum : return "BasalMeltrate";
+ 		case ViscousHeatingEnum : return "ViscousHeating";
+ 		case QmuTemperatureEnum : return "QmuTemperature";
+ 		case HydrologyWaterVxEnum : return "HydrologyWaterVx";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15986)
+@@ -152,10 +152,6 @@
+ 	      else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
+ 	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
+ 	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+-	      else if (strcmp(name,"MaskElementonfloatingice")==0) return MaskElementonfloatingiceEnum;
+-	      else if (strcmp(name,"MaskElementongroundedice")==0) return MaskElementongroundediceEnum;
+-	      else if (strcmp(name,"MaskVertexonfloatingice")==0) return MaskVertexonfloatingiceEnum;
+-	      else if (strcmp(name,"MaskVertexongroundedice")==0) return MaskVertexongroundediceEnum;
+ 	      else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
+ 	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
+ 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
+@@ -259,14 +255,14 @@
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
++	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
++	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
++	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+-	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+-	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+-	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
++	      if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+ 	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
+ 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
+@@ -382,14 +378,14 @@
+ 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
++	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
++	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+-	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+-	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+-	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+-	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
++	      if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+@@ -486,7 +482,6 @@
+ 	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
+ 	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
+ 	      else if (strcmp(name,"BasalFriction")==0) return BasalFrictionEnum;
+-	      else if (strcmp(name,"BasalMeltrate")==0) return BasalMeltrateEnum;
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+@@ -505,15 +500,15 @@
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
++	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+-	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 15986)
+@@ -45,7 +45,6 @@
+ 	iomodel->FetchDataToInput(elements,BathymetryEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 15986)
+@@ -18,12 +18,12 @@
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+ 		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1DGEnum);
+ 	}
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 15986)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15986)
+@@ -34,7 +34,6 @@
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 15986)
+@@ -11,7 +11,7 @@
+ void	CreateNodesFreeSurfaceBase(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 15986)
+@@ -31,7 +31,6 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 15986)
+@@ -17,7 +17,7 @@
+ 	/*Now, do we really want Shreve?*/
+ 	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 15986)
+@@ -35,7 +35,6 @@
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 15986)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,BedSlopeAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 15986)
+@@ -18,12 +18,12 @@
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+ 		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
+ 	}
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 15986)
+@@ -35,7 +35,6 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 15986)
+@@ -20,7 +20,7 @@
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	if(!isefficientlayer) return;
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyDCEfficientAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 15986)
+@@ -35,7 +35,6 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 15986)
+@@ -11,7 +11,7 @@
+ void	CreateNodesFreeSurfaceTop(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 15986)
+@@ -30,7 +30,6 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 15986)
+@@ -13,7 +13,7 @@
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+ 	if(iomodel->dim==2) return;
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 15986)
+@@ -28,7 +28,6 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp	(revision 15986)
+@@ -24,8 +24,8 @@
+ 	Nodes* nodes=*pnodes;
+ 	if(!nodes) nodes = new Nodes();
+ 
+-	iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+@@ -43,8 +43,8 @@
+ 		}
+ 	}
+ 
+-	iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 15986)
+@@ -73,14 +73,14 @@
+ 	#ifdef _HAVE_RIFTS_
+ 	if(numrifts){
+ 		iomodel->FetchData(&riftinfo,&numriftsegments,NULL,RiftsRiftstructEnum);
+-		iomodel->FetchData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskVertexonfloatingiceEnum);
++		iomodel->FetchData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskGroundediceLevelsetEnum);
+ 		for(i=0;i<numriftsegments;i++){
+ 			if(iomodel->my_elements[reCast<int,IssmDouble>(*(riftinfo+RIFTINFOSIZE*i+2))-1]){
+ 				loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,StressbalanceAnalysisEnum));
+ 				count++;
+ 			}
+ 		}
+-		iomodel->DeleteData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskVertexonfloatingiceEnum);
++		iomodel->DeleteData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskGroundediceLevelsetEnum);
+ 		xDelete<IssmDouble>(riftinfo);
+ 	}
+ 	#endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 15986)
+@@ -28,7 +28,7 @@
+ 	IssmDouble *nodeonHO   = NULL;
+ 	IssmDouble *nodeonFS   = NULL;
+ 	IssmDouble *nodeonbed      = NULL;
+-	IssmDouble *nodeonicesheet = NULL;
++	IssmDouble *groundedice_ls = NULL;
+ 	IssmDouble *vertices_type  = NULL;
+ 	IssmDouble *surface        = NULL;
+ 	IssmDouble *z              = NULL;
+@@ -95,10 +95,10 @@
+ 			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+ 			iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+ 			iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-			iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
++			iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
++					if(nodeonbed[i]>0. && groundedice_ls[i]>0. && nodeonFS[i]>0.){
+ 						if(vertices_type[i] == FSApproximationEnum){
+ 							for(j=0;j<Nz;j++) spcvz[i*Nz+j] = 0.;
+ 						}
+@@ -113,7 +113,7 @@
+ 			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+ 			iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+ 			iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-			iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
++			iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
+ 
+ 			/*Pressure spc*/
+ 			count = constraints->Size();
+@@ -124,7 +124,7 @@
+ 				case P1bubbleEnum:
+ 					for(i=0;i<iomodel->numberofvertices;i++){
+ 						if(iomodel->my_vertices[i]){
+-							if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++							if(reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+ 								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
+ 								count++;
+ 							}
+@@ -134,7 +134,7 @@
+ 				case P2Enum:
+ 					for(i=0;i<iomodel->numberofvertices;i++){
+ 						if(iomodel->my_vertices[i]){
+-							if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++							if(reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+ 								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
+ 								count++;
+ 							}
+@@ -161,7 +161,7 @@
+ 	if(iomodel->dim==3)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
+ 	if(iomodel->dim==3)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+ 	if(iomodel->dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
++	if(iomodel->dim==3)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+ 	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+ 	iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+@@ -382,7 +382,7 @@
+ 			}
+ 
+ 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
++			if (iomodel->dim==3) if(nodeonbed[i]>0. && groundedice_ls[i]>=0. && nodeonFS[i]>0.){
+ 				 switch(reCast<int,IssmDouble>(vertices_type[i])){
+ 					case SSAFSApproximationEnum:
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,StressbalanceAnalysisEnum));
+@@ -410,7 +410,7 @@
+ 	if(iomodel->dim==3)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
+ 	if(iomodel->dim==3)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+ 	if(iomodel->dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
++	if(iomodel->dim==3)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
+ 	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+ 	iomodel->DeleteData(surface,SurfaceEnum);
+ 	iomodel->DeleteData(z,MeshZEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 15986)
+@@ -49,11 +49,11 @@
+ 			approximation = FSApproximationEnum;
+ 			iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
+ 		}
+-		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 		CreateNodes(pnodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
+-		iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 	}
+ 	else{
+ 		/*Coupling: we are going to create P1 Elements only*/
+@@ -63,8 +63,8 @@
+ 		Node*  node  = NULL;
+ 		if(!nodes) nodes = new Nodes();
+ 
+-		iomodel->FetchData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 		if(isFS){
+ 			/*P1+ velocity*/
+ 			for(int i=0;i<iomodel->numberofvertices;i++){
+@@ -100,8 +100,8 @@
+ 				}
+ 			}
+ 		}
+-		iomodel->DeleteData(8,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 
+ 		/*Assign output pointer: */
+ 		*pnodes=nodes;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 15986)
+@@ -93,7 +93,6 @@
+ 	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 15986)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,SurfaceSlopeAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 15986)
+@@ -17,7 +17,7 @@
+ 	/*Now, do we really want DC?*/
+ 	if(hydrology_model!=HydrologydcEnum) return;
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 15986)
+@@ -36,7 +36,6 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 15986)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 15986)
+@@ -31,7 +31,6 @@
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 15986)
+@@ -31,7 +31,6 @@
+ 	iomodel->FetchDataToInput(elements,FrictionPEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionQEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskElementonfloatingiceEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 15986)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(5,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15986)
+@@ -95,7 +95,7 @@
+ 	riftfront_fill = reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+7));
+ 	riftfront_friction=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+8);
+ 	riftfront_fractionincrement=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+10);
+-	riftfront_shelf=reCast<bool,IssmDouble>(iomodel->Data(MaskVertexonfloatingiceEnum)[node1-1]);
++	riftfront_shelf=reCast<bool,IssmDouble>(iomodel->Data(MaskGroundediceLevelsetEnum)[node1-1]<0.);
+ 
+ 	this->inputs->AddInput(new IntInput(RiftfrontTypeEnum,riftfront_type));
+ 	this->inputs->AddInput(new IntInput(FillEnum,riftfront_fill));
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15986)
+@@ -7401,7 +7401,6 @@
+ 	} 
+ 
+ 	/*Update inputs*/
+-   this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
+ 	this->inputs->AddInput(new TriaInput(SurfaceEnum,&s[0],P1Enum));
+ 	this->inputs->AddInput(new TriaInput(BedEnum,&b[0],P1Enum));
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15985)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15986)
+@@ -5317,7 +5317,7 @@
+ 	}  
+     /*update meltrate and watercolumn*/
+     this->inputs->AddInput(new PentaInput(WatercolumnEnum, watercolumn, P1Enum));
+-    this->inputs->AddInput(new PentaInput(BasalMeltrateEnum, meltrate, P1Enum));
++    this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum, meltrate, P1Enum));
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -11286,12 +11286,10 @@
+ 	/*Update inputs*/
+ 	this->inputs->AddInput(new PentaInput(SurfaceEnum,&s[0],P1Enum));
+ 	this->inputs->AddInput(new PentaInput(BedEnum,&b[0],P1Enum));
+-   this->inputs->AddInput(new BoolInput(MaskElementonfloatingiceEnum,floatingelement));
+ 
+ 	/*Extrude inputs*/
+ 	this->InputExtrude(SurfaceEnum,ElementEnum);
+ 	this->InputExtrude(BedEnum,ElementEnum);
+-	this->InputExtrude(MaskElementonfloatingiceEnum,ElementEnum);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::PotentialUngrounding{{{*/
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15985)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15986)
+@@ -51,10 +51,6 @@
+ 			fielddisplay(obj,'ice_levelset','presence of ice if > 0, icefront position if = 0, no ice if < 0');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'fieldname','elementonfloatingice','format','BooleanMat','mattype',2);
+-			WriteData(fid,'object',obj,'fieldname','elementongroundedice','format','BooleanMat','mattype',2);
+-			WriteData(fid,'object',obj,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','ice_levelset','format','DoubleMat','mattype',1);
+ 		end % }}}
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15985)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15986)
+@@ -53,10 +53,6 @@
+ 		return md
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'object',self,'fieldname','elementonfloatingice','format','BooleanMat','mattype',2)
+-		WriteData(fid,'object',self,'fieldname','elementongroundedice','format','BooleanMat','mattype',2)
+-		WriteData(fid,'object',self,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1)
+ 	# }}}
+Index: ../trunk-jpl/src/m/enum/MaskVertexonfloatingiceEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskVertexonfloatingiceEnum.m	(revision 15985)
++++ ../trunk-jpl/src/m/enum/MaskVertexonfloatingiceEnum.m	(revision 15986)
+@@ -1,11 +0,0 @@
+-function macro=MaskVertexonfloatingiceEnum()
+-%MASKVERTEXONFLOATINGICEENUM - Enum of MaskVertexonfloatingice
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaskVertexonfloatingiceEnum()
+-
+-macro=StringToEnum('MaskVertexonfloatingice');
+Index: ../trunk-jpl/src/m/enum/MaskElementongroundediceEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskElementongroundediceEnum.m	(revision 15985)
++++ ../trunk-jpl/src/m/enum/MaskElementongroundediceEnum.m	(revision 15986)
+@@ -1,11 +0,0 @@
+-function macro=MaskElementongroundediceEnum()
+-%MASKELEMENTONGROUNDEDICEENUM - Enum of MaskElementongroundedice
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaskElementongroundediceEnum()
+-
+-macro=StringToEnum('MaskElementongroundedice');
+Index: ../trunk-jpl/src/m/enum/MaskVertexongroundediceEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskVertexongroundediceEnum.m	(revision 15985)
++++ ../trunk-jpl/src/m/enum/MaskVertexongroundediceEnum.m	(revision 15986)
+@@ -1,11 +0,0 @@
+-function macro=MaskVertexongroundediceEnum()
+-%MASKVERTEXONGROUNDEDICEENUM - Enum of MaskVertexongroundedice
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaskVertexongroundediceEnum()
+-
+-macro=StringToEnum('MaskVertexongroundedice');
+Index: ../trunk-jpl/src/m/enum/MaskElementonfloatingiceEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaskElementonfloatingiceEnum.m	(revision 15985)
++++ ../trunk-jpl/src/m/enum/MaskElementonfloatingiceEnum.m	(revision 15986)
+@@ -1,11 +0,0 @@
+-function macro=MaskElementonfloatingiceEnum()
+-%MASKELEMENTONFLOATINGICEENUM - Enum of MaskElementonfloatingice
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaskElementonfloatingiceEnum()
+-
+-macro=StringToEnum('MaskElementonfloatingice');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15985)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15986)
+@@ -141,10 +141,6 @@
+ def InversionVxObsEnum(): return StringToEnum("InversionVxObs")[0]
+ def InversionVyObsEnum(): return StringToEnum("InversionVyObs")[0]
+ def InversionVzObsEnum(): return StringToEnum("InversionVzObs")[0]
+-def MaskElementonfloatingiceEnum(): return StringToEnum("MaskElementonfloatingice")[0]
+-def MaskElementongroundediceEnum(): return StringToEnum("MaskElementongroundedice")[0]
+-def MaskVertexonfloatingiceEnum(): return StringToEnum("MaskVertexonfloatingice")[0]
+-def MaskVertexongroundediceEnum(): return StringToEnum("MaskVertexongroundedice")[0]
+ def MaskIceLevelsetEnum(): return StringToEnum("MaskIceLevelset")[0]
+ def MaterialsBetaEnum(): return StringToEnum("MaterialsBeta")[0]
+ def MaterialsHeatcapacityEnum(): return StringToEnum("MaterialsHeatcapacity")[0]
+@@ -469,7 +465,6 @@
+ def WaterfractionEnum(): return StringToEnum("Waterfraction")[0]
+ def WatercolumnEnum(): return StringToEnum("Watercolumn")[0]
+ def BasalFrictionEnum(): return StringToEnum("BasalFriction")[0]
+-def BasalMeltrateEnum(): return StringToEnum("BasalMeltrate")[0]
+ def ViscousHeatingEnum(): return StringToEnum("ViscousHeating")[0]
+ def QmuTemperatureEnum(): return StringToEnum("QmuTemperature")[0]
+ def HydrologyWaterVxEnum(): return StringToEnum("HydrologyWaterVx")[0]
Index: /issm/oecreview/Archive/15392-16133/ISSM-15986-15987.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15986-15987.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15986-15987.diff	(revision 16134)
@@ -0,0 +1,532 @@
+Index: ../trunk-jpl/src/m/geometry/FlagElements.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.m	(revision 15986)
++++ ../trunk-jpl/src/m/geometry/FlagElements.m	(revision 15987)
+@@ -11,7 +11,6 @@
+ %      flag=FlagElements(md,'');
+ %      flag=FlagElements(md,'Domain.exp');
+ %      flag=FlagElements(md,'~Domain.exp');
+-%      flag=FlagElements(md,md.mask.elementongroundedice);
+ 
+ 	if ischar(region),
+ 		if isempty(region),
+Index: ../trunk-jpl/src/m/geometry/FlagElements.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 15986)
++++ ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 15987)
+@@ -19,7 +19,6 @@
+ 	      flag=FlagElements(md,'');
+ 	      flag=FlagElements(md,'Domain.exp');
+ 	      flag=FlagElements(md,'~Domain.exp');
+-	      flag=FlagElements(md,md.mask.elementongroundedice);
+ 	"""
+ 
+ 	if   isinstance(region,(str,unicode)):
+Index: ../trunk-jpl/src/m/geometry/ThicknessCorrection.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/ThicknessCorrection.m	(revision 15986)
++++ ../trunk-jpl/src/m/geometry/ThicknessCorrection.m	(revision 15987)
+@@ -22,7 +22,7 @@
+ hydrostatic_ratio=zeros(size(md.geometry.thickness));
+ 
+ %get nodes on ice sheet and on ice shelf
+-pos_shelf=find(~md.mask.vertexongroundedice);
++pos_shelf=find(md.mask.groundedice_levelset<0.);
+ pos_GL=intersect(unique(md.mesh.elements(find(md.mask.elementongroundedice),:)),unique(md.mesh.elements(find(md.mask.elementonfloatingice),:)));
+ debug=(length(pos_shelf)>50000);
+ 
+Index: ../trunk-jpl/src/m/classes/mask.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.m	(revision 15986)
++++ ../trunk-jpl/src/m/classes/mask.m	(revision 15987)
+@@ -5,11 +5,6 @@
+ 
+ classdef mask
+ 	properties (SetAccess=public) 
+-		elementonfloatingice = NaN;
+-		elementongroundedice = NaN;
+-		vertexonfloatingice  = NaN;
+-		vertexongroundedice  = NaN;
+-		vertexonrock         = NaN;
+ 		groundedice_levelset = NaN;
+ 		ice_levelset         = NaN;
+ 	end
+@@ -27,26 +22,16 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+-			md = checkfield(md,'mask.elementonfloatingice','size',[md.mesh.numberofelements 1],'values',[0 1]);
+-			md = checkfield(md,'mask.elementongroundedice','size',[md.mesh.numberofelements 1],'values',[0 1]);
+-			md = checkfield(md,'mask.vertexonfloatingice' ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
+-			md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'mask.groundedice_levelset','size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'mask.ice_levelset'        ,'size',[md.mesh.numberofvertices 1]);
+ 			isice=(md.mask.ice_levelset>0);
+ 			if any(sum(isice(md.mesh.elements),2)==0),
+ 				error('elements with no ice not implemented yet, each element should have at least one vertex with md.mask.ice_levelset > 0');
+ 			end
+-			%md = checkfield(md,'mask.vertexonrock'      ,'size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   masks:'));
+ 
+-			fielddisplay(obj,'elementonfloatingice','element on floating ice flags list');
+-			fielddisplay(obj,'vertexonfloatingice','vertex on floating ice flags list');
+-			fielddisplay(obj,'elementongroundedice','element on grounded ice  list');
+-			fielddisplay(obj,'vertexongroundedice','vertex on grounded ice flags list');
+-			fielddisplay(obj,'vertexonrock','vertex on rock flags list');
+ 			fielddisplay(obj,'groundedice_levelset','is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0');
+ 			fielddisplay(obj,'ice_levelset','presence of ice if > 0, icefront position if = 0, no ice if < 0');
+ 		end % }}}
+Index: ../trunk-jpl/src/m/classes/groundingline.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/groundingline.py	(revision 15986)
++++ ../trunk-jpl/src/m/classes/groundingline.py	(revision 15987)
+@@ -46,10 +46,10 @@
+ 		if not strcmp(self.migration,'None'):
+ 			if numpy.any(numpy.isnan(md.geometry.bathymetry)):
+ 				md.checkmessage("requesting grounding line migration, but bathymetry is absent!")
+-			pos=numpy.nonzero(md.mask.vertexongroundedice)
++			pos=numpy.nonzero(md.mask.groundedice_levelset>0.)
+ 			if any(numpy.abs(md.geometry.bed[pos]-md.geometry.bathymetry[pos])>10**-10):
+ 				md.checkmessage("bathymetry not equal to bed on grounded ice!")
+-			pos=numpy.nonzero(md.mask.vertexonfloatingice)
++			pos=numpy.nonzero(md.mask.groundedice_levelset<0.)
+ 			if any(md.geometry.bathymetry[pos]-md.geometry.bed[pos]>10**-9):
+ 				md.checkmessage("bathymetry superior to bed on floating ice!")
+ 
+Index: ../trunk-jpl/src/m/classes/groundingline.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/groundingline.m	(revision 15986)
++++ ../trunk-jpl/src/m/classes/groundingline.m	(revision 15987)
+@@ -34,11 +34,11 @@
+ 				if isnan(md.geometry.bathymetry),
+ 					md = checkmessage(md,['requesting grounding line migration, but bathymetry is absent!']);
+ 				end
+-				pos=find(md.mask.vertexongroundedice);
++				pos=find(md.mask.groundedice_levelset>0.);
+ 				if any(abs(md.geometry.bed(pos)-md.geometry.bathymetry(pos))>10^-10),
+ 					md = checkmessage(md,['bathymetry not equal to bed on grounded ice!']);
+ 				end
+-				pos=find(md.mask.vertexonfloatingice);
++				pos=find(md.mask.groundedice_levelset<0.);
+ 				if any(md.geometry.bathymetry(pos)-md.geometry.bed(pos)>10^-9),
+ 					md = checkmessage(md,['bathymetry superior to bed on floating ice!']);
+ 				end
+Index: ../trunk-jpl/src/m/classes/mask.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mask.py	(revision 15986)
++++ ../trunk-jpl/src/m/classes/mask.py	(revision 15987)
+@@ -12,10 +12,6 @@
+ 	"""
+ 
+ 	def __init__(self): # {{{
+-		self.elementonfloatingice = float('NaN')
+-		self.elementongroundedice = float('NaN')
+-		self.vertexonfloatingice  = float('NaN')
+-		self.vertexongroundedice  = float('NaN')
+ 		self.ice_levelset         = float('NaN')
+ 		self.groundedice_levelset = float('NaN')
+ 
+@@ -26,10 +22,6 @@
+ 	def __repr__(self): # {{{
+ 		string="   masks:"
+ 
+-		string="%s\n%s"%(string,fielddisplay(self,"elementonfloatingice","element on floating ice flags list"))
+-		string="%s\n%s"%(string,fielddisplay(self,"vertexonfloatingice","vertex on floating ice flags list"))
+-		string="%s\n%s"%(string,fielddisplay(self,"elementongroundedice","element on grounded ice list"))
+-		string="%s\n%s"%(string,fielddisplay(self,"vertexongroundedice","vertex on grounded ice flags list"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"groundedice_levelset","is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"ice_levelset","presence of ice if > 0, icefront position if = 0, no ice if < 0"))
+ 		return string
+@@ -39,11 +31,6 @@
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+-		md = checkfield(md,'mask.elementonfloatingice','size',[md.mesh.numberofelements],'values',[0,1])
+-		md = checkfield(md,'mask.elementongroundedice','size',[md.mesh.numberofelements],'values',[0,1])
+-		md = checkfield(md,'mask.vertexonfloatingice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+-		md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
+-		md = checkfield(md,'mask.groundedice_levelset','size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'mask.ice_levelset'        ,'size',[md.mesh.numberofvertices])
+ 		isice=numpy.array(md.mask.ice_levelset>0,int)
+ 		totallyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
+Index: ../trunk-jpl/src/m/classes/modellist.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/modellist.m	(revision 15986)
++++ ../trunk-jpl/src/m/classes/modellist.m	(revision 15987)
+@@ -22,7 +22,7 @@
+ 			%      md_list=modelsextract(md,elementfalgs,minel);
+ 			%
+ 			%   Examples:
+-			%      md_list=modelsextract(md,md.mask.elementonfloatingice,1000);
++			%      md_list=modelsextract(md...,,1000);
+ 			%
+ 			%   See also: EXTRUDE, COLLAPSE, MODELEXTRACT
+ 
+Index: ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15986)
++++ ../trunk-jpl/src/m/classes/oldclasses/diagnostic.m	(revision 15987)
+@@ -64,58 +64,6 @@
+ 			 obj.rift_penalty_lock=10;
+ 
+ 		end % }}}
+-		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-
+-			%Early return
+-			if ~ismember(StressbalanceAnalysisEnum(),analyses), return; end
+-			%if ~ismember(StressbalanceAnalysisEnum(),analyses) |  (solution==TransientSolutionEnum() & md.transient.isdiagnostic==0), return; end
+-
+-			md = checkfield(md,'diagnostic.spcvx','forcing',1);
+-			md = checkfield(md,'diagnostic.spcvy','forcing',1);
+-			if md.mesh.dimension==3, md = checkfield(md,'diagnostic.spcvz','forcing',1); end
+-			md = checkfield(md,'diagnostic.restol','size',[1 1],'>',0,'NaN',1);
+-			md = checkfield(md,'diagnostic.reltol','size',[1 1]);
+-			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
+-			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
+-			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
+-			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
+-			if md.mesh.dimension==2,
+-				md = checkfield(md,'diagnostic.icefront','size',[NaN 4],'NaN',1);
+-			else
+-				md = checkfield(md,'diagnostic.icefront','size',[NaN 6],'NaN',1);
+-			end
+-			md = checkfield(md,'diagnostic.icefront(:,end)','values',[0 1 2]);
+-			md = checkfield(md,'diagnostic.maxiter','size',[1 1],'>=',1);
+-			md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices 6]);
+-			md = checkfield(md,'diagnostic.loadingforce','size',[md.mesh.numberofvertices 3]);
+-			if ~isempty(md.diagnostic.requested_outputs),
+-				md = checkfield(md,'diagnostic.requested_outputs','size',[NaN 1]);
+-			end
+-
+-			%singular solution
+-			if ~(any(~isnan(md.diagnostic.spcvx)) & any(~isnan(md.diagnostic.spcvy))),
+-				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
+-			end
+-			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+-			if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
+-				md = checkmessage(md,['Each line of diagnostic.referential should contain either only NaN values or no NaN values']);
+-			end
+-			%CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
+-			if any(sum(isnan(md.diagnostic.referential),2)==0),
+-				pos=find(sum(isnan(md.diagnostic.referential),2)==0);
+-				if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps),
+-					md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']);
+-				end
+-			end
+-			%CHECK THAT NO rotation specified for FS Grounded ice at base
+-			if md.mesh.dimension==3 & md.flowequation.isFS,
+-				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
+-				if any(~isnan(md.diagnostic.referential(pos,:))),
+-					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+-				end
+-				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
+-			end
+-		end % }}}
+ 		function disp(obj) % {{{
+ 
+ 			disp(sprintf('   Stressbalance solution parameters:'));
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 15986)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 15987)
+@@ -184,7 +184,6 @@
+ 
+ 		   Examples:
+ 		      md2=extract(md,'Domain.exp');
+-		      md2=extract(md,md.mask.elementonfloatingice);
+ 
+ 		   See also: EXTRUDE, COLLAPSE
+ 		"""
+@@ -636,10 +635,6 @@
+ 		md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node')
+ 		md.geometry.bathymetry=project3d(md,'vector',md.geometry.bathymetry,'type','node')
+ 		md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node')
+-		md.mask.elementonfloatingice=project3d(md,'vector',md.mask.elementonfloatingice,'type','element')
+-		md.mask.vertexonfloatingice=project3d(md,'vector',md.mask.vertexonfloatingice,'type','node')
+-		md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element')
+-		md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node')
+ 		md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node')
+ 		md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node')
+ 		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 15986)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 15987)
+@@ -208,13 +208,6 @@
+ 			md.geometry.bathymetry=project2d(md,md.geometry.bathymetry,1);
+ 			md.mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1);
+ 			md.mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1);
+-			md.mask.elementonfloatingice=project2d(md,md.mask.elementonfloatingice,1);
+-			md.mask.vertexonfloatingice=project2d(md,md.mask.vertexonfloatingice,1);
+-			md.mask.elementongroundedice=project2d(md,md.mask.elementongroundedice,1);
+-			md.mask.vertexongroundedice=project2d(md,md.mask.vertexongroundedice,1);
+-			if ~isnan(md.mask.vertexonrock)
+-				md.mask.vertexonrock=project2d(md,md.mask.vertexonrock,1);
+-			end
+ 			md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1);
+ 			md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1);
+ 
+@@ -263,7 +256,6 @@
+ 			%
+ 			%   Examples:
+ 			%      md2=extract(md,'Domain.exp');
+-			%      md2=extract(md,md.mask.elementonfloatingice);
+ 			%
+ 			%   See also: EXTRUDE, COLLAPSE
+ 
+@@ -737,11 +729,6 @@
+ 			md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node');
+ 			md.geometry.bathymetry=project3d(md,'vector',md.geometry.bathymetry,'type','node');
+ 			md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
+-			md.mask.elementonfloatingice=project3d(md,'vector',md.mask.elementonfloatingice,'type','element');
+-			md.mask.vertexonfloatingice=project3d(md,'vector',md.mask.vertexonfloatingice,'type','node');
+-			md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element');
+-			md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node');
+-			md.mask.vertexonrock=project3d(md,'vector',md.mask.vertexonrock,'type','node');
+ 			md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node');
+ 			md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node');
+ 			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+@@ -793,8 +780,6 @@
+ 			if isfield(structmd,'gridonbed'), md.mesh.vertexonbed=structmd.gridonbed; end
+ 			if isfield(structmd,'gridonsurface'), md.mesh.vertexonsurface=structmd.gridonsurface; end
+ 			if isfield(structmd,'extractedgrids'), md.mesh.extractedvertices=structmd.extractedgrids; end
+-			if isfield(structmd,'gridoniceshelf'), md.mask.vertexonfloatingice=structmd.gridoniceshelf; end
+-			if isfield(structmd,'gridonicesheet'), md.mask.vertexongroundedice=structmd.gridonicesheet; end
+ 			if isfield(structmd,'gridonboundary'), md.mesh.vertexonboundary=structmd.gridonboundary; end
+ 			if isfield(structmd,'petscoptions') & ~isempty(structmd.petscoptions), md.toolkits=structmd.petscoptions; end
+ 			if isfield(structmd,'g'), md.constants.g=structmd.g; end
+@@ -844,10 +829,6 @@
+ 			if isfield(structmd,'n'), md.materials.rheology_n=structmd.n; end
+ 			if isfield(structmd,'rheology_B'), md.materials.rheology_B=structmd.rheology_B; end
+ 			if isfield(structmd,'rheology_n'), md.materials.rheology_n=structmd.rheology_n; end
+-			if isfield(structmd,'elementoniceshelf'), md.mask.elementonfloatingice=structmd.elementoniceshelf; end
+-			if isfield(structmd,'elementonicesheet'), md.mask.elementongroundedice=structmd.elementonicesheet; end
+-			if isfield(structmd,'nodeoniceshelf'), md.mask.vertexonfloatingice=structmd.nodeoniceshelf; end
+-			if isfield(structmd,'nodeonicesheet'), md.mask.vertexongroundedice=structmd.nodeonicesheet; end
+ 			if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
+ 			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
+ 			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15986)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 15987)
+@@ -146,7 +146,7 @@
+ 		#CHECK THAT NO rotation specified for FS Grounded ice at base
+ #		if md.mesh.dimension==3 & md.flowequation.isFS,
+ 		if md.mesh.dimension==3 and md.flowequation.isFS:
+-			pos=numpy.nonzero(numpy.logical_and(md.mask.vertexongroundedice,md.mesh.vertexonbed))
++			pos=numpy.nonzero(numpy.logical_and(md.mask.groundedice_levelset,md.mesh.vertexonbed))
+ 			if numpy.any(numpy.logical_not(numpy.isnan(md.stressbalance.referential[pos,:]))):
+ 				md.checkmessage("no referential should be specified for basal vertices of grounded ice")
+ 
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 15986)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 15987)
+@@ -111,7 +111,7 @@
+ 			end
+ 			%CHECK THAT NO rotation specified for FS Grounded ice at base
+ 			if md.mesh.dimension==3 & md.flowequation.isFS,
+-				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
++				pos=find(md.mask.groundedice_levelset>0. & md.mesh.vertexonbed);
+ 				if any(~isnan(md.stressbalance.referential(pos,:))),
+ 					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+ 				end
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 15986)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 15987)
+@@ -89,7 +89,7 @@
+ 
+ 		if StressbalanceSIAAnalysisEnum() in analyses:
+ 			if any(self.element_equation==1):
+-				if numpy.any(numpy.logical_and(self.element_equation,md.mask.elementonfloatingice)):
++				if numpy.any(numpy.logical_and(self.vertex_equation,md.mask.groundedice_levelset)):
+ 					print "\n !!! Warning: SIA's model is not consistent on ice shelves !!!\n"
+ 
+ 		return md
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 15986)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 15987)
+@@ -103,7 +103,7 @@
+ 			end
+ 			if ismember(StressbalanceSIAAnalysisEnum(),analyses),
+ 				if any(obj.element_equation==1),
+-					if(obj.element_equation & md.mask.elementonfloatingice),
++					if(obj.vertex_equation & md.mask.groundedice_levelset<0.),
+ 						disp(sprintf('\n !!! Warning: SIA''s model is not consistent on ice shelves !!!\n'));
+ 					end
+ 				end
+Index: ../trunk-jpl/src/m/regional/BasinConstrainShelf.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/BasinConstrainShelf.m	(revision 15986)
++++ ../trunk-jpl/src/m/regional/BasinConstrainShelf.m	(revision 15987)
+@@ -65,7 +65,7 @@
+ md.stressbalance.spcvy(pos)=md.inversion.vy_obs(pos); 
+ 
+ %iceshelves: any vertex on floating ice is spc'd
+-pos=find(md.mask.vertexongroundedice);
++pos=find(md.mask.groundedice_levelset<0.);
+ md.stressbalance.spcvx(pos)=md.inversion.vx_obs(pos); 
+ md.stressbalance.spcvy(pos)=md.inversion.vy_obs(pos); 
+ 
+Index: ../trunk-jpl/src/m/contrib/ecco/MeltingGroundingLines.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/ecco/MeltingGroundingLines.m	(revision 15986)
++++ ../trunk-jpl/src/m/contrib/ecco/MeltingGroundingLines.m	(revision 15987)
+@@ -6,7 +6,7 @@
+ %
+ 
+ %get nodes on ice sheet and on ice shelf
+-pos_shelf=find(~md.mask.vertexongroundedice);
++pos_shelf=find(md.mask.groundedice_levelset<0.);
+ pos_GL=intersect(unique(md.mesh.elements(find(md.mask.elementongroundedice),:)),unique(md.mesh.elements(find(md.mask.elementonfloatingice),:)));
+ 
+ for i=1:length(pos_shelf)
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15986)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15987)
+@@ -26,8 +26,7 @@
+ 	vertexonicefront=double(md.mesh.vertexonboundary & nodeinsideicefront);
+ else
+ 	%Guess where the ice front is
+-	vertexonfloatingice=zeros(md.mesh.numberofvertices,1);
+-	vertexonfloatingice(md.mesh.elements(find(md.mask.elementonfloatingice),:))=1;
++	vertexonfloatingice=(md.mask.groundedice_levelset<0.);
+ 	vertexonicefront=double(md.mesh.vertexonboundary & vertexonfloatingice);
+ end
+ pos=find(md.mesh.vertexonboundary & ~vertexonicefront);
+@@ -96,7 +95,7 @@
+ 	pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+ 	if (length(md.basalforcings.geothermalflux)~=md.mesh.numberofvertices),
+ 		md.basalforcings.geothermalflux=zeros(md.mesh.numberofvertices,1);
+-		md.basalforcings.geothermalflux(find(md.mask.vertexongroundedice))=50.*10.^-3; %50mW/m2
++		md.basalforcings.geothermalflux(find(md.mask.groundedice_levelset>0.))=50.*10.^-3; %50mW/m2
+ 	end
+ else
+ 	disp('      no thermal boundary conditions created: no observed temperature found');
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15986)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15987)
+@@ -30,8 +30,7 @@
+ 		vertexonicefront=numpy.logical_and(md.mesh.vertexonboundary,nodeinsideicefront.reshape(-1))
+ 	else:
+ 		#Guess where the ice front is
+-		vertexonfloatingice=numpy.zeros((md.mesh.numberofvertices),bool)
+-		vertexonfloatingice[md.mesh.elements[numpy.nonzero(md.mask.elementonfloatingice),:]-1]=True
++		vertexonfloatingice=numpy.logical(md.mask.groundedice_levelset<0.)
+ 		vertexonicefront=numpy.logical_and(md.mesh.vertexonboundary,vertexonfloatingice)
+ 
+ #	pos=find(md.mesh.vertexonboundary & ~vertexonicefront);
+@@ -103,7 +102,7 @@
+ 		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
+ 		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
+ 			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
+-			md.basalforcings.geothermalflux[numpy.nonzero(md.mask.vertexongroundedice)]=50.*10.**-3    #50mW/m2
++			md.basalforcings.geothermalflux[numpy.nonzero(md.mask.groundedice_levelset>0.)]=50.*10.**-3    #50mW/m2
+ 	else:
+ 		print "      no thermal boundary conditions created: no observed temperature found"
+ 
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15986)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15987)
+@@ -23,7 +23,6 @@
+ 	      md=setflowequation(md,varargin)
+ 
+ 	   Example:
+-	      md=setflowequation(md,'HO','HO.exp','SSA',md.mask.elementonfloatingice,'fill','SIA');
+ 	      md=setflowequation(md,'HO','HO.exp',fill','SIA','coupling','tiling');
+ 	"""
+ 
+Index: ../trunk-jpl/src/m/parameterization/contourenvelope.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/contourenvelope.m	(revision 15986)
++++ ../trunk-jpl/src/m/parameterization/contourenvelope.m	(revision 15987)
+@@ -6,7 +6,6 @@
+ %
+ %   Example:
+ %      segments=contourenvelope(md,'Stream.exp');
+-%      segments=contourenvelope(md,md.mask.elementonfloatingice)
+ %      segments=contourenvelope(md);
+ 
+ %some checks
+Index: ../trunk-jpl/src/m/parameterization/setmask.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15986)
++++ ../trunk-jpl/src/m/parameterization/setmask.m	(revision 15987)
+@@ -40,12 +40,6 @@
+ vertexonfloatingice(find(~vertexongroundedice))=1;
+ %}}}
+ 
+-%Return: 
+-md.mask.elementonfloatingice=elementonfloatingice;
+-md.mask.vertexonfloatingice=vertexonfloatingice;
+-md.mask.elementongroundedice=elementongroundedice;
+-md.mask.vertexongroundedice=vertexongroundedice;
+-
+ %level sets
+ md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
+ md.mask.groundedice_levelset=vertexongroundedice;
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15986)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15987)
+@@ -16,7 +16,6 @@
+ %      md=setflowequation(md,varargin)
+ %
+ %   Example:
+-%      md=setflowequation(md,'HO','HO.exp','SSA',md.mask.elementonfloatingice,'fill','SIA');
+ %      md=setflowequation(md,'HO','HO.exp',fill','SIA','coupling','tiling');
+ 
+ %some checks on list of arguments
+Index: ../trunk-jpl/src/m/parameterization/setmask2.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask2.m	(revision 15986)
++++ ../trunk-jpl/src/m/parameterization/setmask2.m	(revision 15987)
+@@ -138,11 +138,4 @@
+ vertexonfloatingice(errornodes)=0;
+ 
+ %Return: 
+-md.mask.vertexonfloatingice=vertexonfloatingice;
+-md.mask.elementonfloatingice=elementonfloatingice;
+-md.mask.vertexonwater=vertexonwater;
+-md.mask.elementonwater=elementonwater;
+-md.mask.vertexongroundedice=vertexongroundedice;
+-md.mask.elementongroundedice=elementongroundedice;
+-
+ md.mesh.segmentmarkers(:)=1;
+Index: ../trunk-jpl/src/m/parameterization/contourenvelope.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/contourenvelope.py	(revision 15986)
++++ ../trunk-jpl/src/m/parameterization/contourenvelope.py	(revision 15987)
+@@ -14,7 +14,6 @@
+ 
+ 	   Example:
+ 	      segments=contourenvelope(md,'Stream.exp');
+-	      segments=contourenvelope(md,md.mask.elementonfloatingice)
+ 	      segments=contourenvelope(md);
+ 	"""
+ 
+Index: ../trunk-jpl/src/m/parameterization/setmask.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15986)
++++ ../trunk-jpl/src/m/parameterization/setmask.py	(revision 15987)
+@@ -40,12 +40,6 @@
+ 	vertexonfloatingice[numpy.nonzero(numpy.logical_not(vertexongroundedice))]=True
+ 	#}}}
+ 
+-	#Return: 
+-	md.mask.elementonfloatingice = elementonfloatingice
+-	md.mask.vertexonfloatingice = vertexonfloatingice
+-	md.mask.elementongroundedice = elementongroundedice
+-	md.mask.vertexongroundedice = vertexongroundedice
+-
+ 	#level sets
+ 	md.mask.ice_levelset         = numpy.ones(md.mesh.numberofvertices,bool)
+ 	md.mask.groundedice_levelset = -1.*numpy.ones((md.mesh.numberofvertices,1))
Index: /issm/oecreview/Archive/15392-16133/ISSM-15987-15988.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15987-15988.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15987-15988.diff	(revision 16134)
@@ -0,0 +1,555 @@
+Index: ../trunk-jpl/test/Par/SquareEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 15988)
+@@ -11,10 +11,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+ print "      creating drag"
+-md.friction.coefficient=200.*numpy.ones((md.mesh.numberofvertices,1))    #q=1.
+-#Take care of iceshelves: no basal drag
+-pos=numpy.nonzero(md.mask.elementonfloatingice)[0]
+-md.friction.coefficient[md.mesh.elements[pos,:]-1]=0.
++md.friction.coefficient=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15987)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15988)
+@@ -75,9 +75,8 @@
+ md.basalforcings.geothermalflux=numpy.ones((md.mesh.numberofvertices,1))
+ 
+ #Friction
+-pos=numpy.nonzero(md.mask.elementonfloatingice)
+ md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1]=0
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/RoundSheetEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetEISMINT.par	(revision 15987)
++++ ../trunk-jpl/test/Par/RoundSheetEISMINT.par	(revision 15988)
+@@ -5,7 +5,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+ disp('      creating drag');
+-md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1); %q=1. no drag is specified in the analytical solution
++md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/79North.par
+===================================================================
+--- ../trunk-jpl/test/Par/79North.par	(revision 15987)
++++ ../trunk-jpl/test/Par/79North.par	(revision 15988)
+@@ -21,16 +21,14 @@
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=50.*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Ice shelf melting and surface mass balance 
+-pos=find(md.mask.elementonfloatingice);
+ md.basalforcings.melting_rate=zeros(md.mesh.numberofvertices,1);
+-md.basalforcings.melting_rate(md.mesh.elements(pos,:))=10;
++md.basalforcings.melting_rate(find(md.mask.groundedice_levelset<0.))=0.;
+ md.surfaceforcings.mass_balance=15.*ones(md.mesh.numberofvertices,1);
+ 
+ %Numerical parameters
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 15988)
+@@ -58,9 +58,8 @@
+ md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
+ 
+ #Friction
+-pos=nonzero(md.mask.elementonfloatingice)
+ md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1] = 0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p = ones((md.mesh.numberofelements,1))
+ md.friction.q = ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/SquareThermal.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.par	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareThermal.par	(revision 15988)
+@@ -14,10 +14,8 @@
+ md.initialization.vz=zeros(md.mesh.numberofvertices,1);
+ 
+ disp('      creating drag');
+-md.friction.coefficient=200.*ones(md.mesh.numberofvertices,1); %q=1.
+-%Take care of iceshelves: no basal drag
+-pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient=200.*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+@@ -40,4 +38,4 @@
+ disp('      boundary conditions for thermal model');
+ md.thermal.spctemperature(:)=md.initialization.temperature;
+ md.basalforcings.geothermalflux=zeros(md.mesh.numberofvertices,1); 
+-pos=find(md.mask.elementongroundedice);md.basalforcings.geothermalflux(md.mesh.elements(pos,:))=1.*10^-3; %1 mW/m^2
++md.basalforcings.geothermalflux(find(md.mask.groundedice_levelset>0.)=1.*10^-3; %1 mW/m^2
+Index: ../trunk-jpl/test/Par/RoundSheetEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetEISMINT.py	(revision 15987)
++++ ../trunk-jpl/test/Par/RoundSheetEISMINT.py	(revision 15988)
+@@ -8,7 +8,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+ print "      creating drag"
+-md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))    #q=1. no drag is specified in the analytical solution
++md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1)) 
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/Pig.par
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.par	(revision 15987)
++++ ../trunk-jpl/test/Par/Pig.par	(revision 15988)
+@@ -26,9 +26,8 @@
+ md.initialization.temperature=md.initialization.temperature;
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=50*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par	(revision 15987)
++++ ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par	(revision 15988)
+@@ -9,10 +9,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+ disp('      creating drag');
+-md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1); %q=1. no drag is specified in the analytical solution
+-%Take care of iceshelves: no basal drag
+-pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/SquareShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.par	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareShelf.par	(revision 15988)
+@@ -27,9 +27,8 @@
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/ISMIPA.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPA.par	(revision 15987)
++++ ../trunk-jpl/test/Par/ISMIPA.par	(revision 15988)
+@@ -6,10 +6,8 @@
+ md.geometry.thickness=md.geometry.surface-md.geometry.bed;
+ 
+ disp('      creating drag');
+-md.friction.coefficient=200.*ones(md.mesh.numberofvertices,1); %q=1.
+-%Take care of iceshelves: no basal drag
+-pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient=200.*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 15988)
+@@ -43,9 +43,8 @@
+ md.basalforcings.melting_rate=5.*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ #Friction
+-pos=numpy.nonzero(md.mask.elementonfloatingice)
+ md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1]=0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/ISMIPB.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPB.par	(revision 15987)
++++ ../trunk-jpl/test/Par/ISMIPB.par	(revision 15988)
+@@ -6,10 +6,8 @@
+ md.geometry.thickness=md.geometry.surface-md.geometry.bed;
+ 
+ disp('      creating drag');
+-md.friction.coefficient=200.*ones(md.mesh.numberofvertices,1); %q=1.
+-%Take care of iceshelves: no basal drag
+-pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient=200.*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/SquareThermal.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.py	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareThermal.py	(revision 15988)
+@@ -18,10 +18,8 @@
+ md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      creating drag"
+-md.friction.coefficient=200.*numpy.ones((md.mesh.numberofvertices,1))    #q=1.
+-#Take care of iceshelves: no basal drag
+-pos=numpy.nonzero(md.mask.elementonfloatingice)[0]
+-md.friction.coefficient[md.mesh.elements[pos,:]-1]=0.
++md.friction.coefficient=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+@@ -44,5 +42,4 @@
+ print "      boundary conditions for thermal model"
+ md.thermal.spctemperature[:]=md.initialization.temperature
+ md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1)) 
+-pos=numpy.nonzero(md.mask.elementongroundedice)[0]
+-md.basalforcings.geothermalflux[md.mesh.elements[pos,:]-1]=1.*10**-3    #1 mW/m^2
++md.basalforcings.geothermalflux[numpy.nonzero(md.mask.groundedice_levelset>0.)[0]]=1.*10**-3    #1 mW/m^2
+Index: ../trunk-jpl/test/Par/ISMIPC.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPC.par	(revision 15987)
++++ ../trunk-jpl/test/Par/ISMIPC.par	(revision 15988)
+@@ -8,9 +8,7 @@
+ disp('      creating drag');
+ %md.friction.coefficient=sqrt(md.constants.yts.*(1000.+1000.*sin(md.mesh.x*2.*pi/max(md.mesh.x/2.)).*sin(md.mesh.y*2.*pi/max(md.mesh.x/2.)))./(md.constants.g*(md.materials.rho_ice*md.geometry.thickness+md.materials.rho_water*md.geometry.bed)));
+ md.friction.coefficient=sqrt(md.constants.yts.*(1000.+1000.*sin(md.mesh.x*2.*pi/max(md.mesh.x)).*sin(md.mesh.y*2.*pi/max(md.mesh.x))));
+-%Take care of iceshelves: no basal drag
+-pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=zeros(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/ISMIPD.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPD.par	(revision 15987)
++++ ../trunk-jpl/test/Par/ISMIPD.par	(revision 15988)
+@@ -7,9 +7,7 @@
+ 
+ disp('      creating drag');
+ md.friction.coefficient=sqrt(md.constants.yts.*(1000.+1000.*sin(md.mesh.x*2.*pi/max(md.mesh.x))));
+-%Take care of iceshelves: no basal drag
+-pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=zeros(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 15987)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 15988)
+@@ -37,9 +37,8 @@
+ md.initialization.temperature=md.initialization.temperature
+ 
+ #Friction
+-pos=numpy.nonzero(md.mask.elementonfloatingice)
+ md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos].astype(int)-1]=0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=ones((md.mesh.numberofelements,1))
+ md.friction.q=ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py	(revision 15987)
++++ ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py	(revision 15988)
+@@ -12,10 +12,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+ print "      creating drag"
+-md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))    #q=1. no drag is specified in the analytical solution
+-#Take care of iceshelves: no basal drag
+-pos=numpy.nonzero(md.mask.elementonfloatingice)[0]
+-md.friction.coefficient[md.mesh.elements[pos,:]-1]=0.
++md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/ISMIPB.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPB.py	(revision 15987)
++++ ../trunk-jpl/test/Par/ISMIPB.py	(revision 15988)
+@@ -9,10 +9,8 @@
+ md.geometry.thickness=md.geometry.surface-md.geometry.bed
+ 
+ print "      creating drag"
+-md.friction.coefficient=200.*numpy.ones((md.mesh.numberofvertices,1))    #q=1.
+-#Take care of iceshelves: no basal drag
+-pos=numpy.nonzero(md.mask.elementonfloatingice)[0]
+-md.friction.coefficient[md.mesh.elements[pos,:]-1]=0.
++md.friction.coefficient=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/ISMIPD.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPD.py	(revision 15987)
++++ ../trunk-jpl/test/Par/ISMIPD.py	(revision 15988)
+@@ -10,9 +10,7 @@
+ 
+ print "      creating drag"
+ md.friction.coefficient=numpy.sqrt(md.constants.yts*(1000.+1000.*numpy.sin(md.mesh.x.reshape(-1,1)*2.*numpy.pi/numpy.max(md.mesh.x))))
+-#Take care of iceshelves: no basal drag
+-pos=numpy.nonzero(md.mask.elementonfloatingice)[0]
+-md.friction.coefficient[md.mesh.elements[pos,:]-1]=0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.zeros((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/GiaBenchmarksAB.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaBenchmarksAB.par	(revision 15987)
++++ ../trunk-jpl/test/Par/GiaBenchmarksAB.par	(revision 15988)
+@@ -44,9 +44,8 @@
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15987)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15988)
+@@ -67,9 +67,8 @@
+ md.basalforcings.geothermalflux=ones(md.mesh.numberofvertices,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 15988)
+@@ -27,9 +27,8 @@
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/GiaBenchmarksCD.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaBenchmarksCD.par	(revision 15987)
++++ ../trunk-jpl/test/Par/GiaBenchmarksCD.par	(revision 15988)
+@@ -43,9 +43,8 @@
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 15988)
+@@ -34,9 +34,8 @@
+ md.basalforcings.melting_rate=5.*ones(md.mesh.numberofvertices,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 15988)
+@@ -31,9 +31,8 @@
+ md.basalforcings.melting_rate=5*ones(md.mesh.numberofvertices,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 15987)
++++ ../trunk-jpl/test/Par/79North.py	(revision 15988)
+@@ -33,16 +33,14 @@
+ md.initialization.temperature=md.initialization.temperature
+ 
+ #Friction
+-pos=numpy.nonzero(md.mask.elementonfloatingice)
+ md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos].astype(int)-1]=0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=ones((md.mesh.numberofelements,1))
+ md.friction.q=ones((md.mesh.numberofelements,1))
+ 
+ #Ice shelf melting and surface mass balance 
+-pos=numpy.nonzero(md.mask.elementonfloatingice)
+ md.basalforcings.melting_rate=zeros((md.mesh.numberofvertices,1))
+-md.basalforcings.melting_rate[md.mesh.elements[pos].astype(int)-1]=10.
++md.basalforcings.melting_rate[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.surfaceforcings.mass_balance=15*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ #Numerical parameters
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 15988)
+@@ -45,9 +45,8 @@
+ md.basalforcings.melting_rate=5.*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ #Friction
+-pos=numpy.nonzero(md.mask.elementonfloatingice)
+ md.friction.coefficient=20.*ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos].astype(int)-1]=0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=ones((md.mesh.numberofelements,1))
+ md.friction.q=ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 15988)
+@@ -29,9 +29,8 @@
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+ %Friction
+-pos=find(md.mask.elementonfloatingice);
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 15988)
+@@ -58,9 +58,8 @@
+ md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
+ 
+ #Friction
+-pos=nonzero(md.mask.elementonfloatingice)
+ md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1] = 0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p = ones((md.mesh.numberofelements,1))
+ md.friction.q = ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/ISMIPA.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPA.py	(revision 15987)
++++ ../trunk-jpl/test/Par/ISMIPA.py	(revision 15988)
+@@ -9,10 +9,8 @@
+ md.geometry.thickness=md.geometry.surface-md.geometry.bed
+ 
+ print "      creating drag"
+-md.friction.coefficient=200.*numpy.ones((md.mesh.numberofvertices,1))    #q=1.
+-#Take care of iceshelves: no basal drag
+-pos=numpy.nonzero(md.mask.elementonfloatingice)[0]
+-md.friction.coefficient[md.mesh.elements[pos,:]-1]=0.
++md.friction.coefficient=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 15988)
+@@ -39,9 +39,8 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Friction
+-pos=numpy.nonzero(md.mask.elementonfloatingice)
+ md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1]=0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+Index: ../trunk-jpl/test/Par/SquareEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 15987)
++++ ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 15988)
+@@ -8,10 +8,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+ disp('      creating drag');
+-md.friction.coefficient=200.*ones(md.mesh.numberofvertices,1); %q=1.
+-%Take care of iceshelves: no basal drag
+-pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.;
++md.friction.coefficient=200.*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/test/Par/ISMIPC.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPC.py	(revision 15987)
++++ ../trunk-jpl/test/Par/ISMIPC.py	(revision 15988)
+@@ -11,9 +11,7 @@
+ print "      creating drag"
+ #md.friction.coefficient=sqrt(md.constants.yts.*(1000.+1000.*sin(md.mesh.x*2.*pi/max(md.mesh.x/2.)).*sin(md.mesh.y*2.*pi/max(md.mesh.x/2.)))./(md.constants.g*(md.materials.rho_ice*md.geometry.thickness+md.materials.rho_water*md.geometry.bed)));
+ md.friction.coefficient=numpy.sqrt(md.constants.yts*(1000.+1000.*numpy.sin(md.mesh.x.reshape(-1,1)*2.*numpy.pi/numpy.max(md.mesh.x))*numpy.sin(md.mesh.y.reshape(-1,1)*2.*numpy.pi/numpy.max(md.mesh.x))))
+-#Take care of iceshelves: no basal drag
+-pos=numpy.nonzero(md.mask.elementonfloatingice)[0]
+-md.friction.coefficient[md.mesh.elements[pos,:]-1]=0.
++md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.zeros((md.mesh.numberofelements,1))
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15988-15989.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15988-15989.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15988-15989.diff	(revision 16134)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 15988)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 15989)
+@@ -110,6 +110,9 @@
+ 		if ! test -d "$MATLAB_ROOT"; then
+ 		  AC_MSG_ERROR([matlab directory provided ($MATLAB_ROOT) does not exist]);
+ 		fi
++		if ! test -f "$MATLAB_ROOT/extern/include/mex.h"; then
++			AC_MSG_ERROR([Couldn't find mex.h... check your installation of matlab])
++	   fi
+ 	fi
+ 	AC_MSG_RESULT($HAVE_MATLAB)
+ 	AM_CONDITIONAL([MATLAB], [test x$HAVE_MATLAB = xyes])
+@@ -119,7 +122,6 @@
+ 
+ 		AC_DEFINE([_HAVE_MATLAB_],[1],[with matlab in ISSM src])
+   		MATLABINCL="-I$MATLAB_ROOT/extern/include/"
+-		AC_CHECK_FILE($MATLAB_ROOT/extern/include/mex.h,[],[AC_MSG_ERROR([Couldn't find mex.h... check your installation of matlab])])
+ 		
+ 		dnl 4. get MEXLIB MEXLINK and MEXEXT (experimental) except for windows
+   		case "${host_os}" in
+@@ -162,6 +164,9 @@
+ 		if ! test -d "$TRIANGLE_ROOT"; then
+ 			AC_MSG_ERROR([triangle directory provided ($TRIANGLE_ROOT) does not exist]);
+ 		fi
++		if ! test -f "$TRIANGLE_ROOT/triangle.h" ; then
++			AC_MSG_ERROR([Couldn't find triangle.h... check your installation of triangle])
++		fi
+ 	fi
+ 	AC_MSG_RESULT($HAVE_TRIANGLE)
+ 	AM_CONDITIONAL([TRIANGLE],[test x$HAVE_TRIANGLE = xyes])
+@@ -169,8 +174,6 @@
+ 	dnl library and header files
+ 	if test "x$HAVE_TRIANGLE" = "xyes"; then
+ 		TRIANGLEINCL=-I$TRIANGLE_ROOT/
+-		dnl AC_CHECK_FILE($TRIANGLE_ROOT/triangle.h,[],[AC_MSG_ERROR([Couldn't find triangle.h... check your installation of triangle])]) This check 
+-		dnl blows up in cross-compile form.  Need to check for it in shell mode. 
+ 		case "${host_os}" in
+ 				*cygwin*)
+ 				TRIANGLELIB="-Wl,`cygpath -m $TRIANGLE_ROOT/`triangle.lib"
Index: /issm/oecreview/Archive/15392-16133/ISSM-15989-15990.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15989-15990.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15989-15990.diff	(revision 16134)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/m/geometry/FlagElements.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.m	(revision 15989)
++++ ../trunk-jpl/src/m/geometry/FlagElements.m	(revision 15990)
+@@ -1,7 +1,7 @@
+ function flag=FlagElements(md,region),
+ %FLAGELEMENTS - flag the elements in an region
+ %
+-%   The region can be given with an exp file, a list of elements.
++%   The region can be given with an exp file, a list of elements or vertices
+ %
+ %   Usage: 
+ %      flag=FlagElements(md,region);
+@@ -45,11 +45,14 @@
+ 			flag=~flag;
+ 		end
+ 	elseif isfloat(region) | islogical(region),
+-		if size(region,1)~=md.mesh.numberofelements,
++		if size(region,1)==md.mesh.numberofelements,
++			flag=region;
++		elseif size(region,1)==md.mesh.numberofvertices,
++			flag=logical(sum(region(md.mesh.elements)>0,2)==size(md.mesh.elements,2));
++		else
+ 			help FlagElements
+ 			error('Flaglist for region must be of same size as number of elements in model');
+ 		end
+-		flag=region;
+ 	else
+ 		error('Invalid region option');
+ 	end
+Index: ../trunk-jpl/src/m/geometry/FlagElements.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 15989)
++++ ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 15990)
+@@ -9,7 +9,7 @@
+ 	"""
+ 	FLAGELEMENTS - flag the elements in an region
+ 
+-	   The region can be given with an exp file, a list of elements.
++	   The region can be given with an exp file, a list of elements or vertices
+ 
+ 	   Usage: 
+ 	      flag=FlagElements(md,region);
+@@ -53,9 +53,12 @@
+ 			flag=numpy.logical_not(flag)
+ 
+ 	elif isinstance(region,numpy.ndarray) or isinstance(region,bool):
+-		if not numpy.size(region,0)==md.mesh.numberofelements:
++		if numpy.size(region,0)==md.mesh.numberofelements:
++			flag=region
++		else if numpy.size(region,0)==md.mesh.numberofvertices:
++			raise TypeError("look at FlagElements.m and implement the same...")
++		else:
+ 			raise TypeError("Flaglist for region must be of same size as number of elements in model.")
+-		flag=region
+ 
+ 	else:
+ 		raise TypeError("Invalid region option")
Index: /issm/oecreview/Archive/15392-16133/ISSM-15990-15991.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15990-15991.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15990-15991.diff	(revision 16134)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/src/m/consistency/comparemodels.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/comparemodels.m	(revision 0)
++++ ../trunk-jpl/src/m/consistency/comparemodels.m	(revision 15991)
+@@ -0,0 +1,33 @@
++function comparemodels(md1,md2);
++
++	%loop over model fields
++	model_fields=fields(md1);
++	for i=1:length(model_fields),
++		field1=md1.(model_fields{i});
++		field2=md2.(model_fields{i});
++		if isobject(field1), %recursive call
++			object_fields=fields(md1.(model_fields{i}));
++			for j=1:length(object_fields),
++				field1=md1.(model_fields{i}).(object_fields{j});
++				field2=md2.(model_fields{i}).(object_fields{j});
++				compare([model_fields{i} '.' object_fields{j}],field1,field2);
++			end
++		else
++			compare(model_fields{i},field1,field2);
++		end
++	end
++
++end
++
++function compare(fieldname,field1,field2),
++	if any(size(field1)~=size(field2)),
++		disp([fieldname ' do not have the same size']);
++	elseif isnumeric(field1),
++		if numel(field1)==1 & isnan(field1) & isnan(field2),
++			%Do not do anything
++		elseif any(field1~=field2),
++			disp([fieldname ' differs']);
++		end
++	end
++
++end
Index: /issm/oecreview/Archive/15392-16133/ISSM-15991-15992.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15991-15992.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15991-15992.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/geometry/FlagElements.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 15991)
++++ ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 15992)
+@@ -55,7 +55,7 @@
+ 	elif isinstance(region,numpy.ndarray) or isinstance(region,bool):
+ 		if numpy.size(region,0)==md.mesh.numberofelements:
+ 			flag=region
+-		else if numpy.size(region,0)==md.mesh.numberofvertices:
++		elif numpy.size(region,0)==md.mesh.numberofvertices:
+ 			raise TypeError("look at FlagElements.m and implement the same...")
+ 		else:
+ 			raise TypeError("Flaglist for region must be of same size as number of elements in model.")
Index: /issm/oecreview/Archive/15392-16133/ISSM-15992-15993.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15992-15993.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15992-15993.diff	(revision 16134)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15992)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 15993)
+@@ -22,11 +22,13 @@
+ 	if ~exist(icefrontfile)
+ 		error(['SetMarineIceSheetBC error message: ice front file ' icefrontfile ' not found']);
+ 	end
+-	nodeinsideicefront=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefrontfile,'node',2);
+-	vertexonicefront=double(md.mesh.vertexonboundary & nodeinsideicefront);
++	incontour=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefrontfile,'node',2);
++	vertexonicefront=double(md.mesh.vertexonboundary & incontour);
+ else
+ 	%Guess where the ice front is
+-	vertexonfloatingice=(md.mask.groundedice_levelset<0.);
++	pos=find(sum(md.mask.groundedice_levelset(md.mesh.elements)<0.,2) >0.);
++	vertexonfloatingice=zeros(md.mesh.numberofvertices,1);
++	vertexonfloatingice(md.mesh.elements(pos,:))=1.;
+ 	vertexonicefront=double(md.mesh.vertexonboundary & vertexonfloatingice);
+ end
+ pos=find(md.mesh.vertexonboundary & ~vertexonicefront);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15993-15994.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15993-15994.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15993-15994.diff	(revision 16134)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15993)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 15994)
+@@ -12,7 +12,7 @@
+ md.geometry.thickness=hmax+(hmin-hmax)*(radius-ymin)/(ymax-ymin);
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ 
+-pos=find(md.mask.vertexongroundedice);
++pos=find(md.mask.groundedice_levelset>0.);
+ md.geometry.bed(pos)=md.geometry.bed(pos)-300.*(radius(pos)-(rad-shelfextent))/(rad-shelfextent);
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+@@ -63,12 +63,19 @@
+ %Surface mass balance and basal melting
+ md.surfaceforcings.mass_balance=-10.*ones(md.mesh.numberofvertices,1);
+ md.basalforcings.melting_rate=zeros(md.mesh.numberofvertices,1);
+-pos=find(md.mask.vertexonfloatingice);md.basalforcings.melting_rate(pos)=10.;
++pos=find(md.mask.groundedice_levelset>0.);md.basalforcings.melting_rate(pos)=10.;
+ md.basalforcings.geothermalflux=ones(md.mesh.numberofvertices,1);
+ 
+ %Friction
++radius=1.e6;
++shelfextent=2.e5;
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
++xelem=md.mesh.x(md.mesh.elements)*[1;1;1]/3.;
++yelem=md.mesh.y(md.mesh.elements)*[1;1;1]/3.;
++rad=sqrt(xelem.^2+yelem.^2);
++flags=zeros(md.mesh.numberofelements,1);
++pos=find(rad>=(radius-shelfextent));
++md.friction.coefficient(md.mesh.elements(pos,:))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+@@ -88,7 +95,7 @@
+ %bathymetry and grounding line migration:
+ md.groundingline.migration='AgressiveMigration';
+ md.geometry.bathymetry=md.geometry.bed;
+-pos=find(md.mask.vertexonfloatingice); md.geometry.bathymetry(pos)=md.geometry.bed(pos)-900.;
++pos=find(md.mask.groundedice_levelset<0.); md.geometry.bathymetry(pos)=md.geometry.bed(pos)-900.;
+ 
+ %Deal with boundary conditions:
+ md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
Index: /issm/oecreview/Archive/15392-16133/ISSM-15994-15995.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15994-15995.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15994-15995.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15994)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 15995)
+@@ -26,12 +26,14 @@
+ 		#User provided Front.exp, use it
+ 		if not os.path.exists(icefrontfile):
+ 			raise IOError("SetMarineIceSheetBC error message: ice front file '%s' not found." % icefrontfile)
+-		[nodeinsideicefront,dum]=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefrontfile,'node',2)
+-		vertexonicefront=numpy.logical_and(md.mesh.vertexonboundary,nodeinsideicefront.reshape(-1))
++		[incontour,dum]=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefrontfile,'node',2)
++		vertexonicefront=numpy.logical_and(md.mesh.vertexonboundary,incontour.reshape(-1))
+ 	else:
+ 		#Guess where the ice front is
+-		vertexonfloatingice=numpy.logical(md.mask.groundedice_levelset<0.)
+-		vertexonicefront=numpy.logical_and(md.mesh.vertexonboundary,vertexonfloatingice)
++		vertexonfloatingice=numpy.zeros((md.mesh.numberofvertices,1))
++		pos=numpy.nonzero(numpy.sum(md.mask.groundedice_levelset[md.mesh.elements-1]<0.,axis=1) >0.)[0]
++		vertexonfloatingice[md.mesh.elements[pos].astype(int)-1]=1.
++		vertexonicefront=numpy.logical_and(numpy.reshape(md.mesh.vertexonboundary,(-1,1)),vertexonfloatingice>0.)
+ 
+ #	pos=find(md.mesh.vertexonboundary & ~vertexonicefront);
+ 	pos=numpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(vertexonicefront)))[0]
Index: /issm/oecreview/Archive/15392-16133/ISSM-15995-15996.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15995-15996.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15995-15996.diff	(revision 16134)
@@ -0,0 +1,196 @@
+Index: ../trunk-jpl/test/Archives/Archive501.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive602.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive515.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive434.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive408.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive509.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive428.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive510.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive403.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive611.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive423.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive504.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive412.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive513.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive406.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive608.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive401.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive502.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive421.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive603.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive415.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive516.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive409.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive455.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive429.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive410.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive404.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive612.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive450.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive505.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive601.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive413.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive407.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive508.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive609.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive402.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive610.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive422.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive503.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive416.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive411.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive512.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive405.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive425.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive506.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive419.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-15996-15997.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15996-15997.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15996-15997.diff	(revision 16134)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 15996)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 15997)
+@@ -17,7 +17,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ md.extrude(3,1.)
+ md=setflowequation(md,'FS','all')
+-md=md.extract(md.mask.elementonfloatingice)
++md=md.extract(md.mask.groundedice_levelset<0.)
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 15996)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 15997)
+@@ -7,7 +7,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'FS','all');
+-md=extract(md,md.mask.elementonfloatingice);
++md=extract(md,md.mask.groundedice_levelset<0.);
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+Index: ../trunk-jpl/test/NightlyRun/test613.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.py	(revision 15996)
++++ ../trunk-jpl/test/NightlyRun/test613.py	(revision 15997)
+@@ -17,7 +17,7 @@
+ md=setflowequation(md,'SSA','all')
+ 
+ #Ice sheet only
+-md=md.extract(md.mask.elementongroundedice)
++md=md.extract(md.mask.groundedice_levelset>0.)
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.balancethickness.spcthickness[pos]=md.geometry.thickness[pos]
+ 
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 15996)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 15997)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ 
+ %Ice sheet only
+-md=extract(md,md.mask.elementongroundedice);
++md=extract(md,md.mask.groundedice_levelset>0.);
+ pos=find(md.mesh.vertexonboundary);
+ md.balancethickness.spcthickness(pos)=md.geometry.thickness(pos);
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15997-15998.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15997-15998.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15997-15998.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/geometry/FlagElements.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 15997)
++++ ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 15998)
+@@ -56,7 +56,7 @@
+ 		if numpy.size(region,0)==md.mesh.numberofelements:
+ 			flag=region
+ 		elif numpy.size(region,0)==md.mesh.numberofvertices:
+-			raise TypeError("look at FlagElements.m and implement the same...")
++			flag=(numpy.sum(region[md.mesh.elements-1]>0,axis=1)==numpy.size(md.mesh.elements,1))
+ 		else:
+ 			raise TypeError("Flaglist for region must be of same size as number of elements in model.")
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15998-15999.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15998-15999.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15998-15999.diff	(revision 16134)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/m/classes/clusters/greenplanet.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/greenplanet.m	(revision 15998)
++++ ../trunk-jpl/src/m/classes/clusters/greenplanet.m	(revision 15999)
+@@ -107,6 +107,8 @@
+ 			 fprintf(fid,'#PBS -M mmorligh@uci.edu\n');
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
++			 fprintf(fid,'export ISSM_DIR="%s/../"\n',cluster.codepath); %FIXME
++			 fprintf(fid,'source $ISSM_DIR/etc/environment.sh\n');       %FIXME
+ 			 fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,dirname);
+ 			 fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname);
+ 			 if ~io_gather, %concatenate the output files:
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15998)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 15999)
+@@ -60,8 +60,8 @@
+ 		 function md = checkconsistency(cluster,md,solution,analyses) % {{{
+ 
+ 			 available_queues={'long','normal','debug','devel','alphatst@pbspl233'};
+-			 queue_requirements_time=[5*24*60 8*60 2*60 2*60];
+-			 queue_requirements_np=[2048 2048 150 150];
++			 queue_requirements_time=[5*24*60 8*60 2*60 2*60 24*60];
++			 queue_requirements_np=[2048 2048 150 150 2048];
+ 
+ 			 QueueRequirements(available_queues,queue_requirements_time,queue_requirements_np,cluster.queue,cluster.np,cluster.time)
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-15999-16000.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-15999-16000.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-15999-16000.diff	(revision 16134)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 15999)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16000)
+@@ -75,8 +75,15 @@
+ md.basalforcings.geothermalflux=numpy.ones((md.mesh.numberofvertices,1))
+ 
+ #Friction
++radius=1.e6
++shelfextent=2.e5
+ md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
++xelem=numpy.mean(md.mesh.x[md.mesh.elements.astype(int)-1],axis=1)
++yelem=numpy.mean(md.mesh.y[md.mesh.elements.astype(int)-1],axis=1)
++rad=numpy.sqrt(xelem**2+yelem**2)
++flags=numpy.zeros(md.mesh.numberofelements)
++pos=numpy.nonzero(rad>=(radius-shelfextent))
++md.friction.coefficient(md.mesh.elements(pos,:))=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16000-16001.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16000-16001.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16000-16001.diff	(revision 16134)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive511.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive613.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-16001-16002.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16001-16002.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16001-16002.diff	(revision 16134)
@@ -0,0 +1,2207 @@
+Index: ../trunk-jpl/packagers/ubuntu/issmpkg/issm_options.m4
+===================================================================
+--- ../trunk-jpl/packagers/ubuntu/issmpkg/issm_options.m4	(revision 0)
++++ ../trunk-jpl/packagers/ubuntu/issmpkg/issm_options.m4	(revision 16002)
+@@ -0,0 +1,1690 @@
++dnl ISSM Options
++
++AC_DEFUN([ISSM_OPTIONS],[
++
++	dnl ISSM's internal options
++	dnl Debugging {{{
++	AC_ARG_ENABLE([debugging],                                        dnl feature
++		AS_HELP_STRING([--enable-debugging],[turn debug support on]),  dnl help string
++		[enable_debugging=$enableval],                                 dnl action if given
++		[enable_debugging=no])                                         dnl action if not given
++	if test "x$enable_debugging" = xyes; then
++		AC_DEFINE([_ISSM_DEBUG_],[1],[Macro to enable debugging in ISSM])
++	fi
++
++	dnl }}}
++    dnl Shared build {{{
++    AC_ARG_ENABLE([sharedlibs],                                                dnl feature
++        AS_HELP_STRING([--enable-sharedlibs], [produce libISSM.so.0]),         dnl help string
++        [enable_sharedlibs=$enableval],                                        dnl action if given
++        [enable_sharedlibs=no])                                                dnl action if not given
++    AM_CONDITIONAL([SHAREDLIBS], [test x$enable_sharedlibs = xyes])
++    dnl }}}
++    dnl Version{{{
++    AC_ARG_ENABLE([version],                                                dnl feature
++        AS_HELP_STRING([--enable-version], [produce libISSM.so.0]),         dnl help string
++        [enable_version=$enableval],                                        dnl action if given
++        [enable_version=no])                                                dnl action if not given
++    AM_CONDITIONAL([VERSION], [test x$enable_VERSION = xyes])
++    dnl }}}
++	dnl Wrappers build {{{
++	AC_ARG_WITH([wrappers],
++		AS_HELP_STRING([--with-wrappers = value],[wrappers compilation. ]),
++		[WRAPPERS_VALUE=$withval],[WRAPPERS_VALUE="yes"])
++	AC_MSG_CHECKING(for wrappers compilation)
++	AM_CONDITIONAL([WRAPPERS], [test x$WRAPPERS_VALUE = xyes])
++	AC_MSG_RESULT($WRAPPERS_VALUE) 
++	dnl }}}
++	dnl Extensions{{{
++	ISSMEXT=".exe"
++	AC_SUBST([ISSMEXT])
++	dnl }}}
++
++	dnl ISSM's externalpackages
++	dnl vendor{{{
++	AC_ARG_WITH([vendor],
++	  AS_HELP_STRING([--with-vendor = VENDOR], [vendor name, ex: intel]),
++	  [VENDOR=$withval],[VENDOR=""]) 
++	AC_MSG_CHECKING(for vendor compilers)
++	if test -n "$VENDOR"; then
++
++		if  test $VENDOR = intel-win32; then
++			export CC=icl
++			export CXX=icl
++			export CFLAGS="-DWIN32 -D_INTEL_WIN_"
++			export CXXFLAGS="-DWIN32 -D_INTEL_WIN_"
++		elif  test $VENDOR = intel-win7-32; then
++			export CC=cl
++			export CXX=cccl
++			export CXXFLAGS="-DWIN32 -D_INTEL_WIN_ -EHsc"
++			export CFLAGS="-DWIN32 -D_INTEL_WIN_ -EHsc"
++			export AR="ar-lib lib"
++			export OS_LDFLAG="-Wl,"
++			export RANLIB=true
++			OSLIBS="-Wl,kernel32.lib -Wl,user32.lib -Wl,gdi32.lib -Wl,winspool.lib -Wl,comdlg32.lib -Wl,advapi32.lib -Wl,shell32.lib -Wl,ole32.lib -Wl,oleaut32.lib -Wl,uuid.lib -Wl,odbc32.lib -Wl,odbccp32.lib"
++		elif  test $VENDOR = intel-win7-64; then
++			export CC=cl
++			export CXX=cccl
++			export CXXFLAGS="-DWIN32 -D_INTEL_WIN_ -EHsc"
++			export CFLAGS="-DWIN32 -D_INTEL_WIN_ -EHsc"
++			export AR="ar-lib lib"
++			export OS_LDFLAG="-Wl,"
++			export RANLIB=true
++			OSLIBS="-Wl,kernel32.lib -Wl,user32.lib -Wl,gdi32.lib -Wl,winspool.lib -Wl,comdlg32.lib -Wl,advapi32.lib -Wl,shell32.lib -Wl,ole32.lib -Wl,oleaut32.lib -Wl,uuid.lib -Wl,odbc32.lib -Wl,odbccp32.lib"
++		elif test $VENDOR = intel-linux; then
++			export CC=icc
++			export CXX=icpc
++			export CFLAGS=" -D_INTEL_LINUX_"
++			export CXXFLAGS=" -D_INTEL_LINUX_"
++		elif test $VENDOR = intel-discover; then
++			export CC=icc
++			export CXX=icpc
++			export CXXFLAGS=" -O3 -D_INTEL_LINUX_ -DMPICH_IGNORE_CXX_SEEK"
++			export CFLAGS=" -O3 -D_INTEL_LINUX_ -DMPICH_IGNORE_CXX_SEEK"
++		elif test $VENDOR = intel-pleiades; then
++			export CC=icc
++			export CXX=icpc
++			export CXXFLAGS=" -O3 -D_INTEL_LINUX_ "
++			export CFLAGS=" -O3 -D_INTEL_LINUX_ "
++        else
++		AC_MSG_ERROR([unknown compiler vendor!])
++		fi
++	fi
++	AC_SUBST([OSLIBS]) 
++	AC_MSG_RESULT(done)
++	dnl }}}
++	dnl matlab{{{
++
++	dnl 1. See if matlab has been provided
++	AC_ARG_WITH([matlab-dir],
++		AS_HELP_STRING([--with-matlab-dir=DIR], [matlab root directory. necessary for serial build.]),
++		[MATLAB_ROOT=$withval],[MATLAB_ROOT=""]) 
++
++	AC_MSG_CHECKING([whether matlab is enabled])
++	if test -d "$MATLAB_ROOT"; then
++		HAVE_MATLAB=yes
++	else
++		HAVE_MATLAB=no
++	fi
++	if test x$HAVE_MATLAB = xyes; then
++		AC_DEFINE([_HAVE_MATLAB_],[1],[with Matlab in ISSM src])
++	fi
++	AC_MSG_RESULT($HAVE_MATLAB)
++	AM_CONDITIONAL([MATLAB], [test x$HAVE_MATLAB = xyes])
++
++	dnl 2. Get Matlab libraries
++	if test x$HAVE_MATLAB = xyes; then
++
++		AC_MSG_CHECKING(for matlab headers and libraries in $MATLAB_ROOT)
++  		MATLABINCL="-I$MATLAB_ROOT/extern/include/"
++		
++		dnl 4. get MEXLIB MEXLINK and MEXEXT (experimental)
++      dnl OS-dependent variables and checks
++  		case "${host_os}" in
++  			*cygwin*) 
++  				if  test $VENDOR = intel-win7-32; then
++  					MEXLIB="-Wl,./../../c/libISSMCore.a -Wl,libISSMApi.a -Wl,libISSMMatlab.a -Wl,./../../c/libISSMModules.a -Wl,libmx.lib -Wl,libmex.lib -Wl,libmat.lib ${OSLIBS} -Wl,libf2cblas.lib -Wl,libf2clapack.lib" 
++               MEXLINK="-Wl,/LIBPATH:`cygpath -m ${MATLAB_ROOT}/extern/lib/win32/microsoft` -no-undefined -Wl,/export:mexFunction" 
++  				elif  test l-win7-64; then
++  					MEXLIB="-Wl,./../../c/libISSMCore.a -Wl,libISSMApi.a -Wl,libISSMMatlab.a -Wl,./../../c/libISSMModules.a -Wl,libmx.lib -Wl,libmex.lib -Wl,libmat.lib ${OSLIBS} -Wl,libf2cblas.lib -Wl,libf2clapack.lib" 
++               MEXLINK="-Wl,/LIBPATH:`cygpath -m ${MATLAB_ROOT}/extern/lib/win64/microsoft` -no-undefined -Wl,/export:mexFunction" 
++  				fi
++  				MEXEXT=`$MATLAB_ROOT/bin/mexext.bat`
++  				MEXEXT=".$MEXEXT"
++  			;;
++		   *)
++		      MEXLINK=$(mex -v 2>&1 < /dev/null | grep LDFLAGS     | sed -e "s/         LDFLAGS            = //g")
++	         MEXLIB=$( mex -v 2>&1 < /dev/null | grep CXXLIBS     | sed -e "s/         CXXLIBS            = //g")
++		      MEXEXT=$( mex -v 2>&1 < /dev/null | grep LDEXTENSION | sed -e "s/         LDEXTENSION        = //g")
++  			;;
++      esac
++	   AC_MSG_RESULT(done)
++
++		AC_SUBST([MATLABINCL])
++		AC_SUBST([MEX])
++		MATLABWRAPPEREXT=$MEXEXT
++		AC_SUBST([MATLABWRAPPEREXT])
++	   AC_SUBST([MEXLIB]) 
++		AC_SUBST([MEXLINK])
++	fi
++	dnl }}}
++	dnl triangle {{{
++	AC_ARG_WITH([triangle-dir],
++		AS_HELP_STRING([--with-triangle-dir=DIR], [triangle root directory. necessary for serial build]),
++		[TRIANGLE_ROOT=$withval],
++		[TRIANGLE_ROOT=""]) 
++	AC_ARG_WITH([triangle-include-dir],
++		AS_HELP_STRING([--with-triangle-include-dir], [triangle include dir]),
++		[TRIANGLE_INCL=$withval],
++		[TRIANGLE_INCL="$TRIANGLE_ROOT"])
++	AC_ARG_WITH([triangle-lib-dir],
++		AS_HELP_STRING([--with-triangle-lib-dir], [triangle lib dir]),
++		[TRIANGLE_LIB=$withval],
++		[TRIANGLE_LIB="$TRIANGLE_ROOT"])
++	AC_MSG_CHECKING(for triangle headers and libraries)
++
++	if test -d "$TRIANGLE_ROOT"; then
++
++		dnl defaults
++		HAVE_TRIANGLE=yes
++		TRIANGLEINCL=-I$TRIANGLE_INCL
++
++		case "${host_os}" in
++				*cygwin*)
++				TRIANGLELIB="-Wl,`cygpath -m $TRIANGLE_LIB/`triangle.lib"
++				;;
++				*linux*)
++				TRIANGLELIB="-ltriangle"
++				;;
++				*darwin*)
++				TRIANGLELIB=$TRIANGLE_LIB/triangle.a
++				;;
++			esac
++
++		AC_DEFINE([_HAVE_TRIANGLE_],[1],[with Triangle in ISSM src])
++		AC_SUBST([TRIANGLEINCL])
++		AC_SUBST([TRIANGLELIB])
++
++	else
++		HAVE_TRIANGLE=no
++	fi
++	AC_MSG_RESULT($HAVE_TRIANGLE)
++	dnl }}}
++	dnl boost{{{
++	AC_ARG_WITH([boost-dir],
++	  AS_HELP_STRING([--with-boost-dir=DIR], [boost root directory.]),
++	  [BOOST_ROOT=$withval],[BOOST_ROOT=""]) 
++	AC_MSG_CHECKING(for boost)
++	
++	if test -d "$BOOST_ROOT"; then
++		dnl defaults
++		HAVE_BOOST=yes
++		BOOSTINCL=-I$BOOST_ROOT/include
++		BOOSTLIB="-L$BOOST_ROOT/lib -lboost_python"
++
++		AC_DEFINE([_HAVE_BOOST_],[1],[with Boost in ISSM src])
++		AC_SUBST([BOOSTINCL])
++		AC_SUBST([BOOSTLIB])
++	else
++		HAVE_BOOST=no
++	fi
++	AM_CONDITIONAL([BOOST], [test x$HAVE_BOOST = xyes])
++	AC_MSG_RESULT($HAVE_BOOST)
++	dnl }}}
++	dnl dakota{{{
++	AC_ARG_WITH([dakota-dir],
++	  AS_HELP_STRING([--with-dakota-dir=DIR], [dakota root directory. necessary for serial build]),
++	  [DAKOTA_ROOT=$withval],[DAKOTA_ROOT=""]) 
++	AC_MSG_CHECKING(for dakota)
++	
++	if test -d "$DAKOTA_ROOT"; then
++
++		dnl defaults
++		HAVE_DAKOTA=yes
++		AC_MSG_RESULT($HAVE_DAKOTA)
++		DAKOTAINCL=-I$DAKOTA_ROOT/include
++		AC_MSG_CHECKING(for dakota version)
++		if test -f "$DAKOTA_ROOT/../src/src/CommandLineHandler.C"; then
++			DAKOTA_VERSION=`cat $DAKOTA_ROOT/../src/src/CommandLineHandler.C | grep 'DAKOTA version' | grep 'release' | grep -v // | sed 's/.*DAKOTA version //' | sed 's/ .*//' `
++		else if test -f "$DAKOTA_ROOT/../src/src/CommandLineHandler.cpp"; then
++			DAKOTA_VERSION=`cat $DAKOTA_ROOT/../src/src/CommandLineHandler.cpp | grep 'DAKOTA version' | grep 'release' | grep -v // | sed 's/.*DAKOTA version //' | sed 's/ .*//' `
++		else
++			AC_MSG_ERROR([Dakota CommandLineHandler.C or CommandLineHandler.cpp file not found to determine DAKOTA_VERSION!]);
++		fi
++		fi
++
++		AC_MSG_RESULT($DAKOTA_VERSION)
++		AC_DEFINE_UNQUOTED([_DAKOTA_VERSION_],"$DAKOTA_VERSION",[Dakota version number])
++		DAKOTAFLAGS=""
++		case "${host_os}" in
++			*cygwin*)
++				if      test x$DAKOTA_VERSION = x4.2 || test x$DAKOTA_VERSION = x4.2+; then
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -lfftw3 -llhs -levidence -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -lopt -lpsuade -lnewmat -lncsuopt -lgsl -lquadrature -lcoliny -lcolin -lpebbl -lutilib -l3po -lnappspack -lappspack -lconveyor -lshared -lcdd -lamplsolver"
++				else if test x$DAKOTA_VERSION = x5.1 || test x$DAKOTA_VERSION = x5.2; then
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -llhs -lsparsegrid -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -loptpp -lpsuade -lncsuopt -lcolin -linterfaces -lmomh -lscolib -lpebbl -ltinyxml -lutilib -l3po -lhopspack -lnidr -lamplsolver -lboost_signals -lboost_regex -lboost_filesystem"
++				else
++					AC_MSG_ERROR([Dakota version not found or version ($DAKOTA_VERSION) not supported!]);
++				fi
++				fi
++			;;
++			*linux*)
++				if      test x$DAKOTA_VERSION = x4.2 || test x$DAKOTA_VERSION = x4.2+; then
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -lfftw3 -llhs -levidence -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -lopt -lpsuade -lnewmat -lncsuopt -lgsl -lquadrature -lcoliny -lcolin -lpebbl -lutilib -l3po -lnappspack -lappspack -lconveyor -lshared -lcdd -lamplsolver"
++				else if test x$DAKOTA_VERSION = x5.1 || test x$DAKOTA_VERSION = x5.2; then
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -llhs -lsparsegrid -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -loptpp -lpsuade -lncsuopt -lcolin -linterfaces -lmomh -lscolib -lpebbl -ltinyxml -lutilib -l3po -lhopspack -lnidr -lamplsolver -lboost_signals -lboost_regex -lboost_filesystem -lboost_system -ldl"
++				else if test x$DAKOTA_VERSION = x5.3 || test x$DAKOTA_VERSION = x5.3.1; then
++					DAKOTAFLAGS="-DDISABLE_DAKOTA_CONFIG_H -DBOOST_MULTI_INDEX_DISABLE_SERIALIZATION -DDAKOTA_PLUGIN -DBOOST_DISABLE_ASSERTS -DDAKOTA_HAVE_BOOST_FS -DHAVE_UNISTD_H -DHAVE_SYSTEM -DHAVE_WORKING_FORK -DHAVE_WORKING_VFORK -DHAVE_SYS_WAIT_H -DHAVE_USLEEP -DDAKOTA_F90 -DDAKOTA_HAVE_MPI -DHAVE_PECOS -DHAVE_SURFPACK -DDAKOTA_COLINY -DDAKOTA_UTILIB -DHAVE_ADAPTIVE_SAMPLING -DHAVE_CONMIN -DDAKOTA_DDACE -DHAVE_FSUDACE -DDAKOTA_HOPS -DHAVE_JEGA -DHAVE_NCSU -DHAVE_NL2SOL -DHAVE_OPTPP -DDAKOTA_OPTPP -DHAVE_PSUADE -DHAVE_AMPL"
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota_src -ldakota_src_fortran -lnidr -lteuchos -lpecos -lpecos_src -llhs -lmods -lmod -ldfftpack -lsparsegrid -lsurfpack -lsurfpack_fortran -lutilib -lcolin -linterfaces -lscolib -l3po -lpebbl -ltinyxml -lconmin -ldace -lanalyzer -lrandom -lsampling -lbose -lfsudace -lhopspack -ljega -ljega_fe -lmoga -lsoga -leutils -lutilities -lncsuopt -lcport -loptpp -lpsuade -lamplsolver -L$BOOST_ROOT/lib -lboost_signals -lboost_regex -lboost_filesystem -lboost_system "
++				else
++					AC_MSG_ERROR([Dakota version not found or version ($DAKOTA_VERSION) not supported!]);
++				fi
++				fi
++				fi
++			;;
++			*darwin*)
++				if      test x$DAKOTA_VERSION = x4.2 || test x$DAKOTA_VERSION = x4.2+; then
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -lfftw3 -llhs -levidence -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -lopt -lpsuade -lnewmat -lncsuopt -lgsl -lquadrature -lcoliny -lcolin -lpebbl -lutilib -l3po -lnappspack -lappspack -lconveyor -lshared -lcdd -lamplsolver" 
++					dnl DAKOTALIB+= "-lgslcblas -L/usr/lib -lblas -llapack"
++				else if test x$DAKOTA_VERSION = x5.1 || test x$DAKOTA_VERSION = x5.2; then
++					DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -llhs -lsparsegrid -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -loptpp -lpsuade -lncsuopt -lcolin -linterfaces -lmomh -lscolib -lpebbl -ltinyxml -lutilib -l3po -lhopspack -lnidr -lamplsolver -lboost_signals -lboost_regex -lboost_filesystem -lboost_system"
++					dnl DAKOTALIB+= "-lgslcblas -L/usr/lib -lblas -llapack"
++				else
++					AC_MSG_ERROR([Dakota version not found or version ($DAKOTA_VERSION) not supported!]);
++				fi
++				fi
++			;;
++		esac
++		AC_DEFINE([_HAVE_DAKOTA_],[1],[with Dakota in ISSM src])
++
++		case $DAKOTA_VERSION in
++			@<:@1-9@:>@.@<:@0-9@:>@.@<:@0-9@:>@)
++				DAKOTA_MAJOR=`echo $DAKOTA_VERSION | sed -e 's/^\(@<:@0-9@:>@*\)\..*/\1/'`
++				DAKOTA_MINOR=`echo $DAKOTA_VERSION | sed -e 's/^@<:@0-9@:>@*\.\(@<:@0-9@:>@*\)\..*/\1/'`
++				DAKOTA_BUILD=`echo $DAKOTA_VERSION | sed -e 's/^@<:@0-9@:>@*\.@<:@0-9@:>@*\.\(@<:@0-9@:>@*\).*/\1/'`
++			;;
++			@<:@1-9@:>@.@<:@0-9@:>@)
++				DAKOTA_MAJOR=`echo $DAKOTA_VERSION | sed -e 's/^\(@<:@0-9@:>@*\)\..*/\1/'`
++				DAKOTA_MINOR=`echo $DAKOTA_VERSION | sed -e 's/^@<:@0-9@:>@*\.\(@<:@0-9@:>@*\).*/\1/'`
++				DAKOTA_BUILD=0
++			;;
++			@<:@1-9@:>@.@<:@0-9@:>@+)
++				DAKOTA_MAJOR=`echo $DAKOTA_VERSION | sed -e 's/^\(@<:@0-9@:>@*\)\..*/\1/'`
++				DAKOTA_MINOR=`echo $DAKOTA_VERSION | sed -e 's/^@<:@0-9@:>@*\.\(@<:@0-9@:>@*\).*/\1/'`
++				DAKOTA_BUILD=0
++			;;
++			*)
++				AC_MSG_ERROR([Dakota version ($DAKOTA_VERSION) not supported!]);
++		   ;;
++		esac
++		AC_MSG_CHECKING(for dakota major version)
++		AC_MSG_RESULT($DAKOTA_MAJOR)
++		AC_DEFINE_UNQUOTED([_DAKOTA_MAJOR_],$DAKOTA_MAJOR,[Dakota major version number])
++		AC_MSG_CHECKING(for dakota minor version)
++		AC_MSG_RESULT($DAKOTA_MINOR)
++		AC_DEFINE_UNQUOTED([_DAKOTA_MINOR_],$DAKOTA_MINOR,[Dakota minor version number])
++		AC_MSG_CHECKING(for dakota build version)
++		AC_MSG_RESULT($DAKOTA_BUILD)
++		AC_DEFINE_UNQUOTED([_DAKOTA_BUILD_],$DAKOTA_BUILD,[Dakota build version number])
++
++		AC_SUBST([DAKOTAINCL])
++		AC_SUBST([DAKOTAFLAGS])
++		AC_SUBST([DAKOTALIB])
++
++	else
++		HAVE_DAKOTA=no
++		AC_MSG_RESULT($HAVE_DAKOTA)
++	fi
++
++	AM_CONDITIONAL([DAKOTA], [test x$HAVE_DAKOTA = xyes])
++	dnl }}}
++	dnl python{{{
++	AC_ARG_WITH([python-dir],
++		AS_HELP_STRING([--with-python-dir=DIR], [python root directory.]),
++		[PYTHON_ROOT=$withval],
++		[PYTHON_ROOT=""]) 
++
++	AC_ARG_WITH([python-include-dir],
++		AS_HELP_STRING([--with-python-include-dir=DIR], [python include directory.]),
++		[PYTHON_INCL=$withval],
++		[PYTHON_INCL="$PYTHON_ROOT/include"]) 
++
++	AC_ARG_WITH([python-lib-dir],
++		AS_HELP_STRING([--with-python-lib-dir=DIR], [python lib directory.]),
++		[PYTHON_LIB=$withval],
++		[PYTHON_LIB="$PYTHON_ROOT/lib"]) 
++
++	AC_MSG_CHECKING(for python)
++	if test -d "$PYTHON_ROOT"; then
++		HAVE_PYTHON="yes"
++		AC_DEFINE([_HAVE_PYTHON_],[1],[with Python in ISSM src])
++	else
++		HAVE_PYTHON=no
++	fi
++	AC_MSG_RESULT($HAVE_PYTHON)
++
++	dnl get python version
++	if test x$HAVE_PYTHON = xyes; then
++		AC_MSG_CHECKING(for python version)
++		dnl Query Python for its version number.  Getting [:3] seems to be
++		dnl the best way to do this; it's what "site.py" does in the standard
++		dnl library.
++		PYTHON_VERSION=$($PYTHON_ROOT/bin/python -c "import sys; print sys.version[[:3]]")
++		AC_MSG_RESULT($PYTHON_VERSION)
++
++		dnl recover major: 
++		PYTHON_MAJOR=${PYTHON_VERSION%.*}
++		if test x$PYTHON_MAJOR = x3; then
++			dnl are we running python 3?
++			HAVE_PYTHON3="yes"
++		else
++			HAVE_PYTHON3="no"
++		fi
++		AC_DEFINE_UNQUOTED([_PYTHON_MAJOR_],$PYTHON_MAJOR,[python version major])
++
++		PYTHONINCL="-I$PYTHON_INCL"
++		PYTHONLIB="-L$PYTHON_LIB -lpython$PYTHON_VERSION"
++		PYTHONEXT=.so
++
++		case "${host_os}" in
++			*cygwin*)
++			PYTHONLINK="-shared"
++			;;
++			*linux*)
++			PYTHONLINK="-shared"
++			;;
++			*darwin*)
++			PYTHONLINK="-dynamiclib"
++			;;
++		esac
++
++		AC_SUBST([PYTHONINCL])
++		AC_SUBST([PYTHONLIB])
++		PYTHONWRAPPEREXT=$PYTHONEXT
++		AC_SUBST([PYTHONWRAPPEREXT])
++		AC_SUBST([PYTHONLINK])
++	fi
++	AM_CONDITIONAL([PYTHON], [test x$HAVE_PYTHON = xyes])
++	AM_CONDITIONAL([PYTHON3], [test x$HAVE_PYTHON3 = xyes])
++	dnl }}}
++	dnl python-numpy{{{
++	AC_ARG_WITH([python-numpy-dir],
++	  AS_HELP_STRING([--with-python-numpy-dir=DIR], [python-numpy root directory.]),
++	  [PYTHON_NUMPY_ROOT=$withval],[PYTHON_NUMPY_ROOT=""]) 
++	AC_MSG_CHECKING(for python-numpy)
++	
++	if test -d "$PYTHON_NUMPY_ROOT"; then
++		dnl defaults
++		HAVE_PYTHON_NUMPY=yes
++		PYTHON_NUMPYINCL="-I$PYTHON_NUMPY_ROOT -I$PYTHON_NUMPY_ROOT/core/include/numpy"
++
++		AC_DEFINE([_HAVE_PYTHON_NUMPY_],[1],[with Python-Numpy in ISSM src])
++		AC_SUBST([PYTHON_NUMPYINCL])
++	else
++		HAVE_PYTHON_NUMPY=no
++	fi
++	AC_MSG_RESULT($HAVE_PYTHON_NUMPY)
++	dnl }}}
++	dnl chaco{{{
++	AC_ARG_WITH([chaco-dir],
++	  AS_HELP_STRING([--with-chaco-dir=DIR], [chaco root directory.]),
++	  [CHACO_ROOT=$withval],[CHACO_ROOT=""]) 
++	AC_MSG_CHECKING(for chaco)
++	
++	if test -d "$CHACO_ROOT"; then
++
++		dnl defaults
++		HAVE_CHACO=yes
++		CHACOINCL=-I$CHACO_ROOT/include
++		CHACOLIB="-L$CHACO_ROOT/lib -lchacominusblas"
++
++		AC_DEFINE([_HAVE_CHACO_],[1],[with Chaco in ISSM src])
++		AC_SUBST([CHACOINCL])
++		AC_SUBST([CHACOLIB])
++
++	else
++		HAVE_CHACO=no
++	fi
++	AC_MSG_RESULT($HAVE_CHACO)
++	dnl }}}
++	dnl scotch{{{
++	AC_ARG_WITH([scotch-dir],
++	  AS_HELP_STRING([--with-scotch-dir=DIR], [scotch root directory.]),
++	  [SCOTCH_ROOT=$withval],[SCOTCH_ROOT=""]) 
++	AC_MSG_CHECKING(for scotch)
++	
++	if test -d "$SCOTCH_ROOT"; then
++
++		dnl defaults
++		HAVE_SCOTCH=yes
++		SCOTCHINCL="-DNOFILEIO -I$SCOTCH_ROOT/include -DSCOTCH_VERSION=\\\"UNKNOWN\\\""
++		SCOTCHLIB="-L$SCOTCH_ROOT/lib -lnfioscotch -lnfioscotcherr -lnfioscotcherrexit -lscotchmetis"
++
++		AC_DEFINE([_HAVE_SCOTCH_],[1],[with Scotch in ISSM src])
++		AC_SUBST([SCOTCHINCL])
++		AC_SUBST([SCOTCHLIB])
++
++	else
++		HAVE_SCOTCH=no
++	fi
++	AC_MSG_RESULT($HAVE_SCOTCH)
++	dnl }}}
++	dnl adolc{{{
++	AC_ARG_WITH([adolc-dir],
++		AS_HELP_STRING([--with-adolc-dir=DIR], [adolc root directory.]),
++		[ADOLC_ROOT=$withval],[ADOLC_ROOT="no"]) 
++	AC_MSG_CHECKING(for adolc)
++
++	if test "x$ADOLC_ROOT" = "xno"; then
++		HAVE_ADOLC=no
++	else
++		if test -d "$ADOLC_ROOT"; then
++
++			dnl defaults
++			HAVE_ADOLC=yes
++			ADOLCINCL="-I$ADOLC_ROOT/include"
++			ADOLCLIB="-L$ADOLC_ROOT/lib64 -ladolc"
++
++			AC_DEFINE([_HAVE_ADOLC_],[1],[with adolc in ISSM src])
++			AC_SUBST([ADOLCINCL])
++			AC_SUBST([ADOLCLIB])
++
++		else
++			echo  "Specified directory does not exist!"
++			exit 1
++		fi
++	fi
++	AM_CONDITIONAL([ADOLC], [test x$HAVE_ADOLC = xyes])
++	AC_MSG_RESULT($HAVE_ADOLC)
++	dnl }}}
++	dnl adolc-version{{{
++	AC_ARG_WITH([adolc-version],
++		AS_HELP_STRING([--with-adolc-version=number], [adolc version.]),
++		[ADOLC_VERSION=$withval],[ADOLC_VERSION=2]) 
++	AC_MSG_CHECKING(for adolc-version) 
++
++	AC_DEFINE_UNQUOTED([_ADOLC_VERSION_],$ADOLC_VERSION,[ADOLC version])
++	AC_MSG_RESULT($ADOLC_VERSION)
++	dnl }}}
++	dnl adic2{{{
++	AC_ARG_WITH([adic2-dir],
++	  AS_HELP_STRING([--with-adic2-dir=DIR], [adic2 root directory.]),
++	  [ADIC2_ROOT=$withval],[ADIC2_ROOT="no"]) 
++	AC_MSG_CHECKING(for adic2)
++
++	if test "x$ADIC2_ROOT" = "xno"; then
++		HAVE_ADIC2=no
++	else
++		if test -d "$ADIC2_ROOT"; then
++
++			dnl defaults
++			HAVE_ADIC2=yes
++			ADIC2INCL="-DADIC2_DENSE -I$ADIC2_ROOT/include -I$ADIC2_ROOT/share/runtime_dense/"
++			ADIC2LIB=""
++
++			AC_DEFINE([_HAVE_ADIC2_],[1],[with adic2 in ISSM src])
++			AC_SUBST([ADIC2INCL])
++			AC_SUBST([ADIC2LIB])
++
++		else
++			echo  "Specified directory does not exist!"
++			exit 1
++		fi
++	fi
++	AM_CONDITIONAL([ADIC2], [test x$HAVE_ADIC2 = xyes])
++	AC_MSG_RESULT($HAVE_ADIC2)
++	dnl }}}
++	dnl gsl{{{
++	AC_ARG_WITH([gsl-dir],
++	  AS_HELP_STRING([--with-gsl-dir=DIR], [gsl root directory.]),
++	  [GSL_ROOT=$withval],[GSL_ROOT=""]) 
++	AC_MSG_CHECKING(for gsl)
++	
++	if test -d "$GSL_ROOT"; then
++
++		dnl defaults
++		HAVE_GSL=yes
++		GSLINCL="-I$GSL_ROOT/include"
++		GSLLIB="-dy -L$GSL_ROOT/lib -lgsl -lgslcblas -lm"
++
++		AC_DEFINE([_HAVE_GSL_],[1],[with gsl in ISSM src])
++		AC_SUBST([GSLINCL])
++		AC_SUBST([GSLLIB])
++
++	else
++		HAVE_GSL=no
++	fi
++	AM_CONDITIONAL([GSL], [test x$HAVE_GSL = xyes])
++	AC_MSG_RESULT($HAVE_GSL)
++	dnl }}}
++	dnl rose{{{
++	AC_ARG_WITH([rose-dir],
++	  AS_HELP_STRING([--with-rose-dir=DIR], [rose root directory.]),
++	  [ROSE_ROOT=$withval],[ROSE_ROOT=""]) 
++	AC_MSG_CHECKING(for rose)
++	
++	if test -d "$ROSE_ROOT"; then
++
++		dnl defaults
++		HAVE_ROSE=yes
++		ROSEINCL="-I$ROSE_ROOT/include"
++		ROSELIB=""
++
++		AC_DEFINE([_HAVE_ROSE_],[1],[with rose in ISSM src])
++		AC_SUBST([ROSEINCL])
++		AC_SUBST([ROSELIB])
++
++	else
++		HAVE_ROSE=no
++	fi
++	AM_CONDITIONAL([ROSE], [test x$HAVE_ROSE = xyes])
++	AC_MSG_RESULT($HAVE_ROSE)
++	dnl }}}
++	dnl mpi{{{
++	AC_MSG_CHECKING(for mpi)
++	
++	AC_ARG_WITH([mpi-include],
++	  AS_HELP_STRING([--with-mpi-include=DIR],[mpi include directory, necessary for parallel build]),
++	  [MPI_INCLUDE=$withval],[MPI_INCLUDE=""])
++
++	AC_ARG_WITH([mpi-libdir],
++	  AS_HELP_STRING([--with-mpi-libdir=DIR],[mpi lib directory, necessary for parallel build]),
++	  [MPI_LIBDIR=$withval],[MPI_LIBDIR=""])
++
++	AC_ARG_WITH([mpi-libflags],
++	  AS_HELP_STRING([--with-mpi-libflags=LIBS],[mpi libraries to be used, necessary for parallel build]),
++	  [MPI_LIBFLAGS=$withval],[MPI_LIBFLAGS=""])
++
++	
++	if test -z "$MPI_INCLUDE" ; then
++		HAVE_MPI=no
++	else
++		HAVE_MPI=yes
++
++		dnl Processing for windows
++		if  test x$VENDOR = xintel-win7-32; then
++			MPI_LIBDIR=`cygpath -m $MPI_LIBDIR`
++			MPIINCL=`cygpath -m $MPI_INCLUDE`
++		elif test x$VENDOR = xintel-win7-64; then
++			MPI_LIBDIR=`cygpath -m $MPI_LIBDIR`
++			MPI_INCLUDE=`cygpath -m $MPI_INCLUDE`
++		fi
++
++		if test -z "$MPI_LIBDIR"; then
++			MPIINCL=-I"$MPI_INCLUDE"
++			MPILIB="$MPI_LIBFLAGS"
++		else
++			MPIINCL=-I"$MPI_INCLUDE"
++			MPILIB="-L$MPI_LIBDIR $MPI_LIBFLAGS"
++		fi
++		AC_DEFINE([_HAVE_MPI_],[1],[with Mpi in ISSM src])
++		AC_DEFINE([HAVE_MPI],[1],[Mpi Flag for Dakota (DO NOT REMOVE)])
++		AC_SUBST([MPIINCL])
++		AC_SUBST([MPILIB])
++	fi
++
++	AM_CONDITIONAL([MPI], [test x$HAVE_MPI = xyes])
++	AC_MSG_RESULT($HAVE_MPI)
++	dnl }}}
++	dnl petsc{{{
++	AC_ARG_WITH([petsc-dir],
++	  AS_HELP_STRING([--with-petsc-dir=DIR],[PETSc root directory, necessary for parallel build]),
++	  [PETSC_ROOT=$withval],[PETSC_ROOT=""])
++		
++	if test -d "$PETSC_ROOT"; then
++		AC_MSG_CHECKING(for petsc version)
++		PETSC_MAJOR=`cat $PETSC_ROOT/include/petscversion.h | grep "#define PETSC_VERSION_MAJOR" | sed 's/#define PETSC_VERSION_MAJOR//' | sed 's/ //g'`
++		PETSC_MINOR=`cat $PETSC_ROOT/include/petscversion.h | grep "#define PETSC_VERSION_MINOR" | sed 's/#define PETSC_VERSION_MINOR//' | sed 's/ //g'`
++		AC_DEFINE_UNQUOTED([_PETSC_MAJOR_],$PETSC_MAJOR,[PETSc version major])
++		AC_DEFINE_UNQUOTED([_PETSC_MINOR_],$PETSC_MINOR,[PETSc version minor])
++		AC_MSG_RESULT($PETSC_MAJOR.$PETSC_MINOR)
++
++		PETSC_VERSION_DATE_HG=`cat $PETSC_ROOT/include/petscversion.h | grep "#define PETSC_VERSION_DATE_HG" | sed 's/#define PETSC_VERSION_DATE_HG//' | sed 's/ //g' | sed -e 's/\"//g' `
++		PETSC_RELEASE=`cat $PETSC_ROOT/include/petscversion.h | grep "#define PETSC_VERSION_RELEASE" | sed 's/#define PETSC_VERSION_RELEASE//' | sed 's/ //g'`
++
++		AC_MSG_CHECKING(whether petsc is the development version)
++		dnl if test x$PETSC_VERSION_DATE_HG = xunknown; then
++		if test "$PETSC_RELEASE" = "0"; then
++		   AC_DEFINE([_HAVE_PETSCDEV_],[1],[with PETSc-dev])
++			AC_MSG_RESULT(yes)
++		else
++			AC_MSG_RESULT(no)
++		fi
++	fi
++	
++	AC_ARG_WITH([petsc-arch],
++	  AS_HELP_STRING([--with-petsc-arch=DIR],[PETSc arch , necessary for parallel build]),
++	  [PETSC_ARCH=$withval],[PETSC_ARCH=""])
++
++	AC_MSG_CHECKING(for petsc headers and libraries in $PETSC_ROOT for architecture $PETSC_ARCH)
++	
++	dnl To ge PETSc's libraries:
++	dnl cd externalpackages/petsc/src
++	dnl make getlinklibs
++	if test -d "$PETSC_ROOT"; then
++
++	 PETSCINCL=" -I$PETSC_ROOT/include"
++	 dnl Add other location (not needed anymore since at least PETSc 3.0)
++	 if test "x$PETSC_ARCH" != "x" && test -d "$PETSC_ROOT/$PETSC_ARCH/include"; then
++	  PETSCINCL+=" $PETSC_ROOT/$PETSC_ARCH/include"
++	 fi
++	 if test "x$PETSC_ARCH" != "x" && test -d "$PETSC_ROOT/include/$PETSC_ARCH"; then
++	  PETSCINCL+=" $PETSC_ROOT/include/$PETSC_ARCH"
++	 fi
++	
++	 case "${host_os}" in
++			*cygwin*)
++			if test $PETSC_MAJOR -lt 3 ; then
++				PETSCLIB=-Wl,/LIBPATH:`cygpath -w $PETSC_ROOT/lib`  -Wl,libpetscksp.lib  -Wl,libpetscdm.lib  -Wl,libpetscmat.lib  -Wl,libpetscvec.lib  -Wl,libpetscsnes.lib  -Wl,libpetscts.lib  -Wl,libmpiuni.lib  -Wl,libpetsc.lib
++			else
++				PETSCLIB="-L$PETSC_ROOT/lib  -Wl,libpetsc.lib"
++				if test $PETSC_MAJOR -gt 3 || test $PETSC_MINOR -ge 3; then PETSCLIB+="  -Wl,libmetis.lib"; fi
++			fi
++			;;
++			*linux*)
++			if test $PETSC_MAJOR -lt 3 ; then
++				PETSCLIB="-L$PETSC_ROOT/lib -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsnes -lpetscts -lmpiuni -lpetsc"
++			else
++				PETSCLIB="-L$PETSC_ROOT/lib -lpetsc -ldl"
++				if test $PETSC_MAJOR -gt 3 || test $PETSC_MINOR -ge 3; then PETSCLIB+=" -lmetis"; fi
++			fi
++			;;
++			*darwin*)
++			if test $PETSC_MAJOR -lt 3 ; then
++				PETSCLIB="-L$PETSC_ROOT/lib -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsnes -lpetscts -lpetsc"
++			else
++				PETSCLIB="-L$PETSC_ROOT/lib -lpetsc"
++				if test $PETSC_MAJOR -gt 3 || test $PETSC_MINOR -ge 3; then PETSCLIB+=" -lmetis"; fi
++			fi
++			;;
++		esac
++		AC_DEFINE([_HAVE_PETSC_],[1],[with PETSc in ISSM src])
++		AC_SUBST([PETSCINCL])
++		AC_SUBST([PETSCLIB])
++		HAVE_PETSC=yes
++	else
++		HAVE_PETSC=no
++	fi
++	
++	AM_CONDITIONAL([PETSC], [test x$HAVE_PETSC = xyes])
++	AC_MSG_RESULT($HAVE_PETSC)
++	dnl }}}
++	dnl metis{{{
++	if test "$HAVE_PETSC" = "yes" && test "x$PETSC_MAJOR" = "x3" && test $PETSC_MINOR -ge 3; then
++
++		dnl in petsc >=3.3, metis is provided
++		HAVE_METIS="yes"
++		AC_DEFINE([_METIS_VERSION_],[5],[ Metis version number])
++		AC_DEFINE([_HAVE_METIS_],[1],[with Metis in ISSM src])
++	else
++		AC_ARG_WITH([metis-dir],
++		  AS_HELP_STRING([--with-metis-dir=DIR],[metis root directory. necessary for serial build]),
++		  [METIS_ROOT=$withval],[METIS_ROOT=""])
++
++		AC_MSG_CHECKING(for metis headers and libraries in $METIS_ROOT)
++
++		if test -d "$METIS_ROOT"; then
++
++			dnl first figure out version of metis: does the VERSION file exist?
++			if test -e "$METIS_ROOT/VERSION"; then
++				METIS_VERSION=4
++			else
++				METIS_VERSION=5
++			fi
++
++			dnl defaults
++			HAVE_METIS=yes
++
++			if test "$METIS_VERSION" = "4" ; then
++					
++				METISINCL=-I"$METIS_ROOT/Lib" 
++				case "${host_os}" in
++					*cygwin*)
++					METISLIB="-L$METIS_ROOT -Wl,libmetis.lib"
++					;;
++					*linux*)
++					METISLIB=-L"$METIS_ROOT/ -lmetis"
++					;;
++					*darwin*)
++					METISLIB=-L"$METIS_ROOT/ -lmetis"
++					;;
++				esac
++
++					AC_DEFINE([_METIS_VERSION_],[4],[ Metis version number])
++			fi
++			if test "$METIS_VERSION" = "5" ; then
++		
++				case "${host_os}" in
++					*cygwin*)
++					METISLIB="-L$METIS_ROOT libmetis.lib"
++					;;
++					*linux*)
++					METISLIB=-L"$METIS_ROOT/lib -lmetis"
++					;;
++					*darwin*)
++					METISLIB=-L"$METIS_ROOT/lib -lmetis"
++					;;
++				esac
++
++				METISINCL=-I"$METIS_ROOT/include" 
++				AC_DEFINE([_METIS_VERSION_],[5],[ Metis version number])
++			fi
++
++			AC_DEFINE([_HAVE_METIS_],[1],[with Metis in ISSM src])
++			AC_SUBST([METISINCL])
++			AC_SUBST([METISLIB])
++		else
++			HAVE_METIS=no
++		fi
++		AC_MSG_RESULT($HAVE_METIS)
++	fi
++	AM_CONDITIONAL([METIS], [test x$HAVE_METIS = xyes])
++	dnl }}}
++	dnl tao{{{
++	AC_ARG_WITH([tao-dir],
++		AS_HELP_STRING([--with-tao-dir=DIR], [tao root directory.]),
++		[TAO_ROOT=$withval],[TAO_ROOT=""]) 
++	AC_MSG_CHECKING(for tao)
++
++	if test -d "$TAO_ROOT"; then
++
++	  HAVE_TAO=yes
++	  TAOINCL="-I$TAO_ROOT/ -I$TAO_ROOT/include -I$TAO_ROOT/bmake/ "
++	  TAOLIB="-L$TAO_ROOT/lib -ltao -lpetsc"
++
++	  AC_DEFINE([_HAVE_TAO_],[1],[with Tao in ISSM src])
++	  AC_SUBST([TAOINCL])
++	  AC_SUBST([TAOLIB])
++	else
++		HAVE_TAO=no
++	fi
++	AC_MSG_RESULT($HAVE_TAO)
++	dnl }}}
++	dnl slepc{{{
++	AC_ARG_WITH([slepc-dir],
++	  AS_HELP_STRING([--with-slepc-dir=DIR],[slepc root directory]),
++	  [SLEPC_ROOT=$withval],[SLEPC_ROOT=""])
++			  
++	AC_MSG_CHECKING(for slepc headers and libraries in $SLEPC_ROOT)
++	if test -d "$SLEPC_ROOT"; then
++		HAVE_SLEPC=yes
++		SLEPCINCL=-I"$SLEPC_ROOT/include"
++		SLEPCLIB=-L"$SLEPC_ROOT/lib/ -lslepc"
++
++		AC_DEFINE([_HAVE_SLEPC_],[1],[with Slepc in ISSM src])
++		AC_SUBST([SLEPCINCL])
++		AC_SUBST([SLEPCLIB])
++	else
++		HAVE_SLEPC=no
++	fi
++	AC_MSG_RESULT($HAVE_SLEPC)
++	dnl }}}
++	dnl shapelib{{{
++	AC_ARG_WITH([shapelib-dir],
++	  AS_HELP_STRING([--with-shapelib-dir=DIR], [shapelib root directory]),
++	  [SHAPELIB_ROOT=$withval],[SHAPELIB_ROOT=""])
++			  
++	AC_MSG_CHECKING(for shapelib headers and libraries in $SHAPELIB_ROOT)
++	if test -d "$SHAPELIB_ROOT"; then
++
++		dnl defaults
++		HAVE_SHAPELIB=yes
++		SHAPELIBINCL=-I"$SHAPELIB_ROOT/include"
++		SHAPELIBLIB=-L"$SHAPELIB_ROOT/lib/ -lshape"
++
++		AC_DEFINE([_HAVE_SHAPELIB_],[1],[with Shapelib in ISSM src])
++		AC_SUBST([SHAPELIBINCL])
++		AC_SUBST([SHAPELIBLIB])
++	else
++		HAVE_SHAPELIB=no
++	fi
++	AC_MSG_RESULT($HAVE_SHAPELIB)
++	dnl }}}
++	dnl scalapack{{{
++	AC_ARG_WITH([scalapack-dir],
++	  AS_HELP_STRING([--with-scalapack-dir=DIR],[scalapack root directory]),
++	  [SCALAPACK_ROOT=$withval],[SCALAPACK_ROOT=""])
++			  
++	AC_MSG_CHECKING(for scalapack headers and libraries in $SCALAPACK_ROOT)
++	if test -d "$SCALAPACK_ROOT"; then
++
++		dnl defaults
++		HAVE_SCALAPACK=yes
++		if test x$VENDOR = xintel-discover; then
++		 SCALAPACKLIB=-L"$SCALAPACK_ROOT/ -lmkl_scalapack_lp64"
++		else
++		 SCALAPACKLIB=-L"$SCALAPACK_ROOT/ -lscalapack"
++		fi
++
++		AC_DEFINE([_HAVE_SCALAPACK_],[1],[with Scalapack in ISSM src])
++		AC_SUBST([SCALAPACKLIB])
++	else
++		HAVE_SCALAPACK=no
++	fi
++	AC_MSG_RESULT($HAVE_SCALAPACK)
++	dnl }}}
++	dnl blas{{{
++	AC_ARG_WITH([blas-lapack-dir],
++	  AS_HELP_STRING([--with-blas-lapack-dir=DIR],[blas-lapack root directory]),
++	  [BLASLAPACK_ROOT=$withval],[BLASLAPACK_ROOT=""])
++			  
++	AC_MSG_CHECKING(for blas and lapack headers and libraries in $BLASLAPACK_ROOT)
++	if test -d "$BLASLAPACK_ROOT"; then
++
++		dnl defaults
++		HAVE_BLASLAPACK=yes
++		BLASLAPACKINCL=""
++	
++		if test x$VENDOR = xintel-discover; then
++		 BLASLAPACKLIB=-L"$BLASLAPACK_ROOT -lmkl_lapack -lmkl -lguide -lpthread"
++		else
++		dnl: branch on whether we are running on windows or linux.
++		case "${host_os}" in
++			*cygwin*)
++			BLASLAPACKLIB="-L`cygpath -m $BLASLAPACK_ROOT` -Wl,libf2cblas.lib  -Wl,libf2clapack.lib"
++			;;
++			*linux*)
++			BLASLAPACKLIB=-L"$BLASLAPACK_ROOT/lib -lflapack -lfblas " 
++			;;
++			*darwin*)
++			BLASLAPACKLIB=-L"$BLASLAPACK_ROOT/lib -lflapack -lfblas " 
++			;;
++		esac
++		fi
++
++		AC_DEFINE([_HAVE_BLASLAPACK_],[1],[with blas lapack in ISSM src])
++		AC_SUBST([BLASLAPACKLIB])
++		AC_SUBST([BLASLAPACKINCL])
++	else
++		HAVE_BLASLAPACK=no
++	fi
++	AC_MSG_RESULT($HAVE_BLASLAPACK)
++	dnl }}}
++	dnl mkl{{{
++	AC_ARG_WITH([mkl-dir],
++	  AS_HELP_STRING([--with-mkl-dir=DIR],[mkl root directory]),
++	  [MKL_ROOT=$withval],[MKL_ROOT=""])
++			  
++	AC_MSG_CHECKING(for mkl headers and libraries in $MKL_ROOT)
++	if test -d "$MKL_ROOT"; then
++
++		dnl defaults
++		HAVE_MKL=yes
++		MKLINCL=""
++		if test x$VENDOR = xintel-pleiades; then
++		 MKLLIB=-L"$MKL_ROOT -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread"
++		else
++		 MKLLIB=-L"$MKL_ROOT -lmkl -lmkl_lapack -lmkl_scalapack_ilp64 -lmkl_blacs_sgimpt_ilp64 -lguide -lpthread"
++		fi
++		AC_DEFINE([_HAVE_MKL_],[1],[with mkl in ISSM src])
++		AC_SUBST([MKLLIB])
++		AC_SUBST([MKLINCL])
++	else
++		HAVE_MKL=no
++	fi
++	AC_MSG_RESULT($HAVE_MKL)
++	dnl }}}
++	dnl plapack{{{
++	AC_MSG_CHECKING(for plapack)
++	
++	AC_ARG_WITH([plapack-lib],
++	  AS_HELP_STRING([--with-plapack-lib = lib],[plapack library]),
++	  [PLAPACK_LIB=$withval],[PLAPACK_LIB=""])
++	
++	AC_ARG_WITH([plapack-include],
++			  AS_HELP_STRING([--with-plapack-include = include],
++							 [plapack include ]),
++			  [PLAPACK_INCLUDE=$withval],[PLAPACK_INCLUDE=""])
++	  
++	if test -n "$PLAPACK_LIB"; then
++		if test -n "$PLAPACK_INCLUDE"; then
++		
++			dnl defaults
++			HAVE_PLAPACK=yes
++			PLAPACKINCL="$PLAPACK_INCLUDE"
++			PLAPACKLIB="$PLAPACK_LIB"
++
++			AC_DEFINE([_HAVE_PLAPACK_],[1],[with Plapack in ISSM src])
++			AC_SUBST([PLAPACKINCL])
++			AC_SUBST([PLAPACKLIB])
++		else
++			HAVE_PLAPACK=no
++		fi
++	else
++		HAVE_PLAPACK=no
++	fi
++	AC_MSG_RESULT($HAVE_PLAPACK)
++	dnl }}}
++	dnl mumps{{{
++	AC_ARG_WITH([mumps-dir],
++	  AS_HELP_STRING([--with-mumps-dir=DIR],[mumps root directory]),
++	  [MUMPS_ROOT=$withval],[MUMPS_ROOT=""])
++			  
++	AC_MSG_CHECKING(for mumps headers and libraries in $MUMPS_ROOT)
++	if test -d "$MUMPS_ROOT"; then
++
++		dnl defaults
++		HAVE_MUMPS=yes
++		MUMPSINCL=-I"$MUMPS_ROOT/include"
++		if test "$PETSC_MAJOR" = "2" ; then
++		MUMPSLIB=-L"$MUMPS_ROOT/lib -ldmumps -lcmumps  -lpord "
++		else
++		dnl MUMPSLIB=-L"$MUMPS_ROOT/lib -ldmumps -lcmumps  -lmumps_common -lpord -lparmetis -lzmumps"
++		MUMPSLIB=-L"$MUMPS_ROOT/lib -ldmumps -lcmumps  -lmumps_common -lpord -lparmetis"
++		fi
++
++		AC_DEFINE([_HAVE_MUMPS_],[1],[with Mumps in ISSM src])
++		AC_SUBST([MUMPSINCL])
++		AC_SUBST([MUMPSLIB])
++	else
++		HAVE_MUMPS=no
++	fi
++	AM_CONDITIONAL([MUMPS], [test x$HAVE_MUMPS = xyes])
++	AC_MSG_RESULT($HAVE_MUMPS)
++	dnl }}}
++	dnl blacs{{{
++	AC_ARG_WITH([blacs-dir],
++		AS_HELP_STRING([--with-blacs-dir=DIR],[blacs root directory]),
++			  [BLACS_ROOT=$withval],[BLACS_ROOT=""])
++			  
++	AC_MSG_CHECKING(for blacs headers and libraries in $BLACS_ROOT)
++	if test -d "$BLACS_ROOT"; then
++
++		dnl defaults
++		HAVE_BLACS=yes
++		BLACSINCL=""
++		if test x$VENDOR = xintel-discover; then
++		 BLACSLIB=-L"$BLACS_ROOT/ -lmkl_blacs_intelmpi_lp64"
++		else
++		 BLACSLIB=-L"$BLACS_ROOT/ -lblacs"
++		fi
++        
++		AC_DEFINE([_HAVE_BLACS_],[1],[with Blacs in ISSM src])
++		AC_SUBST([BLACSINCL])
++		AC_SUBST([BLACSLIB])
++	else
++		HAVE_BLACS=no
++	fi
++	AC_MSG_RESULT($HAVE_BLACS)
++	dnl }}}
++	dnl hypre{{{
++	AC_ARG_WITH([hypre-dir],
++	  AS_HELP_STRING([--with-hypre-dir=DIR],[hypre root directory]),
++			  [HYPRE_ROOT=$withval],[HYPRE_ROOT=""])
++			  
++	AC_MSG_CHECKING(for hypre headers and libraries in $HYPRE_ROOT)
++	if test -d "$HYPRE_ROOT"; then
++
++		dnl defaults
++		HAVE_HYPRE=yes
++		HYPREINCL=""
++		HYPRELIB=-L"$HYPRE_ROOT/lib -lHYPRE"
++        
++		AC_DEFINE([_HAVE_HYPRE_],[1],[with Blacs in ISSM src])
++		AC_SUBST([HYPREINCL])
++		AC_SUBST([HYPRELIB])
++	else
++		HAVE_HYPRE=no
++	fi
++	AC_MSG_RESULT($HAVE_HYPRE)
++	dnl }}}
++	dnl prometheus{{{
++		AC_ARG_WITH([prometheus-dir],
++					AS_HELP_STRING([--with-prometheus-dir=DIR],[prometheus root directory]),
++					[PROMETHEUS_ROOT=$withval],[PROMETHEUS_ROOT=""])
++
++		  AC_MSG_CHECKING(for prometheus headers and libraries in $PROMETHEUS_ROOT)
++		  if test -d "$PROMETHEUS_ROOT"; then
++
++			dnl defaults
++			  HAVE_PROMETHEUS=yes
++			  PROMETHEUSINCL=-I"$PROMETHEUS_ROOT/include"
++			  PROMETHEUSLIB=-L"$PROMETHEUS_ROOT/lib -lpromfei -lprometheus -lparmetis"
++
++			  AC_DEFINE([_HAVE_PROMETHEUS_],[1],[with Prometheus in ISSM src])
++			  AC_SUBST([PROMETHEUSINCL])
++			  AC_SUBST([PROMETHEUSLIB])
++		  else
++				HAVE_PROMETHEUS=no
++			fi
++			AC_MSG_RESULT($HAVE_PROMETHEUS)
++		dnl }}}
++dnl spai{{{
++	AC_ARG_WITH([spai-dir],
++				AS_HELP_STRING([--with-spai-dir=DIR],[spai root directory]),
++				[SPAI_ROOT=$withval],[SPAI_ROOT=""])
++
++	  AC_MSG_CHECKING(for spai headers and libraries in $SPAI_ROOT)
++	  if test -d "$SPAI_ROOT"; then
++
++		dnl defaults
++		  HAVE_SPAI=yes
++		  SPAIINCL=-I"$SPAI_ROOT/include"
++		  SPAILIB=-L"$SPAI_ROOT/lib -lspai"
++
++		  AC_DEFINE([_HAVE_SPAI_],[1],[with Spai in ISSM src])
++		  AC_SUBST([SPAIINCL])
++		  AC_SUBST([SPAILIB])
++	  else
++		HAVE_SPAI=no
++		  fi
++		  AC_MSG_RESULT($HAVE_SPAI)
++		  dnl }}}
++dnl superlu{{{ 
++	AC_ARG_WITH([superlu-dir],
++				AS_HELP_STRING([--with-superlu-dir=DIR],[superlu root directory]),
++				[SUPERLU_ROOT=$withval],[SUPERLU_ROOT=""])
++
++	  AC_MSG_CHECKING(for superlu headers and libraries in $SUPERLU_ROOT)
++	  if test -d "$SUPERLU_ROOT"; then
++
++		dnl defaults
++		  HAVE_SUPERLU=yes
++		  SUPERLUINCL=-I"$SUPERLU_ROOT/include"
++		  SUPERLULIB=-L"$SUPERLU_ROOT/lib -lsuperlu_4.3"
++
++		  AC_DEFINE([_HAVE_SUPERLU_],[1],[with Superlu in ISSM src])
++		  AC_SUBST([SUPERLUINCL])
++		  AC_SUBST([SUPERLULIB])
++	  else
++		HAVE_SUPERLU=no
++		  fi
++		  AC_MSG_RESULT($HAVE_SUPERLU)
++		  dnl }}}
++dnl spooles{{{ 
++	AC_ARG_WITH([spooles-dir],
++				AS_HELP_STRING([--with-spooles-dir=DIR],[spooles root directory]),
++				[SPOOLES_ROOT=$withval],[SPOOLES_ROOT=""])
++
++	  AC_MSG_CHECKING(for spooles headers and libraries in $SPOOLES_ROOT)
++	  if test -d "$SPOOLES_ROOT"; then
++
++		dnl defaults
++		  HAVE_SPOOLES=yes
++		  SPOOLESINCL=-I"$SPOOLES_ROOT/include"
++		  SPOOLESLIB=-L"$SPOOLES_ROOT/lib -lspooles"
++
++		  AC_DEFINE([_HAVE_SPOOLES_],[1],[with Spooles in ISSM src])
++		  AC_SUBST([SPOOLESINCL])
++		  AC_SUBST([SPOOLESLIB])
++	  else
++		HAVE_SPOOLES=no
++		  fi
++		  AC_MSG_RESULT($HAVE_SPOOLES)
++		  dnl }}}
++dnl pastix{{{ 
++	AC_ARG_WITH([pastix-dir],
++				AS_HELP_STRING([--with-pastix-dir=DIR],[pastix root directory]),
++				[PASTIX_ROOT=$withval],[PASTIX_ROOT=""])
++
++	  AC_MSG_CHECKING(for pastix headers and libraries in $PASTIX_ROOT)
++	  if test -d "$PASTIX_ROOT"; then
++
++		dnl defaults
++		  HAVE_PASTIX=yes
++		  PASTIXINCL=-I"$PASTIX_ROOT/include"
++		  PASTIXLIB=-L"$PASTIX_ROOT/lib -lpastix_XXbit_mpi_smp_nobubble_int32_simple_real_scotch_i686_pc_linux -lptscotch -lptscotcherr -lpastix"
++
++		  AC_DEFINE([_HAVE_PASTIX_],[1],[with Pastix in ISSM src])
++		  AC_SUBST([PASTIXINCL])
++		  AC_SUBST([PASTIXLIB])
++	  else
++		HAVE_PASTIX=no
++		  fi
++		  AC_MSG_RESULT($HAVE_PASTIX)
++		  dnl }}}
++	dnl ml{{{
++	AC_ARG_WITH([ml-dir],
++	  AS_HELP_STRING([--with-ml-dir=DIR],[ml root directory]),
++			  [ML_ROOT=$withval],[ML_ROOT=""])
++			  
++	AC_MSG_CHECKING(for ml headers and libraries in $ML_ROOT)
++	if test -d "$ML_ROOT"; then
++
++		dnl defaults
++		HAVE_ML=yes
++		MLINCL=-I"$ML_ROOT/include"
++		MLLIB=-L"$ML_ROOT/lib -lml"
++        
++		AC_DEFINE([_HAVE_ML_],[1],[with Blacs in ISSM src])
++		AC_SUBST([MLINCL])
++		AC_SUBST([MLLIB])
++	else
++		HAVE_ML=no
++	fi
++	AC_MSG_RESULT($HAVE_ML)
++	dnl }}}
++	dnl umfpack{{{
++		AC_ARG_WITH([umfpack-dir],
++		  AS_HELP_STRING([--with-umfpack-dir=DIR],[UMFPACK root directory]),
++					[UMFPACK_ROOT=$withval],[UMFPACK_ROOT=""])
++
++		AC_MSG_CHECKING(for UMFPACK headers and libraries in $UMFPACK_ROOT)
++		if test -d "$UMFPACK_ROOT"; then
++
++			dnl defaults
++			HAVE_UMFPACK=yes
++			UMFPACKINCL=""
++			UMFPACKLIB=-L"$UMFPACK_ROOT/lib -lumfpack -lumfpack.5.5.1"
++
++			AC_DEFINE([_HAVE_UMFPACK_],[1],[with UMFPACK in ISSM src])
++			AC_SUBST([UMFPACKINCL])
++			AC_SUBST([UMFPACKLIB])
++		else
++			HAVE_UMFPACK=no
++		fi
++		AC_MSG_RESULT($HAVE_UMFPACK)
++	dnl }}}
++dnl math{{{
++	AC_MSG_CHECKING(for math library)
++	AC_ARG_WITH([math-lib],
++	  AS_HELP_STRING([--with-math-lib = otions],[math options, for ex: "/usr/lib/libm.a]),
++	  [MATH_LIB=$withval],[MATH_LIB=""])
++
++	dnl check that --with-math-lib may have been provided
++	if test -n "$MATH_LIB" ; then
++		HAVE_MATH=yes
++		MATHLIB="$MATH_LIB"
++
++		AC_DEFINE([_HAVE_MATH_],[1],[with MATH in ISSM src])
++		AC_SUBST([MATHLIB])
++	fi
++	AC_MSG_RESULT(done)
++	dnl }}}
++	dnl fortran{{{
++	AC_ARG_WITH([fortran],
++		AS_HELP_STRING([--with-fortran = YES], [do we compile fortran code (default is yes)]),
++		[FORTRAN=$withval],[FORTRAN=yes]) 
++	AC_MSG_CHECKING(for fortran compilation)
++	if test "x$FORTRAN" = "xyes"; then
++		dnl defaults
++		HAVE_FORTRAN=yes
++
++		AC_DEFINE([_HAVE_FORTRAN_],[1],[with fortran capability])
++	else
++		HAVE_FORTRAN=no
++	fi
++	AM_CONDITIONAL([FORTRAN], [test x$FORTRAN = xyes])
++	AC_MSG_RESULT($FORTRAN)
++
++	if test "x$FORTRAN" = "xyes"; then
++		dnl fortran library  option
++		AC_MSG_CHECKING(for fortran library)
++		AC_ARG_WITH([fortran-lib],
++		  AS_HELP_STRING([--with-fortran-lib = options],[fortran options, for ex: "/usr/lib/gfortran.a]),
++			[FORTRAN_LIB=$withval],[FORTRAN_LIB=""])
++
++		dnl check that --with-fortran-lib may have been provided
++		if test -n "$FORTRAN_LIB" ; then
++			dnl check that library provided EXISTS!
++		   FORTRAN_DIR=$(echo $FORTRAN_LIB | sed -e "s/-L//g" | awk '{print $[1]}')
++			if test -d "$FORTRAN_DIR" || test -f "$FORTRAN_DIR"; then
++				FORTRANLIB="$FORTRAN_LIB"
++				AC_DEFINE([_HAVE_FORTRAN_],[1],[with FORTRAN in ISSM src])
++				AC_SUBST([FORTRANLIB])
++			else
++			 if test "x$HAVE_MPI" = "xyes"; then
++				FORTRANLIB=$(mpif77 -print-file-name="libgfortran.a")
++				if test -f "$FORTRANLIB"; then
++					 AC_MSG_ERROR([fortran library provided ($FORTRAN_LIB) does not exist, MPI suggests the following library: $FORTRANLIB]);
++				fi
++			 fi
++				AC_MSG_ERROR([fortran library provided ($FORTRAN_LIB) does not exist!]);
++			fi
++		fi
++		AC_MSG_RESULT(done)
++	fi
++	dnl }}}
++	dnl graphics{{{
++	AC_MSG_CHECKING(for graphics library)
++	AC_ARG_WITH([graphics-lib],
++	  AS_HELP_STRING([--with-graphics-lib = options],[graphics options, for ex: "/usr/X11/lib/libX11.a]),
++	  [GRAPHICS_LIB=$withval],[GRAPHICS_LIB=""])
++
++	dnl check that --with-graphics-lib may have been provided
++	
++	if test -n "$GRAPHICS_LIB" ; then
++		dnl check that library provided EXISTS!
++		GRAPHICS_DIR=$(echo $GRAPHICS_LIB | sed -e "s/-L//g" | awk '{print $[1]}')
++		if test -d "$GRAPHICS_DIR" || test -f "$GRAPHICS_DIR"; then
++			HAVE_GRAPHICS=yes
++			GRAPHICSLIB="$GRAPHICS_LIB"
++			AC_DEFINE([_HAVE_GRAPHICS_],[1],[with GRAPHICS in ISSM src])
++			AC_SUBST([GRAPHICSLIB])
++		else
++			if test -f "$PETSC_ROOT/conf/petscvariables"; then
++				GRAPHICSLIB=$(cat $PETSC_ROOT/conf/petscvariables | grep X_LIB)
++				AC_MSG_ERROR([graphics library provided ($GRAPHICS_LIB) does not exist, PETSc suggests the following library: $GRAPHICSLIB]);
++			fi
++			AC_MSG_ERROR([graphics library provided ($GRAPHICS_LIB$) does not exist!]);
++		fi
++	fi
++	AC_MSG_RESULT(done)
++	dnl }}}
++
++	dnl Capabilities
++	dnl with-kml{{{
++	AC_ARG_WITH([kml],
++		AS_HELP_STRING([--with-kml = YES],[compile with kml capabilities (default is yes)]),
++		[KML=$withval],[KML=yes]) 
++	AC_MSG_CHECKING(for kml capability compilation)
++
++	if test "x$KML" = "xyes"; then
++		HAVE_KML=yes
++		AC_DEFINE([_HAVE_KML_],[1],[with kml capability])
++	else
++		HAVE_KML=no
++	fi
++	AM_CONDITIONAL([KML], [test x$HAVE_KML = xyes])
++	AC_MSG_RESULT($HAVE_KML)
++	dnl }}}
++	dnl with-kriging{{{
++	AC_ARG_WITH([kriging],
++		AS_HELP_STRING([--with-kriging = YES],[compile with kriging capabilities (default is yes)]),
++		[KRIGING=$withval],[KRIGING=yes]) 
++	AC_MSG_CHECKING(for kriging capability compilation)
++
++	if test "x$KRIGING" = "xyes"; then
++		HAVE_KRIGING=yes
++		AC_DEFINE([_HAVE_KRIGING_],[1],[with kriging capability])
++	else
++		HAVE_KRIGING=no
++	fi
++	AM_CONDITIONAL([KRIGING], [test x$HAVE_KRIGING = xyes])
++	AC_MSG_RESULT($HAVE_KRIGING)
++	dnl }}}
++	dnl with-steadystate{{{
++	AC_ARG_WITH([steadystate],
++		AS_HELP_STRING([--with-steadystate = YES],[compile with steadystate capabilities (default is yes)]),
++		[STEADYSTATE=$withval],[STEADYSTATE=yes]) 
++	AC_MSG_CHECKING(for steadystate capability compilation)
++
++	if test "x$STEADYSTATE" = "xyes"; then
++
++		dnl defaults
++		HAVE_STEADYSTATE=yes
++
++		AC_DEFINE([_HAVE_STEADYSTATE_],[1],[with steadystate capability])
++	else
++		HAVE_STEADYSTATE=no
++	fi
++	AM_CONDITIONAL([STEADYSTATE], [test x$HAVE_STEADYSTATE = xyes])
++	AC_MSG_RESULT($HAVE_STEADYSTATE)
++	dnl }}}
++	dnl with-transient{{{
++	AC_ARG_WITH([transient],
++		AS_HELP_STRING([--with-transient = YES], [compile with transient capabilities (default is yes)]),
++		[TRANSIENT=$withval],[TRANSIENT=yes]) 
++	AC_MSG_CHECKING(for transient capability compilation)
++
++	if test "x$TRANSIENT" = "xyes"; then
++
++		dnl defaults
++		HAVE_TRANSIENT=yes
++
++		AC_DEFINE([_HAVE_TRANSIENT_],[1],[with transient capability])
++	else
++		HAVE_TRANSIENT=no
++	fi
++	AM_CONDITIONAL([TRANSIENT], [test x$HAVE_TRANSIENT = xyes])
++	AC_MSG_RESULT($HAVE_TRANSIENT)
++	dnl }}}
++	dnl with-thermal{{{
++	AC_ARG_WITH([thermal],
++		AS_HELP_STRING([--with-thermal = YES], [compile with thermal capabilities (default is yes)]),
++		[THERMAL=$withval],[THERMAL=yes]) 
++	AC_MSG_CHECKING(for thermal capability compilation)
++
++	if test "x$THERMAL" = "xyes"; then
++
++		dnl defaults
++		HAVE_THERMAL=yes
++
++		AC_DEFINE([_HAVE_THERMAL_],[1],[with thermal capability])
++	else
++		HAVE_THERMAL=no
++	fi
++	AM_CONDITIONAL([THERMAL], [test x$HAVE_THERMAL = xyes])
++	AC_MSG_RESULT($HAVE_THERMAL)
++	dnl }}}
++	dnl with-prognostic{{{
++	AC_ARG_WITH([prognostic],
++		AS_HELP_STRING([--with-prognostic = YES], [compile with prognostic capabilities (default is yes)]),
++		[PROGNOSTIC=$withval],[PROGNOSTIC=yes]) 
++	AC_MSG_CHECKING(for prognostic capability compilation)
++
++	if test "x$PROGNOSTIC" = "xyes"; then
++
++		dnl defaults
++		HAVE_PROGNOSTIC=yes
++
++		AC_DEFINE([_HAVE_PROGNOSTIC_],[1],[with prognostic capability])
++	else
++		HAVE_PROGNOSTIC=no
++	fi
++	AM_CONDITIONAL([PROGNOSTIC], [test x$HAVE_PROGNOSTIC = xyes])
++	AC_MSG_RESULT($HAVE_PROGNOSTIC)
++	dnl }}}
++	dnl with-control{{{
++	AC_ARG_WITH([control],
++		AS_HELP_STRING([--with-control = YES], [compile with control capabilities (default is yes)]),
++		[CONTROL=$withval],[CONTROL=yes]) 
++	AC_MSG_CHECKING(for control capability compilation)
++
++	if test "x$CONTROL" = "xyes"; then
++
++		dnl defaults
++		HAVE_CONTROL=yes
++
++		AC_DEFINE([_HAVE_CONTROL_],[1],[with control capability])
++	else
++		HAVE_CONTROL=no
++	fi
++	AM_CONDITIONAL([CONTROL], [test x$HAVE_CONTROL = xyes])
++	AC_MSG_RESULT($HAVE_CONTROL)
++	dnl }}}
++	dnl with-hydrology{{{
++	AC_ARG_WITH([hydrology],
++		AS_HELP_STRING([--with-hydrology = YES], [compile with hydrology capabilities (default is yes)]),
++		[HYDROLOGY=$withval],[HYDROLOGY=yes]) 
++	AC_MSG_CHECKING(for hydrology capability compilation)
++
++	if test "x$HYDROLOGY" = "xyes"; then
++
++		dnl defaults
++		HAVE_HYDROLOGY=yes
++
++		AC_DEFINE([_HAVE_HYDROLOGY_],[1],[with hydrology capability])
++	else
++		HAVE_HYDROLOGY=no
++	fi
++	AM_CONDITIONAL([HYDROLOGY], [test x$HAVE_HYDROLOGY = xyes])
++	AC_MSG_RESULT($HAVE_HYDROLOGY)
++	dnl }}}
++	dnl with-diagnostic{{{
++	AC_ARG_WITH([diagnostic],
++		AS_HELP_STRING([--with-diagnostic = YES], [compile with diagnostic capabilities (default is yes)]),
++		[DIAGNOSTIC=$withval],[DIAGNOSTIC=yes]) 
++	AC_MSG_CHECKING(for diagnostic capability compilation)
++
++	if test "x$DIAGNOSTIC" = "xyes"; then
++
++		dnl defaults
++		HAVE_DIAGNOSTIC=yes
++
++		AC_DEFINE([_HAVE_DIAGNOSTIC_],[1],[with diagnostic capability])
++	else
++		HAVE_DIAGNOSTIC=no
++	fi
++	AM_CONDITIONAL([DIAGNOSTIC], [test x$HAVE_DIAGNOSTIC = xyes])
++	AC_MSG_RESULT($HAVE_DIAGNOSTIC)
++	dnl }}}
++	dnl with-balanced{{{
++	AC_ARG_WITH([balanced],
++		AS_HELP_STRING([--with-balanced = YES], [compile with balanced capabilities (default is yes)]),
++		[BALANCED=$withval],[BALANCED=yes]) 
++	AC_MSG_CHECKING(for balanced capability compilation)
++
++	if test "x$BALANCED" = "xyes"; then
++
++		dnl defaults
++		HAVE_BALANCED=yes
++
++		AC_DEFINE([_HAVE_BALANCED_],[1],[with balanced capability])
++	else
++		HAVE_BALANCED=no
++	fi
++	AM_CONDITIONAL([BALANCED], [test x$HAVE_BALANCED = xyes])
++	AC_MSG_RESULT($HAVE_BALANCED)
++	dnl }}}
++	dnl with-responses{{{
++	AC_ARG_WITH([responses],
++		AS_HELP_STRING([--with-responses = YES], [compile with responses capabilities (default is yes)]),
++		[RESPONSES=$withval],[RESPONSES=yes]) 
++	AC_MSG_CHECKING(for responses capability compilation)
++
++	if test "x$RESPONSES" = "xyes"; then
++
++		dnl defaults
++		HAVE_RESPONSES=yes
++
++		AC_DEFINE([_HAVE_RESPONSES_],[1],[with responses capability])
++	else
++		HAVE_RESPONSES=no
++	fi
++	AM_CONDITIONAL([RESPONSES], [test x$HAVE_RESPONSES = xyes])
++	AC_MSG_RESULT($HAVE_RESPONSES)
++	dnl }}}
++	dnl with-slope{{{
++	AC_ARG_WITH([slope],
++		AS_HELP_STRING([--with-slope = YES], [compile with slope capabilities (default is yes)]),
++		[SLOPE=$withval],[SLOPE=yes]) 
++	AC_MSG_CHECKING(for slope capability compilation)
++
++	if test "x$SLOPE" = "xyes"; then
++
++		dnl defaults
++		HAVE_SLOPE=yes
++
++		AC_DEFINE([_HAVE_SLOPE_],[1],[with slope capability])
++	else
++		HAVE_SLOPE=no
++	fi
++	AM_CONDITIONAL([SLOPE], [test x$HAVE_SLOPE = xyes])
++	AC_MSG_RESULT($HAVE_SLOPE)
++	dnl }}}
++	dnl with-groundingline{{{
++	AC_ARG_WITH([groundingline],
++		AS_HELP_STRING([--with-groundingline = YES], [compile with groundingline capabilities (default is yes)]),
++		[GROUNDINGLINE=$withval],[GROUNDINGLINE=yes]) 
++	AC_MSG_CHECKING(for groundingline capability compilation)
++
++	if test "x$GROUNDINGLINE" = "xyes"; then
++
++		dnl defaults
++		HAVE_GROUNDINGLINE=yes
++
++		AC_DEFINE([_HAVE_GROUNDINGLINE_],[1],[with groundingline capability])
++	else
++		HAVE_GROUNDINGLINE=no
++	fi
++	AM_CONDITIONAL([GROUNDINGLINE], [test x$HAVE_GROUNDINGLINE = xyes])
++	AC_MSG_RESULT($HAVE_GROUNDINGLINE)
++	dnl }}}
++	dnl with-rifts{{{
++	AC_ARG_WITH([rifts],
++		AS_HELP_STRING([--with-rifts = YES], [compile with rifts capabilities (default is yes)]),
++		[RIFTS=$withval],[RIFTS=yes]) 
++	AC_MSG_CHECKING(for rifts capability compilation)
++
++	if test "x$RIFTS" = "xyes"; then
++
++		dnl defaults
++		HAVE_RIFTS=yes
++
++		AC_DEFINE([_HAVE_RIFTS_],[1],[with rifts capability])
++	else
++		HAVE_RIFTS=no
++	fi
++	AM_CONDITIONAL([RIFTS], [test x$HAVE_RIFTS = xyes])
++	AC_MSG_RESULT($HAVE_RIFTS)
++	dnl }}}
++	dnl math77{{{
++	AC_ARG_WITH([math77-dir],
++		AS_HELP_STRING([--with-math77-dir=DIR], [math77 root directory.]),
++		[MATH77_ROOT=$withval],[MATH77_ROOT=""]) 
++	AC_MSG_CHECKING(for math77)
++
++	if test -d "$MATH77_ROOT"; then
++
++	  HAVE_MATH77=yes
++	  MATH77LIB="-L$MATH77_ROOT/ -lmath77"
++
++	  AC_DEFINE([_HAVE_MATH77_],[1],[with math77 in ISSM src])
++	  AC_SUBST([MATH77LIB])
++	else
++		HAVE_MATH77=no
++	fi
++	AC_MSG_RESULT($HAVE_MATH77)
++	dnl }}}
++	dnl with-gia{{{
++	AC_ARG_WITH([gia],
++		AS_HELP_STRING([--with-gia = YES], [compile with gia capabilities (default is yes)]),
++		[GIA=$withval],[GIA=no]) 
++	AC_MSG_CHECKING(for gia capability compilation)
++
++	if test "x$GIA" = "xyes"; then
++	  
++	  if test "x$HAVE_MATH77" = "xno"; then
++		  HAVE_GIA=no
++		  AC_MSG_ERROR([gia requires compilation of math77 library! Reconfigure with --with-math77 option on]);
++	  else
++		dnl defaults
++		HAVE_GIA=yes
++		AC_DEFINE([_HAVE_GIA_],[1],[with gia capability])
++	  fi
++
++	else
++		HAVE_GIA=no
++	fi
++	AM_CONDITIONAL([GIA], [test x$HAVE_GIA = xyes])
++	AC_MSG_RESULT($HAVE_GIA)
++	dnl }}}
++	dnl with-ios{{{
++	AC_ARG_WITH([ios],
++		AS_HELP_STRING([--with-ios = YES], [compile with iOS capabilities (default is no, alternatives are yes)]),
++		[IOS=$withval],[IOS=no]) 
++	AC_MSG_CHECKING(for iOS compilation)
++
++	if test "x$IOS" = "xyes"; then
++		dnl defaults
++		HAVE_IOS=yes
++
++		AC_DEFINE([_HAVE_IOS_],[1],[with android capability])
++	elif test "x$IOS" = "xno"; then
++		HAVE_IOS=no
++	else
++	  AC_MSG_ERROR([--with-ios should be either no or yes])
++	fi
++	AM_CONDITIONAL([IOS], [test x$HAVE_IOS != xno])
++	AC_MSG_RESULT($HAVE_IOS)
++	dnl }}}
++	dnl with-android{{{
++	AC_ARG_WITH([android],
++		AS_HELP_STRING([--with-android = EXE], [compile with android capabilities (default is no, alternatives are exe and jni)]),
++		[ANDROID=$withval],[ANDROID=no]) 
++	AC_MSG_CHECKING(for android capability compilation)
++
++	if test "x$ANDROID" = "xjni"; then
++
++		dnl defaults
++		HAVE_ANDROID=jni
++		AC_DEFINE([_HAVE_ANDROID_],[1],[with android capability])
++		AC_DEFINE([_HAVE_ANDROID_JNI_],[1],[with android jni])
++	elif test "x$ANDROID" = "xexe"; then
++		dnl defaults
++		HAVE_ANDROID=exe
++
++		AC_DEFINE([_HAVE_ANDROID_],[1],[with android capability])
++	elif test "x$ANDROID" = "xno"; then
++		HAVE_ANDROID=no
++	else
++	  AC_MSG_ERROR([--with-android should be either no, exe or jni])
++	fi
++	AM_CONDITIONAL([ANDROID], [test x$HAVE_ANDROID != xno])
++	AM_CONDITIONAL([ANDROIDJNI], [test x$HAVE_ANDROID = xjni])
++	AM_CONDITIONAL([ANDROIDEXE], [test x$HAVE_ANDROID = xexe])
++	AC_MSG_RESULT($HAVE_ANDROID)
++	dnl }}}
++	dnl with-android-ndk{{{
++	AC_ARG_WITH([android-ndk],
++	  AS_HELP_STRING([--with-android-ndk=DIR], [android-ndk root directory.]),
++	  [ANDROID_NDK_ROOT=$withval],[ANDROID_NDK_ROOT=""]) 
++	AC_MSG_CHECKING(with android ndk)
++	
++	if test -d "$ANDROID_NDK_ROOT"; then
++		dnl defaults
++		HAVE_ANDROID_NDK=yes
++		ANDROID_NDKINCL="-I$ANDROID_NDK_ROOT/arm-linux-android-install/sysroot/usr/include"
++
++		AC_DEFINE([_HAVE_ANDROID_NDK_],[1],[with android ndk in ISSM src])
++		AC_SUBST([ANDROID_NDKINCL])
++	else
++		HAVE_ANDROID_NDK=no
++	fi
++	AC_MSG_RESULT($HAVE_ANDROID_NDK)
++	dnl }}}
++	dnl with-3d{{{
++	AC_ARG_WITH([3d],
++		AS_HELP_STRING([--with-3d = YES], [compile with 3d capabilities (default is yes)]),
++		[THREED=$withval],[THREED=yes]) 
++	AC_MSG_CHECKING(for 3d capability compilation)
++
++	if test "x$THREED" = "xyes"; then
++
++		dnl defaults
++		HAVE_3D=yes
++
++		AC_DEFINE([_HAVE_3D_],[1],[with 3d capability])
++	else
++		HAVE_3D=no
++	fi
++	AM_CONDITIONAL([THREED], [test x$HAVE_3D = xyes])
++	AC_MSG_RESULT($HAVE_3D)
++	dnl }}}
++	dnl checks{{{
++	AC_MSG_CHECKING(consistency between all libraries)
++	
++	dnl check that if petsc is requested , mpi should be specified
++	if test "$HAVE_PETSC" = "yes" ; then
++		if test "$HAVE_MPI" = "NO";  then
++			AC_MSG_ERROR([petsc requires mpi!]);
++		fi
++	fi
++
++	dnl check that we have either python or matlab support if we compile the modules
++	if test "$MODULES_VALUE" = "yes"  && test "$HAVE_MATLAB" = "no" && test "$HAVE_PYTHON" = "no"; then
++		AC_MSG_ERROR([need at least python or matlab support to compile modules (or use --with-modules=no)]);
++	fi
++
++	dnl check that if we have MPI, we have metis
++	if test "$HAVE_METIS" = "yes"  && test "$HAVE_MPI" = "no" ; then
++	AC_MSG_ERROR([need mpi if using the metis partitioner!]);
++	fi
++
++	AC_MSG_RESULT(done)
++	dnl }}}
++
++	dnl other options
++	dnl optimization{{{
++	dnl bypass standard optimization -g -O2 ? 
++	AC_ARG_WITH([cxxoptflags],
++	  AS_HELP_STRING([--with-cxxoptflags = CXXOPTFLAGS], [optimization using CXX flags, ex: --with-cxxoptflags=-march=opteron -O3]),
++	  [CXXOPTFLAGS=$withval],[CXXOPTFLAGS="-g -O2"]) 
++	AC_MSG_CHECKING(for c++ optimization flags)
++	AC_SUBST([CXXOPTFLAGS])
++	AC_MSG_RESULT(done)
++
++	dnl }}}
++	dnl multithreading{{{
++	AC_ARG_WITH([numthreads],
++	  AS_HELP_STRING([--with-numthreads = NUMTHREADS_VALUE],[numthreads, default is 1. ]),
++	  [NUMTHREADS_VALUE=$withval],[NUMTHREADS_VALUE=1])
++	AC_MSG_CHECKING(for number of threads)
++	dnl defaults
++	MULTITHREADING=no
++	MULTITHREADINLIB=""
++	if test "$NUMTHREADS_VALUE" != "1"; then
++		
++		MULTITHREADINGLIB="-lpthread -lrt"
++		case "${host_os}" in
++		*cygwin*)
++		MULTITHREADINGLIB="-lpthread -lrt"
++		;;
++		*linux*)
++		MULTITHREADINGLIB="-lpthread -lrt"
++		;;
++		*darwin*)
++		MULTITHREADINGLIB="-lpthread"
++		;;
++		esac
++
++		AC_DEFINE([_MULTITHREADING_],[1],[with numthreads enabled])
++		AC_DEFINE_UNQUOTED([_NUMTHREADS_],[$NUMTHREADS_VALUE],[number of threads])
++	fi
++	AC_SUBST([MULTITHREADINGLIB])
++	AC_MSG_RESULT($NUMTHREADS_VALUE) 
++	dnl }}}
++	dnl 64bit {{{
++	AC_ARG_WITH([64bit-indices],
++	  AS_HELP_STRING([--with-64bit-indices = bool], [use 64 bit integers, default 0, ex: --with-64bit-indices=1]),
++	  [USE_64BIT_INDICES=$withval],[USE_64BIT_INDICES=0]) 
++	AC_MSG_CHECKING(for 64 bit indices)
++
++	if test "$USE_64BIT_INDICES" == "1"; then
++	AC_DEFINE([ISSM_USE_64BIT_INDICES],[1],[with 64 bits indices])
++	else
++	AC_DEFINE([ISSM_USE_64BIT_INDICES],[0],[with 64 bits indices])
++	fi
++	AC_MSG_RESULT($USE_64BIT_INDICES)
++	dnl }}}
++])
+Index: ../trunk-jpl/packagers/ubuntu/issmpkg/install-3.2-linux64.sh
+===================================================================
+--- ../trunk-jpl/packagers/ubuntu/issmpkg/install-3.2-linux64.sh	(revision 0)
++++ ../trunk-jpl/packagers/ubuntu/issmpkg/install-3.2-linux64.sh	(revision 16002)
+@@ -0,0 +1,37 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install petsc-3.2-p3 src
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-3.2-p3.tar.gz' 'petsc-3.2-p3.tar.gz'
++
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.2-p3.tar.gz
++mv petsc-3.2-p3/* src/
++rm -rf petsc-3.2-p3
++
++#configure
++cd src
++./config/configure.py \
++	--prefix="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-mpi-dir="/usr/lib/mpich2/" \
++	--with-clanguage=C++ \
++	--PETSC_ARCH=linux-gnu-amd64 \
++	--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++	--with-debugging=0 \
++	--with-shared-libraries=1 \
++	--download-mumps=yes \
++	--download-scalapack=yes \
++	--download-blacs=yes \
++	--download-blas=yes \
++	--download-f-blas-lapack=yes \
++	--download-plapack=yes \
++	--download-parmetis=yes \
++	--with-pic=1
++
++#Compile petsc and install it
++make
++make install
+
+Property changes on: ../trunk-jpl/packagers/ubuntu/issmpkg/install-3.2-linux64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/packagers/ubuntu/issmpkg/triangle.h.patch
+===================================================================
+--- ../trunk-jpl/packagers/ubuntu/issmpkg/triangle.h.patch	(revision 0)
++++ ../trunk-jpl/packagers/ubuntu/issmpkg/triangle.h.patch	(revision 16002)
+@@ -0,0 +1,12 @@
++250a251,257
++> /*Patch for ISSM*/
++> #ifndef REAL
++> typedef double REAL;
++> typedef void VOID;
++> #endif
++> /*End patch*/
++> 
++283c290
++< void triangulate(char *, struct triangulateio *, struct triangulateio *,
++---
++> extern "C" void triangulate(char *, struct triangulateio *, struct triangulateio *,
+Index: ../trunk-jpl/packagers/ubuntu/issmpkg/README
+===================================================================
+--- ../trunk-jpl/packagers/ubuntu/issmpkg/README	(revision 0)
++++ ../trunk-jpl/packagers/ubuntu/issmpkg/README	(revision 16002)
+@@ -0,0 +1,138 @@
++UNDER CONSTRUCTION - UNDER CONSTRUCTION - UNDER CONSTRUCTION - UNDER CONSTRUCTION 
++
++PREFACE:
++	There are configuration files included in the dir where this document
++	 resides. Use them, that's why they're there. But I know, since some of
++	 you like to go against the grain, at least one of you is going to try
++	 building a package from an install that differs from mine.
++
++	If you choose to go down that dark road, then bear in mind that there
++	 are ways to do this right, and there are ways to do this wrong....
++	 Make sure that you mind where you decide to install the bin and lib.
++	 If you specify a target outside of the trunk, and don't, let's say,
++	 write the same dir somewhere else, then the package won't work. 
++
++	Make sure when putting together a dir hierarchy for a package, that you
++	 create something sime to what you specifed during compile. If you
++	 change "--bindir" then create a dir in the package that corresponds to
++	 that. The trunk doesn't necessarily have to be in the same place as it
++	 is on the build system.
++
++-------------------------------------------------------------------------------
++		    Installing ISSM to create a deb package:
++-------------------------------------------------------------------------------
++
++1.	Install mpich from the ubuntu repositories:
++
++		> sudo apt-get install mpich2 (or something similar)
++
++		Check to make sure that it installs the "-dev" libs
++			if not:
++			 > sudo apt-get install libmpich-dev (or something similar)
++			Otherwise you won't get "/usr/lib/mpich2"
++
++		You can use "apt-cache search" to find a package's full name
++
++2a.	Compile petsc and metis (preferred versions: 3.2 and 4.0, respectively):
++
++		Make sure that petsc's installer file is pointing to the
++		 correct mpich dir
++
++			You should use "/usr/lib/mpich2" (or something similar)
++
++		As of now, it is preferable to use the separate mpich package
++		 because the infrastructure of the mpich package under petsc
++		 is having issues with being packaged
++
++		Also make sure that you mind the target of the installation.
++			Right now /usr/share/petsc and /usr/share/metis are the
++			 best options suffixed by version numbers
++
++2b.	Install dependencies from the ubuntu repositories
++
++		Use apt-get install to install:
++			triangle-bin, libtriangle-dev, python2.7-dev, 
++			 python-scipy, python-netcdf4, netcdf-bin, python-nose, 
++			 libnetcdfc++4, hdf5-tools
++
++		REMEMBER: that this tutorial assumes you are creating the
++		 python interface
++			
++3.	Be sure to patch the system triangle.h file
++
++		> sudo patch /usr/include/triangle.h $ISSM_DIR/externalpackages/triangle/triangle.h.patch
++			the header may also be called "libtriangle.h"
++
++		Just like always, this will move the original to 
++		 "triangle.h.old" incase you need to revert
++
++4.	Compile ISSM
++
++		> autoreconf -iv && configs/config-*-packaging.sh && make && sudo -E make install
++
++-------------------------------------------------------------------------------
++		          Creating an issm.deb package
++-------------------------------------------------------------------------------
++	THIS ASSUMES YOU ARE USING THE CONFIG FILE SUPPLIED HERE.
++	IF YOU ARE DOING AN ALTERNATE CONFIG, MAKE SURE THE DIR
++	HIERARCHY IS PROPERLY REFLECTED BY THE BINDIR AND LIBDIR!
++
++1.	Make a directory to work from (the dir dpkg-deb will build)
++		Anywhere will do, but using a ~/tmp dir works best
++
++		> mkdir issmpkgdir
++		> cd issmpkgdir
++
++2.	Create the dir hierarchy:
++
++		> mkdir -p usr/{bin,lib,share/issm-trunk} etc/issm DEBIAN
++
++		This is will create:
++		issmpkgdir/
++		|_ usr/
++		|  |_ bin/
++		|  |_ lib/
++		|  |_ share/
++		|     |_issm-trunk/ - this is the trunk
++		|_ etc/
++		|  |_ issm/ - this is where issmrc and other conf files go
++		|_DEBIAN/ - where control files and install scripts go
++
++		As stated, if you change "--bindir" or "--libdir" in the config
++		 file, then make sure that you create matching dirs in this
++		 step, or vice-versa.
++
++3.	Copy the contents of the package over:
++
++		> sudo cp -r /usr/bin/issm usr/bin
++		> sudo cp -r /usr/lib/issm usr/lib
++		> cp -r $ISSM_DIR/* usr/share/issm-trunk
++
++		When you copy the trunk over, this your opportunity to weed out
++		 anything you don't want included in the build.
++		Again, the config file installs the bin and lib files to a dir
++		 that's separate from the rest of the bin and lib files. If you
++		 change "--bindir" or "--libdir", make sure you install them to
++		 a subdirectory of your target to keep things neat or else 
++		 you'll have to pick them out, one-by-one to complete this step.
++
++4.	Write your control file. A template is provided, that is the bare minimum to
++		 create the package 
++
++		You will NEED the following dependencies:
++		mpich2, petsc3.2-issm, metis4.0-issm, triangle-bin, libtriangle-dev, 
++		 python2.7-dev, python-scipy, python-netcdf4, netcdf-bin, python-nose, 
++		 libnetcdfc++4, hdf5-tools
++
++5.	Create any install/uninstall scripts needed (preinst, postinst, prerm, postrm)
++		There are already some templates provided for you.
++
++		Make sure you address the issue of any user created content. By
++		 default, apt-get won't remove anything that wasn't created by
++		 the installer, even if you use purge. Put this in a rm script.
++
++6.	Build the package:
++
++		> dpkg-deb --build <workingDir> <nameOfPackage>
++
++UNDER CONSTRUCTION - UNDER CONSTRUCTION - UNDER CONSTRUCTION - UNDER CONSTRUCTION 
+Index: ../trunk-jpl/packagers/ubuntu/issmpkg/environment.sh
+===================================================================
+--- ../trunk-jpl/packagers/ubuntu/issmpkg/environment.sh	(revision 0)
++++ ../trunk-jpl/packagers/ubuntu/issmpkg/environment.sh	(revision 16002)
+@@ -0,0 +1,287 @@
++#ISSM_DIR and ISSM_ARCH should have been defined already in your shell settings file (.bashrc, .cshrc, etc ...)
++
++pathprepend(){ #{{{
++	if [ -d "$1" ] && [[ ":$PATH:" != *":$1:"* ]]; then
++		export PATH="$1:$PATH"
++	fi
++} #}}}
++pathappend(){ #{{{
++	if [ -d "$1" ] && [[ ":$PATH:" != *":$1:"* ]]; then
++		export PATH="$PATH:$1"
++	fi
++} #}}}
++libpathprepend(){ #{{{
++	if [ -d "$1" ] && [[ ":$LD_LIBRARY_PATH:" != *":$1:"* ]]; then
++		export LD_LIBRARY_PATH="$1:$LD_LIBRARY_PATH"
++	fi
++	if [ -d "$1" ] && [[ ":$LD_RUN_PATH:" != *":$1:"* ]]; then
++		export LD_RUN_PATH="$1:$LD_RUN_PATH"
++	fi
++} #}}}
++libpathappend(){ #{{{
++	if [ -d "$1" ] && [[ ":$LD_LIBRARY_PATH:" != *":$1:"* ]]; then
++		export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$1"
++	fi
++	if [ -d "$1" ] && [[ ":$LD_RUN_PATH:" != *":$1:"* ]]; then
++		export LD_RUN_PATH="$LD_RUN_PATH:$1"
++	fi
++} #}}}
++dylibpathprepend(){ #{{{
++	if [ -d "$1" ] && [[ ":$DYLD_LIBRARY_PATH:" != *":$1:"* ]]; then
++		export DYLD_LIBRARY_PATH="$1:$DYLD_LIBRARY_PATH"
++	fi
++	if [ -d "$1" ] && [[ ":$LD_RUN_PATH:" != *":$1:"* ]]; then
++		export LD_RUN_PATH="$1:$LD_RUN_PATH"
++	fi
++} #}}}
++dylibpathappend(){ #{{{
++	if [ -d "$1" ] && [[ ":$DYLD_LIBRARY_PATH:" != *":$1:"* ]]; then
++		export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$1"
++	fi
++	if [ -d "$1" ] && [[ ":$LD_RUN_PATH:" != *":$1:"* ]]; then
++		export LD_RUN_PATH="$LD_RUN_PATH:$1"
++	fi
++} #}}}
++
++#FIXME: during installation packages are installed one by one but environment.sh was sourced
++#before so new packages are NOT in the path.
++#may resource environment.sh with:
++#if [ -z $(echo "$PATH" | grep "$MATLAB_DIR") ]; then export $PATH...; fi
++
++#Windows compilers: 
++if [[ "$ISSM_ARCH" == "cygwin-intel" ]]; then
++	source $ISSM_DIR/externalpackages/windows/windows_environment.sh
++fi
++
++#Some basic path, in case it is not included by default
++libpathappend "/usr/local/lib"
++
++#Load ISSM scripts
++pathappend "$ISSM_DIR/scripts"
++
++MATLAB_DIR="$ISSM_DIR/externalpackages/matlab/install"
++export MATLAB_DIR
++pathprepend   "$MATLAB_DIR/bin" #take precedence over /usr/local/bin/matlab
++libpathappend "$MATLAB_DIR/lib"
++
++#legacy mpich2 (To be removed)
++MPI_DIR="$ISSM_DIR/externalpackages/mpich2/install"
++if [ -d "$MPI_DIR" ]; then
++	export MPI_DIR
++	pathprepend   "$MPI_DIR/bin"
++	libpathappend "$MPI_DIR/lib"
++fi
++
++MPI_DIR="$ISSM_DIR/externalpackages/mpich/install"
++if [ -d "$MPI_DIR" ]; then
++	export MPI_DIR
++	pathprepend   "$MPI_DIR/bin"
++	libpathappend "$MPI_DIR/lib"
++fi
++
++PETSC_DIR="$ISSM_DIR/externalpackages/petsc/install"
++export PETSC_DIR
++libpathappend "$PETSC_DIR/lib"
++
++SLEPC_DIR="$ISSM_DIR/externalpackages/slepc/install"
++libpathappend "$SLEPC_DIR/lib"
++
++TAO_DIR="$ISSM_DIR/externalpackages/tao/install"
++libpathappend "$TAO_DIR/lib"
++
++DAKOTA_DIR="$ISSM_DIR/externalpackages/dakota/install"
++pathappend "$DAKOTA_DIR/bin"
++libpathappend "$DAKOTA_DIR/lib"
++
++DOXYGEN_DIR="$ISSM_DIR/externalpackages/doxygen/install"
++pathprepend "$DOXYGEN_DIR/bin"
++
++AUTOTOOLS_DIR="$ISSM_DIR/externalpackages/autotools/install"
++pathprepend "$AUTOTOOLS_DIR/bin"
++
++SDK_DIR="C:/MicrosoftVisualStudio 9.0/Microsoft Visual C++ 2008 Express Edition with SP1 - ENU"
++pathappend "$SDK_DIR"
++
++SSH_DIR="$ISSM_DIR/externalpackages/ssh"
++pathappend "$SSH_DIR"
++
++VALGRIND_DIR="$ISSM_DIR/externalpackages/valgrind/install"
++pathprepend "$VALGRIND_DIR/bin"
++
++CPPCHECK_DIR="$ISSM_DIR/externalpackages/cppcheck/install"
++pathappend "$CPPCHECK_DIR/bin"
++
++GDAL_DIR="$ISSM_DIR/externalpackages/gdal/install"
++pathprepend "$GDAL_DIR/bin"
++libpathappend "$GDAL_DIR/lib"
++
++PROJ4_DIR="$ISSM_DIR/externalpackages/proj.4/install"
++libpathappend "$PROJ4_DIR/lib"
++
++MERCURIAL_DIR="$ISSM_DIR/externalpackages/mercurial/install"
++if [ -d "$MERCURIAL_DIR" ]; then
++	export PYTHONPATH="$PYTHONPATH:$MERCURIAL_DIR/mercurial/pure/"
++	pathappend "$MERCURIAL_DIR"
++fi
++
++BOOST_DIR="$ISSM_DIR/externalpackages/boost/install"
++BOOSTROOT="$ISSM_DIR/externalpackages/boost/install"
++if [ -d "$BOOST_DIR" ]; then
++	export BOOSTROOT
++	export BOOST_DIR
++	libpathappend   "$BOOST_DIR/lib"
++	dylibpathappend "$BOOST_DIR/lib"
++	pathappend      "$BOOST_DIR/bin"
++fi
++
++XERCESROOT="$ISSM_DIR/externalpackages/xerces/install"
++XERCESCROOT="$ISSM_DIR/externalpackages/xerces/src"
++if [ -d "$XERCESROOT" ]; then
++	export XERCESROOT 
++	export XERCESCROOT
++fi
++
++XAIF_DIR="$ISSM_DIR/externalpackages/xaifbooster/xaifBooster"
++XAIFBOOSTERROOT="$ISSM_DIR/externalpackages/xaifbooster/"
++XAIFBOOSTER_HOME="$ISSM_DIR/externalpackages/xaifbooster/xaifBooster"
++PLATFORM="x86-Linux"
++if [ -d "$XAIF_DIR" ]; then
++	export XAIFBOOSTERROOT
++	export XAIFBOOSTER_HOME
++	export XAIF_DIR
++	export PLATFORM
++fi
++
++ANGELROOT="$ISSM_DIR/externalpackages/angel/angel"
++if [ -d "$ANGELROOT" ]; then
++	export ANGELROOT
++fi
++
++OPENANALYSISROOT="$ISSM_DIR/externalpackages/openanalysis/install"
++if [ -d "$OPENANALYSISROOT" ]; then
++	export OPENANALYSISROOT
++	libpathappend "$OPENANALYSISROOT/lib"
++fi
++
++JVM_DIR="/usr/local/gcc/4.3.2/lib64/gcj-4.3.2-9/"
++libpathappend "$JVM_DIR"
++
++BBFTP_DIR="$ISSM_DIR/externalpackages/bbftp/install"
++pathappend "$BBFTP_DIR/bin"
++
++ADIC_DIR="$ISSM_DIR/externalpackages/adic/install"
++pathappend "$ADIC_DIR/bin"
++libpathappend "$ADIC_DIR/lib"
++
++COLPACK_DIR="$ISSM_DIR/externalpackages/colpack/install"
++libpathappend "$COLPACK_DIR/lib"
++
++ECLIPSE_DIR="$ISSM_DIR/externalpackages/eclipse/install"
++pathappend "$ECLIPSE_DIR"
++
++APPSCAN_DIR="$ISSM_DIR/externalpackages/appscan/install"
++pathappend "$APPSCAN_DIR/bin"
++
++RATS_DIR="$ISSM_DIR/externalpackages/rats/install"
++pathappend "$RATS_DIR/bin"
++
++DYSON_DIR="$ISSM_DIR/externalpackages/dyson/"
++pathappend "$DYSON_DIR"
++
++CMAKE_DIR="$ISSM_DIR/externalpackages/cmake/install"
++pathprepend "$CMAKE_DIR/bin"
++
++SHAPELIB_DIR="$ISSM_DIR/externalpackages/shapelib/install"
++pathappend "$SHAPELIB_DIR/exec"
++
++CCCL_DIR="$ISSM_DIR/externalpackages/cccl/install"
++pathappend "$CCCL_DIR/bin"
++
++PACKAGEMAKER_DIR="$ISSM_DIR/externalpackages/packagemaker/install"
++pathappend "$PACKAGEMAKER_DIR"
++
++#android-dev-dir
++export ANDROID_DIR="$ISSM_DIR/externalpackages/android"
++
++export ANDROID_NDK_DIR="$ANDROID_DIR/android-ndk/install"
++pathappend "$ANDROID_NDK_DIR/arm-linux-android-install/bin"
++
++export ANDROID_SDK_DIR="$ANDROID_DIR/android-sdk/install"
++pathappend "$ANDROID_SDK_DIR/"
++
++GSL_DIR="$ISSM_DIR/externalpackages/gsl/install"
++libpathappend "$GSL_DIR/lib"
++
++GMAKE_DIR="$ISSM_DIR/externalpackages/gmake/install"
++pathprepend "$GMAKE_DIR/bin"
++
++PYTHON_DIR="/usr"
++if [ -d "$PYTHON_DIR" ]; then
++	export PYTHONPATH="$PYTHONPATH:$ISSM_DIR/lib"
++	export PYTHONSTARTUP="$ISSM_DIR/startup.py"
++	pathprepend    "/usr"
++	libpathprepend "$ISSM_DIR/lib"
++	libpathprepend "/usr/lib/python2.7"
++fi
++
++MODELE_DIR="$ISSM_DIR/externalpackages/modelE/install"
++pathappend "$MODELE_DIR/src/exec"
++
++GIT_DIR="$ISSM_DIR/externalpackages/git/install"
++pathprepend "$GIT_DIR/bin"
++
++NCVIEW_DIR="$ISSM_DIR/externalpackages/ncview/install"
++pathappend "$NCVIEW_DIR"
++
++TCLX_DIR="$ISSM_DIR/externalpackages/tclx/install/lib/tclx8.4"
++libpathappend "$TCLX_DIR"
++
++ASPELL_DIR="$ISSM_DIR/externalpackages/aspell/install"
++pathappend "$ASPELL_DIR/bin"
++
++HDF5_DIR="$ISSM_DIR/externalpackages/hdf5/install"
++dylibpathappend "$HDF5_DIR/lib"
++libpathappend "$HDF5_DIR/lib"
++if [ -d "$HDF5_DIR" ]; then
++	export LIBRARY_PATH="$LIBRARY_PATH:$HDF5_DIR/lib"
++	export C_INCLUDE_PATH="$C_INCLUDE_PATH:$HDF5_DIR/include"
++fi
++
++NETCDF_DIR="$ISSM_DIR/externalpackages/netcdf/install"
++pathappend "$NETCDF_DIR/bin"
++dylibpathappend "$NETCDF_DIR/lib"
++libpathappend "$NETCDF_DIR/lib"
++if [ -d "$NETCDF_DIR" ]; then
++	export LIBRARY_PATH="$LIBRARY_PATH:$NETCDF_DIR/lib"
++	dylibpathappend "$NETCDF_DIR/lib"
++	libpathappend "$NETCDF_DIR/lib"
++	export C_INCLUDE_PATH="$C_INCLUDE_PATH:$NETCDF_DIR/include"
++fi
++
++NETCDF_CXX_DIR="$ISSM_DIR/externalpackages/netcdf-cxx/install"
++libpathappend "$NETCDF_CXX_DIR/lib"
++
++SVN_DIR="$ISSM_DIR/externalpackages/svn/install"
++pathprepend   "$SVN_DIR/bin"
++libpathappend "$SVN_DIR/lib"
++
++APR_DIR="$ISSM_DIR/externalpackages/apr/install"
++pathappend    "$APR_DIR/bin"
++libpathappend "$APR_DIR/lib"
++
++APR_UTIL_DIR="$ISSM_DIR/externalpackages/apr-util/install"
++pathappend   "$APR_UTIL_DIR/bin:$PATH"
++libpathappend "$APR_UTIL_DIR/lib"
++
++SQLITE_DIR="$ISSM_DIR/externalpackages/sqlite/install"
++pathappend   "$SQLITE_DIR/bin"
++libpathappend "$SQLITE_DIR/lib"
++
++YAMS_DIR="$ISSM_DIR/externalpackages/yams/install"
++pathappend   "$YAMS_DIR"
++
++SWIG_DIR="$ISSM_DIR/externalpackages/swig/install"
++pathappend   "$SWIG_DIR"
++
++#AUX-CONFIG
++pathappend   "$ISSM_DIR/aux-config"
+Index: ../trunk-jpl/packagers/ubuntu/issmpkg/templates/sampleControl
+===================================================================
+--- ../trunk-jpl/packagers/ubuntu/issmpkg/templates/sampleControl	(revision 0)
++++ ../trunk-jpl/packagers/ubuntu/issmpkg/templates/sampleControl	(revision 16002)
+@@ -0,0 +1,6 @@
++Package: issm-python
++Version: 1.1.3
++Architecture: amd64
++Depends: mpich2, petsc3.2-issm, metis4.0-issm, triangle-bin, libtriangle-dev, python2.7-dev, python-scipy, python-netcdf4, netcdf-bin, python-nose, libnetcdfc++4, hdf5-tools
++Maintainer: issm/jpl (issm@jpl.nasa.gov)
++Description: Ice Sheet System Model, ubuntu/debian package
Index: /issm/oecreview/Archive/15392-16133/ISSM-16002-16003.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16002-16003.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16002-16003.diff	(revision 16134)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/packagers/ubuntu/issm.deb
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-16003-16004.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16003-16004.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16003-16004.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16003)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16004)
+@@ -83,7 +83,7 @@
+ rad=numpy.sqrt(xelem**2+yelem**2)
+ flags=numpy.zeros(md.mesh.numberofelements)
+ pos=numpy.nonzero(rad>=(radius-shelfextent))
+-md.friction.coefficient(md.mesh.elements(pos,:))=0.
++md.friction.coefficient[md.mesh.elements[pos,:]-1]=0.
+ md.friction.p=numpy.ones((md.mesh.numberofelements,1))
+ md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16004-16005.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16004-16005.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16004-16005.diff	(revision 16134)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16004)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16005)
+@@ -19,7 +19,7 @@
+ md.geometry.thickness=hmax+(hmin-hmax)*(radius-ymin)/(ymax-ymin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ 
+-pos=numpy.nonzero(md.mask.vertexongroundedice)
++pos=numpy.nonzero(md.mask.groundedice_levelset>0.)[0]
+ md.geometry.bed[pos]=md.geometry.bed[pos]-300.*(radius[pos]-(rad-shelfextent))/(rad-shelfextent)
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+@@ -70,7 +70,7 @@
+ #Surface mass balance and basal melting
+ md.surfaceforcings.mass_balance=-10.*numpy.ones((md.mesh.numberofvertices,1))
+ md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
+-pos=numpy.nonzero(md.mask.vertexonfloatingice)
++pos=numpy.nonzero(md.mask.groundedice_levelset>0.)[0]
+ md.basalforcings.melting_rate[pos]=10.
+ md.basalforcings.geothermalflux=numpy.ones((md.mesh.numberofvertices,1))
+ 
+@@ -103,7 +103,7 @@
+ #bathymetry and grounding line migration:
+ md.groundingline.migration='AgressiveMigration'
+ md.geometry.bathymetry=copy.deepcopy(md.geometry.bed)
+-pos=numpy.nonzero(md.mask.vertexonfloatingice)
++pos=numpy.nonzero(md.mask.groundedice_levelset<0.)[0]
+ md.geometry.bathymetry[pos]=md.geometry.bed[pos]-900.
+ 
+ #Deal with boundary conditions:
+Index: ../trunk-jpl/src/m/classes/groundingline.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/groundingline.py	(revision 16004)
++++ ../trunk-jpl/src/m/classes/groundingline.py	(revision 16005)
+@@ -46,10 +46,10 @@
+ 		if not strcmp(self.migration,'None'):
+ 			if numpy.any(numpy.isnan(md.geometry.bathymetry)):
+ 				md.checkmessage("requesting grounding line migration, but bathymetry is absent!")
+-			pos=numpy.nonzero(md.mask.groundedice_levelset>0.)
++			pos=numpy.nonzero(md.mask.groundedice_levelset>0.)[0]
+ 			if any(numpy.abs(md.geometry.bed[pos]-md.geometry.bathymetry[pos])>10**-10):
+ 				md.checkmessage("bathymetry not equal to bed on grounded ice!")
+-			pos=numpy.nonzero(md.mask.groundedice_levelset<0.)
++			pos=numpy.nonzero(md.mask.groundedice_levelset<0.)[0]
+ 			if any(md.geometry.bathymetry[pos]-md.geometry.bed[pos]>10**-9):
+ 				md.checkmessage("bathymetry superior to bed on floating ice!")
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16005-16006.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16005-16006.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16005-16006.diff	(revision 16134)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 16005)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 16006)
+@@ -18,7 +18,7 @@
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,2e-07]
++field_tolerances=[1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,2e-07]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 16005)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 16006)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-07};
++field_tolerances={1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-07};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 16005)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 16006)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-08,2e-09,2e-05,5e-09,1e-08};
++field_tolerances={1e-08,2e-09,2e-05,5e-09,1e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 16005)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 16006)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-08,2e-09,2e-05,2e-09,1e-08]
++field_tolerances=[1e-08,2e-09,2e-05,2e-09,1e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-16006-16007.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16006-16007.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16006-16007.diff	(revision 16134)
@@ -0,0 +1,581 @@
+Index: ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 16006)
++++ ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 16007)
+@@ -64,6 +64,13 @@
+ 			_error_("ISSM was not compiled with balanced capabilities. Exiting");
+ 			#endif
+ 			break;
++		case BalancevelocitySolutionEnum:
++			#ifdef _HAVE_BALANCED_
++			solutioncore=&balancevelocity_core;
++			#else
++			_error_("ISSM was not compiled with balanced capabilities. Exiting");
++			#endif
++			break;
+ 		case HydrologySolutionEnum:
+ 			#ifdef _HAVE_HYDROLOGY_
+ 			solutioncore=&hydrology_core;
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16006)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16007)
+@@ -88,6 +88,13 @@
+ 			analyses[0]=BalancethicknessAnalysisEnum;
+ 			break;
+ 
++		case BalancevelocitySolutionEnum:
++			numanalyses=2;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=BalancevelocityAnalysisEnum;
++			analyses[1]=SurfaceSlopeAnalysisEnum;
++			break;
++
+ 		case SurfaceSlopeSolutionEnum:
+ 			numanalyses=1;
+ 			analyses=xNew<int>(numanalyses);
+Index: ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16007)
+@@ -0,0 +1,33 @@
++/*!\file: balancevelocity_core.cpp
++ * \brief: core of the balancevelocity solution 
++ */ 
++
++#include "./analyses.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void balancevelocity_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++
++
++	/*recover parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++
++	if(VerboseSolution()) _printf0_("call computational core:\n");
++	surfaceslope_core(femmodel);
++
++	if(VerboseSolution()) _printf0_("call computational core:\n");
++	femmodel->SetCurrentConfiguration(BalancevelocityAnalysisEnum);
++	solutionsequence_linear(femmodel);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		InputToResultx(femmodel,VelEnum);
++	}
++
++}
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 16006)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 16007)
+@@ -29,6 +29,7 @@
+ void controltao_core(FemModel* femmodel);
+ void masstransport_core(FemModel* femmodel);
+ void balancethickness_core(FemModel* femmodel);
++void balancevelocity_core(FemModel* femmodel);
+ void slopecompute_core(FemModel* femmodel);
+ void steadystate_core(FemModel* femmodel);
+ void transient_core(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16006)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16007)
+@@ -272,6 +272,8 @@
+ 	BalancethicknessSolutionEnum,
+ 	BalancethicknessSoftAnalysisEnum,
+ 	BalancethicknessSoftSolutionEnum,
++	BalancevelocityAnalysisEnum,
++	BalancevelocitySolutionEnum,
+ 	BedSlopeAnalysisEnum,
+ 	BedSlopeSolutionEnum,
+ 	BedSlopeXAnalysisEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16006)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16007)
+@@ -278,6 +278,8 @@
+ 		case BalancethicknessSolutionEnum : return "BalancethicknessSolution";
+ 		case BalancethicknessSoftAnalysisEnum : return "BalancethicknessSoftAnalysis";
+ 		case BalancethicknessSoftSolutionEnum : return "BalancethicknessSoftSolution";
++		case BalancevelocityAnalysisEnum : return "BalancevelocityAnalysis";
++		case BalancevelocitySolutionEnum : return "BalancevelocitySolution";
+ 		case BedSlopeAnalysisEnum : return "BedSlopeAnalysis";
+ 		case BedSlopeSolutionEnum : return "BedSlopeSolution";
+ 		case BedSlopeXAnalysisEnum : return "BedSlopeXAnalysis";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16006)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16007)
+@@ -284,6 +284,8 @@
+ 	      else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
++	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
++	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
+ 	      else if (strcmp(name,"BedSlopeAnalysis")==0) return BedSlopeAnalysisEnum;
+ 	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+ 	      else if (strcmp(name,"BedSlopeXAnalysis")==0) return BedSlopeXAnalysisEnum;
+@@ -380,12 +382,12 @@
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+-	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+-	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Segment")==0) return SegmentEnum;
++	      if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
++	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+-	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+-	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
++	      if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
++	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
++	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp	(revision 16007)
+@@ -0,0 +1,17 @@
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
++
++void	CreateConstraintsBalancevelocity(Constraints** pconstraints, IoModel* iomodel){
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*No constraints for now*/
++	IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancevelocityAnalysisEnum,P1Enum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp	(revision 16007)
+@@ -0,0 +1,20 @@
++/*
++ * CreateNodesBalancevelocity.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesBalancevelocity(Nodes** pnodes, IoModel* iomodel){
++
++	/*Check in 3d*/
++	if(iomodel->dim==3) _error_("DG 3d not implemented yet");
++
++	/*First fetch data: */
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	CreateNodes(pnodes,iomodel,BalancevelocityAnalysisEnum,P1Enum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp	(revision 16007)
+@@ -0,0 +1,37 @@
++/*
++ * UpdateElementsBalancevelocity:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsBalancevelocity(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
++
++	if(iomodel->dim==3){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp	(revision 16007)
+@@ -0,0 +1,13 @@
++/*! \file CreateLoadsBalancevelocity.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsBalancevelocity(Loads** ploads, IoModel* iomodel){
++
++	/*No loads*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16006)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16007)
+@@ -118,6 +118,12 @@
+ void CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel);
+ void UpdateElementsBalancethickness(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
++/*balancedvelocity:*/
++void CreateNodesBalancevelocity(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsBalancevelocity(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsBalancevelocity(Loads** ploads, IoModel* iomodel);
++void UpdateElementsBalancevelocity(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++
+ /*transient: */
+ void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16006)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16007)
+@@ -114,6 +114,9 @@
+ 		case BalancethicknessAnalysisEnum:
+ 			numdofs=1;
+ 			break;
++		case BalancevelocityAnalysisEnum:
++			numdofs=1;
++			break;
+ 		default:
+ 			_error_("analysis type: " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not implemented yet");
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16006)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16007)
+@@ -113,6 +113,12 @@
+ 			CreateLoadsBalancethickness(ploads,iomodel);
+ 			UpdateElementsBalancethickness(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
++		case BalancevelocityAnalysisEnum:
++			CreateNodesBalancevelocity(pnodes, iomodel);
++			CreateConstraintsBalancevelocity(pconstraints,iomodel);
++			CreateLoadsBalancevelocity(ploads,iomodel);
++			UpdateElementsBalancevelocity(elements,iomodel,analysis_counter,analysis_type);
++			break;
+ 		#endif
+ 
+ 		#ifdef _HAVE_GIA_
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16006)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16007)
+@@ -500,7 +500,12 @@
+ 					    ./modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp\
+ 					    ./modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp\
+ 						 ./modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp\
++						 ./modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp\
++						 ./modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp\
++						 ./modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp\
++						 ./modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp\
+ 						 ./analyses/balancethickness_core.cpp \
++						 ./analyses/balancevelocity_core.cpp \
+ 						 ./analyses/dummy_core.cpp
+ #}}}
+ #Slope sources  {{{
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16006)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16007)
+@@ -243,6 +243,9 @@
+ 		case BalancethicknessAnalysisEnum:
+ 			return CreateKMatrixBalancethickness();
+ 			break;
++		case BalancevelocityAnalysisEnum:
++			return CreateKMatrixBalancevelocity();
++			break;
+ 		#endif
+ 		#ifdef _HAVE_CONTROL_
+ 		case AdjointBalancethicknessAnalysisEnum:
+@@ -385,6 +388,9 @@
+ 		case BalancethicknessAnalysisEnum:
+ 			return CreatePVectorBalancethickness();
+ 			break;
++		case BalancevelocityAnalysisEnum:
++			return CreatePVectorBalancevelocity();
++			break;
+ #endif
+ #ifdef _HAVE_CONTROL_
+ 		case AdjointBalancethicknessAnalysisEnum:
+@@ -1599,6 +1605,9 @@
+ 		case BalancethicknessAnalysisEnum:
+ 			InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
+ 			break;
++		case BalancevelocityAnalysisEnum:
++			InputUpdateFromSolutionOneDof(solution,VelEnum);
++			break;
+ 		#endif
+ 		case BedSlopeXAnalysisEnum:
+ 			InputUpdateFromSolutionOneDof(solution,BedSlopeXEnum);
+@@ -7066,7 +7075,7 @@
+ 		vxaverage_input=inputs->GetInput(VxAverageEnum); _assert_(vxaverage_input);
+ 		vyaverage_input=inputs->GetInput(VyAverageEnum); _assert_(vyaverage_input);
+ 	}
+-	h=sqrt(2*this->GetArea());
++	h=sqrt(2.*this->GetArea());
+ 
+ 	/*Start looping on the number of gaussian points:*/
+ 	GaussTria* gauss=new GaussTria(2);
+@@ -7198,6 +7207,94 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreateKMatrixBalancevelocity{{{*/
++ElementMatrix* Tria::CreateKMatrixBalancevelocity(void){
++
++	/*Intermediaries */
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dhdt_g,mb_g,ms_g,Jdettria;
++	IssmDouble h,gamma,thickness;
++	IssmDouble hnx,hny,dhnx[2],dhny[2];
++	int        i,j;
++	IssmDouble D_scalar;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    dbasis = xNew<IssmDouble>(2*numnodes);
++	IssmDouble*    HNx    = xNew<IssmDouble>(numnodes);
++	IssmDouble*    HNy    = xNew<IssmDouble>(numnodes);
++	IssmDouble*    H      = xNew<IssmDouble>(numnodes);
++	IssmDouble*    Nx     = xNew<IssmDouble>(numnodes);
++	IssmDouble*    Ny     = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all Inputs and parameters: */
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* H_input=inputs->GetInput(ThicknessEnum); _assert_(H_input);
++
++	/*Get vector N for all nodes*/
++	GetInputListOnNodes(Nx,SurfaceSlopeXEnum);
++	GetInputListOnNodes(Ny,SurfaceSlopeYEnum);
++	for(int i=0;i<numnodes;i++){
++		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]);
++		Nx[i] = Nx[i]/norm;
++		Ny[i] = Ny[i]/norm;
++	}
++
++	/*Build HNx and HNy*/
++	GetInputListOnNodes(H, ThicknessEnum);
++	for(int i=0;i<numnodes;i++){
++		HNx[i]=H[i]*Nx[i];
++		HNy[i]=H[i]*Ny[i];
++	}
++
++	h=sqrt(2.*this->GetArea());
++
++	/*Start looping on the number of gaussian points:*/
++	GaussTria* gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		H_input->GetInputValue(&thickness,gauss);
++		TriaRef::GetInputDerivativeValue(&dhnx[0],HNx,&xyz_list[0][0],gauss);
++		TriaRef::GetInputDerivativeValue(&dhny[0],HNy,&xyz_list[0][0],gauss);
++		TriaRef::GetInputValue(&hnx,HNx,gauss);
++		TriaRef::GetInputValue(&hny,HNy,gauss);
++
++		gamma=h/(2.*thickness);
++
++		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++		GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
++
++		for(int i=0;i<numnodes;i++){
++			for(int j=0;j<numnodes;j++){
++				Ke->values[i*numnodes+j] = gauss->weight*Jdettria*(
++							basis[i]*basis[j]*(dhnx[0]+dhny[1])
++							+ basis[i]*(dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)
++							+ gamma*(basis[j]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)*
++							(basis[i]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+i]*hnx + dbasis[1*numnodes+i]*hny)
++							);
++			}
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(dbasis);
++	xDelete<IssmDouble>(H);
++	xDelete<IssmDouble>(Nx);
++	xDelete<IssmDouble>(Ny);
++	xDelete<IssmDouble>(HNx);
++	xDelete<IssmDouble>(HNy);
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreatePVectorBalancethickness{{{*/
+ ElementVector* Tria::CreatePVectorBalancethickness(void){
+ 
+@@ -7296,6 +7393,93 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreatePVectorBalancevelocity{{{*/
++ElementVector* Tria::CreatePVectorBalancevelocity(void){
++
++	/*Intermediaries */
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dhdt_g,mb_g,ms_g,Jdettria;
++	IssmDouble h,gamma,thickness;
++	IssmDouble hnx,hny,dhnx[2],dhny[2];
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    dbasis = xNew<IssmDouble>(numnodes*2);
++	IssmDouble*    HNx    = xNew<IssmDouble>(numnodes);
++	IssmDouble*    HNy    = xNew<IssmDouble>(numnodes);
++	IssmDouble*    H      = xNew<IssmDouble>(numnodes);
++	IssmDouble*    Nx     = xNew<IssmDouble>(numnodes);
++	IssmDouble*    Ny     = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* ms_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input);
++	Input* mb_input=inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(mb_input);
++	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);
++	Input* H_input=inputs->GetInput(ThicknessEnum); _assert_(H_input);
++
++	/*Get vector N for all nodes*/
++	GetInputListOnNodes(Nx,SurfaceSlopeXEnum);
++	GetInputListOnNodes(Ny,SurfaceSlopeYEnum);
++	for(int i=0;i<numnodes;i++){
++		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]);
++		Nx[i] = Nx[i]/norm;
++		Ny[i] = Ny[i]/norm;
++	}
++
++	/*Build HNx and HNy*/
++	GetInputListOnNodes(H, ThicknessEnum);
++	for(int i=0;i<numnodes;i++){
++		HNx[i]=H[i]*Nx[i];
++		HNy[i]=H[i]*Ny[i];
++	}
++
++	h=sqrt(2.*this->GetArea());
++
++	/* Start  looping on the number of gaussian points: */
++	GaussTria* gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		ms_input->GetInputValue(&ms_g,gauss);
++		mb_input->GetInputValue(&mb_g,gauss);
++		dhdt_input->GetInputValue(&dhdt_g,gauss);
++		H_input->GetInputValue(&thickness,gauss);
++
++		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++		GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
++
++		TriaRef::GetInputDerivativeValue(&dhnx[0],HNx,&xyz_list[0][0],gauss);
++		TriaRef::GetInputDerivativeValue(&dhny[0],HNy,&xyz_list[0][0],gauss);
++		TriaRef::GetInputValue(&hnx,HNx,gauss);
++		TriaRef::GetInputValue(&hny,HNy,gauss);
++
++		gamma=h/(2.*thickness);
++
++		for(int i=0;i<numnodes;i++){
++			pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*(
++						basis[i] + gamma*(basis[i]*(dhnx[0]+dhny[0])+hnx*dbasis[0] + hny*dbasis[1]));
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(dbasis);
++	xDelete<IssmDouble>(H);
++	xDelete<IssmDouble>(Nx);
++	xDelete<IssmDouble>(Ny);
++	xDelete<IssmDouble>(HNx);
++	xDelete<IssmDouble>(HNy);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef _HAVE_GROUNDINGLINE_
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16006)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16007)
+@@ -182,6 +182,7 @@
+ 		ElementMatrix* CreateKMatrixBalancethickness(void);
+ 		ElementMatrix* CreateKMatrixBalancethickness_DG(void);
+ 		ElementMatrix* CreateKMatrixBalancethickness_CG(void);
++		ElementMatrix* CreateKMatrixBalancevelocity(void);
+ 		ElementMatrix* CreateKMatrixMelting(void);
+ 		ElementMatrix* CreateKMatrixMasstransport(void);
+ 		ElementMatrix* CreateKMatrixMasstransport_CG(void);
+@@ -193,6 +194,7 @@
+ 		ElementVector* CreatePVectorBalancethickness(void);
+ 		ElementVector* CreatePVectorBalancethickness_DG(void);
+ 		ElementVector* CreatePVectorBalancethickness_CG(void);
++		ElementVector* CreatePVectorBalancevelocity(void);
+ 		ElementVector* CreatePVectorMasstransport(void);
+ 		ElementVector* CreatePVectorMasstransport_CG(void);
+ 		ElementVector* CreatePVectorMasstransport_DG(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16007-16008.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16007-16008.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16007-16008.diff	(revision 16134)
@@ -0,0 +1,103 @@
+Index: ../trunk-jpl/src/m/solve/process_solve_options.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.py	(revision 16007)
++++ ../trunk-jpl/src/m/solve/process_solve_options.py	(revision 16008)
+@@ -19,7 +19,8 @@
+ 	solution_type=options.getfieldvalue('solution_type')
+ 	if solution_type not in (StressbalanceSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),\
+ 			SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),\
+-			BalancethicknessSolutionEnum(),BedSlopeSolutionEnum(),SurfaceSlopeSolutionEnum(),\
++			BalancethicknessSolutionEnum(),BalancevelocitySolutionEnum(),\
++			BedSlopeSolutionEnum(),SurfaceSlopeSolutionEnum(),\
+ 			HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()):
+ 		raise ValueError("process_solve_options error message: solution_type '%s' not supported yet!" % EnumToString(solution_type)[0])
+ 	outoptions['solution_type']=solution_type
+Index: ../trunk-jpl/src/m/solve/process_solve_options.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 16007)
++++ ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 16008)
+@@ -10,7 +10,8 @@
+ solution_type=getfieldvalue(options,'solution_type');
+ if ~ismember(solution_type,[StressbalanceSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),...
+ 		SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),...
+-		BalancethicknessSolutionEnum(),BalancethicknessSoftSolutionEnum(),BedSlopeSolutionEnum(),...
++		BalancethicknessSolutionEnum(),BalancethicknessSoftSolutionEnum(),...
++		BalancevelocitySolutionEnum(),BedSlopeSolutionEnum(),...
+ 		SurfaceSlopeSolutionEnum(),HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()]),
+ 	error(['process_solve_options error message: solution_type ' EnumToString(solution_type) ' not supported yet!']);
+ end
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 16007)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 16008)
+@@ -37,6 +37,10 @@
+ 		numanalyses=1 
+ 		analyses=[SurfaceSlopeAnalysisEnum()]
+ 
++	elif solutiontype == BalancevelocitySolutionEnum():
++		numanalyses=1 
++		analyses=[BalancevelocityAnalysisEnum()]
++
+ 	elif solutiontype == BedSlopeSolutionEnum():
+ 		numanalyses=1 
+ 		analyses=[BedSlopeAnalysisEnum()]
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 16007)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 16008)
+@@ -72,6 +72,10 @@
+ 		numanalyses=1; 
+ 		analyses=[BalancethicknessAnalysisEnum()];
+ 
++	case BalancevelocitySolutionEnum(),
++		numanalyses=1; 
++		analyses=[BalancevelocityAnalysisEnum()];
++
+ 	case SurfaceSlopeSolutionEnum(),
+ 		numanalyses=1; 
+ 		analyses=[SurfaceSlopeAnalysisEnum()];
+Index: ../trunk-jpl/src/m/enum/BalancevelocitySolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/BalancevelocitySolutionEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/BalancevelocitySolutionEnum.m	(revision 16008)
+@@ -0,0 +1,11 @@
++function macro=BalancevelocitySolutionEnum()
++%BALANCEVELOCITYSOLUTIONENUM - Enum of BalancevelocitySolution
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=BalancevelocitySolutionEnum()
++
++macro=StringToEnum('BalancevelocitySolution');
+Index: ../trunk-jpl/src/m/enum/BalancevelocityAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/BalancevelocityAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/BalancevelocityAnalysisEnum.m	(revision 16008)
+@@ -0,0 +1,11 @@
++function macro=BalancevelocityAnalysisEnum()
++%BALANCEVELOCITYANALYSISENUM - Enum of BalancevelocityAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=BalancevelocityAnalysisEnum()
++
++macro=StringToEnum('BalancevelocityAnalysis');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16007)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16008)
+@@ -270,6 +270,8 @@
+ def BalancethicknessSolutionEnum(): return StringToEnum("BalancethicknessSolution")[0]
+ def BalancethicknessSoftAnalysisEnum(): return StringToEnum("BalancethicknessSoftAnalysis")[0]
+ def BalancethicknessSoftSolutionEnum(): return StringToEnum("BalancethicknessSoftSolution")[0]
++def BalancevelocityAnalysisEnum(): return StringToEnum("BalancevelocityAnalysis")[0]
++def BalancevelocitySolutionEnum(): return StringToEnum("BalancevelocitySolution")[0]
+ def BedSlopeAnalysisEnum(): return StringToEnum("BedSlopeAnalysis")[0]
+ def BedSlopeSolutionEnum(): return StringToEnum("BedSlopeSolution")[0]
+ def BedSlopeXAnalysisEnum(): return StringToEnum("BedSlopeXAnalysis")[0]
Index: /issm/oecreview/Archive/15392-16133/ISSM-16008-16009.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16008-16009.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16008-16009.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16008)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16009)
+@@ -126,7 +126,8 @@
+ 
+ 		#ifdef _HAVE_THERMAL_
+ 		virtual void UpdateThermalBasalConstraints(void)=0;
+-		virtual void ComputeBasalMeltrate(void)=0;
++		virtual void ComputeBasalMeltingrate(void)=0;
++        virtual void DrainWaterfraction(void)=0;
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
Index: /issm/oecreview/Archive/15392-16133/ISSM-16009-16010.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16009-16010.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16009-16010.diff	(revision 16134)
@@ -0,0 +1,305 @@
+Index: ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16009)
++++ ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16010)
+@@ -19,7 +19,10 @@
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 
+ 	if(VerboseSolution()) _printf0_("call computational core:\n");
+-	surfaceslope_core(femmodel);
++	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeXAnalysisEnum);
++	solutionsequence_linear(femmodel);
++	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeYAnalysisEnum);
++	solutionsequence_linear(femmodel);
+ 
+ 	if(VerboseSolution()) _printf0_("call computational core:\n");
+ 	femmodel->SetCurrentConfiguration(BalancevelocityAnalysisEnum);
+@@ -27,6 +30,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
++		InputToResultx(femmodel,SurfaceSlopeXEnum);
++		InputToResultx(femmodel,SurfaceSlopeYEnum);
+ 		InputToResultx(femmodel,VelEnum);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16009)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16010)
+@@ -300,6 +300,8 @@
+ 	SurfaceSlopeSolutionEnum,
+ 	SurfaceSlopeXAnalysisEnum,
+ 	SurfaceSlopeYAnalysisEnum,
++	SmoothedSurfaceSlopeXAnalysisEnum,
++	SmoothedSurfaceSlopeYAnalysisEnum,
+ 	ThermalAnalysisEnum,
+ 	ThermalSolutionEnum,
+ 	TransientSolutionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16009)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16010)
+@@ -306,6 +306,8 @@
+ 		case SurfaceSlopeSolutionEnum : return "SurfaceSlopeSolution";
+ 		case SurfaceSlopeXAnalysisEnum : return "SurfaceSlopeXAnalysis";
+ 		case SurfaceSlopeYAnalysisEnum : return "SurfaceSlopeYAnalysis";
++		case SmoothedSurfaceSlopeXAnalysisEnum : return "SmoothedSurfaceSlopeXAnalysis";
++		case SmoothedSurfaceSlopeYAnalysisEnum : return "SmoothedSurfaceSlopeYAnalysis";
+ 		case ThermalAnalysisEnum : return "ThermalAnalysis";
+ 		case ThermalSolutionEnum : return "ThermalSolution";
+ 		case TransientSolutionEnum : return "TransientSolution";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16009)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16010)
+@@ -312,6 +312,8 @@
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
++	      else if (strcmp(name,"SmoothedSurfaceSlopeXAnalysis")==0) return SmoothedSurfaceSlopeXAnalysisEnum;
++	      else if (strcmp(name,"SmoothedSurfaceSlopeYAnalysis")==0) return SmoothedSurfaceSlopeYAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+@@ -380,12 +382,12 @@
+ 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+-	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+-	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
++	      if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
++	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
++	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+ 	      else if (strcmp(name,"Segment")==0) return SegmentEnum;
+ 	      else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+-	      else if (strcmp(name,"P2")==0) return P2Enum;
+-	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
++	      if (strcmp(name,"P2")==0) return P2Enum;
++	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
++	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
+ 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
+ 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16009)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16010)
+@@ -246,6 +246,9 @@
+ 		case BalancevelocityAnalysisEnum:
+ 			return CreateKMatrixBalancevelocity();
+ 			break;
++		case SmoothedSurfaceSlopeXAnalysisEnum: case SmoothedSurfaceSlopeYAnalysisEnum:
++			return CreateKMatrixSmoothedSlope();
++			break;
+ 		#endif
+ 		#ifdef _HAVE_CONTROL_
+ 		case AdjointBalancethicknessAnalysisEnum:
+@@ -391,6 +394,12 @@
+ 		case BalancevelocityAnalysisEnum:
+ 			return CreatePVectorBalancevelocity();
+ 			break;
++		case SmoothedSurfaceSlopeXAnalysisEnum:
++			return CreatePVectorSmoothedSlopeX();
++			break;
++		case SmoothedSurfaceSlopeYAnalysisEnum:
++			return CreatePVectorSmoothedSlopeY();
++			break;
+ #endif
+ #ifdef _HAVE_CONTROL_
+ 		case AdjointBalancethicknessAnalysisEnum:
+@@ -1608,6 +1617,12 @@
+ 		case BalancevelocityAnalysisEnum:
+ 			InputUpdateFromSolutionOneDof(solution,VelEnum);
+ 			break;
++		case SmoothedSurfaceSlopeXAnalysisEnum:
++			InputUpdateFromSolutionOneDof(solution,SurfaceSlopeXEnum);
++			break;
++		case SmoothedSurfaceSlopeYAnalysisEnum:
++			InputUpdateFromSolutionOneDof(solution,SurfaceSlopeYEnum);
++			break;
+ 		#endif
+ 		case BedSlopeXAnalysisEnum:
+ 			InputUpdateFromSolutionOneDof(solution,BedSlopeXEnum);
+@@ -7295,6 +7310,54 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreateKMatrixSmoothedSlope {{{*/
++ElementMatrix* Tria::CreateKMatrixSmoothedSlope(void){
++
++	/* Intermediaries */
++	IssmDouble D_scalar,Jdet,thickness;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble D[2][2];
++	IssmDouble l=12.;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke    = CreateMassMatrix();
++	IssmDouble*    B     = xNew<IssmDouble>(2*numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
++
++	/* Start looping on the number of gaussian points: */
++	GaussTria* gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetBMasstransport(B,&xyz_list[0][0], gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		thickness_input->GetInputValue(&thickness,gauss);
++
++		D_scalar=gauss->weight*Jdet*(l*thickness)*(l*thickness);
++		D[0][0]=D_scalar;
++	   D[1][0]=0.;
++		D[0][1]=0.;
++		D[1][1]=D_scalar;
++
++		TripleMultiply(B,2,numnodes,1,
++					&D[0][0],2,2,0,
++					B,2,numnodes,0,
++					&Ke->values[0],1);
++	}
++
++	/*Clean up and return*/
++	delete gauss;
++	xDelete<IssmDouble>(B);
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreatePVectorBalancethickness{{{*/
+ ElementVector* Tria::CreatePVectorBalancethickness(void){
+ 
+@@ -7480,6 +7543,92 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreatePVectorSmoothedSlopeX{{{*/
++ElementVector* Tria::CreatePVectorSmoothedSlopeX(void){
++
++	/*Intermediaries */
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdettria;
++	IssmDouble thickness,slope[2];
++	IssmDouble taud_x;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* H_input       = inputs->GetInput(ThicknessEnum); _assert_(H_input);
++	Input* surface_input = inputs->GetInput(SurfaceEnum);   _assert_(surface_input);
++
++	/* Start  looping on the number of gaussian points: */
++	GaussTria* gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		H_input->GetInputValue(&thickness,gauss);
++		surface_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
++		taud_x = matpar->GetRhoIce()*matpar->GetG()*thickness*slope[0];
++
++		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*taud_x*basis[i];
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Tria::CreatePVectorSmoothedSlopeY{{{*/
++ElementVector* Tria::CreatePVectorSmoothedSlopeY(void){
++
++	/*Intermediaries */
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdettria;
++	IssmDouble thickness,slope[2];
++	IssmDouble taud_y;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* H_input       = inputs->GetInput(ThicknessEnum); _assert_(H_input);
++	Input* surface_input = inputs->GetInput(SurfaceEnum);   _assert_(surface_input);
++
++	/* Start  looping on the number of gaussian points: */
++	GaussTria* gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		H_input->GetInputValue(&thickness,gauss);
++		surface_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
++		taud_y = matpar->GetRhoIce()*matpar->GetG()*thickness*slope[1];
++
++		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*taud_y*basis[i];
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef _HAVE_GROUNDINGLINE_
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16009)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16010)
+@@ -183,6 +183,7 @@
+ 		ElementMatrix* CreateKMatrixBalancethickness_DG(void);
+ 		ElementMatrix* CreateKMatrixBalancethickness_CG(void);
+ 		ElementMatrix* CreateKMatrixBalancevelocity(void);
++		ElementMatrix* CreateKMatrixSmoothedSlope(void);
+ 		ElementMatrix* CreateKMatrixMelting(void);
+ 		ElementMatrix* CreateKMatrixMasstransport(void);
+ 		ElementMatrix* CreateKMatrixMasstransport_CG(void);
+@@ -195,6 +196,8 @@
+ 		ElementVector* CreatePVectorBalancethickness_DG(void);
+ 		ElementVector* CreatePVectorBalancethickness_CG(void);
+ 		ElementVector* CreatePVectorBalancevelocity(void);
++		ElementVector* CreatePVectorSmoothedSlopeX(void);
++		ElementVector* CreatePVectorSmoothedSlopeY(void);
+ 		ElementVector* CreatePVectorMasstransport(void);
+ 		ElementVector* CreatePVectorMasstransport_CG(void);
+ 		ElementVector* CreatePVectorMasstransport_DG(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16010-16011.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16010-16011.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16010-16011.diff	(revision 16134)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/m/enum/SmoothedSurfaceSlopeXAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SmoothedSurfaceSlopeXAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SmoothedSurfaceSlopeXAnalysisEnum.m	(revision 16011)
+@@ -0,0 +1,11 @@
++function macro=SmoothedSurfaceSlopeXAnalysisEnum()
++%SMOOTHEDSURFACESLOPEXANALYSISENUM - Enum of SmoothedSurfaceSlopeXAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SmoothedSurfaceSlopeXAnalysisEnum()
++
++macro=StringToEnum('SmoothedSurfaceSlopeXAnalysis');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16010)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16011)
+@@ -298,6 +298,8 @@
+ def SurfaceSlopeSolutionEnum(): return StringToEnum("SurfaceSlopeSolution")[0]
+ def SurfaceSlopeXAnalysisEnum(): return StringToEnum("SurfaceSlopeXAnalysis")[0]
+ def SurfaceSlopeYAnalysisEnum(): return StringToEnum("SurfaceSlopeYAnalysis")[0]
++def SmoothedSurfaceSlopeXAnalysisEnum(): return StringToEnum("SmoothedSurfaceSlopeXAnalysis")[0]
++def SmoothedSurfaceSlopeYAnalysisEnum(): return StringToEnum("SmoothedSurfaceSlopeYAnalysis")[0]
+ def ThermalAnalysisEnum(): return StringToEnum("ThermalAnalysis")[0]
+ def ThermalSolutionEnum(): return StringToEnum("ThermalSolution")[0]
+ def TransientSolutionEnum(): return StringToEnum("TransientSolution")[0]
+Index: ../trunk-jpl/src/m/enum/SmoothedSurfaceSlopeYAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SmoothedSurfaceSlopeYAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SmoothedSurfaceSlopeYAnalysisEnum.m	(revision 16011)
+@@ -0,0 +1,11 @@
++function macro=SmoothedSurfaceSlopeYAnalysisEnum()
++%SMOOTHEDSURFACESLOPEYANALYSISENUM - Enum of SmoothedSurfaceSlopeYAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SmoothedSurfaceSlopeYAnalysisEnum()
++
++macro=StringToEnum('SmoothedSurfaceSlopeYAnalysis');
Index: /issm/oecreview/Archive/15392-16133/ISSM-16011-16012.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16011-16012.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16011-16012.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16011)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16012)
+@@ -7527,7 +7527,8 @@
+ 
+ 		for(int i=0;i<numnodes;i++){
+ 			pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*(
+-						basis[i] + gamma*(basis[i]*(dhnx[0]+dhny[0])+hnx*dbasis[0] + hny*dbasis[1]));
++						basis[i] + gamma*(basis[i]*(dhnx[0]+dhny[1])+hnx*dbasis[0] + hny*dbasis[1])
++						);
+ 		}
+ 	}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16012-16013.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16012-16013.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16012-16013.diff	(revision 16134)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16012)
++++ ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16013)
+@@ -19,10 +19,11 @@
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 
+ 	if(VerboseSolution()) _printf0_("call computational core:\n");
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeXAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeYAnalysisEnum);
+-	solutionsequence_linear(femmodel);
++	//femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeXAnalysisEnum);
++	//solutionsequence_linear(femmodel);
++	//femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeYAnalysisEnum);
++	//solutionsequence_linear(femmodel);
++	surfaceslope_core(femmodel);
+ 
+ 	if(VerboseSolution()) _printf0_("call computational core:\n");
+ 	femmodel->SetCurrentConfiguration(BalancevelocityAnalysisEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16012)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16013)
+@@ -991,7 +991,7 @@
+ 	vector[0]=xyz_list[1][0] - xyz_list[0][0];
+ 	vector[1]=xyz_list[1][1] - xyz_list[0][1];
+ 
+-	norm=sqrt(pow(vector[0],2.0)+pow(vector[1],2.0));
++	norm=sqrt(vector[0]*vector[0] + vector[1]*vector[1]);
+ 
+ 	normal[0]= + vector[1]/norm;
+ 	normal[1]= - vector[0]/norm;
+@@ -7254,13 +7254,13 @@
+ 	GetInputListOnNodes(Nx,SurfaceSlopeXEnum);
+ 	GetInputListOnNodes(Ny,SurfaceSlopeYEnum);
+ 	for(int i=0;i<numnodes;i++){
+-		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]);
++		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]+1.e-10);
+ 		Nx[i] = Nx[i]/norm;
+ 		Ny[i] = Ny[i]/norm;
+ 	}
+ 
+ 	/*Build HNx and HNy*/
+-	GetInputListOnNodes(H, ThicknessEnum);
++	GetInputListOnNodes(H,ThicknessEnum);
+ 	for(int i=0;i<numnodes;i++){
+ 		HNx[i]=H[i]*Nx[i];
+ 		HNy[i]=H[i]*Ny[i];
+@@ -7291,7 +7291,7 @@
+ 				Ke->values[i*numnodes+j] = gauss->weight*Jdettria*(
+ 							basis[i]*basis[j]*(dhnx[0]+dhny[1])
+ 							+ basis[i]*(dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)
+-							+ gamma*(basis[j]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)*
++							+ gamma*(basis[j]*(dhnx[0]+dhny[1])  + dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)*
+ 							(basis[i]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+i]*hnx + dbasis[1*numnodes+i]*hny)
+ 							);
+ 			}
+@@ -7489,13 +7489,13 @@
+ 	GetInputListOnNodes(Nx,SurfaceSlopeXEnum);
+ 	GetInputListOnNodes(Ny,SurfaceSlopeYEnum);
+ 	for(int i=0;i<numnodes;i++){
+-		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]);
++		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]+1.e-10);
+ 		Nx[i] = Nx[i]/norm;
+ 		Ny[i] = Ny[i]/norm;
+ 	}
+ 
+ 	/*Build HNx and HNy*/
+-	GetInputListOnNodes(H, ThicknessEnum);
++	GetInputListOnNodes(H,ThicknessEnum);
+ 	for(int i=0;i<numnodes;i++){
+ 		HNx[i]=H[i]*Nx[i];
+ 		HNy[i]=H[i]*Ny[i];
Index: /issm/oecreview/Archive/15392-16133/ISSM-16013-16014.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16013-16014.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16013-16014.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16013)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16014)
+@@ -126,8 +126,8 @@
+ 
+ 		#ifdef _HAVE_THERMAL_
+ 		virtual void UpdateThermalBasalConstraints(void)=0;
+-		virtual void ComputeBasalMeltingrate(void)=0;
+-        virtual void DrainWaterfraction(void)=0;
++		//virtual void ComputeBasalMeltingrate(void)=0;
++		//virtual void DrainWaterfraction(void)=0;
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
Index: /issm/oecreview/Archive/15392-16133/ISSM-16014-16015.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16014-16015.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16014-16015.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16014)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16015)
+@@ -7288,7 +7288,7 @@
+ 
+ 		for(int i=0;i<numnodes;i++){
+ 			for(int j=0;j<numnodes;j++){
+-				Ke->values[i*numnodes+j] = gauss->weight*Jdettria*(
++				Ke->values[i*numnodes+j] += gauss->weight*Jdettria*(
+ 							basis[i]*basis[j]*(dhnx[0]+dhny[1])
+ 							+ basis[i]*(dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)
+ 							+ gamma*(basis[j]*(dhnx[0]+dhny[1])  + dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)*
Index: /issm/oecreview/Archive/15392-16133/ISSM-16015-16016.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16015-16016.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16015-16016.diff	(revision 16134)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16015)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16016)
+@@ -7275,12 +7275,13 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		H_input->GetInputValue(&thickness,gauss);
++		if(thickness<50.) thickness=50.;
+ 		TriaRef::GetInputDerivativeValue(&dhnx[0],HNx,&xyz_list[0][0],gauss);
+ 		TriaRef::GetInputDerivativeValue(&dhny[0],HNy,&xyz_list[0][0],gauss);
+ 		TriaRef::GetInputValue(&hnx,HNx,gauss);
+ 		TriaRef::GetInputValue(&hny,HNy,gauss);
+ 
+-		gamma=h/(2.*thickness);
++		gamma=h/(2.*thickness+1.e-10);
+ 
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+@@ -7289,10 +7290,8 @@
+ 		for(int i=0;i<numnodes;i++){
+ 			for(int j=0;j<numnodes;j++){
+ 				Ke->values[i*numnodes+j] += gauss->weight*Jdettria*(
+-							basis[i]*basis[j]*(dhnx[0]+dhny[1])
+-							+ basis[i]*(dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)
+-							+ gamma*(basis[j]*(dhnx[0]+dhny[1])  + dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)*
+-							(basis[i]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+i]*hnx + dbasis[1*numnodes+i]*hny)
++							(basis[i]+gamma*(basis[i]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+i]*hnx + dbasis[1*numnodes+i]*hny))*
++							(basis[j]*(dhnx[0]+dhny[1])  + dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)
+ 							);
+ 			}
+ 		}
+@@ -7513,6 +7512,7 @@
+ 		mb_input->GetInputValue(&mb_g,gauss);
+ 		dhdt_input->GetInputValue(&dhdt_g,gauss);
+ 		H_input->GetInputValue(&thickness,gauss);
++		if(thickness<50.) thickness=50.;
+ 
+ 		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+@@ -7523,11 +7523,11 @@
+ 		TriaRef::GetInputValue(&hnx,HNx,gauss);
+ 		TriaRef::GetInputValue(&hny,HNy,gauss);
+ 
+-		gamma=h/(2.*thickness);
++		gamma=h/(2.*thickness+1.e-10);
+ 
+ 		for(int i=0;i<numnodes;i++){
+ 			pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*(
+-						basis[i] + gamma*(basis[i]*(dhnx[0]+dhny[1])+hnx*dbasis[0] + hny*dbasis[1])
++						basis[i] + gamma*(basis[i]*(dhnx[0]+dhny[1])+hnx*dbasis[0*numnodes+i] + hny*dbasis[1*numnodes+i])
+ 						);
+ 		}
+ 	}
Index: /issm/oecreview/Archive/15392-16133/ISSM-16016-16017.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16016-16017.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16016-16017.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16016)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16017)
+@@ -7255,8 +7255,8 @@
+ 	GetInputListOnNodes(Ny,SurfaceSlopeYEnum);
+ 	for(int i=0;i<numnodes;i++){
+ 		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]+1.e-10);
+-		Nx[i] = Nx[i]/norm;
+-		Ny[i] = Ny[i]/norm;
++		Nx[i] = -Nx[i]/norm;
++		Ny[i] = -Ny[i]/norm;
+ 	}
+ 
+ 	/*Build HNx and HNy*/
+@@ -7489,8 +7489,8 @@
+ 	GetInputListOnNodes(Ny,SurfaceSlopeYEnum);
+ 	for(int i=0;i<numnodes;i++){
+ 		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]+1.e-10);
+-		Nx[i] = Nx[i]/norm;
+-		Ny[i] = Ny[i]/norm;
++		Nx[i] = -Nx[i]/norm;
++		Ny[i] = -Ny[i]/norm;
+ 	}
+ 
+ 	/*Build HNx and HNy*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-16017-16018.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16017-16018.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16017-16018.diff	(revision 16134)
@@ -0,0 +1,107 @@
+Index: ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16017)
++++ ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16018)
+@@ -18,12 +18,12 @@
+ 	/*recover parameters: */
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 
+-	if(VerboseSolution()) _printf0_("call computational core:\n");
+-	//femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeXAnalysisEnum);
+-	//solutionsequence_linear(femmodel);
+-	//femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeYAnalysisEnum);
+-	//solutionsequence_linear(femmodel);
+-	surfaceslope_core(femmodel);
++	if(VerboseSolution()) _printf0_("computing smoothed slopes:\n");
++	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeXAnalysisEnum);
++	solutionsequence_linear(femmodel);
++	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeYAnalysisEnum);
++	solutionsequence_linear(femmodel);
++	//surfaceslope_core(femmodel);
+ 
+ 	if(VerboseSolution()) _printf0_("call computational core:\n");
+ 	femmodel->SetCurrentConfiguration(BalancevelocityAnalysisEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16017)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16018)
+@@ -7230,14 +7230,16 @@
+ 	IssmDouble dhdt_g,mb_g,ms_g,Jdettria;
+ 	IssmDouble h,gamma,thickness;
+ 	IssmDouble hnx,hny,dhnx[2],dhny[2];
+-	int        i,j;
+-	IssmDouble D_scalar;
++	IssmDouble vel,vx,vy,dvxdx,dvydy;
++	IssmDouble D[2][2];
++	int        stabilization=1;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    B      = xNew<IssmDouble>(2*numnodes);
+ 	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+ 	IssmDouble*    dbasis = xNew<IssmDouble>(2*numnodes);
+ 	IssmDouble*    HNx    = xNew<IssmDouble>(numnodes);
+@@ -7295,6 +7297,35 @@
+ 							);
+ 			}
+ 		}
++
++		vx=hnx;
++		vy=hny;
++		if(stabilization==2){
++			/*Streamline upwinding*/
++			vel=sqrt(vx*vx+vy*vy)+1.e-8;
++			D[0][0]=h/(2*vel)*vx*vx;
++			D[1][0]=h/(2*vel)*vy*vx;
++			D[0][1]=h/(2*vel)*vx*vy;
++			D[1][1]=h/(2*vel)*vy*vy;
++		}
++		else if(stabilization==1){
++			/*MacAyeal*/
++			D[0][0]=h/2.0*fabs(vx);
++			D[0][1]=0.;
++			D[1][0]=0.;
++			D[1][1]=h/2.0*fabs(vy);
++		}
++		if(stabilization==1 || stabilization==2){
++			GetBprimeMasstransport(B,&xyz_list[0][0],gauss);
++			D[0][0]=gauss->weight*Jdettria*D[0][0];
++			D[1][0]=gauss->weight*Jdettria*D[1][0];
++			D[0][1]=gauss->weight*Jdettria*D[0][1];
++			D[1][1]=gauss->weight*Jdettria*D[1][1];
++			TripleMultiply(B,2,numnodes,1,
++						&D[0][0],2,2,0,
++						B,2,numnodes,0,
++						&Ke->values[0],1);
++		}
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -7305,6 +7336,7 @@
+ 	xDelete<IssmDouble>(Ny);
+ 	xDelete<IssmDouble>(HNx);
+ 	xDelete<IssmDouble>(HNy);
++	xDelete<IssmDouble>(B);
+ 	delete gauss;
+ 	return Ke;
+ }
+@@ -7316,7 +7348,7 @@
+ 	IssmDouble D_scalar,Jdet,thickness;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble D[2][2];
+-	IssmDouble l=12.;
++	IssmDouble l=15.;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -7338,6 +7370,7 @@
+ 		GetBMasstransport(B,&xyz_list[0][0], gauss);
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		thickness_input->GetInputValue(&thickness,gauss);
++		if(thickness<50.) thickness=50.;
+ 
+ 		D_scalar=gauss->weight*Jdet*(l*thickness)*(l*thickness);
+ 		D[0][0]=D_scalar;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16018-16019.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16018-16019.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16018-16019.diff	(revision 16134)
@@ -0,0 +1,588 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16018)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16019)
+@@ -5586,7 +5586,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble diffusivity;
+-	IssmDouble Jdettria,D_scalar,dt,h;
++	IssmDouble Jdet,D_scalar,dt,h;
+ 	IssmDouble vx,vy,vel,dvxdx,dvydy;
+ 	IssmDouble dvx[2],dvy[2];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -5621,7 +5621,7 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+ 		vx_input->GetInputValue(&vx,gauss);
+@@ -5629,7 +5629,7 @@
+ 		vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
+ 		vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
+ 
+-		D_scalar=gauss->weight*Jdettria;
++		D_scalar=gauss->weight*Jdet;
+ 
+ 		TripleMultiply(basis,1,numnodes,1,
+ 					&D_scalar,1,1,0,
+@@ -5641,7 +5641,7 @@
+ 
+ 		dvxdx=dvx[0];
+ 		dvydy=dvy[1];
+-		D_scalar=dt*gauss->weight*Jdettria;
++		D_scalar=dt*gauss->weight*Jdet;
+ 
+ 		D[0][0]=D_scalar*dvxdx;
+ 		D[0][1]=0.;
+@@ -5811,7 +5811,7 @@
+ 
+ 	/*Intermediaries */
+ 	int        i;
+-	IssmDouble Jdettria,dt;
++	IssmDouble Jdet,dt;
+ 	IssmDouble basal_melting_g;
+ 	IssmDouble old_watercolumn_g;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -5839,17 +5839,17 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis, gauss);
+ 
+ 		basal_melting_input->GetInputValue(&basal_melting_g,gauss);
+ 		old_watercolumn_input->GetInputValue(&old_watercolumn_g,gauss);
+ 
+ 		if(reCast<int,IssmDouble>(dt)){
+-			for(i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(old_watercolumn_g+dt*basal_melting_g)*basis[i];
++			for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(old_watercolumn_g+dt*basal_melting_g)*basis[i];
+ 		}
+ 		else{
+-			for(i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*basal_melting_g*basis[i];
++			for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*basal_melting_g*basis[i];
+ 		}
+ 	}
+ 
+@@ -6310,7 +6310,7 @@
+ 	/*Intermediaries */
+ 	int        stabilization;
+ 	int        dim;
+-	IssmDouble Jdettria,D_scalar,dt,h;
++	IssmDouble Jdet,D_scalar,dt,h;
+ 	IssmDouble vel,vx,vy,dvxdx,dvydy;
+ 	IssmDouble dvx[2],dvy[2];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -6348,7 +6348,7 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+ 		vxaverage_input->GetInputValue(&vx,gauss);
+@@ -6356,7 +6356,7 @@
+ 		vxaverage_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
+ 		vyaverage_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
+ 
+-		D_scalar=gauss->weight*Jdettria;
++		D_scalar=gauss->weight*Jdet;
+ 
+ 		TripleMultiply(basis,1,numnodes,1,
+ 					&D_scalar,1,1,0,
+@@ -6368,7 +6368,7 @@
+ 
+ 		dvxdx=dvx[0];
+ 		dvydy=dvy[1];
+-		D_scalar=dt*gauss->weight*Jdettria;
++		D_scalar=dt*gauss->weight*Jdet;
+ 
+ 		D[0][0]=D_scalar*dvxdx;
+ 		D[0][1]=0.;
+@@ -6429,7 +6429,7 @@
+ 	/*Intermediaries */
+ 	int        dim;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble Jdettria,D_scalar,dt,vx,vy;
++	IssmDouble Jdet,D_scalar,dt,vx,vy;
+ 
+ 	/*Fetch number of nodes for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -6465,10 +6465,10 @@
+ 		vxaverage_input->GetInputValue(&vx,gauss);
+ 		vyaverage_input->GetInputValue(&vy,gauss);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		D_scalar=gauss->weight*Jdettria;
++		D_scalar=gauss->weight*Jdet;
+ 
+ 		TripleMultiply(basis,1,numnodes,1,
+ 					&D_scalar,1,1,0,
+@@ -6479,7 +6479,7 @@
+ 		GetBMasstransport(Bprime, &xyz_list[0][0], gauss);
+ 		GetBprimeMasstransport(B, &xyz_list[0][0], gauss);
+ 
+-		D_scalar=-dt*gauss->weight*Jdettria;
++		D_scalar=-dt*gauss->weight*Jdet;
+ 		D[0][0]=D_scalar*vx;
+ 		D[0][1]=0.;
+ 		D[1][0]=0.;
+@@ -6505,7 +6505,7 @@
+ 	/*Intermediaries */
+ 	int        stabilization;
+ 	int        dim;
+-	IssmDouble Jdettria,D_scalar,dt,h;
++	IssmDouble Jdet,D_scalar,dt,h;
+ 	IssmDouble vel,vx,vy;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -6533,13 +6533,13 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 
+-		D_scalar=gauss->weight*Jdettria;
++		D_scalar=gauss->weight*Jdet;
+ 
+ 		TripleMultiply(basis,1,numnodes,1,
+ 					&D_scalar,1,1,0,
+@@ -6549,7 +6549,7 @@
+ 		GetBMasstransport(B,&xyz_list[0][0],gauss);
+ 		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
+ 
+-		D_scalar=dt*gauss->weight*Jdettria;
++		D_scalar=dt*gauss->weight*Jdet;
+ 
+ 		D[0][0]=D_scalar*vx;
+ 		D[0][1]=0.;
+@@ -6603,7 +6603,7 @@
+ 	/*Intermediaries */
+ 	int        stabilization;
+ 	int        dim;
+-	IssmDouble Jdettria,D_scalar,dt,h;
++	IssmDouble Jdet,D_scalar,dt,h;
+ 	IssmDouble vel,vx,vy;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -6631,13 +6631,13 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 
+-		D_scalar=gauss->weight*Jdettria;
++		D_scalar=gauss->weight*Jdet;
+ 
+ 		TripleMultiply(basis,1,numnodes,1,
+ 					&D_scalar,1,1,0,
+@@ -6647,7 +6647,7 @@
+ 		GetBMasstransport(B,&xyz_list[0][0],gauss);
+ 		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
+ 
+-		D_scalar=dt*gauss->weight*Jdettria;
++		D_scalar=dt*gauss->weight*Jdet;
+ 
+ 		D[0][0]=D_scalar*vx;
+ 		D[0][1]=0.;
+@@ -6712,7 +6712,7 @@
+ ElementVector* Tria::CreatePVectorMasstransport_CG(void){
+ 
+ 	/*Intermediaries */
+-	IssmDouble Jdettria,dt;
++	IssmDouble Jdet,dt;
+ 	IssmDouble ms,mb,mb_correction,thickness;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -6738,7 +6738,7 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+ 		ms_input->GetInputValue(&ms,gauss);
+@@ -6749,7 +6749,7 @@
+ 		else
+ 		 mb_correction=0.;
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness+dt*(ms-mb-mb_correction))*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(thickness+dt*(ms-mb-mb_correction))*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -6762,7 +6762,7 @@
+ ElementVector* Tria::CreatePVectorMasstransport_DG(void){
+ 
+ 	/*Intermediaries */
+-	IssmDouble Jdettria,dt;
++	IssmDouble Jdet,dt;
+ 	IssmDouble ms,mb,thickness;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -6786,14 +6786,14 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+ 		ms_input->GetInputValue(&ms,gauss);
+ 		mb_input->GetInputValue(&mb,gauss);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness+dt*(ms-mb))*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(thickness+dt*(ms-mb))*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -6806,7 +6806,7 @@
+ ElementVector* Tria::CreatePVectorFreeSurfaceTop(void){
+ 
+ 	/*Intermediaries */
+-	IssmDouble Jdettria,dt;
++	IssmDouble Jdet,dt;
+ 	IssmDouble ms,surface,vz;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -6831,14 +6831,14 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+ 		vz_input->GetInputValue(&vz,gauss);
+ 		ms_input->GetInputValue(&ms,gauss);
+ 		surface_input->GetInputValue(&surface,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(surface + dt*ms + dt*vz)*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(surface + dt*ms + dt*vz)*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -6851,7 +6851,7 @@
+ ElementVector* Tria::CreatePVectorFreeSurfaceBase(void){
+ 
+ 	/*Intermediaries */
+-	IssmDouble Jdettria,dt;
++	IssmDouble Jdet,dt;
+ 	IssmDouble mb,mb_correction,bed,vz;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -6877,7 +6877,7 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+ 		vz_input->GetInputValue(&vz,gauss);
+@@ -6888,7 +6888,7 @@
+ 		else
+ 		 mb_correction=0.;
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(bed+dt*(mb-mb_correction) + dt*vz)*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(bed+dt*(mb-mb_correction) + dt*vz)*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -7061,7 +7061,7 @@
+ 	/*Intermediaries */
+ 	int        stabilization;
+ 	int        i,j,dim;
+-	IssmDouble Jdettria,vx,vy,dvxdx,dvydy,vel,h;
++	IssmDouble Jdet,vx,vy,dvxdx,dvydy,vel,h;
+ 	IssmDouble D_scalar;
+ 	IssmDouble dvx[2],dvy[2];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -7098,7 +7098,7 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetBMasstransport(B,&xyz_list[0][0],gauss);
+ 		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
+ 
+@@ -7109,7 +7109,7 @@
+ 
+ 		dvxdx=dvx[0];
+ 		dvydy=dvy[1];
+-		D_scalar=gauss->weight*Jdettria;
++		D_scalar=gauss->weight*Jdet;
+ 
+ 		D[0][0]=D_scalar*dvxdx;
+ 		D[0][1]=0.;
+@@ -7169,7 +7169,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int        dim;
+-	IssmDouble vx,vy,D_scalar,Jdettria;
++	IssmDouble vx,vy,D_scalar,Jdet;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Fetch number of nodes for this finite element*/
+@@ -7194,7 +7194,7 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		/*WARNING: B and Bprime are inverted compared to usual masstransport!!!!*/
+ 		GetBMasstransport(Bprime,&xyz_list[0][0],gauss);
+ 		GetBprimeMasstransport(B,&xyz_list[0][0],gauss);
+@@ -7202,7 +7202,7 @@
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 
+-		D_scalar=-gauss->weight*Jdettria;
++		D_scalar=-gauss->weight*Jdet;
+ 		D[0][0]=D_scalar*vx;
+ 		D[0][1]=0.;
+ 		D[1][0]=0.;
+@@ -7227,12 +7227,12 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble dhdt_g,mb_g,ms_g,Jdettria;
++	IssmDouble dhdt_g,mb_g,ms_g,Jdet;
+ 	IssmDouble h,gamma,thickness;
+ 	IssmDouble hnx,hny,dhnx[2],dhny[2];
+ 	IssmDouble vel,vx,vy,dvxdx,dvydy;
+ 	IssmDouble D[2][2];
+-	int        stabilization=1;
++	int        stabilization=0;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -7285,13 +7285,13 @@
+ 
+ 		gamma=h/(2.*thickness+1.e-10);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 		GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
+ 
+ 		for(int i=0;i<numnodes;i++){
+ 			for(int j=0;j<numnodes;j++){
+-				Ke->values[i*numnodes+j] += gauss->weight*Jdettria*(
++				Ke->values[i*numnodes+j] += gauss->weight*Jdet*(
+ 							(basis[i]+gamma*(basis[i]*(dhnx[0]+dhny[1]) + dbasis[0*numnodes+i]*hnx + dbasis[1*numnodes+i]*hny))*
+ 							(basis[j]*(dhnx[0]+dhny[1])  + dbasis[0*numnodes+j]*hnx + dbasis[1*numnodes+j]*hny)
+ 							);
+@@ -7317,10 +7317,10 @@
+ 		}
+ 		if(stabilization==1 || stabilization==2){
+ 			GetBprimeMasstransport(B,&xyz_list[0][0],gauss);
+-			D[0][0]=gauss->weight*Jdettria*D[0][0];
+-			D[1][0]=gauss->weight*Jdettria*D[1][0];
+-			D[0][1]=gauss->weight*Jdettria*D[0][1];
+-			D[1][1]=gauss->weight*Jdettria*D[1][1];
++			D[0][0]=gauss->weight*Jdet*D[0][0];
++			D[1][0]=gauss->weight*Jdet*D[1][0];
++			D[0][1]=gauss->weight*Jdet*D[0][1];
++			D[1][1]=gauss->weight*Jdet*D[1][1];
+ 			TripleMultiply(B,2,numnodes,1,
+ 						&D[0][0],2,2,0,
+ 						B,2,numnodes,0,
+@@ -7348,14 +7348,15 @@
+ 	IssmDouble D_scalar,Jdet,thickness;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble D[2][2];
+-	IssmDouble l=15.;
++	IssmDouble l=12.;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+ 
+ 	/*Initialize Element matrix and vectors*/
+-	ElementMatrix* Ke    = CreateMassMatrix();
+-	IssmDouble*    B     = xNew<IssmDouble>(2*numnodes);
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters);
++	IssmDouble*    dbasis = xNew<IssmDouble>(2*numnodes);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+@@ -7367,26 +7368,27 @@
+ 
+ 		gauss->GaussPoint(ig);
+ 
+-		GetBMasstransport(B,&xyz_list[0][0], gauss);
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 		if(thickness<50.) thickness=50.;
+ 
+-		D_scalar=gauss->weight*Jdet*(l*thickness)*(l*thickness);
+-		D[0][0]=D_scalar;
+-	   D[1][0]=0.;
+-		D[0][1]=0.;
+-		D[1][1]=D_scalar;
++		GetNodalFunctions(basis,gauss);
++		GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
+ 
+-		TripleMultiply(B,2,numnodes,1,
+-					&D[0][0],2,2,0,
+-					B,2,numnodes,0,
+-					&Ke->values[0],1);
++		for(int i=0;i<numnodes;i++){
++			for(int j=0;j<numnodes;j++){
++				Ke->values[i*numnodes+j] += gauss->weight*Jdet*(
++							basis[i]*basis[j]
++							+(l*thickness)*(l*thickness)*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j])
++							);
++			}
++		}
+ 	}
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+-	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(dbasis);
++	xDelete<IssmDouble>(basis);
+ 	return Ke;
+ }
+ /*}}}*/
+@@ -7409,7 +7411,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble dhdt_g,mb_g,ms_g,Jdettria;
++	IssmDouble dhdt_g,mb_g,ms_g,Jdet;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -7434,10 +7436,10 @@
+ 		mb_input->GetInputValue(&mb_g,gauss);
+ 		dhdt_input->GetInputValue(&dhdt_g,gauss);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(ms_g-mb_g-dhdt_g)*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -7451,7 +7453,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble mb_g,ms_g,dhdt_g,Jdettria;
++	IssmDouble mb_g,ms_g,dhdt_g,Jdet;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -7476,10 +7478,10 @@
+ 		mb_input->GetInputValue(&mb_g,gauss);
+ 		dhdt_input->GetInputValue(&dhdt_g,gauss);
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(ms_g-mb_g-dhdt_g)*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -7493,7 +7495,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble dhdt_g,mb_g,ms_g,Jdettria;
++	IssmDouble dhdt_g,mb_g,ms_g,Jdet;
+ 	IssmDouble h,gamma,thickness;
+ 	IssmDouble hnx,hny,dhnx[2],dhny[2];
+ 
+@@ -7547,7 +7549,7 @@
+ 		H_input->GetInputValue(&thickness,gauss);
+ 		if(thickness<50.) thickness=50.;
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 		GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
+ 
+@@ -7559,7 +7561,7 @@
+ 		gamma=h/(2.*thickness+1.e-10);
+ 
+ 		for(int i=0;i<numnodes;i++){
+-			pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*(
++			pe->values[i]+=Jdet*gauss->weight*(ms_g-mb_g-dhdt_g)*(
+ 						basis[i] + gamma*(basis[i]*(dhnx[0]+dhny[1])+hnx*dbasis[0*numnodes+i] + hny*dbasis[1*numnodes+i])
+ 						);
+ 		}
+@@ -7582,7 +7584,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble Jdettria;
++	IssmDouble Jdet;
+ 	IssmDouble thickness,slope[2];
+ 	IssmDouble taud_x;
+ 
+@@ -7607,11 +7609,12 @@
+ 		H_input->GetInputValue(&thickness,gauss);
+ 		surface_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
+ 		taud_x = matpar->GetRhoIce()*matpar->GetG()*thickness*slope[0];
++		//taud_x = slope[0];
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*taud_x*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*taud_x*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -7625,7 +7628,7 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble Jdettria;
++	IssmDouble Jdet;
+ 	IssmDouble thickness,slope[2];
+ 	IssmDouble taud_y;
+ 
+@@ -7650,11 +7653,12 @@
+ 		H_input->GetInputValue(&thickness,gauss);
+ 		surface_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
+ 		taud_y = matpar->GetRhoIce()*matpar->GetG()*thickness*slope[1];
++		//taud_y = slope[1];
+ 
+-		GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*taud_y*basis[i];
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*taud_y*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-16019-16020.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16019-16020.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16019-16020.diff	(revision 16134)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/externalpackages/dakota/configs/5.3.1/ParallelLibrary.cpp.patch
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/configs/5.3.1/ParallelLibrary.cpp.patch	(revision 16019)
++++ ../trunk-jpl/externalpackages/dakota/configs/5.3.1/ParallelLibrary.cpp.patch	(revision 16020)
+@@ -2,32 +2,27 @@
+ >   initialized=0; //we run serially all the time!
+ 133a135
+ >   initialized=0; //we run serially all the time!
+-141a144,176
++141a144,171
+ > /** This constructor is provided for the ISSM software, to run serial
+ >  * Dakota in a parallel MPI ring: */
+ > ParallelLibrary::ParallelLibrary(char* serial_mode):
+->   worldRank(0), worldSize(1),
++>   dakotaMPIComm(MPI_COMM_WORLD), worldRank(0), worldSize(1),
+ >   mpirunFlag(false), ownMPIFlag(false), dummyFlag(false),
+ >   stdOutputToFile(false), stdErrorToFile(false), checkFlag(false),
+ >   preRunFlag(true), runFlag(true), postRunFlag(true), userModesFlag(false),
+->   startClock(0), stopRestartEvals(0),
++>   outputTimings(true), startClock(0), stopRestartEvals(0),
+ >   currPLIter(parallelLevels.end()), currPCIter(parallelConfigurations.end())
+ > {
+->   startClock   = clock();
+-> #ifdef DAKOTA_UTILIB
+->   utilib::exception_mngr::set_mode(utilib::exception_mngr::Abort);
+->   startCPUTime = CPUSeconds();       // see utilib/src/sys/seconds.cpp
+->   startWCTime  = WallClockSeconds(); // see utilib/src/sys/seconds.cpp
+-> #endif // DAKOTA_UTILIB
++>   initialize_timers();
+ > 
+ >   // do not initialize MPI.  Get worldRank/worldSize if available
+ >   ParallelLevel pl;
+ > #ifdef HAVE_MPI // mpi available, we still don't want to run in parallel for Dakota!
+ >   pl.serverIntraComm = MPI_COMM_NULL;
+->   Cout << "Running Dakota 5.3.1 MPI executable in serial mode on CPU 0 for ISSM.";
++>   Cout << "Running Dakota 5.3.1 MPI executable in serial mode on CPU 0 for ISSM." << std::endl;
+ > #else // mpi not available
+ >   pl.serverIntraComm = MPI_COMM_NULL;
+->   Cout << "Running Dakota 5.3.1 serial executable in serial mode for ISSM.\n";
++>   Cout << "Running Dakota 5.3.1 serial executable in serial mode for ISSM." << std::endl;
+ > #endif // HAVE_MPI
+ > 
+ >   parallelLevels.push_back(pl);
+@@ -36,5 +31,5 @@
+ > }
+ > 
+ > 
+-1536a1572
++1536a1567
+ >   initialized=0; //we run serially all the time!
Index: /issm/oecreview/Archive/15392-16133/ISSM-16020-16021.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16020-16021.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16020-16021.diff	(revision 16134)
@@ -0,0 +1,86 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16020)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16021)
+@@ -3046,8 +3046,7 @@
+ 	int        i,j;
+ 	int        analysis_type,migration_style;
+ 	int        point1;
+-	IssmDouble alpha2;
+-	IssmDouble Jdet;
++	IssmDouble alpha2,Jdet;
+ 	IssmDouble fraction1,fraction2;
+ 	IssmDouble phi=1.0;
+ 	IssmDouble D_scalar;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16020)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16021)
+@@ -8020,9 +8020,12 @@
+ 	/*Intermediaries */
+ 	int         i,j;
+ 	int         analysis_type,migration_style;
++	int         point1;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+ 	IssmDouble  alpha2,Jdet;
++	IssmDouble fraction1,fraction2;
++	IssmDouble gllevelset;
+ 	IssmDouble  phi=1.0;
+ 	IssmDouble  DL_scalar;
+ 	Friction   *friction = NULL;
+@@ -8049,15 +8052,24 @@
+ 	Input* vx_input=inputs->GetInput(VxEnum);           _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);           _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);           _assert_(vz_input);
++	Input* gllevelset_input=NULL;
+ 
+ 	/*build friction object, used later on: */
+ 	friction=new Friction("2d",inputs,matpar,analysis_type);
+ 
+ 	/*Recover portion of element that is grounded*/
+ 	if(migration_style==SubelementMigrationEnum) phi=this->GetGroundedPortion(&xyz_list_tria[0][0]);
++	if(migration_style==SubelementMigration2Enum){
++		gllevelset_input=inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
++		//this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
++		//gauss=new GaussPenta(point1,fraction1,fraction2,mainlyfloating,2);
++		gauss=new GaussPenta(0,1,2,2);
++	}
++	else{
++		gauss=new GaussPenta(0,1,2,2);
++	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussPenta(0,1,2,2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+@@ -8067,6 +8079,10 @@
+ 
+ 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum); 
+ 		if(migration_style==SubelementMigrationEnum) alpha2=phi*alpha2;
++		if(migration_style==SubelementMigration2Enum){
++			gllevelset_input->GetInputValue(&gllevelset, gauss);
++			if(gllevelset<0) alpha2=0;
++		}
+ 
+ 		DL_scalar=alpha2*gauss->weight*Jdet;
+ 		for (i=0;i<2;i++) D[i*2+i]=DL_scalar;
+@@ -11226,7 +11242,7 @@
+ 			bed_hydro=-density*h[i];
+ 			if(bed_hydro>r[i]){
+ 				/*Unground only if the element is connected to the ice shelf*/
+-				if(migration_style==AgressiveMigrationEnum || migration_style==SubelementMigrationEnum){
++				if(migration_style==AgressiveMigrationEnum || migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+ 					floating[i] = true;
+@@ -11259,7 +11275,7 @@
+ 	this->InputExtrude(MaskGroundediceLevelsetEnum,ElementEnum);
+ 
+ 	/*SubelementMigrationEnum: if one grounded, all grounded*/
+-	if(migration_style==SubelementMigrationEnum){
++	if(migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
+ 		for(i=0;i<NUMVERTICES;i++){
+ 			if(phi[i]>0.){
+ 				groundedelement=true;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16021-16022.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16021-16022.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16021-16022.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp	(revision 16021)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp	(revision 16022)
+@@ -10,7 +10,7 @@
+ 	Constraints* constraints=*pconstraints;
+ 
+ 	/*No constraints for now*/
+-	IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancevelocityAnalysisEnum,P1Enum);
++	//IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancevelocityAnalysisEnum,P1Enum);
+ 
+ 	/*Assign output pointer: */
+ 	*pconstraints=constraints;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16022-16023.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16022-16023.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16022-16023.diff	(revision 16134)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16022)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16023)
+@@ -211,8 +211,8 @@
+ 		void	         GetVertexPidList(int* doflist);
+ 		void           GetVertexSidList(int* sidlist);
+ 		void           GetConnectivityList(int* connectivity);
++		void           GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating);
+ 		IssmDouble     GetGroundedPortion(IssmDouble* xyz_list);
+-		void           GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating);
+ 		void           GetSegmentNormal(IssmDouble* normal,IssmDouble xyz_list[2][3]);
+ 		void           GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[3][3],int levelsetenum);
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16022)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16023)
+@@ -1082,6 +1082,60 @@
+ 	*pdoflist=doflist;
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetGroundedPart{{{*/
++void Penta::GetGroundedPart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlyfloating){
++	/*Computeportion of the element that is grounded*/ 
++
++	bool               floating=true;
++	int                point;
++	const IssmPDouble  epsilon= 1.e-15;
++	IssmDouble         gl[NUMVERTICES];
++	IssmDouble         f1,f2;
++
++	/*Recover parameters and values*/
++	GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);
++
++	/*Be sure that values are not zero*/
++	if(gl[0]==0.) gl[0]=gl[0]+epsilon;
++	if(gl[1]==0.) gl[1]=gl[1]+epsilon;
++	if(gl[2]==0.) gl[2]=gl[2]+epsilon;
++
++	/*Check that not all nodes are grounded or floating*/
++	if(gl[0]>0 && gl[1]>0 && gl[2]>0){ // All grounded
++		point=0;
++		f1=1.;
++		f2=1.;
++	}
++	else if(gl[0]<0 && gl[1]<0 && gl[2]<0){ //All floating
++		point=0;
++		f1=0.;
++		f2=0.;
++	}
++	else{
++		if(gl[0]*gl[1]*gl[2]<0) floating=false;
++
++		if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
++			point=2;
++			f1=gl[2]/(gl[2]-gl[0]);
++			f2=gl[2]/(gl[2]-gl[1]);
++		}
++		else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
++			point=0;
++			f1=gl[0]/(gl[0]-gl[1]);
++			f2=gl[0]/(gl[0]-gl[2]);
++		}
++		else if(gl[0]*gl[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
++			point=1;
++			f1=gl[1]/(gl[1]-gl[2]);
++			f2=gl[1]/(gl[1]-gl[0]);
++		}
++	}
++	*point1=point;
++	*fraction1=f1;
++	*fraction2=f2;
++	*mainlyfloating=floating;
++}
++/*}}}*/
+ /*FUNCTION Penta::GetGroundedPortion{{{*/
+ IssmDouble Penta::GetGroundedPortion(IssmDouble* xyz_list){
+ 	/*Computeportion of the element that is grounded*/ 
+@@ -8018,6 +8072,7 @@
+ ElementMatrix* Penta::CreateKMatrixStressbalanceHOFriction(void){
+ 
+ 	/*Intermediaries */
++	bool       mainlyfloating;
+ 	int         i,j;
+ 	int         analysis_type,migration_style;
+ 	int         point1;
+@@ -8061,7 +8116,7 @@
+ 	if(migration_style==SubelementMigrationEnum) phi=this->GetGroundedPortion(&xyz_list_tria[0][0]);
+ 	if(migration_style==SubelementMigration2Enum){
+ 		gllevelset_input=inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);
+-		//this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
++		this->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
+ 		//gauss=new GaussPenta(point1,fraction1,fraction2,mainlyfloating,2);
+ 		gauss=new GaussPenta(0,1,2,2);
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16022)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16023)
+@@ -194,6 +194,7 @@
+ 		void	         GetVertexPidList(int* doflist);
+ 		void           GetVertexSidList(int* sidlist);
+ 		void           GetConnectivityList(int* connectivity);
++		void           GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating);
+ 		IssmDouble     GetGroundedPortion(IssmDouble* xyz_list);
+ 		int            GetElementType(void);
+ 		void           GetElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16023-16024.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16023-16024.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16023-16024.diff	(revision 16134)
@@ -0,0 +1,327 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp	(revision 16023)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp	(revision 16024)
+@@ -22,6 +22,7 @@
+ 
+ 	/*First create nodes*/
+ 	Nodes* nodes=*pnodes;
++	int    lid=0;
+ 	if(!nodes) nodes = new Nodes();
+ 
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+@@ -31,7 +32,7 @@
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Create new node if is in this processor's partition*/
+-			node = new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
++			node = new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
+ 
+ 			/*Deactivate node if not SIA*/
+ 			if(reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 16023)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 16024)
+@@ -61,6 +61,7 @@
+ 		/*Recover nodes*/
+ 		Nodes* nodes = *pnodes;
+ 		Node*  node  = NULL;
++		int    lid=0;
+ 		if(!nodes) nodes = new Nodes();
+ 
+ 		iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+@@ -71,12 +72,12 @@
+ 				if(iomodel->my_vertices[i]){
+ 					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
+ 					if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceAnalysisEnum,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,approximation));
+ 				}
+ 			}
+ 			for(int i=0;i<iomodel->numberofelements;i++){
+ 				if(iomodel->my_elements[i]){
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
+ 					node->Deactivate();
+ 					nodes->AddObject(node);
+ 				}
+@@ -85,7 +86,7 @@
+ 			for(int i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+ 					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
+ 					if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
+ 						node->Deactivate();
+ 					}
+@@ -96,7 +97,7 @@
+ 		else{
+ 			for(int i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
+ 				}
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 16023)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 16024)
+@@ -11,7 +11,7 @@
+ void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation){
+ 
+ 	/*Intermediaries*/
+-	int   i,j,counter;
++	int   i,j,counter,lid=0;
+ 	bool *my_edges = NULL;
+ 	bool *my_nodes = NULL;
+ 	Node *node     = NULL;
+@@ -26,7 +26,7 @@
+ 		case P1Enum:
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			break;
+@@ -36,7 +36,7 @@
+ 			for(i=0;i<iomodel->numberofelements;i++){
+ 				for(j=0;j<3;j++){
+ 					if(my_nodes[3*i+j]){ 
+-						nodes->AddObject(new Node(iomodel->nodecounter+3*i+j+1,iomodel->nodecounter+3*i+j,iomodel->elements[+3*i+j]-1,iomodel,analysis,approximation));
++						nodes->AddObject(new Node(iomodel->nodecounter+3*i+j+1,iomodel->nodecounter+3*i+j,lid++,iomodel->elements[+3*i+j]-1,iomodel,analysis,approximation));
+ 
+ 					}
+ 				}
+@@ -46,12 +46,12 @@
+ 		case P1bubbleEnum:
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofelements;i++){
+ 				if(iomodel->my_elements[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			break;
+@@ -59,12 +59,12 @@
+ 		case P1bubblecondensedEnum:
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofelements;i++){
+ 				if(iomodel->my_elements[i]){
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation);
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation);
+ 					node->Deactivate();
+ 					nodes->AddObject(node);
+ 				}
+@@ -75,7 +75,7 @@
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 
+@@ -83,7 +83,7 @@
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(iomodel->edges[i*3+2]==2){
+ 					if(my_edges[i]){
+-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,0,iomodel,analysis,approximation);
++						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+ 						nodes->AddObject(node);
+ 					}
+ 					counter++;
+@@ -94,7 +94,7 @@
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 
+@@ -102,7 +102,7 @@
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(iomodel->edges[i*3+2]!=2){
+ 					if(my_edges[i]){
+-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,0,iomodel,analysis,approximation);
++						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+ 						nodes->AddObject(node);
+ 					}
+ 					counter++;
+@@ -114,12 +114,12 @@
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,approximation));
+ 				}
+ 			}
+ 			break;
+@@ -130,13 +130,13 @@
+ 			/*P1 velocity*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 			/*P1 pressure*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,i,iomodel,analysis,FSpressureEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
+ 			break;
+@@ -145,13 +145,13 @@
+ 			/*P1 velocity*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 			/*P1 pressure*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,i,iomodel,analysis,FSpressureEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
+ 			break;
+@@ -160,12 +160,12 @@
+ 			/*P1+ velocity (bubble statically condensed)*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofelements;i++){
+ 				if(iomodel->my_elements[i]){
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum);
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum);
+ 					node->Deactivate();
+ 					nodes->AddObject(node);
+ 				}
+@@ -173,7 +173,7 @@
+ 			/*P1 pressure*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,analysis,FSpressureEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
+ 			break;
+@@ -182,18 +182,18 @@
+ 			/*P1+ velocity*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofelements;i++){
+ 				if(iomodel->my_elements[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 			/*P1 pressure*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,i,iomodel,analysis,FSpressureEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
+ 			break;
+@@ -203,19 +203,19 @@
+ 			EdgesPartitioning(&my_edges,iomodel);
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,FSvelocityEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 			for(i=0;i<iomodel->numberofedges;i++){
+ 				if(my_edges[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,FSvelocityEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum));
+ 				}
+ 			}
+ 
+ 			/*P1 pressure*/
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,i,iomodel,analysis,FSpressureEnum));
++					nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,i,iomodel,analysis,FSpressureEnum));
+ 				}
+ 			}
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 16023)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 16024)
+@@ -29,8 +29,9 @@
+ 
+ 	public: 
+ 
+-		int id;    //unique arbitrary id.
+-		int sid;   //"serial" id (rank of this node if the dataset was serial on 1 cpu)
++		int id;    // unique arbitrary id.
++		int sid;   // "serial" id (rank of this node if the dataset was serial on 1 cpu)
++		int lid;   // "local"  id (rank of this node in current partition)
+ 
+ 		bool         indexingupdate;
+ 		DofIndexing  indexing;
+@@ -39,7 +40,7 @@
+ 
+ 		/*Node constructors, destructors*/
+ 		Node();
+-		Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int approximation_in);
++		Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int approximation_in);
+ 		~Node();
+ 
+ 		/*Object virtual functions definitions:*/
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16023)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16024)
+@@ -20,8 +20,8 @@
+ 	this->approximation=0;
+ }
+ /*}}}*/
+-/*FUNCTION Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int approximation) {{{*/
+-Node::Node(int node_id,int node_sid,int io_index, IoModel* iomodel,int analysis_type,int in_approximation){
++/*FUNCTION Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int approximation) {{{*/
++Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int in_approximation){
+ 
+ 	/*Intermediary*/
+ 	int k,l;
+@@ -30,6 +30,7 @@
+ 	/*id: */
+ 	this->id            = node_id;
+ 	this->sid           = node_sid;
++	this->lid           = node_lid;
+ 	this->analysis_type = analysis_type;
+ 
+ 	/*Initialize coord_system: Identity matrix by default*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-16024-16025.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16024-16025.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16024-16025.diff	(revision 16134)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 16024)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 16025)
+@@ -68,6 +68,7 @@
+ 		void  CreateNodalConstraints(Vector<IssmDouble>* ys);
+ 		void  SetCurrentConfiguration(DataSet* nodes,Vertices* vertices);
+ 		int   Sid(void); 
++		int   Lid(void); 
+ #ifdef _HAVE_STRESSBALANCE_
+ 		void  GetCoordinateSystem(IssmDouble* coord_system_out);
+ #endif
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16024)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16025)
+@@ -344,8 +344,15 @@
+ }
+ /*}}}*/
+ /*FUNCTION Node::Sid{{{*/
+-int    Node::Sid(void){ return sid; }
++int Node::Sid(void){
++	return sid; 
++}
+ /*}}}*/
++/*FUNCTION Node::Lid{{{*/
++int  Node::Lid(void){
++	return lid; 
++}
++/*}}}*/
+ #ifdef _HAVE_STRESSBALANCE_
+ /*FUNCTION Node::GetCoordinateSystem{{{*/
+ void Node::GetCoordinateSystem(IssmDouble* coord_system_out){
Index: /issm/oecreview/Archive/15392-16133/ISSM-16025-16026.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16025-16026.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16025-16026.diff	(revision 16134)
@@ -0,0 +1,635 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16025)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16026)
+@@ -110,6 +110,7 @@
+ 			}
+ 			else{
+ 				enthalpy_core(femmodel);
++                		PostprocessingEnthalpyx(femmodel);
+ 			}
+ 			#else
+ 			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+Index: ../trunk-jpl/src/c/analyses/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16025)
++++ ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16026)
+@@ -91,7 +91,9 @@
+ 		InputToResultx(femmodel,TemperatureEnum);
+ 		if(isenthalpy)  InputToResultx(femmodel,WaterfractionEnum);
+ 		if(isenthalpy)  InputToResultx(femmodel,EnthalpyEnum);
+-		if(!isenthalpy) InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
++        	if(isenthalpy)  InputToResultx(femmodel,WatercolumnEnum);
++		//if(!isenthalpy) InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
++        	InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
+ 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16025)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16026)
+@@ -235,13 +235,14 @@
+ 	SurfaceforcingsSmbrefEnum,
+ 	SurfaceforcingsBPosEnum,
+ 	SurfaceforcingsBNegEnum,
++	ThermalIsenthalpyEnum,
++    	ThermalIsdynamicbasalspcEnum,
+ 	ThermalMaxiterEnum,
+ 	ThermalPenaltyFactorEnum,
+ 	ThermalPenaltyLockEnum,
+ 	ThermalPenaltyThresholdEnum,
+ 	ThermalSpctemperatureEnum,
+ 	ThermalStabilizationEnum,
+-	ThermalIsenthalpyEnum,
+ 	GiaMantleViscosityEnum,
+ 	GiaLithosphereThicknessEnum,
+ 	ThicknessEnum,
+Index: ../trunk-jpl/src/c/shared/Elements/elements.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 16025)
++++ ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 16026)
+@@ -19,7 +19,7 @@
+ 				     IssmDouble* PrecipitationsPresentday,
+ 				     IssmDouble* TemperaturesLgm, IssmDouble* TemperaturesPresentday, 
+ 					  IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout);
+-IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction);
++IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction, IssmDouble dt=0.);
+ 
+ /*Print arrays*/
+ void printarray(IssmPDouble* array,int lines,int cols=1);
+Index: ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 16025)
++++ ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 16026)
+@@ -7,21 +7,37 @@
+ #include "../Exceptions/exceptions.h"
+ 
+ /*FUNCTION IssmDouble DrainageFunctionWaterfraction()*/
+-IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction){
++IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction, IssmDouble dt=0.){
+     /* DrainageFunctionWaterfraction returns how much of the waterfraction is drained per year */
+-    _assert_(waterfraction>0);
++    _assert_(waterfraction>=0.);
++    _assert_(dt>=0.);
+ 
+     IssmDouble w0=0.01, w1=0.02, w2=0.03;
+-    IssmDouble D0=0, D1=0.005, D2=0.05;
++    IssmDouble Dret, D0=0, D1=0.005, D2=0.05;
+ 
++    /*get drainage function value*/
+     if((w0==w1)||(w1==w2)||(w0==w2))
+-        perror ("error in DrainageFunctionWaterfraction. Abort");
++        _error_("Error: equal ordinates in DrainageFunctionWaterfraction -> division by zero. Abort");
+     if(waterfraction<=w0)
+-        return D0;
++        Dret=D0;
+     if((waterfraction>w0) && (waterfraction<=w1))
+-        return (D1-D0)/(w1-w0)*(waterfraction-w0)+D0;
++        Dret=(D1-D0)/(w1-w0)*(waterfraction-w0)+D0;
+     if((waterfraction>w1) && (waterfraction<=w2))
+-        return (D2-D1)/(w2-w1)*(waterfraction-w1)+D1;
++        Dret=(D2-D1)/(w2-w1)*(waterfraction-w1)+D1;
+     else 
+-        return D2;
++        Dret=D2;
++    
++    /*check if dt*Dret>waterfraction. If so, drain whole waterfraction*/
++    if(dt==0.){
++      if(Dret>waterfraction)
++        return waterfraction;
++      else
++        return Dret;
++    }
++    else{
++      if(dt*Dret>waterfraction)
++        return waterfraction;
++      else
++        return dt*Dret;
++    }
+ }
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 16025)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 16026)
+@@ -74,6 +74,7 @@
+ #include "./ConstraintsStatex/ConstraintsStatex.h"
+ #include "./PointCloudFindNeighborsx/PointCloudFindNeighborsx.h"
+ #include "./PositiveDegreeDayx/PositiveDegreeDayx.h"
++#include "./PostprocessingEnthalpyx/PostprocessingEnthalpyx.h"
+ #include "./PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h"
+ #include "./Reduceloadx/Reduceloadx.h"
+ #include "./Reducevectorgtosx/Reducevectorgtosx.h"
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16025)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16026)
+@@ -43,6 +43,8 @@
+ 	iomodel->FetchDataToInput(elements,TemperatureEnum);
+ 	iomodel->FetchDataToInput(elements,WaterfractionEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
++	iomodel->FetchDataToInput(elements,WatercolumnEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16025)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16026)
+@@ -305,6 +305,8 @@
+ 					./modules/SpcNodesx/SpcNodesx.cpp\
+ 					./modules/PositiveDegreeDayx/PositiveDegreeDayx.h\
+ 					./modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp\
++					./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
++					./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\
+ 					./modules/Delta18oParameterizationx/Delta18oParameterizationx.h\
+ 					./modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp\
+ 					./modules/SmbGradientsx/SmbGradientsx.h\
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16025)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16026)
+@@ -126,8 +126,8 @@
+ 
+ 		#ifdef _HAVE_THERMAL_
+ 		virtual void UpdateThermalBasalConstraints(void)=0;
+-		//virtual void ComputeBasalMeltingrate(void)=0;
+-		//virtual void DrainWaterfraction(void)=0;
++		virtual void ComputeBasalMeltingrate(void)=0;
++       	virtual void DrainWaterfraction(void)=0;
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16025)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16026)
+@@ -254,7 +254,8 @@
+ 
+ 		#ifdef _HAVE_THERMAL_
+ 		void UpdateThermalBasalConstraints(void){_error_("not implemented yet");};
+-		void ComputeBasalMeltrate(void){_error_("not implemented yet");};
++		void ComputeBasalMeltingrate(void){_error_("not implemented yet");};
++	        void DrainWaterfraction(void){_error_("not implemented yet");};
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16025)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16026)
+@@ -4699,6 +4699,7 @@
+ 	IssmDouble basalfriction,alpha2,vx,vy;
+ 	IssmDouble scalar,enthalpy,enthalpyup;
+ 	IssmDouble pressure,pressureup;
++    IssmDouble watercolumn;
+ 	IssmDouble basis[NUMVERTICES];
+ 	Friction*  friction=NULL;
+ 	GaussPenta* gauss=NULL;
+@@ -4723,8 +4724,9 @@
+ 	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
+ 	Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
+ 	Input* geothermalflux_input=inputs->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
++    Input* watercolumn_input=inputs->GetInput(WatercolumnEnum); _assert_(watercolumn_input);
+ 
+-	/*Build frictoin element, needed later: */
++	/*Build friction element, needed later: */
+ 	friction=new Friction("3d",inputs,matpar,analysis_type);
+ 
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+@@ -4740,29 +4742,33 @@
+ 
+ 		enthalpy_input->GetInputValue(&enthalpy,gauss);
+ 		pressure_input->GetInputValue(&pressure,gauss);
+-//		if(enthalpy>matpar->PureIceEnthalpy(pressure)){
+-//			enthalpy_input->GetInputValue(&enthalpyup,gaussup);
+-//			pressure_input->GetInputValue(&pressureup,gaussup);
+-//			if(enthalpyup>matpar->PureIceEnthalpy(pressureup)){
+-//				//do nothing, don't add heatflux
+-//			}
+-//			else{
+-//				//need to change spcenthalpy according to Aschwanden 
+-//				//NEED TO UPDATE
+-//			}
+-//		}
+-//		else{
+-			geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
+-			friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+-			vx_input->GetInputValue(&vx,gauss);
+-			vy_input->GetInputValue(&vy,gauss);
+-			basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0));
++		if(enthalpy>=matpar->PureIceEnthalpy(pressure)){
++			enthalpy_input->GetInputValue(&enthalpyup,gaussup);
++			pressure_input->GetInputValue(&pressureup,gaussup);
++            if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)){
++				// temperate ice has positive thickness: grad enthalpy*n=0.
++			}
++			else{
++				// only base temperate, set Dirichlet BCs in Penta::UpdateThermalBasalConstraints()
++			}
++		}
++		else{
++            watercolumn_input->GetInputValue(&watercolumn,gauss);
++            if(watercolumn==0.){
++                /*add geothermal heat flux and basal friction*/
++                geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
++                friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
++                vx_input->GetInputValue(&vx,gauss);
++                vy_input->GetInputValue(&vy,gauss);
++                basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0));
+ 
+-			scalar=gauss->weight*Jdet2d*(basalfriction+geothermalflux_value)/(rho_ice);
+-			if(reCast<bool,IssmDouble>(dt)) scalar=dt*scalar;
++                scalar=gauss->weight*Jdet2d*(basalfriction+geothermalflux_value)/(rho_ice);
++                if(reCast<bool,IssmDouble>(dt)) scalar=dt*scalar;
+ 
+-			for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
+-//		}
++                for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
++            }
++            else { /*do nothing (water layer acts as insulation)*/ }
++		}
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -5201,6 +5207,11 @@
+ 				for(i=0;i<numdof;i++) B[i]=B_average;
+ 				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
+ 				break;
++            case LliboutryDuvalEnum:
++                B_average=LliboutryDuval((values[0]+values[1]+values[2]+values[3]+values[4]+values[5])/6.0,                                                   (pressure[0]+pressure[1]+pressure[2]+pressure[3]+pressure[4]+pressure[5])/6.0,                                       material->GetN());
++                for(i=0;i<numdof;i++) B[i]=B_average;
++				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
++				break;
+ 			default:
+ 				_error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet");
+ 
+@@ -5219,58 +5230,77 @@
+ 
+ 	/*Intermediary*/
+ 	bool        isenthalpy,isdynamicbasalspc,istemperatelayer;
+-	int         numindices;
+-	IssmDouble  h_pmp,pressure;
+-	int        *indices = NULL;
++	int         numindices, numindicesup;
++	IssmDouble  h_pmp,pressure, pressureup;
++    IssmDouble  enthalpy, enthalpyup;
++	int        *indices = NULL, *indicesup = NULL;
+ 
+ 	/* Only update Constraints at the base of grounded ice*/
+-	if(!IsOnBed() || !IsFloating()) return;
++	if(!IsOnBed() || IsFloating()) return;
+ 
+-	/*Check wether dynamic basal boudary conditions are activated -> TODO: Johannes :) */
++	/*Check wether dynamic basal boundary conditions are activated */
+ 	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	if(!isenthalpy) return;
+ 	//parameters->FindParam(&isdynamicbasalspc,ThermalIsdynamicbasalspcEnum);
+ 	isdynamicbasalspc = true;
+ 	if(!isdynamicbasalspc) return;
+ 
+-
+-	/*Fetch indices of basal nodes for this finite element*/
++	/*Fetch indices of basal & surface nodes for this finite element*/
+ 	BasalNodeIndices(&numindices,&indices,this->element_type);
++    SurfaceNodeIndices(&numindicesup,&indicesup,this->element_type);
++    _assert_(numindices==numindicesup);
+ 
+ 	/*Get parameters and inputs: */
+ 	Input* pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);
++    Input* enthalpy_input=inputs->GetInput(EnthalpyEnum); _assert_(enthalpy_input);
+ 
+-	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
++	/*if there is a temperate layer of positive thickness, set enthalpy=h_pmp at that node*/
+ 	GaussPenta* gauss=new GaussPenta();
++    GaussPenta* gaussup=new GaussPenta();
+ 	for(int i=0;i<numindices;i++){
+ 		gauss->GaussNode(this->element_type,indices[i]);
++        gaussup->GaussNode(this->element_type,indicesup[i]); // TODO: check: are the nodes corresponding?
+ 
+ 		/*Check wether there is a temperate layer at the base or not -> TODO: Johannes:) */
+-		istemperatelayer = false;
++        /*check if node is temperate, if not, return*/
++        enthalpy_input->GetInputValue(&enthalpy, gauss);
++		pressure_input->GetInputValue(&pressure, gauss);
++        if (enthalpy<matpar->PureIceEnthalpy(pressure)){
++          // TODO: reset, if necessary, all spcs to non-valid 
++          continue;
++        }
++        /*check if upper node is temperate. if yes, then we have a temperate layer of positive thickness. if not, continue.*/
++        enthalpy_input->GetInputValue(&enthalpyup, gaussup);
++		pressure_input->GetInputValue(&pressureup, gaussup);    
++        istemperatelayer = false;
++        if (enthalpyup>=matpar->PureIceEnthalpy(pressureup))
++          istemperatelayer=true;
+ 
+-		/*Add Dirichlet constraint to this node if there is a positive thickness of temperate ice*/
+-		if(istemperatelayer){
+-
++		/*Add Dirichlet constraint to this node if there is no layer of temperate ice with positive thickness*/
++		if(!istemperatelayer){
+ 			/*Calculate enthalpy at pressure melting point */
+-			pressure_input->GetInputValue(&pressure,gauss);
+ 			h_pmp=matpar->PureIceEnthalpy(pressure);
+ 
+-
+ 			/*Apply Dirichlet condition (dof = 0 here, since there is only one degree of freedom per node)*/
+-			nodes[indices[i]]->ApplyConstraint(0,h_pmp);
++			nodes[indices[i]]->ApplyConstraint(1,h_pmp);
+ 		}
++        else {
++          /*remove spc*/
++          nodes[indices[i]]->DofInFSet(0);
++        }
+ 	}
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(indices);
++    xDelete<int>(indicesup);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::ComputeBasalMeltrate{{{*/
+-void Penta::ComputeBasalMeltrate(void){
++/*FUNCTION Penta::ComputeBasalMeltingrate{{{*/
++void Penta::ComputeBasalMeltingrate(void){
+ 	/*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/
+ 
+ 	/* Intermediaries */
+-	bool        isenthalpy;
++	bool        isenthalpy, checkpositivethickness, istemperatelayer;
+ 	int         i,j,analysis_type;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+@@ -5278,13 +5308,14 @@
+ 	IssmDouble  vec_heatflux[3];
+ 	IssmDouble  normal_base[3], d1enthalpy[3];
+ 	IssmDouble  kappa;
+-    IssmDouble  meltrate[3], watercolumn[3];
+-	IssmDouble  enthalpy, enthalpyup;
++    IssmDouble  basalmeltingrate[NUMVERTICES], watercolumn[NUMVERTICES], meltingrate_enthalpy;
++	IssmDouble  enthalpy[NUMVERTICES], enthalpyup;
+ 	IssmDouble  pressure, pressureup;
+ 	IssmDouble  temperature, waterfraction;
+-	IssmDouble  latentheat;
++	IssmDouble  latentheat, rho_ice;
+ 	IssmDouble  basalfriction, alpha2;
+ 	IssmDouble  vx,vy,vz;
++    IssmDouble  connectivity;
+ 	IssmDouble  dt;
+ 	Friction   *friction  = NULL;
+ 
+@@ -5297,7 +5328,9 @@
+ 
+ 	/*Fetch parameters and inputs */
+ 	latentheat=matpar->GetLatentHeat();
++    rho_ice=this->matpar->GetRhoIce();
+ 	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
++    Input* basalmeltingrate_input=inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(basalmeltingrate_input);
+ 	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
+ 	Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
+ 	Input* vx_input=inputs->GetInput(VxEnum);                         _assert_(vx_input);
+@@ -5311,83 +5344,95 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	friction=new Friction("3d",inputs,matpar,analysis_type);
+ 
+-	/*Ok, get meltrates now from basal conditions*/
++	/*Ok, get meltingrates now from basal conditions*/
+ 	GaussPenta* gauss=new GaussPenta();
+ 	GaussPenta* gaussup=new GaussPenta();
+ 	for(int iv=0;iv<3;iv++){
+ 		gauss->GaussVertex(iv);
+ 		gaussup->GaussVertex(iv+3);
+-
+-        // TODO: make sure that no node is computed twice (insert mask)
+-
++                
++        checkpositivethickness=true;
+ 		watercolumn_input->GetInputValue(&watercolumn[iv], gauss);
+-		enthalpy_input->GetInputValue(&enthalpy, gauss);
++        basalmeltingrate_input->GetInputValue(&basalmeltingrate[iv],gauss);
++		enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
+ 
+-		/*Calculate basal meltrate*/
+-		if((watercolumn[iv]>0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
+-			enthalpy=matpar->PureIceEnthalpy(pressure);
++		/*Calculate basal meltingrate after Fig.5 of A.Aschwanden 2012*/
++        meltingrate_enthalpy=0.;
++		if((watercolumn[iv]>0.) && (enthalpy[iv]<matpar->PureIceEnthalpy(pressure))){
++            /*ensure that no ice is at T<Tm(p), if water layer present*/
++            enthalpy[iv]=matpar->PureIceEnthalpy(pressure); 
++            //meltingrate_enthalpy=0.;
+ 		}
+-		else if(enthalpy<matpar->PureIceEnthalpy(pressure)){
+-			meltrate[iv]=0.;   
+-			watercolumn[iv]=0.;
+-			continue;
++		else if(enthalpy[iv]<matpar->PureIceEnthalpy(pressure)){
++            /*cold base: set q*n=q_geo*n+frictionheating as Neumann BC in Penta::CreatePVectorEnthalpySheet*/
++			meltingrate_enthalpy=0.;
++            checkpositivethickness=false;
+ 		}
++        else {/*do nothing, go to next check*/}
+ 
+-		/*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice) */
+-		enthalpy_input->GetInputValue(&enthalpyup, gaussup);
+-		pressure_input->GetInputValue(&pressureup, gaussup);    
+-		if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)){
+-            for(i=0;i<3;i++) vec_heatflux[i]=0.;
+-		}
+-		else{
+-			enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
+-			kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy,pressure);
+-			for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
+-		}
++        if(checkpositivethickness){
++            /*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice. */
++            istemperatelayer=false;
++            enthalpy_input->GetInputValue(&enthalpyup, gaussup);
++            pressure_input->GetInputValue(&pressureup, gaussup);    
++            if(enthalpyup>=matpar->PureIceEnthalpy(pressureup))
++                istemperatelayer=true;
++            if(istemperatelayer)
++                for(i=0;i<3;i++) vec_heatflux[i]=0.;
++            else{
++                enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
++                kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy[iv],pressure);
++                for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
++            }
+ 
+-		/*Get normal vector to the bed */
+-		BedNormal(&normal_base[0],xyz_list_tria);
++            /*geothermal heatflux*/
++            BedNormal(&normal_base[0],xyz_list_tria);
++            heatflux=0.;
++            for(i=0;i<3;i++) heatflux+=(vec_heatflux[i])*normal_base[i];
++            geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
+ 
+-		heatflux=0.;
+-		for(i=0;i<3;i++) heatflux+=(vec_heatflux[i])*normal_base[i];
+-		geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
++            /*basal friction*/
++            friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
++            vx_input->GetInputValue(&vx,gauss);
++            vy_input->GetInputValue(&vy,gauss);
++            vz_input->GetInputValue(&vz,gauss);
++            basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
+ 
+-		matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy,pressure);
++            matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy[iv],pressure);
++            meltingrate_enthalpy=(basalfriction-(heatflux-geothermalflux_value))/((1-waterfraction)*latentheat*rho_ice); // m/yr water equivalent 
++        }
+ 
+-		friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+-		vx_input->GetInputValue(&vx,gauss);
+-		vy_input->GetInputValue(&vy,gauss);
+-		vz_input->GetInputValue(&vz,gauss);
+-		basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
+-		meltrate[iv]=(basalfriction-(heatflux-geothermalflux_value))/(1-waterfraction)/latentheat; 
+-
+-		/*Update water column*/
++		/*Update water column, basal meltingrate*/
++        connectivity=IssmDouble(vertices[iv]->Connectivity());
++        meltingrate_enthalpy/=connectivity; // divide meltingrate_enthalpy by connectivity to address multiple iterations over vertex
++        basalmeltingrate[iv]+=meltingrate_enthalpy;
+ 		this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 		if(reCast<bool,IssmDouble>(dt))
+-            watercolumn[iv]+=dt*meltrate[iv];
++            watercolumn[iv]+=dt*meltingrate_enthalpy; 
+ 		else
+-            watercolumn[iv]=meltrate[iv];
++            watercolumn[iv]+=meltingrate_enthalpy;
+ 	}  
+-    /*update meltrate and watercolumn*/
++    /*feed updated variables back into model*/
++    this->inputs->AddInput(new PentaInput(EnthalpyEnum, enthalpy, P1Enum));
+     this->inputs->AddInput(new PentaInput(WatercolumnEnum, watercolumn, P1Enum));
+-    this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum, meltrate, P1Enum));
++    this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum, basalmeltingrate, P1Enum));
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	delete gaussup;
++    delete friction;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::DrainWaterfraction{{{*/
+ void Penta::DrainWaterfraction(void){
+     
+-// TODO: create vector to mark whether node has been drained already i.o. to not drain nodes multiple times
+-
+     /*Intermediaries*/
+     bool isenthalpy;
+     IssmDouble waterfraction[NUMVERTICES], temperature[NUMVERTICES];
+     IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
+     IssmDouble latentheat, dt;
++    IssmDouble connectivity;
+     GaussPenta* gauss;
+     
+     Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
+@@ -5400,24 +5445,24 @@
+     
+     this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+     latentheat=matpar->GetLatentHeat();
++
+     gauss=new GaussPenta();
+     for(int iv=0;iv<NUMVERTICES;iv++){ 
+         gauss->GaussVertex(iv);
+-        /*TODO: Check whether Vertex has been drained already*/
+         enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
+         pressure_input->GetInputValue(&pressure[iv], gauss);
+         matpar->EnthalpyToThermal(&temperature[iv],&waterfraction[iv], enthalpy[iv],pressure[iv]); 
+     
+-        /*drain water fraction*/
+-        waterfraction[iv]-=dt*DrainageFunctionWaterfraction(waterfraction[iv]);
+-        if(waterfraction[iv]<0.) waterfraction[iv]=0.;
+-        /*update enthalpy*/
++        /*drain water fraction & update enthalpy*/
++        // TODO: replace connectivity-wise draining by draining once per node per timestep
++        connectivity=IssmDouble(vertices[iv]->Connectivity());
++        waterfraction[iv]-=DrainageFunctionWaterfraction(waterfraction[iv], dt)/connectivity;
+         matpar->ThermalToEnthalpy(&enthalpy[iv], temperature[iv], waterfraction[iv], pressure[iv]);        
+     }
+     /*feed updated results back into model*/
+     this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
+     this->inputs->AddInput(new PentaInput(WaterfractionEnum,waterfraction,P1Enum));
+-    this->inputs->AddInput(new PentaInput(TemperatureEnum,temperature,P1Enum));    
++    // this->inputs->AddInput(new PentaInput(TemperatureEnum,temperature,P1Enum));    // temperature should not change during drainage...
+ }
+ /*}}}*/
+ #endif
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16025)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16026)
+@@ -356,7 +356,7 @@
+ 		void           InputUpdateFromSolutionThermal(IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionEnthalpy(IssmDouble* solutiong);
+ 		void           UpdateThermalBasalConstraints(void);
+-		void           ComputeBasalMeltrate(void);
++		void           ComputeBasalMeltingrate(void);
+ 		void           DrainWaterfraction(void);
+ 		#endif
+ 
+Index: ../trunk-jpl/src/m/classes/thermal.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.m	(revision 16025)
++++ ../trunk-jpl/src/m/classes/thermal.m	(revision 16026)
+@@ -12,6 +12,7 @@
+ 		penalty_lock      = 0;
+ 		penalty_factor    = 0;
+ 		isenthalpy        = 0;
++        	isdynamicbasalspc = 0;
+ 	end
+ 	methods
+ 		function obj = thermal(varargin) % {{{
+@@ -38,6 +39,9 @@
+ 
+ 			%Should we use cold ice (default) or enthalpy formulation
+ 			obj.isenthalpy=0;
++            
++            		%will basal boundary conditions be set dynamically
++            		obj.isdynamicbasalspc=0;
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -51,6 +55,7 @@
+ 				replicate=repmat(md.geometry.surface-md.mesh.z,1,size(md.thermal.spctemperature,2));
+ 				md = checkfield(md,'thermal.spctemperature(find(md.thermal.spctemperature(1:md.mesh.numberofvertices,:)~=NaN))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate(pos),'message','spctemperature should be below the adjusted melting point');
+ 				md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0 1]);
++                		md = checkfield(md,'thermal.isdynamicbasalspc','numel',[1],'values',[0 1]);
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
+@@ -62,7 +67,8 @@
+ 			fielddisplay(obj,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)');
+ 			fielddisplay(obj,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)');
+ 			fielddisplay(obj,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');
+-
++            		fielddisplay(obj,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']);
++            
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','spctemperature','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+@@ -72,6 +78,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','penalty_lock','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','isenthalpy','format','Boolean');
+-		end % }}}
++            		WriteData(fid,'object',obj,'fieldname','isdynamicbasalspc','format','Boolean');
++        	end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 16025)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 16026)
+@@ -670,6 +670,7 @@
+ 			if ~isnan(md.initialization.vel),md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node');end;
+ 			if ~isnan(md.initialization.temperature),md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node');end;
+ 			if ~isnan(md.initialization.waterfraction),md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node');end;
++            if ~isnan(md.initialization.watercolumn),md.initialization.watercolumn=project3d(md,'vector',md.initialization.watercolumn,'type','node','layer',1);end;
+ 
+ 			%bedinfo and surface info
+ 			md.mesh.elementonbed=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',1);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16026-16027.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16026-16027.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16026-16027.diff	(revision 16134)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16027)
+@@ -0,0 +1,31 @@
++/*!\file PostprocessingEnthalpyx.cpp
++ * \brief: execute processing of variables after computation: water drainage, subglacial melting rates, update of thermal BCs
++ */
++
++#include "./PostprocessingEnthalpyx.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++
++void PostprocessingEnthalpyx(FemModel* femmodel){
++    /*Intermediary*/
++	int i;
++	Element* element=NULL;
++
++    /*drain excess water fraction: */
++for (i=0;i<femmodel->elements->Size();i++){
++        element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++        element->DrainWaterfraction();
++	}
++
++    /*Compute basal melting rates: */
++for (i=0;i<femmodel->elements->Size();i++){
++        element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++        element->ComputeBasalMeltingrate();
++	}
++
++    /*Update basal dirichlet BCs for enthalpy: */
++for (i=0;i<femmodel->elements->Size();i++){
++        element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++        element->UpdateThermalBasalConstraints();
++	}
++}
+Index: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h	(revision 0)
++++ ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h	(revision 16027)
+@@ -0,0 +1,13 @@
++/*!\file PostprocessingEnthalpy.h
++ * \brief: header file for PostprocessingEnthalpy
++ */
++
++#ifndef _POSTPROCESSINGENTHALPYX_H
++#define _POSTPROCESSINGENTHALPYX_H
++
++#include "../../classes/classes.h"
++#include "../../toolkits/toolkits.h"
++
++void PostprocessingEnthalpyx(FemModel* femmodel);
++
++#endif  /* _POSTPROCESSINGENTHALPYX_H */
Index: /issm/oecreview/Archive/15392-16133/ISSM-16027-16028.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16027-16028.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16027-16028.diff	(revision 16134)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16027)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16028)
+@@ -235,13 +235,14 @@
+ def SurfaceforcingsSmbrefEnum(): return StringToEnum("SurfaceforcingsSmbref")[0]
+ def SurfaceforcingsBPosEnum(): return StringToEnum("SurfaceforcingsBPos")[0]
+ def SurfaceforcingsBNegEnum(): return StringToEnum("SurfaceforcingsBNeg")[0]
++def ThermalIsenthalpyEnum(): return StringToEnum("ThermalIsenthalpy")[0]
++def ThermalIsdynamicbasalspcEnum(): return StringToEnum("ThermalIsdynamicbasalspc")[0]
+ def ThermalMaxiterEnum(): return StringToEnum("ThermalMaxiter")[0]
+ def ThermalPenaltyFactorEnum(): return StringToEnum("ThermalPenaltyFactor")[0]
+ def ThermalPenaltyLockEnum(): return StringToEnum("ThermalPenaltyLock")[0]
+ def ThermalPenaltyThresholdEnum(): return StringToEnum("ThermalPenaltyThreshold")[0]
+ def ThermalSpctemperatureEnum(): return StringToEnum("ThermalSpctemperature")[0]
+ def ThermalStabilizationEnum(): return StringToEnum("ThermalStabilization")[0]
+-def ThermalIsenthalpyEnum(): return StringToEnum("ThermalIsenthalpy")[0]
+ def GiaMantleViscosityEnum(): return StringToEnum("GiaMantleViscosity")[0]
+ def GiaLithosphereThicknessEnum(): return StringToEnum("GiaLithosphereThickness")[0]
+ def ThicknessEnum(): return StringToEnum("Thickness")[0]
+Index: ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m	(revision 16028)
+@@ -0,0 +1,11 @@
++function macro=ThermalIsdynamicbasalspcEnum()
++%THERMALISDYNAMICBASALSPCENUM - Enum of ThermalIsdynamicbasalspc
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=ThermalIsdynamicbasalspcEnum()
++
++macro=StringToEnum('ThermalIsdynamicbasalspc');
Index: /issm/oecreview/Archive/15392-16133/ISSM-16028-16029.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16028-16029.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16028-16029.diff	(revision 16134)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16028)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16029)
+@@ -243,13 +243,14 @@
+ 		case SurfaceforcingsSmbrefEnum : return "SurfaceforcingsSmbref";
+ 		case SurfaceforcingsBPosEnum : return "SurfaceforcingsBPos";
+ 		case SurfaceforcingsBNegEnum : return "SurfaceforcingsBNeg";
++		case ThermalIsenthalpyEnum : return "ThermalIsenthalpy";
++		case ThermalIsdynamicbasalspcEnum : return "ThermalIsdynamicbasalspc";
+ 		case ThermalMaxiterEnum : return "ThermalMaxiter";
+ 		case ThermalPenaltyFactorEnum : return "ThermalPenaltyFactor";
+ 		case ThermalPenaltyLockEnum : return "ThermalPenaltyLock";
+ 		case ThermalPenaltyThresholdEnum : return "ThermalPenaltyThreshold";
+ 		case ThermalSpctemperatureEnum : return "ThermalSpctemperature";
+ 		case ThermalStabilizationEnum : return "ThermalStabilization";
+-		case ThermalIsenthalpyEnum : return "ThermalIsenthalpy";
+ 		case GiaMantleViscosityEnum : return "GiaMantleViscosity";
+ 		case GiaLithosphereThicknessEnum : return "GiaLithosphereThickness";
+ 		case ThicknessEnum : return "Thickness";
Index: /issm/oecreview/Archive/15392-16133/ISSM-16029-16030.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16029-16030.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16029-16030.diff	(revision 16134)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16029)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16030)
+@@ -246,23 +246,24 @@
+ 	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
++	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
++	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+-	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+ 	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+-	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
++	      if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
++	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+ 	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
+ 	      else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+ 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+-	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
++	      if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
++	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+ 	      else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+-	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P2")==0) return P2Enum;
++	      if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
++	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+ 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16030-16031.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16030-16031.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16030-16031.diff	(revision 16134)
@@ -0,0 +1,349 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16030)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16031)
+@@ -4699,7 +4699,7 @@
+ 	IssmDouble basalfriction,alpha2,vx,vy;
+ 	IssmDouble scalar,enthalpy,enthalpyup;
+ 	IssmDouble pressure,pressureup;
+-    IssmDouble watercolumn;
++	IssmDouble watercolumn;
+ 	IssmDouble basis[NUMVERTICES];
+ 	Friction*  friction=NULL;
+ 	GaussPenta* gauss=NULL;
+@@ -4724,7 +4724,7 @@
+ 	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
+ 	Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
+ 	Input* geothermalflux_input=inputs->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
+-    Input* watercolumn_input=inputs->GetInput(WatercolumnEnum); _assert_(watercolumn_input);
++	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum); _assert_(watercolumn_input);
+ 
+ 	/*Build friction element, needed later: */
+ 	friction=new Friction("3d",inputs,matpar,analysis_type);
+@@ -4745,7 +4745,7 @@
+ 		if(enthalpy>=matpar->PureIceEnthalpy(pressure)){
+ 			enthalpy_input->GetInputValue(&enthalpyup,gaussup);
+ 			pressure_input->GetInputValue(&pressureup,gaussup);
+-            if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)){
++			if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)){
+ 				// temperate ice has positive thickness: grad enthalpy*n=0.
+ 			}
+ 			else{
+@@ -4753,21 +4753,21 @@
+ 			}
+ 		}
+ 		else{
+-            watercolumn_input->GetInputValue(&watercolumn,gauss);
+-            if(watercolumn==0.){
+-                /*add geothermal heat flux and basal friction*/
+-                geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
+-                friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+-                vx_input->GetInputValue(&vx,gauss);
+-                vy_input->GetInputValue(&vy,gauss);
+-                basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0));
++			watercolumn_input->GetInputValue(&watercolumn,gauss);
++			if(watercolumn==0.){
++				/*add geothermal heat flux and basal friction*/
++				geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
++				friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
++				vx_input->GetInputValue(&vx,gauss);
++				vy_input->GetInputValue(&vy,gauss);
++				basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0));
+ 
+-                scalar=gauss->weight*Jdet2d*(basalfriction+geothermalflux_value)/(rho_ice);
+-                if(reCast<bool,IssmDouble>(dt)) scalar=dt*scalar;
++				scalar=gauss->weight*Jdet2d*(basalfriction+geothermalflux_value)/(rho_ice);
++				if(reCast<bool,IssmDouble>(dt)) scalar=dt*scalar;
+ 
+-                for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
+-            }
+-            else { /*do nothing (water layer acts as insulation)*/ }
++				for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
++			}
++			else  /*do nothing (water layer acts as insulation)*/ 
+ 		}
+ 	}
+ 
+@@ -5147,8 +5147,8 @@
+ 
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+-	bool   converged=false;
+-	int    i,rheology_law;
++	bool       converged=false;
++	int        i,rheology_law;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble values[numdof];
+ 	IssmDouble pressure[NUMVERTICES];
+@@ -5156,7 +5156,7 @@
+ 	IssmDouble waterfraction[numdof];
+ 	IssmDouble B[numdof];
+ 	IssmDouble B_average,s_average;
+-	int*   doflist=NULL;
++	int*       doflist=NULL;
+ 
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+@@ -5207,14 +5207,15 @@
+ 				for(i=0;i<numdof;i++) B[i]=B_average;
+ 				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
+ 				break;
+-            case LliboutryDuvalEnum:
+-                B_average=LliboutryDuval((values[0]+values[1]+values[2]+values[3]+values[4]+values[5])/6.0,                                                   (pressure[0]+pressure[1]+pressure[2]+pressure[3]+pressure[4]+pressure[5])/6.0,                                       material->GetN());
+-                for(i=0;i<numdof;i++) B[i]=B_average;
++			case LliboutryDuvalEnum:
++				B_average=LliboutryDuval((values[0]+values[1]+values[2]+values[3]+values[4]+values[5])/6.0,
++							(pressure[0]+pressure[1]+pressure[2]+pressure[3]+pressure[4]+pressure[5])/6.0,
++							material->GetN());
++				for(i=0;i<numdof;i++) B[i]=B_average;
+ 				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
+ 				break;
+ 			default:
+ 				_error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet");
+-
+ 		}
+ 	}
+ 	else{
+@@ -5304,19 +5305,16 @@
+ 	int         i,j,analysis_type;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble  heatflux, geothermalflux_value;
++	IssmDouble  heatflux, geothermalflux_value,kappa;
+ 	IssmDouble  vec_heatflux[3];
+ 	IssmDouble  normal_base[3], d1enthalpy[3];
+-	IssmDouble  kappa;
+-    IssmDouble  basalmeltingrate[NUMVERTICES], watercolumn[NUMVERTICES], meltingrate_enthalpy;
++	IssmDouble  basalmeltingrate[NUMVERTICES], watercolumn[NUMVERTICES], meltingrate_enthalpy;
+ 	IssmDouble  enthalpy[NUMVERTICES], enthalpyup;
+ 	IssmDouble  pressure, pressureup;
+ 	IssmDouble  temperature, waterfraction;
+ 	IssmDouble  latentheat, rho_ice;
+ 	IssmDouble  basalfriction, alpha2;
+-	IssmDouble  vx,vy,vz;
+-    IssmDouble  connectivity;
+-	IssmDouble  dt;
++	IssmDouble  vx,vy,vz,dt,connectivity;
+ 	Friction   *friction  = NULL;
+ 
+ 	/* Only compute melt rates at the base of grounded ice*/
+@@ -5328,14 +5326,14 @@
+ 
+ 	/*Fetch parameters and inputs */
+ 	latentheat=matpar->GetLatentHeat();
+-    rho_ice=this->matpar->GetRhoIce();
+-	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
+-    Input* basalmeltingrate_input=inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(basalmeltingrate_input);
+-	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
+-	Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
+-	Input* vx_input=inputs->GetInput(VxEnum);                         _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum);                         _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum);                         _assert_(vz_input);
++	rho_ice=this->matpar->GetRhoIce();
++	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);                    _assert_(watercolumn_input);
++	Input* basalmeltingrate_input=inputs->GetInput(BasalforcingsMeltingRateEnum);  _assert_(basalmeltingrate_input);
++	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);                          _assert_(enthalpy_input);
++	Input* pressure_input=inputs->GetInput(PressureEnum);                          _assert_(pressure_input);
++	Input* vx_input=inputs->GetInput(VxEnum);                                      _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum);                                      _assert_(vy_input);
++	Input* vz_input=inputs->GetInput(VzEnum);                                      _assert_(vz_input);
+ 	Input* geothermalflux_input=inputs->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
+ 
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+@@ -5350,119 +5348,117 @@
+ 	for(int iv=0;iv<3;iv++){
+ 		gauss->GaussVertex(iv);
+ 		gaussup->GaussVertex(iv+3);
+-                
+-        checkpositivethickness=true;
++
++		checkpositivethickness=true;
+ 		watercolumn_input->GetInputValue(&watercolumn[iv], gauss);
+-        basalmeltingrate_input->GetInputValue(&basalmeltingrate[iv],gauss);
++		basalmeltingrate_input->GetInputValue(&basalmeltingrate[iv],gauss);
+ 		enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
+ 
+ 		/*Calculate basal meltingrate after Fig.5 of A.Aschwanden 2012*/
+-        meltingrate_enthalpy=0.;
++		meltingrate_enthalpy=0.;
+ 		if((watercolumn[iv]>0.) && (enthalpy[iv]<matpar->PureIceEnthalpy(pressure))){
+-            /*ensure that no ice is at T<Tm(p), if water layer present*/
+-            enthalpy[iv]=matpar->PureIceEnthalpy(pressure); 
+-            //meltingrate_enthalpy=0.;
++			/*ensure that no ice is at T<Tm(p), if water layer present*/
++			enthalpy[iv]=matpar->PureIceEnthalpy(pressure); 
++			//meltingrate_enthalpy=0.;
+ 		}
+ 		else if(enthalpy[iv]<matpar->PureIceEnthalpy(pressure)){
+-            /*cold base: set q*n=q_geo*n+frictionheating as Neumann BC in Penta::CreatePVectorEnthalpySheet*/
++			/*cold base: set q*n=q_geo*n+frictionheating as Neumann BC in Penta::CreatePVectorEnthalpySheet*/
+ 			meltingrate_enthalpy=0.;
+-            checkpositivethickness=false;
++			checkpositivethickness=false;
+ 		}
+-        else {/*do nothing, go to next check*/}
++		else {/*do nothing, go to next check*/}
+ 
+-        if(checkpositivethickness){
+-            /*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice. */
+-            istemperatelayer=false;
+-            enthalpy_input->GetInputValue(&enthalpyup, gaussup);
+-            pressure_input->GetInputValue(&pressureup, gaussup);    
+-            if(enthalpyup>=matpar->PureIceEnthalpy(pressureup))
+-                istemperatelayer=true;
+-            if(istemperatelayer)
+-                for(i=0;i<3;i++) vec_heatflux[i]=0.;
+-            else{
+-                enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
+-                kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy[iv],pressure);
+-                for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
+-            }
++		if(checkpositivethickness){
++			/*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice. */
++			istemperatelayer=false;
++			enthalpy_input->GetInputValue(&enthalpyup, gaussup);
++			pressure_input->GetInputValue(&pressureup, gaussup);    
++			if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)) istemperatelayer=true;
++			if(istemperatelayer) for(i=0;i<3;i++) vec_heatflux[i]=0.;
++			else{
++				enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
++				kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy[iv],pressure);
++				for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
++			}
+ 
+-            /*geothermal heatflux*/
+-            BedNormal(&normal_base[0],xyz_list_tria);
+-            heatflux=0.;
+-            for(i=0;i<3;i++) heatflux+=(vec_heatflux[i])*normal_base[i];
+-            geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
++			/*geothermal heatflux*/
++			BedNormal(&normal_base[0],xyz_list_tria);
++			heatflux=0.;
++			for(i=0;i<3;i++) heatflux+=(vec_heatflux[i])*normal_base[i];
++			geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
+ 
+-            /*basal friction*/
+-            friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+-            vx_input->GetInputValue(&vx,gauss);
+-            vy_input->GetInputValue(&vy,gauss);
+-            vz_input->GetInputValue(&vz,gauss);
+-            basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
++			/*basal friction*/
++			friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
++			vx_input->GetInputValue(&vx,gauss);
++			vy_input->GetInputValue(&vy,gauss);
++			vz_input->GetInputValue(&vz,gauss);
++			basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
+ 
+-            matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy[iv],pressure);
+-            meltingrate_enthalpy=(basalfriction-(heatflux-geothermalflux_value))/((1-waterfraction)*latentheat*rho_ice); // m/yr water equivalent 
+-        }
++			matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy[iv],pressure);
++			meltingrate_enthalpy=(basalfriction-(heatflux-geothermalflux_value))/((1-waterfraction)*latentheat*rho_ice); // m/yr water equivalent 
++		}
+ 
+ 		/*Update water column, basal meltingrate*/
+-        connectivity=IssmDouble(vertices[iv]->Connectivity());
+-        meltingrate_enthalpy/=connectivity; // divide meltingrate_enthalpy by connectivity to address multiple iterations over vertex
+-        basalmeltingrate[iv]+=meltingrate_enthalpy;
++		connectivity=IssmDouble(vertices[iv]->Connectivity());
++		meltingrate_enthalpy/=connectivity; // divide meltingrate_enthalpy by connectivity to address multiple iterations over vertex
++		basalmeltingrate[iv]+=meltingrate_enthalpy;
+ 		this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 		if(reCast<bool,IssmDouble>(dt))
+-            watercolumn[iv]+=dt*meltingrate_enthalpy; 
++		 watercolumn[iv]+=dt*meltingrate_enthalpy; 
+ 		else
+-            watercolumn[iv]+=meltingrate_enthalpy;
++		 watercolumn[iv]+=meltingrate_enthalpy;
+ 	}  
+-    /*feed updated variables back into model*/
+-    this->inputs->AddInput(new PentaInput(EnthalpyEnum, enthalpy, P1Enum));
+-    this->inputs->AddInput(new PentaInput(WatercolumnEnum, watercolumn, P1Enum));
+-    this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum, basalmeltingrate, P1Enum));
++	/*feed updated variables back into model*/
++	this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
++	this->inputs->AddInput(new PentaInput(WatercolumnEnum,watercolumn,P1Enum));
++	this->inputs->AddInput(new PentaInput(BasalforcingsMeltingRateEnum,basalmeltingrate,P1Enum));
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	delete gaussup;
+-    delete friction;
++	delete friction;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::DrainWaterfraction{{{*/
+ void Penta::DrainWaterfraction(void){
+     
+     /*Intermediaries*/
+-    bool isenthalpy;
+-    IssmDouble waterfraction[NUMVERTICES], temperature[NUMVERTICES];
+-    IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
+-    IssmDouble latentheat, dt;
+-    IssmDouble connectivity;
+-    GaussPenta* gauss;
+-    
+-    Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
++	bool isenthalpy;
++	IssmDouble waterfraction[NUMVERTICES], temperature[NUMVERTICES];
++	IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
++	IssmDouble latentheat, dt;
++	IssmDouble connectivity;
++	GaussPenta* gauss;
++
++	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
+ 	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
+-    Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
+-    
+-    /*Check wether enthalpy is activated*/
++	Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
++
++	/*Check wether enthalpy is activated*/
+ 	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	if(!isenthalpy) return;       
+-    
+-    this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-    latentheat=matpar->GetLatentHeat();
+ 
+-    gauss=new GaussPenta();
+-    for(int iv=0;iv<NUMVERTICES;iv++){ 
+-        gauss->GaussVertex(iv);
+-        enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
+-        pressure_input->GetInputValue(&pressure[iv], gauss);
+-        matpar->EnthalpyToThermal(&temperature[iv],&waterfraction[iv], enthalpy[iv],pressure[iv]); 
+-    
+-        /*drain water fraction & update enthalpy*/
+-        // TODO: replace connectivity-wise draining by draining once per node per timestep
+-        connectivity=IssmDouble(vertices[iv]->Connectivity());
+-        waterfraction[iv]-=DrainageFunctionWaterfraction(waterfraction[iv], dt)/connectivity;
+-        matpar->ThermalToEnthalpy(&enthalpy[iv], temperature[iv], waterfraction[iv], pressure[iv]);        
+-    }
+-    /*feed updated results back into model*/
+-    this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
+-    this->inputs->AddInput(new PentaInput(WaterfractionEnum,waterfraction,P1Enum));
+-    // this->inputs->AddInput(new PentaInput(TemperatureEnum,temperature,P1Enum));    // temperature should not change during drainage...
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	latentheat=matpar->GetLatentHeat();
++
++	gauss=new GaussPenta();
++	for(int iv=0;iv<NUMVERTICES;iv++){ 
++		gauss->GaussVertex(iv);
++		enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
++		pressure_input->GetInputValue(&pressure[iv], gauss);
++		matpar->EnthalpyToThermal(&temperature[iv],&waterfraction[iv], enthalpy[iv],pressure[iv]); 
++
++		/*drain water fraction & update enthalpy*/
++		// TODO: replace connectivity-wise draining by draining once per node per timestep
++		connectivity=IssmDouble(vertices[iv]->Connectivity());
++		waterfraction[iv]-=DrainageFunctionWaterfraction(waterfraction[iv], dt)/connectivity;
++		matpar->ThermalToEnthalpy(&enthalpy[iv], temperature[iv], waterfraction[iv], pressure[iv]);        
++	}
++	/*feed updated results back into model*/
++	this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
++	this->inputs->AddInput(new PentaInput(WaterfractionEnum,waterfraction,P1Enum));
++	// this->inputs->AddInput(new PentaInput(TemperatureEnum,temperature,P1Enum));    // temperature should not change during drainage...
+ }
+ /*}}}*/
+ #endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-16031-16032.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16031-16032.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16031-16032.diff	(revision 16134)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16031)
++++ ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16032)
+@@ -11,21 +11,21 @@
+ 	int i;
+ 	Element* element=NULL;
+ 
+-    /*drain excess water fraction: */
+-for (i=0;i<femmodel->elements->Size();i++){
+-        element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-        element->DrainWaterfraction();
++	/*drain excess water fraction: */
++	for (i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->DrainWaterfraction();
+ 	}
+ 
+-    /*Compute basal melting rates: */
+-for (i=0;i<femmodel->elements->Size();i++){
+-        element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-        element->ComputeBasalMeltingrate();
++	/*Compute basal melting rates: */
++	for (i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->ComputeBasalMeltingrate();
+ 	}
+ 
+-    /*Update basal dirichlet BCs for enthalpy: */
+-for (i=0;i<femmodel->elements->Size();i++){
+-        element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-        element->UpdateThermalBasalConstraints();
++	/*Update basal dirichlet BCs for enthalpy: */
++	for (i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->UpdateThermalBasalConstraints();
+ 	}
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-16032-16033.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16032-16033.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16032-16033.diff	(revision 16134)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16032)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16033)
+@@ -4767,7 +4767,9 @@
+ 
+ 				for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
+ 			}
+-			else  /*do nothing (water layer acts as insulation)*/ 
++			else{
++				/*do nothing (water layer acts as insulation)*/ 
++			}
+ 		}
+ 	}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16033-16034.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16033-16034.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16033-16034.diff	(revision 16134)
@@ -0,0 +1,159 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16033)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16034)
+@@ -4767,9 +4767,7 @@
+ 
+ 				for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
+ 			}
+-			else{
+-				/*do nothing (water layer acts as insulation)*/ 
+-			}
++			else{  /*do nothing (water layer acts as insulation)*/  }
+ 		}
+ 	}
+ 
+@@ -5307,16 +5305,18 @@
+ 	int         i,j,analysis_type;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble  heatflux, geothermalflux_value,kappa;
++	IssmDouble  heatflux,kappa;
+ 	IssmDouble  vec_heatflux[3];
+ 	IssmDouble  normal_base[3], d1enthalpy[3];
+-	IssmDouble  basalmeltingrate[NUMVERTICES], watercolumn[NUMVERTICES], meltingrate_enthalpy;
++	IssmDouble  basalmeltingrate[NUMVERTICES], watercolumn[NUMVERTICES];
+ 	IssmDouble  enthalpy[NUMVERTICES], enthalpyup;
+-	IssmDouble  pressure, pressureup;
++	IssmDouble  pressure[NUMVERTICES], pressureup;
+ 	IssmDouble  temperature, waterfraction;
+ 	IssmDouble  latentheat, rho_ice;
+ 	IssmDouble  basalfriction, alpha2;
+-	IssmDouble  vx,vy,vz,dt,connectivity;
++	IssmDouble  vx[NUMVERTICES],vy[NUMVERTICES],vz[NUMVERTICES];
++	IssmDouble  geothermalflux[NUMVERTICES];
++	IssmDouble  dt,meltingrate_enthalpy;
+ 	Friction   *friction  = NULL;
+ 
+ 	/* Only compute melt rates at the base of grounded ice*/
+@@ -5329,14 +5329,15 @@
+ 	/*Fetch parameters and inputs */
+ 	latentheat=matpar->GetLatentHeat();
+ 	rho_ice=this->matpar->GetRhoIce();
+-	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);                    _assert_(watercolumn_input);
+-	Input* basalmeltingrate_input=inputs->GetInput(BasalforcingsMeltingRateEnum);  _assert_(basalmeltingrate_input);
+-	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);                          _assert_(enthalpy_input);
+-	Input* pressure_input=inputs->GetInput(PressureEnum);                          _assert_(pressure_input);
+-	Input* vx_input=inputs->GetInput(VxEnum);                                      _assert_(vx_input);
+-	Input* vy_input=inputs->GetInput(VyEnum);                                      _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum);                                      _assert_(vz_input);
+-	Input* geothermalflux_input=inputs->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
++	GetInputListOnVertices(&vx[0],VxEnum);
++	GetInputListOnVertices(&vy[0],VyEnum);
++	GetInputListOnVertices(&vz[0],VzEnum);
++	GetInputListOnVertices(&enthalpy[0],EnthalpyEnum);
++	GetInputListOnVertices(&pressure[0],PressureEnum);
++	GetInputListOnVertices(&watercolumn[0],WatercolumnEnum);
++	GetInputListOnVertices(&basalmeltingrate[0],BasalforcingsMeltingRateEnum);
++	GetInputListOnVertices(&geothermalflux[0],BasalforcingsGeothermalfluxEnum);
++	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum); _assert_(enthalpy_input);
+ 
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 
+@@ -5348,23 +5349,19 @@
+ 	GaussPenta* gauss=new GaussPenta();
+ 	GaussPenta* gaussup=new GaussPenta();
+ 	for(int iv=0;iv<3;iv++){
++
+ 		gauss->GaussVertex(iv);
+ 		gaussup->GaussVertex(iv+3);
+-
+ 		checkpositivethickness=true;
+-		watercolumn_input->GetInputValue(&watercolumn[iv], gauss);
+-		basalmeltingrate_input->GetInputValue(&basalmeltingrate[iv],gauss);
+-		enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
+-		pressure_input->GetInputValue(&pressure, gauss);
+ 
+ 		/*Calculate basal meltingrate after Fig.5 of A.Aschwanden 2012*/
+ 		meltingrate_enthalpy=0.;
+-		if((watercolumn[iv]>0.) && (enthalpy[iv]<matpar->PureIceEnthalpy(pressure))){
++		if((watercolumn[iv]>0.) && (enthalpy[iv]<matpar->PureIceEnthalpy(pressure[iv]))){
+ 			/*ensure that no ice is at T<Tm(p), if water layer present*/
+-			enthalpy[iv]=matpar->PureIceEnthalpy(pressure); 
++			enthalpy[iv]=matpar->PureIceEnthalpy(pressure[iv]); 
+ 			//meltingrate_enthalpy=0.;
+ 		}
+-		else if(enthalpy[iv]<matpar->PureIceEnthalpy(pressure)){
++		else if(enthalpy[iv]<matpar->PureIceEnthalpy(pressure[iv])){
+ 			/*cold base: set q*n=q_geo*n+frictionheating as Neumann BC in Penta::CreatePVectorEnthalpySheet*/
+ 			meltingrate_enthalpy=0.;
+ 			checkpositivethickness=false;
+@@ -5374,13 +5371,11 @@
+ 		if(checkpositivethickness){
+ 			/*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice. */
+ 			istemperatelayer=false;
+-			enthalpy_input->GetInputValue(&enthalpyup, gaussup);
+-			pressure_input->GetInputValue(&pressureup, gaussup);    
+-			if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)) istemperatelayer=true;
++			if(enthalpy[iv+3]>=matpar->PureIceEnthalpy(pressure[iv+3])) istemperatelayer=true;
+ 			if(istemperatelayer) for(i=0;i<3;i++) vec_heatflux[i]=0.;
+ 			else{
+ 				enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
+-				kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy[iv],pressure);
++				kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy[iv],pressure[iv]);
+ 				for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
+ 			}
+ 
+@@ -5388,22 +5383,16 @@
+ 			BedNormal(&normal_base[0],xyz_list_tria);
+ 			heatflux=0.;
+ 			for(i=0;i<3;i++) heatflux+=(vec_heatflux[i])*normal_base[i];
+-			geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
+ 
+ 			/*basal friction*/
+ 			friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+-			vx_input->GetInputValue(&vx,gauss);
+-			vy_input->GetInputValue(&vy,gauss);
+-			vz_input->GetInputValue(&vz,gauss);
+-			basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
++			basalfriction=alpha2*(pow(vx[iv],2.0)+pow(vy[iv],2.0)+pow(vz[iv],2.0));
+ 
+-			matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy[iv],pressure);
+-			meltingrate_enthalpy=(basalfriction-(heatflux-geothermalflux_value))/((1-waterfraction)*latentheat*rho_ice); // m/yr water equivalent 
++			matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy[iv],pressure[iv]);
++			meltingrate_enthalpy=(basalfriction-(heatflux-geothermalflux[iv]))/((1-waterfraction)*latentheat*rho_ice); // m/yr water equivalent 
+ 		}
+ 
+ 		/*Update water column, basal meltingrate*/
+-		connectivity=IssmDouble(vertices[iv]->Connectivity());
+-		meltingrate_enthalpy/=connectivity; // divide meltingrate_enthalpy by connectivity to address multiple iterations over vertex
+ 		basalmeltingrate[iv]+=meltingrate_enthalpy;
+ 		this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 		if(reCast<bool,IssmDouble>(dt))
+@@ -5430,12 +5419,11 @@
+ 	IssmDouble waterfraction[NUMVERTICES], temperature[NUMVERTICES];
+ 	IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
+ 	IssmDouble latentheat, dt;
+-	IssmDouble connectivity;
+ 	GaussPenta* gauss;
+ 
+-	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum);       _assert_(watercolumn_input);
+-	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);             _assert_(enthalpy_input);
+-	Input* pressure_input=inputs->GetInput(PressureEnum);             _assert_(pressure_input);
++	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum); _assert_(watercolumn_input);
++	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);       _assert_(enthalpy_input);
++	Input* pressure_input=inputs->GetInput(PressureEnum);       _assert_(pressure_input);
+ 
+ 	/*Check wether enthalpy is activated*/
+ 	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+@@ -5452,9 +5440,7 @@
+ 		matpar->EnthalpyToThermal(&temperature[iv],&waterfraction[iv], enthalpy[iv],pressure[iv]); 
+ 
+ 		/*drain water fraction & update enthalpy*/
+-		// TODO: replace connectivity-wise draining by draining once per node per timestep
+-		connectivity=IssmDouble(vertices[iv]->Connectivity());
+-		waterfraction[iv]-=DrainageFunctionWaterfraction(waterfraction[iv], dt)/connectivity;
++		waterfraction[iv]-=DrainageFunctionWaterfraction(waterfraction[iv], dt);
+ 		matpar->ThermalToEnthalpy(&enthalpy[iv], temperature[iv], waterfraction[iv], pressure[iv]);        
+ 	}
+ 	/*feed updated results back into model*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-16034-16035.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16034-16035.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16034-16035.diff	(revision 16134)
@@ -0,0 +1,112 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 16034)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 16035)
+@@ -378,10 +378,10 @@
+ 	/*Loop over all nodes*/
+ 	for(int i=0;i<this->GetNumberOfNodes();i++){
+ 
+-		if(!flags[this->nodes[i]->Sid()]){
++		if(!flags[this->nodes[i]->Lid()]){
+ 
+ 			/*flag current node so that no other element processes it*/
+-			flags[this->nodes[i]->Sid()]=true;
++			flags[this->nodes[i]->Lid()]=true;
+ 
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 16034)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 16035)
+@@ -216,10 +216,10 @@
+ 	/*Loop over all nodes*/
+ 	for(int i=0;i<NUMVERTICES;i++){
+ 
+-		if(!flags[this->nodes[i]->Sid()]){
++		if(!flags[this->nodes[i]->Lid()]){
+ 
+ 			/*flag current node so that no other element processes it*/
+-			flags[this->nodes[i]->Sid()]=true;
++			flags[this->nodes[i]->Lid()]=true;
+ 
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16034)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16035)
+@@ -297,10 +297,10 @@
+ 	int d_nz = 0;
+ 	int o_nz = 0;
+ 
+-	if(!flags[this->node->Sid()]){
++	if(!flags[this->node->Lid()]){
+ 
+ 		/*flag current node so that no other element processes it*/
+-		flags[this->node->Sid()]=true;
++		flags[this->node->Lid()]=true;
+ 
+ 		/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 		switch(set2_enum){
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16034)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16035)
+@@ -393,10 +393,10 @@
+ 	/*Loop over all nodes*/
+ 	for(int i=0;i<NUMVERTICES;i++){
+ 
+-		if(!flags[this->nodes[i]->Sid()]){
++		if(!flags[this->nodes[i]->Lid()]){
+ 
+ 			/*flag current node so that no other element processes it*/
+-			flags[this->nodes[i]->Sid()]=true;
++			flags[this->nodes[i]->Lid()]=true;
+ 
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16034)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16035)
+@@ -454,6 +454,7 @@
+ 
+ 	/*Get vector size and number of nodes*/
+ 	int numnodes            = nodes->NumberOfNodes(configuration_type);
++	int localnumnodes       = nodes->Size();
+ 	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
+ 	int M                   = nodes->NumberOfDofs(configuration_type,set1enum);
+ 	int N                   = nodes->NumberOfDofs(configuration_type,set2enum);
+@@ -515,19 +516,20 @@
+ 	}
+ 
+ 	/*OK now count number of dofs and flag each nodes for each node i*/
+-	bool *flags                  = xNew<bool>(numnodes);
++	bool *flags                  = xNew<bool>(localnumnodes);
+ 	int  *d_connectivity         = xNewZeroInit<int>(numnodes);
+ 	int  *o_connectivity         = xNewZeroInit<int>(numnodes);
+ 	int  *connectivity_clone     = xNewZeroInit<int>(numnodes);
+ 	int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
+ 
+ 	/*Create connectivity vector*/
++	MPI_Barrier(MPI_COMM_WORLD); double start_core2=MPI_Wtime( );
+ 	for(i=0;i<nodes->Size();i++){
+ 		Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
+ 		if(node->InAnalysis(configuration_type)){
+ 
+ 			/*Reinitialize flags to 0*/
+-			for(j=0;j<numnodes;j++) flags[j]=false;
++			for(j=0;j<localnumnodes;j++) flags[j]=false;
+ 
+ 			/*Loop over elements that hold node number i*/
+ 			//if(head_e[node->Sid()]==-1 && head_l[node->Sid()]==-1){
+@@ -566,6 +568,8 @@
+ 	xDelete<int>(count2offset_l);
+ 	xDelete<int>(head_l);
+ 	xDelete<int>(next_l);
++	MPI_Barrier(MPI_COMM_WORLD); double finish_core2=MPI_Wtime( );
++	_printf0_("\nTotal ellapsed time "<<finish_core2-start_core2<<" seconds  \n");
+ 
+ 	/*sum over all cpus*/
+ 	ISSM_MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
Index: /issm/oecreview/Archive/15392-16133/ISSM-16035-16036.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16035-16036.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16035-16036.diff	(revision 16134)
@@ -0,0 +1,233 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16035)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16036)
+@@ -130,10 +130,10 @@
+ 	/*Loop over all nodes*/
+ 	for(int i=0;i<numnodes;i++){
+ 
+-		if(!flags[this->nodes[i]->Sid()]){
++		if(!flags[this->nodes[i]->Lid()]){
+ 
+ 			/*flag current node so that no other element processes it*/
+-			flags[this->nodes[i]->Sid()]=true;
++			flags[this->nodes[i]->Lid()]=true;
+ 
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+@@ -7229,9 +7229,6 @@
+ 	IssmDouble dhdt_g,mb_g,ms_g,Jdet;
+ 	IssmDouble h,gamma,thickness;
+ 	IssmDouble hnx,hny,dhnx[2],dhny[2];
+-	IssmDouble vel,vx,vy,dvxdx,dvydy;
+-	IssmDouble D[2][2];
+-	int        stabilization=0;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -7249,26 +7246,19 @@
+ 
+ 	/*Retrieve all Inputs and parameters: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* H_input=inputs->GetInput(ThicknessEnum); _assert_(H_input);
++	Input* H_input =inputs->GetInput(ThicknessEnum); _assert_(H_input);
++	h=sqrt(2.*this->GetArea());
+ 
+-	/*Get vector N for all nodes*/
++	/*Get vector N for all nodes and build HNx and HNy*/
+ 	GetInputListOnNodes(Nx,SurfaceSlopeXEnum);
+ 	GetInputListOnNodes(Ny,SurfaceSlopeYEnum);
++	GetInputListOnNodes(H,ThicknessEnum);
+ 	for(int i=0;i<numnodes;i++){
+ 		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]+1.e-10);
+-		Nx[i] = -Nx[i]/norm;
+-		Ny[i] = -Ny[i]/norm;
++		HNx[i] = -H[i]*Nx[i]/norm;
++		HNy[i] = -H[i]*Ny[i]/norm;
+ 	}
+ 
+-	/*Build HNx and HNy*/
+-	GetInputListOnNodes(H,ThicknessEnum);
+-	for(int i=0;i<numnodes;i++){
+-		HNx[i]=H[i]*Nx[i];
+-		HNy[i]=H[i]*Ny[i];
+-	}
+-
+-	h=sqrt(2.*this->GetArea());
+-
+ 	/*Start looping on the number of gaussian points:*/
+ 	GaussTria* gauss=new GaussTria(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -7296,35 +7286,6 @@
+ 							);
+ 			}
+ 		}
+-
+-		vx=hnx;
+-		vy=hny;
+-		if(stabilization==2){
+-			/*Streamline upwinding*/
+-			vel=sqrt(vx*vx+vy*vy)+1.e-8;
+-			D[0][0]=h/(2*vel)*vx*vx;
+-			D[1][0]=h/(2*vel)*vy*vx;
+-			D[0][1]=h/(2*vel)*vx*vy;
+-			D[1][1]=h/(2*vel)*vy*vy;
+-		}
+-		else if(stabilization==1){
+-			/*MacAyeal*/
+-			D[0][0]=h/2.0*fabs(vx);
+-			D[0][1]=0.;
+-			D[1][0]=0.;
+-			D[1][1]=h/2.0*fabs(vy);
+-		}
+-		if(stabilization==1 || stabilization==2){
+-			GetBprimeMasstransport(B,&xyz_list[0][0],gauss);
+-			D[0][0]=gauss->weight*Jdet*D[0][0];
+-			D[1][0]=gauss->weight*Jdet*D[1][0];
+-			D[0][1]=gauss->weight*Jdet*D[0][1];
+-			D[1][1]=gauss->weight*Jdet*D[1][1];
+-			TripleMultiply(B,2,numnodes,1,
+-						&D[0][0],2,2,0,
+-						B,2,numnodes,0,
+-						&Ke->values[0],1);
+-		}
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -7347,7 +7308,7 @@
+ 	IssmDouble D_scalar,Jdet,thickness;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble D[2][2];
+-	IssmDouble l=12.;
++	IssmDouble l=8.;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -7517,25 +7478,18 @@
+ 	Input* mb_input=inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(mb_input);
+ 	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);
+ 	Input* H_input=inputs->GetInput(ThicknessEnum); _assert_(H_input);
++	h=sqrt(2.*this->GetArea());
+ 
+ 	/*Get vector N for all nodes*/
+ 	GetInputListOnNodes(Nx,SurfaceSlopeXEnum);
+ 	GetInputListOnNodes(Ny,SurfaceSlopeYEnum);
++	GetInputListOnNodes(H,ThicknessEnum);
+ 	for(int i=0;i<numnodes;i++){
+ 		IssmDouble norm=sqrt(Nx[i]*Nx[i]+Ny[i]*Ny[i]+1.e-10);
+-		Nx[i] = -Nx[i]/norm;
+-		Ny[i] = -Ny[i]/norm;
++		Nx[i] = -H[i]*Nx[i]/norm;
++		Ny[i] = -H[i]*Ny[i]/norm;
+ 	}
+ 
+-	/*Build HNx and HNy*/
+-	GetInputListOnNodes(H,ThicknessEnum);
+-	for(int i=0;i<numnodes;i++){
+-		HNx[i]=H[i]*Nx[i];
+-		HNy[i]=H[i]*Ny[i];
+-	}
+-
+-	h=sqrt(2.*this->GetArea());
+-
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss=new GaussTria(2);
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+@@ -7585,7 +7539,7 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble Jdet;
+ 	IssmDouble thickness,slope[2];
+-	IssmDouble taud_x;
++	IssmDouble taud_x,norms,normv,vx,vy;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -7593,11 +7547,15 @@
+ 	/*Initialize Element vector and other vectors*/
+ 	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
+ 	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    Vx     = xNew<IssmDouble>(numnodes);
++	IssmDouble*    Vy     = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	Input* H_input       = inputs->GetInput(ThicknessEnum); _assert_(H_input);
+ 	Input* surface_input = inputs->GetInput(SurfaceEnum);   _assert_(surface_input);
++	Input* vx_input      = inputs->GetInput(VxEnum);
++	Input* vy_input      = inputs->GetInput(VyEnum);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss=new GaussTria(2);
+@@ -7607,8 +7565,14 @@
+ 
+ 		H_input->GetInputValue(&thickness,gauss);
+ 		surface_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
++		if(vx_input && vy_input){
++			vx_input->GetInputValue(&vx,gauss);
++			vy_input->GetInputValue(&vy,gauss);
++			norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1]);
++			normv = sqrt(vx*vx + vy*vy);
++			if(normv>15./(365.*24.*3600.)) slope[0] = -vx/normv*norms;
++		}
+ 		taud_x = matpar->GetRhoIce()*matpar->GetG()*thickness*slope[0];
+-		//taud_x = slope[0];
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+@@ -7629,19 +7593,21 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble Jdet;
+ 	IssmDouble thickness,slope[2];
+-	IssmDouble taud_y;
++	IssmDouble taud_y,norms,normv,vx,vy;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+ 
+ 	/*Initialize Element vector and other vectors*/
+ 	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
+-	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	Input* H_input       = inputs->GetInput(ThicknessEnum); _assert_(H_input);
+ 	Input* surface_input = inputs->GetInput(SurfaceEnum);   _assert_(surface_input);
++	Input* vx_input      = inputs->GetInput(VxEnum);
++	Input* vy_input      = inputs->GetInput(VyEnum);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss=new GaussTria(2);
+@@ -7651,8 +7617,14 @@
+ 
+ 		H_input->GetInputValue(&thickness,gauss);
+ 		surface_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
++		if(vx_input && vy_input){
++			vx_input->GetInputValue(&vx,gauss);
++			vy_input->GetInputValue(&vy,gauss);
++			norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1]);
++			normv = sqrt(vx*vx + vy*vy);
++			if(normv>15./(365.*24.*3600.)) slope[1] = -vy/normv*norms;
++		}
+ 		taud_y = matpar->GetRhoIce()*matpar->GetG()*thickness*slope[1];
+-		//taud_y = slope[1];
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16035)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16036)
+@@ -3262,10 +3262,10 @@
+ 	/*Loop over all nodes*/
+ 	for(int i=0;i<numnodes;i++){
+ 
+-		if(!flags[this->nodes[i]->Sid()]){
++		if(!flags[this->nodes[i]->Lid()]){
+ 
+ 			/*flag current node so that no other element processes it*/
+-			flags[this->nodes[i]->Sid()]=true;
++			flags[this->nodes[i]->Lid()]=true;
+ 
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
Index: /issm/oecreview/Archive/15392-16133/ISSM-16036-16037.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16036-16037.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16036-16037.diff	(revision 16134)
@@ -0,0 +1,69 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16036)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16037)
+@@ -5309,8 +5309,7 @@
+ 	IssmDouble  vec_heatflux[3];
+ 	IssmDouble  normal_base[3], d1enthalpy[3];
+ 	IssmDouble  basalmeltingrate[NUMVERTICES], watercolumn[NUMVERTICES];
+-	IssmDouble  enthalpy[NUMVERTICES], enthalpyup;
+-	IssmDouble  pressure[NUMVERTICES], pressureup;
++	IssmDouble  enthalpy[NUMVERTICES],pressure[NUMVERTICES];
+ 	IssmDouble  temperature, waterfraction;
+ 	IssmDouble  latentheat, rho_ice;
+ 	IssmDouble  basalfriction, alpha2;
+@@ -5339,6 +5338,7 @@
+ 	GetInputListOnVertices(&geothermalflux[0],BasalforcingsGeothermalfluxEnum);
+ 	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum); _assert_(enthalpy_input);
+ 
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 
+ 	/*Build friction element, needed later: */
+@@ -5347,11 +5347,9 @@
+ 
+ 	/*Ok, get meltingrates now from basal conditions*/
+ 	GaussPenta* gauss=new GaussPenta();
+-	GaussPenta* gaussup=new GaussPenta();
+ 	for(int iv=0;iv<3;iv++){
+ 
+ 		gauss->GaussVertex(iv);
+-		gaussup->GaussVertex(iv+3);
+ 		checkpositivethickness=true;
+ 
+ 		/*Calculate basal meltingrate after Fig.5 of A.Aschwanden 2012*/
+@@ -5407,7 +5405,6 @@
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+-	delete gaussup;
+ 	delete friction;
+ }
+ /*}}}*/
+@@ -5419,24 +5416,17 @@
+ 	IssmDouble waterfraction[NUMVERTICES], temperature[NUMVERTICES];
+ 	IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
+ 	IssmDouble latentheat, dt;
+-	GaussPenta* gauss;
+ 
+-	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum); _assert_(watercolumn_input);
+-	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum);       _assert_(enthalpy_input);
+-	Input* pressure_input=inputs->GetInput(PressureEnum);       _assert_(pressure_input);
+-
+ 	/*Check wether enthalpy is activated*/
+ 	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	if(!isenthalpy) return;       
+ 
++	GetInputListOnVertices(&enthalpy[0],EnthalpyEnum);
++	GetInputListOnVertices(&pressure[0],PressureEnum);
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	latentheat=matpar->GetLatentHeat();
+ 
+-	gauss=new GaussPenta();
+ 	for(int iv=0;iv<NUMVERTICES;iv++){ 
+-		gauss->GaussVertex(iv);
+-		enthalpy_input->GetInputValue(&enthalpy[iv], gauss);
+-		pressure_input->GetInputValue(&pressure[iv], gauss);
+ 		matpar->EnthalpyToThermal(&temperature[iv],&waterfraction[iv], enthalpy[iv],pressure[iv]); 
+ 
+ 		/*drain water fraction & update enthalpy*/
Index: /issm/oecreview/Archive/15392-16133/ISSM-16037-16038.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16037-16038.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16037-16038.diff	(revision 16134)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16037)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16038)
+@@ -523,7 +523,6 @@
+ 	int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
+ 
+ 	/*Create connectivity vector*/
+-	MPI_Barrier(MPI_COMM_WORLD); double start_core2=MPI_Wtime( );
+ 	for(i=0;i<nodes->Size();i++){
+ 		Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
+ 		if(node->InAnalysis(configuration_type)){
+@@ -568,8 +567,6 @@
+ 	xDelete<int>(count2offset_l);
+ 	xDelete<int>(head_l);
+ 	xDelete<int>(next_l);
+-	MPI_Barrier(MPI_COMM_WORLD); double finish_core2=MPI_Wtime( );
+-	_printf0_("\nTotal ellapsed time "<<finish_core2-start_core2<<" seconds  \n");
+ 
+ 	/*sum over all cpus*/
+ 	ISSM_MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
Index: /issm/oecreview/Archive/15392-16133/ISSM-16038-16039.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16038-16039.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16038-16039.diff	(revision 16134)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/test/NightlyRun/test431.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.m	(revision 16038)
++++ ../trunk-jpl/test/NightlyRun/test431.m	(revision 16039)
+@@ -7,6 +7,7 @@
+ md.timestepping.time_step=0.;
+ md.thermal.isenthalpy=1;
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
++md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 16038)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 16039)
+@@ -5,6 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
++md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+Index: ../trunk-jpl/test/NightlyRun/test325.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.m	(revision 16038)
++++ ../trunk-jpl/test/NightlyRun/test325.m	(revision 16039)
+@@ -6,6 +6,7 @@
+ md.timestepping.time_step=0.;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
++md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md=solve(md,EnthalpySolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test432.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.m	(revision 16038)
++++ ../trunk-jpl/test/NightlyRun/test432.m	(revision 16039)
+@@ -7,6 +7,7 @@
+ md.timestepping.time_step=0.;
+ md.thermal.isenthalpy=1;
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
++md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test122.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.m	(revision 16038)
++++ ../trunk-jpl/test/NightlyRun/test122.m	(revision 16039)
+@@ -4,6 +4,7 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'HO','all');
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
++md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md.thermal.isenthalpy=1;
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test326.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.m	(revision 16038)
++++ ../trunk-jpl/test/NightlyRun/test326.m	(revision 16039)
+@@ -5,6 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
++md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md.transient.isstressbalance=0;
+ md.transient.ismasstransport=0;
+ md.transient.isthermal=1;
+Index: ../trunk-jpl/test/NightlyRun/test327.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.m	(revision 16038)
++++ ../trunk-jpl/test/NightlyRun/test327.m	(revision 16039)
+@@ -5,6 +5,7 @@
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
++md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md.initialization.temperature(:)=272.;
+ md.thermal.spctemperature(find(md.mesh.vertexonsurface))=272.;
+ md.thermal.isenthalpy=1;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16039-16040.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16039-16040.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16039-16040.diff	(revision 16134)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/classes/initialization.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.m	(revision 16039)
++++ ../trunk-jpl/src/m/classes/initialization.m	(revision 16040)
+@@ -55,6 +55,7 @@
+ 			end
+ 			if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy) | solution==EnthalpySolutionEnum(),
+ 				md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices 1]);
++				md = checkfield(md,'initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices 1]);
+ 			end
+ 			if ismember(HydrologyShreveAnalysisEnum(),analyses),
+ 				if isa(md.hydrology,'hydrologyshreve'),
+Index: ../trunk-jpl/src/m/classes/initialization.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.py	(revision 16039)
++++ ../trunk-jpl/src/m/classes/initialization.py	(revision 16040)
+@@ -68,6 +68,7 @@
+ 			md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices])
+ 		if (EnthalpyAnalysisEnum() in analyses and md.thermal.isenthalpy) or solution==EnthalpySolutionEnum():
+ 			md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices])
++			md = checkfield(md,'initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices])
+ 		if HydrologyShreveAnalysisEnum() in analyses:
+ 			md = checkfield(md,'initialization.watercolumn','NaN',1,'size',[md.mesh.numberofvertices])
+ 		return md
Index: /issm/oecreview/Archive/15392-16133/ISSM-16040-16041.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16040-16041.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16040-16041.diff	(revision 16134)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 16041)
+@@ -14,6 +14,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+Index: ../trunk-jpl/test/NightlyRun/test122.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.py	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test122.py	(revision 16041)
+@@ -13,6 +13,7 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'HO','all')
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md.thermal.isenthalpy=1
+ md.thermal.stabilization=2
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test431.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.py	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test431.py	(revision 16041)
+@@ -17,6 +17,7 @@
+ md.timestepping.time_step=0.
+ md.thermal.isenthalpy=1
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md=solve(md,SteadystateSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test432.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.py	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test432.py	(revision 16041)
+@@ -17,6 +17,7 @@
+ md.timestepping.time_step=0.
+ md.thermal.isenthalpy=1
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md=solve(md,SteadystateSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test325.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.py	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test325.py	(revision 16041)
+@@ -16,6 +16,7 @@
+ md.timestepping.time_step=0.
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md=solve(md,EnthalpySolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 16041)
+@@ -6,6 +6,7 @@
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
++md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md=solve(md,EnthalpySolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test326.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.py	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test326.py	(revision 16041)
+@@ -15,6 +15,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md.transient.isstressbalance=False
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+Index: ../trunk-jpl/test/NightlyRun/test327.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.py	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test327.py	(revision 16041)
+@@ -15,6 +15,7 @@
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md.initialization.temperature[:]=272.
+ md.thermal.spctemperature[numpy.nonzero(md.mesh.vertexonsurface)[0]]=272.
+ md.thermal.isenthalpy=1
+Index: ../trunk-jpl/test/NightlyRun/test120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.py	(revision 16040)
++++ ../trunk-jpl/test/NightlyRun/test120.py	(revision 16041)
+@@ -16,6 +16,7 @@
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros(md.mesh.numberofvertices)
++md.initialization.watercolumn=numpy.zeros(md.mesh.numberofvertices)
+ md=solve(md,EnthalpySolutionEnum())
+ 
+ #Fields and tolerances to track changes
Index: /issm/oecreview/Archive/15392-16133/ISSM-16041-16042.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16041-16042.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16041-16042.diff	(revision 16134)
@@ -0,0 +1,507 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 16042)
+@@ -324,6 +324,26 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Numericalflux::GetNodesLidList{{{*/
++void Numericalflux::GetNodesLidList(int* lidlist){
++
++	int type;
++	inputs->GetInputValue(&type,NumericalfluxTypeEnum);
++	_assert_(lidlist);
++	_assert_(nodes);
++
++	switch(type){
++		case InternalEnum:
++			for(int i=0;i<NUMNODES_INTERNAL;i++) lidlist[i]=nodes[i]->Lid();
++			return;
++		case BoundaryEnum:
++			for(int i=0;i<NUMNODES_BOUNDARY;i++) lidlist[i]=nodes[i]->Lid();
++			return;
++		default:
++			_error_("Numericalflux type " << EnumToStringx(type) << " not supported yet");
++	}
++}
++/*}}}*/
+ /*FUNCTION Numericalflux::GetNumberOfNodes{{{*/
+ int Numericalflux::GetNumberOfNodes(void){
+ 
+@@ -369,7 +389,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Numericalflux::SetwiseNodeConnectivity{{{*/
+-void Numericalflux::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++void Numericalflux::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){
+ 
+ 	/*Output */
+ 	int d_nz = 0;
+@@ -383,6 +403,10 @@
+ 			/*flag current node so that no other element processes it*/
+ 			flags[this->nodes[i]->Lid()]=true;
+ 
++			int counter=0;
++			while(flagsindices[counter]>=0) counter++;
++			flagsindices[counter]=this->nodes[i]->Lid();
++
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+ 				case FsetEnum:
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 16042)
+@@ -152,6 +152,15 @@
+ 	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->Sid();
+ }
+ /*}}}*/
++/*FUNCTION Penpair::GetNodesLidList{{{*/
++void Penpair::GetNodesLidList(int* lidlist){
++
++	_assert_(lidlist);
++	_assert_(nodes);
++
++	for(int i=0;i<NUMVERTICES;i++) lidlist[i]=nodes[i]->Lid();
++}
++/*}}}*/
+ /*FUNCTION Penpair::GetNumberOfNodes{{{*/
+ int Penpair::GetNumberOfNodes(void){
+ 
+@@ -207,7 +216,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Penpair::SetwiseNodeConnectivity{{{*/
+-void Penpair::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++void Penpair::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){
+ 
+ 	/*Output */
+ 	int d_nz = 0;
+@@ -221,6 +230,10 @@
+ 			/*flag current node so that no other element processes it*/
+ 			flags[this->nodes[i]->Lid()]=true;
+ 
++			int counter=0;
++			while(flagsindices[counter]>=0) counter++;
++			flagsindices[counter]=this->nodes[i]->Lid();
++
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+ 				case FsetEnum:
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16042)
+@@ -78,12 +78,13 @@
+ 		void  CreatePVector(Vector<IssmDouble>* pf);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
+ 		void  GetNodesSidList(int* sidlist);
++		void  GetNodesLidList(int* lidlist);
+ 		int   GetNumberOfNodes(void);
+ 		bool  IsPenalty(void);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+-		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
++		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Riftfront specific routines: {{{*/
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 16042)
+@@ -66,13 +66,14 @@
+ 		void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+ 		void CreatePVector(Vector<IssmDouble>* pf);
+ 		void GetNodesSidList(int* sidlist);
++		void GetNodesLidList(int* lidlist);
+ 		int  GetNumberOfNodes(void);
+ 		void CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
+ 		bool IsPenalty(void);
+ 		void PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+-		void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
++		void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
+ 		bool InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Numericalflux management:{{{*/
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 16042)
+@@ -57,12 +57,13 @@
+ 		void  CreatePVector(Vector<IssmDouble>* pf);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+ 		void  GetNodesSidList(int* sidlist);
++		void  GetNodesLidList(int* lidlist);
+ 		int   GetNumberOfNodes(void);
+ 		bool  IsPenalty(void);
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff,Matrix<IssmDouble>* Kfs,IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax);
+-		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
++		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 			/*Penpair management: {{{*/
+Index: ../trunk-jpl/src/c/classes/Loads/Load.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Load.h	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Load.h	(revision 16042)
+@@ -29,6 +29,7 @@
+ 		virtual bool  IsPenalty(void)=0;
+ 		virtual int   GetNumberOfNodes(void)=0;
+ 		virtual void  GetNodesSidList(int* sidlist)=0;
++		virtual void  GetNodesLidList(int* lidlist)=0;
+ 		virtual void  SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
+ 		virtual void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs)=0;
+ 		virtual void  CreatePVector(Vector<IssmDouble>* pf)=0;
+@@ -37,6 +38,6 @@
+ 		virtual void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs, IssmDouble kmax)=0;
+ 		virtual void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax)=0;
+ 		virtual bool  InAnalysis(int analysis_type)=0;
+-		virtual void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;
++		virtual void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum)=0;
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16042)
+@@ -205,6 +205,15 @@
+ 	sidlist[0]=node->Sid();
+ }
+ /*}}}*/
++/*FUNCTION Pengrid::GetNodesLidList{{{*/
++void Pengrid::GetNodesLidList(int* lidlist){
++
++	_assert_(lidlist);
++	_assert_(node);
++
++	lidlist[0]=node->Lid();
++}
++/*}}}*/
+ /*FUNCTION Pengrid::GetNumberOfNodes{{{*/
+ int Pengrid::GetNumberOfNodes(void){
+ 
+@@ -291,7 +300,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Pengrid::SetwiseNodeConnectivity{{{*/
+-void Pengrid::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++void Pengrid::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){
+ 
+ 	/*Output */
+ 	int d_nz = 0;
+@@ -302,6 +311,10 @@
+ 		/*flag current node so that no other element processes it*/
+ 		flags[this->node->Lid()]=true;
+ 
++		int counter=0;
++		while(flagsindices[counter]>=0) counter++;
++		flagsindices[counter]=this->node->Lid();
++
+ 		/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 		switch(set2_enum){
+ 			case FsetEnum:
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 16042)
+@@ -77,12 +77,13 @@
+ 		void  CreatePVector(Vector<IssmDouble>* pf);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
+ 		void  GetNodesSidList(int* sidlist);
++		void  GetNodesLidList(int* lidlist);
+ 		int   GetNumberOfNodes(void);
+ 		bool  IsPenalty(void);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+-		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
++		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Pengrid management {{{*/
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16042)
+@@ -371,6 +371,15 @@
+ 	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->Sid();
+ }
+ /*}}}*/
++/*FUNCTION Riftfront::GetNodesLidList{{{*/
++void Riftfront::GetNodesLidList(int* lidlist){
++
++	_assert_(lidlist);
++	_assert_(nodes);
++
++	for(int i=0;i<NUMVERTICES;i++) lidlist[i]=nodes[i]->Lid();
++}
++/*}}}*/
+ /*FUNCTION Riftfront::GetNumberOfNodes{{{*/
+ int Riftfront::GetNumberOfNodes(void){
+ 
+@@ -384,7 +393,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Riftfront::SetwiseNodeConnectivity{{{*/
+-void Riftfront::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++void Riftfront::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){
+ 
+ 	/*Output */
+ 	int d_nz = 0;
+@@ -398,6 +407,10 @@
+ 			/*flag current node so that no other element processes it*/
+ 			flags[this->nodes[i]->Lid()]=true;
+ 
++			int counter=0;
++			while(flagsindices[counter]>=0) counter++;
++			flagsindices[counter]=this->nodes[i]->Lid();
++
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+ 				case FsetEnum:
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16041)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16042)
+@@ -517,27 +517,45 @@
+ 
+ 	/*OK now count number of dofs and flag each nodes for each node i*/
+ 	bool *flags                  = xNew<bool>(localnumnodes);
++	int  *flagsindices           = xNew<int>(localnumnodes);
+ 	int  *d_connectivity         = xNewZeroInit<int>(numnodes);
+ 	int  *o_connectivity         = xNewZeroInit<int>(numnodes);
+ 	int  *connectivity_clone     = xNewZeroInit<int>(numnodes);
+ 	int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
+ 
++	/*Resetting flags to false at eahc iteration takes a lot of time, so we keep track of the flags
++	 * to reset in flagsindices, initialized with -1*/
++	for(i = 0;i<localnumnodes;i++) flags[i]        = false;
++	for(i = 0;i<localnumnodes;i++) flagsindices[i] = -1;
++
+ 	/*Create connectivity vector*/
+ 	for(i=0;i<nodes->Size();i++){
+ 		Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
+ 		if(node->InAnalysis(configuration_type)){
+ 
+-			/*Reinitialize flags to 0*/
+-			for(j=0;j<localnumnodes;j++) flags[j]=false;
++			/*Reinitialize flags to false*/
++			j=0;
++			while(true){
++				if(flagsindices[j]>=0){
++					flags[flagsindices[j]] = false;
++					flagsindices[j]        = -1;
++					j++;
++				}
++				else{
++					break;
++				}
++			}
+ 
++			//for(j=0;j<localnumnodes;j++) flags[j]=false;
++
+ 			/*Loop over elements that hold node number i*/
+-			//if(head_e[node->Sid()]==-1 && head_l[node->Sid()]==-1){
+-			//	printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Sid()+1);
++			//if(head_e[node->Lid()]==-1 && head_l[node->Lid()]==-1){
++			//	printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Lid()+1);
+ 			//}
+ 			for(j=head_e[node->Sid()];j!=-1;j=next_e[j]){
+ 				offset=count2offset_e[j];
+ 				element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset));
+-				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
++				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
+ 				if(node->IsClone()){
+ 					connectivity_clone[node->Sid()]+=d_nz+o_nz;
+ 				}
+@@ -549,7 +567,7 @@
+ 			for(j=head_l[node->Sid()];j!=-1;j=next_l[j]){
+ 				offset=count2offset_l[j];
+ 				load=dynamic_cast<Load*>(loads->GetObjectByOffset(offset));
+-				load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
++				load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
+ 				if(node->IsClone()){
+ 					connectivity_clone[node->Sid()]+=d_nz+o_nz;
+ 				}
+@@ -561,6 +579,7 @@
+ 		}
+ 	}
+ 	xDelete<bool>(flags);
++	xDelete<int>(flagsindices);
+ 	xDelete<int>(count2offset_e);
+ 	xDelete<int>(head_e);
+ 	xDelete<int>(next_e);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16042)
+@@ -35,7 +35,7 @@
+ 
+ 		virtual void   Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
+ 		virtual void   SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters)=0;
+-		virtual void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;
++		virtual void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum)=0;
+ 		virtual void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>*  Kfs)=0;
+ 		virtual void   CreateDVector(Vector<IssmDouble>* df)=0;
+ 		virtual void   CreatePVector(Vector<IssmDouble>* pf)=0;
+@@ -44,6 +44,7 @@
+ 		virtual int    GetNodeIndex(Node* node)=0;
+ 		virtual int    GetNumberOfNodes(void)=0;
+ 		virtual void   GetNodesSidList(int* sidlist)=0;
++		virtual void   GetNodesLidList(int* sidlist)=0;
+ 
+ 		virtual int    Sid()=0;
+ 		virtual bool   IsFloating()=0; 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16042)
+@@ -118,7 +118,7 @@
+ 
+ /*Other*/
+ /*FUNCTION Tria::SetwiseNodeConnectivity{{{*/
+-void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){
+ 
+ 	/*Intermediaries*/
+ 	const int numnodes = this->NumberofNodes();
+@@ -135,6 +135,10 @@
+ 			/*flag current node so that no other element processes it*/
+ 			flags[this->nodes[i]->Lid()]=true;
+ 
++			int counter=0;
++			while(flagsindices[counter]>=0) counter++;
++			flagsindices[counter]=this->nodes[i]->Lid();
++
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+ 				case FsetEnum:
+@@ -1112,6 +1116,18 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetNodesLidList{{{*/
++void Tria::GetNodesLidList(int* lidlist){
++
++	_assert_(lidlist);
++	_assert_(nodes);
++	int numnodes = this->NumberofNodes();
++
++	for(int i=0;i<numnodes;i++){
++		lidlist[i]=nodes[i]->Lid();
++	}
++}
++/*}}}*/
+ /*FUNCTION Tria::GetNumberOfNodes;{{{*/
+ int Tria::GetNumberOfNodes(void){
+ 	return this->NumberofNodes();
+@@ -7568,7 +7584,7 @@
+ 		if(vx_input && vy_input){
+ 			vx_input->GetInputValue(&vx,gauss);
+ 			vy_input->GetInputValue(&vy,gauss);
+-			norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1]);
++			norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1]+1.e-10);
+ 			normv = sqrt(vx*vx + vy*vy);
+ 			if(normv>15./(365.*24.*3600.)) slope[0] = -vx/normv*norms;
+ 		}
+@@ -7620,7 +7636,7 @@
+ 		if(vx_input && vy_input){
+ 			vx_input->GetInputValue(&vx,gauss);
+ 			vy_input->GetInputValue(&vy,gauss);
+-			norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1]);
++			norms = sqrt(slope[0]*slope[0]+slope[1]*slope[1]+1.e-10);
+ 			normv = sqrt(vx*vx + vy*vy);
+ 			if(normv>15./(365.*24.*3600.)) slope[1] = -vy/normv*norms;
+ 		}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16042)
+@@ -75,7 +75,7 @@
+ 		void        ComputeStressTensor();
+ 		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
+ 		void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
+-		void        SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
++		void        SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
+ 		void        CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+ 		void        CreateDVector(Vector<IssmDouble>* df);
+ 		void        CreatePVector(Vector<IssmDouble>* pf);
+@@ -83,6 +83,7 @@
+ 		void        Delta18oParameterization(void);
+ 		int         GetNodeIndex(Node* node);
+ 		void        GetNodesSidList(int* sidlist);
++		void        GetNodesLidList(int* lidlist);
+ 		int         GetNumberOfNodes(void);
+ 		int         Sid();
+ 		bool        IsOnBed();
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16042)
+@@ -1326,6 +1326,18 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetNodesLidList{{{*/
++void Penta::GetNodesLidList(int* lidlist){
++
++	_assert_(lidlist);
++	_assert_(nodes);
++	int numnodes = this->NumberofNodes();
++
++	for(int i=0;i<numnodes;i++){
++		lidlist[i]=nodes[i]->Lid();
++	}
++}
++/*}}}*/
+ /*FUNCTION Penta::GetNumberOfNodes;{{{*/
+ int Penta::GetNumberOfNodes(void){
+ 	return this->NumberofNodes();
+@@ -3250,7 +3262,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SetwiseNodeConnectivity{{{*/
+-void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){
+ 
+ 	/*Intermediaries*/
+ 	const int numnodes = this->NumberofNodes();
+@@ -3267,6 +3279,10 @@
+ 			/*flag current node so that no other element processes it*/
+ 			flags[this->nodes[i]->Lid()]=true;
+ 
++			int counter=0;
++			while(flagsindices[counter]>=0) counter++;
++			flagsindices[counter]=this->nodes[i]->Lid();
++
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+ 				case FsetEnum:
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16041)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16042)
+@@ -79,7 +79,7 @@
+ 		void   ComputeStressTensor();
+ 		void   Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+ 		void   SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
+-		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
++		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
+ 		void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+ 		void   CreateDVector(Vector<IssmDouble>* df);
+ 		void   CreatePVector(Vector<IssmDouble>* pf);
+@@ -88,6 +88,7 @@
+ 		void   DeleteResults(void);
+ 		int    GetNodeIndex(Node* node);
+ 		void   GetNodesSidList(int* sidlist);
++		void   GetNodesLidList(int* lidlist);
+ 		int    GetNumberOfNodes(void);
+ 		void   GetSolutionFromInputs(Vector<IssmDouble>* solution);
+ 		IssmDouble GetZcoord(GaussPenta* gauss);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16042-16043.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16042-16043.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16042-16043.diff	(revision 16134)
@@ -0,0 +1,91 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16042)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16043)
+@@ -443,7 +443,7 @@
+ 	int     *head_l             = NULL;
+ 	int     *next_l             = NULL;
+ 	int     *count2offset_l     = NULL;
+-	int     *sidlist            = NULL;
++	int     *lidlist            = NULL;
+ 
+ 	/*output*/
+ 	int *d_nnz = NULL;
+@@ -468,18 +468,18 @@
+ 	 *   for(int i=head[id];i!=-1;i=next[i])
+ 	 * will loop over all the elements that are connected to the node number
+ 	 * id*/
+-	head_e         = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head_e[i]=-1;
++	head_e         = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_e[i]=-1;
+ 	next_e         = xNew<int>(elements->Size()*numnodesperelement);
+ 	count2offset_e = xNew<int>(elements->Size()*numnodesperelement);
+ 
+ 	k=0;
+ 	for(i=0;i<elements->Size();i++){
+ 		element = dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		sidlist = xNew<int>(element->GetNumberOfNodes());
+-		element->GetNodesSidList(sidlist);
++		lidlist = xNew<int>(element->GetNumberOfNodes());
++		element->GetNodesLidList(lidlist);
+ 
+ 		for(j=0;j<element->GetNumberOfNodes();j++){
+-			index = sidlist[j];
++			index = lidlist[j];
+ 			_assert_(index>=0 && index<numnodes);
+ 
+ 			count2offset_e[k]=i;
+@@ -488,22 +488,22 @@
+ 		}
+ 		for(j=0;j<numnodesperelement-element->GetNumberOfNodes();j++) k++;
+ 
+-		xDelete<int>(sidlist);
++		xDelete<int>(lidlist);
+ 	}
+ 
+ 	/*Chain for loads*/
+-	head_l         = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head_l[i]=-1;
++	head_l         = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_l[i]=-1;
+ 	next_l         = xNew<int>(loads->Size(configuration_type)*numnodesperload);
+ 	count2offset_l = xNew<int>(loads->Size(configuration_type)*numnodesperload);
+ 	k=0;
+ 	for(i=0;i<loads->Size();i++){
+ 		load = dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+ 		if(!load->InAnalysis(configuration_type)) continue;
+-		sidlist = xNew<int>(load->GetNumberOfNodes());
+-		load->GetNodesSidList(sidlist);
++		lidlist = xNew<int>(load->GetNumberOfNodes());
++		load->GetNodesLidList(lidlist);
+ 
+ 		for(j=0;j<load->GetNumberOfNodes();j++){
+-			index = sidlist[j];
++			index = lidlist[j];
+ 			_assert_(index>=0 && index<numnodes);
+ 
+ 			count2offset_l[k]=i;
+@@ -512,7 +512,7 @@
+ 		}
+ 		for(j=0;j<numnodesperload-load->GetNumberOfNodes();j++) k++;
+ 
+-		xDelete<int>(sidlist);
++		xDelete<int>(lidlist);
+ 	}
+ 
+ 	/*OK now count number of dofs and flag each nodes for each node i*/
+@@ -552,7 +552,7 @@
+ 			//if(head_e[node->Lid()]==-1 && head_l[node->Lid()]==-1){
+ 			//	printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Lid()+1);
+ 			//}
+-			for(j=head_e[node->Sid()];j!=-1;j=next_e[j]){
++			for(j=head_e[node->Lid()];j!=-1;j=next_e[j]){
+ 				offset=count2offset_e[j];
+ 				element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset));
+ 				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
+@@ -564,7 +564,7 @@
+ 					o_connectivity[node->Sid()]+=o_nz;
+ 				}
+ 			}
+-			for(j=head_l[node->Sid()];j!=-1;j=next_l[j]){
++			for(j=head_l[node->Lid()];j!=-1;j=next_l[j]){
+ 				offset=count2offset_l[j];
+ 				load=dynamic_cast<Load*>(loads->GetObjectByOffset(offset));
+ 				load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16043-16044.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16043-16044.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16043-16044.diff	(revision 16134)
@@ -0,0 +1,158 @@
+Index: ../trunk-jpl/test/NightlyRun/test530.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test530.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test530.py	(revision 16044)
+@@ -0,0 +1,24 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',20000.)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BalancevelocitySolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['SurfaceSlopeX','SurfaceSlopeY','Vel']
++field_tolerances=[1e-13,1e-13,1e-13]
++field_values=[\
++		md.results.BalancevelocitySolution.SurfaceSlopeX,\
++		md.results.BalancevelocitySolution.SurfaceSlopeY,\
++		md.results.BalancevelocitySolution.Vel,\
++		]
+Index: ../trunk-jpl/test/NightlyRun/test531.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test531.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test531.py	(revision 16044)
+@@ -0,0 +1,26 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',20000.)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.initialization.vx[:]=0.
++md.initialization.vy[:]=0.
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BalancevelocitySolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['SurfaceSlopeX','SurfaceSlopeY','Vel']
++field_tolerances=[1e-13,1e-13,1e-13]
++field_values=[\
++		md.results.BalancevelocitySolution.SurfaceSlopeX,\
++		md.results.BalancevelocitySolution.SurfaceSlopeY,\
++		md.results.BalancevelocitySolution.Vel,\
++		]
+Index: ../trunk-jpl/test/NightlyRun/test530.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test530.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test530.m	(revision 16044)
+@@ -0,0 +1,15 @@
++md=triangle(model(),'../Exp/Pig.exp',20000.);
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
++md=parameterize(md,'../Par/Pig.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,BalancevelocitySolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'SurfaceSlopeX','SurfaceSlopeX','Vel'};
++field_tolerances={1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.BalancevelocitySolution.SurfaceSlopeX),...
++	(md.results.BalancevelocitySolution.SurfaceSlopeY),...
++	(md.results.BalancevelocitySolution.Vel),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16043)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16044)
+@@ -147,6 +147,8 @@
+ 	case 508, name='PigSteaSSA3d';
+ 	case 509, name='PigSteaHO';
+ 	case 510, name='PigSteaFS';
++	case 530, name='PigBalVel1';
++	case 531, name='PigBalVel2';
+ 	case 511, name='PigCMBFS';
+ 	case 512, name='PigCMDragHO';
+ 	case 513, name='PigCMDragSteaSSA3d';
+Index: ../trunk-jpl/test/NightlyRun/test531.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test531.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test531.m	(revision 16044)
+@@ -0,0 +1,17 @@
++md=triangle(model(),'../Exp/Pig.exp',20000.);
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
++md=parameterize(md,'../Par/Pig.par');
++md.initialization.vx(:)=0;
++md.initialization.vy(:)=0;
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,BalancevelocitySolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'SurfaceSlopeX','SurfaceSlopeX','Vel'};
++field_tolerances={1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.BalancevelocitySolution.SurfaceSlopeX),...
++	(md.results.BalancevelocitySolution.SurfaceSlopeY),...
++	(md.results.BalancevelocitySolution.Vel),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 16043)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 16044)
+@@ -157,6 +157,8 @@
+ 	514  : 'PigBamgMesh',
+ 	515  : 'PigTherTranSUPG',
+ 	516  : 'PigTherSteaSUPG',
++	530  : 'PigBalVel1',
++	531  : 'PigBalVel2',
+ 	601  : '79NorthMasstransp2d',
+ 	602  : '79NorthMasstransp2dDG',
+ 	603  : '79NorthMasstransp3d',
+Index: ../trunk-jpl/test/Archives/Archive530.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive530.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive530.nc	(revision 16043)
++++ ../trunk-jpl/test/Archives/Archive530.nc	(revision 16044)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive530.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive531.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive531.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive531.nc	(revision 16043)
++++ ../trunk-jpl/test/Archives/Archive531.nc	(revision 16044)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive531.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-16044-16045.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16044-16045.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16044-16045.diff	(revision 16134)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx
+===================================================================
+--- ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx	(revision 16044)
++++ ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx	(revision 16045)
+
+Property changes on: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.deps
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity	(revision 16044)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity	(revision 16045)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.deps
Index: /issm/oecreview/Archive/15392-16133/ISSM-16045-16046.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16045-16046.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16045-16046.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/scripts/historyISSM.m
+===================================================================
+--- ../trunk-jpl/scripts/historyISSM.m	(revision 16045)
++++ ../trunk-jpl/scripts/historyISSM.m	(revision 16046)
+@@ -1,10 +1,7 @@
+ !vim runme.m
+ runme('id',[101]);
+ md.mesh.numberofelements
+-md=mesh(md,'DomainOutline.exp',5000);
+-md=setflowequation(md,'macayeal','all');
+ md=solve(md,TransientSolutionEnum);
+-md=solve(md,DiagnosticSolutionEnum);
+-md=loadresultsfromcluster(md);
+-plotmodel(md,'data',md.results.DiagnosticSolution.Vel)
++md=solve(md,StressbalanceSolutionEnum);
++plotmodel(md,'data',md.results.StressbalanceSolution.Vel)
+ plotmodel(md,'data',)
Index: /issm/oecreview/Archive/15392-16133/ISSM-16046-16047.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16046-16047.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16046-16047.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/analyses/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16046)
++++ ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16047)
+@@ -31,6 +31,7 @@
+ 	IssmDouble         *dummy        = NULL;
+ 	int                *control_list = NULL;
+ 	Vector<IssmDouble> *X            = NULL;
++	Vector<IssmDouble> *G            = NULL;
+ 	Vector<IssmDouble> *XL           = NULL;
+ 	Vector<IssmDouble> *XU           = NULL;
+ 
+@@ -82,7 +83,10 @@
+ 	TaoSolve(tao);
+ 	TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
+ 	TaoGetSolutionVector(tao,&X->pvector->vector);
++	G=new Vector<IssmDouble>(0); VecFree(&G->pvector->vector);
++	TaoGetGradientVector(tao,&G->pvector->vector);
+ 	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
++	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,G);
+ 	for(int i=0;i<num_controls;i++){
+ 		InputToResultx(femmodel,control_list[i]);
+ 	}
Index: /issm/oecreview/Archive/15392-16133/ISSM-16047-16048.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16047-16048.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16047-16048.diff	(revision 16134)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16047)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16048)
+@@ -58,5 +58,5 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(4+6,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
++	iomodel->DeleteData(4+6,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-16048-16049.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16048-16049.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16048-16049.diff	(revision 16134)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/m/exp/Shp2Exp.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/Shp2Exp.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/Shp2Exp.m	(revision 16049)
+@@ -0,0 +1,35 @@
++function Shp2Exp(expfilename,shapefilename)
++%SHP2EXP- transform shape file to Argus .exp file
++%
++%   Usage:
++%      Shp2Exp(expfilename,shapefilename);
++%
++%   Example:
++%      Shp2Exp('Domain.exp','Domain.shp');
++%
++%   See also EXPMASTER, EXPDOC
++
++
++	if ~exist(shapefilename,'file'),
++		error(['Shapefile ' shapefilename ' does not exist']);
++	end
++	shp=shaperead(shapefilename);
++
++	exp=struct([]);
++	for i=1:length(shp),
++		if strcmpi(shp(i).Geometry,'Polygon'),
++			x=shp(i).X; y=shp(i).Y;
++			ids=find(isnan(x));
++			x(ids)=[]; y(ids)=[];
++			
++			exp(end+1).x=x;
++			exp(end).y=y;
++			exp(end).nods=length(x);
++			exp(end).density=1;
++			exp(end).closed=1;
++			exp(end).name=num2str(shp(i).id);
++		end
++	end
++
++	expwrite(exp,expfilename);
++
Index: /issm/oecreview/Archive/15392-16133/ISSM-16049-16050.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16049-16050.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16049-16050.diff	(revision 16134)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16049)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16050)
+@@ -58,5 +58,5 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(4+6,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
++	iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
+ }
Index: /issm/oecreview/Archive/15392-16133/ISSM-16050-16051.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16050-16051.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16050-16051.diff	(revision 16134)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 16050)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 16051)
+@@ -240,18 +240,20 @@
+ end
+ 
+ %expdisp
+-filename=(getfieldvalue(options,'expdisp'));
+-style=(getfieldvalue(options,'expstyle'));
+-linewidth=(getfieldvalue(options,'linewidth',1));
+-for i=1:length(getfieldvalue(options,'expdisp')),
+-	filenamei=filename{i};
+-	stylei=style{i};
+-	if length(linewidth)==1,
+-		linewidthi=linewidth;
+-	else
+-		linewidthi=linewidth{i};
++if exist(options,'expdisp'),
++	filename=(getfieldvalue(options,'expdisp'));
++	style=(getfieldvalue(options,'expstyle'));
++	linewidth=(getfieldvalue(options,'linewidth',1));
++	for i=1:length(getfieldvalue(options,'expdisp')),
++		filenamei=filename{i};
++		stylei=style{i};
++		if length(linewidth)==1,
++			linewidthi=linewidth;
++		else
++			linewidthi=linewidth{i};
++		end
++		expdisp(filenamei,gcf,stylei,getfieldvalue(options,'linewidth',1),getfieldvalue(options,'unit',1));
+ 	end
+-	expdisp(filenamei,gcf,stylei,linewidthi,getfieldvalue(options,'unit',1));
+ end
+ 
+ %text (default value is empty, not NaN...)
Index: /issm/oecreview/Archive/15392-16133/ISSM-16051-16052.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16051-16052.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16051-16052.diff	(revision 16134)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/src/m/plot/scaleruler.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/scaleruler.m	(revision 16051)
++++ ../trunk-jpl/src/m/plot/scaleruler.m	(revision 16052)
+@@ -9,6 +9,7 @@
+ fontcolor  = getfieldvalue(options,'fontcolor','k');
+ fontweight = getfieldvalue(options,'fontweight','n');
+ fontsize   = getfieldvalue(options,'scaleruler_fontsize',16);
++unitscale  = getfieldvalue(options,'unit',1.);
+ 
+ %Go through structure and fill missing arguments
+ if length(structure)~=5
+@@ -16,15 +17,15 @@
+ end
+ 
+ %retrieve scale parameters
+-x0            = structure(1);
+-y0            = structure(2);
+-lengthscale   = structure(3);
+-widthscale    = structure(4);
+-numberofticks = structure(5);
++x0            = double(structure(1))/unitscale;
++y0            = double(structure(2))/unitscale;
++lengthscale   = double(structure(3))/unitscale;
++widthscale    = double(structure(4))/unitscale;
++numberofticks = double(structure(5));
+ 
+ %If only one tick, just draw a rectangle
+ if numberofticks==1,
+-	text(x0+lengthscale/2,y0+2*widthscale,2,[num2str(lengthscale/1000) 'km'],...
++	text(x0+lengthscale/2,y0+2*widthscale,2,[num2str(lengthscale*unitscale/1000) ' km'],...
+ 		'FontSize',fontsize,'FontWeight',fontweight,'Color',fontcolor,'HorizontalAlignment','center','VerticalAlignment','baseline');
+ 	patch([x0 x0+lengthscale x0+lengthscale x0],[y0 y0 y0+widthscale y0+widthscale],2*ones(1,4),fontcolor,'Edgecolor',fontcolor);
+ else
+@@ -47,7 +48,7 @@
+ 		Ad=Bd;
+ 		Bu=[Au(1)+unitlength Ad(2)+widthscale];
+ 		Bd=[Ad(1)+unitlength Ad(2)];
+-		Tick=Tick+unitlength;
++		Tick=(Tick+unitlength)*unitscale;
+ 
+ 		%pathes
+ 		if flag==-1
Index: /issm/oecreview/Archive/15392-16133/ISSM-16052-16053.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16052-16053.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16052-16053.diff	(revision 16134)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/src/m/plot/plot_scatter.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_scatter.m	(revision 16052)
++++ ../trunk-jpl/src/m/plot/plot_scatter.m	(revision 16053)
+@@ -1,6 +1,20 @@
+ function plot_scatter(x,y,level,varargin),
++%PLOT_SCATTER - scatter plot
++%
++%   Usage:
++%      plot_scatter(x,y,level,options);
++%
++%   Available options:
++%      'MarkerSize' : default is 3
++%      'Line'       : use line instead of circles
++%      'Cutoff'     : cut the line if the distance between 2 points is
++%                     greater than Cutoff (default is 1000)
+ 
+-options=pairoptions(varargin{:}); 
++if nargin == 4,
++	options = varargin{1};
++else
++	options=pairoptions(varargin{:}); 
++end
+ 
+ %check input
+ if numel(x)~=numel(y) | numel(x)~=numel(level),
+@@ -46,12 +60,28 @@
+ %loop over the number of colors
+ hold on
+ hp=[];
+-for i=1:numcolors
+-	pos=find(colorind==i);
+-	hprime=plot3(x(pos),y(pos),ones(size(x(pos))),...
+-		'o','MarkerSize',getfieldvalue(options,'MarkerSize',3),'MarkerEdgeColor',palette(i,:),...
+-		'MarkerFaceColor',palette(i,:));
+-	hp=[hp;hprime];
++if ~exist(options,'line'),
++	for i=1:numcolors
++		pos=find(colorind==i);
++		hprime=plot3(x(pos),y(pos),ones(size(x(pos))),...
++			'o','MarkerSize',getfieldvalue(options,'MarkerSize',3),'MarkerEdgeColor',palette(i,:),...
++			'MarkerFaceColor',palette(i,:));
++		hp=[hp;hprime];
++	end
++else
++	distances = sqrt( (x(1:end-1)-x(2:end)).^2 + (y(1:end-1)-y(2:end)).^2);
++	pos=find(distances>getfieldvalue(options,'Cutoff',1000));
++	x(pos,:)=NaN;
++	y(pos,:)=NaN;
++	for j=1:numcolors;
++		pos=find(colorind==j);
++		if(~isempty(pos) & pos(1)==1), pos(1)=[]; end
++		if ~isempty(pos),
++			tempx = [x(pos-1) x(pos) NaN(size(pos))]';
++			tempy = [y(pos-1) y(pos) NaN(size(pos))]';
++			line(tempx(1:end-1),tempy(1:end-1),'color',palette(j,:),'linewidth',getfieldvalue(options,'LineWidth',2));
++		end
++	end
+ end
+ 
+ if ~alreadyplot,
Index: /issm/oecreview/Archive/15392-16133/ISSM-16053-16054.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16053-16054.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16053-16054.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive122.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-16054-16055.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16054-16055.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16054-16055.diff	(revision 16134)
@@ -0,0 +1,107 @@
+Index: ../trunk-jpl/src/m/interp/averaging.py
+===================================================================
+--- ../trunk-jpl/src/m/interp/averaging.py	(revision 0)
++++ ../trunk-jpl/src/m/interp/averaging.py	(revision 16055)
+@@ -0,0 +1,89 @@
++import numpy as npy
++from GetAreas import GetAreas
++from scipy.sparse import csc_matrix
++
++def averaging(md,data,iterations,layer=0):
++	'''
++	AVERAGING - smooths the input over the mesh
++	
++	   This routine takes a list over the elements or the nodes in input
++	   and return a list over the nodes.
++	   For each iterations it computes the average over each element (average 
++	   of the vertices values) and then computes the average over each node
++	   by taking the average of the element around a node weighted by the
++	   elements volume
++	   For 3d mesh, a last argument can be added to specify the layer to be averaged on.
++	
++	   Usage:
++	      smoothdata=averaging(md,data,iterations)
++	      smoothdata=averaging(md,data,iterations,layer)
++	
++	   Examples:
++	      velsmoothed=averaging(md,md.initialization.vel,4)
++	      pressure=averaging(md,md.initialization.pressure,0)
++	      temperature=averaging(md,md.initialization.temperature,1,1)
++	'''
++
++	if (len(data)!=md.mesh.numberofelements & len(data)!=md.mesh.numberofvertices):
++		raise StandardError('averaging error message: data not supported yet')
++	if md.mesh.dimension==3 and layer!=0:
++		if layer<=0 or layer>md.mesh.numberoflayers:
++			raise ValueError('layer should be between 1 and md.mesh.numberoflayers')
++	else:
++		layer=0
++	
++	#initialization
++	if layer==0:
++		weights=npy.zeros(md.mesh.numberofvertices,)
++		data=data.flatten(1)
++	else:
++		weights=npy.zeros(md.mesh.numberofvertices2d,)
++		data=data[(layer-1)*md.mesh.numberofvertices2d+1:layer*md.mesh.numberofvertices2d,:]
++	
++	#load some variables (it is much faster if the variabes are loaded from md once for all)
++	if layer==0:
++		index=md.mesh.elements
++		numberofnodes=md.mesh.numberofvertices
++		numberofelements=md.mesh.numberofelements
++	else:
++		index=md.mesh.elements2d
++		numberofnodes=md.mesh.numberofvertices2d
++		numberofelements=md.mesh.numberofelements2d
++	
++	#build some variables
++	if md.mesh.dimension==3 and layer==0:
++		rep=6
++		areas=GetAreas(index,md.mesh.x,md.mesh.y,md.mesh.z)
++	elif md.mesh.dimension==2:
++		rep=3
++		areas=GetAreas(index,md.mesh.x,md.mesh.y)
++	else:
++		rep=3
++		areas=GetAreas(index,md.mesh.x2d,md.mesh.y2d)
++
++	index=index-1 # since python indexes starting from zero
++	line=index.flatten(1)
++	areas=npy.vstack(areas).reshape(-1,)
++	summation=1./rep*npy.ones(rep,)
++	linesize=rep*numberofelements
++	
++	#update weights that holds the volume of all the element holding the node i
++	weights=csc_matrix( (npy.tile(areas,(rep,1)).reshape(-1,),(line,npy.zeros(linesize,))), shape=(numberofnodes,1))
++	
++	#initialization
++	if len(data)==numberofelements:
++		average_node=csc_matrix( (npy.tile(areas*data,(rep,1)).reshape(-1,),(line,npy.zeros(linesize,))), shape=(numberofnodes,1))
++		average_node=average_node/weights
++	else:
++		average_node=data
++	
++	#loop over iteration
++	for i in npy.arange(1,iterations+1):
++		average_el=npy.asarray(npy.dot(average_node.todense()[index].reshape(numberofelements,rep),npy.vstack(summation))).reshape(-1,)
++		average_node=csc_matrix( (npy.tile(areas*average_el.reshape(-1),(rep,1)).reshape(-1,),(line,npy.zeros(linesize,))), shape=(numberofnodes,1))
++		average_node=average_node/weights
++	
++	#return output as a full matrix (C code do not like sparse matrices)
++	average=npy.asarray(average_node.todense()).reshape(-1,)
++
++	return average
+Index: ../trunk-jpl/src/m/interp/averaging.m
+===================================================================
+--- ../trunk-jpl/src/m/interp/averaging.m	(revision 16054)
++++ ../trunk-jpl/src/m/interp/averaging.m	(revision 16055)
+@@ -19,7 +19,7 @@
+ %      temperature=averaging(md,md.initialization.temperature,1,1);
+ 
+ if ((nargin~=4) & (nargin~=3)),
+-	error('averaging error message');
++	error('averaging error message: wrong number of arguments');
+ end
+ if (length(data)~=md.mesh.numberofelements & length(data)~=md.mesh.numberofvertices),
+ 	error('averaging error message: data not supported yet');
Index: /issm/oecreview/Archive/15392-16133/ISSM-16055-16056.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16055-16056.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16055-16056.diff	(revision 16134)
@@ -0,0 +1,510 @@
+Index: ../trunk-jpl/src/m/mech/analyticaldamage.py
+===================================================================
+--- ../trunk-jpl/src/m/mech/analyticaldamage.py	(revision 0)
++++ ../trunk-jpl/src/m/mech/analyticaldamage.py	(revision 16056)
+@@ -0,0 +1,245 @@
++import numpy as npy
++from pairoptions import pairoptions
++from averaging import averaging
++from plotmodel import plotmodel
++
++def analyticaldamage(md,*args):
++	'''
++	ANALYTICALDAMAGE - compute damage for an ice shelf 
++	
++		 This routine computes damage as a function of water/ice
++		 material properties, ice thickness, strain rate, and ice 
++		 rigidity.  The model must contain computed strain rates,
++		 either from observed or modeled ice velocities.
++	
++	   Available options:
++			- 'eq'			: analytical equation to use in the calculation.  Must be one of:
++									'Weertman1D' for a confined ice shelf free to flow in one direction
++									'Weertman2D' for an unconfined ice shelf free to spread in any direction
++									'Thomas' for a 2D ice shelf, taking into account full strain rate tensor (default)
++			- 'smoothing'	: the amount of smoothing to be applied to the strain rate data.
++									Type 'help averaging' for more information on its usage.
++			- 'sigmab'		: a compressive backstress term to be subtracted from the driving stress 
++									in the damage calculation
++	
++	   Return values:
++			'damage' which is truncated in the range [0,1-1e-9]
++	
++			'mask' is a mask defining areas where damage was calculated as negative prior
++			to truncation, indicating that the ice is too warm or a back stress has not
++			been accounted for.
++	
++		   'B' is the rigidity, which is equal to md.materials.rheology_B in areas outside
++			those defined by 'mask.'  Within areas defined by 'mask,' where negative damage 
++			is inferred, 'B' is updated to make damage equal to zero.  
++	
++			'backstress' is the inferred backstress necessary to balance the analytical solution
++			(keeping damage within its appropriate limits, e.g. D in [0,1]).
++	
++	   Usage:
++	      [damage,mask,B,backstress]=analyticaldamage(md,options)
++	
++	   Example:
++	      [damage,mask,B,backstress]=analyticaldamage(md,'eq','Weertman2D','smoothing',2,'backstress',10e3)
++	'''
++
++	# check inputs
++	if 'strainrate' not in md.results.__dict__:
++		raise StandardError('md.results.strainrate not present.  Calculate using md=mechanicalproperties(md,vx,vy)')
++	if md.mesh.dimension!=2:
++		raise StandardError('only 2D model supported currently')
++	if npy.any(md.flowequation.element_equation!=2):
++		print 'Warning: the model has some non SSA elements. These will be treated like SSA elements'
++
++	# process options
++	options = pairoptions(*args)
++	eq = options.getfieldvalue('eq','Thomas')
++	smoothing = options.getfieldvalue('smoothing',0)
++	sigmab = options.getfieldvalue('sigmab',0)
++	if len(sigmab==1):
++		sigmab=sigmab*npy.ones(md.mesh.numberofvertices,)
++	
++	# average element strain rates onto vertices
++	e1=averaging(md,md.results.strainrate.principalvalue1,smoothing)/md.constants.yts # convert to s^-1
++	e2=averaging(md,md.results.strainrate.principalvalue2,smoothing)/md.constants.yts
++	exx=averaging(md,md.results.strainrate.xx,smoothing)/md.constants.yts
++	eyy=averaging(md,md.results.strainrate.yy,smoothing)/md.constants.yts
++	exy=averaging(md,md.results.strainrate.xy,smoothing)/md.constants.yts
++	
++	# checks: any of e1 or e2 equal to zero?
++	pos=npy.nonzero(e1==0)
++	if npy.any(pos==1):
++		print 'WARNING: first principal strain rate equal to zero.  Value set to 1e-13 s^-1'
++		e1[pos]=1e-13
++	pos=npy.nonzero(e2==0)
++	if npy.any(pos==1):
++		disp('WARNING: second principal strain rate equal to zero.  Value set to 1e-13 s^-1');
++		e2[pos]=1e-13
++	
++	## old method using principal strain rates {{{
++	## ex=maximum principal tensile strain rate
++	#ex=e1;
++	#a=e2./e1;
++	#pos=find(e1<0 & e2>0); # longitudinal compression and lateral tension
++	#a(pos)=e1(pos)./e2(pos);
++	#ex(pos)=e2(pos);
++	#pos2=find(e1<0 & e2<0 & abs(e1)<abs(e2)); # lateral and longitudinal compression
++	#a(pos2)=e1(pos2)./e2(pos2);
++	#ex(pos2)=e2(pos2);
++	#pos3=find(e1>0 & e2>0 & abs(e1)<abs(e2)); # lateral and longitudinal tension 
++	#a(pos3)=e1(pos3)./e2(pos3);
++	#ex(pos3)=e2(pos3);
++	#id=find(e1<0 & e2<0);
++	#a(id)=-a(id); # where both strain rates are compressive, enforce negative alpha
++	#
++	## }}}
++	
++	# new method using longitudinal strain rates defined by observed velocity vector
++	velangle=npy.arctan(md.initialization.vy/md.initialization.vx)
++	ex=0.5*(exx+eyy)+0.5*(exx-eyy)*npy.cos(2.*velangle)+exy*npy.sin(2.*velangle)
++	ey=exx+eyy-ex # trace of strain rate tensor is invariant
++	exy=-0.5*(exx-eyy)*npy.sin(2.*velangle)+exy*npy.cos(2.*velangle)
++	a=ey/ex
++	b=exy/ex
++	pos=npy.nonzero(npy.logical_or(ex<0,ey<0))
++	#length(pos)
++	a[pos]=-a[pos]
++	
++	# a < -1 in areas of strong lateral compression or longitudinal compression
++	# and theta is undefined at a = -2
++	pos=npy.nonzero(abs((abs(a)-2))<1e-3)
++	a[pos]=-2+1e-3
++	
++	#plotmodel(md,'data',a,'caxis',[-2,1])
++	#plotmodel(md,'data',ex,'caxis',[-0.5e-9,0.5e-9])
++	
++	# spreading stress
++	rhoi=md.materials.rho_ice
++	rhow=md.materials.rho_water
++	C=0.5*rhoi*md.constants.g*(1.-rhoi/rhow)
++	T=C*md.geometry.thickness
++	
++	# rheology
++	B=md.materials.rheology_B
++	n=averaging(md,md.materials.rheology_n,0)
++	
++	if eq=='Weertman1D':
++		theta=1./8*npy.ones(md.mesh.numberofvertices,)
++		a=npy.zeros(md.mesh.numberofvertices,)
++	elif eq=='Weertman2D':
++		theta=1./9*npy.ones(md.mesh.numberofvertices,1)
++		a=npy.ones(md.mesh.numberofvertices,)
++	elif eq=='Thomas':
++		theta=((1+a+a**2+b**2)**((n-1)/2))/(abs(2+a)**n)
++	else:
++		raise StandardError('argument passed to "eq" not valid.  Type "help analyticaldamage" for usage')
++	
++	#D2=1-((theta./ex).^(1./n)).*(T-sigmab)./B;
++	#length(find(D2<0))
++	#length(find(ex<0))
++	#length(find(D2>1))
++	#length(find(theta<0))
++	#pos=find(ex<0);
++	#mask2=ismember(1:md.mesh.numberofvertices,pos);
++	D=1-(1+a+a**2+b**2)**((n-1)/(2*n))/abs(ex)**(1./n)*(T-sigmab)/B/(2+a)/npy.sign(ex)
++	
++	#pos=find(D2>1);
++	#mask1=ismember(1:md.mesh.numberofvertices,pos);
++	#pos=find(a<-2);
++	#mask2=ismember(1:md.mesh.numberofvertices,pos);
++	#pos=find(ex<-0);
++	#mask3=ismember(1:md.mesh.numberofvertices,pos);
++	#pos=find(((2+a).*sign(ex))<0);
++	#mask4=ismember(1:md.mesh.numberofvertices,pos);
++	#plotmodel(md,'nlines',2,'ncols',2,'data',D2,'data',a,'data',ex,'data',(2+a).*sign(ex),...
++	#	'mask#1',mask1,'mask#2',mask2,'mask#3',mask3,'mask#4',mask4,...
++	#	'expdisp#all','./Exp/LarsenC_DomainOutline_Bedmap2extent.exp',...
++	#	'caxis#1',[0 1],'caxis#2',[-2,1],'caxis#3',[0 4e-9],'caxis#4',[0 1]);
++	
++	backstress=npy.zeros(md.mesh.numberofvertices,)
++	
++	# new corrections
++	# D>1 where (2+a).*sign(ex)<0, compressive regions where high backstress needed
++	pos=npy.nonzero(D>1)
++	D[pos]=0
++	# backstress to bring damage to zero
++	backstress[pos]=T[pos]-(1-D[pos])*B[pos]*npy.sign(ex[pos])*(2+a[pos])*abs(ex[pos])**(1./n[pos])/(1+a[pos]+a[pos]**2)**((n[pos]-1)/2./n[pos])
++	#backstress[pos]=T[pos]-(1-D[pos]).*B[pos].*(ex[pos]./theta[pos]).^(1./n[pos]);
++	
++	pos=npy.nonzero(D<0)
++	#mask=ismember(1:md.mesh.numberofvertices,pos)
++	#plotmodel(md,'data',D,'caxis',[0,1],'mask',mask)
++	D[pos]=0
++	# backstress to bring negative damage to zero
++	backstress[pos]=T[pos]-(1-D[pos])*B[pos]*npy.sign(ex[pos])*(2+a[pos])*abs(ex[pos])**(1./n[pos])/(1+a[pos]+a[pos]**2)**((n[pos]-1)/2./n[pos])
++	
++	pos=npy.nonzero(backstress<0)
++	#length[pos]
++	backstress[pos]=0
++	
++	#plotmodel(md,'data',backstress,'caxis',[0 2e5],'edgecolor','k')
++	
++	# increased rigidity to bring negative damage to zero
++	B[pos]=npy.sign(ex[pos])/(2+a[pos])*(1+a[pos]+a[pos]**2)**((n[pos]-1)/2./n[pos])*T[pos]/abs(ex[pos])**(1./n[pos]);
++	#B[pos]=T[pos]./(1-D[pos]).*(theta[pos]./ex[pos]).^(1./n[pos]); # same calculated both ways
++	
++	# enforce maximum B corresponding to -50 deg C ice
++	#Bmax=paterson(273.15-50);
++	#posB=find(B>Bmax);
++	#B(posB)=Bmax;
++	
++	#plotmodel(md,'nlines',2,'ncols',1,'data',D,'data',D2,'caxis#all',[0,1])
++	#plotmodel(md,'data',paterson(md.initialization.temperature)-B,'caxis',[-1e8 1e8])
++	#plotmodel(md,'data',B,'caxis',[0.8e8 5e8])
++	#plotmodel(md,'data',D2,'caxis',[0,1])
++	#plotmodel(md,'data',(1-D2).*B,'caxis',[0.1e8 2e8])
++	
++	#plotmodel(md,'data',backstress2./T,'caxis',[1 2],'data',D2)
++	#max(D2)
++	#min(D2)
++	
++	#pos=find(D>1);
++	#D[pos]=1-1e-9;
++	#
++	#pos=find(isnan(D));
++	#D[pos]=0;
++	#
++	## additional calculations here where negative damage is inferred
++	#pos=find(D<0);
++	#D[pos]=0;
++	#
++	## magnitude of back stress to bring negative damage to zero
++	#backstress=zeros(md.mesh.numberofvertices,1);
++	#backstress[pos]=T[pos]-(1-D[pos]).*B[pos].*(ex[pos]./theta[pos]).^(1./n[pos]);
++	#
++	#mask=ismember(1:md.mesh.numberofvertices,pos);
++	#
++	## enforce max back stress equal to spreading stress
++	##posS=find(backstress>T); 
++	##backstress(posS)=T(posS);
++	#
++	## decreased thickness in areas of negative damage
++	#dH=zeros(md.mesh.numberofvertices,1);
++	#dH[pos]=1/C*((1-D[pos]).*B[pos].*(ex[pos]./theta[pos]).^(1./n[pos])-T[pos]);
++	#
++	## higher rigidity to eliminate areas of negative damage
++	#B[pos]=T[pos]./(1-D[pos]).*(theta[pos]./ex[pos]).^(1./n[pos]);
++	#
++	#
++	#temp=[0:-0.1:-50]+273.15;
++	#rig=paterson(temp);
++	#newtemp=md.initialization.temperature;
++	#
++	#for i=1:length(pos)
++	#	[mindiff,index]=min(abs(rig-B(pos(i))));
++	#	newtemp(pos(i))=temp(index);
++	#end
++	#
++	#dT=newtemp-md.initialization.temperature;
++	
++	#any(D<0)
++	#any(D>1)
++	#any(backstress<0)
++	damage=D
++	
++	return damage, B, backstress
+Index: ../trunk-jpl/src/m/mech/analyticaldamage.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/analyticaldamage.m	(revision 0)
++++ ../trunk-jpl/src/m/mech/analyticaldamage.m	(revision 16056)
+@@ -0,0 +1,248 @@
++function [damage,B,backstress]=analyticaldamage(md,varargin)
++%ANALYTICALDAMAGE - compute damage for an ice shelf 
++%
++%	 This routine computes damage as a function of water/ice
++%	 material properties, ice thickness, strain rate, and ice 
++%	 rigidity.  The model must contain computed strain rates,
++%	 either from observed or modeled ice velocities.
++%
++%   Available options:
++%		- 'eq'			: analytical equation to use in the calculation.  Must be one of:
++%								'Weertman1D' for a confined ice shelf free to flow in one direction
++%								'Weertman2D' for an unconfined ice shelf free to spread in any direction
++%								'Thomas' for a 2D ice shelf, taking into account full strain rate tensor (default)
++%		- 'smoothing'	: the amount of smoothing to be applied to the strain rate data.
++%								Type 'help averaging' for more information on its usage.
++%		- 'sigmab'		: a compressive backstress term to be subtracted from the driving stress 
++%								in the damage calculation
++%
++%   Return values:
++%		'damage' which is truncated in the range [0,1-1e-9]
++%
++%		'mask' is a mask defining areas where damage was calculated as negative prior
++%		to truncation, indicating that the ice is too warm or a back stress has not
++%		been accounted for.
++%
++%	   'B' is the rigidity, which is equal to md.materials.rheology_B in areas outside
++%		those defined by 'mask.'  Within areas defined by 'mask,' where negative damage 
++%		is inferred, 'B' is updated to make damage equal to zero.  
++%
++%		'backstress' is the inferred backstress necessary to balance the analytical solution
++%		(keeping damage within its appropriate limits, e.g. D in [0,1]).
++%
++%   Usage:
++%      [damage,mask,B,backstress]=analyticaldamage(md,options)
++%
++%   Example:
++%      [damage,mask,B,backstress]=analyticaldamage(md,'eq','Weertman2D','smoothing',2,'backstress',10e3);
++
++% check inputs
++if (nargin<1),
++	help analyticaldamage
++	error('bad usage');
++end
++if isempty(fieldnames(md.results)),
++	error(['md.results.strainrate is not present.  Calculate using md=mechanicalproperties(md,vx,vy)']);
++end
++if ~(md.mesh.dimension==2),
++	error('only 2d model supported currently');
++end
++if any(md.flowequation.element_equation~=2),
++	disp('Warning: the model has some non SSA elements. These will be treated like SSA elements');
++end
++
++% process options
++options = pairoptions(varargin{:});
++eq = getfieldvalue(options,'eq','Thomas');
++smoothing = getfieldvalue(options,'smoothing',0);
++sigmab = getfieldvalue(options,'sigmab',0);
++if length(sigmab)==1,
++	sigmab=sigmab*ones(md.mesh.numberofelements,1);
++end
++
++% average element strain rates onto vertices
++e1=averaging(md,md.results.strainrate.principalvalue1,smoothing)/md.constants.yts; % convert to s^-1
++e2=averaging(md,md.results.strainrate.principalvalue2,smoothing)/md.constants.yts;
++exx=averaging(md,md.results.strainrate.xx,smoothing)/md.constants.yts;
++eyy=averaging(md,md.results.strainrate.yy,smoothing)/md.constants.yts;
++exy=averaging(md,md.results.strainrate.xy,smoothing)/md.constants.yts;
++
++% checks: any of e1 or e2 equal to zero?
++pos=find(e1==0);
++if any(pos==1)
++	disp('WARNING: first principal strain rate equal to zero.  Value set to 1e-13 s^-1');
++	e1(pos)=1e-13;
++end
++pos=find(e2==0);
++if any(pos==1)
++	disp('WARNING: second principal strain rate equal to zero.  Value set to 1e-13 s^-1');
++	e2(pos)=1e-13;
++end
++
++%% old method using principal strain rates {{{
++%% ex=maximum principal tensile strain rate
++%ex=e1;
++%a=e2./e1;
++%pos=find(e1<0 & e2>0); % longitudinal compression and lateral tension
++%a(pos)=e1(pos)./e2(pos);
++%ex(pos)=e2(pos);
++%pos2=find(e1<0 & e2<0 & abs(e1)<abs(e2)); % lateral and longitudinal compression
++%a(pos2)=e1(pos2)./e2(pos2);
++%ex(pos2)=e2(pos2);
++%pos3=find(e1>0 & e2>0 & abs(e1)<abs(e2)); % lateral and longitudinal tension 
++%a(pos3)=e1(pos3)./e2(pos3);
++%ex(pos3)=e2(pos3);
++%id=find(e1<0 & e2<0);
++%a(id)=-a(id); % where both strain rates are compressive, enforce negative alpha
++%
++%% }}}
++
++% new method using longitudinal strain rates defined by observed velocity vector
++velangle=atan(md.initialization.vy./md.initialization.vx);
++ex=0.5*(exx+eyy)+0.5*(exx-eyy).*cos(2*velangle)+exy.*sin(2*velangle);
++ey=exx+eyy-ex; % trace of strain rate tensor is invariant
++exy=-0.5*(exx-eyy).*sin(2*velangle)+exy.*cos(2*velangle);
++a=ey./ex;
++b=exy./ex;
++pos=find(ex<0 & ey<0);
++%length(pos)
++a(pos)=-a(pos);
++
++% a < -1 in areas of strong lateral compression or longitudinal compression
++% and theta is undefined at a = -2
++pos=find(abs((abs(a)-2))<1e-3);
++a(pos)=-2+1e-3;
++
++%plotmodel(md,'data',a,'caxis',[-2,1])
++%plotmodel(md,'data',ex,'caxis',[-0.5e-9,0.5e-9])
++
++% spreading stress
++rhoi=md.materials.rho_ice;
++rhow=md.materials.rho_water;
++C=0.5*rhoi*md.constants.g*(1-rhoi/rhow);
++T=C*md.geometry.thickness;
++
++% rheology
++B=md.materials.rheology_B;
++n=averaging(md,md.materials.rheology_n,0);
++
++switch eq
++	case 'Weertman1D'
++		theta=1./8*ones(md.mesh.numberofvertices,1);
++		a=zeros(md.mesh.numberofvertices,1);
++	case 'Weertman2D'
++		theta=1./9*ones(md.mesh.numberofvertices,1);
++		a=ones(md.mesh.numberofvertices,1);
++	case 'Thomas'
++		theta=((1+a+a.^2+b.^2).^((n-1)/2))./(abs(2+a).^n);
++	otherwise
++		error('argument passed to "eq" not valid.  Type "help analyticaldamage" for usage');
++end
++
++%D2=1-((theta./ex).^(1./n)).*(T-sigmab)./B;
++%length(find(D2<0))
++%length(find(ex<0))
++%length(find(D2>1))
++%length(find(theta<0))
++%pos=find(ex<0);
++%mask2=ismember(1:md.mesh.numberofvertices,pos);
++D=1-(1+a+a.^2+b.^2).^((n-1)./(2*n))./abs(ex).^(1./n).*(T-sigmab)./B./(2+a)./sign(ex);
++
++%pos=find(D2>1);
++%mask1=ismember(1:md.mesh.numberofvertices,pos);
++%pos=find(a<-2);
++%mask2=ismember(1:md.mesh.numberofvertices,pos);
++%pos=find(ex<-0);
++%mask3=ismember(1:md.mesh.numberofvertices,pos);
++%pos=find(((2+a).*sign(ex))<0);
++%mask4=ismember(1:md.mesh.numberofvertices,pos);
++%plotmodel(md,'nlines',2,'ncols',2,'data',D2,'data',a,'data',ex,'data',(2+a).*sign(ex),...
++%	'mask#1',mask1,'mask#2',mask2,'mask#3',mask3,'mask#4',mask4,...
++%	'expdisp#all','./Exp/LarsenC_DomainOutline_Bedmap2extent.exp',...
++%	'caxis#1',[0 1],'caxis#2',[-2,1],'caxis#3',[0 4e-9],'caxis#4',[0 1]);
++
++backstress=zeros(md.mesh.numberofvertices,1);
++
++% new corrections
++% D>1 where (2+a).*sign(ex)<0, compressive regions where high backstress needed
++pos=find(D>1);
++D(pos)=0;
++% backstress to bring damage to zero
++backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*sign(ex(pos)).*(2+a(pos)).*abs(ex(pos)).^(1./n(pos))./(1+a(pos)+a(pos).^2).^((n(pos)-1)/2./n(pos));
++%backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*(ex(pos)./theta(pos)).^(1./n(pos));
++
++pos=find(D<0);
++mask=ismember(1:md.mesh.numberofvertices,pos);
++%plotmodel(md,'data',D,'caxis',[0,1],'mask',mask)
++D(pos)=0;
++% backstress to bring negative damage to zero
++backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*sign(ex(pos)).*(2+a(pos)).*abs(ex(pos)).^(1./n(pos))./(1+a(pos)+a(pos).^2).^((n(pos)-1)/2./n(pos));
++
++pos=find(backstress<0);
++%length(pos)
++backstress(pos)=0;
++
++%plotmodel(md,'data',backstress,'caxis',[0 2e5],'edgecolor','k')
++
++% increased rigidity to bring negative damage to zero
++B(pos)=sign(ex(pos))./(2+a(pos)).*(1+a(pos)+a(pos).^2).^((n(pos)-1)/2./n(pos)).*T(pos)./abs(ex(pos)).^(1./n(pos));
++%B(pos)=T(pos)./(1-D(pos)).*(theta(pos)./ex(pos)).^(1./n(pos)); % same calculated both ways
++
++% enforce maximum B corresponding to -50 deg C ice
++%Bmax=paterson(273.15-50);
++%posB=find(B>Bmax);
++%B(posB)=Bmax;
++
++%plotmodel(md,'nlines',2,'ncols',1,'data',D,'data',D2,'caxis#all',[0,1])
++%plotmodel(md,'data',paterson(md.initialization.temperature)-B,'caxis',[-1e8 1e8])
++%plotmodel(md,'data',B,'caxis',[0.8e8 5e8])
++%plotmodel(md,'data',D2,'caxis',[0,1])
++%plotmodel(md,'data',(1-D2).*B,'caxis',[0.1e8 2e8])
++
++%plotmodel(md,'data',backstress2./T,'caxis',[1 2],'data',D2)
++%max(D2)
++%min(D2)
++
++%pos=find(D>1);
++%D(pos)=1-1e-9;
++%
++%pos=find(isnan(D));
++%D(pos)=0;
++%
++%% additional calculations here where negative damage is inferred
++%pos=find(D<0);
++%D(pos)=0;
++%
++%% magnitude of back stress to bring negative damage to zero
++%backstress=zeros(md.mesh.numberofvertices,1);
++%backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*(ex(pos)./theta(pos)).^(1./n(pos));
++%
++%mask=ismember(1:md.mesh.numberofvertices,pos);
++%
++%%% enforce max back stress equal to spreading stress
++%%posS=find(backstress>T); 
++%%backstress(posS)=T(posS);
++%
++%% decreased thickness in areas of negative damage
++%dH=zeros(md.mesh.numberofvertices,1);
++%dH(pos)=1/C*((1-D(pos)).*B(pos).*(ex(pos)./theta(pos)).^(1./n(pos))-T(pos));
++%
++%% higher rigidity to eliminate areas of negative damage
++%B(pos)=T(pos)./(1-D(pos)).*(theta(pos)./ex(pos)).^(1./n(pos));
++%
++%
++%temp=[0:-0.1:-50]+273.15;
++%rig=paterson(temp);
++%newtemp=md.initialization.temperature;
++%
++%for i=1:length(pos)
++%	[mindiff,index]=min(abs(rig-B(pos(i))));
++%	newtemp(pos(i))=temp(index);
++%end
++%
++%dT=newtemp-md.initialization.temperature;
++
++%any(D<0)
++%any(D>1)
++%any(backstress<0)
++damage=D;
+
+Property changes on: ../trunk-jpl/src/m/mech/analyticaldamage.m
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-16056-16057.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16056-16057.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16056-16057.diff	(revision 16134)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh	(revision 16056)
++++ ../trunk-jpl/configs/config-linux64-murdo-nopetsc.sh	(revision 16057)
+@@ -3,7 +3,7 @@
+ 	--prefix=$ISSM_DIR\
+ 	--with-matlab-dir=$MATLAB_DIR \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
++	--with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
+ 	--with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich" \
+ 	--with-graphics-lib="/usr/lib/x86_64-linux-gnu/libX11.so" \
+@@ -14,4 +14,3 @@
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-numthreads=18  \
+ 	--enable-debugging 
+-	#--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
Index: /issm/oecreview/Archive/15392-16133/ISSM-16057-16058.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16057-16058.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16057-16058.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx
+===================================================================
+--- ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx	(revision 16057)
++++ ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx	(revision 16058)
+
+Property changes on: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx
+___________________________________________________________________
+Modified: svn:ignore
+## -1 +1,2 ##
++.dirstamp
+ .deps
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity	(revision 16057)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity	(revision 16058)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity
+___________________________________________________________________
+Modified: svn:ignore
+## -1 +1,2 ##
++.dirstamp
+ .deps
Index: /issm/oecreview/Archive/15392-16133/ISSM-16058-16059.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16058-16059.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16058-16059.diff	(revision 16134)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/scripts/tai
+===================================================================
+--- ../trunk-jpl/scripts/tai	(revision 16058)
++++ ../trunk-jpl/scripts/tai	(revision 16059)
+@@ -4,6 +4,6 @@
+ 	EXECUTION_DIR=$ISSM_DIR/execution
+ fi
+ 
+-cd $EXECUTION_DIR
+-DIR=$(ls -lrtd *"/" | awk '{line= $0} END {print line}' | awk '{printf("%s\n",$9);}')
++DIR=$(ls -rtd1 $EXECUTION_DIR/* | tail -n1)
++echo "Execution idrectory: $DIR"
+ tail -f $DIR/*.outlog
+Index: ../trunk-jpl/scripts/vie
+===================================================================
+--- ../trunk-jpl/scripts/vie	(revision 16058)
++++ ../trunk-jpl/scripts/vie	(revision 16059)
+@@ -5,6 +5,5 @@
+ 	EXECUTION_DIR=$ISSM_DIR/execution
+ fi
+ 
+-cd $EXECUTION_DIR
+-DIR=$(ls -lrtd *"/" | awk '{line= $0} END {print line}' | awk '{printf("%s\n",$9);}')
++DIR=$(ls -rtd1 $EXECUTION_DIR/* | tail -n1)
+ vim $DIR/*.errlog
+Index: ../trunk-jpl/scripts/vil
+===================================================================
+--- ../trunk-jpl/scripts/vil	(revision 16058)
++++ ../trunk-jpl/scripts/vil	(revision 16059)
+@@ -4,6 +4,5 @@
+ 	EXECUTION_DIR=$ISSM_DIR/execution
+ fi
+ 
+-cd $EXECUTION_DIR
+-DIR=$(ls -lrtd *"/" | awk '{line= $0} END {print line}' | awk '{printf("%s\n",$9);}')
++DIR=$(ls -rtd1 $EXECUTION_DIR/* | tail -n1)
+ vim $DIR/*.outlog
Index: /issm/oecreview/Archive/15392-16133/ISSM-16059-16060.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16059-16060.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16059-16060.diff	(revision 16134)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/externalpackages/mpich
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich	(revision 16059)
++++ ../trunk-jpl/externalpackages/mpich	(revision 16060)
+
+Property changes on: ../trunk-jpl/externalpackages/mpich
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,4 ##
++compil.log
+ *.gz
+ install
+ src
+Index: ../trunk-jpl
+===================================================================
+--- ../trunk-jpl	(revision 16059)
++++ ../trunk-jpl	(revision 16060)
+
+Property changes on: ../trunk-jpl
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,5 ##
++nightlylog
++configure.sh
+ par
+ ad
+ proj-*
Index: /issm/oecreview/Archive/15392-16133/ISSM-16060-16061.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16060-16061.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16060-16061.diff	(revision 16134)
@@ -0,0 +1,142 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 16061)
+@@ -22,8 +22,8 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+-	1e-11,1e-10,1e-11,1e-13,...
+-	1e-10,1e-10,1e-10,1e-13};
++	1e-11,1e-10,1e-11,1.25e-11,...
++	1e-10,1e-10,1e-10,1.15e-11};
+ field_values={...
+ 	(md.results.TransientSolution(1).Bed),...
+ 	(md.results.TransientSolution(1).Surface),...
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 16061)
+@@ -18,7 +18,7 @@
+ 
+ # Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,2e-07]
++field_tolerances=[7.85e-09,8.15e-09,1.5e-08,8.5e-09,1e-09,1e-09,1e-07]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 16061)
+@@ -26,7 +26,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[1e-11,1e-11,1e-11,1e-11]
++field_tolerances=[2.45e-10,2.85e-11,3.35e-11,1e-11]
+ field_values=[\
+ 	   md.results.StressbalanceSolution.Vx,\
+ 	   md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 16061)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-07};
++field_tolerances={7.85e-09,8.15e-09,1.5e-08,8.5e-09,1e-09,1e-09,1e-07};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 16061)
+@@ -13,7 +13,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-10,1e-11,1e-11,1e-11};
++field_tolerances={2.45e-10,2.85e-11,3.35e-11,1e-11};
+ field_values={...
+ 	   (md.results.StressbalanceSolution.Vx),...
+ 	   (md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test209.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.py	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test209.py	(revision 16061)
+@@ -24,8 +24,9 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
+ field_tolerances=[\
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
+-	1e-13,1e-13,1e-08,1e-13,1e-13,1e-10,1e-10,1e-10,1e-13,1e-8]
++	1e-13,1e-13,9.7e-10,1e-13,3.8e-11,3.85e-11,3.85e-11,3.85e-11,1e-13,1.55e-8,\
++	2.65e-11,1.95e-12,1e-08,1.7e-12,3.9e-11,1e-10,1e-10,1e-10,7.4e-12,1e-8]
++
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 16061)
+@@ -11,7 +11,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy','Waterfraction','Temperature'};
+-field_tolerances={1e-13,1e-10,1e-13};
++field_tolerances={1e-13,1.2e-10,1e-13};
+ field_values={...
+ 	(md.results.EnthalpySolution.Enthalpy),...
+ 	(md.results.EnthalpySolution.Waterfraction),...
+Index: ../trunk-jpl/test/NightlyRun/test209.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.m	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test209.m	(revision 16061)
+@@ -12,8 +12,8 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+-	1e-13,1e-13,1e-08,1e-13,1e-13,1e-10,1e-10,1e-10,1e-13,1e-8};
++	1e-13,1e-13,9.7e-10,1e-13,3.8e-11,3.85e-11,3.85e-11,3.85e-11,1e-13,1.55e-8,...
++	2.65e-11,1.95e-12,1e-08,1.7e-12,3.9e-11,1e-10,1e-10,1e-10,7.4e-12,1e-8};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.py	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test120.py	(revision 16061)
+@@ -21,7 +21,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Enthalpy','Waterfraction','Temperature']
+-field_tolerances=[1e-13,1e-10,1e-13]
++field_tolerances=[1e-13,1.2e-10,1e-13]
+ field_values=[\
+ 	md.results.EnthalpySolution.Enthalpy,\
+ 	md.results.EnthalpySolution.Waterfraction,\
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 16060)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 16061)
+@@ -31,9 +31,11 @@
+ field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
+ 	'Bed2','Surface2','Thickness2','Floatingice2',\
+ 	'Bed3','Surface3','Thickness3','Floatingice3']
++
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+-	1e-11,1e-10,1e-11,1e-13,\
+-	1e-10,1e-10,1e-10,1e-13]
++	1e-11,1e-10,1e-11,1.25e-11,\
++	1e-10,1e-10,1e-10,1.15e-11]
++
+ field_values=[\
+ 	md.results.TransientSolution[0].Bed,\
+ 	md.results.TransientSolution[0].Surface,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-16061-16062.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16061-16062.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16061-16062.diff	(revision 16134)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/configs/config-linux64-ubuntu64.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-ubuntu64.sh	(revision 16061)
++++ ../trunk-jpl/configs/config-linux64-ubuntu64.sh	(revision 16062)
+@@ -15,7 +15,6 @@
+  --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+  --with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+  --with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
+  --with-fortran-lib="-L/usr/lib/gcc/x86_64-linux-gnu/4.7/ -lgfortran"\
+Index: ../trunk-jpl/configs/config-linux64-larsen-gia.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-larsen-gia.sh	(revision 16061)
++++ ../trunk-jpl/configs/config-linux64-larsen-gia.sh	(revision 16062)
+@@ -21,7 +21,6 @@
+  --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+  --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+  --with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+  --with-shapelib-dir="$ISSM_DIR/externalpackages/shapelib/install" \
+  --with-math77-dir="$ISSM_DIR/externalpackages/math77/install" \
+Index: ../trunk-jpl/configs/config-linux64-larsen.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-larsen.sh	(revision 16061)
++++ ../trunk-jpl/configs/config-linux64-larsen.sh	(revision 16062)
+@@ -20,7 +20,6 @@
+  --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+  --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+  --with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+  --with-fortran-lib="-L/usr/lib/gcc/x86_64-linux-gnu/4.6/ -lgfortran" \
+  --with-graphics-lib="/usr/lib/x86_64-linux-gnu/libX11.so" \
+Index: ../trunk-jpl/configs/config-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 16061)
++++ ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 16062)
+@@ -19,7 +19,6 @@
+ 	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+-	--with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+ 	--with-graphics-lib="/usr/lib/x86_64-linux-gnu/libX11.so" \
+ 	--with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
+ 	--with-numthreads=18 \
Index: /issm/oecreview/Archive/15392-16133/ISSM-16062-16063.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16062-16063.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16062-16063.diff	(revision 16134)
@@ -0,0 +1,647 @@
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16063)
+@@ -13,8 +13,9 @@
+ hmax=1000.
+ ymin=min(md.mesh.y)
+ ymax=max(md.mesh.y)
+-
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
++xmin=min(md.mesh.x)
++xmax=max(md.mesh.x)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x.reshape(-1,1)-xmin)/(xmax-xmin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+Index: ../trunk-jpl/test/Par/SquareShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.par	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareShelf.par	(revision 16063)
+@@ -5,7 +5,9 @@
+ hmax=1000;
+ ymin=min(md.mesh.y);
+ ymax=max(md.mesh.y);
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin);
++xmin=min(md.mesh.x);
++xmax=max(md.mesh.x);
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x-xmin)/(xmax-xmin);
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16063)
+@@ -13,8 +13,9 @@
+ hmax=1000.
+ ymin=numpy.min(md.mesh.y)
+ ymax=numpy.max(md.mesh.y)
+-
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
++xmin=min(md.mesh.x)
++xmax=max(md.mesh.x)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x.reshape(-1,1)-xmin)/(xmax-xmin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 16063)
+@@ -5,7 +5,9 @@
+ hmax=1000;
+ ymin=min(md.mesh.y);
+ ymax=max(md.mesh.y);
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin);
++xmin=min(md.mesh.x);
++xmax=max(md.mesh.x);
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x-xmin)/(xmax-xmin);
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 16063)
+@@ -5,7 +5,9 @@
+ hmax=1000.;
+ ymin=min(md.mesh.y);
+ ymax=max(md.mesh.y);
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin);
++xmin=min(md.mesh.x);
++xmax=max(md.mesh.x);
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x-xmin)/(xmax-xmin);
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ bed_sheet=-md.materials.rho_ice/md.materials.rho_water*(hmax+(hmin-hmax)*(ymax/2-ymin)/(ymax-ymin));
+ pos=find(md.mesh.y<=ymax/2.);
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16063)
+@@ -5,7 +5,9 @@
+ hmax=1000;
+ ymin=min(md.mesh.y);
+ ymax=max(md.mesh.y);
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin);
++xmin=min(md.mesh.x);
++xmax=max(md.mesh.x);
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x-xmin)/(xmax-xmin);
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16063)
+@@ -14,7 +14,9 @@
+ hmax=1000.
+ ymin=min(md.mesh.y)
+ ymax=max(md.mesh.y)
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
++xmin=min(md.mesh.x)
++xmax=max(md.mesh.x)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x.reshape(-1,1)-xmin)/(xmax-xmin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ bed_sheet=-md.materials.rho_ice/md.materials.rho_water*(hmax+(hmin-hmax)*(ymax/2-ymin)/(ymax-ymin))
+ pos=numpy.nonzero(md.mesh.y<=ymax/2.)
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 16063)
+@@ -5,8 +5,9 @@
+ hmax=1000;
+ ymin=min(md.mesh.y);
+ ymax=max(md.mesh.y);
+-
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin);
++xmin=min(md.mesh.x);
++xmax=max(md.mesh.x);
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x-xmin)/(xmax-xmin);
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness+20.;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 16063)
+@@ -13,8 +13,9 @@
+ hmax=1000.
+ ymin=min(md.mesh.y)
+ ymax=max(md.mesh.y)
+-
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
++xmin=min(md.mesh.x)
++xmax=max(md.mesh.x)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x.reshape(-1,1)-xmin)/(xmax-xmin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16062)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16063)
+@@ -14,8 +14,9 @@
+ hmax=1000.
+ ymin=numpy.min(md.mesh.y)
+ ymax=numpy.max(md.mesh.y)
+-
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
++xmin=min(md.mesh.x)
++xmax=max(md.mesh.x)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)+0.1*(hmin-hmax)*(md.mesh.x.reshape(-1,1)-xmin)/(xmax-xmin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness+20.
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+Index: ../trunk-jpl/test/Archives/Archive111.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive212.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive105.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive420.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive232.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive313.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive206.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive226.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive307.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive434.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive119.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive272.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive408.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive428.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive120.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive201.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive302.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive221.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive114.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive322.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive403.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive215.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive108.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive423.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive235.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive316.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive209.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive229.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive210.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive103.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive230.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive311.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive204.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive412.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive331.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive224.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive305.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive117.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive270.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive406.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive325.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive218.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive290.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive319.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive112.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive401.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive320.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive213.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive421.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive106.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive314.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive233.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive207.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive415.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive227.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive308.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive409.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive328.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive455.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive429.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive101.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive202.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive121.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive410.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive222.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive303.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive115.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive404.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive450.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive216.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive109.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive236.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive317.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive110.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive211.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive104.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive312.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive231.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive205.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive332.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive413.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive306.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive225.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive118.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive326.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive407.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive219.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive285.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive301.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive220.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive113.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive321.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive402.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive214.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive107.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive422.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive234.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive315.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive280.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive208.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive416.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive309.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive228.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive274.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive329.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive102.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive310.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive122.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive203.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive411.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive304.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive223.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive116.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive324.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive405.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive217.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive425.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive237.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive318.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive419.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-16063-16064.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16063-16064.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16063-16064.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/test/NightlyRun/test323.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.py	(revision 16063)
++++ ../trunk-jpl/test/NightlyRun/test323.py	(revision 16064)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1
+-md.timestepping.final_time=600.
++md.timestepping.final_time=650.
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test323.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.m	(revision 16063)
++++ ../trunk-jpl/test/NightlyRun/test323.m	(revision 16064)
+@@ -4,7 +4,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1;
+-md.timestepping.final_time=600.;
++md.timestepping.final_time=650.;
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/Archives/Archive323.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-16064-16065.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16064-16065.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16064-16065.diff	(revision 16134)
@@ -0,0 +1,313 @@
+Index: ../trunk-jpl/src/m/mech/analyticaldamage.py
+===================================================================
+--- ../trunk-jpl/src/m/mech/analyticaldamage.py	(revision 16064)
++++ ../trunk-jpl/src/m/mech/analyticaldamage.py	(revision 16065)
+@@ -25,10 +25,6 @@
+ 	   Return values:
+ 			'damage' which is truncated in the range [0,1-1e-9]
+ 	
+-			'mask' is a mask defining areas where damage was calculated as negative prior
+-			to truncation, indicating that the ice is too warm or a back stress has not
+-			been accounted for.
+-	
+ 		   'B' is the rigidity, which is equal to md.materials.rheology_B in areas outside
+ 			those defined by 'mask.'  Within areas defined by 'mask,' where negative damage 
+ 			is inferred, 'B' is updated to make damage equal to zero.  
+@@ -37,10 +33,10 @@
+ 			(keeping damage within its appropriate limits, e.g. D in [0,1]).
+ 	
+ 	   Usage:
+-	      [damage,mask,B,backstress]=analyticaldamage(md,options)
++	      [damage,B,backstress]=analyticaldamage(md,options)
+ 	
+ 	   Example:
+-	      [damage,mask,B,backstress]=analyticaldamage(md,'eq','Weertman2D','smoothing',2,'backstress',10e3)
++	      [damage,B,backstress]=analyticaldamage(md,'eq','Weertman2D','smoothing',2,'backstress',10e3)
+ 	'''
+ 
+ 	# check inputs
+@@ -101,7 +97,7 @@
+ 	exy=-0.5*(exx-eyy)*npy.sin(2.*velangle)+exy*npy.cos(2.*velangle)
+ 	a=ey/ex
+ 	b=exy/ex
+-	pos=npy.nonzero(npy.logical_or(ex<0,ey<0))
++	pos=npy.nonzero(npy.logical_and(ex<0,ey<0))
+ 	#length(pos)
+ 	a[pos]=-a[pos]
+ 	
+@@ -110,9 +106,6 @@
+ 	pos=npy.nonzero(abs((abs(a)-2))<1e-3)
+ 	a[pos]=-2+1e-3
+ 	
+-	#plotmodel(md,'data',a,'caxis',[-2,1])
+-	#plotmodel(md,'data',ex,'caxis',[-0.5e-9,0.5e-9])
+-	
+ 	# spreading stress
+ 	rhoi=md.materials.rho_ice
+ 	rhow=md.materials.rho_water
+@@ -134,112 +127,29 @@
+ 	else:
+ 		raise StandardError('argument passed to "eq" not valid.  Type "help analyticaldamage" for usage')
+ 	
+-	#D2=1-((theta./ex).^(1./n)).*(T-sigmab)./B;
+-	#length(find(D2<0))
+-	#length(find(ex<0))
+-	#length(find(D2>1))
+-	#length(find(theta<0))
+-	#pos=find(ex<0);
+-	#mask2=ismember(1:md.mesh.numberofvertices,pos);
+ 	D=1-(1+a+a**2+b**2)**((n-1)/(2*n))/abs(ex)**(1./n)*(T-sigmab)/B/(2+a)/npy.sign(ex)
+ 	
+-	#pos=find(D2>1);
+-	#mask1=ismember(1:md.mesh.numberofvertices,pos);
+-	#pos=find(a<-2);
+-	#mask2=ismember(1:md.mesh.numberofvertices,pos);
+-	#pos=find(ex<-0);
+-	#mask3=ismember(1:md.mesh.numberofvertices,pos);
+-	#pos=find(((2+a).*sign(ex))<0);
+-	#mask4=ismember(1:md.mesh.numberofvertices,pos);
+-	#plotmodel(md,'nlines',2,'ncols',2,'data',D2,'data',a,'data',ex,'data',(2+a).*sign(ex),...
+-	#	'mask#1',mask1,'mask#2',mask2,'mask#3',mask3,'mask#4',mask4,...
+-	#	'expdisp#all','./Exp/LarsenC_DomainOutline_Bedmap2extent.exp',...
+-	#	'caxis#1',[0 1],'caxis#2',[-2,1],'caxis#3',[0 4e-9],'caxis#4',[0 1]);
+-	
+ 	backstress=npy.zeros(md.mesh.numberofvertices,)
+ 	
+-	# new corrections
+ 	# D>1 where (2+a).*sign(ex)<0, compressive regions where high backstress needed
+ 	pos=npy.nonzero(D>1)
+ 	D[pos]=0
++	
+ 	# backstress to bring damage to zero
+ 	backstress[pos]=T[pos]-(1-D[pos])*B[pos]*npy.sign(ex[pos])*(2+a[pos])*abs(ex[pos])**(1./n[pos])/(1+a[pos]+a[pos]**2)**((n[pos]-1)/2./n[pos])
+-	#backstress[pos]=T[pos]-(1-D[pos]).*B[pos].*(ex[pos]./theta[pos]).^(1./n[pos]);
+ 	
+ 	pos=npy.nonzero(D<0)
+-	#mask=ismember(1:md.mesh.numberofvertices,pos)
+-	#plotmodel(md,'data',D,'caxis',[0,1],'mask',mask)
+ 	D[pos]=0
++
+ 	# backstress to bring negative damage to zero
+ 	backstress[pos]=T[pos]-(1-D[pos])*B[pos]*npy.sign(ex[pos])*(2+a[pos])*abs(ex[pos])**(1./n[pos])/(1+a[pos]+a[pos]**2)**((n[pos]-1)/2./n[pos])
+ 	
+ 	pos=npy.nonzero(backstress<0)
+-	#length[pos]
+ 	backstress[pos]=0
+ 	
+-	#plotmodel(md,'data',backstress,'caxis',[0 2e5],'edgecolor','k')
+-	
+ 	# increased rigidity to bring negative damage to zero
+ 	B[pos]=npy.sign(ex[pos])/(2+a[pos])*(1+a[pos]+a[pos]**2)**((n[pos]-1)/2./n[pos])*T[pos]/abs(ex[pos])**(1./n[pos]);
+-	#B[pos]=T[pos]./(1-D[pos]).*(theta[pos]./ex[pos]).^(1./n[pos]); # same calculated both ways
+ 	
+-	# enforce maximum B corresponding to -50 deg C ice
+-	#Bmax=paterson(273.15-50);
+-	#posB=find(B>Bmax);
+-	#B(posB)=Bmax;
+-	
+-	#plotmodel(md,'nlines',2,'ncols',1,'data',D,'data',D2,'caxis#all',[0,1])
+-	#plotmodel(md,'data',paterson(md.initialization.temperature)-B,'caxis',[-1e8 1e8])
+-	#plotmodel(md,'data',B,'caxis',[0.8e8 5e8])
+-	#plotmodel(md,'data',D2,'caxis',[0,1])
+-	#plotmodel(md,'data',(1-D2).*B,'caxis',[0.1e8 2e8])
+-	
+-	#plotmodel(md,'data',backstress2./T,'caxis',[1 2],'data',D2)
+-	#max(D2)
+-	#min(D2)
+-	
+-	#pos=find(D>1);
+-	#D[pos]=1-1e-9;
+-	#
+-	#pos=find(isnan(D));
+-	#D[pos]=0;
+-	#
+-	## additional calculations here where negative damage is inferred
+-	#pos=find(D<0);
+-	#D[pos]=0;
+-	#
+-	## magnitude of back stress to bring negative damage to zero
+-	#backstress=zeros(md.mesh.numberofvertices,1);
+-	#backstress[pos]=T[pos]-(1-D[pos]).*B[pos].*(ex[pos]./theta[pos]).^(1./n[pos]);
+-	#
+-	#mask=ismember(1:md.mesh.numberofvertices,pos);
+-	#
+-	## enforce max back stress equal to spreading stress
+-	##posS=find(backstress>T); 
+-	##backstress(posS)=T(posS);
+-	#
+-	## decreased thickness in areas of negative damage
+-	#dH=zeros(md.mesh.numberofvertices,1);
+-	#dH[pos]=1/C*((1-D[pos]).*B[pos].*(ex[pos]./theta[pos]).^(1./n[pos])-T[pos]);
+-	#
+-	## higher rigidity to eliminate areas of negative damage
+-	#B[pos]=T[pos]./(1-D[pos]).*(theta[pos]./ex[pos]).^(1./n[pos]);
+-	#
+-	#
+-	#temp=[0:-0.1:-50]+273.15;
+-	#rig=paterson(temp);
+-	#newtemp=md.initialization.temperature;
+-	#
+-	#for i=1:length(pos)
+-	#	[mindiff,index]=min(abs(rig-B(pos(i))));
+-	#	newtemp(pos(i))=temp(index);
+-	#end
+-	#
+-	#dT=newtemp-md.initialization.temperature;
+-	
+-	#any(D<0)
+-	#any(D>1)
+-	#any(backstress<0)
+ 	damage=D
+ 	
+ 	return damage, B, backstress
+Index: ../trunk-jpl/src/m/mech/analyticaldamage.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/analyticaldamage.m	(revision 16064)
++++ ../trunk-jpl/src/m/mech/analyticaldamage.m	(revision 16065)
+@@ -19,10 +19,6 @@
+ %   Return values:
+ %		'damage' which is truncated in the range [0,1-1e-9]
+ %
+-%		'mask' is a mask defining areas where damage was calculated as negative prior
+-%		to truncation, indicating that the ice is too warm or a back stress has not
+-%		been accounted for.
+-%
+ %	   'B' is the rigidity, which is equal to md.materials.rheology_B in areas outside
+ %		those defined by 'mask.'  Within areas defined by 'mask,' where negative damage 
+ %		is inferred, 'B' is updated to make damage equal to zero.  
+@@ -31,10 +27,10 @@
+ %		(keeping damage within its appropriate limits, e.g. D in [0,1]).
+ %
+ %   Usage:
+-%      [damage,mask,B,backstress]=analyticaldamage(md,options)
++%      [damage,B,backstress]=analyticaldamage(md,options)
+ %
+ %   Example:
+-%      [damage,mask,B,backstress]=analyticaldamage(md,'eq','Weertman2D','smoothing',2,'backstress',10e3);
++%      [damage,B,backstress]=analyticaldamage(md,'eq','Weertman2D','smoothing',2,'backstress',10e3);
+ 
+ % check inputs
+ if (nargin<1),
+@@ -113,9 +109,6 @@
+ pos=find(abs((abs(a)-2))<1e-3);
+ a(pos)=-2+1e-3;
+ 
+-%plotmodel(md,'data',a,'caxis',[-2,1])
+-%plotmodel(md,'data',ex,'caxis',[-0.5e-9,0.5e-9])
+-
+ % spreading stress
+ rhoi=md.materials.rho_ice;
+ rhow=md.materials.rho_water;
+@@ -139,110 +132,28 @@
+ 		error('argument passed to "eq" not valid.  Type "help analyticaldamage" for usage');
+ end
+ 
+-%D2=1-((theta./ex).^(1./n)).*(T-sigmab)./B;
+-%length(find(D2<0))
+-%length(find(ex<0))
+-%length(find(D2>1))
+-%length(find(theta<0))
+-%pos=find(ex<0);
+-%mask2=ismember(1:md.mesh.numberofvertices,pos);
+ D=1-(1+a+a.^2+b.^2).^((n-1)./(2*n))./abs(ex).^(1./n).*(T-sigmab)./B./(2+a)./sign(ex);
+ 
+-%pos=find(D2>1);
+-%mask1=ismember(1:md.mesh.numberofvertices,pos);
+-%pos=find(a<-2);
+-%mask2=ismember(1:md.mesh.numberofvertices,pos);
+-%pos=find(ex<-0);
+-%mask3=ismember(1:md.mesh.numberofvertices,pos);
+-%pos=find(((2+a).*sign(ex))<0);
+-%mask4=ismember(1:md.mesh.numberofvertices,pos);
+-%plotmodel(md,'nlines',2,'ncols',2,'data',D2,'data',a,'data',ex,'data',(2+a).*sign(ex),...
+-%	'mask#1',mask1,'mask#2',mask2,'mask#3',mask3,'mask#4',mask4,...
+-%	'expdisp#all','./Exp/LarsenC_DomainOutline_Bedmap2extent.exp',...
+-%	'caxis#1',[0 1],'caxis#2',[-2,1],'caxis#3',[0 4e-9],'caxis#4',[0 1]);
+-
+ backstress=zeros(md.mesh.numberofvertices,1);
+ 
+-% new corrections
+ % D>1 where (2+a).*sign(ex)<0, compressive regions where high backstress needed
+ pos=find(D>1);
+ D(pos)=0;
++
+ % backstress to bring damage to zero
+ backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*sign(ex(pos)).*(2+a(pos)).*abs(ex(pos)).^(1./n(pos))./(1+a(pos)+a(pos).^2).^((n(pos)-1)/2./n(pos));
+-%backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*(ex(pos)./theta(pos)).^(1./n(pos));
+ 
+ pos=find(D<0);
+ mask=ismember(1:md.mesh.numberofvertices,pos);
+-%plotmodel(md,'data',D,'caxis',[0,1],'mask',mask)
+ D(pos)=0;
++
+ % backstress to bring negative damage to zero
+ backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*sign(ex(pos)).*(2+a(pos)).*abs(ex(pos)).^(1./n(pos))./(1+a(pos)+a(pos).^2).^((n(pos)-1)/2./n(pos));
+ 
+ pos=find(backstress<0);
+-%length(pos)
+ backstress(pos)=0;
+ 
+-%plotmodel(md,'data',backstress,'caxis',[0 2e5],'edgecolor','k')
+-
+ % increased rigidity to bring negative damage to zero
+ B(pos)=sign(ex(pos))./(2+a(pos)).*(1+a(pos)+a(pos).^2).^((n(pos)-1)/2./n(pos)).*T(pos)./abs(ex(pos)).^(1./n(pos));
+-%B(pos)=T(pos)./(1-D(pos)).*(theta(pos)./ex(pos)).^(1./n(pos)); % same calculated both ways
+ 
+-% enforce maximum B corresponding to -50 deg C ice
+-%Bmax=paterson(273.15-50);
+-%posB=find(B>Bmax);
+-%B(posB)=Bmax;
+-
+-%plotmodel(md,'nlines',2,'ncols',1,'data',D,'data',D2,'caxis#all',[0,1])
+-%plotmodel(md,'data',paterson(md.initialization.temperature)-B,'caxis',[-1e8 1e8])
+-%plotmodel(md,'data',B,'caxis',[0.8e8 5e8])
+-%plotmodel(md,'data',D2,'caxis',[0,1])
+-%plotmodel(md,'data',(1-D2).*B,'caxis',[0.1e8 2e8])
+-
+-%plotmodel(md,'data',backstress2./T,'caxis',[1 2],'data',D2)
+-%max(D2)
+-%min(D2)
+-
+-%pos=find(D>1);
+-%D(pos)=1-1e-9;
+-%
+-%pos=find(isnan(D));
+-%D(pos)=0;
+-%
+-%% additional calculations here where negative damage is inferred
+-%pos=find(D<0);
+-%D(pos)=0;
+-%
+-%% magnitude of back stress to bring negative damage to zero
+-%backstress=zeros(md.mesh.numberofvertices,1);
+-%backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*(ex(pos)./theta(pos)).^(1./n(pos));
+-%
+-%mask=ismember(1:md.mesh.numberofvertices,pos);
+-%
+-%%% enforce max back stress equal to spreading stress
+-%%posS=find(backstress>T); 
+-%%backstress(posS)=T(posS);
+-%
+-%% decreased thickness in areas of negative damage
+-%dH=zeros(md.mesh.numberofvertices,1);
+-%dH(pos)=1/C*((1-D(pos)).*B(pos).*(ex(pos)./theta(pos)).^(1./n(pos))-T(pos));
+-%
+-%% higher rigidity to eliminate areas of negative damage
+-%B(pos)=T(pos)./(1-D(pos)).*(theta(pos)./ex(pos)).^(1./n(pos));
+-%
+-%
+-%temp=[0:-0.1:-50]+273.15;
+-%rig=paterson(temp);
+-%newtemp=md.initialization.temperature;
+-%
+-%for i=1:length(pos)
+-%	[mindiff,index]=min(abs(rig-B(pos(i))));
+-%	newtemp(pos(i))=temp(index);
+-%end
+-%
+-%dT=newtemp-md.initialization.temperature;
+-
+-%any(D<0)
+-%any(D>1)
+-%any(backstress<0)
+ damage=D;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16065-16066.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16065-16066.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16065-16066.diff	(revision 16134)
@@ -0,0 +1,418 @@
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16065)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16066)
+@@ -17,14 +17,99 @@
+ 
+ /*Mumps header files: */
+ #include "dmumps_c.h"
+-
+-#define JOB_INIT -1 
+-#define JOB_SOLVE 6
+-#define JOB_END  -2
+ /*}}}*/
+ 
+-void MpiDenseMumpsSolve( /*output: */ IssmPDouble* uf, int uf_M, int uf_m, /*matrix input: */ IssmPDouble* Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmPDouble* pf, int pf_M, int pf_m){ /*{{{*/
++void MumpsSettings(DMUMPS_STRUC_C &theMumpsStruc,ISSM_MPI_Comm &comm) { 
++	theMumpsStruc.par          = 1;  
++	theMumpsStruc.sym          = 0;
++	theMumpsStruc.comm_fortran = MPI_Comm_c2f(comm);
++	/*Control statements:{{{ */
++	theMumpsStruc.icntl[1-1] = 6; //error verbose
++	theMumpsStruc.icntl[2-1] = 1; //std verbose
++	theMumpsStruc.icntl[4-1] = 4; //verbose everything
++	theMumpsStruc.icntl[5-1] = 0;
++	theMumpsStruc.icntl[18-1] = 3;
+ 
++	theMumpsStruc.icntl[20-1] = 0;
++	theMumpsStruc.icntl[21-1] = 0;
++	theMumpsStruc.icntl[30-1] = 0;
++	/*}}}*/
++}
++
++// must be preceded by a call to MumpsSettings
++void MumpsInit(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = -1;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded by a call to MumpsInit
++void MumpsAnalyze(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = 1;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded by a call to MumpsAnalyze
++void MumpsFactorize(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = 2;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded by a call to MumpsFactorize
++void MumpsBacksubstitute(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = 3;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded at least  by a call to MumpsInit
++void MumpsFinalize(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = -2;
++	dmumps_c(&theMumpsStruc);
++}
++
++void MumpsSolve(int n,
++		int nnz,
++		int local_nnz,
++		int* irn_loc,
++		int* jcn_loc,
++		IssmPDouble *a_loc,
++		IssmPDouble *rhs) { 
++	/*Initialize mumps: {{{*/
++	ISSM_MPI_Comm   comm=IssmComm::GetComm();
++	DMUMPS_STRUC_C theMumpsStruc;
++	MumpsSettings(theMumpsStruc,comm);
++	MumpsInit(theMumpsStruc);
++	/*}}}*/
++	// now setup the rest of theMumpsStruc 
++	theMumpsStruc.n=n;
++	theMumpsStruc.nz=nnz;
++	theMumpsStruc.nz_loc=local_nnz;
++	theMumpsStruc.irn_loc=irn_loc;
++	theMumpsStruc.jcn_loc=jcn_loc;
++	theMumpsStruc.a_loc=a_loc;
++	theMumpsStruc.rhs=rhs;
++	theMumpsStruc.nrhs=1;
++	theMumpsStruc.lrhs=1;
++	/*Solve system: {{{*/
++	MumpsAnalyze(theMumpsStruc);
++	MumpsFactorize(theMumpsStruc);
++	MumpsBacksubstitute(theMumpsStruc);
++	/*}}}*/
++	MumpsFinalize(theMumpsStruc);
++}
++
++#ifdef _HAVE_ADOLC_
++// prototype for active variant
++void MumpsSolve(int n,
++		int nnz,
++		int local_nnz,
++		int* irn_loc,
++		int* jcn_loc,
++		IssmDouble *a_loc,
++		IssmDouble *rhs);
++#endif 
++
++void MpiDenseMumpsSolve( /*output: */ IssmDouble* uf, int uf_M, int uf_m, /*matrix input: */ IssmDouble* Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmDouble* pf, int pf_M, int pf_m){ /*{{{*/
++
+ 	/*Variables: {{{*/
+ 
+ 	ISSM_MPI_Comm   comm;
+@@ -35,11 +120,11 @@
+ 	int         nnz       ,local_nnz;
+ 	int        *irn_loc = NULL;
+ 	int        *jcn_loc = NULL;
+-	IssmPDouble *a_loc   = NULL;
++	IssmDouble *a_loc   = NULL;
+ 	int         count;
+ 	int         lower_row;
+ 	int         upper_row;
+-	IssmPDouble* rhs=NULL;
++	IssmDouble* rhs=NULL;
+ 	int*        recvcounts=NULL;
+ 	int*        displs=NULL;
+ 	/*}}}*/
+@@ -53,27 +138,7 @@
+ 	if (uf_M!=Kff_M | uf_M!=pf_M)_error_("solution vector should be the same size as stiffness matrix Kff and load vector pf");
+ 	if (uf_m!=Kff_m | uf_m!=pf_m)_error_("solution vector should be locally the same size as stiffness matrix Kff and load vector pf");
+ 	/*}}}*/
+-	/*Initialize mumps: {{{*/
+-	DMUMPS_STRUC_C id;
+-	id.job          = JOB_INIT;
+-	id.par          = 1;  
+-	id.sym          = 0;
+-	id.comm_fortran = MPI_Comm_c2f(comm);
+-	dmumps_c(&id);
+-	/*}}}*/
+-	/*Control statements:{{{ */
+-	id.icntl[1-1] = 6; //error verbose
+-	id.icntl[2-1] = 1; //std verbose
+-	id.icntl[4-1] = 4; //verbose everything
+-	id.icntl[5-1] = 0;
+-	id.icntl[18-1] = 3;
+-
+-	id.icntl[20-1] = 0;
+-	id.icntl[21-1] = 0;
+-	id.icntl[30-1] = 0;
+-	/*}}}*/
+ 	/*Initialize matrix:{{{ */
+-	id.n=Kff_M;
+ 
+ 	/*figure out number of non-zero entries: */
+ 	local_nnz=0;
+@@ -85,14 +150,12 @@
+ 
+ 	ISSM_MPI_Reduce(&local_nnz,&nnz,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,comm);
+ 	ISSM_MPI_Bcast(&nnz,1,ISSM_MPI_INT,0,comm);
+-	id.nz=nnz;
+-	id.nz_loc=local_nnz;
+ 
+ 	/*Allocate: */
+ 	if(local_nnz){
+ 		irn_loc=xNew<int>(local_nnz);
+ 		jcn_loc=xNew<int>(local_nnz);
+-		a_loc=xNew<IssmPDouble>(local_nnz);
++		a_loc=xNew<IssmDouble>(local_nnz);
+ 	}
+ 
+ 	/*Populate the triplets: */
+@@ -108,12 +171,8 @@
+ 			}
+ 		}
+ 	}
+-	id.irn_loc=irn_loc;
+-	id.jcn_loc=jcn_loc;
+-	id.a_loc=a_loc;
+-
+ 	/*Deal with right hand side. We need to ISSM_MPI_Gather it onto cpu 0: */
+-	rhs=xNew<IssmPDouble>(pf_M);
++	rhs=xNew<IssmDouble>(pf_M);
+ 
+ 	recvcounts=xNew<int>(num_procs);
+ 	displs=xNew<int>(num_procs);
+@@ -126,35 +185,222 @@
+ 
+ 	/*Gather:*/
+ 	ISSM_MPI_Gatherv(pf, pf_m, ISSM_MPI_DOUBLE, rhs, recvcounts, displs, ISSM_MPI_DOUBLE,0,comm);
+-	id.rhs=rhs;
+-	id.nrhs=1;
+-	id.lrhs=1;
+ 
+-	/*}}}*/
+-	/*Solve system: {{{*/
+-	id.job = JOB_SOLVE;
+-	dmumps_c (&id);
+-	/*}}}*/
++	MumpsSolve(Kff_M,
++		   nnz,
++		   local_nnz,
++		   irn_loc,
++		   jcn_loc,
++		   a_loc,
++		   rhs);
++
+ 	/*Now scatter from cpu 0 to all other cpus: {{{*/
+ 	ISSM_MPI_Scatterv( rhs, recvcounts, displs, ISSM_MPI_DOUBLE, uf, uf_m, ISSM_MPI_DOUBLE, 0, comm); 
+ 
+ 	/*}}}*/
+ 	/*Cleanup: {{{*/
+-	id.job = JOB_END; 
+-	dmumps_c (&id);
+-
+ 	xDelete<int>(irn_loc);
+ 	xDelete<int>(jcn_loc);
+-	xDelete<IssmPDouble>(a_loc);
+-	xDelete<IssmPDouble>(rhs);
++	xDelete<IssmDouble>(a_loc);
++	xDelete<IssmDouble>(rhs);
+ 	xDelete<int>(recvcounts);
+ 	xDelete<int>(displs);
+-
+ 	/*}}}*/
+ } /*}}}*/
+ 
+ #ifdef _HAVE_ADOLC_
++
++int mumpsSolveEDF(int iArrLength, int* iArr, int nPlusNz /* we can ignore it*/, double* dp_x, int m, double* dp_y) {
++  // unpack parameters
++  int n=iArr[0];
++  int nz=iArr[1];
++  int *irn=new int[nz];
++  int *jcn=new int[nz];
++  double *A=new double[nz];
++  for (int i=0;i<nz;++i) { 
++    irn[i]=iArr[2+i];
++    jcn[i]=iArr[2+nz+i];
++    A[i]=dp_x[i];
++  }
++  double *rhs_sol=new double[n];
++  for (int i=0;i<n;++i) { 
++    rhs_sol[i]=dp_x[nz+i];
++  }
++  mumpsSolve(n,nz,irn,jcn,A,rhs_sol);
++  for (int i=0;i<m;++i) { 
++    dp_y[i]=rhs_sol[i];
++  }
++  return 0;
++}
++
++void MumpsSolve(int n,
++		int nnz,
++		int local_nnz,
++		int* irn_loc,
++		int* jcn_loc,
++		IssmDouble *a_loc,
++		IssmDouble *rhs) { 
++  int packedDimsSparseArrLength=1+1+1+local_nnz+local_nnz;
++  int *packedDimsSparseArr=xNew<int>(packedDimsSparseArrLength);
++  packedDimsSparseArr[0]=n;
++  packedDimsSparseArr[1]=nnz;
++  packedDimsSparseArr[2]=local_nnz;
++  for (int i=0;i<local_nnz;++i) {
++    packedDimsSparseArr[3+i]=irn_loc[i];
++    packedDimsSparseArr[3+local_nnz+i]=jcn_loc[i];
++  }
++  ensureContiguousLocations(local_nnz+n);
++  adouble *pack_A_rhs=xNew<IssmDouble>(local_nnz+n);
++  for (int i=0;i<local_nnz;++i) { 
++    pack_A_rhs[i]=a_loc[i];
++  }
++  for (int i=0;i<n;++i) { 
++    pack_A_rhs[local_nnz+i]=rhs[i];
++  }
++  double *passivePack_A_rhs=xNew<IssmPDouble>(local_nnz+n);
++  double *passiveSol=xNew<IssmPDouble>(n);
++  ensureContiguousLocations(n);
++  adouble *sol=xNew<IssmDouble>(n);
++  call_ext_fct(ourEDF_p,
++	       packedDimsSparseArrLength, packedDimsSparseArr,
++	       local_nnz+n, passivePack_A_rhs, pack_A_rhs, 
++	       n, passiveSol,sol);
++  for (int i=0;i<n;++i) { 
++    rhs[i]=sol[i];
++  }
++  xDelete(sol);
++  xDelete(passiveSol);
++  xDelete(passivePack_A_rhs);
++  xDelete(pack_A_rhs);
++  xDelete(packedDimsSparseArr);
++}
++
++int fos_forward_mumpsSolveEDF(int iArrLength, int* iArr, int nPlusNz /* we can ignore it*/, 
++			      double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y) {
++  // unpack parameters
++  int n=iArr[0];
++  int nz=iArr[1];
++  int *irn=new int[nz];
++  int *jcn=new int[nz];
++  double *A=new double[nz];
++  for (int i=0;i<nz;++i) { 
++    irn[i]=iArr[2+i];
++    jcn[i]=iArr[2+nz+i];
++    A[i]=dp_x[i];
++  }
++  double *rhs_sol=new double[n];
++  for (int i=0;i<n;++i) { 
++    rhs_sol[i]=dp_x[nz+i];
++  }
++  DMUMPS_STRUC_C id;
++  id.par = 1; // one processor=sequential code
++  id.sym = 0; // asymmetric
++  id.job = JOB_INIT;
++  dmumps_c(&id);
++
++  id.icntl[1-1] = 6; //error verbose
++  id.icntl[2-1] = 0; //std verbose
++  id.icntl[3-1] = 0; // 
++  id.icntl[4-1] = 0; // 
++  id.icntl[5-1] = 0; // matrix is assembled
++  id.icntl[18-1] = 0; // centralized
++  id.icntl[20-1] = 0; // rhs is dense and centralized
++  id.icntl[21-1] = 0; // solution is centralized
++  id.n=n;
++  id.nz=nz;
++  id.irn=irn;
++  id.jcn=jcn;
++  id.a=A;
++  id.job = JOB_ANALYSIS;
++  dmumps_c(&id);
++  id.job = JOB_FACTORIZATION; 
++  dmumps_c (&id);
++  // solve the orifginal system
++  id.rhs=rhs_sol;
++  id.nrhs=1;
++  id.lrhs=1;
++  id.job = JOB_BACKSUBST; 
++  dmumps_c (&id);
++  for (int i=0;i<m;++i) { 
++    dp_y[i]=rhs_sol[i];
++  }
++  // solve for the derivative
++  for (int i=0;i<n;++i) { 
++    rhs_sol[i]=dp_X[nz+i]; 
++  }
++  for (int i=0;i<nz;++i) { 
++    rhs_sol[irn[i]-1]-=dp_X[i]*dp_y[jcn[i]-1];
++  }
++  dmumps_c (&id);
++  for (int i=0;i<m;++i) { 
++    dp_Y[i]=rhs_sol[i];
++  }
++  id.job = JOB_END; 
++  dmumps_c (&id);
++  return 3;
++}
++
++int fos_reverse_mumpsSolveEDF(int iArrLength, int* iArr, 
++			      int m, double *dp_U, 
++			      int nPlusNz, double *dp_Z, 
++			      double *dp_x, double *dp_y) {
++  // unpack parameters
++  int n=iArr[0];
++  int nz=iArr[1];
++  int *irn=new int[nz];
++  int *jcn=new int[nz];
++  double *A=new double[nz];
++  for (int i=0;i<nz;++i) { 
++    irn[i]=iArr[2+i];
++    jcn[i]=iArr[2+nz+i];
++    A[i]=dp_x[i];
++  }
++  DMUMPS_STRUC_C id;
++  id.par = 1; // one processor=sequential code
++  id.sym = 0; // asymmetric
++  id.job = JOB_INIT;
++  dmumps_c(&id);
++
++  id.icntl[1-1] = 6; //error verbose
++  id.icntl[2-1] = 0; //std verbose
++  id.icntl[3-1] = 0; // 
++  id.icntl[4-1] = 0; // 
++  id.icntl[5-1] = 0; // matrix is assembled
++  id.icntl[9-1] = 0; //solve for the transpose
++  id.icntl[18-1] = 0; // centralized
++  id.icntl[20-1] = 0; // rhs is dense and centralized
++  id.icntl[21-1] = 0; // solution is centralized
++  id.n=n;
++  id.nz=nz;
++  id.irn=irn;
++  id.jcn=jcn;
++  id.a=A;
++  id.job = JOB_ANALYSIS;
++  dmumps_c(&id);
++  id.job = JOB_FACTORIZATION; 
++  dmumps_c (&id);
++  double *rhs_sol=new double[n];
++  for (int i=0;i<n;++i) { 
++    rhs_sol[i]=dp_U[i];
++  }
++  id.rhs=rhs_sol;
++  id.nrhs=1;
++  id.lrhs=1;
++  id.job = JOB_BACKSUBST; 
++  dmumps_c (&id);
++  // update the adhoint of the rhs: 
++  for (int i=0;i<m;++i) { 
++    dp_Z[nz+i]+=rhs_sol[i];
++  }
++  // update the adjoint of the matrix: 
++  for (int i=0;i<nz;++i) { 
++    dp_Z[i]+=-dp_U[irn[i]-1]*dp_y[jcn[i]-1];
++  }
++  return 3;
++}
++
+ void MpiDenseMumpsSolve( /*output: */ IssmDouble* uf, int uf_M, int uf_m, /*matrix input: */ IssmDouble* Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmDouble* pf, int pf_M, int pf_m){ /*{{{*/
+ 	_error_("not supported yet!");
+ } /*}}}*/
++
+ #endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-16066-16067.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16066-16067.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16066-16067.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/startup.py
+===================================================================
+--- ../trunk-jpl/startup.py	(revision 16066)
++++ ../trunk-jpl/startup.py	(revision 16067)
+@@ -27,4 +27,7 @@
+ 				
+ sys.path.append(ISSM_DIR + '/lib')
+ 
+-print("\n  To get started with ISSM, type issmdoc at the command prompt.\n\n")
++#Manual imports for commonly used functions
++from plotmodel import plotmodel
++
++#print("\n  To get started with ISSM, type issmdoc at the command prompt.\n\n")
Index: /issm/oecreview/Archive/15392-16133/ISSM-16067-16068.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16067-16068.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16067-16068.diff	(revision 16134)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16067)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16068)
+@@ -19,10 +19,16 @@
+ #include "dmumps_c.h"
+ /*}}}*/
+ 
+-void MumpsSettings(DMUMPS_STRUC_C &theMumpsStruc,ISSM_MPI_Comm &comm) { 
++void MumpsInit(DMUMPS_STRUC_C &theMumpsStruc) { 
+ 	theMumpsStruc.par          = 1;  
+ 	theMumpsStruc.sym          = 0;
+-	theMumpsStruc.comm_fortran = MPI_Comm_c2f(comm);
++	theMumpsStruc.comm_fortran = MPI_Comm_c2f(IssmComm::GetComm());
++	theMumpsStruc.job          = -1;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded by a call to MumpsInit
++void MumpsSettings(DMUMPS_STRUC_C &theMumpsStruc) { 
+ 	/*Control statements:{{{ */
+ 	theMumpsStruc.icntl[1-1] = 6; //error verbose
+ 	theMumpsStruc.icntl[2-1] = 1; //std verbose
+@@ -36,12 +42,6 @@
+ 	/*}}}*/
+ }
+ 
+-// must be preceded by a call to MumpsSettings
+-void MumpsInit(DMUMPS_STRUC_C &theMumpsStruc) { 
+-	theMumpsStruc.job          = -1;
+-	dmumps_c(&theMumpsStruc);
+-}
+-
+ // must be preceded by a call to MumpsInit
+ void MumpsAnalyze(DMUMPS_STRUC_C &theMumpsStruc) { 
+ 	theMumpsStruc.job          = 1;
+@@ -74,10 +74,9 @@
+ 		IssmPDouble *a_loc,
+ 		IssmPDouble *rhs) { 
+ 	/*Initialize mumps: {{{*/
+-	ISSM_MPI_Comm   comm=IssmComm::GetComm();
+ 	DMUMPS_STRUC_C theMumpsStruc;
+-	MumpsSettings(theMumpsStruc,comm);
+ 	MumpsInit(theMumpsStruc);
++	MumpsSettings(theMumpsStruc);
+ 	/*}}}*/
+ 	// now setup the rest of theMumpsStruc 
+ 	theMumpsStruc.n=n;
+@@ -194,6 +193,7 @@
+ 		   a_loc,
+ 		   rhs);
+ 
++if (my_rank==0) for (int i=0;i<Kff_M;++i) std::cout << i << " : " << rhs[i] << std::endl;
+ 	/*Now scatter from cpu 0 to all other cpus: {{{*/
+ 	ISSM_MPI_Scatterv( rhs, recvcounts, displs, ISSM_MPI_DOUBLE, uf, uf_m, ISSM_MPI_DOUBLE, 0, comm); 
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16068-16069.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16068-16069.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16068-16069.diff	(revision 16134)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/configs/config-arm-linux.sh
+===================================================================
+--- ../trunk-jpl/configs/config-arm-linux.sh	(revision 16068)
++++ ../trunk-jpl/configs/config-arm-linux.sh	(revision 16069)
+@@ -11,5 +11,4 @@
+    --without-fortran\
+    --without-wrappers\
+    --without-kriging\
+-   --with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install\
+-   --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install\
++   --with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install
Index: /issm/oecreview/Archive/15392-16133/ISSM-16069-16070.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16069-16070.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16069-16070.diff	(revision 16134)
@@ -0,0 +1,122 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16069)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16070)
+@@ -112,11 +112,16 @@
+ 	#ifdef _HAVE_ADOLC_
+ 		/*initialize a placeholder to store solver pointers: {{{*/
+ 		GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
++#ifdef _HAVE_GSL_
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
++#endif
++#ifdef _HAVE_MUMPS_
++		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(mumpsSolveEDF);
++#endif
+ 		// to save some space:
+ 		// we know we won't use adolc inside of  the solver:
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->nestedAdolc=false;
+-		// the solution vector is just allocated and doesn't have a meaningfull prior value
++		// the solution vector is just allocated and doesn't have a meaningful prior value
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_y_priorRequired=false;
+ 		// the solver wrapper makes sure the matrix and the right hand side don't change
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_x_changes=false;
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16069)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16070)
+@@ -14,6 +14,7 @@
+ #include "../../shared/Exceptions/exceptions.h"
+ #include "../../shared/io/Comm/IssmComm.h"
+ #include "../mpi/issmmpi.h"
++#include "./mumpsincludes.h"
+ 
+ /*Mumps header files: */
+ #include "dmumps_c.h"
+@@ -72,7 +73,8 @@
+ 		int* irn_loc,
+ 		int* jcn_loc,
+ 		IssmPDouble *a_loc,
+-		IssmPDouble *rhs) { 
++		IssmPDouble *rhs,
++		Parameters* /*unused here*/) {
+ 	/*Initialize mumps: {{{*/
+ 	DMUMPS_STRUC_C theMumpsStruc;
+ 	MumpsInit(theMumpsStruc);
+@@ -104,10 +106,11 @@
+ 		int* irn_loc,
+ 		int* jcn_loc,
+ 		IssmDouble *a_loc,
+-		IssmDouble *rhs);
++		IssmDouble *rhs,
++		Parameters* parameters);
+ #endif 
+ 
+-void MpiDenseMumpsSolve( /*output: */ IssmDouble* uf, int uf_M, int uf_m, /*matrix input: */ IssmDouble* Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmDouble* pf, int pf_M, int pf_m){ /*{{{*/
++void MpiDenseMumpsSolve( /*output: */ IssmDouble* uf, int uf_M, int uf_m, /*matrix input: */ IssmDouble* Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters){ /*{{{*/
+ 
+ 	/*Variables: {{{*/
+ 
+@@ -191,7 +194,8 @@
+ 		   irn_loc,
+ 		   jcn_loc,
+ 		   a_loc,
+-		   rhs);
++		   rhs,
++		   parameters);
+ 
+ if (my_rank==0) for (int i=0;i<Kff_M;++i) std::cout << i << " : " << rhs[i] << std::endl;
+ 	/*Now scatter from cpu 0 to all other cpus: {{{*/
+@@ -239,7 +243,8 @@
+ 		int* irn_loc,
+ 		int* jcn_loc,
+ 		IssmDouble *a_loc,
+-		IssmDouble *rhs) { 
++		IssmDouble *rhs,
++		Parameters* parameters) {
+   int packedDimsSparseArrLength=1+1+1+local_nnz+local_nnz;
+   int *packedDimsSparseArr=xNew<int>(packedDimsSparseArrLength);
+   packedDimsSparseArr[0]=n;
+Index: ../trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h	(revision 16069)
++++ ../trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h	(revision 16070)
+@@ -5,6 +5,25 @@
+ #ifndef _MUMPS_INCLUDES_H_
+ #define _MUMPS_INCLUDES_H_
+ 
+-void MpiDenseMumpsSolve(IssmDouble* uf,int uf_M,int uf_n, IssmDouble* Kff,int Kff_M, int Kff_N, int Kff_m, IssmDouble* pf, int pf_M, int pf_m);
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
+ 
++#include "../../shared/Numerics/types.h"
++/*}}}*/
++
++class Parameters;
++
++void MpiDenseMumpsSolve(IssmDouble* uf,int uf_M,int uf_n, IssmDouble* Kff,int Kff_M, int Kff_N, int Kff_m, IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters);
++
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
++// call back functions:
++ADOLC_ext_fct_iArr mumpsSolveEDF;
++ADOLC_ext_fct_iArr_fos_reverse fos_reverse_mumpsSolveEDF;
++ADOLC_ext_fct_iArr_fov_reverse fov_reverse_mumpsSolveEDF;
+ #endif
++
++#endif
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16069)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16070)
+@@ -517,7 +517,7 @@
+ 
+ 			/*Let's try and use the MUMPS solver here: */
+ 			#ifdef _HAVE_MUMPS_
+-			MpiDenseMumpsSolve(/*output*/ uf->vector,uf->M,uf->m, /*stiffness matrix:*/ this->matrix,this->M,this->N,this->m, /*right hand side load vector: */ pf->vector,pf->M,pf->m);
++			MpiDenseMumpsSolve(/*output*/ uf->vector,uf->M,uf->m, /*stiffness matrix:*/ this->matrix,this->M,this->N,this->m, /*right hand side load vector: */ pf->vector,pf->M,pf->m,parameters);
+ 			#else
+ 			_error_("IssmMpiDenseMat solver requires MUMPS solver");
+ 			#endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-16070-16071.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16070-16071.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16070-16071.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16070)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16071)
+@@ -197,7 +197,6 @@
+ 		   rhs,
+ 		   parameters);
+ 
+-if (my_rank==0) for (int i=0;i<Kff_M;++i) std::cout << i << " : " << rhs[i] << std::endl;
+ 	/*Now scatter from cpu 0 to all other cpus: {{{*/
+ 	ISSM_MPI_Scatterv( rhs, recvcounts, displs, ISSM_MPI_DOUBLE, uf, uf_m, ISSM_MPI_DOUBLE, 0, comm); 
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16071-16072.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16071-16072.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16071-16072.diff	(revision 16134)
@@ -0,0 +1,91 @@
+Index: ../trunk-jpl/test/NightlyRun/test422.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.py	(revision 16071)
++++ ../trunk-jpl/test/NightlyRun/test422.py	(revision 16072)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-08,1e-09,1e-06,1e-09,1e-07]
++field_tolerances=[1e-07,2e-07,1e-06,2e-07,1e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 16071)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 16072)
+@@ -15,7 +15,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={2e-11,1e-11,1e-11,1e-11};
++field_tolerances={4e-11,2e-11,2e-11,1e-11};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 16071)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 16072)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-08,2e-09,2e-05,5e-09,1e-07};
++field_tolerances={1e-07,1e-07,2e-05,1e-07,1e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 16071)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 16072)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-08,1e-08,2e-06,1e-08,5e-07};
++field_tolerances={1e-07,2e-07,2e-06,2e-07,5e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test403.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.py	(revision 16071)
++++ ../trunk-jpl/test/NightlyRun/test403.py	(revision 16072)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
++field_tolerances=[2e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test290.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test290.py	(revision 16071)
++++ ../trunk-jpl/test/NightlyRun/test290.py	(revision 16072)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx', 'Vy', 'Vz', 'Vel','Pressure'];
+-field_tolerances=[1e-7,1e-7,1e-7,1e-7,1e-7];
++field_tolerances=[1e-7,1e-7,2e-7,1e-7,1e-7];
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 16071)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 16072)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-08,2e-09,2e-05,2e-09,1e-07]
++field_tolerances=[1e-07,1e-07,2e-05,1e-07,2e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
Index: /issm/oecreview/Archive/15392-16133/ISSM-16072-16073.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16072-16073.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16072-16073.diff	(revision 16134)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/test/NightlyRun/test433.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test433.m	(revision 16072)
++++ ../trunk-jpl/test/NightlyRun/test433.m	(revision 16073)
+@@ -36,7 +36,11 @@
+ md=solve(md,TransientSolutionEnum());
+ element_on_iceshelf_subelement=(md.results.TransientSolution.MaskGroundediceLevelset);
+ 
++md.groundingline.migration='SubelementMigration2';
++md=solve(md,TransientSolutionEnum());
++element_on_iceshelf_subelement2=(md.results.TransientSolution.MaskGroundediceLevelset);
++
+ %Fields and tolerances to track changes
+-field_names     ={'ElementOnIceShelfAgressive','ElementOnIceShelfSoft','ElementOnIceShelfSubelement'};
+-field_tolerances={1e-13,1e-13,1e-13};
+-field_values={element_on_iceshelf_agressive,element_on_iceshelf_soft,element_on_iceshelf_subelement};
++field_names     ={'ElementOnIceShelfAgressive','ElementOnIceShelfSoft','ElementOnIceShelfSubelement','ElementOnIceShelfSubelement'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={element_on_iceshelf_agressive,element_on_iceshelf_soft,element_on_iceshelf_subelement,element_on_iceshelf_subelement2};
+Index: ../trunk-jpl/test/Archives/Archive433.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-16073-16074.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16073-16074.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16073-16074.diff	(revision 16134)
@@ -0,0 +1,185 @@
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 16073)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 16074)
+@@ -34,6 +34,7 @@
+ 		GaussPenta(int index1, int index2,int order);
+ 		GaussPenta(int index1, int index2, int index3, int order);
+ 		GaussPenta(int index1, int index2, int index3, int index4,int order_horiz,int order_vert);
++		GaussPenta(int index,IssmDouble r1, IssmDouble r2,bool maintlyfloating,int order);
+ 		GaussPenta(IssmDouble area_coordinates[4][3],int order_horiz,int order_vert);
+ 		~GaussPenta();
+ 
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 16073)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 16074)
+@@ -237,6 +237,168 @@
+ 	xDelete<double>(seg_vert_weights);
+ }
+ /*}}}*/
++/*FUNCTION GaussPenta::GaussPenta(int index,double r1,double r2,int order) {{{*/
++GaussPenta::GaussPenta(int index,IssmDouble r1,IssmDouble r2,bool mainlyfloating,int order){
++
++	/*
++	 *  ^ 
++	 *  |
++	 * 1|\
++	 *  |  \
++	 *  |    \
++	 *  |      \
++	 *  |        \
++	 *  |          \
++	 *  |    +(x,y)  \
++	 *  |              \
++	 *  +---------------+-->
++	 *  0               1
++	 *
++	 */
++	int         ig;
++	IssmDouble x,y;
++	IssmDouble xy_list[3][2];
++
++	if(mainlyfloating){
++		/*Get gauss points*/
++		GaussLegendreTria(&this->numgauss,&this->coords1,&this->coords2,&this->coords3,&this->weights,order);
++
++		xy_list[0][0]=0;  xy_list[0][1]=0; 
++		xy_list[1][0]=r1; xy_list[1][1]=0; 
++		xy_list[2][0]=0;  xy_list[2][1]=r2; 
++
++		for(ig=0;ig<this->numgauss;ig++){
++			x = this->coords1[ig]*xy_list[0][0] + this->coords2[ig]*xy_list[1][0] + this->coords3[ig]*xy_list[2][0];
++			y = this->coords1[ig]*xy_list[0][1] + this->coords2[ig]*xy_list[1][1] + this->coords3[ig]*xy_list[2][1];
++
++			switch(index){
++				case 0:
++					this->coords1[ig] = 1.-x-y;
++					this->coords2[ig] = x;
++					this->coords3[ig] = y;
++					break;
++				case 1:
++					this->coords1[ig] = y;
++					this->coords2[ig] = 1.-x-y;
++					this->coords3[ig] = x;
++					break;
++				case 2:
++					this->coords1[ig] = x;
++					this->coords2[ig] = y;
++					this->coords3[ig] = 1.-x-y;
++					break;
++				default:
++					_error_("index "<<index<<" not supported yet");
++			}
++			this->weights[ig] = this->weights[ig]*r1*r2;
++			this->coords4=xNew<IssmDouble>(numgauss);
++			for(ig=0;ig<numgauss;ig++) this->coords4[ig]=-1.0;
++		}
++	}
++	else{
++		/*Double number of gauss points*/
++		GaussPenta *gauss1    = NULL;
++		GaussPenta *gauss2    = NULL;
++		gauss1=new GaussPenta(0,1,2,order);
++		gauss2=new GaussPenta(0,1,2,order);
++
++		xy_list[0][0]=r1; xy_list[0][1]=0; 
++		xy_list[1][0]=0;  xy_list[1][1]=1.; 
++		xy_list[2][0]=0;  xy_list[2][1]=r2; 
++
++			//gauss1->Echo();
++		for(ig=0;ig<gauss1->numgauss;ig++){
++			x = gauss1->coords1[ig]*xy_list[0][0] + gauss1->coords2[ig]*xy_list[1][0] + gauss1->coords3[ig]*xy_list[2][0];
++			y = gauss1->coords1[ig]*xy_list[0][1] + gauss1->coords2[ig]*xy_list[1][1] + gauss1->coords3[ig]*xy_list[2][1];
++
++			switch(index){
++				case 0:
++					gauss1->coords1[ig] = 1.-x-y;
++					gauss1->coords2[ig] = x;
++					gauss1->coords3[ig] = y;
++					break;
++				case 1:
++					gauss1->coords1[ig] = y;
++					gauss1->coords2[ig] = 1.-x-y;
++					gauss1->coords3[ig] = x;
++					break;
++				case 2:
++					gauss1->coords1[ig] = x;
++					gauss1->coords2[ig] = y;
++					gauss1->coords3[ig] = 1.-x-y;
++					break;
++				default:
++					_error_("index "<<index<<" not supported yet");
++			}
++			gauss1->weights[ig] = gauss1->weights[ig]*r1*(1-r2);
++		}
++			//gauss1->Echo();
++		xy_list[0][0]=r1; xy_list[0][1]=0; 
++		xy_list[1][0]=1.; xy_list[1][1]=0; 
++		xy_list[2][0]=0;  xy_list[2][1]=1.; 
++
++			//gauss2->Echo();
++		for(ig=0;ig<gauss2->numgauss;ig++){
++			x = gauss2->coords1[ig]*xy_list[0][0] + gauss2->coords2[ig]*xy_list[1][0] + gauss2->coords3[ig]*xy_list[2][0];
++			y = gauss2->coords1[ig]*xy_list[0][1] + gauss2->coords2[ig]*xy_list[1][1] + gauss2->coords3[ig]*xy_list[2][1];
++
++			switch(index){
++				case 0:
++					gauss2->coords1[ig] = 1.-x-y;
++					gauss2->coords2[ig] = x;
++					gauss2->coords3[ig] = y;
++					break;
++				case 1:
++					gauss2->coords1[ig] = y;
++					gauss2->coords2[ig] = 1.-x-y;
++					gauss2->coords3[ig] = x;
++					break;
++				case 2:
++					gauss2->coords1[ig] = x;
++					gauss2->coords2[ig] = y;
++					gauss2->coords3[ig] = 1.-x-y;
++					break;
++				default:
++					_error_("index "<<index<<" not supported yet");
++			}
++			gauss2->weights[ig] = gauss2->weights[ig]*(1-r1);
++		}
++
++		this->numgauss = gauss1->numgauss + gauss2->numgauss;
++		this->coords1=xNew<IssmDouble>(this->numgauss);
++		this->coords2=xNew<IssmDouble>(this->numgauss);
++		this->coords3=xNew<IssmDouble>(this->numgauss);
++		this->coords4=xNew<IssmDouble>(this->numgauss);
++		this->weights=xNew<IssmDouble>(this->numgauss);
++
++		for(ig=0;ig<gauss1->numgauss;ig++){ // Add the first triangle gauss points
++			this->coords1[ig]=gauss1->coords1[ig];
++			this->coords2[ig]=gauss1->coords2[ig];
++			this->coords3[ig]=gauss1->coords3[ig];
++			this->coords4[ig]=gauss1->coords4[ig];
++			this->weights[ig]=gauss1->weights[ig];
++		}
++		for(ig=0;ig<gauss2->numgauss;ig++){ // Add the second triangle gauss points
++			this->coords1[gauss1->numgauss+ig]=gauss2->coords1[ig];
++			this->coords2[gauss1->numgauss+ig]=gauss2->coords2[ig];
++			this->coords3[gauss1->numgauss+ig]=gauss2->coords3[ig];
++			this->coords4[gauss1->numgauss+ig]=gauss2->coords4[ig];
++			this->weights[gauss1->numgauss+ig]=gauss2->weights[ig];
++		}
++
++		/*Delete gauss points*/
++		delete gauss1;
++		delete gauss2;
++	}
++
++	/*Initialize static fields as undefined*/
++	weight=UNDEF;
++	coord1=UNDEF;
++	coord2=UNDEF;
++	coord3=UNDEF;
++	coord4=UNDEF;
++}
++/*}}}*/
+ /*FUNCTION GaussPenta::GaussPenta(IssmDouble area_coordinates[4][3],int order_horiz,int order_vert){{{*/
+ GaussPenta::GaussPenta(IssmDouble area_coordinates[4][3],int order_horiz,int order_vert){
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16074-16075.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16074-16075.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16074-16075.diff	(revision 16134)
@@ -0,0 +1,171 @@
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 16075)
+@@ -28,7 +28,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[2e-11,1e-11,1e-11,1e-11]
++field_tolerances=[2.5e-11,1.5e-11,1e-11,1.5e-11]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.m	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test206.m	(revision 16075)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-13,1e-13};
++field_tolerances={1e-13,1.35e-6};
+ field_values={...
+ 	(md.results.ThermalSolution.Temperature),...
+ 	(md.results.ThermalSolution.BasalforcingsMeltingRate),...
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 16075)
+@@ -26,7 +26,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[2.45e-10,2.85e-11,3.35e-11,1e-11]
++field_tolerances=[4.5e-8,1.35e-8,1.55e-8,1e-11]
+ field_values=[\
+ 	   md.results.StressbalanceSolution.Vx,\
+ 	   md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 16075)
+@@ -13,7 +13,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={2.45e-10,2.85e-11,3.35e-11,1e-11};
++field_tolerances={4.5e-8,1.35e-8,1.55e-8,1e-11};
+ field_values={...
+ 	   (md.results.StressbalanceSolution.Vx),...
+ 	   (md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test209.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.py	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test209.py	(revision 16075)
+@@ -24,8 +24,8 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
+ field_tolerances=[\
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
+-	1e-13,1e-13,9.7e-10,1e-13,3.8e-11,3.85e-11,3.85e-11,3.85e-11,1e-13,1.55e-8,\
+-	2.65e-11,1.95e-12,1e-08,1.7e-12,3.9e-11,1e-10,1e-10,1e-10,7.4e-12,1e-8]
++	1e-13,1e-13,2e-9,1e-13,3.8e-11,3.85e-11,3.85e-11,3.85e-11,1e-13,1.55e-8,\
++	2.65e-11,2.55e-12,1e-08,2.4e-12,3.9e-11,1e-10,1e-10,1e-10,7.4e-12,1.85e-8]
+ 
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 16075)
+@@ -15,7 +15,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={4e-11,2e-11,2e-11,1e-11};
++field_tolerances={4e-11,2e-11,2e-11,2e-11};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test332.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test332.m	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test332.m	(revision 16075)
+@@ -23,5 +23,5 @@
+ %only if no limits are applied
+ %analitic=(md.mesh.y.^2-2*md.mesh.y*1.0e6)*(-2.0/(2*md.constants.yts*md.hydrology.sediment_transmitivity))
+ field_names     ={'SedimentWaterHead','SedimentHeadResidual'};
+-field_tolerances={1e-13, 1e-13};
++field_tolerances={1e-13, 2.5e-10};
+ field_values={md.results.HydrologySolution.SedimentHead,md.results.HydrologySolution.SedimentHeadResidual}
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 16075)
+@@ -11,7 +11,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy','Waterfraction','Temperature'};
+-field_tolerances={1e-13,1.2e-10,1e-13};
++field_tolerances={1e-13,1.45e-10,1e-13};
+ field_values={...
+ 	(md.results.EnthalpySolution.Enthalpy),...
+ 	(md.results.EnthalpySolution.Waterfraction),...
+Index: ../trunk-jpl/test/NightlyRun/test209.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.m	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test209.m	(revision 16075)
+@@ -12,8 +12,8 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+-	1e-13,1e-13,9.7e-10,1e-13,3.8e-11,3.85e-11,3.85e-11,3.85e-11,1e-13,1.55e-8,...
+-	2.65e-11,1.95e-12,1e-08,1.7e-12,3.9e-11,1e-10,1e-10,1e-10,7.4e-12,1e-8};
++	1e-13,1e-13,2e-9,1e-13,3.8e-11,3.85e-11,3.85e-11,3.85e-11,1e-13,1.55e-8,...
++	2.65e-11,2.55e-12,1e-08,2.4e-12,3.9e-11,1e-10,1e-10,1e-10,7.4e-12,1.85e-8};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test318.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.py	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test318.py	(revision 16075)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-13,1e-13,1e-10,1e-10,1e-13,1e-11,1e-6]
++field_tolerances=[1e-13,1e-13,1.5e-10,1e-10,1e-13,1e-11,1e-6]
+ field_values=[\
+ 	md.results.SteadystateSolution.Vx,\
+ 	md.results.SteadystateSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.py	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test206.py	(revision 16075)
+@@ -21,7 +21,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-13,1e-13]
++field_tolerances=[1e-13,1.35e-6]
+ field_values=[\
+ 	md.results.ThermalSolution.Temperature,\
+ 	md.results.ThermalSolution.BasalforcingsMeltingRate,\
+Index: ../trunk-jpl/test/NightlyRun/test120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.py	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test120.py	(revision 16075)
+@@ -21,7 +21,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Enthalpy','Waterfraction','Temperature']
+-field_tolerances=[1e-13,1.2e-10,1e-13]
++field_tolerances=[1e-13,1.45e-10,1e-13]
+ field_values=[\
+ 	md.results.EnthalpySolution.Enthalpy,\
+ 	md.results.EnthalpySolution.Waterfraction,\
+Index: ../trunk-jpl/test/NightlyRun/test318.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.m	(revision 16074)
++++ ../trunk-jpl/test/NightlyRun/test318.m	(revision 16075)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-13,1e-13,1e-10,1e-10,1e-13,1e-11,1e-6};
++field_tolerances={1e-13,1e-13,1.5e-10,1e-10,1e-13,1e-11,1e-6};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-16075-16076.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16075-16076.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16075-16076.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/mobile/native/Main.cpp
+===================================================================
+--- ../trunk-jpl/src/mobile/native/Main.cpp	(revision 16075)
++++ ../trunk-jpl/src/mobile/native/Main.cpp	(revision 16076)
+@@ -25,7 +25,7 @@
+ 		char *solution_type = NULL;
+ 		char *absfile = NULL;
+ 		char *relfile = NULL;
+-		ISSM_MPI_Comm    comm=0;
++		ISSM_MPI_Comm    comm=1;
+ 
+ 		/*log:*/
+ 		__android_log_print(ANDROID_LOG_INFO, "Native","Initializing FemModel");
Index: /issm/oecreview/Archive/15392-16133/ISSM-16082-16083.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16082-16083.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16082-16083.diff	(revision 16134)
@@ -0,0 +1,263 @@
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16082)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16083)
+@@ -13,7 +13,10 @@
+ #include "../../shared/MemOps/MemOps.h"
+ #include "../../shared/Exceptions/exceptions.h"
+ #include "../../shared/io/Comm/IssmComm.h"
++#include "../../classes/Params/GenericParam.h"
++#include "../../classes/Params/Parameters.h"
+ #include "../mpi/issmmpi.h"
++#include "../adolc/adolcincludes.h"
+ #include "./mumpsincludes.h"
+ 
+ /*Mumps header files: */
+@@ -74,7 +77,7 @@
+ 		int* jcn_loc,
+ 		IssmPDouble *a_loc,
+ 		IssmPDouble *rhs,
+-		Parameters* /*unused here*/) {
++		Parameters* parameters=0 /*unused here*/) {
+ 	/*Initialize mumps: {{{*/
+ 	DMUMPS_STRUC_C theMumpsStruc;
+ 	MumpsInit(theMumpsStruc);
+@@ -213,26 +216,31 @@
+ 
+ #ifdef _HAVE_ADOLC_
+ 
+-int mumpsSolveEDF(int iArrLength, int* iArr, int nPlusNz /* we can ignore it*/, double* dp_x, int m, double* dp_y) {
++int mumpsSolveEDF(int iArrLength, int* iArr, int /* ignored */, IssmPDouble* dp_x, int /* ignored */, IssmPDouble* dp_y) {
+   // unpack parameters
+   int n=iArr[0];
+-  int nz=iArr[1];
+-  int *irn=new int[nz];
+-  int *jcn=new int[nz];
+-  double *A=new double[nz];
+-  for (int i=0;i<nz;++i) { 
+-    irn[i]=iArr[2+i];
+-    jcn[i]=iArr[2+nz+i];
++  int nnz=iArr[1];
++  int local_nnz=iArr[2];
++  int *local_irn=xNew<int>(local_nnz);
++  int *local_jcn=xNew<int>(local_nnz);
++  IssmPDouble *A=xNew<IssmPDouble>(local_nnz);
++  for (int i=0;i<local_nnz;++i) {
++    local_irn[i]=iArr[3+i];
++    local_jcn[i]=iArr[3+local_nnz+i];
+     A[i]=dp_x[i];
+   }
+-  double *rhs_sol=new double[n];
++  IssmPDouble *rhs_sol=xNew<IssmPDouble>(n);
+   for (int i=0;i<n;++i) { 
+-    rhs_sol[i]=dp_x[nz+i];
++    rhs_sol[i]=dp_x[local_nnz+i];
+   }
+-  mumpsSolve(n,nz,irn,jcn,A,rhs_sol);
+-  for (int i=0;i<m;++i) { 
++  MumpsSolve(n,nnz,local_nnz,local_irn,local_jcn,A,rhs_sol);
++  for (int i=0;i<n;++i) {
+     dp_y[i]=rhs_sol[i];
+   }
++  xDelete(rhs_sol);
++  xDelete(A);
++  xDelete(local_jcn);
++  xDelete(local_irn);
+   return 0;
+ }
+ 
+@@ -254,18 +262,18 @@
+     packedDimsSparseArr[3+local_nnz+i]=jcn_loc[i];
+   }
+   ensureContiguousLocations(local_nnz+n);
+-  adouble *pack_A_rhs=xNew<IssmDouble>(local_nnz+n);
++  IssmDouble *pack_A_rhs=xNew<IssmDouble>(local_nnz+n);
+   for (int i=0;i<local_nnz;++i) { 
+     pack_A_rhs[i]=a_loc[i];
+   }
+   for (int i=0;i<n;++i) { 
+     pack_A_rhs[local_nnz+i]=rhs[i];
+   }
+-  double *passivePack_A_rhs=xNew<IssmPDouble>(local_nnz+n);
+-  double *passiveSol=xNew<IssmPDouble>(n);
++  IssmPDouble *passivePack_A_rhs=xNew<IssmPDouble>(local_nnz+n);
++  IssmPDouble *passiveSol=xNew<IssmPDouble>(n);
+   ensureContiguousLocations(n);
+-  adouble *sol=xNew<IssmDouble>(n);
+-  call_ext_fct(ourEDF_p,
++  IssmDouble *sol=xNew<IssmDouble>(n);
++  call_ext_fct(dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p,
+ 	       packedDimsSparseArrLength, packedDimsSparseArr,
+ 	       local_nnz+n, passivePack_A_rhs, pack_A_rhs, 
+ 	       n, passiveSol,sol);
+@@ -279,132 +287,56 @@
+   xDelete(packedDimsSparseArr);
+ }
+ 
+-int fos_forward_mumpsSolveEDF(int iArrLength, int* iArr, int nPlusNz /* we can ignore it*/, 
+-			      double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y) {
+-  // unpack parameters
+-  int n=iArr[0];
+-  int nz=iArr[1];
+-  int *irn=new int[nz];
+-  int *jcn=new int[nz];
+-  double *A=new double[nz];
+-  for (int i=0;i<nz;++i) { 
+-    irn[i]=iArr[2+i];
+-    jcn[i]=iArr[2+nz+i];
+-    A[i]=dp_x[i];
+-  }
+-  double *rhs_sol=new double[n];
+-  for (int i=0;i<n;++i) { 
+-    rhs_sol[i]=dp_x[nz+i];
+-  }
+-  DMUMPS_STRUC_C id;
+-  id.par = 1; // one processor=sequential code
+-  id.sym = 0; // asymmetric
+-  id.job = JOB_INIT;
+-  dmumps_c(&id);
+-
+-  id.icntl[1-1] = 6; //error verbose
+-  id.icntl[2-1] = 0; //std verbose
+-  id.icntl[3-1] = 0; // 
+-  id.icntl[4-1] = 0; // 
+-  id.icntl[5-1] = 0; // matrix is assembled
+-  id.icntl[18-1] = 0; // centralized
+-  id.icntl[20-1] = 0; // rhs is dense and centralized
+-  id.icntl[21-1] = 0; // solution is centralized
+-  id.n=n;
+-  id.nz=nz;
+-  id.irn=irn;
+-  id.jcn=jcn;
+-  id.a=A;
+-  id.job = JOB_ANALYSIS;
+-  dmumps_c(&id);
+-  id.job = JOB_FACTORIZATION; 
+-  dmumps_c (&id);
+-  // solve the orifginal system
+-  id.rhs=rhs_sol;
+-  id.nrhs=1;
+-  id.lrhs=1;
+-  id.job = JOB_BACKSUBST; 
+-  dmumps_c (&id);
+-  for (int i=0;i<m;++i) { 
+-    dp_y[i]=rhs_sol[i];
+-  }
+-  // solve for the derivative
+-  for (int i=0;i<n;++i) { 
+-    rhs_sol[i]=dp_X[nz+i]; 
+-  }
+-  for (int i=0;i<nz;++i) { 
+-    rhs_sol[irn[i]-1]-=dp_X[i]*dp_y[jcn[i]-1];
+-  }
+-  dmumps_c (&id);
+-  for (int i=0;i<m;++i) { 
+-    dp_Y[i]=rhs_sol[i];
+-  }
+-  id.job = JOB_END; 
+-  dmumps_c (&id);
+-  return 3;
+-}
+-
+ int fos_reverse_mumpsSolveEDF(int iArrLength, int* iArr, 
+-			      int m, double *dp_U, 
+-			      int nPlusNz, double *dp_Z, 
+-			      double *dp_x, double *dp_y) {
++			      int m, IssmPDouble *dp_U,
++			      int nPlusNz, IssmPDouble *dp_Z,
++			      IssmPDouble *dp_x, IssmPDouble *dp_y) {
+   // unpack parameters
+   int n=iArr[0];
+-  int nz=iArr[1];
+-  int *irn=new int[nz];
+-  int *jcn=new int[nz];
+-  double *A=new double[nz];
+-  for (int i=0;i<nz;++i) { 
+-    irn[i]=iArr[2+i];
+-    jcn[i]=iArr[2+nz+i];
+-    A[i]=dp_x[i];
++  int nnz=iArr[1];
++  int local_nnz=iArr[2];
++  int *local_irn=xNew<int>(local_nnz);
++  int *local_jcn=xNew<int>(local_nnz);
++  IssmPDouble *a_loc=xNew<IssmPDouble>(local_nnz);
++  for (int i=0;i<local_nnz;++i) {
++	  local_irn[i]=iArr[3+i];
++	  local_jcn[i]=iArr[3+local_nnz+i];
++    a_loc[i]=dp_x[i];
+   }
+-  DMUMPS_STRUC_C id;
+-  id.par = 1; // one processor=sequential code
+-  id.sym = 0; // asymmetric
+-  id.job = JOB_INIT;
+-  dmumps_c(&id);
+-
+-  id.icntl[1-1] = 6; //error verbose
+-  id.icntl[2-1] = 0; //std verbose
+-  id.icntl[3-1] = 0; // 
+-  id.icntl[4-1] = 0; // 
+-  id.icntl[5-1] = 0; // matrix is assembled
+-  id.icntl[9-1] = 0; //solve for the transpose
+-  id.icntl[18-1] = 0; // centralized
+-  id.icntl[20-1] = 0; // rhs is dense and centralized
+-  id.icntl[21-1] = 0; // solution is centralized
+-  id.n=n;
+-  id.nz=nz;
+-  id.irn=irn;
+-  id.jcn=jcn;
+-  id.a=A;
+-  id.job = JOB_ANALYSIS;
+-  dmumps_c(&id);
+-  id.job = JOB_FACTORIZATION; 
+-  dmumps_c (&id);
+-  double *rhs_sol=new double[n];
++  IssmPDouble *rhs_sol=xNew<IssmPDouble>(n);
+   for (int i=0;i<n;++i) { 
+     rhs_sol[i]=dp_U[i];
+   }
+-  id.rhs=rhs_sol;
+-  id.nrhs=1;
+-  id.lrhs=1;
+-  id.job = JOB_BACKSUBST; 
+-  dmumps_c (&id);
+-  // update the adhoint of the rhs: 
++  DMUMPS_STRUC_C theMumpsStruc;
++  MumpsInit(theMumpsStruc);
++  MumpsSettings(theMumpsStruc);
++  theMumpsStruc.n=n;
++  theMumpsStruc.nz=nnz;
++  theMumpsStruc.nz_loc=local_nnz;
++  theMumpsStruc.irn_loc=local_irn;
++  theMumpsStruc.jcn_loc=local_jcn;
++  theMumpsStruc.a_loc=a_loc;
++  theMumpsStruc.rhs=rhs_sol;
++  theMumpsStruc.nrhs=1;
++  theMumpsStruc.lrhs=1;
++  theMumpsStruc.icntl[9-1] = 0; //solve for the transpose
++  MumpsAnalyze(theMumpsStruc);
++  MumpsFactorize(theMumpsStruc);
++  MumpsBacksubstitute(theMumpsStruc);
++  MumpsFinalize(theMumpsStruc);
++  // update the adjoint of the rhs:
+   for (int i=0;i<m;++i) { 
+-    dp_Z[nz+i]+=rhs_sol[i];
++    dp_Z[local_nnz+i]+=rhs_sol[i];
+   }
+   // update the adjoint of the matrix: 
+-  for (int i=0;i<nz;++i) { 
+-    dp_Z[i]+=-dp_U[irn[i]-1]*dp_y[jcn[i]-1];
++  for (int i=0;i<local_nnz;++i) {
++    dp_Z[i]+=-dp_U[local_irn[i]-1]*dp_y[local_jcn[i]-1];
+   }
++  xDelete(rhs_sol);
++  xDelete(a_loc);
++  xDelete(local_jcn);
++  xDelete(local_irn);
+   return 3;
+ }
+ 
+-void MpiDenseMumpsSolve( /*output: */ IssmDouble* uf, int uf_M, int uf_m, /*matrix input: */ IssmDouble* Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmDouble* pf, int pf_M, int pf_m){ /*{{{*/
+-	_error_("not supported yet!");
+-} /*}}}*/
+-
+ #endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-16083-16084.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16083-16084.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16083-16084.diff	(revision 16134)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 16083)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 16084)
+@@ -1,4 +1,5 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@
++AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@ @AMPIINCL@
++
+ #AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(PYTHONWRAPPEREXT)
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 16083)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 16084)
+@@ -1,4 +1,4 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @MATLABINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@
++AM_CPPFLAGS = @DAKOTAINCL@ @MATLABINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @AMPIINCL@
+ #AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(MATLABWRAPPEREXT)
Index: /issm/oecreview/Archive/15392-16133/ISSM-16084-16085.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16084-16085.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16084-16085.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 16084)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 16085)
+@@ -481,12 +481,7 @@
+ double ISSM_MPI_Wtime(void){/*{{{*/
+ 
+ #ifdef _HAVE_MPI_
+-	#ifdef _HAVE_AMPI_
+-	assert(0); // to be implemented
+-	return 0.0;
+-	#else
+ 	return MPI_Wtime();
+-	#endif
+ #else 
+ 	assert(0); // to be implemented
+ 	return 0.0;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16085-16086.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16085-16086.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16085-16086.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16085)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16086)
+@@ -386,7 +386,7 @@
+ 						}
+ 						else{
+ 							if(fread(&pscalar,sizeof(IssmPDouble),1,this->fid)!=1) _error_("could not read scalar ");
+-							ISSM_MPI_Bcast(&pscalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
++							ISSM_MPI_Bcast(&pscalar,1,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+ 							scalar=reCast<IssmDouble>(pscalar);
+ 						}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16086-16087.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16086-16087.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16086-16087.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16086)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16087)
+@@ -769,7 +769,7 @@
+ 		if(my_rank==0){  
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+-		ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
++		ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+ 
+ 		_assert_(this->independents);
+ 		if (this->independents[data_enum]){
Index: /issm/oecreview/Archive/15392-16133/ISSM-16087-16088.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16087-16088.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16087-16088.diff	(revision 16134)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16087)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16088)
+@@ -112,12 +112,12 @@
+ 	#ifdef _HAVE_ADOLC_
+ 		/*initialize a placeholder to store solver pointers: {{{*/
+ 		GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
+-#ifdef _HAVE_GSL_
++		#ifdef _HAVE_GSL_
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
+-#endif
+-#ifdef _HAVE_MUMPS_
++		#endif
++		#ifdef _HAVE_MUMPS_
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(mumpsSolveEDF);
+-#endif
++		#endif
+ 		// to save some space:
+ 		// we know we won't use adolc inside of  the solver:
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->nestedAdolc=false;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16088-16089.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16088-16089.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16088-16089.diff	(revision 16134)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test404.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.py	(revision 16088)
++++ ../trunk-jpl/test/NightlyRun/test404.py	(revision 16089)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-07,1e-07,1e-06,1e-07,1e-07]
++field_tolerances=[1.5e-07,1e-07,1e-06,1e-07,1e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 16088)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 16089)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-07,1e-07,1e-06,1e-07,1e-07};
++field_tolerances={1.5e-07,1e-07,1e-06,1e-07,1e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-16089-16090.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16089-16090.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16089-16090.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 16089)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 16090)
+@@ -65,7 +65,8 @@
+ 	// data types
+ 	#define ISSM_MPI_CHAR       1
+ 	#define ISSM_MPI_DOUBLE     2
+-	#define ISSM_MPI_INT        3
++	#define ISSM_MPI_PDOUBLE    3
++	#define ISSM_MPI_INT        4
+ 
+ 	// operations
+ 	#define ISSM_MPI_MAX        1
Index: /issm/oecreview/Archive/15392-16133/ISSM-16090-16091.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16090-16091.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16090-16091.diff	(revision 16134)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16090)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16091)
+@@ -607,7 +607,7 @@
+ 	if(my_rank==0){
+ 		if(fread(&scalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+ 	}
+-	ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers: */
+ 	*pscalar=scalar;
+@@ -705,7 +705,7 @@
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+ 
+-		ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
++		ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+ 	}
+ 
+ 	/*Now cast to integer: */
+@@ -922,7 +922,7 @@
+ 					if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 				}
+ 
+-				ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
++				ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+ 				matrices[i]=xNew<IssmDouble>(M*N);
+ 				for (int j=0;j<M*N;++j) {matrices[i][j]=matrix[j];}
+ 				xDelete<IssmPDouble>(matrix);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16091-16092.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16091-16092.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16091-16092.diff	(revision 16134)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/Archives/Archive3002.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3005.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3019.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3020.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3008.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3003.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3006.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3001.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3015.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3009.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3010.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3004.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3007.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/15392-16133/ISSM-16092-16093.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16092-16093.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16092-16093.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 16092)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 16093)
+@@ -8,7 +8,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-07,1e-07,2e-05,1e-07,1e-07};
++field_tolerances={1e-07,1e-07,2e-05,1e-07,2e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: /issm/oecreview/Archive/15392-16133/ISSM-16093-16094.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16093-16094.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16093-16094.diff	(revision 16134)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/classes/clusters/discover.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 16093)
++++ ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 16094)
+@@ -12,7 +12,7 @@
+ 		 login='';
+ 		 numnodes=20;
+ 		 cpuspernode=8; 
+-		 port=1025;
++		 port=0;
+ 		 queue='general';
+ 		 time=12*60;
+ 		 processor='west';
+@@ -102,8 +102,8 @@
+ 			 fprintf(fid,'#PBS -q %s \n',cluster.queue);
+ 			 fprintf(fid,'#PBS -W group_list=s1010\n');
+ 			 fprintf(fid,'#PBS -m e\n');
+-			 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+-			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
++			 fprintf(fid,'#PBS -o %s.outlog \n',[cluster.executionpath '/' dirname '/' modelname]);
++			 fprintf(fid,'#PBS -e %s.errlog \n\n',[cluster.executionpath '/' dirname '/' modelname]);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+ 			 fprintf(fid,'module purge\n');
+ 			 fprintf(fid,'module load comp/intel-11.1.038\n');
Index: /issm/oecreview/Archive/15392-16133/ISSM-16094-16095.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16094-16095.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16094-16095.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.py	(revision 16094)
++++ ../trunk-jpl/src/m/plot/applyoptions.py	(revision 16095)
+@@ -1,6 +1,5 @@
+-from matplotlib.ticker import MaxNLocator
+-
+ try:
++	from matplotlib.ticker import MaxNLocator
+ 	import pylab as p
+ except ImportError:
+ 	print "could not import pylab, matplotlib has not been installed, no plotting capabilities enabled"
Index: /issm/oecreview/Archive/15392-16133/ISSM-16095-16096.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16095-16096.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16095-16096.diff	(revision 16134)
@@ -0,0 +1,303 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 16095)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 16096)
+@@ -2,6 +2,10 @@
+ 
+ AC_DEFUN([ISSM_OPTIONS],[
+ 
++	AC_MSG_NOTICE(============================================================================)
++	AC_MSG_NOTICE(=                      Checking ISSM specific options                      =)
++	AC_MSG_NOTICE(============================================================================)
++
+ 	dnl ISSM's internal options
+ 	dnl Debugging {{{
+ 	AC_ARG_ENABLE([debugging],                                        dnl feature
+@@ -9,16 +13,30 @@
+ 		[enable_debugging=$enableval],                                 dnl action if given
+ 		[enable_debugging=no])                                         dnl action if not given
+ 
++	AC_MSG_CHECKING(for debugging support)
+ 	if test "x$enable_debugging" = xyes; then
+ 		AC_DEFINE([_ISSM_DEBUG_],[1],[Macro to enable debugging in ISSM])
+ 	fi
++	AC_MSG_RESULT($enable_debugging)
+ 	dnl }}}
++	dnl Development{{{
++	AC_ARG_ENABLE([development],                                      dnl feature
++		AS_HELP_STRING([--enable-development],[turn development on]),  dnl help string
++		[enable_development=$enableval],                                 dnl action if given
++		[enable_development=yes])                                      dnl action if not given
++
++	AC_MSG_CHECKING(for development support)
++	AM_CONDITIONAL([DEVELOPMENT], [test x$enable_development = xyes])
++	AC_MSG_RESULT($enable_development)
++	 dnl }}}
+     dnl Shared build {{{
+     AC_ARG_ENABLE([sharedlibs],                                                dnl feature
+         AS_HELP_STRING([--enable-sharedlibs], [produce libISSM.so.0]),         dnl help string
+         [enable_sharedlibs=$enableval],                                        dnl action if given
+         [enable_sharedlibs=no])                                                dnl action if not given
++	 AC_MSG_CHECKING(for shared library build)
+     AM_CONDITIONAL([SHAREDLIBS], [test x$enable_sharedlibs = xyes])
++	 AC_MSG_RESULT($enable_sharedlibs)
+     dnl }}}
+     dnl Version{{{
+     AC_ARG_ENABLE([version],                                   dnl feature
+Index: ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh	(revision 16095)
++++ ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh	(revision 16096)
+@@ -2,23 +2,23 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install valgrind-3.8.0
++rm -rf install valgrind-3.8.1
+ mkdir install
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.0.tar.bz2' 'valgrind-3.8.0.tar.bz2'
++#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.1.tar.bz2' 'valgrind-3.8.1.tar.bz2'
+ 
+ #Untar 
+-tar -jxvf  valgrind-3.8.0.tar.bz2
++tar -jxvf  valgrind-3.8.1.tar.bz2
+ 
+ #Move valgrind into install directory
+-mv valgrind-3.8.0/* install
+-rm -rf valgrind-3.8.0
++mv valgrind-3.8.1/* install
++rm -rf valgrind-3.8.1
+ 
+ #configure
+ cd install
+ ./configure  --prefix="$ISSM_DIR/externalpackages/valgrind/install" --enable-only64bit
+ 
+ #Compile valgrind
+-make  -j 4
++make  -j 8
+ make install
+Index: ../trunk-jpl/externalpackages/valgrind/issm.supp
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/issm.supp	(revision 16095)
++++ ../trunk-jpl/externalpackages/valgrind/issm.supp	(revision 16096)
+@@ -2,7 +2,7 @@
+ # See: http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress
+ #
+ # to add errors:
+-#   1. in m/public/queue/ClusterScript.m,
++#   1. in m/classes/clusters/generic.m,
+ #      add: --gen-suppressions=all
+ #   2. in the errlog, copy and paste the suppression log
+ #      in this file.
+Index: ../trunk-jpl/externalpackages/vim/addons/vimrc
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 16095)
++++ ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 16096)
+@@ -154,6 +154,8 @@
+ set cindent
+ " and here some nice options for cindenting
+ set cinoptions={.5s,+.5s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 
++" pound sign identation
++inoremap # X<c-h>#
+ " ----------------------------------------------------------------------}}}
+ " TEX special{{{
+ " ----------------------------------------------------------------------
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 16095)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 16096)
+@@ -2,51 +2,106 @@
+ #
+ #find . -type d -exec ls -d {} \;
+ 
++bin_SCRIPTS = 
+ if WRAPPERS
+-bin_SCRIPTS= ./qmu/*.m \
+-				 ./qmu/setupdesign/*.m \
+-				 ./qmu/plot/*.m \
+-				 ./qmu/examples/*.m \
+-				 ./kml/*.m \
+-				 ./enum/*.m \
+-				 ./classes/*.m \
+-				 ./classes/qmu/*.m \
+-				 ./classes/qmu/@dakota_method/*.m \
+-				 ./classes/clusters/*.m \
+-				 ./classes/model/*.m \
+-				 ./consistency/*.m \
+-				 ./array/*.m \
+-				 ./boundaryconditions/*.m \
+-				 ./exp/*.m \
+-				 ./exp/operation/*.m \
+-				 ./geometry/*.m \
+-				 ./interp/*.m \
+-				 ./coordsystems/*.m \
+-				 ./mech/*.m \
+-				 ./mesh/*.m \
+-				 ./mesh/planet/*.m \
+-				 ./mesh/rifts/*.m \
+-				 ./miscellaneous/*.m \
+-				 ./os/*.m \
+-				 ./plot/*.m \
+-				 ./plot/colormaps/*.m \
+-				 ./string/*.m \
+-				 ./contrib/massbalance/*.m \
+-				 ./contrib/ecco/*.m \
+-				 ./contrib/hydrology/*.m \
+-				 ./contrib/hack/*.m \
+-				 ./contrib/gslib/*.m \
+-				 ./contrib/uci/*.m \
+-				 ./contrib/oasis/*.m \
+-				 ./contrib/bamg/*.m \
+-				 ./extrusion/*.m \
+-				 ./inversions/*.m \
+-				 ./io/*.m \
+-				 ./parameterization/*.m \
+-				 ./partition/*.m \
+-				 ./print/*.m \
+-				 ./regional/*.m \
+-				 ./solve/*.m \
+-				 ./solvers/*.m \
+-				 ./materials/*.m
++if MATLAB
++if !DEVELOPMENT
++bin_SCRIPTS += ./qmu/*.m \
++					 ./qmu/setupdesign/*.m \
++					 ./qmu/plot/*.m \
++					 ./qmu/examples/*.m \
++					 ./kml/*.m \
++					 ./enum/*.m \
++					 ./classes/*.m \
++					 ./classes/qmu/*.m \
++					 ./classes/qmu/@dakota_method/*.m \
++					 ./classes/clusters/*.m \
++					 ./classes/model/*.m \
++					 ./consistency/*.m \
++					 ./array/*.m \
++					 ./boundaryconditions/*.m \
++					 ./exp/*.m \
++					 ./exp/operation/*.m \
++					 ./geometry/*.m \
++					 ./interp/*.m \
++					 ./coordsystems/*.m \
++					 ./mech/*.m \
++					 ./mesh/*.m \
++					 ./mesh/planet/*.m \
++					 ./mesh/rifts/*.m \
++					 ./miscellaneous/*.m \
++					 ./os/*.m \
++					 ./plot/*.m \
++					 ./plot/colormaps/*.m \
++					 ./string/*.m \
++					 ./contrib/massbalance/*.m \
++					 ./contrib/ecco/*.m \
++					 ./contrib/hydrology/*.m \
++					 ./contrib/hack/*.m \
++					 ./contrib/gslib/*.m \
++					 ./contrib/uci/*.m \
++					 ./contrib/oasis/*.m \
++					 ./contrib/bamg/*.m \
++					 ./extrusion/*.m \
++					 ./inversions/*.m \
++					 ./io/*.m \
++					 ./parameterization/*.m \
++					 ./partition/*.m \
++					 ./print/*.m \
++					 ./regional/*.m \
++					 ./solve/*.m \
++					 ./solvers/*.m \
++					 ./materials/*.m
+ endif
++endif
++if PYTHON
++if !DEVELOPMENT
++bin_SCRIPTS += ./qmu/*.py \
++					 ./qmu/setupdesign/*.py \
++					 ./qmu/plot/*.py \
++					 ./qmu/examples/*.py \
++					 ./kml/*.py \
++					 ./enum/*.py \
++					 ./classes/*.py \
++					 ./classes/qmu/*.py \
++					 ./classes/qmu/@dakota_method/*.py \
++					 ./classes/clusters/*.py \
++					 ./classes/model/*.py \
++					 ./consistency/*.py \
++					 ./array/*.py \
++					 ./boundaryconditions/*.py \
++					 ./exp/*.py \
++					 ./exp/operation/*.py \
++					 ./geometry/*.py \
++					 ./interp/*.py \
++					 ./coordsystems/*.py \
++					 ./mech/*.py \
++					 ./mesh/*.py \
++					 ./mesh/planet/*.py \
++					 ./mesh/rifts/*.py \
++					 ./miscellaneous/*.py \
++					 ./os/*.py \
++					 ./plot/*.py \
++					 ./plot/colormaps/*.py \
++					 ./string/*.py \
++					 ./contrib/massbalance/*.py \
++					 ./contrib/ecco/*.py \
++					 ./contrib/hydrology/*.py \
++					 ./contrib/hack/*.py \
++					 ./contrib/gslib/*.py \
++					 ./contrib/uci/*.py \
++					 ./contrib/oasis/*.py \
++					 ./contrib/bamg/*.py \
++					 ./extrusion/*.py \
++					 ./inversions/*.py \
++					 ./io/*.py \
++					 ./parameterization/*.py \
++					 ./partition/*.py \
++					 ./print/*.py \
++					 ./regional/*.py \
++					 ./solve/*.py \
++					 ./solvers/*.py \
++					 ./materials/*.py
++endif
++endif
++endif
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 16095)
++++ ../trunk-jpl/configure.ac	(revision 16096)
+@@ -32,15 +32,17 @@
+ ISSM_OPTIONS
+ 
+ #List all Makefiles
+-AC_CONFIG_FILES([Makefile
+-			src/Makefile
+-			src/c/Makefile 
+-			src/wrappers/Makefile
+-			src/wrappers/python/Makefile
+-			src/wrappers/matlab/Makefile
+-			src/mobile/Makefile
+-			src/mobile/native/Makefile
+-			src/m/Makefile])
++AC_CONFIG_FILES([
++					  Makefile
++					  src/Makefile
++					  src/c/Makefile 
++					  src/wrappers/Makefile
++					  src/wrappers/python/Makefile
++					  src/wrappers/matlab/Makefile
++					  src/mobile/Makefile
++					  src/mobile/native/Makefile
++					  src/m/Makefile
++					  ])
+ 
+ #End of configure.ac
+ AC_OUTPUT
+Index: ../trunk-jpl/Makefile.am
+===================================================================
+--- ../trunk-jpl/Makefile.am	(revision 16095)
++++ ../trunk-jpl/Makefile.am	(revision 16096)
+@@ -3,4 +3,3 @@
+ bin_SCRIPTS=startup.m README.rtf
+ 
+ ACLOCAL_AMFLAGS = -I m4
+-
Index: /issm/oecreview/Archive/15392-16133/ISSM-16096-16097.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16096-16097.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16096-16097.diff	(revision 16134)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/src/m/plot/plot_mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 16096)
++++ ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 16097)
+@@ -27,4 +27,5 @@
+ 	
+ 	#apply options
+ 	options.addfielddefault('title','Mesh')
++	options.addfielddefault('colorbar','off')
+ 	applyoptions(md,[],options)
Index: /issm/oecreview/Archive/15392-16133/ISSM-16097-16098.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16097-16098.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16097-16098.diff	(revision 16134)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/src/m/exp/expcoarsen.py
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcoarsen.py	(revision 0)
++++ ../trunk-jpl/src/m/exp/expcoarsen.py	(revision 16098)
+@@ -0,0 +1,79 @@
++import os.path
++import numpy as npy
++from collections import OrderedDict
++from MatlabFuncs import *
++from expread import expread
++from expwrite import expwrite
++
++def expcoarsen(newfile,oldfile,resolution):
++	""" 
++	EXPCOARSEN - coarsen an exp contour
++
++	This routine read an Argus file and remove points with respect to
++	the resolution (in meters) given in input. 
++
++	Usage:
++	  expcoarsen(newfile,oldfile,resolution)
++
++	Example:
++	   expcoarsen('DomainOutline.exp','Antarctica.exp',4000)
++	""" 
++
++	#Some checks
++	if not os.path.exists(oldfile):
++		raise OSError("expcoarsen error message: file '%s' not found!" % oldfile)
++	if os.path.exists(newfile):
++		choice=raw_input('A file ' + newfile + ' already exists, do you want to modify it? (y/n)')
++		if choice not in 'y': 
++			print('no modification done ... exiting')
++			return 0
++
++	#Get exp oldfile
++	contours=expread(oldfile)
++	newcontours=[]
++
++	for contour in  contours:
++		
++		numpoints=npy.size(contour['x'])
++
++		j=0
++		x=contour['x']
++		y=contour['y']
++
++		#stop if we have reached end of profile (always keep the last point)
++		while j<numpoints-1:
++
++			#see whether we keep this point or not
++			distance=npy.sqrt((x[j]-x[j+1])**2+(y[j]-y[j+1])**2)
++			print j,distance,numpoints
++			if distance<resolution and j<numpoints-2:   #do not remove last point
++				x=npy.delete(x,j+1,0)
++				y=npy.delete(y,j+1,0)
++				numpoints=numpoints-1
++			else:
++				division=int(npy.floor(distance/resolution)+1)
++				if division>=2:
++					xi=npy.linspace(x[j],x[j+1],division)
++					yi=npy.linspace(y[j],y[j+1],division)
++					
++					x=npy.hstack((x[0:j+1],xi[1:-1],x[j+1:]))
++					y=npy.hstack((y[0:j+1],yi[1:-1],y[j+1:]))
++
++					#update current point
++					j=j+1+division-2
++					numpoints=numpoints+division-2
++				else:
++					#update current point
++					j=j+1
++		
++		if npy.size(x)>1:
++			#keep the (x,y) contour arond
++			newcontour=OrderedDict()
++			newcontour['nods']=npy.size(x)
++			newcontour['density']=contour['density']
++			newcontour['x']=x
++			newcontour['y']=y
++			newcontours.append(newcontour)
++
++	#write output
++	expwrite(newcontours,newfile)
Index: /issm/oecreview/Archive/15392-16133/ISSM-16098-16099.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16098-16099.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16098-16099.diff	(revision 16134)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/classes/organizer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.py	(revision 16098)
++++ ../trunk-jpl/src/m/classes/organizer.py	(revision 16099)
+@@ -95,7 +95,7 @@
+ 		#Get model path
+ 		if not isinstance(string,(str,unicode)):
+ 			raise TypeError("argument provided is not a string")
+-		path=os.path.join(self.repository,self.prefix+string)
++		path=os.path.join(self.repository,self.prefix+'.step#'+string+'.db')
+ 
+ 		#figure out if the model is there, otherwise, we have to use the default path supplied by user.
+ 		if os.path.exists(path):
+@@ -156,7 +156,7 @@
+ 		if self._currentstep>len(self.steps):
+ 			raise RuntimeError("Cannot save model because organizer (org) is not up to date!")
+ 
+-		name=os.path.join(self.repository,self.prefix+self.steps[self._currentstep-1]['string'])
++		name=os.path.join(self.repository,self.prefix+'.step#'+self.steps[self._currentstep-1]['string'])
+ 		print "saving model as: '%s'" % name
+ 
+ 		#check that md is a model
Index: /issm/oecreview/Archive/15392-16133/ISSM-16099-16100.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16099-16100.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16099-16100.diff	(revision 16134)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/src/m/classes/organizer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.py	(revision 16099)
++++ ../trunk-jpl/src/m/classes/organizer.py	(revision 16100)
+@@ -27,6 +27,7 @@
+ 		self._currentstep  =0
+ 		self.repository    ='./'
+ 		self.prefix        ='model.'
++		self.extension        ='' #default extension of python to save models.
+ 		self.trunkprefix   =''
+ 		self.steps         =[]
+ 		self.requestedsteps=[0]
+@@ -52,6 +53,9 @@
+ 
+ 		#Get steps
+ 		self.requestedsteps=options.getfieldvalue('steps',[0])
++		
++		#Get extension
++		self.extension=options.getfieldvalue('extension','')
+ 
+ 		#Get trunk prefix (only if provided by user)
+ 		if options.exist('trunkprefix'):
+@@ -67,6 +71,7 @@
+ 
+ 		s+="%s\n" % "   Repository: '%s'" % self.repository
+ 		s+="%s\n" % "   Prefix:     '%s'" % self.prefix
++		s+="%s\n" % "   Extension:     '%s'" % self.extension
+ 		if not self.steps:
+ 			s+="%s\n" % "   no step"
+ 		else:
+@@ -95,7 +100,7 @@
+ 		#Get model path
+ 		if not isinstance(string,(str,unicode)):
+ 			raise TypeError("argument provided is not a string")
+-		path=os.path.join(self.repository,self.prefix+'.step#'+string+'.db')
++		path=os.path.join(self.repository,self.prefix+'.step#'+string+'.python'+self.extension)
+ 
+ 		#figure out if the model is there, otherwise, we have to use the default path supplied by user.
+ 		if os.path.exists(path):
+@@ -104,7 +109,7 @@
+ 
+ 		#If we are here, the model has not been found. Try trunk prefix if provided
+ 		if self.trunkprefix:
+-			path2=os.path.join(self.repository,self.trunkprefix+string)
++			path2=os.path.join(self.repository,self.trunkprefix+string+self.extension)
+ 			if not os.path.exists(path2):
+ 				raise IOError("Could find neither '%s' nor '%s'" % (path,path2))
+ 			else:
+@@ -156,7 +161,7 @@
+ 		if self._currentstep>len(self.steps):
+ 			raise RuntimeError("Cannot save model because organizer (org) is not up to date!")
+ 
+-		name=os.path.join(self.repository,self.prefix+'.step#'+self.steps[self._currentstep-1]['string'])
++		name=os.path.join(self.repository,self.prefix+'.step#'+self.steps[self._currentstep-1]['string']+'.python')
+ 		print "saving model as: '%s'" % name
+ 
+ 		#check that md is a model
Index: /issm/oecreview/Archive/15392-16133/ISSM-16100-16101.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16100-16101.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16100-16101.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16100)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16101)
+@@ -54,6 +54,7 @@
+ 		/*Coordinate system provided, convert to coord_system matrix*/
+ 		_assert_(iomodel->Data(StressbalanceReferentialEnum)); 
+ 		XZvectorsToCoordinateSystem(&this->coord_system[0][0],&iomodel->Data(StressbalanceReferentialEnum)[io_index*6]);
++		_assert_(sqrt( coord_system[0][0]*coord_system[0][0] + coord_system[1][0]*coord_system[1][0]) >1.e-4);
+ 
+ 		if(iomodel->dim==3){
+ 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
Index: /issm/oecreview/Archive/15392-16133/ISSM-16101-16102.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16101-16102.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16101-16102.diff	(revision 16134)
@@ -0,0 +1,156 @@
+Index: ../trunk-jpl/externalpackages/cython
+===================================================================
+--- ../trunk-jpl/externalpackages/cython	(revision 16101)
++++ ../trunk-jpl/externalpackages/cython	(revision 16102)
+
+Property changes on: ../trunk-jpl/externalpackages/cython
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++*.tar.gz
++Cython*
+Index: ../trunk-jpl/externalpackages/matplotlib/install-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/matplotlib/install-macosx64.sh	(revision 16101)
++++ ../trunk-jpl/externalpackages/matplotlib/install-macosx64.sh	(revision 16102)
+@@ -1,6 +1,8 @@
+ #/bin/bash
+ set -eu
+ 
++rm -rf src deps 
++
+ export C_INCLUDE_PATH="$C_INCLUDE_PATH:/usr/include/c++/4.2.1"
+ export GIT_SSL_NO_VERIFY=true 
+ export CC="gcc -fPIC -arch x86_64 -I/usr/include/c++/4.2.1"
+@@ -22,6 +24,9 @@
+ #sudo make -f make.osx PREFIX=$ISSM_DIR/externalpackages/matplotlib/deps PYVERSION=$pythonversion mpl_install_std
+ #python -c "import matplotlib; print 'Installed matplotlib', matplotlib.__version__, matplotlib.__file__"
+ 
++#comments: try exporting this first before calling python setup.py build
++CFLAGS=-mmacosx-version-min=10.7 
++
+ #to be tried:  first get freetype and zlib and libpng installed in sudo mode
+ python setup.py build
+ python setup.py install
+Index: ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 16101)
++++ ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 16102)
+@@ -74,8 +74,8 @@
+ 
+ 		double *sumpredictions =xNew<double>(n_interp);
+ 		double *sumerror       =xNew<double>(n_interp);
+-		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+-		ISSM_MPI_Allreduce(error,sumerror,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(error,sumerror,n_interp,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(error); error=sumerror;
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+ 	}
+@@ -89,7 +89,7 @@
+ 		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+ 		double *sumpredictions =xNew<double>(n_interp);
+-		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+ 	}
+ 	else if(strcmp(output,"nearestneighbor")==0){
+@@ -102,7 +102,7 @@
+ 		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+ 		double *sumpredictions =xNew<double>(n_interp);
+-		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+ 	}
+ 	else if(strcmp(output,"idw")==0){
+@@ -117,7 +117,7 @@
+ 		_printf0_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%  \n");
+ 
+ 		double *sumpredictions =xNew<double>(n_interp);
+-		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++		ISSM_MPI_Allreduce(predictions,sumpredictions,n_interp,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 16101)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 16102)
+@@ -69,11 +69,11 @@
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+ 			ISSM_MPI_Send(buffer,3,ISSM_MPI_INT,0,1,comm);   
+-			if (range)ISSM_MPI_Send(local_matrix,N*range,ISSM_MPI_DOUBLE,0,1,comm); 
++			if (range)ISSM_MPI_Send(local_matrix,N*range,ISSM_MPI_PDOUBLE,0,1,comm); 
+ 		}
+ 		if (my_rank==0){
+ 			ISSM_MPI_Recv(buffer,3,ISSM_MPI_INT,i,1,comm,&status); 
+-			if (buffer[2])ISSM_MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],ISSM_MPI_DOUBLE,i,1,comm,&status);
++			if (buffer[2])ISSM_MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],ISSM_MPI_PDOUBLE,i,1,comm,&status);
+ 		}
+ 	} 
+ 	if (my_rank==0){ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 16101)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 16102)
+@@ -69,11 +69,11 @@
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+ 			ISSM_MPI_Send(buffer,3,ISSM_MPI_INT,0,1,comm);  
+-			if (range)ISSM_MPI_Send(local_vector,range,ISSM_MPI_DOUBLE,0,1,comm); 
++			if (range)ISSM_MPI_Send(local_vector,range,ISSM_MPI_PDOUBLE,0,1,comm); 
+ 		}
+ 		if (my_rank==0){
+ 			ISSM_MPI_Recv(buffer,3,ISSM_MPI_INT,i,1,comm,&status); 
+-			if (buffer[2])ISSM_MPI_Recv(gathered_vector+buffer[1],buffer[2],ISSM_MPI_DOUBLE,i,1,comm,&status);
++			if (buffer[2])ISSM_MPI_Recv(gathered_vector+buffer[1],buffer[2],ISSM_MPI_PDOUBLE,i,1,comm,&status);
+ 		}
+ 	}
+ 
+@@ -83,7 +83,7 @@
+ 	}
+ 
+ 	/*Now, broadcast gathered_vector from node 0 to other nodes: */
+-	ISSM_MPI_Bcast(gathered_vector,vector_size,ISSM_MPI_DOUBLE,0,comm);
++	ISSM_MPI_Bcast(gathered_vector,vector_size,ISSM_MPI_PDOUBLE,0,comm);
+ 
+ 	/*Assign output pointers: */
+ 	*pgathered_vector=gathered_vector;
+Index: ../trunk-jpl/src/c/classes/Elements/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16101)
++++ ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16102)
+@@ -193,7 +193,7 @@
+ 			Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(0));
+ 			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+ 		}
+-		ISSM_MPI_Bcast(&numberofresults,1,ISSM_MPI_DOUBLE,minrank,IssmComm::GetComm());
++		ISSM_MPI_Bcast(&numberofresults,1,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+ 
+ 		/*Get out if there is no results. Otherwise broadcast info*/
+ 		if(!numberofresults) return;
+Index: ../trunk-jpl/src/m/exp/expcoarsen.py
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcoarsen.py	(revision 16101)
++++ ../trunk-jpl/src/m/exp/expcoarsen.py	(revision 16102)
+@@ -45,7 +45,6 @@
+ 
+ 			#see whether we keep this point or not
+ 			distance=npy.sqrt((x[j]-x[j+1])**2+(y[j]-y[j+1])**2)
+-			print j,distance,numpoints
+ 			if distance<resolution and j<numpoints-2:   #do not remove last point
+ 				x=npy.delete(x,j+1,0)
+ 				y=npy.delete(y,j+1,0)
+Index: ../trunk-jpl/startup.py
+===================================================================
+--- ../trunk-jpl/startup.py	(revision 16101)
++++ ../trunk-jpl/startup.py	(revision 16102)
+@@ -30,4 +30,4 @@
+ #Manual imports for commonly used functions
+ from plotmodel import plotmodel
+ 
+-#print("\n  To get started with ISSM, type issmdoc at the command prompt.\n\n")
++print("\n  ISSM python modules loaded properly. You are now ready to start using ISSM.\n\n");
Index: /issm/oecreview/Archive/15392-16133/ISSM-16102-16103.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16102-16103.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16102-16103.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 16102)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 16103)
+@@ -23,7 +23,7 @@
+ 	AC_ARG_ENABLE([development],                                      dnl feature
+ 		AS_HELP_STRING([--enable-development],[turn development on]),  dnl help string
+ 		[enable_development=$enableval],                                 dnl action if given
+-		[enable_development=yes])                                      dnl action if not given
++		[enable_development=no])                                      dnl action if not given
+ 
+ 	AC_MSG_CHECKING(for development support)
+ 	AM_CONDITIONAL([DEVELOPMENT], [test x$enable_development = xyes])
Index: /issm/oecreview/Archive/15392-16133/ISSM-16103-16104.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16103-16104.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16103-16104.diff	(revision 16134)
@@ -0,0 +1,125 @@
+Index: ../trunk-jpl/externalpackages/valgrind/install-win32.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-win32.sh	(revision 16103)
++++ ../trunk-jpl/externalpackages/valgrind/install-win32.sh	(revision 16104)
+@@ -2,18 +2,18 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install valgrind-3.8.0
++rm -rf install valgrind-3.8.1
+ mkdir install
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.0.tar.bz2' 'valgrind-3.8.0.tar.bz2'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.1.tar.bz2' 'valgrind-3.8.1.tar.bz2'
+ 
+ #Untar 
+-tar -jxvf  valgrind-3.8.0.tar.bz2
++tar -jxvf  valgrind-3.8.1.tar.bz2
+ 
+ #Move valgrind into install directory
+-mv valgrind-3.8.0/* install
+-rm -rf valgrind-3.8.0
++mv valgrind-3.8.1/* install
++rm -rf valgrind-3.8.1
+ 
+ #configure
+ cd install
+Index: ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh	(revision 16103)
++++ ../trunk-jpl/externalpackages/valgrind/install-macosx64.sh	(revision 16104)
+@@ -6,7 +6,7 @@
+ mkdir install
+ 
+ #Download from ISSM server
+-#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.1.tar.bz2' 'valgrind-3.8.1.tar.bz2'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.1.tar.bz2' 'valgrind-3.8.1.tar.bz2'
+ 
+ #Untar 
+ tar -jxvf  valgrind-3.8.1.tar.bz2
+Index: ../trunk-jpl/externalpackages/valgrind/install-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-linux64.sh	(revision 16103)
++++ ../trunk-jpl/externalpackages/valgrind/install-linux64.sh	(revision 16104)
+@@ -2,18 +2,18 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install valgrind-3.8.0
++rm -rf install valgrind-3.8.1
+ mkdir install
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.0.tar.bz2' 'valgrind-3.8.0.tar.bz2'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.1.tar.bz2' 'valgrind-3.8.1.tar.bz2'
+ 
+ #Untar 
+-tar -jxvf  valgrind-3.8.0.tar.bz2
++tar -jxvf  valgrind-3.8.1.tar.bz2
+ 
+ #Move valgrind into install directory
+-mv valgrind-3.8.0/* install
+-rm -rf valgrind-3.8.0
++mv valgrind-3.8.1/* install
++rm -rf valgrind-3.8.1
+ 
+ #configure
+ cd install
+Index: ../trunk-jpl/externalpackages/valgrind/install-altix64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-altix64.sh	(revision 16103)
++++ ../trunk-jpl/externalpackages/valgrind/install-altix64.sh	(revision 16104)
+@@ -2,18 +2,18 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install valgrind-3.8.0
++rm -rf install valgrind-3.8.1
+ mkdir install
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.0.tar.bz2' 'valgrind-3.8.0.tar.bz2'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.1.tar.bz2' 'valgrind-3.8.1.tar.bz2'
+ 
+ #Untar 
+-tar -jxvf  valgrind-3.8.0.tar.bz2
++tar -jxvf  valgrind-3.8.1.tar.bz2
+ 
+ #Move valgrind into install directory
+-mv valgrind-3.8.0/* install
+-rm -rf valgrind-3.8.0
++mv valgrind-3.8.1/* install
++rm -rf valgrind-3.8.1
+ 
+ #configure
+ cd install
+Index: ../trunk-jpl/externalpackages/valgrind/install-macosx32.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/valgrind/install-macosx32.sh	(revision 16103)
++++ ../trunk-jpl/externalpackages/valgrind/install-macosx32.sh	(revision 16104)
+@@ -2,18 +2,18 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install valgrind-3.8.0
++rm -rf install valgrind-3.8.1
+ mkdir install
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.0.tar.bz2' 'valgrind-3.8.0.tar.bz2'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/valgrind-3.8.1.tar.bz2' 'valgrind-3.8.1.tar.bz2'
+ 
+ #Untar 
+-tar -jxvf  valgrind-3.8.0.tar.bz2
++tar -jxvf  valgrind-3.8.1.tar.bz2
+ 
+ #Move valgrind into install directory
+-mv valgrind-3.8.0/* install
+-rm -rf valgrind-3.8.0
++mv valgrind-3.8.1/* install
++rm -rf valgrind-3.8.1
+ 
+ #configure
+ cd install
Index: /issm/oecreview/Archive/15392-16133/ISSM-16104-16105.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16104-16105.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16104-16105.diff	(revision 16134)
@@ -0,0 +1,51 @@
+Index: ../trunk-jpl/src/m/geometry/slope.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/slope.py	(revision 0)
++++ ../trunk-jpl/src/m/geometry/slope.py	(revision 16105)
+@@ -0,0 +1,46 @@
++import numpy as npy
++from GetNodalFunctionsCoeff import  GetNodalFunctionsCoeff
++
++def slope(md,*args):
++	"""
++	SLOPE - compute the surface slope
++
++	Usage:
++		sx,sy,s=slope(md)
++		sx,sy,s=slope(md,md.results.TransientSolution(1).Surface)
++	"""
++
++	#load some variables (it is much faster if the variables are loaded from md once for all) 
++	if md.mesh.dimension==2:
++		numberofelements=md.mesh.numberofelements
++		numberofnodes=md.mesh.numberofvertices
++		index=md.mesh.elements
++		x=md.mesh.x ; y=md.mesh.y
++	else:
++		numberofelements=md.mesh.numberofelements2d
++		numberofnodes=md.mesh.numberofvertices2d
++		index=md.mesh.elements2d
++		x=md.mesh.x2d; y=md.mesh.y2d
++
++	if len(args)==0:
++		surf=md.geometry.surface
++	elif len(args)==1:
++		surf=args[0]
++	else:
++		raise RuntimeError("slope.py usage error")
++
++	#%compute nodal functions coefficients N(x,y)=alpha x + beta y + gamma
++	alpha,beta=GetNodalFunctionsCoeff(index,x,y)[0:2]
++
++	summation=npy.array([[1],[1],[1]])
++	sx=npy.dot(surf[index-1]*alpha,summation).reshape(-1,)
++	sy=npy.dot(surf[index-1]*beta,summation).reshape(-1,)
++
++	s=npy.sqrt(sx**2+sy**2)
++
++	if md.mesh.dimension==3:
++		sx=project3d(md,'vector',sx,'type','element')
++		sy=project3d(md,'vector',sy,'type','element')
++		s=npy.sqrt(sx**2+sy**2)
++
++	return (sx,sy,s)
Index: /issm/oecreview/Archive/15392-16133/ISSM-16105-16106.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16105-16106.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16105-16106.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/scripts/report.sh
+===================================================================
+--- ../trunk-jpl/scripts/report.sh	(revision 16105)
++++ ../trunk-jpl/scripts/report.sh	(revision 16106)
+@@ -42,7 +42,7 @@
+ CRASH_PYTHON=$(cat info.log | grep "python_crash:"   | awk '{print $2}')
+ 
+ #Did installation work?
+-if [ $(ls -1 $ISSM_DIR/bin | wc -l) -le 20 ]; then
++if [ $(ls -1 $ISSM_DIR/bin | wc -l) -le 1 ]; then
+ 	IS_INSTALL=0
+ else
+ 	IS_INSTALL=1
Index: /issm/oecreview/Archive/15392-16133/ISSM-16106-16107.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16106-16107.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16106-16107.diff	(revision 16134)
@@ -0,0 +1,172 @@
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 16106)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 16107)
+@@ -7,101 +7,76 @@
+ if MATLAB
+ if !DEVELOPMENT
+ bin_SCRIPTS += ./qmu/*.m \
+-					 ./qmu/setupdesign/*.m \
+-					 ./qmu/plot/*.m \
+-					 ./qmu/examples/*.m \
+-					 ./kml/*.m \
+-					 ./enum/*.m \
+-					 ./classes/*.m \
+-					 ./classes/qmu/*.m \
+-					 ./classes/qmu/@dakota_method/*.m \
+-					 ./classes/clusters/*.m \
+-					 ./classes/model/*.m \
+-					 ./consistency/*.m \
+-					 ./array/*.m \
+-					 ./boundaryconditions/*.m \
+-					 ./exp/*.m \
+-					 ./exp/operation/*.m \
+-					 ./geometry/*.m \
+-					 ./interp/*.m \
+-					 ./coordsystems/*.m \
+-					 ./mech/*.m \
+-					 ./mesh/*.m \
+-					 ./mesh/planet/*.m \
+-					 ./mesh/rifts/*.m \
+-					 ./miscellaneous/*.m \
+-					 ./os/*.m \
+-					 ./plot/*.m \
+-					 ./plot/colormaps/*.m \
+-					 ./string/*.m \
+-					 ./contrib/massbalance/*.m \
+-					 ./contrib/ecco/*.m \
+-					 ./contrib/hydrology/*.m \
+-					 ./contrib/hack/*.m \
+-					 ./contrib/gslib/*.m \
+-					 ./contrib/uci/*.m \
+-					 ./contrib/oasis/*.m \
+-					 ./contrib/bamg/*.m \
+-					 ./extrusion/*.m \
+-					 ./inversions/*.m \
+-					 ./io/*.m \
+-					 ./parameterization/*.m \
+-					 ./partition/*.m \
+-					 ./print/*.m \
+-					 ./regional/*.m \
+-					 ./solve/*.m \
+-					 ./solvers/*.m \
+-					 ./materials/*.m
++					./qmu/setupdesign/*.m \
++					./qmu/plot/*.m \
++					./qmu/examples/*.m \
++					./kml/*.m \
++					./enum/*.m \
++					./classes/*.m \
++					./classes/qmu/*.m \
++					./classes/qmu/@dakota_method/*.m \
++					./classes/clusters/*.m \
++					./classes/model/*.m \
++					./consistency/*.m \
++					./array/*.m \
++					./boundaryconditions/*.m \
++					./exp/*.m \
++					./exp/operation/*.m \
++					./geometry/*.m \
++					./interp/*.m \
++					./coordsystems/*.m \
++					./mech/*.m \
++					./mesh/*.m \
++					./mesh/planet/*.m \
++					./mesh/rifts/*.m \
++					./miscellaneous/*.m \
++					./os/*.m \
++					./plot/*.m \
++					./plot/colormaps/*.m \
++					./string/*.m \
++					./contrib/massbalance/*.m \
++					./contrib/ecco/*.m \
++					./contrib/hydrology/*.m \
++					./contrib/hack/*.m \
++					./contrib/gslib/*.m \
++					./contrib/uci/*.m \
++					./contrib/oasis/*.m \
++					./contrib/bamg/*.m \
++					./extrusion/*.m \
++					./inversions/*.m \
++					./io/*.m \
++					./parameterization/*.m \
++					./partition/*.m \
++					./print/*.m \
++					./regional/*.m \
++					./solve/*.m \
++					./solvers/*.m \
++					./materials/*.m
+ endif
+ endif
+ if PYTHON
+ if !DEVELOPMENT
+-bin_SCRIPTS += ./qmu/*.py \
+-					 ./qmu/setupdesign/*.py \
+-					 ./qmu/plot/*.py \
+-					 ./qmu/examples/*.py \
+-					 ./kml/*.py \
+-					 ./enum/*.py \
+-					 ./classes/*.py \
+-					 ./classes/qmu/*.py \
+-					 ./classes/qmu/@dakota_method/*.py \
+-					 ./classes/clusters/*.py \
+-					 ./classes/model/*.py \
+-					 ./consistency/*.py \
+-					 ./array/*.py \
+-					 ./boundaryconditions/*.py \
+-					 ./exp/*.py \
+-					 ./exp/operation/*.py \
+-					 ./geometry/*.py \
+-					 ./interp/*.py \
+-					 ./coordsystems/*.py \
+-					 ./mech/*.py \
+-					 ./mesh/*.py \
+-					 ./mesh/planet/*.py \
+-					 ./mesh/rifts/*.py \
+-					 ./miscellaneous/*.py \
+-					 ./os/*.py \
+-					 ./plot/*.py \
+-					 ./plot/colormaps/*.py \
+-					 ./string/*.py \
+-					 ./contrib/massbalance/*.py \
+-					 ./contrib/ecco/*.py \
+-					 ./contrib/hydrology/*.py \
+-					 ./contrib/hack/*.py \
+-					 ./contrib/gslib/*.py \
+-					 ./contrib/uci/*.py \
+-					 ./contrib/oasis/*.py \
+-					 ./contrib/bamg/*.py \
+-					 ./extrusion/*.py \
+-					 ./inversions/*.py \
+-					 ./io/*.py \
+-					 ./parameterization/*.py \
+-					 ./partition/*.py \
+-					 ./print/*.py \
+-					 ./regional/*.py \
+-					 ./solve/*.py \
+-					 ./solvers/*.py \
+-					 ./materials/*.py
++bin_SCRIPTS += ./enum/*.py \
++					./classes/*.py \
++					./classes/clusters/*.py \
++					./classes/model/*.py \
++					./consistency/*.py \
++					./boundaryconditions/*.py \
++					./exp/*.py \
++					./geometry/*.py \
++					./coordsystems/*.py \
++					./mech/*.py \
++					./mesh/*.py \
++					./mesh/rifts/*.py \
++					./miscellaneous/*.py \
++					./os/*.py \
++					./plot/*.py \
++					./extrusion/*.py \
++					./io/*.py \
++					./parameterization/*.py \
++					./solve/*.py \
++					./solvers/*.py \
++					./materials/*.py
+ endif
+ endif
+ endif
Index: /issm/oecreview/Archive/15392-16133/ISSM-16107-16108.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16107-16108.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16107-16108.diff	(revision 16134)
@@ -0,0 +1,123 @@
+Index: ../trunk-jpl/src/m/inversions/parametercontroldrag.py
+===================================================================
+--- ../trunk-jpl/src/m/inversions/parametercontroldrag.py	(revision 0)
++++ ../trunk-jpl/src/m/inversions/parametercontroldrag.py	(revision 16108)
+@@ -0,0 +1,118 @@
++def parametercontroldrag(md,*args):
++	"""
++	PARAMETERCONTROLDRAG - parameterization for control method on drag
++
++	It is possible to specify the number of steps, values for the
++	minimum and maximum values of the drag, the 
++	kind of cm_responses to use or the the optscal.
++
++	Usage:
++	   md=parametercontroldrag(md,varargin)
++
++	Example:
++	  md=parametercontroldrag(md)
++	  md=parametercontroldrag(md,'nsteps',20,'cm_responses',0)
++	  md=parametercontroldrag(md,'cm_min',1,'cm_max',150,'cm_jump',0.99,'maxiter',20)
++	  md=parametercontroldrag(md,eps_cm',10^-4,'optscal',[10^7 10^8])
++
++	See also PARAMETERCONTROLB
++	"""
++
++	#process options
++	options=pairoptions(*args)
++
++	#control type
++	md.inversion.control_parameters='FrictionCoefficient'
++
++	#weights
++	weights=options.getfieldvalue('weights',npy.ones(md.mesh.numberofvertices))
++	if npy.size(weights)!=md.mesh.numberofvertices:
++		md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices)
++	else:
++		md.inversion.cost_functions_coefficients=weights
++
++	#nsteps
++	nsteps=options.getfieldvalue('nsteps',100);
++	if (npy.size(nsteps)!=1) | (nsteps<=0) | (floor(nsteps)!=nsteps):
++		md.inversion.nsteps=100
++	else:
++		md.inversion.nsteps=nsteps
++
++	#cm_min
++	cm_min=options.getfieldvalue('cm_min',ones(md.mesh.numberofvertices))
++	if (npy.size(cm_min)==1):
++		md.inversion.min_parameters=cm_min*ones(md.mesh.numberofvertices)
++	elif (npy.size(cm_min)==md.mesh.numberofvertices):
++		md.inversion.min_parameters=cm_min
++	else:
++		md.inversion.min_parameters=cm_min;
++
++	#cm_max
++	cm_max=options.getfieldvalue('cm_max',250*ones(md.mesh.numberofvertices))
++	if (npy.size(cm_max)==1):
++		md.inversion.max_parameters=cm_max*ones(md.mesh.numberofvertices)
++	elif (npy.size(cm_max)==md.mesh.numberofvertices):
++		md.inversion.max_parameters=cm_max
++	else:
++		md.inversion.max_parameters=cm_max
++
++	#eps_cm
++	eps_cm=optoins.getfieldvalue('eps_cm',float('nan'))
++	if (npy.size(eps_cm)~=1 | eps_cm<0 ):
++		md.inversion.cost_function_threshold=float('nan')
++	else:
++		md.inversion.cost_function_threshold=eps_cm
++
++	#maxiter
++	maxiter=options.getfieldvalue('maxiter',10*ones(md.inversion.nsteps))
++	if (npy.any(maxiter<0) | npy.any(floor(maxiter)~=maxiter)):
++		md.inversion.maxiter_per_step=10*ones(md.inversion.nsteps)
++	else:
++		raise RuntimeError("not implemented yet, see below matlab lines")
++		#md.inversion.maxiter_per_step=repmat(maxiter(:),md.inversion.nsteps,1);
++		#md.inversion.maxiter_per_step(md.inversion.nsteps+1:end)=[];
++
++	#cm_jump
++	cm_jump=options.getfieldvalue('cm_jump',0.8*ones(md.inversion.nsteps))
++	if !npy.isreal(cm_jump):
++		md.inversion.step_threshold=0.8*ones(md.inversion.nsteps)
++	else:
++		raise RuntimeError("not implemented yet, see below matlab lines")
++		#md.inversion.step_threshold=repmat(cm_jump(:),md.inversion.nsteps,1);
++		#md.inversion.step_threshold(md.inversion.nsteps+1:end)=[];
++
++	#cm_responses
++	found=0;
++	if options.exist('cm_responses'):
++		cm_responses=options.getfieldvalue('cm_responses')
++		if ~any(~ismember(cm_responses,[101 105])):
++			md.inversion.cost_functions=repmat(cm_responses(:),md.inversion.nsteps,1);
++			md.inversion.cost_functions(md.inversion.nsteps+1:end)=[];
++			found=1;
++	if ~found
++		third=ceil(md.inversion.nsteps/3);
++		md.inversion.cost_functions=[...
++			103*ones(third,1);...
++			101*ones(third,1);...
++			repmat([101;101;103;101],third,1)...
++			];
++		md.inversion.cost_functions(md.inversion.nsteps+1:end)=[];
++	end
++
++	%optscal
++	found=0;
++	if exist(options,'optscal'),
++		optscal=getfieldvalue(options,'optscal');
++		if ~any(optscal<0),
++			md.inversion.gradient_scaling=repmat(optscal(:),md.inversion.nsteps,1);
++			md.inversion.gradient_scaling(md.inversion.nsteps+1:end)=[];
++			found=1;
++		end
++	end
++	if ~found
++		third=ceil(md.inversion.nsteps/3);
++		md.inversion.gradient_scaling=[50*ones(3,1);15*ones(third-3,1);10*ones(third,1);repmat([10;10;20;10],third,1)];
++		md.inversion.gradient_scaling(md.inversion.nsteps+1:end)=[];
++	end
++
++	return md
Index: /issm/oecreview/Archive/15392-16133/ISSM-16108-16109.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16108-16109.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16108-16109.diff	(revision 16134)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/m/classes/organizer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.py	(revision 16108)
++++ ../trunk-jpl/src/m/classes/organizer.py	(revision 16109)
+@@ -5,6 +5,7 @@
+ from loadmodel import *
+ from savevars import *
+ from model import model
++from whichdb import whichdb
+ 
+ class organizer(object):
+ 	"""
+@@ -27,7 +28,6 @@
+ 		self._currentstep  =0
+ 		self.repository    ='./'
+ 		self.prefix        ='model.'
+-		self.extension        ='' #default extension of python to save models.
+ 		self.trunkprefix   =''
+ 		self.steps         =[]
+ 		self.requestedsteps=[0]
+@@ -54,9 +54,6 @@
+ 		#Get steps
+ 		self.requestedsteps=options.getfieldvalue('steps',[0])
+ 		
+-		#Get extension
+-		self.extension=options.getfieldvalue('extension','')
+-
+ 		#Get trunk prefix (only if provided by user)
+ 		if options.exist('trunkprefix'):
+ 			trunkprefix=options.getfieldvalue('trunkprefix','')
+@@ -71,7 +68,6 @@
+ 
+ 		s+="%s\n" % "   Repository: '%s'" % self.repository
+ 		s+="%s\n" % "   Prefix:     '%s'" % self.prefix
+-		s+="%s\n" % "   Extension:     '%s'" % self.extension
+ 		if not self.steps:
+ 			s+="%s\n" % "   no step"
+ 		else:
+@@ -100,16 +96,16 @@
+ 		#Get model path
+ 		if not isinstance(string,(str,unicode)):
+ 			raise TypeError("argument provided is not a string")
+-		path=os.path.join(self.repository,self.prefix+'.step#'+string+'.python'+self.extension)
++		path=os.path.join(self.repository,self.prefix+'.step#'+string+'.python')
+ 
+ 		#figure out if the model is there, otherwise, we have to use the default path supplied by user.
+-		if os.path.exists(path):
++		if whichdb(path):
+ 			md=loadmodel(path)
+ 			return md
+ 
+ 		#If we are here, the model has not been found. Try trunk prefix if provided
+ 		if self.trunkprefix:
+-			path2=os.path.join(self.repository,self.trunkprefix+string+self.extension)
++			path2=os.path.join(self.repository,self.trunkprefix+string)
+ 			if not os.path.exists(path2):
+ 				raise IOError("Could find neither '%s' nor '%s'" % (path,path2))
+ 			else:
Index: /issm/oecreview/Archive/15392-16133/ISSM-16109-16110.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16109-16110.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16109-16110.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/clusters/cloud.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 16109)
++++ ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 16110)
+@@ -54,6 +54,7 @@
+ 			fprintf(fid,'#!/bin/bash\n');
+ 			if cluster.interactive
+ 				fprintf(fid,'source %s%s\n',cluster.codepath,'/../etc/environment.sh');
++				fprintf(fid,'cd %s\n',[cluster.executionpath '/' dirname]);
+ 				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s 2> %s.errlog > /dev/stdout | tee %s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+ 			else
+ 				fprintf(fid,'source %s%s\n',cluster.codepath,'/../etc/environment.sh');
Index: /issm/oecreview/Archive/15392-16133/ISSM-16110-16111.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16110-16111.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16110-16111.diff	(revision 16134)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/classes/clusters/cloud.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 16110)
++++ ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 16111)
+@@ -58,7 +58,9 @@
+ 				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s 2> %s.errlog > /dev/stdout | tee %s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+ 			else
+ 				fprintf(fid,'source %s%s\n',cluster.codepath,'/../etc/environment.sh');
+-				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
++				fprintf(fid,'cd %s\n',[cluster.executionpath '/' dirname]);
++				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s 2> %s.errlog > /dev/stdout | tee %s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
++				%fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
+ 			end
+ 		end
+ 		%}}}
+@@ -84,7 +86,7 @@
+ 			else
+ 				disp('launching solution sequence on remote cluster');
+ 				launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+-					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && source  ' modelname '.queue '];
++					' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && qsub  ' modelname '.queue '];
+ 			end
+ 			issmstssh(cluster.name,cluster.login,launchcommand);
+ 		end %}}}
Index: /issm/oecreview/Archive/15392-16133/ISSM-16111-16112.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16111-16112.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16111-16112.diff	(revision 16134)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/solve/waitonlock.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/waitonlock.m	(revision 16111)
++++ ../trunk-jpl/src/m/solve/waitonlock.m	(revision 16112)
+@@ -38,6 +38,9 @@
+ 	end
+ 	if port,
+ 		command = ['ssh -l ' login ' -p ' num2str(port) ' localhost "[ -f ' lockfilename ' ] && [ -f ' logfilename ' ]" 2>/dev/null'];
++	elseif isa(cluster,'cloud')
++		command = [' [ -f ' lockfilename ' ] && [ -f ' logfilename ' ] 2>/dev/null'];
++		command = [starcluster() ' sshmaster ' cluster.name ' --user ' cluster.login ' ''' command ''''];
+ 	else
+ 		command = ['ssh -l ' login ' ' cluster.name ' "[ -f ' lockfilename ' ] && [ -f ' logfilename ' ]" 2>/dev/null'];
+ 	end
Index: /issm/oecreview/Archive/15392-16133/ISSM-16112-16113.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16112-16113.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16112-16113.diff	(revision 16134)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/src/c/shared/MemOps/MemOps.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/MemOps/MemOps.cpp	(revision 0)
++++ ../trunk-jpl/src/c/shared/MemOps/MemOps.cpp	(revision 16113)
+@@ -0,0 +1,24 @@
++/*
++ * MemOps.cpp
++ *
++ *  Created on: Sep 10, 2013
++ *      Author: utke
++ */
++
++
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "MemOps.h"
++
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
++template <> adouble*  xNew(unsigned int size) {
++	ensureContiguousLocations(size);
++	adouble* aT_p=new adouble[size];
++	assert(aT_p);
++	return aT_p;
++}
++#endif
+Index: ../trunk-jpl/src/c/shared/MemOps/MemOps.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/MemOps/MemOps.h	(revision 16112)
++++ ../trunk-jpl/src/c/shared/MemOps/MemOps.h	(revision 16113)
+@@ -28,8 +28,7 @@
+ }/*}}}*/
+ template <class T> T** xNew(unsigned int dim1, unsigned int dim2) { /*{{{*/
+ #ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+-  T* buf=new T[dim1*dim2];
+-  assert(buf );
++  T* buf=xNew<T>(dim1*dim2);
+   T** aT_pp =new T*[dim1];
+   assert(aT_pp );
+   for (unsigned int i=0;i<dim1;++i) {
+@@ -142,4 +141,9 @@
+ };
+ /*}}}*/
+ 
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
++#include "../Numerics/types.h"
++template <> adouble*  xNew(unsigned int size);
+ #endif
++
++#endif
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16112)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16113)
+@@ -163,6 +163,7 @@
+ 					./classes/Profiler.cpp\
+ 					./shared/shared.h\
+ 					./shared/MemOps/MemOps.h\
++					./shared/MemOps/MemOps.cpp\
+ 					./shared/Matrix/matrix.h\
+ 					./shared/Matrix/MatrixUtils.cpp\
+ 					./shared/io/io.h\
Index: /issm/oecreview/Archive/15392-16133/ISSM-16113-16114.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16113-16114.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16113-16114.diff	(revision 16134)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16113)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16114)
+@@ -32,7 +32,9 @@
+ 	/*state variables: */
+ 	IssmDouble *axp = NULL;
+ 	double     *xp  = NULL;
++	int my_rank=IssmComm::GetRank();
+ 
++
+ 	/*AD mode on?: */
+ 	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+ 
+@@ -95,7 +97,7 @@
+ 				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 
+ 				/*call driver: */
+-				fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
++				fos_forward(my_rank,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
+ 
+ 				/*add to results*/
+ 				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
+@@ -161,7 +163,7 @@
+ 				theOutput=xNew<double>(num_dependents);
+ 
+ 				/*call driver: */
+-				fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
++				fov_forward(my_rank,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
+ 				/*Free resources: */
+ 				xDelete(theOutput);
+ 				xDelete(indepIndices);
+@@ -198,7 +200,7 @@
+ 				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
+ 
+ 				/*call driver: */
+-				fos_reverse(1,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
++				fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
+ 
+ 				/*add to results*/
+ 				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
+@@ -258,7 +260,7 @@
+ 				}
+ 
+ 				/*call driver: */
+-				fov_reverse(1,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
++				fov_reverse(my_rank,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
+ 
+ 				/*add to results: */
+ 				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*weightsTimesJac,weightNum*num_independents,1,1,0.0));
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16113)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16114)
+@@ -233,6 +233,8 @@
+ 	int  dummy;
+ 	bool keep=false;
+ 
++	int my_rank=IssmComm::GetRank();
++
+ 	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
+ 	this->independents=xNew<bool>(MaximumNumberOfDefinitionsEnum);
+ 	for(i=0;i<MaximumNumberOfDefinitionsEnum;i++) this->independents[i]=false;
+@@ -243,8 +245,8 @@
+ 		#ifdef _HAVE_ADOLC_
+ 		/*Start trace*/
+ 		this->FetchData(&keep,AutodiffKeepEnum);
+-		if(keep)trace_on(1,1);
+-		else    trace_on(1);
++		if(keep)trace_on(my_rank,1);
++		else    trace_on(my_rank);
+ 
+ 		/*build dataset made of independent objects:*/
+ 		this->independent_objects=new DataSet();
Index: /issm/oecreview/Archive/15392-16133/ISSM-16114-16115.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16114-16115.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16114-16115.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16114)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16115)
+@@ -23,8 +23,8 @@
+ 	/*diverse: */
+ 	int     i;
+ 	int     dummy;
+-	int     num_dependents;
+-	int     num_independents;
++	int     num_dependents=0;
++	int     num_independents=0;
+ 	bool    isautodiff       = false;
+ 	char   *driver           = NULL;
+ 	size_t  tape_stats[11];
+@@ -46,9 +46,11 @@
+ 			trace_off();
+ 
+ 			/*preliminary checks: */
+-			femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+-			if(!(num_dependents*num_independents)) return;
++			if (my_rank==0) {
++				femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++				femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
++				if(!(num_dependents*num_independents)) return;
++			}
+ 
+ 			if(VerboseAutodiff())_printf0_("   start ad core\n");
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16115-16116.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16115-16116.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16115-16116.diff	(revision 16134)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/classes/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 16115)
++++ ../trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 16116)
+@@ -105,11 +105,12 @@
+ 		/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
+ 		if(my_rank==0){
+ 			if(fread(&pscalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
++			
++			/*Now, before we even broadcast this to other nodes, declare the scalar  as an independent variable!: */
++			scalar<<=pscalar;
+ 		}
+ 
+-		/*Now, before we even broadcast this to other nodes, declare the scalar  as an independent variable!: */
+-		scalar<<=pscalar;
+-
++		
+ 		ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 		/*Ok, we are almost done. scalar is now an independent variable. We don't want this variable to be fetched again in the 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16116-16117.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16116-16117.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16116-16117.diff	(revision 16134)
@@ -0,0 +1,83 @@
+Index: ../trunk-jpl/src/m/dev/developmentpath.py
+===================================================================
+--- ../trunk-jpl/src/m/dev/developmentpath.py	(revision 0)
++++ ../trunk-jpl/src/m/dev/developmentpath.py	(revision 16117)
+@@ -0,0 +1,26 @@
++#!/usr/bin/env python
++
++import os,sys
++
++#Recover ISSM_DIR and USERNAME
++ISSM_DIR=os.getenv('ISSM_DIR')
++USERNAME =os.getenv('USER')
++if(ISSM_DIR==None):
++	raise NameError('"ISSM_DIR" environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!')
++
++#Go through src/m and append any directory that contains a *.py file to PATH 
++for root,dirs,files in os.walk(ISSM_DIR+ '/src/m'):
++	if '.svn' in dirs:
++		dirs.remove('.svn')
++	for file in files:
++		if file.find(".py") != -1:
++			if file.find(".pyc") == -1:
++				if root not in sys.path:
++					sys.path.append(root)
++				
++sys.path.append(ISSM_DIR + '/lib')
++
++#Manual imports for commonly used functions
++from plotmodel import plotmodel
++
++print("\n  ISSM development path correctly loaded\n\n")
+Index: ../trunk-jpl/src/m/dev/developmentpath.m
+===================================================================
+--- ../trunk-jpl/src/m/dev/developmentpath.m	(revision 0)
++++ ../trunk-jpl/src/m/dev/developmentpath.m	(revision 16117)
+@@ -0,0 +1,40 @@
++% clear the last warning to focus on the warnings of the ISSM path
++lastwarn(''); 
++
++%Recover ISSM_DIR , or if on a Windows machine, ISSM_DIR_WIN
++if ~ispc,
++	ISSM_DIR=getenv('ISSM_DIR');
++else
++	ISSM_DIR=getenv('ISSM_DIR_WIN');
++end
++if (isempty(ISSM_DIR)),
++	error('''ISSM_DIR'' environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!');
++end
++
++%Now add all issm code paths necessary to run issm smoothly. 
++%We capture the error output, so that we can warn the user to update 
++%the variable ISSM_DIR in this file, in case it is not correctly setup. 
++
++%ISSM path
++addpath([ISSM_DIR '/src/m/os/']); %load recursivepath
++addpath([ISSM_DIR '/lib']);       %load mex
++addpath(recursivepath([ISSM_DIR '/src/m']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/scotch']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/canos']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/kml']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/export_fig']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/googleearthtoolbox']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/howatmask']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/dem']));
++clear ISSM_DIR;
++
++%Check on any warning messages that might indicate that the paths were not correct. 
++if ~isempty(lastwarn),
++	fprintf('\n  Error trying to setup ''ISSM'' code paths. Try and update the ISSM_DIR variable in your .cshrc or .bashrc!\n');
++	fprintf('  ''ISSM'' will not  work at all until this is resolved\n\n');
++else
++	fprintf('\n  ISSM development path correctly loaded\n\n');
++end
++
++%disable matlab bell!
++beep off;
+
+Property changes on: ../trunk-jpl/src/m/dev/developmentpath.m
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-16117-16118.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16117-16118.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16117-16118.diff	(revision 16134)
@@ -0,0 +1,55 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16117)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16118)
+@@ -186,12 +186,11 @@
+ 
+ 				/*retrieve direction index: */
+ 				femmodel->parameters->FindParam(&aDepIndex,AutodiffFosReverseIndexEnum);
+-
+-				if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
+-
+ 				aWeightVector=xNewZeroInit<double>(num_dependents);
+-				aWeightVector[aDepIndex]=1.0;
+-
++				if (my_rank==0) {
++					if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
++					aWeightVector[aDepIndex]=1.0;
++				}
+ 				weightVectorTimesJac=xNew<double>(num_independents);
+ 
+ 				/*set the forward method function pointer: */
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16117)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16118)
+@@ -816,6 +816,7 @@
+ 	int         num_dependents;
+ 	IssmPDouble *dependents;
+ 	DataSet*    dependent_objects=NULL;
++	int my_rank=IssmComm::GetRank();
+ 
+ 	/*AD mode on?: */
+ 	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+@@ -825,13 +826,15 @@
+ 		parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+ 		parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
+ 		if(num_dependents){
+-			dependents=xNew<IssmPDouble>(num_dependents);
++			if (my_rank==0) {
++				dependents=xNew<IssmPDouble>(num_dependents);
+ 
+-			/*Go through our dependent variables, and compute the response:*/
+-			for(int i=0;i<dependent_objects->Size();i++){
+-				DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
+-				dep->Responsex(&output_value,this);
+-				output_value>>=dependents[i];
++				/*Go through our dependent variables, and compute the response:*/
++				for(int i=0;i<dependent_objects->Size();i++){
++					DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
++					dep->Responsex(&output_value,this);
++					output_value>>=dependents[i];
++				}
+ 			}
+ 		}
+ 		delete dependent_objects;
Index: /issm/oecreview/Archive/15392-16133/ISSM-16118-16119.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16118-16119.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16118-16119.diff	(revision 16134)
@@ -0,0 +1,251 @@
+Index: ../trunk-jpl/startup.py
+===================================================================
+--- ../trunk-jpl/startup.py	(revision 16118)
++++ ../trunk-jpl/startup.py	(revision 16119)
+@@ -1,33 +0,0 @@
+-#!/usr/bin/env python
+-# STARTUP - Python startup script
+-#
+-#  startup.py is a script run by python at the beginning of a session, just
+-#  before handing over the prompt to the user if the environment variable
+-#  PYTHONSTARTUP is defined:
+-#  export PYTHONSTARTUP=$ISSM_DIR/startup.py
+-#  This startup script should be run by users before trying to use ISSM.
+-
+-import os,sys
+-
+-#Recover ISSM_DIR and USERNAME
+-ISSM_DIR=os.getenv('ISSM_DIR')
+-USERNAME =os.getenv('USER')
+-if(ISSM_DIR==None):
+-	raise NameError('"ISSM_DIR" environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!')
+-
+-#Go through src/m and append any directory that contains a *.py file to PATH 
+-for root,dirs,files in os.walk(ISSM_DIR+ '/src/m'):
+-	if '.svn' in dirs:
+-		dirs.remove('.svn')
+-	for file in files:
+-		if file.find(".py") != -1:
+-			if file.find(".pyc") == -1:
+-				if root not in sys.path:
+-					sys.path.append(root)
+-				
+-sys.path.append(ISSM_DIR + '/lib')
+-
+-#Manual imports for commonly used functions
+-from plotmodel import plotmodel
+-
+-print("\n  ISSM python modules loaded properly. You are now ready to start using ISSM.\n\n");
+Index: ../trunk-jpl/startup.m
+===================================================================
+--- ../trunk-jpl/startup.m	(revision 16118)
++++ ../trunk-jpl/startup.m	(revision 16119)
+@@ -1,49 +0,0 @@
+-%STARTUP - Matlab startup script
+-%
+-%   startup.m is a script run by matlab at the beginning of a session, just
+-%   before handing over the prompt to the user. This delivery startup.m script
+-%   has been customized here for the ISSM code. This startup script should be
+-%   run by users before trying to use ISSM. The best way to do that is to put
+-%   the startup file in the location where Matlab starts and established its
+-%   root directory.
+-
+-% clear the last warning to focus on the warnings of the ISSM path
+-lastwarn(''); 
+-
+-%Recover ISSM_DIR , or if on a Windows machine, ISSM_DIR_WIN
+-if ~ispc,
+-	ISSM_DIR=getenv('ISSM_DIR');
+-else
+-	ISSM_DIR=getenv('ISSM_DIR_WIN');
+-end
+-if (isempty(ISSM_DIR)),
+-	error('''ISSM_DIR'' environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!');
+-end
+-
+-%Now add all issm code paths necessary to run issm smoothly. 
+-%We capture the error output, so that we can warn the user to update 
+-%the variable ISSM_DIR in this file, in case it is not correctly setup. 
+-
+-%ISSM path
+-addpath([ISSM_DIR '/src/m/os/']); %load recursivepath
+-addpath([ISSM_DIR '/lib']);       %load mex
+-addpath(recursivepath([ISSM_DIR '/src/m']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/scotch']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/canos']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/kml']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/export_fig']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/googleearthtoolbox']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/howatmask']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/dem']));
+-clear ISSM_DIR;
+-
+-%Check on any warning messages that might indicate that the paths were not correct. 
+-if ~isempty(lastwarn),
+-	fprintf('\n  Error trying to setup ''ISSM'' code paths. Try and update the ISSM_DIR variable in your .cshrc or .bashrc!\n');
+-	fprintf('  ''ISSM'' will not  work at all until this is resolved\n\n');
+-else
+-	fprintf('\n  To get started with ISSM, type issmdoc at the command prompt.\n\n');
+-end
+-
+-%disable matlab bell!
+-beep off;
+Index: ../trunk-jpl/src/m/dev/developmentpath.py
+===================================================================
+--- ../trunk-jpl/src/m/dev/developmentpath.py	(revision 16118)
++++ ../trunk-jpl/src/m/dev/developmentpath.py	(revision 16119)
+@@ -1,26 +0,0 @@
+-#!/usr/bin/env python
+-
+-import os,sys
+-
+-#Recover ISSM_DIR and USERNAME
+-ISSM_DIR=os.getenv('ISSM_DIR')
+-USERNAME =os.getenv('USER')
+-if(ISSM_DIR==None):
+-	raise NameError('"ISSM_DIR" environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!')
+-
+-#Go through src/m and append any directory that contains a *.py file to PATH 
+-for root,dirs,files in os.walk(ISSM_DIR+ '/src/m'):
+-	if '.svn' in dirs:
+-		dirs.remove('.svn')
+-	for file in files:
+-		if file.find(".py") != -1:
+-			if file.find(".pyc") == -1:
+-				if root not in sys.path:
+-					sys.path.append(root)
+-				
+-sys.path.append(ISSM_DIR + '/lib')
+-
+-#Manual imports for commonly used functions
+-from plotmodel import plotmodel
+-
+-print("\n  ISSM development path correctly loaded\n\n")
+Index: ../trunk-jpl/src/m/dev/developmentpath.m
+===================================================================
+--- ../trunk-jpl/src/m/dev/developmentpath.m	(revision 16118)
++++ ../trunk-jpl/src/m/dev/developmentpath.m	(revision 16119)
+@@ -1,40 +0,0 @@
+-% clear the last warning to focus on the warnings of the ISSM path
+-lastwarn(''); 
+-
+-%Recover ISSM_DIR , or if on a Windows machine, ISSM_DIR_WIN
+-if ~ispc,
+-	ISSM_DIR=getenv('ISSM_DIR');
+-else
+-	ISSM_DIR=getenv('ISSM_DIR_WIN');
+-end
+-if (isempty(ISSM_DIR)),
+-	error('''ISSM_DIR'' environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!');
+-end
+-
+-%Now add all issm code paths necessary to run issm smoothly. 
+-%We capture the error output, so that we can warn the user to update 
+-%the variable ISSM_DIR in this file, in case it is not correctly setup. 
+-
+-%ISSM path
+-addpath([ISSM_DIR '/src/m/os/']); %load recursivepath
+-addpath([ISSM_DIR '/lib']);       %load mex
+-addpath(recursivepath([ISSM_DIR '/src/m']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/scotch']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/canos']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/kml']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/export_fig']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/googleearthtoolbox']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/howatmask']));
+-addpath(recursivepath([ISSM_DIR '/externalpackages/dem']));
+-clear ISSM_DIR;
+-
+-%Check on any warning messages that might indicate that the paths were not correct. 
+-if ~isempty(lastwarn),
+-	fprintf('\n  Error trying to setup ''ISSM'' code paths. Try and update the ISSM_DIR variable in your .cshrc or .bashrc!\n');
+-	fprintf('  ''ISSM'' will not  work at all until this is resolved\n\n');
+-else
+-	fprintf('\n  ISSM development path correctly loaded\n\n');
+-end
+-
+-%disable matlab bell!
+-beep off;
+Index: ../trunk-jpl/src/m/dev/devpath.py
+===================================================================
+--- ../trunk-jpl/src/m/dev/devpath.py	(revision 0)
++++ ../trunk-jpl/src/m/dev/devpath.py	(revision 16119)
+@@ -0,0 +1,26 @@
++#!/usr/bin/env python
++
++import os,sys
++
++#Recover ISSM_DIR and USERNAME
++ISSM_DIR=os.getenv('ISSM_DIR')
++USERNAME =os.getenv('USER')
++if(ISSM_DIR==None):
++	raise NameError('"ISSM_DIR" environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!')
++
++#Go through src/m and append any directory that contains a *.py file to PATH 
++for root,dirs,files in os.walk(ISSM_DIR+ '/src/m'):
++	if '.svn' in dirs:
++		dirs.remove('.svn')
++	for file in files:
++		if file.find(".py") != -1:
++			if file.find(".pyc") == -1:
++				if root not in sys.path:
++					sys.path.append(root)
++				
++sys.path.append(ISSM_DIR + '/lib')
++
++#Manual imports for commonly used functions
++from plotmodel import plotmodel
++
++print("\n  ISSM development path correctly loaded\n\n")
+Index: ../trunk-jpl/src/m/dev/devpath.m
+===================================================================
+--- ../trunk-jpl/src/m/dev/devpath.m	(revision 0)
++++ ../trunk-jpl/src/m/dev/devpath.m	(revision 16119)
+@@ -0,0 +1,40 @@
++% clear the last warning to focus on the warnings of the ISSM path
++lastwarn(''); 
++
++%Recover ISSM_DIR , or if on a Windows machine, ISSM_DIR_WIN
++if ~ispc,
++	ISSM_DIR=getenv('ISSM_DIR');
++else
++	ISSM_DIR=getenv('ISSM_DIR_WIN');
++end
++if (isempty(ISSM_DIR)),
++	error('''ISSM_DIR'' environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!');
++end
++
++%Now add all issm code paths necessary to run issm smoothly. 
++%We capture the error output, so that we can warn the user to update 
++%the variable ISSM_DIR in this file, in case it is not correctly setup. 
++
++%ISSM path
++addpath([ISSM_DIR '/src/m/os/']); %load recursivepath
++addpath([ISSM_DIR '/lib']);       %load mex
++addpath(recursivepath([ISSM_DIR '/src/m']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/scotch']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/canos']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/kml']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/export_fig']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/googleearthtoolbox']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/howatmask']));
++addpath(recursivepath([ISSM_DIR '/externalpackages/dem']));
++clear ISSM_DIR;
++
++%Check on any warning messages that might indicate that the paths were not correct. 
++if ~isempty(lastwarn),
++	fprintf('\n  Error trying to setup ''ISSM'' code paths. Try and update the ISSM_DIR variable in your .cshrc or .bashrc!\n');
++	fprintf('  ''ISSM'' will not  work at all until this is resolved\n\n');
++else
++	fprintf('\n  ISSM development path correctly loaded\n\n');
++end
++
++%disable matlab bell!
++beep off;
+
+Property changes on: ../trunk-jpl/src/m/dev/devpath.m
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: /issm/oecreview/Archive/15392-16133/ISSM-16119-16120.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16119-16120.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16119-16120.diff	(revision 16134)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16119)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16120)
+@@ -826,13 +826,13 @@
+ 		parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+ 		parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
+ 		if(num_dependents){
+-			if (my_rank==0) {
+-				dependents=xNew<IssmPDouble>(num_dependents);
++			dependents=xNew<IssmPDouble>(num_dependents);
+ 
+-				/*Go through our dependent variables, and compute the response:*/
+-				for(int i=0;i<dependent_objects->Size();i++){
+-					DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
+-					dep->Responsex(&output_value,this);
++			/*Go through our dependent variables, and compute the response:*/
++			for(int i=0;i<dependent_objects->Size();i++){
++				DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
++				dep->Responsex(&output_value,this);
++				if (my_rank==0) {
+ 					output_value>>=dependents[i];
+ 				}
+ 			}
Index: /issm/oecreview/Archive/15392-16133/ISSM-16120-16121.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16120-16121.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16120-16121.diff	(revision 16134)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16120)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16121)
+@@ -92,7 +92,9 @@
+ 				theOutput=xNew<double>(num_dependents);
+ 
+ 				/*set the forward method function pointer: */
++#ifdef _HAVE_GSL_
+ 				anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
++#endif
+ 
+ 				/*allocate the space for the parameters to invoke the EDF fos_forward:*/
+ 				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
+@@ -136,7 +138,9 @@
+ 				jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
+ 
+ 				/*set the forward method function pointers: */
++#ifdef _HAVE_GSL_
+ 				anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
++#endif
+ 				// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+ 
+ 				/*allocate the space for the parameters to invoke EDF fov_forward:*/
+@@ -194,7 +198,12 @@
+ 				weightVectorTimesJac=xNew<double>(num_independents);
+ 
+ 				/*set the forward method function pointer: */
++#ifdef _HAVE_GSL_
+ 				anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
++#endif
++#ifdef _HAVE_MUMPS_
++				anEDF_for_solverx_p->fos_reverse_iArr=fos_reverse_mumpsSolveEDF;
++#endif
+ 
+ 				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
+ 				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
+@@ -236,7 +245,9 @@
+ 				weightsTimesJac=xNew<double>(weightNum,num_independents);
+ 
+ 				/*set the forward method function pointers: */
++#ifdef _HAVE_GSL_
+ 				anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++#endif
+ 
+ 				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
+ 				anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16121-16122.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16121-16122.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16121-16122.diff	(revision 16134)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/Makefile.am
+===================================================================
+--- ../trunk-jpl/Makefile.am	(revision 16121)
++++ ../trunk-jpl/Makefile.am	(revision 16122)
+@@ -1,5 +1,5 @@
+ EXTRA_DIST = reconf scripts test m4 examples cron etc doc packages contributors.txt 
+ SUBDIRS = src
+-bin_SCRIPTS=startup.m README.rtf
++bin_SCRIPTS= README.rtf
+ 
+ ACLOCAL_AMFLAGS = -I m4
Index: /issm/oecreview/Archive/15392-16133/ISSM-16122-16123.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16122-16123.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16122-16123.diff	(revision 16134)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 16122)
++++ ../trunk-jpl/etc/environment.sh	(revision 16123)
+@@ -215,10 +215,9 @@
+ PYTHON_DIR="$ISSM_DIR/externalpackages/python/install"
+ if [ -d "$PYTHON_DIR" ]; then
+ 	export PYTHONPATH="$PYTHONPATH:$ISSM_DIR/lib"
+-	export PYTHONSTARTUP="$ISSM_DIR/startup.py"
+ 	pathprepend    "$PYTHON_DIR/bin"
++	libpathprepend "$PYTHON_DIR/lib"
+ 	libpathprepend "$ISSM_DIR/lib"
+-	libpathprepend "$PYTHON_DIR/lib"
+ fi
+ 
+ MODELE_DIR="$ISSM_DIR/externalpackages/modelE/install"
Index: /issm/oecreview/Archive/15392-16133/ISSM-16123-16124.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16123-16124.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16123-16124.diff	(revision 16134)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16123)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16124)
+@@ -211,6 +211,7 @@
+ 
+ 				/*call driver: */
+ 				fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
++				if(VerboseAutodiff())_printf_("   done with fos_reverse\n");
+ 
+ 				/*add to results*/
+ 				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
Index: /issm/oecreview/Archive/15392-16133/ISSM-16124-16125.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16124-16125.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16124-16125.diff	(revision 16134)
@@ -0,0 +1,817 @@
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 16125)
+@@ -22,10 +22,6 @@
+ 			Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 			element->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
+ 		}
+-		for(i=0;i<femmodel->nodes->Size();i++){
+-			Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+-			node->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
+-		}
+ 		for(i=0;i<femmodel->loads->Size();i++){
+ 			Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 			load->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 16125)
+@@ -22,10 +22,6 @@
+ 		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVector(vector,name,type);
+ 	}
+-	for(i=0;i<femmodel->nodes->Size();i++){
+-		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+-		node->InputUpdateFromVector(vector,name,type);
+-	}
+ 	for(i=0;i<femmodel->loads->Size();i++){
+ 		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVector(vector,name,type);
+@@ -35,49 +31,3 @@
+ 		material->InputUpdateFromVector(vector,name,type);
+ 	}
+ }
+-
+-void InputUpdateFromVectorx(FemModel* femmodel,int* vector, int name, int type){
+-
+-	int i;
+-
+-	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->InputUpdateFromVector(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->nodes->Size();i++){
+-		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+-		node->InputUpdateFromVector(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->loads->Size();i++){
+-		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+-		load->InputUpdateFromVector(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->materials->Size();i++){
+-		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+-		material->InputUpdateFromVector(vector,name,type);
+-	}
+-}
+-
+-void InputUpdateFromVectorx(FemModel* femmodel,bool* vector, int name, int type){
+-
+-	int i;
+-
+-	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->InputUpdateFromVector(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->nodes->Size();i++){
+-		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+-		node->InputUpdateFromVector(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->loads->Size();i++){
+-		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+-		load->InputUpdateFromVector(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->materials->Size();i++){
+-		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+-		material->InputUpdateFromVector(vector,name,type);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 16124)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 16125)
+@@ -10,7 +10,5 @@
+ /* local prototypes: */
+ void	InputUpdateFromVectorx(FemModel* femmodel,Vector<IssmDouble>* vector, int name,int type);
+ void	InputUpdateFromVectorx(FemModel* femmodel,IssmDouble* vector, int name,int type);
+-void	InputUpdateFromVectorx(FemModel* femmodel,int* vector, int name,int type);
+-void	InputUpdateFromVectorx(FemModel* femmodel,bool* vector, int name,int type);
+ 
+ #endif  /* _UPDATEINPUTSFROMVECTORXX_H */
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 16125)
+@@ -24,10 +24,6 @@
+ 		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+-	for(i=0;i<femmodel->nodes->Size();i++){
+-		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+-		node->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+ 	for(i=0;i<femmodel->loads->Size();i++){
+ 		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromVectorDakota(vector,name,type);
+@@ -37,49 +33,3 @@
+ 		material->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+ }
+-
+-void InputUpdateFromVectorDakotax(FemModel* femmodel,int* vector, int name, int type){
+-
+-	int i;
+-
+-	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->nodes->Size();i++){
+-		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+-		node->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->loads->Size();i++){
+-		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+-		load->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->materials->Size();i++){
+-		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+-		material->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+-}
+-
+-void InputUpdateFromVectorDakotax(FemModel* femmodel,bool* vector, int name, int type){
+-
+-	int i;
+-
+-	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<femmodel->elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->nodes->Size();i++){
+-		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
+-		node->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->loads->Size();i++){
+-		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
+-		load->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+-	for(i=0;i<femmodel->materials->Size();i++){
+-		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+-		material->InputUpdateFromVectorDakota(vector,name,type);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 16124)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 16125)
+@@ -10,7 +10,5 @@
+ /* local prototypes: */
+ void	InputUpdateFromVectorDakotax(FemModel* femmodel,Vector<IssmDouble>* vector, int name,int type);
+ void	InputUpdateFromVectorDakotax(FemModel* femmodel,IssmDouble* vector, int name,int type);
+-void	InputUpdateFromVectorDakotax(FemModel* femmodel,int* vector, int name,int type);
+-void	InputUpdateFromVectorDakotax(FemModel* femmodel,bool* vector, int name,int type);
+ 
+ #endif  /* _UPDATEINPUTSFROMVECTORDAKOTAXX_H */
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16125)
+@@ -673,16 +673,6 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromVector(int* vector, int name, int type) {{{*/
+-void  Matdamageice::InputUpdateFromVector(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromVector(bool* vector, int name, int type) {{{*/
+-void  Matdamageice::InputUpdateFromVector(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ /*FUNCTION Matdamageice::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type) {{{*/
+ void  Matdamageice::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+ 
+@@ -732,21 +722,11 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromMatrixDakota(int* vector, int name, int type) {{{*/
++/*FUNCTION Matdamageice::InputUpdateFromMatrixDakota(IssmDouble* vector, int name, int type) {{{*/
+ void  Matdamageice::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols,int name, int type){
+ 	/*Nothing updated yet*/
+ }
+ /*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromVectorDakota(int* vector, int name, int type) {{{*/
+-void  Matdamageice::InputUpdateFromVectorDakota(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromVectorDakota(bool* vector, int name, int type) {{{*/
+-void  Matdamageice::InputUpdateFromVectorDakota(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ /*FUNCTION Matdamageice::InputUpdateFromConstant(IssmDouble constant, int name) {{{*/
+ void  Matdamageice::InputUpdateFromConstant(IssmDouble constant, int name){
+ 	/*Nothing updated yet*/
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16125)
+@@ -615,16 +615,6 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Matice::InputUpdateFromVector(int* vector, int name, int type) {{{*/
+-void  Matice::InputUpdateFromVector(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matice::InputUpdateFromVector(bool* vector, int name, int type) {{{*/
+-void  Matice::InputUpdateFromVector(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ /*FUNCTION Matice::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type) {{{*/
+ void  Matice::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+ 
+@@ -687,16 +677,6 @@
+ 	/*Nothing updated yet*/
+ }
+ /*}}}*/
+-/*FUNCTION Matice::InputUpdateFromVectorDakota(int* vector, int name, int type) {{{*/
+-void  Matice::InputUpdateFromVectorDakota(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matice::InputUpdateFromVectorDakota(bool* vector, int name, int type) {{{*/
+-void  Matice::InputUpdateFromVectorDakota(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ /*FUNCTION Matice::InputUpdateFromConstant(IssmDouble constant, int name) {{{*/
+ void  Matice::InputUpdateFromConstant(IssmDouble constant, int name){
+ 	/*Nothing updated yet*/
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16125)
+@@ -139,32 +139,12 @@
+ 	/*Nothing updated yet*/
+ }
+ /*}}}*/
+-/*FUNCTION Matpar::InputUpdateFromVector(int* vector, int name, int type) {{{*/
+-void   Matpar::InputUpdateFromVector(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matpar::InputUpdateFromVector(bool* vector, int name, int type) {{{*/
+-void   Matpar::InputUpdateFromVector(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ /*FUNCTION Matpar::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type) {{{*/
+ void   Matpar::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+ 	/*Nothing updated yet*/
+ }
+ /*}}}*/
+-/*FUNCTION Matpar::InputUpdateFromVectorDakota(int* vector, int name, int type) {{{*/
+-void   Matpar::InputUpdateFromVectorDakota(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matpar::InputUpdateFromVectorDakota(bool* vector, int name, int type) {{{*/
+-void   Matpar::InputUpdateFromVectorDakota(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matpar::InputUpdateFromMatrixDakota(int* vector, int name, int type) {{{*/
++/*FUNCTION Matpar::InputUpdateFromMatrixDakota(IssmDouble* vector, int name, int type) {{{*/
+ void  Matpar::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols,int name, int type){
+ 	/*Nothing updated yet*/
+ }
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 16125)
+@@ -32,12 +32,8 @@
+ 		/*}}}*/
+ 		/*Update virtual functions definitions: {{{*/
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVector(int* vector, int name, int type);
+-		void  InputUpdateFromVector(bool* vector, int name, int type);
+ 		void  InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrow, int ncols, int name, int type);
+ 		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(int* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(bool* vector, int name, int type);
+ 		void  InputUpdateFromConstant(IssmDouble constant, int name);
+ 		void  InputUpdateFromConstant(int constant, int name);
+ 		void  InputUpdateFromConstant(bool constant, int name);
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16125)
+@@ -39,12 +39,8 @@
+ 		/*}}}*/
+ 		/*Update virtual functions definitions: {{{*/
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVector(int* vector, int name, int type);
+-		void  InputUpdateFromVector(bool* vector, int name, int type);
+ 		void  InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrow, int ncols, int name, int type);
+ 		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(int* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(bool* vector, int name, int type);
+ 		void  InputUpdateFromConstant(IssmDouble constant, int name);
+ 		void  InputUpdateFromConstant(int constant, int name);
+ 		void  InputUpdateFromConstant(bool constant, int name);
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16125)
+@@ -70,12 +70,8 @@
+ 		/*}}}*/
+ 		/*Update virtual functions resolution: {{{*/
+ 		void   InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void   InputUpdateFromVector(int* vector, int name, int type);
+-		void   InputUpdateFromVector(bool* vector, int name, int type);
+ 		void   InputUpdateFromMatrixDakota(IssmDouble* matrix,int nrows,int ncols, int name, int type);
+ 		void   InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void   InputUpdateFromVectorDakota(int* vector, int name, int type);
+-		void   InputUpdateFromVectorDakota(bool* vector, int name, int type);
+ 		void   InputUpdateFromConstant(IssmDouble constant, int name);
+ 		void   InputUpdateFromConstant(int constant, int name);
+ 		void   InputUpdateFromConstant(bool constant, int name);
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 16125)
+@@ -292,16 +292,6 @@
+ 	/*Nothing updated yet*/
+ }
+ /*}}}*/
+-/*FUNCTION Penpair::InputUpdateFromVector(int* vector, int name, int type) {{{*/
+-void  Penpair::InputUpdateFromVector(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Penpair::InputUpdateFromVector(bool* vector, int name, int type) {{{*/
+-void  Penpair::InputUpdateFromVector(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ 
+ /*Penpair management:*/
+ /*FUNCTION Penpair::PenaltyCreateKMatrixStressbalanceHoriz{{{*/
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16125)
+@@ -59,12 +59,8 @@
+ 		/*}}}*/
+ 		/*Update virtual functions resolution: {{{*/
+ 		void    InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void    InputUpdateFromVector(int* vector, int name, int type){_error_("Not implemented yet!");}
+-		void    InputUpdateFromVector(bool* vector, int name, int type){_error_("Not implemented yet!");}
+ 		void    InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows,int ncols, int name, int type){_error_("Not implemented yet!");}
+ 		void    InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){_error_("Not implemented yet!");}
+-		void    InputUpdateFromVectorDakota(int* vector, int name, int type){_error_("Not implemented yet!");}
+-		void    InputUpdateFromVectorDakota(bool* vector, int name, int type){_error_("Not implemented yet!");}
+ 		void    InputUpdateFromConstant(IssmDouble constant, int name);
+ 		void    InputUpdateFromConstant(int constant, int name){_error_("Not implemented yet!");}
+ 		void    InputUpdateFromConstant(bool constant, int name);
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.h	(revision 16125)
+@@ -48,12 +48,8 @@
+ 		/*}}}*/
+ 		/*Update virtual functions resolution: {{{*/
+ 		void InputUpdateFromVector(IssmDouble* vector, int name, int type){/*Do nothing*/}
+-		void InputUpdateFromVector(int* vector, int name, int type){_error_("Not implemented yet!");}
+-		void InputUpdateFromVector(bool* vector, int name, int type){_error_("Not implemented yet!");}
+ 		void InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){/*Do nothing*/}
+ 		void InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){/*Do nothing*/}
+-		void InputUpdateFromVectorDakota(int* vector, int name, int type){_error_("Not implemented yet!");}
+-		void InputUpdateFromVectorDakota(bool* vector, int name, int type){_error_("Not implemented yet!");}
+ 		void InputUpdateFromConstant(IssmDouble constant, int name){/*Do nothing*/};
+ 		void InputUpdateFromConstant(int constant, int name){/*Do nothing*/};
+ 		void InputUpdateFromConstant(bool constant, int name){_error_("Not implemented yet!");}
+Index: ../trunk-jpl/src/c/classes/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 16125)
+@@ -38,12 +38,8 @@
+ 		/*}}}*/
+ 		/*Update virtual functions resolution: {{{*/
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVector(int* vector, int name, int type);
+-		void  InputUpdateFromVector(bool* vector, int name, int type);
+ 		void  InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrow, int ncols,int name, int type){_error_("Not implemented yet!");}
+ 		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){_error_("Not implemented yet!");}
+-		void  InputUpdateFromVectorDakota(int* vector, int name, int type){_error_("Not implemented yet!");}
+-		void  InputUpdateFromVectorDakota(bool* vector, int name, int type){_error_("Not implemented yet!");}
+ 		void  InputUpdateFromConstant(IssmDouble constant, int name);
+ 		void  InputUpdateFromConstant(int constant, int name);
+ 		void  InputUpdateFromConstant(bool constant, int name);
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16125)
+@@ -357,16 +357,6 @@
+ 	/*Nothing updated yet*/
+ }
+ /*}}}*/
+-/*FUNCTION Pengrid::InputUpdateFromVector(int* vector, int name, int type) {{{*/
+-void  Pengrid::InputUpdateFromVector(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Pengrid::InputUpdateFromVector(bool* vector, int name, int type) {{{*/
+-void  Pengrid::InputUpdateFromVector(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ /*FUNCTION Pengrid::InputUpdateFromMatrixDakota(IssmDouble* vector, int nrows, int ncols, int name, int type) {{{*/
+ void  Pengrid::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){
+ 	/*Nothing updated yet*/
+@@ -377,16 +367,6 @@
+ 	/*Nothing updated yet*/
+ }
+ /*}}}*/
+-/*FUNCTION Pengrid::InputUpdateFromVectorDakota(int* vector, int name, int type) {{{*/
+-void  Pengrid::InputUpdateFromVectorDakota(int* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Pengrid::InputUpdateFromVectorDakota(bool* vector, int name, int type) {{{*/
+-void  Pengrid::InputUpdateFromVectorDakota(bool* vector, int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ /*FUNCTION Pengrid::InputUpdateFromConstant(IssmDouble constant, int name) {{{*/
+ void  Pengrid::InputUpdateFromConstant(IssmDouble constant, int name){
+ 	switch(name){
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 16125)
+@@ -58,12 +58,8 @@
+ 		/*}}}*/
+ 		/*Update virtual functions resolution: {{{*/
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVector(int* vector, int name, int type);
+-		void  InputUpdateFromVector(bool* vector, int name, int type);
+ 		void  InputUpdateFromMatrixDakota(IssmDouble* matrix ,int nrows, int ncols, int name, int type);
+ 		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(int* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(bool* vector, int name, int type);
+ 		void  InputUpdateFromConstant(IssmDouble constant, int name);
+ 		void  InputUpdateFromConstant(int constant, int name);
+ 		void  InputUpdateFromConstant(bool constant, int name);
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16125)
+@@ -255,7 +255,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Riftfront::InputUpdateFromConstant(IssmDouble* constant,int name) {{{*/
++/*FUNCTION Riftfront::InputUpdateFromVector(IssmDouble* constant,int name) {{{*/
+ void    Riftfront::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+ 
+ 	/*Check that name is a Riftfront input*/
+Index: ../trunk-jpl/src/c/classes/Update.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Update.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Update.h	(revision 16125)
+@@ -14,13 +14,9 @@
+ 	public:
+ 
+ 		virtual void  InputUpdateFromVector(IssmDouble* vector, int name, int type)=0;
+-		virtual void  InputUpdateFromVector(int* vector, int name, int type)=0;
+-		virtual void  InputUpdateFromVector(bool* vector, int name, int type)=0; 
+ 		#ifdef _HAVE_DAKOTA_
+ 		virtual void  InputUpdateFromMatrixDakota(IssmDouble* matrix, int rows, int ncols, int name, int type)=0;
+ 		virtual void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type)=0;
+-		virtual void  InputUpdateFromVectorDakota(int* vector, int name, int type)=0;
+-		virtual void  InputUpdateFromVectorDakota(bool* vector, int name, int type)=0;
+ 		#endif
+ 		virtual void  InputUpdateFromConstant(IssmDouble constant, int name)=0;
+ 		virtual void  InputUpdateFromConstant(int constant, int name)=0;
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 16125)
+@@ -22,7 +22,7 @@
+ class ElementMatrix;
+ /*}}}*/
+ 
+-class Node: public Object ,public Update{
++class Node: public Object{
+ 
+ 	private:
+ 		int approximation; //For ice flow models, we need to know what ice flow approximation is employed on this node
+@@ -50,20 +50,6 @@
+ 		int     ObjectEnum();
+ 		Object *copy(){_error_("Not implemented yet (similar to Elements)"); };
+ 
+-		/*Update virtual functions definitions:*/
+-		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVector(int* vector, int name, int type);
+-		void  InputUpdateFromVector(bool* vector, int name, int type);
+-		void  InputUpdateFromMatrixDakota(IssmDouble* matrix,int nrows, int ncols, int name, int type);
+-		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(int* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(bool* vector, int name, int type);
+-		void  InputUpdateFromConstant(IssmDouble constant, int name);
+-		void  InputUpdateFromConstant(int constant, int name);
+-		void  InputUpdateFromConstant(bool constant, int name);
+-		void  InputUpdateFromSolution(IssmDouble* solution){_error_("Not implemented yet!");}
+-		void  InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("Not implemented yet!");}
+-
+ 		/*Node numerical routines*/
+ 		void  CreateNodalConstraints(Vector<IssmDouble>* ys);
+ 		void  SetCurrentConfiguration(DataSet* nodes,Vertices* vertices);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16125)
+@@ -1766,13 +1766,14 @@
+ /*FUNCTION Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type);{{{*/
+ void  Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+ 
+-	const int   numnodes = NUMVERTICES;
+-	int        *doflist  = NULL;
+-	IssmDouble  values[numnodes];
+ 
+ 	/*Check that name is an element input*/
+ 	if (!IsInput(name)) return;
+ 
++	int         numnodes;
++	int        *doflist = NULL;
++	IssmDouble *values  = NULL;
++
+ 	switch(type){
+ 	case VertexPIdEnum: 
+ 		for (int i=0;i<NUMVERTICES;i++){
+@@ -1801,48 +1802,49 @@
+ 		return; 
+ 
+ 	case NodesEnum:
+-		_assert_(this->element_type==P1Enum);
+-		/*Get dof list: */
++
++		/*Get number of nodes and dof list: */
++		numnodes = this->NumberofNodes();
++		values   = xNew<IssmDouble>(numnodes);
+ 		GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+ 
+ 		/*Use the dof list to index into the vector: */
+ 		for(int i=0;i<numnodes;i++){
+ 			values[i]=vector[doflist[i]];
+-			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
++			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+ 		}
++
+ 		/*Add input to the element: */
+-		this->inputs->AddInput(new TriaInput(name,values,P1Enum));
++		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
+ 
+ 		/*Free ressources:*/
+ 		xDelete<int>(doflist);
+ 		return;
+ 
+ 	case NodeSIdEnum:
+-		_assert_(this->element_type==P1Enum);
+-		for(int i=0;i<NUMVERTICES;i++){
++
++		/*Get number of nodes and dof list: */
++		numnodes = this->NumberofNodes();
++		values   = xNew<IssmDouble>(numnodes);
++
++		for(int i=0;i<numnodes;i++){
+ 			values[i]=vector[nodes[i]->Sid()];
+-			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
++			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+ 		}
+ 		/*Add input to the element: */
+-		this->inputs->AddInput(new TriaInput(name,values,P1Enum));
++		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
+ 		return;
+ 
+ 	default:
+ 		_error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+ 	}
+ 
++	/*Clean-up*/
++	xDelete<int>(doflist);
++	xDelete<IssmDouble>(values);
++
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputUpdateFromVector(int* vector, int name, int type);{{{*/
+-void  Tria::InputUpdateFromVector(int* vector, int name, int type){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+-/*FUNCTION Tria::InputUpdateFromVector(bool* vector, int name, int type);{{{*/
+-void  Tria::InputUpdateFromVector(bool* vector, int name, int type){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+ /*FUNCTION Tria::InputCreate(IssmDouble scalar,int enum,int code);{{{*/
+ void Tria::InputCreate(IssmDouble scalar,int name,int code){
+ 
+@@ -5573,7 +5575,7 @@
+ 	VelocityFactor= n_man*CR*CR*rho_water*g/mu_water;
+ 
+ 	gauss=new GaussTria();
+-	for (int iv=0;iv<NUMVERTICES;iv++){
++	for(int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+ 		surfaceslopex_input->GetInputValue(&dsdx,gauss);
+ 		surfaceslopey_input->GetInputValue(&dsdy,gauss);
+@@ -7004,16 +7006,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputUpdateFromVectorDakota(int* vector, int name, int type);{{{*/
+-void  Tria::InputUpdateFromVectorDakota(int* vector, int name, int type){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+-/*FUNCTION Tria::InputUpdateFromVectorDakota(bool* vector, int name, int type);{{{*/
+-void  Tria::InputUpdateFromVectorDakota(bool* vector, int name, int type){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+ /*FUNCTION Tria::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type);{{{*/
+ void  Tria::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16125)
+@@ -56,12 +56,8 @@
+ 		/*Update virtual functions resolution: {{{*/
+ 		void  InputUpdateFromSolution(IssmDouble* solutiong);
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVector(int* vector, int name, int type);
+-		void  InputUpdateFromVector(bool* vector, int name, int type);
+ 		#ifdef _HAVE_DAKOTA_
+ 		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(int* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(bool* vector, int name, int type);
+ 		void  InputUpdateFromMatrixDakota(IssmDouble* matrix, int nows, int ncols, int name, int type);
+ 		#endif
+ 		void  InputUpdateFromConstant(IssmDouble constant, int name);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16125)
+@@ -2729,16 +2729,6 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromVector(int* vector, int name, int type);{{{*/
+-void  Penta::InputUpdateFromVector(int* vector, int name, int type){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+-/*FUNCTION Penta::InputUpdateFromVector(bool* vector, int name, int type);{{{*/
+-void  Penta::InputUpdateFromVector(bool* vector, int name, int type){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+ /*FUNCTION Penta::IsOnBed{{{*/
+ bool Penta::IsOnBed(void){
+ 
+@@ -7034,16 +7024,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputUpdateFromVectorDakota(int* vector, int name, int type);{{{*/
+-void  Penta::InputUpdateFromVectorDakota(int* vector, int name, int type){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+-/*FUNCTION Penta::InputUpdateFromVectorDakota(bool* vector, int name, int type);{{{*/
+-void  Penta::InputUpdateFromVectorDakota(bool* vector, int name, int type){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+ /*FUNCTION Penta::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type);{{{*/
+ void  Penta::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){
+ 
+@@ -10266,11 +10246,11 @@
+ void  Penta::InputUpdateFromSolutionStressbalanceSSA(IssmDouble* solution){
+ 
+ 	int         numnodes = this->NumberofNodes();
+-	int         numdof=NDOF2*numnodes;
++	int         numdof   = NDOF2*numnodes;
+ 
+ 	int         i;
+ 	IssmDouble  rho_ice,g;
+-	IssmDouble  values[numdof];
++	IssmDouble  values[2*NUMVERTICES];
+ 	IssmDouble  vx[NUMVERTICES];
+ 	IssmDouble  vy[NUMVERTICES];
+ 	IssmDouble  vz[NUMVERTICES];
+@@ -10278,8 +10258,8 @@
+ 	IssmDouble  pressure[NUMVERTICES];
+ 	IssmDouble  surface[NUMVERTICES];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+-	int    *doflist = NULL;
+-	Penta  *penta   = NULL;
++	int        *doflist = NULL;
++	Penta      *penta   = NULL;
+ 
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,SSAApproximationEnum,GsetEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16125)
+@@ -61,13 +61,9 @@
+ 		void  InputUpdateFromConstant(IssmDouble constant, int name);
+ 		void  InputUpdateFromConstant(int constant, int name);
+ 		void  InputUpdateFromSolution(IssmDouble* solutiong);
+-		void  InputUpdateFromVector(bool* vector, int name, int type);
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVector(int* vector, int name, int type);
+ 		#ifdef _HAVE_DAKOTA_
+-		void  InputUpdateFromVectorDakota(bool* vector, int name, int type);
+ 		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromVectorDakota(int* vector, int name, int type);
+ 		void  InputUpdateFromMatrixDakota(IssmDouble* matrix, int nows, int ncols, int name, int type);
+ 		#endif
+ 		void  InputUpdateFromIoModel(int index, IoModel* iomodel);
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16124)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16125)
+@@ -576,66 +576,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Node::InputUpdateFromVector(IssmDouble* vector, int name, int type){{{*/
+-void  Node::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromVector(int* vector, int name, int type){{{*/
+-void  Node::InputUpdateFromVector(int* vector, int name, int type){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromVector(bool* vector, int name, int type){{{*/
+-void  Node::InputUpdateFromVector(bool* vector, int name, int type){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){{{*/
+-void  Node::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){{{*/
+-void  Node::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromVectorDakota(int* vector, int name, int type){{{*/
+-void  Node::InputUpdateFromVectorDakota(int* vector, int name, int type){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromVectorDakota(bool* vector, int name, int type){{{*/
+-void  Node::InputUpdateFromVectorDakota(bool* vector, int name, int type){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromConstant(IssmDouble constant, int name){{{*/
+-void  Node::InputUpdateFromConstant(IssmDouble constant, int name){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromConstant(int constant, int name){{{*/
+-void  Node::InputUpdateFromConstant(int constant, int name){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Node::InputUpdateFromConstant(bool constant, int name){{{*/
+-void  Node::InputUpdateFromConstant(bool constant, int name){
+-
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+ /*FUNCTION Node::UpdateSpcs {{{*/
+ void   Node::UpdateSpcs(IssmDouble* ys){
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16125-16126.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16125-16126.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16125-16126.diff	(revision 16134)
@@ -0,0 +1,1138 @@
+Index: ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h	(revision 0)
++++ ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h	(revision 16126)
+@@ -0,0 +1,14 @@
++/*!\file:  AllocateSystemMatricesx.h
++*/ 
++
++#ifndef _ALLOCATESYSTEMMATRICESX_H
++#define _ALLOCATESYSTEMMATRICESX_H
++
++#include "../../classes/classes.h"
++
++/* local prototypes: */
++void AllocateSystemMatricesx(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf,FemModel* femmodel);
++void MatrixNonzeros(int** pd_nnz,int** po_nnz,FemModel* femmodel,int set1enum,int set2enum);
++
++
++#endif
+Index: ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 16126)
+@@ -0,0 +1,264 @@
++/*!\file AllocateSystemMatricesx
++ * \brief retrieve vector from inputs in elements
++ */
++
++#include "./AllocateSystemMatricesx.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++
++void AllocateSystemMatricesx(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf,FemModel* femmodel){
++
++	/*Intermediary*/
++	int  fsize,ssize,flocalsize,slocalsize;
++	int  connectivity, numberofdofspernode;
++	int  configuration_type;
++	int  m,n,M,N;
++	int *d_nnz = NULL;
++	int *o_nnz = NULL;
++
++	/*output*/
++	Matrix<IssmDouble> *Kff  = NULL;
++	Matrix<IssmDouble> *Kfs  = NULL;
++	Vector<IssmDouble> *pf   = NULL;
++	Vector<IssmDouble> *df   = NULL;
++
++	bool oldalloc=false;
++
++	/*retrieve parameters: */
++	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	femmodel->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
++
++	/*retrieve node info*/
++	fsize      = femmodel->nodes->NumberOfDofs(configuration_type,FsetEnum);
++	ssize      = femmodel->nodes->NumberOfDofs(configuration_type,SsetEnum);
++	flocalsize = femmodel->nodes->NumberOfDofsLocal(configuration_type,FsetEnum);
++	slocalsize = femmodel->nodes->NumberOfDofsLocal(configuration_type,SsetEnum);
++
++	numberofdofspernode=femmodel->nodes->MaxNumDofs(configuration_type,GsetEnum);
++
++	if(oldalloc){
++		if(pKff) Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
++		if(pKfs) Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
++		if(pdf)  df =new Vector<IssmDouble>(fsize);
++		if(ppf)  pf =new Vector<IssmDouble>(fsize);
++	}
++	else{
++		if(pKff){
++			m=flocalsize; n=flocalsize; /*local  sizes*/
++			M=fsize;      N=fsize;      /*global sizes*/
++			MatrixNonzeros(&d_nnz,&o_nnz,femmodel,FsetEnum,FsetEnum);
++			Kff=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
++			xDelete<int>(d_nnz);
++			xDelete<int>(o_nnz);
++		}
++		if(pKfs){
++			m=flocalsize; n=slocalsize; /*local  sizes*/
++			M=fsize;      N=ssize;      /*global sizes*/
++			MatrixNonzeros(&d_nnz,&o_nnz,femmodel,FsetEnum,SsetEnum);
++			Kfs=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
++			xDelete<int>(d_nnz);
++			xDelete<int>(o_nnz);
++		}
++		if(pdf) df =new Vector<IssmDouble>(flocalsize,fsize);
++		if(ppf) pf =new Vector<IssmDouble>(flocalsize,fsize);
++	}
++
++	/*Allocate output pointers*/
++	if(pKff) *pKff = Kff;
++	if(pKfs) *pKfs = Kfs;
++	if(pdf)  *pdf  = df;
++	if(ppf)  *ppf  = pf;
++}
++
++void MatrixNonzeros(int** pd_nnz,int** po_nnz,FemModel* femmodel,int set1enum,int set2enum){
++
++	/*Intermediary*/
++	int      i,j,k,index,offset,count;
++	int      configuration_type;
++	int      d_nz,o_nz;
++	Element *element            = NULL;
++	Load    *load               = NULL;
++	int     *head_e             = NULL;
++	int     *next_e             = NULL;
++	int     *count2offset_e     = NULL;
++	int     *head_l             = NULL;
++	int     *next_l             = NULL;
++	int     *count2offset_l     = NULL;
++	int     *lidlist            = NULL;
++
++	/*output*/
++	int *d_nnz = NULL;
++	int *o_nnz = NULL;
++
++	/*retrive parameters: */
++	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++
++	/*Get vector size and number of nodes*/
++	int numnodes            = femmodel->nodes->NumberOfNodes(configuration_type);
++	int localnumnodes       = femmodel->nodes->Size();
++	int numberofdofspernode = femmodel->nodes->MaxNumDofs(configuration_type,GsetEnum);
++	int M                   = femmodel->nodes->NumberOfDofs(configuration_type,set1enum);
++	int N                   = femmodel->nodes->NumberOfDofs(configuration_type,set2enum);
++	int m                   = femmodel->nodes->NumberOfDofsLocal(configuration_type,set1enum);
++	int n                   = femmodel->nodes->NumberOfDofsLocal(configuration_type,set2enum);
++	int numnodesperelement  = femmodel->elements->MaxNumNodes();
++	int numnodesperload     = femmodel->loads->MaxNumNodes(configuration_type);
++
++	/*First, we are building chaining vectors so that we know what nodes are
++	 * connected to what elements. These vectors are such that:
++	 *   for(int i=head[id];i!=-1;i=next[i])
++	 * will loop over all the elements that are connected to the node number
++	 * id*/
++	head_e         = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_e[i]=-1;
++	next_e         = xNew<int>(femmodel->elements->Size()*numnodesperelement);
++	count2offset_e = xNew<int>(femmodel->elements->Size()*numnodesperelement);
++
++	k=0;
++	for(i=0;i<femmodel->elements->Size();i++){
++		element = dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		lidlist = xNew<int>(element->GetNumberOfNodes());
++		element->GetNodesLidList(lidlist);
++
++		for(j=0;j<element->GetNumberOfNodes();j++){
++			index = lidlist[j];
++			_assert_(index>=0 && index<numnodes);
++
++			count2offset_e[k]=i;
++			next_e[k]=head_e[index];
++			head_e[index]=k++;
++		}
++		for(j=0;j<numnodesperelement-element->GetNumberOfNodes();j++) k++;
++
++		xDelete<int>(lidlist);
++	}
++
++	/*Chain for loads*/
++	head_l         = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_l[i]=-1;
++	next_l         = xNew<int>(femmodel->loads->Size(configuration_type)*numnodesperload);
++	count2offset_l = xNew<int>(femmodel->loads->Size(configuration_type)*numnodesperload);
++	k=0;
++	for(i=0;i<femmodel->loads->Size();i++){
++		load = dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i));
++		if(!load->InAnalysis(configuration_type)) continue;
++		lidlist = xNew<int>(load->GetNumberOfNodes());
++		load->GetNodesLidList(lidlist);
++
++		for(j=0;j<load->GetNumberOfNodes();j++){
++			index = lidlist[j];
++			_assert_(index>=0 && index<numnodes);
++
++			count2offset_l[k]=i;
++			next_l[k]=head_l[index];
++			head_l[index]=k++;
++		}
++		for(j=0;j<numnodesperload-load->GetNumberOfNodes();j++) k++;
++
++		xDelete<int>(lidlist);
++	}
++
++	/*OK now count number of dofs and flag each nodes for each node i*/
++	bool *flags                  = xNew<bool>(localnumnodes);
++	int  *flagsindices           = xNew<int>(localnumnodes);
++	int  *d_connectivity         = xNewZeroInit<int>(numnodes);
++	int  *o_connectivity         = xNewZeroInit<int>(numnodes);
++	int  *connectivity_clone     = xNewZeroInit<int>(numnodes);
++	int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
++
++	/*Resetting flags to false at eahc iteration takes a lot of time, so we keep track of the flags
++	 * to reset in flagsindices, initialized with -1*/
++	for(i = 0;i<localnumnodes;i++) flags[i]        = false;
++	for(i = 0;i<localnumnodes;i++) flagsindices[i] = -1;
++
++	/*Create connectivity vector*/
++	for(i=0;i<femmodel->nodes->Size();i++){
++		Node* node=dynamic_cast<Node*>(femmodel->nodes->GetObjectByOffset(i));
++		if(node->InAnalysis(configuration_type)){
++
++			/*Reinitialize flags to false*/
++			j=0;
++			while(true){
++				if(flagsindices[j]>=0){
++					flags[flagsindices[j]] = false;
++					flagsindices[j]        = -1;
++					j++;
++				}
++				else{
++					break;
++				}
++			}
++
++			//for(j=0;j<localnumnodes;j++) flags[j]=false;
++
++			/*Loop over elements that hold node number i*/
++			//if(head_e[node->Lid()]==-1 && head_l[node->Lid()]==-1){
++			//	printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Lid()+1);
++			//}
++			for(j=head_e[node->Lid()];j!=-1;j=next_e[j]){
++				offset=count2offset_e[j];
++				element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(offset));
++				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
++				if(node->IsClone()){
++					connectivity_clone[node->Sid()]+=d_nz+o_nz;
++				}
++				else{
++					d_connectivity[node->Sid()]+=d_nz;
++					o_connectivity[node->Sid()]+=o_nz;
++				}
++			}
++			for(j=head_l[node->Lid()];j!=-1;j=next_l[j]){
++				offset=count2offset_l[j];
++				load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(offset));
++				load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
++				if(node->IsClone()){
++					connectivity_clone[node->Sid()]+=d_nz+o_nz;
++				}
++				else{
++					d_connectivity[node->Sid()]+=d_nz;
++					o_connectivity[node->Sid()]+=o_nz;
++				}
++			}
++		}
++	}
++	xDelete<bool>(flags);
++	xDelete<int>(flagsindices);
++	xDelete<int>(count2offset_e);
++	xDelete<int>(head_e);
++	xDelete<int>(next_e);
++	xDelete<int>(count2offset_l);
++	xDelete<int>(head_l);
++	xDelete<int>(next_l);
++
++	/*sum over all cpus*/
++	ISSM_MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
++	xDelete<int>(connectivity_clone);
++
++	if(set1enum==FsetEnum){
++		count=0;
++		d_nnz=xNew<int>(m);
++		o_nnz=xNew<int>(m);
++		for(i=0;i<femmodel->nodes->Size();i++){
++			Node* node=dynamic_cast<Node*>(femmodel->nodes->GetObjectByOffset(i));
++			if(node->InAnalysis(configuration_type) && !node->IsClone()){
++				for(j=0;j<node->indexing.fsize;j++){
++					_assert_(count<m);
++					d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
++					o_nnz[count]=numberofdofspernode*(o_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
++					if(d_nnz[count]>n)   d_nnz[count]=n;
++					if(o_nnz[count]>N-n) o_nnz[count]=N-n;
++					count++;
++				}
++			}
++		}
++		_assert_(m==count);
++	}
++	else{
++		_error_("STOP not implemented");
++	}
++	xDelete<int>(d_connectivity);
++	xDelete<int>(o_connectivity);
++	xDelete<int>(all_connectivity_clone);
++
++	/*Allocate ouptput pointer*/
++	*pd_nnz=d_nnz;
++	*po_nnz=o_nnz;
++}
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 16125)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 16126)
+@@ -6,6 +6,7 @@
+ #define _ISSM_MODULES_H_
+ 
+ /*Modules: */
++#include "./AllocateSystemMatricesx/AllocateSystemMatricesx.h"
+ #include "./AverageFilterx/AverageFilterx.h"
+ #include "./AverageOntoPartitionx/AverageOntoPartitionx.h"
+ #include "./Bamgx/Bamgx.h"
+@@ -21,6 +22,7 @@
+ #include "./ControlInputSetGradientx/ControlInputSetGradientx.h"
+ #include "./ControlInputScaleGradientx/ControlInputScaleGradientx.h"
+ #include "./CreateNodalConstraintsx/CreateNodalConstraintsx.h"
++#include "./CreateJacobianMatrixx/CreateJacobianMatrixx.h"
+ #include "./Delta18oParameterizationx/Delta18oParameterizationx.h"
+ #include "./DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h"
+ #include "./ElementConnectivityx/ElementConnectivityx.h"
+@@ -87,6 +89,7 @@
+ #include "./Shp2Kmlx/Shp2Kmlx.h"
+ #include "./SmbGradientsx/SmbGradientsx.h"
+ #include "./Solverx/Solverx.h"
++#include "./SystemMatricesx/SystemMatricesx.h"
+ #include "./SpcNodesx/SpcNodesx.h"
+ #include "./SurfaceAreax/SurfaceAreax.h"
+ #include "./TriaSearchx/TriaSearchx.h"
+Index: ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.h	(revision 16125)
++++ ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.h	(revision 16126)
+@@ -9,11 +9,7 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-int Exp2Kmlx(char* filexp,char* filkml,
+-			 int sgn,
+-			 bool holes);
+-int Exp2Kmlx(char* filexp,char* filkml,
+-			 int sgn,double cm,double sp,
+-			 bool holes);
++int Exp2Kmlx(char* filexp,char* filkml,int sgn,bool holes);
++int Exp2Kmlx(char* filexp,char* filkml,int sgn,double cm,double sp,bool holes);
+ 
+ #endif  /* _EXP2KMLX_H */
+Index: ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 16126)
+@@ -0,0 +1,121 @@
++/*!\file SystemMatricesx
++ * \brief retrieve vector from inputs in elements
++ */
++
++#include "./SystemMatricesx.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++#include "../AllocateSystemMatricesx/AllocateSystemMatricesx.h"
++
++void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax,FemModel* femmodel){
++
++	/*intermediary: */
++	int      i,M,N;
++	int      configuration_type;
++	Element *element = NULL;
++	Load    *load    = NULL;
++
++	/*output: */
++	Matrix<IssmDouble> *Kff  = NULL;
++	Matrix<IssmDouble> *Kfs  = NULL;
++	Vector<IssmDouble> *pf   = NULL;
++	Vector<IssmDouble> *df   = NULL;
++	IssmDouble          kmax = 0;
++
++	/*Display message*/
++	if(VerboseModule()) _printf0_("   Generating matrices");
++
++	/*retrive parameters: */
++	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++
++	/*First, we might need to do a dry run to get kmax if penalties are employed*/
++	if(femmodel->loads->IsPenalty(configuration_type)){
++
++		/*Allocate Kff_temp*/
++		Matrix<IssmDouble> *Kff_temp = NULL;
++		AllocateSystemMatricesx(&Kff_temp,NULL,NULL,NULL,femmodel);
++
++		/*Get complete stiffness matrix without penalties*/
++		for (i=0;i<femmodel->elements->Size();i++){
++			element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++			element->CreateKMatrix(Kff_temp,NULL);
++		}
++
++		for (i=0;i<femmodel->loads->Size();i++){
++			load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i));
++			if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff_temp,NULL);
++		}
++		Kff_temp->Assemble();
++
++		/*Now, figure out maximum value of stiffness matrix, so that we can penalize it correctly: */
++		kmax=Kff_temp->Norm(NORM_INF);
++		delete Kff_temp;
++	}
++
++	/*Allocate stiffness matrices and load vector*/
++	AllocateSystemMatricesx(&Kff,&Kfs,&df,&pf,femmodel);
++
++	/*Display size*/
++	if(VerboseModule()){
++		Kff->GetSize(&M,&N);
++		_printf0_(" (Kff stiffness matrix size: "<<M<<" x "<<N<<")\n");
++	}
++
++	/*Fill stiffness matrix from elements and loads */
++	for (i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->CreateKMatrix(Kff,Kfs);
++	}
++
++	for (i=0;i<femmodel->loads->Size();i++){
++		load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i));
++		if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
++	}
++
++	/*Fill right hand side vector, from elements and loads */
++	for (i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->CreatePVector(pf);
++	}
++	for (i=0;i<femmodel->loads->Size();i++){
++		load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i));
++		if(load->InAnalysis(configuration_type)) load->CreatePVector(pf);
++	}
++
++	/*Now deal with penalties (only in loads)*/
++	if(femmodel->loads->IsPenalty(configuration_type)){
++		for (i=0;i<femmodel->loads->Size();i++){
++			load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i));
++			if(load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
++		}
++		for (i=0;i<femmodel->loads->Size();i++){
++			load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i));
++			if(load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
++		}
++	}
++
++	/*Create dof vector for stiffness matrix preconditioning*/
++	for (i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->CreateDVector(df);
++	}
++
++	/*Assemble matrices and vector*/
++	Kff->Assemble();
++	Kfs->Assemble();
++	pf->Assemble();
++	df->Assemble();
++	//Kff->AllocationInfo();
++	//Kfs->AllocationInfo();
++
++	/*Assign output pointers: */
++	if(pKff) *pKff=Kff;
++	else      delete Kff;
++	if(pKfs) *pKfs=Kfs;
++	else      delete Kfs;
++	if(ppf)  *ppf=pf;
++	else      delete pf;
++	if(pdf)  *pdf=df;
++	else      delete df;
++	if(pkmax) *pkmax=kmax;
++}
+Index: ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.h	(revision 0)
++++ ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.h	(revision 16126)
+@@ -0,0 +1,12 @@
++/*!\file:  SystemMatricesx.h
++*/ 
++
++#ifndef _SYSTEMMATRICESX_H
++#define _SYSTEMMATRICESX_H
++
++#include "../../classes/classes.h"
++
++/* local prototypes: */
++void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax,FemModel* femmodel);
++
++#endif  /* _SYSTEMMATRICESX_H */
+Index: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 16126)
+@@ -0,0 +1,46 @@
++/*!\file CreateJacobianMatrixx
++ * \brief retrieve vector from inputs in elements
++ */
++
++#include "./CreateJacobianMatrixx.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++#include "../AllocateSystemMatricesx/AllocateSystemMatricesx.h"
++
++void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,FemModel* femmodel,IssmDouble kmax){
++
++	int      i,connectivity;
++	int      numberofdofspernode;
++	int      fsize,configuration_type;
++	Element *element = NULL;
++	Load    *load    = NULL;
++	Matrix<IssmDouble>* Jff = NULL;
++
++	/*Checks*/
++	_assert_(femmodel && femmodel->nodes && femmodel->elements);
++
++	/*Recover some parameters*/
++	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	femmodel->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
++	fsize=femmodel->nodes->NumberOfDofs(configuration_type,FsetEnum);
++	numberofdofspernode=femmodel->nodes->MaxNumDofs(configuration_type,GsetEnum);
++
++	/*Initialize Jacobian Matrix*/
++	AllocateSystemMatricesx(&Jff,NULL,NULL,NULL,femmodel);
++
++	/*Create and assemble matrix*/
++	for(i=0;i<femmodel->elements->Size();i++){
++		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
++		element->CreateJacobianMatrix(Jff);
++	}
++	for (i=0;i<femmodel->loads->Size();i++){
++		load=(Load*)femmodel->loads->GetObjectByOffset(i);
++		if(load->InAnalysis(configuration_type)) load->CreateJacobianMatrix(Jff);
++		if(load->InAnalysis(configuration_type)) load->PenaltyCreateJacobianMatrix(Jff,kmax);
++	}
++	Jff->Assemble();
++
++	/*Assign output pointer*/
++	*pJff=Jff;
++
++}
+Index: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h	(revision 0)
++++ ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h	(revision 16126)
+@@ -0,0 +1,12 @@
++/*!\file:  CreateJacobianMatrixx.h
++*/ 
++
++#ifndef _CREATEJACOBIANMATRIXX_H
++#define _CREATEJACOBIANMATRIXX_H
++
++#include "../../classes/classes.h"
++
++/* local prototypes: */
++void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,FemModel* femmodel,IssmDouble kmax);
++
++#endif
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 16125)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 16126)
+@@ -78,7 +78,7 @@
+ 		sedconverged=false;
+ 		for(;;){
+ 			femmodel->HydrologyTransferx();
+-			femmodel->SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax);
++			SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax,femmodel);
+ 			CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum);
+ 			Reduceloadx(pf,Kfs,ys); delete Kfs;
+ 			delete uf_sed;
+@@ -122,7 +122,7 @@
+ 			eplconverged = false;
+ 			for(;;){
+ 				femmodel->HydrologyTransferx();
+-				femmodel->SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL);
++				SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 				CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
+ 				Reduceloadx(pf,Kfs,ys); delete Kfs;
+ 				delete uf_epl;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp	(revision 16125)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp	(revision 16126)
+@@ -23,7 +23,7 @@
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	femmodel->UpdateConstraintsx();
+ 
+-	femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
++	SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 	CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 	Reduceloadx(pf, Kfs, ys); delete Kfs;
+ 	Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); 
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 16125)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 16126)
+@@ -55,7 +55,7 @@
+ 
+ 		/*Solver forward model*/
+ 		if(count==1 || newton==2){
+-			femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
++			SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 			CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 			Reduceloadx(pf,Kfs,ys);delete Kfs;
+ 			Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);delete df; delete Kff; delete pf;
+@@ -67,7 +67,7 @@
+ 		uf=old_uf->Duplicate(); old_uf->Copy(uf);
+ 
+ 		/*Prepare next iteration using Newton's method*/
+-		femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);delete df;
++		SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);delete df;
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf,Kfs,ys);delete Kfs;
+ 
+@@ -75,7 +75,7 @@
+ 		Kff->MatMult(uf,pJf);
+ 		pJf->Scale(-1.0); pJf->AXPY(pf,+1.0);
+ 
+-		femmodel->CreateJacobianMatrixx(&Jff,kmax);
++		CreateJacobianMatrixx(&Jff,femmodel,kmax);
+ 		Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); delete Jff; delete pJf;
+ 		uf->AXPY(duf, 1.0); delete duf;
+ 		Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 16125)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 16126)
+@@ -60,7 +60,7 @@
+ 		delete old_uf_horiz; old_uf_horiz=uf_horiz;
+ 
+ 		/*solve: */
+-		femmodel->SystemMatricesx(&Kff_horiz, &Kfs_horiz, &pf_horiz, &df_horiz, NULL);
++		SystemMatricesx(&Kff_horiz, &Kfs_horiz, &pf_horiz, &df_horiz, NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf_horiz, Kfs_horiz, ys); delete Kfs_horiz;
+ 		Solverx(&uf_horiz, Kff_horiz, pf_horiz, old_uf_horiz, df_horiz,femmodel->parameters);
+@@ -74,7 +74,7 @@
+ 		femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+ 		/*solve: */
+-		femmodel->SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert,  &df_vert,NULL);
++		SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert, &df_vert,NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf_vert, Kfs_vert, ys); delete Kfs_vert;
+ 		Solverx(&uf_vert, Kff_vert, pf_vert, NULL, df_vert,femmodel->parameters); delete Kff_vert; delete pf_vert; delete df_vert;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 16125)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 16126)
+@@ -47,7 +47,7 @@
+ 	for(;;){
+ 
+ 		delete tf_old; tf_old=tf;
+-		femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset);
++		SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); delete Kfs;
+ 		Solverx(&tf, Kff, pf,tf_old, df, femmodel->parameters);
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp	(revision 16125)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp	(revision 16126)
+@@ -25,7 +25,7 @@
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	femmodel->UpdateConstraintsx();
+ 
+-	femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
++	SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL,femmodel);
+ 	CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 	Reduceloadx(pf, Kfs, ys,true); delete Kfs; //true means spc = 0
+ 	Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); delete Kff; delete pf; delete df;
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 16125)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 16126)
+@@ -59,7 +59,7 @@
+ 		delete old_uf;old_uf=uf;
+ 		delete ug;
+ 
+-		femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
++		SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); delete Kfs;
+ 		Solverx(&uf, Kff, pf, old_uf, df, femmodel->parameters);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16125)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16126)
+@@ -278,6 +278,12 @@
+ 					./modules/InputScalex/InputScalex.cpp\
+ 					./modules/SurfaceAreax/SurfaceAreax.h\
+ 					./modules/SurfaceAreax/SurfaceAreax.cpp\
++					./modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h\
++					./modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp\
++					./modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h\
++					./modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp\
++					./modules/SystemMatricesx/SystemMatricesx.h\
++					./modules/SystemMatricesx/SystemMatricesx.cpp\
+ 					./modules/CreateNodalConstraintsx/CreateNodalConstraintsx.h\
+ 					./modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp\
+ 					./modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.h\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16125)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16126)
+@@ -365,300 +365,6 @@
+ }
+ /*}}}*/
+ /*Modules:*/
+-void FemModel::AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf){ /*{{{*/
+-
+-	/*Intermediary*/
+-	int  fsize,ssize,flocalsize,slocalsize;
+-	int  connectivity, numberofdofspernode;
+-	int  configuration_type;
+-	int  m,n,M,N;
+-	int *d_nnz = NULL;
+-	int *o_nnz = NULL;
+-
+-	/*output*/
+-	Matrix<IssmDouble> *Kff  = NULL;
+-	Matrix<IssmDouble> *Kfs  = NULL;
+-	Vector<IssmDouble> *pf   = NULL;
+-	Vector<IssmDouble> *df   = NULL;
+-
+-	bool oldalloc=false;
+-
+-	/*retrieve parameters: */
+-	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	this->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+-
+-	/*retrieve node info*/
+-	fsize      = this->nodes->NumberOfDofs(configuration_type,FsetEnum);
+-	ssize      = this->nodes->NumberOfDofs(configuration_type,SsetEnum);
+-	flocalsize = this->nodes->NumberOfDofsLocal(configuration_type,FsetEnum);
+-	slocalsize = this->nodes->NumberOfDofsLocal(configuration_type,SsetEnum);
+-
+-	numberofdofspernode=this->nodes->MaxNumDofs(configuration_type,GsetEnum);
+-
+-	if(oldalloc){
+-		if(pKff) Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+-		if(pKfs) Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
+-		if(pdf)  df =new Vector<IssmDouble>(fsize);
+-		if(ppf)  pf =new Vector<IssmDouble>(fsize);
+-	}
+-	else{
+-		if(pKff){
+-			m=flocalsize; n=flocalsize; /*local  sizes*/
+-			M=fsize;      N=fsize;      /*global sizes*/
+-			this->MatrixNonzeros(&d_nnz,&o_nnz,FsetEnum,FsetEnum);
+-			Kff=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
+-			xDelete<int>(d_nnz);
+-			xDelete<int>(o_nnz);
+-		}
+-		if(pKfs){
+-			m=flocalsize; n=slocalsize; /*local  sizes*/
+-			M=fsize;      N=ssize;      /*global sizes*/
+-			this->MatrixNonzeros(&d_nnz,&o_nnz,FsetEnum,SsetEnum);
+-			Kfs=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
+-			xDelete<int>(d_nnz);
+-			xDelete<int>(o_nnz);
+-		}
+-		if(pdf) df =new Vector<IssmDouble>(flocalsize,fsize);
+-		if(ppf) pf =new Vector<IssmDouble>(flocalsize,fsize);
+-	}
+-
+-	/*Allocate output pointers*/
+-	if(pKff) *pKff = Kff;
+-	if(pKfs) *pKfs = Kfs;
+-	if(pdf)  *pdf  = df;
+-	if(ppf)  *ppf  = pf;
+-}
+-/*}}}*/
+-void FemModel::MatrixNonzeros(int** pd_nnz,int** po_nnz,int set1enum,int set2enum){/*{{{*/
+-
+-	/*Intermediary*/
+-	int      i,j,k,index,offset,count;
+-	int      configuration_type;
+-	int      d_nz,o_nz;
+-	Element *element            = NULL;
+-	Load    *load               = NULL;
+-	int     *head_e             = NULL;
+-	int     *next_e             = NULL;
+-	int     *count2offset_e     = NULL;
+-	int     *head_l             = NULL;
+-	int     *next_l             = NULL;
+-	int     *count2offset_l     = NULL;
+-	int     *lidlist            = NULL;
+-
+-	/*output*/
+-	int *d_nnz = NULL;
+-	int *o_nnz = NULL;
+-
+-	/*retrive parameters: */
+-	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-
+-	/*Get vector size and number of nodes*/
+-	int numnodes            = nodes->NumberOfNodes(configuration_type);
+-	int localnumnodes       = nodes->Size();
+-	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
+-	int M                   = nodes->NumberOfDofs(configuration_type,set1enum);
+-	int N                   = nodes->NumberOfDofs(configuration_type,set2enum);
+-	int m                   = nodes->NumberOfDofsLocal(configuration_type,set1enum);
+-	int n                   = nodes->NumberOfDofsLocal(configuration_type,set2enum);
+-	int numnodesperelement  = elements->MaxNumNodes();
+-	int numnodesperload     = loads->MaxNumNodes(configuration_type);
+-
+-	/*First, we are building chaining vectors so that we know what nodes are
+-	 * connected to what elements. These vectors are such that:
+-	 *   for(int i=head[id];i!=-1;i=next[i])
+-	 * will loop over all the elements that are connected to the node number
+-	 * id*/
+-	head_e         = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_e[i]=-1;
+-	next_e         = xNew<int>(elements->Size()*numnodesperelement);
+-	count2offset_e = xNew<int>(elements->Size()*numnodesperelement);
+-
+-	k=0;
+-	for(i=0;i<elements->Size();i++){
+-		element = dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		lidlist = xNew<int>(element->GetNumberOfNodes());
+-		element->GetNodesLidList(lidlist);
+-
+-		for(j=0;j<element->GetNumberOfNodes();j++){
+-			index = lidlist[j];
+-			_assert_(index>=0 && index<numnodes);
+-
+-			count2offset_e[k]=i;
+-			next_e[k]=head_e[index];
+-			head_e[index]=k++;
+-		}
+-		for(j=0;j<numnodesperelement-element->GetNumberOfNodes();j++) k++;
+-
+-		xDelete<int>(lidlist);
+-	}
+-
+-	/*Chain for loads*/
+-	head_l         = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_l[i]=-1;
+-	next_l         = xNew<int>(loads->Size(configuration_type)*numnodesperload);
+-	count2offset_l = xNew<int>(loads->Size(configuration_type)*numnodesperload);
+-	k=0;
+-	for(i=0;i<loads->Size();i++){
+-		load = dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+-		if(!load->InAnalysis(configuration_type)) continue;
+-		lidlist = xNew<int>(load->GetNumberOfNodes());
+-		load->GetNodesLidList(lidlist);
+-
+-		for(j=0;j<load->GetNumberOfNodes();j++){
+-			index = lidlist[j];
+-			_assert_(index>=0 && index<numnodes);
+-
+-			count2offset_l[k]=i;
+-			next_l[k]=head_l[index];
+-			head_l[index]=k++;
+-		}
+-		for(j=0;j<numnodesperload-load->GetNumberOfNodes();j++) k++;
+-
+-		xDelete<int>(lidlist);
+-	}
+-
+-	/*OK now count number of dofs and flag each nodes for each node i*/
+-	bool *flags                  = xNew<bool>(localnumnodes);
+-	int  *flagsindices           = xNew<int>(localnumnodes);
+-	int  *d_connectivity         = xNewZeroInit<int>(numnodes);
+-	int  *o_connectivity         = xNewZeroInit<int>(numnodes);
+-	int  *connectivity_clone     = xNewZeroInit<int>(numnodes);
+-	int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
+-
+-	/*Resetting flags to false at eahc iteration takes a lot of time, so we keep track of the flags
+-	 * to reset in flagsindices, initialized with -1*/
+-	for(i = 0;i<localnumnodes;i++) flags[i]        = false;
+-	for(i = 0;i<localnumnodes;i++) flagsindices[i] = -1;
+-
+-	/*Create connectivity vector*/
+-	for(i=0;i<nodes->Size();i++){
+-		Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
+-		if(node->InAnalysis(configuration_type)){
+-
+-			/*Reinitialize flags to false*/
+-			j=0;
+-			while(true){
+-				if(flagsindices[j]>=0){
+-					flags[flagsindices[j]] = false;
+-					flagsindices[j]        = -1;
+-					j++;
+-				}
+-				else{
+-					break;
+-				}
+-			}
+-
+-			//for(j=0;j<localnumnodes;j++) flags[j]=false;
+-
+-			/*Loop over elements that hold node number i*/
+-			//if(head_e[node->Lid()]==-1 && head_l[node->Lid()]==-1){
+-			//	printf("[%i] vertex %i\n",IssmComm::GetRank(),node->Lid()+1);
+-			//}
+-			for(j=head_e[node->Lid()];j!=-1;j=next_e[j]){
+-				offset=count2offset_e[j];
+-				element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset));
+-				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
+-				if(node->IsClone()){
+-					connectivity_clone[node->Sid()]+=d_nz+o_nz;
+-				}
+-				else{
+-					d_connectivity[node->Sid()]+=d_nz;
+-					o_connectivity[node->Sid()]+=o_nz;
+-				}
+-			}
+-			for(j=head_l[node->Lid()];j!=-1;j=next_l[j]){
+-				offset=count2offset_l[j];
+-				load=dynamic_cast<Load*>(loads->GetObjectByOffset(offset));
+-				load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,set1enum,set2enum);
+-				if(node->IsClone()){
+-					connectivity_clone[node->Sid()]+=d_nz+o_nz;
+-				}
+-				else{
+-					d_connectivity[node->Sid()]+=d_nz;
+-					o_connectivity[node->Sid()]+=o_nz;
+-				}
+-			}
+-		}
+-	}
+-	xDelete<bool>(flags);
+-	xDelete<int>(flagsindices);
+-	xDelete<int>(count2offset_e);
+-	xDelete<int>(head_e);
+-	xDelete<int>(next_e);
+-	xDelete<int>(count2offset_l);
+-	xDelete<int>(head_l);
+-	xDelete<int>(next_l);
+-
+-	/*sum over all cpus*/
+-	ISSM_MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+-	xDelete<int>(connectivity_clone);
+-
+-	if(set1enum==FsetEnum){
+-		count=0;
+-		d_nnz=xNew<int>(m);
+-		o_nnz=xNew<int>(m);
+-		for(i=0;i<nodes->Size();i++){
+-			Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
+-			if(node->InAnalysis(configuration_type) && !node->IsClone()){
+-				for(j=0;j<node->indexing.fsize;j++){
+-					_assert_(count<m);
+-					d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
+-					o_nnz[count]=numberofdofspernode*(o_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
+-					if(d_nnz[count]>n)   d_nnz[count]=n;
+-					if(o_nnz[count]>N-n) o_nnz[count]=N-n;
+-					count++;
+-				}
+-			}
+-		}
+-		_assert_(m==count);
+-	}
+-	else{
+-		_error_("STOP not implemented");
+-	}
+-	xDelete<int>(d_connectivity);
+-	xDelete<int>(o_connectivity);
+-	xDelete<int>(all_connectivity_clone);
+-
+-	/*Allocate ouptput pointer*/
+-	*pd_nnz=d_nnz;
+-	*po_nnz=o_nnz;
+-
+-}/*}}}*/
+-void FemModel::CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,IssmDouble kmax){/*{{{*/
+-
+-	int      i,connectivity;
+-	int      numberofdofspernode;
+-	int      fsize,configuration_type;
+-	Element *element = NULL;
+-	Load    *load    = NULL;
+-	Matrix<IssmDouble>* Jff = NULL;
+-
+-	/*Checks*/
+-	_assert_(nodes && elements);
+-
+-	/*Recover some parameters*/
+-	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+-	fsize=nodes->NumberOfDofs(configuration_type,FsetEnum);
+-	numberofdofspernode=nodes->MaxNumDofs(configuration_type,GsetEnum);
+-
+-	/*Initialize Jacobian Matrix*/
+-	this->AllocateSystemMatrices(&Jff,NULL,NULL,NULL);
+-
+-	/*Create and assemble matrix*/
+-	for(i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->CreateJacobianMatrix(Jff);
+-	}
+-	for (i=0;i<loads->Size();i++){
+-		load=(Load*)loads->GetObjectByOffset(i);
+-		if(load->InAnalysis(configuration_type)) load->CreateJacobianMatrix(Jff);
+-		if(load->InAnalysis(configuration_type)) load->PenaltyCreateJacobianMatrix(Jff,kmax);
+-	}
+-	Jff->Assemble();
+-
+-	/*Assign output pointer*/
+-	*pJff=Jff;
+-
+-}/*}}}*/
+ int  FemModel::UpdateVertexPositionsx(void){ /*{{{*/
+ 
+ 	int     i;
+@@ -844,119 +550,6 @@
+ 	}
+ }
+ /*}}}*/
+-void FemModel::SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax){/*{{{*/
+-
+-	/*intermediary: */
+-	int      i,M,N;
+-	int      configuration_type;
+-	Element *element = NULL;
+-	Load    *load    = NULL;
+-
+-	/*output: */
+-	Matrix<IssmDouble> *Kff  = NULL;
+-	Matrix<IssmDouble> *Kfs  = NULL;
+-	Vector<IssmDouble> *pf   = NULL;
+-	Vector<IssmDouble> *df   = NULL;
+-	IssmDouble          kmax = 0;
+-
+-	/*Display message*/
+-	if(VerboseModule()) _printf0_("   Generating matrices");
+-
+-	/*retrive parameters: */
+-	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-
+-	/*First, we might need to do a dry run to get kmax if penalties are employed*/
+-	if(loads->IsPenalty(configuration_type)){
+-
+-		/*Allocate Kff_temp*/
+-		Matrix<IssmDouble> *Kff_temp = NULL;
+-		this->AllocateSystemMatrices(&Kff_temp,NULL,NULL,NULL);
+-
+-		/*Get complete stiffness matrix without penalties*/
+-		for (i=0;i<this->elements->Size();i++){
+-			element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+-			element->CreateKMatrix(Kff_temp,NULL);
+-		}
+-
+-		for (i=0;i<this->loads->Size();i++){
+-			load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-			if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff_temp,NULL);
+-		}
+-		Kff_temp->Assemble();
+-
+-		/*Now, figure out maximum value of stiffness matrix, so that we can penalize it correctly: */
+-		kmax=Kff_temp->Norm(NORM_INF);
+-		delete Kff_temp;
+-	}
+-
+-	/*Allocate stiffness matrices and load vector*/
+-	this->AllocateSystemMatrices(&Kff,&Kfs,&df,&pf);
+-
+-	/*Display size*/
+-	if(VerboseModule()){
+-		Kff->GetSize(&M,&N);
+-		_printf0_(" (Kff stiffness matrix size: "<<M<<" x "<<N<<")\n");
+-	}
+-
+-	/*Fill stiffness matrix from elements and loads */
+-	for (i=0;i<this->elements->Size();i++){
+-		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+-		element->CreateKMatrix(Kff,Kfs);
+-	}
+-
+-	for (i=0;i<this->loads->Size();i++){
+-		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-		if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
+-	}
+-
+-	/*Fill right hand side vector, from elements and loads */
+-	for (i=0;i<this->elements->Size();i++){
+-		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+-		element->CreatePVector(pf);
+-	}
+-	for (i=0;i<this->loads->Size();i++){
+-		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-		if(load->InAnalysis(configuration_type)) load->CreatePVector(pf);
+-	}
+-
+-	/*Now deal with penalties (only in loads)*/
+-	if(loads->IsPenalty(configuration_type)){
+-		for (i=0;i<this->loads->Size();i++){
+-			load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-			if(load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
+-		}
+-		for (i=0;i<this->loads->Size();i++){
+-			load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-			if(load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
+-		}
+-	}
+-
+-	/*Create dof vector for stiffness matrix preconditioning*/
+-	for (i=0;i<this->elements->Size();i++){
+-		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+-		element->CreateDVector(df);
+-	}
+-
+-	/*Assemble matrices and vector*/
+-	Kff->Assemble();
+-	Kfs->Assemble();
+-	pf->Assemble();
+-	df->Assemble();
+-	//Kff->AllocationInfo();
+-	//Kfs->AllocationInfo();
+-
+-	/*Assign output pointers: */
+-	if(pKff) *pKff=Kff;
+-	else      delete Kff;
+-	if(pKfs) *pKfs=Kfs;
+-	else      delete Kfs;
+-	if(ppf)  *ppf=pf;
+-	else      delete pf;
+-	if(pdf)  *pdf=df;
+-	else      delete df;
+-	if(pkmax) *pkmax=kmax;
+-}
+-/*}}}*/
+ void FemModel::TimeAdaptx(IssmDouble* pdt){/*{{{*/
+ 
+ 	int      i;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16125)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16126)
+@@ -50,11 +50,8 @@
+ 		~FemModel();
+ 
+ 		/*Methods:*/
+-		void AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf);
+-		void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,IssmDouble kmax);
+ 		void Echo();
+ 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+-		void MatrixNonzeros(int** pd_nnz,int** po_nnz,int set1enum,int set2enum);
+ 		void Solve(void);
+ 		void OutputResults(void);
+ 		void SetStaticComm();
+@@ -94,7 +91,6 @@
+ 		#ifdef _HAVE_GIA_
+ 		void Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y);
+ 		#endif
+-		void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax);
+ 		void TimeAdaptx(IssmDouble* pdt);
+ 		void UpdateConstraintsx(void);
+ 		int  UpdateVertexPositionsx(void);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16126-16127.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16126-16127.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16126-16127.diff	(revision 16134)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/analyses/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 16126)
++++ ../trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 16127)
+@@ -176,8 +176,11 @@
+ 
+ 		// Instantiate/initialize the parallel library and problem description
+ 		// database objects.
+-		Dakota::ParallelLibrary parallel_lib("serial"); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 
++		char* dakotamode=xNew<char>(strlen("serial")+1);
++		xMemCpy<char>(dakotamode,"serial",strlen("serial")+1);
++		Dakota::ParallelLibrary parallel_lib(dakotamode); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 
+ 		Dakota::ProblemDescDB problem_db(parallel_lib); 
++		xDelete<char>(dakotamode);
+ 
+ 		// Manage input file parsing, output redirection, and restart processing
+ 		// without a CommandLineHandler.  This version relies on parsing of an
Index: /issm/oecreview/Archive/15392-16133/ISSM-16127-16128.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16127-16128.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16127-16128.diff	(revision 16134)
@@ -0,0 +1,55 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 16127)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 16128)
+@@ -1,9 +1,11 @@
+ AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@ @AMPIINCL@
+-
+ #AUTOMAKE_OPTIONS = subdir-objects
+ 
+ EXEEXT=$(PYTHONWRAPPEREXT)
+ 
++#define prefix (from http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Defining-Directories.html)
++AM_CPPFLAGS+=  -DISSM_PREFIX='"$(prefix)"'
++
+ #python io{{{
+ lib_LIBRARIES = libISSMPython.a 
+ if SHAREDLIBS
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 16127)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 16128)
+@@ -3,6 +3,9 @@
+ 
+ EXEEXT=$(MATLABWRAPPEREXT)
+ 
++#define prefix (from http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Defining-Directories.html)
++AM_CPPFLAGS+=  -DISSM_PREFIX='"$(prefix)"'
++
+ #matlab io{{{
+ lib_LIBRARIES = libISSMMatlab.a 
+ if SHAREDLIBS
+@@ -18,6 +21,7 @@
+ 				./io/FetchMatlabData.cpp
+ 
+ ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_ -D_WRAPPERS_ $(CXXFLAGS) $(CXXOPTFLAGS) 
++
+ libISSMMatlab_a_SOURCES = $(io_sources)
+ libISSMMatlab_a_CXXFLAGS= $(ALLCXXFLAGS)
+ if SHAREDLIBS
+Index: ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 16127)
++++ ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 16128)
+@@ -77,6 +77,11 @@
+ 		_error_("_DAKOTA_VERSION_ not found in config.h");
+ 		#endif
+ 	}
++	else if(strcmp(name,"ISSM_PREFIX")==0){
++		isstring = true;
++		svalue =xNew<char>(strlen(ISSM_PREFIX)+1);
++		xMemCpy<char>(svalue,ISSM_PREFIX,(strlen(ISSM_PREFIX)+1));
++	}
+ 	else{
+ 		_error_("variable " << name << " not supported yet");
+ 	}
Index: /issm/oecreview/Archive/15392-16133/ISSM-16128-16129.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16128-16129.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16128-16129.diff	(revision 16134)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16128)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16129)
+@@ -389,7 +389,7 @@
+ 						else{
+ 							if(fread(&pscalar,sizeof(IssmPDouble),1,this->fid)!=1) _error_("could not read scalar ");
+ 							ISSM_MPI_Bcast(&pscalar,1,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+-							scalar=reCast<IssmDouble>(pscalar);
++							scalar=pscalar;
+ 						}
+ 
+ 						/*create DoubleParam: */
+@@ -489,8 +489,8 @@
+ 					break;
+ 				case 3:
+ 					/*scalar. get it from cpu 0 */
+-					ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+-
++					ISSM_MPI_Bcast(&pscalar,1,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
++					scalar=pscalar;
+ 					/*create DoubleParam: */
+ 					this->constants->AddObject(new DoubleParam(record_enum,scalar));
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16129-16130.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16129-16130.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16129-16130.diff	(revision 16134)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16129)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16130)
+@@ -367,11 +367,9 @@
+ /*Modules:*/
+ int  FemModel::UpdateVertexPositionsx(void){ /*{{{*/
+ 
+-	int     i;
+-	Vector<IssmDouble>*     vz        = NULL;
+-	Vertex *vertex    = NULL;
+-	IssmDouble *thickness = NULL;
+-	IssmDouble *bed       = NULL;
++	Vector<IssmDouble> *vz        = NULL;
++	IssmDouble         *thickness = NULL;
++	IssmDouble         *bed       = NULL;
+ 
+ 	/*get vertex vectors for bed and thickness: */
+ 	GetVectorFromInputsx(&thickness,this, ThicknessEnum,VertexEnum);
+@@ -381,8 +379,8 @@
+ 	vz=new Vector<IssmDouble>(vertices->NumberOfVertices());
+ 
+ 	/*Update verices new geometry: */
+-	for (i=0;i<vertices->Size();i++){
+-		vertex=(Vertex*)vertices->GetObjectByOffset(i);
++	for(int i=0;i<vertices->Size();i++){
++		Vertex* vertex=(Vertex*)vertices->GetObjectByOffset(i);
+ 		vertex->UpdatePosition(vz,parameters,thickness,bed);
+ 	}
+ 
Index: /issm/oecreview/Archive/15392-16133/ISSM-16130-16131.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16130-16131.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16130-16131.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16130)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16131)
+@@ -298,7 +298,7 @@
+ 			xDelete(anEDF_for_solverx_p->dpp_Z);
+ 
+ 			/*Print statistics:*/
+-			tapestats(1,tape_stats); //reading of tape statistics
++			tapestats(my_rank,tape_stats); //reading of tape statistics
+ 			if(VerboseAutodiff()){
+ 				_printf0_("   ADOLC statistics: \n");
+ 				_printf0_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0] << "\n");
Index: /issm/oecreview/Archive/15392-16133/ISSM-16131-16132.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16131-16132.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16131-16132.diff	(revision 16134)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16131)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16132)
+@@ -261,7 +261,6 @@
+     packedDimsSparseArr[3+i]=irn_loc[i];
+     packedDimsSparseArr[3+local_nnz+i]=jcn_loc[i];
+   }
+-  ensureContiguousLocations(local_nnz+n);
+   IssmDouble *pack_A_rhs=xNew<IssmDouble>(local_nnz+n);
+   for (int i=0;i<local_nnz;++i) { 
+     pack_A_rhs[i]=a_loc[i];
+@@ -271,7 +270,6 @@
+   }
+   IssmPDouble *passivePack_A_rhs=xNew<IssmPDouble>(local_nnz+n);
+   IssmPDouble *passiveSol=xNew<IssmPDouble>(n);
+-  ensureContiguousLocations(n);
+   IssmDouble *sol=xNew<IssmDouble>(n);
+   call_ext_fct(dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p,
+ 	       packedDimsSparseArrLength, packedDimsSparseArr,
+@@ -301,7 +299,7 @@
+   for (int i=0;i<local_nnz;++i) {
+ 	  local_irn[i]=iArr[3+i];
+ 	  local_jcn[i]=iArr[3+local_nnz+i];
+-    a_loc[i]=dp_x[i];
++	  a_loc[i]=dp_x[i];
+   }
+   IssmPDouble *rhs_sol=xNew<IssmPDouble>(n);
+   for (int i=0;i<n;++i) { 
+@@ -325,12 +323,16 @@
+   MumpsBacksubstitute(theMumpsStruc);
+   MumpsFinalize(theMumpsStruc);
+   // update the adjoint of the rhs:
+-  for (int i=0;i<m;++i) { 
++  for (int i=0;i<n;++i) {
+     dp_Z[local_nnz+i]+=rhs_sol[i];
+   }
+-  // update the adjoint of the matrix: 
++  // bcast dp_y (the solution of the forward system)
++  ISSM_MPI_Bcast(dp_y,n,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
++  // bcast the adjoint of the right-hand-side, i.e. this solution
++  ISSM_MPI_Bcast(rhs_sol,n,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
++  // update the adjoint of the matrix with the outer product of right-hand-side adjoint and the original solution
+   for (int i=0;i<local_nnz;++i) {
+-    dp_Z[i]+=-dp_U[local_irn[i]-1]*dp_y[local_jcn[i]-1];
++    dp_Z[i]-=rhs_sol[iArr[3+i]-1]*dp_y[iArr[3+local_nnz+i]-1];
+   }
+   xDelete(rhs_sol);
+   xDelete(a_loc);
Index: /issm/oecreview/Archive/15392-16133/ISSM-16132-16133.diff
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-16132-16133.diff	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-16132-16133.diff	(revision 16134)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 16132)
++++ ../trunk-jpl/configure.ac	(revision 16133)
+@@ -1,7 +1,7 @@
+ # Process this file with autoconf to produce a configure script.
+ 
+ #AUTOCONF
+-AC_INIT([ISSM],[4.3],[issm@jpl.nasa.gov],[issm],[http://issm.jpl.nasa.gov]) #Initializing configure
++AC_INIT([ISSM],[4.4],[issm@jpl.nasa.gov],[issm],[http://issm.jpl.nasa.gov]) #Initializing configure
+ AC_CONFIG_AUX_DIR([./aux-config])         #Put config files in aux-config
+ AC_CONFIG_MACRO_DIR([m4])                 #m4 macros are located in m4
+ m4_include([m4/issm_options.m4])
Index: /issm/oecreview/Archive/15392-16133/ISSM-DocReview-15392-16133.tex
===================================================================
--- /issm/oecreview/Archive/15392-16133/ISSM-DocReview-15392-16133.tex	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/ISSM-DocReview-15392-16133.tex	(revision 16134)
@@ -0,0 +1,67 @@
+\documentclass[]{report}   % list options between brackets
+\usepackage{graphicx}              % list packages between braces
+
+% type user-defined commands here
+
+\begin{document}
+
+\title{JPL EXPORT ADMINISTRATION \\ DOCUMENT REVIEW RECORD}   % type title between braces
+\author{Tom Scavo}         % type author(s) between braces
+\date{October 27, 1995}    % type date between braces
+%\maketitle
+
+
+\begin{center}
+\begin{tabular}{ |c|c| }
+\hline
+JPL EXPORT ADMINISTRATION \\
+\textit{ DOCUMENT REVIEW RECORD} \\
+\hline
+\end{tabular}
+\end{center}
+
+\hfill Log \#: \underline{\input{LogNumber}}
+
+\vspace{1cm}
+\noindent (Note: This form and process do not replace the procedures described in JPL Policy relating to review and approval of proposals and contractual 
+documents. This process is intended to document the review and coordination of requests to ascertain the export control ramifications relating to specific 
+documents. Export Administration signature does not convey authority to export or release the "Exporter of Record" from any export laws or regulations.)\\
+
+\noindent \textbf{Program:} \underline{ISSM: Ice Sheet System Model} \\ \\
+\noindent \textbf{Person Requesting or Initiating Export}: \underline{Dr. Eric Larour}\\ \\
+\noindent \textbf{Date Received}: \underline{\input{Date}}\\ \\
+\noindent \textbf{Document Title/Description}: ISSM changes from revision \input{r1} to revision \input{r2} \\ \\
+\noindent \textbf{Release to:} \underline{http://issm.ess.uci.edu/svn/issm/issm/trunk on ISSM svn repository}\\ \\
+\noindent \textbf{JPL Intranet:} \underline{murdo.jpl.nasa.gov/proj/ice/larour/issm-uci/trunk-jpl}\\ \\
+
+\noindent \textbf{Disposition: 6 } 
+Does not contain export-controlled information. May be released/disclosed as requested subject to 
+Company guidelines on protection of proprietary information (if applicable). \\
+
+\noindent \textbf{Comments:}  see table of changes below. \\ \\
+\noindent \textbf{Reviewed by ISSM Export Transfer Liaison:} Dr. Eric Larour \hfill \textbf{Date:} \input{Date} \\ 
+\includegraphics[scale=1]{signature}
+
+\noindent JPL Export Administration Form TBS – June 29, 2011
+
+\begin{center}
+\line(1,0){250}
+\end{center}
+
+\noindent \textbf{Disposition:} \\
+1:	  Public Domain Information (Ref ITAR Section 120.11) \\
+2:	  Qualifies for ITAR Exemption				 \\
+3:	  Covered by Department of State License/Agreement Number					  \\
+4:	  Covered by Department of Commerce validated license or exception				 \\
+5:	  New License Required \\
+6:	  Does not contain export-controlled information.  May be released/disclosed as requested subject
+   to Company guidelines on protection of proprietary information (if applicable). \\
+7:	 Other (specify)   
+\begin{center}
+\line(1,0){250}
+\end{center}
+
+
+\input{log}
+
+\end{document}
Index: /issm/oecreview/Archive/15392-16133/LogNumber.tex
===================================================================
--- /issm/oecreview/Archive/15392-16133/LogNumber.tex	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/LogNumber.tex	(revision 16134)
@@ -0,0 +1,1 @@
+15392-16133
Index: /issm/oecreview/Archive/15392-16133/Makefile
===================================================================
--- /issm/oecreview/Archive/15392-16133/Makefile	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/Makefile	(revision 16134)
@@ -0,0 +1,8 @@
+TARGET=ISSM-DocReview-15392-16133
+
+all: 
+	pdflatex -interaction=errorstopmode -file-line-error -halt-on-error $(TARGET).tex
+	rm -rf *.log *.aux 
+
+clean:
+	rm -rf *.log *.aux
Index: /issm/oecreview/Archive/15392-16133/log.tex
===================================================================
--- /issm/oecreview/Archive/15392-16133/log.tex	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/log.tex	(revision 16134)
@@ -0,0 +1,5117 @@
+\noindent \textbf{Change \#1} with diff file ISSM-15392-15393.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configure.ac\\
+Export determination: 6. \\
+Rationale: CHG: increasing version number before syncing trunk\\
+\vspace{3em}
+
+\noindent \textbf{Change \#2} with diff file ISSM-15395-15396.diff: \\
+Function name: \\
+M /issm/trunk-jpl\\
+Export determination: 6. \\
+Rationale: merged trunk and trunk-jpl\\
+\vspace{3em}
+
+\noindent \textbf{Change \#3} with diff file ISSM-15397-15398.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/src M /issm/trunk-jpl/test\\
+Export determination: 6. \\
+Rationale: Block revision 15396 from being merged into trunk-jpl\\
+\vspace{3em}
+
+\noindent \textbf{Change \#4} with diff file ISSM-15398-15399.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/dox/issm.dox\\
+Export determination: 6. \\
+Rationale: CHG: updating number of lines of code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#5} with diff file ISSM-15399-15400.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_gridded.m\\
+Export determination: 6. \\
+Rationale: CHG: always force colormap when plot\_gridded is on, and do not add white\\
+\vspace{3em}
+
+\noindent \textbf{Change \#6} with diff file ISSM-15400-15401.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_gridded.m\\
+Export determination: 6. \\
+Rationale: CHG: default color should be white\\
+\vspace{3em}
+
+\noindent \textbf{Change \#7} with diff file ISSM-15401-15402.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Icefront.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/mask.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/IcelevelsetEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m\\
+Export determination: 6. \\
+Rationale: NEW: start to work on dynamic ice front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#8} with diff file ISSM-15403-15404.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: FIX: trying to fix python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#9} with diff file ISSM-15404-15405.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/cloud.m M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: update to write output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#10} with diff file ISSM-15405-15406.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: revert pfe\\
+\vspace{3em}
+
+\noindent \textbf{Change \#11} with diff file ISSM-15406-15407.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: FIX: temporary minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#12} with diff file ISSM-15407-15408.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: BUG:Solving some memory leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#13} with diff file ISSM-15408-15409.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: FIX: fixed python mask\\
+\vspace{3em}
+
+\noindent \textbf{Change \#14} with diff file ISSM-15409-15410.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: BUG: Fixing Memory Leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#15} with diff file ISSM-15410-15411.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: BUG:Leak Fixing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#16} with diff file ISSM-15411-15412.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: FIX: mask hopefully working in python now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#17} with diff file ISSM-15412-15413.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: BUG:fixing Leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#18} with diff file ISSM-15413-15414.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.m\\
+Export determination: 6. \\
+Rationale: FIX: do not use last two columns of icefront\\
+\vspace{3em}
+
+\noindent \textbf{Change \#19} with diff file ISSM-15414-15415.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/hydrologydc.m A /issm/trunk-jpl/src/m/contrib/paraview/exportVTK.m D /issm/trunk-jpl/src/m/contrib/paraview/writeVTKcell.m\\
+Export determination: 6. \\
+Rationale: CHG:change of the vtk eport routine name\\
+\vspace{3em}
+
+\noindent \textbf{Change \#20} with diff file ISSM-15415-15416.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#21} with diff file ISSM-15416-15417.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/tai M /issm/trunk-jpl/scripts/vil\\
+Export determination: 6. \\
+Rationale: CHG: tai works even if EXECUTION\_DIR is undefined\\
+\vspace{3em}
+
+\noindent \textbf{Change \#22} with diff file ISSM-15417-15418.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Inputs/CMakeLists.txt M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp A /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp (from /issm/trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp:15409) A /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h (from /issm/trunk-jpl/src/c/classes/Inputs/PentaP1Input.h:15409) D /issm/trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp D /issm/trunk-jpl/src/c/classes/Inputs/PentaP1Input.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed PentaP1Input and created PentaInput for quadratic elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#23} with diff file ISSM-15418-15419.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/PentaInputEnum.m A /issm/trunk-jpl/src/m/enum/QmuMaterialsRheologyBEnum.m A /issm/trunk-jpl/src/m/enum/QmuVxMeshEnum.m A /issm/trunk-jpl/src/m/enum/QmuVyMeshEnum.m A /issm/trunk-jpl/src/m/enum/QmuVzMeshEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: sync'ed Enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#24} with diff file ISSM-15419-15420.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h\\
+Export determination: 6. \\
+Rationale: CHG: elements and edges are now permanent fields for IoModel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#25} with diff file ISSM-15420-15421.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/FlowequationFeStokesEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m\\
+Export determination: 6. \\
+Rationale: NEW: starting stokes stabilization implementation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#26} with diff file ISSM-15421-15422.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moved Element and Vertex partitioning to CreateDataSets\\
+\vspace{3em}
+
+\noindent \textbf{Change \#27} with diff file ISSM-15422-15423.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: FIX: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#28} with diff file ISSM-15423-15424.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\\
+Export determination: 6. \\
+Rationale: CHG: dim can now be retrieved directly in iomodel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#29} with diff file ISSM-15424-15425.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.4-linux64.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.4-macosx64.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades.sh\\
+Export determination: 6. \\
+Rationale: CHG: using petsc 3.4.2, new release for 3.4\\
+\vspace{3em}
+
+\noindent \textbf{Change \#30} with diff file ISSM-15425-15426.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h\\
+Export determination: 6. \\
+Rationale: CHG: adding Stokes P1 GLS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#31} with diff file ISSM-15426-15427.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/cm\_and\_cb\_utilities\\
+Export determination: 6. \\
+Rationale: DEL: package not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#32} with diff file ISSM-15427-15428.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/verbose.m\\
+Export determination: 6. \\
+Rationale: CHG: edit documentation for verbose\\
+\vspace{3em}
+
+\noindent \textbf{Change \#33} with diff file ISSM-15428-15429.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp M /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp\\
+Export determination: 6. \\
+Rationale: NEW: mesh properties (elements,dim,numberofvertices,...) are now Iomodel fields and fetch in the constructor. This cleans up ModelProcessor and will ease the implementation of quadratic elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#34} with diff file ISSM-15429-15430.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: changes to optimize the ADOLC model runs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#35} with diff file ISSM-15430-15431.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp\\
+Export determination: 6. \\
+Rationale: NEW: create edges on the fly instead of relying on md.mesh.edges\\
+\vspace{3em}
+
+\noindent \textbf{Change \#36} with diff file ISSM-15431-15432.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.m\\
+Export determination: 6. \\
+Rationale: CHG: added constructor for inversion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#37} with diff file ISSM-15432-15433.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/mesh.m M /issm/trunk-jpl/src/m/classes/mesh.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m D /issm/trunk-jpl/src/m/enum/MeshEdgesEnum.m D /issm/trunk-jpl/src/m/enum/MeshNumberofedgesEnum.m D /issm/trunk-jpl/src/m/enum/PentaP1InputEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: no need to marshall edges, they are constructed on the fly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#38} with diff file ISSM-15433-15434.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/mesh.m M /issm/trunk-jpl/src/m/classes/mesh.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m D /issm/trunk-jpl/src/m/enum/MeshElementconnectivityEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: tria's do not need neighbors' ids, so do not need to marshall md.mesh.elementconnectivity\\
+\vspace{3em}
+
+\noindent \textbf{Change \#39} with diff file ISSM-15434-15435.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed icefrontlevelset problem in python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#40} with diff file ISSM-15435-15436.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp:15434) A /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp D /issm/trunk-jpl/src/c/modules/ModelProcessorx/ProcessMesh2d.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp\\
+Export determination: 6. \\
+Rationale: CHG: split ProcessMesh2d into CreateEdges and CreateElementToEdgeConnectivity\\
+\vspace{3em}
+
+\noindent \textbf{Change \#41} with diff file ISSM-15436-15437.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: NEW: working on Stokes stabilized\\
+\vspace{3em}
+
+\noindent \textbf{Change \#42} with diff file ISSM-15437-15438.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/FlowequationFeSsaEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m\\
+Export determination: 6. \\
+Rationale: NEW: added md.flowequations.fe\_ssa (0=P1, 1=P2), quadratic elements not working yet of course\\
+\vspace{3em}
+
+\noindent \textbf{Change \#43} with diff file ISSM-15438-15439.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: FIX: fixed stokes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#44} with diff file ISSM-15439-15440.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Hook.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/classes/Nodes.cpp M /issm/trunk-jpl/src/c/classes/Nodes.h M /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some bug fix for quadratic elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#45} with diff file ISSM-15440-15441.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: Modification to \$ISSM\_DIR/src/wrappers/matlab/Makefile.am for shared library build.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#46} with diff file ISSM-15441-15442.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some bug fix for quadratic elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#47} with diff file ISSM-15442-15443.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt D /issm/trunk-jpl/src/c/analyses/CMakeLists.txt D /issm/trunk-jpl/src/c/bamg/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/Constraints/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/ElementResults/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/Elements/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/ExternalResults/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/Inputs/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/Loads/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/Materials/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/Options/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/Params/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/gauss/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/kriging/CMakeLists.txt D /issm/trunk-jpl/src/c/classes/matrix/CMakeLists.txt D /issm/trunk-jpl/src/c/kml/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/AverageFilterx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/BamgConvertMeshx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/BamgTriangulatex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Bamgx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Chacox/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ComputeBasalStressx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ComputeStrainRatex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ConstraintsStatex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ContourToMeshx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ContourToNodesx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ControlInputGetGradientx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ControlInputScaleGradientx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ControlInputSetGradientx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/EdgeDetectionx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ElementConnectivityx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Exp2Kmlx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Gradjx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/HoleFillerx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputArtificialNoisex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputControlUpdatex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputDuplicatex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputScalex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputToResultx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/KMLFileReadx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/KMLMeshWritex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/KMLOverlayx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Kml2Expx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Krigingx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Mergesolutionfromftogx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/MeshPartitionx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/NodalValuex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/NodeConnectivityx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/NodesDofx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Orthx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/OutputResultsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/OutputRiftsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ParseToolkitsOptionsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Reduceloadx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Reducevectorgtosx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ResetConstraintsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Scotchx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Shp2Expx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Shp2Kmlx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SmbGradientsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/Solverx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SpcNodesx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SurfaceAreax/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/TriMeshx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/TriaSearchx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/VecMergex/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/VertexCoordinatesx/CMakeLists.txt D /issm/trunk-jpl/src/c/modules/VerticesDofx/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Bamg/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Elements/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Enum/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Exceptions/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Exp/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Matrix/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/MemOps/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Numerics/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Sorting/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/String/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/Threads/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/TriMesh/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/io/CMakeLists.txt D /issm/trunk-jpl/src/c/shared/io/Disk/CMakeLists.txt D /issm/trunk-jpl/src/c/solutionsequences/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/issm/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/metis/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/metis/patches/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/mpi/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/mpi/patches/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/petsc/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/petsc/objects/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/petsc/patches/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/plapack/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/plapack/patches/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/scalapack/CMakeLists.txt D /issm/trunk-jpl/src/c/toolkits/triangle/CMakeLists.txt\\
+Export determination: 6. \\
+Rationale: CHG: Deleted most CMakeLists.txt to resemble Makefile.am structure. More changes to follow.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#48} with diff file ISSM-15443-15444.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed bad index for edges\\
+\vspace{3em}
+
+\noindent \textbf{Change \#49} with diff file ISSM-15444-15445.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: BUG:fixxing memory leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#50} with diff file ISSM-15445-15446.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/diagnostic.m\\
+Export determination: 6. \\
+Rationale: NEW: check that stokesreconditioning is >0 is stokes is used\\
+\vspace{3em}
+
+\noindent \textbf{Change \#51} with diff file ISSM-15446-15447.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed P2 basis functions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#52} with diff file ISSM-15447-15448.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: FIX: problem with stabilization indexing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#53} with diff file ISSM-15448-15449.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed spc pb for quadratic elements. Only works for StaticSpc for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#54} with diff file ISSM-15449-15450.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp\\
+Export determination: 6. \\
+Rationale: BUG: Fixing Memory Leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#55} with diff file ISSM-15450-15451.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp M /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp\\
+Export determination: 6. \\
+Rationale: CHG: iomodel->numberofelements now always available\\
+\vspace{3em}
+
+\noindent \textbf{Change \#56} with diff file ISSM-15451-15452.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: spc vz only for FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#57} with diff file ISSM-15452-15453.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp\\
+Export determination: 6. \\
+Rationale: CHG: ice front now working for quadratic elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#58} with diff file ISSM-15453-15454.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_newton.cpp\\
+Export determination: 6. \\
+Rationale: CHG: preparing Newton for P2 elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#59} with diff file ISSM-15454-15455.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#60} with diff file ISSM-15455-15456.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py\\
+Export determination: 6. \\
+Rationale: CHG: added doc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#61} with diff file ISSM-15456-15457.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp\\
+Export determination: 6. \\
+Rationale: BUG:Fixed Shreve Nightly run\\
+\vspace{3em}
+
+\noindent \textbf{Change \#62} with diff file ISSM-15457-15458.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_thermal\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed duplicate for tf\_old, use pointer copy instead\\
+\vspace{3em}
+
+\noindent \textbf{Change \#63} with diff file ISSM-15458-15459.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: CHG: express nodal function derivatives as functions of area coordinates\\
+\vspace{3em}
+
+\noindent \textbf{Change \#64} with diff file ISSM-15459-15460.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.m\\
+Export determination: 6. \\
+Rationale: CHG: collapse vertexonrock mask if not nan\\
+\vspace{3em}
+
+\noindent \textbf{Change \#65} with diff file ISSM-15460-15461.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test121.py\\
+Export determination: 6. \\
+Rationale: CHG: relazing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#66} with diff file ISSM-15461-15462.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no need to call NodesPartitioning if Continuous Galerkin, + added EdgesPartitioning\\
+\vspace{3em}
+
+\noindent \textbf{Change \#67} with diff file ISSM-15462-15463.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor useless inputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#68} with diff file ISSM-15463-15464.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CGH: simpler indexing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#69} with diff file ISSM-15464-15465.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp\\
+Export determination: 6. \\
+Rationale: CHG: simpler way of creating new nodes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#70} with diff file ISSM-15465-15466.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no need to create loads or constraints if pointer is NULL, this is done by CreateDatasets\\
+\vspace{3em}
+
+\noindent \textbf{Change \#71} with diff file ISSM-15466-15467.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor use NUMVERTICES directly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#72} with diff file ISSM-15467-15468.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#73} with diff file ISSM-15468-15469.diff: \\
+Function name: \\
+M /issm/trunk-jpl/CMakeLists.txt A /issm/trunk-jpl/m4/issm\_options.cmake M /issm/trunk-jpl/src/c/CMakeLists.txt\\
+Export determination: 6. \\
+Rationale: CHG: Modified CMake files to account for conditional build up of ISSM source code. Added CMake macro file.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#74} with diff file ISSM-15469-15470.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive280.nc M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py A /issm/trunk-jpl/test/NightlyRun/test280.m A /issm/trunk-jpl/test/NightlyRun/test280.py\\
+Export determination: 6. \\
+Rationale: NEW: added SSA P2 test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#75} with diff file ISSM-15470-15471.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#76} with diff file ISSM-15471-15472.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-nicole.sh\\
+Export determination: 6. \\
+Rationale: CHG: update mac\\
+\vspace{3em}
+
+\noindent \textbf{Change \#77} with diff file ISSM-15472-15473.diff: \\
+Function name: \\
+D /issm/trunk-jpl/configs/config-macosx64-nicole.sh M /issm/trunk-jpl/configs/config-macosx64.sh\\
+Export determination: 6. \\
+Rationale: CHG: new standard mac script for nightlies mac is config-macosx64.sh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#78} with diff file ISSM-15473-15474.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: NEW: implementing Franca et al stabilization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#79} with diff file ISSM-15474-15475.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: FIX: trying to fix stabilization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#80} with diff file ISSM-15475-15476.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing CreatePVector with GLS stabilization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#81} with diff file ISSM-15476-15477.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#82} with diff file ISSM-15477-15478.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#83} with diff file ISSM-15478-15479.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: element matrix and vector similar to Elmer\\
+\vspace{3em}
+
+\noindent \textbf{Change \#84} with diff file ISSM-15479-15480.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64.sh\\
+Export determination: 6. \\
+Rationale: CHG: update fortran\\
+\vspace{3em}
+
+\noindent \textbf{Change \#85} with diff file ISSM-15480-15481.diff: \\
+Function name: \\
+M /issm/trunk-jpl/CMakeLists.txt M /issm/trunk-jpl/m4/issm\_options.cmake M /issm/trunk-jpl/src/c/CMakeLists.txt\\
+Export determination: 6. \\
+Rationale: CHG: Further modifications relating to CMake build.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#86} with diff file ISSM-15481-15482.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-linux64-cmake.sh\\
+Export determination: 6. \\
+Rationale: ADD: Added a configuration script for CMake build. Very early version of this script.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#87} with diff file ISSM-15482-15483.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/taoinversion.m\\
+Export determination: 6. \\
+Rationale: BUG: vxobs and vyobs need to be converted to m/s\\
+\vspace{3em}
+
+\noindent \textbf{Change \#88} with diff file ISSM-15483-15484.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/control\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#89} with diff file ISSM-15484-15485.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Enabling P2 constraints\\
+\vspace{3em}
+
+\noindent \textbf{Change \#90} with diff file ISSM-15485-15486.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: mass matrix is now dynamically allocated for P2 elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#91} with diff file ISSM-15486-15487.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: mass matrix is now dynamically allocated for P2 elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#92} with diff file ISSM-15487-15488.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/mobile/web A /issm/trunk-jpl/src/mobile/web/ISSM.html A /issm/trunk-jpl/src/mobile/web/css A /issm/trunk-jpl/src/mobile/web/css/animate.css A /issm/trunk-jpl/src/mobile/web/css/images A /issm/trunk-jpl/src/mobile/web/css/images/animated-overlay.gif A /issm/trunk-jpl/src/mobile/web/css/images/border.png A /issm/trunk-jpl/src/mobile/web/css/images/globe.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_diagonals-thick\_18\_b81900\_40x40.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_diagonals-thick\_20\_666666\_40x40.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_flat\_0\_aaaaaa\_40x100.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_flat\_10\_000000\_40x100.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_flat\_75\_ffffff\_40x100.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_glass\_100\_f6f6f6\_1x400.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_glass\_100\_fdf5ce\_1x400.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_glass\_55\_fbf9ee\_1x400.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_glass\_65\_ffffff\_1x400.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_glass\_75\_dadada\_1x400.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_glass\_75\_e6e6e6\_1x400.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_glass\_95\_fef1ec\_1x400.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_gloss-wave\_35\_f6a828\_500x100.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_highlight-soft\_100\_eeeeee\_1x100.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_highlight-soft\_75\_cccccc\_1x100.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-bg\_highlight-soft\_75\_ffe45c\_1x100.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_222222\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_228ef1\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_2e83ff\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_454545\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_888888\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_cd0a0a\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_ef8c08\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_ffd27a\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/images/ui-icons\_ffffff\_256x240.png A /issm/trunk-jpl/src/mobile/web/css/jquery-ui-1.10.3.css A /issm/trunk-jpl/src/mobile/web/css/jquery-ui.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.accordion.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.all.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.autocomplete.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.base.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.button.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.core.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.datepicker.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.dialog.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.menu.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.progressbar.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.resizable.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.selectable.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.slider.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.spinner.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.tabs.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.theme.css A /issm/trunk-jpl/src/mobile/web/css/jquery.ui.tooltip.css A /issm/trunk-jpl/src/mobile/web/css/mystyle.css A /issm/trunk-jpl/src/mobile/web/gallery.html A /issm/trunk-jpl/src/mobile/web/images A /issm/trunk-jpl/src/mobile/web/images/ISSMJPLTOP.png A /issm/trunk-jpl/src/mobile/web/images/ISSMlogo.png A /issm/trunk-jpl/src/mobile/web/images/animated-overlay.gif A /issm/trunk-jpl/src/mobile/web/images/globe.png A /issm/trunk-jpl/src/mobile/web/images/greenland.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img1.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img10.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img11.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img12.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img13.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img14.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img15.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img16.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img17.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img2.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img3.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img4.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img5.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img6.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img7.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img8.png A /issm/trunk-jpl/src/mobile/web/images/issm\_img/img9.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_diagonals-thick\_18\_b81900\_40x40.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_diagonals-thick\_20\_666666\_40x40.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_flat\_10\_000000\_40x100.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_glass\_100\_f6f6f6\_1x400.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_glass\_100\_fdf5ce\_1x400.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_glass\_65\_ffffff\_1x400.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_gloss-wave\_35\_f6a828\_500x100.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_highlight-soft\_100\_eeeeee\_1x100.png A /issm/trunk-jpl/src/mobile/web/images/ui-bg\_highlight-soft\_75\_ffe45c\_1x100.png A /issm/trunk-jpl/src/mobile/web/images/ui-icons\_222222\_256x240.png A /issm/trunk-jpl/src/mobile/web/images/ui-icons\_228ef1\_256x240.png A /issm/trunk-jpl/src/mobile/web/images/ui-icons\_ef8c08\_256x240.png A /issm/trunk-jpl/src/mobile/web/images/ui-icons\_ffd27a\_256x240.png A /issm/trunk-jpl/src/mobile/web/images/ui-icons\_ffffff\_256x240.png A /issm/trunk-jpl/src/mobile/web/js A /issm/trunk-jpl/src/mobile/web/js/dev A /issm/trunk-jpl/src/mobile/web/js/dev/AUTHORS.txt A /issm/trunk-jpl/src/mobile/web/js/dev/Gruntfile.js A /issm/trunk-jpl/src/mobile/web/js/dev/MIT-LICENSE.txt A /issm/trunk-jpl/src/mobile/web/js/dev/README.md A /issm/trunk-jpl/src/mobile/web/js/dev/demos A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion/collapsible.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion/custom-icons.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion/fillspace.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion/hoverintent.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion/no-auto-height.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/accordion/sortable.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/categories.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/combobox.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/custom-data.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/folding.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jquery\_32x32.png A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/jqueryui\_32x32.png A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/sizzlejs\_32x32.png A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/transparent\_1x1.png A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/images/ui-anim\_basic\_16x16.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/london.xml A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/maxheight.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple-remote.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/multiple.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-jsonp.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote-with-cache.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/remote.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/search.php A /issm/trunk-jpl/src/mobile/web/js/dev/demos/autocomplete/xml.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/button A /issm/trunk-jpl/src/mobile/web/js/dev/demos/button/checkbox.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/button/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/button/icons.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/button/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/button/radio.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/button/splitbutton.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/button/toolbar.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/alt-field.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/animation.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/buttonbar.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-formats.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/date-range.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/dropdown-month-year.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/icon-trigger.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/images A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/images/calendar.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/inline.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-ar.js A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-fr.js A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-he.js A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/jquery.ui.datepicker-zh-TW.js A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/localization.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/min-max.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/multiple-calendars.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/other-months.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/datepicker/show-week.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/demos.css A /issm/trunk-jpl/src/mobile/web/js/dev/demos/dialog A /issm/trunk-jpl/src/mobile/web/js/dev/demos/dialog/animated.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/dialog/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/dialog/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-confirmation.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-form.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal-message.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/dialog/modal.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/constrain-movement.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/cursor-style.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/delay-start.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/events.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/handle.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/revert.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/scroll.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/snap-to.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/sortable.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/draggable/visual-feedback.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/accepted-elements.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high\_tatras.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high\_tatras2.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high\_tatras2\_min.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high\_tatras3.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high\_tatras3\_min.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high\_tatras4.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high\_tatras4\_min.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/images/high\_tatras\_min.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/photo-manager.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/propagation.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/revert.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/shopping-cart.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/droppable/visual-feedback.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/effect A /issm/trunk-jpl/src/mobile/web/js/dev/demos/effect/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/effect/easing.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/effect/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/images A /issm/trunk-jpl/src/mobile/web/js/dev/demos/images/calendar.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on-tile.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/images/demo-config-on.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-closed.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/images/demo-spindown-open.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/images/icon-docs-info.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/images/pbar-ani.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/menu A /issm/trunk-jpl/src/mobile/web/js/dev/demos/menu/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/menu/icons.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/menu/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/position A /issm/trunk-jpl/src/mobile/web/js/dev/demos/position/cycler.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/position/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/position/images A /issm/trunk-jpl/src/mobile/web/js/dev/demos/position/images/earth.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/position/images/flight.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/position/images/rocket.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/position/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/progressbar A /issm/trunk-jpl/src/mobile/web/js/dev/demos/progressbar/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/progressbar/images A /issm/trunk-jpl/src/mobile/web/js/dev/demos/progressbar/images/pbar-ani.gif A /issm/trunk-jpl/src/mobile/web/js/dev/demos/progressbar/indeterminate.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/progressbar/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/progressbar/label.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/animate.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/aspect-ratio.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/constrain-area.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/delay-start.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/helper.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/max-min.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/snap-to-grid.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/synchronous-resize.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/textarea.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/resizable/visual-feedback.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/selectable A /issm/trunk-jpl/src/mobile/web/js/dev/demos/selectable/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/selectable/display-grid.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/selectable/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/selectable/serialize.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/colorpicker.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/hotelrooms.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/multiple-vertical.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/range-vertical.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/range.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemax.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/rangemin.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/side-scroll.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/slider-vertical.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/slider/steps.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists-through-tabs.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/connect-lists.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/delay-start.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/display-grid.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/empty-lists.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/items.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/placeholder.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/sortable/portlets.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/spinner A /issm/trunk-jpl/src/mobile/web/js/dev/demos/spinner/currency.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/spinner/decimal.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/spinner/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/spinner/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/spinner/latlong.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/spinner/overflow.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/spinner/time.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content1.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content2.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content3-slow.php A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax/content4-broken.php A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/ajax.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/bottom.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/collapsible.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/manipulation.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/mouseover.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/sortable.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tabs/vertical.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content1.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/ajax/content2.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-animation.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-content.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/custom-style.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/forms.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/st-stephens.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/images/tower-bridge.jpg A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/tracking.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/tooltip/video-player.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/widget A /issm/trunk-jpl/src/mobile/web/js/dev/demos/widget/default.html A /issm/trunk-jpl/src/mobile/web/js/dev/demos/widget/index.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs A /issm/trunk-jpl/src/mobile/web/js/dev/docs/accordion.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/autocomplete.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/blind-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/bounce-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/button.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/clip-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/datepicker.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/dialog.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/draggable.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/drop-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/droppable.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/explode-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/fade-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/fold-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/highlight-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/jQuery.widget.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/menu.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/mouse.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/position.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/progressbar.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/puff-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/pulsate-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/resizable.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/scale-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/selectable.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/shake-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/size-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/slide-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/slider.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/sortable.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/spinner.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/tabs.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/tooltip.html A /issm/trunk-jpl/src/mobile/web/js/dev/docs/transfer-effect.html A /issm/trunk-jpl/src/mobile/web/js/dev/external A /issm/trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.de-DE.js A /issm/trunk-jpl/src/mobile/web/js/dev/external/globalize.culture.ja-JP.js A /issm/trunk-jpl/src/mobile/web/js/dev/external/globalize.js A /issm/trunk-jpl/src/mobile/web/js/dev/external/jquery.mousewheel.js A /issm/trunk-jpl/src/mobile/web/js/dev/external/jshint.js A /issm/trunk-jpl/src/mobile/web/js/dev/external/qunit.css A /issm/trunk-jpl/src/mobile/web/js/dev/external/qunit.js A /issm/trunk-jpl/src/mobile/web/js/dev/jquery-1.9.1.js A /issm/trunk-jpl/src/mobile/web/js/dev/package.json A /issm/trunk-jpl/src/mobile/web/js/dev/themes A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/animated-overlay.gif A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg\_flat\_0\_aaaaaa\_40x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg\_flat\_75\_ffffff\_40x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg\_glass\_55\_fbf9ee\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg\_glass\_65\_ffffff\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg\_glass\_75\_dadada\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg\_glass\_75\_e6e6e6\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg\_glass\_95\_fef1ec\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-bg\_highlight-soft\_75\_cccccc\_1x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons\_222222\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons\_2e83ff\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons\_454545\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons\_888888\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/images/ui-icons\_cd0a0a\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery-ui.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.accordion.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.all.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.autocomplete.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.base.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.button.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.core.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.datepicker.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.dialog.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.menu.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.progressbar.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.resizable.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.selectable.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.slider.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.spinner.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tabs.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.theme.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/jquery.ui.tooltip.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/animated-overlay.gif A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg\_flat\_0\_aaaaaa\_40x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg\_flat\_75\_ffffff\_40x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg\_glass\_55\_fbf9ee\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg\_glass\_65\_ffffff\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg\_glass\_75\_dadada\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg\_glass\_75\_e6e6e6\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg\_glass\_95\_fef1ec\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-bg\_highlight-soft\_75\_cccccc\_1x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons\_222222\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons\_2e83ff\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons\_454545\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons\_888888\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/images/ui-icons\_cd0a0a\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery-ui.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.accordion.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.autocomplete.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.button.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.core.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.datepicker.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.dialog.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.menu.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.progressbar.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.resizable.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.selectable.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.slider.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.spinner.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tabs.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.theme.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/base/minified/jquery.ui.tooltip.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/animated-overlay.gif A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_diagonals-thick\_18\_b81900\_40x40.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_diagonals-thick\_20\_666666\_40x40.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_flat\_10\_000000\_40x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_glass\_100\_f6f6f6\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_glass\_100\_fdf5ce\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_glass\_65\_ffffff\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_gloss-wave\_35\_f6a828\_500x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_highlight-soft\_100\_eeeeee\_1x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-bg\_highlight-soft\_75\_ffe45c\_1x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons\_222222\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons\_228ef1\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons\_ef8c08\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons\_ffd27a\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/images/ui-icons\_ffffff\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery-ui.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.accordion.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.all.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.autocomplete.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.base.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.button.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.core.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.datepicker.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.dialog.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.menu.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.progressbar.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.resizable.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.selectable.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.slider.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.spinner.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tabs.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.theme.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/jquery.ui.tooltip.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/animated-overlay.gif A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_diagonals-thick\_18\_b81900\_40x40.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_diagonals-thick\_20\_666666\_40x40.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_flat\_10\_000000\_40x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_glass\_100\_f6f6f6\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_glass\_100\_fdf5ce\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_glass\_65\_ffffff\_1x400.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_gloss-wave\_35\_f6a828\_500x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_highlight-soft\_100\_eeeeee\_1x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-bg\_highlight-soft\_75\_ffe45c\_1x100.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons\_222222\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons\_228ef1\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons\_ef8c08\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons\_ffd27a\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/images/ui-icons\_ffffff\_256x240.png A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery-ui.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.accordion.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.autocomplete.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.button.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.core.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.datepicker.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.dialog.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.menu.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.progressbar.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.resizable.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.selectable.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.slider.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.spinner.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tabs.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.theme.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/themes/ui-lightness/minified/jquery.ui.tooltip.min.css A /issm/trunk-jpl/src/mobile/web/js/dev/ui A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery-ui-i18n.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-af.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar-DZ.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ar.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-az.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-be.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bg.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-bs.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ca.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cs.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-cy-GB.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-da.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-de.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-el.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-AU.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-GB.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-en-NZ.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eo.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-es.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-et.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-eu.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fa.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fi.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fo.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CA.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr-CH.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-fr.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-gl.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-he.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hi.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hr.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hu.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-hy.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-id.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-is.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-it.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ja.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ka.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-kk.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-km.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ko.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ky.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lb.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lt.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-lv.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-mk.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ml.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ms.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nb.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl-BE.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nl.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-nn.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-no.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pl.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt-BR.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-pt.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-rm.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ro.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ru.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sk.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sl.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sq.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr-SR.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sr.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-sv.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-ta.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-th.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tj.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-tr.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-uk.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-vi.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-CN.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-HK.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/i18n/jquery.ui.datepicker-zh-TW.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery-ui.custom.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.accordion.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.autocomplete.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.button.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.core.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.datepicker.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.dialog.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.draggable.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.droppable.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-blind.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-bounce.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-clip.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-drop.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-explode.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fade.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-fold.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-highlight.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-pulsate.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-scale.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-shake.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-slide.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect-transfer.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.effect.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.menu.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.mouse.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.position.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.progressbar.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.resizable.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.selectable.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.slider.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.sortable.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.spinner.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tabs.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.tooltip.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/jquery.ui.widget.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery-ui-i18n.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-af.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar-DZ.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ar.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-az.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-be.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bg.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-bs.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ca.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cs.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-cy-GB.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-da.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-de.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-el.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-AU.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-GB.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-en-NZ.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eo.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-es.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-et.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-eu.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fa.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fi.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fo.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CA.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr-CH.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-fr.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-gl.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-he.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hi.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hr.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hu.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-hy.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-id.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-is.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-it.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ja.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ka.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-kk.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-km.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ko.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ky.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lb.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lt.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-lv.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-mk.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ml.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ms.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nb.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl-BE.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nl.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-nn.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-no.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pl.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt-BR.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-pt.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-rm.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ro.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ru.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sk.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sl.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sq.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr-SR.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sr.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-sv.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-ta.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-th.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tj.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-tr.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-uk.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-vi.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-CN.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-HK.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/i18n/jquery.ui.datepicker-zh-TW.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery-ui.custom.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.accordion.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.autocomplete.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.button.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.core.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.datepicker.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.dialog.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.draggable.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.droppable.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-blind.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-bounce.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-clip.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-drop.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-explode.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fade.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-fold.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-highlight.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-pulsate.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-scale.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-shake.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-slide.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect-transfer.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.effect.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.menu.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.mouse.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.position.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.progressbar.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.resizable.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.selectable.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.slider.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.sortable.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.spinner.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tabs.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.tooltip.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui/minified/jquery.ui.widget.min.js A /issm/trunk-jpl/src/mobile/web/js/dev/ui.accordion.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.autocomplete.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.button.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.core.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.datepicker.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.dialog.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.draggable.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.droppable.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-blind.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-bounce.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-clip.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-drop.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-explode.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-fade.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-fold.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-highlight.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-pulsate.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-scale.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-shake.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-slide.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect-transfer.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.effect.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.menu.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.mouse.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.position.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.progressbar.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.resizable.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.selectable.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.slider.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.sortable.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.spinner.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.tabs.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.tooltip.jquery.json A /issm/trunk-jpl/src/mobile/web/js/dev/ui.widget.jquery.json A /issm/trunk-jpl/src/mobile/web/js/imageslider A /issm/trunk-jpl/src/mobile/web/js/imageslider/README A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/demo.html A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/images A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/images/dev7logo.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/images/nemo.jpg A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/images/toystory.jpg A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/images/up.jpg A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/images/walle.jpg A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/scripts A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/scripts/jquery-1.9.0.min.js A /issm/trunk-jpl/src/mobile/web/js/imageslider/demo/style.css A /issm/trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.js A /issm/trunk-jpl/src/mobile/web/js/imageslider/jquery.nivo.slider.pack.js A /issm/trunk-jpl/src/mobile/web/js/imageslider/license.txt A /issm/trunk-jpl/src/mobile/web/js/imageslider/nivo-slider.css A /issm/trunk-jpl/src/mobile/web/js/imageslider/style.css A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/bar A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/bar/arrows.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bar.css A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/bar/bullets.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/bar/loading.gif A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/dark A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/dark/arrows.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/dark/bullets.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/dark/dark.css A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/dark/loading.gif A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/default A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/default/arrows.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/default/bullets.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/default/default.css A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/default/loading.gif A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/light A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/light/arrows.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/light/bullets.png A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/light/light.css A /issm/trunk-jpl/src/mobile/web/js/imageslider/themes/light/loading.gif A /issm/trunk-jpl/src/mobile/web/js/index.html A /issm/trunk-jpl/src/mobile/web/js/jquery-1.9.1.js A /issm/trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.js A /issm/trunk-jpl/src/mobile/web/js/jquery-ui-1.10.3.custom.min.js A /issm/trunk-jpl/src/mobile/web/js/jquery-ui.custom.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.accordion.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.autocomplete.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.button.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.core.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.datepicker.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.dialog.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.draggable.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.droppable.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-blind.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-bounce.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-clip.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-drop.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-explode.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-fade.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-fold.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-highlight.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-pulsate.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-scale.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-shake.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-slide.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect-transfer.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.effect.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.menu.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.mouse.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.position.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.progressbar.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.resizable.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.selectable.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.slider.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.sortable.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.spinner.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.tabs.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.tooltip.js A /issm/trunk-jpl/src/mobile/web/js/jquery.ui.widget.js A /issm/trunk-jpl/src/mobile/web/js/js A /issm/trunk-jpl/src/mobile/web/js/js/jquery-1.9.1.js A /issm/trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.js A /issm/trunk-jpl/src/mobile/web/js/js/jquery-ui-1.10.3.custom.min.js A /issm/trunk-jpl/src/mobile/web/js/sidebar A /issm/trunk-jpl/src/mobile/web/js/sidebar/Gruntfile.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/README.md A /issm/trunk-jpl/src/mobile/web/js/sidebar/component.json A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-bottom.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-left.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-right.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/inject-top.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/blue-glass/sidebar.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-bottom.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-left.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-right.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/inject-top.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/dark-glass/sidebar.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-bottom.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-left.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-right.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/inject-top.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/css/red-glass/sidebar.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery-ui.min.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/jquery.min.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/lib/qunit.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/src A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/src/jquery.sidebar.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/test A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.html A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/in/test/jquery.sidebar.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/out A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/out/coverage.html A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/out/jquery.sidebar.js.html A /issm/trunk-jpl/src/mobile/web/js/sidebar/cov/out/out.temp A /issm/trunk-jpl/src/mobile/web/js/sidebar/css A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-bottom.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-left.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-right.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/inject-top.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/blue-glass/sidebar.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-bottom.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-left.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-right.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/inject-top.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/dark-glass/sidebar.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/red-glass A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-bottom.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-left.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-right.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/inject-top.png A /issm/trunk-jpl/src/mobile/web/js/sidebar/css/red-glass/sidebar.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/demo.html A /issm/trunk-jpl/src/mobile/web/js/sidebar/demo1.html A /issm/trunk-jpl/src/mobile/web/js/sidebar/dist A /issm/trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/dist/jquery.sidebar.min.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/lib A /issm/trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/lib/jquery-ui.min.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/lib/jquery.min.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.css A /issm/trunk-jpl/src/mobile/web/js/sidebar/lib/qunit.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/package.json A /issm/trunk-jpl/src/mobile/web/js/sidebar/src A /issm/trunk-jpl/src/mobile/web/js/sidebar/src/jquery.sidebar.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/test A /issm/trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.html A /issm/trunk-jpl/src/mobile/web/js/sidebar/test/jquery.sidebar.js A /issm/trunk-jpl/src/mobile/web/js/sidebar/testem.json A /issm/trunk-jpl/src/mobile/web/js/sidebar/tests.tap A /issm/trunk-jpl/src/mobile/web/js/sidebar/touch.html A /issm/trunk-jpl/src/mobile/web/src A /issm/trunk-jpl/src/mobile/web/src/color.js A /issm/trunk-jpl/src/mobile/web/src/coordinate.js A /issm/trunk-jpl/src/mobile/web/src/glMatrix-0.9.5.min.js A /issm/trunk-jpl/src/mobile/web/src/greenland.gif A /issm/trunk-jpl/src/mobile/web/src/webgl-utils.js\\
+Export determination: 6. \\
+Rationale: ADD: Basic backbone for ISSM Web\_Development\\
+\vspace{3em}
+
+\noindent \textbf{Change \#93} with diff file ISSM-15488-15489.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/mobile/web A /issm/web (from /issm/trunk-jpl/src/mobile/web:15487)\\
+Export determination: 6. \\
+Rationale: CHG: moved web application to issmuci root\\
+\vspace{3em}
+
+\noindent \textbf{Change \#94} with diff file ISSM-15489-15490.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed memory leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#95} with diff file ISSM-15490-15491.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plotmodel.py\\
+Export determination: 6. \\
+Rationale: need to call show() for plotmodel calls in scripts (e.g. runme files)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#96} with diff file ISSM-15491-15492.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m A /issm/trunk-jpl/src/m/enum/P1P2Enum.m A /issm/trunk-jpl/src/m/enum/TaylorHoodEnum.m\\
+Export determination: 6. \\
+Rationale: NEW: added some enums for higher order finite elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#97} with diff file ISSM-15492-15493.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m D /issm/trunk-jpl/src/m/enum/P1P2Enum.m A /issm/trunk-jpl/src/m/enum/P1bubbleEnum.m A /issm/trunk-jpl/src/m/enum/P2xP1Enum.m\\
+Export determination: 6. \\
+Rationale: CHG: changes finite element names\\
+\vspace{3em}
+
+\noindent \textbf{Change \#98} with diff file ISSM-15493-15494.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.py\\
+Export determination: 6. \\
+Rationale: BUG: typo in IOError call\\
+\vspace{3em}
+
+\noindent \textbf{Change \#99} with diff file ISSM-15494-15495.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/io/loadmodel.py M /issm/trunk-jpl/src/m/io/loadvars.py\\
+Export determination: 6. \\
+Rationale: CHG: python models are saved as database structures, checking for their existence should be done with database methods rather than looking for path existence since databases often use multiple files with the same name but differenct extensions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#100} with diff file ISSM-15495-15496.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added a couple of basis functions, derivatives not done yet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#101} with diff file ISSM-15496-15497.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp\\
+Export determination: 6. \\
+Rationale: CHG: GetNumberOfNodes conflicting with Reference element NumberOfNodes function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#102} with diff file ISSM-15497-15498.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: CHG: GetNumberofNodes back\\
+\vspace{3em}
+
+\noindent \textbf{Change \#103} with diff file ISSM-15498-15499.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive112.nc M /issm/trunk-jpl/test/Archives/Archive113.nc M /issm/trunk-jpl/test/Archives/Archive114.nc M /issm/trunk-jpl/test/Archives/Archive302.nc M /issm/trunk-jpl/test/Archives/Archive305.nc M /issm/trunk-jpl/test/Archives/Archive314.nc M /issm/trunk-jpl/test/Archives/Archive315.nc M /issm/trunk-jpl/test/Archives/Archive318.nc M /issm/trunk-jpl/test/Archives/Archive324.nc M /issm/trunk-jpl/test/Archives/Archive331.nc M /issm/trunk-jpl/test/Archives/Archive333.nc M /issm/trunk-jpl/test/NightlyRun/runme.m\\
+Export determination: 6. \\
+Rationale: CHG: updating archives\\
+\vspace{3em}
+
+\noindent \textbf{Change \#104} with diff file ISSM-15499-15500.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.m\\
+Export determination: 6. \\
+Rationale: CHG: reverting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#105} with diff file ISSM-15500-15501.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive115.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating archives\\
+\vspace{3em}
+
+\noindent \textbf{Change \#106} with diff file ISSM-15501-15502.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m\\
+Export determination: 6. \\
+Rationale: FIX: changed path of antarctica and greenland exp if showregion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#107} with diff file ISSM-15502-15503.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/manualcb.m\\
+Export determination: 6. \\
+Rationale: NEW: added some features, including log colorbar\\
+\vspace{3em}
+
+\noindent \textbf{Change \#108} with diff file ISSM-15503-15504.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/Synchronize.sh M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: updated vim syntax highlight\\
+\vspace{3em}
+
+\noindent \textbf{Change \#109} with diff file ISSM-15504-15505.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/FlowequationIsmacayealEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationIsmacayealpattynEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationIspattynEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.py M /issm/trunk-jpl/src/m/qmu/qmuresponse.m\\
+Export determination: 6. \\
+Rationale: CHG: split ismacayealpattyn into ismacayeal and ispattyn\\
+\vspace{3em}
+
+\noindent \textbf{Change \#110} with diff file ISSM-15505-15506.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added P2xP1 nodal function derivatives\\
+\vspace{3em}
+
+\noindent \textbf{Change \#111} with diff file ISSM-15506-15507.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp\\
+Export determination: 6. \\
+Rationale: NEW: allow vectors to be row vectors instead of column vectors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#112} with diff file ISSM-15507-15508.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/coordsystems/xy2ll.py\\
+Export determination: 6. \\
+Rationale: NEW: python version of xy2ll\\
+\vspace{3em}
+
+\noindent \textbf{Change \#113} with diff file ISSM-15508-15509.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp\\
+Export determination: 6. \\
+Rationale: CHG: useless declaration of numnodes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#114} with diff file ISSM-15509-15510.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Icefront.h\\
+Export determination: 6. \\
+Rationale: FIX: forgot to commit changes in Icefront.h\\
+\vspace{3em}
+
+\noindent \textbf{Change \#115} with diff file ISSM-15510-15511.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/mpich/install-3.0-linux64.sh\\
+Export determination: 6. \\
+Rationale: CHG: no need to specify f91\\
+\vspace{3em}
+
+\noindent \textbf{Change \#116} with diff file ISSM-15511-15512.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added Penta P2xP2 derivative functions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#117} with diff file ISSM-15512-15513.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/processmesh.py\\
+Export determination: 6. \\
+Rationale: CHG: minor change to help text\\
+\vspace{3em}
+
+\noindent \textbf{Change \#118} with diff file ISSM-15513-15514.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp\\
+Export determination: 6. \\
+Rationale: BUG: mpiinclude needs to be included here\\
+\vspace{3em}
+
+\noindent \textbf{Change \#119} with diff file ISSM-15514-15515.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp\\
+Export determination: 6. \\
+Rationale: CHG: we need to take into account M or N=0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#120} with diff file ISSM-15515-15516.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp\\
+Export determination: 6. \\
+Rationale: BUG: M is now M*N\\
+\vspace{3em}
+
+\noindent \textbf{Change \#121} with diff file ISSM-15516-15517.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#122} with diff file ISSM-15517-15518.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.h\\
+Export determination: 6. \\
+Rationale: CHG: startin g new icefront\\
+\vspace{3em}
+
+\noindent \textbf{Change \#123} with diff file ISSM-15518-15519.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor call of xyz\_list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#124} with diff file ISSM-15519-15520.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py\\
+Export determination: 6. \\
+Rationale: CHG: handle vectors vs. arrarys more consistently in python: in most places we use vectors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#125} with diff file ISSM-15520-15521.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToDoubleMatrix.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToIssmMat.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToMatrix.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabNArrayToNArray.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToDoubleVector.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToIssmSeqVec.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToIssmVec.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToPetscVec.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToVector.cpp D /issm/trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h D /issm/trunk-jpl/src/wrappers/matlab/io/mxGetAssignedField.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed lots of uneeded matlab object conversion and fixed Chaco's blas conflict with petsc's\\
+\vspace{3em}
+
+\noindent \textbf{Change \#126} with diff file ISSM-15521-15522.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py\\
+Export determination: 6. \\
+Rationale: reverting vector/array change\\
+\vspace{3em}
+
+\noindent \textbf{Change \#127} with diff file ISSM-15522-15523.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: FIX: start to debug new front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#128} with diff file ISSM-15523-15524.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: FIX: finished debuging front in 2d\\
+\vspace{3em}
+
+\noindent \textbf{Change \#129} with diff file ISSM-15524-15525.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive434.nc M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py A /issm/trunk-jpl/test/NightlyRun/test434.m A /issm/trunk-jpl/test/NightlyRun/test434.py\\
+Export determination: 6. \\
+Rationale: NEW: added L1L2 nightly run\\
+\vspace{3em}
+
+\noindent \textbf{Change \#130} with diff file ISSM-15525-15526.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: FIX: temporarily reverting Front until monday to get NR running\\
+\vspace{3em}
+
+\noindent \textbf{Change \#131} with diff file ISSM-15526-15527.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive434.nc\\
+Export determination: 6. \\
+Rationale: CHG: archive test 434\\
+\vspace{3em}
+
+\noindent \textbf{Change \#132} with diff file ISSM-15527-15528.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#133} with diff file ISSM-15528-15529.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/flowequation.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed consistency check for L1L2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#134} with diff file ISSM-15529-15530.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: added check in case PETSC\_ARCH is not provided\\
+\vspace{3em}
+
+\noindent \textbf{Change \#135} with diff file ISSM-15530-15531.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MINIcondensedEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m\\
+Export determination: 6. \\
+Rationale: CHG: added one new enum: MINIcondensedEnum.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#136} with diff file ISSM-15531-15532.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: updating syntax highlighting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#137} with diff file ISSM-15532-15533.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test434.m\\
+Export determination: 6. \\
+Rationale: CHG: tolerance test 434\\
+\vspace{3em}
+
+\noindent \textbf{Change \#138} with diff file ISSM-15533-15534.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h\\
+Export determination: 6. \\
+Rationale: CHG: changed if to switch statements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#139} with diff file ISSM-15534-15535.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test434.py\\
+Export determination: 6. \\
+Rationale: CHG: tolerance change for python 434\\
+\vspace{3em}
+
+\noindent \textbf{Change \#140} with diff file ISSM-15535-15536.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Node.h\\
+Export determination: 6. \\
+Rationale: CHG: minor cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#141} with diff file ISSM-15536-15537.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test434.m M /issm/trunk-jpl/test/NightlyRun/test434.py\\
+Export determination: 6. \\
+Rationale: CHG:tolerance test 434\\
+\vspace{3em}
+
+\noindent \textbf{Change \#142} with diff file ISSM-15537-15538.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/triangle/triangle.h\\
+Export determination: 6. \\
+Rationale: DEL: file has nothing to do here\\
+\vspace{3em}
+
+\noindent \textbf{Change \#143} with diff file ISSM-15538-15539.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.h M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added front in element for Pattyn and Stokes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#144} with diff file ISSM-15539-15540.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: trying ice front for coupling solutions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#145} with diff file ISSM-15540-15541.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/io/Disk/WriteLockFile.cpp\\
+Export determination: 6. \\
+Rationale: CHG: gcc 4.6.3 (the default on astrid) complains about the missing include\\
+\vspace{3em}
+
+\noindent \textbf{Change \#146} with diff file ISSM-15541-15542.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: FIX: wrong approximation in StokesFront vector\\
+\vspace{3em}
+
+\noindent \textbf{Change \#147} with diff file ISSM-15542-15543.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/triangle/install-linux64.sh D /issm/trunk-jpl/externalpackages/triangle/triangle.c.patch M /issm/trunk-jpl/externalpackages/triangle/triangle.h.patch\\
+Export determination: 6. \\
+Rationale: CHG: simplified triangle patch\\
+\vspace{3em}
+
+\noindent \textbf{Change \#148} with diff file ISSM-15543-15544.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/triangle/configs/altix64/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/android/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/linux64/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/pleiades/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/win32/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/win7/configure.make\\
+Export determination: 6. \\
+Rationale: CHG: simplified configurations now that we do not use MATLAB anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#149} with diff file ISSM-15544-15545.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: FIX: Pvector front based on numnodes (not numvertices)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#150} with diff file ISSM-15545-15546.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make M /issm/trunk-jpl/externalpackages/triangle/install-altix64.sh M /issm/trunk-jpl/externalpackages/triangle/install-android.sh M /issm/trunk-jpl/externalpackages/triangle/install-discover.sh M /issm/trunk-jpl/externalpackages/triangle/install-linux64.sh M /issm/trunk-jpl/externalpackages/triangle/install-macosx32.sh M /issm/trunk-jpl/externalpackages/triangle/install-macosx64.sh M /issm/trunk-jpl/externalpackages/triangle/install-pleiades.sh M /issm/trunk-jpl/externalpackages/triangle/install-win32.sh M /issm/trunk-jpl/externalpackages/triangle/install-win7.sh\\
+Export determination: 6. \\
+Rationale: CHG: do not need to patch c file anymore and mac does not suppoer FPU flags\\
+\vspace{3em}
+
+\noindent \textbf{Change \#151} with diff file ISSM-15546-15547.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/triangle/install-linux64.sh\\
+Export determination: 6. \\
+Rationale: BUG: header file needs to be patched\\
+\vspace{3em}
+
+\noindent \textbf{Change \#152} with diff file ISSM-15547-15548.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Exp/SquareFront2.exp M /issm/trunk-jpl/test/NightlyRun/test216.m A /issm/trunk-jpl/test/Par/SquareShelf2.par\\
+Export determination: 6. \\
+Rationale: CHG: modified rift test 216 to manage ice front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#153} with diff file ISSM-15548-15549.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive216.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating archive\\
+\vspace{3em}
+
+\noindent \textbf{Change \#154} with diff file ISSM-15549-15550.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/triangle/configs/linux64/configure.make\\
+Export determination: 6. \\
+Rationale: CHG: ensure that we have the same mesh as NR archives\\
+\vspace{3em}
+
+\noindent \textbf{Change \#155} with diff file ISSM-15550-15551.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive216.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archive\\
+\vspace{3em}
+
+\noindent \textbf{Change \#156} with diff file ISSM-15551-15552.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test509.m\\
+Export determination: 6. \\
+Rationale: CHG: added thermal penalty\_threshold for convergence with the new ice front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#157} with diff file ISSM-15552-15553.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive501.nc M /issm/trunk-jpl/test/Archives/Archive502.nc M /issm/trunk-jpl/test/Archives/Archive504.nc M /issm/trunk-jpl/test/Archives/Archive505.nc M /issm/trunk-jpl/test/Archives/Archive506.nc M /issm/trunk-jpl/test/Archives/Archive508.nc M /issm/trunk-jpl/test/Archives/Archive509.nc M /issm/trunk-jpl/test/Archives/Archive512.nc M /issm/trunk-jpl/test/Archives/Archive513.nc M /issm/trunk-jpl/test/NightlyRun/test104.m M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/Par/Pig.par\\
+Export determination: 6. \\
+Rationale: CHG: changes Pig archives for new ice front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#158} with diff file ISSM-15553-15554.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/triangle/configs/altix64/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/android/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/linux64/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/macosx32/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/macosx64/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/pleiades/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/win32/configure.make M /issm/trunk-jpl/externalpackages/triangle/configs/win7/configure.make\\
+Export determination: 6. \\
+Rationale: CHG: do not use -DREDUCED flag, as it does not yield the same results as the one saved in the NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#159} with diff file ISSM-15554-15555.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test509.py M /issm/trunk-jpl/test/Par/Pig.py\\
+Export determination: 6. \\
+Rationale: CHG: changed Pig test for python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#160} with diff file ISSM-15555-15556.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/Pig.py\\
+Export determination: 6. \\
+Rationale: FIX: minor typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#161} with diff file ISSM-15556-15557.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: FIX: finally found the problem with stokes front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#162} with diff file ISSM-15557-15558.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp M /issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp M /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp M /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#163} with diff file ISSM-15558-15559.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test218.m\\
+Export determination: 6. \\
+Rationale: CHG: new front for dakota\\
+\vspace{3em}
+
+\noindent \textbf{Change \#164} with diff file ISSM-15559-15560.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp M /issm/trunk-jpl/src/c/shared/io/Disk/diskio.h M /issm/trunk-jpl/src/c/shared/io/Disk/pfopen.cpp\\
+Export determination: 6. \\
+Rationale: BUG: on fe233, pfopen crashed because the same file cannot be created simultaneously by all processor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#165} with diff file ISSM-15560-15561.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test218.m\\
+Export determination: 6. \\
+Rationale: CHG: no need to redo icefront manually\\
+\vspace{3em}
+
+\noindent \textbf{Change \#166} with diff file ISSM-15561-15562.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test218.m\\
+Export determination: 6. \\
+Rationale: CHG: smaller front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#167} with diff file ISSM-15562-15563.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test104.m M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test204.m\\
+Export determination: 6. \\
+Rationale: FIX: minor commited wrong changes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#168} with diff file ISSM-15563-15564.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive503.nc M /issm/trunk-jpl/test/Archives/Archive507.nc M /issm/trunk-jpl/test/Archives/Archive510.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated some archives for Pig Stokes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#169} with diff file ISSM-15564-15565.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/ad/validation/Update/update.m M /issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/analyses/adjointdiagnostic\_core.cpp M /issm/trunk-jpl/src/c/analyses/control\_core.cpp M /issm/trunk-jpl/src/c/analyses/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/analyses/objectivefunction.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h M /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Icefront.h M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_stokescoupling\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp M /issm/trunk-jpl/src/m/classes/diagnostic.m M /issm/trunk-jpl/src/m/classes/diagnostic.py M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/classes/toolkits.m M /issm/trunk-jpl/src/m/classes/toolkits.py M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py M /issm/trunk-jpl/src/m/contrib/hack/sia.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/mech/mechanicalproperties.m M /issm/trunk-jpl/src/m/mech/strainrateuncert.m M /issm/trunk-jpl/src/m/miscellaneous/issmdoc.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.py M /issm/trunk-jpl/src/m/plot/plot\_elementstype.m M /issm/trunk-jpl/src/m/plot/plot\_penalties.m M /issm/trunk-jpl/src/m/qmu/qmuresponse.m M /issm/trunk-jpl/src/m/solvers/stokesoptions.m M /issm/trunk-jpl/src/m/solvers/stokesoptions.py\\
+Export determination: 6. \\
+Rationale: CHG: hutter-> SIA macayeal->SSA pattyn->HO stokes->FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#170} with diff file ISSM-15565-15566.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py M /issm/trunk-jpl/test/NightlyRun/ad.m M /issm/trunk-jpl/test/NightlyRun/ad\_maxalloc.m M /issm/trunk-jpl/test/NightlyRun/android.m M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test101.py M /issm/trunk-jpl/test/NightlyRun/test102.m M /issm/trunk-jpl/test/NightlyRun/test102.py M /issm/trunk-jpl/test/NightlyRun/test103.m M /issm/trunk-jpl/test/NightlyRun/test103.py M /issm/trunk-jpl/test/NightlyRun/test104.m M /issm/trunk-jpl/test/NightlyRun/test104.py M /issm/trunk-jpl/test/NightlyRun/test105.m M /issm/trunk-jpl/test/NightlyRun/test105.py M /issm/trunk-jpl/test/NightlyRun/test106.m M /issm/trunk-jpl/test/NightlyRun/test106.py M /issm/trunk-jpl/test/NightlyRun/test107.m M /issm/trunk-jpl/test/NightlyRun/test107.py M /issm/trunk-jpl/test/NightlyRun/test108.m M /issm/trunk-jpl/test/NightlyRun/test108.py M /issm/trunk-jpl/test/NightlyRun/test109.m M /issm/trunk-jpl/test/NightlyRun/test109.py M /issm/trunk-jpl/test/NightlyRun/test110.m M /issm/trunk-jpl/test/NightlyRun/test110.py M /issm/trunk-jpl/test/NightlyRun/test1101.m M /issm/trunk-jpl/test/NightlyRun/test1101.py M /issm/trunk-jpl/test/NightlyRun/test1102.m M /issm/trunk-jpl/test/NightlyRun/test1102.py M /issm/trunk-jpl/test/NightlyRun/test1103.m M /issm/trunk-jpl/test/NightlyRun/test1103.py M /issm/trunk-jpl/test/NightlyRun/test1104.m M /issm/trunk-jpl/test/NightlyRun/test1104.py M /issm/trunk-jpl/test/NightlyRun/test1105.m M /issm/trunk-jpl/test/NightlyRun/test1105.py M /issm/trunk-jpl/test/NightlyRun/test1106.m M /issm/trunk-jpl/test/NightlyRun/test1106.py M /issm/trunk-jpl/test/NightlyRun/test1107.m M /issm/trunk-jpl/test/NightlyRun/test1107.py M /issm/trunk-jpl/test/NightlyRun/test1108.m M /issm/trunk-jpl/test/NightlyRun/test1108.py M /issm/trunk-jpl/test/NightlyRun/test1109.m M /issm/trunk-jpl/test/NightlyRun/test111.m M /issm/trunk-jpl/test/NightlyRun/test111.py M /issm/trunk-jpl/test/NightlyRun/test1110.m M /issm/trunk-jpl/test/NightlyRun/test112.m M /issm/trunk-jpl/test/NightlyRun/test112.py M /issm/trunk-jpl/test/NightlyRun/test113.m M /issm/trunk-jpl/test/NightlyRun/test113.py M /issm/trunk-jpl/test/NightlyRun/test114.m M /issm/trunk-jpl/test/NightlyRun/test114.py M /issm/trunk-jpl/test/NightlyRun/test115.m M /issm/trunk-jpl/test/NightlyRun/test115.py M /issm/trunk-jpl/test/NightlyRun/test116.m M /issm/trunk-jpl/test/NightlyRun/test116.py M /issm/trunk-jpl/test/NightlyRun/test117.m M /issm/trunk-jpl/test/NightlyRun/test117.py M /issm/trunk-jpl/test/NightlyRun/test118.m M /issm/trunk-jpl/test/NightlyRun/test118.py M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test120.py M /issm/trunk-jpl/test/NightlyRun/test1201.m M /issm/trunk-jpl/test/NightlyRun/test1201.py M /issm/trunk-jpl/test/NightlyRun/test1202.m M /issm/trunk-jpl/test/NightlyRun/test1202.py M /issm/trunk-jpl/test/NightlyRun/test1203.m M /issm/trunk-jpl/test/NightlyRun/test1203.py M /issm/trunk-jpl/test/NightlyRun/test1204.m M /issm/trunk-jpl/test/NightlyRun/test1204.py M /issm/trunk-jpl/test/NightlyRun/test1205.m M /issm/trunk-jpl/test/NightlyRun/test1205.py M /issm/trunk-jpl/test/NightlyRun/test1206.m M /issm/trunk-jpl/test/NightlyRun/test1206.py M /issm/trunk-jpl/test/NightlyRun/test1207.m M /issm/trunk-jpl/test/NightlyRun/test1207.py M /issm/trunk-jpl/test/NightlyRun/test1208.m M /issm/trunk-jpl/test/NightlyRun/test1208.py M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test121.py M /issm/trunk-jpl/test/NightlyRun/test122.m M /issm/trunk-jpl/test/NightlyRun/test122.py M /issm/trunk-jpl/test/NightlyRun/test1301.m M /issm/trunk-jpl/test/NightlyRun/test1301.py M /issm/trunk-jpl/test/NightlyRun/test1302.m M /issm/trunk-jpl/test/NightlyRun/test1302.py M /issm/trunk-jpl/test/NightlyRun/test1303.m M /issm/trunk-jpl/test/NightlyRun/test1303.py M /issm/trunk-jpl/test/NightlyRun/test1304.m M /issm/trunk-jpl/test/NightlyRun/test1304.py M /issm/trunk-jpl/test/NightlyRun/test1501.m M /issm/trunk-jpl/test/NightlyRun/test1501.py M /issm/trunk-jpl/test/NightlyRun/test1502.m M /issm/trunk-jpl/test/NightlyRun/test1502.py M /issm/trunk-jpl/test/NightlyRun/test1601.m M /issm/trunk-jpl/test/NightlyRun/test1601.py M /issm/trunk-jpl/test/NightlyRun/test1602.m M /issm/trunk-jpl/test/NightlyRun/test1602.py M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test201.py M /issm/trunk-jpl/test/NightlyRun/test202.m M /issm/trunk-jpl/test/NightlyRun/test202.py M /issm/trunk-jpl/test/NightlyRun/test203.m M /issm/trunk-jpl/test/NightlyRun/test203.py M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/NightlyRun/test204.py M /issm/trunk-jpl/test/NightlyRun/test205.m M /issm/trunk-jpl/test/NightlyRun/test205.py M /issm/trunk-jpl/test/NightlyRun/test206.m M /issm/trunk-jpl/test/NightlyRun/test206.py M /issm/trunk-jpl/test/NightlyRun/test207.m M /issm/trunk-jpl/test/NightlyRun/test207.py M /issm/trunk-jpl/test/NightlyRun/test208.m M /issm/trunk-jpl/test/NightlyRun/test208.py M /issm/trunk-jpl/test/NightlyRun/test209.m M /issm/trunk-jpl/test/NightlyRun/test209.py M /issm/trunk-jpl/test/NightlyRun/test210.m M /issm/trunk-jpl/test/NightlyRun/test210.py M /issm/trunk-jpl/test/NightlyRun/test211.m M /issm/trunk-jpl/test/NightlyRun/test211.py M /issm/trunk-jpl/test/NightlyRun/test212.m M /issm/trunk-jpl/test/NightlyRun/test212.py M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test213.py M /issm/trunk-jpl/test/NightlyRun/test214.m M /issm/trunk-jpl/test/NightlyRun/test214.py M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test216.py M /issm/trunk-jpl/test/NightlyRun/test217.m M /issm/trunk-jpl/test/NightlyRun/test217.py M /issm/trunk-jpl/test/NightlyRun/test218.m M /issm/trunk-jpl/test/NightlyRun/test219.m M /issm/trunk-jpl/test/NightlyRun/test219.py M /issm/trunk-jpl/test/NightlyRun/test220.m M /issm/trunk-jpl/test/NightlyRun/test220.py M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test221.py M /issm/trunk-jpl/test/NightlyRun/test222.m M /issm/trunk-jpl/test/NightlyRun/test222.py M /issm/trunk-jpl/test/NightlyRun/test223.m M /issm/trunk-jpl/test/NightlyRun/test223.py M /issm/trunk-jpl/test/NightlyRun/test224.m M /issm/trunk-jpl/test/NightlyRun/test224.py M /issm/trunk-jpl/test/NightlyRun/test225.m M /issm/trunk-jpl/test/NightlyRun/test225.py M /issm/trunk-jpl/test/NightlyRun/test226.m M /issm/trunk-jpl/test/NightlyRun/test226.py M /issm/trunk-jpl/test/NightlyRun/test227.m M /issm/trunk-jpl/test/NightlyRun/test227.py M /issm/trunk-jpl/test/NightlyRun/test228.m M /issm/trunk-jpl/test/NightlyRun/test228.py M /issm/trunk-jpl/test/NightlyRun/test229.m M /issm/trunk-jpl/test/NightlyRun/test229.py M /issm/trunk-jpl/test/NightlyRun/test230.m M /issm/trunk-jpl/test/NightlyRun/test230.py M /issm/trunk-jpl/test/NightlyRun/test231.m M /issm/trunk-jpl/test/NightlyRun/test231.py M /issm/trunk-jpl/test/NightlyRun/test232.m M /issm/trunk-jpl/test/NightlyRun/test232.py M /issm/trunk-jpl/test/NightlyRun/test233.m M /issm/trunk-jpl/test/NightlyRun/test233.py M /issm/trunk-jpl/test/NightlyRun/test234.m M /issm/trunk-jpl/test/NightlyRun/test235.m M /issm/trunk-jpl/test/NightlyRun/test236.m M /issm/trunk-jpl/test/NightlyRun/test236.py M /issm/trunk-jpl/test/NightlyRun/test237.m M /issm/trunk-jpl/test/NightlyRun/test237.py M /issm/trunk-jpl/test/NightlyRun/test270.m M /issm/trunk-jpl/test/NightlyRun/test270.py M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test274.py M /issm/trunk-jpl/test/NightlyRun/test280.m M /issm/trunk-jpl/test/NightlyRun/test280.py M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3001.py M /issm/trunk-jpl/test/NightlyRun/test3002.m M /issm/trunk-jpl/test/NightlyRun/test3002.py M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3004.m M /issm/trunk-jpl/test/NightlyRun/test3004.py M /issm/trunk-jpl/test/NightlyRun/test3005.m M /issm/trunk-jpl/test/NightlyRun/test3005.py M /issm/trunk-jpl/test/NightlyRun/test3006.m M /issm/trunk-jpl/test/NightlyRun/test3006.py M /issm/trunk-jpl/test/NightlyRun/test3007.m M /issm/trunk-jpl/test/NightlyRun/test3007.py M /issm/trunk-jpl/test/NightlyRun/test3008.m M /issm/trunk-jpl/test/NightlyRun/test3008.py M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test3009.py M /issm/trunk-jpl/test/NightlyRun/test301.m M /issm/trunk-jpl/test/NightlyRun/test301.py M /issm/trunk-jpl/test/NightlyRun/test3010.m M /issm/trunk-jpl/test/NightlyRun/test3010.py M /issm/trunk-jpl/test/NightlyRun/test3015.m M /issm/trunk-jpl/test/NightlyRun/test3015.py M /issm/trunk-jpl/test/NightlyRun/test3019.m M /issm/trunk-jpl/test/NightlyRun/test3019.py M /issm/trunk-jpl/test/NightlyRun/test302.m M /issm/trunk-jpl/test/NightlyRun/test302.py M /issm/trunk-jpl/test/NightlyRun/test3020.m M /issm/trunk-jpl/test/NightlyRun/test3020.py M /issm/trunk-jpl/test/NightlyRun/test3021.m M /issm/trunk-jpl/test/NightlyRun/test303.m M /issm/trunk-jpl/test/NightlyRun/test303.py M /issm/trunk-jpl/test/NightlyRun/test304.m M /issm/trunk-jpl/test/NightlyRun/test304.py M /issm/trunk-jpl/test/NightlyRun/test305.m M /issm/trunk-jpl/test/NightlyRun/test305.py M /issm/trunk-jpl/test/NightlyRun/test306.m M /issm/trunk-jpl/test/NightlyRun/test306.py M /issm/trunk-jpl/test/NightlyRun/test307.m M /issm/trunk-jpl/test/NightlyRun/test307.py M /issm/trunk-jpl/test/NightlyRun/test308.m M /issm/trunk-jpl/test/NightlyRun/test308.py M /issm/trunk-jpl/test/NightlyRun/test309.m M /issm/trunk-jpl/test/NightlyRun/test309.py M /issm/trunk-jpl/test/NightlyRun/test310.m M /issm/trunk-jpl/test/NightlyRun/test310.py M /issm/trunk-jpl/test/NightlyRun/test311.m M /issm/trunk-jpl/test/NightlyRun/test311.py M /issm/trunk-jpl/test/NightlyRun/test312.m M /issm/trunk-jpl/test/NightlyRun/test312.py M /issm/trunk-jpl/test/NightlyRun/test313.m M /issm/trunk-jpl/test/NightlyRun/test313.py M /issm/trunk-jpl/test/NightlyRun/test314.m M /issm/trunk-jpl/test/NightlyRun/test314.py M /issm/trunk-jpl/test/NightlyRun/test315.m M /issm/trunk-jpl/test/NightlyRun/test315.py M /issm/trunk-jpl/test/NightlyRun/test316.m M /issm/trunk-jpl/test/NightlyRun/test316.py M /issm/trunk-jpl/test/NightlyRun/test317.m M /issm/trunk-jpl/test/NightlyRun/test317.py M /issm/trunk-jpl/test/NightlyRun/test318.m M /issm/trunk-jpl/test/NightlyRun/test318.py M /issm/trunk-jpl/test/NightlyRun/test319.m M /issm/trunk-jpl/test/NightlyRun/test319.py M /issm/trunk-jpl/test/NightlyRun/test320.m M /issm/trunk-jpl/test/NightlyRun/test320.py M /issm/trunk-jpl/test/NightlyRun/test321.m M /issm/trunk-jpl/test/NightlyRun/test321.py M /issm/trunk-jpl/test/NightlyRun/test322.m M /issm/trunk-jpl/test/NightlyRun/test322.py M /issm/trunk-jpl/test/NightlyRun/test323.m M /issm/trunk-jpl/test/NightlyRun/test323.py M /issm/trunk-jpl/test/NightlyRun/test324.m M /issm/trunk-jpl/test/NightlyRun/test324.py M /issm/trunk-jpl/test/NightlyRun/test325.m M /issm/trunk-jpl/test/NightlyRun/test325.py M /issm/trunk-jpl/test/NightlyRun/test326.m M /issm/trunk-jpl/test/NightlyRun/test326.py M /issm/trunk-jpl/test/NightlyRun/test327.m M /issm/trunk-jpl/test/NightlyRun/test327.py M /issm/trunk-jpl/test/NightlyRun/test328.m M /issm/trunk-jpl/test/NightlyRun/test328.py M /issm/trunk-jpl/test/NightlyRun/test329.m M /issm/trunk-jpl/test/NightlyRun/test329.py M /issm/trunk-jpl/test/NightlyRun/test331.m M /issm/trunk-jpl/test/NightlyRun/test331.py M /issm/trunk-jpl/test/NightlyRun/test332.m M /issm/trunk-jpl/test/NightlyRun/test333.m M /issm/trunk-jpl/test/NightlyRun/test401.m M /issm/trunk-jpl/test/NightlyRun/test401.py M /issm/trunk-jpl/test/NightlyRun/test402.m M /issm/trunk-jpl/test/NightlyRun/test402.py M /issm/trunk-jpl/test/NightlyRun/test403.m M /issm/trunk-jpl/test/NightlyRun/test403.py M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test404.py M /issm/trunk-jpl/test/NightlyRun/test405.m M /issm/trunk-jpl/test/NightlyRun/test405.py M /issm/trunk-jpl/test/NightlyRun/test406.m M /issm/trunk-jpl/test/NightlyRun/test406.py M /issm/trunk-jpl/test/NightlyRun/test407.m M /issm/trunk-jpl/test/NightlyRun/test407.py M /issm/trunk-jpl/test/NightlyRun/test408.m M /issm/trunk-jpl/test/NightlyRun/test408.py M /issm/trunk-jpl/test/NightlyRun/test409.m M /issm/trunk-jpl/test/NightlyRun/test409.py M /issm/trunk-jpl/test/NightlyRun/test410.m M /issm/trunk-jpl/test/NightlyRun/test410.py M /issm/trunk-jpl/test/NightlyRun/test411.m M /issm/trunk-jpl/test/NightlyRun/test411.py M /issm/trunk-jpl/test/NightlyRun/test412.m M /issm/trunk-jpl/test/NightlyRun/test413.m M /issm/trunk-jpl/test/NightlyRun/test414.m M /issm/trunk-jpl/test/NightlyRun/test415.m M /issm/trunk-jpl/test/NightlyRun/test415.py M /issm/trunk-jpl/test/NightlyRun/test416.m M /issm/trunk-jpl/test/NightlyRun/test416.py M /issm/trunk-jpl/test/NightlyRun/test417.m M /issm/trunk-jpl/test/NightlyRun/test418.m M /issm/trunk-jpl/test/NightlyRun/test419.m M /issm/trunk-jpl/test/NightlyRun/test419.py M /issm/trunk-jpl/test/NightlyRun/test420.m M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test422.py M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test423.py M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test425.m M /issm/trunk-jpl/test/NightlyRun/test425.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py M /issm/trunk-jpl/test/NightlyRun/test427.m M /issm/trunk-jpl/test/NightlyRun/test427.py M /issm/trunk-jpl/test/NightlyRun/test428.m M /issm/trunk-jpl/test/NightlyRun/test428.py M /issm/trunk-jpl/test/NightlyRun/test429.m M /issm/trunk-jpl/test/NightlyRun/test429.py M /issm/trunk-jpl/test/NightlyRun/test430.m M /issm/trunk-jpl/test/NightlyRun/test430.py M /issm/trunk-jpl/test/NightlyRun/test431.m M /issm/trunk-jpl/test/NightlyRun/test431.py M /issm/trunk-jpl/test/NightlyRun/test432.m M /issm/trunk-jpl/test/NightlyRun/test432.py M /issm/trunk-jpl/test/NightlyRun/test433.m M /issm/trunk-jpl/test/NightlyRun/test433.py M /issm/trunk-jpl/test/NightlyRun/test434.m M /issm/trunk-jpl/test/NightlyRun/test434.py M /issm/trunk-jpl/test/NightlyRun/test501.m M /issm/trunk-jpl/test/NightlyRun/test501.py M /issm/trunk-jpl/test/NightlyRun/test502.m M /issm/trunk-jpl/test/NightlyRun/test502.py M /issm/trunk-jpl/test/NightlyRun/test503.m M /issm/trunk-jpl/test/NightlyRun/test503.py M /issm/trunk-jpl/test/NightlyRun/test504.m M /issm/trunk-jpl/test/NightlyRun/test504.py M /issm/trunk-jpl/test/NightlyRun/test505.m M /issm/trunk-jpl/test/NightlyRun/test505.py M /issm/trunk-jpl/test/NightlyRun/test506.m M /issm/trunk-jpl/test/NightlyRun/test506.py M /issm/trunk-jpl/test/NightlyRun/test507.m M /issm/trunk-jpl/test/NightlyRun/test507.py M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test508.py M /issm/trunk-jpl/test/NightlyRun/test509.m M /issm/trunk-jpl/test/NightlyRun/test509.py M /issm/trunk-jpl/test/NightlyRun/test510.m M /issm/trunk-jpl/test/NightlyRun/test510.py M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test511.py M /issm/trunk-jpl/test/NightlyRun/test512.m M /issm/trunk-jpl/test/NightlyRun/test512.py M /issm/trunk-jpl/test/NightlyRun/test513.m M /issm/trunk-jpl/test/NightlyRun/test513.py M /issm/trunk-jpl/test/NightlyRun/test515.m M /issm/trunk-jpl/test/NightlyRun/test515.py M /issm/trunk-jpl/test/NightlyRun/test516.m M /issm/trunk-jpl/test/NightlyRun/test516.py M /issm/trunk-jpl/test/NightlyRun/test601.m M /issm/trunk-jpl/test/NightlyRun/test601.py M /issm/trunk-jpl/test/NightlyRun/test602.m M /issm/trunk-jpl/test/NightlyRun/test602.py M /issm/trunk-jpl/test/NightlyRun/test603.m M /issm/trunk-jpl/test/NightlyRun/test603.py M /issm/trunk-jpl/test/NightlyRun/test604.m M /issm/trunk-jpl/test/NightlyRun/test604.py M /issm/trunk-jpl/test/NightlyRun/test605.m M /issm/trunk-jpl/test/NightlyRun/test605.py M /issm/trunk-jpl/test/NightlyRun/test606.m M /issm/trunk-jpl/test/NightlyRun/test606.py M /issm/trunk-jpl/test/NightlyRun/test607.m M /issm/trunk-jpl/test/NightlyRun/test607.py M /issm/trunk-jpl/test/NightlyRun/test608.m M /issm/trunk-jpl/test/NightlyRun/test608.py M /issm/trunk-jpl/test/NightlyRun/test609.m M /issm/trunk-jpl/test/NightlyRun/test609.py M /issm/trunk-jpl/test/NightlyRun/test610.m M /issm/trunk-jpl/test/NightlyRun/test610.py M /issm/trunk-jpl/test/NightlyRun/test611.m M /issm/trunk-jpl/test/NightlyRun/test611.py M /issm/trunk-jpl/test/NightlyRun/test612.m M /issm/trunk-jpl/test/NightlyRun/test612.py M /issm/trunk-jpl/test/NightlyRun/test613.m M /issm/trunk-jpl/test/NightlyRun/test613.py M /issm/trunk-jpl/test/NightlyRun/tmp332.m\\
+Export determination: 6. \\
+Rationale: CHG: hutter-> SIA macayeal->SSA pattyn->HO stokes->FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#171} with diff file ISSM-15566-15567.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test1202.m M /issm/trunk-jpl/test/NightlyRun/test1202.py M /issm/trunk-jpl/test/NightlyRun/test1203.m M /issm/trunk-jpl/test/NightlyRun/test1203.py M /issm/trunk-jpl/test/NightlyRun/test1204.m M /issm/trunk-jpl/test/NightlyRun/test1204.py M /issm/trunk-jpl/test/NightlyRun/test1205.m M /issm/trunk-jpl/test/NightlyRun/test1205.py M /issm/trunk-jpl/test/NightlyRun/test1206.m M /issm/trunk-jpl/test/NightlyRun/test1206.py M /issm/trunk-jpl/test/NightlyRun/test1207.m M /issm/trunk-jpl/test/NightlyRun/test1207.py\\
+Export determination: 6. \\
+Rationale: CHG: MacAyeal -> SSA\\
+\vspace{3em}
+
+\noindent \textbf{Change \#172} with diff file ISSM-15567-15568.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Icefront.h M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/balancethickness.m M /issm/trunk-jpl/src/m/classes/balancethickness.py M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py A /issm/trunk-jpl/src/m/enum/DiagnosticFSreconditioningEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticHutterAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/DiagnosticSIAAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticStokesreconditioningEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/FSApproximationEnum.m A /issm/trunk-jpl/src/m/enum/FSIceFrontEnum.m A /issm/trunk-jpl/src/m/enum/FSSolverEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationBorderFSEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationBorderHOEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationBorderSSAEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationBordermacayealEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationBorderpattynEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationBorderstokesEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationFeFSEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationFeSSAEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationFeSsaEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationFeStokesEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationIsFSEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationIsHOEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationIsL1L2Enum.m A /issm/trunk-jpl/src/m/enum/FlowequationIsSIAEnum.m A /issm/trunk-jpl/src/m/enum/FlowequationIsSSAEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationIshutterEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationIsl1l2Enum.m D /issm/trunk-jpl/src/m/enum/FlowequationIsmacayealEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationIspattynEnum.m D /issm/trunk-jpl/src/m/enum/FlowequationIsstokesEnum.m A /issm/trunk-jpl/src/m/enum/HOApproximationEnum.m A /issm/trunk-jpl/src/m/enum/HOFSApproximationEnum.m A /issm/trunk-jpl/src/m/enum/HOIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/HutterApproximationEnum.m D /issm/trunk-jpl/src/m/enum/MacAyeal2dIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/MacAyeal3dIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/MacAyealApproximationEnum.m D /issm/trunk-jpl/src/m/enum/MacAyealPattynApproximationEnum.m D /issm/trunk-jpl/src/m/enum/MacAyealStokesApproximationEnum.m D /issm/trunk-jpl/src/m/enum/PattynApproximationEnum.m D /issm/trunk-jpl/src/m/enum/PattynIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/PattynStokesApproximationEnum.m A /issm/trunk-jpl/src/m/enum/SIAApproximationEnum.m A /issm/trunk-jpl/src/m/enum/SSA2dIceFrontEnum.m A /issm/trunk-jpl/src/m/enum/SSA3dIceFrontEnum.m A /issm/trunk-jpl/src/m/enum/SSAApproximationEnum.m A /issm/trunk-jpl/src/m/enum/SSAFSApproximationEnum.m A /issm/trunk-jpl/src/m/enum/SSAHOApproximationEnum.m D /issm/trunk-jpl/src/m/enum/StokesApproximationEnum.m D /issm/trunk-jpl/src/m/enum/StokesIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/StokesSolverEnum.m A /issm/trunk-jpl/src/m/enum/VzFSEnum.m A /issm/trunk-jpl/src/m/enum/VzHOEnum.m D /issm/trunk-jpl/src/m/enum/VzMacAyealEnum.m D /issm/trunk-jpl/src/m/enum/VzPattynEnum.m A /issm/trunk-jpl/src/m/enum/VzSSAEnum.m D /issm/trunk-jpl/src/m/enum/VzStokesEnum.m M /issm/trunk-jpl/src/m/mech/mechanicalproperties.m M /issm/trunk-jpl/src/m/mech/strainrateuncert.m M /issm/trunk-jpl/src/m/miscellaneous/issmdoc.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.py M /issm/trunk-jpl/src/m/plot/plot\_elementstype.m M /issm/trunk-jpl/src/m/plot/plot\_penalties.m\\
+Export determination: 6. \\
+Rationale: CHG: MacAyeal -> SSA\\
+\vspace{3em}
+
+\noindent \textbf{Change \#173} with diff file ISSM-15568-15569.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solvers/stokesoptions.m M /issm/trunk-jpl/src/m/solvers/stokesoptions.py\\
+Export determination: 6. \\
+Rationale: CHG: stokesoptions remains stokesoptions for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#174} with diff file ISSM-15569-15570.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive220.nc M /issm/trunk-jpl/test/Archives/Archive221.nc M /issm/trunk-jpl/test/Archives/Archive274.nc\\
+Export determination: 6. \\
+Rationale: GHC: Updated archives for new front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#175} with diff file ISSM-15570-15571.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/kriging.cpp\\
+Export determination: 6. \\
+Rationale: CHG: pfopne on cpu0 only\\
+\vspace{3em}
+
+\noindent \textbf{Change \#176} with diff file ISSM-15571-15572.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/cmake/install.sh\\
+Export determination: 6. \\
+Rationale: NEW: now use cmake 2.8.11.2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#177} with diff file ISSM-15572-15573.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/gslib/pkriging.m\\
+Export determination: 6. \\
+Rationale: CHG: fixing pkriging\\
+\vspace{3em}
+
+\noindent \textbf{Change \#178} with diff file ISSM-15573-15574.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: Updating syntax highlight\\
+\vspace{3em}
+
+\noindent \textbf{Change \#179} with diff file ISSM-15574-15575.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: added check on petscversion.h\\
+\vspace{3em}
+
+\noindent \textbf{Change \#180} with diff file ISSM-15575-15576.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-pleiades-petsc3.4.sh\\
+Export determination: 6. \\
+Rationale: CHG: added gsl, no need for petsc\_arch\\
+\vspace{3em}
+
+\noindent \textbf{Change \#181} with diff file ISSM-15576-15577.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: no need to load mkl amymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#182} with diff file ISSM-15577-15578.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test505.m M /issm/trunk-jpl/test/NightlyRun/test506.m M /issm/trunk-jpl/test/NightlyRun/test513.m\\
+Export determination: 6. \\
+Rationale: CHG: updated some tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#183} with diff file ISSM-15578-15579.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive274.nc\\
+Export determination: 6. \\
+Rationale: CHG: archive 274 with reduced front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#184} with diff file ISSM-15579-15580.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test220.m M /issm/trunk-jpl/test/NightlyRun/test220.py M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test221.py M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test274.py\\
+Export determination: 6. \\
+Rationale: CHG: reduced front for 3 additionnal tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#185} with diff file ISSM-15580-15581.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test280.m M /issm/trunk-jpl/test/NightlyRun/test280.py\\
+Export determination: 6. \\
+Rationale: FIX: typo SSA not ssa\\
+\vspace{3em}
+
+\noindent \textbf{Change \#186} with diff file ISSM-15581-15582.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive511.nc M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test511.py\\
+Export determination: 6. \\
+Rationale: CHG: changed test resolution to avoid element with 2 fronts\\
+\vspace{3em}
+
+\noindent \textbf{Change \#187} with diff file ISSM-15582-15583.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive201.nc\\
+Export determination: 6. \\
+Rationale: CHG: changes ice front to test icelevelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#188} with diff file ISSM-15583-15584.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h\\
+Export determination: 6. \\
+Rationale: CHG: Nodes do not look for iomodel->flowequations[i] but the approximation must now be provided to the constructor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#189} with diff file ISSM-15584-15585.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: BUG: BOOST needed for dakota 5.3.1\\
+\vspace{3em}
+
+\noindent \textbf{Change \#190} with diff file ISSM-15585-15586.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive274.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archive 274\\
+\vspace{3em}
+
+\noindent \textbf{Change \#191} with diff file ISSM-15586-15587.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test211.py M /issm/trunk-jpl/test/NightlyRun/test505.py M /issm/trunk-jpl/test/NightlyRun/test506.py M /issm/trunk-jpl/test/NightlyRun/test508.py M /issm/trunk-jpl/test/NightlyRun/test513.py\\
+Export determination: 6. \\
+Rationale: CHG: updated python tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#192} with diff file ISSM-15587-15588.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Par/SquareShelf2.py\\
+Export determination: 6. \\
+Rationale: FIX: missing parameter file in Python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#193} with diff file ISSM-15588-15589.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test216.py\\
+Export determination: 6. \\
+Rationale: CHG: python test216\\
+\vspace{3em}
+
+\noindent \textbf{Change \#194} with diff file ISSM-15589-15590.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test216.py M /issm/trunk-jpl/test/NightlyRun/test429.py M /issm/trunk-jpl/test/NightlyRun/test434.m\\
+Export determination: 6. \\
+Rationale: CHG: changes in tolerance again\\
+\vspace{3em}
+
+\noindent \textbf{Change \#195} with diff file ISSM-15590-15591.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test234.m\\
+Export determination: 6. \\
+Rationale: CHG: added some ; to avoid annoying echos\\
+\vspace{3em}
+
+\noindent \textbf{Change \#196} with diff file ISSM-15591-15592.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive202.nc M /issm/trunk-jpl/test/Archives/Archive203.nc M /issm/trunk-jpl/test/Archives/Archive204.nc M /issm/trunk-jpl/test/Archives/Archive205.nc M /issm/trunk-jpl/test/Archives/Archive206.nc M /issm/trunk-jpl/test/Archives/Archive207.nc M /issm/trunk-jpl/test/Archives/Archive208.nc M /issm/trunk-jpl/test/Archives/Archive209.nc M /issm/trunk-jpl/test/Archives/Archive210.nc M /issm/trunk-jpl/test/Archives/Archive211.nc M /issm/trunk-jpl/test/Archives/Archive212.nc M /issm/trunk-jpl/test/Archives/Archive213.nc M /issm/trunk-jpl/test/Archives/Archive214.nc M /issm/trunk-jpl/test/Archives/Archive215.nc M /issm/trunk-jpl/test/Archives/Archive216.nc M /issm/trunk-jpl/test/Archives/Archive217.nc M /issm/trunk-jpl/test/Archives/Archive219.nc M /issm/trunk-jpl/test/Archives/Archive220.nc M /issm/trunk-jpl/test/Archives/Archive221.nc M /issm/trunk-jpl/test/Archives/Archive222.nc M /issm/trunk-jpl/test/Archives/Archive223.nc M /issm/trunk-jpl/test/Archives/Archive224.nc M /issm/trunk-jpl/test/Archives/Archive225.nc M /issm/trunk-jpl/test/Archives/Archive226.nc M /issm/trunk-jpl/test/Archives/Archive228.nc M /issm/trunk-jpl/test/Archives/Archive229.nc M /issm/trunk-jpl/test/Archives/Archive230.nc M /issm/trunk-jpl/test/Archives/Archive231.nc M /issm/trunk-jpl/test/Archives/Archive232.nc M /issm/trunk-jpl/test/Archives/Archive233.nc M /issm/trunk-jpl/test/Archives/Archive236.nc M /issm/trunk-jpl/test/Archives/Archive237.nc M /issm/trunk-jpl/test/Archives/Archive270.nc M /issm/trunk-jpl/test/Archives/Archive272.nc M /issm/trunk-jpl/test/Archives/Archive274.nc M /issm/trunk-jpl/test/Archives/Archive280.nc\\
+Export determination: 6. \\
+Rationale: CHG: archives test2XX\\
+\vspace{3em}
+
+\noindent \textbf{Change \#197} with diff file ISSM-15592-15593.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive401.nc M /issm/trunk-jpl/test/Archives/Archive402.nc M /issm/trunk-jpl/test/Archives/Archive403.nc M /issm/trunk-jpl/test/Archives/Archive404.nc M /issm/trunk-jpl/test/Archives/Archive405.nc M /issm/trunk-jpl/test/Archives/Archive406.nc M /issm/trunk-jpl/test/Archives/Archive407.nc M /issm/trunk-jpl/test/Archives/Archive408.nc M /issm/trunk-jpl/test/Archives/Archive409.nc M /issm/trunk-jpl/test/Archives/Archive410.nc M /issm/trunk-jpl/test/Archives/Archive411.nc M /issm/trunk-jpl/test/Archives/Archive415.nc M /issm/trunk-jpl/test/Archives/Archive416.nc M /issm/trunk-jpl/test/Archives/Archive419.nc M /issm/trunk-jpl/test/Archives/Archive421.nc M /issm/trunk-jpl/test/Archives/Archive422.nc M /issm/trunk-jpl/test/Archives/Archive423.nc M /issm/trunk-jpl/test/Archives/Archive424.nc M /issm/trunk-jpl/test/Archives/Archive425.nc M /issm/trunk-jpl/test/Archives/Archive426.nc M /issm/trunk-jpl/test/Archives/Archive427.nc M /issm/trunk-jpl/test/Archives/Archive428.nc M /issm/trunk-jpl/test/Archives/Archive429.nc M /issm/trunk-jpl/test/Archives/Archive430.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc M /issm/trunk-jpl/test/Archives/Archive434.nc\\
+Export determination: 6. \\
+Rationale: CHG: archives 4XX\\
+\vspace{3em}
+
+\noindent \textbf{Change \#198} with diff file ISSM-15593-15594.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive501.nc M /issm/trunk-jpl/test/Archives/Archive502.nc M /issm/trunk-jpl/test/Archives/Archive503.nc M /issm/trunk-jpl/test/Archives/Archive504.nc M /issm/trunk-jpl/test/Archives/Archive505.nc M /issm/trunk-jpl/test/Archives/Archive506.nc M /issm/trunk-jpl/test/Archives/Archive507.nc M /issm/trunk-jpl/test/Archives/Archive508.nc M /issm/trunk-jpl/test/Archives/Archive509.nc M /issm/trunk-jpl/test/Archives/Archive510.nc M /issm/trunk-jpl/test/Archives/Archive511.nc M /issm/trunk-jpl/test/Archives/Archive512.nc M /issm/trunk-jpl/test/Archives/Archive513.nc M /issm/trunk-jpl/test/Archives/Archive514.nc M /issm/trunk-jpl/test/Archives/Archive515.nc M /issm/trunk-jpl/test/Archives/Archive516.nc\\
+Export determination: 6. \\
+Rationale: CHG: archives 5XX\\
+\vspace{3em}
+
+\noindent \textbf{Change \#199} with diff file ISSM-15594-15595.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp\\
+Export determination: 6. \\
+Rationale: CHG: SIA constrain nodes in CreateNodes instead of constructor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#200} with diff file ISSM-15595-15596.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py M /issm/trunk-jpl/src/m/classes/mask.m M /issm/trunk-jpl/src/m/classes/mask.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m M /issm/trunk-jpl/src/m/parameterization/setmask.m M /issm/trunk-jpl/src/m/parameterization/setmask.py\\
+Export determination: 6. \\
+Rationale: NEW: models only rely on mask.icelevelset now (diagnostic.icefront not used)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#201} with diff file ISSM-15596-15597.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.m M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: CHG: now rely on icelevelset in mask\\
+\vspace{3em}
+
+\noindent \textbf{Change \#202} with diff file ISSM-15597-15598.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive601.nc M /issm/trunk-jpl/test/Archives/Archive602.nc M /issm/trunk-jpl/test/Archives/Archive603.nc M /issm/trunk-jpl/test/Archives/Archive604.nc M /issm/trunk-jpl/test/Archives/Archive605.nc M /issm/trunk-jpl/test/Archives/Archive606.nc M /issm/trunk-jpl/test/Archives/Archive607.nc M /issm/trunk-jpl/test/Archives/Archive608.nc M /issm/trunk-jpl/test/Archives/Archive609.nc M /issm/trunk-jpl/test/Archives/Archive610.nc M /issm/trunk-jpl/test/Archives/Archive611.nc M /issm/trunk-jpl/test/Archives/Archive612.nc M /issm/trunk-jpl/test/Archives/Archive613.nc M /issm/trunk-jpl/test/Exp/79North.exp\\
+Export determination: 6. \\
+Rationale: CHG: slightly change domain of 79North domain for NR to avoid elements with 2 fronts\\
+\vspace{3em}
+
+\noindent \textbf{Change \#203} with diff file ISSM-15598-15599.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive227.nc M /issm/trunk-jpl/test/NightlyRun/test227.m M /issm/trunk-jpl/test/NightlyRun/test227.py\\
+Export determination: 6. \\
+Rationale: FIX: test 227\\
+\vspace{3em}
+
+\noindent \textbf{Change \#204} with diff file ISSM-15599-15600.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test410.m M /issm/trunk-jpl/test/NightlyRun/test411.m M /issm/trunk-jpl/test/NightlyRun/test429.m M /issm/trunk-jpl/test/NightlyRun/test434.m\\
+Export determination: 6. \\
+Rationale: FIX: more tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#205} with diff file ISSM-15600-15601.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: BUG: indentation and python syntax fix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#206} with diff file ISSM-15601-15602.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: FIX: wrong numpy prefix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#207} with diff file ISSM-15602-15603.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/parameterization/setmask.py\\
+Export determination: 6. \\
+Rationale: FIX: typo in levelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#208} with diff file ISSM-15603-15604.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.py\\
+Export determination: 6. \\
+Rationale: FIX: typo in icelevelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#209} with diff file ISSM-15604-15605.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: CHG: mask.py syntax can be more like matlab\\
+\vspace{3em}
+
+\noindent \textbf{Change \#210} with diff file ISSM-15605-15606.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test514.m\\
+Export determination: 6. \\
+Rationale: BUG: not all fields where saved and checked\\
+\vspace{3em}
+
+\noindent \textbf{Change \#211} with diff file ISSM-15606-15607.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive514.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archive as not all fields where saved\\
+\vspace{3em}
+
+\noindent \textbf{Change \#212} with diff file ISSM-15607-15608.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test225.m M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test432.m M /issm/trunk-jpl/test/NightlyRun/test434.m\\
+Export determination: 6. \\
+Rationale: CHG: more tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#213} with diff file ISSM-15608-15609.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive218.nc M /issm/trunk-jpl/test/Archives/Archive234.nc M /issm/trunk-jpl/test/Archives/Archive235.nc M /issm/trunk-jpl/test/Archives/Archive412.nc M /issm/trunk-jpl/test/Archives/Archive413.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated Dakota archives\\
+\vspace{3em}
+
+\noindent \textbf{Change \#214} with diff file ISSM-15609-15610.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test225.py M /issm/trunk-jpl/test/NightlyRun/test410.py M /issm/trunk-jpl/test/NightlyRun/test434.py\\
+Export determination: 6. \\
+Rationale: CHG: updated tolerances python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#215} with diff file ISSM-15610-15611.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/RoundSheetShelf.par M /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: FIX: test 423 no front was created, do it in the par file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#216} with diff file ISSM-15611-15612.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp D /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp\\
+Export determination: 6. \\
+Rationale: NEW: make the distinction between faces and edges for 3d Quadratic elements (quadratic requires edges, DG requires faces, the format is not the same)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#217} with diff file ISSM-15612-15613.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_icefront.m\\
+Export determination: 6. \\
+Rationale: CHG: updated plot of BC for new front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#218} with diff file ISSM-15613-15614.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\\
+Export determination: 6. \\
+Rationale: CHG: UpdateElement provides the type of finite element\\
+\vspace{3em}
+
+\noindent \textbf{Change \#219} with diff file ISSM-15614-15615.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/matlab/install.sh M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py D /issm/trunk-jpl/src/m/classes/diagnostic.m D /issm/trunk-jpl/src/m/classes/diagnostic.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py A /issm/trunk-jpl/src/m/classes/oldclasses/diagnostic.m A /issm/trunk-jpl/src/m/classes/stressbalance.m A /issm/trunk-jpl/src/m/classes/stressbalance.py (from /issm/trunk-jpl/src/m/classes/diagnostic.py:15612) M /issm/trunk-jpl/src/m/consistency/checkfield.m M /issm/trunk-jpl/src/m/consistency/checkfield.py M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test217.m M /issm/trunk-jpl/test/NightlyRun/test217.py M /issm/trunk-jpl/test/Par/Pig.par M /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.par M /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: CHG: removed md.diagnostic.icefront and added capability to recover old fronts\\
+\vspace{3em}
+
+\noindent \textbf{Change \#220} with diff file ISSM-15615-15616.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.py\\
+Export determination: 6. \\
+Rationale: CHG: diagnostic is now stressbalance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#221} with diff file ISSM-15616-15617.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/stressbalance.py\\
+Export determination: 6. \\
+Rationale: CHG: no more icefront\\
+\vspace{3em}
+
+\noindent \textbf{Change \#222} with diff file ISSM-15617-15618.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: FIX: wrong size of vector\\
+\vspace{3em}
+
+\noindent \textbf{Change \#223} with diff file ISSM-15618-15619.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use NUMVERTICES as much as possible to avoid problems\\
+\vspace{3em}
+
+\noindent \textbf{Change \#224} with diff file ISSM-15619-15620.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_elementnumbering.m M /issm/trunk-jpl/src/m/plot/plot\_vertexnumbering.m\\
+Export determination: 6. \\
+Rationale: BUG: numbering for layers did not work\\
+\vspace{3em}
+
+\noindent \textbf{Change \#225} with diff file ISSM-15620-15621.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test201.m\\
+Export determination: 6. \\
+Rationale: FIX: local change that should not have been commited\\
+\vspace{3em}
+
+\noindent \textbf{Change \#226} with diff file ISSM-15621-15622.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/classes/stressbalance.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m\\
+Export determination: 6. \\
+Rationale: CHG: spcvx vy and vy need to be scaled before they are marshalled, removed unit conversion in CreateConstraintsDiagnosticHoriz and preparing HO with quadratic elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#227} with diff file ISSM-15622-15623.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: updating syntax highlight\\
+\vspace{3em}
+
+\noindent \textbf{Change \#228} with diff file ISSM-15623-15624.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/enum/FlowequationFeHOEnum.m\\
+Export determination: 6. \\
+Rationale: NEW: added FlowequationFeHOEnum.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#229} with diff file ISSM-15624-15625.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: NEW: for SSA and HO, use regular IoModelToConstraintx\\
+\vspace{3em}
+
+\noindent \textbf{Change \#230} with diff file ISSM-15625-15626.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.h\\
+Export determination: 6. \\
+Rationale: NEW: some changes necessary for P2 Elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#231} with diff file ISSM-15626-15627.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: forgot to account for isSIA in coupling flag\\
+\vspace{3em}
+
+\noindent \textbf{Change \#232} with diff file ISSM-15627-15628.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m\\
+Export determination: 6. \\
+Rationale: CHG: preparing P2xP1 3d to debug P2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#233} with diff file ISSM-15628-15629.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed Echo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#234} with diff file ISSM-15629-15630.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp\\
+Export determination: 6. \\
+Rationale: FIX: fixing compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#235} with diff file ISSM-15630-15631.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added marker to edges for P2xP1\\
+\vspace{3em}
+
+\noindent \textbf{Change \#236} with diff file ISSM-15631-15632.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp\\
+Export determination: 6. \\
+Rationale: CHG: do not create edges if edge marker is 2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#237} with diff file ISSM-15632-15633.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/matlab/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: reverted install.sh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#238} with diff file ISSM-15633-15634.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed segmentation fault\\
+\vspace{3em}
+
+\noindent \textbf{Change \#239} with diff file ISSM-15634-15635.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Nodes.cpp M /issm/trunk-jpl/src/c/classes/Nodes.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp\\
+Export determination: 6. \\
+Rationale: CHG: nodecounter should work on the maximum ID because we might skip some numbers, same for loads and constraints??\\
+\vspace{3em}
+
+\noindent \textbf{Change \#240} with diff file ISSM-15635-15636.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added support for P2xP1 constraints\\
+\vspace{3em}
+
+\noindent \textbf{Change \#241} with diff file ISSM-15636-15637.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/IcelevelsetEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m A /issm/trunk-jpl/src/m/enum/P1xP2Enum.m\\
+Export determination: 6. \\
+Rationale: NEW: added P1xP2 element for Penta, needs to be debugged\\
+\vspace{3em}
+
+\noindent \textbf{Change \#242} with diff file ISSM-15637-15638.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing P1xP2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#243} with diff file ISSM-15638-15639.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed nodal functions for P2xP2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#244} with diff file ISSM-15639-15640.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Nodes.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed case when nodes is empty\\
+\vspace{3em}
+
+\noindent \textbf{Change \#245} with diff file ISSM-15640-15641.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: CHG: GetBFriction now dynamically calculated\\
+\vspace{3em}
+
+\noindent \textbf{Change \#246} with diff file ISSM-15641-15642.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#247} with diff file ISSM-15642-15643.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: CHG: extending higher order elements to other solutions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#248} with diff file ISSM-15643-15644.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IndependentObject.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/settings.m M /issm/trunk-jpl/src/m/coordsystems/lambert2xy.m M /issm/trunk-jpl/src/m/coordsystems/xy2lambert.m M /issm/trunk-jpl/src/m/plot/plot\_icefront.m\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics, removed double blank lines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#249} with diff file ISSM-15644-15645.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py\\
+Export determination: 6. \\
+Rationale: CHG: md.flowequations.fe\_HO: 0 P1xP1, 1:P1xP2, 2:P2xP1, 3:P2xP2\\
+\vspace{3em}
+
+\noindent \textbf{Change \#250} with diff file ISSM-15645-15646.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/DofIndexing.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: look for SSA nodes....\\
+\vspace{3em}
+
+\noindent \textbf{Change \#251} with diff file ISSM-15646-15647.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1401.nc M /issm/trunk-jpl/test/Archives/Archive1402.nc\\
+Export determination: 6. \\
+Rationale: CHG: yams has a new number of vertices for some reason...\\
+\vspace{3em}
+
+\noindent \textbf{Change \#252} with diff file ISSM-15647-15648.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test119.m M /issm/trunk-jpl/test/NightlyRun/test119.py M /issm/trunk-jpl/test/NightlyRun/test225.m M /issm/trunk-jpl/test/NightlyRun/test225.py M /issm/trunk-jpl/test/NightlyRun/test429.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#253} with diff file ISSM-15648-15649.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1101.nc M /issm/trunk-jpl/test/Archives/Archive1102.nc M /issm/trunk-jpl/test/Archives/Archive1103.nc M /issm/trunk-jpl/test/Archives/Archive1104.nc M /issm/trunk-jpl/test/Archives/Archive1105.nc M /issm/trunk-jpl/test/Archives/Archive1106.nc M /issm/trunk-jpl/test/Archives/Archive1107.nc M /issm/trunk-jpl/test/Archives/Archive1108.nc M /issm/trunk-jpl/test/Archives/Archive1110.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated some archives (minor) for validation NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#254} with diff file ISSM-15649-15650.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp D /issm/trunk-jpl/src/c/classes/Loads/Icefront.h M /issm/trunk-jpl/src/c/classes/Loads/Load.h M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.h\\
+Export determination: 6. \\
+Rationale: NEW: removed ice front definitively\\
+\vspace{3em}
+
+\noindent \textbf{Change \#255} with diff file ISSM-15650-15651.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: NEW: removed all reference to ice front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#256} with diff file ISSM-15651-15652.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-murdo.sh\\
+Export determination: 6. \\
+Rationale: CHG: update configuration for X11\\
+\vspace{3em}
+
+\noindent \textbf{Change \#257} with diff file ISSM-15652-15653.diff: \\
+Function name: \\
+M /issm/trunk-jpl/execution M /issm/trunk-jpl/externalpackages/gdal M /issm/trunk-jpl/externalpackages/triangle\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#258} with diff file ISSM-15653-15654.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-murdo.sh\\
+Export determination: 6. \\
+Rationale: CHG: updated murdo configuration\\
+\vspace{3em}
+
+\noindent \textbf{Change \#259} with diff file ISSM-15654-15655.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp M /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/FSpressureEnum.m A /issm/trunk-jpl/src/m/enum/FSvelocityEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m A /issm/trunk-jpl/src/m/enum/P1P1Enum.m A /issm/trunk-jpl/src/m/enum/P1P1GLSEnum.m A /issm/trunk-jpl/src/m/enum/XYZEnum.m D /issm/trunk-jpl/src/m/enum/XYZPEnum.m\\
+Export determination: 6. \\
+Rationale: NEW: FS can now use different types of interpolation for velocity and pressure\\
+\vspace{3em}
+
+\noindent \textbf{Change \#260} with diff file ISSM-15655-15656.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/solve/WriteData.m M /issm/trunk-jpl/src/m/solve/WriteData.py\\
+Export determination: 6. \\
+Rationale: CHG: change last line of forcing before it is marshalled\\
+\vspace{3em}
+
+\noindent \textbf{Change \#261} with diff file ISSM-15656-15657.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py\\
+Export determination: 6. \\
+Rationale: NEW: Added Taylor Hood element for FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#262} with diff file ISSM-15657-15658.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#263} with diff file ISSM-15658-15659.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#264} with diff file ISSM-15659-15660.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#265} with diff file ISSM-15660-15661.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#266} with diff file ISSM-15661-15662.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#267} with diff file ISSM-15662-15663.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#268} with diff file ISSM-15663-15664.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#269} with diff file ISSM-15664-15665.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#270} with diff file ISSM-15665-15666.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#271} with diff file ISSM-15666-15667.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#272} with diff file ISSM-15667-15668.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#273} with diff file ISSM-15668-15669.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#274} with diff file ISSM-15669-15670.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#275} with diff file ISSM-15670-15671.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#276} with diff file ISSM-15671-15672.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#277} with diff file ISSM-15672-15673.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#278} with diff file ISSM-15673-15674.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#279} with diff file ISSM-15674-15675.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#280} with diff file ISSM-15675-15676.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#281} with diff file ISSM-15676-15677.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#282} with diff file ISSM-15677-15678.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#283} with diff file ISSM-15678-15679.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: added checks on petsc mkl lapack mumps\\
+\vspace{3em}
+
+\noindent \textbf{Change \#284} with diff file ISSM-15679-15680.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#285} with diff file ISSM-15680-15681.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#286} with diff file ISSM-15681-15682.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#287} with diff file ISSM-15682-15683.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#288} with diff file ISSM-15683-15684.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#289} with diff file ISSM-15684-15685.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#290} with diff file ISSM-15685-15686.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#291} with diff file ISSM-15686-15687.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#292} with diff file ISSM-15687-15688.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#293} with diff file ISSM-15688-15689.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#294} with diff file ISSM-15689-15690.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#295} with diff file ISSM-15690-15691.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#296} with diff file ISSM-15691-15692.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#297} with diff file ISSM-15692-15693.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#298} with diff file ISSM-15693-15694.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test286.m M /issm/trunk-jpl/test/NightlyRun/test286.py M /issm/trunk-jpl/test/NightlyRun/test290.m M /issm/trunk-jpl/test/NightlyRun/test290.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#299} with diff file ISSM-15694-15695.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#300} with diff file ISSM-15695-15696.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#301} with diff file ISSM-15696-15697.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#302} with diff file ISSM-15697-15698.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#303} with diff file ISSM-15698-15699.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#304} with diff file ISSM-15699-15700.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#305} with diff file ISSM-15700-15701.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#306} with diff file ISSM-15701-15702.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#307} with diff file ISSM-15702-15703.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#308} with diff file ISSM-15703-15704.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#309} with diff file ISSM-15704-15705.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#310} with diff file ISSM-15705-15706.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#311} with diff file ISSM-15706-15707.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#312} with diff file ISSM-15707-15708.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#313} with diff file ISSM-15708-15709.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#314} with diff file ISSM-15709-15710.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#315} with diff file ISSM-15710-15711.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#316} with diff file ISSM-15711-15712.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#317} with diff file ISSM-15712-15713.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#318} with diff file ISSM-15713-15714.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#319} with diff file ISSM-15714-15715.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#320} with diff file ISSM-15715-15716.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed error in BH\\
+\vspace{3em}
+
+\noindent \textbf{Change \#321} with diff file ISSM-15716-15717.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: removed check header on triangle and replaced by check file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#322} with diff file ISSM-15717-15718.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#323} with diff file ISSM-15718-15719.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#324} with diff file ISSM-15719-15720.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#325} with diff file ISSM-15720-15721.diff: \\
+Function name: \\
+\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#326} with diff file ISSM-15721-15722.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/valgrind/issm.supp\\
+Export determination: 6. \\
+Rationale: CHG: updating valgrind suppression file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#327} with diff file ISSM-15722-15723.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: finite element interpolation can vary inside a solution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#328} with diff file ISSM-15723-15724.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#329} with diff file ISSM-15724-15725.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: changed from FSApproximationEnum to FSvelocityEnum when recovering FS dof\\
+\vspace{3em}
+
+\noindent \textbf{Change \#330} with diff file ISSM-15725-15726.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.m\\
+Export determination: 6. \\
+Rationale: NEW: added check on conditional jumps\\
+\vspace{3em}
+
+\noindent \textbf{Change \#331} with diff file ISSM-15726-15727.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some bug fixes and HO now creates its own CreatePVector adjoint\\
+\vspace{3em}
+
+\noindent \textbf{Change \#332} with diff file ISSM-15727-15728.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/steadystate\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#333} with diff file ISSM-15728-15729.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/main/globals.h M /issm/trunk-jpl/src/c/toolkits/ToolkitOptions.cpp M /issm/trunk-jpl/src/c/toolkits/ToolkitOptions.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing some memory leaks + cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#334} with diff file ISSM-15729-15730.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive512.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating archive now that Adjoint CreateP vetor HO is in Penta.cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#335} with diff file ISSM-15730-15731.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: FIX: fixing tiling HOFS, KMatrix first\\
+\vspace{3em}
+
+\noindent \textbf{Change \#336} with diff file ISSM-15731-15732.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: CHG: extended multiple number of nodes to other solutions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#337} with diff file ISSM-15732-15733.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed segmentation fault\\
+\vspace{3em}
+
+\noindent \textbf{Change \#338} with diff file ISSM-15733-15734.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.m\\
+Export determination: 6. \\
+Rationale: NEW: added check on invalid read/write\\
+\vspace{3em}
+
+\noindent \textbf{Change \#339} with diff file ISSM-15734-15735.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added error message if coupling stokes: under development\\
+\vspace{3em}
+
+\noindent \textbf{Change \#340} with diff file ISSM-15735-15736.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test285.m M /issm/trunk-jpl/test/NightlyRun/test285.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing some tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#341} with diff file ISSM-15737-15738.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp M /issm/trunk-jpl/src/c/classes/Elements/ElementHook.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h\\
+Export determination: 6. \\
+Rationale: CHG: for higher order elements, SpawTria must provide more than three indices. For now, we only provide a location integer (0=base, 1=surface). Also removed Results->SpawnTriaResults as this function should never be used\\
+\vspace{3em}
+
+\noindent \textbf{Change \#342} with diff file ISSM-15738-15739.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#343} with diff file ISSM-15739-15740.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp\\
+Export determination: 6. \\
+Rationale: CHG explicit promotion of literal constants to (active) floats is unnecessary; they should stay just as constants (which without qualifier have double precision) for the mantissa while retaining the exponent as an integer may execute faster (compiler dependent); I discussed this with Eric\\
+\vspace{3em}
+
+\noindent \textbf{Change \#344} with diff file ISSM-15740-15741.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no need to cast numbers to IssmDouble (needed for AD, these variables are NOT active)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#345} with diff file ISSM-15741-15742.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp M /issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp M /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp M /issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp M /issm/trunk-jpl/src/c/classes/kriging/Quadtree.cpp M /issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp M /issm/trunk-jpl/src/c/shared/Elements/Arrhenius.cpp M /issm/trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp M /issm/trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp M /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp\\
+Export determination: 6. \\
+Rationale: CHG: keep the exponent as an integer may execute faster (compiler dependent)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#346} with diff file ISSM-15742-15743.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Echo matrix uses lines instead of vector (easier to read)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#347} with diff file ISSM-15743-15744.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adolc/install-dev.sh M /issm/trunk-jpl/externalpackages/adolc/install-update-dev.sh\\
+Export determination: 6. \\
+Rationale: CHG move adol-c to the ampi (=adjoinable MPI) git branch\\
+\vspace{3em}
+
+\noindent \textbf{Change \#348} with diff file ISSM-15744-15745.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: trying to fix coupling HO/FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#349} with diff file ISSM-15745-15746.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: no friction if floating for K FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#350} with diff file ISSM-15746-15747.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: condensation only if DiagnosticHoriz\\
+\vspace{3em}
+
+\noindent \textbf{Change \#351} with diff file ISSM-15747-15748.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: CHG: spc pressure if not FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#352} with diff file ISSM-15748-15749.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_icefront.m\\
+Export determination: 6. \\
+Rationale: BUG: fixed front for 3d models\\
+\vspace{3em}
+
+\noindent \textbf{Change \#353} with diff file ISSM-15749-15750.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/mask.m M /issm/trunk-jpl/src/m/classes/mask.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/contrib/bamg/BamgCall.m M /issm/trunk-jpl/src/m/contrib/bamg/YamsCall.m M /issm/trunk-jpl/src/m/contrib/bamg/YamsCall.py M /issm/trunk-jpl/src/m/contrib/bamg/yams.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/MaskElementonwaterEnum.m D /issm/trunk-jpl/src/m/enum/MaskVertexonwaterEnum.m M /issm/trunk-jpl/src/m/mesh/ComputeMetric.m M /issm/trunk-jpl/src/m/mesh/ComputeMetric.py M /issm/trunk-jpl/src/m/mesh/MeshQuality.m M /issm/trunk-jpl/src/m/mesh/bamg.m M /issm/trunk-jpl/src/m/mesh/bamg.py M /issm/trunk-jpl/src/m/mesh/meshconvert.m M /issm/trunk-jpl/src/m/parameterization/setmask.m M /issm/trunk-jpl/src/m/parameterization/setmask.py\\
+Export determination: 6. \\
+Rationale: CHG: removing elements and vertices on water, which is now included in icelevelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#354} with diff file ISSM-15750-15751.diff: \\
+Function name: \\
+M /issm/trunk-jpl/startup.m\\
+Export determination: 6. \\
+Rationale: CHG: simplifying startup.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#355} with diff file ISSM-15751-15752.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: need to condense Stokes in PVectorHOFS fot tiling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#356} with diff file ISSM-15752-15753.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: starting to debug coupling SSA/FS shelf\\
+\vspace{3em}
+
+\noindent \textbf{Change \#357} with diff file ISSM-15753-15754.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed pressure for coupling HO/FS and starting debuging SSA/FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#358} with diff file ISSM-15754-15755.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\\
+Export determination: 6. \\
+Rationale: BUG: add MaskIceleveset to element inputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#359} with diff file ISSM-15755-15756.diff: \\
+Function name: \\
+M /issm/trunk-jpl/packagers/ubuntu/README\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#360} with diff file ISSM-15756-15757.diff: \\
+Function name: \\
+A /issm/trunk-jpl/packagers/ubuntu/issm.deb\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#361} with diff file ISSM-15757-15758.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: coupling SSA/FS now running with errors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#362} with diff file ISSM-15758-15759.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some other solution need MaskIcelevelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#363} with diff file ISSM-15759-15760.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/adjoinablempi A /issm/trunk-jpl/externalpackages/adjoinablempi/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: new library adjoinable MPI, from Jean Utke\\
+\vspace{3em}
+
+\noindent \textbf{Change \#364} with diff file ISSM-15760-15761.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/adolc/install-2.2.0.sh D /issm/trunk-jpl/externalpackages/adolc/install-dev.sh D /issm/trunk-jpl/externalpackages/adolc/install-update-dev.sh A /issm/trunk-jpl/externalpackages/adolc/install.sh (from /issm/trunk-jpl/externalpackages/adolc/install-dev.sh:15759) A /issm/trunk-jpl/externalpackages/adolc/old A /issm/trunk-jpl/externalpackages/adolc/old/install-2.2.0.sh (from /issm/trunk-jpl/externalpackages/adolc/install-2.2.0.sh:15759) A /issm/trunk-jpl/externalpackages/adolc/old/update.sh (from /issm/trunk-jpl/externalpackages/adolc/update.sh:15759) A /issm/trunk-jpl/externalpackages/adolc/update-existing.sh (from /issm/trunk-jpl/externalpackages/adolc/install-update-dev.sh:15759) D /issm/trunk-jpl/externalpackages/adolc/update.sh\\
+Export determination: 6. \\
+Rationale: CHG: moved old config files to old/ directory. Renamed to make it clearer.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#365} with diff file ISSM-15761-15762.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adjoinablempi/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: point to mpich\\
+\vspace{3em}
+
+\noindent \textbf{Change \#366} with diff file ISSM-15762-15763.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/adolc/install-withampi.sh M /issm/trunk-jpl/externalpackages/adolc/install.sh M /issm/trunk-jpl/externalpackages/adolc/update-existing.sh\\
+Export determination: 6. \\
+Rationale: CHG: added dynamic linking to pmpich, which was missing.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#367} with diff file ISSM-15763-15764.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adjoinablempi\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#368} with diff file ISSM-15764-15765.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: added adjoinable mpi libraries in autotools and the makefiles\\
+\vspace{3em}
+
+\noindent \textbf{Change \#369} with diff file ISSM-15765-15766.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Hydrology Shreve needs to who where ice is floating and where it is grounded\\
+\vspace{3em}
+
+\noindent \textbf{Change \#370} with diff file ISSM-15766-15767.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive215.nc M /issm/trunk-jpl/test/Archives/Archive322.nc M /issm/trunk-jpl/test/Archives/Archive511.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating archive, as we discovered that friction was applied to all elements in FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#371} with diff file ISSM-15767-15768.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/ad/validation/Update/update.m M /issm/trunk-jpl/src/ad/validation/Validation/validation.m M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/analyses/analyses.h A /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp (from /issm/trunk-jpl/src/c/analyses/prognostic\_core.cpp:15764) D /issm/trunk-jpl/src/c/analyses/prognostic\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.h M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic:15764) A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp:15764) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateConstraintsPrognostic.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp:15764) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateLoadsPrognostic.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp:15764) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesPrognostic.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp:15764) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py M /issm/trunk-jpl/src/m/classes/basalforcings.m M /issm/trunk-jpl/src/m/classes/basalforcings.py M /issm/trunk-jpl/src/m/classes/gia.m M /issm/trunk-jpl/src/m/classes/gia.py M /issm/trunk-jpl/src/m/classes/initialization.m M /issm/trunk-jpl/src/m/classes/initialization.py A /issm/trunk-jpl/src/m/classes/masstransport.m (from /issm/trunk-jpl/src/m/classes/prognostic.m:15764) A /issm/trunk-jpl/src/m/classes/masstransport.py (from /issm/trunk-jpl/src/m/classes/prognostic.py:15764) M /issm/trunk-jpl/src/m/classes/mesh.m M /issm/trunk-jpl/src/m/classes/mesh.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/classes/model/planet.m M /issm/trunk-jpl/src/m/classes/modellist.m A /issm/trunk-jpl/src/m/classes/oldclasses/prognostic.m (from /issm/trunk-jpl/src/m/classes/prognostic.m:15764) M /issm/trunk-jpl/src/m/classes/planetmesh.m D /issm/trunk-jpl/src/m/classes/prognostic.m D /issm/trunk-jpl/src/m/classes/prognostic.py M /issm/trunk-jpl/src/m/classes/surfaceforcings.m M /issm/trunk-jpl/src/m/classes/surfaceforcings.py M /issm/trunk-jpl/src/m/classes/transient.m M /issm/trunk-jpl/src/m/classes/transient.py M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MasstransportAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportHydrostaticAdjustmentEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportMinThicknessEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportNumRequestedOutputsEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportPenaltyFactorEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportRequestedOutputsEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportSolutionEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportSpcthicknessEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportStabilizationEnum.m A /issm/trunk-jpl/src/m/enum/MasstransportVertexPairingEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticHydrostaticAdjustmentEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticMinThicknessEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticNumRequestedOutputsEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticPenaltyFactorEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticRequestedOutputsEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticSolutionEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticSpcthicknessEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticStabilizationEnum.m D /issm/trunk-jpl/src/m/enum/PrognosticVertexPairingEnum.m A /issm/trunk-jpl/src/m/enum/TransientIsmasstransportEnum.m D /issm/trunk-jpl/src/m/enum/TransientIsprognosticEnum.m M /issm/trunk-jpl/src/m/qmu/process\_qmu\_options.m M /issm/trunk-jpl/src/m/regional/regionaltransient2d.m M /issm/trunk-jpl/src/m/solve/process\_solve\_options.m M /issm/trunk-jpl/src/m/solve/process\_solve\_options.py M /issm/trunk-jpl/src/m/solve/solve.m M /issm/trunk-jpl/src/m/solve/solve.py M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py M /issm/trunk-jpl/test/NightlyRun/test105.m M /issm/trunk-jpl/test/NightlyRun/test105.py M /issm/trunk-jpl/test/NightlyRun/test106.m M /issm/trunk-jpl/test/NightlyRun/test106.py M /issm/trunk-jpl/test/NightlyRun/test107.m M /issm/trunk-jpl/test/NightlyRun/test107.py M /issm/trunk-jpl/test/NightlyRun/test109.m M /issm/trunk-jpl/test/NightlyRun/test109.py M /issm/trunk-jpl/test/NightlyRun/test1110.m M /issm/trunk-jpl/test/NightlyRun/test1201.m M /issm/trunk-jpl/test/NightlyRun/test1201.py M /issm/trunk-jpl/test/NightlyRun/test1202.m M /issm/trunk-jpl/test/NightlyRun/test1202.py M /issm/trunk-jpl/test/NightlyRun/test1203.m M /issm/trunk-jpl/test/NightlyRun/test1203.py M /issm/trunk-jpl/test/NightlyRun/test1204.m M /issm/trunk-jpl/test/NightlyRun/test1204.py M /issm/trunk-jpl/test/NightlyRun/test1208.m M /issm/trunk-jpl/test/NightlyRun/test1208.py M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test121.py M /issm/trunk-jpl/test/NightlyRun/test1501.m M /issm/trunk-jpl/test/NightlyRun/test1501.py M /issm/trunk-jpl/test/NightlyRun/test1502.m M /issm/trunk-jpl/test/NightlyRun/test1502.py M /issm/trunk-jpl/test/NightlyRun/test207.m M /issm/trunk-jpl/test/NightlyRun/test207.py M /issm/trunk-jpl/test/NightlyRun/test222.m M /issm/trunk-jpl/test/NightlyRun/test222.py M /issm/trunk-jpl/test/NightlyRun/test223.m M /issm/trunk-jpl/test/NightlyRun/test223.py M /issm/trunk-jpl/test/NightlyRun/test224.m M /issm/trunk-jpl/test/NightlyRun/test224.py M /issm/trunk-jpl/test/NightlyRun/test225.m M /issm/trunk-jpl/test/NightlyRun/test225.py M /issm/trunk-jpl/test/NightlyRun/test232.m M /issm/trunk-jpl/test/NightlyRun/test232.py M /issm/trunk-jpl/test/NightlyRun/test3005.m M /issm/trunk-jpl/test/NightlyRun/test3005.py M /issm/trunk-jpl/test/NightlyRun/test3006.m M /issm/trunk-jpl/test/NightlyRun/test3006.py M /issm/trunk-jpl/test/NightlyRun/test3007.m M /issm/trunk-jpl/test/NightlyRun/test3007.py M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test3009.py M /issm/trunk-jpl/test/NightlyRun/test3015.m M /issm/trunk-jpl/test/NightlyRun/test3015.py M /issm/trunk-jpl/test/NightlyRun/test309.m M /issm/trunk-jpl/test/NightlyRun/test309.py M /issm/trunk-jpl/test/NightlyRun/test310.m M /issm/trunk-jpl/test/NightlyRun/test310.py M /issm/trunk-jpl/test/NightlyRun/test311.m M /issm/trunk-jpl/test/NightlyRun/test311.py M /issm/trunk-jpl/test/NightlyRun/test313.m M /issm/trunk-jpl/test/NightlyRun/test313.py M /issm/trunk-jpl/test/NightlyRun/test326.m M /issm/trunk-jpl/test/NightlyRun/test326.py M /issm/trunk-jpl/test/NightlyRun/test407.m M /issm/trunk-jpl/test/NightlyRun/test407.py M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test423.py M /issm/trunk-jpl/test/NightlyRun/test433.m M /issm/trunk-jpl/test/NightlyRun/test433.py M /issm/trunk-jpl/test/NightlyRun/test515.m M /issm/trunk-jpl/test/NightlyRun/test515.py M /issm/trunk-jpl/test/NightlyRun/test601.m M /issm/trunk-jpl/test/NightlyRun/test601.py M /issm/trunk-jpl/test/NightlyRun/test602.m M /issm/trunk-jpl/test/NightlyRun/test602.py M /issm/trunk-jpl/test/NightlyRun/test603.m M /issm/trunk-jpl/test/NightlyRun/test603.py M /issm/trunk-jpl/test/NightlyRun/test611.m M /issm/trunk-jpl/test/NightlyRun/test611.py M /issm/trunk-jpl/test/Par/79North.par M /issm/trunk-jpl/test/Par/79North.py M /issm/trunk-jpl/test/Par/GiaBenchmarksAB.par M /issm/trunk-jpl/test/Par/GiaBenchmarksCD.par M /issm/trunk-jpl/test/Par/ISMIPF.par M /issm/trunk-jpl/test/Par/ISMIPF.py M /issm/trunk-jpl/test/Par/Pig.par M /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.par M /issm/trunk-jpl/test/Par/RoundSheetShelf.py M /issm/trunk-jpl/test/Par/SquareEISMINT.par M /issm/trunk-jpl/test/Par/SquareEISMINT.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.par M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.par M /issm/trunk-jpl/test/Par/SquareShelf2.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py\\
+Export determination: 6. \\
+Rationale: CHG: Prognostic is now Masstransport\\
+\vspace{3em}
+
+\noindent \textbf{Change \#372} with diff file ISSM-15768-15769.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/masstransport.m M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/oldclasses/diagnostic.m\\
+Export determination: 6. \\
+Rationale: CHG: can now load old models\\
+\vspace{3em}
+
+\noindent \textbf{Change \#373} with diff file ISSM-15769-15770.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: Fixed tiling ice shelf\\
+\vspace{3em}
+
+\noindent \textbf{Change \#374} with diff file ISSM-15770-15771.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: starting to debug tiling HO/FS for ice sheets\\
+\vspace{3em}
+
+\noindent \textbf{Change \#375} with diff file ISSM-15771-15772.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/ad/validation/Update/SquareShelfConstrained.par M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/AdjointCorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp D /issm/trunk-jpl/src/c/analyses/adjointdiagnostic\_core.cpp A /issm/trunk-jpl/src/c/analyses/adjointstressbalance\_core.cpp (from /issm/trunk-jpl/src/c/analyses/adjointdiagnostic\_core.cpp:15769) M /issm/trunk-jpl/src/c/analyses/analyses.h M /issm/trunk-jpl/src/c/analyses/control\_core.cpp M /issm/trunk-jpl/src/c/analyses/dakota\_core.cpp D /issm/trunk-jpl/src/c/analyses/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/analyses/objectivefunction.cpp M /issm/trunk-jpl/src/c/analyses/steadystate\_core.cpp A /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp (from /issm/trunk-jpl/src/c/analyses/diagnostic\_core.cpp:15769) M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp D /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz D /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter D /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsDiagnosticHoriz.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsDiagnosticHoriz.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesDiagnosticHoriz.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsDiagnosticHoriz.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp:15769) A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsDiagnosticHutter.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateLoadsDiagnosticHutter.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesDiagnosticHutter.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsDiagnosticHutter.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp:15769) A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsDiagnosticVert.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateLoadsDiagnosticVert.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesDiagnosticVert.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp:15769) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsDiagnosticVert.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp:15769) M /issm/trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/solutionsequences/convergence.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_newton.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_stokescoupling\_nonlinear.cpp M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/classes/friction.m M /issm/trunk-jpl/src/m/classes/friction.py M /issm/trunk-jpl/src/m/classes/initialization.m M /issm/trunk-jpl/src/m/classes/initialization.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/classes/model/planet.m M /issm/trunk-jpl/src/m/classes/modellist.m M /issm/trunk-jpl/src/m/classes/oldclasses/diagnostic.m M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dakota\_method.m M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dmeth\_params\_write.m M /issm/trunk-jpl/src/m/classes/steadystate.m M /issm/trunk-jpl/src/m/classes/steadystate.py M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/classes/stressbalance.py M /issm/trunk-jpl/src/m/classes/toolkits.m M /issm/trunk-jpl/src/m/classes/toolkits.py M /issm/trunk-jpl/src/m/classes/transient.m M /issm/trunk-jpl/src/m/classes/transient.py M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py M /issm/trunk-jpl/src/m/contrib/hack/tres.m M /issm/trunk-jpl/src/m/contrib/massbalance/contourmassbalance.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/inversions/MisfitDeinterlace.m M /issm/trunk-jpl/src/m/mech/cfl\_step.m M /issm/trunk-jpl/src/m/miscellaneous/issmdoc.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.py M /issm/trunk-jpl/src/m/plot/plot\_BC.m M /issm/trunk-jpl/src/m/plot/plot\_referential.m M /issm/trunk-jpl/src/m/plot/plotdoc.m M /issm/trunk-jpl/src/m/qmu/dakota\_m\_write.m M /issm/trunk-jpl/src/m/qmu/examples/direct.m M /issm/trunk-jpl/src/m/qmu/examples/lrel\_mmf.m M /issm/trunk-jpl/src/m/qmu/examples/samp\_direct.m M /issm/trunk-jpl/src/m/qmu/preqmu.m M /issm/trunk-jpl/src/m/qmu/process\_qmu\_options.m M /issm/trunk-jpl/src/m/regional/BasinConstrain.m M /issm/trunk-jpl/src/m/regional/BasinConstrainShelf.m M /issm/trunk-jpl/src/m/regional/regionaltransient2d.m M /issm/trunk-jpl/src/m/solve/process\_solve\_options.m M /issm/trunk-jpl/src/m/solve/process\_solve\_options.py M /issm/trunk-jpl/src/m/solve/solve.m M /issm/trunk-jpl/src/m/solve/solve.py M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py M /issm/trunk-jpl/test/NightlyRun/android.m M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test101.py M /issm/trunk-jpl/test/NightlyRun/test102.m M /issm/trunk-jpl/test/NightlyRun/test102.py M /issm/trunk-jpl/test/NightlyRun/test103.m M /issm/trunk-jpl/test/NightlyRun/test103.py M /issm/trunk-jpl/test/NightlyRun/test104.m M /issm/trunk-jpl/test/NightlyRun/test104.py M /issm/trunk-jpl/test/NightlyRun/test109.m M /issm/trunk-jpl/test/NightlyRun/test109.py M /issm/trunk-jpl/test/NightlyRun/test1101.m M /issm/trunk-jpl/test/NightlyRun/test1101.py M /issm/trunk-jpl/test/NightlyRun/test1102.m M /issm/trunk-jpl/test/NightlyRun/test1102.py M /issm/trunk-jpl/test/NightlyRun/test1103.m M /issm/trunk-jpl/test/NightlyRun/test1103.py M /issm/trunk-jpl/test/NightlyRun/test1104.m M /issm/trunk-jpl/test/NightlyRun/test1104.py M /issm/trunk-jpl/test/NightlyRun/test1105.m M /issm/trunk-jpl/test/NightlyRun/test1105.py M /issm/trunk-jpl/test/NightlyRun/test1106.m M /issm/trunk-jpl/test/NightlyRun/test1106.py M /issm/trunk-jpl/test/NightlyRun/test1107.m M /issm/trunk-jpl/test/NightlyRun/test1107.py M /issm/trunk-jpl/test/NightlyRun/test1108.m M /issm/trunk-jpl/test/NightlyRun/test1108.py M /issm/trunk-jpl/test/NightlyRun/test1109.m M /issm/trunk-jpl/test/NightlyRun/test1110.m M /issm/trunk-jpl/test/NightlyRun/test1201.m M /issm/trunk-jpl/test/NightlyRun/test1201.py M /issm/trunk-jpl/test/NightlyRun/test1202.m M /issm/trunk-jpl/test/NightlyRun/test1202.py M /issm/trunk-jpl/test/NightlyRun/test1203.m M /issm/trunk-jpl/test/NightlyRun/test1203.py M /issm/trunk-jpl/test/NightlyRun/test1204.m M /issm/trunk-jpl/test/NightlyRun/test1204.py M /issm/trunk-jpl/test/NightlyRun/test1205.m M /issm/trunk-jpl/test/NightlyRun/test1205.py M /issm/trunk-jpl/test/NightlyRun/test1206.m M /issm/trunk-jpl/test/NightlyRun/test1206.py M /issm/trunk-jpl/test/NightlyRun/test1207.m M /issm/trunk-jpl/test/NightlyRun/test1207.py M /issm/trunk-jpl/test/NightlyRun/test1208.m M /issm/trunk-jpl/test/NightlyRun/test1208.py M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test121.py M /issm/trunk-jpl/test/NightlyRun/test1601.m M /issm/trunk-jpl/test/NightlyRun/test1601.py M /issm/trunk-jpl/test/NightlyRun/test1602.m M /issm/trunk-jpl/test/NightlyRun/test1602.py M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test201.py M /issm/trunk-jpl/test/NightlyRun/test202.m M /issm/trunk-jpl/test/NightlyRun/test202.py M /issm/trunk-jpl/test/NightlyRun/test203.m M /issm/trunk-jpl/test/NightlyRun/test203.py M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/NightlyRun/test204.py M /issm/trunk-jpl/test/NightlyRun/test205.m M /issm/trunk-jpl/test/NightlyRun/test205.py M /issm/trunk-jpl/test/NightlyRun/test207.m M /issm/trunk-jpl/test/NightlyRun/test207.py M /issm/trunk-jpl/test/NightlyRun/test211.m M /issm/trunk-jpl/test/NightlyRun/test211.py M /issm/trunk-jpl/test/NightlyRun/test212.m M /issm/trunk-jpl/test/NightlyRun/test212.py M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test213.py M /issm/trunk-jpl/test/NightlyRun/test214.m M /issm/trunk-jpl/test/NightlyRun/test214.py M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test216.py M /issm/trunk-jpl/test/NightlyRun/test217.m M /issm/trunk-jpl/test/NightlyRun/test217.py M /issm/trunk-jpl/test/NightlyRun/test218.m M /issm/trunk-jpl/test/NightlyRun/test219.m M /issm/trunk-jpl/test/NightlyRun/test219.py M /issm/trunk-jpl/test/NightlyRun/test220.m M /issm/trunk-jpl/test/NightlyRun/test220.py M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test221.py M /issm/trunk-jpl/test/NightlyRun/test232.m M /issm/trunk-jpl/test/NightlyRun/test232.py M /issm/trunk-jpl/test/NightlyRun/test234.m M /issm/trunk-jpl/test/NightlyRun/test235.m M /issm/trunk-jpl/test/NightlyRun/test270.m M /issm/trunk-jpl/test/NightlyRun/test270.py M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test274.py M /issm/trunk-jpl/test/NightlyRun/test280.m M /issm/trunk-jpl/test/NightlyRun/test280.py M /issm/trunk-jpl/test/NightlyRun/test285.m M /issm/trunk-jpl/test/NightlyRun/test285.py M /issm/trunk-jpl/test/NightlyRun/test286.m M /issm/trunk-jpl/test/NightlyRun/test286.py M /issm/trunk-jpl/test/NightlyRun/test287.m M /issm/trunk-jpl/test/NightlyRun/test287.py M /issm/trunk-jpl/test/NightlyRun/test290.m M /issm/trunk-jpl/test/NightlyRun/test290.py M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3001.py M /issm/trunk-jpl/test/NightlyRun/test3002.m M /issm/trunk-jpl/test/NightlyRun/test3002.py M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3004.m M /issm/trunk-jpl/test/NightlyRun/test3004.py M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test3009.py M /issm/trunk-jpl/test/NightlyRun/test301.m M /issm/trunk-jpl/test/NightlyRun/test301.py M /issm/trunk-jpl/test/NightlyRun/test302.m M /issm/trunk-jpl/test/NightlyRun/test302.py M /issm/trunk-jpl/test/NightlyRun/test3020.m M /issm/trunk-jpl/test/NightlyRun/test3020.py M /issm/trunk-jpl/test/NightlyRun/test3021.m M /issm/trunk-jpl/test/NightlyRun/test303.m M /issm/trunk-jpl/test/NightlyRun/test303.py M /issm/trunk-jpl/test/NightlyRun/test304.m M /issm/trunk-jpl/test/NightlyRun/test304.py M /issm/trunk-jpl/test/NightlyRun/test305.m M /issm/trunk-jpl/test/NightlyRun/test305.py M /issm/trunk-jpl/test/NightlyRun/test306.m M /issm/trunk-jpl/test/NightlyRun/test306.py M /issm/trunk-jpl/test/NightlyRun/test307.m M /issm/trunk-jpl/test/NightlyRun/test307.py M /issm/trunk-jpl/test/NightlyRun/test308.m M /issm/trunk-jpl/test/NightlyRun/test308.py M /issm/trunk-jpl/test/NightlyRun/test313.m M /issm/trunk-jpl/test/NightlyRun/test313.py M /issm/trunk-jpl/test/NightlyRun/test319.m M /issm/trunk-jpl/test/NightlyRun/test319.py M /issm/trunk-jpl/test/NightlyRun/test320.m M /issm/trunk-jpl/test/NightlyRun/test320.py M /issm/trunk-jpl/test/NightlyRun/test321.m M /issm/trunk-jpl/test/NightlyRun/test321.py M /issm/trunk-jpl/test/NightlyRun/test322.m M /issm/trunk-jpl/test/NightlyRun/test322.py M /issm/trunk-jpl/test/NightlyRun/test326.m M /issm/trunk-jpl/test/NightlyRun/test326.py M /issm/trunk-jpl/test/NightlyRun/test401.m M /issm/trunk-jpl/test/NightlyRun/test401.py M /issm/trunk-jpl/test/NightlyRun/test402.m M /issm/trunk-jpl/test/NightlyRun/test402.py M /issm/trunk-jpl/test/NightlyRun/test403.m M /issm/trunk-jpl/test/NightlyRun/test403.py M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test404.py M /issm/trunk-jpl/test/NightlyRun/test405.m M /issm/trunk-jpl/test/NightlyRun/test405.py M /issm/trunk-jpl/test/NightlyRun/test407.m M /issm/trunk-jpl/test/NightlyRun/test407.py M /issm/trunk-jpl/test/NightlyRun/test412.m M /issm/trunk-jpl/test/NightlyRun/test413.m M /issm/trunk-jpl/test/NightlyRun/test414.m M /issm/trunk-jpl/test/NightlyRun/test417.m M /issm/trunk-jpl/test/NightlyRun/test419.m M /issm/trunk-jpl/test/NightlyRun/test419.py M /issm/trunk-jpl/test/NightlyRun/test420.m M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test422.py M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test423.py M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test425.m M /issm/trunk-jpl/test/NightlyRun/test425.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py M /issm/trunk-jpl/test/NightlyRun/test427.m M /issm/trunk-jpl/test/NightlyRun/test427.py M /issm/trunk-jpl/test/NightlyRun/test428.m M /issm/trunk-jpl/test/NightlyRun/test428.py M /issm/trunk-jpl/test/NightlyRun/test429.m M /issm/trunk-jpl/test/NightlyRun/test429.py M /issm/trunk-jpl/test/NightlyRun/test430.m M /issm/trunk-jpl/test/NightlyRun/test430.py M /issm/trunk-jpl/test/NightlyRun/test433.m M /issm/trunk-jpl/test/NightlyRun/test433.py M /issm/trunk-jpl/test/NightlyRun/test434.m M /issm/trunk-jpl/test/NightlyRun/test434.py M /issm/trunk-jpl/test/NightlyRun/test501.m M /issm/trunk-jpl/test/NightlyRun/test501.py M /issm/trunk-jpl/test/NightlyRun/test502.m M /issm/trunk-jpl/test/NightlyRun/test502.py M /issm/trunk-jpl/test/NightlyRun/test503.m M /issm/trunk-jpl/test/NightlyRun/test503.py M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test511.py M /issm/trunk-jpl/test/NightlyRun/test512.m M /issm/trunk-jpl/test/NightlyRun/test512.py M /issm/trunk-jpl/test/NightlyRun/test515.m M /issm/trunk-jpl/test/NightlyRun/test515.py M /issm/trunk-jpl/test/Par/79North.par M /issm/trunk-jpl/test/Par/79North.py M /issm/trunk-jpl/test/Par/GiaBenchmarksAB.par M /issm/trunk-jpl/test/Par/GiaBenchmarksCD.par M /issm/trunk-jpl/test/Par/ISMIPA.par M /issm/trunk-jpl/test/Par/ISMIPA.py M /issm/trunk-jpl/test/Par/ISMIPB.par M /issm/trunk-jpl/test/Par/ISMIPB.py M /issm/trunk-jpl/test/Par/ISMIPC.par M /issm/trunk-jpl/test/Par/ISMIPC.py M /issm/trunk-jpl/test/Par/ISMIPD.par M /issm/trunk-jpl/test/Par/ISMIPD.py M /issm/trunk-jpl/test/Par/ISMIPE.par M /issm/trunk-jpl/test/Par/ISMIPE.py M /issm/trunk-jpl/test/Par/ISMIPF.par M /issm/trunk-jpl/test/Par/ISMIPF.py M /issm/trunk-jpl/test/Par/Pig.par M /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/RoundSheetEISMINT.par M /issm/trunk-jpl/test/Par/RoundSheetEISMINT.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.par M /issm/trunk-jpl/test/Par/RoundSheetShelf.py M /issm/trunk-jpl/test/Par/RoundSheetStaticEISMINT.par M /issm/trunk-jpl/test/Par/RoundSheetStaticEISMINT.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.par M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.par M /issm/trunk-jpl/test/Par/SquareShelf2.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py M /issm/trunk-jpl/test/Par/SquareThermal.par M /issm/trunk-jpl/test/Par/SquareThermal.py\\
+Export determination: 6. \\
+Rationale: CHG: Diagnostic is now Stressbalance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#376} with diff file ISSM-15772-15773.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: minor fix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#377} with diff file ISSM-15773-15774.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/enum/DiagnosticAbstolEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticFSreconditioningEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticHorizAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticIcefrontEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticIsnewtonEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticMaxiterEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticNumRequestedOutputsEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticPenaltyFactorEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticReferentialEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticReltolEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticRequestedOutputsEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticRestolEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticRiftPenaltyLockEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticRiftPenaltyThresholdEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticSIAAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticShelfDampeningEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticSolutionEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticSpcvxEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticSpcvyEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticSpcvzEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticVertAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticVertexPairingEnum.m D /issm/trunk-jpl/src/m/enum/DiagnosticViscosityOvershootEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceAbstolEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceFSreconditioningEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceIcefrontEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceIsnewtonEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceMaxiterEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceNumRequestedOutputsEnum.m A /issm/trunk-jpl/src/m/enum/StressbalancePenaltyFactorEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceReferentialEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceReltolEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceRequestedOutputsEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceRestolEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceRiftPenaltyLockEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceRiftPenaltyThresholdEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceSIAAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceShelfDampeningEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceSolutionEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceSpcvxEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceSpcvyEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceSpcvzEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceVertexPairingEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceVerticalAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/StressbalanceViscosityOvershootEnum.m D /issm/trunk-jpl/src/m/enum/TransientIsdiagnosticEnum.m A /issm/trunk-jpl/src/m/enum/TransientIsstressbalanceEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: Syncing Enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#378} with diff file ISSM-15774-15775.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-ad.sh M /issm/trunk-jpl/configs/config-macosx64-ad.sh\\
+Export determination: 6. \\
+Rationale: CHG: diagnostic is now stressbalance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#379} with diff file ISSM-15775-15776.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.m\\
+Export determination: 6. \\
+Rationale: CHG: can now load old models with md.diagnostic\\
+\vspace{3em}
+
+\noindent \textbf{Change \#380} with diff file ISSM-15776-15777.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed coupling HO/FS ice sheet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#381} with diff file ISSM-15777-15778.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmAbsMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmAbsVec.h\\
+Export determination: 6. \\
+Rationale: CHG: include types in order to define IssmDouble\\
+\vspace{3em}
+
+\noindent \textbf{Change \#382} with diff file ISSM-15778-15779.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/adjoinablempi/install-macosx64.sh M /issm/trunk-jpl/externalpackages/adjoinablempi/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: variations of the install script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#383} with diff file ISSM-15779-15780.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed coupling SSA/FS sheet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#384} with diff file ISSM-15780-15781.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adolc A /issm/trunk-jpl/externalpackages/adolc/install-withampi-macosx64.sh M /issm/trunk-jpl/externalpackages/adolc/install-withampi.sh\\
+Export determination: 6. \\
+Rationale: CHG: updated install script to apply to macosx64 and linux64\\
+\vspace{3em}
+
+\noindent \textbf{Change \#385} with diff file ISSM-15781-15782.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adolc\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#386} with diff file ISSM-15782-15783.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/main/kriging.cpp\\
+Export determination: 6. \\
+Rationale: CHG: MPI\_COMM undefined\\
+\vspace{3em}
+
+\noindent \textbf{Change \#387} with diff file ISSM-15783-15784.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed leak:\\
+\vspace{3em}
+
+\noindent \textbf{Change \#388} with diff file ISSM-15784-15785.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-discover.sh M /issm/trunk-jpl/configs/config-linux64-larsen-ad.sh M /issm/trunk-jpl/configs/config-linux64-murdo-ad.sh M /issm/trunk-jpl/configs/config-linux64-murdo-nopetsc.sh M /issm/trunk-jpl/configs/config-linux64-murdo.sh M /issm/trunk-jpl/configs/config-linux64-ubuntu64.sh M /issm/trunk-jpl/configs/config-macosx64-ogive.sh M /issm/trunk-jpl/configs/config-macosx64.sh M /issm/trunk-jpl/configs/config-win7-32.sh M /issm/trunk-jpl/configs/config-win7-64.sh\\
+Export determination: 6. \\
+Rationale: CHG: MATLAB\_DIR is not defined by default\\
+\vspace{3em}
+
+\noindent \textbf{Change \#389} with diff file ISSM-15785-15786.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor useless empty line\\
+\vspace{3em}
+
+\noindent \textbf{Change \#390} with diff file ISSM-15786-15787.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.m\\
+Export determination: 6. \\
+Rationale: CHG: there is no return data\\
+\vspace{3em}
+
+\noindent \textbf{Change \#391} with diff file ISSM-15787-15788.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: don't delete doflist\\
+\vspace{3em}
+
+\noindent \textbf{Change \#392} with diff file ISSM-15788-15789.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#393} with diff file ISSM-15789-15790.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed BC\\
+\vspace{3em}
+
+\noindent \textbf{Change \#394} with diff file ISSM-15790-15791.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#395} with diff file ISSM-15791-15792.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test237.m M /issm/trunk-jpl/test/NightlyRun/test237.py\\
+Export determination: 6. \\
+Rationale: CHG: use only one cpu for small mesh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#396} with diff file ISSM-15792-15793.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h\\
+Export determination: 6. \\
+Rationale: CHG: update coordinates for all basal nodes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#397} with diff file ISSM-15793-15794.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h\\
+Export determination: 6. \\
+Rationale: BUG: wrong prototype\\
+\vspace{3em}
+
+\noindent \textbf{Change \#398} with diff file ISSM-15794-15795.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing penalty for FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#399} with diff file ISSM-15795-15796.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m\\
+Export determination: 6. \\
+Rationale: CHG: added spcs on the border of ice front to get coherent boundary conditions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#400} with diff file ISSM-15796-15797.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: CHG: trying to add boundary condition change in python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#401} with diff file ISSM-15797-15798.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: CHG: fixing python BC\\
+\vspace{3em}
+
+\noindent \textbf{Change \#402} with diff file ISSM-15798-15799.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: FIX: python BC again\\
+\vspace{3em}
+
+\noindent \textbf{Change \#403} with diff file ISSM-15799-15800.diff: \\
+Function name: \\
+A /issm/trunk-jpl/examples/Mesh A /issm/trunk-jpl/examples/Mesh/Square.exp A /issm/trunk-jpl/examples/Mesh/circles.m A /issm/trunk-jpl/examples/Mesh/shock.m\\
+Export determination: 6. \\
+Rationale: NEW: added Mesh tutorial\\
+\vspace{3em}
+
+\noindent \textbf{Change \#404} with diff file ISSM-15800-15801.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive201.nc M /issm/trunk-jpl/test/Archives/Archive202.nc M /issm/trunk-jpl/test/Archives/Archive203.nc M /issm/trunk-jpl/test/Archives/Archive204.nc M /issm/trunk-jpl/test/Archives/Archive205.nc M /issm/trunk-jpl/test/Archives/Archive207.nc M /issm/trunk-jpl/test/Archives/Archive208.nc M /issm/trunk-jpl/test/Archives/Archive209.nc M /issm/trunk-jpl/test/Archives/Archive210.nc M /issm/trunk-jpl/test/Archives/Archive211.nc M /issm/trunk-jpl/test/Archives/Archive212.nc M /issm/trunk-jpl/test/Archives/Archive213.nc M /issm/trunk-jpl/test/Archives/Archive214.nc M /issm/trunk-jpl/test/Archives/Archive215.nc M /issm/trunk-jpl/test/Archives/Archive216.nc M /issm/trunk-jpl/test/Archives/Archive218.nc M /issm/trunk-jpl/test/Archives/Archive219.nc M /issm/trunk-jpl/test/Archives/Archive220.nc M /issm/trunk-jpl/test/Archives/Archive221.nc M /issm/trunk-jpl/test/Archives/Archive222.nc M /issm/trunk-jpl/test/Archives/Archive223.nc M /issm/trunk-jpl/test/Archives/Archive224.nc M /issm/trunk-jpl/test/Archives/Archive225.nc M /issm/trunk-jpl/test/Archives/Archive226.nc M /issm/trunk-jpl/test/Archives/Archive227.nc M /issm/trunk-jpl/test/Archives/Archive228.nc M /issm/trunk-jpl/test/Archives/Archive229.nc M /issm/trunk-jpl/test/Archives/Archive230.nc M /issm/trunk-jpl/test/Archives/Archive231.nc M /issm/trunk-jpl/test/Archives/Archive232.nc M /issm/trunk-jpl/test/Archives/Archive233.nc M /issm/trunk-jpl/test/Archives/Archive234.nc M /issm/trunk-jpl/test/Archives/Archive235.nc M /issm/trunk-jpl/test/Archives/Archive236.nc M /issm/trunk-jpl/test/Archives/Archive237.nc M /issm/trunk-jpl/test/Archives/Archive270.nc M /issm/trunk-jpl/test/Archives/Archive272.nc M /issm/trunk-jpl/test/Archives/Archive274.nc M /issm/trunk-jpl/test/Archives/Archive280.nc M /issm/trunk-jpl/test/Archives/Archive285.nc M /issm/trunk-jpl/test/Archives/Archive286.nc M /issm/trunk-jpl/test/Archives/Archive287.nc M /issm/trunk-jpl/test/Archives/Archive290.nc M /issm/trunk-jpl/test/Archives/Archive401.nc M /issm/trunk-jpl/test/Archives/Archive402.nc M /issm/trunk-jpl/test/Archives/Archive403.nc M /issm/trunk-jpl/test/Archives/Archive404.nc M /issm/trunk-jpl/test/Archives/Archive405.nc M /issm/trunk-jpl/test/Archives/Archive406.nc M /issm/trunk-jpl/test/Archives/Archive407.nc M /issm/trunk-jpl/test/Archives/Archive408.nc M /issm/trunk-jpl/test/Archives/Archive409.nc M /issm/trunk-jpl/test/Archives/Archive410.nc M /issm/trunk-jpl/test/Archives/Archive411.nc M /issm/trunk-jpl/test/Archives/Archive412.nc M /issm/trunk-jpl/test/Archives/Archive413.nc M /issm/trunk-jpl/test/Archives/Archive414.nc M /issm/trunk-jpl/test/Archives/Archive415.nc M /issm/trunk-jpl/test/Archives/Archive416.nc M /issm/trunk-jpl/test/Archives/Archive417.nc M /issm/trunk-jpl/test/Archives/Archive419.nc M /issm/trunk-jpl/test/Archives/Archive421.nc M /issm/trunk-jpl/test/Archives/Archive422.nc M /issm/trunk-jpl/test/Archives/Archive423.nc M /issm/trunk-jpl/test/Archives/Archive424.nc M /issm/trunk-jpl/test/Archives/Archive428.nc M /issm/trunk-jpl/test/Archives/Archive429.nc M /issm/trunk-jpl/test/Archives/Archive430.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc M /issm/trunk-jpl/test/Archives/Archive434.nc M /issm/trunk-jpl/test/Archives/Archive501.nc M /issm/trunk-jpl/test/Archives/Archive502.nc M /issm/trunk-jpl/test/Archives/Archive503.nc M /issm/trunk-jpl/test/Archives/Archive504.nc M /issm/trunk-jpl/test/Archives/Archive505.nc M /issm/trunk-jpl/test/Archives/Archive506.nc M /issm/trunk-jpl/test/Archives/Archive507.nc M /issm/trunk-jpl/test/Archives/Archive508.nc M /issm/trunk-jpl/test/Archives/Archive509.nc M /issm/trunk-jpl/test/Archives/Archive510.nc M /issm/trunk-jpl/test/Archives/Archive511.nc M /issm/trunk-jpl/test/Archives/Archive512.nc M /issm/trunk-jpl/test/Archives/Archive513.nc M /issm/trunk-jpl/test/Archives/Archive515.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archives for spcs that go all the way to the front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#405} with diff file ISSM-15801-15802.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: CHG: finished boundary condition change in python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#406} with diff file ISSM-15802-15803.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/oldclasses/diagnostic.m\\
+Export determination: 6. \\
+Rationale: BUG: diagnostic class is not stressbalance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#407} with diff file ISSM-15803-15804.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test1105.m M /issm/trunk-jpl/test/NightlyRun/test1106.m M /issm/trunk-jpl/test/NightlyRun/test1108.m\\
+Export determination: 6. \\
+Rationale: CHG: updated some tolerances for validation NR (changes in nodes)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#408} with diff file ISSM-15804-15805.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1501.nc M /issm/trunk-jpl/test/Archives/Archive1502.nc M /issm/trunk-jpl/test/Archives/Archive1601.nc M /issm/trunk-jpl/test/Archives/Archive1602.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archives with newest spc values\\
+\vspace{3em}
+
+\noindent \textbf{Change \#409} with diff file ISSM-15805-15806.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: do not include globals.h in libISSMCore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#410} with diff file ISSM-15806-15807.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py\\
+Export determination: 6. \\
+Rationale: BUG: Set up mask.icelevelset values before creating dirichlets\\
+\vspace{3em}
+
+\noindent \textbf{Change \#411} with diff file ISSM-15807-15808.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: BUG: trying to fix python BC\\
+\vspace{3em}
+
+\noindent \textbf{Change \#412} with diff file ISSM-15808-15809.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp\\
+Export determination: 6. \\
+Rationale: LliboutryDuval.cpp implements the weakening effect of water content to the Arrhenius ice rheology, required for the enthalpy module.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#413} with diff file ISSM-15809-15810.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: Added c/shared/Elements/LliboutryDuval.cpp to Makefile.am\\
+\vspace{3em}
+
+\noindent \textbf{Change \#414} with diff file ISSM-15810-15811.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: reverted Makefile.am and added shared/Elements/LliboutryDuval.cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#415} with diff file ISSM-15811-15812.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test225.m M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test287.m M /issm/trunk-jpl/test/NightlyRun/test290.m M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test506.m\\
+Export determination: 6. \\
+Rationale: CHG: updated matlab tolerances with new spc up to the front\\
+\vspace{3em}
+
+\noindent \textbf{Change \#416} with diff file ISSM-15812-15813.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: BUG: indices in pythoon and matlab differ by 1\\
+\vspace{3em}
+
+\noindent \textbf{Change \#417} with diff file ISSM-15813-15814.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: updating syntax highlight\\
+\vspace{3em}
+
+\noindent \textbf{Change \#418} with diff file ISSM-15814-15815.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing seg fault in 3d GL migration module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#419} with diff file ISSM-15815-15816.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: BUG: still fixing python BC\\
+\vspace{3em}
+
+\noindent \textbf{Change \#420} with diff file ISSM-15816-15817.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: BUG: hopefully fixed python spc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#421} with diff file ISSM-15817-15818.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/inversions/misfit.m\\
+Export determination: 6. \\
+Rationale: Diagnostic -> Stressbalance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#422} with diff file ISSM-15818-15819.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test104.m M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test202.m M /issm/trunk-jpl/test/NightlyRun/test203.m M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test225.py M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test422.py M /issm/trunk-jpl/test/NightlyRun/test429.m M /issm/trunk-jpl/test/NightlyRun/test429.py M /issm/trunk-jpl/test/NightlyRun/test506.m M /issm/trunk-jpl/test/NightlyRun/test506.py M /issm/trunk-jpl/test/NightlyRun/test513.m\\
+Export determination: 6. \\
+Rationale: CHG: updated tolerances for spc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#423} with diff file ISSM-15819-15820.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test104.m\\
+Export determination: 6. \\
+Rationale: FIX: wrong commit--This line, and those below, will be ignored-- M NightlyRun/test104.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#424} with diff file ISSM-15820-15821.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test202.m M /issm/trunk-jpl/test/NightlyRun/test203.m M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test422.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed wrong commits\\
+\vspace{3em}
+
+\noindent \textbf{Change \#425} with diff file ISSM-15821-15822.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adolc/install.sh M /issm/trunk-jpl/externalpackages/adolc/update-existing.sh\\
+Export determination: 6. \\
+Rationale: CHG: setting libdir\\
+\vspace{3em}
+
+\noindent \textbf{Change \#426} with diff file ISSM-15822-15823.diff: \\
+Function name: \\
+D /issm/trunk-jpl/scripts/dailyrun.sh D /issm/trunk-jpl/scripts/errlog\_process.sh D /issm/trunk-jpl/scripts/issm\_webpdf.sh M /issm/trunk-jpl/scripts/tai M /issm/trunk-jpl/scripts/vie M /issm/trunk-jpl/scripts/vil\\
+Export determination: 6. \\
+Rationale: DEL: removed some useless scripts, and updated vie vil and tai\\
+\vspace{3em}
+
+\noindent \textbf{Change \#427} with diff file ISSM-15823-15824.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/matice.m\\
+Export determination: 6. \\
+Rationale: Added LliboutryDuval rheology to checkconsistency and disp.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#428} with diff file ISSM-15824-15825.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/matice.py\\
+Export determination: 6. \\
+Rationale: Added LliboutryDuval rheology to checkconsistency and disp for python code.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#429} with diff file ISSM-15825-15826.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/matdamageice.m\\
+Export determination: 6. \\
+Rationale: Added LliboutryDuval rheology to checkconsistency and disp for matdamageice.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#430} with diff file ISSM-15826-15827.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/matdamageice.py\\
+Export determination: 6. \\
+Rationale: Added LliboutryDuval rheology to checkconsistency and disp for matdamageice.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#431} with diff file ISSM-15827-15828.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h\\
+Export determination: 6. \\
+Rationale: Added LliboutryDuvalEnum for LliboutryDuval rheology (required for enthalpy module).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#432} with diff file ISSM-15828-15829.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/enum/LliboutryDuvalEnum.m\\
+Export determination: 6. \\
+Rationale: added LliboutryDuvalEnum.m in case that src/c/shared/Enum/synchronize.sh does not run regularly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#433} with diff file ISSM-15829-15830.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py\\
+Export determination: 6. \\
+Rationale: Added LliboutryDuvalEnum for python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#434} with diff file ISSM-15830-15831.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/strainrateuncert.m\\
+Export determination: 6. \\
+Rationale: updated strain rate uncertainty calculation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#435} with diff file ISSM-15831-15832.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/mech/steadystateiceshelftemp.m\\
+Export determination: 6. \\
+Rationale: NEW: function to calculate steady state ice shelf temperature as a function of surface and basal temperature and basal melting rate. Accounts for vertical advection and conduction of heat within the ice column, does not account for horizontal advection\\
+\vspace{3em}
+
+\noindent \textbf{Change \#436} with diff file ISSM-15832-15833.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/steadystateiceshelftemp.m A /issm/trunk-jpl/src/m/mech/steadystateiceshelftemp.py\\
+Export determination: 6. \\
+Rationale: NEW: python version of function to calculate steady state ice shelf temperature\\
+\vspace{3em}
+
+\noindent \textbf{Change \#437} with diff file ISSM-15833-15834.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test104.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed typo in test104. Helene, Mathieu, please check on this\\
+\vspace{3em}
+
+\noindent \textbf{Change \#438} with diff file ISSM-15834-15835.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/toolkits/mpi/commops (from /issm/trunk-jpl/src/c/toolkits/mpi/patches:15833) A /issm/trunk-jpl/src/c/toolkits/mpi/commops/commops.h (from /issm/trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h:15833) D /issm/trunk-jpl/src/c/toolkits/mpi/commops/mpipatches.h M /issm/trunk-jpl/src/c/toolkits/mpi/mpiincludes.h D /issm/trunk-jpl/src/c/toolkits/mpi/patches\\
+Export determination: 6. \\
+Rationale: CHG: temporary change\\
+\vspace{3em}
+
+\noindent \textbf{Change \#439} with diff file ISSM-15835-15836.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: change of mpi/patches to mpi/commops\\
+\vspace{3em}
+
+\noindent \textbf{Change \#440} with diff file ISSM-15836-15837.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp A /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h D /issm/trunk-jpl/src/c/toolkits/mpi/mpiincludes.h\\
+Export determination: 6. \\
+Rationale: CHG: starting transition from mpi to issm mpi\\
+\vspace{3em}
+
+\noindent \textbf{Change \#441} with diff file ISSM-15837-15838.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp\\
+Export determination: 6. \\
+Rationale: CHG: finished setting up issmmpi.cpp, starting code-wide conversion from mpi to issmmpi\\
+\vspace{3em}
+
+\noindent \textbf{Change \#442} with diff file ISSM-15838-15839.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp M /issm/trunk-jpl/src/c/analyses/EnvironmentFinalize.cpp M /issm/trunk-jpl/src/c/analyses/EnvironmentInit.cpp M /issm/trunk-jpl/src/c/classes/Constraints/Constraints.cpp M /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IndependentObject.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/Loads/Loads.cpp M /issm/trunk-jpl/src/c/classes/Nodes.cpp M /issm/trunk-jpl/src/c/classes/Patch.cpp M /issm/trunk-jpl/src/c/classes/Profiler.cpp M /issm/trunk-jpl/src/c/classes/Vertices.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp M /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp M /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp M /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp M /issm/trunk-jpl/src/c/modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp M /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp M /issm/trunk-jpl/src/c/shared/Numerics/types.h M /issm/trunk-jpl/src/c/shared/io/Comm/Comm.h D /issm/trunk-jpl/src/c/shared/io/Comm/CommDef.h M /issm/trunk-jpl/src/c/shared/io/Comm/IssmComm.cpp M /issm/trunk-jpl/src/c/shared/io/Comm/IssmComm.h M /issm/trunk-jpl/src/c/shared/io/Disk/pfopen.cpp M /issm/trunk-jpl/src/c/toolkits/issm/Bucket.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h M /issm/trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp M /issm/trunk-jpl/src/c/toolkits/toolkits.h\\
+Export determination: 6. \\
+Rationale: CHG: initial conversion from mpi to issmmpi layer. Starting validation of the new code changes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#443} with diff file ISSM-15839-15840.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/EnvironmentInit.cpp M /issm/trunk-jpl/src/c/analyses/analyses.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/main/globals.h M /issm/trunk-jpl/src/c/main/issm.cpp M /issm/trunk-jpl/src/c/main/kriging.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp D /issm/trunk-jpl/src/c/shared/io/Comm/Comm.h M /issm/trunk-jpl/src/c/shared/io/Comm/IssmComm.cpp M /issm/trunk-jpl/src/c/shared/io/Comm/IssmComm.h M /issm/trunk-jpl/src/c/shared/io/Disk/WriteLockFile.cpp M /issm/trunk-jpl/src/c/shared/io/Disk/pfopen.cpp M /issm/trunk-jpl/src/c/shared/io/Print/PrintfFunction.cpp M /issm/trunk-jpl/src/c/shared/io/io.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/commops/DetermineGlobalSize.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/commops/DetermineLocalSize.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/commops/GetOwnershipBoundariesFromRange.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/commops/commops.h M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: deleted Comm, as it is basically the same thing as what we define as ISSM\_MPI\_Comm in the mpi/issmcomm.h layer. Also finished the conversion from the MPI layer to the ISSM MPI layer.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#444} with diff file ISSM-15840-15841.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h\\
+Export determination: 6. \\
+Rationale: CHG: missing std c++ header file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#445} with diff file ISSM-15841-15842.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: have to move some of the new issmmpi layer to the standard core sources, as we now rely on this layer even for serial runs!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#446} with diff file ISSM-15842-15843.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/materials/paterson.py\\
+Export determination: 6. \\
+Rationale: CHG: reshape temperature so that resulting rigidity is in the same shape (rank-1 array) as the other rheology components\\
+\vspace{3em}
+
+\noindent \textbf{Change \#447} with diff file ISSM-15843-15844.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/kml/KMLFileReadUtils.cpp M /issm/trunk-jpl/src/c/kml/KML\_LineString.cpp M /issm/trunk-jpl/src/c/kml/KML\_LinearRing.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp M /issm/trunk-jpl/src/c/shared/Elements/Arrhenius.cpp M /issm/trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed a bunch of asserts that were not dealing with booleans. Also made sure kriging and adolc cannot be compiled together.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#448} with diff file ISSM-15844-15845.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/mech/mechanicalproperties.py\\
+Export determination: 6. \\
+Rationale: NEW: python version of mechanicalproperties function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#449} with diff file ISSM-15845-15846.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: added library dependencies for adjoinable mpi and adolc. Circular dependencies need to be taken care of. Be aware that .la files will mess this up!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#450} with diff file ISSM-15846-15847.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp\\
+Export determination: 6. \\
+Rationale: CHG: implemented ISSM\_MPI\_Wtime for MPI case, temporary fix for the NR to run\\
+\vspace{3em}
+
+\noindent \textbf{Change \#451} with diff file ISSM-15847-15848.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use xIsNan instead of isnan for viscosity check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#452} with diff file ISSM-15848-15849.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: in future versions of automake, option AUTOMAKE\_OPTIONS = subdir-objects is required\\
+\vspace{3em}
+
+\noindent \textbf{Change \#453} with diff file ISSM-15849-15850.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp M /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp M /issm/trunk-jpl/src/c/analyses/adjointbalancethickness\_core.cpp M /issm/trunk-jpl/src/c/analyses/adjointstressbalance\_core.cpp M /issm/trunk-jpl/src/c/analyses/balancethickness\_core.cpp M /issm/trunk-jpl/src/c/analyses/bedslope\_core.cpp M /issm/trunk-jpl/src/c/analyses/control\_core.cpp M /issm/trunk-jpl/src/c/analyses/controltao\_core.cpp M /issm/trunk-jpl/src/c/analyses/enthalpy\_core.cpp M /issm/trunk-jpl/src/c/analyses/gia\_core.cpp M /issm/trunk-jpl/src/c/analyses/hydrology\_core.cpp M /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp M /issm/trunk-jpl/src/c/analyses/steadystate\_core.cpp M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/analyses/surfaceslope\_core.cpp M /issm/trunk-jpl/src/c/analyses/thermal\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h M /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp M /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h M /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp M /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h M /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h M /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_adjoint\_linear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_linear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_newton.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_stokescoupling\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_thermal\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moved some modules back to src/modules and simplified some prototypes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#454} with diff file ISSM-15850-15851.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed dakota prototype\\
+\vspace{3em}
+
+\noindent \textbf{Change \#455} with diff file ISSM-15851-15852.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: subdir-objects needs to be deactivated for now, as python and matlab both use different version of the same objects\\
+\vspace{3em}
+
+\noindent \textbf{Change \#456} with diff file ISSM-15852-15853.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/matdamageice.py\\
+Export determination: 6. \\
+Rationale: BUG: rheology fields should be rank-1 in python consistency check for matdamageice, as with matice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#457} with diff file ISSM-15853-15854.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/thermal\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: NEW: preparing Dynamic Basal Dirichlet conditions for enthalpy model (not working for now, preparing code for Johannes)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#458} with diff file ISSM-15854-15855.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test287.m M /issm/trunk-jpl/test/NightlyRun/test287.py M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed some tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#459} with diff file ISSM-15855-15856.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/oldclasses/diagnostic.m\\
+Export determination: 6. \\
+Rationale: CHG: front cannot be retrieved anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#460} with diff file ISSM-15856-15857.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/oldclasses/diagnostic.m\\
+Export determination: 6. \\
+Rationale: CHG: front cannot be retrieved anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#461} with diff file ISSM-15857-15858.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp\\
+Export determination: 6. \\
+Rationale: BUG: return if mesh is 2d\\
+\vspace{3em}
+
+\noindent \textbf{Change \#462} with diff file ISSM-15858-15859.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: added alphatst@pbspl233 queue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#463} with diff file ISSM-15859-15860.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/parameterization/setflowequation.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.py\\
+Export determination: 6. \\
+Rationale: CHG: better error message for new model names\\
+\vspace{3em}
+
+\noindent \textbf{Change \#464} with diff file ISSM-15860-15861.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.m M /issm/trunk-jpl/src/m/classes/inversion.py\\
+Export determination: 6. \\
+Rationale: NEW: added check so that inversions are only performed on SSA HO and FS models\\
+\vspace{3em}
+
+\noindent \textbf{Change \#465} with diff file ISSM-15861-15862.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/classes/Nodes.cpp M /issm/trunk-jpl/src/c/classes/Nodes.h M /issm/trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added node->indexingupdate flag so that dofs are not renumbered except if absolutely necessary\\
+\vspace{3em}
+
+\noindent \textbf{Change \#466} with diff file ISSM-15862-15863.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp\\
+Export determination: 6. \\
+Rationale: BUG: indexingupdate needs to be turned to true if Node::DofInFSet or Node::DofInSSet is called\\
+\vspace{3em}
+
+\noindent \textbf{Change \#467} with diff file ISSM-15863-15864.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp\\
+Export determination: 6. \\
+Rationale: CHG changed value of diffusive constant for enthalpy to value from Aschwanden 2012\\
+\vspace{3em}
+
+\noindent \textbf{Change \#468} with diff file ISSM-15864-15865.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Elements/elements.h\\
+Export determination: 6. \\
+Rationale: ADD: function declaration of LliboutryDuval(...) to elements.h\\
+\vspace{3em}
+
+\noindent \textbf{Change \#469} with diff file ISSM-15865-15866.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h\\
+Export determination: 6. \\
+Rationale: ADD: virtual method Element::ComputeBasalMeltrate for enthalpy module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#470} with diff file ISSM-15866-15867.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: ADD: implementation of ComputeBasalMeltrate for Tria. Will return error message, since mno enthalpy for 2D case.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#471} with diff file ISSM-15867-15868.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.h\\
+Export determination: 6. \\
+Rationale: ADD: method for Penta::CalculateBasalMeltrate for enthalpy module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#472} with diff file ISSM-15868-15869.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: ADD: empty shell for Penta::CalculateBasalMeltrate, required for enthalpy module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#473} with diff file ISSM-15869-15870.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: ADD: filled shell Penta::ComputeBasalMeltrate with content. To be checked for functionality.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#474} with diff file ISSM-15870-15871.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed some stuff from Johannes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#475} with diff file ISSM-15871-15872.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive430.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating Newton FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#476} with diff file ISSM-15872-15873.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing some stuff for Johannes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#477} with diff file ISSM-15873-15874.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/interp/InterpFromFile.m\\
+Export determination: 6. \\
+Rationale: NEW: InterpFromFile should not be used anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#478} with diff file ISSM-15874-15875.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive327.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archives with new enthalpy diffusion parameter\\
+\vspace{3em}
+
+\noindent \textbf{Change \#479} with diff file ISSM-15875-15876.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py\\
+Export determination: 6. \\
+Rationale: CHG: renamed S3d -> FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#480} with diff file ISSM-15876-15877.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/doxygen/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: relocated svn repository\\
+\vspace{3em}
+
+\noindent \textbf{Change \#481} with diff file ISSM-15877-15878.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added free surface solver for bottom and upper surface, not working yet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#482} with diff file ISSM-15878-15879.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/masstransport.m M /issm/trunk-jpl/src/m/classes/masstransport.py\\
+Export determination: 6. \\
+Rationale: NEW: added free surface solver for bottom and upper surface, not working yet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#483} with diff file ISSM-15879-15880.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/FreeSurfaceBaseAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/FreeSurfaceTopAnalysisEnum.m\\
+Export determination: 6. \\
+Rationale: NEW: added free surface solver for bottom and upper surface, not working yet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#484} with diff file ISSM-15880-15881.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/meteoio A /issm/trunk-jpl/externalpackages/meteoio/install.sh A /issm/trunk-jpl/externalpackages/meteoio/makefiles A /issm/trunk-jpl/externalpackages/meteoio/makefiles/Makefile\\
+Export determination: 6. \\
+Rationale: CHG: new MeteoIO package\\
+\vspace{3em}
+
+\noindent \textbf{Change \#485} with diff file ISSM-15881-15882.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/enum/MasstransportIsfreesurfaceEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: synced Enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#486} with diff file ISSM-15882-15883.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/masstransport.py\\
+Export determination: 6. \\
+Rationale: BUG: python syntax\\
+\vspace{3em}
+
+\noindent \textbf{Change \#487} with diff file ISSM-15883-15884.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp\\
+Export determination: 6. \\
+Rationale: CHG: return if model is 2d instead of erroring out\\
+\vspace{3em}
+
+\noindent \textbf{Change \#488} with diff file ISSM-15884-15885.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/meteoio M /issm/trunk-jpl/externalpackages/meteoio/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: specified target install\\
+\vspace{3em}
+
+\noindent \textbf{Change \#489} with diff file ISSM-15885-15886.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/snowpack A /issm/trunk-jpl/externalpackages/snowpack/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: new snowpack model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#490} with diff file ISSM-15886-15887.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/meteoio/makefiles\\
+Export determination: 6. \\
+Rationale: CHG: not needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#491} with diff file ISSM-15887-15888.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/snowpack\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#492} with diff file ISSM-15888-15889.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/snowpack/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: no need to verbose Makefile\\
+\vspace{3em}
+
+\noindent \textbf{Change \#493} with diff file ISSM-15889-15890.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Elements/elements.h\\
+Export determination: 6. \\
+Rationale: ADD: DrainageFunctionWaterfraction(IssmDouble waterfraction) for enthalpy module added\\
+\vspace{3em}
+
+\noindent \textbf{Change \#494} with diff file ISSM-15890-15891.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: ADD: DrainageFunctionWaterfraction.cpp for enthalpy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#495} with diff file ISSM-15891-15892.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp\\
+Export determination: 6. \\
+Rationale: NEW: DrainageFunctionWaterfraction(IssmDouble waterfraction) returns the drainage of waterfraction per year. Required for enthalpy module.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#496} with diff file ISSM-15892-15893.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.h\\
+Export determination: 6. \\
+Rationale: ADD: Penta::DrainWaterfraction implements drainage of excess water fraction in enthalpy module.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#497} with diff file ISSM-15893-15894.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: ADD: Penta::DrainWaterfraction implements drainage of excess water fraction in enthalpy module.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#498} with diff file ISSM-15894-15895.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h\\
+Export determination: 6. \\
+Rationale: ADD: BasalMeltrateEnum added for enthalpy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#499} with diff file ISSM-15895-15896.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: updated thermal values now fed back into model.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#500} with diff file ISSM-15896-15897.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: edited bugs in Penta::ComputeBasalMeltrate and Penta::DrainWaterfraction\\
+\vspace{3em}
+
+\noindent \textbf{Change \#501} with diff file ISSM-15897-15898.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/shared/Elements/elements.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#502} with diff file ISSM-15898-15899.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.h\\
+Export determination: 6. \\
+Rationale: NEW: when a new result is added, we first check wether it already exists in the results dataset, if yes, it is deleted first\\
+\vspace{3em}
+
+\noindent \textbf{Change \#503} with diff file ISSM-15899-15900.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing free surfaces\\
+\vspace{3em}
+
+\noindent \textbf{Change \#504} with diff file ISSM-15900-15901.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/inishell A /issm/trunk-jpl/externalpackages/inishell/install.sh A /issm/trunk-jpl/externalpackages/inishell/scripts A /issm/trunk-jpl/externalpackages/inishell/scripts/inishell\\
+Export determination: 6. \\
+Rationale: CHG: inishell package to be used in conjunction with snowpack\\
+\vspace{3em}
+
+\noindent \textbf{Change \#505} with diff file ISSM-15901-15902.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py D /issm/trunk-jpl/test/NightlyRun/test430.m D /issm/trunk-jpl/test/NightlyRun/test430.py\\
+Export determination: 6. \\
+Rationale: DEL: removed test430 that is always failing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#506} with diff file ISSM-15902-15903.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test119.m M /issm/trunk-jpl/test/NightlyRun/test119.py M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test508.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing some tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#507} with diff file ISSM-15903-15904.diff: \\
+Function name: \\
+D /issm/trunk-jpl/configs/config-linux64-larsen-petsc3.2.sh D /issm/trunk-jpl/configs/config-macosx64-ogive.sh D /issm/trunk-jpl/configs/config-walgreen.sh\\
+Export determination: 6. \\
+Rationale: DEL: removed some personnal config files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#508} with diff file ISSM-15904-15905.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/snowpack/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: trying to compile binary\\
+\vspace{3em}
+
+\noindent \textbf{Change \#509} with diff file ISSM-15905-15906.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/wrappers/IssmConfig A /issm/trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp A /issm/trunk-jpl/src/wrappers/IssmConfig/IssmConfig.h M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: NEW: added IssmConfig that will replace ismpi and other functions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#510} with diff file ISSM-15906-15907.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed string outputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#511} with diff file ISSM-15907-15908.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.m M /issm/trunk-jpl/src/m/classes/clusters/generic.py M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/classes/model/planet.m M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dmeth\_params\_write.m M /issm/trunk-jpl/src/m/classes/toolkits.m M /issm/trunk-jpl/src/m/classes/toolkits.py D /issm/trunk-jpl/src/m/os/dakotaversion.m D /issm/trunk-jpl/src/m/os/dakotaversion.py D /issm/trunk-jpl/src/m/os/ismpi.m D /issm/trunk-jpl/src/m/os/ismpi.py D /issm/trunk-jpl/src/m/os/ismumps.m D /issm/trunk-jpl/src/m/os/ismumps.py D /issm/trunk-jpl/src/m/os/ispetsc.m D /issm/trunk-jpl/src/m/os/ispetsc.py D /issm/trunk-jpl/src/m/os/petscversion.m D /issm/trunk-jpl/src/m/os/petscversion.py M /issm/trunk-jpl/src/m/solve/solve.py M /issm/trunk-jpl/src/m/solvers/asmoptions.py M /issm/trunk-jpl/src/m/solvers/issmsolver.py M /issm/trunk-jpl/src/m/solvers/jacobiasmoptions.py M /issm/trunk-jpl/src/m/solvers/jacobicgoptions.py M /issm/trunk-jpl/src/m/solvers/matlaboptions.py M /issm/trunk-jpl/src/m/solvers/mumpsoptions.m M /issm/trunk-jpl/src/m/solvers/mumpsoptions.py M /issm/trunk-jpl/src/m/solvers/soroptions.py M /issm/trunk-jpl/src/m/solvers/stokesoptions.m M /issm/trunk-jpl/src/m/solvers/stokesoptions.py\\
+Export determination: 6. \\
+Rationale: NEW: removed ismpi and other configuration tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#512} with diff file ISSM-15908-15909.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solvers/mumpsoptions.m\\
+Export determination: 6. \\
+Rationale: BUG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#513} with diff file ISSM-15909-15910.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dmeth\_params\_write.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug\\
+\vspace{3em}
+
+\noindent \textbf{Change \#514} with diff file ISSM-15910-15911.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test234.m\\
+Export determination: 6. \\
+Rationale: CHG: no more dakotaversion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#515} with diff file ISSM-15911-15912.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: added meteoio and snowpack packages\\
+\vspace{3em}
+
+\noindent \textbf{Change \#516} with diff file ISSM-15912-15913.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/inishell\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#517} with diff file ISSM-15913-15914.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: hookups for meteoio and snowpack packages\\
+\vspace{3em}
+
+\noindent \textbf{Change \#518} with diff file ISSM-15914-15915.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/snowpack.m\\
+Export determination: 6. \\
+Rationale: NEW: new class for snowpack configuration and initialization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#519} with diff file ISSM-15915-15916.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#520} with diff file ISSM-15916-15917.diff: \\
+Function name: \\
+M /issm/trunk-jpl/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: no need to have config.h in bin\\
+\vspace{3em}
+
+\noindent \textbf{Change \#521} with diff file ISSM-15917-15918.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/showregion.m\\
+Export determination: 6. \\
+Rationale: CHG: updating path of showregion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#522} with diff file ISSM-15918-15919.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dmeth\_params\_write.m\\
+Export determination: 6. \\
+Rationale: BUG: dakota version is a string\\
+\vspace{3em}
+
+\noindent \textbf{Change \#523} with diff file ISSM-15919-15920.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/snowpack.m\\
+Export determination: 6. \\
+Rationale: CHG: starting map of snowpack class with configuration files coming out of inishell in snowpack\\
+\vspace{3em}
+
+\noindent \textbf{Change \#524} with diff file ISSM-15920-15921.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test410.m M /issm/trunk-jpl/test/NightlyRun/test410.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#525} with diff file ISSM-15921-15922.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/ipython/install.sh\\
+Export determination: 6. \\
+Rationale: NEW: now use ipython 1.0 instead of 0.13\\
+\vspace{3em}
+
+\noindent \textbf{Change \#526} with diff file ISSM-15922-15923.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test280.m M /issm/trunk-jpl/test/NightlyRun/test280.py M /issm/trunk-jpl/test/NightlyRun/test285.m M /issm/trunk-jpl/test/NightlyRun/test285.py M /issm/trunk-jpl/test/NightlyRun/test286.m M /issm/trunk-jpl/test/NightlyRun/test286.py M /issm/trunk-jpl/test/NightlyRun/test287.m M /issm/trunk-jpl/test/NightlyRun/test287.py M /issm/trunk-jpl/test/NightlyRun/test290.m M /issm/trunk-jpl/test/NightlyRun/test290.py\\
+Export determination: 6. \\
+Rationale: CHG: now finite elements are specified as strings instead of integers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#527} with diff file ISSM-15923-15924.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp\\
+Export determination: 6. \\
+Rationale: CHG: now finite elements are specified as strings instead of integers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#528} with diff file ISSM-15924-15925.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py\\
+Export determination: 6. \\
+Rationale: CHG: now finite elements are specified as strings instead of integers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#529} with diff file ISSM-15925-15926.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp\\
+Export determination: 6. \\
+Rationale: BUG: IoToConstrain needs velocity interpolation only\\
+\vspace{3em}
+
+\noindent \textbf{Change \#530} with diff file ISSM-15926-15927.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py M /issm/trunk-jpl/test/NightlyRun/test280.m M /issm/trunk-jpl/test/NightlyRun/test280.py\\
+Export determination: 6. \\
+Rationale: NEW: extended tests for otehr higher order elements SSA\\
+\vspace{3em}
+
+\noindent \textbf{Change \#531} with diff file ISSM-15927-15928.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive280.nc M /issm/trunk-jpl/test/Archives/Archive285.nc D /issm/trunk-jpl/test/Archives/Archive286.nc D /issm/trunk-jpl/test/Archives/Archive287.nc M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py M /issm/trunk-jpl/test/NightlyRun/test285.m M /issm/trunk-jpl/test/NightlyRun/test285.py D /issm/trunk-jpl/test/NightlyRun/test286.m D /issm/trunk-jpl/test/NightlyRun/test286.py D /issm/trunk-jpl/test/NightlyRun/test287.m D /issm/trunk-jpl/test/NightlyRun/test287.py\\
+Export determination: 6. \\
+Rationale: CHG: merged all HO higher order tests into one\\
+\vspace{3em}
+
+\noindent \textbf{Change \#532} with diff file ISSM-15928-15929.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive450.nc A /issm/trunk-jpl/test/Archives/Archive455.nc M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py M /issm/trunk-jpl/test/NightlyRun/test280.m M /issm/trunk-jpl/test/NightlyRun/test285.m A /issm/trunk-jpl/test/NightlyRun/test450.m A /issm/trunk-jpl/test/NightlyRun/test450.py A /issm/trunk-jpl/test/NightlyRun/test455.m A /issm/trunk-jpl/test/NightlyRun/test455.py\\
+Export determination: 6. \\
+Rationale: NEW: added 2 more tests on sheet shelf\\
+\vspace{3em}
+
+\noindent \textbf{Change \#533} with diff file ISSM-15929-15930.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c M /issm/trunk-jpl/src/c/analyses M /issm/trunk-jpl/src/c/bamg M /issm/trunk-jpl/src/c/classes M /issm/trunk-jpl/src/c/classes/Constraints M /issm/trunk-jpl/src/c/classes/ElementResults M /issm/trunk-jpl/src/c/classes/Elements M /issm/trunk-jpl/src/c/classes/ExternalResults M /issm/trunk-jpl/src/c/classes/Inputs M /issm/trunk-jpl/src/c/classes/Loads M /issm/trunk-jpl/src/c/classes/Materials M /issm/trunk-jpl/src/c/classes/Options M /issm/trunk-jpl/src/c/classes/Params M /issm/trunk-jpl/src/c/classes/gauss M /issm/trunk-jpl/src/c/classes/kriging M /issm/trunk-jpl/src/c/classes/matrix M /issm/trunk-jpl/src/c/datastructures M /issm/trunk-jpl/src/c/kml M /issm/trunk-jpl/src/c/main M /issm/trunk-jpl/src/c/modules/AverageFilterx M /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx M /issm/trunk-jpl/src/c/modules/BamgConvertMeshx M /issm/trunk-jpl/src/c/modules/BamgTriangulatex M /issm/trunk-jpl/src/c/modules/Bamgx M /issm/trunk-jpl/src/c/modules/Chacox M /issm/trunk-jpl/src/c/modules/ComputeBasalStressx M /issm/trunk-jpl/src/c/modules/ComputeStrainRatex M /issm/trunk-jpl/src/c/modules/ConfigureObjectsx M /issm/trunk-jpl/src/c/modules/ConstraintsStatex M /issm/trunk-jpl/src/c/modules/ContourToMeshx M /issm/trunk-jpl/src/c/modules/ContourToNodesx M /issm/trunk-jpl/src/c/modules/ControlInputGetGradientx M /issm/trunk-jpl/src/c/modules/ControlInputScaleGradientx M /issm/trunk-jpl/src/c/modules/ControlInputSetGradientx M /issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx M /issm/trunk-jpl/src/c/modules/Delta18oParameterizationx M /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx M /issm/trunk-jpl/src/c/modules/EdgeDetectionx M /issm/trunk-jpl/src/c/modules/ElementConnectivityx M /issm/trunk-jpl/src/c/modules/Exp2Kmlx M /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx M /issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx M /issm/trunk-jpl/src/c/modules/GiaDeflectionCorex M /issm/trunk-jpl/src/c/modules/Gradjx M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx M /issm/trunk-jpl/src/c/modules/HoleFillerx M /issm/trunk-jpl/src/c/modules/InputArtificialNoisex M /issm/trunk-jpl/src/c/modules/InputControlUpdatex M /issm/trunk-jpl/src/c/modules/InputDuplicatex M /issm/trunk-jpl/src/c/modules/InputScalex M /issm/trunk-jpl/src/c/modules/InputToResultx M /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx M /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax M /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax M /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx M /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx M /issm/trunk-jpl/src/c/modules/KMLFileReadx M /issm/trunk-jpl/src/c/modules/KMLMeshWritex M /issm/trunk-jpl/src/c/modules/KMLOverlayx M /issm/trunk-jpl/src/c/modules/Kml2Expx M /issm/trunk-jpl/src/c/modules/Krigingx M /issm/trunk-jpl/src/c/modules/Mergesolutionfromftogx M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx M /issm/trunk-jpl/src/c/modules/ModelProcessorx M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient M /issm/trunk-jpl/src/c/modules/NodalValuex M /issm/trunk-jpl/src/c/modules/NodeConnectivityx M /issm/trunk-jpl/src/c/modules/NodesDofx M /issm/trunk-jpl/src/c/modules/Orthx M /issm/trunk-jpl/src/c/modules/OutputResultsx M /issm/trunk-jpl/src/c/modules/ParseToolkitsOptionsx M /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx M /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx M /issm/trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx M /issm/trunk-jpl/src/c/modules/Reduceloadx M /issm/trunk-jpl/src/c/modules/Reducevectorgtofx M /issm/trunk-jpl/src/c/modules/Reducevectorgtosx M /issm/trunk-jpl/src/c/modules/ResetConstraintsx M /issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx M /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx M /issm/trunk-jpl/src/c/modules/Scotchx M /issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx M /issm/trunk-jpl/src/c/modules/Shp2Expx M /issm/trunk-jpl/src/c/modules/Shp2Kmlx M /issm/trunk-jpl/src/c/modules/SmbGradientsx M /issm/trunk-jpl/src/c/modules/Solverx M /issm/trunk-jpl/src/c/modules/SpcNodesx M /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx M /issm/trunk-jpl/src/c/modules/SurfaceAreax M /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx M /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx M /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx M /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx M /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx M /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx M /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx M /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx M /issm/trunk-jpl/src/c/modules/TriMeshx M /issm/trunk-jpl/src/c/modules/TriaSearchx M /issm/trunk-jpl/src/c/modules/UpdateDynamicConstraintsx M /issm/trunk-jpl/src/c/modules/VecMergex M /issm/trunk-jpl/src/c/modules/VertexCoordinatesx M /issm/trunk-jpl/src/c/modules/VerticesDofx M /issm/trunk-jpl/src/c/shared/Bamg M /issm/trunk-jpl/src/c/shared/Elements M /issm/trunk-jpl/src/c/shared/Enum M /issm/trunk-jpl/src/c/shared/Exceptions M /issm/trunk-jpl/src/c/shared/Exp M /issm/trunk-jpl/src/c/shared/LatLong M /issm/trunk-jpl/src/c/shared/Matrix M /issm/trunk-jpl/src/c/shared/Numerics M /issm/trunk-jpl/src/c/shared/Sorting M /issm/trunk-jpl/src/c/shared/String M /issm/trunk-jpl/src/c/shared/Threads M /issm/trunk-jpl/src/c/shared/TriMesh M /issm/trunk-jpl/src/c/shared/io/Comm M /issm/trunk-jpl/src/c/shared/io/Disk M /issm/trunk-jpl/src/c/shared/io/Print M /issm/trunk-jpl/src/c/solutionsequences M /issm/trunk-jpl/src/c/toolkits M /issm/trunk-jpl/src/c/toolkits/gsl M /issm/trunk-jpl/src/c/toolkits/issm M /issm/trunk-jpl/src/c/toolkits/metis/patches M /issm/trunk-jpl/src/c/toolkits/mpi M /issm/trunk-jpl/src/c/toolkits/mpi/commops M /issm/trunk-jpl/src/c/toolkits/mumps M /issm/trunk-jpl/src/c/toolkits/petsc/objects M /issm/trunk-jpl/src/c/toolkits/petsc/patches\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#534} with diff file ISSM-15930-15931.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: do not use m4 macro to check for triangle.h\\
+\vspace{3em}
+
+\noindent \textbf{Change \#535} with diff file ISSM-15931-15932.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/snowpack.m\\
+Export determination: 6. \\
+Rationale: CHG: using inishell config messages to create disp routine of snowpack\\
+\vspace{3em}
+
+\noindent \textbf{Change \#536} with diff file ISSM-15932-15933.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/triangle\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#537} with diff file ISSM-15933-15934.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-arm-linux.sh M /issm/trunk-jpl/src/mobile/native/Main.cpp\\
+Export determination: 6. \\
+Rationale: CHG: recompile native side of arm cross compile targets, using a new config-arm-linux.sh config file and a new location \$ISSM\_DIR/../mobile/android location.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#538} with diff file ISSM-15934-15935.diff: \\
+Function name: \\
+M /issm/trunk-jpl/lib\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#539} with diff file ISSM-15935-15936.diff: \\
+Function name: \\
+M /issm/trunk-jpl/execution\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#540} with diff file ISSM-15936-15937.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/proj.4 M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim M /issm/trunk-jpl/externalpackages/vim/addons/vimrc\\
+Export determination: 6. \\
+Rationale: CHG: updating vimrc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#541} with diff file ISSM-15937-15938.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/exp/expcreatecontour.m D /issm/trunk-jpl/src/m/exp/expcreateprofile.m D /issm/trunk-jpl/src/m/exp/manipulation A /issm/trunk-jpl/src/m/exp/operation (from /issm/trunk-jpl/src/m/exp/manipulation:15933)\\
+Export determination: 6. \\
+Rationale: DEL: removed some useless functions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#542} with diff file ISSM-15938-15939.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: renamed manupulation operation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#543} with diff file ISSM-15939-15940.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.py\\
+Export determination: 6. \\
+Rationale: BUG: no more ismpi\\
+\vspace{3em}
+
+\noindent \textbf{Change \#544} with diff file ISSM-15940-15941.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: mask.gllevelset will now be used not matter the GL migration style\\
+\vspace{3em}
+
+\noindent \textbf{Change \#545} with diff file ISSM-15941-15942.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/GLlevelsetEnum.m A /issm/trunk-jpl/src/m/enum/MaskGroundediceLevelsetEnum.m A /issm/trunk-jpl/src/m/enum/MaskIceLevelsetEnum.m D /issm/trunk-jpl/src/m/enum/MaskIcelevelsetEnum.m\\
+Export determination: 6. \\
+Rationale: CHG; renaming, MaskIcelevelsetEnum.m -> MaskIceLevelsetEnum.m and GLlevelsetEnum.m->MaskGroundediceLevelsetEnum.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#546} with diff file ISSM-15942-15943.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.m M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: CHG: added groundedice\_levelset in matlab class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#547} with diff file ISSM-15943-15944.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/parameterization/setmask.m M /issm/trunk-jpl/src/m/parameterization/setmask.py\\
+Export determination: 6. \\
+Rationale: CHG: added groundedice\_levelset where missing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#548} with diff file ISSM-15944-15945.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/parameterization/setmask.m M /issm/trunk-jpl/src/m/parameterization/setmask.py\\
+Export determination: 6. \\
+Rationale: CHG: prepare groundedice\_levelset in setmask\\
+\vspace{3em}
+
+\noindent \textbf{Change \#549} with diff file ISSM-15945-15946.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.py\\
+Export determination: 6. \\
+Rationale: FIX: forgot to change one icelevelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#550} with diff file ISSM-15946-15947.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py M /issm/trunk-jpl/src/m/plot/plot\_icefront.m\\
+Export determination: 6. \\
+Rationale: CG: renaming icelevelset ice\_levelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#551} with diff file ISSM-15947-15948.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.py\\
+Export determination: 6. \\
+Rationale: CHG: added extrusion of groundedice\_levelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#552} with diff file ISSM-15948-15949.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test217.m M /issm/trunk-jpl/test/NightlyRun/test217.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: CG: renaming icelevelset ice\_levelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#553} with diff file ISSM-15949-15950.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test423.py M /issm/trunk-jpl/test/NightlyRun/test433.m M /issm/trunk-jpl/test/NightlyRun/test433.py\\
+Export determination: 6. \\
+Rationale: GLlevelset is now groundingline\_levelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#554} with diff file ISSM-15950-15951.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/RoundSheetShelf.par\\
+Export determination: 6. \\
+Rationale: FIX: changed .par file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#555} with diff file ISSM-15951-15952.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.m\\
+Export determination: 6. \\
+Rationale: BUG: typo in display\\
+\vspace{3em}
+
+\noindent \textbf{Change \#556} with diff file ISSM-15952-15953.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp\\
+Export determination: 6. \\
+Rationale: CHG: updated model processors for GroundediceLevelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#557} with diff file ISSM-15953-15954.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test423.py\\
+Export determination: 6. \\
+Rationale: CHG fixing test 423\\
+\vspace{3em}
+
+\noindent \textbf{Change \#558} with diff file ISSM-15954-15955.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Now use GroundediceLevelset instead of floating ice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#559} with diff file ISSM-15955-15956.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: new adjoinable mpi layer, resolves cyclical dependency issue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#560} with diff file ISSM-15956-15957.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: retrieve GroundediceLevelset all the time\\
+\vspace{3em}
+
+\noindent \textbf{Change \#561} with diff file ISSM-15957-15958.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py\\
+Export determination: 6. \\
+Rationale: BUG: was not extracting the right field\\
+\vspace{3em}
+
+\noindent \textbf{Change \#562} with diff file ISSM-15958-15959.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-murdo-nopetsc.sh\\
+Export determination: 6. \\
+Rationale: CHG: no petsc.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#563} with diff file ISSM-15959-15960.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed crazy logic of soft grounding line for levelset update\\
+\vspace{3em}
+
+\noindent \textbf{Change \#564} with diff file ISSM-15960-15961.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.py\\
+Export determination: 6. \\
+Rationale: BUG: renamed grounded\_icelevelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#565} with diff file ISSM-15961-15962.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.py\\
+Export determination: 6. \\
+Rationale: iBUG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#566} with diff file ISSM-15962-15963.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: simplified grounding line arguments\\
+\vspace{3em}
+
+\noindent \textbf{Change \#567} with diff file ISSM-15963-15964.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use MaskGroundediceLevelsetEnum instead of node->IsFloating to figure out if vertices are floating\\
+\vspace{3em}
+
+\noindent \textbf{Change \#568} with diff file ISSM-15964-15965.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: keep working on GL changes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#569} with diff file ISSM-15965-15966.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.h\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#570} with diff file ISSM-15966-15967.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: updating syntax highlighting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#571} with diff file ISSM-15967-15968.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: trying to finish Grounding line changes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#572} with diff file ISSM-15968-15969.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#573} with diff file ISSM-15969-15970.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp\\
+Export determination: 6. \\
+Rationale: BUG: missing VecAssemble in grounding lines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#574} with diff file ISSM-15970-15971.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: Now use Pid for grounding lines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#575} with diff file ISSM-15971-15972.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: minor vertex instead of node\\
+\vspace{3em}
+
+\noindent \textbf{Change \#576} with diff file ISSM-15972-15973.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: CHG: removing node->IsGrounded, node->IsFloating\\
+\vspace{3em}
+
+\noindent \textbf{Change \#577} with diff file ISSM-15973-15974.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: try to get rid of MaskElementOnFloatingIce\\
+\vspace{3em}
+
+\noindent \textbf{Change \#578} with diff file ISSM-15974-15975.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: xyz\_list\_tria was not well created, the z coordinate was never updated\\
+\vspace{3em}
+
+\noindent \textbf{Change \#579} with diff file ISSM-15975-15976.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive307.nc M /issm/trunk-jpl/test/Archives/Archive312.nc M /issm/trunk-jpl/test/Archives/Archive313.nc M /issm/trunk-jpl/test/Archives/Archive315.nc M /issm/trunk-jpl/test/Archives/Archive317.nc M /issm/trunk-jpl/test/Archives/Archive318.nc M /issm/trunk-jpl/test/Archives/Archive321.nc M /issm/trunk-jpl/test/Archives/Archive322.nc M /issm/trunk-jpl/test/Archives/Archive324.nc M /issm/trunk-jpl/test/Archives/Archive325.nc M /issm/trunk-jpl/test/Archives/Archive326.nc M /issm/trunk-jpl/test/Archives/Archive327.nc M /issm/trunk-jpl/test/Archives/Archive329.nc M /issm/trunk-jpl/test/Archives/Archive403.nc M /issm/trunk-jpl/test/Archives/Archive407.nc M /issm/trunk-jpl/test/Archives/Archive410.nc M /issm/trunk-jpl/test/Archives/Archive411.nc M /issm/trunk-jpl/test/Archives/Archive415.nc M /issm/trunk-jpl/test/Archives/Archive416.nc M /issm/trunk-jpl/test/Archives/Archive419.nc M /issm/trunk-jpl/test/Archives/Archive421.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc M /issm/trunk-jpl/test/Archives/Archive455.nc M /issm/trunk-jpl/test/Archives/Archive502.nc M /issm/trunk-jpl/test/Archives/Archive505.nc M /issm/trunk-jpl/test/Archives/Archive506.nc M /issm/trunk-jpl/test/Archives/Archive507.nc M /issm/trunk-jpl/test/Archives/Archive508.nc M /issm/trunk-jpl/test/Archives/Archive509.nc M /issm/trunk-jpl/test/Archives/Archive510.nc M /issm/trunk-jpl/test/Archives/Archive512.nc M /issm/trunk-jpl/test/Archives/Archive513.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating archives for xyz\_list\_tria bug\\
+\vspace{3em}
+
+\noindent \textbf{Change \#580} with diff file ISSM-15976-15977.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h\\
+Export determination: 6. \\
+Rationale: NEW: removed node inputs:\\
+\vspace{3em}
+
+\noindent \textbf{Change \#581} with diff file ISSM-15977-15978.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive515.nc M /issm/trunk-jpl/test/Archives/Archive516.nc\\
+Export determination: 6. \\
+Rationale: CHG: fort last to tests for xyz\_list\_tria bug\\
+\vspace{3em}
+
+\noindent \textbf{Change \#582} with diff file ISSM-15978-15979.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: IsFloating now based on groundedice\_levelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#583} with diff file ISSM-15979-15980.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\\
+Export determination: 6. \\
+Rationale: BUG: missing GroundediceLevelset in thermal\\
+\vspace{3em}
+
+\noindent \textbf{Change \#584} with diff file ISSM-15980-15981.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp\\
+Export determination: 6. \\
+Rationale: CHG: mask grounded ice also needed in HydrologyShreve\\
+\vspace{3em}
+
+\noindent \textbf{Change \#585} with diff file ISSM-15981-15982.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive503.nc M /issm/trunk-jpl/test/Archives/Archive510.nc M /issm/trunk-jpl/test/Archives/Archive512.nc\\
+Export determination: 6. \\
+Rationale: CHG: update 3 archives: old philosophy of GL was weird (element floating with 3 nodes grounded)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#586} with diff file ISSM-15982-15983.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Element do not update constraints\\
+\vspace{3em}
+
+\noindent \textbf{Change \#587} with diff file ISSM-15983-15984.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: MaskGroundediceLevelsetEnum is now saved instead of MaskElementonfloatingiceEnum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#588} with diff file ISSM-15984-15985.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test423.py M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test425.m M /issm/trunk-jpl/test/NightlyRun/test425.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py M /issm/trunk-jpl/test/NightlyRun/test427.m M /issm/trunk-jpl/test/NightlyRun/test427.py M /issm/trunk-jpl/test/NightlyRun/test433.m M /issm/trunk-jpl/test/NightlyRun/test433.py\\
+Export determination: 6. \\
+Rationale: CHG: MaskGroundediceLevelset is now saved instead of Elementonfloatingice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#589} with diff file ISSM-15985-15986.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive423.nc M /issm/trunk-jpl/test/Archives/Archive424.nc M /issm/trunk-jpl/test/Archives/Archive425.nc M /issm/trunk-jpl/test/Archives/Archive426.nc M /issm/trunk-jpl/test/Archives/Archive427.nc M /issm/trunk-jpl/test/Archives/Archive433.nc M /issm/trunk-jpl/test/Archives/Archive502.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archives with new levelset instead of mask\\
+\vspace{3em}
+
+\noindent \textbf{Change \#590} with diff file ISSM-15986-15987.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/mask.m M /issm/trunk-jpl/src/m/classes/mask.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/MaskElementonfloatingiceEnum.m D /issm/trunk-jpl/src/m/enum/MaskElementongroundediceEnum.m D /issm/trunk-jpl/src/m/enum/MaskVertexonfloatingiceEnum.m D /issm/trunk-jpl/src/m/enum/MaskVertexongroundediceEnum.m\\
+Export determination: 6. \\
+Rationale: DEL: getting rid of MaskVertexon* and MaskElementon* in the code'\\
+\vspace{3em}
+
+\noindent \textbf{Change \#591} with diff file ISSM-15987-15988.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/classes/groundingline.m M /issm/trunk-jpl/src/m/classes/groundingline.py M /issm/trunk-jpl/src/m/classes/mask.m M /issm/trunk-jpl/src/m/classes/mask.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/classes/modellist.m M /issm/trunk-jpl/src/m/classes/oldclasses/diagnostic.m M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/classes/stressbalance.py M /issm/trunk-jpl/src/m/contrib/ecco/MeltingGroundingLines.m M /issm/trunk-jpl/src/m/geometry/FlagElements.m M /issm/trunk-jpl/src/m/geometry/FlagElements.py M /issm/trunk-jpl/src/m/geometry/ThicknessCorrection.m M /issm/trunk-jpl/src/m/parameterization/contourenvelope.m M /issm/trunk-jpl/src/m/parameterization/contourenvelope.py M /issm/trunk-jpl/src/m/parameterization/setflowequation.m M /issm/trunk-jpl/src/m/parameterization/setflowequation.py M /issm/trunk-jpl/src/m/parameterization/setmask.m M /issm/trunk-jpl/src/m/parameterization/setmask.py M /issm/trunk-jpl/src/m/parameterization/setmask2.m M /issm/trunk-jpl/src/m/regional/BasinConstrainShelf.m\\
+Export determination: 6. \\
+Rationale: NEW: no more md.mask.vertexon... nor md.mask.elementon... use levelsets only\\
+\vspace{3em}
+
+\noindent \textbf{Change \#592} with diff file ISSM-15988-15989.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/79North.par M /issm/trunk-jpl/test/Par/79North.py M /issm/trunk-jpl/test/Par/GiaBenchmarksAB.par M /issm/trunk-jpl/test/Par/GiaBenchmarksCD.par M /issm/trunk-jpl/test/Par/ISMIPA.par M /issm/trunk-jpl/test/Par/ISMIPA.py M /issm/trunk-jpl/test/Par/ISMIPB.par M /issm/trunk-jpl/test/Par/ISMIPB.py M /issm/trunk-jpl/test/Par/ISMIPC.par M /issm/trunk-jpl/test/Par/ISMIPC.py M /issm/trunk-jpl/test/Par/ISMIPD.par M /issm/trunk-jpl/test/Par/ISMIPD.py M /issm/trunk-jpl/test/Par/Pig.par M /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/RoundSheetEISMINT.par M /issm/trunk-jpl/test/Par/RoundSheetEISMINT.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.par M /issm/trunk-jpl/test/Par/RoundSheetShelf.py M /issm/trunk-jpl/test/Par/RoundSheetStaticEISMINT.par M /issm/trunk-jpl/test/Par/RoundSheetStaticEISMINT.py M /issm/trunk-jpl/test/Par/SquareEISMINT.par M /issm/trunk-jpl/test/Par/SquareEISMINT.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.par M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.par M /issm/trunk-jpl/test/Par/SquareShelf2.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py M /issm/trunk-jpl/test/Par/SquareThermal.par M /issm/trunk-jpl/test/Par/SquareThermal.py\\
+Export determination: 6. \\
+Rationale: CHG: updated parameter files with new mask that only has levelsets\\
+\vspace{3em}
+
+\noindent \textbf{Change \#593} with diff file ISSM-15989-15990.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: do not use AC\_CHECK\_FILE, fails in cross-compile. Replaced by test -f\\
+\vspace{3em}
+
+\noindent \textbf{Change \#594} with diff file ISSM-15990-15991.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/geometry/FlagElements.m M /issm/trunk-jpl/src/m/geometry/FlagElements.py\\
+Export determination: 6. \\
+Rationale: NEW: added vertex list support to FlagElements.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#595} with diff file ISSM-15991-15992.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/consistency/comparemodels.m\\
+Export determination: 6. \\
+Rationale: NEW: added comparemodels, very useful to find out the difference between models\\
+\vspace{3em}
+
+\noindent \textbf{Change \#596} with diff file ISSM-15992-15993.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/geometry/FlagElements.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed python's bug\\
+\vspace{3em}
+
+\noindent \textbf{Change \#597} with diff file ISSM-15993-15994.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m\\
+Export determination: 6. \\
+Rationale: BUG: ice front needs to be extended so that it covers the elements that are partially floating\\
+\vspace{3em}
+
+\noindent \textbf{Change \#598} with diff file ISSM-15994-15995.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/RoundSheetShelf.par\\
+Export determination: 6. \\
+Rationale: BUG: fixed difference in NR test round (friction did not match)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#599} with diff file ISSM-15995-15996.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: CHG: python equavalent of matlab\\
+\vspace{3em}
+
+\noindent \textbf{Change \#600} with diff file ISSM-15996-15997.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive401.nc M /issm/trunk-jpl/test/Archives/Archive402.nc M /issm/trunk-jpl/test/Archives/Archive403.nc M /issm/trunk-jpl/test/Archives/Archive404.nc M /issm/trunk-jpl/test/Archives/Archive405.nc M /issm/trunk-jpl/test/Archives/Archive406.nc M /issm/trunk-jpl/test/Archives/Archive407.nc M /issm/trunk-jpl/test/Archives/Archive408.nc M /issm/trunk-jpl/test/Archives/Archive409.nc M /issm/trunk-jpl/test/Archives/Archive410.nc M /issm/trunk-jpl/test/Archives/Archive411.nc M /issm/trunk-jpl/test/Archives/Archive412.nc M /issm/trunk-jpl/test/Archives/Archive413.nc M /issm/trunk-jpl/test/Archives/Archive415.nc M /issm/trunk-jpl/test/Archives/Archive416.nc M /issm/trunk-jpl/test/Archives/Archive419.nc M /issm/trunk-jpl/test/Archives/Archive421.nc M /issm/trunk-jpl/test/Archives/Archive422.nc M /issm/trunk-jpl/test/Archives/Archive423.nc M /issm/trunk-jpl/test/Archives/Archive425.nc M /issm/trunk-jpl/test/Archives/Archive428.nc M /issm/trunk-jpl/test/Archives/Archive429.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc M /issm/trunk-jpl/test/Archives/Archive434.nc M /issm/trunk-jpl/test/Archives/Archive450.nc M /issm/trunk-jpl/test/Archives/Archive455.nc M /issm/trunk-jpl/test/Archives/Archive501.nc M /issm/trunk-jpl/test/Archives/Archive502.nc M /issm/trunk-jpl/test/Archives/Archive503.nc M /issm/trunk-jpl/test/Archives/Archive504.nc M /issm/trunk-jpl/test/Archives/Archive505.nc M /issm/trunk-jpl/test/Archives/Archive506.nc M /issm/trunk-jpl/test/Archives/Archive507.nc M /issm/trunk-jpl/test/Archives/Archive508.nc M /issm/trunk-jpl/test/Archives/Archive509.nc M /issm/trunk-jpl/test/Archives/Archive510.nc M /issm/trunk-jpl/test/Archives/Archive512.nc M /issm/trunk-jpl/test/Archives/Archive513.nc M /issm/trunk-jpl/test/Archives/Archive515.nc M /issm/trunk-jpl/test/Archives/Archive516.nc M /issm/trunk-jpl/test/Archives/Archive601.nc M /issm/trunk-jpl/test/Archives/Archive602.nc M /issm/trunk-jpl/test/Archives/Archive603.nc M /issm/trunk-jpl/test/Archives/Archive608.nc M /issm/trunk-jpl/test/Archives/Archive609.nc M /issm/trunk-jpl/test/Archives/Archive610.nc M /issm/trunk-jpl/test/Archives/Archive611.nc M /issm/trunk-jpl/test/Archives/Archive612.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated new archives for friction on slightly different nodes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#601} with diff file ISSM-15997-15998.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test511.py M /issm/trunk-jpl/test/NightlyRun/test613.m M /issm/trunk-jpl/test/NightlyRun/test613.py\\
+Export determination: 6. \\
+Rationale: CHG: modelextract now uses vertex list on floating ice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#602} with diff file ISSM-15998-15999.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/geometry/FlagElements.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed extraction for vertices list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#603} with diff file ISSM-15999-16000.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/greenplanet.m M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: updating cluster scripts\\
+\vspace{3em}
+
+\noindent \textbf{Change \#604} with diff file ISSM-16000-16001.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed problem with RoundSheetShelf python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#605} with diff file ISSM-16001-16002.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive511.nc M /issm/trunk-jpl/test/Archives/Archive613.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archives\\
+\vspace{3em}
+
+\noindent \textbf{Change \#606} with diff file ISSM-16002-16003.diff: \\
+Function name: \\
+A /issm/trunk-jpl/packagers/ubuntu/issmpkg A /issm/trunk-jpl/packagers/ubuntu/issmpkg/README A /issm/trunk-jpl/packagers/ubuntu/issmpkg/environment.sh A /issm/trunk-jpl/packagers/ubuntu/issmpkg/install-3.2-linux64.sh A /issm/trunk-jpl/packagers/ubuntu/issmpkg/issm\_options.m4 A /issm/trunk-jpl/packagers/ubuntu/issmpkg/templates A /issm/trunk-jpl/packagers/ubuntu/issmpkg/templates/sampleControl A /issm/trunk-jpl/packagers/ubuntu/issmpkg/triangle.h.patch\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#607} with diff file ISSM-16003-16004.diff: \\
+Function name: \\
+D /issm/trunk-jpl/packagers/ubuntu/issm.deb\\
+Export determination: 6. \\
+Rationale: DEL: too large to be under svn... sorry :)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#608} with diff file ISSM-16004-16005.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: CHG: trying to fix invalid syntax\\
+\vspace{3em}
+
+\noindent \textbf{Change \#609} with diff file ISSM-16005-16006.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/groundingline.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: CHG: fixing grounding line in py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#610} with diff file ISSM-16006-16007.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test508.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing some tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#611} with diff file ISSM-16007-16008.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/analyses/analyses.h A /issm/trunk-jpl/src/c/analyses/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added balancevelocity solver (not finished yet)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#612} with diff file ISSM-16008-16009.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py A /issm/trunk-jpl/src/m/enum/BalancevelocityAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/BalancevelocitySolutionEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/solve/process\_solve\_options.m M /issm/trunk-jpl/src/m/solve/process\_solve\_options.py\\
+Export determination: 6. \\
+Rationale: NEW: added balancevelocity solver (not finished yet)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#613} with diff file ISSM-16009-16010.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h\\
+Export determination: 6. \\
+Rationale: ADD/CHG: DrainageFunctionWaterfraction and ComputeBasalMeltingrate added\\
+\vspace{3em}
+
+\noindent \textbf{Change \#614} with diff file ISSM-16010-16011.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added smoothed surface, required for bal vel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#615} with diff file ISSM-16011-16012.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/SmoothedSurfaceSlopeXAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/SmoothedSurfaceSlopeYAnalysisEnum.m\\
+Export determination: 6. \\
+Rationale: NEW: added smoothed surface, required for bal vel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#616} with diff file ISSM-16012-16013.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed right hand side\\
+\vspace{3em}
+
+\noindent \textbf{Change \#617} with diff file ISSM-16013-16014.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#618} with diff file ISSM-16014-16015.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h\\
+Export determination: 6. \\
+Rationale: CHG: commenting our Johannes functions so that the code still compiles\\
+\vspace{3em}
+
+\noindent \textbf{Change \#619} with diff file ISSM-16015-16016.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: forgot += after Ke->values[i*numnodes+j]\\
+\vspace{3em}
+
+\noindent \textbf{Change \#620} with diff file ISSM-16016-16017.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: still not there yet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#621} with diff file ISSM-16017-16018.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: surface slopes are reverted\\
+\vspace{3em}
+
+\noindent \textbf{Change \#622} with diff file ISSM-16018-16019.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added stabilization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#623} with diff file ISSM-16019-16020.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed balanced velocities now working\\
+\vspace{3em}
+
+\noindent \textbf{Change \#624} with diff file ISSM-16020-16021.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/dakota/configs/5.3.1/ParallelLibrary.cpp.patch\\
+Export determination: 6. \\
+Rationale: CHG: Updated ParallelLibrary.cpp.patch for Dakota 5.3.1.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#625} with diff file ISSM-16021-16022.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: starting to add Subelement2 migration in Penta\\
+\vspace{3em}
+
+\noindent \textbf{Change \#626} with diff file ISSM-16022-16023.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no constraint for now in bal vel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#627} with diff file ISSM-16023-16024.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: CHG: working on Subelement2 migration in Penta\\
+\vspace{3em}
+
+\noindent \textbf{Change \#628} with diff file ISSM-16024-16025.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added node local id (lid), required to speed up stiffness matrix preallocation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#629} with diff file ISSM-16025-16026.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h\\
+Export determination: 6. \\
+Rationale: NEW: added node local id (lid), required to speed up stiffness matrix preallocation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#630} with diff file ISSM-16026-16027.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/steadystate\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp M /issm/trunk-jpl/src/c/shared/Elements/elements.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/thermal.m\\
+Export determination: 6. \\
+Rationale: ADD: update enthalpy module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#631} with diff file ISSM-16027-16028.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx A /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp A /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\\
+Export determination: 6. \\
+Rationale: ADD: missing postprocessing module for enthalpy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#632} with diff file ISSM-16028-16029.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m\\
+Export determination: 6. \\
+Rationale: \\
+\vspace{3em}
+
+\noindent \textbf{Change \#633} with diff file ISSM-16029-16030.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp\\
+Export determination: 6. \\
+Rationale: ADD: missing enums for enthalpy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#634} with diff file ISSM-16030-16031.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: synchronized StringToEnum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#635} with diff file ISSM-16031-16032.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#636} with diff file ISSM-16032-16033.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#637} with diff file ISSM-16033-16034.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#638} with diff file ISSM-16034-16035.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: using GetInputOnVertices in enthalpy modules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#639} with diff file ISSM-16035-16036.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use nodes Lid to allocate stiffness matrix (divides allocation time by 10)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#640} with diff file ISSM-16036-16037.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: balance velocitis now use observed directions if provided\\
+\vspace{3em}
+
+\noindent \textbf{Change \#641} with diff file ISSM-16037-16038.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some more cleaning in enthalpy postprocessing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#642} with diff file ISSM-16038-16039.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed profiling lines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#643} with diff file ISSM-16039-16040.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test122.m M /issm/trunk-jpl/test/NightlyRun/test325.m M /issm/trunk-jpl/test/NightlyRun/test326.m M /issm/trunk-jpl/test/NightlyRun/test327.m M /issm/trunk-jpl/test/NightlyRun/test431.m M /issm/trunk-jpl/test/NightlyRun/test432.m\\
+Export determination: 6. \\
+Rationale: CHG: Need watercolumn initial values to run enthalpy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#644} with diff file ISSM-16040-16041.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/initialization.m M /issm/trunk-jpl/src/m/classes/initialization.py\\
+Export determination: 6. \\
+Rationale: CHG: check that you have watercolumn in model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#645} with diff file ISSM-16041-16042.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test120.py M /issm/trunk-jpl/test/NightlyRun/test121.py M /issm/trunk-jpl/test/NightlyRun/test122.py M /issm/trunk-jpl/test/NightlyRun/test325.py M /issm/trunk-jpl/test/NightlyRun/test326.py M /issm/trunk-jpl/test/NightlyRun/test327.py M /issm/trunk-jpl/test/NightlyRun/test431.py M /issm/trunk-jpl/test/NightlyRun/test432.py\\
+Export determination: 6. \\
+Rationale: BUG: missing watercolumn initialization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#646} with diff file ISSM-16042-16043.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Loads/Load.h M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.h M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.h\\
+Export determination: 6. \\
+Rationale: NEW: speeding up matrix preallocation process again, by keeping track of flags to revert\\
+\vspace{3em}
+
+\noindent \textbf{Change \#647} with diff file ISSM-16043-16044.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: chaining algorithm can work with lids only instead of sids\\
+\vspace{3em}
+
+\noindent \textbf{Change \#648} with diff file ISSM-16044-16045.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive530.nc A /issm/trunk-jpl/test/Archives/Archive531.nc M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py A /issm/trunk-jpl/test/NightlyRun/test530.m A /issm/trunk-jpl/test/NightlyRun/test530.py A /issm/trunk-jpl/test/NightlyRun/test531.m A /issm/trunk-jpl/test/NightlyRun/test531.py\\
+Export determination: 6. \\
+Rationale: NEW: added balance velocity tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#649} with diff file ISSM-16045-16046.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity M /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#650} with diff file ISSM-16046-16047.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/historyISSM.m\\
+Export determination: 6. \\
+Rationale: CHG: updated matlab history\\
+\vspace{3em}
+
+\noindent \textbf{Change \#651} with diff file ISSM-16047-16048.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/controltao\_core.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added gradient\\
+\vspace{3em}
+
+\noindent \textbf{Change \#652} with diff file ISSM-16048-16049.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed memory leak for thickness\\
+\vspace{3em}
+
+\noindent \textbf{Change \#653} with diff file ISSM-16049-16050.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/exp/Shp2Exp.m\\
+Export determination: 6. \\
+Rationale: CHG: go from shapefile to exp file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#654} with diff file ISSM-16050-16051.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\\
+Export determination: 6. \\
+Rationale: BUG: wrong count of arguments passed to DeleteData\\
+\vspace{3em}
+
+\noindent \textbf{Change \#655} with diff file ISSM-16051-16052.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m\\
+Export determination: 6. \\
+Rationale: CHG: do not loook for expfile if expdisp not provided\\
+\vspace{3em}
+
+\noindent \textbf{Change \#656} with diff file ISSM-16052-16053.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/scaleruler.m\\
+Export determination: 6. \\
+Rationale: NEW: scaleruler now takes into account units\\
+\vspace{3em}
+
+\noindent \textbf{Change \#657} with diff file ISSM-16053-16054.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_scatter.m\\
+Export determination: 6. \\
+Rationale: NEW: automatically disseminate data, depending on cutoff value\\
+\vspace{3em}
+
+\noindent \textbf{Change \#658} with diff file ISSM-16054-16055.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive122.nc M /issm/trunk-jpl/test/Archives/Archive327.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc\\
+Export determination: 6. \\
+Rationale: CHG: changed archives for improvements in enthalpy solution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#659} with diff file ISSM-16055-16056.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/interp/averaging.m A /issm/trunk-jpl/src/m/interp/averaging.py\\
+Export determination: 6. \\
+Rationale: NEW: python version of averaging function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#660} with diff file ISSM-16056-16057.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/mech/analyticaldamage.m A /issm/trunk-jpl/src/m/mech/analyticaldamage.py\\
+Export determination: 6. \\
+Rationale: NEW: matlab and python functions to calculate damage analytically for an ice shelf (still needs some debugging and cleanup)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#661} with diff file ISSM-16057-16058.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-murdo-nopetsc.sh\\
+Export determination: 6. \\
+Rationale: CHG: need to point to the right metis\\
+\vspace{3em}
+
+\noindent \textbf{Change \#662} with diff file ISSM-16058-16059.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity M /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#663} with diff file ISSM-16059-16060.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/tai M /issm/trunk-jpl/scripts/vie M /issm/trunk-jpl/scripts/vil\\
+Export determination: 6. \\
+Rationale: CHG: simplifying tai vil and vie\\
+\vspace{3em}
+
+\noindent \textbf{Change \#664} with diff file ISSM-16060-16061.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/externalpackages/mpich\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#665} with diff file ISSM-16061-16062.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test120.py M /issm/trunk-jpl/test/NightlyRun/test209.m M /issm/trunk-jpl/test/NightlyRun/test209.py M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test274.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test508.py\\
+Export determination: 6. \\
+Rationale: CHG: adjusted tolerances for success in the MPI, MUMPS but no PETSC nightlys\\
+\vspace{3em}
+
+\noindent \textbf{Change \#666} with diff file ISSM-16062-16063.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-larsen-gia.sh M /issm/trunk-jpl/configs/config-linux64-larsen.sh M /issm/trunk-jpl/configs/config-linux64-murdo.sh M /issm/trunk-jpl/configs/config-linux64-ubuntu64.sh\\
+Export determination: 6. \\
+Rationale: CHG: scotch not required anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#667} with diff file ISSM-16063-16064.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive101.nc M /issm/trunk-jpl/test/Archives/Archive102.nc M /issm/trunk-jpl/test/Archives/Archive103.nc M /issm/trunk-jpl/test/Archives/Archive104.nc M /issm/trunk-jpl/test/Archives/Archive105.nc M /issm/trunk-jpl/test/Archives/Archive106.nc M /issm/trunk-jpl/test/Archives/Archive107.nc M /issm/trunk-jpl/test/Archives/Archive108.nc M /issm/trunk-jpl/test/Archives/Archive109.nc M /issm/trunk-jpl/test/Archives/Archive110.nc M /issm/trunk-jpl/test/Archives/Archive111.nc M /issm/trunk-jpl/test/Archives/Archive112.nc M /issm/trunk-jpl/test/Archives/Archive113.nc M /issm/trunk-jpl/test/Archives/Archive114.nc M /issm/trunk-jpl/test/Archives/Archive115.nc M /issm/trunk-jpl/test/Archives/Archive116.nc M /issm/trunk-jpl/test/Archives/Archive117.nc M /issm/trunk-jpl/test/Archives/Archive118.nc M /issm/trunk-jpl/test/Archives/Archive119.nc M /issm/trunk-jpl/test/Archives/Archive120.nc M /issm/trunk-jpl/test/Archives/Archive121.nc M /issm/trunk-jpl/test/Archives/Archive122.nc M /issm/trunk-jpl/test/Archives/Archive201.nc M /issm/trunk-jpl/test/Archives/Archive202.nc M /issm/trunk-jpl/test/Archives/Archive203.nc M /issm/trunk-jpl/test/Archives/Archive204.nc M /issm/trunk-jpl/test/Archives/Archive205.nc M /issm/trunk-jpl/test/Archives/Archive206.nc M /issm/trunk-jpl/test/Archives/Archive207.nc M /issm/trunk-jpl/test/Archives/Archive208.nc M /issm/trunk-jpl/test/Archives/Archive209.nc M /issm/trunk-jpl/test/Archives/Archive210.nc M /issm/trunk-jpl/test/Archives/Archive211.nc M /issm/trunk-jpl/test/Archives/Archive212.nc M /issm/trunk-jpl/test/Archives/Archive213.nc M /issm/trunk-jpl/test/Archives/Archive214.nc M /issm/trunk-jpl/test/Archives/Archive215.nc M /issm/trunk-jpl/test/Archives/Archive216.nc M /issm/trunk-jpl/test/Archives/Archive217.nc M /issm/trunk-jpl/test/Archives/Archive218.nc M /issm/trunk-jpl/test/Archives/Archive219.nc M /issm/trunk-jpl/test/Archives/Archive220.nc M /issm/trunk-jpl/test/Archives/Archive221.nc M /issm/trunk-jpl/test/Archives/Archive222.nc M /issm/trunk-jpl/test/Archives/Archive223.nc M /issm/trunk-jpl/test/Archives/Archive224.nc M /issm/trunk-jpl/test/Archives/Archive225.nc M /issm/trunk-jpl/test/Archives/Archive226.nc M /issm/trunk-jpl/test/Archives/Archive227.nc M /issm/trunk-jpl/test/Archives/Archive228.nc M /issm/trunk-jpl/test/Archives/Archive229.nc M /issm/trunk-jpl/test/Archives/Archive230.nc M /issm/trunk-jpl/test/Archives/Archive231.nc M /issm/trunk-jpl/test/Archives/Archive232.nc M /issm/trunk-jpl/test/Archives/Archive233.nc M /issm/trunk-jpl/test/Archives/Archive234.nc M /issm/trunk-jpl/test/Archives/Archive235.nc M /issm/trunk-jpl/test/Archives/Archive236.nc M /issm/trunk-jpl/test/Archives/Archive237.nc M /issm/trunk-jpl/test/Archives/Archive270.nc M /issm/trunk-jpl/test/Archives/Archive272.nc M /issm/trunk-jpl/test/Archives/Archive274.nc M /issm/trunk-jpl/test/Archives/Archive280.nc M /issm/trunk-jpl/test/Archives/Archive285.nc M /issm/trunk-jpl/test/Archives/Archive290.nc M /issm/trunk-jpl/test/Archives/Archive301.nc M /issm/trunk-jpl/test/Archives/Archive302.nc M /issm/trunk-jpl/test/Archives/Archive303.nc M /issm/trunk-jpl/test/Archives/Archive304.nc M /issm/trunk-jpl/test/Archives/Archive305.nc M /issm/trunk-jpl/test/Archives/Archive306.nc M /issm/trunk-jpl/test/Archives/Archive307.nc M /issm/trunk-jpl/test/Archives/Archive308.nc M /issm/trunk-jpl/test/Archives/Archive309.nc M /issm/trunk-jpl/test/Archives/Archive310.nc M /issm/trunk-jpl/test/Archives/Archive311.nc M /issm/trunk-jpl/test/Archives/Archive312.nc M /issm/trunk-jpl/test/Archives/Archive313.nc M /issm/trunk-jpl/test/Archives/Archive314.nc M /issm/trunk-jpl/test/Archives/Archive315.nc M /issm/trunk-jpl/test/Archives/Archive316.nc M /issm/trunk-jpl/test/Archives/Archive317.nc M /issm/trunk-jpl/test/Archives/Archive318.nc M /issm/trunk-jpl/test/Archives/Archive319.nc M /issm/trunk-jpl/test/Archives/Archive320.nc M /issm/trunk-jpl/test/Archives/Archive321.nc M /issm/trunk-jpl/test/Archives/Archive322.nc M /issm/trunk-jpl/test/Archives/Archive324.nc M /issm/trunk-jpl/test/Archives/Archive325.nc M /issm/trunk-jpl/test/Archives/Archive326.nc M /issm/trunk-jpl/test/Archives/Archive327.nc M /issm/trunk-jpl/test/Archives/Archive328.nc M /issm/trunk-jpl/test/Archives/Archive329.nc M /issm/trunk-jpl/test/Archives/Archive331.nc M /issm/trunk-jpl/test/Archives/Archive332.nc M /issm/trunk-jpl/test/Archives/Archive401.nc M /issm/trunk-jpl/test/Archives/Archive402.nc M /issm/trunk-jpl/test/Archives/Archive403.nc M /issm/trunk-jpl/test/Archives/Archive404.nc M /issm/trunk-jpl/test/Archives/Archive405.nc M /issm/trunk-jpl/test/Archives/Archive406.nc M /issm/trunk-jpl/test/Archives/Archive407.nc M /issm/trunk-jpl/test/Archives/Archive408.nc M /issm/trunk-jpl/test/Archives/Archive409.nc M /issm/trunk-jpl/test/Archives/Archive410.nc M /issm/trunk-jpl/test/Archives/Archive411.nc M /issm/trunk-jpl/test/Archives/Archive412.nc M /issm/trunk-jpl/test/Archives/Archive413.nc M /issm/trunk-jpl/test/Archives/Archive415.nc M /issm/trunk-jpl/test/Archives/Archive416.nc M /issm/trunk-jpl/test/Archives/Archive419.nc M /issm/trunk-jpl/test/Archives/Archive420.nc M /issm/trunk-jpl/test/Archives/Archive421.nc M /issm/trunk-jpl/test/Archives/Archive422.nc M /issm/trunk-jpl/test/Archives/Archive423.nc M /issm/trunk-jpl/test/Archives/Archive425.nc M /issm/trunk-jpl/test/Archives/Archive428.nc M /issm/trunk-jpl/test/Archives/Archive429.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc M /issm/trunk-jpl/test/Archives/Archive434.nc M /issm/trunk-jpl/test/Archives/Archive450.nc M /issm/trunk-jpl/test/Archives/Archive455.nc M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.par M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.par M /issm/trunk-jpl/test/Par/SquareShelf2.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py\\
+Export determination: 6. \\
+Rationale: CHG: added a small slope in x direction for all nighlty runs to avoid 0 values problem\\
+\vspace{3em}
+
+\noindent \textbf{Change \#668} with diff file ISSM-16064-16065.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive323.nc M /issm/trunk-jpl/test/NightlyRun/test323.m M /issm/trunk-jpl/test/NightlyRun/test323.py\\
+Export determination: 6. \\
+Rationale: CHG: changes final time of test 323 to have 3 iterations (time\_adapt)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#669} with diff file ISSM-16065-16066.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/analyticaldamage.m M /issm/trunk-jpl/src/m/mech/analyticaldamage.py\\
+Export determination: 6. \\
+Rationale: CHG: cleanup of damage function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#670} with diff file ISSM-16066-16067.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp\\
+Export determination: 6. \\
+Rationale: CHG refactored mumps logic and setup skeleton for mumps solver adjoint\\
+\vspace{3em}
+
+\noindent \textbf{Change \#671} with diff file ISSM-16067-16068.diff: \\
+Function name: \\
+M /issm/trunk-jpl/startup.py\\
+Export determination: 6. \\
+Rationale: CHG: added plotmodel import statement given its ubiquity\\
+\vspace{3em}
+
+\noindent \textbf{Change \#672} with diff file ISSM-16068-16069.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp\\
+Export determination: 6. \\
+Rationale: CHG fixed initialization sequence\\
+\vspace{3em}
+
+\noindent \textbf{Change \#673} with diff file ISSM-16069-16070.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-arm-linux.sh\\
+Export determination: 6. \\
+Rationale: CHG: not needed for arm build\\
+\vspace{3em}
+
+\noindent \textbf{Change \#674} with diff file ISSM-16070-16071.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp M /issm/trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h\\
+Export determination: 6. \\
+Rationale: CHG update mumps include file following the model of the gsl include file; pass a Parameters instance all the way to the solver so we can access the adolc EDF structure; do the solver registration based on configurations options - the function pointers are separate structure members and can coexist.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#675} with diff file ISSM-16071-16072.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp\\
+Export determination: 6. \\
+Rationale: CHG didn't mean to commit that in the first place\\
+\vspace{3em}
+
+\noindent \textbf{Change \#676} with diff file ISSM-16072-16073.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test290.py M /issm/trunk-jpl/test/NightlyRun/test403.py M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test421.py M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test422.py\\
+Export determination: 6. \\
+Rationale: CHG: updated some tolerances for thickness varying with x\\
+\vspace{3em}
+
+\noindent \textbf{Change \#677} with diff file ISSM-16073-16074.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive433.nc M /issm/trunk-jpl/test/NightlyRun/test433.m\\
+Export determination: 6. \\
+Rationale: CHG: added subement2migration test in 3d\\
+\vspace{3em}
+
+\noindent \textbf{Change \#678} with diff file ISSM-16074-16075.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.h\\
+Export determination: 6. \\
+Rationale: CHG: changd gausspenta for subelement2 migration\\
+\vspace{3em}
+
+\noindent \textbf{Change \#679} with diff file ISSM-16075-16076.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test120.py M /issm/trunk-jpl/test/NightlyRun/test206.m M /issm/trunk-jpl/test/NightlyRun/test206.py M /issm/trunk-jpl/test/NightlyRun/test209.m M /issm/trunk-jpl/test/NightlyRun/test209.py M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test216.py M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test274.py M /issm/trunk-jpl/test/NightlyRun/test318.m M /issm/trunk-jpl/test/NightlyRun/test318.py M /issm/trunk-jpl/test/NightlyRun/test332.m\\
+Export determination: 6. \\
+Rationale: CHG: adjusting tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#680} with diff file ISSM-16076-16077.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/mobile/native/Main.cpp\\
+Export determination: 6. \\
+Rationale: CHG: new comm value\\
+\vspace{3em}
+
+\noindent \textbf{Change \#681} with diff file ISSM-16082-16083.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/mobile/native/Main.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some adjustments to go back to only one slider.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#682} with diff file ISSM-16083-16084.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp\\
+Export determination: 6. \\
+Rationale: CHG compilable with ampi/adolc now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#683} with diff file ISSM-16084-16085.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: missing AMPI include path\\
+\vspace{3em}
+
+\noindent \textbf{Change \#684} with diff file ISSM-16085-16086.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp\\
+Export determination: 6. \\
+Rationale: CHG no special version for ampi needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#685} with diff file ISSM-16086-16087.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG need type consistency IssmPDouble - ISSM\_MPI\_PDOUBLE\\
+\vspace{3em}
+
+\noindent \textbf{Change \#686} with diff file ISSM-16087-16088.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG type consistency\\
+\vspace{3em}
+
+\noindent \textbf{Change \#687} with diff file ISSM-16088-16089.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some formatting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#688} with diff file ISSM-16089-16090.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test404.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#689} with diff file ISSM-16090-16091.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h\\
+Export determination: 6. \\
+Rationale: CHG added missing definition\\
+\vspace{3em}
+
+\noindent \textbf{Change \#690} with diff file ISSM-16091-16092.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: issue with miscast\\
+\vspace{3em}
+
+\noindent \textbf{Change \#691} with diff file ISSM-16092-16093.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive3001.nc M /issm/trunk-jpl/test/Archives/Archive3002.nc M /issm/trunk-jpl/test/Archives/Archive3003.nc M /issm/trunk-jpl/test/Archives/Archive3004.nc M /issm/trunk-jpl/test/Archives/Archive3005.nc M /issm/trunk-jpl/test/Archives/Archive3006.nc M /issm/trunk-jpl/test/Archives/Archive3007.nc M /issm/trunk-jpl/test/Archives/Archive3008.nc M /issm/trunk-jpl/test/Archives/Archive3009.nc M /issm/trunk-jpl/test/Archives/Archive3010.nc M /issm/trunk-jpl/test/Archives/Archive3015.nc M /issm/trunk-jpl/test/Archives/Archive3019.nc M /issm/trunk-jpl/test/Archives/Archive3020.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating archives to reflect changes by Helene Seroussi on slopes x\\
+\vspace{3em}
+
+\noindent \textbf{Change \#692} with diff file ISSM-16093-16094.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test421.m\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#693} with diff file ISSM-16094-16095.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/discover.m\\
+Export determination: 6. \\
+Rationale: CHG: add full path for output files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#694} with diff file ISSM-16095-16096.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.py\\
+Export determination: 6. \\
+Rationale: CHG: added try so that python port works when matplotlib is not installed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#695} with diff file ISSM-16096-16097.diff: \\
+Function name: \\
+M /issm/trunk-jpl/Makefile.am M /issm/trunk-jpl/configure.ac M /issm/trunk-jpl/externalpackages/valgrind/install-macosx64.sh M /issm/trunk-jpl/externalpackages/valgrind/issm.supp M /issm/trunk-jpl/externalpackages/vim/addons/vimrc M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/m/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: only install src/m/*m and */py in bin/ if enable-development is no\\
+\vspace{3em}
+
+\noindent \textbf{Change \#696} with diff file ISSM-16097-16098.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_mesh.py\\
+Export determination: 6. \\
+Rationale: BUG: disable colorbar for mesh plot\\
+\vspace{3em}
+
+\noindent \textbf{Change \#697} with diff file ISSM-16098-16099.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/exp/expcoarsen.py\\
+Export determination: 6. \\
+Rationale: CHG: python script to coarsen domain outline\\
+\vspace{3em}
+
+\noindent \textbf{Change \#698} with diff file ISSM-16099-16100.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed issue with locating the python database files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#699} with diff file ISSM-16100-16101.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed issue with database extension name\\
+\vspace{3em}
+
+\noindent \textbf{Change \#700} with diff file ISSM-16101-16102.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added check on coordinate system during model processor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#701} with diff file ISSM-16102-16103.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/cython M /issm/trunk-jpl/externalpackages/matplotlib/install-macosx64.sh M /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp M /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp M /issm/trunk-jpl/src/m/exp/expcoarsen.py M /issm/trunk-jpl/startup.py\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files. Fixed some issues with miscast ISSM\_MPI\_DOUBLE and ISSM\_MPI\_PDOUBLE types.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#702} with diff file ISSM-16103-16104.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: defaulting to non development trunk\\
+\vspace{3em}
+
+\noindent \textbf{Change \#703} with diff file ISSM-16104-16105.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/valgrind/install-altix64.sh M /issm/trunk-jpl/externalpackages/valgrind/install-linux64.sh M /issm/trunk-jpl/externalpackages/valgrind/install-macosx32.sh M /issm/trunk-jpl/externalpackages/valgrind/install-macosx64.sh M /issm/trunk-jpl/externalpackages/valgrind/install-win32.sh\\
+Export determination: 6. \\
+Rationale: CHG: switching to valgrind 3.8.1\\
+\vspace{3em}
+
+\noindent \textbf{Change \#704} with diff file ISSM-16105-16106.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/geometry/slope.py\\
+Export determination: 6. \\
+Rationale: CHG: slope python module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#705} with diff file ISSM-16106-16107.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/report.sh\\
+Export determination: 6. \\
+Rationale: CHG: no more than 20 files anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#706} with diff file ISSM-16107-16108.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: fixed Makefile.am for python code, which is not in every matlab directory\\
+\vspace{3em}
+
+\noindent \textbf{Change \#707} with diff file ISSM-16108-16109.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/inversions/parametercontroldrag.py\\
+Export determination: 6. \\
+Rationale: CHG: started conversion of these files to python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#708} with diff file ISSM-16109-16110.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed issue with organizer and databases\\
+\vspace{3em}
+
+\noindent \textbf{Change \#709} with diff file ISSM-16110-16111.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/cloud.m\\
+Export determination: 6. \\
+Rationale: CHG: need to cd to execution dir\\
+\vspace{3em}
+
+\noindent \textbf{Change \#710} with diff file ISSM-16111-16112.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/cloud.m\\
+Export determination: 6. \\
+Rationale: CHG: update non-interactive\\
+\vspace{3em}
+
+\noindent \textbf{Change \#711} with diff file ISSM-16112-16113.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/waitonlock.m\\
+Export determination: 6. \\
+Rationale: CHG: need a special case for cloud\\
+\vspace{3em}
+
+\noindent \textbf{Change \#712} with diff file ISSM-16113-16114.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/shared/MemOps/MemOps.cpp M /issm/trunk-jpl/src/c/shared/MemOps/MemOps.h\\
+Export determination: 6. \\
+Rationale: CHG added specialization of adhouble xNew so that we ensure contiguous locations\\
+\vspace{3em}
+
+\noindent \textbf{Change \#713} with diff file ISSM-16114-16115.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG adolc tape numbered by rank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#714} with diff file ISSM-16115-16116.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG the working assumption is that all independents and dependent designations happen on rank 0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#715} with diff file ISSM-16116-16117.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IndependentObject.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed issue with scalar\\
+\vspace{3em}
+
+\noindent \textbf{Change \#716} with diff file ISSM-16117-16118.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/dev A /issm/trunk-jpl/src/m/dev/developmentpath.m A /issm/trunk-jpl/src/m/dev/developmentpath.py\\
+Export determination: 6. \\
+Rationale: NEW: added development path to replace startup.* Since ISSM can now be installed anywhere, most people will just use issmdir/bin and issmdir/lib, not src/m which is for developers only. Regular users: matlab -> addpath('/usr/issm/bin/','/usr/issm/lib/'); ptyhon -> import sys sys.path.append('/usr/issm/bin/') sys.path.append('/usr/issm/lib/') Developers: matlab -> matlab -nodesktop -nosplash -r "addpath \$ISSM\_DIR/src/m/dev; developmentpath;" python -> ipython -i \$ISSM\_DIR/src/m/dev/developmentpath.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#717} with diff file ISSM-16118-16119.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG make sure independent/dependent settings happen only on rank 0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#718} with diff file ISSM-16119-16120.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/dev/developmentpath.m D /issm/trunk-jpl/src/m/dev/developmentpath.py A /issm/trunk-jpl/src/m/dev/devpath.m (from /issm/trunk-jpl/src/m/dev/developmentpath.m:16117) A /issm/trunk-jpl/src/m/dev/devpath.py (from /issm/trunk-jpl/src/m/dev/developmentpath.py:16117) D /issm/trunk-jpl/startup.m D /issm/trunk-jpl/startup.py\\
+Export determination: 6. \\
+Rationale: NEW: added devpath to replace startup.* Since ISSM can now be installed anywhere, most people will just use issmdir/bin and issmdir/lib, not src/m which is for developers only. Regular users: matlab -> addpath('/usr/issm/bin/','/usr/issm/lib/'); ptyhon -> import sys sys.path.append('/usr/issm/bin/') sys.path.append('/usr/issm/lib/') Developers: matlab -> matlab -nodesktop -nosplash -r "addpath \$ISSM\_DIR/src/m/dev; devpath;" python -> ipython -i \$ISSM\_DIR/src/m/dev/devpath.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#719} with diff file ISSM-16120-16121.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG rank guard only on the actual dependent declaration operation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#720} with diff file ISSM-16121-16122.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG guard the function pointer settings based on the configuration\\
+\vspace{3em}
+
+\noindent \textbf{Change \#721} with diff file ISSM-16122-16123.diff: \\
+Function name: \\
+M /issm/trunk-jpl/Makefile.am\\
+Export determination: 6. \\
+Rationale: BUG: no startup anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#722} with diff file ISSM-16123-16124.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: CHG: no startup anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#723} with diff file ISSM-16124-16125.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG more verbose\\
+\vspace{3em}
+
+\noindent \textbf{Change \#724} with diff file ISSM-16125-16126.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.h M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.h M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/classes/Update.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h\\
+Export determination: 6. \\
+Rationale: CHG: cleaning up Node that is not an Update object anymore, and removed unused InputUpdateFromVector functions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#725} with diff file ISSM-16126-16127.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h A /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx A /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp A /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h A /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx A /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp A /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h M /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.h A /issm/trunk-jpl/src/c/modules/SystemMatricesx A /issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp A /issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.h M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_adjoint\_linear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_hydro\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_linear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_newton.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_stokescoupling\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_thermal\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moving SystemMatrices back to modules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#726} with diff file ISSM-16127-16128.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/dakota\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing warning about char*\\
+\vspace{3em}
+
+\noindent \textbf{Change \#727} with diff file ISSM-16128-16129.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: added ISSM\_PREFIX\\
+\vspace{3em}
+
+\noindent \textbf{Change \#728} with diff file ISSM-16129-16130.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: make this bcast call type consistent\\
+\vspace{3em}
+
+\noindent \textbf{Change \#729} with diff file ISSM-16130-16131.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#730} with diff file ISSM-16131-16132.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG tag is my\_rank here too\\
+\vspace{3em}
+
+\noindent \textbf{Change \#731} with diff file ISSM-16132-16133.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp\\
+Export determination: 6. \\
+Rationale: CHG ensure contigous explicit calls are no longer needed here because they are embedded in the xNew specialization; m should be ==n but I changed it anyway; in order to update the adjoint of the matrix I need first broadcast the original solution and the adjoint of the right hand side because the matrix is assembled and therefore the individual matrix partitions must be updated on the respective ranks; also to get the matrix elements right we use the original values for the indices in the iArr because the local\_irn/local\_jcn may be changed during the factorization.\\
+\vspace{3em}
+
Index: /issm/oecreview/Archive/15392-16133/r1.tex
===================================================================
--- /issm/oecreview/Archive/15392-16133/r1.tex	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/r1.tex	(revision 16134)
@@ -0,0 +1,1 @@
+15392
Index: /issm/oecreview/Archive/15392-16133/r2.tex
===================================================================
--- /issm/oecreview/Archive/15392-16133/r2.tex	(revision 16134)
+++ /issm/oecreview/Archive/15392-16133/r2.tex	(revision 16134)
@@ -0,0 +1,1 @@
+16133
